diff --git a/Kevin_Meade/afiedt.buf b/Kevin_Meade/afiedt.buf new file mode 100644 index 0000000..14eca0c --- /dev/null +++ b/Kevin_Meade/afiedt.buf @@ -0,0 +1,7 @@ +SELECT column_id, + column_name, + histogram +FROM user_tab_columns +WHERE table_name = 'R3' +ORDER BY column_id +/ diff --git a/Kevin_Meade/loadplanfromcache11g.sql b/Kevin_Meade/loadplanfromcache11g.sql new file mode 100644 index 0000000..6f97bff --- /dev/null +++ b/Kevin_Meade/loadplanfromcache11g.sql @@ -0,0 +1,97 @@ +-- +-- load qep information into the plan_table from gv$sql_plan +-- +-- requires you to identify the inst_id,sql_id,child_number first +-- +-- parameter 1 = inst_id +-- parameter 2 = sql_id +-- parameter 3 = child_number +-- +-- @loadplanfromcache11g.sql 1 6zcb0r0rch025 0 +-- +-- then use the normal plan_table scripts to get the goodness +-- +-- @showplan11g +-- @showplandatamodel11g +-- ... +-- + +insert into plan_table +( + PLAN_ID +,TIMESTAMP +,REMARKS +,OPERATION +,OPTIONS +,OBJECT_NODE +,OBJECT_OWNER +,OBJECT_NAME +,OBJECT_ALIAS +,object_instance +,OBJECT_TYPE +,OPTIMIZER +,SEARCH_COLUMNS +,ID +,PARENT_ID +,DEPTH +,POSITION +,COST +,CARDINALITY +,BYTES +,OTHER_TAG +,PARTITION_START +,PARTITION_STOP +,PARTITION_ID +,OTHER +,OTHER_XML +,DISTRIBUTION +,CPU_COST +,IO_COST +,TEMP_SPACE +,ACCESS_PREDICATES +,FILTER_PREDICATES +,PROJECTION +,TIME +,QBLOCK_NAME +) +select + nvl((select max(plan_id) from plan_table),0)+1 plan_id +,TIMESTAMP +,REMARKS +,OPERATION +,OPTIONS +,OBJECT_NODE +,OBJECT_OWNER +,OBJECT_NAME +,OBJECT_ALIAS +,OBJECT# object_instance +,OBJECT_TYPE +,OPTIMIZER +,SEARCH_COLUMNS +,ID +,PARENT_ID +,DEPTH +,POSITION +,COST +,CARDINALITY +,BYTES +,OTHER_TAG +,PARTITION_START +,PARTITION_STOP +,PARTITION_ID +,OTHER +,OTHER_XML +,DISTRIBUTION +,CPU_COST +,IO_COST +,TEMP_SPACE +,ACCESS_PREDICATES +,FILTER_PREDICATES +,PROJECTION +,TIME +,QBLOCK_NAME +from gv$sql_plan +where inst_id = &&1 +and sql_id = '&&2' +and child_number = &&3 +/ diff --git a/Kevin_Meade/loadplanfromhist11g.sql b/Kevin_Meade/loadplanfromhist11g.sql new file mode 100644 index 0000000..cf77279 --- /dev/null +++ b/Kevin_Meade/loadplanfromhist11g.sql @@ -0,0 +1,103 @@ +-- +-- load qep information into the plan_table from DBA_HIST_SQL_PLAN (history of monitored plans) +-- +-- requires you to identify the sql_id and date of when you want your plan +-- does a bob barker lookup based on the date, for the sql_id supplied +-- note use of +1 second to the date in order to account for the millseconds in the timestamp +-- note also the use of a specific format mask 'rrrrmmddhh24miss' +-- often you will need to guess about the time unless you know it from some other place +-- +-- parameter 1 = sql_id +-- parameter 2 = timestamp (in the right format) +-- +-- @loadplanfromhist11g.sql 6zcb0r0rch025 2014080212:10:03 +-- +-- then use the normal plan_table scripts to get the goodness +-- +-- @showplan11g +-- @showplandatamodel11g +-- ... +-- +insert into plan_table +( + PLAN_ID +,TIMESTAMP +,REMARKS +,OPERATION +,OPTIONS +,OBJECT_NODE +,OBJECT_OWNER +,OBJECT_NAME +,OBJECT_ALIAS +,object_instance +,OBJECT_TYPE +,OPTIMIZER +,SEARCH_COLUMNS +,ID +,PARENT_ID +,DEPTH +,POSITION +,COST +,CARDINALITY +,BYTES +,OTHER_TAG +,PARTITION_START +,PARTITION_STOP +,PARTITION_ID +,OTHER +,OTHER_XML +,DISTRIBUTION +,CPU_COST +,IO_COST +,TEMP_SPACE +,ACCESS_PREDICATES +,FILTER_PREDICATES +,PROJECTION +,TIME +,QBLOCK_NAME +) +select + nvl((select max(plan_id) from plan_table),0)+1 plan_id +,TIMESTAMP +,REMARKS +,OPERATION +,OPTIONS +,OBJECT_NODE +,OBJECT_OWNER +,OBJECT_NAME +,OBJECT_ALIAS +,OBJECT# object_instance +,OBJECT_TYPE +,OPTIMIZER +,SEARCH_COLUMNS +,ID +,PARENT_ID +,DEPTH +,POSITION +,COST +,CARDINALITY +,BYTES +,OTHER_TAG +,PARTITION_START +,PARTITION_STOP +,PARTITION_ID +,OTHER +,OTHER_XML +,DISTRIBUTION +,CPU_COST +,IO_COST +,TEMP_SPACE +,ACCESS_PREDICATES +,FILTER_PREDICATES +,PROJECTION +,TIME +,QBLOCK_NAME +from dba_hist_sql_plan +where sql_id = '&&1' +and timestamp = ( + select max(timestamp) + from dba_hist_sql_plan + where sql_id = '&&1' + and timestamp <= to_date('&&2','rrrrmmddhh24miss')+1/24/60/60 + ) +/ diff --git a/Kevin_Meade/showallscanrates.sql b/Kevin_Meade/showallscanrates.sql new file mode 100644 index 0000000..f026734 --- /dev/null +++ b/Kevin_Meade/showallscanrates.sql @@ -0,0 +1,113 @@ +-- +-- show have fast scan operations +-- (sorting / hashing / table scans / index scans) will take +-- +-- provides a MB/second metric that can be used to compare different systems +-- has plenty of flaws yet still works great +-- +-- also provides an expected end time for the operation +-- though this can be misleading +-- +-- usage is: @SHOWALLSCANRATES +-- + +--clear breaks +--clear computes +--clear columns +col time_remaining head 'Seconds|Remaining' +col scanned_blocks head 'Scanned Blocks|or Indexes' +col all_blocks head 'All Blocks|or Indexes' +col blocks_remaining head 'Blocks|or Indexes|Remaining' noprint +col opname format a16 +col target format a40 +col username format a15 +col MB_per_Second form 990.0 head 'MB/s' +col pct_scanned head '%Scanned' format 990.00 +col predicted_runtime_seconds head 'Estmd.|Runtime|Seconds' +col total_blocks head 'Total|Blocks|or|Indexes' +col sid format 99990 +col block_size format 99990 head 'Block|Size' +col id_passes_temp format a25 +break on inst_id skip page + +with + scan_data as ( + select + to_number( + substr(a.message + ,instr(a.message,': ',1,2)+2 + ,instr(a.message,' out of ',1,1)-instr(a.message,': ',1,2)-1 + ) + ) + / to_number( + substr(a.message + ,instr(a.message,' out of ',1,1)+8 + ,instr(a.message,' ',instr(a.message,' out of ',1,1)+8)-instr(a.message,' out of ',1,1)-7 + ) + ) *100 pct_scanned + , to_number( + substr(a.message + ,instr(a.message,' out of ',1,1)+8 + ,instr(a.message,' ',instr(a.message,' out of ',1,1)+8)-instr(a.message,' out of ',1,1)-7 + ) + ) + - to_number( + substr(a.message + ,instr(a.message,': ',1,2)+2 + ,instr(a.message,' out of ',1,1)-instr(a.message,': ',1,2)-1 + ) + ) blocks_remaining + , a.time_remaining + , a.opname + , to_number(b.value) block_size + , a.target + , a.sid + , a.inst_id + , a.username + , a.sql_hash_value + from ( + select + replace(gv$session_longops.message,'RMAN:','RMAN') message + , gv$session_longops.time_remaining + , gv$session_longops.opname + , nvl(gv$session_longops.target,replace(gv$session_longops.target_desc,'Table ')) target + , gv$session_longops.sid + , gv$session_longops.inst_id + , gv$session_longops.username + , gv$session_longops.sql_hash_value + from gv$session_longops + , gv$session + where gv$session_longops.sid = gv$session.sid + and gv$session_longops.inst_id = gv$session.inst_id + and gv$session_longops.sid = gv$session.sid + and gv$session_longops.serial# = gv$session.serial# + and gv$session_longops.time_remaining > 0 + ) a + ,(select value from gv$parameter where name = 'db_block_size' and rownum = 1) b + ) +select + scan_data.inst_id + , round(blocks_remaining*block_size/1024/1024/time_remaining,1) MB_per_Second + , scan_data.time_remaining + , round(time_remaining/(1-pct_scanned/100)) predicted_runtime_seconds + , scan_data.pct_scanned + , scan_data.blocks_remaining + , round(blocks_remaining/(1-pct_scanned/100)) total_blocks + , scan_data.opname + , scan_data.BLOCK_SIZE + , scan_data.target + , ( + select + max(operation_id)||':'||DECODE(MAX(NUMBER_PASSES),0,'OPTIMAL',1,'ONE-PASS',NULL,NULL,'MULTI-PASS('||max(number_passes)||')')||DECODE(max(TEMPSEG_SIZE),NULL,NULL,','||round(max(TEMPSEG_SIZE)/1024/1024)||'M') + from gv$sql_workarea_active + where gv$sql_workarea_active.sid = scan_data.sid + and gv$sql_workarea_active.inst_id = scan_data.inst_id +-- and scan_data.opname in ('Hash Join','Sort Output') +-- and gv$sql_workarea_active.OPERATION_TYPE in ('HASH-JOIN','SORT','WINDOW (SORT)','GROUP BY (SORT)') + ) id_passes_temp + , scan_data.sid + , scan_data.username + , scan_data.sql_hash_value +from scan_data +order by inst_id,username,sid,time_remaining +/ diff --git a/Kevin_Meade/showallworkareas.sql b/Kevin_Meade/showallworkareas.sql new file mode 100644 index 0000000..0ad927f --- /dev/null +++ b/Kevin_Meade/showallworkareas.sql @@ -0,0 +1,12 @@ +-- +-- show work areas in use +-- + +col SQL_EXEC_START noprint +col SQL_EXEC_ID noprint +col WORKAREA_ADDRESS noprint +col OPERATION_TYPE format a20 trunc +col active_time noprint +col expected_size noprint + +select * from gv$sql_workarea_active; diff --git a/Kevin_Meade/showcolstats.sql b/Kevin_Meade/showcolstats.sql new file mode 100644 index 0000000..5e20e71 --- /dev/null +++ b/Kevin_Meade/showcolstats.sql @@ -0,0 +1,76 @@ +-- +-- show all column stats for columns in the specified table +-- requires the function KEV_RAW_TO_STRING +-- very usefull for looking at column recorded HIGH/LOW +-- +-- parameter 1 = owner +-- parameter 2 = table_name +-- +-- usage is: @SHOWCOLSTATS +-- + +/* +CREATE OR replace FUNCTION kev_raw_to_string (rawval RAW, TYPE VARCHAR2) RETURN VARCHAR2 +IS + cn NUMBER; + cv VARCHAR2(32); + cd DATE; + cnv NVARCHAR2(32); + cr ROWID; + cc CHAR(32); +BEGIN + IF ( TYPE = 'NUMBER' ) THEN + dbms_stats.Convert_raw_value(rawval, cn); + RETURN '"'||cn||'"'; + ELSIF ( TYPE = 'VARCHAR2' ) THEN + dbms_stats.Convert_raw_value(rawval, cv); + RETURN '"'||cv||'"'; + ELSIF ( TYPE = 'DATE' ) THEN + dbms_stats.Convert_raw_value(rawval, cd); + RETURN '"'||to_char(cd,'dd-mon-rrrr.hh24:mi:ss')||'"'; + ELSIF ( TYPE = 'NVARCHAR2' ) THEN + dbms_stats.Convert_raw_value(rawval, cnv); + RETURN '"'||cnv||'"'; + ELSIF ( TYPE = 'ROWID' ) THEN + dbms_stats.Convert_raw_value(rawval, cr); + RETURN '"'||cnv||'"'; + ELSIF ( TYPE = 'CHAR' ) THEN + dbms_stats.Convert_raw_value(rawval, cc); + RETURN '"'||cc||'"'; + ELSE + RETURN '"UNSUPPORTED DATA_TYPE"'; + END IF; +exception when others then + return '--- conversion error ---'; +END; +/ +*/ +col low_value format a30 +col high_value format a30 +col last_analyzed format a22 +--select table_name,column_name, num_distinct, num_nulls, num_buckets, sample_size,last_analyzed +select + OWNER +, TABLE_NAME +, COLUMN_NAME +, NUM_DISTINCT +, NUM_NULLS +, NUM_BUCKETS +, SAMPLE_SIZE +, AVG_COL_LEN +, DENSITY +, TO_CHAR(LAST_ANALYZED,'dd-mon-rrrr.hh24:mi:ss') last_analyzed +, GLOBAL_STATS +, USER_STATS +, km21378.kev_raw_to_string (LOW_VALUE,(select data_type from dba_tab_columns b where b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name)) LOW_VALUE +, km21378.kev_raw_to_string (HIGH_VALUE,(select data_type from dba_tab_columns b where b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name)) HIGH_VALUE +from dba_tab_col_statistics a +where (owner,table_name) in +( + (upper('&&1'),upper('&&2')) +) +--and (column_name = 'ROW_TERM_DATE$' or num_buckets > 1) +order by TABLE_NAME,COLUMN_NAME +/ + + diff --git a/Kevin_Meade/showconstraints.sql b/Kevin_Meade/showconstraints.sql new file mode 100644 index 0000000..0d80f16 --- /dev/null +++ b/Kevin_Meade/showconstraints.sql @@ -0,0 +1,39 @@ +-- +-- given a table +-- show is PK/UK/FK constraints +-- and FK constraints that point to it +-- +-- usage is: @SHOWCONSTRAINTS +-- + +break on constraint_name skip 1 on parent_table_name +col column_name format a30 +col sort_order noprint +col select_id noprint + +select a.owner,a.table_name,a.constraint_name,a.constraint_type,c.column_name,b.owner parent_child_owner,b.table_name parent_child_table_name,b.constraint_type,a.index_name,decode(a.constraint_type,'P',1,'U',2) sort_order,1 select_id +from dba_constraints a + ,dba_constraints b + ,dba_cons_columns c +where a.owner = upper('&&1') +and a.table_name = upper('&&2') +and a.r_owner = b.owner(+) +and a.r_constraint_name = b.constraint_name(+) +and a.owner = c.owner +and a.constraint_name = c.constraint_name +and a.constraint_type != 'C' +union all +select a.owner,a.table_name,a.constraint_name,a.constraint_type,c.column_name,b.owner parent_child_owner,b.table_name parent_child_table_name,b.constraint_type,a.index_name,decode(a.constraint_type,'P',1,'U',2) sort_order,2 select_id +from dba_constraints a + ,dba_constraints b + ,dba_cons_columns c +where b.owner = upper('&&1') +and b.table_name = upper('&&2') +and b.constraint_type in ('P','U') +and a.r_owner = b.owner +and a.r_constraint_name = b.constraint_name +and b.table_name != a.table_name +and a.owner = c.owner +and a.constraint_name = c.constraint_name +order by select_id,sort_order,owner,table_name,constraint_name,column_name +/ diff --git a/Kevin_Meade/showgencardinalitycheckcode.sql b/Kevin_Meade/showgencardinalitycheckcode.sql new file mode 100644 index 0000000..9c5b7c4 --- /dev/null +++ b/Kevin_Meade/showgencardinalitycheckcode.sql @@ -0,0 +1,69 @@ +/* + +@gencardinalitycheckcode.sql dwstage ods_pega_report_group_assoc CASEID,CVRGPLNNBR,PLCYID,PEGARPRTGRPSTRTDT,LSSUNTNBR,FNDNGMTHDPLNNBR,EMPGRPID,CVRGCTGRYCD,CVRGTYPCD,FNDNGMTHDCD,RPRTGRPID,ROW_TERM_DATE,SOURCE 1 +@gencardinalitycheckcode.sql dwstage ods_pega_report_group_assoc CASEID,CVRGPLNNBR,PLCYID,PEGARPRTGRPSTRTDT,LSSUNTNBR,FNDNGMTHDPLNNBR,EMPGRPID,CVRGCTGRYCD,CVRGTYPCD,FNDNGMTHDCD,RPRTGRPID,ROW_TERM_DATE,SOURCE 2 +@gencardinalitycheckcode.sql dwstage ods_pega_report_group_assoc CASEID,CVRGPLNNBR,PLCYID,PEGARPRTGRPSTRTDT,LSSUNTNBR,FNDNGMTHDPLNNBR,EMPGRPID,CVRGCTGRYCD,CVRGTYPCD,FNDNGMTHDCD,RPRTGRPID,ROW_TERM_DATE,SOURCE 3 +@gencardinalitycheckcode.sql dwstage ods_pega_report_group_assoc CASEID,CVRGPLNNBR,PLCYID,PEGARPRTGRPSTRTDT,LSSUNTNBR,FNDNGMTHDPLNNBR,EMPGRPID,CVRGCTGRYCD,CVRGTYPCD,FNDNGMTHDCD,RPRTGRPID,ROW_TERM_DATE,SOURCE 4 + + +use this to get a starting point for best combination of columns based on distinct +note this still have the NULLS issue maybe (how do we handle columns with large % of null values) +but ignoring this, the technique is pretty solid + +generate code and run it to find out how distinct different combinations of columns are +give some list of columns generate the possible combinations of columns restricted to a limited number (exp. combinations of N things taken M at a time) +results should point you to a good starting set of columns for an index given you list of columns you are intersted in +from this you use GENCARDINALITYCHECKCODE2.SQL + +*/ + +with + table_data as ( + select owner,table_name + from dba_tables + where owner = upper('&&1') + and table_name = upper('&&2') + ) + , column_list as ( + select dba_tab_columns.owner,dba_tab_columns.table_name,dba_tab_columns.column_name + from dba_tab_columns + ,table_data + where dba_tab_columns.owner = table_data.owner + and dba_tab_columns.table_name = table_data.table_name + and instr(','||upper('&&3')||',',','||dba_tab_columns.column_name||',') > 0 + ) + , column_expression as ( + select a.* + ,length(sys_connect_by_path(a.column_name,','))-length(replace(sys_connect_by_path(a.column_name,','),',')) column_count + ,substr(sys_connect_by_path(a.column_name,'||'',''||'),8) column_expression + from column_list a + connect by prior a.column_name < a.column_name + ) +select 'clear columns' from dual union all +select 'col column_count newline' from dual union all +select 'col COLUMN_EXPRESSION format a800' from dual union all +select 'set linesize 999' from dual union all +select 'set pagesize 0' from dual union all +select 'set trimspool on' from dual union all +select 'set trimout on' from dual union all +--select 'set feedback off' from dual union all +--select 'set timing off' from dual union all +--select 'set time off' from dual union all +select '--owner table_name rowcount number_of_columns column_combo_cardinality column_expression' from dual union all +select 'select '''||table_data.owner||''' owner,'''||table_data.table_name||''' table_name,count(*) table_rowcount' +from table_data +union all +select * +from ( + select ' ,'||column_expression.column_count||' column_count,count(distinct '||column_expression.column_expression||') expression_rowcount,'''||replace(column_expression.column_expression,chr(39),chr(39)||chr(39))||''' column_expression' + from column_expression + where column_count <= &&4 + order by column_count,column_expression + ) +union all +select 'from '||table_data.owner||'.'||table_data.table_name +from table_data +union all +select '/' +from table_data +/ diff --git a/Kevin_Meade/showhistograms.sql b/Kevin_Meade/showhistograms.sql new file mode 100644 index 0000000..f729173 --- /dev/null +++ b/Kevin_Meade/showhistograms.sql @@ -0,0 +1,29 @@ +-- +-- shows the histogram for a specific column +-- very usefull for showing when statistics might not help +-- +-- parameter 1 = owner +-- parameter 2 = table_name +-- parameter 3 = column_name +-- +-- usage is: @SHOWHISTOGRAM +-- + +COLUMN endpoint_actual_value noprint +COLUMN actual_value ON FORMAT a30 +col column format a30 + + +select b.* + ,round(ratio_to_report(cardinality) over(partition by owner,table_name,column_name)*100) pct + ,endpoint_actual_value actual_value +from ( +select a.* + ,ENDPOINT_NUMBER-nvl(lag(ENDPOINT_NUMBER) over(partition by owner,table_name,column_name order by endpoint_number),0) cardinality +from dba_histograms a +where owner = upper('&&1') +and table_name = upper('&&2') +and column_name = upper('&&3') +) b +order by owner,table_name,column_name,ENDPOINT_NUMBER +/ diff --git a/Kevin_Meade/showindexes.sql b/Kevin_Meade/showindexes.sql new file mode 100644 index 0000000..9423d9b --- /dev/null +++ b/Kevin_Meade/showindexes.sql @@ -0,0 +1,24 @@ +-- +-- for the given table +-- list the indexes on the table +-- +-- parameter 1 = owner +-- parameter 2 = table_name +-- +-- usage is: @SHOWINDEXES +-- + +set verify off + +break on index_name skip 1 +col column_name format a30 + +select index_name,column_name +,(select index_type from dba_indexes b where b.owner = a.index_owner and b.index_name = a.index_name) index_type +,(select uniqueness from dba_indexes b where b.owner = a.index_owner and b.index_name = a.index_name) uniqueness +,(select tablespace_name from dba_indexes b where b.owner = a.index_owner and b.index_name = a.index_name) tablespace_name +from dba_ind_columns a +where table_name = upper('&&2') +and table_owner = upper('&&1') +order by 1,column_position +/ diff --git a/Kevin_Meade/showmyscanrates.sql b/Kevin_Meade/showmyscanrates.sql new file mode 100644 index 0000000..1444fbf --- /dev/null +++ b/Kevin_Meade/showmyscanrates.sql @@ -0,0 +1,101 @@ +--clear breaks +--clear computes +--clear columns +col time_remaining head 'Seconds|Remaining' +col scanned_blocks head 'Scanned Blocks|or Indexes' +col all_blocks head 'All Blocks|or Indexes' +col blocks_remaining head 'Blocks|or Indexes|Remaining' noprint +col opname format a16 +col target format a40 +col username format a15 +col MB_per_Second form 990.0 head 'MB/s' +col pct_scanned head '%Scanned' format 990.00 +col predicted_runtime_seconds head 'Estmd.|Runtime|Seconds' +col total_blocks head 'Total|Blocks|or|Indexes' +col sid format 99990 +col block_size format 99990 head 'Block|Size' +col id_passes_temp format a25 +break on inst_id skip page + +with + scan_data as ( + select + to_number( + substr(a.message + ,instr(a.message,': ',1,2)+2 + ,instr(a.message,' out of ',1,1)-instr(a.message,': ',1,2)-1 + ) + ) + / to_number( + substr(a.message + ,instr(a.message,' out of ',1,1)+8 + ,instr(a.message,' ',instr(a.message,' out of ',1,1)+8)-instr(a.message,' out of ',1,1)-7 + ) + ) *100 pct_scanned + , to_number( + substr(a.message + ,instr(a.message,' out of ',1,1)+8 + ,instr(a.message,' ',instr(a.message,' out of ',1,1)+8)-instr(a.message,' out of ',1,1)-7 + ) + ) + - to_number( + substr(a.message + ,instr(a.message,': ',1,2)+2 + ,instr(a.message,' out of ',1,1)-instr(a.message,': ',1,2)-1 + ) + ) blocks_remaining + , a.time_remaining + , a.opname + , to_number(b.value) block_size + , a.target + , a.sid + , a.inst_id + , a.username + , a.sql_hash_value + from ( + select + replace(gv$session_longops.message,'RMAN:','RMAN') message + , gv$session_longops.time_remaining + , gv$session_longops.opname + , nvl(gv$session_longops.target,replace(gv$session_longops.target_desc,'Table ')) target + , gv$session_longops.sid + , gv$session_longops.inst_id + , gv$session_longops.username + , gv$session_longops.sql_hash_value + from gv$session_longops + , gv$session + where gv$session_longops.sid = gv$session.sid + and gv$session_longops.inst_id = gv$session.inst_id + and gv$session_longops.sid = gv$session.sid + and gv$session_longops.serial# = gv$session.serial# + and gv$session_longops.time_remaining > 0 +and gv$session_longops.username = user + ) a + ,(select value from gv$parameter where name = 'db_block_size' and rownum = 1) b + ) +select + scan_data.inst_id + , round(blocks_remaining*block_size/1024/1024/time_remaining,1) MB_per_Second + , scan_data.time_remaining + , round(time_remaining/(1-pct_scanned/100)) predicted_runtime_seconds + , scan_data.pct_scanned + , scan_data.blocks_remaining + , round(blocks_remaining/(1-pct_scanned/100)) total_blocks + , scan_data.opname + , scan_data.BLOCK_SIZE + , scan_data.target + , ( + select + max(operation_id)||':'||DECODE(MAX(NUMBER_PASSES),0,'OPTIMAL',1,'ONE-PASS',NULL,NULL,'MULTI-PASS('||max(number_passes)||')')||DECODE(max(TEMPSEG_SIZE),NULL,NULL,','||round(max(TEMPSEG_SIZE)/1024/1024)||'M') + from gv$sql_workarea_active + where gv$sql_workarea_active.sid = scan_data.sid + and gv$sql_workarea_active.inst_id = scan_data.inst_id +-- and scan_data.opname in ('Hash Join','Sort Output') +-- and gv$sql_workarea_active.OPERATION_TYPE in ('HASH-JOIN','SORT','WINDOW (SORT)','GROUP BY (SORT)') + ) id_passes_temp + , scan_data.sid + , scan_data.username + , scan_data.sql_hash_value +from scan_data +order by inst_id,username,sid,time_remaining +/ diff --git a/Kevin_Meade/showmyworkareas.sql b/Kevin_Meade/showmyworkareas.sql new file mode 100644 index 0000000..b9f545c --- /dev/null +++ b/Kevin_Meade/showmyworkareas.sql @@ -0,0 +1 @@ +select * from gv$sql_workarea_active where (inst_id,sid) in (select inst_id,sid from gv$session where username = user); diff --git a/Kevin_Meade/showowner.sql b/Kevin_Meade/showowner.sql new file mode 100644 index 0000000..59d9420 --- /dev/null +++ b/Kevin_Meade/showowner.sql @@ -0,0 +1,12 @@ +-- +-- given an object name +-- show what schema owns it and what it is +-- + +col object_name format a30 + +select owner,object_type,object_name,status +from dba_objects +where object_name = upper('&&1') +order by 1,2,3 +/ diff --git a/Kevin_Meade/showparameters.sql b/Kevin_Meade/showparameters.sql new file mode 100644 index 0000000..32a2ccb --- /dev/null +++ b/Kevin_Meade/showparameters.sql @@ -0,0 +1,35 @@ +col value format a30 +col name format a40 +col keyword format a10 + +break on keyword skip 1 dup + +select decode(sign(instr(name,'dyn')),1,'dyn' + ,decode(sign(instr(name,'size')),1,'size' + ,decode(sign(instr(name,'pga')),1,'pga' + ,decode(sign(instr(name,'index')),1,'index' + ,decode(sign(instr(name,'cpu')),1,'cpu' + ,decode(sign(instr(name,'mode')),1,'mode' + ,decode(sign(instr(name,'optimizer')),1,'optimizer' + ,decode(sign(instr(name,'parallel')),1,'parallel' + ,decode(sign(instr(name,'rewrite')),1,'rewrite' + ,decode(sign(instr(name,'statistics')),1,'statistics' + )))))))))) keyword + ,name + ,value + ,isdefault +from v$parameter +where ( + name like '%dyn%' or + name like '%pga%' or + name like '%area%' or + name like '%index%' or + name like '%cpu%' or + name like '%mode%' or + name like '%optimizer%' or + name like 'parallel%' or + name like '%rewrite%' or + name like '%statistics%' + ) +order by keyword,name +/ diff --git a/Kevin_Meade/showplan11g.sql b/Kevin_Meade/showplan11g.sql new file mode 100644 index 0000000..83c24c0 --- /dev/null +++ b/Kevin_Meade/showplan11g.sql @@ -0,0 +1,7 @@ +-- +-- dump the most recent plan from the plan_table +-- +-- usage is: @SHOWPLAN11G +-- + +select * from table(dbms_xplan.display('PLAN_TABLE',NULL,'ADVANCED')); diff --git a/Kevin_Meade/showplan11gshort.sql b/Kevin_Meade/showplan11gshort.sql new file mode 100644 index 0000000..391c03b --- /dev/null +++ b/Kevin_Meade/showplan11gshort.sql @@ -0,0 +1,8 @@ +-- +-- dump the most recent plan in the plan_table +-- but do not include lesser used sections of the plan +-- +-- usage is: @SHOWPLAN11GSHORT +-- + +select * from table(dbms_xplan.display('PLAN_TABLE',NULL,'ADVANCED -projection -outline -alias')); diff --git a/Kevin_Meade/showplanconstraints11g.sql b/Kevin_Meade/showplanconstraints11g.sql new file mode 100644 index 0000000..26f0cb3 --- /dev/null +++ b/Kevin_Meade/showplanconstraints11g.sql @@ -0,0 +1,60 @@ +-- +-- show all PK/UK/FK constraints for any table referenced by most recent query plan in the plan_table +-- note that table references may be indirect and that not all tables in a query need be used by a query plan +-- +-- usage is: @SHOWPLANCONSTRAINTS11G +-- + +break on constraint_name skip 1 on parent_table_name +col column_name format a30 +col sort_order noprint +col select_id noprint + +with + plan_references as ( + select id,object_owner owner,object_name table_name,replace(object_alias,'@',' @ ') object_alias + from plan_table + where object_type = 'TABLE' + and plan_id = (select max(plan_id) from plan_table) + union + select id,b.table_owner,b.table_name,replace(object_alias,'@',' @ ') object_alias + from plan_table a + ,dba_indexes b + where a.object_type like 'INDEX%' + and a.object_owner = b.owner + and a.object_name = b.index_name + and a.plan_id = (select max(plan_id) from plan_table) + ) + , plan_tables as ( + select distinct owner,table_name + from plan_references + ) +select * +from ( +select a.owner,a.table_name,a.constraint_name,a.constraint_type,c.column_name,b.owner parent_child_owner,b.table_name parent_child_table_name,b.constraint_type parent_constraint_type,a.index_name,decode(a.constraint_type,'P',1,'U',2) sort_order,1 select_id +from dba_constraints a + ,dba_constraints b + ,dba_cons_columns c +where (a.owner,a.table_name) in (select owner,table_name from plan_tables) +and a.r_owner = b.owner(+) +and a.r_constraint_name = b.constraint_name(+) +and a.owner = c.owner +and a.constraint_name = c.constraint_name +and a.constraint_type != 'C' +and (b.owner is null and a.constraint_type in ('P','U') or (b.owner,b.table_name) in (select owner,table_name from plan_tables)) +union +select a.owner,a.table_name,a.constraint_name,a.constraint_type,c.column_name,b.owner parent_child_owner,b.table_name parent_child_table_name,b.constraint_type parent_constraint_type,a.index_name,decode(a.constraint_type,'P',1,'U',2) sort_order,2 select_id +from dba_constraints a + ,dba_constraints b + ,dba_cons_columns c +where (a.owner,a.table_name) in (select owner,table_name from plan_tables) +and b.constraint_type in ('P','U') +and a.r_owner = b.owner +and a.r_constraint_name = b.constraint_name +and b.table_name != a.table_name +and a.owner = c.owner +and a.constraint_name = c.constraint_name +and (b.owner,b.table_name) in (select owner,table_name from plan_tables) +) +order by select_id,sort_order,owner,table_name,constraint_name,column_name +/ diff --git a/Kevin_Meade/showplancountqueries11g.sql b/Kevin_Meade/showplancountqueries11g.sql new file mode 100644 index 0000000..4ae16fc --- /dev/null +++ b/Kevin_Meade/showplancountqueries11g.sql @@ -0,0 +1,26 @@ +-- +-- construct count queries for tables referenced by the most recent plan in the plan_table +-- +-- usage is: @SHOWPLANCOUNTQUERIES11G +-- + +select count_query_sqltext||decode(lead(count_query_sqltext) over (order by object_owner,object_name),null,';',' union all') sql_text +from ( + select distinct object_owner,object_name,'select count(*) rowcount,'''||object_owner||''' owner,'''||object_name||''' table_name from '||object_owner||'.'||object_name count_query_sqltext + from ( + select id,object_owner,object_name,replace(object_alias,'@',' @ ') object_alias + from plan_table + where object_type = 'TABLE' + and plan_id = (select max(plan_id) from plan_table) + union + select id,b.table_owner,b.table_name,replace(object_alias,'@',' @ ') object_alias + from plan_table a + ,dba_indexes b + where a.object_type like 'INDEX%' + and a.object_owner = b.owner + and a.object_name = b.index_name + and a.plan_id = (select max(plan_id) from plan_table) + ) + order by object_owner,object_name + ) +/ diff --git a/Kevin_Meade/showplandatamodel11g.sql b/Kevin_Meade/showplandatamodel11g.sql new file mode 100644 index 0000000..f5f1e57 --- /dev/null +++ b/Kevin_Meade/showplandatamodel11g.sql @@ -0,0 +1,209 @@ +-- +-- dumps a crude ascii art data model for the current plan in the plan_table +-- +-- usage is: @SHOWPLANDATAMODEL11G +-- + +with + table_list as ( + select b.*,chr(rownum+96) dm_key + from ( + select a.* + from ( + select object_owner owner,object_name table_name + from plan_table + where object_type = 'TABLE' + and plan_id = (select max(plan_id) from plan_table) + union + select b.table_owner,b.table_name + from plan_table a + ,dba_indexes b + where a.object_type like 'INDEX%' + and a.object_owner = b.owner + and a.object_name = b.index_name + and a.plan_id = (select max(plan_id) from plan_table) + ) a + order by a.table_name,a.owner + ) b + ) + , constraint_data as ( + select a.owner,a.table_name,a.constraint_type,a.constraint_name,a.r_owner,a.r_constraint_name + ,nvl(b.owner,a.owner) parent_owner,nvl(b.table_name,a.table_name) parent_table_name + ,decode(a.constraint_type,'R',a.owner) child_owner,decode(a.constraint_type,'R',a.table_name) child_table_name + from dba_constraints a + ,dba_constraints b + where a.constraint_type in ('P','R') + and (a.owner,a.table_name) in (select owner,table_name from table_list) + and a.r_owner = b.owner(+) + and a.r_constraint_name = b.constraint_name(+) + union all + select owner,table_name,'P',null,null,null,null,null,null,null + from table_list a + where not exists ( + select null + from dba_constraints b + where b.owner = a.owner + and b.table_name = a.table_name + and b.constraint_type = 'P' + ) + ) + , table_list_plus as ( + select a.owner,a.table_name,listagg(c.dm_key,',') within group (order by c.dm_key) parent_dm_key_list + from table_list a + ,constraint_data b + ,table_list c + where a.owner = b.child_owner + and a.table_name = b.child_table_name + and b.parent_owner = c.owner + and b.parent_table_name = c.table_name + group by a.owner,a.table_name + ) + , table_level as ( + select c.*,(ordinal_position)*prefix_spaces+(ordinal_position-1)*3+cumm_table_name_length-length(table_name)+1 start_position + from ( + select b.*,trunc((max_total_table_name_length-total_table_name_length)/(table_count+1)) prefix_spaces + from ( + select a.*,max(table_count) over () max_table_count,max(total_table_name_length) over() max_total_table_name_length + from ( + select owner,table_name,max(lvlno) dm_lvl,max_dm_lvl + ,sum(length(table_name)) over (partition by max(lvlno)) total_table_name_length + ,count(*) over(partition by max(lvlno)) table_count + ,row_number() over(partition by max(lvlno) order by table_name,owner) ordinal_position + ,sum(length(table_name)) over (partition by max(lvlno) order by table_name,owner) cumm_table_name_length + from ( + select level lvlno,max(level) over () max_dm_lvl,a.* + from constraint_data a + connect by r_owner = prior owner + and r_constraint_name = prior constraint_name + start with r_owner is null + ) + group by owner,table_name,max_dm_lvl + ) a + ) b + ) c + ) + , table_lines as ( + select a.* + from ( + select table_level.*,replace(substr(sys_connect_by_path(lpad(' ',prefix_spaces,' ')||table_name,','),2),',',' ') line_text + from table_level + connect by prior dm_lvl = dm_lvl + and prior ordinal_position = ordinal_position - 1 + start with ordinal_position = 1 + ) a + where ordinal_position = table_count + order by dm_lvl + ) + , print_array as ( + select x.* + ,case + when exists ( + select null + from table_level b2 + ,constraint_data c2 + ,table_level d2 + where x.columnno = b2.start_position + and b2.owner = c2.parent_owner + and b2.table_name = c2.parent_table_name + and c2.child_owner = d2.owner + and c2.child_table_name = d2.table_name + and ( + x.dm_lvl < d2.dm_lvl-1 or + x.dm_lvl = d2.dm_lvl-1 and x.rowno in (1,2) + ) + ) then ( + select e2.dm_key + from table_level b2 + ,constraint_data c2 + ,table_level d2 + ,table_list e2 + where x.columnno = b2.start_position + and b2.owner = c2.parent_owner + and b2.table_name = c2.parent_table_name + and c2.child_owner = d2.owner + and c2.child_table_name = d2.table_name + and ( + x.dm_lvl < d2.dm_lvl-1 or + x.dm_lvl = d2.dm_lvl-1 and x.rowno in (1,2) + ) + and c2.parent_owner = e2.owner + and c2.parent_table_name = e2.table_name + ) + when exists ( + select null + from table_level b2 + ,constraint_data c2 + ,table_level d2 + where x.dm_lvl = b2.dm_lvl-1 + and x.rowno in (3) + and b2.owner = c2.child_owner + and b2.table_name = c2.child_table_name + and c2.parent_owner = d2.owner + and c2.parent_table_name = d2.table_name + and (x.columnno between b2.start_position and d2.start_position or + x.columnno between d2.start_position and b2.start_position) + ) then '-' + when exists ( + select null + from table_level b2 + ,constraint_data c2 + where x.columnno = b2.start_position + and b2.owner = c2.child_owner + and b2.table_name = c2.child_table_name + and x.dm_lvl = b2.dm_lvl-1 + and x.rowno in (4,5) + ) then ( + select decode(x.rowno,4,'|','| ('||f2.parent_dm_key_list||')') + from table_level b2 + ,constraint_data c2 + ,table_list_plus f2 + where x.columnno = b2.start_position + and b2.owner = c2.child_owner + and b2.table_name = c2.child_table_name + and x.dm_lvl = b2.dm_lvl-1 + and x.rowno in (4,5) + and b2.owner = f2.owner + and b2.table_name = f2.table_name + ) + else ' ' + end cell_value + from ( + select c.dm_lvl,2 rowtype,b.rowno,a.rowno columnno + from ( + select rownum rowno + from dual + connect by level <= (select max(length(line_text)) from table_lines) + ) a + ,( + select level rowno + from dual + connect by level <= 5 + ) b + ,table_lines c + where c.dm_lvl < c.max_dm_lvl + and a.rowno <= length(c.line_text) + ) x + ) + , constraint_lines as ( + select * + from ( + select dm_lvl,rowtype,rowno,columnno,connect_by_isleaf cbil,replace(sys_connect_by_path(cell_value,','),',') line_text + from print_array + connect by prior dm_lvl = dm_lvl + and prior rowtype = rowtype + and prior rowno = rowno + and prior columnno = columnno-1 + start with columnno = 1 + ) + where cbil = 1 + ) + , data_model as ( + select dm_lvl,1 rowtype,1 rowno,line_text + from table_lines + union all + select dm_lvl,rowtype,rowno,line_text + from constraint_lines + order by 1,2,3 + ) +select ' '||line_text data_model from data_model +/ diff --git a/Kevin_Meade/showplandrivingtable11g.sql b/Kevin_Meade/showplandrivingtable11g.sql new file mode 100644 index 0000000..1ff7a3d --- /dev/null +++ b/Kevin_Meade/showplandrivingtable11g.sql @@ -0,0 +1,36 @@ +-- +-- show the driving table for the most recent query plan in the plan_table +-- +-- usage is: @SHOWPLANDRIVINGTABLES11G +-- + +set linesize 999 +col driving_table format a61 +col driving_table_alias format a30 +col leading_hint format a300 + + +select id + ,object_owner||'.'||object_name driving_table + ,driving_table_alias + ,object_type + ,leading_hint +from ( + select substr(replace(leading_hint,')',' ') + ,instr(replace(leading_hint,')',' '),' ',1,1)+1 + ,instr(replace(leading_hint,')',' '),' ',1,2)-instr(replace(leading_hint,')',' '),' ',1,1)-1) driving_table_alias + ,leading_hint + from ( + select substr(c1,1,instr(c1,')')) leading_hint + from ( + select substr(other_xml,instr(other_xml,'LEADING(')) c1 + from plan_table + where other_xml is not null + and plan_id = (select max(plan_id) from plan_table) + ) + ) + ) x + ,plan_table +where plan_table.object_alias = trim(replace(to_char(substr(x.driving_table_alias,1,4000)),'"')) +and plan_table.plan_id = (select max(plan_id) from plan_table) +/ diff --git a/Kevin_Meade/showplanfilterqueries11g.sql b/Kevin_Meade/showplanfilterqueries11g.sql new file mode 100644 index 0000000..d93d24e --- /dev/null +++ b/Kevin_Meade/showplanfilterqueries11g.sql @@ -0,0 +1,103 @@ +-- +-- show filter queries for the most recent plan in the plan_table +-- +-- usage is: @SHOWPLANFILTERQUERIES11G +-- + +with + table_list as ( + select 'TABLE' plan_object_type,a.id,a.object_owner table_owner,a.object_name table_name,a.access_predicates,a.filter_predicates,a.object_alias,a.cardinality + from plan_table a + ,dba_tables b + where b.owner = a.object_owner + and b.table_name = a.object_name + and a.plan_id = (select max(plan_id) from plan_table) + union all + select 'INDEX' plan_object_type,a.id,b.table_owner,b.table_name object_name,a.access_predicates,a.filter_predicates,a.object_alias,a.cardinality + from plan_table a + ,dba_indexes b + where b.owner = a.object_owner + and b.index_name = a.object_name + and a.plan_id = (select max(plan_id) from plan_table) + ) +-- +-- given the raw data for tables, modify the predicates so that we only see predicates for constant tests, no join predicates +-- join predicates are not used in FRP analysis +-- this is a bit of a hack as I never took the COMPILER and PARSER classes in school, basically this means it is almost 100%right +-- + , modified_table_list as ( + select id,table_owner,table_name,object_alias,cardinality,plan_object_type + ,case when + instr(replace(access_predicates,'"="'),'=') > 0 or + instr(replace(access_predicates,'">"'),'>') > 0 or + instr(replace(access_predicates,'"<"'),'<') > 0 or + instr(replace(access_predicates,'">="'),'>=') > 0 or + instr(replace(access_predicates,'"<="'),'<=') > 0 or + instr(replace(access_predicates,'"!="'),'!=') > 0 or + instr(replace(access_predicates,'"<>"'),'<>') > 0 or + instr(replace(access_predicates,'" LIKE "'),' LIKE ') > 0 or + instr(replace(access_predicates,'" BETWEEN "'),' BETWEEN ') > 0 or + instr(replace(access_predicates,'" IN ("'),' IN (') > 0 or + instr(replace(access_predicates,'" NOT LIKE "'),' NOT LIKE ') > 0 or + instr(replace(access_predicates,'" NOT BETWEEN "'),' NOT BETWEEN ') > 0 or + instr(replace(access_predicates,'" NOT IN ("'),' NOT IN (') > 0 + then access_predicates + end access_predicates + ,case when + instr(replace(filter_predicates,'"="'),'=') > 0 or + instr(replace(filter_predicates,'">"'),'>') > 0 or + instr(replace(filter_predicates,'"<"'),'<') > 0 or + instr(replace(filter_predicates,'">="'),'>=') > 0 or + instr(replace(filter_predicates,'"<="'),'<=') > 0 or + instr(replace(filter_predicates,'"!="'),'!=') > 0 or + instr(replace(filter_predicates,'"<>"'),'<>') > 0 or + instr(replace(filter_predicates,'" LIKE "'),' LIKE ') > 0 or + instr(replace(filter_predicates,'" BETWEEN "'),' BETWEEN ') > 0 or + instr(replace(filter_predicates,'" IN ("'),' IN (') > 0 or + instr(replace(filter_predicates,'" NOT LIKE "'),' NOT LIKE ') > 0 or + instr(replace(filter_predicates,'" NOT BETWEEN "'),' NOT BETWEEN ') > 0 or + instr(replace(filter_predicates,'" NOT IN ("'),' NOT IN (') > 0 + then filter_predicates + end filter_predicates + from table_list + ) +-- +-- do the final massaging of the raw data +-- in particular, get the true alias for each table, get data from dba_tables, generate an actual predicate we can test with +-- + , plan_info as + ( + select + id + , table_owner + , table_name + , substr(object_alias,1,instr(object_alias,'@')-1) table_alias + , cardinality + , (select num_rows from dba_tables where dba_tables.owner = modified_table_list.table_owner and dba_tables.table_name = modified_table_list.table_name) num_rows + , case + when access_predicates is null and filter_predicates is null then null + when access_predicates is null and filter_predicates is not null then filter_predicates + when access_predicates is not null and filter_predicates is null then access_predicates + when access_predicates is not null and filter_predicates is not null and access_predicates != filter_predicates then access_predicates||' and '||filter_predicates + else access_predicates + end predicate + from modified_table_list + ) +-- +-- look for places where indexes are accessed followed by table acces by rowid +-- combine the two lines into one +-- + , combined_plan_info as ( + select plan_info.table_owner,plan_info.table_name,plan_info.table_alias,plan_info.num_rows + ,min(plan_info.id) id + ,max(plan_info.cardinality) cardinality + ,listagg(plan_info.predicate,' and ') within group (order by id) predicate + from plan_info + group by plan_info.table_owner,plan_info.table_name,plan_info.table_alias,plan_info.num_rows + ) +select 'select count(*) filtered_rowcount,'''||table_owner||''' table_owner,'''||table_name||''' table_name,'''||table_alias||''' table_alias from '||table_owner||'.'||table_name||' '||table_alias||decode(predicate,null,null,' where '||predicate) + ||decode(lead(table_name) over (order by table_owner,table_name),null,' ;',' union all') +from combined_plan_info +order by table_owner,table_name +/ + diff --git a/Kevin_Meade/showplanfrpspreadsheetcode11g.sql b/Kevin_Meade/showplanfrpspreadsheetcode11g.sql new file mode 100644 index 0000000..7298939 --- /dev/null +++ b/Kevin_Meade/showplanfrpspreadsheetcode11g.sql @@ -0,0 +1,141 @@ +-- +-- generate SQL for the FRP spreadsheet from the most recent plan in the plan_table +-- +-- usage is: @SHOWPLANFRPSPREADSHEETCODE11G +-- + +col actual_frp format 999.0 +col plan_frp format 999.0 +col select_id noprint + +with +-- +-- generates a FRP SPREADSHEET query using plan table information for an EXPLAINED query +-- +-- +-- THIS CODE IS DEPENDENT UPON WHAT IS IN THE PLAN TABLE +-- among other things this means that if oracle changes the contents of this table, this query may stop working +-- +-- several possible flaws can prevent this code from generating an executable SQL SELECT +-- +-- 1. bind variables: the corresponding select here must be modified to group on the bind column and select an round(avg(count(*)) +-- 2. join predicates: if any are used along with constant tests in a plan step, they must be manaully edited out of the correspoding select here +-- 3. packaged functions: column=functioncall predicates can be dropped in which case filtered_cardinality will be affected, check it if you query has these +-- 4. outer join is not supported. These should be removed. If the case expression becomes empty use count(*). +-- 5. correlated subqueries are confusing. This is because the appear as queries with bind variables. Test like #1 but ingnore their results. +-- +-- +-- get raw_data from the plan_table for each table reference in the query plan +-- a table may be used more than once in which case there will be more than one row returned here +-- this is managed by using ID so that we know the plan step the table reference refers to +-- note that some plan steps may be index lookups so in this section we translate the index to its underlying table +-- + table_list as ( + select a.id,a.object_owner table_owner,a.object_name table_name,a.access_predicates,a.filter_predicates,a.object_alias,a.cardinality + from plan_table a + ,dba_tables b + where b.owner = a.object_owner + and b.table_name = a.object_name + and a.plan_id = (select max(plan_id) from plan_table) + union all + select a.id,b.table_owner,b.table_name object_name,a.access_predicates,a.filter_predicates,a.object_alias,a.cardinality + from plan_table a + ,dba_indexes b + where b.owner = a.object_owner + and b.index_name = a.object_name + and a.plan_id = (select max(plan_id) from plan_table) + ) +-- +-- given the raw data for tables, modify the predicates so that we only see predicates for constant tests, no join predicates +-- join predicates are not used in FRP analysis +-- this is a bit of a hack as I never took the COMPILER and PARSER classes in school, basically this means it is almost 100%right +-- what we call "close enough for jazz" +-- + , modified_table_list as ( + select id,table_owner,table_name,object_alias,cardinality + ,case when + instr(replace(access_predicates,'"="'),'=') > 0 or + instr(replace(access_predicates,'">"'),'>') > 0 or + instr(replace(access_predicates,'"<"'),'<') > 0 or + instr(replace(access_predicates,'">="'),'>=') > 0 or + instr(replace(access_predicates,'"<="'),'<=') > 0 or + instr(replace(access_predicates,'"!="'),'!=') > 0 or + instr(replace(access_predicates,'"<>"'),'<>') > 0 or + instr(replace(access_predicates,'" LIKE "'),' LIKE ') > 0 or + instr(replace(access_predicates,'" BETWEEN "'),' BETWEEN ') > 0 or + instr(replace(access_predicates,'" IN ("'),' IN (') > 0 or + instr(replace(access_predicates,'" NOT LIKE "'),' NOT LIKE ') > 0 or + instr(replace(access_predicates,'" NOT BETWEEN "'),' NOT BETWEEN ') > 0 or + instr(replace(access_predicates,'" NOT IN ("'),' NOT IN (') > 0 + then access_predicates + end access_predicates + ,case when + instr(replace(filter_predicates,'"="'),'=') > 0 or + instr(replace(filter_predicates,'">"'),'>') > 0 or + instr(replace(filter_predicates,'"<"'),'<') > 0 or + instr(replace(filter_predicates,'">="'),'>=') > 0 or + instr(replace(filter_predicates,'"<="'),'<=') > 0 or + instr(replace(filter_predicates,'"!="'),'!=') > 0 or + instr(replace(filter_predicates,'"<>"'),'<>') > 0 or + instr(replace(filter_predicates,'" LIKE "'),' LIKE ') > 0 or + instr(replace(filter_predicates,'" BETWEEN "'),' BETWEEN ') > 0 or + instr(replace(filter_predicates,'" IN ("'),' IN (') > 0 or + instr(replace(filter_predicates,'" NOT LIKE "'),' NOT LIKE ') > 0 or + instr(replace(filter_predicates,'" NOT BETWEEN "'),' NOT BETWEEN ') > 0 or + instr(replace(filter_predicates,'" NOT IN ("'),' NOT IN (') > 0 + then filter_predicates + end filter_predicates + from table_list + ) +-- +-- do the final massaging of the raw data +-- in particular, get the true alias for each table, get data from dba_tables, generate an actual predicate we can test with +-- + , plan_info as + ( + select + id + , table_owner + , table_name + , substr(object_alias,1,instr(object_alias,'@')-1) table_alias + , cardinality + , (select num_rows from dba_tables where dba_tables.owner = modified_table_list.table_owner and dba_tables.table_name = modified_table_list.table_name) num_rows + , case + when access_predicates is null and filter_predicates is null then null + when access_predicates is null and filter_predicates is not null then filter_predicates + when access_predicates is not null and filter_predicates is null then access_predicates + when access_predicates is not null and filter_predicates is not null and access_predicates != filter_predicates then access_predicates||' and '||filter_predicates + else access_predicates + end predicate + from modified_table_list + ) +-- +-- look for places where indexes are accessed followed by table acces by rowid +-- combine the two lines into one +-- + , combined_plan_info as ( + select plan_info.table_owner,plan_info.table_name,plan_info.table_alias,plan_info.cardinality,plan_info.num_rows + ,min(plan_info.id) id + ,listagg(plan_info.predicate,' and ') within group (order by id) predicate + from plan_info + group by plan_info.table_owner,plan_info.table_name,plan_info.table_alias,plan_info.cardinality,plan_info.num_rows + ) +-- +-- give us a SQL statement that for each table reference, both counts all rows and counts only rows that pass the filter predictes +-- then do the math needed to generate an FRP SPREADSHEET +-- this version (4) only scans each table once instead of twice like the old versions +-- +select 1 select_id,'with' sqltext from dual union all +select 2 select_id,' frp_data as (' from dual union all +select 3 select_id,' select '''||lpad(id,5,' ')||''' id,'''||table_owner||''' table_owner,'''||table_name||''' table_name,'''||table_alias||''' table_alias,'||nvl(to_char(num_rows),'cast(null as number)')||' num_rows,count(*) rowcount,'||cardinality||' cardinality,'||decode(predicate,null,'cast(null as number)','count(case when '||predicate||' then 1 end)')||' filtered_cardinality from '||table_owner||'.'||table_name||' '||table_alias||' union all' + from combined_plan_info + union all +select 4 select_id,' select null,null,null,null,null,null,null,null from dual' from dual union all +select 5 select_id,' )' from dual union all +select 6 select_id,'select frp_data.*,round(frp_data.filtered_cardinality/case when frp_data.rowcount = 0 then cast(null as number) else frp_data.rowcount end*100,1) actual_frp,decode(frp_data.filtered_cardinality,null,cast(null as number),round(frp_data.cardinality/case when frp_data.num_rows = 0 then cast(null as number) else frp_data.num_rows end*100,1)) plan_frp' from dual union all +select 7 select_id,'from frp_data' from dual union all +select 8 select_id,'where id is not null' from dual union all +select 9 select_id,'order by frp_data.id' from dual union all +select 10 select_id,'/' from dual +order by 1 +/ diff --git a/Kevin_Meade/showplanindexes11g.sql b/Kevin_Meade/showplanindexes11g.sql new file mode 100644 index 0000000..ea8d09e --- /dev/null +++ b/Kevin_Meade/showplanindexes11g.sql @@ -0,0 +1,38 @@ +-- +-- show indexes for any table referenced directly or indirectly in the current plan of the plan_table +-- +-- usage is: @SHOWPLANINDEXES11G +-- + +break on table_owner on table_name on index_owner skip 1 on index_name skip 1 on uniqueness +col column_name format a30 + +with + plan_references as ( + select id,object_owner owner,object_name table_name,replace(object_alias,'@',' @ ') object_alias + from plan_table + where object_type = 'TABLE' + and plan_id = (select max(plan_id) from plan_table) + union + select id,b.table_owner,b.table_name,replace(object_alias,'@',' @ ') object_alias + from plan_table a + ,dba_indexes b + where a.object_type like 'INDEX%' + and a.object_owner = b.owner + and a.object_name = b.index_name + and a.plan_id = (select max(plan_id) from plan_table) + ) + , plan_tables as ( + select distinct owner,table_name + from plan_references + ) +select dba_ind_columns.column_name,dba_indexes.index_name,dba_indexes.uniqueness,dba_indexes.table_name,dba_indexes.table_owner,dba_indexes.owner index_owner +from dba_indexes + ,dba_ind_columns + ,plan_tables +where plan_tables.owner = dba_indexes.table_owner +and plan_tables.table_name = dba_indexes.table_name +and dba_indexes.owner = dba_ind_columns.index_owner +and dba_indexes.index_name = dba_ind_columns.index_name +order by dba_indexes.table_owner,dba_indexes.table_name,dba_indexes.owner,dba_indexes.index_name,dba_ind_columns.column_position +/ diff --git a/Kevin_Meade/showplannumrows11g.sql b/Kevin_Meade/showplannumrows11g.sql new file mode 100644 index 0000000..04eaa7e --- /dev/null +++ b/Kevin_Meade/showplannumrows11g.sql @@ -0,0 +1,28 @@ +-- +-- get num_rows off DBA_TABLES for any table referenced by the current plan in the plan_table +-- +-- usage is: @SHOWPLANNUMROWS11G +-- + +with + table_list as ( + select object_owner owner,object_name table_name + from plan_table + where object_type = 'TABLE' + and plan_id = (select max(plan_id) from plan_table) + union + select b.table_owner,b.table_name + from plan_table a + ,dba_indexes b + where a.object_type like 'INDEX%' + and a.object_owner = b.owner + and a.object_name = b.index_name + and a.plan_id = (select max(plan_id) from plan_table) + ) +select num_rows,dba_tables.owner,dba_tables.table_name +from dba_tables + ,table_list +where table_list.owner = dba_tables.owner +and table_list.table_name = dba_tables.table_name +order by 2,1 +/ diff --git a/Kevin_Meade/showplanquerydiagram11g.sql b/Kevin_Meade/showplanquerydiagram11g.sql new file mode 100644 index 0000000..de371a9 --- /dev/null +++ b/Kevin_Meade/showplanquerydiagram11g.sql @@ -0,0 +1,128 @@ +-- +-- show a query diagram for the current plan of the plan_table +-- uses the join tree with extended information +-- +-- usage is: @SHOWPLANQUERYDIAGRAM11G +-- + +col query_diagram format a300 +col query_name format a30 +break on query_name skip 1 dup + +with + plan_table_current as ( + select * + from plan_table + where plan_id = (select max(plan_id) from plan_table) + ) + , predicate_data as ( + select nvl(query_name,'SEL$1') adjusted_query_name + ,z.* + from ( + select case + when table_2_alias is null then 'CONSTANT TEST' + else 'JOIN' + end expression_type + ,substr(pt.object_alias,instr(object_alias,'@')+1) query_name + ,y.* + from plan_table_current pt + ,( + select case + when instr(predicate_expression,'.') > 0 then substr(predicate_expression,1,instr(predicate_expression,'.')-1) + else (select substr(object_alias,1,instr(object_alias,'@')-1) from plan_table_current where id = x.id and rownum = 1) + end table_1_alias + ,substr(predicate_expression,instr(predicate_expression,'=')+1,instr(predicate_expression,'.',1,2)-instr(predicate_expression,'=')-1) table_2_alias + ,x.* + from ( + select distinct * + from ( + select id,substr( ' '||p||' ' + ,instr(' '||p||' ',' ',1,level)+1 + ,instr(' '||p||' ',' ',1,level+1)-instr(' '||p||' ',' ',1,level)-1 + ) predicate_expression + ,level rowno + ,p + from ( + select * + from ( + select id,trim( + replace( + replace( + replace( + replace( + replace( + replace( + replace( + replace( + p + ,' ',' ') + ,' ',' ') + ,' ',' ') + ,' ',' ') + ,' ',' ') + ,' ',' ') + ,' ',' ') + ,' ',' ') + ) p + from ( + select id,trim( + replace( + replace( + replace( + replace( + replace( + replace( + replace( + replace( + p + ,'"') + ,' AND ',' ') + ,' OR ',' ') + ,' NOT ',' ') + ,'(',' ') + ,')',' ') + ,' and ',' ') + ,' and ',' ') + ) p + from ( + select id,access_predicates||' '||filter_predicates p + from plan_table_current + where rownum >= 1 + ) + ) + ) + where p is not null + ) + connect by level <= length(p)-length(replace(p,' '))+1 + ) + ) x + ) y + where y.id = pt.id + ) z + ) + , constant_test as ( + select distinct expression_type,table_1_alias + from predicate_data + where expression_type = 'CONSTANT TEST' + ) +select t.query_name + ,decode(ct,'c','c',' ')||lpad(decode(ct,'c','-',' '),(lvlno)*3,decode(ct,'c','-',' '))||table_2_alias query_diagram +from ( + select query_name,table_1_alias,table_2_alias + ,level lvlno + ,max(level) over (partition by query_name) max_lvlno + ,case when (select expression_type from constant_test where table_1_alias = x.table_2_alias) is not null then 'c' end ct + from ( + select distinct adjusted_query_name query_name,table_1_alias,table_2_alias + from predicate_data + where expression_type = 'JOIN' + union all + select distinct adjusted_query_name query_name,null,table_1_alias + from predicate_data + where table_1_alias not in (select table_2_alias from predicate_data where table_2_alias is not null) + ) x + connect by prior table_2_alias = table_1_alias + and prior query_name = query_name + start with table_1_alias is null + ) t +/ diff --git a/Kevin_Meade/showplantables11g.sql b/Kevin_Meade/showplantables11g.sql new file mode 100644 index 0000000..7cd6e38 --- /dev/null +++ b/Kevin_Meade/showplantables11g.sql @@ -0,0 +1,23 @@ +-- +-- show all tables referenced by the qep +-- this include indrect references so an index reference translates to the table in this report +-- + +with + plan_table_current as ( + select * + from plan_table + where plan_id = (select max(plan_id) from plan_table) + ) +select id,object_owner,object_name,replace(object_alias,'@',' @ ') object_alias +from plan_table_current +where object_type = 'TABLE' +union +select id,b.table_owner,b.table_name,replace(object_alias,'@',' @ ') object_alias +from plan_table_current a + ,dba_indexes b +where a.object_type like 'INDEX%' +and a.object_owner = b.owner +and a.object_name = b.index_name +order by 2,3,1 +/ diff --git a/Kevin_Meade/showplantablesunique11g.sql b/Kevin_Meade/showplantablesunique11g.sql new file mode 100644 index 0000000..48abd3c --- /dev/null +++ b/Kevin_Meade/showplantablesunique11g.sql @@ -0,0 +1,22 @@ +-- +-- show actual unique list of tables referenced by the QEP +-- + +with + plan_table_current as ( + select * + from plan_table + where plan_id = (select max(plan_id) from plan_table) + ) +select object_owner,object_name,replace(object_alias,'@',' @ ') object_alias +from plan_table_current +where object_type = 'TABLE' +union +select b.table_owner,b.table_name,replace(object_alias,'@',' @ ') object_alias +from plan_table_current a + ,dba_indexes b +where a.object_type like 'INDEX%' +and a.object_owner = b.owner +and a.object_name = b.index_name +order by 1,2 +/ diff --git a/Kevin_Meade/showtopcpu11g.sql b/Kevin_Meade/showtopcpu11g.sql new file mode 100644 index 0000000..db7a709 --- /dev/null +++ b/Kevin_Meade/showtopcpu11g.sql @@ -0,0 +1,124 @@ +-- +-- create a multi-part report on database SQL by instance +-- grouping SQL into powers of ten based on cpu consumed +-- in order to see easily the top 1% of queries that are most busy +-- + +set linesize 999 +set pagesize 50000 +set feedback 1 +set trimspool on +set trimout on +set doc off +clear breaks +clear computes +set echo off + +-- alter session set nls_date_format = 'dd-mon-rrrr hh24:mi:ss'; + +select * from v$version +/ + +select inst_id + ,instance_name + ,startup_time + ,round((sysdate-startup_time),1) up_days + ,round(round((sysdate-startup_time),1)*24) maximum_cache_hours + ,to_char(sysdate,'dd-mon-rrrr hh24:mi:ss') right_now +from gv$instance +order by inst_id +/ + +-- +-- show how long the database has been up, how many cpus are available, and thus the theoretical CPU available +-- +select inst_id + ,instance_name + ,(select cpu_count_highwater from sys.v_$license) cpu_count + ,round((round((sysdate-startup_time),1)*24)*(select cpu_count_highwater from sys.v_$license)) available_cpu_hours +from gv$instance +order by inst_id +/ + +col sql_text format a700 trunc +col sql_text clear +col sql_text format a700 trunc +col pct_total format 990 +compute sum of sql_statements on inst_id +compute sum of sql_statements on report +compute sum of db_pct_total on inst_id +compute sum of db_pct_total on report +compute sum of running_consumed_cpu_hours on report +break on inst_id skip page on report + +-- +-- use a logarithmic scale to plot cpu consumtion of all queries in the cache +-- we can use this to zero in on the top consumers +-- notice we exclude PLSQL CALLS but not the sql inside these calls +-- this gives us the true SQL workload +-- +select + inst_id + ,cpu_time_log10 + ,sql_statements + ,cpu_time_rounded,round(cpu_time) cpu_time + ,round(100*ratio_to_report(cpu_time) over(partition by inst_id)) inst_pct_total + ,round(100*ratio_to_report(cpu_time) over()) db_pct_total + ,round(sum(cpu_time) over (partition by inst_id order by cpu_time_log10)) running_cpu_time + ,round(round(sum(cpu_time) over (partition by inst_id order by cpu_time_log10))/60/60,2) running_consumed_cpu_hours +from ( + select + inst_id + ,trunc(log(10,mycpu_time)) cpu_time_log10 + ,count(*) sql_statements + ,power(10,trunc(log(10,mycpu_time))) cpu_time_rounded + ,sum(mycpu_time) cpu_time + from ( + select inst_id,case when cpu_time <= 0 then 1 else cpu_time end/1000000 mycpu_time + from gv$sqlarea + where trim(upper(sql_text)) not like 'BEGIN%' + and trim(upper(sql_text)) not like 'DECLARE%' + and trim(upper(sql_text)) not like 'CALL%' + ) + group by trunc(log(10,mycpu_time)),inst_id + ) a +order by inst_id,a.cpu_time_log10 +/ + +clear computes +col module format a30 word +col sec_per_exec format 999999990.0 +--compute sum of cpu_seconds on inst_id , report +break on inst_id skip page +-- +-- show use the actual SQL that exceeds some threshhold +-- these are the queries we want to concentrate on +-- configure the last AND predicate to whatever is reasonable based on the above query +-- +select inst_id + ,sql_id + ,child_number + ,trunc(cpu_time/1000000) cpu_seconds + ,trunc(elapsed_time/1000000) eplapsed_seconds + ,executions + ,round(trunc(elapsed_time/1000000)/decode(executions,0,null,executions),1) sec_per_exec + ,round((sysdate-to_date(first_load_time,'rrrr-mm-dd/hh24:mi:ss'))*24) hours_in_cache + ,module +-- ,address + ,hash_value + ,(select 'Open' from gv$open_cursor b where b.inst_id = a.inst_id and b.address = a.address and b.hash_value = a.hash_value and rownum = 1) open +/* + ,case when sql_text like '%SELECT /*+ ORDERED NO_EXPAND USE_HASH%' or sql_text like '%FROM :Q%' or instr(sql_text,'CIV_GB') > 0 or instr(sql_text,'PIV_GB') > 0 or instr(sql_text,'PIV_SSF') > 0 or instr(sql_text,'SWAP_JOIN_INPUTS') > 0 then 'Slave' + when sql_text like '%SELECT /*+ Q%' then 'Query' + else (select 'Yes' from gv$sql_plan b where b.inst_id = a.inst_id and b.address = a.address and b.hash_value = a.hash_value and b.child_number = a.child_number and b.other_tag like 'PARALLEL%' and rownum = 1) + end parallel +*/ + ,sql_text +from gv$sql a +where trim(upper(sql_text)) not like 'BEGIN%' +and trim(upper(sql_text)) not like 'DECLARE%' +and trim(upper(sql_text)) not like 'CALL%' +and cpu_time/1000000 >= 1000 +--and cpu_time/1000000 >= 100 +order by 1,4,5 +/ diff --git a/csierra/.gitignore b/csierra/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/csierra/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/csierra/README.md b/csierra/README.md new file mode 100644 index 0000000..ddd8ac6 --- /dev/null +++ b/csierra/README.md @@ -0,0 +1,376 @@ +CS Scripts Inventory by Type (2023-07-29) +============================ +* Latency +* Load +* SQL Performance +* SPBL - SQL Plan Baselines +* SPRF - SQL Profiles +* SPCH - SQL Patches +* Sessions +* Kill Sessions +* Blocked Sessions +* Locks +* Space Reporting +* Space Maintenance +* Container +* System Metrics +* System Stats and Events +* Configuration +* Logs +* Traces +* Reports +* Miscellaneous Utilities + +Latency +------- +* la.sql | l.sql | cs_latency.sql - Current SQL latency (elapsed time over executions) +* le.sql | cs_latency_extended.sql - Current SQL latency (elapsed time over executions) - Extended +* lr.sql | cs_latency_range.sql - SQL latency for a time range (elapsed time over executions) (AWR) - 15m Granularity +* lre.sql | cs_latency_range_extended.sql - SQL latency for a time range (elapsed time over executions) (AWR) - 15m Granularity - Extended +* cs_latency_1m.sql - Last 1m SQL latency (elapsed time over executions) +* cs_latency_1m_extended.sql - Last 1m SQL latency (elapsed time over executions) - Extended +* cs_latency_snapshot.sql - Snapshot SQL latency (elapsed time over executions) +* cs_latency_snapshot_extended.sql - Snapshot SQL latency (elapsed time over executions) - Extended +* lah.sql | lh.sql | cs_latency_hist.sql - Current and Historical SQL latency (cpu time over executions) +* cs_sql_latency_histogram.sql - SQL Latency Histogram (elapsed time over executions) +* cs_sql_perf_long_executions.sql - SQL Executions longer than N seconds +* cs_dg_redo_dest_resp_histogram_chart.sql - Data Guard (DG) REDO Transport Duration Chart +* cs_dg_redo_dest_resp_histogram_report.sql - Data Guard (DG) REDO Transport Duration Report +* cs_LGWR_chart.sql - Log Writer LGWR Slow Writes Duration Chart - from current LGWR trace +* cs_LGWR_report.sql - Log Writer LGWR Slow Writes Duration Report - from current LGWR trace + +Load +---- +* ta.sql | t.sql | cs_top.sql - Top Active SQL as per Active Sessions History ASH - last 1m +* tr.sql | cs_top_range.sql - Top Active SQL as per Active Sessions History ASH - time range +* aa.sql | cs_ash_analytics.sql - Poor-man's version of ASH Analytics for all Timed Events (Average Active Sessions AAS) +* ma.sql | cs_max_ash_analytics.sql - Poor-man's version of ASH Analytics for all Timed Events (Maximum Active Sessions) +* cpu.sql | cs_cpu_demand.sql - Poor-man's version of ASH Analytics for CPU Demand (ON CPU + Scheduler) +* aas.sql | cs_average_active_sessions.sql - Average Active Sessions (ASH Analytics on dbc_active_session) +* mas.sql | cs_maximum_active_sessions.sql - Maximum Active Sessions (ASH Analytics on dbc_active_session) +* cs_osstat_chart.sql - OS Stats from AWR (time series chart) +* cs_osstat_cpu_util_perc_chart.sql - CPU Utilization Percent Chart (AWR) - 15m Granularity +* cs_osstat_cpu_util_perc_now.sql - CPU Utilization Percent - Now +* cs_osstat_cpu_report.sql - CPU Cores Load and Busyness as per OS Stats from AWR (time series report) +* cs_osstat_cpu_load_chart.sql - CPU Cores Load as per OS Stats from AWR (time series chart) +* cs_osstat_cpu_busy_chart.sql - CPU Cores Busyness as per OS Stats from AWR (time series chart) +* cs_top_pdb_chart.sql - Top PDBs as per use of CPU Cores, Disk Space or Sessions (time series chart) +* cs_top_pdb_tps_chart.sql - Top PDBs as per TPS (time series chart) +* cs_timed_event_top_consumers_pie.sql - Top contributors of a given Wait Class or Event (pie chart) +* cs_timed_event_top_consumers_report.sql - Top contributors of a given Wait Class or Event (text report) + +SQL Performance +--------------- +* p.sql | cs_sqlperf.sql - Basic SQL performance metrics for a given SQL_ID +* pp.sql | cs_sqlperf_plus.sql - Basic SQL performance metrics for a given SQL_ID + Top Keys +* x.sql | cs_planx.sql - Execution Plans and SQL performance metrics for a given SQL_ID +* ssa.sql | cs_sqlstat_analytics.sql - SQL Statistics Analytics (AWR) - 15m Granularity +* ssaa.sql | cs_sqlstat_analytics_aggregate.sql - SQL Statistics Analytics Aggregate (AWR) - 15m Granularity +* ssr.sql | cs_sqlstat_report.sql - SQL Statistics Report (AWR) - detailed(15m), hourly, daily, global +* pm.sql | cs_planm.sql - Execution Plans in Memory for a given SQL_ID +* ph.sql | cs_planh.sql - Execution Plans in AWR for a given SQL_ID +* dc.sql - Display Cursor Execution Plan. Execute this script after one SQL for which you want to see the Execution Plan +* dp.sql - Display Plan Table Explain Plan. Execute this script after one EXPLAIN PLAN FOR for a SQL for which you want to see the Explain Plan +* cs_sqltext.sql - SQL Text for a given SQL_ID +* cs_sqlmon_hist.sql - SQL Monitor Report for a given SQL_ID (from AWR) +* cs_sqlmon_mem.sql - SQL Monitor Report for a given SQL_ID (from MEM) +* cs_sqlmon_duration_chart.sql - SQL Monitor Reports duration for a given SQL_ID (time series chart) +* cs_sqlmon_capture.sql - Generate SQL Monitor Reports for given SQL_ID for a short period of time +* cs_sqlmon_binds.sql - SQL Monitor Binds for given SQL_ID +* cs_sqlmon_top_binds.sql - SQL Monitor Top Binds for given SQL_ID +* cs_sql_bind_capture.sql - SQL Bind Capture for given SQL_ID +* cs_sql_bind_capture_one.sql - SQL Bind Capture for given SQL_ID and Bind name (text report) +* cs_sql_bind_capture_one_chart.sql - SQL Bind Capture for given SQL_ID and Bind name (time series chart) +* cs_binds.sql - Binds for a given SQL_ID +* cs_sql_sessions.sql - Recent and Active Sessions executing a SQL_ID +* cs_high_execution_rate_rps.sql - List executions by time for a given SQL_ID with high RPS +* cs_sql_perf_concurrency.sql - Concurrency Histogram of SQL with more than N Concurrent Sessions +* cs_sql_perf_high_aas.sql - SQL with AAS per hour for a given Timed Event higher than N (time series text report) +* cs_purge_cursor.sql - Purge Cursor(s) for SQL_ID using DBMS_SHARED_POOL.PURGE and SQL Patch + +SPBL - SQL Plan Baselines +------------------------- +* cs_spbl_evolve.sql - Evolve a SQL Plan Baseline for given SQL_ID +* cs_spbl_create.sql - Create a SQL Plan Baseline for given SQL_ID +* cs_spbl_drop.sql - Drop one or all SQL Plan Baselines for given SQL_ID +* cs_spbl_drop_all.sql - Drop all SQL Plan Baselines for some SQL Text string on PDB +* cs_spbl_sprf_spch_drop_all.sql - Drop all SQL Plan Baselines, SQL Profiles and SQL Patches for some SQL Text string on PDB +* cs_spbl_list.sql - Summary list of SQL Plan Baselines for given SQL_ID +* cs_spbl_list_all_pdb.sql - List all SQL Plan Baselines for some SQL Text string on PDB +* cs_spbl_list_all_cdb.sql - List all SQL Plan Baselines for some SQL Text string on CDB +* cs_spbl_sprf_spch_list_all.sql - List all SQL Plan Baselines, SQL Profiles and SQL Patches for some SQL Text string on PDB +* cs_spbl_plan.sql - Display SQL Plan Baseline for given SQL_ID +* cs_spbl_enable.sql - Enable one or all SQL Plan Baselines for given SQL_ID +* cs_spbl_disable.sql - Disable one or all SQL Plan Baselines for given SQL_ID +* cs_spbl_accept.sql - Accept one or all SQL Plan Baselines for given SQL_ID +* cs_spbl_fix.sql - Fix one or all SQL Plan Baselines for given SQL_ID +* cs_spbl_unfix.sql - Unfix one or all SQL Plan Baselines for given SQL_ID +* cs_spbl_stgtab.sql - Creates Staging Table for SQL Plan Baselines +* cs_spbl_stgtab_delete.sql - Deletes Staging Table for SQL Plan Baselines +* cs_spbl_pack.sql - Packs into staging table one or all SQL Plan Baselines for given SQL_ID +* cs_spbl_unpack.sql - Unpacks from staging table one or all SQL Plan Baselines for given SQL_ID +* cs_spbl_expdp.sql - Packs into staging table one or all SQL Plan Baselines for given SQL_ID and Exports such Baselines using Datapump +* cs_spbl_impdp.sql - Imports from Datapump file into a staging table all SQL Plan Baselines and Unpacks from staging table one or all SQL Plan Baselines for given SQL +* cs_spbl_meta.sql - SQL Plan Baseline Metadata for given SQL_ID +* cs_spbl_indexes.sql - List of Indexes Referenced by all SQL Plan Baselines on PDB +* cs_spbl_failed.sql - List of SQL Plans with: "Failed to use SQL plan baseline for this statement" +* cs_spbl_corrupt.sql - List of Corrupt SQL Plans with: missing Plan Rows from sys.sqlobj$plan +* cs_spbl_purge_outdated.sql - Purge Outdated SQL Plan Baselines +* create_spb_from_awr.sql - Create SQL Plan Baselin from AWR Plan (legacy script) +* create_spb_from_cur.sql - Create SQL Plan Baseline from SQL Cursor (legacy script) +* spm_backup.sql - Create DATAPUMP backup of SQL Plan Management (SPM) Repository for one PDB + +SPRF - SQL Profiles +------------------- +* cs_sprf_create.sql - Create a SQL Profile for given SQL_ID +* cs_sprf_drop.sql - Drop all SQL Profiles for given SQL_ID +* cs_sprf_drop_all.sql - Drop all SQL Profiles for some SQL Text string on PDB +* cs_sprf_list.sql - Summary list of SQL Profiles for given SQL_ID +* cs_sprf_list_all_pdb.sql - List all SQL Profiles for some SQL Text string on PDB +* cs_sprf_list_all_cdb.sql - List all SQL Profiles for some SQL Text string on CDB +* cs_sprf_plan.sql - Display SQL Profile Plan for given SQL_ID +* cs_sprf_enable.sql - Enable one or all SQL Profiles for given SQL_ID +* cs_sprf_disable.sql - Disable one or all SQL Profiles for given SQL_ID +* cs_sprf_xfr.sql - Transfers a SQL Profile for given SQL_ID +* cs_sprf_export.sql - Exports Execution Plans for some SQL_ID or all SQL in some PDBs, using SQL Profile(s) +* cs_sprf_stgtab.sql - Creates Staging Table for SQL Profiles +* cs_sprf_pack.sql - Packs into staging table one or all SQL Profiles for given SQL_ID +* cs_sprf_unpack.sql - Unpack from staging table one or all SQL Profiles for given SQL_ID +* cs_sprf_category.sql - Changes category for a SQL Profile for given SQL_ID +* cs_sprf_indexes.sql - List of Indexes Referenced by all SQL Profiles on PDB +* coe_xfr_sql_profile.sql - Transfer (copy) a SQL Profile from PDBx on CDBa into PDBy on CDBb (legacy script) + +SPCH - SQL Patches +------------------ +* cs_spch_first_rows.sql - Create a SQL Patch with FIRST_ROWS for given SQL_ID, and drops SQL Profile and SQL Plan Baselines +* cs_spch_create.sql - Create a SQL Patch for given SQL_ID +* cs_spch_drop.sql - Drop all SQL Patches for given SQL_ID +* cs_spch_drop_all.sql - Drop all SQL Patches for some SQL Text string on PDB +* cs_spch_list.sql - Summary list of SQL Patches for given SQL_ID +* cs_spch_list_all_pdb.sql - List all SQL Patches for some SQL Text string on PDB +* cs_spch_list_all_cdb.sql - List all SQL Patches for some SQL Text string on CDB +* cs_spch_plan.sql - Display SQL Patch Plan for given SQL_ID +* cs_spch_enable.sql - Enable one or all SQL Patches for given SQL_ID +* cs_spch_disable.sql - Disable one or all SQL Patches for given SQL_ID +* cs_spch_stgtab.sql - Creates Staging Table for SQL Patches +* cs_spch_pack.sql - Packs into staging table one or all SQL Patches for given SQL_ID +* cs_spch_unpack.sql - Unpack from staging table one or all SQL Patches for given SQL_ID +* cs_spch_xfr.sql - Transfers a SQL Patch for given SQL_ID +* cs_spch_category.sql - Changes category for a SQL Patch for given SQL_ID + +Sessions +-------- +* a.sql | as.sql | cs_active_sessions.sql - Active Sessions including SQL Text and Exection Plan +* am.sql | cs_ash_mem_sample_report.sql - ASH Samples from MEM +* ah.sql | cs_ash_awr_sample_report.sql - ASH Samples from AWR +* cs_ash_awr_block_chains_report.sql - ASH Block Chains Report from AWR +* cs_ash_mem_block_chains_report.sql - ASH Block Chains Report from MEM +* cs_ash_awr_peaks_report.sql - ASH Peaks Report from AWR +* cs_ash_mem_peaks_report.sql - ASH Peaks Report from MEM +* cs_ash_awr_peaks_chart.sql - ASH Peaks Chart from AWR +* cs_ash_mem_peaks_chart.sql - ASH Peaks Chart from MEM +* cs_ash_awr_peaks_bubble.sql - ASH Peaks Bubble from AWR +* cs_ash_mem_peaks_bubble.sql - ASH Peaks Bubble from MEM +* cs_sessions.sql - Simple list all current Sessions (all types and all statuses) +* cs_sessions_hist.sql - Simple list all historical Sessions (all types and all statuses) +* cs_sessions_PCTL_by_machine.sql - Sessions Percentiles by Machine +* cs_sessions_by_type_and_status_chart.sql - Sessions by Type and Status (time series chart) +* cs_sessions_by_machine_chart.sql - Sessions by Machine (time series chart) +* cs_sessions_age_by_machine_chart.sql - Session Age by Machine (time series chart) +* cs_sessions_by_pdb_chart.sql - Sessions by PDB (time series chart) +* cs_sess_mon.sql - Monitored Sessions +* mysid.sql - Get SID and SPID of own Session +* open_cursor.sql - Open Cursors and Count of Distinct SQL_ID per Session +* session_undo.sql - Displays undo information on relevant database sessions (by Tim Hall) + +Kill Sessions +------------- +* cs_kill_sid.sql - Kill one User Session +* cs_kill_sql_id.sql - Kill User Sessions executing some SQL_ID +* cs_kill_root_blockers.sql - Kill Root Blocker User Sessions +* cs_kill_machine.sql - Kill User Sessions connected from some Machine(s) +* cs_kill_scheduler.sql - Kill User Sessions waiting on Scheduler (Resource Manager) + +Blocked Sessions +---------------- +* bs.sql | cs_blocked_sessions_report.sql - Blocked Sessions Report +* cs_blocked_sessions_ash_awr_report.sql - Top Session Blockers by multiple Dimensions as per ASH from AWR (text report) +* cs_blocked_sessions_by_state_ash_awr_chart.sql - Top Session Blockers by State of Root Blocker as per ASH from AWR (time series chart) +* cs_blocked_sessions_by_machine_ash_awr_chart.sql - Top Session Blockers by Machine of Root Blocker as per ASH from AWR (time series chart) +* cs_blocked_sessions_by_module_ash_awr_chart.sql - Top Session Blockers by Module of Root Blocker as per ASH from AWR (time series chart) +* cs_blocked_sessions_by_sid_ash_awr_chart.sql - Top Session Blockers by SID of Root Blocker as per ASH from AWR (time series chart) + +Locks +----- +* locks.sql | cs_locks.sql - Locks Summary and Details +* cs_locks_mon.sql - Locks Summary and Details - Monitor +* cs_wait_chains.sql - Wait Chains (text report) + +Space Reporting +--------------- +* cs_df_u02_chart.sql - Disk FileSystem u02 Utilization Chart +* cs_top_pdb_size_chart.sql - Top PDB Disk Size Utilization (time series chart) +* cdb_tablespace_usage_metrics.sql - Application Tablespace Inventory for all PDBs +* cs_tablespaces.sql - Tablespace Utilization (text report) +* cs_tablespace_chart.sql - Tablespace Utilization (time series chart) +* cs_extents_map.sql - Tablespace Block Map +* cs_top_segments.sql - Top CDB or PDB Segments (text report) +* cs_top_segments_pdb.sql - Top PDB Segments (text report) +* cs_segment_chart.sql - Segment Size GBs for given Segment (time series chart) +* cs_tempseg_usage.sql - Temporary (Temp) Segment Usage (text report) +* cs_table_segments_chart.sql - Table-related Segment Size GBs (Table, Indexes and Lobs) for given Table (time series chart) +* cs_estimate_table_size.sql - Estimate Table Size +* cs_tables.sql - All Tables and Top N Tables (text report) +* cs_top_tables.sql - Top Tables according to Segment(s) size (text report) +* cs_top_table_size_chart.sql - Top PDB Tables (time series chart) +* cs_table.sql - Table Details +* cs_table_stats_chart.sql - CBO Statistics History for given Table (time series chart) +* cs_table_stats_30d_chart.sql - CBO Statistics History for given Table (30 days time series chart) +* cs_table_stats_report.sql - CBO Statistics History for given Table (time series text report) +* cs_table_mod_chart.sql - Table Modification History (INS, DEL and UPD) for given Table (time series chart) +* cs_table_mod_report.sql - Table Modification History (INS, DEL and UPD) for given Table (text report) +* cs_tables_rows_vs_count.sql - Compares CBO Stats Rows to COUNT(*) on Application Tables +* cs_tables_rows_vs_count_outliers.sql - Compares CBO Stats Rows to COUNT(*) on Application Tables and Reports Outliers +* cs_estimate_index_size.sql - Estimate Index Size +* cs_top_bloated_indexes.sql - Top bloated indexes on a PDB (text report) +* cs_top_indexes.sql - Top Indexes according to Segment(s) size +* cs_index_part_reorg.sql - Calculate index reorg savings +* cs_index_usage.sql - Index Usage (is an index still in use?) +* cs_foreign_key_fk_constraints_missing_indexes.sql - Generate DDL to create missing Indexes to support FK constraints +* cs_recyclebin.sql - Recyclebin Content +* cs_top_lobs.sql - Top Lobs according to Segment(s) size + +Space Maintenance +----------------- +* cs_tbs_resize.sql - Tablespace Resize +* cs_redef_table.sql - Table Redefinition +* cs_redef_table_silent.sql - Table Redefinition - Silent +* cs_redef_table_with_purge.sql - Table Redefinition with Purge +* cs_redef_schema.sql - Schema Redefinition (by moving all objects into new Tablespace) +* cs_redef_remove_lob_dedup_on_pdb.sql - Remove LOB Deduplication on PDB +* cs_drop_redef_table.sql - Generate commands to drop stale objects from failed Table Redefinition(s) + +Container +--------- +* cdb.sql - Connect into CDB$ROOT +* pdb.sql - List all PDBs and Connect into one PDB +* cs_pdbs.sql - PDBs attributes + +System Metrics +-------------- +* cs_all_sysmetric_for_cdb_mem.sql - All System Metrics as per V$SYSMETRIC Views for a CDB (text report) +* cs_all_sysmetric_for_pdb_mem.sql - All System Metrics as per V$CON_SYSMETRIC Views for a PDB (text report) +* cs_all_sysmetric_for_cdb_hist.sql - All System Metrics as per DBA_HIST_SYSMETRIC_SUMMARY View for a CDB (text report) +* cs_all_sysmetric_for_pdb_hist.sql - All System Metrics as per DBA_HIST_CON_SYSMETRIC_SUMM View for a PDB (text report) +* cs_load_sysmetric_for_cdb_mem.sql - System Load as per V$SYSMETRIC Views for a CDB (text report) +* cs_load_sysmetric_per_pdb_mem.sql - System Load as per V$CON_SYSMETRIC Views per PDB (text report) +* cs_load_sysmetric_for_pdb_mem.sql - System Load as per V$CON_SYSMETRIC Views for a PDB (text report) +* cs_load_sysmetric_for_cdb_hist.sql - System Load as per DBA_HIST_SYSMETRIC_SUMMARY View for a CDB (text report) +* cs_load_sysmetric_per_pdb_hist.sql - System Load as per DBA_HIST_CON_SYSMETRIC_SUMM View per PDB (text report) +* cs_load_sysmetric_for_pdb_hist.sql - System Load as per DBA_HIST_CON_SYSMETRIC_SUMM View for a PDB (text report) +* cs_one_sysmetric_per_pdb_chart.sql - One System Metric as per DBA_HIST_CON_SYSMETRIC_SUMM View per PDB (time series chart) +* cs_some_sysmetric_for_cdb_mem_chart.sql - Some System Metrics as per V$SYSMETRIC_HISTORY View for a CDB (time series chart) +* cs_some_sysmetric_for_pdb_mem_chart.sql - Some System Metrics as per V$CON_SYSMETRIC_HISTORY View for a PDB (time series chart) +* cs_some_sysmetric_for_cdb_hist_chart.sql - Some System Metrics as per DBA_HIST_SYSMETRIC_SUMMARY View for a CDB (time series chart) +* cs_some_sysmetric_for_pdb_hist_chart.sql - Some System Metrics as per DBA_HIST_CON_SYSMETRIC_SUMM View for a PDB (time series chart) +* cs_cpu_sysmetric_for_cdb_mem_chart.sql - CPU System Metrics as per V$SYSMETRIC_HISTORY View for a CDB (time series chart) +* cs_cpu_sysmetric_for_pdb_mem_chart.sql - CPU System Metrics as per V$CON_SYSMETRIC_HISTORY View for a PDB (time series chart) +* cs_cpu_sysmetric_for_cdb_hist_chart.sql - CPU System Metrics as per DBA_HIST_SYSMETRIC_SUMMARY View for a CDB (time series chart) +* cs_cpu_sysmetric_for_pdb_hist_chart.sql - CPU System Metrics as per DBA_HIST_CON_SYSMETRIC_SUMM View for a PDB (time series chart) + +System Stats and Events +----------------------- +* cs_sysstat_hist_chart.sql - Subset of System Statistics from AWR (time series chart) +* cs_sysstat_hist_chart_io.sql - IO System Statistics from AWR (time series chart) +* cs_system_event_hist_latency_chart.sql - Subset of System Event Latency from AWR (time series chart) +* cs_system_event_hist_load_char.sql - Subset of System Event AAS Load from AWR (time series chart) +* cs_system_event_hist_total_waits_chart.sql - Subset of System Event Total Waits from AWR (time series chart) +* cs_system_event_histogram_chart.sql - One System Event AAS Load Histogram from AWR as per Latency Bucket (time series chart) +* cs_sqlarea_per_pdb.sql - SQL Area per PDB +* cs_pga_consumers.sql - PGA Consumption per Process +* cs_resource_limit_chart.sql - Resource Limit (time series chart) +* cs_total_and_parse_cpu_to_db_chart.sql - Total and Parse CPU-to-DB Ratio from AWR (time series chart) +* cs_total_and_parse_db_and_cpu_aas_chart.sql - Total and Parse DB and CPU Average Active Sessions (AAS) from AWR (time series chart) + +Configuration +------------- +* cs_fix_configuration_and_parameters.sql - Fix database configuration and parameters set incorrectly +* cs_acs_enable.sql - Enable Adaptive Cursor Sharing (ACS) +* cs_acs_disable.sql - Disable Adaptive Cursor Sharing (ACS) +* cs_dba_hist_parameter.sql - System Parameters History +* cs_dg.sql - Data Guard Configuration +* cs_dg_protection_mode_switches.sql - Data Guard Protection Mode Switches as per Log Archive Dest +* cs_sgastat_awr_area_chart.sql - SGA Pools History Chart from AWR +* cs_sgastat_awr_line_chart.sql - SGA Pools History Chart from AWR (include free memory) +* cs_sgastat_awr_report.sql - SGA Pools History Report from AWR (include free memory) +* dba_high_water_mark_statistics.sql - Database High Water Mark (HWM) Statistics +* spfile.sql - SPFILE Parameters (from PDB or CDB) +* pdb_spfile.sql - PDB SPFILE Parameters (from CDB) +* syncup_pdb_parameters_to_standbys.sql - Sync up SPFILE PDB Parameters from Primary into Standby and Bystander +* hidden_parameter.sql - Get value of one hidden parameter +* hidden_parameters.sql - Get value of all hidden parameters + +Logs +---- +* log.sql - REDO Log on Primary and Standby +* log_history.sql - REDO Log History +* archived_log.sql - Archived Logs list + +Traces +------ +* cs_diag_trace.sql - Directory path for traces +* alert_log_tail.sql - Last 50 lines of alert log refreshed every 5 seconds 20 times +* cs_alert_log.sql - Get alert log +* cs_LGWR_trc.sql - Get log writer LGWR trace +* cs_DBRM_trc.sql - Get database resource manager DBRM trace +* cs_CKPT_trc.sql - Get check point CKPT trace +* cs_listener_log.sql - Get listener log +* cs_hanganalyze.sql - Generate Hanganalyze Trace +* cs_systemstate.sql - Generate System State Dump Trace +* cs_trace_session.sql - Trace one session given a SID +* trace_10046_sql_id.sql - Turn ON and OFF SQL Trace EVENT 10046 LEVEL 12 on given SQL_ID +* trace_10053_sql_id.sql - Turn ON and OFF SQL Trace EVENT 10053 LEVEL 1 on given SQL_ID +* trace_DUMP_sql_id.sql - DBMS_SQLDIAG.dump_trace SQL_Optimizer on given SQL_ID +* trace_SPM_sql_id.sql - Turn ON and OFF SQL Plan Management Trace on given SQL_ID +* trace_10046_mysid_on.sql - Turn ON SQL Trace EVENT 10046 LEVEL 12 on own Session +* trace_10046_mysid_off.sql - Turn OFF SQL Trace on own Session +* trace_10053_mysid_on.sql - Turn ON CBO EVENT 10053 LEVEL 1 on own Session +* trace_10053_mysid_off.sql - Turn OFF CBO EVENT 10053 on own Session +* trace_10046_10053_mysid_on.sql - Turn ON SQL Trace EVENT 10046 LEVEL 12 and 10053 on own Session +* trace_10046_10053_mysid_off.sql - Turn OFF SQL Trace and 10053 on own Session + +Reports +------- +* awrrpt.sql - AWR Report +* awrddrpt.sql - AWR Difference Report +* ashrpt.sql - ASH report +* awrsqrpt.sql - AWR SQL Report +* awr_snapshot.sql - Create AWR snapshot +* cs_dbms_stats_age.sql - DBMS_STATS Age as per "auto optimizer stats collection" +* cs_dbms_stats_gather_database_stats.sql - Execute DBMS_STATS.GATHER_DATABASE_STATS +* cs_dbms_stats_gather_database_stats_job.sql - Execute DBMS_STATS.GATHER_DATABASE_STATS (stand-alone) +* cs_dbms_stats_operations.sql - Generate DBMS_STATS.report_stats_operations +* cs_dbms_stats_auto.sql - Generate DBMS_STATS.report_gather_auto_stats +* cs_amw_report.sql - Automatic Maintenance Window Report + +Miscellaneous Utilities +----------------------- +* cs_fs.sql - Find SQL statements matching some string +* cs_mark_sql_hot.sql - Use DBMS_SHARED_POOL.markhot to reduce contention during high concurency hard parse +* cs_unmark_sql_hot.sql - Use DBMS_SHARED_POOL.unmarkhot to undo cs_mark_sql_hot.sql +* pr.sql | cs_pr.sql - Print Table (vertical display of result columns for last query) +* cs_burn_cpu.sql - Burn CPU in multiple cores/threads for some time +* cs_hexdump_to_timestamp.sql - Convert Hexadecimal Dump to Time +* cs_epoch_to_time.sql - Convert Epoch to Time +* cs_time_to_epoch.sql - Convert Time to Epoch +* cs_past_days_to_epoch.sql - Convert Past Days to Epoch +* opatch.sql - Oracle Patch Registry and History +* reason_not_shared.sql - Reasons for not sharing Cursors +* sysdate.sql - Display SYSDATE in Filename safe format and in YYYY-MM-DDTHH24:MI:SS UTC format +* view.sql - Display Text of a given VIEW name +* find_all_privs.sql - Roles and Priviledges for a given User (Pete Finnigan) + +Notes +----- +* To use these cscripts scripts, connect to database server as oracle, navigate to cscripts scripts directory, and connect into SQL*Plus as SYS. +* Execute h.sql or help.sql for full list above. Execute ls.sql for a full alphabetical list. Type q to exit. diff --git a/csierra/a.sql b/csierra/a.sql new file mode 100644 index 0000000..1e8386f --- /dev/null +++ b/csierra/a.sql @@ -0,0 +1 @@ +@@cs_active_sessions.sql \ No newline at end of file diff --git a/csierra/aa.sql b/csierra/aa.sql new file mode 100644 index 0000000..8bbdb36 --- /dev/null +++ b/csierra/aa.sql @@ -0,0 +1 @@ +@@cs_ash_analytics.sql \ No newline at end of file diff --git a/csierra/aas.sql b/csierra/aas.sql new file mode 100644 index 0000000..844ffad --- /dev/null +++ b/csierra/aas.sql @@ -0,0 +1 @@ +@@cs_average_active_sessions.sql \ No newline at end of file diff --git a/csierra/ah.sql b/csierra/ah.sql new file mode 100644 index 0000000..a6754eb --- /dev/null +++ b/csierra/ah.sql @@ -0,0 +1 @@ +@@cs_ash_awr_sample_report.sql \ No newline at end of file diff --git a/csierra/ahs.sql b/csierra/ahs.sql new file mode 100644 index 0000000..8d444a3 --- /dev/null +++ b/csierra/ahs.sql @@ -0,0 +1 @@ +@@cs_ash_snap_sample_report.sql \ No newline at end of file diff --git a/csierra/alert_log_tail.sql b/csierra/alert_log_tail.sql new file mode 100644 index 0000000..8801521 --- /dev/null +++ b/csierra/alert_log_tail.sql @@ -0,0 +1,8 @@ +-- Last 50 lines of alert log refreshed every 5 seconds 20 times +COL alert_log NEW_V alert_log FOR A150; +SELECT d.value||'/alert_'||t.instance||'.log' alert_log FROM v$diag_info d, v$thread t WHERE d.name = 'Diag Trace'; +HOS tail -n 50 &&alert_log. +PRO Executing alert_log_tail.sql 20 times... +EXEC DBMS_LOCK.sleep(5); +CLEAR SCREEN; +@@alert_log_tail.sql \ No newline at end of file diff --git a/csierra/am.sql b/csierra/am.sql new file mode 100644 index 0000000..76ceae1 --- /dev/null +++ b/csierra/am.sql @@ -0,0 +1 @@ +@@cs_ash_mem_sample_report.sql \ No newline at end of file diff --git a/csierra/archived_log.sql b/csierra/archived_log.sql new file mode 100644 index 0000000..57c7ed6 --- /dev/null +++ b/csierra/archived_log.sql @@ -0,0 +1,16 @@ +-- archived_log.sql - Archived Logs list +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +COL recid_range FOR A13; +-- +SELECT first_time, next_time, + (next_time - first_time) * 24 * 3600 seconds, + ROUND(AVG(blocks * block_size) / POWER(2,30), 3) size_gbs, MIN(recid)||'-'||MAX(recid) recid_range + FROM v$archived_log + WHERE name IS NOT NULL + GROUP BY + first_time, next_time + ORDER BY + first_time, next_time +/ \ No newline at end of file diff --git a/csierra/as.sql b/csierra/as.sql new file mode 100644 index 0000000..f5b72e0 --- /dev/null +++ b/csierra/as.sql @@ -0,0 +1 @@ +@@cs_internal/cs_active_sessions_internal.sql \ No newline at end of file diff --git a/csierra/ashrpt.sql b/csierra/ashrpt.sql new file mode 100644 index 0000000..619e13f --- /dev/null +++ b/csierra/ashrpt.sql @@ -0,0 +1,8 @@ +-- ASH report +@$ORACLE_HOME/rdbms/admin/ashrpt.sql +-- +HOS cp ashrpt_*.* /tmp +HOS chmod 644 /tmp/ashrpt_*.* +PRO +PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: +HOS echo "scp $HOSTNAME:/tmp/ashrpt_*.* ." \ No newline at end of file diff --git a/csierra/awr_snapshot.sql b/csierra/awr_snapshot.sql new file mode 100644 index 0000000..3e779cf --- /dev/null +++ b/csierra/awr_snapshot.sql @@ -0,0 +1,2 @@ +-- Create AWR snapshot +EXEC DBMS_WORKLOAD_REPOSITORY.create_snapshot; \ No newline at end of file diff --git a/csierra/awrddrpt.sql b/csierra/awrddrpt.sql new file mode 100644 index 0000000..7e79b68 --- /dev/null +++ b/csierra/awrddrpt.sql @@ -0,0 +1,8 @@ +-- AWR Difference Report +@$ORACLE_HOME/rdbms/admin/awrddrpt.sql +-- +HOS cp awrdiff_*.* /tmp +HOS chmod 644 /tmp/awrdiff_*.* +PRO +PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: +HOS echo "scp $HOSTNAME:/tmp/awrdiff_*.* ." \ No newline at end of file diff --git a/csierra/awrrpt.sql b/csierra/awrrpt.sql new file mode 100644 index 0000000..9bd27d4 --- /dev/null +++ b/csierra/awrrpt.sql @@ -0,0 +1,8 @@ +-- AWR Report +@$ORACLE_HOME/rdbms/admin/awrrpt.sql +-- +HOS cp awrrpt_*.* /tmp +HOS chmod 644 /tmp/awrrpt_*.* +PRO +PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: +HOS echo "scp $HOSTNAME:/tmp/awrrpt_*.* ." \ No newline at end of file diff --git a/csierra/awrsqrpt.sql b/csierra/awrsqrpt.sql new file mode 100644 index 0000000..708eccd --- /dev/null +++ b/csierra/awrsqrpt.sql @@ -0,0 +1,8 @@ +-- AWR SQL Report +@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql +-- +HOS cp awrsqlrpt_*.* /tmp +HOS chmod 644 /tmp/awrsqlrpt_*.* +PRO +PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: +HOS echo "scp $HOSTNAME:/tmp/awrsqlrpt_*.* ." \ No newline at end of file diff --git a/csierra/bs.sql b/csierra/bs.sql new file mode 100644 index 0000000..340eaf6 --- /dev/null +++ b/csierra/bs.sql @@ -0,0 +1 @@ +@@cs_blocked_sessions_report.sql \ No newline at end of file diff --git a/csierra/cdb.sql b/csierra/cdb.sql new file mode 100644 index 0000000..aabbb21 --- /dev/null +++ b/csierra/cdb.sql @@ -0,0 +1,7 @@ +-- @@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET container = CDB$ROOT; +-- +UNDEF 1 2 3 4 5 6 7 8 9 10 11 12; +@@set.sql +CLEAR BREAK COLUMNS COMPUTE; +-- \ No newline at end of file diff --git a/csierra/cdb_attributes_setup.sql b/csierra/cdb_attributes_setup.sql new file mode 100644 index 0000000..f220778 --- /dev/null +++ b/csierra/cdb_attributes_setup.sql @@ -0,0 +1,185 @@ +-- Create cdb_attributes Table and merge_cdb_attributes Procedure for IOD Fleet Inventory +CREATE TABLE c##iod.cdb_attributes ( + -- soft PK + version VARCHAR2(10), + db_domain VARCHAR2(64), + db_name VARCHAR2(9), + -- columns + host_name VARCHAR2(64), + disk_config VARCHAR2(16), + host_shape VARCHAR2(64), + host_class VARCHAR2(64), + num_cpu_cores NUMBER, + num_cpu_threads NUMBER, + maxed_out NUMBER, + cdb_weight NUMBER, + load_avg NUMBER, + load_p90 NUMBER, + load_p95 NUMBER, + load_p99 NUMBER, + aas_on_cpu_avg NUMBER, + aas_on_cpu_p90 NUMBER, + aas_on_cpu_p95 NUMBER, + aas_on_cpu_p99 NUMBER, + u02_size_1m NUMBER, + u02_used_1m NUMBER, + u02_available_1m NUMBER, + u02_size NUMBER, + u02_used NUMBER, + u02_available NUMBER, + fs_u02_util_perc NUMBER, + fs_u02_at_80p VARCHAR2(10), + fs_u02_at_90p VARCHAR2(10), + fs_u02_at_95p VARCHAR2(10), + db_version VARCHAR2(17), + dg_members NUMBER, + pdbs NUMBER, + kiev_flag VARCHAR2(1), + kiev_pdbs NUMBER, + wf_flag VARCHAR2(1), + wf_pdbs NUMBER, + casper_flag VARCHAR2(1), + casper_pdbs NUMBER, + -- extension + realm_type VARCHAR2(12), -- Commercial | Government + realm_type_order_by NUMBER, + realm VARCHAR2(12), -- R1, OC1, OC2, OC3, OC4 + realm_order_by NUMBER, + region VARCHAR2(64), + region_acronym VARCHAR2(10), + region_order_by NUMBER, + locale VARCHAR2(4), + locale_order_by NUMBER +) +TABLESPACE iod +/ + +ALTER TABLE c##iod.cdb_attributes ADD ( + disk_config VARCHAR2(16), + host_shape VARCHAR2(64), + host_class VARCHAR2(64) +) +/ + +ALTER TABLE c##iod.cdb_attributes ADD ( + db_version VARCHAR2(17) +) +/ + +CREATE UNIQUE INDEX c##iod.cdb_attributes_pk +ON c##iod.cdb_attributes +(version, db_domain, db_name) +COMPRESS ADVANCED LOW +TABLESPACE IOD +/ + +-- SELECT * FROM c##iod.cdb_attributes WHERE (version, db_domain, db_name) IN ( +-- SELECT DISTINCT version, db_domain, db_name +-- FROM c##iod.cdb_attributes +-- --WHERE version > SYSDATE - 30 +-- GROUP BY version, db_domain, db_name +-- HAVING COUNT(*) > 1 +-- ) +-- / + +-- DELETE c##iod.cdb_attributes WHERE version < SYSDATE - 30; + + +CREATE OR REPLACE +PROCEDURE c##iod.merge_cdb_attributes ( + p_version IN VARCHAR2, + p_host_name IN VARCHAR2, + p_db_domain IN VARCHAR2, + p_disk_config IN VARCHAR2, + p_host_shape IN VARCHAR2, + p_host_class IN VARCHAR2, + p_num_cpu_cores IN NUMBER, + p_num_cpu_threads IN NUMBER, + p_maxed_out IN NUMBER, + p_cdb_weight IN NUMBER, + p_load_avg IN NUMBER, + p_load_p90 IN NUMBER, + p_load_p95 IN NUMBER, + p_load_p99 IN NUMBER, + p_aas_on_cpu_avg IN NUMBER, + p_aas_on_cpu_p90 IN NUMBER, + p_aas_on_cpu_p95 IN NUMBER, + p_aas_on_cpu_p99 IN NUMBER, + p_u02_size_1m IN NUMBER, + p_u02_used_1m IN NUMBER, + p_u02_available_1m IN NUMBER, + p_u02_size IN NUMBER, + p_u02_used IN NUMBER, + p_u02_available IN NUMBER, + p_fs_u02_util_perc IN NUMBER, + p_fs_u02_at_80p IN VARCHAR2, + p_fs_u02_at_90p IN VARCHAR2, + p_fs_u02_at_95p IN VARCHAR2, + p_db_name IN VARCHAR2, + p_db_version IN VARCHAR2, + p_dg_members IN NUMBER, + p_pdbs IN NUMBER, + p_kiev_pdbs IN NUMBER, + p_wf_pdbs IN NUMBER, + p_casper_pdbs IN NUMBER +) +IS + r c##iod.cdb_attributes%ROWTYPE; +BEGIN + r.version := p_version; + r.host_name := LOWER(TRIM(p_host_name)); + r.db_domain := LOWER(TRIM(p_db_domain)); + r.disk_config := LOWER(TRIM(p_disk_config)); + r.host_shape := LOWER(TRIM(p_host_shape)); + r.host_class := UPPER(TRIM(p_host_class)); + r.num_cpu_cores := p_num_cpu_cores; + r.num_cpu_threads := p_num_cpu_threads; + r.maxed_out := p_maxed_out; + r.cdb_weight := p_cdb_weight; + r.load_avg := p_load_avg; + r.load_p90 := p_load_p90; + r.load_p95 := p_load_p95; + r.load_p99 := p_load_p99; + r.aas_on_cpu_avg := p_aas_on_cpu_avg; + r.aas_on_cpu_p90 := p_aas_on_cpu_p90; + r.aas_on_cpu_p95 := p_aas_on_cpu_p95; + r.aas_on_cpu_p99 := p_aas_on_cpu_p99; + r.u02_size_1m := p_u02_size_1m; + r.u02_used_1m := p_u02_used_1m; + r.u02_available_1m := p_u02_available_1m; + r.u02_size := p_u02_size; + r.u02_used := p_u02_used; + r.u02_available := p_u02_available; + r.fs_u02_util_perc := p_fs_u02_util_perc; + r.fs_u02_at_80p := p_fs_u02_at_80p; + r.fs_u02_at_90p := p_fs_u02_at_90p; + r.fs_u02_at_95p := p_fs_u02_at_95p; + r.db_name := UPPER(TRIM(p_db_name)); + r.db_version := TRIM(p_db_version); + r.dg_members := p_dg_members; + r.pdbs := p_pdbs; + r.kiev_pdbs := p_kiev_pdbs; + r.wf_pdbs := p_wf_pdbs; + r.casper_pdbs := p_casper_pdbs; + -- + r.region := C##IOD.IOD_META_AUX.get_region(r.host_name); + r.locale := C##IOD.IOD_META_AUX.get_locale(r.db_domain); + r.locale_order_by := C##IOD.IOD_META_AUX.get_locale_order_by(r.db_domain); + r.realm_type := C##IOD.IOD_META_AUX.get_realm_type(r.region); + IF r.realm_type = 'C' THEN r.realm_type := 'Commercial'; ELSE r.realm_type := 'Government'; END IF; + r.realm_type_order_by := C##IOD.IOD_META_AUX.get_realm_type_order_by(r.region); + r.realm := C##IOD.IOD_META_AUX.get_realm(r.region); + r.realm_order_by := C##IOD.IOD_META_AUX.get_realm_order_by(r.region); + r.region_acronym := C##IOD.IOD_META_AUX.get_region_acronym(r.region); + r.region_order_by := C##IOD.IOD_META_AUX.get_region_order_by(r.region); + -- + IF p_kiev_pdbs > 0 THEN r.kiev_flag := 'Y'; ELSE r.kiev_flag := 'N'; END IF; + IF p_wf_pdbs > 0 THEN r.wf_flag := 'Y'; ELSE r.wf_flag := 'N'; END IF; + IF p_casper_pdbs > 0 THEN r.casper_flag := 'Y'; ELSE r.casper_flag := 'N'; END IF; + -- + DELETE c##iod.cdb_attributes WHERE version = r.version AND db_domain = r.db_domain AND db_name = r.db_name; + INSERT INTO c##iod.cdb_attributes VALUES r; + COMMIT; +END merge_cdb_attributes; +/ +SHOW ERRORS; diff --git a/csierra/cdb_tablespace_usage_metrics.sql b/csierra/cdb_tablespace_usage_metrics.sql new file mode 100644 index 0000000..4bc3e70 --- /dev/null +++ b/csierra/cdb_tablespace_usage_metrics.sql @@ -0,0 +1,69 @@ +-- Application Tablespace Inventory for all PDBs +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +SET RECSEP OFF; +-- +CLEAR BREAK COMPUTE; +COL pdb_tablespace_name1 FOR A35 HEA 'PDB|TABLESPACE_NAME'; +COL pdb_tablespace_name2 FOR A35 HEA 'PDB|TABLESPACE_NAME'; +COL used_space_gbs1 FOR 999,990.000 HEA 'USED_SPACE|(GB)'; +COL used_space_gbs2 FOR 999,990.000 HEA 'USED_SPACE|(GB)'; +COL max_size_gbs1 FOR 999,990.000 HEA 'MAX_SIZE|(GB)'; +COL max_size_gbs2 FOR 999,990.000 HEA 'MAX_SIZE|(GB)'; +COL used_percent1 FOR 990.000 HEA 'USED|PERCENT'; +COL used_percent2 FOR 990.000 HEA 'USED|PERCENT'; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF used_space_gbs1 max_size_gbs1 used_space_gbs2 max_size_gbs2 ON REPORT; +-- +COL output_file_name NEW_V output_file_name NOPRI; +SELECT 'cdb_tablespace_usage_metrics_'||LOWER(name)||'_'||LOWER(REPLACE(SUBSTR(host_name, 1 + INSTR(host_name, '.', 1, 2), 30), '.', '_'))||'_'||TO_CHAR(SYSDATE, 'yyyymmdd"T"hh24miss') output_file_name FROM v$database, v$instance; +-- +SPO &&output_file_name..txt; +PRO +PRO SQL> @cdb_tablespace_usage_metrics.sql +PRO +PRO &&output_file_name..txt; +PRO +WITH +t AS ( +SELECT c.name||'('||c.con_id||')' pdb, + m.tablespace_name, + ROUND(m.used_percent, 3) used_percent, -- as per maximum size (considering auto extend) + ROUND(m.used_space * t.block_size / POWER(10, 9), 3) used_space_gbs, + ROUND(m.tablespace_size * t.block_size / POWER(10, 9), 3) max_size_gbs, + ROW_NUMBER() OVER (ORDER BY c.name, m.tablespace_name) row_number1, + ROW_NUMBER() OVER (ORDER BY m.used_percent DESC, m.used_space * t.block_size DESC, m.tablespace_size * t.block_size DESC) row_number2 + FROM cdb_tablespace_usage_metrics m, + cdb_tablespaces t, + v$containers c + WHERE t.con_id = m.con_id + AND t.tablespace_name = m.tablespace_name + AND t.status = 'ONLINE' + AND t.contents = 'PERMANENT' + AND t.tablespace_name NOT IN ('SYSTEM', 'SYSAUX') + AND c.con_id = m.con_id + AND c.open_mode = 'READ WRITE' +) +SELECT t1.pdb||CHR(10)||' '|| + t1.tablespace_name pdb_tablespace_name1, + t1.used_percent used_percent1, + t1.used_space_gbs used_space_gbs1, + t1.max_size_gbs max_size_gbs1, + '|'||CHR(10)||'|' "|", + t2.used_percent used_percent2, + t2.used_space_gbs used_space_gbs2, + t2.max_size_gbs max_size_gbs2, + t2.pdb||CHR(10)||' '|| + t2.tablespace_name pdb_tablespace_name2 + FROM t t1, t t2 + WHERE t1.row_number1 = t2.row_number2 + ORDER BY + t1.row_number1 +/ +PRO +PRO &&output_file_name..txt; +PRO +SPO OFF; +-- +CLEAR BREAK COMPUTE; diff --git a/csierra/coe_xfr_sql_profile.sql b/csierra/coe_xfr_sql_profile.sql new file mode 100644 index 0000000..172781b --- /dev/null +++ b/csierra/coe_xfr_sql_profile.sql @@ -0,0 +1,500 @@ +-- Transfer (copy) a SQL Profile from PDBx on CDBa into PDBy on CDBb +SPO coe_xfr_sql_profile.log; +SET DEF ON TERM OFF ECHO ON FEED OFF VER OFF HEA ON LIN 2000 PAGES 100 LONG 8000000 LONGC 800000 TRIMS ON TI OFF TIMI OFF SERVEROUT ON SIZE 1000000 NUMF "" SQLP SQL>; +SET SERVEROUT ON SIZE UNL; +REM +REM $Header: coe_xfr_sql_profile.sql 2020/03/10 carlos.sierra $ +REM +REM AUTHOR +REM Carlos Sierra +REM +REM SCRIPT +REM coe_xfr_sql_profile.sql +REM +REM DESCRIPTION +REM This script generates another that contains the commands to +REM create a manual custom SQL Profile out of a known plan from +REM memory or AWR. The manual custom profile can be implemented +REM into the same SOURCE system where the plan was retrieved, +REM or into another similar TARGET system that has same schema +REM objects referenced by the SQL that generated the known plan. +REM +REM PRE-REQUISITES +REM 1. Oracle Tuning Pack license. +REM +REM PARAMETERS +REM 1. SQL_ID (required) +REM 2. Plan Hash Value for which a manual custom SQL Profile is +REM needed (required). A list of known plans is presented. +REM You may choose from list provided or enter a valid phv +REM from a version of the SQL modified with Hints. +REM +REM EXECUTION +REM 1. Connect into SQL*Plus as user with access to data dictionary. +REM Do not use SYS. +REM 2. Execute script coe_xfr_sql_profile.sql passing SQL_ID and +REM plan hash value (parameters can be passed inline or until +REM requested). +REM +REM EXAMPLE +REM # sqlplus system +REM SQL> START coe_xfr_sql_profile.sql [SQL_ID] [PLAN_HASH_VALUE]; +REM SQL> START coe_xfr_sql_profile.sql gnjy0mn4y9pbm 2055843663; +REM SQL> START coe_xfr_sql_profile.sql gnjy0mn4y9pbm; +REM SQL> START coe_xfr_sql_profile.sql; +REM +REM NOTES +REM 1. For possible errors see coe_xfr_sql_profile.log +REM 2. If SQLT is installed in SOURCE, you can use instead: +REM sqlt/utl/sqltprofile.sql +REM 3. Be aware that using DBMS_SQLTUNE requires a license for +REM Oracle Tuning Pack. +REM 4. Use a DBA user but not SYS. +REM 5. If you get "ORA-06532: Subscript outside of limit, ORA-06512: at line 1" +REM Then you may consider this change (only in a test and disposable system): +REM create or replace TYPE sys.sqlprof_attr AS VARRAY(5000) of VARCHAR2(500); +REM +SET TERM ON ECHO OFF; +PRO +PRO Parameter 1: +PRO SQL_ID (required) +PRO +DEF sql_id = '&1.'; +UNDEF 1; +PRO +WITH +p AS ( +SELECT plan_hash_value + FROM gv$sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND other_xml IS NOT NULL + UNION +SELECT plan_hash_value + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND dbid = (SELECT dbid FROM v$database) + AND other_xml IS NOT NULL ), +m AS ( +SELECT plan_hash_value, + SUM(elapsed_time)/SUM(executions) avg_et_secs, + SUM(executions) executions + FROM gv$sql + WHERE sql_id = TRIM('&&sql_id.') + AND executions > 0 + GROUP BY + plan_hash_value ), +a AS ( +SELECT plan_hash_value, + SUM(elapsed_time_delta)/SUM(executions_delta) avg_et_secs, + SUM(executions_delta) executions + FROM dba_hist_sqlstat + WHERE sql_id = TRIM('&&sql_id.') + AND executions_delta > 0 + GROUP BY + plan_hash_value ) +SELECT + TO_CHAR(ROUND(m.avg_et_secs/1e6, 6), '999,990.000000') avg_et_secs_mem, + TO_CHAR(ROUND(a.avg_et_secs/1e6, 6), '999,990.000000') avg_et_secs_awr, + p.plan_hash_value, + m.executions executions_mem, + a.executions executions_awr + --TO_CHAR(ROUND(NVL(m.avg_et_secs, a.avg_et_secs)/1e6, 6), '999,990.000000') avg_et_secs + FROM p, m, a + WHERE p.plan_hash_value = m.plan_hash_value(+) + AND p.plan_hash_value = a.plan_hash_value(+) + ORDER BY + NVL(m.avg_et_secs, a.avg_et_secs) NULLS LAST, a.avg_et_secs; +PRO +PRO Parameter 2: +PRO PLAN_HASH_VALUE (required) +PRO +DEF plan_hash_value = '&2'; +UNDEF 2; +PRO +PRO Values passed to coe_xfr_sql_profile: +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO SQL_ID : "&&sql_id." +PRO PLAN_HASH_VALUE: "&&plan_hash_value." +PRO +SET TERM OFF ECHO ON; +WHENEVER SQLERROR EXIT SQL.SQLCODE; + +-- trim parameters +COL sql_id NEW_V sql_id FOR A30; +COL plan_hash_value NEW_V plan_hash_value FOR A30; +SELECT TRIM('&&sql_id.') sql_id, TRIM('&&plan_hash_value.') plan_hash_value FROM DUAL; + +VAR sql_text CLOB; +VAR sql_text2 CLOB; +VAR other_xml CLOB; +EXEC :sql_text := NULL; +EXEC :sql_text2 := NULL; +EXEC :other_xml := NULL; + +-- get sql_text from memory +DECLARE + l_sql_text VARCHAR2(32767); +BEGIN -- 10g see bug 5017909 + FOR i IN (SELECT DISTINCT piece, sql_text + FROM gv$sqltext_with_newlines + WHERE sql_id = TRIM('&&sql_id.') + ORDER BY 1, 2) + LOOP + IF :sql_text IS NULL THEN + DBMS_LOB.CREATETEMPORARY(:sql_text, TRUE); + DBMS_LOB.OPEN(:sql_text, DBMS_LOB.LOB_READWRITE); + END IF; + -- removes NUL characters + l_sql_text := REPLACE(i.sql_text, CHR(00), ' '); + -- adds a NUL character at the end of each line + DBMS_LOB.WRITEAPPEND(:sql_text, LENGTH(l_sql_text) + 1, l_sql_text||CHR(00)); + END LOOP; + -- if found in memory then sql_text is not null + IF :sql_text IS NOT NULL THEN + DBMS_LOB.CLOSE(:sql_text); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting sql_text from memory: '||SQLERRM); + :sql_text := NULL; +END; +/ + +SELECT :sql_text FROM DUAL; + +-- get sql_text from awr +DECLARE + l_sql_text VARCHAR2(32767); + l_clob_size NUMBER; + l_offset NUMBER; +BEGIN + IF :sql_text IS NULL OR NVL(DBMS_LOB.GETLENGTH(:sql_text), 0) = 0 THEN + SELECT sql_text + INTO :sql_text2 + FROM dba_hist_sqltext + WHERE sql_id = TRIM('&&sql_id.') + AND sql_text IS NOT NULL + AND ROWNUM = 1; + END IF; + -- if found in awr then sql_text2 is not null + IF :sql_text2 IS NOT NULL THEN + l_clob_size := NVL(DBMS_LOB.GETLENGTH(:sql_text2), 0); + l_offset := 1; + DBMS_LOB.CREATETEMPORARY(:sql_text, TRUE); + DBMS_LOB.OPEN(:sql_text, DBMS_LOB.LOB_READWRITE); + -- store in clob as 64 character pieces plus a NUL character at the end of each piece + WHILE l_offset < l_clob_size + LOOP + IF l_clob_size - l_offset > 64 THEN + l_sql_text := REPLACE(DBMS_LOB.SUBSTR(:sql_text2, 64, l_offset), CHR(00), ' '); + ELSE -- last piece + l_sql_text := REPLACE(DBMS_LOB.SUBSTR(:sql_text2, l_clob_size - l_offset + 1, l_offset), CHR(00), ' '); + END IF; + DBMS_LOB.WRITEAPPEND(:sql_text, LENGTH(l_sql_text) + 1, l_sql_text||CHR(00)); + l_offset := l_offset + 64; + END LOOP; + DBMS_LOB.CLOSE(:sql_text); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting sql_text from awr: '||SQLERRM); + :sql_text := NULL; +END; +/ + +SELECT :sql_text2 FROM DUAL; +SELECT :sql_text FROM DUAL; + +-- validate sql_text +SET TERM ON; +BEGIN + IF :sql_text IS NULL THEN + RAISE_APPLICATION_ERROR(-20100, 'SQL_TEXT for SQL_ID &&sql_id. was not found in memory (gv$sqltext_with_newlines) or AWR (dba_hist_sqltext).'); + END IF; +END; +/ +SET TERM OFF; + +-- get other_xml from memory +BEGIN + FOR i IN (SELECT other_xml + FROM gv$sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + child_number, id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from memory: '||SQLERRM); + :other_xml := NULL; +END; +/ + +-- get other_xml from awr +BEGIN + IF :other_xml IS NULL OR NVL(DBMS_LOB.GETLENGTH(:other_xml), 0) = 0 THEN + FOR i IN (SELECT other_xml + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND dbid = (SELECT dbid FROM v$database) + AND other_xml IS NOT NULL + ORDER BY + id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from awr: '||SQLERRM); + :other_xml := NULL; +END; +/ + +-- get other_xml from memory from modified SQL +BEGIN + IF :other_xml IS NULL OR NVL(DBMS_LOB.GETLENGTH(:other_xml), 0) = 0 THEN + FOR i IN (SELECT other_xml + FROM gv$sql_plan + WHERE plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + --WHERE full_plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + child_number, id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from memory: '||SQLERRM); + :other_xml := NULL; +END; +/ + +-- get other_xml from awr from modified SQL +BEGIN + IF :other_xml IS NULL OR NVL(DBMS_LOB.GETLENGTH(:other_xml), 0) = 0 THEN + FOR i IN (SELECT other_xml + FROM dba_hist_sql_plan + WHERE plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + --WHERE full_plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND dbid = (SELECT dbid FROM v$database) + AND other_xml IS NOT NULL + ORDER BY + id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from awr: '||SQLERRM); + :other_xml := NULL; +END; +/ + +SELECT :other_xml FROM DUAL; + +-- validate other_xml +SET TERM ON; +BEGIN + IF :other_xml IS NULL THEN + RAISE_APPLICATION_ERROR(-20101, 'PLAN for SQL_ID &&sql_id. and PHV &&plan_hash_value. was not found in memory (gv$sql_plan) or AWR (dba_hist_sql_plan).'); + END IF; +END; +/ +SET TERM OFF; + +-- generates script that creates sql profile in target system: +SET ECHO OFF; +PRO coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql. +SET FEED OFF LIN 666 TRIMS ON TI OFF TIMI OFF SERVEROUT ON SIZE 1000000 FOR WOR; +SET SERVEROUT ON SIZE UNL FOR WOR; +SPO OFF; +SPO coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql; +DECLARE + l_pos NUMBER; + l_clob_size NUMBER; + l_offset NUMBER; + l_sql_text VARCHAR2(32767); + l_len NUMBER; + l_hint VARCHAR2(32767); +BEGIN + DBMS_OUTPUT.PUT_LINE('SPO coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..log;'); + DBMS_OUTPUT.PUT_LINE('SET ECHO ON TERM ON LIN 2000 TRIMS ON NUMF 99999999999999999999;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM $Header: 215187.1 coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql 11.4.4.4 '||TO_CHAR(SYSDATE, 'YYYY/MM/DD')||' carlos.sierra $'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM Copyright (c) 2000-2012, Oracle Corporation. All rights reserved.'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM AUTHOR'); + DBMS_OUTPUT.PUT_LINE('REM carlos.sierra@oracle.com'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM SCRIPT'); + DBMS_OUTPUT.PUT_LINE('REM coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM DESCRIPTION'); + DBMS_OUTPUT.PUT_LINE('REM This script is generated by coe_xfr_sql_profile.sql'); + DBMS_OUTPUT.PUT_LINE('REM It contains the SQL*Plus commands to create a custom'); + DBMS_OUTPUT.PUT_LINE('REM SQL Profile for SQL_ID &&sql_id. based on plan hash'); + DBMS_OUTPUT.PUT_LINE('REM value &&plan_hash_value..'); + DBMS_OUTPUT.PUT_LINE('REM The custom SQL Profile to be created by this script'); + DBMS_OUTPUT.PUT_LINE('REM will affect plans for SQL commands with signature'); + DBMS_OUTPUT.PUT_LINE('REM matching the one for SQL Text below.'); + DBMS_OUTPUT.PUT_LINE('REM Review SQL Text and adjust accordingly.'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM PARAMETERS'); + DBMS_OUTPUT.PUT_LINE('REM None.'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM EXAMPLE'); + DBMS_OUTPUT.PUT_LINE('REM SQL> START coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM NOTES'); + DBMS_OUTPUT.PUT_LINE('REM 1. Should be run as SYSTEM or SYSDBA.'); + DBMS_OUTPUT.PUT_LINE('REM 2. User must have CREATE ANY SQL PROFILE privilege.'); + DBMS_OUTPUT.PUT_LINE('REM 3. SOURCE and TARGET systems can be the same or similar.'); + DBMS_OUTPUT.PUT_LINE('REM 4. To drop this custom SQL Profile after it has been created:'); + DBMS_OUTPUT.PUT_LINE('REM EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(''coe_&&sql_id._&&plan_hash_value.'');'); + DBMS_OUTPUT.PUT_LINE('REM 5. Be aware that using DBMS_SQLTUNE requires a license'); + DBMS_OUTPUT.PUT_LINE('REM for the Oracle Tuning Pack.'); + DBMS_OUTPUT.PUT_LINE('REM 6. If you modified a SQL putting Hints in order to produce a desired'); + DBMS_OUTPUT.PUT_LINE('REM Plan, you can remove the artifical Hints from SQL Text pieces below.'); + DBMS_OUTPUT.PUT_LINE('REM By doing so you can create a custom SQL Profile for the original'); + DBMS_OUTPUT.PUT_LINE('REM SQL but with the Plan captured from the modified SQL (with Hints).'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('WHENEVER SQLERROR EXIT SQL.SQLCODE;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('VAR signature NUMBER;'); + DBMS_OUTPUT.PUT_LINE('VAR signaturef NUMBER;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('DECLARE'); + DBMS_OUTPUT.PUT_LINE('sql_txt CLOB;'); + DBMS_OUTPUT.PUT_LINE('h SYS.SQLPROF_ATTR;'); + DBMS_OUTPUT.PUT_LINE('PROCEDURE wa (p_line IN VARCHAR2) IS'); + DBMS_OUTPUT.PUT_LINE('BEGIN'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.WRITEAPPEND(sql_txt, LENGTH(p_line), p_line);'); + DBMS_OUTPUT.PUT_LINE('END wa;'); + DBMS_OUTPUT.PUT_LINE('BEGIN'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.CREATETEMPORARY(sql_txt, TRUE);'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.OPEN(sql_txt, DBMS_LOB.LOB_READWRITE);'); + DBMS_OUTPUT.PUT_LINE('-- SQL Text pieces below do not have to be of same length.'); + DBMS_OUTPUT.PUT_LINE('-- So if you edit SQL Text (i.e. removing temporary Hints),'); + DBMS_OUTPUT.PUT_LINE('-- there is no need to edit or re-align unmodified pieces.'); + l_clob_size := NVL(DBMS_LOB.GETLENGTH(:sql_text), 0); + l_offset := 1; + WHILE l_offset < l_clob_size + LOOP + l_pos := DBMS_LOB.INSTR(:sql_text, CHR(00), l_offset); + IF l_pos > 0 THEN + l_len := l_pos - l_offset; + ELSE -- last piece + l_len := l_clob_size - l_pos + 1; + END IF; + l_sql_text := DBMS_LOB.SUBSTR(:sql_text, l_len, l_offset); + /* cannot do such 3 replacement since a line could end with a comment using "--" + l_sql_text := REPLACE(l_sql_text, CHR(10), ' '); -- replace LF with SP + l_sql_text := REPLACE(l_sql_text, CHR(13), ' '); -- replace CR with SP + l_sql_text := REPLACE(l_sql_text, CHR(09), ' '); -- replace TAB with SP + */ + l_offset := l_offset + l_len + 1; + IF l_len > 0 THEN + IF INSTR(l_sql_text, '''[') + INSTR(l_sql_text, ']''') = 0 THEN + l_sql_text := '['||l_sql_text||']'; + ELSIF INSTR(l_sql_text, '''{') + INSTR(l_sql_text, '}''') = 0 THEN + l_sql_text := '{'||l_sql_text||'}'; + ELSIF INSTR(l_sql_text, '''<') + INSTR(l_sql_text, '>''') = 0 THEN + l_sql_text := '<'||l_sql_text||'>'; + ELSIF INSTR(l_sql_text, '''(') + INSTR(l_sql_text, ')''') = 0 THEN + l_sql_text := '('||l_sql_text||')'; + ELSIF INSTR(l_sql_text, '''"') + INSTR(l_sql_text, '"''') = 0 THEN + l_sql_text := '"'||l_sql_text||'"'; + ELSIF INSTR(l_sql_text, '''|') + INSTR(l_sql_text, '|''') = 0 THEN + l_sql_text := '|'||l_sql_text||'|'; + ELSIF INSTR(l_sql_text, '''~') + INSTR(l_sql_text, '~''') = 0 THEN + l_sql_text := '~'||l_sql_text||'~'; + ELSIF INSTR(l_sql_text, '''^') + INSTR(l_sql_text, '^''') = 0 THEN + l_sql_text := '^'||l_sql_text||'^'; + ELSIF INSTR(l_sql_text, '''@') + INSTR(l_sql_text, '@''') = 0 THEN + l_sql_text := '@'||l_sql_text||'@'; + ELSIF INSTR(l_sql_text, '''#') + INSTR(l_sql_text, '#''') = 0 THEN + l_sql_text := '#'||l_sql_text||'#'; + ELSIF INSTR(l_sql_text, '''%') + INSTR(l_sql_text, '%''') = 0 THEN + l_sql_text := '%'||l_sql_text||'%'; + ELSIF INSTR(l_sql_text, '''$') + INSTR(l_sql_text, '$''') = 0 THEN + l_sql_text := '$'||l_sql_text||'$'; + ELSE + l_sql_text := CHR(96)||l_sql_text||CHR(96); + END IF; + DBMS_OUTPUT.PUT_LINE('wa(q'''||l_sql_text||''');'); + END IF; + END LOOP; + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.CLOSE(sql_txt);'); + DBMS_OUTPUT.PUT_LINE('h := SYS.SQLPROF_ATTR('); + DBMS_OUTPUT.PUT_LINE('q''[BEGIN_OUTLINE_DATA]'','); + FOR i IN (SELECT /*+ opt_param('parallel_execution_enabled', 'false') */ + SUBSTR(EXTRACTVALUE(VALUE(d), '/hint'), 1, 4000) hint + FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(:other_xml), '/*/outline_data/hint'))) d) + LOOP + l_hint := i.hint; + WHILE NVL(LENGTH(l_hint), 0) > 0 + LOOP + IF LENGTH(l_hint) <= 500 THEN + DBMS_OUTPUT.PUT_LINE('q''['||l_hint||']'','); + l_hint := NULL; + ELSE + l_pos := INSTR(SUBSTR(l_hint, 1, 500), ' ', -1); + DBMS_OUTPUT.PUT_LINE('q''['||SUBSTR(l_hint, 1, l_pos)||']'','); + l_hint := ' '||SUBSTR(l_hint, l_pos); + END IF; + END LOOP; + END LOOP; + DBMS_OUTPUT.PUT_LINE('q''[END_OUTLINE_DATA]'');'); + DBMS_OUTPUT.PUT_LINE(':signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt);'); + DBMS_OUTPUT.PUT_LINE(':signaturef := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt, TRUE);'); + DBMS_OUTPUT.PUT_LINE('DBMS_SQLTUNE.IMPORT_SQL_PROFILE ('); + DBMS_OUTPUT.PUT_LINE('sql_text => sql_txt,'); + DBMS_OUTPUT.PUT_LINE('profile => h,'); + DBMS_OUTPUT.PUT_LINE('name => ''coe_&&sql_id._&&plan_hash_value.'','); + DBMS_OUTPUT.PUT_LINE('description => ''coe &&sql_id. &&plan_hash_value. ''||:signature||'' ''||:signaturef||'''','); + DBMS_OUTPUT.PUT_LINE('category => ''DEFAULT'','); + DBMS_OUTPUT.PUT_LINE('validate => TRUE,'); + DBMS_OUTPUT.PUT_LINE('replace => TRUE,'); + DBMS_OUTPUT.PUT_LINE('force_match => FALSE /* TRUE:FORCE (match even when different literals in SQL). FALSE:EXACT (similar to CURSOR_SHARING) */ );'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.FREETEMPORARY(sql_txt);'); + DBMS_OUTPUT.PUT_LINE('END;'); + DBMS_OUTPUT.PUT_LINE('/'); + DBMS_OUTPUT.PUT_LINE('WHENEVER SQLERROR CONTINUE'); + DBMS_OUTPUT.PUT_LINE('SET ECHO OFF;'); + DBMS_OUTPUT.PUT_LINE('PRINT signature'); + DBMS_OUTPUT.PUT_LINE('PRINT signaturef'); + DBMS_OUTPUT.PUT_LINE('PRO'); + DBMS_OUTPUT.PUT_LINE('PRO ... manual custom SQL Profile has been created'); + DBMS_OUTPUT.PUT_LINE('PRO'); + DBMS_OUTPUT.PUT_LINE('SET TERM ON ECHO OFF LIN 80 TRIMS OFF NUMF "";'); + DBMS_OUTPUT.PUT_LINE('SPO OFF;'); + DBMS_OUTPUT.PUT_LINE('PRO'); + DBMS_OUTPUT.PUT_LINE('PRO COE_XFR_SQL_PROFILE_&&sql_id._&&plan_hash_value. completed'); +END; +/ +SPO OFF; +SET DEF ON TERM ON ECHO OFF FEED 6 VER ON HEA ON LIN 80 PAGES 14 LONG 80 LONGC 80 TRIMS OFF TI OFF TIMI OFF SERVEROUT OFF NUMF "" SQLP SQL>; +SET SERVEROUT OFF; +PRO +PRO Execute coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql +PRO on TARGET system in order to create a custom SQL Profile +PRO with plan &&plan_hash_value linked to adjusted sql_text. +PRO +UNDEFINE 1 2 sql_id plan_hash_value +CL COL +PRO +PRO COE_XFR_SQL_PROFILE completed. diff --git a/csierra/cpu.sql b/csierra/cpu.sql new file mode 100644 index 0000000..296ee17 --- /dev/null +++ b/csierra/cpu.sql @@ -0,0 +1 @@ +@@cs_cpu_demand.sql \ No newline at end of file diff --git a/csierra/create_spb_from_awr.sql b/csierra/create_spb_from_awr.sql new file mode 100644 index 0000000..17a3406 --- /dev/null +++ b/csierra/create_spb_from_awr.sql @@ -0,0 +1,108 @@ +-- Create SQL Plan Baselin from AWR Plan +SET PAGES 200 LONG 80000; + +ACC sql_id PROMPT 'Enter SQL_ID: '; + +WITH +p AS ( +SELECT plan_hash_value + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND dbid = (SELECT dbid FROM v$database) + AND other_xml IS NOT NULL ), +a AS ( +SELECT plan_hash_value, + SUM(elapsed_time_total)/SUM(executions_total) avg_et_secs, + MAX(executions_total) executions_total + FROM dba_hist_sqlstat + WHERE sql_id = TRIM('&&sql_id.') + AND executions_total > 0 + GROUP BY + plan_hash_value ) +SELECT p.plan_hash_value, + ROUND(a.avg_et_secs/1e6, 6) avg_et_secs, + a.executions_total + FROM p, a + WHERE p.plan_hash_value = a.plan_hash_value(+) + ORDER BY + avg_et_secs NULLS LAST; + +ACC plan_hash_value PROMPT 'Enter Plan Hash Value: '; + +COL dbid NEW_V dbid NOPRI; +SELECT dbid FROM v$database; + +COL begin_snap_id NEW_V begin_snap_id NOPRI; +COL end_snap_id NEW_V end_snap_id NOPRI; + +SELECT MIN(p.snap_id) begin_snap_id, MAX(p.snap_id) end_snap_id + FROM dba_hist_sqlstat p, + dba_hist_snapshot s + WHERE p.dbid = &&dbid + AND p.sql_id = '&&sql_id.' + AND p.plan_hash_value = TO_NUMBER('&&plan_hash_value.') + AND s.snap_id = p.snap_id + AND s.dbid = p.dbid + AND s.instance_number = p.instance_number; + +VAR sqlset_name VARCHAR2(30); + +EXEC :sqlset_name := REPLACE('s_&&sql_id._&&plan_hash_value._awr', ' '); + +PRINT sqlset_name; + +SET SERVEROUT ON; + +VAR plans NUMBER; + +DECLARE + l_sqlset_name VARCHAR2(30); + l_description VARCHAR2(256); + sts_cur SYS.DBMS_SQLTUNE.SQLSET_CURSOR; +BEGIN + l_sqlset_name := :sqlset_name; + l_description := 'SQL_ID:&&sql_id., PHV:&&plan_hash_value., BEGIN:&&begin_snap_id., END:&&end_snap_id.'; + l_description := REPLACE(REPLACE(l_description, ' '), ',', ', '); + + BEGIN + DBMS_OUTPUT.put_line('dropping sqlset: '||l_sqlset_name); + SYS.DBMS_SQLTUNE.drop_sqlset ( + sqlset_name => l_sqlset_name, + sqlset_owner => USER ); + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line(SQLERRM||' while trying to drop STS: '||l_sqlset_name||' (safe to ignore)'); + END; + + l_sqlset_name := + SYS.DBMS_SQLTUNE.create_sqlset ( + sqlset_name => l_sqlset_name, + description => l_description, + sqlset_owner => USER ); + DBMS_OUTPUT.put_line('created sqlset: '||l_sqlset_name); + + OPEN sts_cur FOR + SELECT VALUE(p) + FROM TABLE(DBMS_SQLTUNE.select_workload_repository (&&begin_snap_id., &&end_snap_id., + 'sql_id = ''&&sql_id.'' AND plan_hash_value = TO_NUMBER(''&&plan_hash_value.'') AND loaded_versions > 0', + NULL, NULL, NULL, NULL, 1, NULL, 'ALL')) p; + + SYS.DBMS_SQLTUNE.load_sqlset ( + sqlset_name => l_sqlset_name, + populate_cursor => sts_cur ); + DBMS_OUTPUT.put_line('loaded sqlset: '||l_sqlset_name); + + CLOSE sts_cur; + + :plans := DBMS_SPM.load_plans_from_sqlset ( + sqlset_name => l_sqlset_name, + sqlset_owner => USER ); +END; +/ + +PRINT plans; + +SET PAGES 14 LONG 80 ECHO OFF SERVEROUT OFF; + +UNDEF sql_id plan_hash_value +CL COL diff --git a/csierra/create_spb_from_cur.sql b/csierra/create_spb_from_cur.sql new file mode 100644 index 0000000..972ff72 --- /dev/null +++ b/csierra/create_spb_from_cur.sql @@ -0,0 +1,35 @@ +REM $Header: 215187.1 create_spb_from_cur.sql 12.1.02 2013/09/09 carlos.sierra $ +-- Create SQL Plan Baseline from SQL Cursor +ACC sql_text_piece PROMPT 'Enter SQL Text piece: ' + +SET PAGES 200 LONG 80000 ECHO ON; + +COL sql_text PRI; + +SELECT sql_id, sql_text /* exclude_me */ + FROM v$sqlarea + WHERE sql_text LIKE '%&&sql_text_piece.%' + AND sql_text NOT LIKE '%/* exclude_me */%'; + +ACC sql_id PROMPT 'Enter SQL_ID: '; + +SELECT plan_hash_value, SUM(executions) executions, SUM(elapsed_time) elapsed_time, /* exclude_me */ + CASE WHEN SUM(executions) > 0 THEN ROUND(SUM(elapsed_time)/SUM(executions)/1e6, 3) END avg_secs_per_exec + FROM v$sql + WHERE sql_id = '&&sql_id.' + GROUP BY + plan_hash_value + ORDER BY + 4 DESC NULLS FIRST; + +ACC plan_hash_value PROMPT 'Enter Plan Hash Value: '; + +VAR plans NUMBER; + +EXEC :plans := DBMS_SPM.load_plans_from_cursor_cache('&&sql_id.', TO_NUMBER('&&plan_hash_value.')); + +PRINT plans; + +SET PAGES 14 LONG 80 ECHO OFF; + +UNDEF sql_text_piece sql_id plan_hash_value diff --git a/csierra/cs_CKPT_trc.sql b/csierra/cs_CKPT_trc.sql new file mode 100644 index 0000000..7c6d02a --- /dev/null +++ b/csierra/cs_CKPT_trc.sql @@ -0,0 +1,44 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_CKPT_trc.sql +-- +-- Purpose: Get check point CKPT trace +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/09/08 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_CKPT_trc.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +-- +COL trace_dir NEW_V trace_dir FOR A100 NOPRI; +COL ckpt_trc NEW_V ckpt_trc FOR A30 NOPRI; +SELECT d.value AS trace_dir, LOWER('&&cs_db_name._')||LOWER(p.pname)||'_'||p.spid||'.trc' AS ckpt_trc FROM v$diag_info d, v$process p WHERE d.name = 'Diag Trace' AND p.pname = 'CKPT'; +-- +HOS cat &&trace_dir./&&ckpt_trc. +PRO +PRO &&trace_dir./&&ckpt_trc. +PRO +HOS cp &&trace_dir./&&ckpt_trc. /tmp/ +HOS chmod 644 /tmp/&&ckpt_trc. +PRO +PRO Preserved CKPT trace on /tmp +PRO ~~~~~~~~~~~~~~~~~~~~~~~ +HOS ls -oX /tmp/&&ckpt_trc. +PRO +PRO If you want to copy CKPT trace file, execute scp command below, from a TERM session running on your Mac/PC: +PRO +PRO scp &&cs_host_name.:/tmp/&&ckpt_trc. &&cs_local_dir. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_LGWR_chart.sql b/csierra/cs_LGWR_chart.sql new file mode 100644 index 0000000..3ef83c3 --- /dev/null +++ b/csierra/cs_LGWR_chart.sql @@ -0,0 +1,172 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_LGWR_chart.sql +-- +-- Purpose: Log Writer LGWR Slow Writes Duration Chart - from current LGWR trace +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/01/03 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_LGWR_chart.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +-- @@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_LGWR_chart'; +-- +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Log Writer LGWR Slow Writes Duration between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = 'Milliseconds'; +DEF xaxis_title = ''; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Write Duration', id:'01', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION /* cs_LGWR_chart */ num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +lgwr AS ( +SELECT v4.timestamp, + -- TO_CHAR(v4.timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF3') AS timestamp, + -- v4.payload_size AS payload_size_display, + -- v4.write_duration AS write_duration_display, + TO_NUMBER(REGEXP_REPLACE(v4.write_duration, '[^0-9]', '')) AS write_duration_ms, + TO_NUMBER(REGEXP_REPLACE(v4.payload_size, '[^0-9]', '')) AS payload_size_kb, + ROUND((TO_NUMBER(REGEXP_REPLACE(v4.payload_size, '[^0-9]', ''))) / NULLIF(TO_NUMBER(REGEXP_REPLACE(v4.write_duration, '[^0-9]', '')) / POWER(10,3), 0)) AS kbps +FROM + ( + SELECT v3.line_number, + v3.timestamp, + v3.write_duration, + v3.payload_size, + ROW_NUMBER() OVER (PARTITION BY v3.timestamp ORDER BY v3.payload_size DESC) AS rn + FROM + ( + SELECT v2.line_number, + LAST_VALUE(v2.timestamp) IGNORE NULLS OVER (ORDER BY v2.line_number ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS timestamp, + v2.write_duration, + v2.payload_size + FROM + ( + SELECT v1.line_number, + CASE v1.line_type WHEN 'DATE' THEN CAST(TO_TIMESTAMP_TZ(v1.line_text, 'YYYY-MM-DD"T"HH24:MI:SS.FF6TZH:TZM') AS TIMESTAMP) END AS timestamp, + CASE v1.line_type WHEN 'WRITE' THEN SUBSTR(v1.line_text, 1, INSTR(v1.line_text, ', size ') - 1) END AS write_duration, + CASE v1.line_type WHEN 'WRITE' THEN SUBSTR(v1.line_text, INSTR(v1.line_text, ', size ') + 7) END AS payload_size + FROM + ( + SELECT line_number, + CASE + -- WHEN payload LIKE CHR(10)||'*** '||TO_CHAR(SYSDATE, 'YYYY')||'%' THEN 'DATE' -- failed after 2023-01-01 + WHEN payload LIKE CHR(10)||'*** ____-__-__T__:__:__%' THEN 'DATE' + WHEN payload LIKE 'Warning: log write elapsed time %' THEN 'WRITE' + END AS line_type, + CASE + -- WHEN payload LIKE CHR(10)||'*** '||TO_CHAR(SYSDATE, 'YYYY')||'%' THEN SUBSTR(SUBSTR(payload, 1, INSTR(payload, '(') - 2), INSTR(payload, TO_CHAR(SYSDATE, 'YYYY'))) -- failed after 2023-01-01 + WHEN payload LIKE CHR(10)||'*** ____-__-__T__:__:__%' THEN SUBSTR(SUBSTR(payload, 1, INSTR(payload, '(') - 2), INSTR(payload, '20')) + WHEN payload LIKE 'Warning: log write elapsed time %' THEN REPLACE(payload, 'Warning: log write elapsed time ') + END AS line_text + FROM v$diag_trace_file_contents + WHERE trace_filename = (SELECT LOWER(b.name)||'_'||LOWER(p.pname)||'_'||p.spid||'.trc' AS lgwr_trc FROM v$diag_info d, v$process p, v$database b WHERE d.name = 'Diag Trace' AND p.pname = 'LGWR') + ) v1 + WHERE v1.line_type IN ('DATE', 'WRITE') + AND v1.line_text IS NOT NULL + ) v2 + ) v3 + WHERE v3.write_duration||payload_size IS NOT NULL + AND timestamp IS NOT NULL + ) v4 +WHERE v4.rn = 1 +-- AND v4.timestamp > SYSTIMESTAMP - INTERVAL '1' MINUTE +-- ORDER BY v4.line_number +), +/****************************************************************************************/ +list AS ( +SELECT timestamp AS time, + write_duration_ms AS value_01 + FROM lgwr + WHERE timestamp >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND timestamp <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.value_01, 0)|| + ']' + FROM list q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_LGWR_report.sql b/csierra/cs_LGWR_report.sql new file mode 100644 index 0000000..23520c6 --- /dev/null +++ b/csierra/cs_LGWR_report.sql @@ -0,0 +1,116 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_LGWR_report.sql +-- +-- Purpose: Log Writer LGWR Slow Writes Duration Report - from current LGWR trace +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/01/03 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Enter range of dates when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_LGWR_report.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_LGWR_report'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO +PRO Log Writer LGWR Slow Writes Duration +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +COL timestamp FOR A23 HEA 'Log Write|End|Timestamp' TRUNC; +COL write_duration_ms FOR 999,990 HEA 'Write|Duration|(ms)'; +COL payload_size_kb FOR 999,999,990 HEA 'Payload|Size|KBs'; +COL kbps FOR 999,999,990 HEA 'KBs|per|Sec'; +-- +SELECT v4.timestamp, + -- TO_CHAR(v4.timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF3') AS timestamp, + -- v4.payload_size AS payload_size_display, + -- v4.write_duration AS write_duration_display, + TO_NUMBER(REGEXP_REPLACE(v4.write_duration, '[^0-9]', '')) AS write_duration_ms, + TO_NUMBER(REGEXP_REPLACE(v4.payload_size, '[^0-9]', '')) AS payload_size_kb, + ROUND((TO_NUMBER(REGEXP_REPLACE(v4.payload_size, '[^0-9]', ''))) / NULLIF(TO_NUMBER(REGEXP_REPLACE(v4.write_duration, '[^0-9]', '')) / POWER(10,3), 0)) AS kbps +FROM + ( + SELECT v3.line_number, + v3.timestamp, + v3.write_duration, + v3.payload_size, + ROW_NUMBER() OVER (PARTITION BY v3.timestamp ORDER BY v3.payload_size DESC) AS rn + FROM + ( + SELECT v2.line_number, + LAST_VALUE(v2.timestamp) IGNORE NULLS OVER (ORDER BY v2.line_number ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS timestamp, + v2.write_duration, + v2.payload_size + FROM + ( + SELECT v1.line_number, + CASE v1.line_type WHEN 'DATE' THEN CAST(TO_TIMESTAMP_TZ(v1.line_text, 'YYYY-MM-DD"T"HH24:MI:SS.FF6TZH:TZM') AS TIMESTAMP) END AS timestamp, + CASE v1.line_type WHEN 'WRITE' THEN SUBSTR(v1.line_text, 1, INSTR(v1.line_text, ', size ') - 1) END AS write_duration, + CASE v1.line_type WHEN 'WRITE' THEN SUBSTR(v1.line_text, INSTR(v1.line_text, ', size ') + 7) END AS payload_size + FROM + ( + SELECT line_number, + CASE + -- WHEN payload LIKE CHR(10)||'*** '||TO_CHAR(SYSDATE, 'YYYY')||'%' THEN 'DATE' -- failed after 2023-01-01 + WHEN payload LIKE CHR(10)||'*** ____-__-__T__:__:__%' THEN 'DATE' + WHEN payload LIKE 'Warning: log write elapsed time %' THEN 'WRITE' + END AS line_type, + CASE + -- WHEN payload LIKE CHR(10)||'*** '||TO_CHAR(SYSDATE, 'YYYY')||'%' THEN SUBSTR(SUBSTR(payload, 1, INSTR(payload, '(') - 2), INSTR(payload, TO_CHAR(SYSDATE, 'YYYY'))) -- failed after 2023-01-01 + WHEN payload LIKE CHR(10)||'*** ____-__-__T__:__:__%' THEN SUBSTR(SUBSTR(payload, 1, INSTR(payload, '(') - 2), INSTR(payload, '20')) + WHEN payload LIKE 'Warning: log write elapsed time %' THEN REPLACE(payload, 'Warning: log write elapsed time ') + END AS line_text + FROM v$diag_trace_file_contents + WHERE trace_filename = (SELECT LOWER(b.name)||'_'||LOWER(p.pname)||'_'||p.spid||'.trc' AS lgwr_trc FROM v$diag_info d, v$process p, v$database b WHERE d.name = 'Diag Trace' AND p.pname = 'LGWR') + ) v1 + WHERE v1.line_type IN ('DATE', 'WRITE') + AND v1.line_text IS NOT NULL + ) v2 + ) v3 + WHERE v3.write_duration||payload_size IS NOT NULL + AND timestamp IS NOT NULL + ) v4 +WHERE v4.rn = 1 +AND v4.timestamp >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') +AND v4.timestamp <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +ORDER BY v4.timestamp +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +-- +@@cs_internal/cs_spool_tail.sql +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_LGWR_trc.sql b/csierra/cs_LGWR_trc.sql new file mode 100644 index 0000000..39ffc52 --- /dev/null +++ b/csierra/cs_LGWR_trc.sql @@ -0,0 +1,108 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_LGWR_trc.sql +-- +-- Purpose: Get log writer LGWR trace +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/01/03 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_LGWR_trc.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +-- +COL trace_dir NEW_V trace_dir FOR A100 NOPRI; +COL lgwr_trc NEW_V lgwr_trc FOR A30 NOPRI; +SELECT d.value AS trace_dir, LOWER('&&cs_db_name._')||LOWER(p.pname)||'_'||p.spid||'.trc' AS lgwr_trc FROM v$diag_info d, v$process p WHERE d.name = 'Diag Trace' AND p.pname = 'LGWR'; +-- +HOS cat &&trace_dir./&&lgwr_trc. +PRO +PRO LONG WRITES +PRO ~~~~~~~~~~~ +COL timestamp FOR A23; +COL write_duration_display FOR A15; +COL payload_size_display FOR A15; +COL write_duration_ms FOR 999,999,999,990; +COL payload_size_kb FOR 999,999,999,990; +COL kbps FOR 999,990.000; +WITH +trace AS ( +SELECT d.value AS trace_dir, LOWER(b.name)||'_'||LOWER(p.pname)||'_'||p.spid||'.trc' AS lgwr_trc FROM v$diag_info d, v$process p, v$database b WHERE d.name = 'Diag Trace' AND p.pname = 'LGWR' +), +relevant_lines AS ( +SELECT line_number, + CASE + -- WHEN payload LIKE CHR(10)||'*** '||TO_CHAR(SYSDATE, 'YYYY')||'%' THEN 'DATE' -- failed after 2023-01-01 + WHEN payload LIKE CHR(10)||'*** ____-__-__T__:__:__%' THEN 'DATE' + WHEN payload LIKE 'Warning: log write elapsed time %' THEN 'WRITE' + END AS line_type, + CASE + -- WHEN payload LIKE CHR(10)||'*** '||TO_CHAR(SYSDATE, 'YYYY')||'%' THEN SUBSTR(SUBSTR(payload, 1, INSTR(payload, '(') - 2), INSTR(payload, TO_CHAR(SYSDATE, 'YYYY'))) -- failed after 2023-01-01 + WHEN payload LIKE CHR(10)||'*** ____-__-__T__:__:__%' THEN SUBSTR(SUBSTR(payload, 1, INSTR(payload, '(') - 2), INSTR(payload, '20')) + WHEN payload LIKE 'Warning: log write elapsed time %' THEN REPLACE(payload, 'Warning: log write elapsed time ') + END AS line_text + FROM v$diag_trace_file_contents + WHERE trace_filename = (SELECT lgwr_trc FROM trace) +), +parsed_lines AS ( +SELECT line_number, + CASE line_type WHEN 'DATE' THEN CAST(TO_TIMESTAMP_TZ(line_text, 'YYYY-MM-DD"T"HH24:MI:SS.FF6TZH:TZM') AS TIMESTAMP) END AS timestamp, + CASE line_type WHEN 'WRITE' THEN SUBSTR(line_text, 1, INSTR(line_text, ', size ') - 1) END AS write_duration, + CASE line_type WHEN 'WRITE' THEN SUBSTR(line_text, INSTR(line_text, ', size ') + 7) END AS payload_size + FROM relevant_lines + WHERE line_type IN ('DATE', 'WRITE') + AND line_text IS NOT NULL +), +normalized_lines AS ( +SELECT line_number, + LAST_VALUE(timestamp) IGNORE NULLS OVER (ORDER BY line_number ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS timestamp, + write_duration, + payload_size + FROM parsed_lines +), +filtered_lines AS ( +SELECT line_number, + timestamp, + write_duration, + payload_size, + ROW_NUMBER() OVER (PARTITION BY timestamp ORDER BY payload_size DESC) AS rn + FROM normalized_lines + WHERE write_duration||payload_size IS NOT NULL + AND timestamp IS NOT NULL +) +SELECT timestamp, + -- payload_size AS payload_size_display, + -- write_duration AS write_duration_display, + TO_NUMBER(REGEXP_REPLACE(payload_size, '[^0-9]', '')) AS payload_size_kb, + TO_NUMBER(REGEXP_REPLACE(write_duration, '[^0-9]', '')) AS write_duration_ms, + (TO_NUMBER(REGEXP_REPLACE(payload_size, '[^0-9]', ''))) / NULLIF(TO_NUMBER(REGEXP_REPLACE(write_duration, '[^0-9]', '')) / POWER(10,3), 0) AS kbps + FROM filtered_lines + WHERE rn = 1 + ORDER BY line_number +/ +PRO +PRO &&trace_dir./&&lgwr_trc. +PRO +HOS cp &&trace_dir./&&lgwr_trc. /tmp/ +HOS chmod 644 /tmp/&&lgwr_trc. +PRO +PRO Preserved LGWR trace on /tmp +PRO ~~~~~~~~~~~~~~~~~~~~~~~ +HOS ls -oX /tmp/&&lgwr_trc. +PRO +PRO If you want to copy LGWR trace file, execute scp command below, from a TERM session running on your Mac/PC: +PRO +PRO scp &&cs_host_name.:/tmp/&&lgwr_trc. &&cs_local_dir. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_acs_disable.sql b/csierra/cs_acs_disable.sql new file mode 100644 index 0000000..d0c7de6 --- /dev/null +++ b/csierra/cs_acs_disable.sql @@ -0,0 +1,51 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_acs_disable.sql +-- +-- Purpose: Disable Adaptive Cursor Sharing (ACS) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/07 +-- +-- Usage: Connecting into PDB or CDB. +-- +-- Confirm when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_acs_disable.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +-- +PRO +PRO *** +PRO *** You are about to DISABLE Adaptive Cursor Sharing (ACS) for &&cs_con_name. +PRO *** +PRO +PRO 1. Enter "Yes" (case sensitive) to continue, else -C +DEF cs_confirm = '&1.'; +UNDEF 1; +-- +SET SERVEROUT ON; +BEGIN + IF '&&cs_confirm.' = 'Yes' THEN + EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_adaptive_cursor_sharing" = FALSE'; + EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_extended_cursor_sharing_rel" = "NONE"'; + EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_extended_cursor_sharing" = "NONE"'; + DBMS_OUTPUT.put_line('Done'); + ELSE + DBMS_OUTPUT.put_line('Null'); + END IF; +END; +/ +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_acs_enable.sql b/csierra/cs_acs_enable.sql new file mode 100644 index 0000000..ff8620e --- /dev/null +++ b/csierra/cs_acs_enable.sql @@ -0,0 +1,51 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_acs_enable.sql +-- +-- Purpose: Enable Adaptive Cursor Sharing (ACS) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/07 +-- +-- Usage: Connecting into PDB or CDB. +-- +-- Confirm when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_acs_enable.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +-- +PRO +PRO *** +PRO *** You are about to ENABLE Adaptive Cursor Sharing (ACS) for &&cs_con_name. +PRO *** +PRO +PRO 1. Enter "Yes" (case sensitive) to continue, else -C +DEF cs_confirm = '&1.'; +UNDEF 1; +-- +SET SERVEROUT ON; +BEGIN + IF '&&cs_confirm.' = 'Yes' THEN + EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_adaptive_cursor_sharing" = TRUE'; + EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_extended_cursor_sharing_rel" = "SIMPLE"'; + EXECUTE IMMEDIATE 'ALTER SYSTEM SET "_optimizer_extended_cursor_sharing" = "UDO"'; + DBMS_OUTPUT.put_line('Done'); + ELSE + DBMS_OUTPUT.put_line('Null'); + END IF; +END; +/ +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_active_sessions.sql b/csierra/cs_active_sessions.sql new file mode 100644 index 0000000..717adc4 --- /dev/null +++ b/csierra/cs_active_sessions.sql @@ -0,0 +1,43 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: a.sql | as.sql | cs_active_sessions.sql +-- +-- Purpose: Active Sessions including SQL Text and Exection Plan +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_active_sessions.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_active_sessions'; +DEF cs_script_acronym = 'a.sql | as.sql | '; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_active_sessions_internal.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_alert_log.sql b/csierra/cs_alert_log.sql new file mode 100644 index 0000000..a493f54 --- /dev/null +++ b/csierra/cs_alert_log.sql @@ -0,0 +1,44 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_alert_log.sql +-- +-- Purpose: Get alert log +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/05 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_alert_log.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +-- +COL trace_dir NEW_V trace_dir FOR A100 NOPRI; +COL alert_log NEW_V alert_log FOR A30 NOPRI; +SELECT d.value trace_dir, 'alert_'||t.instance||'.log' alert_log FROM v$diag_info d, v$thread t WHERE d.name = 'Diag Trace'; +HOS cp &&trace_dir./&&alert_log.* /tmp/ +HOS chmod 644 /tmp/&&alert_log.* +PRO +PRO Current and prior alert logs on &&trace_dir. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +HOS ls -oX &&trace_dir./&&alert_log.* +PRO +PRO Preserved alert logs on /tmp +PRO ~~~~~~~~~~~~~~~~~~~~~~~ +HOS ls -oX /tmp/alert*.log* +PRO +PRO If you want to copy alert log file(s), execute one scp command below, from a TERM session running on your Mac/PC: +PRO +PRO scp &&cs_host_name.:/tmp/&&alert_log. &&cs_local_dir. +PRO scp &&cs_host_name.:/tmp/&&alert_log.* &&cs_local_dir. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_all_application_segments.sql b/csierra/cs_all_application_segments.sql new file mode 100644 index 0000000..eec8189 --- /dev/null +++ b/csierra/cs_all_application_segments.sql @@ -0,0 +1,73 @@ +WITH relevant_segments AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + s.con_id, + s.owner, + s.segment_name, + s.partition_name, + s.segment_type, + s.tablespace_name, + s.bytes, + s.blocks, + CASE + WHEN s.segment_type LIKE 'TABLE%' THEN t.num_rows + END AS num_rows, + CASE + WHEN s.segment_type LIKE 'TABLE%' THEN s.segment_name + WHEN s.segment_type LIKE 'LOB%' AND s.segment_type <> 'LOBINDEX' THEN l.table_name + WHEN s.segment_type LIKE 'INDEX%' OR s.segment_type = 'LOBINDEX' THEN i.table_name + END AS table_name, + CASE + WHEN s.segment_type LIKE 'LOB%' AND s.segment_type <> 'LOBINDEX' THEN l.index_name + WHEN s.segment_type LIKE 'INDEX%' OR s.segment_type = 'LOBINDEX' THEN i.index_name + END AS index_name, + CASE + WHEN s.segment_type LIKE 'LOB%' AND s.segment_type <> 'LOBINDEX' THEN l.column_name + END AS column_name + FROM cdb_users u, + cdb_segments s, + cdb_tables t, + cdb_lobs l, + cdb_indexes i + WHERE u.oracle_maintained = 'N' + AND u.common = 'NO' + AND s.con_id = u.con_id + AND s.owner = u.username + AND s.bytes > 0 + AND (s.segment_type LIKE 'TABLE%' OR s.segment_type LIKE 'LOB%' OR s.segment_type LIKE 'INDEX%') + AND t.con_id(+) = s.con_id + AND t.owner(+) = s.owner + AND t.table_name(+) = s.segment_name + AND l.con_id(+) = s.con_id + AND l.owner(+) = s.owner + AND l.segment_name(+) = s.segment_name + AND i.con_id(+) = s.con_id + AND i.owner(+) = s.owner + AND i.index_name(+) = s.segment_name +) +-- SELECT s.con_id, +-- s.owner, +-- s.segment_name, +-- s.partition_name, +-- s.segment_type, +-- s.tablespace_name, +-- s.bytes, +-- s.blocks, +-- s.num_rows, +-- s.table_name, +-- s.index_name, +-- s.column_name +-- FROM relevant_segments s +-- WHERE s.con_id = 3 +-- AND s.table_name = 'ROUTE_TABLES_AD' +SELECT COUNT(*) AS cnt, SUM(bytes) AS bytes, + PERCENTILE_DISC(0.50) WITHIN GROUP (ORDER BY bytes) AS pctl_50, + PERCENTILE_DISC(0.70) WITHIN GROUP (ORDER BY bytes) AS pctl_70, + PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY bytes) AS pctl_75, + PERCENTILE_DISC(0.80) WITHIN GROUP (ORDER BY bytes) AS pctl_80, + PERCENTILE_DISC(0.85) WITHIN GROUP (ORDER BY bytes) AS pctl_85, + PERCENTILE_DISC(0.90) WITHIN GROUP (ORDER BY bytes) AS pctl_90, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY bytes) AS pctl_95, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY bytes) AS pctl_99, + MAX(bytes) AS pctl_100 + FROM relevant_segments +/ \ No newline at end of file diff --git a/csierra/cs_all_sysmetric_for_cdb_hist.sql b/csierra/cs_all_sysmetric_for_cdb_hist.sql new file mode 100644 index 0000000..63a0fda --- /dev/null +++ b/csierra/cs_all_sysmetric_for_cdb_hist.sql @@ -0,0 +1,130 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_all_sysmetric_for_cdb_hist.sql +-- +-- Purpose: All System Metrics as per DBA_HIST_SYSMETRIC_SUMMARY View for a CDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/04/06 +-- +-- Usage: Execute connected to CDB and pass range of AWR snapshots. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_all_sysmetric_for_cdb_hist.sql +-- +-- Notes: Stand-alone script +-- +-- Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF view_name = 'dba_hist_sysmetric_summary'; +DEF common_predicate = ""; +DEF script_name = 'cs_all_sysmetric_for_cdb_hist'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con_name NEW_V cs_con_name NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name FROM v$database; +-- +PRO +PRO Specify the number of days of snapshots to choose from +PRO +PRO Enter number of days: [{1}|0-60] +DEF num_days = '&1.' +UNDEF 1; +-- +COL snap_id NEW_V snap_id FOR A7; +COL prior_snap_id NEW_V prior_snap_id FOR A7 NOPRI; +SELECT LPAD(TO_CHAR(snap_id), 7, ' ') AS snap_id, CAST(end_interval_time AS DATE) AS snap_time, LPAD(TO_CHAR(snap_id - 1), 7, ' ') AS prior_snap_id + FROM dba_hist_snapshot + WHERE instance_number = SYS_CONTEXT('USERENV','INSTANCE') + AND dbid = (SELECT dbid FROM v$database) + AND CAST(end_interval_time AS DATE) > SYSDATE - TO_NUMBER(NVL('&&num_days.', '1')) + ORDER BY + snap_id +/ +-- +PRO +PRO Enter begin snap_id: [{&&prior_snap_id.}] +DEF begin_snap_id = '&2.'; +UNDEF 2; +COL begin_snap_id NEW_V begin_snap_id NOPRI; +SELECT NVL('&&begin_snap_id.', '&&prior_snap_id.') AS begin_snap_id FROM DUAL; +-- +PRO +PRO Enter end snap_id: [{&&snap_id.}] +DEF end_snap_id = '&3.'; +UNDEF 3; +COL end_snap_id NEW_V end_snap_id NOPRI; +SELECT NVL('&&end_snap_id.', '&&snap_id.') AS end_snap_id FROM DUAL; +-- +COL cs_begin_time NEW_V cs_begin_time NOPRI; +COL cs_end_time NEW_V cs_end_time NOPRI; +COL cs_seconds NEW_V cs_seconds NOPRI; +SELECT TO_CHAR(MAX(CAST(end_interval_time AS DATE)), 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_begin_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&begin_snap_id.'); +SELECT TO_CHAR(MAX(CAST(end_interval_time AS DATE)), 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_end_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&end_snap_id.'); +SELECT TRIM(TO_CHAR(intsize/100, '999,999,990.00')) AS cs_seconds FROM &&view_name. WHERE snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') AND ROWNUM = 1; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET container = CDB$ROOT; +-- +SPO /tmp/&&script_name._&&report_date_time..txt +PRO /tmp/&&script_name._&&report_date_time..txt +PRO +PRO Date : &&cs_date. +PRO Host : &&cs_host. +PRO Database : &&cs_db. +--PRO Container: &&cs_con_name. +PRO Range : &&cs_begin_time. - &&cs_end_time. (&&cs_seconds. seconds) +-- +COL metric_name FOR A45 TRUN; +COL metric_unit FOR A41 TRUN; +COL seconds FOR 9,900.00; +-- +PRO +PRO System Metrics by Name (&&view_name.) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT metric_name, + AVG(average) AS average, + MAX(maxval) AS maxval, + metric_unit + FROM &&view_name. + WHERE &&common_predicate. snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') + GROUP BY + metric_name, metric_unit + ORDER BY + metric_name, metric_unit +/ +PRO +PRO System Metrics by Unit and Name (&&view_name.) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT metric_unit, + metric_name, + AVG(average) AS average, + MAX(maxval) AS maxval + FROM &&view_name. + WHERE &&common_predicate. snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') + GROUP BY + metric_unit, metric_name + ORDER BY + metric_unit, metric_name +/ +-- +PRO +PRO SQL> @&&script_name..sql +SPO OFF; +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +ALTER SESSION SET CONTAINER = &&cs_con_name.; +-- +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_all_sysmetric_for_cdb_mem.sql b/csierra/cs_all_sysmetric_for_cdb_mem.sql new file mode 100644 index 0000000..78b27a9 --- /dev/null +++ b/csierra/cs_all_sysmetric_for_cdb_mem.sql @@ -0,0 +1,111 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_all_sysmetric_for_cdb_mem.sql +-- +-- Purpose: All System Metrics as per V$SYSMETRIC Views for a CDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/04/06 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_all_sysmetric_for_cdb_mem.sql +-- +-- Notes: Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF view_name_prefix = 'v$sysmetric'; +DEF common_predicate = "SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT'"; +DEF script_name = 'cs_all_sysmetric_for_cdb_mem'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con_name NEW_V cs_con_name NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name FROM v$database; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET container = CDB$ROOT; +-- +SPO /tmp/&&script_name._&&report_date_time..txt +PRO /tmp/&&script_name._&&report_date_time..txt +PRO +PRO Date : &&cs_date. +PRO Host : &&cs_host. +PRO Database : &&cs_db. +--PRO Container: &&cs_con_name. +-- +COL metric_name FOR A45 TRUN; +COL metric_unit FOR A41 TRUN; +COL seconds FOR 9,900.00; +-- +PRO +PRO System Metrics by Name (&&view_name_prefix. and &&view_name_prefix._summary) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT metric_name, + intsize_csec/100 AS seconds, + begin_time, + end_time, + value AS average, + TO_NUMBER(NULL) AS maxval, + metric_unit + FROM &&view_name_prefix. + WHERE &&common_predicate. + UNION ALL +SELECT metric_name, + intsize_csec/100 AS seconds, + begin_time, + end_time, + average, + maxval, + metric_unit + FROM &&view_name_prefix._summary + WHERE &&common_predicate. + ORDER BY + 1, 2 +/ +-- +PRO +PRO System Metrics by Unit and Name (&&view_name_prefix. and &&view_name_prefix._summary) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT metric_unit, + metric_name, + intsize_csec/100 AS seconds, + begin_time, + end_time, + value AS average, + TO_NUMBER(NULL) AS maxval + FROM &&view_name_prefix. + WHERE &&common_predicate. + UNION ALL +SELECT metric_unit, + metric_name, + intsize_csec/100 AS seconds, + begin_time, + end_time, + average, + maxval + FROM &&view_name_prefix._summary + WHERE &&common_predicate. + ORDER BY + 1, 2, 3 +/ +-- +PRO +PRO SQL> @&&script_name..sql +SPO OFF; +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +ALTER SESSION SET CONTAINER = &&cs_con_name.; +-- +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_all_sysmetric_for_pdb_hist.sql b/csierra/cs_all_sysmetric_for_pdb_hist.sql new file mode 100644 index 0000000..e7db122 --- /dev/null +++ b/csierra/cs_all_sysmetric_for_pdb_hist.sql @@ -0,0 +1,122 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_all_sysmetric_for_pdb_hist.sql +-- +-- Purpose: All System Metrics as per DBA_HIST_CON_SYSMETRIC_SUMM View for a PDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/04/06 +-- +-- Usage: Execute connected to CDB and pass range of AWR snapshots. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_all_sysmetric_for_pdb_hist.sql +-- +-- Notes: Stand-alone script +-- +-- Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF view_name = 'dba_hist_con_sysmetric_summ'; +DEF common_predicate = "con_id = SYS_CONTEXT('USERENV', 'CON_ID') AND"; +DEF script_name = 'cs_all_sysmetric_for_pdb_hist'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con NEW_V cs_con NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con FROM v$database; +-- +PRO +PRO Specify the number of days of snapshots to choose from +PRO +PRO Enter number of days: [{1}|0-60] +DEF num_days = '&1' +UNDEF 1; +-- +COL snap_id NEW_V snap_id FOR A7; +COL prior_snap_id NEW_V prior_snap_id FOR A7 NOPRI; +SELECT LPAD(TO_CHAR(snap_id), 7, ' ') AS snap_id, CAST(end_interval_time AS DATE) AS snap_time, LPAD(TO_CHAR(snap_id - 1), 7, ' ') AS prior_snap_id + FROM dba_hist_snapshot + WHERE instance_number = SYS_CONTEXT('USERENV','INSTANCE') + AND dbid = (SELECT dbid FROM v$database) + AND CAST(end_interval_time AS DATE) > SYSDATE - TO_NUMBER(NVL('&&num_days.', '1')) + ORDER BY + snap_id +/ +-- +PRO +PRO Enter begin snap_id: [{&&prior_snap_id.}] +DEF begin_snap_id = '&2.'; +UNDEF 2; +COL begin_snap_id NEW_V begin_snap_id NOPRI; +SELECT NVL('&&begin_snap_id.', '&&prior_snap_id.') AS begin_snap_id FROM DUAL; +-- +PRO +PRO Enter end snap_id: [{&&snap_id.}] +DEF end_snap_id = '&3.'; +UNDEF 3; +COL end_snap_id NEW_V end_snap_id NOPRI; +SELECT NVL('&&end_snap_id.', '&&snap_id.') AS end_snap_id FROM DUAL; +-- +COL cs_begin_time NEW_V cs_begin_time NOPRI; +COL cs_end_time NEW_V cs_end_time NOPRI; +COL cs_seconds NEW_V cs_seconds NOPRI; +SELECT TO_CHAR(MAX(CAST(end_interval_time AS DATE)), 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_begin_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&begin_snap_id.'); +SELECT TO_CHAR(MAX(CAST(end_interval_time AS DATE)), 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_end_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&end_snap_id.'); +SELECT TRIM(TO_CHAR(intsize/100, '999,999,990.00')) AS cs_seconds FROM &&view_name. WHERE snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') AND ROWNUM = 1; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +SPO /tmp/&&script_name._&&report_date_time..txt +PRO /tmp/&&script_name._&&report_date_time..txt +PRO +PRO Date : &&cs_date. +PRO Host : &&cs_host. +PRO Database : &&cs_db. +PRO Container: &&cs_con. +PRO Range : &&cs_begin_time. - &&cs_end_time. (&&cs_seconds. seconds) +-- +COL metric_name FOR A45 TRUN; +COL metric_unit FOR A41 TRUN; +COL seconds FOR 9,900.00; +-- +PRO +PRO System Metrics by Name (&&view_name.) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT metric_name, + AVG(average) AS average, + MAX(maxval) AS maxval, + metric_unit + FROM &&view_name. + WHERE &&common_predicate. snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') + GROUP BY + metric_name, metric_unit + ORDER BY + metric_name, metric_unit +/ +PRO +PRO System Metrics by Unit and Name (&&view_name.) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT metric_unit, + metric_name, + AVG(average) AS average, + MAX(maxval) AS maxval + FROM &&view_name. + WHERE &&common_predicate. snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') + GROUP BY + metric_unit, metric_name + ORDER BY + metric_unit, metric_name +/ +-- +PRO +PRO SQL> @&&script_name..sql +SPO OFF; +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_all_sysmetric_for_pdb_mem.sql b/csierra/cs_all_sysmetric_for_pdb_mem.sql new file mode 100644 index 0000000..96768c1 --- /dev/null +++ b/csierra/cs_all_sysmetric_for_pdb_mem.sql @@ -0,0 +1,104 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_all_sysmetric_for_pdb_mem.sql +-- +-- Purpose: All System Metrics as per V$CON_SYSMETRIC Views for a PDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/04/06 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_all_sysmetric_for_pdb_mem.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF view_name_prefix = 'v$con_sysmetric'; +DEF common_predicate = "con_id = SYS_CONTEXT('USERENV', 'CON_ID')"; +DEF script_name = 'cs_all_sysmetric_for_pdb_mem'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con NEW_V cs_con NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con FROM v$database; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +-- +SPO /tmp/&&script_name._&&report_date_time..txt +PRO /tmp/&&script_name._&&report_date_time..txt +PRO +PRO Date : &&cs_date. +PRO Host : &&cs_host. +PRO Database : &&cs_db. +PRO Container: &&cs_con. +-- +COL metric_name FOR A45 TRUN; +COL metric_unit FOR A41 TRUN; +COL seconds FOR 9,900.00; +-- +PRO +PRO System Metrics by Name (&&view_name_prefix. and &&view_name_prefix._summary) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT metric_name, + intsize_csec/100 AS seconds, + begin_time, + end_time, + value AS average, + TO_NUMBER(NULL) AS maxval, + metric_unit + FROM &&view_name_prefix. + WHERE &&common_predicate. + UNION ALL +SELECT metric_name, + intsize_csec/100 AS seconds, + begin_time, + end_time, + average, + maxval, + metric_unit + FROM &&view_name_prefix._summary + WHERE &&common_predicate. + ORDER BY + 1, 2 +/ +-- +PRO +PRO System Metrics by Unit and Name (&&view_name_prefix. and &&view_name_prefix._summary) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT metric_unit, + metric_name, + intsize_csec/100 AS seconds, + begin_time, + end_time, + value AS average, + TO_NUMBER(NULL) AS maxval + FROM &&view_name_prefix. + WHERE &&common_predicate. + UNION ALL +SELECT metric_unit, + metric_name, + intsize_csec/100 AS seconds, + begin_time, + end_time, + average, + maxval + FROM &&view_name_prefix._summary + WHERE &&common_predicate. + ORDER BY + 1, 2, 3 +/ +-- +PRO +PRO SQL> @&&script_name..sql +SPO OFF; +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_amw_report.sql b/csierra/cs_amw_report.sql new file mode 100644 index 0000000..8971d81 --- /dev/null +++ b/csierra/cs_amw_report.sql @@ -0,0 +1,277 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_amw_report.sql +-- +-- Purpose: Automatic Maintenance Window Report +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/09/20 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_amw_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_amw_report'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +COL pdb_name FOR A30 TRUNC; +COL task_name FOR A30; +COL parameter_name FOR A30; +COL parameter_value FOR A30; +PRO +PRO dba_advisor_parameters +PRO ~~~~~~~~~~~~~~~~~~~~~~ +-- SELECT c.name AS pdb_name, t.task_name, t.parameter_name, t.parameter_value FROM cdb_advisor_parameters t, v$containers c WHERE t.task_name IN ('SYS_AUTO_SPM_EVOLVE_TASK', 'SYS_AI_SPM_EVOLVE_TASK', 'SYS_AUTO_SQL_TUNING_TASK') AND t.parameter_name IN ('ACCEPT_PLANS', 'ACCEPT_SQL_PROFILES') AND c.con_id = t.con_id ORDER BY c.name, t.task_name, t.parameter_name, t.parameter_value; +@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_advisor_parameters t, v$containers c WHERE t.task_name LIKE ''%TASK'' AND t.parameter_name LIKE ''ACCEPT%'' AND c.con_id = t.con_id ORDER BY c.name, t.task_name, t.parameter_name, t.parameter_value" +-- +-- COL pdb_name FOR A30 TRUNC; +-- COL task_name FOR A30; +-- COL enabled FOR A8; +-- PRO +-- PRO dba_autotask_schedule_control +-- PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- SELECT c.name AS pdb_name, t.task_name, t.enabled FROM cdb_autotask_schedule_control t, v$containers c WHERE t.task_name IN ('Auto SPM Task', 'Auto STS Capture Task') AND c.con_id = t.con_id ORDER BY c.name, t.task_name; +-- @@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_schedule_control t, v$containers c WHERE t.task_name LIKE ''Auto % Task'' AND c.con_id = t.con_id ORDER BY c.name, t.task_name" +-- +COL pdb_name FOR A30 TRUNC; +COL client_name FOR A40; +COL status FOR A8; +COL mean_job_duration FOR A30; +COL window_duration_last_7_days FOR A30; +COL window_duration_last_30_days FOR A30; +COL window_group FOR A20; +COL last_change FOR A25; +PRO +PRO dba_autotask_client +PRO ~~~~~~~~~~~~~~~~~~~ +-- SELECT c.name AS pdb_name, t.client_name, t.status, t.window_group, t.mean_job_duration, t.window_duration_last_7_days, t.window_duration_last_30_days, t.last_change FROM cdb_autotask_client t, v$containers c WHERE t.client_name IN ('auto optimizer stats collection', 'sql tuning advisor', 'auto space advisor') AND c.con_id = t.con_id ORDER BY c.name, t.client_name; +@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_client t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.client_name" +-- +COL pdb_name FOR A30 TRUNC; +COL client_name FOR A40; +COL status FOR A8; +COL window_start_time FOR A30; +COL window_end_time FOR A30; +COL window_duration FOR A30; +COL window_name FOR A20; +PRO +PRO dba_autotask_client_history +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT c.name AS pdb_name, t.client_name, t.window_start_time, t.window_end_time, t.window_duration, t.window_name, t.jobs_created, t.jobs_started, t.jobs_completed FROM cdb_autotask_client_history t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.client_name, t.window_start_time; +-- @@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_client_history t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.client_name, t.window_start_time" +-- +COL client_name FOR A40; +COL job_name FOR A25; +COL job_scheduler_status FOR A10 HEA 'STATUS'; +COL task_name FOR A30; +COL task_operation FOR A30; +COL task_target_type FOR A20; +COL task_target_name FOR A20; +COL task_priority FOR A20; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO dba_autotask_client_job (from CDB$ROOT) +PRO ~~~~~~~~~~~~~~~~~~~~~~~ +-- SELECT client_name, job_name, job_scheduler_status, task_name, task_operation, task_target_type, task_target_name, task_priority FROM dba_autotask_client_job; +@@cs_internal/cs_pr_internal "SELECT * FROM dba_autotask_client_job" +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +COL pdb_name FOR A30 TRUNC; +COL client_name FOR A40; +COL window_start_time FOR A30; +COL window_duration FOR A30; +COL window_name FOR A20; +COL job_name FOR A25; +COL job_status FOR A10 HEA 'STATUS'; +COL job_start_time FOR A30; +COL job_duration FOR A30; +COL delay_mins FOR 999,999,990; +COL job_error FOR 9999999990; +COL job_info FOR A80; +PRO +PRO dba_autotask_job_history +PRO ~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT c.name AS pdb_name, t.client_name, t.window_start_time, t.window_duration, t.window_name, t.job_name, t.job_status, t.job_start_time, t.job_duration, EXTRACT(DAY FROM (t.job_start_time - t.window_start_time) * 24 * 60) AS delay_mins, t.job_error, t.job_info +FROM cdb_autotask_job_history t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.client_name, t.window_start_time; +-- @@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_job_history t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.client_name, t.window_start_time" +-- +COL pdb_name FOR A30 TRUNC; +COL client_name FOR A40; +COL operation_name FOR A30; +COL operation_tag FOR A15; +COL attributes FOR A60; +COL status FOR A10; +COL last_change FOR A30; +COL priority_override FOR A20; +COL use_resource_estimates FOR A25; +PRO +PRO dba_autotask_operation +PRO ~~~~~~~~~~~~~~~~~~~~~~ +-- SELECT c.name AS pdb_name, t.client_name, t.operation_name, t.operation_tag, t.attributes, t.status, t.last_change, t.priority_override, t.use_resource_estimates FROM cdb_autotask_operation t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.client_name, t.operation_name; +@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_operation t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.client_name, t.operation_name" +-- +COL pdb_name FOR A30 TRUNC; +COL start_time FOR A30; +COL duration FOR A30; +COL window_name FOR A20; +PRO +PRO dba_autotask_schedule +PRO ~~~~~~~~~~~~~~~~~~~~~ +SELECT c.name AS pdb_name, t.start_time, t.duration, t.window_name FROM cdb_autotask_schedule t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.start_time; +--@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_schedule t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.start_time" +-- +COL pdb_name FOR A30 TRUNC; +COL status FOR A10; +COL last_change FOR A30; +PRO +PRO dba_autotask_status +PRO ~~~~~~~~~~~~~~~~~~~ +-- SELECT c.name AS pdb_name, t.status, t.last_change FROM cdb_autotask_status t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name; +@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_status t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name" +-- +PRO +PRO dba_autotask_task +PRO ~~~~~~~~~~~~~~~~~ +@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_task t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name" +-- +COL pdb_name FOR A30 TRUNC; +COL window_name FOR A20; +COL window_active FOR A15; +COL autotask_status FOR A15; +COL optimizer_stats FOR A20; +COL sql_tune_advisor FOR A20; +COL segment_advisor FOR A20; +COL health_monitor FOR A20; +PRO +PRO dba_autotask_window_clients +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- SELECT c.name AS pdb_name, t.window_name, t.window_active, t.autotask_status, t.optimizer_stats, t.sql_tune_advisor, t.segment_advisor, t.health_monitor FROM cdb_autotask_window_clients t, v$containers c WHERE t.window_name IN ('MONDAY_WINDOW', 'TUESDAY_WINDOW', 'WEDNESDAY_WINDOW', 'THURSDAY_WINDOW', 'FRIDAY_WINDOW', 'SATURDAY_WINDOW', 'SUNDAY_WINDOW') AND c.con_id = t.con_id ORDER BY c.name, t.window_name; +@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_window_clients t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.window_name" +-- +COL pdb_name FOR A30 TRUNC; +COL window_start_time FOR A30; +COL window_end_time FOR A30; +COL window_name FOR A20; +PRO +PRO dba_autotask_window_history +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT c.name AS pdb_name, t.window_start_time, t.window_end_time, t.window_name FROM cdb_autotask_window_history t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.window_start_time; +--@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_autotask_window_history t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.window_start_time" +-- +COL pdb_name FOR A30 TRUNC; +COL attribute_name FOR A30; +COL value FOR A30; +PRO +PRO dba_scheduler_global_attribute +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- SELECT c.name AS pdb_name, t.attribute_name, t.value FROM cdb_scheduler_global_attribute t, v$containers c WHERE t.attribute_name IN ('DEFAULT_TIMEZONE', 'LOG_HISTORY', 'MAX_JOB_SLAVE_PROCESSES', 'MAX_JOB_SLAVE_PROCESSES', 'CURRENT_OPEN_WINDOW') AND c.con_id = t.con_id ORDER BY c.name, t.attribute_name; +@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_scheduler_global_attribute t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.attribute_name" +-- +COL pdb_name FOR A30 TRUNC; +COL group_name FOR A30; +COL comments FOR A40; +PRO +PRO dba_scheduler_groups +PRO ~~~~~~~~~~~~~~~~~~~~ +-- SELECT c.name AS pdb_name, g.group_name, g.enabled, g.number_of_members, g.comments FROM cdb_scheduler_groups g, v$containers c WHERE g.group_type = 'WINDOW' AND c.con_id = g.con_id ORDER BY c.name, g.group_name; +@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, g.* FROM cdb_scheduler_groups g, v$containers c WHERE g.group_type = ''WINDOW'' AND c.con_id = g.con_id ORDER BY c.name, g.group_name" +-- +COL pdb_name FOR A30 TRUNC; +COL owner FOR A30; +COL group_name FOR A30; +COL member_name FOR A30; +PRO +PRO dba_scheduler_group_members +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT c.name AS pdb_name, g.owner, g.group_name, g.member_name FROM cdb_scheduler_group_members g, v$containers c WHERE c.con_id = g.con_id ORDER BY c.name, g.owner, g.group_name, g.member_name; +--@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, g.owner, g.group_name, g.member_name FROM cdb_scheduler_group_members g, v$containers c WHERE c.con_id = g.con_id ORDER BY c.name, g.owner, g.group_name, g.member_name" +-- +COL pdb_name FOR A30 TRUNC; +COL owner FOR A20; +COL job_name FOR A30; +COL job_action FOR A60; +COL start_date FOR A25; +COL repeat_interval FOR A50; +COL job_class FOR A30; +COL enabled FOR A10; +COL state FOR A10; +COL last_start_date FOR A25; +COL last_run_duration FOR A30; +COL next_run_date FOR A25; +COL comments FOR A80; +-- +PRO +PRO dba_scheduler_jobs +PRO ~~~~~~~~~~~~~~~~~~ +SELECT c.name AS pdb_name, s.owner, s.job_name, s.job_type, s.job_action, s.start_date, s.repeat_interval, s.job_class, s.enabled, s.state, s.last_start_date, s.last_run_duration, s.next_run_date, s.comments FROM cdb_scheduler_jobs s, v$containers c WHERE c.con_id = s.con_id ORDER BY c.name, s.owner, s.job_name; +--@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, s.* FROM cdb_scheduler_jobs s, v$containers c WHERE c.con_id = s.con_id ORDER BY c.name, s.owner, s.job_name" +-- +COL pdb_name FOR A30 TRUNC; +COL owner FOR A20; +COL program_name FOR A30; +COL program_type FOR A16; +COL program_action FOR A60; +COL enabled FOR A7; +COL detached FOR A8; +COL comments FOR A80; +PRO +PRO dba_scheduler_programs +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT c.name AS pdb_name, s.owner, s.program_name, s.program_type, s.program_action, s.number_of_arguments, s.enabled, s.detached, s.priority, s.weight, s.comments FROM cdb_scheduler_programs s, v$containers c WHERE c.con_id = s.con_id ORDER BY c.name, s.owner, s.program_name; +--@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, s.* FROM cdb_scheduler_programs s, v$containers c WHERE c.con_id = s.con_id ORDER BY c.name, s.owner, s.program_name" +-- +COL pdb_name FOR A30 TRUNC; +COL window_name FOR A20; +COL enabled FOR A8; +COL resource_plan FOR A30; +COL duration FOR A20; +COL repeat_interval FOR A70; +COL last_start_date FOR A25; +COL next_start_date FOR A25; +PRO +PRO dba_scheduler_windows +PRO ~~~~~~~~~~~~~~~~~~~~~ +-- SELECT c.name AS pdb_name, t.window_name, t.enabled, t.active, t.resource_plan, t.duration, t.repeat_interval, t.last_start_date, t.next_start_date FROM cdb_scheduler_windows t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.window_name; +@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_scheduler_windows t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.window_name" +-- +COL pdb_name FOR A30 TRUNC; +COL log_date FOR A25; +COL req_start_date FOR A25; +COL actual_start_date FOR A25; +COL window_duration FOR A20; +COL actual_duration FOR A20; +COL window_name FOR A20; +COL additional_info FOR A80; +PRO +PRO dba_scheduler_window_details +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT c.name AS pdb_name, t.log_date, t.req_start_date, t.actual_start_date, t.window_duration, t.actual_duration, t.window_name, t.additional_info FROM cdb_scheduler_window_details t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.log_date; +--@@cs_internal/cs_pr_internal "SELECT c.name AS pdb_name, t.* FROM cdb_scheduler_window_details t, v$containers c WHERE c.con_id = t.con_id ORDER BY c.name, t.log_date" +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_application_tables.sql b/csierra/cs_application_tables.sql new file mode 100644 index 0000000..cb1bc51 --- /dev/null +++ b/csierra/cs_application_tables.sql @@ -0,0 +1,15 @@ +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL owner FOR A30; +COL table_name FOR A30; +COL num_rows FOR 999,999,999,999; +COL blocks FOR 9,999,999,999; +SELECT u.common, t.owner, t.table_name, t.num_rows, t.blocks, t.last_analyzed, t.tablespace_name + FROM dba_tables t, dba_users u + WHERE u.username = t.owner + AND u.oracle_maintained = 'N' + ORDER BY + u.common DESC, + t.owner, + t.table_name +/ \ No newline at end of file diff --git a/csierra/cs_ash_analytics.sql b/csierra/cs_ash_analytics.sql new file mode 100644 index 0000000..d597d5b --- /dev/null +++ b/csierra/cs_ash_analytics.sql @@ -0,0 +1,1607 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: aa.sql | cs_ash_analytics.sql +-- +-- Purpose: Poor-man's version of ASH Analytics for all Timed Events (Average Active Sessions AAS) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/06/15 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_analytics.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_analytics'; +DEF cs_script_acronym = 'aa.sql | '; +-- +DEF cs_hours_range_default = '3'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_ash_cut_off_date NEW_V cs_ash_cut_off_date NOPRI; +SELECT TO_CHAR(CAST(PERCENTILE_DISC(0.05) WITHIN GROUP (ORDER BY sample_time) AS DATE) + (1/24), 'YYYY-MM-DD"T"HH24:MI') AS cs_ash_cut_off_date FROM v$active_session_history; +--SELECT TO_CHAR(TRUNC(TRUNC(SYSDATE, 'HH') + FLOOR(TO_NUMBER(TO_CHAR(SYSDATE, 'MI')) / 15) * 15 / (24*60), 'MI'), 'YYYY-MM-DD"T"HH24:MI') AS cs_ash_cut_off_date FROM DUAL; +-- +COL cs2_granularity_list NEW_V cs2_granularity_list NOPRI; +COL cs2_default_granularity NEW_V cs2_default_granularity NOPRI; +SELECT CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3660 <= 0.2 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '[{10s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 12m (up to 72 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3660 <= 0.2 THEN '[{1s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 12m (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '[{10s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 1h (up to 360 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 THEN '[{5s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 1h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 2 THEN '[{10s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 2h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 3 THEN '[{15s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 3h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '[{1m}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '[{5m}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '[{15m}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '[{1h}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 720h (30d) (up to 720 samples) + ELSE '[{1d}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' + END AS cs2_granularity_list, + CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 0.2 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '10s' -- < 12m (up to 72 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 0.2 THEN '1s' -- < 12m (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '10s' -- < 1h (up to 360 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 THEN '5s' -- < 1h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 2 THEN '10s' -- < 2h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 3 THEN '15s' -- < 3h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '1m' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '5m' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '15m' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '1h' -- < 720h (30d) (up to 720 samples) + ELSE '1d' + END AS cs2_default_granularity + FROM DUAL +/ +PRO +PRO 3. Granularity: &&cs2_granularity_list. +DEF cs2_granularity = '&3.'; +UNDEF 3; +COL cs2_granularity NEW_V cs2_granularity NOPRI; +SELECT NVL(LOWER(TRIM('&&cs2_granularity.')), '&&cs2_default_granularity.') cs2_granularity FROM DUAL; +SELECT CASE + WHEN '&&cs2_granularity.' = 's' THEN '1s' + WHEN '&&cs2_granularity.' = 'm' THEN '1m' + WHEN '&&cs2_granularity.' = 'h' THEN '1h' + WHEN '&&cs2_granularity.' = 'd' THEN '1d' + WHEN '&&cs2_granularity.' IN ('1s', '5s', '10s', '15s', '1m', '5m', '15m', '1h', '1d') THEN '&&cs2_granularity.' + ELSE '&&cs2_default_granularity.' + END cs2_granularity + FROM DUAL +/ +-- +COL cs2_fmt NEW_V cs2_fmt NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1s' THEN 'SS' -- (1/24/3600) 1 second + WHEN '5s' THEN 'SS' -- (5/24/3600) 5 seconds + WHEN '10s' THEN 'SS' -- (10/24/3600) 10 seconds + WHEN '15s' THEN 'SS' -- (15/24/3600) 15 seconds + WHEN '1m' THEN 'MI' -- (1/24/60) 1 minute + WHEN '5m' THEN 'MI' -- (5/24/60) 5 minutes + WHEN '15m' THEN 'MI' -- (15/24/60) 15 minutes + WHEN '1h' THEN 'HH' -- (1/24) 1 hour + WHEN '1d' THEN 'DD' -- 1 day + ELSE 'XX' -- error + END cs2_fmt + FROM DUAL +/ +-- +COL cs2_plus_days NEW_V cs2_plus_days NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1s' THEN '(1/24/3600)' -- (1/24/3600) 1 second + WHEN '5s' THEN '(5/24/3600)' -- (5/24/3600) 5 seconds + WHEN '10s' THEN '(10/24/3600)' -- (10/24/3600) 10 seconds + WHEN '15s' THEN '(15/24/3600)' -- (15/24/3600) 15 seconds + WHEN '1m' THEN '(1/24/60)' -- (1/24/60) 1 minute + WHEN '5m' THEN '(5/24/60)' -- (5/24/60) 5 minutes + WHEN '15m' THEN '(15/24/60)' -- (15/24/60) 15 minutes + WHEN '1h' THEN '(1/24)' -- (1/24) 1 hour + WHEN '1d' THEN '1' -- 1 day + ELSE 'XX' -- error + END cs2_plus_days + FROM DUAL +/ +-- +COL cs2_samples NEW_V cs2_samples NOPRI; +SELECT TO_CHAR(CEIL((TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') - TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.')) / &&cs2_plus_days.)) AS cs2_samples FROM DUAL +/ +-- +PRO +PRO 4. Reporting Dimension: [{event}|wait_class|machine|sql_id|plan_hash_value|top_level_sql_id|sid|blocking_session|current_obj#|module|program|sql_opname|appl_cat|pdb_name|p1|p2|p3] +DEF cs2_dimension = '&4.'; +UNDEF 4; +COL cs2_dimension NEW_V cs2_dimension NOPRI; +-- SELECT NVL(LOWER(TRIM('&&cs2_dimension.')), 'event') cs2_dimension FROM DUAL; +SELECT CASE WHEN LOWER(TRIM('&&cs2_dimension.')) IN ('event', 'wait_class', 'machine', 'sql_id', 'plan_hash_value', 'top_level_sql_id', 'sid', 'blocking_session', 'current_obj#', 'module', 'program', 'sql_opname', 'appl_cat', 'pdb_name', 'p1', 'p2', 'p3') THEN LOWER(TRIM('&&cs2_dimension.')) ELSE 'event' END cs2_dimension FROM DUAL; +-- +COL use_oem_colors_series NEW_V use_oem_colors_series NOPRI; +SELECT CASE '&&cs2_dimension.' WHEN 'wait_class' THEN NULL ELSE '//' END AS use_oem_colors_series FROM DUAL; +-- +COL aas FOR 999,990.000 HEA 'Average Active|Sessions (AAS)'; +COL db_seconds FOR 999,999,990 HEA 'DB Seconds'; +COL session_state FOR A13 HEA 'Session|State'; +BREAK ON REPORT; +COMPUTE SUM OF aas db_seconds ON REPORT; +-- +WITH +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.session_state, + 10 * COUNT(*) AS db_seconds + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + GROUP BY + h.session_state +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.session_state, + 1 * COUNT(*) AS db_seconds + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + GROUP BY + h.session_state +), +ash_all AS ( +SELECT session_state, db_seconds FROM ash_awr + UNION ALL +SELECT session_state, db_seconds FROM ash_mem +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + session_state + FROM ash_all + GROUP BY + session_state + ORDER BY + 1 DESC +/ +-- +PRO +PRO 5. Session State (opt): +DEF cs2_session_state = '&5.'; +UNDEF 5; +DEF cs2_instruct_to_skip = '(opt)'; +COL cs2_instruct_to_skip NEW_V cs2_instruct_to_skip NOPRI; +SELECT '(hit "Return" to skip this patameter since Session State is "ON CPU")' AS cs2_instruct_to_skip FROM DUAL WHERE '&&cs2_session_state.' = 'ON CPU' +/ +-- +COL wait_class HEA 'Wait Class'; +-- +WITH +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.session_state, + h.wait_class, + 10 * COUNT(*) AS db_seconds + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + GROUP BY + h.session_state, + h.wait_class +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.session_state, + h.wait_class, + 1 * COUNT(*) AS db_seconds + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + GROUP BY + h.session_state, + h.wait_class +), +ash_all AS ( +SELECT session_state, wait_class, db_seconds FROM ash_awr + UNION ALL +SELECT session_state, wait_class, db_seconds FROM ash_mem +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + wait_class, + session_state + FROM ash_all + GROUP BY + wait_class, + session_state + ORDER BY + 1 DESC +/ +-- +PRO +PRO 6. Wait Class &&cs2_instruct_to_skip.: +DEF cs2_wait_class = '&6.'; +UNDEF 6; +-- +COL cs2_group NEW_V cs2_group NOPRI; +SELECT CASE '&&cs2_dimension.' + WHEN 'wait_class' THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class END]' + WHEN 'event' THEN CASE WHEN '&&cs2_wait_class.' IS NULL THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END]' ELSE q'[h.event]' END + WHEN 'machine' THEN q'[h.machine]' + WHEN 'sql_id' THEN q'[h.sql_id]' + WHEN 'plan_hash_value' THEN q'[TO_CHAR(h.sql_plan_hash_value)]' + WHEN 'top_level_sql_id' THEN q'[h.top_level_sql_id]' + WHEN 'sid' THEN q'[TO_CHAR(h.session_id)]' + -- WHEN 'blocking_session' THEN q'[h.blocking_session||CASE WHEN h.blocking_session IS NOT NULL THEN ','||h.blocking_session_serial# END]' -- 19c: ORA-00979: not a GROUP BY expression + WHEN 'blocking_session' THEN q'[TO_CHAR(h.blocking_session)]' + -- WHEN 'current_obj#' THEN q'[h.current_obj#||CASE WHEN h.current_obj# IS NOT NULL THEN ' ('||h.con_id||')' END]' -- 19c: ORA-00979: not a GROUP BY expression + WHEN 'current_obj#' THEN q'[TO_CHAR(h.current_obj#)]' + WHEN 'module' THEN q'[h.module]' + WHEN 'program' THEN q'[h.program]' + WHEN 'sql_opname' THEN q'[h.sql_opname]' + WHEN 'appl_cat' THEN q'[application_category(t.sql_text, h.sql_opname)]' + WHEN 'pdb_name' THEN q'[TO_CHAR(h.con_id)]' + WHEN 'p1' THEN q'[h.p1text||':'||h.p1]' + WHEN 'p2' THEN q'[h.p2text||':'||h.p2]' + WHEN 'p3' THEN q'[h.p3text||':'||h.p3]' + END AS cs2_group + FROM DUAL +/ +-- +COL event HEA 'Event'; +-- +WITH +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.event, + h.wait_class, + h.session_state, + 10 * COUNT(*) AS db_seconds + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + GROUP BY + h.event, + h.wait_class, + h.session_state +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.event, + h.wait_class, + h.session_state, + 1 * COUNT(*) AS db_seconds + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + GROUP BY + h.event, + h.wait_class, + h.session_state +), +ash_all AS ( +SELECT event, wait_class, session_state, db_seconds FROM ash_awr + UNION ALL +SELECT event, wait_class, session_state, db_seconds FROM ash_mem +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + event, + wait_class, + session_state + FROM ash_all + GROUP BY + event, + wait_class, + session_state + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +PRO +PRO 7. Event &&cs2_instruct_to_skip.: +DEF cs2_event = '&7.'; +UNDEF 7; +-- +COL machine HEA 'Machine'; +-- +WITH +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + 10 * COUNT(*) AS db_seconds + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + GROUP BY + h.machine +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + 1 * COUNT(*) AS db_seconds + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + GROUP BY + h.machine +), +ash_all AS ( +SELECT machine, db_seconds FROM ash_awr + UNION ALL +SELECT machine, db_seconds FROM ash_mem +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + machine + FROM ash_all + GROUP BY + machine + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +PRO +PRO 8. Machine (opt): +DEF cs2_machine = '&8.'; +UNDEF 8; +-- +PRO +PRO 9. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&9.'; +UNDEF 9; +-- +COL sql_text FOR A60 TRUNC; +-- +WITH +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sql_id, + 10 * COUNT(*) AS db_seconds + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + GROUP BY + h.sql_id +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sql_id, + 1 * COUNT(*) AS db_seconds + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + GROUP BY + h.sql_id +), +ash_all AS ( +SELECT sql_id, db_seconds FROM ash_awr + UNION ALL +SELECT sql_id, db_seconds FROM ash_mem +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + sql_id, + (SELECT s.sql_text FROM sql_txt s WHERE s.sql_id = a.sql_id AND ROWNUM = 1) AS sql_text + FROM ash_all a + GROUP BY + sql_id + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +PRO +PRO 10. SQL_ID (opt): +DEF cs2_sql_id = '&10.'; +UNDEF 10; +-- +DEF spool_id_chart_footer_script = 'cs_ash_analytics_footer.sql'; +COL rn FOR 999; +COL dimension_group FOR A64 TRUNC; +DEF series_01 = ' '; +DEF series_02 = ' '; +DEF series_03 = ' '; +DEF series_04 = ' '; +DEF series_05 = ' '; +DEF series_06 = ' '; +DEF series_07 = ' '; +DEF series_08 = ' '; +DEF series_09 = ' '; +DEF series_10 = ' '; +DEF series_11 = ' '; +DEF series_12 = ' '; +DEF series_13 = ' '; +COL series_01 NEW_V series_01 FOR A64 TRUNC NOPRI; +COL series_02 NEW_V series_02 FOR A64 TRUNC NOPRI; +COL series_03 NEW_V series_03 FOR A64 TRUNC NOPRI; +COL series_04 NEW_V series_04 FOR A64 TRUNC NOPRI; +COL series_05 NEW_V series_05 FOR A64 TRUNC NOPRI; +COL series_06 NEW_V series_06 FOR A64 TRUNC NOPRI; +COL series_07 NEW_V series_07 FOR A64 TRUNC NOPRI; +COL series_08 NEW_V series_08 FOR A64 TRUNC NOPRI; +COL series_09 NEW_V series_09 FOR A64 TRUNC NOPRI; +COL series_10 NEW_V series_10 FOR A64 TRUNC NOPRI; +COL series_11 NEW_V series_11 FOR A64 TRUNC NOPRI; +COL series_12 NEW_V series_12 FOR A64 TRUNC NOPRI; +COL series_13 NEW_V series_13 FOR A64 TRUNC NOPRI; +DEF aas_01 = ' '; +DEF aas_02 = ' '; +DEF aas_03 = ' '; +DEF aas_04 = ' '; +DEF aas_05 = ' '; +DEF aas_06 = ' '; +DEF aas_07 = ' '; +DEF aas_08 = ' '; +DEF aas_09 = ' '; +DEF aas_10 = ' '; +DEF aas_11 = ' '; +DEF aas_12 = ' '; +DEF aas_13 = ' '; +COL aas_01 NEW_V aas_01 FOR A9 TRUNC NOPRI; +COL aas_02 NEW_V aas_02 FOR A9 TRUNC NOPRI; +COL aas_03 NEW_V aas_03 FOR A9 TRUNC NOPRI; +COL aas_04 NEW_V aas_04 FOR A9 TRUNC NOPRI; +COL aas_05 NEW_V aas_05 FOR A9 TRUNC NOPRI; +COL aas_06 NEW_V aas_06 FOR A9 TRUNC NOPRI; +COL aas_07 NEW_V aas_07 FOR A9 TRUNC NOPRI; +COL aas_08 NEW_V aas_08 FOR A9 TRUNC NOPRI; +COL aas_09 NEW_V aas_09 FOR A9 TRUNC NOPRI; +COL aas_10 NEW_V aas_10 FOR A9 TRUNC NOPRI; +COL aas_11 NEW_V aas_11 FOR A9 TRUNC NOPRI; +COL aas_12 NEW_V aas_12 FOR A9 TRUNC NOPRI; +COL aas_13 NEW_V aas_13 FOR A9 TRUNC NOPRI; +-- +WITH +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +-- +FUNCTION get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +-- +FUNCTION application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +-- +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + &&cs2_group. AS dimension_group, + 10 * COUNT(*) AS db_seconds + FROM dba_hist_active_sess_history h, + sql_txt t + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + AND t.sql_id(+) = h.sql_id + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + &&cs2_group. +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + &&cs2_group. AS dimension_group, + 1 * COUNT(*) AS db_seconds + FROM v$active_session_history h, + sql_txt t + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + AND t.sql_id(+) = h.sql_id + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + &&cs2_group. +), +ash_all AS ( +SELECT dimension_group, db_seconds FROM ash_awr + UNION ALL +SELECT dimension_group, db_seconds FROM ash_mem +), +ash_by_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + dimension_group, + ROW_NUMBER() OVER(ORDER BY SUM(db_seconds) DESC) AS rn + FROM ash_all a + GROUP BY + dimension_group +), +top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, -- up to 12 + aas, + db_seconds, + SUBSTR(CASE + WHEN TRIM(dimension_group) IS NULL /*OR TRIM(dimension_group) = ','*/ THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id') THEN dimension_group||' '||get_sql_text(dimension_group) + WHEN '&&cs2_dimension.' = 'pdb_name' THEN dimension_group||' '||get_pdb_name(dimension_group) + ELSE dimension_group + END, 1, 64) AS dimension_group + FROM ash_by_dim + WHERE rn < (SELECT MAX(rn) FROM wait_classes) -- 13 +), +max_top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ MAX(rn) AS max_rn FROM top +), +bottom AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + (1 + max_top.max_rn) AS bottom_rn, -- up to 13 + ROUND(SUM(a.db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(a.db_seconds) AS db_seconds, + '"all others"' AS dimension_group + FROM ash_by_dim a, max_top + WHERE a.rn >= max_top.max_rn + GROUP BY + max_top.max_rn +), +wait_classes2 AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + w.rn, + NVL(t.aas, 0) AS aas, + NVL(t.db_seconds, 0) AS db_seconds, + w.dimension_group + FROM wait_classes w, + top t + WHERE '&&cs2_dimension.' = 'wait_class' + AND t.dimension_group(+) = w.dimension_group +), +top_and_bottom AS ( +SELECT rn, aas, db_seconds, dimension_group + FROM top + WHERE '&&cs2_dimension.' <> 'wait_class' + UNION ALL +SELECT rn, aas, db_seconds, dimension_group + FROM wait_classes2 + WHERE '&&cs2_dimension.' = 'wait_class' + UNION ALL +SELECT bottom_rn AS rn, aas, db_seconds, dimension_group + FROM bottom + WHERE '&&cs2_dimension.' <> 'wait_class' +), +list AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, LPAD(TRIM(TO_CHAR(ROUND(aas, 3), '9,990.000')), 9) AS aas, db_seconds, dimension_group + FROM top_and_bottom +) +SELECT rn, aas, db_seconds, dimension_group, + COALESCE((SELECT dimension_group FROM list WHERE rn = 1), ' ') AS series_01, + COALESCE((SELECT dimension_group FROM list WHERE rn = 2), ' ') AS series_02, + COALESCE((SELECT dimension_group FROM list WHERE rn = 3), ' ') AS series_03, + COALESCE((SELECT dimension_group FROM list WHERE rn = 4), ' ') AS series_04, + COALESCE((SELECT dimension_group FROM list WHERE rn = 5), ' ') AS series_05, + COALESCE((SELECT dimension_group FROM list WHERE rn = 6), ' ') AS series_06, + COALESCE((SELECT dimension_group FROM list WHERE rn = 7), ' ') AS series_07, + COALESCE((SELECT dimension_group FROM list WHERE rn = 8), ' ') AS series_08, + COALESCE((SELECT dimension_group FROM list WHERE rn = 9), ' ') AS series_09, + COALESCE((SELECT dimension_group FROM list WHERE rn = 10), ' ') AS series_10, + COALESCE((SELECT dimension_group FROM list WHERE rn = 11), ' ') AS series_11, + COALESCE((SELECT dimension_group FROM list WHERE rn = 12), ' ') AS series_12, + COALESCE((SELECT dimension_group FROM list WHERE rn = 13), ' ') AS series_13, + (SELECT aas FROM list WHERE rn = 1) AS aas_01, + (SELECT aas FROM list WHERE rn = 2) AS aas_02, + (SELECT aas FROM list WHERE rn = 3) AS aas_03, + (SELECT aas FROM list WHERE rn = 4) AS aas_04, + (SELECT aas FROM list WHERE rn = 5) AS aas_05, + (SELECT aas FROM list WHERE rn = 6) AS aas_06, + (SELECT aas FROM list WHERE rn = 7) AS aas_07, + (SELECT aas FROM list WHERE rn = 8) AS aas_08, + (SELECT aas FROM list WHERE rn = 9) AS aas_09, + (SELECT aas FROM list WHERE rn = 10) AS aas_10, + (SELECT aas FROM list WHERE rn = 11) AS aas_11, + (SELECT aas FROM list WHERE rn = 12) AS aas_12, + (SELECT aas FROM list WHERE rn = 13) AS aas_13 + FROM list + ORDER BY + rn +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Average Active Sessions by "&&cs2_dimension." between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = 'Average Active Sessions (AAS)'; +DEF xaxis_title = ''; +-- +COL xaxis_title NEW_V xaxis_title NOPRI; +SELECT +'RGN:"&&cs_rgn." '|| +CASE WHEN '&&cs_con_name.' = 'CDB$ROOT' THEN UPPER('CDB:"&&cs_db_name." ') ELSE 'PDB:"&&cs_con_name." ' END|| +CASE WHEN '&&cs2_session_state.' IS NOT NULL THEN 'State:"&&cs2_session_state." ' END|| +CASE WHEN '&&cs2_wait_class.' IS NOT NULL THEN 'Wait:"&&cs2_wait_class." ' END|| +CASE WHEN '&&cs2_event.' IS NOT NULL THEN 'Event:"%&&cs2_event.%" ' END|| +CASE WHEN '&&cs2_machine.' IS NOT NULL THEN 'Machine:"%&&cs2_machine.%" ' END|| +CASE WHEN '&&cs2_sql_text_piece.' IS NOT NULL THEN 'Text:"%&&cs2_sql_text_piece.%" ' END|| +CASE WHEN '&&cs2_sql_id.' IS NOT NULL THEN 'SQL_ID:"&&cs2_sql_id." ' END AS xaxis_title +FROM DUAL; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_granularity." "&&cs2_dimension." "&&cs2_session_state." "&&cs2_wait_class." "&&cs2_event." "&&cs2_machine." "&&cs2_sql_text_piece." "&&cs2_sql_id."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&series_01.', id:'01', type:'number'} +PRO ,{label:'&&series_02.', id:'02', type:'number'} +PRO ,{label:'&&series_03.', id:'03', type:'number'} +PRO ,{label:'&&series_04.', id:'04', type:'number'} +PRO ,{label:'&&series_05.', id:'05', type:'number'} +PRO ,{label:'&&series_06.', id:'06', type:'number'} +PRO ,{label:'&&series_07.', id:'07', type:'number'} +PRO ,{label:'&&series_08.', id:'08', type:'number'} +PRO ,{label:'&&series_09.', id:'09', type:'number'} +PRO ,{label:'&&series_10.', id:'10', type:'number'} +PRO ,{label:'&&series_11.', id:'11', type:'number'} +PRO ,{label:'&&series_12.', id:'12', type:'number'} +PRO ,{label:'&&series_13.', id:'13', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +FUNCTION ceil_timestamp (p_timestamp IN TIMESTAMP) +RETURN DATE +IS +BEGIN + IF '&&cs2_granularity.' = '1s' THEN + RETURN CAST(p_timestamp AS DATE); + ELSIF '&&cs2_granularity.' = '5s' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'MI') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 5) * 5 / (24 * 60 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '10s' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'MI') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 10) * 10 / (24 * 60 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15s' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'MI') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 15) * 15 / (24 * 60 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '5m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 5) * 5 / (24 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 15) * 15 / (24 * 60) + &&cs2_plus_days.; + ELSE -- 1s, 1m, 1h, 1d + RETURN TRUNC(CAST(p_timestamp AS DATE) + &&cs2_plus_days., '&&cs2_fmt.'); + END IF; +END ceil_timestamp; +/****************************************************************************************/ +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +/****************************************************************************************/ +FUNCTION get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +sample AS ( +SELECT ceil_timestamp(TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + ((LEVEL - 1) * &&cs2_plus_days.)) AS time FROM DUAL CONNECT BY LEVEL <= TO_NUMBER('&&cs2_samples.') +), +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id', 'pdb_name') THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'sid', 'blocking_session', 'current_obj#', 'module', 'program', 'sql_opname', 'appl_cat', 'p1', 'p2', 'p3') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END AS dimension_group + FROM dba_hist_active_sess_history h, + sql_txt t + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + AND t.sql_id(+) = h.sql_id + AND ROWNUM >= 1 /* MATERIALIZE */ +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id', 'pdb_name') THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'sid', 'blocking_session', 'current_obj#', 'module', 'program', 'sql_opname', 'appl_cat', 'p1', 'p2', 'p3') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END AS dimension_group + FROM v$active_session_history h, + sql_txt t + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + AND t.sql_id(+) = h.sql_id + AND ROWNUM >= 1 /* MATERIALIZE */ +), +ash_awr_denorm AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(h.sample_time) AS time, + --ROUND(24 * 3600 * (MAX(CAST(h.sample_time AS DATE)) - MIN(CAST(h.sample_time AS DATE))) + 10) AS interval_secs, + SUM(CASE WHEN h.dimension_group = q'[&&series_01.]' THEN 10 ELSE 0 END) AS db_secs_01, + SUM(CASE WHEN h.dimension_group = q'[&&series_02.]' THEN 10 ELSE 0 END) AS db_secs_02, + SUM(CASE WHEN h.dimension_group = q'[&&series_03.]' THEN 10 ELSE 0 END) AS db_secs_03, + SUM(CASE WHEN h.dimension_group = q'[&&series_04.]' THEN 10 ELSE 0 END) AS db_secs_04, + SUM(CASE WHEN h.dimension_group = q'[&&series_05.]' THEN 10 ELSE 0 END) AS db_secs_05, + SUM(CASE WHEN h.dimension_group = q'[&&series_06.]' THEN 10 ELSE 0 END) AS db_secs_06, + SUM(CASE WHEN h.dimension_group = q'[&&series_07.]' THEN 10 ELSE 0 END) AS db_secs_07, + SUM(CASE WHEN h.dimension_group = q'[&&series_08.]' THEN 10 ELSE 0 END) AS db_secs_08, + SUM(CASE WHEN h.dimension_group = q'[&&series_09.]' THEN 10 ELSE 0 END) AS db_secs_09, + SUM(CASE WHEN h.dimension_group = q'[&&series_10.]' THEN 10 ELSE 0 END) AS db_secs_10, + SUM(CASE WHEN h.dimension_group = q'[&&series_11.]' THEN 10 ELSE 0 END) AS db_secs_11, + SUM(CASE WHEN h.dimension_group = q'[&&series_12.]' THEN 10 ELSE 0 END) AS db_secs_12, + SUM(CASE WHEN h.dimension_group = q'[&&series_13.]' THEN 10 ELSE 0 END) AS db_secs_13 + FROM ash_awr h + GROUP BY + ceil_timestamp(h.sample_time) +), +ash_mem_denorm AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(h.sample_time) AS time, + --ROUND(24 * 3600 * (MAX(CAST(h.sample_time AS DATE)) - MIN(CAST(h.sample_time AS DATE))) + 1) AS interval_secs, + SUM(CASE WHEN h.dimension_group = q'[&&series_01.]' THEN 01 ELSE 0 END) AS db_secs_01, + SUM(CASE WHEN h.dimension_group = q'[&&series_02.]' THEN 01 ELSE 0 END) AS db_secs_02, + SUM(CASE WHEN h.dimension_group = q'[&&series_03.]' THEN 01 ELSE 0 END) AS db_secs_03, + SUM(CASE WHEN h.dimension_group = q'[&&series_04.]' THEN 01 ELSE 0 END) AS db_secs_04, + SUM(CASE WHEN h.dimension_group = q'[&&series_05.]' THEN 01 ELSE 0 END) AS db_secs_05, + SUM(CASE WHEN h.dimension_group = q'[&&series_06.]' THEN 01 ELSE 0 END) AS db_secs_06, + SUM(CASE WHEN h.dimension_group = q'[&&series_07.]' THEN 01 ELSE 0 END) AS db_secs_07, + SUM(CASE WHEN h.dimension_group = q'[&&series_08.]' THEN 01 ELSE 0 END) AS db_secs_08, + SUM(CASE WHEN h.dimension_group = q'[&&series_09.]' THEN 01 ELSE 0 END) AS db_secs_09, + SUM(CASE WHEN h.dimension_group = q'[&&series_10.]' THEN 01 ELSE 0 END) AS db_secs_10, + SUM(CASE WHEN h.dimension_group = q'[&&series_11.]' THEN 01 ELSE 0 END) AS db_secs_11, + SUM(CASE WHEN h.dimension_group = q'[&&series_12.]' THEN 01 ELSE 0 END) AS db_secs_12, + SUM(CASE WHEN h.dimension_group = q'[&&series_13.]' THEN 01 ELSE 0 END) AS db_secs_13 + FROM ash_mem h + GROUP BY + ceil_timestamp(h.sample_time) +), +ash_denorm AS ( +SELECT time, (time - LAG(time, 1, time) OVER (ORDER BY time)) * 24 * 3600 AS interval_secs, db_secs_01, db_secs_02, db_secs_03, db_secs_04, db_secs_05, db_secs_06, db_secs_07, db_secs_08, db_secs_09, db_secs_10, db_secs_11, db_secs_12, db_secs_13 FROM ash_awr_denorm + UNION ALL +SELECT time, (time - LAG(time, 1, time) OVER (ORDER BY time)) * 24 * 3600 AS interval_secs, db_secs_01, db_secs_02, db_secs_03, db_secs_04, db_secs_05, db_secs_06, db_secs_07, db_secs_08, db_secs_09, db_secs_10, db_secs_11, db_secs_12, db_secs_13 FROM ash_mem_denorm +), +/****************************************************************************************/ +my_query AS ( +SELECT s.time, a.interval_secs, a.db_secs_01, a.db_secs_02, a.db_secs_03, a.db_secs_04, a.db_secs_05, a.db_secs_06, a.db_secs_07, a.db_secs_08, a.db_secs_09, a.db_secs_10, a.db_secs_11, a.db_secs_12, a.db_secs_13, + ROW_NUMBER() OVER (ORDER BY s.time ASC NULLS LAST) AS rn_asc, + ROW_NUMBER() OVER (ORDER BY s.time DESC NULLS LAST) AS rn_desc + FROM ash_denorm a, + sample s + WHERE a.interval_secs > 0 + AND a.time(+) = s.time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.db_secs_01 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_02 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_03 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_04 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_05 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_06 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_07 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_08 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_09 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_10 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_11 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_12 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_13 / q.interval_secs, 3)|| + ']' + FROM my_query q + WHERE 1 = 1 + --AND q.rn_asc > 1 AND q.rn_desc > 1 + AND q.db_secs_01 + q.db_secs_02 + q.db_secs_03 + q.db_secs_04 + q.db_secs_05 + q.db_secs_06 + q.db_secs_07 + q.db_secs_08 + q.db_secs_09 + q.db_secs_10 + q.db_secs_11 + q.db_secs_12 + q.db_secs_13 > 0 + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '&&use_oem_colors_series.'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_awr_block_chains_report.sql b/csierra/cs_ash_awr_block_chains_report.sql new file mode 100644 index 0000000..9685d44 --- /dev/null +++ b/csierra/cs_ash_awr_block_chains_report.sql @@ -0,0 +1,67 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_ash_awr_block_chains_report.sql +-- +-- Purpose: ASH Block Chains Report from AWR +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/04 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_awr_block_chains_report.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_awr_block_chains_report'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '24'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO To report on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below +PRO +PRO 3. Threshold: [{1}|0-10] +DEF times_cpu_cores = '&3.'; +UNDEF 3; +COL times_cpu_cores NEW_V times_cpu_cores NOPRI; +SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO THRESHOLD : "&×_cpu_cores.x NUM_CPU_CORES" +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +-- DEF times_cpu_cores = '1'; +DEF include_hist = 'Y'; +DEF include_mem = 'N'; +-- +@@cs_internal/cs_ash_block_chains.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." +-- +@@cs_internal/cs_spool_tail.sql +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_awr_peaks_bubble.sql b/csierra/cs_ash_awr_peaks_bubble.sql new file mode 100644 index 0000000..9f3dbe1 --- /dev/null +++ b/csierra/cs_ash_awr_peaks_bubble.sql @@ -0,0 +1,144 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_ash_awr_peaks_bubble.sql +-- +-- Purpose: ASH Peaks Bubble from AWR +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/25 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_awr_peaks_bubble.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_awr_peaks_bubble'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO To chart on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below +PRO +PRO 3. Threshold: [{1}|0-10] +DEF times_cpu_cores = '&3.'; +UNDEF 3; +COL times_cpu_cores NEW_V times_cpu_cores NOPRI; +SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL +/ +PRO +PRO 4. Dimension [{GLOBAL}|SQL_ID|WAIT_CLASS|TIMED_EVENT|PDB] +DEF dimension = '&4.'; +UNDEF 4; +COL dimension NEW_V dimension NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&dimension.')) IN ('GLOBAL', 'SQL_ID', 'WAIT_CLASS', 'TIMED_EVENT', 'PDB') THEN UPPER(TRIM('&&dimension.')) ELSE 'GLOBAL' END AS dimension FROM DUAL +/ +COL grouping_expression NEW_V grouping_expression NOPRI; +SELECT CASE '&&dimension.' + WHEN 'GLOBAL' THEN q'[object_type]' + WHEN 'SQL_ID' THEN q'[statement_id||' '||SUBSTR(remarks, 1, 50)]' + WHEN 'WAIT_CLASS' THEN q'[CASE operation WHEN 'ON CPU' THEN operation ELSE options END]' + WHEN 'TIMED_EVENT' THEN q'[CASE operation WHEN 'ON CPU' THEN operation ELSE options||' - '||object_node END]' + WHEN 'PDB' THEN q'[object_owner||'('||plan_id||')']' + END AS grouping_expression +FROM DUAL +/ +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +DEF include_hist = 'Y'; +DEF include_mem = 'N'; +SET SERVEROUT OFF; +@@cs_internal/cs_active_sessions_peaks_internal_v5.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&dimension.' cs_file_name FROM DUAL; +-- +DEF report_title = "Peaks duration of Active Sessions in Concurrency contention exceeding &×_cpu_cores.x CPU_CORES by top value - &&dimension."; +DEF chart_title = "&&report_title."; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +-- DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +-- DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "Maximum Active Sessions"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2) Bubble size indicates duration of contention. Label shows the top#1 contributor."; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." "&&dimension."'; +-- +DEF spool_chart_1st_column = 'ID'; +@@cs_internal/cs_spool_head_chart.sql +PRO , 'Time', 'Total Maximum Active Sessions', 'Top#1 &&dimension.', 'Approximate duration in seconds' +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +-- SELECT ', [''#'||ROW_NUMBER() OVER (ORDER BY cost DESC, timestamp)||' '||cost||''''|| +SELECT ', ['''''|| + ', new Date('|| + TO_CHAR(t.timestamp, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(t.timestamp, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(t.timestamp, 'DD')|| /* day */ + ','||TO_CHAR(t.timestamp, 'HH24')|| /* hour */ + ','||TO_CHAR(t.timestamp, 'MI')|| /* minute */ + ','||TO_CHAR(t.timestamp, 'SS')|| /* second */ + ')'|| + ', '||num_format(t.cardinality, 0)|| -- sessions_peak + ', '''||&&grouping_expression.||''''|| + ', '||num_format(t.cost, 0)|| -- seconds + ']' + FROM plan_table t + ORDER BY + t.cost DESC +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter|Bubble] +DEF cs_chart_type = 'Bubble'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_awr_peaks_chart.sql b/csierra/cs_ash_awr_peaks_chart.sql new file mode 100644 index 0000000..1da79e4 --- /dev/null +++ b/csierra/cs_ash_awr_peaks_chart.sql @@ -0,0 +1,175 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_ash_awr_peaks_chart.sql +-- +-- Purpose: ASH Peaks Chart from AWR +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/12/03 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_awr_peaks_chart.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_awr_peaks_chart'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO To chart on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below +PRO +PRO 3. Threshold: [{1}|0-10] +DEF times_cpu_cores = '&3.'; +UNDEF 3; +COL times_cpu_cores NEW_V times_cpu_cores NOPRI; +SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL +/ +DEF include_hist = 'Y'; +DEF include_mem = 'N'; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "Active Sessions Peaks"; +DEF chart_title = "&&report_title."; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +-- DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +-- DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "Sum of Active Sessions per sampled time"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +--DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Sessions Peak', id:'1', type:'number'} +PRO ,{label:'Before Peak', id:'2', type:'number'} +PRO ,{label:'After Peak', id:'3', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +threshold AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ &×_cpu_cores. * value AS value FROM v$osstat WHERE stat_name = 'NUM_CPU_CORES' AND ROWNUM >= 1 /* MATERIALIZE */ +), +active_sessions_time_series AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE '&&include_hist.' = 'Y' + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + h.sample_time +UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE '&&include_mem.' = 'Y' + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + h.sample_time +), +time_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + SUM(active_sessions) AS active_sessions, + LAG(SUM(active_sessions)) OVER (ORDER BY sample_time) AS lag_active_sessions, + LEAD(SUM(active_sessions)) OVER (ORDER BY sample_time) AS lead_active_sessions + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time +), +t AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + t.sample_time, + CASE WHEN t.active_sessions >= threshold.value THEN t.active_sessions END AS peak_value, + CASE WHEN t.active_sessions < threshold.value AND t.lead_active_sessions >= threshold.value THEN t.active_sessions END AS before_value, + CASE WHEN t.active_sessions < threshold.value AND t.lag_active_sessions >= threshold.value THEN t.active_sessions END AS after_value + FROM threshold, + time_dim t + WHERE (t.active_sessions >= threshold.value OR t.lag_active_sessions >= threshold.value OR t.lead_active_sessions >= threshold.value) + AND ROWNUM >= 1 /* MATERIALIZE */ +) +SELECT ', [new Date('|| + TO_CHAR(t.sample_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(t.sample_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(t.sample_time, 'DD')|| /* day */ + ','||TO_CHAR(t.sample_time, 'HH24')|| /* hour */ + ','||TO_CHAR(t.sample_time, 'MI')|| /* minute */ + ','||TO_CHAR(t.sample_time, 'SS')|| /* second */ + ')'|| + ','||num_format(t.peak_value, 0)|| + ','||num_format(t.before_value, 0)|| + ','||num_format(t.after_value, 0)|| + ']' + FROM t + ORDER BY + t.sample_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_awr_peaks_report.sql b/csierra/cs_ash_awr_peaks_report.sql new file mode 100644 index 0000000..8780755 --- /dev/null +++ b/csierra/cs_ash_awr_peaks_report.sql @@ -0,0 +1,71 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_ash_awr_peaks_report.sql +-- +-- Purpose: ASH Peaks Report from AWR +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/25 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_awr_peaks_report.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_awr_peaks_report'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '24'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO To report on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below +PRO +PRO 3. Threshold: [{1}|0-10] +DEF times_cpu_cores = '&3.'; +UNDEF 3; +COL times_cpu_cores NEW_V times_cpu_cores NOPRI; +SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO THRESHOLD : "&×_cpu_cores.x NUM_CPU_CORES" +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +-- DEF times_cpu_cores = '1'; +DEF include_hist = 'Y'; +DEF include_mem = 'N'; +PRO +PRO Sum of Active Sessions per sampled time (when greater than &×_cpu_cores.x CPU Cores) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON; +@@cs_internal/cs_active_sessions_peaks_internal_v5.sql +@@cs_internal/cs_active_sessions_peaks_internal_v6.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_awr_sample_report.sql b/csierra/cs_ash_awr_sample_report.sql new file mode 100644 index 0000000..ff78f17 --- /dev/null +++ b/csierra/cs_ash_awr_sample_report.sql @@ -0,0 +1,125 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: ah.sql | cs_ash_awr_sample_report.sql +-- +-- Purpose: ASH Samples from AWR +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/25 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter optional parameters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_awr_sample_report.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +SET PAGES 5000; +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_awr_sample_report'; +DEF cs_script_acronym = 'ah.sql | '; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '24'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. Machine (opt): +DEF cs2_machine = '&3.'; +UNDEF 3; +-- +PRO +PRO 4. SQL_ID (opt): +DEF cs_sql_id = '&4.'; +UNDEF 4; +-- +PRO +PRO 5. SID,SERIAL (opt): +DEF cs_sid_serial = '&5.'; +UNDEF 5; +-- +PRO +PRO 6. Only LOB DEDUP TX 4 waiting sessions [{N}|Y]: +DEF cs_only_dedup = '&6.'; +UNDEF 6; +COL cs_only_dedup NEW_V cs_only_dedup NOPRI; +SELECT CASE WHEN SUBSTR(TRIM(UPPER('&&cs_only_dedup.')), 1, 1) IN ('N', 'Y') THEN SUBSTR(TRIM(UPPER('&&cs_only_dedup.')), 1, 1) ELSE 'N' END AS cs_only_dedup FROM DUAL +/ +-- +PRO +PRO 7. Include PL/SQL Library Entry Point [{N}|Y]: +DEF cs_pl_sql = '&7.'; +UNDEF 7; +COL cs_pl_sql NEW_V cs_pl_sql NOPRI; +COL cs_pl_sql_pri NEW_V cs_pl_sql_pri NOPRI; +SELECT CASE WHEN SUBSTR(TRIM(UPPER('&&cs_pl_sql.')), 1, 1) IN ('N', 'Y') THEN SUBSTR(TRIM(UPPER('&&cs_pl_sql.')), 1, 1) ELSE 'N' END AS cs_pl_sql, CASE SUBSTR(TRIM(UPPER('&&cs_pl_sql.')), 1, 1) WHEN 'Y' THEN 'PRI' ELSE 'NOPRI' END AS cs_pl_sql_pri FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_machine." "&&cs_sql_id." "&&cs_sid_serial." "&&cs_only_dedup." "&&cs_pl_sql." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO MACHINE : "&&cs2_machine." +PRO SQL_ID : "&&cs_sql_id." +PRO SID,SERIAL : "&&cs_sid_serial." +PRO ONLY_DEDUP : "&&cs_only_dedup." +PRO INCL_PL_SQL : "&&cs_pl_sql." +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +DEF times_cpu_cores = '1'; +DEF include_hist = 'Y'; +DEF include_mem = 'N'; +PRO +PRO Sum of Active Sessions per sampled time (spikes greater than &&cs_num_cpu_cores. CPU Cores) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON; +@@cs_internal/cs_active_sessions_peaks_internal_v5.sql +@@cs_internal/cs_active_sessions_peaks_internal_v6.sql +-- +DEF times_cpu_cores = '0'; +DEF include_hist = 'Y'; +DEF include_mem = 'N'; +PRO +PRO Sum of Active Sessions per sampled time +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON; +@@cs_internal/cs_active_sessions_peaks_internal_v5.sql +-- +DEF times_cpu_cores = '1'; +DEF include_hist = 'Y'; +DEF include_mem = 'N'; +-- @@cs_internal/cs_ash_block_chains.sql +-- +--DEF ash_view = 'v$active_session_history'; +--DEF ash_additional_predicate = ''; +DEF ash_view = 'dba_hist_active_sess_history'; +DEF ash_additional_predicate = ' AND h.dbid = &&cs_dbid. AND h.instance_number = &&cs_instance_number. AND h.snap_id BETWEEN &&cs_snap_id_from. AND &&cs_snap_id_to. '; +-- +@@cs_internal/cs_ash_sample_detail.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_machine." "&&cs_sql_id." "&&cs_sid_serial." "&&cs_only_dedup." "&&cs_pl_sql." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_mem_block_chains_report.sql b/csierra/cs_ash_mem_block_chains_report.sql new file mode 100644 index 0000000..c96024d --- /dev/null +++ b/csierra/cs_ash_mem_block_chains_report.sql @@ -0,0 +1,67 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_ash_mem_block_chains_report.sql +-- +-- Purpose: ASH Block Chains Report from MEM +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/04 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_mem_block_chains_report.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_mem_block_chains_report'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '3'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO To report on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below +PRO +PRO 3. Threshold: [{1}|0-10] +DEF times_cpu_cores = '&3.'; +UNDEF 3; +COL times_cpu_cores NEW_V times_cpu_cores NOPRI; +SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO THRESHOLD : "&×_cpu_cores.x NUM_CPU_CORES" +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +-- DEF times_cpu_cores = '1'; +DEF include_hist = 'N'; +DEF include_mem = 'Y'; +-- +@@cs_internal/cs_ash_block_chains.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." +-- +@@cs_internal/cs_spool_tail.sql +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_mem_peaks_bubble.sql b/csierra/cs_ash_mem_peaks_bubble.sql new file mode 100644 index 0000000..479a597 --- /dev/null +++ b/csierra/cs_ash_mem_peaks_bubble.sql @@ -0,0 +1,144 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_ash_mem_peaks_bubble.sql +-- +-- Purpose: ASH Peaks Bubble from MEM +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/25 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_mem_peaks_bubble.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_mem_peaks_bubble'; +DEF cs_hours_range_default = '3'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO To chart on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below +PRO +PRO 3. Threshold: [{1}|0-10] +DEF times_cpu_cores = '&3.'; +UNDEF 3; +COL times_cpu_cores NEW_V times_cpu_cores NOPRI; +SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL +/ +PRO +PRO 4. Dimension [{GLOBAL}|SQL_ID|WAIT_CLASS|TIMED_EVENT|PDB] +DEF dimension = '&4.'; +UNDEF 4; +COL dimension NEW_V dimension NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&dimension.')) IN ('GLOBAL', 'SQL_ID', 'WAIT_CLASS', 'TIMED_EVENT', 'PDB') THEN UPPER(TRIM('&&dimension.')) ELSE 'GLOBAL' END AS dimension FROM DUAL +/ +COL grouping_expression NEW_V grouping_expression NOPRI; +SELECT CASE '&&dimension.' + WHEN 'GLOBAL' THEN q'[object_type]' + WHEN 'SQL_ID' THEN q'[statement_id||' '||SUBSTR(remarks, 1, 50)]' + WHEN 'WAIT_CLASS' THEN q'[CASE operation WHEN 'ON CPU' THEN operation ELSE options END]' + WHEN 'TIMED_EVENT' THEN q'[CASE operation WHEN 'ON CPU' THEN operation ELSE options||' - '||object_node END]' + WHEN 'PDB' THEN q'[object_owner||'('||plan_id||')']' + END AS grouping_expression +FROM DUAL +/ +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +DEF include_hist = 'N'; +DEF include_mem = 'Y'; +SET SERVEROUT OFF; +@@cs_internal/cs_active_sessions_peaks_internal_v5.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&dimension.' cs_file_name FROM DUAL; +-- +DEF report_title = "Peaks duration of Active Sessions in Concurrency contention exceeding &×_cpu_cores.x CPU_CORES by top value - &&dimension."; +DEF chart_title = "&&report_title."; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +-- DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +-- DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "Maximum Active Sessions"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2) Bubble size indicates duration of contention. Label shows the top#1 contributor."; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." "&&dimension."'; +-- +DEF spool_chart_1st_column = 'ID'; +@@cs_internal/cs_spool_head_chart.sql +PRO , 'Time', 'Total Maximum Active Sessions', 'Top#1 &&dimension.', 'Approximate duration in seconds' +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +-- SELECT ', [''#'||ROW_NUMBER() OVER (ORDER BY cost DESC, timestamp)||' '||cost||''''|| +SELECT ', ['''''|| + ', new Date('|| + TO_CHAR(t.timestamp, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(t.timestamp, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(t.timestamp, 'DD')|| /* day */ + ','||TO_CHAR(t.timestamp, 'HH24')|| /* hour */ + ','||TO_CHAR(t.timestamp, 'MI')|| /* minute */ + ','||TO_CHAR(t.timestamp, 'SS')|| /* second */ + ')'|| + ', '||num_format(t.cardinality, 0)|| -- sessions_peak + ', '''||&&grouping_expression.||''''|| + ', '||num_format(t.cost, 0)|| -- seconds + ']' + FROM plan_table t + ORDER BY + t.cost DESC +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter|Bubble] +DEF cs_chart_type = 'Bubble'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_mem_peaks_chart.sql b/csierra/cs_ash_mem_peaks_chart.sql new file mode 100644 index 0000000..741d4c2 --- /dev/null +++ b/csierra/cs_ash_mem_peaks_chart.sql @@ -0,0 +1,175 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_ash_mem_peaks_chart.sql +-- +-- Purpose: ASH Peaks Chart from MEM +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/12/03 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_mem_peaks_chart.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_mem_peaks_chart'; +DEF cs_hours_range_default = '3'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO To chart on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below +PRO +PRO 3. Threshold: [{1}|0-10] +DEF times_cpu_cores = '&3.'; +UNDEF 3; +COL times_cpu_cores NEW_V times_cpu_cores NOPRI; +SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL +/ +DEF include_hist = 'N'; +DEF include_mem = 'Y'; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "Active Sessions Peaks"; +DEF chart_title = "&&report_title."; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +-- DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +-- DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "Sum of Active Sessions per sampled time"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +--DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Sessions Peak', id:'1', type:'number'} +PRO ,{label:'Before Peak', id:'2', type:'number'} +PRO ,{label:'After Peak', id:'3', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +threshold AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ &×_cpu_cores. * value AS value FROM v$osstat WHERE stat_name = 'NUM_CPU_CORES' AND ROWNUM >= 1 /* MATERIALIZE */ +), +active_sessions_time_series AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE '&&include_hist.' = 'Y' + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + h.sample_time +UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE '&&include_mem.' = 'Y' + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + h.sample_time +), +time_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + SUM(active_sessions) AS active_sessions, + LAG(SUM(active_sessions)) OVER (ORDER BY sample_time) AS lag_active_sessions, + LEAD(SUM(active_sessions)) OVER (ORDER BY sample_time) AS lead_active_sessions + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time +), +t AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + t.sample_time, + CASE WHEN t.active_sessions >= threshold.value THEN t.active_sessions END AS peak_value, + CASE WHEN t.active_sessions < threshold.value AND t.lead_active_sessions >= threshold.value THEN t.active_sessions END AS before_value, + CASE WHEN t.active_sessions < threshold.value AND t.lag_active_sessions >= threshold.value THEN t.active_sessions END AS after_value + FROM threshold, + time_dim t + WHERE (t.active_sessions >= threshold.value OR t.lag_active_sessions >= threshold.value OR t.lead_active_sessions >= threshold.value) + AND ROWNUM >= 1 /* MATERIALIZE */ +) +SELECT ', [new Date('|| + TO_CHAR(t.sample_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(t.sample_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(t.sample_time, 'DD')|| /* day */ + ','||TO_CHAR(t.sample_time, 'HH24')|| /* hour */ + ','||TO_CHAR(t.sample_time, 'MI')|| /* minute */ + ','||TO_CHAR(t.sample_time, 'SS')|| /* second */ + ')'|| + ','||num_format(t.peak_value, 0)|| + ','||num_format(t.before_value, 0)|| + ','||num_format(t.after_value, 0)|| + ']' + FROM t + ORDER BY + t.sample_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_mem_peaks_report.sql b/csierra/cs_ash_mem_peaks_report.sql new file mode 100644 index 0000000..ad93e43 --- /dev/null +++ b/csierra/cs_ash_mem_peaks_report.sql @@ -0,0 +1,71 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_ash_mem_peaks_report.sql +-- +-- Purpose: ASH Peaks Report from MEM +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/25 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_mem_peaks_report.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_mem_peaks_report'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '3'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO To report on Active Sessions over 1x the number of CPU Cores, then pass "1" (default) as Threshold value below +PRO +PRO 3. Threshold: [{1}|0-10] +DEF times_cpu_cores = '&3.'; +UNDEF 3; +COL times_cpu_cores NEW_V times_cpu_cores NOPRI; +SELECT CASE WHEN TO_NUMBER(REPLACE(UPPER('&×_cpu_cores.'), 'X')) BETWEEN 0 AND 10 THEN REPLACE(UPPER('&×_cpu_cores.'), 'X') ELSE '1' END AS times_cpu_cores FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO THRESHOLD : "&×_cpu_cores.x NUM_CPU_CORES" +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +-- DEF times_cpu_cores = '1'; +DEF include_hist = 'N'; +DEF include_mem = 'Y'; +PRO +PRO Sum of Active Sessions per sampled time (when greater than &×_cpu_cores.x CPU Cores) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON; +@@cs_internal/cs_active_sessions_peaks_internal_v5.sql +@@cs_internal/cs_active_sessions_peaks_internal_v6.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&×_cpu_cores." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_mem_sample_report.sql b/csierra/cs_ash_mem_sample_report.sql new file mode 100644 index 0000000..83f8d63 --- /dev/null +++ b/csierra/cs_ash_mem_sample_report.sql @@ -0,0 +1,125 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: am.sql | cs_ash_mem_sample_report.sql +-- +-- Purpose: ASH Samples from MEM +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/25 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter optional parameters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_mem_sample_report.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +SET PAGES 5000; +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_mem_sample_report'; +DEF cs_script_acronym = 'am.sql | '; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '3'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. Machine (opt): +DEF cs2_machine = '&3.'; +UNDEF 3; +-- +PRO +PRO 4. SQL_ID (opt): +DEF cs_sql_id = '&4.'; +UNDEF 4; +-- +PRO +PRO 5. SID,SERIAL (opt): +DEF cs_sid_serial = '&5.'; +UNDEF 5; +-- +PRO +PRO 6. Only LOB DEDUP TX 4 waiting sessions [{N}|Y]: +DEF cs_only_dedup = '&6.'; +UNDEF 6; +COL cs_only_dedup NEW_V cs_only_dedup NOPRI; +SELECT CASE WHEN SUBSTR(TRIM(UPPER('&&cs_only_dedup.')), 1, 1) IN ('N', 'Y') THEN SUBSTR(TRIM(UPPER('&&cs_only_dedup.')), 1, 1) ELSE 'N' END AS cs_only_dedup FROM DUAL +/ +-- +PRO +PRO 7. Include PL/SQL Library Entry Point [{N}|Y]: +DEF cs_pl_sql = '&7.'; +UNDEF 7; +COL cs_pl_sql NEW_V cs_pl_sql NOPRI; +COL cs_pl_sql_pri NEW_V cs_pl_sql_pri NOPRI; +SELECT CASE WHEN SUBSTR(TRIM(UPPER('&&cs_pl_sql.')), 1, 1) IN ('N', 'Y') THEN SUBSTR(TRIM(UPPER('&&cs_pl_sql.')), 1, 1) ELSE 'N' END AS cs_pl_sql, CASE SUBSTR(TRIM(UPPER('&&cs_pl_sql.')), 1, 1) WHEN 'Y' THEN 'PRI' ELSE 'NOPRI' END AS cs_pl_sql_pri FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_machine." "&&cs_sql_id." "&&cs_sid_serial." "&&cs_only_dedup." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO MACHINE : "&&cs2_machine." +PRO SQL_ID : "&&cs_sql_id." +PRO SID,SERIAL : "&&cs_sid_serial." +PRO ONLY_DEDUP : "&&cs_only_dedup." +PRO INCL_PL_SQL : "&&cs_pl_sql." +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +DEF times_cpu_cores = '1'; +DEF include_hist = 'N'; +DEF include_mem = 'Y'; +PRO +PRO Sum of Active Sessions per sampled time (spikes greater than &&cs_num_cpu_cores. CPU Cores) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON; +@@cs_internal/cs_active_sessions_peaks_internal_v5.sql +@@cs_internal/cs_active_sessions_peaks_internal_v6.sql +-- +DEF times_cpu_cores = '0'; +DEF include_hist = 'N'; +DEF include_mem = 'Y'; +PRO +PRO Sum of Active Sessions per sampled time +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON; +@@cs_internal/cs_active_sessions_peaks_internal_v5.sql +-- +DEF times_cpu_cores = '1'; +DEF include_hist = 'N'; +DEF include_mem = 'Y'; +-- @@cs_internal/cs_ash_block_chains.sql +-- +DEF ash_view = 'v$active_session_history'; +DEF ash_additional_predicate = ''; +-- DEF ash_view = 'dba_hist_active_sess_history'; +-- DEF ash_additional_predicate = ' AND h.dbid = &&cs_dbid. AND h.instance_number = &&cs_instance_number. AND h.snap_id BETWEEN &&cs_snap_id_from. AND &&cs_snap_id_to. '; +-- +@@cs_internal/cs_ash_sample_detail.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_machine." "&&cs_sql_id." "&&cs_sid_serial." "&&cs_only_dedup." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_snap_sample_report.sql b/csierra/cs_ash_snap_sample_report.sql new file mode 100644 index 0000000..146abb7 --- /dev/null +++ b/csierra/cs_ash_snap_sample_report.sql @@ -0,0 +1,116 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: ahs.sql | cs_ash_snap_sample_report.sql +-- +-- Purpose: ASH Samples from iod_active_session_history Snapshot +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/04 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter optional parameters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_ash_snap_sample_report.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +SET PAGES 5000; +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_ash_snap_sample_report'; +DEF cs_script_acronym = 'ahs.sql | '; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '24'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. Machine (opt): +DEF cs2_machine = '&3.'; +UNDEF 3; +-- +PRO +PRO 4. SQL_ID (opt): +DEF cs_sql_id = '&4.'; +UNDEF 4; +-- +PRO +PRO 5. SID,SERIAL (opt): +DEF cs_sid_serial = '&5.'; +UNDEF 5; +-- +PRO +PRO 6. Only LOB DEDUP TX 4 waiting sessions [{N}|Y]: +DEF cs_only_dedup = '&6.'; +UNDEF 6; +COL cs_only_dedup NEW_V cs_only_dedup NOPRI; +SELECT CASE WHEN SUBSTR(TRIM(UPPER('&&cs_only_dedup.')), 1, 1) IN ('N', 'Y') THEN SUBSTR(TRIM(UPPER('&&cs_only_dedup.')), 1, 1) ELSE 'N' END AS cs_only_dedup FROM DUAL +/ +-- +PRO +PRO 7. Include PL/SQL Library Entry Point [{N}|Y]: +DEF cs_pl_sql = '&7.'; +UNDEF 7; +COL cs_pl_sql NEW_V cs_pl_sql NOPRI; +COL cs_pl_sql_pri NEW_V cs_pl_sql_pri NOPRI; +SELECT CASE WHEN SUBSTR(TRIM(UPPER('&&cs_pl_sql.')), 1, 1) IN ('N', 'Y') THEN SUBSTR(TRIM(UPPER('&&cs_pl_sql.')), 1, 1) ELSE 'N' END AS cs_pl_sql, CASE SUBSTR(TRIM(UPPER('&&cs_pl_sql.')), 1, 1) WHEN 'Y' THEN 'PRI' ELSE 'NOPRI' END AS cs_pl_sql_pri FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_machine." "&&cs_sql_id." "&&cs_sid_serial." "&&cs_only_dedup." "&&cs_pl_sql." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO MACHINE : "&&cs2_machine." +PRO SQL_ID : "&&cs_sql_id." +PRO SID,SERIAL : "&&cs_sid_serial." +PRO ONLY_DEDUP : "&&cs_only_dedup." +PRO INCL_PL_SQL : "&&cs_pl_sql." +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +DEF ash_view = '&&cs_tools_schema..iod_active_session_history'; +DEF ash_additional_predicate = ''; +-- +DEF times_cpu_cores = '1'; +PRO +PRO Sum of Active Sessions per sampled time (spikes greater than &&cs_num_cpu_cores. CPU Cores) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON; +@@cs_internal/cs_active_sessions_peaks_internal_v5_s.sql +@@cs_internal/cs_active_sessions_peaks_internal_v6.sql +-- +DEF times_cpu_cores = '0'; +PRO +PRO Sum of Active Sessions per sampled time +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON; +@@cs_internal/cs_active_sessions_peaks_internal_v5_s.sql +-- +DEF times_cpu_cores = '1'; +-- @@cs_internal/cs_ash_block_chains_s.sql +@@cs_internal/cs_ash_sample_detail.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_machine." "&&cs_sql_id." "&&cs_sid_serial." "&&cs_only_dedup." "&&cs_pl_sql." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_ash_snapshot.sql b/csierra/cs_ash_snapshot.sql new file mode 100644 index 0000000..18f0790 --- /dev/null +++ b/csierra/cs_ash_snapshot.sql @@ -0,0 +1,4 @@ +REM Merges a snapshot of v$active_session_history into C##IOD.iod_active_session_history +select count(*) from c##iod.iod_active_session_history; +EXEC C##IOD.IOD_SESS.snap_ash(p_force => 'Y'); +select count(*) from c##iod.iod_active_session_history; \ No newline at end of file diff --git a/csierra/cs_average_active_sessions.sql b/csierra/cs_average_active_sessions.sql new file mode 100644 index 0000000..609aad7 --- /dev/null +++ b/csierra/cs_average_active_sessions.sql @@ -0,0 +1,852 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: aas.sql | cs_average_active_sessions.sql +-- +-- Purpose: Average Active Sessions (ASH Analytics on dbc_active_session) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/11/25 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_average_active_sessions.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_average_active_sessions'; +DEF cs_script_acronym = 'aas.sql | '; +-- +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL cs2_granularity_list NEW_V cs2_granularity_list NOPRI; +COL cs2_default_granularity NEW_V cs2_default_granularity NOPRI; +SELECT CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '[{1m}|5m|15m|1h|1d|m|h|d]' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '[{5m}|1m|15m|1h|1d|m|h|d]' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '[{15m}|1m|5m|1h|1d|m|h|d]' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '[{1h}|1m|5m|15m|1d|m|h|d]' -- < 720h (30d) (up to 720 samples) + ELSE '[{1d}|1m|5m|15m|1h|1d|m|h|d]' + END AS cs2_granularity_list, + CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '1m' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '5m' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '15m' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '1h' -- < 720h (30d) (up to 720 samples) + ELSE '1d' + END AS cs2_default_granularity + FROM DUAL +/ +PRO +PRO 3. Granularity: &&cs2_granularity_list. +DEF cs2_granularity = '&3.'; +UNDEF 3; +COL cs2_granularity NEW_V cs2_granularity NOPRI; +SELECT NVL(LOWER(TRIM('&&cs2_granularity.')), '&&cs2_default_granularity.') cs2_granularity FROM DUAL; +SELECT CASE + WHEN '&&cs2_granularity.' = 'm' THEN '1m' + WHEN '&&cs2_granularity.' = 'h' THEN '1h' + WHEN '&&cs2_granularity.' = 'd' THEN '1d' + WHEN '&&cs2_granularity.' IN ('1m', '5m', '15m', '1h', '1d') THEN '&&cs2_granularity.' + ELSE '&&cs2_default_granularity.' + END cs2_granularity + FROM DUAL +/ +-- +COL cs2_fmt NEW_V cs2_fmt NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1m' THEN 'MI' -- (1/24/60) 1 minute + WHEN '5m' THEN 'MI' -- (5/24/60) 5 minutes + WHEN '15m' THEN 'MI' -- (15/24/60) 15 minutes + WHEN '1h' THEN 'HH' -- (1/24) 1 hour + WHEN '1d' THEN 'DD' -- 1 day + ELSE 'XX' -- error + END cs2_fmt + FROM DUAL +/ +-- +COL cs2_plus_days NEW_V cs2_plus_days NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1m' THEN '(1/24/60)' -- (1/24/60) 1 minute + WHEN '5m' THEN '(5/24/60)' -- (5/24/60) 5 minutes + WHEN '15m' THEN '(15/24/60)' -- (15/24/60) 15 minutes + WHEN '1h' THEN '(1/24)' -- (1/24) 1 hour + WHEN '1d' THEN '1' -- 1 day + ELSE 'XX' -- error + END cs2_plus_days + FROM DUAL +/ +-- +PRO +PRO 4. Reporting Dimension: [{event}|wait_class|machine|sql_id|plan_hash_value|module|pdb_name|host_name] +DEF cs2_dimension = '&4.'; +UNDEF 4; +COL cs2_dimension NEW_V cs2_dimension NOPRI; +-- SELECT NVL(LOWER(TRIM('&&cs2_dimension.')), 'event') cs2_dimension FROM DUAL; +SELECT CASE WHEN LOWER(TRIM('&&cs2_dimension.')) IN ('event', 'wait_class', 'machine', 'sql_id', 'plan_hash_value', 'module', 'pdb_name', 'host_name') THEN LOWER(TRIM('&&cs2_dimension.')) ELSE 'event' END cs2_dimension FROM DUAL; +-- +COL use_oem_colors_series NEW_V use_oem_colors_series NOPRI; +SELECT CASE '&&cs2_dimension.' WHEN 'wait_class' THEN NULL ELSE '//' END AS use_oem_colors_series FROM DUAL; +-- +COL cs2_samples NEW_V cs2_samples NOPRI; +SELECT TO_CHAR(CEIL((TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') - TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.')) / &&cs2_plus_days.)) AS cs2_samples FROM DUAL +/ +-- +COL aas FOR 999,990.000 HEA 'Average Active|Sessions (AAS)'; +COL db_seconds FOR 999,999,990 HEA 'DB Seconds'; +COL session_state FOR A13 HEA 'Session|State'; +BREAK ON REPORT; +COMPUTE SUM OF aas db_seconds ON REPORT; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.session_state, + 10 * SUM(h.sum_samples) AS db_seconds + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + GROUP BY + h.session_state +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + session_state + FROM ash_dbc + GROUP BY + session_state + ORDER BY + 1 DESC +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 5. Session State (opt): +DEF cs2_session_state = '&5.'; +UNDEF 5; +DEF cs2_instruct_to_skip = '(opt)'; +COL cs2_instruct_to_skip NEW_V cs2_instruct_to_skip NOPRI; +SELECT '(hit "Return" to skip this patameter since Session State is "ON CPU")' AS cs2_instruct_to_skip FROM DUAL WHERE '&&cs2_session_state.' = 'ON CPU' +/ +-- +COL wait_class HEA 'Wait Class'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.session_state, + h.wait_class, + 10 * SUM(h.sum_samples) AS db_seconds + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + GROUP BY + h.session_state, + h.wait_class +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + wait_class, + session_state + FROM ash_dbc + GROUP BY + wait_class, + session_state + ORDER BY + 1 DESC +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 6. Wait Class &&cs2_instruct_to_skip.: +DEF cs2_wait_class = '&6.'; +UNDEF 6; +-- +COL cs2_group NEW_V cs2_group NOPRI; +SELECT CASE '&&cs2_dimension.' + WHEN 'wait_class' THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class END]' + WHEN 'event' THEN CASE WHEN '&&cs2_wait_class.' IS NULL THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END]' ELSE q'[h.event]' END + WHEN 'machine' THEN q'[h.machine]' + WHEN 'sql_id' THEN q'[h.sql_id]' + WHEN 'plan_hash_value' THEN q'[TO_CHAR(h.sql_plan_hash_value)]' + WHEN 'module' THEN q'[h.module]' + WHEN 'pdb_name' THEN q'[h.pdb_name]' + WHEN 'host_name' THEN q'[h.host_name]' + END AS cs2_group + FROM DUAL +/ +-- +COL event HEA 'Event'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.event, + h.wait_class, + h.session_state, + 10 * SUM(h.sum_samples) AS db_seconds + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + GROUP BY + h.event, + h.wait_class, + h.session_state +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + event, + wait_class, + session_state + FROM ash_dbc + GROUP BY + event, + wait_class, + session_state + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 7. Event &&cs2_instruct_to_skip.: +DEF cs2_event = '&7.'; +UNDEF 7; +-- +COL machine HEA 'Machine'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + 10 * SUM(h.sum_samples) AS db_seconds + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + GROUP BY + h.machine +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + machine + FROM ash_dbc + GROUP BY + machine + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 8. Machine (opt): +DEF cs2_machine = '&8.'; +UNDEF 8; +-- +PRO +PRO 9. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&9.'; +UNDEF 9; +-- +COL sql_text FOR A60 TRUNC; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sql_id, + 10 * SUM(h.sum_samples) AS db_seconds + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + GROUP BY + h.sql_id +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + sql_id, + (SELECT s.sql_text FROM sql_txt s WHERE s.sql_id = a.sql_id AND ROWNUM = 1) AS sql_text + FROM ash_dbc a + GROUP BY + sql_id + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 10. SQL_ID (opt): +DEF cs2_sql_id = '&10.'; +UNDEF 10; +-- +DEF spool_id_chart_footer_script = 'cs_ash_analytics_footer.sql'; +COL rn FOR 999; +COL dimension_group FOR A64 TRUNC; +DEF series_01 = ' '; +DEF series_02 = ' '; +DEF series_03 = ' '; +DEF series_04 = ' '; +DEF series_05 = ' '; +DEF series_06 = ' '; +DEF series_07 = ' '; +DEF series_08 = ' '; +DEF series_09 = ' '; +DEF series_10 = ' '; +DEF series_11 = ' '; +DEF series_12 = ' '; +DEF series_13 = ' '; +COL series_01 NEW_V series_01 FOR A64 TRUNC NOPRI; +COL series_02 NEW_V series_02 FOR A64 TRUNC NOPRI; +COL series_03 NEW_V series_03 FOR A64 TRUNC NOPRI; +COL series_04 NEW_V series_04 FOR A64 TRUNC NOPRI; +COL series_05 NEW_V series_05 FOR A64 TRUNC NOPRI; +COL series_06 NEW_V series_06 FOR A64 TRUNC NOPRI; +COL series_07 NEW_V series_07 FOR A64 TRUNC NOPRI; +COL series_08 NEW_V series_08 FOR A64 TRUNC NOPRI; +COL series_09 NEW_V series_09 FOR A64 TRUNC NOPRI; +COL series_10 NEW_V series_10 FOR A64 TRUNC NOPRI; +COL series_11 NEW_V series_11 FOR A64 TRUNC NOPRI; +COL series_12 NEW_V series_12 FOR A64 TRUNC NOPRI; +COL series_13 NEW_V series_13 FOR A64 TRUNC NOPRI; +DEF aas_01 = ' '; +DEF aas_02 = ' '; +DEF aas_03 = ' '; +DEF aas_04 = ' '; +DEF aas_05 = ' '; +DEF aas_06 = ' '; +DEF aas_07 = ' '; +DEF aas_08 = ' '; +DEF aas_09 = ' '; +DEF aas_10 = ' '; +DEF aas_11 = ' '; +DEF aas_12 = ' '; +DEF aas_13 = ' '; +COL aas_01 NEW_V aas_01 FOR A9 TRUNC NOPRI; +COL aas_02 NEW_V aas_02 FOR A9 TRUNC NOPRI; +COL aas_03 NEW_V aas_03 FOR A9 TRUNC NOPRI; +COL aas_04 NEW_V aas_04 FOR A9 TRUNC NOPRI; +COL aas_05 NEW_V aas_05 FOR A9 TRUNC NOPRI; +COL aas_06 NEW_V aas_06 FOR A9 TRUNC NOPRI; +COL aas_07 NEW_V aas_07 FOR A9 TRUNC NOPRI; +COL aas_08 NEW_V aas_08 FOR A9 TRUNC NOPRI; +COL aas_09 NEW_V aas_09 FOR A9 TRUNC NOPRI; +COL aas_10 NEW_V aas_10 FOR A9 TRUNC NOPRI; +COL aas_11 NEW_V aas_11 FOR A9 TRUNC NOPRI; +COL aas_12 NEW_V aas_12 FOR A9 TRUNC NOPRI; +COL aas_13 NEW_V aas_13 FOR A9 TRUNC NOPRI; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +-- +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + &&cs2_group. AS dimension_group, + 10 * SUM(h.sum_samples) AS db_seconds + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + GROUP BY + &&cs2_group. +), +ash_by_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + dimension_group, + ROW_NUMBER() OVER(ORDER BY SUM(db_seconds) DESC) AS rn + FROM ash_dbc a + GROUP BY + dimension_group +), +top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, -- up to 12 + aas, + db_seconds, + SUBSTR(CASE + WHEN TRIM(dimension_group) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' = 'sql_id' THEN dimension_group||' '||get_sql_text(dimension_group) + ELSE dimension_group + END, 1, 64) AS dimension_group + FROM ash_by_dim + WHERE rn < (SELECT MAX(rn) FROM wait_classes) -- 13 +), +max_top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ MAX(rn) AS max_rn FROM top +), +bottom AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + (1 + max_top.max_rn) AS bottom_rn, -- up to 13 + ROUND(SUM(a.db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(a.db_seconds) AS db_seconds, + '"all others"' AS dimension_group + FROM ash_by_dim a, max_top + WHERE a.rn >= max_top.max_rn + GROUP BY + max_top.max_rn +), +wait_classes2 AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + w.rn, + NVL(t.aas, 0) AS aas, + NVL(t.db_seconds, 0) AS db_seconds, + w.dimension_group + FROM wait_classes w, + top t + WHERE '&&cs2_dimension.' = 'wait_class' + AND t.dimension_group(+) = w.dimension_group +), +top_and_bottom AS ( +SELECT rn, aas, db_seconds, dimension_group + FROM top + WHERE '&&cs2_dimension.' <> 'wait_class' + UNION ALL +SELECT rn, aas, db_seconds, dimension_group + FROM wait_classes2 + WHERE '&&cs2_dimension.' = 'wait_class' + UNION ALL +SELECT bottom_rn AS rn, aas, db_seconds, dimension_group + FROM bottom + WHERE '&&cs2_dimension.' <> 'wait_class' +), +list AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, LPAD(TRIM(TO_CHAR(ROUND(aas, 3), '9,990.000')), 9) AS aas, db_seconds, dimension_group + FROM top_and_bottom +) +SELECT rn, aas, db_seconds, dimension_group, + COALESCE((SELECT dimension_group FROM list WHERE rn = 1), ' ') AS series_01, + COALESCE((SELECT dimension_group FROM list WHERE rn = 2), ' ') AS series_02, + COALESCE((SELECT dimension_group FROM list WHERE rn = 3), ' ') AS series_03, + COALESCE((SELECT dimension_group FROM list WHERE rn = 4), ' ') AS series_04, + COALESCE((SELECT dimension_group FROM list WHERE rn = 5), ' ') AS series_05, + COALESCE((SELECT dimension_group FROM list WHERE rn = 6), ' ') AS series_06, + COALESCE((SELECT dimension_group FROM list WHERE rn = 7), ' ') AS series_07, + COALESCE((SELECT dimension_group FROM list WHERE rn = 8), ' ') AS series_08, + COALESCE((SELECT dimension_group FROM list WHERE rn = 9), ' ') AS series_09, + COALESCE((SELECT dimension_group FROM list WHERE rn = 10), ' ') AS series_10, + COALESCE((SELECT dimension_group FROM list WHERE rn = 11), ' ') AS series_11, + COALESCE((SELECT dimension_group FROM list WHERE rn = 12), ' ') AS series_12, + COALESCE((SELECT dimension_group FROM list WHERE rn = 13), ' ') AS series_13, + (SELECT aas FROM list WHERE rn = 1) AS aas_01, + (SELECT aas FROM list WHERE rn = 2) AS aas_02, + (SELECT aas FROM list WHERE rn = 3) AS aas_03, + (SELECT aas FROM list WHERE rn = 4) AS aas_04, + (SELECT aas FROM list WHERE rn = 5) AS aas_05, + (SELECT aas FROM list WHERE rn = 6) AS aas_06, + (SELECT aas FROM list WHERE rn = 7) AS aas_07, + (SELECT aas FROM list WHERE rn = 8) AS aas_08, + (SELECT aas FROM list WHERE rn = 9) AS aas_09, + (SELECT aas FROM list WHERE rn = 10) AS aas_10, + (SELECT aas FROM list WHERE rn = 11) AS aas_11, + (SELECT aas FROM list WHERE rn = 12) AS aas_12, + (SELECT aas FROM list WHERE rn = 13) AS aas_13 + FROM list + ORDER BY + rn +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Average Active Sessions by "&&cs2_dimension." between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = 'Average Active Sessions (AAS)'; +DEF xaxis_title = ''; +-- +COL xaxis_title NEW_V xaxis_title NOPRI; +SELECT +CASE WHEN '&&cs2_session_state.' IS NOT NULL THEN 'State:"&&cs2_session_state." ' END|| +CASE WHEN '&&cs2_wait_class.' IS NOT NULL THEN 'Wait:"&&cs2_wait_class." ' END|| +CASE WHEN '&&cs2_event.' IS NOT NULL THEN 'Event:"%&&cs2_event.%" ' END|| +CASE WHEN '&&cs2_machine.' IS NOT NULL THEN 'Machine:"%&&cs2_machine.%" ' END|| +CASE WHEN '&&cs2_sql_text_piece.' IS NOT NULL THEN 'Text:"%&&cs2_sql_text_piece.%" ' END|| +CASE WHEN '&&cs2_sql_id.' IS NOT NULL THEN 'SQL_ID:"&&cs2_sql_id." ' END AS xaxis_title +FROM DUAL; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_granularity." "&&cs2_dimension." "&&cs2_session_state." "&&cs2_wait_class." "&&cs2_event." "&&cs2_machine." "&&cs2_sql_text_piece." "&&cs2_sql_id."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&series_01.', id:'01', type:'number'} +PRO ,{label:'&&series_02.', id:'02', type:'number'} +PRO ,{label:'&&series_03.', id:'03', type:'number'} +PRO ,{label:'&&series_04.', id:'04', type:'number'} +PRO ,{label:'&&series_05.', id:'05', type:'number'} +PRO ,{label:'&&series_06.', id:'06', type:'number'} +PRO ,{label:'&&series_07.', id:'07', type:'number'} +PRO ,{label:'&&series_08.', id:'08', type:'number'} +PRO ,{label:'&&series_09.', id:'09', type:'number'} +PRO ,{label:'&&series_10.', id:'10', type:'number'} +PRO ,{label:'&&series_11.', id:'11', type:'number'} +PRO ,{label:'&&series_12.', id:'12', type:'number'} +PRO ,{label:'&&series_13.', id:'13', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +FUNCTION ceil_timestamp (p_timestamp IN TIMESTAMP) +RETURN DATE +IS +BEGIN + IF '&&cs2_granularity.' = '5m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 5) * 5 / (24 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 15) * 15 / (24 * 60) + &&cs2_plus_days.; + ELSE -- 1m, 1h, 1d + RETURN TRUNC(CAST(p_timestamp AS DATE) + &&cs2_plus_days., '&&cs2_fmt.'); + END IF; +END ceil_timestamp; +/****************************************************************************************/ +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +/****************************************************************************************/ +sample AS ( +SELECT ceil_timestamp(TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + ((LEVEL - 1) * &&cs2_plus_days.)) AS time FROM DUAL CONNECT BY LEVEL <= TO_NUMBER('&&cs2_samples.') +), +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.end_time, + h.sum_samples, + h.max_samples, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' = 'sql_id' THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'module', 'pdb_name', 'host_name') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END AS dimension_group + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') +), +ash_dbc_denorm AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(h.end_time) AS time, + SUM(CASE WHEN h.dimension_group = q'[&&series_01.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_01, + SUM(CASE WHEN h.dimension_group = q'[&&series_02.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_02, + SUM(CASE WHEN h.dimension_group = q'[&&series_03.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_03, + SUM(CASE WHEN h.dimension_group = q'[&&series_04.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_04, + SUM(CASE WHEN h.dimension_group = q'[&&series_05.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_05, + SUM(CASE WHEN h.dimension_group = q'[&&series_06.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_06, + SUM(CASE WHEN h.dimension_group = q'[&&series_07.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_07, + SUM(CASE WHEN h.dimension_group = q'[&&series_08.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_08, + SUM(CASE WHEN h.dimension_group = q'[&&series_09.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_09, + SUM(CASE WHEN h.dimension_group = q'[&&series_10.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_10, + SUM(CASE WHEN h.dimension_group = q'[&&series_11.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_11, + SUM(CASE WHEN h.dimension_group = q'[&&series_12.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_12, + SUM(CASE WHEN h.dimension_group = q'[&&series_13.]' THEN 10 * sum_samples ELSE 0 END) AS db_secs_13 + FROM ash_dbc h + GROUP BY + ceil_timestamp(h.end_time) +), +ash_denorm AS ( +SELECT time, (time - LAG(time, 1, time) OVER (ORDER BY time)) * 24 * 3600 AS interval_secs, db_secs_01, db_secs_02, db_secs_03, db_secs_04, db_secs_05, db_secs_06, db_secs_07, db_secs_08, db_secs_09, db_secs_10, db_secs_11, db_secs_12, db_secs_13 FROM ash_dbc_denorm +), +/****************************************************************************************/ +my_query AS ( +SELECT s.time, a.interval_secs, a.db_secs_01, a.db_secs_02, a.db_secs_03, a.db_secs_04, a.db_secs_05, a.db_secs_06, a.db_secs_07, a.db_secs_08, a.db_secs_09, a.db_secs_10, a.db_secs_11, a.db_secs_12, a.db_secs_13, + ROW_NUMBER() OVER (ORDER BY s.time ASC NULLS LAST) AS rn_asc, + ROW_NUMBER() OVER (ORDER BY s.time DESC NULLS LAST) AS rn_desc + FROM ash_denorm a, + sample s + WHERE a.interval_secs > 0 + AND a.time(+) = s.time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.db_secs_01 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_02 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_03 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_04 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_05 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_06 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_07 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_08 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_09 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_10 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_11 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_12 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_13 / q.interval_secs, 3)|| + ']' + FROM my_query q + WHERE 1 = 1 + -- AND q.rn_asc > 1 AND q.rn_desc > 1 + AND q.db_secs_01 + q.db_secs_02 + q.db_secs_03 + q.db_secs_04 + q.db_secs_05 + q.db_secs_06 + q.db_secs_07 + q.db_secs_08 + q.db_secs_09 + q.db_secs_10 + q.db_secs_11 + q.db_secs_12 + q.db_secs_13 > 0 + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '&&use_oem_colors_series.'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_binds.sql b/csierra/cs_binds.sql new file mode 100644 index 0000000..cd6b461 --- /dev/null +++ b/csierra/cs_binds.sql @@ -0,0 +1,55 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_binds.sql +-- +-- Purpose: Binds for a given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_binds.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_binds'; +DEF cs_binds_days = '365'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_binds_xml.sql +@@cs_internal/cs_bind_capture_hist.sql +@@cs_internal/cs_bind_capture_mem.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_blocked_sessions_ash_awr_report.sql b/csierra/cs_blocked_sessions_ash_awr_report.sql new file mode 100644 index 0000000..a194254 --- /dev/null +++ b/csierra/cs_blocked_sessions_ash_awr_report.sql @@ -0,0 +1,458 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_blocked_sessions_ash_awr_report.sql +-- +-- Purpose: Top Session Blockers by multiple Dimensions as per ASH from AWR (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/04 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_blocked_sessions_ash_awr_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_blocked_sessions_ash_awr_report'; +DEF cs_hours_range_default = '24'; +DEF cs_top_n = '20'; +DEF cs_min_perc = '0.1'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +DEF times_cpu_cores = '1'; +DEF include_hist = 'Y'; +DEF include_mem = 'Y'; +@@cs_internal/cs_ash_block_chains.sql +-- +COL time FOR A19 HEA 'SAMPLE TIME'; +COL blocked FOR 999,990 HEA 'BLOCKED|SESSIONS|COUNT'; +COL percent FOR 999,990.000 HEA 'CONTRIBUTION|PERCENT %' +COL blocker FOR A12 HEA 'ROOT|BLOCKER|SID_SERIAL#'; +COL blocker_machine FOR A64 HEA 'ROOT BLOCKER MACHINE'; +COL blocker_module FOR A64 HEA 'ROOT BLOCKER MODULE'; +COL blocker_status FOR A80 HEA 'ROOT BLOCKER TIMED EVENT'; +COL blocker_sql_id FOR A13 HEA 'ROOT|BLOCKER|SQL_ID'; +COL blocker_sql_text FOR A80 TRUNC HEA 'ROOT BLOCKER SQL_TEXT'; +COL wait_class_event FOR A80 TRUNC HEA 'BLOCKEE(S) WAIT CLASS AND EVENT'; +-- +BREAK ON REPORT; +COMPUTE SUM OF percent ON REPORT; +-- +PRO +PRO Root Blocker contribution percent by SQL_ID (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 detail AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 b.time, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.machine blocker_machine, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN (CASE b.machine WHEN '&&cs_host_name.' THEN 'UNKNOWN' ELSE 'INACTIVE' END) ELSE ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ), +666666 summary AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 100 * SUM(blocked) / SUM(SUM(blocked)) OVER () percent, +666666 blocker_sql_id, +666666 blocker_sql_text +666666 FROM detail +666666 GROUP BY +666666 blocker_sql_id, +666666 blocker_sql_text +666666 ) +666666 SELECT * +666666 FROM summary +666666 WHERE percent > &&cs_min_perc. +666666 ORDER BY +666666 1 DESC +666666 FETCH FIRST &&cs_top_n. ROWS ONLY; +SET TERM ON; +/ +-- +PRO +PRO Root Blocker contribution percent by Timed Event (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 detail AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 b.time, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.machine blocker_machine, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN (CASE b.machine WHEN '&&cs_host_name.' THEN 'UNKNOWN' ELSE 'INACTIVE' END) ELSE ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ), +666666 summary AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 100 * SUM(blocked) / SUM(SUM(blocked)) OVER () percent, +666666 blocker_status +666666 FROM detail +666666 GROUP BY +666666 blocker_status +666666 ) +666666 SELECT * +666666 FROM summary +666666 WHERE percent > &&cs_min_perc. +666666 ORDER BY +666666 1 DESC +666666 FETCH FIRST &&cs_top_n. ROWS ONLY; +SET TERM ON; +/ +-- +PRO +PRO Root Blocker contribution percent by Module (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 detail AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 b.time, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.module blocker_module, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ), +666666 summary AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 100 * SUM(blocked) / SUM(SUM(blocked)) OVER () percent, +666666 blocker_module +666666 FROM detail +666666 GROUP BY +666666 blocker_module +666666 ) +666666 SELECT * +666666 FROM summary +666666 WHERE percent > &&cs_min_perc. +666666 ORDER BY +666666 1 DESC +666666 FETCH FIRST &&cs_top_n. ROWS ONLY; +SET TERM ON; +/ +-- +PRO +PRO Root Blocker contribution percent by Machine (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 detail AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 b.time, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.machine blocker_machine, +666666 b.module blocker_module, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN (CASE b.machine WHEN '&&cs_host_name.' THEN 'UNKNOWN' ELSE 'INACTIVE' END) ELSE ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ), +666666 summary AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 100 * SUM(blocked) / SUM(SUM(blocked)) OVER () percent, +666666 blocker_machine +666666 FROM detail +666666 GROUP BY +666666 blocker_machine +666666 ) +666666 SELECT * +666666 FROM summary +666666 WHERE percent > &&cs_min_perc. +666666 ORDER BY +666666 1 DESC +666666 FETCH FIRST &&cs_top_n. ROWS ONLY; +SET TERM ON; +/ +-- +PRO +PRO Root Blocker contribution percent by SID (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 detail AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 b.time, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.machine blocker_machine, +666666 b.module blocker_module, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN (CASE b.machine WHEN '&&cs_host_name.' THEN 'UNKNOWN' ELSE 'INACTIVE' END) ELSE ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ), +666666 summary AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 100 * SUM(blocked) / SUM(SUM(blocked)) OVER () percent, +666666 blocker +666666 FROM detail +666666 GROUP BY +666666 blocker +666666 ) +666666 SELECT * +666666 FROM summary +666666 WHERE percent > &&cs_min_perc. +666666 ORDER BY +666666 1 DESC +666666 FETCH FIRST &&cs_top_n. ROWS ONLY; +SET TERM ON; +/ +-- +PRO +PRO Root Blocker contribution percent by Timed Event and SQL_ID (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 detail AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 b.time, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.machine blocker_machine, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN (CASE b.machine WHEN '&&cs_host_name.' THEN 'UNKNOWN' ELSE 'INACTIVE' END) ELSE ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ), +666666 summary AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 100 * SUM(blocked) / SUM(SUM(blocked)) OVER () percent, +666666 blocker_status, +666666 blocker_sql_id, +666666 blocker_sql_text +666666 FROM detail +666666 GROUP BY +666666 blocker_status, +666666 blocker_sql_id, +666666 blocker_sql_text +666666 ) +666666 SELECT * +666666 FROM summary +666666 WHERE percent > &&cs_min_perc. +666666 ORDER BY +666666 1 DESC +666666 FETCH FIRST &&cs_top_n. ROWS ONLY; +SET TERM ON; +/ +-- +PRO +PRO Root Blocker contribution percent by Module, Timed Event and SQL_ID (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 detail AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 b.time, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.module blocker_module, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ), +666666 summary AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 100 * SUM(blocked) / SUM(SUM(blocked)) OVER () percent, +666666 blocker_module, +666666 blocker_status, +666666 blocker_sql_id, +666666 blocker_sql_text +666666 FROM detail +666666 GROUP BY +666666 blocker_module, +666666 blocker_status, +666666 blocker_sql_id, +666666 blocker_sql_text +666666 ) +666666 SELECT * +666666 FROM summary +666666 WHERE percent > &&cs_min_perc. +666666 ORDER BY +666666 1 DESC +666666 FETCH FIRST &&cs_top_n. ROWS ONLY; +SET TERM ON; +/ +-- +PRO +PRO Root Blocker contribution percent by Machine, Module, Timed Event and SQL_ID (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 detail AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 b.time, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.machine blocker_machine, +666666 b.module blocker_module, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN (CASE b.machine WHEN '&&cs_host_name.' THEN 'UNKNOWN' ELSE 'INACTIVE' END) ELSE ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ), +666666 summary AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 100 * SUM(blocked) / SUM(SUM(blocked)) OVER () percent, +666666 blocker_machine, +666666 blocker_module, +666666 blocker_status, +666666 blocker_sql_id, +666666 blocker_sql_text +666666 FROM detail +666666 GROUP BY +666666 blocker_machine, +666666 blocker_module, +666666 blocker_status, +666666 blocker_sql_id, +666666 blocker_sql_text +666666 ) +666666 SELECT * +666666 FROM summary +666666 WHERE percent > &&cs_min_perc. +666666 ORDER BY +666666 1 DESC +666666 FETCH FIRST &&cs_top_n. ROWS ONLY; +SET TERM ON; +/ +-- +PRO +PRO Root Blocker contribution percent by SID, Machine, Module, Timed Event and SQL_ID (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 detail AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 b.time, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.machine blocker_machine, +666666 b.module blocker_module, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN (CASE b.machine WHEN '&&cs_host_name.' THEN 'UNKNOWN' ELSE 'INACTIVE' END) ELSE ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ), +666666 summary AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 100 * SUM(blocked) / SUM(SUM(blocked)) OVER () percent, +666666 blocker, +666666 blocker_machine, +666666 blocker_module, +666666 blocker_status, +666666 blocker_sql_id, +666666 blocker_sql_text +666666 FROM detail +666666 GROUP BY +666666 blocker, +666666 blocker_machine, +666666 blocker_module, +666666 blocker_status, +666666 blocker_sql_id, +666666 blocker_sql_text +666666 ) +666666 SELECT * +666666 FROM summary +666666 WHERE percent > &&cs_min_perc. +666666 ORDER BY +666666 1 DESC +666666 FETCH FIRST &&cs_top_n. ROWS ONLY; +SET TERM ON; +/ +-- +PRO +PRO Sample of Blocked Sessions (between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 SELECT b.time, +666666 b.wait_class_event, +666666 b.sessions_blocked blocked, +666666 b.blocker_session_id||','||b.blocker_session_serial# blocker, +666666 b.machine blocker_machine, +666666 b.module blocker_module, +666666 --CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN b.blocker_status ELSE ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 CASE b.blocker_status WHEN 'INACTIVE or UNKNOWN' THEN (CASE b.machine WHEN '&&cs_host_name.' THEN 'UNKNOWN' ELSE 'INACTIVE' END) ELSE ('ACTIVE '||CASE b.blocker_session_state WHEN 'ON CPU' THEN b.blocker_session_state ELSE 'WAITING ON '||b.blocker_wait_class||' - '||b.blocker_event END) END blocker_status, +666666 b.blocker_sql_id, +666666 (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = b.blocker_sql_id AND ROWNUM = 1) blocker_sql_text +666666 FROM blockers_and_blockees b +666666 WHERE b.sessions_blocked > 0 +666666 ORDER BY +666666 b.time, +666666 b.blocker_session_id; +SET TERM ON; +/ +-- +PRO +PRO "INACTIVE" means: Database is waiting for Application Host to release LOCK, while "UNKNOWN" could be a BACKGROUND session on CDB$ROOT. +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +-- +@@cs_internal/cs_spool_tail.sql +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_blocked_sessions_by_machine_ash_awr_chart.sql b/csierra/cs_blocked_sessions_by_machine_ash_awr_chart.sql new file mode 100644 index 0000000..c4e119e --- /dev/null +++ b/csierra/cs_blocked_sessions_by_machine_ash_awr_chart.sql @@ -0,0 +1,206 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_blocked_sessions_by_machine_ash_awr_chart.sql +-- +-- Purpose: Top Session Blockers by Machine of Root Blocker as per ASH from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/02/10 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_blocked_sessions_by_machine_ash_awr_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_blocked_sessions_by_machine_ash_awr_chart'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. Root Blocker State: [{ANY}|ACTIVE|INACTIVE|ACTIVE ON CPU|ACTIVE WAITING|UNKNOWN] +DEF root_blocker_state = '&3.'; +UNDEF 3; +COL root_blocker_state NEW_V root_blocker_state NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&root_blocker_state.')) IN ('ANY', 'ACTIVE', 'INACTIVE', 'ACTIVE ON CPU', 'ACTIVE WAITING', 'UNKNOWN') THEN UPPER(TRIM('&&root_blocker_state.')) ELSE 'ANY' END AS root_blocker_state FROM DUAL +/ +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL machine_01 NEW_V machine_01 NOPRI; +COL machine_02 NEW_V machine_02 NOPRI; +COL machine_03 NEW_V machine_03 NOPRI; +COL machine_04 NEW_V machine_04 NOPRI; +COL machine_05 NEW_V machine_05 NOPRI; +COL machine_06 NEW_V machine_06 NOPRI; +COL machine_07 NEW_V machine_07 NOPRI; +COL machine_08 NEW_V machine_08 NOPRI; +COL machine_09 NEW_V machine_09 NOPRI; +COL machine_10 NEW_V machine_10 NOPRI; +COL machine_11 NEW_V machine_11 NOPRI; +COL machine_12 NEW_V machine_12 NOPRI; +-- +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 by_sessions_sum AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 machine, +666666 ROW_NUMBER() OVER (ORDER BY SUM(CASE '&&root_blocker_state.' +666666 WHEN 'ANY' THEN sessions_blocked +666666 WHEN 'ACTIVE' THEN active_on_cpu + active_waiting +666666 WHEN 'INACTIVE' THEN inactive +666666 WHEN 'ACTIVE ON CPU' THEN active_on_cpu +666666 WHEN 'ACTIVE WAITING' THEN active_waiting +666666 WHEN 'UNKNOWN' THEN unknown +666666 END +666666 ) DESC NULLS LAST) top_sum +666666 FROM blockers_and_blockees +666666 WHERE sessions_blocked > 0 +666666 --AND machine <> 'unknown' +666666 GROUP BY +666666 machine +666666 ) +666666 SELECT MAX(CASE top_sum WHEN 01 THEN machine END) machine_01, +666666 MAX(CASE top_sum WHEN 02 THEN machine END) machine_02, +666666 MAX(CASE top_sum WHEN 03 THEN machine END) machine_03, +666666 MAX(CASE top_sum WHEN 04 THEN machine END) machine_04, +666666 MAX(CASE top_sum WHEN 05 THEN machine END) machine_05, +666666 MAX(CASE top_sum WHEN 06 THEN machine END) machine_06, +666666 MAX(CASE top_sum WHEN 07 THEN machine END) machine_07, +666666 MAX(CASE top_sum WHEN 08 THEN machine END) machine_08, +666666 MAX(CASE top_sum WHEN 09 THEN machine END) machine_09, +666666 MAX(CASE top_sum WHEN 10 THEN machine END) machine_10, +666666 MAX(CASE top_sum WHEN 11 THEN machine END) machine_11, +666666 MAX(CASE top_sum WHEN 12 THEN machine END) machine_12 +666666 FROM by_sessions_sum +666666 WHERE top_sum BETWEEN 1 AND 12; +SET TERM ON; +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Sessions Blocked by Machine of Root Blocker between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = 'Root Blocker State: &&root_blocker_state.'; +DEF vaxis_title = 'Blocked Sessions Count'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = '
2) "INACTIVE" means: Database is waiting for Application Host to release LOCK.'; +DEF chart_foot_note_3 = "
"; +--DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&root_blocker_state."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&machine_01.', id:'01', type:'number'} +PRO ,{label:'&&machine_02.', id:'02', type:'number'} +PRO ,{label:'&&machine_03.', id:'03', type:'number'} +PRO ,{label:'&&machine_04.', id:'04', type:'number'} +PRO ,{label:'&&machine_05.', id:'05', type:'number'} +PRO ,{label:'&&machine_06.', id:'06', type:'number'} +PRO ,{label:'&&machine_07.', id:'07', type:'number'} +PRO ,{label:'&&machine_08.', id:'08', type:'number'} +PRO ,{label:'&&machine_09.', id:'09', type:'number'} +PRO ,{label:'&&machine_10.', id:'10', type:'number'} +PRO ,{label:'&&machine_11.', id:'11', type:'number'} +PRO ,{label:'&&machine_12.', id:'12', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +-- +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 by_sessions_sum AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 time, +666666 machine, +666666 SUM(CASE '&&root_blocker_state.' +666666 WHEN 'ANY' THEN sessions_blocked +666666 WHEN 'ACTIVE' THEN active_on_cpu + active_waiting +666666 WHEN 'INACTIVE' THEN inactive +666666 WHEN 'ACTIVE ON CPU' THEN active_on_cpu +666666 WHEN 'ACTIVE WAITING' THEN active_waiting +666666 WHEN 'UNKNOWN' THEN unknown +666666 END +666666 ) AS sessions_blocked +666666 FROM blockers_and_blockees +666666 WHERE sessions_blocked > 0 +666666 --AND machine <> 'unknown' +666666 GROUP BY +666666 time, +666666 machine +666666 ) +666666 SELECT ', [new Date('|| +666666 TO_CHAR(q.time, 'YYYY')|| /* year */ +666666 ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ +666666 ','||TO_CHAR(q.time, 'DD')|| /* day */ +666666 ','||TO_CHAR(q.time, 'HH24')|| /* hour */ +666666 ','||TO_CHAR(q.time, 'MI')|| /* minute */ +666666 ','||TO_CHAR(q.time, 'SS')|| /* second */ +666666 ')'|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_01.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_02.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_03.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_04.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_05.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_06.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_07.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_08.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_09.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_10.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_11.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.machine WHEN '&&machine_12.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ']' +666666 FROM by_sessions_sum q +666666 GROUP BY +666666 q.time +666666 ORDER BY +666666 q.time; +SET TERM ON; +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_blocked_sessions_by_module_ash_awr_chart.sql b/csierra/cs_blocked_sessions_by_module_ash_awr_chart.sql new file mode 100644 index 0000000..ad8547c --- /dev/null +++ b/csierra/cs_blocked_sessions_by_module_ash_awr_chart.sql @@ -0,0 +1,206 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_blocked_sessions_by_module_ash_awr_chart.sql +-- +-- Purpose: Top Session Blockers by Module of Root Blocker as per ASH from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/02/10 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_blocked_sessions_by_module_ash_awr_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_blocked_sessions_by_module_ash_awr_chart'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. Root Blocker State: [{ANY}|ACTIVE|INACTIVE|ACTIVE ON CPU|ACTIVE WAITING|UNKNOWN] +DEF root_blocker_state = '&3.'; +UNDEF 3; +COL root_blocker_state NEW_V root_blocker_state NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&root_blocker_state.')) IN ('ANY', 'ACTIVE', 'INACTIVE', 'ACTIVE ON CPU', 'ACTIVE WAITING', 'UNKNOWN') THEN UPPER(TRIM('&&root_blocker_state.')) ELSE 'ANY' END AS root_blocker_state FROM DUAL +/ +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL module_01 NEW_V module_01 NOPRI; +COL module_02 NEW_V module_02 NOPRI; +COL module_03 NEW_V module_03 NOPRI; +COL module_04 NEW_V module_04 NOPRI; +COL module_05 NEW_V module_05 NOPRI; +COL module_06 NEW_V module_06 NOPRI; +COL module_07 NEW_V module_07 NOPRI; +COL module_08 NEW_V module_08 NOPRI; +COL module_09 NEW_V module_09 NOPRI; +COL module_10 NEW_V module_10 NOPRI; +COL module_11 NEW_V module_11 NOPRI; +COL module_12 NEW_V module_12 NOPRI; +-- +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 by_sessions_sum AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 module, +666666 ROW_NUMBER() OVER (ORDER BY SUM(CASE '&&root_blocker_state.' +666666 WHEN 'ANY' THEN sessions_blocked +666666 WHEN 'ACTIVE' THEN active_on_cpu + active_waiting +666666 WHEN 'INACTIVE' THEN inactive +666666 WHEN 'ACTIVE ON CPU' THEN active_on_cpu +666666 WHEN 'ACTIVE WAITING' THEN active_waiting +666666 WHEN 'UNKNOWN' THEN unknown +666666 END +666666 ) DESC NULLS LAST) top_sum +666666 FROM blockers_and_blockees +666666 WHERE sessions_blocked > 0 +666666 --AND module <> 'unknown' +666666 GROUP BY +666666 module +666666 ) +666666 SELECT MAX(CASE top_sum WHEN 01 THEN module END) module_01, +666666 MAX(CASE top_sum WHEN 02 THEN module END) module_02, +666666 MAX(CASE top_sum WHEN 03 THEN module END) module_03, +666666 MAX(CASE top_sum WHEN 04 THEN module END) module_04, +666666 MAX(CASE top_sum WHEN 05 THEN module END) module_05, +666666 MAX(CASE top_sum WHEN 06 THEN module END) module_06, +666666 MAX(CASE top_sum WHEN 07 THEN module END) module_07, +666666 MAX(CASE top_sum WHEN 08 THEN module END) module_08, +666666 MAX(CASE top_sum WHEN 09 THEN module END) module_09, +666666 MAX(CASE top_sum WHEN 10 THEN module END) module_10, +666666 MAX(CASE top_sum WHEN 11 THEN module END) module_11, +666666 MAX(CASE top_sum WHEN 12 THEN module END) module_12 +666666 FROM by_sessions_sum +666666 WHERE top_sum BETWEEN 1 AND 12; +SET TERM ON; +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Sessions Blocked by Module of Root Blocker between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = 'Root Blocker State: &&root_blocker_state.'; +DEF vaxis_title = 'Blocked Sessions Count'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = '
2) "INACTIVE" means: Database is waiting for Application Host to release LOCK.'; +DEF chart_foot_note_3 = "
"; +--DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&root_blocker_state."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&module_01.', id:'01', type:'number'} +PRO ,{label:'&&module_02.', id:'02', type:'number'} +PRO ,{label:'&&module_03.', id:'03', type:'number'} +PRO ,{label:'&&module_04.', id:'04', type:'number'} +PRO ,{label:'&&module_05.', id:'05', type:'number'} +PRO ,{label:'&&module_06.', id:'06', type:'number'} +PRO ,{label:'&&module_07.', id:'07', type:'number'} +PRO ,{label:'&&module_08.', id:'08', type:'number'} +PRO ,{label:'&&module_09.', id:'09', type:'number'} +PRO ,{label:'&&module_10.', id:'10', type:'number'} +PRO ,{label:'&&module_11.', id:'11', type:'number'} +PRO ,{label:'&&module_12.', id:'12', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +-- +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 by_sessions_sum AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 time, +666666 module, +666666 SUM(CASE '&&root_blocker_state.' +666666 WHEN 'ANY' THEN sessions_blocked +666666 WHEN 'ACTIVE' THEN active_on_cpu + active_waiting +666666 WHEN 'INACTIVE' THEN inactive +666666 WHEN 'ACTIVE ON CPU' THEN active_on_cpu +666666 WHEN 'ACTIVE WAITING' THEN active_waiting +666666 WHEN 'UNKNOWN' THEN unknown +666666 END +666666 ) AS sessions_blocked +666666 FROM blockers_and_blockees +666666 WHERE sessions_blocked > 0 +666666 --AND module <> 'unknown' +666666 GROUP BY +666666 time, +666666 module +666666 ) +666666 SELECT ', [new Date('|| +666666 TO_CHAR(q.time, 'YYYY')|| /* year */ +666666 ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ +666666 ','||TO_CHAR(q.time, 'DD')|| /* day */ +666666 ','||TO_CHAR(q.time, 'HH24')|| /* hour */ +666666 ','||TO_CHAR(q.time, 'MI')|| /* minute */ +666666 ','||TO_CHAR(q.time, 'SS')|| /* second */ +666666 ')'|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_01.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_02.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_03.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_04.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_05.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_06.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_07.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_08.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_09.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_10.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_11.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.module WHEN '&&module_12.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ']' +666666 FROM by_sessions_sum q +666666 GROUP BY +666666 q.time +666666 ORDER BY +666666 q.time; +SET TERM ON; +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_blocked_sessions_by_sid_ash_awr_chart.sql b/csierra/cs_blocked_sessions_by_sid_ash_awr_chart.sql new file mode 100644 index 0000000..ea4cb41 --- /dev/null +++ b/csierra/cs_blocked_sessions_by_sid_ash_awr_chart.sql @@ -0,0 +1,204 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_blocked_sessions_by_sid_ash_awr_chart.sql +-- +-- Purpose: Top Session Blockers by SID of Root Blocker as per ASH from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/02/10 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_blocked_sessions_by_sid_ash_awr_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_blocked_sessions_by_sid_ash_awr_chart'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. Root Blocker State: [{ANY}|ACTIVE|INACTIVE|ACTIVE ON CPU|ACTIVE WAITING|UNKNOWN] +DEF root_blocker_state = '&3.'; +UNDEF 3; +COL root_blocker_state NEW_V root_blocker_state NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&root_blocker_state.')) IN ('ANY', 'ACTIVE', 'INACTIVE', 'ACTIVE ON CPU', 'ACTIVE WAITING', 'UNKNOWN') THEN UPPER(TRIM('&&root_blocker_state.')) ELSE 'ANY' END AS root_blocker_state FROM DUAL +/ +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL sid_serial_01 NEW_V sid_serial_01 NOPRI; +COL sid_serial_02 NEW_V sid_serial_02 NOPRI; +COL sid_serial_03 NEW_V sid_serial_03 NOPRI; +COL sid_serial_04 NEW_V sid_serial_04 NOPRI; +COL sid_serial_05 NEW_V sid_serial_05 NOPRI; +COL sid_serial_06 NEW_V sid_serial_06 NOPRI; +COL sid_serial_07 NEW_V sid_serial_07 NOPRI; +COL sid_serial_08 NEW_V sid_serial_08 NOPRI; +COL sid_serial_09 NEW_V sid_serial_09 NOPRI; +COL sid_serial_10 NEW_V sid_serial_10 NOPRI; +COL sid_serial_11 NEW_V sid_serial_11 NOPRI; +COL sid_serial_12 NEW_V sid_serial_12 NOPRI; +-- +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 by_sessions_sum AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 blocker_session_id, blocker_session_serial#, +666666 ROW_NUMBER() OVER (ORDER BY SUM(CASE '&&root_blocker_state.' +666666 WHEN 'ANY' THEN sessions_blocked +666666 WHEN 'ACTIVE' THEN active_on_cpu + active_waiting +666666 WHEN 'INACTIVE' THEN inactive +666666 WHEN 'ACTIVE ON CPU' THEN active_on_cpu +666666 WHEN 'ACTIVE WAITING' THEN active_waiting +666666 WHEN 'UNKNOWN' THEN unknown +666666 END +666666 ) DESC NULLS LAST) top_sum +666666 FROM blockers_and_blockees +666666 WHERE sessions_blocked > 0 +666666 GROUP BY +666666 blocker_session_id, blocker_session_serial# +666666 ) +666666 SELECT MAX(CASE top_sum WHEN 01 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_01, +666666 MAX(CASE top_sum WHEN 02 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_02, +666666 MAX(CASE top_sum WHEN 03 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_03, +666666 MAX(CASE top_sum WHEN 04 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_04, +666666 MAX(CASE top_sum WHEN 05 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_05, +666666 MAX(CASE top_sum WHEN 06 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_06, +666666 MAX(CASE top_sum WHEN 07 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_07, +666666 MAX(CASE top_sum WHEN 08 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_08, +666666 MAX(CASE top_sum WHEN 09 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_09, +666666 MAX(CASE top_sum WHEN 10 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_10, +666666 MAX(CASE top_sum WHEN 11 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_11, +666666 MAX(CASE top_sum WHEN 12 THEN blocker_session_id||','||blocker_session_serial# END) sid_serial_12 +666666 FROM by_sessions_sum +666666 WHERE top_sum BETWEEN 1 AND 12; +SET TERM ON; +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Sessions Blocked by SID of Root Blocker between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = 'Root Blocker State: &&root_blocker_state.'; +DEF vaxis_title = 'Blocked Sessions Count'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = '
2) "INACTIVE" means: Database is waiting for Application Host to release LOCK, while "UNKNOWN" could be a BACKGROUND session on CDB$ROOT.'; +DEF chart_foot_note_3 = "
"; +--DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&root_blocker_state."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&sid_serial_01.', id:'01', type:'number'} +PRO ,{label:'&&sid_serial_02.', id:'02', type:'number'} +PRO ,{label:'&&sid_serial_03.', id:'03', type:'number'} +PRO ,{label:'&&sid_serial_04.', id:'04', type:'number'} +PRO ,{label:'&&sid_serial_05.', id:'05', type:'number'} +PRO ,{label:'&&sid_serial_06.', id:'06', type:'number'} +PRO ,{label:'&&sid_serial_07.', id:'07', type:'number'} +PRO ,{label:'&&sid_serial_08.', id:'08', type:'number'} +PRO ,{label:'&&sid_serial_09.', id:'09', type:'number'} +PRO ,{label:'&&sid_serial_10.', id:'10', type:'number'} +PRO ,{label:'&&sid_serial_11.', id:'11', type:'number'} +PRO ,{label:'&&sid_serial_12.', id:'12', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +-- +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 , +666666 by_sessions_sum AS ( +666666 SELECT /*+ MATERIALIZE NO_MERGE */ +666666 time, +666666 blocker_session_id||','||blocker_session_serial# AS sid_serial, +666666 SUM(CASE '&&root_blocker_state.' +666666 WHEN 'ANY' THEN sessions_blocked +666666 WHEN 'ACTIVE' THEN active_on_cpu + active_waiting +666666 WHEN 'INACTIVE' THEN inactive +666666 WHEN 'ACTIVE ON CPU' THEN active_on_cpu +666666 WHEN 'ACTIVE WAITING' THEN active_waiting +666666 WHEN 'UNKNOWN' THEN unknown +666666 END +666666 ) AS sessions_blocked +666666 FROM blockers_and_blockees +666666 WHERE sessions_blocked > 0 +666666 GROUP BY +666666 time, +666666 blocker_session_id||','||blocker_session_serial# +666666 ) +666666 SELECT ', [new Date('|| +666666 TO_CHAR(q.time, 'YYYY')|| /* year */ +666666 ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ +666666 ','||TO_CHAR(q.time, 'DD')|| /* day */ +666666 ','||TO_CHAR(q.time, 'HH24')|| /* hour */ +666666 ','||TO_CHAR(q.time, 'MI')|| /* minute */ +666666 ','||TO_CHAR(q.time, 'SS')|| /* second */ +666666 ')'|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_01.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_02.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_03.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_04.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_05.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_06.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_07.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_08.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_09.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_10.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_11.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ','||num_format(SUM(CASE q.sid_serial WHEN '&&sid_serial_12.' THEN q.sessions_blocked ELSE 0 END))|| +666666 ']' +666666 FROM by_sessions_sum q +666666 GROUP BY +666666 q.time +666666 ORDER BY +666666 q.time; +SET TERM ON; +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_blocked_sessions_by_state_ash_awr_chart.sql b/csierra/cs_blocked_sessions_by_state_ash_awr_chart.sql new file mode 100644 index 0000000..7eee227 --- /dev/null +++ b/csierra/cs_blocked_sessions_by_state_ash_awr_chart.sql @@ -0,0 +1,111 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_blocked_sessions_by_state_ash_awr_chart.sql +-- +-- Purpose: Top Session Blockers by State of Root Blocker as per ASH from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/01/17 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_blocked_sessions_by_state_ash_awr_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_blocked_sessions_by_state_ash_awr_chart'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Blocked Sessions by State of Root Blocker between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = ''; +DEF vaxis_title = 'Blocked Sessions Count'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = '
2) "INACTIVE" means: Database is waiting for Application Host to release LOCK, while "UNKNOWN" could be a BACKGROUND session on CDB$ROOT.'; +DEF chart_foot_note_3 = "
"; +--DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'ACTIVE ON CPU', id:'1', type:'number'} +PRO ,{label:'ACTIVE WAITING', id:'2', type:'number'} +PRO ,{label:'INACTIVE', id:'3', type:'number'} +PRO ,{label:'UNKNOWN', id:'4', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +-- +SET TERM OFF; +GET cs_internal/cs_blocked_sessions_ash_awr_internal.sql NOLIST +. +666666 SELECT ', [new Date('|| +666666 TO_CHAR(q.time, 'YYYY')|| /* year */ +666666 ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ +666666 ','||TO_CHAR(q.time, 'DD')|| /* day */ +666666 ','||TO_CHAR(q.time, 'HH24')|| /* hour */ +666666 ','||TO_CHAR(q.time, 'MI')|| /* minute */ +666666 ','||TO_CHAR(q.time, 'SS')|| /* second */ +666666 ')'|| +666666 ','||num_format(SUM(q.active_on_cpu))|| -- ACTIVE ON CPU +666666 ','||num_format(SUM(q.active_waiting))|| -- ACTIVE WAITING +666666 ','||num_format(SUM(q.inactive))|| -- INACTIVE +666666 ','||num_format(SUM(q.unknown))|| -- UNKNOWN +666666 ']' +666666 FROM blockers_and_blockees q +666666 WHERE q.sessions_blocked > 0 +666666 GROUP BY +666666 q.time +666666 ORDER BY +666666 q.time; +SET TERM ON; +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_blocked_sessions_report.sql b/csierra/cs_blocked_sessions_report.sql new file mode 100644 index 0000000..4b34eb9 --- /dev/null +++ b/csierra/cs_blocked_sessions_report.sql @@ -0,0 +1,232 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: bs.sql | cs_blocked_sessions_report.sql +-- +-- Purpose: Blocked Sessions Report +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/25 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter optional parameters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_blocked_sessions_report.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +SET PAGES 5000; +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_blocked_sessions_report'; +DEF cs_script_acronym = 'bs.sql | '; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '24'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL snap_time NEW_V snap_time; +@@cs_internal/&&cs_set_container_to_cdb_root. +SELECT snap_time, + COUNT(*) AS sessions, + SUM(CASE WHEN blocking_session_status = 'VALID' OR final_blocking_session_status = 'VALID' THEN 1 ELSE 0 END) AS blockees, + SUM(CASE WHEN blocking_session_status = 'VALID' OR final_blocking_session_status = 'VALID' THEN 0 ELSE 1 END) AS final_blockers + FROM &&cs_tools_schema..iod_blocked_session + WHERE snap_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND snap_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + GROUP BY + snap_time + ORDER BY + snap_time +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 3. Snap Time: +DEF cs_snap_time = '&3.'; +UNDEF 3; +SELECT NVL('&&cs_snap_time.', '&&snap_time.') AS snap_time FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&snap_time." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO SNAP_TIME : "&&snap_time." +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL sql_text FOR A70 HEA 'SQL Text' TRUNC; +COL procedure_name FOR A70 HEA 'PL/SQL Library Entry Point' TRUNC; +COL module_action_program FOR A70 HEA 'Module Action Program' TRUNC; +COL sample_date_time FOR A23 HEA 'Sample Date and Time'; +COL samples FOR 9999,999 HEA 'Active|Sessions'; +COL on_cpu_or_wait_class FOR A14 HEA 'ON CPU or|Wait Class'; +COL on_cpu_or_wait_event FOR A50 HEA 'ON CPU or Timed Event'; +COL sid FOR A10 HEA 'Session'; +COL machine FOR A60 HEA 'Machine or Application Server'; +COL con_id FOR 999999; +COL plans FOR 99999 HEA 'Plans'; +COL sessions FOR 9999,999 HEA 'Sessions|this SQL'; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +COL sql_id FOR A13 HEA 'SQL_ID'; +COL blocking_session_status FOR A11 HEA 'Blocker|Session|Status'; +COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL sql_plan_line_id FOR 9999 HEA 'Plan|Line'; +COL sql_child_number FOR 999999 HEA 'Child|Number'; +COL sql_exec_id FOR 99999999 HEA 'Exec ID'; +COL xid FOR A16 HEA 'Transaction ID'; +COL current_obj# FOR 9999999999 HEA 'Current|Obj#'; +COL current_file# FOR 9999999999 HEA 'Current|File#'; +COL current_block# FOR 9999999999 HEA 'Current|Block#'; +COL current_row# FOR 9999999999 HEA 'Current|Row#'; +COL in_connection_mgmt FOR A6 HEA 'In|Connec|Mgmt'; +COL in_parse FOR A6 HEA 'In|Parse'; +COL in_hard_parse FOR A6 HEA 'In|Hard|Parse'; +COL in_sql_execution FOR A6 HEA 'In|SQL|Exec'; +COL in_plsql_execution FOR A6 HEA 'In|PLSQL|Exec'; +COL in_plsql_rpc FOR A6 HEA 'In|PLSQL|RPC'; +COL in_plsql_compilation FOR A6 HEA 'In|PLSQL|Compil'; +COL in_java_execution FOR A6 HEA 'In|Java|Exec'; +COL in_bind FOR A6 HEA 'In|Bind'; +COL in_cursor_close FOR A6 HEA 'In|Cursor|Close'; +COL in_sequence_load FOR A6 HEA 'In|Seq|Load'; +COL top_level_sql_id FOR A13 HEA 'Top Level|SQL_ID'; +COL blocking_session FOR A10 HEA 'Blocker|Session'; +COL blocking2_session FOR A10 HEA 'Blocker(2)|Session'; +COL blocking3_session FOR A10 HEA 'Blocker(3)|Session'; +COL blocking4_session FOR A10 HEA 'Blocker(4)|Session'; +COL blocking5_session FOR A10 HEA 'Blocker(5)|Session'; +COL blocking_machine FOR A60 HEA 'Machine or Application Server (blocker)'; +COL deadlock FOR A4 HEA 'Dead|Lock'; +COL lock_type FOR A4 HEA 'Lock'; +COL lock_mode FOR A4 HEA 'Mode'; +COL p1_p2_p3 FOR A100 HEA 'P1, P2, P3'; +COL current_object_name FOR A40 HEA 'Current|Object Name (Object Type)' TRUNC; +COL secs_waited FOR 990.000 HEA 'Secs|Waited'; +COL spid FOR A6; +COL pname FOR A5; +-- +BREAK ON sample_date_time SKIP PAGE ON machine SKIP 1; +-- +PRO +PRO +PRO Blockee(s) and Blocker(s) Sessions as of &&snap_time. (&&cs_tools_schema..iod_blocked_session) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +sqlstats AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT s.sql_id, s.sql_text FROM v$sqlstats s WHERE ROWNUM >= 1 +), +procedures AS ( +SELECT DISTINCT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ p.con_id, p.object_id, p.subprogram_id, p.owner, p.object_name, p.procedure_name FROM cdb_procedures p WHERE ROWNUM >= 1 +), +snapped_sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ h.*, c.name AS pdb_name + FROM &&cs_tools_schema..iod_blocked_session h, v$containers c + WHERE 1 = 1 + AND (TO_NUMBER('&&cs_con_id.') IN (0, 1, h.con_id) OR h.con_id IN (0, 1)) + AND h.snap_time >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.snap_time < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.snap_time = TO_DATE('&&snap_time.', '&&cs_datetime_full_format.') + AND c.con_id(+) = h.con_id + AND ROWNUM >= 1 +), +sess AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sid, + MAX(machine) machine + FROM snapped_sessions + WHERE ROWNUM >= 1 + GROUP BY + sid +) +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS ORDERED */ + TO_CHAR(h.snap_time, '&&cs_datetime_full_format.') AS sample_date_time, + h.machine, + h.con_id, + h.pdb_name, + 's:'||h.sid AS sid, + h.blocking_session_status, + CASE WHEN h.sid IN (b.blocking_session, b2.blocking_session) THEN 'DL?' END deadlock, + CASE WHEN h.blocking_session IS NOT NULL THEN 'b:'||h.blocking_session END blocking_session, + CASE WHEN b.blocking_session IS NOT NULL THEN 'b2:'||b.blocking_session END blocking2_session, + CASE WHEN b2.blocking_session IS NOT NULL THEN 'b3:'||b2.blocking_session END blocking3_session, + CASE WHEN b3.blocking_session IS NOT NULL THEN 'b4:'||b3.blocking_session END blocking4_session, + CASE WHEN b4.blocking_session IS NOT NULL THEN 'b5:'||b4.blocking_session END blocking5_session, + CASE + WHEN b4.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.sid = b4.blocking_session) + WHEN b3.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.sid = b3.blocking_session) + WHEN b2.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.sid = b2.blocking_session) + WHEN b.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.sid = b.blocking_session) + WHEN h.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.sid = h.blocking_session) + END blocking_machine, + h.sql_id, + h.sql_child_number, + h.sql_exec_id, + h.taddr AS xid, + h.wait_class||' - '||h.event on_cpu_or_wait_event, + st.sql_text, + pr.owner|| + CASE WHEN pr.object_name IS NOT NULL THEN '.'||pr.object_name END|| + CASE WHEN pr.procedure_name IS NOT NULL THEN '.'||pr.procedure_name END + AS procedure_name, + CASE WHEN TRIM(h.module) IS NOT NULL THEN 'm:'||TRIM(h.module)||' ' END|| + CASE WHEN TRIM(h.action) IS NOT NULL THEN 'a:'||TRIM(h.action)||' ' END|| + CASE WHEN TRIM(h.program) IS NOT NULL THEN 'p:'||TRIM(h.program) END + AS module_action_program, + h.row_wait_obj# current_obj#, + h.row_wait_file# current_file#, + h.row_wait_block# current_block#, + h.row_wait_row# current_row#, + CASE WHEN h.event LIKE 'enq:%' AND h.p1text LIKE 'name|mode%' AND h.p1 > 0 THEN CHR(BITAND(h.p1,-16777216)/16777215)||CHR(BITAND(h.p1, 16711680)/65535) END AS lock_type, + CASE WHEN h.event LIKE 'enq:%' AND h.p1text LIKE 'name|mode%' AND h.p1 > 0 THEN TO_CHAR(BITAND(h.p1, 65535)) END AS lock_mode, + NVL2(TRIM(h.p1text), h.p1text||':'||h.p1, NULL)||NVL2(TRIM(h.p2text), ', '||h.p2text||':'||h.p2, NULL)||NVL2(TRIM(h.p3text), ', '||h.p3text||':'||h.p3, NULL) p1_p2_p3 + FROM snapped_sessions h, + snapped_sessions b, + snapped_sessions b2, + snapped_sessions b3, + snapped_sessions b4, + sqlstats st, + procedures pr + WHERE b.sid(+) = h.blocking_session + AND b2.sid(+) = b.blocking_session + AND b3.sid(+) = b2.blocking_session + AND b4.sid(+) = b3.blocking_session + AND st.sql_id(+) = h.sql_id + AND pr.con_id(+) = h.con_id + AND pr.object_id(+) = h.plsql_entry_object_id + AND pr.subprogram_id(+) = h.plsql_entry_subprogram_id + ORDER BY + h.snap_time, + CASE WHEN h.machine LIKE '%iod-%' THEN 1 ELSE 2 END, + h.machine, + h.con_id, + h.sid, + h.serial#, + h.sql_id +/ +-- +PRO +PRO Note: for furher details on a session, execute at CDB: SELECT * FROM &&cs_tools_schema..iod_blocked_session WHERE snap_time = TO_DATE('&&snap_time.', '&&cs_datetime_full_format.') AND sid = &&double_ampersand.sid.; followed by @pr.sql +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&snap_time." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_burn_cpu.sql b/csierra/cs_burn_cpu.sql new file mode 100644 index 0000000..4fbef57 --- /dev/null +++ b/csierra/cs_burn_cpu.sql @@ -0,0 +1,96 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_burn_cpu.sql +-- +-- Purpose: Burn CPU in multiple cores/threads for some time +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter number of CPUs to burn and duration in seconds +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_burn_cpu.sql 36 60 +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +PRO +PRO ************** +PRO *** +PRO *** Be sure job_queue_processes is set to a large number during the use of this script +PRO *** +PRO ************** +PRO +PRO CPUs to burn: [{2}|1-100] +DEF cpus_to_burn = '&1.'; +UNDEF 1; +COL cpus_to_burn NEW_V cpus_to_burn NOPRI; +SELECT CASE WHEN TO_NUMBER('&&cpus_to_burn.') BETWEEN 1 AND 100 THEN '&&cpus_to_burn.' WHEN TO_NUMBER('&&cpus_to_burn.') > 100 THEN '100' ELSE '2' END AS cpus_to_burn FROM DUAL; +PRO +PRO Seconds: [{60}|1-3600] +DEF seconds = '&2.'; +UNDEF 2; +COL seconds NEW_V seconds NOPRI; +SELECT CASE WHEN TO_NUMBER('&&seconds.') BETWEEN 1 AND 3600 THEN '&&seconds.' WHEN TO_NUMBER('&&seconds.') > 3600 THEN '3600' ELSE '60' END AS seconds FROM DUAL; +-- +BEGIN + FOR i IN (SELECT job_name + FROM dba_scheduler_jobs + WHERE job_name LIKE 'CS_BURN_CPU%' + AND state = 'RUNNING') + LOOP + DBMS_SCHEDULER.stop_job(i.job_name); + END LOOP; + -- + FOR i IN (SELECT job_name + FROM dba_scheduler_jobs + WHERE job_name LIKE 'CS_BURN_CPU%' + AND state = 'SCHEDULED') + LOOP + DBMS_SCHEDULER.drop_job(i.job_name); + END LOOP; +END; +/ +-- +DECLARE +w CLOB := q'[ +DECLARE -- job_instance + d DATE := SYSDATE + (&&seconds./24/3600); + x NUMBER; +BEGIN + WHILE SYSDATE < d + LOOP + x := DBMS_RANDOM.normal; + END LOOP; +END; +]'; +BEGIN + FOR i IN 1 .. &&cpus_to_burn. + LOOP + DBMS_SCHEDULER.create_job ( + job_name => 'CS_BURN_CPU_'||LPAD(i, 3, '0'), + job_type => 'PLSQL_BLOCK', + job_action => REPLACE(w, 'job_instance', i), + enabled => TRUE + ); + END LOOP; +END; +/ +-- +PRO wait... +EXEC DBMS_LOCK.sleep(5); +COL job_name FOR A16 TRUNC; +COL last_start_date FOR A36 TRUNC; +SELECT job_name, state, last_start_date, + (CAST(last_start_date AS DATE) + (&&seconds./24/3600) - SYSDATE) * (24*3600) AS secs_to_finish + FROM dba_scheduler_jobs + WHERE job_name LIKE 'CS_BURN_CPU%' ORDER BY job_name; +-- +PRO +PRO Use "/" to check on status of these &&cpus_to_burn. CS_BURN_CPU jobs \ No newline at end of file diff --git a/csierra/cs_common_tables.sql b/csierra/cs_common_tables.sql new file mode 100644 index 0000000..53b053e --- /dev/null +++ b/csierra/cs_common_tables.sql @@ -0,0 +1,14 @@ +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +COL owner FOR A30; +COL table_name FOR A30; +-- +SELECT t.owner, t.table_name, num_rows + FROM dba_users u, dba_tables t + WHERE u.common = 'YES' + AND u.oracle_maintained = 'N' + AND t.owner = u.username + ORDER BY + t.owner, t.table_name +/ \ No newline at end of file diff --git a/csierra/cs_cpu_demand.sql b/csierra/cs_cpu_demand.sql new file mode 100644 index 0000000..6d37af8 --- /dev/null +++ b/csierra/cs_cpu_demand.sql @@ -0,0 +1,914 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cpu.sql | cs_cpu_demand.sql +-- +-- Purpose: Poor-man's version of ASH Analytics for CPU Demand (ON CPU + Scheduler) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/04/01 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_cpu_demand.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_cpu_demand'; +DEF cs_script_acronym = 'cpu.sql | '; +-- +DEF cs_hours_range_default = '3'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_ash_cut_off_date NEW_V cs_ash_cut_off_date NOPRI; +SELECT TO_CHAR(CAST(PERCENTILE_DISC(0.05) WITHIN GROUP (ORDER BY sample_time) AS DATE) + (1/24), 'YYYY-MM-DD"T"HH24:MI') AS cs_ash_cut_off_date FROM v$active_session_history; +--SELECT TO_CHAR(TRUNC(TRUNC(SYSDATE, 'HH') + FLOOR(TO_NUMBER(TO_CHAR(SYSDATE, 'MI')) / 15) * 15 / (24*60), 'MI'), 'YYYY-MM-DD"T"HH24:MI') AS cs_ash_cut_off_date FROM DUAL; +-- +COL cs2_granularity_list NEW_V cs2_granularity_list NOPRI; +COL cs2_default_granularity NEW_V cs2_default_granularity NOPRI; +SELECT CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3660 <= 0.2 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '[{10s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 12m (up to 72 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3660 <= 0.2 THEN '[{1s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 12m (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '[{10s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 1h (up to 360 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 THEN '[{5s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 1h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 2 THEN '[{10s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 2h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 3 THEN '[{15s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 3h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '[{1m}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '[{5m}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '[{15m}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '[{1h}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 720h (30d) (up to 720 samples) + ELSE '[{1d}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' + END AS cs2_granularity_list, + CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 0.2 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '10s' -- < 12m (up to 72 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 0.2 THEN '1s' -- < 12m (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '10s' -- < 1h (up to 360 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 THEN '5s' -- < 1h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 2 THEN '10s' -- < 2h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 3 THEN '15s' -- < 3h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '1m' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '5m' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '15m' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '1h' -- < 720h (30d) (up to 720 samples) + ELSE '1d' + END AS cs2_default_granularity + FROM DUAL +/ +PRO +PRO 3. Granularity: &&cs2_granularity_list. +DEF cs2_granularity = '&3.'; +UNDEF 3; +COL cs2_granularity NEW_V cs2_granularity NOPRI; +SELECT NVL(LOWER(TRIM('&&cs2_granularity.')), '&&cs2_default_granularity.') cs2_granularity FROM DUAL; +SELECT CASE + WHEN '&&cs2_granularity.' = 's' THEN '1s' + WHEN '&&cs2_granularity.' = 'm' THEN '1m' + WHEN '&&cs2_granularity.' = 'h' THEN '1h' + WHEN '&&cs2_granularity.' = 'd' THEN '1d' + WHEN '&&cs2_granularity.' IN ('1s', '5s', '10s', '15s', '1m', '5m', '15m', '1h', '1d') THEN '&&cs2_granularity.' + ELSE '&&cs2_default_granularity.' + END cs2_granularity + FROM DUAL +/ +-- +COL cs2_fmt NEW_V cs2_fmt NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1s' THEN 'SS' -- (1/24/3600) 1 second + WHEN '5s' THEN 'SS' -- (5/24/3600) 5 seconds + WHEN '10s' THEN 'SS' -- (10/24/3600) 10 seconds + WHEN '15s' THEN 'SS' -- (15/24/3600) 15 seconds + WHEN '1m' THEN 'MI' -- (1/24/60) 1 minute + WHEN '5m' THEN 'MI' -- (5/24/60) 5 minutes + WHEN '15m' THEN 'MI' -- (15/24/60) 15 minutes + WHEN '1h' THEN 'HH' -- (1/24) 1 hour + WHEN '1d' THEN 'DD' -- 1 day + ELSE 'XX' -- error + END cs2_fmt + FROM DUAL +/ +-- +COL cs2_plus_days NEW_V cs2_plus_days NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1s' THEN '(1/24/3600)' -- (1/24/3600) 1 second + WHEN '5s' THEN '(5/24/3600)' -- (5/24/3600) 5 seconds + WHEN '10s' THEN '(10/24/3600)' -- (10/24/3600) 10 seconds + WHEN '15s' THEN '(15/24/3600)' -- (15/24/3600) 15 seconds + WHEN '1m' THEN '(1/24/60)' -- (1/24/60) 1 minute + WHEN '5m' THEN '(5/24/60)' -- (5/24/60) 5 minutes + WHEN '15m' THEN '(15/24/60)' -- (15/24/60) 15 minutes + WHEN '1h' THEN '(1/24)' -- (1/24) 1 hour + WHEN '1d' THEN '1' -- 1 day + ELSE 'XX' -- error + END cs2_plus_days + FROM DUAL +/ +-- +COL cs2_samples NEW_V cs2_samples NOPRI; +SELECT TO_CHAR(CEIL((TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') - TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.')) / &&cs2_plus_days.)) AS cs2_samples FROM DUAL +/ +-- +PRO +PRO 4. Reporting Dimension: [{event}|wait_class|machine|sql_id|plan_hash_value|top_level_sql_id|blocking_session|current_obj#|module|pdb_name|p1|p2|p3] +DEF cs2_dimension = '&4.'; +UNDEF 4; +COL cs2_dimension NEW_V cs2_dimension NOPRI; +SELECT NVL(LOWER(TRIM('&&cs2_dimension.')), 'event') cs2_dimension FROM DUAL; +SELECT CASE WHEN '&&cs2_dimension.' IN ('event', 'wait_class', 'machine', 'sql_id', 'plan_hash_value', 'top_level_sql_id', 'blocking_session', 'current_obj#', 'module', 'pdb_name', 'p1', 'p2', 'p3') THEN '&&cs2_dimension.' ELSE 'event' END cs2_dimension FROM DUAL; +-- +COL use_oem_colors_series NEW_V use_oem_colors_series NOPRI; +SELECT CASE '&&cs2_dimension.' WHEN 'wait_class' THEN NULL ELSE '//' END AS use_oem_colors_series FROM DUAL; +-- +COL cs2_group NEW_V cs2_group NOPRI; +SELECT CASE '&&cs2_dimension.' + WHEN 'wait_class' THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class END]' + WHEN 'event' THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END]' + WHEN 'machine' THEN q'[h.machine]' + WHEN 'sql_id' THEN q'[h.sql_id]' + WHEN 'plan_hash_value' THEN q'[TO_CHAR(h.sql_plan_hash_value)]' + WHEN 'top_level_sql_id' THEN q'[h.top_level_sql_id]' + -- WHEN 'blocking_session' THEN q'[h.blocking_session||CASE WHEN h.blocking_session IS NOT NULL THEN ','||h.blocking_session_serial# END]' -- 19c: ORA-00979: not a GROUP BY expression + WHEN 'blocking_session' THEN q'[TO_CHAR(h.blocking_session)]' + -- WHEN 'current_obj#' THEN q'[h.current_obj#||CASE WHEN h.current_obj# IS NOT NULL THEN ' ('||h.con_id||')' END]' -- 19c: ORA-00979: not a GROUP BY expression + WHEN 'current_obj#' THEN q'[TO_CHAR(h.current_obj#)]' + WHEN 'module' THEN q'[h.module]' + WHEN 'pdb_name' THEN q'[TO_CHAR(h.con_id)]' + WHEN 'p1' THEN q'[h.p1text||':'||h.p1]' + WHEN 'p2' THEN q'[h.p2text||':'||h.p2]' + WHEN 'p3' THEN q'[h.p3text||':'||h.p3]' + END AS cs2_group + FROM DUAL +/ +-- +COL aas FOR 999,990.000 HEA 'Average Active|Sessions (AAS)'; +COL db_seconds FOR 999,999,990 HEA 'DB Seconds'; +BREAK ON REPORT; +COMPUTE SUM OF aas db_seconds ON REPORT; +-- +COL machine HEA 'Machine'; +-- +WITH +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + 10 * COUNT(*) AS db_seconds + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND (h.session_state = 'ON CPU' OR h.wait_class = 'Scheduler') + GROUP BY + h.machine +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + 1 * COUNT(*) AS db_seconds + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND (h.session_state = 'ON CPU' OR h.wait_class = 'Scheduler') + GROUP BY + h.machine +), +ash_all AS ( +SELECT machine, db_seconds FROM ash_awr + UNION ALL +SELECT machine, db_seconds FROM ash_mem +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + machine + FROM ash_all + GROUP BY + machine + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +PRO +PRO 5. Machine (opt): +DEF cs2_machine = '&5.'; +UNDEF 5; +-- +PRO +PRO 6. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&6.'; +UNDEF 6; +-- +COL sql_text FOR A60 TRUNC; +-- +WITH +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sql_id, + 10 * COUNT(*) AS db_seconds + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND (h.session_state = 'ON CPU' OR h.wait_class = 'Scheduler') + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT t.sql_id FROM sql_txt t)) + GROUP BY + h.sql_id +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sql_id, + 1 * COUNT(*) AS db_seconds + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND (h.session_state = 'ON CPU' OR h.wait_class = 'Scheduler') + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT t.sql_id FROM sql_txt t)) + GROUP BY + h.sql_id +), +ash_all AS ( +SELECT sql_id, db_seconds FROM ash_awr + UNION ALL +SELECT sql_id, db_seconds FROM ash_mem +) +SELECT ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + sql_id, + (SELECT s.sql_text FROM sql_txt s WHERE s.sql_id = a.sql_id AND ROWNUM = 1) AS sql_text + FROM ash_all a + GROUP BY + sql_id + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +PRO +PRO 7. SQL_ID (opt): +DEF cs2_sql_id = '&7.'; +UNDEF 7; +-- +DEF spool_id_chart_footer_script = 'cs_ash_analytics_footer.sql'; +COL rn FOR 999; +COL dimension_group FOR A64 TRUNC; +DEF series_01 = ' '; +DEF series_02 = ' '; +DEF series_03 = ' '; +DEF series_04 = ' '; +DEF series_05 = ' '; +DEF series_06 = ' '; +DEF series_07 = ' '; +DEF series_08 = ' '; +DEF series_09 = ' '; +DEF series_10 = ' '; +DEF series_11 = ' '; +DEF series_12 = ' '; +DEF series_13 = ' '; +COL series_01 NEW_V series_01 FOR A64 TRUNC NOPRI; +COL series_02 NEW_V series_02 FOR A64 TRUNC NOPRI; +COL series_03 NEW_V series_03 FOR A64 TRUNC NOPRI; +COL series_04 NEW_V series_04 FOR A64 TRUNC NOPRI; +COL series_05 NEW_V series_05 FOR A64 TRUNC NOPRI; +COL series_06 NEW_V series_06 FOR A64 TRUNC NOPRI; +COL series_07 NEW_V series_07 FOR A64 TRUNC NOPRI; +COL series_08 NEW_V series_08 FOR A64 TRUNC NOPRI; +COL series_09 NEW_V series_09 FOR A64 TRUNC NOPRI; +COL series_10 NEW_V series_10 FOR A64 TRUNC NOPRI; +COL series_11 NEW_V series_11 FOR A64 TRUNC NOPRI; +COL series_12 NEW_V series_12 FOR A64 TRUNC NOPRI; +COL series_13 NEW_V series_13 FOR A64 TRUNC NOPRI; +DEF aas_01 = ' '; +DEF aas_02 = ' '; +DEF aas_03 = ' '; +DEF aas_04 = ' '; +DEF aas_05 = ' '; +DEF aas_06 = ' '; +DEF aas_07 = ' '; +DEF aas_08 = ' '; +DEF aas_09 = ' '; +DEF aas_10 = ' '; +DEF aas_11 = ' '; +DEF aas_12 = ' '; +DEF aas_13 = ' '; +COL aas_01 NEW_V aas_01 FOR A9 TRUNC NOPRI; +COL aas_02 NEW_V aas_02 FOR A9 TRUNC NOPRI; +COL aas_03 NEW_V aas_03 FOR A9 TRUNC NOPRI; +COL aas_04 NEW_V aas_04 FOR A9 TRUNC NOPRI; +COL aas_05 NEW_V aas_05 FOR A9 TRUNC NOPRI; +COL aas_06 NEW_V aas_06 FOR A9 TRUNC NOPRI; +COL aas_07 NEW_V aas_07 FOR A9 TRUNC NOPRI; +COL aas_08 NEW_V aas_08 FOR A9 TRUNC NOPRI; +COL aas_09 NEW_V aas_09 FOR A9 TRUNC NOPRI; +COL aas_10 NEW_V aas_10 FOR A9 TRUNC NOPRI; +COL aas_11 NEW_V aas_11 FOR A9 TRUNC NOPRI; +COL aas_12 NEW_V aas_12 FOR A9 TRUNC NOPRI; +COL aas_13 NEW_V aas_13 FOR A9 TRUNC NOPRI; +-- +WITH +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +-- +FUNCTION get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +-- +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + &&cs2_group. AS dimension_group, + 10 * COUNT(*) AS db_seconds + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND (h.session_state = 'ON CPU' OR h.wait_class = 'Scheduler') + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + GROUP BY + &&cs2_group. +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + &&cs2_group. AS dimension_group, + 1 * COUNT(*) AS db_seconds + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND (h.session_state = 'ON CPU' OR h.wait_class = 'Scheduler') + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + GROUP BY + &&cs2_group. +), +ash_all AS ( +SELECT dimension_group, db_seconds FROM ash_awr + UNION ALL +SELECT dimension_group, db_seconds FROM ash_mem +), +ash_by_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ROUND(SUM(db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(db_seconds) AS db_seconds, + dimension_group, + ROW_NUMBER() OVER(ORDER BY SUM(db_seconds) DESC) AS rn + FROM ash_all a + GROUP BY + dimension_group +), +top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, -- up to 12 + aas, + db_seconds, + SUBSTR(CASE + WHEN TRIM(dimension_group) IS NULL /*OR TRIM(dimension_group) = ','*/ THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id') THEN dimension_group||' '||get_sql_text(dimension_group) + WHEN '&&cs2_dimension.' = 'pdb_name' THEN dimension_group||' '||get_pdb_name(dimension_group) + ELSE dimension_group + END, 1, 64) AS dimension_group + FROM ash_by_dim + WHERE rn < (SELECT MAX(rn) FROM wait_classes) -- 13 +), +max_top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ MAX(rn) AS max_rn FROM top +), +bottom AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + (1 + max_top.max_rn) AS bottom_rn, -- up to 13 + ROUND(SUM(a.db_seconds) / TO_NUMBER('&&cs_from_to_seconds.'), 3) AS aas, + SUM(a.db_seconds) AS db_seconds, + '"all others"' AS dimension_group + FROM ash_by_dim a, max_top + WHERE a.rn >= max_top.max_rn + GROUP BY + max_top.max_rn +), +wait_classes2 AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + w.rn, + NVL(t.aas, 0) AS aas, + NVL(t.db_seconds, 0) AS db_seconds, + w.dimension_group + FROM wait_classes w, + top t + WHERE '&&cs2_dimension.' = 'wait_class' + AND t.dimension_group(+) = w.dimension_group +), +top_and_bottom AS ( +SELECT rn, aas, db_seconds, dimension_group + FROM top + WHERE '&&cs2_dimension.' <> 'wait_class' + UNION ALL +SELECT rn, aas, db_seconds, dimension_group + FROM wait_classes2 + WHERE '&&cs2_dimension.' = 'wait_class' + UNION ALL +SELECT bottom_rn AS rn, aas, db_seconds, dimension_group + FROM bottom + WHERE '&&cs2_dimension.' <> 'wait_class' +), +list AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, LPAD(TRIM(TO_CHAR(ROUND(aas, 3), '9,990.000')), 9) AS aas, db_seconds, dimension_group + FROM top_and_bottom +) +SELECT rn, aas, db_seconds, dimension_group, + COALESCE((SELECT dimension_group FROM list WHERE rn = 1), ' ') AS series_01, + COALESCE((SELECT dimension_group FROM list WHERE rn = 2), ' ') AS series_02, + COALESCE((SELECT dimension_group FROM list WHERE rn = 3), ' ') AS series_03, + COALESCE((SELECT dimension_group FROM list WHERE rn = 4), ' ') AS series_04, + COALESCE((SELECT dimension_group FROM list WHERE rn = 5), ' ') AS series_05, + COALESCE((SELECT dimension_group FROM list WHERE rn = 6), ' ') AS series_06, + COALESCE((SELECT dimension_group FROM list WHERE rn = 7), ' ') AS series_07, + COALESCE((SELECT dimension_group FROM list WHERE rn = 8), ' ') AS series_08, + COALESCE((SELECT dimension_group FROM list WHERE rn = 9), ' ') AS series_09, + COALESCE((SELECT dimension_group FROM list WHERE rn = 10), ' ') AS series_10, + COALESCE((SELECT dimension_group FROM list WHERE rn = 11), ' ') AS series_11, + COALESCE((SELECT dimension_group FROM list WHERE rn = 12), ' ') AS series_12, + COALESCE((SELECT dimension_group FROM list WHERE rn = 13), ' ') AS series_13, + (SELECT aas FROM list WHERE rn = 1) AS aas_01, + (SELECT aas FROM list WHERE rn = 2) AS aas_02, + (SELECT aas FROM list WHERE rn = 3) AS aas_03, + (SELECT aas FROM list WHERE rn = 4) AS aas_04, + (SELECT aas FROM list WHERE rn = 5) AS aas_05, + (SELECT aas FROM list WHERE rn = 6) AS aas_06, + (SELECT aas FROM list WHERE rn = 7) AS aas_07, + (SELECT aas FROM list WHERE rn = 8) AS aas_08, + (SELECT aas FROM list WHERE rn = 9) AS aas_09, + (SELECT aas FROM list WHERE rn = 10) AS aas_10, + (SELECT aas FROM list WHERE rn = 11) AS aas_11, + (SELECT aas FROM list WHERE rn = 12) AS aas_12, + (SELECT aas FROM list WHERE rn = 13) AS aas_13 + FROM list + ORDER BY + rn +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Average Active Sessions ON CPU and Scheduler between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = 'Average Active Sessions (AAS)'; +DEF xaxis_title = ''; +-- +COL xaxis_title NEW_V xaxis_title NOPRI; +SELECT +'RGN:"&&cs_rgn." '|| +CASE WHEN '&&cs_con_name.' = 'CDB$ROOT' THEN UPPER('CDB:"&&cs_db_name." ') ELSE 'PDB:"&&cs_con_name." ' END|| +CASE WHEN '&&cs2_machine.' IS NOT NULL THEN 'Machine:"%&&cs2_machine.%" ' END|| +CASE WHEN '&&cs2_sql_text_piece.' IS NOT NULL THEN 'Text:"%&&cs2_sql_text_piece.%" ' END|| +CASE WHEN '&&cs2_sql_id.' IS NOT NULL THEN 'SQL_ID:"&&cs2_sql_id." ' END AS xaxis_title +FROM DUAL; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_granularity." "&&cs2_dimension." "&&cs2_machine." "&&cs2_sql_text_piece." "&&cs2_sql_id."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&series_01.', id:'01', type:'number'} +PRO ,{label:'&&series_02.', id:'02', type:'number'} +PRO ,{label:'&&series_03.', id:'03', type:'number'} +PRO ,{label:'&&series_04.', id:'04', type:'number'} +PRO ,{label:'&&series_05.', id:'05', type:'number'} +PRO ,{label:'&&series_06.', id:'06', type:'number'} +PRO ,{label:'&&series_07.', id:'07', type:'number'} +PRO ,{label:'&&series_08.', id:'08', type:'number'} +PRO ,{label:'&&series_09.', id:'09', type:'number'} +PRO ,{label:'&&series_10.', id:'10', type:'number'} +PRO ,{label:'&&series_11.', id:'11', type:'number'} +PRO ,{label:'&&series_12.', id:'12', type:'number'} +PRO ,{label:'&&series_13.', id:'13', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +FUNCTION ceil_timestamp (p_timestamp IN TIMESTAMP) +RETURN DATE +IS +BEGIN + IF '&&cs2_granularity.' = '1s' THEN + RETURN CAST(p_timestamp AS DATE); + ELSIF '&&cs2_granularity.' = '5s' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'MI') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 5) * 5 / (24 * 60 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '10s' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'MI') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 10) * 10 / (24 * 60 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15s' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'MI') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 15) * 15 / (24 * 60 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '5m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 5) * 5 / (24 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 15) * 15 / (24 * 60) + &&cs2_plus_days.; + ELSE -- 1s, 1m, 1h, 1d + RETURN TRUNC(CAST(p_timestamp AS DATE) + &&cs2_plus_days., '&&cs2_fmt.'); + END IF; +END ceil_timestamp; +/****************************************************************************************/ +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +/****************************************************************************************/ +FUNCTION get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +sample AS ( +SELECT ceil_timestamp(TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + ((LEVEL - 1) * &&cs2_plus_days.)) AS time FROM DUAL CONNECT BY LEVEL <= TO_NUMBER('&&cs2_samples.') +), +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id', 'pdb_name') THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'blocking_session', 'current_obj#', 'module', 'p1', 'p2', 'p3') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END AS dimension_group + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND (h.session_state = 'ON CPU' OR h.wait_class = 'Scheduler') + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id', 'pdb_name') THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'blocking_session', 'current_obj#', 'module', 'p1', 'p2', 'p3') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END AS dimension_group + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND (h.session_state = 'ON CPU' OR h.wait_class = 'Scheduler') + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') +), +ash_awr_denorm AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(h.sample_time) AS time, + --ROUND(24 * 3600 * (MAX(CAST(h.sample_time AS DATE)) - MIN(CAST(h.sample_time AS DATE))) + 10) AS interval_secs, + SUM(CASE WHEN h.dimension_group = q'[&&series_01.]' THEN 10 ELSE 0 END) AS db_secs_01, + SUM(CASE WHEN h.dimension_group = q'[&&series_02.]' THEN 10 ELSE 0 END) AS db_secs_02, + SUM(CASE WHEN h.dimension_group = q'[&&series_03.]' THEN 10 ELSE 0 END) AS db_secs_03, + SUM(CASE WHEN h.dimension_group = q'[&&series_04.]' THEN 10 ELSE 0 END) AS db_secs_04, + SUM(CASE WHEN h.dimension_group = q'[&&series_05.]' THEN 10 ELSE 0 END) AS db_secs_05, + SUM(CASE WHEN h.dimension_group = q'[&&series_06.]' THEN 10 ELSE 0 END) AS db_secs_06, + SUM(CASE WHEN h.dimension_group = q'[&&series_07.]' THEN 10 ELSE 0 END) AS db_secs_07, + SUM(CASE WHEN h.dimension_group = q'[&&series_08.]' THEN 10 ELSE 0 END) AS db_secs_08, + SUM(CASE WHEN h.dimension_group = q'[&&series_09.]' THEN 10 ELSE 0 END) AS db_secs_09, + SUM(CASE WHEN h.dimension_group = q'[&&series_10.]' THEN 10 ELSE 0 END) AS db_secs_10, + SUM(CASE WHEN h.dimension_group = q'[&&series_11.]' THEN 10 ELSE 0 END) AS db_secs_11, + SUM(CASE WHEN h.dimension_group = q'[&&series_12.]' THEN 10 ELSE 0 END) AS db_secs_12, + SUM(CASE WHEN h.dimension_group = q'[&&series_13.]' THEN 10 ELSE 0 END) AS db_secs_13 + FROM ash_awr h + GROUP BY + ceil_timestamp(h.sample_time) +), +ash_mem_denorm AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(h.sample_time) AS time, + --ROUND(24 * 3600 * (MAX(CAST(h.sample_time AS DATE)) - MIN(CAST(h.sample_time AS DATE))) + 1) AS interval_secs, + SUM(CASE WHEN h.dimension_group = q'[&&series_01.]' THEN 01 ELSE 0 END) AS db_secs_01, + SUM(CASE WHEN h.dimension_group = q'[&&series_02.]' THEN 01 ELSE 0 END) AS db_secs_02, + SUM(CASE WHEN h.dimension_group = q'[&&series_03.]' THEN 01 ELSE 0 END) AS db_secs_03, + SUM(CASE WHEN h.dimension_group = q'[&&series_04.]' THEN 01 ELSE 0 END) AS db_secs_04, + SUM(CASE WHEN h.dimension_group = q'[&&series_05.]' THEN 01 ELSE 0 END) AS db_secs_05, + SUM(CASE WHEN h.dimension_group = q'[&&series_06.]' THEN 01 ELSE 0 END) AS db_secs_06, + SUM(CASE WHEN h.dimension_group = q'[&&series_07.]' THEN 01 ELSE 0 END) AS db_secs_07, + SUM(CASE WHEN h.dimension_group = q'[&&series_08.]' THEN 01 ELSE 0 END) AS db_secs_08, + SUM(CASE WHEN h.dimension_group = q'[&&series_09.]' THEN 01 ELSE 0 END) AS db_secs_09, + SUM(CASE WHEN h.dimension_group = q'[&&series_10.]' THEN 01 ELSE 0 END) AS db_secs_10, + SUM(CASE WHEN h.dimension_group = q'[&&series_11.]' THEN 01 ELSE 0 END) AS db_secs_11, + SUM(CASE WHEN h.dimension_group = q'[&&series_12.]' THEN 01 ELSE 0 END) AS db_secs_12, + SUM(CASE WHEN h.dimension_group = q'[&&series_13.]' THEN 01 ELSE 0 END) AS db_secs_13 + FROM ash_mem h + GROUP BY + ceil_timestamp(h.sample_time) +), +ash_denorm AS ( +SELECT time, (time - LAG(time, 1, time) OVER (ORDER BY time)) * 24 * 3600 AS interval_secs, db_secs_01, db_secs_02, db_secs_03, db_secs_04, db_secs_05, db_secs_06, db_secs_07, db_secs_08, db_secs_09, db_secs_10, db_secs_11, db_secs_12, db_secs_13 FROM ash_awr_denorm + UNION ALL +SELECT time, (time - LAG(time, 1, time) OVER (ORDER BY time)) * 24 * 3600 AS interval_secs, db_secs_01, db_secs_02, db_secs_03, db_secs_04, db_secs_05, db_secs_06, db_secs_07, db_secs_08, db_secs_09, db_secs_10, db_secs_11, db_secs_12, db_secs_13 FROM ash_mem_denorm +), +/****************************************************************************************/ +my_query AS ( +SELECT s.time, a.interval_secs, a.db_secs_01, a.db_secs_02, a.db_secs_03, a.db_secs_04, a.db_secs_05, a.db_secs_06, a.db_secs_07, a.db_secs_08, a.db_secs_09, a.db_secs_10, a.db_secs_11, a.db_secs_12, a.db_secs_13, + ROW_NUMBER() OVER (ORDER BY s.time ASC NULLS LAST) AS rn_asc, + ROW_NUMBER() OVER (ORDER BY s.time DESC NULLS LAST) AS rn_desc + FROM ash_denorm a, + sample s + WHERE a.interval_secs > 0 + AND a.time(+) = s.time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.db_secs_01 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_02 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_03 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_04 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_05 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_06 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_07 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_08 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_09 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_10 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_11 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_12 / q.interval_secs, 3)|| + ','||num_format(q.db_secs_13 / q.interval_secs, 3)|| + ']' + FROM my_query q + WHERE 1 = 1 + -- AND q.rn_asc > 1 AND q.rn_desc > 1 + AND q.db_secs_01 + q.db_secs_02 + q.db_secs_03 + q.db_secs_04 + q.db_secs_05 + q.db_secs_06 + q.db_secs_07 + q.db_secs_08 + q.db_secs_09 + q.db_secs_10 + q.db_secs_11 + q.db_secs_12 + q.db_secs_13 > 0 + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '&&use_oem_colors_series.'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_cpu_sysmetric_for_cdb_hist_chart.sql b/csierra/cs_cpu_sysmetric_for_cdb_hist_chart.sql new file mode 100644 index 0000000..180739a --- /dev/null +++ b/csierra/cs_cpu_sysmetric_for_cdb_hist_chart.sql @@ -0,0 +1,2 @@ +-- cs_cpu_sysmetric_for_cdb_hist_chart.sql - CPU System Metrics as per DBA_HIST_SYSMETRIC_SUMMARY View for a CDB (time series chart) +@@cs_some_sysmetric_for_cdb_hist_chart.sql "" "" "CentiSeconds Per Second" "Database Time Per Sec" "Host CPU Usage Per Sec" "Background CPU Usage Per Sec" "CPU Usage Per Sec" "" "" "average" "Scatter" "none" diff --git a/csierra/cs_cpu_sysmetric_for_cdb_mem_chart.sql b/csierra/cs_cpu_sysmetric_for_cdb_mem_chart.sql new file mode 100644 index 0000000..28e9473 --- /dev/null +++ b/csierra/cs_cpu_sysmetric_for_cdb_mem_chart.sql @@ -0,0 +1,2 @@ +-- cs_cpu_sysmetric_for_cdb_mem_chart.sql - CPU System Metrics as per V$SYSMETRIC_HISTORY View for a CDB (time series chart) +@@cs_some_sysmetric_for_cdb_mem_chart.sql "CentiSeconds Per Second" "Database Time Per Sec" "Host CPU Usage Per Sec" "Background CPU Usage Per Sec" "CPU Usage Per Sec" "" "" "Scatter" \ No newline at end of file diff --git a/csierra/cs_cpu_sysmetric_for_pdb_hist_chart.sql b/csierra/cs_cpu_sysmetric_for_pdb_hist_chart.sql new file mode 100644 index 0000000..389738b --- /dev/null +++ b/csierra/cs_cpu_sysmetric_for_pdb_hist_chart.sql @@ -0,0 +1,2 @@ +-- cs_cpu_sysmetric_for_pdb_hist_chart.sql - CPU System Metrics as per DBA_HIST_CON_SYSMETRIC_SUMM View for a PDB (time series chart) +@@cs_some_sysmetric_for_pdb_hist_chart.sql "" "" "CentiSeconds Per Second" "CPU Usage Per Sec" "" "" "" "" "" "average" "Scatter" "none" \ No newline at end of file diff --git a/csierra/cs_cpu_sysmetric_for_pdb_mem_chart.sql b/csierra/cs_cpu_sysmetric_for_pdb_mem_chart.sql new file mode 100644 index 0000000..8c0ece9 --- /dev/null +++ b/csierra/cs_cpu_sysmetric_for_pdb_mem_chart.sql @@ -0,0 +1,2 @@ +-- cs_cpu_sysmetric_for_pdb_mem_chart.sql - CPU System Metrics as per V$CON_SYSMETRIC_HISTORY View for a PDB (time series chart) +@@cs_some_sysmetric_for_pdb_mem_chart.sql "CentiSeconds Per Second" "CPU Usage Per Sec" "" "" "" "" "" "Scatter" \ No newline at end of file diff --git a/csierra/cs_dba_hist_parameter.sql b/csierra/cs_dba_hist_parameter.sql new file mode 100644 index 0000000..2d3022c --- /dev/null +++ b/csierra/cs_dba_hist_parameter.sql @@ -0,0 +1,157 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dba_hist_parameter.sql +-- +-- Purpose: System Parameters History +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/12/06 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dba_hist_parameter.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_dba_hist_parameter'; +DEF cs_hours_range_default = '1440'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL parameter_name FOR A43; +COL dist_values FOR 999,990; +-- +SELECT h.parameter_name, COUNT(DISTINCT h.value) AS dist_values + FROM dba_hist_parameter h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') - 1 AND TO_NUMBER('&&cs_snap_id_to.') + AND &&cs_con_id. IN (1, h.con_id) + GROUP BY + h.parameter_name +HAVING COUNT(DISTINCT h.value) > 1 + ORDER BY + h.parameter_name +/ +PRO +PRO 3. Parameter Name (opt): +DEF parameter_name = '&3.'; +UNDEF 3; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&¶meter_name." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO PARAMETER : "&¶meter_name." +-- +PRO +PRO PARAMETERS CHANGED +PRO ~~~~~~~~~~~~~~~~~~ +SELECT h.parameter_name, COUNT(DISTINCT h.value) AS dist_values + FROM dba_hist_parameter h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') - 1 AND TO_NUMBER('&&cs_snap_id_to.') + AND &&cs_con_id. IN (1, h.con_id) + GROUP BY + h.parameter_name +HAVING COUNT(DISTINCT h.value) > 1 + ORDER BY + h.parameter_name +/ + +COL begin_time FOR A19; +COL end_time FOR A19; +COL parameter_name FOR A43; +COL prior_value FOR A50 HEA 'BEGIN_VALUE'; +COL value FOR A50 HEA 'END_VALUE'; +COL change FOR 999,999,999,999,990 HEA 'NET_CHANGE'; +COL con_id FOR 999990; +COL pdb_name FOR A30 TRUNC; +-- +BREAK ON begin_time SKIP PAGE ON end_time; +-- +PRO +PRO PARAMETERS CHANGES +PRO ~~~~~~~~~~~~~~~~~~ +WITH +parameter_hist AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_id, + h.dbid, + h.instance_number, + h.parameter_name, + LAG(h.value) OVER (PARTITION BY h.dbid, h.instance_number, h.parameter_name, h.con_id ORDER BY h.snap_id) AS prior_value, + h.value, + h.con_id + FROM dba_hist_parameter h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') - 1 AND TO_NUMBER('&&cs_snap_id_to.') + AND &&cs_con_id. IN (1, h.con_id) + AND ('&¶meter_name.' IS NULL OR UPPER(parameter_name) = UPPER('&¶meter_name.')) +), +parameter_changes AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_id, + h.dbid, + h.instance_number, + h.parameter_name, + h.prior_value, + h.value, + h.con_id, + s.begin_interval_time, + s.end_interval_time + FROM parameter_hist h, + dba_hist_snapshot s + WHERE NVL(h.value, '-666') <> NVL(h.prior_value, '-666') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number +) +SELECT CAST(p.begin_interval_time AS DATE) AS begin_time, + CAST(p.end_interval_time AS DATE) AS end_time, + p.parameter_name, + p.prior_value, + p.value, + CASE WHEN REGEXP_LIKE(p.prior_value, '^[^a-zA-Z]*$') AND REGEXP_LIKE(p.value, '^[^a-zA-Z]*$') THEN TO_NUMBER(p.value) - TO_NUMBER(p.prior_value) END AS change, -- https://asktom.oracle.com/pls/apex/asktom.search?tag=determine-whether-the-given-is-numeric-alphanumeric-and-hexadecimal + p.con_id, + (SELECT c.name AS pdb_name FROM v$containers c WHERE c.con_id = p.con_id) AS pdb_name + FROM parameter_changes p + ORDER BY + p.begin_interval_time, + p.parameter_name, + p.con_id +/ +-- +CLEAR BREAK; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&¶meter_name." +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_dbc_snapshot_log_v.sql b/csierra/cs_dbc_snapshot_log_v.sql new file mode 100644 index 0000000..31203b7 --- /dev/null +++ b/csierra/cs_dbc_snapshot_log_v.sql @@ -0,0 +1,121 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dbc_snapshot_log_v.sql +-- +-- Purpose: DBC Snapshot Log Report +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dbc_snapshot_log_v.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +COL view_owner NEW_V view_owner NOPRI; +SELECT owner AS view_owner FROM dba_views WHERE view_name = 'DBC_SNAPSHOT_LOG_V'; +-- +COL table_name FOR A30; +COL region_acronym FOR A3 HEA 'RGN'; +COL locale FOR A6; +COL runs FOR 999,990; +COL avg_secs FOR 999,990; +COL secs_per_day FOR 999,999,990; +COL total_rows_processed FOR 999,999,999,990; +COL errors FOR 99,990; +COL seconds FOR 999,990; +COL last_rows_processed FOR 999,999,999,990; +COL last_error_stack FOR A100; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL "TOTAL" OF runs secs_per_day total_rows_processed errors seconds last_rows_processed ON REPORT; +-- +PRO +PRO Source (from CDB) +PRO ~~~~~~ +SELECT --region_acronym, + --locale, + --db_name, + table_name, + runs, + first_time, + avg_secs, + secs_per_day, + errors, + total_rows_processed, + last_begin_time, + last_end_time, + seconds, + last_rows_processed, + last_error_stack + FROM &&view_owner..dbc_snapshot_log_v +/ +-- +COL min_since_last FOR 9,999,990.00 HEA 'MINUTES_AGO'; +COL min_until_next FOR 9,999,990.00 HEA 'MINUTES_2GO'; +COL avg_rows FOR 999,999,999,990; +COL to_key FOR A14; +COL error_message FOR A100; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL "TOTAL" OF runs total_rows_processed errors seconds ON REPORT; +-- +PRO +PRO Target (into OMR) +PRO ~~~~~~ +SELECT s.collect_name AS table_name, + s.collections AS runs, + s.first_time, + s.last_time, + s.status, + s.min_since_last, + s.min_until_next, + s.errors, + s.total_rows AS total_rows_processed, + s.avg_rows, + s.elap_sec AS seconds, + s.avg_sec AS avg_secs, + --from_key, + s.to_key, + h.error_message + FROM &&view_owner..iod_metadata_ctl_summ s, &&view_owner..iod_metadata_ctl_hist h + WHERE h.collect_name = s.collect_name + AND h.start_time = s.last_time +ORDER BY s.collect_name +/ +-- +CLEAR BREAK; +-- +COL job_name FOR A30; +COL job_action FOR A40; +COL repeat_interval FOR A30; +COL enabled FOR A7; +COL last_start_date FOR A19; +COL last_run_secs FOR 999,990.000; +COL next_run_date FOR A19; +-- +PRO +PRO DBA_SCHEDULER_JOBS +PRO ~~~~~~~~~~~~~~~~~~ +SELECT job_name, + job_type, + job_action, + repeat_interval, + enabled, + state, + run_count, + EXTRACT(SECOND FROM last_run_duration) last_run_secs, + TO_CHAR(last_start_date, 'YYYY-MM-DD"T"HH24:MI:SS') last_start_date, + TO_CHAR(next_run_date, 'YYYY-MM-DD"T"HH24:MI:SS') next_run_date + FROM dba_scheduler_jobs + WHERE job_name LIKE 'IOD_META%' + ORDER BY + job_name +/ \ No newline at end of file diff --git a/csierra/cs_dbms_stats_age.sql b/csierra/cs_dbms_stats_age.sql new file mode 100644 index 0000000..79b9824 --- /dev/null +++ b/csierra/cs_dbms_stats_age.sql @@ -0,0 +1,187 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dbms_stats_age.sql +-- +-- Purpose: DBMS_STATS Age as per "auto optimizer stats collection" +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/09/23 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dbms_stats_age.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_dbms_stats_age'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +PRO +PRO Latest Window Start Time (dba_autotask_job_history) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~ +COL con_id FOR 999999; +COL pdb_name FOR A30 TRUNC; +COL window_name FOR A20; +COL window_start_time FOR A35; +COL window_duration FOR A30; +COL job_start_time FOR A35; +COL job_duration FOR A20; +COL job_info FOR A80; +-- +WITH +hist AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ +con_id, window_name, window_start_time, window_duration, job_start_time, job_duration, +EXTRACT(DAY FROM (job_start_time - window_start_time) * 24 * 60) AS delay_mins, +ROW_NUMBER() OVER (PARTITION BY con_id ORDER BY window_start_time DESC) AS rn, +job_error, job_status, job_info +FROM cdb_autotask_job_history +WHERE client_name = 'auto optimizer stats collection' +) +SELECT '|' AS "|", + h.con_id, c.name AS pdb_name, + h.window_name, h.window_start_time, h.window_duration, h.job_start_time, h.job_duration, h.delay_mins, + h.job_error, h.job_status, h.job_info + FROM hist h, v$containers c + WHERE h.rn = 1 + AND c.con_id = h.con_id +ORDER BY h.con_id, h.window_start_time +/ +-- +COL con_id FOR 9999990; +COL pdb_name FOR A30 TRUNC; +COL last_good_date FOR A19; +COL days FOR 9,990.00; +-- +PRO +PRO DBMS_STATS AGE (dba_autotask_task) +PRO ~~~~~~~~~~~~~~ +WITH +last_exec AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + t.con_id, + CAST(t.last_good_date AS DATE) AS last_good_date + FROM cdb_autotask_task t + WHERE t.client_name = 'auto optimizer stats collection' +) +SELECT '|' AS "|", + e.con_id, c.name AS pdb_name, + TO_CHAR(e.last_good_date, 'YYYY-MM-DD"T"HH24:MI:SS') AS last_good_date, + ROUND(SYSDATE - e.last_good_date, 2) AS days + FROM last_exec e, v$containers c + WHERE c.con_id = e.con_id + ORDER BY + e.con_id +/ +-- +COL con_id FOR 999990; +COL pdb_name FOR A30 TRUNC; +COL tables FOR 99,990; +COL days1 FOR 9,990.00; +COL days2 FOR 9,990.00; +COL max_last_analyzed FOR A19; +COL p90th_percentile FOR A19; +-- +PRO +PRO DBMS_STATS AGE (dba_tables) +PRO ~~~~~~~~~~~~~~ +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + '|' AS "|", + t.con_id, + c.name AS pdb_name, + MAX(t.last_analyzed) AS max_last_analyzed, + ROUND(SYSDATE - MAX(t.last_analyzed), 2) AS days1, + PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY t.last_analyzed ASC) AS p90th_percentile, + ROUND(SYSDATE - PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY t.last_analyzed ASC), 2) AS days2, + COUNT(*) AS tables + FROM cdb_tables t, cdb_users u, v$containers c + WHERE t.con_id <> 2 + AND u.con_id = t.con_id + AND u.username = t.owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND c.con_id = t.con_id + GROUP BY + t.con_id, c.name + ORDER BY + t.con_id, c.name +/ +-- +COL con_id FOR 9999990; +COL pdb_name FOR A30 TRUNC; +COL last_good_date FOR A19; +COL days FOR 9,990.00; +COL tables FOR 99,990; +COL days1 FOR 9,990.00; +COL days2 FOR 9,990.00; +COL max_last_analyzed FOR A19; +COL p90th_percentile FOR A19; +PRO +PRO DBMS_STATS AGE (dba_autotask_task and dba_tables) +PRO ~~~~~~~~~~~~~~ +WITH +autotask_task AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + t.con_id, + TO_CHAR(t.last_good_date, 'YYYY-MM-DD"T"HH24:MI:SS') AS last_good_date, + ROUND(SYSDATE - CAST(t.last_good_date AS DATE), 2) AS days + FROM cdb_autotask_task t + WHERE t.client_name = 'auto optimizer stats collection' +), +tables AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + t.con_id, + MAX(t.last_analyzed) AS max_last_analyzed, + ROUND(SYSDATE - MAX(t.last_analyzed), 2) AS days1, + PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY t.last_analyzed ASC) AS p90th_percentile, + ROUND(SYSDATE - PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY t.last_analyzed ASC), 2) AS days2, + COUNT(*) AS tables + FROM cdb_tables t, cdb_users u + WHERE t.con_id <> 2 + AND u.con_id = t.con_id + AND u.username = t.owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + GROUP BY + t.con_id +) +SELECT '|' AS "|", + a.con_id, + c.name AS pdb_name, + a.last_good_date, + a.days, + '|' AS "|", + t.max_last_analyzed, + t.days1, + t.p90th_percentile, + t.days2, + t.tables + FROM autotask_task a, tables t, v$containers c + WHERE t.con_id = a.con_id + AND c.con_id = a.con_id + ORDER BY + a.con_id +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_dbms_stats_auto.sql b/csierra/cs_dbms_stats_auto.sql new file mode 100644 index 0000000..1de3f40 --- /dev/null +++ b/csierra/cs_dbms_stats_auto.sql @@ -0,0 +1,78 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dbms_stats_auto.sql +-- +-- Purpose: Generate DBMS_STATS.report_gather_auto_stats +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/07/30 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter optional parameters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dbms_stats_auto.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_dbms_stats_auto'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +PRO +PRO 1. Detail Level: [{BASIC}|TYPICAL|ALL] +DEF cs2_detail_level = '&1.'; +UNDEF 1; +COL cs2_detail_level NEW_V cs2_detail_level NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs2_detail_level.')) IN ('TYPICAL','BASIC','ALL') THEN UPPER(TRIM('&&cs2_detail_level.')) ELSE 'BASIC' END AS cs2_detail_level FROM DUAL +/ +-- +PRO +PRO 2. Format: [{TEXT}|HTML|XML] +DEF cs2_format = '&2.'; +UNDEF 2; +COL cs2_format NEW_V cs2_format NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs2_format.')) IN ('TEXT','HTML','XML') THEN UPPER(TRIM('&&cs2_format.')) ELSE 'TEXT' END AS cs2_format FROM DUAL +/ +COL cs2_file_suffix NEW_V cs2_file_suffix NOPRI; +SELECT CASE '&&cs2_format.' WHEN 'TEXT' THEN 'txt' WHEN 'HTML' THEN 'html' WHEN 'XML' THEN 'xml' ELSE 'txt' END AS cs2_file_suffix FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_detail_level." "&&cs2_format." +@@cs_internal/cs_spool_id.sql +-- +PRO DETAIL_LEVEL : "&&cs2_detail_level." +PRO FORMAT : "&&cs2_format." +PRO +-- +-- opens new spool if html or xml, or continues with existing if txt +SET HEA OFF PAGES 0; +SPO &&cs_file_name..&&cs2_file_suffix. APP +-- +SELECT DBMS_STATS.report_gather_auto_stats(detail_level => '&&cs2_detail_level.', format => '&&cs2_format.') FROM DUAL +/ +-- +SPO OFF; +SET HEA ON PAGES 100; +HOS chmod 644 &&cs_file_name..&&cs2_file_suffix. +-- continues with original spool +SPO &&cs_file_name..txt APP +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_detail_level." "&&cs2_format." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_dbms_stats_gather_database_stats.sql b/csierra/cs_dbms_stats_gather_database_stats.sql new file mode 100644 index 0000000..384a8ef --- /dev/null +++ b/csierra/cs_dbms_stats_gather_database_stats.sql @@ -0,0 +1,88 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dbms_stats_gather_database_stats.sql +-- +-- Purpose: Execute DBMS_STATS.GATHER_DATABASE_STATS +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/09/27 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dbms_stats_gather_database_stats.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +-- https://docs.oracle.com/cd/B19306_01/server.102/b14211/stats.htm#i41282 +-- The GATHER_STATS_JOB job gathers optimizer statistics by calling the DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure. +-- The GATHER_DATABASE_STATS_JOB_PROC procedure collects statistics on database objects when the object has no previously gathered statistics or the existing statistics are stale because the underlying object has been modified significantly (more than 10% of the rows). +-- The DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC is an internal procedure, but its operates in a very similar fashion to the DBMS_STATS.GATHER_DATABASE_STATS procedure using the GATHER AUTO option. +-- The primary difference is that the DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure prioritizes the database objects that require statistics, so that those objects which most need updated statistics are processed first. +-- This ensures that the most-needed statistics are gathered before the maintenance window closes. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +DEF cs_script_name = 'cs_dbms_stats_gather_database_stats'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +SET HEA OFF PAGES 0; +COL lin FOR A300; +PRO +SELECT +'ALTER SESSION SET CONTAINER = '||name||';'||CHR(10)|| +'SET ECHO ON TIMI ON TIM ON SERVEROUT ON;'||CHR(10)|| +'BEGIN'||CHR(10)|| +'FOR i IN (SELECT DBMS_STATS.GET_PREFS(''STALE_PERCENT'') AS stale_percent FROM DUAL)'||CHR(10)|| +'LOOP'||CHR(10)|| +'IF i.stale_percent <> ''5'' THEN'||CHR(10)|| +'DBMS_OUTPUT.PUT_LINE(''STALE_PERCENT was: ''||i.stale_percent);'||CHR(10)|| +'DBMS_STATS.SET_GLOBAL_PREFS(''STALE_PERCENT'', ''5'');'||CHR(10)|| +'END IF;'||CHR(10)|| +'END LOOP;'||CHR(10)|| +'DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC;'||CHR(10)|| +'END;'||CHR(10)|| +'/' AS lin + FROM v$containers + WHERE con_id <> 2 + AND open_mode = 'READ WRITE' + AND restricted = 'NO' + ORDER BY + DBMS_RANDOM.value +/ +-- +SPO &&cs_file_name._driver.sql +PRO SET ECHO ON TIMI ON TIM ON; +/ +PRO SET ECHO OFF TIMI OFF TIM OFF; +SPO OFF; +-- +SET HEA ON PAGES 100; +SPO &&cs_file_name..txt APP; +-- +@&&cs_file_name._driver.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_dbms_stats_gather_database_stats_job.sql b/csierra/cs_dbms_stats_gather_database_stats_job.sql new file mode 100644 index 0000000..2cba6ee --- /dev/null +++ b/csierra/cs_dbms_stats_gather_database_stats_job.sql @@ -0,0 +1,87 @@ +REM Dummy line to avoid "usage: r_sql_exec" when executed using iodcli +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dbms_stats_gather_database_stats_job.sql +-- +-- Purpose: Execute DBMS_STATS.GATHER_DATABASE_STATS (stand-alone) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/04/22 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dbms_stats_gather_database_stats_job.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +-- https://docs.oracle.com/cd/B19306_01/server.102/b14211/stats.htm#i41282 +-- The GATHER_STATS_JOB job gathers optimizer statistics by calling the DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure. +-- The GATHER_DATABASE_STATS_JOB_PROC procedure collects statistics on database objects when the object has no previously gathered statistics or the existing statistics are stale because the underlying object has been modified significantly (more than 10% of the rows). +-- The DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC is an internal procedure, but its operates in a very similar fashion to the DBMS_STATS.GATHER_DATABASE_STATS procedure using the GATHER AUTO option. +-- The primary difference is that the DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC procedure prioritizes the database objects that require statistics, so that those objects which most need updated statistics are processed first. +-- This ensures that the most-needed statistics are gathered before the maintenance window closes. +-- +--------------------------------------------------------------------------------------- +-- +WHENEVER OSERROR CONTINUE; +WHENEVER SQLERROR EXIT FAILURE; +-- +-- exit graciously if executed on standby +WHENEVER SQLERROR EXIT SUCCESS; +DECLARE + l_is_primary VARCHAR2(5); +BEGIN + SELECT CASE WHEN open_mode = 'READ WRITE' AND database_role = 'PRIMARY' THEN 'TRUE' ELSE 'FALSE' END AS is_primary INTO l_is_primary FROM v$database; + IF l_is_primary = 'FALSE' THEN raise_application_error(-20000, 'Not PRIMARY'); END IF; +END; +/ +-- exit not graciously if any error +WHENEVER SQLERROR EXIT FAILURE; +-- +ALTER SESSION SET container = CDB$ROOT; +-- +DEF cs_file_name = '/tmp/cs_dbms_stats_gather_database_stats_job'; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET HEA OFF PAGES 0 SERVEROUT ON; +COL lin FOR A300; +PRO +SELECT +'ALTER SESSION SET CONTAINER = '||name||';'||CHR(10)|| +'SET ECHO ON TIMI ON TIM ON SERVEROUT ON;'||CHR(10)|| +'BEGIN /* cs_dbms_stats_gather_database_stats_job 1 job */'||CHR(10)|| +'FOR i IN (SELECT DBMS_STATS.GET_PREFS(''STALE_PERCENT'') AS stale_percent FROM DUAL)'||CHR(10)|| +'LOOP'||CHR(10)|| +'IF i.stale_percent <> ''5'' THEN'||CHR(10)|| +'DBMS_OUTPUT.PUT_LINE(''STALE_PERCENT was: ''||i.stale_percent);'||CHR(10)|| +'DBMS_STATS.SET_GLOBAL_PREFS(''STALE_PERCENT'', ''5'');'||CHR(10)|| +'END IF;'||CHR(10)|| +'END LOOP;'||CHR(10)|| +'END;'||CHR(10)|| +'/'||CHR(10)|| +'BEGIN /* cs_dbms_stats_gather_database_stats_job 2 job */'||CHR(10)|| +'DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC;'||CHR(10)|| +'END;'||CHR(10)|| +'/' AS lin + FROM v$containers + WHERE con_id <> 2 + AND open_mode = 'READ WRITE' + AND restricted = 'NO' + ORDER BY + DBMS_RANDOM.value +/ +-- +SPO &&cs_file_name._driver.sql +PRO SET ECHO ON TIMI ON TIM ON; +PRO SPO &&cs_file_name..log +/ +PRO SPO OFF; +PRO SET ECHO OFF TIMI OFF TIM OFF; +SPO OFF; +-- +@@&&cs_file_name._driver.sql +-- +ALTER SESSION SET container = CDB$ROOT; +-- \ No newline at end of file diff --git a/csierra/cs_dbms_stats_operations.sql b/csierra/cs_dbms_stats_operations.sql new file mode 100644 index 0000000..18fd657 --- /dev/null +++ b/csierra/cs_dbms_stats_operations.sql @@ -0,0 +1,83 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dbms_stats_operations.sql +-- +-- Purpose: Generate DBMS_STATS.report_stats_operations +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/07/30 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter optional parameters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dbms_stats_operations.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_dbms_stats_operations'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '24'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. Detail Level: [{BASIC}|TYPICAL|ALL] +DEF cs2_detail_level = '&3.'; +UNDEF 3; +COL cs2_detail_level NEW_V cs2_detail_level NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs2_detail_level.')) IN ('TYPICAL','BASIC','ALL') THEN UPPER(TRIM('&&cs2_detail_level.')) ELSE 'BASIC' END AS cs2_detail_level FROM DUAL +/ +-- +PRO +PRO 4. Format: [{TEXT}|HTML|XML] +DEF cs2_format = '&4.'; +UNDEF 4; +COL cs2_format NEW_V cs2_format NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs2_format.')) IN ('TEXT','HTML','XML') THEN UPPER(TRIM('&&cs2_format.')) ELSE 'TEXT' END AS cs2_format FROM DUAL +/ +COL cs2_file_suffix NEW_V cs2_file_suffix NOPRI; +SELECT CASE '&&cs2_format.' WHEN 'TEXT' THEN 'txt' WHEN 'HTML' THEN 'html' WHEN 'XML' THEN 'xml' ELSE 'txt' END AS cs2_file_suffix FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_detail_level." "&&cs2_format." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO DETAIL_LEVEL : "&&cs2_detail_level." +PRO FORMAT : "&&cs2_format." +PRO +-- +-- opens new spool if html or xml, or continues with existing if txt +SET HEA OFF PAGES 0; +SPO &&cs_file_name..&&cs2_file_suffix. APP +-- +SELECT DBMS_STATS.report_stats_operations(detail_level => '&&cs2_detail_level.', format => '&&cs2_format.', since => TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.'), until => TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) FROM DUAL +/ +-- +SPO OFF; +SET HEA ON PAGES 100; +HOS chmod 644 &&cs_file_name..&&cs2_file_suffix. +-- continues with original spool +SPO &&cs_file_name..txt APP +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_detail_level." "&&cs2_format." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_df_u02_chart.sql b/csierra/cs_df_u02_chart.sql new file mode 100644 index 0000000..a5498ea --- /dev/null +++ b/csierra/cs_df_u02_chart.sql @@ -0,0 +1,173 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_df_u02_chart.sql +-- +-- Purpose: Disk FileSystem u02 Utilization Chart +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/25 +-- +-- Usage: Execute connected to CDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_df_u02_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_df_u02_chart'; +DEF cs_hours_range_default = '4320'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(timestamp)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_system +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO +PRO 3. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&3.'; +UNDEF 3; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "Disk FileSystem u02 and DB Utilization"; +DEF chart_title = ""; +DEF xaxis_title = ""; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}"; +DEF vaxis_title = "Terabytes (TB)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: true,"; +DEF vaxis_baseline = ""; +DEF vaxis_viewwindow = ", viewWindow: {min:0}"; +DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'FileSystem u02 TB Space', id:'1', type:'number'} +PRO ,{label:'FileSystem u02 TB Used', id:'2', type:'number'} +PRO ,{label:'Database TB Allocated', id:'3', type:'number'} +PRO ,{label:'Database TB Used', id:'4', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +df_hh AS ( +SELECT timestamp, u02_size, u02_used, u02_available, host_name, + ROW_NUMBER() OVER (PARTITION BY TRUNC(timestamp, 'HH') ORDER BY u02_size DESC NULLS LAST, u02_used DESC NULLS LAST) AS rn + FROM &&cs_tools_schema..dbc_system + WHERE timestamp >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND timestamp < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +), +df_u02 AS ( +SELECT ROUND(timestamp, 'HH') AS timestamp, + ROUND((u02_used + u02_available) * 1024 / POWER(10, 12), 3) AS tb_space, + ROUND(u02_used * 1024 / POWER(10, 12), 3) AS tb_used + FROM df_hh + WHERE rn = 1 +), +ts_hh AS ( +SELECT snap_time, SUM(allocated_bytes) AS allocated_bytes, SUM(used_bytes) AS used_bytes, + ROW_NUMBER() OVER (PARTITION BY TRUNC(snap_time, 'HH') ORDER BY SUM(allocated_bytes) DESC NULLS LAST, SUM(used_bytes) DESC NULLS LAST) AS rn + FROM &&cs_tools_schema..dbc_tablespaces + WHERE snap_time >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND snap_time < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + GROUP BY + snap_time +), +ts_space AS ( +SELECT ROUND(snap_time, 'HH') AS snap_time, + ROUND(allocated_bytes / POWER(10, 12), 3) AS tb_allocated, + ROUND(used_bytes / POWER(10, 12), 3) AS tb_used + FROM ts_hh + WHERE rn = 1 +), +/****************************************************************************************/ +my_query AS ( +SELECT df.timestamp, + df.tb_space AS df_tb_space, + df.tb_used AS df_tb_used, + ts.tb_allocated AS db_tb_allocated, + ts.tb_used AS db_tb_used + FROM df_u02 df, + ts_space ts + WHERE ts.snap_time = df.timestamp +) +SELECT ', [new Date('|| + TO_CHAR(q.timestamp, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.timestamp, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.timestamp, 'DD')|| /* day */ + ','||TO_CHAR(q.timestamp, 'HH24')|| /* hour */ + ','||TO_CHAR(q.timestamp, 'MI')|| /* minute */ + ','||TO_CHAR(q.timestamp, 'SS')|| /* second */ + ')'|| + ','||num_format(q.df_tb_space, 3)|| + ','||num_format(q.df_tb_used, 3)|| + ','||num_format(q.db_tb_allocated, 3)|| + ','||num_format(q.db_tb_used, 3)|| + ']' + FROM my_query q + ORDER BY + q.timestamp +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Line'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_dg.sql b/csierra/cs_dg.sql new file mode 100644 index 0000000..8e3219e --- /dev/null +++ b/csierra/cs_dg.sql @@ -0,0 +1,25 @@ +COL role FOR A10; +COL db_unique_name FOR A15; +COL host_name FOR A64; +-- +SELECT r.role, d.db_unique_name, h.host_name +FROM +(SELECT x.value db_unique_name, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'DATABASE') d, +(SELECT x.value role, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'role') r, +(SELECT x.value host_name, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'host') h +WHERE r.rn = d.rn AND h.rn = d.rn +ORDER BY r.role DESC, d.db_unique_name +/ +-- +COL data_guard_configuration FOR A150; +-- +SELECT LISTAGG(x.attribute||':'||x.value, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY x.indx) AS data_guard_configuration + FROM x$drc x + WHERE x.attribute IN ('DRC', 'protection_mode', 'enabled', 'fast_start_failover', 'fsfo_target', 'role_change_detected', + 'DATABASE', 'enabled', 'role', 'receive_from', 'ship_to', 'FSFOTargetValidity', + 'host') + GROUP BY + x.object_id + ORDER BY + x.object_id +/ diff --git a/csierra/cs_dg_protection_mode_switches.sql b/csierra/cs_dg_protection_mode_switches.sql new file mode 100644 index 0000000..283305f --- /dev/null +++ b/csierra/cs_dg_protection_mode_switches.sql @@ -0,0 +1,185 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dg_protection_mode_switches.sql +-- +-- Purpose: Data Guard Protection Mode Switches as per Log Archive Dest +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/18 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dg_protection_mode_switches.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_dg_protection_mode_switches'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL begin_time FOR A19 HEA 'AWR SNAP|BEGIN TIME'; +COL end_time FOR A19 HEA 'AWR SNAP|END TIME'; +COL begin_host FOR A64 HEA 'AWR SNAP|BEGIN STANDBY HOST'; +COL end_host FOR A64 HEA 'AWR SNAP|END STANDBY HOST'; +COL min_date_time FOR A19 HEA 'LOGON STORM|BEGIN TIME'; +COL max_date_time FOR A19 HEA 'LOGON STORM|END TIME'; +COL max_aas FOR 99,999 HEA 'LOGON STORM|MAX AAS'; +COL max_machines FOR 999,990 HEA 'LOGON STORM|MAX AAS'; +COL seconds FOR 999,990 HEA 'LOGON STORM|SECONDS'; +COL max_pdbs FOR 999,990 HEA 'LOGON STORM|MAX PDBS'; +COL begin_mode FOR A15 HEA 'AWR SNAP|BEGIN MODE'; +COL end_mode FOR A15 HEA 'AWR SNAP|END MODE'; +COL mode_switch FOR A7 HEA 'MODE|SWITCH'; +COL switch_over FOR A7 HEA 'SWITCH|OVER'; +-- +BREAK ON mode_switch SKIP 1 DUPL; +-- +PRO +PRO DG PROTECTION MODE SWITCHES +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +parameter_hist AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_id, + h.dbid, + h.instance_number, + h.parameter_name, + LAG(h.value) OVER (PARTITION BY h.dbid, h.instance_number, h.parameter_name, h.con_id ORDER BY h.snap_id) AS prior_value, + h.value, + h.con_id + FROM dba_hist_parameter h + WHERE parameter_name LIKE 'log_archive_dest%' + AND parameter_name NOT LIKE 'log_archive_dest_state%' +), +parameter_changes AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_id, + h.dbid, + h.instance_number, + h.parameter_name, + h.prior_value, + h.value, + REPLACE(REPLACE(REGEXP_SUBSTR(h.prior_value, '\(HOST=([[:alnum:]]|\.|-)+\)'), '(HOST='), ')') AS begin_host, + REPLACE(REPLACE(REGEXP_SUBSTR(h.value, '\(HOST=([[:alnum:]]|\.|-)+\)'), '(HOST='), ')') AS end_host, + CASE + WHEN h.prior_value LIKE '% SYNC AFFIRM %' THEN 'SYNC AFFIRM' + WHEN h.prior_value LIKE '% ASYNC AFFIRM %' THEN 'ASYNC AFFIRM' -- not expected + WHEN h.prior_value LIKE '% SYNC NOAFFIRM %' THEN 'SYNC NOAFFIRM' -- not expected + WHEN h.prior_value LIKE '% ASYNC NOAFFIRM %' THEN 'ASYNC NOAFFIRM' + END AS begin_mode, + CASE + WHEN h.value LIKE '% SYNC AFFIRM %' THEN 'SYNC AFFIRM' + WHEN h.value LIKE '% ASYNC AFFIRM %' THEN 'ASYNC AFFIRM' -- not expected + WHEN h.value LIKE '% SYNC NOAFFIRM %' THEN 'SYNC NOAFFIRM' -- not expected + WHEN h.value LIKE '% ASYNC NOAFFIRM %' THEN 'ASYNC NOAFFIRM' + END AS end_mode, + h.con_id, + s.begin_interval_time, + s.end_interval_time + FROM parameter_hist h, + dba_hist_snapshot s + WHERE NVL(h.value, '-666') <> NVL(h.prior_value, '-666') + AND h.prior_value LIKE '%(HOST=%' + AND h.value LIKE '%(HOST=%' + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number +), +dg_mode_switches AS ( +SELECT CAST(p.begin_interval_time AS DATE) AS begin_time, + CAST(p.end_interval_time AS DATE) AS end_time, + p.begin_mode, + p.end_mode, + p.begin_host, + p.end_host + FROM parameter_changes p +), +over_height AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + COUNT(*) AS aas, + COUNT(DISTINCT machine) AS machines, + COUNT(DISTINCT con_id) AS pdbs, + (CAST(h.sample_time AS DATE) - LAG(CAST(h.sample_time AS DATE)) OVER (ORDER BY h.sample_time)) * 24 * 3600 AS secs_from_prior + FROM dba_hist_active_sess_history h + GROUP BY + h.sample_time +HAVING COUNT(*) > 1000 -- active sessions! +), +over_time AS ( +SELECT CAST(h.sample_time AS DATE) AS sample_time, + h.aas, + h.machines, + h.pdbs + FROM over_height h + WHERE secs_from_prior < 20 -- contiguous +), +logon_storms AS ( +SELECT TRUNC(sample_time) AS date_time, + MIN(sample_time - (20/24/3600)) AS min_date_time, + MAX(sample_time) AS max_date_time, + ((MAX(sample_time) - MIN(sample_time)) * 24 * 3600) + 20 AS seconds, + MAX(aas) AS max_aas, + MAX(machines) AS max_machines, + MAX(pdbs) AS max_pdbs + FROM over_time + GROUP BY + TRUNC(sample_time) +) +SELECT dg.begin_time, + dg.end_time, + dg.begin_mode, + dg.end_mode, + CASE dg.begin_mode WHEN 'ASYNC NOAFFIRM' THEN 'HP' WHEN 'SYNC AFFIRM' THEN 'HA' END||'->'|| + CASE dg.end_mode WHEN 'ASYNC NOAFFIRM' THEN 'HP' WHEN 'SYNC AFFIRM' THEN 'HA' END AS mode_switch, + ls.min_date_time, + ls.max_date_time, + ls.seconds, + ls.max_aas, + ls.max_pdbs, + dg.begin_host, + dg.end_host, + CASE WHEN dg.begin_host <> dg.end_host THEN 'YES' ELSE 'NO' END AS switch_over + FROM dg_mode_switches dg + OUTER APPLY ( + SELECT s.min_date_time, + s.max_date_time, + s.seconds, + s.max_aas, + s.max_pdbs + FROM logon_storms s + WHERE (s.min_date_time BETWEEN dg.begin_time AND dg.end_time OR s.max_date_time BETWEEN dg.begin_time AND dg.end_time) + AND ROWNUM >= 1 /* MATERIALIZE NO_MERGE */ + ORDER BY + s.min_date_time ASC + FETCH FIRST 1 ROW ONLY + ) ls + ORDER BY + dg.begin_time +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_dg_redo_dest_resp_histogram_chart.sql b/csierra/cs_dg_redo_dest_resp_histogram_chart.sql new file mode 100644 index 0000000..0c1d081 --- /dev/null +++ b/csierra/cs_dg_redo_dest_resp_histogram_chart.sql @@ -0,0 +1,194 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dg_redo_dest_resp_histogram_chart.sql +-- +-- Purpose: Data Guard (DG) REDO Transport Duration Chart +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/04/27 +-- +-- Usage: Execute connected to CDB. +-- +-- Enter Source and Destination Hosts when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dg_redo_dest_resp_histogram_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_dg_redo_dest_resp_histogram_chart'; +DEF cs_hours_range_default = '8760'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(time)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_redo_dest_histogram +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL source_host_name FOR A64 TRUNC; +SELECT DISTINCT host_name AS source_host_name + FROM &&cs_tools_schema..dbc_redo_dest_histogram + WHERE time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + ORDER BY 1 +/ +PRO +PRO 3. Source Host Name: (opt) +DEF s_host_name = '&3.'; +UNDEF 3; +-- +COL dest_host_name FOR A64 TRUNC; +SELECT DISTINCT dest_host_name + FROM &&cs_tools_schema..dbc_redo_dest_histogram + WHERE time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND host_name = NVL('&&s_host_name.', host_name) + ORDER BY 1 +/ +PRO +PRO 3. Destination Host Name: (opt) +DEF d_host_name = '&4.'; +UNDEF 4; +-- +DEF source_dest_host_name = ""; +COL source_dest_host_name NEW_V source_dest_host_name NOPRI; +SELECT CASE WHEN '&&s_host_name.' IS NOT NULL THEN 'SRC:&&s_host_name.' END||CASE WHEN '&&s_host_name.&&d_host_name.' IS NOT NULL THEN ' -> ' END||CASE WHEN '&&d_host_name.' IS NOT NULL THEN 'DST:&&d_host_name.' END AS source_dest_host_name FROM DUAL +/ +-- +COL label1 NEW_V label1 NOPRI; +COL label2 NEW_V label2 NOPRI; +COL label3 NEW_V label3 NOPRI; +COL label4 NEW_V label4 NOPRI; +COL label5 NEW_V label5 NOPRI; +COL label6 NEW_V label6 NOPRI; +WITH +scope AS ( +SELECT host_name||' -> '||dest_host_name AS label, SUM(duration_seconds) AS entries, ROW_NUMBER() OVER (ORDER BY SUM(duration_seconds) DESC) AS rn + FROM &&cs_tools_schema..dbc_redo_dest_histogram + WHERE time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND host_name = NVL('&&s_host_name.', host_name) + AND dest_host_name = NVL('&&d_host_name.', dest_host_name) + GROUP BY host_name||' -> '||dest_host_name + ORDER BY 2 DESC NULLS LAST + FETCH FIRST 6 ROWS ONLY +) +SELECT MAX(CASE rn WHEN 1 THEN label END) AS label1, + MAX(CASE rn WHEN 2 THEN label END) AS label2, + MAX(CASE rn WHEN 3 THEN label END) AS label3, + MAX(CASE rn WHEN 4 THEN label END) AS label4, + MAX(CASE rn WHEN 5 THEN label END) AS label5, + MAX(CASE rn WHEN 6 THEN label END) AS label6 + FROM scope +WHERE rn BETWEEN 1 AND 6 +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "Data Guard (DG) REDO Transport Duration (v$redo_dest_resp_histogram)"; +DEF chart_title = "Data Guard (DG) REDO Transport Duration between &&cs_sample_time_from. and &&cs_sample_time_to. UTC"; +DEF xaxis_title = "&&source_dest_host_name."; +DEF vaxis_title = "Duration (Seconds)"; +-- DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +-- DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&s_host_name." "&&d_host_name."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&label1.', id:'1', type:'number'} +PRO ,{label:'&&label2.', id:'2', type:'number'} +PRO ,{label:'&&label3.', id:'3', type:'number'} +PRO ,{label:'&&label4.', id:'4', type:'number'} +PRO ,{label:'&&label5.', id:'5', type:'number'} +PRO ,{label:'&&label6.', id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT time AS timestamp, + CASE host_name||' -> '||dest_host_name WHEN '&&label1.' THEN duration_seconds END AS seconds1, + CASE host_name||' -> '||dest_host_name WHEN '&&label2.' THEN duration_seconds END AS seconds2, + CASE host_name||' -> '||dest_host_name WHEN '&&label3.' THEN duration_seconds END AS seconds3, + CASE host_name||' -> '||dest_host_name WHEN '&&label4.' THEN duration_seconds END AS seconds4, + CASE host_name||' -> '||dest_host_name WHEN '&&label5.' THEN duration_seconds END AS seconds5, + CASE host_name||' -> '||dest_host_name WHEN '&&label6.' THEN duration_seconds END AS seconds6 + FROM &&cs_tools_schema..dbc_redo_dest_histogram + WHERE time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND host_name = NVL('&&s_host_name.', host_name) + AND dest_host_name = NVL('&&d_host_name.', dest_host_name) + AND host_name||' -> '||dest_host_name IN ('&&label1.', '&&label2.', '&&label3.', '&&label4.', '&&label5.', '&&label6.') +) +SELECT ', [new Date('|| + TO_CHAR(q.timestamp, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.timestamp, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.timestamp, 'DD')|| /* day */ + ','||TO_CHAR(q.timestamp, 'HH24')|| /* hour */ + ','||TO_CHAR(q.timestamp, 'MI')|| /* minute */ + ','||TO_CHAR(q.timestamp, 'SS')|| /* second */ + ')'|| + ','||num_format(q.seconds1)|| + ','||num_format(q.seconds2)|| + ','||num_format(q.seconds3)|| + ','||num_format(q.seconds4)|| + ','||num_format(q.seconds5)|| + ','||num_format(q.seconds6)|| + ']' + FROM my_query q + ORDER BY + q.timestamp +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = ''; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_dg_redo_dest_resp_histogram_report.sql b/csierra/cs_dg_redo_dest_resp_histogram_report.sql new file mode 100644 index 0000000..06453ca --- /dev/null +++ b/csierra/cs_dg_redo_dest_resp_histogram_report.sql @@ -0,0 +1,100 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_dg_redo_dest_resp_histogram_report.sql +-- +-- Purpose: Data Guard (DG) REDO Transport Duration Report +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/06/15 +-- +-- Usage: Execute connected to CDB. +-- +-- Enter Source and Destination Hosts when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_dg_redo_dest_resp_histogram_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_dg_redo_dest_resp_histogram_report'; +DEF cs_hours_range_default = '8760'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(time)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM C##IOD.dbc_redo_dest_histogram +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL source_host_name FOR A64 TRUNC; +SELECT DISTINCT host_name AS source_host_name + FROM C##IOD.dbc_redo_dest_histogram + WHERE time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + ORDER BY 1 +/ +PRO +PRO 3. Source Host Name: (opt) +DEF s_host_name = '&3.'; +UNDEF 3; +-- +COL dest_host_name FOR A64 TRUNC; +SELECT DISTINCT dest_host_name + FROM C##IOD.dbc_redo_dest_histogram + WHERE time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND host_name = NVL('&&s_host_name.', host_name) + ORDER BY 1 +/ +PRO +PRO 3. Destination Host Name: (opt) +DEF d_host_name = '&4.'; +UNDEF 4; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&s_host_name." "&&d_host_name." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO SOURCE : "&&s_host_name." +PRO DESTINATION : "&&d_host_name." +-- +COL seconds FOR 999,999,990; +COL frequency FOR 999,990; +BREAK ON source_host_name SKIP PAGE DUPL ON dest_host_name SKIP PAGE DUPL; +-- +PRO +PRO Data Guard (DG) REDO Transport Duration (v$redo_dest_resp_histogram) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT host_name AS source_host_name, dest_host_name, time, duration_seconds AS seconds, frequency + FROM C##IOD.dbc_redo_dest_histogram + WHERE time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND host_name = NVL('&&s_host_name.', host_name) + AND dest_host_name = NVL('&&d_host_name.', dest_host_name) + ORDER BY host_name, dest_host_name, time +/ +-- +CL BREAK COMPUTE; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&s_host_name." "&&d_host_name." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_diag_trace.sql b/csierra/cs_diag_trace.sql new file mode 100644 index 0000000..0bd2093 --- /dev/null +++ b/csierra/cs_diag_trace.sql @@ -0,0 +1 @@ +select value from v$diag_info where name = 'Diag Trace'; \ No newline at end of file diff --git a/csierra/cs_drop_redef_table.sql b/csierra/cs_drop_redef_table.sql new file mode 100644 index 0000000..3dada18 --- /dev/null +++ b/csierra/cs_drop_redef_table.sql @@ -0,0 +1,62 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_drop_redef_table.sql +-- +-- Purpose: Generate commands to drop stale objects from failed Table Redefinition(s) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/20 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_drop_redef_table.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +-- Comands listed by this script must be executed manually inside corresponding PDB(s) +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; +ALTER SESSION SET "_px_cdb_view_enabled" = FALSE; +-- +COL drop_commands FOR A200; +-- +WITH +users AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ con_id, username FROM cdb_users WHERE oracle_maintained = 'N' AND common = 'NO' +) +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ + '/* '||c.name||' #1 '||purge_start||' '||last_purge_date||' */ DROP MATERIALIZED VIEW LOG ON "'||lg.log_owner||'"."'||lg.master||'";' drop_commands + FROM cdb_mview_logs lg, v$containers c + WHERE lg.log_table LIKE 'MLOG$\_'||CHR(37) ESCAPE '\' + AND c.con_id = lg.con_id + AND c.open_mode = 'READ WRITE' + AND c.restricted = 'NO' + AND (lg.con_id, lg.log_owner) IN (SELECT u.con_id, u.username FROM users u) + UNION ALL +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ + '/* '||c.name||' #2 '||LAST_REFRESH_DATE||' '||LAST_REFRESH_END_TIME||' '||STALE_SINCE||' */ DROP MATERIALIZED VIEW "'||mv.owner||'"."'||mv.mview_name||'";' drop_commands + FROM cdb_mviews mv, v$containers c + WHERE mv.mview_name LIKE 'REDEF$\_T'||CHR(37) ESCAPE '\' + AND c.con_id = mv.con_id + AND c.open_mode = 'READ WRITE' + AND c.restricted = 'NO' + AND (mv.con_id, mv.owner) IN (SELECT u.con_id, u.username FROM users u) + UNION ALL +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ + '/* '||c.name||' #3 '||last_analyzed||' */ DROP TABLE "'||tb.owner||'"."'||tb.table_name||'";' drop_commands + FROM cdb_tables tb, v$containers c + WHERE tb.table_name LIKE 'REDEF$\_T'||CHR(37) ESCAPE '\' + AND c.con_id = tb.con_id + AND c.open_mode = 'READ WRITE' + AND c.restricted = 'NO' + AND (tb.con_id, tb.owner) IN (SELECT u.con_id, u.username FROM users u) + ORDER BY + 1 +/ +PRO +PRO Comands listed by this script must be executed manually inside corresponding PDB(s) +PRO \ No newline at end of file diff --git a/csierra/cs_epoch_to_time.sql b/csierra/cs_epoch_to_time.sql new file mode 100644 index 0000000..a44c1e0 --- /dev/null +++ b/csierra/cs_epoch_to_time.sql @@ -0,0 +1,40 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_epoch_to_time.sql +-- +-- Purpose: Convert Epoch to Time +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_epoch_to_time.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET NUM 15; +DEF cs_datetime_full_format = 'YYYY-MM-DD"T"HH24:MI:SS'; +PRO +PRO 1. Enter Epoch: +DEF cs_epoch = '&1.'; +UNDEF 1; +-- +-- note: on 19c consider select dbms_stats.convert_raw_to_date(hextoraw('7877031203192A0C1988C0')) from dual; +-- +WITH +days AS ( +SELECT TO_NUMBER('&&cs_epoch.'||CASE WHEN LENGTH('&&cs_epoch.') <= 10 THEN '000' END) / 1000 / 3600 / 24 AS cnt, + CASE WHEN LENGTH('&&cs_epoch.') > 10 THEN SUBSTR('&&cs_epoch.', 11, 3) END AS ms + FROM DUAL +) +SELECT TO_CHAR(TO_DATE('1970-01-01T00:00:00', '&&cs_datetime_full_format.') + days.cnt, '&&cs_datetime_full_format.')|| + CASE WHEN days.ms IS NOT NULL THEN '.'||days.ms END + AS time + FROM days +/ diff --git a/csierra/cs_estimate_index_size.sql b/csierra/cs_estimate_index_size.sql new file mode 100644 index 0000000..6820616 --- /dev/null +++ b/csierra/cs_estimate_index_size.sql @@ -0,0 +1,56 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_estimate_index_size.sql +-- +-- Purpose: Estimate Index Size +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_estimate_index_size.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +PRO +PRO 1. Enter Index Name: +DEF index_name = '&1.'; +UNDEF 1; +-- +COL schema_name NEW_V schema_name NOPRI; +SELECT owner AS schema_name FROM dba_indexes WHERE index_name = '&&index_name.'; +-- +VAR v_used_bytes NUMBER; +VAR v_alloc_bytes NUMBER; +BEGIN + DBMS_SPACE.create_index_cost ( + ddl => DBMS_METADATA.get_ddl('INDEX', '&&index_name.', '&&schema_name.'), + used_bytes => :v_used_bytes, + alloc_bytes => :v_alloc_bytes + ); +END; +/ +COL used_gb FOR 999,990.000; +COL alloc_gb FOR 999,990.000; +SELECT :v_used_bytes/1e9 AS used_gb, :v_alloc_bytes/1e9 AS alloc_gb FROM DUAL; +-- +ROLLBACK; +DELETE plan_table; +BEGIN +EXECUTE IMMEDIATE('EXPLAIN PLAN FOR '||DBMS_METADATA.get_ddl('INDEX', '&&index_name.', '&&schema_name.')); +END; +/ +COMMIT; +SET HEA ON PAGES 0; +PRO +SELECT plan_table_output FROM +TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', NULL, 'ADVANCED')) +/ +SET HEA ON PAGES 100; +CLEAR COLUMNS; diff --git a/csierra/cs_estimate_table_size.sql b/csierra/cs_estimate_table_size.sql new file mode 100644 index 0000000..67eada9 --- /dev/null +++ b/csierra/cs_estimate_table_size.sql @@ -0,0 +1,72 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_estimate_table_size.sql +-- +-- Purpose: Estimate Table Size +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_estimate_table_size.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +PRO +PRO 1. Enter Table Name: +DEF table_name = '&1.'; +UNDEF 1; +-- +COL schema_name NEW_V schema_name NOPRI; +SELECT owner AS schema_name FROM dba_tables WHERE table_name = '&&table_name.'; +-- +VAR v_used_bytes NUMBER; +VAR v_alloc_bytes NUMBER; +DECLARE + l_rec dba_tables%ROWTYPE; +BEGIN + SELECT * INTO l_rec FROM dba_tables WHERE owner = '&&schema_name.' AND table_name = '&&table_name.'; + -- + IF l_rec.tablespace_name IS NULL THEN + SELECT MAX(tablespace_name) + INTO l_rec.tablespace_name + FROM dba_segments + WHERE owner = '&&schema_name.' + AND segment_name = '&&table_name.' + AND segment_type LIKE 'TABLE%'; + END IF; + -- + DBMS_SPACE.create_table_cost ( + tablespace_name => l_rec.tablespace_name, + avg_row_size => l_rec.avg_row_len, + row_count => l_rec.num_rows, + pct_free => l_rec.pct_free, + used_bytes => :v_used_bytes, + alloc_bytes => :v_alloc_bytes + ); +END; +/ +COL used_gb FOR 999,990.000; +COL alloc_gb FOR 999,990.000; +SELECT :v_used_bytes/1e9 AS used_gb, :v_alloc_bytes/1e9 AS alloc_gb FROM DUAL; +-- +ROLLBACK; +DELETE plan_table; +BEGIN +EXECUTE IMMEDIATE('EXPLAIN PLAN FOR CREATE TABLE &&schema_name..&&table_name._ AS SELECT * FROM &&schema_name..&&table_name.'); +END; +/ +COMMIT; +SET HEA ON PAGES 0; +PRO +SELECT plan_table_output FROM +TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', NULL, 'ADVANCED')) +/ +SET HEA ON PAGES 100; +CLEAR COLUMNS; diff --git a/csierra/cs_extents_map.sql b/csierra/cs_extents_map.sql new file mode 100644 index 0000000..a1a05c2 --- /dev/null +++ b/csierra/cs_extents_map.sql @@ -0,0 +1,261 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_extents_map.sql +-- +-- Purpose: Tablespace Block Map +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to PDB. +-- +-- Parameters: 1. Tablespace Name +-- +-- 2. Grouping +-- +-- [{SEGMENT}|S|PARTITION|P] +-- +-- 3. Coalesce (on Map) Contiguos Extents of same Grouping +-- +-- [{Y}|N] +-- +-- 4. Smallest BLOCK_ID on Top (of Map) or at the Bottom +-- +-- [{BOTTOM}|B|TOP|T] +-- +-- Example(s): $ sqlplus / as sysdba +-- SQL> @cs_extents_map.sql "KIEV" "PARTITION" "Y" "BOTTOM" +-- SQL> @cs_extents_map.sql "KIEV" "P" "Y" "B" +-- SQL> @cs_extents_map.sql KIEV S N T +-- +-- Notes: Source: https://oraboard.wordpress.com/2016/04/22/tablespace-block-map/ +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_extents_map'; +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT tablespace_name + FROM dba_tablespaces + WHERE contents = 'PERMANENT' + ORDER BY 1 +/ +PRO +PRO 1. Tablespace Name: +DEF cs_tablespace_name = '&1.'; +UNDEF 1; +PRO +PRO 2. Grouping: [{SEGMENT}|S|PARTITION|P] +DEF cs_grouping = '&2.'; +UNDEF 2; +COL cs_grouping NEW_V cs_grouping NOPRI; +SELECT CASE WHEN UPPER(NVL('&&cs_grouping.', 'SEGMENT')) LIKE '%P%' THEN 'PARTITION' ELSE 'SEGMENT' END AS cs_grouping FROM DUAL +/ +PRO +PRO 3. Coalesce (on Map) Contiguos Extents of same Grouping (&&cs_grouping.): [{Y}|N] +DEF cs_coalesce_contiguous_extents = '&3.'; +UNDEF 3; +COL cs_coalesce_contiguous_extents NEW_V cs_coalesce_contiguous_extents NOPRI; +SELECT CASE SUBSTR(UPPER(TRIM(NVL('&&cs_coalesce_contiguous_extents.', 'Y'))), 1, 1) WHEN 'N' THEN 'N' ELSE 'Y' END AS cs_coalesce_contiguous_extents FROM DUAL +/ +PRO +PRO 4. Smallest BLOCK_ID on Top (of Map) or at the Bottom: [{BOTTOM}|B|TOP|T] +DEF cs_top_or_bottom = '&4.'; +UNDEF 4; +COL cs_top_or_bottom NEW_V cs_top_or_bottom NOPRI; +SELECT CASE SUBSTR(UPPER(TRIM(NVL('&&cs_top_or_bottom.', 'BOTTOM'))), 1, 1) WHEN 'T' THEN 'TOP' ELSE 'BOTTOM' END AS cs_top_or_bottom FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_tablespace_name.' cs_file_name FROM DUAL; +-- +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_tablespace_name." "&&cs_grouping." "&&cs_coalesce_contiguous_extents." "&&cs_top_or_bottom."'; +-- +SPO &&cs_file_name..html +SET HEA OFF PAGES 0 SERVEROUT ON; +DECLARE + l_rowcount NUMBER := 0; + l_group_count NUMBER := 0; + l_cellcolor VARCHAR2(10); + l_cellwidth NUMBER(3); + l_file_id NUMBER := -1; + l_datafile VARCHAR2(1024); + l_segment VARCHAR2(512); + l_prior_segment VARCHAR2(512); + l_blocks NUMBER := 0; + l_extents NUMBER := 0; + l_tot_extents NUMBER := 0; + l_block_id_from NUMBER; + l_block_id_to NUMBER; + l_group VARCHAR2(512); + l_prior_group VARCHAR2(512); + l_busy_blocks NUMBER := 0; + l_free_blocks NUMBER := 0; + l_block_size NUMBER; + l_map_row NUMBER := 0; + l_prior_file_id NUMBER; + -- + PROCEDURE print_line (p_line IN VARCHAR2) + IS + BEGIN + DBMS_OUTPUT.put_line(p_line); + END print_line; + -- + PROCEDURE put_line (l_prior_file_id IN NUMBER, p_map_row IN NUMBER, p_group_count IN NUMBER, p_line IN VARCHAR2) + IS + BEGIN + INSERT INTO plan_table (statement_id, plan_id, parent_id, id, remarks) VALUES ('&&cs_file_date_time.', l_prior_file_id, p_map_row, p_group_count, p_line); + --print_line(p_line); + END put_line; +BEGIN + SELECT block_size INTO l_block_size FROM dba_tablespaces WHERE tablespace_name = '&&cs_tablespace_name.'; + -- initial html + print_line(''); + print_line(''); + print_line(''); + print_line(''); + print_line('

&&cs_tablespace_name. Tablespace Block Map

'); + print_line(''); + print_line('
');
+  print_line('DATE_TIME    : &&cs_date_time.Z');
+  print_line('REFERENCE    : &&cs_reference.');
+  print_line('LOCALE       : &&cs_realm. &&cs_region. &&cs_locale.');
+  print_line('DATABASE     : &&cs_db_name_u. (&&cs_db_version.) STARTUP:&&cs_startup_time.');
+  print_line('CONTAINER    : &&cs_db_name..&&cs_con_name. (&&cs_con_id.) &&cs_pdb_open_mode.');
+  print_line('CPU          : CORES:&&cs_num_cpu_cores. THREADS:&&cs_num_cpus. COUNT:&&cs_cpu_count. ALLOTTED:&&cs_allotted_cpu. PLAN:&&cs_resource_manager_plan.');
+  print_line('HOST         : &&cs_host_name.');
+  print_line('CONNECT_STRNG: &&cs_easy_connect_string.');
+  print_line('SCRIPT       : &&cs_script_name..sql');
+  print_line('KIEV_VERSION : &&cs_kiev_version. (&&cs_schema_name.)');
+  print_line('
'); + print_line('
'); + -- open cursor + FOR l_row IN ( +SELECT file_id, + block_id, + block_id + blocks - 1 AS end_block, + blocks, + owner, + segment_name, + partition_name, + segment_type + FROM dba_extents + WHERE tablespace_name = '&&cs_tablespace_name.' + UNION ALL +SELECT file_id, + block_id, + block_id + blocks - 1 AS end_block, + blocks, + 'free' AS owner, + 'free' AS segment_name, + NULL AS partition_name, + NULL AS segment_type + FROM dba_free_space + WHERE tablespace_name = '&&cs_tablespace_name.' + ORDER BY 1, 2 + ) + LOOP + l_tot_extents := l_tot_extents + 1; + IF l_row.segment_name = 'free' THEN l_free_blocks := l_free_blocks + l_row.blocks; ELSE l_busy_blocks := l_busy_blocks + l_row.blocks; END IF; + IF '&&cs_grouping.' = 'PARTITION' THEN l_segment := TRIM('.' FROM l_row.segment_name||'.'||l_row.partition_name); ELSE l_segment := l_row.segment_name; END IF; + IF '&&cs_coalesce_contiguous_extents.' = 'Y' THEN l_group := l_row.file_id||' '||l_segment; ELSE l_group := l_row.file_id||' '||l_segment||' '||l_row.block_id; END IF; + -- + IF l_rowcount = 0 THEN + l_prior_segment := l_segment; + l_prior_group := l_group; + l_prior_file_id := l_row.file_id; + l_block_id_from := l_row.block_id; + END IF; + l_rowcount := l_rowcount + 1; + -- + IF l_group = l_prior_group THEN + l_block_id_to := l_row.end_block; + l_blocks := l_blocks + l_row.blocks; + l_extents := l_extents + 1; + ELSE + -- max of 50 cells per row + IF mod(l_group_count,50) = 0 THEN + l_map_row := l_map_row + 1; + put_line(l_prior_file_id, l_map_row, l_group_count, '
'); + l_map_row := l_map_row + 1; + END IF; + l_group_count := l_group_count + 1; + -- set cell color + IF l_prior_segment = 'free' THEN l_cellcolor := 'Azure'; ELSE l_cellcolor := 'Gray'; END IF; + -- display space cells + put_line(l_prior_file_id, l_map_row, l_group_count, '
'); + -- + l_prior_segment := l_segment; + l_prior_group := l_group; + l_prior_file_id := l_row.file_id; + l_block_id_from := l_row.block_id; + l_block_id_to := l_row.end_block; + l_blocks := l_row.blocks; + l_extents := 1; + END IF; + END LOOP; + -- set cell color for last cell and display it + IF l_prior_segment = 'free' THEN l_cellcolor := 'Azure'; ELSE l_cellcolor := 'Gray'; END IF; + put_line(l_prior_file_id, l_map_row, l_group_count, '
'); + l_map_row := l_map_row + 1; + put_line(l_prior_file_id, l_map_row, l_group_count, '
'); + -- process put lines + FOR i IN (SELECT plan_id AS file_id, parent_id AS map_row, id AS group_count, remarks AS line FROM plan_table WHERE statement_id = '&&cs_file_date_time.' ORDER BY plan_id, CASE '&&cs_top_or_bottom.' WHEN 'BOTTOM' THEN -1 ELSE 1 END * parent_id, id) + LOOP + -- check if a new datafile + IF i.file_id <> l_file_id THEN + l_file_id := i.file_id; + SELECT name INTO l_datafile FROM v$datafile WHERE file#=l_file_id; + print_line('
'||'File '||l_file_id||':' ||l_datafile||'
'); + END IF; + -- + print_line(i.line); + END LOOP; + -- javascript to color selected segments + print_line(''); + -- closing html tags + print_line('
'); + print_line('
Notes:
'); + print_line('
1. Total Extents on &&cs_tablespace_name. Tablespace:'||l_tot_extents||'. Total Blocks:'||(l_busy_blocks + l_free_blocks)||'('||ROUND((l_busy_blocks + l_free_blocks) * l_block_size / POWER(10,9), 1)||'GB). Busy Blocks:'||l_busy_blocks||'('||ROUND(l_busy_blocks * l_block_size / POWER(10,9), 1)||'GB). Free Blocks:'||l_free_blocks||'('||ROUND(l_free_blocks * l_block_size / POWER(10,9), 1)||'GB). Space utilization:'||ROUND(100 * l_busy_blocks / (l_busy_blocks + l_free_blocks), 1)||'%
'); + print_line('
2. The Azure squares are those free, the Gray ones are those busy, and the Blue ones are those selected by you (with a click on a Grey square).
'); + print_line('
3. If you click on a Gray square corresponding to a Group (&&cs_grouping.), it will Blue all other Extents in all datafiles belonging to that Group. Click again to reset.
'); + print_line('
4. A tooltip appears on hover with: Group (&&cs_grouping.), number of blocks, blocks range, and number of extents. E.g.: TABLE_NAME,blocks(block_id_from-block_id_to),extents.
'); + print_line('
5. The smallest BLOCK_ID is at the &&cs_top_or_bottom. of the Map (on the left-most square).
'); + IF '&&cs_coalesce_contiguous_extents.' = 'Y' THEN print_line('
6. Contiguous Extents belonging to the same Grouping (&&cs_grouping.) have been Coalesced on this Map.
'); END IF; + print_line('

&&report_foot_note.
'); + print_line(''); + print_line(''); +END; +/ +SET HEA ON PAGES 100 SERVEROUT OFF; +PRO
+L 59 80
+PRO 
+-- +@@cs_internal/cs_spool_tail_chart.sql +ROLLBACK; +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_foreign_key_fk_constraints_missing_indexes.sql b/csierra/cs_foreign_key_fk_constraints_missing_indexes.sql new file mode 100644 index 0000000..c16a041 --- /dev/null +++ b/csierra/cs_foreign_key_fk_constraints_missing_indexes.sql @@ -0,0 +1,81 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_foreign_key_fk_constraints_missing_indexes.sql +-- +-- Purpose: Generate DDL to create missing Indexes to support FK constraints +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/04 +-- +-- Usage: Execute connected to PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_foreign_key_fk_constraints_missing_indexes.sql +-- +-- Notes: https://andrewfraserdba.com/2017/03/10/oracle-foreign-key-constraints-with-missing-indexes/ +-- https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4530093713805#26568859366976 +-- +--------------------------------------------------------------------------------------- +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET HEA OFF PAGES 0; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; +-- +COL ddl_statement FOR A300; +-- +WITH cons AS ( + SELECT c.owner + , c.table_name + , c.constraint_name + , c.r_owner + , MAX ( CASE cc.position WHEN 1 THEN cc.column_name END ) AS cname1 + , MAX ( CASE cc.position WHEN 2 THEN cc.column_name END ) AS cname2 + , MAX ( CASE cc.position WHEN 3 THEN cc.column_name END ) AS cname3 + , MAX ( CASE cc.position WHEN 4 THEN cc.column_name END ) AS cname4 + , MAX ( CASE cc.position WHEN 5 THEN cc.column_name END ) AS cname5 + , MAX ( CASE cc.position WHEN 6 THEN cc.column_name END ) AS cname6 + , MAX ( CASE cc.position WHEN 7 THEN cc.column_name END ) AS cname7 + , MAX ( CASE cc.position WHEN 8 THEN cc.column_name END ) AS cname8 + , COUNT(*) AS col_cnt + FROM dba_constraints c + JOIN dba_cons_columns cc ON cc.constraint_name = c.constraint_name AND cc.owner = c.owner + WHERE c.constraint_type = 'R' + AND cc.owner IN (SELECT username FROM dba_users WHERE oracle_maintained = 'N' AND common = 'NO') + GROUP BY c.table_name , c.constraint_name , c.owner , c.r_owner +) , inds AS ( + SELECT cons.owner + , cons.table_name + , cons.constraint_name + , cons.r_owner + , /*LOWER*/ ( cons.cname1 || NVL2 ( cons.cname2 , ',' || cons.cname2 , NULL ) + || NVL2 ( cons.cname3 , ',' || cons.cname3 , NULL ) || NVL2 ( cname4 , ',' || cname4 , NULL ) + || NVL2 ( cons.cname5 , ',' || cons.cname5 , NULL ) || NVL2 ( cname6 , ',' || cname6 , NULL ) + || NVL2 ( cons.cname7 , ',' || cons.cname7 , NULL ) || NVL2 ( cname8 , ',' || cname8 , NULL ) + ) AS column_list + FROM cons + WHERE cons.col_cnt > ALL ( + SELECT COUNT(*) + FROM dba_ind_columns ic + WHERE ic.table_name = cons.table_name + AND ic.table_owner = cons.owner + AND ic.column_name IN ( cons.cname1 , cons.cname2 , cons.cname3 , cons.cname4 , cons.cname5 , cons.cname6 , cons.cname7 , cons.cname8 ) + AND ic.column_position <= cons.col_cnt + GROUP BY ic.index_name + ) +) +SELECT + -- inds.owner + -- , inds.table_name + -- , t.num_rows + -- , t.blocks * 8/1024/1024 AS gb + -- , inds.r_owner + '/* tblocks='||t.blocks||' trows='||t.num_rows||' */ CREATE INDEX ' || inds.owner || '.' || inds.constraint_name || ' ON ' || inds.owner || '.' || inds.table_name || '(' || inds.column_list ||') ONLINE;' AS ddl_statement + FROM inds + JOIN dba_tables t ON t.table_name = inds.table_name AND t.owner = inds.owner + WHERE t.blocks > 5 AND NOT t.table_name LIKE 'KIEV%' + ORDER BY t.blocks DESC, inds.owner , inds.table_name , inds.constraint_name +/ +-- +SET HEA ON PAGES 100; \ No newline at end of file diff --git a/csierra/cs_fs.sql b/csierra/cs_fs.sql new file mode 100644 index 0000000..e7cbdba --- /dev/null +++ b/csierra/cs_fs.sql @@ -0,0 +1,104 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_fs.sql +-- +-- Purpose: Find SQL statements matching some string +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/14 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter string to match when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_fs.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_fs'; +-- +PRO 1. Search String: SQL_ID or SQL_HV or PHV or SQL_TEXT piece: (e.g.: ScanQuery, getValues, TableName, IndexName, Scan%Instances) +DEF cs_search_string = '&1.'; +UNDEF 1; +COL cs_search_string NEW_V cs_search_string NOPRI; +SELECT /* &&cs_script_name. */ TRIM('&&cs_search_string.') AS cs_search_string FROM DUAL +/ +-- +PRO +PRO 2. Days for AWR search?: [{0}|0-61] *** note: awr search is slow! *** +DEF cs_awr_search_days = '&2.'; +UNDEF 2; +COL cs_awr_search_days NEW_V cs_awr_search_days NOPRI; +SELECT CASE WHEN TO_NUMBER('&&cs_awr_search_days.') BETWEEN 0 AND 61 THEN TRIM('&&cs_awr_search_days.') ELSE '0' END AS cs_awr_search_days FROM DUAL +/ +COL cs_min_snap_id NEW_V cs_min_snap_id NOPRI; +SELECT TRIM(TO_CHAR(NVL(MAX(snap_id), 0))) AS cs_min_snap_id FROM dba_hist_snapshot WHERE end_interval_time < SYSDATE - TO_NUMBER('&&cs_awr_search_days.') +/ +-- +PRO +PRO 3. Include SYS Parsing Schema?: [{N}|N,Y] +DEF cs_include_sys = '&3.'; +UNDEF 3; +COL cs_include_sys NEW_V cs_include_sys NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs_include_sys.')) IN ('N', 'Y') THEN UPPER(TRIM('&&cs_include_sys.')) ELSE 'N' END AS cs_include_sys FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_search_string." "&&cs_awr_search_days." "&&cs_include_sys." +@@cs_internal/cs_spool_id.sql +-- +PRO SEARCH_STRING: "&&cs_search_string." +PRO AWR_DAYS: "&&cs_awr_search_days." +PRO INCLUDE_SYS: "&&cs_include_sys." +-- +-- 1 gv$sql - sql statistics +-- +DEF cs_sql_id_col = 'PRI'; +DEF cs_uncommon_col = 'NOPRI'; +DEF cs_delta_col = 'NOPRI'; +DEF cs_execs_delta_h = '&&cs_last_snap_mins. mins'; +@@cs_internal/cs_latency_internal_cols.sql +@@cs_internal/cs_fs_internal_query_1.sql +-- +-- 2 v$sqlstats - sql statistics +-- +@@cs_internal/cs_latency_internal_cols.sql +CLEAR BREAK; +@@cs_internal/cs_fs_internal_query_2.sql +-- +-- 3 dba_hist_sqlstat - sql statistics +-- +DEF cs_execs_delta_h = 'whole history'; +@@cs_internal/cs_latency_internal_cols.sql +COL begin_timestamp FOR A23 HEA 'Begin Timestamp' PRI; +COL end_timestamp FOR A23 HEA 'End Timestamp' PRI; +CLEAR BREAK; +@@cs_internal/cs_fs_internal_query_3.sql +-- +-- 4 v$sqlstats - sql text +-- +@@cs_internal/cs_fs_internal_query_4.sql +-- +-- 5 dba_hist_sqltext - sql text +-- +@@cs_internal/cs_fs_internal_query_5.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_search_string." "&&cs_awr_search_days." "&&cs_include_sys." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_hanganalyze.sql b/csierra/cs_hanganalyze.sql new file mode 100644 index 0000000..042b0e8 --- /dev/null +++ b/csierra/cs_hanganalyze.sql @@ -0,0 +1,32 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_hanganalyze.sql +-- +-- Purpose: Generate Hanganalyze Trace +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_hanganalyze.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +ALTER SESSION SET tracefile_identifier = 'iod_hanganalyze'; +COL trace_file NEW_V trace_file; +SELECT value trace_file FROM v$diag_info WHERE name = 'Default Trace File'; +oradebug setmypid +oradebug unlimit +oradebug hanganalyze 3 +oradebug hanganalyze 3 +oradebug hanganalyze 3 +oradebug hanganalyze 3 +oradebug hanganalyze 3 +oradebug hanganalyze 3 +oradebug tracefile_name +HOS cp &&trace_file. /tmp diff --git a/csierra/cs_hexdump_to_timestamp.sql b/csierra/cs_hexdump_to_timestamp.sql new file mode 100644 index 0000000..46a3323 --- /dev/null +++ b/csierra/cs_hexdump_to_timestamp.sql @@ -0,0 +1,50 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_hexdump_to_timestamp.sql +-- +-- Purpose: Convert Hexadecimal Dump to Time +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_hexdump_to_timestamp.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +DEF timestamp_as_hexdump = '&1.'; +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF6'; +-- +COL time FOR A20; +COL timestamp FOR A30; +-- +WITH +FUNCTION get_date (p_hexdump IN VARCHAR2) +RETURN DATE +IS + l_date DATE; +BEGIN + DBMS_STATS.convert_raw_value(rawval => HEXTORAW(p_hexdump), resval => l_date); + RETURN l_date; +END get_date; +FUNCTION get_timestamp (p_hexdump IN VARCHAR2) +RETURN TIMESTAMP +IS +BEGIN + RETURN + TO_TIMESTAMP( + TO_CHAR(get_date(p_hexdump), 'YYYY-MM-DD"T"HH24:MI:SS')|| + ROUND(TO_NUMBER(SUBSTR('&×tamp_as_hexdump.', LENGTH('&×tamp_as_hexdump.') - 7), 'XXXXXXXX')/POWER(10,9), 6), + 'YYYY-MM-DD"T"HH24:MI:SS.FF6'); +END get_timestamp; +SELECT get_date('&×tamp_as_hexdump.') AS time, get_timestamp('&×tamp_as_hexdump.') AS timestamp FROM DUAL +/ +-- \ No newline at end of file diff --git a/csierra/cs_high_execution_rate_rps.sql b/csierra/cs_high_execution_rate_rps.sql new file mode 100644 index 0000000..aa81bf1 --- /dev/null +++ b/csierra/cs_high_execution_rate_rps.sql @@ -0,0 +1,158 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_high_execution_rate_rps.sql +-- +-- Purpose: List executions by time for a given SQL_ID with high RPS +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_high_execution_rate_rps.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_high_execution_rate_rps'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +PRO +PRO 2. Seconds: [{1}|1-60] +DEF cs_seconds = '&2.'; +UNDEF 2; +COL cs_seconds NEW_V cs_seconds NOPRI; +SELECT CASE WHEN TO_NUMBER('&&cs_seconds.') BETWEEN 1 AND 60 THEN '&&cs_seconds.' ELSE '1' END AS cs_seconds FROM DUAL +/ +-- +@@cs_internal/cs_last_snap.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_seconds." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO SECONDS : &&cs_seconds. +-- +@@cs_internal/cs_print_sql_text.sql +PRO +PRO Samples (v$sqlstats) +PRO ~~~~~~~ +SET SERVEROUT ON; +DECLARE + l_begin_timestamp TIMESTAMP(6) := SYSTIMESTAMP; + l_exit_timestamp TIMESTAMP(6) := l_begin_timestamp + INTERVAL '&&cs_seconds.' SECOND; + l_timestamp TIMESTAMP(6); + l_parse_calls NUMBER; + l_executions NUMBER; + l_rows_processed NUMBER; + l_us_delta NUMBER; + l_parse_calls_total NUMBER := 0; + l_executons_total NUMBER := 0; + l_rows_processed_total NUMBER := 0; + l_us_total NUMBER := 0; + l_parse_calls_delta NUMBER; + l_executions_delta NUMBER; + l_rows_processed_delta NUMBER; + l_timestamp_prior TIMESTAMP(6) := l_begin_timestamp; + l_parse_calls_prior NUMBER; + l_executions_prior NUMBER; + l_rows_processed_prior NUMBER; + l_timestamp_zero_begin TIMESTAMP(6) := l_begin_timestamp; + l_timestamp_zero_end TIMESTAMP(6); + l_us_delta_zero NUMBER; + l_samples_zero NUMBER := 0; + l_samples_total NUMBER := 0; +BEGIN + WHILE SYSTIMESTAMP < l_exit_timestamp + LOOP + SELECT parse_calls, executions, rows_processed INTO l_parse_calls, l_executions, l_rows_processed FROM v$sqlstats WHERE sql_id = '&&cs_sql_id.'; + l_timestamp := SYSTIMESTAMP; + l_us_delta := ((86400 * EXTRACT(DAY FROM (l_timestamp - l_timestamp_prior)) + (3600 * EXTRACT(HOUR FROM (l_timestamp - l_timestamp_prior))) + (60 * EXTRACT(MINUTE FROM (l_timestamp - l_timestamp_prior))) + EXTRACT(SECOND FROM (l_timestamp - l_timestamp_prior)))) * 1e6; + l_parse_calls_delta := l_parse_calls - l_parse_calls_prior; + l_executions_delta := l_executions - l_executions_prior; + l_rows_processed_delta := l_rows_processed - l_rows_processed_prior; + l_samples_total := l_samples_total + 1; + IF l_us_delta > 0 THEN + l_us_total := l_us_total + l_us_delta; + l_parse_calls_total := NVL(l_parse_calls_total, 0) + l_parse_calls_delta; + l_executons_total := NVL(l_executons_total, 0) + l_executions_delta; + l_rows_processed_total := NVL(l_rows_processed_total, 0) + l_rows_processed_delta; + END IF; + -- + IF l_parse_calls_delta > 0 OR l_executions_delta > 0 OR l_rows_processed_delta > 0 THEN + IF l_timestamp_zero_begin IS NOT NULL AND l_timestamp_zero_end IS NOT NULL THEN + l_us_delta_zero := ((86400 * EXTRACT(DAY FROM (l_timestamp_zero_end - l_timestamp_zero_begin)) + (3600 * EXTRACT(HOUR FROM (l_timestamp_zero_end - l_timestamp_zero_begin))) + (60 * EXTRACT(MINUTE FROM (l_timestamp_zero_end - l_timestamp_zero_begin))) + EXTRACT(SECOND FROM (l_timestamp_zero_end - l_timestamp_zero_begin)))) * 1e6; + DBMS_OUTPUT.put_line ( + RPAD(TO_CHAR(l_timestamp_zero_begin, 'YYYY-MM-DD"T"HH24:MI:SS.FF6'), 26, ' ')||' - '|| + RPAD(TO_CHAR(l_timestamp_zero_end, 'YYYY-MM-DD"T"HH24:MI:SS.FF6'), 26, ' ')|| + LPAD(TO_CHAR(l_us_delta_zero, '999,999,990'), 12, ' ')||' us'|| + LPAD(TO_CHAR(0, '999,990'), 8, ' ')||' parses'|| + LPAD(TO_CHAR(0, '999,990'), 8, ' ')||' executions'|| + LPAD(TO_CHAR(0, '999,999,990'), 12, ' ')||' rows'|| + LPAD(TO_CHAR(l_samples_zero, '9,999,990'), 10, ' ')||' samples' + ); + END IF; + -- + IF l_timestamp_prior IS NOT NULL AND l_timestamp IS NOT NULL THEN + DBMS_OUTPUT.put_line ( + RPAD(TO_CHAR(l_timestamp_prior, 'YYYY-MM-DD"T"HH24:MI:SS.FF6'), 26, ' ')||' - '|| + RPAD(TO_CHAR(l_timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF6'), 26, ' ')|| + LPAD(TO_CHAR(l_us_delta, '999,999,990'), 12, ' ')||' us'|| + LPAD(TO_CHAR(l_parse_calls_delta, '999,990'), 8, ' ')||' parses'|| + LPAD(TO_CHAR(l_executions_delta, '999,990'), 8, ' ')||' executions'|| + LPAD(TO_CHAR(l_rows_processed_delta, '999,999,990'), 12, ' ')||' rows' + ); + END IF; + l_timestamp_zero_begin := l_timestamp; + l_timestamp_zero_end := NULL; + l_samples_zero := 0; + ELSE + l_timestamp_zero_end := l_timestamp; + l_samples_zero := NVL(l_samples_zero, 0) + 1; + END IF; + -- + l_timestamp_prior := l_timestamp; + l_parse_calls_prior := l_parse_calls; + l_executions_prior := l_executions; + l_rows_processed_prior := l_rows_processed; + END LOOP; + -- + DBMS_OUTPUT.put_line('---'); + DBMS_OUTPUT.put_line ( + RPAD(TO_CHAR(l_begin_timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF6'), 26, ' ')||' - '|| + RPAD(TO_CHAR(l_timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF6'), 26, ' ')|| + LPAD(TO_CHAR(l_us_total, '999,999,990'), 12, ' ')||' us'|| + LPAD(TO_CHAR(l_parse_calls_total, '999,990'), 8, ' ')||' parses'|| + LPAD(TO_CHAR(l_executons_total, '999,990'), 8, ' ')||' executions'|| + LPAD(TO_CHAR(l_rows_processed_total, '999,999,990'), 12, ' ')||' rows'|| + LPAD(TO_CHAR(l_samples_total, '9,999,990'), 10, ' ')||' samples' + ); +END; +/ +SET SERVEROUT OFF; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_seconds." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_index_part_reorg.sql b/csierra/cs_index_part_reorg.sql new file mode 100644 index 0000000..c9037e0 --- /dev/null +++ b/csierra/cs_index_part_reorg.sql @@ -0,0 +1,114 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_index_part_reorg.sql +-- +-- Purpose: Calculate index reorg savings +-- +-- Author: Rodrigo Righetti +-- +-- Version: 2019/04/16 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter Owner, Table and Index when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_index_part_reorg.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +col partition_name for a20 +set pages 67 +set lines 150 + +PRO 1. Table Owner: +DEF table_owner = '&1.'; +SELECT DISTINCT UPPER(owner) table_owner + FROM dba_tables + WHERE owner = UPPER(TRIM('&&table_owner.')) +/ + +PRO 2. Table Name: +DEF table_name = '&2.'; +SELECT DISTINCT UPPER(table_name) table_name + FROM dba_tables + WHERE table_name = UPPER(TRIM('&&table_name.')) +/ + +PRO 3. Index Name: +DEF index_name = '&3.'; +SELECT DISTINCT UPPER(index_name) index_name + FROM dba_indexes + WHERE index_name = UPPER(TRIM('&&index_name.')) +/ + + +WITH ca AS ( + SELECT /*+ MATERIALIZE */ + SUM(avg_col_len) actual_size, + SUM(avg_col_len) * 1.25 est_size + FROM + dba_tab_columns + WHERE + table_name = '&&table_name.' + and owner = '&&table_owner.' + AND column_name IN ( + SELECT + column_name + FROM + dba_ind_columns + WHERE + index_name = '&&index_name.' + ) +), ps AS ( + SELECT /*+ MATERIALIZE */ + partition_name, + round(bytes / POWER(2,20), 2) size_mb + FROM + dba_segments + WHERE + segment_name = '&&index_name.' +), pr AS ( + SELECT /*+ MATERIALIZE */ + partition_name, + num_rows + FROM + dba_ind_partitions + WHERE + index_name = '&&index_name.' +) +SELECT + * +FROM + ( + SELECT + pr.partition_name, + pr.num_rows, + ps.size_mb, + round((ca.actual_size * pr.num_rows) / POWER(2,20), 2) est_used_size_mb, + round((ca.est_size * pr.num_rows) / POWER(2,20), 2) est_rebuild_size_mb, + round((1 -(((ca.est_size * pr.num_rows) / POWER(2,20)) / ps.size_mb)) * 100, 2) savings_pct + FROM + pr, + ps, + ca + WHERE + pr.partition_name = ps.partition_name + ORDER BY + round((1 -(((ca.est_size * pr.num_rows) / POWER(2,20)) / ps.size_mb)) * 100, 2) + ) +UNION ALL +SELECT + 'TOTAL', + SUM(pr.num_rows) num_rows, + SUM(ps.size_mb) size_mb, + SUM(round((ca.actual_size * pr.num_rows) / POWER(2,20), 2)) est_used_size_mb, + SUM(round((ca.est_size * pr.num_rows) / POWER(2,20), 2)) est_rebuild_size_mb, + round((1 -(SUM(round((ca.est_size * pr.num_rows) / POWER(2,20), 2)) / SUM(ps.size_mb))) * 100, 2) savings_pct +FROM + pr, + ps, + ca +WHERE + pr.partition_name = ps.partition_name; \ No newline at end of file diff --git a/csierra/cs_index_rebuild_hist_report.sql b/csierra/cs_index_rebuild_hist_report.sql new file mode 100644 index 0000000..aeb43ea --- /dev/null +++ b/csierra/cs_index_rebuild_hist_report.sql @@ -0,0 +1,142 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_index_rebuild_hist_report.sql +-- +-- Purpose: Index Rebuild History (IOD_REPEATING_SPACE_MAINTENANCE log) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/25 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter range of dates, and Table when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_index_rebuild_hist_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_index_rebuild_hist_report'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL owner FOR A30 TRUNC; +SELECT DISTINCT h.owner + FROM &&cs_tools_schema..index_rebuild_hist h, + cdb_users u + WHERE '&&cs_con_name.' IN ('CDB$ROOT', h.pdb_name) + AND (h.ddl_begin_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') OR + h.ddl_end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) + AND u.con_id = h.con_id + AND u.username = h.owner + AND u.oracle_maintained = 'N' + AND u.username NOT LIKE 'C##'||CHR(37) + ORDER BY 1 +/ +PRO +PRO 3. Index Owner (opt): +DEF cs2_index_owner = '&3.'; +UNDEF 3; +COL cs2_index_owner NEW_V cs2_index_owner NOPRI; +SELECT UPPER(TRIM('&&cs2_index_owner.')) cs2_index_owner FROM DUAL +/ +-- +COL index_name FOR A30 TRUNC; +SELECT DISTINCT h.index_name + FROM &&cs_tools_schema..index_rebuild_hist h, + cdb_users u + WHERE '&&cs_con_name.' IN ('CDB$ROOT', h.pdb_name) + AND h.owner = COALESCE('&&cs2_index_owner.', h.owner) + AND (h.ddl_begin_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') OR + h.ddl_end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) + AND u.con_id = h.con_id + AND u.username = h.owner + AND u.oracle_maintained = 'N' + AND u.username NOT LIKE 'C##'||CHR(37) + ORDER BY 1 +/ +PRO +PRO 4. Index Name (opt): +DEF cs2_index_name = '&4.'; +UNDEF 4; +COL cs2_index_name NEW_V cs2_index_name NOPRI; +SELECT UPPER(TRIM('&&cs2_index_name.')) cs2_index_name FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_index_owner." "&&cs2_index_name." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO INDEX_OWNER : "&&cs2_index_owner." +PRO INDEX_NAME : "&&cs2_index_name." +-- +COL ddl_begin_time FOR A19; +COL ddl_end_time FOR A19; +COL seconds FOR 999,990 HEA 'DDL|SECONDS'; +COL pdb_name FOR A30 TRUNC; +COL owner FOR A30 TRUNC; +COL index_name FOR A30 TRUNC; +COL size_mbs_before FOR 999,990.0 HEA 'SIZE_MBs|BEFORE'; +COL size_mbs_after FOR 999,990.0 HEA 'SIZE_MBs|AFTER'; +COL savings FOR 999,990.0 HEA 'SAVINGS|MBs'; +COL perc FOR 999,990.0 HEA 'SAVINGS|PERC%'; +COL ddl_statement FOR A100 TRUNC; +COL error_message FOR A100 TRUNC; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF seconds size_mbs_before size_mbs_after savings ON REPORT; +-- +SELECT TO_CHAR(h.ddl_begin_time, '&&cs_datetime_full_format.') AS ddl_begin_time, + TO_CHAR(h.ddl_end_time, '&&cs_datetime_full_format.') AS ddl_end_time, + ROUND((h.ddl_end_time - h.ddl_begin_time) * 24 * 3600) AS seconds, + h.pdb_name, + h.owner, + h.index_name, + h.size_mbs_before, + h.size_mbs_after, + (h.size_mbs_before - h.size_mbs_after) AS savings, + ROUND(100 * (h.size_mbs_before - h.size_mbs_after) / NULLIF(h.size_mbs_before, 0), 1) AS perc, + h.ddl_statement, + h.error_message + FROM &&cs_tools_schema..index_rebuild_hist h, + cdb_users u + WHERE '&&cs_con_name.' IN ('CDB$ROOT', h.pdb_name) + AND h.owner = COALESCE('&&cs2_index_owner.', h.owner) + AND h.index_name = COALESCE('&&cs2_index_name.', h.index_name) + AND (h.ddl_begin_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') OR + h.ddl_end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) + AND u.con_id = h.con_id + AND u.username = h.owner + AND u.oracle_maintained = 'N' + AND u.username NOT LIKE 'C##'||CHR(37) + ORDER BY + h.snap_time, + h.ddl_begin_time +/ +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_index_owner." "&&cs2_index_name." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_index_usage.sql b/csierra/cs_index_usage.sql new file mode 100644 index 0000000..6496ced --- /dev/null +++ b/csierra/cs_index_usage.sql @@ -0,0 +1,199 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_index_usage.sql +-- +-- Purpose: Index Usage (is an index still in use?) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/01/09 +-- +-- Usage: Execute connected to PDB +-- +-- Enter owner, table and index +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_index_usage.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_index_usage'; +-- +COL username FOR A30; +SELECT username + FROM dba_users + WHERE oracle_maintained = 'N' + AND common = 'NO' + ORDER BY + username +/ +PRO +PRO 1. Table Owner: +DEF table_owner = '&1.'; +UNDEF 1; +COL p_owner NEW_V p_owner FOR A30 NOPRI; +SELECT username AS p_owner + FROM dba_users + WHERE oracle_maintained = 'N' + AND common = 'NO' + AND username = UPPER(TRIM('&&table_owner.')) + AND ROWNUM = 1 +/ +-- +COL table_name FOR A30; +SELECT table_name, blocks, num_rows + FROM dba_tables + WHERE owner = '&&p_owner.' + ORDER BY + table_name +/ +PRO +PRO 2. Table Name: +DEF table_name = '&2.'; +UNDEF 2; +COL p_table_name NEW_V p_table_name NOPRI; +SELECT table_name AS p_table_name + FROM dba_tables + WHERE owner = '&&p_owner.' + AND table_name = UPPER(TRIM('&&table_name.')) + AND ROWNUM = 1 +/ +-- +COL index_name FOR A30; +SELECT index_name, leaf_blocks + FROM dba_indexes + WHERE owner = '&&p_owner.' + AND table_name = '&&p_table_name.' + ORDER BY + index_name +/ +PRO +PRO 3. Index Name: +DEF index_name = '&3.' +UNDEF 3; +DEF p_index_name = ''; +COL p_index_name NEW_V p_index_name NOPRI; +SELECT index_name AS p_index_name + FROM dba_indexes + WHERE owner = '&&p_owner.' + AND table_name = '&&p_table_name.' + AND index_name = UPPER(TRIM('&&index_name.')) + AND ROWNUM = 1 +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&p_owner..&&p_table_name..&&p_index_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_table_name." "&&p_index_name." +@@cs_internal/cs_spool_id.sql +-- +PRO TABLE_OWNER : "&&p_owner." +PRO TABLE_NAME : "&&p_table_name." +PRO INDEX_NAME : "&&p_index_name." +-- +COL index_name FOR A30; +COL plan_hash_value FOR 999999999999999; +COL executions FOR 999,999,999,990; +COL elapsed_seconds FOR 999,999,990; +COL cpu_seconds FOR 999,999,990; +COL sql_text FOR A100 TRUNC; +BREAK ON REPORT; +COMPUTE SUM LABEL "TOTAL" OF executions elapsed_seconds cpu_seconds ON REPORT; +PRO +PRO v$object_dependency -> v$sql +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT d.to_name AS index_name, s.sql_id, s.plan_hash_value, s.sql_text, + s.executions, s.elapsed_seconds, s.cpu_seconds, s.last_active_time +FROM ( SELECT d.to_name, d.from_hash, d.from_address + FROM v$object_dependency d, v$db_object_cache c + WHERE d.to_owner = '&&p_owner.' + AND d.to_name = NVL('&&p_index_name.', d.to_name) + --AND d.to_type = 70 -- MULTI-VERSIONED OBJECT + AND d.to_name IN (SELECT index_name FROM dba_indexes WHERE owner = '&&p_owner.' AND table_name = '&&p_table_name.') + AND c.hash_value = d.to_hash + AND c.addr = d.to_address + AND c.type = 'MULTI-VERSIONED OBJECT' + GROUP BY d.to_name, d.from_hash, d.from_address + ) d + CROSS APPLY ( + SELECT s.sql_id, s.sql_text, s.plan_hash_value, + SUM(s.executions) AS executions, + ROUND(SUM(s.elapsed_time)/POWER(10, 6)) AS elapsed_seconds, + ROUND(SUM(s.cpu_time)/POWER(10, 6)) AS cpu_seconds, + MAX(s.last_active_time) AS last_active_time + FROM v$sql s + WHERE s.hash_value = d.from_hash + AND s.address = d.from_address + -- AND s.parsing_user_id <> 0 + -- AND s.parsing_schema_id <> 0 + GROUP BY + s.sql_id, s.sql_text, s.plan_hash_value + ) s +ORDER BY + d.to_name, s.sql_id, s.plan_hash_value +/ +PRO +PRO v$sql_plan -> v$sql +PRO ~~~~~~~~~~~~~~~~~~~ +SELECT p.object_name AS index_name, p.sql_id, p.plan_hash_value, s.sql_text, + s.executions, s.elapsed_seconds, s.cpu_seconds, s.last_active_time +FROM ( SELECT p.object_name, p.sql_id, p.plan_hash_value + FROM v$sql_plan p + WHERE p.object_owner = '&&p_owner.' + AND p.object_name = NVL('&&p_index_name.', p.object_name) + AND p.object_type LIKE '%INDEX%' + AND p.object_name IN (SELECT index_name FROM dba_indexes WHERE owner = '&&p_owner.' AND table_name = '&&p_table_name.') + GROUP BY p.object_name, p.sql_id, p.plan_hash_value + ) p + CROSS APPLY ( + SELECT MAX(s.sql_text) AS sql_text, + SUM(s.executions) AS executions, + ROUND(SUM(s.elapsed_time)/POWER(10, 6)) AS elapsed_seconds, + ROUND(SUM(s.cpu_time)/POWER(10, 6)) AS cpu_seconds, + MAX(s.last_active_time) AS last_active_time + FROM v$sql s + WHERE s.sql_id = p.sql_id + AND s.plan_hash_value = p.plan_hash_value + -- AND s.parsing_user_id <> 0 + -- AND s.parsing_schema_id <> 0 + ) s +ORDER BY + p.object_name, s.sql_id, s.plan_hash_value +/ +PRO +PRO dba_hist_sql_plan -> dba_hist_sqltext +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT p.object_name AS index_name, p.sql_id, p.plan_hash_value, s.sql_text, p.timestamp +FROM ( SELECT p.object_name, p.sql_id, p.plan_hash_value, MAX(timestamp) AS timestamp + FROM dba_hist_sql_plan p + WHERE p.object_owner = '&&p_owner.' + AND p.object_name = NVL('&&p_index_name.', p.object_name) + AND p.object_type LIKE '%INDEX%' + AND p.dbid = TO_NUMBER('&&cs_dbid.') + AND p.object_name IN (SELECT index_name FROM dba_indexes WHERE owner = '&&p_owner.' AND table_name = '&&p_table_name.') + GROUP BY p.object_name, p.sql_id, p.plan_hash_value + ) p + CROSS APPLY ( + SELECT MAX(DBMS_LOB.SUBSTR(s.sql_text, 1000)) AS sql_text + FROM dba_hist_sqltext s + WHERE s.sql_id = p.sql_id + ) s +ORDER BY + p.object_name, p.sql_id, p.plan_hash_value +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_table_name." "&&p_index_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_internal/cs_acs_internal.sql b/csierra/cs_internal/cs_acs_internal.sql new file mode 100644 index 0000000..bd52d34 --- /dev/null +++ b/csierra/cs_internal/cs_acs_internal.sql @@ -0,0 +1,88 @@ +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL last_active_time FOR A19 HEA 'Last Active Time'; +COL child_number FOR 999999 HEA 'Child|Number'; +COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL object_status FOR A14 HEA 'Object|Status'; +COL is_obsolete FOR A8 HEA 'Is|Obsolete'; +COL is_shareable FOR A9 HEA 'Is|Shareable'; +COL is_bind_aware FOR A9 HEA 'Is Bind|Aware'; +COL is_bind_sensitive FOR A9 HEA 'Is Bind|Sensitive'; +COL bucket_id FOR 999999 HEA 'Bucket|ID'; +COL count FOR 999999 HEA 'Count'; +COL predicate FOR A20 HEA 'Predicate'; +COL range_id FOR 99999 HEA 'Range|ID'; +COL low HEA 'Low'; +COL high HEA 'High'; +COL high_low_avg HEA 'AVG' FOR A10; +-- +BREAK ON con_id DUPL ON pdb_name DUPL ON last_active_time DUPL ON child_number SKIP 1 DUPL; +PRO +PRO ACS HISTOGRAM (v$sql_cs_histogram) +PRO ~~~~~~~~~~~~~ +SELECT h.con_id, + c.name AS pdb_name, + TO_CHAR(s.last_active_time, '&&cs_datetime_full_format.') last_active_time, + h.child_number, + h.bucket_id, + h.count, + s.object_status, + s.is_obsolete, + s.is_shareable, + s.is_bind_sensitive, + s.is_bind_aware, + s.plan_hash_value + FROM v$sql_cs_histogram h, + v$sql s, + v$containers c + WHERE h.sql_id = '&&cs_sql_id.' + AND s.sql_id = h.sql_id + AND s.child_number = h.child_number + AND s.con_id = h.con_id + AND c.con_id = h.con_id + ORDER BY + h.con_id, + s.last_active_time, + h.child_number, + h.bucket_id +/ +-- +/* v$sql_cs_statistics not populated on 12c as per bug 24441377 */ +-- +BREAK ON con_id DUPL ON pdb_name DUPL ON last_active_time DUPL ON child_number SKIP 1 DUPL; +PRO +PRO ACS SELECTIVITY PROFILE (v$sql_cs_selectivity) +PRO ~~~~~~~~~~~~~~~~~~~~~~~ +SELECT l.con_id, + c.name AS pdb_name, + TO_CHAR(s.last_active_time, '&&cs_datetime_full_format.') last_active_time, + l.child_number, + l.range_id, + l.predicate, + l.low, + -- TRIM(TO_CHAR(ROUND((TO_NUMBER(l.high) + TO_NUMBER(l.low)) / 2, 6), '0.000000')) high_low_avg, + l.high, + s.object_status, + s.is_obsolete, + s.is_shareable, + s.is_bind_sensitive, + s.is_bind_aware, + s.plan_hash_value + FROM v$sql_cs_selectivity l, + v$sql s, + v$containers c + WHERE l.sql_id = '&&cs_sql_id.' + AND s.sql_id = l.sql_id + AND s.child_number = l.child_number + AND s.con_id = l.con_id + AND c.con_id = l.con_id + ORDER BY + l.con_id, + s.last_active_time, + l.child_number, + l.range_id, + l.predicate, + l.low, + l.high +/ +-- diff --git a/csierra/cs_internal/cs_active_sessions.sql b/csierra/cs_internal/cs_active_sessions.sql new file mode 100644 index 0000000..5f45fd9 --- /dev/null +++ b/csierra/cs_internal/cs_active_sessions.sql @@ -0,0 +1,59 @@ +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL sid_serial# FOR A12 HEA 'Sid,Serial#'; +COL child_number FOR 999999 HEA 'Child|Number'; +COL sql_exec_start FOR A19 HEA 'SQL Exec Start'; +COL elapsed_seconds FOR 999,990 HEA 'Elapsed|Seconds'; +COL current_timed_event FOR A80 HEA 'Current Timed Event'; +-- +PRO +PRO ACTIVE SESSIONS (v$session) +PRO ~~~~~~~~~~~~~~~ +SELECT s.con_id, + c.name AS pdb_name, + s.machine, + s.state||CASE WHEN s.state LIKE 'WAITED%' THEN ' (avg of '||ROUND(AVG(s.wait_time_micro))||'us)' END|| + CASE WHEN s.wait_class IS NOT NULL THEN ' on '||s.wait_class||CASE WHEN s.event IS NOT NULL THEN ' - '||s.event END END AS current_timed_event, + COUNT(*) AS sessions + FROM v$session s, + v$containers c + WHERE s.sql_id = '&&cs_sql_id.' + AND s.status = 'ACTIVE' + AND c.con_id = s.con_id + GROUP BY + s.con_id, + c.name, + s.machine, + s.state, + s.wait_class, + s.event + ORDER BY + s.con_id, + s.machine, + s.state, + s.wait_class, + s.event +/ +-- +--BREAK ON con_id ON pdb_name ON machine SKIP PAGE; +SELECT s.con_id, + c.name AS pdb_name, + machine, + s.sid||','||s.serial# AS sid_serial#, + s.sql_child_number AS child_number, + TO_CHAR(s.sql_exec_start, '&&cs_datetime_full_format.') sql_exec_start, + (SYSDATE - s.sql_exec_start) * 24 * 3600 AS elapsed_seconds, + s.state||CASE WHEN s.state LIKE 'WAITED%' THEN ' ('||s.wait_time_micro||'us)' END|| + CASE WHEN s.wait_class IS NOT NULL THEN ' on '||s.wait_class||CASE WHEN s.event IS NOT NULL THEN ' - '||s.event END END AS current_timed_event + FROM v$session s, + v$containers c + WHERE s.sql_id = '&&cs_sql_id.' + AND s.status = 'ACTIVE' + AND c.con_id = s.con_id + ORDER BY + s.con_id, + s.machine, + s.sql_exec_start +/ +-- +--CLEAR BREAK; \ No newline at end of file diff --git a/csierra/cs_internal/cs_active_sessions_internal.sql b/csierra/cs_internal/cs_active_sessions_internal.sql new file mode 100644 index 0000000..e1e172d --- /dev/null +++ b/csierra/cs_internal/cs_active_sessions_internal.sql @@ -0,0 +1,120 @@ +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET PAGES 300 LONGC 120; +-- +COL sid_nopri NOPRI; +COL rt_lc FOR A12 HEA 'rt:RunTime|lc:LastCall'; +COL sql_id_phv FOR A16 HEA 's:SQL_ID|p:Plan Hash'; +COL attributes FOR A65 HEA 'c:Container, u:UserName, h:Host, m:Module, a:Action, p:Program|i:ClientInfo, s:State, w:WaitEvent, s:Sid,Session, l:LogonSecs'; +COL sql_fulltext FOR A80 HEA 'SQL Text'; +COL execution_plan FOR A80 HEA 'Execution Plan'; +-- +BREAK ON sid_nopri SKIP PAGE; +PRO +PRO Active Sessions +PRO ~~~~~~~~~~~~~~~ +-- +WITH +FUNCTION execution_plan (p_sql_id IN VARCHAR2, p_child_number IN NUMBER) +RETURN VARCHAR2 +IS + l_execution_plan VARCHAR2(32767) := NULL; +BEGIN + FOR i IN (SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(p_sql_id, p_child_number, 'BASIC')) WHERE TRIM(plan_table_output) IS NOT NULL) + LOOP + IF i.plan_table_output LIKE 'Plan hash value: %' THEN l_execution_plan := NULL; END IF; + IF l_execution_plan IS NOT NULL THEN l_execution_plan := l_execution_plan||CHR(10); END IF; + IF LENGTH(l_execution_plan||SUBSTR(i.plan_table_output, 1, 79)) <= 4000 THEN + l_execution_plan := l_execution_plan||SUBSTR(i.plan_table_output, 1, 79); + ELSE + EXIT; -- avoid ORA-06502: PL/SQL: numeric or value error: character string buffer too small + END IF; + END LOOP; + RETURN l_execution_plan; +END execution_plan; +active_user_sessions +AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + e.con_id + , e.sql_exec_start + , e.last_call_et + , e.sql_id + , e.username + , e.osuser + , e.machine + , e.module + , e.action + , e.program + , e.client_info + , e.state + , e.wait_class + , e.event + , e.seconds_in_wait + , e.wait_time_micro + , e.sid + , e.serial# + , e.type + , e.logon_time + , e.sql_child_number + , e.audsid + , p.spid + , p.pname + FROM v$session e, + v$process p + WHERE e.status = 'ACTIVE' + -- AND e.type = 'USER' + AND e.sid <> SYS_CONTEXT('USERENV', 'SID') -- exclude myself + AND p.addr = e.paddr +) +SELECT e.sid AS sid_nopri + , 'rt:'||TRIM(TO_CHAR((SYSDATE - e.sql_exec_start) * 24 * 3600, '999,999,990'))||CASE WHEN e.sql_exec_start IS NOT NULL THEN 's' ELSE '' END|| + CHR(10)||'lc:'||TRIM(TO_CHAR(e.last_call_et, '999,999,990'))||'s' AS rt_lc + , CASE WHEN e.sql_id IS NOT NULL THEN 's:'||e.sql_id END|| + CASE WHEN s.plan_hash_value IS NOT NULL THEN CHR(10)||'p:'||s.plan_hash_value END|| + CASE WHEN s.sql_plan_baseline IS NOT NULL THEN CHR(10)||' spbl' END|| + CASE WHEN s.sql_patch IS NOT NULL THEN CHR(10)||' spch' END|| + CASE WHEN s.sql_profile IS NOT NULL THEN CHR(10)||' sprf' END + AS sql_id_phv + , 'c:'||SUBSTR(c.name, 1, 64)|| + CHR(10)||'u:'||SUBSTR(NVL(e.username,''), 1, 64)||' os:'||SUBSTR(NVL(e.osuser,''), 1, 64)|| + CHR(10)||'h:'||SUBSTR(NVL(e.machine,''), 1, 64)|| + CASE WHEN e.module IS NOT NULL THEN CHR(10)||'m:'||SUBSTR(e.module, 1, 64) END|| + CASE WHEN e.action IS NOT NULL THEN CHR(10)||'a:'||SUBSTR(e.action, 1, 64) END|| + CASE WHEN e.program IS NOT NULL THEN CHR(10)||'p:'||SUBSTR(e.program, 1, 64) END|| + CASE WHEN e.client_info IS NOT NULL THEN CHR(10)||'i:'||SUBSTR(e.client_info, 1, 64) END|| + CHR(10)||'s:'||e.state|| + CASE WHEN e.wait_time_micro > 0 THEN ' ('||TRIM(TO_CHAR(e.wait_time_micro,'999,999,999,990'))||'us)' END|| + CASE WHEN e.seconds_in_wait > 0 THEN ' ('||TRIM(TO_CHAR(e.seconds_in_wait,'999,990'))||'s)' END|| + CASE WHEN e.wait_class IS NOT NULL THEN CHR(10)||'w:'||e.wait_class||CASE WHEN e.event IS NOT NULL THEN ' - '||e.event END END|| + CHR(10)||'os:'||e.spid||'('||NVL(e.pname,'ORA')||')'|| + CHR(10)||'s:'||e.sid||','||e.serial#||'('||e.type||')'|| + CHR(10)||'l:'||TRIM(TO_CHAR((SYSDATE - e.logon_time) * 24 * 3600, '999,999,990'))||'s' + AS attributes + , COALESCE(s.sql_fulltext, s2.sql_fulltext) AS sql_fulltext + , (SELECT execution_plan(e.sql_id, e.sql_child_number) FROM DUAL WHERE s.plan_hash_value > 0) AS execution_plan + FROM active_user_sessions e + OUTER APPLY ( + SELECT s.plan_hash_value + , s.sql_plan_baseline + , s.sql_patch + , s.sql_profile + , s.sql_fulltext + FROM v$sql s + WHERE s.con_id = e.con_id + AND s.sql_id = e.sql_id + AND s.child_number = e.sql_child_number + AND s.object_status = 'VALID' + AND s.is_obsolete = 'N' + AND s.is_shareable = 'Y' + ORDER BY s.last_active_time DESC + FETCH FIRST ROW ONLY ) s + OUTER APPLY ( + SELECT s.sql_fulltext + FROM v$sql s + WHERE s.sql_id = e.sql_id + FETCH FIRST ROW ONLY ) s2 + , v$containers c + WHERE c.con_id = e.con_id + ORDER BY + e.sql_exec_start NULLS LAST, + e.last_call_et DESC +/ \ No newline at end of file diff --git a/csierra/cs_internal/cs_active_sessions_peaks_internal_v5.sql b/csierra/cs_internal/cs_active_sessions_peaks_internal_v5.sql new file mode 100644 index 0000000..b5c364e --- /dev/null +++ b/csierra/cs_internal/cs_active_sessions_peaks_internal_v5.sql @@ -0,0 +1,319 @@ +--SET HEA OFF PAGES 0 SERVEROUT ON; +SET HEA OFF PAGES 0; +DECLARE + l_line INTEGER := 0; + l_b1 VARCHAR2(300) := '| | Active || Top #1 SQL | || Top #1 Event | || Top #1 PDB | |'; -- begin line 1 + l_b2 VARCHAR2(300) := '| Sample Time | Sessions || Sessions | Top #1 SQL || Sessions | Top #1 Timed Event || Sessions | Top #1 PDB |'; -- begin line 2 + l_s1 VARCHAR2(300) := '+-------------------------+----------++------------+------------------------------------------------------------------++--------------+----------------------------------------------------++------------+-------------------------------------+'; -- spacer + l_l1 VARCHAR2(300); -- line + l_begin_peak DATE; + l_seconds NUMBER; + l_sessions_peak NUMBER; + l_sql_id_peak VARCHAR2(13); + l_con_id_peak NUMBER; + l_sql_text_peak VARCHAR2(1000); + l_session_state_peak VARCHAR2(30); + l_wait_class_peak VARCHAR2(255); + l_event_peak VARCHAR2(255); + l_pdb_name_peak VARCHAR2(128); +BEGIN +DELETE plan_table; +IF &×_cpu_cores. = 0 THEN + DBMS_OUTPUT.put_line(l_s1); + DBMS_OUTPUT.put_line(l_b1); + DBMS_OUTPUT.put_line(l_b2); + DBMS_OUTPUT.put_line(l_s1); +END IF; +FOR i IN ( +WITH +threshold AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ &×_cpu_cores. * value AS value FROM v$osstat WHERE stat_name = 'NUM_CPU_CORES' AND ROWNUM >= 1 /* MATERIALIZE */ +), +active_sessions_time_series AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_state, + h.wait_class, + h.event, + COALESCE(h.sql_id, h.top_level_sql_id, '"null"') AS sql_id, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE 1 = 1 + AND '&&include_hist.' = 'Y' + AND h.dbid = &&cs_dbid. AND h.instance_number = &&cs_instance_number. AND h.snap_id BETWEEN &&cs_snap_id_from. AND &&cs_snap_id_to. + -- AND TO_NUMBER('&&cs_con_id.') IN (1, h.con_id) + AND (TO_NUMBER('&&cs_con_id.') IN (0, 1, h.con_id) OR h.con_id IN (0, 1)) -- now we include CDB$ROOT samples when executed from a PDB + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + h.sample_time, + h.con_id, + h.session_state, + h.wait_class, + h.event, + COALESCE(h.sql_id, h.top_level_sql_id, '"null"') +UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_state, + h.wait_class, + h.event, + COALESCE(h.sql_id, h.top_level_sql_id, '"null"') AS sql_id, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE 1 = 1 + AND '&&include_mem.' = 'Y' + -- AND TO_NUMBER('&&cs_con_id.') IN (1, h.con_id) + AND (TO_NUMBER('&&cs_con_id.') IN (0, 1, h.con_id) OR h.con_id IN (0, 1)) -- now we include CDB$ROOT samples when executed from a PDB + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + h.sample_time, + h.con_id, + h.session_state, + h.wait_class, + h.event, + COALESCE(h.sql_id, h.top_level_sql_id, '"null"') +), +time_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + SUM(active_sessions) AS active_sessions, + LAG(SUM(active_sessions)) OVER (ORDER BY sample_time) AS lag_active_sessions, + LEAD(SUM(active_sessions)) OVER (ORDER BY sample_time) AS lead_active_sessions + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time +), +t AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + t.sample_time, + t.active_sessions, + CASE WHEN t.active_sessions < threshold.value AND t.lead_active_sessions >= threshold.value THEN 'Y' END AS b, + CASE WHEN t.active_sessions >= threshold.value THEN 'Y' END AS p, + CASE WHEN t.active_sessions < threshold.value AND t.lag_active_sessions >= threshold.value THEN 'Y' END AS e + FROM threshold, + time_dim t + WHERE (t.active_sessions >= threshold.value OR t.lag_active_sessions >= threshold.value OR t.lead_active_sessions >= threshold.value) + AND ROWNUM >= 1 /* MATERIALIZE */ +), +con_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + con_id, + SUM(active_sessions) AS active_sessions, + ROW_NUMBER() OVER (PARTITION BY sample_time ORDER BY SUM(active_sessions) DESC) AS rn + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time, + con_id +), +c AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + con_id, + active_sessions + FROM con_dim + WHERE rn = 1 + AND ROWNUM >= 1 /* MATERIALIZE */ +), +eve_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + session_state, + wait_class, + event, + SUM(active_sessions) AS active_sessions, + ROW_NUMBER() OVER (PARTITION BY sample_time ORDER BY SUM(active_sessions) DESC) AS rn + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time, + session_state, + wait_class, + event +), +e AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + session_state, + wait_class, + event, + active_sessions + FROM eve_dim + WHERE rn = 1 + AND ROWNUM >= 1 /* MATERIALIZE */ +), +sql_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + sql_id, + SUM(active_sessions) AS active_sessions, + ROW_NUMBER() OVER (PARTITION BY sample_time ORDER BY SUM(active_sessions) DESC) AS rn + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time, + sql_id +), +s AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + sql_id, + active_sessions + FROM sql_dim + WHERE rn = 1 + AND ROWNUM >= 1 /* MATERIALIZE */ +) +SELECT t.sample_time, + t.active_sessions, + t.b, + t.p, + t.e, + s.active_sessions AS s_active_sessions, + s.sql_id, + (SELECT /*+ NO_MERGE */ REPLACE(v.sql_text, CHR(39)) FROM v$sql v WHERE s.sql_id <> '"null"' AND v.sql_id = s.sql_id AND ROWNUM = 1 /* MATERIALIZE */) AS sql_text, + e.active_sessions AS e_active_sessions, + e.session_state, + e.wait_class, + e.event, + c.active_sessions AS c_active_sessions, + (SELECT /*+ NO_MERGE */ v.name FROM v$containers v WHERE v.con_id = c.con_id AND ROWNUM = 1 /* MATERIALIZE */) AS pdb_name, + c.con_id + FROM t, c, e, s + WHERE c.sample_time = t.sample_time + AND e.sample_time = t.sample_time + AND s.sample_time = t.sample_time + ORDER BY + t.sample_time +) +LOOP + l_line := l_line + 1; + l_l1 := + '| '||TO_CHAR(i.sample_time, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')|| + ' | '||TO_CHAR(i.active_sessions, '999,990')|| + ' || '||TO_CHAR(i.s_active_sessions, '999,990')|| + ' | '||RPAD(i.sql_id, 13)|| + ' '||RPAD(COALESCE(i.sql_text, ' '), 50)|| + ' || '||TO_CHAR(i.e_active_sessions, '999,990')|| + ' | '||RPAD(CASE i.session_state WHEN 'ON CPU' THEN i.session_state ELSE i.wait_class||' - '||i.event END, 50)|| + ' || '||TO_CHAR(i.c_active_sessions, '999,990')|| + ' | '||RPAD(i.pdb_name||'('||i.con_id||')', 35)|| + ' | '; + IF i.e = 'Y' AND i.b = 'Y' THEN -- end of peak followed by begin of peak (same row is both) + DBMS_OUTPUT.put_line(l_l1); + l_seconds := ROUND((CAST(i.sample_time AS DATE) - l_begin_peak) * 24 * 3600); + -- DBMS_OUTPUT.put_line(TO_CHAR(l_begin_peak, 'YYYY-MM-DD"T"HH24:MI:SS')||' '||l_seconds||' '||l_sessions_peak); + INSERT INTO plan_table (timestamp, cost, cardinality, statement_id, plan_id, remarks, operation, options, object_node, object_owner, object_type) + VALUES (l_begin_peak, l_seconds, l_sessions_peak, l_sql_id_peak, l_con_id_peak, l_sql_text_peak, l_session_state_peak, l_wait_class_peak, l_event_peak, l_pdb_name_peak, 'GLOBAL'); + DBMS_OUTPUT.put_line(l_s1); + END IF; + IF i.b = 'Y' THEN -- begin of peak + DBMS_OUTPUT.put_line(l_s1); + DBMS_OUTPUT.put_line(l_b1); + DBMS_OUTPUT.put_line(l_b2); + DBMS_OUTPUT.put_line(l_s1); + l_begin_peak := NULL; l_sessions_peak := 0; l_sql_id_peak := NULL; l_con_id_peak := NULL; l_sql_text_peak := NULL; l_session_state_peak := NULL; l_wait_class_peak := NULL; l_event_peak := NULL; l_pdb_name_peak := NULL; + END IF; + DBMS_OUTPUT.put_line(l_l1); -- line + IF i.active_sessions > l_sessions_peak THEN + l_sessions_peak := i.active_sessions; + l_sql_id_peak := i.sql_id; + l_con_id_peak := i.con_id; + l_sql_text_peak := i.sql_text; + l_session_state_peak := i.session_state; + l_wait_class_peak := i.wait_class; + l_event_peak := i.event; + l_pdb_name_peak := i.pdb_name; + END IF; + IF i.e IS NULL AND i.b IS NULL AND l_begin_peak IS NULL THEN -- first line after a begin-peak + l_begin_peak := CAST(i.sample_time AS DATE); + END IF; + IF i.e = 'Y' AND i.b IS NULL THEN -- end of peak + l_seconds := ROUND((CAST(i.sample_time AS DATE) - l_begin_peak) * 24 * 3600); + -- DBMS_OUTPUT.put_line(TO_CHAR(l_begin_peak, 'YYYY-MM-DD"T"HH24:MI:SS')||' '||l_seconds||' '||l_sessions_peak); + INSERT INTO plan_table (timestamp, cost, cardinality, statement_id, plan_id, remarks, operation, options, object_node, object_owner, object_type) + VALUES (l_begin_peak, l_seconds, l_sessions_peak, l_sql_id_peak, l_con_id_peak, l_sql_text_peak, l_session_state_peak, l_wait_class_peak, l_event_peak, l_pdb_name_peak, 'GLOBAL'); + DBMS_OUTPUT.put_line(l_s1); + END IF; + IF &×_cpu_cores. = 0 AND MOD(l_line, 100) = 0 THEN -- heading every 100 rows when executed requesting all sample times and not just peaks + DBMS_OUTPUT.put_line(l_s1); + DBMS_OUTPUT.put_line(l_b1); + DBMS_OUTPUT.put_line(l_b2); + DBMS_OUTPUT.put_line(l_s1); + END IF; +END LOOP; +IF &×_cpu_cores. = 0 THEN + DBMS_OUTPUT.put_line(l_s1); -- separator when executed requesting all sample times and not just peaks +END IF; +COMMIT; +END; +/ +SET HEA ON PAGES 5000 SERVEROUT OFF; +PRO NOTE: Sum of Active Sessions per AWR sampled time, when greater than &×_cpu_cores.x NUM_CPU_CORES(&&cs_num_cpu_cores.). Report includes for each sampled time Top #1: SQL, Timed Event and PDB; with corresponding Sum of Active Sessions for each of these 3 dimensions. + +/* + plan_table mapping + + Name Null? Type + ----------------------------------------- -------- ---------------------------- + STATEMENT_ID VARCHAR2(30) sql_id + PLAN_ID NUMBER con_id + TIMESTAMP DATE begin_peak + REMARKS VARCHAR2(4000) sql_text + OPERATION VARCHAR2(30) session_state + OPTIONS VARCHAR2(255) wait_class + OBJECT_NODE VARCHAR2(128) event + OBJECT_OWNER VARCHAR2(128) pdb_name + OBJECT_NAME VARCHAR2(128) + OBJECT_ALIAS VARCHAR2(261) + OBJECT_INSTANCE NUMBER(38) + OBJECT_TYPE VARCHAR2(30) global + OPTIMIZER VARCHAR2(255) + SEARCH_COLUMNS NUMBER + ID NUMBER(38) + PARENT_ID NUMBER(38) + DEPTH NUMBER(38) + POSITION NUMBER(38) + COST NUMBER(38) seconds + CARDINALITY NUMBER(38) sessions_peak + BYTES NUMBER(38) + OTHER_TAG VARCHAR2(255) + PARTITION_START VARCHAR2(255) + PARTITION_STOP VARCHAR2(255) + PARTITION_ID NUMBER(38) + OTHER LONG + OTHER_XML CLOB + DISTRIBUTION VARCHAR2(30) + CPU_COST NUMBER(38) + IO_COST NUMBER(38) + TEMP_SPACE NUMBER(38) + ACCESS_PREDICATES VARCHAR2(4000) + FILTER_PREDICATES VARCHAR2(4000) + PROJECTION VARCHAR2(4000) + TIME NUMBER(38) + QBLOCK_NAME VARCHAR2(128) + + SELECT TO_CHAR(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS') AS begin_peak, + TO_CHAR(timestamp + (cost/3600/24), 'YYYY-MM-DD"T"HH24:MI:SS') AS end_peak, + cost AS seconds, + cardinality AS sessions_peak, + -- statement_id AS sql_id, + -- remarks AS sql_text, + statement_id||' '||SUBSTR(remarks, 1, 50) AS sql_statement, + -- operation AS session_state, + -- options AS wait_class, + -- object_node AS event, + CASE operation WHEN 'ON CPU' THEN operation ELSE options||' - '||object_node END AS timed_event, + -- object_owner AS pdb_name, + -- plan_id AS con_id + object_owner||'('||plan_id||')' AS pdb_name + FROM plan_table + ORDER BY 1; +*/ diff --git a/csierra/cs_internal/cs_active_sessions_peaks_internal_v5_s.sql b/csierra/cs_internal/cs_active_sessions_peaks_internal_v5_s.sql new file mode 100644 index 0000000..e066fd6 --- /dev/null +++ b/csierra/cs_internal/cs_active_sessions_peaks_internal_v5_s.sql @@ -0,0 +1,293 @@ +--SET HEA OFF PAGES 0 SERVEROUT ON; +SET HEA OFF PAGES 0; +DECLARE + l_line INTEGER := 0; + l_b1 VARCHAR2(300) := '| | Active || Top #1 SQL | || Top #1 Event | || Top #1 PDB | |'; -- begin line 1 + l_b2 VARCHAR2(300) := '| Sample Time | Sessions || Sessions | Top #1 SQL || Sessions | Top #1 Timed Event || Sessions | Top #1 PDB |'; -- begin line 2 + l_s1 VARCHAR2(300) := '+-------------------------+----------++------------+------------------------------------------------------------------++--------------+----------------------------------------------------++------------+-------------------------------------+'; -- spacer + l_l1 VARCHAR2(300); -- line + l_begin_peak DATE; + l_seconds NUMBER; + l_sessions_peak NUMBER; + l_sql_id_peak VARCHAR2(13); + l_con_id_peak NUMBER; + l_sql_text_peak VARCHAR2(1000); + l_session_state_peak VARCHAR2(30); + l_wait_class_peak VARCHAR2(255); + l_event_peak VARCHAR2(255); + l_pdb_name_peak VARCHAR2(128); +BEGIN +DELETE plan_table; +IF &×_cpu_cores. = 0 THEN + DBMS_OUTPUT.put_line(l_s1); + DBMS_OUTPUT.put_line(l_b1); + DBMS_OUTPUT.put_line(l_b2); + DBMS_OUTPUT.put_line(l_s1); +END IF; +FOR i IN ( +WITH +threshold AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ &×_cpu_cores. * value AS value FROM v$osstat WHERE stat_name = 'NUM_CPU_CORES' AND ROWNUM >= 1 /* MATERIALIZE */ +), +active_sessions_time_series AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_state, + h.wait_class, + h.event, + COALESCE(h.sql_id, h.top_level_sql_id, '"null"') AS sql_id, + COUNT(*) AS active_sessions + FROM &&ash_view. h + WHERE 1 = 1 + -- AND TO_NUMBER('&&cs_con_id.') IN (1, h.con_id) + AND (TO_NUMBER('&&cs_con_id.') IN (0, 1, h.con_id) OR h.con_id IN (0, 1)) -- now we include CDB$ROOT samples when executed from a PDB + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + h.sample_time, + h.con_id, + h.session_state, + h.wait_class, + h.event, + COALESCE(h.sql_id, h.top_level_sql_id, '"null"') +), +time_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + SUM(active_sessions) AS active_sessions, + LAG(SUM(active_sessions)) OVER (ORDER BY sample_time) AS lag_active_sessions, + LEAD(SUM(active_sessions)) OVER (ORDER BY sample_time) AS lead_active_sessions + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time +), +t AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + t.sample_time, + t.active_sessions, + CASE WHEN t.active_sessions < threshold.value AND t.lead_active_sessions >= threshold.value THEN 'Y' END AS b, + CASE WHEN t.active_sessions >= threshold.value THEN 'Y' END AS p, + CASE WHEN t.active_sessions < threshold.value AND t.lag_active_sessions >= threshold.value THEN 'Y' END AS e + FROM threshold, + time_dim t + WHERE (t.active_sessions >= threshold.value OR t.lag_active_sessions >= threshold.value OR t.lead_active_sessions >= threshold.value) + AND ROWNUM >= 1 /* MATERIALIZE */ +), +con_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + con_id, + SUM(active_sessions) AS active_sessions, + ROW_NUMBER() OVER (PARTITION BY sample_time ORDER BY SUM(active_sessions) DESC) AS rn + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time, + con_id +), +c AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + con_id, + active_sessions + FROM con_dim + WHERE rn = 1 + AND ROWNUM >= 1 /* MATERIALIZE */ +), +eve_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + session_state, + wait_class, + event, + SUM(active_sessions) AS active_sessions, + ROW_NUMBER() OVER (PARTITION BY sample_time ORDER BY SUM(active_sessions) DESC) AS rn + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time, + session_state, + wait_class, + event +), +e AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + session_state, + wait_class, + event, + active_sessions + FROM eve_dim + WHERE rn = 1 + AND ROWNUM >= 1 /* MATERIALIZE */ +), +sql_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + sql_id, + SUM(active_sessions) AS active_sessions, + ROW_NUMBER() OVER (PARTITION BY sample_time ORDER BY SUM(active_sessions) DESC) AS rn + FROM active_sessions_time_series + WHERE ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + sample_time, + sql_id +), +s AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_time, + sql_id, + active_sessions + FROM sql_dim + WHERE rn = 1 + AND ROWNUM >= 1 /* MATERIALIZE */ +) +SELECT t.sample_time, + t.active_sessions, + t.b, + t.p, + t.e, + s.active_sessions AS s_active_sessions, + s.sql_id, + (SELECT /*+ NO_MERGE */ REPLACE(v.sql_text, CHR(39)) FROM v$sql v WHERE s.sql_id <> '"null"' AND v.sql_id = s.sql_id AND ROWNUM = 1 /* MATERIALIZE */) AS sql_text, + e.active_sessions AS e_active_sessions, + e.session_state, + e.wait_class, + e.event, + c.active_sessions AS c_active_sessions, + (SELECT /*+ NO_MERGE */ v.name FROM v$containers v WHERE v.con_id = c.con_id AND ROWNUM = 1 /* MATERIALIZE */) AS pdb_name, + c.con_id + FROM t, c, e, s + WHERE c.sample_time = t.sample_time + AND e.sample_time = t.sample_time + AND s.sample_time = t.sample_time + ORDER BY + t.sample_time +) +LOOP + l_line := l_line + 1; + l_l1 := + '| '||TO_CHAR(i.sample_time, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')|| + ' | '||TO_CHAR(i.active_sessions, '999,990')|| + ' || '||TO_CHAR(i.s_active_sessions, '999,990')|| + ' | '||RPAD(i.sql_id, 13)|| + ' '||RPAD(COALESCE(i.sql_text, ' '), 50)|| + ' || '||TO_CHAR(i.e_active_sessions, '999,990')|| + ' | '||RPAD(CASE i.session_state WHEN 'ON CPU' THEN i.session_state ELSE i.wait_class||' - '||i.event END, 50)|| + ' || '||TO_CHAR(i.c_active_sessions, '999,990')|| + ' | '||RPAD(i.pdb_name||'('||i.con_id||')', 35)|| + ' | '; + IF i.e = 'Y' AND i.b = 'Y' THEN -- end of peak followed by begin of peak (same row is both) + DBMS_OUTPUT.put_line(l_l1); + l_seconds := ROUND((CAST(i.sample_time AS DATE) - l_begin_peak) * 24 * 3600); + -- DBMS_OUTPUT.put_line(TO_CHAR(l_begin_peak, 'YYYY-MM-DD"T"HH24:MI:SS')||' '||l_seconds||' '||l_sessions_peak); + INSERT INTO plan_table (timestamp, cost, cardinality, statement_id, plan_id, remarks, operation, options, object_node, object_owner, object_type) + VALUES (l_begin_peak, l_seconds, l_sessions_peak, l_sql_id_peak, l_con_id_peak, l_sql_text_peak, l_session_state_peak, l_wait_class_peak, l_event_peak, l_pdb_name_peak, 'GLOBAL'); + DBMS_OUTPUT.put_line(l_s1); + END IF; + IF i.b = 'Y' THEN -- begin of peak + DBMS_OUTPUT.put_line(l_s1); + DBMS_OUTPUT.put_line(l_b1); + DBMS_OUTPUT.put_line(l_b2); + DBMS_OUTPUT.put_line(l_s1); + l_begin_peak := NULL; l_sessions_peak := 0; l_sql_id_peak := NULL; l_con_id_peak := NULL; l_sql_text_peak := NULL; l_session_state_peak := NULL; l_wait_class_peak := NULL; l_event_peak := NULL; l_pdb_name_peak := NULL; + END IF; + DBMS_OUTPUT.put_line(l_l1); -- line + IF i.active_sessions > l_sessions_peak THEN + l_sessions_peak := i.active_sessions; + l_sql_id_peak := i.sql_id; + l_con_id_peak := i.con_id; + l_sql_text_peak := i.sql_text; + l_session_state_peak := i.session_state; + l_wait_class_peak := i.wait_class; + l_event_peak := i.event; + l_pdb_name_peak := i.pdb_name; + END IF; + IF i.e IS NULL AND i.b IS NULL AND l_begin_peak IS NULL THEN -- first line after a begin-peak + l_begin_peak := CAST(i.sample_time AS DATE); + END IF; + IF i.e = 'Y' AND i.b IS NULL THEN -- end of peak + l_seconds := ROUND((CAST(i.sample_time AS DATE) - l_begin_peak) * 24 * 3600); + -- DBMS_OUTPUT.put_line(TO_CHAR(l_begin_peak, 'YYYY-MM-DD"T"HH24:MI:SS')||' '||l_seconds||' '||l_sessions_peak); + INSERT INTO plan_table (timestamp, cost, cardinality, statement_id, plan_id, remarks, operation, options, object_node, object_owner, object_type) + VALUES (l_begin_peak, l_seconds, l_sessions_peak, l_sql_id_peak, l_con_id_peak, l_sql_text_peak, l_session_state_peak, l_wait_class_peak, l_event_peak, l_pdb_name_peak, 'GLOBAL'); + DBMS_OUTPUT.put_line(l_s1); + END IF; + IF &×_cpu_cores. = 0 AND MOD(l_line, 100) = 0 THEN -- heading every 100 rows when executed requesting all sample times and not just peaks + DBMS_OUTPUT.put_line(l_s1); + DBMS_OUTPUT.put_line(l_b1); + DBMS_OUTPUT.put_line(l_b2); + DBMS_OUTPUT.put_line(l_s1); + END IF; +END LOOP; +IF &×_cpu_cores. = 0 THEN + DBMS_OUTPUT.put_line(l_s1); -- separator when executed requesting all sample times and not just peaks +END IF; +COMMIT; +END; +/ +SET HEA ON PAGES 5000 SERVEROUT OFF; +PRO NOTE: Sum of Active Sessions per AWR sampled time, when greater than &×_cpu_cores.x NUM_CPU_CORES(&&cs_num_cpu_cores.). Report includes for each sampled time Top #1: SQL, Timed Event and PDB; with corresponding Sum of Active Sessions for each of these 3 dimensions. + +/* + plan_table mapping + + Name Null? Type + ----------------------------------------- -------- ---------------------------- + STATEMENT_ID VARCHAR2(30) sql_id + PLAN_ID NUMBER con_id + TIMESTAMP DATE begin_peak + REMARKS VARCHAR2(4000) sql_text + OPERATION VARCHAR2(30) session_state + OPTIONS VARCHAR2(255) wait_class + OBJECT_NODE VARCHAR2(128) event + OBJECT_OWNER VARCHAR2(128) pdb_name + OBJECT_NAME VARCHAR2(128) + OBJECT_ALIAS VARCHAR2(261) + OBJECT_INSTANCE NUMBER(38) + OBJECT_TYPE VARCHAR2(30) global + OPTIMIZER VARCHAR2(255) + SEARCH_COLUMNS NUMBER + ID NUMBER(38) + PARENT_ID NUMBER(38) + DEPTH NUMBER(38) + POSITION NUMBER(38) + COST NUMBER(38) seconds + CARDINALITY NUMBER(38) sessions_peak + BYTES NUMBER(38) + OTHER_TAG VARCHAR2(255) + PARTITION_START VARCHAR2(255) + PARTITION_STOP VARCHAR2(255) + PARTITION_ID NUMBER(38) + OTHER LONG + OTHER_XML CLOB + DISTRIBUTION VARCHAR2(30) + CPU_COST NUMBER(38) + IO_COST NUMBER(38) + TEMP_SPACE NUMBER(38) + ACCESS_PREDICATES VARCHAR2(4000) + FILTER_PREDICATES VARCHAR2(4000) + PROJECTION VARCHAR2(4000) + TIME NUMBER(38) + QBLOCK_NAME VARCHAR2(128) + + SELECT TO_CHAR(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS') AS begin_peak, + TO_CHAR(timestamp + (cost/3600/24), 'YYYY-MM-DD"T"HH24:MI:SS') AS end_peak, + cost AS seconds, + cardinality AS sessions_peak, + -- statement_id AS sql_id, + -- remarks AS sql_text, + statement_id||' '||SUBSTR(remarks, 1, 50) AS sql_statement, + -- operation AS session_state, + -- options AS wait_class, + -- object_node AS event, + CASE operation WHEN 'ON CPU' THEN operation ELSE options||' - '||object_node END AS timed_event, + -- object_owner AS pdb_name, + -- plan_id AS con_id + object_owner||'('||plan_id||')' AS pdb_name + FROM plan_table + ORDER BY 1; +*/ diff --git a/csierra/cs_internal/cs_active_sessions_peaks_internal_v6.sql b/csierra/cs_internal/cs_active_sessions_peaks_internal_v6.sql new file mode 100644 index 0000000..1443ef4 --- /dev/null +++ b/csierra/cs_internal/cs_active_sessions_peaks_internal_v6.sql @@ -0,0 +1,33 @@ +PRO +PRO Active Sessions Peaks (when greater than &×_cpu_cores.x NUM_CPU_CORES) +PRO ~~~~~~~~~~~~~~~~~~~~~ +COL begin_peak FOR A19 HEA 'Aprox|Start Time'; +COL end_peak FOR A19 HEA 'Aprox|End Time'; +COL seconds FOR 999,990 HEA 'Aprox|Secs'; +COL sessions_peak FOR 999,990 HEA 'Max|Sessions'; +COL sql_statement FOR A64 HEA 'Top SQL Statement' TRUNC; +COL timed_event FOR A50 HEA 'Top Timed Event' TRUNC; +COL pdb_name FOR A35 HEA 'Top PDB Name(CON_ID)' TRUNC; +-- +BREAK ON REPORT; +COMPUTE SUM OF seconds ON REPORT; +-- + SELECT TO_CHAR(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS') AS begin_peak, + TO_CHAR(timestamp + (cost/3600/24), 'YYYY-MM-DD"T"HH24:MI:SS') AS end_peak, + cost AS seconds, + cardinality AS sessions_peak, + -- statement_id AS sql_id, + -- remarks AS sql_text, + statement_id||' '||SUBSTR(remarks, 1, 50) AS sql_statement, + -- operation AS session_state, + -- options AS wait_class, + -- object_node AS event, + CASE operation WHEN 'ON CPU' THEN operation ELSE options||' - '||object_node END AS timed_event, + -- object_owner AS pdb_name, + -- plan_id AS con_id + object_owner||'('||plan_id||')' AS pdb_name + FROM plan_table + ORDER BY 1 +/ +-- +PRO NOTE: Displayed values for 3 dimensions (SQL, Timed Event and PDB), correspond to sample time of Max Sessions diff --git a/csierra/cs_internal/cs_ash_analytics_footer.sql b/csierra/cs_internal/cs_ash_analytics_footer.sql new file mode 100644 index 0000000..7f6ef04 --- /dev/null +++ b/csierra/cs_internal/cs_ash_analytics_footer.sql @@ -0,0 +1,15 @@ +PRO
+PRO #01 &&aas_01.  &&series_01.
+PRO #02 &&aas_02.  &&series_02.
+PRO #03 &&aas_03.  &&series_03.
+PRO #04 &&aas_04.  &&series_04.
+PRO #05 &&aas_05.  &&series_05.
+PRO #06 &&aas_06.  &&series_06.
+PRO #07 &&aas_07.  &&series_07.
+PRO #08 &&aas_08.  &&series_08.
+PRO #09 &&aas_09.  &&series_09.
+PRO #10 &&aas_10.  &&series_10.
+PRO #11 &&aas_11.  &&series_11.
+PRO #12 &&aas_12.  &&series_12.
+PRO #13 &&aas_13.  &&series_13.
+PRO 
diff --git a/csierra/cs_internal/cs_ash_block_chains.sql b/csierra/cs_internal/cs_ash_block_chains.sql new file mode 100644 index 0000000..d8da4d5 --- /dev/null +++ b/csierra/cs_internal/cs_ash_block_chains.sql @@ -0,0 +1,178 @@ +SET PAGES 0; +COL block_chain FOR A100 HEA 'Blocked Sessions and its Blockers Chain'; +PRO +PRO Block Chains (when blocked sessions are over &×_cpu_cores.x NUM_CPU_CORES, between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~ +WITH +constants AS +(SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT o.value AS num_cpu_cores, d.name AS db_name, (SELECT /*+ MATERIALIZE NO_MERGE */ COUNT(*) FROM v$containers WHERE con_id > 2 AND ROWNUM >= 1) AS containers FROM v$osstat o, v$database d WHERE o.stat_name = 'NUM_CPU_CORES' AND ROWNUM >= 1 +), +sess_proc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT s.sid, s.serial#, p.spid, p.pname FROM v$session s, v$process p WHERE p.addr = s.paddr AND ROWNUM >= 1 +), +sqlstats AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT s.sql_id, SUBSTR(s.sql_text, 1, 40) AS sql_text FROM v$sqlstats s WHERE ROWNUM >= 1 +), +procedures AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ DISTINCT p.con_id, p.object_id, p.subprogram_id, p.owner, p.object_name, p.procedure_name FROM cdb_procedures p WHERE ROWNUM >= 1 +), +ash AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ h.sample_id, h.sample_time, h.session_state, h.wait_class, h.event, h.session_id, h.session_serial#, h.blocking_session, h.blocking_session_serial#, COALESCE(h.sql_id, h.top_level_sql_id) AS sql_id, h.module, h.machine, c.name AS pdb_name, h.con_id, h.plsql_entry_object_id, h.plsql_entry_subprogram_id + FROM dba_hist_active_sess_history h, v$containers c + WHERE 1 = 1 + AND '&&include_hist.' = 'Y' + AND TO_NUMBER('&&cs_con_id.') IN (1, h.con_id) + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND c.con_id(+) = h.con_id + AND ROWNUM >= 1 + UNION +SELECT /*+ MATERIALIZE NO_MERGE */ h.sample_id, h.sample_time, h.session_state, h.wait_class, h.event, h.session_id, h.session_serial#, h.blocking_session, h.blocking_session_serial#, COALESCE(h.sql_id, h.top_level_sql_id) AS sql_id, h.module, h.machine, c.name AS pdb_name, h.con_id, h.plsql_entry_object_id, h.plsql_entry_subprogram_id + FROM v$active_session_history h, v$containers c + WHERE 1 = 1 + AND '&&include_mem.' = 'Y' + AND TO_NUMBER('&&cs_con_id.') IN (1, h.con_id) + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND c.con_id(+) = h.con_id + AND ROWNUM >= 1 +), +ash_extended AS ( +SELECT /*+ MATERIALIZE NO_MERGE ORDERED */ + h0.sample_time, COUNT(*) AS sessions, h0.session_state||' on: "'||h0.wait_class||' - '||h0.event||'"' AS h0_timed_event, + -- + h0.blocking_session||CASE WHEN h0.blocking_session IS NOT NULL THEN ',' END||h0.blocking_session_serial# AS h1_session_serial, + CASE h1.session_state WHEN 'ON CPU' THEN h1.session_state WHEN 'WAITING' THEN h1.session_state||' on: "'||h1.wait_class||' - '||h1.event||'"' END h1_timed_event, + h1.sql_id AS h1_sql_id, h1.module AS h1_module, h1.machine AS h1_machine, + (SELECT p.pname FROM sess_proc p WHERE p.sid = h0.blocking_session AND p.serial# = h0.blocking_session_serial#) AS h1_pname, s1.sql_text AS s1_sql_text, + p1.owner||CASE WHEN p1.object_name IS NOT NULL THEN '.'||p1.object_name END||CASE WHEN p1.procedure_name IS NOT NULL THEN '.'||p1.procedure_name END AS p1_proced_name, + -- + h1.blocking_session||CASE WHEN h1.blocking_session IS NOT NULL THEN ',' END||h1.blocking_session_serial# AS h2_session_serial, + CASE h2.session_state WHEN 'ON CPU' THEN h2.session_state WHEN 'WAITING' THEN h2.session_state||' on: "'||h2.wait_class||' - '||h2.event||'"' END h2_timed_event, + h2.sql_id AS h2_sql_id, h2.module AS h2_module, h2.machine AS h2_machine, + (SELECT p.pname FROM sess_proc p WHERE p.sid = h1.blocking_session AND p.serial# = h1.blocking_session_serial#) AS h2_pname, s2.sql_text AS s2_sql_text, + p2.owner||CASE WHEN p2.object_name IS NOT NULL THEN '.'||p2.object_name END||CASE WHEN p2.procedure_name IS NOT NULL THEN '.'||p2.procedure_name END AS p2_proced_name, + -- + h2.blocking_session||CASE WHEN h2.blocking_session IS NOT NULL THEN ',' END||h2.blocking_session_serial# AS h3_session_serial, + CASE h3.session_state WHEN 'ON CPU' THEN h3.session_state WHEN 'WAITING' THEN h4.session_state||' on: "'||h3.wait_class||' - '||h3.event||'"' END h3_timed_event, + h3.sql_id AS h3_sql_id, h3.module AS h3_module, h3.machine AS h3_machine, + (SELECT p.pname FROM sess_proc p WHERE p.sid = h2.blocking_session AND p.serial# = h2.blocking_session_serial#) AS h3_pname, s3.sql_text AS s3_sql_text, + p3.owner||CASE WHEN p3.object_name IS NOT NULL THEN '.'||p3.object_name END||CASE WHEN p3.procedure_name IS NOT NULL THEN '.'||p3.procedure_name END AS p3_proced_name, + -- + h3.blocking_session||CASE WHEN h3.blocking_session IS NOT NULL THEN ',' END||h3.blocking_session_serial# AS h4_session_serial, + CASE h4.session_state WHEN 'ON CPU' THEN h4.session_state WHEN 'WAITING' THEN h1.session_state||' on: "'||h4.wait_class||' - '||h4.event||'"' END h4_timed_event, + h4.sql_id AS h4_sql_id, h4.module AS h4_module, h4.machine AS h4_machine, + (SELECT p.pname FROM sess_proc p WHERE p.sid = h3.blocking_session AND p.serial# = h3.blocking_session_serial#) AS h4_pname, s4.sql_text AS s4_sql_text, + p4.owner||CASE WHEN p4.object_name IS NOT NULL THEN '.'||p4.object_name END||CASE WHEN p4.procedure_name IS NOT NULL THEN '.'||p4.procedure_name END AS p4_proced_name + FROM ash h0, ash h1, ash h2, ash h3, ash h4, sqlstats s1, sqlstats s2, sqlstats s3, sqlstats s4, procedures p1, procedures p2, procedures p3, procedures p4 + WHERE h0.session_state = 'WAITING' + AND h0.blocking_session IS NOT NULL + AND h0.blocking_session_serial# IS NOT NULL + -- + AND h1.sample_id(+) = h0.sample_id + AND h1.session_id(+) = h0.blocking_session + AND h1.session_serial#(+) = h0.blocking_session_serial# + AND s1.sql_id(+) = h1.sql_id + -- + AND h2.sample_id(+) = h1.sample_id + AND h2.session_id(+) = h1.blocking_session + AND h2.session_serial#(+) = h1.blocking_session_serial# + AND s2.sql_id(+) = h2.sql_id + -- + AND h3.sample_id(+) = h2.sample_id + AND h3.session_id(+) = h2.blocking_session + AND h3.session_serial#(+) = h2.blocking_session_serial# + AND s3.sql_id(+) = h3.sql_id + -- + AND h4.sample_id(+) = h3.sample_id + AND h4.session_id(+) = h3.blocking_session + AND h4.session_serial#(+) = h3.blocking_session_serial# + AND s4.sql_id(+) = h4.sql_id + -- + AND p1.con_id(+) = h1.con_id + AND p1.object_id(+) = h1.plsql_entry_object_id + AND p1.subprogram_id(+) = h1.plsql_entry_subprogram_id + -- + AND p2.con_id(+) = h2.con_id + AND p2.object_id(+) = h2.plsql_entry_object_id + AND p2.subprogram_id(+) = h2.plsql_entry_subprogram_id + -- + AND p3.con_id(+) = h3.con_id + AND p3.object_id(+) = h3.plsql_entry_object_id + AND p3.subprogram_id(+) = h3.plsql_entry_subprogram_id + -- + AND p4.con_id(+) = h4.con_id + AND p4.object_id(+) = h4.plsql_entry_object_id + AND p4.subprogram_id(+) = h4.plsql_entry_subprogram_id + -- + AND ROWNUM >= 1 + GROUP BY + h0.sample_time, h0.session_state, h0.wait_class, h0.event, + h0.blocking_session, h0.blocking_session_serial#, h1.session_state, h1.wait_class, h1.event, h1.sql_id, h1.module, h1.machine, s1.sql_text, h1.con_id, h1.plsql_entry_object_id, h1.plsql_entry_subprogram_id, p1.owner, p1.object_name, p1.procedure_name, + h1.blocking_session, h1.blocking_session_serial#, h2.session_state, h2.wait_class, h2.event, h2.sql_id, h2.module, h2.machine, s2.sql_text, h2.con_id, h2.plsql_entry_object_id, h2.plsql_entry_subprogram_id, p2.owner, p2.object_name, p2.procedure_name, + h2.blocking_session, h2.blocking_session_serial#, h3.session_state, h3.wait_class, h3.event, h3.sql_id, h3.module, h3.machine, s3.sql_text, h3.con_id, h3.plsql_entry_object_id, h3.plsql_entry_subprogram_id, p3.owner, p3.object_name, p3.procedure_name, + h3.blocking_session, h3.blocking_session_serial#, h4.session_state, h4.wait_class, h4.event, h4.sql_id, h4.module, h4.machine, s4.sql_text, h4.con_id, h4.plsql_entry_object_id, h4.plsql_entry_subprogram_id, p4.owner, p4.object_name, p4.procedure_name +), +final AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + '+----------------------------------------------------------------'|| + CHR(10)||'| 1. On '||TO_CHAR(h.sample_time, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' ('||TRIM(TO_CHAR(h.sample_time, 'Day'))||')'|| + CHR(10)||'| '||TRIM(TO_CHAR(h.sessions, '999,990'))||' Active Sessions'|| + CHR(10)||'| from CDB '||c.db_name||', which hosts '||c.containers||' PDBs with '||c.num_cpu_cores||' CPU Cores'|| + CHR(10)||'| '||h.h0_timed_event|| + CASE WHEN h1_session_serial IS NOT NULL THEN + CHR(10)||'| *** were blocked by session below: ***'|| + CHR(10)||'| 2. sid,ser: '||h1_session_serial|| + CASE WHEN h1_pname IS NOT NULL THEN CHR(10)||'| process: '||h1_pname END|| + CASE WHEN h1_sql_id IS NOT NULL THEN CHR(10)||'| sql_id : '||h1_sql_id||' '||s1_sql_text END|| + CASE WHEN h1_module IS NOT NULL THEN CHR(10)||'| module : '||h1_module END|| + CASE WHEN p1_proced_name IS NOT NULL THEN CHR(10)||'| library: '||p1_proced_name END|| + CASE WHEN h1_machine IS NOT NULL THEN CHR(10)||'| machine: '||h1_machine END|| + CASE WHEN h1_timed_event IS NOT NULL THEN CHR(10)||'| '||h1_timed_event END + END|| + CASE WHEN h2_session_serial IS NOT NULL THEN + CHR(10)||'| *** which was blocked by session below: ***'|| + CHR(10)||'| 3. sid,ser: '||h2_session_serial|| + CASE WHEN h2_pname IS NOT NULL THEN CHR(10)||'| process: '||h2_pname END|| + CASE WHEN h2_sql_id IS NOT NULL THEN CHR(10)||'| sql_id : '||h2_sql_id||' '||s2_sql_text END|| + CASE WHEN h2_module IS NOT NULL THEN CHR(10)||'| module : '||h2_module END|| + CASE WHEN p2_proced_name IS NOT NULL THEN CHR(10)||'| library: '||p2_proced_name END|| + CASE WHEN h2_machine IS NOT NULL THEN CHR(10)||'| machine: '||h2_machine END|| + CASE WHEN h2_timed_event IS NOT NULL THEN CHR(10)||'| '||h2_timed_event END + END|| + CASE WHEN h3_session_serial IS NOT NULL THEN + CHR(10)||'| *** which was blocked by session below: ***'|| + CHR(10)||'| 4. sid,ser: '||h3_session_serial|| + CASE WHEN h3_pname IS NOT NULL THEN CHR(10)||'| process: '||h3_pname END|| + CASE WHEN h3_sql_id IS NOT NULL THEN CHR(10)||'| sql_id : '||h3_sql_id||' '||s3_sql_text END|| + CASE WHEN h3_module IS NOT NULL THEN CHR(10)||'| module : '||h3_module END|| + CASE WHEN p3_proced_name IS NOT NULL THEN CHR(10)||'| library: '||p3_proced_name END|| + CASE WHEN h3_machine IS NOT NULL THEN CHR(10)||'| machine: '||h3_machine END|| + CASE WHEN h3_timed_event IS NOT NULL THEN CHR(10)||'| '||h3_timed_event END + END|| + CASE WHEN h4_session_serial IS NOT NULL THEN + CHR(10)||'| *** which was blocked by session below: ***'|| + CHR(10)||'| 5. sid,ser: '||h4_session_serial|| + CASE WHEN h4_pname IS NOT NULL THEN CHR(10)||'| process: '||h4_pname END|| + CASE WHEN h4_sql_id IS NOT NULL THEN CHR(10)||'| sql_id : '||h4_sql_id||' '||s4_sql_text END|| + CASE WHEN h4_module IS NOT NULL THEN CHR(10)||'| module : '||h4_module END|| + CASE WHEN p4_proced_name IS NOT NULL THEN CHR(10)||'| library: '||p4_proced_name END|| + CASE WHEN h4_machine IS NOT NULL THEN CHR(10)||'| machine: '||h4_machine END|| + CASE WHEN h4_timed_event IS NOT NULL THEN CHR(10)||'| '||h4_timed_event END + END|| + CHR(10)||'+----------------------------------------------------------------' + AS block_chain + FROM ash_extended h, constants c + WHERE h.sessions >= &×_cpu_cores. * c.num_cpu_cores + AND ROWNUM >= 1 +) +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + block_chain + FROM final +ORDER BY 1 +/ + +SET PAGES 100; \ No newline at end of file diff --git a/csierra/cs_internal/cs_ash_block_chains_s.sql b/csierra/cs_internal/cs_ash_block_chains_s.sql new file mode 100644 index 0000000..7d2cca3 --- /dev/null +++ b/csierra/cs_internal/cs_ash_block_chains_s.sql @@ -0,0 +1,164 @@ +SET PAGES 0; +COL block_chain FOR A100 HEA 'Blocked Sessions and its Blockers Chain'; +PRO +PRO Block Chains (when blocked sessions are over &×_cpu_cores.x NUM_CPU_CORES, between &&cs_sample_time_from. and &&cs_sample_time_to. UTC) +PRO ~~~~~~~~~~~~ +WITH +constants AS +(SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT o.value AS num_cpu_cores, d.name AS db_name, (SELECT /*+ MATERIALIZE NO_MERGE */ COUNT(*) FROM v$containers WHERE con_id > 2 AND ROWNUM >= 1) AS containers FROM v$osstat o, v$database d WHERE o.stat_name = 'NUM_CPU_CORES' AND ROWNUM >= 1 +), +sess_proc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT s.sid, s.serial#, p.spid, p.pname FROM v$session s, v$process p WHERE p.addr = s.paddr AND ROWNUM >= 1 +), +sqlstats AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT s.sql_id, SUBSTR(s.sql_text, 1, 40) AS sql_text FROM v$sqlstats s WHERE ROWNUM >= 1 +), +procedures AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ DISTINCT p.con_id, p.object_id, p.subprogram_id, p.owner, p.object_name, p.procedure_name FROM cdb_procedures p WHERE ROWNUM >= 1 +), +ash AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ h.sample_id, h.sample_time, h.session_state, h.wait_class, h.event, h.session_id, h.session_serial#, h.blocking_session, h.blocking_session_serial#, COALESCE(h.sql_id, h.top_level_sql_id) AS sql_id, h.module, h.machine, c.name AS pdb_name, h.con_id, h.plsql_entry_object_id, h.plsql_entry_subprogram_id + FROM &&ash_view. h, v$containers c + WHERE 1 = 1 + AND TO_NUMBER('&&cs_con_id.') IN (1, h.con_id) + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND c.con_id(+) = h.con_id + AND ROWNUM >= 1 +), +ash_extended AS ( +SELECT /*+ MATERIALIZE NO_MERGE ORDERED */ + h0.sample_time, COUNT(*) AS sessions, h0.session_state||' on: "'||h0.wait_class||' - '||h0.event||'"' AS h0_timed_event, + -- + h0.blocking_session||CASE WHEN h0.blocking_session IS NOT NULL THEN ',' END||h0.blocking_session_serial# AS h1_session_serial, + CASE h1.session_state WHEN 'ON CPU' THEN h1.session_state WHEN 'WAITING' THEN h1.session_state||' on: "'||h1.wait_class||' - '||h1.event||'"' END h1_timed_event, + h1.sql_id AS h1_sql_id, h1.module AS h1_module, h1.machine AS h1_machine, + (SELECT p.pname FROM sess_proc p WHERE p.sid = h0.blocking_session AND p.serial# = h0.blocking_session_serial#) AS h1_pname, s1.sql_text AS s1_sql_text, + p1.owner||CASE WHEN p1.object_name IS NOT NULL THEN '.'||p1.object_name END||CASE WHEN p1.procedure_name IS NOT NULL THEN '.'||p1.procedure_name END AS p1_proced_name, + -- + h1.blocking_session||CASE WHEN h1.blocking_session IS NOT NULL THEN ',' END||h1.blocking_session_serial# AS h2_session_serial, + CASE h2.session_state WHEN 'ON CPU' THEN h2.session_state WHEN 'WAITING' THEN h2.session_state||' on: "'||h2.wait_class||' - '||h2.event||'"' END h2_timed_event, + h2.sql_id AS h2_sql_id, h2.module AS h2_module, h2.machine AS h2_machine, + (SELECT p.pname FROM sess_proc p WHERE p.sid = h1.blocking_session AND p.serial# = h1.blocking_session_serial#) AS h2_pname, s2.sql_text AS s2_sql_text, + p2.owner||CASE WHEN p2.object_name IS NOT NULL THEN '.'||p2.object_name END||CASE WHEN p2.procedure_name IS NOT NULL THEN '.'||p2.procedure_name END AS p2_proced_name, + -- + h2.blocking_session||CASE WHEN h2.blocking_session IS NOT NULL THEN ',' END||h2.blocking_session_serial# AS h3_session_serial, + CASE h3.session_state WHEN 'ON CPU' THEN h3.session_state WHEN 'WAITING' THEN h4.session_state||' on: "'||h3.wait_class||' - '||h3.event||'"' END h3_timed_event, + h3.sql_id AS h3_sql_id, h3.module AS h3_module, h3.machine AS h3_machine, + (SELECT p.pname FROM sess_proc p WHERE p.sid = h2.blocking_session AND p.serial# = h2.blocking_session_serial#) AS h3_pname, s3.sql_text AS s3_sql_text, + p3.owner||CASE WHEN p3.object_name IS NOT NULL THEN '.'||p3.object_name END||CASE WHEN p3.procedure_name IS NOT NULL THEN '.'||p3.procedure_name END AS p3_proced_name, + -- + h3.blocking_session||CASE WHEN h3.blocking_session IS NOT NULL THEN ',' END||h3.blocking_session_serial# AS h4_session_serial, + CASE h4.session_state WHEN 'ON CPU' THEN h4.session_state WHEN 'WAITING' THEN h1.session_state||' on: "'||h4.wait_class||' - '||h4.event||'"' END h4_timed_event, + h4.sql_id AS h4_sql_id, h4.module AS h4_module, h4.machine AS h4_machine, + (SELECT p.pname FROM sess_proc p WHERE p.sid = h3.blocking_session AND p.serial# = h3.blocking_session_serial#) AS h4_pname, s4.sql_text AS s4_sql_text, + p4.owner||CASE WHEN p4.object_name IS NOT NULL THEN '.'||p4.object_name END||CASE WHEN p4.procedure_name IS NOT NULL THEN '.'||p4.procedure_name END AS p4_proced_name + FROM ash h0, ash h1, ash h2, ash h3, ash h4, sqlstats s1, sqlstats s2, sqlstats s3, sqlstats s4, procedures p1, procedures p2, procedures p3, procedures p4 + WHERE h0.session_state = 'WAITING' + AND h0.blocking_session IS NOT NULL + AND h0.blocking_session_serial# IS NOT NULL + -- + AND h1.sample_id(+) = h0.sample_id + AND h1.session_id(+) = h0.blocking_session + AND h1.session_serial#(+) = h0.blocking_session_serial# + AND s1.sql_id(+) = h1.sql_id + -- + AND h2.sample_id(+) = h1.sample_id + AND h2.session_id(+) = h1.blocking_session + AND h2.session_serial#(+) = h1.blocking_session_serial# + AND s2.sql_id(+) = h2.sql_id + -- + AND h3.sample_id(+) = h2.sample_id + AND h3.session_id(+) = h2.blocking_session + AND h3.session_serial#(+) = h2.blocking_session_serial# + AND s3.sql_id(+) = h3.sql_id + -- + AND h4.sample_id(+) = h3.sample_id + AND h4.session_id(+) = h3.blocking_session + AND h4.session_serial#(+) = h3.blocking_session_serial# + AND s4.sql_id(+) = h4.sql_id + -- + AND p1.con_id(+) = h1.con_id + AND p1.object_id(+) = h1.plsql_entry_object_id + AND p1.subprogram_id(+) = h1.plsql_entry_subprogram_id + -- + AND p2.con_id(+) = h2.con_id + AND p2.object_id(+) = h2.plsql_entry_object_id + AND p2.subprogram_id(+) = h2.plsql_entry_subprogram_id + -- + AND p3.con_id(+) = h3.con_id + AND p3.object_id(+) = h3.plsql_entry_object_id + AND p3.subprogram_id(+) = h3.plsql_entry_subprogram_id + -- + AND p4.con_id(+) = h4.con_id + AND p4.object_id(+) = h4.plsql_entry_object_id + AND p4.subprogram_id(+) = h4.plsql_entry_subprogram_id + -- + AND ROWNUM >= 1 + GROUP BY + h0.sample_time, h0.session_state, h0.wait_class, h0.event, + h0.blocking_session, h0.blocking_session_serial#, h1.session_state, h1.wait_class, h1.event, h1.sql_id, h1.module, h1.machine, s1.sql_text, h1.con_id, h1.plsql_entry_object_id, h1.plsql_entry_subprogram_id, p1.owner, p1.object_name, p1.procedure_name, + h1.blocking_session, h1.blocking_session_serial#, h2.session_state, h2.wait_class, h2.event, h2.sql_id, h2.module, h2.machine, s2.sql_text, h2.con_id, h2.plsql_entry_object_id, h2.plsql_entry_subprogram_id, p2.owner, p2.object_name, p2.procedure_name, + h2.blocking_session, h2.blocking_session_serial#, h3.session_state, h3.wait_class, h3.event, h3.sql_id, h3.module, h3.machine, s3.sql_text, h3.con_id, h3.plsql_entry_object_id, h3.plsql_entry_subprogram_id, p3.owner, p3.object_name, p3.procedure_name, + h3.blocking_session, h3.blocking_session_serial#, h4.session_state, h4.wait_class, h4.event, h4.sql_id, h4.module, h4.machine, s4.sql_text, h4.con_id, h4.plsql_entry_object_id, h4.plsql_entry_subprogram_id, p4.owner, p4.object_name, p4.procedure_name +), +final AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + '+----------------------------------------------------------------'|| + CHR(10)||'| 1. On '||TO_CHAR(h.sample_time, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' ('||TRIM(TO_CHAR(h.sample_time, 'Day'))||')'|| + CHR(10)||'| '||TRIM(TO_CHAR(h.sessions, '999,990'))||' Active Sessions'|| + CHR(10)||'| from CDB '||c.db_name||', which hosts '||c.containers||' PDBs with '||c.num_cpu_cores||' CPU Cores'|| + CHR(10)||'| '||h.h0_timed_event|| + CASE WHEN h1_session_serial IS NOT NULL THEN + CHR(10)||'| *** were blocked by session below: ***'|| + CHR(10)||'| 2. sid,ser: '||h1_session_serial|| + CASE WHEN h1_pname IS NOT NULL THEN CHR(10)||'| process: '||h1_pname END|| + CASE WHEN h1_sql_id IS NOT NULL THEN CHR(10)||'| sql_id : '||h1_sql_id||' '||s1_sql_text END|| + CASE WHEN h1_module IS NOT NULL THEN CHR(10)||'| module : '||h1_module END|| + CASE WHEN p1_proced_name IS NOT NULL THEN CHR(10)||'| library: '||p1_proced_name END|| + CASE WHEN h1_machine IS NOT NULL THEN CHR(10)||'| machine: '||h1_machine END|| + CASE WHEN h1_timed_event IS NOT NULL THEN CHR(10)||'| '||h1_timed_event END + END|| + CASE WHEN h2_session_serial IS NOT NULL THEN + CHR(10)||'| *** which was blocked by session below: ***'|| + CHR(10)||'| 3. sid,ser: '||h2_session_serial|| + CASE WHEN h2_pname IS NOT NULL THEN CHR(10)||'| process: '||h2_pname END|| + CASE WHEN h2_sql_id IS NOT NULL THEN CHR(10)||'| sql_id : '||h2_sql_id||' '||s2_sql_text END|| + CASE WHEN h2_module IS NOT NULL THEN CHR(10)||'| module : '||h2_module END|| + CASE WHEN p2_proced_name IS NOT NULL THEN CHR(10)||'| library: '||p2_proced_name END|| + CASE WHEN h2_machine IS NOT NULL THEN CHR(10)||'| machine: '||h2_machine END|| + CASE WHEN h2_timed_event IS NOT NULL THEN CHR(10)||'| '||h2_timed_event END + END|| + CASE WHEN h3_session_serial IS NOT NULL THEN + CHR(10)||'| *** which was blocked by session below: ***'|| + CHR(10)||'| 4. sid,ser: '||h3_session_serial|| + CASE WHEN h3_pname IS NOT NULL THEN CHR(10)||'| process: '||h3_pname END|| + CASE WHEN h3_sql_id IS NOT NULL THEN CHR(10)||'| sql_id : '||h3_sql_id||' '||s3_sql_text END|| + CASE WHEN h3_module IS NOT NULL THEN CHR(10)||'| module : '||h3_module END|| + CASE WHEN p3_proced_name IS NOT NULL THEN CHR(10)||'| library: '||p3_proced_name END|| + CASE WHEN h3_machine IS NOT NULL THEN CHR(10)||'| machine: '||h3_machine END|| + CASE WHEN h3_timed_event IS NOT NULL THEN CHR(10)||'| '||h3_timed_event END + END|| + CASE WHEN h4_session_serial IS NOT NULL THEN + CHR(10)||'| *** which was blocked by session below: ***'|| + CHR(10)||'| 5. sid,ser: '||h4_session_serial|| + CASE WHEN h4_pname IS NOT NULL THEN CHR(10)||'| process: '||h4_pname END|| + CASE WHEN h4_sql_id IS NOT NULL THEN CHR(10)||'| sql_id : '||h4_sql_id||' '||s4_sql_text END|| + CASE WHEN h4_module IS NOT NULL THEN CHR(10)||'| module : '||h4_module END|| + CASE WHEN p4_proced_name IS NOT NULL THEN CHR(10)||'| library: '||p4_proced_name END|| + CASE WHEN h4_machine IS NOT NULL THEN CHR(10)||'| machine: '||h4_machine END|| + CASE WHEN h4_timed_event IS NOT NULL THEN CHR(10)||'| '||h4_timed_event END + END|| + CHR(10)||'+----------------------------------------------------------------' + AS block_chain + FROM ash_extended h, constants c + WHERE h.sessions >= &×_cpu_cores. * c.num_cpu_cores + AND ROWNUM >= 1 +) +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + block_chain + FROM final +ORDER BY 1 +/ + +SET PAGES 100; \ No newline at end of file diff --git a/csierra/cs_internal/cs_ash_sample_detail.sql b/csierra/cs_internal/cs_ash_sample_detail.sql new file mode 100644 index 0000000..a399401 --- /dev/null +++ b/csierra/cs_internal/cs_ash_sample_detail.sql @@ -0,0 +1,196 @@ +COL sql_text FOR A70 HEA 'SQL Text' TRUNC; +COL procedure_name FOR A70 HEA 'PL/SQL Library Entry Point' TRUNC &&cs_pl_sql_pri.; +COL module_action_program FOR A70 HEA 'Module Action Program' TRUNC; +COL sample_date_time FOR A23 HEA 'Sample Date and Time'; +COL samples FOR 9999,999 HEA 'Active|Sessions'; +COL on_cpu_or_wait_class FOR A14 HEA 'ON CPU or|Wait Class'; +COL on_cpu_or_wait_event FOR A50 HEA 'ON CPU or Timed Event'; +COL session_serial FOR A16 HEA 'Session,Serial'; +COL machine FOR A60 HEA 'Machine or Application Server'; +COL con_id FOR 999999; +COL plans FOR 99999 HEA 'Plans'; +COL sessions FOR 9999,999 HEA 'Sessions|this SQL'; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +COL sql_id FOR A13 HEA 'SQL_ID'; +COL blocking_session_status FOR A11 HEA 'Blocker|Session|Status'; +COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL sql_plan_line_id FOR 9999 HEA 'Plan|Line'; +COL sql_child_number FOR 999999 HEA 'Child|Number'; +COL sql_exec_id FOR 99999999 HEA 'Exec ID'; +COL xid FOR A16 HEA 'Transaction ID'; +COL current_obj# FOR 9999999999 HEA 'Current|Obj#'; +COL current_file# FOR 9999999999 HEA 'Current|File#'; +COL current_block# FOR 9999999999 HEA 'Current|Block#'; +COL current_row# FOR 9999999999 HEA 'Current|Row#'; +COL in_connection_mgmt FOR A6 HEA 'In|Connec|Mgmt'; +COL in_parse FOR A6 HEA 'In|Parse'; +COL in_hard_parse FOR A6 HEA 'In|Hard|Parse'; +COL in_sql_execution FOR A6 HEA 'In|SQL|Exec'; +COL in_plsql_execution FOR A6 HEA 'In|PLSQL|Exec'; +COL in_plsql_rpc FOR A6 HEA 'In|PLSQL|RPC'; +COL in_plsql_compilation FOR A6 HEA 'In|PLSQL|Compil'; +COL in_java_execution FOR A6 HEA 'In|Java|Exec'; +COL in_bind FOR A6 HEA 'In|Bind'; +COL in_cursor_close FOR A6 HEA 'In|Cursor|Close'; +COL in_sequence_load FOR A6 HEA 'In|Seq|Load'; +COL top_level_sql_id FOR A13 HEA 'Top Level|SQL_ID'; +COL is_sqlid_current FOR A4 HEA 'Is|SQL|Exec'; +COL blocking_session_serial FOR A16 HEA 'Blocker|Session,Serial'; +COL blocking2_session_serial FOR A16 HEA 'Blocker(2)|Session,Serial'; +COL blocking3_session_serial FOR A16 HEA 'Blocker(3)|Session,Serial'; +COL blocking4_session_serial FOR A16 HEA 'Blocker(4)|Session,Serial'; +COL blocking5_session_serial FOR A16 HEA 'Blocker(5)|Session,Serial'; +COL blocking_machine FOR A60 HEA 'Machine or Application Server (blocker)'; +COL deadlock FOR A4 HEA 'Dead|Lock'; +COL lock_type FOR A4 HEA 'Lock'; +COL lock_mode FOR A4 HEA 'Mode'; +COL p1_p2_p3 FOR A100 HEA 'P1, P2, P3'; +COL current_object_name FOR A40 HEA 'Current|Object Name (Object Type)' TRUNC; +COL secs_waited FOR 990.000 HEA 'Secs|Waited'; +COL spid FOR A6; +COL pname FOR A5; +-- +BREAK ON sample_date_time SKIP PAGE ON machine SKIP 1; +PRO +PRO ASH by sample time, appl server, session and SQL_ID +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH /* cs_ash_sample_detail */ +-- sess_proc AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT s.sid, s.serial#, p.spid, p.pname FROM v$session s, v$process p WHERE p.addr = s.paddr AND ROWNUM >= 1 +-- ), +sqlstats AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT s.sql_id, s.sql_text FROM v$sqlstats s WHERE ROWNUM >= 1 +), +procedures AS ( +SELECT DISTINCT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ p.con_id, p.object_id, p.subprogram_id, p.owner, p.object_name, p.procedure_name FROM cdb_procedures p WHERE '&&cs_pl_sql.' = 'Y' AND ROWNUM >= 1 +), +ash AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ h.*, c.name AS pdb_name + FROM &&ash_view. h, v$containers c + WHERE 1 = 1 &&ash_additional_predicate. + AND (TO_NUMBER('&&cs_con_id.') IN (0, 1, h.con_id) OR h.con_id IN (0, 1)) -- now we include CDB$ROOT samples when executed from a PDB + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE '%&&cs2_machine.%') + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND ('&&cs_only_dedup.' = 'N' OR (h.event = 'enq: TX - row lock contention' AND h.p1text LIKE 'name|mode%' AND h.p1 > 0 AND TO_CHAR(BITAND(h.p1, 65535)) = '4' AND h.current_obj# > 0 AND h.xid IS NOT NULL)) + AND c.con_id(+) = h.con_id + AND ROWNUM >= 1 +), +sess_proc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ DISTINCT s.sid, s.serial#, p.spid, p.pname FROM v$session s, v$process p WHERE (s.sid, s.serial#) IN (SELECT DISTINCT session_id, session_serial# FROM ash) AND p.addr = s.paddr AND ROWNUM >= 1 +), +sess AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + session_id, + session_serial#, + MAX(machine) machine + FROM ash + WHERE ROWNUM >= 1 + GROUP BY + session_id, + session_serial# +) +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS ORDERED */ + TO_CHAR(h.sample_time, '&&cs_timestamp_full_format.') sample_date_time, + h.machine, + h.con_id, + h.pdb_name, + sp.pname, + sp.spid, + 's:'||h.session_id||','||h.session_serial# session_serial, + h.blocking_session_status, + CASE WHEN (h.session_id, h.session_serial#) IN ((b.blocking_session, b.blocking_session_serial#), (b2.blocking_session, b2.blocking_session_serial#)) THEN 'DL?' END deadlock, + CASE WHEN h.blocking_session IS NOT NULL THEN 'b:'||h.blocking_session||','||h.blocking_session_serial# END blocking_session_serial, + CASE WHEN b.blocking_session IS NOT NULL THEN 'b2:'||b.blocking_session||','||b.blocking_session_serial# END blocking2_session_serial, + CASE WHEN b2.blocking_session IS NOT NULL THEN 'b3:'||b2.blocking_session||','||b2.blocking_session_serial# END blocking3_session_serial, + CASE WHEN b3.blocking_session IS NOT NULL THEN 'b4:'||b3.blocking_session||','||b3.blocking_session_serial# END blocking4_session_serial, + CASE WHEN b4.blocking_session IS NOT NULL THEN 'b5:'||b4.blocking_session||','||b4.blocking_session_serial# END blocking5_session_serial, + CASE + WHEN b4.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.session_id = b4.blocking_session AND s.session_serial# = b4.blocking_session_serial#) + WHEN b3.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.session_id = b3.blocking_session AND s.session_serial# = b3.blocking_session_serial#) + WHEN b2.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.session_id = b2.blocking_session AND s.session_serial# = b2.blocking_session_serial#) + WHEN b.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.session_id = b.blocking_session AND s.session_serial# = b.blocking_session_serial#) + WHEN h.blocking_session IS NOT NULL THEN (SELECT s.machine FROM sess s WHERE s.session_id = h.blocking_session AND s.session_serial# = h.blocking_session_serial#) + END blocking_machine, + h.sql_id, + h.is_sqlid_current, + h.sql_plan_hash_value, + h.sql_plan_line_id, + h.sql_child_number, + h.sql_exec_id, + h.xid, + h.top_level_sql_id, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END on_cpu_or_wait_event, + st.sql_text, + pr.owner|| + CASE WHEN pr.object_name IS NOT NULL THEN '.'||pr.object_name END|| + CASE WHEN pr.procedure_name IS NOT NULL THEN '.'||pr.procedure_name END + AS procedure_name, + CASE WHEN TRIM(h.module) IS NOT NULL THEN 'm:'||TRIM(h.module)||' ' END|| + CASE WHEN TRIM(h.action) IS NOT NULL THEN 'a:'||TRIM(h.action)||' ' END|| + CASE WHEN TRIM(h.program) IS NOT NULL THEN 'p:'||TRIM(h.program) END + AS module_action_program, + h.current_obj#, + h.current_file#, + h.current_block#, + h.current_row#, + h.in_connection_mgmt, + h.in_parse, + h.in_hard_parse, + h.in_sql_execution, + h.in_plsql_execution, + h.in_plsql_rpc, + h.in_plsql_compilation, + h.in_java_execution, + h.in_bind, + h.in_cursor_close, + h.in_sequence_load, + CASE WHEN h.event LIKE 'enq:%' AND h.p1text LIKE 'name|mode%' AND h.p1 > 0 THEN CHR(BITAND(h.p1,-16777216)/16777215)||CHR(BITAND(h.p1, 16711680)/65535) END AS lock_type, + CASE WHEN h.event LIKE 'enq:%' AND h.p1text LIKE 'name|mode%' AND h.p1 > 0 THEN TO_CHAR(BITAND(h.p1, 65535)) END AS lock_mode, + NVL2(TRIM(h.p1text), h.p1text||':'||h.p1, NULL)||NVL2(TRIM(h.p2text), ', '||h.p2text||':'||h.p2, NULL)||NVL2(TRIM(h.p3text), ', '||h.p3text||':'||h.p3, NULL) p1_p2_p3 + FROM ash h, + ash b, + ash b2, + ash b3, + ash b4, + sess_proc sp, + sqlstats st, + procedures pr + WHERE b.sample_id(+) = h.sample_id + AND b.session_id(+) = h.blocking_session + AND b.session_serial#(+) = h.blocking_session_serial# + AND b2.sample_id(+) = b.sample_id + AND b2.session_id(+) = b.blocking_session + AND b2.session_serial#(+) = b.blocking_session_serial# + AND b3.sample_id(+) = b2.sample_id + AND b3.session_id(+) = b2.blocking_session + AND b3.session_serial#(+) = b2.blocking_session_serial# + AND b4.sample_id(+) = b3.sample_id + AND b4.session_id(+) = b3.blocking_session + AND b4.session_serial#(+) = b3.blocking_session_serial# + AND ( '&&cs_sid_serial.' IS NULL + OR 's:'||h.session_id||','||h.session_serial# LIKE '%&&cs_sid_serial.%' + OR 'b:'||h.blocking_session||','||h.blocking_session_serial# LIKE '%&&cs_sid_serial.%' + OR 'b2:'||b.blocking_session||','||b.blocking_session_serial# LIKE '%&&cs_sid_serial.%' + OR 'b3:'||b2.blocking_session||','||b2.blocking_session_serial# LIKE '%&&cs_sid_serial.%' + OR 'b4:'||b3.blocking_session||','||b3.blocking_session_serial# LIKE '%&&cs_sid_serial.%' + OR 'b5:'||b4.blocking_session||','||b4.blocking_session_serial# LIKE '%&&cs_sid_serial.%' + ) + AND sp.sid(+) = h.session_id + AND sp.serial#(+) = h.session_serial# + AND st.sql_id(+) = h.sql_id + AND pr.con_id(+) = h.con_id + AND pr.object_id(+) = h.plsql_entry_object_id + AND pr.subprogram_id(+) = h.plsql_entry_subprogram_id + ORDER BY + h.sample_time, + CASE WHEN h.machine LIKE '%iod-%' THEN 1 ELSE 2 END, + h.machine, + h.con_id, + h.session_id, + h.session_serial#, + h.sql_id +/ +PRO +PRO Note: for furher details on a session, execute at PDB or CDB: SELECT h.* FROM &&ash_view h WHERE h.sample_time = TO_TIMESTAMP('&&double_ampersand.sample_date_and_time.', '&&cs_timestamp_full_format.') AND h.session_id = &&double_ampersand.session.&&ash_additional_predicate.; followed by @pr.sql \ No newline at end of file diff --git a/csierra/cs_internal/cs_bind_capture_hist.sql b/csierra/cs_internal/cs_bind_capture_hist.sql new file mode 100644 index 0000000..efd58be --- /dev/null +++ b/csierra/cs_internal/cs_bind_capture_hist.sql @@ -0,0 +1,44 @@ +-- +/****************************************************************************************/ +-- +@@&&cs_set_container_to_cdb_root. +-- +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL last_captured FOR A19 HEA 'Last Captured'; +COL position FOR 990 HEA 'Pos'; +COL datatype_string FOR A15 HEA 'Data Type'; +COL name_and_value FOR A200 HEA 'Bind Name and Value'; +COL max_length FOR 999999 HEA 'Max|Length'; +-- +BRE ON last_captured SKIP 1 ON con_id ON pdb_name; +-- +PRO +PRO CAPTURED BINDS (dba_hist_sqlbind) - last &&cs_binds_days. day(s) +PRO ~~~~~~~~~~~~~~ +SELECT DISTINCT + TO_CHAR(h.last_captured, '&&cs_datetime_full_format.') AS last_captured, + h.position, + h.datatype_string, + h.max_length, + h.name||' = '||h.value_string AS name_and_value, + c.name AS pdb_name, + h.con_id + FROM dba_hist_sqlbind h, + v$containers c + WHERE h.sql_id = '&&cs_sql_id.' + AND h.dbid = '&&cs_dbid.' + AND h.instance_number = '&&cs_instance_number.' + AND &&cs_con_id. IN (1, h.con_id) + AND h.last_captured BETWEEN SYSDATE - &&cs_binds_days. AND SYSDATE -- filter out bogus future dates such as 2106-02-07T06:13:16 + AND c.con_id = h.con_id + ORDER BY + 1, 2 +/ +-- +CL BRE; +-- +@@&&cs_set_container_to_curr_pdb. +-- +/****************************************************************************************/ +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_bind_capture_mem.sql b/csierra/cs_internal/cs_bind_capture_mem.sql new file mode 100644 index 0000000..8ca3858 --- /dev/null +++ b/csierra/cs_internal/cs_bind_capture_mem.sql @@ -0,0 +1,43 @@ +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL last_captured FOR A19 HEA 'Last Captured'; +COL child_number FOR 999999 HEA 'Child|Number'; +COL position FOR 990 HEA 'Pos'; +COL datatype_string FOR A15 HEA 'Data Type'; +COL name_and_value FOR A200 HEA 'Bind Name and Value'; +COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL max_length FOR 999999 HEA 'Max|Length'; +-- +BRE ON last_captured SKIP 1 ON con_id ON pdb_name ON plan_hash_value ON child_number; +-- +PRO +PRO CAPTURED BINDS (v$sql_bind_capture) +PRO ~~~~~~~~~~~~~~ +SELECT DISTINCT + TO_CHAR(c.last_captured, '&&cs_datetime_full_format.') AS last_captured, + c.child_number, + s.plan_hash_value, + c.position, + c.datatype_string, + c.max_length, + c.name||' = '||c.value_string AS name_and_value, + x.name AS pdb_name, + c.con_id + FROM v$sql_bind_capture c, + v$sql s, + v$containers x + WHERE c.sql_id = '&&cs_sql_id.' + AND c.last_captured < SYSDATE -- filter out bogus future dates such as 2106-02-07T06:13:16 + AND s.address(+) = c.address + AND s.hash_value(+) = c.hash_value + AND s.sql_id(+) = c.sql_id + AND s.child_address(+) = c.child_address + AND s.child_number(+) = c.child_number + AND s.con_id(+) = c.con_id + AND x.con_id = c.con_id + ORDER BY + 1, 2, 4 +/ +-- +CL BRE; +-- diff --git a/csierra/cs_internal/cs_binds_xml.sql b/csierra/cs_internal/cs_binds_xml.sql new file mode 100644 index 0000000..8cc55b5 --- /dev/null +++ b/csierra/cs_internal/cs_binds_xml.sql @@ -0,0 +1,504 @@ +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL sum_seconds FOR 999,999,990 HEA 'Sum Dur Secs'; +COL avg_seconds FOR 999,999,990 HEA 'Avg Dur Secs'; +COL max_seconds FOR 999,999,990 HEA 'Max Dur Secs'; +COL execs FOR 999,990 HEA 'Executions'; +COL last_refresh_time FOR A19 HEA 'Last Captured'; +COL con_id FOR 999 HEA 'Con|ID'; +COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL binds FOR A300 HEA 'Binds (:name=value :name=value ...)' TRUNC; +COL status FOR A19 HEA 'Status'; +COL username FOR A30 HEA 'Username' TRUNC; +COL machine FOR A64 HEA 'Machine'; +COL sid_serial# FOR A12 HEA 'Sid,Serial#'; +COL avg_et_secs FOR 999,999,990.0 HEA 'Avg ET Secs'; +COL avg_cpu_secs FOR 999,999,990.0 HEA 'Avg CPU Secs'; +COL avg_buffer_gets FOR 999,999,999,990 HEA 'Avg Buffer Gets'; +COL avg_disk_reads FOR 999,999,999,990 HEA 'Avg Disk Reads'; +COL module_action_program FOR A100 HEA 'Module Action Program' TRUNC; +-- +PRO +PRO SQL MONITOR BINDS by Sum Secs (v$sql_monitor) Top 100 +PRO ~~~~~~~~~~~~~~~~~ +-- +WITH +mon AS ( +SELECT s.con_id, + s.sql_plan_hash_value, + s.sql_exec_id, + s.sql_exec_start, + s.last_refresh_time, + s.binds_xml, + (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 AS seconds, + s.status, + s.username, + s.sid, + s.session_serial# AS serial#, + (SELECT e.machine FROM v$session e WHERE e.sid = s.sid AND e.serial# = s.session_serial# AND e.machine IS NOT NULL AND ROWNUM = 1) AS machine, + s.elapsed_time, + s.cpu_time, + s.buffer_gets, + s.disk_reads, + s.module, + s.action, + s.program + FROM v$sql_monitor s + WHERE s.sql_id = '&&cs_sql_id.' + AND (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 >= 0 + AND s.binds_xml IS NOT NULL +), +bind AS ( +SELECT mon.con_id, + mon.sql_plan_hash_value, + mon.sql_exec_id, + mon.sql_exec_start, + mon.last_refresh_time, + mon.seconds, + mon.status, + mon.username, + mon.sid, + mon.serial#, + mon.machine, + mon.elapsed_time, + mon.cpu_time, + mon.buffer_gets, + mon.disk_reads, + mon.module, + mon.action, + mon.program, + bv.name, + bv.pos, + bv.type, + bv.maxlen, + bv.len, + bv.value + FROM mon, + XMLTABLE( '/binds/bind' + PASSING XMLTYPE(REPLACE(REPLACE(ASCIISTR(mon.binds_xml), '\FFFF'), CHR(0))) + COLUMNS name VARCHAR2( 30 ) path '@name' , + pos NUMBER path '@pos', + type VARCHAR2( 15 ) path '@dtystr' , + maxlen NUMBER path '@maxlen', + len NUMBER path '@len', + value VARCHAR2( 4000 ) path '.' + ) bv +), +execs AS ( +SELECT con_id, + sql_plan_hash_value, + sql_exec_id, + sql_exec_start, + last_refresh_time, + seconds, + status, + username, + sid, + serial#, + machine, + elapsed_time, + cpu_time, + buffer_gets, + disk_reads, + module, + action, + program, + MAX(CASE pos WHEN 1 THEN name||'='||value END)|| + MAX(CASE pos WHEN 2 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 3 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 4 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 5 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 6 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 7 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 8 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 9 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 10 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 11 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 12 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 13 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 14 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 15 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 16 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 17 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 18 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 19 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 20 THEN ' '||name||'='||value END) + AS binds + FROM bind + GROUP BY + con_id, + sql_plan_hash_value, + sql_exec_id, + sql_exec_start, + last_refresh_time, + seconds, + status, + username, + sid, + serial#, + machine, + elapsed_time, + cpu_time, + buffer_gets, + disk_reads, + module, + action, + program +) +SELECT SUM(seconds) AS sum_seconds, + ROUND(AVG(seconds)) AS avg_seconds, + MAX(seconds) AS max_seconds, + COUNT(*) AS execs, + ROUND(AVG(elapsed_time)/1e6, 1) AS avg_et_secs, + ROUND(AVG(cpu_time)/1e6, 1) AS avg_cpu_secs, + ROUND(AVG(buffer_gets)) AS avg_buffer_gets, + ROUND(AVG(disk_reads)) AS avg_disk_reads, + MAX(last_refresh_time) AS last_refresh_time, + con_id, + (SELECT c.name FROM v$containers c WHERE c.con_id = e.con_id) AS pdb_name, + sql_plan_hash_value, + binds + -- status, + -- sid||','||serial# AS sid_serial#, + -- --username, + -- machine, + -- TRIM( + -- CASE WHEN module IS NOT NULL THEN 'm:'||SUBSTR(module, 1, 64) END|| + -- CASE WHEN action IS NOT NULL THEN ' a:'||SUBSTR(action, 1, 64) END|| + -- CASE WHEN program IS NOT NULL THEN ' p:'||SUBSTR(program, 1, 64) END + -- ) AS module_action_program + FROM execs e + GROUP BY + con_id, + sql_plan_hash_value, + binds + -- status, + -- username, + -- sid, + -- serial#, + -- machine, + -- module, + -- action, + -- program + ORDER BY + 1 DESC, + 2 DESC, + 3 DESC, + 5 +FETCH FIRST 100 ROWS ONLY +/ +-- +PRO +PRO SQL MONITOR BINDS by Last Captured (v$sql_monitor) Last 100 +PRO ~~~~~~~~~~~~~~~~~ +-- +WITH +mon AS ( +SELECT s.con_id, + s.sql_plan_hash_value, + s.sql_exec_id, + s.sql_exec_start, + s.last_refresh_time, + s.binds_xml, + (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 AS seconds, + s.status, + s.username, + s.sid, + s.session_serial# AS serial#, + (SELECT e.machine FROM v$session e WHERE e.sid = s.sid AND e.serial# = s.session_serial# AND e.machine IS NOT NULL AND ROWNUM = 1) AS machine, + s.elapsed_time, + s.cpu_time, + s.buffer_gets, + s.disk_reads, + s.module, + s.action, + s.program + FROM v$sql_monitor s + WHERE s.sql_id = '&&cs_sql_id.' + AND (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 >= 0 + AND s.binds_xml IS NOT NULL +), +bind AS ( +SELECT mon.con_id, + mon.sql_plan_hash_value, + mon.sql_exec_id, + mon.sql_exec_start, + mon.last_refresh_time, + mon.seconds, + mon.status, + mon.username, + mon.sid, + mon.serial#, + mon.machine, + mon.elapsed_time, + mon.cpu_time, + mon.buffer_gets, + mon.disk_reads, + mon.module, + mon.action, + mon.program, + bv.name, + bv.pos, + bv.type, + bv.maxlen, + bv.len, + bv.value + FROM mon, + XMLTABLE( '/binds/bind' + PASSING XMLTYPE(REPLACE(REPLACE(ASCIISTR(mon.binds_xml), '\FFFF'), CHR(0))) + COLUMNS name VARCHAR2( 30 ) path '@name' , + pos NUMBER path '@pos', + type VARCHAR2( 15 ) path '@dtystr' , + maxlen NUMBER path '@maxlen', + len NUMBER path '@len', + value VARCHAR2( 4000 ) path '.' + ) bv +), +execs AS ( +SELECT con_id, + sql_plan_hash_value, + sql_exec_id, + sql_exec_start, + last_refresh_time, + seconds, + status, + username, + sid, + serial#, + machine, + elapsed_time, + cpu_time, + buffer_gets, + disk_reads, + module, + action, + program, + MAX(CASE pos WHEN 1 THEN name||'='||value END)|| + MAX(CASE pos WHEN 2 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 3 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 4 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 5 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 6 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 7 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 8 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 9 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 10 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 11 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 12 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 13 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 14 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 15 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 16 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 17 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 18 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 19 THEN ' '||name||'='||value END)|| + MAX(CASE pos WHEN 20 THEN ' '||name||'='||value END) + AS binds + FROM bind + GROUP BY + con_id, + sql_plan_hash_value, + sql_exec_id, + sql_exec_start, + last_refresh_time, + seconds, + status, + username, + sid, + serial#, + machine, + elapsed_time, + cpu_time, + buffer_gets, + disk_reads, + module, + action, + program +), +top AS ( +SELECT MAX(last_refresh_time) AS last_refresh_time, + SUM(seconds) AS sum_seconds, + ROUND(AVG(seconds)) AS avg_seconds, + MAX(seconds) AS max_seconds, + COUNT(*) AS execs, + ROUND(AVG(elapsed_time)/1e6, 1) AS avg_et_secs, + ROUND(AVG(cpu_time)/1e6, 1) AS avg_cpu_secs, + ROUND(AVG(buffer_gets)) AS avg_buffer_gets, + ROUND(AVG(disk_reads)) AS avg_disk_reads, + con_id, + (SELECT c.name FROM v$containers c WHERE c.con_id = e.con_id) AS pdb_name, + sql_plan_hash_value, + binds + -- status, + -- sid||','||serial# AS sid_serial#, + --username, + -- machine, + -- TRIM( + -- CASE WHEN module IS NOT NULL THEN 'm:'||SUBSTR(module, 1, 64) END|| + -- CASE WHEN action IS NOT NULL THEN ' a:'||SUBSTR(action, 1, 64) END|| + -- CASE WHEN program IS NOT NULL THEN ' p:'||SUBSTR(program, 1, 64) END + -- ) AS module_action_program + FROM execs e + GROUP BY + con_id, + sql_plan_hash_value, + binds + -- status, + -- username, + -- sid, + -- serial#, + -- machine, + -- module, + -- action, + -- program + ORDER BY + 1 DESC +FETCH FIRST 100 ROWS ONLY +) +SELECT last_refresh_time, + sum_seconds, + avg_seconds, + max_seconds, + execs, + avg_et_secs, + avg_cpu_secs, + avg_buffer_gets, + avg_disk_reads, + con_id, + pdb_name, + sql_plan_hash_value, + binds + -- status, + -- sid_serial#, + --username, + -- machine, + -- module_action_program + FROM top + ORDER BY + last_refresh_time +/ +-- +PRO +PRO SQL MONITOR BINDS by Sum of Elapsed Time (v$sql_monitor) Top 100 +PRO ~~~~~~~~~~~~~~~~~ +-- +COL sum_duration_secs FOR 999,990 HEA 'Sum|Duration|Seconds'; +COL sum_elapsed_secs FOR 999,990 HEA 'Sum|Elapsed|Seconds'; +COL sum_cpu_secs FOR 999,990 HEA 'Sum|CPU|Seconds'; +COL sum_buffer_gets FOR 999,999,999,990 HEA 'Sum|Buffer|Gets'; +COL sum_disk_reads FOR 999,999,999,990 HEA 'Sum|Disk|Reads'; +COL avg_duration_secs FOR 999,990 HEA 'Avg|Duration|Seconds'; +COL avg_elapsed_secs FOR 999,990 HEA 'Avg|Elapsed|Seconds'; +COL avg_cpu_secs FOR 999,990 HEA 'Avg|CPU|Seconds'; +COL avg_buffer_gets FOR 999,999,999,990 HEA 'Avg|Buffer|Gets'; +COL avg_disk_reads FOR 999,999,999,990 HEA 'Avg|Disk|Reads'; +COL max_duration_secs FOR 999,990 HEA 'Max|Duration|Seconds'; +COL max_elapsed_secs FOR 999,990 HEA 'Max|Elapsed|Seconds'; +COL max_cpu_secs FOR 999,990 HEA 'Max|CPU|Seconds'; +COL max_buffer_gets FOR 999,999,999,990 HEA 'Max|Buffer|Gets'; +COL max_disk_reads FOR 999,999,999,990 HEA 'Max|Disk|Reads'; +COL cnt FOR 999,990 HEA 'Count'; +COL name_and_value FOR A200 HEA 'Bind Name and Value'; +COL min_sql_exec_start HEA 'Min SQL|Exec Start'; +COL max_last_refresh_time HEA 'Max Last|Refresh Time'; +COL d1 FOR A1 HEA '|'; +COL d2 FOR A1 HEA '|'; +COL d3 FOR A1 HEA '|'; +COL d4 FOR A1 HEA '|'; +-- +WITH +mon AS ( +SELECT s.key, + s.con_id, + s.sql_plan_hash_value, + s.sql_exec_id, + s.sql_exec_start, + s.last_refresh_time, + (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 AS seconds, + s.status, + s.username, + s.sid, + s.session_serial# AS serial#, + s.elapsed_time, + s.cpu_time, + s.buffer_gets, + s.disk_reads, + s.module, + s.action, + s.program, + bv.pos, + bv.name, + bv.type, + bv.maxlen, + bv.len, + bv.value + FROM v$sql_monitor s, + xmltable( '/binds/bind' + passing xmltype(REPLACE(REPLACE(ASCIISTR(s.binds_xml), '\FFFF'), CHR(0))) + COLUMNS name VARCHAR2( 30 ) path '@name' , + pos NUMBER path '@pos', + type VARCHAR2( 15 ) path '@dtystr' , + maxlen NUMBER path '@maxlen', + len NUMBER path '@len', + value VARCHAR2( 4000 ) path '.' + ) bv + WHERE s.sql_id = '&&cs_sql_id.' + AND s.status LIKE 'DONE%' + AND s.binds_xml IS NOT NULL +), +grp AS ( +SELECT SUM(seconds) AS sum_duration_secs, + SUM(elapsed_time) / POWER(10, 6) AS sum_elapsed_secs, + SUM(cpu_time) / POWER(10, 6) AS sum_cpu_secs, + SUM(buffer_gets) AS sum_buffer_gets, + SUM(disk_reads) AS sum_disk_reads, + AVG(seconds) AS avg_duration_secs, + AVG(elapsed_time) / POWER(10, 6) AS avg_elapsed_secs, + AVG(cpu_time) / POWER(10, 6) AS avg_cpu_secs, + AVG(buffer_gets) AS avg_buffer_gets, + AVG(disk_reads) AS avg_disk_reads, + MAX(seconds) AS max_duration_secs, + MAX(elapsed_time) / POWER(10, 6) AS max_elapsed_secs, + MAX(cpu_time) / POWER(10, 6) AS max_cpu_secs, + MAX(buffer_gets) AS max_buffer_gets, + MAX(disk_reads) AS max_disk_reads, + COUNT(*) AS cnt, + MIN(sql_exec_start) AS min_sql_exec_start, + MAX(last_refresh_time) AS max_last_refresh_time, + name, + value + FROM mon + GROUP BY + name, + value +) +SELECT sum_duration_secs, + sum_elapsed_secs, + sum_cpu_secs, + sum_buffer_gets, + sum_disk_reads, + '|' AS d1, + avg_duration_secs, + avg_elapsed_secs, + avg_cpu_secs, + avg_buffer_gets, + avg_disk_reads, + '|' AS d2, + max_duration_secs, + max_elapsed_secs, + max_cpu_secs, + max_buffer_gets, + max_disk_reads, + '|' AS d3, + name||' = '||value AS name_and_value, + '|' AS d4, + cnt, + min_sql_exec_start, + max_last_refresh_time + FROM grp + ORDER BY + sum_duration_secs DESC, + name, + value + FETCH FIRST 100 ROWS ONLY +/ diff --git a/csierra/cs_internal/cs_blocked_sessions_ash_awr_internal.sql b/csierra/cs_internal/cs_blocked_sessions_ash_awr_internal.sql new file mode 100644 index 0000000..7294ba4 --- /dev/null +++ b/csierra/cs_internal/cs_blocked_sessions_ash_awr_internal.sql @@ -0,0 +1,156 @@ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +ash AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_id, + h.sample_time, + h.machine, + h.module, + h.session_id, + h.session_serial#, + h.blocking_session, + h.blocking_session_serial#, + h.session_state, + h.wait_class, + h.event, + h.sql_id, + h.top_level_sql_id + FROM dba_hist_active_sess_history h + WHERE 1 = 1 + AND TO_NUMBER('&&cs_con_id.') IN (1, h.con_id) + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') +), +/****************************************************************************************/ +inactive_sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + i.sample_id, + CAST(i.sample_time AS DATE) sample_time, + i.blocking_session session_id, + i.blocking_session_serial# session_serial# + FROM ash i + WHERE i.blocking_session IS NOT NULL + AND i.blocking_session_serial# IS NOT NULL + AND NOT EXISTS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + NULL + FROM ash a + WHERE a.sample_id = i.sample_id + AND a.session_id = i.blocking_session + AND a.session_serial# = i.blocking_session_serial# +)), +/****************************************************************************************/ +all_sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + a.sample_id, CAST(a.sample_time AS DATE) sample_time, a.machine, a.module, a.session_id, a.session_serial#, a.blocking_session, a.blocking_session_serial#, + 'ACTIVE' status, session_state, wait_class, event, sql_id, top_level_sql_id + FROM ash a + UNION ALL +SELECT /*+ MATERIALIZE NO_MERGE */ + i.sample_id, i.sample_time, NULL machine, NULL module, i.session_id, i.session_serial#, TO_NUMBER(NULL), TO_NUMBER(NULL), + 'INACTIVE or UNKNOWN' status, NULL session_state, NULL wait_class, NULL event, NULL sql_id, NULL top_level_sql_id + FROM inactive_sessions i +), +/****************************************************************************************/ +sess_history AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_id, sample_time, machine, module, session_id, session_serial#, status, session_state, wait_class, event, sql_id, top_level_sql_id, + LEVEL lvl, + CONNECT_BY_ROOT machine blocker_machine, + CONNECT_BY_ROOT module blocker_module, + CONNECT_BY_ROOT session_id blocker_session, + CONNECT_BY_ROOT session_serial# blocker_session_serial#, + CONNECT_BY_ISLEAF AS leaf + FROM all_sessions + START WITH blocking_session IS NULL AND blocking_session_serial# IS NULL +CONNECT BY sample_id = PRIOR sample_id AND blocking_session = PRIOR session_id AND blocking_session_serial# = PRIOR session_serial# +), +/****************************************************************************************/ +blockers AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_id, sample_time, status, session_state, wait_class, event, sql_id, top_level_sql_id, session_id, session_serial# + FROM sess_history + WHERE lvl = 1 +), +/****************************************************************************************/ +blockees AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sample_id, sample_time, status, wait_class, event, blocker_session, blocker_session_serial#, COUNT(*) cnt + FROM sess_history + WHERE lvl > 1 + GROUP BY + sample_id, sample_time, status, wait_class, event, blocker_session, blocker_session_serial# +), +/****************************************************************************************/ +machines AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + session_id, session_serial#, MAX(machine) machine + FROM sess_history + WHERE machine IS NOT NULL + GROUP BY + session_id, session_serial# + UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + sid session_id, serial# session_serial#, machine + FROM v$session +), +/****************************************************************************************/ +modules AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + session_id, session_serial#, MAX(module) module + FROM sess_history + WHERE module IS NOT NULL + GROUP BY + session_id, session_serial# + UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + sid session_id, serial# session_serial#, module + FROM v$session +), +/****************************************************************************************/ +blockers_and_blockees AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + b.sample_id, + b.sample_time time, + a.wait_class||' - '||a.event AS wait_class_event, + b.status blocker_status, + b.session_state blocker_session_state, + b.wait_class blocker_wait_class, + b.event blocker_event, + COALESCE(b.sql_id, b.top_level_sql_id) AS blocker_sql_id, + NVL(m.machine, 'unknown') machine, + NVL(m2.module, 'unknown') module, + b.session_id blocker_session_id, + b.session_serial# blocker_session_serial#, + NVL(a.cnt, 0) sessions_blocked, + CASE b.session_state WHEN 'ON CPU' THEN NVL(a.cnt, 0) ELSE 0 END AS active_on_cpu, + CASE b.session_state WHEN 'WAITING' THEN NVL(a.cnt, 0) ELSE 0 END AS active_waiting, + CASE b.status WHEN 'INACTIVE or UNKNOWN' THEN (CASE NVL(m.machine, 'unknown') WHEN '&&cs_host_name.' THEN 0 ELSE NVL(a.cnt, 0) END) ELSE 0 END AS inactive, + CASE b.status WHEN 'INACTIVE or UNKNOWN' THEN (CASE NVL(m.machine, 'unknown') WHEN '&&cs_host_name.' THEN NVL(a.cnt, 0) ELSE 0 END) ELSE 0 END AS unknown + FROM blockers b, + blockees a, + machines m, + modules m2 + WHERE a.sample_id(+) = b.sample_id + AND a.sample_time(+) = b.sample_time + AND a.blocker_session(+) = b.session_id + AND a.blocker_session_serial#(+) = b.session_serial# + AND m.session_id(+) = b.session_id + AND m.session_serial#(+) = b.session_serial# + AND m2.session_id(+) = b.session_id + AND m2.session_serial#(+) = b.session_serial# +) +/****************************************************************************************/ diff --git a/csierra/cs_internal/cs_cdb_warn.sql b/csierra/cs_internal/cs_cdb_warn.sql new file mode 100644 index 0000000..e7c522d --- /dev/null +++ b/csierra/cs_internal/cs_cdb_warn.sql @@ -0,0 +1,19 @@ +-- warn if executed from CDB$ROOT +SET SERVEROUT ON; +BEGIN + IF SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT' THEN + DBMS_OUTPUT.put_line(CHR(10)); + DBMS_OUTPUT.put_line('***'); + DBMS_OUTPUT.put_line('*** On CDB$ROOT ***'); + DBMS_OUTPUT.put_line('***'); + DBMS_OUTPUT.put_line(CHR(10)); + END IF; +END; +/ +SET SERVEROUT OFF; +BEGIN + IF SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT' THEN + DBMS_LOCK.sleep(1); + END IF; +END; +/ diff --git a/csierra/cs_internal/cs_cdb_warn2.sql b/csierra/cs_internal/cs_cdb_warn2.sql new file mode 100644 index 0000000..af66a66 --- /dev/null +++ b/csierra/cs_internal/cs_cdb_warn2.sql @@ -0,0 +1,21 @@ +-- warn if executed from CDB$ROOT +SET SERVEROUT ON; +BEGIN + IF SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT' THEN + DBMS_OUTPUT.put_line(CHR(10)); + DBMS_OUTPUT.put_line('***'); + DBMS_OUTPUT.put_line('*** On CDB$ROOT ***'); + DBMS_OUTPUT.put_line('***'); + DBMS_OUTPUT.put_line('*** This script is expeted to execute from a PDB ***'); + DBMS_OUTPUT.put_line('***'); + DBMS_OUTPUT.put_line(CHR(10)); + END IF; +END; +/ +SET SERVEROUT OFF; +BEGIN + IF SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT' THEN + DBMS_LOCK.sleep(1); + END IF; +END; +/ diff --git a/csierra/cs_internal/cs_cursors_not_shared.sql b/csierra/cs_internal/cs_cursors_not_shared.sql new file mode 100644 index 0000000..8b3f106 --- /dev/null +++ b/csierra/cs_internal/cs_cursors_not_shared.sql @@ -0,0 +1,36 @@ +SET HEA OFF PAGES 0 TERM OFF; +SPO &&cs_file_dir.cursors_not_shared_dynamic.sql +SELECT CASE WHEN ROWNUM = 1 THEN '( ' ELSE ', ' END||column_name + FROM dba_tab_columns + WHERE owner = 'SYS' + AND table_name = 'V_$SQL_SHARED_CURSOR' + AND data_type = 'VARCHAR2' + AND data_length = 1 +/ +SPO OFF; +GET &&cs_file_dir.cursors_not_shared_dynamic.sql +I ) +I ) +I WHERE value = 'Y' +I AND sql_id = '&&cs_sql_id.' +I GROUP BY reason_not_shared, con_id ) +I SELECT s.con_id, c.name AS pdb_name, s.cursors_count, s.reason_not_shared +I FROM s, v$containers c +I WHERE c.con_id = s.con_id +I ORDER BY s.con_id, s.cursors_count DESC, s.reason_not_shared +0 ( value FOR reason_not_shared IN +0 FROM v$sql_shared_cursor UNPIVOT +0 SELECT COUNT(*) AS cursors_count, reason_not_shared, con_id +0 WITH s AS ( +L +!rm &&cs_file_dir.cursors_not_shared_dynamic.sql +SET HEA ON PAGES 100 TERM ON; +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL cursors_count FOR 999,990 HEA 'Cursors'; +COL reason_not_shared FOR A30 HEA 'Reason not Shared'; +SPO &&cs_file_name..txt APP +PRO +PRO CURSORS NOT SHARED (v$sql_shared_cursor) +PRO ~~~~~~~~~~~~~~~~~~ +/ diff --git a/csierra/cs_internal/cs_dba_hist_sqlstat_daily.sql b/csierra/cs_internal/cs_dba_hist_sqlstat_daily.sql new file mode 100644 index 0000000..dcabd59 --- /dev/null +++ b/csierra/cs_internal/cs_dba_hist_sqlstat_daily.sql @@ -0,0 +1,350 @@ +-- cs_dba_hist_sqlstat_daily.sql: called by cs_sqlstat_report.sql, cs_planx.sql and cs_sqlperf.sql +@@cs_sqlstat_cols.sql +@@cs_sqlstat_compute.sql +PRO +PRO SQL STATS - HISTORY DAILY AGGREGATE (dba_hist_sqlstat) &&cs_scope_1. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_dba_hist_sqlstat_daily */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqltext_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqltext_mv) */ + dbid, + con_id, + sql_id, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN sql_text LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(sql_text, '\[([[:digit:]]{4})\] ') ELSE sql_text END),100000),5,'0') AS sqlid, + get_sql_hv(sql_text) AS sqlid, + REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 1000), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text, + sql_text AS sql_fulltext + FROM dba_hist_sqltext + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND &&cs_filter_1. + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37)) + AND ROWNUM >= 1 +), +/****************************************************************************************/ +snapshot_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(snapshot_mv) */ + s.* + FROM dba_hist_snapshot s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') +-- AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND s.end_interval_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND s.end_interval_time <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlstats_mv) */ + * + FROM dba_hist_sqlstat + WHERE dbid = TO_NUMBER('&&cs_dbid.') +-- AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND &&cs_filter_1. + AND &&cs_filter_2. + AND optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT /*+ MATERIALIZE(@sqltext_mv) MATERIALIZE(@snapshot_mv) MATERIALIZE(@sqlstats_mv) NO_MERGE(@sqltext_mv) NO_MERGE(@snapshot_mv) NO_MERGE(@sqlstats_mv) ORDERED */ + s.snap_id, + t.begin_interval_time AS begin_timestamp, + t.end_interval_time AS end_timestamp, + (86400 * EXTRACT(DAY FROM (t.end_interval_time - t.begin_interval_time))) + (3600 * EXTRACT(HOUR FROM (t.end_interval_time - t.begin_interval_time))) + (60 * EXTRACT(MINUTE FROM (t.end_interval_time - t.begin_interval_time))) + EXTRACT(SECOND FROM (t.end_interval_time - t.begin_interval_time)) AS seconds, + s.instance_number, + s.parsing_schema_name, + s.module, + s.action, + s.sql_profile, + s.optimizer_cost, + s.con_id, + s.sql_id, + -- s.force_matching_signature, + s.plan_hash_value, + x.sqlid, + x.sql_text, + x.sql_fulltext, + GREATEST(s.executions_delta, 0) AS delta_execution_count, + GREATEST(s.elapsed_time_delta, 0) AS delta_elapsed_time, + GREATEST(s.cpu_time_delta, 0) AS delta_cpu_time, + GREATEST(s.iowait_delta, 0) AS delta_user_io_wait_time, + GREATEST(s.apwait_delta, 0) AS delta_application_wait_time, + GREATEST(s.ccwait_delta, 0) AS delta_concurrency_time, + GREATEST(s.plsexec_time_delta, 0) AS delta_plsql_exec_time, + GREATEST(s.clwait_delta, 0) AS delta_cluster_wait_time, + GREATEST(s.javexec_time_delta, 0) AS delta_java_exec_time, + GREATEST(s.px_servers_execs_delta, 0) AS delta_px_servers_executions, + GREATEST(s.end_of_fetch_count_delta, 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls_delta, 0) AS delta_parse_calls, + GREATEST(s.invalidations_delta, 0) AS delta_invalidations, + GREATEST(s.loads_delta, 0) AS delta_loads, + GREATEST(s.buffer_gets_delta, 0) AS delta_buffer_gets, + GREATEST(s.disk_reads_delta, 0) AS delta_disk_reads, + GREATEST(s.direct_writes_delta, 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests_delta, 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes_delta, 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests_delta, 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes_delta, 0) AS delta_physical_write_bytes, + GREATEST(s.fetches_delta, 0) AS delta_fetch_count, + GREATEST(s.sorts_delta, 0) AS delta_sorts, + GREATEST(s.rows_processed_delta, 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes_delta, 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_offload_elig_bytes_delta, 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.cell_uncompressed_bytes_delta, 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_offload_return_bytes_delta, 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.obsolete_count + FROM snapshot_mv t, + sqlstats_mv s, + sqltext_mv x + WHERE s.snap_id = t.snap_id + AND s.dbid = t.dbid + AND s.instance_number = t.instance_number + AND x.dbid = s.dbid + AND x.sql_id = s.sql_id + AND x.con_id = s.con_id +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT --d.snap_id, + TRUNC(d.begin_timestamp, 'DD') AS day, + MIN(d.begin_timestamp) AS begin_timestamp, + MAX(d.end_timestamp) AS end_timestamp, + SUM(d.seconds) AS seconds, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + AVG(d.optimizer_cost) AS optimizer_cost, + d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + -- d.sql_type, + d.sql_text, + -- d.sql_fulltext, -- not a GROUP BY column (CLOB) + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_elapsed_time)/1e6 AS delta_elapsed_time, + SUM(d.delta_cpu_time)/1e6 AS delta_cpu_time, + SUM(d.delta_user_io_wait_time)/1e6 AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time)/1e6 AS delta_application_wait_time, + SUM(d.delta_concurrency_time)/1e6 AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time)/1e6 AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time)/1e6 AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time)/1e6 AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes)/1e6 AS delta_physical_read_mb, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes)/1e6 AS delta_physical_write_mb, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes)/1e6 AS delta_io_interconnect_mb, + SUM(d.delta_cell_offload_elig_bytes)/1e6 AS delta_cell_offload_elig_mb, + SUM(d.delta_cell_uncompressed_bytes)/1e6 AS delta_cell_uncompressed_mb, + SUM(d.delta_cell_offload_retrn_bytes)/1e6 AS delta_cell_offload_retrn_mb, + MAX(d.version_count) AS version_count, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + MAX(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE d.seconds > 1 -- avoid snaps less than 1 sec appart + GROUP BY + -- d.snap_id, + -- d.begin_timestamp, + -- d.end_timestamp, + TRUNC(d.begin_timestamp, 'DD'), + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.optimizer_cost, + d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + -- d.sql_type, + d.sql_text +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + -- LPAD(s.snap_id, 7, '0') AS snap_id, + '!' AS sep0, + s.day, + s.begin_timestamp, + s.end_timestamp, + s.seconds, + s.sqlid, + s.sql_id, + s.instance_number, + s.plan_hash_value, + '!' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '!' AS sep2, + s.delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.inval_per_sec, + s.loads_per_sec, + '!' AS sep3, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '!' AS sep4, + s.gets_per_exec, + s.reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '!' AS sep5, + s.delta_rows_processed, + s.rows_per_exec, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '!' AS sep6, + s.delta_elapsed_time, + s.delta_cpu_time, + s.delta_user_io_wait_time, + s.delta_application_wait_time, + s.delta_concurrency_time, + s.delta_plsql_exec_time, + s.delta_cluster_wait_time, + s.delta_java_exec_time, + '!' AS sep7, + s.delta_px_servers_executions, + s.delta_end_of_fetch_count, + s.delta_parse_calls, + s.delta_buffer_gets, + s.delta_disk_reads, + s.delta_direct_writes, + s.delta_physical_read_requests, + s.delta_physical_read_mb, + s.delta_physical_write_requests, + s.delta_physical_write_mb, + s.delta_fetch_count, + s.delta_sorts, + s.delta_io_interconnect_mb, + s.delta_cell_offload_elig_mb, + s.delta_cell_uncompressed_mb, + s.delta_cell_offload_retrn_mb, + '!' AS sep8, + s.version_count, + -- s.obsolete_count, + s.delta_loads, + s.delta_invalidations, + s.sharable_mem_mb, + '!' AS sep9, + s.sql_text, + s.module, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END AS pdb_or_parsing_schema_name, + s.optimizer_cost + FROM sqlstats_metrics s + ORDER BY + -- s.snap_id, + s.day, + s.begin_timestamp, + s.end_timestamp, + s.sqlid, + s.sql_id, + s.instance_number, + s.plan_hash_value, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END, + s.module +/ +-- +@@cs_sqlstat_foot.sql +@@cs_sqlstat_clear.sql \ No newline at end of file diff --git a/csierra/cs_internal/cs_dba_hist_sqlstat_detailed.sql b/csierra/cs_internal/cs_dba_hist_sqlstat_detailed.sql new file mode 100644 index 0000000..a529c3d --- /dev/null +++ b/csierra/cs_internal/cs_dba_hist_sqlstat_detailed.sql @@ -0,0 +1,346 @@ +-- cs_dba_hist_sqlstat_detailed.sql: called by cs_sqlstat_report.sql, cs_planx.sql and cs_sqlperf.sql +@@cs_sqlstat_cols.sql +@@cs_sqlstat_compute.sql +PRO +PRO SQL STATS - HISTORY DETAILED (dba_hist_sqlstat) &&cs_scope_1. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_dba_hist_sqlstat_detailed */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqltext_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqltext_mv) */ + dbid, + con_id, + sql_id, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN sql_text LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(sql_text, '\[([[:digit:]]{4})\] ') ELSE sql_text END),100000),5,'0') AS sqlid, + get_sql_hv(sql_text) AS sqlid, + REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 1000), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text, + sql_text AS sql_fulltext + FROM dba_hist_sqltext + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND &&cs_filter_1. + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37)) + AND ROWNUM >= 1 +), +/****************************************************************************************/ +snapshot_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(snapshot_mv) */ + s.* + FROM dba_hist_snapshot s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') +-- AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND s.end_interval_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND s.end_interval_time <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlstats_mv) */ + * + FROM dba_hist_sqlstat + WHERE dbid = TO_NUMBER('&&cs_dbid.') +-- AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND &&cs_filter_1. + AND &&cs_filter_2. + AND optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT /*+ MATERIALIZE(@sqltext_mv) MATERIALIZE(@snapshot_mv) MATERIALIZE(@sqlstats_mv) NO_MERGE(@sqltext_mv) NO_MERGE(@snapshot_mv) NO_MERGE(@sqlstats_mv) ORDERED */ + s.snap_id, + t.begin_interval_time AS begin_timestamp, + t.end_interval_time AS end_timestamp, + (86400 * EXTRACT(DAY FROM (t.end_interval_time - t.begin_interval_time))) + (3600 * EXTRACT(HOUR FROM (t.end_interval_time - t.begin_interval_time))) + (60 * EXTRACT(MINUTE FROM (t.end_interval_time - t.begin_interval_time))) + EXTRACT(SECOND FROM (t.end_interval_time - t.begin_interval_time)) AS seconds, + s.instance_number, + s.parsing_schema_name, + s.module, + s.action, + s.sql_profile, + s.optimizer_cost, + s.con_id, + s.sql_id, + -- s.force_matching_signature, + s.plan_hash_value, + x.sqlid, + x.sql_text, + x.sql_fulltext, + GREATEST(s.executions_delta, 0) AS delta_execution_count, + GREATEST(s.elapsed_time_delta, 0) AS delta_elapsed_time, + GREATEST(s.cpu_time_delta, 0) AS delta_cpu_time, + GREATEST(s.iowait_delta, 0) AS delta_user_io_wait_time, + GREATEST(s.apwait_delta, 0) AS delta_application_wait_time, + GREATEST(s.ccwait_delta, 0) AS delta_concurrency_time, + GREATEST(s.plsexec_time_delta, 0) AS delta_plsql_exec_time, + GREATEST(s.clwait_delta, 0) AS delta_cluster_wait_time, + GREATEST(s.javexec_time_delta, 0) AS delta_java_exec_time, + GREATEST(s.px_servers_execs_delta, 0) AS delta_px_servers_executions, + GREATEST(s.end_of_fetch_count_delta, 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls_delta, 0) AS delta_parse_calls, + GREATEST(s.invalidations_delta, 0) AS delta_invalidations, + GREATEST(s.loads_delta, 0) AS delta_loads, + GREATEST(s.buffer_gets_delta, 0) AS delta_buffer_gets, + GREATEST(s.disk_reads_delta, 0) AS delta_disk_reads, + GREATEST(s.direct_writes_delta, 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests_delta, 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes_delta, 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests_delta, 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes_delta, 0) AS delta_physical_write_bytes, + GREATEST(s.fetches_delta, 0) AS delta_fetch_count, + GREATEST(s.sorts_delta, 0) AS delta_sorts, + GREATEST(s.rows_processed_delta, 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes_delta, 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_offload_elig_bytes_delta, 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.cell_uncompressed_bytes_delta, 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_offload_return_bytes_delta, 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.obsolete_count + FROM snapshot_mv t, + sqlstats_mv s, + sqltext_mv x + WHERE s.snap_id = t.snap_id + AND s.dbid = t.dbid + AND s.instance_number = t.instance_number + AND x.dbid = s.dbid + AND x.sql_id = s.sql_id + AND x.con_id = s.con_id +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT d.snap_id, + d.begin_timestamp, + d.end_timestamp, + SUM(d.seconds) AS seconds, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + AVG(d.optimizer_cost) AS optimizer_cost, + d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + -- d.sql_type, + d.sql_text, + -- d.sql_fulltext, -- not a GROUP BY column (CLOB) + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_elapsed_time)/1e6 AS delta_elapsed_time, + SUM(d.delta_cpu_time)/1e6 AS delta_cpu_time, + SUM(d.delta_user_io_wait_time)/1e6 AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time)/1e6 AS delta_application_wait_time, + SUM(d.delta_concurrency_time)/1e6 AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time)/1e6 AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time)/1e6 AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time)/1e6 AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes)/1e6 AS delta_physical_read_mb, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes)/1e6 AS delta_physical_write_mb, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes)/1e6 AS delta_io_interconnect_mb, + SUM(d.delta_cell_offload_elig_bytes)/1e6 AS delta_cell_offload_elig_mb, + SUM(d.delta_cell_uncompressed_bytes)/1e6 AS delta_cell_uncompressed_mb, + SUM(d.delta_cell_offload_retrn_bytes)/1e6 AS delta_cell_offload_retrn_mb, + MAX(d.version_count) AS version_count, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + MAX(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE d.seconds > 1 -- avoid snaps less than 1 sec appart + GROUP BY + d.snap_id, + d.begin_timestamp, + d.end_timestamp, + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.optimizer_cost, + d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + -- d.sql_type, + d.sql_text +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + LPAD(s.snap_id, 7, '0') AS snap_id, + s.begin_timestamp, + s.end_timestamp, + s.seconds, + s.sqlid, + s.sql_id, + s.instance_number, + s.plan_hash_value, + '!' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '!' AS sep2, + s.delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.inval_per_sec, + s.loads_per_sec, + '!' AS sep3, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '!' AS sep4, + s.gets_per_exec, + s.reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '!' AS sep5, + s.delta_rows_processed, + s.rows_per_exec, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '!' AS sep6, + s.delta_elapsed_time, + s.delta_cpu_time, + s.delta_user_io_wait_time, + s.delta_application_wait_time, + s.delta_concurrency_time, + s.delta_plsql_exec_time, + s.delta_cluster_wait_time, + s.delta_java_exec_time, + '!' AS sep7, + s.delta_px_servers_executions, + s.delta_end_of_fetch_count, + s.delta_parse_calls, + s.delta_buffer_gets, + s.delta_disk_reads, + s.delta_direct_writes, + s.delta_physical_read_requests, + s.delta_physical_read_mb, + s.delta_physical_write_requests, + s.delta_physical_write_mb, + s.delta_fetch_count, + s.delta_sorts, + s.delta_io_interconnect_mb, + s.delta_cell_offload_elig_mb, + s.delta_cell_uncompressed_mb, + s.delta_cell_offload_retrn_mb, + '!' AS sep8, + s.version_count, + -- s.obsolete_count, + s.delta_loads, + s.delta_invalidations, + s.sharable_mem_mb, + '!' AS sep9, + s.sql_text, + s.module, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END AS pdb_or_parsing_schema_name, + s.optimizer_cost + FROM sqlstats_metrics s + ORDER BY + s.snap_id, + s.begin_timestamp, + s.end_timestamp, + s.sqlid, + s.sql_id, + s.instance_number, + s.plan_hash_value, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END, + s.module +/ +-- +@@cs_sqlstat_foot.sql +@@cs_sqlstat_clear.sql diff --git a/csierra/cs_internal/cs_dba_hist_sqlstat_global.sql b/csierra/cs_internal/cs_dba_hist_sqlstat_global.sql new file mode 100644 index 0000000..9154107 --- /dev/null +++ b/csierra/cs_internal/cs_dba_hist_sqlstat_global.sql @@ -0,0 +1,349 @@ +-- cs_dba_hist_sqlstat_global.sql: called by cs_sqlstat_report.sql, cs_planx.sql and cs_sqlperf.sql +@@cs_sqlstat_cols.sql +PRO +PRO SQL STATS - HISTORY GLOBAL AGGREGATE (dba_hist_sqlstat) &&cs_scope_1. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_dba_hist_sqlstat_global */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqltext_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqltext_mv) */ + dbid, + con_id, + sql_id, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN sql_text LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(sql_text, '\[([[:digit:]]{4})\] ') ELSE sql_text END),100000),5,'0') AS sqlid, + get_sql_hv(sql_text) AS sqlid, + REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 1000), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text, + sql_text AS sql_fulltext + FROM dba_hist_sqltext + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND &&cs_filter_1. + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37)) + AND ROWNUM >= 1 +), +/****************************************************************************************/ +snapshot_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(snapshot_mv) */ + s.* + FROM dba_hist_snapshot s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') +-- AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND s.end_interval_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND s.end_interval_time <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlstats_mv) */ + * + FROM dba_hist_sqlstat + WHERE dbid = TO_NUMBER('&&cs_dbid.') +-- AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND &&cs_filter_1. + AND &&cs_filter_2. + AND optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT /*+ MATERIALIZE(@sqltext_mv) MATERIALIZE(@snapshot_mv) MATERIALIZE(@sqlstats_mv) NO_MERGE(@sqltext_mv) NO_MERGE(@snapshot_mv) NO_MERGE(@sqlstats_mv) ORDERED */ + s.snap_id, + t.begin_interval_time AS begin_timestamp, + t.end_interval_time AS end_timestamp, + (86400 * EXTRACT(DAY FROM (t.end_interval_time - t.begin_interval_time))) + (3600 * EXTRACT(HOUR FROM (t.end_interval_time - t.begin_interval_time))) + (60 * EXTRACT(MINUTE FROM (t.end_interval_time - t.begin_interval_time))) + EXTRACT(SECOND FROM (t.end_interval_time - t.begin_interval_time)) AS seconds, + s.instance_number, + s.parsing_schema_name, + s.module, + s.action, + s.sql_profile, + s.optimizer_cost, + s.con_id, + s.sql_id, + -- s.force_matching_signature, + s.plan_hash_value, + x.sqlid, + x.sql_text, + x.sql_fulltext, + GREATEST(s.executions_delta, 0) AS delta_execution_count, + GREATEST(s.elapsed_time_delta, 0) AS delta_elapsed_time, + GREATEST(s.cpu_time_delta, 0) AS delta_cpu_time, + GREATEST(s.iowait_delta, 0) AS delta_user_io_wait_time, + GREATEST(s.apwait_delta, 0) AS delta_application_wait_time, + GREATEST(s.ccwait_delta, 0) AS delta_concurrency_time, + GREATEST(s.plsexec_time_delta, 0) AS delta_plsql_exec_time, + GREATEST(s.clwait_delta, 0) AS delta_cluster_wait_time, + GREATEST(s.javexec_time_delta, 0) AS delta_java_exec_time, + GREATEST(s.px_servers_execs_delta, 0) AS delta_px_servers_executions, + GREATEST(s.end_of_fetch_count_delta, 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls_delta, 0) AS delta_parse_calls, + GREATEST(s.invalidations_delta, 0) AS delta_invalidations, + GREATEST(s.loads_delta, 0) AS delta_loads, + GREATEST(s.buffer_gets_delta, 0) AS delta_buffer_gets, + GREATEST(s.disk_reads_delta, 0) AS delta_disk_reads, + GREATEST(s.direct_writes_delta, 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests_delta, 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes_delta, 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests_delta, 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes_delta, 0) AS delta_physical_write_bytes, + GREATEST(s.fetches_delta, 0) AS delta_fetch_count, + GREATEST(s.sorts_delta, 0) AS delta_sorts, + GREATEST(s.rows_processed_delta, 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes_delta, 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_offload_elig_bytes_delta, 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.cell_uncompressed_bytes_delta, 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_offload_return_bytes_delta, 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.obsolete_count + FROM snapshot_mv t, + sqlstats_mv s, + sqltext_mv x + WHERE s.snap_id = t.snap_id + AND s.dbid = t.dbid + AND s.instance_number = t.instance_number + AND x.dbid = s.dbid + AND x.sql_id = s.sql_id + AND x.con_id = s.con_id +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT --d.snap_id, + -- TRUNC(d.begin_timestamp, 'DD') AS day, + MIN(d.begin_timestamp) AS begin_timestamp, + MAX(d.end_timestamp) AS end_timestamp, + SUM(d.seconds) AS seconds, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + AVG(d.optimizer_cost) AS optimizer_cost, + d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + -- d.sql_type, + d.sql_text, + -- d.sql_fulltext, -- not a GROUP BY column (CLOB) + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_elapsed_time)/1e6 AS delta_elapsed_time, + SUM(d.delta_cpu_time)/1e6 AS delta_cpu_time, + SUM(d.delta_user_io_wait_time)/1e6 AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time)/1e6 AS delta_application_wait_time, + SUM(d.delta_concurrency_time)/1e6 AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time)/1e6 AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time)/1e6 AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time)/1e6 AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes)/1e6 AS delta_physical_read_mb, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes)/1e6 AS delta_physical_write_mb, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes)/1e6 AS delta_io_interconnect_mb, + SUM(d.delta_cell_offload_elig_bytes)/1e6 AS delta_cell_offload_elig_mb, + SUM(d.delta_cell_uncompressed_bytes)/1e6 AS delta_cell_uncompressed_mb, + SUM(d.delta_cell_offload_retrn_bytes)/1e6 AS delta_cell_offload_retrn_mb, + MAX(d.version_count) AS version_count, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + MAX(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE d.seconds > 1 -- avoid snaps less than 1 sec appart + GROUP BY + -- d.snap_id, + -- d.begin_timestamp, + -- d.end_timestamp, + -- TRUNC(d.begin_timestamp, 'DD'), + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.optimizer_cost, + d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + -- d.sql_type, + d.sql_text +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + -- LPAD(s.snap_id, 7, '0') AS snap_id, + -- s.day, + '!' AS sep0, + s.begin_timestamp, + s.end_timestamp, + s.seconds, + s.sqlid, + s.sql_id, + s.instance_number, + s.plan_hash_value, + '!' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '!' AS sep2, + s.delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.inval_per_sec, + s.loads_per_sec, + '!' AS sep3, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '!' AS sep4, + s.gets_per_exec, + s.reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '!' AS sep5, + s.delta_rows_processed, + s.rows_per_exec, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '!' AS sep6, + s.delta_elapsed_time, + s.delta_cpu_time, + s.delta_user_io_wait_time, + s.delta_application_wait_time, + s.delta_concurrency_time, + s.delta_plsql_exec_time, + s.delta_cluster_wait_time, + s.delta_java_exec_time, + '!' AS sep7, + s.delta_px_servers_executions, + s.delta_end_of_fetch_count, + s.delta_parse_calls, + s.delta_buffer_gets, + s.delta_disk_reads, + s.delta_direct_writes, + s.delta_physical_read_requests, + s.delta_physical_read_mb, + s.delta_physical_write_requests, + s.delta_physical_write_mb, + s.delta_fetch_count, + s.delta_sorts, + s.delta_io_interconnect_mb, + s.delta_cell_offload_elig_mb, + s.delta_cell_uncompressed_mb, + s.delta_cell_offload_retrn_mb, + '!' AS sep8, + s.version_count, + -- s.obsolete_count, + s.delta_loads, + s.delta_invalidations, + s.sharable_mem_mb, + '!' AS sep9, + s.sql_text, + s.module, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END AS pdb_or_parsing_schema_name, + s.optimizer_cost + FROM sqlstats_metrics s + ORDER BY + -- s.snap_id, + -- s.day, + s.begin_timestamp, + s.end_timestamp, + s.sqlid, + s.sql_id, + s.instance_number, + s.plan_hash_value, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END, + s.module +/ +-- +@@cs_sqlstat_foot.sql +@@cs_sqlstat_clear.sql \ No newline at end of file diff --git a/csierra/cs_internal/cs_dba_hist_sqlstat_hourly.sql b/csierra/cs_internal/cs_dba_hist_sqlstat_hourly.sql new file mode 100644 index 0000000..8fbe755 --- /dev/null +++ b/csierra/cs_internal/cs_dba_hist_sqlstat_hourly.sql @@ -0,0 +1,350 @@ +-- cs_dba_hist_sqlstat_hourly.sql: called by cs_sqlstat_report.sql, cs_planx.sql and cs_sqlperf.sql +@@cs_sqlstat_cols.sql +@@cs_sqlstat_compute.sql +PRO +PRO SQL STATS - HISTORY HOURLY AGGREGATE (dba_hist_sqlstat) &&cs_scope_1. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_dba_hist_sqlstat_hourly */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqltext_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqltext_mv) */ + dbid, + con_id, + sql_id, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN sql_text LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(sql_text, '\[([[:digit:]]{4})\] ') ELSE sql_text END),100000),5,'0') AS sqlid, + get_sql_hv(sql_text) AS sqlid, + REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 1000), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text, + sql_text AS sql_fulltext + FROM dba_hist_sqltext + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND &&cs_filter_1. + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37)) + AND ROWNUM >= 1 +), +/****************************************************************************************/ +snapshot_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(snapshot_mv) */ + s.* + FROM dba_hist_snapshot s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') +-- AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND s.end_interval_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND s.end_interval_time <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlstats_mv) */ + * + FROM dba_hist_sqlstat + WHERE dbid = TO_NUMBER('&&cs_dbid.') +-- AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND &&cs_filter_1. + AND &&cs_filter_2. + AND optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT /*+ MATERIALIZE(@sqltext_mv) MATERIALIZE(@snapshot_mv) MATERIALIZE(@sqlstats_mv) NO_MERGE(@sqltext_mv) NO_MERGE(@snapshot_mv) NO_MERGE(@sqlstats_mv) ORDERED */ + s.snap_id, + t.begin_interval_time AS begin_timestamp, + t.end_interval_time AS end_timestamp, + (86400 * EXTRACT(DAY FROM (t.end_interval_time - t.begin_interval_time))) + (3600 * EXTRACT(HOUR FROM (t.end_interval_time - t.begin_interval_time))) + (60 * EXTRACT(MINUTE FROM (t.end_interval_time - t.begin_interval_time))) + EXTRACT(SECOND FROM (t.end_interval_time - t.begin_interval_time)) AS seconds, + s.instance_number, + s.parsing_schema_name, + s.module, + s.action, + s.sql_profile, + s.optimizer_cost, + s.con_id, + s.sql_id, + -- s.force_matching_signature, + s.plan_hash_value, + x.sqlid, + x.sql_text, + x.sql_fulltext, + GREATEST(s.executions_delta, 0) AS delta_execution_count, + GREATEST(s.elapsed_time_delta, 0) AS delta_elapsed_time, + GREATEST(s.cpu_time_delta, 0) AS delta_cpu_time, + GREATEST(s.iowait_delta, 0) AS delta_user_io_wait_time, + GREATEST(s.apwait_delta, 0) AS delta_application_wait_time, + GREATEST(s.ccwait_delta, 0) AS delta_concurrency_time, + GREATEST(s.plsexec_time_delta, 0) AS delta_plsql_exec_time, + GREATEST(s.clwait_delta, 0) AS delta_cluster_wait_time, + GREATEST(s.javexec_time_delta, 0) AS delta_java_exec_time, + GREATEST(s.px_servers_execs_delta, 0) AS delta_px_servers_executions, + GREATEST(s.end_of_fetch_count_delta, 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls_delta, 0) AS delta_parse_calls, + GREATEST(s.invalidations_delta, 0) AS delta_invalidations, + GREATEST(s.loads_delta, 0) AS delta_loads, + GREATEST(s.buffer_gets_delta, 0) AS delta_buffer_gets, + GREATEST(s.disk_reads_delta, 0) AS delta_disk_reads, + GREATEST(s.direct_writes_delta, 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests_delta, 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes_delta, 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests_delta, 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes_delta, 0) AS delta_physical_write_bytes, + GREATEST(s.fetches_delta, 0) AS delta_fetch_count, + GREATEST(s.sorts_delta, 0) AS delta_sorts, + GREATEST(s.rows_processed_delta, 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes_delta, 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_offload_elig_bytes_delta, 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.cell_uncompressed_bytes_delta, 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_offload_return_bytes_delta, 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.obsolete_count + FROM snapshot_mv t, + sqlstats_mv s, + sqltext_mv x + WHERE s.snap_id = t.snap_id + AND s.dbid = t.dbid + AND s.instance_number = t.instance_number + AND x.dbid = s.dbid + AND x.sql_id = s.sql_id + AND x.con_id = s.con_id +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT --d.snap_id, + TRUNC(d.begin_timestamp, 'HH24') AS hour, + MIN(d.begin_timestamp) AS begin_timestamp, + MAX(d.end_timestamp) AS end_timestamp, + SUM(d.seconds) AS seconds, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + AVG(d.optimizer_cost) AS optimizer_cost, + d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + -- d.sql_type, + d.sql_text, + -- d.sql_fulltext, -- not a GROUP BY column (CLOB) + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_elapsed_time)/1e6 AS delta_elapsed_time, + SUM(d.delta_cpu_time)/1e6 AS delta_cpu_time, + SUM(d.delta_user_io_wait_time)/1e6 AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time)/1e6 AS delta_application_wait_time, + SUM(d.delta_concurrency_time)/1e6 AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time)/1e6 AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time)/1e6 AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time)/1e6 AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes)/1e6 AS delta_physical_read_mb, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes)/1e6 AS delta_physical_write_mb, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes)/1e6 AS delta_io_interconnect_mb, + SUM(d.delta_cell_offload_elig_bytes)/1e6 AS delta_cell_offload_elig_mb, + SUM(d.delta_cell_uncompressed_bytes)/1e6 AS delta_cell_uncompressed_mb, + SUM(d.delta_cell_offload_retrn_bytes)/1e6 AS delta_cell_offload_retrn_mb, + MAX(d.version_count) AS version_count, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + MAX(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE d.seconds > 1 -- avoid snaps less than 1 sec appart + GROUP BY + -- d.snap_id, + -- d.begin_timestamp, + -- d.end_timestamp, + TRUNC(d.begin_timestamp, 'HH24'), + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.optimizer_cost, + d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + -- d.sql_type, + d.sql_text +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + -- LPAD(s.snap_id, 7, '0') AS snap_id, + '!' AS sep0, + s.hour, + s.begin_timestamp, + s.end_timestamp, + s.seconds, + s.sqlid, + s.sql_id, + s.instance_number, + s.plan_hash_value, + '!' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '!' AS sep2, + s.delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.inval_per_sec, + s.loads_per_sec, + '!' AS sep3, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '!' AS sep4, + s.gets_per_exec, + s.reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '!' AS sep5, + s.delta_rows_processed, + s.rows_per_exec, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '!' AS sep6, + s.delta_elapsed_time, + s.delta_cpu_time, + s.delta_user_io_wait_time, + s.delta_application_wait_time, + s.delta_concurrency_time, + s.delta_plsql_exec_time, + s.delta_cluster_wait_time, + s.delta_java_exec_time, + '!' AS sep7, + s.delta_px_servers_executions, + s.delta_end_of_fetch_count, + s.delta_parse_calls, + s.delta_buffer_gets, + s.delta_disk_reads, + s.delta_direct_writes, + s.delta_physical_read_requests, + s.delta_physical_read_mb, + s.delta_physical_write_requests, + s.delta_physical_write_mb, + s.delta_fetch_count, + s.delta_sorts, + s.delta_io_interconnect_mb, + s.delta_cell_offload_elig_mb, + s.delta_cell_uncompressed_mb, + s.delta_cell_offload_retrn_mb, + '!' AS sep8, + s.version_count, + -- s.obsolete_count, + s.delta_loads, + s.delta_invalidations, + s.sharable_mem_mb, + '!' AS sep9, + s.sql_text, + s.module, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END AS pdb_or_parsing_schema_name, + s.optimizer_cost + FROM sqlstats_metrics s + ORDER BY + -- s.snap_id, + s.hour, + s.begin_timestamp, + s.end_timestamp, + s.sqlid, + s.sql_id, + s.instance_number, + s.plan_hash_value, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END, + s.module +/ +-- +@@cs_sqlstat_foot.sql +@@cs_sqlstat_clear.sql \ No newline at end of file diff --git a/csierra/cs_internal/cs_def.sql b/csierra/cs_internal/cs_def.sql new file mode 100644 index 0000000..8a0e552 --- /dev/null +++ b/csierra/cs_internal/cs_def.sql @@ -0,0 +1,631 @@ +DEF iod_user = 'C##IOD'; +DEF odis_user = 'ADMIN'; +-- +COL ampersand NEW_V ampersand NOPRI; +COL double_ampersand NEW_V double_ampersand NOPRI; +SELECT CHR(38) AS ampersand, CHR(38)||CHR(38) AS double_ampersand FROM DUAL; +DEF hints_text = "FIRST_ROWS(1)"; +DEF hints_text = "FIRST_ROWS(1) OPT_PARAM('_fix_control' '5922070:OFF')"; +DEF cs_file_dir = '/tmp/'; +DEF cs_temp_dir = '/u01/app/oracle/tools/tmp'; +DEF cs_timestamp_full_format = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; +DEF cs_datetime_full_format = 'YYYY-MM-DD"T"HH24:MI:SS'; +DEF cs_datetime_display_format = 'yyyy-mm-ddThh:mi:ss'; +DEF cs_datetime_short_format = 'YYYY-MM-DD"T"HH24.MI.SS'; +DEF cs_datetime_hh24_format = 'YYYY-MM-DD"T"HH24'; +DEF cs_datetime_dd_format = 'YYYY-MM-DD'; +DEF cs_datetime_dense_format = 'YYYYMMDD_HH24MISS'; +DEF cs_me_top = '10'; +DEF cs_me_last = '10'; +DEF cs_me_days = '30'; +DEF cs_aas_on_cpu_per_sql = '2.5'; +DEF cs_cpu_ms_per_row = '0.500'; +DEF cs_buffer_gets_per_row = '25'; +DEF cs_disk_reads_per_row = '1'; +DEF cs_min_rows_per_exec_cap = '10'; +DEF cs_default_reference = 'NULL'; +DEF cs_reference_sanitized = ''; +DEF cs_awr_days = '7'; +DEF cs_binds_days = '1'; +DEF cs_sqlmon_top = '100'; +DEF chart_foot_note_0 = 'Notes:'; +DEF chart_foot_note_1 = '
1) Drag to Zoom, and right click to reset Chart.'; +DEF is_stacked = "isStacked: true,"; +DEF cs_legend_position = 'right'; +DEF vaxis_baseline = ""; +DEF vaxis_viewwindow = ""; +DEF hAxis_maxValue = ""; +DEF cs_hAxis_maxValue = ""; +DEF hAxis_maxValue_forecast = '0.375'; +-- [{linear}|polynomial|exponential|none] +DEF cs_trendlines_types = '[{none}|linear|polynomial|exponential]' +DEF cs_trendlines_type = 'none'; +DEF cs_trendlines_series = ""; +DEF cs_trendlines = ""; +DEF cs_chart_width = '1200px'; +DEF cs_chart_height = '500px'; +DEF cs_chartarea_left = '90'; +DEF cs_chartarea_top = '75'; +DEF cs_chartarea_width = '75%'; +DEF cs_chartarea_height = '70%'; +DEF cs_chart_option_explorer = ''; +DEF cs_chart_option_pie = '//'; +-- cs_chart_option_focustarget [{datum}|category] +DEF cs_chart_option_focustarget = 'datum'; +DEF cs_chart_option_pointsize = '4'; +DEF cs_chart_pie_slice_text = "// pieSliceText: 'percentage',"; +DEF cs_oem_colors_series = ''; +DEF cs_oem_colors_slices = '//'; +DEF cs_curve_type = '//'; +DEF cs_def_local_dir = '.'; +DEF cs_local_dir = ''; +-- +DEF cs_realm = ''; +DEF cs_rgn = ''; +DEF cs_region = ''; +DEF cs_locale = ''; +DEF cs_other_acronym = ''; +DEF cs_onsr = ''; +DEF cs_dedicated = ''; +DEF cs_odis = ''; +DEF cs_skip = ''; +DEF cs_dbid = ''; +DEF cs_db_name = ''; +DEF cs_db_name_u = ''; +DEF cs_mysid = ''; +DEF cs_con_id = ''; +DEF cs_con_name = ''; +DEF cs_instance_number = ''; +DEF cs_db_version = ''; +DEF cs_host_name = ''; +DEF cs_startup_time = ''; +DEF cs_startup_days = ''; +DEF cs_date_time = ''; +DEF cs_file_date_time = ''; +DEF cs_file_timestamp = ''; +DEF cs_current_schema = ''; +DEF cs_containers_count = ''; +DEF cs_cdb_availability_perc = ''; +DEF cs_host_shape = ''; +DEF cs_disk_config = ''; +-- +DEF cs_file_prefix = ''; +DEF cs_file_name = ''; +DEF cs_script_name = ''; +DEF cs_script_acronym = ''; +DEF spool_id_chart_footer_script = 'cs_null.sql'; +DEF spool_chart_1st_column = 'Date Column'; +-- +DEF cs_min_snap_id = ''; +DEF cs_min_snap_end_time = ''; +DEF cs_snap_interval_seconds = ''; +DEF cs_ash_interval_ms = ''; +-- +DEF cs_1h_snap_id = ''; +DEF cs_1d_snap_id = ''; +DEF cs_7d_snap_id = ''; +DEF cs_30d_snap_id = ''; +-- +DEF cs_sql_id = ''; +DEF cs_signature = ''; +DEF cs_sql_handle = ''; +DEF cs_plan_hash_value = ''; +DEF cs_application_category = ''; +DEF cs_sql_hv = ''; +-- +DEF cs_sample_time_from = ''; +DEF cs_sample_time_to = ''; +-- +-- [{AUTO}|MANUAL] +DEF cs_snap_type = 'AUTO'; +-- [{-666}|sid] +DEF cs_sid = '-666'; +-- +DEF pdb_creation = ''; +-- +COL cs_realm NEW_V cs_realm FOR A3 NOPRI; +COL cs_region NEW_V cs_region FOR A14 NOPRI; +COL cs_rgn NEW_V cs_rgn FOR A3 NOPRI; +COL cs_locale NEW_V cs_locale FOR A6 NOPRI; +COL cs_other_acronym NEW_V cs_other_acronym FOR A8 NOPRI; +COL cs_onsr NEW_V cs_onsr FOR A1 NOPRI; +COL cs_dedicated NEW_V cs_dedicated FOR A1 NOPRI; +COL cs_dbid NEW_V cs_dbid FOR A12 NOPRI; +COL cs_db_name NEW_V cs_db_name FOR A9 NOPRI; +COL cs_db_name_u NEW_V cs_db_name_u FOR A9 NOPRI; +COL cs_db_open_mode NEW_V cs_db_open_mode FOR A10 NOPRI; +COL cs_con_id NEW_V cs_con_id FOR A4 NOPRI; +COL cs_mysid NEW_V cs_mysid NOPRI; +COL cs_con_name NEW_V cs_con_name FOR A30 NOPRI; +COL cs_current_schema NEW_V cs_current_schema FOR A30 NOPRI; +COL cs_oracle_home NEW_V cs_oracle_home NOPRI; +COL cs_pdb_open_mode NEW_V cs_pdb_open_mode FOR A10 NOPRI; +COL cs_instance_number NEW_V cs_instance_number FOR A1 NOPRI; +COL cs_cpu_util_perc NEW_V cs_cpu_util_perc FOR A6 NOPRI; +COL cs_cpu_load NEW_V cs_cpu_load FOR A3 NOPRI; +COL cs_num_cpu_cores NEW_V cs_num_cpu_cores FOR A3 NOPRI; +COL cs_num_cpus NEW_V cs_num_cpus FOR A3 NOPRI; +COL cs_cpu_count NEW_V cs_cpu_count FOR A3 NOPRI; +DEF cs_allotted_cpu = '?'; +COL cs_allotted_cpu NEW_V cs_allotted_cpu FOR A5 NOPRI; +DEF cs_resource_manager_plan = '?'; +COL cs_resource_manager_plan NEW_V cs_resource_manager_plan FOR A30 NOPRI; +COL cs_db_version NEW_V cs_db_version FOR A17 NOPRI; +COL cs_startup_time NEW_V cs_startup_time FOR A19 NOPRI; +COL cs_startup_days NEW_V cs_startup_days FOR A5 NOPRI; +COL cs_date_time NEW_V cs_date_time FOR A19 NOPRI; +COL cs_file_date_time NEW_V cs_file_date_time FOR A19 NOPRI; +COL cs_file_timestamp NEW_V cs_file_timestamp FOR A15 NOPRI; +COL cs_easy_connect_string NEW_V cs_easy_connect_string FOR A132 NOPRI; +COL cs_containers_count NEW_V cs_containers_count NOPRI; +COL cs_cdb_availability_perc NEW_V cs_cdb_availability_perc FOR A3 NOPRI; +-- +COL cs_file_prefix NEW_V cs_file_prefix NOPRI; +COL cs_file_name NEW_V cs_file_name NOPRI; +COL cs_script_name NEW_V cs_script_name NOPRI; +-- +COL cs_min_snap_id NEW_V cs_min_snap_id FOR A6 NOPRI; +COL cs_min_snap_end_time NEW_V cs_min_snap_end_time FOR A19 NOPRI; +COL cs_snap_interval_seconds NEW_V cs_snap_interval_seconds FOR A4 NOPRI; +COL cs_ash_interval_ms NEW_V cs_ash_interval_ms FOR A5 NOPRI; +-- +COL cs_1h_snap_id NEW_V cs_1h_snap_id FOR A6 NOPRI; +COL cs_1d_snap_id NEW_V cs_1d_snap_id FOR A6 NOPRI; +COL cs_7d_snap_id NEW_V cs_7d_snap_id FOR A6 NOPRI; +COL cs_30d_snap_id NEW_V cs_30d_snap_id FOR A6 NOPRI; +COL cs_startup_snap_id NEW_V cs_startup_snap_id FOR A6 NOPRI; +-- +COL cs_signature NEW_V cs_signature FOR A20 NOPRI; +COL cs_sql_handle NEW_V cs_sql_handle FOR A20 NOPRI; +-- +COL stgtab_sqlbaseline_script NEW_V stgtab_sqlbaseline_script NOPRI; +COL stgtab_sqlprofile_script NEW_V stgtab_sqlprofile_script NOPRI; +COL stgtab_sqlpatch_script NEW_V stgtab_sqlpatch_script NOPRI; +COL pdb_creation NEW_V pdb_creation NOPRI; +-- +VAR cs_begin_total_time NUMBER; +VAR cs_begin_elapsed_time NUMBER; +EXEC :cs_begin_total_time := DBMS_UTILITY.get_time; +DEF cs_total_time = ''; +DEF cs_elapsed_time = ''; +COL cs_total_time NEW_V cs_total_time NOPRI; +COL cs_elapsed_time NEW_V cs_elapsed_time NOPRI; +-- +VAR cs_signature NUMBER; +VAR cs_sql_text CLOB; +VAR cs_zapper_managed_sql_banner CLOB; +VAR kiev_metadata_date VARCHAR2(30); +-- +SET TERM OFF; +-- +SELECT SYS_CONTEXT('USERENV', 'SID') AS cs_mysid, + SYS_CONTEXT('USERENV', 'CON_ID') AS cs_con_id, + SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name, + SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') AS cs_current_schema, + SYS_CONTEXT('USERENV', 'ORACLE_HOME') AS cs_oracle_home, + TRIM(TO_CHAR(SYSDATE , '&&cs_datetime_full_format.')) AS cs_date_time, + TRIM(TO_CHAR(SYSDATE , '&&cs_datetime_short_format.')) AS cs_file_date_time, + TRIM(TO_CHAR(SYSDATE , '&&cs_datetime_dense_format.')) AS cs_file_timestamp + FROM DUAL +/ +-- +SELECT TRIM(TO_CHAR(d.dbid)) AS cs_dbid, + LOWER(d.name) AS cs_db_name, + UPPER(d.name) AS cs_db_name_u, + d.open_mode AS cs_db_open_mode + FROM v$database d +/ +-- +COL cs_host_name NEW_V cs_host_name FOR A64 NOPRI; +COL cs_odis NEW_V cs_odis FOR A1 NOPRI; +SELECT TRIM(TO_CHAR(i.instance_number)) AS cs_instance_number, + i.version AS cs_db_version, + NVL(i.host_name, 'HOSTNAME') AS cs_host_name, + CASE WHEN i.host_name IS NULL THEN 'Y' ELSE 'N' END AS cs_odis, + TO_CHAR(i.startup_time, '&&cs_datetime_full_format.') AS cs_startup_time, + TRIM(TO_CHAR(ROUND(SYSDATE - i.startup_time, 1), '990.0')) AS cs_startup_days + FROM v$instance i +/ +-- +COL cs_skip NEW_V cs_skip FOR A2 NOPRI; +COL list_sqlbaseline_script NEW_V list_sqlbaseline_script NOPRI; +COL list_dg_members_script NEW_V list_dg_members_script NOPRI; +COL cs_set_container_to_cdb_root NEW_V cs_set_container_to_cdb_root NOPRI; +COL cs_set_container_to_curr_pdb NEW_V cs_set_container_to_curr_pdb NOPRI; +COL cs_tools_schema NEW_V cs_tools_schema NOPRI; +COL cs_stgtab_owner NEW_V cs_stgtab_owner NOPRI; +COL cs_stgtab_prefix NEW_V cs_stgtab_prefix NOPRI; +COL cs_spbl_create_pre NEW_V cs_spbl_create_pre NOPRI; +COL cs_spbl_create_post NEW_V cs_spbl_create_post NOPRI; +COL cs_spbl_validate NEW_V cs_spbl_validate NOPRI; +COL cs_list_cbo_hints NEW_V cs_list_cbo_hints NOPRI; +COL cs_list_cbo_hints_b NEW_V cs_list_cbo_hints_b NOPRI; +COL cs_zapper_managed NEW_V cs_zapper_managed NOPRI; +DEF cs_zapper_managed_sql = 'N'; +-- +SELECT CASE WHEN '&&cs_odis.' = 'Y' THEN '--' END AS cs_skip, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_spbl_internal_list_simple.sql' ELSE 'cs_spbl_internal_list_debug.sql' END AS list_sqlbaseline_script, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_null.sql' ELSE 'cs_internal_list_dg_members.sql' END AS list_dg_members_script, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_null.sql' ELSE 'cs_set_container_to_cdb_root.sql' END AS cs_set_container_to_cdb_root, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_null.sql' ELSE 'cs_set_container_to_curr_pdb.sql' END AS cs_set_container_to_curr_pdb, + CASE WHEN '&&cs_odis.' = 'Y' THEN '&&odis_user.' ELSE '&&iod_user.' END AS cs_tools_schema, + CASE WHEN '&&cs_odis.' = 'Y' THEN '&&odis_user.' ELSE '&&iod_user.' END AS cs_stgtab_owner, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'odis' ELSE 'iod' END AS cs_stgtab_prefix, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_null.sql' ELSE 'cs_spbl_create_pre.sql' END AS cs_spbl_create_pre, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_null.sql' ELSE 'cs_spbl_create_post.sql' END AS cs_spbl_create_post, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_null.sql' ELSE 'cs_spbl_validate.sql' END AS cs_spbl_validate, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_null.sql' ELSE 'cs_list_cbo_hints.sql' END AS cs_list_cbo_hints, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_null.sql' ELSE 'cs_list_cbo_hints_b.sql' END AS cs_list_cbo_hints_b, + CASE WHEN '&&cs_odis.' = 'Y' THEN 'cs_null.sql' ELSE 'cs_zapper_managed.sql' END AS cs_zapper_managed + FROM DUAL +/ +-- +SELECT CASE WHEN COUNT(*) > 0 THEN 'cs_spbl_internal_stgtab_baseline.sql' ELSE 'cs_null.sql' END AS stgtab_sqlbaseline_script + FROM dba_tables + WHERE owner = UPPER('&&cs_stgtab_owner.') + AND table_name = UPPER('&&cs_stgtab_prefix._stgtab_baseline') +/ +-- +SELECT CASE WHEN COUNT(*) > 0 THEN 'cs_sprf_internal_stgtab_sqlprofile.sql' ELSE 'cs_null.sql' END AS stgtab_sqlprofile_script + FROM dba_tables + WHERE owner = UPPER('&&cs_stgtab_owner.') + AND table_name = UPPER('&&cs_stgtab_prefix._stgtab_sqlprof') +/ +-- +SELECT CASE WHEN COUNT(*) > 0 THEN 'cs_spch_internal_stgtab_sqlpatch.sql' ELSE 'cs_null.sql' END AS stgtab_sqlpatch_script + FROM dba_tables + WHERE owner = UPPER('&&cs_stgtab_owner.') + AND table_name = UPPER('&&cs_stgtab_prefix._stgtab_sqlpatch') +/ +-- +SELECT i.version_full AS cs_db_version -- 19c + FROM v$instance i +/ +-- +SELECT c.open_mode AS cs_pdb_open_mode + FROM v$containers c + WHERE c.con_id = SYS_CONTEXT('USERENV', 'CON_ID') +/ +-- +SELECT TRIM(TO_CHAR(ROUND(100 * os.busy_time / (os.busy_time + os.idle_time), 1), '990.0'))||'%' AS cs_cpu_util_perc +FROM ( +SELECT NULLIF(GREATEST(busy_t2.value - busy_t1.value, 0), 0) AS busy_time, NULLIF(GREATEST(idle_t2.value - idle_t1.value, 0), 0) AS idle_time +FROM +(SELECT value FROM dba_hist_osstat WHERE stat_name = 'BUSY_TIME' ORDER BY snap_id DESC NULLS LAST FETCH FIRST 1 ROW ONLY) busy_t1, +(SELECT value FROM dba_hist_osstat WHERE stat_name = 'IDLE_TIME' ORDER BY snap_id DESC NULLS LAST FETCH FIRST 1 ROW ONLY) idle_t1, +(SELECT value FROM v$osstat WHERE stat_name = 'BUSY_TIME') busy_t2, +(SELECT value FROM v$osstat WHERE stat_name = 'IDLE_TIME') idle_t2 +) os +/ +-- +SELECT TRIM(TO_CHAR(o.value)) AS cs_num_cpu_cores + FROM v$osstat o + WHERE o.stat_name = 'NUM_CPU_CORES' +/ +-- +SELECT TRIM(TO_CHAR(o2.value)) AS cs_num_cpus + FROM v$osstat o2 + WHERE o2.stat_name = 'NUM_CPUS' +/ +-- +SELECT TRIM(TO_CHAR(ROUND(o3.value))) AS cs_cpu_load + FROM v$osstat o3 + WHERE o3.stat_name = 'LOAD' +/ +-- +SELECT p.value AS cs_cpu_count + FROM v$parameter p + WHERE p.name = 'cpu_count' +/ +-- +SELECT TO_CHAR(h.op_timestamp, '&&cs_datetime_full_format') AS pdb_creation + FROM dba_pdb_history h + WHERE h.operation = 'CREATE' +/ +-- +COL dba_or_cdb NEW_V dba_or_cdb NOPRI; +SELECT CASE WHEN SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT' THEN 'cdb' ELSE 'dba' END AS dba_or_cdb FROM DUAL +/ +-- +DEF cs_scope_1 = ''; +DEF cs_sqlstat_days = '61'; +@@cs_sample_time_boundaries.sql +@@cs_snap_id_from_and_to.sql +-- +/****************************************************************************************/ +-- +ALTER SESSION SET container = CDB$ROOT; +-- +SELECT 'CONTAINERS:'||TRIM(TO_CHAR(COUNT(*))) AS cs_containers_count FROM v$containers WHERE con_id > 2 AND open_mode = 'READ WRITE' +/ +-- +SELECT TO_CHAR(ROUND(100 * &&cs_tools_schema..PDB_CONFIG.get_cdb_availability), 'FM990') AS cs_cdb_availability_perc FROM DUAL +/ +-- +DEF cs_region = 'UNKNOWN_REGION'; +SELECT CASE WHEN '&&cs_host_name.' = 'HOSTNAME' THEN 'UNKNOWN_REGION' ELSE &&cs_tools_schema..IOD_META_AUX.get_region('&&cs_host_name.') END AS cs_region FROM DUAL +/ +-- +SELECT REPLACE(&&cs_tools_schema..IOD_META_AUX.get_realm('&&cs_region.'), '?', 'X') AS cs_realm, REPLACE(&&cs_tools_schema..IOD_META_AUX.get_region_acronym('&&cs_region.'), '?', 'X') AS cs_rgn FROM DUAL +/ +-- +SELECT REPLACE(&&cs_tools_schema..IOD_META_AUX.get_other_acronym('&&cs_region.'), '?', 'X') AS cs_other_acronym, REPLACE(&&cs_tools_schema..IOD_META_AUX.get_onsr('&&cs_region.'), '?', 'X') AS cs_onsr, REPLACE(&&cs_tools_schema..IOD_META_AUX.get_dedicated('&&cs_region.'), '?', 'X') AS cs_dedicated FROM DUAL +/ +-- +SELECT &&cs_tools_schema..IOD_META_AUX.get_locale(value) AS cs_locale FROM v$parameter WHERE name = 'db_domain' +/ +-- +COL zapper_19_actions_script NEW_V zapper_19_actions_script NOPRI; +SELECT CASE WHEN COUNT(*) > 0 THEN 'cs_zapper_19_actions.sql' ELSE 'cs_null.sql' END AS zapper_19_actions_script + FROM dba_tables + WHERE owner = UPPER('&&cs_stgtab_owner.') + AND table_name = UPPER('zapper_log') +/ +-- +COL oem_me_sqlperf_script NEW_V oem_me_sqlperf_script NOPRI; +SELECT CASE WHEN COUNT(*) > 0 THEN 'cs_oem_me_sqlperf.sql' ELSE 'cs_null.sql' END AS oem_me_sqlperf_script + FROM dba_tables + WHERE owner = UPPER('&&cs_stgtab_owner.') + AND table_name = UPPER('alerts_hist') +/ +-- +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + r.plan AS cs_resource_manager_plan, + CASE + WHEN '&&cs_con_name.' = 'CDB$ROOT' THEN '&&cs_cpu_count. (SAME AS CPU_COUNT)' + WHEN r.utilization_limit IS NULL OR '&&cs_cpu_count.' IS NULL THEN '?' + ELSE TRIM(TO_CHAR(ROUND(r.utilization_limit * TO_NUMBER('&&cs_cpu_count.') / 100, 1), '990.0'))||'('||r.utilization_limit||'% OF CPU_COUNT)' END AS cs_allotted_cpu + FROM v$parameter p, dba_cdb_rsrc_plan_directives r + WHERE p.name = 'resource_manager_plan' + AND r.directive_type(+) = 'PDB' + AND r.plan(+) = REPLACE(p.value, 'FORCE:') + AND r.pluggable_database(+) = '&&cs_con_name.' +/ +-- +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + COALESCE('&&cs_resource_manager_plan.', r.plan) AS cs_resource_manager_plan, + CASE + WHEN '&&cs_con_name.' = 'CDB$ROOT' THEN '&&cs_cpu_count.' + WHEN r.utilization_limit IS NULL OR '&&cs_cpu_count.' IS NULL THEN '?' + WHEN '&&cs_allotted_cpu.' <> '?' THEN '&&cs_allotted_cpu.' + ELSE TRIM(TO_CHAR(ROUND(r.utilization_limit * TO_NUMBER('&&cs_cpu_count.') / 100, 1), '990.0'))||'('||r.utilization_limit||'% by Default)' END AS cs_allotted_cpu + FROM v$parameter p, dba_cdb_rsrc_plan_directives r + WHERE p.name = 'resource_manager_plan' + AND r.directive_type(+) = 'DEFAULT_DIRECTIVE' + AND r.plan(+) = REPLACE(p.value, 'FORCE:') + AND r.pluggable_database(+) = 'ORA$DEFAULT_PDB_DIRECTIVE' +/ +-- +COL blackout_dates_script NEW_V blackout_dates_script NOPRI; +SELECT CASE WHEN COUNT(*) > 0 THEN 'cs_blackout_internal.sql' ELSE 'cs_null.sql' END AS blackout_dates_script + FROM dba_tables + WHERE owner = UPPER('&&cs_stgtab_owner.') + AND table_name = 'BLACKOUT' +/ +DEF cs_blackout_times = ''; +@@&&blackout_dates_script. +-- +DEF cs_avg_running_sessions_cdb = '?'; +COL cs_avg_running_sessions_cdb NEW_V cs_avg_running_sessions_cdb NOPRI; +SELECT TRIM(TO_CHAR(ROUND(avg_running_sessions))) AS cs_avg_running_sessions_cdb FROM ( +SELECT end_time, SUM(avg_running_sessions) AS avg_running_sessions, ROW_NUMBER() OVER (ORDER BY end_time DESC) AS rn +FROM &&cs_tools_schema..dbc_rsrcmgrmetric_history +WHERE /*consumer_group_name = 'OTHER_GROUPS' AND*/ end_time > SYSDATE - (1/24) +GROUP BY end_time +) WHERE rn = 1 +/ +DEF cs_avg_running_sessions_pdb = '?'; +COL cs_avg_running_sessions_pdb NEW_V cs_avg_running_sessions_pdb NOPRI; +SELECT TRIM(TO_CHAR(ROUND(avg_running_sessions))) AS cs_avg_running_sessions_pdb FROM ( +SELECT end_time, SUM(avg_running_sessions) AS avg_running_sessions, ROW_NUMBER() OVER (ORDER BY end_time DESC) AS rn +FROM &&cs_tools_schema..dbc_rsrcmgrmetric_history +WHERE pdb_name = '&&cs_con_name.' AND /*consumer_group_name = 'OTHER_GROUPS' AND*/ end_time > SYSDATE - (1/24) +GROUP BY end_time +) WHERE rn = 1 +/ +-- replaced due to performance concerns (it would take up to 8 seconds in some environments) +-- SELECT TRIM(TO_CHAR(ROUND(SUM(avg_running_sessions)))) AS cs_avg_running_sessions_cdb FROM v$rsrcmgrmetric WHERE consumer_group_name = 'OTHER_GROUPS' +-- / +-- +COL cs_host_shape NEW_V cs_host_shape NOPRI; +COL cs_disk_config NEW_V cs_disk_config NOPRI; +SELECT 'SHAPE:'||host_shape AS cs_host_shape, 'DISK:'||disk_config AS cs_disk_config + FROM &&cs_tools_schema..dbc_system + ORDER BY + timestamp DESC +FETCH FIRST 1 ROW ONLY +/ +-- +BEGIN + FOR i IN (SELECT owner, table_name FROM dba_tables WHERE owner = UPPER('&&cs_tools_schema.') AND table_name = UPPER('kiev_ind_columns')) + LOOP + EXECUTE IMMEDIATE 'SELECT TO_CHAR(timestamp, ''&&cs_timestamp_full_format.'') AS kiev_metadata_date FROM '||i.owner||'.'||i.table_name||' WHERE ROWNUM = 1' INTO :kiev_metadata_date; + END LOOP; +END; +/ +COL kiev_metadata_date NEW_V kiev_metadata_date NOPRI; +SELECT :kiev_metadata_date AS kiev_metadata_date FROM DUAL +/ +-- +-- time when host was rebooted (executed from CD$ROOT only) +DEF cs_system_boot_time = ''; +COL cs_system_boot_time NEW_V cs_system_boot_time FOR A19 NOPRI; +SELECT TO_CHAR(MAX(system_boot_time), '&&cs_datetime_full_format.') AS cs_system_boot_time FROM &&cs_tools_schema..dbc_system; +-- +-- phonebook, compartment_id and kiev_data_store +DEF cs_phonebook_pdb = ''; +DEF cs_compartment_id_pdb = ''; +DEF cs_kiev_store_name = ''; +-- +COL cs_phonebook_pdb NEW_V cs_phonebook_pdb FOR A256 NOPRI; +COL cs_compartment_id_pdb NEW_V cs_compartment_id_pdb FOR A128 NOPRI; +COL cs_kiev_store_name NEW_V cs_kiev_store_name FOR A128 NOPRI; +-- +-- executed from CD$ROOT only +SELECT NVL(phonebook, 'UNKNOWN') AS cs_phonebook_pdb, -- out of horizon (oc1) else from kiev/dbpcs metadata + NVL(compartment_id, 'UNKNOWN') AS cs_compartment_id_pdb, -- out of kiev or dbcps metadata + NVL(kiev_store_name, 'N/A') AS cs_kiev_store_name -- null for kiev multi-schema pdbs + FROM &&cs_tools_schema..dbc_pdb_metadata_v + WHERE pdb_name = '&&cs_con_name.' -- from SYS_CONTEXT('USERENV', 'CON_NAME') when connected into PDB +/ +-- +ALTER SESSION SET CONTAINER = &&cs_con_name.; +-- +/****************************************************************************************/ +-- +DEF cs_easy_connect_string = 'CONNECT_STRING'; +WITH +service AS ( +SELECT /*+ MATERIALIZWE NO_MERGE OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + CASE WHEN ds.pdb = 'CDB$ROOT' THEN 'oradb' WHEN ts.name = 'KIEV' THEN 'kiev' ELSE 'orapdb' END type, + ds.name||'.'||SYS_CONTEXT('USERENV','DB_DOMAIN') name, + vs.con_id, ds.pdb + FROM cdb_services ds, + v$active_services vs, + v$tablespace ts + WHERE 1 = 1 + AND ds.pdb = SYS_CONTEXT ('USERENV', 'CON_NAME') + AND ds.name LIKE 's\_%' ESCAPE '\' + AND ds.name NOT LIKE '%\_ro' ESCAPE '\' + AND vs.con_name = ds.pdb + AND vs.name = ds.name + AND ts.con_id(+) = vs.con_id + AND ts.name(+) = 'KIEV' +) +SELECT --s.pdb, + --'jdbc:oracle:thin:@//'|| + CASE + WHEN '&&cs_host_name.' = 'HOSTNAME' THEN 'CONNECT_STRING' + ELSE + s.type||'-'|| + CASE + WHEN s.pdb = 'CDB$ROOT' THEN REPLACE(LOWER(SYS_CONTEXT('USERENV','DB_NAME')),'_','-') + ELSE REPLACE(LOWER(s.pdb),'_','-') + END||'.svc.'|| + CASE + WHEN REGEXP_COUNT(REPLACE(REPLACE(LOWER(SYS_CONTEXT('USERENV','DB_DOMAIN')),'regional.',''),'.regional',''),'\.') = 0 THEN SUBSTR('&&cs_host_name.',INSTR('&&cs_host_name.','.',-1,1)+1) + ELSE SUBSTR('&&cs_host_name.',INSTR('&&cs_host_name.','.',-1,2)+1) + END||'/'|| + s.name + END cs_easy_connect_string + FROM service s +/ +-- +SELECT TRIM(TO_CHAR(snap_id)) cs_min_snap_id, + TRIM(TO_CHAR(end_interval_time, '&&cs_datetime_full_format.')) cs_min_snap_end_time + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + ORDER BY + snap_id ASC + FETCH FIRST 1 ROW ONLY +/ +-- +@@cs_last_snap.sql +-- +SELECT TRIM(TO_CHAR((24 * 3600 * EXTRACT(day FROM snap_interval)) + (3600 * EXTRACT(hour FROM snap_interval)) + (60 * EXTRACT(minute FROM snap_interval)) + EXTRACT(second FROM snap_interval))) cs_snap_interval_seconds + FROM dba_hist_wr_control +/ +SELECT TRIM(TO_CHAR(sampling_interval)) cs_ash_interval_ms + FROM v$ash_info +/ +-- +SELECT TRIM(TO_CHAR(MIN(snap_id))) cs_1h_snap_id + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND end_interval_time > SYSDATE - (1/24) +/ +SELECT TRIM(TO_CHAR(MIN(snap_id))) cs_1d_snap_id + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND end_interval_time > SYSDATE - 1 +/ +SELECT TRIM(TO_CHAR(MIN(snap_id))) cs_7d_snap_id + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND end_interval_time > SYSDATE - 7 +/ +SELECT TRIM(TO_CHAR(MIN(snap_id))) cs_30d_snap_id + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND end_interval_time > SYSDATE - 30 +/ +SELECT TRIM(TO_CHAR(MIN(snap_id))) cs_startup_snap_id + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND begin_interval_time > TO_DATE('&&cs_startup_time.', '&&cs_datetime_full_format.') +/ +-- +DEF cs_kiev_owner = ''; +COL cs_kiev_owner NEW_V cs_kiev_owner NOPRI; +SELECT owner cs_kiev_owner FROM dba_tables WHERE table_name = 'KIEVDATASTOREMETADATA' AND num_rows > 0 ORDER BY num_rows +/ +DEF cs_jason_value = ''; +COL cs_jason_value NEW_V cs_jason_value NOPRI; +select JSON_VALUE(DATA, '$.transactorConfiguration.algorithmType') cs_jason_value +from &&cs_kiev_owner..kievdynamicconfiguration +where version=(select MAX(version) from &&cs_kiev_owner..kievdynamicconfiguration) +/ +DEF cs_kiev_version = ''; +COL cs_kiev_version NEW_V cs_kiev_version FOR A30 TRUNC NOPRI; +DEF cs_schema_name = ''; +COL cs_schema_name NEW_V cs_schema_name FOR A30 TRUNC NOPRI; +SELECT CASE WHEN '&&cs_kiev_owner.' IS NULL THEN 'NOT_KIEV' ELSE NVL('&&cs_jason_value.', 'CLASSIC') END AS cs_kiev_version, NVL('&&cs_kiev_owner.', 'NOT_KIEV') AS cs_schema_name FROM DUAL +/ +-- +@@/tmp/cs_default_reference.sql +SET TERM ON; +--CLEAR SCREEN; +PRO +PRO Reference: [{&&cs_default_reference.}|DBPERF-nnnnn|IOD-nnnnn|NOC-nnnnn|PROJECT-nnnnn] +PRO Enter Reference: &&cs_reference. +COL cs_reference NEW_V cs_reference NOPRI; +SELECT UPPER(REPLACE(COALESCE('&&cs_reference.', '&&cs_default_reference.'), ' ')) AS cs_reference FROM DUAL; +COL cs_reference_sanitized NEW_V cs_reference_sanitized NOPRI; +SELECT TRANSLATE('&&cs_reference.', '*()@#$[]{}|/\".,?<>''', '___________________') cs_reference_sanitized FROM DUAL; +-- +DEF target_local_directory = '&&cs_def_local_dir.'; +COL cs_local_dir NEW_V cs_local_dir NOPRI; +SELECT NVL('&&target_local_directory.', '&&cs_def_local_dir.') cs_local_dir FROM DUAL; +-- +DEF cs_extended_reference = ''; +COL cs_extended_reference NEW_V cs_extended_reference NOPRI; +SELECT '&&cs_reference.'|| + CASE '&&cs_odis.' WHEN 'N' THEN ' &&cs_realm. &&cs_region. &&cs_rgn. &&cs_locale.' END|| + ' &&cs_db_name..&&cs_con_name.'|| + NVL2('&&cs_other_acronym.', ' &&cs_other_acronym.', NULL)|| + CASE '&&cs_odis.' WHEN 'Y' THEN ' ODIS' END|| + CASE '&&cs_onsr.' WHEN 'Y' THEN ' ONSR' END|| + CASE '&&cs_dedicated.' WHEN 'Y' THEN ' DEDICATED' END AS cs_extended_reference + FROM DUAL +/ +SPO /tmp/cs_default_reference.sql; +PRO DEF cs_default_reference = "&&cs_reference."; +SPO OFF; +-- +SET TERM OFF; +VAR who_am_i CLOB; +!who am i > /tmp/get_who_am_i.txt +get /tmp/get_who_am_i.txt +. +999999 ]'; END;; +0 BEGIN :who_am_i := q'[ +/ +DEF who_am_i = 'oracle'; +COL who_am_i NEW_V who_am_i NOPRI; +SELECT REGEXP_SUBSTR(:who_am_i, '[a-z]+') AS who_am_i FROM DUAL +/ +DEF engineer_info = ''; +COL engineer_info NEW_V engineer_info NOPRI; +SELECT SUBSTR('&&who_am_i. '||SUBSTR(REPLACE('&&cs_reference.', ' '), 1, 30)||' &&cs_date_time.', 1, 64) AS engineer_info FROM DUAL +/ +-- V$SESSION.CLIENT_INFO +EXEC DBMS_APPLICATION_INFO.set_client_info(client_info => '&&engineer_info.'); +-- V$SESSION.CLIENT_IDENTIFIER V$ACTIVE_SESSION_HISTORY.CLIENT_ID DBA_HIST_ACTIVE_SESS_HISTORY.CLIENT_ID +EXEC DBMS_SESSION.set_identifier(client_id => '&&engineer_info.'); +SET TERM ON; diff --git a/csierra/cs_internal/cs_dependency_index_columns.sql b/csierra/cs_internal/cs_dependency_index_columns.sql new file mode 100644 index 0000000..d1ade1c --- /dev/null +++ b/csierra/cs_internal/cs_dependency_index_columns.sql @@ -0,0 +1,163 @@ +COL table_owner FOR A30 HEA 'Table Owner'; +COL table_name FOR A30 HEA 'Table Name'; +COL index_name FOR A30 HEA 'Index Name'; +COL visibility FOR A10 HEA 'Visibility'; +COL partitioned FOR A4 HEA 'Part'; +COL column_position FOR 999 HEA 'Pos'; +COL column_name FOR A30 HEA 'Column Name'; +COL data_type FOR A33 HEA 'Data Type'; +COL data_length FOR 999,999,990 HEA 'Data Length'; +COL nullable FOR A8 HEA 'Nullable'; +COL data_default FOR A30 HEA 'Data Default'; +COL num_distinct FOR 999,999,999,990 HEA 'Num Distinct'; +COL low_value_translated FOR A64 HEA 'Low Value Translated'; +COL high_value_translated FOR A64 HEA 'High Value Translated'; +COL density FOR 0.000000000 HEA 'Density'; +COL num_nulls FOR 999,999,999,990 HEA 'Num Nulls'; +COL num_buckets FOR 999,990 HEA 'Buckets'; +COL histogram FOR A15 HEA 'Histogram'; +COL sample_size FOR 999,999,999,990 HEA 'Sample Size'; +COL last_analyzed FOR A19 HEA 'Last Analyzed'; +COL avg_col_len FOR 999,999,990 HEA 'Avg Col Len'; +COL data_length FOR 999,999,990 HEA 'Data Length'; +COL char_length FOR 999,999,990 HEA 'Char Length'; +-- +BRE ON table_owner ON table_name ON index_name SKIP 1 ON visibility ON partitioned; +-- +PRO +PRO INDEX COLUMNS (dba_ind_columns) +PRO ~~~~~~~~~~~~~ +WITH /* INDEXE COLUMNS */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' + AND ROWNUM >= 1 +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + -- o.to_hash, o.to_address + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table + AND ROWNUM >= 1 +), +-- v_db_object_cache_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_cache) */ +-- DISTINCT +-- SUBSTR(c.owner,1,30) AS object_owner, +-- SUBSTR(c.name,1,30) AS object_name +-- FROM v$db_object_cache c, +-- v_object_dependency_m d +-- WHERE c.type IN ('TABLE','VIEW') +-- AND c.hash_value = d.to_hash +-- AND c.addr = d.to_address +-- ), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + DISTINCT + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + -- v_db_object_cache_m c +-- WHERE t.owner = c.object_owner +-- AND t.table_name = c.object_name + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name + AND ROWNUM >= 1 +), +ic AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM dba_ind_columns WHERE (table_owner, table_name) IN (SELECT owner, table_name FROM dba_tables_m) AND ROWNUM >= 1), +tc AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM dba_tab_cols WHERE (owner, table_name) IN (SELECT owner, table_name FROM dba_tables_m) AND ROWNUM >= 1), +ix AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM dba_indexes WHERE (table_owner, table_name) IN (SELECT owner, table_name FROM dba_tables_m) AND ROWNUM >= 1) +SELECT /*+ QB_NAME(get_stats) */ + i.table_owner, + i.table_name, + i.index_name, + x.visibility, + x.partitioned, + i.column_position, + c.column_name, + c.data_type, + c.data_length, + c.nullable, + c.data_default data_default, + c.num_distinct, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.low_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.low_value)),1,64) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.low_value)),1,64) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.low_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.low_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.low_value,15,8),'XXXXXXXX')) + END low_value_translated, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.high_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.high_value)),1,64) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.high_value)),1,64) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.high_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.high_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.high_value,15,8),'XXXXXXXX')) + END high_value_translated, + c.density, + c.num_nulls, + c.num_buckets, + c.histogram, + c.sample_size, + TO_CHAR(c.last_analyzed, '&&cs_datetime_full_format.') last_analyzed, + c.avg_col_len, + c.data_length, + c.char_length + FROM dba_tables_m t, + ic i, + tc c, + ix x + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name + AND c.owner = i.table_owner + AND c.table_name = i.table_name + AND c.column_name = i.column_name + AND x.table_owner = i.table_owner + AND x.table_name = i.table_name + AND x.index_name = i.index_name + ORDER BY + i.table_owner, + i.table_name, + i.index_name, + i.column_position +/ +-- +CL BRE; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_dependency_indexes.sql b/csierra/cs_internal/cs_dependency_indexes.sql new file mode 100644 index 0000000..b40d1ec --- /dev/null +++ b/csierra/cs_internal/cs_dependency_indexes.sql @@ -0,0 +1,245 @@ +COL table_owner FOR A30 HEA 'Table Owner'; +COL table_name FOR A30 HEA 'Table Name'; +COL index_name FOR A30 HEA 'Index Name'; +COL partitioned FOR A4 HEA 'Part'; +COL orphaned_entries FOR A8 HEA 'Orphaned|Entries'; +COL degree FOR A10 HEA 'Degree'; +COL index_type FOR A27 HEA 'Index Type'; +COL uniqueness FOR A10 HEA 'Uniqueness'; +COL columns FOR 999,999 HEA 'Columns'; +COL status FOR A8 HEA 'Status'; +COL visibility FOR A10 HEA 'Visibility'; +COL blevel FOR 99,990 HEA 'BLevel'; +COL leaf_blocks FOR 999,999,990 HEA 'Leaf Blocks'; +COL size_MiB FOR 999,999,990.000 HEA 'Size MiB'; +COL seg_size_MiB FOR 999,999,990.000 HEA 'Seg Size MiB'; +COL size_MB FOR 999,999,990.000 HEA 'Size MB'; +COL seg_size_MB FOR 999,999,990.000 HEA 'Seg Size MB'; +COL distinct_keys FOR 999,999,999,990 HEA 'Dist Keys'; +COL clustering_factor FOR 999,999,999,990 HEA 'Clust Fact'; +COL num_rows FOR 999,999,999,990 HEA 'Num Rows'; +COL sample_size FOR 999,999,999,990 HEA 'Sample Size'; +COL last_analyzed FOR A19 HEA 'Last Analyzed'; +COL compression FOR A13 HEA 'Compression'; +COL tablespace_name FOR A30 HEA 'Tablespace'; +COL rn FOR 999; +-- +PRO +PRO INDEXES (dba_indexes) +PRO ~~~~~~~ +WITH /* INDEXES */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +) +SELECT /*+ QB_NAME(get_stats) */ + i.table_owner, + i.table_name, + i.index_name, + CASE i.partitioned WHEN 'YES' THEN (SELECT TRIM(TO_CHAR(COUNT(*))) FROM dba_ind_partitions ip WHERE ip.index_owner = i.owner AND ip.index_name = i.index_name) ELSE i.partitioned END AS partitioned, + i.orphaned_entries, + i.degree, + i.index_type, + i.uniqueness, + (SELECT COUNT(*) FROM dba_ind_columns ic WHERE ic.index_owner = i.owner AND ic.index_name = i.index_name) AS columns, + i.status, + i.visibility, + i.blevel, + i.leaf_blocks, + i.leaf_blocks * COALESCE(b.block_size, TO_NUMBER(p.value)) / POWER(10,6) AS size_MB, + (SELECT SUM(s.bytes) / POWER(10,6) FROM dba_segments s WHERE s.owner = i.owner AND s.segment_name = i.index_name AND s.segment_type LIKE 'INDEX%') AS seg_size_MB, + i.distinct_keys, + i.clustering_factor, + i.num_rows, + i.sample_size, + TO_CHAR(i.last_analyzed, '&&cs_datetime_full_format.') AS last_analyzed, + i.compression, + i.tablespace_name + FROM dba_tables_m t, + dba_indexes i, + dba_tablespaces b, + v$parameter p + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name + AND b.tablespace_name(+) = i.tablespace_name + AND p.name = 'db_block_size' + ORDER BY + i.table_owner, + i.table_name, + i.index_name +/ +-- +COL object_type HEA 'Object Type'; +COL object_id FOR 999999999 HEA 'Object ID'; +COL object_name FOR A30 HEA 'Object Name'; +COL subobject_name FOR A30 HEA 'Sub Object Name'; +COL created FOR A23 HEA 'Created'; +COL last_ddl_time FOR A23 HEA 'Last DDL Time'; +-- +PRO +PRO INDEX OBJECTS (dba_objects) up to 100 +PRO ~~~~~~~~~~~~~ +WITH /* OBJECTS */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +) +SELECT o.object_type, + o.owner, + o.object_name, + o.subobject_name, + o.object_id, + TO_CHAR(o.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(o.last_ddl_time, '&&cs_datetime_full_format.') AS last_ddl_time + FROM dba_tables_m t, + dba_indexes i, + dba_objects o + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name + AND o.owner = i.owner + AND o.object_name = i.index_name + AND o.object_type LIKE 'INDEX%' + ORDER BY + o.object_type, + o.owner, + o.object_name, + o.subobject_name +FETCH FIRST 100 ROWS ONLY +/ +-- +COL object_type HEA 'Object Type'; +COL owner FOR A30 HEA 'Owner'; +COL object_id FOR 999999999 HEA 'Object ID'; +COL object_name FOR A30 HEA 'Object Name'; +COL subobject_name FOR A30 HEA 'Sub Object Name'; +COL created FOR A23 HEA 'Created'; +COL last_ddl_time FOR A23 HEA 'Last DDL Time'; +COL analyzetime FOR A19 HEA 'Analyze Time'; +COL savtime FOR A23 HEA 'Saved Time'; +COL rowcnt FOR 999,999,999,990 HEA 'Row Count'; +COL blevel FOR 99,990 HEA 'BLevel'; +COL leafcnt FOR 999,999,990 HEA 'Leaf Blocks'; +COL distkey FOR 999,999,999,990 HEA 'Dist Keys'; +COL samplesize FOR 999,999,999,990 HEA 'Sample Size'; +-- +BREAK ON object_id SKIP 1 ON owner ON object_name ON created ON last_ddl_time; +PRO +PRO CBO STAT INDEX HISTORY (wri$_optstat_ind_history) up to 25 per Index +PRO ~~~~~~~~~~~~~~~~~~~~~~ +WITH /* OBJECTS */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +), +dba_indexes_o AS ( +SELECT o.owner, + o.object_name, + o.subobject_name, + o.object_id, + o.created, + o.last_ddl_time, + h.analyzetime, + h.savtime, + h.rowcnt, + h.blevel, + h.leafcnt, + h.distkey, + h.samplesize, + ROW_NUMBER() OVER (PARTITION BY o.object_id ORDER BY h.analyzetime DESC NULLS LAST, h.savtime DESC NULLS LAST) AS rn + FROM dba_tables_m t, + dba_indexes i, + dba_objects o, + wri$_optstat_ind_history h + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name + AND o.owner = i.owner + AND o.object_name = i.index_name + AND o.object_type = 'INDEX' + AND h.obj# = o.object_id +) +SELECT DISTINCT + o.owner, + o.object_name, + o.subobject_name, + o.object_id, + TO_CHAR(o.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(o.last_ddl_time, '&&cs_datetime_full_format.') AS last_ddl_time, + TO_CHAR(o.analyzetime, '&&cs_datetime_full_format.') AS analyzetime, + TO_CHAR(o.savtime, '&&cs_timestamp_full_format.') AS savtime, + o.rowcnt, + o.blevel, + o.leafcnt, + o.distkey, + o.samplesize + FROM dba_indexes_o o + WHERE o.rn <= 25 + ORDER BY 1, 2, 3, 4, 5, 6, 7 NULLS FIRST, 8 NULLS FIRST +/ +-- +CLEAR BREAK; diff --git a/csierra/cs_internal/cs_dependency_lobs.sql b/csierra/cs_internal/cs_dependency_lobs.sql new file mode 100644 index 0000000..8af6fe4 --- /dev/null +++ b/csierra/cs_internal/cs_dependency_lobs.sql @@ -0,0 +1,116 @@ +COL owner FOR A30 HEA 'Table Owner'; +COL table_name FOR A30 HEA 'Table Name'; +COL column_name FOR A30 HEA 'Column Name'; +COL index_name FOR A30 HEA 'Index Name'; +COL segment_name FOR A30 HEA 'Segment Name'; +COL bytes FOR 999,999,999,999,990 HEA 'Bytes'; +COL blocks FOR 999,999,990 HEA 'Blocks'; +COL size_MiB FOR 999,999,990.000 HEA 'Size MiB'; +COL size_MB FOR 999,999,990.000 HEA 'Size MB'; +COL deduplication FOR A13 HEA 'Deduplication'; +COL compression FOR A11 HEA 'Compression'; +COL encrypt FOR A7 HEA 'Encrypt'; +COL cache FOR A5 HEA 'Cache'; +COL securefile FOR A10 HEA 'SecureFile'; +COL in_row FOR A6 HEA 'In Row'; +COL tablespace_name FOR A30 HEA 'Tablespace'; +-- +BRE ON owner ON table_name SKIP 1; +-- +PRO +PRO LOBS (dba_lobs) +PRO ~~~~ +WITH /* INDEXES */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + -- o.to_hash, o.to_address + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +-- v_db_object_cache_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_cache) */ +-- DISTINCT +-- SUBSTR(c.owner,1,30) AS object_owner, +-- SUBSTR(c.name,1,30) AS object_name +-- FROM v$db_object_cache c, +-- v_object_dependency_m d +-- WHERE c.type IN ('TABLE','VIEW') +-- AND c.hash_value = d.to_hash +-- AND c.addr = d.to_address +-- ), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + -- v_db_object_cache_m c +-- WHERE t.owner = c.object_owner +-- AND t.table_name = c.object_name + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +) +SELECT /*+ QB_NAME(get_stats) */ + t.owner, + t.table_name, + l.column_name, + SUM(s.bytes) AS bytes, + SUM(s.blocks) AS blocks, + --SUM(s.blocks) * COALESCE(b.block_size, TO_NUMBER(p.value)) / POWER(2,20) AS size_MiB, + SUM(s.blocks) * COALESCE(b.block_size, TO_NUMBER(p.value)) / POWER(10,6) AS size_MB, + l.deduplication, + l.compression, + l.encrypt, + l.cache, + l.securefile, + l.in_row, + l.index_name, + l.segment_name, + l.tablespace_name + FROM dba_tables_m t, + dba_lobs l, + dba_segments s, + dba_tablespaces b, + v$parameter p + WHERE l.owner = t.owner + AND l.table_name = t.table_name + AND s.owner = l.owner + AND s.segment_name = l.segment_name + AND s.segment_type IN ('LOBSEGMENT', 'LOB PARTITION') + AND b.tablespace_name(+) = l.tablespace_name + AND p.name = 'db_block_size' + GROUP BY + t.owner, + t.table_name, + l.column_name, + l.index_name, + l.segment_name, + l.deduplication, + l.compression, + l.encrypt, + l.cache, + l.securefile, + l.in_row, + l.tablespace_name, + b.block_size, + p.value + ORDER BY + t.owner, + t.table_name, + l.column_name +/ +-- +CL BRE; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_dependency_metadata.sql b/csierra/cs_internal/cs_dependency_metadata.sql new file mode 100644 index 0000000..7638ecb --- /dev/null +++ b/csierra/cs_internal/cs_dependency_metadata.sql @@ -0,0 +1,120 @@ +DEF max_partitions = '1000'; +-- +COL owner FOR A30 HEA 'Owner'; +COL table_name FOR A30 HEA 'Table Name'; +COL index_name FOR A30 HEA 'Index Name'; +COL metadata FOR A200 HEA 'Metadata'; +-- +BREAK ON table_name SKIP PAGE; +PRO +PRO TABLE METADATA DBMS_METADATA.get_ddl('TABLE', table_name, owner) only if up to &&max_partitions. partitions +PRO ~~~~~~~~~~~~~~ +WITH /* TABLES */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + -- o.to_hash, o.to_address + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +-- v_db_object_cache_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_cache) */ +-- DISTINCT +-- SUBSTR(c.owner,1,30) AS object_owner, +-- SUBSTR(c.name,1,30) AS object_name +-- FROM v$db_object_cache c, +-- v_object_dependency_m d +-- WHERE c.type IN ('TABLE','VIEW') +-- AND c.hash_value = d.to_hash +-- AND c.addr = d.to_address +-- ), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + -- v_db_object_cache_m c +-- WHERE t.owner = c.object_owner +-- AND t.table_name = c.object_name + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +) +SELECT owner, table_name, DBMS_METADATA.get_ddl('TABLE', table_name, owner) AS metadata + FROM dba_tables_m + ORDER BY + owner, table_name +/ +-- +BREAK ON index_name SKIP PAGE; +PRO +PRO INDEX METADATA DBMS_METADATA.get_ddl('INDEX', index_name, owner) only if up to &&max_partitions. partitions +PRO ~~~~~~~~~~~~~~ +WITH /* INDEXES */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + -- o.to_hash, o.to_address + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +-- v_db_object_cache_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_cache) */ +-- DISTINCT +-- SUBSTR(c.owner,1,30) AS object_owner, +-- SUBSTR(c.name,1,30) AS object_name +-- FROM v$db_object_cache c, +-- v_object_dependency_m d +-- WHERE c.type IN ('TABLE','VIEW') +-- AND c.hash_value = d.to_hash +-- AND c.addr = d.to_address +-- ), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + -- v_db_object_cache_m c +-- WHERE t.owner = c.object_owner +-- AND t.table_name = c.object_name + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +) +SELECT i.owner, i.table_name, i.index_name, DBMS_METADATA.get_ddl('INDEX', i.index_name, i.owner) AS metadata + FROM dba_tables_m t, + dba_indexes i + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name + AND CASE i.partitioned WHEN 'YES' THEN -- include only indexes with up to &&max_partitions. partitions + CASE WHEN (SELECT COUNT(*) FROM dba_ind_partitions ip WHERE ip.index_owner = i.owner AND ip.index_name = i.index_name) <= &&max_partitions. THEN 1 ELSE 0 END + ELSE 1 END = 1 + ORDER BY + i.owner, + i.table_name, + i.index_name +/ +-- +CLEAR BREAK; \ No newline at end of file diff --git a/csierra/cs_internal/cs_dependency_part_keys.sql b/csierra/cs_internal/cs_dependency_part_keys.sql new file mode 100644 index 0000000..3004fdf --- /dev/null +++ b/csierra/cs_internal/cs_dependency_part_keys.sql @@ -0,0 +1,95 @@ +COL part_sub FOR A12 HEA 'LEVEL'; +COL object_type FOR A5 HEA 'TYPE'; +COL owner FOR A30 TRUNC; +COL name FOR A30 TRUNC; +COL column_position FOR 999 HEA 'POS'; +COL column_name FOR A30 TRUNC; +-- +PRO +PRO PARTITION KEYS (dba_part_key_columns and dba_subpart_key_columns) +PRO ~~~~~~~~~~~~~~ +-- +WITH /* PART_KEY_COLUMNS */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + -- o.to_hash, o.to_address + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +-- v_db_object_cache_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_cache) */ +-- DISTINCT +-- SUBSTR(c.owner,1,30) AS object_owner, +-- SUBSTR(c.name,1,30) AS object_name +-- FROM v$db_object_cache c, +-- v_object_dependency_m d +-- WHERE c.type IN ('TABLE','VIEW') +-- AND c.hash_value = d.to_hash +-- AND c.addr = d.to_address +-- ), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + -- v_db_object_cache_m c +-- WHERE t.owner = c.object_owner +-- AND t.table_name = c.object_name + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +), +dba_indexes_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_indexes) */ + i.owner, + i.index_name + FROM dba_tables_m t, + dba_indexes i + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name +), +objects_m AS ( +SELECT owner, table_name AS name, 'TABLE' AS object_type + FROM dba_tables_m + UNION +SELECT owner, index_name AS name, 'INDEX' AS object_type + FROM dba_indexes_m +) +SELECT 'PARTITION' AS part_sub, + p.object_type, + p.owner, + p.name, + p.column_position, + p.column_name + FROM dba_part_key_columns p, + objects_m o + WHERE o.owner = p.owner + AND o.name = p.name + AND o.object_type = p.object_type + UNION ALL +SELECT 'SUBPARTITION' AS part_sub, + p.object_type, + p.owner, + p.name, + p.column_position, + p.column_name + FROM dba_subpart_key_columns p, + objects_m o + WHERE o.owner = p.owner + AND o.name = p.name + AND o.object_type = p.object_type + ORDER BY + 1 ASC, 2 DESC, 3, 4, 5 +/ diff --git a/csierra/cs_internal/cs_dependency_segments.sql b/csierra/cs_internal/cs_dependency_segments.sql new file mode 100644 index 0000000..3f7b4ba --- /dev/null +++ b/csierra/cs_internal/cs_dependency_segments.sql @@ -0,0 +1,164 @@ +COL owner FOR A30; +COL segment_name FOR A30; +COL partition_name FOR A30; +COL column_name FOR A30; +COL segments FOR 9,999,990; +-- +COL mebibytes FOR 999,999,990.000 HEA 'Size MiB'; +COL megabytes FOR 999,999,990.000 HEA 'Size MB'; +COL tablespace_name FOR A30 HEA 'Tablespace'; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF mebibytes megabytes segments ON REPORT; +-- +PRO +PRO SEGMENTS (dba_segments) top 100 +PRO ~~~~~~~~ +-- do not use cdb views since they perform very poorly +WITH /* INDEXES */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + -- o.to_hash, o.to_address + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +-- v_db_object_cache_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_cache) */ +-- DISTINCT +-- SUBSTR(c.owner,1,30) AS object_owner, +-- SUBSTR(c.name,1,30) AS object_name +-- FROM v$db_object_cache c, +-- v_object_dependency_m d +-- WHERE c.type IN ('TABLE','VIEW') +-- AND c.hash_value = d.to_hash +-- AND c.addr = d.to_address +-- ), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + -- v_db_object_cache_m c +-- WHERE t.owner = c.object_owner +-- AND t.table_name = c.object_name + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +), +s AS ( +SELECT 1 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, NULL AS column_name, s.bytes, s.tablespace_name + FROM dba_tables_m t, dba_segments s + WHERE s.owner = t.owner + AND s.segment_name = t.table_name + AND s.segment_type LIKE 'TABLE%' + UNION ALL +SELECT 2 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, NULL AS column_name, s.bytes, s.tablespace_name + FROM dba_tables_m t, dba_indexes i, dba_segments s + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name + AND s.owner = i.owner + AND s.segment_name = i.index_name + AND s.segment_type LIKE 'INDEX%' + UNION ALL +SELECT 3 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, l.column_name, s.bytes, s.tablespace_name + FROM dba_tables_m t, dba_lobs l, dba_segments s + WHERE l.owner = t.owner + AND l.table_name = t.table_name + AND s.owner = l.owner + AND s.segment_name = l.segment_name + AND s.segment_type LIKE 'LOB%' +) +--SELECT ROUND(bytes/POWER(2,20),3) AS mebibytes, segment_type, owner, column_name, segment_name, partition_name, tablespace_name +SELECT ROUND(bytes/POWER(10,6),3) AS megabytes, segment_type, owner, column_name, segment_name, partition_name, tablespace_name + FROM s + ORDER BY bytes DESC, oby, segment_type, owner, column_name, segment_name, partition_name + FETCH FIRST 100 ROWS ONLY +/ +-- +PRO +PRO SEGMENT TYPE (dba_segments) +PRO ~~~~~~~~~~~~ +WITH /* INDEXES */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + -- o.to_hash, o.to_address + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +-- v_db_object_cache_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_cache) */ +-- DISTINCT +-- SUBSTR(c.owner,1,30) AS object_owner, +-- SUBSTR(c.name,1,30) AS object_name +-- FROM v$db_object_cache c, +-- v_object_dependency_m d +-- WHERE c.type IN ('TABLE','VIEW') +-- AND c.hash_value = d.to_hash +-- AND c.addr = d.to_address +-- ), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + -- v_db_object_cache_m c +-- WHERE t.owner = c.object_owner +-- AND t.table_name = c.object_name + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +), +s AS ( +SELECT 1 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, NULL AS column_name, s.bytes, s.tablespace_name + FROM dba_tables_m t, dba_segments s + WHERE s.owner = t.owner + AND s.segment_name = t.table_name + AND s.segment_type LIKE 'TABLE%' + UNION ALL +SELECT 2 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, NULL AS column_name, s.bytes, s.tablespace_name + FROM dba_tables_m t, dba_indexes i, dba_segments s + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name + AND s.owner = i.owner + AND s.segment_name = i.index_name + AND s.segment_type LIKE 'INDEX%' + UNION ALL +SELECT 3 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, l.column_name, s.bytes, s.tablespace_name + FROM dba_tables_m t, dba_lobs l, dba_segments s + WHERE l.owner = t.owner + AND l.table_name = t.table_name + AND s.owner = l.owner + AND s.segment_name = l.segment_name + AND s.segment_type LIKE 'LOB%' +) +--SELECT segment_type, COUNT(*) AS segments, ROUND(SUM(bytes)/POWER(2,20),3) AS mebibytes, tablespace_name +SELECT segment_type, COUNT(*) AS segments, ROUND(SUM(bytes)/POWER(10,6),3) AS megabytes, tablespace_name + FROM s + GROUP BY oby, segment_type, tablespace_name + ORDER BY oby, segment_type, tablespace_name +/ +-- +CLEAR BREAK COMPUTE; diff --git a/csierra/cs_internal/cs_dependency_table_columns.sql b/csierra/cs_internal/cs_dependency_table_columns.sql new file mode 100644 index 0000000..5d994f0 --- /dev/null +++ b/csierra/cs_internal/cs_dependency_table_columns.sql @@ -0,0 +1,180 @@ +COL owner FOR A30 HEA 'Table Owner'; +COL table_name FOR A30 HEA 'Table Name'; +COL column_id FOR 999 HEA 'ID'; +COL column_name FOR A30 HEA 'Column Name'; +COL data_type FOR A33 HEA 'Data Type'; +COL data_length FOR 999,999,990 HEA 'Data Length'; +COL nullable FOR A8 HEA 'Nullable'; +COL data_default FOR A30 HEA 'Data Default'; +COL num_distinct FOR 999,999,999,990 HEA 'Num Distinct'; +COL low_value_translated FOR A64 HEA 'Low Value Translated'; +COL high_value_translated FOR A64 HEA 'High Value Translated'; +COL density FOR 0.000000000 HEA 'Density'; +COL num_nulls FOR 999,999,999,990 HEA 'Num Nulls'; +COL num_buckets FOR 999,990 HEA 'Buckets'; +COL histogram FOR A15 HEA 'Histogram'; +COL sample_size FOR 999,999,999,990 HEA 'Sample Size'; +COL last_analyzed FOR A19 HEA 'Last Analyzed'; +COL avg_col_len FOR 999,999,990 HEA 'Avg Col Len'; +COL data_length FOR 999,999,990 HEA 'Data Length'; +COL char_length FOR 999,999,990 HEA 'Char Length'; +-- +BRE ON owner ON table_name SKIP 1; +-- +PRO +PRO TABLE COLUMNS (dba_tab_cols) +PRO ~~~~~~~~~~~~~ +WITH /* INDEXES */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + -- o.to_hash, o.to_address + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +-- v_db_object_cache_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_cache) */ +-- DISTINCT +-- SUBSTR(c.owner,1,30) AS object_owner, +-- SUBSTR(c.name,1,30) AS object_name +-- FROM v$db_object_cache c, +-- v_object_dependency_m d +-- WHERE c.type IN ('TABLE','VIEW') +-- AND c.hash_value = d.to_hash +-- AND c.addr = d.to_address +-- ), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + -- v_db_object_cache_m c +-- WHERE t.owner = c.object_owner +-- AND t.table_name = c.object_name + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +) +SELECT /*+ QB_NAME(get_stats) */ + c.owner, + c.table_name, + c.column_id, + c.column_name, + c.data_type, + c.data_length, + c.nullable, + c.data_default data_default, + c.num_distinct, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.low_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.low_value)),1,64) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.low_value)),1,64) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.low_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.low_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.low_value,15,8),'XXXXXXXX')) + END low_value_translated, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.high_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.high_value)),1,64) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.high_value)),1,64) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.high_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.high_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.high_value,15,8),'XXXXXXXX')) + END high_value_translated, + c.density, + c.num_nulls, + c.num_buckets, + c.histogram, + c.sample_size, + TO_CHAR(c.last_analyzed, '&&cs_datetime_full_format.') last_analyzed, + c.avg_col_len, + c.data_length, + c.char_length + FROM dba_tables_m t, + dba_tab_cols c + WHERE c.owner = t.owner + AND c.table_name = t.table_name + ORDER BY + c.owner, + c.table_name, + c.column_id +/ +-- +CL BRE; +-- +-- SET HEA OFF; +-- PRO +-- PRO COLUMN USAGE REPORT (dbms_stats.report_col_usage) +-- PRO ~~~~~~~~~~~~~~~~~~~ +-- WITH /* OBJECTS */ +-- v_sqlarea_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ +-- DISTINCT +-- hash_value, address +-- FROM v$sqlarea +-- WHERE sql_id = '&&cs_sql_id.' +-- ), +-- v_object_dependency_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ +-- DISTINCT +-- o.to_owner, o.to_name +-- -- o.to_hash, o.to_address +-- FROM v$object_dependency o, +-- v_sqlarea_m s +-- WHERE o.from_hash = s.hash_value +-- AND o.from_address = s.address +-- AND o.to_type = 2 -- table +-- ), +-- dba_tables_m AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ +-- t.owner, +-- t.table_name +-- FROM dba_tables t, +-- v_object_dependency_m o +-- WHERE t.owner = o.to_owner +-- AND t.table_name = o.to_name +-- ) +-- SELECT DBMS_STATS.report_col_usage(t.owner, t.table_name) +-- FROM dba_tables_m t +-- ORDER BY +-- t.owner, t.table_name +-- / +-- SET HEA ON; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_dependency_tables.sql b/csierra/cs_internal/cs_dependency_tables.sql new file mode 100644 index 0000000..f747ae6 --- /dev/null +++ b/csierra/cs_internal/cs_dependency_tables.sql @@ -0,0 +1,233 @@ +COL owner FOR A30 HEA 'Owner'; +COL table_name FOR A30 HEA 'Table Name'; +COL partitioned FOR A4 HEA 'Part'; +COL degree FOR A10 HEA 'Degree'; +COL temporary FOR A4 HEA 'Temp'; +COL blocks FOR 999,999,990 HEA 'Blocks'; +COL num_rows FOR 999,999,999,990 HEA 'Num Rows'; +COL avg_row_len FOR 999,999,990 HEA 'Avg Row Len'; +COL size_MiB FOR 999,999,990.000 HEA 'Size MiB'; +COL seg_size_MiB FOR 999,999,990.000 HEA 'Seg Size MiB'; +COL estimated_MiB FOR 999,999,990.000 HEA 'Estimated MiB'; +COL size_MB FOR 999,999,990.000 HEA 'Size MB'; +COL seg_size_MB FOR 999,999,990.000 HEA 'Seg Size MB'; +COL estimated_MB FOR 999,999,990.000 HEA 'Estimated MB'; +COL sample_size FOR 999,999,999,990 HEA 'Sample Size'; +COL last_analyzed FOR A19 HEA 'Last Analyzed'; +COL compression FOR A12 HEA 'Compression'; +COL tablespace_name FOR A30 HEA 'Tablespace'; +COL rn FOR 999; +-- +PRO +PRO TABLES (dba_tables) +PRO ~~~~~~ +WITH /* TABLES ACCESSED */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name, + CASE t.partitioned WHEN 'YES' THEN (SELECT TRIM(TO_CHAR(COUNT(*))) FROM dba_tab_partitions tp WHERE tp.table_owner = t.owner AND tp.table_name = t.table_name) ELSE t.partitioned END AS partitioned, + t.degree, + t.temporary, + t.blocks, + COALESCE(b.block_size, TO_NUMBER(p.value)) AS block_size, + (SELECT SUM(s.bytes) / POWER(10,6) FROM dba_segments s WHERE s.owner = t.owner AND s.segment_name = t.table_name AND s.segment_type LIKE 'TABLE%') AS seg_size_MB, + t.num_rows, + t.avg_row_len, + t.sample_size, + t.last_analyzed, + t.compression, + t.tablespace_name + FROM dba_tables t, + v_object_dependency_m o, + dba_tablespaces b, + v$parameter p + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name + AND b.tablespace_name(+) = t.tablespace_name + AND p.name = 'db_block_size' +) +SELECT /*+ QB_NAME(get_stats) */ + owner, + table_name, + partitioned, + degree, + temporary, + blocks, + blocks * block_size / POWER(10,6) AS size_MB, + seg_size_MB, + num_rows, + avg_row_len, + num_rows * avg_row_len / POWER(10,6) AS estimated_MB, + sample_size, + TO_CHAR(last_analyzed, '&&cs_datetime_full_format.') AS last_analyzed, + compression, + tablespace_name + FROM dba_tables_m + ORDER BY + owner, + table_name +/ +-- +COL object_type HEA 'Object Type' FOR A30; +COL owner FOR A30 HEA 'Owner'; +COL object_id FOR 999999999 HEA 'Object ID'; +COL object_name FOR A30 HEA 'Object Name'; +COL subobject_name FOR A30 HEA 'Sub Object Name'; +COL created FOR A23 HEA 'Created'; +COL last_ddl_time FOR A23 HEA 'Last DDL Time'; +-- +PRO +PRO TABLE OBJECTS (dba_objects) up to 100 +PRO ~~~~~~~~~~~~~ +WITH /* OBJECTS */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +) +SELECT o.object_type, + o.owner, + o.object_name, + o.subobject_name, + o.object_id, + TO_CHAR(o.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(o.last_ddl_time, '&&cs_datetime_full_format.') AS last_ddl_time + FROM dba_tables_m t, + dba_objects o + WHERE o.owner = t.owner + AND o.object_name = t.table_name + AND o.object_type LIKE 'TABLE%' + ORDER BY + o.object_type, + o.owner, + o.object_name, + o.subobject_name +FETCH FIRST 100 ROWS ONLY +/ +-- +COL object_type HEA 'Object Type'; +COL owner FOR A30 HEA 'Owner'; +COL object_id FOR 999999999 HEA 'Object ID'; +COL object_name FOR A30 HEA 'Object Name'; +COL subobject_name FOR A30 HEA 'Sub Object Name'; +COL created FOR A23 HEA 'Created'; +COL last_ddl_time FOR A23 HEA 'Last DDL Time'; +COL analyzetime FOR A19 HEA 'Analyze Time'; +COL savtime FOR A23 HEA 'Saved Time'; +COL rowcnt FOR 999,999,999,990 HEA 'Row Count'; +COL blkcnt FOR 999,999,990 HEA 'Block Count'; +COL avgrln FOR 999,999,990 HEA 'Avg Row Len'; +COL samplesize FOR 999,999,999,990 HEA 'Sample Size'; +-- +BREAK ON object_id SKIP 1 ON owner ON object_name ON created ON last_ddl_time; +-- +PRO +PRO CBO STAT TABLE HISTORY (wri$_optstat_tab_history) up to 100 per Table +PRO ~~~~~~~~~~~~~~~~~~~~~~ +WITH /* OBJECTS */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +), +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t, + v_object_dependency_m o + WHERE t.owner = o.to_owner + AND t.table_name = o.to_name +), +dba_tables_o AS ( +SELECT o.owner, + o.object_name, + o.subobject_name, + o.object_id, + o.created, + o.last_ddl_time, + h.analyzetime, + h.savtime, + h.rowcnt, + h.blkcnt, + h.avgrln, + h.samplesize, + ROW_NUMBER() OVER (PARTITION BY o.object_id ORDER BY h.analyzetime DESC NULLS LAST, h.savtime DESC NULLS LAST) AS rn + FROM dba_tables_m t, + dba_objects o, + wri$_optstat_tab_history h + WHERE o.owner = t.owner + AND o.object_name = t.table_name + AND o.object_type = 'TABLE' + AND h.obj# = o.object_id +) +SELECT DISTINCT + o.owner, + o.object_name, + o.subobject_name, + o.object_id, + TO_CHAR(o.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(o.last_ddl_time, '&&cs_datetime_full_format.') AS last_ddl_time, + TO_CHAR(o.analyzetime, '&&cs_datetime_full_format.') AS analyzetime, + TO_CHAR(o.savtime, '&&cs_timestamp_full_format.') AS savtime, + o.rowcnt, + o.blkcnt, + o.avgrln, + o.samplesize + FROM dba_tables_o o + WHERE o.rn <= 100 + ORDER BY 1, 2, 3, 4, 5, 6, 7 NULLS FIRST, 8 NULLS FIRST +/ +-- +CLEAR BREAK; \ No newline at end of file diff --git a/csierra/cs_internal/cs_file_prefix.sql b/csierra/cs_internal/cs_file_prefix.sql new file mode 100644 index 0000000..0705cd0 --- /dev/null +++ b/csierra/cs_internal/cs_file_prefix.sql @@ -0,0 +1,9 @@ +SELECT '&&cs_file_dir.'||'&&cs_reference_sanitized._&&cs_file_date_time.Z_'|| + CASE '&&cs_odis.' WHEN 'N' THEN UPPER('&&cs_realm._')||UPPER('&&cs_rgn._')||UPPER('&&cs_locale._') END|| + UPPER('&&cs_db_name._')||UPPER(TRANSLATE('&&cs_con_name.', '*@#$"''', '_____'))|| + UPPER(NVL2('&&cs_other_acronym.', '_&&cs_other_acronym.', NULL))||CASE '&&cs_onsr.' WHEN 'Y' THEN '_ONSR' END||CASE '&&cs_odis.' WHEN 'Y' THEN '_ODIS' END||CASE '&&cs_dedicated.' WHEN 'Y' THEN '_DEDICATED' END|| + NVL2('&&who_am_i.', '_&&who_am_i.', NULL) + AS cs_file_prefix + FROM DUAL +/ +-- diff --git a/csierra/cs_internal/cs_fs_internal_query_1.sql b/csierra/cs_internal/cs_fs_internal_query_1.sql new file mode 100644 index 0000000..c942e7f --- /dev/null +++ b/csierra/cs_internal/cs_fs_internal_query_1.sql @@ -0,0 +1,156 @@ +-- cs_fs_internal_query_1.sql: called by cs_fs.sql +@@cs_sqlstat_cols.sql +PRO +PRO DB Latency (and DB Load) gv$sql (current) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION /* cs_fs_internal_query_1 */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sql_metrics AS ( +SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + s.*, + s.elapsed_time/GREATEST(s.executions,1)/1e3 AS et_ms_per_exec, + s.cpu_time/GREATEST(s.executions,1)/1e3 AS cpu_ms_per_exec, + s.user_io_wait_time/GREATEST(s.executions,1)/1e3 AS io_ms_per_exec, + s.application_wait_time/GREATEST(s.executions,1)/1e3 AS appl_ms_per_exec, + s.concurrency_wait_time/GREATEST(s.executions,1)/1e3 AS conc_ms_per_exec, + s.plsql_exec_time/GREATEST(s.executions,1)/1e3 AS plsql_ms_per_exec, + s.cluster_wait_time/GREATEST(s.executions,1)/1e3 AS cluster_ms_per_exec, + s.java_exec_time/GREATEST(s.executions,1)/1e3 AS java_ms_per_exec, + s.executions/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS execs_per_sec, + s.px_servers_executions/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS px_execs_per_sec, + s.end_of_fetch_count/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS end_of_fetch_per_sec, + s.parse_calls/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS parses_per_sec, + s.invalidations/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS inval_per_sec, + s.loads/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS loads_per_sec, + s.buffer_gets/GREATEST(s.executions,1) AS gets_per_exec, + s.disk_reads/GREATEST(s.executions,1) AS reads_per_exec, + s.direct_reads/GREATEST(s.executions,1) AS direct_reads_per_exec, + s.direct_writes/GREATEST(s.executions,1) AS direct_writes_per_exec, + s.physical_read_requests/GREATEST(s.executions,1) AS phy_read_req_per_exec, + s.physical_read_bytes/GREATEST(s.executions,1)/1e6 AS phy_read_mb_per_exec, + s.physical_write_requests/GREATEST(s.executions,1) AS phy_write_req_per_exec, + s.physical_write_bytes/GREATEST(s.executions,1)/1e6 AS phy_write_mb_per_exec, + s.fetches/GREATEST(s.executions,1) AS fetches_per_exec, + s.sorts/GREATEST(s.executions,1) AS sorts_per_exec, + s.rows_processed/GREATEST(s.executions,1) AS rows_per_exec, + s.elapsed_time/GREATEST(s.rows_processed,s.executions,1)/1e3 AS et_ms_per_row, + s.cpu_time/GREATEST(s.rows_processed,s.executions,1)/1e3 AS cpu_ms_per_row, + s.user_io_wait_time/GREATEST(s.rows_processed,s.executions,1)/1e3 AS io_ms_per_row, + s.buffer_gets/GREATEST(s.rows_processed,s.executions,1) AS gets_per_row, + s.disk_reads/GREATEST(s.rows_processed,s.executions,1) AS reads_per_row, + DBMS_LOB.GETLENGTH(s.sql_fulltext) AS sql_len, + get_sql_hv(s.sql_fulltext) AS sql_hv + FROM gv$sql s + WHERE 1 = 1 + AND ('&&cs_include_sys.' = 'Y' OR ( + s.sql_text NOT LIKE '/* SQL Analyze(%' + AND s.sql_text NOT LIKE '%/* cli_%' + AND s.sql_text NOT LIKE '%/* cs_%' + AND s.sql_text NOT LIKE '%FUNCTION application_category%' + AND s.sql_text NOT LIKE '%MATERIALIZE NO_MERGE%' + AND s.sql_text NOT LIKE '%NO_STATEMENT_QUEUING%' + AND s.sql_text NOT LIKE 'SELECT /* &&cs_script_name. */%' + )) + AND CASE + WHEN LENGTH('&&cs_search_string.') = 5 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NULL /* number */ AND TO_CHAR(get_sql_hv(s.sql_fulltext)) = '&&cs_search_string.' THEN 1 + WHEN LENGTH('&&cs_search_string.') = 13 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NOT NULL /* alpha */ AND LOWER('&&cs_search_string.') = '&&cs_search_string.' AND s.sql_id = '&&cs_search_string.' THEN 1 + WHEN LENGTH('&&cs_search_string.') BETWEEN 6 AND 10 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NULL /* number */ AND TO_CHAR(s.plan_hash_value) = '&&cs_search_string.' THEN 1 + WHEN UPPER(s.sql_fulltext) LIKE UPPER('%&&cs_search_string.%') THEN 1 + END = 1 + AND ('&&cs_include_sys.' = 'Y' OR NVL(s.parsing_schema_name, '-666') <> 'SYS') + AND ROWNUM >= 1 -- materialize +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + s.last_active_time, + REPLACE(s.last_load_time, '/', 'T') AS last_load_time, + REPLACE(s.first_load_time, '/', 'T') AS first_load_time, + '!' AS sep1, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '!' AS sep2, + s.executions, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.inval_per_sec, + s.loads_per_sec, + '!' AS sep3, + s.gets_per_exec, + s.reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '!' AS sep4, + s.rows_per_exec, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + -- '!' AS sep5, + -- s.loaded_versions AS version_count, + -- CASE s.is_obsolete WHEN 'Y' THEN 1 ELSE 0 END AS obsolete_count, + -- CASE s.is_shareable WHEN 'Y' THEN 1 ELSE 0 END AS shareable_count, + -- s.loads, + -- s.invalidations, + -- s.sharable_mem/1e6 AS sharable_mem_mb, + -- '!' AS sep8, + '!' AS sep9, + s.sql_hv, + s.sql_len, + s.sql_id, + s.inst_id, + s.child_number, + s.plan_hash_value, + CASE WHEN s.sql_plan_baseline IS NOT NULL THEN 'YES' ELSE 'NO' END AS sql_bl, + CASE WHEN s.sql_profile IS NOT NULL THEN 'YES' ELSE 'NO' END AS sql_prf, + CASE WHEN s.sql_patch IS NOT NULL THEN 'YES' ELSE 'NO' END AS sql_pch, + s.sql_text, + s.module, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END AS pdb_or_parsing_schema_name, + s.optimizer_cost + FROM sql_metrics s + WHERE 1 = 1 + ORDER BY + s.last_active_time, + s.sql_hv, + s.sql_id, + s.inst_id, + s.plan_hash_value, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END, + s.module +/ diff --git a/csierra/cs_internal/cs_fs_internal_query_2.sql b/csierra/cs_internal/cs_fs_internal_query_2.sql new file mode 100644 index 0000000..7441245 --- /dev/null +++ b/csierra/cs_internal/cs_fs_internal_query_2.sql @@ -0,0 +1,243 @@ +-- cs_fs_internal_query_2.sql: called by cs_fs.sql +PRO +PRO DB Latency (and DB Load) v$sqlstats (last &&cs_last_snap_mins. minutes) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION /* cs_fs_internal_query_2 */ get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqlstats AS ( +SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + s.con_id, + s.delta_elapsed_time/GREATEST(s.delta_execution_count,1)/1e3 AS et_ms_per_exec, + s.delta_cpu_time/GREATEST(s.delta_execution_count,1)/1e3 AS cpu_ms_per_exec, + s.delta_user_io_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS io_ms_per_exec, + s.delta_application_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS appl_ms_per_exec, + s.delta_concurrency_time/GREATEST(s.delta_execution_count,1)/1e3 AS conc_ms_per_exec, + s.delta_plsql_exec_time/GREATEST(s.delta_execution_count,1)/1e3 AS plsql_ms_per_exec, + s.delta_cluster_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS cluster_ms_per_exec, + s.delta_java_exec_time/GREATEST(s.delta_execution_count,1)/1e3 AS java_ms_per_exec, + s.delta_elapsed_time/GREATEST(w.age_seconds,1)/1e6 AS et_aas, + s.delta_cpu_time/GREATEST(w.age_seconds,1)/1e6 AS cpu_aas, + s.delta_user_io_wait_time/GREATEST(w.age_seconds,1)/1e6 AS io_aas, + s.delta_application_wait_time/GREATEST(w.age_seconds,1)/1e6 AS appl_aas, + s.delta_concurrency_time/GREATEST(w.age_seconds,1)/1e6 AS conc_aas, + s.delta_plsql_exec_time/GREATEST(w.age_seconds,1)/1e6 AS plsql_aas, + s.delta_cluster_wait_time/GREATEST(w.age_seconds,1)/1e6 AS cluster_aas, + s.delta_java_exec_time/GREATEST(w.age_seconds,1)/1e6 AS java_aas, + s.delta_execution_count AS delta_execution_count, + s.delta_execution_count/GREATEST(w.age_seconds,1) AS execs_per_sec, + s.delta_px_servers_executions/GREATEST(w.age_seconds,1) AS px_execs_per_sec, + s.delta_end_of_fetch_count/GREATEST(w.age_seconds,1) AS end_of_fetch_per_sec, + s.delta_parse_calls/GREATEST(w.age_seconds,1) AS parses_per_sec, + s.delta_invalidations/GREATEST(w.age_seconds,1) AS inval_per_sec, + s.delta_loads/GREATEST(w.age_seconds,1) AS loads_per_sec, + s.delta_buffer_gets/GREATEST(s.delta_execution_count,1) AS gets_per_exec, + s.delta_disk_reads/GREATEST(s.delta_execution_count,1) AS reads_per_exec, + s.delta_direct_reads/GREATEST(s.delta_execution_count,1) AS direct_reads_per_exec, + s.delta_direct_writes/GREATEST(s.delta_execution_count,1) AS direct_writes_per_exec, + s.delta_physical_read_requests/GREATEST(s.delta_execution_count,1) AS phy_read_req_per_exec, + s.delta_physical_read_bytes/GREATEST(s.delta_execution_count,1)/1e6 AS phy_read_mb_per_exec, + s.delta_physical_write_requests/GREATEST(s.delta_execution_count,1) AS phy_write_req_per_exec, + s.delta_physical_write_bytes/GREATEST(s.delta_execution_count,1)/1e6 AS phy_write_mb_per_exec, + s.delta_fetch_count/GREATEST(s.delta_execution_count,1) AS fetches_per_exec, + s.delta_sorts/GREATEST(s.delta_execution_count,1) AS sorts_per_exec, + s.delta_rows_processed, + s.delta_rows_processed/GREATEST(s.delta_execution_count,1) AS rows_per_exec, + s.delta_elapsed_time/GREATEST(s.delta_rows_processed,s.delta_execution_count,1)/1e3 AS et_ms_per_row, + s.delta_cpu_time/GREATEST(s.delta_rows_processed,s.delta_execution_count,1)/1e3 AS cpu_ms_per_row, + s.delta_user_io_wait_time/GREATEST(s.delta_rows_processed,s.delta_execution_count,1)/1e3 AS io_ms_per_row, + s.delta_buffer_gets/GREATEST(s.delta_rows_processed,s.delta_execution_count,1) AS gets_per_row, + s.delta_disk_reads/GREATEST(s.delta_rows_processed,s.delta_execution_count,1) AS reads_per_row, + s.avg_hard_parse_time, + s.sql_id, + s.sql_text, + s.sql_fulltext, + DBMS_LOB.GETLENGTH(s.sql_fulltext) AS sql_len, + s.plan_hash_value, + s.last_active_child_address + FROM v$sqlstats s, + (SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + ((86400 * EXTRACT(DAY FROM (SYSTIMESTAMP - MAX(end_interval_time))) + (3600 * EXTRACT(HOUR FROM (systimestamp - MAX(end_interval_time)))) + (60 * EXTRACT(MINUTE FROM (systimestamp - MAX(end_interval_time)))) + EXTRACT(SECOND FROM (systimestamp - MAX(end_interval_time))))) AS age_seconds + FROM dba_hist_snapshot + WHERE end_interval_time < SYSTIMESTAMP) w + WHERE 1 = 1 + AND ('&&cs_include_sys.' = 'Y' OR ( + s.sql_text NOT LIKE '/* SQL Analyze(%' + AND s.sql_text NOT LIKE '%/* cli_%' + AND s.sql_text NOT LIKE '%/* cs_%' + AND s.sql_text NOT LIKE '%FUNCTION application_category%' + AND s.sql_text NOT LIKE '%MATERIALIZE NO_MERGE%' + AND s.sql_text NOT LIKE '%NO_STATEMENT_QUEUING%' + AND s.sql_text NOT LIKE 'SELECT /* &&cs_script_name. */%' + )) + AND CASE + WHEN LENGTH('&&cs_search_string.') = 5 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NULL /* number */ AND TO_CHAR(get_sql_hv(s.sql_fulltext)) = '&&cs_search_string.' THEN 1 + WHEN LENGTH('&&cs_search_string.') = 13 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NOT NULL /* alpha */ AND LOWER('&&cs_search_string.') = '&&cs_search_string.' AND s.sql_id = '&&cs_search_string.' THEN 1 + WHEN LENGTH('&&cs_search_string.') BETWEEN 6 AND 10 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NULL /* number */ AND TO_CHAR(s.plan_hash_value) = '&&cs_search_string.' THEN 1 + WHEN UPPER(s.sql_fulltext) LIKE UPPER('%&&cs_search_string.%') THEN 1 + END = 1 + AND ROWNUM >= 1 -- materialize +), +sqlstats_extended AS ( +SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + s.delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.avg_hard_parse_time, + s.inval_per_sec, + s.loads_per_sec, + s.gets_per_exec, + s.reads_per_exec, + -- s.direct_reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + s.delta_rows_processed, + s.rows_per_exec, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + s.sql_id, + s.sql_len, + s.sql_text, + s.sql_fulltext, + s.plan_hash_value, + s.last_active_child_address, + s.con_id, + c.name AS pdb_name + FROM sqlstats s, + v$containers c + WHERE c.con_id = s.con_id + AND ROWNUM >= 1 +) +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '|' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '|' AS sep2, + s.delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.avg_hard_parse_time, + s.inval_per_sec, + s.loads_per_sec, + '|' AS sep3, + s.gets_per_exec, + s.reads_per_exec, + -- s.direct_reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '|' AS sep4, + s.delta_rows_processed, + s.rows_per_exec, + '|' AS sep5, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '|' AS sep6, + get_sql_hv(s.sql_fulltext) AS sql_hv, + s.sql_len, + s.sql_id, + s.plan_hash_value, + v.has_baseline, + v.has_profile, + v.has_patch, + s.sql_text, + CASE '&&cs_con_name.' WHEN 'CDB$ROOT' THEN s.pdb_name ELSE v.parsing_schema_name END AS pdb_or_parsing_schema_name, + t.num_rows, + t.blocks + FROM sqlstats_extended s + OUTER APPLY ( + SELECT CASE WHEN v.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN v.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN v.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch, + v.parsing_schema_name, + v.hash_value, + v.address + FROM v$sql v + WHERE 1 = 1 + AND v.sql_id = s.sql_id + AND v.con_id = s.con_id + AND v.plan_hash_value = s.plan_hash_value + AND v.child_address = s.last_active_child_address + ORDER BY + v.last_active_time DESC NULLS LAST + FETCH FIRST 1 ROW ONLY + ) v + OUTER APPLY ( -- only works when executed within a PDB + SELECT t.num_rows, t.blocks + FROM v$object_dependency d, dba_users u, dba_tables t + WHERE d.from_hash = v.hash_value + AND d.from_address = v.address + AND d.to_type = 2 -- table + AND d.to_owner <> 'SYS' + AND d.con_id = s.con_id + AND u.username = d.to_owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND t.owner = d.to_owner + AND t.table_name = d.to_name + ORDER BY + t.num_rows DESC NULLS LAST + FETCH FIRST 1 ROW ONLY + ) t + WHERE 1 = 1 + AND ('&&cs_include_sys.' = 'Y' OR NVL(v.parsing_schema_name, '-666') <> 'SYS') + ORDER BY + s.et_ms_per_exec DESC +/ diff --git a/csierra/cs_internal/cs_fs_internal_query_3.sql b/csierra/cs_internal/cs_fs_internal_query_3.sql new file mode 100644 index 0000000..9866094 --- /dev/null +++ b/csierra/cs_internal/cs_fs_internal_query_3.sql @@ -0,0 +1,318 @@ +-- cs_fs_internal_query_3.sql: called by cs_fs.sql +PRO +PRO DB Latency (and DB Load) dba_hist_sqlstat (last &&cs_awr_search_days. days) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_fs_internal_query_3 */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT /*+ MATERIALIZE(@sqltext_mv) MATERIALIZE(@snapshot_mv) MATERIALIZE(@sqlstats_mv) NO_MERGE(@sqltext_mv) NO_MERGE(@snapshot_mv) NO_MERGE(@sqlstats_mv) ORDERED */ + t.begin_interval_time AS begin_timestamp, + t.end_interval_time AS end_timestamp, + (86400 * EXTRACT(DAY FROM (t.end_interval_time - t.begin_interval_time))) + (3600 * EXTRACT(HOUR FROM (t.end_interval_time - t.begin_interval_time))) + (60 * EXTRACT(MINUTE FROM (t.end_interval_time - t.begin_interval_time))) + EXTRACT(SECOND FROM (t.end_interval_time - t.begin_interval_time)) AS seconds, + s.instance_number, + s.parsing_schema_name, + s.module, + s.action, + s.sql_profile, + s.optimizer_cost, + s.con_id, + s.sql_id, + -- s.force_matching_signature, + s.plan_hash_value, + get_sql_hv(x.sql_text) AS sql_hv, + REPLACE(REPLACE(DBMS_LOB.substr(x.sql_text, 1000), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text, + x.sql_text AS sql_fulltext, + DBMS_LOB.GETLENGTH(x.sql_text) AS sql_len, + GREATEST(s.executions_delta, 0) AS delta_execution_count, + GREATEST(s.elapsed_time_delta, 0) AS delta_elapsed_time, + GREATEST(s.cpu_time_delta, 0) AS delta_cpu_time, + GREATEST(s.iowait_delta, 0) AS delta_user_io_wait_time, + GREATEST(s.apwait_delta, 0) AS delta_application_wait_time, + GREATEST(s.ccwait_delta, 0) AS delta_concurrency_time, + GREATEST(s.plsexec_time_delta, 0) AS delta_plsql_exec_time, + GREATEST(s.clwait_delta, 0) AS delta_cluster_wait_time, + GREATEST(s.javexec_time_delta, 0) AS delta_java_exec_time, + GREATEST(s.px_servers_execs_delta, 0) AS delta_px_servers_executions, + GREATEST(s.end_of_fetch_count_delta, 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls_delta, 0) AS delta_parse_calls, + GREATEST(s.invalidations_delta, 0) AS delta_invalidations, + GREATEST(s.loads_delta, 0) AS delta_loads, + GREATEST(s.buffer_gets_delta, 0) AS delta_buffer_gets, + GREATEST(s.disk_reads_delta, 0) AS delta_disk_reads, + GREATEST(s.direct_writes_delta, 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests_delta, 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes_delta, 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests_delta, 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes_delta, 0) AS delta_physical_write_bytes, + GREATEST(s.fetches_delta, 0) AS delta_fetch_count, + GREATEST(s.sorts_delta, 0) AS delta_sorts, + GREATEST(s.rows_processed_delta, 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes_delta, 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_offload_elig_bytes_delta, 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.cell_uncompressed_bytes_delta, 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_offload_return_bytes_delta, 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.obsolete_count + FROM dba_hist_snapshot t, + dba_hist_sqlstat s, + dba_hist_sqltext x + WHERE 1 = 1 + AND TO_NUMBER('&&cs_awr_search_days.') > 0 + AND t.dbid = TO_NUMBER('&&cs_dbid.') + AND t.instance_number = TO_NUMBER('&&cs_instance_number.') + AND t.snap_id > TO_NUMBER('&&cs_min_snap_id.') + AND s.snap_id = t.snap_id + AND s.snap_id > TO_NUMBER('&&cs_min_snap_id.') + AND s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + AND x.dbid = TO_NUMBER('&&cs_dbid.') + AND x.sql_id = s.sql_id + AND x.con_id = s.con_id + AND x.dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs_include_sys.' = 'Y' OR ( + x.sql_text NOT LIKE '/* SQL Analyze(%' + AND x.sql_text NOT LIKE '%/* cli_%' + AND x.sql_text NOT LIKE '%/* cs_%' + AND x.sql_text NOT LIKE '%FUNCTION application_category%' + AND x.sql_text NOT LIKE '%MATERIALIZE NO_MERGE%' + AND x.sql_text NOT LIKE '%NO_STATEMENT_QUEUING%' + AND x.sql_text NOT LIKE 'SELECT /* &&cs_script_name. */%' + )) + AND CASE + WHEN LENGTH('&&cs_search_string.') = 5 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NULL /* number */ AND TO_CHAR(get_sql_hv(x.sql_text)) = '&&cs_search_string.' THEN 1 + WHEN LENGTH('&&cs_search_string.') = 13 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NOT NULL /* alpha */ AND LOWER('&&cs_search_string.') = '&&cs_search_string.' AND x.sql_id = '&&cs_search_string.' THEN 1 + WHEN LENGTH('&&cs_search_string.') BETWEEN 6 AND 10 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NULL /* number */ AND TO_CHAR(s.plan_hash_value) = '&&cs_search_string.' THEN 1 + WHEN UPPER(x.sql_text) LIKE UPPER('%&&cs_search_string.%') THEN 1 + END = 1 +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT MIN(d.begin_timestamp) AS begin_timestamp, + MAX(d.end_timestamp) AS end_timestamp, + SUM(d.seconds) AS seconds, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count) AS delta_execution_count2, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + d.con_id, + d.sql_hv, + d.sql_len, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + d.parsing_schema_name, + -- d.module, + -- d.action, + d.plan_hash_value, + d.sql_text, + -- d.sql_fulltext, -- not a GROUP BY column (CLOB) + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_elapsed_time) AS delta_elapsed_time, + SUM(d.delta_cpu_time) AS delta_cpu_time, + SUM(d.delta_user_io_wait_time) AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time) AS delta_application_wait_time, + SUM(d.delta_concurrency_time) AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time) AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time) AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time) AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes) AS delta_physical_read_bytes, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes) AS delta_physical_write_bytes, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes) AS delta_io_interconnect_bytes, + SUM(d.delta_cell_offload_elig_bytes) AS delta_cell_offload_elig_bytes, + SUM(d.delta_cell_uncompressed_bytes) AS delta_cell_uncompressed_bytes, + SUM(d.delta_cell_offload_retrn_bytes) AS delta_cell_offload_retrn_bytes, + SUM(d.version_count) AS version_count, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + SUM(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE 1 = 1 + AND TO_NUMBER('&&cs_awr_search_days.') > 0 + AND d.seconds > 1 -- avoid snaps less than 1 sec appart + GROUP BY + d.con_id, + d.sql_hv, + d.sql_len, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + d.parsing_schema_name, + -- d.module, + -- d.action, + d.plan_hash_value, + d.sql_text +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '|' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '|' AS sep2, + s.delta_execution_count2 AS delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.inval_per_sec, + s.loads_per_sec, + '|' AS sep3, + s.gets_per_exec, + s.reads_per_exec, + -- s.direct_reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '|' AS sep4, + s.delta_rows_processed, + s.rows_per_exec, + '|' AS sep5, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '|' AS sep6, + s.sql_hv, + s.sql_len, + s.sql_id, + s.plan_hash_value, + v.has_baseline, + v.has_profile, + v.has_patch, + s.sql_text, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END AS pdb_or_parsing_schema_name, + t.num_rows, + t.blocks, + s.begin_timestamp, + s.end_timestamp, + s.seconds + FROM sqlstats_metrics s + OUTER APPLY ( + SELECT CASE WHEN v.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN v.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN v.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch, + -- v.parsing_schema_name, + v.hash_value, + v.address + FROM v$sql v + WHERE v.sql_id = s.sql_id + AND v.con_id = s.con_id + AND v.plan_hash_value = s.plan_hash_value + ORDER BY + v.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) v + OUTER APPLY ( -- only works when executed within a PDB + SELECT t.num_rows, t.blocks + FROM v$object_dependency d, dba_users u, dba_tables t + WHERE d.from_hash = v.hash_value + AND d.from_address = v.address + AND d.to_type = 2 -- table + AND d.to_owner <> 'SYS' + AND d.con_id = s.con_id + AND u.username = d.to_owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND t.owner = d.to_owner + AND t.table_name = d.to_name + ORDER BY + t.num_rows DESC NULLS LAST + FETCH FIRST 1 ROW ONLY + ) t + WHERE 1 = 1 + AND TO_NUMBER('&&cs_awr_search_days.') > 0 + AND ('&&cs_include_sys.' = 'Y' OR NVL(s.parsing_schema_name, '-666') <> 'SYS') + ORDER BY + s.et_ms_per_exec DESC +/ diff --git a/csierra/cs_internal/cs_fs_internal_query_4.sql b/csierra/cs_internal/cs_fs_internal_query_4.sql new file mode 100644 index 0000000..9a0924e --- /dev/null +++ b/csierra/cs_internal/cs_fs_internal_query_4.sql @@ -0,0 +1,145 @@ +-- cs_fs_internal_query_4.sql: called by cs_fs.sql +SET HEA OFF PAGES 0; +PRO +PRO SQL Text v$sqlstats +PRO ~~~~~~~~ +WITH +FUNCTION /* cs_fs_internal_query_4 */ get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +FUNCTION get_first_rows_candidacy (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_or_count NUMBER; + l_ic_count NUMBER; + l_ep_count NUMBER; + /**************************************************************************************/ + FUNCTION get_or_count (p2_sqltext IN CLOB) + RETURN NUMBER + IS + l2_or_count NUMBER := TO_NUMBER(NULL); + BEGIN + IF p2_sqltext LIKE '%/* performScanQuery(%,%) %' THEN + -- returns count of OR predicates such as ' < :5 ) OR' + -- when > 0 then this is a pagination (continue) scan, and when = 0 then this is a begin scan + SELECT REGEXP_COUNT(p2_sqltext, '( >=? | <=? ):\d+ \) OR ?$', 1, 'cm') INTO l2_or_count FROM DUAL; + END IF; + RETURN l2_or_count; + END get_or_count; + /**************************************************************************************/ + FUNCTION get_ic_count (p2_sqltext IN CLOB) + RETURN NUMBER + IS + l2_ic_count NUMBER := TO_NUMBER(NULL); + BEGIN + IF p2_sqltext LIKE '%/* performScanQuery(%,%) %' THEN + -- gets position of 1st character after 2nd ORDER BY + -- then counts columns referenced by the main query's ORDER BY + SELECT REGEXP_COUNT(p2_sqltext, ' (ASC|DESC)(,|$)', REGEXP_INSTR(p2_sqltext, 'ORDER BY', 1, 2, 1, 'c'), 'cm') INTO l2_ic_count FROM DUAL; + END IF; + RETURN l2_ic_count; + END get_ic_count; + /**************************************************************************************/ + FUNCTION get_ep_count (p2_sqltext IN CLOB) + RETURN NUMBER + IS + l2_ep_count NUMBER := TO_NUMBER(NULL); + BEGIN + IF p2_sqltext LIKE '%/* performScanQuery(%,%) %' THEN + -- counts "greater than" (or "less than") operands + -- then computes position of first character ')' after bind reference of last "greater than" (or "less than") operand + -- returning the nunber of equality predicates on the prefix portion of the filters (i.e.: after all pagination predicates) + SELECT REGEXP_COUNT(p2_sqltext, '\(\w+ = :\d+ \)', GREATEST(REGEXP_INSTR(p2_sqltext, '( > | < ):\d+ ', 1, GREATEST(REGEXP_COUNT(p2_sqltext, '( > | < ):\d+ '), 1), 1), 1)) INTO l2_ep_count FROM DUAL; + END IF; + RETURN l2_ep_count; + END get_ep_count; + /**************************************************************************************/ +BEGIN + IF p_sqltext NOT LIKE '%/* performScanQuery(%,%) %' THEN + RETURN 'Candidacy only applies to KIEV performScanQuery'; + -- ELSIF p_sqltext LIKE '%(futureWork,resumptionTimestamp)%' + -- OR p_sqltext LIKE '%(leaseDecorators,ae_timestamp_index)%' + -- OR p_sqltext LIKE '%(WORK_PARTITIONS_BUCKET,WORK_PARTITIONS_BUCKETIdx)%' -- KIEV99A2 FLAMINGOCPDB d41w5f7gnhg2b + -- OR p_sqltext LIKE '%(LEASE,state_index)%' -- KIEV99RG IDENTITY_R1_ALPHA an1n9htmx7wss + -- THEN + -- RETURN 'Bad CANDIDATE: Known SQL, which requires a specific execution plan'; + ELSIF p_sqltext LIKE '%AND (1 = 1)%' THEN + RETURN 'Good CANDIDATE: Non-prefixed begin scan (expect a leading full index scan)'; + END IF; + -- + l_or_count := get_or_count(p2_sqltext => p_sqltext); + l_ic_count := get_ic_count(p2_sqltext => p_sqltext); + l_ep_count := get_ep_count(p2_sqltext => p_sqltext); + -- + IF l_or_count = 0 THEN + RETURN 'Good CANDIDATE: Prefixed begin scan or simple continue scan without or_operands (expect a leading range index scan)'; + ELSIF l_ic_count = l_ep_count + 1 THEN + RETURN 'Good CANDIDATE: Continue scan with: or_operands = '||TRIM(l_or_count)||', order-by_index_columns = '||TRIM(l_ic_count)||', prefixed_equality_predicates = '||TRIM(l_ep_count)||' (expect a leading range index scan)'; + ELSIF l_ep_count > 0 THEN + RETURN 'Poor Candidate: Continue scan with: or_operands = '||TRIM(l_or_count)||', order-by_index_columns = '||TRIM(l_ic_count)||', prefixed_equality_predicates = '||TRIM(l_ep_count)||' (a leading range index scan might be possible but not necessarily efficient)'; + ELSIF l_ic_count <> l_ep_count + 1 THEN + RETURN 'Bad CANDIDATE: Continue scan with: or_operands = '||TRIM(l_or_count)||', order-by_index_columns = '||TRIM(l_ic_count)||', prefixed_equality_predicates = '||TRIM(l_ep_count)||' (expect some suboptimal plan with a full scan)'; + ELSE + RETURN 'Unexpected'; + END IF; +END get_first_rows_candidacy; +/****************************************************************************************/ +sqlstats AS ( +SELECT s.sql_id, + get_sql_hv(s.sql_fulltext) AS sql_hv, + get_first_rows_candidacy(s.sql_fulltext) AS first_rows_candidacy, + s.sql_fulltext AS sql_text, + c.name AS pdb_name + FROM v$sqlstats s, v$containers c + OUTER APPLY ( -- slow! + SELECT v.parsing_schema_name + FROM v$sql v + WHERE 1 = 1 + AND v.sql_id = s.sql_id + AND v.con_id = s.con_id + AND v.plan_hash_value = s.plan_hash_value + AND v.child_address = s.last_active_child_address + ORDER BY + v.last_active_time DESC NULLS LAST + FETCH FIRST 1 ROW ONLY + ) v + WHERE 1 = 1 + AND ('&&cs_include_sys.' = 'Y' OR ( + s.sql_text NOT LIKE '/* SQL Analyze(%' + AND s.sql_text NOT LIKE '%/* cli_%' + AND s.sql_text NOT LIKE '%/* cs_%' + AND s.sql_text NOT LIKE '%FUNCTION application_category%' + AND s.sql_text NOT LIKE '%MATERIALIZE NO_MERGE%' + AND s.sql_text NOT LIKE '%NO_STATEMENT_QUEUING%' + AND s.sql_text NOT LIKE 'SELECT /* &&cs_script_name. */%' + )) + AND CASE + WHEN LENGTH('&&cs_search_string.') = 5 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NULL /* number */ AND TO_CHAR(get_sql_hv(s.sql_fulltext)) = '&&cs_search_string.' THEN 1 + WHEN LENGTH('&&cs_search_string.') = 13 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NOT NULL /* alpha */ AND LOWER('&&cs_search_string.') = '&&cs_search_string.' AND s.sql_id = '&&cs_search_string.' THEN 1 + WHEN LENGTH('&&cs_search_string.') BETWEEN 6 AND 10 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NULL /* number */ AND TO_CHAR(s.plan_hash_value) = '&&cs_search_string.' THEN 1 + WHEN UPPER(s.sql_fulltext) LIKE UPPER('%&&cs_search_string.%') THEN 1 + END = 1 + AND ('&&cs_include_sys.' = 'Y' OR NVL(v.parsing_schema_name, '-666') <> 'SYS') -- slow! + AND c.con_id = s.con_id + AND ROWNUM >= 1 -- materialize +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + CHR(10)|| + 'SQL_HV : '||sql_hv||CHR(10)|| + 'SQL_ID : '||sql_id||CHR(10)|| + 'FIRST_ROWS : '||first_rows_candidacy||CHR(10)|| + 'PDB_NAME : '||pdb_name||CHR(10)|| + CHR(10)||sql_text AS pretty_unique_name + FROM sqlstats + ORDER BY + sql_hv, sql_id +/ +-- +SET HEA ON PAGES 100; \ No newline at end of file diff --git a/csierra/cs_internal/cs_fs_internal_query_5.sql b/csierra/cs_internal/cs_fs_internal_query_5.sql new file mode 100644 index 0000000..b966138 --- /dev/null +++ b/csierra/cs_internal/cs_fs_internal_query_5.sql @@ -0,0 +1,147 @@ +-- cs_fs_internal_query_5.sql: called by cs_fs.sql +SET HEA OFF PAGES 0; +PRO +PRO SQL Text dba_hist_sqltext (may include SYS parsing schema) +PRO ~~~~~~~~ +WITH +FUNCTION /* cs_fs_internal_query_5 */ get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +FUNCTION get_first_rows_candidacy (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_or_count NUMBER; + l_ic_count NUMBER; + l_ep_count NUMBER; + /**************************************************************************************/ + FUNCTION get_or_count (p2_sqltext IN CLOB) + RETURN NUMBER + IS + l2_or_count NUMBER := TO_NUMBER(NULL); + BEGIN + IF p2_sqltext LIKE '%/* performScanQuery(%,%) %' THEN + -- returns count of OR predicates such as ' < :5 ) OR' + -- when > 0 then this is a pagination (continue) scan, and when = 0 then this is a begin scan + SELECT REGEXP_COUNT(p2_sqltext, '( >=? | <=? ):\d+ \) OR ?$', 1, 'cm') INTO l2_or_count FROM DUAL; + END IF; + RETURN l2_or_count; + END get_or_count; + /**************************************************************************************/ + FUNCTION get_ic_count (p2_sqltext IN CLOB) + RETURN NUMBER + IS + l2_ic_count NUMBER := TO_NUMBER(NULL); + BEGIN + IF p2_sqltext LIKE '%/* performScanQuery(%,%) %' THEN + -- gets position of 1st character after 2nd ORDER BY + -- then counts columns referenced by the main query's ORDER BY + SELECT REGEXP_COUNT(p2_sqltext, ' (ASC|DESC)(,|$)', REGEXP_INSTR(p2_sqltext, 'ORDER BY', 1, 2, 1, 'c'), 'cm') INTO l2_ic_count FROM DUAL; + END IF; + RETURN l2_ic_count; + END get_ic_count; + /**************************************************************************************/ + FUNCTION get_ep_count (p2_sqltext IN CLOB) + RETURN NUMBER + IS + l2_ep_count NUMBER := TO_NUMBER(NULL); + BEGIN + IF p2_sqltext LIKE '%/* performScanQuery(%,%) %' THEN + -- counts "greater than" (or "less than") operands + -- then computes position of first character ')' after bind reference of last "greater than" (or "less than") operand + -- returning the nunber of equality predicates on the prefix portion of the filters (i.e.: after all pagination predicates) + SELECT REGEXP_COUNT(p2_sqltext, '\(\w+ = :\d+ \)', GREATEST(REGEXP_INSTR(p2_sqltext, '( > | < ):\d+ ', 1, GREATEST(REGEXP_COUNT(p2_sqltext, '( > | < ):\d+ '), 1), 1), 1)) INTO l2_ep_count FROM DUAL; + END IF; + RETURN l2_ep_count; + END get_ep_count; + /**************************************************************************************/ +BEGIN + IF p_sqltext NOT LIKE '%/* performScanQuery(%,%) %' THEN + RETURN 'Candidacy only applies to KIEV performScanQuery'; + -- ELSIF p_sqltext LIKE '%(futureWork,resumptionTimestamp)%' + -- OR p_sqltext LIKE '%(leaseDecorators,ae_timestamp_index)%' + -- OR p_sqltext LIKE '%(WORK_PARTITIONS_BUCKET,WORK_PARTITIONS_BUCKETIdx)%' -- KIEV99A2 FLAMINGOCPDB d41w5f7gnhg2b + -- OR p_sqltext LIKE '%(LEASE,state_index)%' -- KIEV99RG IDENTITY_R1_ALPHA an1n9htmx7wss + -- THEN + -- RETURN 'Bad CANDIDATE: Known SQL, which requires a specific execution plan'; + ELSIF p_sqltext LIKE '%AND (1 = 1)%' THEN + RETURN 'Good CANDIDATE: Non-prefixed begin scan (expect a leading full index scan)'; + END IF; + -- + l_or_count := get_or_count(p2_sqltext => p_sqltext); + l_ic_count := get_ic_count(p2_sqltext => p_sqltext); + l_ep_count := get_ep_count(p2_sqltext => p_sqltext); + -- + IF l_or_count = 0 THEN + RETURN 'Good CANDIDATE: Prefixed begin scan or simple continue scan without or_operands (expect a leading range index scan)'; + ELSIF l_ic_count = l_ep_count + 1 THEN + RETURN 'Good CANDIDATE: Continue scan with: or_operands = '||TRIM(l_or_count)||', order-by_index_columns = '||TRIM(l_ic_count)||', prefixed_equality_predicates = '||TRIM(l_ep_count)||' (expect a leading range index scan)'; + ELSIF l_ep_count > 0 THEN + RETURN 'Poor Candidate: Continue scan with: or_operands = '||TRIM(l_or_count)||', order-by_index_columns = '||TRIM(l_ic_count)||', prefixed_equality_predicates = '||TRIM(l_ep_count)||' (a leading range index scan might be possible but not necessarily efficient)'; + ELSIF l_ic_count <> l_ep_count + 1 THEN + RETURN 'Bad CANDIDATE: Continue scan with: or_operands = '||TRIM(l_or_count)||', order-by_index_columns = '||TRIM(l_ic_count)||', prefixed_equality_predicates = '||TRIM(l_ep_count)||' (expect some suboptimal plan with a full scan)'; + ELSE + RETURN 'Unexpected'; + END IF; +END get_first_rows_candidacy; +/****************************************************************************************/ +awr AS ( +SELECT x.sql_id, + get_sql_hv(x.sql_text) AS sql_hv, + get_first_rows_candidacy(x.sql_text) AS first_rows_candidacy, + x.sql_text, + c.name AS pdb_name + FROM dba_hist_sqltext x, v$containers c +-- OUTER APPLY ( -- super slow! +-- SELECT v.parsing_schema_name +-- FROM dba_hist_sqlstat v +-- WHERE 1 = 1 +-- AND v.sql_id = x.sql_id +-- AND v.con_id = x.con_id +-- AND v.dbid = x.dbid +-- AND v.instance_number = TO_NUMBER('&&cs_instance_number.') +-- AND v.optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus +-- ORDER BY +-- v.snap_id DESC NULLS LAST +-- FETCH FIRST 1 ROW ONLY +-- ) v + WHERE 1 = 1 + AND TO_NUMBER('&&cs_awr_search_days.') > 0 + AND x.dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs_include_sys.' = 'Y' OR ( + x.sql_text NOT LIKE '/* SQL Analyze(%' + AND x.sql_text NOT LIKE '%/* cli_%' + AND x.sql_text NOT LIKE '%/* cs_%' + AND x.sql_text NOT LIKE '%FUNCTION application_category%' + AND x.sql_text NOT LIKE '%MATERIALIZE NO_MERGE%' + AND x.sql_text NOT LIKE '%NO_STATEMENT_QUEUING%' + AND x.sql_text NOT LIKE 'SELECT /* &&cs_script_name. */%' + )) + AND CASE + WHEN LENGTH('&&cs_search_string.') = 5 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NULL /* number */ AND TO_CHAR(get_sql_hv(x.sql_text)) = '&&cs_search_string.' THEN 1 + WHEN LENGTH('&&cs_search_string.') = 13 AND TRIM(TRANSLATE('&&cs_search_string.', ' 0123456789', ' ')) IS NOT NULL /* alpha */ AND LOWER('&&cs_search_string.') = '&&cs_search_string.' AND x.sql_id = '&&cs_search_string.' THEN 1 + WHEN UPPER(x.sql_text) LIKE UPPER('%&&cs_search_string.%') THEN 1 + END = 1 +-- AND ('&&cs_include_sys.' = 'Y' OR NVL(v.parsing_schema_name, '-666') <> 'SYS') -- super slow! + AND c.con_id = x.con_id + AND ROWNUM >= 1 -- materialize +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + CHR(10)|| + 'SQL_HV : '||sql_hv||CHR(10)|| + 'SQL_ID : '||sql_id||CHR(10)|| + 'FIRST_ROWS : '||first_rows_candidacy||CHR(10)|| + 'PDB_NAME : '||pdb_name||CHR(10)|| + CHR(10)||sql_text AS pretty_unique_name + FROM awr + ORDER BY + sql_hv, sql_id +/ +-- +SET HEA ON PAGES 100; diff --git a/csierra/cs_internal/cs_gv_sql_global.sql b/csierra/cs_internal/cs_gv_sql_global.sql new file mode 100644 index 0000000..ba2595c --- /dev/null +++ b/csierra/cs_internal/cs_gv_sql_global.sql @@ -0,0 +1,142 @@ +-- cs_gv_sql_global.sql: called by cs_planx.sql, cs_sqlperf.sql and cs_purge_cursor.sql +@@cs_sqlstat_cols.sql +@@cs_sqlstat_compute.sql +PRO +PRO SQL STATS - CURRENT BY CHILD CURSOR (gv$sql) &&cs_scope_1. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_gv_sql_global */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sql_metrics AS ( +SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + s.*, + s.elapsed_time/GREATEST(s.executions,1)/1e3 AS et_ms_per_exec, + s.cpu_time/GREATEST(s.executions,1)/1e3 AS cpu_ms_per_exec, + s.user_io_wait_time/GREATEST(s.executions,1)/1e3 AS io_ms_per_exec, + s.application_wait_time/GREATEST(s.executions,1)/1e3 AS appl_ms_per_exec, + s.concurrency_wait_time/GREATEST(s.executions,1)/1e3 AS conc_ms_per_exec, + s.plsql_exec_time/GREATEST(s.executions,1)/1e3 AS plsql_ms_per_exec, + s.cluster_wait_time/GREATEST(s.executions,1)/1e3 AS cluster_ms_per_exec, + s.java_exec_time/GREATEST(s.executions,1)/1e3 AS java_ms_per_exec, + s.executions/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS execs_per_sec, + s.px_servers_executions/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS px_execs_per_sec, + s.end_of_fetch_count/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS end_of_fetch_per_sec, + s.parse_calls/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS parses_per_sec, + s.invalidations/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS inval_per_sec, + s.loads/GREATEST(((SYSDATE - TO_DATE(REPLACE(s.last_load_time, '/', 'T'), '&&cs_datetime_full_format.')) * 24 * 3600),1) AS loads_per_sec, + s.buffer_gets/GREATEST(s.executions,1) AS gets_per_exec, + s.disk_reads/GREATEST(s.executions,1) AS reads_per_exec, + s.direct_reads/GREATEST(s.executions,1) AS direct_reads_per_exec, + s.direct_writes/GREATEST(s.executions,1) AS direct_writes_per_exec, + s.physical_read_requests/GREATEST(s.executions,1) AS phy_read_req_per_exec, + s.physical_read_bytes/GREATEST(s.executions,1)/1e6 AS phy_read_mb_per_exec, + s.physical_write_requests/GREATEST(s.executions,1) AS phy_write_req_per_exec, + s.physical_write_bytes/GREATEST(s.executions,1)/1e6 AS phy_write_mb_per_exec, + s.fetches/GREATEST(s.executions,1) AS fetches_per_exec, + s.sorts/GREATEST(s.executions,1) AS sorts_per_exec, + s.rows_processed/GREATEST(s.executions,1) AS rows_per_exec, + s.elapsed_time/GREATEST(s.rows_processed,s.executions,1)/1e3 AS et_ms_per_row, + s.cpu_time/GREATEST(s.rows_processed,s.executions,1)/1e3 AS cpu_ms_per_row, + s.user_io_wait_time/GREATEST(s.rows_processed,s.executions,1)/1e3 AS io_ms_per_row, + s.buffer_gets/GREATEST(s.rows_processed,s.executions,1) AS gets_per_row, + s.disk_reads/GREATEST(s.rows_processed,s.executions,1) AS reads_per_row, + get_sql_hv(s.sql_fulltext) AS sqlid + FROM gv$sql s + WHERE &&cs_filter_1. + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37)) + AND ROWNUM >= 1 -- materialize +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + s.last_active_time, + REPLACE(s.last_load_time, '/', 'T') AS last_load_time, + REPLACE(s.first_load_time, '/', 'T') AS first_load_time, + s.sqlid, + s.sql_id, + s.inst_id, + s.child_number, + s.plan_hash_value, + '!' AS sep1, + s.executions, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.inval_per_sec, + s.loads_per_sec, + '!' AS sep2, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '!' AS sep3, + s.gets_per_exec, + s.reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '!' AS sep4, + s.rows_per_exec, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '!' AS sep5, + s.loaded_versions AS version_count, + CASE s.is_obsolete WHEN 'Y' THEN 1 ELSE 0 END AS obsolete_count, + CASE s.is_shareable WHEN 'Y' THEN 1 ELSE 0 END AS shareable_count, + s.loads, + s.invalidations, + s.sharable_mem/1e6 AS sharable_mem_mb, + '!' AS sep8, + CASE WHEN s.sql_plan_baseline IS NOT NULL THEN 'YES' ELSE 'NO' END AS sql_bl, + CASE WHEN s.sql_profile IS NOT NULL THEN 'YES' ELSE 'NO' END AS sql_prf, + CASE WHEN s.sql_patch IS NOT NULL THEN 'YES' ELSE 'NO' END AS sql_pch, + '!' AS sep9, + s.sql_text, + s.module, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END AS pdb_or_parsing_schema_name, + s.optimizer_cost + FROM sql_metrics s + ORDER BY + s.last_active_time, + s.sqlid, + s.sql_id, + s.inst_id, + s.plan_hash_value, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END, + s.module +/ +-- +@@cs_sqlstat_clear.sql diff --git a/csierra/cs_internal/cs_gv_sql_stability.sql b/csierra/cs_internal/cs_gv_sql_stability.sql new file mode 100644 index 0000000..c69952f --- /dev/null +++ b/csierra/cs_internal/cs_gv_sql_stability.sql @@ -0,0 +1,84 @@ +-- cs_gv_sql_stability.sql: called by cs_planx.sql, cs_sqlperf.sql and cs_purge_cursor.sql +@@cs_sqlstat_cols.sql +PRO +PRO PLAN STABILITY - CURRENT BY CHILD CURSOR (gv$sql) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_gv_sql_stability */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sql_metrics AS ( +SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + s.*, + get_sql_hv(s.sql_fulltext) AS sqlid + FROM gv$sql s + WHERE &&cs_filter_1. + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37)) + AND ROWNUM >= 1 -- materialize +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + s.last_active_time, + REPLACE(s.last_load_time, '/', 'T') AS last_load_time, + REPLACE(s.first_load_time, '/', 'T') AS first_load_time, + s.sqlid, + s.sql_id, + s.inst_id, + s.child_number, + s.plan_hash_value, + s.full_plan_hash_value, + '!' AS sep1, + s.executions, + s.loaded_versions, + s.loads, + s.invalidations, + s.object_status, + '!' AS sep2, + s.is_obsolete, + s.is_shareable, + s.is_bind_sensitive, + s.is_bind_aware, + '!' AS sep3, + s.sql_plan_baseline, + CASE WHEN s.sql_plan_baseline IS NOT NULL THEN (SELECT p.created FROM dba_sql_plan_baselines p WHERE p.plan_name = s.sql_plan_baseline AND p.signature = :cs_signature AND ROWNUM = 1) END AS spbl_created, + s.sql_profile, + CASE WHEN s.sql_profile IS NOT NULL THEN (SELECT p.created FROM dba_sql_profiles p WHERE p.name = s.sql_profile AND p.signature = :cs_signature AND ROWNUM = 1) END AS sprf_created, + s.sql_patch, + CASE WHEN s.sql_patch IS NOT NULL THEN (SELECT p.created FROM dba_sql_patches p WHERE p.name = s.sql_patch AND p.signature = :cs_signature AND ROWNUM = 1) END AS spch_created, + '!' AS sep4, + s.sql_text, + s.module, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END AS pdb_or_parsing_schema_name + FROM sql_metrics s + ORDER BY + s.last_active_time, + s.sqlid, + s.sql_id, + s.inst_id, + s.plan_hash_value, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END, + s.module +/ +-- +@@cs_sqlstat_clear.sql diff --git a/csierra/cs_internal/cs_gv_sqlstat_global.sql b/csierra/cs_internal/cs_gv_sqlstat_global.sql new file mode 100644 index 0000000..638be53 --- /dev/null +++ b/csierra/cs_internal/cs_gv_sqlstat_global.sql @@ -0,0 +1,211 @@ +-- cs_gv_sqlstat_global.sql: called by cs_planx.sql and cs_sqlperf.sql +@@cs_sqlstat_cols.sql +PRO +PRO SQL STATS - CURRENT BY SQL (gv$sqlstats) since last AWR snapshot +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_gv_sqlstat_global */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + s.*, + w.age_seconds AS seconds, + w.snap_id, + w.begin_timestamp, + w.end_timestamp, + s.delta_elapsed_time/GREATEST(s.delta_execution_count,1)/1e3 AS et_ms_per_exec, + s.delta_cpu_time/GREATEST(s.delta_execution_count,1)/1e3 AS cpu_ms_per_exec, + s.delta_user_io_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS io_ms_per_exec, + s.delta_application_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS appl_ms_per_exec, + s.delta_concurrency_time/GREATEST(s.delta_execution_count,1)/1e3 AS conc_ms_per_exec, + s.delta_plsql_exec_time/GREATEST(s.delta_execution_count,1)/1e3 AS plsql_ms_per_exec, + s.delta_cluster_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS cluster_ms_per_exec, + s.delta_java_exec_time/GREATEST(s.delta_execution_count,1)/1e3 AS java_ms_per_exec, + s.delta_elapsed_time/GREATEST(w.age_seconds,1)/1e6 AS et_aas, + s.delta_cpu_time/GREATEST(w.age_seconds,1)/1e6 AS cpu_aas, + s.delta_user_io_wait_time/GREATEST(w.age_seconds,1)/1e6 AS io_aas, + s.delta_application_wait_time/GREATEST(w.age_seconds,1)/1e6 AS appl_aas, + s.delta_concurrency_time/GREATEST(w.age_seconds,1)/1e6 AS conc_aas, + s.delta_plsql_exec_time/GREATEST(w.age_seconds,1)/1e6 AS plsql_aas, + s.delta_cluster_wait_time/GREATEST(w.age_seconds,1)/1e6 AS cluster_aas, + s.delta_java_exec_time/GREATEST(w.age_seconds,1)/1e6 AS java_aas, + s.delta_execution_count/GREATEST(w.age_seconds,1) AS execs_per_sec, + s.delta_px_servers_executions/GREATEST(w.age_seconds,1) AS px_execs_per_sec, + s.delta_end_of_fetch_count/GREATEST(w.age_seconds,1) AS end_of_fetch_per_sec, + s.delta_parse_calls/GREATEST(w.age_seconds,1) AS parses_per_sec, + s.delta_invalidations/GREATEST(w.age_seconds,1) AS inval_per_sec, + s.delta_loads/GREATEST(w.age_seconds,1) AS loads_per_sec, + s.delta_buffer_gets/GREATEST(s.delta_execution_count,1) AS gets_per_exec, + s.delta_disk_reads/GREATEST(s.delta_execution_count,1) AS reads_per_exec, + s.delta_direct_reads/GREATEST(s.delta_execution_count,1) AS direct_reads_per_exec, + s.delta_direct_writes/GREATEST(s.delta_execution_count,1) AS direct_writes_per_exec, + s.delta_physical_read_requests/GREATEST(s.delta_execution_count,1) AS phy_read_req_per_exec, + s.delta_physical_read_bytes/GREATEST(s.delta_execution_count,1)/1e6 AS phy_read_mb_per_exec, + s.delta_physical_write_requests/GREATEST(s.delta_execution_count,1) AS phy_write_req_per_exec, + s.delta_physical_write_bytes/GREATEST(s.delta_execution_count,1)/1e6 AS phy_write_mb_per_exec, + s.delta_fetch_count/GREATEST(s.delta_execution_count,1) AS fetches_per_exec, + s.delta_sorts/GREATEST(s.delta_execution_count,1) AS sorts_per_exec, + s.delta_rows_processed/GREATEST(s.delta_execution_count,1) AS rows_per_exec, + s.delta_elapsed_time/GREATEST(s.delta_rows_processed,s.delta_execution_count,1)/1e3 AS et_ms_per_row, + s.delta_cpu_time/GREATEST(s.delta_rows_processed,s.delta_execution_count,1)/1e3 AS cpu_ms_per_row, + s.delta_user_io_wait_time/GREATEST(s.delta_rows_processed,s.delta_execution_count,1)/1e3 AS io_ms_per_row, + s.delta_buffer_gets/GREATEST(s.delta_rows_processed,s.delta_execution_count,1) AS gets_per_row, + s.delta_disk_reads/GREATEST(s.delta_rows_processed,s.delta_execution_count,1) AS reads_per_row, + -- s.avg_hard_parse_time, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN s.sql_text LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(s.sql_text, '\[([[:digit:]]{4})\] ') ELSE s.sql_text END),100000),5,'0') AS sqlid + get_sql_hv(s.sql_fulltext) AS sqlid + FROM gv$sqlstats s, + (SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + ((86400 * EXTRACT(DAY FROM (SYSTIMESTAMP - MAX(end_interval_time))) + (3600 * EXTRACT(HOUR FROM (systimestamp - MAX(end_interval_time)))) + (60 * EXTRACT(MINUTE FROM (systimestamp - MAX(end_interval_time)))) + EXTRACT(SECOND FROM (systimestamp - MAX(end_interval_time))))) AS age_seconds , + MAX(snap_id) + 1 AS snap_id, + MAX(end_interval_time) AS begin_timestamp, + SYSTIMESTAMP AS end_timestamp + FROM dba_hist_snapshot + WHERE end_interval_time < SYSTIMESTAMP) w + WHERE &&cs_filter_1. + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37)) + AND ROWNUM >= 1 -- materialize +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + LPAD(s.snap_id, 7, '0') AS snap_id, + -- s.day, + s.begin_timestamp, + s.end_timestamp, + s.seconds, + s.sqlid, + s.sql_id, + s.inst_id, + s.plan_hash_value, + -- s.optimizer_cost, + '!' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '!' AS sep2, + s.delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.avg_hard_parse_time, + s.inval_per_sec, + s.loads_per_sec, + '!' AS sep3, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '!' AS sep4, + s.gets_per_exec, + s.reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '!' AS sep5, + s.delta_rows_processed, + s.rows_per_exec, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '!' AS sep6, + s.delta_elapsed_time, + s.delta_cpu_time, + s.delta_user_io_wait_time, + s.delta_application_wait_time, + s.delta_concurrency_time, + s.delta_plsql_exec_time, + s.delta_cluster_wait_time, + s.delta_java_exec_time, + '!' AS sep7, + s.delta_px_servers_executions, + s.delta_end_of_fetch_count, + s.delta_parse_calls, + s.delta_buffer_gets, + s.delta_disk_reads, + s.delta_direct_writes, + s.delta_physical_read_requests, + s.delta_physical_read_bytes/1e6 AS delta_physical_read_mb, + s.delta_physical_write_requests, + s.delta_physical_write_bytes/1e6 AS delta_physical_write_mb, + s.delta_fetch_count, + s.delta_sorts, + s.delta_io_interconnect_bytes/1e6 AS delta_io_interconnect_mb, + s.delta_cell_offload_elig_bytes/1e6 AS delta_cell_offload_elig_mb, + s.delta_cell_uncompressed_bytes/1e6 AS delta_cell_uncompressed_mb, + -- s.delta_cell_offload_retrn_mb, + '!' AS sep8, + s.version_count, + -- s.obsolete_count, + s.delta_loads, + s.delta_invalidations, + s.sharable_mem/1e6 AS sharable_mem_mb, + '!' AS sep9, + s.sql_text, + v.module, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE v.parsing_schema_name END AS pdb_or_parsing_schema_name + FROM sqlstats_metrics s + OUTER APPLY ( + SELECT v.module, + v.parsing_schema_name + FROM gv$sql v + WHERE v.sql_id = s.sql_id + AND v.con_id = s.con_id + AND v.inst_id = s.inst_id + AND v.plan_hash_value = s.plan_hash_value + ORDER BY + v.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) v + ORDER BY + s.snap_id, + -- s.day, + s.begin_timestamp, + s.end_timestamp, + s.sqlid, + s.sql_id, + s.inst_id, + s.plan_hash_value, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE v.parsing_schema_name END, + v.module +/ +-- +@@cs_sqlstat_foot.sql +@@cs_sqlstat_clear.sql \ No newline at end of file diff --git a/csierra/cs_internal/cs_internal_list_dg_members.sql b/csierra/cs_internal/cs_internal_list_dg_members.sql new file mode 100644 index 0000000..ac60c06 --- /dev/null +++ b/csierra/cs_internal/cs_internal_list_dg_members.sql @@ -0,0 +1,16 @@ +SET SERVEROUT ON; +BEGIN -- using pl/sql to avoid a blank line + FOR i IN (SELECT RPAD(r.role, 13, ' ')||': '||d.db_unique_name||' HOST:'||h.host_name||CASE h.host_name WHEN '&&cs_host_name.' THEN ' <-' END AS dg_members + FROM + (SELECT x.value db_unique_name, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'DATABASE') d, + (SELECT x.value role, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'role') r, + (SELECT x.value host_name, ROW_NUMBER() OVER (ORDER BY x.indx) AS rn FROM x$drc x WHERE x.attribute = 'host') h + WHERE r.rn = d.rn AND h.rn = d.rn + ORDER BY r.role DESC, d.db_unique_name + ) + LOOP + DBMS_OUTPUT.put_line(i.dg_members); + END LOOP; +END; +/ +SET SERVEROUT OFF; \ No newline at end of file diff --git a/csierra/cs_internal/cs_internal_purge_cursor.sql b/csierra/cs_internal/cs_internal_purge_cursor.sql new file mode 100644 index 0000000..f413fcc --- /dev/null +++ b/csierra/cs_internal/cs_internal_purge_cursor.sql @@ -0,0 +1,61 @@ +DEF p_sql_id = '&1.'; +UNDEF 1; +-- purge cursor +DECLARE + l_signature NUMBER; + l_sql_text CLOB; + l_name VARCHAR2(64); +BEGIN + -- get signature and sql_text + SELECT exact_matching_signature AS signature, sql_fulltext AS sql_text INTO l_signature, l_sql_text FROM v$sql WHERE sql_id = '&&p_sql_id.' AND ROWNUM = 1; + -- backup existing pacth + FOR i IN (SELECT name FROM dba_sql_patches WHERE signature = l_signature AND category = 'DEFAULT') + LOOP + $IF DBMS_DB_VERSION.ver_le_12_1 + $THEN + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'CATEGORY', value => 'PURGE'); -- 12c + $ELSE + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'CATEGORY', attribute_value => 'PURGE'); -- 19c + $END + END LOOP; + -- create dummy patch + $IF DBMS_DB_VERSION.ver_le_12_1 + $THEN + DBMS_SQLDIAG_INTERNAL.i_create_patch(sql_text => l_sql_text, hint_text => 'NULL', name => 'PURGE_&&p_sql_id.'); -- 12c + $ELSE + l_name := DBMS_SQLDIAG.create_sql_patch(sql_text => l_sql_text, hint_text => 'NULL', name => 'PURGE_&&p_sql_id.'); -- 19c + $END + -- drop dummy patch + DBMS_SQLDIAG.drop_sql_patch(name => 'PURGE_&&p_sql_id.'); + -- restore backup patch + FOR i IN (SELECT name FROM dba_sql_patches WHERE signature = l_signature AND category = 'PURGE') + LOOP + $IF DBMS_DB_VERSION.ver_le_12_1 + $THEN + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'CATEGORY', value => 'DEFAULT'); -- 12c + $ELSE + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'CATEGORY', attribute_value => 'DEFAULT'); -- 19c + $END + END LOOP; + -- report + DBMS_OUTPUT.put_line('&&p_sql_id. purged using a transient sql patch'); +EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.put_line('&&p_sql_id. not found in v$sql'); +END; +/ +-- purge cursor +DECLARE + l_name VARCHAR2(64); +BEGIN + SELECT address||','||hash_value INTO l_name FROM v$sqlarea WHERE sql_id = '&&p_sql_id.' AND ROWNUM = 1; -- there are cases where it comes back with > 1 row!!! + SYS.DBMS_SHARED_POOL.PURGE(name => l_name, flag => 'C', heaps => 1); -- not always does the job + -- report + DBMS_OUTPUT.put_line('&&p_sql_id. purged using an api on parent cursor'); +EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.put_line('&&p_sql_id. not found in v$sqlarea'); +END; +/ +-- +UNDEF p_sql_id; \ No newline at end of file diff --git a/csierra/cs_internal/cs_last_snap.sql b/csierra/cs_internal/cs_last_snap.sql new file mode 100644 index 0000000..27bbe3c --- /dev/null +++ b/csierra/cs_internal/cs_last_snap.sql @@ -0,0 +1,20 @@ + +DEF cs_max_snap_id = ''; +COL cs_max_snap_id NEW_V cs_max_snap_id NOPRI; +DEF cs_max_snap_end_time = ''; +COL cs_max_snap_end_time NEW_V cs_max_snap_end_time NOPRI; +DEF cs_last_snap_mins = ''; +COL cs_last_snap_mins NEW_V cs_last_snap_mins NOPRI; +DEF cs_last_snap_secs = ''; +COL cs_last_snap_secs NEW_V cs_last_snap_secs NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) cs_max_snap_id, + TRIM(TO_CHAR(end_interval_time, '&&cs_datetime_full_format.')) cs_max_snap_end_time, + TRIM(TO_CHAR(ROUND((SYSDATE - CAST(end_interval_time AS DATE)) * 24 * 60, 1), '99990.0')) AS cs_last_snap_mins, + TRIM(TO_CHAR(((86400 * EXTRACT(DAY FROM (SYSTIMESTAMP - end_interval_time)) + (3600 * EXTRACT(HOUR FROM (systimestamp - end_interval_time))) + (60 * EXTRACT(MINUTE FROM (systimestamp - end_interval_time))) + EXTRACT(SECOND FROM (systimestamp - end_interval_time)))), '9999990.000')) AS cs_last_snap_secs + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ \ No newline at end of file diff --git a/csierra/cs_internal/cs_latency_hist_internal_1.sql b/csierra/cs_internal/cs_latency_hist_internal_1.sql new file mode 100644 index 0000000..93c1347 --- /dev/null +++ b/csierra/cs_internal/cs_latency_hist_internal_1.sql @@ -0,0 +1,155 @@ +-- cs_latency_hist_internal_1: used by cs_latency_hist.sql and lah.sql +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET PAGES 300 LONGC 120; +-- +DEF cs_small_format = 'HH24:MI:SS'; +-- +COL cs_dbid NEW_V cs_dbid NOPRI; +COL cs_instance_number NEW_V cs_instance_number NOPRI; +SELECT TRIM(TO_CHAR(d.dbid)) AS cs_dbid, TRIM(TO_CHAR(i.instance_number)) AS cs_instance_number + FROM v$database d, v$instance i +/ +-- +@@cs_internal/cs_last_snap.sql +-- +COL t_1_snap_id NEW_V t_1_snap_id NOPRI; +COL t_1_snap_begin NEW_V t_1_snap_begin NOPRI; +COL t_1_snap_end NEW_V t_1_snap_end NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) AS t_1_snap_id, + TRIM(TO_CHAR(begin_interval_time, '&&cs_small_format.')) AS t_1_snap_begin, + TRIM(TO_CHAR(end_interval_time, '&&cs_small_format.')) AS t_1_snap_end + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +-- +COL t_0_snap_begin NEW_V t_0_snap_begin NOPRI; +COL t_0_snap_end NEW_V t_0_snap_end NOPRI; +SELECT '&&t_1_snap_end.' AS t_0_snap_begin, + TO_CHAR(SYSDATE, '&&cs_small_format.') AS t_0_snap_end + FROM DUAL +/ +-- +COL t_2_snap_id NEW_V t_2_snap_id NOPRI; +COL t_2_snap_begin NEW_V t_2_snap_begin NOPRI; +COL t_2_snap_end NEW_V t_2_snap_end NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) AS t_2_snap_id, + TRIM(TO_CHAR(begin_interval_time, '&&cs_small_format.')) AS t_2_snap_begin, + TRIM(TO_CHAR(end_interval_time, '&&cs_small_format.')) AS t_2_snap_end + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id < TO_NUMBER('&&t_1_snap_id.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +-- +COL t_3_snap_id NEW_V t_3_snap_id NOPRI; +COL t_3_snap_begin NEW_V t_3_snap_begin NOPRI; +COL t_3_snap_end NEW_V t_3_snap_end NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) AS t_3_snap_id, + TRIM(TO_CHAR(begin_interval_time, '&&cs_small_format.')) AS t_3_snap_begin, + TRIM(TO_CHAR(end_interval_time, '&&cs_small_format.')) AS t_3_snap_end + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id < TO_NUMBER('&&t_2_snap_id.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +-- +COL t_4_snap_id NEW_V t_4_snap_id NOPRI; +COL t_4_snap_begin NEW_V t_4_snap_begin NOPRI; +COL t_4_snap_end NEW_V t_4_snap_end NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) AS t_4_snap_id, + TRIM(TO_CHAR(begin_interval_time, '&&cs_small_format.')) AS t_4_snap_begin, + TRIM(TO_CHAR(end_interval_time, '&&cs_small_format.')) AS t_4_snap_end + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id < TO_NUMBER('&&t_3_snap_id.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +-- +COL t_5_snap_id NEW_V t_5_snap_id NOPRI; +COL t_5_snap_begin NEW_V t_5_snap_begin NOPRI; +COL t_5_snap_end NEW_V t_5_snap_end NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) AS t_5_snap_id, + TRIM(TO_CHAR(begin_interval_time, '&&cs_small_format.')) AS t_5_snap_begin, + TRIM(TO_CHAR(end_interval_time, '&&cs_small_format.')) AS t_5_snap_end + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id < TO_NUMBER('&&t_4_snap_id.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +-- +COL t_6_snap_id NEW_V t_6_snap_id NOPRI; +COL t_6_snap_begin NEW_V t_6_snap_begin NOPRI; +COL t_6_snap_end NEW_V t_6_snap_end NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) AS t_6_snap_id, + TRIM(TO_CHAR(begin_interval_time, '&&cs_small_format.')) AS t_6_snap_begin, + TRIM(TO_CHAR(end_interval_time, '&&cs_small_format.')) AS t_6_snap_end + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id < TO_NUMBER('&&t_5_snap_id.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +-- +COL t_7_snap_id NEW_V t_7_snap_id NOPRI; +COL t_7_snap_begin NEW_V t_7_snap_begin NOPRI; +COL t_7_snap_end NEW_V t_7_snap_end NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) AS t_7_snap_id, + TRIM(TO_CHAR(begin_interval_time, '&&cs_small_format.')) AS t_7_snap_begin, + TRIM(TO_CHAR(end_interval_time, '&&cs_small_format.')) AS t_7_snap_end + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id < TO_NUMBER('&&t_6_snap_id.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +-- +COL t_8_snap_id NEW_V t_8_snap_id NOPRI; +COL t_8_snap_begin NEW_V t_8_snap_begin NOPRI; +COL t_8_snap_end NEW_V t_8_snap_end NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) AS t_8_snap_id, + TRIM(TO_CHAR(begin_interval_time, '&&cs_small_format.')) AS t_8_snap_begin, + TRIM(TO_CHAR(end_interval_time, '&&cs_small_format.')) AS t_8_snap_end + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id < TO_NUMBER('&&t_7_snap_id.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +-- +COL t_9_snap_id NEW_V t_9_snap_id NOPRI; +COL t_9_snap_begin NEW_V t_9_snap_begin NOPRI; +COL t_9_snap_end NEW_V t_9_snap_end NOPRI; +SELECT TRIM(TO_CHAR(snap_id)) AS t_9_snap_id, + TRIM(TO_CHAR(begin_interval_time, '&&cs_small_format.')) AS t_9_snap_begin, + TRIM(TO_CHAR(end_interval_time, '&&cs_small_format.')) AS t_9_snap_end + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id < TO_NUMBER('&&t_8_snap_id.') + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +-- diff --git a/csierra/cs_internal/cs_latency_hist_internal_2.sql b/csierra/cs_internal/cs_latency_hist_internal_2.sql new file mode 100644 index 0000000..a003e50 --- /dev/null +++ b/csierra/cs_internal/cs_latency_hist_internal_2.sql @@ -0,0 +1,452 @@ +-- cs_latency_hist_internal_2.sql: called by lah.sql and cs_latency_hist.sql +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET PAGES 300 LONGC 120; +-- +COL type FOR A2 HEA 'Ty'; +COL t_9_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_9_snap_begin.-|&&t_9_snap_end.)'; +COL t_8_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_8_snap_begin.-|&&t_8_snap_end.)'; +COL t_7_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_7_snap_begin.-|&&t_7_snap_end.)'; +COL t_6_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_6_snap_begin.-|&&t_6_snap_end.)'; +COL t_5_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_5_snap_begin.-|&&t_5_snap_end.)'; +COL t_4_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_4_snap_begin.-|&&t_4_snap_end.)'; +COL t_3_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_3_snap_begin.-|&&t_3_snap_end.)'; +COL t_2_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_2_snap_begin.-|&&t_2_snap_end.)'; +COL t_1_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_1_snap_begin.-|&&t_1_snap_end.)'; +COL t_0_cpu_ms_per_exec FOR A10 HEA 'CPU ms p/e|(&&t_0_snap_begin.-|&&t_0_snap_end.)'; +COL execs FOR 999,990 HEA 'Executions|(&&t_0_snap_begin.-|&&t_0_snap_end.)'; +COL sql_text FOR A60 TRUNC; +COL pdb_name FOR A28 TRUNC; +COL plan_hash_value FOR 9999999999 HEA 'Plan Hash'; +COL has_baseline FOR A2 HEA 'BL'; +COL has_profile FOR A2 HEA 'PR'; +COL has_patch FOR A2 HEA 'PA'; +COL regression FOR 999,990 HEA 'Regress|Perc %'; +COL sqlid FOR A5 HEA 'SQL|HV'; +-- +BREAK ON type SKIP PAGE DUPL; +-- +PRO +PRO CPU Latency - TOP &&cs_top. SQL for each Type (as per last &&cs_last_snap_mins. minutes and compared to recent AWR snapshots) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqlstats AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.con_id, + application_category(s.sql_text, /*v.command_name*/ 'UNKNOWN') AS type, -- passing UNKNOWN else KIEV envs would show a lot of unrelated SQL under RO + s.delta_elapsed_time/GREATEST(s.delta_execution_count,1)/1e3 AS et_ms_per_exec, + s.delta_cpu_time/GREATEST(s.delta_execution_count,1)/1e3 AS cpu_ms_per_exec, + s.delta_user_io_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS io_ms_per_exec, + s.delta_application_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS appl_ms_per_exec, + s.delta_concurrency_time/GREATEST(s.delta_execution_count,1)/1e3 AS conc_ms_per_exec, + s.delta_execution_count AS execs, + s.delta_rows_processed/GREATEST(s.delta_execution_count,1) AS rows_per_exec, + s.delta_buffer_gets/GREATEST(s.delta_execution_count,1) AS gets_per_exec, + s.delta_disk_reads/GREATEST(s.delta_execution_count,1) AS reads_per_exec, + s.delta_direct_writes/GREATEST(s.delta_execution_count,1) AS writes_per_exec, + s.delta_fetch_count/GREATEST(s.delta_execution_count,1) AS fetches_per_exec, + s.sql_id, + s.sql_text, + s.sql_fulltext, + s.plan_hash_value, + s.last_active_child_address + FROM v$sqlstats s + WHERE s.delta_elapsed_time > 0 + AND ROWNUM >= 1 +), +sqlstats_extended AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.type, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.execs, + s.rows_per_exec, + s.gets_per_exec, + s.reads_per_exec, + s.writes_per_exec, + s.fetches_per_exec, + s.sql_id, + s.sql_text, + s.sql_fulltext, + s.plan_hash_value, + s.last_active_child_address, + s.con_id, + c.name pdb_name, + ROW_NUMBER() OVER (PARTITION BY s.type ORDER BY s.cpu_ms_per_exec DESC) row_number + FROM sqlstats s, + v$containers c + WHERE s.type IN ('TP', 'RO', 'BG', 'UN') + AND c.con_id = s.con_id + AND ROWNUM >= 1 +), +sqlstats_current AS ( +SELECT CASE s.type WHEN 'TP' THEN 1 WHEN 'RO' THEN 2 WHEN 'BG' THEN 3 WHEN 'UN' THEN 4 ELSE 5 END AS type_order_by, + s.type, + s.row_number, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.execs, + s.rows_per_exec, + s.gets_per_exec, + s.reads_per_exec, + s.sql_id, + s.plan_hash_value, + v.has_baseline, + v.has_profile, + v.has_patch, + s.sql_text, + s.sql_fulltext, + s.con_id, + s.pdb_name + FROM sqlstats_extended s + CROSS APPLY ( + SELECT CASE WHEN v.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN v.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN v.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch + FROM v$sql v + WHERE s.plan_hash_value > 0 + AND v.sql_id = s.sql_id + AND v.con_id = s.con_id + AND v.plan_hash_value = s.plan_hash_value + AND v.child_address = s.last_active_child_address + ORDER BY + v.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) v + WHERE s.row_number <= &&cs_top. + AND ROWNUM >= 1 +), +sqlstats_hist AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sql_id, + h.snap_id, + SUM(h.elapsed_time_delta)/GREATEST(SUM(h.executions_delta),1)/1e3 AS et_ms_per_exec, + SUM(h.cpu_time_delta)/GREATEST(SUM(h.executions_delta),1)/1e3 AS cpu_ms_per_exec, + SUM(h.iowait_delta)/GREATEST(SUM(h.executions_delta),1)/1e3 AS io_ms_per_exec, + SUM(h.apwait_delta)/GREATEST(SUM(h.executions_delta),1)/1e3 AS appl_ms_per_exec, + SUM(h.ccwait_delta)/GREATEST(SUM(h.executions_delta),1)/1e3 AS conc_ms_per_exec, + SUM(h.executions_delta) AS execs, + SUM(h.rows_processed_delta)/GREATEST(SUM(h.executions_delta),1) AS rows_per_exec, + SUM(h.buffer_gets_delta)/GREATEST(SUM(h.executions_delta),1) AS gets_per_exec, + SUM(h.disk_reads_delta)/GREATEST(SUM(h.executions_delta),1) AS reads_per_exec, + SUM(h.fetches_delta)/GREATEST(SUM(h.executions_delta),1) AS fetches_per_exec, + MAX(SUM(h.cpu_time_delta)/GREATEST(SUM(h.executions_delta),1)/1e3) OVER (PARTITION BY h.con_id, h.sql_id) AS max_cpu_ms_per_exec + FROM dba_hist_sqlstat h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&t_9_snap_id.') AND TO_NUMBER('&&t_1_snap_id.') + AND (h.con_id, h.sql_id) IN (SELECT con_id, sql_id FROM sqlstats_current) + AND h.optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + AND ROWNUM >= 1 + GROUP BY + h.con_id, + h.sql_id, + h.snap_id +) +SELECT c.type, + LPAD(CASE WHEN t_9.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(t_9.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_9_cpu_ms_per_exec, + LPAD(CASE WHEN t_8.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(t_8.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_8_cpu_ms_per_exec, + LPAD(CASE WHEN t_7.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(t_7.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_7_cpu_ms_per_exec, + LPAD(CASE WHEN t_6.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(t_6.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_6_cpu_ms_per_exec, + LPAD(CASE WHEN t_5.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(t_5.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_5_cpu_ms_per_exec, + LPAD(CASE WHEN t_4.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(t_4.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_4_cpu_ms_per_exec, + LPAD(CASE WHEN t_3.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(t_3.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_3_cpu_ms_per_exec, + LPAD(CASE WHEN t_2.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(t_2.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_2_cpu_ms_per_exec, + LPAD(CASE WHEN t_1.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(t_1.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_1_cpu_ms_per_exec, + '|' AS "|", + LPAD(CASE WHEN c.cpu_ms_per_exec IS NULL THEN '-' ELSE TO_CHAR(c.cpu_ms_per_exec, '9,999,990') END, 10, ' ') AS t_0_cpu_ms_per_exec, + c.execs, + CASE WHEN c.cpu_ms_per_exec > 1.1 * t_1.max_cpu_ms_per_exec THEN 100 * ((c.cpu_ms_per_exec / t_1.max_cpu_ms_per_exec) - 1) END AS regression, + c.sql_id, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN c.sql_fulltext LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(c.sql_fulltext, '\[([[:digit:]]{4})\] ') ELSE c.sql_fulltext END),100000),5,'0') AS sqlid, + get_sql_hv(c.sql_fulltext) AS sqlid, + c.plan_hash_value, + c.has_baseline, + c.has_profile, + c.has_patch, + c.sql_text, + c.pdb_name + FROM sqlstats_current c, + sqlstats_hist t_1, + sqlstats_hist t_2, + sqlstats_hist t_3, + sqlstats_hist t_4, + sqlstats_hist t_5, + sqlstats_hist t_6, + sqlstats_hist t_7, + sqlstats_hist t_8, + sqlstats_hist t_9 + WHERE 1 = 1 + AND t_1.con_id(+) = c.con_id AND t_1.sql_id(+) = c.sql_id AND t_1.snap_id(+) = TO_NUMBER('&&t_1_snap_id.') + AND t_2.con_id(+) = c.con_id AND t_2.sql_id(+) = c.sql_id AND t_2.snap_id(+) = TO_NUMBER('&&t_2_snap_id.') + AND t_3.con_id(+) = c.con_id AND t_3.sql_id(+) = c.sql_id AND t_3.snap_id(+) = TO_NUMBER('&&t_3_snap_id.') + AND t_4.con_id(+) = c.con_id AND t_4.sql_id(+) = c.sql_id AND t_4.snap_id(+) = TO_NUMBER('&&t_4_snap_id.') + AND t_5.con_id(+) = c.con_id AND t_5.sql_id(+) = c.sql_id AND t_5.snap_id(+) = TO_NUMBER('&&t_5_snap_id.') + AND t_6.con_id(+) = c.con_id AND t_6.sql_id(+) = c.sql_id AND t_6.snap_id(+) = TO_NUMBER('&&t_6_snap_id.') + AND t_7.con_id(+) = c.con_id AND t_7.sql_id(+) = c.sql_id AND t_7.snap_id(+) = TO_NUMBER('&&t_7_snap_id.') + AND t_8.con_id(+) = c.con_id AND t_8.sql_id(+) = c.sql_id AND t_8.snap_id(+) = TO_NUMBER('&&t_8_snap_id.') + AND t_9.con_id(+) = c.con_id AND t_9.sql_id(+) = c.sql_id AND t_9.snap_id(+) = TO_NUMBER('&&t_9_snap_id.') + ORDER BY + c.type_order_by, + c.row_number +/ +PRO +PRO Regress Perc %: When current CPU latency versus maximum latency from recent history is over 10% (regressions of < 10% are excluded) +-- +-- CLEAR BREAK; diff --git a/csierra/cs_internal/cs_latency_internal_cols.sql b/csierra/cs_internal/cs_latency_internal_cols.sql new file mode 100644 index 0000000..f17a3d3 --- /dev/null +++ b/csierra/cs_internal/cs_latency_internal_cols.sql @@ -0,0 +1,69 @@ +-- +COL sql_type FOR A4 HEA 'SQL|Type'; +COL latency_rn FOR 990 HEA 'Lat|Top|#' NOPRINT; +COL load_rn FOR 9990 HEA 'Load|Top|#' NOPRINT; +COL et_ms_per_exec FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Exec'; +COL cpu_ms_per_exec FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Exec'; +COL io_ms_per_exec FOR 99,999,990.000 HEA 'I/O|Latency(ms)|Per Exec'; +COL appl_ms_per_exec FOR 999,990.000 HEA 'Appl|Latency(ms)|Per Exec' &&cs_uncommon_col.; +COL conc_ms_per_exec FOR 999,990.000 HEA 'Conc|Latency(ms)|Per Exec' &&cs_uncommon_col.; +COL plsql_ms_per_exec FOR 999,990.000 HEA 'PL/SQL|Latency(ms)|Per Exec' &&cs_uncommon_col.; +COL cluster_ms_per_exec FOR 999,990.000 HEA 'Cluster|Latency(ms)|Per Exec' &&cs_uncommon_col.; +COL java_ms_per_exec FOR 999,990.000 HEA 'Java|Latency(ms)|Per Exec' &&cs_uncommon_col.; +COL et_aas FOR 9,990.000 HEA 'DB|Load(aas)'; +COL cpu_aas FOR 9,990.000 HEA 'CPU|Load(aas)'; +COL io_aas FOR 9,990.000 HEA 'I/O|Load(aas)'; +COL appl_aas FOR 9,990.000 HEA 'Appl|Load(aas)' &&cs_uncommon_col.; +COL conc_aas FOR 9,990.000 HEA 'Conc|Load(aas)' &&cs_uncommon_col.; +COL plsql_aas FOR 9,990.000 HEA 'PL/SQL|Load(aas)' &&cs_uncommon_col.; +COL cluster_aas FOR 9,990.000 HEA 'Cluster|Load(aas)' &&cs_uncommon_col.; +COL java_aas FOR 9,990.000 HEA 'Java|Load(aas)' &&cs_uncommon_col.; +COL delta_execution_count FOR 999,999,999,990 HEA 'Executions|delta for|&&cs_execs_delta_h.'; +COL execs_per_sec FOR 99,990.000 HEA 'Executions|Per Sec'; +COL px_execs_per_sec FOR 99,990.000 HEA 'PX Execs|Per Sec' &&cs_uncommon_col.; +COL end_of_fetch_per_sec FOR 99,990.000 HEA 'End of|Fetch|Per Sec' &&cs_uncommon_col.; +COL parses_per_sec FOR 99,990.000 HEA 'Parses|Per Sec' &&cs_uncommon_col.; +COL avg_hard_parse_time FOR 9,999,990 HEA 'Avg|Hard Parse|Time(us)' &&cs_uncommon_col.; +COL inval_per_sec FOR 99,990.000 HEA 'Inval|Per Sec' &&cs_uncommon_col.; +COL loads_per_sec FOR 99,990.000 HEA 'Loads|Per Sec' &&cs_uncommon_col.; +COL gets_per_exec FOR 999,999,990 HEA 'Buffer|Gets|Per Exec'; +COL reads_per_exec FOR 999,999,990 HEA 'Disk|Reads|Per Exec'; +COL direct_reads_per_exec FOR 9,999,990 HEA 'Direct|Reads|Per Exec' &&cs_uncommon_col.; +COL direct_writes_per_exec FOR 9,999,990 HEA 'Direct|Writes|Per Exec' &&cs_uncommon_col.; +COL phy_read_req_per_exec FOR 999,990 HEA 'Physical|Read Reqs|Per Exec' &&cs_uncommon_col.; +COL phy_read_mb_per_exec FOR 999,990.000 HEA 'Physical|Read MB|Per Exec'; +COL phy_write_req_per_exec FOR 999,990 HEA 'Physical|Write Reqs|Per Exec' &&cs_uncommon_col.; +COL phy_write_mb_per_exec FOR 999,990.000 HEA 'Physical|Write MB|Per Exec'; +COL fetches_per_exec FOR 999,990 HEA 'Fetches|Per Exec' &&cs_uncommon_col.; +COL sorts_per_exec FOR 999,990 HEA 'Sorts|Per Exec' &&cs_uncommon_col.; +COL delta_rows_processed FOR 999,999,999,999,990 HEA 'Rows Processed|delta for|&&cs_execs_delta_h.'; +COL rows_per_exec FOR 999,999,990.000 HEA 'Rows Processed|Per Exec'; +COL et_ms_per_row FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Row Proc'; +COL cpu_ms_per_row FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Row Proc'; +COL io_ms_per_row FOR 99,999,990.000 HEA 'I/O|Latency(ms)|Per Row Proc'; +COL gets_per_row FOR 999,999,990 HEA 'Buffer|Gets|Per Row Proc'; +COL reads_per_row FOR 999,999,990 HEA 'Disk|Reads|Per Row Proc'; +COL sql_text FOR A90 HEA 'SQL Text' TRUNC; +COL pdb_or_parsing_schema_name FOR A30 HEA 'PDB or Parsing Schema Name' TRUNC; +COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash|Value'; +COL has_baseline FOR A2 HEA 'BL'; +COL has_profile FOR A2 HEA 'PR'; +COL has_patch FOR A2 HEA 'PA'; +COL sqlid FOR A5 HEA 'SQL|HV'; +COL sql_hv FOR A5 HEA 'SQL|HV'; +COL sql_len FOR 999,990 HEA 'SQL|Length'; +COL begin_timestamp FOR A23 HEA 'Begin Timestamp' &&cs_uncommon_col.; +COL end_timestamp FOR A23 HEA 'End Timestamp' &&cs_uncommon_col.; +COL seconds FOR 9,999,990 HEA 'Seconds' &&cs_uncommon_col.; +COL num_rows FOR 9,999,999,990 HEA 'Table|Rows'; +COL blocks FOR 999,999,990 HEA 'Table|Blocks'; +COL sep0 FOR A2 HEA '+|!|!|!' PRI; +COL sep1 FOR A1 HEA '+|!|!|!' PRI; +COL sep2 FOR A1 HEA '+|!|!|!' PRI; +COL sep3 FOR A1 HEA '+|!|!|!' PRI; +COL sep4 FOR A1 HEA '+|!|!|!' PRI; +COL sep5 FOR A1 HEA '+|!|!|!' PRI; +COL sep6 FOR A1 HEA '+|!|!|!' PRI; +-- +BREAK ON sql_type SKIP PAGE DUPL; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_latency_internal_foot.sql b/csierra/cs_internal/cs_latency_internal_foot.sql new file mode 100644 index 0000000..a22b92f --- /dev/null +++ b/csierra/cs_internal/cs_latency_internal_foot.sql @@ -0,0 +1,8 @@ +PRO +PRO 1. Top &&cs_top_latency. active SQL per SQL Type as per DB Latency (iff DB AAS > &&cs_aas_threshold_latency.) UNION Top &&cs_top_load. active SQL per SQL Type as per DB Load (iff DB AAS > &&cs_aas_threshold_load.) ordered by DB Latency descending. +PRO 2. Includes only SQL with DB Latency > &&cs_ms_threshold_latency. milliseconds per execution, and which has been active recently. +PRO 3. For an extended output use le.sql (cs_latency_extended.sql). For a reduced output use l.sql (cs_latency.sql). For a reduced output without a report heading use la.sql. +PRO 4. For a time range use lr.sql (cs_latency_range.sql) OR lre.sql (cs_latency_range_extended.sql), both from AWR (15m granularity); or cs_latency_range_iod.sql and cs_latency_range_iod_extended.sql, both from IOD table (1m granularity). +PRO 5. For the last 1 minute use cs_latency_1m.sql OR cs_latency_1m_extended.sql. +PRO 6. For an interval of N seconds use cs_latency_snapshot.sql or cs_latency_snapshot_extended.sql. +PRO \ No newline at end of file diff --git a/csierra/cs_internal/cs_latency_internal_query_1.sql b/csierra/cs_internal/cs_latency_internal_query_1.sql new file mode 100644 index 0000000..0669d06 --- /dev/null +++ b/csierra/cs_internal/cs_latency_internal_query_1.sql @@ -0,0 +1,480 @@ +-- cs_latency_internal_query_1.sql: called by cs_latency.sql and cs_latency_extended.sql +PRO +PRO TOP active SQL as per DB Latency (and DB Load) v$sqlstats as per last &&cs_last_snap_mins. minutes +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION /* cs_latency_internal_query_1 */ application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqlstats AS ( +SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + s.con_id, + application_category(s.sql_text, /*v.command_name*/ 'UNKNOWN') AS sql_type, -- passing UNKNOWN else KIEV envs would show a lot of unrelated SQL under RO + s.delta_elapsed_time/GREATEST(s.delta_execution_count,1)/1e3 AS et_ms_per_exec, + s.delta_cpu_time/GREATEST(s.delta_execution_count,1)/1e3 AS cpu_ms_per_exec, + s.delta_user_io_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS io_ms_per_exec, + s.delta_application_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS appl_ms_per_exec, + s.delta_concurrency_time/GREATEST(s.delta_execution_count,1)/1e3 AS conc_ms_per_exec, + s.delta_plsql_exec_time/GREATEST(s.delta_execution_count,1)/1e3 AS plsql_ms_per_exec, + s.delta_cluster_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS cluster_ms_per_exec, + s.delta_java_exec_time/GREATEST(s.delta_execution_count,1)/1e3 AS java_ms_per_exec, + s.delta_elapsed_time/GREATEST(w.age_seconds,1)/1e6 AS et_aas, + s.delta_cpu_time/GREATEST(w.age_seconds,1)/1e6 AS cpu_aas, + s.delta_user_io_wait_time/GREATEST(w.age_seconds,1)/1e6 AS io_aas, + s.delta_application_wait_time/GREATEST(w.age_seconds,1)/1e6 AS appl_aas, + s.delta_concurrency_time/GREATEST(w.age_seconds,1)/1e6 AS conc_aas, + s.delta_plsql_exec_time/GREATEST(w.age_seconds,1)/1e6 AS plsql_aas, + s.delta_cluster_wait_time/GREATEST(w.age_seconds,1)/1e6 AS cluster_aas, + s.delta_java_exec_time/GREATEST(w.age_seconds,1)/1e6 AS java_aas, + s.delta_execution_count AS delta_execution_count, + s.delta_execution_count/GREATEST(w.age_seconds,1) AS execs_per_sec, + s.delta_px_servers_executions/GREATEST(w.age_seconds,1) AS px_execs_per_sec, + s.delta_end_of_fetch_count/GREATEST(w.age_seconds,1) AS end_of_fetch_per_sec, + s.delta_parse_calls/GREATEST(w.age_seconds,1) AS parses_per_sec, + s.delta_invalidations/GREATEST(w.age_seconds,1) AS inval_per_sec, + s.delta_loads/GREATEST(w.age_seconds,1) AS loads_per_sec, + s.delta_buffer_gets/GREATEST(s.delta_execution_count,1) AS gets_per_exec, + s.delta_disk_reads/GREATEST(s.delta_execution_count,1) AS reads_per_exec, + s.delta_direct_reads/GREATEST(s.delta_execution_count,1) AS direct_reads_per_exec, + s.delta_direct_writes/GREATEST(s.delta_execution_count,1) AS direct_writes_per_exec, + s.delta_physical_read_requests/GREATEST(s.delta_execution_count,1) AS phy_read_req_per_exec, + s.delta_physical_read_bytes/GREATEST(s.delta_execution_count,1)/1e6 AS phy_read_mb_per_exec, + s.delta_physical_write_requests/GREATEST(s.delta_execution_count,1) AS phy_write_req_per_exec, + s.delta_physical_write_bytes/GREATEST(s.delta_execution_count,1)/1e6 AS phy_write_mb_per_exec, + s.delta_fetch_count/GREATEST(s.delta_execution_count,1) AS fetches_per_exec, + s.delta_sorts/GREATEST(s.delta_execution_count,1) AS sorts_per_exec, + s.delta_rows_processed, + s.delta_rows_processed/GREATEST(s.delta_execution_count,1) AS rows_per_exec, + s.delta_elapsed_time/GREATEST(s.delta_rows_processed,s.delta_execution_count,1)/1e3 AS et_ms_per_row, + s.delta_cpu_time/GREATEST(s.delta_rows_processed,s.delta_execution_count,1)/1e3 AS cpu_ms_per_row, + s.delta_user_io_wait_time/GREATEST(s.delta_rows_processed,s.delta_execution_count,1)/1e3 AS io_ms_per_row, + s.delta_buffer_gets/GREATEST(s.delta_rows_processed,s.delta_execution_count,1) AS gets_per_row, + s.delta_disk_reads/GREATEST(s.delta_rows_processed,s.delta_execution_count,1) AS reads_per_row, + s.avg_hard_parse_time, + s.sql_id, + -- s.sql_text, + DBMS_LOB.substr(REGEXP_SUBSTR(s.sql_fulltext, '.*$', 1, 1, 'm'), 1000) AS sql_text, + s.sql_fulltext, + s.plan_hash_value, + s.last_active_child_address + FROM v$sqlstats s, + (SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + ((86400 * EXTRACT(DAY FROM (SYSTIMESTAMP - MAX(end_interval_time))) + (3600 * EXTRACT(HOUR FROM (systimestamp - MAX(end_interval_time)))) + (60 * EXTRACT(MINUTE FROM (systimestamp - MAX(end_interval_time)))) + EXTRACT(SECOND FROM (systimestamp - MAX(end_interval_time))))) AS age_seconds + FROM dba_hist_snapshot + WHERE end_interval_time < SYSTIMESTAMP) w + WHERE s.last_active_time > SYSDATE - (1/24/60) -- select only sql that has been active during the last 1 minute + AND s.delta_elapsed_time > 0 -- select only sql that has reported time since las awr + AND s.delta_elapsed_time/GREATEST(w.age_seconds,1)/1e6 /*et_aas*/ >= LEAST(&&cs_aas_threshold_latency., &&cs_aas_threshold_load.) -- select only sql that generates some db load + AND s.delta_elapsed_time/GREATEST(s.delta_execution_count,1)/1e3 /*et_ms_per_exec*/ >= &&cs_ms_threshold_latency. + AND ROWNUM >= 1 -- materialize +), +sqlstats_extended AS ( +SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + s.sql_type, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + s.delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.avg_hard_parse_time, + s.inval_per_sec, + s.loads_per_sec, + s.gets_per_exec, + s.reads_per_exec, + -- s.direct_reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + s.delta_rows_processed, + s.rows_per_exec, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + s.sql_id, + s.sql_text, + s.sql_fulltext, + s.plan_hash_value, + s.last_active_child_address, + s.con_id, + c.name AS pdb_name, + ROW_NUMBER() OVER (PARTITION BY s.sql_type ORDER BY s.et_ms_per_exec DESC) AS latency_rn, -- top sql as per db latency + ROW_NUMBER() OVER (PARTITION BY s.sql_type ORDER BY s.et_aas DESC) AS load_rn -- top sql as per db load + FROM sqlstats s, + v$containers c + WHERE c.con_id = s.con_id + AND ROWNUM >= 1 +) +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + CASE WHEN v.parsing_schema_name = 'SYS' THEN 'SYS' ELSE s.sql_type END AS sql_type, + s.latency_rn, + s.load_rn, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '|' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '|' AS sep2, + s.delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.avg_hard_parse_time, + s.inval_per_sec, + s.loads_per_sec, + '|' AS sep3, + s.gets_per_exec, + s.reads_per_exec, + -- s.direct_reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '|' AS sep4, + s.delta_rows_processed, + s.rows_per_exec, + '|' AS sep5, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '|' AS sep6, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN s.sql_fulltext LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(s.sql_fulltext, '\[([[:digit:]]{4})\] ') ELSE s.sql_fulltext END),100000),5,'0') AS sqlid, + get_sql_hv(s.sql_fulltext) AS sqlid, + s.sql_id, + s.plan_hash_value, + v.has_baseline, + v.has_profile, + v.has_patch, + s.sql_text, + CASE '&&cs_con_name.' WHEN 'CDB$ROOT' THEN s.pdb_name ELSE v.parsing_schema_name END AS pdb_or_parsing_schema_name, + t.num_rows, + t.blocks + FROM sqlstats_extended s + OUTER APPLY ( + SELECT CASE WHEN v.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN v.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN v.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch, + v.parsing_schema_name, + v.hash_value, + v.address + FROM v$sql v + WHERE v.sql_id = s.sql_id + AND v.con_id = s.con_id + AND v.plan_hash_value = s.plan_hash_value + AND v.child_address = s.last_active_child_address + ORDER BY + v.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) v + OUTER APPLY ( -- only works when executed within a PDB + SELECT t.num_rows, t.blocks + FROM v$object_dependency d, dba_users u, dba_tables t + WHERE d.from_hash = v.hash_value + AND d.from_address = v.address + AND d.to_type = 2 -- table + AND d.to_owner <> 'SYS' + AND d.con_id = s.con_id + AND u.username = d.to_owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND t.owner = d.to_owner + AND t.table_name = d.to_name + ORDER BY + t.num_rows DESC NULLS LAST + FETCH FIRST 1 ROW ONLY + ) t + WHERE 1 = 1 + AND ((s.latency_rn <= &&cs_top_latency. AND s.et_aas >= &&cs_aas_threshold_latency.) OR (s.load_rn <= &&cs_top_load. AND s.et_aas >= &&cs_aas_threshold_load.)) + AND s.et_ms_per_exec >= &&cs_ms_threshold_latency. + ORDER BY + CASE WHEN v.parsing_schema_name = 'SYS' THEN 6 WHEN s.sql_type = 'TP' THEN 1 WHEN s.sql_type = 'RO' THEN 2 WHEN s.sql_type = 'BG' THEN 3 WHEN s.sql_type = 'UN' THEN 4 WHEN s.sql_type = 'IG' THEN 5 ELSE 9 END, + -- s.latency_rn + s.et_ms_per_exec DESC +/ diff --git a/csierra/cs_internal/cs_latency_internal_query_4.sql b/csierra/cs_internal/cs_latency_internal_query_4.sql new file mode 100644 index 0000000..8a25265 --- /dev/null +++ b/csierra/cs_internal/cs_latency_internal_query_4.sql @@ -0,0 +1,576 @@ +-- cs_latency_internal_query_4.sql: called by cs_latency_range.sql and cs_latency_range_extended.sql +PRO +PRO TOP active SQL as per DB Latency (and DB Load) dba_hist_sqlstat between &&cs_begin_date_from. and &&cs_end_date_to. (&&cs_begin_end_seconds seconds) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_latency_internal_query_4 */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqltext_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqltext_mv) */ + dbid, + con_id, + sql_id, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN sql_text LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(sql_text, '\[([[:digit:]]{4})\] ') ELSE sql_text END),100000),5,'0') AS sqlid, + get_sql_hv(sql_text) AS sqlid, + application_category(DBMS_LOB.substr(sql_text, 1000), 'UNKNOWN') AS sql_type, -- passing UNKNOWN else KIEV envs would show a lot of unrelated SQL under RO + -- REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 1000), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text, + DBMS_LOB.substr(REGEXP_SUBSTR(sql_text, '.*$', 1, 1, 'm'), 1000) AS sql_text, + sql_text AS sql_fulltext + FROM dba_hist_sqltext + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND ROWNUM >= 1 +), +/****************************************************************************************/ +snapshot_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(snapshot_mv) */ + s.* + FROM dba_hist_snapshot s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND s.end_interval_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND s.end_interval_time <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlstats_mv) */ + s.* + FROM dba_hist_sqlstat s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND s.optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT /*+ MATERIALIZE(@sqltext_mv) MATERIALIZE(@snapshot_mv) MATERIALIZE(@sqlstats_mv) NO_MERGE(@sqltext_mv) NO_MERGE(@snapshot_mv) NO_MERGE(@sqlstats_mv) ORDERED */ + t.begin_interval_time AS begin_timestamp, + t.end_interval_time AS end_timestamp, + (86400 * EXTRACT(DAY FROM (t.end_interval_time - t.begin_interval_time))) + (3600 * EXTRACT(HOUR FROM (t.end_interval_time - t.begin_interval_time))) + (60 * EXTRACT(MINUTE FROM (t.end_interval_time - t.begin_interval_time))) + EXTRACT(SECOND FROM (t.end_interval_time - t.begin_interval_time)) AS seconds, + s.instance_number, + s.parsing_schema_name, + s.module, + s.action, + s.sql_profile, + s.optimizer_cost, + s.con_id, + s.sql_id, + -- s.force_matching_signature, + s.plan_hash_value, + CASE s.parsing_schema_name WHEN 'SYS' THEN 'SYS' ELSE x.sql_type END AS sql_type, + x.sqlid, + x.sql_text, + x.sql_fulltext, + GREATEST(s.executions_delta, 0) AS delta_execution_count, + GREATEST(s.elapsed_time_delta, 0) AS delta_elapsed_time, + GREATEST(s.cpu_time_delta, 0) AS delta_cpu_time, + GREATEST(s.iowait_delta, 0) AS delta_user_io_wait_time, + GREATEST(s.apwait_delta, 0) AS delta_application_wait_time, + GREATEST(s.ccwait_delta, 0) AS delta_concurrency_time, + GREATEST(s.plsexec_time_delta, 0) AS delta_plsql_exec_time, + GREATEST(s.clwait_delta, 0) AS delta_cluster_wait_time, + GREATEST(s.javexec_time_delta, 0) AS delta_java_exec_time, + GREATEST(s.px_servers_execs_delta, 0) AS delta_px_servers_executions, + GREATEST(s.end_of_fetch_count_delta, 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls_delta, 0) AS delta_parse_calls, + GREATEST(s.invalidations_delta, 0) AS delta_invalidations, + GREATEST(s.loads_delta, 0) AS delta_loads, + GREATEST(s.buffer_gets_delta, 0) AS delta_buffer_gets, + GREATEST(s.disk_reads_delta, 0) AS delta_disk_reads, + GREATEST(s.direct_writes_delta, 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests_delta, 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes_delta, 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests_delta, 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes_delta, 0) AS delta_physical_write_bytes, + GREATEST(s.fetches_delta, 0) AS delta_fetch_count, + GREATEST(s.sorts_delta, 0) AS delta_sorts, + GREATEST(s.rows_processed_delta, 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes_delta, 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_offload_elig_bytes_delta, 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.cell_uncompressed_bytes_delta, 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_offload_return_bytes_delta, 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.obsolete_count + FROM snapshot_mv t, + sqlstats_mv s, + sqltext_mv x + WHERE s.snap_id = t.snap_id + AND s.dbid = t.dbid + AND s.instance_number = t.instance_number + AND x.dbid = s.dbid + AND x.sql_id = s.sql_id + AND x.con_id = s.con_id +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT MIN(d.begin_timestamp) AS begin_timestamp, + MAX(d.end_timestamp) AS end_timestamp, + SUM(d.seconds) AS seconds, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count) AS delta_execution_count2, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + d.sql_type, + d.sql_text, + -- d.sql_fulltext, -- not a GROUP BY column (CLOB) + ROW_NUMBER() OVER (PARTITION BY d.sql_type ORDER BY SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 /*et_ms_per_exec*/ DESC NULLS LAST) AS latency_rn, -- top sql as per db latency + ROW_NUMBER() OVER (PARTITION BY d.sql_type ORDER BY SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 /*et_aas*/ DESC NULLS LAST) AS load_rn, -- top sql as per db load + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_elapsed_time) AS delta_elapsed_time, + SUM(d.delta_cpu_time) AS delta_cpu_time, + SUM(d.delta_user_io_wait_time) AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time) AS delta_application_wait_time, + SUM(d.delta_concurrency_time) AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time) AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time) AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time) AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes) AS delta_physical_read_bytes, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes) AS delta_physical_write_bytes, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes) AS delta_io_interconnect_bytes, + SUM(d.delta_cell_offload_elig_bytes) AS delta_cell_offload_elig_bytes, + SUM(d.delta_cell_uncompressed_bytes) AS delta_cell_uncompressed_bytes, + SUM(d.delta_cell_offload_retrn_bytes) AS delta_cell_offload_retrn_bytes, + SUM(d.version_count) AS version_count, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + SUM(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE d.seconds > 1 -- avoid snaps less than 1 sec appart + GROUP BY + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + d.sql_type, + d.sql_text +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + s.sql_type, + s.latency_rn, + s.load_rn, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '|' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '|' AS sep2, + s.delta_execution_count2 AS delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.inval_per_sec, + s.loads_per_sec, + '|' AS sep3, + s.gets_per_exec, + s.reads_per_exec, + -- s.direct_reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '|' AS sep4, + s.delta_rows_processed, + s.rows_per_exec, + '|' AS sep5, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '|' AS sep6, + s.sqlid, + s.sql_id, + s.plan_hash_value, + v.has_baseline, + v.has_profile, + v.has_patch, + s.sql_text, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE s.parsing_schema_name END AS pdb_or_parsing_schema_name, + t.num_rows, + t.blocks, + s.begin_timestamp, + s.end_timestamp, + s.seconds + FROM sqlstats_metrics s + OUTER APPLY ( + SELECT CASE WHEN v.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN v.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN v.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch, + v.hash_value, + v.address + FROM v$sql v + WHERE v.sql_id = s.sql_id + AND v.con_id = s.con_id + AND v.plan_hash_value = s.plan_hash_value + ORDER BY + v.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) v + OUTER APPLY ( -- only works when executed within a PDB + SELECT t.num_rows, t.blocks + FROM v$object_dependency d, dba_users u, dba_tables t + WHERE d.from_hash = v.hash_value + AND d.from_address = v.address + AND d.to_type = 2 -- table + AND d.to_owner <> 'SYS' + AND d.con_id = s.con_id + AND u.username = d.to_owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND t.owner = d.to_owner + AND t.table_name = d.to_name + ORDER BY + t.num_rows DESC NULLS LAST + FETCH FIRST 1 ROW ONLY + ) t + WHERE ((s.latency_rn <= &&cs_top_latency. AND s.et_aas >= &&cs_aas_threshold_latency.) OR (s.load_rn <= &&cs_top_load. AND s.et_aas >= &&cs_aas_threshold_load.)) + AND s.et_ms_per_exec >= &&cs_ms_threshold_latency. + ORDER BY + CASE s.sql_type WHEN 'TP' THEN 1 WHEN 'RO' THEN 2 WHEN 'BG' THEN 3 WHEN 'UN' THEN 4 WHEN 'IG' THEN 5 WHEN 'SYS' THEN 6 ELSE 9 END, + s.et_ms_per_exec DESC +/ diff --git a/csierra/cs_internal/cs_latency_internal_query_5.sql b/csierra/cs_internal/cs_latency_internal_query_5.sql new file mode 100644 index 0000000..3a2f2df --- /dev/null +++ b/csierra/cs_internal/cs_latency_internal_query_5.sql @@ -0,0 +1,302 @@ +-- cs_latency_internal_query_5.sql: called by cs_latency_range_iod.sql, cs_latency_range_iod_extended.sql, cs_latency_snapshot.sql, cs_latency_snapshot_extended.sql +PRO +PRO TOP active SQL as per DB Latency (and DB Load) &&cs_tools_schema..iod_sqlstats_t +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_latency_internal_query_5 */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT LAG(s.snap_timestamp) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp) AS begin_timestamp, + s.snap_timestamp AS end_timestamp, + (86400 * EXTRACT(DAY FROM (s.snap_timestamp - LAG(s.snap_timestamp) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp)))) + (3600 * EXTRACT(HOUR FROM (s.snap_timestamp - LAG(s.snap_timestamp) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp)))) + (60 * EXTRACT(MINUTE FROM (s.snap_timestamp - LAG(s.snap_timestamp) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp)))) + EXTRACT(SECOND FROM (s.snap_timestamp - LAG(s.snap_timestamp) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp))) AS seconds, + s.con_id, + s.sql_id, + -- s.exact_matching_signature, + -- s.force_matching_signature, + s.plan_hash_value, + &&cs_tools_schema..iod_spm.application_category(s.sql_text, 'UNKNOWN') AS sql_type, -- passing UNKNOWN else KIEV envs would show a lot of unrelated SQL under RO + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN s.sql_fulltext LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(s.sql_fulltext, '\[([[:digit:]]{4})\] ') ELSE s.sql_fulltext END),100000),5,'0') AS sqlid, + get_sql_hv(s.sql_fulltext) AS sqlid, + -- s.sql_text, + DBMS_LOB.substr(REGEXP_SUBSTR(s.sql_fulltext, '.*$', 1, 1, 'm'), 1000) AS sql_text, + s.sql_fulltext, + GREATEST(s.executions - LAG(s.executions) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_execution_count, + GREATEST(s.elapsed_time - LAG(s.elapsed_time) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_elapsed_time, + GREATEST(s.cpu_time - LAG(s.cpu_time) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_cpu_time, + GREATEST(s.user_io_wait_time - LAG(s.user_io_wait_time) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_user_io_wait_time, + GREATEST(s.application_wait_time - LAG(s.application_wait_time) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_application_wait_time, + GREATEST(s.concurrency_wait_time - LAG(s.concurrency_wait_time) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_concurrency_time, + GREATEST(s.plsql_exec_time - LAG(s.plsql_exec_time) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_plsql_exec_time, + GREATEST(s.cluster_wait_time - LAG(s.cluster_wait_time) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_cluster_wait_time, + GREATEST(s.java_exec_time - LAG(s.java_exec_time) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_java_exec_time, + GREATEST(s.px_servers_executions - LAG(s.px_servers_executions) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_px_servers_executions, + GREATEST(s.avoided_executions - LAG(s.avoided_executions) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_avoided_executions, + GREATEST(s.end_of_fetch_count - LAG(s.end_of_fetch_count) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls - LAG(s.parse_calls) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_parse_calls, + GREATEST(s.invalidations - LAG(s.invalidations) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_invalidations, + GREATEST(s.loads - LAG(s.loads) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_loads, + GREATEST(s.buffer_gets - LAG(s.buffer_gets) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_buffer_gets, + GREATEST(s.disk_reads - LAG(s.disk_reads) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_disk_reads, + GREATEST(s.direct_reads - LAG(s.direct_reads) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_direct_reads, + GREATEST(s.direct_writes - LAG(s.direct_writes) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests - LAG(s.physical_read_requests) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes - LAG(s.physical_read_bytes) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests - LAG(s.physical_write_requests) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes - LAG(s.physical_write_bytes) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_physical_write_bytes, + GREATEST(s.fetches - LAG(s.fetches) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_fetch_count, + GREATEST(s.sorts - LAG(s.sorts) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_sorts, + GREATEST(s.rows_processed - LAG(s.rows_processed) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes - LAG(s.io_interconnect_bytes) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_cell_offload_eligible_bytes - LAG(s.io_cell_offload_eligible_bytes) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.io_cell_uncompressed_bytes - LAG(s.io_cell_uncompressed_bytes) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_cell_offload_returned_bytes - LAG(s.io_cell_offload_returned_bytes) OVER (PARTITION BY s.snap_type, s.sid, s.con_id, s.sql_id ORDER BY s.snap_timestamp), 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.total_sharable_mem, + s.avg_hard_parse_time, + s.obsolete_count, + s.serializable_aborts, + s.last_active_time + FROM &&cs_tools_schema..iod_sqlstats_t s + WHERE s.snap_timestamp >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') - INTERVAL '2' MINUTE -- needed by cs_latency_range.sql because of LAG functions above + AND s.snap_timestamp <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + INTERVAL '1' SECOND -- needed by cs_latency_snapshot.sql + AND s.snap_type = '&&cs_snap_type.' + AND s.sid = TO_NUMBER('&&cs_sid.') + AND &&cs_filter_2. +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT MIN(d.begin_timestamp) AS begin_timestamp, + MAX(d.end_timestamp) AS end_timestamp, + SUM(d.seconds) AS seconds, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + d.con_id, + d.sqlid, + d.sql_id, + -- d.exact_matching_signature, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + -- d.parsing_schema_name, + -- d.module, + -- d.action, + d.plan_hash_value, + d.sql_type, + d.sql_text, + -- d.sql_fulltext, -- not a GROUP BY column (CLOB) + ROW_NUMBER() OVER (PARTITION BY d.sql_type ORDER BY SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 /*et_ms_per_exec*/ DESC NULLS LAST) AS latency_rn, -- top sql as per db latency + ROW_NUMBER() OVER (PARTITION BY d.sql_type ORDER BY SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 /*et_aas*/ DESC NULLS LAST) AS load_rn, -- top sql as per db load + SUM(d.delta_execution_count) AS delta_execution_count2, + SUM(d.delta_elapsed_time) AS delta_elapsed_time, + SUM(d.delta_cpu_time) AS delta_cpu_time, + SUM(d.delta_user_io_wait_time) AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time) AS delta_application_wait_time, + SUM(d.delta_concurrency_time) AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time) AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time) AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time) AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes) AS delta_physical_read_bytes, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes) AS delta_physical_write_bytes, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes) AS delta_io_interconnect_bytes, + SUM(d.delta_cell_offload_elig_bytes) AS delta_cell_offload_elig_bytes, + SUM(d.delta_cell_uncompressed_bytes) AS delta_cell_uncompressed_bytes, + SUM(d.delta_cell_offload_retrn_bytes) AS delta_cell_offload_retrn_bytes, + SUM(d.version_count) AS version_count, + AVG(d.avg_hard_parse_time) AS avg_hard_parse_time, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + SUM(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE d.seconds > 1 -- avoid snaps less than 1 sec appart + AND d.end_timestamp >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') -- needed because of LAG functions on sqlstats_deltas + AND d.end_timestamp <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + INTERVAL '1' SECOND -- needed by cs_latency_snapshot.sql + GROUP BY + d.con_id, + d.sqlid, + d.sql_id, + -- d.exact_matching_signature, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + -- d.parsing_schema_name, + -- d.module, + -- d.action, + d.plan_hash_value, + d.sql_type, + d.sql_text +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + '!' AS sep0, + CASE WHEN v.parsing_schema_name = 'SYS' THEN 'SYS' ELSE s.sql_type END AS sql_type, + s.latency_rn, + s.load_rn, + s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.plsql_ms_per_exec, + s.cluster_ms_per_exec, + s.java_ms_per_exec, + '|' AS sep1, + s.et_aas, + s.cpu_aas, + s.io_aas, + s.appl_aas, + s.conc_aas, + s.plsql_aas, + s.cluster_aas, + s.java_aas, + '|' AS sep2, + s.delta_execution_count2 AS delta_execution_count, + s.execs_per_sec, + s.px_execs_per_sec, + s.end_of_fetch_per_sec, + s.parses_per_sec, + s.avg_hard_parse_time, + s.inval_per_sec, + s.loads_per_sec, + '|' AS sep3, + s.gets_per_exec, + s.reads_per_exec, + -- s.direct_reads_per_exec, + s.direct_writes_per_exec, + s.phy_read_req_per_exec, + s.phy_read_mb_per_exec, + s.phy_write_req_per_exec, + s.phy_write_mb_per_exec, + s.fetches_per_exec, + s.sorts_per_exec, + '|' AS sep4, + s.delta_rows_processed, + s.rows_per_exec, + '|' AS sep5, + s.et_ms_per_row, + s.cpu_ms_per_row, + s.io_ms_per_row, + s.gets_per_row, + s.reads_per_row, + '|' AS sep6, + s.sqlid, + s.sql_id, + s.plan_hash_value, + v.has_baseline, + v.has_profile, + v.has_patch, + s.sql_text, + CASE SYS_CONTEXT('USERENV', 'CON_ID') WHEN '1' THEN get_pdb_name(s.con_id) ELSE v.parsing_schema_name END AS pdb_or_parsing_schema_name, + t.num_rows, + t.blocks, + s.begin_timestamp, + s.end_timestamp, + s.seconds + FROM sqlstats_metrics s + OUTER APPLY ( + SELECT CASE WHEN v.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN v.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN v.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch, + v.parsing_schema_name, + v.hash_value, + v.address + FROM v$sql v + WHERE v.sql_id = s.sql_id + AND v.con_id = s.con_id + AND v.plan_hash_value = s.plan_hash_value + ORDER BY + v.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) v + OUTER APPLY ( -- only works when executed within a PDB + SELECT t.num_rows, t.blocks + FROM v$object_dependency d, dba_users u, dba_tables t + WHERE d.from_hash = v.hash_value + AND d.from_address = v.address + AND d.to_type = 2 -- table + AND d.to_owner <> 'SYS' + AND d.con_id = s.con_id + AND u.username = d.to_owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND t.owner = d.to_owner + AND t.table_name = d.to_name + ORDER BY + t.num_rows DESC NULLS LAST + FETCH FIRST 1 ROW ONLY + ) t + WHERE ((s.latency_rn <= &&cs_top_latency. AND s.et_aas >= &&cs_aas_threshold_latency.) OR (s.load_rn <= &&cs_top_load. AND s.et_aas >= &&cs_aas_threshold_load.)) + AND s.et_ms_per_exec >= &&cs_ms_threshold_latency. + ORDER BY + CASE WHEN v.parsing_schema_name = 'SYS' THEN 6 WHEN s.sql_type = 'TP' THEN 1 WHEN s.sql_type = 'RO' THEN 2 WHEN s.sql_type = 'BG' THEN 3 WHEN s.sql_type = 'UN' THEN 4 WHEN s.sql_type = 'IG' THEN 5 ELSE 9 END, + s.et_ms_per_exec DESC +/ diff --git a/csierra/cs_internal/cs_latency_internal_snapshot.sql b/csierra/cs_internal/cs_latency_internal_snapshot.sql new file mode 100644 index 0000000..d649eb0 --- /dev/null +++ b/csierra/cs_internal/cs_latency_internal_snapshot.sql @@ -0,0 +1,18 @@ +-- sets the start point of search space +COL cs_sample_time_from NEW_V cs_sample_time_from NOPRI; +SELECT TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS cs_sample_time_from FROM DUAL +/ +-- +VAR cs_time_cs_begin NUMBER; +EXEC :cs_time_cs_begin := DBMS_UTILITY.get_time; +PRO Begin Snapshot... please wait... +EXEC &&cs_tools_schema..iod_sqlstats.snapshot_sqlstats(p_snap_type => '&&cs_snap_type.', p_sid => TO_NUMBER('&&cs_sid.')); +PRO Sleeping &&cs_snapshot_seconds. seconds... please wait... +EXEC DBMS_LOCK.sleep(seconds => &&cs_snapshot_seconds. - LEAST(TRUNC((DBMS_UTILITY.get_time - :cs_time_cs_begin)/100), &&cs_snapshot_seconds.)); +PRO End Snapshot... please wait... +EXEC &&cs_tools_schema..iod_sqlstats.snapshot_sqlstats(p_snap_type => '&&cs_snap_type.', p_sid => TO_NUMBER('&&cs_sid.')); +-- +-- sets the end point of search space +COL cs_sample_time_to NEW_V cs_sample_time_to NOPRI; +SELECT TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS cs_sample_time_to FROM DUAL +/ \ No newline at end of file diff --git a/csierra/cs_internal/cs_list_cbo_hints.sql b/csierra/cs_internal/cs_list_cbo_hints.sql new file mode 100644 index 0000000..ad12acb --- /dev/null +++ b/csierra/cs_internal/cs_list_cbo_hints.sql @@ -0,0 +1,193 @@ +PRO +PRO REFERENCED INDEXES (sqlobj$data) +PRO ~~~~~~~~~~~~~~~~~~ +COL sql_id FOR A13; +COL signature FOR 99999999999999999999; +COL sql_handle FOR A20; +COL plan_name FOR A30; +COL plan_id FOR 9999999999; +-- COL plan_hash FOR 9999999999; +-- COL plan_hash2 FOR 9999999999; +-- COL plan_hash_full FOR 9999999999; +COL indexed_columns FOR A200; +COL table_owner FOR A30; +COL table_name FOR A30; +COL index_owner FOR A30; +COL index_name FOR A30; +COL sql_text FOR A100 TRUNC; +COL description FOR A100 HEA 'Description' WOR; +COL created FOR A23; +COL last_modified FOR A23; +COL last_executed FOR A23; +COL timestamp FOR A19; +BREAK ON plan_name SKIP PAGE ON plan_id ON description; +-- +-- only works from PDB. do not use CONTAINERS(table_name) since it causes ORA-00600: internal error code, arguments: [kkdolci1], [], [], [], [], [], [], +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +i AS ( +SELECT ic.table_owner, ic.table_name, ic.index_owner, ic.index_name, + LISTAGG('"'||ic.table_name||'"."'||ic.column_name||'"', ' ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY ic.column_position) AS indexed_columns + FROM dba_ind_columns ic + GROUP BY + ic.table_owner, ic.table_name, ic.index_owner, ic.index_name +), +b AS ( +SELECT p.signature, + t.sql_handle, + o.name AS plan_name, + p.plan_id, + -- TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.comp_data),'/*/info[@type = "plan_hash"]')) AS plan_hash, -- normal plan_hash_value + -- TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.comp_data),'/*/info[@type = "plan_hash_2"]')) AS plan_hash_2, -- plan_hash_value ignoring transient object names (must be same than plan_id for a baseline to be used) + -- TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.comp_data),'/*/info[@type = "plan_hash_full"]')) AS plan_hash_full, -- adaptive plan (must be different than plan_hash_2 on loaded plans) + DECODE(BITAND(o.flags, 1), 0, 'NO', 'YES') AS enabled, + -- DECODE(BITAND(o.flags, 2), 0, 'NO', 'YES') AS accepted, + -- DECODE(BITAND(o.flags, 4), 0, 'NO', 'YES') AS fixed, + -- DECODE(BITAND(o.flags, 64), 0, 'YES', 'NO') AS reproduced, + -- DECODE(BITAND(o.flags, 128), 0, 'NO', 'YES') AS autopurge, + -- DECODE(BITAND(o.flags, 256), 0, 'NO', 'YES') AS adaptive, + SUBSTR(x.outline_hint, INSTR(x.outline_hint, '(', 1, 2) + 1, INSTR(x.outline_hint, '))') - INSTR(x.outline_hint, '(', 1, 2) - 1) AS indexed_columns, + t.sql_text, + a.description, + a.origin, + a.created, + a.last_modified, + o.last_executed, + TO_DATE(NULL) AS timestamp + FROM sys.sqlobj$data p, + XMLTABLE('outline_data/hint' PASSING XMLTYPE(p.comp_data) COLUMNS outline_hint VARCHAR2(500) PATH '.') x, + sys.sqlobj$ o, + sys.sqlobj$auxdata a, + sys.sql$text t + WHERE p.signature = :cs_signature + AND p.category = 'DEFAULT' + AND p.obj_type = &&cs_obj_type. /* 1:profile, 2:baseline, 3:patch */ + AND p.comp_data IS NOT NULL + AND x.outline_hint LIKE 'INDEX%(%(%))' + AND o.signature = p.signature + AND o.category = p.category + AND o.obj_type = p.obj_type + AND o.plan_id = p.plan_id + AND a.signature = o.signature + AND a.category = o.category + AND a.obj_type = o.obj_type + AND a.plan_id = o.plan_id + AND t.signature = a.signature +), +x AS ( +SELECT DISTINCT + compute_sql_id(b.sql_text) AS sql_id, + b.sql_handle, + b.plan_name, + b.plan_id, + -- b.plan_hash, + -- b.plan_hash_2, + -- b.plan_hash_full, + b.enabled, + -- b.accepted, + -- b.fixed, + -- b.reproduced, + -- b.autopurge, + -- b.adaptive, + b.indexed_columns, + NVL(i.table_owner, '"missing"') AS table_owner, + NVL(i.table_name, '"missing"') AS table_name, + NVL(i.index_owner, '"missing"') AS index_owner, + NVL(i.index_name, '"missing"') AS index_name, + DBMS_LOB.SUBSTR(b.sql_text, 1000) AS sql_text, + b.description, + b.created, + b.last_modified, + b.last_executed, + b.timestamp + FROM b, i + WHERE i.indexed_columns(+) = b.indexed_columns +) +SELECT /* comment out unwanted columns */ + -- x.sql_id, + -- x.sql_text, + -- x.sql_handle, + x.plan_name, + -- x.plan_id, + -- x.plan_hash, + -- x.plan_hash_2, + -- x.plan_hash_full, + x.enabled, + -- x.accepted, + -- x.fixed, + -- x.reproduced, + -- x.autopurge, + -- x.adaptive, + x.indexed_columns, + -- x.table_owner, + -- x.table_name, + x.index_owner, + x.index_name, + -- x.created, + -- x.last_modified, + -- x.last_executed, + -- x.timestamp, + x.description + FROM x + ORDER BY + -- x.sql_id, + x.plan_name, + x.indexed_columns, + x.table_owner, + x.table_name, + x.index_owner, + x.index_name +/ +CLEAR BREAK; +PRO +PRO CBO_HINTS (sqlobj$data) +PRO ~~~~~~~~~ +COL category FOR A10; +COL outline_hint FOR A300; +BREAK ON category SKIP PAGE; +SELECT d.category, x.outline_hint + FROM sys.sqlobj$data d, + XMLTABLE('/outline_data/hint' PASSING XMLTYPE(d.comp_data) COLUMNS outline_hint VARCHAR2(500) PATH '.') x + WHERE d.obj_type = &&cs_obj_type. /* 1:profile, 2:baseline, 3:patch */ + AND d.signature = :cs_signature +/ +CLEAR BREAK; diff --git a/csierra/cs_internal/cs_list_cbo_hints_b.sql b/csierra/cs_internal/cs_list_cbo_hints_b.sql new file mode 100644 index 0000000..f48d343 --- /dev/null +++ b/csierra/cs_internal/cs_list_cbo_hints_b.sql @@ -0,0 +1,195 @@ +PRO +PRO REFERENCED INDEXES (sqlobj$plan) +PRO ~~~~~~~~~~~~~~~~~~ +COL sql_id FOR A13; +COL signature FOR 99999999999999999999; +COL sql_handle FOR A20; +COL plan_name FOR A30; +COL plan_id FOR 9999999999; +COL plan_hash FOR 9999999999; +COL plan_hash2 FOR 9999999999; +COL plan_hash_full FOR 9999999999; +COL indexed_columns FOR A200; +COL table_owner FOR A30; +COL table_name FOR A30; +COL index_owner FOR A30; +COL index_name FOR A30; +COL sql_text FOR A100 TRUNC; +COL description FOR A100 HEA 'Description' WOR; +COL created FOR A23; +COL last_modified FOR A23; +COL last_executed FOR A23; +COL timestamp FOR A19; +BREAK ON plan_name SKIP PAGE ON plan_id ON description; +-- +-- only works from PDB. do not use CONTAINERS(table_name) since it causes ORA-00600: internal error code, arguments: [kkdolci1], [], [], [], [], [], [], +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +i AS ( +SELECT ic.table_owner, ic.table_name, ic.index_owner, ic.index_name, + LISTAGG('"'||ic.table_name||'"."'||ic.column_name||'"', ' ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY ic.column_position) AS indexed_columns + FROM dba_ind_columns ic + GROUP BY + ic.table_owner, ic.table_name, ic.index_owner, ic.index_name +), +b AS ( +SELECT p.signature, + t.sql_handle, + o.name AS plan_name, + p.plan_id, + TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash"]')) AS plan_hash, -- normal plan_hash_value + TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash_2"]')) AS plan_hash_2, -- plan_hash_value ignoring transient object names (must be same than plan_id for a baseline to be used) + TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash_full"]')) AS plan_hash_full, -- adaptive plan (must be different than plan_hash_2 on loaded plans) + DECODE(BITAND(o.flags, 1), 0, 'NO', 'YES') AS enabled, + DECODE(BITAND(o.flags, 2), 0, 'NO', 'YES') AS accepted, + DECODE(BITAND(o.flags, 4), 0, 'NO', 'YES') AS fixed, + DECODE(BITAND(o.flags, 64), 0, 'YES', 'NO') AS reproduced, + DECODE(BITAND(o.flags, 128), 0, 'NO', 'YES') AS autopurge, + DECODE(BITAND(o.flags, 256), 0, 'NO', 'YES') AS adaptive, + SUBSTR(x.outline_hint, INSTR(x.outline_hint, '(', 1, 2) + 1, INSTR(x.outline_hint, '))') - INSTR(x.outline_hint, '(', 1, 2) - 1) AS indexed_columns, + t.sql_text, + a.description, + a.origin, + a.created, + a.last_modified, + o.last_executed, + p.timestamp + FROM sys.sqlobj$plan p, + XMLTABLE('other_xml/outline_data/hint' PASSING XMLTYPE(p.other_xml) COLUMNS outline_hint VARCHAR2(500) PATH '.') x, + sys.sqlobj$ o, + sys.sqlobj$auxdata a, + sys.sql$text t + WHERE p.signature = :cs_signature + AND p.category = 'DEFAULT' + AND p.obj_type = &&cs_obj_type. /* 1:profile, 2:baseline, 3:patch */ + AND p.other_xml IS NOT NULL + AND x.outline_hint LIKE 'INDEX%(%(%))' + AND o.signature = p.signature + AND o.category = p.category + AND o.obj_type = p.obj_type + AND o.plan_id = p.plan_id + AND a.signature = o.signature + AND a.category = o.category + AND a.obj_type = o.obj_type + AND a.plan_id = o.plan_id + AND t.signature = a.signature +), +x AS ( +SELECT DISTINCT + compute_sql_id(b.sql_text) AS sql_id, + b.sql_handle, + b.plan_name, + b.plan_id, + b.plan_hash, + b.plan_hash_2, + b.plan_hash_full, + b.enabled, + b.accepted, + b.fixed, + b.reproduced, + b.autopurge, + b.adaptive, + b.indexed_columns, + NVL(i.table_owner, '"missing"') AS table_owner, + NVL(i.table_name, '"missing"') AS table_name, + NVL(i.index_owner, '"missing"') AS index_owner, + NVL(i.index_name, '"missing"') AS index_name, + DBMS_LOB.SUBSTR(b.sql_text, 1000) AS sql_text, + b.description, + b.created, + b.last_modified, + b.last_executed, + b.timestamp + FROM b, i + WHERE i.indexed_columns(+) = b.indexed_columns +) +SELECT /* comment out unwanted columns */ + -- x.sql_id, + -- x.sql_text, + -- x.sql_handle, + x.plan_name, + x.plan_id, + -- x.plan_hash, + -- x.plan_hash_2, + -- x.plan_hash_full, + x.enabled, + x.accepted, + -- x.fixed, + -- x.reproduced, + -- x.autopurge, + -- x.adaptive, + x.indexed_columns, + -- x.table_owner, + -- x.table_name, + x.index_owner, + x.index_name, + -- x.created, + -- x.last_modified, + -- x.last_executed, + -- x.timestamp, + x.description + FROM x + ORDER BY + -- x.sql_id, + x.plan_name, + x.indexed_columns, + x.table_owner, + x.table_name, + x.index_owner, + x.index_name +/ +CLEAR BREAK; +PRO +PRO CBO_HINTS (sqlobj$plan) +PRO ~~~~~~~~~ +COL plan_id FOR 99999999990; +COL category FOR A10; +COL outline_hint FOR A300; +-- only works from PDB. do not use CONTAINERS(table_name) since it causes ORA-00600: internal error code, arguments: [kkdolci1], [], [], [], [], [], [], +BREAK ON plan_id SKIP PAGE ON category; +SELECT d.plan_id, d.category, x.outline_hint + FROM sys.sqlobj$plan d, XMLTABLE('other_xml/outline_data/hint' PASSING XMLTYPE(d.other_xml) COLUMNS outline_hint VARCHAR2(500) PATH '.') x + WHERE d.obj_type = &&cs_obj_type. /* 1:profile, 2:baseline, 3:patch */ + AND d.other_xml IS NOT NULL + AND d.signature = :cs_signature +/ +CLEAR BREAK; \ No newline at end of file diff --git a/csierra/cs_internal/cs_load_per_machine.sql b/csierra/cs_internal/cs_load_per_machine.sql new file mode 100644 index 0000000..ecbb2b6 --- /dev/null +++ b/csierra/cs_internal/cs_load_per_machine.sql @@ -0,0 +1,48 @@ +COL machine FOR A64 HEA 'Machine (Application Server)'; +COL load_percent FOR 990.0 HEA 'Load|Perc%'; +BREAK ON REPORT; +COMPUTE SUM LABEL "TOTAL" OF load_percent ON REPORT; +-- +PRO +PRO LOAD PER MACHINE (v$active_session_history) +PRO ~~~~~~~~~~~~~~~~ +WITH +load AS ( +SELECT h.machine, + COUNT(DISTINCT TO_CHAR(sql_exec_start, 'YYYYMMDDHH24MISS')||'.'||TO_CHAR(sql_exec_id)) AS executions + FROM v$active_session_history h + WHERE h.sql_id = '&&cs_sql_id.' + GROUP BY + h.machine +) +SELECT machine, + 100 * executions / SUM(executions) OVER () AS load_percent + FROM load + ORDER BY + machine +/ +-- +PRO +PRO LOAD PER MACHINE 7d (dba_hist_active_sess_history) +PRO ~~~~~~~~~~~~~~~~~~~ +WITH +load AS ( +SELECT h.machine, + COUNT(DISTINCT TO_CHAR(sql_exec_start, 'YYYYMMDDHH24MISS')||'.'||TO_CHAR(sql_exec_id)) AS executions + FROM dba_hist_active_sess_history h + WHERE h.sql_id = '&&cs_sql_id.' + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.sample_time > SYSDATE - 7 + AND h.snap_id >= &&cs_7d_snap_id. + GROUP BY + h.machine +) +SELECT machine, + 100 * executions / SUM(executions) OVER () AS load_percent + FROM load + ORDER BY + machine +/ +-- +CLEAR BREAK COMPUTE; diff --git a/csierra/cs_internal/cs_lobs_internal.sql b/csierra/cs_internal/cs_lobs_internal.sql new file mode 100644 index 0000000..45ec0be --- /dev/null +++ b/csierra/cs_internal/cs_lobs_internal.sql @@ -0,0 +1,36 @@ +COL owner FOR A30; +COL table_name FOR A30; +COL tablespace_name FOR A30; +COL column_name FOR A30; +COL segment_name FOR A30; +COL index_name FOR A30; +COL encrypt FOR A8; +COL compression FOR A12; +COL deduplication FOR A14; +COL in_row FOR A7; +COL partitioned FOR A12; +COL securefile FOR A11; +-- +SELECT l.owner, + l.table_name, + l.tablespace_name, + l.column_name, + l.segment_name, + l.index_name, + l.cache, + l.encrypt, + l.compression, + l.deduplication, + l.in_row, + l.partitioned, + l.securefile + FROM dba_lobs l + WHERE l.table_name = COALESCE('&&specific_table.', l.table_name) + AND l.owner = COALESCE('&&specific_owner.', l.owner) + ORDER BY + l.owner, + l.table_name, + l.tablespace_name, + l.column_name +/ + diff --git a/csierra/cs_internal/cs_locks_internal.sql b/csierra/cs_internal/cs_locks_internal.sql new file mode 100644 index 0000000..bb6a2ca --- /dev/null +++ b/csierra/cs_internal/cs_locks_internal.sql @@ -0,0 +1,307 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_locks_internal.sql +-- +-- Purpose: Locks Summary and Details +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/03/19 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_locks_internal.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +--SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +--ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +--ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF6'; +--ALTER SESSION SET STATISTICS_LEVEL = 'ALL'; +--ALTER SESSION SET "_px_cdb_view_enabled" = FALSE; +-- +COL cs9_current_time NEW_V cs9_current_time FOR A19 NOPRI; +SELECT TO_CHAR(SYSDATE) AS cs9_current_time FROM DUAL; +COL type FOR A4; +COL blocker FOR A16; +COL blockee FOR A16; +COL lmode FOR A15; +COL request FOR A15; +COL seconds_in_wait FOR 999,990 HEA 'SECONDS|IN WAIT'; +COL object_name FOR A50 TRUNC; +COL line FOR A100 HEA 'Disconnect Command (just as reference, if needed)'TRUNC; +-- +BREAK ON blocker SKIP PAGE ON line; +-- +PRO +PRO TX/TM Locks Summary (gv$lock) as of &&cs9_current_time. +PRO ~~~~~~~~~~~~~~~~~~~ +SELECT blocker_lock.sid||','||blocker_session.serial#||',@'||blocker_session.inst_id AS blocker, + blocker_lock.type, + blocker_lock.lmode||':'||CASE blocker_lock.lmode WHEN 0 THEN 'none' WHEN 1 THEN 'null (NULL)' WHEN 2 THEN 'row-S (SS)' WHEN 3 THEN 'row-X (SX)' WHEN 4 THEN 'share (S)' WHEN 5 THEN 'S/Row-X (SSX)' WHEN 6 THEN 'exclusive (X)' END AS lmode, + blockee_lock.sid||','||blockee_session.serial#||',@'||blockee_session.inst_id AS blockee, + blockee_lock.request||':'||CASE blockee_lock.request WHEN 0 THEN 'none' WHEN 1 THEN 'null (NULL)' WHEN 2 THEN 'row-S (SS)' WHEN 3 THEN 'row-X (SX)' WHEN 4 THEN 'share (S)' WHEN 5 THEN 'S/Row-X (SSX)' WHEN 6 THEN 'exclusive (X)' END AS request, + blockee_session.seconds_in_wait, + cdb_objects.object_type||' '||cdb_objects.owner||'.'||cdb_objects.object_name AS object_name, + CASE blocker_session.type WHEN 'USER' THEN 'ALTER SYSTEM DISCONNECT SESSION '''||blocker_lock.sid||','||blocker_session.serial#||',@'||blocker_lock.inst_id||''' IMMEDIATE;' END AS line + FROM gv$lock blocker_lock, + gv$lock blockee_lock, + gv$session blocker_session, + gv$session blockee_session, + gv$locked_object locked_object, + cdb_objects + WHERE blocker_lock.block = 1 + AND blockee_lock.id1 = blocker_lock.id1 + AND blockee_lock.id2 = blocker_lock.id2 + AND blockee_lock.request > 0 + AND blocker_session.sid = blocker_lock.sid + AND blocker_session.inst_id = blocker_lock.inst_id + AND blockee_session.sid = blockee_lock.sid + AND blockee_session.inst_id = blockee_lock.inst_id + AND blockee_session.blocking_session_status = 'VALID' + AND blocker_session.sid IN (blockee_session.blocking_session, blockee_session.final_blocking_session) + AND locked_object.session_id = blockee_session.sid + AND locked_object.inst_id = blockee_lock.inst_id + AND cdb_objects.object_id = locked_object.object_id + AND cdb_objects.con_id = locked_object.con_id + ORDER BY + blocker_session.seconds_in_wait DESC, + blockee_session.seconds_in_wait DESC +/ +-- +CLEAR BREAK; +-- +SELECT TO_CHAR(SYSDATE) AS cs9_current_time FROM DUAL; +PRO All Locks Details (gv$session) as of &&cs9_current_time. +PRO ~~~~~~~~~~~~~~~~~ +PRO +SET SERVEROUT ON; +VAR root_blockers NUMBER; +VAR blockees NUMBER; +DECLARE + l_value_max_length INTEGER := 100; + l_prefix VARCHAR2(4000) := '| | | '; + l_separator VARCHAR2(4000) := '+---+-----------------------------------+------------------------------------------------------+-'||RPAD('-', l_value_max_length, '-')||'-+'; + l_separator2 VARCHAR2(4000) := '| L | sid,serial#,@inst_id | source.key(s) | '||RPAD(' value(s)', l_value_max_length, ' ')||' +'; + -- + PROCEDURE put_line (p_line IN VARCHAR2) + IS + BEGIN + IF p_line = l_prefix THEN + RETURN; + ELSE + DBMS_OUTPUT.put_line(p_line); + END IF; + END put_line; + -- + FUNCTION key_value (p_key IN VARCHAR2, p_value IN VARCHAR2) + RETURN VARCHAR2 + IS + BEGIN + IF p_value IS NULL THEN + RETURN NULL; + ELSE + RETURN LPAD(SUBSTR(p_key, 1, 52), 52, ' ')||' : '||RPAD(SUBSTR(p_value, 1, l_value_max_length), l_value_max_length, ' ')||' |'; + END IF; + END key_value; + -- + FUNCTION get_lmode_text (p_lmode IN NUMBER) + RETURN VARCHAR2 + IS + BEGIN + IF p_lmode = 0 THEN RETURN 'none'; + ELSIF p_lmode = 1 THEN RETURN 'null (NULL)'; + ELSIF p_lmode = 2 THEN RETURN 'row-S (SS)'; + ELSIF p_lmode = 3 THEN RETURN 'row-X (SX)'; + ELSIF p_lmode = 4 THEN RETURN 'share (S)'; + ELSIF p_lmode = 5 THEN RETURN 'S/Row-X (SSX)'; + ELSIF p_lmode = 6 THEN RETURN 'exclusive (X)'; + ELSE RETURN 'unknown (ERROR)'; + END IF; + END get_lmode_text; + -- + PROCEDURE cs_session (p_inst_id IN NUMBER, p_sid IN NUMBER, p_level IN NUMBER) + IS + l_blocker_or_blockee VARCHAR2(100); + l_session gv$session%ROWTYPE; + l_process gv$process%ROWTYPE; + l_transaction gv$transaction%ROWTYPE; + l_lock gv$lock%ROWTYPE; + l_sql gv$sql%ROWTYPE; + l_containers v$containers%ROWTYPE; + l_procedures dba_procedures%ROWTYPE; + l_objects cdb_objects%ROWTYPE; + BEGIN + IF p_level > 9 THEN + DBMS_OUTPUT.put_line('*** LVL > '||(p_level + 1)); + RETURN; + ELSIF p_level = 0 THEN + l_blocker_or_blockee := 'ROOT BLOCKER'; + ELSE + l_blocker_or_blockee := 'BLOCKEE'; + :blockees := :blockees + 1; + END IF; + -- + SELECT * INTO l_session FROM gv$session WHERE inst_id = p_inst_id AND sid = p_sid; + -- + put_line(l_separator); + put_line('| '||(p_level + 1)||' |'||LPAD(' ', (2 * p_level) + 1, ' ')||RPAD(p_sid||','||l_session.serial#||',@'||p_inst_id, 15, ' ')||LPAD(' ', 2 * (9 - p_level) + 1, ' ')||'| '||key_value('gv$session.username (role)', l_session.username||' ('||l_blocker_or_blockee||')')); + put_line(l_prefix||key_value('gv$session.type - status', l_session.type||' - '||l_session.status)); + -- + FOR i IN (SELECT * FROM gv$lock WHERE inst_id = p_inst_id AND sid = p_sid AND type <> 'AE' ORDER BY ctime DESC, block DESC, type DESC, lmode DESC, request DESC) + LOOP + put_line(l_prefix||key_value('gv$lock.ctime block type[lmode][request] id1,id2', i.ctime||' '||i.block||' '||i.type||'['||i.lmode||':'||get_lmode_text(i.lmode)||']['||i.request||':'||get_lmode_text(i.request)||'] '||i.id1||','||i.id2)); + END LOOP; + -- + FOR i IN (SELECT * FROM gv$locked_object WHERE inst_id = p_inst_id AND session_id = p_sid ORDER BY object_id) + LOOP + BEGIN + SELECT * INTO l_objects FROM cdb_objects WHERE con_id = l_session.con_id AND object_id = i.object_id; + EXCEPTION + WHEN NO_DATA_FOUND THEN + l_objects := NULL; + END; + put_line(l_prefix||key_value('gv$locked_object.id[lmode]', i.object_id||'['||i.locked_mode||':'||get_lmode_text(i.locked_mode)||'] '||l_objects.object_type||' '||l_objects.owner||'.'||l_objects.object_name)); + END LOOP; + -- + put_line(l_prefix||key_value('gv$session.machine', l_session.machine)); + put_line(l_prefix||key_value('gv$session.program', l_session.program)); + -- + IF l_session.sql_id IS NOT NULL THEN + BEGIN + SELECT * INTO l_sql FROM gv$sql WHERE inst_id = p_inst_id AND sql_id = l_session.sql_id AND child_number = l_session.sql_child_number ORDER BY last_active_time DESC FETCH FIRST 1 ROW ONLY; + EXCEPTION + WHEN NO_DATA_FOUND THEN + l_sql := NULL; + END; + put_line(l_prefix||key_value('gv$session.sql_id,child_number sql_text', l_session.sql_id||','||l_session.sql_child_number||' '||l_sql.sql_text)); + put_line(l_prefix||key_value('gv$session.sql_exec_start,exec_id', l_session.sql_exec_start||','||l_session.sql_exec_id)); + END IF; + -- + IF l_session.prev_sql_id IS NOT NULL THEN + BEGIN + SELECT * INTO l_sql FROM gv$sql WHERE inst_id = p_inst_id AND sql_id = l_session.prev_sql_id AND child_number = l_session.prev_child_number ORDER BY last_active_time DESC FETCH FIRST 1 ROW ONLY; + EXCEPTION + WHEN NO_DATA_FOUND THEN + l_sql := NULL; + END; + put_line(l_prefix||key_value('gv$session.prev_sql_id,prev_child_number sql_text', l_session.prev_sql_id||','||l_session.prev_child_number||' '||l_sql.sql_text)); + put_line(l_prefix||key_value('gv$session.prev_exec_start,prev_exec_id', l_session.prev_exec_start||','||l_session.prev_exec_id)); + END IF; + -- + IF l_session.plsql_entry_object_id IS NOT NULL THEN + BEGIN + SELECT * INTO l_procedures FROM dba_procedures WHERE object_id = l_session.plsql_entry_object_id AND subprogram_id = l_session.plsql_entry_subprogram_id; + EXCEPTION + WHEN NO_DATA_FOUND THEN + l_procedures := NULL; + END; + put_line(l_prefix||key_value('gv$session.plsql_entry_subprogram_id,plsql_entry_subprogram_id', l_session.plsql_entry_object_id||','||l_session.plsql_entry_subprogram_id||' ('||l_procedures.object_type||' '||l_procedures.owner||'.'||l_procedures.object_name||' '||l_procedures.procedure_name||')')); + END IF; + -- + IF l_session.plsql_object_id IS NOT NULL THEN + BEGIN + SELECT * INTO l_procedures FROM dba_procedures WHERE object_id = l_session.plsql_object_id AND subprogram_id = l_session.plsql_subprogram_id; + EXCEPTION + WHEN NO_DATA_FOUND THEN + l_procedures := NULL; + END; + put_line(l_prefix||key_value('gv$session.plsql_object_id,plsql_subprogram_id', l_session.plsql_object_id||','||l_session.plsql_subprogram_id||' ('||l_procedures.object_type||' '||l_procedures.owner||'.'||l_procedures.object_name||' '||l_procedures.procedure_name||')')); + END IF; + -- + IF l_session.module||l_session.action IS NOT NULL THEN + put_line(l_prefix||key_value('gv$session.module - action', l_session.module||' - '||l_session.action)); + END IF; + put_line(l_prefix||key_value('gv$session.client_info', l_session.client_info)); + put_line(l_prefix||key_value('gv$session.client_identifier', l_session.client_identifier)); + -- + IF l_session.row_wait_obj# <> -1 THEN + BEGIN + SELECT * INTO l_objects FROM cdb_objects WHERE con_id = l_session.con_id AND object_id = l_session.row_wait_obj#; + EXCEPTION + WHEN NO_DATA_FOUND THEN + l_objects := NULL; + END; + put_line(l_prefix||key_value('gv$session.row_wait_obj#,file#,block#,row# object', l_session.row_wait_obj#||','||l_session.row_wait_file#||','||l_session.row_wait_block#||','||l_session.row_wait_row#||' '||l_objects.object_type||' '||l_objects.owner||'.'||l_objects.object_name)); + END IF; + -- + IF l_session.blocking_session_status = 'VALID' THEN + put_line(l_prefix||key_value('gv$session.blocking_session,@instance (status)', l_session.blocking_session||',@'||l_session.blocking_instance||' ('||l_session.blocking_session_status||') BLOCKER')); + END IF; + IF l_session.final_blocking_session_status = 'VALID' THEN + put_line(l_prefix||key_value('gv$session.final_blocking_session,@instance (status)', l_session.final_blocking_session||',@'||l_session.final_blocking_instance||' ('||l_session.final_blocking_session_status||') ROOT BLOCKER')); + END IF; + -- + put_line(l_prefix||key_value('gv$session.state - wait_class - event', l_session.state||' - '||l_session.wait_class||' - '||l_session.event)); + -- + IF l_session.p1text <> '0' THEN + put_line(l_prefix||key_value('gv$session.p1text:p1', l_session.p1text||':'||l_session.p1)); + END IF; + IF l_session.p2text <> '0' THEN + put_line(l_prefix||key_value('gv$session.p2text:p2', l_session.p2text||':'||l_session.p2)); + END IF; + IF l_session.p3text <> '0' THEN + put_line(l_prefix||key_value('gv$session.p3text:p3', l_session.p3text||':'||l_session.p3)); + END IF; + -- + put_line(l_prefix||key_value('gv$session.logon_time (last_call_et)', l_session.logon_time||' ('||l_session.last_call_et||')')); + put_line(l_prefix||key_value('gv$session.wait_time_micro,wait_time,seconds_in_wait', l_session.wait_time_micro||','||l_session.wait_time||','||l_session.seconds_in_wait)); + -- + BEGIN + SELECT * INTO l_containers FROM v$containers WHERE con_id = l_session.con_id; + EXCEPTION + WHEN NO_DATA_FOUND THEN + l_containers := NULL; + END; + -- + put_line(l_prefix||key_value('v$containers.name(con_id)', l_containers.name||'('||l_session.con_id||')')); + -- + IF l_session.paddr IS NOT NULL THEN + BEGIN + SELECT * INTO l_process FROM gv$process WHERE inst_id = p_inst_id AND addr = l_session.paddr; + EXCEPTION + WHEN NO_DATA_FOUND THEN + l_process := NULL; + END; + put_line(l_prefix||key_value('gv$process.spid', l_process.spid||' (paddr:'||l_session.paddr||')')); + END IF; + -- + IF l_session.taddr IS NOT NULL THEN + BEGIN + SELECT * INTO l_transaction FROM gv$transaction WHERE inst_id = p_inst_id AND addr = l_session.taddr AND ses_addr = l_session.saddr; + EXCEPTION + WHEN NO_DATA_FOUND THEN + l_transaction := NULL; + END; + put_line(l_prefix||key_value('gv$transaction.start_time', l_transaction.start_time||' (taddr:'||l_session.taddr||')')); + END IF; + -- + FOR i IN (SELECT inst_id, sid FROM gv$session WHERE blocking_session_status = 'VALID' AND blocking_instance = p_inst_id AND blocking_session = p_sid ORDER BY wait_time_micro DESC, inst_id, sid) + LOOP + cs_session(i.inst_id, i.sid, p_level + 1); + END LOOP; + EXCEPTION + WHEN NO_DATA_FOUND THEN + NULL; + END cs_session; + -- +BEGIN + :root_blockers := 0; + :blockees := 0; + FOR i IN (SELECT MAX(wait_time_micro) AS max_wait_time_micro, final_blocking_instance, final_blocking_session FROM gv$session WHERE final_blocking_session_status = 'VALID' GROUP BY final_blocking_instance, final_blocking_session ORDER BY 1 DESC) + LOOP + :root_blockers := :root_blockers + 1; + put_line(l_separator); + put_line(l_separator2); + cs_session(i.final_blocking_instance, i.final_blocking_session, 0); + END LOOP; + IF :root_blockers > 0 THEN + put_line(l_separator); + END IF; +END; +/ +SET SERVEROUT OFF; +-- diff --git a/csierra/cs_internal/cs_locks_mon_internal.sql b/csierra/cs_internal/cs_locks_mon_internal.sql new file mode 100644 index 0000000..47bd71c --- /dev/null +++ b/csierra/cs_internal/cs_locks_mon_internal.sql @@ -0,0 +1 @@ +@@cs_locks_internal.sql diff --git a/csierra/cs_internal/cs_max_ash_analytics_footer.sql b/csierra/cs_internal/cs_max_ash_analytics_footer.sql new file mode 100644 index 0000000..30bd8d6 --- /dev/null +++ b/csierra/cs_internal/cs_max_ash_analytics_footer.sql @@ -0,0 +1,15 @@ +PRO
+PRO #01 &&active_sessions_01.  &&series_01.
+PRO #02 &&active_sessions_02.  &&series_02.
+PRO #03 &&active_sessions_03.  &&series_03.
+PRO #04 &&active_sessions_04.  &&series_04.
+PRO #05 &&active_sessions_05.  &&series_05.
+PRO #06 &&active_sessions_06.  &&series_06.
+PRO #07 &&active_sessions_07.  &&series_07.
+PRO #08 &&active_sessions_08.  &&series_08.
+PRO #09 &&active_sessions_09.  &&series_09.
+PRO #10 &&active_sessions_10.  &&series_10.
+PRO #11 &&active_sessions_11.  &&series_11.
+PRO #12 &&active_sessions_12.  &&series_12.
+PRO #13 &&active_sessions_13.  &&series_13.
+PRO 
diff --git a/csierra/cs_internal/cs_null.sql b/csierra/cs_internal/cs_null.sql new file mode 100644 index 0000000..e69de29 diff --git a/csierra/cs_internal/cs_oem_me_sqlperf.sql b/csierra/cs_internal/cs_oem_me_sqlperf.sql new file mode 100644 index 0000000..1313857 --- /dev/null +++ b/csierra/cs_internal/cs_oem_me_sqlperf.sql @@ -0,0 +1,269 @@ +@@&&cs_set_container_to_cdb_root. +-- +COL uom FOR A6; +COL value FOR 999,999,990.0; +COL threshold_violation_factor FOR 999,990.0 HEA 'VIOLATION|FACTOR'; +COL message FOR A200 TRUNC; +-- +PRO +PRO HC SQL - ALERTS for past &&cs_me_days. days (&&cs_stgtab_owner..alerts_hist) +PRO ~~~~~~~~~~~~~~~ +-- +SELECT snap_time AS alert_time, + alert_type||CASE WHEN severity IS NOT NULL THEN ' ['||severity||'] ' END||key_value AS message, + threshold_violation_factor + FROM &&cs_stgtab_owner..alerts_hist + WHERE '&&cs_con_name.' IN (pdb_name, 'CDB$ROOT') + AND sql_id = '&&cs_sql_id.' + AND snap_time > SYSDATE - &&cs_me_days. + ORDER BY + alert_time, + alert_type +/ +-- +COL sql_exec_start FOR A19; +COL sql_exec_id FOR 99999999999; +COL sql_plan_hash_value FOR 9999999999 HEA 'PLAN|HASH_VALUE'; +COL sql_plan_line_id FOR 99999 HEA 'PLAN|LINE'; +COL last_update_time FOR A19; +COL elapsed_seconds FOR 999,990 HEA 'ELAPSED|SECONDS'; +COL sid FOR 99999; +COL serial# FOR 9999999; +COL elapsed_seconds_threshold FOR 999,990 HEA 'SECONDS|THRESHOLD'; +COL times_threshold FOR 999,990.0 HEA 'ELAPSED|FACTOR'; +COL pdb_name FOR A30 TRUNC; +COL source FOR A6; +COL top FOR 990; +-- +PRO +PRO HC SQL - LONG EXECUTIONS top &&cs_me_top. and last &&cs_me_last. for past &&cs_me_days. days (&&cs_stgtab_owner..longexecs_hist_v1) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~ +-- +WITH +snaps AS ( +SELECT sql_exec_start, + sql_exec_id, + sql_plan_hash_value, + sql_plan_line_id, + last_update_time, + elapsed_seconds, + elapsed_seconds_threshold, + times_threshold, + source, + pdb_name, + sid, + serial#, + ROW_NUMBER() OVER (ORDER BY sql_exec_start DESC, sql_exec_id DESC, last_update_time DESC) AS rn1, + ROW_NUMBER() OVER (ORDER BY elapsed_seconds DESC, times_threshold DESC) AS rn2, + ROW_NUMBER() OVER (ORDER BY times_threshold DESC, elapsed_seconds DESC) AS rn3 + FROM &&cs_stgtab_owner..longexecs_hist_v1 + WHERE '&&cs_con_name.' IN (pdb_name, 'CDB$ROOT') + AND sql_id = '&&cs_sql_id.' + AND sql_exec_start > SYSDATE - &&cs_me_days. +) +SELECT sql_exec_start, + CASE WHEN rn2 <= &&cs_me_top. THEN rn2 END AS top, + sql_exec_id, + sql_plan_hash_value, + sql_plan_line_id, + last_update_time, + elapsed_seconds, + elapsed_seconds_threshold, + times_threshold, + source, + pdb_name, + sid, + serial# + FROM snaps + WHERE rn1 <= &&cs_me_last. + OR rn2 <= &&cs_me_top. + OR rn3 <= &&cs_me_top. + ORDER BY + sql_exec_start, + sql_exec_id +/ +-- +COL snap_time FOR A19; +COL awr_snapshot_end_time FOR A19 HEA 'AWR_SNAP_ENDTIME'; +COL db_secs_per_exec_delta FOR 999,990.0 HEA 'SECONDS|PER_EXEC'; +COL threshold_violation_factor FOR 999,990.0 HEA 'REGRESSION|FACTOR'; +COL db_time_regression_01d FOR 999,990.0 HEA 'DB_TIME|REGR_01d|FACTOR'; +COL db_time_regression_07d FOR 999,990.0 HEA 'DB_TIME|REGR_07d|FACTOR'; +COL db_time_regression_30d FOR 999,990.0 HEA 'DB_TIME|REGR_30d|FACTOR'; +COL db_time_regression_60d FOR 999,990.0 HEA 'DB_TIME|REGR_60d|FACTOR'; +COL cpu_time_regression_01d FOR 999,990.0 HEA 'CPU_TIME|REGR_01d|FACTOR'; +COL cpu_time_regression_07d FOR 999,990.0 HEA 'CPU_TIME|REGR_07d|FACTOR'; +COL cpu_time_regression_30d FOR 999,990.0 HEA 'CPU_TIME|REGR_30d|FACTOR'; +COL cpu_time_regression_60d FOR 999,990.0 HEA 'CPU_TIME|REGR_60d|FACTOR'; +COL pdb_name FOR A30 TRUNC; +COL top FOR 990; +COL dummy FOR A2 HEA ''; +-- +PRO +PRO HC SQL - PERFORMANCE REGRESSION top &&cs_me_top. and last &&cs_me_last. for past &&cs_me_days. days (&&cs_stgtab_owner..regress_hist) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- +WITH +snaps AS ( +SELECT snap_time, + GREATEST(db_time_regression_01d, db_time_regression_07d, db_time_regression_30d, db_time_regression_60d, cpu_time_regression_01d, cpu_time_regression_07d, cpu_time_regression_30d, cpu_time_regression_60d) AS threshold_violation_factor, + db_time_regression_01d, + db_time_regression_07d, + db_time_regression_30d, + db_time_regression_60d, + cpu_time_regression_01d, + cpu_time_regression_07d, + cpu_time_regression_30d, + cpu_time_regression_60d, + pdb_name, + db_secs_per_exec_delta, + awr_snapshot_end_time, + ROW_NUMBER() OVER (ORDER BY snap_time DESC, pdb_name) AS rn1, + ROW_NUMBER() OVER (ORDER BY GREATEST(db_time_regression_01d, db_time_regression_07d, db_time_regression_30d, db_time_regression_60d, cpu_time_regression_01d, cpu_time_regression_07d, cpu_time_regression_30d, cpu_time_regression_60d) DESC, db_secs_per_exec_delta DESC) AS rn2 + FROM &&cs_stgtab_owner..regress_hist + WHERE '&&cs_con_name.' IN (pdb_name, 'CDB$ROOT') + AND sql_id = '&&cs_sql_id.' + AND snap_time > SYSDATE - &&cs_me_days. +) +SELECT snap_time, + CASE WHEN rn2 <= &&cs_me_top. THEN rn2 END AS top, + threshold_violation_factor, + db_time_regression_01d, + CASE WHEN db_time_regression_01d = threshold_violation_factor THEN '<-' END AS dummy, + db_time_regression_07d, + CASE WHEN db_time_regression_07d = threshold_violation_factor THEN '<-' END AS dummy, + db_time_regression_30d, + CASE WHEN db_time_regression_30d = threshold_violation_factor THEN '<-' END AS dummy, + db_time_regression_60d, + CASE WHEN db_time_regression_60d = threshold_violation_factor THEN '<-' END AS dummy, + cpu_time_regression_01d, + CASE WHEN cpu_time_regression_01d = threshold_violation_factor THEN '<-' END AS dummy, + cpu_time_regression_07d, + CASE WHEN cpu_time_regression_07d = threshold_violation_factor THEN '<-' END AS dummy, + cpu_time_regression_30d, + CASE WHEN cpu_time_regression_30d = threshold_violation_factor THEN '<-' END AS dummy, + cpu_time_regression_60d, + CASE WHEN cpu_time_regression_60d = threshold_violation_factor THEN '<-' END AS dummy, + pdb_name, + awr_snapshot_end_time + FROM snaps + WHERE rn1 <= &&cs_me_last. + OR rn2 <= &&cs_me_top. + ORDER BY + snap_time, + pdb_name +/ +-- +COL snap_time FOR A19; +COL aas_tot FOR 999,990.0 HEA 'AAS|ON_DB'; +COL aas_tot_threshold FOR 999,990.0 HEA 'AAS_ON_DB|THRESHOLD'; +COL tot_times_threshold FOR 999,990.0 HEA 'AAS_ON_DB|FACTOR'; +COL aas_cpu FOR 999,990.0 HEA 'AAS|ON_CPU'; +COL aas_cpu_threshold FOR 999,990.0 HEA 'AAS_ON_CPU|THRESHOLD'; +COL cpu_times_threshold FOR 999,990.0 HEA 'AAS_ON_CPU|FACTOR'; +COL max_as_tot FOR 9,999,990 HEA 'MAX_CONC|SESSIONS|ON_DB'; +COL max_as_cpu FOR 9,999,990 HEA 'MAX_CONC|SESSIONS|ON_CPU'; +COL pdb_name FOR A30 TRUNC; +COL username FOR A30 TRUNC; +COL top FOR 990; +COL dummy FOR A2 HEA ''; +-- +PRO +PRO HC SQL - HIGH AVERAGE ACTIVE SESSIONS (AAS) top &&cs_me_top. and last &&cs_me_last. for past &&cs_me_days. days (&&cs_stgtab_owner..highaas_hist) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- +WITH +snaps AS ( +SELECT snap_time, + aas_tot, + aas_tot_threshold, + tot_times_threshold, + aas_cpu, + aas_cpu_threshold, + cpu_times_threshold, + max_as_tot, + max_as_cpu, + pdb_name, + username, + ROW_NUMBER() OVER (ORDER BY snap_time DESC, pdb_name) AS rn1, + ROW_NUMBER() OVER (ORDER BY aas_tot DESC, aas_cpu DESC, max_as_tot DESC, max_as_cpu DESC) AS rn2, + ROW_NUMBER() OVER (ORDER BY aas_cpu DESC, aas_tot DESC, max_as_cpu DESC, max_as_tot DESC) AS rn3 + FROM &&cs_stgtab_owner..highaas_hist + WHERE '&&cs_con_name.' IN (pdb_name, 'CDB$ROOT') + AND sql_id = '&&cs_sql_id.' + AND snap_time > SYSDATE - &&cs_me_days. +) +SELECT snap_time, + CASE WHEN rn2 <= &&cs_me_top. THEN rn2 END AS top, + aas_tot, + aas_tot_threshold, + tot_times_threshold, + CASE WHEN tot_times_threshold > aas_tot_threshold AND rn2 <= &&cs_me_top. THEN '<-' END AS dummy, + aas_cpu, + aas_cpu_threshold, + cpu_times_threshold, + CASE WHEN cpu_times_threshold > aas_cpu_threshold AND rn3 <= &&cs_me_top. THEN '<-' END AS dummy, + max_as_tot, + max_as_cpu, + pdb_name, + username + FROM snaps + WHERE rn1 <= &&cs_me_last. + OR rn2 <= &&cs_me_top. + OR rn3 <= &&cs_me_top. + ORDER BY + snap_time, + pdb_name, + username +/ +-- +COL snap_time FOR A19; +COL ms_per_execution FOR 999,999,990 HEA 'MILLISECS|PER_EXEC'; +COL ms_per_exec_threshold FOR 999,999,990 HEA 'MS_PE|THRESHOLD'; +COL aas_tot FOR 999,990.0 HEA 'AAS|ON_DB'; +COL aas_tot_threshold FOR 999,990.0 HEA 'AAS_ON_DB|THRESHOLD'; +COL pdb_name FOR A30 TRUNC; +COL top FOR 990; +COL dummy FOR A2 HEA ''; +-- +PRO +PRO HC SQL - NON SCALABLE PLANS top &&cs_me_top. and last &&cs_me_last. for past &&cs_me_days. days (&&cs_stgtab_owner..non_scalable_plan_hist) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- +WITH +snaps AS ( +SELECT snap_time, + plan_hash_value, + ms_per_execution, + ms_per_exec_threshold, + aas_tot, + aas_tot_threshold, + pdb_name, + ROW_NUMBER() OVER (ORDER BY snap_time DESC, pdb_name) AS rn1, + ROW_NUMBER() OVER (ORDER BY ms_per_execution DESC, aas_tot DESC) AS rn2, + ROW_NUMBER() OVER (ORDER BY aas_tot DESC, ms_per_execution DESC) AS rn3 + FROM &&cs_stgtab_owner..non_scalable_plan_hist + WHERE '&&cs_con_name.' IN (pdb_name, 'CDB$ROOT') + AND sql_id = '&&cs_sql_id.' + AND snap_time > SYSDATE - &&cs_me_days. +) +SELECT snap_time, + CASE WHEN rn2 <= &&cs_me_top. THEN rn2 END AS top, + plan_hash_value, + ms_per_execution, + ms_per_exec_threshold, + CASE WHEN ms_per_execution > ms_per_exec_threshold AND rn2 <= &&cs_me_top. THEN '<-' END AS dummy, + aas_tot, + aas_tot_threshold, + CASE WHEN aas_tot > aas_tot_threshold AND rn3 <= &&cs_me_top. THEN '<-' END AS dummy, + pdb_name + FROM snaps + WHERE rn1 <= &&cs_me_last. + OR rn2 <= &&cs_me_top. + OR rn3 <= &&cs_me_top. + ORDER BY + snap_time, + pdb_name +/ +-- +@@&&cs_set_container_to_curr_pdb. diff --git a/csierra/cs_internal/cs_plans_awr_1.sql b/csierra/cs_internal/cs_plans_awr_1.sql new file mode 100644 index 0000000..9a8b2e4 --- /dev/null +++ b/csierra/cs_internal/cs_plans_awr_1.sql @@ -0,0 +1,18 @@ +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL timestamp FOR A19 HEA 'Timestamp'; +COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +-- +PRO +PRO AWR PLANS (dba_hist_sql_plan) +PRO ~~~~~~~~~ +SELECT TO_CHAR(h.timestamp, '&&cs_datetime_full_format.') timestamp, + plan_hash_value + FROM dba_hist_sql_plan h + WHERE h.sql_id = '&&cs_sql_id.' + AND ('&&cs_plan_hash_value.' IS NULL OR h.plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.')) + AND h.id = 0 + AND h.dbid = TO_NUMBER('&&cs_dbid.') + ORDER BY + h.timestamp +/ diff --git a/csierra/cs_internal/cs_plans_awr_2.sql b/csierra/cs_internal/cs_plans_awr_2.sql new file mode 100644 index 0000000..4a8f7f8 --- /dev/null +++ b/csierra/cs_internal/cs_plans_awr_2.sql @@ -0,0 +1,23 @@ +PRO +PRO AWR PLANS - DISPLAY (dbms_xplan.display_awr) +PRO ~~~~~~~~~~~~~~~~~~~ +SET HEA OFF PAGES 0; +WITH +plans_by_timestamp AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sql_id, + h.plan_hash_value + FROM dba_hist_sql_plan h -- cannot use cdb_hist_sql_plan since DBMS_XPLAN only executes with a PDB (would need to use DBMS_SQL to execue from CDB$ROOT) + WHERE h.sql_id = '&&cs_sql_id.' + AND ('&&cs_plan_hash_value.' IS NULL OR h.plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.')) + AND h.id = 0 + AND h.dbid = TO_NUMBER('&&cs_dbid.') + ORDER BY + h.timestamp +) +SELECT p.plan_table_output + FROM plans_by_timestamp h, + TABLE(DBMS_XPLAN.display_awr(h.sql_id, h.plan_hash_value, NULL, 'ADVANCED')) p +/ +SET HEA ON PAGES 100; +-- diff --git a/csierra/cs_internal/cs_plans_mem_0.sql b/csierra/cs_internal/cs_plans_mem_0.sql new file mode 100644 index 0000000..13157bc --- /dev/null +++ b/csierra/cs_internal/cs_plans_mem_0.sql @@ -0,0 +1,24 @@ +VAR cs_execution_plan CLOB; +EXEC :cs_execution_plan := NULL; +-- SET SERVEROUT ON; +BEGIN + FOR i IN (SELECT plan_table_output FROM TABLE(DBMS_XPLAN.display_cursor(sql_id => '&&cs_sql_id.', cursor_child_no => (SELECT child_number FROM v$sql WHERE sql_id = '&&cs_sql_id.' ORDER BY last_active_time DESC FETCH FIRST 1 ROW ONLY), format => 'TYPICAL -NOTE -PREDICATE'))) + LOOP + IF :cs_execution_plan IS NOT NULL AND LENGTH(i.plan_table_output) > 1 THEN + -- DBMS_OUTPUT.put_line(i.plan_table_output); + DBMS_LOB.writeappend(:cs_execution_plan, LENGTH(i.plan_table_output) + 1, i.plan_table_output||CHR(10)); + END IF; + IF i.plan_table_output LIKE 'Plan hash value:%' THEN + :cs_execution_plan := i.plan_table_output||CHR(10); + END IF; + END LOOP; +END; +/ +PRO +PRO LATEST PLAN IN MEMORY - DISPLAY (dbms_xplan.display_cursor) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +SET HEA OFF PAGES 0; +PRINT :cs_execution_plan +SET HEA ON PAGES 100; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_plans_mem_1.sql b/csierra/cs_internal/cs_plans_mem_1.sql new file mode 100644 index 0000000..d784532 --- /dev/null +++ b/csierra/cs_internal/cs_plans_mem_1.sql @@ -0,0 +1,62 @@ +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL last_active_time FOR A19 HEA 'Last Active Time'; +COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL child_number FOR 999999 HEA 'Child|Number'; +COL object_status FOR A14 HEA 'Object Status'; +COL is_obsolete FOR A8 HEA 'Is|Obsolete'; +COL is_shareable FOR A9 HEA 'Is|Shareable'; +COL is_bind_aware FOR A9 HEA 'Is Bind|Aware'; +COL is_bind_sensitive FOR A9 HEA 'Is Bind|Sensitive'; +COL parsing_schema_name FOR A30 HEA 'Parsing Schema Name'; +-- +PRO +PRO PLANS IN MEMORY (v$sql) +PRO ~~~~~~~~~~~~~~~ +WITH +ranked_child_cursors AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sql_id, + con_id, + child_number, + ROW_NUMBER () OVER (PARTITION BY con_id, plan_hash_value ORDER BY + CASE + WHEN object_status = 'VALID' AND is_obsolete = 'N' AND is_shareable = 'Y' THEN 1 + WHEN object_status = 'VALID' AND is_obsolete = 'N' AND is_shareable = 'N' THEN 2 + WHEN object_status = 'VALID' AND is_obsolete = 'Y' THEN 3 + ELSE 4 + END, + last_active_time DESC) AS row_number, + plan_hash_value, + last_active_time, + object_status, + is_obsolete, + is_shareable, + is_bind_sensitive, + is_bind_aware, + parsing_schema_name + FROM v$sql + WHERE sql_id = '&&cs_sql_id.' + AND ('&&cs_plan_hash_value.' IS NULL OR plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.')) +) +SELECT TO_CHAR(r.last_active_time, '&&cs_datetime_full_format.') AS last_active_time, + r.con_id, + c.name AS pdb_name, + r.child_number, + r.object_status, + r.is_obsolete, + r.is_shareable, + r.is_bind_sensitive, + r.is_bind_aware, + r.parsing_schema_name, + r.plan_hash_value + FROM ranked_child_cursors r, + v$containers c + WHERE r.row_number <= 3 -- up to N most recently active child cursors per plan_hash_value + AND c.con_id = r.con_id + ORDER BY + r.last_active_time, + r.con_id, + r.child_number +/ +-- diff --git a/csierra/cs_internal/cs_plans_mem_2.sql b/csierra/cs_internal/cs_plans_mem_2.sql new file mode 100644 index 0000000..5f321a8 --- /dev/null +++ b/csierra/cs_internal/cs_plans_mem_2.sql @@ -0,0 +1,57 @@ +PRO +PRO PLANS IN MEMORY - DISPLAY (dbms_xplan.display_cursor) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +SET HEA OFF PAGES 0; +WITH +ranked_child_cursors AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.con_id, + sql_id, + child_number, + ROW_NUMBER () OVER (PARTITION BY plan_hash_value ORDER BY + CASE + WHEN object_status = 'VALID' AND is_obsolete = 'N' AND is_shareable = 'Y' THEN 1 + WHEN object_status = 'VALID' AND is_obsolete = 'N' AND is_shareable = 'N' THEN 2 + WHEN object_status = 'VALID' AND is_obsolete = 'Y' THEN 3 + ELSE 4 + END, + last_active_time DESC) row_number, + plan_hash_value, + last_active_time, + object_status, + is_obsolete, + is_shareable, + is_bind_sensitive, + is_bind_aware, + parsing_schema_name, + c.name AS pdb_name + FROM v$sql s, v$containers c + WHERE s.sql_id = '&&cs_sql_id.' + AND ('&&cs_plan_hash_value.' IS NULL OR s.plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.')) + AND c.con_id = s.con_id + ORDER BY + s.last_active_time, + s.con_id, + s.child_number +) +SELECT CASE WHEN p.plan_table_output LIKE 'SQL_ID %' + THEN + 'Last active time:'||TO_CHAR(r.last_active_time, '&&cs_datetime_full_format.')|| + ' '||REPLACE(REPLACE(p.plan_table_output, 'child number ', 'Child_Number:'), 'SQL_ID ', 'SQL_ID:')|| + CASE WHEN r.object_status <> 'VALID' THEN ', Object_Status:'||r.object_status END|| + CASE WHEN r.is_obsolete <> 'N' THEN ', Is_Obsolete' END|| + CASE WHEN r.is_shareable <> 'Y' THEN ', Is_Not_Shareable' END|| + CASE WHEN r.is_bind_aware = 'Y' THEN ', Is_Bind_Aware' END|| + CASE WHEN r.is_bind_sensitive = 'Y' THEN ', Is_Bind_Sensitive' END|| + ', Con_ID:'||TRIM(TO_CHAR(r.con_id))|| + ', PDB_Name:'||r.pdb_name|| + ', Parsing_Schema:'||parsing_schema_name + ELSE p.plan_table_output + END AS plan_table_output + FROM ranked_child_cursors r, + TABLE(DBMS_XPLAN.display_cursor(r.sql_id, r.child_number, 'ADVANCED ALLSTATS LAST')) p + WHERE r.row_number <= 3 -- up to N most recently active child cursors per plan_hash_value +/ +SET HEA ON PAGES 100; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_plans_performance.sql b/csierra/cs_internal/cs_plans_performance.sql new file mode 100644 index 0000000..d27dde2 --- /dev/null +++ b/csierra/cs_internal/cs_plans_performance.sql @@ -0,0 +1,188 @@ +-- cs_plans_performance.sql: called by multiple cs_sprf*, cs_spch*, cs_spbl*, and by: cs_planx.sql, cs_sqlperf.sql and cs_purge_cursor.sql +COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash|Value'; +COL et_ms_per_exec_awr FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Exec|AWR'; +COL et_ms_per_exec_mem FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Exec|CUR'; +COL cpu_ms_per_exec_awr FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Exec|AWR'; +COL cpu_ms_per_exec_mem FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Exec|CUR'; +COL gets_per_exec_awr FOR 999,999,990 HEA 'Buffer|Gets|Per Exec|AWR'; +COL gets_per_exec_mem FOR 999,999,990 HEA 'Buffer|Gets|Per Exec|CUR'; +COL rows_per_exec_awr FOR 999,999,990.000 HEA 'Rows|Processed|Per Exec|AWR'; +COL rows_per_exec_mem FOR 999,999,990.000 HEA 'Rows|Processed|Per Exec|CUR'; +COL executions_awr FOR 999,999,999,990 HEA 'Total|Executions|AWR'; +COL executions_mem FOR 999,999,999,990 HEA 'Total|Executions|CUR'; +COL min_optimizer_cost FOR 9999999999 HEA 'Optimizer|Cost|MIN'; +COL max_optimizer_cost FOR 9999999999 HEA 'Optimizer|Cost|MAX'; +COL nl FOR 999; +COL hj FOR 999; +COL mj FOR 999; +COL p100_et_ms_per_exec FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Exec|MAX'; +COL p99_et_ms_per_exec FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Exec|p99 PCTL'; +COL p97_et_ms_per_exec FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Exec|p97 PCTL'; +COL p95_et_ms_per_exec FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Exec|p95 PCTL'; +COL p100_cpu_ms_per_exec FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Exec|MAX'; +COL p99_cpu_ms_per_exec FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Exec|p99 PCTL'; +COL p97_cpu_ms_per_exec FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Exec|p97 PCTL'; +COL p95_cpu_ms_per_exec FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Exec|p95 PCTL'; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +COL min_time FOR A23 HEA 'Begin Timestamp'; +COL max_time FOR A23 HEA 'End Timestamp'; +COL sep0 FOR A1 HEA '+|!|!|!'; +COL sep1 FOR A1 HEA '+|!|!|!'; +COL sep2 FOR A1 HEA '+|!|!|!'; +COL sep3 FOR A1 HEA '+|!|!|!'; +COL sep4 FOR A1 HEA '+|!|!|!'; +COL sep5 FOR A1 HEA '+|!|!|!'; +COL sep6 FOR A1 HEA '+|!|!|!'; +-- +PRO +PRO PLANS PERFORMANCE - SUMMARY (dba_hist_sqlstat AWR and gv$sql CUR) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +pm AS ( +SELECT con_id, plan_hash_value, operation, + CASE operation WHEN 'NESTED LOOPS' THEN COUNT(DISTINCT id) ELSE 0 END AS nl, + CASE operation WHEN 'HASH JOIN' THEN COUNT(DISTINCT id) ELSE 0 END AS hj, + CASE operation WHEN 'MERGE JOIN' THEN COUNT(DISTINCT id) ELSE 0 END AS mj + FROM gv$sql_plan + WHERE sql_id = '&&cs_sql_id.' + GROUP BY + con_id, plan_hash_value, operation +), +pa AS ( +SELECT con_id, plan_hash_value, operation, + CASE operation WHEN 'NESTED LOOPS' THEN COUNT(DISTINCT id) ELSE 0 END AS nl, + CASE operation WHEN 'HASH JOIN' THEN COUNT(DISTINCT id) ELSE 0 END AS hj, + CASE operation WHEN 'MERGE JOIN' THEN COUNT(DISTINCT id) ELSE 0 END AS mj + FROM dba_hist_sql_plan + WHERE sql_id = '&&cs_sql_id.' + AND dbid = TO_NUMBER('&&cs_dbid.') + GROUP BY + con_id, plan_hash_value, operation +), +pm_pa AS ( +SELECT con_id, plan_hash_value, MAX(nl) AS nl, MAX(hj) AS hj, MAX(mj) AS mj + FROM pm + GROUP BY + con_id, plan_hash_value + UNION +SELECT con_id, plan_hash_value, MAX(nl) AS nl, MAX(hj) AS hj, MAX(mj) AS mj + FROM pa + GROUP BY + con_id, plan_hash_value +), +p AS ( +SELECT con_id, plan_hash_value, MAX(nl) AS nl, MAX(hj) AS hj, MAX(mj) AS mj + FROM pm_pa + GROUP BY + con_id, plan_hash_value +), +phv_perf AS ( +SELECT con_id, plan_hash_value, snap_id, + SUM(elapsed_time_delta)/NULLIF(SUM(executions_delta), 0)/1e3 AS et_ms_per_exec, + SUM(cpu_time_delta)/NULLIF(SUM(executions_delta), 0)/1e3 AS cpu_ms_per_exec + FROM dba_hist_sqlstat + WHERE sql_id = '&&cs_sql_id.' +-- AND executions_delta > 0 -- not needed! + AND optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + GROUP BY + con_id, plan_hash_value, snap_id +), +phv_stats AS ( +SELECT con_id, plan_hash_value, + MAX(et_ms_per_exec) p100_et_ms_per_exec, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY et_ms_per_exec) p99_et_ms_per_exec, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY et_ms_per_exec) p97_et_ms_per_exec, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY et_ms_per_exec) p95_et_ms_per_exec, + MAX(cpu_ms_per_exec) p100_cpu_ms_per_exec, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY cpu_ms_per_exec) p99_cpu_ms_per_exec, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY cpu_ms_per_exec) p97_cpu_ms_per_exec, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY cpu_ms_per_exec) p95_cpu_ms_per_exec + FROM phv_perf + GROUP BY + con_id, plan_hash_value +), +m AS ( +SELECT con_id, plan_hash_value, + SUM(elapsed_time)/NULLIF(SUM(executions), 0)/1e3 AS et_ms_per_exec, + SUM(cpu_time)/NULLIF(SUM(executions), 0)/1e3 AS cpu_ms_per_exec, + SUM(buffer_gets)/NULLIF(SUM(executions), 0) AS gets_per_exec, + SUM(rows_processed)/NULLIF(SUM(executions), 0) AS rows_per_exec, + SUM(executions) AS executions, + MIN(optimizer_cost) AS min_optimizer_cost, + MAX(optimizer_cost) AS max_optimizer_cost, + MIN(last_active_time) AS min_time, + MAX(last_active_time) AS max_time + FROM gv$sql + WHERE sql_id = '&&cs_sql_id.' +-- AND executions >= 0 -- not needed! + AND optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + GROUP BY + con_id, plan_hash_value +), +a AS ( +SELECT h.con_id, h.plan_hash_value, + SUM(h.elapsed_time_delta)/NULLIF(SUM(h.executions_delta), 0)/1e3 AS et_ms_per_exec, + SUM(h.cpu_time_delta)/NULLIF(SUM(h.executions_delta), 0)/1e3 AS cpu_ms_per_exec, + SUM(h.buffer_gets_delta)/NULLIF(SUM(h.executions_delta), 0) AS gets_per_exec, + SUM(h.rows_processed_delta)/NULLIF(SUM(h.executions_delta), 0) AS rows_per_exec, + SUM(h.executions_delta) AS executions, + MIN(h.optimizer_cost) AS min_optimizer_cost, + MAX(h.optimizer_cost) AS max_optimizer_cost, + CAST(MIN(s.begin_interval_time) AS DATE) AS min_time, + CAST(MAX(s.end_interval_time) AS DATE) AS max_time + FROM dba_hist_sqlstat h, + dba_hist_snapshot s + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') +-- AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.sql_id = '&&cs_sql_id.' +-- AND h.executions_delta >= 0 -- not needed! + AND h.optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number + GROUP BY + h.con_id, h.plan_hash_value +) +SELECT '!' AS sep0, + p.plan_hash_value, + '|' AS sep1, + a.et_ms_per_exec AS et_ms_per_exec_awr, + m.et_ms_per_exec AS et_ms_per_exec_mem, + a.cpu_ms_per_exec AS cpu_ms_per_exec_awr, + m.cpu_ms_per_exec AS cpu_ms_per_exec_mem, + '!' AS sep2, + a.executions AS executions_awr, + m.executions AS executions_mem, + '!' AS sep3, + a.gets_per_exec AS gets_per_exec_awr, + m.gets_per_exec AS gets_per_exec_mem, + a.rows_per_exec AS rows_per_exec_awr, + m.rows_per_exec AS rows_per_exec_mem, + '!' AS sep4, + s.p100_et_ms_per_exec, + s.p99_et_ms_per_exec, + s.p97_et_ms_per_exec, + s.p95_et_ms_per_exec, + s.p100_cpu_ms_per_exec, + s.p99_cpu_ms_per_exec, + s.p97_cpu_ms_per_exec, + s.p95_cpu_ms_per_exec, + '!' AS sep5, + LEAST(COALESCE(a.min_optimizer_cost, m.min_optimizer_cost), COALESCE(m.min_optimizer_cost, a.min_optimizer_cost))AS min_optimizer_cost, + GREATEST(COALESCE(a.max_optimizer_cost, m.max_optimizer_cost), COALESCE(m.max_optimizer_cost, a.max_optimizer_cost)) AS max_optimizer_cost, + p.nl, + p.hj, + p.mj, + '!' AS sep6, + c.name AS pdb_name, + LEAST(COALESCE(a.min_time, m.min_time), COALESCE(m.min_time, a.min_time)) AS min_time, + GREATEST(COALESCE(m.max_time, a.max_time), COALESCE(a.max_time, m.max_time)) AS max_time + FROM p, m, a, phv_stats s, v$containers c + WHERE p.plan_hash_value = m.plan_hash_value(+) AND p.con_id = m.con_id(+) + AND p.plan_hash_value = a.plan_hash_value(+) AND p.con_id = a.con_id(+) + AND p.plan_hash_value = s.plan_hash_value(+) AND p.con_id = s.con_id(+) + AND c.con_id = p.con_id + ORDER BY + LEAST(COALESCE(a.et_ms_per_exec, m.et_ms_per_exec), COALESCE(m.et_ms_per_exec, a.et_ms_per_exec)) +/ +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_pr_internal.sql b/csierra/cs_internal/cs_pr_internal.sql new file mode 100644 index 0000000..96e55c1 --- /dev/null +++ b/csierra/cs_internal/cs_pr_internal.sql @@ -0,0 +1,141 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_pr_internal.sql +-- +-- Purpose: Print Table (vertical display of result columns for last query) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/05/16 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Parameter options: +-- +-- 1. directory_path/script_name.sql (with one query) +-- +-- 2. one query +-- +-- 3. null (assumes then last sql executed) +-- +-- Examples: 1. SQL> @cs_pr_internal.sql "/tmp/carlos.sql" +-- +-- 2. SQL> @cs_pr_internal.sql "SELECT * FROM v$database;" +-- +-- 3. SQL> @cs_pr_internal.sql "" +-- +-- Notes: When passing a query which contains single quotes then double them +-- e.g. SQL> @cs_pr_internal.sql "SELECT sid||'',''||serial# AS sid_serial FROM v$session" +-- +-- Modified version of Tanel Poder pr.sql script, which is a mofified version +-- of Tom Kyte printtbl code. +-- +--------------------------------------------------------------------------------------- +-- +-- https://github.com/tanelpoder/tpt-oracle/blob/master/pr.sql +-- Notes: This script is based on Tom Kyte's original printtbl code ( http://asktom.oracle.com ) +-- For coding simplicity (read: lazyness) I'm using custom quotation marks ( q'\ ) so +-- this script works only from Oracle 10gR2 onwards +-- prompt Pivoting output using Tom Kyte's printtab.... +-- +SET TERM OFF; +-- added my_sid to avoid collisons accross concurrent executions of this script +COL my_sid NEW_V my_sid NOPRI; +SELECT SYS_CONTEXT('USERENV', 'SID') AS my_sid FROM DUAL +/ +SPO &&cs_file_name..txt APP; +SPO OFF; +SAVE "/tmp/sql_pr_tmpfile_&&my_sid..sql" REPLACE; +STORE SET "/tmp/set_pr_tmpfile_&&my_sid..sql" REPLACE; +SET TERM ON HEA OFF TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON SERVEROUT ON SIZE UNL TRIM ON LIN 4050; +-- +--PRO +--PRO 1. Enter [directory_path/script_name.sql|"query"|null]: +DEF cs_parameter = '&1.'; +UNDEF 1; +SET TERM OFF; +-- +COL cs_option NEW_V cs_option NOPRI; +COL cs_parameter NEW_V cs_parameter NOPRI; +SELECT CASE + WHEN LOWER(SUBSTR(TRIM(q'[&&cs_parameter.]'), -4, 4)) = '.sql' THEN '1' + WHEN TRIM(q'[&&cs_parameter.]') IS NULL THEN '3' + ELSE '2' + END AS cs_option, + CASE + WHEN LOWER(SUBSTR(TRIM(q'[&&cs_parameter.]'), -4, 4)) = '.sql' THEN TRIM(q'[&&cs_parameter.]') + WHEN TRIM(q'[&&cs_parameter.]') IS NULL THEN '/tmp/sql_pr_tmpfile_&&my_sid..sql' + ELSE TRIM(';' FROM TRIM('"' FROM TRIM(q'[&&cs_parameter.]'))) + END AS cs_parameter + FROM DUAL +/ +-- +SPOOL "/tmp/sql2_pr_tmpfile_&&my_sid..sql"; +PRO &&cs_parameter. +SPOOL OFF; +-- +COL script_name NEW_V script_name NOPRI; +SELECT CASE '&&cs_option.' + WHEN '1' THEN q'[&&cs_parameter.]' + WHEN '2' THEN '/tmp/sql2_pr_tmpfile_&&my_sid..sql' + WHEN '3' THEN '/tmp/sql_pr_tmpfile_&&my_sid..sql' + END AS script_name + FROM DUAL +/ +-- +GET "&&script_name." NOLIST; +SAVE "/tmp/sql_pr_tmpfile_&&my_sid..sql" REPLACE; +-- +0 c clob := q'\ +0 declare +-- +666666 \';; +666666 l_theCursor integer default dbms_sql.open_cursor;; +666666 l_columnValue varchar2(4000);; +666666 l_status integer;; +666666 l_descTbl dbms_sql.desc_tab;; +666666 l_colCnt number;; +666666 l_amount number;; +666666 begin +666666 IF DBMS_LOB.instr(c, ';') = 0 THEN +666666 l_amount := DBMS_LOB.getlength(c);; +666666 ELSE +666666 l_amount := DBMS_LOB.instr(c, ';') - 1;; +666666 END IF;; +666666 c := DBMS_LOB.substr(c, l_amount);; +666666 dbms_sql.parse( l_theCursor, c, dbms_sql.native );; +666666 dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl );; +666666 for i in 1 .. l_colCnt loop +666666 if l_descTbl(i).col_type not in (112, 113) then -- excludes blob and clob (see https://docs.oracle.com/cd/E11882_01/server.112/e41085/sqlqr06002.htm#SQLQR959) +666666 dbms_sql.define_column( l_theCursor, i, +666666 l_columnValue, 4000 );; +666666 end if;; +666666 end loop;; +666666 l_status := dbms_sql.execute(l_theCursor);; +666666 while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop +666666 dbms_output.put_line( '+--------------------------------+' );; +666666 for i in 1 .. l_colCnt loop +666666 if l_descTbl(i).col_type not in (112, 113) then -- excludes blob and clob (see https://docs.oracle.com/cd/E11882_01/server.112/e41085/sqlqr06002.htm#SQLQR959) +666666 dbms_sql.column_value( l_theCursor, i, +666666 l_columnValue );; +666666 dbms_output.put_line +666666 ( '|'||lpad( lower(l_descTbl(i).col_name), +666666 31 ) || ' : ' || l_columnValue );; +666666 end if;; +666666 end loop;; +666666 end loop;; +666666 dbms_output.put_line( '+--------------------------------+' );; +666666 exception +666666 when others then +666666 dbms_output.put_line(dbms_utility.format_error_backtrace);; +666666 raise;; +666666 end;; +SET TERM ON; +SPO &&cs_file_name..txt APP; +/ +-- +@"/tmp/set_pr_tmpfile_&&my_sid..sql"; +GET "&&script_name." NOLIST; +HOST rm "/tmp/set_pr_tmpfile_&&my_sid..sql" "/tmp/sql_pr_tmpfile_&&my_sid..sql" "/tmp/sql2_pr_tmpfile_&&my_sid..sql"; +SET TERM ON; +-- diff --git a/csierra/cs_internal/cs_primary.sql b/csierra/cs_internal/cs_primary.sql new file mode 100644 index 0000000..9592170 --- /dev/null +++ b/csierra/cs_internal/cs_primary.sql @@ -0,0 +1,8 @@ +-- warn if executed not on MOUNTED or READ ONLY +SET TAB OFF FEED OFF ECHO OFF VER OFF; +COL open_mode NEW_V open_mode NOPRI; +COL database_role NEW_V database_role NOPRI; +COL dynamic_script NEW_V dynamic_script NOPRI; +SELECT open_mode, database_role, CASE WHEN open_mode = 'READ WRITE' AND database_role = 'PRIMARY' THEN 'cs_null.sql' ELSE 'cs_primary_warn.sql' END AS dynamic_script FROM v$database +/ +@@&&dynamic_script. diff --git a/csierra/cs_internal/cs_primary_warn.sql b/csierra/cs_internal/cs_primary_warn.sql new file mode 100644 index 0000000..6784a62 --- /dev/null +++ b/csierra/cs_internal/cs_primary_warn.sql @@ -0,0 +1,6 @@ +PRO *** +PRO *** v$database.open_mode : &&open_mode. +PRO *** v$database.database_role: &&database_role. +PRO *** +PRO +PAUSE Hit "return" to continue; or "control-c" then "return" to exit: \ No newline at end of file diff --git a/csierra/cs_internal/cs_print_sql_text.sql b/csierra/cs_internal/cs_print_sql_text.sql new file mode 100644 index 0000000..c04bba4 --- /dev/null +++ b/csierra/cs_internal/cs_print_sql_text.sql @@ -0,0 +1,4 @@ +SET HEA OFF; +-- PRINT :cs_sql_text +PRINT :cs_zapper_managed_sql_banner +SET HEA ON; \ No newline at end of file diff --git a/csierra/cs_internal/cs_recent_sessions.sql b/csierra/cs_internal/cs_recent_sessions.sql new file mode 100644 index 0000000..38c27b0 --- /dev/null +++ b/csierra/cs_internal/cs_recent_sessions.sql @@ -0,0 +1,37 @@ +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL machine FOR A64 HEA 'Machine (Application Server)'; +COL samples FOR 999,999 HEA 'Samples'; +COL min_sample_time FOR A19 HEA 'Min Sample Time'; +COL max_sample_time FOR A19 HEA 'Max Sample Time'; +COL sid_serial# FOR A12 HEA 'Sid,Serial#'; +-- +BREAK ON con_id ON pdb_name ON machine SKIP 1; +-- +PRO +PRO RECENT SESSIONS (v$active_session_history past 15 minutes) +PRO ~~~~~~~~~~~~~~~ +SELECT h.con_id, + c.name AS pdb_name, + h.machine, + COUNT(*) samples, + TO_CHAR(MIN(h.sample_time), '&&cs_datetime_full_format.') AS min_sample_time, + TO_CHAR(MAX(h.sample_time), '&&cs_datetime_full_format.') AS max_sample_time, + h.session_id||','||h.session_serial# AS sid_serial#, + h.sql_plan_hash_value AS plan_hash_value + FROM v$active_session_history h, + v$containers c + WHERE h.sql_id = '&&cs_sql_id.' + AND h.sample_time > SYSDATE - (15/24/60) + AND c.con_id = h.con_id + GROUP BY + h.con_id, + c.name, + h.machine, + h.session_id||','||h.session_serial#, + h.sql_plan_hash_value + ORDER BY + 1, 2, 3, 4 DESC, 5, 6 +/ +-- +CLEAR BREAK; diff --git a/csierra/cs_internal/cs_reset.sql b/csierra/cs_internal/cs_reset.sql new file mode 100644 index 0000000..c7c2472 --- /dev/null +++ b/csierra/cs_internal/cs_reset.sql @@ -0,0 +1,6 @@ +--SET HEA ON LIN 270 PAGES 60 TAB ON FEED ON ECHO OFF VER ON TRIMS OFF TRIM ON TI OFF TIMI OFF LONG 24000 LONGC 240 SERVEROUT OFF; +SET TERM OFF; +@"/tmp/cs_store_set.sql" +CLEAR BREAK COLUMNS COMPUTE; +SET TERM ON; +-- diff --git a/csierra/cs_internal/cs_sample_time_boundaries.sql b/csierra/cs_internal/cs_sample_time_boundaries.sql new file mode 100644 index 0000000..7d40f5f --- /dev/null +++ b/csierra/cs_internal/cs_sample_time_boundaries.sql @@ -0,0 +1,4 @@ +COL cs_sample_time_from NEW_V cs_sample_time_from NOPRI; +COL cs_sample_time_to NEW_V cs_sample_time_to NOPRI; +SELECT TO_CHAR(SYSDATE - &&cs_sqlstat_days., '&&cs_datetime_full_format.') AS cs_sample_time_from, TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS cs_sample_time_to FROM DUAL +/ \ No newline at end of file diff --git a/csierra/cs_internal/cs_sample_time_from_and_to.sql b/csierra/cs_internal/cs_sample_time_from_and_to.sql new file mode 100644 index 0000000..b2878d6 --- /dev/null +++ b/csierra/cs_internal/cs_sample_time_from_and_to.sql @@ -0,0 +1,74 @@ +-- +PRO +COL cs_default_time_window NEW_V cs_default_time_window NOPRI; +SELECT CASE + WHEN TO_NUMBER('&&cs_hours_range_default.') / 24 = ROUND(TO_NUMBER('&&cs_hours_range_default.') / 24) THEN '-'||TRIM(ROUND(TO_NUMBER('&&cs_hours_range_default.') / 24))||'d' + ELSE '-&&cs_hours_range_default.h' + END cs_default_time_window + FROM DUAL +/ +-- +PRO +COL snap_id FOR 9999999; +COL cs_time_from_default NEW_V cs_time_from_default NOPRI; +COL cs_time_to_default NEW_V cs_time_to_default NOPRI; +SELECT TO_CHAR(SYSDATE-(&&cs_hours_range_default./24),'&&cs_datetime_full_format.') cs_time_from_default, TO_CHAR(SYSDATE,'&&cs_datetime_full_format.') cs_time_to_default FROM DUAL +/ +-- +PRO +PRO Current Date and Time is: &&cs_date_time. +PRO Default Time Window: "&&cs_default_time_window." (i.e. FROM="now&&cs_default_time_window." and TO="now") +PRO Time can be entered as: "now", "-Nd" (minus N days), "-Nh" (minus N hours), "-Nm" (minus N minutes), or on partial format "&&cs_datetime_display_format." +PRO +PRO 1. Enter Time FROM: [{&&cs_default_time_window.(&&cs_time_from_default.)}|-Nd|-Nh|-Nm|&&cs_datetime_display_format.] +DEF cs_entered_time_from = '&1.'; +UNDEF 1; +COL cs_sample_time_from NEW_V cs_sample_time_from NOPRI; +SELECT CASE + WHEN '&cs_entered_time_from.' IS NULL THEN '&&cs_time_from_default.' + WHEN LOWER('&cs_entered_time_from.') LIKE '%d%' THEN TO_CHAR(SYSDATE - TO_NUMBER(REPLACE(REPLACE(REPLACE(LOWER('&cs_entered_time_from.'), ' '), '-'), 'd')), '&&cs_datetime_full_format.') + WHEN LOWER('&cs_entered_time_from.') LIKE '%h%' THEN TO_CHAR(SYSDATE - TO_NUMBER(REPLACE(REPLACE(REPLACE(LOWER('&cs_entered_time_from.'), ' '), '-'), 'h') / 24), '&&cs_datetime_full_format.') + WHEN LOWER('&cs_entered_time_from.') LIKE '%m%' THEN TO_CHAR(SYSDATE - TO_NUMBER(REPLACE(REPLACE(REPLACE(LOWER('&cs_entered_time_from.'), ' '), '-'), 'm') / 24 / 60), '&&cs_datetime_full_format.') + WHEN LOWER('&cs_entered_time_from.') LIKE '%now%' THEN TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') + ELSE '&cs_entered_time_from.' + END cs_sample_time_from + FROM DUAL +/ +PRO +PRO 2. Enter Time TO: [{now(&&cs_time_to_default.)}|-Nd|-Nh|-Nm|&&cs_datetime_display_format.] +DEF cs_entered_time_to = '&2.'; +UNDEF 2; +COL cs_sample_time_to NEW_V cs_sample_time_to NOPRI; +SELECT CASE + WHEN '&cs_entered_time_to.' IS NULL THEN '&&cs_time_to_default.' + WHEN LOWER('&cs_entered_time_to.') LIKE '%d%' THEN TO_CHAR(SYSDATE - TO_NUMBER(REPLACE(REPLACE(REPLACE(LOWER('&cs_entered_time_to.'), ' '), '-'), 'd')), '&&cs_datetime_full_format.') + WHEN LOWER('&cs_entered_time_to.') LIKE '%h%' THEN TO_CHAR(SYSDATE - TO_NUMBER(REPLACE(REPLACE(REPLACE(LOWER('&cs_entered_time_to.'), ' '), '-'), 'h') / 24), '&&cs_datetime_full_format.') + WHEN LOWER('&cs_entered_time_to.') LIKE '%m%' THEN TO_CHAR(SYSDATE - TO_NUMBER(REPLACE(REPLACE(REPLACE(LOWER('&cs_entered_time_to.'), ' '), '-'), 'm') / 24 / 60), '&&cs_datetime_full_format.') + WHEN LOWER('&cs_entered_time_to.') LIKE '%now%' THEN TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') + ELSE '&cs_entered_time_to.' + END cs_sample_time_to + FROM DUAL +/ +-- +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +WITH +max_value AS ( +SELECT CASE + WHEN '&&cs_sample_time_to.' = '&&cs_time_to_default.' OR (SYSDATE - TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) / (SYSDATE - TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.')) < 0.1 THEN + TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + ((TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') - TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.')) * TO_NUMBER('&&hAxis_maxValue_forecast.')) + END AS time + FROM DUAL +) +SELECT CASE + WHEN v.time IS NOT NULL THEN + 'maxValue: new Date('|| + TO_CHAR(v.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(v.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(v.time, 'DD')|| /* day */ + ','||TO_CHAR(v.time, 'HH24')|| /* hour */ + ','||TO_CHAR(v.time, 'MI')|| /* minute */ + ','||TO_CHAR(v.time, 'SS')|| /* second */ + '), ' + END AS cs_hAxis_maxValue + FROM max_value v +/ diff --git a/csierra/cs_internal/cs_sessions_by_machine_footer.sql b/csierra/cs_internal/cs_sessions_by_machine_footer.sql new file mode 100644 index 0000000..02053ce --- /dev/null +++ b/csierra/cs_internal/cs_sessions_by_machine_footer.sql @@ -0,0 +1,15 @@ +PRO
+PRO #01  &&series_01.
+PRO #02  &&series_02.
+PRO #03  &&series_03.
+PRO #04  &&series_04.
+PRO #05  &&series_05.
+PRO #06  &&series_06.
+PRO #07  &&series_07.
+PRO #08  &&series_08.
+PRO #09  &&series_09.
+PRO #10  &&series_10.
+PRO #11  &&series_11.
+PRO #12  &&series_12.
+PRO #13  &&series_13.
+PRO 
diff --git a/csierra/cs_internal/cs_set.sql b/csierra/cs_internal/cs_set.sql new file mode 100644 index 0000000..ea1098b --- /dev/null +++ b/csierra/cs_internal/cs_set.sql @@ -0,0 +1,18 @@ +WHENEVER SQLERROR CONTINUE; +SET TERM OFF; +STORE SET "/tmp/cs_store_set.sql" REP; +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; +--ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD"T"HH24:MI:SS.FF3 TZR'; +ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD"T"HH24:MI:SS.FF3'; +ALTER SESSION SET STATISTICS_LEVEL = 'ALL'; +-- ALTER SESSION SET "_px_cdb_view_enabled" = FALSE; -- set at CDB level on IOD (ODIS) +-- +-- setting hidden parameter "_with_subquery" [{OPTIMIZER}|MATERIALIZE|INLINE] +-- workaround for bug: ORA-00600: internal error code, arguments: [qks3tGCL:1]: set to INLINE +-- ALTER SESSION SET "_with_subquery" = INLINE; +-- workaround for ORA-32036: unsupported case for inlining of query name in WITH clause" on DBMS_SQLTUNE.report_sql_monitor: set to MATERIALIZE (or OPTIMIZER) +-- ALTER SESSION SET "_with_subquery" = MATERIALIZE; +-- ALTER SESSION SET "_with_subquery" = OPTIMIZER; -- removing because of (ODIS) +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_set_container_to_cdb_root.sql b/csierra/cs_internal/cs_set_container_to_cdb_root.sql new file mode 100644 index 0000000..a4bd803 --- /dev/null +++ b/csierra/cs_internal/cs_set_container_to_cdb_root.sql @@ -0,0 +1,2 @@ +COMMIT; +ALTER SESSION SET container = CDB$ROOT; diff --git a/csierra/cs_internal/cs_set_container_to_curr_pdb.sql b/csierra/cs_internal/cs_set_container_to_curr_pdb.sql new file mode 100644 index 0000000..644c54f --- /dev/null +++ b/csierra/cs_internal/cs_set_container_to_curr_pdb.sql @@ -0,0 +1,2 @@ +COMMIT; +ALTER SESSION SET CONTAINER = &&cs_con_name.; \ No newline at end of file diff --git a/csierra/cs_internal/cs_set_quota_tools_owner.sql b/csierra/cs_internal/cs_set_quota_tools_owner.sql new file mode 100644 index 0000000..5b1845a --- /dev/null +++ b/csierra/cs_internal/cs_set_quota_tools_owner.sql @@ -0,0 +1,6 @@ +-- gets tablespace +COL cs_default_tablespace NEW_V cs_default_tablespace NOPRI; +SELECT default_tablespace AS cs_default_tablespace FROM dba_users WHERE username = UPPER('&&cs_stgtab_owner.'); +-- set unlimited quota +ALTER USER &&cs_stgtab_owner. QUOTA UNLIMITED ON &&cs_default_tablespace.; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_signature.sql b/csierra/cs_internal/cs_signature.sql new file mode 100644 index 0000000..87aca31 --- /dev/null +++ b/csierra/cs_internal/cs_signature.sql @@ -0,0 +1,216 @@ +COL cs_signature NEW_V cs_signature FOR A20 NOPRI; +COL cs_sql_hv NEW_V cs_sql_hv FOR A5 NOPRI; +COL cs_sql_handle NEW_V cs_sql_handle FOR A20 NOPRI; +COL cs_zapper_managed_sql NEW_V cs_zapper_managed_sql NOPRI; +DEF cs_parsing_schema_name = ''; +COL cs_parsing_schema_name NEW_V cs_parsing_schema_name FOR A128 NOPRI; +DEF cs_first_rows_candidacy = 'Candidacy only applies to KIEV performScanQuery'; +COL cs_first_rows_candidacy NEW_V cs_first_rows_candidacy NOPRI; +DEF cs_application_category = 'UN'; +COL cs_application_category NEW_V cs_application_category NOPRI; +-- +VAR cs_signature NUMBER; +VAR cs_sql_id VARCHAR2(13); +VAR cs_sql_text CLOB; +VAR cs_sql_text_1000 VARCHAR2(1000); +VAR cs_parsing_schema_name VARCHAR2(128); +-- +-- some times sql in v$sqlstats show a signature with value of 0 (e.g. /* populateBucketGCWorkspace */ KPT-35), so we get signature and sql_text from v$sql +BEGIN + IF :cs_signature IS NULL THEN + SELECT sql_id, exact_matching_signature, sql_fulltext, parsing_schema_name INTO :cs_sql_id, :cs_signature, :cs_sql_text, :cs_parsing_schema_name FROM v$sql WHERE sql_id = '&&cs_sql_id.' AND ROWNUM = 1; + IF :cs_signature = 0 THEN + :cs_signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(:cs_sql_text); + END IF; + END IF; +EXCEPTION + WHEN NO_DATA_FOUND THEN + :cs_sql_id := NULL; + :cs_signature := NULL; + :cs_sql_text := NULL; + :cs_parsing_schema_name := NULL; +END; +/ +-- sometimes sql is not in memory but on awr, so we get sql_text from awr and we compute signature +BEGIN + IF :cs_signature IS NULL THEN + SELECT sql_id, sql_text INTO :cs_sql_id, :cs_sql_text FROM dba_hist_sqltext WHERE sql_id = '&&cs_sql_id.' AND ROWNUM = 1; + :cs_signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(:cs_sql_text); + END IF; +EXCEPTION + WHEN NO_DATA_FOUND THEN + :cs_sql_id := NULL; + :cs_signature := NULL; + :cs_sql_text := NULL; +END; +/ +-- most times sql is in memory, so we get signature and sql_text from v$sqlstats +-- some times sql in v$sqlstats show a signature with value of 0 (e.g. /* populateBucketGCWorkspace */ KPT-35), so we compute signature if 0 +-- moving this block to end +BEGIN + IF :cs_signature IS NULL THEN + SELECT sql_id, exact_matching_signature, sql_fulltext INTO :cs_sql_id, :cs_signature, :cs_sql_text FROM v$sqlstats WHERE sql_id = '&&cs_sql_id.' AND ROWNUM = 1; + IF :cs_signature = 0 THEN + :cs_signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(:cs_sql_text); + END IF; + END IF; +EXCEPTION + WHEN NO_DATA_FOUND THEN + :cs_sql_id := NULL; + :cs_signature := NULL; + :cs_sql_text := NULL; +END; +/ +-- next we try to get signature from an existing sql plan baseline +BEGIN + IF :cs_signature IS NULL THEN + SELECT SUBSTR(description, INSTR(description, 'SQL_ID=') + 7, 13), signature, sql_text, parsing_schema_name INTO :cs_sql_id, :cs_signature, :cs_sql_text, :cs_parsing_schema_name FROM dba_sql_plan_baselines WHERE SUBSTR(description, INSTR(description, 'SQL_ID=') + 7, 13) = '&&cs_sql_id.' AND ROWNUM = 1; + IF :cs_signature = 0 THEN + :cs_signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(:cs_sql_text); + END IF; + END IF; +EXCEPTION + WHEN NO_DATA_FOUND THEN + :cs_sql_id := NULL; + :cs_signature := NULL; + :cs_sql_text := NULL; + :cs_parsing_schema_name := NULL; +END; +/ +-- remove trim spaces from sql_text and get first 1000 characters +BEGIN + :cs_sql_text := TRIM(:cs_sql_text); + :cs_sql_text_1000 := SUBSTR(REGEXP_REPLACE(:cs_sql_text, '[^[:print:]]', ''), 1, 1000); +END; +/ +-- compute sql_hv (to be moved to "connects to cdb, execute iod apis, and reconnect to pdb") +WITH +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +SELECT get_sql_hv(:cs_sql_text) AS cs_sql_hv FROM DUAL +/ +-- +-- get signature, sql_handle and parsing_schema into sql variables +SELECT TO_CHAR(:cs_signature) AS cs_signature FROM DUAL; +SELECT sql_handle AS cs_sql_handle FROM dba_sql_plan_baselines WHERE signature = :cs_signature AND ROWNUM = 1; +SELECT :cs_parsing_schema_name AS cs_parsing_schema_name FROM DUAL; +-- +-- get first_rows optimzation candidacy for kiev scans +WITH +kiev_scan AS ( +SELECT + -- returns count of OR predicates such as ' < :5 ) OR' + -- when > 0 then this is a pagination (continue) scan, and when = 0 then this is a begin scan + REGEXP_COUNT(:cs_sql_text, '( >=? | <=? ):\d+ \) OR ?$', 1, 'cm') AS or_count, + -- gets position of 1st character after 2nd ORDER BY + -- then counts columns referenced by the main query's ORDER BY + REGEXP_COUNT(:cs_sql_text, ' (ASC|DESC)(,|$)', REGEXP_INSTR(:cs_sql_text, 'ORDER BY', 1, 2, 1, 'c'), 'cm') AS ic_count, + -- counts "greater than" (or "less than") operands + -- then computes position of first character ')' after bind reference of last "greater than" (or "less than") operand + -- returning the nunber of equality predicates on the prefix portion of the filters (i.e.: after all pagination predicates) + REGEXP_COUNT(:cs_sql_text, '\(\w+ = :\d+ \)', GREATEST(REGEXP_INSTR(:cs_sql_text, '( > | < ):\d+ ', 1, GREATEST(REGEXP_COUNT(:cs_sql_text, '( > | < ):\d+ '), 1), 1), 1)) AS ep_count +FROM DUAL +WHERE :cs_sql_text LIKE '%/* performScanQuery(%,%) %' +) +SELECT CASE + -- WHEN :cs_sql_text LIKE '%(futureWork,resumptionTimestamp)%' + -- OR :cs_sql_text LIKE '%(leaseDecorators,ae_timestamp_index)%' + -- OR :cs_sql_text LIKE '%(WORK_PARTITIONS_BUCKET,WORK_PARTITIONS_BUCKETIdx)%' -- KIEV99A2 FLAMINGOCPDB d41w5f7gnhg2b + -- OR :cs_sql_text LIKE '%(LEASE,state_index)%' -- KIEV99RG IDENTITY_R1_ALPHA an1n9htmx7wss + -- THEN 'Bad CANDIDATE: Known SQL, which requires a specific execution plan' + WHEN :cs_sql_text LIKE '%AND (1 = 1)%' THEN 'Good CANDIDATE: Non-prefixed begin scan (expect a leading full index scan)' + WHEN or_count = 0 THEN 'Good CANDIDATE: Prefixed begin scan or simple continue scan without or_operands (expect a leading range index scan)' + WHEN ic_count = ep_count + 1 THEN 'Good CANDIDATE: Continue scan with: or_operands = '||TRIM(or_count)||', order-by_index_columns = '||TRIM(ic_count)||', prefixed_equality_predicates = '||TRIM(ep_count)||' (expect a leading range index scan)' + WHEN ep_count > 0 THEN 'Poor Candidate: Continue scan with: or_operands = '||TRIM(or_count)||', order-by_index_columns = '||TRIM(ic_count)||', prefixed_equality_predicates = '||TRIM(ep_count)||' (a leading range index scan might be possible but not necessarily efficient)' + WHEN ic_count <> ep_count + 1 THEN 'Bad CANDIDATE: Continue scan with: or_operands = '||TRIM(or_count)||', order-by_index_columns = '||TRIM(ic_count)||', prefixed_equality_predicates = '||TRIM(ep_count)||' (expect some suboptimal plan with a full scan)' + ELSE 'Unexpected' + END AS cs_first_rows_candidacy + FROM kiev_scan +/ +-- +COL dummy NOPRI; +-- +-- connects to cdb, execute iod apis, and reconnect to pdb +-- +@@&&cs_set_container_to_cdb_root. +SELECT dummy + &&cs_skip.,&&cs_tools_schema..IOD_SPM.application_category(p_sql_text => DBMS_LOB.substr(:cs_sql_text, 1000)) AS cs_application_category + &&cs_skip.,&&cs_tools_schema..IOD_SPM.first_rows_candidate(p_sql_text => :cs_sql_text) AS cs_first_rows_candidacy + &&cs_skip.,&&cs_tools_schema..IOD_SPM.get_sql_hv(p_sql_text => :cs_sql_text) AS cs_sql_hv, + CASE WHEN (SELECT COUNT(*) FROM &&cs_tools_schema..zapper_sql_plan_bank WHERE UPPER(:cs_sql_text) LIKE UPPER('%'||sql_text_string||'%')) > 0 THEN 'Y' ELSE 'N' END AS cs_zapper_managed_sql + FROM DUAL + WHERE :cs_sql_text IS NOT NULL +/ +@@&&cs_set_container_to_curr_pdb. +-- +-- gets banner message in case sql is ma managed by zapper +-- +BEGIN + IF '&&cs_zapper_managed_sql.' = 'Y' THEN + :cs_zapper_managed_sql_banner := '***'||CHR(10)||'*** This SQL is managed by ZAPPER'||CHR(10)||'***'||CHR(10)||CHR(10)||:cs_sql_text; + ELSE + :cs_zapper_managed_sql_banner := :cs_sql_text; + END IF; +END; +/ +-- +-- get kiev table name parsing sql_text +DEF cs_kiev_table_name = ''; +COL cs_kiev_table_name NEW_V cs_kiev_table_name NOPRI; +VAR cs_kiev_table_name VARCHAR2(128); +SELECT NVL(SUBSTR(:cs_sql_text, INSTR(:cs_sql_text, '(') + 1, LEAST(INSTR(:cs_sql_text||',', ','), INSTR(:cs_sql_text||')', ')')) - INSTR(:cs_sql_text, '(') - 1), 'null') AS cs_kiev_table_name FROM DUAL WHERE :cs_sql_text LIKE '%/* %(%) %*/%'; +EXEC :cs_kiev_table_name := '&&cs_kiev_table_name.'; +-- +-- get table owner and name out of sql_area (object dependencies) +DEF table_owner = ''; +DEF table_name = ''; +COL table_owner NEW_V table_owner NOPRI; +COL table_name NEW_V table_name NOPRI; +SELECT owner AS table_owner, table_name FROM dba_tables WHERE table_name = UPPER('&&cs_kiev_table_name.') ORDER BY num_rows DESC NULLS LAST FETCH FIRST 1 ROW ONLY; +-- /* kiev SQL references one table (most of the cases). if SQL references more than one table then only was is returned */ +-- SELECT d.to_owner AS table_owner, +-- d.to_name AS table_name +-- FROM v$sqlarea a, +-- v$object_dependency d +-- WHERE '&&table_owner.' IS NULL +-- AND a.con_id = TO_NUMBER('&&cs_con_id.') +-- AND a.sql_id = '&&cs_sql_id.' +-- AND d.from_hash = a.hash_value +-- AND d.from_address = a.address +-- AND d.con_id = a.con_id +-- AND d.to_type = 2 +-- AND d.to_name <> 'KIEVGCTEMPTABLE' /* exclude this common kiev table */ +-- ORDER BY d.to_owner, d.to_name -- to make this query deterministic when executed multiple times on same sql_id and con_id +-- FETCH FIRST 1 ROW ONLY; +-- +WITH /* get_table_token */ +v$metricname AS ( +SELECT /*+ NO_MERGE */ + hash_value, address + FROM v$sqlarea +WHERE '&&table_owner.' IS NULL + AND sql_id = '&&cs_sql_id.' + AND con_id = TO_NUMBER('&&cs_con_id.') +) +SELECT o.to_owner AS table_owner, o.to_name AS table_name + FROM v$object_dependency o, + v$metricname s +WHERE '&&table_owner.' IS NULL + AND o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.con_id = TO_NUMBER('&&cs_con_id.') + AND o.to_type = 2 -- table + AND o.to_name <> 'KIEVGCTEMPTABLE' /* exclude this common kiev table */ +ORDER BY o.to_owner, o.to_name -- to make this query deterministic when executed multiple times on same sql_id and con_id +/* kiev SQL references one table (most of the cases). if SQL references more than one table then only was is returned */ +FETCH FIRST 1 ROW ONLY; +-- +-- reset table_owner and table_name columns +COL table_owner PRI; +COL table_name PRI; diff --git a/csierra/cs_internal/cs_snap_id_from_and_to.sql b/csierra/cs_internal/cs_snap_id_from_and_to.sql new file mode 100644 index 0000000..05a3450 --- /dev/null +++ b/csierra/cs_internal/cs_snap_id_from_and_to.sql @@ -0,0 +1,71 @@ +-- +DEF cs_snap_id_from = ''; +DEF cs_snap_id_to = ''; +COL cs_snap_id_from NEW_V cs_snap_id_from NOPRI; +COL cs_snap_id_to NEW_V cs_snap_id_to NOPRI; +-- +SELECT TO_CHAR(snap_id) cs_snap_id_from + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND CAST(begin_interval_time AS DATE) <= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND CAST(end_interval_time AS DATE) > TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND begin_interval_time <> startup_time -- filter out bogus data + AND end_interval_time <> startup_time -- filter out bogus data +/ +SELECT TO_CHAR(snap_id) cs_snap_id_to + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND CAST(begin_interval_time AS DATE) < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND CAST(end_interval_time AS DATE) >= TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND begin_interval_time <> startup_time -- filter out bogus data + AND end_interval_time <> startup_time -- filter out bogus data +/ +SELECT COALESCE('&&cs_snap_id_from.', TO_CHAR(MIN(snap_id))) AS cs_snap_id_from, + COALESCE('&&cs_snap_id_to.', TO_CHAR(MAX(snap_id))) AS cs_snap_id_to + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND begin_interval_time <> startup_time -- filter out bogus data + AND end_interval_time <> startup_time -- filter out bogus data +/ +-- +DEF cs_begin_date_from = '&&cs_sample_time_from.'; +DEF cs_end_date_to = '&&cs_sample_time_to.'; +COL cs_begin_date_from NEW_V cs_begin_date_from NOPRI; +COL cs_end_date_to NEW_V cs_end_date_to NOPRI; +-- +SELECT TO_CHAR(begin_interval_time, '&&cs_datetime_full_format.') cs_begin_date_from + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id = TO_NUMBER('&&cs_snap_id_from.') +/ +SELECT TO_CHAR(end_interval_time, '&&cs_datetime_full_format.') cs_end_date_to + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id = TO_NUMBER('&&cs_snap_id_to.') +/ +-- +COL cs_begin_end_seconds NEW_V cs_begin_end_seconds NOPRI; +SELECT TRIM(TO_CHAR(ROUND((TO_DATE('&&cs_end_date_to.', '&&cs_datetime_full_format.') - TO_DATE('&&cs_begin_date_from.', '&&cs_datetime_full_format.')) * 24 * 3600))) AS cs_begin_end_seconds FROM DUAL +/ +-- +COL cs_from_to_seconds NEW_V cs_from_to_seconds NOPRI; +SELECT TRIM(TO_CHAR(ROUND((TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') - TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.')) * 24 * 3600))) AS cs_from_to_seconds FROM DUAL +/ +-- +COL cs_snap_id_max NEW_V cs_snap_id_max NOPRI; +COL cs_end_interval_time_max NEW_V cs_end_interval_time_max NOPRI; +SELECT TO_CHAR(snap_id) AS cs_snap_id_max, TO_CHAR(end_interval_time, '&&cs_timestamp_full_format.') AS cs_end_interval_time_max + FROM dba_hist_snapshot + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND end_interval_time < SYSTIMESTAMP + ORDER BY + snap_id DESC + FETCH FIRST 1 ROWS ONLY +/ +-- diff --git a/csierra/cs_internal/cs_spbl_create_post.sql b/csierra/cs_internal/cs_spbl_create_post.sql new file mode 100644 index 0000000..d1787ce --- /dev/null +++ b/csierra/cs_internal/cs_spbl_create_post.sql @@ -0,0 +1,125 @@ +--------------------------------------------------------------------------------------- +-- +-- disable baselines on this sql if metadata is corrupt (ORA-13831) +-- +DECLARE + l_plans INTEGER; + l_plans_t INTEGER := 0; + l_description VARCHAR2(500); +BEGIN + FOR i IN (SELECT t.sql_handle, + o.name plan_name, + a.description + FROM sqlobj$plan p, + sqlobj$ o, + sqlobj$auxdata a, + sql$text t + WHERE p.signature = :cs_signature + AND p.obj_type = 2 /* 1=profile, 2=baseline, 3=patch */ + AND p.id = 1 + AND p.other_xml IS NOT NULL + -- plan_hash_value ignoring transient object names (must be same than plan_id for a baseline to be used) + AND p.plan_id <> TO_NUMBER(extractvalue(xmltype(p.other_xml),'/*/info[@type = "plan_hash_2"]')) + AND o.obj_type = 2 /* 1=profile, 2=baseline, 3=patch */ + AND o.signature = p.signature + AND o.plan_id = p.plan_id + AND BITAND(o.flags, 1) = 1 /* enabled */ + AND a.obj_type = 2 /* 1=profile, 2=baseline, 3=patch */ + AND a.signature = p.signature + AND a.plan_id = p.plan_id + AND a.created > TO_DATE('&&creation_time.', '&&cs_datetime_full_format.') - 1/1440 + AND t.signature = p.signature + ORDER BY + t.sql_handle, + o.name) + LOOP + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'NO'); + l_description := TRIM(i.description||' cs_spbl_create.sql ORA-13831 DISABLED='||TO_CHAR(SYSDATE, '&&cs_datetime_full_format.')); + DBMS_OUTPUT.put_line('disable baseline since metadata is corrupt (ORA-13831): '||i.sql_handle||' '||i.plan_name||' '||l_description); + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => l_description); + l_plans_t := l_plans_t + l_plans; + END LOOP; +END; +/ +-- +--------------------------------------------------------------------------------------- +-- +-- disable baselines on this sql if metadata is corrupt (ORA-06512) +-- +DECLARE + l_plans INTEGER; + l_plans_t INTEGER := 0; + l_description VARCHAR2(500); +BEGIN + FOR i IN (SELECT t.sql_handle, + o.name plan_name, + a.description + FROM sys.sqlobj$ o, + sys.sql$text t, + sys.sqlobj$auxdata a + WHERE o.signature = :cs_signature + AND o.obj_type = 2 /* 1=profile, 2=baseline, 3=patch */ + AND BITAND(o.flags, 1) = 1 /* enabled */ + AND t.signature = o.signature + AND a.obj_type = o.obj_type + AND a.signature = o.signature + AND a.plan_id = o.plan_id + AND a.created > TO_DATE('&&creation_time.', '&&cs_datetime_full_format.') - 1/1440 + AND NOT EXISTS + ( SELECT NULL + FROM sys.sqlobj$plan p + WHERE p.signature = o.signature + AND p.obj_type = o.obj_type + AND p.plan_id = o.plan_id + ) + ORDER BY + o.plan_id) + LOOP + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'NO'); + l_description := i.description||' cs_spbl_create.sql ORA-06512 DISABLED='||TO_CHAR(SYSDATE, '&&cs_datetime_full_format.'); + DBMS_OUTPUT.put_line('disable baseline since metadata is corrupt (ORA-06512): '||i.sql_handle||' '||i.plan_name||' '||l_description); + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => l_description); + l_plans_t := l_plans_t + l_plans; + END LOOP; +END; +/ +-- +--------------------------------------------------------------------------------------- +-- +-- fix Corrupt Baseline (DBPERF-6822) +-- +MERGE INTO sys.sqlobj$plan t + USING (SELECT o.signature, + o.category, + o.obj_type, + o.plan_id, + 1 AS id + FROM sys.sqlobj$ o + WHERE o.category = 'DEFAULT' + AND o.obj_type = 2 + AND o.signature = :cs_signature + AND NOT EXISTS ( + SELECT NULL + FROM sys.sqlobj$plan p + WHERE p.signature = o.signature + AND p.category = o.category + AND p.obj_type = o.obj_type + AND p.plan_id = o.plan_id + AND p.id = 1 + ) + AND NOT EXISTS ( + SELECT NULL + FROM sys.sqlobj$data d + WHERE d.signature = o.signature + AND d.category = o.category + AND d.obj_type = o.obj_type + AND d.plan_id = o.plan_id + AND d.comp_data IS NOT NULL + )) s +ON (t.signature = s.signature AND t.category = s.category AND t.obj_type = s.obj_type AND t.plan_id = s.plan_id AND t.id = s.id) +WHEN NOT MATCHED THEN + INSERT (signature, category, obj_type, plan_id, id) + VALUES (s.signature, s.category, s.obj_type, s.plan_id, s.id) +/ +COMMIT +/ \ No newline at end of file diff --git a/csierra/cs_internal/cs_spbl_create_pre.sql b/csierra/cs_internal/cs_spbl_create_pre.sql new file mode 100644 index 0000000..123a96c --- /dev/null +++ b/csierra/cs_internal/cs_spbl_create_pre.sql @@ -0,0 +1,19 @@ +--------------------------------------------------------------------------------------- +-- +-- cleaup unrelated outdated sql tuning sets (created by older versions of this script) +-- +BEGIN + FOR i IN (SELECT created, owner, name FROM wri$_sqlset_definitions WHERE created < SYSDATE - 1 AND name LIKE 'S%' AND statement_count = 1 ORDER BY 1) + LOOP + DBMS_OUTPUT.put_line('dropping unrelated and outdated sts '||i.owner||' '||i.name||' created on '||TO_CHAR(i.created, '&&cs_datetime_full_format.')); + DBMS_SQLTUNE.drop_sqlset(sqlset_name => i.name, sqlset_owner => i.owner); + END LOOP; +END; +/ +-- +-- Oracle Support Document 1276524.1 (ORA-13757: Can't drop SQL Tuning Set) can be found at: https://support.oracle.com/epmos/faces/DocumentDisplay?id=1276524.1 +-- in case of ORA-13757: "SQL Tuning Set" "SQL_DETAIL_1491025646579" owned by user "SYS" is active. +-- select description, created, owner from DBA_SQLSET_REFERENCES where sqlset_name = 'SQL_DETAIL_1491025646579'; +-- exec DBMS_SQLTUNE.DROP_TUNING_TASK('SQL_TUNING_1491025649684'); -- take value from description (e.g.: "created by: SQL Tuning Advisor - task: SQL_TUNING_1491025649684") +-- exec dbms_sqltune.drop_sqlset('SQL_DETAIL_1491025646579','SYS'); +-- diff --git a/csierra/cs_internal/cs_spbl_evolve_internal.sql b/csierra/cs_internal/cs_spbl_evolve_internal.sql new file mode 100644 index 0000000..4b52201 --- /dev/null +++ b/csierra/cs_internal/cs_spbl_evolve_internal.sql @@ -0,0 +1,668 @@ +DECLARE +-- +-- create staging table for baselines if it does not exist +-- + l_count NUMBER; + l_tablespace_name VARCHAR2(128); + l_max_bytes NUMBER; +BEGIN + SELECT COUNT(*) INTO l_count FROM dba_tables WHERE owner = 'C##IOD' AND table_name = 'IOD_STGTAB_BASELINE'; + IF l_count = 0 THEN + SELECT default_tablespace INTO l_tablespace_name FROM dba_users WHERE username = 'C##IOD'; + SELECT NVL(MAX(max_bytes), 0) INTO l_max_bytes FROM dba_ts_quotas WHERE username = 'C##IOD' AND tablespace_name = l_tablespace_name; + IF l_max_bytes <> -1 THEN -- -1 means unlimited + EXECUTE IMMEDIATE 'ALTER USER C##IOD QUOTA UNLIMITED ON '||l_tablespace_name; + END IF; + DBMS_SPM.create_stgtab_baseline(table_name => 'IOD_STGTAB_BASELINE', table_owner => 'C##IOD', tablespace_name => l_tablespace_name); + END IF; +END; +/ +-- +VAR x_report CLOB; +EXEC :x_report := NULL; +SET SERVEROUT ON; +DECLARE + -- + -- this pl/sql block does a spm plan evolution on a sql statement by creating first a whole fresh set of plans on plan history. + -- the core concept is that we need a fresh set of binds captured into their respective plans so the plan evolution has a chance of avoiding false positives. + -- a false positive is a plan which spm evolution suggests it performs better when evaluated using outdated binds (with currently no matching rows). + -- steps: + -- 0. validates the sql has executed at least 5 times since last awr, and that at least 5 seconds have passed since such last awr, then computes sleep between operations. + -- 1. create or recreate a sql plan baseline (enabled and accepted) for whatever is the current plan in use. + -- 2. drop all other plans on plan history (baselines other than current plan) as well as drop all sql profiles and sql patches. + -- 3. add fresh entries on plan history for known awr historical plans (enabled but not accepted) using staging sql profiles. + -- 4. add fresh entries on plan history for all iod historical plans using staging sql profiles. + -- 5. add fresh entries on plan history for known promising cbo hints (enabled but not accepted). + -- 6. execute spm plan evolution accepting plan(s) that perform better than current (while using fresh bind variable values). + -- 7. if some plan(s) was/were evolved then disable baseline for current plan so the evolved plan(s) is/are forced to be used. + -- 8. briefly monitor the performance of the new plan(s) and if it/them under-perform(s) prior plan then disable evolved plan(s) and restore basline for prior plan. + -- + p_sql_id CONSTANT VARCHAR2(13) := :cs_sql_id; + p_signature CONSTANT NUMBER := :cs_signature; + p_sql_text CONSTANT CLOB := :cs_sql_text; + p_kiev_table_name VARCHAR2(128) := :cs_kiev_table_name; + -- + k_begin_time CONSTANT TIMESTAMP(6) := SYSTIMESTAMP; + k_staging_name CONSTANT VARCHAR2(30) := TO_CHAR(k_begin_time, '"S"YYYYMMDD"T"HH24MISS')||'_'||UPPER(p_sql_id); + -- + l_seconds_since_last_awr NUMBER; + l_sleep_seconds NUMBER; + l_current_et_ms_per_exec NUMBER; + l_current_delta_exec_count NUMBER; + l_current_sql_plan_baseline VARCHAR2(128); + l_current_plan_hash_value NUMBER; + l_current_sql_profile VARCHAR2(128); + l_current_sql_patch VARCHAR2(128); + l_basic_filter VARCHAR2(4000); + l_begin_snap NUMBER; + l_end_snap NUMBER; + l_plans PLS_INTEGER; + l_evolved_plans PLS_INTEGER; + l_devolved_plans PLS_INTEGER; + l_verified_plans PLS_INTEGER; + l_sql_handle VARCHAR2(128); + l_current_plan_name VARCHAR2(128); + l_index INTEGER; + l_pos INTEGER; + l_hint VARCHAR2(32767); + l_profile_attr SYS.SQLPROF_ATTR; + l_leading_clause_kiev VARCHAR2(256); + l_name VARCHAR2(128); + l_task_name VARCHAR2(30); + l_execution_name VARCHAR2(30); + l_last_active_time DATE; + -- + PROCEDURE put_line (p_line IN VARCHAR2) + IS + BEGIN + DBMS_OUTPUT.put_line(TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' '||p_line); + END put_line; +BEGIN + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- 0. validates the sql has executed at least 5 times since last awr, and that at least 5 seconds have passed since such last awr, then computes sleep between operations. + -- + -- **************************************************************************************************************************************************************************************************************** + -- + put_line('sql_id:'||p_sql_id); + put_line('signature:'||p_signature); + -- + -- computes a reasonable sleep time in seconds as 5x the average interval between two execution + -- computes current performance as average milliseconds per execution during the past + -- + SELECT w.age_seconds AS seconds_since_last_awr, + s.delta_elapsed_time/GREATEST(s.delta_execution_count,1)/1e3 AS current_et_ms_per_exec, + s.delta_execution_count AS current_delta_exec_count + INTO l_seconds_since_last_awr, l_current_et_ms_per_exec, l_current_delta_exec_count + FROM v$sqlstats s, + (SELECT /*+ MATERIALIZE NO_MERGE GATHER_PLAN_STATISTICS MONITOR */ + ((86400 * EXTRACT(DAY FROM (SYSTIMESTAMP - MAX(end_interval_time))) + (3600 * EXTRACT(HOUR FROM (systimestamp - MAX(end_interval_time)))) + (60 * EXTRACT(MINUTE FROM (systimestamp - MAX(end_interval_time)))) + EXTRACT(SECOND FROM (systimestamp - MAX(end_interval_time))))) AS age_seconds + FROM dba_hist_snapshot + WHERE end_interval_time < SYSTIMESTAMP) w + WHERE sql_id = p_sql_id; + put_line('seconds_since_last_awr:'||l_seconds_since_last_awr); + put_line('current_delta_exec_count:'||l_current_delta_exec_count); + put_line('current_et_ms_per_exec:'||ROUND(l_current_et_ms_per_exec, 3)); + -- + IF l_current_delta_exec_count < 5 THEN + put_line('*** not enough executions:'||l_current_delta_exec_count||' (min is 5)'); + RETURN; + END IF; + IF l_seconds_since_last_awr < 5 THEN + put_line('*** too recent awr snapshot:'||l_seconds_since_last_awr||' seconds (min is 5)'); + RETURN; + END IF; + -- + l_sleep_seconds := CEIL(10 * l_seconds_since_last_awr / NULLIF(l_current_delta_exec_count, 0)); -- during these many seconds we would expect the sql to execute 10x on average + put_line('sleep_seconds (computed):'||l_sleep_seconds); + l_sleep_seconds := GREATEST(l_sleep_seconds, 10); -- sleep at least 10 seconds between changes + put_line('sleep_seconds (adjusted):'||l_sleep_seconds); + -- + -- get current sql_plan_baseline if any, together with plan_hash_value, sql_profile and sql_patch + -- + SELECT sql_plan_baseline, plan_hash_value, sql_profile, sql_patch, 'sql_id = '''||sql_id||''' AND plan_hash_value <> '||plan_hash_value AS basic_filter + INTO l_current_sql_plan_baseline, l_current_plan_hash_value, l_current_sql_profile, l_current_sql_patch, l_basic_filter + FROM v$sql + WHERE sql_id = p_sql_id + ORDER BY + last_active_time DESC + FETCH FIRST 1 ROW ONLY; + -- + put_line('current_plan_hash_value:'||l_current_plan_hash_value); + put_line('current_sql_plan_baseline:'||l_current_sql_plan_baseline); + put_line('current_sql_profile:'||l_current_sql_profile); + put_line('current_sql_patch:'||l_current_sql_patch); + put_line('basic_filter:'||l_basic_filter); + put_line('staging_name:'||k_staging_name); + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- 1. create or recreate a sql plan baseline (enabled and accepted) for whatever is the current plan in use. + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- create or replace sql_plan_baseline + -- + l_plans := + DBMS_SPM.load_plans_from_cursor_cache ( + sql_id => p_sql_id, + plan_hash_value => l_current_plan_hash_value + ); + IF l_plans > 0 THEN + -- + -- get details about new (or re-created) plan + -- + SELECT sql_handle, plan_name + INTO l_sql_handle, l_current_plan_name + FROM dba_sql_Plan_baselines + WHERE signature = p_signature + AND created >= k_begin_time + AND origin = 'MANUAL-LOAD-FROM-CURSOR-CACHE' + AND description IS NULL; + -- + put_line('current_sql_handle:'||l_sql_handle); + put_line('current_plan_name:'||l_current_plan_name); + -- + -- update description for new (or re-created) plan + -- + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => l_current_plan_name, + attribute_name => 'description', + attribute_value => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' PHV='||l_current_plan_hash_value||' STG='||k_staging_name||' USR=&&who_am_i.' + ); + END IF; + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- 2. drop all other plans on plan history (baselines other than current plan) as well as drop all sql profiles and sql patches. + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- drop all plans on plan history other than the one just created for current plan_hash_value + -- this is needed since on plan evolution a plan is executed together with the binds that were caputred at the time the plan was created into plan history, which could be months old + -- + FOR i IN (SELECT sql_handle, plan_name + FROM dba_sql_Plan_baselines + WHERE signature = p_signature + AND created < k_begin_time) + LOOP + -- + -- remove from staging table a possible old version of the plan to be deleted + -- + DELETE C##IOD.IOD_STGTAB_BASELINE + WHERE signature = p_signature + AND sql_handle = i.sql_handle + AND obj_name = i.plan_name; + -- + -- back up the plan to be deleted + -- + l_plans := + DBMS_SPM.pack_stgtab_baseline ( + table_name => 'IOD_STGTAB_BASELINE', + table_owner => 'C##IOD', + sql_handle => i.sql_handle, + plan_name => i.plan_name + ); + put_line('packed plan '||i.plan_name); + -- + -- delete the plan + -- + l_plans := + DBMS_SPM.drop_sql_plan_baseline ( + sql_handle => i.sql_handle, + plan_name => i.plan_name + ); + put_line('dropped plan '||i.plan_name); + END LOOP; + -- + -- drop all profiles + -- + FOR i IN (SELECT name + FROM dba_sql_profiles + WHERE signature = p_signature) + LOOP + DBMS_SQLTUNE.drop_sql_profile ( + name => i.name + ); + put_line('dropped profile '||i.name); + END LOOP; + -- + -- drop all patches + -- + FOR i IN (SELECT name + FROM dba_sql_patches + WHERE signature = p_signature) + LOOP + DBMS_SQLDIAG.drop_sql_patch ( + name => i.name + ); + put_line('dropped patch '||i.name); + END LOOP; + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- 3. add fresh entries on plan history for known awr historical plans (enabled but not accepted) using staging sql profiles. + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- for known plans on awr, create a staging sql profile so it would produce a fresh non-accepted plan on plan history + -- + FOR i IN (WITH + plans AS ( + SELECT plan_hash_value, other_xml, ROW_NUMBER() OVER(PARTITION BY plan_hash_value ORDER BY id) AS rn + FROM dba_hist_sql_plan + WHERE sql_id = p_sql_id + AND plan_hash_value <> l_current_plan_hash_value + AND other_xml IS NOT NULL + ) + SELECT plan_hash_value, other_xml + FROM plans + WHERE rn = 1) + LOOP + put_line('plan_hash_value:'||i.plan_hash_value); + l_index := 1; + l_profile_attr := SYS.SQLPROF_ATTR('BEGIN_OUTLINE_DATA'); + FOR j IN (SELECT x.outline_hint + FROM XMLTABLE('other_xml/outline_data/hint' PASSING XMLTYPE(i.other_xml) COLUMNS outline_hint VARCHAR2(4000) PATH '.') x) + LOOP + l_hint := j.outline_hint; + WHILE l_hint IS NOT NULL + LOOP + l_index := l_index + 1; + l_profile_attr.EXTEND; + IF LENGTH(l_hint) <= 500 THEN + l_profile_attr(l_index) := l_hint; + l_hint := NULL; + ELSE + l_pos := INSTR(SUBSTR(l_hint, 1, 500), ' ', -1); + l_profile_attr(l_index) := SUBSTR(l_hint, 1, l_pos); + l_hint := SUBSTR(l_hint, l_pos); + END IF; + END LOOP; + END LOOP; + l_index := l_index + 1; + l_profile_attr.EXTEND; + l_profile_attr(l_index) := 'END_OUTLINE_DATA'; + -- FOR j IN 1 .. l_index + -- LOOP + -- put_line(l_profile_attr(j)); + -- END LOOP; + -- creates or replace sql_profile + DBMS_SQLTUNE.import_sql_profile( + sql_text => p_sql_text, + profile => l_profile_attr, + name => k_staging_name, + description => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' PHV='||i.plan_hash_value||' USR=&&who_am_i.', + category => 'DEFAULT', + validate => TRUE, + replace => TRUE + ); + put_line('created sql profile for:'||i.plan_hash_value); + -- + -- sleeps a few seconds to allow a non-accepted sql plan baseline to be created out of a sql profile + -- + DBMS_LOCK.sleep(l_sleep_seconds); + -- + -- drop sql profile (after an expected non-accepted sql plan baseline were created) + -- + DBMS_SQLTUNE.drop_sql_profile ( + name => k_staging_name + ); + put_line('dropped sql profile for:'||i.plan_hash_value); + END LOOP; + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- 4. add fresh entries on plan history for all iod historical plans using staging sql profiles. + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- for known plans on iod history, create a staging sql profile so it would produce a fresh non-accepted plan on plan history + -- + FOR i IN (WITH + plans AS ( + SELECT plan_id, other_xml, ROW_NUMBER() OVER(PARTITION BY plan_id ORDER BY id) AS rn + FROM C##IOD.IOD_STGTAB_BASELINE + WHERE signature = p_signature + AND obj_name NOT IN (SELECT plan_name FROM dba_sql_plan_baselines WHERE signature = p_signature) + AND other_xml IS NOT NULL + ) + SELECT plan_id, other_xml + FROM plans + WHERE rn = 1) + LOOP + put_line('plan_id:'||i.plan_id); + l_index := 1; + l_profile_attr := SYS.SQLPROF_ATTR('BEGIN_OUTLINE_DATA'); + FOR j IN (SELECT x.outline_hint + FROM XMLTABLE('other_xml/outline_data/hint' PASSING XMLTYPE(i.other_xml) COLUMNS outline_hint VARCHAR2(4000) PATH '.') x) + LOOP + l_hint := j.outline_hint; + WHILE l_hint IS NOT NULL + LOOP + l_index := l_index + 1; + l_profile_attr.EXTEND; + IF LENGTH(l_hint) <= 500 THEN + l_profile_attr(l_index) := l_hint; + l_hint := NULL; + ELSE + l_pos := INSTR(SUBSTR(l_hint, 1, 500), ' ', -1); + l_profile_attr(l_index) := SUBSTR(l_hint, 1, l_pos); + l_hint := SUBSTR(l_hint, l_pos); + END IF; + END LOOP; + END LOOP; + l_index := l_index + 1; + l_profile_attr.EXTEND; + l_profile_attr(l_index) := 'END_OUTLINE_DATA'; + -- FOR j IN 1 .. l_index + -- LOOP + -- put_line(l_profile_attr(j)); + -- END LOOP; + -- creates or replace sql_profile + DBMS_SQLTUNE.import_sql_profile( + sql_text => p_sql_text, + profile => l_profile_attr, + name => k_staging_name, + description => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' PLAN_ID='||i.plan_id||' USR=&&who_am_i.', + category => 'DEFAULT', + validate => TRUE, + replace => TRUE + ); + put_line('created sql profile for:'||i.plan_id); + -- + -- sleeps a few seconds to allow a non-accepted sql plan baseline to be created out of a sql profile + -- + DBMS_LOCK.sleep(l_sleep_seconds); + -- + -- drop sql profile (after an expected non-accepted sql plan baseline were created) + -- + FOR j IN (SELECT name -- using a cursor since some other process (i.e.: zapper) would have dropped the sql profile + FROM dba_sql_profiles + WHERE signature = p_signature) + LOOP + DBMS_SQLTUNE.drop_sql_profile ( + name => j.name + ); + put_line('dropped sql profile '||j.name||' for:'||i.plan_id); + END LOOP; + END LOOP; + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- 5. add fresh entries on plan history for known promising cbo hints (enabled but not accepted). + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- prepares leading_clause_kiev + -- + IF p_kiev_table_name IS NOT NULL THEN + l_leading_clause_kiev := ' LEADING(@SEL$1 '||p_kiev_table_name||')'; + END IF; + -- + -- for a set of known cbo hints, create staging sql patches to produce fresh non-accepted plan(s) on plan history + -- + FOR i IN (SELECT 'FIRST_ROWS' AS cbo_hints FROM DUAL + UNION ALL + SELECT 'FIRST_ROWS(1)' AS cbo_hints FROM DUAL + UNION ALL + SELECT 'FIRST_ROWS(1) OPT_PARAM(''_fix_control'' ''5922070:OFF'')'||l_leading_clause_kiev||' OPT_PARAM(''_b_tree_bitmap_plans'' ''FALSE'') OPT_PARAM(''_no_or_expansion'' ''TRUE'')' AS cbo_hints FROM DUAL) + LOOP + put_line('cbo_hints: /*+ '||i.cbo_hints||' */'); + $IF DBMS_DB_VERSION.ver_le_12_1 + $THEN + DBMS_SQLDIAG_INTERNAL.i_create_patch ( + sql_text => p_sql_text, + hint_text => i.cbo_hints, + name => k_staging_name, + description => 'cs_spbl_evolve.sql /*+ '||i.cbo_hints||' */ USR=&&who_am_i.' + ); -- 12c + $ELSE + l_name := + DBMS_SQLDIAG.create_sql_patch ( + sql_text => p_sql_text, + hint_text => i.cbo_hints, + name => k_staging_name, + description => 'cs_spbl_evolve.sql /*+ '||i.cbo_hints||' */ USR=&&who_am_i.' + ); -- 19c + $END + put_line('created sql patch '||k_staging_name||' for: /*+ '||i.cbo_hints||' */'); + -- + -- sleeps a few seconds to allow a non-accepted sql plan baseline to be created out of a sql patch + -- + DBMS_LOCK.sleep(l_sleep_seconds); + -- + -- drop sql patch (after an expected non-accepted sql plan baseline were created) + -- + FOR j IN (SELECT name -- using a cursor since some other process (i.e.: zapper) would have dropped the sql patch + FROM dba_sql_patches + WHERE signature = p_signature) + LOOP + DBMS_SQLDIAG.drop_sql_patch ( + name => j.name + ); + put_line('dropped sql patch '||j.name||' for: /*+ '||i.cbo_hints||' */'); + END LOOP; + END LOOP; + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- 6. execute spm plan evolution accepting plan(s) that perform better than current (while using fresh bind variable values). + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- create spm evolve task + -- + l_task_name := + DBMS_SPM.create_evolve_task ( + sql_handle => l_sql_handle, + time_limit => LEAST(100 * l_sleep_seconds, 1800), -- seconds + task_name => k_staging_name, + description => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' USR=&&who_am_i.' + ); + put_line('task_name:'||l_task_name); + -- + -- execute spm evolve task + -- + l_execution_name := + DBMS_SPM.execute_evolve_task ( + task_name => l_task_name, + execution_name => k_staging_name, + execution_desc => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' USR=&&who_am_i.' + ); + put_line('execution_name:'||l_execution_name); + -- + -- gets report of executed evolve task + -- + :x_report := + DBMS_SPM.report_evolve_task ( + task_name => l_task_name, + type => 'TEXT', -- TEXT, HTML, XML + level => 'TYPICAL', -- BASIC, TYPICAL, ALL + section => 'ALL', -- SUMMARY, FINDINGS, PLANS, INFORMATION, ERRORS, ALL + execution_name => l_execution_name + ); + -- + -- implement spm evolved plans + -- + l_plans := + DBMS_SPM.implement_evolve_task ( + task_name => l_task_name, + execution_name => l_execution_name + ); + put_line('implemented plans:'||l_plans||' (could be overstated)'); + -- + -- drop spm evolve task + -- + DBMS_SPM.drop_evolve_task ( + task_name => l_task_name + ); + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- 7. if some plan(s) was/were evolved then disable baseline for current plan so the evolved plan(s) is/are forced to be used. + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- check if there are actually any evolved plans + -- + SELECT COUNT(*) + INTO l_evolved_plans + FROM dba_sql_Plan_baselines + WHERE signature = p_signature + AND plan_name <> l_current_plan_name + AND created >= k_begin_time + AND origin <> 'MANUAL-LOAD-FROM-CURSOR-CACHE' + AND accepted = 'YES' + AND description IS NULL; + put_line('evolved_plans:'||l_evolved_plans); + -- + -- if there were evolved plan(s) then disable current plan and verify performance of new plan(s) + -- + IF l_evolved_plans > 0 THEN + l_last_active_time := SYSDATE; + -- + -- disable current plan and sleep + -- + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => l_current_plan_name, + attribute_name => 'enabled', + attribute_value => 'NO' + ); + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => l_current_plan_name, + attribute_name => 'description', + attribute_value => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' PHV='||l_current_plan_hash_value||' STG='||k_staging_name||' USR=&&who_am_i. DISABLED' + ); + put_line('disabled current_plan_name:'||l_current_plan_name); + -- + -- sleeps a few seconds to allow evolved plan(s) to spin some executions + -- + DBMS_LOCK.sleep(2 * l_sleep_seconds); + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- 8. briefly monitor the performance of the new plan(s) and if it/them under-perform(s) prior plan then disable evolved plan(s) and restore basline for prior plan. + -- + -- **************************************************************************************************************************************************************************************************************** + -- + -- verifies the performance of evolved plans and if worse than current plan then disable (devolve) + -- + l_devolved_plans := 0; + l_verified_plans := 0; + FOR i IN (SELECT sql_plan_baseline, plan_hash_value, + SUM(executions) AS executions, + SUM(elapsed_time)/GREATEST(SUM(executions),1)/1e3 AS et_ms_per_exec + FROM v$sql + WHERE sql_id = p_sql_id + AND sql_plan_baseline IS NOT NULL + AND sql_plan_baseline <> l_current_sql_plan_baseline + AND last_active_time >= l_last_active_time + GROUP BY + sql_plan_baseline, plan_hash_value) + LOOP + put_line('plan:'||i.sql_plan_baseline||' phv:'||i.plan_hash_value||' executions:'||i.executions||' et_ms_per_exec:'||i.et_ms_per_exec); + -- + -- if new plan has no executions or its performance is worse than current then disable it + -- + IF i.executions = 0 OR i.et_ms_per_exec > l_current_et_ms_per_exec THEN + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => i.sql_plan_baseline, + attribute_name => 'enabled', + attribute_value => 'NO' + ); + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => i.sql_plan_baseline, + attribute_name => 'description', + attribute_value => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' PHV='||i.plan_hash_value||'EXEC='||i.executions||' MS_PER_EXEC:'||ROUND(i.et_ms_per_exec, 3)||' USR=&&who_am_i. DISABLED' + ); + put_line('disabled evolved_plan_name:'||i.sql_plan_baseline); + l_devolved_plans := l_devolved_plans + l_plans; + ELSE -- evolved plan had some executions and its performance is better than current + -- + -- document this plan has been evolved (and verified) + -- + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => i.sql_plan_baseline, + attribute_name => 'description', + attribute_value => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' PHV='||i.plan_hash_value||' EXECS='||i.executions||' MS_PER_EXEC:'||ROUND(i.et_ms_per_exec, 3)||' USR=&&who_am_i. VERIFIED EVOLVED' + ); + put_line('verified evolved_plan_name:'||i.sql_plan_baseline); + l_verified_plans := l_verified_plans + l_plans; + END IF; + END LOOP; + put_line('devolved_plans:'||l_devolved_plans); + put_line('verified_plans:'||l_verified_plans); + -- + -- if none of the evolved plans passed verification then re-enable current plan + -- + IF l_verified_plans = 0 THEN + -- + -- re-enable current plan + -- + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => l_current_plan_name, + attribute_name => 'enabled', + attribute_value => 'YES' + ); + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => l_current_plan_name, + attribute_name => 'description', + attribute_value => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' PHV='||l_current_plan_hash_value||' STG='||k_staging_name||' USR=&&who_am_i. RE-ENABLED' + ); + put_line('re-enabled current_plan_name:'||l_current_plan_name); + END IF; + -- + -- disable any other evolved plan that was not verified + -- + FOR i IN (SELECT plan_name + FROM dba_sql_Plan_baselines + WHERE signature = p_signature + AND created >= k_begin_time + AND plan_name <> l_current_plan_name + AND origin <> 'MANUAL-LOAD-FROM-CURSOR-CACHE' + AND description IS NULL + AND accepted = 'YES' + AND enabled = 'YES') + LOOP + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => i.plan_name, + attribute_name => 'enabled', + attribute_value => 'NO' + ); + l_plans := + DBMS_SPM.alter_sql_plan_baseline ( + sql_handle => l_sql_handle, + plan_name => i.plan_name, + attribute_name => 'description', + attribute_value => 'cs_spbl_evolve.sql SQL_ID='||p_sql_id||' USR=&&who_am_i. UNVERIFIED DISABLED' + ); + put_line('disabled unverified plan_name:'||i.plan_name); + END LOOP; + END IF; +END; +/ +-- +SET HEA OFF; +PRINT x_report; +SET HEA ON; +SET SERVEROUT OFF; diff --git a/csierra/cs_internal/cs_spbl_internal_list.sql b/csierra/cs_internal/cs_spbl_internal_list.sql new file mode 100644 index 0000000..7f72620 --- /dev/null +++ b/csierra/cs_internal/cs_spbl_internal_list.sql @@ -0,0 +1,102 @@ +@@&&stgtab_sqlbaseline_script. +-- +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL created FOR A26 HEA 'Created'; +COL plan_name FOR A30 HEA 'Plan Name'; +COL origin FOR A29 HEA 'Origin'; +COL ori FOR 999 HEA 'Ori'; +COL timestamp FOR A19 HEA 'Timestamp'; +COL last_executed FOR A19 HEA 'Last Executed'; +COL last_modified FOR A19 HEA 'Last Modified'; +COL last_verified FOR A19 HEA 'Last Verified'; +COL description FOR A100 HEA 'Description' WOR; +COL executions FOR 999,999,990 HEA 'Executions'; +COL et_per_exec_ms FOR 999,999,990.000 HEA 'Elapsed Time|AVG (ms)'; +COL cpu_per_exec_ms FOR 999,999,990.000 HEA 'CPU Time|AVG (ms)'; +COL buffers_per_exec FOR 999,999,999,990 HEA 'Buffer Gets|AVG'; +COL reads_per_exec FOR 999,999,999,990 HEA 'Disk Reads|AVG'; +COL rows_per_exec FOR 999,999,999,990 HEA 'Rows Processed|AVG'; +COL elapsed_time FOR 999,999,999,999,990 HEA 'Elapsed Time|Total (us)'; +COL cpu_time FOR 999,999,999,999,990 HEA 'CPU Time|Total (us)'; +COL buffer_gets FOR 999,999,999,990 HEA 'Buffer Gets|Total'; +COL disk_reads FOR 999,999,999,990 HEA 'Disk Reads|Total'; +COL rows_processed FOR 999,999,999,990 HEA 'Rows Processed|Total'; +COL category FOR A10 HEA 'Category' TRUNC; +COL obj_plan FOR A10 HEA 'Obj Plan'; +COL comp_data FOR A10 HEA 'Comp Data'; +COL enabled FOR A10 HEA 'Enabled'; +COL accepted FOR A10 HEA 'Accepted'; +COL fixed FOR A10 HEA 'Fixed' PRI; +COL reproduced FOR A10 HEA 'Reproduced'; +COL autopurge FOR A10 HEA 'Autopurge'; +COL adaptive FOR A10 HEA 'Adaptive'; +COL plan_id FOR 999999999990 HEA 'Plan ID'; +COL plan_hash_2 FOR 999999999990 HEA 'Plan Hash 2'; +COL plan_hash FOR 999999999990 HEA 'Plan Hash'; +COL plan_hash_full FOR 999999999990 HEA 'Plan Hash|Full'; +COL outline_hint FOR A125 HEA 'CBO Hints'; +-- +PRO +PRO SQL PLAN BASELINES - LIST (dba_sql_plan_baselines) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT TO_CHAR(s.created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + TO_CHAR(s.last_executed, '&&cs_datetime_full_format.') AS last_executed, + TO_CHAR(s.last_verified, '&&cs_datetime_full_format.') AS last_verified, + s.con_id, + c.name AS pdb_name, + s.plan_name, + &&cs_skip. CASE WHEN s.con_id > 2 THEN (CASE WHEN (SELECT COUNT(*) FROM sys.sqlobj$ o, sys.sqlobj$plan p WHERE o.signature = s.signature AND o.obj_type = 2 AND o.name = s.plan_name AND p.signature = o.signature AND p.obj_type = o.obj_type AND p.plan_id = o.plan_id) = 0 THEN 'NO' ELSE 'YES' END) END AS obj_plan, + &&cs_skip. CASE WHEN s.con_id > 2 THEN (CASE WHEN (SELECT COUNT(*) FROM sys.sqlobj$ o, sys.sqlobj$data d WHERE o.signature = s.signature AND o.obj_type = 2 AND o.name = s.plan_name AND d.signature = o.signature AND d.obj_type = o.obj_type AND d.plan_id = o.plan_id AND d.comp_data IS NOT NULL) = 0 THEN 'NO' ELSE 'YES' END) END AS comp_data, + s.enabled, s.accepted, s.fixed, s.reproduced, s.autopurge, s.adaptive, + s.origin, + s.description + FROM cdb_sql_plan_baselines s, + v$containers c + WHERE s.signature = :cs_signature + AND c.con_id = s.con_id + ORDER BY + s.created, s.last_modified, s.last_executed, s.con_id, s.plan_name +/ +PRO Note: If Obj Plan and Comp Data are both NO then Baseline is Corrupt +-- +PRO +PRO SQL PLAN BASELINES - PERFORMANCE (dba_sql_plan_baselines) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT TO_CHAR(s.created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + s.con_id, + c.name AS pdb_name, + s.plan_name, + &&cs_skip. CASE WHEN s.con_id > 2 THEN (CASE WHEN (SELECT COUNT(*) FROM sys.sqlobj$ o, sys.sqlobj$plan p WHERE o.signature = s.signature AND o.obj_type = 2 AND o.name = s.plan_name AND p.signature = o.signature AND p.obj_type = o.obj_type AND p.plan_id = o.plan_id) = 0 THEN 'NO' ELSE 'YES' END) END AS obj_plan, + &&cs_skip. CASE WHEN s.con_id > 2 THEN (CASE WHEN (SELECT COUNT(*) FROM sys.sqlobj$ o, sys.sqlobj$data d WHERE o.signature = s.signature AND o.obj_type = 2 AND o.name = s.plan_name AND d.signature = o.signature AND d.obj_type = o.obj_type AND d.plan_id = o.plan_id AND d.comp_data IS NOT NULL) = 0 THEN 'NO' ELSE 'YES' END) END AS comp_data, + s.enabled, s.accepted, s.fixed, s.reproduced, s.autopurge, s.adaptive, + s.origin, + s.elapsed_time/GREATEST(s.executions,1)/1e3 AS et_per_exec_ms, + s.cpu_time/GREATEST(s.executions,1)/1e3 AS cpu_per_exec_ms, + s.buffer_gets/GREATEST(s.executions,1) AS buffers_per_exec, + s.disk_reads/GREATEST(s.executions,1) AS reads_per_exec, + s.rows_processed/GREATEST(s.executions,1) AS rows_per_exec, + s.executions, + s.elapsed_time, + s.cpu_time, + s.buffer_gets, + s.disk_reads, + s.rows_processed + FROM cdb_sql_plan_baselines s, + v$containers c + WHERE s.signature = :cs_signature + AND c.con_id = s.con_id + ORDER BY + s.created, s.last_modified, s.con_id, s.plan_name +/ +PRO Note: If Obj Plan and Comp Data are both NO then Baseline is Corrupt +-- +PRO +PRO SQL PLAN BASELINES - IDS (dba_sql_plan_baselines) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~ +@@&&list_sqlbaseline_script. +-- +DEF cs_obj_type = '2'; +@@&&cs_list_cbo_hints_b. diff --git a/csierra/cs_internal/cs_spbl_internal_list_debug.sql b/csierra/cs_internal/cs_spbl_internal_list_debug.sql new file mode 100644 index 0000000..5914db0 --- /dev/null +++ b/csierra/cs_internal/cs_spbl_internal_list_debug.sql @@ -0,0 +1,57 @@ +-- only works from PDB. do not use CONTAINERS(table_name) since it causes ORA-00600: internal error code, arguments: [kkdolci1], [], [], [], [], [], [], +SELECT TO_CHAR(a.created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(a.last_modified, '&&cs_datetime_full_format.') AS last_modified, + o.name AS plan_name, + o.category, + CASE WHEN p.plan_hash_2 IS NULL THEN 'NO' ElSE 'YES' END AS obj_plan, + CASE WHEN d.comp_data IS NULL THEN 'NO' ElSE 'YES' END AS comp_data, + DECODE(BITAND(o.flags, 1), 0, 'NO', 'YES') AS enabled, + DECODE(BITAND(o.flags, 2), 0, 'NO', 'YES') AS accepted, + DECODE(BITAND(o.flags, 4), 0, 'NO', 'YES') AS fixed, + DECODE(BITAND(o.flags, 64), 0, 'YES', 'NO') AS reproduced, + DECODE(BITAND(o.flags, 128), 0, 'NO', 'YES') AS autopurge, + DECODE(BITAND(o.flags, 256), 0, 'NO', 'YES') AS adaptive, + a.origin AS ori, + p.plan_hash, -- normal plan_hash_value + p.plan_hash_2, -- plan_hash_value ignoring transient object names (must be same than plan_id for a baseline to be used) + o.plan_id, + p.plan_hash_full, -- adaptive plan (must be different than plan_hash_2 on loaded plans) + TO_CHAR(p.timestamp, '&&cs_datetime_full_format.') AS timestamp, + a.description + FROM sys.sqlobj$ o, + sys.sqlobj$auxdata a, + sys.sql$text t + OUTER APPLY ( + SELECT TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash"]')) AS plan_hash, -- normal plan_hash_value + TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash_2"]')) AS plan_hash_2, -- plan_hash_value ignoring transient object names (must be same than plan_id for a baseline to be used) + TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash_full"]')) AS plan_hash_full, -- adaptive plan (must be different than plan_hash_2 on loaded plans) + p.timestamp + FROM sys.sqlobj$plan p + WHERE p.signature = o.signature + AND p.category = o.category + AND p.obj_type = o.obj_type + AND p.plan_id = o.plan_id + AND p.other_xml IS NOT NULL + AND ROWNUM = 1 + ) p + OUTER APPLY ( + SELECT d.comp_data + FROM sys.sqlobj$data d + WHERE d.signature = o.signature + AND d.category = o.category + AND d.obj_type = o.obj_type + AND d.plan_id = o.plan_id + AND ROWNUM = 1 + ) d + WHERE o.signature = :cs_signature + AND o.category = 'DEFAULT' + AND o.obj_type = 2 /* 1:profile, 2:baseline, 3:patch */ + AND a.signature = o.signature + AND a.category = o.category + AND a.obj_type = o.obj_type + AND a.plan_id = o.plan_id + AND t.signature = a.signature + ORDER BY + a.created, a.last_modified, o.name +/ +PRO Note: If Obj Plan and Comp Data are both NO then Baseline is Corrupt \ No newline at end of file diff --git a/csierra/cs_internal/cs_spbl_internal_list_simple.sql b/csierra/cs_internal/cs_spbl_internal_list_simple.sql new file mode 100644 index 0000000..3c8aa7c --- /dev/null +++ b/csierra/cs_internal/cs_spbl_internal_list_simple.sql @@ -0,0 +1,16 @@ +SELECT TO_CHAR(b.created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(b.last_modified, '&&cs_datetime_full_format.') AS last_modified, + b.plan_name, + b.enabled, + b.accepted, + b.fixed, + b.reproduced, + b.autopurge, + b.adaptive, + b.origin AS ori, + b.description + FROM dba_sql_plan_baselines b + WHERE b.signature = :cs_signature + ORDER BY + b.created, b.last_modified, b.plan_name +/ \ No newline at end of file diff --git a/csierra/cs_internal/cs_spbl_internal_pack.sql b/csierra/cs_internal/cs_spbl_internal_pack.sql new file mode 100644 index 0000000..3a77c86 --- /dev/null +++ b/csierra/cs_internal/cs_spbl_internal_pack.sql @@ -0,0 +1,16 @@ +PRO +PRO Pack plan: "&&cs_plan_name." +DECLARE + l_plans INTEGER; +BEGIN + FOR i IN (SELECT sql_handle, plan_name + FROM dba_sql_plan_baselines + WHERE signature = TO_NUMBER('&&cs_signature.') + AND plan_name = COALESCE('&&cs_plan_name.', plan_name) + ORDER BY signature, plan_name) + LOOP + DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline WHERE sql_handle = i.sql_handle AND obj_name = i.plan_name; + l_plans := DBMS_SPM.pack_stgtab_baseline(table_name => '&&cs_stgtab_prefix._stgtab_baseline', table_owner => '&&cs_stgtab_owner.', sql_handle => i.sql_handle, plan_name => i.plan_name); + END LOOP; +END; +/ diff --git a/csierra/cs_internal/cs_spbl_internal_plan.sql b/csierra/cs_internal/cs_spbl_internal_plan.sql new file mode 100644 index 0000000..fb42983 --- /dev/null +++ b/csierra/cs_internal/cs_spbl_internal_plan.sql @@ -0,0 +1,7 @@ +PRO +PRO SQL PLAN BASELINES - DISPLAY (dbms_xplan.display_sql_plan_baseline) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- only works from PDB. +SET HEA OFF PAGES 0; +SELECT * FROM TABLE(DBMS_XPLAN.display_sql_plan_baseline('&&cs_sql_handle.', NULL, 'ADVANCED')) WHERE '&&cs_sql_handle.' IS NOT NULL; +SET HEA ON PAGES 100; diff --git a/csierra/cs_internal/cs_spbl_internal_stgtab.sql b/csierra/cs_internal/cs_spbl_internal_stgtab.sql new file mode 100644 index 0000000..15c3220 --- /dev/null +++ b/csierra/cs_internal/cs_spbl_internal_stgtab.sql @@ -0,0 +1,17 @@ +@@cs_set_quota_tools_owner.sql +-- create staging table +DECLARE + l_exists NUMBER; +BEGIN + SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER('&&cs_stgtab_owner.') AND table_name = UPPER('&&cs_stgtab_prefix._stgtab_baseline'); + IF l_exists = 0 THEN + DBMS_SPM.create_stgtab_baseline(table_name => UPPER('&&cs_stgtab_prefix._stgtab_baseline'), table_owner => UPPER('&&cs_stgtab_owner.'), tablespace_name => UPPER('&&cs_default_tablespace.')); + END IF; +END; +/ +-- +PRO +PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_spbl_internal_stgtab_baseline.sql b/csierra/cs_internal/cs_spbl_internal_stgtab_baseline.sql new file mode 100644 index 0000000..bf4e8f7 --- /dev/null +++ b/csierra/cs_internal/cs_spbl_internal_stgtab_baseline.sql @@ -0,0 +1,109 @@ +COL created FOR A26 HEA 'Created'; +COL plan_name FOR A30 HEA 'Plan Name'; +COL origin FOR A29 HEA 'Origin'; +COL timestamp FOR A19 HEA 'Timestamp'; +COL last_executed FOR A19 HEA 'Last Executed'; +COL last_modified FOR A19 HEA 'Last Modified'; +COL description FOR A100 HEA 'Description' WOR; +COL executions FOR 999,999,990 HEA 'Executions'; +COL et_per_exec_ms FOR 999,999,990.000 HEA 'Elapsed Time|AVG (ms)'; +COL cpu_per_exec_ms FOR 999,999,990.000 HEA 'CPU Time|AVG (ms)'; +COL buffers_per_exec FOR 999,999,999,990 HEA 'Buffer Gets|AVG'; +COL reads_per_exec FOR 999,999,999,990 HEA 'Disk Reads|AVG'; +COL rows_per_exec FOR 999,999,999,990 HEA 'Rows Processed|AVG'; +COL elapsed_time FOR 999,999,999,999,990 HEA 'Elapsed Time|Total (us)'; +COL cpu_time FOR 999,999,999,999,990 HEA 'CPU Time|Total (us)'; +COL buffer_gets FOR 999,999,999,990 HEA 'Buffer Gets|Total'; +COL disk_reads FOR 999,999,999,990 HEA 'Disk Reads|Total'; +COL rows_processed FOR 999,999,999,990 HEA 'Rows Processed|Total'; +COL enabled FOR A10 HEA 'Enabled'; +COL accepted FOR A10 HEA 'Accepted'; +COL fixed FOR A10 HEA 'Fixed' PRI; +COL reproduced FOR A10 HEA 'Reproduced'; +COL autopurge FOR A10 HEA 'Autopurge'; +COL adaptive FOR A10 HEA 'Adaptive'; +COL plan_id FOR 999999999990 HEA 'Plan ID'; +COL plan_hash_2 FOR 999999999990 HEA 'Plan Hash 2'; +COL plan_hash FOR 999999999990 HEA 'Plan Hash'; +COL plan_hash_full FOR 999999999990 HEA 'Plan Hash|Full'; +-- +PRO +PRO SQL PLAN BASELINES ON STAGING TABLE - LIST (&&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT TO_CHAR(created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(last_modified, '&&cs_datetime_full_format.') AS last_modified, + TO_CHAR(last_executed, '&&cs_datetime_full_format.') AS last_executed, + obj_name AS plan_name, + DECODE(BITAND(status, 1), 0, 'NO', 'YES') AS enabled, + DECODE(BITAND(status, 2), 0, 'NO', 'YES') AS accepted, + DECODE(BITAND(status, 4), 0, 'NO', 'YES') AS fixed, + DECODE(BITAND(status, 64), 0, 'YES', 'NO') AS reproduced, + DECODE(BITAND(status, 128), 0, 'NO', 'YES') AS autopurge, + DECODE(BITAND(status, 256), 0, 'NO', 'YES') AS adaptive, + origin, + description + FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline + WHERE signature = :cs_signature + AND other_xml IS NOT NULL + ORDER BY + created, last_modified, last_executed, obj_name +/ +-- +PRO +PRO SQL PLAN BASELINES ON STAGING TABLE - PERFORMANCE (&&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT TO_CHAR(created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(last_modified, '&&cs_datetime_full_format.') AS last_modified, + obj_name AS plan_name, + DECODE(BITAND(status, 1), 0, 'NO', 'YES') AS enabled, + DECODE(BITAND(status, 2), 0, 'NO', 'YES') AS accepted, + DECODE(BITAND(status, 4), 0, 'NO', 'YES') AS fixed, + DECODE(BITAND(status, 64), 0, 'YES', 'NO') AS reproduced, + DECODE(BITAND(status, 128), 0, 'NO', 'YES') AS autopurge, + DECODE(BITAND(status, 256), 0, 'NO', 'YES') AS adaptive, + origin, + elapsed_time/GREATEST(executions,1)/1e3 AS et_per_exec_ms, + cpu_time/GREATEST(executions,1)/1e3 AS cpu_per_exec_ms, + buffer_gets/GREATEST(executions,1) AS buffers_per_exec, + disk_reads/GREATEST(executions,1) AS reads_per_exec, + rows_processed/GREATEST(executions,1) AS rows_per_exec, + executions, + elapsed_time, + cpu_time, + buffer_gets, + disk_reads, + rows_processed + FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline + WHERE signature = :cs_signature + AND other_xml IS NOT NULL + ORDER BY + created, last_modified, last_executed, obj_name +/ +-- +PRO +PRO SQL PLAN BASELINES ON STAGING TABLE - IDS (&&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- only works from PDB. do not use CONTAINERS(table_name) since it causes ORA-00600: internal error code, arguments: [kkdolci1], [], [], [], [], [], [], +SELECT TO_CHAR(created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(last_modified, '&&cs_datetime_full_format.') AS last_modified, + obj_name AS plan_name, + DECODE(BITAND(status, 1), 0, 'NO', 'YES') AS enabled, + DECODE(BITAND(status, 2), 0, 'NO', 'YES') AS accepted, + DECODE(BITAND(status, 4), 0, 'NO', 'YES') AS fixed, + DECODE(BITAND(status, 64), 0, 'YES', 'NO') AS reproduced, + DECODE(BITAND(status, 128), 0, 'NO', 'YES') AS autopurge, + DECODE(BITAND(status, 256), 0, 'NO', 'YES') AS adaptive, + origin, + TO_NUMBER(extractvalue(xmltype(other_xml),'/*/info[@type = "plan_hash"]')) plan_hash, -- normal plan_hash_value + TO_NUMBER(extractvalue(xmltype(other_xml),'/*/info[@type = "plan_hash_2"]')) plan_hash_2, -- plan_hash_value ignoring transient object names (must be same than plan_id for a baseline to be used) + plan_id, + TO_NUMBER(extractvalue(xmltype(other_xml),'/*/info[@type = "plan_hash_full"]')) plan_hash_full, -- adaptive plan (must be different than plan_hash_2 on loaded plans) + TO_CHAR(timestamp, '&&cs_datetime_full_format.') timestamp, + description + FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline + WHERE signature = :cs_signature + AND other_xml IS NOT NULL + ORDER BY + created, last_modified, last_executed, obj_name +/ +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_spbl_internal_stgtab_delete.sql b/csierra/cs_internal/cs_spbl_internal_stgtab_delete.sql new file mode 100644 index 0000000..b80dccc --- /dev/null +++ b/csierra/cs_internal/cs_spbl_internal_stgtab_delete.sql @@ -0,0 +1,14 @@ +PRO +PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; +-- +PRO +PRO DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline WHERE signature = COALESCE(TO_NUMBER('&&cs_signature.'), signature) AND obj_name = COALESCE(TRIM('&&cs_plan_name.'), obj_name); +PRO ~~~~~~ +DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline WHERE signature = COALESCE(TO_NUMBER('&&cs_signature.'), signature) AND obj_name = COALESCE(TRIM('&&cs_plan_name.'), obj_name); +PRO +PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_spbl_validate.sql b/csierra/cs_internal/cs_spbl_validate.sql new file mode 100644 index 0000000..98b8c2d --- /dev/null +++ b/csierra/cs_internal/cs_spbl_validate.sql @@ -0,0 +1,71 @@ +PRO +PRO Validate plan: "&&cs_plan_name." +SET SERVEROUT ON; +WHENEVER SQLERROR EXIT FAILURE; +DECLARE + l_plans INTEGER; +BEGIN + FOR i IN (SELECT o.signature, + o.category, + o.obj_type, + o.plan_id, + o.name AS plan_name, + TO_CHAR(a.created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(a.last_modified, '&&cs_datetime_full_format.') AS last_modified, + DECODE(BITAND(o.flags, 1), 0, 'NO', 'YES') AS enabled, + DECODE(BITAND(o.flags, 2), 0, 'NO', 'YES') AS accepted, + DECODE(BITAND(o.flags, 4), 0, 'NO', 'YES') AS fixed, + DECODE(BITAND(o.flags, 64), 0, 'YES', 'NO') AS reproduced, + DECODE(BITAND(o.flags, 128), 0, 'NO', 'YES') AS autopurge, + DECODE(BITAND(o.flags, 256), 0, 'NO', 'YES') AS adaptive, + a.origin AS ori, + t.sql_handle, + t.sql_text, + a.description + FROM sys.sqlobj$ o, + sys.sqlobj$auxdata a, + sys.sql$text t + WHERE o.signature = :cs_signature + AND o.category = 'DEFAULT' + AND o.obj_type = 2 /* 1:profile, 2:baseline, 3:patch */ + AND a.signature = o.signature + AND a.category = o.category + AND a.obj_type = o.obj_type + AND a.plan_id = o.plan_id + AND t.signature = o.signature + AND NOT EXISTS ( + SELECT NULL + FROM sys.sqlobj$plan p + WHERE p.signature = o.signature + AND p.category = o.category + AND p.obj_type = o.obj_type + AND p.plan_id = o.plan_id + AND p.id = 1 + AND ROWNUM = 1 + ) + AND NOT EXISTS ( + SELECT NULL + FROM sys.sqlobj$data d + WHERE d.signature = o.signature + AND d.category = o.category + AND d.obj_type = o.obj_type + AND d.plan_id = o.plan_id + AND d.comp_data IS NOT NULL + AND ROWNUM = 1 + ) + ORDER BY + o.signature, o.category, o.obj_type, o.plan_id) + LOOP + IF i.enabled = 'YES' THEN + DBMS_OUTPUT.put_line('Disable Plan: '||i.plan_name); + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'NO'); + END IF; + DBMS_OUTPUT.put_line('Fixing Corrupt Plan: '||i.plan_name); + DELETE sys.sqlobj$plan WHERE signature = i.signature AND category = i.category AND obj_type = i.obj_type AND plan_id = i.plan_id AND id = 1; + INSERT INTO sys.sqlobj$plan (signature, category, obj_type, plan_id, id) VALUES (i.signature, i.category, i.obj_type, i.plan_id, 1); + END LOOP; + COMMIT; +END; +/ +WHENEVER SQLERROR CONTINUE; +SET SERVEROUT OFF; \ No newline at end of file diff --git a/csierra/cs_internal/cs_spch_internal_category.sql b/csierra/cs_internal/cs_spch_internal_category.sql new file mode 100644 index 0000000..c2c1ab2 --- /dev/null +++ b/csierra/cs_internal/cs_spch_internal_category.sql @@ -0,0 +1,16 @@ +BEGIN + FOR i IN (SELECT name + FROM dba_sql_patches + WHERE signature = :cs_signature + AND name = NVL('&&cs_name.', name) + ORDER BY name) + LOOP + $IF DBMS_DB_VERSION.ver_le_12_1 + $THEN + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'CATEGORY', value => '&&cs_category.'); -- 12c + $ELSE + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'CATEGORY', attribute_value => '&&cs_category.'); -- 19c + $END + END LOOP; +END; +/ \ No newline at end of file diff --git a/csierra/cs_internal/cs_spch_internal_create.sql b/csierra/cs_internal/cs_spch_internal_create.sql new file mode 100644 index 0000000..a30e2aa --- /dev/null +++ b/csierra/cs_internal/cs_spch_internal_create.sql @@ -0,0 +1,16 @@ +DECLARE + l_name VARCHAR2(64); + l_sql_text CLOB := :cs_sql_text; -- for some bizarre reason we cannot simply pass :cs_sql_text into DBMS_SQLDIAG.create_sql_patch! +BEGIN + -- see also PLSQL_CCFLAGS + $IF DBMS_DB_VERSION.ver_le_12_1 + $THEN + --DBMS_SQLDIAG_INTERNAL.i_create_patch(sql_id => '&&cs_sql_id.', hint_text => q'[&&hints_text.]', name => 'cs_&&cs_sql_id.', description => q'[cs_spch_create.sql /*+ &&hints_text. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 12c (this api requires the sql to be in memory) + DBMS_SQLDIAG_INTERNAL.i_create_patch(sql_text => l_sql_text, hint_text => q'[&&hints_text.]', name => 'cs_&&cs_sql_id._'||TO_CHAR(SYSDATE, 'MMDD_HH24MISS'), description => q'[cs_spch_create.sql /*+ &&hints_text. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 12c + $ELSE + --l_name := DBMS_SQLDIAG.create_sql_patch(sql_id => '&&cs_sql_id.', hint_text => q'[&&hints_text.]', name => 'cs_&&cs_sql_id.', description => q'[cs_spch_create.sql /*+ &&hints_text. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 19c (this api requires the sql to be in memory) + l_name := DBMS_SQLDIAG.create_sql_patch(sql_text => l_sql_text, hint_text => q'[&&hints_text.]', name => 'cs_&&cs_sql_id._'||TO_CHAR(SYSDATE, 'MMDD_HH24MISS'), description => q'[cs_spch_create.sql /*+ &&hints_text. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 19c + $END + NULL; +END; +/ \ No newline at end of file diff --git a/csierra/cs_internal/cs_spch_internal_drop.sql b/csierra/cs_internal/cs_spch_internal_drop.sql new file mode 100644 index 0000000..7a2cc70 --- /dev/null +++ b/csierra/cs_internal/cs_spch_internal_drop.sql @@ -0,0 +1,7 @@ +BEGIN + FOR i IN (SELECT name FROM dba_sql_patches WHERE signature = &&cs_signature.) + LOOP + DBMS_SQLDIAG.drop_sql_patch(name => i.name); + END LOOP; +END; +/ diff --git a/csierra/cs_internal/cs_spch_internal_list.sql b/csierra/cs_internal/cs_spch_internal_list.sql new file mode 100644 index 0000000..7339225 --- /dev/null +++ b/csierra/cs_internal/cs_spch_internal_list.sql @@ -0,0 +1,34 @@ + +@@&&stgtab_sqlpatch_script. +-- +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL created FOR A23; +COL name FOR A30; +COL category FOR A30; +COL status FOR A8; +COL last_modified FOR A19; +COL description FOR A100 HEA 'Description' WOR; +COL outline_hint FOR A125; +-- +PRO +PRO SQL PATCHES - LIST (dba_sql_patches) +PRO ~~~~~~~~~~~~~~~~~~ +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + s.con_id, + c.name AS pdb_name, + s.name, + s.category, + s.status, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + s.description + FROM cdb_sql_patches s, + v$containers c + WHERE s.signature = :cs_signature + AND c.con_id = s.con_id + ORDER BY + s.created, s.con_id, s.name +/ +-- +DEF cs_obj_type = '3'; +@@&&cs_list_cbo_hints. \ No newline at end of file diff --git a/csierra/cs_internal/cs_spch_internal_pack.sql b/csierra/cs_internal/cs_spch_internal_pack.sql new file mode 100644 index 0000000..f3dbd40 --- /dev/null +++ b/csierra/cs_internal/cs_spch_internal_pack.sql @@ -0,0 +1,13 @@ +PRO +PRO Pack SQL Patch: +BEGIN + FOR i IN (SELECT name, category + FROM dba_sql_patches + WHERE signature = :cs_signature + ORDER BY name) + LOOP + DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch WHERE obj_name = i.name AND category = i.category; + DBMS_SQLDIAG.pack_stgtab_sqlpatch(patch_name => i.name, patch_category => i.category, staging_table_name => '&&cs_stgtab_prefix._stgtab_sqlpatch', staging_schema_owner => '&&cs_stgtab_owner.'); + END LOOP; +END; +/ diff --git a/csierra/cs_internal/cs_spch_internal_plan.sql b/csierra/cs_internal/cs_spch_internal_plan.sql new file mode 100644 index 0000000..e6ecd08 --- /dev/null +++ b/csierra/cs_internal/cs_spch_internal_plan.sql @@ -0,0 +1,7 @@ +PRO +PRO SQL PATCH - DISPLAY (dbms_xplan.display_sql_patch_plan) +PRO ~~~~~~~~~~~~~~~~~~~ +-- only works from PDB. +SET HEA OFF PAGES 0; +SELECT * FROM TABLE(DBMS_XPLAN.display_sql_patch_plan((SELECT name FROM dba_sql_patches WHERE signature = :cs_signature AND category = 'DEFAULT' AND ROWNUM = 1), 'ADVANCED')); +SET HEA ON PAGES 100; diff --git a/csierra/cs_internal/cs_spch_internal_stgtab.sql b/csierra/cs_internal/cs_spch_internal_stgtab.sql new file mode 100644 index 0000000..1c2149f --- /dev/null +++ b/csierra/cs_internal/cs_spch_internal_stgtab.sql @@ -0,0 +1,17 @@ +@@cs_set_quota_tools_owner.sql +-- create staging table +DECLARE + l_exists NUMBER; +BEGIN + SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER('&&cs_stgtab_owner.') AND table_name = UPPER('&&cs_stgtab_prefix._stgtab_sqlpatch'); + IF l_exists = 0 THEN + DBMS_SQLDIAG.create_stgtab_sqlpatch(table_name => UPPER('&&cs_stgtab_prefix._stgtab_sqlpatch'), schema_name => UPPER('&&cs_stgtab_owner.'), tablespace_name => UPPER('&&cs_default_tablespace.')); + END IF; +END; +/ +-- +PRO +PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch; +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch; +-- diff --git a/csierra/cs_internal/cs_spch_internal_stgtab_sqlpatch.sql b/csierra/cs_internal/cs_spch_internal_stgtab_sqlpatch.sql new file mode 100644 index 0000000..82052ab --- /dev/null +++ b/csierra/cs_internal/cs_spch_internal_stgtab_sqlpatch.sql @@ -0,0 +1,21 @@ +COL created FOR A23; +COL name FOR A30; +COL category FOR A30; +COL status FOR 99999999; +COL last_modified FOR A19; +COL description FOR A100 HEA 'Description' WOR; +-- +PRO +PRO SQL PATCHES ON STAGING TABLE (&&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT TO_CHAR(created, '&&cs_datetime_full_format.') created, + obj_name name, + category, + status, + TO_CHAR(last_modified, '&&cs_datetime_full_format.') last_modified, + description + FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch + WHERE signature = :cs_signature + ORDER BY + created, obj_name +/ diff --git a/csierra/cs_internal/cs_spool_head.sql b/csierra/cs_internal/cs_spool_head.sql new file mode 100644 index 0000000..1b372a0 --- /dev/null +++ b/csierra/cs_internal/cs_spool_head.sql @@ -0,0 +1,9 @@ +SELECT REPLACE('&&cs_file_name.', '$') AS cs_file_name FROM DUAL; +-- +EXEC :cs_begin_elapsed_time := DBMS_UTILITY.get_time; +-- +SPO &&cs_file_name..txt +PRO /* ---------------------------------------------------------------------------------------------- */ +PRO &&cs_file_name..txt +PRO +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_spool_head_chart.sql b/csierra/cs_internal/cs_spool_head_chart.sql new file mode 100644 index 0000000..5bc361c --- /dev/null +++ b/csierra/cs_internal/cs_spool_head_chart.sql @@ -0,0 +1,43 @@ +SELECT REPLACE('&&cs_file_name.', '$') AS cs_file_name FROM DUAL; +-- +EXEC :cs_begin_elapsed_time := DBMS_UTILITY.get_time; +-- +SPO &&cs_file_name..html +PRO +PRO +PRO +PRO &&cs_file_name..html +PRO +PRO +PRO +--PRO +PRO +PRO +PRO +PRO +PRO

&&report_title.

diff --git a/csierra/cs_internal/cs_spool_id_list.sql b/csierra/cs_internal/cs_spool_id_list.sql new file mode 100644 index 0000000..9c1514f --- /dev/null +++ b/csierra/cs_internal/cs_spool_id_list.sql @@ -0,0 +1,11 @@ +PRO DATE_TIME_UTC: &&cs_date_time.Z +PRO REFERENCE : &&cs_extended_reference. +PRO JDBC_STRING : &&cs_easy_connect_string. +PRO HOST_NAME : &&cs_host_name. CPU_UTIL:&&cs_cpu_util_perc. LOAD:&&cs_cpu_load. CORES:&&cs_num_cpu_cores. THREADS:&&cs_num_cpus. &&cs_host_shape. &&cs_disk_config. BOOT:&&cs_system_boot_time. USER:&&who_am_i. +PRO CDB_NAME : &&cs_db_name_u. CPU_COUNT:&&cs_cpu_count. AVG_RUN_SESS:&&cs_avg_running_sessions_cdb. DBRM_PLAN:&&cs_resource_manager_plan. &&cs_containers_count. VERSION:&&cs_db_version. STARTUP:&&cs_startup_time. &&cs_blackout_times. +PRO PDB_NAME : &&cs_con_name. CON_ID:&&cs_con_id. ALLOTTED_CPU:&&cs_allotted_cpu. AVG_RUN_SESS:&&cs_avg_running_sessions_pdb. OPEN_MODE:&&cs_pdb_open_mode. CREATED:&&pdb_creation. +PRO PHONE_BOOK : &&cs_phonebook_pdb. COMPARTMENT_ID:&&cs_compartment_id_pdb. +PRO APPLICATION : &&cs_kiev_version. SCHEMA:&&cs_schema_name. +PRO KIEV_STORE : &&cs_kiev_store_name. +PRO SCRIPT_NAME : &&cs_script_acronym.&&cs_script_name..sql +@@&&list_dg_members_script. diff --git a/csierra/cs_internal/cs_spool_id_list_sql_id.sql b/csierra/cs_internal/cs_spool_id_list_sql_id.sql new file mode 100644 index 0000000..ca98631 --- /dev/null +++ b/csierra/cs_internal/cs_spool_id_list_sql_id.sql @@ -0,0 +1,8 @@ +PRO SQL_ID : &&cs_sql_id. +PRO SQL_HV : &&cs_sql_hv. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO APPLICATION : &&cs_application_category. +PRO TABLE_OWNER : &&table_owner. +PRO TABLE_NAME : &&table_name. +PRO FIRST_ROWS : &&cs_first_rows_candidacy. (Y=Good Candidate, N=Bad Candidate) \ No newline at end of file diff --git a/csierra/cs_internal/cs_spool_id_sample_time.sql b/csierra/cs_internal/cs_spool_id_sample_time.sql new file mode 100644 index 0000000..52d3cc2 --- /dev/null +++ b/csierra/cs_internal/cs_spool_id_sample_time.sql @@ -0,0 +1,4 @@ +-- +PRO TIME_FROM : "&&cs_entered_time_from." &&cs_sample_time_from. (&&cs_snap_id_from.) {&&cs_default_time_window.} +PRO TIME_TO : "&&cs_entered_time_to." &&cs_sample_time_to. (&&cs_snap_id_to.) {now} +-- diff --git a/csierra/cs_internal/cs_spool_tail.sql b/csierra/cs_internal/cs_spool_tail.sql new file mode 100644 index 0000000..702ef0f --- /dev/null +++ b/csierra/cs_internal/cs_spool_tail.sql @@ -0,0 +1,18 @@ +@@cs_spool_time.sql +-- PRO +PRO &&cs_elapsed_time. &&cs_total_time. +PRO +PRO &&cs_file_name..txt +PRO /* ---------------------------------------------------------------------------------------------- */ +SPO OFF; +HOS chmod 644 &&cs_file_name..txt +PRO +DEF cs_reference; +--DEF cs_local_dir; +PRO +PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: +PRO scp &&cs_host_name.:&&cs_file_prefix._&&cs_script_name.*.* &&cs_local_dir. +PRO scp &&cs_host_name.:&&cs_file_dir.&&cs_reference_sanitized._*.* &&cs_local_dir. +PRO +PRO Use h.sql or help.sql for "cs" scripts inventory by type, and ls.sql for alphabetical list of "cs" scripts. +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_spool_tail_chart.sql b/csierra/cs_internal/cs_spool_tail_chart.sql new file mode 100644 index 0000000..9472e2c --- /dev/null +++ b/csierra/cs_internal/cs_spool_tail_chart.sql @@ -0,0 +1,12 @@ +SPO OFF; +HOS chmod 644 &&cs_file_name..html +PRO +DEF cs_reference; +DEF cs_local_dir; +PRO +PRO If you want to preserve script output, execute corresponding scp command below, from a TERM session running on your Mac/PC: +PRO scp &&cs_host_name.:&&cs_file_prefix._&&cs_script_name.*.* &&cs_local_dir. +PRO scp &&cs_host_name.:&&cs_file_dir.&&cs_reference_sanitized._*.* &&cs_local_dir. +PRO +PRO Use h.sql or help.sql for "cs" scripts inventory by type, and ls.sql for alphabetical list of "cs" scripts. +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_spool_time.sql b/csierra/cs_internal/cs_spool_time.sql new file mode 100644 index 0000000..ee1315a --- /dev/null +++ b/csierra/cs_internal/cs_spool_time.sql @@ -0,0 +1,10 @@ +DEF cs_total_time = ''; +DEF cs_elapsed_time = ''; +COL cs_total_time NEW_V cs_total_time NOPRI; +COL cs_elapsed_time NEW_V cs_elapsed_time NOPRI; +SET HEA OFF PAGES 0; +SELECT 'Total:'||TRIM(TO_CHAR(((DBMS_UTILITY.get_time - :cs_begin_total_time) / 100), '99,990.00'))||'s' AS cs_total_time, + 'Elapsed:'||TRIM(TO_CHAR(((DBMS_UTILITY.get_time - :cs_begin_elapsed_time) / 100), '99,990.00'))||'s' AS cs_elapsed_time + FROM DUAL +/ +SET HEA ON PAGES 100; \ No newline at end of file diff --git a/csierra/cs_internal/cs_sprf_internal_drop.sql b/csierra/cs_internal/cs_sprf_internal_drop.sql new file mode 100644 index 0000000..de9c454 --- /dev/null +++ b/csierra/cs_internal/cs_sprf_internal_drop.sql @@ -0,0 +1,9 @@ +PRO +PRO Drop SQL Profile(s) for: "&&cs_sql_id." +BEGIN + FOR i IN (SELECT name FROM dba_sql_profiles WHERE signature = &&cs_signature.) + LOOP + DBMS_SQLTUNE.drop_sql_profile(name => i.name); + END LOOP; +END; +/ diff --git a/csierra/cs_internal/cs_sprf_internal_list.sql b/csierra/cs_internal/cs_sprf_internal_list.sql new file mode 100644 index 0000000..364161f --- /dev/null +++ b/csierra/cs_internal/cs_sprf_internal_list.sql @@ -0,0 +1,34 @@ + +@@&&stgtab_sqlprofile_script. +-- +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL created FOR A23; +COL name FOR A30; +COL category FOR A30; +COL status FOR A8; +COL last_modified FOR A19; +COL description FOR A100 HEA 'Description' WOR; +COL outline_hint FOR A125; +-- +PRO +PRO SQL PROFILES - LIST (dba_sql_profiles) +PRO ~~~~~~~~~~~~~~~~~~~ +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + s.con_id, + c.name AS pdb_name, + s.name, + s.category, + s.status, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + s.description + FROM cdb_sql_profiles s, + v$containers c + WHERE s.signature = :cs_signature + AND c.con_id = s.con_id + ORDER BY + s.created, s.con_id, s.name +/ +-- +DEF cs_obj_type = '1'; +@@&&cs_list_cbo_hints. \ No newline at end of file diff --git a/csierra/cs_internal/cs_sprf_internal_pack.sql b/csierra/cs_internal/cs_sprf_internal_pack.sql new file mode 100644 index 0000000..b54f23e --- /dev/null +++ b/csierra/cs_internal/cs_sprf_internal_pack.sql @@ -0,0 +1,13 @@ +PRO +PRO Pack SQL Profile: +BEGIN + FOR i IN (SELECT name, category + FROM dba_sql_profiles + WHERE signature = :cs_signature + ORDER BY name) + LOOP + DELETE &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof WHERE obj_name = i.name AND category = i.category; + DBMS_SQLTUNE.pack_stgtab_sqlprof(profile_name => i.name, profile_category => i.category, staging_table_name => '&&cs_stgtab_prefix._stgtab_sqlprof', staging_schema_owner => '&&cs_stgtab_owner.'); + END LOOP; +END; +/ diff --git a/csierra/cs_internal/cs_sprf_internal_plan.sql b/csierra/cs_internal/cs_sprf_internal_plan.sql new file mode 100644 index 0000000..0dd69dc --- /dev/null +++ b/csierra/cs_internal/cs_sprf_internal_plan.sql @@ -0,0 +1,7 @@ +PRO +PRO SQL PROFILE - DISPLAY (dbms_xplan.display_sql_profile_plan) +PRO ~~~~~~~~~~~~~~~~~~~~~ +-- only works from PDB. +SET HEA OFF PAGES 0; +SELECT * FROM TABLE(DBMS_XPLAN.display_sql_profile_plan((SELECT name FROM dba_sql_profiles WHERE signature = :cs_signature AND category = 'DEFAULT' AND ROWNUM = 1), 'ADVANCED')); +SET HEA ON PAGES 100; diff --git a/csierra/cs_internal/cs_sprf_internal_stgtab.sql b/csierra/cs_internal/cs_sprf_internal_stgtab.sql new file mode 100644 index 0000000..81cb0eb --- /dev/null +++ b/csierra/cs_internal/cs_sprf_internal_stgtab.sql @@ -0,0 +1,17 @@ +@@cs_set_quota_tools_owner.sql +-- create staging table +DECLARE + l_exists NUMBER; +BEGIN + SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER('&&cs_stgtab_owner.') AND table_name = UPPER('&&cs_stgtab_prefix._stgtab_sqlprof'); + IF l_exists = 0 THEN + DBMS_SQLTUNE.create_stgtab_sqlprof(table_name => UPPER('&&cs_stgtab_prefix._stgtab_sqlprof'), schema_name => UPPER('&&cs_stgtab_owner.'), tablespace_name => UPPER('&&cs_default_tablespace.')); + END IF; +END; +/ +-- +PRO +PRO &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof; +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT COUNT(*) AS "ROWS" FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof; +-- diff --git a/csierra/cs_internal/cs_sprf_internal_stgtab_sqlprofile.sql b/csierra/cs_internal/cs_sprf_internal_stgtab_sqlprofile.sql new file mode 100644 index 0000000..c7e91e6 --- /dev/null +++ b/csierra/cs_internal/cs_sprf_internal_stgtab_sqlprofile.sql @@ -0,0 +1,21 @@ +COL created FOR A23; +COL name FOR A30; +COL category FOR A30; +COL status FOR 99999999; +COL last_modified FOR A19; +COL description FOR A100 HEA 'Description' WOR; +-- +PRO +PRO SQL PROFILES ON STAGING TABLE (&&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT TO_CHAR(created, '&&cs_datetime_full_format.') created, + obj_name name, + category, + status, + TO_CHAR(last_modified, '&&cs_datetime_full_format.') last_modified, + description + FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof + WHERE signature = :cs_signature + ORDER BY + created, obj_name +/ diff --git a/csierra/cs_internal/cs_sql_ash.sql b/csierra/cs_internal/cs_sql_ash.sql new file mode 100644 index 0000000..a9e1222 --- /dev/null +++ b/csierra/cs_internal/cs_sql_ash.sql @@ -0,0 +1,466 @@ +COL perc FOR 990.0 HEA 'Perc%'; +COL samples FOR 999,999,990 HEA 'Samples'; +COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL sql_full_plan_hash_value FOR 9999999999 HEA 'Full Plan|Hash Value'; +COL sql_plan_line_id FOR 9999 HEA 'Plan|Line'; +COL current_obj# FOR 999999999999 HEA 'Current|Obj#'; +COL in_connection_mgmt FOR A6 HEA 'In|Connec|Mgmt'; +COL in_parse FOR A6 HEA 'In|Parse'; +COL in_hard_parse FOR A6 HEA 'In|Hard|Parse'; +COL in_sql_execution FOR A6 HEA 'In|SQL|Exec'; +COL in_plsql_execution FOR A6 HEA 'In|PLSQL|Exec'; +COL in_plsql_rpc FOR A6 HEA 'In|PLSQL|RPC'; +COL in_plsql_compilation FOR A6 HEA 'In|PLSQL|Compil'; +COL in_java_execution FOR A6 HEA 'In|Java|Exec'; +COL in_bind FOR A6 HEA 'In|Bind'; +COL in_cursor_close FOR A6 HEA 'In|Cursor|Close'; +COL in_sequence_load FOR A6 HEA 'In|Seq|Load'; +COL on_cpu_or_wait_event FOR A50 HEA 'ON CPU or Timed Event'; +COL object_name FOR A128 HEA 'Object Name'; +-- +COL dummy FOR A1 NOPRI; +BREAK ON dummy SKIP PAGE; +COMPUTE SUM LABEL 'TOTAL' OF perc samples ON dummy; +-- +PRO +PRO ASH (v$active_session_history) +PRO ~~~ +WITH +ash_detailed AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + 100 * COUNT(*) / SUM(COUNT(*)) OVER() AS perc, + COUNT(*) AS samples, + h.sql_plan_hash_value, + h.sql_full_plan_hash_value, + h.sql_plan_line_id, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END AS on_cpu_or_wait_event, + h.current_obj#, + h.in_connection_mgmt, + h.in_parse, + h.in_hard_parse, + h.in_sql_execution, + h.in_plsql_execution, + h.in_plsql_rpc, + h.in_plsql_compilation, + h.in_java_execution, + h.in_bind, + h.in_cursor_close, + h.in_sequence_load + FROM v$active_session_history h + WHERE h.sql_id = '&&cs_sql_id.' + GROUP BY + h.sql_plan_hash_value, + h.sql_full_plan_hash_value, + h.sql_plan_line_id, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END, + h.current_obj#, + h.in_connection_mgmt, + h.in_parse, + h.in_hard_parse, + h.in_sql_execution, + h.in_plsql_execution, + h.in_plsql_rpc, + h.in_plsql_compilation, + h.in_java_execution, + h.in_bind, + h.in_cursor_close, + h.in_sequence_load +), +all_groups AS ( +SELECT '1' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + current_obj#, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + FROM ash_detailed + GROUP BY + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + current_obj#, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + UNION ALL +SELECT '2' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + TO_NUMBER(NULL) AS current_obj#, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + FROM ash_detailed + GROUP BY + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + UNION ALL +SELECT '3' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + TO_NUMBER(NULL) sql_plan_line_id, + on_cpu_or_wait_event, + TO_NUMBER(NULL) AS current_obj#, + NULL in_connection_mgmt, + NULL in_parse, + NULL in_hard_parse, + NULL in_sql_execution, + NULL in_plsql_execution, + NULL in_plsql_rpc, + NULL in_plsql_compilation, + NULL in_java_execution, + NULL in_bind, + NULL in_cursor_close, + NULL in_sequence_load + FROM ash_detailed + GROUP BY + sql_plan_hash_value, + sql_full_plan_hash_value, + on_cpu_or_wait_event + UNION ALL +SELECT '4' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + TO_NUMBER(NULL) sql_plan_line_id, + NULL on_cpu_or_wait_event, + TO_NUMBER(NULL) AS current_obj#, + NULL in_connection_mgmt, + NULL in_parse, + NULL in_hard_parse, + NULL in_sql_execution, + NULL in_plsql_execution, + NULL in_plsql_rpc, + NULL in_plsql_compilation, + NULL in_java_execution, + NULL in_bind, + NULL in_cursor_close, + NULL in_sequence_load + FROM ash_detailed + GROUP BY + sql_plan_hash_value, + sql_full_plan_hash_value + UNION ALL +SELECT '5' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + TO_NUMBER(NULL) sql_plan_hash_value, + TO_NUMBER(NULL) sql_full_plan_hash_value, + TO_NUMBER(NULL) sql_plan_line_id, + on_cpu_or_wait_event, + TO_NUMBER(NULL) AS current_obj#, + NULL in_connection_mgmt, + NULL in_parse, + NULL in_hard_parse, + NULL in_sql_execution, + NULL in_plsql_execution, + NULL in_plsql_rpc, + NULL in_plsql_compilation, + NULL in_java_execution, + NULL in_bind, + NULL in_cursor_close, + NULL in_sequence_load + FROM ash_detailed + GROUP BY + on_cpu_or_wait_event +) +SELECT dummy, + perc, + samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + current_obj#, + (SELECT owner||'.'||object_name||CASE WHEN subobject_name IS NOT NULL THEN '.'||subobject_name END||' '||object_type FROM dba_objects WHERE object_id = current_obj# AND ROWNUM = 1) AS object_name, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + FROM all_groups + WHERE perc >= 0.5 + ORDER BY + 1 ASC, 2 DESC, 3 DESC +/ +-- +PRO +PRO ASH 7d (dba_hist_active_sess_history) +PRO ~~~~~~ +WITH +ash_detailed AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + 100 * COUNT(*) / SUM(COUNT(*)) OVER() AS perc, + COUNT(*) AS samples, + h.sql_plan_hash_value, + h.sql_full_plan_hash_value, + h.sql_plan_line_id, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END AS on_cpu_or_wait_event, + h.current_obj#, + h.in_connection_mgmt, + h.in_parse, + h.in_hard_parse, + h.in_sql_execution, + h.in_plsql_execution, + h.in_plsql_rpc, + h.in_plsql_compilation, + h.in_java_execution, + h.in_bind, + h.in_cursor_close, + h.in_sequence_load + FROM dba_hist_active_sess_history h + WHERE h.sql_id = '&&cs_sql_id.' + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.sample_time > SYSDATE - 7 + AND h.snap_id >= &&cs_7d_snap_id. + GROUP BY + h.sql_plan_hash_value, + h.sql_full_plan_hash_value, + h.sql_plan_line_id, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END, + h.current_obj#, + h.in_connection_mgmt, + h.in_parse, + h.in_hard_parse, + h.in_sql_execution, + h.in_plsql_execution, + h.in_plsql_rpc, + h.in_plsql_compilation, + h.in_java_execution, + h.in_bind, + h.in_cursor_close, + h.in_sequence_load +), +all_groups AS ( +SELECT '1' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + current_obj#, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + FROM ash_detailed + GROUP BY + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + current_obj#, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + UNION ALL +SELECT '2' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + TO_NUMBER(NULL) AS current_obj#, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + FROM ash_detailed + GROUP BY + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + UNION ALL +SELECT '3' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + TO_NUMBER(NULL) sql_plan_line_id, + on_cpu_or_wait_event, + TO_NUMBER(NULL) AS current_obj#, + NULL in_connection_mgmt, + NULL in_parse, + NULL in_hard_parse, + NULL in_sql_execution, + NULL in_plsql_execution, + NULL in_plsql_rpc, + NULL in_plsql_compilation, + NULL in_java_execution, + NULL in_bind, + NULL in_cursor_close, + NULL in_sequence_load + FROM ash_detailed + GROUP BY + sql_plan_hash_value, + sql_full_plan_hash_value, + on_cpu_or_wait_event + UNION ALL +SELECT '4' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + TO_NUMBER(NULL) sql_plan_line_id, + NULL on_cpu_or_wait_event, + TO_NUMBER(NULL) AS current_obj#, + NULL in_connection_mgmt, + NULL in_parse, + NULL in_hard_parse, + NULL in_sql_execution, + NULL in_plsql_execution, + NULL in_plsql_rpc, + NULL in_plsql_compilation, + NULL in_java_execution, + NULL in_bind, + NULL in_cursor_close, + NULL in_sequence_load + FROM ash_detailed + GROUP BY + sql_plan_hash_value, + sql_full_plan_hash_value + UNION ALL +SELECT '5' AS dummy, + 100 * SUM(samples) / SUM(SUM(samples)) OVER() AS perc, + SUM(samples) AS samples, + TO_NUMBER(NULL) sql_plan_hash_value, + TO_NUMBER(NULL) sql_full_plan_hash_value, + TO_NUMBER(NULL) sql_plan_line_id, + on_cpu_or_wait_event, + TO_NUMBER(NULL) AS current_obj#, + NULL in_connection_mgmt, + NULL in_parse, + NULL in_hard_parse, + NULL in_sql_execution, + NULL in_plsql_execution, + NULL in_plsql_rpc, + NULL in_plsql_compilation, + NULL in_java_execution, + NULL in_bind, + NULL in_cursor_close, + NULL in_sequence_load + FROM ash_detailed + GROUP BY + on_cpu_or_wait_event +) +SELECT dummy, + perc, + samples, + sql_plan_hash_value, + sql_full_plan_hash_value, + sql_plan_line_id, + on_cpu_or_wait_event, + current_obj#, + (SELECT owner||'.'||object_name||CASE WHEN subobject_name IS NOT NULL THEN '.'||subobject_name END||' '||object_type FROM dba_objects WHERE object_id = current_obj# AND ROWNUM = 1) AS object_name, + in_connection_mgmt, + in_parse, + in_hard_parse, + in_sql_execution, + in_plsql_execution, + in_plsql_rpc, + in_plsql_compilation, + in_java_execution, + in_bind, + in_cursor_close, + in_sequence_load + FROM all_groups + WHERE perc >= 0.5 + ORDER BY + 1 ASC, 2 DESC, 3 DESC +/ +-- +CL BRE COMP; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_sqlmon_hist_internal.sql b/csierra/cs_internal/cs_sqlmon_hist_internal.sql new file mode 100644 index 0000000..76e4330 --- /dev/null +++ b/csierra/cs_internal/cs_sqlmon_hist_internal.sql @@ -0,0 +1,163 @@ +COL sql_exec_start FOR A19 HEA 'SQL Exec Start'; +COL last_refresh_time FOR A19 HEA 'Last Refresh Time'; +COL report_id NEW_V report_id FOR 999999999 HEA 'Report ID'; +COL status FOR A20 HEA 'Status'; +COL duration FOR 999,990 HEA 'Duration'; +COL plan_hash FOR 9999999999 HEA 'Plan Hash'; +COL elapsed_time FOR 999,990.000 HEA 'Elapsed Time'; +COL cpu_time FOR 999,990.000 HEA 'CPU Time'; +COL user_io_wait_time FOR 999,990.000 HEA 'User IO Time'; +COL concurrency_wait_time FOR 999,990.000 HEA 'Concurrency'; +COL application_wait_time FOR 999,990.000 HEA 'Application'; +COL plsql_exec_time FOR 999,990.000 HEA 'PL/SQL'; +COL user_fetch_count FOR 999,990 HEA 'Fetches'; +COL buffer_gets FOR 999,999,999,990 HEA 'Buffer Gets'; +COL read_reqs FOR 999,999,990 HEA 'Read Reqs'; +COL read_bytes FOR 999,999,999,999,990 HEA 'Read Bytes'; +COL sid_serial FOR A15 HEA 'Sid,Serial'; +COL pdb_name FOR A30 TRUNC HEA 'PDB Name'; +COL user_name FOR A30 TRUNC HEA 'User Name'; +COL module FOR A40 TRUNC HEA 'Module'; +COL service FOR A40 TRUNC HEA 'Service'; +COL program FOR A40 TRUNC HEA 'Program'; +COL rn_sql_exec_start FOR 999,990 HEA 'Sta RN'; +COL rn_duration FOR 999,990 HEA 'Dur RN'; +-- +PRO +PRO SQL MONITOR REPORTS (dba_hist_reports) top &&cs_sqlmon_top. and &&cs_sqlmon_top. most recent +PRO ~~~~~~~~~~~~~~~~~~~ +WITH +sql_mon_hist_reports AS ( +SELECT /*+ OPT_PARAM('_newsort_enabled' 'FALSE') OPT_PARAM('_adaptive_fetch_enabled' 'FALSE') OPT_PARAM('query_rewrite_enabled' 'FALSE') */ /* ORA-00600: internal error code, arguments: [15851], [3], [2], [1], [1] */ + r.snap_id, + r.dbid, + r.instance_number, + r.report_id, + r.component_id, + r.session_id, + r.session_serial#, + r.period_start_time, + r.period_end_time, + r.generation_time, + r.report_parameters, + r.key1 AS + sql_id, + r.con_dbid, + r.con_id, + --xt.sql_id, + To_date(xt.sql_exec_start, 'MM/DD/YYYY HH24:MI:SS') AS + sql_exec_start, + ROW_NUMBER() OVER(ORDER BY To_date(xt.sql_exec_start, 'MM/DD/YYYY HH24:MI:SS') DESC NULLS LAST/*, To_number(Extractvalue(Xmltype(r.report_summary), '//stat[@name = "duration"]')) DESC NULLS LAST*/) AS rn_sql_exec_start, + xt.sql_exec_id, + Xmltype(r.report_summary).extract('//status/text()') AS + status, + Xmltype(r.report_summary).extract('//sql_text/text()') AS + sql_text, + To_date(Xmltype(r.report_summary).extract('//first_refresh_time/text()'), + 'MM/DD/YYYY HH24:MI:SS') AS + first_refresh_time, + To_date(Xmltype(r.report_summary).extract('//last_refresh_time/text()'), + 'MM/DD/YYYY HH24:MI:SS') AS + last_refresh_time, + To_number(Xmltype(r.report_summary).extract('//refresh_count/text()')) AS + refresh_count, + To_number(Xmltype(r.report_summary).extract('//inst_id/text()')) AS + inst_id, + --TO_NUMBER(xmltype(r.report_summary).extract('//session_id/text()')) AS session_id, + --TO_NUMBER(xmltype(r.report_summary).extract('//session_serial/text()')) AS session_serial, + To_number(Xmltype(r.report_summary).extract('//user_id/text()')) AS + user_id, + Xmltype(r.report_summary).extract('//user/text()') AS + user_name, + --TO_NUMBER(xmltype(r.report_summary).extract('//con_id/text()')) AS con_id, + Xmltype(r.report_summary).extract('//con_name/text()') AS + con_name, + Xmltype(r.report_summary).extract('//module/text()') AS + MODULE, + Xmltype(r.report_summary).extract('//service/text()') AS + service, + Xmltype(r.report_summary).extract('//program/text()') AS + program, + To_number(Xmltype(r.report_summary).extract('//plan_hash/text()')) AS + plan_hash, + Xmltype(r.report_summary).extract('//is_cross_instance/text()') AS + is_cross_instance, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "duration"]')) + AS duration, + ROW_NUMBER() OVER(ORDER BY To_number(Extractvalue(Xmltype(r.report_summary), '//stat[@name = "duration"]')) DESC NULLS LAST/*, To_date(xt.sql_exec_start, 'MM/DD/YYYY HH24:MI:SS') DESC NULLS LAST*/) AS rn_duration, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "elapsed_time"]')) AS + elapsed_time, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "cpu_time"]')) + AS cpu_time, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "user_io_wait_time"]')) AS + user_io_wait_time, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "concurrency_wait_time"]')) AS + concurrency_wait_time, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "application_wait_time"]')) AS + application_wait_time, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "plsql_exec_time"]')) AS + plsql_exec_time, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "user_fetch_count"]')) AS + user_fetch_count, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "buffer_gets"]')) AS + buffer_gets, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "read_reqs"]') + ) AS + read_reqs, + To_number(Extractvalue(Xmltype(r.report_summary), + '//stat[@name = "read_bytes"]' + )) AS + read_bytes +FROM cdb_hist_reports r, + XMLTABLE('//sql' passing xmltype(r.report_summary) + COLUMNS + sql_id VARCHAR2(13) path '@sql_id', + sql_exec_start VARCHAR2(19) path '@sql_exec_start', + sql_exec_id NUMBER path '@sql_exec_id' + ) xt +WHERE (r.period_end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') OR r.period_start_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) + AND r.component_name = 'sqlmonitor' + AND r.report_name = 'main' + AND r.key1 = '&&cs_sql_id.' +-- ORDER BY r.period_end_time - r.period_start_time DESC, r.period_start_time DESC +-- FETCH FIRST &&cs_sqlmon_top. ROWS ONLY +) +SELECT r.sql_exec_start, + r.rn_sql_exec_start, + r.last_refresh_time, + r.report_id, + r.status, + r.plan_hash, + r.duration, + r.rn_duration, + ROUND(r.elapsed_time / POWER(10, 6), 3) AS elapsed_time, + ROUND(r.cpu_time / POWER(10, 6), 3) AS cpu_time, + ROUND(r.user_io_wait_time / POWER(10, 6), 3) AS user_io_wait_time, + ROUND(r.concurrency_wait_time / POWER(10, 6), 3) AS concurrency_wait_time, + ROUND(r.application_wait_time / POWER(10, 6), 3) AS application_wait_time, + ROUND(r.plsql_exec_time / POWER(10, 6), 3) AS plsql_exec_time, + r.user_fetch_count, + r.buffer_gets, + r.read_reqs, + r.read_bytes, + LPAD(r.session_id,5)||','||r.session_serial# AS sid_serial, + r.con_name AS pdb_name, + r.user_name, + r.module, + r.program, + r.service + FROM sql_mon_hist_reports r + WHERE r.rn_sql_exec_start <= &&cs_sqlmon_top. OR r.rn_duration <= &&cs_sqlmon_top. + ORDER BY + r.sql_exec_start, r.rn_sql_exec_start +/ diff --git a/csierra/cs_internal/cs_sqlmon_mem_internal.sql b/csierra/cs_internal/cs_sqlmon_mem_internal.sql new file mode 100644 index 0000000..a8d0466 --- /dev/null +++ b/csierra/cs_internal/cs_sqlmon_mem_internal.sql @@ -0,0 +1,76 @@ +COL sql_exec_start FOR A19 HEA 'SQL Exec Start'; +COL rn_sql_exec_start FOR 999,990 HEA 'Sta RN'; +COL last_refresh_time FOR A19 HEA 'Last Refresh Time'; +COL sql_exec_id NEW_V sql_exec_id FOR 99999999999 HEA 'SQL Exec ID'; +COL status FOR A20 HEA 'Status'; +COL duration FOR 999,990 HEA 'Duration'; +COL rn_duration FOR 999,990 HEA 'Dur RN'; +COL plan_hash FOR 9999999999 HEA 'Plan Hash'; +COL full_plan_hash FOR 9999999999 HEA 'Full Plan Hash'; +COL elapsed_time FOR 999,990.000 HEA 'Elapsed Time'; +COL cpu_time FOR 999,990.000 HEA 'CPU Time'; +COL user_io_wait_time FOR 999,990.000 HEA 'User IO Time'; +COL concurrency_wait_time FOR 999,990.000 HEA 'Concurrency'; +COL application_wait_time FOR 999,990.000 HEA 'Application'; +COL plsql_exec_time FOR 999,990.000 HEA 'PL/SQL'; +COL user_fetch_count FOR 999,990 HEA 'Fetches'; +COL buffer_gets FOR 999,999,999,990 HEA 'Buffer Gets'; +COL read_reqs FOR 999,999,990 HEA 'Read Reqs'; +COL read_bytes FOR 999,999,999,999,990 HEA 'Read Bytes'; +COL sid_serial FOR A15 HEA 'Sid,Serial'; +COL pdb_name FOR A30 TRUNC HEA 'PDB Name'; +COL user_name FOR A30 TRUNC HEA 'User Name'; +COL module FOR A40 TRUNC HEA 'Module'; +COL service FOR A40 TRUNC HEA 'Service'; +COL program FOR A40 TRUNC HEA 'Program'; +-- +PRO +PRO SQL MONITOR REPORTS (v$sql_monitor) top &&cs_sqlmon_top. and &&cs_sqlmon_top. most recent +PRO ~~~~~~~~~~~~~~~~~~~ +WITH +sql_mon_mem_reports AS ( +SELECT /*+ OPT_PARAM('_newsort_enabled' 'FALSE') OPT_PARAM('_adaptive_fetch_enabled' 'FALSE') OPT_PARAM('query_rewrite_enabled' 'FALSE') */ /* ORA-00600: internal error code, arguments: [15851], [3], [2], [1], [1] */ + r.sql_exec_start, + ROW_NUMBER() OVER(ORDER BY r.sql_exec_start DESC NULLS LAST/*, MAX(r.last_refresh_time) - r.sql_exec_start DESC NULLS LAST*/) AS rn_sql_exec_start, + MAX(r.last_refresh_time) AS last_refresh_time, + r.sql_exec_id, + MAX(r.status) AS status, + MAX(r.sql_plan_hash_value) AS plan_hash, + MAX(r.sql_full_plan_hash_value) AS full_plan_hash, + ROUND((MAX(r.last_refresh_time) - r.sql_exec_start) * 24 * 3600) AS duration, + ROW_NUMBER() OVER(ORDER BY MAX(r.last_refresh_time) - r.sql_exec_start DESC NULLS LAST/*, r.sql_exec_start DESC NULLS LAST*/) AS rn_duration, + ROUND(SUM(r.elapsed_time) / POWER(10, 6), 3) AS elapsed_time, + ROUND(SUM(r.cpu_time) / POWER(10, 6), 3) AS cpu_time, + ROUND(SUM(r.user_io_wait_time) / POWER(10, 6), 3) AS user_io_wait_time, + ROUND(SUM(r.concurrency_wait_time) / POWER(10, 6), 3) AS concurrency_wait_time, + ROUND(SUM(r.application_wait_time) / POWER(10, 6), 3) AS application_wait_time, + ROUND(SUM(r.plsql_exec_time) / POWER(10, 6), 3) AS plsql_exec_time, + SUM(r.fetches) AS user_fetch_count, + SUM(r.buffer_gets) AS buffer_gets, + SUM(r.physical_read_requests) AS read_reqs, + SUM(r.physical_read_bytes) AS read_bytes, + MIN(LPAD(r.sid,5)||','||r.session_serial#) AS sid_serial, + c.name AS pdb_name, + MAX(r.username) AS user_name, + MAX(r.module) AS module, + MAX(r.program) AS program, + MAX(r.service_name) AS service + FROM v$sql_monitor r, + v$containers c + WHERE r.sql_id = '&&cs_sql_id.' + AND c.con_id = r.con_id + AND c.open_mode = 'READ WRITE' + GROUP BY + c.name, + r.sql_exec_id, + r.sql_exec_start +-- ORDER BY +-- 8 DESC NULLS LAST, 1 DESC NULLS LAST +-- FETCH FIRST &&cs_sqlmon_top. ROWS ONLY +) +SELECT * + FROM sql_mon_mem_reports + WHERE rn_sql_exec_start <= &&cs_sqlmon_top. OR rn_duration <= &&cs_sqlmon_top. + ORDER BY + sql_exec_start, rn_sql_exec_start +/ diff --git a/csierra/cs_internal/cs_sqlstat_analytics_footer.sql b/csierra/cs_internal/cs_sqlstat_analytics_footer.sql new file mode 100644 index 0000000..a55865a --- /dev/null +++ b/csierra/cs_internal/cs_sqlstat_analytics_footer.sql @@ -0,0 +1,19 @@ +PRO
+PRO Metric:&&cs_sql_statistic.  &&xaxis_title.
+PRO
+PRO Top    Average Value   Data Points  SQL_ID         PHV         Typ  PDB Name                        SQL Text                                                      Module
+PRO ~~~  ~~~~~~~~~~~~~~~  ~~~~~~~~~~~~  ~~~~~~~~~~~~~  ~~~~~~~~~~  ~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+PRO #01  &&value_01.  &&data_points_01.  &&sql_id_01.  &&plan_hash_value_01.  &&sql_type_01.  &&pdb_name_01.  &&sql_text_01.  &&module_01.
+PRO #02  &&value_02.  &&data_points_02.  &&sql_id_02.  &&plan_hash_value_02.  &&sql_type_02.  &&pdb_name_02.  &&sql_text_02.  &&module_02.
+PRO #03  &&value_03.  &&data_points_03.  &&sql_id_03.  &&plan_hash_value_03.  &&sql_type_03.  &&pdb_name_03.  &&sql_text_03.  &&module_03.
+PRO #04  &&value_04.  &&data_points_04.  &&sql_id_04.  &&plan_hash_value_04.  &&sql_type_04.  &&pdb_name_04.  &&sql_text_04.  &&module_04.
+PRO #05  &&value_05.  &&data_points_05.  &&sql_id_05.  &&plan_hash_value_05.  &&sql_type_05.  &&pdb_name_05.  &&sql_text_05.  &&module_05.
+PRO #06  &&value_06.  &&data_points_06.  &&sql_id_06.  &&plan_hash_value_06.  &&sql_type_06.  &&pdb_name_06.  &&sql_text_06.  &&module_06.
+PRO #07  &&value_07.  &&data_points_07.  &&sql_id_07.  &&plan_hash_value_07.  &&sql_type_07.  &&pdb_name_07.  &&sql_text_07.  &&module_07.
+PRO #08  &&value_08.  &&data_points_08.  &&sql_id_08.  &&plan_hash_value_08.  &&sql_type_08.  &&pdb_name_08.  &&sql_text_08.  &&module_08.
+PRO #09  &&value_09.  &&data_points_09.  &&sql_id_09.  &&plan_hash_value_09.  &&sql_type_09.  &&pdb_name_09.  &&sql_text_09.  &&module_09.
+PRO #10  &&value_10.  &&data_points_10.  &&sql_id_10.  &&plan_hash_value_10.  &&sql_type_10.  &&pdb_name_10.  &&sql_text_10.  &&module_10.
+PRO #11  &&value_11.  &&data_points_11.  &&sql_id_11.  &&plan_hash_value_11.  &&sql_type_11.  &&pdb_name_11.  &&sql_text_11.  &&module_11.
+PRO #12  &&value_12.  &&data_points_12.  &&sql_id_12.  &&plan_hash_value_12.  &&sql_type_12.  &&pdb_name_12.  &&sql_text_12.  &&module_12.
+PRO #13  &&value_13.  &&data_points_13.  &&sql_id_13.  &&plan_hash_value_13.  &&sql_type_13.  &&pdb_name_13.  &&sql_text_13.  &&module_13.
+PRO 
\ No newline at end of file diff --git a/csierra/cs_internal/cs_sqlstat_clear.sql b/csierra/cs_internal/cs_sqlstat_clear.sql new file mode 100644 index 0000000..254a2d4 --- /dev/null +++ b/csierra/cs_internal/cs_sqlstat_clear.sql @@ -0,0 +1 @@ +CLEAR COMPUTE BREAK; \ No newline at end of file diff --git a/csierra/cs_internal/cs_sqlstat_cols.sql b/csierra/cs_internal/cs_sqlstat_cols.sql new file mode 100644 index 0000000..3d1271b --- /dev/null +++ b/csierra/cs_internal/cs_sqlstat_cols.sql @@ -0,0 +1,120 @@ +-- cs_sqlstat_cols.sql: called by cs_dba_hist_sqlstat_*.sql, cs_gv_sqlstat_global.sql.sql, cs_gv_sql_global.sql, cs_gv_sql_stability.sql, cs_iod_sqlstats_detailed.sql, cs_fs_internal_query_1.sql +COL snap_id FOR A7 HEA 'Snap|ID'; +COL day FOR A10 HEA 'Day' TRUNC; +COL hour FOR A13 HEA 'Hour' TRUNC; +COL begin_timestamp FOR A23 HEA 'Begin Timestamp'; +COL end_timestamp FOR A23 HEA 'End Timestamp'; +COL last_active_time FOR A19 HEA 'Last Active Time'; +COL last_load_time FOR A19 HEA 'Last Load Time'; +COL first_load_time FOR A19 HEA 'First Load Time'; +COL seconds FOR 9,999,990.000 HEA 'Seconds|Delta'; +COL sqlid FOR A5 HEA 'SQL|HV' &&cs_sql_id_col.; +COL sql_id FOR A13 HEA 'SQL_ID' &&cs_sql_id_col.; +COL instance_number FOR 9999 HEA 'Inst'; +COL inst_id FOR 9999 HEA 'Inst'; +COL child_number FOR 999999 HEA 'Child|Number'; +COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash|Value'; +COL full_plan_hash_value FOR 9999999999 HEA 'Full|Plan|Hash|Value' &&cs_uncommon_col.; +COL optimizer_cost FOR 9999999999 HEA 'Optimizer|Cost'; +COL et_aas FOR 9,990.000 HEA 'DB|Load(aas)'; +COL cpu_aas FOR 9,990.000 HEA 'CPU|Load(aas)'; +COL io_aas FOR 9,990.000 HEA 'I/O|Load(aas)'; +COL appl_aas FOR 9,990.000 HEA 'Appl|Load(aas)'; +COL conc_aas FOR 9,990.000 HEA 'Conc|Load(aas)'; +COL plsql_aas FOR 9,990.000 HEA 'PL/SQL|Load(aas)' &&cs_uncommon_col.; +COL cluster_aas FOR 9,990.000 HEA 'Cluster|Load(aas)' &&cs_uncommon_col.; +COL java_aas FOR 9,990.000 HEA 'Java|Load(aas)' &&cs_uncommon_col.; +COL executions FOR 999,999,999,990 HEA 'Executions|Total'; +COL delta_execution_count FOR 999,999,999,990 HEA 'Executions|Delta'; +COL execs_per_sec FOR 99,990.000 HEA 'Executions|Per Sec'; +COL et_ms_per_exec FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Exec'; +COL cpu_ms_per_exec FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Exec'; +COL io_ms_per_exec FOR 99,999,990.000 HEA 'I/O|Latency(ms)|Per Exec'; +COL appl_ms_per_exec FOR 999,990.000 HEA 'Appl|Latency(ms)|Per Exec'; +COL conc_ms_per_exec FOR 999,990.000 HEA 'Conc|Latency(ms)|Per Exec'; +COL plsql_ms_per_exec FOR 999,990.000 HEA 'PL/SQL|Latency(ms)|Per Exec' &&cs_uncommon_col.; +COL cluster_ms_per_exec FOR 999,990.000 HEA 'Cluster|Latency(ms)|Per Exec' &&cs_uncommon_col.; +COL java_ms_per_exec FOR 999,990.000 HEA 'Java|Latency(ms)|Per Exec' &&cs_uncommon_col.; +COL px_execs_per_sec FOR 99,990.000 HEA 'PX Execs|Per Sec' &&cs_uncommon_col.; +COL end_of_fetch_per_sec FOR 99,990.000 HEA 'EndOfFetch|Per Sec' &&cs_uncommon_col.; +COL parses_per_sec FOR 99,990.000 HEA 'Parses|Per Sec' &&cs_uncommon_col.; +COL avg_hard_parse_time FOR 9,999,990 HEA 'Avg|Hard Parse|Time(us)' &&cs_uncommon_col.; +COL inval_per_sec FOR 99,990.000 HEA 'Inval|Per Sec' &&cs_uncommon_col.; +COL loads_per_sec FOR 99,990.000 HEA 'Loads|Per Sec' &&cs_uncommon_col.; +COL gets_per_exec FOR 999,999,990 HEA 'Buffer|Gets|Per Exec'; +COL reads_per_exec FOR 999,999,990 HEA 'Disk|Reads|Per Exec'; +COL direct_writes_per_exec FOR 9,999,990 HEA 'Direct|Writes|Per Exec' &&cs_uncommon_col.; +COL phy_read_req_per_exec FOR 999,990 HEA 'Physical|Read Reqs|Per Exec' &&cs_uncommon_col.; +COL phy_read_mb_per_exec FOR 999,990.000 HEA 'Physical|Read MB|Per Exec'; +COL phy_write_req_per_exec FOR 999,990 HEA 'Physical|Write Reqs|Per Exec' &&cs_uncommon_col.; +COL phy_write_mb_per_exec FOR 999,990.000 HEA 'Physical|Write MB|Per Exec'; +COL fetches_per_exec FOR 999,990 HEA 'Fetches|Per Exec' &&cs_uncommon_col.; +COL sorts_per_exec FOR 999,990 HEA 'Sorts|Per Exec' &&cs_uncommon_col.; +COL rows_per_exec FOR 999,999,990.000 HEA 'Rows|Processed|Per Exec'; +COL et_ms_per_row FOR 99,999,990.000 HEA 'DB|Latency(ms)|Per Row Proc'; +COL cpu_ms_per_row FOR 99,999,990.000 HEA 'CPU|Latency(ms)|Per Row Proc'; +COL io_ms_per_row FOR 99,999,990.000 HEA 'I/O|Latency(ms)|Per Row Proc'; +COL gets_per_row FOR 999,999,990 HEA 'Buffer|Gets|Per Row Proc'; +COL reads_per_row FOR 999,999,990 HEA 'Disk|Reads|Per Row Proc'; +COL delta_elapsed_time FOR 9,999,990.000 HEA 'Elapsed|Time(secs)|Delta' &&cs_delta_col.; +COL delta_cpu_time FOR 9,999,990.000 HEA 'CPU|Time(secs)|Delta' &&cs_delta_col.; +COL delta_user_io_wait_time FOR 9,999,990.000 HEA 'I/O Wait|Time(secs)|Delta' &&cs_delta_col.; +COL delta_application_wait_time FOR 9,999,990.000 HEA 'Appl Wait|Time(secs)|Delta' &&cs_delta_col.; +COL delta_concurrency_time FOR 9,999,990.000 HEA 'Conc Wait|Time(secs)|Delta' &&cs_delta_col.; +COL delta_plsql_exec_time FOR 9,999,990.000 HEA 'PL/SQL Wait|Time(secs)|Delta' &&cs_delta_col.; +COL delta_cluster_wait_time FOR 9,999,990.000 HEA 'Clust Wait|Time(secs)|Delta' &&cs_delta_col.; +COL delta_java_exec_time FOR 9,999,990.000 HEA 'Java Wait|Time(secs)|Delta' &&cs_delta_col.; +COL delta_px_servers_executions FOR 999,999,990 HEA 'PX Server|Executions|Delta' &&cs_delta_col.; +COL delta_end_of_fetch_count FOR 999,999,990 HEA 'EndOfFetch|Count|Delta' &&cs_delta_col.; +COL delta_parse_calls FOR 999,999,990 HEA 'Parse|Calls|Delta' &&cs_delta_col.; +COL delta_buffer_gets FOR 999,999,999,990 HEA 'Buffer|Gets|Delta' &&cs_delta_col.; +COL delta_disk_reads FOR 999,999,999,990 HEA 'Disk|Reads|Delta' &&cs_delta_col.; +COL delta_direct_writes FOR 999,999,999,990 HEA 'Direct|Writes|Delta' &&cs_delta_col.; +COL delta_physical_read_requests FOR 999,999,999,990 HEA 'Physical |Read Reqs|Delta' &&cs_delta_col.; +COL delta_physical_read_mb FOR 999,999,990.000 HEA 'Physical|Read MB|Delta' &&cs_delta_col.; +COL delta_physical_write_requests FOR 999,999,999,990 HEA 'Physical|Write Reqs|Delta' &&cs_delta_col.; +COL delta_physical_write_mb FOR 999,999,990.000 HEA 'Physical|Write MB|Delta' &&cs_delta_col.; +COL delta_fetch_count FOR 999,999,990 HEA 'Fetch|Count|Delta' &&cs_delta_col.; +COL delta_sorts FOR 999,999,990 HEA 'Sorts|Delta' &&cs_delta_col.; +COL delta_rows_processed FOR 999,999,999,999,990 HEA 'Rows|Processed|Delta'; +COL delta_io_interconnect_mb FOR 999,999,990.000 HEA 'Interconnect|MB|Delta' &&cs_delta_col.; +COL delta_cell_offload_elig_mb FOR 999,999,990.000 HEA 'Cell Offload|Elig MB|Delta' &&cs_delta_col.; +COL delta_cell_uncompressed_mb FOR 999,999,990.000 HEA 'Cell Uncomp|MB|Delta' &&cs_delta_col.; +COL delta_cell_offload_retrn_mb FOR 999,999,990.000 HEA 'Cell Offload|Retrn MB|Delta' &&cs_delta_col.; +COL delta_invalidations FOR 999,990 HEA 'Inval|Delta'; +COL delta_loads FOR 999,990 HEA 'Loads|Delta'; +COL version_count FOR 999,990 HEA 'Version|Count'; +COL sharable_mem_mb FOR 99,990.000 HEA 'Sharable|Memory(MB)'; +COL obsolete_count FOR 999,990 HEA 'Obsolete|Count'; +COL shareable_count FOR 999,990 HEA 'Shareable|Count'; +COL pdb_or_parsing_schema_name FOR A30 HEA 'PDB or Parsing Schema Name' TRUNC; +COL module FOR A30 HEA 'Module' TRUNC; +COL sql_text FOR A90 HEA 'SQL Text' TRUNC &&cs_sql_id_col.; +COL sql_bl FOR A3 HEA 'SQL|BL'; +COL sql_prf FOR A3 HEA 'SQL|PRF'; +COL sql_pch FOR A3 HEA 'SQL|PCH'; +COL loaded_versions FOR 99999999 HEA 'Loaded|Versions'; +COL loads FOR 99999 HEA 'Loads'; +COL invalidations FOR 9999999 HEA 'Invali-|dations'; +COL object_status FOR A14 HEA 'Object Status'; +COL is_obsolete FOR A8 HEA 'Is|Obsolete'; +COL is_shareable FOR A9 HEA 'Is|Shareable'; +COL is_bind_aware FOR A9 HEA 'Is Bind|Aware'; +COL is_bind_sensitive FOR A9 HEA 'Is Bind|Sensitive'; +COL sql_plan_baseline FOR A30 HEA 'SQL Plan Baseline|Name'; +COL sql_profile FOR A30 HEA 'SQL Profile|Name'; +COL sql_patch FOR A30 HEA 'SQL Patch|Name'; +COL spbl_created FOR A23 HEA 'SQL Plan Baseline|Created'; +COL sprf_created FOR A23 HEA 'SQL Profile|Created'; +COL spch_created FOR A23 HEA 'SQL Patch|Created'; +COL sep0 FOR A1 HEA '+|!|!|!' PRI; +COL sep1 FOR A1 HEA '+|!|!|!' PRI; +COL sep2 FOR A1 HEA '+|!|!|!' PRI; +COL sep3 FOR A1 HEA '+|!|!|!' PRI; +COL sep4 FOR A1 HEA '+|!|!|!' PRI; +COL sep5 FOR A1 HEA '+|!|!|!' PRI; +COL sep6 FOR A1 HEA '+|!|!|!' &&cs_delta_col.; +COL sep7 FOR A1 HEA '+|!|!|!' &&cs_delta_col.; +COL sep8 FOR A1 HEA '+|!|!|!' PRI; +COL sep9 FOR A1 HEA '+|!|!|!' PRI; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_sqlstat_compute.sql b/csierra/cs_internal/cs_sqlstat_compute.sql new file mode 100644 index 0000000..6168536 --- /dev/null +++ b/csierra/cs_internal/cs_sqlstat_compute.sql @@ -0,0 +1,4 @@ +-- cs_sqlstat_compute.sql: called by cs_dba_hist_sqlstat_*.sql +BREAK ON REPORT; +COMPUTE AVG LABEL '' OF seconds optimizer_cost et_aas cpu_aas io_aas appl_aas conc_aas plsql_aas cluster_aas java_aas delta_execution_count execs_per_sec px_execs_per_sec end_of_fetch_per_sec parses_per_sec avg_hard_parse_time inval_per_sec loads_per_sec et_ms_per_exec cpu_ms_per_exec io_ms_per_exec appl_ms_per_exec conc_ms_per_exec plsql_ms_per_exec cluster_ms_per_exec java_ms_per_exec gets_per_exec reads_per_exec direct_writes_per_exec phy_read_req_per_exec phy_read_mb_per_exec phy_write_req_per_exec phy_write_mb_per_exec fetches_per_exec sorts_per_exec delta_rows_processed rows_per_exec et_ms_per_row cpu_ms_per_row io_ms_per_row gets_per_row reads_per_row delta_elapsed_time delta_cpu_time delta_user_io_wait_time delta_application_wait_time delta_concurrency_time delta_plsql_exec_time delta_cluster_wait_time delta_java_exec_time delta_px_servers_executions delta_end_of_fetch_count delta_parse_calls delta_buffer_gets delta_disk_reads delta_direct_writes delta_physical_read_requests delta_physical_read_mb delta_physical_write_requests delta_physical_write_mb delta_fetch_count delta_sorts delta_io_interconnect_mb delta_cell_offload_elig_mb delta_cell_uncompressed_mb delta_cell_offload_retrn_mb version_count obsolete_count shareable_count delta_loads delta_invalidations sharable_mem_mb ON REPORT; +-- \ No newline at end of file diff --git a/csierra/cs_internal/cs_sqlstat_foot.sql b/csierra/cs_internal/cs_sqlstat_foot.sql new file mode 100644 index 0000000..a6b045b --- /dev/null +++ b/csierra/cs_internal/cs_sqlstat_foot.sql @@ -0,0 +1,3 @@ +PRO +PRO 1. For more SQL Statistics history use ssr.sql (cs_sqlstat_report.sql) or ssri.sql (cs_sqlstat_report_iod.sql). The former provides 15m, hourly, daily or global granularity, while the latter 1m granularity. +PRO \ No newline at end of file diff --git a/csierra/cs_internal/cs_tables_internal.sql b/csierra/cs_internal/cs_tables_internal.sql new file mode 100644 index 0000000..4322992 --- /dev/null +++ b/csierra/cs_internal/cs_tables_internal.sql @@ -0,0 +1,119 @@ +COL owner FOR A30; +COL table_name FOR A30; +COL tablespace_name FOR A30; +COL total_MB NEW_V total_MB FOR 99,999,990.000 HEA 'Total MB'; +COL table_MB NEW_V table_MB FOR 99,999,990.000 HEA 'Table MB'; +COL indexes_MB NEW_V indexes_MB FOR 99,999,990.000 HEA 'Index(es) MB'; +COL lobs_MB NEW_V lobs_MB FOR 99,999,990.000 HEA 'Lob(s) MB'; +COL est_data_MB FOR 99,999,990.000 HEA 'Est Data MB'; +COL tabs FOR 9990; +COL lobs FOR 9990; +COL idxs FOR 9990; +COL num_rows FOR 999,999,999,990; +COL avg_row_len FOR 999,999,990; +COL last_analyzed FOR A19; +-- +WITH +tables AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.owner, + s.segment_name AS table_name, + MAX(s.tablespace_name) AS tablespace_name, + SUM(s.bytes) AS bytes + FROM dba_segments s, + dba_users u + WHERE s.segment_type LIKE 'TABLE%' + AND s.owner = COALESCE('&&specific_owner.', s.owner) + AND s.segment_name = COALESCE('&&specific_table.', s.segment_name) + AND u.username = s.owner + AND u.oracle_maintained = 'N' + GROUP BY + s.owner, + s.segment_name +), +dtables AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + t.owner, + t.table_name, + t.num_rows, + t.avg_row_len, + t.last_analyzed, + t.tablespace_name + FROM dba_tables t, + dba_users u + WHERE u.username = t.owner + AND u.oracle_maintained = 'N' + AND t.owner = COALESCE('&&specific_owner.', t.owner) + AND t.table_name = COALESCE('&&specific_table.', t.table_name) +), +indexes AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.owner, + i.table_name, + SUM(s.bytes) AS bytes, + COUNT(DISTINCT s.segment_name) AS cnt + FROM dba_segments s, + dba_users u, + dba_indexes i + WHERE s.segment_type LIKE '%INDEX%' + AND s.owner = COALESCE('&&specific_owner.', s.owner) + AND u.username = s.owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND i.owner = s.owner + AND i.index_name = s.segment_name + AND i.table_name = COALESCE('&&specific_table.', i.table_name) + GROUP BY + s.owner, + i.table_name +), +lobs AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.owner, + l.table_name, + SUM(s.bytes) AS bytes, + COUNT(DISTINCT s.segment_name) AS cnt + FROM dba_segments s, + dba_users u, + dba_lobs l + WHERE s.segment_type LIKE 'LOB%' + AND s.segment_type <> 'LOBINDEX' + AND s.owner = COALESCE('&&specific_owner.', s.owner) + AND u.username = s.owner + AND u.oracle_maintained = 'N' + AND l.owner = s.owner + AND l.segment_name = s.segment_name + AND l.table_name = COALESCE('&&specific_table.', l.table_name) + GROUP BY + s.owner, + l.table_name +) +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + t.owner, + t.table_name, + NVL(d.tablespace_name, t.tablespace_name) AS tablespace_name, + (NVL(t.bytes,0)+NVL(i.bytes,0)+NVL(l.bytes,0))/POWER(10,6) AS total_MB, + NVL(t.bytes,0)/POWER(10,6) AS table_MB, + NVL(l.bytes,0)/POWER(10,6) AS lobs_MB, + NVL(i.bytes,0)/POWER(10,6) AS indexes_MB, + 1 AS tabs, + NVL(l.cnt,0) AS lobs, + NVL(i.cnt,0) AS idxs, + NVL(d.num_rows,0) AS num_rows, + NVL(d.avg_row_len,0) AS avg_row_len, + NVL(d.num_rows*d.avg_row_len,0)/POWER(10,6) AS est_data_MB, + d.last_analyzed + FROM tables t, + dtables d, + indexes i, + lobs l + WHERE d.owner(+) = t.owner + AND d.table_name(+) = t.table_name + AND i.owner(+) = t.owner + AND i.table_name(+) = t.table_name + AND l.owner(+) = t.owner + AND l.table_name(+) = t.table_name + ORDER BY + &&order_by. + FETCH FIRST &&fetch_first_N_rows. ROWS ONLY +/ \ No newline at end of file diff --git a/csierra/cs_internal/cs_temp_dir_create.sql b/csierra/cs_internal/cs_temp_dir_create.sql new file mode 100644 index 0000000..7f0d5c5 --- /dev/null +++ b/csierra/cs_internal/cs_temp_dir_create.sql @@ -0,0 +1,2 @@ +HOS mkdir -p &&cs_temp_dir. +CREATE OR REPLACE DIRECTORY CS_TEMP_DIR AS '&&cs_temp_dir.'; diff --git a/csierra/cs_internal/cs_temp_dir_drop.sql b/csierra/cs_internal/cs_temp_dir_drop.sql new file mode 100644 index 0000000..da77587 --- /dev/null +++ b/csierra/cs_internal/cs_temp_dir_drop.sql @@ -0,0 +1 @@ +DROP DIRECTORY CS_TEMP_DIR; diff --git a/csierra/cs_internal/cs_top_14_footer.sql b/csierra/cs_internal/cs_top_14_footer.sql new file mode 100644 index 0000000..c999f2b --- /dev/null +++ b/csierra/cs_internal/cs_top_14_footer.sql @@ -0,0 +1,17 @@ +PRO
+PRO #01  &&value_01.  &&top_01.
+PRO #02  &&value_02.  &&top_02.
+PRO #03  &&value_03.  &&top_03.
+PRO #04  &&value_04.  &&top_04.
+PRO #05  &&value_05.  &&top_05.
+PRO #06  &&value_06.  &&top_06.
+PRO #07  &&value_07.  &&top_07.
+PRO #08  &&value_08.  &&top_08.
+PRO #09  &&value_09.  &&top_09.
+PRO #10  &&value_10.  &&top_10.
+PRO #11  &&value_11.  &&top_11.
+PRO #12  &&value_12.  &&top_12.
+PRO #13  &&value_13.  &&top_13.
+PRO #14  &&value_14.  &&top_14.
+PRO #15  &&value_others.  &&others.
+PRO 
diff --git a/csierra/cs_internal/cs_top_activity_internal.sql b/csierra/cs_internal/cs_top_activity_internal.sql new file mode 100644 index 0000000..58c0a73 --- /dev/null +++ b/csierra/cs_internal/cs_top_activity_internal.sql @@ -0,0 +1,447 @@ +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET PAGES 300 LONGC 120; +DEF aas_threshold = '0.3'; +-- +COL sql_type FOR A4 HEA '.|SQL|Type'; +COL sql_hv FOR A5 HEA 'SQL|HV'; +COL sql_id FOR A13 TRUNC; +COL row_number NOPRI; +COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash|Value'; +COL aas_db FOR 9,990.000 HEA 'DB|Load(aas)'; +COL aas_cpu FOR 9,990.000 HEA 'CPU|Load(aas)'; +COL aas_io FOR 9,990.000 HEA 'I/O|Load(aas)'; +COL sessions FOR 9990 HEA 'Dist|Sess'; +COL sql_text FOR A90 TRUNC HEA 'SQL Text'; +COL timed_event FOR A35 TRUNC HEA 'Timed Event'; +COL pdb_name FOR A30 TRUNC HEA 'PDB Name'; +COL module FOR A25 TRUNC HEA 'Module'; +COL pdb_name_module FOR A30 TRUNC HEA 'PDB Name or Module'; +COL version_count FOR 9990 HEA 'Ver|Cnt'; +COL has_baseline FOR A2 HEA 'BL'; +COL has_profile FOR A2 HEA 'PR'; +COL has_patch FOR A2 HEA 'PA'; +-- +BREAK ON REPORT ON sql_type SKIP 1 DUPL; +COMPUTE SUM OF aas_db aas_cpu aas_io ON REPORT; +COMPUTE SUM OF aas_db aas_cpu aas_io ON sql_type; +-- +PRO +PRO TOP Active SQL as per Average Active Sessions (AAS) on Timed Event for last &&cs_minutes. minute(s) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +ash AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ROUND(COUNT(*) / (&&cs_minutes. * 60), 3) AS aas_db, + ROUND(SUM(CASE a.session_state WHEN 'ON CPU' THEN 1 ELSE 0 END)/ (&&cs_minutes. * 60), 3) AS aas_cpu, + ROUND(SUM(CASE WHEN a.wait_class LIKE '% I/O' THEN 1 ELSE 0 END)/ (&&cs_minutes. * 60), 3) AS aas_io, + COUNT(DISTINCT a.session_id||','||a.session_serial#) AS sessions, + COALESCE(a.sql_id, '"null"') AS sql_id, + a.sql_plan_hash_value, + -- a.sql_child_number, + SUBSTR(CASE a.session_state WHEN 'ON CPU' THEN a.session_state ELSE a.wait_class||' - '||a.event END, 1, 35) AS timed_event, + SUBSTR(a.module, 1, 25) AS module, + c.con_id, + c.name AS pdb_name, + a.sql_opname, + a.user_id, + ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS row_number + FROM v$active_session_history a, + v$containers c + WHERE 1 = 1 + AND a.sample_time > SYSDATE - (&&cs_minutes. / 24 / 60) + AND c.con_id = a.con_id + GROUP BY + COALESCE(a.sql_id, '"null"'), + a.sql_plan_hash_value, + -- a.sql_child_number, + SUBSTR(CASE a.session_state WHEN 'ON CPU' THEN a.session_state ELSE a.wait_class||' - '||a.event END, 1, 35), + SUBSTR(a.module, 1, 25), + c.con_id, + c.name, + a.sql_opname, + a.user_id +), +ash_extended AS ( +SELECT CASE a.user_id WHEN 0 THEN 'SYS' ELSE application_category(s.sql_text, a.sql_opname) END AS sql_type, + a.row_number, + a.aas_db, + a.aas_cpu, + a.aas_io, + a.sessions, + s.sql_hv, + a.sql_id, + a.sql_plan_hash_value, + s.has_baseline, + s.has_profile, + s.has_patch, + s.sql_text, + a.module, + a.con_id, + a.timed_event, + a.pdb_name, + a.sql_opname, + a.user_id + FROM ash a + OUTER APPLY ( + SELECT get_sql_hv(s.sql_fulltext) AS sql_hv, + -- REGEXP_REPLACE(s.sql_text, '[^[:print:]]') AS sql_text, + REGEXP_SUBSTR(s.sql_fulltext, '.*$', 1, 1, 'm') AS sql_text, + CASE WHEN s.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN s.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN s.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch + FROM v$sql s + WHERE s.sql_id = a.sql_id + AND s.con_id = a.con_id + AND s.plan_hash_value = a.sql_plan_hash_value + -- AND s.child_number = a.sql_child_number + ORDER BY + s.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) s + WHERE (a.row_number <= &&cs_top. OR a.aas_db > &&aas_threshold.) + UNION ALL +SELECT CASE a.user_id WHEN 0 THEN 'SYS' ELSE application_category(s.sql_text, a.sql_opname) END AS sql_type, + 999999 AS row_number, + SUM(a.aas_db) AS aas_db, + SUM(a.aas_cpu) AS aas_cpu, + SUM(a.aas_io) AS aas_io, + TO_NUMBER(NULL) AS sessions, + NULL AS sql_hv, + '"'||COUNT(DISTINCT a.sql_id)||' others"' AS sql_id, + TO_NUMBER(NULL) AS sql_plan_hash_value, + NULL AS has_baseline, + NULL AS has_profile, + NULL AS has_patch, + NULL AS sql_text, + NULL AS module, + TO_NUMBER(NULL) AS con_id, + a.timed_event, + '"'||COUNT(DISTINCT a.pdb_name)||' PDBs"' AS sql_text, + NULL AS sql_opname, + TO_NUMBER(NULL) AS user_id + FROM ash a + OUTER APPLY ( + SELECT --get_sql_hv(s.sql_fulltext) AS sql_hv, + -- REGEXP_REPLACE(s.sql_text, '[^[:print:]]') AS sql_text, + REGEXP_SUBSTR(s.sql_fulltext, '.*$', 1, 1, 'm') AS sql_text, + CASE WHEN s.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN s.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN s.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch + FROM v$sql s + WHERE s.sql_id = a.sql_id + AND s.con_id = a.con_id + AND s.plan_hash_value = a.sql_plan_hash_value + -- AND s.child_number = a.sql_child_number + ORDER BY + s.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) s + WHERE NOT (a.row_number <= &&cs_top. OR a.aas_db > &&aas_threshold.) + GROUP BY + CASE a.user_id WHEN 0 THEN 'SYS' ELSE application_category(s.sql_text, a.sql_opname) END, + a.timed_event +HAVING SUM(a.aas_db) > &&aas_threshold. +), +ash_extended2 AS ( +SELECT a.sql_type, + a.row_number, + a.aas_db, + a.aas_cpu, + a.aas_io, + a.sessions, + a.sql_hv, + a.sql_id, + a.sql_plan_hash_value, + s.version_count, + a.has_baseline, + a.has_profile, + a.has_patch, + a.sql_text, + a.module, + a.con_id, + a.timed_event, + COALESCE(a.pdb_name, '"multiple"') AS pdb_name, + a.sql_opname, + a.user_id + FROM ash_extended a, + v$sqlstats s + WHERE s.sql_id(+) = a.sql_id + AND s.con_id(+) = a.con_id +) +SELECT a.sql_type, + a.row_number, + a.aas_db, + a.aas_cpu, + a.aas_io, + a.timed_event, + a.sessions, + a.sql_hv, + a.sql_id, + a.sql_plan_hash_value, + a.version_count, + a.has_baseline, + a.has_profile, + a.has_patch, + a.sql_text, + -- a.timed_event, + CASE SYS_CONTEXT('USERENV', 'CON_NAME') WHEN 'CDB$ROOT' THEN a.pdb_name ELSE a.module END AS pdb_name_module + -- a.pdb_name, + -- a.module + FROM ash_extended2 a + ORDER BY + CASE a.sql_type WHEN 'TP' THEN 1 WHEN 'RO' THEN 2 WHEN 'BG' THEN 3 WHEN 'UN' THEN 4 WHEN 'IG' THEN 5 WHEN 'SYS' THEN 6 ELSE 9 END, + a.row_number, + a.aas_db DESC +/ +-- +-- CLEAR BREAK COMPUTE; \ No newline at end of file diff --git a/csierra/cs_internal/cs_top_activity_internal_range.sql b/csierra/cs_internal/cs_top_activity_internal_range.sql new file mode 100644 index 0000000..d23918a --- /dev/null +++ b/csierra/cs_internal/cs_top_activity_internal_range.sql @@ -0,0 +1,517 @@ +-- SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +-- SET PAGES 300 LONGC 120; +DEF aas_threshold = '0.3'; +-- +COL sql_type FOR A4 HEA '.|SQL|Type'; +COL sql_hv FOR A5 HEA 'SQL|HV'; +COL sql_id FOR A13 TRUNC; +COL row_number NOPRI; +COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash|Value'; +COL aas_db FOR 9,990.000 HEA 'DB|Load(aas)'; +COL aas_cpu FOR 9,990.000 HEA 'CPU|Load(aas)'; +COL aas_io FOR 9,990.000 HEA 'I/O|Load(aas)'; +COL sessions FOR 9990 HEA 'Dist|Sess'; +COL sql_text FOR A90 TRUNC HEA 'SQL Text'; +COL timed_event FOR A35 TRUNC HEA 'Timed Event'; +COL pdb_name FOR A30 TRUNC HEA 'PDB Name'; +COL module FOR A25 TRUNC HEA 'Module'; +COL pdb_name_module FOR A30 TRUNC HEA 'PDB Name or Module'; +COL version_count FOR 9990 HEA 'Ver|Cnt'; +COL has_baseline FOR A2 HEA 'BL'; +COL has_profile FOR A2 HEA 'PR'; +COL has_patch FOR A2 HEA 'PA'; +-- +BREAK ON REPORT ON sql_type SKIP 1 DUPL; +COMPUTE SUM OF aas_db aas_cpu aas_io ON REPORT; +COMPUTE SUM OF aas_db aas_cpu aas_io ON sql_type; +-- +PRO +PRO TOP Active SQL as per Average Active Sessions (AAS) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/****************************************************************************************/ +WITH +FUNCTION /* cs_top_activity_internal_range */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +both_ash AS ( +SELECT h.sample_id, + -- CAST(h.sample_time AS DATE) - (CASE is_awr_sample WHEN 'Y' THEN 10 ELSE 1 END/24/3600) AS sample_time_from, + CAST(h.sample_time AS DATE) - (1/24/3600) AS sample_time_from, + CAST(h.sample_time AS DATE) AS sample_time_to, + 1 AS seconds, + h.session_id, + h.session_serial#, + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + -- h.sql_child_number, + h.sql_opname, + h.user_id, + h.session_state, + h.wait_class, + h.event, + h.module + FROM v$active_session_history h + WHERE 1 = 1 + AND h.sample_time > TO_TIMESTAMP('&&cs_end_interval_time_max.', '&&cs_timestamp_full_format.') + AND h.sample_time BETWEEN TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + -- AND is_awr_sample = 'N' + UNION ALL +SELECT h.sample_id, + CAST(h.sample_time AS DATE) - (10/24/3600) AS sample_time_from, + CAST(h.sample_time AS DATE) AS sample_time_to, + 10 AS seconds, + h.session_id, + h.session_serial#, + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + -- h.sql_child_number, + h.sql_opname, + h.user_id, + h.session_state, + h.wait_class, + h.event, + h.module + FROM dba_hist_active_sess_history h + WHERE 1 = 1 + AND h.sample_time <= TO_TIMESTAMP('&&cs_end_interval_time_max.', '&&cs_timestamp_full_format.') + AND h.sample_time BETWEEN TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = &&cs_dbid. AND h.instance_number = &&cs_instance_number. AND h.snap_id BETWEEN &&cs_snap_id_from. AND &&cs_snap_id_to. + -- AND h.sample_time < (SELECT MIN(sample_time) FROM v$active_session_history) +), +/****************************************************************************************/ +boundaries AS ( +SELECT MIN(a.sample_time_from) AS min_sample_time_from, + MAX(a.sample_time_to) AS max_sample_time_to, + ROUND((MAX(a.sample_time_to) - MIN(a.sample_time_from)) * 24 * 3600) AS seconds + FROM both_ash a +), +/****************************************************************************************/ +ash AS ( +SELECT ROUND(SUM(a.seconds) / b.seconds, 3) AS aas_db, + ROUND(SUM(CASE a.session_state WHEN 'ON CPU' THEN a.seconds ELSE 0 END)/ b.seconds, 3) AS aas_cpu, + ROUND(SUM(CASE WHEN a.wait_class LIKE '% I/O' THEN a.seconds ELSE 0 END)/ b.seconds, 3) AS aas_io, + COUNT(DISTINCT a.session_id||','||a.session_serial#) AS sessions, + COALESCE(a.sql_id, '"null"') AS sql_id, + a.sql_plan_hash_value, + -- a.sql_child_number, + SUBSTR(CASE a.session_state WHEN 'ON CPU' THEN a.session_state ELSE a.wait_class||' - '||a.event END, 1, 35) AS timed_event, + SUBSTR(a.module, 1, 25) AS module, + a.con_id, + a.sql_opname, + a.user_id, + ROW_NUMBER() OVER (ORDER BY SUM(a.seconds) / b.seconds /*aas_db*/ DESC NULLS LAST) AS row_number + FROM both_ash a, + boundaries b + WHERE 1 = 1 + GROUP BY + b.seconds, + COALESCE(a.sql_id, '"null"'), + a.sql_plan_hash_value, + -- a.sql_child_number, + SUBSTR(CASE a.session_state WHEN 'ON CPU' THEN a.session_state ELSE a.wait_class||' - '||a.event END, 1, 35), + SUBSTR(a.module, 1, 25), + a.con_id, + a.sql_opname, + a.user_id +), +/****************************************************************************************/ +ash_extended AS ( +SELECT CASE a.user_id WHEN 0 THEN 'SYS' ELSE application_category(s.sql_text, a.sql_opname) END AS sql_type, + a.row_number, + a.aas_db, + a.aas_cpu, + a.aas_io, + a.sessions, + s.sql_hv, + a.sql_id, + a.sql_plan_hash_value, + s.has_baseline, + s.has_profile, + s.has_patch, + s.sql_text, + a.module, + a.con_id, + a.timed_event, + get_pdb_name(a.con_id) AS pdb_name, + a.sql_opname, + a.user_id + FROM ash a + OUTER APPLY ( + SELECT get_sql_hv(s.sql_fulltext) AS sql_hv, + -- REGEXP_REPLACE(s.sql_text, '[^[:print:]]') AS sql_text, + REGEXP_SUBSTR(s.sql_fulltext, '.*$', 1, 1, 'm') AS sql_text, + CASE WHEN s.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN s.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN s.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch + FROM v$sql s + WHERE s.sql_id = a.sql_id + AND s.con_id = a.con_id + AND s.plan_hash_value = a.sql_plan_hash_value + -- AND s.child_number = a.sql_child_number + ORDER BY + s.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) s + WHERE (a.row_number <= &&cs_top. OR a.aas_db > &&aas_threshold.) + UNION ALL +SELECT CASE a.user_id WHEN 0 THEN 'SYS' ELSE application_category(s.sql_text, a.sql_opname) END AS sql_type, + 999999 AS row_number, + SUM(a.aas_db) AS aas_db, + SUM(a.aas_cpu) AS aas_cpu, + SUM(a.aas_io) AS aas_io, + TO_NUMBER(NULL) AS sessions, + NULL AS sql_hv, + '"'||COUNT(DISTINCT a.sql_id)||' others"' AS sql_id, + TO_NUMBER(NULL) AS sql_plan_hash_value, + NULL AS has_baseline, + NULL AS has_profile, + NULL AS has_patch, + NULL AS sql_text, + NULL AS module, + TO_NUMBER(NULL) AS con_id, + a.timed_event, + '"'||COUNT(DISTINCT a.con_id)||' PDBs"' AS sql_text, + NULL AS sql_opname, + TO_NUMBER(NULL) AS user_id + FROM ash a + OUTER APPLY ( + SELECT --get_sql_hv(s.sql_fulltext) AS sql_hv, + -- REGEXP_REPLACE(s.sql_text, '[^[:print:]]') AS sql_text, + REGEXP_SUBSTR(s.sql_fulltext, '.*$', 1, 1, 'm') AS sql_text, + CASE WHEN s.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN s.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN s.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch + FROM v$sql s + WHERE s.sql_id = a.sql_id + AND s.con_id = a.con_id + AND s.plan_hash_value = a.sql_plan_hash_value + -- AND s.child_number = a.sql_child_number + ORDER BY + s.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) s + WHERE NOT (a.row_number <= &&cs_top. OR a.aas_db > &&aas_threshold.) + GROUP BY + CASE a.user_id WHEN 0 THEN 'SYS' ELSE application_category(s.sql_text, a.sql_opname) END, + a.timed_event +HAVING SUM(a.aas_db) > &&aas_threshold. +), +/****************************************************************************************/ +ash_extended2 AS ( +SELECT a.sql_type, + a.row_number, + a.aas_db, + a.aas_cpu, + a.aas_io, + a.sessions, + a.sql_hv, + a.sql_id, + a.sql_plan_hash_value, + s.version_count, + a.has_baseline, + a.has_profile, + a.has_patch, + a.sql_text, + a.module, + a.con_id, + a.timed_event, + COALESCE(a.pdb_name, '"multiple"') AS pdb_name, + a.sql_opname, + a.user_id + FROM ash_extended a, + v$sqlstats s + WHERE s.sql_id(+) = a.sql_id + AND s.con_id(+) = a.con_id +) +/****************************************************************************************/ +SELECT a.sql_type, + a.row_number, + a.aas_db, + a.aas_cpu, + a.aas_io, + a.timed_event, + a.sessions, + a.sql_hv, + a.sql_id, + -- a.sqlid, + a.sql_plan_hash_value, + a.version_count, + a.has_baseline, + a.has_profile, + a.has_patch, + a.sql_text, + -- a.timed_event, + CASE '&&cs_con_name.' WHEN 'CDB$ROOT' THEN a.pdb_name ELSE a.module END AS pdb_name_module + -- a.pdb_name, + -- a.module + FROM ash_extended2 a + ORDER BY + CASE a.sql_type WHEN 'TP' THEN 1 WHEN 'RO' THEN 2 WHEN 'BG' THEN 3 WHEN 'UN' THEN 4 WHEN 'IG' THEN 5 WHEN 'SYS' THEN 6 ELSE 9 END, + a.row_number, + a.aas_db DESC +/ +/****************************************************************************************/ +-- +-- CLEAR BREAK COMPUTE; \ No newline at end of file diff --git a/csierra/cs_internal/cs_top_internal_foot.sql b/csierra/cs_internal/cs_top_internal_foot.sql new file mode 100644 index 0000000..1cf7f6b --- /dev/null +++ b/csierra/cs_internal/cs_top_internal_foot.sql @@ -0,0 +1,6 @@ +PRO +PRO 1. Top Active SQL as per Active Sessions History ASH. +PRO 2. Up to &&cs_top. SQL statements per SQL Type as per Average Active Sessions (AAS) on Elpsped Time. +PRO 3. For database load on last 1 minute use t.sql (cs_top.sql). Use ta.sql to eliminate report heading. +PRO 4. For database load over a time range use tr.sql (cs_top_range.sql). +PRO \ No newline at end of file diff --git a/csierra/cs_internal/cs_top_keys_sql.sql b/csierra/cs_internal/cs_top_keys_sql.sql new file mode 100644 index 0000000..750e2ce --- /dev/null +++ b/csierra/cs_internal/cs_top_keys_sql.sql @@ -0,0 +1,173 @@ +SET HEA OFF PAGES 0; +CLEAR COLUMNS; +SPO /tmp/cs_driver_&&cs_mysid..sql; +-- +PRO PRO +PRO PRO TOP_KEYS (with approximate counts) +PRO PRO ~~~~~~~~ +-- +WITH /* cs_top_keys_sql.sql kiev */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +) +SELECT /* cs_top_keys_sql.sql kiev */ + 'PRO'||CHR(10)|| + 'PRO TABLE : '||i.table_owner||'.'||i.table_name||CHR(10)|| + 'PRO INDEX : '||i.owner||'.'||i.index_name||CHR(10)|| + 'PRO COLUMNS: ('||LISTAGG(c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||')'||CHR(10)|| + 'PRO ~~~~~~~'||CHR(10)|| + 'WITH top AS (SELECT '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' * COUNT(*) AS VERSIONS, ROUND(100 * COUNT(*) / SUM(COUNT(*)) OVER (), 6) AS ROWS_PERCENT,'||CHR(10)|| + 'SUM(CASE t.KIEVLIVE WHEN ''Y'' THEN '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' ELSE 0 END) AS KIEVLIVE_Y, SUM(CASE t.KIEVLIVE WHEN ''N'' THEN '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' ELSE 0 END) AS KIEVLIVE_N, '||CHR(10)|| + 'MIN(t.KIEVTXNID) AS MIN_KIEVTXNID, MAX(t.KIEVTXNID) AS MAX_KIEVTXNID, '||CHR(10)|| + LISTAGG('''"'||LOWER(c.column_name)||'": "''||t.'||LOWER(c.column_name), '||''",''||CHR(10)||' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||'||''"'' AS KEY_VALUE '||CHR(10)|| + 'FROM '||i.table_owner||'.'||i.table_name||CHR(10)|| + CASE WHEN t.num_rows > 1e9 THEN ' SAMPLE BLOCK (0.1) ' WHEN t.num_rows > 1e8 THEN ' SAMPLE BLOCK (1) ' WHEN t.num_rows > 1e7 THEN ' SAMPLE BLOCK (10) ' END||' t GROUP BY '||CHR(10)|| + LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||CHR(10)|| + 'ORDER BY 1 DESC, 2 DESC, 3 DESC, 4 DESC, 5, 6, '||LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||' FETCH FIRST 20 ROWS ONLY)'||CHR(10)|| + 'SELECT t.VERSIONS, t.ROWS_PERCENT, t.KIEVLIVE_Y, t.KIEVLIVE_N, t.MIN_KIEVTXNID, t.MAX_KIEVTXNID,'||CHR(10)|| + '(SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID) AS MIN_BEGINTIME,'||CHR(10)|| + '(SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) AS MAX_BEGINTIME,'||CHR(10)|| + -- '(SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID) AS TIME_INTERVAL,'||CHR(10)|| + -- 'TRIM(TRIM(LEADING ''0'' FROM REGEXP_SUBSTR((SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID), ''\d+ \d{2}\:\d{2}\:\d{2}\.\d{3}''))) AS TIME_INTERVAL,'||CHR(10)|| + 'REGEXP_REPLACE(REGEXP_REPLACE((SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID), ''\+0{1,8}'', ''+''), ''000'') AS TIME_INTERVAL,'||CHR(10)|| + 't.KEY_VALUE, ORA_HASH(SUBSTR(t.KEY_VALUE, 1, 4000)) AS KEY_HASH'||CHR(10)|| + 'FROM top t;' + AS dynamic_sql + FROM v_object_dependency_m d, + dba_tables t, + dba_users u, + dba_indexes i, + dba_ind_columns c + WHERE '&&cs_kiev_version.' <> 'NOT_KIEV' -- this script ONLY executes on KIEV databases + AND t.owner = d.to_owner + AND t.table_name = d.to_name + AND t.table_name NOT LIKE 'KIEV%' -- excludes KIEV internal tables + AND u.username = t.owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND i.table_owner = t.owner + AND i.table_name = t.table_name + AND i.index_type = 'NORMAL' + AND NOT (i.uniqueness = 'UNIQUE' AND i.index_name LIKE '%PK%') -- excludes PK since it is reported under cs_top_primary_keys_table.sql + AND i.owner = t.owner + AND c.table_owner = i.table_owner + AND c.table_name = i.table_name + AND c.index_owner = i.owner + AND c.index_name = i.index_name + AND c.column_name <> 'KIEVTXNID' + AND c.column_name <> 'KIEVLIVE' + GROUP BY + i.table_owner, + i.table_name, + t.num_rows, + i.owner, + i.index_name, + i.uniqueness + ORDER BY + i.table_owner, + i.table_name, + CASE WHEN i.index_name LIKE '%PK%' THEN 1 WHEN i.uniqueness = 'UNIQUE' THEN 2 ELSE 3 END, + i.owner, + i.index_name +/ +-- +WITH /* cs_top_keys_sql.sql nonkiev */ +v_sqlarea_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */ + DISTINCT + hash_value, address + FROM v$sqlarea + WHERE sql_id = '&&cs_sql_id.' +), +v_object_dependency_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */ + DISTINCT + o.to_owner, o.to_name + FROM v$object_dependency o, + v_sqlarea_m s + WHERE o.from_hash = s.hash_value + AND o.from_address = s.address + AND o.to_type = 2 -- table +) +SELECT /* cs_top_keys_sql.sql nonkiev */ + 'PRO'||CHR(10)|| + 'PRO TABLE : '||i.table_owner||'.'||i.table_name||CHR(10)|| + 'PRO INDEX : '||i.owner||'.'||i.index_name||CHR(10)|| + 'PRO COLUMNS: ('||LISTAGG(c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||')'||CHR(10)|| + 'PRO ~~~~~~~'||CHR(10)|| + 'WITH top AS (SELECT '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' * COUNT(*) AS NUM_ROWS, ROUND(100 * COUNT(*) / SUM(COUNT(*)) OVER (), 6) AS ROWS_PERCENT,'||CHR(10)|| + LISTAGG('''"'||LOWER(c.column_name)||'": "''||t.'||LOWER(c.column_name), '||''",''||CHR(10)||' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||'||''"'' AS KEY_VALUE '||CHR(10)|| + 'FROM '||i.table_owner||'.'||i.table_name||CHR(10)|| + CASE WHEN t.num_rows > 1e9 THEN ' SAMPLE BLOCK (0.1) ' WHEN t.num_rows > 1e8 THEN ' SAMPLE BLOCK (1) ' WHEN t.num_rows > 1e7 THEN ' SAMPLE BLOCK (10) ' END||' t GROUP BY '||CHR(10)|| + LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||CHR(10)|| + 'ORDER BY 1 DESC, 2 DESC, '||LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||' FETCH FIRST 20 ROWS ONLY)'||CHR(10)|| + 'SELECT t.NUM_ROWS, t.ROWS_PERCENT, '||CHR(10)|| + 't.KEY_VALUE, ORA_HASH(SUBSTR(t.KEY_VALUE, 1, 4000)) AS KEY_HASH'||CHR(10)|| + 'FROM top t;' + AS dynamic_sql + FROM v_object_dependency_m d, + dba_tables t, + dba_indexes i, + dba_ind_columns c + WHERE '&&cs_kiev_version.' = 'NOT_KIEV' -- this script ONLY executes on NONKIEV databases + AND t.owner = d.to_owner + AND t.table_name = d.to_name + AND i.table_owner = t.owner + AND i.table_name = t.table_name + AND i.index_type = 'NORMAL' + AND i.uniqueness = 'NONUNIQUE' + AND i.owner = t.owner + AND c.table_owner = i.table_owner + AND c.table_name = i.table_name + AND c.index_owner = i.owner + AND c.index_name = i.index_name + GROUP BY + i.table_owner, + i.table_name, + t.num_rows, + i.owner, + i.index_name + ORDER BY + i.table_owner, + i.table_name, + i.owner, + i.index_name +/ +-- +SPO OFF; +SET HEA ON PAGES 100; +-- +COL VERSIONS FOR 999,999,990; +COL NUM_ROWS FOR 999,999,990; +COL ROWS_PERCENT FOR 990.000000; +COL KIEVLIVE_Y FOR 999,999,990; +COL KIEVLIVE_N FOR 999,999,990; +COL MIN_KIEVTXNID FOR 99999999999990; +COL MAX_KIEVTXNID FOR 99999999999990; +COL MIN_BEGINTIME FOR A26; +COL MAX_BEGINTIME FOR A26; +COL TIME_INTERVAL FOR A20; +COL KEY_VALUE FOR A200; +COL KEY_HASH FOR 0000000000; +-- +BREAK ON REPORT; +COMPUTE SUM OF VERSIONS NUM_ROWS ROWS_PERCENT KIEVLIVE_Y KIEVLIVE_N ON REPORT; +-- +SPO &&cs_file_name..txt APP +@/tmp/cs_driver_&&cs_mysid..sql; +-- +CLEAR BREAK COMPUTE COLUMNS; \ No newline at end of file diff --git a/csierra/cs_internal/cs_top_primary_keys_table.sql b/csierra/cs_internal/cs_top_primary_keys_table.sql new file mode 100644 index 0000000..fb2afab --- /dev/null +++ b/csierra/cs_internal/cs_top_primary_keys_table.sql @@ -0,0 +1,92 @@ +SET HEA OFF PAGES 0; +CLEAR COLUMNS; +SPO /tmp/cs_driver_&&cs_mysid..sql; +-- +SELECT 'PRO'||CHR(10)|| + 'PRO TOP_PRIMARY_KEYS when table has less than &&cs_num_rows_limit_display. rows (using approximate counts after 10M rows)'||CHR(10)|| + 'PRO ~~~~~~~~~~~~~~~~' +FROM DUAL WHERE '&&cs_kiev_version.' <> 'NOT_KIEV' AND '&&table_name.' NOT LIKE 'KIEV%' -- this script ONLY executes on KIEV databases and excludes KIEV internal tables +/ +-- +SELECT /* cs_top_primary_keys_table.sql kiev */ + 'PRO'||CHR(10)|| + 'PRO TABLE : '||i.table_owner||'.'||i.table_name||CHR(10)|| + 'PRO INDEX : '||i.owner||'.'||i.index_name||CHR(10)|| + 'PRO COLUMNS: ('||LISTAGG(c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||')'||CHR(10)|| + 'PRO ~~~~~~~'||CHR(10)|| + 'WITH top AS (SELECT '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' * COUNT(*) AS VERSIONS, ROUND(100 * COUNT(*) / SUM(COUNT(*)) OVER (), 6) AS ROWS_PERCENT,'||CHR(10)|| + 'SUM(CASE t.KIEVLIVE WHEN ''Y'' THEN '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' ELSE 0 END) AS KIEVLIVE_Y, SUM(CASE t.KIEVLIVE WHEN ''N'' THEN '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' ELSE 0 END) AS KIEVLIVE_N, '||CHR(10)|| + 'MIN(t.KIEVTXNID) AS MIN_KIEVTXNID, MAX(t.KIEVTXNID) AS MAX_KIEVTXNID, '||CHR(10)|| + LISTAGG('''"'||LOWER(c.column_name)||'": "''||t.'||LOWER(c.column_name), '||''",''||CHR(10)||' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||'||''"'' AS KEY_VALUE '||CHR(10)|| + 'FROM '||i.table_owner||'.'||i.table_name||CHR(10)|| + CASE WHEN t.num_rows > 1e9 THEN ' SAMPLE BLOCK (0.1) ' WHEN t.num_rows > 1e8 THEN ' SAMPLE BLOCK (1) ' WHEN t.num_rows > 1e7 THEN ' SAMPLE BLOCK (10) ' END||' t GROUP BY '||CHR(10)|| + LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||CHR(10)|| + 'ORDER BY 1 DESC, 2 DESC, 3 DESC, 4 DESC, 5, 6, '||LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||' FETCH FIRST 20 ROWS ONLY)'||CHR(10)|| + 'SELECT t.VERSIONS, t.ROWS_PERCENT, t.KIEVLIVE_Y, t.KIEVLIVE_N, t.MIN_KIEVTXNID, t.MAX_KIEVTXNID,'||CHR(10)|| + '(SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID) AS MIN_BEGINTIME,'||CHR(10)|| + '(SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) AS MAX_BEGINTIME,'||CHR(10)|| + -- '(SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID) AS TIME_INTERVAL,'||CHR(10)|| + -- 'TRIM(TRIM(LEADING ''0'' FROM REGEXP_SUBSTR((SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID), ''\d+ \d{2}\:\d{2}\:\d{2}\.\d{3}''))) AS TIME_INTERVAL,'||CHR(10)|| + 'REGEXP_REPLACE(REGEXP_REPLACE((SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID), ''\+0{1,8}'', ''+''), ''000'') AS TIME_INTERVAL,'||CHR(10)|| + 't.KEY_VALUE, ORA_HASH(SUBSTR(t.KEY_VALUE, 1, 4000)) AS KEY_HASH'||CHR(10)|| + 'FROM top t;' + AS dynamic_sql + FROM dba_tables t, + dba_users u, + dba_indexes i, + dba_ind_columns c + WHERE '&&cs_kiev_version.' <> 'NOT_KIEV' -- this script ONLY executes on KIEV databases + AND t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' + AND t.table_name NOT LIKE 'KIEV%' -- excludes KIEV internal tables + AND t.num_rows < &&cs_num_rows_limit_number. + AND u.username = t.owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND i.table_owner = t.owner + AND i.table_name = t.table_name + AND i.index_type = 'NORMAL' + AND i.uniqueness = 'UNIQUE' + AND i.owner = t.owner + AND i.index_name LIKE '%PK%' + AND c.table_owner = i.table_owner + AND c.table_name = i.table_name + AND c.index_owner = i.owner + AND c.index_name = i.index_name + AND c.column_name <> 'KIEVTXNID' + AND c.column_name <> 'KIEVLIVE' + GROUP BY + i.table_owner, + i.table_name, + t.num_rows, + i.owner, + i.index_name + ORDER BY + i.table_owner, + i.table_name, + i.owner, + i.index_name +/ +-- +SPO OFF; +SET HEA ON PAGES 100; +-- +COL VERSIONS FOR 999,999,990; +COL ROWS_PERCENT FOR 990.000000; +COL KIEVLIVE_Y FOR 999,999,990; +COL KIEVLIVE_N FOR 999,999,990; +COL MIN_KIEVTXNID FOR 99999999999990; +COL MAX_KIEVTXNID FOR 99999999999990; +COL MIN_BEGINTIME FOR A26; +COL MAX_BEGINTIME FOR A26; +COL TIME_INTERVAL FOR A20; +COL KEY_VALUE FOR A200; +COL KEY_HASH FOR 0000000000; +-- +BREAK ON REPORT; +COMPUTE SUM OF VERSIONS NUM_ROWS ROWS_PERCENT KIEVLIVE_Y KIEVLIVE_N ON REPORT; +-- +SPO &&cs_file_name..txt APP +@/tmp/cs_driver_&&cs_mysid..sql; +-- +CLEAR BREAK COMPUTE COLUMNS; \ No newline at end of file diff --git a/csierra/cs_internal/cs_top_secondary_keys_table.sql b/csierra/cs_internal/cs_top_secondary_keys_table.sql new file mode 100644 index 0000000..c84aa55 --- /dev/null +++ b/csierra/cs_internal/cs_top_secondary_keys_table.sql @@ -0,0 +1,134 @@ +SET HEA OFF PAGES 0; +CLEAR COLUMNS; +SPO /tmp/cs_driver_&&cs_mysid..sql; +-- +PRO PRO +PRO PRO TOP_SECONDARY_KEYS when table has less than &&cs_num_rows_limit_display. rows (using approximate counts after 10M rows) +PRO PRO ~~~~~~~~~~~~~~~~~~ +-- +SELECT /* cs_top_secondary_keys_table.sql kiev */ + 'PRO'||CHR(10)|| + 'PRO TABLE : '||i.table_owner||'.'||i.table_name||CHR(10)|| + 'PRO INDEX : '||i.owner||'.'||i.index_name||CHR(10)|| + 'PRO COLUMNS: ('||LISTAGG(c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||')'||CHR(10)|| + 'PRO ~~~~~~~'||CHR(10)|| + 'WITH top AS (SELECT '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' * COUNT(*) AS VERSIONS, ROUND(100 * COUNT(*) / SUM(COUNT(*)) OVER (), 6) AS ROWS_PERCENT,'||CHR(10)|| + 'SUM(CASE t.KIEVLIVE WHEN ''Y'' THEN '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' ELSE 0 END) AS KIEVLIVE_Y, SUM(CASE t.KIEVLIVE WHEN ''N'' THEN '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' ELSE 0 END) AS KIEVLIVE_N, '||CHR(10)|| + 'MIN(t.KIEVTXNID) AS MIN_KIEVTXNID, MAX(t.KIEVTXNID) AS MAX_KIEVTXNID, '||CHR(10)|| + LISTAGG('''"'||LOWER(c.column_name)||'": "''||t.'||LOWER(c.column_name), '||''",''||CHR(10)||' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||'||''"'' AS KEY_VALUE '||CHR(10)|| + 'FROM '||i.table_owner||'.'||i.table_name||CHR(10)|| + CASE WHEN t.num_rows > 1e9 THEN ' SAMPLE BLOCK (0.1) ' WHEN t.num_rows > 1e8 THEN ' SAMPLE BLOCK (1) ' WHEN t.num_rows > 1e7 THEN ' SAMPLE BLOCK (10) ' END||' t GROUP BY '||CHR(10)|| + LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||CHR(10)|| + 'ORDER BY 1 DESC, 2 DESC, 3 DESC, 4 DESC, 5, 6, '||LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||' FETCH FIRST 20 ROWS ONLY)'||CHR(10)|| + 'SELECT t.VERSIONS, t.ROWS_PERCENT, t.KIEVLIVE_Y, t.KIEVLIVE_N, t.MIN_KIEVTXNID, t.MAX_KIEVTXNID,'||CHR(10)|| + '(SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID) AS MIN_BEGINTIME,'||CHR(10)|| + '(SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) AS MAX_BEGINTIME,'||CHR(10)|| + -- '(SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID) AS TIME_INTERVAL,'||CHR(10)|| + -- 'TRIM(TRIM(LEADING ''0'' FROM REGEXP_SUBSTR((SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID), ''\d+ \d{2}\:\d{2}\:\d{2}\.\d{3}''))) AS TIME_INTERVAL,'||CHR(10)|| + 'REGEXP_REPLACE(REGEXP_REPLACE((SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID), ''\+0{1,8}'', ''+''), ''000'') AS TIME_INTERVAL,'||CHR(10)|| + 't.KEY_VALUE, ORA_HASH(SUBSTR(t.KEY_VALUE, 1, 4000)) AS KEY_HASH'||CHR(10)|| + 'FROM top t;' + AS dynamic_sql + FROM dba_tables t, + dba_users u, + dba_indexes i, + dba_ind_columns c + WHERE '&&cs_kiev_version.' <> 'NOT_KIEV' -- this script ONLY executes on KIEV databases + AND t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' + AND t.table_name NOT LIKE 'KIEV%' -- excludes KIEV internal tables + AND t.num_rows < &&cs_num_rows_limit_number. + AND u.username = t.owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + AND i.table_owner = t.owner + AND i.table_name = t.table_name + AND i.index_type = 'NORMAL' + AND NOT (i.uniqueness = 'UNIQUE' AND i.index_name LIKE '%PK%') -- excludes PK since it is reported under cs_top_primary_keys_table.sql + AND i.owner = t.owner + AND c.table_owner = i.table_owner + AND c.table_name = i.table_name + AND c.index_owner = i.owner + AND c.index_name = i.index_name + AND c.column_name <> 'KIEVTXNID' + AND c.column_name <> 'KIEVLIVE' + GROUP BY + i.table_owner, + i.table_name, + t.num_rows, + i.owner, + i.index_name + ORDER BY + i.table_owner, + i.table_name, + i.owner, + i.index_name +/ +-- +SELECT /* cs_top_secondary_keys_table.sql nonkiev */ + 'PRO'||CHR(10)|| + 'PRO TABLE : '||i.table_owner||'.'||i.table_name||CHR(10)|| + 'PRO INDEX : '||i.owner||'.'||i.index_name||CHR(10)|| + 'PRO COLUMNS: ('||LISTAGG(c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||')'||CHR(10)|| + 'PRO ~~~~~~~'||CHR(10)|| + 'WITH top AS (SELECT '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' * COUNT(*) AS NUM_ROWS, ROUND(100 * COUNT(*) / SUM(COUNT(*)) OVER (), 6) AS ROWS_PERCENT,'||CHR(10)|| + LISTAGG('''"'||LOWER(c.column_name)||'": "''||t.'||LOWER(c.column_name), '||''",''||CHR(10)||' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||'||''"'' AS KEY_VALUE '||CHR(10)|| + 'FROM '||i.table_owner||'.'||i.table_name||CHR(10)|| + CASE WHEN t.num_rows > 1e9 THEN ' SAMPLE BLOCK (0.1) ' WHEN t.num_rows > 1e8 THEN ' SAMPLE BLOCK (1) ' WHEN t.num_rows > 1e7 THEN ' SAMPLE BLOCK (10) ' END||' t GROUP BY '||CHR(10)|| + LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||CHR(10)|| + 'ORDER BY 1 DESC, 2 DESC, '||LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||' FETCH FIRST 20 ROWS ONLY)'||CHR(10)|| + 'SELECT t.NUM_ROWS, t.ROWS_PERCENT, '||CHR(10)|| + 't.KEY_VALUE, ORA_HASH(SUBSTR(t.KEY_VALUE, 1, 4000)) AS KEY_HASH'||CHR(10)|| + 'FROM top t;' + AS dynamic_sql + FROM dba_tables t, + dba_indexes i, + dba_ind_columns c + WHERE '&&cs_kiev_version.' = 'NOT_KIEV' -- this script ONLY executes on NONKIEV databases + AND t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' + AND i.table_owner = t.owner + AND i.table_name = t.table_name + AND i.index_type = 'NORMAL' + AND i.uniqueness = 'NONUNIQUE' + AND i.owner = t.owner + AND c.table_owner = i.table_owner + AND c.table_name = i.table_name + AND c.index_owner = i.owner + AND c.index_name = i.index_name + GROUP BY + i.table_owner, + i.table_name, + t.num_rows, + i.owner, + i.index_name + ORDER BY + i.table_owner, + i.table_name, + i.owner, + i.index_name +/ +-- +SPO OFF; +SET HEA ON PAGES 100; +-- +COL VERSIONS FOR 999,999,990; +COL NUM_ROWS FOR 999,999,990; +COL ROWS_PERCENT FOR 990.000000; +COL KIEVLIVE_Y FOR 999,999,990; +COL KIEVLIVE_N FOR 999,999,990; +COL MIN_KIEVTXNID FOR 99999999999990; +COL MAX_KIEVTXNID FOR 99999999999990; +COL MIN_BEGINTIME FOR A26; +COL MAX_BEGINTIME FOR A26; +COL TIME_INTERVAL FOR A20; +COL KEY_VALUE FOR A200; +COL KEY_HASH FOR 0000000000; +-- +BREAK ON REPORT; +COMPUTE SUM OF VERSIONS NUM_ROWS ROWS_PERCENT KIEVLIVE_Y KIEVLIVE_N ON REPORT; +-- +SPO &&cs_file_name..txt APP +@/tmp/cs_driver_&&cs_mysid..sql; +-- +CLEAR BREAK COMPUTE COLUMNS; \ No newline at end of file diff --git a/csierra/cs_internal/cs_undef.sql b/csierra/cs_internal/cs_undef.sql new file mode 100644 index 0000000..b06ba8a --- /dev/null +++ b/csierra/cs_internal/cs_undef.sql @@ -0,0 +1,2 @@ +UNDEF 1 2 3 4 5 6 7 8 9 10 +-- \ No newline at end of file diff --git a/csierra/cs_kill_machine.sql b/csierra/cs_kill_machine.sql new file mode 100644 index 0000000..63f716e --- /dev/null +++ b/csierra/cs_kill_machine.sql @@ -0,0 +1,97 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_kill_machine.sql +-- +-- Purpose: Kill User Sessions connected from some Machine(s) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/01/27 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_kill_machine.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +-- +COL sessions FOR 999,990; +COL active FOR 999,990; +COL inactive FOR 999,990; +COL killed FOR 999,990; +-- +SELECT COUNT(*) sessions, + SUM(CASE status WHEN 'ACTIVE' THEN 1 ELSE 0 END) active, + SUM(CASE status WHEN 'INACTIVE' THEN 1 ELSE 0 END) inactive, + SUM(CASE status WHEN 'KILLED' THEN 1 ELSE 0 END) killed, + machine + FROM v$session + WHERE type = 'USER' + AND sid <> SYS_CONTEXT('USERENV', 'SID') + GROUP BY + machine + ORDER BY + machine +/ +PRO +PRO 1. Enter MACHINE: (opt) +DEF machine = '&1.'; +UNDEF 1; +PRO +PRO 2. Enter STATUS: [{INACTIVE}|ACTIVE|ALL] +DEF status = '&2.'; +UNDEF 2; +COL status NEW_V status NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&status.')) IN ('ALL', 'ACTIVE', 'INACTIVE') THEN UPPER(TRIM('&&status.')) ELSE 'INACTIVE' END AS status FROM DUAL +/ +PRO +PRO 3. Last Call Elapsed Time Seconds: [{3600}] +DEF last_call_et = '&3.'; +UNDEF 3; +COL last_call_et_secs NEW_V last_call_et_secs NOPRI; +SELECT NVL('&&last_call_et.', '3600') AS last_call_et_secs FROM DUAL +/ +-- +VAR machine VARCHAR2(64); +EXEC :machine := '&&machine.'; +VAR status VARCHAR2(8); +EXEC :status := '&&status.'; +VAR last_call_et NUMBER; +EXEC :last_call_et := TO_NUMBER('&&last_call_et_secs.'); +-- +SET SERVEROUT ON; +DECLARE + l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type) + l_statament VARCHAR2(32767); + session_marked_for_kill EXCEPTION; + PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill + session_does_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist. +BEGIN + SELECT sid||','||serial# + BULK COLLECT INTO l_sid_serial + FROM v$session + WHERE type = 'USER' AND machine LIKE '%'||:machine||'%' AND :status IN ('ALL', status) AND last_call_et > :last_call_et AND sid <> SYS_CONTEXT('USERENV', 'SID'); + -- + IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- sessions found + SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_machine: killing '||(l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions from machine %'||:machine||'% with status '||:status); + FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST + LOOP + l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE'; + DBMS_OUTPUT.put_line(l_statament||';'); + BEGIN + EXECUTE IMMEDIATE l_statament; + EXCEPTION + WHEN session_marked_for_kill OR session_does_not_exist THEN NULL; + END; + END LOOP; + SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions killed!'); + ELSE + DBMS_OUTPUT.put_line('no sessions found'); + END IF; +END; +/ \ No newline at end of file diff --git a/csierra/cs_kill_root_blockers.sql b/csierra/cs_kill_root_blockers.sql new file mode 100644 index 0000000..ae913fc --- /dev/null +++ b/csierra/cs_kill_root_blockers.sql @@ -0,0 +1,52 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_kill_root_blockers.sql +-- +-- Purpose: Kill Root Blocker User Sessions +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_kill_root_blockers.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET SERVEROUT ON; +DECLARE + l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type) + l_statament VARCHAR2(32767); + session_marked_for_kill EXCEPTION; + PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill + session_does_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist. +BEGIN + SELECT root_blocker.sid||','||root_blocker.serial# + BULK COLLECT INTO l_sid_serial + FROM v$session blockee, v$session root_blocker + WHERE blockee.type = 'USER' AND blockee.sid <> SYS_CONTEXT('USERENV', 'SID') AND blockee.final_blocking_session_status = 'VALID' + AND root_blocker.sid = blockee.final_blocking_session AND root_blocker.type = 'USER' AND root_blocker.sid <> SYS_CONTEXT('USERENV', 'SID'); + -- + IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- sessions found + SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_root_blockers: killing '||(l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' root blocker sessions'); + FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST + LOOP + l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE'; + DBMS_OUTPUT.put_line(l_statament||';'); + BEGIN + EXECUTE IMMEDIATE l_statament; + EXCEPTION + WHEN session_marked_for_kill OR session_does_not_exist THEN NULL; + END; + END LOOP; + SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions killed!'); + ELSE + DBMS_OUTPUT.put_line('no sessions found'); + END IF; +END; +/ \ No newline at end of file diff --git a/csierra/cs_kill_scheduler.sql b/csierra/cs_kill_scheduler.sql new file mode 100644 index 0000000..55bf72b --- /dev/null +++ b/csierra/cs_kill_scheduler.sql @@ -0,0 +1,51 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_kill_scheduler.sql +-- +-- Purpose: Kill User Sessions waiting on Scheduler (Resource Manager) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_kill_scheduler.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET SERVEROUT ON; +DECLARE + l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type) + l_statament VARCHAR2(32767); + session_marked_for_kill EXCEPTION; + PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill + session_does_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist. +BEGIN + SELECT sid||','||serial# + BULK COLLECT INTO l_sid_serial + FROM v$session + WHERE type = 'USER' AND wait_class = 'Scheduler' AND sid <> SYS_CONTEXT('USERENV', 'SID'); + -- + IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- sessions found + SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_scheduler: killing '||(l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions on Scheduler'); + FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST + LOOP + l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE'; + DBMS_OUTPUT.put_line(l_statament||';'); + BEGIN + EXECUTE IMMEDIATE l_statament; + EXCEPTION + WHEN session_marked_for_kill OR session_does_not_exist THEN NULL; + END; + END LOOP; + SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions killed!'); + ELSE + DBMS_OUTPUT.put_line('no sessions found'); + END IF; +END; +/ \ No newline at end of file diff --git a/csierra/cs_kill_sid.sql b/csierra/cs_kill_sid.sql new file mode 100644 index 0000000..c5c4096 --- /dev/null +++ b/csierra/cs_kill_sid.sql @@ -0,0 +1,59 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_kill_sid.sql +-- +-- Purpose: Kill one User Session +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_kill_sid.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +PRO +PRO 1. Enter SID: +DEF sid = '&1.'; +UNDEF 1; +-- +VAR sid VARCHAR2(13); +EXEC :sid := SUBSTR('&&sid.'||',', 1, INSTR('&&sid.'||',', ',') - 1); +-- +SET SERVEROUT ON; +DECLARE + l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type) + l_statament VARCHAR2(32767); + session_marked_for_kill EXCEPTION; + PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill + session_does_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist. +BEGIN + SELECT sid||','||serial# + BULK COLLECT INTO l_sid_serial + FROM v$session + WHERE type = 'USER' AND sid = :sid AND sid <> SYS_CONTEXT('USERENV', 'SID'); + -- + IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- session found + SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_sid: killing sid '||:sid); + FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST + LOOP + l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE'; + DBMS_OUTPUT.put_line(l_statament||';'); + BEGIN + EXECUTE IMMEDIATE l_statament; + EXCEPTION + WHEN session_marked_for_kill OR session_does_not_exist THEN NULL; + END; + END LOOP; + SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' session killed!'); + ELSE + DBMS_OUTPUT.put_line('no session found'); + END IF; +END; +/ \ No newline at end of file diff --git a/csierra/cs_kill_sql_id.sql b/csierra/cs_kill_sql_id.sql new file mode 100644 index 0000000..02c1694 --- /dev/null +++ b/csierra/cs_kill_sql_id.sql @@ -0,0 +1,59 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_kill_sql_id.sql +-- +-- Purpose: Kill User Sessions executing some SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_kill_sql_id.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +PRO +PRO 1. Enter SQL_ID: +DEF sql_id = '&1.'; +UNDEF 1; +-- +VAR sql_id VARCHAR2(13); +EXEC :sql_id := '&&sql_id.'; +-- +SET SERVEROUT ON; +DECLARE + l_sid_serial DBMS_UTILITY.name_array; -- e.g.: 123,90536 (associative array type) + l_statament VARCHAR2(32767); + session_marked_for_kill EXCEPTION; + PRAGMA EXCEPTION_INIT(session_marked_for_kill, -00031); -- ORA-00031: session marked for kill + session_does_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(session_does_not_exist, -00030); -- ORA-00030: User session ID does not exist. +BEGIN + SELECT sid||','||serial# + BULK COLLECT INTO l_sid_serial + FROM v$session + WHERE type = 'USER' AND sql_id = :sql_id AND sid <> SYS_CONTEXT('USERENV', 'SID'); + -- + IF l_sid_serial.LAST >= l_sid_serial.FIRST THEN -- sessions found + SYS.DBMS_SYSTEM.KSDWRT(dest => 2, tst => TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SS.FF3')||' cs_kill_sql_id: killing '||(l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions executing SQL_ID '||:sql_id); + FOR i IN l_sid_serial.FIRST .. l_sid_serial.LAST + LOOP + l_statament := 'ALTER SYSTEM DISCONNECT SESSION '''||l_sid_serial(i)||''' IMMEDIATE'; + DBMS_OUTPUT.put_line(l_statament||';'); + BEGIN + EXECUTE IMMEDIATE l_statament; + EXCEPTION + WHEN session_marked_for_kill OR session_does_not_exist THEN NULL; + END; + END LOOP; + SYS.DBMS_OUTPUT.put_line((l_sid_serial.LAST - l_sid_serial.FIRST + 1)||' sessions killed!'); + ELSE + DBMS_OUTPUT.put_line('no sessions found'); + END IF; +END; +/ \ No newline at end of file diff --git a/csierra/cs_latency.sql b/csierra/cs_latency.sql new file mode 100644 index 0000000..e6f455e --- /dev/null +++ b/csierra/cs_latency.sql @@ -0,0 +1,52 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: la.sql | l.sql | cs_latency.sql +-- +-- Purpose: Current SQL latency (elapsed time over executions) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/20 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_latency.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_latency'; +DEF cs_script_acronym = 'la.sql | l.sql | '; +DEF cs_top_latency = '20'; +DEF cs_top_load = '10'; +DEF cs_ms_threshold_latency = '0.05'; +DEF cs_aas_threshold_latency = '0.005'; +DEF cs_aas_threshold_load = '0.05'; +DEF cs_uncommon_col = 'NOPRINT'; +DEF cs_execs_delta_h = '&&cs_last_snap_mins. mins'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_latency_internal_cols.sql +@@cs_internal/cs_latency_internal_query_1.sql +@@cs_internal/cs_latency_internal_foot.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_latency_1m.sql b/csierra/cs_latency_1m.sql new file mode 100644 index 0000000..0859fac --- /dev/null +++ b/csierra/cs_latency_1m.sql @@ -0,0 +1 @@ +@@cs_latency_range_iod.sql "-1m" "" \ No newline at end of file diff --git a/csierra/cs_latency_1m_extended.sql b/csierra/cs_latency_1m_extended.sql new file mode 100644 index 0000000..ac60d3a --- /dev/null +++ b/csierra/cs_latency_1m_extended.sql @@ -0,0 +1 @@ +@@cs_latency_range_iod_extended.sql "-1m" "" \ No newline at end of file diff --git a/csierra/cs_latency_extended.sql b/csierra/cs_latency_extended.sql new file mode 100644 index 0000000..551ad2d --- /dev/null +++ b/csierra/cs_latency_extended.sql @@ -0,0 +1,52 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: le.sql | cs_latency_extended.sql +-- +-- Purpose: Current SQL latency (elapsed time over executions) - Extended +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/20 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_latency_extended.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_latency_extended'; +DEF cs_script_acronym = 'le.sql | '; +DEF cs_top_latency = '40'; +DEF cs_top_load = '20'; +DEF cs_ms_threshold_latency = '0.05'; +DEF cs_aas_threshold_latency = '0.005'; +DEF cs_aas_threshold_load = '0.05'; +DEF cs_uncommon_col = 'PRINT'; +DEF cs_execs_delta_h = '&&cs_last_snap_mins. mins'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_latency_internal_cols.sql +@@cs_internal/cs_latency_internal_query_1.sql +@@cs_internal/cs_latency_internal_foot.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_latency_hist.sql b/csierra/cs_latency_hist.sql new file mode 100644 index 0000000..7c181bd --- /dev/null +++ b/csierra/cs_latency_hist.sql @@ -0,0 +1,47 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: lah.sql | lh.sql | cs_latency_hist.sql +-- +-- Purpose: Current and Historical SQL latency (cpu time over executions) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/05/24 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_latency_hist.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_latency_hist'; +DEF cs_script_acronym = 'lah.sql | lh.sql | '; +DEF cs_top = '20'; +@@cs_internal/cs_latency_hist_internal_1.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_latency_hist_internal_2.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_latency_range.sql b/csierra/cs_latency_range.sql new file mode 100644 index 0000000..ba9eb63 --- /dev/null +++ b/csierra/cs_latency_range.sql @@ -0,0 +1,65 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: lr.sql | cs_latency_range.sql +-- +-- Purpose: SQL latency for a time range (elapsed time over executions) (AWR) - 15m Granularity +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/08/06 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_latency_range.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_latency_range'; +DEF cs_script_acronym = 'lr.sql | '; +DEF cs_hours_range_default = '12'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +DEF cs_top_latency = '20'; +DEF cs_top_load = '10'; +DEF cs_ms_threshold_latency = '0.05'; +DEF cs_aas_threshold_latency = '0.005'; +DEF cs_aas_threshold_load = '0.05'; +DEF cs_uncommon_col = 'NOPRINT'; +DEF cs_execs_delta_h = '&&cs_from_to_seconds. secs'; +-- DEF cs_execs_delta_h = ''; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +@@cs_internal/cs_latency_internal_cols.sql +@@cs_internal/cs_latency_internal_query_4.sql +@@cs_internal/cs_latency_internal_foot.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +-- +@@cs_internal/cs_spool_tail.sql +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_latency_range_extended.sql b/csierra/cs_latency_range_extended.sql new file mode 100644 index 0000000..930dd2b --- /dev/null +++ b/csierra/cs_latency_range_extended.sql @@ -0,0 +1,65 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: lre.sql | cs_latency_range_extended.sql +-- +-- Purpose: SQL latency for a time range (elapsed time over executions) (AWR) - 15m Granularity - Extended +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/08/06 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_latency_range_extended.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_latency_range_extended'; +DEF cs_script_acronym = 'lre.sql | '; +DEF cs_hours_range_default = '12'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +DEF cs_top_latency = '40'; +DEF cs_top_load = '20'; +DEF cs_ms_threshold_latency = '0.05'; +DEF cs_aas_threshold_latency = '0.005'; +DEF cs_aas_threshold_load = '0.05'; +DEF cs_uncommon_col = 'PRINT'; +DEF cs_execs_delta_h = '&&cs_from_to_seconds. secs'; +-- DEF cs_execs_delta_h = ''; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +@@cs_internal/cs_latency_internal_cols.sql +@@cs_internal/cs_latency_internal_query_4.sql +@@cs_internal/cs_latency_internal_foot.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +-- +@@cs_internal/cs_spool_tail.sql +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_latency_snapshot.sql b/csierra/cs_latency_snapshot.sql new file mode 100644 index 0000000..851d115 --- /dev/null +++ b/csierra/cs_latency_snapshot.sql @@ -0,0 +1,82 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_latency_snapshot.sql +-- +-- Purpose: Snapshot SQL latency (elapsed time over executions) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/08/06 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_latency_snapshot.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_latency_snapshot'; +DEF cs_top_latency = '20'; +DEF cs_top_load = '10'; +DEF cs_ms_threshold_latency = '0.05'; +DEF cs_aas_threshold_latency = '0.005'; +DEF cs_aas_threshold_load = '0.05'; +DEF cs_uncommon_col = 'NOPRINT'; +DEF cs_default_snapshot_seconds = '15'; +-- DEF cs_execs_delta_h = '&&cs_last_snap_mins. mins'; +DEF cs_execs_delta_h = ''; +-- -- [{AUTO}|MANUAL] +-- DEF cs_snap_type = 'AUTO'; +-- -- [{-666}|sid] +-- DEF cs_sid = '-666'; +-- +DEF cs_snap_type = 'MANUAL'; +COL cs_sid NEW_V cs_sid NOPRI; +SELECT SYS_CONTEXT('USERENV', 'SID') AS cs_sid FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +PRO +PRO 1. Snapshot Interval Seconds [{&&cs_default_snapshot_seconds.}|5-900] +DEF cs_snapshot_seconds = '&1.'; +UNDEF 1; +COL cs_snapshot_seconds NEW_V cs_snapshot_seconds NOPRI; +SELECT CASE WHEN TRUNC(TO_NUMBER('&&cs_snapshot_seconds.')) BETWEEN 5 AND 900 THEN TO_CHAR(TRUNC(TO_NUMBER('&&cs_snapshot_seconds.'))) ELSE '&&cs_default_snapshot_seconds.' END AS cs_snapshot_seconds FROM DUAL +/ +DEF cs_execs_delta_h = '&&cs_snapshot_seconds. secs'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +@@cs_internal/cs_latency_internal_snapshot.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_snapshot_seconds." +@@cs_internal/cs_spool_id.sql +-- +PRO SECONDS : "&&cs_snapshot_seconds." [{&&cs_default_snapshot_seconds.}|5-900] +PRO TIME_FROM : "&&cs_sample_time_from." +PRO TIME_TO : "&&cs_sample_time_to." +-- +@@cs_internal/cs_latency_internal_cols.sql +@@cs_internal/cs_latency_internal_query_5.sql +@@cs_internal/cs_latency_internal_foot.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_snapshot_seconds." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_latency_snapshot_extended.sql b/csierra/cs_latency_snapshot_extended.sql new file mode 100644 index 0000000..f4f755c --- /dev/null +++ b/csierra/cs_latency_snapshot_extended.sql @@ -0,0 +1,82 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_latency_snapshot_extended.sql +-- +-- Purpose: Snapshot SQL latency (elapsed time over executions) - Extended +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/08/06 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_latency_snapshot_extended.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_latency_snapshot_extended'; +DEF cs_top_latency = '40'; +DEF cs_top_load = '20'; +DEF cs_ms_threshold_latency = '0.05'; +DEF cs_aas_threshold_latency = '0.005'; +DEF cs_aas_threshold_load = '0.05'; +DEF cs_uncommon_col = 'PRINT'; +DEF cs_default_snapshot_seconds = '15'; +-- DEF cs_execs_delta_h = '&&cs_last_snap_mins. mins'; +DEF cs_execs_delta_h = ''; +-- -- [{AUTO}|MANUAL] +-- DEF cs_snap_type = 'AUTO'; +-- -- [{-666}|sid] +-- DEF cs_sid = '-666'; +-- +DEF cs_snap_type = 'MANUAL'; +COL cs_sid NEW_V cs_sid NOPRI; +SELECT SYS_CONTEXT('USERENV', 'SID') AS cs_sid FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +PRO +PRO 1. Snapshot Interval Seconds [{&&cs_default_snapshot_seconds.}|5-900] +DEF cs_snapshot_seconds = '&1.'; +UNDEF 1; +COL cs_snapshot_seconds NEW_V cs_snapshot_seconds NOPRI; +SELECT CASE WHEN TRUNC(TO_NUMBER('&&cs_snapshot_seconds.')) BETWEEN 5 AND 900 THEN TO_CHAR(TRUNC(TO_NUMBER('&&cs_snapshot_seconds.'))) ELSE '&&cs_default_snapshot_seconds.' END AS cs_snapshot_seconds FROM DUAL +/ +DEF cs_execs_delta_h = '&&cs_snapshot_seconds. secs'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +@@cs_internal/cs_latency_internal_snapshot.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_snapshot_seconds." +@@cs_internal/cs_spool_id.sql +-- +PRO SECONDS : "&&cs_snapshot_seconds." [{&&cs_default_snapshot_seconds.}|5-900] +PRO TIME_FROM : "&&cs_sample_time_from." +PRO TIME_TO : "&&cs_sample_time_to." +-- +@@cs_internal/cs_latency_internal_cols.sql +@@cs_internal/cs_latency_internal_query_5.sql +@@cs_internal/cs_latency_internal_foot.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_snapshot_seconds." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_listener_log.sql b/csierra/cs_listener_log.sql new file mode 100644 index 0000000..e0d542b --- /dev/null +++ b/csierra/cs_listener_log.sql @@ -0,0 +1,53 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_listener_log.sql +-- +-- Purpose: Get listener log +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/07/02 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_listener_log.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +-- +COL listener_log_dir NEW_V listener_log_dir FOR A100 NOPRI; +SELECT d.value||'/diag/tnslsnr/'||SUBSTR(i.host_name, 1, INSTR(i.host_name, '.') - 1)||'/listener/trace' AS listener_log_dir FROM v$diag_info d, v$instance i WHERE d.name = 'ADR Base'; +PRO copy listener.log into /tmp +HOS cp &&listener_log_dir./listener.log* /tmp/ +PRO compute logons per second +HOS cat /tmp/listener.log | grep "CONNECT_DATA" | grep "[0-9][0-9]\-[A-Z][A-Z][A-Z]\-[0-9][0-9][0-9][0-9] " | cut -b 1-20 | uniq -c > /tmp/listener.log_logons_per_sec.txt +PRO compute logons per minute +HOS cat /tmp/listener.log | grep "CONNECT_DATA" | grep "[0-9][0-9]\-[A-Z][A-Z][A-Z]\-[0-9][0-9][0-9][0-9] " | cut -b 1-17 | uniq -c > /tmp/listener.log_logons_per_min.txt +PRO compute logons per hour +HOS cat /tmp/listener.log | grep "CONNECT_DATA" | grep "[0-9][0-9]\-[A-Z][A-Z][A-Z]\-[0-9][0-9][0-9][0-9] " | cut -b 1-14 | uniq -c > /tmp/listener.log_logons_per_hour.txt +PRO compute logons per day +HOS cat /tmp/listener.log | grep "CONNECT_DATA" | grep "[0-9][0-9]\-[A-Z][A-Z][A-Z]\-[0-9][0-9][0-9][0-9] " | cut -b 1-11 | uniq -c > /tmp/listener.log_logons_per_day.txt +HOS chmod 644 /tmp/listener.log* +PRO +PRO Current and prior listener logs on &&listener_log_dir. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +HOS ls -oX &&listener_log_dir./listener.log* +PRO +PRO Preserved listener logs on /tmp +PRO ~~~~~~~~~~~~~~~~~~~~~~~ +HOS ls -oX /tmp/listener.log* +PRO +PRO If you want to copy listener log file(s), execute one scp command below, from a TERM session running on your Mac/PC: +PRO +PRO scp &&cs_host_name.:/tmp/listener.log &&cs_local_dir. +PRO scp &&cs_host_name.:/tmp/listener.log_logons_per_*.txt &&cs_local_dir. +PRO scp &&cs_host_name.:/tmp/listener.log* &&cs_local_dir. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_load_sysmetric_for_cdb_hist.sql b/csierra/cs_load_sysmetric_for_cdb_hist.sql new file mode 100644 index 0000000..2b17816 --- /dev/null +++ b/csierra/cs_load_sysmetric_for_cdb_hist.sql @@ -0,0 +1,211 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_load_sysmetric_for_cdb_hist.sql +-- +-- Purpose: System Load as per DBA_HIST_SYSMETRIC_SUMMARY View for a CDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/08/09 +-- +-- Usage: Execute connected to CDB and pass range of AWR snapshots. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_load_sysmetric_for_cdb_hist.sql +-- +-- Notes: Stand-alone script +-- +-- Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF view_name = 'dba_hist_sysmetric_summary'; +DEF common_predicate = ""; +DEF script_name = 'cs_load_sysmetric_for_cdb_hist'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con_name NEW_V cs_con_name NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name FROM v$database; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +SPO /tmp/&&script_name._&&report_date_time..txt +-- +PRO +PRO Specify the number of days of snapshots to choose from +PRO +PRO Enter number of days: [{1}|0-60] +DEF num_days = '&1' +UNDEF 1; +-- +COL snap_id NEW_V snap_id FOR A7; +COL prior_snap_id NEW_V prior_snap_id FOR A7 NOPRI; +SELECT LPAD(TO_CHAR(snap_id), 7, ' ') AS snap_id, CAST(end_interval_time AS DATE) AS snap_time, LPAD(TO_CHAR(snap_id - 1), 7, ' ') AS prior_snap_id + FROM dba_hist_snapshot + WHERE instance_number = SYS_CONTEXT('USERENV','INSTANCE') + AND dbid = (SELECT dbid FROM v$database) + AND CAST(end_interval_time AS DATE) > SYSDATE - TO_NUMBER(NVL('&&num_days.', '1')) + ORDER BY + snap_id +/ +-- +PRO +PRO Enter begin snap_id: [{&&prior_snap_id.}] +DEF begin_snap_id = '&2.'; +UNDEF 2; +COL begin_snap_id NEW_V begin_snap_id NOPRI; +SELECT NVL('&&begin_snap_id.', '&&prior_snap_id.') AS begin_snap_id FROM DUAL; +-- +PRO +PRO Enter end snap_id: [{&&snap_id.}] +DEF end_snap_id = '&3.'; +UNDEF 3; +COL end_snap_id NEW_V end_snap_id NOPRI; +SELECT NVL('&&end_snap_id.', '&&snap_id.') AS end_snap_id FROM DUAL; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET container = CDB$ROOT; +-- +-- anonymous pl/sql below is identical for cs_load_sysmetric_for_cdb_hist.sql and cs_load_sysmetric_for_pdb_hist.sql +-- +SET SERVEROUT ON; +DECLARE + l_begin_time DATE; + l_end_time DATE; + -- + FUNCTION get_avg (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_avg NUMBER; + BEGIN + SELECT AVG(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN average / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN average / POWER(10, 6) ELSE average END) INTO l_avg FROM &&view_name. WHERE &&common_predicate. snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') AND metric_name = p_metric_name; -- AVG returns NULL when NOT FOUND + RETURN l_avg; + END get_avg; + -- + FUNCTION get_max (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_max NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN maxval / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN maxval / POWER(10, 6) ELSE maxval END) INTO l_max FROM &&view_name. WHERE &&common_predicate. snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_max; + END get_max; + -- + PROCEDURE output (p_line IN VARCHAR2) IS + BEGIN + DBMS_OUTPUT.put_line(p_line); + END output; + -- + PROCEDURE output (p_title IN VARCHAR2, p_metric_name_per_sec IN VARCHAR2, p_metric_name_per_txn IN VARCHAR2) IS + BEGIN + output ( + '| '|| + LPAD(p_title, 25, ' ')||':'|| + LPAD(NVL(TRIM(TO_CHAR(get_avg(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_avg(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_max(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_max(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ') + ); + END output; + -- + PROCEDURE output (p_title IN VARCHAR2, p_metric_name IN VARCHAR2) IS + BEGIN + output ( + '| '|| + LPAD(p_title, 25, ' ')||':'|| + LPAD(NVL(TRIM(TO_CHAR(get_avg(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_max(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ') + ); + END output; +BEGIN + IF SYS_CONTEXT('USERENV', 'CON_NAME') <> 'CDB$ROOT' AND LOWER('&&view_name.') = 'dba_hist_sysmetric_summary' THEN + raise_application_error(-20000, 'Executed from '||SYS_CONTEXT('USERENV', 'CON_NAME')||' instead of CDB$ROOT'); + END IF; + -- + output('/tmp/&&script_name._&&report_date_time..txt'); + output('+ ------------------------------------------------'); + output('|'); + output('| Date: '||TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')); + output('| Host: '||SYS_CONTEXT('USERENV','HOST')); + output('| Database: &&cs_db.'); + output('| Container: '||SYS_CONTEXT('USERENV', 'CON_NAME')); + SELECT MAX(CAST(end_interval_time AS DATE)) INTO l_begin_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&begin_snap_id.'); + SELECT MAX(CAST(end_interval_time AS DATE)) INTO l_end_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&end_snap_id.'); + output('| Range: '||TO_CHAR(l_begin_time, 'YYYY-MM-DD"T"HH24:MI:SS')||' - '||TO_CHAR(l_end_time, 'YYYY-MM-DD"T"HH24:MI:SS')); + output('|'); + output('| Load Profile (&&view_name.)'); + output('| ~~~~~~~~~~~~'); + output('| Avg Per Sec Avg Per Txn Max Per Sec Max Per Txn'); + output('| --------------------- --------------------- --------------------- ---------------------'); + output('DB Time(s)', 'Database Time Per Sec', NULL); + output('DB CPU(s)', 'CPU Usage Per Sec', 'CPU Usage Per Txn'); + output('Background CPU(s)', 'Background CPU Usage Per Sec', NULL); + output('Host CPU(s)', 'Host CPU Usage Per Sec', NULL); + output('Redo size (MB)', 'Redo Generated Per Sec', 'Redo Generated Per Txn'); + output('Redo writes', 'Redo Writes Per Sec', 'Redo Writes Per Txn'); + output('DBWR checkpoints', 'DBWR Checkpoints Per Sec', NULL); + output('Logical read (blocks)', 'Logical Reads Per Sec', 'Logical Reads Per Txn'); + output('Block gets', 'DB Block Gets Per Sec', 'DB Block Gets Per Txn'); + output('Consistent read gets', 'Consistent Read Gets Per Sec', 'Consistent Read Gets Per Txn'); + output('Block changes', 'DB Block Changes Per Sec', 'DB Block Changes Per Txn'); + output('Consistent read changes', 'Consistent Read Changes Per Sec', 'Consistent Read Changes Per Txn'); + output('CR blocks created', 'CR Blocks Created Per Sec', 'CR Blocks Created Per Txn'); + output('CR Undo records applied', 'CR Undo Records Applied Per Sec', 'CR Undo Records Applied Per Txn'); + output('IO (MB)', 'I/O Megabytes per Second', NULL); + output('IO requests', 'I/O Requests per Second', NULL); + output('Physical read (blocks)', 'Physical Reads Per Sec', 'Physical Reads Per Txn'); + output('Physical write (blocks)', 'Physical Writes Per Sec', 'Physical Writes Per Txn'); + output('Total read IO requests', 'Physical Read Total IO Requests Per Sec', NULL); + output('Total write IO requests', 'Physical Write Total IO Requests Per Sec', NULL); + output('Total read IO (MB)', 'Physical Read Total Bytes Per Sec', NULL); + output('Total write IO (MB)', 'Physical Write Total Bytes Per Sec', NULL); + output('Appl read IO requests', 'Physical Read IO Requests Per Sec', NULL); + output('Appl write IO requests', 'Physical Write IO Requests Per Sec', NULL); + output('Appl read IO (MB)', 'Physical Read Bytes Per Sec', NULL); + output('Appl wite IO (MB)', 'Physical Write Bytes Per Sec', NULL); + output('Total table scans', 'Total Table Scans Per Sec', 'Total Table Scans Per Txn'); + output('Long table scans', 'Long Table Scans Per Sec', 'Long Table Scans Per Txn'); + output('Total index scans', 'Total Index Scans Per Sec', 'Total Index Scans Per Txn'); + output('Full index scans', 'Full Index Scans Per Sec', 'Full Index Scans Per Txn'); + output('Leaf node splits', 'Leaf Node Splits Per Sec', 'Leaf Node Splits Per Txn'); + output('Network traffic (MB)', 'Network Traffic Volume Per Sec', NULL); + output('User calls', 'User Calls Per Sec', 'User Calls Per Txn'); + output('Recursive calls', 'Recursive Calls Per Sec', 'Recursive Calls Per Txn'); + output('Parses (SQL)', 'Total Parse Count Per Sec', 'Total Parse Count Per Txn'); + output('Hard parses (SQL)', 'Hard Parse Count Per Sec', 'Hard Parse Count Per Txn'); + output('Failed parses (SQL)', 'Parse Failure Count Per Sec', 'Parse Failure Count Per Txn'); + output('Executes (SQL)', 'Executions Per Sec', 'Executions Per Txn'); + output('Logons', 'Logons Per Sec', 'Logons Per Txn'); + output('Open cursors', 'Open Cursors Per Sec', 'Open Cursors Per Txn'); + output('Transactions', 'User Transaction Per Sec', NULL); + output('Commits', 'User Commits Per Sec', NULL); + output('Rollbacks', 'User Rollbacks Per Sec', NULL); + output('VM in (MB)', 'VM in bytes Per Sec', NULL); + output('VM out (MB)', 'VM out bytes Per Sec', NULL); + output('|'); + output('| Avg Max'); + output('| --------------------- ---------------------'); + output('OS Load', 'Current OS Load'); + output('Logons Count', 'Current Logons Count'); + output('Session Count', 'Session Count'); + output('Average Active Sessions', 'Average Active Sessions'); + output('Active Serial Sessions', 'Active Serial Sessions'); + output('Active Parallel Sessions', 'Active Parallel Sessions'); + output('Background Sessions', 'Background Time Per Sec'); + output('Open Cursors Count', 'Current Open Cursors Count'); + output('Temp Space (MB)', 'Temp Space Used'); + output('PGA Allocated (MB)', 'Total PGA Allocated'); + output('PGA SQL Work Area (MB)', 'Total PGA Used by SQL Workareas'); + output('|'); + output('+ ------------------------------------------------'); + output('SQL> @&&script_name..sql "&&num_days." "&&begin_snap_id." "&&end_snap_id."'); +END; +/ +SPO OFF; +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +ALTER SESSION SET CONTAINER = &&cs_con_name.; +-- +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_load_sysmetric_for_cdb_mem.sql b/csierra/cs_load_sysmetric_for_cdb_mem.sql new file mode 100644 index 0000000..ed9fb45 --- /dev/null +++ b/csierra/cs_load_sysmetric_for_cdb_mem.sql @@ -0,0 +1,203 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_load_sysmetric_for_cdb_mem.sql +-- +-- Purpose: System Load as per V$SYSMETRIC Views for a CDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/08/09 +-- +-- Usage: Execute connected to CDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_load_sysmetric_for_cdb_mem.sql +-- +-- Notes: Stand-alone script +-- +-- Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF view_name_prefix = 'v$sysmetric'; +DEF common_predicate = ""; +DEF script_name = 'cs_load_sysmetric_for_cdb_mem'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con_name NEW_V cs_con_name NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name FROM v$database; +-- +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +SPO /tmp/&&script_name._&&report_date_time..txt +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET container = CDB$ROOT; +-- +-- anonymous pl/sql below is identical for cs_load_sysmetric_for_cdb_mem.sql and cs_load_sysmetric_for_pdb_mem.sql +-- +SET SERVEROUT ON; +DECLARE + l_begin_time DATE; + l_end_time DATE; + -- + FUNCTION get_15s_avg (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_avg NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN value / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN value / POWER(10, 6) ELSE value END) INTO l_avg FROM &&view_name_prefix. WHERE &&common_predicate. group_id = 3 AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_avg; + END get_15s_avg; + -- + FUNCTION get_1m_avg (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_avg NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN value / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN value / POWER(10, 6) ELSE value END) INTO l_avg FROM &&view_name_prefix. WHERE &&common_predicate. group_id IN (2, 18) AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_avg; + END get_1m_avg; + -- + FUNCTION get_1h_avg (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_avg NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN average / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN average / POWER(10, 6) ELSE average END) INTO l_avg FROM &&view_name_prefix._summary WHERE &&common_predicate. group_id IN (2, 18) AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_avg; + END get_1h_avg; + -- + FUNCTION get_1h_max (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_max NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN maxval / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN maxval / POWER(10, 6) ELSE maxval END) INTO l_max FROM &&view_name_prefix._summary WHERE &&common_predicate. group_id IN (2, 18) AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_max; + END get_1h_max; + -- + PROCEDURE output (p_line IN VARCHAR2) IS + BEGIN + DBMS_OUTPUT.put_line(p_line); + END output; + -- + PROCEDURE output (p_title IN VARCHAR2, p_metric_name_per_sec IN VARCHAR2, p_metric_name_per_txn IN VARCHAR2) IS + BEGIN + output ( + '| '|| + LPAD(p_title, 25, ' ')||':'|| + LPAD(NVL(TRIM(TO_CHAR(get_15s_avg(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_15s_avg(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1m_avg(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1m_avg(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_avg(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_avg(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_max(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_max(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ') + ); + END output; + -- + PROCEDURE output (p_title IN VARCHAR2, p_metric_name IN VARCHAR2) IS + BEGIN + output ( + '| '|| + LPAD(p_title, 25, ' ')||':'|| + LPAD(NVL(TRIM(TO_CHAR(get_15s_avg(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1m_avg(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_avg(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_max(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ') + ); + END output; +BEGIN + IF SYS_CONTEXT('USERENV', 'CON_NAME') <> 'CDB$ROOT' AND LOWER('&&view_name_prefix.') = 'v$sysmetric' THEN + raise_application_error(-20000, 'Executed from '||SYS_CONTEXT('USERENV', 'CON_NAME')||' instead of CDB$ROOT'); + END IF; + -- + output('/tmp/&&script_name._&&report_date_time..txt'); + output('+ ------------------------------------------------'); + output('|'); + output('| Date: '||TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')); + output('| Host: '||SYS_CONTEXT('USERENV','HOST')); + output('| Database: &&cs_db.'); + output('| Container: '||SYS_CONTEXT('USERENV', 'CON_NAME')); + SELECT MAX(begin_time), MAX(end_time) INTO l_begin_time, l_end_time FROM &&view_name_prefix. WHERE group_id = 3 AND ROWNUM = 1; -- MAX returns NULL when NOT FOUND + output('| 15s: '||TO_CHAR(l_begin_time, 'YYYY-MM-DD"T"HH24:MI:SS')||' - '||TO_CHAR(l_end_time, 'YYYY-MM-DD"T"HH24:MI:SS')); + SELECT MAX(begin_time), MAX(end_time) INTO l_begin_time, l_end_time FROM &&view_name_prefix. WHERE group_id IN (2, 18) AND ROWNUM = 1; -- MAX returns NULL when NOT FOUND + output('| 1m: '||TO_CHAR(l_begin_time, 'YYYY-MM-DD"T"HH24:MI:SS')||' - '||TO_CHAR(l_end_time, 'YYYY-MM-DD"T"HH24:MI:SS')); + SELECT MAX(begin_time), MAX(end_time) INTO l_begin_time, l_end_time FROM &&view_name_prefix._summary WHERE group_id IN (2, 18) AND ROWNUM = 1; -- MAX returns NULL when NOT FOUND + output('| 1h: '||TO_CHAR(l_begin_time, 'YYYY-MM-DD"T"HH24:MI:SS')||' - '||TO_CHAR(l_end_time, 'YYYY-MM-DD"T"HH24:MI:SS')); + output('|'); + output('| Load Profile (&&view_name_prefix. and &&view_name_prefix._summary)'); + output('| ~~~~~~~~~~~~'); + output('| 15s Avg Per Sec 15s Avg Per Txn 1m Avg Per Sec 1m Avg Per Txn 1h Avg Per Sec 1h Avg Per Txn 1h Max Per Sec 1h Max Per Txn'); + output('| --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- ---------------------'); + output('DB Time(s)', 'Database Time Per Sec', NULL); + output('DB CPU(s)', 'CPU Usage Per Sec', 'CPU Usage Per Txn'); + output('Background CPU(s)', 'Background CPU Usage Per Sec', NULL); + output('Host CPU(s)', 'Host CPU Usage Per Sec', NULL); + output('Redo size (MB)', 'Redo Generated Per Sec', 'Redo Generated Per Txn'); + output('Redo writes', 'Redo Writes Per Sec', 'Redo Writes Per Txn'); + output('DBWR checkpoints', 'DBWR Checkpoints Per Sec', NULL); + output('Logical read (blocks)', 'Logical Reads Per Sec', 'Logical Reads Per Txn'); + output('Block gets', 'DB Block Gets Per Sec', 'DB Block Gets Per Txn'); + output('Consistent read gets', 'Consistent Read Gets Per Sec', 'Consistent Read Gets Per Txn'); + output('Block changes', 'DB Block Changes Per Sec', 'DB Block Changes Per Txn'); + output('Consistent read changes', 'Consistent Read Changes Per Sec', 'Consistent Read Changes Per Txn'); + output('CR blocks created', 'CR Blocks Created Per Sec', 'CR Blocks Created Per Txn'); + output('CR Undo records applied', 'CR Undo Records Applied Per Sec', 'CR Undo Records Applied Per Txn'); + output('IO (MB)', 'I/O Megabytes per Second', NULL); + output('IO requests', 'I/O Requests per Second', NULL); + output('Physical read (blocks)', 'Physical Reads Per Sec', 'Physical Reads Per Txn'); + output('Physical write (blocks)', 'Physical Writes Per Sec', 'Physical Writes Per Txn'); + output('Total read IO requests', 'Physical Read Total IO Requests Per Sec', NULL); + output('Total write IO requests', 'Physical Write Total IO Requests Per Sec', NULL); + output('Total read IO (MB)', 'Physical Read Total Bytes Per Sec', NULL); + output('Total write IO (MB)', 'Physical Write Total Bytes Per Sec', NULL); + output('Appl read IO requests', 'Physical Read IO Requests Per Sec', NULL); + output('Appl write IO requests', 'Physical Write IO Requests Per Sec', NULL); + output('Appl read IO (MB)', 'Physical Read Bytes Per Sec', NULL); + output('Appl wite IO (MB)', 'Physical Write Bytes Per Sec', NULL); + output('Total table scans', 'Total Table Scans Per Sec', 'Total Table Scans Per Txn'); + output('Long table scans', 'Long Table Scans Per Sec', 'Long Table Scans Per Txn'); + output('Total index scans', 'Total Index Scans Per Sec', 'Total Index Scans Per Txn'); + output('Full index scans', 'Full Index Scans Per Sec', 'Full Index Scans Per Txn'); + output('Leaf node splits', 'Leaf Node Splits Per Sec', 'Leaf Node Splits Per Txn'); + output('Network traffic (MB)', 'Network Traffic Volume Per Sec', NULL); + output('User calls', 'User Calls Per Sec', 'User Calls Per Txn'); + output('Recursive calls', 'Recursive Calls Per Sec', 'Recursive Calls Per Txn'); + output('Parses (SQL)', 'Total Parse Count Per Sec', 'Total Parse Count Per Txn'); + output('Hard parses (SQL)', 'Hard Parse Count Per Sec', 'Hard Parse Count Per Txn'); + output('Failed parses (SQL)', 'Parse Failure Count Per Sec', 'Parse Failure Count Per Txn'); + output('Executes (SQL)', 'Executions Per Sec', 'Executions Per Txn'); + output('Logons', 'Logons Per Sec', 'Logons Per Txn'); + output('Open cursors', 'Open Cursors Per Sec', 'Open Cursors Per Txn'); + output('Transactions', 'User Transaction Per Sec', NULL); + output('Commits', 'User Commits Per Sec', NULL); + output('Rollbacks', 'User Rollbacks Per Sec', NULL); + output('VM in (MB)', 'VM in bytes Per Sec', NULL); + output('VM out (MB)', 'VM out bytes Per Sec', NULL); + output('|'); + output('| 15s Avg 1m Avg 1h Avg 1h Max'); + output('| --------------------- --------------------- --------------------- ---------------------'); + output('OS Load', 'Current OS Load'); + output('Logons Count', 'Current Logons Count'); + output('Session Count', 'Session Count'); + output('Average Active Sessions', 'Average Active Sessions'); + output('Active Serial Sessions', 'Active Serial Sessions'); + output('Active Parallel Sessions', 'Active Parallel Sessions'); + output('Background Sessions', 'Background Time Per Sec'); + output('Open Cursors Count', 'Current Open Cursors Count'); + output('Temp Space (MB)', 'Temp Space Used'); + output('PGA Allocated (MB)', 'Total PGA Allocated'); + output('PGA SQL Work Area (MB)', 'Total PGA Used by SQL Workareas'); + output('|'); + output('+ ------------------------------------------------'); + output('SQL> @&&script_name..sql'); +END; +/ +SPO OFF; +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +ALTER SESSION SET CONTAINER = &&cs_con_name.; +-- +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_load_sysmetric_for_pdb_hist.sql b/csierra/cs_load_sysmetric_for_pdb_hist.sql new file mode 100644 index 0000000..5c6c350 --- /dev/null +++ b/csierra/cs_load_sysmetric_for_pdb_hist.sql @@ -0,0 +1,204 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_load_sysmetric_for_pdb_hist.sql +-- +-- Purpose: System Load as per DBA_HIST_CON_SYSMETRIC_SUMM View for a PDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/08/09 +-- +-- Usage: Execute connected to PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_load_sysmetric_for_pdb_hist.sql +-- +-- Notes: Stand-alone script +-- +-- Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF view_name = 'dba_hist_con_sysmetric_summ'; +DEF common_predicate = "con_id = SYS_CONTEXT('USERENV', 'CON_ID') AND "; +DEF script_name = 'cs_load_sysmetric_for_pdb_hist'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con NEW_V cs_con NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con FROM v$database; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +SPO /tmp/&&script_name._&&report_date_time..txt +-- +PRO +PRO Specify the number of days of snapshots to choose from +PRO +PRO Enter number of days: [{1}|0-60] +DEF num_days = '&1' +UNDEF 1; +-- +COL snap_id NEW_V snap_id FOR A7; +COL prior_snap_id NEW_V prior_snap_id FOR A7 NOPRI; +SELECT LPAD(TO_CHAR(snap_id), 7, ' ') AS snap_id, CAST(end_interval_time AS DATE) AS snap_time, LPAD(TO_CHAR(snap_id - 1), 7, ' ') AS prior_snap_id + FROM dba_hist_snapshot + WHERE instance_number = SYS_CONTEXT('USERENV','INSTANCE') + AND dbid = (SELECT dbid FROM v$database) + AND CAST(end_interval_time AS DATE) > SYSDATE - TO_NUMBER(NVL('&&num_days.', '1')) + ORDER BY + snap_id +/ +-- +PRO +PRO Enter begin snap_id: [{&&prior_snap_id.}] +DEF begin_snap_id = '&2.'; +UNDEF 2; +COL begin_snap_id NEW_V begin_snap_id NOPRI; +SELECT NVL('&&begin_snap_id.', '&&prior_snap_id.') AS begin_snap_id FROM DUAL; +-- +PRO +PRO Enter end snap_id: [{&&snap_id.}] +DEF end_snap_id = '&3.'; +UNDEF 3; +COL end_snap_id NEW_V end_snap_id NOPRI; +SELECT NVL('&&end_snap_id.', '&&snap_id.') AS end_snap_id FROM DUAL; +-- +-- anonymous pl/sql below is identical for cs_load_sysmetric_for_cdb_hist.sql and cs_load_sysmetric_for_pdb_hist.sql +-- +SET SERVEROUT ON; +DECLARE + l_begin_time DATE; + l_end_time DATE; + -- + FUNCTION get_avg (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_avg NUMBER; + BEGIN + SELECT AVG(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN average / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN average / POWER(10, 6) ELSE average END) INTO l_avg FROM &&view_name. WHERE &&common_predicate. snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') AND metric_name = p_metric_name; -- AVG returns NULL when NOT FOUND + RETURN l_avg; + END get_avg; + -- + FUNCTION get_max (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_max NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN maxval / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN maxval / POWER(10, 6) ELSE maxval END) INTO l_max FROM &&view_name. WHERE &&common_predicate. snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_max; + END get_max; + -- + PROCEDURE output (p_line IN VARCHAR2) IS + BEGIN + DBMS_OUTPUT.put_line(p_line); + END output; + -- + PROCEDURE output (p_title IN VARCHAR2, p_metric_name_per_sec IN VARCHAR2, p_metric_name_per_txn IN VARCHAR2) IS + BEGIN + output ( + '| '|| + LPAD(p_title, 25, ' ')||':'|| + LPAD(NVL(TRIM(TO_CHAR(get_avg(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_avg(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_max(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_max(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ') + ); + END output; + -- + PROCEDURE output (p_title IN VARCHAR2, p_metric_name IN VARCHAR2) IS + BEGIN + output ( + '| '|| + LPAD(p_title, 25, ' ')||':'|| + LPAD(NVL(TRIM(TO_CHAR(get_avg(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_max(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ') + ); + END output; +BEGIN + IF SYS_CONTEXT('USERENV', 'CON_NAME') <> 'CDB$ROOT' AND LOWER('&&view_name.') = 'dba_hist_sysmetric_summary' THEN + raise_application_error(-20000, 'Executed from '||SYS_CONTEXT('USERENV', 'CON_NAME')||' instead of CDB$ROOT'); + END IF; + -- + output('/tmp/&&script_name._&&report_date_time..txt'); + output('+ ------------------------------------------------'); + output('|'); + output('| Date: '||TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')); + output('| Host: '||SYS_CONTEXT('USERENV','HOST')); + output('| Database: &&cs_db.'); + output('| Container: '||SYS_CONTEXT('USERENV', 'CON_NAME')); + SELECT MAX(CAST(end_interval_time AS DATE)) INTO l_begin_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&begin_snap_id.'); + SELECT MAX(CAST(end_interval_time AS DATE)) INTO l_end_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&end_snap_id.'); + output('| Range: '||TO_CHAR(l_begin_time, 'YYYY-MM-DD"T"HH24:MI:SS')||' - '||TO_CHAR(l_end_time, 'YYYY-MM-DD"T"HH24:MI:SS')); + output('|'); + output('| Load Profile (&&view_name.)'); + output('| ~~~~~~~~~~~~'); + output('| Avg Per Sec Avg Per Txn Max Per Sec Max Per Txn'); + output('| --------------------- --------------------- --------------------- ---------------------'); + output('DB Time(s)', 'Database Time Per Sec', NULL); + output('DB CPU(s)', 'CPU Usage Per Sec', 'CPU Usage Per Txn'); + output('Background CPU(s)', 'Background CPU Usage Per Sec', NULL); + output('Host CPU(s)', 'Host CPU Usage Per Sec', NULL); + output('Redo size (MB)', 'Redo Generated Per Sec', 'Redo Generated Per Txn'); + output('Redo writes', 'Redo Writes Per Sec', 'Redo Writes Per Txn'); + output('DBWR checkpoints', 'DBWR Checkpoints Per Sec', NULL); + output('Logical read (blocks)', 'Logical Reads Per Sec', 'Logical Reads Per Txn'); + output('Block gets', 'DB Block Gets Per Sec', 'DB Block Gets Per Txn'); + output('Consistent read gets', 'Consistent Read Gets Per Sec', 'Consistent Read Gets Per Txn'); + output('Block changes', 'DB Block Changes Per Sec', 'DB Block Changes Per Txn'); + output('Consistent read changes', 'Consistent Read Changes Per Sec', 'Consistent Read Changes Per Txn'); + output('CR blocks created', 'CR Blocks Created Per Sec', 'CR Blocks Created Per Txn'); + output('CR Undo records applied', 'CR Undo Records Applied Per Sec', 'CR Undo Records Applied Per Txn'); + output('IO (MB)', 'I/O Megabytes per Second', NULL); + output('IO requests', 'I/O Requests per Second', NULL); + output('Physical read (blocks)', 'Physical Reads Per Sec', 'Physical Reads Per Txn'); + output('Physical write (blocks)', 'Physical Writes Per Sec', 'Physical Writes Per Txn'); + output('Total read IO requests', 'Physical Read Total IO Requests Per Sec', NULL); + output('Total write IO requests', 'Physical Write Total IO Requests Per Sec', NULL); + output('Total read IO (MB)', 'Physical Read Total Bytes Per Sec', NULL); + output('Total write IO (MB)', 'Physical Write Total Bytes Per Sec', NULL); + output('Appl read IO requests', 'Physical Read IO Requests Per Sec', NULL); + output('Appl write IO requests', 'Physical Write IO Requests Per Sec', NULL); + output('Appl read IO (MB)', 'Physical Read Bytes Per Sec', NULL); + output('Appl wite IO (MB)', 'Physical Write Bytes Per Sec', NULL); + output('Total table scans', 'Total Table Scans Per Sec', 'Total Table Scans Per Txn'); + output('Long table scans', 'Long Table Scans Per Sec', 'Long Table Scans Per Txn'); + output('Total index scans', 'Total Index Scans Per Sec', 'Total Index Scans Per Txn'); + output('Full index scans', 'Full Index Scans Per Sec', 'Full Index Scans Per Txn'); + output('Leaf node splits', 'Leaf Node Splits Per Sec', 'Leaf Node Splits Per Txn'); + output('Network traffic (MB)', 'Network Traffic Volume Per Sec', NULL); + output('User calls', 'User Calls Per Sec', 'User Calls Per Txn'); + output('Recursive calls', 'Recursive Calls Per Sec', 'Recursive Calls Per Txn'); + output('Parses (SQL)', 'Total Parse Count Per Sec', 'Total Parse Count Per Txn'); + output('Hard parses (SQL)', 'Hard Parse Count Per Sec', 'Hard Parse Count Per Txn'); + output('Failed parses (SQL)', 'Parse Failure Count Per Sec', 'Parse Failure Count Per Txn'); + output('Executes (SQL)', 'Executions Per Sec', 'Executions Per Txn'); + output('Logons', 'Logons Per Sec', 'Logons Per Txn'); + output('Open cursors', 'Open Cursors Per Sec', 'Open Cursors Per Txn'); + output('Transactions', 'User Transaction Per Sec', NULL); + output('Commits', 'User Commits Per Sec', NULL); + output('Rollbacks', 'User Rollbacks Per Sec', NULL); + output('VM in (MB)', 'VM in bytes Per Sec', NULL); + output('VM out (MB)', 'VM out bytes Per Sec', NULL); + output('|'); + output('| Avg Max'); + output('| --------------------- ---------------------'); + output('OS Load', 'Current OS Load'); + output('Logons Count', 'Current Logons Count'); + output('Session Count', 'Session Count'); + output('Average Active Sessions', 'Average Active Sessions'); + output('Active Serial Sessions', 'Active Serial Sessions'); + output('Active Parallel Sessions', 'Active Parallel Sessions'); + output('Background Sessions', 'Background Time Per Sec'); + output('Open Cursors Count', 'Current Open Cursors Count'); + output('Temp Space (MB)', 'Temp Space Used'); + output('PGA Allocated (MB)', 'Total PGA Allocated'); + output('PGA SQL Work Area (MB)', 'Total PGA Used by SQL Workareas'); + output('|'); + output('+ ------------------------------------------------'); + output('SQL> @&&script_name..sql "&&num_days." "&&begin_snap_id." "&&end_snap_id."'); +END; +/ +SPO OFF; +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_load_sysmetric_for_pdb_mem.sql b/csierra/cs_load_sysmetric_for_pdb_mem.sql new file mode 100644 index 0000000..ec58a6d --- /dev/null +++ b/csierra/cs_load_sysmetric_for_pdb_mem.sql @@ -0,0 +1,195 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_load_sysmetric_for_pdb_mem.sql +-- +-- Purpose: System Load as per V$CON_SYSMETRIC Views for a PDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/08/09 +-- +-- Usage: Execute connected to PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_load_sysmetric_for_pdb_mem.sql +-- +-- Notes: Stand-alone script +-- +-- Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF view_name_prefix = 'v$con_sysmetric'; +DEF common_predicate = "con_id = SYS_CONTEXT('USERENV', 'CON_ID') AND "; +DEF script_name = 'cs_load_sysmetric_for_pdb_mem'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con NEW_V cs_con NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con FROM v$database; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +SPO /tmp/&&script_name._&&report_date_time..txt +-- +-- anonymous pl/sql below is identical for cs_load_sysmetric_for_cdb_mem.sql and cs_load_sysmetric_for_pdb_mem.sql +-- +SET SERVEROUT ON; +DECLARE + l_begin_time DATE; + l_end_time DATE; + -- + FUNCTION get_15s_avg (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_avg NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN value / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN value / POWER(10, 6) ELSE value END) INTO l_avg FROM &&view_name_prefix. WHERE &&common_predicate. group_id = 3 AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_avg; + END get_15s_avg; + -- + FUNCTION get_1m_avg (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_avg NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN value / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN value / POWER(10, 6) ELSE value END) INTO l_avg FROM &&view_name_prefix. WHERE &&common_predicate. group_id IN (2, 18) AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_avg; + END get_1m_avg; + -- + FUNCTION get_1h_avg (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_avg NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN average / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN average / POWER(10, 6) ELSE average END) INTO l_avg FROM &&view_name_prefix._summary WHERE &&common_predicate. group_id IN (2, 18) AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_avg; + END get_1h_avg; + -- + FUNCTION get_1h_max (p_metric_name IN VARCHAR2) RETURN NUMBER IS + l_max NUMBER; + BEGIN + SELECT MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN maxval / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN maxval / POWER(10, 6) ELSE maxval END) INTO l_max FROM &&view_name_prefix._summary WHERE &&common_predicate. group_id IN (2, 18) AND metric_name = p_metric_name; -- MAX returns NULL when NOT FOUND + RETURN l_max; + END get_1h_max; + -- + PROCEDURE output (p_line IN VARCHAR2) IS + BEGIN + DBMS_OUTPUT.put_line(p_line); + END output; + -- + PROCEDURE output (p_title IN VARCHAR2, p_metric_name_per_sec IN VARCHAR2, p_metric_name_per_txn IN VARCHAR2) IS + BEGIN + output ( + '| '|| + LPAD(p_title, 25, ' ')||':'|| + LPAD(NVL(TRIM(TO_CHAR(get_15s_avg(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_15s_avg(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1m_avg(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1m_avg(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_avg(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_avg(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_max(p_metric_name_per_sec), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_max(p_metric_name_per_txn), '999,999,999,999,990.0')), '-'), 22, ' ') + ); + END output; + -- + PROCEDURE output (p_title IN VARCHAR2, p_metric_name IN VARCHAR2) IS + BEGIN + output ( + '| '|| + LPAD(p_title, 25, ' ')||':'|| + LPAD(NVL(TRIM(TO_CHAR(get_15s_avg(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1m_avg(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_avg(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ')|| + LPAD(NVL(TRIM(TO_CHAR(get_1h_max(p_metric_name), '999,999,999,999,990.0')), '-'), 22, ' ') + ); + END output; +BEGIN + IF SYS_CONTEXT('USERENV', 'CON_NAME') <> 'CDB$ROOT' AND LOWER('&&view_name_prefix.') = 'v$sysmetric' THEN + raise_application_error(-20000, 'Executed from '||SYS_CONTEXT('USERENV', 'CON_NAME')||' instead of CDB$ROOT'); + END IF; + -- + output('/tmp/&&script_name._&&report_date_time..txt'); + output('+ ------------------------------------------------'); + output('|'); + output('| Date: '||TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')); + output('| Host: '||SYS_CONTEXT('USERENV','HOST')); + output('| Database: &&cs_db.'); + output('| Container: '||SYS_CONTEXT('USERENV', 'CON_NAME')); + SELECT MAX(begin_time), MAX(end_time) INTO l_begin_time, l_end_time FROM &&view_name_prefix. WHERE group_id = 3 AND ROWNUM = 1; -- MAX returns NULL when NOT FOUND + output('| 15s: '||TO_CHAR(l_begin_time, 'YYYY-MM-DD"T"HH24:MI:SS')||' - '||TO_CHAR(l_end_time, 'YYYY-MM-DD"T"HH24:MI:SS')); + SELECT MAX(begin_time), MAX(end_time) INTO l_begin_time, l_end_time FROM &&view_name_prefix. WHERE group_id IN (2, 18) AND ROWNUM = 1; -- MAX returns NULL when NOT FOUND + output('| 1m: '||TO_CHAR(l_begin_time, 'YYYY-MM-DD"T"HH24:MI:SS')||' - '||TO_CHAR(l_end_time, 'YYYY-MM-DD"T"HH24:MI:SS')); + SELECT MAX(begin_time), MAX(end_time) INTO l_begin_time, l_end_time FROM &&view_name_prefix._summary WHERE group_id IN (2, 18) AND ROWNUM = 1; -- MAX returns NULL when NOT FOUND + output('| 1h: '||TO_CHAR(l_begin_time, 'YYYY-MM-DD"T"HH24:MI:SS')||' - '||TO_CHAR(l_end_time, 'YYYY-MM-DD"T"HH24:MI:SS')); + output('|'); + output('| Load Profile (&&view_name_prefix. and &&view_name_prefix._summary)'); + output('| ~~~~~~~~~~~~'); + output('| 15s Avg Per Sec 15s Avg Per Txn 1m Avg Per Sec 1m Avg Per Txn 1h Avg Per Sec 1h Avg Per Txn 1h Max Per Sec 1h Max Per Txn'); + output('| --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- --------------------- ---------------------'); + output('DB Time(s)', 'Database Time Per Sec', NULL); + output('DB CPU(s)', 'CPU Usage Per Sec', 'CPU Usage Per Txn'); + output('Background CPU(s)', 'Background CPU Usage Per Sec', NULL); + output('Host CPU(s)', 'Host CPU Usage Per Sec', NULL); + output('Redo size (MB)', 'Redo Generated Per Sec', 'Redo Generated Per Txn'); + output('Redo writes', 'Redo Writes Per Sec', 'Redo Writes Per Txn'); + output('DBWR checkpoints', 'DBWR Checkpoints Per Sec', NULL); + output('Logical read (blocks)', 'Logical Reads Per Sec', 'Logical Reads Per Txn'); + output('Block gets', 'DB Block Gets Per Sec', 'DB Block Gets Per Txn'); + output('Consistent read gets', 'Consistent Read Gets Per Sec', 'Consistent Read Gets Per Txn'); + output('Block changes', 'DB Block Changes Per Sec', 'DB Block Changes Per Txn'); + output('Consistent read changes', 'Consistent Read Changes Per Sec', 'Consistent Read Changes Per Txn'); + output('CR blocks created', 'CR Blocks Created Per Sec', 'CR Blocks Created Per Txn'); + output('CR Undo records applied', 'CR Undo Records Applied Per Sec', 'CR Undo Records Applied Per Txn'); + output('IO (MB)', 'I/O Megabytes per Second', NULL); + output('IO requests', 'I/O Requests per Second', NULL); + output('Physical read (blocks)', 'Physical Reads Per Sec', 'Physical Reads Per Txn'); + output('Physical write (blocks)', 'Physical Writes Per Sec', 'Physical Writes Per Txn'); + output('Total read IO requests', 'Physical Read Total IO Requests Per Sec', NULL); + output('Total write IO requests', 'Physical Write Total IO Requests Per Sec', NULL); + output('Total read IO (MB)', 'Physical Read Total Bytes Per Sec', NULL); + output('Total write IO (MB)', 'Physical Write Total Bytes Per Sec', NULL); + output('Appl read IO requests', 'Physical Read IO Requests Per Sec', NULL); + output('Appl write IO requests', 'Physical Write IO Requests Per Sec', NULL); + output('Appl read IO (MB)', 'Physical Read Bytes Per Sec', NULL); + output('Appl wite IO (MB)', 'Physical Write Bytes Per Sec', NULL); + output('Total table scans', 'Total Table Scans Per Sec', 'Total Table Scans Per Txn'); + output('Long table scans', 'Long Table Scans Per Sec', 'Long Table Scans Per Txn'); + output('Total index scans', 'Total Index Scans Per Sec', 'Total Index Scans Per Txn'); + output('Full index scans', 'Full Index Scans Per Sec', 'Full Index Scans Per Txn'); + output('Leaf node splits', 'Leaf Node Splits Per Sec', 'Leaf Node Splits Per Txn'); + output('Network traffic (MB)', 'Network Traffic Volume Per Sec', NULL); + output('User calls', 'User Calls Per Sec', 'User Calls Per Txn'); + output('Recursive calls', 'Recursive Calls Per Sec', 'Recursive Calls Per Txn'); + output('Parses (SQL)', 'Total Parse Count Per Sec', 'Total Parse Count Per Txn'); + output('Hard parses (SQL)', 'Hard Parse Count Per Sec', 'Hard Parse Count Per Txn'); + output('Failed parses (SQL)', 'Parse Failure Count Per Sec', 'Parse Failure Count Per Txn'); + output('Executes (SQL)', 'Executions Per Sec', 'Executions Per Txn'); + output('Logons', 'Logons Per Sec', 'Logons Per Txn'); + output('Open cursors', 'Open Cursors Per Sec', 'Open Cursors Per Txn'); + output('Transactions', 'User Transaction Per Sec', NULL); + output('Commits', 'User Commits Per Sec', NULL); + output('Rollbacks', 'User Rollbacks Per Sec', NULL); + output('VM in (MB)', 'VM in bytes Per Sec', NULL); + output('VM out (MB)', 'VM out bytes Per Sec', NULL); + output('|'); + output('| 15s Avg 1m Avg 1h Avg 1h Max'); + output('| --------------------- --------------------- --------------------- ---------------------'); + output('OS Load', 'Current OS Load'); + output('Logons Count', 'Current Logons Count'); + output('Session Count', 'Session Count'); + output('Average Active Sessions', 'Average Active Sessions'); + output('Active Serial Sessions', 'Active Serial Sessions'); + output('Active Parallel Sessions', 'Active Parallel Sessions'); + output('Background Sessions', 'Background Time Per Sec'); + output('Open Cursors Count', 'Current Open Cursors Count'); + output('Temp Space (MB)', 'Temp Space Used'); + output('PGA Allocated (MB)', 'Total PGA Allocated'); + output('PGA SQL Work Area (MB)', 'Total PGA Used by SQL Workareas'); + output('|'); + output('+ ------------------------------------------------'); + output('SQL> @&&script_name..sql'); +END; +/ +SPO OFF; +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_load_sysmetric_per_pdb_hist.sql b/csierra/cs_load_sysmetric_per_pdb_hist.sql new file mode 100644 index 0000000..1e6cc73 --- /dev/null +++ b/csierra/cs_load_sysmetric_per_pdb_hist.sql @@ -0,0 +1,193 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_load_sysmetric_per_pdb_hist.sql +-- +-- Purpose: System Load as per DBA_HIST_CON_SYSMETRIC_SUMM View per PDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/04/06 +-- +-- Usage: Execute connected to CDB and pass range of AWR snapshots, then enter metric group [{avg}|max] +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_load_sysmetric_per_pdb_hist.sql +-- +-- Notes: Stand-alone script +-- +-- Developed and tested on 19c. +-- +-- Several columns are commented out simply to reduce report width. +-- +--------------------------------------------------------------------------------------- +-- +DEF script_name = 'cs_load_sysmetric_per_pdb_hist'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con_name NEW_V cs_con_name NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name FROM v$database; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +-- +PRO +PRO Specify the number of days of snapshots to choose from +PRO +PRO Enter number of days: [{1}|0-60] +DEF num_days = '&1' +UNDEF 1; +-- +COL snap_id NEW_V snap_id FOR A7; +COL prior_snap_id NEW_V prior_snap_id FOR A7 NOPRI; +SELECT LPAD(TO_CHAR(snap_id), 7, ' ') AS snap_id, CAST(end_interval_time AS DATE) AS snap_time, LPAD(TO_CHAR(snap_id - 1), 7, ' ') AS prior_snap_id + FROM dba_hist_snapshot + WHERE instance_number = SYS_CONTEXT('USERENV','INSTANCE') + AND dbid = (SELECT dbid FROM v$database) + AND CAST(end_interval_time AS DATE) > SYSDATE - TO_NUMBER(NVL('&&num_days.', '1')) + ORDER BY + snap_id +/ +-- +PRO +PRO Enter begin snap_id: [{&&prior_snap_id.}] +DEF begin_snap_id = '&2.'; +UNDEF 2; +COL begin_snap_id NEW_V begin_snap_id NOPRI; +SELECT NVL('&&begin_snap_id.', '&&prior_snap_id.') AS begin_snap_id FROM DUAL; +-- +PRO +PRO Enter end snap_id: [{&&snap_id.}] +DEF end_snap_id = '&3.'; +UNDEF 3; +COL end_snap_id NEW_V end_snap_id NOPRI; +SELECT NVL('&&end_snap_id.', '&&snap_id.') AS end_snap_id FROM DUAL; +-- +PRO +PRO Enter Metric Group: [{avg}|max] +DEF cs_metric_group = '&4.'; +UNDEF 4; +COL cs_metric_group NEW_V cs_metric_group NOPRI; +SELECT CASE WHEN LOWER(TRIM('&&cs_metric_group.')) IN ('avg' ,'max') THEN LOWER(TRIM('&&cs_metric_group.')) ELSE 'avg' END AS cs_metric_group FROM DUAL; +COL cs_hea NEW_V cs_hea NOPRI; +SELECT CASE '&&cs_metric_group.' WHEN 'avg' THEN 'Avg' WHEN 'max' THEN 'Max' ELSE 'Error' END AS cs_hea FROM DUAL; +DEF cs_hea_ps = '&&cs_hea. Per Sec'; +-- +COL cs_begin_time NEW_V cs_begin_time NOPRI; +COL cs_end_time NEW_V cs_end_time NOPRI; +SELECT TO_CHAR(MAX(CAST(end_interval_time AS DATE)), 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_begin_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&begin_snap_id.'); +SELECT TO_CHAR(MAX(CAST(end_interval_time AS DATE)), 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_end_time FROM dba_hist_snapshot WHERE snap_id = TO_NUMBER('&&end_snap_id.'); +-- +DEF cs_format = 'FOR 999,999,999,990.0'; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +COL db_cpu &&cs_format. HEA 'DB CPU(s)|&&cs_hea_ps.'; +COL redo_size &&cs_format. HEA 'Redo size|(MB)|&&cs_hea_ps.'; +COL logical_reads &&cs_format. HEA 'Logical read|(blocks)|&&cs_hea_ps.'; +COL block_changes &&cs_format. HEA 'Block changes|&&cs_hea_ps.'; +COL physical_reads &&cs_format. HEA 'Physical read|(blocks)|&&cs_hea_ps.'; +COL physical_writes &&cs_format. HEA 'Physical write|(blocks)|&&cs_hea_ps.'; +COL total_read_io &&cs_format. HEA 'Total read IO|(MB)|&&cs_hea_ps.'; +COL total_write_io &&cs_format. HEA 'Total write IO|(MB)|&&cs_hea_ps.'; +COL appl_read_io &&cs_format. HEA 'Appl read IO|(MB)|&&cs_hea_ps.'; +COL appl_write_io &&cs_format. HEA 'Appl wite IO|(MB)|&&cs_hea_ps.'; +COL network_traffic &&cs_format. HEA 'Network traffic|(MB)|&&cs_hea_ps.'; +COL user_calls &&cs_format. HEA 'User calls|&&cs_hea_ps.'; +COL parses &&cs_format. HEA 'Parses|(SQL)|&&cs_hea_ps.'; +COL hard_parses &&cs_format. HEA 'Hard parses|(SQL)|&&cs_hea_ps.'; +COL failed_parses &&cs_format. HEA 'Failed parses|(SQL)|&&cs_hea_ps.'; +COL executes &&cs_format. HEA 'Executes|(SQL)|&&cs_hea_ps.'; +COL logons &&cs_format. HEA 'Logons|&&cs_hea_ps.'; +COL open_cursors &&cs_format. HEA 'Open cursors|&&cs_hea_ps.'; +COL transactions &&cs_format. HEA 'Transactions|&&cs_hea_ps.'; +COL commits &&cs_format. HEA 'Commits|&&cs_hea_ps.'; +COL rollbacks &&cs_format. HEA 'Rollbacks|&&cs_hea_ps.'; +COL logons_count &&cs_format. HEA 'Logons|Count|&&cs_hea.'; +COL session_count &&cs_format. HEA 'Session|Count|&&cs_hea.'; +COL aas &&cs_format. HEA 'Average Active|Sessions|&&cs_hea.'; +COL ass &&cs_format. HEA 'Active Serial|Sessions|&&cs_hea.'; +COL aps &&cs_format. HEA 'Active Parallel|Sessions|&&cs_hea.'; +COL bs &&cs_format. HEA 'Background|Sessions|&&cs_hea.'; +COL open_cursors_count &&cs_format. HEA 'Open Cursors|Count|&&cs_hea.'; +-- +BREAK ON REPORT; +COMPUTE SUM OF db_cpu redo_size logical_reads block_changes physical_reads physical_writes total_read_io total_write_io appl_read_io appl_write_io network_traffic user_calls parses hard_parses failed_parses executes logons open_cursors transactions commits rollbacks logons_count session_count aas ass aps bs open_cursors_count ON REPORT; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET container = CDB$ROOT; +-- +SPO /tmp/&&script_name._&&report_date_time..txt +PRO /tmp/&&script_name._&&report_date_time..txt +PRO +PRO Date : &&cs_date. +PRO Host : &&cs_host. +PRO Database : &&cs_db. +PRO Container: &&cs_con_name. +PRO Metric : &&cs_hea. : &&cs_begin_time. - &&cs_end_time. +PRO +PRO Load Profile (dba_hist_con_sysmetric_summ) +PRO ~~~~~~~~~~~~ +WITH +sysmetric_norm AS ( +SELECT /*+ MATERIALIZE NO_MERGE OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + con_id, + metric_name, + AVG(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN average / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN average / POWER(10, 6) ELSE average END) AS value_avg, + MAX(CASE WHEN metric_unit = 'CentiSeconds Per Second' THEN maxval / 100 WHEN metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN maxval / POWER(10, 6) ELSE maxval END) AS value_max + FROM dba_hist_con_sysmetric_summ + WHERE group_id = 18 + AND snap_id > TO_NUMBER('&&begin_snap_id.') AND snap_id <= TO_NUMBER('&&end_snap_id.') + GROUP BY + con_id, + metric_name +) +SELECT /*+ MATERIALIZE NO_MERGE */ + c.name AS pdb_name + , SUM(CASE s.metric_name WHEN 'CPU Usage Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS db_cpu + , SUM(CASE s.metric_name WHEN 'Redo Generated Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS redo_size + , SUM(CASE s.metric_name WHEN 'Logical Reads Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS logical_reads + -- , SUM(CASE s.metric_name WHEN 'DB Block Changes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS block_changes + , SUM(CASE s.metric_name WHEN 'Physical Reads Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS physical_reads + , SUM(CASE s.metric_name WHEN 'Physical Writes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS physical_writes + -- , SUM(CASE s.metric_name WHEN 'Physical Read Total Bytes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS total_read_io + -- , SUM(CASE s.metric_name WHEN 'Physical Write Total Bytes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS total_write_io + -- , SUM(CASE s.metric_name WHEN 'Physical Read Bytes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS appl_read_io + -- , SUM(CASE s.metric_name WHEN 'Physical Write Bytes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS appl_write_io + , SUM(CASE s.metric_name WHEN 'Network Traffic Volume Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS network_traffic + , SUM(CASE s.metric_name WHEN 'User Calls Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS user_calls + -- , SUM(CASE s.metric_name WHEN 'Total Parse Count Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS parses + -- , SUM(CASE s.metric_name WHEN 'Hard Parse Count Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS hard_parses + -- , SUM(CASE s.metric_name WHEN 'Parse Failure Count Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS failed_parses + , SUM(CASE s.metric_name WHEN 'Executions Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS executes + , SUM(CASE s.metric_name WHEN 'Logons Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS logons + -- , SUM(CASE s.metric_name WHEN 'Open Cursors Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS open_cursors + , SUM(CASE s.metric_name WHEN 'User Transaction Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS transactions + , SUM(CASE s.metric_name WHEN 'User Commits Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS commits + -- , SUM(CASE s.metric_name WHEN 'User Rollbacks Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS rollbacks + -- , SUM(CASE s.metric_name WHEN 'Current Logons Count' THEN s.value_&&cs_metric_group. ELSE 0 END) AS logons_count + , SUM(CASE s.metric_name WHEN 'Session Count' THEN s.value_&&cs_metric_group. ELSE 0 END) AS session_count + , SUM(CASE s.metric_name WHEN 'Average Active Sessions' THEN s.value_&&cs_metric_group. ELSE 0 END) AS aas + -- , SUM(CASE s.metric_name WHEN 'Active Serial Sessions' THEN s.value_&&cs_metric_group. ELSE 0 END) AS ass + , SUM(CASE s.metric_name WHEN 'Active Parallel Sessions' THEN s.value_&&cs_metric_group. ELSE 0 END) AS aps + -- , SUM(CASE s.metric_name WHEN 'Background Time Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS bs + -- , SUM(CASE s.metric_name WHEN 'Current Open Cursors Count' THEN s.value_&&cs_metric_group. ELSE 0 END) AS open_cursors_count + FROM sysmetric_norm s, + v$containers c + WHERE c.con_id = s.con_id + GROUP BY + c.name + ORDER BY + c.name +/ +PRO +PRO SQL> @&&script_name..sql "&&num_days." "&&begin_snap_id." "&&end_snap_id." "&&cs_metric_group." +SPO OFF; +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +ALTER SESSION SET CONTAINER = &&cs_con_name.; +-- +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_load_sysmetric_per_pdb_mem.sql b/csierra/cs_load_sysmetric_per_pdb_mem.sql new file mode 100644 index 0000000..696fb1f --- /dev/null +++ b/csierra/cs_load_sysmetric_per_pdb_mem.sql @@ -0,0 +1,175 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_load_sysmetric_per_pdb_mem.sql +-- +-- Purpose: System Load as per V$CON_SYSMETRIC Views per PDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/31 +-- +-- Usage: Execute connected to CDB and enter metric group [{1m_avg}|1h_avg|1h_max] +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_load_sysmetric_per_pdb_mem.sql +-- +-- Notes: Stand-alone script +-- +-- Developed and tested on 19c. +-- +-- Several columns are commented out simply to reduce report width. +-- +--------------------------------------------------------------------------------------- +-- +DEF script_name = 'cs_load_sysmetric_per_pdb_mem'; +-- +COL cs_date NEW_V cs_date NOPRI; +COL cs_host NEW_V cs_host NOPRI; +COL cs_db NEW_V cs_db NOPRI; +COL cs_con_name NEW_V cs_con_name NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_date, SYS_CONTEXT('USERENV','HOST') AS cs_host, UPPER(name) AS cs_db, SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name FROM v$database; +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +COL report_date_time NEW_V report_date_time NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS report_date_time FROM DUAL; +-- +PRO Enter Metric Group: [{1m_avg}|1h_avg|1h_max] +DEF cs_metric_group = '&1.'; +UNDEF 1; +COL cs_metric_group NEW_V cs_metric_group NOPRI; +SELECT CASE WHEN LOWER(TRIM('&&cs_metric_group.')) IN ('1m_avg' ,'1h_avg', '1h_max') THEN LOWER(TRIM('&&cs_metric_group.')) ELSE '1m_avg' END AS cs_metric_group FROM DUAL; +COL cs_hea NEW_V cs_hea NOPRI; +SELECT CASE '&&cs_metric_group.' WHEN '1m_avg' THEN '1m Avg' WHEN '1h_avg' THEN '1h Avg' WHEN '1h_max' THEN '1h Max' ELSE 'Error' END AS cs_hea FROM DUAL; +DEF cs_hea_ps = '&&cs_hea. Per Sec'; +-- +COL cs_begin_time NEW_V cs_begin_time NOPRI; +COL cs_end_time NEW_V cs_end_time NOPRI; +SELECT TO_CHAR(begin_time, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_begin_time, TO_CHAR(end_time, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_end_time FROM v$con_sysmetric WHERE '&&cs_metric_group.' = '1m_avg' AND group_id IN (2, 18) AND ROWNUM = 1; +SELECT TO_CHAR(begin_time, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_begin_time, TO_CHAR(end_time, 'YYYY-MM-DD"T"HH24:MI:SS') AS cs_end_time FROM v$con_sysmetric_summary WHERE '&&cs_metric_group.' IN ('1h_avg', '1h_max') AND group_id IN (2, 18) AND ROWNUM = 1; +-- +DEF cs_format = 'FOR 999,999,999,990.0'; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +COL db_cpu &&cs_format. HEA 'DB CPU(s)|&&cs_hea_ps.'; +COL redo_size &&cs_format. HEA 'Redo size|(MB)|&&cs_hea_ps.'; +COL logical_reads &&cs_format. HEA 'Logical read|(blocks)|&&cs_hea_ps.'; +COL block_changes &&cs_format. HEA 'Block changes|&&cs_hea_ps.'; +COL physical_reads &&cs_format. HEA 'Physical read|(blocks)|&&cs_hea_ps.'; +COL physical_writes &&cs_format. HEA 'Physical write|(blocks)|&&cs_hea_ps.'; +COL total_read_io &&cs_format. HEA 'Total read IO|(MB)|&&cs_hea_ps.'; +COL total_write_io &&cs_format. HEA 'Total write IO|(MB)|&&cs_hea_ps.'; +COL appl_read_io &&cs_format. HEA 'Appl read IO|(MB)|&&cs_hea_ps.'; +COL appl_write_io &&cs_format. HEA 'Appl wite IO|(MB)|&&cs_hea_ps.'; +COL network_traffic &&cs_format. HEA 'Network traffic|(MB)|&&cs_hea_ps.'; +COL user_calls &&cs_format. HEA 'User calls|&&cs_hea_ps.'; +COL parses &&cs_format. HEA 'Parses|(SQL)|&&cs_hea_ps.'; +COL hard_parses &&cs_format. HEA 'Hard parses|(SQL)|&&cs_hea_ps.'; +COL failed_parses &&cs_format. HEA 'Failed parses|(SQL)|&&cs_hea_ps.'; +COL executes &&cs_format. HEA 'Executes|(SQL)|&&cs_hea_ps.'; +COL logons &&cs_format. HEA 'Logons|&&cs_hea_ps.'; +COL open_cursors &&cs_format. HEA 'Open cursors|&&cs_hea_ps.'; +COL transactions &&cs_format. HEA 'Transactions|&&cs_hea_ps.'; +COL commits &&cs_format. HEA 'Commits|&&cs_hea_ps.'; +COL rollbacks &&cs_format. HEA 'Rollbacks|&&cs_hea_ps.'; +COL logons_count &&cs_format. HEA 'Logons|Count|&&cs_hea.'; +COL session_count &&cs_format. HEA 'Session|Count|&&cs_hea.'; +COL aas &&cs_format. HEA 'Average Active|Sessions|&&cs_hea.'; +COL ass &&cs_format. HEA 'Active Serial|Sessions|&&cs_hea.'; +COL aps &&cs_format. HEA 'Active Parallel|Sessions|&&cs_hea.'; +COL bs &&cs_format. HEA 'Background|Sessions|&&cs_hea.'; +COL open_cursors_count &&cs_format. HEA 'Open Cursors|Count|&&cs_hea.'; +-- +BREAK ON REPORT; +COMPUTE SUM OF db_cpu redo_size logical_reads block_changes physical_reads physical_writes total_read_io total_write_io appl_read_io appl_write_io network_traffic user_calls parses hard_parses failed_parses executes logons open_cursors transactions commits rollbacks logons_count session_count aas ass aps bs open_cursors_count ON REPORT; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET container = CDB$ROOT; +-- +SPO /tmp/&&script_name._&&report_date_time..txt +PRO /tmp/&&script_name._&&report_date_time..txt +PRO +PRO Date : &&cs_date. +PRO Host : &&cs_host. +PRO Database : &&cs_db. +PRO Container: &&cs_con_name. +PRO Metric : &&cs_hea. : &&cs_begin_time. - &&cs_end_time. +PRO +PRO Load Profile (v$con_sysmetric for 1m_avg or v$con_sysmetric_summary for 1h_avg or 1h_max) +PRO ~~~~~~~~~~~~ +WITH +sysmetric AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, metric_name, metric_unit, value + FROM v$con_sysmetric + WHERE group_id = 18 + AND ROWNUM >= 1 /* MATERIALIZE */ +), +sysmetric_summary AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, metric_name, average, maxval + FROM v$con_sysmetric_summary + WHERE group_id = 18 + AND ROWNUM >= 1 /* MATERIALIZE */ +), +sysmetric_norm AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sm.con_id, + sm.metric_name, + CASE WHEN sm.metric_unit = 'CentiSeconds Per Second' THEN sm.value / 100 WHEN sm.metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN sm.value / POWER(10, 6) ELSE sm.value END AS value_1m_avg, + CASE WHEN sm.metric_unit = 'CentiSeconds Per Second' THEN ss.average / 100 WHEN sm.metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN ss.average / POWER(10, 6) ELSE ss.average END AS value_1h_avg, + CASE WHEN sm.metric_unit = 'CentiSeconds Per Second' THEN ss.maxval / 100 WHEN sm.metric_unit IN ('Bytes Per Second', 'bytes per sec', 'bytes', 'Bytes Per Txn') THEN ss.maxval / POWER(10, 6) ELSE ss.maxval END AS value_1h_max + FROM sysmetric sm, + sysmetric_summary ss + WHERE ss.con_id = sm.con_id + AND ss.metric_name = sm.metric_name + AND ROWNUM >= 1 /* MATERIALIZE */ +) +SELECT /*+ MATERIALIZE NO_MERGE */ + c.name AS pdb_name + , SUM(CASE s.metric_name WHEN 'CPU Usage Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS db_cpu + , SUM(CASE s.metric_name WHEN 'Redo Generated Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS redo_size + , SUM(CASE s.metric_name WHEN 'Logical Reads Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS logical_reads + -- , SUM(CASE s.metric_name WHEN 'DB Block Changes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS block_changes + , SUM(CASE s.metric_name WHEN 'Physical Reads Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS physical_reads + , SUM(CASE s.metric_name WHEN 'Physical Writes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS physical_writes + -- , SUM(CASE s.metric_name WHEN 'Physical Read Total Bytes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS total_read_io + -- , SUM(CASE s.metric_name WHEN 'Physical Write Total Bytes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS total_write_io + -- , SUM(CASE s.metric_name WHEN 'Physical Read Bytes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS appl_read_io + -- , SUM(CASE s.metric_name WHEN 'Physical Write Bytes Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS appl_write_io + , SUM(CASE s.metric_name WHEN 'Network Traffic Volume Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS network_traffic + , SUM(CASE s.metric_name WHEN 'User Calls Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS user_calls + -- , SUM(CASE s.metric_name WHEN 'Total Parse Count Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS parses + -- , SUM(CASE s.metric_name WHEN 'Hard Parse Count Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS hard_parses + -- , SUM(CASE s.metric_name WHEN 'Parse Failure Count Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS failed_parses + , SUM(CASE s.metric_name WHEN 'Executions Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS executes + , SUM(CASE s.metric_name WHEN 'Logons Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS logons + -- , SUM(CASE s.metric_name WHEN 'Open Cursors Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS open_cursors + , SUM(CASE s.metric_name WHEN 'User Transaction Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS transactions + , SUM(CASE s.metric_name WHEN 'User Commits Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS commits + -- , SUM(CASE s.metric_name WHEN 'User Rollbacks Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS rollbacks + -- , SUM(CASE s.metric_name WHEN 'Current Logons Count' THEN s.value_&&cs_metric_group. ELSE 0 END) AS logons_count + , SUM(CASE s.metric_name WHEN 'Session Count' THEN s.value_&&cs_metric_group. ELSE 0 END) AS session_count + , SUM(CASE s.metric_name WHEN 'Average Active Sessions' THEN s.value_&&cs_metric_group. ELSE 0 END) AS aas + -- , SUM(CASE s.metric_name WHEN 'Active Serial Sessions' THEN s.value_&&cs_metric_group. ELSE 0 END) AS ass + , SUM(CASE s.metric_name WHEN 'Active Parallel Sessions' THEN s.value_&&cs_metric_group. ELSE 0 END) AS aps + -- , SUM(CASE s.metric_name WHEN 'Background Time Per Sec' THEN s.value_&&cs_metric_group. ELSE 0 END) AS bs + -- , SUM(CASE s.metric_name WHEN 'Current Open Cursors Count' THEN s.value_&&cs_metric_group. ELSE 0 END) AS open_cursors_count + FROM sysmetric_norm s, + v$containers c + WHERE c.con_id = s.con_id + AND ROWNUM >= 1 + GROUP BY + c.name + ORDER BY + c.name +/ +PRO +PRO SQL> @&&script_name..sql "&&cs_metric_group." +SPO OFF; +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +ALTER SESSION SET CONTAINER = &&cs_con_name.; +-- +PRO +PRO /tmp/&&script_name._&&report_date_time..txt +-- \ No newline at end of file diff --git a/csierra/cs_locks.sql b/csierra/cs_locks.sql new file mode 100644 index 0000000..f4d47f3 --- /dev/null +++ b/csierra/cs_locks.sql @@ -0,0 +1,43 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: locks.sql | cs_locks.sql +-- +-- Purpose: Locks Summary and Details +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_locks.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_locks'; +DEF cs_script_acronym = 'locks.sql | '; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_locks_internal.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_locks_mon.sql b/csierra/cs_locks_mon.sql new file mode 100644 index 0000000..88da59a --- /dev/null +++ b/csierra/cs_locks_mon.sql @@ -0,0 +1,85 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_locks_mon.sql +-- +-- Purpose: Locks Summary and Details - Monitor +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/11/17 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Specify sleep seconds between iterations, and number of iterations +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_locks_mon.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_locks_mon'; +-- +PRO +PRO 1. Sleep seconds between Iterations: [{15}|5-60] +DEF sleep_seconds = '&1.'; +UNDEF 1; +COL sleep_seconds NEW_V sleep_seconds NOPRI; +SELECT CASE WHEN TO_NUMBER(NVL('&&sleep_seconds.', '15')) > 60 THEN '60' WHEN TO_NUMBER(NVL('&&sleep_seconds.', '15')) < 5 THEN '5' ELSE NVL('&&sleep_seconds.', '15') END AS sleep_seconds FROM DUAL +/ +PRO +PRO 2. Iterations: [{5}|1-100] +DEF iterations = '&2.'; +UNDEF 2; +COL iterations NEW_V iterations NOPRI; +SELECT CASE WHEN TO_NUMBER(NVL('&&iterations.', '5')) > 100 THEN '100' WHEN TO_NUMBER(NVL('&&iterations.', '5')) < 1 THEN '1' ELSE NVL('&&iterations.', '5') END AS iterations FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&sleep_seconds." "&&iterations." +@@cs_internal/cs_spool_id.sql +-- +PRO SLEEP_SECS : &&sleep_seconds. +PRO ITERATIONS : &&iterations. +-- +VAR results CLOB; +EXEC :results := 'Results'||CHR(10)||'~~~~~~~'||CHR(10); +SPO /tmp/cs_driver_&&cs_mysid..sql; +SET SERVEROUT ON; +BEGIN + FOR i IN 1..&&iterations. + LOOP + DBMS_OUTPUT.put_line(q'[@@cs_internal/cs_locks_mon_internal.sql]'); + DBMS_OUTPUT.put_line(q'[PRO Completed iteration ]'||i||q'[ out of &&iterations..]'); + DBMS_OUTPUT.put_line(q'[EXEC DBMS_LOB.append(:results, ']'||CHR(38)||CHR(38)||q'[cs9_current_time. '||:root_blockers||' root blocker(s) and '||:blockees||' blockee(s).'||CHR(10));]'); + DBMS_OUTPUT.put_line(q'[SET HEA OFF;]'); + DBMS_OUTPUT.put_line(q'[PRINT :results;]'); + DBMS_OUTPUT.put_line(q'[SET HEA ON;]'); + IF i < &&iterations. THEN + DBMS_OUTPUT.put_line('EXEC DBMS_LOCK.sleep('||&&sleep_seconds.||');'); + END IF; + END LOOP; +END; +/ +SET SERVEROUT OFF; +SPO &&cs_file_name..txt APP; +@/tmp/cs_driver_&&cs_mysid..sql; +--SET HEA OFF; +--PRINT :results; +--SET HEA ON; +-- +PRO SQL> @&&cs_script_name..sql "&&sleep_seconds." "&&iterations." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_mark_sql_hot.sql b/csierra/cs_mark_sql_hot.sql new file mode 100644 index 0000000..53e1e85 --- /dev/null +++ b/csierra/cs_mark_sql_hot.sql @@ -0,0 +1,184 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_mark_sql_hot.sql +-- +-- Purpose: Use DBMS_SHARED_POOL.markhot to reduce contention during high concurency hard parse +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/11/05 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_mark_sql_hot.sql +-- +-- Notes: Developed and tested on 19c +-- +-- https://jonathanlewis.wordpress.com/2017/10/02/markhot/ +-- +-- When a statement (through its “full_hash_valueâ€) is marked as hot +-- an extra value visible as the property column in v$db_object_cache +-- is set to a value that seems to be dependent on the process id of the +-- session attempting to execute the statement, and this value is used as +-- an extra component in calculating a new full_hash_value (which leads +-- to a new hash_value and sql_id). +-- With a different full_hash_value the same text generates a new parent +-- cursor which is (probably) going to be associated with a new library +-- cache hash bucket and latch. +-- The property value for the original parent cursor is set to “HOTâ€, +-- and the extra copies become “HOTCOPY1â€, “HOTCOPY2†and so on. +-- Interestingly once an object is marked as HOT and the first HOTCOPYn +-- has appeared the original version may disappear from v$sql while still +-- existing in v$db_object_cache. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_mark_sql_hot'; +-- +PRO +PRO 1. Selective SQL Text Substring: (e.g.: /* getMaxTransactionCommitID */) +DEF sql_text_substring = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&sql_text_substring." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT_STR : "&&sql_text_substring." +-- +COL hot NEW_V hot FOR 9999; +COL cold NEW_V cold FOR 9999; +COL hash_value FOR 9999999999; +COL sql_text FOR A80 TRUNC; +-- +PRO +PRO BEFORE +PRO ~~~~~~ +WITH +s AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT con_id, sql_id, hash_value, address, sql_text + FROM v$sql + WHERE &&cs_con_id. <> 1 -- executed on PDB and not on CDB$ROOT + AND con_id = &&cs_con_id. + AND '&&sql_text_substring.' IS NOT NULL + AND sql_text LIKE '%&&sql_text_substring.%' + AND sql_text NOT LIKE '%MATERIALIZE%' -- exclude SQL like this one! + AND object_status = 'VALID' + AND is_obsolete = 'N' + AND is_shareable = 'Y' + AND ROWNUM >= 1 /* MATERIALIZE */ +) +SELECT c.full_hash_value, + SUM(CASE WHEN c.property IS NOT NULL THEN 1 ELSE 0 END) AS hot, + SUM(CASE WHEN c.property IS NULL THEN 1 ELSE 0 END) AS cold, + s.sql_id, s.hash_value, s.address, s.sql_text + FROM s, v$db_object_cache c + WHERE c.con_id = s.con_id + AND c.hash_value = s.hash_value + AND c.addr = s.address + AND c.name = s.sql_text + AND c.namespace = 'SQL AREA' + AND c.type = 'CURSOR' + AND c.status = 'VALID' + GROUP BY + c.full_hash_value, s.sql_id, s.hash_value, s.address, s.sql_text + ORDER BY + c.full_hash_value, s.sql_id, s.hash_value, s.address, s.sql_text +/ +-- +PRO +PRO SUMMARY +PRO ~~~~~~~ +WITH +s AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT con_id, sql_id, hash_value, address, sql_text + FROM v$sql + WHERE &&cs_con_id. <> 1 -- executed on PDB and not on CDB$ROOT + AND con_id = &&cs_con_id. + AND '&&sql_text_substring.' IS NOT NULL + AND sql_text LIKE '%&&sql_text_substring.%' + AND sql_text NOT LIKE '%MATERIALIZE%' -- exclude SQL like this one! + AND object_status = 'VALID' + AND is_obsolete = 'N' + AND is_shareable = 'Y' + AND ROWNUM >= 1 /* MATERIALIZE */ +) +SELECT SUM(CASE WHEN c.property IS NOT NULL THEN 1 ELSE 0 END) AS hot, + SUM(CASE WHEN c.property IS NULL THEN 1 ELSE 0 END) AS cold + FROM s, v$db_object_cache c + WHERE c.con_id = s.con_id + AND c.hash_value = s.hash_value + AND c.addr = s.address + AND c.name = s.sql_text + AND c.namespace = 'SQL AREA' + AND c.type = 'CURSOR' + AND c.status = 'VALID' +/ +-- +PRO +PAUSE Hit "return" to continue; or "control-c" then "return" to exit: +-- +PRO +PRO MAKE HOT (IF COLD > 0 AND HOT = 0) +PRO ~~~~~~~~ +SET SERVEROUT ON; +BEGIN + IF TO_NUMBER(NVL(TRIM('&&cold.'), '0')) > 0 AND TO_NUMBER(NVL(TRIM('&&hot.'), '0')) = 0 THEN -- sql has not been marked as hot + FOR i IN ( + WITH + s AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT con_id, sql_id, hash_value, address, sql_text + FROM v$sql + WHERE &&cs_con_id. <> 1 -- executed on PDB and not on CDB$ROOT + AND con_id = &&cs_con_id. + AND '&&sql_text_substring.' IS NOT NULL + AND sql_text LIKE '%&&sql_text_substring.%' + AND sql_text NOT LIKE '%MATERIALIZE%' -- exclude SQL like this one! + AND object_status = 'VALID' + AND is_obsolete = 'N' + AND is_shareable = 'Y' + AND ROWNUM >= 1 /* MATERIALIZE */ + ) + SELECT DISTINCT full_hash_value + FROM s, v$db_object_cache c + WHERE c.con_id = s.con_id + AND c.hash_value = s.hash_value + AND c.addr = s.address + AND c.name = s.sql_text + AND c.namespace = 'SQL AREA' + AND c.type = 'CURSOR' + AND c.status = 'VALID' + AND c.property IS NULL -- COLD + ) + LOOP + DBMS_OUTPUT.put_line('MARKHOT:'||i.full_hash_value); + DBMS_SHARED_POOL.markhot(hash => i.full_hash_value, namespace => 0); + END LOOP; + END IF; +END; +/ +SET SERVEROUT OFF; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&sql_text_substring." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_max_ash_analytics.sql b/csierra/cs_max_ash_analytics.sql new file mode 100644 index 0000000..fcf2d05 --- /dev/null +++ b/csierra/cs_max_ash_analytics.sql @@ -0,0 +1,1246 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: ma.sql | cs_max_ash_analytics.sql +-- +-- Purpose: Poor-man's version of ASH Analytics for all Timed Events (Maximum Active Sessions) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/06/15 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_max_ash_analytics.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_max_ash_analytics'; +DEF cs_script_acronym = 'ma.sql | '; +-- +DEF cs_hours_range_default = '3'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO 3. Function: [{max}|p50|p90|p95|p99|p100] +DEF cs2_function = '&3.'; +UNDEF 3; +COL cs2_function NEW_V cs2_function NOPRI; +SELECT CASE WHEN LOWER(TRIM('&&cs2_function.')) IN ('max', 'p50', 'p90', 'p95', 'p99', 'p100') THEN LOWER(TRIM('&&cs2_function.')) ELSE 'max' END AS cs2_function FROM DUAL +/ +COL cs2_expression NEW_V cs2_expression NOPRI; +COL cs2_func_title NEW_V cs2_func_title NOPRI; +SELECT CASE '&&cs2_function.' WHEN 'max' THEN 'MAX(active_sessions)' ELSE 'PERCENTILE_DISC('||TRIM(TO_CHAR(TO_NUMBER(SUBSTR('&&cs2_function.', 2))/100, '0.00'))||') WITHIN GROUP (ORDER BY active_sessions)' END AS cs2_expression, + CASE '&&cs2_function.' WHEN 'max' THEN 'Maximum' ELSE '&&cs2_function. PCTL' END AS cs2_func_title + FROM DUAL +/ +COL cs_ash_cut_off_date NEW_V cs_ash_cut_off_date NOPRI; +SELECT TO_CHAR(CAST(PERCENTILE_DISC(0.05) WITHIN GROUP (ORDER BY sample_time) AS DATE) + (1/24), 'YYYY-MM-DD"T"HH24:MI') AS cs_ash_cut_off_date FROM v$active_session_history; +--SELECT TO_CHAR(TRUNC(TRUNC(SYSDATE, 'HH') + FLOOR(TO_NUMBER(TO_CHAR(SYSDATE, 'MI')) / 15) * 15 / (24*60), 'MI'), 'YYYY-MM-DD"T"HH24:MI') AS cs_ash_cut_off_date FROM DUAL; +-- +COL cs2_granularity_list NEW_V cs2_granularity_list NOPRI; +COL cs2_default_granularity NEW_V cs2_default_granularity NOPRI; +SELECT CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3660 <= 0.2 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '[{10s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 12m (up to 72 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3660 <= 0.2 THEN '[{1s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 12m (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '[{10s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 1h (up to 360 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 THEN '[{5s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 1h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 2 THEN '[{10s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 2h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 3 THEN '[{15s}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 3h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '[{1m}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '[{5m}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '[{15m}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '[{1h}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' -- < 720h (30d) (up to 720 samples) + ELSE '[{1d}|1s|5s|10s|15s|1m|5m|15m|1h|1d|s|m|h|d]' + END AS cs2_granularity_list, + CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 0.2 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '10s' -- < 12m (up to 72 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 0.2 THEN '1s' -- < 12m (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') < TO_DATE('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') THEN '10s' -- < 1h (up to 360 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 1 THEN '5s' -- < 1h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 2 THEN '10s' -- < 2h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 3 THEN '15s' -- < 3h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '1m' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '5m' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '15m' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '1h' -- < 720h (30d) (up to 720 samples) + ELSE '1d' + END AS cs2_default_granularity + FROM DUAL +/ +PRO +PRO 4. Granularity: &&cs2_granularity_list. +DEF cs2_granularity = '&4.'; +UNDEF 4; +COL cs2_granularity NEW_V cs2_granularity NOPRI; +SELECT NVL(LOWER(TRIM('&&cs2_granularity.')), '&&cs2_default_granularity.') cs2_granularity FROM DUAL; +SELECT CASE + WHEN '&&cs2_granularity.' = 's' THEN '1s' + WHEN '&&cs2_granularity.' = 'm' THEN '1m' + WHEN '&&cs2_granularity.' = 'h' THEN '1h' + WHEN '&&cs2_granularity.' = 'd' THEN '1d' + WHEN '&&cs2_granularity.' IN ('1s', '5s', '10s', '15s', '1m', '5m', '15m', '1h', '1d') THEN '&&cs2_granularity.' + ELSE '&&cs2_default_granularity.' + END cs2_granularity + FROM DUAL +/ +-- +COL cs2_fmt NEW_V cs2_fmt NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1s' THEN 'SS' -- (1/24/3600) 1 second + WHEN '5s' THEN 'SS' -- (5/24/3600) 5 seconds + WHEN '10s' THEN 'SS' -- (10/24/3600) 10 seconds + WHEN '15s' THEN 'SS' -- (15/24/3600) 15 seconds + WHEN '1m' THEN 'MI' -- (1/24/60) 1 minute + WHEN '5m' THEN 'MI' -- (5/24/60) 5 minutes + WHEN '15m' THEN 'MI' -- (15/24/60) 15 minutes + WHEN '1h' THEN 'HH' -- (1/24) 1 hour + WHEN '1d' THEN 'DD' -- 1 day + ELSE 'XX' -- error + END cs2_fmt + FROM DUAL +/ +-- +COL cs2_plus_days NEW_V cs2_plus_days NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1s' THEN '(1/24/3600)' -- (1/24/3600) 1 second + WHEN '5s' THEN '(5/24/3600)' -- (5/24/3600) 5 seconds + WHEN '10s' THEN '(10/24/3600)' -- (10/24/3600) 10 seconds + WHEN '15s' THEN '(15/24/3600)' -- (15/24/3600) 15 seconds + WHEN '1m' THEN '(1/24/60)' -- (1/24/60) 1 minute + WHEN '5m' THEN '(5/24/60)' -- (5/24/60) 5 minutes + WHEN '15m' THEN '(15/24/60)' -- (15/24/60) 15 minutes + WHEN '1h' THEN '(1/24)' -- (1/24) 1 hour + WHEN '1d' THEN '1' -- 1 day + ELSE 'XX' -- error + END cs2_plus_days + FROM DUAL +/ +-- +COL cs2_samples NEW_V cs2_samples NOPRI; +SELECT TO_CHAR(CEIL((TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') - TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.')) / &&cs2_plus_days.)) AS cs2_samples FROM DUAL +/ +-- +PRO +PRO 5. Reporting Dimension: [{event}|wait_class|machine|sql_id|plan_hash_value|top_level_sql_id|sid|blocking_session|current_obj#|module|pdb_name|p1|p2|p3] +DEF cs2_dimension = '&5.'; +UNDEF 5; +COL cs2_dimension NEW_V cs2_dimension NOPRI; +-- SELECT NVL(LOWER(TRIM('&&cs2_dimension.')), 'event') cs2_dimension FROM DUAL; +SELECT CASE WHEN LOWER(TRIM('&&cs2_dimension.')) IN ('event', 'wait_class', 'machine', 'sql_id', 'plan_hash_value', 'top_level_sql_id', 'sid', 'blocking_session', 'current_obj#', 'module', 'pdb_name', 'p1', 'p2', 'p3') THEN LOWER(TRIM('&&cs2_dimension.')) ELSE 'event' END cs2_dimension FROM DUAL; +-- +COL use_oem_colors_series NEW_V use_oem_colors_series NOPRI; +SELECT CASE '&&cs2_dimension.' WHEN 'wait_class' THEN NULL ELSE '//' END AS use_oem_colors_series FROM DUAL; +-- +COL active_sessions FOR 999,990 HEA 'Active|Sessions'; +COL session_state FOR A13 HEA 'Session|State'; +-- +WITH +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.session_state, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + GROUP BY + h.sample_time, + h.session_state +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.session_state, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + GROUP BY + h.sample_time, + h.session_state +), +ash_all AS ( +SELECT session_state, &&cs2_expression. AS active_sessions FROM ash_awr GROUP BY session_state + UNION ALL +SELECT session_state, &&cs2_expression. AS active_sessions FROM ash_mem GROUP BY session_state +) +SELECT MAX(active_sessions) AS active_sessions, + session_state + FROM ash_all + GROUP BY + session_state + ORDER BY + 1 DESC +/ +-- +PRO +PRO 6. Session State (opt): +DEF cs2_session_state = '&6.'; +UNDEF 6; +DEF cs2_instruct_to_skip = '(opt)'; +COL cs2_instruct_to_skip NEW_V cs2_instruct_to_skip NOPRI; +SELECT '(hit "Return" to skip this patameter since Session State is "ON CPU")' AS cs2_instruct_to_skip FROM DUAL WHERE '&&cs2_session_state.' = 'ON CPU' +/ +-- +COL wait_class HEA 'Wait Class'; +-- +WITH +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.session_state, + h.wait_class, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + GROUP BY + h.sample_time, + h.session_state, + h.wait_class +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.session_state, + h.wait_class, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + GROUP BY + h.sample_time, + h.session_state, + h.wait_class +), +ash_all AS ( +SELECT session_state, wait_class, &&cs2_expression. AS active_sessions FROM ash_awr GROUP BY session_state, wait_class + UNION ALL +SELECT session_state, wait_class, &&cs2_expression. AS active_sessions FROM ash_mem GROUP BY session_state, wait_class +) +SELECT MAX(active_sessions) AS active_sessions, + wait_class, + session_state + FROM ash_all + GROUP BY + wait_class, + session_state + ORDER BY + 1 DESC +/ +-- +PRO +PRO 7. Wait Class &&cs2_instruct_to_skip.: +DEF cs2_wait_class = '&7.'; +UNDEF 7; +-- +COL cs2_group NEW_V cs2_group NOPRI; +SELECT CASE '&&cs2_dimension.' + WHEN 'wait_class' THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class END]' + WHEN 'event' THEN CASE WHEN '&&cs2_wait_class.' IS NULL THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END]' ELSE q'[h.event]' END + WHEN 'machine' THEN q'[h.machine]' + WHEN 'sql_id' THEN q'[h.sql_id]' + WHEN 'plan_hash_value' THEN q'[TO_CHAR(h.sql_plan_hash_value)]' + WHEN 'top_level_sql_id' THEN q'[h.top_level_sql_id]' + WHEN 'sid' THEN q'[TO_CHAR(h.session_id)]' + -- WHEN 'blocking_session' THEN q'[h.blocking_session||CASE WHEN h.blocking_session IS NOT NULL THEN ','||h.blocking_session_serial# END]' -- 19c: ORA-00979: not a GROUP BY expression + WHEN 'blocking_session' THEN q'[TO_CHAR(h.blocking_session)]' + -- WHEN 'current_obj#' THEN q'[h.current_obj#||CASE WHEN h.current_obj# IS NOT NULL THEN ' ('||h.con_id||')' END]' -- 19c: ORA-00979: not a GROUP BY expression + WHEN 'current_obj#' THEN q'[TO_CHAR(h.current_obj#)]' + WHEN 'module' THEN q'[h.module]' + WHEN 'pdb_name' THEN q'[TO_CHAR(h.con_id)]' + WHEN 'p1' THEN q'[h.p1text||':'||h.p1]' + WHEN 'p2' THEN q'[h.p2text||':'||h.p2]' + WHEN 'p3' THEN q'[h.p3text||':'||h.p3]' + END AS cs2_group + FROM DUAL +/ +-- +COL event HEA 'Event'; +-- +WITH +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.session_state, + h.wait_class, + h.event, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + GROUP BY + h.sample_time, + h.session_state, + h.wait_class, + h.event +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.session_state, + h.wait_class, + h.event, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + GROUP BY + h.sample_time, + h.session_state, + h.wait_class, + h.event +), +ash_all AS ( +SELECT session_state, wait_class, event, &&cs2_expression. AS active_sessions FROM ash_awr GROUP BY session_state, wait_class, event + UNION ALL +SELECT session_state, wait_class, event, &&cs2_expression. AS active_sessions FROM ash_mem GROUP BY session_state, wait_class, event +) +SELECT MAX(active_sessions) AS active_sessions, + event, + wait_class, + session_state + FROM ash_all + GROUP BY + event, + wait_class, + session_state + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +PRO +PRO 8. Event &&cs2_instruct_to_skip.: +DEF cs2_event = '&8.'; +UNDEF 8; +-- +COL machine HEA 'Machine'; +-- +WITH +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.machine, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + GROUP BY + h.sample_time, + h.machine +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.machine, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + GROUP BY + h.sample_time, + h.machine +), +ash_all AS ( +SELECT machine, &&cs2_expression. AS active_sessions FROM ash_awr GROUP BY machine + UNION ALL +SELECT machine, &&cs2_expression. AS active_sessions FROM ash_mem GROUP BY machine +) +SELECT MAX(active_sessions) AS active_sessions, + machine + FROM ash_all + GROUP BY + machine + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +PRO +PRO 9. Machine (opt): +DEF cs2_machine = '&9.'; +UNDEF 9; +-- +PRO +PRO 10. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&10.'; +UNDEF 10; +-- +COL sql_text FOR A60 TRUNC; +-- +WITH +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.sql_id, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + GROUP BY + h.sample_time, + h.sql_id +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.sql_id, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + GROUP BY + h.sample_time, + h.sql_id +), +ash_all AS ( +SELECT sql_id, &&cs2_expression. AS active_sessions FROM ash_awr GROUP BY sql_id + UNION ALL +SELECT sql_id, &&cs2_expression. AS active_sessions FROM ash_mem GROUP BY sql_id +) +SELECT MAX(active_sessions) AS active_sessions, + sql_id, + (SELECT s.sql_text FROM sql_txt s WHERE s.sql_id = a.sql_id AND ROWNUM = 1) AS sql_text + FROM ash_all a + GROUP BY + sql_id + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +PRO +PRO 11. SQL_ID (opt): +DEF cs2_sql_id = '&11.'; +UNDEF 11; +-- +DEF spool_id_chart_footer_script = 'cs_max_ash_analytics_footer.sql'; +COL rn FOR 999; +COL dimension_group FOR A64 TRUNC; +DEF series_01 = ' '; +DEF series_02 = ' '; +DEF series_03 = ' '; +DEF series_04 = ' '; +DEF series_05 = ' '; +DEF series_06 = ' '; +DEF series_07 = ' '; +DEF series_08 = ' '; +DEF series_09 = ' '; +DEF series_10 = ' '; +DEF series_11 = ' '; +DEF series_12 = ' '; +DEF series_13 = ' '; +COL series_01 NEW_V series_01 FOR A64 TRUNC NOPRI; +COL series_02 NEW_V series_02 FOR A64 TRUNC NOPRI; +COL series_03 NEW_V series_03 FOR A64 TRUNC NOPRI; +COL series_04 NEW_V series_04 FOR A64 TRUNC NOPRI; +COL series_05 NEW_V series_05 FOR A64 TRUNC NOPRI; +COL series_06 NEW_V series_06 FOR A64 TRUNC NOPRI; +COL series_07 NEW_V series_07 FOR A64 TRUNC NOPRI; +COL series_08 NEW_V series_08 FOR A64 TRUNC NOPRI; +COL series_09 NEW_V series_09 FOR A64 TRUNC NOPRI; +COL series_10 NEW_V series_10 FOR A64 TRUNC NOPRI; +COL series_11 NEW_V series_11 FOR A64 TRUNC NOPRI; +COL series_12 NEW_V series_12 FOR A64 TRUNC NOPRI; +COL series_13 NEW_V series_13 FOR A64 TRUNC NOPRI; +DEF active_sessions_01 = ' '; +DEF active_sessions_02 = ' '; +DEF active_sessions_03 = ' '; +DEF active_sessions_04 = ' '; +DEF active_sessions_05 = ' '; +DEF active_sessions_06 = ' '; +DEF active_sessions_07 = ' '; +DEF active_sessions_08 = ' '; +DEF active_sessions_09 = ' '; +DEF active_sessions_10 = ' '; +DEF active_sessions_11 = ' '; +DEF active_sessions_12 = ' '; +DEF active_sessions_13 = ' '; +COL active_sessions_01 NEW_V active_sessions_01 FOR A7 TRUNC NOPRI; +COL active_sessions_02 NEW_V active_sessions_02 FOR A7 TRUNC NOPRI; +COL active_sessions_03 NEW_V active_sessions_03 FOR A7 TRUNC NOPRI; +COL active_sessions_04 NEW_V active_sessions_04 FOR A7 TRUNC NOPRI; +COL active_sessions_05 NEW_V active_sessions_05 FOR A7 TRUNC NOPRI; +COL active_sessions_06 NEW_V active_sessions_06 FOR A7 TRUNC NOPRI; +COL active_sessions_07 NEW_V active_sessions_07 FOR A7 TRUNC NOPRI; +COL active_sessions_08 NEW_V active_sessions_08 FOR A7 TRUNC NOPRI; +COL active_sessions_09 NEW_V active_sessions_09 FOR A7 TRUNC NOPRI; +COL active_sessions_10 NEW_V active_sessions_10 FOR A7 TRUNC NOPRI; +COL active_sessions_11 NEW_V active_sessions_11 FOR A7 TRUNC NOPRI; +COL active_sessions_12 NEW_V active_sessions_12 FOR A7 TRUNC NOPRI; +COL active_sessions_13 NEW_V active_sessions_13 FOR A7 TRUNC NOPRI; +-- +WITH +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +-- +FUNCTION get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +-- +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + &&cs2_group. AS dimension_group, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + GROUP BY + h.sample_time, + &&cs2_group. +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + &&cs2_group. AS dimension_group, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + GROUP BY + h.sample_time, + &&cs2_group. +), +ash_all AS ( +SELECT dimension_group, &&cs2_expression. AS active_sessions FROM ash_awr GROUP BY dimension_group + UNION ALL +SELECT dimension_group, &&cs2_expression. AS active_sessions FROM ash_mem GROUP BY dimension_group +), +ash_by_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + MAX(active_sessions) AS active_sessions, + dimension_group, + ROW_NUMBER() OVER(ORDER BY MAX(active_sessions) DESC) AS rn + FROM ash_all a + GROUP BY + dimension_group +), +top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, -- up to 12 + active_sessions, + SUBSTR(CASE + WHEN TRIM(dimension_group) IS NULL /*OR TRIM(dimension_group) = ','*/ THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id') THEN dimension_group||' '||get_sql_text(dimension_group) + WHEN '&&cs2_dimension.' = 'pdb_name' THEN dimension_group||' '||get_pdb_name(dimension_group) + ELSE dimension_group + END, 1, 64) AS dimension_group + FROM ash_by_dim + WHERE rn < (SELECT MAX(rn) FROM wait_classes) -- 13 +), +max_top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ MAX(rn) AS max_rn FROM top +), +bottom AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + (1 + max_top.max_rn) AS bottom_rn, -- up to 13 + MAX(a.active_sessions) AS active_sessions, + '"all others"' AS dimension_group + FROM ash_by_dim a, max_top + WHERE a.rn >= max_top.max_rn + GROUP BY + max_top.max_rn +), +wait_classes2 AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + w.rn, + NVL(t.active_sessions, 0) AS active_sessions, + w.dimension_group + FROM wait_classes w, + top t + WHERE '&&cs2_dimension.' = 'wait_class' + AND t.dimension_group(+) = w.dimension_group +), +top_and_bottom AS ( +SELECT rn, active_sessions, dimension_group + FROM top + WHERE '&&cs2_dimension.' <> 'wait_class' + UNION ALL +SELECT rn, active_sessions, dimension_group + FROM wait_classes2 + WHERE '&&cs2_dimension.' = 'wait_class' + UNION ALL +SELECT bottom_rn AS rn, active_sessions, dimension_group + FROM bottom + WHERE '&&cs2_dimension.' <> 'wait_class' +), +list AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, LPAD(TRIM(TO_CHAR(active_sessions, '999,990')), 7) AS active_sessions, dimension_group + FROM top_and_bottom +) +SELECT rn, active_sessions, dimension_group, + COALESCE((SELECT dimension_group FROM list WHERE rn = 1), ' ') AS series_01, + COALESCE((SELECT dimension_group FROM list WHERE rn = 2), ' ') AS series_02, + COALESCE((SELECT dimension_group FROM list WHERE rn = 3), ' ') AS series_03, + COALESCE((SELECT dimension_group FROM list WHERE rn = 4), ' ') AS series_04, + COALESCE((SELECT dimension_group FROM list WHERE rn = 5), ' ') AS series_05, + COALESCE((SELECT dimension_group FROM list WHERE rn = 6), ' ') AS series_06, + COALESCE((SELECT dimension_group FROM list WHERE rn = 7), ' ') AS series_07, + COALESCE((SELECT dimension_group FROM list WHERE rn = 8), ' ') AS series_08, + COALESCE((SELECT dimension_group FROM list WHERE rn = 9), ' ') AS series_09, + COALESCE((SELECT dimension_group FROM list WHERE rn = 10), ' ') AS series_10, + COALESCE((SELECT dimension_group FROM list WHERE rn = 11), ' ') AS series_11, + COALESCE((SELECT dimension_group FROM list WHERE rn = 12), ' ') AS series_12, + COALESCE((SELECT dimension_group FROM list WHERE rn = 13), ' ') AS series_13, + (SELECT active_sessions FROM list WHERE rn = 1) AS active_sessions_01, + (SELECT active_sessions FROM list WHERE rn = 2) AS active_sessions_02, + (SELECT active_sessions FROM list WHERE rn = 3) AS active_sessions_03, + (SELECT active_sessions FROM list WHERE rn = 4) AS active_sessions_04, + (SELECT active_sessions FROM list WHERE rn = 5) AS active_sessions_05, + (SELECT active_sessions FROM list WHERE rn = 6) AS active_sessions_06, + (SELECT active_sessions FROM list WHERE rn = 7) AS active_sessions_07, + (SELECT active_sessions FROM list WHERE rn = 8) AS active_sessions_08, + (SELECT active_sessions FROM list WHERE rn = 9) AS active_sessions_09, + (SELECT active_sessions FROM list WHERE rn = 10) AS active_sessions_10, + (SELECT active_sessions FROM list WHERE rn = 11) AS active_sessions_11, + (SELECT active_sessions FROM list WHERE rn = 12) AS active_sessions_12, + (SELECT active_sessions FROM list WHERE rn = 13) AS active_sessions_13 + FROM list + ORDER BY + rn +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = '&&cs2_func_title. Active Sessions by &&cs2_dimension. between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = '&&cs2_func_title. Active Sessions'; +DEF xaxis_title = ''; +-- +COL xaxis_title NEW_V xaxis_title NOPRI; +SELECT +CASE WHEN '&&cs2_session_state.' IS NOT NULL THEN 'State:"&&cs2_session_state." ' END|| +CASE WHEN '&&cs2_wait_class.' IS NOT NULL THEN 'Wait:"&&cs2_wait_class." ' END|| +CASE WHEN '&&cs2_event.' IS NOT NULL THEN 'Event:"%&&cs2_event.%" ' END|| +CASE WHEN '&&cs2_machine.' IS NOT NULL THEN 'Machine:"%&&cs2_machine.%" ' END|| +CASE WHEN '&&cs2_sql_text_piece.' IS NOT NULL THEN 'Text:"%&&cs2_sql_text_piece.%" ' END|| +CASE WHEN '&&cs2_sql_id.' IS NOT NULL THEN 'SQL_ID:"&&cs2_sql_id." ' END AS xaxis_title +FROM DUAL; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_function." "&&cs2_granularity." "&&cs2_dimension." "&&cs2_session_state." "&&cs2_wait_class." "&&cs2_event." "&&cs2_machine." "&&cs2_sql_text_piece." "&&cs2_sql_id."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&series_01.', id:'01', type:'number'} +PRO ,{label:'&&series_02.', id:'02', type:'number'} +PRO ,{label:'&&series_03.', id:'03', type:'number'} +PRO ,{label:'&&series_04.', id:'04', type:'number'} +PRO ,{label:'&&series_05.', id:'05', type:'number'} +PRO ,{label:'&&series_06.', id:'06', type:'number'} +PRO ,{label:'&&series_07.', id:'07', type:'number'} +PRO ,{label:'&&series_08.', id:'08', type:'number'} +PRO ,{label:'&&series_09.', id:'09', type:'number'} +PRO ,{label:'&&series_10.', id:'10', type:'number'} +PRO ,{label:'&&series_11.', id:'11', type:'number'} +PRO ,{label:'&&series_12.', id:'12', type:'number'} +PRO ,{label:'&&series_13.', id:'13', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +FUNCTION ceil_timestamp (p_timestamp IN TIMESTAMP) +RETURN DATE +IS +BEGIN + IF '&&cs2_granularity.' = '1s' THEN + RETURN CAST(p_timestamp AS DATE); + ELSIF '&&cs2_granularity.' = '5s' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'MI') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 5) * 5 / (24 * 60 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '10s' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'MI') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 10) * 10 / (24 * 60 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15s' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'MI') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 15) * 15 / (24 * 60 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '5m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 5) * 5 / (24 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 15) * 15 / (24 * 60) + &&cs2_plus_days.; + ELSE -- 1s, 1m, 1h, 1d + RETURN TRUNC(CAST(p_timestamp AS DATE) + &&cs2_plus_days., '&&cs2_fmt.'); + END IF; +END ceil_timestamp; +/****************************************************************************************/ +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +/****************************************************************************************/ +FUNCTION get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +sample AS ( +SELECT ceil_timestamp(TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + ((LEVEL - 1) * &&cs2_plus_days.)) AS time FROM DUAL CONNECT BY LEVEL <= TO_NUMBER('&&cs2_samples.') +), +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_awr AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id', 'pdb_name') THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'sid', 'blocking_session', 'current_obj#', 'module', 'p1', 'p2', 'p3') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END AS dimension_group, + COUNT(*) AS active_sessions + FROM dba_hist_active_sess_history h + WHERE h.sample_time <= TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + GROUP BY + h.sample_time, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id', 'pdb_name') THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'sid', 'blocking_session', 'current_obj#', 'module', 'p1', 'p2', 'p3') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END +), +ash_mem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id', 'pdb_name') THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'sid', 'blocking_session', 'current_obj#', 'module') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END AS dimension_group, + COUNT(*) AS active_sessions + FROM v$active_session_history h + WHERE h.sample_time > TO_TIMESTAMP('&&cs_ash_cut_off_date.', 'YYYY-MM-DD"T"HH24:MI') + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + GROUP BY + h.sample_time, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' IN ('sql_id', 'top_level_sql_id', 'pdb_name') THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'sid', 'blocking_session', 'current_obj#', 'module') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END +), +ash_awr_grp AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(h.sample_time) AS time, + h.dimension_group, + &&cs2_expression. AS active_sessions + FROM ash_awr h + GROUP BY + ceil_timestamp(h.sample_time), + h.dimension_group +), +ash_awr_denorm AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + time, + SUM(CASE WHEN h.dimension_group = q'[&&series_01.]' THEN active_sessions ELSE 0 END) AS active_sessions_01, + SUM(CASE WHEN h.dimension_group = q'[&&series_02.]' THEN active_sessions ELSE 0 END) AS active_sessions_02, + SUM(CASE WHEN h.dimension_group = q'[&&series_03.]' THEN active_sessions ELSE 0 END) AS active_sessions_03, + SUM(CASE WHEN h.dimension_group = q'[&&series_04.]' THEN active_sessions ELSE 0 END) AS active_sessions_04, + SUM(CASE WHEN h.dimension_group = q'[&&series_05.]' THEN active_sessions ELSE 0 END) AS active_sessions_05, + SUM(CASE WHEN h.dimension_group = q'[&&series_06.]' THEN active_sessions ELSE 0 END) AS active_sessions_06, + SUM(CASE WHEN h.dimension_group = q'[&&series_07.]' THEN active_sessions ELSE 0 END) AS active_sessions_07, + SUM(CASE WHEN h.dimension_group = q'[&&series_08.]' THEN active_sessions ELSE 0 END) AS active_sessions_08, + SUM(CASE WHEN h.dimension_group = q'[&&series_09.]' THEN active_sessions ELSE 0 END) AS active_sessions_09, + SUM(CASE WHEN h.dimension_group = q'[&&series_10.]' THEN active_sessions ELSE 0 END) AS active_sessions_10, + SUM(CASE WHEN h.dimension_group = q'[&&series_11.]' THEN active_sessions ELSE 0 END) AS active_sessions_11, + SUM(CASE WHEN h.dimension_group = q'[&&series_12.]' THEN active_sessions ELSE 0 END) AS active_sessions_12, + SUM(CASE WHEN h.dimension_group = q'[&&series_13.]' THEN active_sessions ELSE 0 END) AS active_sessions_13 + FROM ash_awr_grp h + GROUP BY + time +), +ash_mem_grp AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(h.sample_time) AS time, + h.dimension_group, + &&cs2_expression. AS active_sessions + FROM ash_mem h + GROUP BY + ceil_timestamp(h.sample_time), + h.dimension_group +), +ash_mem_denorm AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + time, + SUM(CASE WHEN h.dimension_group = q'[&&series_01.]' THEN active_sessions ELSE 0 END) AS active_sessions_01, + SUM(CASE WHEN h.dimension_group = q'[&&series_02.]' THEN active_sessions ELSE 0 END) AS active_sessions_02, + SUM(CASE WHEN h.dimension_group = q'[&&series_03.]' THEN active_sessions ELSE 0 END) AS active_sessions_03, + SUM(CASE WHEN h.dimension_group = q'[&&series_04.]' THEN active_sessions ELSE 0 END) AS active_sessions_04, + SUM(CASE WHEN h.dimension_group = q'[&&series_05.]' THEN active_sessions ELSE 0 END) AS active_sessions_05, + SUM(CASE WHEN h.dimension_group = q'[&&series_06.]' THEN active_sessions ELSE 0 END) AS active_sessions_06, + SUM(CASE WHEN h.dimension_group = q'[&&series_07.]' THEN active_sessions ELSE 0 END) AS active_sessions_07, + SUM(CASE WHEN h.dimension_group = q'[&&series_08.]' THEN active_sessions ELSE 0 END) AS active_sessions_08, + SUM(CASE WHEN h.dimension_group = q'[&&series_09.]' THEN active_sessions ELSE 0 END) AS active_sessions_09, + SUM(CASE WHEN h.dimension_group = q'[&&series_10.]' THEN active_sessions ELSE 0 END) AS active_sessions_10, + SUM(CASE WHEN h.dimension_group = q'[&&series_11.]' THEN active_sessions ELSE 0 END) AS active_sessions_11, + SUM(CASE WHEN h.dimension_group = q'[&&series_12.]' THEN active_sessions ELSE 0 END) AS active_sessions_12, + SUM(CASE WHEN h.dimension_group = q'[&&series_13.]' THEN active_sessions ELSE 0 END) AS active_sessions_13 + FROM ash_mem_grp h + GROUP BY + time +), +ash_denorm AS ( +SELECT time, (time - LAG(time, 1, time) OVER (ORDER BY time)) * 24 * 3600 AS interval_secs, active_sessions_01, active_sessions_02, active_sessions_03, active_sessions_04, active_sessions_05, active_sessions_06, active_sessions_07, active_sessions_08, active_sessions_09, active_sessions_10, active_sessions_11, active_sessions_12, active_sessions_13 FROM ash_awr_denorm + UNION ALL +SELECT time, (time - LAG(time, 1, time) OVER (ORDER BY time)) * 24 * 3600 AS interval_secs, active_sessions_01, active_sessions_02, active_sessions_03, active_sessions_04, active_sessions_05, active_sessions_06, active_sessions_07, active_sessions_08, active_sessions_09, active_sessions_10, active_sessions_11, active_sessions_12, active_sessions_13 FROM ash_mem_denorm +), +/****************************************************************************************/ +my_query AS ( +SELECT s.time, + MAX(a.active_sessions_01) AS active_sessions_01, + MAX(a.active_sessions_02) AS active_sessions_02, + MAX(a.active_sessions_03) AS active_sessions_03, + MAX(a.active_sessions_04) AS active_sessions_04, + MAX(a.active_sessions_05) AS active_sessions_05, + MAX(a.active_sessions_06) AS active_sessions_06, + MAX(a.active_sessions_07) AS active_sessions_07, + MAX(a.active_sessions_08) AS active_sessions_08, + MAX(a.active_sessions_09) AS active_sessions_09, + MAX(a.active_sessions_10) AS active_sessions_10, + MAX(a.active_sessions_11) AS active_sessions_11, + MAX(a.active_sessions_12) AS active_sessions_12, + MAX(a.active_sessions_13) AS active_sessions_13, + ROW_NUMBER() OVER (ORDER BY s.time ASC NULLS LAST) AS rn_asc, + ROW_NUMBER() OVER (ORDER BY s.time DESC NULLS LAST) AS rn_desc + FROM ash_denorm a, + sample s + WHERE a.interval_secs > 0 + AND a.time(+) = s.time + GROUP BY + s.time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.active_sessions_01)|| + ','||num_format(q.active_sessions_02)|| + ','||num_format(q.active_sessions_03)|| + ','||num_format(q.active_sessions_04)|| + ','||num_format(q.active_sessions_05)|| + ','||num_format(q.active_sessions_06)|| + ','||num_format(q.active_sessions_07)|| + ','||num_format(q.active_sessions_08)|| + ','||num_format(q.active_sessions_09)|| + ','||num_format(q.active_sessions_10)|| + ','||num_format(q.active_sessions_11)|| + ','||num_format(q.active_sessions_12)|| + ','||num_format(q.active_sessions_13)|| + ']' + FROM my_query q + WHERE 1 = 1 + --AND q.rn_asc > 1 AND q.rn_desc > 1 + AND q.active_sessions_01 + q.active_sessions_02 + q.active_sessions_03 + q.active_sessions_04 + q.active_sessions_05 + q.active_sessions_06 + q.active_sessions_07 + q.active_sessions_08 + q.active_sessions_09 + q.active_sessions_10 + q.active_sessions_11 + q.active_sessions_12 + q.active_sessions_13 > 0 + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '&&use_oem_colors_series.'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_maximum_active_sessions.sql b/csierra/cs_maximum_active_sessions.sql new file mode 100644 index 0000000..cf3b3f4 --- /dev/null +++ b/csierra/cs_maximum_active_sessions.sql @@ -0,0 +1,888 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: mas.sql | cs_maximum_active_sessions.sql +-- +-- Purpose: Maximum Active Sessions (ASH Analytics on dbc_active_session) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/11/25 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_maximum_active_sessions.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_maximum_active_sessions'; +DEF cs_script_acronym = 'mas.sql | '; +-- +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL cs2_granularity_list NEW_V cs2_granularity_list NOPRI; +COL cs2_default_granularity NEW_V cs2_default_granularity NOPRI; +SELECT CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '[{1m}|5m|15m|1h|1d|m|h|d]' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '[{5m}|1m|15m|1h|1d|m|h|d]' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '[{15m}|1m|5m|1h|1d|m|h|d]' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '[{1h}|1m|5m|15m|1d|m|h|d]' -- < 720h (30d) (up to 720 samples) + ELSE '[{1d}|1m|5m|15m|1h|1d|m|h|d]' + END AS cs2_granularity_list, + CASE + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 12 THEN '1m' -- < 12h (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 60 THEN '5m' -- < 60h (2.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 180 THEN '15m' -- < 180h (7.5d) (up to 720 samples) + WHEN TO_NUMBER('&&cs_from_to_seconds.') / 3600 <= 720 THEN '1h' -- < 720h (30d) (up to 720 samples) + ELSE '1d' + END AS cs2_default_granularity + FROM DUAL +/ +PRO +PRO 3. Granularity: &&cs2_granularity_list. +DEF cs2_granularity = '&3.'; +UNDEF 3; +COL cs2_granularity NEW_V cs2_granularity NOPRI; +SELECT NVL(LOWER(TRIM('&&cs2_granularity.')), '&&cs2_default_granularity.') cs2_granularity FROM DUAL; +SELECT CASE + WHEN '&&cs2_granularity.' = 'm' THEN '1m' + WHEN '&&cs2_granularity.' = 'h' THEN '1h' + WHEN '&&cs2_granularity.' = 'd' THEN '1d' + WHEN '&&cs2_granularity.' IN ('1m', '5m', '15m', '1h', '1d') THEN '&&cs2_granularity.' + ELSE '&&cs2_default_granularity.' + END cs2_granularity + FROM DUAL +/ +-- +COL cs2_fmt NEW_V cs2_fmt NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1m' THEN 'MI' -- (1/24/60) 1 minute + WHEN '5m' THEN 'MI' -- (5/24/60) 5 minutes + WHEN '15m' THEN 'MI' -- (15/24/60) 15 minutes + WHEN '1h' THEN 'HH' -- (1/24) 1 hour + WHEN '1d' THEN 'DD' -- 1 day + ELSE 'XX' -- error + END cs2_fmt + FROM DUAL +/ +-- +COL cs2_plus_days NEW_V cs2_plus_days NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN '1m' THEN '(1/24/60)' -- (1/24/60) 1 minute + WHEN '5m' THEN '(5/24/60)' -- (5/24/60) 5 minutes + WHEN '15m' THEN '(15/24/60)' -- (15/24/60) 15 minutes + WHEN '1h' THEN '(1/24)' -- (1/24) 1 hour + WHEN '1d' THEN '1' -- 1 day + ELSE 'XX' -- error + END cs2_plus_days + FROM DUAL +/ +-- +COL cs2_samples NEW_V cs2_samples NOPRI; +SELECT TO_CHAR(CEIL((TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') - TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.')) / &&cs2_plus_days.)) AS cs2_samples FROM DUAL +/ +-- +PRO +PRO 4. Reporting Dimension: [{event}|wait_class|machine|sql_id|plan_hash_value|module|pdb_name|host_name] +DEF cs2_dimension = '&4.'; +UNDEF 4; +COL cs2_dimension NEW_V cs2_dimension NOPRI; +-- SELECT NVL(LOWER(TRIM('&&cs2_dimension.')), 'event') cs2_dimension FROM DUAL; +SELECT CASE WHEN LOWER(TRIM('&&cs2_dimension.')) IN ('event', 'wait_class', 'machine', 'sql_id', 'plan_hash_value', 'module', 'pdb_name', 'host_name') THEN LOWER(TRIM('&&cs2_dimension.')) ELSE 'event' END cs2_dimension FROM DUAL; +-- +COL use_oem_colors_series NEW_V use_oem_colors_series NOPRI; +SELECT CASE '&&cs2_dimension.' WHEN 'wait_class' THEN NULL ELSE '//' END AS use_oem_colors_series FROM DUAL; +-- +COL mas FOR 999,990 HEA 'Maximum Active|Sessions (MAS)'; +COL session_state FOR A13 HEA 'Session|State'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.session_state, + h.end_time, + SUM(h.max_samples) AS sum_max_samples + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + GROUP BY + h.session_state, + h.end_time +) +SELECT MAX(sum_max_samples) AS mas, + session_state + FROM ash_dbc + GROUP BY + session_state + ORDER BY + 1 DESC +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 5. Session State (opt): +DEF cs2_session_state = '&5.'; +UNDEF 5; +DEF cs2_instruct_to_skip = '(opt)'; +COL cs2_instruct_to_skip NEW_V cs2_instruct_to_skip NOPRI; +SELECT '(hit "Return" to skip this patameter since Session State is "ON CPU")' AS cs2_instruct_to_skip FROM DUAL WHERE '&&cs2_session_state.' = 'ON CPU' +/ +-- +COL wait_class HEA 'Wait Class'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.session_state, + h.wait_class, + h.end_time, + SUM(h.max_samples) AS sum_max_samples + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + GROUP BY + h.session_state, + h.wait_class, + h.end_time +) +SELECT MAX(sum_max_samples) AS mas, + wait_class, + session_state + FROM ash_dbc + GROUP BY + wait_class, + session_state + ORDER BY + 1 DESC +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 6. Wait Class &&cs2_instruct_to_skip.: +DEF cs2_wait_class = '&6.'; +UNDEF 6; +-- +COL cs2_group NEW_V cs2_group NOPRI; +SELECT CASE '&&cs2_dimension.' + WHEN 'wait_class' THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class END]' + WHEN 'event' THEN CASE WHEN '&&cs2_wait_class.' IS NULL THEN q'[CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' - '||h.event END]' ELSE q'[h.event]' END + WHEN 'machine' THEN q'[h.machine]' + WHEN 'sql_id' THEN q'[h.sql_id]' + WHEN 'plan_hash_value' THEN q'[TO_CHAR(h.sql_plan_hash_value)]' + WHEN 'module' THEN q'[h.module]' + WHEN 'pdb_name' THEN q'[h.pdb_name]' + WHEN 'host_name' THEN q'[h.host_name]' + END AS cs2_group + FROM DUAL +/ +-- +COL event HEA 'Event'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.event, + h.wait_class, + h.session_state, + h.end_time, + SUM(h.max_samples) AS sum_max_samples + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND NVL('&&cs2_session_state.', 'X') <> 'ON CPU' + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + GROUP BY + h.event, + h.wait_class, + h.session_state, + h.end_time +) +SELECT MAX(sum_max_samples) AS mas, + event, + wait_class, + session_state + FROM ash_dbc + GROUP BY + event, + wait_class, + session_state + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 7. Event &&cs2_instruct_to_skip.: +DEF cs2_event = '&7.'; +UNDEF 7; +-- +COL machine HEA 'Machine'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + h.end_time, + SUM(h.max_samples) AS sum_max_samples + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + GROUP BY + h.machine, + h.end_time +) +SELECT MAX(sum_max_samples) AS mas, + machine + FROM ash_dbc + GROUP BY + machine + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 8. Machine (opt): +DEF cs2_machine = '&8.'; +UNDEF 8; +-- +PRO +PRO 9. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&9.'; +UNDEF 9; +-- +COL sql_text FOR A60 TRUNC; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sql_id, + h.end_time, + SUM(h.max_samples) AS sum_max_samples + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + GROUP BY + h.sql_id, + h.end_time +) +SELECT MAX(sum_max_samples) AS mas, + sql_id, + (SELECT s.sql_text FROM sql_txt s WHERE s.sql_id = a.sql_id AND ROWNUM = 1) AS sql_text + FROM ash_dbc a + GROUP BY + sql_id + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 10. SQL_ID (opt): +DEF cs2_sql_id = '&10.'; +UNDEF 10; +-- +DEF spool_id_chart_footer_script = 'cs_max_ash_analytics_footer.sql'; +COL rn FOR 999; +COL dimension_group FOR A64 TRUNC; +DEF series_01 = ' '; +DEF series_02 = ' '; +DEF series_03 = ' '; +DEF series_04 = ' '; +DEF series_05 = ' '; +DEF series_06 = ' '; +DEF series_07 = ' '; +DEF series_08 = ' '; +DEF series_09 = ' '; +DEF series_10 = ' '; +DEF series_11 = ' '; +DEF series_12 = ' '; +DEF series_13 = ' '; +COL series_01 NEW_V series_01 FOR A64 TRUNC NOPRI; +COL series_02 NEW_V series_02 FOR A64 TRUNC NOPRI; +COL series_03 NEW_V series_03 FOR A64 TRUNC NOPRI; +COL series_04 NEW_V series_04 FOR A64 TRUNC NOPRI; +COL series_05 NEW_V series_05 FOR A64 TRUNC NOPRI; +COL series_06 NEW_V series_06 FOR A64 TRUNC NOPRI; +COL series_07 NEW_V series_07 FOR A64 TRUNC NOPRI; +COL series_08 NEW_V series_08 FOR A64 TRUNC NOPRI; +COL series_09 NEW_V series_09 FOR A64 TRUNC NOPRI; +COL series_10 NEW_V series_10 FOR A64 TRUNC NOPRI; +COL series_11 NEW_V series_11 FOR A64 TRUNC NOPRI; +COL series_12 NEW_V series_12 FOR A64 TRUNC NOPRI; +COL series_13 NEW_V series_13 FOR A64 TRUNC NOPRI; +DEF mas_01 = ' '; +DEF mas_02 = ' '; +DEF mas_03 = ' '; +DEF mas_04 = ' '; +DEF mas_05 = ' '; +DEF mas_06 = ' '; +DEF mas_07 = ' '; +DEF mas_08 = ' '; +DEF mas_09 = ' '; +DEF mas_10 = ' '; +DEF mas_11 = ' '; +DEF mas_12 = ' '; +DEF mas_13 = ' '; +COL mas_01 NEW_V mas_01 FOR A9 TRUNC NOPRI; +COL mas_02 NEW_V mas_02 FOR A9 TRUNC NOPRI; +COL mas_03 NEW_V mas_03 FOR A9 TRUNC NOPRI; +COL mas_04 NEW_V mas_04 FOR A9 TRUNC NOPRI; +COL mas_05 NEW_V mas_05 FOR A9 TRUNC NOPRI; +COL mas_06 NEW_V mas_06 FOR A9 TRUNC NOPRI; +COL mas_07 NEW_V mas_07 FOR A9 TRUNC NOPRI; +COL mas_08 NEW_V mas_08 FOR A9 TRUNC NOPRI; +COL mas_09 NEW_V mas_09 FOR A9 TRUNC NOPRI; +COL mas_10 NEW_V mas_10 FOR A9 TRUNC NOPRI; +COL mas_11 NEW_V mas_11 FOR A9 TRUNC NOPRI; +COL mas_12 NEW_V mas_12 FOR A9 TRUNC NOPRI; +COL mas_13 NEW_V mas_13 FOR A9 TRUNC NOPRI; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +-- +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + &&cs2_group. AS dimension_group, + h.end_time, + SUM(h.max_samples) AS sum_max_samples + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + GROUP BY + &&cs2_group., + h.end_time +), +ash_by_dim AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + MAX(sum_max_samples) AS mas, + dimension_group, + ROW_NUMBER() OVER(ORDER BY MAX(sum_max_samples) DESC) AS rn + FROM ash_dbc a + GROUP BY + dimension_group +), +top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, -- up to 12 + mas, + SUBSTR(CASE + WHEN TRIM(dimension_group) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' = 'sql_id' THEN dimension_group||' '||get_sql_text(dimension_group) + ELSE dimension_group + END, 1, 64) AS dimension_group + FROM ash_by_dim + WHERE rn < (SELECT MAX(rn) FROM wait_classes) -- 13 +), +max_top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ MAX(rn) AS max_rn FROM top +), +bottom AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + (1 + max_top.max_rn) AS bottom_rn, -- up to 13 + MAX(a.mas) AS mas, + '"all others"' AS dimension_group + FROM ash_by_dim a, max_top + WHERE a.rn >= max_top.max_rn + GROUP BY + max_top.max_rn +), +wait_classes2 AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + w.rn, + NVL(t.mas, 0) AS mas, + w.dimension_group + FROM wait_classes w, + top t + WHERE '&&cs2_dimension.' = 'wait_class' + AND t.dimension_group(+) = w.dimension_group +), +top_and_bottom AS ( +SELECT rn, mas, dimension_group + FROM top + WHERE '&&cs2_dimension.' <> 'wait_class' + UNION ALL +SELECT rn, mas, dimension_group + FROM wait_classes2 + WHERE '&&cs2_dimension.' = 'wait_class' + UNION ALL +SELECT bottom_rn AS rn, mas, dimension_group + FROM bottom + WHERE '&&cs2_dimension.' <> 'wait_class' +), +list AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, LPAD(TRIM(TO_CHAR(mas, '999,990')), 7) AS mas, dimension_group + FROM top_and_bottom +) +SELECT rn, mas, dimension_group, + COALESCE((SELECT dimension_group FROM list WHERE rn = 1), ' ') AS series_01, + COALESCE((SELECT dimension_group FROM list WHERE rn = 2), ' ') AS series_02, + COALESCE((SELECT dimension_group FROM list WHERE rn = 3), ' ') AS series_03, + COALESCE((SELECT dimension_group FROM list WHERE rn = 4), ' ') AS series_04, + COALESCE((SELECT dimension_group FROM list WHERE rn = 5), ' ') AS series_05, + COALESCE((SELECT dimension_group FROM list WHERE rn = 6), ' ') AS series_06, + COALESCE((SELECT dimension_group FROM list WHERE rn = 7), ' ') AS series_07, + COALESCE((SELECT dimension_group FROM list WHERE rn = 8), ' ') AS series_08, + COALESCE((SELECT dimension_group FROM list WHERE rn = 9), ' ') AS series_09, + COALESCE((SELECT dimension_group FROM list WHERE rn = 10), ' ') AS series_10, + COALESCE((SELECT dimension_group FROM list WHERE rn = 11), ' ') AS series_11, + COALESCE((SELECT dimension_group FROM list WHERE rn = 12), ' ') AS series_12, + COALESCE((SELECT dimension_group FROM list WHERE rn = 13), ' ') AS series_13, + (SELECT mas FROM list WHERE rn = 1) AS mas_01, + (SELECT mas FROM list WHERE rn = 2) AS mas_02, + (SELECT mas FROM list WHERE rn = 3) AS mas_03, + (SELECT mas FROM list WHERE rn = 4) AS mas_04, + (SELECT mas FROM list WHERE rn = 5) AS mas_05, + (SELECT mas FROM list WHERE rn = 6) AS mas_06, + (SELECT mas FROM list WHERE rn = 7) AS mas_07, + (SELECT mas FROM list WHERE rn = 8) AS mas_08, + (SELECT mas FROM list WHERE rn = 9) AS mas_09, + (SELECT mas FROM list WHERE rn = 10) AS mas_10, + (SELECT mas FROM list WHERE rn = 11) AS mas_11, + (SELECT mas FROM list WHERE rn = 12) AS mas_12, + (SELECT mas FROM list WHERE rn = 13) AS mas_13 + FROM list + ORDER BY + rn +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Maximum Active Sessions by &&cs2_dimension. between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = 'Maximum Active Sessions (MAS)'; +DEF xaxis_title = ''; +-- +COL xaxis_title NEW_V xaxis_title NOPRI; +SELECT +CASE WHEN '&&cs2_session_state.' IS NOT NULL THEN 'State:"&&cs2_session_state." ' END|| +CASE WHEN '&&cs2_wait_class.' IS NOT NULL THEN 'Wait:"&&cs2_wait_class." ' END|| +CASE WHEN '&&cs2_event.' IS NOT NULL THEN 'Event:"%&&cs2_event.%" ' END|| +CASE WHEN '&&cs2_machine.' IS NOT NULL THEN 'Machine:"%&&cs2_machine.%" ' END|| +CASE WHEN '&&cs2_sql_text_piece.' IS NOT NULL THEN 'Text:"%&&cs2_sql_text_piece.%" ' END|| +CASE WHEN '&&cs2_sql_id.' IS NOT NULL THEN 'SQL_ID:"&&cs2_sql_id." ' END AS xaxis_title +FROM DUAL; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_granularity." "&&cs2_dimension." "&&cs2_session_state." "&&cs2_wait_class." "&&cs2_event." "&&cs2_machine." "&&cs2_sql_text_piece." "&&cs2_sql_id."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&series_01.', id:'01', type:'number'} +PRO ,{label:'&&series_02.', id:'02', type:'number'} +PRO ,{label:'&&series_03.', id:'03', type:'number'} +PRO ,{label:'&&series_04.', id:'04', type:'number'} +PRO ,{label:'&&series_05.', id:'05', type:'number'} +PRO ,{label:'&&series_06.', id:'06', type:'number'} +PRO ,{label:'&&series_07.', id:'07', type:'number'} +PRO ,{label:'&&series_08.', id:'08', type:'number'} +PRO ,{label:'&&series_09.', id:'09', type:'number'} +PRO ,{label:'&&series_10.', id:'10', type:'number'} +PRO ,{label:'&&series_11.', id:'11', type:'number'} +PRO ,{label:'&&series_12.', id:'12', type:'number'} +PRO ,{label:'&&series_13.', id:'13', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +@@cs_internal/&&cs_set_container_to_cdb_root. +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +FUNCTION ceil_timestamp (p_timestamp IN TIMESTAMP) +RETURN DATE +IS +BEGIN + IF '&&cs2_granularity.' = '5m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 5) * 5 / (24 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15m' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), '&&cs2_fmt.')) / 15) * 15 / (24 * 60) + &&cs2_plus_days.; + ELSE -- 1m, 1h, 1d + RETURN TRUNC(CAST(p_timestamp AS DATE) + &&cs2_plus_days., '&&cs2_fmt.'); + END IF; +END ceil_timestamp; +/****************************************************************************************/ +FUNCTION get_sql_text (p_sql_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_sql_text VARCHAR2(4000); +BEGIN + SELECT MAX(REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM v$sql + WHERE sql_id = p_sql_id + AND ROWNUM = 1; + -- + IF l_sql_text IS NOT NULL THEN + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); + END IF; + -- + SELECT MAX(REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32))) AS sql_text + INTO l_sql_text + FROM dba_hist_sqltext + WHERE sql_id = p_sql_id + AND dbid = &&cs_dbid. + AND ROWNUM = 1; + -- + RETURN REPLACE(REPLACE(l_sql_text, ':'), ''''); +END get_sql_text; +/****************************************************************************************/ +sample AS ( +SELECT ceil_timestamp(TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + ((LEVEL - 1) * &&cs2_plus_days.)) AS time FROM DUAL CONNECT BY LEVEL <= TO_NUMBER('&&cs2_samples.') +), +wait_classes AS ( + SELECT 1 AS rn, 'ON CPU' AS dimension_group FROM DUAL +UNION SELECT 2 AS rn, 'User I/O' AS dimension_group FROM DUAL +UNION SELECT 3 AS rn, 'System I/O' AS dimension_group FROM DUAL +UNION SELECT 4 AS rn, 'Cluster' AS dimension_group FROM DUAL +UNION SELECT 5 AS rn, 'Commit' AS dimension_group FROM DUAL +UNION SELECT 6 AS rn, 'Concurrency' AS dimension_group FROM DUAL +UNION SELECT 7 AS rn, 'Application' AS dimension_group FROM DUAL +UNION SELECT 8 AS rn, 'Administrative' AS dimension_group FROM DUAL +UNION SELECT 9 AS rn, 'Configuration' AS dimension_group FROM DUAL +UNION SELECT 10 AS rn, 'Network' AS dimension_group FROM DUAL +UNION SELECT 11 AS rn, 'Queueing' AS dimension_group FROM DUAL +UNION SELECT 12 AS rn, 'Scheduler' AS dimension_group FROM DUAL +UNION SELECT 13 AS rn, 'Other' AS dimension_group FROM DUAL +), +sql_txt AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ sql_id, MAX(sql_text) AS sql_text + FROM ( + SELECT sql_id, REPLACE(REPLACE(SUBSTR(sql_text, 1, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM v$sql + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(sql_text) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND ROWNUM >= 1 + UNION ALL + SELECT sql_id, REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 100), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text + FROM dba_hist_sqltext + WHERE '&&cs2_sql_text_piece.' IS NOT NULL + AND UPPER(DBMS_LOB.substr(sql_text, 100)) LIKE CHR(37)||UPPER('&&cs2_sql_text_piece.')||CHR(37) + AND dbid = &&cs_dbid. + AND ROWNUM >= 1 + ) + GROUP BY sql_id +), +ash_dbc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.end_time, + SUM(h.max_samples) AS sum_max_samples, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' = 'sql_id' THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'module', 'pdb_name', 'host_name') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END AS dimension_group + FROM &&cs_tools_schema..dbc_active_session h + WHERE h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.db_domain = LOWER(SYS_CONTEXT('USERENV', 'DB_DOMAIN')) + AND h.db_name = UPPER(SYS_CONTEXT('USERENV', 'DB_NAME')) + AND '&&cs_con_name.' IN (h.pdb_name, 'CDB$ROOT') + AND ('&&cs2_session_state.' IS NULL OR h.session_state = '&&cs2_session_state.') + AND ('&&cs2_wait_class.' IS NULL OR h.wait_class = '&&cs2_wait_class.') + AND ('&&cs2_event.' IS NULL OR h.event LIKE CHR(37)||'&&cs2_event.'||CHR(37)) + AND ('&&cs2_machine.' IS NULL OR h.machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND ('&&cs2_sql_text_piece.' IS NULL OR h.sql_id IN (SELECT /*+ NO_MERGE */ t.sql_id FROM sql_txt t)) + AND ('&&cs2_sql_id.' IS NULL OR h.sql_id = '&&cs2_sql_id.') + GROUP BY + h.end_time, + CASE + WHEN TRIM(&&cs2_group.) IS NULL THEN '"null"' + WHEN '&&cs2_dimension.' = 'sql_id' THEN + CASE + WHEN &&cs2_group. = SUBSTR(q'[&&series_01.]', 1, INSTR(q'[&&series_01.]', ' ') - 1) THEN q'[&&series_01.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_02.]', 1, INSTR(q'[&&series_02.]', ' ') - 1) THEN q'[&&series_02.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_03.]', 1, INSTR(q'[&&series_03.]', ' ') - 1) THEN q'[&&series_03.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_04.]', 1, INSTR(q'[&&series_04.]', ' ') - 1) THEN q'[&&series_04.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_05.]', 1, INSTR(q'[&&series_05.]', ' ') - 1) THEN q'[&&series_05.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_06.]', 1, INSTR(q'[&&series_06.]', ' ') - 1) THEN q'[&&series_06.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_07.]', 1, INSTR(q'[&&series_07.]', ' ') - 1) THEN q'[&&series_07.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_08.]', 1, INSTR(q'[&&series_08.]', ' ') - 1) THEN q'[&&series_08.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_09.]', 1, INSTR(q'[&&series_09.]', ' ') - 1) THEN q'[&&series_09.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_10.]', 1, INSTR(q'[&&series_10.]', ' ') - 1) THEN q'[&&series_10.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_11.]', 1, INSTR(q'[&&series_11.]', ' ') - 1) THEN q'[&&series_11.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_12.]', 1, INSTR(q'[&&series_12.]', ' ') - 1) THEN q'[&&series_12.]' + WHEN &&cs2_group. = SUBSTR(q'[&&series_13.]', 1, INSTR(q'[&&series_13.]', ' ') - 1) THEN q'[&&series_13.]' + ELSE '"all others"' END + WHEN '&&cs2_dimension.' IN ('wait_class', 'event', 'machine', 'plan_hash_value', 'module', 'pdb_name', 'host_name') THEN + CASE + WHEN &&cs2_group. = q'[&&series_01.]' THEN q'[&&series_01.]' + WHEN &&cs2_group. = q'[&&series_02.]' THEN q'[&&series_02.]' + WHEN &&cs2_group. = q'[&&series_03.]' THEN q'[&&series_03.]' + WHEN &&cs2_group. = q'[&&series_04.]' THEN q'[&&series_04.]' + WHEN &&cs2_group. = q'[&&series_05.]' THEN q'[&&series_05.]' + WHEN &&cs2_group. = q'[&&series_06.]' THEN q'[&&series_06.]' + WHEN &&cs2_group. = q'[&&series_07.]' THEN q'[&&series_07.]' + WHEN &&cs2_group. = q'[&&series_08.]' THEN q'[&&series_08.]' + WHEN &&cs2_group. = q'[&&series_09.]' THEN q'[&&series_09.]' + WHEN &&cs2_group. = q'[&&series_10.]' THEN q'[&&series_10.]' + WHEN &&cs2_group. = q'[&&series_11.]' THEN q'[&&series_11.]' + WHEN &&cs2_group. = q'[&&series_12.]' THEN q'[&&series_12.]' + WHEN &&cs2_group. = q'[&&series_13.]' THEN q'[&&series_13.]' + ELSE '"all others"' END + ELSE '"all others"' END +), +ash_dbc_denorm AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(h.end_time) AS time, + MAX(CASE WHEN h.dimension_group = q'[&&series_01.]' THEN sum_max_samples ELSE 0 END) AS mas_01, + MAX(CASE WHEN h.dimension_group = q'[&&series_02.]' THEN sum_max_samples ELSE 0 END) AS mas_02, + MAX(CASE WHEN h.dimension_group = q'[&&series_03.]' THEN sum_max_samples ELSE 0 END) AS mas_03, + MAX(CASE WHEN h.dimension_group = q'[&&series_04.]' THEN sum_max_samples ELSE 0 END) AS mas_04, + MAX(CASE WHEN h.dimension_group = q'[&&series_05.]' THEN sum_max_samples ELSE 0 END) AS mas_05, + MAX(CASE WHEN h.dimension_group = q'[&&series_06.]' THEN sum_max_samples ELSE 0 END) AS mas_06, + MAX(CASE WHEN h.dimension_group = q'[&&series_07.]' THEN sum_max_samples ELSE 0 END) AS mas_07, + MAX(CASE WHEN h.dimension_group = q'[&&series_08.]' THEN sum_max_samples ELSE 0 END) AS mas_08, + MAX(CASE WHEN h.dimension_group = q'[&&series_09.]' THEN sum_max_samples ELSE 0 END) AS mas_09, + MAX(CASE WHEN h.dimension_group = q'[&&series_10.]' THEN sum_max_samples ELSE 0 END) AS mas_10, + MAX(CASE WHEN h.dimension_group = q'[&&series_11.]' THEN sum_max_samples ELSE 0 END) AS mas_11, + MAX(CASE WHEN h.dimension_group = q'[&&series_12.]' THEN sum_max_samples ELSE 0 END) AS mas_12, + MAX(CASE WHEN h.dimension_group = q'[&&series_13.]' THEN sum_max_samples ELSE 0 END) AS mas_13 + FROM ash_dbc h + GROUP BY + ceil_timestamp(h.end_time) +), +ash_denorm AS ( +SELECT time, (time - LAG(time, 1, time) OVER (ORDER BY time)) * 24 * 3600 AS interval_secs, mas_01, mas_02, mas_03, mas_04, mas_05, mas_06, mas_07, mas_08, mas_09, mas_10, mas_11, mas_12, mas_13 FROM ash_dbc_denorm +), +/****************************************************************************************/ +my_query AS ( +SELECT s.time, a.mas_01, a.mas_02, a.mas_03, a.mas_04, a.mas_05, a.mas_06, a.mas_07, a.mas_08, a.mas_09, a.mas_10, a.mas_11, a.mas_12, a.mas_13, + ROW_NUMBER() OVER (ORDER BY s.time ASC NULLS LAST) AS rn_asc, + ROW_NUMBER() OVER (ORDER BY s.time DESC NULLS LAST) AS rn_desc + FROM ash_denorm a, + sample s + WHERE a.interval_secs > 0 + AND a.time(+) = s.time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.mas_01)|| + ','||num_format(q.mas_02)|| + ','||num_format(q.mas_03)|| + ','||num_format(q.mas_04)|| + ','||num_format(q.mas_05)|| + ','||num_format(q.mas_06)|| + ','||num_format(q.mas_07)|| + ','||num_format(q.mas_08)|| + ','||num_format(q.mas_09)|| + ','||num_format(q.mas_10)|| + ','||num_format(q.mas_11)|| + ','||num_format(q.mas_12)|| + ','||num_format(q.mas_13)|| + ']' + FROM my_query q + WHERE 1 = 1 + -- AND q.rn_asc > 1 AND q.rn_desc > 1 + AND q.mas_01 + q.mas_02 + q.mas_03 + q.mas_04 + q.mas_05 + q.mas_06 + q.mas_07 + q.mas_08 + q.mas_09 + q.mas_10 + q.mas_11 + q.mas_12 + q.mas_13 > 0 + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '&&use_oem_colors_series.'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_one_sysmetric_per_pdb_chart.sql b/csierra/cs_one_sysmetric_per_pdb_chart.sql new file mode 100644 index 0000000..b95ec08 --- /dev/null +++ b/csierra/cs_one_sysmetric_per_pdb_chart.sql @@ -0,0 +1,331 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_one_sysmetric_per_pdb_chart.sql +-- +-- Purpose: One System Metric as per DBA_HIST_CON_SYSMETRIC_SUMM View per PDB (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/31 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_one_sysmetric_per_pdb_chart.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_one_sysmetric_per_pdb_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +COL metric_name FOR A40; +COL metric_unit FOR A40; +SELECT DISTINCT h.metric_name, h.metric_unit + FROM dba_hist_con_sysmetric_summ h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id = TO_NUMBER('&&cs_snap_id_to.') + ORDER BY + h.metric_name, h.metric_unit +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 3. Metric Name: +DEF cs_metric_name = '&3.'; +UNDEF 3; +COL cs_metric_name NEW_V cs_metric_name NOPRI; +COL cs_metric_unit NEW_V cs_metric_unit NOPRI; +@@cs_internal/&&cs_set_container_to_cdb_root. +SELECT h.metric_name AS cs_metric_name, h.metric_unit AS cs_metric_unit + FROM dba_hist_con_sysmetric_summ h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id = TO_NUMBER('&&cs_snap_id_to.') + AND h.metric_name = TRIM('&&cs_metric_name.') + AND ROWNUM = 1 +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO 4. Metric Value: [{average}|maxval] +DEF cs_metric_value = '&4.'; +UNDEF 1; +COL cs_metric_value NEW_V cs_metric_value NOPRI; +SELECT CASE WHEN LOWER(TRIM('&&cs_metric_value.')) IN ('average' ,'maxval') THEN LOWER(TRIM('&&cs_metric_value.')) ELSE 'average' END AS cs_metric_value FROM DUAL +/ +COL cs_hea NEW_V cs_hea NOPRI; +COL cs_func NEW_V cs_func NOPRI; +SELECT CASE '&&cs_metric_value.' WHEN 'average' THEN 'Average' WHEN 'maxval' THEN 'Maximum' ELSE 'Error' END AS cs_hea, CASE '&&cs_metric_value.' WHEN 'average' THEN 'AVG' WHEN 'maxval' THEN 'MAX' ELSE 'Error' END AS cs_func FROM DUAL +/ +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +DEF con_id_01 = ' '; +DEF con_id_02 = ' '; +DEF con_id_03 = ' '; +DEF con_id_04 = ' '; +DEF con_id_05 = ' '; +DEF con_id_06 = ' '; +DEF con_id_07 = ' '; +DEF con_id_08 = ' '; +DEF con_id_09 = ' '; +DEF con_id_10 = ' '; +DEF con_id_11 = ' '; +DEF con_id_12 = ' '; +DEF con_id_13 = ' '; +DEF con_id_14 = ' '; +DEF con_id_15 = ' '; +COL con_id_01 NEW_V con_id_01 NOPRI; +COL con_id_02 NEW_V con_id_02 NOPRI; +COL con_id_03 NEW_V con_id_03 NOPRI; +COL con_id_04 NEW_V con_id_04 NOPRI; +COL con_id_05 NEW_V con_id_05 NOPRI; +COL con_id_06 NEW_V con_id_06 NOPRI; +COL con_id_07 NEW_V con_id_07 NOPRI; +COL con_id_08 NEW_V con_id_08 NOPRI; +COL con_id_09 NEW_V con_id_09 NOPRI; +COL con_id_10 NEW_V con_id_10 NOPRI; +COL con_id_11 NEW_V con_id_11 NOPRI; +COL con_id_12 NEW_V con_id_12 NOPRI; +COL con_id_13 NEW_V con_id_13 NOPRI; +COL con_id_14 NEW_V con_id_14 NOPRI; +COL con_id_15 NEW_V con_id_15 NOPRI; +DEF pdb_name_01 = ' '; +DEF pdb_name_02 = ' '; +DEF pdb_name_03 = ' '; +DEF pdb_name_04 = ' '; +DEF pdb_name_05 = ' '; +DEF pdb_name_06 = ' '; +DEF pdb_name_07 = ' '; +DEF pdb_name_08 = ' '; +DEF pdb_name_09 = ' '; +DEF pdb_name_10 = ' '; +DEF pdb_name_11 = ' '; +DEF pdb_name_12 = ' '; +DEF pdb_name_13 = ' '; +DEF pdb_name_14 = ' '; +DEF pdb_name_15 = ' '; +COL pdb_name_01 NEW_V pdb_name_01 NOPRI; +COL pdb_name_02 NEW_V pdb_name_02 NOPRI; +COL pdb_name_03 NEW_V pdb_name_03 NOPRI; +COL pdb_name_04 NEW_V pdb_name_04 NOPRI; +COL pdb_name_05 NEW_V pdb_name_05 NOPRI; +COL pdb_name_06 NEW_V pdb_name_06 NOPRI; +COL pdb_name_07 NEW_V pdb_name_07 NOPRI; +COL pdb_name_08 NEW_V pdb_name_08 NOPRI; +COL pdb_name_09 NEW_V pdb_name_09 NOPRI; +COL pdb_name_10 NEW_V pdb_name_10 NOPRI; +COL pdb_name_11 NEW_V pdb_name_11 NOPRI; +COL pdb_name_12 NEW_V pdb_name_12 NOPRI; +COL pdb_name_13 NEW_V pdb_name_13 NOPRI; +COL pdb_name_14 NEW_V pdb_name_14 NOPRI; +COL pdb_name_15 NEW_V pdb_name_15 NOPRI; +-- +WITH +all_pdbs AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + &&cs_func.(&&cs_metric_value.) AS value, + ROW_NUMBER() OVER (ORDER BY &&cs_func.(&&cs_metric_value.) DESC NULLS LAST) AS rn + FROM dba_hist_con_sysmetric_summ h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.metric_name = '&&cs_metric_name.' + AND h.metric_unit = '&&cs_metric_unit.' + GROUP BY + h.con_id +), +top_15 AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.rn, TO_CHAR(h.con_id) AS con_id, c.name AS pdb_name, value + FROM all_pdbs h, v$containers c + WHERE h.rn <= 13 + AND c.con_id = h.con_id +) +SELECT (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 01) AS con_id_01, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 01) AS pdb_name_01, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 02) AS con_id_02, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 02) AS pdb_name_02, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 03) AS con_id_03, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 03) AS pdb_name_03, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 04) AS con_id_04, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 04) AS pdb_name_04, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 05) AS con_id_05, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 05) AS pdb_name_05, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 06) AS con_id_06, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 06) AS pdb_name_06, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 07) AS con_id_07, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 07) AS pdb_name_07, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 08) AS con_id_08, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 08) AS pdb_name_08, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 09) AS con_id_09, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 09) AS pdb_name_09, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 10) AS con_id_10, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 10) AS pdb_name_10, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 11) AS con_id_11, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 11) AS pdb_name_11, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 12) AS con_id_12, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 12) AS pdb_name_12, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 13) AS con_id_13, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 13) AS pdb_name_13, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 14) AS con_id_14, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 14) AS pdb_name_14, + (SELECT NVL(con_id , ' ') FROM top_15 WHERE rn = 15) AS con_id_15, + (SELECT NVL(pdb_name, ' ') FROM top_15 WHERE rn = 15) AS pdb_name_15 + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "&&cs_hea. - &&cs_metric_name. per PDB"; +DEF chart_title = "&&cs_hea. - &&cs_metric_name. per PDB"; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +-- DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +-- DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "&&cs_metric_unit."; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +-- DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +-- DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_metric_name." "&&cs_metric_value."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&pdb_name_01.', id:'01', type:'number'} +PRO ,{label:'&&pdb_name_02.', id:'02', type:'number'} +PRO ,{label:'&&pdb_name_03.', id:'03', type:'number'} +PRO ,{label:'&&pdb_name_04.', id:'04', type:'number'} +PRO ,{label:'&&pdb_name_05.', id:'05', type:'number'} +PRO ,{label:'&&pdb_name_06.', id:'06', type:'number'} +PRO ,{label:'&&pdb_name_07.', id:'07', type:'number'} +PRO ,{label:'&&pdb_name_08.', id:'08', type:'number'} +PRO ,{label:'&&pdb_name_09.', id:'09', type:'number'} +PRO ,{label:'&&pdb_name_10.', id:'10', type:'number'} +PRO ,{label:'&&pdb_name_11.', id:'11', type:'number'} +PRO ,{label:'&&pdb_name_12.', id:'12', type:'number'} +PRO ,{label:'&&pdb_name_13.', id:'13', type:'number'} +-- PRO ,{label:'&&pdb_name_14.', id:'14', type:'number'} +-- PRO ,{label:'&&pdb_name_15.', id:'15', type:'number'} +PRO ,{label:'All Others', id:'16', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +all_pdbs AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.end_time, + h.con_id, + &&cs_metric_value. AS value + FROM dba_hist_con_sysmetric_summ h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.end_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.end_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.metric_name = '&&cs_metric_name.' + AND h.metric_unit = '&&cs_metric_unit.' +) +SELECT ', [new Date('|| + TO_CHAR(h.end_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(h.end_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(h.end_time, 'DD')|| /* day */ + ','||TO_CHAR(h.end_time, 'HH24')|| /* hour */ + ','||TO_CHAR(h.end_time, 'MI')|| /* minute */ + ','||TO_CHAR(h.end_time, 'SS')|| /* second */ + ')'|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_01.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_02.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_03.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_04.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_05.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_06.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_07.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_08.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_09.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_10.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_11.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_12.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_13.', '0')) THEN h.value ELSE 0 END), 3)|| + -- ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_14.', '0')) THEN h.value ELSE 0 END), 3)|| + -- ','||num_format(SUM(CASE WHEN h.con_id = TO_NUMBER(NVL('&&con_id_15.', '0')) THEN h.value ELSE 0 END), 3)|| + ','||num_format(SUM(CASE WHEN h.con_id IN ( + TO_NUMBER(NVL('&&con_id_01.', '0')), + TO_NUMBER(NVL('&&con_id_02.', '0')), + TO_NUMBER(NVL('&&con_id_03.', '0')), + TO_NUMBER(NVL('&&con_id_04.', '0')), + TO_NUMBER(NVL('&&con_id_05.', '0')), + TO_NUMBER(NVL('&&con_id_06.', '0')), + TO_NUMBER(NVL('&&con_id_07.', '0')), + TO_NUMBER(NVL('&&con_id_08.', '0')), + TO_NUMBER(NVL('&&con_id_09.', '0')), + TO_NUMBER(NVL('&&con_id_10.', '0')), + TO_NUMBER(NVL('&&con_id_11.', '0')), + TO_NUMBER(NVL('&&con_id_12.', '0')), + TO_NUMBER(NVL('&&con_id_13.', '0')) + -- TO_NUMBER(NVL('&&con_id_14.', '0')), + -- TO_NUMBER(NVL('&&con_id_15.', '0')) + ) THEN 0 ELSE h.value END), 3)|| + ']' + FROM all_pdbs h + GROUP BY + h.end_time + ORDER BY + h.end_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_opened_cursors_current_per_session.sql b/csierra/cs_opened_cursors_current_per_session.sql new file mode 100644 index 0000000..b0b9c9d --- /dev/null +++ b/csierra/cs_opened_cursors_current_per_session.sql @@ -0,0 +1,12 @@ +COL value HEA 'Cursors'; +COL username FOR A30; +COL sid FOR 99999; +COL serial# FOR 99999999; +-- +select a.value, s.username, s.sid, s.serial# +from v$sesstat a, v$statname b, v$session s +where a.statistic# = b.statistic# and s.sid=a.sid +and b.name = 'opened cursors current' +order by a.value DESC +/ + diff --git a/csierra/cs_osstat_chart.sql b/csierra/cs_osstat_chart.sql new file mode 100644 index 0000000..87f6fc9 --- /dev/null +++ b/csierra/cs_osstat_chart.sql @@ -0,0 +1,181 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_osstat_chart.sql +-- +-- Purpose: OS Stats from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/03 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_osstat_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_osstat_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL stat_name FOR A25; +COL value FOR 999,999,999,999,990; +SELECT stat_name, value, comments, cumulative FROM v$osstat +/ +-- +PRO +PRO 3. Stat Name #1: +DEF cs_stat_name_1 = '&3.'; +DEF cs_comments_1 = ''; +UNDEF 3; +COL cs_stat_name_1 NEW_V cs_stat_name_1 NOPRI; +COL cs_comments_1 NEW_V cs_comments_1 NOPRI; +SELECT stat_name AS cs_stat_name_1, comments AS cs_comments_1 FROM v$osstat WHERE stat_name = TRIM('&&cs_stat_name_1.') +/ +PRO +PRO 4. Stat Name #2: (opt) +DEF cs_stat_name_2 = '&4.'; +DEF cs_comments_2 = ''; +UNDEF 4; +COL cs_stat_name_2 NEW_V cs_stat_name_2 NOPRI; +COL cs_comments_2 NEW_V cs_comments_2 NOPRI; +SELECT stat_name AS cs_stat_name_2, comments AS cs_comments_2 FROM v$osstat WHERE stat_name = TRIM('&&cs_stat_name_2.') +/ +PRO +PRO 5. Stat Name #3: (opt) +DEF cs_stat_name_3 = '&5.'; +DEF cs_comments_3 = ''; +UNDEF 5; +COL cs_stat_name_3 NEW_V cs_stat_name_3 NOPRI; +COL cs_comments_3 NEW_V cs_comments_3 NOPRI; +SELECT stat_name AS cs_stat_name_3, comments AS cs_comments_3 FROM v$osstat WHERE stat_name = TRIM('&&cs_stat_name_3.') +/ +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'OS Stat(s) between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = ''; +DEF vaxis_title = ''; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2) &&cs_stat_name_1. &&cs_comments_1."; +DEF chart_foot_note_3 = "
3) &&cs_stat_name_2. &&cs_comments_2."; +DEF chart_foot_note_4 = "
4) &&cs_stat_name_3. &&cs_comments_3.
"; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_stat_name_1." "&&cs_stat_name_2." "&&cs_stat_name_3."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&cs_stat_name_1.', id:'1', type:'number'} +PRO ,{label:'&&cs_stat_name_2.', id:'2', type:'number'} +PRO ,{label:'&&cs_stat_name_3.', id:'3', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +osstat AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + CAST(s.begin_interval_time AS DATE) begin_time, + CAST(s.end_interval_time AS DATE) end_time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 24 * 3600 seconds, + h.stat_name, + CASE o.cumulative + WHEN 'NO' THEN h.value + WHEN 'YES' THEN h.value - LAG(h.value) OVER (PARTITION BY h.stat_name ORDER BY h.snap_id) + ELSE 0 + END value, + ROW_NUMBER() OVER (PARTITION BY h.stat_name ORDER BY h.snap_id) row_number + FROM dba_hist_osstat h, + dba_hist_snapshot s, + v$osstat o + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.stat_name IN ('&&cs_stat_name_1.', '&&cs_stat_name_2.', '&&cs_stat_name_3.') + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number + AND o.stat_name = h.stat_name +), +my_query AS ( +SELECT end_time time, + ROUND(SUM(CASE stat_name WHEN '&&cs_stat_name_1.' THEN value ELSE 0 END), 1) cs_stat_name_1, + ROUND(SUM(CASE stat_name WHEN '&&cs_stat_name_2.' THEN value ELSE 0 END), 1) cs_stat_name_2, + ROUND(SUM(CASE stat_name WHEN '&&cs_stat_name_3.' THEN value ELSE 0 END), 1) cs_stat_name_3 + FROM osstat + WHERE row_number > 1 -- remove first row + AND value >= 0 + AND seconds > 0 + GROUP BY + end_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.cs_stat_name_1, 1)|| + ','||num_format(q.cs_stat_name_2, 1)|| + ','||num_format(q.cs_stat_name_3, 1)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_osstat_cpu_busy_chart.sql b/csierra/cs_osstat_cpu_busy_chart.sql new file mode 100644 index 0000000..7c13a25 --- /dev/null +++ b/csierra/cs_osstat_cpu_busy_chart.sql @@ -0,0 +1,153 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_osstat_cpu_busy_chart.sql +-- +-- Purpose: CPU Cores Busyness as per OS Stats from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/03 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_osstat_cpu_load_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_osstat_cpu_busy_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Busy CPU Cores between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = ''; +DEF vaxis_title = 'Busy CPU Cores'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2) Other: I/O Wait Time + Nice Time + Unaccounted Time"; +DEF chart_foot_note_3 = "
3) Server has &&cs_num_cpu_cores. CPU Cores"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'User', id:'1', type:'number'} +PRO ,{label:'System', id:'2', type:'number'} +PRO ,{label:'Other', id:'3', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +osstat AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + CAST(s.begin_interval_time AS DATE) begin_time, + CAST(s.end_interval_time AS DATE) end_time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 24 * 3600 seconds, + h.stat_name, + CASE + WHEN h.stat_name IN ('NUM_CPUS','LOAD','NUM_CPU_CORES') THEN h.value + WHEN h.stat_name LIKE '%TIME' THEN h.value - LAG(h.value) OVER (PARTITION BY h.stat_name ORDER BY h.snap_id) + ELSE 0 + END value, + ROW_NUMBER() OVER (PARTITION BY h.stat_name ORDER BY h.snap_id) row_number + FROM dba_hist_osstat h, + dba_hist_snapshot s + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.stat_name IN ('NUM_CPUS','IDLE_TIME','BUSY_TIME','USER_TIME','SYS_TIME','IOWAIT_TIME','NICE_TIME','RSRC_MGR_CPU_WAIT_TIME','LOAD','NUM_CPU_CORES') + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number +), +my_query AS ( +SELECT end_time time, + ROUND(SUM(CASE stat_name WHEN 'LOAD' THEN value ELSE 0 END), 1) load, + SUM(CASE stat_name WHEN 'NUM_CPU_CORES' THEN value ELSE 0 END) cores, + SUM(CASE stat_name WHEN 'NUM_CPUS' THEN value ELSE 0 END) cpus, + ROUND(SUM(CASE stat_name WHEN 'IDLE_TIME' THEN value / 100 / seconds ELSE 0 END), 1) idle, + ROUND(SUM(CASE stat_name WHEN 'BUSY_TIME' THEN value / 100 / seconds ELSE 0 END), 1) busy, + ROUND(SUM(CASE stat_name WHEN 'USER_TIME' THEN value / 100 / seconds ELSE 0 END), 1) usr, + ROUND(SUM(CASE stat_name WHEN 'SYS_TIME' THEN value / 100 / seconds ELSE 0 END), 1) sys, + ROUND(SUM(CASE stat_name WHEN 'IOWAIT_TIME' THEN value / 100 / seconds ELSE 0 END), 1) io, + ROUND(SUM(CASE stat_name WHEN 'NICE_TIME' THEN value / 100 / seconds ELSE 0 END), 1) nice, + ROUND(SUM(CASE stat_name WHEN 'RSRC_MGR_CPU_WAIT_TIME' THEN value / 100 / seconds ELSE 0 END), 1) dbrm + FROM osstat + WHERE row_number > 1 -- remove first row + AND value >= 0 + AND seconds > 0 + GROUP BY + end_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.usr, 1)|| + ','||num_format(q.sys, 1)|| + ','||num_format(GREATEST(q.busy - q.usr - q.sys, 0), 1)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_osstat_cpu_load_chart.sql b/csierra/cs_osstat_cpu_load_chart.sql new file mode 100644 index 0000000..99dab70 --- /dev/null +++ b/csierra/cs_osstat_cpu_load_chart.sql @@ -0,0 +1,157 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_osstat_cpu_load_chart.sql +-- +-- Purpose: CPU Cores Load as per OS Stats from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/03 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_osstat_cpu_load_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_osstat_cpu_load_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'CPU Demand between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = ''; +DEF vaxis_title = ''; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2) Load: Number of OS processes running or waiting on the run queue"; +DEF chart_foot_note_3 = "
3) DBRM: Number of database sessions requesting CPU and waiting on Resource Manager Scheduler"; +DEF chart_foot_note_4 = "
4) CPU Demand: Load + DBRM (number of sessions running or waiting for CPU)
"; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'CPU Cores', id:'1', type:'number'} +-- PRO ,{label:'CPU Threads', id:'2', type:'number'} +-- PRO ,{label:'Threads Busy', id:'3', type:'number'} +PRO ,{label:'DBRM', id:'4', type:'number'} +PRO ,{label:'Load', id:'5', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +osstat AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + CAST(s.begin_interval_time AS DATE) begin_time, + CAST(s.end_interval_time AS DATE) end_time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 24 * 3600 seconds, + h.stat_name, + CASE + WHEN h.stat_name IN ('NUM_CPUS','LOAD','NUM_CPU_CORES') THEN h.value + WHEN h.stat_name LIKE '%TIME' THEN h.value - LAG(h.value) OVER (PARTITION BY h.stat_name ORDER BY h.snap_id) + ELSE 0 + END value, + ROW_NUMBER() OVER (PARTITION BY h.stat_name ORDER BY h.snap_id) row_number + FROM dba_hist_osstat h, + dba_hist_snapshot s + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.stat_name IN ('NUM_CPUS','IDLE_TIME','BUSY_TIME','USER_TIME','SYS_TIME','IOWAIT_TIME','NICE_TIME','RSRC_MGR_CPU_WAIT_TIME','LOAD','NUM_CPU_CORES') + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number +), +my_query AS ( +SELECT end_time time, + ROUND(SUM(CASE stat_name WHEN 'LOAD' THEN value ELSE 0 END), 1) load, + SUM(CASE stat_name WHEN 'NUM_CPU_CORES' THEN value ELSE 0 END) cores, + SUM(CASE stat_name WHEN 'NUM_CPUS' THEN value ELSE 0 END) cpus, + ROUND(SUM(CASE stat_name WHEN 'IDLE_TIME' THEN value / 100 / seconds ELSE 0 END), 1) idle, + ROUND(SUM(CASE stat_name WHEN 'BUSY_TIME' THEN value / 100 / seconds ELSE 0 END), 1) busy, + ROUND(SUM(CASE stat_name WHEN 'USER_TIME' THEN value / 100 / seconds ELSE 0 END), 1) usr, + ROUND(SUM(CASE stat_name WHEN 'SYS_TIME' THEN value / 100 / seconds ELSE 0 END), 1) sys, + ROUND(SUM(CASE stat_name WHEN 'IOWAIT_TIME' THEN value / 100 / seconds ELSE 0 END), 1) io, + ROUND(SUM(CASE stat_name WHEN 'NICE_TIME' THEN value / 100 / seconds ELSE 0 END), 1) nice, + ROUND(SUM(CASE stat_name WHEN 'RSRC_MGR_CPU_WAIT_TIME' THEN value / 100 / seconds ELSE 0 END), 1) dbrm + FROM osstat + WHERE row_number > 1 -- remove first row + AND value >= 0 + AND seconds > 0 + GROUP BY + end_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.cores, 1)|| + -- ','||num_format(q.cpus, 1)|| + -- ','||num_format(q.busy, 1)|| + ','||num_format(q.dbrm, 1)|| + ','||num_format(q.load, 1)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Line'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_osstat_cpu_report.sql b/csierra/cs_osstat_cpu_report.sql new file mode 100644 index 0000000..9b94100 --- /dev/null +++ b/csierra/cs_osstat_cpu_report.sql @@ -0,0 +1,132 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_osstat_cpu_report.sql +-- +-- Purpose: CPU Cores Load and Busyness as per OS Stats from AWR (time series report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/03 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_osstat_cpu_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_osstat_cpu_report'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +COL time FOR A19 HEA 'END_TIME'; +COL cores FOR 990; +COL cpus FOR 990; +COL load FOR 9,990; +COL dbrm FOR 990.0 HEA 'DBRM|CPUs'; +COL usr FOR 990.0 HEA 'USR|CPUs'; +COL sys FOR 990.0 HEA 'SYS|CPUs'; +COL io FOR 990.0 HEA 'IO|CPUs'; +COL nice FOR 990.0 HEA 'NICE|CPUs'; +COL busy FOR 990.0 HEA 'BUSY|CPUs'; +COL idle FOR 990.0 HEA 'IDLE|CPUs'; +COL cpu_util_perc FOR 990.0 HEA 'CPU UTL|PERC %'; +-- +BREAK ON REPORT; +COMPUTE MAX LABEL 'MAX' OF cores cpus load dbrm usr sys io nice busy idle cpu_util_perc ON REPORT; +-- +PRO +PRO OS Stats from AWR +PRO ~~~~~~~~~~~~~~~~~ +WITH +osstat AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + CAST(s.begin_interval_time AS DATE) begin_time, + CAST(s.end_interval_time AS DATE) end_time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 24 * 3600 seconds, + h.stat_name, + CASE + WHEN h.stat_name IN ('NUM_CPUS','LOAD','NUM_CPU_CORES') THEN h.value + WHEN h.stat_name LIKE '%TIME' THEN h.value - LAG(h.value) OVER (PARTITION BY h.stat_name ORDER BY h.snap_id) + ELSE 0 + END value, + ROW_NUMBER() OVER (PARTITION BY h.stat_name ORDER BY h.snap_id) row_number + FROM dba_hist_osstat h, + dba_hist_snapshot s + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.stat_name IN ('NUM_CPUS','IDLE_TIME','BUSY_TIME','USER_TIME','SYS_TIME','IOWAIT_TIME','NICE_TIME','RSRC_MGR_CPU_WAIT_TIME','LOAD','NUM_CPU_CORES') + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number +), +my_query AS ( +SELECT end_time time, + ROUND(SUM(CASE stat_name WHEN 'LOAD' THEN value ELSE 0 END), 1) load, + SUM(CASE stat_name WHEN 'NUM_CPU_CORES' THEN value ELSE 0 END) cores, + SUM(CASE stat_name WHEN 'NUM_CPUS' THEN value ELSE 0 END) cpus, + ROUND(SUM(CASE stat_name WHEN 'IDLE_TIME' THEN value / 100 / seconds ELSE 0 END), 1) idle, + ROUND(SUM(CASE stat_name WHEN 'BUSY_TIME' THEN value / 100 / seconds ELSE 0 END), 1) busy, + ROUND(SUM(CASE stat_name WHEN 'USER_TIME' THEN value / 100 / seconds ELSE 0 END), 1) usr, + ROUND(SUM(CASE stat_name WHEN 'SYS_TIME' THEN value / 100 / seconds ELSE 0 END), 1) sys, + ROUND(SUM(CASE stat_name WHEN 'IOWAIT_TIME' THEN value / 100 / seconds ELSE 0 END), 1) io, + ROUND(SUM(CASE stat_name WHEN 'NICE_TIME' THEN value / 100 / seconds ELSE 0 END), 1) nice, + ROUND(SUM(CASE stat_name WHEN 'RSRC_MGR_CPU_WAIT_TIME' THEN value / 100 / seconds ELSE 0 END), 1) dbrm + FROM osstat + WHERE row_number > 1 -- remove first row + AND value >= 0 + AND seconds > 0 + GROUP BY + end_time +) +SELECT q.time, + q.cores, + q.cpus, + q.load, + q.dbrm, + q.usr, + q.sys, + q.io, + q.nice, + q.busy, + q.idle, + 100 * q.busy / (q.busy + q.idle) AS cpu_util_perc + FROM my_query q + ORDER BY + q.time +/ +-- +CLEAR BREAK COMPUTE; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_osstat_cpu_util_perc_chart.sql b/csierra/cs_osstat_cpu_util_perc_chart.sql new file mode 100644 index 0000000..3ee69c8 --- /dev/null +++ b/csierra/cs_osstat_cpu_util_perc_chart.sql @@ -0,0 +1,154 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_osstat_cpu_util_perc_chart.sql +-- +-- Purpose: CPU Utilization Percent Chart (AWR) - 15m Granularity +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/03 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_osstat_cpu_util_perc_chart.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_osstat_cpu_util_perc_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'CPU Utilization Percent between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = ''; +DEF vaxis_title = ''; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2) SEV2 (critical state, engage IOD)"; +DEF chart_foot_note_3 = "
3) SEV3 (migrate out some PDBs)"; +DEF chart_foot_note_4 = "
4) SEV4 (suspend new PDB allocation)
"; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'SEV2', id:'1', type:'number'} +PRO ,{label:'SEV3', id:'2', type:'number'} +PRO ,{label:'SEV4', id:'3', type:'number'} +PRO ,{label:'CPU Util Perc', id:'4', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +osstat_filtered AS ( +SELECT s.end_interval_time, + o.stat_name, + CASE + WHEN o.stat_name = 'NUM_CPUS' THEN o.value + WHEN o.stat_name IN ('BUSY_TIME', 'IDLE_TIME') THEN o.value - LAG(o.value) OVER (PARTITION BY o.stat_name ORDER BY s.end_interval_time) + END AS value + FROM dba_hist_osstat o, + dba_hist_snapshot s +WHERE s.dbid = (SELECT dbid FROM v$database) + AND s.end_interval_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') - (2/24) AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND o.snap_id = s.snap_id + AND o.dbid = s.dbid + AND o.instance_number = s.instance_number + AND o.stat_name IN ('BUSY_TIME', 'IDLE_TIME', 'NUM_CPUS') +), +osstat_aggregated AS ( +SELECT end_interval_time, + SUM(CASE stat_name WHEN 'BUSY_TIME' THEN value ELSE 0 END) AS busy_time, + SUM(CASE stat_name WHEN 'IDLE_TIME' THEN value ELSE 0 END) AS idle_time, + SUM(CASE stat_name WHEN 'NUM_CPUS' THEN value ELSE 0 END) AS num_cpus + FROM osstat_filtered +WHERE value IS NOT NULL + AND end_interval_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +GROUP BY + end_interval_time +), +my_query AS ( +SELECT end_interval_time AS time, + -- 0.7 * num_cpus AS sev2, + -- 0.6 * num_cpus AS sev3, + -- 0.5 * num_cpus AS sev4, + 70 AS sev2, + 60 AS sev3, + 50 AS sev4, + 100 * busy_time / (busy_time + idle_time) AS cpu_util_perc + FROM osstat_aggregated +WHERE busy_time + idle_time > 0 +) +/****************************************************************************************/ +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.sev2)|| + ','||num_format(q.sev3)|| + ','||num_format(q.sev4)|| + ','||num_format(q.cpu_util_perc, 1)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Line'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_osstat_cpu_util_perc_now.sql b/csierra/cs_osstat_cpu_util_perc_now.sql new file mode 100644 index 0000000..306a021 --- /dev/null +++ b/csierra/cs_osstat_cpu_util_perc_now.sql @@ -0,0 +1,29 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_osstat_cpu_util_perc_now.sql +-- +-- Purpose: CPU Utilization Percent - Now +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/08/31 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_osstat_cpu_util_perc_now.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +SELECT ROUND(100 * os.busy_time / (os.busy_time + os.idle_time), 2) AS cpu_util_perc +FROM ( +SELECT NULLIF(GREATEST(busy_t2.value - busy_t1.value, 0), 0) AS busy_time, NULLIF(GREATEST(idle_t2.value - idle_t1.value, 0), 0) AS idle_time +FROM +(SELECT value FROM dba_hist_osstat WHERE stat_name = 'BUSY_TIME' ORDER BY snap_id DESC NULLS LAST FETCH FIRST 1 ROW ONLY) busy_t1, +(SELECT value FROM dba_hist_osstat WHERE stat_name = 'IDLE_TIME' ORDER BY snap_id DESC NULLS LAST FETCH FIRST 1 ROW ONLY) idle_t1, +(SELECT value FROM v$osstat WHERE stat_name = 'BUSY_TIME') busy_t2, +(SELECT value FROM v$osstat WHERE stat_name = 'IDLE_TIME') idle_t2 +) os +/ diff --git a/csierra/cs_past_days_to_epoch.sql b/csierra/cs_past_days_to_epoch.sql new file mode 100644 index 0000000..c8fe5f5 --- /dev/null +++ b/csierra/cs_past_days_to_epoch.sql @@ -0,0 +1,37 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_past_days_to_epoch.sql +-- +-- Purpose: Convert Past Days to Epoch +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/08/24 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_past_days_to_epoch.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET NUM 15; +DEF cs_datetime_full_format = 'YYYY-MM-DD"T"HH24:MI:SS'; +DEF cs_datetime_display_format = 'yyyy-mm-ddThh:mi:ss'; +PRO +PRO 1. Enter Past Days: [ex: 60] +DEF cs_past_days = '&1.'; +UNDEF 1; +-- +-- note: on 19c consider select dbms_stats.convert_raw_to_date(hextoraw('7877031203192A0C1988C0')) from dual; +-- +WITH +days AS ( +SELECT TRUNC(SYSDATE) - &&cs_past_days. - TO_DATE('1970-01-01T00:00:00', '&&cs_datetime_full_format.') AS cnt FROM DUAL +) +SELECT TO_CHAR(TRUNC(SYSDATE) - &&cs_past_days., '&&cs_datetime_full_format.') AS time, days.cnt * 24 * 3600 AS epoch_seconds, days.cnt * 24 * 3600 * 1000 AS epoch_milliseconds + FROM days +/ diff --git a/csierra/cs_pdbs.sql b/csierra/cs_pdbs.sql new file mode 100644 index 0000000..2c1f203 --- /dev/null +++ b/csierra/cs_pdbs.sql @@ -0,0 +1,2 @@ +-- cs_pdbs.sql +@@cs_pr.sql "SELECT * FROM C##IOD.dbc_pdb_meta_v ORDER BY 1" diff --git a/csierra/cs_pdbs_cost.sql b/csierra/cs_pdbs_cost.sql new file mode 100644 index 0000000..a4a0254 --- /dev/null +++ b/csierra/cs_pdbs_cost.sql @@ -0,0 +1,94 @@ +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +COL con_id FOR 990 HEA 'Con|ID'; +COL con_name FOR A30 HEA 'PDB Name'; +COL host_shape FOR A20 HEA 'Host Shape'; +COL running_sessions_limit FOR 990.000 HEA 'Running|Sessions|Limit'; +COL avg_running_sessions FOR 990.000 HEA 'Avg|Running|Sessions'; +COL cpu_allotted_util_perc FOR 990.0 HEA 'CPU|Allotted|Perc'; +COL avg_waiting_sessions FOR 9,990.000 HEA 'Avg|Waiting|Sessions'; +COL avail_headroom_sessions FOR 990.000 HEA 'Avail|Headroom|Sessions'; +COL iops FOR 990; +COL mbps FOR 990.0; +COL pdbs_count FOR 990 HEA 'PDBs|Count'; +COL pdb_share FOR 0.000 HEA 'PDB|Share'; +COL cpu_consumed_time FOR 9,990.000 HEA 'CPU|Consumed|Seconds'; +COL cpu_share FOR 0.000 HEA 'CPU|Share'; +COL io_requests FOR 999,990 HEA 'IO|Requests'; +COL io_req_share FOR 0.000 HEA 'IO Req|Share'; +COL io_megabytes FOR 9,999,990 HEA 'IO|MegaBytes'; +COL io_mb_share FOR 0.000 HEA 'IO MBs|Share'; +COL used_space_gb FOR 99,990.000 HEA 'Used Disk|Space GBs'; +COL space_share FOR 0.000 HEA 'Space|Share'; +COL greatest_share FOR 90.000 HEA 'Greatest|Share'; +COL cdb_share FOR 0.000 HEA 'CDB|Share'; +COL begin_time FOR A19 HEA 'Begin Time'; +COL end_time FOR A19 HEA 'End Time'; +COL seconds FOR 990 HEA 'Secs'; +-- +BREAK ON REPORT; +COMPUTE SUM OF running_sessions_limit avg_running_sessions avg_waiting_sessions avail_headroom_sessions iops mbps pdb_share cpu_consumed_time cpu_share io_requests io_req_share io_megabytes io_mb_share used_space_gb space_share greatest_share cdb_share ON REPORT; +-- +SELECT r.con_id, r.con_name, s.host_shape, + r.pdbs_count, r.pdb_share, + r.running_sessions_limit, r.avg_running_sessions, r.avg_waiting_sessions, r.avail_headroom_sessions, + r.cpu_allotted_util_perc, r.cpu_consumed_time, r.cpu_share, + r.iops, r.mbps, r.io_requests, r.io_req_share, r.io_megabytes, r.io_mb_share, + t.used_space_gb, t.space_share, + GREATEST(r.pdb_share, r.cpu_share, r.io_req_share, r.io_mb_share, t.space_share) AS greatest_share, + GREATEST(r.pdb_share, r.cpu_share, r.io_req_share, r.io_mb_share, t.space_share) / SUM(GREATEST(r.pdb_share, r.cpu_share, r.io_req_share, r.io_mb_share, t.space_share)) OVER() AS cdb_share, + r.begin_time, r.end_time, r.seconds + FROM + ( + SELECT + r.con_id, + c.name AS con_name, + MAX(r.running_sessions_limit) AS running_sessions_limit, + SUM(r.avg_running_sessions) AS avg_running_sessions, + NVL(ROUND(100 * SUM(r.avg_running_sessions) / NULLIF(MAX(r.running_sessions_limit), 0), 1), 0) AS cpu_allotted_util_perc, + SUM(r.avg_waiting_sessions) AS avg_waiting_sessions, + GREATEST(MAX(r.running_sessions_limit) - SUM(r.avg_running_sessions) - SUM(r.avg_waiting_sessions), 0) AS avail_headroom_sessions, + SUM(r.io_requests) / (r.end_time - r.begin_time) / 24 / 3600 AS iops, + SUM(r.io_megabytes) / (r.end_time - r.begin_time) / 24 / 3600 AS mbps, + COUNT(*) OVER() AS pdbs_count, + 1 / COUNT(*) OVER() AS pdb_share, + SUM(cpu_consumed_time) / 1000 AS cpu_consumed_time, + SUM(cpu_consumed_time) / SUM(SUM(cpu_consumed_time)) OVER() AS cpu_share, + SUM(io_requests) AS io_requests, + SUM(io_requests) / SUM(SUM(io_requests)) OVER() AS io_req_share, + SUM(io_megabytes) AS io_megabytes, + SUM(io_megabytes) / SUM(SUM(io_megabytes)) OVER() AS io_mb_share, + r.begin_time, r.end_time, (r.end_time - r.begin_time) * 24 * 3600 AS seconds + FROM v$rsrcmgrmetric r, v$containers c + WHERE r.con_id > 2 + AND c.con_id = r.con_id + GROUP BY + r.con_id, + c.name, + r.begin_time, + r.end_time + ) r, + ( + SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + t.con_id, + SUM(t.used_space * s.block_size) / POWER(10,9) AS used_space_gb, + SUM(t.used_space * s.block_size) / SUM(SUM(t.used_space * s.block_size)) OVER() AS space_share + FROM cdb_tablespace_usage_metrics t, cdb_tablespaces s + WHERE t.con_id > 2 + AND s.con_id = t.con_id + AND s.tablespace_name = t.tablespace_name + GROUP BY + t.con_id + ) t, + ( + SELECT s.host_shape + FROM C##IOD.dbc_system s + ORDER BY s.timestamp DESC + FETCH FIRST 1 ROW ONLY + ) s +WHERE t.con_id = r.con_id +ORDER BY r.con_id +/ +-- +CLEAR BREAK COMPUTE COLUMNS; diff --git a/csierra/cs_pdbs_cost_unpivot.sql b/csierra/cs_pdbs_cost_unpivot.sql new file mode 100644 index 0000000..2c8a6b8 --- /dev/null +++ b/csierra/cs_pdbs_cost_unpivot.sql @@ -0,0 +1,106 @@ +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +-- +COL metric_name FOR A40; +COL metric_dimensions FOR A80; +COL metric_value FOR 999,999,990.000000000; +-- +SELECT +'RsrcMgrMetric.'||metric_name AS metric_name, +',"con_name":"'||NVL(con_name, 'null')||'"'|| +',"host_shape":"'||NVL(host_shape, 'null')||'"' AS metric_dimensions +, ROUND(metric_value, 9) AS metric_value +FROM ( + SELECT r.con_name, s.host_shape, + r.running_sessions_limit AS "RunningSessionsLimit", + r.avg_running_sessions AS "AvgRunningSessions", + r.cpu_allotted_util_perc AS "CPUAllottedUtilPerc", + r.avg_waiting_sessions AS "AvgWaitingSessions", + r.avail_headroom_sessions AS "AvailHeadroomSessions", + r.iops AS "IOPS", + r.mbps AS "MBPS", + r.pdbs_count AS "PDBsCount", + r.pdb_share AS "PDBShare", + r.cpu_consumed_time AS "CPUConsumedTime", + r.cpu_share AS "CPUShare", + r.io_requests AS "IORequests", + r.io_req_share AS "IORequestsShare", + r.io_megabytes AS "IOMegabytes", + r.io_mb_share AS "IOMegabytesShare", + t.used_space_gb AS "UsedDiskSpaceGBs", + t.space_share AS "UsedDiskSpaceGBsShare", + GREATEST(r.pdb_share, r.cpu_share, r.io_req_share, r.io_mb_share, t.space_share) AS "GreatestShare", + GREATEST(r.pdb_share, r.cpu_share, r.io_req_share, r.io_mb_share, t.space_share) / SUM(GREATEST(r.pdb_share, r.cpu_share, r.io_req_share, r.io_mb_share, t.space_share)) OVER() AS "CDBShare", + -- r.begin_time, r.end_time, + r.seconds AS "Seconds" + FROM + ( + SELECT + r.con_id, + c.name AS con_name, + MAX(r.running_sessions_limit) AS running_sessions_limit, + SUM(r.avg_running_sessions) AS avg_running_sessions, + NVL(ROUND(100 * SUM(r.avg_running_sessions) / NULLIF(MAX(r.running_sessions_limit), 0), 1), 0) AS cpu_allotted_util_perc, + SUM(r.avg_waiting_sessions) AS avg_waiting_sessions, + GREATEST(MAX(r.running_sessions_limit) - SUM(r.avg_running_sessions) - SUM(r.avg_waiting_sessions), 0) AS avail_headroom_sessions, + SUM(r.io_requests) / (r.end_time - r.begin_time) / 24 / 3600 AS iops, + SUM(r.io_megabytes) / (r.end_time - r.begin_time) / 24 / 3600 AS mbps, + COUNT(*) OVER() AS pdbs_count, + 1 / COUNT(*) OVER() AS pdb_share, + SUM(cpu_consumed_time) / 1000 AS cpu_consumed_time, + SUM(cpu_consumed_time) / SUM(SUM(cpu_consumed_time)) OVER() AS cpu_share, + SUM(io_requests) AS io_requests, + SUM(io_requests) / SUM(SUM(io_requests)) OVER() AS io_req_share, + SUM(io_megabytes) AS io_megabytes, + SUM(io_megabytes) / SUM(SUM(io_megabytes)) OVER() AS io_mb_share, + r.begin_time, r.end_time, (r.end_time - r.begin_time) * 24 * 3600 AS seconds + FROM v$rsrcmgrmetric r, v$containers c + WHERE r.con_id > 2 + AND c.con_id = r.con_id + GROUP BY + r.con_id, + c.name, + r.begin_time, + r.end_time + ) r, + ( + SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + t.con_id, + SUM(t.used_space * s.block_size) / POWER(10,9) AS used_space_gb, + SUM(t.used_space * s.block_size) / SUM(SUM(t.used_space * s.block_size)) OVER() AS space_share + FROM cdb_tablespace_usage_metrics t, cdb_tablespaces s + WHERE t.con_id > 2 + AND s.con_id = t.con_id + AND s.tablespace_name = t.tablespace_name + GROUP BY + t.con_id + ) t, + ( + SELECT s.host_shape + FROM C##IOD.dbc_system s + ORDER BY s.timestamp DESC + FETCH FIRST 1 ROW ONLY + ) s + WHERE t.con_id = r.con_id +) UNPIVOT (metric_value FOR metric_name IN ( +"RunningSessionsLimit", +"AvgRunningSessions", +"CPUAllottedUtilPerc", +"AvgWaitingSessions", +"AvailHeadroomSessions", +"IOPS", +"MBPS", +"PDBsCount", +"PDBShare", +"CPUConsumedTime", +"CPUShare", +"IORequests", +"IORequestsShare", +"IOMegabytes", +"IOMegabytesShare", +"UsedDiskSpaceGBs", +"UsedDiskSpaceGBsShare", +"GreatestShare", +"CDBShare", +"Seconds" +)) +/ diff --git a/csierra/cs_pga_consumers.sql b/csierra/cs_pga_consumers.sql new file mode 100644 index 0000000..2695fec --- /dev/null +++ b/csierra/cs_pga_consumers.sql @@ -0,0 +1,94 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_pga_consumers.sql +-- +-- Purpose: PGA Consumption per Process +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/07/12 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_pga_consumers.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_pga_consumers'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL pga_max_mem FOR 999,999,999,990; +COL pga_used_mem FOR 999,999,999,990; +COL pga_alloc_mem FOR 999,999,999,990; +COL pga_freeable_mem FOR 999,999,999,990; +COL pga_tunable_mem FOR 999,999,999,990; +COL spid FOR A6; +COL pname FOR A5; +COL sid FOR 99990; +COL serial# FOR 9999990; +COL con_id FOR 999990; +COL pdb_name FOR A30 TRUNC; +COL tracefile FOR A128; +-- +BREAK ON REPORT; +COMPUTE SUM OF pga_max_mem pga_used_mem pga_alloc_mem pga_freeable_mem pga_tunable_mem ON REPORT; +-- +PRO +PRO PGA Consumption per Process +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH c AS (SELECT /*+ MATERIALIZE NO_MERGE */ con_id, name FROM v$containers WHERE ROWNUM >= 1) +SELECT p.pga_max_mem, + p.pga_alloc_mem, + p.pga_used_mem, + p.pga_freeable_mem, + s.pga_tunable_mem, + p.spid, + p.pname, + s.sid, + s.serial#, + s.type, + s.status, + s.sql_id, + s.prev_sql_id, + p.con_id, + c.name AS pdb_name, + p.tracefile + FROM v$process p, + v$session s, + c + WHERE &&cs_con_id. IN (1, p.con_id) + AND s.paddr(+) = p.addr + AND c.con_id(+) = p.con_id + ORDER BY + p.pga_max_mem DESC, + p.pga_alloc_mem DESC, + p.pga_used_mem DESC +/ +-- +CLEAR BREAK COMPUTE; +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_planh.sql b/csierra/cs_planh.sql new file mode 100644 index 0000000..8bb00e8 --- /dev/null +++ b/csierra/cs_planh.sql @@ -0,0 +1,64 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: ph.sql | cs_planh.sql +-- +-- Purpose: Execution Plans in AWR for a given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_planx.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_planh'; +DEF cs_script_acronym = 'ph.sql | '; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +DEF cs_plan_hash_value = ''; +@@cs_internal/cs_plans_awr_1.sql +-- +PRO +PRO 2. PLAN_HASH_VALUE (opt): +DEF cs_plan_hash_value = '&2.'; +UNDEF 2; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO PLAN_HASH_VAL: &&cs_plan_hash_value. +-- +@@cs_internal/cs_plans_awr_1.sql +@@cs_internal/cs_plans_awr_2.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_planm.sql b/csierra/cs_planm.sql new file mode 100644 index 0000000..dbbcbf8 --- /dev/null +++ b/csierra/cs_planm.sql @@ -0,0 +1,65 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: pm.sql | cs_planm.sql +-- +-- Purpose: Execution Plans in Memory for a given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_planx.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_planm'; +DEF cs_script_acronym = 'pm.sql | '; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +DEF cs_plan_hash_value = ''; +@@cs_internal/cs_plans_mem_1.sql +-- +PRO +PRO 2. PLAN_HASH_VALUE (opt): +DEF cs_plan_hash_value = '&2.'; +UNDEF 2; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO PLAN_HASH_VAL: &&cs_plan_hash_value. +-- +@@cs_internal/cs_plans_mem_0.sql +@@cs_internal/cs_plans_mem_1.sql +@@cs_internal/cs_plans_mem_2.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_planx.sql b/csierra/cs_planx.sql new file mode 100644 index 0000000..39469c2 --- /dev/null +++ b/csierra/cs_planx.sql @@ -0,0 +1,180 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: x.sql | cs_planx.sql +-- +-- Purpose: Execution Plans and SQL performance metrics for a given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/05/29 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_planx.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn2.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_planx'; +DEF cs_script_acronym = 'x.sql | '; +-- +DEF cs_sql_id_col = 'NOPRI'; +DEF cs_uncommon_col = 'NOPRI'; +DEF cs_delta_col = 'NOPRI'; +-- +DEF cs_binds_days = '1'; +DEF cs_sqlstat_days = '61'; +DEF cs_scope_1 = 'last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_sample_time_boundaries.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +DEF cs_filter_1 = 'sql_id = ''&&cs_sql_id.'''; +DEF cs_filter_2 = '1 = 1'; +DEF cs2_sql_text_piece = ''; +-- +@@cs_internal/cs_last_snap.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +DEF cs_scope_1 = 'last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_dba_hist_sqlstat_global.sql +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sqlstat_global.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +DEF cs_scope_1 = '- SCOPE CDB$ROOT'; +DEF cs_filter_1 = 'get_sql_hv(sql_text) = ''&&cs_sql_hv.'' AND sql_text LIKE SUBSTR(:cs_sql_text_1000, 1, 40)||''%'''; +DEF cs_sql_id_col = 'PRI'; +@@cs_internal/cs_gv_sql_global.sql +PRO +PRO 1. Include SQL matching SQL Hash Value (HV) on any PDB within CDB, even if SQL_ID (and Text) were different (e.g.: different KIEV bucket_id) +PRO +DEF cs_sql_id_col = 'NOPRI'; +DEF cs_filter_1 = 'sql_id = ''&&cs_sql_id.'''; +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sql_global.sql +@@cs_internal/cs_gv_sql_stability.sql +@@cs_internal/cs_cursors_not_shared.sql +-- +DEF cs_scope_1 = '- last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_dba_hist_sqlstat_daily.sql +-- +SPO OFF; +DEF cs_sqlstat_days = '14'; +DEF cs_scope_1 = '- last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_sample_time_boundaries.sql +@@cs_internal/cs_snap_id_from_and_to.sql +SPO &&cs_file_name..txt APP; +@@cs_internal/cs_dba_hist_sqlstat_hourly.sql +-- +SPO OFF; +DEF cs_sqlstat_days = '7'; +DEF cs_scope_1 = '- last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_sample_time_boundaries.sql +@@cs_internal/cs_snap_id_from_and_to.sql +SPO &&cs_file_name..txt APP; +@@cs_internal/cs_dba_hist_sqlstat_detailed.sql +-- +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/cs_sqlmon_hist_internal.sql +@@cs_internal/cs_sqlmon_mem_internal.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/cs_binds_xml.sql +@@cs_internal/cs_bind_capture_hist.sql +@@cs_internal/cs_bind_capture_mem.sql +@@cs_internal/cs_acs_internal.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/cs_plans_mem_0.sql +@@cs_internal/cs_plans_mem_1.sql +@@cs_internal/cs_plans_mem_2.sql +@@cs_internal/cs_plans_awr_1.sql +@@cs_internal/cs_plans_awr_2.sql +@@cs_internal/cs_spbl_internal_plan.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/cs_recent_sessions.sql +@@cs_internal/cs_active_sessions.sql +@@cs_internal/cs_load_per_machine.sql +@@cs_internal/cs_sql_ash.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/cs_spch_internal_list.sql +@@cs_internal/cs_sprf_internal_list.sql +@@cs_internal/cs_spbl_internal_list.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/&&zapper_19_actions_script. +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/&&oem_me_sqlperf_script. +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/cs_dependency_segments.sql +@@cs_internal/cs_dependency_tables.sql +@@cs_internal/cs_dependency_indexes.sql +@@cs_internal/cs_dependency_part_keys.sql +@@cs_internal/cs_dependency_index_columns.sql +@@cs_internal/cs_dependency_table_columns.sql +@@cs_internal/cs_dependency_lobs.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/cs_dependency_metadata.sql +@@cs_internal/cs_dependency_kievlive.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +DEF cs_num_rows_limit_display = '10B'; +DEF cs_num_rows_limit_number = '1e10'; +@@cs_internal/cs_top_primary_keys_table.sql +@@cs_internal/cs_top_keys_sql.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sql_global.sql +@@cs_internal/cs_gv_sql_stability.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +@@cs_internal/cs_cdb_warn2.sql +-- \ No newline at end of file diff --git a/csierra/cs_pr.sql b/csierra/cs_pr.sql new file mode 100644 index 0000000..41f6843 --- /dev/null +++ b/csierra/cs_pr.sql @@ -0,0 +1,159 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: pr.sql | cs_pr.sql +-- +-- Purpose: Print Table (vertical display of result columns for last query) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Parameter options: +-- +-- 1. null (assumes then last sql executed) +-- +-- 2. directory_path/script_name.sql (with one query) +-- +-- 3. one query +-- +-- Examples: 1. SQL> @cs_pr.sql "" +-- +-- 2. SQL> @cs_pr.sql "/tmp/carlos.sql" +-- +-- 3. SQL> @cs_pr.sql "SELECT * FROM v$database;" +-- +-- Notes: When passing a query which contains single quotes then double them +-- e.g. SQL> @cs_pr.sql "SELECT sid||'',''||serial# AS sid_serial FROM v$session" +-- +-- Last sql executed must end with "/" or with ";". When the latter, then +-- the ";" must immediately follow the last piece of the SQL text, and not be +-- on the next line by itself. First sample below is correct while second is not: +-- +-- SQL> SELECT * FROM DUAL; +-- +-- SQL> SELECT * FROM DUAL +-- SQL> ; +-- +-- Modified version of Tanel Poder pr.sql script, which is a mofified version +-- of Tom Kyte printtbl code. +-- +--------------------------------------------------------------------------------------- +-- +-- https://github.com/tanelpoder/tpt-oracle/blob/master/pr.sql +-- Notes: This script is based on Tom Kyte's original printtbl code ( http://asktom.oracle.com ) +-- For coding simplicity (read: lazyness) I'm using custom quotation marks ( q'\ ) so +-- this script works only from Oracle 10gR2 onwards +-- prompt Pivoting output using Tom Kyte's printtab.... +-- +SET TERM OFF; +-- stores last sql executed +SAVE "/tmp/cs_pr_last_executed.sql" REPLACE; +STORE SET "/tmp/cs_pr_set_config.sql" REPLACE; +-- +SET TERM ON HEA OFF TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON SERVEROUT ON SIZE UNL TRIM ON LIN 4050 BLO .; +-- +PRO +PRO 1. Enter [{null}|directory_path/script_name.sql|query]: +DEF cs_input_parameter = '&1.'; +UNDEF 1; +--SET TERM OFF; +-- +COL cs_option NEW_V cs_option NOPRI; +COL cs_parameter NEW_V cs_parameter NOPRI; +SELECT CASE + WHEN q'[&&cs_input_parameter.]' IS NULL THEN '1' -- null + WHEN LOWER(SUBSTR(q'[&&cs_input_parameter.]', -4, 4)) = '.sql' THEN '2' -- directory_path/script_name.sql + ELSE '3' -- query + END AS cs_option, + CASE + WHEN q'[&&cs_input_parameter.]' IS NULL THEN '/tmp/cs_pr_last_executed.sql' -- null + WHEN LOWER(SUBSTR(q'[&&cs_input_parameter.]', -4, 4)) = '.sql' THEN q'[&&cs_input_parameter.]' -- directory_path/script_name.sql + ELSE q'[&&cs_input_parameter.]' -- query + END AS cs_parameter + FROM DUAL +/ +-- stores inline query +SPOOL "/tmp/cs_pr_inline_query.sql"; +PRO &&cs_parameter. +SPOOL OFF; +-- +COL script_name NEW_V script_name NOPRI; +SELECT CASE '&&cs_option.' + WHEN '1' THEN '/tmp/cs_pr_last_executed.sql' -- null + WHEN '2' THEN q'[&&cs_parameter.]' -- directory_path/script_name.sql + WHEN '3' THEN '/tmp/cs_pr_inline_query.sql' -- query + END AS script_name + FROM DUAL +/ +-- +GET "&&script_name." LIST; +SAVE "/tmp/cs_pr_last_executed.sql" REPLACE; +-- +SET TERM ON; +PRO +PRO +PRO +--------------------------------+ +GET "&&script_name." LIST; +. +SET TERM OFF; +-- +0 c clob := q'\ +0 declare +-- +666666 \';; +666666 l_theCursor integer default dbms_sql.open_cursor;; +666666 l_columnValue varchar2(4000);; +666666 l_status integer;; +666666 l_descTbl dbms_sql.desc_tab;; +666666 l_colCnt number;; +666666 l_amount number;; +666666 begin +666666 IF DBMS_LOB.instr(c, ';') = 0 THEN +666666 l_amount := DBMS_LOB.getlength(c);; +666666 ELSE +666666 l_amount := DBMS_LOB.instr(c, ';') - 1;; +666666 END IF;; +666666 c := DBMS_LOB.substr(c, l_amount);; +666666 dbms_sql.parse( l_theCursor, c, dbms_sql.native );; +666666 dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl );; +666666 for i in 1 .. l_colCnt loop +666666 if l_descTbl(i).col_type not in (112, 113) then -- excludes blob and clob (see https://docs.oracle.com/cd/E11882_01/server.112/e41085/sqlqr06002.htm#SQLQR959) +666666 dbms_sql.define_column( l_theCursor, i, +666666 l_columnValue, 4000 );; +666666 end if;; +666666 end loop;; +666666 l_status := dbms_sql.execute(l_theCursor);; +666666 while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop +666666 dbms_output.put_line( '+--------------------------------+' );; +666666 for i in 1 .. l_colCnt loop +666666 if l_descTbl(i).col_type not in (112, 113) then -- excludes blob and clob (see https://docs.oracle.com/cd/E11882_01/server.112/e41085/sqlqr06002.htm#SQLQR959) +666666 dbms_sql.column_value( l_theCursor, i, +666666 l_columnValue );; +666666 dbms_output.put_line +666666 ( '|'||lpad( lower(l_descTbl(i).col_name), +666666 31 ) || ' : ' || l_columnValue );; +666666 end if;; +666666 end loop;; +666666 end loop;; +666666 dbms_output.put_line( '+--------------------------------+' );; +666666 exception +666666 when others then +666666 dbms_output.put_line(dbms_utility.format_error_backtrace);; +666666 raise;; +666666 end;; +SET TERM ON; +/ +-- +GET "&&script_name." LIST; +. +PRO +--------------------------------+ +PRO +PRO +@"/tmp/cs_pr_set_config.sql"; +HOST rm "/tmp/cs_pr_set_config.sql" "/tmp/cs_pr_last_executed.sql" "/tmp/cs_pr_inline_query.sql"; +SET TERM ON; +-- +-- from cs_ash_sample_detail.sql and cs_blocked_sessions_report.sql +UNDEF sid session sample_date_and_time \ No newline at end of file diff --git a/csierra/cs_purge_cursor.sql b/csierra/cs_purge_cursor.sql new file mode 100644 index 0000000..a5fce4e --- /dev/null +++ b/csierra/cs_purge_cursor.sql @@ -0,0 +1,56 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_purge_cursor.sql +-- +-- Purpose: Purge Cursor(s) for SQL_ID using DBMS_SHARED_POOL.PURGE and SQL Patch +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_purge_cursor.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_purge_cursor'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +-- +SET SERVEROUT ON; +@@cs_internal/cs_internal_purge_cursor "&&cs_sql_id." +SET SERVEROUT OFF; +-- +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_recyclebin.sql b/csierra/cs_recyclebin.sql new file mode 100644 index 0000000..3ca3771 --- /dev/null +++ b/csierra/cs_recyclebin.sql @@ -0,0 +1,128 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_recyclebin.sql +-- +-- Purpose: Recyclebin Content +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter if Oracle Maintained tables are included +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_recyclebin.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_recyclebin'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +COL owner FOR A30 TRUNC; +COL object_name FOR A30 TRUNC; +COL original_name FOR A30 TRUNC; +COL ts_name FOR A30 TRUNC; +COL partition_name FOR A30 TRUNC; +COL can_undrop FOR A6 HEA 'CAN|UNDROP'; +COL can_purge FOR A5 HEA 'CAN|PURGE'; +COL related FOR 999999999 HEA 'PARENT|OBJECT'; +COL base_object FOR 999999999 HEA 'BASE|OBJECT'; +COL purge_object FOR 999999999 HEA 'PURGE|OBJECT'; +COL gb FOR 999,990.000 HEA 'GB'; +COL pdb_name FOR A30 TRUNC; +COL objects FOR 999,990; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF gb objects ON REPORT; +-- +PRO +PRO CDB_RECYCLEBIN Details +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT + r.owner +, r.object_name +, r.original_name +, r.operation +, r.type +, r.ts_name +, r.createtime +, r.droptime +, r.dropscn +, r.partition_name +, r.can_undrop +, r.can_purge +, r.related +, r.base_object +, r.purge_object +, r.space * t.block_size / 1e9 AS gb +, c.name AS pdb_name + FROM cdb_recyclebin r, + cdb_tablespaces t, + v$containers c +WHERE t.con_id = r.con_id + AND t.tablespace_name = r.ts_name + AND c.con_id = r.con_id + AND c.open_mode = 'READ WRITE' + ORDER BY + 1, 2, 3, 4, 5, 6, 7, 8 +/ +PRO +PRO CDB_RECYCLEBIN Summary +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT + r.owner +, r.type +, r.ts_name +, r.can_undrop +, r.can_purge +, SUM(r.space) * t.block_size / 1e9 AS gb +, COUNT(*) AS objects +, c.name AS pdb_name + FROM cdb_recyclebin r, + cdb_tablespaces t, + v$containers c +WHERE t.con_id = r.con_id + AND t.tablespace_name = r.ts_name + AND c.con_id = r.con_id + AND c.open_mode = 'READ WRITE' +GROUP BY + r.owner +, r.type +, r.ts_name +, r.can_undrop +, r.can_purge +, t.block_size +, c.name + ORDER BY + 1, 2, 3, 4, 5 +/ +-- +CLEAR BREAK COMPUTE COLUMNS; +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_redef_remove_lob_dedup_on_pdb.sql b/csierra/cs_redef_remove_lob_dedup_on_pdb.sql new file mode 100644 index 0000000..d628c91 --- /dev/null +++ b/csierra/cs_redef_remove_lob_dedup_on_pdb.sql @@ -0,0 +1,74 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_redef_remove_lob_dedup_on_pdb.sql +-- +-- Purpose: Remove LOB Deduplication on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/06 +-- +-- Usage: Execute connected to PDB +-- +-- Enter PX degree when requested +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_redef_remove_lob_dedup_on_pdb.sql +-- +-- Notes: This operation requires a blackout. +-- Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_blackout.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_redef_remove_lob_dedup_on_pdb'; +-- +PRO +PRO 1. Degree of Parallelism: [{1}|2|4|8] +DEF pxdegree = '&1.'; +UNDEF 1; +COL p_pxdegree NEW_V p_pxdegree NOPRI; +SELECT CASE WHEN '&&pxdegree.' IN ('1','2','4','8') THEN '&&pxdegree.' ELSE '1' END AS p_pxdegree FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&p_pxdegree." +@@cs_internal/cs_spool_id.sql +-- +PRO PX_DEGREE : &&p_pxdegree. [{1}|2|4|8] +-- +COMMIT; +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO DEDUP REMOVAL +PRO ~~~~~~~~~~~~~ +SET SERVEROUT ON +ALTER SESSION SET DDL_LOCK_TIMEOUT = 10; +BEGIN + &&cs_tools_schema..IOD_SPACE.removededup ( + p_pdb_name => '&&cs_con_name.' + , p_pxdegree => &&p_pxdegree. + ); +END; +/ +SET SERVEROUT OFF; +-- +COMMIT; +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&p_pxdegree." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_redef_schema.sql b/csierra/cs_redef_schema.sql new file mode 100644 index 0000000..dbd4c8a --- /dev/null +++ b/csierra/cs_redef_schema.sql @@ -0,0 +1,151 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_redef_schema.sql +-- +-- Purpose: Schema Redefinition (by moving all objects into new Tablespace) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/10 +-- +-- Usage: Execute connected to PDB +-- +-- Enter schema name when requested, followed by other parameters +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_redef_schema.sql +-- +-- Notes: This operation requires a blackout. +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_blackout.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_redef_schema'; +-- +COL username FOR A30; +SELECT username + FROM dba_users + WHERE oracle_maintained = 'N' + AND common = 'NO' + ORDER BY + username +/ +PRO +PRO 1. Schema Owner: +DEF table_owner = '&1.'; +UNDEF 1; +COL p_owner NEW_V p_owner FOR A30 NOPRI; +SELECT username AS p_owner + FROM dba_users + WHERE oracle_maintained = 'N' + AND common = 'NO' + AND username = UPPER(TRIM('&&table_owner.')) + AND ROWNUM = 1 +/ +-- +COL tablespace_name FOR A30; +SELECT tablespace_name + FROM dba_tablespaces + WHERE contents = 'PERMANENT' + AND tablespace_name NOT IN ('SYSTEM', 'SYSAUX') + ORDER BY + tablespace_name +/ +PRO +PRO 2. Source Tablespace: +DEF tbsname = '&2.'; +UNDEF 2; +COL p_sourcetbs NEW_V p_sourcetbs FOR A30 NOPRI; +SELECT tablespace_name AS p_sourcetbs + FROM dba_tablespaces + WHERE contents = 'PERMANENT' + AND tablespace_name NOT IN ('SYSTEM', 'SYSAUX') + AND tablespace_name = UPPER(TRIM('&&tbsname.')) +/ +PRO +PRO 2. Target Tablespace: +DEF tbsname = '&3.'; +UNDEF 2; +COL p_newtbs NEW_V p_newtbs FOR A30 NOPRI; +SELECT tablespace_name AS p_newtbs + FROM dba_tablespaces + WHERE contents = 'PERMANENT' + AND tablespace_name NOT IN ('SYSTEM', 'SYSAUX') + AND tablespace_name = UPPER(TRIM('&&tbsname.')) +/ +PRO +PRO 3. Table OLTP Compression: [{FALSE}|TRUE] +DEF compression = '&4.'; +UNDEF 3; +COL p_compression NEW_V p_compression NOPRI; +SELECT CASE WHEN SUBSTR(UPPER(TRIM('&&compression.')),1,1) IN ('T', 'Y') THEN 'TRUE' ELSE 'FALSE' END AS p_compression FROM DUAL +/ +PRO +PRO 4. CLOB Compression and Deduplication: [{NO}|C|CD] NO:None, C:Compression, CD:Compression and Deduplication +DEF redeflob = '&5.'; +UNDEF 4; +COL p_lobcomp NEW_V p_lobcomp NOPRI; +COL p_lobdedup NEW_V p_lobdedup NOPRI; +COL p_redeflob NEW_V p_redeflob NOPRI; +SELECT CASE WHEN NVL(UPPER(TRIM('&&redeflob.')), 'NO') IN ('CD', 'C') THEN 'TRUE' ELSE 'FALSE' END AS p_lobcomp, + CASE WHEN NVL(UPPER(TRIM('&&redeflob.')), 'NO') = 'CD' THEN 'TRUE' ELSE 'FALSE' END AS p_lobdedup, + CASE WHEN UPPER(TRIM('&&redeflob.')) IN ('CD', 'C', 'NO') THEN UPPER(TRIM('&&redeflob.')) ELSE 'NO' END AS p_redeflob +FROM DUAL +/ +PRO +PRO 5. Degree of Parallelism: [{1}|2|4|8] +DEF pxdegree = '&6.'; +UNDEF 5; +COL p_pxdegree NEW_V p_pxdegree NOPRI; +SELECT CASE WHEN '&&pxdegree.' IN ('1','2','4','8') THEN '&&pxdegree.' ELSE '1' END AS p_pxdegree FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&p_owner.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_sourcetbs." "&&p_newtbs." "&&p_compression." "&&p_redeflob." "&&p_pxdegree." +@@cs_internal/cs_spool_id.sql +-- +PRO TABLE_OWNER : &&p_owner. +PRO TABLESPACE : &&p_newtbs. +PRO OLTP_COMPRES : &&p_compression. +PRO LOB_COMPRES : &&p_redeflob. [{NO}|C|CD] NO:None, C:Compression, CD:Compression and Deduplication +PRO PX_DEGREE : &&p_pxdegree. [{1}|2|4|8] +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO TABLE REDEFINITION +PRO ~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON +BEGIN + &&cs_tools_schema..IOD_SPACE.redefschemanewtbs ( + p_pdb_name => '&&cs_con_name.' + , p_owner => '&&p_owner.' + , p_pxdegree => &&p_pxdegree. + , p_sourcetbs => '&&p_sourcetbs.' + , p_newtbs => '&&p_newtbs.' + , p_compression => &&p_compression. + , p_lobcomp => &&p_lobcomp. + , p_lobdedup => &&p_lobdedup. + ); +END; +/ +SET SERVEROUT OFF; +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_sourcetbs." "&&p_newtbs." "&&p_compression." "&&p_redeflob." "&&p_pxdegree." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_redef_table.sql b/csierra/cs_redef_table.sql new file mode 100644 index 0000000..853f188 --- /dev/null +++ b/csierra/cs_redef_table.sql @@ -0,0 +1,213 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_redef_table.sql +-- +-- Purpose: Table Redefinition +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/10 +-- +-- Usage: Execute connected to PDB +-- +-- Enter table owner and name when requested, followed by other parameters +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_redef_table.sql +-- +-- Notes: This operation requires a blackout. +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_blackout.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_redef_table'; +-- +COL username FOR A30; +SELECT username + FROM dba_users + WHERE oracle_maintained = 'N' + AND common = 'NO' + ORDER BY + username +/ +PRO +PRO 1. Table Owner: +DEF table_owner = '&1.'; +UNDEF 1; +COL p_owner NEW_V p_owner FOR A30 NOPRI; +SELECT username AS p_owner + FROM dba_users + WHERE oracle_maintained = 'N' + AND common = 'NO' + AND username = UPPER(TRIM('&&table_owner.')) + AND ROWNUM = 1 +/ +-- +COL table_name FOR A30; +SELECT table_name, blocks + FROM dba_tables + WHERE owner = '&&p_owner.' + ORDER BY + table_name +/ +PRO +PRO 2. Table Name: +DEF table_name = '&2.'; +UNDEF 2; +COL p_table_name NEW_V p_table_name NOPRI; +SELECT table_name AS p_table_name + FROM dba_tables + WHERE owner = '&&p_owner.' + AND table_name = UPPER(TRIM('&&table_name.')) + AND ROWNUM = 1 +/ +-- +COL tablespace_name_d NEW_V tablespace_name_d NOPRI; +SELECT tablespace_name AS tablespace_name_d + FROM dba_segments + WHERE owner = '&&p_owner.' + AND segment_name = '&&p_table_name.' + AND segment_type LIKE 'TABLE%' + ORDER BY + segment_type +FETCH FIRST ROW ONLY +/ +-- +COL tablespace_name FOR A30; +SELECT tablespace_name + FROM dba_tablespaces + WHERE contents = 'PERMANENT' + AND tablespace_name NOT IN ('SYSTEM', 'SYSAUX') + ORDER BY + tablespace_name +/ +PRO +PRO 3. Target Tablespace: [{&&tablespace_name_d.}|] +DEF tbsname = '&3.'; +UNDEF 3; +COL p_newtbs NEW_V p_newtbs FOR A30 NOPRI; +SELECT tablespace_name AS p_newtbs + FROM dba_tablespaces + WHERE contents = 'PERMANENT' + AND tablespace_name NOT IN ('SYSTEM', 'SYSAUX') + AND tablespace_name = UPPER(TRIM(NVL('&&tbsname.', '&&tablespace_name_d.'))) +/ +PRO +PRO 4. Table OLTP Compression: [{FALSE}|TRUE] +DEF compression = '&4.'; +UNDEF 4; +COL p_compression NEW_V p_compression NOPRI; +SELECT CASE WHEN SUBSTR(UPPER(TRIM('&&compression.')),1,1) IN ('T', 'Y') THEN 'TRUE' ELSE 'FALSE' END AS p_compression FROM DUAL +/ +PRO +PRO 5. CLOB Compression and Deduplication: [{NO}|C|CD] NO:None, C:Compression, CD:Compression and Deduplication +DEF redeflob = '&5.'; +UNDEF 5; +COL api_name NEW_V api_name NOPRI; +COL p_redeflob NEW_V p_redeflob NOPRI; +SELECT CASE UPPER(TRIM('&&redeflob.')) WHEN 'C' THEN 'REDEFLOBC' WHEN 'CD' THEN 'REDEFLOBCD' WHEN 'NO' THEN 'REDEFNOLOBCD' ELSE 'REDEFNOLOBCD' END AS api_name, + CASE WHEN UPPER(TRIM('&&redeflob.')) IN ('C', 'CD', 'NO') THEN UPPER(TRIM('&&redeflob.')) ELSE 'NO' END AS p_redeflob +FROM DUAL +/ +PRO +PRO 6. Degree of Parallelism: [{1}|2|4|8] +DEF pxdegree = '&6.'; +UNDEF 6; +COL p_pxdegree NEW_V p_pxdegree NOPRI; +SELECT CASE WHEN '&&pxdegree.' IN ('1','2','4','8') THEN '&&pxdegree.' ELSE '1' END AS p_pxdegree FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&p_owner..&&p_table_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_table_name." "&&p_newtbs." "&&p_compression." "&&p_redeflob." "&&p_pxdegree." +@@cs_internal/cs_spool_id.sql +-- +PRO TABLE_OWNER : &&p_owner. +PRO TABLE_NAME : &&p_table_name. +PRO TABLESPACE : &&p_newtbs. [{&&tablespace_name_d.}|] +PRO OLTP_COMPRES : &&p_compression. [{FALSE}|TRUE] +PRO LOB_COMPRES : &&p_redeflob. [{NO}|C|CD] NO:None, C:Compression, CD:Compression and Deduplication +PRO PX_DEGREE : &&p_pxdegree. [{1}|2|4|8] +-- +DEF specific_owner = '&&p_owner.'; +DEF specific_table = '&&p_table_name.'; +DEF order_by = 't.owner, t.table_name'; +DEF fetch_first_N_rows = '1'; +DEF total_MB = ''; +DEF table_MB = ''; +DEF indexes_MB = ''; +DEF lobs_MB = ''; +-- +PRO +PRO BEFORE +PRO ~~~~~~ +@@cs_internal/cs_tables_internal.sql +DEF total_MB_b = "&&total_MB."; +DEF table_MB_b = "&&table_MB."; +DEF indexes_MB_b = "&&indexes_MB."; +DEF lobs_MB_b = "&&lobs_MB."; +@@cs_internal/cs_lobs_internal.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO TABLE REDEFINITION +PRO ~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON +ALTER SESSION SET DDL_LOCK_TIMEOUT = 10; +BEGIN + &&cs_tools_schema..IOD_SPACE.&&api_name.( + p_pdb_name => '&&cs_con_name.' + , p_owner => '&&p_owner.' + , p_table_name => '&&p_table_name.' + , p_pxdegree => &&p_pxdegree. + , p_newtbs => '&&p_newtbs.' + , p_compression => &&p_compression. + ); +END; +/ +SET SERVEROUT OFF; +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO AFTER +PRO ~~~~~ +@@cs_internal/cs_tables_internal.sql +DEF total_MB_a = "&&total_MB."; +DEF table_MB_a = "&&table_MB."; +DEF indexes_MB_a = "&&indexes_MB."; +DEF lobs_MB_a = "&&lobs_MB."; +@@cs_internal/cs_lobs_internal.sql +-- +COL type FOR A10 HEA 'OBJECT'; +COL MB_before FOR 99,999,990.0; +COL MB_after FOR 99,999,990.0; +COL MB_saved FOR 99,999,990.0; +PRO +PRO TABLE REDEFINITION EFFICIENCY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT 'Table:' AS type, TO_NUMBER('&&table_MB_b.') AS MB_before, TO_NUMBER('&&table_MB_a.') AS MB_after, TO_NUMBER('&&table_MB_b.') - TO_NUMBER('&&table_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Index(es):' AS type, TO_NUMBER('&&indexes_MB_b.') AS MB_before, TO_NUMBER('&&indexes_MB_a.') AS MB_after, TO_NUMBER('&&indexes_MB_b.') - TO_NUMBER('&&indexes_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Lob(s):' AS type, TO_NUMBER('&&lobs_MB_b.') AS MB_before, TO_NUMBER('&&lobs_MB_a.') AS MB_after, TO_NUMBER('&&lobs_MB_b.') - TO_NUMBER('&&lobs_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Total:' AS type, TO_NUMBER('&&total_MB_b.') AS MB_before, TO_NUMBER('&&total_MB_a.') AS MB_after, TO_NUMBER('&&total_MB_b.') - TO_NUMBER('&&total_MB_a.') AS MB_saved FROM DUAL +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_table_name." "&&p_newtbs." "&&p_compression." "&&p_redeflob." "&&p_pxdegree." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_redef_table_OLD.sql b/csierra/cs_redef_table_OLD.sql new file mode 100644 index 0000000..4541bdf --- /dev/null +++ b/csierra/cs_redef_table_OLD.sql @@ -0,0 +1,205 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_redef_table.sql +-- +-- Purpose: Table Redefinition +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/15 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter table name and owner when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_redef_table.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_blackout.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_redef_table'; +-- +DEF total_MB = ''; +DEF table_MB = ''; +DEF indexes_MB = ''; +DEF lobs_MB = ''; +-- +PRO +PRO 1. Table Name: +DEF table_name = '&1.'; +UNDEF 1; +COL p_table_name NEW_V p_table_name NOPRI; +SELECT table_name AS p_table_name + FROM dba_tables + WHERE table_name = UPPER(TRIM('&&table_name.')) + AND ROWNUM = 1 +/ +-- +COL owner NEW_V owner FOR A30 HEA 'TABLE_OWNER'; +SELECT t.owner + FROM dba_tables t + WHERE t.table_name = '&&p_table_name.' + ORDER BY 1 +/ +PRO +PRO 2. Table Owner: +DEF p_table_owner = '&2.'; +UNDEF 2; +COL p_table_owner NEW_V p_table_owner FOR A30; +SELECT owner AS p_table_owner + FROM dba_tables + WHERE table_name = '&&p_table_name.' + AND owner = UPPER(TRIM(COALESCE('&&p_table_owner.', '&&owner.'))) + AND ROWNUM = 1 +/ +COL p_tablespace_name NEW_V p_tablespace_name FOR A30 NOPRI; +SELECT tablespace_name AS p_tablespace_name + FROM dba_tables + WHERE owner = '&&p_table_owner.' + AND table_name = '&&p_table_name.' +/ +-- +PRO 3. Degree of Parallelism: [{1}|0,1,2,4] +DEF p_dop = '&3.'; +UNDEF 3; +COL p_dop NEW_V p_dop NOPRI; +SELECT CASE WHEN '&&p_dop.' IN ('0','1','2','4') THEN '&&p_dop.' ELSE '1' END AS p_dop FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&p_table_owner..&&p_table_name.' cs_file_name FROM DUAL; +DEF cs_file_name_p = "&&cs_file_name."; +DEF cs_script_name_p = "&&cs_script_name."; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&p_table_name." "&&p_table_owner." +@@cs_internal/cs_spool_id.sql +-- +PRO TABLE_OWNER : &&p_table_owner. +PRO TABLE_NAME : &&p_table_name. +PRO TABLESPACE : &&p_tablespace_name. +-- +SPO OFF; +@@cs_table.sql "&&p_table_owner." "&&p_table_name." +SET TIMI OFF ECHO OFF VER OFF FEED OFF; +DEF total_MB_b = "&&total_MB."; +DEF table_MB_b = "&&table_MB."; +DEF indexes_MB_b = "&&indexes_MB."; +DEF lobs_MB_b = "&&lobs_MB."; +DEF scp_b = "scp &&cs_host_name.:&&cs_file_prefix._&&cs_script_name.*.txt &&cs_local_dir." +-- +SPO &&cs_file_name_p..txt APP +PRO +PRO DBMS_REDEFINITION.REDEF_TABLE +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- +BEGIN + -- SPEED UP INDEX CREATION and REDEF + EXECUTE IMMEDIATE 'ALTER SESSION SET WORKAREA_SIZE_POLICY=MANUAL'; + EXECUTE IMMEDIATE 'ALTER SESSION SET HASH_AREA_SIZE=2100000000'; + EXECUTE IMMEDIATE 'ALTER SESSION SET SORT_AREA_SIZE=2100000000'; + IF '&&p_dop.' NOT IN ('0', '1') THEN + EXECUTE IMMEDIATE 'ALTER SESSION SET PARALLEL_DEGREE_POLICY=auto'; + EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DDL PARALLEL &&p_dop.'; + EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DML PARALLEL &&p_dop.'; + EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL QUERY PARALLEL &&p_dop.'; + END IF; +END; +/ +ALTER SESSION SET DDL_LOCK_TIMEOUT = 10; +ALTER SESSION SET "_kdlxp_lobcompress" = TRUE; +ALTER SESSION SET "_kdlxp_lobcmplevel" = 2; +ALTER SESSION SET "_kdlxp_lobdeduplicate" = FALSE; +-- +prompt +prompt ########################################################################################################################## +prompt NOTE: CAN_REDEF_TABLE call will fail on table without PK when using default options_flag=> dbms_redefinition.cons_use_pk, +prompt but CAN_REDEF_TABLE should succeed with options_flag=> dbms_redefinition.cons_use_rowid +prompt #################################################################################################### +prompt +-- +SET TIMI ON ECHO ON VER ON FEED ON; +WHENEVER SQLERROR CONTINUE; +ALTER SESSION SET ddl_lock_timeout = 30; +EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(uname=>'&&p_table_owner.', tname=>'&&p_table_name.', options_flag=> dbms_redefinition.cons_use_pk); +EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(uname=>'&&p_table_owner.', tname=>'&&p_table_name.', options_flag=> dbms_redefinition.cons_use_rowid); +WHENEVER SQLERROR EXIT FAILURE; +EXEC DBMS_REDEFINITION.REDEF_TABLE(uname=>'&&p_table_owner.', tname=>'&&p_table_name.', table_part_tablespace=>'&&p_tablespace_name.', lob_compression_type=>'COMPRESS MEDIUM'); +WHENEVER SQLERROR CONTINUE; +-- +SET TIMI OFF ECHO OFF VER OFF FEED OFF; +-- +-- Disable PX +BEGIN + -- SPEED UP INDEX CREATION and REDEF + EXECUTE IMMEDIATE 'ALTER SESSION SET WORKAREA_SIZE_POLICY=AUTO'; + IF '&&p_dop.' NOT IN ('0', '1') THEN + EXECUTE IMMEDIATE 'ALTER SESSION SET PARALLEL_DEGREE_POLICY=manual'; + EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DDL'; + EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML'; + EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL QUERY'; + END IF; +END; +/ +-- +-- Remove DOP on Table and Indexes +BEGIN + IF '&&p_dop.' NOT IN ('0', '1') THEN + EXECUTE IMMEDIATE 'ALTER TABLE &&p_table_owner..&&p_table_name. NOPARALLEL'; + FOR i IN (SELECT owner, index_name FROM dba_indexes WHERE table_owner = '&&p_table_owner.' AND table_name = '&&p_table_name.' AND index_type <> 'LOB') + LOOP + EXECUTE IMMEDIATE 'ALTER INDEX '||i.owner||'.'||i.index_name||' NOPARALLEL'; + END LOOP; + END IF; +END; +/ +-- +SPO OFF; +@@cs_table.sql "&&p_table_owner." "&&p_table_name." +SET TIMI OFF ECHO OFF VER OFF FEED OFF; +DEF total_MB_a = "&&total_MB."; +DEF table_MB_a = "&&table_MB."; +DEF indexes_MB_a = "&&indexes_MB."; +DEF lobs_MB_a = "&&lobs_MB."; +DEF scp_a = "scp &&cs_host_name.:&&cs_file_prefix._&&cs_script_name.*.txt &&cs_local_dir." +-- +COL type FOR A10 HEA 'OBJECT'; +COL MB_before FOR 99,999,990.0; +COL MB_after FOR 99,999,990.0; +COL MB_saved FOR 99,999,990.0; +SPO &&cs_file_name_p..txt APP +PRO +PRO TABLE_OWNER : &&p_table_owner. +PRO TABLE_NAME : &&p_table_name. +PRO TABLESPACE : &&p_tablespace_name. +PRO +PRO REDEF_TABLE RESULTS +PRO ~~~~~~~~~~~~~~~~~~~ +SELECT 'Table:' AS type, TO_NUMBER('&&table_MB_b.') AS MB_before, TO_NUMBER('&&table_MB_a.') AS MB_after, TO_NUMBER('&&table_MB_b.') - TO_NUMBER('&&table_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Index(es):' AS type, TO_NUMBER('&&indexes_MB_b.') AS MB_before, TO_NUMBER('&&indexes_MB_a.') AS MB_after, TO_NUMBER('&&indexes_MB_b.') - TO_NUMBER('&&indexes_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Lob(s):' AS type, TO_NUMBER('&&lobs_MB_b.') AS MB_before, TO_NUMBER('&&lobs_MB_a.') AS MB_after, TO_NUMBER('&&lobs_MB_b.') - TO_NUMBER('&&lobs_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Total:' AS type, TO_NUMBER('&&total_MB_b.') AS MB_before, TO_NUMBER('&&total_MB_a.') AS MB_after, TO_NUMBER('&&total_MB_b.') - TO_NUMBER('&&total_MB_a.') AS MB_saved FROM DUAL +/ +PRO +PRO SQL> @&&cs_script_name_p..sql "&&p_table_name." "&&p_table_owner." "&&p_dop." +-- +DEF cs_script_name = "&&cs_script_name_p."; +@@cs_internal/cs_spool_tail.sql +PRO +PRO If you want before and after details on &&p_table_name. table, index(es) and lob(s): +PRO &&scp_b. +PRO &&scp_a. +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_redef_table_no_dedup_OLD.sql b/csierra/cs_redef_table_no_dedup_OLD.sql new file mode 100644 index 0000000..bef723e --- /dev/null +++ b/csierra/cs_redef_table_no_dedup_OLD.sql @@ -0,0 +1,248 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_redef_table_no_dedup.sql +-- +-- Purpose: Table Redefinition removing LOB deduplication +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/15 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter table name and owner when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_redef_table_no_dedup.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_blackout.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_redef_table_no_dedup'; +-- +DEF total_MB = ''; +DEF table_MB = ''; +DEF indexes_MB = ''; +DEF lobs_MB = ''; +-- +PRO +PRO 1. Table Name: +DEF table_name = '&1.'; +UNDEF 1; +COL p_table_name NEW_V p_table_name NOPRI; +SELECT table_name AS p_table_name + FROM dba_tables + WHERE table_name = UPPER(TRIM('&&table_name.')) + AND ROWNUM = 1 +/ +-- +COL owner NEW_V owner FOR A30 HEA 'TABLE_OWNER'; +SELECT t.owner + FROM dba_tables t + WHERE t.table_name = '&&p_table_name.' + ORDER BY 1 +/ +PRO +PRO 2. Table Owner: +DEF p_table_owner = '&2.'; +UNDEF 2; +COL p_table_owner NEW_V p_table_owner FOR A30; +SELECT owner AS p_table_owner + FROM dba_tables + WHERE table_name = '&&p_table_name.' + AND owner = UPPER(TRIM(COALESCE('&&p_table_owner.', '&&owner.'))) + AND ROWNUM = 1 +/ +COL p_tablespace_name NEW_V p_tablespace_name FOR A30 NOPRI; +SELECT tablespace_name AS p_tablespace_name + FROM dba_tables + WHERE owner = '&&p_table_owner.' + AND table_name = '&&p_table_name.' +/ +-- +PRO 3. Degree of Parallelism: [{1}|0,1,2,4] +DEF p_dop = '&3.'; +UNDEF 3; +COL p_dop NEW_V p_dop NOPRI; +SELECT CASE WHEN '&&p_dop.' IN ('0','1','2','4') THEN '&&p_dop.' ELSE '1' END AS p_dop FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&p_table_owner..&&p_table_name.' cs_file_name FROM DUAL; +DEF cs_file_name_p = "&&cs_file_name."; +DEF cs_script_name_p = "&&cs_script_name."; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&p_table_name." "&&p_table_owner." +@@cs_internal/cs_spool_id.sql +-- +PRO TABLE_OWNER : &&p_table_owner. +PRO TABLE_NAME : &&p_table_name. +PRO TABLESPACE : &&p_tablespace_name. +-- +SPO OFF; +@@cs_table.sql "&&p_table_owner." "&&p_table_name." +SET TIMI OFF ECHO OFF VER OFF FEED OFF; +DEF total_MB_b = "&&total_MB."; +DEF table_MB_b = "&&table_MB."; +DEF indexes_MB_b = "&&indexes_MB."; +DEF lobs_MB_b = "&&lobs_MB."; +DEF scp_b = "scp &&cs_host_name.:&&cs_file_prefix._&&cs_script_name.*.txt &&cs_local_dir." +-- +SPO &&cs_file_name_p..txt APP +PRO +PRO DBMS_REDEFINITION.REDEF_TABLE +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SET TIMI ON ECHO ON VER ON FEED ON; +-- +ALTER SESSION SET DDL_LOCK_TIMEOUT = 10; +ALTER SESSION SET "_kdlxp_lobcompress" = TRUE; +ALTER SESSION SET "_kdlxp_lobcmplevel" = 2; +ALTER SESSION SET "_kdlxp_lobdeduplicate" = FALSE; +-- +COL deduplication_count NEW_V deduplication_count NOPRI; +SELECT COUNT(*) AS deduplication_count FROM dba_lobs WHERE owner = '&&p_table_owner.' AND table_name = '&&p_table_name.' AND deduplication = 'LOB'; +COL table_name_redef NEW_V table_name_redef NOPRI; +SELECT SUBSTR('&&p_table_name.', 1, 24)||'_R3D3F' AS table_name_redef FROM DUAL; +COL table_name_backup NEW_V table_name_backup NOPRI; +SELECT SUBSTR('&&p_table_name.', 1, 24)||'_BAKUP' AS table_name_backup FROM DUAL; +-- +BEGIN + -- SPEED UP INDEX CREATION and REDEF + EXECUTE IMMEDIATE 'ALTER SESSION SET WORKAREA_SIZE_POLICY=MANUAL'; + EXECUTE IMMEDIATE 'ALTER SESSION SET HASH_AREA_SIZE=2100000000'; + EXECUTE IMMEDIATE 'ALTER SESSION SET SORT_AREA_SIZE=2100000000'; + IF '&&p_dop.' NOT IN ('0', '1') THEN + EXECUTE IMMEDIATE 'ALTER SESSION SET PARALLEL_DEGREE_POLICY=auto'; + EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DDL PARALLEL &&p_dop.'; + EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DML PARALLEL &&p_dop.'; + EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL QUERY PARALLEL &&p_dop.'; + END IF; +END; +/ +-- +SET SERVEROUT ON; +WHENEVER SQLERROR EXIT FAILURE; +ALTER SESSION SET ddl_lock_timeout = 30; +DECLARE + l_num_errors PLS_INTEGER; +BEGIN + DBMS_REDEFINITION.CAN_REDEF_TABLE(uname=>'&&p_table_owner.', tname=>'&&p_table_name.'); + IF &&deduplication_count. = 0 THEN + DBMS_REDEFINITION.REDEF_TABLE(uname=>'&&p_table_owner.', tname=>'&&p_table_name.', table_part_tablespace=>'&&p_tablespace_name.', lob_compression_type=>'COMPRESS MEDIUM'); + ELSE + -- Create new table + EXECUTE IMMEDIATE 'CREATE TABLE &&p_table_owner..&&table_name_redef. AS SELECT * FROM &&p_table_owner..&&p_table_name. WHERE 1 = 2'; + -- change the not null columns + FOR i IN (SELECT column_name FROM dba_tab_columns WHERE owner = '&&p_table_owner.' AND table_name = '&&table_name_redef.' AND nullable = 'N') + LOOP + EXECUTE IMMEDIATE 'ALTER TABLE &&p_table_owner..&&table_name_redef. MODIFY '||i.column_name||' NULL'; + END LOOP; + -- Backup old table + EXECUTE IMMEDIATE 'CREATE TABLE &&p_table_owner..&&table_name_backup. AS SELECT * FROM &&p_table_owner..&&p_table_name. WHERE 1 = 2'; + EXECUTE IMMEDIATE 'INSERT /*+ APPEND PARALLEL(&&p_dop.) */ INTO &&p_table_owner..&&table_name_backup. SELECT /*+ PARALLEL(&&p_dop.) */ * FROM &&p_table_owner..&&p_table_name.'; + -- Start Redefinition + DBMS_REDEFINITION.start_redef_table(uname=>'&&p_table_owner.', orig_table=>'&&p_table_name.', int_table=>'&&table_name_redef.'); + -- Optionally synchronize new table with interim data before index creation + DBMS_REDEFINITION.sync_interim_table(uname=>'&&p_table_owner.', orig_table=>'&&p_table_name.', int_table=>'&&table_name_redef.'); + -- Copy dependents. + DBMS_REDEFINITION.copy_table_dependents( + uname => '&&p_table_owner.', + orig_table => '&&p_table_name.', + int_table => '&&table_name_redef.', + copy_indexes => 1, -- Default + copy_triggers => FALSE, -- Default + copy_constraints => TRUE, -- Default + copy_privileges => TRUE, -- Default + ignore_errors => FALSE, -- Default + num_errors => l_num_errors, + copy_statistics => TRUE, -- Default + copy_mvlog => FALSE -- Default + ); + DBMS_OUTPUT.put_line('num_errors=' || l_num_errors); + -- Complete redefinition + DBMS_REDEFINITION.finish_redef_table(uname=>'&&p_table_owner.', orig_table=>'&&p_table_name.', int_table=>'&&table_name_redef.', dml_lock_timeout=>30); + END IF; +END; +/ +WHENEVER SQLERROR CONTINUE; +SET SERVEROUT OFF; +-- +-- Disable PX +BEGIN + -- SPEED UP INDEX CREATION and REDEF + EXECUTE IMMEDIATE 'ALTER SESSION SET WORKAREA_SIZE_POLICY=AUTO'; + IF '&&p_dop.' NOT IN ('0', '1') THEN + EXECUTE IMMEDIATE 'ALTER SESSION SET PARALLEL_DEGREE_POLICY=manual'; + EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DDL'; + EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML'; + EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL QUERY'; + END IF; +END; +/ +-- +-- Remove DOP on Table and Indexes +BEGIN + IF '&&p_dop.' NOT IN ('0', '1') THEN + EXECUTE IMMEDIATE 'ALTER TABLE &&p_table_owner..&&p_table_name. NOPARALLEL'; + FOR i IN (SELECT owner, index_name FROM dba_indexes WHERE table_owner = '&&p_table_owner.' AND table_name = '&&p_table_name.' AND index_type <> 'LOB') + LOOP + EXECUTE IMMEDIATE 'ALTER INDEX '||i.owner||'.'||i.index_name||' NOPARALLEL'; + END LOOP; + END IF; +END; +/ +-- +SET TIMI OFF ECHO OFF VER OFF FEED OFF; +-- +SPO OFF; +@@cs_table.sql "&&p_table_owner." "&&p_table_name." +SET TIMI OFF ECHO OFF VER OFF FEED OFF; +DEF total_MB_a = "&&total_MB."; +DEF table_MB_a = "&&table_MB."; +DEF indexes_MB_a = "&&indexes_MB."; +DEF lobs_MB_a = "&&lobs_MB."; +DEF scp_a = "scp &&cs_host_name.:&&cs_file_prefix._&&cs_script_name.*.txt &&cs_local_dir." +-- +COL type FOR A10 HEA 'OBJECT'; +COL MB_before FOR 99,999,990.0; +COL MB_after FOR 99,999,990.0; +COL MB_saved FOR 99,999,990.0; +SPO &&cs_file_name_p..txt APP +PRO +PRO TABLE_OWNER : &&p_table_owner. +PRO TABLE_NAME : &&p_table_name. +PRO TABLESPACE : &&p_tablespace_name. +PRO +PRO REDEF_TABLE RESULTS +PRO ~~~~~~~~~~~~~~~~~~~ +SELECT 'Table:' AS type, TO_NUMBER('&&table_MB_b.') AS MB_before, TO_NUMBER('&&table_MB_a.') AS MB_after, TO_NUMBER('&&table_MB_b.') - TO_NUMBER('&&table_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Index(es):' AS type, TO_NUMBER('&&indexes_MB_b.') AS MB_before, TO_NUMBER('&&indexes_MB_a.') AS MB_after, TO_NUMBER('&&indexes_MB_b.') - TO_NUMBER('&&indexes_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Lob(s):' AS type, TO_NUMBER('&&lobs_MB_b.') AS MB_before, TO_NUMBER('&&lobs_MB_a.') AS MB_after, TO_NUMBER('&&lobs_MB_b.') - TO_NUMBER('&&lobs_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Total:' AS type, TO_NUMBER('&&total_MB_b.') AS MB_before, TO_NUMBER('&&total_MB_a.') AS MB_after, TO_NUMBER('&&total_MB_b.') - TO_NUMBER('&&total_MB_a.') AS MB_saved FROM DUAL +/ +PRO +PRO SQL> @&&cs_script_name_p..sql "&&p_table_name." "&&p_table_owner." "&&p_dop." +-- +DEF cs_script_name = "&&cs_script_name_p."; +@@cs_internal/cs_spool_tail.sql +PRO +PRO If you want before and after details on &&p_table_name. table, index(es) and lob(s): +PRO &&scp_b. +PRO &&scp_a. +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- +PRO Manually remove original table, which now has the name of the new table; and also backup table +PRO DROP TABLE &&p_table_owner..&&table_name_redef. PURGE;; +PRO DROP TABLE &&p_table_owner..&&table_name_backup. PURGE;; diff --git a/csierra/cs_redef_table_silent.sql b/csierra/cs_redef_table_silent.sql new file mode 100644 index 0000000..b301683 --- /dev/null +++ b/csierra/cs_redef_table_silent.sql @@ -0,0 +1,167 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_redef_table_silent.sql +-- +-- Purpose: Table Redefinition - Silent +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/10 +-- +-- Usage: Execute connected to PDB +-- +-- Enter: table owner, table name, and ticket number (e.g.: CHANGE-123456) +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_redef_table_silent.sql +-- +-- Notes: This operation requires a blackout. +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +DEF cs_reference = 'cs_redef_table_silent.sql'; +DEF p_compression = 'FALSE'; +DEF api_name = 'REDEFLOBC'; +DEF p_redeflob = 'NO'; +DEF p_pxdegree = '1'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_blackout.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_redef_table_silent'; +-- +PRO +PRO 1. Table Owner: +DEF table_owner = '&1.'; +UNDEF 1; +COL p_owner NEW_V p_owner FOR A30 NOPRI; +SELECT username AS p_owner + FROM dba_users + WHERE oracle_maintained = 'N' + AND common = 'NO' + AND username = UPPER(TRIM('&&table_owner.')) + AND ROWNUM = 1 +/ +-- +PRO +PRO 2. Table Name: +DEF table_name = '&2.'; +UNDEF 2; +COL p_table_name NEW_V p_table_name NOPRI; +SELECT table_name AS p_table_name + FROM dba_tables + WHERE owner = '&&p_owner.' + AND table_name = UPPER(TRIM('&&table_name.')) + AND ROWNUM = 1 +/ +-- +COL p_newtbs NEW_V p_newtbs NOPRI; +SELECT tablespace_name AS p_newtbs + FROM dba_segments + WHERE owner = '&&p_owner.' + AND segment_name = '&&p_table_name.' + AND segment_type LIKE 'TABLE%' + ORDER BY + segment_type +FETCH FIRST ROW ONLY +/ +-- +PRO +PRO 3. Ticket: (e.g: CHANGE-123456) +SELECT NVL(UPPER(TRIM('&3.')), '&&cs_reference.') AS cs_reference FROM DUAL +/ +UNDEF 3; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&p_owner..&&p_table_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_table_name." "&&cs_reference." +@@cs_internal/cs_spool_id.sql +-- +PRO TABLE_OWNER : &&p_owner. +PRO TABLE_NAME : &&p_table_name. +PRO TICKET : &&cs_reference. +PRO TABLESPACE : &&p_newtbs. +PRO OLTP_COMPRES : &&p_compression. [{FALSE}|TRUE] +PRO LOB_COMPRES : &&p_redeflob. [{NO}|C|CD] NO:None, C:Compression, CD:Compression and Deduplication +PRO PX_DEGREE : &&p_pxdegree. [{1}|2|4|8] +-- +DEF specific_owner = '&&p_owner.'; +DEF specific_table = '&&p_table_name.'; +DEF order_by = 't.owner, t.table_name'; +DEF fetch_first_N_rows = '1'; +DEF total_MB = ''; +DEF table_MB = ''; +DEF indexes_MB = ''; +DEF lobs_MB = ''; +-- +PRO +PRO BEFORE +PRO ~~~~~~ +@@cs_internal/cs_tables_internal.sql +DEF total_MB_b = "&&total_MB."; +DEF table_MB_b = "&&table_MB."; +DEF indexes_MB_b = "&&indexes_MB."; +DEF lobs_MB_b = "&&lobs_MB."; +@@cs_internal/cs_lobs_internal.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO TABLE REDEFINITION +PRO ~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON +ALTER SESSION SET DDL_LOCK_TIMEOUT = 10; +BEGIN + &&cs_tools_schema..IOD_SPACE.&&api_name.( + p_pdb_name => '&&cs_con_name.' + , p_owner => '&&p_owner.' + , p_table_name => '&&p_table_name.' + , p_pxdegree => &&p_pxdegree. + , p_newtbs => '&&p_newtbs.' + , p_compression => &&p_compression. + ); +END; +/ +SET SERVEROUT OFF; +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO AFTER +PRO ~~~~~ +@@cs_internal/cs_tables_internal.sql +DEF total_MB_a = "&&total_MB."; +DEF table_MB_a = "&&table_MB."; +DEF indexes_MB_a = "&&indexes_MB."; +DEF lobs_MB_a = "&&lobs_MB."; +@@cs_internal/cs_lobs_internal.sql +-- +COL type FOR A10 HEA 'OBJECT'; +COL MB_before FOR 99,999,990.0; +COL MB_after FOR 99,999,990.0; +COL MB_saved FOR 99,999,990.0; +PRO +PRO TABLE REDEFINITION EFFICIENCY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT 'Table:' AS type, TO_NUMBER('&&table_MB_b.') AS MB_before, TO_NUMBER('&&table_MB_a.') AS MB_after, TO_NUMBER('&&table_MB_b.') - TO_NUMBER('&&table_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Index(es):' AS type, TO_NUMBER('&&indexes_MB_b.') AS MB_before, TO_NUMBER('&&indexes_MB_a.') AS MB_after, TO_NUMBER('&&indexes_MB_b.') - TO_NUMBER('&&indexes_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Lob(s):' AS type, TO_NUMBER('&&lobs_MB_b.') AS MB_before, TO_NUMBER('&&lobs_MB_a.') AS MB_after, TO_NUMBER('&&lobs_MB_b.') - TO_NUMBER('&&lobs_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Total:' AS type, TO_NUMBER('&&total_MB_b.') AS MB_before, TO_NUMBER('&&total_MB_a.') AS MB_after, TO_NUMBER('&&total_MB_b.') - TO_NUMBER('&&total_MB_a.') AS MB_saved FROM DUAL +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_table_name." "&&cs_reference." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_redef_table_with_purge.sql b/csierra/cs_redef_table_with_purge.sql new file mode 100644 index 0000000..eb88e66 --- /dev/null +++ b/csierra/cs_redef_table_with_purge.sql @@ -0,0 +1,251 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_redef_table_with_purge.sql +-- +-- Purpose: Table Redefinition with Purge +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/10 +-- +-- Usage: Execute connected to PDB +-- +-- Enter table owner and name when requested, followed by other parameters +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_redef_table_with_purge.sql +-- +-- Notes: This operation requires a blackout. +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_blackout.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_redef_table_with_purge'; +-- +COL username FOR A30; +SELECT username + FROM dba_users + WHERE oracle_maintained = 'N' + AND common = 'NO' + ORDER BY + username +/ +PRO +PRO 1. Table Owner: +DEF table_owner = '&1.'; +UNDEF 1; +COL p_owner NEW_V p_owner FOR A30 NOPRI; +SELECT username AS p_owner + FROM dba_users + WHERE oracle_maintained = 'N' + AND common = 'NO' + AND username = UPPER(TRIM('&&table_owner.')) + AND ROWNUM = 1 +/ +-- +COL table_name FOR A30; +SELECT table_name, blocks + FROM dba_tables + WHERE owner = '&&p_owner.' + ORDER BY + table_name +/ +PRO +PRO 2. Table Name: +DEF table_name = '&2.'; +UNDEF 2; +COL p_table_name NEW_V p_table_name NOPRI; +SELECT table_name AS p_table_name + FROM dba_tables + WHERE owner = '&&p_owner.' + AND table_name = UPPER(TRIM('&&table_name.')) + AND ROWNUM = 1 +/ +-- +COL column_name FOR A30; +COL data_type FOR A20; +SELECT column_name, data_type + FROM dba_tab_columns + WHERE owner = '&&p_owner.' + AND table_name = '&p_table_name.' + AND data_type IN ('NUMBER', 'DATE', 'TIMESTAMP(6)') + ORDER BY + column_name +/ +PRO +PRO 3. Purge on Column Name: +DEF column_name = '&3.'; +UNDEF 3; +COL p_column_name NEW_V p_column_name NOPRI; +COL p_data_type NEW_V p_data_type NOPRI; +COL p_purge_type NEW_V p_purge_type NOPRI; +COL p_purge_label NEW_V p_purge_label NOPRI; +SELECT column_name AS p_column_name, + data_type AS p_data_type, + CASE data_type WHEN 'NUMBER' THEN 'p_purgeidnumber' ELSE 'p_purgedays' END AS p_purge_type, + CASE data_type WHEN 'NUMBER' THEN 'Numeric Value' ELSE 'Number of Days' END AS p_purge_label + FROM dba_tab_columns + WHERE owner = '&&p_owner.' + AND table_name = '&p_table_name.' + AND data_type IN ('NUMBER', 'DATE', 'TIMESTAMP(6)') + AND column_name = UPPER(TRIM('&&column_name.')) + AND ROWNUM = 1 +/ +PRO +PRO 4. &&p_purge_label. for Purge Threshold: +DEF p_value = '&4.'; +UNDEF 4; +-- +COL tablespace_name_d NEW_V tablespace_name_d NOPRI; +SELECT tablespace_name AS tablespace_name_d + FROM dba_segments + WHERE owner = '&&p_owner.' + AND segment_name = '&&p_table_name.' + AND segment_type LIKE 'TABLE%' + ORDER BY + segment_type +FETCH FIRST ROW ONLY +/ +-- +COL tablespace_name FOR A30; +SELECT tablespace_name + FROM dba_tablespaces + WHERE contents = 'PERMANENT' + AND tablespace_name NOT IN ('SYSTEM', 'SYSAUX') + ORDER BY + tablespace_name +/ +PRO +PRO 5. Target Tablespace: [{&&tablespace_name_d.}|] +DEF tbsname = '&5.'; +UNDEF 5; +COL p_newtbs NEW_V p_newtbs FOR A30 NOPRI; +SELECT tablespace_name AS p_newtbs + FROM dba_tablespaces + WHERE contents = 'PERMANENT' + AND tablespace_name NOT IN ('SYSTEM', 'SYSAUX') + AND tablespace_name = UPPER(TRIM(NVL('&&tbsname.', '&&tablespace_name_d.'))) +/ +PRO +PRO 6. Table OLTP Compression: [{FALSE}|TRUE] +DEF compression = '&6.'; +UNDEF 6; +COL p_compression NEW_V p_compression NOPRI; +SELECT CASE WHEN SUBSTR(UPPER(TRIM('&&compression.')),1,1) IN ('T', 'Y') THEN 'TRUE' ELSE 'FALSE' END AS p_compression FROM DUAL +/ +PRO +PRO 7. CLOB Compression and Deduplication: [{NO}|C|CD] NO:None, C:Compression, CD:Compression and Deduplication +DEF redeflob = '&7.'; +UNDEF 7; +COL api_name NEW_V api_name NOPRI; +COL p_redeflob NEW_V p_redeflob NOPRI; +SELECT CASE UPPER(TRIM('&&redeflob.')) WHEN 'C' THEN 'REDEFLOBC' WHEN 'CD' THEN 'REDEFLOBCD' WHEN 'NO' THEN 'REDEFNOLOBCD' ELSE 'REDEFNOLOBCD' END AS api_name, + CASE WHEN UPPER(TRIM('&&redeflob.')) IN ('C', 'CD', 'NO') THEN UPPER(TRIM('&&redeflob.')) ELSE 'NO' END AS p_redeflob +FROM DUAL +/ +PRO +PRO 8. Degree of Parallelism: [{1}|2|4|8] +DEF pxdegree = '&8.'; +UNDEF 8; +COL p_pxdegree NEW_V p_pxdegree NOPRI; +SELECT CASE WHEN '&&pxdegree.' IN ('1','2','4','8') THEN '&&pxdegree.' ELSE '1' END AS p_pxdegree FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&p_owner..&&p_table_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_table_name." "&&p_column_name." "&&p_value." "&&p_newtbs." "&&p_compression." "&&p_redeflob." "&&p_pxdegree." +@@cs_internal/cs_spool_id.sql +-- +PRO TABLE_OWNER : &&p_owner. +PRO TABLE_NAME : &&p_table_name. +PRO COLUMN_NAME : &&p_column_name. +PRO DATE_TYPE : &&p_data_type. +PRO THRESHOLD : &&p_value. (&&p_purge_label.) +PRO TABLESPACE : &&p_newtbs. +PRO OLTP_COMPRES : &&p_compression. +PRO LOB_COMPRES : &&p_redeflob. [{NO}|C|CD] NO:None, C:Compression, CD:Compression and Deduplication +PRO PX_DEGREE : &&p_pxdegree. [{1}|2|4|8] +-- +DEF specific_owner = '&&p_owner.'; +DEF specific_table = '&&p_table_name.'; +DEF order_by = 't.owner, t.table_name'; +DEF fetch_first_N_rows = '1'; +DEF total_MB = ''; +DEF table_MB = ''; +DEF indexes_MB = ''; +DEF lobs_MB = ''; +-- +PRO +PRO BEFORE +PRO ~~~~~~ +@@cs_internal/cs_tables_internal.sql +DEF total_MB_b = "&&total_MB."; +DEF table_MB_b = "&&table_MB."; +DEF indexes_MB_b = "&&indexes_MB."; +DEF lobs_MB_b = "&&lobs_MB."; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO TABLE REDEFINITION +PRO ~~~~~~~~~~~~~~~~~~ +SET SERVEROUT ON +ALTER SESSION SET DDL_LOCK_TIMEOUT = 10; +BEGIN + &&cs_tools_schema..IOD_SPACE.&&api_name.( + p_pdb_name => '&&cs_con_name.' + , p_owner => '&&p_owner.' + , p_table_name => '&&p_table_name.' + , p_pxdegree => &&p_pxdegree. + , p_newtbs => '&&p_newtbs.' + , p_compression => &&p_compression. + , p_purgenow => TRUE + , &&p_purge_type. => &&p_value. + , p_colfilter => '&&p_column_name.' + ); +END; +/ +SET SERVEROUT OFF; +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO AFTER +PRO ~~~~~ +@@cs_internal/cs_tables_internal.sql +DEF total_MB_a = "&&total_MB."; +DEF table_MB_a = "&&table_MB."; +DEF indexes_MB_a = "&&indexes_MB."; +DEF lobs_MB_a = "&&lobs_MB."; +-- +COL type FOR A10 HEA 'OBJECT'; +COL MB_before FOR 99,999,990.0; +COL MB_after FOR 99,999,990.0; +COL MB_saved FOR 99,999,990.0; +PRO +PRO TABLE REDEFINITION EFFICIENCY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT 'Table:' AS type, TO_NUMBER('&&table_MB_b.') AS MB_before, TO_NUMBER('&&table_MB_a.') AS MB_after, TO_NUMBER('&&table_MB_b.') - TO_NUMBER('&&table_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Index(es):' AS type, TO_NUMBER('&&indexes_MB_b.') AS MB_before, TO_NUMBER('&&indexes_MB_a.') AS MB_after, TO_NUMBER('&&indexes_MB_b.') - TO_NUMBER('&&indexes_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Lob(s):' AS type, TO_NUMBER('&&lobs_MB_b.') AS MB_before, TO_NUMBER('&&lobs_MB_a.') AS MB_after, TO_NUMBER('&&lobs_MB_b.') - TO_NUMBER('&&lobs_MB_a.') AS MB_saved FROM DUAL + UNION ALL +SELECT 'Total:' AS type, TO_NUMBER('&&total_MB_b.') AS MB_before, TO_NUMBER('&&total_MB_a.') AS MB_after, TO_NUMBER('&&total_MB_b.') - TO_NUMBER('&&total_MB_a.') AS MB_saved FROM DUAL +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&p_owner." "&&p_table_name." "&&p_column_name." "&&p_value." "&&p_newtbs." "&&p_compression." "&&p_redeflob." "&&p_pxdegree." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_resource_limit_chart.sql b/csierra/cs_resource_limit_chart.sql new file mode 100644 index 0000000..c19fb47 --- /dev/null +++ b/csierra/cs_resource_limit_chart.sql @@ -0,0 +1,161 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_resource_limit_chart.sql +-- +-- Purpose: Resource Limit (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates, the resource. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_resource_limit_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_resource_limit_chart'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT resource_name, MAX(max_utilization) AS max_utilization + FROM dba_hist_resource_limit + WHERE resource_name IS NOT NULL + AND dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + GROUP BY + resource_name + ORDER BY + resource_name +/ +PRO +PRO 3. Resource Name: +DEF cs2_resource_name = '&3.'; +UNDEF 3; +-- +PRO +PRO 4. Value: [{current_utilization}|max_utilization|initial_allocation|limit_value] +DEF cs2_value = '&4.' +UNDEF 4; +COL cs2_value NEW_V cs2_value NOPRI; +SELECT NVL('&&cs2_value.', 'current_utilization') cs2_value FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs2_resource_name._&&cs2_value.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Resource Limit: "&&cs2_resource_name. - &&cs2_value."'; +DEF chart_title = 'Resource Limit: "&&cs2_resource_name. - &&cs2_value."'; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF vaxis_title = "&&cs2_resource_name."; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +--DEF chart_foot_note_2 = "
2) Granularity: &&cs2_granularity. [{MI}|SS|HH|DD]"; +DEF chart_foot_note_3 = ""; +--DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_resource_name." "&&cs2_value."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&cs2_value.', id:'1', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +resource_limit AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + current_utilization, + max_utilization, + CASE initial_allocation WHEN ' UNLIMITED' THEN -1 ELSE TO_NUMBER(initial_allocation) END initial_allocation, + CASE limit_value WHEN ' UNLIMITED' THEN -1 ELSE TO_NUMBER(limit_value) END limit_value + FROM dba_hist_resource_limit + WHERE resource_name = '&&cs2_resource_name.' + AND dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.snap_id, + CAST(s.begin_interval_time AS DATE) begin_time, + CAST(s.end_interval_time AS DATE) end_time, + r.&&cs2_value. value + FROM dba_hist_snapshot s, + resource_limit r + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND r.snap_id = s.snap_id +) +SELECT ', [new Date('|| + TO_CHAR(q.end_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.end_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.end_time, 'DD')|| /* day */ + ','||TO_CHAR(q.end_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.end_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.end_time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.value)|| + ']' + FROM my_query q + ORDER BY + snap_id +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = ''; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_segment_chart.sql b/csierra/cs_segment_chart.sql new file mode 100644 index 0000000..97529bb --- /dev/null +++ b/csierra/cs_segment_chart.sql @@ -0,0 +1,264 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_segment_chart.sql +-- +-- Purpose: Segment Size GBs for given Segment (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/25 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter Table when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_segment_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +-- 1 GiG = 1.073741824 GB +DEF GiB_to_GB = '1.073741824'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_segment_chart'; +DEF cs_hours_range_default = '4320'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(snap_time)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_segments +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL max_snap_time NEW_V max_snap_time NOPRI; +SELECT TO_CHAR(MAX(snap_time), '&&cs_datetime_full_format.') AS max_snap_time FROM &&cs_tools_schema..dbc_segments WHERE pdb_name = '&&cs_con_name.'; +COL sum_GB FOR 999,990.000 HEA 'SUM_GB'; +COL sum_GiB FOR 999,990.000 HEA 'SUM_GiB'; +COL max_GB FOR 999,990.000 HEA 'MAX_GB'; +COL max_GiB FOR 999,990.000 HEA 'MAX_GiB'; +COL owners FOR 999,999,990; +COL segments FOR 999,999,990; +COL partitions FOR 999,999,990; +COL tablespace_name FOR A30 TRUNC; +COL owner FOR A30 TRUNC; +COL segment_name FOR A30 TRUNC; +COL partition_name FOR A30 TRUNC; +COL segment_type NEW_V segment_type NOPRI; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF sum_GB sum_GiB owners segments partitions ON REPORT; +-- +SELECT SUM(bytes)/1e9 AS sum_GB, + --SUM(bytes)/1e9/&&GiB_to_GB. AS sum_GiB, + MAX(bytes)/1e9 AS max_GB, + --MAX(bytes)/1e9/&&GiB_to_GB. AS max_GiB, + COUNT(DISTINCT owner) AS owners, + COUNT(DISTINCT owner||'.'||segment_name) AS segments, + COUNT(DISTINCT owner||'.'||segment_name||'.'||partition_name) AS partitions, + tablespace_name + FROM &&cs_tools_schema..dbc_segments + WHERE pdb_name = '&&cs_con_name.' + AND snap_time = TO_DATE('&&max_snap_time.', '&&cs_datetime_full_format.') + GROUP BY + tablespace_name + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +PRO +PRO 3. Tablespace Name: +DEF tablespace_name = '&3.'; +UNDEF 3; +-- +SELECT SUM(bytes)/1e9 AS sum_GB, + --SUM(bytes)/1e9/&&GiB_to_GB. AS sum_GiB, + MAX(bytes)/1e9 AS max_GB, + --MAX(bytes)/1e9/&&GiB_to_GB. AS max_GiB, + COUNT(DISTINCT owner||'.'||segment_name) AS segments, + COUNT(DISTINCT owner||'.'||segment_name||'.'||partition_name) AS partitions, + owner + FROM &&cs_tools_schema..dbc_segments + WHERE pdb_name = '&&cs_con_name.' + AND snap_time = TO_DATE('&&max_snap_time.', '&&cs_datetime_full_format.') + AND tablespace_name = '&&tablespace_name.' + GROUP BY + owner + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +PRO +PRO 4. Owner: +DEF owner = '&4.'; +UNDEF 4; +-- +SELECT SUM(bytes)/1e9 AS sum_GB, + --SUM(bytes)/1e9/&&GiB_to_GB. AS sum_GiB, + MAX(bytes)/1e9 AS max_GB, + --MAX(bytes)/1e9/&&GiB_to_GB. AS max_GiB, + COUNT(DISTINCT owner||'.'||segment_name||'.'||partition_name) AS partitions, + segment_name + FROM &&cs_tools_schema..dbc_segments + WHERE pdb_name = '&&cs_con_name.' + AND snap_time = TO_DATE('&&max_snap_time.', '&&cs_datetime_full_format.') + AND tablespace_name = '&&tablespace_name.' + AND owner = '&&owner.' + GROUP BY + segment_name + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +PRO +PRO 5. Segment Name: +DEF segment_name = '&5.'; +UNDEF 5; +-- +SELECT SUM(bytes)/1e9 AS sum_GB, + --SUM(bytes)/1e9/&&GiB_to_GB. AS sum_GiB, + partition_name + FROM &&cs_tools_schema..dbc_segments + WHERE pdb_name = '&&cs_con_name.' + AND snap_time = TO_DATE('&&max_snap_time.', '&&cs_datetime_full_format.') + AND tablespace_name = '&&tablespace_name.' + AND owner = '&&owner.' + AND segment_name = '&&segment_name.' + GROUP BY + partition_name + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +PRO +PRO 6. Partition Name (opt): +DEF partition_name = '&6.'; +UNDEF 6; +-- +SELECT segment_type + FROM &&cs_tools_schema..dbc_segments + WHERE pdb_name = '&&cs_con_name.' + AND snap_time = TO_DATE('&&max_snap_time.', '&&cs_datetime_full_format.') + AND tablespace_name = '&&tablespace_name.' + AND owner = '&&owner.' + AND segment_name = '&&segment_name.' + AND ('&&partition_name.' IS NULL OR partition_name = '&&partition_name.') + GROUP BY + segment_type + ORDER BY + segment_type +/ +-- +PRO +PRO 7. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&7.'; +UNDEF 7; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&tablespace_name._&&owner._&&segment_name.'||CASE WHEN '&&partition_name.' IS NOT NULL THEN '_&&partition_name.' END AS cs_file_name FROM DUAL; +-- +DEF report_title = "&&tablespace_name.: &&owner..&&segment_name. &&partition_name. (&&segment_type.)"; +DEF chart_title = "&&tablespace_name.: &&owner..&&segment_name. &&partition_name. (&&segment_type.)"; +DEF xaxis_title = ""; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}"; +DEF vaxis_title = "Gigabytes (GB)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&tablespace_name." "&&owner." "&&segment_name." "&&partition_name." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Size GB', id:'1', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT snap_time, + ROUND(SUM(bytes)/1e9, 3) AS sum_GB, + ROUND(SUM(bytes)/1e9/&&GiB_to_GB., 3) AS sum_GiB + FROM &&cs_tools_schema..dbc_segments + WHERE pdb_name = '&&cs_con_name.' + AND tablespace_name = '&&tablespace_name.' + AND owner = '&&owner.' + AND segment_name = '&&segment_name.' + AND ('&&partition_name.' IS NULL OR partition_name = '&&partition_name.') + GROUP BY + snap_time +) +SELECT ', [new Date('|| + TO_CHAR(q.snap_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.snap_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.snap_time, 'DD')|| /* day */ + ','||TO_CHAR(q.snap_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.snap_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.snap_time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.sum_GB, 3)|| + ']' + FROM my_query q + ORDER BY + q.snap_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Line'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql + diff --git a/csierra/cs_sess_mon.sql b/csierra/cs_sess_mon.sql new file mode 100644 index 0000000..1669469 --- /dev/null +++ b/csierra/cs_sess_mon.sql @@ -0,0 +1,390 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sess_mon.sql +-- +-- Purpose: Monitored Sessions +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/25 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sess_mon.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sess_mon'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL snap_time NEW_V snap_time; +COL sessions FOR 999,990; +COL blockers FOR 999,990; +COL blockees FOR 999,990; +COL blocker FOR 9999999; +COL et_secs FOR 999,999,990; +COL killed FOR 99,990; +COL lck_cnt FOR 99,990; +COL txn_cnt FOR 99,990; +COL chn_cnt FOR 99,990; +--COL lcp_cnt FOR 99,990; +--COL lcl_cnt FOR 99,990; +COL obj_cnt FOR 99,990; +COL api FOR A30 TRUNC; +COL pdb_name FOR A30 TRUNC; +COL pdbs FOR 9999; +-- +DEF only_killed = 'N'; +PRO +PRO Monitored Sessions (&&cs_tools_schema..sess_mon_session) +PRO ~~~~~~~~~~~~~~~~~~ +-- +WITH +sqf_session AS ( +SELECT /*+ MATERIALIE NO_MERGE */ + m.snap_time, + m.api, + m.killed_flag, + m.last_call_et, + m.wait_time_micro, + m.final_blocking_session, + m.pdb_name + FROM &&cs_tools_schema..sess_mon_session m + WHERE '&&cs_con_name.' IN ('CDB$ROOT', m.pdb_name) +), +sqf_lock AS ( +SELECT /*+ MATERIALIE NO_MERGE */ + l.snap_time, + l.api, + COUNT(*) AS cnt + FROM &&cs_tools_schema..sess_mon_lock l + WHERE '&&cs_con_name.' IN ('CDB$ROOT', l.pdb_name) + GROUP BY + l.snap_time, + l.api +), +sqf_transaction AS ( +SELECT /*+ MATERIALIE NO_MERGE */ + t.snap_time, + t.api, + COUNT(*) AS cnt + FROM &&cs_tools_schema..sess_mon_transaction t + WHERE '&&cs_con_name.' IN ('CDB$ROOT', t.pdb_name) + GROUP BY + t.snap_time, + t.api +), +sqf_wait_chains AS ( +SELECT /*+ MATERIALIE NO_MERGE */ + w.snap_time, + w.api, + COUNT(*) AS cnt + FROM &&cs_tools_schema..sess_mon_wait_chains w + WHERE '&&cs_con_name.' IN ('CDB$ROOT', w.pdb_name) + GROUP BY + w.snap_time, + w.api +), +sqf_sessions_aggregate AS ( +SELECT /*+ MATERIALIE NO_MERGE */ + m.snap_time, + COUNT(*) AS sessions, + SUM(CASE m.killed_flag WHEN 'Y' THEN 1 ELSE 0 END) AS killed, + LEAST(MAX(m.last_call_et), MAX(m.wait_time_micro) / 1e6) AS et_secs, + COUNT(DISTINCT m.final_blocking_session) AS blockers, + CASE COUNT(DISTINCT m.final_blocking_session) WHEN 1 THEN MIN(m.final_blocking_session) END AS blocker, + SUM(CASE WHEN m.final_blocking_session IS NOT NULL THEN 1 ELSE 0 END) AS blockees, + l.cnt AS lck_cnt, + t.cnt AS txn_cnt, + w.cnt AS chn_cnt, + m.api, + COUNT(DISTINCT m.pdb_name) AS pdbs + FROM sqf_session m, + sqf_lock l, + sqf_transaction t, + sqf_wait_chains w + WHERE l.snap_time(+) = m.snap_time + AND l.api(+) = m.api + AND t.snap_time(+) = m.snap_time + AND t.api(+) = m.api + AND w.snap_time(+) = m.snap_time + AND w.api(+) = m.api + GROUP BY + m.snap_time, + m.api, + l.cnt, + t.cnt, + w.cnt +) +SELECT snap_time, + sessions, + killed, + et_secs, + blockers, + blocker, + blockees, + lck_cnt, + txn_cnt, + chn_cnt, + api, + pdbs + FROM sqf_sessions_aggregate + WHERE '&&only_killed.' = 'N' OR killed > 0 + ORDER BY + snap_time +/ +-- +SET TERM OFF; +SAVE /tmp/cs_sess_mon.tmp REPLACE; +SET TERM ON; +-- +DEF only_killed = 'Y'; +PRO +PRO Killed Sessions (&&cs_tools_schema..sess_mon_session) +PRO ~~~~~~~~~~~~~~~ +/ +-- +PRO +PRO 1. Enter SNAP_TIME: +DEF snap_time_p = '&1.'; +UNDEF 1; +SELECT COALESCE('&&snap_time_p.', '&&snap_time.') AS snap_time FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&snap_time." +@@cs_internal/cs_spool_id.sql +-- +PRO SNAP_TIME : &&snap_time. +-- +DEF only_killed = 'N'; +PRO +PRO Monitored Sessions (&&cs_tools_schema..sess_mon_session) +PRO ~~~~~~~~~~~~~~~~~~ +@/tmp/cs_sess_mon.tmp +-- +DEF only_killed = 'Y'; +PRO +PRO Killed Sessions (&&cs_tools_schema..sess_mon_session) +PRO ~~~~~~~~~~~~~~~ +/ +-- +HOS rm /tmp/cs_sess_mon.tmp +SELECT COALESCE('&&snap_time_p.', '&&snap_time.') AS snap_time FROM DUAL; +-- +PRO +PRO Blocked Sessions (v$wait_chains) +PRO ~~~~~~~~~~~~~~~~ +SET HEA OFF PAGES 0; +COL line FOR A500; +WITH +sessions_in_tree AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + w.chain_id, + w.sid, + w.sess_serial#, + s.machine, + w.blocker_is_valid, + w.blocker_sid, + w.blocker_sess_serial#, + w.blocker_chain_id, + w.in_wait_secs, + w.wait_event_text, + w.pdb_name, + w.api, + w.row_wait_obj#, + w.chain_signature, + CASE + WHEN (SELECT COUNT(*) + FROM &&cs_tools_schema..sess_mon_wait_chains b -- blockee + WHERE w.blocker_is_valid = 'FALSE' + AND '&&cs_con_name.' IN ('CDB$ROOT', b.pdb_name) + AND b.snap_time = '&&snap_time.' + AND b.chain_is_cycle = 'FALSE' + AND b.chain_signature <> '' + AND b.blocker_is_valid = 'TRUE' + AND b.blocker_sid = w.sid + AND b.blocker_sess_serial# = w.sess_serial# + AND b.pdb_name = w.pdb_name + AND b.api = w.api + AND b.chain_signature = w.chain_signature) > 0 + THEN 'TRUE' + ELSE 'FALSE' + END AS root_blocker, + ROWNUM AS w_rownum + FROM &&cs_tools_schema..sess_mon_wait_chains w, + &&cs_tools_schema..sess_mon_session s + WHERE '&&cs_con_name.' IN ('CDB$ROOT', w.pdb_name) + AND w.snap_time = '&&snap_time.' + AND w.chain_is_cycle = 'FALSE' + AND w.chain_signature <> '' + AND s.snap_time(+) = w.snap_time + AND s.api(+) = w.api + AND s.sid(+) = w.sid + AND s.serial#(+) = w.sess_serial# +), +sessions AS ( +SELECT '| '|| + RPAD(LPAD(' ', 2 * (LEVEL - 1), ' ')||t.sid||','||t.sess_serial#, 25, ' ')||' | '|| + --RPAD(NVL(t.machine, ' '), 64, ' ')||' | '|| + RPAD(LPAD(' ', 2 * (LEVEL - 1), ' ')||NVL(t.machine, ' '), 64, ' ')||' | '|| + LPAD(NVL(TO_CHAR(t.in_wait_secs), ' '), 5, ' ')||' | '|| + RPAD(NVL(t.wait_event_text, ' '), 35, ' ')||' | '|| + RPAD(CASE + WHEN t.row_wait_obj# IS NOT NULL THEN + ( SELECT o.object_name + FROM &&cs_tools_schema..sess_mon_objects o + WHERE '&&cs_con_name.' IN ('CDB$ROOT', o.pdb_name) + AND o.snap_time = '&&snap_time.' + AND o.object_id = t.row_wait_obj# + AND o.pdb_name = t.pdb_name + AND o.api = t.api )|| + '('||t.row_wait_obj#||')' + ELSE ' ' + END, 35, ' ')||' | '|| + RPAD(NVL(t.pdb_name, ' '), 30, ' ')||' | '|| + RPAD(NVL(t.chain_signature, ' '), 200, ' ')||' |' AS line + FROM sessions_in_tree t + WHERE 'TRUE' IN (t.blocker_is_valid, t.root_blocker) + START WITH t.root_blocker = 'TRUE' + CONNECT BY t.blocker_sid = PRIOR t.sid + AND t.blocker_sess_serial# = PRIOR t.sess_serial# + ORDER SIBLINGS BY NVL(t.in_wait_secs, 0) DESC +) +SELECT '+'||RPAD('-', 414, '-')||'+' AS line + FROM DUAL + UNION ALL +SELECT '| '|| + RPAD('SID,SERIAL#', 25, ' ')||' | '|| + RPAD('MACHINE', 64, ' ')||' | '|| + LPAD('SECS', 5, ' ')||' | '|| + RPAD('WAIT EVENT', 35, ' ')||' | '|| + RPAD('OBJECT', 35, ' ')||' | '|| + RPAD('PDB NAME', 30, ' ')||' | '|| + RPAD('CHAIN SIGNATURE', 200, ' ')||' |' AS line + FROM DUAL + UNION ALL +SELECT '+'||RPAD('-', 414, '-')||'+' AS line + FROM DUAL + UNION ALL +SELECT line FROM sessions + UNION ALL +SELECT '+'||RPAD('-', 414, '-')||'+' AS line + FROM DUAL +/ +SET HEA ON PAGES 100; +PRO +PRO Wait Chains (v$wait_chains) +PRO ~~~~~~~~~~~~ +COL id FOR 999; +COL chain_is_cycle FOR A5 HEA 'CYCLE'; +COL sess FOR A12 HEA 'SESSION'; +COL blocker FOR A12; +COL blocker_chain_id FOR 999 HEA 'ID'; +COL chain_signature FOR A150; +COL secs FOR 9990; +COL wait_event_text FOR A30 TRUNC; +COL pdb_name FOR A30 TRUNC; +COL object_name FOR A30 TRUNC; +BREAK ON id SKIP PAGE ON chain_is_cycle ON chain_signature ON pdb_name; +WITH +w AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + w.chain_id AS id, + w.chain_is_cycle, + w.sid||','||w.sess_serial# AS sess, + CASE WHEN w.blocker_sid IS NOT NULL THEN w.blocker_sid||','||w.blocker_sess_serial# END AS blocker, + w.blocker_chain_id, + w.in_wait_secs AS secs, + w.wait_event_text, + w.pdb_name, + w.api, + w.row_wait_obj#, + w.chain_signature, + ROWNUM AS w_rownum + FROM &&cs_tools_schema..sess_mon_wait_chains w + WHERE '&&cs_con_name.' IN ('CDB$ROOT', w.pdb_name) + AND w.snap_time = '&&snap_time.' + AND w.chain_signature <> '' +), +o AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + o.object_id, + o.pdb_name, + o.api, + o.object_name + FROM &&cs_tools_schema..sess_mon_objects o + WHERE '&&cs_con_name.' IN ('CDB$ROOT', o.pdb_name) + AND o.snap_time = '&&snap_time.' +) +SELECT w.id, + w.chain_is_cycle, + w.sess, + W.blocker, + w.blocker_chain_id, + w.secs, + w.wait_event_text, + o.object_name, + w.pdb_name, + w.chain_signature + FROM w, o + WHERE o.object_id(+) = w.row_wait_obj# + AND o.pdb_name(+) = w.pdb_name + AND o.api(+) = w.api + ORDER BY + w.id, + w.w_rownum +/ +PRO +@@cs_internal/cs_pr_internal.sql "SELECT * FROM &&cs_tools_schema..sess_mon_wait_chains WHERE ''&&cs_con_name.'' IN (''CDB$ROOT'', pdb_name) AND snap_time = TO_DATE(''&&snap_time.'')"; +PRO +PRO Sessions (v$session) +PRO ~~~~~~~~ +@@cs_internal/cs_pr_internal.sql "SELECT * FROM &&cs_tools_schema..sess_mon_session WHERE ''&&cs_con_name.'' IN (''CDB$ROOT'', pdb_name) AND snap_time = TO_DATE(''&&snap_time.'') ORDER BY final_blocking_session NULLS FIRST, sid"; +PRO +PRO Locks (v$lock) +PRO ~~~~~ +@@cs_internal/cs_pr_internal.sql "SELECT * FROM &&cs_tools_schema..sess_mon_lock WHERE ''&&cs_con_name.'' IN (''CDB$ROOT'', pdb_name) AND snap_time = TO_DATE(''&&snap_time.'') ORDER BY sid, type, id1"; +PRO +PRO Transactions (v$transaction) +PRO ~~~~~~~~~~~~ +@@cs_internal/cs_pr_internal.sql "SELECT * FROM &&cs_tools_schema..sess_mon_transaction WHERE ''&&cs_con_name.'' IN (''CDB$ROOT'', pdb_name) AND snap_time = TO_DATE(''&&snap_time.'') ORDER BY addr"; +--PRO +--PRO Library Cache Pins (x$kglpn) +--PRO ~~~~~~~~~~~~~~~~~~ +--@@cs_internal/cs_pr_internal.sql "SELECT * FROM &&cs_tools_schema..sess_mon_lc_pin WHERE snap_time = TO_DATE(''&&snap_time.'')"; +--PRO +--PRO Library Cache Locks (x$kgllk) +--PRO ~~~~~~~~~~~~~~~~~~~ +--@@cs_internal/cs_pr_internal.sql "SELECT * FROM &&cs_tools_schema..sess_mon_lc_lock WHERE snap_time = TO_DATE(''&&snap_time.'')"; +PRO +PRO Objects (dba_objects) +PRO ~~~~~~~ +@@cs_internal/cs_pr_internal.sql "SELECT * FROM &&cs_tools_schema..sess_mon_objects WHERE ''&&cs_con_name.'' IN (''CDB$ROOT'', pdb_name) AND snap_time = TO_DATE(''&&snap_time.'') ORDER BY object_id"; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&snap_time." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_sessions.sql b/csierra/cs_sessions.sql new file mode 100644 index 0000000..98ed556 --- /dev/null +++ b/csierra/cs_sessions.sql @@ -0,0 +1,359 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sessions.sql +-- +-- Purpose: Simple list all current Sessions (all types and all statuses) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/05 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sessions.sql +-- +-- Notes: Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sessions'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +COL status FOR A8 PRI; +COL last_call_et FOR 999,999,999,990 HEA 'LAST_CALL|ET_SECS'; +COL logon_age FOR 999,999,990 HEA 'LOGON|AGE_SECS'; +COL sid_serial FOR A12; +COL blocker FOR 9999990; +COL module_action_program FOR A50 TRUNC; +COL module FOR A40 TRUNC; +COL sql_text FOR A50 TRUNC; +COL pdb_name FOR A35 TRUNC; +COL timed_event FOR A60 HEA 'TIMED EVENT' TRUNC; +COL type FOR A10 TRUNC; +COL username FOR A20 TRUNC; +COL txn FOR A3; +COL last_call_time FOR A19; +COL logon_time FOR A19; +COL service_name FOR A50; +-- +SET FEED ON; +DEF cs_session_type = 'BACKGROUND' +PRO +PRO SESSIONS: &&cs_session_type. +PRO ~~~~~~~~ +WITH +v_session AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ * FROM v$session WHERE &&cs_con_id. IN (1, con_id) AND type = '&&cs_session_type.' +), +sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + sid, + serial#, + CASE WHEN final_blocking_session_status = 'VALID' THEN final_blocking_session END AS blocker, + -- type, + status, + username, + paddr, + taddr, + logon_time, + last_call_et, + (SYSDATE - logon_time) * 24 * 3600 AS logon_age, + COALESCE(sql_id, prev_sql_id) sql_id, + machine, + 's:'||state|| + CASE WHEN wait_class IS NOT NULL THEN ' w:'||wait_class END|| + CASE WHEN event IS NOT NULL THEN ' - '||event END AS + timed_event, + CASE WHEN TRIM(module) IS NOT NULL THEN 'm:'||TRIM(module)||' ' END|| + CASE WHEN TRIM(action) IS NOT NULL THEN 'a:'||TRIM(action)||' ' END|| + CASE WHEN TRIM(program) IS NOT NULL THEN 'p:'||TRIM(program) END AS + module_action_program, + service_name + FROM v_session +) +SELECT se.last_call_et, + (SYSDATE - (se.last_call_et / 3600 / 24)) AS last_call_time, + se.logon_age, + se.logon_time, + se.sid||','||se.serial# sid_serial, + se.blocker, + -- se.type, + se.status, + se.username, + CASE WHEN se.taddr IS NOT NULL THEN 'TXN' END AS txn, + se.timed_event, + se.sql_id, + (SELECT sql_text FROM v$sql sq WHERE sq.sql_id = se.sql_id AND ROWNUM = 1) sql_text, + se.machine, + se.module_action_program, + c.name||'('||se.con_id||')' AS pdb_name, + se.service_name + FROM sessions se, + v$containers c + WHERE c.con_id(+) = se.con_id + AND c.open_mode(+) = 'READ WRITE' + ORDER BY + se.last_call_et, + se.logon_age, + se.sid, + se.serial# +/ +-- +DEF cs_session_type = 'USER' +PRO +PRO SESSIONS: &&cs_session_type. +PRO ~~~~~~~~ +/ +SET FEED OFF; +-- +COL pdb FOR A35; +COL total_pdbs FOR 9,990 HEA 'TOTAL|PDBs'; +COL total_sessions FOR 99999999 HEA 'TOTAL|SESSIONS'; +COL status_active FOR 999999 HEA 'STATUS|ACTIVE'; +COL status_inactive FOR 99999999 HEA 'STATUS|INACTIVE'; +COL type_user FOR 999999 HEA 'TYPE|USER'; +COL type_background FOR 9999999999 HEA 'TYPE|BACKGROUND'; +COL type_recursive FOR 9999999999 HEA 'TYPE|RECURSIVE'; +COL user_active FOR 999999 HEA 'USER|ACTIVE'; +COL user_inactive FOR 99999999 HEA 'USER|INACTIVE'; +COL user_active_cpu FOR 999999 HEA 'USER|ACTIVE|ON_CPU'; +COL user_active_txn FOR 999999 HEA 'USER|ACTIVE|TXN'; +COL user_inactive_txn FOR 999999 HEA 'USER|INACTIVE|TXN'; +COL user_active_waiting FOR 9999999 HEA 'USER|ACTIVE|WAITING'; +COL user_scheduler FOR 999999999 HEA 'USER|ACTIVE|WAITING|SCHEDULER'; +COL user_io FOR 99999999 HEA 'USER|ACTIVE|WAITING|USER_I/O'; +COL user_application FOR 99999999999 HEA 'USER|ACTIVE|WAITING|APPLICATION'; +COL user_concurency FOR 99999999999 HEA 'USER|ACTIVE|WAITING|CONCURRENCY'; +COL user_commit FOR 9999999 HEA 'USER|ACTIVE|WAITING|COMMIT'; +COL last_call_secs FOR 999,999,990 HEA 'LAST_CALL|SECONDS'; +COL avg_last_call_secs FOR 999,999,990 HEA 'AVG_LAST_CALL|SECONDS'; +-- +-- COL pdb FOR A35; +-- COL total_sessions FOR 99999999 HEA 'TOTAL|SESSIONS'; +-- COL status_active FOR 999999 HEA 'STATUS|ACTIVE'; +-- COL status_inactive FOR 99999999 HEA 'STATUS|INACTIVE'; +-- COL type_user FOR 999999 HEA 'TYPE|USER'; +-- COL type_background FOR 9999999999 HEA 'TYPE|BACKGROUND'; +-- COL type_recursive FOR 9999999999 HEA 'TYPE|RECURSIVE'; +-- COL user_active FOR 999999 HEA 'USER|ACTIVE'; +-- COL user_inactive FOR 99999999 HEA 'USER|INACTIVE'; +-- COL user_active_cpu FOR 999999 HEA 'USER|ACTIVE|ON_CPU'; +-- COL user_active_txn FOR 999999 HEA 'USER|ACTIVE|TXN'; +-- COL user_inactive_txn FOR 999999 HEA 'USER|INACTIVE|TXN'; +-- COL user_active_waiting FOR 9999999 HEA 'USER|ACTIVE|WAITING'; +-- COL user_scheduler FOR 999999999 HEA 'USER|ACTIVE|WAITING|SCHEDULER'; +-- COL user_io FOR 99999999 HEA 'USER|ACTIVE|WAITING|USER_I/O'; +-- COL user_application FOR 99999999999 HEA 'USER|ACTIVE|WAITING|APPLICATION'; +-- COL user_concurency FOR 99999999999 HEA 'USER|ACTIVE|WAITING|CONCURRENCY'; +-- COL user_commit FOR 9999999 HEA 'USER|ACTIVE|WAITING|COMMIT'; +-- COL last_call_secs FOR 999,999,990 HEA 'LAST_CALL|SECONDS'; +-- COL avg_last_call_secs FOR 999,999,990 HEA 'AVG_LAST_CALL|SECONDS'; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF total_sessions status_active status_inactive type_user type_background type_recursive user_active user_inactive user_active_txn user_inactive_txn user_active_cpu user_active_waiting user_scheduler user_io user_application user_concurency user_commit ON REPORT; +-- +PRO +PRO MACHINE and MODULE SUMMARY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +all_sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ * FROM v$session WHERE &&cs_con_id. IN (1, con_id) +), +sessions +AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + machine, + module, + COUNT(DISTINCT con_id) AS total_pdbs, + COUNT(*) total_sessions, + SUM(CASE WHEN type = 'USER' THEN 1 ELSE 0 END) type_user, + SUM(CASE WHEN type = 'BACKGROUND' THEN 1 ELSE 0 END) type_background, + --SUM(CASE WHEN type = 'RECURSIVE' THEN 1 ELSE 0 END) type_recursive, + SUM(CASE WHEN status = 'ACTIVE' THEN 1 ELSE 0 END) status_active, + SUM(CASE WHEN status = 'INACTIVE' THEN 1 ELSE 0 END) status_inactive, + SUM(CASE WHEN status = 'ACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_active, + SUM(CASE WHEN status = 'INACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_inactive, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state <> 'WAITING' THEN 1 ELSE 0 END) user_active_cpu, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' THEN 1 ELSE 0 END) user_active_waiting, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_active_txn, + SUM(CASE WHEN type = 'USER' AND status = 'INACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_inactive_txn, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Scheduler' THEN 1 ELSE 0 END) user_scheduler, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'User I/O' THEN 1 ELSE 0 END) user_io, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Application' THEN 1 ELSE 0 END) user_application, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Concurrency' THEN 1 ELSE 0 END) user_concurency, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Commit' THEN 1 ELSE 0 END) user_commit, + MIN(last_call_et) last_call_secs, + ROUND(AVG(last_call_et)) avg_last_call_secs + FROM all_sessions + GROUP BY + machine, + module +) +SELECT s.machine, + s.module, + s.total_pdbs, + s.total_sessions, + s.type_user, + s.type_background, + --s.type_recursive, + s.status_active, + s.status_inactive, + s.user_active, + s.user_inactive, + s.user_active_cpu, + s.user_active_waiting, + s.user_active_txn, + s.user_inactive_txn, + s.user_scheduler, + s.user_io, + s.user_application, + s.user_concurency, + s.user_commit, + s.last_call_secs, + s.avg_last_call_secs + FROM sessions s + ORDER BY + s.machine, + s.module +/ +PRO +PRO MACHINE SUMMARY +PRO ~~~~~~~~~~~~~~~ +WITH +all_sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ * FROM v$session WHERE &&cs_con_id. IN (1, con_id) +), +sessions +AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + machine, + COUNT(DISTINCT con_id) AS total_pdbs, + COUNT(*) total_sessions, + SUM(CASE WHEN type = 'USER' THEN 1 ELSE 0 END) type_user, + SUM(CASE WHEN type = 'BACKGROUND' THEN 1 ELSE 0 END) type_background, + --SUM(CASE WHEN type = 'RECURSIVE' THEN 1 ELSE 0 END) type_recursive, + SUM(CASE WHEN status = 'ACTIVE' THEN 1 ELSE 0 END) status_active, + SUM(CASE WHEN status = 'INACTIVE' THEN 1 ELSE 0 END) status_inactive, + SUM(CASE WHEN status = 'ACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_active, + SUM(CASE WHEN status = 'INACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_inactive, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state <> 'WAITING' THEN 1 ELSE 0 END) user_active_cpu, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' THEN 1 ELSE 0 END) user_active_waiting, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_active_txn, + SUM(CASE WHEN type = 'USER' AND status = 'INACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_inactive_txn, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Scheduler' THEN 1 ELSE 0 END) user_scheduler, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'User I/O' THEN 1 ELSE 0 END) user_io, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Application' THEN 1 ELSE 0 END) user_application, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Concurrency' THEN 1 ELSE 0 END) user_concurency, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Commit' THEN 1 ELSE 0 END) user_commit, + MIN(last_call_et) last_call_secs, + ROUND(AVG(last_call_et)) avg_last_call_secs + FROM all_sessions + GROUP BY + machine +) +SELECT s.machine, + s.total_pdbs, + s.total_sessions, + s.type_user, + s.type_background, + --s.type_recursive, + s.status_active, + s.status_inactive, + s.user_active, + s.user_inactive, + s.user_active_cpu, + s.user_active_waiting, + s.user_active_txn, + s.user_inactive_txn, + s.user_scheduler, + s.user_io, + s.user_application, + s.user_concurency, + s.user_commit, + s.last_call_secs, + s.avg_last_call_secs + FROM sessions s + ORDER BY + s.machine +/ +PRO +PRO PDB SUMMARY +PRO ~~~~~~~~~~~ +WITH +all_sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ * FROM v$session WHERE &&cs_con_id. IN (1, con_id) +), +sessions +AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + COUNT(*) total_sessions, + SUM(CASE WHEN type = 'USER' THEN 1 ELSE 0 END) type_user, + SUM(CASE WHEN type = 'BACKGROUND' THEN 1 ELSE 0 END) type_background, + --SUM(CASE WHEN type = 'RECURSIVE' THEN 1 ELSE 0 END) type_recursive, + SUM(CASE WHEN status = 'ACTIVE' THEN 1 ELSE 0 END) status_active, + SUM(CASE WHEN status = 'INACTIVE' THEN 1 ELSE 0 END) status_inactive, + SUM(CASE WHEN status = 'ACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_active, + SUM(CASE WHEN status = 'INACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_inactive, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state <> 'WAITING' THEN 1 ELSE 0 END) user_active_cpu, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' THEN 1 ELSE 0 END) user_active_waiting, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_active_txn, + SUM(CASE WHEN type = 'USER' AND status = 'INACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_inactive_txn, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Scheduler' THEN 1 ELSE 0 END) user_scheduler, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'User I/O' THEN 1 ELSE 0 END) user_io, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Application' THEN 1 ELSE 0 END) user_application, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Concurrency' THEN 1 ELSE 0 END) user_concurency, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Commit' THEN 1 ELSE 0 END) user_commit, + MIN(last_call_et) last_call_secs, + ROUND(AVG(last_call_et)) avg_last_call_secs + FROM all_sessions + GROUP BY + con_id +) +SELECT CASE WHEN c.name IS NULL THEN 'CDB' ELSE c.name END||'('||s.con_id||')' pdb, + s.total_sessions, + s.type_user, + s.type_background, + --s.type_recursive, + s.status_active, + s.status_inactive, + s.user_active, + s.user_inactive, + s.user_active_cpu, + s.user_active_waiting, + s.user_active_txn, + s.user_inactive_txn, + s.user_scheduler, + s.user_io, + s.user_application, + s.user_concurency, + s.user_commit, + s.last_call_secs, + s.avg_last_call_secs + FROM sessions s, + v$containers c + WHERE c.con_id(+) = s.con_id + AND c.open_mode(+) = 'READ WRITE' + ORDER BY + CASE WHEN c.name IS NULL THEN 'CDB' ELSE c.name END +/ +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sessions_PCTL_by_machine.sql b/csierra/cs_sessions_PCTL_by_machine.sql new file mode 100644 index 0000000..297b1ad --- /dev/null +++ b/csierra/cs_sessions_PCTL_by_machine.sql @@ -0,0 +1,347 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sessions_PCTL_by_machine.sql +-- +-- Purpose: Sessions Percentiles by Machine +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/01/19 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sessions_PCTL_by_machine.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sessions_PCTL_by_machine'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +COL con_id FOR 999999; +COL pdb_name FOR A30 TRUNC; +COL p95 FOR 99,999 HEA '95th|PCTL'; +COL p97 FOR 99,999 HEA '97th|PCTL'; +COL p98 FOR 99,999 HEA '98th|PCTL'; +COL p99 FOR 99,999 HEA '99th|PCTL'; +COL p99 FOR 99,999 HEA '99th|PCTL'; +COL p999 FOR 99,999 HEA '99.9th|PCTL'; +COL p9999 FOR 99,999 HEA '99.99th|PCTL'; +COL max FOR 99,999 HEA 'MAX'; +COL min_sample_time FOR A19 HEA 'SAMPLE_TIME_FROM'; +COL max_sample_time FOR A19 HEA 'SAMPLE_TIME_TO'; +COL max_date FOR A19; +-- +BREAK ON pdb_name SKIP PAGE DUPL; +COMPUTE SUM LABEL 'TOTAL' OF p95 p97 p98 p99 p999 p9999 max ON pdb_name; +-- +PRO +PRO Sessions Percentiles per PDB and Machine (when executed from CDB$ROOT) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +by_sample AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + h.con_id, + h.sample_id, + COUNT(*) cnt, + MIN(h.sample_time) min_sample_time, + MAX(h.sample_time) max_sample_time, + ROW_NUMBER() OVER (PARTITION BY h.machine, h.con_id ORDER BY COUNT(*) DESC, MIN(h.sample_time)) AS rn + FROM dba_hist_active_sess_history h + WHERE &&cs_con_id. = 1 + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.machine IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + h.machine, + h.con_id, + h.sample_id +UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + h.con_id, + h.sample_id, + COUNT(*) cnt, + MIN(h.sample_time) min_sample_time, + MAX(h.sample_time) max_sample_time, + ROW_NUMBER() OVER (PARTITION BY h.machine, h.con_id ORDER BY COUNT(*) DESC, MIN(h.sample_time)) AS rn + FROM v$active_session_history h + WHERE &&cs_con_id. = 1 + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +-- AND h.dbid = TO_NUMBER('&&cs_dbid.') +-- AND h.instance_number = TO_NUMBER('&&cs_instance_number.') +-- AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.machine IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + h.machine, + h.con_id, + h.sample_id +) +SELECT con_id, + (SELECT name FROM v$containers c WHERE c.con_id = s.con_id) AS pdb_name, + machine, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY cnt) p95, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY cnt) p97, + PERCENTILE_DISC(0.98) WITHIN GROUP (ORDER BY cnt) p98, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY cnt) p99, + PERCENTILE_DISC(0.999) WITHIN GROUP (ORDER BY cnt) p999, + -- PERCENTILE_DISC(0.9999) WITHIN GROUP (ORDER BY cnt) p9999, + MAX(cnt) max, + TO_CHAR(MIN(CASE rn WHEN 1 THEN min_sample_time END), 'YYYY-MM-DD"T"HH24:MI:SS') AS max_date, + TO_CHAR(MIN(min_sample_time), 'YYYY-MM-DD"T"HH24:MI:SS') min_sample_time, + TO_CHAR(MAX(max_sample_time), 'YYYY-MM-DD"T"HH24:MI:SS') max_sample_time + FROM by_sample s + GROUP BY + machine, + con_id + ORDER BY + 2, + 3 +/ +-- +BREAK ON machine SKIP PAGE DUPL; +COMPUTE SUM LABEL 'TOTAL' OF p95 p97 p98 p99 p999 p9999 max ON machine; +-- +PRO +PRO Sessions Percentiles per Machine and PDB (when executed from CDB$ROOT) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +by_sample AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + h.con_id, + h.sample_id, + COUNT(*) cnt, + MIN(h.sample_time) min_sample_time, + MAX(h.sample_time) max_sample_time, + ROW_NUMBER() OVER (PARTITION BY h.machine, h.con_id ORDER BY COUNT(*) DESC, MIN(h.sample_time)) AS rn + FROM dba_hist_active_sess_history h + WHERE &&cs_con_id. = 1 + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.machine IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + h.machine, + h.con_id, + h.sample_id +UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + h.con_id, + h.sample_id, + COUNT(*) cnt, + MIN(h.sample_time) min_sample_time, + MAX(h.sample_time) max_sample_time, + ROW_NUMBER() OVER (PARTITION BY h.machine, h.con_id ORDER BY COUNT(*) DESC, MIN(h.sample_time)) AS rn + FROM v$active_session_history h + WHERE &&cs_con_id. = 1 + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +-- AND h.dbid = TO_NUMBER('&&cs_dbid.') +-- AND h.instance_number = TO_NUMBER('&&cs_instance_number.') +-- AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.machine IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + h.machine, + h.con_id, + h.sample_id +) +SELECT machine, + con_id, + (SELECT name FROM v$containers c WHERE c.con_id = s.con_id) AS pdb_name, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY cnt) p95, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY cnt) p97, + PERCENTILE_DISC(0.98) WITHIN GROUP (ORDER BY cnt) p98, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY cnt) p99, + PERCENTILE_DISC(0.999) WITHIN GROUP (ORDER BY cnt) p999, + -- PERCENTILE_DISC(0.9999) WITHIN GROUP (ORDER BY cnt) p9999, + MAX(cnt) max, + TO_CHAR(MIN(CASE rn WHEN 1 THEN min_sample_time END), 'YYYY-MM-DD"T"HH24:MI:SS') AS max_date, + TO_CHAR(MIN(min_sample_time), 'YYYY-MM-DD"T"HH24:MI:SS') min_sample_time, + TO_CHAR(MAX(max_sample_time), 'YYYY-MM-DD"T"HH24:MI:SS') max_sample_time + FROM by_sample s + GROUP BY + machine, + con_id + ORDER BY + machine, + con_id +/ +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF p95 p97 p98 p99 p999 p9999 max ON REPORT; +-- +PRO +PRO Sessions Percentiles per PDB (when executed from CDB$ROOT) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +by_sample AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sample_id, + COUNT(*) cnt, + MIN(h.sample_time) min_sample_time, + MAX(h.sample_time) max_sample_time, + ROW_NUMBER() OVER (PARTITION BY h.con_id ORDER BY COUNT(*) DESC, MIN(h.sample_time)) AS rn + FROM dba_hist_active_sess_history h + WHERE &&cs_con_id. = 1 + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.machine IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + h.con_id, + h.sample_id +UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sample_id, + COUNT(*) cnt, + MIN(h.sample_time) min_sample_time, + MAX(h.sample_time) max_sample_time, + ROW_NUMBER() OVER (PARTITION BY h.con_id ORDER BY COUNT(*) DESC, MIN(h.sample_time)) AS rn + FROM v$active_session_history h + WHERE &&cs_con_id. = 1 + AND h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +-- AND h.dbid = TO_NUMBER('&&cs_dbid.') +-- AND h.instance_number = TO_NUMBER('&&cs_instance_number.') +-- AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.machine IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + h.con_id, + h.sample_id +) +SELECT con_id, + (SELECT name FROM v$containers c WHERE c.con_id = s.con_id) AS pdb_name, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY cnt) p95, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY cnt) p97, + PERCENTILE_DISC(0.98) WITHIN GROUP (ORDER BY cnt) p98, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY cnt) p99, + PERCENTILE_DISC(0.999) WITHIN GROUP (ORDER BY cnt) p999, + -- PERCENTILE_DISC(0.9999) WITHIN GROUP (ORDER BY cnt) p9999, + MAX(cnt) max, + TO_CHAR(MIN(CASE rn WHEN 1 THEN min_sample_time END), 'YYYY-MM-DD"T"HH24:MI:SS') AS max_date, + TO_CHAR(MIN(min_sample_time), 'YYYY-MM-DD"T"HH24:MI:SS') min_sample_time, + TO_CHAR(MAX(max_sample_time), 'YYYY-MM-DD"T"HH24:MI:SS') max_sample_time + FROM by_sample s + GROUP BY + con_id + ORDER BY + 2 +/ +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF p95 p97 p98 p99 p999 p9999 max ON REPORT; +-- +PRO +PRO Sessions Percentiles per Machine +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +by_sample AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + h.sample_id, + COUNT(*) cnt, + MIN(h.sample_time) min_sample_time, + MAX(h.sample_time) max_sample_time, + ROW_NUMBER() OVER (PARTITION BY h.machine ORDER BY COUNT(*) DESC, MIN(h.sample_time)) AS rn + FROM dba_hist_active_sess_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.machine IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + h.machine, + h.sample_id +UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.machine, + h.sample_id, + COUNT(*) cnt, + MIN(h.sample_time) min_sample_time, + MAX(h.sample_time) max_sample_time, + ROW_NUMBER() OVER (PARTITION BY h.machine ORDER BY COUNT(*) DESC, MIN(h.sample_time)) AS rn + FROM v$active_session_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +-- AND h.dbid = TO_NUMBER('&&cs_dbid.') +-- AND h.instance_number = TO_NUMBER('&&cs_instance_number.') +-- AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.machine IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + h.machine, + h.sample_id +) +SELECT machine, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY cnt) p95, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY cnt) p97, + PERCENTILE_DISC(0.98) WITHIN GROUP (ORDER BY cnt) p98, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY cnt) p99, + PERCENTILE_DISC(0.999) WITHIN GROUP (ORDER BY cnt) p999, + -- PERCENTILE_DISC(0.9999) WITHIN GROUP (ORDER BY cnt) p9999, + MAX(cnt) max, + TO_CHAR(MIN(CASE rn WHEN 1 THEN min_sample_time END), 'YYYY-MM-DD"T"HH24:MI:SS') AS max_date, + TO_CHAR(MIN(min_sample_time), 'YYYY-MM-DD"T"HH24:MI:SS') min_sample_time, + TO_CHAR(MAX(max_sample_time), 'YYYY-MM-DD"T"HH24:MI:SS') max_sample_time + FROM by_sample + GROUP BY + machine + ORDER BY + machine +/ +-- +CLEAR BREAK; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sessions_age_by_machine_chart.sql b/csierra/cs_sessions_age_by_machine_chart.sql new file mode 100644 index 0000000..777c514 --- /dev/null +++ b/csierra/cs_sessions_age_by_machine_chart.sql @@ -0,0 +1,309 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sessions_age_by_machine_chart.sql +-- +-- Purpose: Session Age by Machine (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/14 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sessions_age_by_machine_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sessions_age_by_machine_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO 3. Type (opt): [{USER}|BACKGROUND|RECURSIVE|*] +DEF cs2_type = '&3.'; +UNDEF 3; +COL cs2_type NEW_V cs2_type NOPRI; +SELECT CASE WHEN UPPER(TRIM(NVL('&&cs2_type.', 'USER'))) IN ('USER', 'BACKGROUND', 'RECURSIVE', '*') THEN UPPER(TRIM(NVL('&&cs2_type.', 'USER'))) ELSE 'USER' END AS cs2_type FROM DUAL +/ +PRO +PRO 4. Status (opt): [{INACTIVE}|ACTIVE|*|KILLED|CACHED|SNIPED] +DEF cs2_status = '&4.'; +UNDEF 4; +COL cs2_status NEW_V cs2_status NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs2_status.')) IN ('ACTIVE', 'INACTIVE', 'KILLED', 'CACHED', 'SNIPED', '*') THEN UPPER(TRIM('&&cs2_status.')) ELSE 'INACTIVE' END AS cs2_status FROM DUAL +/ +-- +COL machine HEA 'Machine' PRI; +SELECT COALESCE(machine, '"null"') AS machine, COUNT(*), MIN(snap_time) AS min_snap_time, MAX(snap_time) AS max_snap_time + FROM &&cs_tools_schema..iod_session + WHERE snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND '&&cs_con_id' IN ('1', con_id) + AND '&&cs2_type.' IN (type, '*') + AND '&&cs2_status.' IN (status, '*') + GROUP BY + COALESCE(machine, '"null"') + ORDER BY + 1 +/ +PRO +PRO 5. Machine (opt): +DEF cs2_machine = '&5.'; +UNDEF 5; +COL cs2_machine NEW_V cs2_machine NOPRI; +SELECT TRIM('"' FROM '&&cs2_machine.') AS cs2_machine FROM DUAL +/ +PRO +PRO 6. Metric [{AVG}|MAX]: +DEF cs2_metric = '&6.'; +UNDEF 6; +COL cs2_metric NEW_V cs2_metric NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs2_metric.')) IN ('AVG', 'MAX') THEN UPPER(TRIM('&&cs2_metric.')) ELSE 'AVG' END AS cs2_metric FROM DUAL +/ +-- +DEF spool_id_chart_footer_script = 'cs_sessions_by_machine_footer.sql'; +COL rn FOR 999; +DEF series_01 = ' '; +DEF series_02 = ' '; +DEF series_03 = ' '; +DEF series_04 = ' '; +DEF series_05 = ' '; +DEF series_06 = ' '; +DEF series_07 = ' '; +DEF series_08 = ' '; +DEF series_09 = ' '; +DEF series_10 = ' '; +DEF series_11 = ' '; +DEF series_12 = ' '; +DEF series_13 = ' '; +COL series_01 NEW_V series_01 FOR A64 TRUNC NOPRI; +COL series_02 NEW_V series_02 FOR A64 TRUNC NOPRI; +COL series_03 NEW_V series_03 FOR A64 TRUNC NOPRI; +COL series_04 NEW_V series_04 FOR A64 TRUNC NOPRI; +COL series_05 NEW_V series_05 FOR A64 TRUNC NOPRI; +COL series_06 NEW_V series_06 FOR A64 TRUNC NOPRI; +COL series_07 NEW_V series_07 FOR A64 TRUNC NOPRI; +COL series_08 NEW_V series_08 FOR A64 TRUNC NOPRI; +COL series_09 NEW_V series_09 FOR A64 TRUNC NOPRI; +COL series_10 NEW_V series_10 FOR A64 TRUNC NOPRI; +COL series_11 NEW_V series_11 FOR A64 TRUNC NOPRI; +COL series_12 NEW_V series_12 FOR A64 TRUNC NOPRI; +COL series_13 NEW_V series_13 FOR A64 TRUNC NOPRI; +-- +WITH +by_machine AS ( +SELECT COALESCE(machine, '"null"') AS machine, + ROW_NUMBER() OVER(ORDER BY &&cs2_metric.(last_call_et) DESC) AS rn + FROM &&cs_tools_schema..iod_session + WHERE snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_machine.' IS NULL OR COALESCE(machine, '"null"') LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND '&&cs_con_id' IN ('1', con_id) + AND '&&cs2_type.' IN (type, '*') + AND '&&cs2_status.' IN (status, '*') + GROUP BY + COALESCE(machine, '"null"') +), +top AS ( +SELECT machine, rn + FROM by_machine + WHERE rn < 13 +), +max_top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ MAX(rn) AS max_rn FROM top +), +bottom AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + (1 + max_top.max_rn) AS bottom_rn, -- up to 13 + '"all others"' AS dimension_group + FROM by_machine a, max_top + WHERE a.rn >= max_top.max_rn + GROUP BY + max_top.max_rn +), +top_and_bottom AS ( +SELECT rn, machine AS dimension_group + FROM top + UNION ALL +SELECT bottom_rn AS rn, dimension_group + FROM bottom +), +list AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, dimension_group + FROM top_and_bottom +) +SELECT rn, dimension_group, + COALESCE((SELECT dimension_group FROM list WHERE rn = 1), ' ') AS series_01, + COALESCE((SELECT dimension_group FROM list WHERE rn = 2), ' ') AS series_02, + COALESCE((SELECT dimension_group FROM list WHERE rn = 3), ' ') AS series_03, + COALESCE((SELECT dimension_group FROM list WHERE rn = 4), ' ') AS series_04, + COALESCE((SELECT dimension_group FROM list WHERE rn = 5), ' ') AS series_05, + COALESCE((SELECT dimension_group FROM list WHERE rn = 6), ' ') AS series_06, + COALESCE((SELECT dimension_group FROM list WHERE rn = 7), ' ') AS series_07, + COALESCE((SELECT dimension_group FROM list WHERE rn = 8), ' ') AS series_08, + COALESCE((SELECT dimension_group FROM list WHERE rn = 9), ' ') AS series_09, + COALESCE((SELECT dimension_group FROM list WHERE rn = 10), ' ') AS series_10, + COALESCE((SELECT dimension_group FROM list WHERE rn = 11), ' ') AS series_11, + COALESCE((SELECT dimension_group FROM list WHERE rn = 12), ' ') AS series_12, + COALESCE((SELECT dimension_group FROM list WHERE rn = 13), ' ') AS series_13 + FROM list + ORDER BY + rn +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Sessions by Machine between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = '&&cs2_metric. of Last Call Elapsed Time (Seconds)'; +DEF xaxis_title = 'Status:"&&cs2_status." Type:"&&cs2_type." Machine:"&&cs2_machine." Metric:"&&cs2_metric."'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_type." "&&cs2_status." "&&cs2_machine." "&&cs2_metric."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&series_01.', id:'01', type:'number'} +PRO ,{label:'&&series_02.', id:'02', type:'number'} +PRO ,{label:'&&series_03.', id:'03', type:'number'} +PRO ,{label:'&&series_04.', id:'04', type:'number'} +PRO ,{label:'&&series_05.', id:'05', type:'number'} +PRO ,{label:'&&series_06.', id:'06', type:'number'} +PRO ,{label:'&&series_07.', id:'07', type:'number'} +PRO ,{label:'&&series_08.', id:'08', type:'number'} +PRO ,{label:'&&series_09.', id:'09', type:'number'} +PRO ,{label:'&&series_10.', id:'10', type:'number'} +PRO ,{label:'&&series_11.', id:'11', type:'number'} +PRO ,{label:'&&series_12.', id:'12', type:'number'} +PRO ,{label:'&&series_13.', id:'13', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +all_sessions AS ( +SELECT snap_time AS time, + CASE COALESCE(machine, '"null"') + WHEN '&&series_01.' THEN '&&series_01.' + WHEN '&&series_02.' THEN '&&series_02.' + WHEN '&&series_03.' THEN '&&series_03.' + WHEN '&&series_04.' THEN '&&series_04.' + WHEN '&&series_05.' THEN '&&series_05.' + WHEN '&&series_06.' THEN '&&series_06.' + WHEN '&&series_07.' THEN '&&series_07.' + WHEN '&&series_08.' THEN '&&series_08.' + WHEN '&&series_09.' THEN '&&series_09.' + WHEN '&&series_10.' THEN '&&series_10.' + WHEN '&&series_11.' THEN '&&series_11.' + WHEN '&&series_12.' THEN '&&series_12.' + WHEN '&&series_13.' THEN '&&series_13.' + ELSE '"all others"' + END AS dimension_group, + last_call_et + FROM &&cs_tools_schema..iod_session + WHERE snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_machine.' IS NULL OR COALESCE(machine, '"null"') LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND '&&cs_con_id' IN ('1', con_id) + AND '&&cs2_type.' IN (type, '*') + AND '&&cs2_status.' IN (status, '*') +), +my_query AS ( +SELECT time, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_01.' THEN last_call_et END) AS sessions_01, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_02.' THEN last_call_et END) AS sessions_02, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_03.' THEN last_call_et END) AS sessions_03, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_04.' THEN last_call_et END) AS sessions_04, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_05.' THEN last_call_et END) AS sessions_05, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_06.' THEN last_call_et END) AS sessions_06, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_07.' THEN last_call_et END) AS sessions_07, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_08.' THEN last_call_et END) AS sessions_08, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_09.' THEN last_call_et END) AS sessions_09, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_10.' THEN last_call_et END) AS sessions_10, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_11.' THEN last_call_et END) AS sessions_11, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_12.' THEN last_call_et END) AS sessions_12, + &&cs2_metric.(CASE WHEN dimension_group = '&&series_13.' THEN last_call_et END) AS sessions_13 + FROM all_sessions + GROUP BY + time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.sessions_01)|| + ','||num_format(q.sessions_02)|| + ','||num_format(q.sessions_03)|| + ','||num_format(q.sessions_04)|| + ','||num_format(q.sessions_05)|| + ','||num_format(q.sessions_06)|| + ','||num_format(q.sessions_07)|| + ','||num_format(q.sessions_08)|| + ','||num_format(q.sessions_09)|| + ','||num_format(q.sessions_10)|| + ','||num_format(q.sessions_11)|| + ','||num_format(q.sessions_12)|| + ','||num_format(q.sessions_13)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sessions_by_machine_chart.sql b/csierra/cs_sessions_by_machine_chart.sql new file mode 100644 index 0000000..8ab7673 --- /dev/null +++ b/csierra/cs_sessions_by_machine_chart.sql @@ -0,0 +1,301 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sessions_by_machine_chart.sql +-- +-- Purpose: Sessions by Machine (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/14 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sessions_by_machine_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sessions_by_machine_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO 3. Type (opt): [{USER}|BACKGROUND|RECURSIVE|*] +DEF cs2_type = '&3.'; +UNDEF 3; +COL cs2_type NEW_V cs2_type NOPRI; +SELECT CASE WHEN UPPER(TRIM(NVL('&&cs2_type.', 'USER'))) IN ('USER', 'BACKGROUND', 'RECURSIVE') THEN UPPER(TRIM(NVL('&&cs2_type.', 'USER'))) ELSE '*' END AS cs2_type FROM DUAL +/ +PRO +PRO 4. Status (opt): [{*}|ACTIVE|INACTIVE|KILLED|CACHED|SNIPED] +DEF cs2_status = '&4.'; +UNDEF 4; +COL cs2_status NEW_V cs2_status NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs2_status.')) IN ('ACTIVE', 'INACTIVE', 'KILLED', 'CACHED', 'SNIPED') THEN UPPER(TRIM('&&cs2_status.')) ELSE '*' END AS cs2_status FROM DUAL +/ +-- +COL machine HEA 'Machine' PRI; +SELECT COALESCE(machine, '"null"') AS machine, COUNT(*), MIN(snap_time) AS min_snap_time, MAX(snap_time) AS max_snap_time + FROM &&cs_tools_schema..iod_session + WHERE snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND '&&cs_con_id' IN ('1', con_id) + AND '&&cs2_type.' IN (type, '*') + AND '&&cs2_status.' IN (status, '*') + GROUP BY + COALESCE(machine, '"null"') + ORDER BY + 1 +/ +PRO +PRO 5. Machine (opt): +DEF cs2_machine = '&5.'; +UNDEF 5; +COL cs2_machine NEW_V cs2_machine NOPRI; +SELECT TRIM('"' FROM '&&cs2_machine.') AS cs2_machine FROM DUAL +/ +-- +DEF spool_id_chart_footer_script = 'cs_sessions_by_machine_footer.sql'; +COL rn FOR 999; +DEF series_01 = ' '; +DEF series_02 = ' '; +DEF series_03 = ' '; +DEF series_04 = ' '; +DEF series_05 = ' '; +DEF series_06 = ' '; +DEF series_07 = ' '; +DEF series_08 = ' '; +DEF series_09 = ' '; +DEF series_10 = ' '; +DEF series_11 = ' '; +DEF series_12 = ' '; +DEF series_13 = ' '; +COL series_01 NEW_V series_01 FOR A64 TRUNC NOPRI; +COL series_02 NEW_V series_02 FOR A64 TRUNC NOPRI; +COL series_03 NEW_V series_03 FOR A64 TRUNC NOPRI; +COL series_04 NEW_V series_04 FOR A64 TRUNC NOPRI; +COL series_05 NEW_V series_05 FOR A64 TRUNC NOPRI; +COL series_06 NEW_V series_06 FOR A64 TRUNC NOPRI; +COL series_07 NEW_V series_07 FOR A64 TRUNC NOPRI; +COL series_08 NEW_V series_08 FOR A64 TRUNC NOPRI; +COL series_09 NEW_V series_09 FOR A64 TRUNC NOPRI; +COL series_10 NEW_V series_10 FOR A64 TRUNC NOPRI; +COL series_11 NEW_V series_11 FOR A64 TRUNC NOPRI; +COL series_12 NEW_V series_12 FOR A64 TRUNC NOPRI; +COL series_13 NEW_V series_13 FOR A64 TRUNC NOPRI; +-- +WITH +by_machine AS ( +SELECT COALESCE(machine, '"null"') AS machine, + ROW_NUMBER() OVER(ORDER BY COUNT(*) DESC) AS rn + FROM &&cs_tools_schema..iod_session + WHERE snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_machine.' IS NULL OR COALESCE(machine, '"null"') LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND '&&cs_con_id' IN ('1', con_id) + AND '&&cs2_type.' IN (type, '*') + AND '&&cs2_status.' IN (status, '*') + GROUP BY + COALESCE(machine, '"null"') +), +top AS ( +SELECT machine, rn + FROM by_machine + WHERE rn < 13 +), +max_top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ MAX(rn) AS max_rn FROM top +), +bottom AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + (1 + max_top.max_rn) AS bottom_rn, -- up to 13 + '"all others"' AS dimension_group + FROM by_machine a, max_top + WHERE a.rn >= max_top.max_rn + GROUP BY + max_top.max_rn +), +top_and_bottom AS ( +SELECT rn, machine AS dimension_group + FROM top + UNION ALL +SELECT bottom_rn AS rn, dimension_group + FROM bottom +), +list AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, dimension_group + FROM top_and_bottom +) +SELECT rn, dimension_group, + COALESCE((SELECT dimension_group FROM list WHERE rn = 1), ' ') AS series_01, + COALESCE((SELECT dimension_group FROM list WHERE rn = 2), ' ') AS series_02, + COALESCE((SELECT dimension_group FROM list WHERE rn = 3), ' ') AS series_03, + COALESCE((SELECT dimension_group FROM list WHERE rn = 4), ' ') AS series_04, + COALESCE((SELECT dimension_group FROM list WHERE rn = 5), ' ') AS series_05, + COALESCE((SELECT dimension_group FROM list WHERE rn = 6), ' ') AS series_06, + COALESCE((SELECT dimension_group FROM list WHERE rn = 7), ' ') AS series_07, + COALESCE((SELECT dimension_group FROM list WHERE rn = 8), ' ') AS series_08, + COALESCE((SELECT dimension_group FROM list WHERE rn = 9), ' ') AS series_09, + COALESCE((SELECT dimension_group FROM list WHERE rn = 10), ' ') AS series_10, + COALESCE((SELECT dimension_group FROM list WHERE rn = 11), ' ') AS series_11, + COALESCE((SELECT dimension_group FROM list WHERE rn = 12), ' ') AS series_12, + COALESCE((SELECT dimension_group FROM list WHERE rn = 13), ' ') AS series_13 + FROM list + ORDER BY + rn +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Sessions by Machine between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = 'Sessions'; +DEF xaxis_title = 'Status:"&&cs2_status." Type:"&&cs2_type." Machine:"&&cs2_machine."'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_type." "&&cs2_status." "&&cs2_machine."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&series_01.', id:'01', type:'number'} +PRO ,{label:'&&series_02.', id:'02', type:'number'} +PRO ,{label:'&&series_03.', id:'03', type:'number'} +PRO ,{label:'&&series_04.', id:'04', type:'number'} +PRO ,{label:'&&series_05.', id:'05', type:'number'} +PRO ,{label:'&&series_06.', id:'06', type:'number'} +PRO ,{label:'&&series_07.', id:'07', type:'number'} +PRO ,{label:'&&series_08.', id:'08', type:'number'} +PRO ,{label:'&&series_09.', id:'09', type:'number'} +PRO ,{label:'&&series_10.', id:'10', type:'number'} +PRO ,{label:'&&series_11.', id:'11', type:'number'} +PRO ,{label:'&&series_12.', id:'12', type:'number'} +PRO ,{label:'&&series_13.', id:'13', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +all_sessions AS ( +SELECT snap_time AS time, + CASE COALESCE(machine, '"null"') + WHEN '&&series_01.' THEN '&&series_01.' + WHEN '&&series_02.' THEN '&&series_02.' + WHEN '&&series_03.' THEN '&&series_03.' + WHEN '&&series_04.' THEN '&&series_04.' + WHEN '&&series_05.' THEN '&&series_05.' + WHEN '&&series_06.' THEN '&&series_06.' + WHEN '&&series_07.' THEN '&&series_07.' + WHEN '&&series_08.' THEN '&&series_08.' + WHEN '&&series_09.' THEN '&&series_09.' + WHEN '&&series_10.' THEN '&&series_10.' + WHEN '&&series_11.' THEN '&&series_11.' + WHEN '&&series_12.' THEN '&&series_12.' + WHEN '&&series_13.' THEN '&&series_13.' + ELSE '"all others"' + END AS dimension_group + FROM &&cs_tools_schema..iod_session + WHERE snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_machine.' IS NULL OR COALESCE(machine, '"null"') LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND '&&cs_con_id' IN ('1', con_id) + AND '&&cs2_type.' IN (type, '*') + AND '&&cs2_status.' IN (status, '*') +), +my_query AS ( +SELECT time, + SUM(CASE WHEN dimension_group = '&&series_01.' THEN 1 ELSE 0 END) AS sessions_01, + SUM(CASE WHEN dimension_group = '&&series_02.' THEN 1 ELSE 0 END) AS sessions_02, + SUM(CASE WHEN dimension_group = '&&series_03.' THEN 1 ELSE 0 END) AS sessions_03, + SUM(CASE WHEN dimension_group = '&&series_04.' THEN 1 ELSE 0 END) AS sessions_04, + SUM(CASE WHEN dimension_group = '&&series_05.' THEN 1 ELSE 0 END) AS sessions_05, + SUM(CASE WHEN dimension_group = '&&series_06.' THEN 1 ELSE 0 END) AS sessions_06, + SUM(CASE WHEN dimension_group = '&&series_07.' THEN 1 ELSE 0 END) AS sessions_07, + SUM(CASE WHEN dimension_group = '&&series_08.' THEN 1 ELSE 0 END) AS sessions_08, + SUM(CASE WHEN dimension_group = '&&series_09.' THEN 1 ELSE 0 END) AS sessions_09, + SUM(CASE WHEN dimension_group = '&&series_10.' THEN 1 ELSE 0 END) AS sessions_10, + SUM(CASE WHEN dimension_group = '&&series_11.' THEN 1 ELSE 0 END) AS sessions_11, + SUM(CASE WHEN dimension_group = '&&series_12.' THEN 1 ELSE 0 END) AS sessions_12, + SUM(CASE WHEN dimension_group = '&&series_13.' THEN 1 ELSE 0 END) AS sessions_13 + FROM all_sessions + GROUP BY + time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.sessions_01)|| + ','||num_format(q.sessions_02)|| + ','||num_format(q.sessions_03)|| + ','||num_format(q.sessions_04)|| + ','||num_format(q.sessions_05)|| + ','||num_format(q.sessions_06)|| + ','||num_format(q.sessions_07)|| + ','||num_format(q.sessions_08)|| + ','||num_format(q.sessions_09)|| + ','||num_format(q.sessions_10)|| + ','||num_format(q.sessions_11)|| + ','||num_format(q.sessions_12)|| + ','||num_format(q.sessions_13)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sessions_by_pdb_chart.sql b/csierra/cs_sessions_by_pdb_chart.sql new file mode 100644 index 0000000..fa95625 --- /dev/null +++ b/csierra/cs_sessions_by_pdb_chart.sql @@ -0,0 +1,304 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sessions_by_pdb_chart.sql +-- +-- Purpose: Sessions by PDB (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/14 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sessions_by_pdb_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sessions_by_pdb_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO 3. Type (opt): [{USER}|BACKGROUND|RECURSIVE|*] +DEF cs2_type = '&3.'; +UNDEF 3; +COL cs2_type NEW_V cs2_type NOPRI; +SELECT CASE WHEN UPPER(TRIM(NVL('&&cs2_type.', 'USER'))) IN ('USER', 'BACKGROUND', 'RECURSIVE') THEN UPPER(TRIM(NVL('&&cs2_type.', 'USER'))) ELSE '*' END AS cs2_type FROM DUAL +/ +-- +PRO +PRO 4. Status (opt): [{*}|ACTIVE|INACTIVE|KILLED|CACHED|SNIPED] +DEF cs2_status = '&4.'; +UNDEF 4; +COL cs2_status NEW_V cs2_status NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs2_status.')) IN ('ACTIVE', 'INACTIVE', 'KILLED', 'CACHED', 'SNIPED') THEN UPPER(TRIM('&&cs2_status.')) ELSE '*' END AS cs2_status FROM DUAL +/ +-- +COL machine HEA 'Machine' PRI; +SELECT COALESCE(machine, '"null"') AS machine, COUNT(*), MIN(snap_time) AS min_snap_time, MAX(snap_time) AS max_snap_time + FROM &&cs_tools_schema..iod_session + WHERE snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND '&&cs_con_id' IN ('1', con_id) + AND '&&cs2_type.' IN (type, '*') + AND '&&cs2_status.' IN (status, '*') + GROUP BY + COALESCE(machine, '"null"') + ORDER BY + 1 +/ +PRO +PRO 5. Machine (opt): +DEF cs2_machine = '&5.'; +UNDEF 5; +COL cs2_machine NEW_V cs2_machine NOPRI; +SELECT TRIM('"' FROM '&&cs2_machine.') AS cs2_machine FROM DUAL +/ +-- +DEF spool_id_chart_footer_script = 'cs_sessions_by_machine_footer.sql'; +COL rn FOR 999; +DEF series_01 = ' '; +DEF series_02 = ' '; +DEF series_03 = ' '; +DEF series_04 = ' '; +DEF series_05 = ' '; +DEF series_06 = ' '; +DEF series_07 = ' '; +DEF series_08 = ' '; +DEF series_09 = ' '; +DEF series_10 = ' '; +DEF series_11 = ' '; +DEF series_12 = ' '; +DEF series_13 = ' '; +COL series_01 NEW_V series_01 FOR A64 TRUNC NOPRI; +COL series_02 NEW_V series_02 FOR A64 TRUNC NOPRI; +COL series_03 NEW_V series_03 FOR A64 TRUNC NOPRI; +COL series_04 NEW_V series_04 FOR A64 TRUNC NOPRI; +COL series_05 NEW_V series_05 FOR A64 TRUNC NOPRI; +COL series_06 NEW_V series_06 FOR A64 TRUNC NOPRI; +COL series_07 NEW_V series_07 FOR A64 TRUNC NOPRI; +COL series_08 NEW_V series_08 FOR A64 TRUNC NOPRI; +COL series_09 NEW_V series_09 FOR A64 TRUNC NOPRI; +COL series_10 NEW_V series_10 FOR A64 TRUNC NOPRI; +COL series_11 NEW_V series_11 FOR A64 TRUNC NOPRI; +COL series_12 NEW_V series_12 FOR A64 TRUNC NOPRI; +COL series_13 NEW_V series_13 FOR A64 TRUNC NOPRI; +-- +WITH +by_pdb AS ( +SELECT h.con_id||' '||c.name AS pdb, + ROW_NUMBER() OVER(ORDER BY COUNT(*) DESC) AS rn + FROM &&cs_tools_schema..iod_session h, v$containers c + WHERE h.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_machine.' IS NULL OR COALESCE(h.machine, '"null"') LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND '&&cs_con_id' IN ('1', h.con_id) + AND '&&cs2_type.' IN (h.type, '*') + AND '&&cs2_status.' IN (h.status, '*') + AND c.con_id(+) = h.con_id + GROUP BY + h.con_id||' '||c.name +), +top AS ( +SELECT pdb, rn + FROM by_pdb + WHERE rn < 13 +), +max_top AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ MAX(rn) AS max_rn FROM top +), +bottom AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + (1 + max_top.max_rn) AS bottom_rn, -- up to 13 + '"all others"' AS dimension_group + FROM by_pdb a, max_top + WHERE a.rn >= max_top.max_rn + GROUP BY + max_top.max_rn +), +top_and_bottom AS ( +SELECT rn, pdb AS dimension_group + FROM top + UNION ALL +SELECT bottom_rn AS rn, dimension_group + FROM bottom +), +list AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, dimension_group + FROM top_and_bottom +) +SELECT rn, dimension_group, + COALESCE((SELECT dimension_group FROM list WHERE rn = 1), ' ') AS series_01, + COALESCE((SELECT dimension_group FROM list WHERE rn = 2), ' ') AS series_02, + COALESCE((SELECT dimension_group FROM list WHERE rn = 3), ' ') AS series_03, + COALESCE((SELECT dimension_group FROM list WHERE rn = 4), ' ') AS series_04, + COALESCE((SELECT dimension_group FROM list WHERE rn = 5), ' ') AS series_05, + COALESCE((SELECT dimension_group FROM list WHERE rn = 6), ' ') AS series_06, + COALESCE((SELECT dimension_group FROM list WHERE rn = 7), ' ') AS series_07, + COALESCE((SELECT dimension_group FROM list WHERE rn = 8), ' ') AS series_08, + COALESCE((SELECT dimension_group FROM list WHERE rn = 9), ' ') AS series_09, + COALESCE((SELECT dimension_group FROM list WHERE rn = 10), ' ') AS series_10, + COALESCE((SELECT dimension_group FROM list WHERE rn = 11), ' ') AS series_11, + COALESCE((SELECT dimension_group FROM list WHERE rn = 12), ' ') AS series_12, + COALESCE((SELECT dimension_group FROM list WHERE rn = 13), ' ') AS series_13 + FROM list + ORDER BY + rn +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Sessions by PDB between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = 'Sessions'; +DEF xaxis_title = 'Status:"&&cs2_status." Type:"&&cs2_type." Machine:"&&cs2_machine."'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_type." "&&cs2_status." "&&cs2_machine."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&series_01.', id:'01', type:'number'} +PRO ,{label:'&&series_02.', id:'02', type:'number'} +PRO ,{label:'&&series_03.', id:'03', type:'number'} +PRO ,{label:'&&series_04.', id:'04', type:'number'} +PRO ,{label:'&&series_05.', id:'05', type:'number'} +PRO ,{label:'&&series_06.', id:'06', type:'number'} +PRO ,{label:'&&series_07.', id:'07', type:'number'} +PRO ,{label:'&&series_08.', id:'08', type:'number'} +PRO ,{label:'&&series_09.', id:'09', type:'number'} +PRO ,{label:'&&series_10.', id:'10', type:'number'} +PRO ,{label:'&&series_11.', id:'11', type:'number'} +PRO ,{label:'&&series_12.', id:'12', type:'number'} +PRO ,{label:'&&series_13.', id:'13', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +all_sessions AS ( +SELECT snap_time AS time, + CASE h.con_id||' '||c.name + WHEN '&&series_01.' THEN '&&series_01.' + WHEN '&&series_02.' THEN '&&series_02.' + WHEN '&&series_03.' THEN '&&series_03.' + WHEN '&&series_04.' THEN '&&series_04.' + WHEN '&&series_05.' THEN '&&series_05.' + WHEN '&&series_06.' THEN '&&series_06.' + WHEN '&&series_07.' THEN '&&series_07.' + WHEN '&&series_08.' THEN '&&series_08.' + WHEN '&&series_09.' THEN '&&series_09.' + WHEN '&&series_10.' THEN '&&series_10.' + WHEN '&&series_11.' THEN '&&series_11.' + WHEN '&&series_12.' THEN '&&series_12.' + WHEN '&&series_13.' THEN '&&series_13.' + ELSE '"all others"' + END AS dimension_group + FROM &&cs_tools_schema..iod_session h, v$containers c + WHERE h.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_machine.' IS NULL OR COALESCE(h.machine, '"null"') LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND '&&cs_con_id' IN ('1', h.con_id) + AND '&&cs2_type.' IN (h.type, '*') + AND '&&cs2_status.' IN (h.status, '*') + AND c.con_id(+) = h.con_id +), +my_query AS ( +SELECT time, + SUM(CASE WHEN dimension_group = '&&series_01.' THEN 1 ELSE 0 END) AS sessions_01, + SUM(CASE WHEN dimension_group = '&&series_02.' THEN 1 ELSE 0 END) AS sessions_02, + SUM(CASE WHEN dimension_group = '&&series_03.' THEN 1 ELSE 0 END) AS sessions_03, + SUM(CASE WHEN dimension_group = '&&series_04.' THEN 1 ELSE 0 END) AS sessions_04, + SUM(CASE WHEN dimension_group = '&&series_05.' THEN 1 ELSE 0 END) AS sessions_05, + SUM(CASE WHEN dimension_group = '&&series_06.' THEN 1 ELSE 0 END) AS sessions_06, + SUM(CASE WHEN dimension_group = '&&series_07.' THEN 1 ELSE 0 END) AS sessions_07, + SUM(CASE WHEN dimension_group = '&&series_08.' THEN 1 ELSE 0 END) AS sessions_08, + SUM(CASE WHEN dimension_group = '&&series_09.' THEN 1 ELSE 0 END) AS sessions_09, + SUM(CASE WHEN dimension_group = '&&series_10.' THEN 1 ELSE 0 END) AS sessions_10, + SUM(CASE WHEN dimension_group = '&&series_11.' THEN 1 ELSE 0 END) AS sessions_11, + SUM(CASE WHEN dimension_group = '&&series_12.' THEN 1 ELSE 0 END) AS sessions_12, + SUM(CASE WHEN dimension_group = '&&series_13.' THEN 1 ELSE 0 END) AS sessions_13 + FROM all_sessions + GROUP BY + time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.sessions_01)|| + ','||num_format(q.sessions_02)|| + ','||num_format(q.sessions_03)|| + ','||num_format(q.sessions_04)|| + ','||num_format(q.sessions_05)|| + ','||num_format(q.sessions_06)|| + ','||num_format(q.sessions_07)|| + ','||num_format(q.sessions_08)|| + ','||num_format(q.sessions_09)|| + ','||num_format(q.sessions_10)|| + ','||num_format(q.sessions_11)|| + ','||num_format(q.sessions_12)|| + ','||num_format(q.sessions_13)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sessions_by_type_and_status_chart.sql b/csierra/cs_sessions_by_type_and_status_chart.sql new file mode 100644 index 0000000..57d3d4f --- /dev/null +++ b/csierra/cs_sessions_by_type_and_status_chart.sql @@ -0,0 +1,142 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sessions_by_type_and_status_chart.sql +-- +-- Purpose: Sessions by Type and Status (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/14 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sessions_by_type_and_status_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sessions_by_type_and_status_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL machine HEA 'Machine'; +SELECT machine, COUNT(*), MIN(snap_time) AS min_snap_time, MAX(snap_time) AS max_snap_time + FROM &&cs_tools_schema..iod_session + WHERE snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND &&cs_con_id IN (1, con_id) + GROUP BY + machine + ORDER BY + machine +/ +PRO +PRO 3. Machine (opt): +DEF cs2_machine = '&3.'; +UNDEF 3; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Sessions by Type and Status between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = 'Sessions'; +DEF xaxis_title = 'Sessions &&cs2_machine.'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_machine."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'USER - ACTIVE', id:'1', type:'number'} +PRO ,{label:'USER - INACTIVE', id:'2', type:'number'} +PRO ,{label:'RECURSIVE', id:'3', type:'number'} +PRO ,{label:'BACKGROUND', id:'4', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT snap_time AS time, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' THEN 1 ELSE 0 END) AS user_active, + SUM(CASE WHEN type = 'USER' AND status <> 'ACTIVE' THEN 1 ELSE 0 END) AS user_inactive, + SUM(CASE WHEN type = 'RECURSIVE' THEN 1 ELSE 0 END) AS recursive, + SUM(CASE WHEN type = 'BACKGROUND' THEN 1 ELSE 0 END) AS background + FROM &&cs_tools_schema..iod_session + WHERE snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ('&&cs2_machine.' IS NULL OR machine LIKE CHR(37)||'&&cs2_machine.'||CHR(37)) + AND &&cs_con_id IN (1, con_id) + GROUP BY + snap_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.user_active)|| + ','||num_format(q.user_inactive)|| + ','||num_format(q.recursive)|| + ','||num_format(q.background)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sessions_high_pga_memory.sql b/csierra/cs_sessions_high_pga_memory.sql new file mode 100644 index 0000000..5b338cd --- /dev/null +++ b/csierra/cs_sessions_high_pga_memory.sql @@ -0,0 +1,12 @@ +rem https://connor-mcdonald.com/2022/03/10/dont-run-tight-on-pga/ +select ROUND(st.value/1024/1024/1024, 3) AS gb, s.sid, s.serial#, s.program, s.event, s.sql_id, s.prev_sql_id +from v$session s, + v$sesstat st, + v$statname sn +where st.value > 100*1024*1024 +and st.sid = s.sid +and st.statistic# = sn.statistic# +and sn.name = 'session pga memory' +order by st.value desc +/ + diff --git a/csierra/cs_sessions_hist.sql b/csierra/cs_sessions_hist.sql new file mode 100644 index 0000000..b5edd30 --- /dev/null +++ b/csierra/cs_sessions_hist.sql @@ -0,0 +1,318 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sessions_hist.sql +-- +-- Purpose: Simple list all historical Sessions (all types and all statuses) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sessions_hist.sql +-- +-- Notes: Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sessions_hist'; +-- +PRO +PRO Specify the number of days of snapshots to choose from +PRO +PRO Enter number of days: [{1}|0-365] +DEF num_days = '&1.' +UNDEF 1; +COL num_days NEW_V num_days NOPRI; +SELECT NVL('&&num_days.', '1') AS num_days FROM DUAL +/ +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +COL sessions FOR 999,990; +COL snap_time NEW_V snap_time; +SELECT TO_CHAR(snap_time, '&&cs_datetime_full_format.') AS snap_time, COUNT(*) sessions + FROM &&cs_tools_schema..iod_session + WHERE &&cs_con_id. IN (1, con_id) AND snap_time > SYSDATE - TO_NUMBER('&&num_days.') + GROUP BY + snap_time + ORDER BY + snap_time +/ +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +PRO +PRO Enter Snap Time: [{&&snap_time.}] +DEF cs_snap_time = '&2.' +UNDEF 2; +COL cs_snap_time NEW_V cs_snap_time NOPRI; +SELECT NVL('&&cs_snap_time.', '&&snap_time.') AS cs_snap_time FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&num_days." "&&cs_snap_time." +@@cs_internal/cs_spool_id.sql +-- +PRO NUM_DAYS : "&&num_days." [{1}|0-365] +PRO SNAP_TIME : "&&cs_snap_time." [{&&snap_time.}] +-- +COL status FOR A8 PRI; +COL last_call_et FOR 999,999,999,990 HEA 'LAST_CALL|ET_SECS'; +COL logon_age FOR 999,999,990 HEA 'LOGON|AGE_SECS'; +COL sid_serial FOR A12; +COL blocker FOR 9999990; +COL module_action_program FOR A50 TRUNC; +COL sql_text FOR A50 TRUNC; +COL pdb_name FOR A35 TRUNC; +COL timed_event FOR A60 HEA 'TIMED EVENT' TRUNC; +COL type FOR A10 TRUNC; +COL username FOR A20 TRUNC; +COL txn FOR A3; +COL last_call_time FOR A19; +COL logon_time FOR A19; +-- +SET FEED ON; +PRO +PRO SESSIONS (as of &&cs_snap_time.) +PRO ~~~~~~~~ +WITH +v_session AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ * FROM &&cs_tools_schema..iod_session WHERE &&cs_con_id. IN (1, con_id) AND snap_time = TO_DATE('&&cs_snap_time.', '&&cs_datetime_full_format.') +), +sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + sid, + serial#, + CASE WHEN final_blocking_session_status = 'VALID' THEN final_blocking_session END AS blocker, + type, + status, + username, + paddr, + taddr, + logon_time, + last_call_et, + (TO_DATE('&&cs_snap_time.', '&&cs_datetime_full_format.') - logon_time) * 24 * 3600 AS logon_age, + COALESCE(sql_id, prev_sql_id) sql_id, + machine, + 's:'||state|| + CASE WHEN wait_class IS NOT NULL THEN ' w:'||wait_class END|| + CASE WHEN event IS NOT NULL THEN ' - '||event END AS + timed_event, + CASE WHEN TRIM(module) IS NOT NULL THEN 'm:'||TRIM(module)||' ' END|| + CASE WHEN TRIM(action) IS NOT NULL THEN 'a:'||TRIM(action)||' ' END|| + CASE WHEN TRIM(program) IS NOT NULL THEN 'p:'||TRIM(program) END AS + module_action_program + FROM v_session +) +SELECT se.last_call_et, + (TO_DATE('&&cs_snap_time.', '&&cs_datetime_full_format.') - (se.last_call_et / 3600 / 24)) AS last_call_time, + se.logon_age, + se.logon_time, + se.sid||','||se.serial# sid_serial, + se.blocker, + se.type, + se.status, + se.username, + CASE WHEN se.taddr IS NOT NULL THEN 'TXN' END AS txn, + se.timed_event, + se.sql_id, + (SELECT sql_text FROM v$sql sq WHERE sq.sql_id = se.sql_id AND ROWNUM = 1) sql_text, + se.machine, + se.module_action_program, + c.name||'('||se.con_id||')' AS pdb_name + FROM sessions se, + v$containers c + WHERE c.con_id(+) = se.con_id + AND c.open_mode(+) = 'READ WRITE' + ORDER BY + se.last_call_et, + se.logon_age, + se.sid, + se.serial# +/ +SET FEED OFF; +-- +COL pdb FOR A35; +COL total_sessions FOR 99999999 HEA 'TOTAL|SESSIONS'; +COL status_active FOR 999999 HEA 'STATUS|ACTIVE'; +COL status_inactive FOR 99999999 HEA 'STATUS|INACTIVE'; +COL type_user FOR 999999 HEA 'TYPE|USER'; +COL type_background FOR 9999999999 HEA 'TYPE|BACKGROUND'; +COL type_recursive FOR 9999999999 HEA 'TYPE|RECURSIVE'; +COL user_active FOR 999999 HEA 'USER|ACTIVE'; +COL user_inactive FOR 99999999 HEA 'USER|INACTIVE'; +COL user_active_cpu FOR 999999 HEA 'USER|ACTIVE|ON_CPU'; +COL user_active_waiting FOR 9999999 HEA 'USER|ACTIVE|WAITING'; +COL user_scheduler FOR 999999999 HEA 'USER|ACTIVE|WAITING|SCHEDULER'; +COL user_io FOR 99999999 HEA 'USER|ACTIVE|WAITING|USER_I/O'; +COL user_application FOR 99999999999 HEA 'USER|ACTIVE|WAITING|APPLICATION'; +COL user_concurency FOR 99999999999 HEA 'USER|ACTIVE|WAITING|CONCURRENCY'; +COL user_commit FOR 9999999 HEA 'USER|ACTIVE|WAITING|COMMIT'; +COL last_call_secs FOR 999,999,990 HEA 'LAST_CALL|SECONDS'; +COL avg_last_call_secs FOR 999,999,990 HEA 'AVG_LAST_CALL|SECONDS'; +-- +COL pdb FOR A35; +COL total_sessions FOR 99999999 HEA 'TOTAL|SESSIONS'; +COL status_active FOR 999999 HEA 'STATUS|ACTIVE'; +COL status_inactive FOR 99999999 HEA 'STATUS|INACTIVE'; +COL type_user FOR 999999 HEA 'TYPE|USER'; +COL type_background FOR 9999999999 HEA 'TYPE|BACKGROUND'; +COL type_recursive FOR 9999999999 HEA 'TYPE|RECURSIVE'; +COL user_active FOR 999999 HEA 'USER|ACTIVE'; +COL user_inactive FOR 99999999 HEA 'USER|INACTIVE'; +COL user_active_cpu FOR 999999 HEA 'USER|ACTIVE|ON_CPU'; +COL user_active_txn FOR 999999 HEA 'USER|ACTIVE|TXN'; +COL user_inactive_txn FOR 999999 HEA 'USER|INACTIVE|TXN'; +COL user_active_waiting FOR 9999999 HEA 'USER|ACTIVE|WAITING'; +COL user_scheduler FOR 999999999 HEA 'USER|ACTIVE|WAITING|SCHEDULER'; +COL user_io FOR 99999999 HEA 'USER|ACTIVE|WAITING|USER_I/O'; +COL user_application FOR 99999999999 HEA 'USER|ACTIVE|WAITING|APPLICATION'; +COL user_concurency FOR 99999999999 HEA 'USER|ACTIVE|WAITING|CONCURRENCY'; +COL user_commit FOR 9999999 HEA 'USER|ACTIVE|WAITING|COMMIT'; +COL last_call_secs FOR 999,999,990 HEA 'LAST_CALL|SECONDS'; +COL avg_last_call_secs FOR 999,999,990 HEA 'AVG_LAST_CALL|SECONDS'; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF total_sessions status_active status_inactive type_user type_background type_recursive user_active user_inactive user_active_txn user_inactive_txn user_active_cpu user_active_waiting user_scheduler user_io user_application user_concurency user_commit ON REPORT; +-- +PRO +PRO MACHINE SUMMARY (as of &&cs_snap_time.) +PRO ~~~~~~~~~~~~~~~ +WITH +all_sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ * FROM &&cs_tools_schema..iod_session WHERE &&cs_con_id. IN (1, con_id) AND snap_time = TO_DATE('&&cs_snap_time.', '&&cs_datetime_full_format.') +), +sessions +AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + machine, + COUNT(*) total_sessions, + SUM(CASE WHEN type = 'USER' THEN 1 ELSE 0 END) type_user, + SUM(CASE WHEN type = 'BACKGROUND' THEN 1 ELSE 0 END) type_background, + --SUM(CASE WHEN type = 'RECURSIVE' THEN 1 ELSE 0 END) type_recursive, + SUM(CASE WHEN status = 'ACTIVE' THEN 1 ELSE 0 END) status_active, + SUM(CASE WHEN status = 'INACTIVE' THEN 1 ELSE 0 END) status_inactive, + SUM(CASE WHEN status = 'ACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_active, + SUM(CASE WHEN status = 'INACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_inactive, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state <> 'WAITING' THEN 1 ELSE 0 END) user_active_cpu, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' THEN 1 ELSE 0 END) user_active_waiting, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_active_txn, + SUM(CASE WHEN type = 'USER' AND status = 'INACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_inactive_txn, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Scheduler' THEN 1 ELSE 0 END) user_scheduler, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'User I/O' THEN 1 ELSE 0 END) user_io, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Application' THEN 1 ELSE 0 END) user_application, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Concurrency' THEN 1 ELSE 0 END) user_concurency, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Commit' THEN 1 ELSE 0 END) user_commit, + MIN(last_call_et) last_call_secs, + ROUND(AVG(last_call_et)) avg_last_call_secs + FROM all_sessions + GROUP BY + machine +) +SELECT s.machine, + s.total_sessions, + s.type_user, + s.type_background, + --s.type_recursive, + s.status_active, + s.status_inactive, + s.user_active, + s.user_inactive, + s.user_active_cpu, + s.user_active_waiting, + s.user_active_txn, + s.user_inactive_txn, + s.user_scheduler, + s.user_io, + s.user_application, + s.user_concurency, + s.user_commit, + s.last_call_secs, + s.avg_last_call_secs + FROM sessions s + ORDER BY + s.machine +/ +PRO +PRO PDB SUMMARY (as of &&cs_snap_time.) +PRO ~~~~~~~~~~~ +WITH +all_sessions AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ * FROM &&cs_tools_schema..iod_session WHERE &&cs_con_id. IN (1, con_id) AND snap_time = TO_DATE('&&cs_snap_time.', '&&cs_datetime_full_format.') +), +sessions +AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + COUNT(*) total_sessions, + SUM(CASE WHEN type = 'USER' THEN 1 ELSE 0 END) type_user, + SUM(CASE WHEN type = 'BACKGROUND' THEN 1 ELSE 0 END) type_background, + --SUM(CASE WHEN type = 'RECURSIVE' THEN 1 ELSE 0 END) type_recursive, + SUM(CASE WHEN status = 'ACTIVE' THEN 1 ELSE 0 END) status_active, + SUM(CASE WHEN status = 'INACTIVE' THEN 1 ELSE 0 END) status_inactive, + SUM(CASE WHEN status = 'ACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_active, + SUM(CASE WHEN status = 'INACTIVE' AND type = 'USER' THEN 1 ELSE 0 END) user_inactive, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state <> 'WAITING' THEN 1 ELSE 0 END) user_active_cpu, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' THEN 1 ELSE 0 END) user_active_waiting, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_active_txn, + SUM(CASE WHEN type = 'USER' AND status = 'INACTIVE' AND taddr IS NOT NULL THEN 1 ELSE 0 END) user_inactive_txn, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Scheduler' THEN 1 ELSE 0 END) user_scheduler, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'User I/O' THEN 1 ELSE 0 END) user_io, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Application' THEN 1 ELSE 0 END) user_application, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Concurrency' THEN 1 ELSE 0 END) user_concurency, + SUM(CASE WHEN type = 'USER' AND status = 'ACTIVE' AND state = 'WAITING' AND wait_class = 'Commit' THEN 1 ELSE 0 END) user_commit, + MIN(last_call_et) last_call_secs, + ROUND(AVG(last_call_et)) avg_last_call_secs + FROM all_sessions + GROUP BY + con_id +) +SELECT CASE WHEN c.name IS NULL THEN 'CDB' ELSE c.name END||'('||s.con_id||')' pdb, + s.total_sessions, + s.type_user, + s.type_background, + --s.type_recursive, + s.status_active, + s.status_inactive, + s.user_active, + s.user_inactive, + s.user_active_cpu, + s.user_active_waiting, + s.user_active_txn, + s.user_inactive_txn, + s.user_scheduler, + s.user_io, + s.user_application, + s.user_concurency, + s.user_commit, + s.last_call_secs, + s.avg_last_call_secs + FROM sessions s, + v$containers c + WHERE c.con_id(+) = s.con_id + AND c.open_mode(+) = 'READ WRITE' + ORDER BY + CASE WHEN c.name IS NULL THEN 'CDB' ELSE c.name END +/ +PRO +PRO SQL> @&&cs_script_name..sql "&&num_days." "&&cs_snap_time." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sgastat_awr_area_chart.sql b/csierra/cs_sgastat_awr_area_chart.sql new file mode 100644 index 0000000..dd6fb73 --- /dev/null +++ b/csierra/cs_sgastat_awr_area_chart.sql @@ -0,0 +1,188 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sgastat_awr_area_chart.sql +-- +-- Purpose: SGA Pools History Chart from AWR +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/08 +-- +-- Usage: Execute connected to CDB +-- +-- Enter range of dates. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sgastat_awr_area_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sgastat_awr_area_chart'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "SGA Pool Stats AWR"; +DEF chart_title = "SGA Pools"; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF vaxis_title = "GBs"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +--DEF chart_foot_note_2 = "
2) Granularity: &&cs2_granularity. [{MI}|SS|HH|DD]"; +DEF chart_foot_note_3 = ""; +--DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Buffer Cache' , id:'1', type:'number'} +PRO ,{label:'Shared Pool' , id:'2', type:'number'} +PRO ,{label:'Large Pool' , id:'3', type:'number'} +PRO ,{label:'Java Pool' , id:'4', type:'number'} +PRO ,{label:'Streams Pool' , id:'5', type:'number'} +PRO ,{label:'Shared IO Pool' , id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +sgastat AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + ROUND(SUM(CASE WHEN name = 'buffer_cache' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) buffer_cache, -- see bug 18166499 + ROUND(SUM(CASE WHEN name = 'log_buffer' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) log_buffer, + ROUND(SUM(CASE WHEN name = 'shared_io_pool' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) shared_io_pool, + ROUND(SUM(CASE WHEN name = 'fixed_sga' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) fixed_sga, + ROUND(SUM(CASE WHEN pool = 'shared pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) shared_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'shared pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) shared_pool_free_memory, + ROUND(SUM(CASE WHEN pool = 'large pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) large_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'large pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) large_pool_free_memory, + ROUND(SUM(CASE WHEN pool = 'java pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) java_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'java pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) java_pool_free_memory, + ROUND(SUM(CASE WHEN pool = 'streams pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) streams_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'streams pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) streams_pool_free_memory + FROM dba_hist_sgastat + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + GROUP BY + snap_id +), +param AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + ROUND(SUM(CASE parameter_name WHEN '__db_cache_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) buffer_cache, + ROUND(SUM(CASE parameter_name WHEN '__shared_io_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) shared_io_pool, + ROUND(SUM(CASE parameter_name WHEN '__shared_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) shared_pool, + ROUND(SUM(CASE parameter_name WHEN '__large_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) large_pool, + ROUND(SUM(CASE parameter_name WHEN '__java_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) java_pool, + ROUND(SUM(CASE parameter_name WHEN '__streams_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) streams_pool, + ROUND(SUM(CASE parameter_name WHEN '__sga_target' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) sga_target, + ROUND(SUM(CASE parameter_name WHEN '__pga_aggregate_target' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) pga_aggregate_target + FROM dba_hist_parameter + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND parameter_name IN ('__db_cache_size', '__java_pool_size', '__large_pool_size', '__pga_aggregate_target', '__sga_target', '__shared_io_pool_size', '__shared_pool_size', '__streams_pool_size') + GROUP BY + snap_id +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.snap_id, + CAST(s.begin_interval_time AS DATE) begin_time, + CAST(s.end_interval_time AS DATE) end_time, + p.pga_aggregate_target, + p.sga_target, + p.buffer_cache, + p.shared_pool, + p.large_pool, + p.java_pool, + p.streams_pool, + p.shared_io_pool, + t.shared_pool_free_memory, + t.large_pool_free_memory, + t.java_pool_free_memory, + t.streams_pool_free_memory + FROM dba_hist_snapshot s, + sgastat t, + param p + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND t.snap_id = s.snap_id + AND p.snap_id = s.snap_id +) +SELECT ', [new Date('|| + TO_CHAR(q.end_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.end_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.end_time, 'DD')|| /* day */ + ','||TO_CHAR(q.end_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.end_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.end_time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.buffer_cache, 3)|| + ','||num_format(q.shared_pool, 3)|| + ','||num_format(q.large_pool, 3)|| + ','||num_format(q.java_pool, 3)|| + ','||num_format(q.streams_pool, 3)|| + ','||num_format(q.shared_io_pool, 3)|| + ']' + FROM my_query q + ORDER BY + snap_id +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sgastat_awr_line_chart.sql b/csierra/cs_sgastat_awr_line_chart.sql new file mode 100644 index 0000000..16da131 --- /dev/null +++ b/csierra/cs_sgastat_awr_line_chart.sql @@ -0,0 +1,200 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sgastat_awr_line_chart.sql +-- +-- Purpose: SGA Pools History Chart from AWR (include free memory) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/08 +-- +-- Usage: Execute connected to CDB +-- +-- Enter range of dates. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sgastat_awr_line_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sgastat_awr_line_chart'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "SGA Pool Stats AWR"; +DEF chart_title = "SGA Pools"; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF vaxis_title = "GBs"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +--DEF chart_foot_note_2 = "
2) Granularity: &&cs2_granularity. [{MI}|SS|HH|DD]"; +DEF chart_foot_note_3 = ""; +--DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'PGA Aggregate Target' , id:'01', type:'number'} +PRO ,{label:'SGA Target' , id:'02', type:'number'} +PRO ,{label:'Buffer Cache' , id:'03', type:'number'} +PRO ,{label:'Shared Pool' , id:'04', type:'number'} +PRO ,{label:'Large Pool' , id:'05', type:'number'} +PRO ,{label:'Java Pool' , id:'06', type:'number'} +PRO ,{label:'Streams Pool' , id:'07', type:'number'} +PRO ,{label:'Shared IO Pool' , id:'08', type:'number'} +PRO ,{label:'Shared Pool Free Memory' , id:'09', type:'number'} +PRO ,{label:'Large Pool Free Memory' , id:'10', type:'number'} +PRO ,{label:'Java Pool Free Memory' , id:'11', type:'number'} +PRO ,{label:'Streams Pool Free Memory' , id:'12', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +sgastat AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + ROUND(SUM(CASE WHEN name = 'buffer_cache' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) buffer_cache, -- see bug 18166499 + ROUND(SUM(CASE WHEN name = 'log_buffer' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) log_buffer, + ROUND(SUM(CASE WHEN name = 'shared_io_pool' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) shared_io_pool, + ROUND(SUM(CASE WHEN name = 'fixed_sga' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) fixed_sga, + ROUND(SUM(CASE WHEN pool = 'shared pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) shared_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'shared pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) shared_pool_free_memory, + ROUND(SUM(CASE WHEN pool = 'large pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) large_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'large pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) large_pool_free_memory, + ROUND(SUM(CASE WHEN pool = 'java pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) java_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'java pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) java_pool_free_memory, + ROUND(SUM(CASE WHEN pool = 'streams pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) streams_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'streams pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) streams_pool_free_memory + FROM dba_hist_sgastat + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + GROUP BY + snap_id +), +param AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + ROUND(SUM(CASE parameter_name WHEN '__db_cache_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) buffer_cache, + ROUND(SUM(CASE parameter_name WHEN '__shared_io_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) shared_io_pool, + ROUND(SUM(CASE parameter_name WHEN '__shared_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) shared_pool, + ROUND(SUM(CASE parameter_name WHEN '__large_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) large_pool, + ROUND(SUM(CASE parameter_name WHEN '__java_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) java_pool, + ROUND(SUM(CASE parameter_name WHEN '__streams_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) streams_pool, + ROUND(SUM(CASE parameter_name WHEN '__sga_target' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) sga_target, + ROUND(SUM(CASE parameter_name WHEN '__pga_aggregate_target' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) pga_aggregate_target + FROM dba_hist_parameter + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND parameter_name IN ('__db_cache_size', '__java_pool_size', '__large_pool_size', '__pga_aggregate_target', '__sga_target', '__shared_io_pool_size', '__shared_pool_size', '__streams_pool_size') + GROUP BY + snap_id +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.snap_id, + CAST(s.begin_interval_time AS DATE) begin_time, + CAST(s.end_interval_time AS DATE) end_time, + p.pga_aggregate_target, + p.sga_target, + p.buffer_cache, + p.shared_pool, + p.large_pool, + p.java_pool, + p.streams_pool, + p.shared_io_pool, + t.shared_pool_free_memory, + t.large_pool_free_memory, + t.java_pool_free_memory, + t.streams_pool_free_memory + FROM dba_hist_snapshot s, + sgastat t, + param p + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND t.snap_id = s.snap_id + AND p.snap_id = s.snap_id +) +SELECT ', [new Date('|| + TO_CHAR(q.end_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.end_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.end_time, 'DD')|| /* day */ + ','||TO_CHAR(q.end_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.end_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.end_time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.pga_aggregate_target, 3)|| + ','||num_format(q.sga_target, 3)|| + ','||num_format(q.buffer_cache, 3)|| + ','||num_format(q.shared_pool, 3)|| + ','||num_format(q.large_pool, 3)|| + ','||num_format(q.java_pool, 3)|| + ','||num_format(q.streams_pool, 3)|| + ','||num_format(q.shared_io_pool, 3)|| + ','||num_format(q.shared_pool_free_memory, 3)|| + ','||num_format(q.large_pool_free_memory, 3)|| + ','||num_format(q.java_pool_free_memory, 3)|| + ','||num_format(q.streams_pool_free_memory, 3)|| + ']' + FROM my_query q + ORDER BY + snap_id +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Line'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sgastat_awr_report.sql b/csierra/cs_sgastat_awr_report.sql new file mode 100644 index 0000000..70a9462 --- /dev/null +++ b/csierra/cs_sgastat_awr_report.sql @@ -0,0 +1,160 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sgastat_awr_report.sql +-- +-- Purpose: SGA Pools History Report from AWR (include free memory) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/08 +-- +-- Usage: Execute connected to CDB +-- +-- Enter range of dates. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sgastat_awr_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sgastat_awr_report'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +COL snap_id FOR 9999999 HEA 'Snap ID'; +COL begin_time FOR A19 HEA 'Begin Time'; +COL end_time FOR A19 HEA 'End Time'; +COL pga_aggregate_target FOR 9,990.000 HEA 'PGA|Aggregate|Target'; +COL sga_target FOR 9,990.0 HEA 'SGA|Target'; +COL buffer_cache FOR 9,990.000 HEA 'Buffer|Cache'; +COL log_buffer FOR 9,990.000 HEA 'Log|Buffer'; +COL shared_io_pool FOR 9,990.000 HEA 'Shared|IO Pool'; +COL fixed_sga FOR 9,990.000 HEA 'Fixed|SGA'; +COL shared_pool FOR 9,990.000 HEA 'Shared|Pool'; +COL shared_pool_free_memory FOR 9,990.000 HEA 'Shared|Pool|Free|Memory'; +COL large_pool FOR 9,990.000 HEA 'Large|Pool'; +COL large_pool_free_memory FOR 9,990.000 HEA 'Large|Pool|Free|Memory'; +COL java_pool FOR 9,990.000 HEA 'Java|Pool'; +COL java_pool_free_memory FOR 9,990.000 HEA 'Java|Pool|Free|Memory'; +COL streams_pool FOR 9,990.000 HEA 'Streams|Pool'; +COL streams_pool_free_memory FOR 9,990.000 HEA 'Streams|Pool|Free|Memory'; +-- +PRO +PRO Memory Pools (GBs) +PRO ~~~~~~~~~~~~~~~~~~ +WITH +sgastat AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + ROUND(SUM(CASE WHEN name = 'buffer_cache' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) buffer_cache, -- see bug 18166499 + ROUND(SUM(CASE WHEN name = 'log_buffer' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) log_buffer, + ROUND(SUM(CASE WHEN name = 'shared_io_pool' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) shared_io_pool, + ROUND(SUM(CASE WHEN name = 'fixed_sga' AND pool IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) fixed_sga, + ROUND(SUM(CASE WHEN pool = 'shared pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) shared_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'shared pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) shared_pool_free_memory, + ROUND(SUM(CASE WHEN pool = 'large pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) large_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'large pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) large_pool_free_memory, + ROUND(SUM(CASE WHEN pool = 'java pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) java_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'java pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) java_pool_free_memory, + ROUND(SUM(CASE WHEN pool = 'streams pool' AND name IS NULL THEN bytes ELSE 0 END)/POWER(2,30), 3) streams_pool, -- see bug 18166499 + ROUND(SUM(CASE WHEN pool = 'streams pool' AND name = 'free memory' THEN bytes ELSE 0 END)/POWER(2,30), 3) streams_pool_free_memory + FROM dba_hist_sgastat + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + GROUP BY + snap_id +), +param AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + ROUND(SUM(CASE parameter_name WHEN '__db_cache_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) buffer_cache, + ROUND(SUM(CASE parameter_name WHEN '__shared_io_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) shared_io_pool, + ROUND(SUM(CASE parameter_name WHEN '__shared_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) shared_pool, + ROUND(SUM(CASE parameter_name WHEN '__large_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) large_pool, + ROUND(SUM(CASE parameter_name WHEN '__java_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) java_pool, + ROUND(SUM(CASE parameter_name WHEN '__streams_pool_size' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) streams_pool, + ROUND(SUM(CASE parameter_name WHEN '__sga_target' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) sga_target, + ROUND(SUM(CASE parameter_name WHEN '__pga_aggregate_target' THEN TO_NUMBER(value) ELSE 0 END)/POWER(2,30), 3) pga_aggregate_target + FROM dba_hist_parameter + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND parameter_name IN ('__db_cache_size', '__java_pool_size', '__large_pool_size', '__pga_aggregate_target', '__sga_target', '__shared_io_pool_size', '__shared_pool_size', '__streams_pool_size') + GROUP BY + snap_id +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.snap_id, + CAST(s.begin_interval_time AS DATE) begin_time, + CAST(s.end_interval_time AS DATE) end_time, + p.pga_aggregate_target, + p.sga_target, + p.buffer_cache, + p.shared_pool, + p.large_pool, + p.java_pool, + p.streams_pool, + p.shared_io_pool, + t.shared_pool_free_memory, + t.large_pool_free_memory, + t.java_pool_free_memory, + t.streams_pool_free_memory + FROM dba_hist_snapshot s, + sgastat t, + param p + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND t.snap_id = s.snap_id + AND p.snap_id = s.snap_id +) +SELECT end_time, + pga_aggregate_target, + sga_target, + buffer_cache, + shared_pool, + large_pool, + java_pool, + streams_pool, + shared_io_pool, + shared_pool_free_memory, + large_pool_free_memory, + java_pool_free_memory, + streams_pool_free_memory + FROM my_query + ORDER BY + snap_id +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_snapper_machine.sql b/csierra/cs_snapper_machine.sql new file mode 100644 index 0000000..fee4e59 --- /dev/null +++ b/csierra/cs_snapper_machine.sql @@ -0,0 +1,89 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: snapper_machine.sql | cs_snapper_machine.sql +-- +-- Purpose: Sessions Snapper for one Machine using Tanel Poder Snapper +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/08 +-- +-- Usage: Execute connected to PDB or CDB. Pass Machine when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_snapper_machine.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_snapper_machine'; +DEF cs_script_acronym = 'snapper_machine.sql | '; +-- +SELECT COUNT(*) sessions, + SUM(CASE status WHEN 'ACTIVE' THEN 1 ELSE 0 END) active, + SUM(CASE status WHEN 'INACTIVE' THEN 1 ELSE 0 END) inactive, + SUM(CASE status WHEN 'KILLED' THEN 1 ELSE 0 END) killed, + type, + machine + FROM v$session + WHERE machine IS NOT NULL + GROUP BY type, machine + ORDER BY 1 DESC +/ +-- +PRO +PRO Executing: SQL> @@snapper.sql ash=machine 5 1 all +@@snapper.sql ash=machine 5 1 all +UNDEF 1 2 3 4; +-- +PRO 1. Machine: +DEF cs_machine = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_machine.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_machine." +@@cs_internal/cs_spool_id.sql +-- +PRO MACHINE : "&&cs_machine." +PRO +-- +DEF machine = '&&cs_machine.'; +PRO Snapper #1 out of 6 +@@snapper_machine.sql +-- +DEF machine = '&&cs_machine.'; +PRO Snapper #2 out of 6 +@@snapper_machine.sql +-- +DEF machine = '&&cs_machine.'; +PRO Snapper #3 out of 6 +@@snapper_machine.sql +-- +DEF machine = '&&cs_machine.'; +PRO Snapper #4 out of 6 +@@snapper_machine.sql +-- +DEF machine = '&&cs_machine.'; +PRO Snapper #5 out of 6 +@@snapper_machine.sql +-- +DEF machine = '&&cs_machine.'; +PRO Snapper #6 out of 6 +@@snapper_machine.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_machine." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_snapper_module.sql b/csierra/cs_snapper_module.sql new file mode 100644 index 0000000..631133a --- /dev/null +++ b/csierra/cs_snapper_module.sql @@ -0,0 +1,88 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: snapper_module.sql | cs_snapper_module.sql +-- +-- Purpose: Sessions Snapper for one Module using Tanel Poder Snapper +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to PDB or CDB. Pass Module when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_snapper_module.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_snapper_module'; +DEF cs_script_acronym = 'snapper_module.sql | '; +-- +SELECT COUNT(*) sessions, + SUM(CASE status WHEN 'ACTIVE' THEN 1 ELSE 0 END) active, + SUM(CASE status WHEN 'INACTIVE' THEN 1 ELSE 0 END) inactive, + SUM(CASE status WHEN 'KILLED' THEN 1 ELSE 0 END) killed, + type, + module + FROM v$session + WHERE module IS NOT NULL + GROUP BY type, module + ORDER BY 1 DESC +/ +-- +PRO +PRO Executing: SQL> @@snapper.sql ash=module 5 1 all +@@snapper.sql ash=module 5 1 all +UNDEF 1 2 3 4; +-- +PRO 1. Module: +DEF cs_module = '&1.'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_module.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_module." +@@cs_internal/cs_spool_id.sql +-- +PRO MODULE : "&&cs_module." +PRO +-- +DEF module = '&&cs_module.'; +PRO Snapper #1 out of 6 +@@snapper_module.sql +-- +DEF module = '&&cs_module.'; +PRO Snapper #2 out of 6 +@@snapper_module.sql +-- +DEF module = '&&cs_module.'; +PRO Snapper #3 out of 6 +@@snapper_module.sql +-- +DEF module = '&&cs_module.'; +PRO Snapper #4 out of 6 +@@snapper_module.sql +-- +DEF module = '&&cs_module.'; +PRO Snapper #5 out of 6 +@@snapper_module.sql +-- +DEF module = '&&cs_module.'; +PRO Snapper #6 out of 6 +@@snapper_module.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_module." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_snapper_service.sql b/csierra/cs_snapper_service.sql new file mode 100644 index 0000000..08aa62a --- /dev/null +++ b/csierra/cs_snapper_service.sql @@ -0,0 +1,89 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: snapper_service.sql | cs_snapper_service.sql +-- +-- Purpose: Sessions Snapper for one Service using Tanel Poder Snapper +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to PDB or CDB. Pass Service Name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_snapper_service.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_snapper_service'; +DEF cs_script_acronym = 'snapper_service.sql | '; +-- +SELECT COUNT(*) sessions, + SUM(CASE status WHEN 'ACTIVE' THEN 1 ELSE 0 END) active, + SUM(CASE status WHEN 'INACTIVE' THEN 1 ELSE 0 END) inactive, + SUM(CASE status WHEN 'KILLED' THEN 1 ELSE 0 END) killed, + type, + service_name + FROM v$session + WHERE service_name IS NOT NULL + GROUP BY type, service_name + ORDER BY 1 DESC +/ +-- +PRO +PRO Executing: SQL> @@snapper.sql ash=service_name 5 1 all +@@snapper.sql ash=service_name 5 1 all +UNDEF 1 2 3 4; +-- +PRO 1. Service Name: +DEF cs_service_name = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_service_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_service_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SERVICE_NAME : "&&cs_service_name." +PRO +-- +DEF service_name = '&&cs_service_name.'; +PRO Snapper #1 out of 6 +@@snapper_service.sql +-- +DEF service_name = '&&cs_service_name.'; +PRO Snapper #2 out of 6 +@@snapper_service.sql +-- +DEF service_name = '&&cs_service_name.'; +PRO Snapper #3 out of 6 +@@snapper_service.sql +-- +DEF service_name = '&&cs_service_name.'; +PRO Snapper #4 out of 6 +@@snapper_service.sql +-- +DEF service_name = '&&cs_service_name.'; +PRO Snapper #5 out of 6 +@@snapper_service.sql +-- +DEF service_name = '&&cs_service_name.'; +PRO Snapper #6 out of 6 +@@snapper_service.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_service_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_snapper_sid.sql b/csierra/cs_snapper_sid.sql new file mode 100644 index 0000000..8f29adf --- /dev/null +++ b/csierra/cs_snapper_sid.sql @@ -0,0 +1,77 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: snapper_sid.sql | cs_snapper_sid.sql +-- +-- Purpose: Sessions Snapper for one SID using Tanel Poder Snapper +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to PDB or CDB. Pass SID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_snapper_sid.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_snapper_sid'; +DEF cs_script_acronym = 'snapper_sid.sql | '; +-- +PRO +PRO Executing: SQL> @@snapper.sql ash=sid+service_name+module+machine 5 1 all +@@snapper.sql ash=sid+service_name+module+machine 5 1 all +UNDEF 1 2 3 4; +-- +PRO 1. SID: +DEF cs_sid = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sid." +@@cs_internal/cs_spool_id.sql +-- +PRO SID : "&&cs_sid." +PRO +-- +DEF sid = '&&cs_sid.'; +PRO Snapper #1 out of 6 +@@snapper_sid.sql +-- +DEF sid = '&&cs_sid.'; +PRO Snapper #2 out of 6 +@@snapper_sid.sql +-- +DEF sid = '&&cs_sid.'; +PRO Snapper #3 out of 6 +@@snapper_sid.sql +-- +DEF sid = '&&cs_sid.'; +PRO Snapper #4 out of 6 +@@snapper_sid.sql +-- +DEF sid = '&&cs_sid.'; +PRO Snapper #5 out of 6 +@@snapper_sid.sql +-- +DEF sid = '&&cs_sid.'; +PRO Snapper #6 out of 6 +@@snapper_sid.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sid." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_snapper_spid.sql b/csierra/cs_snapper_spid.sql new file mode 100644 index 0000000..173840a --- /dev/null +++ b/csierra/cs_snapper_spid.sql @@ -0,0 +1,77 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: snapper_spid.sql | cs_snapper_spid.sql +-- +-- Purpose: Sessions Snapper for one SPID (OS PID) using Tanel Poder Snapper +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to PDB or CDB. Pass SPID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_snapper_spid.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_snapper_spid'; +DEF cs_script_acronym = 'snapper_spid.sql | '; +-- +--PRO +--PRO Executing: SQL> @@snapper.sql ash=sid+service_name+module+machine 5 1 all +--@@snapper.sql ash=sid+service_name+module+machine 5 1 all +--UNDEF 1 2 3 4; +-- +PRO 1. SPID (OS PID): +DEF cs_spid = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_spid." +@@cs_internal/cs_spool_id.sql +-- +PRO SPID (OS PID): "&&cs_spid." +PRO +-- +DEF spid = '&&cs_spid.'; +PRO Snapper #1 out of 6 +@@snapper_spid.sql +-- +DEF spid = '&&cs_spid.'; +PRO Snapper #2 out of 6 +@@snapper_spid.sql +-- +DEF spid = '&&cs_spid.'; +PRO Snapper #3 out of 6 +@@snapper_spid.sql +-- +DEF spid = '&&cs_spid.'; +PRO Snapper #4 out of 6 +@@snapper_spid.sql +-- +DEF spid = '&&cs_spid.'; +PRO Snapper #5 out of 6 +@@snapper_spid.sql +-- +DEF spid = '&&cs_spid.'; +PRO Snapper #6 out of 6 +@@snapper_spid.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_spid." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_snapper_sql_id.sql b/csierra/cs_snapper_sql_id.sql new file mode 100644 index 0000000..7dfd051 --- /dev/null +++ b/csierra/cs_snapper_sql_id.sql @@ -0,0 +1,88 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: snapper_sql_id.sql | cs_snapper_sql_id.sql +-- +-- Purpose: Sessions Snapper for one SQL_ID using Tanel Poder Snapper +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to PDB or CDB. Pass SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_snapper_sql_id.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_snapper_sql_id'; +DEF cs_script_acronym = 'snapper_sql_id.sql | '; +-- +SELECT COUNT(*) sessions, + SUM(CASE status WHEN 'ACTIVE' THEN 1 ELSE 0 END) active, + SUM(CASE status WHEN 'INACTIVE' THEN 1 ELSE 0 END) inactive, + SUM(CASE status WHEN 'KILLED' THEN 1 ELSE 0 END) killed, + type, + sql_id + FROM v$session + WHERE sql_id IS NOT NULL + GROUP BY type, sql_id + ORDER BY 1 DESC +/ +-- +PRO +PRO Executing: SQL> @@snapper.sql ash=sql_id 5 1 all +@@snapper.sql ash=sql_id 5 1 all +UNDEF 1 2 3 4; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : "&&cs_sql_id." +PRO +-- +DEF sql_id = '&&cs_sql_id.'; +PRO Snapper #1 out of 6 +@@snapper_sql_id.sql +-- +DEF sql_id = '&&cs_sql_id.'; +PRO Snapper #2 out of 6 +@@snapper_sql_id.sql +-- +DEF sql_id = '&&cs_sql_id.'; +PRO Snapper #3 out of 6 +@@snapper_sql_id.sql +-- +DEF sql_id = '&&cs_sql_id.'; +PRO Snapper #4 out of 6 +@@snapper_sql_id.sql +-- +DEF sql_id = '&&cs_sql_id.'; +PRO Snapper #5 out of 6 +@@snapper_sql_id.sql +-- +DEF sql_id = '&&cs_sql_id.'; +PRO Snapper #6 out of 6 +@@snapper_sql_id.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_snapper_top.sql b/csierra/cs_snapper_top.sql new file mode 100644 index 0000000..8e48495 --- /dev/null +++ b/csierra/cs_snapper_top.sql @@ -0,0 +1,61 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: snapper_top.sql | cs_snapper_top.sql +-- +-- Purpose: Sessions Snapper for all sessions using Tanel Poder Snapper +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_snapper_top.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +--@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_snapper_top'; +DEF cs_script_acronym = 'snapper_top.sql | '; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +PRO +-- +PRO Snapper #1 out of 6 +@@snapper_top.sql +-- +PRO Snapper #2 out of 6 +@@snapper_top.sql +-- +PRO Snapper #3 out of 6 +@@snapper_top.sql +-- +PRO Snapper #4 out of 6 +@@snapper_top.sql +-- +PRO Snapper #5 out of 6 +@@snapper_top.sql +-- +PRO Snapper #6 out of 6 +@@snapper_top.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_some_sysmetric_for_cdb_hist_chart.sql b/csierra/cs_some_sysmetric_for_cdb_hist_chart.sql new file mode 100644 index 0000000..a37f314 --- /dev/null +++ b/csierra/cs_some_sysmetric_for_cdb_hist_chart.sql @@ -0,0 +1,310 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_some_sysmetric_for_cdb_hist_chart.sql +-- +-- Purpose: Some System Metrics as per DBA_HIST_SYSMETRIC_SUMMARY View for a CDB (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/11/23 +-- +-- Usage: Execute connected to CDB and pass range of AWR snapshots then select some metrics. +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_some_sysmetric_for_cdb_hist_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF view_name = 'v$sysmetric'; +DEF common_predicate = "SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT'"; +DEF cs_script_name = 'cs_some_sysmetric_for_cdb_hist_chart'; +DEF cs_hours_range_default = '1440'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL metric_name FOR A45 TRUN; +COL metric_unit FOR A41 TRUN; +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 2 + ORDER BY + metric_name +/ +PRO +PRO 3. Filter on Metric Name or Unit (e.g. sessions, blocks, redo, undo, commit, transaction, bytes, sec, txn, logon, call, %, etc.): +DEF metric_filter = '&3.'; +UNDEF 3; +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 2 + AND CASE '&&metric_filter.' + WHEN '%' THEN CASE WHEN metric_name||metric_unit LIKE '%\%%' ESCAPE '\' THEN 1 END + ELSE CASE WHEN UPPER(metric_name||metric_unit) LIKE UPPER('%&&metric_filter.%') THEN 1 END + END = 1 + ORDER BY + metric_name +/ +PRO +PRO 4. Enter 1st Metric Name: +DEF metric_name_1 = '&4.'; +UNDEF 4; +-- +COL cs_metric_unit_1 NEW_V cs_metric_unit_1 NOPRI; +SELECT metric_unit cs_metric_unit_1 FROM &&view_name. WHERE metric_name = '&&metric_name_1.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 2 + AND UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') + AND metric_name NOT IN ('&&metric_name_1.') + ORDER BY + metric_name +/ +PRO +PRO Enter additional optional Metric Names, consistent with Metric Unit of "&&cs_metric_unit_1." +PRO +PRO 5. Enter 2nd Metric Name: (opt) +DEF metric_name_2 = '&5.'; +UNDEF 5; +-- +COL cs_metric_unit_2 NEW_V cs_metric_unit_2 NOPRI; +SELECT metric_unit cs_metric_unit_2 FROM &&view_name. WHERE metric_name = '&&metric_name_2.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 2 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.') + ORDER BY + metric_name +/ +PRO +PRO 6. Enter 3rd Metric Name: (opt) +DEF metric_name_3 = '&6.'; +UNDEF 6; +-- +COL cs_metric_unit_3 NEW_V cs_metric_unit_3 NOPRI; +SELECT metric_unit cs_metric_unit_3 FROM &&view_name. WHERE metric_name = '&&metric_name_3.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 2 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.') + ORDER BY + metric_name +/ +PRO +PRO 7. Enter 4th Metric Name: (opt) +DEF metric_name_4 = '&7.'; +UNDEF 7; +-- +COL cs_metric_unit_4 NEW_V cs_metric_unit_4 NOPRI; +SELECT metric_unit cs_metric_unit_4 FROM &&view_name. WHERE metric_name = '&&metric_name_4.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 2 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_4.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.') + ORDER BY + metric_name +/ +PRO +PRO 8. Enter 5th Metric Name: (opt) +DEF metric_name_5 = '&8.'; +UNDEF 8; +-- +COL cs_metric_unit_5 NEW_V cs_metric_unit_5 NOPRI; +SELECT metric_unit cs_metric_unit_5 FROM &&view_name. WHERE metric_name = '&&metric_name_5.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 2 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_4.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_5.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.', '&&metric_name_5.') + ORDER BY + metric_name +/ +PRO +PRO 9. Enter 6th Metric Name: (opt) +DEF metric_name_6 = '&9.'; +UNDEF 9; +PRO +PRO 10. Value: [{average}|maxval] +DEF cs_value = '&10.'; +UNDEF 10; +COL cs_value NEW_V cs_value NOPRI; +SELECT CASE WHEN LOWER(TRIM('&&cs_value.')) IN ('average', 'maxval') THEN LOWER(TRIM('&&cs_value.')) ELSE 'average' END cs_value FROM DUAL +/ +PRO +PRO 11. Graph Type: [{SteppedArea}|Line|Area|Scatter] note: SteppedArea and Area are stacked +DEF graph_type = '&11.'; +UNDEF 11; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('SteppedArea', 'Line', 'Area', 'Scatter') THEN '&&graph_type.' ELSE 'SteppedArea' END AS cs_graph_type FROM DUAL +/ +PRO +PRO 12. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&12.'; +UNDEF 12; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "CDB System Metrics (&&cs_value.)"; +DEF chart_title = "CDB System Metrics (&&cs_value.)"; +DEF xaxis_title = "&&cs_value. between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "&&cs_metric_unit_1."; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&metric_filter." "&&metric_name_1." "&&metric_name_2." "&&metric_name_3." "&&metric_name_4." "&&metric_name_5." "&&metric_name_6." "&&cs_value." "&&cs_graph_type." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&metric_name_1.', id:'1', type:'number'} +PRO ,{label:'&&metric_name_2.', id:'2', type:'number'} +PRO ,{label:'&&metric_name_3.', id:'3', type:'number'} +PRO ,{label:'&&metric_name_4.', id:'4', type:'number'} +PRO ,{label:'&&metric_name_5.', id:'5', type:'number'} +PRO ,{label:'&&metric_name_6.', id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +sysmetric_history AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + end_time, + metric_name, + &&cs_value. value + FROM dba_hist_sysmetric_summary + WHERE metric_name IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.', '&&metric_name_5.', '&&metric_name_6.') + AND dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + end_time time, + SUM(CASE metric_name WHEN '&&metric_name_1.' THEN value ELSE 0 END) metric_name_1, + SUM(CASE metric_name WHEN '&&metric_name_2.' THEN value ELSE 0 END) metric_name_2, + SUM(CASE metric_name WHEN '&&metric_name_3.' THEN value ELSE 0 END) metric_name_3, + SUM(CASE metric_name WHEN '&&metric_name_4.' THEN value ELSE 0 END) metric_name_4, + SUM(CASE metric_name WHEN '&&metric_name_5.' THEN value ELSE 0 END) metric_name_5, + SUM(CASE metric_name WHEN '&&metric_name_6.' THEN value ELSE 0 END) metric_name_6 + FROM sysmetric_history + GROUP BY + end_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.metric_name_1)|| + ','||num_format(q.metric_name_2)|| + ','||num_format(q.metric_name_3)|| + ','||num_format(q.metric_name_4)|| + ','||num_format(q.metric_name_5)|| + ','||num_format(q.metric_name_6)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_some_sysmetric_for_cdb_mem_chart.sql b/csierra/cs_some_sysmetric_for_cdb_mem_chart.sql new file mode 100644 index 0000000..4939cf0 --- /dev/null +++ b/csierra/cs_some_sysmetric_for_cdb_mem_chart.sql @@ -0,0 +1,283 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_some_sysmetric_for_cdb_mem_chart.sql +-- +-- Purpose: Some System Metrics as per V$SYSMETRIC_HISTORY View for a CDB (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/03/02 +-- +-- Usage: Execute connected to CDB and select some metrics. +-- +-- Enter filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_some_sysmetric_for_cdb_mem_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF view_name_prefix = 'v$sysmetric'; +DEF common_predicate = "SYS_CONTEXT('USERENV', 'CON_NAME') = 'CDB$ROOT'"; +DEF cs_script_name = 'cs_some_sysmetric_for_cdb_mem_chart'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL metric_name FOR A45 TRUN; +COL metric_unit FOR A41 TRUN; +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 2 + ORDER BY + metric_name +/ +PRO +PRO 1. Filter on Metric Name or Unit (e.g. sessions, blocks, redo, undo, commit, transaction, bytes, sec, txn, logon, call, %, etc.): +DEF metric_filter = '&1.'; +UNDEF 1; +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 2 + AND CASE '&&metric_filter.' + WHEN '%' THEN CASE WHEN metric_name||metric_unit LIKE '%\%%' ESCAPE '\' THEN 1 END + ELSE CASE WHEN UPPER(metric_name||metric_unit) LIKE UPPER('%&&metric_filter.%') THEN 1 END + END = 1 + ORDER BY + metric_name +/ +PRO +PRO 2. Enter 1st Metric Name: +DEF metric_name_1 = '&2.'; +UNDEF 2; +-- +COL cs_metric_unit_1 NEW_V cs_metric_unit_1 NOPRI; +SELECT metric_unit cs_metric_unit_1 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_1.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 2 + AND UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') + AND metric_name NOT IN ('&&metric_name_1.') + ORDER BY + metric_name +/ +PRO +PRO Enter additional optional Metric Names, consistent with Metric Unit of "&&cs_metric_unit_1." +PRO +PRO 3. Enter 2nd Metric Name: (opt) +DEF metric_name_2 = '&3.'; +UNDEF 3; +-- +COL cs_metric_unit_2 NEW_V cs_metric_unit_2 NOPRI; +SELECT metric_unit cs_metric_unit_2 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_2.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 2 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.') + ORDER BY + metric_name +/ +PRO +PRO 4. Enter 3rd Metric Name: (opt) +DEF metric_name_3 = '&4.'; +UNDEF 4; +-- +COL cs_metric_unit_3 NEW_V cs_metric_unit_3 NOPRI; +SELECT metric_unit cs_metric_unit_3 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_3.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 2 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.') + ORDER BY + metric_name +/ +PRO +PRO 5. Enter 4th Metric Name: (opt) +DEF metric_name_4 = '&5.'; +UNDEF 5; +-- +COL cs_metric_unit_4 NEW_V cs_metric_unit_4 NOPRI; +SELECT metric_unit cs_metric_unit_4 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_4.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 2 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_4.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.') + ORDER BY + metric_name +/ +PRO +PRO 6. Enter 5th Metric Name: (opt) +DEF metric_name_5 = '&6.'; +UNDEF 6; +-- +COL cs_metric_unit_5 NEW_V cs_metric_unit_5 NOPRI; +SELECT metric_unit cs_metric_unit_5 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_5.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 2 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_4.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_5.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.', '&&metric_name_5.') + ORDER BY + metric_name +/ +PRO +PRO 7. Enter 6th Metric Name: (opt) +DEF metric_name_6 = '&7.'; +UNDEF 7; +PRO +PRO 8. Graph Type: [{SteppedArea}|Line|Area|Scatter] note: SteppedArea and Area are stacked +DEF graph_type = '&8.'; +UNDEF 8; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('SteppedArea', 'Line', 'Area', 'Scatter') THEN '&&graph_type.' ELSE 'SteppedArea' END AS cs_graph_type FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "CDB System Metrics (value)"; +DEF chart_title = "CDB System Metrics (value)"; +DEF xaxis_title = ""; +DEF vaxis_title = "&&cs_metric_unit_1."; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&metric_filter." "&&metric_name_1." "&&metric_name_2." "&&metric_name_3." "&&metric_name_4." "&&metric_name_5." "&&metric_name_6." "&&cs_graph_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&metric_name_1.', id:'1', type:'number'} +PRO ,{label:'&&metric_name_2.', id:'2', type:'number'} +PRO ,{label:'&&metric_name_3.', id:'3', type:'number'} +PRO ,{label:'&&metric_name_4.', id:'4', type:'number'} +PRO ,{label:'&&metric_name_5.', id:'5', type:'number'} +PRO ,{label:'&&metric_name_6.', id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +sysmetric_history AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + end_time, + metric_name, + value + FROM &&view_name_prefix._history + WHERE &&common_predicate. + AND metric_name IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.', '&&metric_name_5.', '&&metric_name_6.') + AND group_id = 2 -- 1 minute +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + end_time time, + SUM(CASE metric_name WHEN '&&metric_name_1.' THEN value ELSE 0 END) metric_name_1, + SUM(CASE metric_name WHEN '&&metric_name_2.' THEN value ELSE 0 END) metric_name_2, + SUM(CASE metric_name WHEN '&&metric_name_3.' THEN value ELSE 0 END) metric_name_3, + SUM(CASE metric_name WHEN '&&metric_name_4.' THEN value ELSE 0 END) metric_name_4, + SUM(CASE metric_name WHEN '&&metric_name_5.' THEN value ELSE 0 END) metric_name_5, + SUM(CASE metric_name WHEN '&&metric_name_6.' THEN value ELSE 0 END) metric_name_6 + FROM sysmetric_history + GROUP BY + end_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.metric_name_1)|| + ','||num_format(q.metric_name_2)|| + ','||num_format(q.metric_name_3)|| + ','||num_format(q.metric_name_4)|| + ','||num_format(q.metric_name_5)|| + ','||num_format(q.metric_name_6)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_some_sysmetric_for_pdb_hist_chart.sql b/csierra/cs_some_sysmetric_for_pdb_hist_chart.sql new file mode 100644 index 0000000..1058258 --- /dev/null +++ b/csierra/cs_some_sysmetric_for_pdb_hist_chart.sql @@ -0,0 +1,311 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_some_sysmetric_for_pdb_hist_chart.sql +-- +-- Purpose: Some System Metrics as per DBA_HIST_CON_SYSMETRIC_SUMM View for a PDB (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/11/23 +-- +-- Usage: Execute connected to CDB and pass range of AWR snapshots then select some metrics. +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_some_sysmetric_for_pdb_hist_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF view_name = 'v$con_sysmetric'; +DEF common_predicate = "con_id = SYS_CONTEXT('USERENV', 'CON_ID')"; +DEF cs_script_name = 'cs_some_sysmetric_for_pdb_hist_chart'; +DEF cs_hours_range_default = '1440'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL metric_name FOR A45 TRUN; +COL metric_unit FOR A41 TRUN; +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 18 + ORDER BY + metric_name +/ +PRO +PRO 3. Filter on Metric Name or Unit (e.g. sessions, blocks, redo, undo, commit, transaction, bytes, sec, txn, logon, call, %, etc.): +DEF metric_filter = '&3.'; +UNDEF 3; +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 18 + AND CASE '&&metric_filter.' + WHEN '%' THEN CASE WHEN metric_name||metric_unit LIKE '%\%%' ESCAPE '\' THEN 1 END + ELSE CASE WHEN UPPER(metric_name||metric_unit) LIKE UPPER('%&&metric_filter.%') THEN 1 END + END = 1 + ORDER BY + metric_name +/ +PRO +PRO 4. Enter 1st Metric Name: +DEF metric_name_1 = '&4.'; +UNDEF 4; +-- +COL cs_metric_unit_1 NEW_V cs_metric_unit_1 NOPRI; +SELECT metric_unit cs_metric_unit_1 FROM &&view_name. WHERE metric_name = '&&metric_name_1.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 18 + AND UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') + AND metric_name NOT IN ('&&metric_name_1.') + ORDER BY + metric_name +/ +PRO +PRO Enter additional optional Metric Names, consistent with Metric Unit of "&&cs_metric_unit_1." +PRO +PRO 5. Enter 2nd Metric Name: (opt) +DEF metric_name_2 = '&5.'; +UNDEF 5; +-- +COL cs_metric_unit_2 NEW_V cs_metric_unit_2 NOPRI; +SELECT metric_unit cs_metric_unit_2 FROM &&view_name. WHERE metric_name = '&&metric_name_2.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 18 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.') + ORDER BY + metric_name +/ +PRO +PRO 6. Enter 3rd Metric Name: (opt) +DEF metric_name_3 = '&6.'; +UNDEF 6; +-- +COL cs_metric_unit_3 NEW_V cs_metric_unit_3 NOPRI; +SELECT metric_unit cs_metric_unit_3 FROM &&view_name. WHERE metric_name = '&&metric_name_3.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 18 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.') + ORDER BY + metric_name +/ +PRO +PRO 7. Enter 4th Metric Name: (opt) +DEF metric_name_4 = '&7.'; +UNDEF 7; +-- +COL cs_metric_unit_4 NEW_V cs_metric_unit_4 NOPRI; +SELECT metric_unit cs_metric_unit_4 FROM &&view_name. WHERE metric_name = '&&metric_name_4.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 18 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_4.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.') + ORDER BY + metric_name +/ +PRO +PRO 8. Enter 5th Metric Name: (opt) +DEF metric_name_5 = '&8.'; +UNDEF 8; +-- +COL cs_metric_unit_5 NEW_V cs_metric_unit_5 NOPRI; +SELECT metric_unit cs_metric_unit_5 FROM &&view_name. WHERE metric_name = '&&metric_name_5.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name. + WHERE &&common_predicate. + AND group_id = 18 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_4.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_5.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.', '&&metric_name_5.') + ORDER BY + metric_name +/ +PRO +PRO 9. Enter 6th Metric Name: (opt) +DEF metric_name_6 = '&9.'; +UNDEF 9; +PRO +PRO 10. Value: [{average}|maxval] +DEF cs_value = '&10.'; +UNDEF 10; +COL cs_value NEW_V cs_value NOPRI; +SELECT CASE WHEN LOWER(TRIM('&&cs_value.')) IN ('average', 'maxval') THEN LOWER(TRIM('&&cs_value.')) ELSE 'average' END cs_value FROM DUAL +/ +PRO +PRO 11. Graph Type: [{SteppedArea}|Line|Area|Scatter] note: SteppedArea and Area are stacked +DEF graph_type = '&11.'; +UNDEF 11; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('SteppedArea', 'Line', 'Area', 'Scatter') THEN '&&graph_type.' ELSE 'SteppedArea' END AS cs_graph_type FROM DUAL +/ +PRO +PRO 12. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&12.'; +UNDEF 12; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "PDB &&cs_con_name. System Metrics (&&cs_value.)"; +DEF chart_title = "PDB &&cs_con_name. System Metrics (&&cs_value.)"; +DEF xaxis_title = "&&cs_value. between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "&&cs_metric_unit_1."; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&metric_filter." "&&metric_name_1." "&&metric_name_2." "&&metric_name_3." "&&metric_name_4." "&&metric_name_5." "&&metric_name_6." "&&cs_value." "&&cs_graph_type." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&metric_name_1.', id:'1', type:'number'} +PRO ,{label:'&&metric_name_2.', id:'2', type:'number'} +PRO ,{label:'&&metric_name_3.', id:'3', type:'number'} +PRO ,{label:'&&metric_name_4.', id:'4', type:'number'} +PRO ,{label:'&&metric_name_5.', id:'5', type:'number'} +PRO ,{label:'&&metric_name_6.', id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +sysmetric_history AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + end_time, + metric_name, + &&cs_value. value + FROM dba_hist_con_sysmetric_summ + WHERE &&common_predicate. + AND metric_name IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.', '&&metric_name_5.', '&&metric_name_6.') + AND dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + end_time time, + SUM(CASE metric_name WHEN '&&metric_name_1.' THEN value ELSE 0 END) metric_name_1, + SUM(CASE metric_name WHEN '&&metric_name_2.' THEN value ELSE 0 END) metric_name_2, + SUM(CASE metric_name WHEN '&&metric_name_3.' THEN value ELSE 0 END) metric_name_3, + SUM(CASE metric_name WHEN '&&metric_name_4.' THEN value ELSE 0 END) metric_name_4, + SUM(CASE metric_name WHEN '&&metric_name_5.' THEN value ELSE 0 END) metric_name_5, + SUM(CASE metric_name WHEN '&&metric_name_6.' THEN value ELSE 0 END) metric_name_6 + FROM sysmetric_history + GROUP BY + end_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.metric_name_1)|| + ','||num_format(q.metric_name_2)|| + ','||num_format(q.metric_name_3)|| + ','||num_format(q.metric_name_4)|| + ','||num_format(q.metric_name_5)|| + ','||num_format(q.metric_name_6)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_some_sysmetric_for_pdb_mem_chart.sql b/csierra/cs_some_sysmetric_for_pdb_mem_chart.sql new file mode 100644 index 0000000..978686b --- /dev/null +++ b/csierra/cs_some_sysmetric_for_pdb_mem_chart.sql @@ -0,0 +1,283 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_some_sysmetric_for_pdb_mem_chart.sql +-- +-- Purpose: Some System Metrics as per V$CON_SYSMETRIC_HISTORY View for a PDB (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/03/02 +-- +-- Usage: Execute connected to CDB and select some metrics. +-- +-- Enter filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_some_sysmetric_for_pdb_mem_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF view_name_prefix = 'v$con_sysmetric'; +DEF common_predicate = "con_id = SYS_CONTEXT('USERENV', 'CON_ID')"; +DEF cs_script_name = 'cs_some_sysmetric_for_pdb_mem_chart'; +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL metric_name FOR A45 TRUN; +COL metric_unit FOR A41 TRUN; +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 18 + ORDER BY + metric_name +/ +PRO +PRO 1. Filter on Metric Name or Unit (e.g. sessions, blocks, redo, undo, commit, transaction, bytes, sec, txn, logon, call, %, etc.): +DEF metric_filter = '&1.'; +UNDEF 1; +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 18 + AND CASE '&&metric_filter.' + WHEN '%' THEN CASE WHEN metric_name||metric_unit LIKE '%\%%' ESCAPE '\' THEN 1 END + ELSE CASE WHEN UPPER(metric_name||metric_unit) LIKE UPPER('%&&metric_filter.%') THEN 1 END + END = 1 + ORDER BY + metric_name +/ +PRO +PRO 2. Enter 1st Metric Name: +DEF metric_name_1 = '&2.'; +UNDEF 2; +-- +COL cs_metric_unit_1 NEW_V cs_metric_unit_1 NOPRI; +SELECT metric_unit cs_metric_unit_1 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_1.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 18 + AND UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') + AND metric_name NOT IN ('&&metric_name_1.') + ORDER BY + metric_name +/ +PRO +PRO Enter additional optional Metric Names, consistent with Metric Unit of "&&cs_metric_unit_1." +PRO +PRO 3. Enter 2nd Metric Name: (opt) +DEF metric_name_2 = '&3.'; +UNDEF 3; +-- +COL cs_metric_unit_2 NEW_V cs_metric_unit_2 NOPRI; +SELECT metric_unit cs_metric_unit_2 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_2.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 18 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.') + ORDER BY + metric_name +/ +PRO +PRO 4. Enter 3rd Metric Name: (opt) +DEF metric_name_3 = '&4.'; +UNDEF 4; +-- +COL cs_metric_unit_3 NEW_V cs_metric_unit_3 NOPRI; +SELECT metric_unit cs_metric_unit_3 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_3.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 18 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.') + ORDER BY + metric_name +/ +PRO +PRO 5. Enter 4th Metric Name: (opt) +DEF metric_name_4 = '&5.'; +UNDEF 5; +-- +COL cs_metric_unit_4 NEW_V cs_metric_unit_4 NOPRI; +SELECT metric_unit cs_metric_unit_4 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_4.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 18 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_4.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.') + ORDER BY + metric_name +/ +PRO +PRO 6. Enter 5th Metric Name: (opt) +DEF metric_name_5 = '&6.'; +UNDEF 6; +-- +COL cs_metric_unit_5 NEW_V cs_metric_unit_5 NOPRI; +SELECT metric_unit cs_metric_unit_5 FROM &&view_name_prefix. WHERE metric_name = '&&metric_name_5.' AND ROWNUM = 1 +/ +-- +SELECT metric_name, + metric_unit, + value + FROM &&view_name_prefix. + WHERE &&common_predicate. + AND group_id = 18 + AND (UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_1.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_2.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_3.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_4.%') OR UPPER(metric_unit) LIKE UPPER('%&&cs_metric_unit_5.%')) + AND metric_name NOT IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.', '&&metric_name_5.') + ORDER BY + metric_name +/ +PRO +PRO 7. Enter 6th Metric Name: (opt) +DEF metric_name_6 = '&7.'; +UNDEF 7; +PRO +PRO 8. Graph Type: [{SteppedArea}|Line|Area|Scatter] note: SteppedArea and Area are stacked +DEF graph_type = '&8.'; +UNDEF 8; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('SteppedArea', 'Line', 'Area', 'Scatter') THEN '&&graph_type.' ELSE 'SteppedArea' END AS cs_graph_type FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "PDB &&cs_con_name. System Metrics (value)"; +DEF chart_title = "PDB &&cs_con_name. System Metrics (value)"; +DEF xaxis_title = ""; +DEF vaxis_title = "&&cs_metric_unit_1."; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&metric_filter." "&&metric_name_1." "&&metric_name_2." "&&metric_name_3." "&&metric_name_4." "&&metric_name_5." "&&metric_name_6." "&&cs_graph_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&metric_name_1.', id:'1', type:'number'} +PRO ,{label:'&&metric_name_2.', id:'2', type:'number'} +PRO ,{label:'&&metric_name_3.', id:'3', type:'number'} +PRO ,{label:'&&metric_name_4.', id:'4', type:'number'} +PRO ,{label:'&&metric_name_5.', id:'5', type:'number'} +PRO ,{label:'&&metric_name_6.', id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +sysmetric_history AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + end_time, + metric_name, + value + FROM &&view_name_prefix._history + WHERE &&common_predicate. + AND metric_name IN ('&&metric_name_1.', '&&metric_name_2.', '&&metric_name_3.', '&&metric_name_4.', '&&metric_name_5.', '&&metric_name_6.') + AND group_id = 18 -- 1 minute +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + end_time time, + SUM(CASE metric_name WHEN '&&metric_name_1.' THEN value ELSE 0 END) metric_name_1, + SUM(CASE metric_name WHEN '&&metric_name_2.' THEN value ELSE 0 END) metric_name_2, + SUM(CASE metric_name WHEN '&&metric_name_3.' THEN value ELSE 0 END) metric_name_3, + SUM(CASE metric_name WHEN '&&metric_name_4.' THEN value ELSE 0 END) metric_name_4, + SUM(CASE metric_name WHEN '&&metric_name_5.' THEN value ELSE 0 END) metric_name_5, + SUM(CASE metric_name WHEN '&&metric_name_6.' THEN value ELSE 0 END) metric_name_6 + FROM sysmetric_history + GROUP BY + end_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.metric_name_1)|| + ','||num_format(q.metric_name_2)|| + ','||num_format(q.metric_name_3)|| + ','||num_format(q.metric_name_4)|| + ','||num_format(q.metric_name_5)|| + ','||num_format(q.metric_name_6)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_spbl_accept.sql b/csierra/cs_spbl_accept.sql new file mode 100644 index 0000000..18acf9a --- /dev/null +++ b/csierra/cs_spbl_accept.sql @@ -0,0 +1,90 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_accept.sql +-- +-- Purpose: Accept one or all SQL Plan Baselines for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_accept.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_accept'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 2. PLAN_NAME (opt): +DEF cs_plan_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO PLAN_NAME : "&&cs_plan_name." +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO Accept plan: "&&cs_plan_name." +DECLARE + l_plans INTEGER; + l_report CLOB; +BEGIN + FOR i IN (SELECT sql_handle, signature, plan_name, enabled, accepted, description + FROM dba_sql_plan_baselines + WHERE signature = &&cs_signature. + AND plan_name = NVL('&&cs_plan_name.', plan_name) + ORDER BY signature, plan_name) + LOOP + IF i.enabled = 'NO' THEN + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'YES'); + END IF; + IF i.accepted = 'NO' THEN + l_report := DBMS_SPM.evolve_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, verify => 'NO', commit => 'YES'); + END IF; + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => TRIM(i.description||' &&cs_script_name..sql &&cs_reference_sanitized. &&who_am_i. ACCEPTED='||TO_CHAR(SYSDATE, '&&cs_datetime_full_format.'))); + END LOOP; +END; +/ +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_corrupt.sql b/csierra/cs_spbl_corrupt.sql new file mode 100644 index 0000000..aa0117a --- /dev/null +++ b/csierra/cs_spbl_corrupt.sql @@ -0,0 +1,116 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_corrupt.sql +-- +-- Purpose: List of Corrupt SQL Plans with: missing Plan Rows from sys.sqlobj$plan +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/01/23 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_corrupt.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_corrupt'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +COL created FOR A26 HEA 'Created'; +COL last_modified FOR A19 HEA 'Last Modified'; +COL signature FOR 99999999999999999999 HEA 'Signature'; +COL category FOR A10 HEA 'Category' TRUNC; +COL obj_type FOR 99999999 HEA 'Obj Type'; +COL plan_name FOR A30 HEA 'Plan Name'; +COL ori FOR 999 HEA 'Ori'; +COL sql_handle FOR A30 HEA 'SQL Handle'; +COL sql_text FOR A80 HEA 'SQL Text' TRUNC; +COL description FOR A125 HEA 'Description'; +COL category FOR A30; +COL enabled FOR A10 HEA 'Enabled'; +COL accepted FOR A10 HEA 'Accepted'; +COL fixed FOR A10 HEA 'Fixed' PRI; +COL reproduced FOR A10 HEA 'Reproduced'; +COL autopurge FOR A10 HEA 'Autopurge'; +COL adaptive FOR A10 HEA 'Adaptive'; +COL plan_id FOR 999999999990 HEA 'Plan ID'; +-- +PRO +PRO Corrupt Baselines +PRO ~~~~~~~~~~~~~~~~~ +-- only works from PDB. do not use CONTAINERS(table_name) since it causes ORA-00600: internal error code, arguments: [kkdolci1], [], [], [], [], [], [], +SELECT o.signature, + o.category, + o.obj_type, + o.plan_id, + o.name AS plan_name, + TO_CHAR(a.created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(a.last_modified, '&&cs_datetime_full_format.') AS last_modified, + DECODE(BITAND(o.flags, 1), 0, 'NO', 'YES') AS enabled, + DECODE(BITAND(o.flags, 2), 0, 'NO', 'YES') AS accepted, + DECODE(BITAND(o.flags, 4), 0, 'NO', 'YES') AS fixed, + DECODE(BITAND(o.flags, 64), 0, 'YES', 'NO') AS reproduced, + DECODE(BITAND(o.flags, 128), 0, 'NO', 'YES') AS autopurge, + DECODE(BITAND(o.flags, 256), 0, 'NO', 'YES') AS adaptive, + a.origin AS ori, + t.sql_handle, + t.sql_text, + a.description + FROM sys.sqlobj$ o, + sys.sqlobj$auxdata a, + sys.sql$text t + WHERE o.category = 'DEFAULT' + AND o.obj_type = 2 /* 1:profile, 2:baseline, 3:patch */ + AND a.signature = o.signature + AND a.category = o.category + AND a.obj_type = o.obj_type + AND a.plan_id = o.plan_id + AND t.signature = o.signature + AND NOT EXISTS ( + SELECT NULL + FROM sys.sqlobj$plan p + WHERE p.signature = o.signature + AND p.category = o.category + AND p.obj_type = o.obj_type + AND p.plan_id = o.plan_id + AND p.id = 1 + AND ROWNUM = 1 + ) + AND NOT EXISTS ( + SELECT NULL + FROM sys.sqlobj$data d + WHERE d.signature = o.signature + AND d.category = o.category + AND d.obj_type = o.obj_type + AND d.plan_id = o.plan_id + AND d.comp_data IS NOT NULL + AND ROWNUM = 1 + ) + ORDER BY + o.signature, o.category, o.obj_type, o.plan_id +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_create.sql b/csierra/cs_spbl_create.sql new file mode 100644 index 0000000..029d29f --- /dev/null +++ b/csierra/cs_spbl_create.sql @@ -0,0 +1,164 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_create.sql +-- +-- Purpose: Create a SQL Plan Baseline for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_create.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_create'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/&&cs_zapper_managed. +-- +@@cs_internal/cs_plans_performance.sql +--@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 2. Plan Hash Value: +DEF cs_plan_hash_value = "&2."; +UNDEF 2; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id._&&cs_plan_hash_value.' cs_file_name FROM DUAL; +-- +-- preserves curren time since new baselines will have more recent creation than this: +COL creation_time NEW_V creation_time NOPRI; +SELECT TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS creation_time FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO PLAN_HASH_VAL: &&cs_plan_hash_value. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/&&cs_spbl_create_pre. +-- +--------------------------------------------------------------------------------------- +-- +-- tries to load plan from cursor +-- +DECLARE + l_signature NUMBER := :cs_signature; -- avoid PLS-00110: bind variable 'CS' not allowed in this context + l_created_plans INTEGER; + l_modified_plans INTEGER; + l_description VARCHAR2(500); +BEGIN + IF TO_NUMBER('&&cs_plan_hash_value.') > 0 THEN + l_created_plans := DBMS_SPM.load_plans_from_cursor_cache(sql_id => '&&cs_sql_id.', plan_hash_value => TO_NUMBER('&&cs_plan_hash_value.')); + DBMS_OUTPUT.put_line('Plans loaded from cursor cache:'||l_created_plans); + FOR i IN (SELECT /* 1 */ sql_handle, plan_name FROM dba_sql_plan_baselines WHERE l_created_plans > 0 AND signature = l_signature AND created > TO_DATE('&&creation_time.', '&&cs_datetime_full_format.') - 1/1440 AND description IS NULL AND origin LIKE 'MANUAL-LOAD%') /* on 19c it transformed from MANUAL-LOAD into MANUAL-LOAD-FROM-CURSOR-CACHE */ + LOOP + l_description := 'cs_spbl_create.sql SRC=MEM SQL_ID=&&cs_sql_id. PHV=&&cs_plan_hash_value. &&cs_reference_sanitized. &&who_am_i. CREATED=&&creation_time.'; + l_modified_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => l_description); + DBMS_OUTPUT.put_line('plan loaded from cursor cache: '||i.sql_handle||' '||i.plan_name||' '||l_description); + END LOOP; + END IF; +END; +/ +-- +--------------------------------------------------------------------------------------- +-- +-- tries to load plan from AWR (through a STS on 12c), but only if we could not load any plans from memory +-- +DECLARE + l_signature NUMBER := :cs_signature; -- avoid PLS-00110: bind variable 'CS' not allowed in this context + l_created_plans INTEGER; + l_modified_plans INTEGER; + l_sqlset_name VARCHAR2(30); + l_description VARCHAR2(500); + l_begin_snap INTEGER := TO_NUMBER('&&cs_min_snap_id.'); + l_end_snap INTEGER := TO_NUMBER('&&cs_max_snap_id.'); + sts_cur DBMS_SQLTUNE.sqlset_cursor; +BEGIN + -- only load plan from awr if none was loaded from cursor cache + SELECT COUNT(*) INTO l_created_plans FROM dba_sql_plan_baselines WHERE signature = l_signature AND created > TO_DATE('&&creation_time.', '&&cs_datetime_full_format.') - 1/1440 AND description IS NOT NULL AND origin LIKE 'MANUAL-LOAD%'; /* on 19c it transformed from MANUAL-LOAD into MANUAL-LOAD-FROM-CURSOR-CACHE */ + IF l_created_plans = 0 THEN + SELECT MIN(snap_id), MAX(snap_id) INTO l_begin_snap, l_end_snap FROM dba_hist_sqlstat WHERE sql_id = '&&cs_sql_id.' AND plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.') AND dbid = TO_NUMBER('&&cs_dbid.') AND instance_number = TO_NUMBER('&&cs_instance_number.'); -- maybe an overkill + DBMS_OUTPUT.put_line('begin_snap:'||l_begin_snap||' end_snap:'||l_end_snap); + IF l_end_snap > l_begin_snap THEN + -- + -- 19c DBMS_SPM.load_plans_from_awr fails with ORA-13769: Snapshots 94482 and 96578 do not exist. + -- $IF DBMS_DB_VERSION.ver_le_12_1 + -- $THEN + l_sqlset_name := 'S&&cs_sql_id._&&cs_file_timestamp.'; + l_description := 'SQL_ID=&&cs_sql_id. PHV=&&cs_plan_hash_value. CREATED=&&cs_file_timestamp.'; + l_sqlset_name := DBMS_SQLTUNE.create_sqlset(sqlset_name => l_sqlset_name, description => l_description); + DBMS_OUTPUT.put_line('created staging sts: '||l_sqlset_name); + -- + OPEN sts_cur FOR SELECT VALUE(p) FROM TABLE(DBMS_SQLTUNE.select_workload_repository(begin_snap => l_begin_snap, end_snap => l_end_snap, basic_filter => q'[sql_id = '&&cs_sql_id.' AND plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.')]')) p; + DBMS_SQLTUNE.load_sqlset(sqlset_name => l_sqlset_name, populate_cursor => sts_cur); + DBMS_OUTPUT.put_line('loaded sts: '||l_sqlset_name); + CLOSE sts_cur; + -- + l_created_plans := DBMS_SPM.load_plans_from_sqlset(sqlset_name => l_sqlset_name); + DBMS_OUTPUT.put_line('Plans loaded from sql tuning set:'||l_created_plans); + -- + IF l_created_plans > 0 THEN + DBMS_SQLTUNE.drop_sqlset(sqlset_name => l_sqlset_name); + DBMS_OUTPUT.put_line('dropped staging sts: '||l_sqlset_name); + -- + FOR i IN (SELECT /* 2 */ sql_handle, plan_name FROM dba_sql_plan_baselines WHERE l_created_plans > 0 AND signature = l_signature AND created > TO_DATE('&&creation_time.', '&&cs_datetime_full_format.') - 1/1440 AND description IS NULL AND origin LIKE 'MANUAL-LOAD%') /* on 19c it transformed from MANUAL-LOAD into MANUAL-LOAD-FROM-CURSOR-CACHE */ + LOOP + l_description := 'cs_spbl_create.sql SRC=STS SQL_ID=&&cs_sql_id. PHV=&&cs_plan_hash_value. &&cs_reference_sanitized. &&who_am_i. CREATED=&&creation_time.'; + l_modified_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => l_description); + DBMS_OUTPUT.put_line('plan loaded from awr using a sts: '||i.sql_handle||' '||i.plan_name||' '||l_description); + END LOOP; + END IF; + -- 19c DBMS_SPM.load_plans_from_awr fails with ORA-13769: Snapshots 94482 and 96578 do not exist. + -- $ELSE + -- l_created_plans := DBMS_SPM.load_plans_from_awr(begin_snap => l_begin_snap, end_snap => l_end_snap, basic_filter => q'[sql_id = '&&cs_sql_id.' AND plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.')]'); + -- DBMS_OUTPUT.put_line('Plans loaded from awr:'||l_created_plans); + -- FOR i IN (SELECT /* 3 */ sql_handle, plan_name FROM dba_sql_plan_baselines WHERE l_created_plans > 0 AND signature = l_signature AND created > TO_DATE('&&creation_time.', '&&cs_datetime_full_format.') - 1/1440 AND description IS NULL AND origin LIKE 'MANUAL-LOAD%') /* on 19c it transformed from MANUAL-LOAD into MANUAL-LOAD-FROM-CURSOR-CACHE */ + -- LOOP + -- l_description := 'cs_spbl_create.sql SRC=AWR SQL_ID=&&cs_sql_id. PHV=&&cs_plan_hash_value. &&cs_reference_sanitized. &&who_am_i. CREATED=&&creation_time.'; + -- l_modified_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => l_description); + -- DBMS_OUTPUT.put_line('plan loaded from awr: '||i.sql_handle||' '||i.plan_name||' '||l_description); + -- END LOOP; + -- $END + END IF; + END IF; +END; +/ +-- +@@cs_internal/&&cs_spbl_create_post. +-- +--------------------------------------------------------------------------------------- +-- +SET SERVEROUT OFF; +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_disable.sql b/csierra/cs_spbl_disable.sql new file mode 100644 index 0000000..767ef83 --- /dev/null +++ b/csierra/cs_spbl_disable.sql @@ -0,0 +1,88 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_disable.sql +-- +-- Purpose: Disable one or all SQL Plan Baselines for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_disable.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_disable'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 2. PLAN_NAME (opt): +DEF cs_plan_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO PLAN_NAME : "&&cs_plan_name." +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Disable plan: "&&cs_plan_name." +DECLARE + l_plans INTEGER; +BEGIN + FOR i IN (SELECT sql_handle, plan_name, description + FROM dba_sql_plan_baselines + WHERE signature = &&cs_signature. + AND enabled = 'YES' + AND plan_name = NVL('&&cs_plan_name.', plan_name) + ORDER BY signature, plan_name) + LOOP + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'NO'); + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => TRIM(i.description||' &&cs_script_name..sql &&cs_reference_sanitized. &&who_am_i. DISABLED='||TO_CHAR(SYSDATE, '&&cs_datetime_full_format.'))); + END LOOP; +END; +/ +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_drop.sql b/csierra/cs_spbl_drop.sql new file mode 100644 index 0000000..e3a8ab4 --- /dev/null +++ b/csierra/cs_spbl_drop.sql @@ -0,0 +1,90 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_drop.sql +-- +-- Purpose: Drop one or all SQL Plan Baselines for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_drop.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_drop'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/&&cs_zapper_managed. +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 2. PLAN_NAME (opt): +DEF cs_plan_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO PLAN_NAME : "&&cs_plan_name." +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +@@cs_internal/cs_spbl_internal_stgtab.sql +@@cs_internal/cs_spbl_internal_pack.sql +-- +@@cs_internal/&&cs_spbl_validate. +-- +PRO +PRO Drop plan: "&&cs_plan_name." +SET SERVEROUT ON; +WHENEVER SQLERROR EXIT FAILURE; +DECLARE + l_plans INTEGER := 0; +BEGIN + IF '&&cs_sql_handle.' IS NOT NULL OR '&&cs_plan_name.' IS NOT NULL THEN + l_plans := DBMS_SPM.drop_sql_plan_baseline(sql_handle => '&&cs_sql_handle.', plan_name => '&&cs_plan_name.'); + END IF; + DBMS_OUTPUT.put_line('Plans Dropped:'||l_plans); +END; +/ +WHENEVER SQLERROR CONTINUE; +SET SERVEROUT OFF; +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_drop_all.sql b/csierra/cs_spbl_drop_all.sql new file mode 100644 index 0000000..a3ba0f5 --- /dev/null +++ b/csierra/cs_spbl_drop_all.sql @@ -0,0 +1,89 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_drop_all.sql +-- +-- Purpose: Drop all SQL Plan Baselines for some SQL Text string on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/05 +-- +-- Usage: Connecting into PDB. +-- +-- Confirm when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_drop_all.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF sleep_seconds = '1'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_drop_all'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +COL count_distinct_bl NEW_V count_distinct_bl NOPRI; +COL estimated_seconds_bl NEW_V estimated_seconds_bl NOPRI; +SELECT TO_CHAR(COUNT(DISTINCT sql_handle) * TO_NUMBER('&&sleep_seconds.')) AS estimated_seconds_bl, TO_CHAR(COUNT(DISTINCT sql_handle)) AS count_distinct_bl FROM dba_sql_plan_baselines WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') +/ +-- +PRO +PRO *** +PRO *** You are about to drop &&count_distinct_bl. SQL Plan Baselines on this &&cs_con_name. PDB on SQL text "&&cs2_sql_text_piece." +PRO *** +PRO +PRO 2. Enter "Yes" (case sensitive) to continue, else -C +DEF cs_confirm = '&2.'; +UNDEF 2; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." "&&cs_confirm." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +PRO +PRO Drop all &&count_distinct_bl. SQL Plan Baselines which include SQL text "&&cs2_sql_text_piece." +PRO +PRO Estimated Seconds: &&estimated_seconds_bl. +PRO +SET SERVEROUT ON; +DECLARE + l_plans INTEGER := 0; + l_total INTEGER := 0; +BEGIN + IF '&&cs_confirm.' = 'Yes' THEN + FOR i IN (SELECT DISTINCT sql_handle FROM dba_sql_plan_baselines WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') ORDER BY sql_handle) + LOOP + l_plans := DBMS_SPM.drop_sql_plan_baseline(sql_handle => i.sql_handle); + l_total := l_total + l_plans; + DBMS_LOCK.sleep(TO_NUMBER('&&sleep_seconds.')); + END LOOP; + END IF; + DBMS_OUTPUT.put_line(' *** SQL Plan Baselines Dropped:'||l_total); +END; +/ +SET SERVEROUT OFF; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." "&&cs_confirm." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_enable.sql b/csierra/cs_spbl_enable.sql new file mode 100644 index 0000000..2984bdd --- /dev/null +++ b/csierra/cs_spbl_enable.sql @@ -0,0 +1,88 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_enable.sql +-- +-- Purpose: Enable one or all SQL Plan Baselines for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_enable.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_enable'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 2. PLAN_NAME (opt): +DEF cs_plan_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO PLAN_NAME : "&&cs_plan_name." +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Enable plan: "&&cs_plan_name." +DECLARE + l_plans INTEGER; +BEGIN + FOR i IN (SELECT sql_handle, plan_name, description + FROM dba_sql_plan_baselines + WHERE signature = &&cs_signature. + AND enabled = 'NO' + AND plan_name = NVL('&&cs_plan_name.', plan_name) + ORDER BY signature, plan_name) + LOOP + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'YES'); + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => TRIM(i.description||' &&cs_script_name..sql &&cs_reference_sanitized. &&who_am_i. ENABLED='||TO_CHAR(SYSDATE, '&&cs_datetime_full_format.'))); + END LOOP; +END; +/ +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_evolve.sql b/csierra/cs_spbl_evolve.sql new file mode 100644 index 0000000..08520ed --- /dev/null +++ b/csierra/cs_spbl_evolve.sql @@ -0,0 +1,66 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_evolve.sql +-- +-- Purpose: Evolve a SQL Plan Baseline for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_evolve.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_evolve'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/&&cs_zapper_managed. +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +-- preserves curren time since new baselines will have more recent creation than this: +COL creation_time NEW_V creation_time NOPRI; +SELECT TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS creation_time FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO please wait... it may take several minutes! +@@cs_internal/cs_spbl_evolve_internal.sql +-- +PRO +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_expdp.sql b/csierra/cs_spbl_expdp.sql new file mode 100644 index 0000000..d281d59 --- /dev/null +++ b/csierra/cs_spbl_expdp.sql @@ -0,0 +1,90 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_expdp.sql +-- +-- Purpose: Packs into staging table one or all SQL Plan Baselines for given SQL_ID +-- and Exports such Baselines using Datapump +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_expdp.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_expdp'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id._SPM_EXPDP' cs_file_name FROM DUAL; +DEF cs_dp_file_name = ''; +COL cs_dp_file_name NEW_V cs_dp_file_name NOPRI; +SELECT REPLACE('&&cs_file_name.', '&&cs_file_dir.') AS cs_dp_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +PRO +ACCEPT sys_password CHAR PROMPT 'Enter SYS Password (hidden): ' HIDE +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO TEMP_DIR : "&&cs_temp_dir." +-- +@@cs_internal/cs_print_sql_text.sql +-- +DEF cs_plan_name = ''; +@@cs_internal/cs_spbl_internal_stgtab.sql +@@cs_internal/cs_spbl_internal_stgtab_delete.sql +@@cs_internal/cs_spbl_internal_pack.sql +-- +@@cs_internal/cs_temp_dir_create.sql +-- +HOS expdp \"sys/&&sys_password.@&&cs_easy_connect_string. AS SYSDBA\" DIRECTORY=CS_TEMP_DIR DUMPFILE=&&cs_dp_file_name..dmp LOGFILE=&&cs_dp_file_name..expdb.log TABLES=&&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline QUERY=\"WHERE signature = &&cs_signature. AND BITAND\(status\, 1\) \<\> 0 AND BITAND\(status\, 2\) \<\> 0\" EXCLUDE=STATISTICS +UNDEF sys_password +-- +HOS cp &&cs_temp_dir./&&cs_dp_file_name..* /tmp/ +HOS chmod 644 /tmp/&&cs_dp_file_name..* +-- +@@cs_internal/cs_temp_dir_drop.sql +-- +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- +PRO +PRO Exported DataPump Files +PRO ~~~~~~~~~~~~~~~~~~~~~~~ +HOS ls -lt /tmp/&&cs_dp_file_name..* +PRO +PRO On target Host: +PRO ~~~~~~~~~~~~~~~ +PRO 1. $ scp &&cs_host_name.:/tmp/&&cs_dp_file_name..dmp /tmp/ +PRO Note: command above works if target and source and on same Region, else scp into your pc/mac then into target +PRO +PRO 2. SQL> @cs_spbl_impdp.sql "&&cs_dp_file_name..dmp" "&&cs_sql_id." "&&cs_plan_name." +PRO Note: execute command above connected into PDB (i.e. &&cs_con_name.) +PRO +-- diff --git a/csierra/cs_spbl_failed.sql b/csierra/cs_spbl_failed.sql new file mode 100644 index 0000000..6585123 --- /dev/null +++ b/csierra/cs_spbl_failed.sql @@ -0,0 +1,147 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_failed.sql +-- +-- Purpose: List of SQL Plans with: "Failed to use SQL plan baseline for this statement" +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/05/27 +-- +-- Usage: Connecting into PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_failed.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_failed'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +COL child_number FOR 99990 HEA 'CHILD'; +COL plan_hash_value FOR 9999999999 HEA 'PHV'; +COL executions FOR 999,999,990; +COL cpu_time FOR 999,999,999,990; +COL sql_handle FOR A20; +COL plan_name FOR A30; +COL sql_text FOR A80 TRUNC; +-- +BREAK ON sql_text SKIP 1 DUPL; +-- +PRO +PRO Failed to use SQL plan baseline on &&cs_con_name. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT s.sql_text, + p.sql_id, + p.child_number, + p.plan_hash_value, + s.executions, + s.cpu_time, + s.exact_matching_signature AS signature, + b.sql_handle, + b.plan_name +FROM v$sql_plan p, + XMLTABLE('other_xml/info' PASSING XMLTYPE(p.other_xml) COLUMNS type VARCHAR2(30) PATH '@type', note VARCHAR2(4) PATH '@note', value VARCHAR2(30) PATH '.') x, + v$sql s, + dba_sql_plan_baselines b +WHERE p.plan_hash_value > 0 +--AND p.id = 1 +AND p.other_xml IS NOT NULL +AND x.type = 'baseline_repro_fail' +AND x.value = 'yes' +AND s.parsing_user_id > 0 +AND s.parsing_schema_id > 0 +AND s.address = p.address +AND s.hash_value = p.hash_value +AND s.sql_id = p.sql_id +AND s.plan_hash_value = p.plan_hash_value +AND s.child_address = p.child_address +AND s.child_number = p.child_number +AND s.exact_matching_signature > 0 -- INSERT from values has 0 on signature +AND s.executions > 0 +AND s.cpu_time > 0 +AND s.buffer_gets > 0 +AND s.buffer_gets > s.executions +AND s.object_status = 'VALID' +AND s.is_obsolete = 'N' +AND s.is_shareable = 'Y' +-- AND s.is_bind_aware = 'N' -- to ignore cursors using adaptive cursor sharing ACS as per CHANGE-190522 +AND s.is_resolved_adaptive_plan IS NULL -- to ignore adaptive plans which cause trouble when combined with SPM +AND s.is_reoptimizable = 'N' -- to ignore cursors which require adjustments as per cardinality feedback +AND s.last_active_time > SYSDATE - (1/24) +AND b.signature = s.exact_matching_signature +AND b.enabled = 'YES' +AND b.accepted = 'YES' +-- AND b.created < SYSDATE - 1 +ORDER BY + s.sql_text, + p.sql_id, + p.child_number, + b.plan_name +/ +-- +COL line FOR A40 HEA 'COMMAND'; +PRO +PRO Drop commands +PRO ~~~~~~~~~~~~~ +SELECT DISTINCT + '@cs_spbl_drop.sql "'||p.sql_id||'" ""' AS line +FROM v$sql_plan p, + XMLTABLE('other_xml/info' PASSING XMLTYPE(p.other_xml) COLUMNS type VARCHAR2(30) PATH '@type', note VARCHAR2(4) PATH '@note', value VARCHAR2(30) PATH '.') x, + v$sql s, + dba_sql_plan_baselines b +WHERE p.plan_hash_value > 0 +--AND p.id = 1 +AND p.other_xml IS NOT NULL +AND x.type = 'baseline_repro_fail' +AND x.value = 'yes' +AND s.parsing_user_id > 0 +AND s.parsing_schema_id > 0 +AND s.address = p.address +AND s.hash_value = p.hash_value +AND s.sql_id = p.sql_id +AND s.plan_hash_value = p.plan_hash_value +AND s.child_address = p.child_address +AND s.child_number = p.child_number +AND s.exact_matching_signature > 0 -- INSERT from values has 0 on signature +AND s.executions > 0 +AND s.cpu_time > 0 +AND s.buffer_gets > 0 +AND s.buffer_gets > s.executions +AND s.object_status = 'VALID' +AND s.is_obsolete = 'N' +AND s.is_shareable = 'Y' +-- AND s.is_bind_aware = 'N' -- to ignore cursors using adaptive cursor sharing ACS as per CHANGE-190522 +AND s.is_resolved_adaptive_plan IS NULL -- to ignore adaptive plans which cause trouble when combined with SPM +AND s.is_reoptimizable = 'N' -- to ignore cursors which require adjustments as per cardinality feedback +AND s.last_active_time > SYSDATE - (1/24) +AND b.signature = s.exact_matching_signature +AND b.enabled = 'YES' +AND b.accepted = 'YES' +-- AND b.created < SYSDATE - 1 +ORDER BY + 1 +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_fix.sql b/csierra/cs_spbl_fix.sql new file mode 100644 index 0000000..54ec68e --- /dev/null +++ b/csierra/cs_spbl_fix.sql @@ -0,0 +1,96 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_fix.sql +-- +-- Purpose: Fix one or all SQL Plan Baselines for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_fix.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_fix'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 2. PLAN_NAME (opt): +DEF cs_plan_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO PLAN_NAME : "&&cs_plan_name." +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Fix plan: "&&cs_plan_name." +DECLARE + l_plans INTEGER; + l_report CLOB; +BEGIN + FOR i IN (SELECT sql_handle, signature, plan_name, enabled, accepted, fixed, description + FROM dba_sql_plan_baselines + WHERE signature = &&cs_signature. + AND plan_name = NVL('&&cs_plan_name.', plan_name) + ORDER BY signature, plan_name) + LOOP + IF i.enabled = 'NO' THEN + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'YES'); + END IF; + IF i.accepted = 'NO' THEN + l_report := DBMS_SPM.evolve_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, verify => 'NO', commit => 'YES'); + END IF; + IF i.fixed = 'NO' THEN + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'FIXED', attribute_value => 'YES'); + END IF; + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => TRIM(i.description||' &&cs_script_name..sql &&cs_reference_sanitized. &&who_am_i. MANUAL-FIX='||TO_CHAR(SYSDATE, '&&cs_datetime_full_format.'))); + END LOOP; +END; +/ +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_impdp.sql b/csierra/cs_spbl_impdp.sql new file mode 100644 index 0000000..60fa948 --- /dev/null +++ b/csierra/cs_spbl_impdp.sql @@ -0,0 +1,113 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_impdp.sql +-- +-- Purpose: Imports from Datapump file into a staging table all SQL Plan Baselines +-- and Unpacks from staging table one or all SQL Plan Baselines for given SQL +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter Datapump filename and SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_impdp.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_impdp'; +-- +ACCEPT sys_password CHAR PROMPT 'Enter SYS Password (hidden): ' HIDE +-- +PRO +PRO Datapump files on /tmp +PRO ~~~~~~~~~~~~~~~~~~~~~~ +HOS ls -lt /tmp/*_SPM_EXPDP.dmp +-- */ +PRO +PRO 1. Enter Datapump filename: (exclude directory path /tmp/) +DEF dp_file_name = '&1.'; +UNDEF 1; +COL cs_dp_file_name NEW_V cs_dp_file_name NOPRI; +SELECT REPLACE('&&dp_file_name.', '.dmp') cs_dp_file_name FROM DUAL; +-- +PRO 2. SQL_ID: +DEF cs_sql_id = '&2.'; +UNDEF 2; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_spbl_internal_stgtab.sql +@@cs_internal/cs_spbl_internal_stgtab_delete.sql +-- +@@cs_internal/cs_temp_dir_create.sql +-- +HOS cp /tmp/&&cs_dp_file_name..dmp &&cs_temp_dir./ +-- +-- TABLE_EXISTS_ACTION=APPEND +-- +HOS impdp \"sys/&&sys_password.@&&cs_easy_connect_string. AS SYSDBA\" DIRECTORY=CS_TEMP_DIR DUMPFILE=&&cs_dp_file_name..dmp LOGFILE=&&cs_dp_file_name..impdp.log TABLES=&&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline CONTENT=DATA_ONLY +UNDEF sys_password +-- +HOS cp &&cs_temp_dir./&&cs_dp_file_name..impdp.log /tmp/ +HOS chmod 644 /tmp/&&cs_dp_file_name..impdp.log +-- +@@cs_internal/cs_temp_dir_drop.sql +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 3. Plan Name to unpack from staging table: (opt) +DEF cs_plan_name = '&3.'; +UNDEF 3; +-- +PRO +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_dp_file_name." "&&cs_sql_id." "&&cs_plan_name." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO DATAPUMP_FILE: &&dp_file_name. +PRO PLAN_NAME : "&&cs_plan_name." +-- +@@cs_internal/cs_print_sql_text.sql +PRO +PRO Unpack plan: "&&cs_plan_name." +DECLARE + l_plans INTEGER; +BEGIN + FOR i IN (SELECT sql_handle, obj_name plan_name + FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline + WHERE signature = COALESCE(TO_NUMBER('&&cs_signature.'), signature) + AND obj_name = COALESCE('&&cs_plan_name.', obj_name) + ORDER BY signature, obj_name) + LOOP + l_plans := DBMS_SPM.unpack_stgtab_baseline(table_name => '&&cs_stgtab_prefix._stgtab_baseline', table_owner => '&&cs_stgtab_owner.', sql_handle => i.sql_handle, plan_name => i.plan_name); + END LOOP; +END; +/ +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_dp_file_name." "&&cs_sql_id." "&&cs_plan_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_spbl_indexes.sql b/csierra/cs_spbl_indexes.sql new file mode 100644 index 0000000..dab1e56 --- /dev/null +++ b/csierra/cs_spbl_indexes.sql @@ -0,0 +1,224 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_indexes.sql +-- +-- Purpose: List of Indexes Referenced by all SQL Plan Baselines on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/07/29 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_indexes.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_indexes'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +COL sql_id FOR A13; +COL signature FOR 99999999999999999999; +COL sql_handle FOR A20; +COL plan_name FOR A30; +COL plan_id FOR 9999999999; +COL plan_hash FOR 9999999999; +COL plan_hash2 FOR 9999999999; +COL plan_hash_full FOR 9999999999; +COL indexed_columns FOR A200; +COL table_owner FOR A30; +COL table_name FOR A30; +COL index_owner FOR A30; +COL index_name FOR A30; +COL sql_text FOR A100 TRUNC; +COL description FOR A100 TRUNC; +COL created FOR A23; +COL last_modified FOR A23; +COL last_executed FOR A23; +COL timestamp FOR A19; +-- +-- only works from PDB. do not use CONTAINERS(table_name) since it causes ORA-00600: internal error code, arguments: [kkdolci1], [], [], [], [], [], [], +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +i AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + ic.table_owner, ic.table_name, ic.index_owner, ic.index_name, + LISTAGG('"'||ic.table_name||'"."'||ic.column_name||'"', ' ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY ic.column_position) AS indexed_columns + FROM dba_ind_columns ic + WHERE ROWNUM >= 1 /* NO_MERGE */ + GROUP BY + ic.table_owner, ic.table_name, ic.index_owner, ic.index_name +), +b AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + p.signature, + t.sql_handle, + o.name AS plan_name, + p.plan_id, + TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash"]')) AS plan_hash, -- normal plan_hash_value + TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash_2"]')) AS plan_hash_2, -- plan_hash_value ignoring transient object names (must be same than plan_id for a baseline to be used) + TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash_full"]')) AS plan_hash_full, -- adaptive plan (must be different than plan_hash_2 on loaded plans) + DECODE(BITAND(o.flags, 1), 0, 'NO', 'YES') AS enabled, + DECODE(BITAND(o.flags, 2), 0, 'NO', 'YES') AS accepted, + DECODE(BITAND(o.flags, 4), 0, 'NO', 'YES') AS fixed, + DECODE(BITAND(o.flags, 64), 0, 'YES', 'NO') AS reproduced, + DECODE(BITAND(o.flags, 128), 0, 'NO', 'YES') AS autopurge, + DECODE(BITAND(o.flags, 256), 0, 'NO', 'YES') AS adaptive, + SUBSTR(x.outline_hint, INSTR(x.outline_hint, '(', 1, 2) + 1, INSTR(x.outline_hint, '))') - INSTR(x.outline_hint, '(', 1, 2) - 1) AS indexed_columns, + t.sql_text, + a.description, + a.origin, + a.created, + a.last_modified, + o.last_executed, + p.timestamp + FROM sys.sqlobj$plan p, + XMLTABLE('other_xml/outline_data/hint' PASSING XMLTYPE(p.other_xml) COLUMNS outline_hint VARCHAR2(500) PATH '.') x, + sys.sqlobj$ o, + sys.sqlobj$auxdata a, + sys.sql$text t + WHERE 1 = 1 -- p.signature = 12466351907564247038 + AND p.category = 'DEFAULT' + AND p.obj_type = 2 /* 1:profile, 2:baseline, 3:patch */ + AND p.other_xml IS NOT NULL + AND x.outline_hint LIKE 'INDEX%(%(%))' + AND o.signature = p.signature + AND o.category = p.category + AND o.obj_type = p.obj_type + AND o.plan_id = p.plan_id + AND a.signature = o.signature + AND a.category = o.category + AND a.obj_type = o.obj_type + AND a.plan_id = o.plan_id + AND t.signature = p.signature + AND ROWNUM >= 1 /* NO_MERGE */ +), +x AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + compute_sql_id(b.sql_text) AS sql_id, + b.sql_handle, + b.plan_name, + b.plan_id, + b.plan_hash, + b.plan_hash_2, + b.plan_hash_full, + b.enabled, + b.accepted, + b.fixed, + b.reproduced, + b.autopurge, + b.adaptive, + b.indexed_columns, + NVL(i.table_owner, '"missing"') AS table_owner, + NVL(i.table_name, '"missing"') AS table_name, + NVL(i.index_owner, '"missing"') AS index_owner, + NVL(i.index_name, '"missing"') AS index_name, + DBMS_LOB.SUBSTR(b.sql_text, 1000) AS sql_text, + b.description, + b.created, + b.last_modified, + b.last_executed, + b.timestamp + FROM b, i + WHERE i.indexed_columns(+) = b.indexed_columns + AND ROWNUM >= 1 /* NO_MERGE */ +) +SELECT /* comment out unwanted columns */ + x.sql_id, + x.sql_text, + -- x.sql_handle, + x.plan_name, + x.plan_id, + -- x.plan_hash, + -- x.plan_hash_2, + -- x.plan_hash_full, + x.enabled, + x.accepted, + -- x.fixed, + -- x.reproduced, + -- x.autopurge, + -- x.adaptive, + x.indexed_columns, + x.table_owner, + x.table_name, + x.index_owner, + x.index_name, + -- x.created, + -- x.last_modified, + -- x.last_executed, + -- x.timestamp, + x.description + FROM x + ORDER BY + x.sql_id, + x.plan_name, + x.indexed_columns, + x.table_owner, + x.table_name, + x.index_owner, + x.index_name +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_spbl_list.sql b/csierra/cs_spbl_list.sql new file mode 100644 index 0000000..73c8fd3 --- /dev/null +++ b/csierra/cs_spbl_list.sql @@ -0,0 +1,58 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_list.sql +-- +-- Purpose: Summary list of SQL Plan Baselines for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_list.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_list'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_list_all_cdb.sql b/csierra/cs_spbl_list_all_cdb.sql new file mode 100644 index 0000000..9106917 --- /dev/null +++ b/csierra/cs_spbl_list_all_cdb.sql @@ -0,0 +1,142 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_list_all_cdb.sql +-- +-- Purpose: List all SQL Plan Baselines for some SQL Text string on CDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/12/12 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_list_all_cdb.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +-- @@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_list_all_cdb'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +COL created FOR A19 HEA 'Created'; +COL sql_id FOR A13; +COL sql_text FOR A80 TRUNC; +COL plan_name FOR A30 HEA 'Plan Name'; +COL child_cursors FOR 99999 HEA 'Child|Cursors'; +COL origin FOR A29 HEA 'Origin'; +COL last_executed FOR A19 HEA 'Last Executed'; +COL last_modified FOR A19 HEA 'Last Modified'; +COL last_verified FOR A19 HEA 'Last Verified'; +COL description FOR A200 HEA 'Description'; +COL enabled FOR A10 HEA 'Enabled'; +COL accepted FOR A10 HEA 'Accepted'; +COL fixed FOR A10 HEA 'Fixed' PRI; +COL reproduced FOR A10 HEA 'Reproduced'; +COL autopurge FOR A10 HEA 'Autopurge'; +COL adaptive FOR A10 HEA 'Adaptive'; +COL pdb_name FOR A30 HEA 'PDB Name'; +-- +SET FEED ON; +-- +PRO +PRO SQL PLAN BASELINES - LIST (cdb_sql_plan_baselines) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +used_baselines AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, sql_plan_baseline, COUNT(*) AS child_cursors + FROM v$sql + WHERE sql_plan_baseline IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + con_id, sql_plan_baseline +) +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + TO_CHAR(s.last_executed, '&&cs_datetime_full_format.') AS last_executed, + TO_CHAR(s.last_verified, '&&cs_datetime_full_format.') AS last_verified, + compute_sql_id(s.sql_text) AS sql_id, + DBMS_LOB.substr(s.sql_text, 1000) AS sql_text, + s.plan_name, + b.child_cursors, + s.enabled, s.accepted, s.fixed, s.reproduced, s.autopurge, s.adaptive, + s.origin, + s.description, + c.name AS pdb_name + FROM cdb_sql_plan_baselines s, + used_baselines b, + v$containers c + WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND b.sql_plan_baseline(+) = s.plan_name + AND b.con_id(+) = s.con_id + AND c.con_id = s.con_id + ORDER BY + s.created, s.last_modified, s.last_executed, s.plan_name +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_list_all_pdb.sql b/csierra/cs_spbl_list_all_pdb.sql new file mode 100644 index 0000000..5205f4a --- /dev/null +++ b/csierra/cs_spbl_list_all_pdb.sql @@ -0,0 +1,137 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_list_all_pdb.sql +-- +-- Purpose: List all SQL Plan Baselines for some SQL Text string on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/12/12 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_list_all_pdb.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_list_all_pdb'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +COL created FOR A19 HEA 'Created'; +COL sql_id FOR A13; +COL sql_text FOR A80 TRUNC; +COL plan_name FOR A30 HEA 'Plan Name'; +COL child_cursors FOR 99999 HEA 'Child|Cursors'; +COL origin FOR A29 HEA 'Origin'; +COL last_executed FOR A19 HEA 'Last Executed'; +COL last_modified FOR A19 HEA 'Last Modified'; +COL last_verified FOR A19 HEA 'Last Verified'; +COL description FOR A200 HEA 'Description'; +COL enabled FOR A10 HEA 'Enabled'; +COL accepted FOR A10 HEA 'Accepted'; +COL fixed FOR A10 HEA 'Fixed' PRI; +COL reproduced FOR A10 HEA 'Reproduced'; +COL autopurge FOR A10 HEA 'Autopurge'; +COL adaptive FOR A10 HEA 'Adaptive'; +-- +SET FEED ON; +-- +PRO +PRO SQL PLAN BASELINES - LIST (dba_sql_plan_baselines) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +used_baselines AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sql_plan_baseline, COUNT(*) AS child_cursors + FROM v$sql + WHERE sql_plan_baseline IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + sql_plan_baseline +) +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + TO_CHAR(s.last_executed, '&&cs_datetime_full_format.') AS last_executed, + TO_CHAR(s.last_verified, '&&cs_datetime_full_format.') AS last_verified, + compute_sql_id(s.sql_text) AS sql_id, + DBMS_LOB.substr(s.sql_text, 1000) AS sql_text, + s.plan_name, + b.child_cursors, + s.enabled, s.accepted, s.fixed, s.reproduced, s.autopurge, s.adaptive, + s.origin, + s.description + FROM dba_sql_plan_baselines s, + used_baselines b + WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND b.sql_plan_baseline(+) = s.plan_name + ORDER BY + s.created, s.last_modified, s.last_executed, s.plan_name +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_meta.sql b/csierra/cs_spbl_meta.sql new file mode 100644 index 0000000..5a8dca7 --- /dev/null +++ b/csierra/cs_spbl_meta.sql @@ -0,0 +1,131 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_meta.sql +-- +-- Purpose: SQL Plan Baseline Metadata for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_meta.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_meta'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +-- +CLEAR SQL +PRO +PRO dba_sql_patches +PRO ~~~~~~~~~~~~~~~ +1 SELECT * FROM dba_sql_patches WHERE signature = TO_NUMBER('&&cs_signature.') ORDER BY name; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO dba_sql_profiles +PRO ~~~~~~~~~~~~~~~~ +1 SELECT * FROM dba_sql_profiles WHERE signature = TO_NUMBER('&&cs_signature.') ORDER BY name; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO dba_sql_plan_baselines +PRO ~~~~~~~~~~~~~~~~~~~~~~ +1 SELECT * FROM dba_sql_plan_baselines WHERE signature = TO_NUMBER('&&cs_signature.') ORDER BY plan_name; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO sys.sql$ +PRO ~~~~~~~~ +1 SELECT * FROM sys.sql$ WHERE signature = TO_NUMBER('&&cs_signature.'); +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO sys.sqllog$ +PRO ~~~~~~~~~~~ +1 SELECT * FROM sys.sqllog$ WHERE signature = TO_NUMBER('&&cs_signature.'); +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO sys.sql$text +PRO ~~~~~~~~~~~~ +1 SELECT * FROM sys.sql$text WHERE signature = TO_NUMBER('&&cs_signature.'); +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO sys.sqlobj$ +PRO ~~~~~~~~~~~ +1 SELECT * FROM sys.sqlobj$ WHERE signature = TO_NUMBER('&&cs_signature.') ORDER BY obj_type, plan_id; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO sys.sqlobj$data +PRO ~~~~~~~~~~~~~~~ +1 SELECT * FROM sys.sqlobj$data WHERE signature = TO_NUMBER('&&cs_signature.') ORDER BY obj_type, plan_id; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO sys.sqlobj$auxdata +PRO ~~~~~~~~~~~~~~~~~~ +1 SELECT * FROM sys.sqlobj$auxdata WHERE signature = TO_NUMBER('&&cs_signature.') ORDER BY obj_type, plan_id; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO sys.sqlobj$plan +PRO ~~~~~~~~~~~~~~~ +1 SELECT * FROM sys.sqlobj$plan WHERE signature = TO_NUMBER('&&cs_signature.') ORDER BY obj_type, plan_id, id; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO sys.smb$config +PRO ~~~~~~~~~~~~~~ +1 SELECT * FROM sys.smb$config ORDER BY parameter_name; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO sys.sqlobj$data.comp_data +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +SET PAGES 500; +COL obj_type FOR 99999999; +COL plan_id FOR 9999999999; +COL comp_data FOR A300; +BREAK ON plan_id SKIP PAGE DUPL; +SELECT obj_type, plan_id, XMLSERIALIZE(DOCUMENT XMLTYPE(comp_data) AS CLOB INDENT SIZE = 2) AS comp_data FROM sys.sqlobj$data WHERE signature = TO_NUMBER('&&cs_signature.') AND comp_data IS NOT NULL; +CLEAR BREAK; +SET PAGES 100; +PRO +PRO sys.sqlobj$plan.other_xml +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +SET PAGES 500; +COL obj_type FOR 99999999; +COL plan_id FOR 9999999999; +COL id FOR 999; +COL other_xml FOR A300; +BREAK ON plan_id SKIP PAGE DUPL; +SELECT obj_type, plan_id, id, XMLSERIALIZE(DOCUMENT XMLTYPE(other_xml) AS CLOB INDENT SIZE = 2) AS other_xml FROM sys.sqlobj$plan WHERE signature = TO_NUMBER('&&cs_signature.') AND other_xml IS NOT NULL; +CLEAR BREAK; +SET PAGES 100; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_spbl_pack.sql b/csierra/cs_spbl_pack.sql new file mode 100644 index 0000000..9dfcc0e --- /dev/null +++ b/csierra/cs_spbl_pack.sql @@ -0,0 +1,73 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_pack.sql +-- +-- Purpose: Packs into staging table one or all SQL Plan Baselines for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_pack.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_pack'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 2. PLAN_NAME (opt): +DEF cs_plan_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO PLAN_NAME : "&&cs_plan_name." +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +@@cs_internal/cs_spbl_internal_stgtab.sql +@@cs_internal/cs_spbl_internal_pack.sql +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_plan.sql b/csierra/cs_spbl_plan.sql new file mode 100644 index 0000000..d8e514b --- /dev/null +++ b/csierra/cs_spbl_plan.sql @@ -0,0 +1,59 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_plan.sql +-- +-- Purpose: Display SQL Plan Baseline for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/03/10 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_plan.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_plan'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_spbl_internal_plan.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_purge_outdated.sql b/csierra/cs_spbl_purge_outdated.sql new file mode 100644 index 0000000..30b62fc --- /dev/null +++ b/csierra/cs_spbl_purge_outdated.sql @@ -0,0 +1,114 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_purge_outdated.sql +-- +-- Purpose: Purge Outdated SQL Plan Baselines +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/01/23 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_purge_outdated.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_purge_outdated'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +PRO +PRO please wait ... +SET SERVEROUT ON; +WHENEVER SQLERROR EXIT FAILURE; + +DECLARE + l_plans INTEGER; +BEGIN + FOR i IN (SELECT o.signature, + o.category, + o.obj_type, + o.plan_id, + t.sql_handle, + o.name AS plan_name, + DECODE(BITAND(o.flags, 1), 0, 'NO', 'YES') AS enabled, + a.description + FROM sys.sqlobj$ o, + sys.sqlobj$auxdata a, + sys.sql$text t + WHERE o.category = 'DEFAULT' + AND o.obj_type = 2 + AND a.signature = o.signature + AND a.category = o.category + AND a.obj_type = o.obj_type + AND a.plan_id = o.plan_id + AND t.signature = o.signature + AND NOT EXISTS ( + SELECT NULL + FROM sys.sqlobj$plan p + WHERE p.signature = o.signature + AND p.category = o.category + AND p.obj_type = o.obj_type + AND p.plan_id = o.plan_id + AND p.id = 1 + AND ROWNUM = 1 + ) + AND NOT EXISTS ( + SELECT NULL + FROM sys.sqlobj$data d + WHERE d.signature = o.signature + AND d.category = o.category + AND d.obj_type = o.obj_type + AND d.plan_id = o.plan_id + AND d.comp_data IS NOT NULL + AND ROWNUM = 1 + ) + ORDER BY + o.signature, o.category, o.obj_type, o.plan_id) + LOOP + DBMS_OUTPUT.put_line('Plan: '||i.plan_name||' '||i.description); + IF i.enabled = 'YES' THEN + DBMS_OUTPUT.put_line('Disabling Plan'); + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'ENABLED', attribute_value => 'NO'); + DBMS_OUTPUT.put_line('Disabled '||l_plans||' Plan(s)'); + END IF; + DBMS_OUTPUT.put_line('Fixing Corrupted Plan'); + DELETE sys.sqlobj$plan WHERE signature = i.signature AND category = i.category AND obj_type = i.obj_type AND plan_id = i.plan_id AND id = 1; + INSERT INTO sys.sqlobj$plan (signature, category, obj_type, plan_id, id) VALUES (i.signature, i.category, i.obj_type, i.plan_id, 1); + COMMIT; + DBMS_OUTPUT.put_line('Droping Plan'); + l_plans := DBMS_SPM.drop_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name); + DBMS_OUTPUT.put_line('Dropped '||l_plans||' Plan(s)'); + END LOOP; + DBMS_OUTPUT.put_line('Dropping Outdated Plan(s)'); + l_plans := SYS.DBMS_SPM_INTERNAL.auto_purge_sql_plan_baseline; + DBMS_OUTPUT.put_line('Dropped '||l_plans||' Outdated Plan(s)'); +END; +/ +WHENEVER SQLERROR CONTINUE; + +SET SERVEROUT OFF; +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_refresh.sql b/csierra/cs_spbl_refresh.sql new file mode 100644 index 0000000..b801079 --- /dev/null +++ b/csierra/cs_spbl_refresh.sql @@ -0,0 +1,72 @@ +DEF 1 = 'C##IOD'; +VAR plans_to_refresh_limit NUMBER; +EXEC :plans_to_refresh_limit := 1000; +-- +WITH +candidate_sql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT s.con_id, s.exact_matching_signature AS signature, s.sql_id, s.plan_hash_value, s.sql_plan_baseline AS plan_name, s.sql_text +FROM v$sql s +WHERE s.sql_plan_baseline IS NOT NULL -- a baseline exists and it is in use +AND s.parsing_user_id > 0 -- exclude SYS +AND s.parsing_schema_id > 0 -- exclude SYS +AND s.parsing_schema_name NOT IN ('SYS', 'SYSTEM', 'MDSYS', 'ORDDATA', 'CTXSYS', 'WMSYS', 'DVSYS', 'XDB', 'LBACSYS', 'DBSNMP', 'GSMADMIN_INTERNAL') -- to reduce selection +AND s.parsing_schema_name NOT LIKE 'C##%' -- to reduce selection +AND s.parsing_schema_name NOT LIKE 'APEX%' -- to reduce selection +AND s.plan_hash_value > 0 -- e.g.: PL/SQL has 0 on PHV +AND s.exact_matching_signature > 0 -- INSERT from values has 0 on signature +AND s.executions > 0 +AND s.cpu_time > 0 +AND s.buffer_gets > 0 +AND s.buffer_gets > s.executions +AND s.object_status = 'VALID' +AND s.is_obsolete = 'N' +AND s.is_shareable = 'Y' +AND s.is_bind_aware = 'N' -- to ignore cursors using adaptive cursor sharing ACS as per CHANGE-190522 +AND s.is_resolved_adaptive_plan IS NULL -- to ignore adaptive plans which cause trouble when combined with SPM +AND s.is_reoptimizable = 'N' -- to ignore cursors which require adjustments as per cardinality feedback +AND s.last_active_time > SYSDATE - (3/24) -- cursors has been executed within the last few hours +-- AND NOT EXISTS (SELECT NULL FROM &&1..zapper_ignore_sql_text i WHERE UPPER(s.sql_text) LIKE UPPER('%'||i.sql_text||'%')) +AND ROWNUM >= 1 /* MATERIALIZE NO_MERGE */ +), +candidate_baselines AS ( +SELECT /*+ MATERIALIZE NO_MERGE OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + DISTINCT + b.con_id, + b.created, + b.last_modified, + b.signature, + b.plan_name, + b.description + FROM cdb_sql_plan_baselines b + WHERE b.enabled = 'YES' + AND b.accepted = 'YES' + AND b.created < SYSDATE - 60 -- only consider refreshing baselines older than these many days + AND b.last_executed > SYSDATE - 7 -- only refresh a baseline if it has been executed during the last 7 days + AND b.parsing_schema_name NOT IN ('SYS', 'SYSTEM', 'MDSYS', 'ORDDATA', 'CTXSYS', 'WMSYS', 'DVSYS', 'XDB', 'LBACSYS', 'DBSNMP', 'GSMADMIN_INTERNAL') -- to reduce selection + AND b.parsing_schema_name NOT LIKE 'C##%' -- to reduce selection + AND b.parsing_schema_name NOT LIKE 'APEX%' -- to reduce selection + AND ROWNUM >= 1 /* MATERIALIZE NO_MERGE */ +) +SELECT s.sql_id, + c.name AS pdb_name, + s.signature, + s.plan_hash_value, + s.plan_name, + s.sql_text, + b.created, + b.last_modified, + b.description + FROM candidate_sql s, + candidate_baselines b, + v$containers c + WHERE b.con_id = s.con_id + AND b.signature = s.signature + AND b.plan_name = s.plan_name + AND c.con_id = s.con_id + ORDER BY + b.created, + b.last_modified + FETCH FIRST :plans_to_refresh_limit ROWS ONLY +/ + diff --git a/csierra/cs_spbl_sprf_spch_cnt.sql b/csierra/cs_spbl_sprf_spch_cnt.sql new file mode 100644 index 0000000..e33f4f3 --- /dev/null +++ b/csierra/cs_spbl_sprf_spch_cnt.sql @@ -0,0 +1,12 @@ +COL pdb_name FOR A30; +SELECT c.pdb_name, bl.cnt AS bl, pr.cnt AS pr, pa.cnt AS pa + FROM (SELECT con_id, name AS pdb_name FROM v$containers) c, + (SELECT con_id, COUNT(*) As cnt FROM cdb_sql_plan_baselines GROUP BY con_id) bl, + (SELECT con_id, COUNT(*) As cnt FROM cdb_sql_profiles GROUP BY con_id) pr, + (SELECT con_id, COUNT(*) As cnt FROM cdb_sql_patches GROUP BY con_id) pa + WHERE bl.con_id = c.con_id + AND pr.con_id = c.con_id + AND pa.con_id = c.con_id + ORDER BY + c.pdb_name +/ \ No newline at end of file diff --git a/csierra/cs_spbl_sprf_spch_drop_all.sql b/csierra/cs_spbl_sprf_spch_drop_all.sql new file mode 100644 index 0000000..616c4a6 --- /dev/null +++ b/csierra/cs_spbl_sprf_spch_drop_all.sql @@ -0,0 +1,145 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_sprf_spch_drop_all.sql +-- +-- Purpose: Drop all SQL Plan Baselines, SQL Profiles and SQL Patches for some SQL Text string on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/05 +-- +-- Usage: Connecting into PDB. +-- +-- Confirm when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_sprf_spch_drop_all.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF sleep_seconds = '1'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_sprf_spch_drop_all'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +COL count_distinct_ch NEW_V count_distinct_ch NOPRI; +COL estimated_seconds_ch NEW_V estimated_seconds_ch NOPRI; +SELECT TO_CHAR(COUNT(DISTINCT name) * TO_NUMBER('&&sleep_seconds.')) AS estimated_seconds_ch, TO_CHAR(COUNT(DISTINCT name)) AS count_distinct_ch FROM dba_sql_patches WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') +/ +-- +COL count_distinct_rf NEW_V count_distinct_rf NOPRI; +COL estimated_seconds_rf NEW_V estimated_seconds_rf NOPRI; +SELECT TO_CHAR(COUNT(DISTINCT name) * TO_NUMBER('&&sleep_seconds.')) AS estimated_seconds_rf, TO_CHAR(COUNT(DISTINCT name)) AS count_distinct_rf FROM dba_sql_profiles WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') +/ +-- +COL count_distinct_bl NEW_V count_distinct_bl NOPRI; +COL estimated_seconds_bl NEW_V estimated_seconds_bl NOPRI; +SELECT TO_CHAR(COUNT(DISTINCT sql_handle) * TO_NUMBER('&&sleep_seconds.')) AS estimated_seconds_bl, TO_CHAR(COUNT(DISTINCT sql_handle)) AS count_distinct_bl FROM dba_sql_plan_baselines WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') +/ +-- +PRO +PRO *** +PRO *** You are about to drop on this &&cs_con_name. PDB on SQL text "&&cs2_sql_text_piece.": +PRO *** &&count_distinct_bl. SQL Plan Baselines +PRO *** &&count_distinct_rf. SQL Profiles +PRO *** &&count_distinct_ch. SQL Patches +PRO +PRO 2. Enter "Yes" (case sensitive) to continue, else -C +DEF cs_confirm = '&2.'; +UNDEF 2; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." "&&cs_confirm." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +PRO +PRO Drop all &&count_distinct_ch. SQL Patches which include SQL text "&&cs2_sql_text_piece." +PRO +PRO Estimated Seconds: &&estimated_seconds_ch. +PRO +SET SERVEROUT ON; +DECLARE + l_total INTEGER := 0; +BEGIN + IF '&&cs_confirm.' = 'Yes' THEN + FOR i IN (SELECT DISTINCT name FROM dba_sql_patches WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') ORDER BY name) + LOOP + DBMS_SQLDIAG.drop_sql_patch(name => i.name); + l_total := l_total + 1; + DBMS_LOCK.sleep(TO_NUMBER('&&sleep_seconds.')); + END LOOP; + END IF; + DBMS_OUTPUT.put_line(' *** SQL Patches Dropped:'||l_total); +END; +/ +SET SERVEROUT OFF; +-- +PRO +PRO Drop all &&count_distinct_rf. SQL Profiles which include SQL text "&&cs2_sql_text_piece." +PRO +PRO Estimated Seconds: &&estimated_seconds_rf. +PRO +SET SERVEROUT ON; +DECLARE + l_total INTEGER := 0; +BEGIN + IF '&&cs_confirm.' = 'Yes' THEN + FOR i IN (SELECT DISTINCT name FROM dba_sql_profiles WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') ORDER BY name) + LOOP + DBMS_SQLTUNE.drop_sql_profile(name => i.name); + l_total := l_total + 1; + DBMS_LOCK.sleep(TO_NUMBER('&&sleep_seconds.')); + END LOOP; + END IF; + DBMS_OUTPUT.put_line(' *** SQL Profiles Dropped:'||l_total); +END; +/ +SET SERVEROUT OFF; +-- +PRO +PRO Drop all &&count_distinct_bl. SQL Plan Baselines which include SQL text "&&cs2_sql_text_piece." +PRO +PRO Estimated Seconds: &&estimated_seconds_bl. +PRO +SET SERVEROUT ON; +DECLARE + l_plans INTEGER := 0; + l_total INTEGER := 0; +BEGIN + IF '&&cs_confirm.' = 'Yes' THEN + FOR i IN (SELECT DISTINCT sql_handle FROM dba_sql_plan_baselines WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') ORDER BY sql_handle) + LOOP + l_plans := DBMS_SPM.drop_sql_plan_baseline(sql_handle => i.sql_handle); + l_total := l_total + l_plans; + DBMS_LOCK.sleep(TO_NUMBER('&&sleep_seconds.')); + END LOOP; + END IF; + DBMS_OUTPUT.put_line(' *** SQL Plan Baselines Dropped:'||l_total); +END; +/ +SET SERVEROUT OFF; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." "&&cs_confirm." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_sprf_spch_list_all.sql b/csierra/cs_spbl_sprf_spch_list_all.sql new file mode 100644 index 0000000..6a36997 --- /dev/null +++ b/csierra/cs_spbl_sprf_spch_list_all.sql @@ -0,0 +1,295 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_sprf_spch_list_all.sql +-- +-- Purpose: List all SQL Plan Baselines, SQL Profiles and SQL Patches for some SQL Text string on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/11/29 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_sprf_spch_list_all.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_sprf_spch_list_all'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +COL created FOR A23; +COL sql_id FOR A13; +COL sql_text FOR A80 TRUNC; +COL name FOR A30; +COL child_cursors FOR 99999 HEA 'Child|Cursors'; +COL category FOR A30; +COL status FOR A8; +COL last_modified FOR A19; +COL description FOR A200; +-- +PRO +PRO SQL PATCHES - LIST (dba_sql_patches) +PRO ~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +used_patches AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sql_patch, COUNT(*) AS child_cursors + FROM v$sql + WHERE sql_patch IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + sql_patch +) +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + compute_sql_id(s.sql_text) AS sql_id, + DBMS_LOB.substr(s.sql_text, 1000) AS sql_text, + s.name, + p.child_cursors, + s.category, + s.status, + s.description + FROM dba_sql_patches s, + used_patches p + WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND p.sql_patch(+) = s.name + ORDER BY + s.created, s.last_modified +/ +-- +COL created FOR A23 HEA 'Created'; +COL sql_id FOR A13; +COL sql_text FOR A80 TRUNC; +COL plan_name FOR A30 HEA 'Plan Name'; +COL child_cursors FOR 99999 HEA 'Child|Cursors'; +COL origin FOR A29 HEA 'Origin'; +COL last_executed FOR A19 HEA 'Last Executed'; +COL last_modified FOR A19 HEA 'Last Modified'; +COL last_verified FOR A19 HEA 'Last Verified'; +COL description FOR A200 HEA 'Description'; +COL enabled FOR A10 HEA 'Enabled'; +COL accepted FOR A10 HEA 'Accepted'; +COL fixed FOR A10 HEA 'Fixed' PRI; +COL reproduced FOR A10 HEA 'Reproduced'; +COL autopurge FOR A10 HEA 'Autopurge'; +COL adaptive FOR A10 HEA 'Adaptive'; +-- +COL created FOR A23; +COL sql_id FOR A13; +COL sql_text FOR A80 TRUNC; +COL name FOR A30; +COL child_cursors FOR 99999 HEA 'Child|Cursors'; +COL category FOR A30; +COL status FOR A8; +COL last_modified FOR A19; +COL description FOR A200; +-- +PRO +PRO SQL PROFILES - LIST (dba_sql_profiles) +PRO ~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +used_profiles AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sql_profile, COUNT(*) AS child_cursors + FROM v$sql + WHERE sql_profile IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + sql_profile +) +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + compute_sql_id(s.sql_text) AS sql_id, + DBMS_LOB.substr(s.sql_text, 1000) AS sql_text, + s.name, + p.child_cursors, + s.category, + s.status, + s.description + FROM dba_sql_profiles s, + used_profiles p + WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND p.sql_profile(+) = s.name + ORDER BY + s.created, s.last_modified +/ +-- +PRO +PRO SQL PLAN BASELINES - LIST (dba_sql_plan_baselines) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +used_baselines AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sql_plan_baseline, COUNT(*) AS child_cursors + FROM v$sql + WHERE sql_plan_baseline IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + sql_plan_baseline +) +SELECT TO_CHAR(s.created, '&&cs_timestamp_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + TO_CHAR(s.last_executed, '&&cs_datetime_full_format.') AS last_executed, + TO_CHAR(s.last_verified, '&&cs_datetime_full_format.') AS last_verified, + compute_sql_id(s.sql_text) AS sql_id, + DBMS_LOB.substr(s.sql_text, 1000) AS sql_text, + s.plan_name, + b.child_cursors, + s.enabled, s.accepted, s.fixed, s.reproduced, s.autopurge, s.adaptive, + s.origin, + s.description + FROM dba_sql_plan_baselines s, + used_baselines b + WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND b.sql_plan_baseline(+) = s.plan_name + ORDER BY + s.created, s.last_modified, s.last_executed, s.plan_name +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_stgtab.sql b/csierra/cs_spbl_stgtab.sql new file mode 100644 index 0000000..aac69f8 --- /dev/null +++ b/csierra/cs_spbl_stgtab.sql @@ -0,0 +1,44 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_stgtab.sql +-- +-- Purpose: Creates Staging Table for SQL Plan Baselines +-- +-- Author: Carlos Sierra +-- +-- Version: 2018/07/25 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_stgtab.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_stgtab'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spbl_internal_stgtab.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_stgtab_delete.sql b/csierra/cs_spbl_stgtab_delete.sql new file mode 100644 index 0000000..3671e0a --- /dev/null +++ b/csierra/cs_spbl_stgtab_delete.sql @@ -0,0 +1,60 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_stgtab_delete.sql +-- +-- Purpose: Deletes Staging Table for SQL Plan Baselines +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/03/10 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID (opt) when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_stgtab_delete.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_stgtab_delete'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +PRO 1. SQL_ID (opt): +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +@@cs_internal/cs_signature.sql +-- +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spbl_internal_stgtab.sql +@@cs_internal/cs_spbl_internal_stgtab_delete.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spbl_unfix.sql b/csierra/cs_spbl_unfix.sql new file mode 100644 index 0000000..b446cd3 --- /dev/null +++ b/csierra/cs_spbl_unfix.sql @@ -0,0 +1,89 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_unfix.sql +-- +-- Purpose: Unfix one or all SQL Plan Baselines for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_unfix.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_unfix'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 2. PLAN_NAME (opt): +DEF cs_plan_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO PLAN_NAME : "&&cs_plan_name." +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Unfix plan: "&&cs_plan_name." +DECLARE + l_plans INTEGER; +BEGIN + FOR i IN (SELECT sql_handle, signature, plan_name, description + FROM dba_sql_plan_baselines + WHERE signature = &&cs_signature. + AND fixed = 'YES' + AND plan_name = NVL('&&cs_plan_name.', plan_name) + ORDER BY signature, plan_name) + LOOP + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'FIXED', attribute_value => 'NO'); + l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => 'DESCRIPTION', attribute_value => TRIM(i.description||' &&cs_script_name..sql &&cs_reference_sanitized. &&who_am_i. UNFIXED='||TO_CHAR(SYSDATE, '&&cs_datetime_full_format.'))); + END LOOP; +END; +/ +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- + diff --git a/csierra/cs_spbl_unpack.sql b/csierra/cs_spbl_unpack.sql new file mode 100644 index 0000000..ed8a7cd --- /dev/null +++ b/csierra/cs_spbl_unpack.sql @@ -0,0 +1,87 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spbl_unpack.sql +-- +-- Purpose: Unpacks from staging table one or all SQL Plan Baselines for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spbl_unpack.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spbl_unpack'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO 2. PLAN_NAME (opt): +DEF cs_plan_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO PLAN_NAME : "&&cs_plan_name." +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spbl_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Unpack plan: "&&cs_plan_name." +DECLARE + l_plans INTEGER; +BEGIN + FOR i IN (SELECT sql_handle, obj_name plan_name + FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_baseline + WHERE signature = COALESCE(TO_NUMBER('&&cs_signature.'), signature) + AND obj_name = COALESCE('&&cs_plan_name.', obj_name) + ORDER BY signature, obj_name) + LOOP + l_plans := DBMS_SPM.unpack_stgtab_baseline(table_name => '&&cs_stgtab_prefix._stgtab_baseline', table_owner => '&&cs_stgtab_owner.', sql_handle => i.sql_handle, plan_name => i.plan_name); + END LOOP; +END; +/ +-- +@@cs_internal/cs_spbl_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- + diff --git a/csierra/cs_spch_category.sql b/csierra/cs_spch_category.sql new file mode 100644 index 0000000..d396a13 --- /dev/null +++ b/csierra/cs_spch_category.sql @@ -0,0 +1,79 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_category.sql +-- +-- Purpose: Changes category for a SQL Patch for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_category.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_category'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO 2. NAME (req): +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +PRO 3. Enter CATEGORY (opt) [{DEFAULT}|DISABLED|]: +DEF category_passed = "&3."; +UNDEF 3; +-- +COL cs_category NEW_V cs_category; +SELECT CASE WHEN UPPER(NVL('&&category_passed.','DEFAULT')) IN ('DEF', 'DEFAULT') THEN 'DEFAULT' ELSE UPPER('&&category_passed.') END cs_category FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." "&&cs_category." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO NAME : &&cs_name. +PRO CATEGORY : &&cs_category. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO Changes category on "&&cs_name." to "&&cs_category." +@@cs_internal/cs_spch_internal_category.sql +-- +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." "&&cs_category." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spch_create.sql b/csierra/cs_spch_create.sql new file mode 100644 index 0000000..d96b93e --- /dev/null +++ b/csierra/cs_spch_create.sql @@ -0,0 +1,102 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_create.sql +-- +-- Purpose: Create a SQL Patch for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and PLAN_HASH_VALUE when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_create.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +-- Other less common CBO Hints: +-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- OPT_PARAM('_b_tree_bitmap_plans' 'FALSE') OPT_PARAM('_no_or_expansion' 'TRUE') +-- CARDINALITY(T 1) +-- OPT_ESTIMATE(TABLE T ROWS=1) e.g.: OPT_ESTIMATE(@SEL$1 TABLE REPLICATION_LOG_V2 ROWS=1000000) +-- BIND_AWARE +-- PUSH_PRED(@SEL$XXXXXXXX) +-- NO_EXPAND +-- +-- OPT_PARAM('_optimizer_unnest_all_subqueries' 'FALSE') -- DBPERF-6362 DNSVCNAPI cqhcc9c504qk5 getValues(INTERNAL_ZONES,ZoneIdIndex) after removing redundant predicate +-- OPT_PARAM('_unnest_subquery' 'FALSE') -- DBPERF-6362 DNSVCNAPI cqhcc9c504qk5 getValues(INTERNAL_ZONES,ZoneIdIndex) after removing redundant predicate +-- OPT_PARAM('_first_k_rows_dynamic_proration' 'FALSE') -- DBPERF-6362 DNSVCNAPI cqhcc9c504qk5 getValues(INTERNAL_ZONES,ZoneIdIndex) after removing redundant predicate +-- OPT_PARAM('_optim_peek_user_binds' 'FALSE') -- DBPERF-8653 Suboptimal performance on a query with range predicate on column where all rows have same prefix on leading 56 characters 9sjq5yhu22678 performScanQuery(instanceConfigEvents,HashRangeIndex) +-- +-- Fix Control CBO Hints: +-- ~~~~~~~~~~~~~~~~~~~~~ +-- OPT_PARAM('_fix_control' '9550277:ON') -- DBPERF-8595 9550277 Use Column Groups Selectivity and do not load Column Histogram Statistics +-- OPT_PARAM('_fix_control' '5922070:OFF') -- DBPERF-5188 DBPERF-5443 DBPERF-5475 DBPERF-5513 DBPERF-5839 DBPERF-5881 DBPERF-6264 DBPERF-6302 DBPERF-6337 DBPERF-84 DBPERF-262 DBPERFOCI-54 IOD-31530 IOD-34530 WFAAS-5928 ... 5922070: NO COLUMN EQUIVALENCE BASED ON EQUIJOIN IS DONE IN STMT WITH GROUP BY +-- OPT_PARAM('_fix_control' '21971099:OFF') -- DBPERF-5204 NAT_GATEWAY 9tbzxxg29px0p performScanQuery(RETRY_TOKENS,HashRangeIndex) 21971099: WRONG CARDINALITY FROM SQL ANALYTIC WINDOWS FUNCTIONS +-- OPT_PARAM('_fix_control' '13321547:OFF') -- 13321547: ANALYTICAL QUERY WINDOW SORT +-- OPT_PARAM('_fix_control' '6674254:OFF') -- DBPERF-6362 DNSVCNAPI cqhcc9c504qk5 getValues(INTERNAL_ZONES,ZoneIdIndex) after removing redundant predicate 6674254: FIRST_ROWS(X) HINT CAUSING BAD PLAN + +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_create'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = "&1."; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/&&cs_zapper_managed. +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spch_internal_list.sql +-- +COL default_hints_text NEW_V default_hints_text NOPRI; +SELECT q'[&&hints_text.]'||CASE WHEN '&&cs_kiev_table_name.' IS NOT NULL THEN ' LEADING(@SEL$1 &&cs_kiev_table_name.)' END||q'[ OPT_PARAM('_b_tree_bitmap_plans' 'FALSE') OPT_PARAM('_no_or_expansion' 'TRUE')]' AS default_hints_text FROM DUAL; +PRO +PRO To enhance diagnostics: MONITOR GATHER_PLAN_STATISTICS +PRO +PRO For most KIEV scans use default: &&default_hints_text. +PRO +PRO 2. CBO_HINT(S): +DEF hints_text = "&2."; +UNDEF 2; +COL hints_text NEW_V hints_text NOPRI; +SELECT NVL(q'[&&hints_text.]', q'[&&default_hints_text.]') AS hints_text FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&hints_text." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO CBO HINTS : "&&hints_text." +-- +@@cs_internal/cs_print_sql_text.sql +-- drop existing patch if any +@@cs_internal/cs_spch_internal_drop.sql +-- +PRO +PRO Create name: "spch_&&cs_sql_id." +@@cs_internal/cs_spch_internal_create.sql +-- +@@cs_internal/cs_spch_internal_list.sql +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&hints_text." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- + diff --git a/csierra/cs_spch_disable.sql b/csierra/cs_spch_disable.sql new file mode 100644 index 0000000..62312c5 --- /dev/null +++ b/csierra/cs_spch_disable.sql @@ -0,0 +1,88 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_disable.sql +-- +-- Purpose: Disable one or all SQL Patches for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_disable.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_disable'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO 2. NAME (opt): +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO NAME : &&cs_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spch_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Disable name: "&&cs_name." +BEGIN + FOR i IN (SELECT name + FROM dba_sql_patches + WHERE signature = :cs_signature + AND status = 'ENABLED' + AND name = NVL('&&cs_name.', name) + ORDER BY name) + LOOP + $IF DBMS_DB_VERSION.ver_le_12_1 + $THEN + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'STATUS', value => 'DISABLED'); -- 12c + $ELSE + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'STATUS', attribute_value => 'DISABLED'); -- 19c + $END + END LOOP; +END; +/ +-- +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spch_drop.sql b/csierra/cs_spch_drop.sql new file mode 100644 index 0000000..ddbc982 --- /dev/null +++ b/csierra/cs_spch_drop.sql @@ -0,0 +1,65 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_drop.sql +-- +-- Purpose: Drop all SQL Patches for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_drop.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_drop'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/&&cs_zapper_managed. +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spch_internal_list.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spch_internal_list.sql +-- +@@cs_internal/cs_spch_internal_stgtab.sql +@@cs_internal/cs_spch_internal_pack.sql +-- +PRO +PRO Drop SQL Patch(es) for: "&&cs_sql_id." +@@cs_internal/cs_spch_internal_drop.sql +-- +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spch_drop_all.sql b/csierra/cs_spch_drop_all.sql new file mode 100644 index 0000000..013010a --- /dev/null +++ b/csierra/cs_spch_drop_all.sql @@ -0,0 +1,88 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_drop_all.sql +-- +-- Purpose: Drop all SQL Patches for some SQL Text string on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/05 +-- +-- Usage: Connecting into PDB. +-- +-- Confirm when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_drop_all.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF sleep_seconds = '1'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_drop_all'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +COL count_distinct_ch NEW_V count_distinct_ch NOPRI; +COL estimated_seconds_ch NEW_V estimated_seconds_ch NOPRI; +SELECT TO_CHAR(COUNT(DISTINCT name) * TO_NUMBER('&&sleep_seconds.')) AS estimated_seconds_ch, TO_CHAR(COUNT(DISTINCT name)) AS count_distinct_ch FROM dba_sql_patches WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') +/ +-- +PRO +PRO *** +PRO *** You are about to drop &&count_distinct_ch. SQL Patches on this &&cs_con_name. PDB on SQL text "&&cs2_sql_text_piece." +PRO *** +PRO +PRO 2. Enter "Yes" (case sensitive) to continue, else -C +DEF cs_confirm = '&2.'; +UNDEF 2; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." "&&cs_confirm." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +PRO +PRO Drop all &&count_distinct_ch. SQL Patches which include SQL text "&&cs2_sql_text_piece." +PRO +PRO Estimated Seconds: &&estimated_seconds_ch. +PRO +SET SERVEROUT ON; +DECLARE + l_total INTEGER := 0; +BEGIN + IF '&&cs_confirm.' = 'Yes' THEN + FOR i IN (SELECT DISTINCT name FROM dba_sql_patches WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') ORDER BY name) + LOOP + DBMS_SQLDIAG.drop_sql_patch(name => i.name); + l_total := l_total + 1; + DBMS_LOCK.sleep(TO_NUMBER('&&sleep_seconds.')); + END LOOP; + END IF; + DBMS_OUTPUT.put_line(' *** SQL Patches Dropped:'||l_total); +END; +/ +SET SERVEROUT OFF; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." "&&cs_confirm." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spch_enable.sql b/csierra/cs_spch_enable.sql new file mode 100644 index 0000000..8ae552c --- /dev/null +++ b/csierra/cs_spch_enable.sql @@ -0,0 +1,90 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_enable.sql +-- +-- Purpose: Enable one or all SQL Patches for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_enable.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_enable'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO 2. NAME (opt): +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO NAME : &&cs_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spch_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Disable name: "&&cs_name." +BEGIN + FOR i IN (SELECT name + FROM dba_sql_patches + WHERE signature = :cs_signature + AND status = 'DISABLED' + AND name = NVL('&&cs_name.', name) + ORDER BY name) + LOOP + $IF DBMS_DB_VERSION.ver_le_12_1 + $THEN + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'STATUS', value => 'ENABLED'); -- 12c + $ELSE + DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => 'STATUS', attribute_value => 'ENABLED'); -- 19c + $END + END LOOP; +END; +/ +-- +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spch_first_rows.sql b/csierra/cs_spch_first_rows.sql new file mode 100644 index 0000000..23c4266 --- /dev/null +++ b/csierra/cs_spch_first_rows.sql @@ -0,0 +1,99 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_first_rows.sql +-- +-- Purpose: Create a SQL Patch with FIRST_ROWS for given SQL_ID, and drops SQL Profile and SQL Plan Baselines +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and PLAN_HASH_VALUE when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_first_rows.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_first_rows'; +-- +DEF cs_sql_id_col = 'NOPRI'; +DEF cs_uncommon_col = 'NOPRI'; +DEF cs_delta_col = 'NOPRI'; +-- DEF cs_sqlstat_days = '0.25'; +-- @@cs_internal/cs_sample_time_boundaries.sql +-- @@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 1. SQL_ID: +DEF cs_sql_id = "&1."; +UNDEF 1; +DEF cs_filter_1 = 'sql_id = ''&&cs_sql_id.'''; +DEF cs2_sql_text_piece = ''; +-- +@@cs_internal/cs_last_snap.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +COL hints_text NEW_V hints_text NOPRI; +SELECT q'[&&hints_text.]'||CASE WHEN '&&cs_kiev_table_name.' IS NOT NULL THEN ' LEADING(@SEL$1 &&cs_kiev_table_name.)' END||q'[ OPT_PARAM('_b_tree_bitmap_plans' 'FALSE') OPT_PARAM('_no_or_expansion' 'TRUE')]' AS hints_text FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO CBO HINTS : "&&hints_text." +-- +@@cs_internal/cs_print_sql_text.sql +-- drop existing patch if any +@@cs_internal/cs_spch_internal_drop.sql +-- +PRO +PRO Create name: "spch_&&cs_sql_id." +@@cs_internal/cs_spch_internal_create.sql +-- +@@cs_internal/cs_spch_internal_list.sql +-- +-- drop existing profile if any +@@cs_internal/cs_sprf_internal_stgtab.sql +@@cs_internal/cs_sprf_internal_pack.sql +@@cs_internal/cs_sprf_internal_drop.sql +-- +-- drop existing baseline if any +DEF cs_plan_name = ''; +@@cs_internal/cs_spbl_internal_stgtab.sql +@@cs_internal/cs_spbl_internal_pack.sql +DECLARE + l_plans INTEGER := 0; +BEGIN + IF '&&cs_sql_handle.' IS NOT NULL THEN + l_plans := DBMS_SPM.drop_sql_plan_baseline(sql_handle => '&&cs_sql_handle.'); + END IF; +END; +/ +-- +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sql_global.sql +@@cs_internal/cs_gv_sql_stability.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spch_list.sql b/csierra/cs_spch_list.sql new file mode 100644 index 0000000..de2b5a2 --- /dev/null +++ b/csierra/cs_spch_list.sql @@ -0,0 +1,60 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_list.sql +-- +-- Purpose: Summary list of SQL Patches for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_list.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_list'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spch_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- + + diff --git a/csierra/cs_spch_list_all_cdb.sql b/csierra/cs_spch_list_all_cdb.sql new file mode 100644 index 0000000..35f9148 --- /dev/null +++ b/csierra/cs_spch_list_all_cdb.sql @@ -0,0 +1,133 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_list_all_cdb.sql +-- +-- Purpose: List all SQL Patches for some SQL Text string on CDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/12/12 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_list_all_cdb.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +-- @@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_list_all_cdb'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +COL created FOR A23; +COL sql_id FOR A13; +COL sql_text FOR A80 TRUNC; +COL name FOR A30; +COL child_cursors FOR 99999 HEA 'Child|Cursors'; +COL category FOR A30; +COL status FOR A8; +COL last_modified FOR A19; +COL description FOR A200; +COL pdb_name FOR A30 HEA 'PDB Name'; +-- +SET FEED ON; +-- +PRO +PRO SQL PATCHES - LIST (cdb_sql_patches) +PRO ~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +used_patches AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, sql_patch, COUNT(*) AS child_cursors + FROM v$sql + WHERE sql_patch IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + con_id, sql_patch +) +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + compute_sql_id(s.sql_text) AS sql_id, + DBMS_LOB.substr(s.sql_text, 1000) AS sql_text, + s.name, + p.child_cursors, + s.category, + s.status, + s.description, + c.name AS pdb_name + FROM cdb_sql_patches s, + used_patches p, + v$containers c + WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND p.sql_patch(+) = s.name + AND p.con_id(+) = s.con_id + AND c.con_id = s.con_id + ORDER BY + s.created, s.last_modified +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_spch_list_all_pdb.sql b/csierra/cs_spch_list_all_pdb.sql new file mode 100644 index 0000000..168e020 --- /dev/null +++ b/csierra/cs_spch_list_all_pdb.sql @@ -0,0 +1,128 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_list_all_pdb.sql +-- +-- Purpose: List all SQL Patches for some SQL Text string on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/12/12 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_list_all_pdb.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_list_all_pdb'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +COL created FOR A23; +COL sql_id FOR A13; +COL sql_text FOR A80 TRUNC; +COL name FOR A30; +COL child_cursors FOR 99999 HEA 'Child|Cursors'; +COL category FOR A30; +COL status FOR A8; +COL last_modified FOR A19; +COL description FOR A200; +-- +SET FEED ON; +-- +PRO +PRO SQL PATCHES - LIST (dba_sql_patches) +PRO ~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +used_patches AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sql_patch, COUNT(*) AS child_cursors + FROM v$sql + WHERE sql_patch IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + sql_patch +) +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + compute_sql_id(s.sql_text) AS sql_id, + DBMS_LOB.substr(s.sql_text, 1000) AS sql_text, + s.name, + p.child_cursors, + s.category, + s.status, + s.description + FROM dba_sql_patches s, + used_patches p + WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND p.sql_patch(+) = s.name + ORDER BY + s.created, s.last_modified +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_spch_pack.sql b/csierra/cs_spch_pack.sql new file mode 100644 index 0000000..489fef2 --- /dev/null +++ b/csierra/cs_spch_pack.sql @@ -0,0 +1,75 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_pack.sql +-- +-- Purpose: Packs into staging table one or all SQL Patches for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_pack.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_pack'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO 2. Enter NAME (opt) +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO NAME : &&cs_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spch_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +@@cs_internal/cs_spch_internal_stgtab.sql +@@cs_internal/cs_spch_internal_pack.sql +-- +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- + + diff --git a/csierra/cs_spch_plan.sql b/csierra/cs_spch_plan.sql new file mode 100644 index 0000000..0e16c11 --- /dev/null +++ b/csierra/cs_spch_plan.sql @@ -0,0 +1,55 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_plan.sql +-- +-- Purpose: Display SQL Patch Plan for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_plan.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_plan'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spch_internal_list.sql +@@cs_internal/cs_spch_internal_plan.sql +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spch_scan_create.sql b/csierra/cs_spch_scan_create.sql new file mode 100644 index 0000000..f0bc1b4 --- /dev/null +++ b/csierra/cs_spch_scan_create.sql @@ -0,0 +1,196 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_scan_create.sql +-- +-- Purpose: Create a SQL Patch for slow KIEV performScanQuery without Baselines, Profiles and Patches +-- (if milliseconds per row processed > 1) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/10 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_scan_create.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_scan_create'; +DEF hints_text = "FIRST_ROWS(1) OPT_PARAM(''_fix_control'' ''5922070:OFF'')"; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +COL et_ms_per_exec FOR 999,990 HEA 'ET|ms p/e'; +COL cpu_ms_per_exec FOR 999,990 HEA 'CPU|ms p/e'; +COL io_ms_per_exec FOR 999,990 HEA 'I/O|ms p/e'; +COL appl_ms_per_exec FOR 999,990 HEA 'Appl|ms p/e'; +COL conc_ms_per_exec FOR 999,990 HEA 'Conc|ms p/e'; +COL execs FOR 999,990 HEA 'Execs'; +COL rows_per_exec FOR 999,999,990 HEA 'Rows|p/e'; +COL gets_per_exec FOR 999,999,990 HEA 'Buffer Gets|p/e'; +COL reads_per_exec FOR 9,999,990 HEA 'Disk Rs|p/e'; +COL writes_per_exec FOR 999,990 HEA 'Dir Wr|p/e'; +COL fetches_per_exec FOR 999,990 HEA 'Fetches|p/e'; +COL sql_text FOR A60 TRUNC; +COL plan_hash_value FOR 9999999999 HEA 'Plan Hash'; +COL has_baseline FOR A2 HEA 'BL'; +COL has_profile FOR A2 HEA 'PR'; +COL has_patch FOR A2 HEA 'PA'; +COL line FOR A500; +-- +PRO +PRO KIEV performScanQuery Latency (as per last &&cs_last_snap_mins. minutes) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +sqlstats AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.delta_elapsed_time/GREATEST(s.delta_execution_count,1)/1e3 AS et_ms_per_exec, + s.delta_cpu_time/GREATEST(s.delta_execution_count,1)/1e3 AS cpu_ms_per_exec, + s.delta_user_io_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS io_ms_per_exec, + s.delta_application_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS appl_ms_per_exec, + s.delta_concurrency_time/GREATEST(s.delta_execution_count,1)/1e3 AS conc_ms_per_exec, + s.delta_execution_count AS execs, + s.delta_rows_processed/GREATEST(s.delta_execution_count,1) AS rows_per_exec, + s.delta_buffer_gets/GREATEST(s.delta_execution_count,1) AS gets_per_exec, + s.delta_disk_reads/GREATEST(s.delta_execution_count,1) AS reads_per_exec, + s.delta_direct_writes/GREATEST(s.delta_execution_count,1) AS writes_per_exec, + s.delta_fetch_count/GREATEST(s.delta_execution_count,1) AS fetches_per_exec, + s.sql_id, + s.sql_text, + s.plan_hash_value, + s.last_active_child_address + FROM v$sqlstats s + WHERE s.delta_elapsed_time > 0 + AND s.sql_text LIKE '/* performScanQuery(%' +) +SELECT s.et_ms_per_exec, + s.cpu_ms_per_exec, + s.io_ms_per_exec, + s.appl_ms_per_exec, + s.conc_ms_per_exec, + s.execs, + s.rows_per_exec, + s.gets_per_exec, + s.reads_per_exec, + s.sql_id, + s.plan_hash_value, + -- v.has_baseline, + -- v.has_profile, + -- v.has_patch, + s.sql_text + FROM sqlstats s + CROSS APPLY ( + SELECT CASE WHEN v.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN v.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN v.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch + FROM v$sql v + WHERE s.plan_hash_value > 0 + AND v.sql_id = s.sql_id + AND v.plan_hash_value = s.plan_hash_value + AND v.child_address = s.last_active_child_address + ORDER BY + v.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) v + WHERE v.has_baseline = 'N' + AND v.has_profile = 'N' + AND v.has_patch = 'N' + AND s.et_ms_per_exec / GREATEST(s.rows_per_exec, 1) > 1 -- if milliseconds per row processed > 1 + ORDER BY + s.et_ms_per_exec DESC +/ +-- +PRO +PAUSE Review list above and press "return" key to generate SQL Patch commands +-- +PRO +PRO Create SQL Patch commands +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +SET HEA OFF PAGES 0 LIN 500; +SPO &&cs_file_name._COMMANDS.sql; +PRO SET ECHO ON; +WITH +sqlstats AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.delta_elapsed_time/GREATEST(s.delta_execution_count,1)/1e3 AS et_ms_per_exec, + s.delta_cpu_time/GREATEST(s.delta_execution_count,1)/1e3 AS cpu_ms_per_exec, + s.delta_user_io_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS io_ms_per_exec, + s.delta_application_wait_time/GREATEST(s.delta_execution_count,1)/1e3 AS appl_ms_per_exec, + s.delta_concurrency_time/GREATEST(s.delta_execution_count,1)/1e3 AS conc_ms_per_exec, + s.delta_execution_count AS execs, + s.delta_rows_processed/GREATEST(s.delta_execution_count,1) AS rows_per_exec, + s.delta_buffer_gets/GREATEST(s.delta_execution_count,1) AS gets_per_exec, + s.delta_disk_reads/GREATEST(s.delta_execution_count,1) AS reads_per_exec, + s.delta_direct_writes/GREATEST(s.delta_execution_count,1) AS writes_per_exec, + s.delta_fetch_count/GREATEST(s.delta_execution_count,1) AS fetches_per_exec, + s.sql_id, + s.sql_text, + s.plan_hash_value, + s.last_active_child_address, + SUBSTR(s.sql_text, INSTR(s.sql_text, '(') + 1, INSTR(s.sql_text, ',') - INSTR(s.sql_text, '(') - 1) AS kiev_table_name + FROM v$sqlstats s + WHERE s.delta_elapsed_time > 0 + AND s.sql_text LIKE '/* performScanQuery(%' +) +SELECT CASE + WHEN '&&cs_db_version.' > '12.1.0.2.0' + THEN 'DECLARE'||CHR(10)||'l_name VARCHAR2(1000);'||CHR(10)||'BEGIN'||CHR(10)|| + 'l_name := DBMS_SQLDIAG.create_sql_patch(sql_id => '''||s.sql_id||''', hint_text => q''[&&hints_text. LEADING(@SEL$1 '||s.kiev_table_name||')]'', name => ''spch_'||s.sql_id||''', description => q''[&&cs_script_name..sql /*+ &&hints_text. LEADING(@SEL$1 '||s.kiev_table_name||') */ &&cs_reference_sanitized. &&who_am_i.]'');'||CHR(10)|| -- 19c + 'END;'||CHR(10)||'/' + ELSE 'EXEC DBMS_SQLDIAG_INTERNAL.i_create_patch(sql_id => '''||s.sql_id||''', hint_text => q''[&&hints_text. LEADING(@SEL$1 '||s.kiev_table_name||')]'', name => ''spch_'||s.sql_id||''', description => q''[&&cs_script_name..sql /*+ &&hints_text. LEADING(@SEL$1 '||s.kiev_table_name||') */ &&cs_reference_sanitized. &&who_am_i.]'');' -- 12c + END||CHR(10) AS line + FROM sqlstats s + CROSS APPLY ( + SELECT CASE WHEN v.sql_plan_baseline IS NULL THEN 'N' ELSE 'Y' END AS has_baseline, + CASE WHEN v.sql_profile IS NULL THEN 'N' ELSE 'Y' END AS has_profile, + CASE WHEN v.sql_patch IS NULL THEN 'N' ELSE 'Y' END AS has_patch + FROM v$sql v + WHERE s.plan_hash_value > 0 + AND v.sql_id = s.sql_id + AND v.plan_hash_value = s.plan_hash_value + AND v.child_address = s.last_active_child_address + ORDER BY + v.last_active_time DESC + FETCH FIRST 1 ROW ONLY + ) v + WHERE v.has_baseline = 'N' + AND v.has_profile = 'N' + AND v.has_patch = 'N' + AND s.et_ms_per_exec / GREATEST(s.rows_per_exec, 1) > 1 -- if milliseconds per row processed > 1 + ORDER BY + s.et_ms_per_exec DESC +/ +PRO SET ECHO OFF LIN 300; +SPO OFF; +HOS chmod 644 &&cs_file_name._COMMANDS.sql +SET HEA ON PAGES 100; +-- +PRO +PAUSE Review list above and press "return" key to execute SQL Patch commands +-- +-- continues with original spool +SPO &&cs_file_name..txt APP +-- +-- execute scripts to create sql patches +@@&&cs_file_name._COMMANDS.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spch_stgtab.sql b/csierra/cs_spch_stgtab.sql new file mode 100644 index 0000000..7d12675 --- /dev/null +++ b/csierra/cs_spch_stgtab.sql @@ -0,0 +1,44 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_stgtab.sql +-- +-- Purpose: Creates Staging Table for SQL Patches +-- +-- Author: Carlos Sierra +-- +-- Version: 2018/08/06 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_stgtab.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_stgtab'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spch_internal_stgtab.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_spch_unpack.sql b/csierra/cs_spch_unpack.sql new file mode 100644 index 0000000..7566a03 --- /dev/null +++ b/csierra/cs_spch_unpack.sql @@ -0,0 +1,84 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_unpack.sql +-- +-- Purpose: Unpack from staging table one or all SQL Patches for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_unpack.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_unpack'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO 2. Enter NAME (opt) +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO NAME : &&cs_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_spch_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Unpack name: "&&cs_name." +BEGIN + FOR i IN (SELECT obj_name name + FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlpatch + WHERE signature = :cs_signature + AND obj_name = NVL('&&cs_name.', obj_name) + ORDER BY obj_name) + LOOP + DBMS_SQLDIAG.unpack_stgtab_sqlpatch(patch_name => i.name, replace => TRUE, staging_table_name => '&&cs_stgtab_prefix._stgtab_sqlpatch', staging_schema_owner => '&&cs_stgtab_owner.'); + END LOOP; +END; +/ +-- +@@cs_internal/cs_spch_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_spch_xfr.sql b/csierra/cs_spch_xfr.sql new file mode 100644 index 0000000..e0df160 --- /dev/null +++ b/csierra/cs_spch_xfr.sql @@ -0,0 +1,173 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_spch_xfr.sql +-- +-- Purpose: Transfers a SQL Patch for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/10 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_spch_xfr.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_spch_xfr'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +-- get CBO Hint(s) +VAR cs_hint_text VARCHAR2(500); +BEGIN + SELECT CAST(EXTRACTVALUE(VALUE(x), '/hint') AS VARCHAR2(500)) + INTO :cs_hint_text + FROM XMLTABLE('/outline_data/hint' + PASSING (SELECT XMLTYPE(d.comp_data) xml + FROM sys.sqlobj$data d + WHERE d.obj_type = 3 /* 1:profile, 2:baseline, 3:patch */ + AND d.signature = :cs_signature)) x; +END; +/ +COL cs_hint_text NEW_V cs_hint_text NOPRI; +SELECT :cs_hint_text AS cs_hint_text FROM DUAL +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO CBO_HINTS : &&cs_hint_text. +-- +@@cs_internal/cs_print_sql_text.sql +-- +-- create content of xfr script +VAR xfr CLOB; +-- BEGIN +-- :xfr := +-- '--'||CHR(10)|| +-- '-- cs_spch_xfr_&&cs_sql_id..sql'||CHR(10)|| +-- '-- execute on target: cs_spch_xfr_.sql script.'||CHR(10)|| +-- '--'||CHR(10)|| +-- 'VAR signature NUMBER;'||CHR(10)|| +-- 'VAR sql_id VARCHAR2(13);'||CHR(10)|| +-- 'VAR sql_text CLOB;'||CHR(10)|| +-- 'VAR hint_text VARCHAR2(500);'||CHR(10)|| +-- '--'||CHR(10)|| +-- 'BEGIN'||CHR(10)|| +-- ' :signature := &&cs_signature.;'||CHR(10)|| +-- ' :sql_id := ''&&cs_sql_id.'';'||CHR(10)|| +-- ' :sql_text := '||CHR(10)|| +-- q'{ q'[}'||:cs_sql_text||q'{]';}'||CHR(10)|| +-- ' :hint_text := '||CHR(10)|| +-- q'{ q'[}'||:cs_hint_text||q'{]';}'||CHR(10)|| +-- ' --'||CHR(10)|| +-- ' FOR i IN (SELECT name FROM dba_sql_patches WHERE signature = :signature)'||CHR(10)|| +-- ' LOOP'||CHR(10)|| +-- ' DBMS_SQLDIAG.drop_sql_patch(name => i.name);'||CHR(10)|| +-- ' END LOOP;'||CHR(10)|| +-- ' --'||CHR(10)|| +-- ' DBMS_SQLDIAG_INTERNAL.i_create_patch('||CHR(10)|| +-- ' sql_text => :sql_text,'||CHR(10)|| +-- ' hint_text => :hint_text,'||CHR(10)|| +-- ' name => ''spch_''||:sql_id||''_xfr'','||CHR(10)|| +-- ' description => ''cs_spch_xfr.sql /*+ ''||:hint_text||'' */ &&cs_reference_sanitized. &&who_am_i.'''||CHR(10)|| +-- ' );'||CHR(10)|| +-- 'END;'||CHR(10)|| +-- '/'; +-- END; +-- / +BEGIN + :xfr := + '--'||CHR(10)|| + '-- cs_spch_xfr_&&cs_sql_id..sql'||CHR(10)|| + '-- execute on target: cs_spch_xfr_.sql script.'||CHR(10)|| + '--'||CHR(10)|| + 'DECLARE '||CHR(10)|| + ' l_signature NUMBER;'||CHR(10)|| + ' l_sql_id VARCHAR2(13);'||CHR(10)|| + ' l_sql_text CLOB;'||CHR(10)|| + ' l_hint_text VARCHAR2(500);'||CHR(10)|| + ' l_name VARCHAR2(64);'||CHR(10)|| + '--'||CHR(10)|| + 'BEGIN'||CHR(10)|| + ' l_signature := &&cs_signature.;'||CHR(10)|| + ' l_sql_id := ''&&cs_sql_id.'';'||CHR(10)|| + ' l_sql_text := '||CHR(10)|| + q'{ q'[}'||:cs_sql_text||q'{]';}'||CHR(10)|| + ' l_hint_text := '||CHR(10)|| + q'{ q'[}'||:cs_hint_text||q'{]';}'||CHR(10)|| + ' --'||CHR(10)|| + ' FOR i IN (SELECT name FROM dba_sql_patches WHERE signature = l_signature)'||CHR(10)|| + ' LOOP'||CHR(10)|| + ' DBMS_SQLDIAG.drop_sql_patch(name => i.name);'||CHR(10)|| + ' END LOOP;'||CHR(10)|| + ' --'||CHR(10)|| + ' $IF DBMS_DB_VERSION.ver_le_12_1'||CHR(10)|| + ' $THEN'||CHR(10)|| + ' DBMS_SQLDIAG_INTERNAL.i_create_patch('||CHR(10)|| + ' sql_text => l_sql_text,'||CHR(10)|| + ' hint_text => l_hint_text,'||CHR(10)|| + ' name => ''spch_''||l_sql_id||''_xfr'','||CHR(10)|| + ' description => ''cs_spch_xfr.sql /*+ ''||l_hint_text||'' */ &&cs_reference_sanitized. &&who_am_i.'''||CHR(10)|| + ' ); --12c'||CHR(10)|| + ' $ELSE'||CHR(10)|| + ' l_name := DBMS_SQLDIAG.create_sql_patch('||CHR(10)|| + ' sql_text => l_sql_text,'||CHR(10)|| + ' hint_text => l_hint_text,'||CHR(10)|| + ' name => ''spch_''||l_sql_id||''_xfr'','||CHR(10)|| + ' description => ''cs_spch_xfr.sql /*+ ''||l_hint_text||'' */ &&cs_reference_sanitized. &&who_am_i.'''||CHR(10)|| + ' ); -- 19c'||CHR(10)|| + ' $END'||CHR(10)|| + 'END;'||CHR(10)|| + '/'; +END; +/ +-- outputs script +SET HEA OFF; +SPO cs_spch_xfr_&&cs_sql_id..sql +PRINT :xfr +SPO OFF; +SET HEA ON; +-- +-- continues with original spool +SPO &&cs_file_name..txt APP +PRO +SET HEA OFF; +PRINT :xfr +SET HEA ON; +-- +PRO +PRO Script cs_spch_xfr_&&cs_sql_id..sql was created. +PRO Execute on target system: cs_spch_xfr_.sql script. +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sprf_category.sql b/csierra/cs_sprf_category.sql new file mode 100644 index 0000000..880c993 --- /dev/null +++ b/csierra/cs_sprf_category.sql @@ -0,0 +1,92 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_category.sql +-- +-- Purpose: Changes category for a SQL Profile for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_category.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_category'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO 2. NAME (req): +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +PRO 3. Enter CATEGORY (opt) [{DEFAULT}|DISABLED|]: +DEF category_passed = "&3."; +UNDEF 3; +-- +COL cs_category NEW_V cs_category; +SELECT CASE WHEN UPPER(NVL('&&category_passed.','DEFAULT')) IN ('DEF', 'DEFAULT') THEN 'DEFAULT' ELSE UPPER('&&category_passed.') END cs_category FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." "&&cs_category." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO NAME : &&cs_name. +PRO CATEGORY : &&cs_category. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_sprf_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Changes category on "&&cs_name." to "&&cs_category." +BEGIN + FOR i IN (SELECT name + FROM dba_sql_profiles + WHERE signature = :cs_signature + AND name = NVL('&&cs_name.', name) + ORDER BY name) + LOOP + DBMS_SQLTUNE.alter_sql_profile(name => i.name, attribute_name => 'CATEGORY', value => '&&cs_category.'); + END LOOP; +END; +/ +-- +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." "&&cs_category." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_sprf_create.sql b/csierra/cs_sprf_create.sql new file mode 100644 index 0000000..7561249 --- /dev/null +++ b/csierra/cs_sprf_create.sql @@ -0,0 +1,171 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_create.sql +-- +-- Purpose: Create a SQL Profile for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/10 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and PLAN_HASH_VALUE when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_create.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_create'; +-- +PRO 1. Source SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/&&cs_zapper_managed. +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO 2. PLAN_HASH_VALUE (required) +DEF cs_plan_hash_value = "&2."; +UNDEF 2; +-- +PRO +PRO 3. Target SQL_ID: [{&&cs_sql_id.}|SQL_ID] +DEF cs_sql_id2 = '&3.'; +UNDEF 3; +COL cs_sql_id2 NEW_V cs_sql_id2 NOPRI; +SELECT COALESCE('&&cs_sql_id2.', '&&cs_sql_id.') AS cs_sql_id2 FROM DUAL +/ +-- +VAR cs_signature2 NUMBER; +VAR cs_sql_text2 CLOB; +BEGIN + SELECT sql_fulltext INTO :cs_sql_text2 FROM v$sqlstats WHERE sql_id = '&&cs_sql_id2.' AND ROWNUM = 1; +EXCEPTION + WHEN NO_DATA_FOUND THEN + SELECT sql_text INTO :cs_sql_text2 FROM dba_hist_sqltext WHERE sql_id = '&&cs_sql_id2.' AND ROWNUM = 1; +END; +/ +EXEC :cs_signature2 := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(:cs_sql_text2); +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." "&&cs_sql_id2." +@@cs_internal/cs_spool_id.sql +-- +PRO SOURCE_SQL_ID: &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO APPLICATION : &&cs_application_category. +PRO TABLE_OWNER : &&table_owner. +PRO TABLE_NAME : &&table_name. +PRO PLAN_HASH_VAL: &&cs_plan_hash_value. +PRO TARGET_SQL_ID: &&cs_sql_id2. +-- +SET HEA OFF; +PRO +PRO Source &&cs_sql_id. +PRO ~~~~~~ +PRINT :cs_sql_text +PRO Target &&cs_sql_id2. +PRO ~~~~~~ +PRINT :cs_sql_text2 +SET HEA ON; +-- +SET SERVEROUT ON; +DECLARE + l_other_xml CLOB; + l_hint VARCHAR2(32767); + l_index INTEGER := 1; + l_pos INTEGER; + l_count INTEGER; + l_profile_attr SYS.SQLPROF_ATTR := SYS.SQLPROF_ATTR('BEGIN_OUTLINE_DATA'); +BEGIN + BEGIN + SELECT other_xml INTO l_other_xml FROM v$sql_plan WHERE sql_id = '&&cs_sql_id.' AND plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.') AND other_xml IS NOT NULL ORDER BY id FETCH FIRST 1 ROW ONLY; + DBMS_OUTPUT.put_line('got other_xml from v$sql_plan'); + EXCEPTION + WHEN NO_DATA_FOUND THEN + SELECT other_xml INTO l_other_xml FROM dba_hist_sql_plan WHERE sql_id = '&&cs_sql_id.' AND plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.') AND dbid = TO_NUMBER('&&cs_dbid.') AND other_xml IS NOT NULL ORDER BY id FETCH FIRST 1 ROW ONLY; + DBMS_OUTPUT.put_line('got other_xml from dba_hist_sql_plan'); + END; + -- + FOR i IN (SELECT x.outline_hint FROM XMLTABLE('other_xml/outline_data/hint' PASSING XMLTYPE(l_other_xml) COLUMNS outline_hint VARCHAR2(4000) PATH '.') x) + LOOP + l_hint := i.outline_hint; + WHILE l_hint IS NOT NULL + LOOP + IF LENGTH(l_hint) <= 500 THEN + l_index := l_index + 1; + l_profile_attr.EXTEND; + l_profile_attr(l_index) := l_hint; + l_hint := NULL; + ELSE + l_pos := INSTR(SUBSTR(l_hint, 1, 500), ' ', -1); + l_index := l_index + 1; + l_profile_attr.EXTEND; + l_profile_attr(l_index) := SUBSTR(l_hint, 1, l_pos); + l_hint := SUBSTR(l_hint, l_pos); + END IF; + END LOOP; + END LOOP; + DBMS_OUTPUT.put_line('got '||(l_index - 1)||' hints'); + -- + l_index := l_index + 1; + l_profile_attr.EXTEND; + l_profile_attr(l_index) := 'END_OUTLINE_DATA'; + -- + -- FOR i IN (SELECT name FROM dba_sql_profiles WHERE signature = TO_NUMBER('&&cs_signature.') AND name <> 'cs_&&cs_sql_id._&&cs_sql_id2.') + -- LOOP + -- DBMS_SQLTUNE.drop_sql_profile(name => i.name); + -- DBMS_OUTPUT.put_line('dropped '||i.name); + -- END LOOP; + -- + SELECT COUNT(*) INTO l_count FROM dba_sql_profiles WHERE signature = TO_NUMBER('&&cs_signature.') AND name = 'cs_&&cs_sql_id._&&cs_sql_id2.'; + IF l_count = 0 THEN + DBMS_SQLTUNE.import_sql_profile( + sql_text => :cs_sql_text2, + profile => l_profile_attr, + name => 'cs_&&cs_sql_id._&&cs_sql_id2.', + description => 'cs_sprf_create.sql &&cs_sql_id. &&cs_plan_hash_value. &&cs_sql_id2. &&cs_reference_sanitized. &&who_am_i.', + category => 'DEFAULT', + validate => TRUE, + replace => TRUE + ); + DBMS_OUTPUT.put_line('created cs_&&cs_sql_id._&&cs_sql_id2.'); + ELSE + DBMS_OUTPUT.put_line('profile already exists cs_&&cs_sql_id._&&cs_sql_id2.'); + END IF; +EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.put_line('created nothing!'); + RETURN; +END; +/ +SET SERVEROUT OFF; +-- +EXEC :cs_signature := :cs_signature2; +@@cs_internal/cs_sprf_internal_list.sql +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." "&&cs_sql_id2." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sprf_disable.sql b/csierra/cs_sprf_disable.sql new file mode 100644 index 0000000..ed2f66f --- /dev/null +++ b/csierra/cs_sprf_disable.sql @@ -0,0 +1,82 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_disable.sql +-- +-- Purpose: Disable one or all SQL Profiles for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_disable.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_disable'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO 2. NAME (opt): +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO NAME : &&cs_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO Disable name: "&&cs_name." +BEGIN + FOR i IN (SELECT name + FROM dba_sql_profiles + WHERE signature = :cs_signature + AND status = 'ENABLED' + AND name = NVL('&&cs_name.', name) + ORDER BY name) + LOOP + DBMS_SQLTUNE.alter_sql_profile(name => i.name, attribute_name => 'STATUS', value => 'DISABLED'); + END LOOP; +END; +/ +-- +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_sprf_drop.sql b/csierra/cs_sprf_drop.sql new file mode 100644 index 0000000..c99bff2 --- /dev/null +++ b/csierra/cs_sprf_drop.sql @@ -0,0 +1,72 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_drop.sql +-- +-- Purpose: Drop all SQL Profiles for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/11/17 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_drop.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_drop'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/&&cs_zapper_managed. +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO APPLICATION : &&cs_application_category. +PRO TABLE_OWNER : &&table_owner. +PRO TABLE_NAME : &&table_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +@@cs_internal/cs_sprf_internal_stgtab.sql +@@cs_internal/cs_sprf_internal_pack.sql +-- +@@cs_internal/cs_sprf_internal_drop.sql +-- +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_sprf_drop_all.sql b/csierra/cs_sprf_drop_all.sql new file mode 100644 index 0000000..05fa749 --- /dev/null +++ b/csierra/cs_sprf_drop_all.sql @@ -0,0 +1,86 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_drop_all.sql +-- +-- Purpose: Drop all SQL Profiles for some SQL Text string on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/05 +-- +-- Usage: Connecting into PDB. +-- +-- Confirm when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_drop_all.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +DEF sleep_seconds = '1'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_drop_all'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +COL count_distinct_rf NEW_V count_distinct_rf NOPRI; +COL estimated_seconds_rf NEW_V estimated_seconds_rf NOPRI; +SELECT TO_CHAR(COUNT(DISTINCT name) * TO_NUMBER('&&sleep_seconds.')) AS estimated_seconds_rf, TO_CHAR(COUNT(DISTINCT name)) AS count_distinct_rf FROM dba_sql_profiles WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') +/ +-- +PRO +PRO *** +PRO *** You are about to drop &&count_distinct_rf. SQL Profiles on this &&cs_con_name. PDB on SQL text "&&cs2_sql_text_piece." +PRO *** +PRO +PRO 2. Enter "Yes" (case sensitive) to continue, else -C +DEF cs_confirm = '&2.'; +UNDEF 2; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." "&&cs_confirm." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +PRO +PRO Drop all &&count_distinct_rf. SQL Profiles which include SQL text "&&cs2_sql_text_piece." +PRO +PRO Estimated Seconds: &&estimated_seconds_rf. +PRO +SET SERVEROUT ON; +DECLARE + l_total INTEGER := 0; +BEGIN + IF '&&cs_confirm.' = 'Yes' THEN + FOR i IN (SELECT DISTINCT name FROM dba_sql_profiles WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') ORDER BY name) + LOOP + DBMS_SQLTUNE.drop_sql_profile(name => i.name); + l_total := l_total + 1; + DBMS_LOCK.sleep(TO_NUMBER('&&sleep_seconds.')); + END LOOP; + END IF; + DBMS_OUTPUT.put_line(' *** SQL Profiles Dropped:'||l_total); +END; +/ +SET SERVEROUT OFF; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." "&&cs_confirm." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_sprf_drop_all_unused.sql b/csierra/cs_sprf_drop_all_unused.sql new file mode 100644 index 0000000..cf88c6d --- /dev/null +++ b/csierra/cs_sprf_drop_all_unused.sql @@ -0,0 +1,9 @@ +SELECT name FROM dba_sql_profiles MINUS SELECT sql_profile FROM v$sql WHERE sql_profile IS NOT NULL; +BEGIN + FOR i IN (SELECT name FROM dba_sql_profiles MINUS SELECT sql_profile FROM v$sql WHERE sql_profile IS NOT NULL) + LOOP + DBMS_SQLTUNE.drop_sql_profile(name => i.name); + END LOOP; +END; +/ +SELECT name FROM dba_sql_profiles MINUS SELECT sql_profile FROM v$sql WHERE sql_profile IS NOT NULL; \ No newline at end of file diff --git a/csierra/cs_sprf_enable.sql b/csierra/cs_sprf_enable.sql new file mode 100644 index 0000000..6dc0a83 --- /dev/null +++ b/csierra/cs_sprf_enable.sql @@ -0,0 +1,82 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_enable.sql +-- +-- Purpose: Enable one or all SQL Profiles for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_enable.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_enable'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO 2. NAME (opt): +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO NAME : &&cs_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO Disable name: "&&cs_name." +BEGIN + FOR i IN (SELECT name + FROM dba_sql_profiles + WHERE signature = :cs_signature + AND status = 'DISABLED' + AND name = NVL('&&cs_name.', name) + ORDER BY name) + LOOP + DBMS_SQLTUNE.alter_sql_profile(name => i.name, attribute_name => 'STATUS', value => 'ENABLED'); + END LOOP; +END; +/ +-- +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_sprf_export.sql b/csierra/cs_sprf_export.sql new file mode 100644 index 0000000..927fa8b --- /dev/null +++ b/csierra/cs_sprf_export.sql @@ -0,0 +1,521 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_export.sql +-- +-- Purpose: Exports Execution Plans for some SQL_ID or all SQL on a PDB using SQL Profile(s) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/01/04 +-- +-- Usage: Connecting into PDB. +-- +-- Enter optional SQL Text Piece or SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_export.sql +-- +-- Notes: Developed and tested on 12.1.0.2 and 19c. +-- Application agnostic +-- KIEV aware +-- KIEV Statement Caching aware +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_export'; +-- +COL parsing_schema_name FOR A30; +WITH +u AS +(SELECT /*+ MATERIALIZE NO_MERGE */ user_id, username FROM dba_users WHERE oracle_maintained = 'N' AND common = 'NO' AND ROWNUM >= 1 /* MATERIALIZE NO_MERGE */) +SELECT s.parsing_schema_name, COUNT(*) AS sql_statements + FROM v$sql s, u +WHERE s.plan_hash_value > 0 -- e.g.: PL/SQL has 0 on PHV +AND s.exact_matching_signature > 0 -- INSERT from values has 0 on signature +AND s.executions > 0 +AND s.cpu_time > 0 +AND s.buffer_gets > 0 +AND s.object_status = 'VALID' +AND s.is_obsolete = 'N' +AND s.is_shareable = 'Y' +AND s.is_resolved_adaptive_plan IS NULL -- to ignore adaptive plans which cause trouble when combined with SPM +AND s.last_active_time > SYSDATE - 1 +AND s.parsing_user_id > 0 -- ddl and stats gathering have parsing_user_id = 0 +AND u.username = s.parsing_schema_name +GROUP BY + s.parsing_schema_name +ORDER BY + s.parsing_schema_name +/ +PRO +PRO 1. Parsing Schema Name: (opt) +DEF cs_parsing_schema_name = '&1.'; +UNDEF 1; +-- +PRO +PRO 2. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): (opt) +DEF cs2_sql_text_piece = '&2.'; +UNDEF 2; +-- +PRO +PRO 3. SQL_ID: (opt) +DEF cs_sql_id = '&3.'; +UNDEF 3; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' AS cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_parsing_schema_name." "&&cs2_sql_text_piece." "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +PRO SCHEMA_NAME : "&&cs_parsing_schema_name." +PRO SQL_TEXT : "&&cs2_sql_text_piece." +PRO SQL_ID : "&&cs_sql_id." +-- +COL export_version NEW_V export_version NOPRI; +SELECT TO_CHAR(SYSDATE, 'HH24MISS') AS export_version FROM DUAL; +VAR v_exported NUMBER; +EXEC :v_exported := 0; +-- +PRO please wait... +SET HEA OFF PAGES 0 TERM OFF SERVEROUT ON; +/* ========================================================================================== */ +-- IMPLEMENT scrip +SPO &&cs_file_name._IMPLEMENT.sql; +DECLARE + l_pos INTEGER; + l_pos2 INTEGER; + l_hint VARCHAR2(4000); + -- + PROCEDURE o(p_line IN VARCHAR2) IS BEGIN DBMS_OUTPUT.put_line(p_line); END; +BEGIN + o('/* -------------------------------------------------------------------------------------- */'); + o('--'); + o('-- File name: &&cs_file_name._IMPLEMENT.sql'); + o('--'); + o('-- Purpose: Implements Execution Plans for some SQL_ID or all SQL on a PDB using SQL Profile(s)'); + o('--'); + o('-- Author: Carlos Sierra'); + o('--'); + o('-- Version: 2022/02/22'); + o('--'); + o('-- Usage: Connecting into PDB.'); + o('--'); + o('-- Example: $ sqlplus / as sysdba'); + o('-- SQL> @&&cs_file_name._IMPLEMENT.sql'); + o('--'); + o('/* -------------------------------------------------------------------------------------- */'); + o('-- exit if executed on standby or from CDB$ROOT'); + o('WHENEVER SQLERROR EXIT FAILURE;'); + o('DECLARE'); + o(' l_is_primary VARCHAR2(5);'); + o('BEGIN'); + o(' SELECT CASE WHEN open_mode = ''READ WRITE'' AND database_role = ''PRIMARY'' THEN ''TRUE'' ELSE ''FALSE'' END AS is_primary INTO l_is_primary FROM v$database;'); + o(' IF l_is_primary = ''FALSE'' THEN raise_application_error(-20000, ''*** MUST EXECUTE ON READ WRITE PRIMARY ***''); END IF;'); + o(' IF SYS_CONTEXT(''USERENV'', ''CON_NAME'') = ''CDB$ROOT'' THEN raise_application_error(-20000, ''*** MUST EXECUTE ON PDB AND NOT ON CDB$ROOT ***''); END IF;'); + o('END;'); + o('/'); + o('WHENEVER SQLERROR CONTINUE;'); + o('--'); + o('SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF;'); + o('SET SERVEROUT ON;'); + o('COL report_time NEW_V report_time NOPRI;'); + o('SELECT TO_CHAR(SYSDATE, ''YYYY-MM-DD"T"HH24.MI.SS'') AS report_time FROM DUAL;'); + o('--'); + o('SPO &&cs_file_name._IMPLEMENT_&&double_ampersand.report_time..txt;'); + o('PRO PRO'); + o('PRO PRO &&cs_file_name._IMPLEMENT_&&double_ampersand.report_time..txt'); + o('PRO PRO'); + o('--'); + o('VAR v_implemented NUMBER;'); + o('EXEC :v_implemented := 0;'); + o('--'); + o('DEF kievbuckets_owner = '''';'); + o('COL kievbuckets_owner NEW_V kievbuckets_owner NOPRI;'); + --o('SELECT owner AS kievbuckets_owner FROM dba_tables WHERE table_name = ''KIEVDATASTOREMETADATA'' AND owner NOT IN (''APP_USER'', ''PDBADMIN'') ORDER BY last_analyzed DESC NULLS LAST FETCH FIRST 1 ROW ONLY;'); + o('SELECT owner AS kievbuckets_owner FROM dba_tables WHERE table_name = ''KIEVDATASTOREMETADATA'' AND owner NOT IN (''PDBADMIN'') ORDER BY last_analyzed DESC NULLS LAST FETCH FIRST 1 ROW ONLY;'); + -- main cursor + FOR i IN (WITH + u AS + (SELECT /*+ MATERIALIZE NO_MERGE */ user_id, username FROM dba_users WHERE oracle_maintained = 'N' AND common = 'NO' AND ROWNUM >= 1 /* MATERIALIZE NO_MERGE */), + s AS + ( + SELECT s.exact_matching_signature AS signature, s.sql_id, s.plan_hash_value, x.plan_hash_value_2, s.sql_text, + CASE WHEN '&&cs_kiev_owner.' IS NOT NULL THEN REPLACE(s.sql_fulltext, s.parsing_schema_name||'.', '#kievbuckets_owner#.') ELSE s.sql_fulltext END AS sql_fulltext, + s.parsing_schema_name, x.other_xml, + ROW_NUMBER() OVER (PARTITION BY s.exact_matching_signature, s.sql_id ORDER BY s.last_active_time DESC) AS rn, + -- bucket_name and bucket_id are KIEV specific, and needed to support statement caching on KIEV, which requires to embed the bucket_id into sql decoration (e.g. /* performScanQuery(NOTIFICATION_BOARD,EVENT_BY_SCHEDULED_TIME) [1002] */) + CASE + WHEN s.sql_text LIKE '%/* %(%,%)% [%] */%' AND (s.sql_text LIKE '%performScanQuery%' OR s.sql_text LIKE '%performSegmentedScanQuery%' OR s.sql_text LIKE '%getValues%') + THEN SUBSTR(s.sql_fulltext, INSTR(s.sql_fulltext, '(') + 1, INSTR(s.sql_fulltext, ',') - INSTR(s.sql_fulltext, '(') - 1) + END AS bucket_name, + CASE + WHEN s.sql_text LIKE '%/* %(%,%)% [%] */%' AND (s.sql_text LIKE '%performScanQuery%' OR s.sql_text LIKE '%performSegmentedScanQuery%' OR s.sql_text LIKE '%getValues%') + THEN SUBSTR(s.sql_fulltext, INSTR(s.sql_fulltext, '[') + 1, INSTR(s.sql_fulltext, ']') - INSTR(s.sql_fulltext, '[') - 1) + END AS bucket_id + FROM v$sql s, u u1, u u2 + OUTER APPLY ( + SELECT p.other_xml, TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash_2"]')) AS plan_hash_value_2 + FROM v$sql_plan p + WHERE p.address = s.address + AND p.hash_value = s.hash_value + AND p.sql_id = s.sql_id + AND p.plan_hash_value = s.plan_hash_value + AND p.child_address = s.child_address + AND p.child_number = s.child_number + AND p.other_xml IS NOT NULL + --AND p.id = 1 + AND TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.other_xml),'/*/info[@type = "plan_hash_2"]')) >= 0 + AND ROWNUM = 1 + ) x + WHERE s.plan_hash_value > 0 -- e.g.: PL/SQL has 0 on PHV + AND s.exact_matching_signature > 0 -- INSERT from values has 0 on signature + AND s.executions > 0 + AND s.cpu_time > 0 + AND s.buffer_gets > 0 + --AND s.buffer_gets > s.executions + AND s.object_status = 'VALID' + AND s.is_obsolete = 'N' + AND s.is_shareable = 'Y' + -- AND s.is_bind_aware = 'N' -- to ignore cursors using adaptive cursor sharing ACS as per CHANGE-190522 + AND s.is_resolved_adaptive_plan IS NULL -- to ignore adaptive plans which cause trouble when combined with SPM + --AND s.is_reoptimizable = 'N' -- to ignore cursors which require adjustments as per cardinality feedback + AND s.parsing_user_id > 0 -- ddl and stats gathering have parsing_user_id = 0 + AND s.last_active_time > SYSDATE - 1 -- select only sql that has been executed recently + AND s.parsing_schema_name = NVL(TRIM('&&cs_parsing_schema_name.'), s.parsing_schema_name) + AND s.sql_id = NVL(TRIM('&&cs_sql_id.'), s.sql_id) + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER('&&cs2_sql_text_piece.')||'%') + AND u1.user_id = s.parsing_user_id + AND u2.user_id = s.parsing_schema_id + AND x.plan_hash_value_2 > 0 -- (Phv2) includes the hash value of the execution(PLAN_HASH_VALUE) and the hash value of its predicate part. + AND ROWNUM >= 1 /* MATERIALIZE NO_MERGE */ + ) + SELECT signature, sql_id, plan_hash_value, plan_hash_value_2, SUBSTR(sql_text, 1, 100) AS sql_text_100, sql_text, sql_fulltext, parsing_schema_name, other_xml, + bucket_name, bucket_id, CASE WHEN bucket_id IS NULL THEN 'NORMAL' ELSE 'BUCKET' END AS type + FROM s + WHERE rn = 1 + ORDER BY + signature) + LOOP + o('--'); + o('PRO'); + o('PRO '||i.sql_text_100); + o('PRO ['||i.signature||']['||i.sql_id||']['||i.plan_hash_value||']['||i.plan_hash_value_2||']['||i.bucket_name||']['||i.bucket_id||']['||i.type||']['||i.parsing_schema_name||']'); + o('DECLARE'); + o('l_plan_name VARCHAR2(30);'); + o('l_description VARCHAR2(500);'); + o('l_count NUMBER;'); + o('l_plans NUMBER;'); + o('l_target_bucket_id VARCHAR2(6);'); + o('l_target_signature NUMBER;'); + o('l_sql_text_clob CLOB;'); + o('l_profile_attr SYS.SQLPROF_ATTR;'); + o('PROCEDURE o(p_line IN VARCHAR2) IS BEGIN DBMS_OUTPUT.put_line(p_line); END;'); + o('BEGIN'); + o('-- sql_text'); + o(q'{l_sql_text_clob := q'[}'); -- ' + l_pos := 1; + WHILE l_pos > 0 + LOOP + l_pos2 := INSTR(i.sql_fulltext||CHR(10), CHR(10), l_pos); + o(SUBSTR(i.sql_fulltext, l_pos, l_pos2 - l_pos)); + l_pos := NULLIF(l_pos2, 0) + 1; + END LOOP; + o(q'{]';}'); -- ' + o('-- hints'); + o('l_profile_attr := SYS.SQLPROF_ATTR('); + o(q'{q'[BEGIN_OUTLINE_DATA]',}'); + FOR j IN (SELECT hint FROM XMLTABLE('other_xml/outline_data/hint' PASSING XMLTYPE(i.other_xml) COLUMNS hint VARCHAR2(4000) PATH '.')) + LOOP + l_hint := j.hint; + WHILE l_hint IS NOT NULL + LOOP + IF LENGTH(l_hint) <= 500 THEN + o(q'{q'[}'||l_hint||q'{]',}'); + l_hint := NULL; + ELSE + l_pos := INSTR(SUBSTR(l_hint, 1, 500), ' ', -1); + o(q'{q'[}'||SUBSTR(l_hint, 1, l_pos)||q'{]',}'); + l_hint := SUBSTR(l_hint, l_pos); + END IF; + END LOOP; + END LOOP; + o(q'{q'[END_OUTLINE_DATA]'}'); + o(');'); + o('-- transformations'); + o('IF '''||i.bucket_id||''' IS NOT NULL THEN -- KIEV Statement Caching specific'); + o('EXECUTE IMMEDIATE ''SELECT TO_CHAR(bucketid) AS bucket_id FROM &&double_ampersand.kievbuckets_owner..kievbuckets WHERE UPPER(name) = UPPER('''''||i.bucket_name||''''')'' INTO l_target_bucket_id;'); + o('END IF;'); + o('IF l_target_bucket_id IS NOT NULL THEN'); + o('l_sql_text_clob := REPLACE(l_sql_text_clob, ''['||i.bucket_id||']'', ''[''||l_target_bucket_id||'']'');'); + -- o('l_target_signature := DBMS_SQLTUNE.sqltext_to_signature (sql_text => l_sql_text_clob);'); + -- o('ELSE'); + -- o('l_target_signature := '||i.signature||';'); + o('END IF;'); + o('IF ''&&double_ampersand.kievbuckets_owner.'' IS NOT NULL THEN -- KIEV Bucket Owner'); + o('l_sql_text_clob := REPLACE(l_sql_text_clob, ''#kievbuckets_owner#'', ''&&double_ampersand.kievbuckets_owner.'');'); + o('END IF;'); + o('l_target_signature := DBMS_SQLTUNE.sqltext_to_signature (sql_text => l_sql_text_clob);'); + o('o(''[''||l_target_signature||''][''||l_target_bucket_id||'']'');'); + o('l_plan_name := ''exp_'||i.sql_id||'_&&export_version.''||l_target_bucket_id;'); + o('l_description := ''[''||l_target_signature||'']['||i.plan_hash_value||']['||i.plan_hash_value_2||']['||i.signature||']['||i.sql_id||']['||i.bucket_name||']['||i.bucket_id||'][&&cs_rgn.][&&cs_db_name_u.][&&cs_con_name.][EXP]['||i.type||'][&&cs_reference.]'';'); +-- DBPERF-8216 begin + o('-- drop unexpected profile'); + o('FOR i IN (SELECT p.name FROM dba_sql_profiles p WHERE p.name = l_plan_name AND p.signature <> l_target_signature)'); + o('LOOP'); + o('o(''SPRF drop: ''||i.name);'); + o('DBMS_SQLTUNE.drop_sql_profile(name => i.name, ignore => TRUE);'); + o('END LOOP;'); +-- DBPERF-8216 end + o('-- disable prior sql_profile'); + o('FOR i IN (SELECT p.name FROM dba_sql_profiles p WHERE p.signature = l_target_signature AND p.category = ''DEFAULT'' AND p.status = ''ENABLED'' AND NVL(p.description, ''NULL'') NOT LIKE ''%][EXP][%'' AND NOT EXISTS (SELECT NULL FROM dba_sql_profiles e WHERE e.name = p.name AND e.category = ''BACKUP''))'); + o('LOOP'); + o('o(''SPRF disable: ''||i.name);'); + o('DBMS_SQLTUNE.alter_sql_profile(name => i.name, attribute_name => ''CATEGORY'', value => ''BACKUP'');'); + o('END LOOP;'); + o('-- create new sql_profile'); + o('SELECT COUNT(*) INTO l_count FROM dba_sql_profiles WHERE name = l_plan_name;'); + o('IF l_count = 0 THEN'); + o('o(''SPRF create: ''||l_plan_name||'' ''||l_description);'); + o('DBMS_SQLTUNE.import_sql_profile(sql_text => l_sql_text_clob, profile => l_profile_attr, name => l_plan_name, description => l_description, replace => TRUE);'); + o(':v_implemented := :v_implemented + 1;'); +-- DBPERF-7594 begin + o('ELSE'); + o('SELECT COUNT(*) INTO l_count FROM dba_sql_profiles WHERE name = l_plan_name AND status = ''DISABLED'';'); + o('IF l_count > 0 THEN'); + o('o(''SPRF enable: ''||l_plan_name||'' ''||l_description);'); + o('DBMS_SQLTUNE.alter_sql_profile(name => l_plan_name, attribute_name => ''STATUS'', value => ''ENABLED'');'); + o(':v_implemented := :v_implemented + 1;'); + o('END IF;'); +-- DBPERF-7594 end + o('END IF;'); + o('-- disable prior sql_patch'); + o('FOR i IN (SELECT p.name FROM dba_sql_patches p WHERE p.signature = l_target_signature AND p.category = ''DEFAULT'' AND p.status = ''ENABLED'' AND NOT EXISTS (SELECT NULL FROM dba_sql_patches e WHERE e.name = p.name AND e.category = ''BACKUP''))'); + o('LOOP'); + o('o(''SPCH disable: ''||i.name);'); + o('$IF DBMS_DB_VERSION.ver_le_12_1'); + o('$THEN'); + o('DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => ''CATEGORY'', value => ''BACKUP'');'); + o('$ELSE'); + o('DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => ''CATEGORY'', attribute_value => ''BACKUP'');'); + o('$END'); + o('END LOOP;'); + o('-- disable prior sql_plan_baseline'); + o('FOR i IN (SELECT p.sql_handle, p.plan_name, p.description FROM dba_sql_plan_baselines p WHERE p.signature = l_target_signature AND p.enabled = ''YES'' AND p.accepted = ''YES'')'); + o('LOOP'); + o('o(''SPBL disable: ''||i.sql_handle||'' ''||i.plan_name||'' ''||i.description);'); + o('l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => ''ENABLED'', attribute_value => ''NO'');'); + o('IF NVL(i.description, ''NULL'') NOT LIKE ''%[&&export_version.]%'' THEN'); + o('IF LENGTH(i.description) > 470 THEN'); + o('l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => ''DESCRIPTION'', attribute_value => ''[EXP][&&export_version.]'');'); + o('ELSE'); + o('l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => ''DESCRIPTION'', attribute_value => i.description||'' [EXP][&&export_version.]'');'); + o('END IF;'); + o('o(''SPBL update: [EXP][&&export_version.]'');'); + o('END IF;'); + o('END LOOP;'); + o('END;'); + o('/'); + :v_exported := :v_exported + 1; + END LOOP; + o('--'); + o('PRINT v_implemented;'); + o('PRO PRO'); + o('PRO PRO &&cs_file_name._IMPLEMENT_&&double_ampersand.report_time..txt'); + o('PRO PRO'); + o('SPO OFF;'); + o('SET SERVEROUT OFF;'); + o('--'); + o('-- &&cs_file_name._IMPLEMENT.sql'); + o('--'); + o('HOS ls -l &&cs_file_name._IMPLEMENT*'); +END; +/ +SPO OFF; +HOS chmod 644 &&cs_file_name._IMPLEMENT.sql +/* ========================================================================================== */ +-- ROLLBACK scrip +SPO &&cs_file_name._ROLLBACK.sql; +DECLARE + PROCEDURE o(p_line IN VARCHAR2) IS BEGIN DBMS_OUTPUT.put_line(p_line); END; +BEGIN + o('/* -------------------------------------------------------------------------------------- */'); + o('--'); + o('-- File name: &&cs_file_name._ROLLBACK.sql'); + o('--'); + o('-- Purpose: Rollsback Execution Plans for some SQL_ID or all SQL on a PDB using SQL Profile(s)'); + o('--'); + o('-- Author: Carlos Sierra'); + o('--'); + o('-- Version: 2022/02/14'); + o('--'); + o('-- Usage: Connecting into PDB.'); + o('--'); + o('-- Example: $ sqlplus / as sysdba'); + o('-- SQL> @&&cs_file_name._ROLLBACK.sql'); + o('--'); + o('/* --------------------------------------------------------------------------------------- */'); + o('-- exit if executed on standby or from CDB$ROOT'); + o('WHENEVER SQLERROR EXIT FAILURE;'); + o('DECLARE'); + o(' l_is_primary VARCHAR2(5);'); + o('BEGIN'); + o(' SELECT CASE WHEN open_mode = ''READ WRITE'' AND database_role = ''PRIMARY'' THEN ''TRUE'' ELSE ''FALSE'' END AS is_primary INTO l_is_primary FROM v$database;'); + o(' IF l_is_primary = ''FALSE'' THEN raise_application_error(-20000, ''*** MUST EXECUTE ON READ WRITE PRIMARY ***''); END IF;'); + o(' IF SYS_CONTEXT(''USERENV'', ''CON_NAME'') = ''CDB$ROOT'' THEN raise_application_error(-20000, ''*** MUST EXECUTE ON PDB AND NOT ON CDB$ROOT ***''); END IF;'); + o('END;'); + o('/'); + o('WHENEVER SQLERROR CONTINUE;'); + o('--'); + o('SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF;'); + o('SET SERVEROUT ON;'); + o('COL report_time NEW_V report_time NOPRI;'); + o('SELECT TO_CHAR(SYSDATE, ''YYYY-MM-DD"T"HH24.MI.SS'') AS report_time FROM DUAL;'); + o('--'); + o('SPO &&cs_file_name._ROLLBACK_&&double_ampersand.report_time..txt;'); + o('PRO PRO'); + o('PRO PRO &&cs_file_name._ROLLBACK_&&double_ampersand.report_time..txt'); + o('PRO PRO'); + o('VAR v_rolled_back NUMBER;'); + o('EXEC :v_rolled_back := 0;'); + o('--'); + o('DECLARE'); + o('l_plans NUMBER;'); + o('PROCEDURE o(p_line IN VARCHAR2) IS BEGIN DBMS_OUTPUT.put_line(p_line); END;'); + o('BEGIN'); + o('o(''~~~~~~~~~~~~~~~~~~~~~~~~~~'');'); + o('o(''drop imported sql_profiles'');'); + o('o(''~~~~~~~~~~~~~~~~~~~~~~~~~~'');'); + o('FOR i IN (SELECT name FROM dba_sql_profiles WHERE name LIKE ''exp_%_&&export_version.%'' AND category = ''DEFAULT'' AND status = ''ENABLED'' AND description LIKE ''%][EXP][%'')'); + o('LOOP'); + o('o(''SPRF drop: ''||i.name);'); + o('DBMS_SQLTUNE.drop_sql_profile(name => i.name);'); + o(':v_rolled_back := :v_rolled_back + 1;'); + o('END LOOP;'); + o('o(''~~~~~~~~~~~~~~~~~~~~~~~~~'');'); + o('o(''enable prior sql_profiles'');'); + o('o(''~~~~~~~~~~~~~~~~~~~~~~~~~'');'); + o('FOR i IN (SELECT name FROM dba_sql_profiles WHERE name NOT LIKE ''exp_%_&&export_version.%'' AND category = ''BACKUP'' AND status = ''ENABLED'' AND NVL(description, ''NULL'') NOT LIKE ''%][EXP][%'')'); + o('LOOP'); + o('o(''SPRF enable: ''||i.name);'); + o('DBMS_SQLTUNE.alter_sql_profile(name => i.name, attribute_name => ''CATEGORY'', value => ''DEFAULT'');'); + o('END LOOP;'); + o('o(''~~~~~~~~~~~~~~~~~~~~~~~~'');'); + o('o(''enable prior sql_patches'');'); + o('o(''~~~~~~~~~~~~~~~~~~~~~~~~'');'); + o('FOR i IN (SELECT p.name FROM dba_sql_patches p WHERE p.category = ''BACKUP'' AND p.status = ''ENABLED'' AND NOT EXISTS (SELECT NULL FROM dba_sql_patches e WHERE e.name = p.name AND e.category = ''DEFAULT''))'); + o('LOOP'); + o('o(''SPCH enable: ''||i.name);'); + o('$IF DBMS_DB_VERSION.ver_le_12_1'); + o('$THEN'); + o('DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => ''CATEGORY'', value => ''DEFAULT'');'); + o('$ELSE'); + o('DBMS_SQLDIAG.alter_sql_patch(name => i.name, attribute_name => ''CATEGORY'', attribute_value => ''DEFAULT'');'); + o('$END'); + o('END LOOP;'); + o('o(''~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'');'); + o('o(''enable prior sql_plan_baselines'');'); + o('o(''~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'');'); + o('FOR i IN (SELECT p.sql_handle, p.plan_name, p.description FROM dba_sql_plan_baselines p WHERE p.enabled = ''NO'' AND p.accepted = ''YES'' AND p.description LIKE ''%[&&export_version.]%'')'); + o('LOOP'); + o('o(''SPBL enable: ''||i.sql_handle||'' ''||i.plan_name||'' ''||i.description);'); + o('l_plans := DBMS_SPM.alter_sql_plan_baseline(sql_handle => i.sql_handle, plan_name => i.plan_name, attribute_name => ''ENABLED'', attribute_value => ''YES'');'); + o('END LOOP;'); + o('END;'); + o('/'); + o('--'); + o('PRINT v_rolled_back;'); + o('PRO PRO'); + o('PRO PRO &&cs_file_name._ROLLBACK_&&double_ampersand.report_time..txt'); + o('PRO PRO'); + o('SPO OFF;'); + o('SET SERVEROUT OFF;'); + o('--'); + o('-- &&cs_file_name._ROLLBACK.sql'); + o('--'); + o('HOS ls -l &&cs_file_name._ROLLBACK*'); +END; +/ +SPO OFF; +HOS chmod 644 &&cs_file_name._ROLLBACK.sql +/* ========================================================================================== */ +-- VERIFY scrip +SPO &&cs_file_name._VERIFY.sql; +DECLARE + PROCEDURE o(p_line IN VARCHAR2) IS BEGIN DBMS_OUTPUT.put_line(p_line); END; +BEGIN + o('/* -------------------------------------------------------------------------------------- */'); + o('--'); + o('-- File name: &&cs_file_name._VERIFY.sql'); + o('--'); + o('-- Purpose: Verify Implemented Execution Plans for some SQL_ID or all SQL on a PDB using SQL Profile(s)'); + o('--'); + o('-- Author: Carlos Sierra'); + o('--'); + o('-- Version: 2022/02/14'); + o('--'); + o('-- Usage: Connecting into PDB.'); + o('--'); + o('-- Example: $ sqlplus / as sysdba'); + o('-- SQL> @&&cs_file_name._VERIFY.sql'); + o('--'); + o('/* --------------------------------------------------------------------------------------- */'); + o('-- exit if executed on standby or from CDB$ROOT'); + o('WHENEVER SQLERROR EXIT FAILURE;'); + o('DECLARE'); + o(' l_is_primary VARCHAR2(5);'); + o('BEGIN'); + o(' SELECT CASE WHEN open_mode = ''READ WRITE'' AND database_role = ''PRIMARY'' THEN ''TRUE'' ELSE ''FALSE'' END AS is_primary INTO l_is_primary FROM v$database;'); + o(' IF l_is_primary = ''FALSE'' THEN raise_application_error(-20000, ''*** MUST EXECUTE ON READ WRITE PRIMARY ***''); END IF;'); + o(' IF SYS_CONTEXT(''USERENV'', ''CON_NAME'') = ''CDB$ROOT'' THEN raise_application_error(-20000, ''*** MUST EXECUTE ON PDB AND NOT ON CDB$ROOT ***''); END IF;'); + o('END;'); + o('/'); + o('WHENEVER SQLERROR CONTINUE;'); + o('--'); + o('SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF;'); + o('SET FEED ON SERVEROUT ON;'); + o('COL report_time NEW_V report_time NOPRI;'); + o('SELECT TO_CHAR(SYSDATE, ''YYYY-MM-DD"T"HH24.MI.SS'') AS report_time FROM DUAL;'); + o('--'); + o('SPO &&cs_file_name._VERIFY_&&double_ampersand.report_time..txt;'); + o('PRO PRO'); + o('PRO PRO &&cs_file_name._VERIFY_&&double_ampersand.report_time..txt'); + o('PRO PRO'); + o('SELECT * FROM dba_sql_profiles WHERE name LIKE ''exp_%_&&export_version.%'' AND category = ''DEFAULT'' AND status = ''ENABLED'' AND description LIKE ''%][EXP][%'';'); + o('PRO PRO'); + o('PRO PRO &&cs_file_name._VERIFY_&&double_ampersand.report_time..txt'); + o('PRO PRO'); + o('SPO OFF;'); + o('SET FEED OFF SERVEROUT OFF;'); + o('--'); + o('-- &&cs_file_name._VERIFY.sql'); + o('--'); + o('HOS ls -l &&cs_file_name._VERIFY*'); +END; +/ +SPO OFF; +HOS chmod 644 &&cs_file_name._VERIFY.sql +/* ========================================================================================== */ +SET HEA ON PAGES 100 TERM ON SERVEROUT OFF; +-- +-- continues with original spool +SPO &&cs_file_name..txt APP +PRO +PRINT v_exported; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_parsing_schema_name." "&&cs2_sql_text_piece." "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- +PRO +HOS ls -l &&cs_file_prefix._&&cs_script_name.*.* +-- \ No newline at end of file diff --git a/csierra/cs_sprf_indexes.sql b/csierra/cs_sprf_indexes.sql new file mode 100644 index 0000000..20dd93d --- /dev/null +++ b/csierra/cs_sprf_indexes.sql @@ -0,0 +1,224 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_indexes.sql +-- +-- Purpose: List of Indexes Referenced by all SQL Profiles on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/07/29 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_indexes.sql +-- +-- Notes: Developed and tested on 19c. +-- +-- ORA-00600: internal error code, arguments: [qkebCreateColInFro:1], [], [], [], [], [], [], [], [], [], [], [] -- see bug 31947732 +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_indexes'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +COL sql_id FOR A13; +COL signature FOR 99999999999999999999; +COL sql_handle FOR A20; +COL plan_name FOR A30; +COL plan_id FOR 9999999999; +-- COL plan_hash FOR 9999999999; +-- COL plan_hash2 FOR 9999999999; +-- COL plan_hash_full FOR 9999999999; +COL indexed_columns FOR A200; +COL table_owner FOR A30; +COL table_name FOR A30; +COL index_owner FOR A30; +COL index_name FOR A30; +COL sql_text FOR A100 TRUNC; +COL description FOR A100 TRUNC; +COL created FOR A23; +COL last_modified FOR A23; +COL last_executed FOR A23; +COL timestamp FOR A19; +-- +-- only works from PDB. do not use CONTAINERS(table_name) since it causes ORA-00600: internal error code, arguments: [kkdolci1], [], [], [], [], [], [], +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +i AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ic.table_owner, ic.table_name, ic.index_owner, ic.index_name, + LISTAGG('"'||ic.table_name||'"."'||ic.column_name||'"', ' ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY ic.column_position) AS indexed_columns + FROM dba_ind_columns ic + WHERE ROWNUM >= 1 /* NO_MERGE */ + GROUP BY + ic.table_owner, ic.table_name, ic.index_owner, ic.index_name +), +b AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + p.signature, + t.sql_handle, + o.name AS plan_name, + p.plan_id, + -- TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.comp_data),'/*/info[@type = "plan_hash"]')) AS plan_hash, -- normal plan_hash_value + -- TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.comp_data),'/*/info[@type = "plan_hash_2"]')) AS plan_hash_2, -- plan_hash_value ignoring transient object names (must be same than plan_id for a baseline to be used) + -- TO_NUMBER(EXTRACTVALUE(XMLTYPE(p.comp_data),'/*/info[@type = "plan_hash_full"]')) AS plan_hash_full, -- adaptive plan (must be different than plan_hash_2 on loaded plans) + DECODE(BITAND(o.flags, 1), 0, 'NO', 'YES') AS enabled, + -- DECODE(BITAND(o.flags, 2), 0, 'NO', 'YES') AS accepted, + -- DECODE(BITAND(o.flags, 4), 0, 'NO', 'YES') AS fixed, + -- DECODE(BITAND(o.flags, 64), 0, 'YES', 'NO') AS reproduced, + -- DECODE(BITAND(o.flags, 128), 0, 'NO', 'YES') AS autopurge, + -- DECODE(BITAND(o.flags, 256), 0, 'NO', 'YES') AS adaptive, + SUBSTR(x.outline_hint, INSTR(x.outline_hint, '(', 1, 2) + 1, INSTR(x.outline_hint, '))') - INSTR(x.outline_hint, '(', 1, 2) - 1) AS indexed_columns, + t.sql_text, + a.description, + a.origin, + a.created, + a.last_modified, + o.last_executed, + TO_DATE(NULL) AS timestamp + FROM sys.sqlobj$data p, + XMLTABLE('outline_data/hint' PASSING XMLTYPE(p.comp_data) COLUMNS outline_hint VARCHAR2(500) PATH '.') x, + sys.sqlobj$ o, + sys.sqlobj$auxdata a, + sys.sql$text t + WHERE 1 = 1 -- p.signature = 16223414913647067245 + AND p.category = 'DEFAULT' + AND p.obj_type = 1 /* 1:profile, 2:baseline, 3:patch */ + AND p.comp_data IS NOT NULL + AND x.outline_hint LIKE 'INDEX%(%(%))' + AND o.signature = p.signature + AND o.category = p.category + AND o.obj_type = p.obj_type + AND o.plan_id = p.plan_id + AND a.signature = o.signature + AND a.category = o.category + AND a.obj_type = o.obj_type + AND a.plan_id = o.plan_id + AND t.signature = p.signature + AND ROWNUM >= 1 /* NO_MERGE */ +), +x AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + compute_sql_id(b.sql_text) AS sql_id, + b.sql_handle, + b.plan_name, + b.plan_id, + -- b.plan_hash, + -- b.plan_hash_2, + -- b.plan_hash_full, + b.enabled, + -- b.accepted, + -- b.fixed, + -- b.reproduced, + -- b.autopurge, + -- b.adaptive, + b.indexed_columns, + NVL(i.table_owner, '"missing"') AS table_owner, + NVL(i.table_name, '"missing"') AS table_name, + NVL(i.index_owner, '"missing"') AS index_owner, + NVL(i.index_name, '"missing"') AS index_name, + DBMS_LOB.SUBSTR(b.sql_text, 1000) AS sql_text, + b.description, + b.created, + b.last_modified, + b.last_executed, + b.timestamp + FROM b, i + WHERE i.indexed_columns(+) = b.indexed_columns + AND ROWNUM >= 1 /* NO_MERGE */ +) +SELECT /* comment out unwanted columns */ + x.sql_id, + x.sql_text, + -- x.sql_handle, + x.plan_name, + -- x.plan_id, + -- x.plan_hash, + -- x.plan_hash_2, + -- x.plan_hash_full, + x.enabled, + -- x.accepted, + -- x.fixed, + -- x.reproduced, + -- x.autopurge, + -- x.adaptive, + x.indexed_columns, + x.table_owner, + x.table_name, + x.index_owner, + x.index_name, + -- x.created, + -- x.last_modified, + -- x.last_executed, + -- x.timestamp, + x.description + FROM x + ORDER BY + x.sql_id, + x.plan_name, + x.indexed_columns, + x.table_owner, + x.table_name, + x.index_owner, + x.index_name +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sprf_list.sql b/csierra/cs_sprf_list.sql new file mode 100644 index 0000000..0e11047 --- /dev/null +++ b/csierra/cs_sprf_list.sql @@ -0,0 +1,53 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_list.sql +-- +-- Purpose: Summary list of SQL Profiles for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_list.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_list'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sprf_list_all_cdb.sql b/csierra/cs_sprf_list_all_cdb.sql new file mode 100644 index 0000000..fd90fe8 --- /dev/null +++ b/csierra/cs_sprf_list_all_cdb.sql @@ -0,0 +1,133 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_list_all_cdb.sql +-- +-- Purpose: List all SQL Profiles for some SQL Text string on CDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/03/27 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_list_all_cdb.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +-- @@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_list_all_cdb'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +COL created FOR A23; +COL sql_id FOR A13; +COL sql_text FOR A80 TRUNC; +COL name FOR A30; +COL child_cursors FOR 99999 HEA 'Child|Cursors'; +COL category FOR A30; +COL status FOR A8; +COL last_modified FOR A19; +COL description FOR A200; +COL pdb_name FOR A30 HEA 'PDB Name'; +-- +SET FEED ON; +-- +PRO +PRO SQL PROFILES - LIST (cdb_sql_profiles) +PRO ~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +used_profiles AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, sql_profile, COUNT(*) AS child_cursors + FROM v$sql + WHERE sql_profile IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + con_id, sql_profile +) +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + compute_sql_id(s.sql_text) AS sql_id, + DBMS_LOB.substr(s.sql_text, 1000) AS sql_text, + s.name, + p.child_cursors, + s.category, + s.status, + s.description, + c.name AS pdb_name + FROM cdb_sql_profiles s, + used_profiles p, + v$containers c + WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND p.sql_profile(+) = s.name + AND p.con_id(+) = s.con_id + AND c.con_id = s.con_id + ORDER BY + s.created, s.last_modified +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sprf_list_all_pdb.sql b/csierra/cs_sprf_list_all_pdb.sql new file mode 100644 index 0000000..c3980e8 --- /dev/null +++ b/csierra/cs_sprf_list_all_pdb.sql @@ -0,0 +1,128 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_list_all_pdb.sql +-- +-- Purpose: List all SQL Profiles for some SQL Text string on PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/03/27 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_list_all_pdb.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_list_all_pdb'; +-- +PRO 1. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT : &&cs2_sql_text_piece. +-- +COL created FOR A23; +COL sql_id FOR A13; +COL sql_text FOR A80 TRUNC; +COL name FOR A30; +COL child_cursors FOR 99999 HEA 'Child|Cursors'; +COL category FOR A30; +COL status FOR A8; +COL last_modified FOR A19; +COL description FOR A200; +-- +SET FEED ON; +-- +PRO +PRO SQL PROFILES - LIST (dba_sql_profiles) +PRO ~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION compute_sql_id (sql_text IN CLOB) +RETURN VARCHAR2 IS + BASE_32 CONSTANT VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + l_raw_128 RAW(128); + l_hex_32 VARCHAR2(32); + l_low_16 VARCHAR(16); + l_q3 VARCHAR2(8); + l_q4 VARCHAR2(8); + l_low_16_m VARCHAR(16); + l_number NUMBER; + l_idx INTEGER; + l_sql_id VARCHAR2(13); + function_returned_an_error EXCEPTION; + PRAGMA EXCEPTION_INIT(function_returned_an_error, -28817); -- ORA-28817: PL/SQL function returned an error. +BEGIN + l_raw_128 := /* use md5 algorithm on sql_text and produce 128 bit hash */ + SYS.DBMS_CRYPTO.hash(TRIM(CHR(0) FROM sql_text)||CHR(0), SYS.DBMS_CRYPTO.hash_md5); + l_hex_32 := RAWTOHEX(l_raw_128); /* 32 hex characters */ + l_low_16 := SUBSTR(l_hex_32, 17, 16); /* we only need lower 16 */ + l_q3 := SUBSTR(l_low_16, 1, 8); /* 3rd quarter (8 hex characters) */ + l_q4 := SUBSTR(l_low_16, 9, 8); /* 4th quarter (8 hex characters) */ + /* need to reverse order of each of the 4 pairs of hex characters */ + l_q3 := SUBSTR(l_q3, 7, 2)||SUBSTR(l_q3, 5, 2)||SUBSTR(l_q3, 3, 2)||SUBSTR(l_q3, 1, 2); + l_q4 := SUBSTR(l_q4, 7, 2)||SUBSTR(l_q4, 5, 2)||SUBSTR(l_q4, 3, 2)||SUBSTR(l_q4, 1, 2); + /* assembly back lower 16 after reversing order on each quarter */ + l_low_16_m := l_q3||l_q4; + /* convert to number */ + SELECT TO_NUMBER(l_low_16_m, 'xxxxxxxxxxxxxxxx') INTO l_number FROM DUAL; + /* 13 pieces base-32 (5 bits each) make 65 bits. we do have 64 bits */ + FOR i IN 1 .. 13 + LOOP + l_idx := TRUNC(l_number / POWER(32, (13 - i))); /* index on BASE_32 */ + l_sql_id := l_sql_id||SUBSTR(BASE_32, (l_idx + 1), 1); /* stitch 13 characters */ + l_number := l_number - (l_idx * POWER(32, (13 - i))); /* for next piece */ + END LOOP; + RETURN l_sql_id; +EXCEPTION + WHEN function_returned_an_error THEN + RETURN 'ORA-28817'; +END compute_sql_id; +used_profiles AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + sql_profile, COUNT(*) AS child_cursors + FROM v$sql + WHERE sql_profile IS NOT NULL + AND ROWNUM >= 1 + GROUP BY + sql_profile +) +SELECT TO_CHAR(s.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(s.last_modified, '&&cs_datetime_full_format.') AS last_modified, + compute_sql_id(s.sql_text) AS sql_id, + DBMS_LOB.substr(s.sql_text, 1000) AS sql_text, + s.name, + p.child_cursors, + s.category, + s.status, + s.description + FROM dba_sql_profiles s, + used_profiles p + WHERE ('&&cs2_sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND p.sql_profile(+) = s.name + ORDER BY + s.created, s.last_modified +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs2_sql_text_piece." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sprf_pack.sql b/csierra/cs_sprf_pack.sql new file mode 100644 index 0000000..ca2a021 --- /dev/null +++ b/csierra/cs_sprf_pack.sql @@ -0,0 +1,75 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_pack.sql +-- +-- Purpose: Packs into staging table one or all SQL Profiles for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_pack.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_pack'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO 2. Enter NAME (opt) +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO NAME : &&cs_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_sprf_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +@@cs_internal/cs_sprf_internal_stgtab.sql +@@cs_internal/cs_sprf_internal_pack.sql +-- +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- + + diff --git a/csierra/cs_sprf_plan.sql b/csierra/cs_sprf_plan.sql new file mode 100644 index 0000000..57a2031 --- /dev/null +++ b/csierra/cs_sprf_plan.sql @@ -0,0 +1,55 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_plan.sql +-- +-- Purpose: Display SQL Profile Plan for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_plan.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_plan'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_sprf_internal_list.sql +@@cs_internal/cs_sprf_internal_plan.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_sprf_stgtab.sql b/csierra/cs_sprf_stgtab.sql new file mode 100644 index 0000000..d6cc470 --- /dev/null +++ b/csierra/cs_sprf_stgtab.sql @@ -0,0 +1,44 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_stgtab.sql +-- +-- Purpose: Creates Staging Table for SQL Profiles +-- +-- Author: Carlos Sierra +-- +-- Version: 2018/08/06 +-- +-- Usage: Connecting into PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_stgtab.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_stgtab'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_sprf_internal_stgtab.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_sprf_unpack.sql b/csierra/cs_sprf_unpack.sql new file mode 100644 index 0000000..f8f6af3 --- /dev/null +++ b/csierra/cs_sprf_unpack.sql @@ -0,0 +1,84 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_unpack.sql +-- +-- Purpose: Unpack from staging table one or all SQL Profiles for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/02/28 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_unpack.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_unpack'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO 2. Enter NAME (opt) +DEF cs_name = '&2.'; +UNDEF 2; +PRO +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO NAME : &&cs_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_sprf_internal_list.sql +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO Unpack name: "&&cs_name." +BEGIN + FOR i IN (SELECT obj_name name + FROM &&cs_stgtab_owner..&&cs_stgtab_prefix._stgtab_sqlprof + WHERE signature = :cs_signature + AND obj_name = NVL('&&cs_name.', obj_name) + ORDER BY obj_name) + LOOP + DBMS_SQLTUNE.unpack_stgtab_sqlprof(profile_name => i.name, replace => TRUE, staging_table_name => '&&cs_stgtab_prefix._stgtab_sqlprof', staging_schema_owner => '&&cs_stgtab_owner.'); + END LOOP; +END; +/ +-- +@@cs_internal/cs_sprf_internal_list.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sprf_xfr.sql b/csierra/cs_sprf_xfr.sql new file mode 100644 index 0000000..9dbb728 --- /dev/null +++ b/csierra/cs_sprf_xfr.sql @@ -0,0 +1,179 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sprf_xfr.sql +-- +-- Purpose: Transfers a SQL Profile for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/05/29 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID and PLAN_HASH_VALUE when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sprf_xfr.sql +-- +-- Notes: Accesses AWR data thus you must have an Oracle Diagnostics Pack License. +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sprf_xfr'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_plans_performance.sql +-- +PRO +PRO 2. PLAN_HASH_VALUE (required) +DEF cs_plan_hash_value = "&2."; +UNDEF 2; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id._&&cs_plan_hash_value.' cs_file_name FROM DUAL; +-- +-- get other_xml with hints +VAR cs_other_xml CLOB; +BEGIN + SELECT other_xml INTO :cs_other_xml FROM v$sql_plan WHERE sql_id = '&&cs_sql_id.' AND plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.') AND other_xml IS NOT NULL ORDER BY id FETCH FIRST 1 ROW ONLY; +EXCEPTION + WHEN NO_DATA_FOUND THEN + :cs_other_xml := NULL; +END; +/ +BEGIN + IF :cs_other_xml IS NULL THEN + SELECT other_xml INTO :cs_other_xml FROM dba_hist_sql_plan WHERE sql_id = '&&cs_sql_id.' AND plan_hash_value = TO_NUMBER('&&cs_plan_hash_value.') AND dbid = TO_NUMBER('&&cs_dbid.') AND other_xml IS NOT NULL ORDER BY id FETCH FIRST 1 ROW ONLY; + END IF; +EXCEPTION + WHEN NO_DATA_FOUND THEN + :cs_other_xml := NULL; +END; +/ +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO PLAN_HASH_VAL: &&cs_plan_hash_value. +-- +@@cs_internal/cs_print_sql_text.sql +-- +-- create content of xfr scripts +VAR xfr_1 CLOB; +BEGIN + :xfr_1 := + -- '--'||CHR(10)|| + '-- cs_sprf_xfr_1_&&cs_sql_id..sql'||CHR(10)|| + -- '-- execute on target: one cs_sprf_xfr_1_.sql script, followed by one cs_sprf_xfr_2_.sql script.'||CHR(10)|| + -- '-- this sequence creates a SQL Profile for with .'||CHR(10)|| + -- '-- scripts 1 and 2 can be from two different systems.'||CHR(10)|| + -- '--'||CHR(10)|| + 'VAR sql_id_from_xfr_1_to_xfr_2 VARCHAR2(13);'||CHR(10)|| + 'VAR sql_text_from_xfr_1_to_xfr_2 CLOB;'||CHR(10)|| + '--'||CHR(10)|| + 'BEGIN'||CHR(10)|| + ' :sql_id_from_xfr_1_to_xfr_2 := ''&&cs_sql_id.'';'||CHR(10)|| + ' :sql_text_from_xfr_1_to_xfr_2 := '||CHR(10)|| + q'{ q'[}'||:cs_sql_text||q'{]';}'||CHR(10)|| + 'END;'||CHR(10)|| + '/'; +END; +/ +VAR xfr_2 CLOB; +DECLARE + l_hint VARCHAR2(32767); + l_pos INTEGER; +BEGIN + :xfr_2 := + -- '--'||CHR(10)|| + '-- cs_sprf_xfr_2_&&cs_plan_hash_value..sql'||CHR(10)|| + -- '-- execute on target: one cs_sprf_xfr_1_.sql script, followed by one cs_sprf_xfr_2_.sql script.'||CHR(10)|| + -- '-- this sequence creates a SQL Profile for with .'||CHR(10)|| + -- '-- scripts 1 and 2 can be from two different systems.'||CHR(10)|| + -- '--'||CHR(10)|| + 'DECLARE'||CHR(10)|| + ' profile_attr SYS.SQLPROF_ATTR;'||CHR(10)|| + 'BEGIN'||CHR(10)|| + ' profile_attr := SYS.SQLPROF_ATTR('||CHR(10)|| + q'{ q'[BEGIN_OUTLINE_DATA]',}'||CHR(10); + -- FOR i IN (SELECT /*+ opt_param('parallel_execution_enabled', 'false') */ + -- SUBSTR(EXTRACTVALUE(VALUE(d), '/hint'), 1, 4000) outline_hint + -- FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(:cs_other_xml), '/*/outline_data/hint'))) d) + FOR i IN (SELECT x.outline_hint + FROM XMLTABLE('other_xml/outline_data/hint' PASSING XMLTYPE(:cs_other_xml) COLUMNS outline_hint VARCHAR2(4000) PATH '.') x) + LOOP + l_hint := i.outline_hint; + WHILE l_hint IS NOT NULL + LOOP + IF LENGTH(l_hint) <= 500 THEN + :xfr_2 := :xfr_2||q'{ q'[}'||l_hint||q'{]',}'||CHR(10); + l_hint := NULL; + ELSE + l_pos := INSTR(SUBSTR(l_hint, 1, 500), ' ', -1); + :xfr_2 := :xfr_2||q'{ q'[}'||SUBSTR(l_hint, 1, l_pos)||q'{]',}'||CHR(10); + l_hint := SUBSTR(l_hint, l_pos); + END IF; + END LOOP; + END LOOP; + :xfr_2 := + :xfr_2|| + q'{ q'[END_OUTLINE_DATA]');}'||CHR(10)|| + ' --'||CHR(10)|| + ' DBMS_SQLTUNE.IMPORT_SQL_PROFILE('||CHR(10)|| + ' sql_text => :sql_text_from_xfr_1_to_xfr_2,'||CHR(10)|| + ' profile => profile_attr,'||CHR(10)|| + ' name => ''xfr_''||:sql_id_from_xfr_1_to_xfr_2||''_&&cs_plan_hash_value.'','||CHR(10)|| + ' description => ''cs_sprf_xfr.sql ''||:sql_id_from_xfr_1_to_xfr_2||'' &&cs_plan_hash_value. &&cs_reference_sanitized. &&who_am_i.'','||CHR(10)|| + ' category => ''DEFAULT'','||CHR(10)|| + ' validate => TRUE,'||CHR(10)|| + ' replace => TRUE,'||CHR(10)|| + ' force_match => FALSE'||CHR(10)|| + ' );'||CHR(10)|| + 'END;'||CHR(10)|| + '/'; +END; +/ +-- -- outputs scripts +-- SET HEA OFF PAGES 0; +-- SPO cs_sprf_xfr_1_&&cs_sql_id..sql +-- PRINT :xfr_1 +-- SPO OFF; +-- SPO cs_sprf_xfr_2_&&cs_plan_hash_value..sql +-- PRINT :xfr_2; +-- SPO OFF; +-- SET HEA ON PAGES 100; +-- +-- continues with original spool +SPO &&cs_file_name..txt APP +PRO +SET HEA OFF PAGES 0; +PRINT :xfr_1 +PRINT :xfr_2; +SET HEA ON PAGES 100; +-- +PRO +PRO Scripts cs_sprf_xfr_1_&&cs_sql_id..sql and cs_sprf_xfr_2_&&cs_plan_hash_value..sql were created. +PRO Execute on target system: one cs_sprf_xfr_1_.sql script, followed by one cs_sprf_xfr_2_.sql script. +PRO You can get the first from a SQL X, and the second from a SQL Y (i.e. original and modified versions of "same" SQL). +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_plan_hash_value." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_sql_bind_capture.sql b/csierra/cs_sql_bind_capture.sql new file mode 100644 index 0000000..65ba202 --- /dev/null +++ b/csierra/cs_sql_bind_capture.sql @@ -0,0 +1,92 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sql_bind_capture.sql +-- +-- Purpose: SQL Bind Capture for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sql_bind_capture.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sql_bind_capture'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. SQL_ID: +DEF cs_sql_id = '&3.'; +UNDEF 3; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_sample_time.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL last_captured FOR A19 HEA 'Last Captured'; +COL child_number FOR 999999 HEA 'Child|Number'; +COL position FOR 990 HEA 'Pos'; +COL datatype_string FOR A15 HEA 'Data Type'; +COL name_and_value FOR A200 HEA 'Bind Name and Value'; +COL max_length FOR 999999 HEA 'Max|Length'; +-- +BRE ON last_captured SKIP PAGE ON con_id ON pdb_name ON child_number; + +PRO +PRO SQL BIND CAPTURE (&&cs_tools_schema..iod_sql_bind_capture) +PRO ~~~~~~~~~~~~~~~~ +-- +SELECT TO_CHAR(c.last_captured, '&&cs_datetime_full_format.') AS last_captured, + -- c.child_number, -- it seems there is a single child_number per capture + c.position, + c.datatype_string, + c.max_length, + c.name||' = '||c.value_string AS name_and_value, + x.name AS pdb_name, + c.con_id + FROM &&cs_tools_schema..iod_sql_bind_capture c, + v$containers x + WHERE c.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND &&cs_con_id. IN (1, c.con_id) + AND c.sql_id = '&&cs_sql_id.' + AND x.con_id = c.con_id + ORDER BY + 1, 2, 3 +/ +CL BRE; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sql_bind_capture_one.sql b/csierra/cs_sql_bind_capture_one.sql new file mode 100644 index 0000000..4504771 --- /dev/null +++ b/csierra/cs_sql_bind_capture_one.sql @@ -0,0 +1,94 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sql_bind_capture_one.sql +-- +-- Purpose: SQL Bind Capture for given SQL_ID and Bind name (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID and Bind name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sql_bind_capture_one.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sql_bind_capture_one'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. SQL_ID: +DEF cs_sql_id = '&3.'; +UNDEF 3; +-- +PRO 4. Bind name: (e.g.: :1, :2, :3, :4, ...) +DEF cs_bind_name = '&4.'; +UNDEF 4; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." "&&cs_bind_name." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_sample_time.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO BIND_NAME : &&cs_bind_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL con_id FOR 999 HEA 'Con|ID'; +COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; +COL last_captured FOR A19 HEA 'Last Captured'; +COL datatype_string FOR A15 HEA 'Data Type'; +COL value_string FOR A200 HEA 'Bind Value'; +COL max_length FOR 999999 HEA 'Max|Length'; +-- +PRO +PRO SQL BIND CAPTURE &&cs_bind_name. (&&cs_tools_schema..iod_sql_bind_capture) +PRO ~~~~~~~~~~~~~~~~ +-- +SELECT TO_CHAR(c.last_captured, '&&cs_datetime_full_format.') AS last_captured, + c.datatype_string, + c.max_length, + c.value_string, + x.name AS pdb_name, + c.con_id + FROM &&cs_tools_schema..iod_sql_bind_capture c, + v$containers x + WHERE c.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND &&cs_con_id. IN (1, c.con_id) + AND c.sql_id = '&&cs_sql_id.' + AND c.name = '&&cs_bind_name.' + AND x.con_id = c.con_id + ORDER BY + c.last_captured, + c.value_string +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." "&&cs_bind_name." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sql_bind_capture_one_chart.sql b/csierra/cs_sql_bind_capture_one_chart.sql new file mode 100644 index 0000000..b9499b9 --- /dev/null +++ b/csierra/cs_sql_bind_capture_one_chart.sql @@ -0,0 +1,129 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sql_bind_capture_one_chart.sql +-- +-- Purpose: SQL Bind Capture for given SQL_ID and Bind name (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/11/22 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID and Bind name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sql_bind_capture_one_chart.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sql_bind_capture_one_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. SQL_ID: +DEF cs_sql_id = '&3.'; +UNDEF 3; +-- +PRO 4. Bind name: (e.g.: :1, :2, :3, :4, ...) +DEF cs_bind_name = '&4.'; +UNDEF 4; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +DEF report_title = 'SQL Bind values captured between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = 'SQL_ID &&cs_sql_id. Bind &&cs_bind_name.'; +DEF vaxis_title = ''; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." "&&cs_bind_name."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&cs_bind_name', id:'1', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT c.last_captured AS time, + TO_NUMBER(c.value_string) AS value + FROM &&cs_tools_schema..iod_sql_bind_capture c + WHERE c.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND &&cs_con_id. IN (1, c.con_id) + AND c.sql_id = '&&cs_sql_id.' + AND c.name = '&&cs_bind_name.' + ORDER BY + c.last_captured, + c.value_string +) +/****************************************************************************************/ +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.value)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Line'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sql_latency_histogram.sql b/csierra/cs_sql_latency_histogram.sql new file mode 100644 index 0000000..2163ad8 --- /dev/null +++ b/csierra/cs_sql_latency_histogram.sql @@ -0,0 +1,570 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sql_latency_histogram.sql +-- +-- Purpose: SQL Latency Histogram (elapsed time over executions) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/14 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sql_latency_histogram.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sql_latency_histogram'; +DEF cs_hours_range_default = '168'; +DEF cs_include_sys = 'N'; +DEF cs_include_iod = 'N'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO Filtering SQL to reduce search space. +PRO Ignore this parameter when executed on a non-KIEV database. +PRO *=All, TP=Transaction Processing, RO=Read Only, BG=Background, IG=Ignore, UN=Unknown +PRO +PRO 3. SQL Type: [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +DEF kiev_tx = '&3.'; +UNDEF 3; +COL kiev_tx NEW_V kiev_tx NOPRI; +SELECT UPPER(NVL(TRIM('&&kiev_tx.'), '*')) kiev_tx FROM DUAL +/ +-- +PRO +PRO Filtering SQL to reduce search space. +PRO Enter additional SQL Text filtering, such as Table name or SQL Text piece +PRO +PRO 4. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF sql_text_piece = '&4.'; +UNDEF 4; +-- +PRO +PRO Filtering SQL to reduce search space. +PRO By entering an optional SQL_ID, scope is further reduced +PRO +PRO 5. SQL_ID (optional): +DEF cs_sql_id = '&5.'; +UNDEF 5; +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO SQL_TYPE : "&&kiev_tx." [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +PRO SQL_TEXT : "&&sql_text_piece." +PRO SQL_ID : "&&cs_sql_id." +-- +COL sql_type FOR A4 HEA 'SQL|Type'; +COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL less_than_1s FOR 999,999,990 HEA 'Less than|1 sec'; +COL less_than_2s FOR 999,999,990 HEA 'Less than|2 secs'; +COL less_than_4s FOR 999,999,990 HEA 'Less than|4 secs'; +COL less_than_8s FOR 999,999,990 HEA 'Less than|8 secs'; +COL less_than_16s FOR 999,999,990 HEA 'Less than|16 secs'; +COL less_than_32s FOR 999,999,990 HEA 'Less than|32 secs'; +COL less_than_64s FOR 999,999,990 HEA 'Less than|64 secs'; +COL less_than_128s FOR 999,999,990 HEA 'Less than|128 secs'; +COL less_than_256s FOR 999,999,990 HEA 'Less than|256 secs'; +COL less_than_512s FOR 999,999,990 HEA 'Less than|512 secs'; +COL less_than_1024s FOR 999,999,990 HEA 'Less than|1024 secs'; +COL more_than_1024s FOR 999,999,990 HEA 'More than|1024 secs'; +COL avg_seconds FOR 99,990.000 HEA 'Avg|secs'; +COL pctl_50_secs FOR 99,990.000 HEA 'Pctl 50th|secs'; +COL pctl_95_secs FOR 99,990.000 HEA 'Pctl 95th|secs'; +COL pctl_97_secs FOR 99,990.000 HEA 'Pctl 97th|secs'; +COL pctl_99_secs FOR 99,990.000 HEA 'Pctl 99th|secs'; +COL max_seconds FOR 99,990.000 HEA 'Max|secs'; +COL sql_text FOR A100 HEA 'SQL Text' TRUNC; +COL username FOR A30 HEA 'Username' TRUNC; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +COL sqlid FOR A5 HEA 'SQLHV'; +-- +BREAK ON pdb_name SKIP PAGE DUP; +-- +PRO +PRO SQL Performance Histogram +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION application_category (p_sql_text IN VARCHAR2) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +ash_raw AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id + FROM v$active_session_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.sql_exec_id IS NOT NULL + AND h.sql_exec_start IS NOT NULL + AND h.sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND h.sql_plan_hash_value IS NOT NULL + AND ROWNUM >= 1 + UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id + FROM dba_hist_active_sess_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.sql_exec_id IS NOT NULL + AND h.sql_exec_start IS NOT NULL + AND h.sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND h.sql_plan_hash_value IS NOT NULL + AND ROWNUM >= 1 +), +ash_enum AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + ROW_NUMBER() OVER (PARTITION BY h.con_id, h.session_id, h.session_serial#, h.xid, h.sql_exec_id, h.sql_exec_start, h.sql_id, h.sql_plan_hash_value ORDER BY h.sample_time ASC NULLS LAST) row_num_asc, + ROW_NUMBER() OVER (PARTITION BY h.con_id, h.session_id, h.session_serial#, h.xid, h.sql_exec_id, h.sql_exec_start, h.sql_id, h.sql_plan_hash_value ORDER BY h.sample_time DESC NULLS LAST) row_num_desc + FROM ash_raw h + WHERE ROWNUM >= 1 +), +ash_secs AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + f.con_id, + f.session_id, + f.session_serial#, + f.xid, + f.sql_exec_id, + f.sql_exec_start, + f.sql_id, + f.sql_plan_hash_value, + f.user_id, + NVL((86400 * EXTRACT(DAY FROM (l.sample_time - f.sql_exec_start))) + (3600 * EXTRACT(HOUR FROM (l.sample_time - f.sql_exec_start))) + (60 * EXTRACT(MINUTE FROM (l.sample_time - f.sql_exec_start))) + EXTRACT(SECOND FROM (l.sample_time - f.sql_exec_start)), 0) seconds, + f.sample_time f_sample_time, + l.sample_time l_sample_time + FROM ash_enum f, + ash_enum l + WHERE f.row_num_asc = 1 + AND l.row_num_desc = 1 + AND l.con_id = f.con_id + AND l.session_id = f.session_id + AND l.session_serial# = f.session_serial# + AND NVL(l.xid, UTL_RAW.CAST_TO_RAW('-666')) = NVL(f.xid, UTL_RAW.CAST_TO_RAW('-666')) + AND l.sql_exec_id = f.sql_exec_id + AND l.sql_exec_start = f.sql_exec_start + AND l.sql_id = f.sql_id + AND l.sql_plan_hash_value = f.sql_plan_hash_value + AND l.user_id = f.user_id + AND ROWNUM >= 1 +), +ash_grp AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + SUM(CASE WHEN h.seconds < 1 THEN 1 ELSE 0 END) less_than_1s, + SUM(CASE WHEN h.seconds >= 1 AND h.seconds < 2 THEN 1 ELSE 0 END) less_than_2s, + SUM(CASE WHEN h.seconds >= 2 AND h.seconds < 4 THEN 1 ELSE 0 END) less_than_4s, + SUM(CASE WHEN h.seconds >= 4 AND h.seconds < 8 THEN 1 ELSE 0 END) less_than_8s, + SUM(CASE WHEN h.seconds >= 8 AND h.seconds < 16 THEN 1 ELSE 0 END) less_than_16s, + SUM(CASE WHEN h.seconds >= 16 AND h.seconds < 32 THEN 1 ELSE 0 END) less_than_32s, + SUM(CASE WHEN h.seconds >= 32 AND h.seconds < 64 THEN 1 ELSE 0 END) less_than_64s, + SUM(CASE WHEN h.seconds >= 64 AND h.seconds < 128 THEN 1 ELSE 0 END) less_than_128s, + SUM(CASE WHEN h.seconds >= 128 AND h.seconds < 256 THEN 1 ELSE 0 END) less_than_256s, + SUM(CASE WHEN h.seconds >= 256 AND h.seconds < 512 THEN 1 ELSE 0 END) less_than_512s, + SUM(CASE WHEN h.seconds >= 512 AND h.seconds < 1024 THEN 1 ELSE 0 END) less_than_1024s, + SUM(CASE WHEN h.seconds >= 1024 THEN 1 ELSE 0 END) more_than_1024s, + AVG(h.seconds) avg_seconds, + PERCENTILE_DISC(0.50) WITHIN GROUP (ORDER BY h.seconds) pctl_50_secs, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY h.seconds) pctl_95_secs, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY h.seconds) pctl_97_secs, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY h.seconds) pctl_99_secs, + MAX(h.seconds) max_seconds + FROM ash_secs h + WHERE ROWNUM >= 1 + GROUP BY + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id +), +vsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.con_id, + s.sql_id, + application_category(s.sql_text) sql_type, + s.sql_text, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(REPLACE(CASE WHEN s.sql_fulltext LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(s.sql_fulltext, '\[([[:digit:]]{4})\] ') ELSE s.sql_fulltext END,s.parsing_schema_name)),100000),5,'0') AS sqlid + get_sql_hv(s.sql_fulltext) AS sqlid + FROM v$sql s + WHERE sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR s.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37)) -- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37) THEN 1 ELSE 0 END = 1 + AND ROWNUM >= 1 + GROUP BY + s.con_id, + s.sql_id, + application_category(s.sql_text), + s.sql_text, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(REPLACE(CASE WHEN s.sql_fulltext LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(s.sql_fulltext, '\[([[:digit:]]{4})\] ') ELSE s.sql_fulltext END,s.parsing_schema_name)),100000),5,'0') + get_sql_hv(s.sql_fulltext) +), +hsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sql_id, + application_category(DBMS_LOB.substr(h.sql_text, 1000)) sql_type, + DBMS_LOB.substr(h.sql_text, 1000) sql_text, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN h.sql_text LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(h.sql_text, '\[([[:digit:]]{4})\] ') ELSE h.sql_text END),100000),5,'0') AS sqlid + get_sql_hv(h.sql_text) AS sqlid + FROM dba_hist_sqltext h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(h.sql_text, 1000)) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.substr(h.sql_text, 1000))||CHR(37)) -- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.SUBSTR(h.sql_text, 1000))||CHR(37) THEN 1 ELSE 0 END = 1 + AND ROWNUM >= 1 +) +SELECT NVL(s.sql_type, hs.sql_type) AS sql_type, + h.sql_id, + NVL(s.sqlid, hs.sqlid) AS sqlid, + h.sql_plan_hash_value, + h.less_than_1s, + h.less_than_2s, + h.less_than_4s, + h.less_than_8s, + h.less_than_16s, + h.less_than_32s, + h.less_than_64s, + h.less_than_128s, + h.less_than_256s, + h.less_than_512s, + h.less_than_1024s, + h.more_than_1024s, + h.avg_seconds, + h.pctl_50_secs, + h.pctl_95_secs, + h.pctl_97_secs, + h.pctl_99_secs, + h.max_seconds, + NVL(s.sql_text, hs.sql_text) sql_text, + u.username, + c.name pdb_name + FROM ash_grp h, + vsql s, + hsql hs, + v$containers c, + cdb_users u + WHERE s.con_id(+) = h.con_id + AND s.sql_id(+) = h.sql_id + AND hs.con_id(+) = h.con_id + AND hs.sql_id(+) = h.sql_id + AND NVL(s.sql_type, hs.sql_type) IS NOT NULL + AND c.con_id = h.con_id + AND c.open_mode = 'READ WRITE' + AND u.con_id = h.con_id + AND u.user_id = h.user_id + AND ('&&cs_include_sys.' = 'Y' OR ('&&cs_include_sys.' = 'N' AND u.username <> 'SYS')) + AND ('&&cs_include_iod.' = 'Y' OR ('&&cs_include_iod.' = 'N' AND u.username <> '&&cs_tools_schema.')) + ORDER BY + c.name, + u.username, + CASE s.sql_type WHEN 'TP' THEN 1 WHEN 'RO' THEN 2 WHEN 'BG' THEN 3 WHEN 'UN' THEN 4 WHEN 'IG' THEN 5 ELSE 9 END, + h.sql_id, + h.sql_plan_hash_value +/ +-- +CLEAR BREAK; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sql_perf_concurrency.sql b/csierra/cs_sql_perf_concurrency.sql new file mode 100644 index 0000000..768546a --- /dev/null +++ b/csierra/cs_sql_perf_concurrency.sql @@ -0,0 +1,484 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sql_perf_concurrency.sql +-- +-- Purpose: Concurrency Histogram of SQL with more than N Concurrent Sessions +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/11/30 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sql_perf_concurrency.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sql_perf_concurrency'; +DEF cs_hours_range_default = '168'; +DEF cs_include_sys = 'N'; +DEF cs_include_iod = 'N'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO Filtering SQL to reduce search space. +PRO Ignore this parameter when executed on a non-KIEV database. +PRO *=All, TP=Transaction Processing, RO=Read Only, BG=Background, IG=Ignore, UN=Unknown +PRO +PRO 3. SQL Type: [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +DEF kiev_tx = '&3.'; +UNDEF 3; +COL kiev_tx NEW_V kiev_tx NOPRI; +SELECT UPPER(NVL(TRIM('&&kiev_tx.'), '*')) kiev_tx FROM DUAL +/ +-- +PRO +PRO Filtering SQL to reduce search space. +PRO Enter additional SQL Text filtering, such as Table name or SQL Text piece +PRO +PRO 4. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF sql_text_piece = '&4.'; +UNDEF 4; +-- +PRO +PRO Filtering SQL to reduce search space. +PRO By entering an optional SQL_ID, scope is further reduced +PRO +PRO 5. SQL_ID (optional): +DEF cs_sql_id = '&5.'; +UNDEF 5; +/ +PRO +PRO 6. Concurrency greater than or equal (GTE) : [{2}|2-36] +DEF concurrency_gte = '&6.'; +UNDEF 6; +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." "&&concurrency_gte." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO SQL_TYPE : "&&kiev_tx." [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +PRO SQL_TEXT : "&&sql_text_piece." +PRO SQL_ID : "&&cs_sql_id." +PRO CONCURRENCY : "&&concurrency_gte." [{2}|2-36] +-- +COL concurrency FOR 999,990 HEA 'Concurrent|Sessions'; +COL samples FOR 999,990 HEA 'Samples'; +COL f_sample_time FOR A19 HEA 'First Sample Time'; +COL l_sample_time FOR A19 HEA 'Last Sample Time'; +COL sql_type FOR A4 HEA 'SQL|Type'; +COL sql_plan_hash_value HEA 'Plan|Hash Value'; +COL sql_text FOR A100 HEA 'SQL Text' TRUNC; +COL username FOR A30 HEA 'Username' TRUNC; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +-- +BREAK ON sql_id SKIP PAGE DUP; +-- +PRO +PRO SQL Concurrency (>= "&&concurrency_gte." [{2}|2-36]) +PRO ~~~~~~~~~~~~~~~ +WITH +FUNCTION application_category (p_sql_text IN VARCHAR2) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +ash_raw AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id + FROM v$active_session_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.sql_exec_id IS NOT NULL + AND h.sql_exec_start IS NOT NULL + AND h.sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND h.sql_plan_hash_value IS NOT NULL + UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id + FROM dba_hist_active_sess_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.sql_exec_id IS NOT NULL + AND h.sql_exec_start IS NOT NULL + AND h.sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND h.sql_plan_hash_value IS NOT NULL +), +ash_enum AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + COUNT(*) concurrency, + CAST(h.sample_time AS DATE) sample_time, + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id + FROM ash_raw h + GROUP BY + CAST(h.sample_time AS DATE), + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id +HAVING COUNT(*) >= NVL(TO_NUMBER('&&concurrency_gte.'), 2) +), +ash_conc AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + MIN(h.sample_time) min_sample_time, + MAX(h.sample_time) max_sample_time, + COUNT(*) samples, + h.concurrency, + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id + FROM ash_enum h + GROUP BY + h.concurrency, + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id +), +vsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.con_id, + s.sql_id, + application_category(s.sql_text) sql_type, + s.sql_text + FROM v$sql s + WHERE sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR s.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37))-- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37) THEN 1 ELSE 0 END = 1 + GROUP BY + s.con_id, + s.sql_id, + application_category(s.sql_text), + s.sql_text +), +hsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sql_id, + application_category(DBMS_LOB.substr(h.sql_text, 1000)) sql_type, + DBMS_LOB.substr(h.sql_text, 1000) sql_text + FROM dba_hist_sqltext h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(h.sql_text, 1000)) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.substr(h.sql_text, 1000))||CHR(37)) -- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.SUBSTR(h.sql_text, 1000))||CHR(37) THEN 1 ELSE 0 END = 1 +) +SELECT NVL(s.sql_type, hs.sql_type) sql_type, + h.sql_id, + h.concurrency, + TO_CHAR(h.min_sample_time, '&&cs_datetime_full_format.') f_sample_time, + TO_CHAR(h.max_sample_time, '&&cs_datetime_full_format.') l_sample_time, + h.samples, + h.sql_plan_hash_value, + NVL(s.sql_text, hs.sql_text) sql_text, + u.username, + c.name pdb_name + FROM ash_conc h, + vsql s, + hsql hs, + v$containers c, + cdb_users u + WHERE s.con_id(+) = h.con_id + AND s.sql_id(+) = h.sql_id + AND hs.con_id(+) = h.con_id + AND hs.sql_id(+) = h.sql_id + AND NVL(s.sql_type, hs.sql_type) IS NOT NULL + AND c.con_id = h.con_id + AND c.open_mode = 'READ WRITE' + AND u.con_id = h.con_id + AND u.user_id = h.user_id + AND ('&&cs_include_sys.' = 'Y' OR ('&&cs_include_sys.' = 'N' AND u.username <> 'SYS')) + AND ('&&cs_include_iod.' = 'Y' OR ('&&cs_include_iod.' = 'N' AND u.username <> '&&cs_tools_schema.')) + ORDER BY + NVL(s.sql_type, hs.sql_type), + h.sql_id, + h.concurrency DESC, + h.min_sample_time, + h.sql_plan_hash_value +/ +-- +CLEAR BREAK; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." "&&concurrency_gte." +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sql_perf_high_aas.sql b/csierra/cs_sql_perf_high_aas.sql new file mode 100644 index 0000000..f3596f2 --- /dev/null +++ b/csierra/cs_sql_perf_high_aas.sql @@ -0,0 +1,576 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sql_perf_high_aas.sql +-- +-- Purpose: SQL with AAS per hour for a given Timed Event higher than N (time series text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/11/30 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sql_perf_high_aas.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sql_perf_high_aas'; +DEF cs_hours_range_default = '168'; +DEF cs_include_sys = 'N'; +DEF cs_include_iod = 'N'; +--DEF cs_time_group_by = 'DD'; +--DEF cs_time_format = 'YYYY-MM-DD'; +--DEF cs_secs_on_group = '86400'; +DEF cs_time_group_by = 'HH24'; +DEF cs_time_format = 'YYYY-MM-DD"T"HH24'; +DEF cs_secs_on_group = '3600'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO 3. Average Active Sessions Timed Event: +PRO [{total}|on_cpu,user_io,system_io,cluster,commit,concurrency,application,administrative,configuration,network,queueing,scheduler,other] +DEF wait_class = '&3.'; +UNDEF 3; +COL wait_class NEW_V wait_class NOPRI; +SELECT LOWER(NVL(TRIM('&&wait_class.'), 'total')) wait_class FROM DUAL +/ +PRO +PRO 4. More than Average Active Sessions (AAS) per &&cs_time_group_by.: [{1}|1-36] +DEF more_than_aas = '&4.'; +UNDEF 4; +COL more_than_aas NEW_V more_than_aas NOPRI; +SELECT NVL(TRIM('&&more_than_aas.'), '1') more_than_aas FROM DUAL +/ +PRO +PRO Filtering SQL to reduce search space. +PRO Ignore this parameter when executed on a non-KIEV database. +PRO *=All, TP=Transaction Processing, RO=Read Only, BG=Background, IG=Ignore, UN=Unknown +PRO +PRO 5. SQL Type: [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +DEF kiev_tx = '&5.'; +UNDEF 5; +COL kiev_tx NEW_V kiev_tx NOPRI; +SELECT UPPER(NVL(TRIM('&&kiev_tx.'), '*')) kiev_tx FROM DUAL +/ +-- +PRO +PRO Filtering SQL to reduce search space. +PRO Enter additional SQL Text filtering, such as Table name or SQL Text piece +PRO +PRO 6. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF sql_text_piece = '&6.'; +UNDEF 6; +-- +PRO +PRO Filtering SQL to reduce search space. +PRO By entering an optional SQL_ID, scope is further reduced +PRO +PRO 7. SQL_ID (optional): +DEF cs_sql_id = '&7.'; +UNDEF 7; +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "wait_class" "&&more_than_aas." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO WAIT_CLASS : "&&wait_class." [{on_cpu}|total,user_io,system_io,cluster,commit,concurrency,application,administrative,configuration,network,queueing,scheduler,other] +PRO MORE_THAN_AAS: "&&more_than_aas." [{1}|1-36] +PRO SQL_TYPE : "&&kiev_tx." [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +PRO SQL_TEXT : "&&sql_text_piece." +PRO SQL_ID : "&&cs_sql_id." +-- +COL total FOR 9,990.0 HEA 'Total'; +COL on_cpu FOR 9,990.0 HEA 'ON CPU'; +COL usr_io FOR 9,990.0 HEA 'Usr IO'; +COL sys_io FOR 9,990.0 HEA 'Sys IO'; +COL clustr FOR 9,990.0 HEA 'Clustr'; +COL comit FOR 9,990.0 HEA 'Commit'; +COL concur FOR 9,990.0 HEA 'Concur'; +COL appl FOR 9,990.0 HEA 'Appl'; +COL admin FOR 9,990.0 HEA 'Admin'; +COL config FOR 9,990.0 HEA 'Config'; +COL netwrk FOR 9,990.0 HEA 'Netwrk'; +COL queue FOR 9,990.0 HEA 'Queue'; +COL sched FOR 9,990.0 HEA 'Sched'; +COL other FOR 9,990.0 HEA 'Other'; +-- +COL time FOR A13 HEA 'Time'; +COL sql_type FOR A4 HEA 'Type'; +COL sql_decoration_or_text FOR A100 HEA 'SQL Decoration or Text' TRUNC; +COL username FOR A30 HEA 'Username' TRUNC; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +-- +BREAK ON pdb_name SKIP PAGE DUP; +-- +PRO +PRO SQL with high Average Active Sessions (more than "&&more_than_aas." AAS per per &&cs_time_group_by. on Timed Event "&&wait_class.") +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION application_category (p_sql_text IN VARCHAR2) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +-- +FUNCTION get_kiev_token ( + p_sqltext IN VARCHAR2, + p_token_type IN VARCHAR2 DEFAULT 'o' -- [{o}|t|i] operation(o), table(t) or index(i) +) +RETURN VARCHAR2 DETERMINISTIC +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 + l_operation VARCHAR2(1000); + l_table VARCHAR2(1000); + l_index VARCHAR2(1000); + l_sql_type VARCHAR2(2) := application_category(l_sqltext, 'UNKNOWN'); +BEGIN + IF l_sql_type IN ('SYS', 'IG', 'UN') THEN + RETURN 'UN'; + END IF; + -- + IF l_sqltext LIKE '%/* % */%' THEN + l_operation := NVL(TRIM(SUBSTR(l_sqltext, 3, LEAST(INSTR(l_sqltext||'(', '('), INSTR(l_sqltext||'*/', '*/')) - 3)), 'null'); + IF l_sqltext LIKE '%/* %(%) %*/%' THEN + l_table := NVL(SUBSTR(l_sqltext, INSTR(l_sqltext, '(') + 1, LEAST(INSTR(l_sqltext||',', ','), INSTR(l_sqltext||')', ')')) - INSTR(l_sqltext, '(') - 1), 'null'); + IF l_sqltext LIKE '%/* %(%,%) %*/%' THEN + l_index := NVL(SUBSTR(l_sqltext, INSTR(l_sqltext, ',') + 1, LEAST(INSTR(l_sqltext||')', ')', INSTR(l_sqltext, ',')), INSTR(l_sqltext||'(', '(', INSTR(l_sqltext, ','))) - INSTR(l_sqltext, ',') - 1), 'null'); + IF l_index = 'HashRangeIndex' THEN l_index := l_table||'_PK'; END IF; + ELSE + l_index := 'null'; + END IF; + ELSE + l_table := 'null'; + l_index := 'null'; + END IF; + ELSE + l_operation := 'null'; + l_table := 'null'; + l_index := 'null'; + END IF; + -- + IF p_token_type = 'o' THEN RETURN l_operation; END IF; + IF p_token_type = 't' THEN RETURN l_table; END IF; + IF p_token_type = 'i' THEN RETURN l_index; END IF; + RETURN 'null'; +END get_kiev_token; +-- +FUNCTION sql_decoration (p_sql_text IN VARCHAR2) +RETURN VARCHAR2 +IS +BEGIN + RETURN get_kiev_token(p_sql_text, 'o'); + -- IF p_sql_text LIKE '/*'||CHR(37) AND application_category(p_sql_text) <> 'UN' THEN + -- RETURN SUBSTR(p_sql_text, 1, INSTR(p_sql_text, '*/') + 1); + -- ELSE + -- RETURN NULL; + -- END IF; +END sql_decoration; +/****************************************************************************************/ +ash_raw AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + h.session_state, + h.wait_class + FROM dba_hist_active_sess_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') +), +ash_per_hour AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + TRUNC(CAST(h.sample_time AS DATE), '&&cs_time_group_by.') sample_hour, + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + COUNT(*) * 10 / &&cs_secs_on_group. aas_total, + SUM(CASE h.session_state WHEN 'ON CPU' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_on_cpu, + SUM(CASE h.wait_class WHEN 'User I/O' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_user_io, + SUM(CASE h.wait_class WHEN 'System I/O' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_system_io, + SUM(CASE h.wait_class WHEN 'Cluster' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_cluster, + SUM(CASE h.wait_class WHEN 'Commit' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_commit, + SUM(CASE h.wait_class WHEN 'Concurrency' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_concurrency, + SUM(CASE h.wait_class WHEN 'Application' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_application, + SUM(CASE h.wait_class WHEN 'Administrative' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_administrative, + SUM(CASE h.wait_class WHEN 'Configuration' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_configuration, + SUM(CASE h.wait_class WHEN 'Network' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_network, + SUM(CASE h.wait_class WHEN 'Queueing' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_queueing, + SUM(CASE h.wait_class WHEN 'Scheduler' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_scheduler, + SUM(CASE h.wait_class WHEN 'Other' THEN 10 / &&cs_secs_on_group. ELSE 0 END) aas_other + FROM ash_raw h + GROUP BY + TRUNC(CAST(h.sample_time AS DATE), '&&cs_time_group_by.'), + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id +), +vsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.con_id, + s.sql_id, + application_category(s.sql_text) sql_type, + sql_decoration(s.sql_text) sql_decoration, + s.sql_text + FROM v$sql s + WHERE sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR s.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37))-- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37) THEN 1 ELSE 0 END = 1 + GROUP BY + s.con_id, + s.sql_id, + application_category(s.sql_text), + sql_decoration(s.sql_text), + s.sql_text +), +hsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sql_id, + application_category(DBMS_LOB.substr(h.sql_text, 1000)) sql_type, + sql_decoration(DBMS_LOB.substr(h.sql_text, 1000)) sql_decoration, + DBMS_LOB.substr(h.sql_text, 1000) sql_text + FROM dba_hist_sqltext h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(h.sql_text, 1000)) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.substr(h.sql_text, 1000))||CHR(37)) -- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.SUBSTR(h.sql_text, 1000))||CHR(37) THEN 1 ELSE 0 END = 1 +), +ash_per_hour_extended AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_hour, + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + h.aas_total, + h.aas_on_cpu, + h.aas_user_io, + h.aas_system_io, + h.aas_cluster, + h.aas_commit, + h.aas_concurrency, + h.aas_application, + h.aas_administrative, + h.aas_configuration, + h.aas_network, + h.aas_queueing, + h.aas_scheduler, + h.aas_other, + COALESCE(s.sql_type, hs.sql_type) sql_type, + COALESCE(s.sql_decoration, hs.sql_decoration) sql_decoration, + COALESCE(s.sql_text, hs.sql_text) sql_text, + u.username, + c.name pdb_name + FROM ash_per_hour h, + vsql s, + hsql hs, + v$containers c, + cdb_users u + WHERE s.con_id(+) = h.con_id + AND s.sql_id(+) = h.sql_id + AND hs.con_id(+) = h.con_id + AND hs.sql_id(+) = h.sql_id + AND COALESCE(s.sql_type, hs.sql_type) IS NOT NULL + AND c.con_id = h.con_id + AND c.open_mode = 'READ WRITE' + AND u.con_id = h.con_id + AND u.user_id = h.user_id + AND ('&&cs_include_sys.' = 'Y' OR ('&&cs_include_sys.' = 'N' AND u.username <> 'SYS')) + AND ('&&cs_include_iod.' = 'Y' OR ('&&cs_include_iod.' = 'N' AND u.username <> '&&cs_tools_schema.')) +) +SELECT sql_type, + COALESCE(sql_decoration, sql_id||' '||sql_plan_hash_value||' '||sql_text) sql_decoration_or_text, + TO_CHAR(sample_hour, '&&cs_time_format.') time, + SUM(aas_total) total, + SUM(aas_on_cpu) on_cpu, + SUM(aas_user_io) usr_io, + SUM(aas_system_io) sys_io, + SUM(aas_cluster) clustr, + SUM(aas_commit) comit, + SUM(aas_concurrency) concur, + SUM(aas_application) appl, + SUM(aas_administrative) admin, + SUM(aas_configuration) config, + SUM(aas_network) netwrk, + SUM(aas_queueing) queue, + SUM(aas_scheduler) sched, + SUM(aas_other) other, + pdb_name + FROM ash_per_hour_extended + GROUP BY + sample_hour, + sql_type, + COALESCE(sql_decoration, sql_id||' '||sql_plan_hash_value||' '||sql_text), + pdb_name +HAVING SUM(aas_&&wait_class.) > TO_NUMBER('&&more_than_aas.') + ORDER BY + sql_type, + COALESCE(sql_decoration, sql_id||' '||sql_plan_hash_value||' '||sql_text), + sample_hour, + pdb_name, + SUM(aas_total) DESC +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "wait_class" "&&more_than_aas." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sql_perf_histogram.sql b/csierra/cs_sql_perf_histogram.sql new file mode 100644 index 0000000..af2f8a7 --- /dev/null +++ b/csierra/cs_sql_perf_histogram.sql @@ -0,0 +1,546 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sql_latency_histogram.sql +-- +-- Purpose: SQL Latency Histogram +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/11/30 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sql_latency_histogram.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sql_latency_histogram'; +DEF cs_hours_range_default = '168'; +DEF cs_include_sys = 'N'; +DEF cs_include_iod = 'N'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO Filtering SQL to reduce search space. +PRO Ignore this parameter when executed on a non-KIEV database. +PRO *=All, TP=Transaction Processing, RO=Read Only, BG=Background, IG=Ignore, UN=Unknown +PRO +PRO 3. SQL Type: [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +DEF kiev_tx = '&3.'; +UNDEF 3; +COL kiev_tx NEW_V kiev_tx NOPRI; +SELECT UPPER(NVL(TRIM('&&kiev_tx.'), '*')) kiev_tx FROM DUAL +/ +-- +PRO +PRO Filtering SQL to reduce search space. +PRO Enter additional SQL Text filtering, such as Table name or SQL Text piece +PRO +PRO 4. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF sql_text_piece = '&4.'; +UNDEF 4; +-- +PRO +PRO Filtering SQL to reduce search space. +PRO By entering an optional SQL_ID, scope is further reduced +PRO +PRO 5. SQL_ID (optional): +DEF cs_sql_id = '&5.'; +UNDEF 5; +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO SQL_TYPE : "&&kiev_tx." [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +PRO SQL_TEXT : "&&sql_text_piece." +PRO SQL_ID : "&&cs_sql_id." +-- +COL sql_type FOR A4 HEA 'SQL|Type'; +COL sql_plan_hash_value HEA 'Plan|Hash Value'; +COL less_than_1s FOR 999,999,990 HEA 'Less than|1 sec'; +COL less_than_2s FOR 999,999,990 HEA 'Less than|2 secs'; +COL less_than_4s FOR 999,999,990 HEA 'Less than|4 secs'; +COL less_than_8s FOR 999,999,990 HEA 'Less than|8 secs'; +COL less_than_16s FOR 999,999,990 HEA 'Less than|16 secs'; +COL less_than_32s FOR 999,999,990 HEA 'Less than|32 secs'; +COL less_than_64s FOR 999,999,990 HEA 'Less than|64 secs'; +COL less_than_128s FOR 999,999,990 HEA 'Less than|128 secs'; +COL less_than_256s FOR 999,999,990 HEA 'Less than|256 secs'; +COL less_than_512s FOR 999,999,990 HEA 'Less than|512 secs'; +COL less_than_1024s FOR 999,999,990 HEA 'Less than|1024 secs'; +COL more_than_1024s FOR 999,999,990 HEA 'More than|1024 secs'; +COL avg_seconds FOR 99,990.000 HEA 'Avg|secs'; +COL pctl_50_secs FOR 99,990.000 HEA 'Pctl 50th|secs'; +COL pctl_95_secs FOR 99,990.000 HEA 'Pctl 95th|secs'; +COL pctl_97_secs FOR 99,990.000 HEA 'Pctl 97th|secs'; +COL pctl_99_secs FOR 99,990.000 HEA 'Pctl 99th|secs'; +COL max_seconds FOR 99,990.000 HEA 'Max|secs'; +COL sql_text FOR A100 HEA 'SQL Text' TRUNC; +COL username FOR A30 HEA 'Username' TRUNC; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +-- +BREAK ON pdb_name SKIP PAGE DUP; +-- +PRO +PRO SQL Performance Histogram +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +FUNCTION application_category (p_sql_text IN VARCHAR2) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +ash_raw AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id + FROM v$active_session_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.sql_exec_id IS NOT NULL + AND h.sql_exec_start IS NOT NULL + AND h.sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND h.sql_plan_hash_value IS NOT NULL + UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id + FROM dba_hist_active_sess_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.sql_exec_id IS NOT NULL + AND h.sql_exec_start IS NOT NULL + AND h.sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND h.sql_plan_hash_value IS NOT NULL +), +ash_enum AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + ROW_NUMBER() OVER (PARTITION BY h.con_id, h.session_id, h.session_serial#, h.xid, h.sql_exec_id, h.sql_exec_start, h.sql_id, h.sql_plan_hash_value ORDER BY h.sample_time ASC NULLS LAST) row_num_asc, + ROW_NUMBER() OVER (PARTITION BY h.con_id, h.session_id, h.session_serial#, h.xid, h.sql_exec_id, h.sql_exec_start, h.sql_id, h.sql_plan_hash_value ORDER BY h.sample_time DESC NULLS LAST) row_num_desc + FROM ash_raw h +), +ash_secs AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + f.con_id, + f.session_id, + f.session_serial#, + f.xid, + f.sql_exec_id, + f.sql_exec_start, + f.sql_id, + f.sql_plan_hash_value, + f.user_id, + NVL((86400 * EXTRACT(DAY FROM (l.sample_time - f.sql_exec_start))) + (3600 * EXTRACT(HOUR FROM (l.sample_time - f.sql_exec_start))) + (60 * EXTRACT(MINUTE FROM (l.sample_time - f.sql_exec_start))) + EXTRACT(SECOND FROM (l.sample_time - f.sql_exec_start)), 0) seconds, + f.sample_time f_sample_time, + l.sample_time l_sample_time + FROM ash_enum f, + ash_enum l + WHERE f.row_num_asc = 1 + AND l.row_num_desc = 1 + AND l.con_id = f.con_id + AND l.session_id = f.session_id + AND l.session_serial# = f.session_serial# + AND NVL(l.xid, UTL_RAW.CAST_TO_RAW('-666')) = NVL(f.xid, UTL_RAW.CAST_TO_RAW('-666')) + AND l.sql_exec_id = f.sql_exec_id + AND l.sql_exec_start = f.sql_exec_start + AND l.sql_id = f.sql_id + AND l.sql_plan_hash_value = f.sql_plan_hash_value + AND l.user_id = f.user_id +), +ash_grp AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + SUM(CASE WHEN h.seconds < 1 THEN 1 ELSE 0 END) less_than_1s, + SUM(CASE WHEN h.seconds >= 1 AND h.seconds < 2 THEN 1 ELSE 0 END) less_than_2s, + SUM(CASE WHEN h.seconds >= 2 AND h.seconds < 4 THEN 1 ELSE 0 END) less_than_4s, + SUM(CASE WHEN h.seconds >= 4 AND h.seconds < 8 THEN 1 ELSE 0 END) less_than_8s, + SUM(CASE WHEN h.seconds >= 8 AND h.seconds < 16 THEN 1 ELSE 0 END) less_than_16s, + SUM(CASE WHEN h.seconds >= 16 AND h.seconds < 32 THEN 1 ELSE 0 END) less_than_32s, + SUM(CASE WHEN h.seconds >= 32 AND h.seconds < 64 THEN 1 ELSE 0 END) less_than_64s, + SUM(CASE WHEN h.seconds >= 64 AND h.seconds < 128 THEN 1 ELSE 0 END) less_than_128s, + SUM(CASE WHEN h.seconds >= 128 AND h.seconds < 256 THEN 1 ELSE 0 END) less_than_256s, + SUM(CASE WHEN h.seconds >= 256 AND h.seconds < 512 THEN 1 ELSE 0 END) less_than_512s, + SUM(CASE WHEN h.seconds >= 512 AND h.seconds < 1024 THEN 1 ELSE 0 END) less_than_1024s, + SUM(CASE WHEN h.seconds >= 1024 THEN 1 ELSE 0 END) more_than_1024s, + AVG(h.seconds) avg_seconds, + PERCENTILE_DISC(0.50) WITHIN GROUP (ORDER BY h.seconds) pctl_50_secs, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY h.seconds) pctl_95_secs, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY h.seconds) pctl_97_secs, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY h.seconds) pctl_99_secs, + MAX(h.seconds) max_seconds + FROM ash_secs h + GROUP BY + h.con_id, + h.sql_id, + h.sql_plan_hash_value, + h.user_id +), +vsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.con_id, + s.sql_id, + application_category(s.sql_text) sql_type, + s.sql_text + FROM v$sql s + WHERE sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR s.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37)) -- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37) THEN 1 ELSE 0 END = 1 + GROUP BY + s.con_id, + s.sql_id, + application_category(s.sql_text), + s.sql_text +), +hsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sql_id, + application_category(DBMS_LOB.substr(h.sql_text, 1000)) sql_type, + DBMS_LOB.substr(h.sql_text, 1000) sql_text + FROM dba_hist_sqltext h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(h.sql_text, 1000)) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.substr(h.sql_text, 1000))||CHR(37)) -- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.SUBSTR(h.sql_text, 1000))||CHR(37) THEN 1 ELSE 0 END = 1 +) +SELECT NVL(s.sql_type, hs.sql_type) sql_type, + h.sql_id, + h.sql_plan_hash_value, + h.less_than_1s, + h.less_than_2s, + h.less_than_4s, + h.less_than_8s, + h.less_than_16s, + h.less_than_32s, + h.less_than_64s, + h.less_than_128s, + h.less_than_256s, + h.less_than_512s, + h.less_than_1024s, + h.more_than_1024s, + h.avg_seconds, + h.pctl_50_secs, + h.pctl_95_secs, + h.pctl_97_secs, + h.pctl_99_secs, + h.max_seconds, + NVL(s.sql_text, hs.sql_text) sql_text, + u.username, + c.name pdb_name + FROM ash_grp h, + vsql s, + hsql hs, + v$containers c, + cdb_users u + WHERE s.con_id(+) = h.con_id + AND s.sql_id(+) = h.sql_id + AND hs.con_id(+) = h.con_id + AND hs.sql_id(+) = h.sql_id + AND NVL(s.sql_type, hs.sql_type) IS NOT NULL + AND c.con_id = h.con_id + AND c.open_mode = 'READ WRITE' + AND u.con_id = h.con_id + AND u.user_id = h.user_id + AND ('&&cs_include_sys.' = 'Y' OR ('&&cs_include_sys.' = 'N' AND u.username <> 'SYS')) + AND ('&&cs_include_iod.' = 'Y' OR ('&&cs_include_iod.' = 'N' AND u.username <> '&&cs_tools_schema.')) + ORDER BY + c.name, + u.username, + CASE s.sql_type WHEN 'TP' THEN 1 WHEN 'RO' THEN 2 WHEN 'BG' THEN 3 WHEN 'UN' THEN 4 WHEN 'IG' THEN 5 ELSE 9 END, + h.sql_id, + h.sql_plan_hash_value +/ +-- +CLEAR BREAK; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sql_perf_long_executions.sql b/csierra/cs_sql_perf_long_executions.sql new file mode 100644 index 0000000..2cc7121 --- /dev/null +++ b/csierra/cs_sql_perf_long_executions.sql @@ -0,0 +1,600 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sql_perf_long_executions.sql +-- +-- Purpose: SQL Executions longer than N seconds +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/02/14 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sql_perf_long_executions.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sql_perf_long_executions'; +DEF cs_hours_range_default = '168'; +DEF cs_include_sys = 'Y'; +DEF cs_include_iod = 'Y'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO Filtering SQL to reduce search space. +PRO Ignore this parameter when executed on a non-KIEV database. +PRO *=All, TP=Transaction Processing, RO=Read Only, BG=Background, IG=Ignore, UN=Unknown +PRO +PRO 3. SQL Type: [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +DEF kiev_tx = '&3.'; +UNDEF 3; +COL kiev_tx NEW_V kiev_tx NOPRI; +SELECT UPPER(NVL(TRIM('&&kiev_tx.'), '*')) kiev_tx FROM DUAL +/ +-- +PRO +PRO Filtering SQL to reduce search space. +PRO Enter additional SQL Text filtering, such as Table name or SQL Text piece +PRO +PRO 4. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF sql_text_piece = '&4.'; +UNDEF 4; +-- +PRO +PRO Filtering SQL to reduce search space. +PRO By entering an optional SQL_ID, scope is further reduced +PRO +PRO 5. SQL_ID (optional): +DEF cs_sql_id = '&5.'; +UNDEF 5; +/ +PRO +PRO 6. MORE_THAN_SECS : [{0}|0-3600] +DEF more_than_secs = '&6.'; +UNDEF 6; +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." "&&more_than_secs." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO SQL_TYPE : "&&kiev_tx." [{*}|TP|RO|BG|IG|UN|TP,RO|TP,RO,BG] +PRO SQL_TEXT : "&&sql_text_piece." +PRO SQL_ID : "&&cs_sql_id." +PRO MORE_THAN_SEC: "&&more_than_secs." [{0}|0-3600] +-- +COL on_cpu FOR A6 HEA 'ON CPU'; +COL usr_io FOR A6 HEA 'User|I/O'; +COL sys_io FOR A6 HEA 'System|I/O'; +COL clustr FOR A6 HEA 'Clustr'; +COL comit FOR A6 HEA 'Commit'; +COL concur FOR A6 HEA 'Concur'; +COL appl FOR A6 HEA 'Appl'; +COL admin FOR A6 HEA 'Admin'; +COL config FOR A6 HEA 'Config'; +COL netwrk FOR A6 HEA 'Netwrk'; +COL queue FOR A6 HEA 'Queue'; +COL sched FOR A6 HEA 'Rsrc|Mgr'; +COL other FOR A6 HEA 'Other'; +COL machine FOR A64 HEA 'Machine'; +-- +COL sql_exec_id FOR 999999999 HEA 'Execution ID'; +COL sql_exec_start FOR A19 HEA 'SQL Execution Start'; +COL f_sample_time FOR A26 HEA 'First Sample Time'; +COL l_sample_time FOR A26 HEA 'Last Sample Time'; +COL seconds FOR 999,990.000 HEA 'Seconds'; +COL sid_serial FOR A13 HEA ' SID,SERIAL#'; +COL xid FOR A16 HEA 'Transaction ID'; +COL sql_type FOR A4 HEA 'SQL|Type'; +COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL sql_text FOR A100 HEA 'SQL Text' TRUNC; +COL username FOR A30 HEA 'Username' TRUNC; +COL pdb_name FOR A30 HEA 'PDB Name' TRUNC; +COL sqlid FOR A5 HEA 'SQLHV'; +-- +BREAK ON pdb_name SKIP PAGE DUP; +-- +PRO +PRO SQL Executions (longer than "&&more_than_secs." [{0}|0-3600] seconds) +PRO ~~~~~~~~~~~~~~ +WITH +FUNCTION application_category (p_sql_text IN VARCHAR2) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +ash_raw AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.machine, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + h.session_state, + h.wait_class + FROM v$active_session_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.sql_exec_id IS NOT NULL + AND h.sql_exec_start IS NOT NULL + AND h.sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND h.sql_plan_hash_value IS NOT NULL + UNION +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.machine, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + h.session_state, + h.wait_class + FROM dba_hist_active_sess_history h + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.sql_exec_id IS NOT NULL + AND h.sql_exec_start IS NOT NULL + AND h.sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND h.sql_plan_hash_value IS NOT NULL +), +ash_enum AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.sample_time, + h.con_id, + h.session_id, + h.session_serial#, + h.machine, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + h.session_state, + h.wait_class, + ROW_NUMBER() OVER (PARTITION BY h.con_id, h.session_id, h.session_serial#, h.xid, h.sql_exec_id, h.sql_exec_start, h.sql_id, h.sql_plan_hash_value ORDER BY h.sample_time ASC NULLS LAST) row_num_asc, + ROW_NUMBER() OVER (PARTITION BY h.con_id, h.session_id, h.session_serial#, h.xid, h.sql_exec_id, h.sql_exec_start, h.sql_id, h.sql_plan_hash_value ORDER BY h.sample_time DESC NULLS LAST) row_num_desc + FROM ash_raw h +), +ash_secs AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + f.con_id, + f.session_id, + f.session_serial#, + f.machine, + f.xid, + f.sql_exec_id, + f.sql_exec_start, + f.sql_id, + f.sql_plan_hash_value, + f.user_id, + NVL((86400 * EXTRACT(DAY FROM (l.sample_time - f.sql_exec_start))) + (3600 * EXTRACT(HOUR FROM (l.sample_time - f.sql_exec_start))) + (60 * EXTRACT(MINUTE FROM (l.sample_time - f.sql_exec_start))) + EXTRACT(SECOND FROM (l.sample_time - f.sql_exec_start)), 0) seconds, + f.sample_time f_sample_time, + l.sample_time l_sample_time + FROM ash_enum f, + ash_enum l + WHERE f.row_num_asc = 1 + AND l.row_num_desc = 1 + AND l.con_id = f.con_id + AND l.session_id = f.session_id + AND l.session_serial# = f.session_serial# + AND NVL(l.xid, UTL_RAW.CAST_TO_RAW('-666')) = NVL(f.xid, UTL_RAW.CAST_TO_RAW('-666')) + AND l.sql_exec_id = f.sql_exec_id + AND l.sql_exec_start = f.sql_exec_start + AND l.sql_id = f.sql_id + AND l.sql_plan_hash_value = f.sql_plan_hash_value + AND l.user_id = f.user_id +), +ash_time AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.session_id, + h.session_serial#, + h.machine, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id, + COUNT(*) samples_total, + SUM(CASE h.session_state WHEN 'ON CPU' THEN 1 ELSE 0 END) samples_on_cpu, + SUM(CASE h.wait_class WHEN 'User I/O' THEN 1 ELSE 0 END) samples_user_io, + SUM(CASE h.wait_class WHEN 'System I/O' THEN 1 ELSE 0 END) samples_system_io, + SUM(CASE h.wait_class WHEN 'Cluster' THEN 1 ELSE 0 END) samples_cluster, + SUM(CASE h.wait_class WHEN 'Commit' THEN 1 ELSE 0 END) samples_commit, + SUM(CASE h.wait_class WHEN 'Concurrency' THEN 1 ELSE 0 END) samples_concurrency, + SUM(CASE h.wait_class WHEN 'Application' THEN 1 ELSE 0 END) samples_application, + SUM(CASE h.wait_class WHEN 'Administrative' THEN 1 ELSE 0 END) samples_administrative, + SUM(CASE h.wait_class WHEN 'Configuration' THEN 1 ELSE 0 END) samples_configuration, + SUM(CASE h.wait_class WHEN 'Network' THEN 1 ELSE 0 END) samples_network, + SUM(CASE h.wait_class WHEN 'Queueing' THEN 1 ELSE 0 END) samples_queueing, + SUM(CASE h.wait_class WHEN 'Scheduler' THEN 1 ELSE 0 END) samples_scheduler, + SUM(CASE h.wait_class WHEN 'Other' THEN 1 ELSE 0 END) samples_other + FROM ash_enum h + GROUP BY + h.con_id, + h.session_id, + h.session_serial#, + h.machine, + h.xid, + h.sql_exec_id, + h.sql_exec_start, + h.sql_id, + h.sql_plan_hash_value, + h.user_id +), +vsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + s.con_id, + s.sql_id, + application_category(s.sql_text) sql_type, + s.sql_text, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(REPLACE(CASE WHEN s.sql_fulltext LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(s.sql_fulltext, '\[([[:digit:]]{4})\] ') ELSE s.sql_fulltext END,s.parsing_schema_name)),100000),5,'0') AS sqlid + get_sql_hv(s.sql_fulltext) AS sqlid + FROM v$sql s + WHERE sql_id IS NOT NULL + AND ('&&cs_sql_id.' IS NULL OR s.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(s.sql_text) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37))-- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(s.sql_text)||CHR(37) THEN 1 ELSE 0 END = 1 + GROUP BY + s.con_id, + s.sql_id, + application_category(s.sql_text), + s.sql_text, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(REPLACE(CASE WHEN s.sql_fulltext LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(s.sql_fulltext, '\[([[:digit:]]{4})\] ') ELSE s.sql_fulltext END,s.parsing_schema_name)),100000),5,'0') + get_sql_hv(s.sql_fulltext) +), +hsql AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.con_id, + h.sql_id, + application_category(DBMS_LOB.substr(h.sql_text, 1000)) sql_type, + DBMS_LOB.substr(h.sql_text, 1000) sql_text, + -- LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(CASE WHEN h.sql_text LIKE '/* %(%,%)% [____] */%' THEN REGEXP_REPLACE(h.sql_text, '\[([[:digit:]]{4})\] ') ELSE h.sql_text END),100000),5,'0') AS sqlid + get_sql_hv(h.sql_text) AS sqlid + FROM dba_hist_sqltext h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs_sql_id.' IS NULL OR h.sql_id = '&&cs_sql_id.') + AND ('&&sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(h.sql_text, 1000)) LIKE CHR(37)||UPPER('&&sql_text_piece.')||CHR(37)) + -- AND ('&&kiev_tx.' = '*' OR '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.substr(h.sql_text, 1000))||CHR(37)) -- does not seem to work on 19c + AND CASE WHEN '&&kiev_tx.' = '*' THEN 1 WHEN '&&kiev_tx.' LIKE CHR(37)||application_category(DBMS_LOB.SUBSTR(h.sql_text, 1000))||CHR(37) THEN 1 ELSE 0 END = 1 +) +SELECT TO_CHAR(h.sql_exec_start, '&&cs_datetime_full_format.') sql_exec_start, + h.sql_exec_id, + TO_CHAR(h.f_sample_time, '&&cs_timestamp_full_format.') f_sample_time, + TO_CHAR(h.l_sample_time, '&&cs_timestamp_full_format.') l_sample_time, + h.seconds, + LPAD(ROUND(100 * t.samples_on_cpu / t.samples_total)||'%', 6) on_cpu, + LPAD(ROUND(100 * t.samples_user_io / t.samples_total)||'%', 6) usr_io, + LPAD(ROUND(100 * t.samples_system_io / t.samples_total)||'%', 6) sys_io, + LPAD(ROUND(100 * t.samples_cluster / t.samples_total)||'%', 6) clustr, + LPAD(ROUND(100 * t.samples_commit / t.samples_total)||'%', 6) comit, + LPAD(ROUND(100 * t.samples_concurrency / t.samples_total)||'%', 6) concur, + LPAD(ROUND(100 * t.samples_application / t.samples_total)||'%', 6) appl, + LPAD(ROUND(100 * t.samples_administrative / t.samples_total)||'%', 6) admin, + LPAD(ROUND(100 * t.samples_configuration / t.samples_total)||'%', 6) config, + LPAD(ROUND(100 * t.samples_network / t.samples_total)||'%', 6) netwrk, + LPAD(ROUND(100 * t.samples_queueing / t.samples_total)||'%', 6) queue, + LPAD(ROUND(100 * t.samples_scheduler / t.samples_total)||'%', 6) sched, + LPAD(ROUND(100 * t.samples_other / t.samples_total)||'%', 6) other, + LPAD(h.session_id,5)||','||h.session_serial# sid_serial, + h.machine, + h.xid, + COALESCE(s.sql_type, hs.sql_type) sql_type, + h.sql_id, + COALESCE(s.sqlid, hs.sqlid) AS sqlid, + h.sql_plan_hash_value, + COALESCE(s.sql_text, hs.sql_text) sql_text, + u.username, + c.name pdb_name + FROM ash_secs h, + ash_time t, + vsql s, + hsql hs, + v$containers c, + cdb_users u + WHERE t.con_id = h.con_id + AND t.session_id = h.session_id + AND t.session_serial# = h.session_serial# + AND NVL(t.xid, UTL_RAW.CAST_TO_RAW('-666')) = NVL(h.xid, UTL_RAW.CAST_TO_RAW('-666')) + AND t.sql_exec_id = h.sql_exec_id + AND t.sql_exec_start = h.sql_exec_start + AND t.sql_id = h.sql_id + AND t.sql_plan_hash_value = h.sql_plan_hash_value + AND t.user_id = h.user_id + AND s.con_id(+) = h.con_id + AND s.sql_id(+) = h.sql_id + AND hs.con_id(+) = h.con_id + AND hs.sql_id(+) = h.sql_id + AND COALESCE(s.sql_type, hs.sql_type) IS NOT NULL + AND c.con_id = h.con_id + AND c.open_mode = 'READ WRITE' + AND u.con_id = h.con_id + AND u.user_id = h.user_id + AND h.seconds > NVL(TO_NUMBER('&&more_than_secs.'), 0) + AND ('&&cs_include_sys.' = 'Y' OR ('&&cs_include_sys.' = 'N' AND u.username <> 'SYS')) + AND ('&&cs_include_iod.' = 'Y' OR ('&&cs_include_iod.' = 'N' AND u.username <> '&&cs_tools_schema.')) + ORDER BY + c.name, + h.sql_exec_start +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&kiev_tx." "&&sql_text_piece." "&&cs_sql_id." "&&more_than_secs." +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sql_plan_directives.sql b/csierra/cs_sql_plan_directives.sql new file mode 100644 index 0000000..5ccab1d --- /dev/null +++ b/csierra/cs_sql_plan_directives.sql @@ -0,0 +1,33 @@ +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; +-- +COL object_owner_name FOR A60 TRUNC; +COL created FOR A23 TRUNC; +COL last_modified FOR A23 TRUNC; +COL last_used FOR A23 TRUNC; +-- +SELECT d.directive_id, + o.owner||'.'||o.object_name||CASE WHEN o.subobject_name IS NOT NULL THEN '.' END||o.subobject_name AS object_owner_name, + o.object_type, + d.type, + d.enabled, + d.state, + d.auto_drop, + d.reason, + d.created, + d.last_modified, + d.last_used + FROM dba_sql_plan_directives d, + dba_sql_plan_dir_objects o, + dba_users u + WHERE o.directive_id = d.directive_id + AND u.username = o.owner + AND u.oracle_maintained = 'N' +ORDER BY + d.directive_id, + o.owner, + o.object_name, + o.subobject_name, + o.object_type +/ diff --git a/csierra/cs_sql_sessions.sql b/csierra/cs_sql_sessions.sql new file mode 100644 index 0000000..c261888 --- /dev/null +++ b/csierra/cs_sql_sessions.sql @@ -0,0 +1,53 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sql_sessions.sql +-- +-- Purpose: Recent and Active Sessions executing a SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sql_sessions.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sql_sessions'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_recent_sessions.sql +@@cs_internal/cs_active_sessions.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlarea_per_pdb.sql b/csierra/cs_sqlarea_per_pdb.sql new file mode 100644 index 0000000..d59f579 --- /dev/null +++ b/csierra/cs_sqlarea_per_pdb.sql @@ -0,0 +1,89 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sqlarea_per_pdb.sql +-- +-- Purpose: SQL Area per PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/30 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlarea_per_pdb.sql +-- +-- Notes: Developed and tested on 19c. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlarea_per_pdb'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL pdb_name FOR A30; +COL sharable_mem FOR 999,999,999,990; +COL persistent_mem FOR 999,999,999,990; +COL runtime_mem FOR 999,999,999,990; +COL statements FOR 999,999,999,990; +COL version_count FOR 999,999,999,990; +COL loaded_versions FOR 999,999,999,990; +COL open_versions FOR 999,999,999,990; +COL users_opening FOR 999,999,999,990; +COL loads FOR 999,999,999,990; +COL invalidations FOR 999,999,999,990; +COL executions FOR 999,999,999,990; +COL parse_calls FOR 999,999,999,990; +-- +BREAK ON REPORT; +COMPUTE SUM OF statements sharable_mem persistent_mem runtime_mem version_count loaded_versions open_versions users_opening users_executing loads invalidations executions parse_calls ON REPORT; +-- +PRO +PRO SQL Area per PDB +PRO ~~~~~~~~~~~~~~~~ + SELECT c.name AS pdb_name, + COUNT(*) AS statements, + SUM(a.sharable_mem) AS sharable_mem, + SUM(a.persistent_mem) AS persistent_mem, + SUM(a.runtime_mem) AS runtime_mem, + SUM(a.version_count) AS version_count, + SUM(a.loaded_versions) AS loaded_versions, + SUM(a.open_versions) AS open_versions, + SUM(a.users_opening) AS users_opening, + SUM(a.users_executing) AS users_executing, + SUM(a.loads) AS loads, + SUM(a.invalidations) AS invalidations, + SUM(a.executions) AS executions, + SUM(a.parse_calls) AS parse_calls + FROM v$sqlarea a, v$containers c + WHERE a.con_id > 2 + AND c.con_id = a.con_id + GROUP BY + c.name + ORDER BY + c.name +/ +-- +CLEAR BREAK COMPUTE; +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlmon_binds.sql b/csierra/cs_sqlmon_binds.sql new file mode 100644 index 0000000..8cea38f --- /dev/null +++ b/csierra/cs_sqlmon_binds.sql @@ -0,0 +1,144 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sqlmon_binds.sql +-- +-- Purpose: SQL Monitor Binds for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlmon_binds.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlmon_binds'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(snap_time)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..iod_sql_monitor +/ +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. SQL_ID: +DEF cs_sql_id = '&3.'; +UNDEF 3; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_sample_time.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL key NOPRI; +COL sql_exec_start FOR A19; +COL last_refresh_time FOR A19; +COL seconds FOR 999,990; +COL status FOR A19; +COL sql_plan_hash_value FOR 9999999999 HEA 'PHV'; +COL elapsed_secs FOR 999,990.000 HEA 'ELAP_SECS'; +COL cpu_secs FOR 999,990.000 HEA 'CPU_SECS'; +COL buffer_gets FOR 999,999,990; +COL disk_reads FOR 999,999,990; +COL pos FOR 999; +COL type FOR A20; +COL name_and_value FOR A200; +-- +BREAK ON key SKIP PAGE ON sql_exec_start ON last_refresh_time ON seconds ON status ON sql_plan_hash_value ON elapsed_secs ON cpu_secs ON buffer_gets ON disk_reads; +-- +PRO +PRO SQL MONITOR BINDS (&&cs_tools_schema..iod_sql_monitor) +PRO ~~~~~~~~~~~~~~~~~ +-- +WITH +mon AS ( +SELECT s.key, + s.con_id, + s.sql_plan_hash_value, + s.sql_exec_id, + s.sql_exec_start, + s.last_refresh_time, + (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 AS seconds, + s.status, + s.username, + s.sid, + s.session_serial# AS serial#, + s.elapsed_time, + s.cpu_time, + s.buffer_gets, + s.disk_reads, + s.module, + s.action, + s.program, + bv.pos, + bv.name, + bv.type, + bv.maxlen, + bv.len, + bv.value + FROM &&cs_tools_schema..iod_sql_monitor s, + xmltable( '/binds/bind' + passing xmltype(xmltype(REPLACE(REPLACE(ASCIISTR(s.binds_xml), '\FFFF'), CHR(0)))) + COLUMNS name VARCHAR2( 30 ) path '@name' , + pos NUMBER path '@pos', + type VARCHAR2( 15 ) path '@dtystr' , + maxlen NUMBER path '@maxlen', + len NUMBER path '@len', + value VARCHAR2( 4000 ) path '.' + ) bv + WHERE s.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND s.sql_id = '&&cs_sql_id.' + AND s.binds_xml IS NOT NULL +) +SELECT key, + sql_exec_start, + last_refresh_time, + ROUND(elapsed_time / POWER(10, 6), 3) AS elapsed_secs, + ROUND(cpu_time / POWER(10, 6), 3) AS cpu_secs, + buffer_gets, + disk_reads, + sql_plan_hash_value, + status, + pos, + type, + name||' = '||value AS name_and_value + FROM mon + ORDER BY + key, + pos +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlmon_capture.sql b/csierra/cs_sqlmon_capture.sql new file mode 100644 index 0000000..a114883 --- /dev/null +++ b/csierra/cs_sqlmon_capture.sql @@ -0,0 +1,191 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sqlmon_capture.sql +-- +-- Purpose: Generate SQL Monitor Reports for given SQL_ID for a short period of time +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlmon_capture.sql +-- +-- Notes: *** Requires Oracle Tuning Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +DEF cbo_hints = 'GATHER_PLAN_STATISTICS MONITOR'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlmon_capture'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +PRO +PRO 2. Additional CBO_HINTS (opt) e.g.: &&hints_text. +PRO +PRO Other less common CBO Hints: CARDINALITY(T 1) BIND_AWARE +PRO +DEF cs_additional_cbo_hints = "&2."; +UNDEF 2; +-- +PRO +PRO 3. REPORT_TYPE: [{TEXT}|ACTIVE|HTML] +DEF report_type = '&3.'; +UNDEF 3; +-- +COL report_type NEW_V report_type NOPRI; +COL cs_report_type NEW_V cs_report_type NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&report_type.')) IN ('TEXT', 'HTML', 'ACTIVE') THEN UPPER(TRIM('&&report_type.')) ELSE 'TEXT' END AS report_type, CASE WHEN NVL(UPPER(TRIM('&&report_type.')), 'TEXT') IN ('HTML', 'ACTIVE') THEN 'html' ELSE 'txt' END AS cs_report_type FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_additional_cbo_hints." "&&report_type." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO CBO_HINTS : &&cbo_hints. &&cs_additional_cbo_hints. +PRO REPORT_TYPE : "&&report_type." [{TEXT}|ACTIVE|HTML] +-- +@@cs_internal/cs_print_sql_text.sql +-- +PRO +PRO Drop SQL Patch(es) for: "&&cs_sql_id." +BEGIN + FOR i IN (SELECT name FROM dba_sql_patches WHERE signature = &&cs_signature.) + LOOP + DBMS_SQLDIAG.drop_sql_patch(name => i.name); + END LOOP; +END; +/ +-- gets some hash on hints to allow multiple patches +COL hash NEW_V hash NOPRI; +SELECT TO_CHAR(ORA_HASH(q'[&&cbo_hints. &&cs_additional_cbo_hints.]',9999)) hash FROM DUAL; +-- capture start time +COL capture_start_time NEW_V capture_start_time NOPRI; +SELECT TO_CHAR(SYSDATE, '&&cs_datetime_full_format.') AS capture_start_time FROM DUAL; +-- create patch +PRO +PRO Create name: "spch_&&cs_sql_id._&&hash.." +DECLARE + l_sql_text CLOB := :cs_sql_text; + l_name VARCHAR2(64); +BEGIN + $IF DBMS_DB_VERSION.ver_le_12_1 + $THEN + DBMS_SQLDIAG_INTERNAL.i_create_patch(sql_id => '&&cs_sql_id.', hint_text => q'[&&cbo_hints. &&cs_additional_cbo_hints.]', name => 'spch_&&cs_sql_id._&&hash.', description => q'[cs_sqlmon_capture.sql /*+ &&cbo_hints. &&cs_additional_cbo_hints. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 12c + $ELSE + l_name := DBMS_SQLDIAG.create_sql_patch(sql_id => '&&cs_sql_id.', hint_text => q'[&&cbo_hints. &&cs_additional_cbo_hints.]', name => 'spch_&&cs_sql_id._&&hash.', description => q'[cs_sqlmon_capture.sql /*+ &&cbo_hints. &&cs_additional_cbo_hints. */ &&cs_reference_sanitized. &&who_am_i.]'); -- 19c + $END + NULL; +END; +/ +-- +PRO +PAUSE Capturing SQL Monitor reports for &&cs_sql_id.. Press RETURN to stop capturing them. Current Time: &&capture_start_time.. +PRO +-- +PRO +PRO Drop SQL Patch(es) for: "&&cs_sql_id." +BEGIN + FOR i IN (SELECT name FROM dba_sql_patches WHERE signature = &&cs_signature.) + LOOP + DBMS_SQLDIAG.drop_sql_patch(name => i.name); + END LOOP; +END; +/ +-- +-- +COL seconds FOR 999,999,990; +COL secs_avg FOR 999,990; +COL secs_max FOR 999,999,990; +COL sql_text FOR A100 HEA 'SQL_TEXT' TRUNC; +COL reports FOR 999,990; +COL pdb_name FOR A30 TRUNC; +COL sql_exec_id NEW_V sql_exec_id FOR A12; +-- +WITH +reports AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + r.sql_exec_start, + MAX(r.last_refresh_time) last_refresh_time, + TO_CHAR(r.sql_exec_id) sql_exec_id, + SUM(r.elapsed_time)/1e6 seconds, + c.name pdb_name, + ROW_NUMBER() OVER (ORDER BY r.sql_exec_start) row_number_by_date, + ROW_NUMBER() OVER (ORDER BY SUM(r.elapsed_time)) row_number_by_seconds + FROM v$sql_monitor r, + v$containers c + WHERE r.sql_id = '&&cs_sql_id.' + AND c.con_id = r.con_id + AND c.open_mode = 'READ WRITE' + AND r.sql_exec_start >= TO_DATE('&&capture_start_time.', '&&cs_datetime_full_format.') + GROUP BY + c.name, + r.sql_exec_id, + r.sql_exec_start +) +SELECT r1.sql_exec_start, + r1.last_refresh_time, + r1.seconds, + r1.sql_exec_id, + r1.pdb_name, + '|' "+", + r2.seconds, + r2.sql_exec_start, + r2.last_refresh_time, + r2.sql_exec_id, + r2.pdb_name + FROM reports r1, reports r2 + WHERE r1.row_number_by_date = r2.row_number_by_seconds + ORDER BY + r1.row_number_by_date +/ +PRO +-- +SET PAGES 0; +SPO &&cs_file_name._driver.sql +SELECT 'SPO &&cs_file_name._'||TO_CHAR(r.sql_exec_id)||'.&&cs_report_type.;'||CHR(10)|| + 'SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id => ''&&cs_sql_id.'', sql_exec_start => TO_DATE('''||TO_CHAR(r.sql_exec_start, '&&cs_datetime_full_format.')||''', ''&&cs_datetime_full_format.''), sql_exec_id => '||TO_CHAR(r.sql_exec_id)||', type => NVL(TRIM(''&&report_type.''), ''ACTIVE'')) FROM DUAL;'||CHR(10)|| + 'SPO OFF;'||CHR(10)|| + 'HOS chmod 644 &&cs_file_name._'||TO_CHAR(r.sql_exec_id)||'.&&cs_report_type.'||CHR(10)|| + 'HOS zip -mj &&cs_file_name..zip &&cs_file_name._'||TO_CHAR(r.sql_exec_id)||'.&&cs_report_type.'||CHR(10) + AS line + FROM v$sql_monitor r + WHERE r.sql_id = '&&cs_sql_id.' + AND r.sql_exec_start >= TO_DATE('&&capture_start_time.', '&&cs_datetime_full_format.') + ORDER BY + r.sql_exec_start +/ +SPO OFF; +@&&cs_file_name._driver.sql +SET PAGES 100; +-- +SPO &&cs_file_name..txt APP +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_additional_cbo_hints." "&&report_type." +-- +HOS chmod 644 &&cs_file_name._driver.sql +HOS chmod 644 &&cs_file_name..zip +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlmon_duration_chart.sql b/csierra/cs_sqlmon_duration_chart.sql new file mode 100644 index 0000000..6ee833a --- /dev/null +++ b/csierra/cs_sqlmon_duration_chart.sql @@ -0,0 +1,251 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sqlmon_duration_chart.sql +-- +-- Purpose: SQL Monitor Reports duration for a given SQL_ID (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/11 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlmon_duration_chart.sql +-- +-- Notes: *** Requires Oracle Tuning Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlmon_duration_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL key1 FOR A13 HEA 'SQL_ID'; +COL seconds FOR 999,999,990; +COL secs_avg FOR 999,990; +COL secs_max FOR 999,999,990; +COL sql_text FOR A100 HEA 'SQL_TEXT' TRUNC; +COL reports FOR 999,990; +COL done FOR 999,990; +COL done_all_rows FOR 999,990 HEA 'DONE|ALL ROWS'; +COL done_first_n_rows FOR 999,990 HEA 'DONE FIRST|N ROWS'; +COL done_error FOR 999,990 HEA 'DONE|ERROR'; +COL executing FOR 999,990; +COL queued FOR 999,990; +COL pdbs FOR 9,990; +COL pdb_name FOR A30 TRUNC; +-- +WITH +sqlmonitor_raw AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + r.period_end_time, + r.period_start_time, + --Xmltype(r.report_summary).extract('//status/text()').getStringVal() AS status, -- too slow + --REGEXP_REPLACE(REGEXP_SUBSTR(r.report_summary, '[^\<]*'), '') AS status, -- DONE (ALL ROWS) + REGEXP_SUBSTR(r.report_summary, '[^\<]*', REGEXP_INSTR(r.report_summary, '', 1, 1, 1)) AS status, -- DONE (ALL ROWS) + r.con_id, + r.key1 + FROM cdb_hist_reports r + WHERE r.component_name = 'sqlmonitor' + AND r.key1 IS NOT NULL + AND LENGTH(r.key1) = 13 + AND r.dbid = TO_NUMBER('&&cs_dbid.') + AND r.instance_number = TO_NUMBER('&&cs_instance_number.') + AND r.period_end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 /*+ MATERIALIZE NO_MERGE */ +) +, sqlmonitor_grouped AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + SUM(r.period_end_time - r.period_start_time) * 24 * 3600 AS seconds, + COUNT(*) AS reports, + SUM(CASE r.status WHEN 'DONE' THEN 1 ELSE 0 END) AS done, + SUM(CASE r.status WHEN 'DONE (ALL ROWS)' THEN 1 ELSE 0 END) AS done_all_rows, + SUM(CASE r.status WHEN 'DONE (FIRST N ROWS)' THEN 1 ELSE 0 END) AS done_first_n_rows, + SUM(CASE r.status WHEN 'DONE (ERROR)' THEN 1 ELSE 0 END) AS done_error, + SUM(CASE r.status WHEN 'EXECUTING' THEN 1 ELSE 0 END) AS executing, + SUM(CASE r.status WHEN 'QUEUED' THEN 1 ELSE 0 END) AS queued, + COUNT(DISTINCT r.con_id) AS pdbs, + MAX(r.period_end_time - r.period_start_time) * 24 * 3600 AS secs_max, + ROUND(SUM(r.period_end_time - r.period_start_time) * 24 * 3600 / COUNT(*)) AS secs_avg, + MIN(r.period_start_time) AS min_start_time, + MAX(r.period_end_time) AS max_end_time, + r.key1 + FROM sqlmonitor_raw r + WHERE ROWNUM >= 1 /*+ MATERIALIZE NO_MERGE */ + GROUP BY + r.key1 +) +, sqlmonitor_extended AS ( +SELECT r.seconds, + r.reports, + r.done, + r.done_all_rows, + r.done_first_n_rows, + r.done_error, + r.executing, + r.queued, + r.pdbs, + r.secs_max, + r.secs_avg, + r.min_start_time, + r.max_end_time, + r.key1, + (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = r.key1 AND ROWNUM = 1) sql_text + FROM sqlmonitor_grouped r +) +SELECT r.seconds, + r.reports, + r.done, + r.done_all_rows, + r.done_first_n_rows, + r.done_error, + r.executing, + r.queued, + r.pdbs, + r.secs_max, + r.secs_avg, + r.min_start_time, + r.max_end_time, + r.key1, + r.sql_text + FROM sqlmonitor_extended r + WHERE 1 = 1 + AND NVL(r.sql_text, 'NULL') NOT LIKE 'BEGIN%' + AND NVL(r.sql_text, 'NULL') NOT LIKE '/* SQL Analyze(1) */%' + ORDER BY + r.seconds DESC, + r.reports DESC + FETCH FIRST 1000 ROWS ONLY +/ +-- +PRO +PRO 3. SQL_ID: +DEF cs_sql_id = '&3.'; +UNDEF 3; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +PRO +PRO 4. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&4.'; +UNDEF 4; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +DEF report_title = 'SQL Monitored Executions of: &&cs_sql_id.'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to. UTC"; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}"; +DEF vaxis_title = "Seconds"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:1200"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Duration Seconds', id:'1', type:'number'} +-- PRO ,{label:'Elapsed Seconds', id:'1', type:'number'} +-- PRO ,{label:'CPU Seconds', id:'1', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT period_end_time AS end_time, + ROUND((period_end_time - period_start_time) * 24 * 3600) AS duration_seconds, + TO_NUMBER(NULL) AS elapsed_seconds, + TO_NUMBER(NULL) AS cpu_seconds + FROM cdb_hist_reports h + WHERE component_name = 'sqlmonitor' + AND dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND ('&&cs_sql_id.' IS NULL OR h.key1 = '&&cs_sql_id.') + AND period_end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + UNION +SELECT MAX(r.last_refresh_time) AS end_time, + ROUND(MAX(r.last_refresh_time - r.sql_exec_start) * 24 * 3600) AS duration_seconds, + ROUND(MAX(r.elapsed_time)/1e6) AS elapsed_seconds, + ROUND(MAX(r.cpu_time)/1e6) AS cpu_seconds + FROM v$sql_monitor r + WHERE ('&&cs_sql_id.' IS NULL OR r.sql_id = '&&cs_sql_id.') + AND r.last_refresh_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + GROUP BY + r.key +) +SELECT ', [new Date('|| + TO_CHAR(q.end_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.end_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.end_time, 'DD')|| /* day */ + ','||TO_CHAR(q.end_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.end_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.end_time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.duration_seconds)|| + -- ','||num_format(q.elapsed_seconds)|| + -- ','||num_format(q.cpu_seconds)|| + ']' + FROM my_query q + ORDER BY + q.end_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_sqlmon_hist.sql b/csierra/cs_sqlmon_hist.sql new file mode 100644 index 0000000..c403452 --- /dev/null +++ b/csierra/cs_sqlmon_hist.sql @@ -0,0 +1,231 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sqlmon_hist.sql +-- +-- Purpose: SQL Monitor Report for a given SQL_ID (from AWR) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlmon_hist.sql +-- +-- Notes: *** Requires Oracle Tuning Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlmon_hist'; +-- +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL key1 FOR A13 HEA 'SQL_ID'; +COL seconds FOR 999,999,990; +COL secs_avg FOR 999,990; +COL secs_max FOR 999,999,990; +COL sql_text FOR A100 HEA 'SQL_TEXT' TRUNC; +COL reports FOR 999,990; +COL done FOR 999,990; +COL done_all_rows FOR 999,990 HEA 'DONE|ALL ROWS'; +COL done_first_n_rows FOR 999,990 HEA 'DONE FIRST|N ROWS'; +COL done_error FOR 999,990 HEA 'DONE|ERROR'; +COL executing FOR 999,990; +COL queued FOR 999,990; +COL pdbs FOR 9,990; +COL pdb_name FOR A30 TRUNC; +-- +WITH +sqlmonitor_raw AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + r.period_end_time, + r.period_start_time, + --Xmltype(r.report_summary).extract('//status/text()').getStringVal() AS status, -- too slow + --REGEXP_REPLACE(REGEXP_SUBSTR(r.report_summary, '[^\<]*'), '') AS status, -- DONE (ALL ROWS) + REGEXP_SUBSTR(r.report_summary, '[^\<]*', REGEXP_INSTR(r.report_summary, '', 1, 1, 1)) AS status, -- DONE (ALL ROWS) + r.con_id, + r.key1, + c.name AS pdb_name + FROM cdb_hist_reports r, v$containers c + WHERE (r.period_end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') OR r.period_start_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) + AND r.component_name = 'sqlmonitor' + AND r.key1 IS NOT NULL + AND LENGTH(r.key1) = 13 + AND r.dbid = TO_NUMBER('&&cs_dbid.') + AND r.instance_number = TO_NUMBER('&&cs_instance_number.') + AND c.con_id = r.con_id + AND ROWNUM >= 1 /*+ MATERIALIZE NO_MERGE */ +) +, sqlmonitor_grouped AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + SUM(r.period_end_time - r.period_start_time) * 24 * 3600 AS seconds, + COUNT(*) AS reports, + SUM(CASE r.status WHEN 'DONE' THEN 1 ELSE 0 END) AS done, + SUM(CASE r.status WHEN 'DONE (ALL ROWS)' THEN 1 ELSE 0 END) AS done_all_rows, + SUM(CASE r.status WHEN 'DONE (FIRST N ROWS)' THEN 1 ELSE 0 END) AS done_first_n_rows, + SUM(CASE r.status WHEN 'DONE (ERROR)' THEN 1 ELSE 0 END) AS done_error, + SUM(CASE r.status WHEN 'EXECUTING' THEN 1 ELSE 0 END) AS executing, + SUM(CASE r.status WHEN 'QUEUED' THEN 1 ELSE 0 END) AS queued, + COUNT(DISTINCT r.con_id) AS pdbs, + MAX(r.period_end_time - r.period_start_time) * 24 * 3600 AS secs_max, + ROUND(SUM(r.period_end_time - r.period_start_time) * 24 * 3600 / COUNT(*)) AS secs_avg, + MIN(r.period_start_time) AS min_start_time, + MAX(r.period_end_time) AS max_end_time, + r.key1, + r.pdb_name + FROM sqlmonitor_raw r + WHERE ROWNUM >= 1 /*+ MATERIALIZE NO_MERGE */ + GROUP BY + r.key1, + r.pdb_name +HAVING SUM(r.period_end_time - r.period_start_time) * 24 * 3600 > 1 +) +, sqlmonitor_extended AS ( +SELECT r.seconds, + r.reports, + r.done, + r.done_all_rows, + r.done_first_n_rows, + r.done_error, + r.executing, + r.queued, + r.pdbs, + r.secs_max, + r.secs_avg, + r.min_start_time, + r.max_end_time, + r.key1, + r.pdb_name, + (SELECT s.sql_text FROM v$sql s WHERE s.sql_id = r.key1 AND ROWNUM = 1) sql_text + FROM sqlmonitor_grouped r +) +SELECT r.seconds, + r.reports, + r.done, + r.done_all_rows, + r.done_first_n_rows, + r.done_error, + r.executing, + r.queued, + r.pdbs, + r.secs_max, + r.secs_avg, + r.min_start_time, + r.max_end_time, + r.key1, + r.sql_text, + r.pdb_name + FROM sqlmonitor_extended r + WHERE 1 = 1 + AND NVL(r.sql_text, 'NULL') NOT LIKE 'BEGIN%' + AND NVL(r.sql_text, 'NULL') NOT LIKE '/* SQL Analyze(1) */%' + ORDER BY + r.seconds DESC, + r.reports DESC + FETCH FIRST 1000 ROWS ONLY +/ +-- +PRO +PRO 3. SQL_ID: +DEF cs_sql_id = '&3.'; +UNDEF 3; +-- +PRO +PRO 4. Top: [{100}|1-10000] +DEF sqlmon_top = '&4.'; +UNDEF 4; +COL cs_sqlmon_top NEW_V cs_sqlmon_top NOPRI; +SELECT CASE WHEN TO_NUMBER('&&sqlmon_top.') BETWEEN 1 AND 10000 THEN '&&sqlmon_top.' ELSE '100' END AS cs_sqlmon_top FROM DUAL +/ +-- +@@cs_internal/cs_sqlmon_hist_internal.sql +COL report_id_a NEW_V report_id_a NOPRI; +SELECT TRIM(TO_CHAR('&&report_id.')) AS report_id_a FROM DUAL +/ +-- +PRO +PRO 5. REPORT_ID from: {&&report_id_a.} +DEF cs_report_id = '&5.'; +UNDEF 5; +COL report_id_from NEW_V report_id_from NOPRI; +SELECT TRIM(COALESCE('&&cs_report_id.', '&&report_id_a.')) AS report_id_from FROM DUAL +/ +-- +PRO +PRO 6. REPORT_ID to: {&&report_id_from.} +DEF cs_report_id = '&6.'; +UNDEF 6; +COL report_id_to NEW_V report_id_to NOPRI; +SELECT TRIM(COALESCE('&&cs_report_id.', '&&report_id_from.')) AS report_id_to FROM DUAL; +-- +PRO +PRO 7. REPORT_TYPE: [{TEXT}|ACTIVE|HTML] +DEF report_type = '&7.'; +UNDEF 7; +COL report_type NEW_V report_type NOPRI; +COL cs_report_type NEW_V cs_report_type NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&report_type.')) IN ('TEXT', 'HTML', 'ACTIVE') THEN UPPER(TRIM('&&report_type.')) ELSE 'TEXT' END AS report_type, CASE WHEN NVL(UPPER(TRIM('&&report_type.')), 'TEXT') IN ('HTML', 'ACTIVE') THEN 'html' ELSE 'txt' END AS cs_report_type FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." "&&cs_sqlmon_top." "&&report_id_from." "&&report_id_to." "&&report_type." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_sample_time.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO REPORT_ID : FROM &&report_id_from. TO &&report_id_to. +PRO REPORT_TYPE : "&&report_type." [{TEXT}|ACTIVE|HTML] +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_sqlmon_hist_internal.sql +-- +SET PAGES 0; +SPO &&cs_file_name._driver.sql +SELECT 'SPO &&cs_file_name._'||TO_CHAR(r.report_id)||'.&&cs_report_type.;'||CHR(10)|| + 'SELECT DBMS_AUTO_REPORT.report_repository_detail(rid => '||r.report_id||', type => NVL(TRIM(''&&report_type.''), ''ACTIVE'')) FROM DUAL;'||CHR(10)|| + 'SPO OFF;'||CHR(10)|| + 'HOS chmod 644 &&cs_file_name._'||TO_CHAR(r.report_id)||'.&&cs_report_type.'||CHR(10)|| + 'HOS zip -mj &&cs_file_name..zip &&cs_file_name._'||TO_CHAR(r.report_id)||'.&&cs_report_type.'||CHR(10) + AS line + FROM cdb_hist_reports r + WHERE (r.period_end_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') OR r.period_start_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) + AND r.component_name = 'sqlmonitor' + AND r.key1 = '&&cs_sql_id.' + AND r.dbid = TO_NUMBER('&&cs_dbid.') + AND r.instance_number = TO_NUMBER('&&cs_instance_number.') + AND r.report_id BETWEEN &&report_id_from. AND &&report_id_to. + ORDER BY + r.report_id +/ +SPO OFF; +@&&cs_file_name._driver.sql +SET PAGES 100; +-- +SPO &&cs_file_name..txt APP +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." "&&cs_sqlmon_top." "&&report_id_from." "&&report_id_to." "&&report_type." +-- +HOS chmod 644 &&cs_file_name._driver.sql +HOS chmod 644 &&cs_file_name..zip +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlmon_mem.sql b/csierra/cs_sqlmon_mem.sql new file mode 100644 index 0000000..59ef7f4 --- /dev/null +++ b/csierra/cs_sqlmon_mem.sql @@ -0,0 +1,182 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sqlmon_mem.sql +-- +-- Purpose: SQL Monitor Report for a given SQL_ID (from MEM) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlmon_mem.sql +-- +-- Notes: *** Requires Oracle Tuning Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlmon_mem'; +-- +COL seconds FOR 999,999,990; +COL secs_avg FOR 999,990; +COL secs_max FOR 999,999,990; +COL sql_text FOR A100 HEA 'SQL_TEXT' TRUNC; +COL reports FOR 999,990; +COL done FOR 999,990; +COL done_all_rows FOR 999,990 HEA 'DONE|ALL ROWS'; +COL done_first_n_rows FOR 999,990 HEA 'DONE FIRST|N ROWS'; +COL done_error FOR 999,990 HEA 'DONE|ERROR'; +COL executing FOR 999,990; +COL queued FOR 999,990; +COL pdb_name FOR A30 TRUNC; +-- +WITH +individual_executions AS ( +SELECT r.sql_id, + r.sql_exec_id, + r.sql_exec_start, + r.status, + MAX(r.last_refresh_time) AS last_refresh_time, + MAX(r.sql_text) AS sql_text, + MAX(r.elapsed_time)/1e6 AS seconds, + c.name AS pdb_name + FROM v$sql_monitor r, v$containers c + WHERE r.sql_id IS NOT NULL + AND c.con_id = r.con_id + AND ROWNUM >= 1 /*+ MATERIALIZE NO_MERGE */ + GROUP BY + r.sql_id, + r.sql_exec_id, + r.sql_exec_start, + r.status, + c.name +) +SELECT SUM(seconds) seconds, + COUNT(*) reports, + SUM(CASE status WHEN 'DONE' THEN 1 ELSE 0 END) AS done, + SUM(CASE status WHEN 'DONE (ALL ROWS)' THEN 1 ELSE 0 END) AS done_all_rows, + SUM(CASE status WHEN 'DONE (FIRST N ROWS)' THEN 1 ELSE 0 END) AS done_first_n_rows, + SUM(CASE status WHEN 'DONE (ERROR)' THEN 1 ELSE 0 END) AS done_error, + SUM(CASE status WHEN 'EXECUTING' THEN 1 ELSE 0 END) AS executing, + SUM(CASE status WHEN 'QUEUED' THEN 1 ELSE 0 END) AS queued, + MAX(seconds) secs_max, + SUM(seconds)/COUNT(*) secs_avg, + MIN(sql_exec_start) min_sql_exec_start, + MAX(last_refresh_time) max_last_refresh_time, + sql_id, + REPLACE(MAX(sql_text), CHR(10), CHR(32)) sql_text, + pdb_name + FROM individual_executions + GROUP BY + sql_id, + pdb_name +HAVING SUM(seconds) > 1 + ORDER BY + 1 DESC, + 2 DESC + FETCH FIRST 1000 ROWS ONLY +/ +-- +PRO +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +PRO +PRO 2. Top: [{100}|1-10000] +DEF sqlmon_top = '&2.'; +UNDEF 2; +COL cs_sqlmon_top NEW_V cs_sqlmon_top NOPRI; +SELECT CASE WHEN TO_NUMBER('&&sqlmon_top.') BETWEEN 1 AND 10000 THEN '&&sqlmon_top.' ELSE '100' END AS cs_sqlmon_top FROM DUAL +/ +-- +@@cs_internal/cs_sqlmon_mem_internal.sql +COL sql_exec_id_a NEW_V sql_exec_id_a NOPRI; +SELECT TRIM(TO_CHAR('&&sql_exec_id.')) AS sql_exec_id_a FROM DUAL +/ +-- +PRO +PRO 3. SQL_EXEC_ID FROM: {&&sql_exec_id_a.} +DEF cs_sql_exec_id = '&3.'; +UNDEF 3; +COL sql_exec_id_from NEW_V sql_exec_id_from NOPRI; +SELECT TRIM(COALESCE('&&cs_sql_exec_id.', '&&sql_exec_id_a.')) AS sql_exec_id_from FROM DUAL; +-- +PRO +PRO 4. SQL_EXEC_ID TO: {&&sql_exec_id_from.} +DEF cs_sql_exec_id = '&4.'; +UNDEF 4; +COL sql_exec_id_to NEW_V sql_exec_id_to NOPRI; +SELECT TRIM(COALESCE('&&cs_sql_exec_id.', '&&sql_exec_id_from.')) AS sql_exec_id_to FROM DUAL; +-- +PRO +PRO 5. REPORT_TYPE: [{TEXT}|ACTIVE|HTML] +DEF report_type = '&5.'; +UNDEF 5; +-- +COL report_type NEW_V report_type NOPRI; +COL cs_report_type NEW_V cs_report_type NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&report_type.')) IN ('TEXT', 'HTML', 'ACTIVE') THEN UPPER(TRIM('&&report_type.')) ELSE 'TEXT' END AS report_type, CASE WHEN NVL(UPPER(TRIM('&&report_type.')), 'TEXT') IN ('HTML', 'ACTIVE') THEN 'html' ELSE 'txt' END AS cs_report_type FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_sqlmon_top." "&&sql_exec_id_from." "&&sql_exec_id_to." "&&report_type." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO SQL_EXEC_ID : FROM &&sql_exec_id_from. TO &&sql_exec_id_to. +PRO REPORT_TYPE : "&&report_type." [{TEXT}|ACTIVE|HTML] +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_sqlmon_mem_internal.sql +-- +SET PAGES 0; +SPO &&cs_file_name._driver.sql +SELECT 'SPO &&cs_file_name._'||TO_CHAR(r.sql_exec_id)||'.&&cs_report_type.;'||CHR(10)|| + 'SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id => ''&&cs_sql_id.'', sql_exec_start => TO_DATE('''||TO_CHAR(r.sql_exec_start, '&&cs_datetime_full_format.')||''', ''&&cs_datetime_full_format.''), sql_exec_id => '||TO_CHAR(r.sql_exec_id)||', type => NVL(TRIM(''&&report_type.''), ''ACTIVE'')) FROM DUAL;'||CHR(10)|| + 'SPO OFF;'||CHR(10)|| + 'HOS chmod 644 &&cs_file_name._'||TO_CHAR(r.sql_exec_id)||'.&&cs_report_type.'||CHR(10)|| + 'HOS zip -mj &&cs_file_name..zip &&cs_file_name._'||TO_CHAR(r.sql_exec_id)||'.&&cs_report_type.'||CHR(10) + AS line + FROM v$sql_monitor r + WHERE r.sql_id = '&&cs_sql_id.' + AND r.sql_exec_id BETWEEN &&sql_exec_id_from. AND &&sql_exec_id_to. + GROUP BY + r.sql_id, + r.sql_exec_id, + r.sql_exec_start + ORDER BY + r.sql_id, + r.sql_exec_id, + r.sql_exec_start +/ +SPO OFF; +@&&cs_file_name._driver.sql +SET PAGES 100; +-- +SPO &&cs_file_name..txt APP +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_sqlmon_top." "&&sql_exec_id_from." "&&sql_exec_id_to." "&&report_type." +-- +HOS chmod 644 &&cs_file_name._driver.sql +HOS chmod 644 &&cs_file_name..zip +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlmon_top_binds.sql b/csierra/cs_sqlmon_top_binds.sql new file mode 100644 index 0000000..75281b2 --- /dev/null +++ b/csierra/cs_sqlmon_top_binds.sql @@ -0,0 +1,209 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sqlmon_top_binds.sql +-- +-- Purpose: SQL Monitor Top Binds for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/01/03 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlmon_top_binds.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlmon_top_binds'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(snap_time)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..iod_sql_monitor +/ +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. SQL_ID: +DEF cs_sql_id = '&3.'; +UNDEF 3; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO SQL_ID : &&cs_sql_id. +PRO SIGNATURE : &&cs_signature. +PRO SQL_HANDLE : &&cs_sql_handle. +PRO APPLICATION : &&cs_application_category. +PRO TABLE_OWNER : &&table_owner. +PRO TABLE_NAME : &&table_name. +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL key NOPRI; +COL sql_exec_start FOR A19; +COL last_refresh_time FOR A19; +COL seconds FOR 999,990; +COL status FOR A19; +COL sql_plan_hash_value FOR 9999999999 HEA 'PHV'; +COL elapsed_secs FOR 999,990.000 HEA 'ELAP_SECS'; +COL cpu_secs FOR 999,990.000 HEA 'CPU_SECS'; +COL buffer_gets FOR 999,999,990; +COL disk_reads FOR 999,999,990; +COL pos FOR 999; +COL type FOR A20; +COL name_and_value FOR A200; +-- +BREAK ON key SKIP PAGE ON sql_exec_start ON last_refresh_time ON seconds ON status ON sql_plan_hash_value ON elapsed_secs ON cpu_secs ON buffer_gets ON disk_reads; +-- +PRO +PRO TOP SQL MONITOR BINDS (&&cs_tools_schema..iod_sql_monitor) +PRO ~~~~~~~~~~~~~~~~~~~~~ +-- +COL sum_elapsed_secs FOR 999,999,990 HEA 'Sum|Elapsed|Seconds'; +COL sum_cpu_secs FOR 999,999,990 HEA 'Sum|CPU|Seconds'; +COL sum_buffer_gets FOR 999,999,999,990 HEA 'Sum|Buffer|Gets'; +COL sum_disk_reads FOR 999,999,999,990 HEA 'Sum|Disk|Reads'; +COL avg_elapsed_secs FOR 999,990 HEA 'Avg|Elapsed|Seconds'; +COL avg_cpu_secs FOR 999,990 HEA 'Avg|CPU|Seconds'; +COL avg_buffer_gets FOR 999,999,999,990 HEA 'Avg|Buffer|Gets'; +COL avg_disk_reads FOR 999,999,999,990 HEA 'Avg|Disk|Reads'; +COL max_elapsed_secs FOR 999,990 HEA 'Max|Elapsed|Seconds'; +COL max_cpu_secs FOR 999,990 HEA 'Max|CPU|Seconds'; +COL max_buffer_gets FOR 999,999,999,990 HEA 'Max|Buffer|Gets'; +COL max_disk_reads FOR 999,999,999,990 HEA 'Max|Disk|Reads'; +COL cnt FOR 999,990 HEA 'Count'; +COL name_and_value FOR A200 HEA 'Bind Name and Value'; +COL min_sql_exec_start HEA 'Min SQL|Exec Start'; +COL max_last_refresh_time HEA 'Max Last|Refresh Time'; +COL d1 FOR A1 HEA '|'; +COL d2 FOR A1 HEA '|'; +COL d3 FOR A1 HEA '|'; +COL d4 FOR A1 HEA '|'; +-- +WITH +mon AS ( +SELECT s.key, + s.con_id, + s.sql_plan_hash_value, + s.sql_exec_id, + s.sql_exec_start, + s.last_refresh_time, + (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 AS seconds, + s.status, + s.username, + s.sid, + s.session_serial# AS serial#, + s.elapsed_time, + s.cpu_time, + s.buffer_gets, + s.disk_reads, + s.module, + s.action, + s.program, + bv.pos, + bv.name, + bv.type, + bv.maxlen, + bv.len, + bv.value + FROM &&cs_tools_schema..iod_sql_monitor s, + xmltable( '/binds/bind' + passing xmltype(REPLACE(REPLACE(ASCIISTR(s.binds_xml), '\FFFF'), CHR(0))) + COLUMNS name VARCHAR2( 30 ) path '@name' , + pos NUMBER path '@pos', + type VARCHAR2( 15 ) path '@dtystr' , + maxlen NUMBER path '@maxlen', + len NUMBER path '@len', + value VARCHAR2( 4000 ) path '.' + ) bv + WHERE s.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND s.sql_id = '&&cs_sql_id.' + AND s.binds_xml IS NOT NULL +-- AND s.status LIKE 'DONE%' +), +grp AS ( +SELECT SUM(elapsed_time) / POWER(10, 6) AS sum_elapsed_secs, + SUM(cpu_time) / POWER(10, 6) AS sum_cpu_secs, + SUM(buffer_gets) AS sum_buffer_gets, + SUM(disk_reads) AS sum_disk_reads, + AVG(elapsed_time) / POWER(10, 6) AS avg_elapsed_secs, + AVG(cpu_time) / POWER(10, 6) AS avg_cpu_secs, + AVG(buffer_gets) AS avg_buffer_gets, + AVG(disk_reads) AS avg_disk_reads, + MAX(elapsed_time) / POWER(10, 6) AS max_elapsed_secs, + MAX(cpu_time) / POWER(10, 6) AS max_cpu_secs, + MAX(buffer_gets) AS max_buffer_gets, + MAX(disk_reads) AS max_disk_reads, + COUNT(*) AS cnt, + MIN(sql_exec_start) AS min_sql_exec_start, + MAX(last_refresh_time) AS max_last_refresh_time, + name, + value + FROM mon + GROUP BY + name, + value +) +SELECT sum_elapsed_secs, + sum_cpu_secs, + sum_buffer_gets, + sum_disk_reads, + '|' AS d1, + avg_elapsed_secs, + avg_cpu_secs, + avg_buffer_gets, + avg_disk_reads, + '|' AS d2, + max_elapsed_secs, + max_cpu_secs, + max_buffer_gets, + max_disk_reads, + '|' AS d3, + name||' = '||value AS name_and_value, + '|' AS d4, + cnt, + min_sql_exec_start, + max_last_refresh_time + FROM grp + ORDER BY + sum_elapsed_secs DESC, + name, + value + FETCH FIRST 100 ROWS ONLY +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- + diff --git a/csierra/cs_sqlperf.sql b/csierra/cs_sqlperf.sql new file mode 100644 index 0000000..6ed808c --- /dev/null +++ b/csierra/cs_sqlperf.sql @@ -0,0 +1,180 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: p.sql | cs_sqlperf.sql +-- +-- Purpose: Basic SQL performance metrics for a given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/05/29 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlperf.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +-- To further dive into SQL performance diagnostics use SQLd360. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn2.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlperf'; +DEF cs_script_acronym = 'p.sql | '; +-- +DEF cs_sql_id_col = 'NOPRI'; +DEF cs_uncommon_col = 'NOPRI'; +DEF cs_delta_col = 'NOPRI'; +-- +DEF cs_binds_days = '1'; +DEF cs_sqlstat_days = '14'; +DEF cs_scope_1 = 'last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_sample_time_boundaries.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +DEF cs_filter_1 = 'sql_id = ''&&cs_sql_id.'''; +DEF cs_filter_2 = '1 = 1'; +DEF cs2_sql_text_piece = ''; +-- +@@cs_internal/cs_last_snap.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +DEF cs_scope_1 = 'last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_dba_hist_sqlstat_global.sql +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sqlstat_global.sql +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- DEF cs_scope_1 = '- SCOPE CDB$ROOT'; +-- DEF cs_filter_1 = 'get_sql_hv(sql_text) = ''&&cs_sql_hv.'' AND sql_text LIKE SUBSTR(:cs_sql_text_1000, 1, 40)||''%'''; +-- DEF cs_sql_id_col = 'PRI'; +-- @@cs_internal/cs_gv_sql_global.sql +-- DEF cs_sql_id_col = 'NOPRI'; +-- DEF cs_filter_1 = 'sql_id = ''&&cs_sql_id.'''; +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +-- DEF cs_scope_1 = '- SCOPE &&cs_con_name.'; +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sql_global.sql +@@cs_internal/cs_gv_sql_stability.sql +-- @@cs_internal/cs_cursors_not_shared.sql +-- +DEF cs_scope_1 = '- last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_dba_hist_sqlstat_daily.sql +-- +SPO OFF; +DEF cs_sqlstat_days = '1'; +DEF cs_scope_1 = '- last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_sample_time_boundaries.sql +@@cs_internal/cs_snap_id_from_and_to.sql +SPO &&cs_file_name..txt APP; +@@cs_internal/cs_dba_hist_sqlstat_hourly.sql +-- +SPO OFF; +DEF cs_sqlstat_days = '0.5'; +DEF cs_scope_1 = '- last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_sample_time_boundaries.sql +@@cs_internal/cs_snap_id_from_and_to.sql +SPO &&cs_file_name..txt APP; +@@cs_internal/cs_dba_hist_sqlstat_detailed.sql +-- +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/cs_sqlmon_hist_internal.sql +-- @@cs_internal/cs_sqlmon_mem_internal.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +-- @@cs_internal/cs_binds_xml.sql +-- @@cs_internal/cs_bind_capture_hist.sql +@@cs_internal/cs_bind_capture_mem.sql +-- @@cs_internal/cs_acs_internal.sql +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +@@cs_internal/cs_plans_mem_0.sql +-- @@cs_internal/cs_plans_mem_1.sql +-- @@cs_internal/cs_plans_mem_2.sql +-- @@cs_internal/cs_plans_awr_1.sql +-- @@cs_internal/cs_plans_awr_2.sql +-- @@cs_internal/cs_spbl_internal_plan.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/cs_recent_sessions.sql +@@cs_internal/cs_active_sessions.sql +-- @@cs_internal/cs_load_per_machine.sql +-- @@cs_internal/cs_sql_ash.sql +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/cs_spch_internal_list.sql +-- @@cs_internal/cs_sprf_internal_list.sql +-- @@cs_internal/cs_spbl_internal_list.sql +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/&&zapper_19_actions_script. +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/&&oem_me_sqlperf_script. +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/cs_dependency_segments.sql +-- @@cs_internal/cs_dependency_tables.sql +-- @@cs_internal/cs_dependency_indexes.sql +-- @@cs_internal/cs_dependency_part_keys.sql +-- @@cs_internal/cs_dependency_index_columns.sql +-- @@cs_internal/cs_dependency_table_columns.sql +-- @@cs_internal/cs_dependency_lobs.sql +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/cs_dependency_metadata.sql +-- @@cs_internal/cs_dependency_kievlive.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +DEF cs_num_rows_limit_display = '100M'; +DEF cs_num_rows_limit_number = '1e8'; +-- @@cs_internal/cs_top_primary_keys_table.sql +-- @@cs_internal/cs_top_keys_sql.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sql_global.sql +@@cs_internal/cs_gv_sql_stability.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +@@cs_internal/cs_cdb_warn2.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlperf_plus.sql b/csierra/cs_sqlperf_plus.sql new file mode 100644 index 0000000..9fe6bb7 --- /dev/null +++ b/csierra/cs_sqlperf_plus.sql @@ -0,0 +1,180 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: pp.sql | cs_sqlperf_plus.sql +-- +-- Purpose: Basic SQL performance metrics for a given SQL_ID + Top Keys +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/05/29 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlperf_plus.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +-- To further dive into SQL performance diagnostics use SQLd360. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn2.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlperf_plus'; +DEF cs_script_acronym = 'pp.sql | '; +-- +DEF cs_sql_id_col = 'NOPRI'; +DEF cs_uncommon_col = 'NOPRI'; +DEF cs_delta_col = 'NOPRI'; +-- +DEF cs_binds_days = '1'; +DEF cs_sqlstat_days = '14'; +DEF cs_scope_1 = 'last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_sample_time_boundaries.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +DEF cs_filter_1 = 'sql_id = ''&&cs_sql_id.'''; +DEF cs_filter_2 = '1 = 1'; +DEF cs2_sql_text_piece = ''; +-- +@@cs_internal/cs_last_snap.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_plans_performance.sql +DEF cs_scope_1 = 'last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_dba_hist_sqlstat_global.sql +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sqlstat_global.sql +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- DEF cs_scope_1 = '- SCOPE CDB$ROOT'; +-- DEF cs_filter_1 = 'get_sql_hv(sql_text) = ''&&cs_sql_hv.'' AND sql_text LIKE SUBSTR(:cs_sql_text_1000, 1, 40)||''%'''; +-- DEF cs_sql_id_col = 'PRI'; +-- @@cs_internal/cs_gv_sql_global.sql +-- DEF cs_sql_id_col = 'NOPRI'; +-- DEF cs_filter_1 = 'sql_id = ''&&cs_sql_id.'''; +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +-- DEF cs_scope_1 = '- SCOPE &&cs_con_name.'; +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sql_global.sql +@@cs_internal/cs_gv_sql_stability.sql +-- @@cs_internal/cs_cursors_not_shared.sql +-- +DEF cs_scope_1 = '- last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_dba_hist_sqlstat_daily.sql +-- +SPO OFF; +DEF cs_sqlstat_days = '1'; +DEF cs_scope_1 = '- last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_sample_time_boundaries.sql +@@cs_internal/cs_snap_id_from_and_to.sql +SPO &&cs_file_name..txt APP; +@@cs_internal/cs_dba_hist_sqlstat_hourly.sql +-- +SPO OFF; +DEF cs_sqlstat_days = '0.5'; +DEF cs_scope_1 = '- last &&cs_sqlstat_days. day(s)'; +@@cs_internal/cs_sample_time_boundaries.sql +@@cs_internal/cs_snap_id_from_and_to.sql +SPO &&cs_file_name..txt APP; +@@cs_internal/cs_dba_hist_sqlstat_detailed.sql +-- +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/cs_sqlmon_hist_internal.sql +-- @@cs_internal/cs_sqlmon_mem_internal.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +-- @@cs_internal/cs_binds_xml.sql +-- @@cs_internal/cs_bind_capture_hist.sql +@@cs_internal/cs_bind_capture_mem.sql +-- @@cs_internal/cs_acs_internal.sql +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +@@cs_internal/cs_plans_mem_0.sql +-- @@cs_internal/cs_plans_mem_1.sql +-- @@cs_internal/cs_plans_mem_2.sql +-- @@cs_internal/cs_plans_awr_1.sql +-- @@cs_internal/cs_plans_awr_2.sql +-- @@cs_internal/cs_spbl_internal_plan.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +@@cs_internal/cs_recent_sessions.sql +@@cs_internal/cs_active_sessions.sql +-- @@cs_internal/cs_load_per_machine.sql +-- @@cs_internal/cs_sql_ash.sql +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/cs_spch_internal_list.sql +-- @@cs_internal/cs_sprf_internal_list.sql +-- @@cs_internal/cs_spbl_internal_list.sql +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/&&zapper_19_actions_script. +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/&&oem_me_sqlperf_script. +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/cs_dependency_segments.sql +-- @@cs_internal/cs_dependency_tables.sql +-- @@cs_internal/cs_dependency_indexes.sql +-- @@cs_internal/cs_dependency_part_keys.sql +-- @@cs_internal/cs_dependency_index_columns.sql +-- @@cs_internal/cs_dependency_table_columns.sql +-- @@cs_internal/cs_dependency_lobs.sql +-- PRO +-- PRO ******************************************************************************************************************************************************************************************************** +-- PRO +-- @@cs_internal/cs_dependency_metadata.sql +-- @@cs_internal/cs_dependency_kievlive.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +DEF cs_num_rows_limit_display = '100M'; +DEF cs_num_rows_limit_number = '1e8'; +@@cs_internal/cs_top_primary_keys_table.sql +-- @@cs_internal/cs_top_keys_sql.sql +PRO +PRO ******************************************************************************************************************************************************************************************************** +PRO +DEF cs_scope_1 = ''; +@@cs_internal/cs_gv_sql_global.sql +@@cs_internal/cs_gv_sql_stability.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +@@cs_internal/cs_cdb_warn2.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlstat_analytics.sql b/csierra/cs_sqlstat_analytics.sql new file mode 100644 index 0000000..85f7538 --- /dev/null +++ b/csierra/cs_sqlstat_analytics.sql @@ -0,0 +1,1710 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: ssa.sql | cs_sqlstat_analytics.sql +-- +-- Purpose: SQL Statistics Analytics (AWR) - 15m Granularity +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/03/30 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlstat_analytics.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +-- @@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlstat_analytics'; +DEF cs_script_acronym = 'ssa.sql | '; +-- +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO +PRO SQL Statistic Note +PRO ~~~~~~~~~~~~~ ~~~~~~ +PRO delta_execution_count +PRO delta_elapsed_time +PRO delta_cpu_time +PRO delta_user_io_wait_time +PRO delta_application_wait_time +PRO delta_concurrency_time +PRO delta_plsql_exec_time +PRO delta_cluster_wait_time +PRO delta_java_exec_time +PRO delta_px_servers_executions +PRO delta_end_of_fetch_count +PRO delta_parse_calls +PRO delta_invalidations +PRO delta_loads +PRO delta_buffer_gets +PRO delta_disk_reads +PRO delta_direct_writes +PRO delta_physical_read_requests +PRO delta_physical_read_mb +PRO delta_physical_write_requests +PRO delta_physical_write_mb +PRO delta_fetch_count +PRO delta_sorts +PRO delta_rows_processed +PRO delta_io_interconnect_mb +PRO delta_cell_offload_elig_mb +PRO delta_cell_uncompressed_mb +PRO delta_cell_offload_retrn_mb +PRO version_count +PRO sharable_mem_mb +PRO obsolete_count +PRO et_ms_per_exec ................... default +PRO cpu_ms_per_exec +PRO io_ms_per_exec +PRO appl_ms_per_exec +PRO conc_ms_per_exec +PRO plsql_ms_per_exec +PRO cluster_ms_per_exec +PRO java_ms_per_exec +PRO et_aas ........................... common +PRO cpu_aas +PRO io_aas +PRO appl_aas +PRO conc_aas +PRO plsql_aas +PRO cluster_aas +PRO java_aas +PRO execs_per_sec .................... common +PRO px_execs_per_sec +PRO end_of_fetch_per_sec +PRO parses_per_sec +PRO inval_per_sec +PRO loads_per_sec +PRO gets_per_exec .................... common +PRO reads_per_exec +PRO direct_writes_per_exec +PRO phy_read_req_per_exec +PRO phy_read_mb_per_exec +PRO phy_write_req_per_exec +PRO phy_write_mb_per_exec +PRO fetches_per_exec +PRO sorts_per_exec +PRO rows_per_exec .................... common +PRO et_ms_per_row +PRO cpu_ms_per_row +PRO io_ms_per_row +PRO gets_per_row +PRO reads_per_row +PRO mbps_r +PRO mbps_w +PRO mbps_rw +PRO iops_r +PRO iops_w +PRO iops_rw +PRO +PRO 3. SQL Statistic: [{et_ms_per_exec}|] +DEF cs_sql_statistic = '&3.'; +UNDEF 3; +COL cs_sql_statistic NEW_V cs_sql_statistic NOPRI; +SELECT LOWER(NVL(TRIM('&&cs_sql_statistic.'), 'et_ms_per_exec')) AS cs_sql_statistic FROM DUAL +/ +-- +PRO +PRO 4. SQL Type: [{null}|TP|RO|BG|IG|UN|SYS|TP,RO|TP,RO,BG] +DEF cs_sql_type = '&4.'; +UNDEF 4; +COL cs_sql_type NEW_V cs_sql_type NOPRI; +SELECT UPPER(TRIM('&&cs_sql_type.')) AS cs_sql_type FROM DUAL +/ +-- +PRO +PRO 5. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&5.'; +UNDEF 5; +-- +PRO +PRO 6. SQL_ID (optional): +DEF cs_sql_id = '&6.'; +UNDEF 6; +DEF cs_filter_1 = ''; +COL cs_filter_1 NEW_V cs_filter_1 NOPRI; +SELECT CASE WHEN LENGTH('&&cs_sql_id.') = 13 THEN 'sql_id = ''&&cs_sql_id.''' ELSE '1 = 1' END AS cs_filter_1 FROM DUAL +/ +-- +PRO +PRO 7. Include SYS: [{N}|Y] +DEF cs_include_sys = '&7.'; +UNDEF 7; +COL cs_include_sys NEW_V cs_include_sys NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs_include_sys.')) IN ('Y', 'N') THEN UPPER(TRIM('&&cs_include_sys.')) ELSE 'N' END AS cs_include_sys FROM DUAL +/ +-- +PRO +PRO 8. Graph Type: [{Scatter}|Line|SteppedArea|Area] note: SteppedArea and Area are stacked +DEF graph_type = '&8.'; +UNDEF 8; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('SteppedArea', 'Line', 'Area', 'Scatter') THEN '&&graph_type.' ELSE 'Scatter' END AS cs_graph_type FROM DUAL +/ +-- +DEF spool_id_chart_footer_script = 'cs_sqlstat_analytics_footer.sql'; +-- +DEF sql_id_01 = ' '; +DEF sql_id_02 = ' '; +DEF sql_id_03 = ' '; +DEF sql_id_04 = ' '; +DEF sql_id_05 = ' '; +DEF sql_id_06 = ' '; +DEF sql_id_07 = ' '; +DEF sql_id_08 = ' '; +DEF sql_id_09 = ' '; +DEF sql_id_10 = ' '; +DEF sql_id_11 = ' '; +DEF sql_id_12 = ' '; +DEF sql_id_13 = ' '; +-- +COL sql_id_01 NEW_V sql_id_01 TRUNC NOPRI; +COL sql_id_02 NEW_V sql_id_02 TRUNC NOPRI; +COL sql_id_03 NEW_V sql_id_03 TRUNC NOPRI; +COL sql_id_04 NEW_V sql_id_04 TRUNC NOPRI; +COL sql_id_05 NEW_V sql_id_05 TRUNC NOPRI; +COL sql_id_06 NEW_V sql_id_06 TRUNC NOPRI; +COL sql_id_07 NEW_V sql_id_07 TRUNC NOPRI; +COL sql_id_08 NEW_V sql_id_08 TRUNC NOPRI; +COL sql_id_09 NEW_V sql_id_09 TRUNC NOPRI; +COL sql_id_10 NEW_V sql_id_10 TRUNC NOPRI; +COL sql_id_11 NEW_V sql_id_11 TRUNC NOPRI; +COL sql_id_12 NEW_V sql_id_12 TRUNC NOPRI; +COL sql_id_13 NEW_V sql_id_13 TRUNC NOPRI; +-- +DEF plan_hash_value_01 = ' '; +DEF plan_hash_value_02 = ' '; +DEF plan_hash_value_03 = ' '; +DEF plan_hash_value_04 = ' '; +DEF plan_hash_value_05 = ' '; +DEF plan_hash_value_06 = ' '; +DEF plan_hash_value_07 = ' '; +DEF plan_hash_value_08 = ' '; +DEF plan_hash_value_09 = ' '; +DEF plan_hash_value_10 = ' '; +DEF plan_hash_value_11 = ' '; +DEF plan_hash_value_12 = ' '; +DEF plan_hash_value_13 = ' '; +-- +COL plan_hash_value_01 NEW_V plan_hash_value_01 TRUNC NOPRI; +COL plan_hash_value_02 NEW_V plan_hash_value_02 TRUNC NOPRI; +COL plan_hash_value_03 NEW_V plan_hash_value_03 TRUNC NOPRI; +COL plan_hash_value_04 NEW_V plan_hash_value_04 TRUNC NOPRI; +COL plan_hash_value_05 NEW_V plan_hash_value_05 TRUNC NOPRI; +COL plan_hash_value_06 NEW_V plan_hash_value_06 TRUNC NOPRI; +COL plan_hash_value_07 NEW_V plan_hash_value_07 TRUNC NOPRI; +COL plan_hash_value_08 NEW_V plan_hash_value_08 TRUNC NOPRI; +COL plan_hash_value_09 NEW_V plan_hash_value_09 TRUNC NOPRI; +COL plan_hash_value_10 NEW_V plan_hash_value_10 TRUNC NOPRI; +COL plan_hash_value_11 NEW_V plan_hash_value_11 TRUNC NOPRI; +COL plan_hash_value_12 NEW_V plan_hash_value_12 TRUNC NOPRI; +COL plan_hash_value_13 NEW_V plan_hash_value_13 TRUNC NOPRI; +-- +DEF value_01 = ' '; +DEF value_02 = ' '; +DEF value_03 = ' '; +DEF value_04 = ' '; +DEF value_05 = ' '; +DEF value_06 = ' '; +DEF value_07 = ' '; +DEF value_08 = ' '; +DEF value_09 = ' '; +DEF value_10 = ' '; +DEF value_11 = ' '; +DEF value_12 = ' '; +DEF value_13 = ' '; +-- +COL value_01 NEW_V value_01 TRUNC NOPRI; +COL value_02 NEW_V value_02 TRUNC NOPRI; +COL value_03 NEW_V value_03 TRUNC NOPRI; +COL value_04 NEW_V value_04 TRUNC NOPRI; +COL value_05 NEW_V value_05 TRUNC NOPRI; +COL value_06 NEW_V value_06 TRUNC NOPRI; +COL value_07 NEW_V value_07 TRUNC NOPRI; +COL value_08 NEW_V value_08 TRUNC NOPRI; +COL value_09 NEW_V value_09 TRUNC NOPRI; +COL value_10 NEW_V value_10 TRUNC NOPRI; +COL value_11 NEW_V value_11 TRUNC NOPRI; +COL value_12 NEW_V value_12 TRUNC NOPRI; +COL value_13 NEW_V value_13 TRUNC NOPRI; +-- +DEF data_points_01 = ' '; +DEF data_points_02 = ' '; +DEF data_points_03 = ' '; +DEF data_points_04 = ' '; +DEF data_points_05 = ' '; +DEF data_points_06 = ' '; +DEF data_points_07 = ' '; +DEF data_points_08 = ' '; +DEF data_points_09 = ' '; +DEF data_points_10 = ' '; +DEF data_points_11 = ' '; +DEF data_points_12 = ' '; +DEF data_points_13 = ' '; +-- +COL data_points_01 NEW_V data_points_01 TRUNC NOPRI; +COL data_points_02 NEW_V data_points_02 TRUNC NOPRI; +COL data_points_03 NEW_V data_points_03 TRUNC NOPRI; +COL data_points_04 NEW_V data_points_04 TRUNC NOPRI; +COL data_points_05 NEW_V data_points_05 TRUNC NOPRI; +COL data_points_06 NEW_V data_points_06 TRUNC NOPRI; +COL data_points_07 NEW_V data_points_07 TRUNC NOPRI; +COL data_points_08 NEW_V data_points_08 TRUNC NOPRI; +COL data_points_09 NEW_V data_points_09 TRUNC NOPRI; +COL data_points_10 NEW_V data_points_10 TRUNC NOPRI; +COL data_points_11 NEW_V data_points_11 TRUNC NOPRI; +COL data_points_12 NEW_V data_points_12 TRUNC NOPRI; +COL data_points_13 NEW_V data_points_13 TRUNC NOPRI; +-- +DEF sql_type_01 = ' '; +DEF sql_type_02 = ' '; +DEF sql_type_03 = ' '; +DEF sql_type_04 = ' '; +DEF sql_type_05 = ' '; +DEF sql_type_06 = ' '; +DEF sql_type_07 = ' '; +DEF sql_type_08 = ' '; +DEF sql_type_09 = ' '; +DEF sql_type_10 = ' '; +DEF sql_type_11 = ' '; +DEF sql_type_12 = ' '; +DEF sql_type_13 = ' '; +-- +COL sql_type_01 NEW_V sql_type_01 TRUNC NOPRI; +COL sql_type_02 NEW_V sql_type_02 TRUNC NOPRI; +COL sql_type_03 NEW_V sql_type_03 TRUNC NOPRI; +COL sql_type_04 NEW_V sql_type_04 TRUNC NOPRI; +COL sql_type_05 NEW_V sql_type_05 TRUNC NOPRI; +COL sql_type_06 NEW_V sql_type_06 TRUNC NOPRI; +COL sql_type_07 NEW_V sql_type_07 TRUNC NOPRI; +COL sql_type_08 NEW_V sql_type_08 TRUNC NOPRI; +COL sql_type_09 NEW_V sql_type_09 TRUNC NOPRI; +COL sql_type_10 NEW_V sql_type_10 TRUNC NOPRI; +COL sql_type_11 NEW_V sql_type_11 TRUNC NOPRI; +COL sql_type_12 NEW_V sql_type_12 TRUNC NOPRI; +COL sql_type_13 NEW_V sql_type_13 TRUNC NOPRI; +-- +DEF pdb_name_01 = ' '; +DEF pdb_name_02 = ' '; +DEF pdb_name_03 = ' '; +DEF pdb_name_04 = ' '; +DEF pdb_name_05 = ' '; +DEF pdb_name_06 = ' '; +DEF pdb_name_07 = ' '; +DEF pdb_name_08 = ' '; +DEF pdb_name_09 = ' '; +DEF pdb_name_10 = ' '; +DEF pdb_name_11 = ' '; +DEF pdb_name_12 = ' '; +DEF pdb_name_13 = ' '; +-- +COL pdb_name_01 NEW_V pdb_name_01 TRUNC NOPRI; +COL pdb_name_02 NEW_V pdb_name_02 TRUNC NOPRI; +COL pdb_name_03 NEW_V pdb_name_03 TRUNC NOPRI; +COL pdb_name_04 NEW_V pdb_name_04 TRUNC NOPRI; +COL pdb_name_05 NEW_V pdb_name_05 TRUNC NOPRI; +COL pdb_name_06 NEW_V pdb_name_06 TRUNC NOPRI; +COL pdb_name_07 NEW_V pdb_name_07 TRUNC NOPRI; +COL pdb_name_08 NEW_V pdb_name_08 TRUNC NOPRI; +COL pdb_name_09 NEW_V pdb_name_09 TRUNC NOPRI; +COL pdb_name_10 NEW_V pdb_name_10 TRUNC NOPRI; +COL pdb_name_11 NEW_V pdb_name_11 TRUNC NOPRI; +COL pdb_name_12 NEW_V pdb_name_12 TRUNC NOPRI; +COL pdb_name_13 NEW_V pdb_name_13 TRUNC NOPRI; +-- +DEF sql_text_01 = ' '; +DEF sql_text_02 = ' '; +DEF sql_text_03 = ' '; +DEF sql_text_04 = ' '; +DEF sql_text_05 = ' '; +DEF sql_text_06 = ' '; +DEF sql_text_07 = ' '; +DEF sql_text_08 = ' '; +DEF sql_text_09 = ' '; +DEF sql_text_10 = ' '; +DEF sql_text_11 = ' '; +DEF sql_text_12 = ' '; +DEF sql_text_13 = ' '; +-- +COL sql_text_01 NEW_V sql_text_01 TRUNC NOPRI; +COL sql_text_02 NEW_V sql_text_02 TRUNC NOPRI; +COL sql_text_03 NEW_V sql_text_03 TRUNC NOPRI; +COL sql_text_04 NEW_V sql_text_04 TRUNC NOPRI; +COL sql_text_05 NEW_V sql_text_05 TRUNC NOPRI; +COL sql_text_06 NEW_V sql_text_06 TRUNC NOPRI; +COL sql_text_07 NEW_V sql_text_07 TRUNC NOPRI; +COL sql_text_08 NEW_V sql_text_08 TRUNC NOPRI; +COL sql_text_09 NEW_V sql_text_09 TRUNC NOPRI; +COL sql_text_10 NEW_V sql_text_10 TRUNC NOPRI; +COL sql_text_11 NEW_V sql_text_11 TRUNC NOPRI; +COL sql_text_12 NEW_V sql_text_12 TRUNC NOPRI; +COL sql_text_13 NEW_V sql_text_13 TRUNC NOPRI; +-- +DEF module_01 = ' '; +DEF module_02 = ' '; +DEF module_03 = ' '; +DEF module_04 = ' '; +DEF module_05 = ' '; +DEF module_06 = ' '; +DEF module_07 = ' '; +DEF module_08 = ' '; +DEF module_09 = ' '; +DEF module_10 = ' '; +DEF module_11 = ' '; +DEF module_12 = ' '; +DEF module_13 = ' '; +-- +COL module_01 NEW_V module_01 TRUNC NOPRI; +COL module_02 NEW_V module_02 TRUNC NOPRI; +COL module_03 NEW_V module_03 TRUNC NOPRI; +COL module_04 NEW_V module_04 TRUNC NOPRI; +COL module_05 NEW_V module_05 TRUNC NOPRI; +COL module_06 NEW_V module_06 TRUNC NOPRI; +COL module_07 NEW_V module_07 TRUNC NOPRI; +COL module_08 NEW_V module_08 TRUNC NOPRI; +COL module_09 NEW_V module_09 TRUNC NOPRI; +COL module_10 NEW_V module_10 TRUNC NOPRI; +COL module_11 NEW_V module_11 TRUNC NOPRI; +COL module_12 NEW_V module_12 TRUNC NOPRI; +COL module_13 NEW_V module_13 TRUNC NOPRI; +-- +PRO +PRO please wait... computing top sql... +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +/****************************************************************************************/ +WITH +FUNCTION /* cs_sqlstat_analytics 1 */ get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqltext_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqltext_mv) */ + dbid, + con_id, + sql_id, + get_sql_hv(sql_text) AS sqlid, + application_category(DBMS_LOB.substr(sql_text, 1000), 'UNKNOWN') AS sql_type, -- passing UNKNOWN else KIEV envs would show a lot of unrelated SQL under RO + REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 1000), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text, + sql_text AS sql_fulltext + FROM dba_hist_sqltext + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + -- AND ('&&cs_sql_id.' IS NULL OR sql_id = TRIM('&&cs_sql_id.')) + AND &&cs_filter_1. + AND ROWNUM >= 1 +), +/****************************************************************************************/ +snapshot_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(snapshot_mv) */ + s.* + FROM dba_hist_snapshot s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND s.end_interval_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND s.end_interval_time <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlstats_mv) */ + s.* + FROM dba_hist_sqlstat s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + -- AND ('&&cs_sql_id.' IS NULL OR s.sql_id = TRIM('&&cs_sql_id.')) + AND &&cs_filter_1. + AND ('&&cs_include_sys.' = 'Y' OR s.parsing_user_id > 0) + AND s.optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT /*+ MATERIALIZE(@sqltext_mv) MATERIALIZE(@snapshot_mv) MATERIALIZE(@sqlstats_mv) NO_MERGE(@sqltext_mv) NO_MERGE(@snapshot_mv) NO_MERGE(@sqlstats_mv) ORDERED */ + t.begin_interval_time AS begin_timestamp, + t.end_interval_time AS end_timestamp, + (86400 * EXTRACT(DAY FROM (t.end_interval_time - t.begin_interval_time))) + (3600 * EXTRACT(HOUR FROM (t.end_interval_time - t.begin_interval_time))) + (60 * EXTRACT(MINUTE FROM (t.end_interval_time - t.begin_interval_time))) + EXTRACT(SECOND FROM (t.end_interval_time - t.begin_interval_time)) AS seconds, + s.instance_number, + s.parsing_schema_name, + s.module, + s.action, + s.sql_profile, + s.optimizer_cost, + s.con_id, + s.sql_id, + -- s.force_matching_signature, + s.plan_hash_value, + CASE s.parsing_schema_name WHEN 'SYS' THEN 'SYS' ELSE x.sql_type END AS sql_type, + x.sqlid, + x.sql_text, + x.sql_fulltext, + GREATEST(s.executions_delta, 0) AS delta_execution_count, + GREATEST(s.elapsed_time_delta, 0) AS delta_elapsed_time, + GREATEST(s.cpu_time_delta, 0) AS delta_cpu_time, + GREATEST(s.iowait_delta, 0) AS delta_user_io_wait_time, + GREATEST(s.apwait_delta, 0) AS delta_application_wait_time, + GREATEST(s.ccwait_delta, 0) AS delta_concurrency_time, + GREATEST(s.plsexec_time_delta, 0) AS delta_plsql_exec_time, + GREATEST(s.clwait_delta, 0) AS delta_cluster_wait_time, + GREATEST(s.javexec_time_delta, 0) AS delta_java_exec_time, + GREATEST(s.px_servers_execs_delta, 0) AS delta_px_servers_executions, + GREATEST(s.end_of_fetch_count_delta, 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls_delta, 0) AS delta_parse_calls, + GREATEST(s.invalidations_delta, 0) AS delta_invalidations, + GREATEST(s.loads_delta, 0) AS delta_loads, + GREATEST(s.buffer_gets_delta, 0) AS delta_buffer_gets, + GREATEST(s.disk_reads_delta, 0) AS delta_disk_reads, + GREATEST(s.direct_writes_delta, 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests_delta, 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes_delta, 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests_delta, 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes_delta, 0) AS delta_physical_write_bytes, + GREATEST(s.fetches_delta, 0) AS delta_fetch_count, + GREATEST(s.sorts_delta, 0) AS delta_sorts, + GREATEST(s.rows_processed_delta, 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes_delta, 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_offload_elig_bytes_delta, 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.cell_uncompressed_bytes_delta, 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_offload_return_bytes_delta, 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.obsolete_count + FROM snapshot_mv t, + sqlstats_mv s, + sqltext_mv x + WHERE s.snap_id = t.snap_id + AND s.dbid = t.dbid + AND s.instance_number = t.instance_number + AND x.dbid = s.dbid + AND x.sql_id = s.sql_id + AND x.con_id = s.con_id +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT MIN(d.begin_timestamp) AS begin_timestamp, + MAX(d.end_timestamp) AS end_timestamp, + SUM(d.seconds) AS seconds, + COUNT(*) AS data_points, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count) AS execs_delta, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_physical_read_bytes)/POWER(10,6)/NULLIF(SUM(d.seconds),0) AS mbps_r, + SUM(d.delta_physical_write_bytes)/POWER(10,6)/NULLIF(SUM(d.seconds),0) AS mbps_w, + (SUM(d.delta_physical_read_bytes)+SUM(d.delta_physical_write_bytes))/POWER(10,6)/NULLIF(SUM(d.seconds),0) AS mbps_rw, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.seconds),0) AS iops_r, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.seconds),0) AS iops_w, + (SUM(d.delta_physical_read_requests)+SUM(d.delta_physical_write_requests))/NULLIF(SUM(d.seconds),0) AS iops_rw, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + -- d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + d.sql_type, + d.sql_text, + -- d.sql_fulltext, -- not a GROUP BY column (CLOB) + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_elapsed_time) AS delta_elapsed_time, + SUM(d.delta_cpu_time) AS delta_cpu_time, + SUM(d.delta_user_io_wait_time) AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time) AS delta_application_wait_time, + SUM(d.delta_concurrency_time) AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time) AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time) AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time) AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes)/1e6 AS delta_physical_read_mp, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes)/1e6 AS delta_physical_write_mb, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes)/1e6 AS delta_io_interconnect_mb, + SUM(d.delta_cell_offload_elig_bytes)/1e6 AS delta_cell_offload_elig_mb, + SUM(d.delta_cell_uncompressed_bytes)/1e6 AS delta_cell_uncompressed_mb, + SUM(d.delta_cell_offload_retrn_bytes)/1e6 AS delta_cell_offload_retrn_mb, + SUM(d.version_count) AS version_count, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + SUM(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE d.seconds > 1 -- avoid snaps less than 1 sec appart + AND ('&&cs_sql_type.' IS NULL OR INSTR('&&cs_sql_type.', d.sql_type) > 0) + GROUP BY + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + -- d.parsing_schema_name, + d.module, + -- d.action, + d.plan_hash_value, + d.sql_type, + d.sql_text +), +/****************************************************************************************/ +full_list AS ( +SELECT m.con_id, + SUBSTR(get_pdb_name(m.con_id), 1, 30) AS pdb_name, + m.sqlid, + m.sql_id, + -- m.force_matching_signature, + -- m.sql_profile, + -- m.instance_number, + -- m.parsing_schema_name, + SUBSTR(m.module, 1, 32) AS module, + -- m.action, + m.plan_hash_value, + m.sql_type, + SUBSTR(m.sql_text, 1, 60) AS sql_text, + m.&&cs_sql_statistic. AS value, + ROW_NUMBER() OVER (ORDER BY m.&&cs_sql_statistic. DESC NULLS LAST) AS rn, + m.data_points + FROM sqlstats_metrics m + WHERE NVL(m.&&cs_sql_statistic., 0) >= 0 -- negative values are possible but unwanted +), +/****************************************************************************************/ +list AS ( +SELECT con_id, + pdb_name, + sqlid, + sql_id, + -- force_matching_signature, + -- sql_profile, + -- instance_number, + -- parsing_schema_name, + module, + -- action, + plan_hash_value, + sql_type, + sql_text, + value, + rn, + data_points + FROM full_list + WHERE rn < 14 +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + MAX(CASE rn WHEN 01 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_01, + MAX(CASE rn WHEN 02 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_02, + MAX(CASE rn WHEN 03 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_03, + MAX(CASE rn WHEN 04 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_04, + MAX(CASE rn WHEN 05 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_05, + MAX(CASE rn WHEN 06 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_06, + MAX(CASE rn WHEN 07 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_07, + MAX(CASE rn WHEN 08 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_08, + MAX(CASE rn WHEN 09 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_09, + MAX(CASE rn WHEN 10 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_10, + MAX(CASE rn WHEN 11 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_11, + MAX(CASE rn WHEN 12 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_12, + MAX(CASE rn WHEN 13 THEN RPAD(sql_id, 13, ' ') ELSE RPAD(' ', 13, ' ') END) AS sql_id_13, + MAX(CASE rn WHEN 01 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_01, + MAX(CASE rn WHEN 02 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_02, + MAX(CASE rn WHEN 03 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_03, + MAX(CASE rn WHEN 04 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_04, + MAX(CASE rn WHEN 05 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_05, + MAX(CASE rn WHEN 06 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_06, + MAX(CASE rn WHEN 07 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_07, + MAX(CASE rn WHEN 08 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_08, + MAX(CASE rn WHEN 09 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_09, + MAX(CASE rn WHEN 10 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_10, + MAX(CASE rn WHEN 11 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_11, + MAX(CASE rn WHEN 12 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_12, + MAX(CASE rn WHEN 13 THEN RPAD(plan_hash_value, 10, ' ') ELSE RPAD(' ', 10, ' ') END) AS plan_hash_value_13, + MAX(CASE rn WHEN 01 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_01, + MAX(CASE rn WHEN 02 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_02, + MAX(CASE rn WHEN 03 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_03, + MAX(CASE rn WHEN 04 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_04, + MAX(CASE rn WHEN 05 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_05, + MAX(CASE rn WHEN 06 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_06, + MAX(CASE rn WHEN 07 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_07, + MAX(CASE rn WHEN 08 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_08, + MAX(CASE rn WHEN 09 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_09, + MAX(CASE rn WHEN 10 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_10, + MAX(CASE rn WHEN 11 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_11, + MAX(CASE rn WHEN 12 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_12, + MAX(CASE rn WHEN 13 THEN LPAD(TO_CHAR(value, 'fm999,999,990.000'), 15, ' ') ELSE LPAD(' ', 15, ' ') END) AS value_13, + MAX(CASE rn WHEN 01 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_01, + MAX(CASE rn WHEN 02 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_02, + MAX(CASE rn WHEN 03 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_03, + MAX(CASE rn WHEN 04 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_04, + MAX(CASE rn WHEN 05 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_05, + MAX(CASE rn WHEN 06 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_06, + MAX(CASE rn WHEN 07 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_07, + MAX(CASE rn WHEN 08 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_08, + MAX(CASE rn WHEN 09 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_09, + MAX(CASE rn WHEN 10 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_10, + MAX(CASE rn WHEN 11 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_11, + MAX(CASE rn WHEN 12 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_12, + MAX(CASE rn WHEN 13 THEN LPAD(TO_CHAR(data_points, 'fm999,999,990'), 12, ' ') ELSE LPAD(' ', 12, ' ') END) AS data_points_13, + MAX(CASE rn WHEN 01 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_01, + MAX(CASE rn WHEN 02 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_02, + MAX(CASE rn WHEN 03 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_03, + MAX(CASE rn WHEN 04 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_04, + MAX(CASE rn WHEN 05 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_05, + MAX(CASE rn WHEN 06 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_06, + MAX(CASE rn WHEN 07 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_07, + MAX(CASE rn WHEN 08 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_08, + MAX(CASE rn WHEN 09 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_09, + MAX(CASE rn WHEN 10 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_10, + MAX(CASE rn WHEN 11 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_11, + MAX(CASE rn WHEN 12 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_12, + MAX(CASE rn WHEN 13 THEN RPAD(sql_type, 3, ' ') ELSE RPAD(' ', 3, ' ') END) AS sql_type_13, + MAX(CASE rn WHEN 01 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_01, + MAX(CASE rn WHEN 02 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_02, + MAX(CASE rn WHEN 03 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_03, + MAX(CASE rn WHEN 04 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_04, + MAX(CASE rn WHEN 05 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_05, + MAX(CASE rn WHEN 06 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_06, + MAX(CASE rn WHEN 07 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_07, + MAX(CASE rn WHEN 08 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_08, + MAX(CASE rn WHEN 09 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_09, + MAX(CASE rn WHEN 10 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_10, + MAX(CASE rn WHEN 11 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_11, + MAX(CASE rn WHEN 12 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_12, + MAX(CASE rn WHEN 13 THEN RPAD(pdb_name, 30, ' ') ELSE RPAD(' ', 30, ' ') END) AS pdb_name_13, + MAX(CASE rn WHEN 01 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_01, + MAX(CASE rn WHEN 02 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_02, + MAX(CASE rn WHEN 03 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_03, + MAX(CASE rn WHEN 04 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_04, + MAX(CASE rn WHEN 05 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_05, + MAX(CASE rn WHEN 06 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_06, + MAX(CASE rn WHEN 07 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_07, + MAX(CASE rn WHEN 08 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_08, + MAX(CASE rn WHEN 09 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_09, + MAX(CASE rn WHEN 10 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_10, + MAX(CASE rn WHEN 11 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_11, + MAX(CASE rn WHEN 12 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_12, + MAX(CASE rn WHEN 13 THEN RPAD(sql_text, 60, ' ') ELSE RPAD(' ', 60, ' ') END) AS sql_text_13, + MAX(CASE rn WHEN 01 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_01, + MAX(CASE rn WHEN 02 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_02, + MAX(CASE rn WHEN 03 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_03, + MAX(CASE rn WHEN 04 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_04, + MAX(CASE rn WHEN 05 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_05, + MAX(CASE rn WHEN 06 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_06, + MAX(CASE rn WHEN 07 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_07, + MAX(CASE rn WHEN 08 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_08, + MAX(CASE rn WHEN 09 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_09, + MAX(CASE rn WHEN 10 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_10, + MAX(CASE rn WHEN 11 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_11, + MAX(CASE rn WHEN 12 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_12, + MAX(CASE rn WHEN 13 THEN RPAD(module, 32, ' ') ELSE RPAD(' ', 32, ' ') END) AS module_13 + FROM list +/ +/****************************************************************************************/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_statistic.'||NVL2('&&cs_sql_id.', '_&&cs_sql_id.', NULL) AS cs_file_name FROM DUAL; +-- +DEF report_title = 'Top SQL by average "&&cs_sql_statistic." between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = '&&cs_sql_statistic.'; +DEF xaxis_title = ''; +-- +COL xaxis_title NEW_V xaxis_title NOPRI; +SELECT +'&&cs_rgn. &&cs_locale. &&cs_con_name. sys:&&cs_include_sys.'|| +CASE WHEN '&&cs_sql_type.' IS NOT NULL THEN ' Type:&&cs_sql_type.' END|| +CASE WHEN '&&cs2_sql_text_piece.' IS NOT NULL THEN ' Text:"%&&cs2_sql_text_piece.%"' END|| +CASE WHEN '&&cs_sql_id.' IS NOT NULL THEN ' SQL_ID:&&cs_sql_id.' END AS xaxis_title +FROM DUAL +/ +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_statistic." "&&cs_sql_type." "&&cs2_sql_text_piece." "&&cs_sql_id." "&&cs_include_sys." "&&cs_graph_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&sql_id_01. &&plan_hash_value_01. &&sql_type_01. &&pdb_name_01.', id:'01', type:'number'} +PRO ,{label:'&&sql_id_02. &&plan_hash_value_02. &&sql_type_02. &&pdb_name_02.', id:'02', type:'number'} +PRO ,{label:'&&sql_id_03. &&plan_hash_value_03. &&sql_type_03. &&pdb_name_03.', id:'03', type:'number'} +PRO ,{label:'&&sql_id_04. &&plan_hash_value_04. &&sql_type_04. &&pdb_name_04.', id:'04', type:'number'} +PRO ,{label:'&&sql_id_05. &&plan_hash_value_05. &&sql_type_05. &&pdb_name_05.', id:'05', type:'number'} +PRO ,{label:'&&sql_id_06. &&plan_hash_value_06. &&sql_type_06. &&pdb_name_06.', id:'06', type:'number'} +PRO ,{label:'&&sql_id_07. &&plan_hash_value_07. &&sql_type_07. &&pdb_name_07.', id:'07', type:'number'} +PRO ,{label:'&&sql_id_08. &&plan_hash_value_08. &&sql_type_08. &&pdb_name_08.', id:'08', type:'number'} +PRO ,{label:'&&sql_id_09. &&plan_hash_value_09. &&sql_type_09. &&pdb_name_09.', id:'09', type:'number'} +PRO ,{label:'&&sql_id_10. &&plan_hash_value_10. &&sql_type_10. &&pdb_name_10.', id:'10', type:'number'} +PRO ,{label:'&&sql_id_11. &&plan_hash_value_11. &&sql_type_11. &&pdb_name_11.', id:'11', type:'number'} +PRO ,{label:'&&sql_id_12. &&plan_hash_value_12. &&sql_type_12. &&pdb_name_12.', id:'12', type:'number'} +PRO ,{label:'&&sql_id_13. &&plan_hash_value_13. &&sql_type_13. &&pdb_name_13.', id:'13', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION /* cs_sqlstat_analytics 2 */ num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +FUNCTION get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqltext_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqltext_mv) */ + dbid, + con_id, + sql_id, + get_sql_hv(sql_text) AS sqlid, + application_category(DBMS_LOB.substr(sql_text, 1000), 'UNKNOWN') AS sql_type, -- passing UNKNOWN else KIEV envs would show a lot of unrelated SQL under RO + REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 1000), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text, + sql_text AS sql_fulltext + FROM dba_hist_sqltext + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND ('&&cs_sql_id.' IS NULL OR sql_id = TRIM('&&cs_sql_id.')) + -- AND &&cs_filter_1. -- for some reason it performs poorly when used on this query... it needs further investigation! + AND sql_id IN + (TRIM('&&sql_id_01') + ,TRIM('&&sql_id_02') + ,TRIM('&&sql_id_03') + ,TRIM('&&sql_id_04') + ,TRIM('&&sql_id_05') + ,TRIM('&&sql_id_06') + ,TRIM('&&sql_id_07') + ,TRIM('&&sql_id_08') + ,TRIM('&&sql_id_09') + ,TRIM('&&sql_id_10') + ,TRIM('&&sql_id_11') + ,TRIM('&&sql_id_12') + ,TRIM('&&sql_id_13') + ) + AND ROWNUM >= 1 +), +/****************************************************************************************/ +snapshot_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(snapshot_mv) */ + s.* + FROM dba_hist_snapshot s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND s.end_interval_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND s.end_interval_time <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlstats_mv) */ + s.* + FROM dba_hist_sqlstat s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs_sql_id.' IS NULL OR s.sql_id = TRIM('&&cs_sql_id.')) + AND s.optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + -- AND &&cs_filter_1. -- for some reason it performs poorly when used on this query... it needs further investigation! + -- AND ('&&cs_include_sys.' = 'Y' OR s.parsing_user_id > 0) -- not needed here since other filters (below) already considered this + AND s.sql_id IN + (TRIM('&&sql_id_01') + ,TRIM('&&sql_id_02') + ,TRIM('&&sql_id_03') + ,TRIM('&&sql_id_04') + ,TRIM('&&sql_id_05') + ,TRIM('&&sql_id_06') + ,TRIM('&&sql_id_07') + ,TRIM('&&sql_id_08') + ,TRIM('&&sql_id_09') + ,TRIM('&&sql_id_10') + ,TRIM('&&sql_id_11') + ,TRIM('&&sql_id_12') + ,TRIM('&&sql_id_13') + ) + AND s.plan_hash_value IN + (TO_NUMBER(TRIM('&&plan_hash_value_01.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_02.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_03.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_04.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_05.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_06.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_07.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_08.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_09.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_10.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_11.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_12.')) + ,TO_NUMBER(TRIM('&&plan_hash_value_13.')) + ) + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT /*+ MATERIALIZE(@sqltext_mv) MATERIALIZE(@snapshot_mv) MATERIALIZE(@sqlstats_mv) NO_MERGE(@sqltext_mv) NO_MERGE(@snapshot_mv) NO_MERGE(@sqlstats_mv) ORDERED */ + t.begin_interval_time AS begin_timestamp, + t.end_interval_time AS end_timestamp, + (86400 * EXTRACT(DAY FROM (t.end_interval_time - t.begin_interval_time))) + (3600 * EXTRACT(HOUR FROM (t.end_interval_time - t.begin_interval_time))) + (60 * EXTRACT(MINUTE FROM (t.end_interval_time - t.begin_interval_time))) + EXTRACT(SECOND FROM (t.end_interval_time - t.begin_interval_time)) AS seconds, + s.instance_number, + s.parsing_schema_name, + s.module, + s.action, + s.sql_profile, + s.optimizer_cost, + s.con_id, + s.sql_id, + -- s.force_matching_signature, + s.plan_hash_value, + CASE s.parsing_schema_name WHEN 'SYS' THEN 'SYS' ELSE x.sql_type END AS sql_type, + x.sqlid, + x.sql_text, + x.sql_fulltext, + GREATEST(s.executions_delta, 0) AS delta_execution_count, + GREATEST(s.elapsed_time_delta, 0) AS delta_elapsed_time, + GREATEST(s.cpu_time_delta, 0) AS delta_cpu_time, + GREATEST(s.iowait_delta, 0) AS delta_user_io_wait_time, + GREATEST(s.apwait_delta, 0) AS delta_application_wait_time, + GREATEST(s.ccwait_delta, 0) AS delta_concurrency_time, + GREATEST(s.plsexec_time_delta, 0) AS delta_plsql_exec_time, + GREATEST(s.clwait_delta, 0) AS delta_cluster_wait_time, + GREATEST(s.javexec_time_delta, 0) AS delta_java_exec_time, + GREATEST(s.px_servers_execs_delta, 0) AS delta_px_servers_executions, + GREATEST(s.end_of_fetch_count_delta, 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls_delta, 0) AS delta_parse_calls, + GREATEST(s.invalidations_delta, 0) AS delta_invalidations, + GREATEST(s.loads_delta, 0) AS delta_loads, + GREATEST(s.buffer_gets_delta, 0) AS delta_buffer_gets, + GREATEST(s.disk_reads_delta, 0) AS delta_disk_reads, + GREATEST(s.direct_writes_delta, 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests_delta, 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes_delta, 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests_delta, 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes_delta, 0) AS delta_physical_write_bytes, + GREATEST(s.fetches_delta, 0) AS delta_fetch_count, + GREATEST(s.sorts_delta, 0) AS delta_sorts, + GREATEST(s.rows_processed_delta, 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes_delta, 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_offload_elig_bytes_delta, 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.cell_uncompressed_bytes_delta, 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_offload_return_bytes_delta, 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.obsolete_count + FROM snapshot_mv t, + sqlstats_mv s, + sqltext_mv x + WHERE s.snap_id = t.snap_id + AND s.dbid = t.dbid + AND s.instance_number = t.instance_number + AND x.dbid = s.dbid + AND x.sql_id = s.sql_id + AND x.con_id = s.con_id +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT d.begin_timestamp, + d.end_timestamp, + SUM(d.seconds) AS seconds, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count) AS execs_delta, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_physical_read_bytes)/POWER(10,6)/NULLIF(SUM(d.seconds),0) AS mbps_r, + SUM(d.delta_physical_write_bytes)/POWER(10,6)/NULLIF(SUM(d.seconds),0) AS mbps_w, + (SUM(d.delta_physical_read_bytes)+SUM(d.delta_physical_write_bytes))/POWER(10,6)/NULLIF(SUM(d.seconds),0) AS mbps_rw, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.seconds),0) AS iops_r, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.seconds),0) AS iops_w, + (SUM(d.delta_physical_read_requests)+SUM(d.delta_physical_write_requests))/NULLIF(SUM(d.seconds),0) AS iops_rw, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + d.con_id, + SUBSTR(get_pdb_name(d.con_id), 1, 30) AS pdb_name, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + -- d.parsing_schema_name, + -- d.module, + -- d.action, + d.plan_hash_value, + d.sql_type, + d.sql_text, + -- d.sql_fulltext, -- not a GROUP BY column (CLOB) + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_elapsed_time) AS delta_elapsed_time, + SUM(d.delta_cpu_time) AS delta_cpu_time, + SUM(d.delta_user_io_wait_time) AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time) AS delta_application_wait_time, + SUM(d.delta_concurrency_time) AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time) AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time) AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time) AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes)/1e6 AS delta_physical_read_mb, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes)/1e6 AS delta_physical_write_mb, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes)/1e6 AS delta_io_interconnect_mb, + SUM(d.delta_cell_offload_elig_bytes)/1e6 AS delta_cell_offload_elig_mb, + SUM(d.delta_cell_uncompressed_bytes)/1e6 AS delta_cell_uncompressed_mb, + SUM(d.delta_cell_offload_retrn_bytes)/1e6 AS delta_cell_offload_retrn_mb, + SUM(d.version_count) AS version_count, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + SUM(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE d.seconds > 1 -- avoid snaps less than 1 sec appart + AND ('&&cs_sql_type.' IS NULL OR INSTR('&&cs_sql_type.', d.sql_type) > 0) + GROUP BY + d.begin_timestamp, + d.end_timestamp, + d.con_id, + d.sqlid, + d.sql_id, + -- d.force_matching_signature, + -- d.sql_profile, + -- d.instance_number, + -- d.parsing_schema_name, + -- d.module, + -- d.action, + d.plan_hash_value, + d.sql_type, + d.sql_text +), +/****************************************************************************************/ +full_list AS ( +SELECT m.begin_timestamp, + m.end_timestamp, + m.seconds, + m.con_id, + m.pdb_name, + m.sqlid, + m.sql_id, + -- m.force_matching_signature, + -- m.sql_profile, + -- m.instance_number, + -- m.parsing_schema_name, + -- m.module, + -- m.action, + m.plan_hash_value, + m.sql_type, + m.sql_text, + m.&&cs_sql_statistic. AS value + FROM sqlstats_metrics m + WHERE NVL(m.&&cs_sql_statistic., 0) >= 0 -- negative values are possible but unwanted + AND m.pdb_name IN + (TRIM('&&pdb_name_01.') + ,TRIM('&&pdb_name_02.') + ,TRIM('&&pdb_name_03.') + ,TRIM('&&pdb_name_04.') + ,TRIM('&&pdb_name_05.') + ,TRIM('&&pdb_name_06.') + ,TRIM('&&pdb_name_07.') + ,TRIM('&&pdb_name_08.') + ,TRIM('&&pdb_name_09.') + ,TRIM('&&pdb_name_10.') + ,TRIM('&&pdb_name_11.') + ,TRIM('&&pdb_name_12.') + ,TRIM('&&pdb_name_13.') + ) +), +/****************************************************************************************/ +list AS ( +SELECT end_timestamp AS time, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_01.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_01.')) AND pdb_name = TRIM('&&pdb_name_01.') THEN value ELSE 0 END) AS value_01, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_02.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_02.')) AND pdb_name = TRIM('&&pdb_name_02.') THEN value ELSE 0 END) AS value_02, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_03.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_03.')) AND pdb_name = TRIM('&&pdb_name_03.') THEN value ELSE 0 END) AS value_03, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_04.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_04.')) AND pdb_name = TRIM('&&pdb_name_04.') THEN value ELSE 0 END) AS value_04, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_05.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_05.')) AND pdb_name = TRIM('&&pdb_name_05.') THEN value ELSE 0 END) AS value_05, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_06.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_06.')) AND pdb_name = TRIM('&&pdb_name_06.') THEN value ELSE 0 END) AS value_06, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_07.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_07.')) AND pdb_name = TRIM('&&pdb_name_07.') THEN value ELSE 0 END) AS value_07, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_08.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_08.')) AND pdb_name = TRIM('&&pdb_name_08.') THEN value ELSE 0 END) AS value_08, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_09.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_09.')) AND pdb_name = TRIM('&&pdb_name_09.') THEN value ELSE 0 END) AS value_09, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_10.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_10.')) AND pdb_name = TRIM('&&pdb_name_10.') THEN value ELSE 0 END) AS value_10, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_11.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_11.')) AND pdb_name = TRIM('&&pdb_name_11.') THEN value ELSE 0 END) AS value_11, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_12.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_12.')) AND pdb_name = TRIM('&&pdb_name_12.') THEN value ELSE 0 END) AS value_12, + SUM(CASE WHEN sql_id = TRIM('&&sql_id_13.') AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value_13.')) AND pdb_name = TRIM('&&pdb_name_13.') THEN value ELSE 0 END) AS value_13 + FROM full_list + GROUP BY + end_timestamp +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.value_01, 3)|| + ','||num_format(q.value_02, 3)|| + ','||num_format(q.value_03, 3)|| + ','||num_format(q.value_04, 3)|| + ','||num_format(q.value_05, 3)|| + ','||num_format(q.value_06, 3)|| + ','||num_format(q.value_07, 3)|| + ','||num_format(q.value_08, 3)|| + ','||num_format(q.value_09, 3)|| + ','||num_format(q.value_10, 3)|| + ','||num_format(q.value_11, 3)|| + ','||num_format(q.value_12, 3)|| + ','||num_format(q.value_13, 3)|| + ']' + FROM list q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlstat_analytics_aggregate.sql b/csierra/cs_sqlstat_analytics_aggregate.sql new file mode 100644 index 0000000..d751291 --- /dev/null +++ b/csierra/cs_sqlstat_analytics_aggregate.sql @@ -0,0 +1,743 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: ssaa.sql | cs_sqlstat_analytics_aggregate.sql +-- +-- Purpose: SQL Statistics Analytics Aggregate (AWR) - 15m Granularity +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/03/30 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlstat_analytics_aggregate.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +-- @@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlstat_analytics_aggregate'; +DEF cs_script_acronym = 'ssaa.sql | '; +-- +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO +PRO SQL Statistic Note +PRO ~~~~~~~~~~~~~ ~~~~~~ +PRO delta_execution_count +PRO delta_elapsed_time +PRO delta_cpu_time +PRO delta_user_io_wait_time +PRO delta_application_wait_time +PRO delta_concurrency_time +PRO delta_plsql_exec_time +PRO delta_cluster_wait_time +PRO delta_java_exec_time +PRO delta_px_servers_executions +PRO delta_end_of_fetch_count +PRO delta_parse_calls +PRO delta_invalidations +PRO delta_loads +PRO delta_buffer_gets +PRO delta_disk_reads +PRO delta_direct_writes +PRO delta_physical_read_requests +PRO delta_physical_read_mb +PRO delta_physical_write_requests +PRO delta_physical_write_mb +PRO delta_fetch_count +PRO delta_sorts +PRO delta_rows_processed +PRO delta_io_interconnect_mb +PRO delta_cell_offload_elig_mb +PRO delta_cell_uncompressed_mb +PRO delta_cell_offload_retrn_mb +PRO version_count +PRO sharable_mem_mb +PRO obsolete_count +PRO et_ms_per_exec ................... default +PRO cpu_ms_per_exec +PRO io_ms_per_exec +PRO appl_ms_per_exec +PRO conc_ms_per_exec +PRO plsql_ms_per_exec +PRO cluster_ms_per_exec +PRO java_ms_per_exec +PRO et_aas ........................... common +PRO cpu_aas +PRO io_aas +PRO appl_aas +PRO conc_aas +PRO plsql_aas +PRO cluster_aas +PRO java_aas +PRO execs_per_sec .................... common +PRO px_execs_per_sec +PRO end_of_fetch_per_sec +PRO parses_per_sec +PRO inval_per_sec +PRO loads_per_sec +PRO gets_per_exec .................... common +PRO reads_per_exec +PRO direct_writes_per_exec +PRO phy_read_req_per_exec +PRO phy_read_mb_per_exec +PRO phy_write_req_per_exec +PRO phy_write_mb_per_exec +PRO fetches_per_exec +PRO sorts_per_exec +PRO rows_per_exec .................... common +PRO et_ms_per_row +PRO cpu_ms_per_row +PRO io_ms_per_row +PRO gets_per_row +PRO reads_per_row +PRO mbps_r +PRO mbps_w +PRO mbps_rw +PRO iops_r +PRO iops_w +PRO iops_rw +PRO +PRO 3. SQL Statistic: [{et_ms_per_exec}|] +DEF cs_sql_statistic = '&3.'; +UNDEF 3; +COL cs_sql_statistic NEW_V cs_sql_statistic NOPRI; +SELECT LOWER(NVL(TRIM('&&cs_sql_statistic.'), 'et_ms_per_exec')) AS cs_sql_statistic FROM DUAL +/ +-- +PRO +PRO 4. SQL Type: [{null}|TP|RO|BG|IG|UN|SYS|TP,RO|TP,RO,BG] +DEF cs_sql_type = '&4.'; +UNDEF 4; +COL cs_sql_type NEW_V cs_sql_type NOPRI; +SELECT UPPER(TRIM('&&cs_sql_type.')) AS cs_sql_type FROM DUAL +/ +-- +PRO +PRO 5. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&5.'; +UNDEF 5; +-- +PRO +PRO 6. SQL_ID (optional): +DEF cs_sql_id = '&6.'; +UNDEF 6; +DEF cs_filter_1 = ''; +COL cs_filter_1 NEW_V cs_filter_1 NOPRI; +SELECT CASE WHEN LENGTH('&&cs_sql_id.') = 13 THEN 'sql_id = ''&&cs_sql_id.''' ELSE '1 = 1' END AS cs_filter_1 FROM DUAL +/ +-- +PRO +PRO 7. Include SYS: [{N}|Y] +DEF cs_include_sys = '&7.'; +UNDEF 7; +COL cs_include_sys NEW_V cs_include_sys NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs_include_sys.')) IN ('Y', 'N') THEN UPPER(TRIM('&&cs_include_sys.')) ELSE 'N' END AS cs_include_sys FROM DUAL +/ +-- +PRO +PRO 8. Graph Type: [{Scatter}|Line] +DEF graph_type = '&8.'; +UNDEF 8; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('Line', 'Scatter') THEN '&&graph_type.' ELSE 'Scatter' END AS cs_graph_type FROM DUAL +/ +-- +PRO +PRO 9. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&9.'; +UNDEF 9; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +DEF spool_id_chart_footer_script = 'cs_null.sql'; +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_statistic.'||NVL2('&&cs_sql_id.', '_&&cs_sql_id.', NULL) AS cs_file_name FROM DUAL; +-- +DEF report_title = 'Aggregate "&&cs_sql_statistic." between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF vaxis_title = '&&cs_sql_statistic.'; +DEF xaxis_title = ''; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}"; +-- +COL xaxis_title NEW_V xaxis_title NOPRI; +SELECT +'&&cs_rgn. &&cs_locale. &&cs_con_name. sys:&&cs_include_sys.'|| +CASE WHEN '&&cs_sql_type.' IS NOT NULL THEN ' Type:&&cs_sql_type.' END|| +CASE WHEN '&&cs2_sql_text_piece.' IS NOT NULL THEN ' Text:"%&&cs2_sql_text_piece.%"' END|| +CASE WHEN '&&cs_sql_id.' IS NOT NULL THEN ' SQL_ID:&&cs_sql_id.' END AS xaxis_title +FROM DUAL +/ +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = '
2) &&xaxis_title.'; +DEF chart_foot_note_3 = "
"; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_sql_statistic." "&&cs_sql_type." "&&cs2_sql_text_piece." "&&cs_sql_id." "&&cs_include_sys." "&&cs_graph_type." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&cs_sql_statistic.', id:'01', type:'number'} +PRO ] +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION /* cs_sqlstat_analytics_aggregate 1 */ num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +FUNCTION get_pdb_name (p_con_id IN VARCHAR2) +RETURN VARCHAR2 +IS + l_pdb_name VARCHAR2(4000); +BEGIN + SELECT name + INTO l_pdb_name + FROM v$containers + WHERE con_id = TO_NUMBER(p_con_id); + -- + RETURN l_pdb_name; +END get_pdb_name; +/****************************************************************************************/ +FUNCTION application_category ( + p_sql_text IN VARCHAR2, + p_command_name IN VARCHAR2 DEFAULT NULL +) +RETURN VARCHAR2 +IS + k_appl_handle_prefix CONSTANT VARCHAR2(30) := CHR(37)||'/*'||CHR(37); + k_appl_handle_suffix CONSTANT VARCHAR2(30) := CHR(37)||'*/'||CHR(37); +BEGIN + IF p_sql_text LIKE k_appl_handle_prefix||'Transaction Processing'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'addTransactionRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkEndRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkStartRowValid'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'exists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch commit by idempotency token'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest transactions for cache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find lower commit id for transaction cache warm up'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'findMatchingRow'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionCommitID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNewTransactionID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getTransactionProgress'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockForCommit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'lockKievTransactor'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'putBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readTransactionsSince'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'recordTransactionState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'setValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SPM:CP'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateNextKievTransID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'upsert_transactor_state'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'writeTransactionKeys'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'QueryTransactorHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'WriteBucketValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch commit'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'batch mutation log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetchAllIdentities'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_epoch'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readFromTxorStateBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyBeginTxn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateTransactorState'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'legacyGetDataStoreMaxTransaction'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getWithVersionOffsetSql'||k_appl_handle_suffix + OR LOWER(p_sql_text) LIKE CHR(37)||'lock table kievtransactions'||CHR(37) + -- + OR p_sql_text LIKE k_appl_handle_prefix||'Set ddl lock timeout for session'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'delete.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getForUpdate.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert.step_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Drop partition'||k_appl_handle_suffix + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Read Only'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIndexSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketKeySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketValueSelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countTransactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch snapshots'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get system time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAutoSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextIdentityValue'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Lock row Bucket_Snapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'longFromDual'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performContinuedScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performFirstRowsScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSnapshotScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performStartScanValues'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch latest revisions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch max sequence for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for'||k_appl_handle_suffix -- streaming + OR p_sql_text LIKE k_appl_handle_prefix||'Find High value for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find partitions for'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Init lock name for snapshot'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'List snapshot tables.'||k_appl_handle_suffix -- snapshot + OR p_sql_text LIKE k_appl_handle_prefix||'Tail read bucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'performSegmentedScanQuery'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listArchiveStatusByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listAssignmentsByIndexName'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'listHosts'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateHost'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateArchiveStatus'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateOperationLock'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KIEVWORKFLOWS table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetOldestLsn'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'GetStreamRecords'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if another workflow is running'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete old workflows from'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getPriorWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateLeaseTypes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getHistoricalAssignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getAllWorkflowDefinitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getVersionHistory'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Find interval partitions for schema'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getStepInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getOldestGcWorkflowInstance'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getNextRecordID'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.dataplane_alias'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseNonce'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases_types'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.leases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getByKey.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRecordId.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.historical_assignments'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitionDropDisabled'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Check if there are active rows for partition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getRunningInstancesCount'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_definitions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLatestWorkflowDefinition'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLast.step_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.workflow_instances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get.step_instances'||k_appl_handle_suffix + THEN RETURN 'RO'; /* Read Only */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Background'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Bootstrap snapshot table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'bucketIdentitySelect'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'checkMissingTables'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllBuckets'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countAllRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKievTransactionRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countKtkRows'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete garbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Delete rows from'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deleteBucketGarbage'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateSequences'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'fetch_leader_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventMaxId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'gcEventTryInsert'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Get txn at time'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getCurEndTime'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getDBSchemaVersion'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getEndTimeOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getGCLogEntries'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMaxTransactionOlderThan'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSchemaMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getSupportedLibVersions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashBucket'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'hashSnapshot'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Populate workspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'populateBucketGCWorkspace'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'primeTxCache'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'readOnlyRoleExists'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Row count between transactions'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'secondsSinceLastGcEvent'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'sync_leadership'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Test if table Kiev_S'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Update snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'update_heartbeat'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateIfWorkspaceEmpty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'verify_is_leader'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checking existence of Mutation Log Table'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONKEYS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Checks if KIEVTRANSACTIONS table is empty'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KT'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Fetch partition interval for KTK'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'Insert dynamic config'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createProxyUser'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'createSequence'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'deregister_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropAutoSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropBucketFromMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'dropSequenceMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactionKeys table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get KievTransactions table indexes'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'get session count'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'initializeMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isKtPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'isPartitioned'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'log'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'register_host'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'updateSchemaVersionInDB'||k_appl_handle_suffix + -- + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeases'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getFutureWorks'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getMinorVersionsAtAndAfter'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getLeaseDecorators'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getUnownedLeasesByFiFo'||k_appl_handle_suffix + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_sql_text LIKE k_appl_handle_prefix||'Ignore'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'enumerateKievPdbs'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'getJDBCSuffix'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'MV_REFRESH'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'null'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectColumnsForTable'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'selectDatastoreMd'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'SQL Analyze('||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'validateDataStoreId'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countMetadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'countSequenceInstances'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'iod-telemetry'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'insert snapshot metadata'||k_appl_handle_suffix + OR p_sql_text LIKE k_appl_handle_prefix||'OPT_DYN_SAMP'||k_appl_handle_suffix + THEN RETURN 'IG'; /* Ignore */ + -- + ELSIF p_command_name IN ('INSERT', 'UPDATE') + THEN RETURN 'TP'; /* Transaction Processing */ + -- + ELSIF p_command_name = 'DELETE' + THEN RETURN 'BG'; /* Background */ + -- + ELSIF p_command_name = 'SELECT' + THEN RETURN 'RO'; /* Read Only */ + -- + ELSE RETURN 'UN'; /* Unknown */ + END IF; +END application_category; +/****************************************************************************************/ +FUNCTION get_sql_hv (p_sqltext IN CLOB) +RETURN VARCHAR2 +IS + l_sqltext CLOB := REGEXP_REPLACE(p_sqltext, '/\* REPO_[A-Z0-9]{1,25} \*/ '); -- removes "/* REPO_IFCDEXZQGAYDAMBQHAYQ */ " DBPERF-8819 +BEGIN + IF l_sqltext LIKE '%/* %(%,%)% [%] */%' THEN l_sqltext := REGEXP_REPLACE(l_sqltext, '\[([[:digit:]]{4,5})\] '); END IF; -- removes bucket_id "[1001] " + RETURN LPAD(MOD(DBMS_SQLTUNE.sqltext_to_signature(l_sqltext),100000),5,'0'); +END get_sql_hv; +/****************************************************************************************/ +sqltext_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqltext_mv) */ + dbid, + con_id, + sql_id, + get_sql_hv(sql_text) AS sqlid, + application_category(DBMS_LOB.substr(sql_text, 1000), 'UNKNOWN') AS sql_type, -- passing UNKNOWN else KIEV envs would show a lot of unrelated SQL under RO + REPLACE(REPLACE(DBMS_LOB.substr(sql_text, 1000), CHR(10), CHR(32)), CHR(9), CHR(32)) AS sql_text, + sql_text AS sql_fulltext + FROM dba_hist_sqltext + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND ('&&cs2_sql_text_piece.' IS NULL OR UPPER(DBMS_LOB.substr(sql_text, 1000)) LIKE '%'||UPPER(TRIM('&&cs2_sql_text_piece.'))||'%') + AND ('&&cs_sql_id.' IS NULL OR sql_id = TRIM('&&cs_sql_id.')) + -- AND &&cs_filter_1. -- for some reason it performs poorly when used on this query... it needs further investigation! + AND ROWNUM >= 1 +), +/****************************************************************************************/ +snapshot_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(snapshot_mv) */ + s.* + FROM dba_hist_snapshot s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND s.end_interval_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND s.end_interval_time <= TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_mv AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlstats_mv) */ + s.* + FROM dba_hist_sqlstat s + WHERE s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + 1 + AND ('&&cs_sql_id.' IS NULL OR s.sql_id = TRIM('&&cs_sql_id.')) + AND s.optimizer_cost > 0 -- if 0 or null then whole row is suspected bogus + -- AND &&cs_filter_1. -- for some reason it performs poorly when used on this query... it needs further investigation! + -- AND ('&&cs_include_sys.' = 'Y' OR s.parsing_user_id > 0) -- not needed here since other filters (below) already considered this + AND ROWNUM >= 1 +), +/****************************************************************************************/ +sqlstats_deltas AS ( +SELECT /*+ MATERIALIZE(@sqltext_mv) MATERIALIZE(@snapshot_mv) MATERIALIZE(@sqlstats_mv) NO_MERGE(@sqltext_mv) NO_MERGE(@snapshot_mv) NO_MERGE(@sqlstats_mv) ORDERED */ + t.begin_interval_time AS begin_timestamp, + t.end_interval_time AS end_timestamp, + (86400 * EXTRACT(DAY FROM (t.end_interval_time - t.begin_interval_time))) + (3600 * EXTRACT(HOUR FROM (t.end_interval_time - t.begin_interval_time))) + (60 * EXTRACT(MINUTE FROM (t.end_interval_time - t.begin_interval_time))) + EXTRACT(SECOND FROM (t.end_interval_time - t.begin_interval_time)) AS seconds, + s.instance_number, + s.parsing_schema_name, + s.module, + s.action, + s.sql_profile, + s.optimizer_cost, + s.con_id, + s.sql_id, + s.plan_hash_value, + CASE s.parsing_schema_name WHEN 'SYS' THEN 'SYS' ELSE x.sql_type END AS sql_type, + x.sqlid, + x.sql_text, + x.sql_fulltext, + GREATEST(s.executions_delta, 0) AS delta_execution_count, + GREATEST(s.elapsed_time_delta, 0) AS delta_elapsed_time, + GREATEST(s.cpu_time_delta, 0) AS delta_cpu_time, + GREATEST(s.iowait_delta, 0) AS delta_user_io_wait_time, + GREATEST(s.apwait_delta, 0) AS delta_application_wait_time, + GREATEST(s.ccwait_delta, 0) AS delta_concurrency_time, + GREATEST(s.plsexec_time_delta, 0) AS delta_plsql_exec_time, + GREATEST(s.clwait_delta, 0) AS delta_cluster_wait_time, + GREATEST(s.javexec_time_delta, 0) AS delta_java_exec_time, + GREATEST(s.px_servers_execs_delta, 0) AS delta_px_servers_executions, + GREATEST(s.end_of_fetch_count_delta, 0) AS delta_end_of_fetch_count, + GREATEST(s.parse_calls_delta, 0) AS delta_parse_calls, + GREATEST(s.invalidations_delta, 0) AS delta_invalidations, + GREATEST(s.loads_delta, 0) AS delta_loads, + GREATEST(s.buffer_gets_delta, 0) AS delta_buffer_gets, + GREATEST(s.disk_reads_delta, 0) AS delta_disk_reads, + GREATEST(s.direct_writes_delta, 0) AS delta_direct_writes, + GREATEST(s.physical_read_requests_delta, 0) AS delta_physical_read_requests, + GREATEST(s.physical_read_bytes_delta, 0) AS delta_physical_read_bytes, + GREATEST(s.physical_write_requests_delta, 0) AS delta_physical_write_requests, + GREATEST(s.physical_write_bytes_delta, 0) AS delta_physical_write_bytes, + GREATEST(s.fetches_delta, 0) AS delta_fetch_count, + GREATEST(s.sorts_delta, 0) AS delta_sorts, + GREATEST(s.rows_processed_delta, 0) AS delta_rows_processed, + GREATEST(s.io_interconnect_bytes_delta, 0) AS delta_io_interconnect_bytes, + GREATEST(s.io_offload_elig_bytes_delta, 0) AS delta_cell_offload_elig_bytes, + GREATEST(s.cell_uncompressed_bytes_delta, 0) AS delta_cell_uncompressed_bytes, + GREATEST(s.io_offload_return_bytes_delta, 0) AS delta_cell_offload_retrn_bytes, + s.version_count, + s.sharable_mem, + s.obsolete_count + FROM snapshot_mv t, + sqlstats_mv s, + sqltext_mv x + WHERE s.snap_id = t.snap_id + AND s.dbid = t.dbid + AND s.instance_number = t.instance_number + AND x.dbid = s.dbid + AND x.sql_id = s.sql_id + AND x.con_id = s.con_id +), +/****************************************************************************************/ +sqlstats_metrics AS ( +SELECT --d.begin_timestamp, + d.end_timestamp, + SUM(d.seconds) AS seconds, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS et_ms_per_exec, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cpu_ms_per_exec, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS io_ms_per_exec, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS appl_ms_per_exec, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS conc_ms_per_exec, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS plsql_ms_per_exec, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS cluster_ms_per_exec, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.delta_execution_count),0)/1e3 AS java_ms_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(SUM(d.seconds),0)/1e6 AS et_aas, + SUM(d.delta_cpu_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cpu_aas, + SUM(d.delta_user_io_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS io_aas, + SUM(d.delta_application_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS appl_aas, + SUM(d.delta_concurrency_time)/NULLIF(SUM(d.seconds),0)/1e6 AS conc_aas, + SUM(d.delta_plsql_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS plsql_aas, + SUM(d.delta_cluster_wait_time)/NULLIF(SUM(d.seconds),0)/1e6 AS cluster_aas, + SUM(d.delta_java_exec_time)/NULLIF(SUM(d.seconds),0)/1e6 AS java_aas, + SUM(d.delta_execution_count) AS execs_delta, + SUM(d.delta_execution_count)/NULLIF(SUM(d.seconds),0) AS execs_per_sec, + SUM(d.delta_px_servers_executions)/NULLIF(SUM(d.seconds),0) AS px_execs_per_sec, + SUM(d.delta_end_of_fetch_count)/NULLIF(SUM(d.seconds),0) AS end_of_fetch_per_sec, + SUM(d.delta_parse_calls)/NULLIF(SUM(d.seconds),0) AS parses_per_sec, + SUM(d.delta_invalidations)/NULLIF(SUM(d.seconds),0) AS inval_per_sec, + SUM(d.delta_loads)/NULLIF(SUM(d.seconds),0) AS loads_per_sec, + SUM(d.delta_buffer_gets)/NULLIF(SUM(d.delta_execution_count),0) AS gets_per_exec, + SUM(d.delta_disk_reads)/NULLIF(SUM(d.delta_execution_count),0) AS reads_per_exec, + SUM(d.delta_direct_writes)/NULLIF(SUM(d.delta_execution_count),0) AS direct_writes_per_exec, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_read_req_per_exec, + SUM(d.delta_physical_read_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_read_mb_per_exec, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.delta_execution_count),0) AS phy_write_req_per_exec, + SUM(d.delta_physical_write_bytes)/NULLIF(SUM(d.delta_execution_count),0)/1e6 AS phy_write_mb_per_exec, + SUM(d.delta_physical_read_bytes)/POWER(10,6)/NULLIF(SUM(d.seconds),0) AS mbps_r, + SUM(d.delta_physical_write_bytes)/POWER(10,6)/NULLIF(SUM(d.seconds),0) AS mbps_w, + (SUM(d.delta_physical_read_bytes)+SUM(d.delta_physical_write_bytes))/POWER(10,6)/NULLIF(SUM(d.seconds),0) AS mbps_rw, + SUM(d.delta_physical_read_requests)/NULLIF(SUM(d.seconds),0) AS iops_r, + SUM(d.delta_physical_write_requests)/NULLIF(SUM(d.seconds),0) AS iops_w, + (SUM(d.delta_physical_read_requests)+SUM(d.delta_physical_write_requests))/NULLIF(SUM(d.seconds),0) AS iops_rw, + SUM(d.delta_fetch_count)/NULLIF(SUM(d.delta_execution_count),0) AS fetches_per_exec, + SUM(d.delta_sorts)/NULLIF(SUM(d.delta_execution_count),0) AS sorts_per_exec, + SUM(d.delta_rows_processed)/NULLIF(SUM(d.delta_execution_count),0) AS rows_per_exec, + SUM(d.delta_elapsed_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS et_ms_per_row, + SUM(d.delta_cpu_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS cpu_ms_per_row, + SUM(d.delta_user_io_wait_time)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0)/1e3 AS io_ms_per_row, + SUM(d.delta_buffer_gets)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS gets_per_row, + SUM(d.delta_disk_reads)/NULLIF(GREATEST(SUM(d.delta_rows_processed),SUM(d.delta_execution_count)),0) AS reads_per_row, + -- d.con_id, + -- SUBSTR(get_pdb_name(d.con_id), 1, 30) AS pdb_name, + -- d.sqlid, + -- d.sql_id, + -- d.plan_hash_value, + -- d.sql_type, + -- d.sql_text, + SUM(d.delta_execution_count) AS delta_execution_count, + SUM(d.delta_elapsed_time) AS delta_elapsed_time, + SUM(d.delta_cpu_time) AS delta_cpu_time, + SUM(d.delta_user_io_wait_time) AS delta_user_io_wait_time, + SUM(d.delta_application_wait_time) AS delta_application_wait_time, + SUM(d.delta_concurrency_time) AS delta_concurrency_time, + SUM(d.delta_plsql_exec_time) AS delta_plsql_exec_time, + SUM(d.delta_cluster_wait_time) AS delta_cluster_wait_time, + SUM(d.delta_java_exec_time) AS delta_java_exec_time, + SUM(d.delta_px_servers_executions) AS delta_px_servers_executions, + SUM(d.delta_end_of_fetch_count) AS delta_end_of_fetch_count, + SUM(d.delta_parse_calls) AS delta_parse_calls, + SUM(d.delta_invalidations) AS delta_invalidations, + SUM(d.delta_loads) AS delta_loads, + SUM(d.delta_buffer_gets) AS delta_buffer_gets, + SUM(d.delta_disk_reads) AS delta_disk_reads, + SUM(d.delta_direct_writes) AS delta_direct_writes, + SUM(d.delta_physical_read_requests) AS delta_physical_read_requests, + SUM(d.delta_physical_read_bytes)/1e6 AS delta_physical_read_mb, + SUM(d.delta_physical_write_requests) AS delta_physical_write_requests, + SUM(d.delta_physical_write_bytes)/1e6 AS delta_physical_write_mb, + SUM(d.delta_fetch_count) AS delta_fetch_count, + SUM(d.delta_sorts) AS delta_sorts, + SUM(d.delta_rows_processed) AS delta_rows_processed, + SUM(d.delta_io_interconnect_bytes)/1e6 AS delta_io_interconnect_mb, + SUM(d.delta_cell_offload_elig_bytes)/1e6 AS delta_cell_offload_elig_mb, + SUM(d.delta_cell_uncompressed_bytes)/1e6 AS delta_cell_uncompressed_mb, + SUM(d.delta_cell_offload_retrn_bytes)/1e6 AS delta_cell_offload_retrn_mb, + SUM(d.version_count) AS version_count, + MAX(d.sharable_mem)/1e6 AS sharable_mem_mb, + SUM(d.obsolete_count) AS obsolete_count + FROM sqlstats_deltas d + WHERE d.seconds > 1 -- avoid snaps less than 1 sec appart + AND ('&&cs_sql_type.' IS NULL OR INSTR('&&cs_sql_type.', d.sql_type) > 0) + GROUP BY + --d.begin_timestamp, + d.end_timestamp + -- d.con_id, + -- d.sqlid, + -- d.sql_id, + -- d.plan_hash_value, + -- d.sql_type, + -- d.sql_text +), +/****************************************************************************************/ +full_list AS ( +SELECT --m.begin_timestamp, + m.end_timestamp AS time, + -- m.seconds, + -- m.con_id, + -- m.pdb_name, + -- m.sqlid, + -- m.sql_id, + -- m.plan_hash_value, + -- m.sql_type, + -- m.sql_text, + m.&&cs_sql_statistic. AS value + FROM sqlstats_metrics m + WHERE NVL(m.&&cs_sql_statistic., 0) >= 0 -- negative values are possible but unwanted +) +/****************************************************************************************/ +SELECT /*+ MONITOR GATHER_PLAN_STATISTICS */ + ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.value, 3)|| + ']' + FROM full_list q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqlstat_report.sql b/csierra/cs_sqlstat_report.sql new file mode 100644 index 0000000..7f089ea --- /dev/null +++ b/csierra/cs_sqlstat_report.sql @@ -0,0 +1,129 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: ssr.sql | cs_sqlstat_report.sql +-- +-- Purpose: SQL Statistics Report (AWR) - detailed(15m), hourly, daily, global +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/03/30 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqlstat_report.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +-- @@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqlstat_report'; +DEF cs_script_acronym = 'ssr.sql | '; +-- +DEF cs_hours_range_default = '24'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +DEF cs_scope_1 = 'between &&cs_sample_time_from. and &&cs_sample_time_to.'; +-- +PRO +PRO 3. Report Type [{detailed}|hourly|daily|global]: +DEF cs_report_type = '&3.'; +UNDEF 3; +COL cs_report_type NEW_V cs_report_type NOPRI; +SELECT CASE WHEN LOWER(TRIM('&&cs_report_type.')) IN ('detailed' ,'hourly', 'daily', 'global') THEN LOWER(TRIM('&&cs_report_type.')) ELSE 'detailed' END AS cs_report_type +FROM DUAL +/ +-- +PRO +PRO Uncommon Columns include: PL/SQL, Cluster, Java, End of Fetch, Parses, Invalidations, Loads, Sorts, Direct Writes, Physical Requests for Reads and Writes, etc. +PRO Selecting 'Y' widens output report. +PRO +PRO 4. Include Uncommon Columns [{N}|Y]: +DEF cs_include_uncommon_columns = '&4.'; +UNDEF 4; +COL cs_include_uncommon_columns NEW_V cs_include_uncommon_columns NOPRI; +COL cs_uncommon_col NEW_V cs_uncommon_col NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs_include_uncommon_columns.')) IN ('N', 'Y') THEN UPPER(TRIM('&&cs_include_uncommon_columns.')) ELSE 'N' END AS cs_include_uncommon_columns, + CASE UPPER(TRIM('&&cs_include_uncommon_columns.')) WHEN 'Y' THEN 'PRI' ELSE 'NOPRI' END AS cs_uncommon_col +FROM DUAL +/ +-- +PRO +PRO Delta Columns refer to multiple raw counters considering the range of dates provided. +PRO Selecting 'Y' widens output report. +PRO +PRO 5. Include Delta Columns [{N}|Y]: +DEF cs_include_delta_columns = '&5.'; +UNDEF 5; +COL cs_include_delta_columns NEW_V cs_include_delta_columns NOPRI; +COL cs_delta_col NEW_V cs_delta_col NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs_include_delta_columns.')) IN ('N', 'Y') THEN UPPER(TRIM('&&cs_include_delta_columns.')) ELSE 'N' END AS cs_include_delta_columns, + CASE UPPER(TRIM('&&cs_include_delta_columns.')) WHEN 'Y' THEN 'PRI' ELSE 'NOPRI' END AS cs_delta_col +FROM DUAL +/ +-- +PRO +PRO 6. Include Parsing Schema SYS [{N}|Y]: +DEF cs_include_sys = '&6.'; +UNDEF 6; +COL cs_filter_2 NEW_V cs_filter_2 NOPRI; +COL cs_include_sys NEW_V cs_include_sys NOPRI; +SELECT CASE UPPER(TRIM('&&cs_include_sys.')) WHEN 'Y' THEN '1 = 1' ELSE 'parsing_schema_name <> ''SYS''' END AS cs_filter_2, + CASE WHEN UPPER(TRIM('&&cs_include_sys.')) IN ('N', 'Y') THEN UPPER(TRIM('&&cs_include_sys.')) ELSE 'N' END AS cs_include_sys +FROM DUAL +/ +-- +PRO +PRO 7. SQL Text piece (e.g.: ScanQuery, getValues, TableName, IndexName): +DEF cs2_sql_text_piece = '&7.'; +UNDEF 7; +-- +PRO +PRO 8. SQL_ID (opt): +DEF cs_sql_id = '&8.'; +UNDEF 8; +COL cs_filter_1 NEW_V cs_filter_1 NOPRI; +COL cs_sql_id_col NEW_V cs_sql_id_col NOPRI; +SELECT CASE LENGTH('&&cs_sql_id.') WHEN 13 THEN 'sql_id = ''&&cs_sql_id.''' ELSE '1 = 1' END AS cs_filter_1, + CASE LENGTH('&&cs_sql_id.') WHEN 13 THEN 'NOPRI' ELSE 'PRI' END AS cs_sql_id_col +FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.'||NVL2('&&cs_sql_id.', '_&&cs_sql_id.', NULL) AS cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_report_type." "&&cs_include_uncommon_columns." "&&cs_include_delta_columns." "&&cs_include_sys." "&&cs2_sql_text_piece." "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO REPORT_TYPE : "&&cs_report_type." +PRO UNCOMMON_COLS: "&&cs_include_uncommon_columns." +PRO DELTA_COLS : "&&cs_include_delta_columns." +PRO SYS_SQL : "&&cs_include_sys." +PRO SQL_TEXT : "&&cs2_sql_text_piece." +PRO SQL_ID : "&&cs_sql_id." +-- +-- @@cs_internal/&&cs_set_container_to_cdb_root. +-- +@@cs_internal/cs_dba_hist_sqlstat_&&cs_report_type..sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_report_type." "&&cs_include_uncommon_columns." "&&cs_include_delta_columns." "&&cs_include_sys." "&&cs2_sql_text_piece." "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sqltext.sql b/csierra/cs_sqltext.sql new file mode 100644 index 0000000..b2522fb --- /dev/null +++ b/csierra/cs_sqltext.sql @@ -0,0 +1,53 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sqltext.sql +-- +-- Purpose: SQL Text for a given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sqltext.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +-- To further dive into SQL performance diagnostics use SQLd360. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sqltext'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +@@cs_internal/cs_print_sql_text.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sysstat_hist_chart.sql b/csierra/cs_sysstat_hist_chart.sql new file mode 100644 index 0000000..af7317d --- /dev/null +++ b/csierra/cs_sysstat_hist_chart.sql @@ -0,0 +1,242 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sysstat_hist_chart.sql +-- +-- Purpose: Subset of System Statistics from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/02/11 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sysstat_hist_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sysstat_hist_chart'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO 3. Class: [{All}|User|Redo|Enqueue|Cache|OS|RAC|SQL|Debug] +DEF class_type = '&3'. +UNDEF 3; +COL name FOR A64 HEA 'Stat Name'; +COL current_value HEA 'Current Value'; +COL class FOR A30 HEA 'Class(es)' TRUNC; +SELECT name, value AS current_value, + TRIM(',' FROM + CASE WHEN BITAND(class, 1) = 1 THEN ',User' END|| + CASE WHEN BITAND(class, 2) = 2 THEN ',Redo' END|| + CASE WHEN BITAND(class, 4) = 4 THEN ',Enqueue' END|| + CASE WHEN BITAND(class, 8) = 8 THEN ',Cache' END|| + CASE WHEN BITAND(class, 16) = 16 THEN ',OS' END|| + CASE WHEN BITAND(class, 32) = 32 THEN ',RAC' END|| + CASE WHEN BITAND(class, 64) = 64 THEN ',SQL' END|| + CASE WHEN BITAND(class, 128) = 128 THEN ',Debug' END + ) AS class + FROM v$sysstat + WHERE value > 0 + AND ( UPPER(NVL('&&class_type', 'All')) = 'ALL' + OR (UPPER('&&class_type.') = 'USER' AND BITAND(class, 1) = 1) + OR (UPPER('&&class_type.') = 'REDO' AND BITAND(class, 2) = 2) + OR (UPPER('&&class_type.') = 'ENQUEUE' AND BITAND(class, 4) = 4) + OR (UPPER('&&class_type.') = 'CACHE' AND BITAND(class, 8) = 8) + OR (UPPER('&&class_type.') = 'OS' AND BITAND(class, 16) = 16) + OR (UPPER('&&class_type.') = 'RAC' AND BITAND(class, 32) = 32) + OR (UPPER('&&class_type.') = 'SQL' AND BITAND(class, 64) = 64) + OR (UPPER('&&class_type.') = 'DEBUG' AND BITAND(class, 128) = 128) + ) +ORDER BY + statistic# +/ +PRO +PRO 4. Enter 1st Stat Name: +DEF stat_name_1 = '&4.'; +UNDEF 4; +PRO +PRO 5. Enter 2nd Stat Name: (opt) +DEF stat_name_2 = '&5.'; +UNDEF 5; +PRO +PRO 6. Enter 3rd Stat Name: (opt) +DEF stat_name_3 = '&6.'; +UNDEF 6; +PRO +PRO 7. Enter 4th Stat Name: (opt) +DEF stat_name_4 = '&7.'; +UNDEF 7; +PRO +PRO 8. Enter 5th Stat Name: (opt) +DEF stat_name_5 = '&8.'; +UNDEF 8; +PRO +PRO 9. Enter 6th Stat Name: (opt) +DEF stat_name_6 = '&9.'; +UNDEF 9; +PRO +PRO 10. Graph Type: [{SteppedArea}|Line|Area|Scatter] note: SteppedArea and Area are stacked +DEF graph_type = '&10.'; +UNDEF 10; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('SteppedArea', 'Line', 'Area', 'Scatter') THEN '&&graph_type.' ELSE 'SteppedArea' END AS cs_graph_type FROM DUAL +/ +PRO +PRO 11. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&11.'; +UNDEF 11; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "System Statistics"; +DEF chart_title = "System Statistics"; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = ""; +COL vaxis_title NEW_V vaxis_title NOPRI; +SELECT CASE WHEN '&&stat_name_1.' LIKE '%current' THEN 'Count' ELSE 'Per Second' END AS vaxis_title FROM DUAL +/ +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&class_type." "&&stat_name_1." "&&stat_name_2." "&&stat_name_3." "&&stat_name_4." "&&stat_name_5." "&&stat_name_6." "&&cs_graph_type." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&stat_name_1.', id:'1', type:'number'} +PRO ,{label:'&&stat_name_2.', id:'2', type:'number'} +PRO ,{label:'&&stat_name_3.', id:'3', type:'number'} +PRO ,{label:'&&stat_name_4.', id:'4', type:'number'} +PRO ,{label:'&&stat_name_5.', id:'5', type:'number'} +PRO ,{label:'&&stat_name_6.', id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +sysstat ( + snap_id, end_interval_time, elapsed_sec, stat_value_1, stat_value_2, stat_value_3, stat_value_4, stat_value_5, stat_value_6 +) AS ( + SELECT h.snap_id, + s.end_interval_time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 86400 AS elapsed_sec, + SUM(CASE WHEN h.stat_name = '&&stat_name_1.' THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name = '&&stat_name_1.' AND h.stat_name NOT LIKE '%current' THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS stat_value_1, + SUM(CASE WHEN h.stat_name = '&&stat_name_2.' THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name = '&&stat_name_2.' AND h.stat_name NOT LIKE '%current' THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS stat_value_2, + SUM(CASE WHEN h.stat_name = '&&stat_name_3.' THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name = '&&stat_name_3.' AND h.stat_name NOT LIKE '%current' THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS stat_value_3, + SUM(CASE WHEN h.stat_name = '&&stat_name_4.' THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name = '&&stat_name_4.' AND h.stat_name NOT LIKE '%current' THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS stat_value_4, + SUM(CASE WHEN h.stat_name = '&&stat_name_5.' THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name = '&&stat_name_5.' AND h.stat_name NOT LIKE '%current' THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS stat_value_5, + SUM(CASE WHEN h.stat_name = '&&stat_name_6.' THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name = '&&stat_name_6.' AND h.stat_name NOT LIKE '%current' THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS stat_value_6 + FROM dba_hist_sysstat h, + dba_hist_snapshot s + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.stat_name IN ('&&stat_name_1.', '&&stat_name_2.', '&&stat_name_3.', '&&stat_name_4.', '&&stat_name_5.', '&&stat_name_6.') + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number + AND s.end_interval_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + GROUP BY + h.snap_id, + s.begin_interval_time, + s.end_interval_time +), +sysstat_per_sec ( + snap_id, end_interval_time, stat_value_1_ps, stat_value_2_ps, stat_value_3_ps, stat_value_4_ps, stat_value_5_ps, stat_value_6_ps +) AS ( + SELECT snap_id, + end_interval_time, + CASE WHEN '&&stat_name_1.' LIKE '%current' THEN stat_value_1 ELSE ROUND(stat_value_1 / elapsed_sec, 3) END stat_value_1_ps, + CASE WHEN '&&stat_name_2.' LIKE '%current' THEN stat_value_2 ELSE ROUND(stat_value_2 / elapsed_sec, 3) END stat_value_2_ps, + CASE WHEN '&&stat_name_3.' LIKE '%current' THEN stat_value_3 ELSE ROUND(stat_value_3 / elapsed_sec, 3) END stat_value_3_ps, + CASE WHEN '&&stat_name_4.' LIKE '%current' THEN stat_value_4 ELSE ROUND(stat_value_4 / elapsed_sec, 3) END stat_value_4_ps, + CASE WHEN '&&stat_name_5.' LIKE '%current' THEN stat_value_5 ELSE ROUND(stat_value_5 / elapsed_sec, 3) END stat_value_5_ps, + CASE WHEN '&&stat_name_6.' LIKE '%current' THEN stat_value_6 ELSE ROUND(stat_value_6 / elapsed_sec, 3) END stat_value_6_ps + FROM sysstat + WHERE elapsed_sec > 60 -- ignore snaps too close +) +SELECT ', [new Date('|| + TO_CHAR(q.end_interval_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.end_interval_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.end_interval_time, 'DD')|| /* day */ + ','||TO_CHAR(q.end_interval_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.end_interval_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.end_interval_time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.stat_value_1_ps, 3)|| + ','||num_format(q.stat_value_2_ps, 3)|| + ','||num_format(q.stat_value_3_ps, 3)|| + ','||num_format(q.stat_value_4_ps, 3)|| + ','||num_format(q.stat_value_5_ps, 3)|| + ','||num_format(q.stat_value_6_ps, 3)|| + ']' + FROM sysstat_per_sec q + WHERE q.stat_value_1_ps >= 0 + ORDER BY + q.end_interval_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_sysstat_hist_chart_io.sql b/csierra/cs_sysstat_hist_chart_io.sql new file mode 100644 index 0000000..5648509 --- /dev/null +++ b/csierra/cs_sysstat_hist_chart_io.sql @@ -0,0 +1,188 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_sysstat_hist_chart_io.sql +-- +-- Purpose: IO System Statistics from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/19 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_sysstat_hist_chart_io.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_sysstat_hist_chart_io'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO 3. Metric: [{MBPS}|IOPS] +DEF metric_filter = '&3.'; +UNDEF 3; +COL cs_metric_filter NEW_V cs_metric_filter NOPRI; +SELECT CASE NVL(UPPER(TRIM('&&metric_filter.')), 'MBPS') WHEN 'MBPS' THEN 'MBPS' ELSE 'IOPS' END AS cs_metric_filter FROM DUAL +/ +COL metric_name_1 NEW_V metric_name_1 NOPRI; +COL metric_name_2 NEW_V metric_name_2 NOPRI; +COL metric_name_3 NEW_V metric_name_3 NOPRI; +SELECT CASE '&&cs_metric_filter.' WHEN 'IOPS' THEN 'RW_IOPS' ELSE 'RW_MBPS' END AS metric_name_1, + CASE '&&cs_metric_filter.' WHEN 'IOPS' THEN 'R_IOPS' ELSE 'R_MBPS' END AS metric_name_2, + CASE '&&cs_metric_filter.' WHEN 'IOPS' THEN 'W_IOPS' ELSE 'W_MBPS' END AS metric_name_3 +FROM DUAL +/ +-- +PRO +PRO 4. Graph Type: [{SteppedArea}|Line|Area|Scatter] note: SteppedArea and Area are stacked +DEF graph_type = '&4.'; +UNDEF 4; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('SteppedArea', 'Line', 'Area', 'Scatter') THEN '&&graph_type.' ELSE 'SteppedArea' END AS cs_graph_type FROM DUAL +/ +PRO +PRO 5. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&5.'; +UNDEF 5; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_metric_filter.' cs_file_name FROM DUAL; +-- +DEF report_title = "System Statistics (&&cs_metric_filter.)"; +DEF chart_title = "System Statistics (&&cs_metric_filter.)"; +DEF xaxis_title = "&&cs_metric_filter. between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}"; +DEF vaxis_title = "&&cs_metric_filter."; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_metric_filter." "&&cs_graph_type." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +-- PRO ,{label:'&&metric_name_1.', id:'1', type:'number'} +PRO ,{label:'&&metric_name_2.', id:'2', type:'number'} +PRO ,{label:'&&metric_name_3.', id:'3', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +sysstat_io ( + snap_id, end_interval_time, elapsed_sec, r_reqs, w_reqs, r_bytes, w_bytes +) AS ( + SELECT h.snap_id, + s.end_interval_time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 86400 AS elapsed_sec, + SUM(CASE WHEN h.stat_name = 'physical read total IO requests' THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name = 'physical read total IO requests' THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS r_reqs, + SUM(CASE WHEN h.stat_name IN ('physical write total IO requests', 'redo writes') THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name IN ('physical write total IO requests', 'redo writes') THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS w_reqs, + SUM(CASE WHEN h.stat_name = 'physical read total bytes' THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name = 'physical read total bytes' THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS r_bytes, + SUM(CASE WHEN h.stat_name IN ('physical write total bytes', 'redo size') THEN h.value ELSE 0 END) - LAG(SUM(CASE WHEN h.stat_name IN ('physical write total bytes', 'redo size') THEN h.value ELSE 0 END)) OVER (ORDER BY h.snap_id) AS w_bytes + FROM dba_hist_sysstat h, + dba_hist_snapshot s + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.stat_name IN ('physical read total IO requests', 'physical write total IO requests', 'redo writes', 'physical read total bytes', 'physical write total bytes', 'redo size') + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number + AND s.end_interval_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + GROUP BY + h.snap_id, + s.begin_interval_time, + s.end_interval_time +), +io_per_sec ( + snap_id, end_interval_time, r_iops, w_iops, r_mbps, w_mbps +) AS ( + SELECT snap_id, + end_interval_time, + ROUND(r_reqs / elapsed_sec) AS r_iops, + ROUND(w_reqs / elapsed_sec) AS w_iops, + ROUND(r_bytes / elapsed_sec / POWER(10, 6)) AS r_mbps, + ROUND(w_bytes / elapsed_sec / POWER(10, 6)) AS w_mbps + FROM sysstat_io + WHERE elapsed_sec > 60 -- ignore snaps too close + AND r_reqs + w_reqs + r_bytes + w_bytes > 0 -- avoid nulls +) +SELECT ', [new Date('|| + TO_CHAR(q.end_interval_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.end_interval_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.end_interval_time, 'DD')|| /* day */ + ','||TO_CHAR(q.end_interval_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.end_interval_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.end_interval_time, 'SS')|| /* second */ + ')'|| + --','||CASE '&&cs_metric_filter.' WHEN 'IOPS' THEN num_format(q.r_iops + q.w_iops) ELSE num_format(q.r_mbps + q.w_mbps) END|| + ','||CASE '&&cs_metric_filter.' WHEN 'IOPS' THEN num_format(q.r_iops) ELSE num_format(q.r_mbps) END|| + ','||CASE '&&cs_metric_filter.' WHEN 'IOPS' THEN num_format(q.w_iops) ELSE num_format(q.w_mbps) END|| + ']' + FROM io_per_sec q + ORDER BY + q.end_interval_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_system_event_hist_latency_chart.sql b/csierra/cs_system_event_hist_latency_chart.sql new file mode 100644 index 0000000..4e5eb10 --- /dev/null +++ b/csierra/cs_system_event_hist_latency_chart.sql @@ -0,0 +1,265 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_system_event_hist_latency_chart.sql +-- +-- Purpose: Subset of System Event Latency from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/27 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_system_event_hist_latency_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_system_event_hist_latency_chart'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL perc FOR 990.0; +COL waited_seconds FOR 999,999,999,990; +COL total_waits FOR 999,999,999,990; +COL avg_wait_ms FOR 999,990.000; +COL aas FOR 990.000; +COL wait_class FOR A14; +COL event_name FOR A64; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF perc aas waited_seconds total_waits ON REPORT; +-- +PRO +PRO Top 50 wait events between &&cs_begin_date_from. and &&cs_end_date_to. (and after startup on &&cs_startup_time.) +PRO ~~~~~~~~~~~~~~~~~~ +SELECT 100 * (e.time_waited_micro - b.time_waited_micro) / SUM(e.time_waited_micro - b.time_waited_micro) OVER () perc, + (e.time_waited_micro - b.time_waited_micro) / 1e6 / TO_NUMBER('&&cs_begin_end_seconds.') aas, + (e.time_waited_micro - b.time_waited_micro) / 1e3 / (e.total_waits - b.total_waits) avg_wait_ms, + e.wait_class, + e.event_name, + (e.time_waited_micro - b.time_waited_micro) / 1e6 waited_seconds, + (e.total_waits - b.total_waits) total_waits + FROM dba_hist_system_event b, + dba_hist_system_event e + WHERE b.dbid = TO_NUMBER('&&cs_dbid.') + AND b.instance_number = TO_NUMBER('&&cs_instance_number.') + AND b.snap_id = GREATEST(TO_NUMBER('&&cs_snap_id_from.'), TO_NUMBER('&&cs_startup_snap_id.')) + AND b.wait_class <> 'Idle' + AND e.dbid = TO_NUMBER('&&cs_dbid.') + AND e.instance_number = TO_NUMBER('&&cs_instance_number.') + AND e.snap_id = TO_NUMBER('&&cs_snap_id_to.') + AND e.wait_class <> 'Idle' + AND e.event_id = b.event_id + AND e.event_name = b.event_name + AND e.wait_class_id = b.wait_class_id + AND e.wait_class = b.wait_class + AND e.time_waited_micro > b.time_waited_micro + AND e.total_waits > b.total_waits + ORDER BY + e.time_waited_micro - b.time_waited_micro DESC +FETCH FIRST 50 ROWS ONLY +/ +-- +CLEAR BREAK COMPUTE; +PRO +PRO 3. Enter 1st Event Name: +DEF evnt_nam_1 = '&3.'; +UNDEF 3; +DEF wait_class_1 = ''; +COL wait_class_1 NEW_V wait_class_1 NOPRI; +SELECT wait_class wait_class_1 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_1.' AND ROWNUM = 1 +/ +PRO +PRO 4. Enter 2nd Event Name: (opt) +DEF evnt_nam_2 = '&4.'; +UNDEF 4; +DEF wait_class_2 = ''; +COL wait_class_2 NEW_V wait_class_2 NOPRI; +SELECT wait_class wait_class_2 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_2.' AND ROWNUM = 1 +/ +PRO +PRO 5. Enter 3rd Event Name: (opt) +DEF evnt_nam_3 = '&5.'; +UNDEF 5; +DEF wait_class_3 = ''; +COL wait_class_3 NEW_V wait_class_3 NOPRI; +SELECT wait_class wait_class_3 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_3.' AND ROWNUM = 1 +/ +PRO +PRO 6. Enter 4th Event Name: (opt) +DEF evnt_nam_4 = '&6.'; +UNDEF 6; +DEF wait_class_4 = ''; +COL wait_class_4 NEW_V wait_class_4 NOPRI; +SELECT wait_class wait_class_4 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_4.' AND ROWNUM = 1 +/ +PRO +PRO 7. Enter 5th Event Name: (opt) +DEF evnt_nam_5 = '&7.'; +UNDEF 7; +DEF wait_class_5 = ''; +COL wait_class_5 NEW_V wait_class_5 NOPRI; +SELECT wait_class wait_class_5 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_5.' AND ROWNUM = 1 +/ +PRO +PRO 8. Enter 6th Event Name: (opt) +DEF evnt_nam_6 = '&8.'; +UNDEF 8; +DEF wait_class_6 = ''; +COL wait_class_6 NEW_V wait_class_6 NOPRI; +SELECT wait_class wait_class_6 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_6.' AND ROWNUM = 1 +/ +PRO +PRO 9. Graph Type: [{Scatter}|Line] +DEF graph_type = '&9.'; +UNDEF 9; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('Line', 'Scatter') THEN '&&graph_type.' ELSE 'Scatter' END AS cs_graph_type FROM DUAL +/ +PRO +PRO 10. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&10.'; +UNDEF 10; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "System Event History - Latency (milliseconds)"; +DEF chart_title = "System Event History - Latency (milliseconds)"; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "Average Latency (milliseconds)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&evnt_nam_1." "&&evnt_nam_2." "&&evnt_nam_3." "&&evnt_nam_4." "&&evnt_nam_5." "&&evnt_nam_6." "&&cs_graph_type." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&wait_class_1. - &&evnt_nam_1.', id:'1', type:'number'} +PRO ,{label:'&&wait_class_2. - &&evnt_nam_2.', id:'2', type:'number'} +PRO ,{label:'&&wait_class_3. - &&evnt_nam_3.', id:'3', type:'number'} +PRO ,{label:'&&wait_class_4. - &&evnt_nam_4.', id:'4', type:'number'} +PRO ,{label:'&&wait_class_5. - &&evnt_nam_5.', id:'5', type:'number'} +PRO ,{label:'&&wait_class_6. - &&evnt_nam_6.', id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +system_event_history AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + event_name, + (time_waited_micro - LAG(time_waited_micro) OVER (PARTITION BY event_name ORDER BY snap_id)) / 1e3 time_waited_ms, + (total_waits - LAG(total_waits) OVER (PARTITION BY event_name ORDER BY snap_id)) total_waits + FROM dba_hist_system_event + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') - 1 AND TO_NUMBER('&&cs_snap_id_to.') + AND (wait_class = '&&wait_class_1.' OR wait_class = '&&wait_class_2.' OR wait_class = '&&wait_class_3.' OR wait_class = '&&wait_class_4.' OR wait_class = '&&wait_class_5.' OR wait_class = '&&wait_class_6.') + AND (event_name = '&&evnt_nam_1.' OR event_name = '&&evnt_nam_2.' OR event_name = '&&evnt_nam_3.' OR event_name = '&&evnt_nam_4.' OR event_name = '&&evnt_nam_5.' OR event_name = '&&evnt_nam_6.') +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + CAST(s.end_interval_time AS DATE) time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 24 * 3600 interval_seconds, + SUM(CASE WHEN event_name = '&&evnt_nam_1.' THEN h.time_waited_ms/GREATEST(h.total_waits,1) ELSE 0 END) latency_1, + SUM(CASE WHEN event_name = '&&evnt_nam_2.' THEN h.time_waited_ms/GREATEST(h.total_waits,1) ELSE 0 END) latency_2, + SUM(CASE WHEN event_name = '&&evnt_nam_3.' THEN h.time_waited_ms/GREATEST(h.total_waits,1) ELSE 0 END) latency_3, + SUM(CASE WHEN event_name = '&&evnt_nam_4.' THEN h.time_waited_ms/GREATEST(h.total_waits,1) ELSE 0 END) latency_4, + SUM(CASE WHEN event_name = '&&evnt_nam_5.' THEN h.time_waited_ms/GREATEST(h.total_waits,1) ELSE 0 END) latency_5, + SUM(CASE WHEN event_name = '&&evnt_nam_6.' THEN h.time_waited_ms/GREATEST(h.total_waits,1) ELSE 0 END) latency_6 + FROM system_event_history h, + dba_hist_snapshot s + WHERE h.total_waits >= 0 + AND s.snap_id = h.snap_id + AND s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + GROUP BY + s.begin_interval_time, + s.end_interval_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.latency_1, 3)|| + ','||num_format(q.latency_2, 3)|| + ','||num_format(q.latency_3, 3)|| + ','||num_format(q.latency_4, 3)|| + ','||num_format(q.latency_5, 3)|| + ','||num_format(q.latency_6, 3)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_system_event_hist_load_char.sql b/csierra/cs_system_event_hist_load_char.sql new file mode 100644 index 0000000..0de2707 --- /dev/null +++ b/csierra/cs_system_event_hist_load_char.sql @@ -0,0 +1,265 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_system_event_hist_load_char.sql +-- +-- Purpose: Subset of System Event AAS Load from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/27 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_system_event_hist_load_char.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_system_event_hist_load_char'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL perc FOR 990.0; +COL waited_seconds FOR 999,999,999,990; +COL total_waits FOR 999,999,999,990; +COL avg_wait_ms FOR 999,990.000; +COL aas FOR 990.000; +COL wait_class FOR A14; +COL event_name FOR A64; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF perc aas waited_seconds total_waits ON REPORT; +-- +PRO +PRO Top 50 wait events between &&cs_begin_date_from. and &&cs_end_date_to. (and after startup on &&cs_startup_time.) +PRO ~~~~~~~~~~~~~~~~~~ +SELECT 100 * (e.time_waited_micro - b.time_waited_micro) / SUM(e.time_waited_micro - b.time_waited_micro) OVER () perc, + (e.time_waited_micro - b.time_waited_micro) / 1e6 / TO_NUMBER('&&cs_begin_end_seconds.') aas, + (e.time_waited_micro - b.time_waited_micro) / 1e3 / (e.total_waits - b.total_waits) avg_wait_ms, + e.wait_class, + e.event_name, + (e.time_waited_micro - b.time_waited_micro) / 1e6 waited_seconds, + (e.total_waits - b.total_waits) total_waits + FROM dba_hist_system_event b, + dba_hist_system_event e + WHERE b.dbid = TO_NUMBER('&&cs_dbid.') + AND b.instance_number = TO_NUMBER('&&cs_instance_number.') + AND b.snap_id = GREATEST(TO_NUMBER('&&cs_snap_id_from.'), TO_NUMBER('&&cs_startup_snap_id.')) + AND b.wait_class <> 'Idle' + AND e.dbid = TO_NUMBER('&&cs_dbid.') + AND e.instance_number = TO_NUMBER('&&cs_instance_number.') + AND e.snap_id = TO_NUMBER('&&cs_snap_id_to.') + AND e.wait_class <> 'Idle' + AND e.event_id = b.event_id + AND e.event_name = b.event_name + AND e.wait_class_id = b.wait_class_id + AND e.wait_class = b.wait_class + AND e.time_waited_micro > b.time_waited_micro + AND e.total_waits > b.total_waits + ORDER BY + e.time_waited_micro - b.time_waited_micro DESC +FETCH FIRST 50 ROWS ONLY +/ +-- +CLEAR BREAK COMPUTE; +PRO +PRO 3. Enter 1st Event Name: +DEF evnt_nam_1 = '&3.'; +UNDEF 3; +DEF wait_class_1 = ''; +COL wait_class_1 NEW_V wait_class_1 NOPRI; +SELECT wait_class wait_class_1 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_1.' AND ROWNUM = 1 +/ +PRO +PRO 4. Enter 2nd Event Name: (opt) +DEF evnt_nam_2 = '&4.'; +UNDEF 4; +DEF wait_class_2 = ''; +COL wait_class_2 NEW_V wait_class_2 NOPRI; +SELECT wait_class wait_class_2 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_2.' AND ROWNUM = 1 +/ +PRO +PRO 5. Enter 3rd Event Name: (opt) +DEF evnt_nam_3 = '&5.'; +UNDEF 5; +DEF wait_class_3 = ''; +COL wait_class_3 NEW_V wait_class_3 NOPRI; +SELECT wait_class wait_class_3 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_3.' AND ROWNUM = 1 +/ +PRO +PRO 6. Enter 4th Event Name: (opt) +DEF evnt_nam_4 = '&6.'; +UNDEF 6; +DEF wait_class_4 = ''; +COL wait_class_4 NEW_V wait_class_4 NOPRI; +SELECT wait_class wait_class_4 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_4.' AND ROWNUM = 1 +/ +PRO +PRO 7. Enter 5th Event Name: (opt) +DEF evnt_nam_5 = '&7.'; +UNDEF 7; +DEF wait_class_5 = ''; +COL wait_class_5 NEW_V wait_class_5 NOPRI; +SELECT wait_class wait_class_5 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_5.' AND ROWNUM = 1 +/ +PRO +PRO 8. Enter 6th Event Name: (opt) +DEF evnt_nam_6 = '&8.'; +UNDEF 8; +DEF wait_class_6 = ''; +COL wait_class_6 NEW_V wait_class_6 NOPRI; +SELECT wait_class wait_class_6 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_6.' AND ROWNUM = 1 +/ +PRO +PRO 9. Graph Type: [{SteppedArea}|Line|Area|Scatter] note: SteppedArea and Area are stacked +DEF graph_type = '&9.'; +UNDEF 9; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('SteppedArea', 'Line', 'Area', 'Scatter') THEN '&&graph_type.' ELSE 'SteppedArea' END AS cs_graph_type FROM DUAL +/ +PRO +PRO 10. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&10.'; +UNDEF 10; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "System Event History - Load in AAS"; +DEF chart_title = "System Event History - Load in AAS"; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "Average Active Sessions (AAS)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&evnt_nam_1." "&&evnt_nam_2." "&&evnt_nam_3." "&&evnt_nam_4." "&&evnt_nam_5." "&&evnt_nam_6." "&&cs_graph_type." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&wait_class_1. - &&evnt_nam_1.', id:'1', type:'number'} +PRO ,{label:'&&wait_class_2. - &&evnt_nam_2.', id:'2', type:'number'} +PRO ,{label:'&&wait_class_3. - &&evnt_nam_3.', id:'3', type:'number'} +PRO ,{label:'&&wait_class_4. - &&evnt_nam_4.', id:'4', type:'number'} +PRO ,{label:'&&wait_class_5. - &&evnt_nam_5.', id:'5', type:'number'} +PRO ,{label:'&&wait_class_6. - &&evnt_nam_6.', id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +system_event_history AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + event_name, + (time_waited_micro - LAG(time_waited_micro) OVER (PARTITION BY event_name ORDER BY snap_id)) / 1e6 waited_seconds + FROM dba_hist_system_event + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') - 1 AND TO_NUMBER('&&cs_snap_id_to.') + AND (wait_class = '&&wait_class_1.' OR wait_class = '&&wait_class_2.' OR wait_class = '&&wait_class_3.' OR wait_class = '&&wait_class_4.' OR wait_class = '&&wait_class_5.' OR wait_class = '&&wait_class_6.') + AND (event_name = '&&evnt_nam_1.' OR event_name = '&&evnt_nam_2.' OR event_name = '&&evnt_nam_3.' OR event_name = '&&evnt_nam_4.' OR event_name = '&&evnt_nam_5.' OR event_name = '&&evnt_nam_6.') +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + CAST(s.end_interval_time AS DATE) time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 24 * 3600 interval_seconds, + SUM(CASE WHEN event_name = '&&evnt_nam_1.' THEN waited_seconds ELSE 0 END) waited_seconds_1, + SUM(CASE WHEN event_name = '&&evnt_nam_2.' THEN waited_seconds ELSE 0 END) waited_seconds_2, + SUM(CASE WHEN event_name = '&&evnt_nam_3.' THEN waited_seconds ELSE 0 END) waited_seconds_3, + SUM(CASE WHEN event_name = '&&evnt_nam_4.' THEN waited_seconds ELSE 0 END) waited_seconds_4, + SUM(CASE WHEN event_name = '&&evnt_nam_5.' THEN waited_seconds ELSE 0 END) waited_seconds_5, + SUM(CASE WHEN event_name = '&&evnt_nam_6.' THEN waited_seconds ELSE 0 END) waited_seconds_6 + FROM system_event_history h, + dba_hist_snapshot s + WHERE h.waited_seconds >= 0 + AND s.snap_id = h.snap_id + AND s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + GROUP BY + s.begin_interval_time, + s.end_interval_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.waited_seconds_1 / q.interval_seconds, 3)|| + ','||num_format(q.waited_seconds_2 / q.interval_seconds, 3)|| + ','||num_format(q.waited_seconds_3 / q.interval_seconds, 3)|| + ','||num_format(q.waited_seconds_4 / q.interval_seconds, 3)|| + ','||num_format(q.waited_seconds_5 / q.interval_seconds, 3)|| + ','||num_format(q.waited_seconds_6 / q.interval_seconds, 3)|| + ']' + FROM my_query q + WHERE q.interval_seconds > 0 + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_system_event_hist_total_waits_chart.sql b/csierra/cs_system_event_hist_total_waits_chart.sql new file mode 100644 index 0000000..7ba62ae --- /dev/null +++ b/csierra/cs_system_event_hist_total_waits_chart.sql @@ -0,0 +1,265 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_system_event_hist_total_waits_chart.sql +-- +-- Purpose: Subset of System Event Total Waits from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/27 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_system_event_hist_total_waits_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_system_event_hist_total_waits_chart'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL perc FOR 990.0; +COL waited_seconds FOR 999,999,999,990; +COL total_waits FOR 999,999,999,990; +COL avg_wait_ms FOR 999,990.000; +COL aas FOR 990.000; +COL wait_class FOR A14; +COL event_name FOR A64; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF perc aas waited_seconds total_waits ON REPORT; +-- +PRO +PRO Top 50 wait events between &&cs_begin_date_from. and &&cs_end_date_to. (and after startup on &&cs_startup_time.) +PRO ~~~~~~~~~~~~~~~~~~ +SELECT 100 * (e.time_waited_micro - b.time_waited_micro) / SUM(e.time_waited_micro - b.time_waited_micro) OVER () perc, + (e.time_waited_micro - b.time_waited_micro) / 1e6 / TO_NUMBER('&&cs_begin_end_seconds.') aas, + (e.time_waited_micro - b.time_waited_micro) / 1e3 / (e.total_waits - b.total_waits) avg_wait_ms, + e.wait_class, + e.event_name, + (e.time_waited_micro - b.time_waited_micro) / 1e6 waited_seconds, + (e.total_waits - b.total_waits) total_waits + FROM dba_hist_system_event b, + dba_hist_system_event e + WHERE b.dbid = TO_NUMBER('&&cs_dbid.') + AND b.instance_number = TO_NUMBER('&&cs_instance_number.') + AND b.snap_id = GREATEST(TO_NUMBER('&&cs_snap_id_from.'), TO_NUMBER('&&cs_startup_snap_id.')) + AND b.wait_class <> 'Idle' + AND e.dbid = TO_NUMBER('&&cs_dbid.') + AND e.instance_number = TO_NUMBER('&&cs_instance_number.') + AND e.snap_id = TO_NUMBER('&&cs_snap_id_to.') + AND e.wait_class <> 'Idle' + AND e.event_id = b.event_id + AND e.event_name = b.event_name + AND e.wait_class_id = b.wait_class_id + AND e.wait_class = b.wait_class + AND e.time_waited_micro > b.time_waited_micro + AND e.total_waits > b.total_waits + ORDER BY + e.time_waited_micro - b.time_waited_micro DESC +FETCH FIRST 50 ROWS ONLY +/ +-- +CLEAR BREAK COMPUTE; +PRO +PRO 3. Enter 1st Event Name: +DEF evnt_nam_1 = '&3.'; +UNDEF 3; +DEF wait_class_1 = ''; +COL wait_class_1 NEW_V wait_class_1 NOPRI; +SELECT wait_class wait_class_1 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_1.' AND ROWNUM = 1 +/ +PRO +PRO 4. Enter 2nd Event Name: (opt) +DEF evnt_nam_2 = '&4.'; +UNDEF 4; +DEF wait_class_2 = ''; +COL wait_class_2 NEW_V wait_class_2 NOPRI; +SELECT wait_class wait_class_2 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_2.' AND ROWNUM = 1 +/ +PRO +PRO 5. Enter 3rd Event Name: (opt) +DEF evnt_nam_3 = '&5.'; +UNDEF 5; +DEF wait_class_3 = ''; +COL wait_class_3 NEW_V wait_class_3 NOPRI; +SELECT wait_class wait_class_3 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_3.' AND ROWNUM = 1 +/ +PRO +PRO 6. Enter 4th Event Name: (opt) +DEF evnt_nam_4 = '&6.'; +UNDEF 6; +DEF wait_class_4 = ''; +COL wait_class_4 NEW_V wait_class_4 NOPRI; +SELECT wait_class wait_class_4 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_4.' AND ROWNUM = 1 +/ +PRO +PRO 7. Enter 5th Event Name: (opt) +DEF evnt_nam_5 = '&7.'; +UNDEF 7; +DEF wait_class_5 = ''; +COL wait_class_5 NEW_V wait_class_5 NOPRI; +SELECT wait_class wait_class_5 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_5.' AND ROWNUM = 1 +/ +PRO +PRO 8. Enter 6th Event Name: (opt) +DEF evnt_nam_6 = '&8.'; +UNDEF 8; +DEF wait_class_6 = ''; +COL wait_class_6 NEW_V wait_class_6 NOPRI; +SELECT wait_class wait_class_6 FROM dba_hist_system_event WHERE event_name = '&&evnt_nam_6.' AND ROWNUM = 1 +/ +PRO +PRO 9. Graph Type: [{Scatter}|Line] +DEF graph_type = '&9.'; +UNDEF 9; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('Line', 'Scatter') THEN '&&graph_type.' ELSE 'Scatter' END AS cs_graph_type FROM DUAL +/ +PRO +PRO 10. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&10.'; +UNDEF 10; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "System Event History - Total Waits"; +DEF chart_title = "System Event History - Total Waits"; +DEF xaxis_title = "between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}"; +DEF vaxis_title = "Total Waits"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&evnt_nam_1." "&&evnt_nam_2." "&&evnt_nam_3." "&&evnt_nam_4." "&&evnt_nam_5." "&&evnt_nam_6." "&&cs_graph_type." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&wait_class_1. - &&evnt_nam_1.', id:'1', type:'number'} +PRO ,{label:'&&wait_class_2. - &&evnt_nam_2.', id:'2', type:'number'} +PRO ,{label:'&&wait_class_3. - &&evnt_nam_3.', id:'3', type:'number'} +PRO ,{label:'&&wait_class_4. - &&evnt_nam_4.', id:'4', type:'number'} +PRO ,{label:'&&wait_class_5. - &&evnt_nam_5.', id:'5', type:'number'} +PRO ,{label:'&&wait_class_6. - &&evnt_nam_6.', id:'6', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +system_event_history AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + event_name, + (time_waited_micro - LAG(time_waited_micro) OVER (PARTITION BY event_name ORDER BY snap_id)) / 1e3 time_waited_ms, + (total_waits - LAG(total_waits) OVER (PARTITION BY event_name ORDER BY snap_id)) total_waits + FROM dba_hist_system_event + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') - 1 AND TO_NUMBER('&&cs_snap_id_to.') + AND (wait_class = '&&wait_class_1.' OR wait_class = '&&wait_class_2.' OR wait_class = '&&wait_class_3.' OR wait_class = '&&wait_class_4.' OR wait_class = '&&wait_class_5.' OR wait_class = '&&wait_class_6.') + AND (event_name = '&&evnt_nam_1.' OR event_name = '&&evnt_nam_2.' OR event_name = '&&evnt_nam_3.' OR event_name = '&&evnt_nam_4.' OR event_name = '&&evnt_nam_5.' OR event_name = '&&evnt_nam_6.') +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + CAST(s.end_interval_time AS DATE) time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 24 * 3600 interval_seconds, + SUM(CASE WHEN event_name = '&&evnt_nam_1.' THEN h.total_waits ELSE 0 END) total_waits_1, + SUM(CASE WHEN event_name = '&&evnt_nam_2.' THEN h.total_waits ELSE 0 END) total_waits_2, + SUM(CASE WHEN event_name = '&&evnt_nam_3.' THEN h.total_waits ELSE 0 END) total_waits_3, + SUM(CASE WHEN event_name = '&&evnt_nam_4.' THEN h.total_waits ELSE 0 END) total_waits_4, + SUM(CASE WHEN event_name = '&&evnt_nam_5.' THEN h.total_waits ELSE 0 END) total_waits_5, + SUM(CASE WHEN event_name = '&&evnt_nam_6.' THEN h.total_waits ELSE 0 END) total_waits_6 + FROM system_event_history h, + dba_hist_snapshot s + WHERE h.total_waits >= 0 + AND s.snap_id = h.snap_id + AND s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + GROUP BY + s.begin_interval_time, + s.end_interval_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.total_waits_1, 3)|| + ','||num_format(q.total_waits_2, 3)|| + ','||num_format(q.total_waits_3, 3)|| + ','||num_format(q.total_waits_4, 3)|| + ','||num_format(q.total_waits_5, 3)|| + ','||num_format(q.total_waits_6, 3)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_system_event_histogram_chart.sql b/csierra/cs_system_event_histogram_chart.sql new file mode 100644 index 0000000..1021dfe --- /dev/null +++ b/csierra/cs_system_event_histogram_chart.sql @@ -0,0 +1,239 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_system_event_histogram_chart.sql +-- +-- Purpose: One System Event AAS Load Histogram from AWR as per Latency Bucket (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/27 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_system_event_histogram_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_system_event_histogram_chart'; +DEF cs_hours_range_default = '336'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL perc FOR 990.0; +COL waited_seconds FOR 999,999,999,990; +COL total_waits FOR 999,999,999,990; +COL avg_wait_ms FOR 999,990.000; +COL aas FOR 990.000; +COL wait_class FOR A14; +COL event_name FOR A64; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF perc aas waited_seconds total_waits ON REPORT; +-- +PRO +PRO Top 30 wait events between &&cs_begin_date_from. and &&cs_end_date_to. (and after startup on &&cs_startup_time.) +PRO ~~~~~~~~~~~~~~~~~~ +SELECT 100 * (e.time_waited_micro - b.time_waited_micro) / SUM(e.time_waited_micro - b.time_waited_micro) OVER () perc, + (e.time_waited_micro - b.time_waited_micro) / 1e6 / TO_NUMBER('&&cs_begin_end_seconds.') aas, + (e.time_waited_micro - b.time_waited_micro) / 1e3 / (e.total_waits - b.total_waits) avg_wait_ms, + e.wait_class, + e.event_name, + (e.time_waited_micro - b.time_waited_micro) / 1e6 waited_seconds, + (e.total_waits - b.total_waits) total_waits + FROM dba_hist_system_event b, + dba_hist_system_event e + WHERE b.dbid = TO_NUMBER('&&cs_dbid.') + AND b.instance_number = TO_NUMBER('&&cs_instance_number.') + AND b.snap_id = GREATEST(TO_NUMBER('&&cs_snap_id_from.'), TO_NUMBER('&&cs_startup_snap_id.')) + AND b.wait_class <> 'Idle' + AND e.dbid = TO_NUMBER('&&cs_dbid.') + AND e.instance_number = TO_NUMBER('&&cs_instance_number.') + AND e.snap_id = TO_NUMBER('&&cs_snap_id_to.') + AND e.wait_class <> 'Idle' + AND e.event_id = b.event_id + AND e.event_name = b.event_name + AND e.wait_class_id = b.wait_class_id + AND e.wait_class = b.wait_class + AND e.time_waited_micro > b.time_waited_micro + AND e.total_waits > b.total_waits + ORDER BY + e.time_waited_micro - b.time_waited_micro DESC +FETCH FIRST 30 ROWS ONLY +/ +-- +CLEAR BREAK COMPUTE; +PRO +PRO 3. Event Name: +DEF event_name_1 = '&3.'; +UNDEF 3; +DEF wait_class_1 = ''; +COL wait_class_1 NEW_V wait_class_1 NOPRI; +SELECT wait_class wait_class_1 FROM dba_hist_system_event WHERE event_name = '&&event_name_1.' AND ROWNUM = 1 +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "System Event Histogram for: &&wait_class_1 - &&event_name_1."; +DEF chart_title = "System Event Histogram for: &&wait_class_1 - &&event_name_1."; +DEF xaxis_title = "Wait Time buckets (in ms) between &&cs_sample_time_from. and &&cs_sample_time_to."; +DEF vaxis_title = "Average Active Sessions (AAS)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&event_name_1."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'>65536' , id:'01', type:'number'} +PRO ,{label:'32768-65536', id:'02', type:'number'} +PRO ,{label:'16384-32768', id:'03', type:'number'} +PRO ,{label:'8192-16384' , id:'04', type:'number'} +PRO ,{label:'4096-8192' , id:'05', type:'number'} +PRO ,{label:'2048-4096' , id:'06', type:'number'} +PRO ,{label:'1024-2048' , id:'07', type:'number'} +PRO ,{label:'512-1024' , id:'08', type:'number'} +PRO ,{label:'256-512' , id:'09', type:'number'} +PRO ,{label:'128-256' , id:'10', type:'number'} +PRO ,{label:'64-128' , id:'11', type:'number'} +PRO ,{label:'32-64' , id:'12', type:'number'} +PRO ,{label:'16-32' , id:'13', type:'number'} +PRO ,{label:'8-16' , id:'14', type:'number'} +PRO ,{label:'4-8' , id:'15', type:'number'} +PRO ,{label:'2-4' , id:'16', type:'number'} +PRO ,{label:'1-2' , id:'17', type:'number'} +PRO ,{label:'0-1' , id:'18', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +event_histogram AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_id, + wait_time_milli bucket, + (CASE wait_time_milli WHEN 1 THEN 0.5 ELSE 0.75 END) * wait_time_milli * (wait_count - LAG(wait_count) OVER (PARTITION BY wait_time_milli ORDER BY snap_id)) / 1e3 seconds + FROM dba_hist_event_histogram + WHERE dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') - 1 AND TO_NUMBER('&&cs_snap_id_to.') + AND wait_class = '&&wait_class_1.' + AND event_name = '&&event_name_1.' +), +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + CAST(s.end_interval_time AS DATE) time, + (CAST(s.end_interval_time AS DATE) - CAST(s.begin_interval_time AS DATE)) * 24 * 3600 interval_seconds, + SUM(CASE WHEN bucket = POWER(2,0) THEN seconds ELSE 0 END) b01, + SUM(CASE WHEN bucket = POWER(2,1) THEN seconds ELSE 0 END) b02, + SUM(CASE WHEN bucket = POWER(2,2) THEN seconds ELSE 0 END) b03, + SUM(CASE WHEN bucket = POWER(2,3) THEN seconds ELSE 0 END) b04, + SUM(CASE WHEN bucket = POWER(2,4) THEN seconds ELSE 0 END) b05, + SUM(CASE WHEN bucket = POWER(2,5) THEN seconds ELSE 0 END) b06, + SUM(CASE WHEN bucket = POWER(2,6) THEN seconds ELSE 0 END) b07, + SUM(CASE WHEN bucket = POWER(2,7) THEN seconds ELSE 0 END) b08, + SUM(CASE WHEN bucket = POWER(2,8) THEN seconds ELSE 0 END) b09, + SUM(CASE WHEN bucket = POWER(2,9) THEN seconds ELSE 0 END) b10, + SUM(CASE WHEN bucket = POWER(2,10) THEN seconds ELSE 0 END) b11, + SUM(CASE WHEN bucket = POWER(2,11) THEN seconds ELSE 0 END) b12, + SUM(CASE WHEN bucket = POWER(2,12) THEN seconds ELSE 0 END) b13, + SUM(CASE WHEN bucket = POWER(2,13) THEN seconds ELSE 0 END) b14, + SUM(CASE WHEN bucket = POWER(2,14) THEN seconds ELSE 0 END) b15, + SUM(CASE WHEN bucket = POWER(2,15) THEN seconds ELSE 0 END) b16, + SUM(CASE WHEN bucket = POWER(2,16) THEN seconds ELSE 0 END) b17, + SUM(CASE WHEN bucket > POWER(2,16) THEN seconds ELSE 0 END) b18 + FROM event_histogram h, + dba_hist_snapshot s + WHERE h.seconds > 0 + AND s.snap_id = h.snap_id + AND s.dbid = TO_NUMBER('&&cs_dbid.') + AND s.instance_number = TO_NUMBER('&&cs_instance_number.') + AND s.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + GROUP BY + s.begin_interval_time, + s.end_interval_time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.b18 / q.interval_seconds, 3)|| + ','||num_format(q.b17 / q.interval_seconds, 3)|| + ','||num_format(q.b16 / q.interval_seconds, 3)|| + ','||num_format(q.b15 / q.interval_seconds, 3)|| + ','||num_format(q.b14 / q.interval_seconds, 3)|| + ','||num_format(q.b13 / q.interval_seconds, 3)|| + ','||num_format(q.b12 / q.interval_seconds, 3)|| + ','||num_format(q.b11 / q.interval_seconds, 3)|| + ','||num_format(q.b10 / q.interval_seconds, 3)|| + ','||num_format(q.b09 / q.interval_seconds, 3)|| + ','||num_format(q.b08 / q.interval_seconds, 3)|| + ','||num_format(q.b07 / q.interval_seconds, 3)|| + ','||num_format(q.b06 / q.interval_seconds, 3)|| + ','||num_format(q.b05 / q.interval_seconds, 3)|| + ','||num_format(q.b04 / q.interval_seconds, 3)|| + ','||num_format(q.b03 / q.interval_seconds, 3)|| + ','||num_format(q.b02 / q.interval_seconds, 3)|| + ','||num_format(q.b01 / q.interval_seconds, 3)|| + ']' + FROM my_query q + WHERE q.interval_seconds > 0 + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_systemstate.sql b/csierra/cs_systemstate.sql new file mode 100644 index 0000000..877030c --- /dev/null +++ b/csierra/cs_systemstate.sql @@ -0,0 +1,27 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_systemstate.sql +-- +-- Purpose: Generate System State Dump Trace +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_systemstate.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +ALTER SESSION SET tracefile_identifier = 'iod_systemstate'; +COL trace_file NEW_V trace_file; +SELECT value trace_file FROM v$diag_info WHERE name = 'Default Trace File'; +oradebug setmypid +oradebug unlimit +oradebug dump systemstate 266 +oradebug tracefile_name +HOS cp &&trace_file. /tmp diff --git a/csierra/cs_table.sql b/csierra/cs_table.sql new file mode 100644 index 0000000..105ffc7 --- /dev/null +++ b/csierra/cs_table.sql @@ -0,0 +1,818 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_table.sql +-- +-- Purpose: Table Details +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/01/20 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter table owner and table name when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_table.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_table'; +-- +COL owner NEW_V owner FOR A30 HEA 'TABLE_OWNER'; +SELECT DISTINCT t.owner + FROM dba_tables t, + dba_users u + WHERE u.username = t.owner + AND u.oracle_maintained = 'N' + AND u.username NOT LIKE 'C##'||CHR(37) + ORDER BY 1 +/ +COL table_owner NEW_V table_owner FOR A30; +PRO +PRO 1. Table Owner: +DEF table_owner = '&1.'; +UNDEF 1; +SELECT UPPER(TRIM(NVL('&&table_owner.', '&&owner.'))) table_owner FROM DUAL +/ +-- +COL name NEW_V name FOR A30 HEA 'TABLE_NAME'; +COL num_rows FOR 99,999,999,990; +COL blocks FOR 99,999,999,990; +COL rows_per_block FOR 999,990.0; +COL avg_row_len FOR 999,990; +COL lobs FOR 9990; +SELECT t.table_name name, t.num_rows, t.blocks, ROUND(t.num_rows / NULLIF(t.blocks, 0), 1) AS rows_per_block, t.avg_row_len, + (SELECT COUNT(*) FROM dba_lobs l WHERE l.owner = t.owner AND l.table_name = t.table_name) AS lobs, + t.partitioned + FROM dba_tables t, + dba_users u + WHERE t.owner = UPPER(TRIM('&&table_owner.')) + AND u.username = t.owner + AND u.oracle_maintained = 'N' + AND u.username NOT LIKE 'C##'||CHR(37) + ORDER BY 1 +/ +PRO +PRO 2. Table Name: +DEF table_name = '&2.'; +UNDEF 2; +COL table_name NEW_V table_name; +SELECT UPPER(TRIM(NVL('&&table_name.', '&&name.'))) table_name FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&table_owner..&&table_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&table_owner." "&&table_name." +@@cs_internal/cs_spool_id.sql +-- +PRO TABLE_OWNER : &&table_owner. +PRO TABLE_NAME : &&table_name. +-- +DEF specific_owner = '&&table_owner.'; +DEF specific_table = '&&table_name.'; +DEF order_by = 't.owner, t.table_name'; +DEF fetch_first_N_rows = '1'; +PRO +PRO SUMMARY &&table_owner..&&table_name. +PRO ~~~~~~~ +@@cs_internal/cs_tables_internal.sql +-- +COL owner FOR A30 HEA 'Owner' TRUNC; +COL segment_name FOR A30 TRUNC; +COL partition_name FOR A30 TRUNC; +COL column_name FOR A30 TRUNC; +COL segments FOR 9,999,990; +-- +COL mebibytes FOR 999,999,990.000 HEA 'Size MiB'; +COL megabytes FOR 999,999,990.000 HEA 'Size MB'; +COL tablespace_name FOR A30 HEA 'Tablespace'; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF mebibytes megabytes segments ON REPORT; +-- +PRO +PRO SEGMENTS (dba_segments) top 100 &&table_owner..&&table_name. +PRO ~~~~~~~~ +WITH +t AS ( +SELECT owner, table_name + FROM dba_tables + WHERE owner = '&&table_owner.' + AND table_name = '&&table_name.' +), +s AS ( +SELECT 1 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, NULL AS column_name, s.bytes, s.tablespace_name + FROM t, dba_segments s + WHERE s.owner = t.owner + AND s.segment_name = t.table_name + AND s.segment_type LIKE 'TABLE%' + UNION ALL +SELECT 2 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, NULL AS column_name, s.bytes, s.tablespace_name + FROM t, dba_indexes i, dba_segments s + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name + AND s.owner = i.owner + AND s.segment_name = i.index_name + AND s.segment_type LIKE 'INDEX%' + UNION ALL +SELECT 3 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, l.column_name, s.bytes, s.tablespace_name + FROM t, dba_lobs l, dba_segments s + WHERE l.owner = t.owner + AND l.table_name = t.table_name + AND s.owner = l.owner + AND s.segment_name = l.segment_name + AND s.segment_type LIKE 'LOB%' +) +--SELECT ROUND(bytes/POWER(2,20),3) AS mebibytes, segment_type, owner, column_name, segment_name, partition_name, tablespace_name +SELECT ROUND(bytes/POWER(10,6),3) AS megabytes, segment_type, owner, column_name, segment_name, partition_name, tablespace_name + FROM s + ORDER BY bytes DESC, oby, segment_type, owner, column_name, segment_name, partition_name + FETCH FIRST 100 ROWS ONLY +/ +-- +PRO +PRO SEGMENT TYPE (dba_segments) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~ +WITH +t AS ( +SELECT owner, table_name + FROM dba_tables + WHERE owner = '&&table_owner.' + AND table_name = '&&table_name.' +), +s AS ( +SELECT 1 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, NULL AS column_name, s.bytes, s.tablespace_name + FROM t, dba_segments s + WHERE s.owner = t.owner + AND s.segment_name = t.table_name + AND s.segment_type LIKE 'TABLE%' + UNION ALL +SELECT 2 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, NULL AS column_name, s.bytes, s.tablespace_name + FROM t, dba_indexes i, dba_segments s + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name + AND s.owner = i.owner + AND s.segment_name = i.index_name + AND s.segment_type LIKE 'INDEX%' + UNION ALL +SELECT 3 AS oby, s.segment_type, s.owner, s.segment_name, s.partition_name, l.column_name, s.bytes, s.tablespace_name + FROM t, dba_lobs l, dba_segments s + WHERE l.owner = t.owner + AND l.table_name = t.table_name + AND s.owner = l.owner + AND s.segment_name = l.segment_name + AND s.segment_type LIKE 'LOB%' +) +--SELECT segment_type, COUNT(*) AS segments, ROUND(SUM(bytes)/POWER(2,20),3) AS mebibytes, tablespace_name +SELECT segment_type, COUNT(*) AS segments, ROUND(SUM(bytes)/POWER(10,6),3) AS megabytes, tablespace_name + FROM s + GROUP BY oby, segment_type, tablespace_name + ORDER BY oby, segment_type, tablespace_name +/ +-- +CLEAR BREAK COMPUTE; +-- +COL partitioned FOR A4 HEA 'Part'; +COL degree FOR A10 HEA 'Degree'; +COL temporary FOR A4 HEA 'Temp'; +COL blocks FOR 999,999,990 HEA 'Blocks'; +COL num_rows FOR 999,999,999,990 HEA 'Num Rows'; +COL avg_row_len FOR 999,999,990 HEA 'Avg Row Len'; +COL size_MiB FOR 999,999,990.000 HEA 'Size MiB'; +COL seg_size_MiB FOR 999,999,990.000 HEA 'Seg Size MiB'; +COL estimated_MiB FOR 999,999,990.000 HEA 'Estimated MiB'; +COL size_MB FOR 999,999,990.000 HEA 'Size MB'; +COL seg_size_MB FOR 999,999,990.000 HEA 'Seg Size MB'; +COL estimated_MB FOR 999,999,990.000 HEA 'Estimated MB'; +COL sample_size FOR 999,999,999,990 HEA 'Sample Size'; +COL last_analyzed FOR A19 HEA 'Last Analyzed'; +COL compression FOR A12 HEA 'Compression'; +COL tablespace_name FOR A30 HEA 'Tablespace'; +-- +PRO +PRO TABLES (dba_tables) &&table_owner..&&table_name. +PRO ~~~~~~ +SELECT CASE t.partitioned WHEN 'YES' THEN (SELECT TRIM(TO_CHAR(COUNT(*))) FROM dba_tab_partitions tp WHERE tp.table_owner = t.owner AND tp.table_name = t.table_name) ELSE t.partitioned END AS partitioned, + t.degree, + t.temporary, + t.blocks, + --t.blocks * COALESCE(b.block_size, TO_NUMBER(p.value)) / POWER(2,20) AS size_MiB, + t.blocks * COALESCE(b.block_size, TO_NUMBER(p.value)) / POWER(10,6) AS size_MB, + --(SELECT SUM(s.bytes) / POWER(2,20) FROM dba_segments s WHERE s.owner = t.owner AND s.segment_name = t.table_name AND s.segment_type LIKE 'TABLE%') AS seg_size_MiB, + (SELECT SUM(s.bytes) / POWER(10,6) FROM dba_segments s WHERE s.owner = t.owner AND s.segment_name = t.table_name AND s.segment_type LIKE 'TABLE%') AS seg_size_MB, + t.num_rows, + t.avg_row_len, + --t.num_rows * t.avg_row_len / POWER(2,20) AS estimated_MiB, + t.num_rows * t.avg_row_len / POWER(10,6) AS estimated_MB, + t.sample_size, + TO_CHAR(t.last_analyzed, '&&cs_datetime_full_format.') AS last_analyzed, + t.compression, + t.tablespace_name + FROM dba_tables t, + dba_tablespaces b, + v$parameter p + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' + AND b.tablespace_name(+) = t.tablespace_name + AND p.name = 'db_block_size' +/ +-- +COL analyzetime FOR A19 HEA 'Analyze Time'; +COL rowcnt FOR 999,999,999,990 HEA 'Row Count'; +COL blkcnt FOR 999,999,990 HEA 'Block Count'; +COL avgrln FOR 999,999,990 HEA 'Avg Row Len'; +COL samplesize FOR 999,999,999,990 HEA 'Sample Size'; +COL rows_inc FOR 999,999,999,990 HEA 'Rows Increase'; +COL days_gap FOR 999,990.0 HEA 'Days Gap'; +COL monthly_growth_perc FOR 999,990.000 HEA 'Monthly Growth Perc%'; +-- +PRO +PRO CBO STAT TABLE HISTORY (wri$_optstat_tab_history and dba_tables) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~~~~~~~~~~ +WITH +cbo_hist AS ( +SELECT h.analyzetime, + h.rowcnt, + h.blkcnt, + h.avgrln, + h.samplesize + FROM dba_objects o, + wri$_optstat_tab_history h + WHERE o.owner = '&&table_owner.' + AND o.object_name = '&&table_name.' + AND o.object_type = 'TABLE' + AND h.obj# = o.object_id + AND h.analyzetime IS NOT NULL + UNION +SELECT t.last_analyzed AS analyzetime, + t.num_rows AS rowcnt, + t.blocks AS blkcnt, + t.avg_row_len AS avgrln, + t.sample_size AS samplesize + FROM dba_tables t + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' +), +cbo_hist_extended AS ( +SELECT h.analyzetime, + h.rowcnt, + h.blkcnt, + h.avgrln, + h.samplesize, + h.rowcnt - LAG(h.rowcnt) OVER (ORDER BY h.analyzetime) AS rows_inc, + h.analyzetime - LAG(h.analyzetime) OVER (ORDER BY h.analyzetime) AS days_gap, + 100 * (365.25 / 12) * (h.rowcnt - LAG(h.rowcnt) OVER (ORDER BY h.analyzetime)) / NULLIF((h.analyzetime - LAG(h.analyzetime) OVER (ORDER BY h.analyzetime)), 0) / NULLIF(h.rowcnt, 0) AS monthly_growth_perc + FROM cbo_hist h +) +SELECT TO_CHAR(h.analyzetime, '&&cs_datetime_full_format.') AS analyzetime, + h.blkcnt, + h.rowcnt, + h.rows_inc, + h.days_gap, + h.monthly_growth_perc, + h.avgrln, + h.samplesize + FROM cbo_hist_extended h + ORDER BY + 1 +/ +PRO +PRO GROWTH (wri$_optstat_tab_history and dba_tables) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +WITH +oldest AS ( +SELECT h.analyzetime, + h.rowcnt + FROM dba_objects o, + wri$_optstat_tab_history h + WHERE o.owner = '&&table_owner.' + AND o.object_name = '&&table_name.' + AND o.object_type = 'TABLE' + AND h.obj# = o.object_id + AND h.analyzetime IS NOT NULL + AND h.rowcnt > 0 + ORDER BY + h.analyzetime + FETCH FIRST 1 ROW ONLY +), +newest AS ( +SELECT t.last_analyzed AS analyzetime, + t.num_rows AS rowcnt + FROM dba_tables t + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' + AND t.num_rows > 0 + AND ROWNUM = 1 +) +SELECT 100 * (365 / 12) * (n.rowcnt - o.rowcnt) / (n.analyzetime - o.analyzetime) / o.rowcnt AS monthly_growth_perc + FROM oldest o, newest n + WHERE n.analyzetime > o.analyzetime +/ +-- +COL object_type HEA 'Object Type' FOR A30; +COL object_id FOR 999999999 HEA 'Object ID'; +COL object_name FOR A30 HEA 'Object Name' TRUNC; +COL subobject_name FOR A30 HEA 'Sub Object Name' TRUNC; +COL created FOR A23 HEA 'Created'; +COL last_ddl_time FOR A23 HEA 'Last DDL Time'; +-- +PRO +PRO TABLE OBJECTS (dba_objects) up to 100 &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~ +SELECT o.object_type, + o.subobject_name, + o.object_id, + TO_CHAR(o.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(o.last_ddl_time, '&&cs_datetime_full_format.') AS last_ddl_time + FROM dba_objects o + WHERE o.owner = '&&table_owner.' + AND o.object_name = '&&table_name.' + AND o.object_type LIKE 'TABLE%' + ORDER BY + o.object_type, + o.object_id +FETCH FIRST 100 ROWS ONLY +/ +-- +COL index_name FOR A30 HEA 'Index Name'; +COL partitioned FOR A4 HEA 'Part'; +COL orphaned_entries FOR A8 HEA 'Orphaned|Entries'; +COL degree FOR A10 HEA 'Degree'; +COL index_type FOR A27 HEA 'Index Type'; +COL uniqueness FOR A10 HEA 'Uniqueness'; +COL columns FOR 999,999 HEA 'Columns'; +COL status FOR A8 HEA 'Status'; +COL visibility FOR A10 HEA 'Visibility'; +COL blevel FOR 99,990 HEA 'BLevel'; +COL leaf_blocks FOR 999,999,990 HEA 'Leaf Blocks'; +COL size_MiB FOR 999,999,990.000 HEA 'Size MiB'; +COL seg_size_MiB FOR 999,999,990.000 HEA 'Seg Size MiB'; +COL size_MB FOR 999,999,990.000 HEA 'Size MB'; +COL seg_size_MB FOR 999,999,990.000 HEA 'Seg Size MB'; +COL distinct_keys FOR 999,999,999,990 HEA 'Dist Keys'; +COL clustering_factor FOR 999,999,999,990 HEA 'Clust Fact'; +COL num_rows FOR 999,999,999,990 HEA 'Num Rows'; +COL sample_size FOR 999,999,999,990 HEA 'Sample Size'; +COL last_analyzed FOR A19 HEA 'Last Analyzed'; +COL compression FOR A13 HEA 'Compression'; +COL tablespace_name FOR A30 HEA 'Tablespace'; +-- +PRO +PRO INDEXES (dba_indexes) &&table_owner..&&table_name. +PRO ~~~~~~~ +SELECT i.index_name, + CASE i.partitioned WHEN 'YES' THEN (SELECT TRIM(TO_CHAR(COUNT(*))) FROM dba_ind_partitions ip WHERE ip.index_owner = i.owner AND ip.index_name = i.index_name) ELSE i.partitioned END AS partitioned, + i.orphaned_entries, + i.degree, + i.index_type, + i.uniqueness, + (SELECT COUNT(*) FROM dba_ind_columns ic WHERE ic.index_owner = i.owner AND ic.index_name = i.index_name) AS columns, + i.status, + i.visibility, + i.blevel, + i.leaf_blocks, + --i.leaf_blocks * COALESCE(b.block_size, TO_NUMBER(p.value)) / POWER(2,20) AS size_MiB, + i.leaf_blocks * COALESCE(b.block_size, TO_NUMBER(p.value)) / POWER(10,6) AS size_MB, + --(SELECT SUM(s.bytes) / POWER(2,20) FROM dba_segments s WHERE s.owner = i.owner AND s.segment_name = i.index_name AND s.segment_type LIKE 'INDEX%') AS seg_size_MiB, + (SELECT SUM(s.bytes) / POWER(10,6) FROM dba_segments s WHERE s.owner = i.owner AND s.segment_name = i.index_name AND s.segment_type LIKE 'INDEX%') AS seg_size_MB, + i.distinct_keys, + i.clustering_factor, + i.num_rows, + i.sample_size, + TO_CHAR(i.last_analyzed, '&&cs_datetime_full_format.') AS last_analyzed, + i.compression, + i.tablespace_name + FROM dba_indexes i, + dba_tablespaces b, + v$parameter p + WHERE i.table_owner = '&&table_owner.' + AND i.table_name = '&&table_name.' + AND b.tablespace_name(+) = i.tablespace_name + AND p.name = 'db_block_size' + ORDER BY + i.index_name +/ +-- +PRO +PRO INDEX OBJECTS (dba_objects) up to 100 &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~ +SELECT o.object_type, + o.object_name, + o.subobject_name, + o.object_id, + TO_CHAR(o.created, '&&cs_datetime_full_format.') AS created, + TO_CHAR(o.last_ddl_time, '&&cs_datetime_full_format.') AS last_ddl_time + FROM dba_indexes i, + dba_objects o + WHERE i.table_owner = '&&table_owner.' + AND i.table_name = '&&table_name.' + AND o.owner = i.owner + AND o.object_name = i.index_name + AND o.object_type LIKE 'INDEX%' + ORDER BY + o.object_type, + o.object_name, + o.subobject_name +FETCH FIRST 100 ROWS ONLY +/ +-- +COL part_sub FOR A12 HEA 'LEVEL'; +COL object_type FOR A5 HEA 'TYPE'; +COL owner FOR A30 HEA 'Owner' TRUNC; +COL name FOR A30 HEA 'Name' TRUNC; +COL column_position FOR 999 HEA 'POS'; +COL column_name FOR A30 TRUNC; +-- +PRO +PRO PARTITION KEYS (dba_part_key_columns and dba_subpart_key_columns) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~~ +-- +WITH /* PART_KEY_COLUMNS */ +dba_tables_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_tables) */ + t.owner, + t.table_name + FROM dba_tables t + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' +), +dba_indexes_m AS ( +SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(dba_indexes) */ + i.owner, + i.index_name + FROM dba_tables_m t, + dba_indexes i + WHERE i.table_owner = t.owner + AND i.table_name = t.table_name +), +objects_m AS ( +SELECT owner, table_name AS name, 'TABLE' AS object_type + FROM dba_tables_m + UNION +SELECT owner, index_name AS name, 'INDEX' AS object_type + FROM dba_indexes_m +) +SELECT 'PARTITION' AS part_sub, + p.object_type, + p.owner, + p.name, + p.column_position, + p.column_name + FROM dba_part_key_columns p, + objects_m o + WHERE o.owner = p.owner + AND o.name = p.name + AND o.object_type = p.object_type + UNION ALL +SELECT 'SUBPARTITION' AS part_sub, + p.object_type, + p.owner, + p.name, + p.column_position, + p.column_name + FROM dba_subpart_key_columns p, + objects_m o + WHERE o.owner = p.owner + AND o.name = p.name + AND o.object_type = p.object_type + ORDER BY + 1 ASC, 2 DESC, 3, 4, 5 +/ +-- +COL index_name FOR A30 HEA 'Index Name'; +COL visibility FOR A10 HEA 'Visibility'; +COL partitioned FOR A4 HEA 'Part'; +COL column_position FOR 999 HEA 'Pos'; +COL column_name FOR A30 HEA 'Column Name'; +COL data_type FOR A33 HEA 'Data Type'; +COL nullable FOR A8 HEA 'Nullable'; +COL data_default FOR A30 HEA 'Data Default'; +COL num_distinct FOR 999,999,999,990 HEA 'Num Distinct'; +COL low_value_translated FOR A64 HEA 'Low Value Translated'; +COL high_value_translated FOR A64 HEA 'High Value Translated'; +COL density FOR 0.000000000 HEA 'Density'; +COL num_nulls FOR 999,999,999,990 HEA 'Num Nulls'; +COL num_buckets FOR 999,990 HEA 'Buckets'; +COL histogram FOR A15 HEA 'Histogram'; +COL sample_size FOR 999,999,999,990 HEA 'Sample Size'; +COL last_analyzed FOR A19 HEA 'Last Analyzed'; +COL avg_col_len FOR 999,999,990 HEA 'Avg Col Len'; +COL data_length FOR 999,999,990 HEA 'Data Length'; +COL char_length FOR 999,999,990 HEA 'Char Length'; +-- +BRE ON index_name SKIP 1 ON visibility ON partitioned; +-- +PRO +PRO INDEX COLUMNS (dba_ind_columns) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~ +WITH ic AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM dba_ind_columns WHERE table_owner = '&&table_owner.' AND table_name = '&&table_name.' AND ROWNUM >= 1), + tc AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM dba_tab_cols WHERE owner = '&&table_owner.' AND table_name = '&&table_name.' AND ROWNUM >= 1), + ix AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM dba_indexes WHERE table_owner = '&&table_owner.' AND table_name = '&&table_name.' AND ROWNUM >= 1) +SELECT i.index_name, + x.visibility, + x.partitioned, + i.column_position, + c.column_name, + c.data_type, + c.nullable, + c.data_default data_default, + c.num_distinct, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.low_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.low_value)),1,64) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.low_value)),1,64) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.low_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.low_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.low_value,15,8),'XXXXXXXX')) + END low_value_translated, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.high_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.high_value)),1,64) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.high_value)),1,64) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.high_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.high_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.high_value,15,8),'XXXXXXXX')) + END high_value_translated, + c.density, + c.num_nulls, + c.num_buckets, + c.histogram, + c.sample_size, + TO_CHAR(c.last_analyzed, '&&cs_datetime_full_format.') last_analyzed, + c.avg_col_len, + c.data_length, + c.char_length + FROM ic i, + tc c, + ix x + WHERE i.table_owner = '&&table_owner.' + AND i.table_name = '&&table_name.' + AND c.owner = i.table_owner + AND c.table_name = i.table_name + AND c.column_name = i.column_name + AND x.table_owner = i.table_owner + AND x.table_name = i.table_name + AND x.index_name = i.index_name + ORDER BY + i.index_name, + i.column_position +/ +-- +CL BRE; +-- +COL column_id FOR 999 HEA 'ID'; +COL column_name FOR A30 HEA 'Column Name'; +COL data_type FOR A33 HEA 'Data Type'; +COL nullable FOR A8 HEA 'Nullable'; +COL data_default FOR A30 HEA 'Data Default'; +COL num_distinct FOR 999,999,999,990 HEA 'Num Distinct'; +COL low_value_translated FOR A64 HEA 'Low Value Translated'; +COL high_value_translated FOR A64 HEA 'High Value Translated'; +COL density FOR 0.000000000 HEA 'Density'; +COL num_nulls FOR 999,999,999,990 HEA 'Num Nulls'; +COL num_buckets FOR 999,990 HEA 'Buckets'; +COL histogram FOR A15 HEA 'Histogram'; +COL sample_size FOR 999,999,999,990 HEA 'Sample Size'; +COL last_analyzed FOR A19 HEA 'Last Analyzed'; +COL avg_col_len FOR 999,999,990 HEA 'Avg Col Len'; +COL data_length FOR 999,999,990 HEA 'Data Length'; +COL char_length FOR 999,999,990 HEA 'Char Length'; +-- +BRE ON owner ON table_name SKIP 1; +-- +PRO +PRO TABLE COLUMNS (dba_tab_cols) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~ +SELECT c.column_id, + c.column_name, + c.data_type, + c.nullable, + c.data_default data_default, + c.num_distinct, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.low_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.low_value)),1,64) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.low_value)),1,64) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.low_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.low_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.low_value,15,8),'XXXXXXXX')) + END low_value_translated, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.high_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.high_value)),1,64) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.high_value)),1,64) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.high_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.high_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'T'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.high_value,15,8),'XXXXXXXX')) + END high_value_translated, + c.density, + c.num_nulls, + c.num_buckets, + c.histogram, + c.sample_size, + TO_CHAR(c.last_analyzed, '&&cs_datetime_full_format.') last_analyzed, + c.avg_col_len, + c.data_length, + c.char_length + FROM dba_tab_cols c + WHERE c.owner = '&&table_owner.' + AND c.table_name = '&&table_name.' + ORDER BY + c.column_id +/ +-- +CL BRE; +-- +COL column_name FOR A30 HEA 'Column Name'; +COL index_name FOR A30 HEA 'Index Name'; +COL segment_name FOR A30 HEA 'Segment Name'; +COL bytes FOR 999,999,999,990 HEA 'Bytes'; +COL blocks FOR 999,999,990 HEA 'Blocks'; +COL size_MiB FOR 999,999,990.000 HEA 'Size MiB'; +COL size_MB FOR 999,999,990.000 HEA 'Size MB'; +COL deduplication FOR A13 HEA 'Deduplication'; +COL compression FOR A11 HEA 'Compression'; +COL encrypt FOR A7 HEA 'Encrypt'; +COL cache FOR A5 HEA 'Cache'; +COL securefile FOR A10 HEA 'SecureFile'; +COL in_row FOR A6 HEA 'In Row'; +COL tablespace_name FOR A30 HEA 'Tablespace'; +-- +BRE ON owner ON table_name SKIP 1; +-- +SET HEA OFF; +PRO +PRO COLUMN USAGE REPORT (dbms_stats.report_col_usage) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~~~~~~~ +SELECT DBMS_STATS.report_col_usage('&&table_owner.', '&&table_name.') + FROM DUAL +/ +SET HEA ON; +-- +PRO +PRO LOBS (dba_lobs) +PRO ~~~~ +SELECT l.column_name, + l.index_name, + l.segment_name, + SUM(s.bytes) AS bytes, + SUM(s.blocks) AS blocks, + --SUM(s.blocks) * COALESCE(b.block_size, TO_NUMBER(p.value)) / POWER(2,20) AS size_MiB, + SUM(s.blocks) * COALESCE(b.block_size, TO_NUMBER(p.value)) / POWER(10,6) AS size_MB, + l.deduplication, + l.compression, + l.encrypt, + l.cache, + l.securefile, + l.in_row, + l.tablespace_name + FROM dba_lobs l, + dba_segments s, + dba_tablespaces b, + v$parameter p + WHERE l.owner = '&&table_owner.' + AND l.table_name = '&&table_name.' + AND s.owner = l.owner + AND s.segment_name = l.segment_name + AND s.segment_type IN ('LOBSEGMENT', 'LOB PARTITION') + AND b.tablespace_name(+) = l.tablespace_name + AND p.name = 'db_block_size' + GROUP BY + l.column_name, + l.index_name, + l.segment_name, + l.deduplication, + l.compression, + l.encrypt, + l.cache, + l.securefile, + l.in_row, + l.tablespace_name, + b.block_size, + p.value + ORDER BY + l.column_name +/ +-- +CL BRE; +-- +COL owner FOR A30 HEA 'Owner' TRUNC; +COL table_name FOR A30 HEA 'Table Name' TRUNC; +COL index_name FOR A30 HEA 'Index Name' TRUNC; +COL metadata FOR A200 HEA 'Metadata'; +-- +PRO +PRO TABLE METADATA (DBMS_METADATA.get_ddl) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~~ +SELECT t.owner, t.table_name, DBMS_METADATA.get_ddl('TABLE', t.table_name, t.owner) AS metadata + FROM dba_tables t + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' + ORDER BY + t.owner, t.table_name +/ +-- +PRO +PRO INDEX METADATA (DBMS_METADATA.get_ddl) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~~ +SELECT i.owner, i.table_name, i.index_name, DBMS_METADATA.get_ddl('INDEX', i.index_name, i.owner) AS metadata + FROM dba_tables t, + dba_indexes i + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' + AND i.table_owner = t.owner + AND i.table_name = t.table_name + ORDER BY + i.owner, + i.table_name, + i.index_name +/ +-- +COL num_rows FOR 999,999,999,990 HEA 'Num Rows'; +COL kievlive FOR A8 HEA 'KievLive'; +-- +PRO +PRO KIEV LIVE (dba_tab_histograms) &&table_owner..&&table_name. +PRO ~~~~~~~~~ +SELECT SUBSTR(UTL_RAW.CAST_TO_VARCHAR2(SUBSTR(LPAD(TO_CHAR(h.endpoint_value,'fmxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'),30,'0'),1,12)), 1, 8) kievlive, + h.endpoint_number - LAG(h.endpoint_number, 1, 0) OVER (ORDER BY h.endpoint_value) num_rows + FROM dba_tab_histograms h + WHERE h.owner = '&&table_owner.' + AND h.table_name = '&&table_name.' + AND h.column_name = 'KIEVLIVE' + ORDER BY + 1 +/ +-- +DEF cs_num_rows_limit_display = '1B'; +DEF cs_num_rows_limit_number = '1e9'; +@@cs_internal/cs_top_primary_keys_table.sql +@@cs_internal/cs_top_secondary_keys_table.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&table_owner." "&&table_name." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_table_mod_chart.sql b/csierra/cs_table_mod_chart.sql new file mode 100644 index 0000000..831e871 --- /dev/null +++ b/csierra/cs_table_mod_chart.sql @@ -0,0 +1,204 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_table_mod_chart.sql +-- +-- Purpose: Table Modification History (INS, DEL and UPD) for given Table (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/06/22 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter Table when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_table_mod_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_table_mod_chart'; +DEF cs_hours_range_default = '8760'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(last_analyzed)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_tables +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL owner NEW_V owner FOR A30 HEA 'TABLE_OWNER'; +COL oracle_maintained FOR A4 HEA 'ORCL'; +COL tables FOR 999,990; +BREAK ON oracle_maintained SKIP PAGE DUPL; +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + u.oracle_maintained, + t.owner, + COUNT(DISTINCT t.table_name) AS tables + FROM &&cs_tools_schema..dbc_tables t, + cdb_users u + WHERE t.pdb_name = '&&cs_con_name.' + AND t.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND u.username = t.owner + GROUP BY + u.oracle_maintained, + t.owner + ORDER BY + u.oracle_maintained DESC, + t.owner +/ +COL table_owner NEW_V table_owner FOR A30; +PRO +PRO 3. Table Owner: +DEF table_owner = '&3.'; +UNDEF 3; +SELECT UPPER(NVL('&&table_owner.', '&&owner.')) table_owner FROM DUAL +/ +-- +COL table_name FOR A30 PRI; +COL num_rows FOR 999,999,999,990; +COL blocks FOR 9,999,999,990; +WITH +sq1 AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + t.table_name, t.num_rows, t.blocks, t.last_analyzed, + ROW_NUMBER() OVER (PARTITION BY t.table_name ORDER BY t.snap_time DESC) AS rn + FROM &&cs_tools_schema..dbc_tables t, + v$containers c, + cdb_users u + WHERE t.pdb_name = '&&cs_con_name.' + AND t.owner = '&&table_owner.' + AND t.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND c.name = t.pdb_name + AND u.con_id = c.con_id + AND u.username = t.owner +) +SELECT t.table_name, t.num_rows, t.blocks, t.last_analyzed + FROM sq1 t + WHERE t.rn = 1 + ORDER BY + t.table_name +/ +PRO +PRO 4. Table Name: +DEF table_name = '&4.'; +UNDEF 4; +COL table_name NEW_V table_name FOR A30 NOPRI; +SELECT UPPER(TRIM('&&table_name.')) table_name FROM DUAL; +-- +PRO +PRO 5. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&5.'; +UNDEF 5; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&table_owner..&&table_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "&&table_owner..&&table_name."; +DEF chart_title = "&&table_owner..&&table_name."; +DEF xaxis_title = ""; +DEF vaxis_title = "Rows per Second"; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}, 2:{}"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&table_owner." "&&table_name." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Inserts', id:'1', type:'number'} +PRO ,{label:'Deletes', id:'2', type:'number'} +PRO ,{label:'Updates', id:'3', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT timestamp, + ROUND(inserts / ((timestamp - last_analyzed) * 24 * 60 * 60), 3) AS inserts_per_sec, + ROUND(updates / ((timestamp - last_analyzed) * 24 * 60 * 60), 3) AS updates_per_sec, + ROUND(deletes / ((timestamp - last_analyzed) * 24 * 60 * 60), 3) AS deletes_per_sec + FROM &&cs_tools_schema..dbc_tab_modifications + WHERE pdb_name = '&&cs_con_name.' + AND owner = '&&table_owner.' + AND table_name = '&&table_name.' + AND timestamp BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND inserts + updates + deletes >= 0 + AND timestamp - last_analyzed > 0 +) +SELECT ', [new Date('|| + TO_CHAR(q.timestamp, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.timestamp, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.timestamp, 'DD')|| /* day */ + ','||TO_CHAR(q.timestamp, 'HH24')|| /* hour */ + ','||TO_CHAR(q.timestamp, 'MI')|| /* minute */ + ','||TO_CHAR(q.timestamp, 'SS')|| /* second */ + ')'|| + ','||num_format(q.inserts_per_sec, 3)|| + ','||num_format(q.deletes_per_sec, 3)|| + ','||num_format(q.updates_per_sec, 3)|| + ']' + FROM my_query q + ORDER BY + q.timestamp +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = ''; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_table_mod_report.sql b/csierra/cs_table_mod_report.sql new file mode 100644 index 0000000..cf1ce99 --- /dev/null +++ b/csierra/cs_table_mod_report.sql @@ -0,0 +1,152 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_table_mod_report.sql +-- +-- Purpose: Table Modification History (INS, DEL and UPD) for given Table (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/03/18 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter Table when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_table_mod_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_table_mod_report'; +DEF cs_hours_range_default = '8760'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(last_analyzed)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_tables +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL owner NEW_V owner FOR A30 HEA 'TABLE_OWNER'; +COL oracle_maintained FOR A4 HEA 'ORCL'; +COL tables FOR 999,990; +BREAK ON oracle_maintained SKIP PAGE DUPL; +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + u.oracle_maintained, + t.owner, + COUNT(DISTINCT t.table_name) AS tables + FROM &&cs_tools_schema..dbc_tables t, + cdb_users u + WHERE t.pdb_name = '&&cs_con_name.' + AND t.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND u.username = t.owner + GROUP BY + u.oracle_maintained, + t.owner + ORDER BY + u.oracle_maintained DESC, + t.owner +/ +COL table_owner NEW_V table_owner FOR A30; +PRO +PRO 3. Table Owner: +DEF table_owner = '&3.'; +UNDEF 3; +SELECT UPPER(NVL('&&table_owner.', '&&owner.')) table_owner FROM DUAL +/ +-- +COL table_name FOR A30 PRI; +COL num_rows FOR 999,999,999,990; +COL blocks FOR 9,999,999,990; +WITH +sq1 AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + t.table_name, t.num_rows, t.blocks, t.last_analyzed, + ROW_NUMBER() OVER (PARTITION BY t.table_name ORDER BY t.snap_time DESC) AS rn + FROM &&cs_tools_schema..dbc_tables t, + v$containers c, + cdb_users u + WHERE t.pdb_name = '&&cs_con_name.' + AND t.owner = '&&table_owner.' + AND t.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND c.name = t.pdb_name + AND u.con_id = c.con_id + AND u.username = t.owner +) +SELECT t.table_name, t.num_rows, t.blocks, t.last_analyzed + FROM sq1 t + WHERE t.rn = 1 + ORDER BY + t.table_name +/ +PRO +PRO 4. Table Name: +DEF table_name = '&4.'; +UNDEF 4; +COL table_name NEW_V table_name FOR A30 NOPRI; +SELECT UPPER(TRIM('&&table_name.')) table_name FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&table_owner..&&table_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&table_owner." "&&table_name." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO TABLE_OWNER : &&table_owner. +PRO TABLE_NAME : &&table_name. +-- +COL inserts_per_sec FOR 999,990.000 HEA 'INSERTS|PER SEC'; +COL updates_per_sec FOR 999,990.000 HEA 'UPDATES|PER SEC'; +COL deletes_per_sec FOR 999,990.000 HEA 'DELETES|PER SEC'; +COL growth_per_sec FOR 999,990.000 HEA 'GROWTH|PER SEC'; +COL inserts FOR 999,999,990; +COL deletes FOR 999,999,990; +COL growth FOR 999,999,990; +COL updates FOR 999,999,990; +COL partition_name FOR A30; +BREAK ON REPORT; +COMPUTE AVG LABEL 'AVG' MAX LABEL 'MAX' OF inserts_per_sec updates_per_sec deletes_per_sec growth_per_sec inserts deletes growth updates ON REPORT; +-- +SELECT timestamp, + ROUND(inserts / ((timestamp - last_analyzed) * 24 * 60 * 60), 3) AS inserts_per_sec, + ROUND(deletes / ((timestamp - last_analyzed) * 24 * 60 * 60), 3) AS deletes_per_sec, + ROUND((inserts - deletes) / ((timestamp - last_analyzed) * 24 * 60 * 60), 3) AS growth_per_sec, + ROUND(updates / ((timestamp - last_analyzed) * 24 * 60 * 60), 3) AS updates_per_sec, + inserts, + deletes, + inserts - deletes AS growth, + updates, + partition_name + FROM &&cs_tools_schema..dbc_tab_modifications + WHERE pdb_name = '&&cs_con_name.' + AND owner = '&&table_owner.' + AND table_name = '&&table_name.' + AND timestamp BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND inserts + updates + deletes >= 0 + AND timestamp - last_analyzed > 0 + ORDER BY + timestamp, partition_name +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&table_owner." "&&table_name." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_table_redefinition_hist_report.sql b/csierra/cs_table_redefinition_hist_report.sql new file mode 100644 index 0000000..b0759ba --- /dev/null +++ b/csierra/cs_table_redefinition_hist_report.sql @@ -0,0 +1,148 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_table_redefinition_hist_report.sql +-- +-- Purpose: Table Redefinition History Report (IOD_REPEATING_SPACE_MAINTENANCE log) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/18 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_table_redefinition_hist_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_table_redefinition_hist_report'; +DEF cs_hours_range_default = '48'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +SELECT DISTINCT owner table_owner + FROM &&cs_tools_schema..table_redefinition_hist + WHERE '&&cs_con_name.' IN (pdb_name, 'CDB$ROOT') + ORDER BY 1 +/ +PRO +PRO 3. Table Owner (opt): +DEF table_owner = '&3.'; +UNDEF 3; +-- +SELECT DISTINCT table_name + FROM &&cs_tools_schema..table_redefinition_hist + WHERE '&&cs_con_name.' IN (pdb_name, 'CDB$ROOT') + AND owner = NVL(UPPER(TRIM('&&table_owner.')), owner) + ORDER BY 1 +/ +PRO +PRO 4. Table Name (opt): +DEF table_name = '&4.'; +UNDEF 4; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&table_owner." "&&table_name." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO TIME_TO : &&cs_sample_time_to. (&&cs_snap_id_to.) +PRO TABLE_OWNER : "&&table_owner." +PRO TABLE_NAME : "&&table_name." +-- +COL snap_time FOR A19 HEA 'CAPTURE_TIME'; +COL ddl_begin_time FOR A19; +COL ddl_end_time FOR A19; +COL ddl_secs FOR 999,990; +COL pdb_name FOR A35; +COL owner FOR A30; +COL table_name FOR A30; +COL total_saved_percent FOR 999,990.0 HEA 'Total|Saved|Percent'; +COL total_size_mbs_before FOR 999,990 HEA 'Total|Size (MBs)|Before'; +COL total_size_mbs_after FOR 999,990 HEA 'Total|Size (MBs)|After'; +COL table_saved_percent FOR 999,990.0 HEA 'Table|Saved|Percent'; +COL table_size_mbs_before FOR 999,990 HEA 'Table|Size (MBs)|Before'; +COL table_size_mbs_after FOR 999,990 HEA 'Table|Size (MBs)|After'; +COL indexes_saved_percent FOR 999,990.0 HEA 'Index(es)|Saved|Percent'; +COL all_index_size_mbs_before FOR 999,990 HEA 'Index(es)|Size (MBs)|Before'; +COL all_index_size_mbs_after FOR 999,990 HEA 'Index(es)|Size (MBs)|After'; +COL lobs_saved_percent FOR 999,990.0 HEA 'Lob(s)|Saved|Percent'; +COL all_lobs_size_mbs_before FOR 999,990 HEA 'Lob(s)|Size (MBs)|Before'; +COL all_lobs_size_mbs_after FOR 999,990 HEA 'Lob(s)|Size (MBs)|After'; +COL error_message FOR A120 HEA 'Error Message'; +-- +WITH +hist AS ( +SELECT snap_time, + ddl_begin_time, + ddl_end_time, + pdb_name, + con_id, + owner, + table_name, + NVL(table_size_mbs_before, 0) + NVL(all_index_size_mbs_before, 0) + NVL(all_lobs_size_mbs_before, 0) total_size_mbs_before, + table_size_mbs_before, + all_index_size_mbs_before, + all_lobs_size_mbs_before, + NVL(table_size_mbs_after, 0) + NVL(all_index_size_mbs_after, 0) + NVL(all_lobs_size_mbs_after, 0) total_size_mbs_after, + table_size_mbs_after, + all_index_size_mbs_after, + all_lobs_size_mbs_after, + error_message + FROM &&cs_tools_schema..table_redefinition_hist + WHERE '&&cs_con_name.' IN (pdb_name, 'CDB$ROOT') + AND snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND owner = NVL(UPPER(TRIM('&&table_owner.')), owner) + AND table_name = NVL(UPPER(TRIM('&&table_name.')), table_name) +) +SELECT snap_time, + ddl_begin_time, + ddl_end_time, + (ddl_end_time - ddl_begin_time) * 24 * 3600 ddl_secs, + pdb_name||'('||con_id||')' pdb_name, + owner, + table_name, + 100 * (total_size_mbs_before - total_size_mbs_after) / NULLIF(total_size_mbs_before, 0) total_saved_percent, + total_size_mbs_before, + total_size_mbs_after, + 100 * (table_size_mbs_before - table_size_mbs_after) / NULLIF(table_size_mbs_before, 0) table_saved_percent, + table_size_mbs_before, + table_size_mbs_after, + 100 * (all_index_size_mbs_before - all_index_size_mbs_after) / NULLIF(all_index_size_mbs_before, 0) indexes_saved_percent, + all_index_size_mbs_before, + all_index_size_mbs_after, + 100 * (all_lobs_size_mbs_before - all_lobs_size_mbs_after) / NULLIF(all_lobs_size_mbs_before, 0) lobs_saved_percent, + all_lobs_size_mbs_before, + all_lobs_size_mbs_after, + error_message + FROM hist + ORDER BY + snap_time, + ddl_begin_time +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&table_owner." "&&table_name." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_table_segments_chart.sql b/csierra/cs_table_segments_chart.sql new file mode 100644 index 0000000..2532051 --- /dev/null +++ b/csierra/cs_table_segments_chart.sql @@ -0,0 +1,245 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_table_segments_chart.sql +-- +-- Purpose: Table-related Segment Size GBs (Table, Indexes and Lobs) for given Table (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/25 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter Table when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_table_segments_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_table_segments_chart'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET "_px_cdb_view_enabled" = FALSE; +-- +COL owner NEW_V owner FOR A30 HEA 'TABLE_OWNER'; +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ DISTINCT h.owner + FROM &&cs_tools_schema..dbc_segments h, + cdb_users u + WHERE h.pdb_name = '&&cs_con_name.' + AND h.owner NOT LIKE 'C##'||CHR(37) + AND h.segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION') + AND h.segment_name NOT LIKE 'BIN$%==$0' + AND h.segment_name NOT LIKE 'MLOG$%' + AND h.segment_name NOT LIKE 'REDEF$%' + AND u.con_id = &&cs_con_id. + AND u.username = h.owner + AND u.oracle_maintained = 'N' + ORDER BY 1 +/ +COL table_owner NEW_V table_owner FOR A30; +PRO +PRO 1. Table Owner: +DEF table_owner = '&1.'; +UNDEF 1; +SELECT UPPER(NVL('&&table_owner.', '&&owner.')) table_owner FROM DUAL +/ +-- +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ DISTINCT h.segment_name table_name + FROM &&cs_tools_schema..dbc_segments h, + cdb_users u + WHERE h.owner = '&&table_owner.' + AND h.pdb_name = '&&cs_con_name.' + AND h.segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION') + AND h.segment_name NOT LIKE 'BIN$%==$0' + AND h.segment_name NOT LIKE 'MLOG$%' + AND h.segment_name NOT LIKE 'REDEF$%' + AND u.con_id = &&cs_con_id. + AND u.username = h.owner + AND u.oracle_maintained = 'N' + ORDER BY 1 +/ +PRO +PRO 2. Table Name: +DEF table_name = '&2.'; +UNDEF 2; +COL table_name NEW_V table_name NOPRI; +SELECT UPPER(TRIM('&&table_name.')) table_name FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&table_owner..&&table_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "&&table_owner..&&table_name."; +DEF chart_title = "&&table_owner..&&table_name."; +DEF xaxis_title = ""; +--DEF vaxis_title = "Gibibytes (GiB)"; +DEF vaxis_title = "Gigabytes (GB)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&table_owner." "&&table_name."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +--PRO ,'Table GiB' +--PRO ,'Index(es) GiB' +--PRO ,'LOB(s) GiB' +PRO ,{label:'Table Segment(s)', id:'1', type:'number'} +PRO ,{label:'Index(es) Segment(s)', id:'2', type:'number'} +PRO ,{label:'LOB(s) Segment(s)', id:'3', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +seg_hist AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + segment_name, + segment_type, + snap_time, + SUM(bytes) bytes + FROM &&cs_tools_schema..dbc_segments + WHERE owner = '&&table_owner.' + AND pdb_name = '&&cs_con_name.' + AND segment_name NOT LIKE 'BIN$%==$0' + AND segment_name NOT LIKE 'MLOG$%' + AND segment_name NOT LIKE 'REDEF$%' + GROUP BY + segment_name, + segment_type, + snap_time +), +table_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + snap_time, + SUM(bytes) bytes + FROM seg_hist + WHERE segment_name = '&&table_name.' + AND segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION') + GROUP BY + snap_time +), +idx AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + index_name + FROM cdb_indexes + WHERE table_owner = '&&table_owner.' + AND table_name = '&&table_name.' + AND con_id = &&cs_con_id. +), +indexes_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_time, + SUM(h.bytes) bytes + FROM idx i, + seg_hist h + WHERE h.segment_name = i.index_name + AND h.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION', 'LOBINDEX') + GROUP BY + h.snap_time +), +lobs_h AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + segment_name + FROM &&cs_tools_schema..dbc_lobs + WHERE owner = '&&table_owner.' + AND table_name = '&&table_name.' + AND pdb_name = '&&cs_con_name.' +), +lobs_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_time, + SUM(h.bytes) bytes + FROM lobs_h l, + seg_hist h + WHERE h.segment_name = l.segment_name + AND h.segment_type IN ('LOBSEGMENT', 'LOB PARTITION', 'LOB SUBPARTITION') + GROUP BY + h.snap_time +), +/****************************************************************************************/ +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + t.snap_time, +-- NVL(ROUND(t.bytes/POWER(2,30), 3), 0) table_gibs, +-- NVL(ROUND(i.bytes/POWER(2,30), 3), 0) indexes_gibs, +-- NVL(ROUND(l.bytes/POWER(2,30), 3), 0) lobs_gibs, + NVL(ROUND(t.bytes/POWER(10,9), 3), 0) table_gbs, + NVL(ROUND(i.bytes/POWER(10,9), 3), 0) indexes_gbs, + NVL(ROUND(l.bytes/POWER(10,9), 3), 0) lobs_gbs + FROM table_ts t, + indexes_ts i, + lobs_ts l + WHERE i.snap_time(+) = t.snap_time + AND l.snap_time(+) = t.snap_time +) +SELECT ', [new Date('|| + TO_CHAR(q.snap_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.snap_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.snap_time, 'DD')|| /* day */ + ','||TO_CHAR(q.snap_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.snap_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.snap_time, 'SS')|| /* second */ + ')'|| +-- ','||q.table_gibs|| +-- ','||q.indexes_gibs|| +-- ','||q.lobs_gibs|| + ','||num_format(q.table_gbs, 3)|| + ','||num_format(q.indexes_gbs, 3)|| + ','||num_format(q.lobs_gbs, 3)|| + ']' + FROM my_query q + ORDER BY + q.snap_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_table_stats_30d_chart.sql b/csierra/cs_table_stats_30d_chart.sql new file mode 100644 index 0000000..f03812a --- /dev/null +++ b/csierra/cs_table_stats_30d_chart.sql @@ -0,0 +1,236 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_table_stats_30d_chart.sql +-- +-- Purpose: CBO Statistics History for given Table (30 days time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/09/13 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter Table when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_table_stats_30d_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_table_stats_30d_chart'; +-- +COL owner NEW_V owner FOR A30 PRI HEA 'TABLE_OWNER'; +COL tables FOR 999,990; +-- +SELECT o.owner, + COUNT(DISTINCT o.object_name) AS tables + FROM wri$_optstat_tab_history h, + dba_objects o, + dba_users u + WHERE o.object_id = h.obj# + AND o.object_type = 'TABLE' + AND u.username = o.owner + AND u.oracle_maintained = 'N' + AND u.common = 'NO' + GROUP BY + o.owner + ORDER BY 1 +/ +-- +COL table_owner NEW_V table_owner FOR A30 PRI; +PRO +PRO 1. Table Owner: +DEF table_owner = '&1.'; +UNDEF 1; +SELECT UPPER(NVL('&&table_owner.', '&&owner.')) AS table_owner FROM DUAL +/ +-- +COL table_name FOR A30 PRI; +COL avg_rows FOR 999,999,999,990; +COL max_rows FOR 999,999,999,990; +COL min_last_analyzed FOR A19; +COL max_last_analyzed FOR A19; +-- +SELECT o.object_name AS table_name, + COUNT(*) + 1 AS samples, + ROUND(AVG(h.rowcnt)) AS avg_rows, + MAX(h.rowcnt) AS max_rows, + TO_CHAR(MIN(h.analyzetime), '&&cs_datetime_full_format.') AS min_last_analyzed, + TO_CHAR(MAX(h.analyzetime), '&&cs_datetime_full_format.') AS max_last_analyzed + FROM wri$_optstat_tab_history h, + dba_objects o + WHERE o.object_id = h.obj# + AND o.object_type = 'TABLE' + AND o.owner = '&&table_owner.' + GROUP BY + o.object_name + ORDER BY 1 +/ +PRO +PRO 2. Table Name: +DEF table_name = '&2.'; +UNDEF 2; +COL table_name NEW_V table_name FOR A30 NOPRI; +SELECT UPPER(TRIM('&&table_name.')) AS table_name FROM DUAL; +-- +COL cs_gap_days NEW_V cs_gap_days NOPRI; +WITH +my_query AS ( +SELECT h.analyzetime AS last_analyzed, + h.rowcnt AS num_rows, + h.blkcnt AS blocks, + h.avgrln AS avg_row_len, + h.samplesize AS sample_size + FROM dba_objects o, + wri$_optstat_tab_history h + WHERE o.owner = '&&table_owner.' + AND o.object_name = '&&table_name.' + AND o.object_type = 'TABLE' + AND h.obj# = o.object_id + AND h.analyzetime IS NOT NULL + UNION +SELECT t.last_analyzed, + t.num_rows, + t.blocks, + t.avg_row_len, + t.sample_size + FROM dba_tables t + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' +) +SELECT 0.2 * (MAX(last_analyzed) - MIN(last_analyzed)) AS cs_gap_days FROM my_query +/ +-- +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT 'maxValue: new Date('|| + TO_CHAR(SYSDATE + &&cs_gap_days., 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(SYSDATE + &&cs_gap_days., 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(SYSDATE + &&cs_gap_days., 'DD')|| /* day */ + ','||TO_CHAR(SYSDATE + &&cs_gap_days., 'HH24')|| /* hour */ + ','||TO_CHAR(SYSDATE + &&cs_gap_days., 'MI')|| /* minute */ + ','||TO_CHAR(SYSDATE + &&cs_gap_days., 'SS')|| /* second */ + '), ' + AS cs_hAxis_maxValue + FROM DUAL +/ +-- +PRO +PRO 3. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&3.'; +UNDEF 3; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&table_owner..&&table_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "&&table_owner..&&table_name."; +DEF chart_title = "&&table_owner..&&table_name."; +DEF xaxis_title = ""; +DEF vaxis_title = ""; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&table_owner." "&&table_name." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Num Rows', id:'1', type:'number'} +PRO ,{label:'Blocks', id:'2', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT h.analyzetime AS last_analyzed, + h.rowcnt AS num_rows, + h.blkcnt AS blocks, + h.avgrln AS avg_row_len, + h.samplesize AS sample_size + FROM dba_objects o, + wri$_optstat_tab_history h + WHERE o.owner = '&&table_owner.' + AND o.object_name = '&&table_name.' + AND o.object_type = 'TABLE' + AND h.obj# = o.object_id + AND h.analyzetime IS NOT NULL + UNION +SELECT t.last_analyzed, + t.num_rows, + t.blocks, + t.avg_row_len, + t.sample_size + FROM dba_tables t + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' +) +SELECT ', [new Date('|| + TO_CHAR(q.last_analyzed, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.last_analyzed, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.last_analyzed, 'DD')|| /* day */ + ','||TO_CHAR(q.last_analyzed, 'HH24')|| /* hour */ + ','||TO_CHAR(q.last_analyzed, 'MI')|| /* minute */ + ','||TO_CHAR(q.last_analyzed, 'SS')|| /* second */ + ')'|| + ','||num_format(q.num_rows)|| + ','||num_format(q.blocks)|| + ']' + FROM my_query q + ORDER BY + q.last_analyzed +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = ''; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_table_stats_chart.sql b/csierra/cs_table_stats_chart.sql new file mode 100644 index 0000000..446be68 --- /dev/null +++ b/csierra/cs_table_stats_chart.sql @@ -0,0 +1,215 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_table_stats_chart.sql +-- +-- Purpose: CBO Statistics History for given Table (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/10/20 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter Table when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_table_stats_chart.sql +-- +-- Notes: Developed and tested on 19c +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_table_stats_chart'; +DEF cs_hours_range_default = '8760'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(last_analyzed)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_tables +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL owner NEW_V owner FOR A30 HEA 'TABLE_OWNER'; +COL oracle_maintained FOR A4 HEA 'ORCL'; +COL tables FOR 999,990; +BREAK ON oracle_maintained SKIP PAGE DUPL; +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + u.oracle_maintained, + t.owner, + COUNT(DISTINCT t.table_name) AS tables + FROM &&cs_tools_schema..dbc_tables t, + cdb_users u + WHERE t.pdb_name = '&&cs_con_name.' + AND t.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND u.username = t.owner + GROUP BY + u.oracle_maintained, + t.owner + ORDER BY + u.oracle_maintained DESC, + t.owner +/ +COL table_owner NEW_V table_owner FOR A30; +PRO +PRO 3. Table Owner: +DEF table_owner = '&3.'; +UNDEF 3; +SELECT UPPER(NVL('&&table_owner.', '&&owner.')) table_owner FROM DUAL +/ +-- +COL table_name FOR A30 PRI; +COL num_rows FOR 999,999,999,990; +COL blocks FOR 9,999,999,990; +WITH +sq1 AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + t.table_name, t.num_rows, t.blocks, t.last_analyzed, + ROW_NUMBER() OVER (PARTITION BY t.table_name ORDER BY t.snap_time DESC) AS rn + FROM &&cs_tools_schema..dbc_tables t, + v$containers c, + cdb_users u + WHERE t.pdb_name = '&&cs_con_name.' + AND t.owner = '&&table_owner.' + AND t.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND c.name = t.pdb_name + AND u.con_id = c.con_id + AND u.username = t.owner +) +SELECT t.table_name, t.num_rows, t.blocks, t.last_analyzed + FROM sq1 t + WHERE t.rn = 1 + ORDER BY + t.table_name +/ +PRO +PRO 4. Table Name: +DEF table_name = '&4.'; +UNDEF 4; +COL table_name NEW_V table_name FOR A30 NOPRI; +SELECT UPPER(TRIM('&&table_name.')) table_name FROM DUAL; +-- +PRO +PRO 5. Graph Type: [{Line}|Scatter|Area] +DEF graph_type = '&5.'; +UNDEF 5; +COL cs_graph_type NEW_V cs_graph_type NOPRI; +SELECT CASE WHEN '&&graph_type.' IN ('Line', 'Scatter', 'Area') THEN '&&graph_type.' ELSE 'Line' END AS cs_graph_type FROM DUAL +/ +-- +PRO +PRO 6. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&6.'; +UNDEF 6; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&table_owner..&&table_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "&&table_owner..&&table_name."; +DEF chart_title = "&&table_owner..&&table_name."; +DEF xaxis_title = ""; +DEF vaxis_title = ""; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +--DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&table_owner." "&&table_name." "&&cs_graph_type." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Num Rows', id:'1', type:'number'} +PRO ,{label:'Blocks', id:'2', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT DISTINCT + last_analyzed, + num_rows, + blocks, + num_rows/GREATEST(blocks,1) AS rows_per_block, + avg_row_len, + sample_size + FROM &&cs_tools_schema..dbc_tables + WHERE pdb_name = '&&cs_con_name.' + AND owner = '&&table_owner.' + AND table_name = '&&table_name.' + AND snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND num_rows + blocks >= 0 +) +SELECT ', [new Date('|| + TO_CHAR(q.last_analyzed, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.last_analyzed, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.last_analyzed, 'DD')|| /* day */ + ','||TO_CHAR(q.last_analyzed, 'HH24')|| /* hour */ + ','||TO_CHAR(q.last_analyzed, 'MI')|| /* minute */ + ','||TO_CHAR(q.last_analyzed, 'SS')|| /* second */ + ')'|| + ','||num_format(q.num_rows)|| + ','||num_format(q.blocks)|| + ']' + FROM my_query q + ORDER BY + q.last_analyzed +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +-- DEF cs_chart_type = 'Line'; +-- DEF cs_chart_type = 'Scatter'; +DEF cs_chart_type = '&&cs_graph_type.'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = ''; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_table_stats_report.sql b/csierra/cs_table_stats_report.sql new file mode 100644 index 0000000..7f12e1c --- /dev/null +++ b/csierra/cs_table_stats_report.sql @@ -0,0 +1,215 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_table_stats_report.sql +-- +-- Purpose: CBO Statistics History for given Table (time series text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/09/13 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter Table when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_table_stats_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_table_stats_report'; +DEF cs_hours_range_default = '8760'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(last_analyzed)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_tables +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +COL owner NEW_V owner FOR A30 HEA 'TABLE_OWNER'; +COL oracle_maintained FOR A4 HEA 'ORCL'; +COL tables FOR 999,990; +BREAK ON oracle_maintained SKIP PAGE DUPL; +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + u.oracle_maintained, + t.owner, + COUNT(DISTINCT t.table_name) AS tables + FROM &&cs_tools_schema..dbc_tables t, + cdb_users u + WHERE t.pdb_name = '&&cs_con_name.' + AND t.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND u.username = t.owner + GROUP BY + u.oracle_maintained, + t.owner + ORDER BY + u.oracle_maintained DESC, + t.owner +/ +COL table_owner NEW_V table_owner FOR A30; +PRO +PRO 3. Table Owner: +DEF table_owner = '&3.'; +UNDEF 3; +SELECT UPPER(NVL('&&table_owner.', '&&owner.')) table_owner FROM DUAL +/ +-- +COL table_name FOR A30 PRI; +COL num_rows FOR 999,999,999,990; +COL blocks FOR 9,999,999,990; +WITH +sq1 AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + t.table_name, t.num_rows, t.blocks, t.last_analyzed, + ROW_NUMBER() OVER (PARTITION BY t.table_name ORDER BY t.snap_time DESC) AS rn + FROM &&cs_tools_schema..dbc_tables t, + v$containers c, + cdb_users u + WHERE t.pdb_name = '&&cs_con_name.' + AND t.owner = '&&table_owner.' + AND t.snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND c.name = t.pdb_name + AND u.con_id = c.con_id + AND u.username = t.owner +) +SELECT t.table_name, t.num_rows, t.blocks, t.last_analyzed + FROM sq1 t + WHERE t.rn = 1 + ORDER BY + t.table_name +/ +PRO +PRO 4. Table Name: +DEF table_name = '&4.'; +UNDEF 4; +COL table_name NEW_V table_name FOR A30 NOPRI; +SELECT UPPER(TRIM('&&table_name.')) table_name FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&table_owner..&&table_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&table_owner." "&&table_name." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO TABLE_OWNER : &&table_owner. +PRO TABLE_NAME : &&table_name. +-- +COL rows_per_block FOR 999,999,990.0; +COL avg_row_len FOR 999,999,990; +COL sample_size FOR 999,999,999,990; +-- +PRO +PRO TABLES (dba_tables) &&table_owner..&&table_name. +PRO ~~~~~~ +WITH +my_query AS ( +SELECT DISTINCT + last_analyzed, + num_rows, + blocks, + num_rows/GREATEST(blocks,1) AS rows_per_block, + avg_row_len, + sample_size + FROM &&cs_tools_schema..dbc_tables + WHERE pdb_name = '&&cs_con_name.' + AND owner = '&&table_owner.' + AND table_name = '&&table_name.' + AND snap_time BETWEEN TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') +) +SELECT TO_CHAR(q.last_analyzed, '&&cs_datetime_full_format.') last_analyzed, + q.num_rows, + q.blocks, + q.rows_per_block, + q.avg_row_len, + q.sample_size + FROM my_query q + ORDER BY + q.last_analyzed +/ +-- +COL hours_since_gathering FOR 999,990.0 HEA 'HOURS|SINCE|GATHERING'; +COL num_rows FOR 999,999,999,990; +COL inserts FOR 999,999,990 HEA 'INSERTS|SINCE|GATHERING'; +COL updates FOR 999,999,990 HEA 'UPDATES|SINCE|GATHERING'; +COL deletes FOR 999,999,990 HEA 'DELETES|SINCE|GATHERING'; +COL inserts_per_sec FOR 999,990.000 HEA 'INSERTS|PER SEC'; +COL updates_per_sec FOR 999,990.000 HEA 'UPDATES|PER SEC'; +COL deletes_per_sec FOR 999,990.000 HEA 'DELETES|PER SEC'; +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +SELECT TO_CHAR(t.last_analyzed, '&&cs_datetime_full_format.') AS last_analyzed, + t.num_rows, + ROUND(m.inserts / ((m.timestamp - t.last_analyzed) * 24 * 60 * 60), 3) AS inserts_per_sec, + ROUND(m.deletes / ((m.timestamp - t.last_analyzed) * 24 * 60 * 60), 3) AS deletes_per_sec, + ROUND(m.updates / ((m.timestamp - t.last_analyzed) * 24 * 60 * 60), 3) AS updates_per_sec, + TO_CHAR(m.timestamp, '&&cs_datetime_full_format.') AS timestamp, + 24 * (m.timestamp - t.last_analyzed) AS hours_since_gathering, + m.inserts, + m.deletes, + m.updates + FROM dba_tables t, + dba_tab_modifications m + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' + AND m.table_owner = t.owner + AND m.table_name = t.table_name +/ +-- +COL analyzetime FOR A19 HEA 'Analyze Time'; +COL rowcnt FOR 999,999,999,990 HEA 'Row Count'; +COL blkcnt FOR 999,999,990 HEA 'Block Count'; +COL avgrln FOR 999,999,990 HEA 'Avg Row Len'; +COL samplesize FOR 999,999,999,990 HEA 'Sample Size'; +-- +PRO +PRO CBO STAT TABLE HISTORY (wri$_optstat_tab_history) &&table_owner..&&table_name. +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT TO_CHAR(h.analyzetime, '&&cs_datetime_full_format.') AS analyzetime, + h.rowcnt, + h.blkcnt, + h.avgrln, + h.samplesize + FROM dba_objects o, + wri$_optstat_tab_history h + WHERE o.owner = '&&table_owner.' + AND o.object_name = '&&table_name.' + AND o.object_type = 'TABLE' + AND h.obj# = o.object_id + AND h.analyzetime IS NOT NULL + UNION +SELECT TO_CHAR(t.last_analyzed, '&&cs_datetime_full_format.') AS analyzetime, + t.num_rows AS rowcnt, + t.blocks AS blkcnt, + t.avg_row_len AS avgrln, + t.sample_size AS samplesize + FROM dba_tables t + WHERE t.owner = '&&table_owner.' + AND t.table_name = '&&table_name.' + ORDER BY + 1 +/ +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&table_owner." "&&table_name." +-- +@@cs_internal/cs_spool_tail.sql +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_tables.sql b/csierra/cs_tables.sql new file mode 100644 index 0000000..54c67a8 --- /dev/null +++ b/csierra/cs_tables.sql @@ -0,0 +1,60 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_tables.sql +-- +-- Purpose: All Tables and Top N Tables (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/01/20 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_tables.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_tables'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +BREAK ON REPORT; +COMPUTE SUM OF total_MB table_MB indexes_MB tabs lobs_MB est_data_MB lobs idxs num_rows ON REPORT; +-- +DEF specific_owner = ''; +DEF specific_table = ''; +DEF order_by = 't.owner, t.table_name'; +DEF fetch_first_N_rows = '10000'; +PRO +PRO All Tables +PRO ~~~~~~~~~~ +@@cs_internal/cs_tables_internal.sql +-- +DEF specific_table = ''; +DEF order_by = 'NVL(t.bytes,0)+NVL(i.bytes,0)+NVL(l.bytes,0) DESC'; +DEF fetch_first_N_rows = '20'; +PRO +PRO Top Tables +PRO ~~~~~~~~~~ +@@cs_internal/cs_tables_internal.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_tables_rows_vs_count.sql b/csierra/cs_tables_rows_vs_count.sql new file mode 100644 index 0000000..9574ea4 --- /dev/null +++ b/csierra/cs_tables_rows_vs_count.sql @@ -0,0 +1,19 @@ +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +-- cs_tables_rows_vs_count.sql - Compares CBO Stats Rows to COUNT(*) on Application Tables +SET SERVEROUT ON; +DECLARE + l_cnt INTEGER; + l_pct INTEGER; +BEGIN + FOR i IN (SELECT t.owner, t.table_name, t.num_rows, t.last_analyzed FROM dba_tables t, dba_users u WHERE /*t.owner <> 'C##IOD' AND t.table_name NOT LIKE 'KIEV%' AND t.num_rows > 0 AND*/ u.username = t.owner AND u.oracle_maintained = 'N' ORDER BY t.owner, t.table_name) + LOOP + IF NVL(i.num_rows, 0) < 1e6 THEN + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM "'||i.owner||'"."'||i.table_name||'"' INTO l_cnt; + ELSE + EXECUTE IMMEDIATE 'SELECT 100 * COUNT(*) FROM "'||i.owner||'"."'||i.table_name||'" SAMPLE(1)' INTO l_cnt; + END IF; + l_pct := ROUND(100 * (l_cnt - i.num_rows) / NULLIF(i.num_rows, 0)); + DBMS_OUTPUT.put_line(RPAD(i.owner||'.'||i.table_name, 61, '.')||' GAP:'||LPAD(NVL(TO_CHAR(l_pct), ' '), 4)||'% DAYS:'||LPAD(NVL(TO_CHAR(ROUND(SYSDATE - i.last_analyzed)), ' '), 4)||' COUNT:'||LPAD(l_cnt, 10)||' NUM_ROWS:'||LPAD(i.num_rows, 10)||' ANALYZED:'||TO_CHAR(i.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS')); + END LOOP; +END; +/ diff --git a/csierra/cs_tables_rows_vs_count_outliers.sql b/csierra/cs_tables_rows_vs_count_outliers.sql new file mode 100644 index 0000000..92d1736 --- /dev/null +++ b/csierra/cs_tables_rows_vs_count_outliers.sql @@ -0,0 +1,21 @@ +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +-- cs_tables_rows_vs_count_outliers.sql - Compares CBO Stats Rows to COUNT(*) on Application Tables and Reports Outliers +SET SERVEROUT ON; +DECLARE + l_cnt INTEGER; + l_pct INTEGER; +BEGIN + FOR i IN (SELECT t.owner, t.table_name, t.num_rows, t.last_analyzed FROM dba_tables t, dba_users u WHERE /*t.owner <> 'C##IOD' AND t.table_name NOT LIKE 'KIEV%' AND t.num_rows > 0 AND*/ t.last_analyzed < SYSDATE -1 AND u.username = t.owner AND u.oracle_maintained = 'N' ORDER BY t.owner, t.table_name) + LOOP + IF NVL(i.num_rows, 0) < 1e6 THEN + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM "'||i.owner||'"."'||i.table_name||'"' INTO l_cnt; + ELSE + EXECUTE IMMEDIATE 'SELECT 100 * COUNT(*) FROM "'||i.owner||'"."'||i.table_name||'" SAMPLE(1)' INTO l_cnt; + END IF; + l_pct := ROUND(100 * (l_cnt - i.num_rows) / NULLIF(i.num_rows, 0)); + IF ABS(l_pct) > 10 THEN + DBMS_OUTPUT.put_line(RPAD(i.owner||'.'||i.table_name, 61, '.')||' GAP:'||LPAD(NVL(TO_CHAR(l_pct), ' '), 4)||'% DAYS:'||LPAD(NVL(TO_CHAR(ROUND(SYSDATE - i.last_analyzed)), ' '), 4)||' COUNT:'||LPAD(l_cnt, 10)||' NUM_ROWS:'||LPAD(i.num_rows, 10)||' ANALYZED:'||TO_CHAR(i.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS')); + END IF; + END LOOP; +END; +/ diff --git a/csierra/cs_tablespace_chart.sql b/csierra/cs_tablespace_chart.sql new file mode 100644 index 0000000..cf007f9 --- /dev/null +++ b/csierra/cs_tablespace_chart.sql @@ -0,0 +1,164 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_tablespace_chart.sql +-- +-- Purpose: Tablespace Utilization (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/25 +-- +-- Usage: Execute connected to CDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_tablespace_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_tablespace_chart'; +DEF cs_hours_range_default = '4320'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(snap_time)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_tablespaces +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +SELECT DISTINCT tablespace_name + FROM &&cs_tools_schema..dbc_tablespaces + WHERE '&&cs_con_name.' IN ('CDB$ROOT', pdb_name) + ORDER BY 1 +/ +PRO +PRO 3. Enter Tablespace Name (opt): +DEF cs2_tablespace_name = '&3.'; +UNDEF 3; +-- +PRO +PRO 4. Trendlines Type: &&cs_trendlines_types. +DEF cs_trendlines_type = '&4.'; +UNDEF 4; +COL cs_trendlines_type NEW_V cs_trendlines_type NOPRI; +COL cs_trendlines NEW_V cs_trendlines NOPRI; +COL cs_hAxis_maxValue NEW_V cs_hAxis_maxValue NOPRI; +SELECT CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential', 'none') THEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) ELSE 'none' END AS cs_trendlines_type, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) = 'none' THEN '//' END AS cs_trendlines, + CASE WHEN LOWER(TRIM(NVL('&&cs_trendlines_type.', 'none'))) IN ('linear', 'polynomial', 'exponential') THEN '&&cs_hAxis_maxValue.' END AS cs_hAxis_maxValue + FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.'||CASE WHEN '&&cs2_tablespace_name.' IS NOT NULL THEN '_&&cs2_tablespace_name.' END AS cs_file_name FROM DUAL; +-- +--DEF report_title = "Disk FileSystem u02 and DB Utilization between &&cs_sample_time_from. and &&cs_sample_time_to. UTC"; +DEF report_title = "&&cs2_tablespace_name. Tablespace Utilization"; +DEF chart_title = "&&cs2_tablespace_name."; +DEF xaxis_title = ""; +DEF hAxis_maxValue = "&&cs_hAxis_maxValue."; +DEF cs_trendlines_series = ", 0:{}, 1:{}"; +DEF vaxis_title = "Terabytes (TB)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: true,"; +DEF vaxis_baseline = ""; +DEF vaxis_viewwindow = ", viewWindow: {min:0}"; +DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_tablespace_name." "&&cs_trendlines_type."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Database TB Allocated', id:'1', type:'number'} +PRO ,{label:'Database TB Used', id:'2', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +ts_hh AS ( +SELECT snap_time, SUM(allocated_bytes) AS allocated_bytes, SUM(used_bytes) AS used_bytes, + ROW_NUMBER() OVER (PARTITION BY TRUNC(snap_time, 'HH') ORDER BY SUM(allocated_bytes) DESC NULLS LAST, SUM(used_bytes) DESC NULLS LAST) AS rn + FROM &&cs_tools_schema..dbc_tablespaces + WHERE snap_time >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND snap_time < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND '&&cs_con_name.' IN ('CDB$ROOT', pdb_name) + AND ('&&cs2_tablespace_name.' IS NULL OR tablespace_name LIKE '%&&cs2_tablespace_name.%') + GROUP BY + snap_time +), +ts_space AS ( +SELECT ROUND(snap_time, 'HH') AS snap_time, + ROUND(allocated_bytes / POWER(10, 12), 3) AS tb_allocated, + ROUND(used_bytes / POWER(10, 12), 3) AS tb_used + FROM ts_hh + WHERE rn = 1 +), +/****************************************************************************************/ +my_query AS ( +SELECT ts.snap_time, + ts.tb_allocated AS db_tb_allocated, + ts.tb_used AS db_tb_used + FROM ts_space ts +) +SELECT ', [new Date('|| + TO_CHAR(q.snap_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.snap_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.snap_time, 'DD')|| /* day */ + ','||TO_CHAR(q.snap_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.snap_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.snap_time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.db_tb_allocated, 3)|| + ','||num_format(q.db_tb_used, 3)|| + ']' + FROM my_query q + ORDER BY + q.snap_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Line'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_tablespaces.sql b/csierra/cs_tablespaces.sql new file mode 100644 index 0000000..5f4edfa --- /dev/null +++ b/csierra/cs_tablespaces.sql @@ -0,0 +1,317 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_tablespaces.sql +-- +-- Purpose: Tablespace Utilization (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Specify if internal tablespaces would be included in report +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_tablespaces.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +DEF permanent = 'Y'; +DEF undo = 'Y'; +DEF temporary = 'Y'; +-- order_by: [{pdb_name, tablespace_name}|max_size_gb DESC|allocated_gb DESC|used_gb DESC|free_gb DESC] +DEF order_by = 'pdb_name, tablespace_name'; +DEF rows = '999'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_tablespaces'; +-- +PRO 1. Include internal (i.e. SYSTEM, SYSAUX, TEMPORARY, UNDO, ETC.): [{N}|Y] +DEF include_internal = '&1.'; +UNDEF 1; +COL include_internal NEW_V include_internal NOPRI; +SELECT NVL(UPPER(SUBSTR(TRIM('&&include_internal.'),1)),'N') include_internal FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&include_internal." +@@cs_internal/cs_spool_id.sql +-- +PRO INTERNAL TBS : &&include_internal. +-- +CLEAR BREAK COMPUTE; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF allocated_gb used_gb free_gb max_size_gb ON REPORT; +-- +COL pdb_name FOR A30; +COL tablespace_name FOR A30; +COL allocated_gb FOR 999,990.000 HEA 'ALLOCATED|SPACE (GB)'; +COL used_gb FOR 999,990.000 HEA 'USED|SPACE (GB)'; +COL used_percent FOR 990.0 HEA 'USED|PERC'; +COL free_gb FOR 999,990.000 HEA 'FREE|SPACE (GB)'; +COL free_percent FOR 990.0 HEA 'FREE|PERC'; +COL max_size_gb FOR 999,990.000 HEA 'MAX|SIZE (GB)'; +COL met_used_space_GB FOR 999,990.000 HEA 'METRICS|USED|SPACE (GB)'; +COL met_used_percent FOR 990.0 HEA 'METRICS|USED|PERC'; +-- +PRO +PRO CDB +PRO ~~~ +WITH +t AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + SUM(NVL(bytes, 0)) bytes + FROM cdb_data_files + GROUP BY + con_id, + tablespace_name + UNION ALL +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + SUM(NVL(bytes, 0)) bytes + FROM cdb_temp_files + GROUP BY + con_id, + tablespace_name +), +u AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + SUM(bytes) bytes + FROM cdb_free_space + GROUP BY + con_id, + tablespace_name + UNION ALL +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + NVL(SUM(bytes_used), 0) bytes + FROM gv$temp_extent_pool + GROUP BY + con_id, + tablespace_name +), +un AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ts.con_id, + ts.tablespace_name, + NVL(um.used_space * ts.block_size, 0) bytes + FROM cdb_tablespaces ts, + cdb_tablespace_usage_metrics um + WHERE ts.contents = 'UNDO' + AND um.tablespace_name(+) = ts.tablespace_name + AND um.con_id(+) = ts.con_id +), +oem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ts.con_id, + pdb.name pdb_name, + ts.tablespace_name, + ts.contents, + ts.bigfile, + ts.block_size, + NVL(t.bytes, 0) allocated_space_bytes, + NVL( + CASE ts.contents + WHEN 'UNDO' THEN un.bytes + WHEN 'PERMANENT' THEN t.bytes - NVL(u.bytes, 0) + WHEN 'TEMPORARY' THEN + CASE ts.extent_management + WHEN 'LOCAL' THEN u.bytes + WHEN 'DICTIONARY' THEN t.bytes - NVL(u.bytes, 0) + END + END + , 0) used_space_bytes + FROM cdb_tablespaces ts, + v$containers pdb, + t, + u, + un + WHERE 1 = 1 + AND CASE + WHEN '&&include_internal.' = 'Y' THEN 1 + WHEN '&&include_internal.' = 'N' AND ts.contents = 'PERMANENT' AND ts.tablespace_name NOT IN ('SYSTEM', 'SYSAUX') THEN 1 + ELSE 0 + END = 1 + AND CASE + WHEN ts.contents = 'PERMANENT' AND '&&permanent.' = 'Y' THEN 1 + WHEN ts.contents = 'UNDO' AND '&&undo.' = 'Y' THEN 1 + WHEN ts.contents = 'TEMPORARY' AND '&&temporary.' = 'Y' THEN 1 + ELSE 0 + END = 1 + AND pdb.con_id = ts.con_id + AND t.tablespace_name(+) = ts.tablespace_name + AND t.con_id(+) = ts.con_id + AND u.tablespace_name(+) = ts.tablespace_name + AND u.con_id(+) = ts.con_id + AND un.tablespace_name(+) = ts.tablespace_name + AND un.con_id(+) = ts.con_id +), +tablespaces AS ( +SELECT o.pdb_name, + o.tablespace_name, + o.contents, + o.bigfile, + ROUND(m.tablespace_size * o.block_size / POWER(10, 9), 3) AS max_size_gb, + ROUND(o.allocated_space_bytes / POWER(10, 9), 3) AS allocated_gb, + ROUND(o.used_space_bytes / POWER(10, 9), 3) AS used_gb, + ROUND((o.allocated_space_bytes - o.used_space_bytes) / POWER(10, 9), 3) AS free_gb, + ROUND(100 * o.used_space_bytes / o.allocated_space_bytes, 3) AS used_percent, -- as per allocated space + ROUND(100 * (o.allocated_space_bytes - o.used_space_bytes) / o.allocated_space_bytes, 3) AS free_percent -- as per allocated space + FROM oem o, + cdb_tablespace_usage_metrics m + WHERE m.tablespace_name(+) = o.tablespace_name + AND m.con_id(+) = o.con_id +) +SELECT pdb_name, + tablespace_name, + contents, + bigfile, + '|' AS "|", + max_size_gb, + allocated_gb, + used_gb, + free_gb, + used_percent, + free_percent + FROM tablespaces + ORDER BY + &&order_by. +FETCH FIRST &&rows. ROWS ONLY +/ +-- +DEF order_by = 'tablespace_name'; +PRO +PRO DBA +PRO ~~~ +WITH +t AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + tablespace_name, + SUM(NVL(bytes, 0)) bytes + FROM dba_data_files + GROUP BY + tablespace_name + UNION ALL +SELECT /*+ MATERIALIZE NO_MERGE */ + tablespace_name, + SUM(NVL(bytes, 0)) bytes + FROM dba_temp_files + GROUP BY + tablespace_name +), +u AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + tablespace_name, + SUM(bytes) bytes + FROM dba_free_space + GROUP BY + tablespace_name + UNION ALL +SELECT /*+ MATERIALIZE NO_MERGE */ + tablespace_name, + NVL(SUM(bytes_used), 0) bytes + FROM gv$temp_extent_pool + GROUP BY + tablespace_name +), +un AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ts.tablespace_name, + NVL(um.used_space * ts.block_size, 0) bytes + FROM dba_tablespaces ts, + dba_tablespace_usage_metrics um + WHERE ts.contents = 'UNDO' + AND um.tablespace_name(+) = ts.tablespace_name +), +oem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ts.tablespace_name, + ts.contents, + ts.bigfile, + ts.block_size, + NVL(t.bytes, 0) allocated_space_bytes, + NVL( + CASE ts.contents + WHEN 'UNDO' THEN un.bytes + WHEN 'PERMANENT' THEN t.bytes - NVL(u.bytes, 0) + WHEN 'TEMPORARY' THEN + CASE ts.extent_management + WHEN 'LOCAL' THEN u.bytes + WHEN 'DICTIONARY' THEN t.bytes - NVL(u.bytes, 0) + END + END + , 0) used_space_bytes + FROM dba_tablespaces ts, + t, + u, + un + WHERE 1 = 1 + AND CASE + WHEN '&&include_internal.' = 'Y' THEN 1 + WHEN '&&include_internal.' = 'N' AND ts.contents = 'PERMANENT' AND ts.tablespace_name NOT IN ('SYSTEM', 'SYSAUX') THEN 1 + ELSE 0 + END = 1 + AND CASE + WHEN ts.contents = 'PERMANENT' AND '&&permanent.' = 'Y' THEN 1 + WHEN ts.contents = 'UNDO' AND '&&undo.' = 'Y' THEN 1 + WHEN ts.contents = 'TEMPORARY' AND '&&temporary.' = 'Y' THEN 1 + ELSE 0 + END = 1 + AND t.tablespace_name(+) = ts.tablespace_name + AND u.tablespace_name(+) = ts.tablespace_name + AND un.tablespace_name(+) = ts.tablespace_name +), +tablespaces AS ( +SELECT o.tablespace_name, + o.contents, + o.bigfile, + ROUND(m.tablespace_size * o.block_size / POWER(10, 9), 3) AS max_size_gb, + ROUND(o.allocated_space_bytes / POWER(10, 9), 3) AS allocated_gb, + ROUND(o.used_space_bytes / POWER(10, 9), 3) AS used_gb, + ROUND((o.allocated_space_bytes - o.used_space_bytes) / POWER(10, 9), 3) AS free_gb, + ROUND(100 * o.used_space_bytes / o.allocated_space_bytes, 3) AS used_percent, -- as per allocated space + ROUND(100 * (o.allocated_space_bytes - o.used_space_bytes) / o.allocated_space_bytes, 3) AS free_percent -- as per allocated space + FROM oem o, + dba_tablespace_usage_metrics m + WHERE m.tablespace_name(+) = o.tablespace_name +) +SELECT tablespace_name, + contents, + bigfile, + '|' AS "|", + max_size_gb, + allocated_gb, + used_gb, + free_gb, + used_percent, + free_percent + FROM tablespaces + ORDER BY + &&order_by. +FETCH FIRST &&rows. ROWS ONLY +/ +-- +CLEAR BREAK COMPUTE; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&include_internal." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_tbs_resize.sql b/csierra/cs_tbs_resize.sql new file mode 100644 index 0000000..7ce28bf --- /dev/null +++ b/csierra/cs_tbs_resize.sql @@ -0,0 +1,536 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_tbs_resize.sql +-- +-- Purpose: Tablespace Resize +-- +-- Author: Rodrigo Righetti +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_tbs_resize.sql TBSNAME 10 +-- +-- This execution would increase the maxsize for Tablespace TBSNAME in 10%. +-- +-- Notes: Developed and tested on 12.1.0.2 and 19c. +-- +--------------------------------------------------------------------------------------- +-- +-- +DEF permanent = 'Y'; +DEF undo = 'Y'; +DEF temporary = 'Y'; +-- order_by: [{pdb_name, tablespace_name}|max_size_gb DESC|allocated_gb DESC|used_gb DESC|free_gb DESC] +DEF order_by = 'pdb_name, tablespace_name'; +DEF rows = '999'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_tbs_resize'; +-- +COL tablespace_name FOR A30; +SELECT tablespace_name +FROM dba_tablespaces; +PRO +-- +PRO 1. Tablespace to resize: +DEF tbs_name = '&1.'; +UNDEF 1; + +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&tbs_name." +@@cs_internal/cs_spool_id.sql +-- +-- +CLEAR BREAK COMPUTE; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF allocated_gb used_gb free_gb max_size_gb ON REPORT; +-- +COL pdb_name FOR A30; +COL tablespace_name FOR A30; +COL allocated_gb FOR 999,990.000 HEA 'ALLOCATED|SPACE (GB)'; +COL used_gb FOR 999,990.000 HEA 'USED|SPACE (GB)'; +COL used_percent FOR 990.0 HEA 'USED|PERC'; +COL free_gb FOR 999,990.000 HEA 'FREE|SPACE (GB)'; +COL free_percent FOR 990.0 HEA 'FREE|PERC'; +COL max_size_gb FOR 999,990.000 HEA 'MAX|SIZE (GB)'; +COL met_used_space_GB FOR 999,990.000 HEA 'METRICS|USED|SPACE (GB)'; +COL met_used_percent FOR 990.0 HEA 'METRICS|USED|PERC'; +-- +WITH +t AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + SUM(NVL(bytes, 0)) bytes + FROM cdb_data_files + WHERE con_id=&&cs_con_id. + GROUP BY + con_id, + tablespace_name + UNION ALL +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + SUM(NVL(bytes, 0)) bytes + FROM cdb_temp_files + WHERE con_id=&&cs_con_id. + GROUP BY + con_id, + tablespace_name +), +u AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + SUM(bytes) bytes + FROM cdb_free_space + WHERE con_id=&&cs_con_id. + GROUP BY + con_id, + tablespace_name + UNION ALL +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + NVL(SUM(bytes_used), 0) bytes + FROM gv$temp_extent_pool + WHERE con_id=&&cs_con_id. + GROUP BY + con_id, + tablespace_name +), +un AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ts.con_id, + ts.tablespace_name, + NVL(um.used_space * ts.block_size, 0) bytes + FROM cdb_tablespaces ts, + cdb_tablespace_usage_metrics um + WHERE ts.contents = 'UNDO' + AND um.tablespace_name(+) = ts.tablespace_name + AND um.con_id(+) = ts.con_id +), +oem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ts.con_id, + pdb.name pdb_name, + ts.tablespace_name, + ts.contents, + ts.bigfile, + ts.block_size, + NVL(t.bytes, 0) allocated_space_bytes, + NVL( + CASE ts.contents + WHEN 'UNDO' THEN un.bytes + WHEN 'PERMANENT' THEN t.bytes - NVL(u.bytes, 0) + WHEN 'TEMPORARY' THEN + CASE ts.extent_management + WHEN 'LOCAL' THEN u.bytes + WHEN 'DICTIONARY' THEN t.bytes - NVL(u.bytes, 0) + END + END + , 0) used_space_bytes + FROM cdb_tablespaces ts, + v$containers pdb, + t, + u, + un + WHERE 1 = 1 + AND t.tablespace_name = upper('&&tbs_name.') + AND pdb.con_id = ts.con_id + AND t.tablespace_name(+) = ts.tablespace_name + AND t.con_id(+) = ts.con_id + AND u.tablespace_name(+) = ts.tablespace_name + AND u.con_id(+) = ts.con_id + AND un.tablespace_name(+) = ts.tablespace_name + AND un.con_id(+) = ts.con_id +), +tablespaces AS ( +SELECT o.pdb_name, + o.tablespace_name, + o.contents, + o.bigfile, + ROUND(m.maxbytes / POWER(10, 9), 3) AS max_size_gb, + ROUND(o.allocated_space_bytes / POWER(10, 9), 3) AS allocated_gb, + ROUND(o.used_space_bytes / POWER(10, 9), 3) AS used_gb, + ROUND((o.allocated_space_bytes - o.used_space_bytes) / POWER(10, 9), 3) AS free_gb, + ROUND(100 * o.used_space_bytes / o.allocated_space_bytes, 3) AS used_percent, -- as per allocated space + ROUND(100 * (o.allocated_space_bytes - o.used_space_bytes) / o.allocated_space_bytes, 3) AS free_percent -- as per allocated space + FROM oem o, + (SELECT con_id, tablespace_name, sum(maxbytes) maxbytes + FROM cdb_data_files + WHERE con_id = &&cs_con_id. + GROUP BY con_id, tablespace_name + UNION + SELECT con_id, tablespace_name, sum(maxbytes) maxbytes + FROM cdb_temp_files + WHERE con_id = &&cs_con_id. + GROUP BY con_id, tablespace_name + ) m + WHERE m.tablespace_name(+) = o.tablespace_name + AND m.con_id(+) = o.con_id +) +SELECT pdb_name, + tablespace_name, + contents, + bigfile, + '|' AS "|", + max_size_gb, + allocated_gb, + used_gb, + free_gb, + used_percent, + free_percent + FROM tablespaces + ORDER BY + &&order_by. +FETCH FIRST &&rows. ROWS ONLY +/ +-- +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL p_u02 NEW_V p_u02 FOR 99999999; +-- +PRO +PRO OS SPACE AVAILABLE - FREE GB U02 + -- OS space available +SELECT round(U02_AVAILABLE/power(2,20)) p_u02 +FROM C##IOD.dbc_system +WHERE TIMESTAMP= (select max(TIMESTAMP) from C##IOD.dbc_system); +-- +PRO +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +SET SERVEROUTPUT ON +BEGIN + DBMS_OUTPUT.put_line('-----------------------------------------------------------------------------------------'); + DBMS_OUTPUT.put_line('Max permissible increase must be between 1% and 20%, different values will default to 10%'); + DBMS_OUTPUT.put_line('-----------------------------------------------------------------------------------------'); + DBMS_OUTPUT.put_line('Increments are always rounded up "ceil", small files always added with 1G and maxsize 32G'); + DBMS_OUTPUT.put_line('-----------------------------------------------------------------------------------------'); + +END; +/ +PRO +PRO 2. What percentange to increase the TBS maxsize {[10]|1-20}?: +DEF perc_increase = '&2.'; +UNDEF 2; +-- +COL p_perc_increase NEW_V p_perc_increase NOPRI; +SELECT CASE WHEN &&perc_increase. BETWEEN 1 AND 20 THEN &&perc_increase. ELSE 10 END AS p_perc_increase FROM DUAL +/ +-- +SET SERVEROUTPUT ON +-- +DECLARE + +l_u02_avail NUMBER := &&p_u02.; +l_perc_increase NUMBER := (&&p_perc_increase./100)+1; +l_statement CLOB; +l_newmax NUMBER; +l_bytes NUMBER; +l_maxbytes NUMBER; +l_nfiles NUMBER; +l_smmaxfix NUMBER; +l_addfilesc NUMBER; +l_counter NUMBER := 1; +l_temp VARCHAR2(10) := ' DATAFILE '; + +BEGIN + + IF upper('&&tbs_name.') like 'TEMP%' THEN + + SELECT round(sum(bytes)/power(2,30)) bytes_gb , round(sum(maxbytes)/power(2,30)) maxbytes_gb, count(*) numfiles + INTO l_bytes, l_maxbytes, l_nfiles + FROM dba_temp_files + WHERE tablespace_name = upper('&&tbs_name.'); + + l_temp := ' TEMPFILE '; + + ELSE + SELECT round(sum(bytes)/power(2,30)) bytes_gb , round(sum(maxbytes)/power(2,30)) maxbytes_gb, count(*) numfiles + INTO l_bytes, l_maxbytes, l_nfiles + FROM dba_data_files + WHERE tablespace_name = upper('&&tbs_name.'); + + END IF; + + + + FOR i IN (SELECT tablespace_name, bigfile + FROM dba_tablespaces + WHERE tablespace_name = upper('&&tbs_name.') ) LOOP + + IF i.bigfile = 'YES' THEN + + FOR j IN (SELECT file_id, autoextensible, (bytes/power(2,30)) bytes_gb, (maxbytes/power(2,30)) maxbytes_gb + FROM dba_data_files + WHERE tablespace_name = upper('&&tbs_name.') + ) LOOP + + IF j.maxbytes_gb <= j.bytes_gb THEN + l_newmax := ceil(j.bytes_gb * l_perc_increase); + ELSIF j.maxbytes_gb < (j.maxbytes_gb*l_perc_increase) THEN + l_newmax := ceil(j.maxbytes_gb * l_perc_increase); + ELSIF j.maxbytes_gb >= (j.maxbytes_gb*l_perc_increase) THEN + DBMS_OUTPUT.put_line( 'Maxsize already has over '||l_perc_increase||'% increase requested.'); + RETURN; + END IF; + + IF l_newmax = 0 THEN + l_newmax := 1; + DBMS_OUTPUT.put_line('Tablespace too small, minimal adjustment is 1G:'); + END IF; + + IF (l_newmax - j.bytes_gb) >= (l_u02_avail*.7) THEN + DBMS_OUTPUT.put_line('Your new Maxsize request is over 70% of the available /u02 free space !!!'); + RETURN; + END IF; + + DBMS_OUTPUT.put_line('-------------------------------------------------------------------------------------'); + + l_statement := 'ALTER DATABASE DATAFILE '||j.file_id||' AUTOEXTEND ON NEXT 1G MAXSIZE '||l_newmax||'G'; + DBMS_OUTPUT.put_line(l_statement); + execute immediate l_statement; + + END LOOP; + ELSE + -- small file support + -- if all datafiles already at max 32 gb, then add datafile, else fix Maxsize and add datafile if needed + -- Small files always increamented in 32gb files maxsize + + -- fix max size of current datafiles + + IF l_maxbytes > l_bytes THEN + l_newmax := ceil((l_maxbytes*l_perc_increase)-l_maxbytes); + ELSE + l_newmax := ceil((l_bytes*l_perc_increase)-l_bytes); + END IF; + + IF (l_newmax - l_bytes) >= (l_u02_avail*.7) THEN + DBMS_OUTPUT.put_line( 'Your new Maxsize request is over 70% of the available /u02 free space !!!'); + RETURN; + END IF; + + FOR j IN (SELECT file_id, autoextensible, (bytes/power(2,30)) bytes_gb, (maxbytes/power(2,30)) maxbytes_gb, (maxbytes/power(2,30))-(bytes/power(2,30)) free_gb + FROM dba_data_files + WHERE tablespace_name = upper('&&tbs_name.') + AND round(maxbytes/power(2,30)) < 32 + UNION + SELECT file_id, autoextensible, (bytes/power(2,30)) bytes_gb, (maxbytes/power(2,30)) maxbytes_gb, (maxbytes/power(2,30))-(bytes/power(2,30)) free_gb + FROM dba_temp_files + WHERE tablespace_name = upper('&&tbs_name.') + AND round(maxbytes/power(2,30)) < 32 + ORDER by file_id) LOOP + + l_statement := 'ALTER DATABASE '||l_temp||' '||j.file_id||' AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED'; + DBMS_OUTPUT.put_line(l_statement); + execute immediate l_statement; + + END LOOP; + + SELECT max(maxbytes_gb) + INTO l_smmaxfix + FROM ( + SELECT sum(maxbytes)/power(2,30) maxbytes_gb + FROM dba_data_files + WHERE tablespace_name = upper('&&tbs_name.') + UNION + SELECT sum(maxbytes)/power(2,30) maxbytes_gb + FROM dba_temp_files + WHERE tablespace_name = upper('&&tbs_name.') + ) + ; + + DBMS_OUTPUT.put_line('-------------------------------------------------------------------------------------'); + + IF l_smmaxfix >= l_maxbytes+l_newmax THEN + DBMS_OUTPUT.PUT_LINE('SmallFile Tablespace maxsize increased to: '||round(l_smmaxfix,2)||'G, no need to add more datafiles'); + ELSE + DBMS_OUTPUT.PUT_LINE( 'Smallfile tablespaces are added with 1G autoexted and Maxsize of 32G.'); + + l_newmax := ceil((l_smmaxfix*l_perc_increase)-l_smmaxfix); + + IF (l_newmax - l_bytes) >= (l_u02_avail*.7) THEN + DBMS_OUTPUT.PUT_LINE( 'Your new Maxsize request is over 70% of the available /u02 free space !!!'); + RETURN; + END IF; + + l_addfilesc := ceil(l_newmax/32); + + WHILE l_counter <= l_addfilesc + LOOP + + l_statement := 'ALTER TABLESPACE '||i.tablespace_name||' ADD '||l_temp||' SIZE 1G AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED'; + DBMS_OUTPUT.put_line(l_statement); + execute immediate l_statement; + l_counter := l_counter + 1; + END LOOP; + + END IF; + + END IF; + END LOOP; + +END; +/ + +PRO ------------------- +PRO +PRO New Tablespace Size +PRO ------------------- + +WITH +t AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + SUM(NVL(bytes, 0)) bytes + FROM cdb_data_files + WHERE con_id=&&cs_con_id. + GROUP BY + con_id, + tablespace_name + UNION ALL +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + SUM(NVL(bytes, 0)) bytes + FROM cdb_temp_files + WHERE con_id=&&cs_con_id. + GROUP BY + con_id, + tablespace_name +), +u AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + SUM(bytes) bytes + FROM cdb_free_space + WHERE con_id=&&cs_con_id. + GROUP BY + con_id, + tablespace_name + UNION ALL +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, + tablespace_name, + NVL(SUM(bytes_used), 0) bytes + FROM gv$temp_extent_pool + WHERE con_id=&&cs_con_id. + GROUP BY + con_id, + tablespace_name +), +un AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ts.con_id, + ts.tablespace_name, + NVL(um.used_space * ts.block_size, 0) bytes + FROM cdb_tablespaces ts, + cdb_tablespace_usage_metrics um + WHERE ts.contents = 'UNDO' + AND um.tablespace_name(+) = ts.tablespace_name + AND um.con_id(+) = ts.con_id +), +oem AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ts.con_id, + pdb.name pdb_name, + ts.tablespace_name, + ts.contents, + ts.bigfile, + ts.block_size, + NVL(t.bytes, 0) allocated_space_bytes, + NVL( + CASE ts.contents + WHEN 'UNDO' THEN un.bytes + WHEN 'PERMANENT' THEN t.bytes - NVL(u.bytes, 0) + WHEN 'TEMPORARY' THEN + CASE ts.extent_management + WHEN 'LOCAL' THEN u.bytes + WHEN 'DICTIONARY' THEN t.bytes - NVL(u.bytes, 0) + END + END + , 0) used_space_bytes + FROM cdb_tablespaces ts, + v$containers pdb, + t, + u, + un + WHERE 1 = 1 + AND t.tablespace_name = upper('&&tbs_name.') + AND pdb.con_id = ts.con_id + AND t.tablespace_name(+) = ts.tablespace_name + AND t.con_id(+) = ts.con_id + AND u.tablespace_name(+) = ts.tablespace_name + AND u.con_id(+) = ts.con_id + AND un.tablespace_name(+) = ts.tablespace_name + AND un.con_id(+) = ts.con_id +), +tablespaces AS ( +SELECT o.pdb_name, + o.tablespace_name, + o.contents, + o.bigfile, + ROUND(m.maxbytes / POWER(10, 9), 3) AS max_size_gb, + ROUND(o.allocated_space_bytes / POWER(10, 9), 3) AS allocated_gb, + ROUND(o.used_space_bytes / POWER(10, 9), 3) AS used_gb, + ROUND((o.allocated_space_bytes - o.used_space_bytes) / POWER(10, 9), 3) AS free_gb, + ROUND(100 * o.used_space_bytes / o.allocated_space_bytes, 3) AS used_percent, -- as per allocated space + ROUND(100 * (o.allocated_space_bytes - o.used_space_bytes) / o.allocated_space_bytes, 3) AS free_percent -- as per allocated space + FROM oem o, + (SELECT con_id, tablespace_name, sum(maxbytes) maxbytes + FROM cdb_data_files + WHERE con_id = &&cs_con_id. + GROUP BY con_id, tablespace_name + UNION + SELECT con_id, tablespace_name, sum(maxbytes) maxbytes + FROM cdb_temp_files + WHERE con_id = &&cs_con_id. + GROUP BY con_id, tablespace_name + ) m + WHERE m.tablespace_name(+) = o.tablespace_name + AND m.con_id(+) = o.con_id +) +SELECT pdb_name, + tablespace_name, + contents, + bigfile, + '|' AS "|", + max_size_gb, + allocated_gb, + used_gb, + free_gb, + used_percent, + free_percent + FROM tablespaces + ORDER BY + &&order_by. +FETCH FIRST &&rows. ROWS ONLY +/ + +CLEAR BREAK COMPUTE; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&tbs_name." "&&perc_increase." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_tcb.sql b/csierra/cs_tcb.sql new file mode 100644 index 0000000..0c9e176 --- /dev/null +++ b/csierra/cs_tcb.sql @@ -0,0 +1,92 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_tcb.sql +-- +-- Purpose: Executes Test Case Builder (TCB) for given SQL_ID +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/04/27 +-- +-- Usage: Connecting into PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_tcb.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_tcb'; +-- +PRO 1. SQL_ID: +DEF cs_sql_id = '&1.'; +UNDEF 1; +-- +PRO +PRO 2. Sampling Percent: [{100}|1-100] +DEF cs_samplingPercent = '&2.'; +UNDEF 2; +COL cs_samplingPercent NEW_V cs_samplingPercent NOPRI; +SELECT CASE WHEN TO_NUMBER('&&cs_samplingPercent.') BETWEEN 1 AND 100 THEN '&&cs_samplingPercent.' ELSE '100' END AS cs_samplingPercent FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name._&&cs_sql_id._TCB' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +PRO +ACCEPT sys_password CHAR PROMPT 'Enter SYS Password (hidden): ' HIDE +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_samplingPercent." +@@cs_internal/cs_spool_id.sql +@@cs_internal/cs_spool_id_list_sql_id.sql +-- +PRO SAMPLING_PERC: "&&cs_samplingPercent." [{100}|1-100] +PRO PARSE_SCHEMA : &&cs_parsing_schema_name. +PRO TEMP_DIR : "&&cs_temp_dir." +-- +@@cs_internal/cs_print_sql_text.sql +@@cs_internal/cs_temp_dir_create.sql +-- +ALTER SESSION SET current_schema = &&cs_parsing_schema_name.; +-- +PRO DBMS_SQLDIAG.export_sql_testcase +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +VAR testcase CLOB; +EXEC DBMS_SQLDIAG.export_sql_testcase(directory => 'CS_TEMP_DIR', sql_id => '&&cs_sql_id.', exportData => TRUE, samplingPercent => TO_NUMBER('&&cs_samplingPercent.'), testcase_name => 'TCB_&&cs_sql_id._&&cs_file_timestamp._', testcase => :testcase); +-- +ALTER SESSION SET current_schema = &&cs_current_schema.; +-- +HOS cp &&cs_temp_dir./TCB_&&cs_sql_id.* /tmp/ +HOS chmod 644 /tmp/TCB_&&cs_sql_id.* +-- +@@cs_internal/cs_temp_dir_drop.sql +-- +PRO SQL> @&&cs_script_name..sql "&&cs_sql_id." "&&cs_samplingPercent." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- +PRO +PRO TCB files +PRO ~~~~~~~~~ +HOS ls -lt /tmp/TCB_&&cs_sql_id.* +PRO +HOS zip -mj /tmp/TCB_&&cs_sql_id._&&cs_file_timestamp..zip /tmp/TCB_&&cs_sql_id._&&cs_file_timestamp._* +PRO +PRO To get TCB: +PRO ~~~~~~~~~~~ +PRO scp &&cs_host_name.:/tmp/TCB_&&cs_sql_id._&&cs_file_timestamp..zip . +PRO +-- \ No newline at end of file diff --git a/csierra/cs_tempseg_usage.sql b/csierra/cs_tempseg_usage.sql new file mode 100644 index 0000000..96668d9 --- /dev/null +++ b/csierra/cs_tempseg_usage.sql @@ -0,0 +1,74 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_tempseg_usage.sql +-- +-- Purpose: Temporary (Temp) Segment Usage (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2023/03/08 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_tempseg_usage.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +COL pdb_name FOR A30; +SELECT SUM(t.blocks) AS blocks, + COUNT(DISTINCT t.session_addr) AS sessions, + t.con_id, c.name AS pdb_name, t.sql_id, t.sql_id_tempseg, t.segtype, t.tablespace + FROM v$tempseg_usage t, v$containers c + WHERE c.con_id = t.con_id + GROUP BY + t.con_id, c.name, t.sql_id, t.sql_id_tempseg, t.segtype, t.tablespace + ORDER BY + 1 DESC +/ +-- +COL age_secs FOR 999,999,990; +COL last_call_secs FOR 999,999,990; +COL sid_serial FOR A13; +COL mbs FOR 999,990 HEA 'MBs'; +COL sid_serial FOR A12; +BREAK ON machine SKIP PAGE DUPL; +-- +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + s.machine, + s.logon_time, + (SYSDATE - s.logon_time) * 24 * 3600 AS age_secs, + s.last_call_et AS last_call_secs, + s.status, + t.con_id, + v.name AS pdb_name, + s.sid||','||s.serial# AS sid_serial, + s.type, + s.sql_id, + s.prev_sql_id, + SUM(t.blocks * c.block_size)/1e6 AS mbs + FROM v$tempseg_usage t, + v$session s, + cdb_tablespaces c, + v$containers v + WHERE s.con_id = t.con_id + AND s.saddr = t.session_addr + AND s.serial# = t.session_num + AND c.con_id = t.con_id + AND c.tablespace_name = t.tablespace + AND v.con_id = c.con_id + GROUP BY + s.machine, s.logon_time, s.last_call_et, s.status, t.con_id, v.name, s.sid, s.serial#, s.type, s.sql_id, s.prev_sql_id + ORDER BY + s.machine, s.logon_time, s.last_call_et, s.status, t.con_id, v.name, s.sid, s.serial#, s.type, s.sql_id, s.prev_sql_id +/ +-- PRO +-- PRO v$tempseg_usage +-- PRO ~~~~~~~~~~~~~~~ +-- @@cs_internal/cs_pr_internal.sql "SELECT * FROM v$tempseg_usage;" +-- \ No newline at end of file diff --git a/csierra/cs_time_to_epoch.sql b/csierra/cs_time_to_epoch.sql new file mode 100644 index 0000000..d5d74a7 --- /dev/null +++ b/csierra/cs_time_to_epoch.sql @@ -0,0 +1,37 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_time_to_epoch.sql +-- +-- Purpose: Convert Time to Epoch +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/06 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_time_to_epoch.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET NUM 15; +DEF cs_datetime_full_format = 'YYYY-MM-DD"T"HH24:MI:SS'; +DEF cs_datetime_display_format = 'yyyy-mm-ddThh:mi:ss'; +PRO +PRO 1. Enter Time: [&&cs_datetime_display_format.] +DEF cs_time = '&1.'; +UNDEF 1; +-- +-- note: on 19c consider select dbms_stats.convert_raw_to_date(hextoraw('7877031203192A0C1988C0')) from dual; +-- +WITH +days AS ( +SELECT TO_DATE('&&cs_time.', '&&cs_datetime_full_format.') - TO_DATE('1970-01-01T00:00:00', '&&cs_datetime_full_format.') AS cnt FROM DUAL +) +SELECT days.cnt * 24 * 3600 AS epoch_seconds, days.cnt * 24 * 3600 * 1000 AS epoch_milliseconds + FROM days +/ diff --git a/csierra/cs_timed_event_top_consumers_pie.sql b/csierra/cs_timed_event_top_consumers_pie.sql new file mode 100644 index 0000000..c89da56 --- /dev/null +++ b/csierra/cs_timed_event_top_consumers_pie.sql @@ -0,0 +1,198 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_timed_event_top_consumers_pie.sql +-- +-- Purpose: Top contributors of a given Wait Class or Event (pie chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates, timed event and group by when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_timed_event_top_consumers_pie.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_timed_event_top_consumers_pie'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL perc FOR 990.0; +COL waited_seconds FOR 999,999,999,990; +COL total_waits FOR 999,999,999,990; +COL avg_wait_ms FOR 999,990.000; +COL aas FOR 990.000; +COL wait_class FOR A14; +COL event_name FOR A64 HEA 'EVENT'; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF perc aas waited_seconds total_waits ON REPORT; +-- +PRO +PRO Top 30 timed events between &&cs_begin_date_from. and &&cs_end_date_to. (and after startup on &&cs_startup_time.) +PRO ~~~~~~~~~~~~~~~~~~~ +WITH +top AS ( +SELECT 100 * (e.time_waited_micro - b.time_waited_micro) / SUM(e.time_waited_micro - b.time_waited_micro) OVER () perc, + (e.time_waited_micro - b.time_waited_micro) / 1e6 / TO_NUMBER('&&cs_begin_end_seconds.') aas, + (e.time_waited_micro - b.time_waited_micro) / 1e3 / (e.total_waits - b.total_waits) avg_wait_ms, + SUM(e.time_waited_micro - b.time_waited_micro) OVER (PARTITION BY e.wait_class) AS wait_class_time, + e.wait_class, + e.event_name, + (e.time_waited_micro - b.time_waited_micro) / 1e6 waited_seconds, + (e.total_waits - b.total_waits) total_waits + FROM dba_hist_system_event b, + dba_hist_system_event e + WHERE b.dbid = TO_NUMBER('&&cs_dbid.') + AND b.instance_number = TO_NUMBER('&&cs_instance_number.') + AND b.snap_id = GREATEST(TO_NUMBER('&&cs_snap_id_from.'), TO_NUMBER('&&cs_startup_snap_id.')) + AND b.wait_class <> 'Idle' + AND e.dbid = TO_NUMBER('&&cs_dbid.') + AND e.instance_number = TO_NUMBER('&&cs_instance_number.') + AND e.snap_id = TO_NUMBER('&&cs_snap_id_to.') + AND e.wait_class <> 'Idle' + AND e.event_id = b.event_id + AND e.event_name = b.event_name + AND e.wait_class_id = b.wait_class_id + AND e.wait_class = b.wait_class + AND e.time_waited_micro > b.time_waited_micro + AND e.total_waits > b.total_waits + ORDER BY + e.time_waited_micro - b.time_waited_micro DESC +FETCH FIRST 30 ROWS ONLY +) +SELECT wait_class, + event_name, + perc, + aas, + avg_wait_ms, + waited_seconds, + total_waits + FROM top + ORDER BY + wait_class_time DESC, + perc DESC +/ +-- +CLEAR BREAK COMPUTE; +-- +PRO +PRO 3. Timed Event: [{all}|WAIT_CLASS|EVENT] +DEF timed_event = '&3.'; +UNDEF 3; +COL timed_event NEW_V timed_event NOPRI; +SELECT COALESCE('&&timed_event.','all') AS timed_event FROM DUAL +/ +PRO +PRO 4. Dimension: [{PDB_NAME}|SQL_ID|TOP_LEVEL_SQL_ID|MACHINE|PROGRAM|MODULE|ACTION|SESSION_ID|USER_ID|WAIT_CLASS|EVENT|CURRENT_OBJ#] +DEF gb_column_name = '&4.'; +UNDEF 4; +COL gb_column_name NEW_V gb_column_name NOPRI; +SELECT CASE WHEN '&&gb_column_name.' IN ('PDB_NAME', 'SQL_ID', 'TOP_LEVEL_SQL_ID', 'MACHINE', 'PROGRAM', 'MODULE', 'ACTION', 'SESSION_ID', 'USER_ID', 'WAIT_CLASS', 'EVENT', 'CURRENT_OBJ#') THEN '&&gb_column_name.' ELSE 'PDB_NAME' END AS gb_column_name FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'Top &&gb_column_name as per "&&timed_event." contribution between &&cs_sample_time_from. and &&cs_sample_time_to.'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = ''; +DEF vaxis_title = ''; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +DEF is_stacked = "isStacked: false,"; +--DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_1 = ""; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&timed_event." "&&gb_column_name."'; +-- +DEF chart_foot_note_0 = ''; +DEF chart_foot_note_1 = ''; +-- [Line|Area|SteppedArea|ScatterPie] +DEF cs_chart_type = 'Pie'; +DEF cs_chart_width = '900px'; +DEF cs_chart_height = '450px'; +DEF cs_chartarea_height = '80%'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = '//'; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = ''; +-- pieSliceText [{percentage}|value|label|none] +DEF cs_chart_pie_slice_text = "// pieSliceText: 'percentage',"; +--DEF cs_chart_pie_slice_text = "pieSliceText: 'value',"; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,'&&gb_column_name.' +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +timed_events_samples AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + c.name AS pdb_name, + h.sql_id, h.top_level_sql_id, h.machine, h.program, h.module, h.action, h.session_id, h.user_id, h.wait_class, h.event, h.current_obj#, + COUNT(*) as samples + FROM dba_hist_active_sess_history h, + v$containers c + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.session_state = 'WAITING' + AND ('&&timed_event.' = 'all' OR UPPER(h.wait_class||h.event) LIKE UPPER('%&&timed_event.%')) + AND c.con_id = h.con_id + GROUP BY + c.name, + h.sql_id, h.top_level_sql_id, h.machine, h.program, h.module, h.action, h.session_id, h.user_id, h.wait_class, h.event, h.current_obj# +), +aggregated AS ( +SELECT &&gb_column_name. AS slice_name, + SUM(samples) * 10 AS value, + 100 * SUM(samples) / SUM(SUM(samples)) OVER () AS percent + FROM timed_events_samples + GROUP BY + &&gb_column_name. +) +SELECT ', ['''||NVL(slice_name, '"null"')||' ('||TRIM(TO_CHAR(percent, '990.0'))||'%)'','||value||']' + FROM aggregated + ORDER BY + value DESC +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/cs_timed_event_top_consumers_report.sql b/csierra/cs_timed_event_top_consumers_report.sql new file mode 100644 index 0000000..c314e8c --- /dev/null +++ b/csierra/cs_timed_event_top_consumers_report.sql @@ -0,0 +1,176 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_timed_event_top_consumers_report.sql +-- +-- Purpose: Top contributors of a given Wait Class or Event (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates, timed event and group by when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_timed_event_top_consumers_report.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_timed_event_top_consumers_report'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL perc FOR 990.0; +COL waited_seconds FOR 999,999,999,990; +COL total_waits FOR 999,999,999,990; +COL avg_wait_ms FOR 999,990.000; +COL aas FOR 990.000; +COL wait_class FOR A14; +COL event_name FOR A64 HEA 'EVENT'; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF perc aas waited_seconds total_waits ON REPORT; +-- +PRO +PRO Top 30 timed events between &&cs_begin_date_from. and &&cs_end_date_to. (and after startup on &&cs_startup_time.) +PRO ~~~~~~~~~~~~~~~~~~~ +WITH +top AS ( +SELECT 100 * (e.time_waited_micro - b.time_waited_micro) / SUM(e.time_waited_micro - b.time_waited_micro) OVER () perc, + (e.time_waited_micro - b.time_waited_micro) / 1e6 / TO_NUMBER('&&cs_begin_end_seconds.') aas, + (e.time_waited_micro - b.time_waited_micro) / 1e3 / (e.total_waits - b.total_waits) avg_wait_ms, + SUM(e.time_waited_micro - b.time_waited_micro) OVER (PARTITION BY e.wait_class) AS wait_class_time, + e.wait_class, + e.event_name, + (e.time_waited_micro - b.time_waited_micro) / 1e6 waited_seconds, + (e.total_waits - b.total_waits) total_waits + FROM dba_hist_system_event b, + dba_hist_system_event e + WHERE b.dbid = TO_NUMBER('&&cs_dbid.') + AND b.instance_number = TO_NUMBER('&&cs_instance_number.') + AND b.snap_id = GREATEST(TO_NUMBER('&&cs_snap_id_from.'), TO_NUMBER('&&cs_startup_snap_id.')) + AND b.wait_class <> 'Idle' + AND e.dbid = TO_NUMBER('&&cs_dbid.') + AND e.instance_number = TO_NUMBER('&&cs_instance_number.') + AND e.snap_id = TO_NUMBER('&&cs_snap_id_to.') + AND e.wait_class <> 'Idle' + AND e.event_id = b.event_id + AND e.event_name = b.event_name + AND e.wait_class_id = b.wait_class_id + AND e.wait_class = b.wait_class + AND e.time_waited_micro > b.time_waited_micro + AND e.total_waits > b.total_waits + ORDER BY + e.time_waited_micro - b.time_waited_micro DESC +FETCH FIRST 30 ROWS ONLY +) +SELECT wait_class, + event_name, + perc, + aas, + avg_wait_ms, + waited_seconds, + total_waits + FROM top + ORDER BY + wait_class_time DESC, + perc DESC +/ +-- +CLEAR BREAK COMPUTE; +-- +PRO +PRO 3. Timed Event: [{all}|WAIT_CLASS|EVENT] +DEF timed_event = '&3.'; +UNDEF 3; +COL timed_event NEW_V timed_event NOPRI; +SELECT COALESCE('&&timed_event.','all') AS timed_event FROM DUAL +/ +PRO +PRO 4. Dimension: [{PDB_NAME}|SQL_ID|TOP_LEVEL_SQL_ID|MACHINE|PROGRAM|MODULE|ACTION|SESSION_ID|USER_ID|WAIT_CLASS|EVENT|CURRENT_OBJ#] +DEF gb_column_name = '&4.'; +UNDEF 4; +COL gb_column_name NEW_V gb_column_name NOPRI; +SELECT CASE WHEN '&&gb_column_name.' IN ('PDB_NAME', 'SQL_ID', 'TOP_LEVEL_SQL_ID', 'MACHINE', 'PROGRAM', 'MODULE', 'ACTION', 'SESSION_ID', 'USER_ID', 'WAIT_CLASS', 'EVENT', 'CURRENT_OBJ#') THEN '&&gb_column_name.' ELSE 'PDB_NAME' END AS gb_column_name FROM DUAL +/ +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&timed_event." "&&gb_column_name." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +PRO TIMED_EVENT : "&&timed_event." [{all}|WAIT_CLASS|EVENT] +PRO DIMENSION : "&&gb_column_name." [{PDB_NAME}|SQL_ID|TOP_LEVEL_SQL_ID|MACHINE|PROGRAM|MODULE|ACTION|SESSION_ID|USER_ID|WAIT_CLASS|EVENT|CURRENT_OBJ#] +-- +COL slice_name FOR A64 TRUNC HEA '&&gb_column_name.'; +COL value FOR 999,999,990 HEA 'DB_TIME_SECS'; +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF perc value ON REPORT; +-- +/****************************************************************************************/ +PRO +PRO Top &&gb_column_name as per "&&timed_event." contribution between &&cs_sample_time_from. and &&cs_sample_time_to. +PRO ~~~ +WITH +timed_events_samples AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + c.name AS pdb_name, + h.sql_id, h.top_level_sql_id, h.machine, h.program, h.module, h.action, h.session_id, h.user_id, h.wait_class, h.event, h.current_obj#, + COUNT(*) as samples + FROM dba_hist_active_sess_history h, + v$containers c + WHERE h.sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND h.sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.session_state = 'WAITING' + AND ('&&timed_event.' = 'all' OR UPPER(h.wait_class||h.event) LIKE UPPER('%&&timed_event.%')) + AND c.con_id = h.con_id + GROUP BY + c.name, + h.sql_id, h.top_level_sql_id, h.machine, h.program, h.module, h.action, h.session_id, h.user_id, h.wait_class, h.event, h.current_obj# +), +aggregated AS ( +SELECT &&gb_column_name. AS slice_name, + SUM(samples) * 10 AS value, + 100 * SUM(samples) / SUM(SUM(samples)) OVER () AS percent + FROM timed_events_samples + GROUP BY + &&gb_column_name. +) +SELECT percent AS perc, value, NVL(slice_name, '"null"') AS slice_name + FROM aggregated + ORDER BY + percent DESC +FETCH FIRST 30 ROWS ONLY +/ +/****************************************************************************************/ +-- +CLEAR BREAK COMPUTE; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&timed_event." "&&gb_column_name." +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_top.sql b/csierra/cs_top.sql new file mode 100644 index 0000000..4eec0e9 --- /dev/null +++ b/csierra/cs_top.sql @@ -0,0 +1,49 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: ta.sql | t.sql | cs_top.sql +-- +-- Purpose: Top Active SQL as per Active Sessions History ASH - last 1m +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/08/17 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top'; +DEF cs_script_acronym = 'ta.sql | t.sql | '; +-- +DEF cs_minutes = '1'; +DEF cs_top = '30'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_top_activity_internal.sql +@@cs_internal/cs_top_internal_foot.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_top_application_segments.sql b/csierra/cs_top_application_segments.sql new file mode 100644 index 0000000..54ebf5d --- /dev/null +++ b/csierra/cs_top_application_segments.sql @@ -0,0 +1,124 @@ +WITH +relevant_segments AS ( +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + s.con_id, + s.owner, + s.segment_name, + s.partition_name, + s.segment_type, + s.tablespace_name, + s.bytes, + s.blocks, + CASE + WHEN s.segment_type LIKE 'TABLE%' THEN t.num_rows + END AS num_rows, + CASE + WHEN s.segment_type LIKE 'TABLE%' THEN s.segment_name + WHEN s.segment_type LIKE 'LOB%' AND s.segment_type <> 'LOBINDEX' THEN l.table_name + WHEN s.segment_type LIKE 'INDEX%' OR s.segment_type = 'LOBINDEX' THEN i.table_name + END AS table_name, + CASE + WHEN s.segment_type LIKE 'LOB%' AND s.segment_type <> 'LOBINDEX' THEN l.index_name + WHEN s.segment_type LIKE 'INDEX%' OR s.segment_type = 'LOBINDEX' THEN i.index_name + END AS index_name, + CASE + WHEN s.segment_type LIKE 'LOB%' AND s.segment_type <> 'LOBINDEX' THEN l.column_name + END AS column_name + FROM cdb_users u, + cdb_segments s, + cdb_tables t, + cdb_lobs l, + cdb_indexes i + WHERE u.oracle_maintained = 'N' + AND u.common = 'NO' + AND s.con_id = u.con_id + AND s.owner = u.username + AND s.bytes > 0 + AND s.blocks > 0 + AND (s.segment_type LIKE 'TABLE%' OR s.segment_type LIKE 'LOB%' OR s.segment_type LIKE 'INDEX%') + AND t.con_id(+) = s.con_id + AND t.owner(+) = s.owner + AND t.table_name(+) = s.segment_name + AND l.con_id(+) = s.con_id + AND l.owner(+) = s.owner + AND l.segment_name(+) = s.segment_name + AND i.con_id(+) = s.con_id + AND i.owner(+) = s.owner + AND i.index_name(+) = s.segment_name +), +aggregated_segments AS ( +SELECT s.con_id, + s.owner, + s.segment_name, + 1 AS segments, + s.partition_name, + s.segment_type, + s.tablespace_name, + s.bytes, + s.blocks, + s.num_rows, + s.table_name, + s.index_name, + s.column_name + FROM relevant_segments s + WHERE s.bytes >= POWER(10, 7) -- include segments >= 10MB + AND s.segment_name NOT LIKE 'BIN$%==$0' -- exclude recycle bin segments + UNION ALL +SELECT s.con_id, + s.owner, + 'segments_under_10mb' AS segment_name, + COUNT(*) AS segments, + NULL AS partition_name, + s.segment_type, + s.tablespace_name, + SUM(s.bytes) AS bytes, + SUM(s.blocks) AS blocks, + TO_NUMBER(NULL) AS num_rows, + NULL AS table_name, + NULL AS index_name, + NULL AS column_name + FROM relevant_segments s + WHERE s.bytes < POWER(10, 7) -- include segments < 10MB + AND s.segment_name NOT LIKE 'BIN$%==$0' -- exclude recycle bin segments + GROUP BY + s.con_id, + s.owner, + s.segment_type, + s.tablespace_name + UNION ALL +SELECT s.con_id, + s.owner, + 'recycle_bin_segments' AS segment_name, + COUNT(*) AS segments, + NULL AS partition_name, + s.segment_type, + s.tablespace_name, + SUM(s.bytes) AS bytes, + SUM(s.blocks) AS blocks, + TO_NUMBER(NULL) AS num_rows, + NULL AS table_name, + NULL AS index_name, + NULL AS column_name + FROM relevant_segments s + WHERE s.segment_name LIKE 'BIN$%==$0' -- include recycle bin segments + GROUP BY + s.con_id, + s.owner, + s.segment_type, + s.tablespace_name +) +SELECT s.con_id, + s.owner, + s.segment_name, + s.segments, + s.partition_name, + s.segment_type, + s.tablespace_name, + s.bytes, + s.blocks, + s.num_rows, + s.table_name, + s.index_name, + s.column_name + FROM aggregated_segments s +/ diff --git a/csierra/cs_top_bloated_indexes.sql b/csierra/cs_top_bloated_indexes.sql new file mode 100644 index 0000000..6209e2e --- /dev/null +++ b/csierra/cs_top_bloated_indexes.sql @@ -0,0 +1,159 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_bloated_indexes.sql +-- +-- Purpose: Top bloated indexes on a PDB (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_bloated_indexes.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET SERVEROUT ON; +DEF top_n = '20'; +DEF debug = 'N'; +-- +COL owner FOR A30; +COL table_name FOR A30; +COL index_name FOR A30; +COL partitioned FOR A4 HEA 'PART'; +COL current_gb FOR 9,990.000 HEA 'CURRENT|GB'; +COL estimated_gb FOR 9,990.000 HEA 'ESTIMATED|GB'; +COL wasted_gb FOR 9,990.000 HEA 'WASTED|GB'; +COL wated_perc FOR 990.0 HEA 'WASTED|PERC%'; +COL estimated_bytes_function FOR 999 HEA 'FUNC'; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL "TOTAL" OF current_gb estimated_gb wasted_gb ON REPORT; +-- +WITH +FUNCTION get_estimated_index_size1 (p_owner IN VARCHAR2, p_index_name IN VARCHAR2, p_current_bytes IN NUMBER) +RETURN NUMBER +IS + l_used_bytes NUMBER; + l_alloc_bytes NUMBER; +BEGIN + DBMS_SPACE.create_index_cost ( + ddl => DBMS_METADATA.get_ddl('INDEX', p_index_name, p_owner), + used_bytes => l_used_bytes, + alloc_bytes => l_alloc_bytes + ); + IF '&&debug.' = 'Y' THEN + DBMS_OUTPUT.put_line(CHR(10)||'1 '||p_owner||'.'||p_index_name||' '||p_current_bytes||' '||l_alloc_bytes); + END IF; + RETURN l_alloc_bytes; +EXCEPTION + WHEN OTHERS THEN + IF '&&debug.' = 'Y' THEN + DBMS_OUTPUT.put_line(CHR(10)||p_owner||'.'||p_index_name); + DBMS_OUTPUT.put_line(SQLERRM); + END IF; + RETURN -1; +END get_estimated_index_size1; +/****************************************************************************************/ +FUNCTION get_estimated_index_size2 (p_owner IN VARCHAR2, p_index_name IN VARCHAR2, p_current_bytes IN NUMBER) +RETURN NUMBER +IS + l_alloc_bytes NUMBER; +BEGIN + SELECT ROUND( + ( -- https://stackoverflow.com/questions/827123/how-can-i-estimate-the-size-of-an-oracle-index + SUM((t.num_rows - tc.num_nulls) * (tc.avg_col_len + 1)) + -- data payload + i.num_rows * 18 + -- rowid + i.num_rows * 2 -- index row header + ) * 1.125 -- for pctfree of 10 and an overhead factor + ) + INTO l_alloc_bytes + FROM dba_ind_columns ic, + dba_tab_columns tc, + dba_tables t, + dba_indexes i + WHERE ic.index_owner = p_owner + AND ic.index_name = p_index_name + AND tc.owner = ic.table_owner + AND tc.table_name = ic.table_name + AND tc.column_name = ic.column_name + AND t.owner = ic.table_owner + AND t.table_name = ic.table_name + AND i.owner = ic.index_owner + AND i.index_name = ic.index_name + GROUP BY + t.num_rows, + i.num_rows; + IF '&&debug.' = 'Y' THEN + DBMS_OUTPUT.put_line(CHR(10)||'2 '||p_owner||'.'||p_index_name||' '||p_current_bytes||' '||l_alloc_bytes); + END IF; + RETURN l_alloc_bytes; +EXCEPTION + WHEN OTHERS THEN + IF '&&debug.' = 'Y' THEN + DBMS_OUTPUT.put_line(CHR(10)||p_owner||'.'||p_index_name); + DBMS_OUTPUT.put_line(SQLERRM); + END IF; + RETURN -1; +END get_estimated_index_size2; +/****************************************************************************************/ +all_application_indexes AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + i.owner, i.table_name, i.index_name, i.partitioned, + SUM(bytes) AS current_bytes + FROM dba_segments s, + dba_users u, + dba_indexes i + WHERE s.segment_type LIKE 'INDEX%' + AND s.segment_name NOT LIKE 'SYS_IL%' + AND u.username = s.owner + AND u.oracle_maintained = 'N' + AND i.owner = s.owner + AND i.index_name = s.segment_name + GROUP BY + i.owner, i.table_name, i.index_name, i.partitioned +), +all_application_indexes_trans1 AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + owner, table_name, index_name, partitioned, + current_bytes, + get_estimated_index_size1(owner, index_name, current_bytes) AS estimated_bytes1, + get_estimated_index_size2(owner, index_name, current_bytes) AS estimated_bytes2 + FROM all_application_indexes +), +all_application_indexes_trans2 AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + owner, table_name, index_name, partitioned, + current_bytes, + CASE estimated_bytes1 WHEN -1 THEN (CASE estimated_bytes2 WHEN -1 THEN NULL ELSE estimated_bytes2 END) ELSE estimated_bytes1 END AS estimated_bytes, + CASE estimated_bytes1 WHEN -1 THEN (CASE estimated_bytes2 WHEN -1 THEN -1 ELSE 2 END) ELSE 1 END AS estimated_bytes_function + FROM all_application_indexes_trans1 +), +all_bloated_appl_indexes AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + owner, table_name, index_name, partitioned, + current_bytes, estimated_bytes, + current_bytes - estimated_bytes AS wasted_bytes, + estimated_bytes_function, + ROW_NUMBER() OVER (ORDER BY current_bytes - estimated_bytes DESC) AS rn + FROM all_application_indexes_trans2 + WHERE current_bytes > estimated_bytes +) +SELECT owner, table_name, index_name, partitioned, + ROUND(current_bytes / POWER(10,9), 3) AS current_gb, + ROUND(estimated_bytes / POWER(10,9), 3) AS estimated_gb, + ROUND(wasted_bytes / POWER(10,9), 3) AS wasted_gb, + ROUND(100 * wasted_bytes / current_bytes, 1) AS wated_perc, + estimated_bytes_function + FROM all_bloated_appl_indexes + WHERE rn <= &&top_n. + ORDER BY + rn +/ +-- +SET SERVEROUT OFF; \ No newline at end of file diff --git a/csierra/cs_top_indexes.sql b/csierra/cs_top_indexes.sql new file mode 100644 index 0000000..b8d90f7 --- /dev/null +++ b/csierra/cs_top_indexes.sql @@ -0,0 +1,95 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_indexes.sql +-- +-- Purpose: Top Indexes according to Segment(s) size +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter if Oracle Maintained tables are included +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_indexes.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_indexes'; +-- +PRO 1. ORACLE_MAINT: [{N}|Y] +DEF cs_oracle_maint = '&1.'; +UNDEF 1; +COL cs_oracle_maint NEW_V cs_oracle_maint NOPRI; +SELECT COALESCE('&&cs_oracle_maint.', 'N') AS cs_oracle_maint FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_oracle_maint." +@@cs_internal/cs_spool_id.sql +-- +PRO ORACLE MAINT : "&&cs_oracle_maint." [{N}|Y] +-- +COL gb FOR 999,990.000 HEA 'GB'; +COL owner FOR A30 TRUNC; +COL segment_name FOR A30 TRUNC; +COL tablespace_name FOR A30 TRUNC; +COL pdb_name FOR A30 TRUNC; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF gb ON REPORT; +-- +PRO +PRO TOP INDEXES +PRO ~~~~~~~~~~~ +SELECT SUM(s.bytes)/1e9 AS gb, + s.owner, + s.segment_name, + s.segment_type, + s.tablespace_name, + c.name AS pdb_name + FROM cdb_segments s, + cdb_users u, + cdb_indexes i, + v$containers c + WHERE s.segment_type LIKE '%INDEX%' + AND u.con_id = s.con_id + AND u.username = s.owner + AND ('&&cs_oracle_maint.' = 'Y' OR u.oracle_maintained = 'N') + AND i.con_id(+) = s.con_id + AND i.owner(+) = s.owner + AND i.index_name(+) = s.segment_name + AND c.con_id = s.con_id + AND c.open_mode = 'READ WRITE' + GROUP BY + s.owner, + s.segment_name, + s.segment_type, + s.tablespace_name, + c.name +HAVING SUM(s.bytes)/1e9 > 0.001 + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +CLEAR BREAK COMPUTE COLUMNS; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_oracle_maint." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_top_lobs.sql b/csierra/cs_top_lobs.sql new file mode 100644 index 0000000..eab213a --- /dev/null +++ b/csierra/cs_top_lobs.sql @@ -0,0 +1,101 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_lobs.sql +-- +-- Purpose: Top Lobs according to Segment(s) size +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter if Oracle Maintained tables are included +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_lobs.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_lobs'; +-- +PRO 1. ORACLE_MAINT: [{N}|Y] +DEF cs_oracle_maint = '&1.'; +UNDEF 1; +COL cs_oracle_maint NEW_V cs_oracle_maint NOPRI; +SELECT COALESCE('&&cs_oracle_maint.', 'N') AS cs_oracle_maint FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_oracle_maint." +@@cs_internal/cs_spool_id.sql +-- +PRO ORACLE MAINT : "&&cs_oracle_maint." [{N}|Y] +-- +COL gb FOR 999,990.000 HEA 'GB'; +COL owner FOR A30; +COL segment_name FOR A30; +COL table_name FOR A30; +COL column_name FOR A30; +COL tablespace_name FOR A30; +COL pdb_name FOR A30; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF gb ON REPORT; +-- +PRO +PRO TOP LOBS +PRO ~~~~~~~~ +SELECT SUM(s.bytes)/1e9 AS gb, + s.owner, + s.segment_name, + s.segment_type, + l.table_name, + l.column_name, + s.tablespace_name, + c.name AS pdb_name + FROM cdb_segments s, + cdb_users u, + cdb_lobs l, + v$containers c + WHERE s.segment_type LIKE 'LOB%' + AND u.con_id = s.con_id + AND u.username = s.owner + AND ('&&cs_oracle_maint.' = 'Y' OR u.oracle_maintained = 'N') + AND l.con_id(+) = s.con_id + AND l.owner(+) = s.owner + AND l.segment_name(+) = s.segment_name + AND c.con_id = s.con_id + AND c.open_mode = 'READ WRITE' + GROUP BY + s.owner, + s.segment_name, + s.segment_type, + l.table_name, + l.column_name, + s.tablespace_name, + c.name +HAVING SUM(s.bytes)/1e9 > 0.001 + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +CLEAR BREAK COMPUTE COLUMNS; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_oracle_maint." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_top_pdb_chart.sql b/csierra/cs_top_pdb_chart.sql new file mode 100644 index 0000000..c2a4616 --- /dev/null +++ b/csierra/cs_top_pdb_chart.sql @@ -0,0 +1,244 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_pdb_chart.sql +-- +-- Purpose: Top PDBs as per use of CPU Cores, Disk Space or Sessions (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/01/21 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_pdb_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_pdb_chart'; +DEF cs_hours_range_default = '4320'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(timestamp)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_pdbs +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +PRO 3. Metric: [{CPU Cores}|Disk Space|Sessions] +DEF cs_metric = '&3.'; +UNDEF 3; +COL cs_metric NEW_V cs_metric NOPRI; +SELECT CASE WHEN UPPER(TRIM('&&cs_metric.')) IN ('CPU CORES', 'DISK SPACE', 'SESSIONS') THEN TRIM('&&cs_metric.') ELSE 'CPU Cores' END AS cs_metric FROM DUAL; +COL cs_vaxis_title NEW_V cs_vaxis_title NOPRI; +SELECT CASE UPPER('&&cs_metric.') WHEN 'CPU CORES' THEN 'Average Running Sessions' WHEN 'DISK SPACE' THEN 'Gigabytes (GBs)' WHEN 'SESSIONS' THEN 'Sessions' END AS cs_vaxis_title FROM DUAL; +COL cs_expression NEW_V cs_expression NOPRI; +SELECT CASE UPPER('&&cs_metric.') WHEN 'CPU CORES' THEN 'p.avg_running_sessions' WHEN 'DISK SPACE' THEN 'p.total_size_bytes / POWER(10, 9)' WHEN 'SESSIONS' THEN 'p.sessions' END AS cs_expression FROM DUAL; +COL report_title_prefix NEW_V report_title_prefix NOPRI; +SELECT CASE '&&cs_con_name.' WHEN 'CDB$ROOT' THEN 'Top PDBs as per use of' ELSE '&&cs_con_name. use of' END AS report_title_prefix FROM DUAL; +COL cs_legend_position NEW_V cs_legend_position NOPRI; +SELECT CASE '&&cs_con_name.' WHEN 'CDB$ROOT' THEN '&&cs_legend_position.' ELSE 'none' END AS cs_legend_position FROM DUAL; +COL cs_chartarea_width NEW_V cs_chartarea_width NOPRI; +SELECT CASE '&&cs_con_name.' WHEN 'CDB$ROOT' THEN '&&cs_chartarea_width.' ELSE '87%' END AS cs_chartarea_width FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "&&report_title_prefix. &&cs_metric. between &&cs_sample_time_from. and &&cs_sample_time_to. UTC"; +DEF chart_title = "&&report_title."; +DEF xaxis_title = ""; +DEF vaxis_title = "&&cs_vaxis_title."; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&baseline., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF vaxis_viewwindow = ", viewWindow: {min:0}"; +DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs_metric."'; +-- +DEF top_01 = ""; +DEF top_02 = ""; +DEF top_03 = ""; +DEF top_04 = ""; +DEF top_05 = ""; +DEF top_06 = ""; +DEF top_08 = ""; +DEF top_09 = ""; +DEF top_10 = ""; +DEF top_11 = ""; +DEF top_12 = ""; +DEF top_13 = ""; +DEF top_14 = ""; +DEF others = "OTHER PDBS"; +-- +COL top_01 NEW_V top_01 NOPRI; +COL top_02 NEW_V top_02 NOPRI; +COL top_03 NEW_V top_03 NOPRI; +COL top_04 NEW_V top_04 NOPRI; +COL top_05 NEW_V top_05 NOPRI; +COL top_06 NEW_V top_06 NOPRI; +COL top_07 NEW_V top_07 NOPRI; +COL top_08 NEW_V top_08 NOPRI; +COL top_09 NEW_V top_09 NOPRI; +COL top_10 NEW_V top_10 NOPRI; +COL top_11 NEW_V top_11 NOPRI; +COL top_12 NEW_V top_12 NOPRI; +COL top_13 NEW_V top_13 NOPRI; +COL top_14 NEW_V top_14 NOPRI; +COL others NEW_V others NOPRI; +-- +WITH +pdb AS ( +SELECT p.pdb_name, + ROW_NUMBER() OVER (ORDER BY SUM(&&cs_expression.) DESC) AS rn + FROM &&cs_tools_schema..dbc_pdbs p + --WHERE p.timestamp = (SELECT MAX(timestamp) FROM &&cs_tools_schema..dbc_pdbs WHERE timestamp >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND timestamp < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) + WHERE p.timestamp >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND p.timestamp < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND '&&cs_con_name.' IN (p.pdb_name, 'CDB$ROOT') + AND &&cs_expression. > 0 + GROUP BY + p.pdb_name +) +SELECT MAX(CASE rn WHEN 1 THEN pdb_name END) AS top_01, + MAX(CASE rn WHEN 2 THEN pdb_name END) AS top_02, + MAX(CASE rn WHEN 3 THEN pdb_name END) AS top_03, + MAX(CASE rn WHEN 4 THEN pdb_name END) AS top_04, + MAX(CASE rn WHEN 5 THEN pdb_name END) AS top_05, + MAX(CASE rn WHEN 6 THEN pdb_name END) AS top_06, + MAX(CASE rn WHEN 7 THEN pdb_name END) AS top_07, + MAX(CASE rn WHEN 8 THEN pdb_name END) AS top_08, + MAX(CASE rn WHEN 9 THEN pdb_name END) AS top_09, + MAX(CASE rn WHEN 10 THEN pdb_name END) AS top_10, + MAX(CASE rn WHEN 11 THEN pdb_name END) AS top_11, + MAX(CASE rn WHEN 12 THEN pdb_name END) AS top_12, + MAX(CASE rn WHEN 13 THEN pdb_name END) AS top_13, + MAX(CASE rn WHEN 14 THEN pdb_name END) AS top_14, + CASE WHEN COUNT(*) > 15 THEN (COUNT(*) - 15)||' OTHER PDBS' END AS others + FROM pdb +/ +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&top_01.', id:'01', type:'number'} +PRO ,{label:'&&top_02.', id:'02', type:'number'} +PRO ,{label:'&&top_03.', id:'03', type:'number'} +PRO ,{label:'&&top_04.', id:'04', type:'number'} +PRO ,{label:'&&top_05.', id:'05', type:'number'} +PRO ,{label:'&&top_06.', id:'06', type:'number'} +PRO ,{label:'&&top_07.', id:'07', type:'number'} +PRO ,{label:'&&top_08.', id:'08', type:'number'} +PRO ,{label:'&&top_09.', id:'09', type:'number'} +PRO ,{label:'&&top_10.', id:'10', type:'number'} +PRO ,{label:'&&top_11.', id:'11', type:'number'} +PRO ,{label:'&&top_12.', id:'12', type:'number'} +PRO ,{label:'&&top_13.', id:'13', type:'number'} +PRO ,{label:'&&top_14.', id:'14', type:'number'} +PRO ,{label:'&&others.', id:'99', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT p.timestamp, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_01.' THEN &&cs_expression. ELSE 0 END), 3) AS top_01, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_02.' THEN &&cs_expression. ELSE 0 END), 3) AS top_02, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_03.' THEN &&cs_expression. ELSE 0 END), 3) AS top_03, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_04.' THEN &&cs_expression. ELSE 0 END), 3) AS top_04, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_05.' THEN &&cs_expression. ELSE 0 END), 3) AS top_05, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_06.' THEN &&cs_expression. ELSE 0 END), 3) AS top_06, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_07.' THEN &&cs_expression. ELSE 0 END), 3) AS top_07, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_08.' THEN &&cs_expression. ELSE 0 END), 3) AS top_08, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_09.' THEN &&cs_expression. ELSE 0 END), 3) AS top_09, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_10.' THEN &&cs_expression. ELSE 0 END), 3) AS top_10, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_11.' THEN &&cs_expression. ELSE 0 END), 3) AS top_11, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_12.' THEN &&cs_expression. ELSE 0 END), 3) AS top_12, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_13.' THEN &&cs_expression. ELSE 0 END), 3) AS top_13, + ROUND(SUM(CASE p.pdb_name WHEN '&&top_14.' THEN &&cs_expression. ELSE 0 END), 3) AS top_14, + ROUND(SUM(CASE WHEN p.pdb_name IN ('&&top_01.', '&&top_02.', '&&top_03.', '&&top_04.', '&&top_05.', '&&top_06.', '&&top_07.', '&&top_08.', '&&top_09.', '&&top_10.', '&&top_11.', '&&top_12.', '&&top_13.', '&&top_14.') THEN 0 ELSE &&cs_expression. END), 3) AS others + FROM &&cs_tools_schema..dbc_pdbs p + WHERE p.timestamp >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND p.timestamp < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND '&&cs_con_name.' IN (p.pdb_name, 'CDB$ROOT') + AND &&cs_expression. > 0 + GROUP BY + p.timestamp +) +SELECT ', [new Date('|| + TO_CHAR(q.timestamp, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.timestamp, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.timestamp, 'DD')|| /* day */ + ','||TO_CHAR(q.timestamp, 'HH24')|| /* hour */ + ','||TO_CHAR(q.timestamp, 'MI')|| /* minute */ + ','||TO_CHAR(q.timestamp, 'SS')|| /* second */ + ')'|| + ','||num_format(q.top_01, 3)|| + ','||num_format(q.top_02, 3)|| + ','||num_format(q.top_03, 3)|| + ','||num_format(q.top_04, 3)|| + ','||num_format(q.top_05, 3)|| + ','||num_format(q.top_06, 3)|| + ','||num_format(q.top_07, 3)|| + ','||num_format(q.top_08, 3)|| + ','||num_format(q.top_09, 3)|| + ','||num_format(q.top_10, 3)|| + ','||num_format(q.top_11, 3)|| + ','||num_format(q.top_12, 3)|| + ','||num_format(q.top_13, 3)|| + ','||num_format(q.top_14, 3)|| + ','||num_format(q.others, 3)|| + ']' + FROM my_query q + ORDER BY + q.timestamp +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_top_pdb_size_chart.sql b/csierra/cs_top_pdb_size_chart.sql new file mode 100644 index 0000000..9e0fc67 --- /dev/null +++ b/csierra/cs_top_pdb_size_chart.sql @@ -0,0 +1,200 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_pdb_size_chart.sql +-- +-- Purpose: Top PDB Disk Size Utilization (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/01/19 +-- +-- Usage: Execute connected to CDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_pdb_size_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_pdb_size_chart'; +DEF cs_hours_range_default = '4320'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(snap_time)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_tablespaces +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "Top PDBs in terms of Allocated Disk Space between &&cs_sample_time_from. and &&cs_sample_time_to. UTC"; +DEF chart_title = "&&report_title."; +DEF xaxis_title = ""; +--DEF vaxis_title = "Gibibytes (GiB)"; +DEF vaxis_title = "Gigabytes (GBs)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&baseline., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF vaxis_viewwindow = ", viewWindow: {min:0}"; +DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +DEF top_01 = ""; +DEF top_02 = ""; +DEF top_03 = ""; +DEF top_04 = ""; +DEF top_05 = ""; +DEF top_06 = ""; +DEF top_08 = ""; +DEF top_09 = ""; +DEF top_10 = ""; +DEF others = "OTHERS"; +-- +COL top_01 NEW_V top_01 NOPRI; +COL top_02 NEW_V top_02 NOPRI; +COL top_03 NEW_V top_03 NOPRI; +COL top_04 NEW_V top_04 NOPRI; +COL top_05 NEW_V top_05 NOPRI; +COL top_06 NEW_V top_06 NOPRI; +COL top_07 NEW_V top_07 NOPRI; +COL top_08 NEW_V top_08 NOPRI; +COL top_09 NEW_V top_09 NOPRI; +COL top_10 NEW_V top_10 NOPRI; +COL others NEW_V others NOPRI; +-- +WITH +pdb AS ( +SELECT pdb_name, + ROW_NUMBER() OVER (ORDER BY SUM(allocated_bytes) DESC) AS rn + FROM &&cs_tools_schema..dbc_tablespaces + WHERE snap_time = (SELECT MAX(snap_time) FROM &&cs_tools_schema..dbc_tablespaces WHERE snap_time >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND snap_time < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) + AND pdb_name <> 'CDB$ROOT' + GROUP BY + pdb_name +) +SELECT MAX(CASE rn WHEN 1 THEN pdb_name END) AS top_01, + MAX(CASE rn WHEN 2 THEN pdb_name END) AS top_02, + MAX(CASE rn WHEN 3 THEN pdb_name END) AS top_03, + MAX(CASE rn WHEN 4 THEN pdb_name END) AS top_04, + MAX(CASE rn WHEN 5 THEN pdb_name END) AS top_05, + MAX(CASE rn WHEN 6 THEN pdb_name END) AS top_06, + MAX(CASE rn WHEN 7 THEN pdb_name END) AS top_07, + MAX(CASE rn WHEN 8 THEN pdb_name END) AS top_08, + MAX(CASE rn WHEN 9 THEN pdb_name END) AS top_09, + MAX(CASE rn WHEN 10 THEN pdb_name END) AS top_10, + CASE WHEN COUNT(*) > 10 THEN (COUNT(*) - 10)||' OTHERS' END AS others + FROM pdb +/ +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&top_01.', id:'01', type:'number'} +PRO ,{label:'&&top_02.', id:'02', type:'number'} +PRO ,{label:'&&top_03.', id:'03', type:'number'} +PRO ,{label:'&&top_04.', id:'04', type:'number'} +PRO ,{label:'&&top_05.', id:'05', type:'number'} +PRO ,{label:'&&top_06.', id:'06', type:'number'} +PRO ,{label:'&&top_07.', id:'07', type:'number'} +PRO ,{label:'&&top_08.', id:'08', type:'number'} +PRO ,{label:'&&top_09.', id:'09', type:'number'} +PRO ,{label:'&&top_10.', id:'10', type:'number'} +PRO ,{label:'&&others.', id:'11', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +my_query AS ( +SELECT snap_time, + ROUND(SUM(CASE pdb_name WHEN '&&top_01.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_01, + ROUND(SUM(CASE pdb_name WHEN '&&top_02.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_02, + ROUND(SUM(CASE pdb_name WHEN '&&top_03.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_03, + ROUND(SUM(CASE pdb_name WHEN '&&top_04.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_04, + ROUND(SUM(CASE pdb_name WHEN '&&top_05.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_05, + ROUND(SUM(CASE pdb_name WHEN '&&top_06.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_06, + ROUND(SUM(CASE pdb_name WHEN '&&top_07.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_07, + ROUND(SUM(CASE pdb_name WHEN '&&top_08.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_08, + ROUND(SUM(CASE pdb_name WHEN '&&top_09.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_09, + ROUND(SUM(CASE pdb_name WHEN '&&top_10.' THEN allocated_bytes ELSE 0 END) / POWER(10,9)) AS top_10, + ROUND(SUM(CASE WHEN pdb_name IN ('&&top_01.', '&&top_02.', '&&top_03.', '&&top_04.', '&&top_05.', '&&top_06.', '&&top_07.', '&&top_08.', '&&top_09.', '&&top_10.') THEN 0 ELSE allocated_bytes END) / POWER(10,9)) AS others + FROM &&cs_tools_schema..dbc_tablespaces + WHERE snap_time >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND snap_time < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + GROUP BY + snap_time +) +SELECT ', [new Date('|| + TO_CHAR(q.snap_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.snap_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.snap_time, 'DD')|| /* day */ + ','||TO_CHAR(q.snap_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.snap_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.snap_time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.top_01, 3)|| + ','||num_format(q.top_02, 3)|| + ','||num_format(q.top_03, 3)|| + ','||num_format(q.top_04, 3)|| + ','||num_format(q.top_05, 3)|| + ','||num_format(q.top_06, 3)|| + ','||num_format(q.top_07, 3)|| + ','||num_format(q.top_08, 3)|| + ','||num_format(q.top_09, 3)|| + ','||num_format(q.top_10, 3)|| + ','||num_format(q.others, 3)|| + ']' + FROM my_query q + ORDER BY + q.snap_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_top_pdb_tps_chart.sql b/csierra/cs_top_pdb_tps_chart.sql new file mode 100644 index 0000000..5018e26 --- /dev/null +++ b/csierra/cs_top_pdb_tps_chart.sql @@ -0,0 +1,361 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_pdb_tps_chart.sql +-- +-- Purpose: Top PDBs as per TPS (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/07/26 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_pdb_tps_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_pdb_tps_chart'; +DEF cs_hours_range_default = '168'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(timestamp)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_pdbs +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "Top PDBs as per their TPS between &&cs_sample_time_from. and &&cs_sample_time_to. UTC"; +DEF chart_title = "&&report_title."; +DEF xaxis_title = ""; +DEF vaxis_title = "Transactions per Second (TPS)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&baseline., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF vaxis_viewwindow = ", viewWindow: {min:0}"; +DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +DEF spool_id_chart_footer_script = 'cs_top_14_footer.sql'; +-- +DEF top_01 = ""; +DEF top_02 = ""; +DEF top_03 = ""; +DEF top_04 = ""; +DEF top_05 = ""; +DEF top_06 = ""; +DEF top_08 = ""; +DEF top_09 = ""; +DEF top_10 = ""; +DEF top_11 = ""; +DEF top_12 = ""; +DEF top_13 = ""; +DEF top_14 = ""; +DEF others = "OTHER PDBS"; +-- +DEF value_01 = ""; +DEF value_02 = ""; +DEF value_03 = ""; +DEF value_04 = ""; +DEF value_05 = ""; +DEF value_06 = ""; +DEF value_08 = ""; +DEF value_09 = ""; +DEF value_10 = ""; +DEF value_11 = ""; +DEF value_12 = ""; +DEF value_13 = ""; +DEF value_14 = ""; +DEF value_others = "OTHER PDBS"; +-- +COL top_01 NEW_V top_01 FOR A30 TRUNC NOPRI; +COL top_02 NEW_V top_02 FOR A30 TRUNC NOPRI; +COL top_03 NEW_V top_03 FOR A30 TRUNC NOPRI; +COL top_04 NEW_V top_04 FOR A30 TRUNC NOPRI; +COL top_05 NEW_V top_05 FOR A30 TRUNC NOPRI; +COL top_06 NEW_V top_06 FOR A30 TRUNC NOPRI; +COL top_07 NEW_V top_07 FOR A30 TRUNC NOPRI; +COL top_08 NEW_V top_08 FOR A30 TRUNC NOPRI; +COL top_09 NEW_V top_09 FOR A30 TRUNC NOPRI; +COL top_10 NEW_V top_10 FOR A30 TRUNC NOPRI; +COL top_11 NEW_V top_11 FOR A30 TRUNC NOPRI; +COL top_12 NEW_V top_12 FOR A30 TRUNC NOPRI; +COL top_13 NEW_V top_13 FOR A30 TRUNC NOPRI; +COL top_14 NEW_V top_14 FOR A30 TRUNC NOPRI; +COL others NEW_V others FOR A30 TRUNC NOPRI; +-- +COL value_01 NEW_V value_01 FOR A10 TRUNC NOPRI; +COL value_02 NEW_V value_02 FOR A10 TRUNC NOPRI; +COL value_03 NEW_V value_03 FOR A10 TRUNC NOPRI; +COL value_04 NEW_V value_04 FOR A10 TRUNC NOPRI; +COL value_05 NEW_V value_05 FOR A10 TRUNC NOPRI; +COL value_06 NEW_V value_06 FOR A10 TRUNC NOPRI; +COL value_07 NEW_V value_07 FOR A10 TRUNC NOPRI; +COL value_08 NEW_V value_08 FOR A10 TRUNC NOPRI; +COL value_09 NEW_V value_09 FOR A10 TRUNC NOPRI; +COL value_10 NEW_V value_10 FOR A10 TRUNC NOPRI; +COL value_11 NEW_V value_11 FOR A10 TRUNC NOPRI; +COL value_12 NEW_V value_12 FOR A10 TRUNC NOPRI; +COL value_13 NEW_V value_13 FOR A10 TRUNC NOPRI; +COL value_14 NEW_V value_14 FOR A10 TRUNC NOPRI; +COL value_others NEW_V value_others FOR A10 TRUNC NOPRI; +-- +-- WITH +-- pdb AS ( +-- SELECT /*+ MATERIALIZE NO_MERGE */ +-- c.name AS pdb_name, +-- ROW_NUMBER() OVER (ORDER BY COUNT(DISTINCT h.xid) DESC) rn +-- FROM dba_hist_active_sess_history h, v$containers c +-- WHERE h.dbid = TO_NUMBER('&&cs_dbid.') +-- AND h.instance_number = TO_NUMBER('&&cs_instance_number.') +-- AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') +-- AND xid IS NOT NULL +-- AND c.con_id = h.con_id +-- GROUP BY +-- c.name +-- ) +-- SELECT MAX(CASE rn WHEN 1 THEN pdb_name END) AS top_01, +-- MAX(CASE rn WHEN 2 THEN pdb_name END) AS top_02, +-- MAX(CASE rn WHEN 3 THEN pdb_name END) AS top_03, +-- MAX(CASE rn WHEN 4 THEN pdb_name END) AS top_04, +-- MAX(CASE rn WHEN 5 THEN pdb_name END) AS top_05, +-- MAX(CASE rn WHEN 6 THEN pdb_name END) AS top_06, +-- MAX(CASE rn WHEN 7 THEN pdb_name END) AS top_07, +-- MAX(CASE rn WHEN 8 THEN pdb_name END) AS top_08, +-- MAX(CASE rn WHEN 9 THEN pdb_name END) AS top_09, +-- MAX(CASE rn WHEN 10 THEN pdb_name END) AS top_10, +-- MAX(CASE rn WHEN 11 THEN pdb_name END) AS top_11, +-- MAX(CASE rn WHEN 12 THEN pdb_name END) AS top_12, +-- MAX(CASE rn WHEN 13 THEN pdb_name END) AS top_13, +-- MAX(CASE rn WHEN 14 THEN pdb_name END) AS top_14, +-- CASE WHEN COUNT(*) > 15 THEN (COUNT(*) - 15)||' OTHER PDBS' END AS others +-- FROM pdb +-- / +-- +WITH +pdb AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_id, + c.name, + COUNT(DISTINCT h.xid) / SUM(COUNT(DISTINCT h.xid)) OVER (PARTITION BY h.snap_id) AS contribution, + COUNT(DISTINCT snap_id) OVER () AS snaps + FROM dba_hist_active_sess_history h, v$containers c + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND xid IS NOT NULL + AND c.con_id = h.con_id + AND ROWNUM >= 1 + GROUP BY + h.snap_id, + c.name +), +tps AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_id, + h.end_time AS time, + h.average + FROM dba_hist_sysmetric_summary h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.group_id = 2 + AND h.metric_name = 'User Transaction Per Sec' + AND ROWNUM >= 1 +), +tps_per_pdb AS ( +SELECT pdb.name AS pdb_name, + SUM(pdb.contribution * tps.average) / MAX(pdb.snaps) tps, + ROW_NUMBER() OVER (ORDER BY SUM(pdb.contribution * tps.average) / MAX(pdb.snaps) DESC) rn + FROM pdb, tps + WHERE tps.snap_id = pdb.snap_id + GROUP BY + pdb.name +) +SELECT MAX(CASE rn WHEN 1 THEN pdb_name END) AS top_01, + MAX(CASE rn WHEN 2 THEN pdb_name END) AS top_02, + MAX(CASE rn WHEN 3 THEN pdb_name END) AS top_03, + MAX(CASE rn WHEN 4 THEN pdb_name END) AS top_04, + MAX(CASE rn WHEN 5 THEN pdb_name END) AS top_05, + MAX(CASE rn WHEN 6 THEN pdb_name END) AS top_06, + MAX(CASE rn WHEN 7 THEN pdb_name END) AS top_07, + MAX(CASE rn WHEN 8 THEN pdb_name END) AS top_08, + MAX(CASE rn WHEN 9 THEN pdb_name END) AS top_09, + MAX(CASE rn WHEN 10 THEN pdb_name END) AS top_10, + MAX(CASE rn WHEN 11 THEN pdb_name END) AS top_11, + MAX(CASE rn WHEN 12 THEN pdb_name END) AS top_12, + MAX(CASE rn WHEN 13 THEN pdb_name END) AS top_13, + MAX(CASE rn WHEN 14 THEN pdb_name END) AS top_14, + CASE WHEN COUNT(*) > 15 THEN (COUNT(*) - 15)||' OTHER PDBS' END AS others, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 1 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_01, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 2 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_02, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 3 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_03, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 4 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_04, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 5 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_05, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 6 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_06, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 7 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_07, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 8 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_08, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 9 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_09, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 10 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_10, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 11 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_11, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 12 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_12, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 13 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_13, + LPAD(TO_CHAR(ROUND(SUM(CASE rn WHEN 14 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_14, + LPAD(TO_CHAR(ROUND(SUM(CASE WHEN rn > 14 THEN tps END), 1), '999,990.0'), 10, ' ') AS value_others + FROM tps_per_pdb +/ +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&top_01.', id:'01', type:'number'} +PRO ,{label:'&&top_02.', id:'02', type:'number'} +PRO ,{label:'&&top_03.', id:'03', type:'number'} +PRO ,{label:'&&top_04.', id:'04', type:'number'} +PRO ,{label:'&&top_05.', id:'05', type:'number'} +PRO ,{label:'&&top_06.', id:'06', type:'number'} +PRO ,{label:'&&top_07.', id:'07', type:'number'} +PRO ,{label:'&&top_08.', id:'08', type:'number'} +PRO ,{label:'&&top_09.', id:'09', type:'number'} +PRO ,{label:'&&top_10.', id:'10', type:'number'} +PRO ,{label:'&&top_11.', id:'11', type:'number'} +PRO ,{label:'&&top_12.', id:'12', type:'number'} +PRO ,{label:'&&top_13.', id:'13', type:'number'} +PRO ,{label:'&&top_14.', id:'14', type:'number'} +PRO ,{label:'&&others.', id:'99', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +pdb AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_id, + c.name, + COUNT(DISTINCT h.xid) / SUM(COUNT(DISTINCT h.xid)) OVER (PARTITION BY h.snap_id) AS contribution + FROM dba_hist_active_sess_history h, v$containers c + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND xid IS NOT NULL + AND c.con_id = h.con_id + AND ROWNUM >= 1 + GROUP BY + h.snap_id, + c.name +), +tps AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + h.snap_id, + h.end_time AS time, + h.average + FROM dba_hist_sysmetric_summary h + WHERE h.dbid = TO_NUMBER('&&cs_dbid.') + AND h.instance_number = TO_NUMBER('&&cs_instance_number.') + AND h.snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND h.group_id = 2 + AND h.metric_name = 'User Transaction Per Sec' + AND ROWNUM >= 1 +), +my_query AS ( +SELECT tps.time, + ROUND(SUM(CASE pdb.name WHEN '&&top_01.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_01, + ROUND(SUM(CASE pdb.name WHEN '&&top_02.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_02, + ROUND(SUM(CASE pdb.name WHEN '&&top_03.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_03, + ROUND(SUM(CASE pdb.name WHEN '&&top_04.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_04, + ROUND(SUM(CASE pdb.name WHEN '&&top_05.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_05, + ROUND(SUM(CASE pdb.name WHEN '&&top_06.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_06, + ROUND(SUM(CASE pdb.name WHEN '&&top_07.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_07, + ROUND(SUM(CASE pdb.name WHEN '&&top_08.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_08, + ROUND(SUM(CASE pdb.name WHEN '&&top_09.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_09, + ROUND(SUM(CASE pdb.name WHEN '&&top_10.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_10, + ROUND(SUM(CASE pdb.name WHEN '&&top_11.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_11, + ROUND(SUM(CASE pdb.name WHEN '&&top_12.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_12, + ROUND(SUM(CASE pdb.name WHEN '&&top_13.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_13, + ROUND(SUM(CASE pdb.name WHEN '&&top_14.' THEN pdb.contribution * tps.average ELSE 0 END), 3) AS top_14, + ROUND(SUM(CASE WHEN pdb.name IN ('&&top_01.', '&&top_02.', '&&top_03.', '&&top_04.', '&&top_05.', '&&top_06.', '&&top_07.', '&&top_08.', '&&top_09.', '&&top_10.', '&&top_11.', '&&top_12.', '&&top_13.', '&&top_14.') THEN 0 ELSE pdb.contribution * tps.average END), 3) AS others + FROM pdb, tps + WHERE tps.snap_id = pdb.snap_id + GROUP BY + tps.time +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.top_01, 3)|| + ','||num_format(q.top_02, 3)|| + ','||num_format(q.top_03, 3)|| + ','||num_format(q.top_04, 3)|| + ','||num_format(q.top_05, 3)|| + ','||num_format(q.top_06, 3)|| + ','||num_format(q.top_07, 3)|| + ','||num_format(q.top_08, 3)|| + ','||num_format(q.top_09, 3)|| + ','||num_format(q.top_10, 3)|| + ','||num_format(q.top_11, 3)|| + ','||num_format(q.top_12, 3)|| + ','||num_format(q.top_13, 3)|| + ','||num_format(q.top_14, 3)|| + ','||num_format(q.others, 3)|| + ']' + FROM my_query q + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_top_range.sql b/csierra/cs_top_range.sql new file mode 100644 index 0000000..80d59d1 --- /dev/null +++ b/csierra/cs_top_range.sql @@ -0,0 +1,54 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_range.sql +-- +-- Purpose: Top Active SQL as per Active Sessions History ASH - time range +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/08/17 +-- +-- Usage: Execute connected to PDB or CDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_range.sql +-- +-- Notes: *** Requires Oracle Diagnostics Pack License *** +-- +-- Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_range'; +DEF cs_script_acronym = 'tr.sql | '; +-- +DEF cs_top = '30'; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF cs_hours_range_default = '1'; +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +@@cs_internal/cs_spool_id.sql +-- +@@cs_internal/cs_spool_id_sample_time.sql +-- +@@cs_internal/cs_top_activity_internal_range.sql +@@cs_internal/cs_top_internal_foot.sql +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_top_segments.sql b/csierra/cs_top_segments.sql new file mode 100644 index 0000000..37fb6b0 --- /dev/null +++ b/csierra/cs_top_segments.sql @@ -0,0 +1,105 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_segments.sql +-- +-- Purpose: Top CDB or PDB Segments (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_segments.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +DEF top_segments = '30'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_segments'; +-- +SELECT DISTINCT tablespace_name + FROM cdb_tablespaces + ORDER BY 1 +/ +PRO +PRO 1. Enter Tablespace Name (opt): +DEF cs2_tablespace_name = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.'||CASE WHEN '&&cs2_tablespace_name.' IS NOT NULL THEN '_&&cs2_tablespace_name.' END AS cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql &&cs2_tablespace_name. +@@cs_internal/cs_spool_id.sql +-- +PRO TABLESPACE : "&&cs2_tablespace_name." +-- +COL rn FOR A5 HEA 'TOP#'; +COL owner FOR A30; +COL segment_name FOR A30; +COL partition_name FOR A30; +COL mbs FOR 999,990; +COL gb FOR 99,990.000 HEA 'SEGMENT|GB'; +COL table_name FOR A30; +COL column_name FOR A30; +COL tablespace_name FOR A30; +COL pdb_name FOR A35; +COL securefile FOR A6 HEA 'SECURE|FILE'; +COL segment_space_management FOR A10 HEA 'SEGMENT|SPACE|MANAGEMENT'; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF gb ON REPORT; +-- +PRO +PRO TOP &&top_segments. SEGMENTS (CDB_SEGMENTS) +PRO ~~~~~~~~~~~~~~~ +SELECT LPAD(ROW_NUMBER() OVER (ORDER BY s.bytes DESC, s.owner, s.segment_name, s.partition_name), LENGTH('&&top_segments.'), '0') AS rn, + s.bytes / POWER(10, 9) AS gb, + s.owner, s.segment_name, s.partition_name, + CASE WHEN s.segment_type = 'LOBSEGMENT' THEN 'LOB' ELSE s.segment_type END AS segment_type, + COALESCE(l.table_name, i.table_name) AS table_name, + l.column_name, + l.securefile, + s.tablespace_name, + t.segment_space_management, + c.name||'('||s.con_id||')' AS pdb_name + FROM cdb_segments s, + cdb_tablespaces t, + cdb_lobs l, + cdb_indexes i, + v$containers c + WHERE s.tablespace_name = COALESCE('&&cs2_tablespace_name.', s.tablespace_name) + AND t.con_id = s.con_id + AND t.tablespace_name = s.tablespace_name + AND l.con_id(+) = s.con_id + AND l.owner(+) = s.owner + AND l.segment_name(+) = s.segment_name + AND i.con_id(+) = s.con_id + AND i.owner(+) = s.owner + AND i.index_name(+) = s.segment_name + AND c.con_id = s.con_id + AND c.open_mode = 'READ WRITE' + ORDER BY + s.bytes DESC, s.owner, s.segment_name, s.partition_name + FETCH FIRST &&top_segments. ROWS ONLY +/ +-- +CLEAR BREAK COMPUTE; +-- +PRO +PRO SQL> @&&cs_script_name..sql &&cs2_tablespace_name. +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_top_segments_pdb.sql b/csierra/cs_top_segments_pdb.sql new file mode 100644 index 0000000..10cd3be --- /dev/null +++ b/csierra/cs_top_segments_pdb.sql @@ -0,0 +1,385 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_segments_pdb.sql +-- +-- Purpose: Top PDB Segments (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_segments_pdb.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +DEF top_segments = '30'; +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_segments_pdb'; +-- +SELECT tablespace_name + FROM dba_tablespaces + ORDER BY 1 +/ +PRO +PRO 1. Enter Tablespace Name (opt): +DEF cs2_tablespace_name = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.'||CASE WHEN '&&cs2_tablespace_name.' IS NOT NULL THEN '_&&cs2_tablespace_name.' END AS cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql &&cs2_tablespace_name. +@@cs_internal/cs_spool_id.sql +-- +PRO TABLESPACE : "&&cs2_tablespace_name." +-- +COL rn FOR A5 HEA 'TOP#'; +COL owner FOR A30; +COL segment_name FOR A30; +COL partition_name FOR A30; +COL mbs FOR 999,990; +COL gb FOR 99,990.000 HEA 'SEGMENT|GB'; +COL table_name FOR A30; +COL column_name FOR A30; +COL tablespace_name FOR A30; +COL securefile FOR A6 HEA 'SECURE|FILE'; +COL segment_space_management FOR A10 HEA 'SEGMENT|SPACE|MANAGEMENT'; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF gb ON REPORT; +-- +PRO +PRO TOP &&top_segments. SEGMENTS (DBA_SEGMENTS) +PRO ~~~~~~~~~~~~~~~ +SELECT LPAD(ROW_NUMBER() OVER (ORDER BY s.bytes DESC, s.owner, s.segment_name, s.partition_name), LENGTH('&&top_segments.'), '0') AS rn, + s.bytes / POWER(10, 9) AS gb, + s.owner, s.segment_name, s.partition_name, + CASE WHEN s.segment_type = 'LOBSEGMENT' THEN 'LOB' ELSE s.segment_type END AS segment_type, + COALESCE(l.table_name, i.table_name) AS table_name, + l.column_name, + l.securefile, + s.tablespace_name, + t.segment_space_management + FROM dba_segments s, + dba_tablespaces t, + dba_lobs l, + dba_indexes i + WHERE s.tablespace_name = COALESCE('&&cs2_tablespace_name.', s.tablespace_name) + AND t.tablespace_name = s.tablespace_name + AND l.owner(+) = s.owner + AND l.segment_name(+) = s.segment_name + AND i.owner(+) = s.owner + AND i.index_name(+) = s.segment_name + ORDER BY + s.bytes DESC, s.owner, s.segment_name, s.partition_name + FETCH FIRST &&top_segments. ROWS ONLY +/ +-- +COL unformatted_gb FOR 99,990.000 HEA 'UNFORMATTED|GB'; +COL formatted_gb FOR 99,990.000 HEA 'FORMATTED|GB'; +COL fs1_gb FOR 99,990.000 HEA '0-25% FREE|GB (FS1)'; +COL fs2_gb FOR 99,990.000 HEA '25-50% FREE|GB (FS2)'; +COL fs3_gb FOR 99,990.000 HEA '50-75% FREE|GB (FS3)'; +COL fs4_gb FOR 99,990.000 HEA '75-100% FREE|GB (FS4)'; +COL full_gb FOR 99,990.000 HEA 'FULL|GB'; +COL free_gb FOR 99,990.000 HEA 'FREE GB|(ESTIMATED)'; +-- +COMPUTE SUM LABEL 'TOTAL' OF gb unformatted_gb formatted_gb fs1_gb fs2_gb fs3_gb fs4_gb full_gb free_gb ON REPORT; +-- +PRO +PRO TOP &&top_segments. SEGMENTS (DBMS_SPACE.space_usage i.e. below HWM) ASSM Tablespaces, excluding SECUREFILE LOBs +PRO ~~~~~~~~~~~~~~~ +WITH +FUNCTION space_usage (p_segment_owner IN VARCHAR2, p_segment_name IN VARCHAR2, p_segment_type IN VARCHAR2, p_bytes_type IN VARCHAR2, p_partition_name IN VARCHAR2 DEFAULT NULL) +RETURN NUMBER +IS + l_unformatted_blocks NUMBER; + l_unformatted_bytes NUMBER; + l_fs1_blocks NUMBER; + l_fs1_bytes NUMBER; + l_fs2_blocks NUMBER; + l_fs2_bytes NUMBER; + l_fs3_blocks NUMBER; + l_fs3_bytes NUMBER; + l_fs4_blocks NUMBER; + l_fs4_bytes NUMBER; + l_full_blocks NUMBER; + l_full_bytes NUMBER; +BEGIN + DBMS_SPACE.space_usage( + segment_owner => p_segment_owner , + segment_name => p_segment_name , + segment_type => p_segment_type , + unformatted_blocks => l_unformatted_blocks, + unformatted_bytes => l_unformatted_bytes , + fs1_blocks => l_fs1_blocks , + fs1_bytes => l_fs1_bytes , + fs2_blocks => l_fs2_blocks , + fs2_bytes => l_fs2_bytes , + fs3_blocks => l_fs3_blocks , + fs3_bytes => l_fs3_bytes , + fs4_blocks => l_fs4_blocks , + fs4_bytes => l_fs4_bytes , + full_blocks => l_full_blocks , + full_bytes => l_full_bytes , + partition_name => p_partition_name + ); + IF p_bytes_type = 'UNFORMATTED' THEN RETURN l_unformatted_bytes; END IF; + IF p_bytes_type = 'FS1' THEN RETURN l_fs1_bytes; END IF; + IF p_bytes_type = 'FS2' THEN RETURN l_fs2_bytes; END IF; + IF p_bytes_type = 'FS3' THEN RETURN l_fs3_bytes; END IF; + IF p_bytes_type = 'FS4' THEN RETURN l_fs4_bytes; END IF; + IF p_bytes_type = 'FULL' THEN RETURN l_full_bytes; END IF; + RETURN NULL; +END space_usage; +top_segments AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + LPAD(ROW_NUMBER() OVER (ORDER BY s.bytes DESC, s.owner, s.segment_name, s.partition_name), LENGTH('&&top_segments.'), '0') AS rn, + s.bytes / POWER(10, 9) AS gb, + s.owner, s.segment_name, s.partition_name, + CASE WHEN s.segment_type = 'LOBSEGMENT' THEN 'LOB' ELSE s.segment_type END AS segment_type, + COALESCE(l.table_name, i.table_name) AS table_name, + l.column_name, + l.securefile, + s.tablespace_name, + t.segment_space_management + FROM dba_segments s, + dba_tablespaces t, + dba_lobs l, + dba_indexes i + WHERE s.tablespace_name = COALESCE('&&cs2_tablespace_name.', s.tablespace_name) + AND t.tablespace_name = s.tablespace_name + AND l.owner(+) = s.owner + AND l.segment_name(+) = s.segment_name + AND i.owner(+) = s.owner + AND i.index_name(+) = s.segment_name + ORDER BY + s.bytes DESC, s.owner, s.segment_name, s.partition_name + FETCH FIRST &&top_segments. ROWS ONLY +), +top_segments_extended AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, + gb, + space_usage(owner, segment_name, segment_type, 'UNFORMATTED', partition_name) AS unformatted_bytes, + space_usage(owner, segment_name, segment_type, 'FS1', partition_name) AS fs1_bytes, + space_usage(owner, segment_name, segment_type, 'FS2', partition_name) AS fs2_bytes, + space_usage(owner, segment_name, segment_type, 'FS3', partition_name) AS fs3_bytes, + space_usage(owner, segment_name, segment_type, 'FS4', partition_name) AS fs4_bytes, + space_usage(owner, segment_name, segment_type, 'FULL', partition_name) AS full_bytes, + owner, segment_name, partition_name, segment_type, table_name, column_name, securefile, tablespace_name, segment_space_management + FROM top_segments + WHERE segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION', 'INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION', 'CLUSTER', 'LOB', 'LOB PARTITION', 'LOB SUBPARTITION') + AND segment_space_management = 'AUTO' + AND (securefile IS NULL OR securefile = 'NO') +) +SELECT rn, + gb, + unformatted_bytes / POWER(10, 9) AS unformatted_gb, + (fs1_bytes + fs2_bytes + fs3_bytes + fs4_bytes + full_bytes) / POWER(10, 9) AS formatted_gb, + fs1_bytes / POWER(10, 9) AS fs1_gb, + fs2_bytes / POWER(10, 9) AS fs2_gb, + fs3_bytes / POWER(10, 9) AS fs3_gb, + fs4_bytes / POWER(10, 9) AS fs4_gb, + full_bytes / POWER(10, 9) AS full_gb, + (unformatted_bytes + (fs1_bytes * 0.125) + (fs2_bytes * 0.375) + (fs3_bytes * 0.625) + (fs4_bytes * 0.875)) / POWER(10, 9) AS free_gb, + owner, segment_name, partition_name, segment_type, table_name, column_name, securefile, tablespace_name, segment_space_management + FROM top_segments_extended +/ +-- +COL segment_size_gb FOR 99,990.000 HEA 'SIZE|GB'; +COL used_gb FOR 99,990.000 HEA 'USED|GB'; +COL expired_gb FOR 99,990.000 HEA 'FREE GB|EXPIRED'; +COL unexpired_gb FOR 99,990.000 HEA 'FREE GB|UNEXPIRED'; +COL free_gb FOR 99,990.000 HEA 'FREE GB'; +COL used_plus_free_gb FOR 99,990.000 HEA 'USED+FREE|GB'; +-- +COMPUTE SUM LABEL 'TOTAL' OF gb segment_size_gb used_gb expired_gb unexpired_gb free_gb used_plus_free_gb ON REPORT; +-- +PRO +PRO TOP &&top_segments. SEGMENTS (DBMS_SPACE.space_usage i.e. below HWM) SECUREFILE LOBs on ASSM Tablespaces +PRO ~~~~~~~~~~~~~~~ +WITH +FUNCTION space_usage (p_segment_owner IN VARCHAR2, p_segment_name IN VARCHAR2, p_segment_type IN VARCHAR2, p_bytes_type IN VARCHAR2, p_partition_name IN VARCHAR2 DEFAULT NULL) +RETURN NUMBER +IS + l_segment_size_blocks NUMBER; + l_segment_size_bytes NUMBER; + l_used_blocks NUMBER; + l_used_bytes NUMBER; + l_expired_blocks NUMBER; + l_expired_bytes NUMBER; + l_unexpired_blocks NUMBER; + l_unexpired_bytes NUMBER; +BEGIN + DBMS_SPACE.space_usage( + segment_owner => p_segment_owner , + segment_name => p_segment_name , + segment_type => p_segment_type , + segment_size_blocks => l_segment_size_blocks, + segment_size_bytes => l_segment_size_bytes , + used_blocks => l_used_blocks , + used_bytes => l_used_bytes , + expired_blocks => l_expired_blocks , + expired_bytes => l_expired_bytes , + unexpired_blocks => l_unexpired_blocks , + unexpired_bytes => l_unexpired_bytes , + partition_name => p_partition_name + ); + IF p_bytes_type = 'SEGMENT_SIZE' THEN RETURN l_segment_size_bytes; END IF; + IF p_bytes_type = 'USED' THEN RETURN l_used_bytes; END IF; + IF p_bytes_type = 'EXPIRED' THEN RETURN l_expired_bytes; END IF; + IF p_bytes_type = 'UNEXPIRED' THEN RETURN l_unexpired_bytes; END IF; + RETURN NULL; +END space_usage; +top_segments AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + LPAD(ROW_NUMBER() OVER (ORDER BY s.bytes DESC, s.owner, s.segment_name, s.partition_name), LENGTH('&&top_segments.'), '0') AS rn, + s.bytes / POWER(10, 9) AS gb, + s.owner, s.segment_name, s.partition_name, + CASE WHEN s.segment_type = 'LOBSEGMENT' THEN 'LOB' ELSE s.segment_type END AS segment_type, + COALESCE(l.table_name, i.table_name) AS table_name, + l.column_name, + l.securefile, + s.tablespace_name, + t.segment_space_management + FROM dba_segments s, + dba_tablespaces t, + dba_lobs l, + dba_indexes i + WHERE s.tablespace_name = COALESCE('&&cs2_tablespace_name.', s.tablespace_name) + AND t.tablespace_name = s.tablespace_name + AND l.owner(+) = s.owner + AND l.segment_name(+) = s.segment_name + AND i.owner(+) = s.owner + AND i.index_name(+) = s.segment_name + ORDER BY + s.bytes DESC, s.owner, s.segment_name, s.partition_name + FETCH FIRST &&top_segments. ROWS ONLY +), +top_segments_extended AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, + gb, + space_usage(owner, segment_name, segment_type, 'SEGMENT_SIZE', partition_name) AS segment_size_bytes, + space_usage(owner, segment_name, segment_type, 'USED', partition_name) AS used_bytes, + space_usage(owner, segment_name, segment_type, 'EXPIRED', partition_name) AS expired_bytes, + space_usage(owner, segment_name, segment_type, 'UNEXPIRED', partition_name) AS unexpired_bytes, + owner, segment_name, partition_name, segment_type, table_name, column_name, securefile, tablespace_name, segment_space_management + FROM top_segments + WHERE segment_type IN ('LOB', 'LOB PARTITION', 'LOB SUBPARTITION') + AND segment_space_management = 'AUTO' + AND securefile = 'YES' +) +SELECT rn, + gb, + segment_size_bytes / POWER(10, 9) AS segment_size_gb, + used_bytes / POWER(10, 9) AS used_gb, + expired_bytes / POWER(10, 9) AS expired_gb, + unexpired_bytes / POWER(10, 9) AS unexpired_gb, + (expired_bytes + unexpired_bytes) / POWER(10, 9) AS free_gb, + (used_bytes + expired_bytes + unexpired_bytes) / POWER(10, 9) AS used_plus_free_gb, + owner, segment_name, partition_name, segment_type, table_name, column_name, securefile, tablespace_name, segment_space_management + FROM top_segments_extended +/ +-- +COL total_gb FOR 99,990.000 HEA 'TOTAL|GB'; +COL unused_gb FOR 99,990.000 HEA 'UNUSED|GB'; +-- +COMPUTE SUM LABEL 'TOTAL' OF gb total_gb unused_gb ON REPORT; +-- +PRO +PRO TOP &&top_segments. SEGMENTS (DBMS_SPACE.unused_space i.e. above HWM) +PRO ~~~~~~~~~~~~~~~ +WITH +FUNCTION unused_space (p_segment_owner IN VARCHAR2, p_segment_name IN VARCHAR2, p_segment_type IN VARCHAR2, p_bytes_type IN VARCHAR2, p_partition_name IN VARCHAR2 DEFAULT NULL) +RETURN NUMBER +IS + l_total_blocks NUMBER; + l_total_bytes NUMBER; + l_unused_blocks NUMBER; + l_unused_bytes NUMBER; + l_last_used_extent_file_id NUMBER; + l_last_used_extent_block_id NUMBER; + l_last_used_block NUMBER; +BEGIN + DBMS_SPACE.unused_space( + segment_owner => p_segment_owner , + segment_name => p_segment_name , + segment_type => p_segment_type , + total_blocks => l_total_blocks , + total_bytes => l_total_bytes , + unused_blocks => l_unused_blocks , + unused_bytes => l_unused_bytes , + last_used_extent_file_id => l_last_used_extent_file_id , + last_used_extent_block_id => l_last_used_extent_block_id, + last_used_block => l_last_used_block , + partition_name => p_partition_name + ); + IF p_bytes_type = 'TOTAL' THEN RETURN l_total_bytes; END IF; + IF p_bytes_type = 'UNUSED' THEN RETURN l_unused_bytes; END IF; + RETURN NULL; +END unused_space; +top_segments AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + LPAD(ROW_NUMBER() OVER (ORDER BY s.bytes DESC, s.owner, s.segment_name, s.partition_name), LENGTH('&&top_segments.'), '0') AS rn, + s.bytes / POWER(10, 9) AS gb, + s.owner, s.segment_name, s.partition_name, + CASE WHEN s.segment_type = 'LOBSEGMENT' THEN 'LOB' ELSE s.segment_type END AS segment_type, + COALESCE(l.table_name, i.table_name) AS table_name, + l.column_name, + l.securefile, + s.tablespace_name, + t.segment_space_management + FROM dba_segments s, + dba_tablespaces t, + dba_lobs l, + dba_indexes i + WHERE s.tablespace_name = COALESCE('&&cs2_tablespace_name.', s.tablespace_name) + AND t.tablespace_name = s.tablespace_name + AND l.owner(+) = s.owner + AND l.segment_name(+) = s.segment_name + AND i.owner(+) = s.owner + AND i.index_name(+) = s.segment_name + ORDER BY + s.bytes DESC, s.owner, s.segment_name, s.partition_name + FETCH FIRST &&top_segments. ROWS ONLY +), +top_segments_extended AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + rn, + gb, + unused_space(owner, segment_name, segment_type, 'TOTAL', partition_name) AS total_bytes, + unused_space(owner, segment_name, segment_type, 'UNUSED', partition_name) AS unused_bytes, + owner, segment_name, partition_name, segment_type, table_name, column_name, securefile, tablespace_name, segment_space_management + FROM top_segments + WHERE segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION', 'INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION', 'CLUSTER', 'LOB', 'LOB PARTITION', 'LOB SUBPARTITION') +) +SELECT rn, + gb, + total_bytes / POWER(10, 9) AS total_gb, + unused_bytes / POWER(10, 9) AS unused_gb, + owner, segment_name, partition_name, segment_type, table_name, column_name, securefile, tablespace_name, segment_space_management + FROM top_segments_extended +/ +-- +CLEAR BREAK COMPUTE; +-- +PRO +PRO SQL> @&&cs_script_name..sql &&cs2_tablespace_name. +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_top_table_size_chart.sql b/csierra/cs_top_table_size_chart.sql new file mode 100644 index 0000000..9a9561d --- /dev/null +++ b/csierra/cs_top_table_size_chart.sql @@ -0,0 +1,431 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_table_size_chart.sql +-- +-- Purpose: Top PDB Tables (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/25 +-- +-- Usage: Execute connected to PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_table_size_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_table_size_chart'; +DEF cs_hours_range_default = '4320'; +-- +@@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET "_px_cdb_view_enabled" = FALSE; +-- +COL cs_hours_range_default NEW_V cs_hours_range_default NOPRI; +SELECT TRIM(TO_CHAR(LEAST(TRUNC((SYSDATE - MIN(snap_time)) * 24), TO_NUMBER('&&cs_hours_range_default.')))) AS cs_hours_range_default FROM &&cs_tools_schema..dbc_segments +/ +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = "Top Tables in terms of Used Disk Space between &&cs_sample_time_from. and &&cs_sample_time_to. UTC"; +DEF chart_title = "&&report_title."; +DEF xaxis_title = ""; +--DEF vaxis_title = "Gibibytes (GiB)"; +DEF vaxis_title = "Gigabytes (GB)"; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&baseline., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF vaxis_viewwindow = ", viewWindow: {min:0}"; +DEF chart_foot_note_2 = "
2) "; +DEF chart_foot_note_2 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_3 = ""; +DEF chart_foot_note_4 = ""; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to."'; +-- +DEF top_01 = ""; +DEF top_02 = ""; +DEF top_03 = ""; +DEF top_04 = ""; +DEF top_05 = ""; +DEF top_06 = ""; +DEF top_08 = ""; +DEF top_09 = ""; +DEF top_10 = ""; +DEF others = "OTHERS"; +-- +COL top_01 NEW_V top_01 NOPRI; +COL top_02 NEW_V top_02 NOPRI; +COL top_03 NEW_V top_03 NOPRI; +COL top_04 NEW_V top_04 NOPRI; +COL top_05 NEW_V top_05 NOPRI; +COL top_06 NEW_V top_06 NOPRI; +COL top_07 NEW_V top_07 NOPRI; +COL top_08 NEW_V top_08 NOPRI; +COL top_09 NEW_V top_09 NOPRI; +COL top_10 NEW_V top_10 NOPRI; +COL others NEW_V others NOPRI; +-- +WITH +seg_hist AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + owner, + segment_name, + CASE + WHEN segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION') THEN 'TABLE' + WHEN segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION', 'LOBINDEX') THEN 'INDEX' + WHEN segment_type IN ('LOBSEGMENT', 'LOB PARTITION', 'LOB SUBPARTITION') THEN 'LOB' + END AS segment_type, + snap_time, + SUM(bytes) AS bytes + FROM &&cs_tools_schema..dbc_segments + WHERE snap_time = (SELECT MAX(snap_time) FROM &&cs_tools_schema..dbc_segments WHERE snap_time >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') AND snap_time < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.')) + AND pdb_name = '&&cs_con_name.' + AND segment_name NOT LIKE 'BIN$%==$0' + AND segment_name NOT LIKE 'MLOG$%' + AND segment_name NOT LIKE 'REDEF$%' + AND owner NOT LIKE 'C##%' + AND owner IN (SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ username FROM cdb_users WHERE con_id = &&cs_con_id. AND oracle_maintained = 'N' AND username NOT LIKE 'C##%') + GROUP BY + owner, + segment_name, + CASE + WHEN segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION') THEN 'TABLE' + WHEN segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION', 'LOBINDEX') THEN 'INDEX' + WHEN segment_type IN ('LOBSEGMENT', 'LOB PARTITION', 'LOB SUBPARTITION') THEN 'LOB' + END, + snap_time +), +table_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + owner AS table_owner, + segment_name AS table_name, + snap_time, + SUM(bytes) bytes + FROM seg_hist + WHERE segment_type = 'TABLE' + GROUP BY + owner, + segment_name, + snap_time +), +idx AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + table_owner, + table_name, + owner, + index_name + FROM cdb_indexes + WHERE con_id = &&cs_con_id. +), +indexes_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + i.table_owner, + i.table_name, + h.snap_time, + SUM(h.bytes) bytes + FROM idx i, + seg_hist h + WHERE h.owner = i.owner + AND h.segment_name = i.index_name + AND h.segment_type = 'INDEX' + GROUP BY + i.table_owner, + i.table_name, + h.snap_time +), +lobs_h AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + owner, + table_name, + segment_name + FROM &&cs_tools_schema..dbc_lobs + WHERE pdb_name = '&&cs_con_name.' +), +lobs_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + l.owner AS table_owner, + l.table_name, + h.snap_time, + SUM(h.bytes) bytes + FROM lobs_h l, + seg_hist h + WHERE h.owner = l.owner + AND h.segment_name = l.segment_name + AND h.segment_type = 'LOB' + GROUP BY + l.owner, + l.table_name, + h.snap_time +), +table_plus_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + t.table_owner, + t.table_name, + t.snap_time, + --ROUND((NVL(SUM(t.bytes), 0) + NVL(SUM(i.bytes), 0) + NVL(SUM(l.bytes), 0)) / POWER(2,30), 3) AS gibs, + --ROUND((NVL(SUM(t.bytes), 0) + NVL(SUM(i.bytes), 0) + NVL(SUM(l.bytes), 0)) / POWER(10,9), 3) AS gbs, + ROW_NUMBER() OVER (ORDER BY (NVL(SUM(t.bytes), 0) + NVL(SUM(i.bytes), 0) + NVL(SUM(l.bytes), 0)) DESC) AS rn + FROM table_ts t, + indexes_ts i, + lobs_ts l + WHERE i.table_owner(+) = t.table_owner + AND i.table_name(+) = t.table_name + AND i.snap_time(+) = t.snap_time + AND l.table_owner(+) = t.table_owner + AND l.table_name(+) = t.table_name + AND l.snap_time(+) = t.snap_time + GROUP BY + t.table_owner, + t.table_name, + t.snap_time +) +SELECT MAX(CASE rn WHEN 1 THEN table_name||'('||table_owner||')' END) AS top_01, + MAX(CASE rn WHEN 2 THEN table_name||'('||table_owner||')' END) AS top_02, + MAX(CASE rn WHEN 3 THEN table_name||'('||table_owner||')' END) AS top_03, + MAX(CASE rn WHEN 4 THEN table_name||'('||table_owner||')' END) AS top_04, + MAX(CASE rn WHEN 5 THEN table_name||'('||table_owner||')' END) AS top_05, + MAX(CASE rn WHEN 6 THEN table_name||'('||table_owner||')' END) AS top_06, + MAX(CASE rn WHEN 7 THEN table_name||'('||table_owner||')' END) AS top_07, + MAX(CASE rn WHEN 8 THEN table_name||'('||table_owner||')' END) AS top_08, + MAX(CASE rn WHEN 9 THEN table_name||'('||table_owner||')' END) AS top_09, + MAX(CASE rn WHEN 10 THEN table_name||'('||table_owner||')' END) AS top_10, + CASE WHEN COUNT(*) > 10 THEN (COUNT(*) - 10)||' OTHERS' END AS others + FROM table_plus_ts +/ +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'&&top_01.', id:'01', type:'number'} +PRO ,{label:'&&top_02.', id:'02', type:'number'} +PRO ,{label:'&&top_03.', id:'03', type:'number'} +PRO ,{label:'&&top_04.', id:'04', type:'number'} +PRO ,{label:'&&top_05.', id:'05', type:'number'} +PRO ,{label:'&&top_06.', id:'06', type:'number'} +PRO ,{label:'&&top_07.', id:'07', type:'number'} +PRO ,{label:'&&top_08.', id:'08', type:'number'} +PRO ,{label:'&&top_09.', id:'09', type:'number'} +PRO ,{label:'&&top_10.', id:'10', type:'number'} +PRO ,{label:'&&others.', id:'11', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +seg_hist AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + owner, + segment_name, + CASE + WHEN segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION') THEN 'TABLE' + WHEN segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION', 'LOBINDEX') THEN 'INDEX' + WHEN segment_type IN ('LOBSEGMENT', 'LOB PARTITION', 'LOB SUBPARTITION') THEN 'LOB' + END AS segment_type, + snap_time, + SUM(bytes) AS bytes + FROM &&cs_tools_schema..dbc_segments + WHERE snap_time >= TO_DATE('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND snap_time < TO_DATE('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND pdb_name = '&&cs_con_name.' + AND segment_name NOT LIKE 'BIN$%==$0' + AND segment_name NOT LIKE 'MLOG$%' + AND segment_name NOT LIKE 'REDEF$%' + AND owner NOT LIKE 'C##%' + AND owner IN (SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ username FROM cdb_users WHERE con_id = &&cs_con_id. AND oracle_maintained = 'N' AND username NOT LIKE 'C##%') + GROUP BY + owner, + segment_name, + CASE + WHEN segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION') THEN 'TABLE' + WHEN segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION', 'LOBINDEX') THEN 'INDEX' + WHEN segment_type IN ('LOBSEGMENT', 'LOB PARTITION', 'LOB SUBPARTITION') THEN 'LOB' + END, + snap_time +), +table_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + owner AS table_owner, + segment_name AS table_name, + snap_time, + SUM(bytes) bytes + FROM seg_hist + WHERE segment_type = 'TABLE' + GROUP BY + owner, + segment_name, + snap_time +), +idx AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + table_owner, + table_name, + owner, + index_name + FROM cdb_indexes + WHERE con_id = &&cs_con_id. +), +indexes_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + i.table_owner, + i.table_name, + h.snap_time, + SUM(h.bytes) bytes + FROM idx i, + seg_hist h + WHERE h.owner = i.owner + AND h.segment_name = i.index_name + AND h.segment_type = 'INDEX' + GROUP BY + i.table_owner, + i.table_name, + h.snap_time +), +lobs_h AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT + owner, + table_name, + segment_name + FROM &&cs_tools_schema..dbc_lobs + WHERE pdb_name = '&&cs_con_name.' +), +lobs_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + l.owner AS table_owner, + l.table_name, + h.snap_time, + SUM(h.bytes) bytes + FROM lobs_h l, + seg_hist h + WHERE h.owner = l.owner + AND h.segment_name = l.segment_name + AND h.segment_type = 'LOB' + GROUP BY + l.owner, + l.table_name, + h.snap_time +), +table_plus_ts AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + t.table_owner, + t.table_name, + t.snap_time, + --ROUND((NVL(SUM(t.bytes), 0) + NVL(SUM(i.bytes), 0) + NVL(SUM(l.bytes), 0)) / POWER(2,30), 3) AS gibs, + ROUND((NVL(SUM(t.bytes), 0) + NVL(SUM(i.bytes), 0) + NVL(SUM(l.bytes), 0)) / POWER(10,9), 3) AS gbs + FROM table_ts t, + indexes_ts i, + lobs_ts l + WHERE i.table_owner(+) = t.table_owner + AND i.table_name(+) = t.table_name + AND i.snap_time(+) = t.snap_time + AND l.table_owner(+) = t.table_owner + AND l.table_name(+) = t.table_name + AND l.snap_time(+) = t.snap_time + GROUP BY + t.table_owner, + t.table_name, + t.snap_time +), +/****************************************************************************************/ +my_query AS ( +SELECT snap_time, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_01.' THEN gibs ELSE 0 END) AS top_01, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_02.' THEN gibs ELSE 0 END) AS top_02, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_03.' THEN gibs ELSE 0 END) AS top_03, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_04.' THEN gibs ELSE 0 END) AS top_04, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_05.' THEN gibs ELSE 0 END) AS top_05, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_06.' THEN gibs ELSE 0 END) AS top_06, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_07.' THEN gibs ELSE 0 END) AS top_07, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_08.' THEN gibs ELSE 0 END) AS top_08, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_09.' THEN gibs ELSE 0 END) AS top_09, +-- SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_10.' THEN gibs ELSE 0 END) AS top_10, +-- SUM(CASE WHEN table_name||'('||table_owner||')' IN ('&&top_01.', '&&top_02.', '&&top_03.', '&&top_04.', '&&top_05.', '&&top_06.', '&&top_07.', '&&top_08.', '&&top_09.', '&&top_10.') THEN 0 ELSE gibs END) AS others + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_01.' THEN gbs ELSE 0 END) AS top_01, + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_02.' THEN gbs ELSE 0 END) AS top_02, + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_03.' THEN gbs ELSE 0 END) AS top_03, + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_04.' THEN gbs ELSE 0 END) AS top_04, + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_05.' THEN gbs ELSE 0 END) AS top_05, + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_06.' THEN gbs ELSE 0 END) AS top_06, + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_07.' THEN gbs ELSE 0 END) AS top_07, + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_08.' THEN gbs ELSE 0 END) AS top_08, + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_09.' THEN gbs ELSE 0 END) AS top_09, + SUM(CASE table_name||'('||table_owner||')' WHEN '&&top_10.' THEN gbs ELSE 0 END) AS top_10, + SUM(CASE WHEN table_name||'('||table_owner||')' IN ('&&top_01.', '&&top_02.', '&&top_03.', '&&top_04.', '&&top_05.', '&&top_06.', '&&top_07.', '&&top_08.', '&&top_09.', '&&top_10.') THEN 0 ELSE gbs END) AS others + FROM table_plus_ts + GROUP BY + snap_time +) +SELECT ', [new Date('|| + TO_CHAR(q.snap_time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.snap_time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.snap_time, 'DD')|| /* day */ + ','||TO_CHAR(q.snap_time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.snap_time, 'MI')|| /* minute */ + ','||TO_CHAR(q.snap_time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.top_01, 3)|| + ','||num_format(q.top_02, 3)|| + ','||num_format(q.top_03, 3)|| + ','||num_format(q.top_04, 3)|| + ','||num_format(q.top_05, 3)|| + ','||num_format(q.top_06, 3)|| + ','||num_format(q.top_07, 3)|| + ','||num_format(q.top_08, 3)|| + ','||num_format(q.top_09, 3)|| + ','||num_format(q.top_10, 3)|| + ','||num_format(q.others, 3)|| + ']' + FROM my_query q + ORDER BY + q.snap_time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'SteppedArea'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = '//'; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql diff --git a/csierra/cs_top_tables.sql b/csierra/cs_top_tables.sql new file mode 100644 index 0000000..1ee7c19 --- /dev/null +++ b/csierra/cs_top_tables.sql @@ -0,0 +1,89 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_top_tables.sql +-- +-- Purpose: Top Tables according to Segment(s) size (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/10/20 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter if Oracle Maintained tables are included +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_top_tables.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_top_tables'; +-- +PRO 1. ORACLE_MAINT: [{N}|Y] +DEF cs_oracle_maint = '&1.'; +UNDEF 1; +COL cs_oracle_maint NEW_V cs_oracle_maint NOPRI; +SELECT COALESCE('&&cs_oracle_maint.', 'N') AS cs_oracle_maint FROM DUAL; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&cs_oracle_maint." +@@cs_internal/cs_spool_id.sql +-- +PRO ORACLE MAINT : "&&cs_oracle_maint." [{N}|Y] +-- +COL gb FOR 999,990.000 HEA 'GB'; +COL owner FOR A30 TRUNC PRI; +COL segment_name FOR A30 TRUNC; +COL tablespace_name FOR A30 TRUNC; +COL pdb_name FOR A30 TRUNC; +-- +BREAK ON REPORT; +COMPUTE SUM LABEL 'TOTAL' OF gb ON REPORT; +-- +PRO +PRO TOP TABLES +PRO ~~~~~~~~~~ +SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') */ + SUM(s.bytes)/1e9 AS gb, + s.owner, + s.segment_name, + s.segment_type, + s.tablespace_name, + c.name AS pdb_name + FROM cdb_segments s, + v$containers c + WHERE s.segment_type LIKE 'TABLE%' + AND (s.con_id, s.owner) IN (SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ DISTINCT con_id, username FROM cdb_users WHERE '&&cs_oracle_maint.' = 'Y' OR oracle_maintained = 'N') + AND c.con_id = s.con_id + AND c.open_mode = 'READ WRITE' + GROUP BY + s.owner, + s.segment_name, + s.segment_type, + s.tablespace_name, + c.name +HAVING SUM(s.bytes)/1e9 > 0.001 + ORDER BY + 1 DESC + FETCH FIRST 30 ROWS ONLY +/ +-- +CLEAR BREAK COMPUTE COLUMNS; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&cs_oracle_maint." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_total_and_parse_cpu_to_db_chart.sql b/csierra/cs_total_and_parse_cpu_to_db_chart.sql new file mode 100644 index 0000000..6107cb7 --- /dev/null +++ b/csierra/cs_total_and_parse_cpu_to_db_chart.sql @@ -0,0 +1,172 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_total_and_parse_cpu_to_db_chart.sql +-- +-- Purpose: Total and Parse CPU-to-DB Ratio from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/08/06 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_total_and_parse_cpu_to_db_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_total_and_parse_cpu_to_db_chart'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO 3. Granularity: [{5MI}|SS|MI|15MI|HH|DD] +DEF cs2_granularity = '&3.'; +UNDEF 3; +COL cs2_granularity NEW_V cs2_granularity NOPRI; +SELECT NVL(UPPER(TRIM('&&cs2_granularity.')), '5MI') cs2_granularity FROM DUAL; +SELECT CASE WHEN '&&cs2_granularity.' IN ('SS', 'MI', '5MI', '15MI', 'HH', 'DD') THEN '&&cs2_granularity.' ELSE '5MI' END cs2_granularity FROM DUAL; +-- +COL cs2_plus_days NEW_V cs2_plus_days NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN 'SS' THEN '0.000011574074074' -- (1/24/3600) 1 second + WHEN 'MI' THEN '0.000694444444444' -- (1/24/60) 1 minute + WHEN '5MI' THEN '0.003472222222222' -- (5/24/60) 5 minutes + WHEN '15MI' THEN '0.01041666666666' -- (15/24/60) 15 minutes + WHEN 'HH' THEN '0.041666666666667' -- (1/24) 1 hour + WHEN 'DD' THEN '1' -- 1 day + ELSE '0.003472222222222' -- default of 5 minutes + END cs2_plus_days + FROM DUAL +/ +-- +PRO +PRO 4. SQL_ID (opt): +DEF cs_sql_id = '&4.'; +UNDEF 4; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'CPU to DB Time Ratio, between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = 'granularity:"&&cs2_granularity." SQL_ID:"&&cs_sql_id."'; +DEF vaxis_title = 'Ratio'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: true,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = "
2) Granularity: &&cs2_granularity. [{5MI}|SS|MI|15MI|HH|DD]"; +DEF chart_foot_note_3 = "
3) Target Ratio is 100. A Ratio of 25 means: from elapsed time, only 25% is consumed on CPU (service), while 75% was overhead (waiting)."; +DEF chart_foot_note_4 = "
"; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_granularity." "&&cs_sql_id."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Total CPU to Total DB Time', id:'1', type:'number'} +PRO ,{label:'Parse CPU to Parse DB Time', id:'2', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +FUNCTION ceil_timestamp (p_timestamp IN TIMESTAMP) +RETURN DATE +IS +BEGIN + IF '&&cs2_granularity.' = 'SS' THEN + RETURN CAST(p_timestamp AS DATE) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15MI' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), 'MI')) / 15) * 15 / (24 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '5MI' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), 'MI')) / 5) * 5 / (24 * 60) + &&cs2_plus_days.; + ELSE + RETURN TRUNC(CAST(p_timestamp AS DATE) + &&cs2_plus_days., '&&cs2_granularity.'); + END IF; +END ceil_timestamp; +/****************************************************************************************/ +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(sample_time) time, + ROUND(24 * 3600 * (MAX(CAST(sample_time AS DATE)) - MIN(CAST(sample_time AS DATE))) + 10) interval_secs, + 10 * COUNT(*) total_db_secs, + SUM(CASE session_state WHEN 'ON CPU' THEN 10 ELSE 0 END) total_cpu_secs, + SUM(CASE in_parse WHEN 'Y' THEN 10 ELSE 0 END) parse_db_secs, + SUM(CASE WHEN in_parse = 'Y' AND session_state = 'ON CPU' THEN 10 ELSE 0 END) parse_cpu_secs + FROM dba_hist_active_sess_history + WHERE sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND ('&&cs_sql_id.' IS NULL OR sql_id = '&&cs_sql_id.') + AND sql_id IS NOT NULL + GROUP BY + ceil_timestamp(sample_time) +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(100 * q.total_cpu_secs / NULLIF(q.total_db_secs, 0), 1)|| + ','||num_format(100 * GREATEST(q.parse_cpu_secs, 1e-9) / GREATEST(q.parse_db_secs, 1e-9), 1)|| + ']' + FROM my_query q + WHERE q.total_db_secs > 0 + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = ''; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_total_and_parse_db_and_cpu_aas_chart.sql b/csierra/cs_total_and_parse_db_and_cpu_aas_chart.sql new file mode 100644 index 0000000..fd48d0c --- /dev/null +++ b/csierra/cs_total_and_parse_db_and_cpu_aas_chart.sql @@ -0,0 +1,177 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_total_and_parse_db_and_cpu_aas_chart.sql +-- +-- Purpose: Total and Parse DB and CPU Average Active Sessions (AAS) from AWR (time series chart) +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/08/06 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Enter range of dates and filters when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_total_and_parse_db_and_cpu_aas_chart.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_total_and_parse_db_and_cpu_aas_chart'; +DEF cs_hours_range_default = '24'; +-- +@@cs_internal/cs_sample_time_from_and_to.sql +@@cs_internal/cs_snap_id_from_and_to.sql +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +PRO +PRO 3. Granularity: [{5MI}|SS|MI|15MI|HH|DD] +DEF cs2_granularity = '&3.'; +UNDEF 3; +COL cs2_granularity NEW_V cs2_granularity NOPRI; +SELECT NVL(UPPER(TRIM('&&cs2_granularity.')), '5MI') cs2_granularity FROM DUAL; +SELECT CASE WHEN '&&cs2_granularity.' IN ('SS', 'MI', '5MI', '15MI', 'HH', 'DD') THEN '&&cs2_granularity.' ELSE '5MI' END cs2_granularity FROM DUAL; +-- +COL cs2_plus_days NEW_V cs2_plus_days NOPRI; +SELECT CASE '&&cs2_granularity.' + WHEN 'SS' THEN '0.000011574074074' -- (1/24/3600) 1 second + WHEN 'MI' THEN '0.000694444444444' -- (1/24/60) 1 minute + WHEN '5MI' THEN '0.003472222222222' -- (5/24/60) 5 minutes + WHEN '15MI' THEN '0.01041666666666' -- (15/24/60) 15 minutes + WHEN 'HH' THEN '0.041666666666667' -- (1/24) 1 hour + WHEN 'DD' THEN '1' -- 1 day + ELSE '0.003472222222222' -- default of 5 minutes + END cs2_plus_days + FROM DUAL +/ +-- +PRO +PRO 4. SQL_ID (opt): +DEF cs_sql_id = '&4.'; +UNDEF 4; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +DEF report_title = 'DB and CPU Average Active Sessions (AAS), between &&cs_sample_time_from. and &&cs_sample_time_to. UTC'; +DEF chart_title = '&&report_title.'; +DEF xaxis_title = 'granularity:"&&cs2_granularity." SQL_ID:"&&cs_sql_id."'; +DEF vaxis_title = 'Average Active Sessions (AAS)'; +-- +-- (isStacked is true and baseline is null) or (not isStacked and baseline >= 0) +--DEF is_stacked = "isStacked: false,"; +DEF is_stacked = "isStacked: false,"; +--DEF vaxis_baseline = ", baseline:&&cs_num_cpu_cores., baselineColor:'red'"; +DEF vaxis_baseline = ""; +DEF chart_foot_note_2 = "
2)"; +DEF chart_foot_note_2 = "
2) Granularity: &&cs2_granularity. [{5MI}|SS|MI|15MI|HH|DD]"; +DEF chart_foot_note_3 = "
3) Target Ratio is 100. A Ratio of 25 means: from elapsed time, only 25% is consumed on CPU (service), while 75% was overhead (waiting)."; +DEF chart_foot_note_4 = "
"; +DEF report_foot_note = 'SQL> @&&cs_script_name..sql "&&cs_sample_time_from." "&&cs_sample_time_to." "&&cs2_granularity." "&&cs_sql_id."'; +-- +@@cs_internal/cs_spool_head_chart.sql +-- +PRO ,{label:'Total DB', id:'1', type:'number'} +PRO ,{label:'Total CPU', id:'2', type:'number'} +PRO ,{label:'Parse DB', id:'3', type:'number'} +PRO ,{label:'Parse CPU', id:'4', type:'number'} +PRO ] +-- +SET HEA OFF PAGES 0; +/****************************************************************************************/ +WITH +FUNCTION num_format (p_number IN NUMBER, p_round IN NUMBER DEFAULT 0) +RETURN VARCHAR2 IS +BEGIN + IF p_number IS NULL OR ROUND(p_number, p_round) <= 0 THEN + RETURN 'null'; + ELSE + RETURN TO_CHAR(ROUND(p_number, p_round)); + END IF; +END num_format; +/****************************************************************************************/ +FUNCTION ceil_timestamp (p_timestamp IN TIMESTAMP) +RETURN DATE +IS +BEGIN + IF '&&cs2_granularity.' = 'SS' THEN + RETURN CAST(p_timestamp AS DATE) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '15MI' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), 'MI')) / 15) * 15 / (24 * 60) + &&cs2_plus_days.; + ELSIF '&&cs2_granularity.' = '5MI' THEN + RETURN TRUNC(CAST(p_timestamp AS DATE), 'HH') + FLOOR(TO_NUMBER(TO_CHAR(CAST(p_timestamp AS DATE), 'MI')) / 5) * 5 / (24 * 60) + &&cs2_plus_days.; + ELSE + RETURN TRUNC(CAST(p_timestamp AS DATE) + &&cs2_plus_days., '&&cs2_granularity.'); + END IF; +END ceil_timestamp; +/****************************************************************************************/ +my_query AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + ceil_timestamp(sample_time) time, + ROUND(24 * 3600 * (MAX(CAST(sample_time AS DATE)) - MIN(CAST(sample_time AS DATE))) + 10) interval_secs, + 10 * COUNT(*) total_db_secs, + SUM(CASE session_state WHEN 'ON CPU' THEN 10 ELSE 0 END) total_cpu_secs, + SUM(CASE in_parse WHEN 'Y' THEN 10 ELSE 0 END) parse_db_secs, + SUM(CASE WHEN in_parse = 'Y' AND session_state = 'ON CPU' THEN 10 ELSE 0 END) parse_cpu_secs + FROM dba_hist_active_sess_history + WHERE sample_time >= TO_TIMESTAMP('&&cs_sample_time_from.', '&&cs_datetime_full_format.') + AND sample_time < TO_TIMESTAMP('&&cs_sample_time_to.', '&&cs_datetime_full_format.') + AND dbid = TO_NUMBER('&&cs_dbid.') + AND instance_number = TO_NUMBER('&&cs_instance_number.') + AND snap_id BETWEEN TO_NUMBER('&&cs_snap_id_from.') AND TO_NUMBER('&&cs_snap_id_to.') + AND ('&&cs_sql_id.' IS NULL OR sql_id = '&&cs_sql_id.') + AND sql_id IS NOT NULL + GROUP BY + ceil_timestamp(sample_time) +) +SELECT ', [new Date('|| + TO_CHAR(q.time, 'YYYY')|| /* year */ + ','||(TO_NUMBER(TO_CHAR(q.time, 'MM')) - 1)|| /* month - 1 */ + ','||TO_CHAR(q.time, 'DD')|| /* day */ + ','||TO_CHAR(q.time, 'HH24')|| /* hour */ + ','||TO_CHAR(q.time, 'MI')|| /* minute */ + ','||TO_CHAR(q.time, 'SS')|| /* second */ + ')'|| + ','||num_format(q.total_db_secs / q.interval_secs, 3)|| + ','||num_format(q.total_cpu_secs / q.interval_secs, 3)|| + ','||num_format(q.parse_db_secs / q.interval_secs, 3)|| + ','||num_format(q.parse_cpu_secs / q.interval_secs, 3)|| + ']' + FROM my_query q + WHERE q.total_db_secs > 0 + AND q.interval_secs > 0 + ORDER BY + q.time +/ +/****************************************************************************************/ +SET HEA ON PAGES 100; +-- +-- [Line|Area|SteppedArea|Scatter] +DEF cs_chart_type = 'Scatter'; +-- disable explorer with "//" when using Pie +DEF cs_chart_option_explorer = ''; +-- enable pie options with "" when using Pie +DEF cs_chart_option_pie = '//'; +-- use oem colors +DEF cs_oem_colors_series = '//'; +DEF cs_oem_colors_slices = '//'; +-- for line charts +DEF cs_curve_type = ''; +-- +@@cs_internal/cs_spool_id_chart.sql +@@cs_internal/cs_spool_tail_chart.sql +PRO +PRO &&report_foot_note. +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_trace_session.sql b/csierra/cs_trace_session.sql new file mode 100644 index 0000000..c698919 --- /dev/null +++ b/csierra/cs_trace_session.sql @@ -0,0 +1,87 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_trace_session.sql +-- +-- Purpose: Trace one session given a SID +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to CDB or PDB. +-- +-- Enter SID and SERIAL# when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_trace_session.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_trace_session'; +-- +PRO +PRO 1. sid,serial: +DEF sid_serial = '&1'; +UNDEF 1; +PRO +PRO 2. seconds: +DEF seconds = '&2'; +UNDEF 2; +PRO +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +PRO SID,SERIAL# : &&sid_serial. +PRO SECONDS : &&seconds. +-- +EXEC DBMS_MONITOR.session_trace_enable(session_id => TO_NUMBER(SUBSTR('&&sid_serial.', 1, INSTR('&&sid_serial.', ',') - 1)), serial_num => TO_NUMBER(SUBSTR('&&sid_serial.', INSTR('&&sid_serial.', ',') + 1)), waits => TRUE, binds => TRUE, plan_stat => 'ALL_EXECUTIONS'); +-- +COL trace_filename NEW_V trace_filename FOR A200; +SELECT d.value||'/'||i.instance_name||'_ora_'||spid||CASE WHEN pr.traceid IS NOT NULL THEN '_'||pr.traceid END||'.trc' trace_filename + FROM v$session se, + v$process pr, + v$instance i, + v$diag_info d + WHERE se.type = 'USER' + AND se.sid||','||se.serial# LIKE '%'||REPLACE('&&sid_serial.', ' ')||'%' + AND pr.con_id = se.con_id + AND pr.addr = se.paddr + AND d.name = 'Diag Trace' +/ +-- +PRO +PRO tracing session &&sid_serial. for &&seconds. seconds... +PRO +EXEC DBMS_LOCK.sleep(seconds => &&seconds.); +EXEC DBMS_MONITOR.session_trace_disable(session_id => TO_NUMBER(SUBSTR('&&sid_serial.', 1, INSTR('&&sid_serial.', ',') - 1)), serial_num => TO_NUMBER(SUBSTR('&&sid_serial.', INSTR('&&sid_serial.', ',') + 1))); +HOST tkprof &&trace_filename. &&cs_file_prefix._&&cs_file_date_time._&&cs_reference_sanitized._tkprof.txt +-- +PRO +PRO &&trace_filename. +PRO +PAUSE Trace completed. Press RETURN to display trace +PRO +HOST chmod 644 &&trace_filename. +HOST cat &&trace_filename. +PRO +PRO &&trace_filename. +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_unmark_sql_hot.sql b/csierra/cs_unmark_sql_hot.sql new file mode 100644 index 0000000..096eaba --- /dev/null +++ b/csierra/cs_unmark_sql_hot.sql @@ -0,0 +1,186 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_unmark_sql_hot.sql +-- +-- Purpose: Use DBMS_SHARED_POOL.unmarkhot to undo cs_mark_sql_hot.sql +-- +-- Author: Carlos Sierra +-- +-- Version: 2021/11/05 +-- +-- Usage: Execute connected to PDB. +-- +-- Enter SQL_ID when requested. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_unmark_sql_hot.sql +-- +-- Notes: Developed and tested on 19c +-- +-- https://jonathanlewis.wordpress.com/2017/10/02/markhot/ +-- +-- When a statement (through its “full_hash_valueâ€) is marked as hot +-- an extra value visible as the property column in v$db_object_cache +-- is set to a value that seems to be dependent on the process id of the +-- session attempting to execute the statement, and this value is used as +-- an extra component in calculating a new full_hash_value (which leads +-- to a new hash_value and sql_id). +-- With a different full_hash_value the same text generates a new parent +-- cursor which is (probably) going to be associated with a new library +-- cache hash bucket and latch. +-- The property value for the original parent cursor is set to “HOTâ€, +-- and the extra copies become “HOTCOPY1â€, “HOTCOPY2†and so on. +-- Interestingly once an object is marked as HOT and the first HOTCOPYn +-- has appeared the original version may disappear from v$sql while still +-- existing in v$db_object_cache. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_unmark_sql_hot'; +-- +PRO +PRO 1. Selective SQL Text Substring: (e.g.: /* getMaxTransactionCommitID */) +DEF sql_text_substring = '&1.'; +UNDEF 1; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_signature.sql +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql "&&sql_text_substring." +@@cs_internal/cs_spool_id.sql +-- +PRO SQL_TEXT_STR : "&&sql_text_substring." +-- +COL hot NEW_V hot FOR 9999; +COL cold NEW_V cold FOR 9999; +COL hash_value FOR 9999999999; +COL sql_text FOR A80 TRUNC; +-- +PRO +PRO BEFORE +PRO ~~~~~~ +WITH +s AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT con_id, sql_id, hash_value, address, sql_text + FROM v$sql + WHERE &&cs_con_id. <> 1 -- executed on PDB and not on CDB$ROOT + AND con_id = &&cs_con_id. + AND '&&sql_text_substring.' IS NOT NULL + AND sql_text LIKE '%&&sql_text_substring.%' + AND sql_text NOT LIKE '%MATERIALIZE%' -- exclude SQL like this one! + AND object_status = 'VALID' + AND is_obsolete = 'N' + AND is_shareable = 'Y' + AND ROWNUM >= 1 /* MATERIALIZE */ +) +SELECT c.full_hash_value, + SUM(CASE WHEN c.property IS NOT NULL THEN 1 ELSE 0 END) AS hot, + SUM(CASE WHEN c.property IS NULL THEN 1 ELSE 0 END) AS cold, + s.sql_id, s.hash_value, s.address, s.sql_text + FROM s, v$db_object_cache c + WHERE c.con_id = s.con_id + AND c.hash_value = s.hash_value + AND c.addr = s.address + AND c.name = s.sql_text + AND c.namespace = 'SQL AREA' + AND c.type = 'CURSOR' + AND c.status = 'VALID' + GROUP BY + c.full_hash_value, s.sql_id, s.hash_value, s.address, s.sql_text + ORDER BY + c.full_hash_value, s.sql_id, s.hash_value, s.address, s.sql_text +/ +-- +PRO +PRO SUMMARY +PRO ~~~~~~~ +WITH +s AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT con_id, sql_id, hash_value, address, sql_text + FROM v$sql + WHERE &&cs_con_id. <> 1 -- executed on PDB and not on CDB$ROOT + AND con_id = &&cs_con_id. + AND '&&sql_text_substring.' IS NOT NULL + AND sql_text LIKE '%&&sql_text_substring.%' + AND sql_text NOT LIKE '%MATERIALIZE%' -- exclude SQL like this one! + AND object_status = 'VALID' + AND is_obsolete = 'N' + AND is_shareable = 'Y' + AND ROWNUM >= 1 /* MATERIALIZE */ +) +SELECT SUM(CASE WHEN c.property IS NOT NULL THEN 1 ELSE 0 END) AS hot, + SUM(CASE WHEN c.property IS NULL THEN 1 ELSE 0 END) AS cold + FROM s, v$db_object_cache c + WHERE c.con_id = s.con_id + AND c.hash_value = s.hash_value + AND c.addr = s.address + AND c.name = s.sql_text + AND c.namespace = 'SQL AREA' + AND c.type = 'CURSOR' + AND c.status = 'VALID' +/ +-- +PRO +PAUSE Hit "return" to continue; or "control-c" then "return" to exit: +-- +PRO +-- PRO UNMAKE HOT (IF COLD = 0 AND HOT > 0) +PRO UNMAKE HOT (IF HOT > 0) +PRO ~~~~~~~~~~ +SET SERVEROUT ON; +BEGIN + -- IF TO_NUMBER(NVL(TRIM('&&cold.'), '0')) = 0 AND TO_NUMBER(NVL(TRIM('&&hot.'), '0')) > 0 THEN -- sql has been marked as hot + IF TO_NUMBER(NVL(TRIM('&&hot.'), '0')) > 0 THEN -- sql has been marked as hot + FOR i IN ( + WITH + s AS ( + SELECT /*+ MATERIALIZE NO_MERGE */ + DISTINCT con_id, sql_id, hash_value, address, sql_text + FROM v$sql + WHERE &&cs_con_id. <> 1 -- executed on PDB and not on CDB$ROOT + AND con_id = &&cs_con_id. + AND '&&sql_text_substring.' IS NOT NULL + AND sql_text LIKE '%&&sql_text_substring.%' + AND sql_text NOT LIKE '%MATERIALIZE%' -- exclude SQL like this one! + AND object_status = 'VALID' + AND is_obsolete = 'N' + AND is_shareable = 'Y' + AND ROWNUM >= 1 /* MATERIALIZE */ + ) + SELECT DISTINCT full_hash_value + FROM s, v$db_object_cache c + WHERE c.con_id = s.con_id + AND c.hash_value = s.hash_value + AND c.addr = s.address + AND c.name = s.sql_text + AND c.namespace = 'SQL AREA' + AND c.type = 'CURSOR' + AND c.status = 'VALID' + -- AND c.property IS NOT NULL -- HOT or COLD + ) + LOOP + DBMS_OUTPUT.put_line('UNMARKHOT:'||i.full_hash_value); + DBMS_SHARED_POOL.unmarkhot(hash => i.full_hash_value, namespace => 0); + END LOOP; + END IF; +END; +/ +SET SERVEROUT OFF; +-- +PRO +PRO SQL> @&&cs_script_name..sql "&&sql_text_substring." +-- +@@cs_internal/cs_spool_tail.sql +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- \ No newline at end of file diff --git a/csierra/cs_vcn_entity_change_events_rgn.sql b/csierra/cs_vcn_entity_change_events_rgn.sql new file mode 100644 index 0000000..fa93fa8 --- /dev/null +++ b/csierra/cs_vcn_entity_change_events_rgn.sql @@ -0,0 +1,106 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_vcn_entity_change_events_rgn.sql +-- +-- Purpose: Detect ENTITY_CHANGE_EVENTS_rgn stuck on a KIEV VCN PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/11/01 +-- +-- Usage: Execute connected to VCN PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_vcn_entity_change_events_rgn.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +-- +COL events_rgn_owner NEW_V events_rgn_owner; +SELECT owner events_rgn_owner FROM dba_tables WHERE table_name = UPPER('ENTITY_CHANGE_EVENTS_rgn'); +-- +COL begintime FOR A23; +COL name FOR A200; +COL old_begintime FOR A23; +COL cnt FOR 999,999,990; +-- +PRO +PRO Total Events +PRO ~~~~~~~~~~~~ +WITH +e AS ( +SELECT COUNT(*) AS cnt, + MIN(e.kievtxnid) AS min_kievtxnid + FROM &&events_rgn_owner..ENTITY_CHANGE_EVENTS_rgn e +) +SELECT e.cnt, kt.begintime AS old_begintime + FROM &&events_rgn_owner..kievtransactions kt, e + WHERE kt.committransactionid = e.min_kievtxnid +/ +PRO +PRO Oldest Events +PRO ~~~~~~~~~~~~~ +WITH +events_rgn_sq AS ( +SELECT name, kievlive, kievtxnid, MAX(kievtxnid) OVER (PARTITION BY name) max_kievtxnid + FROM &&events_rgn_owner..ENTITY_CHANGE_EVENTS_rgn +) +SELECT kt.begintime, + (SYSDATE - CAST(kt.begintime AS DATE)) * 24 * 3600 age_in_seconds, + ROUND((SYSDATE - CAST(kt.begintime AS DATE)) * 24, 1) age_in_hours, + ROUND((SYSDATE - CAST(kt.begintime AS DATE)), 1) age_in_days, + sq.kievtxnid, sq.name + FROM events_rgn_sq sq, + &&events_rgn_owner..kievtransactions kt + WHERE sq.kievtxnid = sq.max_kievtxnid + AND sq.kievlive = 'Y' + AND kt.committransactionid(+) = sq.kievtxnid + ORDER BY + 1,2 +FETCH FIRST 10 ROWS ONLY +/ +-- +PRO +PRO Oldest Event +PRO ~~~~~~~~~~~~ +SELECT MIN(kt.begintime) AS begintime, + (SYSDATE - CAST(MIN(kt.begintime) AS DATE)) * 24 * 3600 age_in_seconds, + ROUND((SYSDATE - CAST(MIN(kt.begintime) AS DATE)) * 24, 1) age_in_hours, + ROUND((SYSDATE - CAST(MIN(kt.begintime) AS DATE)), 1) age_in_days + FROM &&events_rgn_owner..kievtransactions kt + WHERE kt.committransactionid = (SELECT MIN(e.kievtxnid) FROM &&events_rgn_owner..ENTITY_CHANGE_EVENTS_rgn e) +/ +-- +COL changeevent FOR A100; +PRO +PRO Oldest Event +PRO ~~~~~~~~~~~~ +SELECT e.* + FROM &&events_rgn_owner..ENTITY_CHANGE_EVENTS_rgn e, &&events_rgn_owner..kievtransactions kt + WHERE kt.committransactionid = e.kievtxnid + ORDER BY + e.kievtxnid + FETCH FIRST 1 ROW ONLY +/ +-- +COL entityId FOR A100 HEA 'entityId'; +COL compartmentId FOR A100 HEA 'compartmentId'; +PRO +PRO Top entityId + compartmentId +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT COUNT(*) AS cnt, + JSON_VALUE(changeevent, '$.entityId') AS entityId, + JSON_VALUE(changeevent, '$.compartmentId') AS compartmentId + FROM &&events_rgn_owner..ENTITY_CHANGE_EVENTS_rgn e, &&events_rgn_owner..kievtransactions kt + WHERE kt.committransactionid = e.KievTxnID + GROUP BY + JSON_VALUE(changeevent, '$.entityId'), + JSON_VALUE(changeevent, '$.compartmentId') + ORDER BY + 1 DESC + FETCH FIRST 10 ROW ONLY +/ + diff --git a/csierra/cs_vcn_events.sql b/csierra/cs_vcn_events.sql new file mode 100644 index 0000000..bb29a43 --- /dev/null +++ b/csierra/cs_vcn_events.sql @@ -0,0 +1,46 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_vcn_events.sql +-- +-- Purpose: Detect EVENTS_RGN stuck on a KIEV VCN PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/09/30 +-- +-- Usage: Execute connected to VCN PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_vcn_events.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +-- +COL events_rgn_owner NEW_V events_rgn_owner; +SELECT owner events_rgn_owner FROM dba_tables WHERE table_name = 'EVENTS_RGN'; +-- +COL name FOR A200; +COL name FOR A40 TRUNC; +-- +WITH +events_rgn_sq AS ( +SELECT name, kievlive, kievtxnid, MAX(kievtxnid) OVER (PARTITION BY name) max_kievtxnid + FROM &&events_rgn_owner..events_rgn +) +SELECT TO_CHAR(kt.begintime, 'YYYY-MM-DD"T"HH24:MI:SS') begintime, + (SYSDATE - CAST(kt.begintime AS DATE)) * 24 * 3600 age_in_seconds, + --ROUND((SYSDATE - CAST(kt.begintime AS DATE)) * 24, 1) age_in_hours, + --ROUND((SYSDATE - CAST(kt.begintime AS DATE)), 1) age_in_days, + sq.kievtxnid, sq.name + FROM events_rgn_sq sq, + &&events_rgn_owner..kievtransactions kt + WHERE sq.kievtxnid = sq.max_kievtxnid + AND sq.kievlive = 'Y' + AND kt.committransactionid(+) = sq.kievtxnid + ORDER BY + 1,2 +FETCH FIRST 10 ROWS ONLY +/ diff --git a/csierra/cs_vcn_events_v2.sql b/csierra/cs_vcn_events_v2.sql new file mode 100644 index 0000000..b0ea043 --- /dev/null +++ b/csierra/cs_vcn_events_v2.sql @@ -0,0 +1,46 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_vcn_events_v2.sql +-- +-- Purpose: Detect EVENTS_V2_RGN stuck on a KIEV VCN PDB +-- +-- Author: Carlos Sierra +-- +-- Version: 2022/09/30 +-- +-- Usage: Execute connected to VCN PDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_vcn_events_v2.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +-- +COL events_rgn_owner NEW_V events_rgn_owner; +SELECT owner events_rgn_owner FROM dba_tables WHERE table_name = 'EVENTS_V2_RGN'; +-- +COL name FOR A200; +COL name FOR A40 TRUNC; +-- +WITH +events_rgn_sq AS ( +SELECT name, kievlive, kievtxnid, MAX(kievtxnid) OVER (PARTITION BY name) max_kievtxnid + FROM &&events_rgn_owner..events_v2_rgn +) +SELECT TO_CHAR(kt.begintime, 'YYYY-MM-DD"T"HH24:MI:SS') begintime, + (SYSDATE - CAST(kt.begintime AS DATE)) * 24 * 3600 age_in_seconds, + --ROUND((SYSDATE - CAST(kt.begintime AS DATE)) * 24, 1) age_in_hours, + --ROUND((SYSDATE - CAST(kt.begintime AS DATE)), 1) age_in_days, + sq.kievtxnid, sq.name + FROM events_rgn_sq sq, + &&events_rgn_owner..kievtransactions kt + WHERE sq.kievtxnid = sq.max_kievtxnid + AND sq.kievlive = 'Y' + AND kt.committransactionid(+) = sq.kievtxnid + ORDER BY + 1,2 +FETCH FIRST 10 ROWS ONLY +/ diff --git a/csierra/cs_wait_chains.sql b/csierra/cs_wait_chains.sql new file mode 100644 index 0000000..9ed596f --- /dev/null +++ b/csierra/cs_wait_chains.sql @@ -0,0 +1,154 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: cs_wait_chains.sql +-- +-- Purpose: Wait Chains (text report) +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/09 +-- +-- Usage: Execute connected to PDB or CDB. +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @cs_wait_chains.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +@@cs_internal/cs_primary.sql +@@cs_internal/cs_cdb_warn.sql +@@cs_internal/cs_set.sql +@@cs_internal/cs_def.sql +@@cs_internal/cs_file_prefix.sql +-- +DEF cs_script_name = 'cs_wait_chains'; +-- +--@@cs_internal/&&cs_set_container_to_cdb_root. +-- +COL snap_time NEW_V snap_time; +COL sessions FOR 999,990; +COL blockers FOR 999,990; +COL blockees FOR 999,990; +COL blocker FOR 9999999; +COL et_secs FOR 999,999,990; +COL killed FOR 99,990; +COL lck_cnt FOR 99,990; +COL txn_cnt FOR 99,990; +COL chn_cnt FOR 99,990; +COL obj_cnt FOR 99,990; +COL api FOR A30 TRUNC; +COL pdb_name FOR A30 TRUNC; +COL pdbs FOR 9999; +-- +SELECT '&&cs_file_prefix._&&cs_script_name.' cs_file_name FROM DUAL; +-- +@@cs_internal/cs_spool_head.sql +PRO SQL> @&&cs_script_name..sql +@@cs_internal/cs_spool_id.sql +-- +PRO +PRO Blocked Sessions (v$wait_chains) +PRO ~~~~~~~~~~~~~~~~ +SET HEA OFF PAGES 0; +COL line FOR A500; +WITH +sessions_in_tree AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + w.chain_id, + w.sid, + w.sess_serial#, + s.machine, + w.blocker_is_valid, + w.blocker_sid, + w.blocker_sess_serial#, + w.blocker_chain_id, + w.in_wait_secs, + w.wait_event_text, + c.con_id, + c.name AS pdb_name, + w.row_wait_obj#, + w.chain_signature, + CASE + WHEN (SELECT COUNT(*) + FROM v$wait_chains b -- blockee + WHERE w.blocker_is_valid = 'FALSE' + AND b.chain_is_cycle = 'FALSE' + AND b.chain_signature <> '' + AND b.blocker_is_valid = 'TRUE' + AND b.blocker_sid = w.sid + AND b.blocker_sess_serial# = w.sess_serial# + AND b.con_id = w.con_id + AND b.chain_signature = w.chain_signature) > 0 + THEN 'TRUE' + ELSE 'FALSE' + END AS root_blocker, + ROWNUM AS w_rownum + FROM v$wait_chains w, + v$session s, + v$containers c + WHERE w.chain_is_cycle = 'FALSE' + AND w.chain_signature <> '' + AND s.sid = w.sid + AND s.serial# = w.sess_serial# + AND '&&cs_con_id' IN ('1', s.con_id) + AND c.con_id = s.con_id +), +sessions AS ( +SELECT '| '|| + RPAD(LPAD(' ', 2 * (LEVEL - 1), ' ')||t.sid||','||t.sess_serial#, 25, ' ')||' | '|| + RPAD(LPAD(' ', 2 * (LEVEL - 1), ' ')||NVL(t.machine, ' '), 64, ' ')||' | '|| + LPAD(NVL(TO_CHAR(t.in_wait_secs), ' '), 5, ' ')||' | '|| + RPAD(NVL(t.wait_event_text, ' '), 35, ' ')||' | '|| + RPAD(CASE + WHEN /*'&&cs_con_id' <> '1' AND*/ t.row_wait_obj# IS NOT NULL THEN + ( SELECT o.object_name + FROM cdb_objects o + WHERE o.con_id = t.con_id + AND o.object_id = t.row_wait_obj# )|| + '('||t.row_wait_obj#||')' + ELSE ' ' + END, 35, ' ')||' | '|| + RPAD(NVL(t.pdb_name, ' '), 30, ' ')||' | '|| + RPAD(NVL(t.chain_signature, ' '), 200, ' ')||' |' AS line + FROM sessions_in_tree t + WHERE 'TRUE' IN (t.blocker_is_valid, t.root_blocker) + START WITH t.root_blocker = 'TRUE' + CONNECT BY t.blocker_sid = PRIOR t.sid + AND t.blocker_sess_serial# = PRIOR t.sess_serial# + ORDER SIBLINGS BY NVL(t.in_wait_secs, 0) DESC +) +SELECT '+'||RPAD('-', 414, '-')||'+' AS line + FROM DUAL + UNION ALL +SELECT '| '|| + RPAD('SID,SERIAL#', 25, ' ')||' | '|| + RPAD('MACHINE', 64, ' ')||' | '|| + LPAD('SECS', 5, ' ')||' | '|| + RPAD('WAIT EVENT', 35, ' ')||' | '|| + RPAD('OBJECT', 35, ' ')||' | '|| + RPAD('PDB NAME', 30, ' ')||' | '|| + RPAD('CHAIN SIGNATURE', 200, ' ')||' |' AS line + FROM DUAL + UNION ALL +SELECT '+'||RPAD('-', 414, '-')||'+' AS line + FROM DUAL + UNION ALL +SELECT line FROM sessions + UNION ALL +SELECT '+'||RPAD('-', 414, '-')||'+' AS line + FROM DUAL +/ +SET HEA ON PAGES 100; +-- +PRO +PRO SQL> @&&cs_script_name..sql +-- +@@cs_internal/cs_spool_tail.sql +-- +--@@cs_internal/&&cs_set_container_to_curr_pdb. +-- +@@cs_internal/cs_undef.sql +@@cs_internal/cs_reset.sql +-- diff --git a/csierra/dba_high_water_mark_statistics.sql b/csierra/dba_high_water_mark_statistics.sql new file mode 100644 index 0000000..3210b58 --- /dev/null +++ b/csierra/dba_high_water_mark_statistics.sql @@ -0,0 +1,49 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: dba_high_water_mark_statistics.sql +-- +-- Purpose: Database High Water Mark (HWM) Statistics +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @dba_high_water_mark_statistics.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +-- +COL version FOR A12; +COL name FOR A20; +COL description FOR A60; +BREAK ON version SKIP PAGE DUPL; +-- +PRO +PRO dba_high_water_mark_statistics +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SELECT version, name, highwater, last_value, description + FROM dba_high_water_mark_statistics +ORDER BY version, name +/ +-- +PRO +PRO v$license +PRO ~~~~~~~~~ +SELECT * + FROM v$license +/ +-- +COL resource_name FOR A30; +PRO +PRO v$resource_limit +PRO ~~~~~~~~~~~~~~~~ +SELECT resource_name, current_utilization, max_utilization, initial_allocation, limit_value + FROM v$resource_limit + ORDER BY resource_name +/ diff --git a/csierra/dc.sql b/csierra/dc.sql new file mode 100644 index 0000000..d3aa5b1 --- /dev/null +++ b/csierra/dc.sql @@ -0,0 +1,7 @@ +-- dc.sql - Display Cursor Execution Plan. Execute this script after one SQL for which you want to see the Execution Plan +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20; +SET HEA OFF PAGES 0; +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR((SELECT prev_sql_id FROM v$session WHERE sid = SYS_CONTEXT('USERENV', 'SID')), NULL, 'ADVANCED ALLSTATS LAST')); +SET HEA ON PAGES 100; +-- in case it was ON the repeat SQL execution followed by this script +SET SERVEROUT OFF; \ No newline at end of file diff --git a/csierra/dp.sql b/csierra/dp.sql new file mode 100644 index 0000000..d53c510 --- /dev/null +++ b/csierra/dp.sql @@ -0,0 +1,7 @@ +-- dp.sql - Display Plan Table Explain Plan. Execute this script after one EXPLAIN PLAN FOR for a SQL for which you want to see the Explain Plan +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20; +SET HEA OFF PAGES 0; +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', NULL, 'ADVANCED')); +SET HEA ON PAGES 100; +-- in case it was ON the repeat SQL execution followed by this script +SET SERVEROUT OFF; \ No newline at end of file diff --git a/csierra/find_all_privs.sql b/csierra/find_all_privs.sql new file mode 100644 index 0000000..abff4b9 --- /dev/null +++ b/csierra/find_all_privs.sql @@ -0,0 +1,341 @@ +-- ----------------------------------------------------------------------------- +-- WWW.PETEFINNIGAN.COM LIMITED +-- ----------------------------------------------------------------------------- +-- Script Name : find_all_privs.sql +-- Author : Pete Finnigan +-- Date : June 2003 +-- Reference : https://github.com/vishaldesai/Oracle_Scripts/blob/master/find_all_privs2.sql +-- ----------------------------------------------------------------------------- +-- Description : Use this script to find which privileges have been granted to a +-- particular user. This scripts lists ROLES, SYSTEM privileges +-- and object privileges granted to a user. If a ROLE is found +-- then it is checked recursively. +-- +-- The output can be directed to either the screen via dbms_output +-- or to a file via utl_file. The method is decided at run time +-- by choosing either 'S' for screen or 'F' for File. If File is +-- chosen then a filename and output directory are needed. The +-- output directory needs to be enabled via utl_file_dir prior to +-- 9iR2 and a directory object after. +-- ----------------------------------------------------------------------------- +-- Maintainer : Pete Finnigan (http://www.petefinnigan.com) +-- Copyright : Copyright (C) 2004 PeteFinnigan.com Limited. All rights +-- reserved. All registered trademarks are the property of their +-- respective owners and are hereby acknowledged. +-- ----------------------------------------------------------------------------- +-- Usage : The script provided here is available free. You can do anything +-- you want with it commercial or non commercial as long as the +-- copyrights and this notice are not removed or edited in any way. +-- The scripts cannot be posted / published / hosted or whatever +-- anywhere else except at www.petefinnigan.com/tools.htm +-- ----------------------------------------------------------------------------- +-- To Do : +-- 1 - add proxy connection authorities +-- 2 - add SELECT ANY TABLE and SELECT ANY DICTIONARY access +-- ----------------------------------------------------------------------------- +-- Version History +-- =============== +-- +-- Who version Date Description +-- === ======= ====== ====================== +-- P.Finnigan 1.0 Jun 2003 First Issue. +-- P.Finnigan 1.1 Jun 2003 Output to file added. +-- P.Finnigan 1.2 Jan 2004 Corrected exit/exists bug in 'whenever'. +-- N.Dunbar 1.3 Jan 2004 Added real TAB characters and uppercased +-- user input for username and output method. +-- P.Finnigan 1.4 Feb 2004 Clarified use of utl_file for 9ir2. +-- P.Finnigan 1.5 Feb 2004 Added the owner to output for object privs +-- (Thanks to Guy Dallaire for this addition) +-- P.Finnigan 1.6 Oct 2004 Changed output to include title in line +-- with other reports in the toolkit. Also added +-- usage notes. +-- P.Finnigan 1.7 Apr 2005 Added whenever sqlerror continue to stop +-- subsequent errors barfing SQL*Plus. Thanks +-- to Norman Dunbar for the update. +-- D. Arthur 1.8 Nov 2014 1) Added ability to skip table privileges; +-- 2) Added sorting: system privs, table privs, +-- roles, then execute before table privs; +-- 3) Added parallel for performance; +-- 4) Indicate if role is password protected; +-- 5) Fix: in column privs, owner prefix +-- on the table instead of the column +-- 6) PF: put all original formatting back. +-- P.Finnigan 1.9 Nov 2014 David Litchfield found a bug ORA-12801 with +-- parallel hint. You can try uncommenting the +-- hint and if it works fine; if not leave +-- commented out. +-- ----------------------------------------------------------------------------- + +--whenever sqlerror exit rollback +set feed on +set head on +set arraysize 1 +set space 1 +set verify off +set pages 25 +set lines 80 +set linesize 500 +set termout on +--clear screen +set serveroutput on; + +--spool find_all_privs.lis + +undefine user_to_find +undefine output_method +undefine file_name +undefine output_dir + +set feed off +col system_date noprint new_value val_system_date + +select to_char (sysdate, 'Dy Mon dd hh24:mi:ss yyyy') system_date from sys.dual; + +set feed on + +prompt find_all_privs: Release 1.9.0.0.0 - Production on &val_system_date +prompt Copyright (c) 2004 - 2014 PeteFinnigan.com Limited. All rights reserved. +prompt +accept user_to_find char prompt 'NAME OF USER TO CHECK [ORCL]: ' default orcl +accept output_method char prompt 'OUTPUT METHOD Screen/File [S]: ' default s +accept file_name char prompt 'FILE NAME FOR OUTPUT [priv.lst]: ' default priv.lst +accept output_dir char prompt 'OUTPUT DIRECTORY [DIRECTORY or file (/tmp)]: ' default "/tmp" +accept examine_tables char prompt 'EXAMINE TABLE PRIVILEGES? [N/Y]: ' default "N" +prompt + +declare + -- + lv_tabs number := 0; + lg_fptr utl_file.file_type; + lv_file_or_screen varchar2 (1) := 'S'; + + -- + procedure open_file (pv_file_name in varchar2, + pv_dir_name in varchar2) is + begin + lg_fptr:=utl_file.fopen(pv_dir_name,pv_file_name,'A'); + exception + when utl_file.invalid_path then + dbms_output.put_line('invalid path'); + when utl_file.invalid_mode then + dbms_output.put_line('invalid mode'); + when utl_file.invalid_filehandle then + dbms_output.put_line('invalid filehandle'); + when utl_file.invalid_operation then + dbms_output.put_line('invalid operation'); + when utl_file.read_error then + dbms_output.put_line('read error'); + when utl_file.write_error then + dbms_output.put_line('write error'); + when utl_file.internal_error then + dbms_output.put_line('internal error'); + when others then + dbms_output.put_line('ERROR (open_file) => '||sqlcode); + dbms_output.put_line('MSG (open_file) => '||sqlerrm); + + end open_file; + -- + procedure close_file is + begin + utl_file.fclose(lg_fptr); + exception + when utl_file.invalid_path then + dbms_output.put_line('invalid path'); + when utl_file.invalid_mode then + dbms_output.put_line('invalid mode'); + when utl_file.invalid_filehandle then + dbms_output.put_line('invalid filehandle'); + when utl_file.invalid_operation then + dbms_output.put_line('invalid operation'); + when utl_file.read_error then + dbms_output.put_line('read error'); + when utl_file.write_error then + dbms_output.put_line('write error'); + when utl_file.internal_error then + dbms_output.put_line('internal error'); + when others then + dbms_output.put_line('ERROR (close_file) => '||sqlcode); + dbms_output.put_line('MSG (close_file) => '||sqlerrm); + + end close_file; + -- + procedure write_op (pv_str in varchar2) is + begin + if lv_file_or_screen='S' then + dbms_output.put_line(pv_str); + else + utl_file.put_line(lg_fptr,pv_str); + end if; + exception + when utl_file.invalid_path then + dbms_output.put_line('invalid path'); + when utl_file.invalid_mode then + dbms_output.put_line('invalid mode'); + when utl_file.invalid_filehandle then + dbms_output.put_line('invalid filehandle'); + when utl_file.invalid_operation then + dbms_output.put_line('invalid operation'); + when utl_file.read_error then + dbms_output.put_line('read error'); + when utl_file.write_error then + dbms_output.put_line('write error'); + when utl_file.internal_error then + dbms_output.put_line('internal error'); + when others then + dbms_output.put_line('ERROR (write_op) => '||sqlcode); + dbms_output.put_line('MSG (write_op) => '||sqlerrm); + + end write_op; + -- + procedure get_privs (pv_grantee in varchar2, lv_tabstop in out number) + is + -- + lv_tab varchar2 (50) := null; + lv_loop number; + + -- + cursor c_main ( + cp_grantee in varchar2) + is + -- the hint is commented out as David got an ORA-12801 and an ORA-00600 because of the + -- hint. You can try the hint, if it works, then fine, if not comment out +-- select /*+ PARALLEL a */ + select + a.* + from (select 'ROLE' typ, + grantee grantee, + granted_role priv, + admin_option ad, + '--' tabnm, + '--' colnm, + '--' owner, + r.password_required pwd + from dba_role_privs rp join dba_roles r on rp.granted_role = r.role + where grantee = cp_grantee + union + select 'SYSTEM' typ, + grantee grantee, + privilege priv, + admin_option ad, + '--' tabnm, + '--' colnm, + '--' owner, + '--' pwd + from dba_sys_privs + where grantee = cp_grantee + union + select 'TABLE' typ, + grantee grantee, + privilege priv, + grantable ad, + table_name tabnm, + '--' colnm, + owner owner, + '--' pwd + from dba_tab_privs + where grantee = cp_grantee and '&&examine_tables' = 'Y' + union + select 'COLUMN' typ, + grantee grantee, + privilege priv, + grantable ad, + table_name tabnm, + column_name colnm, + owner owner, + '--' pwd + from dba_col_privs + where grantee = cp_grantee and '&&examine_tables' = 'Y') a + order by case + when a.typ = 'ROLE' then 4 + when a.typ = 'SYSTEM' then 1 + when a.typ = 'TABLE' then 2 + when a.typ = 'COLUMN' then 3 + else 5 + end, + case when a.priv in ('EXECUTE') then 1 when a.priv in ('SELECT', 'UPDATE', 'INSERT', 'DELETE') then 3 else 2 end, + a.tabnm, + a.colnm, + a.priv; + + begin + lv_tabstop := lv_tabstop + 1; + + for lv_loop in 1 .. lv_tabstop + loop + lv_tab := lv_tab || chr (9); + end loop; + + for lv_main in c_main (pv_grantee) + loop + if lv_main.typ = 'ROLE' then + write_op ( + lv_tab + || 'ROLE => ' + || lv_main.priv + || case when lv_main.pwd = 'YES' then ' (password)' else null end + || ' which contains =>'); + get_privs (lv_main.priv, lv_tabstop); + elsif lv_main.typ = 'SYSTEM' then + write_op (lv_tab || 'SYS PRIV => ' || lv_main.priv || ' grantable => ' || lv_main.ad); + elsif lv_main.typ = 'TABLE' then + write_op ( + lv_tab + || 'TABLE PRIV => ' + || lv_main.priv + || ' object => ' + || lv_main.owner + || '.' + || lv_main.tabnm + || ' grantable => ' + || lv_main.ad); + elsif lv_main.typ = 'COLUMN' then + write_op ( + lv_tab + || 'COL PRIV => ' + || lv_main.priv + || ' object => ' + || lv_main.owner + || '.' + || lv_main.tabnm + || ' column_name => ' + || lv_main.colnm + || ' grantable => ' + || lv_main.ad); + end if; + end loop; + + lv_tabstop := lv_tabstop - 1; + lv_tab := ''; + exception + when others then + dbms_output.put_line ('ERROR (get_privs) => ' || sqlcode); + dbms_output.put_line ('MSG (get_privs) => ' || sqlerrm); + end get_privs; + +begin + lv_file_or_screen := upper ('&&output_method'); + + if lv_file_or_screen = 'F' then + open_file ('&&file_name', '&&output_dir'); + end if; + + write_op ( + 'User => ' || upper ('&&user_to_find') || ' has been granted the following privileges'); + write_op ('===================================================================='); + get_privs (upper ('&&user_to_find'), lv_tabs); + + if lv_file_or_screen = 'F' then + close_file; + end if; +exception + when others then + dbms_output.put_line ('ERROR (main) => ' || sqlcode); + dbms_output.put_line ('MSG (main) => ' || sqlerrm); +end; +/ + +prompt for updates please visit http://www.petefinnigan.com/tools.htm +prompt +--spool off + +whenever sqlerror continue \ No newline at end of file diff --git a/csierra/fk_indexes.sql b/csierra/fk_indexes.sql new file mode 100644 index 0000000..94f68ad --- /dev/null +++ b/csierra/fk_indexes.sql @@ -0,0 +1,173 @@ +set heading off +select 'Write output to table FOREIGN_KEY_EXCEPTIONS created in this schema Y/N:' from dual; +select upper(nvl('&&WRITE_TO_TABLE_Y_N','N')) from dual; +select 'Schema Name:',upper('&&SCHEMA') from dual; +set echo off +SET SERVEROUTPUT ON FORMAT WRAPPED + +declare + WRITE_TO_TABLE_Y_N VARCHAR2(1); + from_schema VARCHAR2(30); + to_schema VARCHAR2(30); + pl_cons_column VARCHAR2(30); + pl_foreign_key VARCHAR2(2000); + pl_ind_column VARCHAR2(30); + pl_ind_name VARCHAR2(128); + pl_ind_owner VARCHAR2(30); + pl_index VARCHAR2(2000); + f_owner VARCHAR2(30); + f_table_name VARCHAR2(30); +/* + Cursor c1 simply selects each Foreign Key constraint from the + DBA View DBA_CONSTRAINTS. No need at this stage to limit the + query to 'ENABLED' constraints, we'll simply report the status + in the log file. For each constraint, we'll construct the column list, + using cursor c2, which combine to form the foreign key constraint + returned in cursor c1 +*/ + CURSOR c1 IS SELECT constraint_name,owner,table_name,status,r_owner,r_constraint_name + FROM dba_constraints + WHERE constraint_type='R' + AND owner between upper(from_schema) and upper(to_schema) + ORDER BY owner; + CURSOR c2(cons_name VARCHAR2,cons_owner VARCHAR2) IS SELECT column_name + FROM dba_cons_columns + WHERE constraint_name=cons_name + AND owner=cons_owner + ORDER BY dba_cons_columns.position; +/* + For each returned constraint, we need to fins a matching index, firstly + we fetch each index name with c3, and then construct the index columns + with cursor c4 in their correct order until we find a match with the + foreign key constraint +*/ + CURSOR c3(ind_table varchar2,tab_owner varchar2) IS + SELECT index_name, owner + FROM dba_indexes + WHERE table_name=ind_table + AND table_owner=tab_owner; + CURSOR c4(ind_name varchar2,ind_owner varchar2) IS + SELECT column_name + FROM dba_ind_columns + WHERE INDEX_NAME=ind_name + AND INDEX_OWNER=ind_owner + ORDER BY dba_ind_columns.column_position; + CURSOR c5(for_owner varchar2,for_constraint varchar2) IS + SELECT owner,table_name + FROM dba_constraints + WHERE OWNER=for_owner + AND CONSTRAINT_NAME=for_constraint; + +BEGIN + WRITE_TO_TABLE_Y_N:='&&WRITE_TO_TABLE_Y_N'; + from_schema:= '&&SCHEMA'; + IF from_schema = 'ALL' THEN + begin + from_schema := 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'; + to_schema := 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'; + end; + ELSE + to_schema := from_schema; + END IF; + DBMS_OUTPUT.PUT_LINE(' Missing Indexes for Foreign Keys'); + DBMS_OUTPUT.PUT_LINE(' --------------------------------'); + + FOR c1_rec in c1 LOOP +/* looping for each foreign key constraint */ + pl_cons_column := NULL; + pl_foreign_key := NULL; + pl_ind_column := NULL; + pl_ind_name := NULL; + pl_ind_owner := NULL; + pl_index := NULL; + f_owner:=NULL; + F_table_name:=NULL; +OPEN c5(c1_rec.r_owner,c1_rec.r_constraint_name); +FETCH c5 INTO f_owner,f_table_name; +CLOSE c5; + OPEN c2(c1_rec.constraint_name,c1_rec.owner); + FETCH c2 INTO pl_cons_column; + pl_foreign_key := pl_cons_column; -- the first col in the foreign key +<> + LOOP +/* + constructing the foreign key columns, delimiting each column with a ',' +*/ + FETCH c2 into pl_cons_column; + EXIT WHEN c2%NOTFOUND; + pl_foreign_key := pl_foreign_key||','||pl_cons_column; + END LOOP constraint_names; +/* +we now have a table and foreign key definition for which we need an index */ + CLOSE c2; + OPEN c3(c1_rec.table_name,c1_rec.owner); +<> + LOOP +/* for each index found for this table */ + FETCH c3 INTO pl_ind_name,pl_ind_owner; + EXIT WHEN c3%NOTFOUND; + OPEN c4(pl_ind_name,pl_ind_owner); + FETCH c4 INTO pl_ind_column; + pl_index := pl_ind_column; -- the first column in the index + IF pl_index=pl_foreign_key THEN -- check this doesn't already match + CLOSE c4; -- the foreign key + EXIT index_name; + END IF; + IF pl_index = SUBSTR(pl_foreign_key,1,LENGTH(pl_index)) THEN +/* + we only need construct the whole index while it's leading edge still + matches the constrained foreign key columns +*/ +<> + LOOP +/* construct the whole index in the same way as the foreign key */ + FETCH c4 INTO pl_ind_column; + EXIT WHEN c4%NOTFOUND; + pl_index:= pl_index||','||pl_ind_column; +/* + we do not need to continue with the index name loop if we already have a + match on the foreign key +*/ + IF pl_index=pl_foreign_key + THEN + CLOSE c4; + EXIT index_name; + END IF; +/* + if the leading edge differs - go back around the loop to see if there is a + subsequent index that matches +*/ + IF pl_index != SUBSTR(pl_foreign_key,1,LENGTH(pl_index)) + THEN + EXIT index_columns; + END IF; + END LOOP index_columns; + END IF; + CLOSE c4; + END LOOP index_name; + CLOSE c3; + IF pl_index != pl_foreign_key OR pl_index IS NULL THEN +/* + Alternative means of output having first set serveroutput using: + SET SERVEROUTPUT ON SIZE n + where n is between 2000 and 1000000 to set the output limit. + DBMS_OUTPUT.PUT_LINE(c1_rec.owner||'.'||c1_rec.constraint_name); +*/ +IF WRITE_TO_TABLE_Y_N ='Y' or WRITE_TO_TABLE_Y_N ='y' THEN + INSERT INTO foreign_key_exceptions VALUES (c1_rec.owner,c1_rec.constraint_name,c1_rec.status, c1_rec.table_name,pl_foreign_key); +END IF; +/* sdixon: Changed from EXECute immedaite which generated ORA-984 - from comment HP ID 2327281 + EXECUTE IMMEDIATE 'INSERT INTO foreign_key_exceptions VALUES (c1_rec.owner,c1_rec.constraint_name,c1_rec.status, c1_rec.table_name,pl_foreign_key)'; +*/ +dbms_output.put_line('Constraint '||c1_rec.constraint_name||'('||c1_rec.status||') : Changing data in table '||f_owner||'.'||f_table_name||' will lock table '||c1_rec.owner||'.'||c1_rec.table_name); +dbms_output.put_line('Create index for table '||c1_rec.owner||'.'||c1_rec.table_name||' on columns '||pl_foreign_key); +dbms_output.put_line('************************'); + + COMMIT; + END IF; + END LOOP; +END; +/ +undefine WRITE_TO_TABLE_Y_N +undefine SCHEMA + diff --git a/csierra/gc_status_setup.sql b/csierra/gc_status_setup.sql new file mode 100644 index 0000000..626150a --- /dev/null +++ b/csierra/gc_status_setup.sql @@ -0,0 +1,212 @@ +-- gc_status_setup.sql - Create gc_status Table and merge_gc_status Procedure +DECLARE + l_exists NUMBER; + l_sql_statement VARCHAR2(32767) := q'[ +CREATE TABLE c##iod.gc_status ( + -- /* key: version, db_domain, db_name, pdb_name, gc_status */ + version DATE NOT NULL +, db_domain VARCHAR2(64) NOT NULL +, db_name VARCHAR2(9) NOT NULL +, pdb_name VARCHAR2(30) NOT NULL +, gc_status VARCHAR2(16) NOT NULL + -- oci domains +, host_name VARCHAR2(64) NOT NULL +, realm_type VARCHAR2(1) NOT NULL +, realm_type_order_by NUMBER NOT NULL +, realm VARCHAR2(4) NOT NULL +, realm_order_by NUMBER NOT NULL +, region VARCHAR2(64) NOT NULL +, region_acronym VARCHAR2(4) NOT NULL +, region_order_by NUMBER NOT NULL +, locale VARCHAR2(4) NOT NULL +, locale_order_by NUMBER NOT NULL + -- data attributes +, tables NUMBER NOT NULL +, num_rows NUMBER NOT NULL +, blocks NUMBER NOT NULL +) +PARTITION BY RANGE (version) +INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) +( +PARTITION before_2016_01_01 VALUES LESS THAN (TO_DATE('2016-01-01', 'YYYY-MM-DD')) +) +ROW STORE COMPRESS ADVANCED +TABLESPACE IOD +]'; + l_sql_statement2 VARCHAR2(32767) := q'[ +CREATE UNIQUE INDEX c##iod.gc_status_pk +ON c##iod.gc_status +(version, db_domain, db_name, pdb_name, gc_status) +LOCAL +COMPRESS ADVANCED LOW +TABLESPACE IOD +]'; + l_sql_statement3 VARCHAR2(32767) := q'[ +ALTER TABLE c##iod.gc_status ADD PRIMARY KEY +(version, db_domain, db_name, pdb_name, gc_status) +USING INDEX c##iod.gc_status_pk +]'; +BEGIN + SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER(TRIM('c##iod')) AND table_name = UPPER('gc_status'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement; + END IF; + SELECT COUNT(*) INTO l_exists FROM dba_indexes WHERE owner = UPPER(TRIM('c##iod')) AND index_name = UPPER('gc_status_pk'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement2; + EXECUTE IMMEDIATE l_sql_statement3; + END IF; +END; +/ + +CREATE OR REPLACE +PROCEDURE c##iod.merge_gc_status ( + p_version IN VARCHAR2 +, p_db_domain IN VARCHAR2 +, p_db_name IN VARCHAR2 +, p_pdb_name IN VARCHAR2 +, p_host_name IN VARCHAR2 +, p_gc_status IN VARCHAR2 +, p_tables IN VARCHAR2 +, p_num_rows IN VARCHAR2 +, p_blocks IN VARCHAR2 +) +IS + r c##iod.gc_status%ROWTYPE; +BEGIN + IF p_num_rows IS NOT NULL AND p_blocks IS NOT NULL THEN + r.version := TO_DATE(p_version, 'YYYY-MM-DD'); + r.db_domain := LOWER(p_db_domain); + r.db_name := UPPER(p_db_name); + r.pdb_name := p_pdb_name; + r.host_name := p_host_name; + r.realm_type := c##iod.IOD_META_AUX.get_realm_type(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.realm_type_order_by := c##iod.IOD_META_AUX.get_realm_type_order_by(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.realm := c##iod.IOD_META_AUX.get_realm(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.realm_order_by := c##iod.IOD_META_AUX.get_realm_order_by(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.region := c##iod.IOD_META_AUX.get_region(p_host_name); + r.region_acronym := c##iod.IOD_META_AUX.get_region_acronym(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.region_order_by := c##iod.IOD_META_AUX.get_region_order_by(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.locale := c##iod.IOD_META_AUX.get_locale(LOWER(p_db_domain)); + r.locale_order_by := c##iod.IOD_META_AUX.get_locale_order_by(LOWER(p_db_domain)); + r.gc_status := p_gc_status; + r.tables := p_tables; + r.num_rows := p_num_rows; + r.blocks := p_blocks; + -- + DELETE c##iod.gc_status WHERE version = r.version AND db_domain = r.db_domain AND db_name = r.db_name AND pdb_name = r.pdb_name AND gc_status = r.gc_status; + INSERT INTO c##iod.gc_status VALUES r; + COMMIT; + END IF; +END merge_gc_status; +/ +SHOW ERRORS; + +/************************************************************************************************/ + +-- gc_status_setup.sql - Create gc_status Table and merge_gc_status Procedure +DECLARE + l_exists NUMBER; + l_sql_statement VARCHAR2(32767) := q'[ +CREATE TABLE c##iod.gc_gt_20k ( + -- /* key: version, db_domain, db_name, pdb_name, owner, table_name */ + version DATE NOT NULL +, db_domain VARCHAR2(64) NOT NULL +, db_name VARCHAR2(9) NOT NULL +, pdb_name VARCHAR2(30) NOT NULL +, owner VARCHAR2(128) NOT NULL +, table_name VARCHAR2(128) NOT NULL + -- oci domains +, host_name VARCHAR2(64) NOT NULL +, realm_type VARCHAR2(1) NOT NULL +, realm_type_order_by NUMBER NOT NULL +, realm VARCHAR2(4) NOT NULL +, realm_order_by NUMBER NOT NULL +, region VARCHAR2(64) NOT NULL +, region_acronym VARCHAR2(4) NOT NULL +, region_order_by NUMBER NOT NULL +, locale VARCHAR2(4) NOT NULL +, locale_order_by NUMBER NOT NULL + -- data attributes +, gc_status VARCHAR2(16) NOT NULL +, num_rows NUMBER NOT NULL +, blocks NUMBER NOT NULL +) +PARTITION BY RANGE (version) +INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) +( +PARTITION before_2016_01_01 VALUES LESS THAN (TO_DATE('2016-01-01', 'YYYY-MM-DD')) +) +ROW STORE COMPRESS ADVANCED +TABLESPACE IOD +]'; + l_sql_statement2 VARCHAR2(32767) := q'[ +CREATE UNIQUE INDEX c##iod.gc_gt_20k_pk +ON c##iod.gc_gt_20k +(version, db_domain, db_name, pdb_name, owner, table_name) +LOCAL +COMPRESS ADVANCED LOW +TABLESPACE IOD +]'; + l_sql_statement3 VARCHAR2(32767) := q'[ +ALTER TABLE c##iod.gc_gt_20k ADD PRIMARY KEY +(version, db_domain, db_name, pdb_name, owner, table_name) +USING INDEX c##iod.gc_gt_20k_pk +]'; +BEGIN + SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER(TRIM('c##iod')) AND table_name = UPPER('gc_gt_20k'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement; + END IF; + SELECT COUNT(*) INTO l_exists FROM dba_indexes WHERE owner = UPPER(TRIM('c##iod')) AND index_name = UPPER('gc_gt_20k_pk'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement2; + EXECUTE IMMEDIATE l_sql_statement3; + END IF; +END; +/ + +CREATE OR REPLACE +PROCEDURE c##iod.merge_gt_20k ( + p_version IN VARCHAR2 +, p_db_domain IN VARCHAR2 +, p_db_name IN VARCHAR2 +, p_pdb_name IN VARCHAR2 +, p_host_name IN VARCHAR2 +, p_gc_status IN VARCHAR2 +, p_owner IN VARCHAR2 +, p_table_name IN VARCHAR2 +, p_num_rows IN VARCHAR2 +, p_blocks IN VARCHAR2 +) +IS + r c##iod.gc_gt_20k%ROWTYPE; +BEGIN + IF p_num_rows IS NOT NULL AND p_blocks IS NOT NULL THEN + r.version := TO_DATE(p_version, 'YYYY-MM-DD'); + r.db_domain := LOWER(p_db_domain); + r.db_name := UPPER(p_db_name); + r.pdb_name := p_pdb_name; + r.host_name := p_host_name; + r.realm_type := c##iod.IOD_META_AUX.get_realm_type(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.realm_type_order_by := c##iod.IOD_META_AUX.get_realm_type_order_by(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.realm := c##iod.IOD_META_AUX.get_realm(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.realm_order_by := c##iod.IOD_META_AUX.get_realm_order_by(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.region := c##iod.IOD_META_AUX.get_region(p_host_name); + r.region_acronym := c##iod.IOD_META_AUX.get_region_acronym(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.region_order_by := c##iod.IOD_META_AUX.get_region_order_by(c##iod.IOD_META_AUX.get_region(p_host_name)); + r.locale := c##iod.IOD_META_AUX.get_locale(LOWER(p_db_domain)); + r.locale_order_by := c##iod.IOD_META_AUX.get_locale_order_by(LOWER(p_db_domain)); + r.gc_status := p_gc_status; + r.owner := p_owner; + r.table_name := p_table_name; + r.num_rows := p_num_rows; + r.blocks := p_blocks; + -- + DELETE c##iod.gc_gt_20k WHERE version = r.version AND db_domain = r.db_domain AND db_name = r.db_name AND pdb_name = r.pdb_name AND owner = r.owner AND table_name = r.table_name; + INSERT INTO c##iod.gc_gt_20k VALUES r; + COMMIT; + END IF; +END merge_gt_20k; +/ +SHOW ERRORS; diff --git a/csierra/get_compartments3.sql b/csierra/get_compartments3.sql new file mode 100644 index 0000000..93de9bf --- /dev/null +++ b/csierra/get_compartments3.sql @@ -0,0 +1,301 @@ +SET HEA OFF PAGES 0 LINES 2000; +SPO compartments3.txt +SELECT '('''|| + compartment_id||''','''|| + tenant_id||''','''|| + phonebook||''','''|| + compartment_name||''')' + AS output + FROM ( +SELECT DISTINCT + cd1.compartment_id, + cd1.tenant_id, + COALESCE(cd1.phonebook, cd2.phonebook) AS phonebook, + CASE WHEN cd1.phonebook IS NULL THEN COALESCE(cd2.compartment_name, cd1.compartment_name) ELSE COALESCE(cd1.compartment_name, cd2.compartment_name) END AS compartment_name + FROM comsys.vw_compartment_dim_v2 cd1, + comsys.vw_compartment_dim_v2 cd2 + WHERE cd2.compartment_id(+) = cd1.tenant_id +-- AND cd2.phonebook IS NOT NULL + AND (1,cd1.COMPARTMENT_ID) IN +((1,'ocid1.compartment.oc1..aaaaaaaa6eraoi7ejxxhbreofqdsuo4hgoud2rhyhxq3tiiydsqibzv3dbca') +,(1,'ocid1.compartment.oc1..aaaaaaaanhumgkb2smbkjifmclcoesz36tyb5xj6dakuwlmyjsjkuz625jiq') +,(1,'ocid1.compartment.oc1..aaaaaaaavgjv6unj6ewi7sgs4cwwtptee7gnxo7nx7hkx2jgazpw2iika4gq') +,(1,'ocid1.compartment.oc3..aaaaaaaa5q6gcj2wsxphilqx7tazea7zl3pt7nxufidwk6bkim4w5ljgerar') +,(1,'ocid1.compartment.oc3..aaaaaaaabvvv5wm232k4ybq7lw4okso2rrkblerizhfpengd6afgsbr5j3ta') +,(1,'ocid1.compartment.region1..aaaaaaaa2jzu5fvtsjcphqf2eyecc4epfm26fueanebx7txkejrv5tucnsnq') +,(1,'ocid1.compartment.region1..aaaaaaaa2mree44sq5xvu2c3v6sgjiwvkxg2w3pfu2clcugtbzewacwvksya') +,(1,'ocid1.compartment.region1..aaaaaaaa3dp7hvi3oymvdm6debr6s3hi2rtsr3t6hde7ziywgbald5vq5nha') +,(1,'ocid1.compartment.region1..aaaaaaaa3jt5assdgul4mkqyyrbyrriyplzy4e52j2clx5actudgk2wamweq') +,(1,'ocid1.compartment.region1..aaaaaaaa3jxgqq5rmexrjlsgjjftu6jydbif2jkvp4vptpxoyye2c7jaja3a') +,(1,'ocid1.compartment.region1..aaaaaaaa3nqvtt3dhh7jftr6ce2rldyy7itu2hiwk5rb72ztttf4keh7bvha') +,(1,'ocid1.compartment.region1..aaaaaaaa3qfrs5rcie2qduuxu3sbcdqwnct4ygkruu4dnqdth7nr5b2avrya') +,(1,'ocid1.compartment.region1..aaaaaaaa3ue7lyu5r33fvtofupi4eurjuzp4djr5i6tshk6pc5l5wg7rmqaa') +,(1,'ocid1.compartment.region1..aaaaaaaa3vst6g7gh6ukuccjenel5pfww5gauxq5omvgezjeekik6b2ytska') +,(1,'ocid1.compartment.region1..aaaaaaaa3xj32gh6rmdhl5vprfahmzu2bdthfdero2e6euzg5tz4ea2zuzbq') +,(1,'ocid1.compartment.region1..aaaaaaaa3z3nq254iroq3ugczqje4jskj4pztvgul2u4m2obmqpk6rm5g34a') +,(1,'ocid1.compartment.region1..aaaaaaaa4ba5z7n4mzj24hpmetvrrcchylrkwwwpgbvy22o5mf3fckiqqinq') +,(1,'ocid1.compartment.region1..aaaaaaaa4cklk4my5sik6nhh5wbfhhk4shel6jt2l5ligvetpulc32bberkq') +,(1,'ocid1.compartment.region1..aaaaaaaa4eql2fnwk5szqrnawde23rsk6jy3vv4qtsmsvwpj2vnbetpzr7da') +,(1,'ocid1.compartment.region1..aaaaaaaa4fdnrkrtddt24i2etj72dt3eb7p2ithuidalfsac2ub5aomfqivq') +,(1,'ocid1.compartment.region1..aaaaaaaa4kas2ya4gd7jeg76q23axs65zx7zrayo4x364gbqbfb6c7tyvcxq') +,(1,'ocid1.compartment.region1..aaaaaaaa4kas2ya4gd7jeg76q23axs65zx7zrayo4x364gbqbfb6c7tyvcxqglozanor') +,(1,'ocid1.compartment.region1..aaaaaaaa4kas2ya4gd7jeg76q23axs65zx7zrayo4x364gbqbfb6c7tywdqr') +,(1,'ocid1.compartment.region1..aaaaaaaa4srmjhxsqcnlexfhsrlt77kxmgatosgsfbvbx35eq2zbaaegrpka') +,(1,'ocid1.compartment.region1..aaaaaaaa4tg7jzwdq55ctoxnia6qdvedysgeqw2af3xk2oa5uy5r5r6cptxq') +,(1,'ocid1.compartment.region1..aaaaaaaa4u3dss6xj5xzgy2bqc7b4oa2oybja4u2r6szvi2f72enshadcbbq') +,(1,'ocid1.compartment.region1..aaaaaaaa52puaf5tujenbdqptx66yik43iqw4voqxkqolajsbmkk4iaavrlq') +,(1,'ocid1.compartment.region1..aaaaaaaa53p4tw6lxw74fhlw2ljxtq5viovvzjb5t4gxanwf63lbu2ufr47a') +,(1,'ocid1.compartment.region1..aaaaaaaa55hhnym63ve4dikkl3npe6ajxtsfsfmwbd6dwnm6mx4ym7ki6rya') +,(1,'ocid1.compartment.region1..aaaaaaaa5fklicbmfa3oec2c4b22rrkoaffzed7qz7adas2clnhqjqtreyiq') +,(1,'ocid1.compartment.region1..aaaaaaaa5mi2sa7virguozt6raomqi7ltyag2nxx3s52xzc56hgpyvi3rsiq') +,(1,'ocid1.compartment.region1..aaaaaaaa5ojcpwpzmjnhbqunr72egsx6wmosouc2tz76kwqn3gbwbrppfp6a') +,(1,'ocid1.compartment.region1..aaaaaaaa5xp62xzacqqiujtyhujphr3i3tps7ey2xm3pvj6his6rzsnevl2q') +,(1,'ocid1.compartment.region1..aaaaaaaa5yhpsx2aslt2oovmw4tmjklrluqdnjcqoslzimszrhpmx6h2cida') +,(1,'ocid1.compartment.region1..aaaaaaaa6hyoi2vi6us45tizl3mhyu5ch3pze26abxx6obhj5x3n5v2o5foa') +,(1,'ocid1.compartment.region1..aaaaaaaa6ksbordbojrbmcysyvpnw6kalequhjdzrgbgoaygebzxmaq3qw5q') +,(1,'ocid1.compartment.region1..aaaaaaaa6lrgenm3lisot5hsmyaslc7oe5oarrlal7xjvdt47izqyh6dn3ca') +,(1,'ocid1.compartment.region1..aaaaaaaa6qfgxwlqlkcooyvdaqadietf3lzyvgeii326z74l2luhn4mqwfra') +,(1,'ocid1.compartment.region1..aaaaaaaa6x7yozxemlc4kj5jh6dsfxlje5kqm4yjd3yahebxrdeyozhzwzga') +,(1,'ocid1.compartment.region1..aaaaaaaa6yc4u3qkgmm4wko3sjbkampkhzkykoofkyqdg3ch5chel3vdw5jq') +,(1,'ocid1.compartment.region1..aaaaaaaa74s6lswgvbmvlo3hb3vknhic2y4rn6rx4osijbxmbve2osnx64qq') +,(1,'ocid1.compartment.region1..aaaaaaaa77flnguityl4hozlj7t5tbl5efliolej3dk24ocr4se3v3bawsma') +,(1,'ocid1.compartment.region1..aaaaaaaa7ma75asau7lf7soop35joh4q2agiebt6xlr7s6ok3lmmmjlpzm6q') +,(1,'ocid1.compartment.region1..aaaaaaaa7obc7lzreay7nz3x62uww6x5idi5qal2lxmq2bcg3mvt5aexhv6a') +,(1,'ocid1.compartment.region1..aaaaaaaa7poxdifodamxqepycl675x4xpun7zef4b5tkjwazrlnznmqdk4xq') +,(1,'ocid1.compartment.region1..aaaaaaaa7upwc5en6jw26je3k6zt4ypqh6nq4nya6hoofywoa7bfa33hssva') +,(1,'ocid1.compartment.region1..aaaaaaaaafikuoxzdgeyuuhpsptecfchmbtjhn6gddmthvovh5jkdwcjs7jq') +,(1,'ocid1.compartment.region1..aaaaaaaaamf6bi3q6ftbuecdff4zzidamybxpbtmypvrqjj4e4kbilmdsjsq') +,(1,'ocid1.compartment.region1..aaaaaaaaaow4t6ry42vwfzzakx4grao6ui7elzr7ph5k2ew2meazisaod76q') +,(1,'ocid1.compartment.region1..aaaaaaaaapbnmndc2xe5qhyp5nxogosgtlo2wym2qy7txdjv42zckbmxc4ra') +,(1,'ocid1.compartment.region1..aaaaaaaaavbgabnxdxxr4ghs3scy5udbzrvsxdnrhe7vf273fkm4ocucjcta') +,(1,'ocid1.compartment.region1..aaaaaaaaavqld4mcenj55d3lsy4y5k23jaqkgurca2x2hu5oxel337duwztq') +,(1,'ocid1.compartment.region1..aaaaaaaaayxdzwdk56y3bswv3gu5gybcs6izntzwz7725bwzr4og5xwqqrtq') +,(1,'ocid1.compartment.region1..aaaaaaaaaz5ly373h37j2cz7o356htnsayzqt3osmexec6l4qmaloeunleia') +,(1,'ocid1.compartment.region1..aaaaaaaabep2qo2qsr35yu5gjt7bxaq6rgqvbam4wlltb2iwu2njeef4fzoa') +,(1,'ocid1.compartment.region1..aaaaaaaabj6ax3v5iudblhda7k437u3i3kfwosm47u7pv4fuuayey6sbllsq') +,(1,'ocid1.compartment.region1..aaaaaaaabkjroxcxiqlvrgrzfoxzgzvazpvv7fpl6zuid5wqwfawykav3cqa') +,(1,'ocid1.compartment.region1..aaaaaaaaboqe2mwwuw2oixxxzwegl77bxezgw4cxrwib6udozjvqc7niq2eq') +,(1,'ocid1.compartment.region1..aaaaaaaabqz3t4fwmhscgcjqwqcvz6gjwrvecmop4pzoysuehhyw6zcxzh3a') +,(1,'ocid1.compartment.region1..aaaaaaaabs6tfoi7cdrrboxlpvj6sa7gxdtwgtwjx7jdn2guz3nef37kk72q') +,(1,'ocid1.compartment.region1..aaaaaaaabsyof5ypzlbegs5torzq5g3jd375kow6k2nqferhtcaknudewcta') +,(1,'ocid1.compartment.region1..aaaaaaaabun7qeu6krgtnardgaiczykql46ogkaw52ux744inmswlpzgpdna') +,(1,'ocid1.compartment.region1..aaaaaaaacc3jbh7gf33uuwbfk3wstedhaznp6ep2abpf6jysytkyifac6grq') +,(1,'ocid1.compartment.region1..aaaaaaaacdf7xnpg4mx7gxlh7tpxowlex6fm6xibccpdbtanz7u3guvozrha') +,(1,'ocid1.compartment.region1..aaaaaaaacgrhixxvczz25rmdanmvsmglyf2xyek7mxiolzzb4epzurpxnh4a') +,(1,'ocid1.compartment.region1..aaaaaaaacjezobf5xqbn2pnqp643oa6g2g7p2rs5grlb7gsql7era5n53nka') +,(1,'ocid1.compartment.region1..aaaaaaaackre52dnmmfv5fgpwowfoj6w4yjlgpr7qpsrra7ridpcyae7duga') +,(1,'ocid1.compartment.region1..aaaaaaaacmcqxbfnspbbis2ls256qth77rcjrnmhiq22caidba2wl47wltmq') +,(1,'ocid1.compartment.region1..aaaaaaaacuisfpauqqirgfes4ice5njxeo4h4jeonoom53xbw2srqb6bvima') +,(1,'ocid1.compartment.region1..aaaaaaaacxdjk3qsheujgjnycjovv43ymgbcv3el3oizhpvrdww54keccgqq') +,(1,'ocid1.compartment.region1..aaaaaaaacxzm4w66aiggmhbkxnctcmab6tsvgar2vwk662wx7wlkeedkcwoa') +,(1,'ocid1.compartment.region1..aaaaaaaad6fisnbwimdkwhwm5uc5nz2te6bt3uniegrdytm3k4gurwp3utba') +,(1,'ocid1.compartment.region1..aaaaaaaadazmzn66nvyxxcyysa4v7otrrjydxcupnckn7zjoi57q7lxr7s3q') +,(1,'ocid1.compartment.region1..aaaaaaaadmyzeg6pniwefdcwisozu6c2hj57bv72eixeb4q2e54a7f6iuifa') +,(1,'ocid1.compartment.region1..aaaaaaaadphpatjmhbrchrypz5cfn5cm7jq3huz46loflqwe3ogigq6b7ueq') +,(1,'ocid1.compartment.region1..aaaaaaaadtpbxwngngwh5zywqlzbp5erqsu3nncxfgcgegpfj37ykjz4mfia') +,(1,'ocid1.compartment.region1..aaaaaaaadvwdund2iugueaqambcjyn3j6gj7z4sa4pgrw7xq5fe2tw2oogfq') +,(1,'ocid1.compartment.region1..aaaaaaaae34r3elxujh324e3k343gkuyssunfg3shpsznwguq6mqjwiokv3q') +,(1,'ocid1.compartment.region1..aaaaaaaae3a77bdjcyvrvyfcihoomuz6zzgymfat4gitj4gbmtwa54f3yyna') +,(1,'ocid1.compartment.region1..aaaaaaaae44ajxrcvbpf2ng4nj6aakqi67pg7y326aw3p4s6wtf2g2lucn2q') +,(1,'ocid1.compartment.region1..aaaaaaaaeeqb5ik5rbkic7na5lovmmhkbpwlno724adsyqxble5lv5hqkfxa') +,(1,'ocid1.compartment.region1..aaaaaaaaehbdhxegomnn2vrhy5eolagi7zdryoof3sackdhlvva6uasfuuma') +,(1,'ocid1.compartment.region1..aaaaaaaaehf72lcglmswvprebqyddwir5eczncqsbfr7qcayobwaphubt4ha') +,(1,'ocid1.compartment.region1..aaaaaaaaeigolyshlvfzps6ylib6z6wto5tenyroeal5s44lpzrvitb5bpwq') +,(1,'ocid1.compartment.region1..aaaaaaaaeiuqrhkbnzhpgzaglsqfhcmcvpaarevdfznguuewokdsm6wm5msa') +,(1,'ocid1.compartment.region1..aaaaaaaaettneisnttugd6owimyf7nue4fgqbxubnudarusiwkedngkfv3oq') +,(1,'ocid1.compartment.region1..aaaaaaaaevrbvusn7o7rotwg6c7vwlj2pbt3bbctuvl3v7weiidxs5kmsyha') +,(1,'ocid1.compartment.region1..aaaaaaaaex6j7x5fyrrmiu4ehpkr6nr6k4apb4tfmdo524dr4624haofdxqa') +,(1,'ocid1.compartment.region1..aaaaaaaaexwlz75rdnw3u6edq6oaa7m3ztusngpacy5qtvkfyd2ipnn77xuq') +,(1,'ocid1.compartment.region1..aaaaaaaaez73k3pqaaqieslnflwrtygydjtycv2jsbf2ntppsbo2yso2i6ca') +,(1,'ocid1.compartment.region1..aaaaaaaaf4m2u4ni22nbpyqgqsv3c6kg3bedwinkiwwpszevihaza3t5fiha') +,(1,'ocid1.compartment.region1..aaaaaaaaf5fhbpavaytvcusn2icpgdxquv6zydrwhpvkp7tyhfhpmcdo76ua') +,(1,'ocid1.compartment.region1..aaaaaaaafbxlzshslzn2ilu5ufyzvmehbqmijoz6ndtz7ngi2lhkbjmngysa') +,(1,'ocid1.compartment.region1..aaaaaaaafctjqimdg7thnqh3peys6ky4c2h7koczljrz5b6xbereffz3bq6q') +,(1,'ocid1.compartment.region1..aaaaaaaafe455rmmgqxv3khufoe4y5ymi5ymxlmrdxvbzktvnbsbn4v44yxa') +,(1,'ocid1.compartment.region1..aaaaaaaafejekbgcsse2cqt64glh5uuq3rin65qkcthljv6idbtwqgcs65wa') +,(1,'ocid1.compartment.region1..aaaaaaaaffc3ql6ey3qezcce7c42nst3xkhtm7hqkjmvdrkyqs2l6bkmulza') +,(1,'ocid1.compartment.region1..aaaaaaaafjlo5e4qpgegwyjgpr2nmtqjop62tqzds2uzzjgdeulujiplihpa') +,(1,'ocid1.compartment.region1..aaaaaaaafnxr7edq4tkwcqjlg2nbc2y4gx5d5nrt3e6alftqxx2gr3w5tqma') +,(1,'ocid1.compartment.region1..aaaaaaaafpzqnty3ew5bgivv2idkrzohijru55uujakhon6jszlgqolgdwqq') +,(1,'ocid1.compartment.region1..aaaaaaaafvghcqc5owexivm4y5rzarleflqtyiwdb3gn2mauszodsqh7aqba') +,(1,'ocid1.compartment.region1..aaaaaaaag6m44tt4zu5b6ii7uemub2cljjdzycpu75mfrwls7ihz4yj735vq') +,(1,'ocid1.compartment.region1..aaaaaaaagar6dwtjjnlfbm3pmfr7c5gowpzio7irazccqtr3oglnvkjjmdpa') +,(1,'ocid1.compartment.region1..aaaaaaaagfcvcd3umh4glt4xquq5gv3ojolrxokott64imaapaufivzjooia') +,(1,'ocid1.compartment.region1..aaaaaaaagrkgbo3hljqtlhwnvk45fktxxcn2l5oy3zcrhtjsgg3kra22pa2q') +,(1,'ocid1.compartment.region1..aaaaaaaagv3ijevwhg26civ327vggab4ajhocv2pbm4my6w72f7sgltynxiq') +,(1,'ocid1.compartment.region1..aaaaaaaah4ekmydam6ivtkdgv2aoo2sejjsnuahoztr4bpjnqiyly7kwxaeq') +,(1,'ocid1.compartment.region1..aaaaaaaah5cptfra3oqr27kxpcw4hasjdtxxj4hefzfsu74m3a7jovnn427q') +,(1,'ocid1.compartment.region1..aaaaaaaah5ltugrvgww2gc7jtxs27t6lchfooxrfr37sygcd3pdtl2dv3vgq') +,(1,'ocid1.compartment.region1..aaaaaaaahmfr6o7377co6jrwbmmbwzvflozjxktaqtb7qoma64tlvzcxmzla') +,(1,'ocid1.compartment.region1..aaaaaaaahod52uxynr7ickfyskrx33syvp5vib6xgu2kpfpjasdyvc6vcevq') +,(1,'ocid1.compartment.region1..aaaaaaaahyf2qn7o7cfws4uqfxl5k6illrhh2azzbs3azsloug35e7e7u7za') +,(1,'ocid1.compartment.region1..aaaaaaaahz5x42omngqfukzsuwbebyfeqnqgiaochrcz7geftvtou3bt2ivq') +,(1,'ocid1.compartment.region1..aaaaaaaai6rmu3cjrkshgpngyxx7ngxj6gblqslma2qqfaufrjg7zvjlkvfq') +,(1,'ocid1.compartment.region1..aaaaaaaaie5b4oznfh4mqplzvciclrk3baafilbqu6emsrvsoeer2y34q75a') +,(1,'ocid1.compartment.region1..aaaaaaaaiedfa2w3hbq7ilc76ip2vbz24rsb5tpusyoikp63ornh5pgimjrq') +,(1,'ocid1.compartment.region1..aaaaaaaaijqozqlo4iqwdqlexoimwj4coqcyl6oyzgsaggbxadggha3khjaq') +,(1,'ocid1.compartment.region1..aaaaaaaaixmlfkn62o2mti2prqz33sbuyqoa5okzmltslpcu5iccigawe7ca') +,(1,'ocid1.compartment.region1..aaaaaaaajd75dapq475snf3oijsdpble7iurjnhrhvqvhjrkccbpc4ny5s6a') +,(1,'ocid1.compartment.region1..aaaaaaaajdnb24ow5lx7esizc4jl6uxjgv7wbocshpdnhmwvxbfcvy66ahfa') +,(1,'ocid1.compartment.region1..aaaaaaaajedunlfmnco3r45vugbbtawyuylhdenwldytw6c5jls2i5fkfo3a') +,(1,'ocid1.compartment.region1..aaaaaaaajgafiqng22cfkzy2khgwxzknmnotahwqqazvgu4yiegfw3zwhmda') +,(1,'ocid1.compartment.region1..aaaaaaaajkak36im5h5fns2yghkbvl4tlykd4ebnmjukxfkf5ejt2b42ompq') +,(1,'ocid1.compartment.region1..aaaaaaaajns4digoltf4wrqxxdz3l4pvp3n5dkmitppsjnuajszidpfl3jya') +,(1,'ocid1.compartment.region1..aaaaaaaajrugst3awj25wwmoc4kmzzg6gci45c32m2oi27d5scc7kpdixo4q') +,(1,'ocid1.compartment.region1..aaaaaaaajw6ojw6z7cns73hpt5zu7kclo6qeqypnjtnav2hbknvhybnkwbzq') +,(1,'ocid1.compartment.region1..aaaaaaaak56udgnukt5rnhi33bbcp7gjhuyrov45ke2h753o5uj37micseda') +,(1,'ocid1.compartment.region1..aaaaaaaak6makvfmtxr5tx53luoonxovl7juvxspnyjzwo3gkjhit5najvpa') +,(1,'ocid1.compartment.region1..aaaaaaaak7ofmcgrpztonhkzyghuecbdrqx2d7rageiup5ycje7jzgebdfha') +,(1,'ocid1.compartment.region1..aaaaaaaakawoobyjscwxjdjksdocu5pugw7msi46fagdlsinv2ygmsdib7gq') +,(1,'ocid1.compartment.region1..aaaaaaaakc7igs6calwg5zufyyaiglkb6tzlphttnnw5ymfxexbnjo3lpaua') +,(1,'ocid1.compartment.region1..aaaaaaaakcags2mqgkvuyzxgsyz5ft7pltbhvd4fyq44kmtrhkkj277jezrq') +,(1,'ocid1.compartment.region1..aaaaaaaakj2sho4co34euforyxcfsoqodoenjxljqspnxiqn6mdofs2ruwia') +,(1,'ocid1.compartment.region1..aaaaaaaaknlgaaey5rblfsiyvlgdubm4roqkrbrftx2wgz7wni6qqdpugp5q') +,(1,'ocid1.compartment.region1..aaaaaaaaksckyl6j2uaseopy4r3hxwx74vdvmpngkzjxwp6pz6bbwwuurbta') +,(1,'ocid1.compartment.region1..aaaaaaaaksct7qsq2n6ax6ud7a2slrg7gbeuuqhegcmzxlt7un4t2ctlbgxq') +,(1,'ocid1.compartment.region1..aaaaaaaaktijt5qjf2ewkbxwzipnzn3ajlutpotvjm5psgiwtlhwsuyuceeq') +,(1,'ocid1.compartment.region1..aaaaaaaakyubzvxbynupxwshtovo7cc3gy4pcw672ujx6hhexjdgrw7nnziq') +,(1,'ocid1.compartment.region1..aaaaaaaal5wmjkiylrwplspx2cikpgr34mtdark4bb5wvkesy6ca7hwwok2q') +,(1,'ocid1.compartment.region1..aaaaaaaalbd3m6cyyrrbbkktlq7fb57dkbrdqqnfra64pww7dyipwwygwerq') +,(1,'ocid1.compartment.region1..aaaaaaaalfaidlosydnsdqtrynjoyc5eocij2ikjpstubpodql5swlngicba') +,(1,'ocid1.compartment.region1..aaaaaaaalmuiei3a675p5urjhqggq6qojzgrqhzpfckipdmopi62bwxzsotq') +,(1,'ocid1.compartment.region1..aaaaaaaaluefjfqz73hug3dk4iiabxzybypseoashrfx6yvt3mz7yog6ivrq') +,(1,'ocid1.compartment.region1..aaaaaaaalvlufmbj7t7hoo6rrli5kq2e75ka3z7ddb4pgc57zrmdwcdq3bya') +,(1,'ocid1.compartment.region1..aaaaaaaalweiq5tai4uddgdwhpjzhtmbr4q24jggsvxjrvygi363pwf3izbq') +,(1,'ocid1.compartment.region1..aaaaaaaalxpks2b3gtswh7ztpw6fklc673vmvjm5oegmciap6hdanttftnpa') +,(1,'ocid1.compartment.region1..aaaaaaaam42busu2v54u2zut6jm76misdvvgapfigq6oqg55gqobezapz4rq') +,(1,'ocid1.compartment.region1..aaaaaaaam7gb5i75l7qczkwsffv5sk5tgh7fkop6jhcjeprcc6md6u2eiroa') +,(1,'ocid1.compartment.region1..aaaaaaaamb3hfhstofrdoeyoamgfpadipdjbb2wycz5rzauvkyffpbjr2rwq') +,(1,'ocid1.compartment.region1..aaaaaaaamd3mpolo5smqk5kgwnxu4gl4muz4op327mlas7pfxwo46mdsllpq') +,(1,'ocid1.compartment.region1..aaaaaaaamdltp6df4bu5evaeplwifjl2yrrs3ms2tiwdrtmtdgfvil4qoq4q') +,(1,'ocid1.compartment.region1..aaaaaaaami5qcy7hjxlyksbkpsn7rcisgglqtt2prgctghrbvemez34qmnsa') +,(1,'ocid1.compartment.region1..aaaaaaaamlo63tx4zrnaz3oks72ol463g6faiu6l5tz2fkjenkeda5mcbdfa') +,(1,'ocid1.compartment.region1..aaaaaaaamneinlhfbuhtrft4ymyt4gyrwo6dk5jrjmtlbucphbm3kek4p32a') +,(1,'ocid1.compartment.region1..aaaaaaaamqj2n2uw2mxlwkns5n425fs6xvobnweww7r4ipwnannyeh6dpbua') +,(1,'ocid1.compartment.region1..aaaaaaaamshdjnuwidclqid5f6as3uegwmb4e4zvjxmsqwlkanhkqrowvh5a') +,(1,'ocid1.compartment.region1..aaaaaaaamwyn5gnxrtwxs33pqsfdm3mmolrvu2le4wxnd6j6sblqnl3y7stq') +,(1,'ocid1.compartment.region1..aaaaaaaamxqad2kxcqryatg6xt5xfksmjdef4mqnavjq4swnjrzf6cc5sj7a') +,(1,'ocid1.compartment.region1..aaaaaaaamy34nox3iuq2cyjdvxkkq432fjqql5d43rlyy3jtznfc5kyc6xqq') +,(1,'ocid1.compartment.region1..aaaaaaaan7eusdcsze4fbeab3dyig3a6r3nbugqk3mpkxoptesvsaakvl7xq') +,(1,'ocid1.compartment.region1..aaaaaaaan7viwfsyanxkebhfu32q2dxapy3yha6hpkz5yqbsavjlj6k5hnia') +,(1,'ocid1.compartment.region1..aaaaaaaandp274xdw7dbnealzypn7uoy7gbsewa47cynxsygyb72dcxbgx2a') +,(1,'ocid1.compartment.region1..aaaaaaaanirsxc54klrqzzmdosh3jc5e5s3t7jkzhsoopbbofq6skxbil6ua') +,(1,'ocid1.compartment.region1..aaaaaaaanmdllycznlorn7y6xia54ljqxoi3zblsxtfbywhdhqzdebnvpdkq') +,(1,'ocid1.compartment.region1..aaaaaaaanmey4repaxk6xyw56xskht6loptddxqffjk6w7u7kabdxgjqfcvq') +,(1,'ocid1.compartment.region1..aaaaaaaanmg52rzmbbwv7i3aed2mm6bqxqtikzxvprxy763c6iqe3j2iae3q') +,(1,'ocid1.compartment.region1..aaaaaaaanpq3ro3ernoletmp6da7kmcxny4js72rjtoejlrzx7g26lzyxpnq') +,(1,'ocid1.compartment.region1..aaaaaaaany5rfxkv66msfrhrh4kqd3fbnq3nj5oet3yesrnd5t3ucsad6yja') +,(1,'ocid1.compartment.region1..aaaaaaaao2qmrsctp4d4yi4paildtnl7w3i5qoypnoidob6qwcawlobk5q2q') +,(1,'ocid1.compartment.region1..aaaaaaaao5epakzqjwf7zgbq7qvb5icepn7nqymzhgzm56rny4hcecnq2o5a') +,(1,'ocid1.compartment.region1..aaaaaaaaof2oyalzhqdhjd5ue7id6frwtykrl2k72gnbdpbid3ybye44gncq') +,(1,'ocid1.compartment.region1..aaaaaaaaogqos5hcvjecccmaikgi6lp33rtheqvajjus67arqcpewvuqhssq') +,(1,'ocid1.compartment.region1..aaaaaaaaoih324e4kk6evznrt3nor5bggxny65qscgpqcqine63m4txtvwgq') +,(1,'ocid1.compartment.region1..aaaaaaaaolcxqhdd7yk4x3z2p4dh76o5oekngw4v2htxbtx7orcvf5suhedq') +,(1,'ocid1.compartment.region1..aaaaaaaaotplv5th7lmwttilthu77mier6v4humas22266yevg4uwpigirpq') +,(1,'ocid1.compartment.region1..aaaaaaaaotuy5o4zgbgqbsqetacstqcz7esr6jmqdk7gr4xiaino5dl23w3q') +,(1,'ocid1.compartment.region1..aaaaaaaaoyels7743q5zdttlfsx2yn34mwr3prxq5ps6q6rm5txfiw7hibza') +,(1,'ocid1.compartment.region1..aaaaaaaap4mepz5rffn5cxv5o4tjknvg55feyx4hly3jpljmlxu5lgfzkxyq') +,(1,'ocid1.compartment.region1..aaaaaaaapaxsyvefk42yn4ywzdbgdjzbuwjebo4pzdm55zvjau7evcdznbra') +,(1,'ocid1.compartment.region1..aaaaaaaapbeg2cwvl66us4xipx67g4f3oka2bjqbguffh4xekitksqz6jwiq') +,(1,'ocid1.compartment.region1..aaaaaaaapcblxt7fol6nsycxayb5ekmdfhhkschyn5sw5tvydvnlyoy7al7a') +,(1,'ocid1.compartment.region1..aaaaaaaapdau7rwobu7ekyxcq4pkwhlzuyx26hm5gsrndgnadg3gbpgipk4a') +,(1,'ocid1.compartment.region1..aaaaaaaapgchdzyqdhhmwnkkypzvhzqohz7ljaydiz3gj4wxdc2kj6tt4nkq') +,(1,'ocid1.compartment.region1..aaaaaaaaph2r5w24faket2vsp22hiboxjzk4k3s47d2ut37jghjagfb3abca') +,(1,'ocid1.compartment.region1..aaaaaaaapho6sv6dzbzduqqu4aswmguskb4fcm2pwdovdsvgrilfkgxk2una') +,(1,'ocid1.compartment.region1..aaaaaaaaphqtwqgsrgdrid46znuknhyy27jt6tuatlfugm26d556dnv66j7q') +,(1,'ocid1.compartment.region1..aaaaaaaapirkjztmkzl3xt6uwjenp62ddqk43qe4ovu3cp6edoloik6ja4eq') +,(1,'ocid1.compartment.region1..aaaaaaaaptdwwswylezovaree3uykcl5nqyiiygmxtx7a63ztttduapzxgza') +,(1,'ocid1.compartment.region1..aaaaaaaaptirt7o6qgeabrntsxyyv6fez4esc2ouvfpnbfcrj7kyizklan2a') +,(1,'ocid1.compartment.region1..aaaaaaaapztvnj7cinvpmdnnywsm7vydgsolivel4raygcl6h7jkp5d3nbwa') +,(1,'ocid1.compartment.region1..aaaaaaaaq46depjyipkkmnmquzunqg3gujj3vhp5wc7e47um2mlib2cveu5q') +,(1,'ocid1.compartment.region1..aaaaaaaaq7qtkwmujyhcgciudoxfksjpgwvc4xipwjxzau6kvvm4yyjhkrba') +,(1,'ocid1.compartment.region1..aaaaaaaaqdl62fwrjpmtjvbzb6wpwtwkdmzwk2y5htlmzittquewrcga2voq') +,(1,'ocid1.compartment.region1..aaaaaaaaqiyoqeriwifhzjwus3w6z3jngfd4zat2woifyvyimzzzshumxu4q') +,(1,'ocid1.compartment.region1..aaaaaaaaqp76zbaciyc3vnx5d2uypkx7hgehjgo7egbgf7yi4zbs4koe2rha') +,(1,'ocid1.compartment.region1..aaaaaaaaqt6ymbxzll66gv4xwt4nenpt7p3gxjqm24kaydar4wz2tazfjarq') +,(1,'ocid1.compartment.region1..aaaaaaaar2kqd4gv4ini5l4nwnmsy3aaeeerhyur53qruot2hhn4heijaobq') +,(1,'ocid1.compartment.region1..aaaaaaaar34gcqr3sak3zgtzgnlenh3uddglvtpa3xl3tr5ayhsnl56yrbnq') +,(1,'ocid1.compartment.region1..aaaaaaaar5vrwk7n3lb4gvijtdyr4bbsfhwysy63oguivguvhopcmc2bhhca') +,(1,'ocid1.compartment.region1..aaaaaaaarcp3znac6hqf357qojqea6t5fl5jreekyeq46lxi3kg6xtygpzva') +,(1,'ocid1.compartment.region1..aaaaaaaarl2jolmyrsypuhh565lsiuzrfhnjd4d4uugtvhxeql2f45ror4xa') +,(1,'ocid1.compartment.region1..aaaaaaaarqyq2lroambeclai5qoe2cm7yldyjtf2sxsrdgijrvyrokhbvcxq') +,(1,'ocid1.compartment.region1..aaaaaaaarzk6eao3algeqyrpcnsp57w6b5gtg45wcfaqapku325juqtmy34q') +,(1,'ocid1.compartment.region1..aaaaaaaasd3zy4fcyjqwxjdkgjk32lqii55ztlbsxe25ctinswct3eg5ai6q') +,(1,'ocid1.compartment.region1..aaaaaaaasjukkcti6yjbtw7ykqlrfk4is4zzpjkvsifz5clsxp43elj4djeq') +,(1,'ocid1.compartment.region1..aaaaaaaasp4rxlrqyjrmznn7usxlzrcb5axw3he72jha5ujtlrr77nnpa4xq') +,(1,'ocid1.compartment.region1..aaaaaaaasykiledveoejfafgl4yxy5j5qasav7q6ydpoqnfvkkxwbvotujgq') +,(1,'ocid1.compartment.region1..aaaaaaaat4qm5luoy4vjykeue3eevy5joyatmym3h42omyjpgphkrngztk7q') +,(1,'ocid1.compartment.region1..aaaaaaaat5hzga37mp7v52aa6idiabf3eknbgfuhb5ks42qtfwlz2wmz2m7a') +,(1,'ocid1.compartment.region1..aaaaaaaatga5y2b2w7p3uspl432xzh2fq3dzu3pddideedyemgp4dnp2ihcq') +,(1,'ocid1.compartment.region1..aaaaaaaatpybfisvsp5dhoh47gqsotl2wq5qfwsy5ouifsebeznb3pjjl7ka') +,(1,'ocid1.compartment.region1..aaaaaaaatuofcnmrihjeoyqlxwbgldxzovmo4gyppz3k2tdzkp5cgrtwblza') +,(1,'ocid1.compartment.region1..aaaaaaaatuqu7iucxhzuwjpcphpgeb66b4h62u6yvbdg4nzkvzqczpq3nufq') +,(1,'ocid1.compartment.region1..aaaaaaaau3dsy6cpnqih56voecd73bpabqrqtgehpqgfdldphobzygerpcvq') +,(1,'ocid1.compartment.region1..aaaaaaaau3vcsxbgz52ehaelvu2bdcxrebmu2f633sy4c3bvnfzxilodhcba') +,(1,'ocid1.compartment.region1..aaaaaaaau6funpiltmx4egfhanbiiczjz26mgc76jtigd6x3mjgrl4nxg2kq') +,(1,'ocid1.compartment.region1..aaaaaaaauatvwwi3yhgtfxc6eaal3d62deniiywn3yctrlieydf56krydhva') +,(1,'ocid1.compartment.region1..aaaaaaaaucflxc26yzfcegxkoktdx22djabc7eqbarnayja4bu4hdxy7tw3q') +,(1,'ocid1.compartment.region1..aaaaaaaaucgkaloamhzeccgtfshrhwvcnhvxxlveukv6x46hfa3x5y2mfwta') +,(1,'ocid1.compartment.region1..aaaaaaaauhqsh3wamem5jlkr27qg5rgdtt4y4wljc2ryao4v46m3omrnhbdq') +,(1,'ocid1.compartment.region1..aaaaaaaaujbxhpguvgm763wfq6cjvlcqjq6w7x4ungixdfzvzl7qppomeodq') +,(1,'ocid1.compartment.region1..aaaaaaaaulespkdhfplrgejilcfadv6oyjevkt4o5d6ew5uldkctaxxqamwq') +,(1,'ocid1.compartment.region1..aaaaaaaaup4glpjefoseah3tzjru4rwoxc2mym4i5qjs2ivuidml7mhvj7nq') +,(1,'ocid1.compartment.region1..aaaaaaaav5josckrpybzmdwnne6dowwu7fzt75ua75ujh767vu2guaidgijq') +,(1,'ocid1.compartment.region1..aaaaaaaavbt76q24gtv2nofscbbsf2wcuucyomxh7e7ql7u7swej63ccoadq') +,(1,'ocid1.compartment.region1..aaaaaaaavcbxxyuie5h23ycc5uom775fbrvsoxeim2yhjo3hqxlasnnqqxrq') +,(1,'ocid1.compartment.region1..aaaaaaaavchz6w7fwqdwz73y44i4kljwbg3gth3fmcgd5mejscnfibxignlq') +,(1,'ocid1.compartment.region1..aaaaaaaavhk6ja355sbrj5pst2p6hbpoges3g5hkdaybry3a3lwirhfieopa') +,(1,'ocid1.compartment.region1..aaaaaaaavhwhaalmcvg7j6darzxqikbm2ptif2rfatcr4tg6ripa4ls7pm7a') +,(1,'ocid1.compartment.region1..aaaaaaaavi2zc6ralvgkvxrq2aloxube2vgjtzs26uf5dfcfeml4qenbu43q') +,(1,'ocid1.compartment.region1..aaaaaaaavqdf6l3hoc4nndnaflsuihzpaetqvyzrj7fi5vthbqkd66dpf7tq') +,(1,'ocid1.compartment.region1..aaaaaaaavqz6ncexzhqw6cjf7itgelc27bg5e6q4evg4ti33cqm7a4vikt7a') +,(1,'ocid1.compartment.region1..aaaaaaaavui7f5q77e7lpuyptayyo5ys6raiftbavhbek4bfqmuu3lcxvfpa') +,(1,'ocid1.compartment.region1..aaaaaaaavyji2pizu2bbd7gu4ulv7qucoe66ko2cyijqtrjoaio4fjytfo5a') +,(1,'ocid1.compartment.region1..aaaaaaaaw2lc6b62ly3zkbtco6wvdk3jvdntqelcytrioizykrohsxe7335a') +,(1,'ocid1.compartment.region1..aaaaaaaawa3ik5qa6o7nv4whnues6o7x2u5nzq4pw3t4eyuf6bvbugp2gctq') +,(1,'ocid1.compartment.region1..aaaaaaaawbcevkoxs4rkzy24ualmsshhgrrgnlhsxumtrkajvo4envfrlr5q') +,(1,'ocid1.compartment.region1..aaaaaaaawcuua46tujeyy47vv42qnwy5ihavmuf3zxe7g4wtgmrd43v2efkq') +,(1,'ocid1.compartment.region1..aaaaaaaawkxy6gi3npqybpceao3255ihxfrsv6wb4vaqhz7r3smnml6o3ayq') +,(1,'ocid1.compartment.region1..aaaaaaaawufau7pbvyk4kkr5lq6ndgkiop6wyxpegkqbxe5qd2t5n6sef2ma') +,(1,'ocid1.compartment.region1..aaaaaaaax3zxvt5hpxzdewblybngfgctohn2pqj2bzao4shgyfkrlwkeak7q') +,(1,'ocid1.compartment.region1..aaaaaaaax4lzxgl3canum3og7xznhorfyqacwanovum7cwii26ab3qjdtrkq') +,(1,'ocid1.compartment.region1..aaaaaaaax7kvpg32qicqy7xk4cmybafeozyphk44hgbfrdhn7lkenkaz3wka') +,(1,'ocid1.compartment.region1..aaaaaaaaxdajpiq5ggvczw7s4untfx7cjd5hfw52adylggvfsc742umg6w2q') +,(1,'ocid1.compartment.region1..aaaaaaaaxgc7fzm23mmarb7uyzyr3z6dpfpexmv5obhifaumyqo2lyjgvkrq') +,(1,'ocid1.compartment.region1..aaaaaaaaxr4v5bwu4lrjhlhtwo6qxphnjjgukdlbgp4nqpo7imdxoi5qwkdq') +,(1,'ocid1.compartment.region1..aaaaaaaaxv4o6rvwjab6plhufj2nd67dymxv4zz4ach7s3gjxu3wgv6wsatq') +,(1,'ocid1.compartment.region1..aaaaaaaaxw4gkktdzpjuhwz2xygv7djxsqapq3hb6dm7cawybyasgrahpaga') +,(1,'ocid1.compartment.region1..aaaaaaaay7wyamzpezqved5u77aacmkjxxt2lzintcyehhxk7f53mgzkkbqq') +,(1,'ocid1.compartment.region1..aaaaaaaayare52vbgyl5ykdgg7padot2vxvouesfsxlyqanmlc2amchp5nnq') +,(1,'ocid1.compartment.region1..aaaaaaaaydyydzz5k5wdaewbpt3i6wuc6igotfq6urvovt4ldxc2vgklizha') +,(1,'ocid1.compartment.region1..aaaaaaaayf4wnlzxfvywzl3edx6gfv2e4r7ww32dvqdyfecsevrojsjhwetq') +,(1,'ocid1.compartment.region1..aaaaaaaayfrp4ag5hr6ext7uf6bnfu3xadxamb7lgx6ypeiw5vxmz63qxifa') +,(1,'ocid1.compartment.region1..aaaaaaaayj2f5cklidikfbqzlhkcnrgftxrlxefugx4dtmio72n454ej4uxq') +,(1,'ocid1.compartment.region1..aaaaaaaaykanqn36l7oonti26lly4tfmfcc5tetklsvwvyfr7yn3rdwo7nqa') +,(1,'ocid1.compartment.region1..aaaaaaaaypg5iicivlm6z2pighdmdg55qaa36jyrmpyquwxvmnezyb7yicmq') +,(1,'ocid1.compartment.region1..aaaaaaaaypx6qoap35hnq4tzvxy3nxdvcroal4tfieqa4ctjb7nsjjbilbba') +,(1,'ocid1.compartment.region1..aaaaaaaaze2h3muiilysf3g5ofgqdtkfty6nedvnyrvtqbcnzox3ec5hnhwq') +,(1,'ocid1.compartment.region1..aaaaaaaazoomt4gnrzmikpksx4facb4kpu7hatwf4c2ff5qvwu6il6yro5ya') +,(1,'ocid1.compartment.region1..aaaaaaaazqxkshcfidaqfymvx57dlf3utvd4j52g33epbyiagkkzhqn7us4q') +,(1,'ocid1.compartment.region1..aaaaaaaazsqy2rmisnlzlp344c3fqbfumsaripogodmfkel7srfepfsyuunq') +,(1,'ocid1.compartment.region1..aaaaaaaazwn65xo2zlwnt4c2z7i5vgqkcow6w4agllgddywykqryptcaxaba') +,(1,'ocid1.tenancy.oc1..aaaaaaaak6cfau4b6uz5gkolzxgjixwfhpzaikbkfl6duxdmye6lk6foy6qq') +,(1,'ocid1.tenancy.oc1..aaaaaaaattzudpdasr7fnrskmyk6lepuc54anjzq7jvmqjxfrwshale4lelq') +,(1,'ocid1.tenancy.region1..aaaaaaaa4ob2oari2wkyojwuktzhpawd52rgmjuolitn6juiajdm2zwcr72q') +,(1,'ocid1.tenancy.region1..aaaaaaaa4w5yajfy3tstmqt6snylf4nvxzcsgbmuf2ulsalmcu4m4wvulkyq') +,(1,'ocid1.tenancy.region1..aaaaaaaa5ebwu5j7rgt2vb6cgtiporvzemuap3n2f77sqasaj5vhk2xpfeya') +,(1,'ocid1.tenancy.region1..aaaaaaaa5iz572tx4brtqr6ocpy3dr332iqw6fw36ahuhpcfxwq4leehmqqq') +,(1,'ocid1.tenancy.region1..aaaaaaaac2ka6dsoh6gwwzvk6ymkqshp4cxtjpsua3zc24uogvfbm6yhicxq') +,(1,'ocid1.tenancy.region1..aaaaaaaadt6bryvedseasefz4yj5bdebad6fgg5icibyhaqxxakdpl3risna') +,(1,'ocid1.tenancy.region1..aaaaaaaahqhwekzbiijtmoffb5rd45t5u2uqzpbrqqpxz7d3x6mcz2memxtq') +,(1,'ocid1.tenancy.region1..aaaaaaaahsln3i2vpwd3gagi4lxn6kb3gtknqnfiunnwkvqr4zy74elgzmjq') +,(1,'ocid1.tenancy.region1..aaaaaaaanihjamtexbiuhmgr6q6cpxmt7xgcmqpnbjruyxgxbcqc44ivuhba') +,(1,'ocid1.tenancy.region1..aaaaaaaaohmradnnd4ldivn3oywpz43sx2c242re4e4jbrkdniqz2cwrjtoa') +,(1,'ocid1.tenancy.region1..aaaaaaaaq653dhvaq6k6yboaofzv4lav4wfvfyogsddum46pdjey6d2e6k2a') +,(1,'ocid1.tenancy.region1..aaaaaaaaqtxzpnj5q644kos6vxf3pk6lyrqocm5hlxrr35ifdizmgoufvgiq') +,(1,'ocid1.tenancy.region1..aaaaaaaauma3lbqga5ns2qbgymwlwni4jpbg4iqojmwhkdkumd3ib445k5jq') +,(1,'ocid1.tenancy.region1..aaaaaaaaztnhb5kztgsn63d36ocp4ajesovchpvrqhjvr6nmunx7nubojcra') +)) v +WHERE v.phonebook IS NOT NULL +/ +SPO OFF; \ No newline at end of file diff --git a/csierra/h.sql b/csierra/h.sql new file mode 100644 index 0000000..6c0e68e --- /dev/null +++ b/csierra/h.sql @@ -0,0 +1 @@ +@@help.sql \ No newline at end of file diff --git a/csierra/help.sql b/csierra/help.sql new file mode 100644 index 0000000..e4240ce --- /dev/null +++ b/csierra/help.sql @@ -0,0 +1 @@ +HOS less README.md \ No newline at end of file diff --git a/csierra/hidden_parameter.sql b/csierra/hidden_parameter.sql new file mode 100644 index 0000000..16d14c3 --- /dev/null +++ b/csierra/hidden_parameter.sql @@ -0,0 +1,46 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: hidden_parameter.sql +-- +-- Purpose: Get value of one hidden parameter +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @hidden_parameter.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; +-- +COL name FOR A50 TRUNC; +COL value FOR A50 TRUNC; +COL pdbs FOR 9999; +COL min_con_id FOR 999999 HEA 'MIN|CON_ID'; +COL max_con_id FOR 999999 HEA 'MAX|CON_ID'; +-- +SELECT p.ksppinm name, + v.ksppstvl value, + COUNT(*) pdbs, + MIN(v.con_id) min_con_id, + MAX(v.con_id) max_con_id + FROM x$ksppi p, + x$ksppsv v + WHERE p.ksppinm LIKE '%¶meter_name.%' + AND v.indx = p.indx + AND v.inst_id = USERENV('INSTANCE') + AND p.inst_id = USERENV('INSTANCE') + AND p.ksppinm LIKE '\_%' ESCAPE '\' + GROUP BY + p.ksppinm, + v.ksppstvl + ORDER BY + p.ksppinm, + v.ksppstvl +/ diff --git a/csierra/hidden_parameters.sql b/csierra/hidden_parameters.sql new file mode 100644 index 0000000..cb3d991 --- /dev/null +++ b/csierra/hidden_parameters.sql @@ -0,0 +1,43 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: hidden_parameters.sql +-- +-- Purpose: Get value of all hidden parameters +-- +-- Author: Carlos Sierra +-- +-- Version: 2020/12/16 +-- +-- Usage: Execute connected to CDB or PDB +-- +-- Example: $ sqlplus / as sysdba +-- SQL> @hidden_parameters.sql +-- +-- Notes: Developed and tested on 12.1.0.2. +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; +-- +COL name FOR A50 TRUNC; +COL value FOR A50 TRUNC; +COL isdefault FOR A10 TRUNC; +COL ismod FOR A10 TRUNC; +COL isadj FOR A10 TRUNC; +-- +SELECT x.ksppinm name, + y.kspftctxvl value, + y.kspftctxdf isdefault, + DECODE(BITAND(y.kspftctxvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod, + DECODE(BITAND(y.kspftctxvf,2),2,'TRUE','FALSE') isadj + FROM sys.x$ksppi x, + sys.x$ksppcv2 y + WHERE x.inst_id = USERENV('INSTANCE') + AND y.inst_id = USERENV('INSTANCE') + AND x.indx+1 = y.kspftctxpn + AND x.ksppinm LIKE '\_%' ESCAPE '\' + AND x.ksppinm NOT LIKE '\_\_%' ESCAPE '\' + AND (y.kspftctxdf = 'FALSE' OR DECODE(BITAND(y.kspftctxvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') <> 'FALSE') + ORDER BY + x.ksppinm +/ diff --git a/csierra/l.sql b/csierra/l.sql new file mode 100644 index 0000000..fe1fa81 --- /dev/null +++ b/csierra/l.sql @@ -0,0 +1 @@ +@@cs_latency.sql \ No newline at end of file diff --git a/csierra/la.sql b/csierra/la.sql new file mode 100644 index 0000000..30a9999 --- /dev/null +++ b/csierra/la.sql @@ -0,0 +1,27 @@ +DEF cs_top_latency = '20'; +DEF cs_top_load = '10'; +DEF cs_ms_threshold_latency = '0.05'; +DEF cs_aas_threshold_latency = '0.005'; +DEF cs_aas_threshold_load = '0.05'; +DEF cs_uncommon_col = 'NOPRINT'; +-- +COL cs_last_snap_mins NEW_V cs_last_snap_mins NOPRI; +SELECT TRIM(TO_CHAR(ROUND((SYSDATE - CAST(end_interval_time AS DATE)) * 24 * 60, 1), '99990.0')) cs_last_snap_mins + FROM dba_hist_snapshot + ORDER BY + snap_id DESC + FETCH FIRST 1 ROW ONLY +/ +DEF cs_execs_delta_h = '&&cs_last_snap_mins. mins'; +-- +COL cs_con_name NEW_V cs_con_name FOR A30 NOPRI; +SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name FROM DUAL +/ +-- +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +SET PAGES 300 LONGC 120; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; +-- +@@cs_internal/cs_latency_internal_cols.sql +@@cs_internal/cs_latency_internal_query_1.sql diff --git a/csierra/lah.sql b/csierra/lah.sql new file mode 100644 index 0000000..789e212 --- /dev/null +++ b/csierra/lah.sql @@ -0,0 +1,4 @@ +DEF cs_top = '20'; +-- +@@cs_internal/cs_latency_hist_internal_1.sql +@@cs_internal/cs_latency_hist_internal_2.sql \ No newline at end of file diff --git a/csierra/le.sql b/csierra/le.sql new file mode 100644 index 0000000..b40b3cd --- /dev/null +++ b/csierra/le.sql @@ -0,0 +1 @@ +@@cs_latency_extended.sql \ No newline at end of file diff --git a/csierra/lh.sql b/csierra/lh.sql new file mode 100644 index 0000000..ff309c4 --- /dev/null +++ b/csierra/lh.sql @@ -0,0 +1 @@ +@@cs_latency_hist.sql \ No newline at end of file diff --git a/csierra/locks.sql b/csierra/locks.sql new file mode 100644 index 0000000..fb09d82 --- /dev/null +++ b/csierra/locks.sql @@ -0,0 +1,2 @@ +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +@@cs_internal/cs_locks_internal.sql \ No newline at end of file diff --git a/csierra/locks2.sql b/csierra/locks2.sql new file mode 100644 index 0000000..98cdcd9 --- /dev/null +++ b/csierra/locks2.sql @@ -0,0 +1,28 @@ +select all_objects.object_name, + all_objects.object_type, + v$locked_object.session_id, + v$session.serial#, + v$lock.type lock_type, -- Type or system/user lock + lmode lock_mode, -- lock mode in which session holds lock + CASE + WHEN lmode = 0 THEN 'NONE: lock requested but not yet obtained' + WHEN lmode = 1 THEN 'NULL' + WHEN lmode = 2 THEN 'ROWS_S (SS): Row Share Lock' + WHEN lmode = 3 THEN 'ROW_X (SX): Row Exclusive Table Lock' + WHEN lmode = 4 THEN 'SHARE (S): Share Table Lock' + WHEN lmode = 5 THEN 'S/ROW-X (SSX): Share Row Exclusive Table Lock' + WHEN lmode = 6 THEN 'Exclusive (X): Exclusive Table Lock' + END Lock_description, + v$lock.request, + v$lock.block, + ctime, -- Time since current mode was granted + 'alter system disconnect session ''' || v$locked_object.session_id || ',' || v$session.serial# || ''' immediate;' killcmd +from v$locked_object, + all_objects, + v$lock, + v$session +where v$locked_object.object_id = all_objects.object_id + AND v$lock.id1 = all_objects.object_id + AND v$lock.sid = v$locked_object.session_id + and v$session.sid = v$lock.sid +order by session_id, ctime desc, object_name; \ No newline at end of file diff --git a/csierra/log.sql b/csierra/log.sql new file mode 100644 index 0000000..a6c0a47 --- /dev/null +++ b/csierra/log.sql @@ -0,0 +1,55 @@ +-- log.sql - REDO Log on Primary and Standby +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +SET NUM 20; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +PRO +PRO v$log +PRO ~~~~~ +SELECT * FROM v$log +/ +-- +PRO +PRO v$log +PRO ~~~~~ +SELECT COUNT(*) groups, + AVG(members) AS members, + AVG(bytes)/POWER(2,20) avg_mbs, + MIN(bytes)/POWER(2,20) min_mbs, + MAX(bytes)/POWER(2,20) max_mbs, + ROUND(SUM(bytes)/POWER(2,30), 1) sum_gbs + FROM v$log +/ +-- +PRO +PRO v$log +PRO ~~~~~ +SELECT bytes / POWER(2,30) AS size_gb, COUNT(*) AS groups, AVG(members) AS members + FROM v$log +GROUP BY bytes / POWER(2,30) +/ +PRO +PRO v$standby_log +PRO ~~~~~ +SELECT * FROM v$standby_log +/ +-- +PRO +PRO v$standby_log +PRO ~~~~~ +SELECT COUNT(*) groups, + 1 AS members, + AVG(bytes)/POWER(2,20) avg_mbs, + MIN(bytes)/POWER(2,20) min_mbs, + MAX(bytes)/POWER(2,20) max_mbs, + ROUND(SUM(bytes)/POWER(2,30), 1) sum_gbs + FROM v$standby_log +/ +-- +PRO +PRO v$standby_log +PRO ~~~~~ +SELECT bytes / POWER(2,30) AS size_gb, COUNT(*) AS groups, 1 AS members + FROM v$standby_log +GROUP BY bytes / POWER(2,30) +/ \ No newline at end of file diff --git a/csierra/log_history.sql b/csierra/log_history.sql new file mode 100644 index 0000000..277e909 --- /dev/null +++ b/csierra/log_history.sql @@ -0,0 +1,24 @@ +-- log_history.sql - REDO Log History +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +COL thread# FOR 990; +COL switches FOR 999,990; +SELECT thread#, TO_CHAR(TRUNC(first_time), 'YYYY-MM-DD') day, COUNT(*) switches + FROM v$log_history + GROUP BY + thread#, TRUNC(first_time) + ORDER BY + thread#, TRUNC(first_time) +/ +-- +SELECT ROUND(COUNT(*) / 7) switches_per_day + FROM v$log_history + WHERE first_time BETWEEN TRUNC(SYSDATE) - 7 AND TRUNC(SYSDATE) +/ +-- +SELECT ROUND(COUNT(*) / 7 / 24, 1) switches_per_hour + FROM v$log_history + WHERE first_time BETWEEN TRUNC(SYSDATE) - 7 AND TRUNC(SYSDATE) +/ + diff --git a/csierra/loop.sql b/csierra/loop.sql new file mode 100644 index 0000000..ee1cfa5 --- /dev/null +++ b/csierra/loop.sql @@ -0,0 +1,11 @@ +SET TIM ON TIMI ON; +DECLARE + l_date DATE := SYSDATE; + l_seconds INTEGER := 600; +BEGIN + WHILE l_date + (l_seconds/24/60/60) > SYSDATE -- loop for l_seconds + LOOP + NULL; + END LOOP; +END; +/ diff --git a/csierra/lr.sql b/csierra/lr.sql new file mode 100644 index 0000000..ffcc6bf --- /dev/null +++ b/csierra/lr.sql @@ -0,0 +1 @@ +@@cs_latency_range.sql \ No newline at end of file diff --git a/csierra/lre.sql b/csierra/lre.sql new file mode 100644 index 0000000..333159c --- /dev/null +++ b/csierra/lre.sql @@ -0,0 +1 @@ +@@cs_latency_range_extended.sql \ No newline at end of file diff --git a/csierra/ls.sql b/csierra/ls.sql new file mode 100644 index 0000000..6bb3932 --- /dev/null +++ b/csierra/ls.sql @@ -0,0 +1,6 @@ +PRO +PRO Producing list of cs scripts as per: HOST ls $ORATK_HOME/sql/cscripts/ | xargs -n1 basename | sort +PRO +PRO 1. Enter optional file_mask, e.g.: [{*}|cs|spbl|sprf|spch|ash|chart|awr|kiev|session|kill|sqlmon|osstat|...] +HOST ls $ORATK_HOME/sql/cscripts/*&1.* | xargs -n1 basename | sort +UNDEF 1 diff --git a/csierra/ma.sql b/csierra/ma.sql new file mode 100644 index 0000000..55ac0ae --- /dev/null +++ b/csierra/ma.sql @@ -0,0 +1 @@ +@@cs_max_ash_analytics.sql \ No newline at end of file diff --git a/csierra/mas.sql b/csierra/mas.sql new file mode 100644 index 0000000..09fb939 --- /dev/null +++ b/csierra/mas.sql @@ -0,0 +1 @@ +@@cs_maximum_active_sessions.sql \ No newline at end of file diff --git a/csierra/metadata_ddl.sql b/csierra/metadata_ddl.sql new file mode 100644 index 0000000..e8aaf45 --- /dev/null +++ b/csierra/metadata_ddl.sql @@ -0,0 +1,97 @@ +DEF 1 = 'C##IOD'; + + +PRO dbc_dbcps_pdb_metadata. persistent +DECLARE + l_exists NUMBER; + l_sql_statement VARCHAR2(32767) := q'[ +CREATE TABLE &&1..dbc_dbcps_pdb_metadata ( + -- /* key: id and pdb_name */ + id NUMBER NOT NULL -- should be enough for uniqueness but sea has two pdbs DBCPS_METADATA and DBCPS_METADATA_PROD, thus collisions on id alone are possible +, pdb_name VARCHAR2(128) NOT NULL + -- data elements +, compartment_id VARCHAR2(128) NOT NULL +, tenancy_id VARCHAR2(128) +, phonebook_entry VARCHAR2(256) +, location VARCHAR2(64) NOT NULL -- phx|phx-ad-1|phx-ad-2|phx-ad-3 +, locale VARCHAR2(4) NOT NULL -- RGN|AD1|AD2|AD3 +, state VARCHAR2(64) NOT NULL -- READY|FAILED|PROVISIONING +, type VARCHAR2(128) NOT NULL -- KIEV|GENERAL|CASPER|WORKFLOW|TELEMETRY|CANARY_INTERNAL +, parent_cdb_name VARCHAR2(128) -- iod01, iod02, ... kiev02, ... kiev02a1, ... oradb-casp01rg, ... oradb-iod01 +, created TIMESTAMP(6) NOT NULL +, last_modified TIMESTAMP(6) NOT NULL +, replicated TIMESTAMP(6) NOT NULL +) +TABLESPACE IOD +]'; + l_sql_statement2 VARCHAR2(32767) := q'[ +CREATE UNIQUE INDEX &&1..dbc_dbcps_pdb_metadata_pk +ON &&1..dbc_dbcps_pdb_metadata +(id, pdb_name) +TABLESPACE IOD +]'; + l_sql_statement3 VARCHAR2(32767) := q'[ +ALTER TABLE &&1..dbc_dbcps_pdb_metadata ADD PRIMARY KEY +(id, pdb_name) +USING INDEX &&1..dbc_dbcps_pdb_metadata_pk +]'; +BEGIN + SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER(TRIM('&&1.')) AND table_name = UPPER('dbc_dbcps_pdb_metadata'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement; + END IF; + SELECT COUNT(*) INTO l_exists FROM dba_indexes WHERE owner = UPPER(TRIM('&&1.')) AND index_name = UPPER('dbc_dbcps_pdb_metadata_pk'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement2; + EXECUTE IMMEDIATE l_sql_statement3; + END IF; +END; +/ + +/* ------------------------------------------------------------------------------------ */ + +PRO dbc_parameter. persistent +DECLARE + l_exists NUMBER; + l_data_length NUMBER; + l_sql_statement VARCHAR2(32767) := q'[ +CREATE TABLE &&1..dbc_parameter ( + -- /* key: region */ + parameter VARCHAR2(30) NOT NULL +, type VARCHAR2(30) NOT NULL + -- data elements +, value VARCHAR2(256) NOT NULL +, description VARCHAR2(512) +) +TABLESPACE IOD +]'; + l_sql_statement2 VARCHAR2(32767) := q'[ +CREATE UNIQUE INDEX &&1..dbc_parameter_pk +ON &&1..dbc_parameter +(parameter, type) +TABLESPACE IOD +]'; + l_sql_statement3 VARCHAR2(32767) := q'[ +ALTER TABLE &&1..dbc_parameter ADD PRIMARY KEY +(parameter, type) +USING INDEX &&1..dbc_parameter_pk +]'; + l_sql_statement4 VARCHAR2(32767) := q'[ +ALTER TABLE &&1..dbc_parameter MODIFY (value VARCHAR2(256)) +]'; +BEGIN + SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER(TRIM('&&1.')) AND table_name = UPPER('dbc_parameter'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement; + END IF; + SELECT COUNT(*) INTO l_exists FROM dba_indexes WHERE owner = UPPER(TRIM('&&1.')) AND index_name = UPPER('dbc_parameter_pk'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement2; + EXECUTE IMMEDIATE l_sql_statement3; + END IF; + SELECT data_length INTO l_data_length FROM dba_tab_columns WHERE owner = UPPER(TRIM('&&1.')) AND table_name = UPPER('dbc_parameter') AND column_name = UPPER('value'); + IF l_data_length < 256 THEN + EXECUTE IMMEDIATE l_sql_statement4; + END IF; +END; +/ \ No newline at end of file diff --git a/csierra/mysid.sql b/csierra/mysid.sql new file mode 100644 index 0000000..d8de0fa --- /dev/null +++ b/csierra/mysid.sql @@ -0,0 +1,14 @@ +-- mysid.sql - Get SID and SPID of own Session +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +COL sid FOR 99999; +COL serial# FOR 9999999; +COL spid FOR A6; +-- +SELECT s.sid, s.serial#, s.logon_time, p.spid + FROM v$session s, + v$process p + WHERE s.sid = SYS_CONTEXT('USERENV', 'SID') + AND p.addr = s.paddr +/ diff --git a/csierra/opatch.sql b/csierra/opatch.sql new file mode 100644 index 0000000..d2c8824 --- /dev/null +++ b/csierra/opatch.sql @@ -0,0 +1,20 @@ +-- opatch.sql - Oracle Patch Registry and History +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF6'; +CLEAR SQL +PRO +PRO dba_registry +PRO ~~~~~~~~~~~~ +1 SELECT * FROM dba_registry; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO dba_registry_sqlpatch +PRO ~~~~~~~~~~~~~~~~~~~~~ +1 SELECT action_time,action,status,description,logfile,ru_logfile,patch_id,patch_uid,patch_type,source_version,target_version FROM dba_registry_sqlpatch ORDER by action_time; +@@cs_internal/cs_pr_internal.sql "" +PRO +PRO dba_registry_history +PRO ~~~~~~~~~~~~~~~~~~~~ +1 SELECT * FROM dba_registry_history; +@@cs_internal/cs_pr_internal.sql "" diff --git a/csierra/open_cursor.sql b/csierra/open_cursor.sql new file mode 100644 index 0000000..23f5aa8 --- /dev/null +++ b/csierra/open_cursor.sql @@ -0,0 +1,31 @@ +-- open_cursor.sql - Open Cursors and Count of Distinct SQL_ID per Session +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +-- +COL module FOR A32 TRUNC; +COL sid_serial FOR A15 TRUNC; +COL cursors FOR 999,990; +COL sql_ids FOR 999,990; +-- +WITH + c AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM v$open_cursor) +, s AS (SELECT /*+ MATERIALIZE NO_MERGE */ * FROM v$session) +SELECT s.module, + s.machine, + s.sid||','||s.serial# AS sid_serial, + COUNT(*) AS cursors, + COUNT(DISTINCT c.sql_id) AS sql_ids + FROM c, + s + WHERE s.saddr = c.saddr + AND s.sid = c.sid + GROUP BY + s.module, + s.machine, + s.sid, + s.serial# + ORDER BY + s.module, + s.machine, + s.sid, + s.serial# +/ diff --git a/csierra/p.sql b/csierra/p.sql new file mode 100644 index 0000000..8e430dd --- /dev/null +++ b/csierra/p.sql @@ -0,0 +1 @@ +@@cs_sqlperf.sql \ No newline at end of file diff --git a/csierra/parameter_change.sql b/csierra/parameter_change.sql new file mode 100644 index 0000000..bbd8f8c --- /dev/null +++ b/csierra/parameter_change.sql @@ -0,0 +1,44 @@ +SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; + +COL parameter_name FOR A30; +COL value FOR A30; +COL prior_value FOR A30; + +WITH +all_parameters AS ( +SELECT /*+ MATERIALIZE NO_MERGE DYNAMIC_SAMPLING(4) */ /* 1a.30 */ + snap_id, + dbid, + con_id, + instance_number, + parameter_name, + value, + isdefault, + ismodified, + LAG(value) OVER (PARTITION BY dbid, con_id, instance_number, parameter_hash ORDER BY snap_id) prior_value + FROM dba_hist_parameter +) +SELECT /*+ NO_MERGE */ /* 1a.30 */ + TO_CHAR(s.begin_interval_time, 'YYYY-MM-DD HH24:MI:SS') begin_time, + TO_CHAR(s.end_interval_time, 'YYYY-MM-DD HH24:MI:SS') end_time, + p.snap_id, + p.con_id, + --p.dbid, + p.instance_number, + p.parameter_name, + p.value, + p.isdefault, + p.ismodified, + p.prior_value + FROM all_parameters p, + dba_hist_snapshot s + WHERE p.value != p.prior_value + AND s.snap_id = p.snap_id + AND s.dbid = p.dbid + AND s.instance_number = p.instance_number + ORDER BY + s.begin_interval_time DESC, + --p.dbid, + p.instance_number, + p.parameter_name +/ diff --git a/csierra/pdb.sql b/csierra/pdb.sql new file mode 100644 index 0000000..1ed010c --- /dev/null +++ b/csierra/pdb.sql @@ -0,0 +1,242 @@ +-- pdb.sql - List all PDBs, then connect into one PDB +@@set.sql +COL cs_con_name NEW_V cs_con_name NOPRI; +SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS cs_con_name FROM DUAL +/ +-- @@cs_internal/&&cs_set_container_to_cdb_root. +ALTER SESSION SET container = CDB$ROOT; +-- +COL pdb_name FOR A30 HEA 'PDB Name' PRI; +COL con_id FOR 990 HEA 'CON|ID' PRI; +COL cpus FOR 9,990.000 HEA 'CPUs' PRI; +COL cpus_perc FOR 990.0 HEA 'CPUs|Perc%' PRI; +COL cpus_rank FOR 990 HEA 'CPUs|Rank' PRI; +COL space_gb FOR 99,990.000 HEA 'Space|GBs' PRI; +COL space_perc FOR 990.0 HEA 'Space|Perc%' PRI; +COL space_rank FOR 990 HEA 'Space|Rank' PRI; +COL iops FOR 9,999,990.000 HEA 'IOPS' PRI; +COL iops_perc FOR 990.0 HEA 'IOPS|Perc%' PRI; +COL iops_rank FOR 990 HEA 'IOPS|Rank' PRI; +COL mbps FOR 999,990.000 HEA 'MBPS' PRI; +COL mbps_perc FOR 990.0 HEA 'MBPS|Perc%' PRI; +COL mbps_rank FOR 990 HEA 'MBPS|Rank' PRI; +-- +BREAK ON REPORT; +COMPUTE SUM OF cpus cpus_perc space_gb space_perc iops iops_perc mbps mbps_perc ON REPORT; +-- +PRO +PRO Top PDBs +PRO ~~~~~~~~ +WITH +rsrcmgrmetric AS ( +SELECT r.con_id, + c.name AS pdb_name, + (SUM(r.cpu_consumed_time) / 1000) / (MAX(r.intsize_csec) / 100) AS cpus, + MAX(c.total_size) / POWER(2,30) AS space_gb, + SUM(r.io_requests) / (MAX(r.intsize_csec) / 100) AS iops, + SUM(r.io_megabytes) / (MAX(r.intsize_csec) / 100) AS mbps + FROM v$rsrcmgrmetric r, + v$containers c + WHERE r.con_id > 2 -- exclude CDB$ROOT + AND r.intsize_csec > 0 + AND c.con_id = r.con_id + GROUP BY + r.con_id, -- needed since there are multiple consumer groups (usually 3) per time slice + c.name +), +rsrcmgrmetric_ext AS ( +SELECT con_id, + pdb_name, + cpus, + 100 * cpus / NULLIF(SUM(cpus) OVER(), 0) AS cpus_perc, + RANK() OVER(ORDER BY cpus DESC) AS cpus_rank, + space_gb, + 100 * space_gb / NULLIF(SUM(space_gb) OVER(), 0) AS space_perc, + RANK() OVER(ORDER BY space_gb DESC) AS space_rank, + iops, + 100 * iops / NULLIF(SUM(iops) OVER(), 0) AS iops_perc, + RANK() OVER(ORDER BY iops DESC) AS iops_rank, + mbps, + 100 * mbps / NULLIF(SUM(mbps) OVER(), 0) AS mbps_perc, + RANK() OVER(ORDER BY mbps DESC) AS mbps_rank + FROM rsrcmgrmetric +) +SELECT r.cpus, + r.cpus_perc, + r.cpus_rank, + r.space_gb, + r.space_perc, + r.space_rank, + r.iops, + r.iops_perc, + r.iops_rank, + r.mbps, + r.mbps_perc, + r.mbps_rank, + r.pdb_name, + r.con_id + FROM rsrcmgrmetric_ext r + WHERE (r.cpus_perc > 1 OR r.space_perc > 1 OR r.iops_perc > 1 OR r.mbps_perc > 1) + AND (r.cpus > 0.1 OR r.space_gb > 0.1 OR r.iops > 0.001 OR r.mbps > 0.001) + -- AND r.cpus > 0.1 + -- AND r.space_gb > 0.1 + -- AND r.iops > 0.001 + -- AND r.mbps > 0.001 +ORDER BY + r.cpus_perc DESC, + r.space_perc DESC, + r.iops_perc DESC, + r.mbps_perc DESC +/ +-- +CLEAR BREAK COMPUTE; +-- +COL pdb_name FOR A30 HEA '.|.|PDB Name' PRI; +COL con_id FOR 990 HEA 'CON|ID' PRI; +COL running_sessions_limit FOR 9,990.000 HEA 'Running|Sessions|Limit' PRI; +COL avg_running_sessions FOR 9,990.000 HEA 'Average|Running|Sessions' PRI; +COL avg_waiting_sessions FOR 9,990.000 HEA 'Average|Waiting|Sessions' PRI; +COL available_headroom_sessions FOR 9,990.000 HEA 'Available|Headroom|Sessions' PRI; +-- COL sessions FOR A9 HEA 'Sessions|Parameter' PRI; +COL sessions FOR 99,990 HEA 'Sessions|Parameter' PRI; +COL total_size_gb FOR 999,990.000 HEA 'Disk Space|Size (GBs)' PRI; +COL kiev FOR 9990 HEA 'Kiev|PDB' PRI; +COL wf FOR 990 HEA 'WF|PDB' PRI; +COL cpus FOR 9,990.000 HEA 'CPUs' PRI; +COL iops FOR 999,990.000 HEA 'IOPS' PRI; +COL mbps FOR 999,990.000 HEA 'MBPS' PRI; +COL creation_time FOR A19 HEA 'Creation Time' PRI; +COL open_time FOR A19 HEA 'Open Time' PRI; +COL open_mode FOR A10 HEA 'Open Mode' PRI; +-- +BREAK ON REPORT; +COMPUTE COUNT OF kiev wf con_id ON REPORT; +COMPUTE SUM OF running_sessions_limit avg_running_sessions avg_waiting_sessions sessions available_headroom_sessions sessions cpus iops mbps total_size_gb ON REPORT; +-- +PRO +PRO ALL PDBs +PRO ~~~~~~~~ +WITH +c AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, con_uid, name AS pdb_name, CASE restricted WHEN 'YES' THEN 'RESTRICTED' ELSE open_mode END AS open_mode, CAST(open_time AS DATE) AS open_time, total_size / POWER(10, 9) AS total_size_gb, creation_time -- creation_time does not exist on 12.1 + FROM v$containers + WHERE 1 = 1 + AND con_id > 2 + AND ROWNUM >= 1 /* MATERIALIZE */ +), +r AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, MAX(running_sessions_limit) AS running_sessions_limit, SUM(avg_running_sessions) AS avg_running_sessions, SUM(avg_waiting_sessions) AS avg_waiting_sessions, + GREATEST(MAX(running_sessions_limit) - SUM(avg_running_sessions), 0) AS available_headroom_sessions, + (SUM(cpu_consumed_time) / 1000) / (MAX(intsize_csec) / 100) AS cpus, + SUM(io_requests) / (MAX(intsize_csec) / 100) AS iops, + SUM(io_megabytes) / (MAX(intsize_csec) / 100) AS mbps, + ROW_NUMBER() OVER (PARTITION BY con_id ORDER BY SUM(avg_running_sessions) DESC NULLS LAST) AS rn + FROM v$rsrcmgrmetric + WHERE intsize_csec > 0 + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + con_id +), +-- k AS ( +-- SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ +-- con_id +-- FROM cdb_tables +-- WHERE table_name = 'KIEVDATASTOREMETADATA' +-- AND ROWNUM >= 1 /* MATERIALIZE */ +-- GROUP BY +-- con_id +-- ), +-- for better performance: +k AS ( +SELECT DISTINCT con_id + FROM CONTAINERS(obj$) + WHERE name = 'KIEVDATASTOREMETADATA' + AND namespace = 1 + AND type# = 2 + AND status = 1 +), +-- w AS ( +-- SELECT /*+ OPT_PARAM('_px_cdb_view_enabled' 'FALSE') MATERIALIZE NO_MERGE */ +-- con_id +-- FROM cdb_tables +-- WHERE table_name = 'WORKFLOWINSTANCES' +-- AND ROWNUM >= 1 /* MATERIALIZE */ +-- GROUP BY +-- con_id +-- ), +-- for better performance: +w AS ( +SELECT DISTINCT con_id + FROM CONTAINERS(obj$) + WHERE name = 'WORKFLOWINSTANCES' + AND namespace = 1 + AND type# = 2 + AND status = 1 +), +s AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + con_id, MAX(TO_NUMBER(value)) AS value + FROM v$system_parameter + WHERE name = 'sessions' + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + con_id +), +p AS ( +SELECT /*+ MATERIALIZE NO_MERGE */ + --pdb_uid, MAX(TO_NUMBER(value$)) AS value + pdb_uid, SUBSTR(MAX(value$), 1, INSTR(MAX(value$)||',', ',') - 1) AS value + FROM sys.pdb_spfile$ + WHERE pdb_uid > 1 + AND BITAND(NVL(spare2, 0), 1) = 0 -- or: and spare2=0 (as per wilko.edens@gmail.com) + AND LOWER(name) = 'sessions' + AND ROWNUM >= 1 /* MATERIALIZE */ + GROUP BY + pdb_uid +) +SELECT /*+ ORDERED */ + c.pdb_name, c.con_id, + r.running_sessions_limit, + r.avg_running_sessions, r.available_headroom_sessions, r.avg_waiting_sessions, + -- COALESCE(s.value, p.value) AS sessions, + -- LPAD(COALESCE(TO_CHAR(s.value), p.value), 9, ' ') AS sessions, + COALESCE(s.value, TO_NUMBER(REGEXP_REPLACE(p.value, '[^0-9]', ''))) AS sessions, + r.cpus, c.total_size_gb, r.iops, r.mbps, + CASE WHEN k.con_id IS NOT NULL THEN 1 END AS kiev, + CASE WHEN w.con_id IS NOT NULL THEN 1 END AS wf, + -- '|' AS "|", + -- c.creation_time, c.open_time, + c.open_mode + FROM c, r, k, w, s, p + WHERE r.con_id(+) = c.con_id + --AND r.rn(+) = 1 -- expecting only one row anyways! + AND k.con_id(+) = c.con_id + AND w.con_id(+) = c.con_id + AND s.con_id(+) = c.con_id + AND p.pdb_uid(+) = c.con_uid + ORDER BY + c.pdb_name +/ +PRO +PRO Running Sessions Limit: Resource Manager Utilization Limit (CPU cap after which throttling stars.) +PRO Average Running Sessions: AAS on CPU. +PRO Available Headroom Sessions: Potential AAS slots available for sessions on CPU. +PRO Average Waiting Sessions: AAS wating on Scheduler (Resource Manager throttling.) +-- +PRO +PRO 1. Enter PDB Name: [{&&cs_con_name.}|PDB Name] +DEF pdb_name = '&1.'; +UNDEF 1 2 3 4 5 6 7 8 9 10 11 12; +SELECT COALESCE(TRIM('&&pdb_name.'), '&&cs_con_name.') AS cs_con_name FROM DUAL +/ +-- +-- @@cs_internal/&&cs_set_container_to_curr_pdb. +ALTER SESSION SET CONTAINER = &&cs_con_name.; +-- +PRO +PRO Connected to: &cs_con_name. +PRO +-- +CLEAR BREAK COLUMNS COMPUTE; diff --git a/csierra/pdb_attributes_setup.sql b/csierra/pdb_attributes_setup.sql new file mode 100644 index 0000000..86cfd00 --- /dev/null +++ b/csierra/pdb_attributes_setup.sql @@ -0,0 +1,125 @@ +-- pdb_attributes_setup.sql - Create pdb_attributes Table and merge_pdb_attributes Procedure for IOD PDBs Fleet Inventory +DEF 1 = 'C##IOD'; +DECLARE + l_exists NUMBER; + l_sql_statement VARCHAR2(32767) := q'[ +CREATE TABLE &&1..pdb_attributes ( + -- /* key: version, db_domain, db_name, pdb_name */ + version DATE NOT NULL +, db_domain VARCHAR2(64) NOT NULL +, db_name VARCHAR2(9) NOT NULL +, pdb_name VARCHAR2(30) NOT NULL + -- oci domains +, host_name VARCHAR2(64) NOT NULL +, realm_type VARCHAR2(1) NOT NULL +, realm_type_order_by NUMBER NOT NULL +, realm VARCHAR2(4) NOT NULL +, realm_order_by NUMBER NOT NULL +, region VARCHAR2(64) NOT NULL +, region_acronym VARCHAR2(4) NOT NULL +, region_order_by NUMBER NOT NULL +, locale VARCHAR2(4) NOT NULL +, locale_order_by NUMBER NOT NULL +, kiev_or_wf VARCHAR2(1) NULL + -- data attributes +, ez_connect_string VARCHAR2(256) NOT NULL +, total_size_bytes NUMBER NOT NULL +, sessions NUMBER NOT NULL +, avg_running_sessions NUMBER NULL +, created DATE NULL +, open_time DATE NULL +, timestamp DATE NOT NULL +) +PARTITION BY RANGE (version) +INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) +( +PARTITION before_2016_01_01 VALUES LESS THAN (TO_DATE('2016-01-01', 'YYYY-MM-DD')) +) +ROW STORE COMPRESS ADVANCED +TABLESPACE IOD +]'; + l_sql_statement2 VARCHAR2(32767) := q'[ +CREATE UNIQUE INDEX &&1..pdb_attributes_pk +ON &&1..pdb_attributes +(version, db_domain, db_name, pdb_name) +LOCAL +COMPRESS ADVANCED LOW +TABLESPACE IOD +]'; + l_sql_statement3 VARCHAR2(32767) := q'[ +ALTER TABLE &&1..pdb_attributes ADD PRIMARY KEY +(version, db_domain, db_name, pdb_name) +USING INDEX &&1..pdb_attributes_pk +]'; +BEGIN + SELECT COUNT(*) INTO l_exists FROM dba_tables WHERE owner = UPPER(TRIM('&&1.')) AND table_name = UPPER('pdb_attributes'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement; + END IF; + SELECT COUNT(*) INTO l_exists FROM dba_indexes WHERE owner = UPPER(TRIM('&&1.')) AND index_name = UPPER('pdb_attributes_pk'); + IF l_exists = 0 THEN + EXECUTE IMMEDIATE l_sql_statement2; + EXECUTE IMMEDIATE l_sql_statement3; + END IF; +END; +/ + +CREATE OR REPLACE +PROCEDURE c##iod.merge_pdb_attributes ( + p_version IN VARCHAR2 +, p_timestamp IN VARCHAR2 +, p_db_domain IN VARCHAR2 +, p_db_name IN VARCHAR2 +, p_pdb_name IN VARCHAR2 +, p_host_name IN VARCHAR2 +, p_realm_type IN VARCHAR2 +, p_realm_type_order_by IN VARCHAR2 +, p_realm IN VARCHAR2 +, p_realm_order_by IN VARCHAR2 +, p_region IN VARCHAR2 +, p_region_acronym IN VARCHAR2 +, p_region_order_by IN VARCHAR2 +, p_locale IN VARCHAR2 +, p_locale_order_by IN VARCHAR2 +, p_kiev_or_wf IN VARCHAR2 +, p_ez_connect_string IN VARCHAR2 +, p_total_size_bytes IN VARCHAR2 +, p_sessions IN VARCHAR2 +, p_avg_running_sessions IN VARCHAR2 +, p_created IN VARCHAR2 +, p_open_time IN VARCHAR2 +) +IS + r c##iod.pdb_attributes%ROWTYPE; +BEGIN + EXECUTE IMMEDIATE q'[ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS']'; + -- + r.version := p_version; + r.db_domain := p_db_domain; + r.db_name := p_db_name; + r.pdb_name := p_pdb_name; + r.host_name := p_host_name; + r.realm_type := p_realm_type; + r.realm_type_order_by := p_realm_type_order_by; + r.realm := p_realm; + r.realm_order_by := p_realm_order_by; + r.region := p_region; + r.region_acronym := p_region_acronym; + r.region_order_by := p_region_order_by; + r.locale := p_locale; + r.locale_order_by := p_locale_order_by; + r.kiev_or_wf := p_kiev_or_wf; + r.ez_connect_string := p_ez_connect_string; + r.total_size_bytes := p_total_size_bytes; + r.sessions := p_sessions; + r.avg_running_sessions := p_avg_running_sessions; + r.created := p_created; + r.open_time := p_open_time; + r.timestamp := p_timestamp; + -- + DELETE c##iod.pdb_attributes WHERE version = r.version /*AND host_name = r.host_name*/ AND db_domain = r.db_domain AND db_name = r.db_name AND pdb_name = r.pdb_name; + INSERT INTO c##iod.pdb_attributes VALUES r; + COMMIT; +END merge_pdb_attributes; +/ +SHOW ERRORS; diff --git a/csierra/pdb_config_hist.sql b/csierra/pdb_config_hist.sql new file mode 100644 index 0000000..2f98773 --- /dev/null +++ b/csierra/pdb_config_hist.sql @@ -0,0 +1,33 @@ +set lin 400 pages 200 +col pdb_name format a30 +col CONFIG_GROUP format a20 +col config_name format a40 +col STATUS format a50 +col pdb_class format a15 +col START_TIME format a30 +col END_TIME format a30 +break on CONFIG_SET_ID skip page +select + h.config_set_id, + h.pdb_name, + s.config_group, + s.config_version, + s.config_name, + s.pdb_class, + s.run_order, + start_time, + end_time, + ( CAST( end_time AS DATE ) - CAST( start_time AS DATE ) ) * 86400 as elap_time, + decode(h.status,'OK','OK',decode(h.status,'OK','OK',substr(status,1,500) )) status + --h.status +from + c##iod.pdb_config_hist h + ,c##iod.pdb_config_scripts s +-- v$containers p +where h.config_id = s.config_id +--and upper(h.pdb_name) = p.name +--and h.config_set_id = (select max(config_set_id) from c##iod.pdb_config_hist where upper(pdb_name) = p.name) +and h.config_set_id in (select config_set_id from c##iod.pdb_config_hist where start_time > sysdate - 21) +--and h.pdb_name='ocewfaas_wf' +order by start_time +; \ No newline at end of file diff --git a/csierra/pdb_move_list.sql b/csierra/pdb_move_list.sql new file mode 100644 index 0000000..bbb63df --- /dev/null +++ b/csierra/pdb_move_list.sql @@ -0,0 +1,89 @@ +-- pdb_move_list.sql - List all PDBs and highligh as "MOVE" the 1/3 at the middle in terms of CPU +@@set.sql +ALTER SESSION SET container = CDB$ROOT; +-- +COL pdb_name FOR A30 HEA 'PDB Name' PRI; +COL con_id FOR 990 HEA 'CON|ID' PRI; +COL cpus FOR 9,990.000 HEA 'CPUs' PRI; +COL cpus_perc FOR 990.0 HEA 'CPUs|Perc%' PRI; +COL cpus_rank FOR 990 HEA 'CPUs|Rank' PRI; +COL position FOR 990 HEA 'Pos' PRI; +COL space_gb FOR 99,990.000 HEA 'Space|GBs' PRI; +COL space_perc FOR 990.0 HEA 'Space|Perc%' PRI; +COL space_rank FOR 990 HEA 'Space|Rank' PRI; +COL iops FOR 9,999,990.000 HEA 'IOPS' PRI; +COL iops_perc FOR 990.0 HEA 'IOPS|Perc%' PRI; +COL iops_rank FOR 990 HEA 'IOPS|Rank' PRI; +COL mbps FOR 999,990.000 HEA 'MBPS' PRI; +COL mbps_perc FOR 990.0 HEA 'MBPS|Perc%' PRI; +COL mbps_rank FOR 990 HEA 'MBPS|Rank' PRI; +COL move_pdb FOR A12 HEA 'MOVE PDB' PRI; +-- +BREAK ON REPORT; +COMPUTE SUM OF cpus cpus_perc space_gb space_perc iops iops_perc mbps mbps_perc ON REPORT; +-- +PRO +PRO All PDBs +PRO ~~~~~~~~ +WITH +rsrcmgrmetric AS ( +SELECT r.con_id, + c.name AS pdb_name, + (SUM(r.cpu_consumed_time) / 1000) / (MAX(r.intsize_csec) / 100) AS cpus, + MAX(c.total_size) / POWER(2,30) AS space_gb, + SUM(r.io_requests) / (MAX(r.intsize_csec) / 100) AS iops, + SUM(r.io_megabytes) / (MAX(r.intsize_csec) / 100) AS mbps + FROM v$rsrcmgrmetric r, + v$containers c + WHERE r.con_id > 2 -- exclude CDB$ROOT + AND r.intsize_csec > 0 + AND c.con_id = r.con_id + GROUP BY + r.con_id, -- needed since there are multiple consumer groups (usually 3) per time slice + c.name +), +rsrcmgrmetric_ext AS ( +SELECT con_id, + pdb_name, + cpus, + 100 * cpus / NULLIF(SUM(cpus) OVER(), 0) AS cpus_perc, + RANK() OVER(ORDER BY cpus DESC) AS cpus_rank, + 100 * ROW_NUMBER() OVER(ORDER BY cpus DESC)/COUNT(*) OVER() AS position, + space_gb, + 100 * space_gb / NULLIF(SUM(space_gb) OVER(), 0) AS space_perc, + RANK() OVER(ORDER BY space_gb DESC) AS space_rank, + iops, + 100 * iops / NULLIF(SUM(iops) OVER(), 0) AS iops_perc, + RANK() OVER(ORDER BY iops DESC) AS iops_rank, + mbps, + 100 * mbps / NULLIF(SUM(mbps) OVER(), 0) AS mbps_perc, + RANK() OVER(ORDER BY mbps DESC) AS mbps_rank + FROM rsrcmgrmetric +) +SELECT r.cpus, + r.cpus_perc, + r.cpus_rank, + -- r.position, + r.space_gb, + r.space_perc, + r.space_rank, + r.iops, + r.iops_perc, + r.iops_rank, + r.mbps, + r.mbps_perc, + r.mbps_rank, + r.pdb_name, + r.con_id, + CASE WHEN r.position BETWEEN 33 AND 66 THEN '*** MOVE ***' END AS move_pdb + FROM rsrcmgrmetric_ext r +-- WHERE (r.cpus_perc > 1 OR r.space_perc > 1 OR r.iops_perc > 1 OR r.mbps_perc > 1) +-- AND (r.cpus > 0.1 OR r.space_gb > 0.1 OR r.iops > 0.001 OR r.mbps > 0.001) +ORDER BY + r.cpus_perc DESC, + r.space_perc DESC, + r.iops_perc DESC, + r.mbps_perc DESC +/ +-- +CLEAR BREAK COLUMNS COMPUTE; diff --git a/csierra/pdb_spfile.sql b/csierra/pdb_spfile.sql new file mode 100644 index 0000000..cb37ee7 --- /dev/null +++ b/csierra/pdb_spfile.sql @@ -0,0 +1,28 @@ +-- pdb_spfile.sql - PDB SPFILE Parameters (from CDB) +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +-- +COL pdb_name FOR A30 TRUNC; +COL parameter FOR A40; +COL value$ FOR A30 HEA 'sys.pdb_spfile$'; +COL value FOR A30 HEA 'v$system_parameter'; +-- +BREAK ON pdb_name SKIP PAGE DUPL ON parameter SKIP 1 DUPL; +-- +SELECT c.name pdb_name, + p.name parameter, + p.db_uniq_name, + p.value$, + s.value + FROM sys.pdb_spfile$ p, + v$containers c, + v$system_parameter s + WHERE p.pdb_uid > 1 + AND BITAND(NVL(p.spare2, 0), 1) = 0 -- or: and spare2=0 (as per wilko.edens@gmail.com) + AND c.con_uid(+) = p.pdb_uid + AND s.con_id(+) = c.con_id + AND s.name(+) = p.name + ORDER BY + c.name, + p.name, + p.db_uniq_name +/ diff --git a/csierra/pdb_spfile_diff.sql b/csierra/pdb_spfile_diff.sql new file mode 100644 index 0000000..961fb9f --- /dev/null +++ b/csierra/pdb_spfile_diff.sql @@ -0,0 +1,29 @@ +-- pdb_spfile_diff.sql - PDB SPFILE Parameters (from CDB) +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +-- +COL pdb_name FOR A30 TRUNC; +COL parameter FOR A40; +COL value$ FOR A30 HEA 'sys.pdb_spfile$'; +COL value FOR A30 HEA 'v$system_parameter'; +-- +BREAK ON pdb_name SKIP PAGE DUPL ON parameter SKIP 1 DUPL; +-- +SELECT c.name pdb_name, + p.name parameter, + p.db_uniq_name, + p.value$, + s.value + FROM sys.pdb_spfile$ p, + v$containers c, + v$system_parameter s + WHERE p.pdb_uid > 1 + AND BITAND(NVL(p.spare2, 0), 1) = 0 -- or: and spare2=0 (as per wilko.edens@gmail.com) + AND c.con_uid = p.pdb_uid + AND s.con_id = c.con_id + AND s.name = p.name + AND s.value <> p.value$ + ORDER BY + c.name, + p.name, + p.db_uniq_name +/ diff --git a/csierra/pdb_spfile_sessions_ne_200.sql b/csierra/pdb_spfile_sessions_ne_200.sql new file mode 100644 index 0000000..58c5e99 --- /dev/null +++ b/csierra/pdb_spfile_sessions_ne_200.sql @@ -0,0 +1,30 @@ +REM pdb_spfile_sessions_ne_200.sql - PDB SPFILE Parameters (from CDB) +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +-- +COL pdb_name FOR A30 TRUNC; +COL parameter FOR A40; +COL value$ FOR A30 HEA 'sys.pdb_spfile$'; +COL value FOR A30 HEA 'v$system_parameter'; +-- +BREAK ON pdb_name SKIP PAGE DUPL ON parameter SKIP 1 DUPL; +-- +SELECT c.name pdb_name, + p.name parameter, + p.db_uniq_name, + p.value$, + s.value + FROM sys.pdb_spfile$ p, + v$containers c, + v$system_parameter s + WHERE p.pdb_uid > 1 + AND BITAND(NVL(p.spare2, 0), 1) = 0 -- or: and spare2=0 (as per wilko.edens@gmail.com) + AND LOWER(p.name) = 'sessions' + AND p.value$ <> '200' + AND c.con_uid(+) = p.pdb_uid + AND s.con_id(+) = c.con_id + AND s.name(+) = p.name + ORDER BY + c.name, + p.name, + p.db_uniq_name +/ diff --git a/csierra/ph.sql b/csierra/ph.sql new file mode 100644 index 0000000..23b43d3 --- /dev/null +++ b/csierra/ph.sql @@ -0,0 +1 @@ +@@cs_planh.sql \ No newline at end of file diff --git a/csierra/planx.sql b/csierra/planx.sql new file mode 100644 index 0000000..0e4b8d0 --- /dev/null +++ b/csierra/planx.sql @@ -0,0 +1,1409 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: planx.sql +-- +-- Purpose: Reports Execution Plans for one SQL_ID from RAC and AWR(opt) +-- +-- Author: Carlos Sierra +-- +-- Version: 2018/01/29 +-- +-- Usage: This script inputs two parameters. Parameter 1 is a flag to specify if +-- your database is licensed to use the Oracle Diagnostics Pack or not. +-- Parameter 2 specifies the SQL_ID for which you want to report all +-- execution plans from all nodes, plus all plans from AWR. +-- If you don't have the Oracle Diagnostics Pack license, or if you want +-- to omit the AWR portion then specify "N" on Parameter 1. +-- +-- Example: @planx.sql Y f995z9antmhxn +-- +-- Notes: Developed and tested on 11.2.0.3 and 12.0.1.0 +-- +-- For a more robust tool use SQLd360 +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; +SET LIN 1000; +SET SERVEROUT OFF; + +PRO +PRO 1. Enter Oracle Diagnostics Pack License Flag [ Y | N ] (required) +DEF input_license = '&1.'; +PRO +PRO 2. Enter SQL_ID (required) +DEF sql_id = '&2.'; +-- set license +VAR license CHAR(1); +BEGIN + SELECT UPPER(SUBSTR(TRIM('&input_license.'), 1, 1)) INTO :license FROM DUAL; +END; +/ +-- get dbid +VAR dbid NUMBER; +BEGIN + SELECT dbid INTO :dbid FROM v$database; +END; +/ +-- is_10g +DEF is_10g = ''; +COL is_10g NEW_V is_10g NOPRI; +SELECT '--' is_10g FROM v$instance WHERE version LIKE '10%'; +-- is_11r1 +DEF is_11r1 = ''; +COL is_11r1 NEW_V is_11r1 NOPRI; +SELECT '--' is_11r1 FROM v$instance WHERE version LIKE '11.1%'; +-- is_11r2 +DEF is_11r2 = ''; +COL is_11r2 NEW_V is_11r2 NOPRI; +SELECT '--' is_11r2 FROM v$instance WHERE version LIKE '11.2%'; +-- get current time +COL current_time NEW_V current_time FOR A15; +SELECT 'current_time: ' x, TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') current_time FROM DUAL; +-- set min and max snap id +COL x_minimum_snap_id NEW_V x_minimum_snap_id NOPRI; +SELECT NVL(TO_CHAR(MAX(snap_id)), '0') x_minimum_snap_id FROM dba_hist_snapshot WHERE :license = 'Y' AND begin_interval_time < SYSDATE - 31; +SELECT '-1' x_minimum_snap_id FROM DUAL WHERE TRIM('&&x_minimum_snap_id.') IS NULL; +COL x_maximum_snap_id NEW_V x_maximum_snap_id NOPRI; +SELECT NVL(TO_CHAR(MAX(snap_id)), '&&x_minimum_snap_id.') x_maximum_snap_id FROM dba_hist_snapshot WHERE :license = 'Y'; +SELECT '-1' x_maximum_snap_id FROM DUAL WHERE TRIM('&&x_maximum_snap_id.') IS NULL; +COL x_minimum_date NEW_V x_minimum_date NOPRI; +SELECT TO_CHAR(MIN(begin_interval_time), 'YYYY-MM-DD"T"HH24:MI:SS') x_minimum_date FROM dba_hist_snapshot WHERE :license = 'Y' AND snap_id = &&x_minimum_snap_id.; +COL x_maximum_date NEW_V x_maximum_date NOPRI; +SELECT TO_CHAR(MAX(end_interval_time), 'YYYY-MM-DD"T"HH24:MI:SS') x_maximum_date FROM dba_hist_snapshot WHERE :license = 'Y' AND snap_id = &&x_maximum_snap_id.; +-- get sql_text +VAR sql_id VARCHAR2(13); +EXEC :sql_id := '&&sql_id.'; +VAR sql_text CLOB; +EXEC :sql_text := NULL; +VAR signature NUMBER; +VAR signaturef NUMBER; +BEGIN + SELECT exact_matching_signature, sql_text INTO :signature, :sql_text FROM gv$sql WHERE sql_id = '&&sql_id.' AND ROWNUM = 1; +END; +/ +BEGIN + IF :sql_text IS NULL OR NVL(DBMS_LOB.GETLENGTH(:sql_text), 0) = 0 THEN + SELECT sql_fulltext + INTO :sql_text + FROM gv$sqlstats + WHERE sql_id = :sql_id + AND ROWNUM = 1; + END IF; +END; +/ +BEGIN + IF :license = 'Y' AND (:sql_text IS NULL OR NVL(DBMS_LOB.GETLENGTH(:sql_text), 0) = 0) THEN + SELECT sql_text + INTO :sql_text + FROM dba_hist_sqltext + WHERE sql_id = :sql_id + AND ROWNUM = 1; + END IF; +END; +/ +BEGIN + IF :signature IS NULL THEN + :signature := NVL(DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(:sql_text), -1); + END IF; +END; +/ +EXEC :signaturef := NVL(DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(:sql_text, TRUE), -1); +COL signature NEW_V signature FOR A20; +COL signaturef NEW_V signaturef FOR A20; +SELECT TO_CHAR(:signature) signature, TO_CHAR(:signaturef) signaturef FROM DUAL; +BEGIN + IF :sql_text IS NULL THEN + :sql_text := 'Unknown SQL Text'; + END IF; +END; +/ +COL x_host_name NEW_V x_host_name; +SELECT host_name x_host_name FROM v$instance; +COL x_db_name NEW_V x_db_name; +SELECT name x_db_name FROM v$database; +COL x_container NEW_V x_container; +SELECT 'NONE' x_container FROM DUAL; +SELECT SYS_CONTEXT('USERENV', 'CON_NAME') x_container FROM DUAL; +DEF sql_handle = ''; +COL sql_handle NEW_V sql_handle; +SELECT sql_handle FROM dba_sql_plan_baselines WHERE signature = &&signature. AND ROWNUM = 1; + +-- spool and sql_text +SPO planx_&&sql_id._&¤t_time..txt; +PRO SQL_ID: &&sql_id. +PRO SIGNATURE: &&signature. +PRO SIGNATUREF: &&signaturef. +PRO SQL_HANDLE: &&sql_handle. +PRO HOST: &&x_host_name. +PRO DATABASE: &&x_db_name. +PRO CONTAINER: &&x_container. +PRO +SET PAGES 0; +PRINT :sql_text; +SET PAGES 50; +-- columns funky format +COL action_ff FOR A30 HEA "Action"; +COL appl_wait_secs_ff FOR A18 HEA "Appl wait secs"; +COL begin_interval_time_ff FOR A20 HEA "Begin interval time"; +COL buffer_gets_ff FOR A20 HEA "Buffer Gets"; +COL cluster_wait_secs_ff FOR A18 HEA "Cluster wait secs"; +COL conc_wait_secs_ff FOR A18 HEA "Conc wait secs"; +COL cpu_secs_ff FOR A18 HEA "CPU secs"; +COL current_object_ff FOR A60 HEA "Current object"; +COL direct_writes_ff FOR A20 HEA "Direct Writes"; +COL disk_reads_ff FOR A20 HEA "Disk Reads"; +COL elsapsed_secs_ff FOR A18 HEA "Elapsed secs"; +COL end_interval_time_ff FOR A20 HEA "End interval time"; +COL executions_ff FOR A20 HEA "Executions"; +COL fetches_ff FOR A20 HEA "Fetches"; +COL first_load_time_ff FOR A20 HEA "First load time"; +COL inst_child_ff FOR A21 HEA "Inst child"; +COL invalidations_ff FOR A8 HEA "Invalidations"; +COL io_cell_offload_eligible_b_ff FOR A30 HEA "IO cell offload eligible bytes"; +COL io_cell_offload_returned_b_ff FOR A30 HEA "IO cell offload returned bytes"; +COL io_cell_uncompressed_bytes_ff FOR A30 HEA "IO cell uncompressed bytes"; +COL io_interconnect_bytes_ff FOR A30 HEA "IO interconnect bytes"; +COL io_saved_ff FOR A10 HEA "IO saved"; +COL java_exec_secs_ff FOR A18 HEA "Java exec secs"; +COL last_active_time_ff FOR A20 HEA "Last active time"; +COL last_load_time_ff FOR A20 HEA "Last load time"; +COL line_id_ff FOR 9999999 HEA "Line id"; +COL loaded_ff FOR A6 HEA "Loaded"; +COL loaded_versions_ff FOR A15 HEA "Loaded versions"; +COL loads_ff FOR A8 HEA "Loads"; +COL module_ff FOR A30 HEA "Module"; +COL open_versions_ff FOR A15 HEA "Open versions"; +COL operation_ff FOR A50 HEA "Operation"; +COL parse_calls_ff FOR A20 HEA "Parse calls"; +COL percent_ff FOR 9,990.0 HEA "Percent"; +COL persistent_mem_ff FOR A20 HEA "Persistent mem"; +COL plan_timestamp_ff FOR A19 HEA "Plan timestamp"; +COL plsql_exec_secs_ff FOR A18 HEA "PLSQL exec secs"; +COL px_servers_executions_ff FOR A20 HEA "PX servers executions"; +COL rows_processed_ff FOR A20 HEA "Rows processed"; +COL runtime_mem_ff FOR A20 HEA "Runtime mem"; +COL samples_ff FOR 999,999,999,999 HEA "Samples"; +COL service_ff FOR A30 HEA "Service"; +COL sharable_mem_ff FOR A20 HEA "Sharable mem"; +COL sorts_ff FOR A20 HEA "Sorts"; +COL sql_profile_ff FOR A30 HEA "SQL Profile"; +COL timed_event_ff FOR A70 HEA "Timed event"; +COL total_sharable_mem_ff FOR A20 HEA "Total sharable mem"; +COL user_io_wait_secs_ff FOR A18 HEA "User IO wait secs"; +COL users_executing_ff FOR A15 HEA "Users executing"; +COL users_opening_ff FOR A15 HEA "Users opening"; +COL version_count_ff FOR A8 HEA "Version count"; + +COL obsl FOR A4; +COL sens FOR A4; +COL aware FOR A5; +COL shar FOR A4; +COL u_exec FOR 999999; +COL obj_sta FOR A7; + +COL plan_name FOR A30; +COL created FOR A30; +COL last_executed FOR A30; + +COL avg_et_ms_awr FOR A11 HEA 'ET Avg|AWR (ms)'; +COL avg_et_ms_mem FOR A11 HEA 'ET Avg|MEM (ms)'; +COL avg_cpu_ms_awr FOR A11 HEA 'CPU Avg|AWR (ms)'; +COL avg_cpu_ms_mem FOR A11 HEA 'CPU Avg|MEM (ms)'; +COL avg_bg_awr FOR 999,999,990 HEA 'BG Avg|AWR'; +COL avg_bg_mem FOR 999,999,990 HEA 'BG Avg|MEM'; +COL avg_row_awr FOR 999,999,990 HEA 'Rows Avg|AWR'; +COL avg_row_mem FOR 999,999,990 HEA 'Rows Avg|MEM'; +COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL executions_awr FOR 999,999,999,999 HEA 'Executions|AWR'; +COL executions_mem FOR 999,999,999,999 HEA 'Executions|MEM'; +COL min_cost FOR 9,999,999 HEA 'MIN Cost'; +COL max_cost FOR 9,999,999 HEA 'MAX Cost'; +COL nl FOR 99; +COL hj FOR 99; +COL mj FOR 99; +COL p100_et_ms FOR A11 HEA 'ET 100th|Pctl (ms)'; +COL p99_et_ms FOR A11 HEA 'ET 99th|Pctl (ms)'; +COL p97_et_ms FOR A11 HEA 'ET 97th|Pctl (ms)'; +COL p95_et_ms FOR A11 HEA 'ET 95th|Pctl (ms)'; +COL p100_cpu_ms FOR A11 HEA 'CPU 100th|Pctl (ms)'; +COL p99_cpu_ms FOR A11 HEA 'CPU 99th|Pctl (ms)'; +COL p97_cpu_ms FOR A11 HEA 'CPU 97th|Pctl (ms)'; +COL p95_cpu_ms FOR A11 HEA 'CPU 95th|Pctl (ms)'; + +PRO +PRO PLANS PERFORMANCE +PRO ~~~~~~~~~~~~~~~~~ +WITH +pm AS ( +SELECT plan_hash_value, operation, + CASE operation WHEN 'NESTED LOOPS' THEN COUNT(DISTINCT id) ELSE 0 END nl, + CASE operation WHEN 'HASH JOIN' THEN COUNT(DISTINCT id) ELSE 0 END hj, + CASE operation WHEN 'MERGE JOIN' THEN COUNT(DISTINCT id) ELSE 0 END mj + FROM gv$sql_plan + WHERE sql_id = TRIM('&&sql_id.') + GROUP BY + plan_hash_value, + operation ), +pa AS ( +SELECT plan_hash_value, operation, + CASE operation WHEN 'NESTED LOOPS' THEN COUNT(DISTINCT id) ELSE 0 END nl, + CASE operation WHEN 'HASH JOIN' THEN COUNT(DISTINCT id) ELSE 0 END hj, + CASE operation WHEN 'MERGE JOIN' THEN COUNT(DISTINCT id) ELSE 0 END mj + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND :license = 'Y' + GROUP BY + plan_hash_value, + operation ), +pm_pa AS ( +SELECT plan_hash_value, MAX(nl) nl, MAX(hj) hj, MAX(mj) mj + FROM pm + GROUP BY + plan_hash_value + UNION +SELECT plan_hash_value, MAX(nl) nl, MAX(hj) hj, MAX(mj) mj + FROM pa + GROUP BY + plan_hash_value ), +p AS ( +SELECT plan_hash_value, MAX(nl) nl, MAX(hj) hj, MAX(mj) mj + FROM pm_pa + GROUP BY + plan_hash_value ), +phv_perf AS ( +SELECT plan_hash_value, + snap_id, + SUM(elapsed_time_delta)/SUM(executions_delta) avg_et_us, + SUM(cpu_time_delta)/SUM(executions_delta) avg_cpu_us + FROM dba_hist_sqlstat + WHERE sql_id = TRIM('&&sql_id.') + AND executions_delta > 0 + AND optimizer_cost > 0 + AND :license = 'Y' + GROUP BY + plan_hash_value, + snap_id ), +phv_stats AS ( +SELECT plan_hash_value, + MAX(avg_et_us) p100_et_us, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY avg_et_us) p99_et_us, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY avg_et_us) p97_et_us, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY avg_et_us) p95_et_us, + MAX(avg_cpu_us) p100_cpu_us, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY avg_cpu_us) p99_cpu_us, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY avg_cpu_us) p97_cpu_us, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY avg_cpu_us) p95_cpu_us + FROM phv_perf + GROUP BY + plan_hash_value ), +m AS ( +SELECT plan_hash_value, + SUM(elapsed_time)/SUM(executions) avg_et_us, + SUM(cpu_time)/SUM(executions) avg_cpu_us, + ROUND(SUM(buffer_gets)/SUM(executions)) avg_buffer_gets, + ROUND(SUM(rows_processed)/SUM(executions)) avg_rows_processed, + SUM(executions) executions, + MIN(optimizer_cost) min_cost, + MAX(optimizer_cost) max_cost + FROM gv$sql + WHERE sql_id = TRIM('&&sql_id.') + AND executions > 0 + AND optimizer_cost > 0 + GROUP BY + plan_hash_value ), +a AS ( +SELECT plan_hash_value, + SUM(elapsed_time_delta)/SUM(executions_delta) avg_et_us, + SUM(cpu_time_delta)/SUM(executions_delta) avg_cpu_us, + ROUND(SUM(buffer_gets_delta)/SUM(executions_delta)) avg_buffer_gets, + ROUND(SUM(rows_processed_delta)/SUM(executions_delta)) avg_rows_processed, + SUM(executions_delta) executions, + MIN(optimizer_cost) min_cost, + MAX(optimizer_cost) max_cost + FROM dba_hist_sqlstat + WHERE sql_id = TRIM('&&sql_id.') + AND executions_delta > 0 + AND optimizer_cost > 0 + AND :license = 'Y' + GROUP BY + plan_hash_value ) +SELECT + p.plan_hash_value, + LPAD(TRIM(TO_CHAR(ROUND(a.avg_et_us/1e3, 6), '9999,990.000')), 11) avg_et_ms_awr, + LPAD(TRIM(TO_CHAR(ROUND(m.avg_et_us/1e3, 6), '9999,990.000')), 11) avg_et_ms_mem, + LPAD(TRIM(TO_CHAR(ROUND(a.avg_cpu_us/1e3, 6), '9999,990.000')), 11) avg_cpu_ms_awr, + LPAD(TRIM(TO_CHAR(ROUND(m.avg_cpu_us/1e3, 6), '9999,990.000')), 11) avg_cpu_ms_mem, + a.avg_buffer_gets avg_bg_awr, + m.avg_buffer_gets avg_bg_mem, + a.avg_rows_processed avg_row_awr, + m.avg_rows_processed avg_row_mem, + a.executions executions_awr, + m.executions executions_mem, + LEAST(NVL(m.min_cost, a.min_cost), NVL(a.min_cost, m.min_cost)) min_cost, + GREATEST(NVL(m.max_cost, a.max_cost), NVL(a.max_cost, m.max_cost)) max_cost, + p.nl, + p.hj, + p.mj, + LPAD(TRIM(TO_CHAR(ROUND(s.p100_et_us/1e3, 6), '9999,990.000')), 11) p100_et_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p99_et_us/1e3, 6), '9999,990.000')), 11) p99_et_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p97_et_us/1e3, 6), '9999,990.000')), 11) p97_et_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p95_et_us/1e3, 6), '9999,990.000')), 11) p95_et_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p100_cpu_us/1e3, 6), '9999,990.000')), 11) p100_cpu_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p99_cpu_us/1e3, 6), '9999,990.000')), 11) p99_cpu_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p97_cpu_us/1e3, 6), '9999,990.000')), 11) p97_cpu_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p95_cpu_us/1e3, 6), '9999,990.000')), 11) p95_cpu_ms + FROM p, m, a, phv_stats s + WHERE p.plan_hash_value = m.plan_hash_value(+) + AND p.plan_hash_value = a.plan_hash_value(+) + AND p.plan_hash_value = s.plan_hash_value(+) + ORDER BY + NVL(a.avg_et_us, m.avg_et_us), m.avg_et_us; + +PRO +PRO GV$SQLSTATS (it shows only one row for SQL, with most recent info) +PRO ~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT inst_id + , plan_hash_value + , LPAD(TO_CHAR(parse_calls, '999,999,999,999,990'), 20) parse_calls_ff + , LPAD(TO_CHAR(executions, '999,999,999,999,990'), 20) executions_ff + , LPAD(TO_CHAR(px_servers_executions, '999,999,999,999,990'), 20) px_servers_executions_ff + , LPAD(TO_CHAR(fetches, '999,999,999,999,990'), 20) fetches_ff + , LPAD(TO_CHAR(rows_processed, '999,999,999,999,990'), 20) rows_processed_ff + , LPAD(TO_CHAR(version_count, '999,990'), 8) version_count_ff + , LPAD(TO_CHAR(loads, '999,990'), 8) loads_ff + , LPAD(TO_CHAR(invalidations, '999,990'), 8) invalidations_ff + , LPAD(TO_CHAR(buffer_gets, '999,999,999,999,990'), 20) buffer_gets_ff + , LPAD(TO_CHAR(disk_reads, '999,999,999,999,990'), 20) disk_reads_ff + , LPAD(TO_CHAR(direct_writes, '999,999,999,999,990'), 20) direct_writes_ff + , LPAD(TO_CHAR(ROUND(elapsed_time/1e6, 3), '999,999,990.000'), 18) elsapsed_secs_ff + , LPAD(TO_CHAR(ROUND(cpu_time/1e6, 3), '999,999,990.000'), 18) cpu_secs_ff + , LPAD(TO_CHAR(ROUND(user_io_wait_time/1e6, 3), '999,999,990.000'), 18) user_io_wait_secs_ff + , LPAD(TO_CHAR(ROUND(cluster_wait_time/1e6, 3), '999,999,990.000'), 18) cluster_wait_secs_ff + , LPAD(TO_CHAR(ROUND(application_wait_time/1e6, 3), '999,999,990.000'), 18) appl_wait_secs_ff + , LPAD(TO_CHAR(ROUND(concurrency_wait_time/1e6, 3), '999,999,990.000'), 18) conc_wait_secs_ff + , LPAD(TO_CHAR(ROUND(plsql_exec_time/1e6, 3), '999,999,990.000'), 18) plsql_exec_secs_ff + , LPAD(TO_CHAR(ROUND(java_exec_time/1e6, 3), '999,999,990.000'), 18) java_exec_secs_ff + , LPAD(TO_CHAR(sorts, '999,999,999,999,990'), 20) sorts_ff + , LPAD(TO_CHAR(sharable_mem, '999,999,999,999,990'), 20) sharable_mem_ff + , LPAD(TO_CHAR(total_sharable_mem, '999,999,999,999,990'), 20) total_sharable_mem_ff + , LPAD(TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS'), 20) last_active_time_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_offload_eligible_bytes, '999,999,999,999,999,999,990'), 30) io_cell_offload_eligible_b_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_interconnect_bytes, '999,999,999,999,999,999,990'), 30) io_interconnect_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_uncompressed_bytes, '999,999,999,999,999,999,990'), 30) io_cell_uncompressed_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_offload_returned_bytes, '999,999,999,999,999,999,990'), 30) io_cell_offload_returned_b_ff + &&is_10g.&&is_11r1., LPAD(CASE WHEN io_cell_offload_eligible_bytes > io_cell_offload_returned_bytes AND io_cell_offload_eligible_bytes > 0 THEN LPAD(TO_CHAR(ROUND((io_cell_offload_eligible_bytes - io_cell_offload_returned_bytes) * 100 / io_cell_offload_eligible_bytes, 2), '990.00')||' %', 9) END, 10) io_saved_ff + FROM gv$sqlstats + WHERE sql_id = :sql_id + ORDER BY inst_id +/ + +BREAK ON inst_id SKIP PAGE ON obj_sta SKIP PAGE ON obsl SKIP PAGE ON shar SKIP PAGE; +PRO +PRO GV$SQL (ordered by inst_id, object_status, is_obsolete, is_shareable, last_active_time and child_number) +PRO ~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT inst_id + , SUBSTR(object_status, 1, 7) obj_sta + , is_obsolete obsl + , is_shareable shar + , LPAD(TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS'), 20) last_active_time_ff + , child_number + , plan_hash_value + , LPAD(TO_CHAR(parse_calls, '999,999,999,999,990'), 20) parse_calls_ff + , LPAD(TO_CHAR(executions, '999,999,999,999,990'), 20) executions_ff + , LPAD(TO_CHAR(px_servers_executions, '999,999,999,999,990'), 20) px_servers_executions_ff + , LPAD(TO_CHAR(fetches, '999,999,999,999,990'), 20) fetches_ff + , LPAD(TO_CHAR(rows_processed, '999,999,999,999,990'), 20) rows_processed_ff + , LPAD(TO_CHAR(loaded_versions, '999,999,990'), 15) loaded_versions_ff + , LPAD(TO_CHAR(open_versions, '999,999,990'), 15) open_versions_ff + , LPAD(TO_CHAR(users_opening, '999,999,990'), 15) users_opening_ff + , LPAD(TO_CHAR(users_executing, '999,999,990'), 15) users_executing_ff + , LPAD(TO_CHAR(loads, '999,990'), 8) loads_ff + , LPAD(TO_CHAR(invalidations, '999,990'), 8) invalidations_ff + , LPAD(TO_CHAR(buffer_gets, '999,999,999,999,990'), 20) buffer_gets_ff + , LPAD(TO_CHAR(disk_reads, '999,999,999,999,990'), 20) disk_reads_ff + , LPAD(TO_CHAR(direct_writes, '999,999,999,999,990'), 20) direct_writes_ff + , LPAD(TO_CHAR(ROUND(elapsed_time/1e6, 3), '999,999,990.000'), 18) elsapsed_secs_ff + , LPAD(TO_CHAR(ROUND(cpu_time/1e6, 3), '999,999,990.000'), 18) cpu_secs_ff + , LPAD(TO_CHAR(ROUND(user_io_wait_time/1e6, 3), '999,999,990.000'), 18) user_io_wait_secs_ff + , LPAD(TO_CHAR(ROUND(cluster_wait_time/1e6, 3), '999,999,990.000'), 18) cluster_wait_secs_ff + , LPAD(TO_CHAR(ROUND(application_wait_time/1e6, 3), '999,999,990.000'), 18) appl_wait_secs_ff + , LPAD(TO_CHAR(ROUND(concurrency_wait_time/1e6, 3), '999,999,990.000'), 18) conc_wait_secs_ff + , LPAD(TO_CHAR(ROUND(plsql_exec_time/1e6, 3), '999,999,990.000'), 18) plsql_exec_secs_ff + , LPAD(TO_CHAR(ROUND(java_exec_time/1e6, 3), '999,999,990.000'), 18) java_exec_secs_ff + , LPAD(TO_CHAR(sorts, '999,999,999,999,990'), 20) sorts_ff + , LPAD(TO_CHAR(sharable_mem, '999,999,999,999,990'), 20) sharable_mem_ff + , LPAD(TO_CHAR(persistent_mem, '999,999,999,999,990'), 20) persistent_mem_ff + , LPAD(TO_CHAR(runtime_mem, '999,999,999,999,990'), 20) runtime_mem_ff + , LPAD(first_load_time, 20) first_load_time_ff + , LPAD(last_load_time, 20) last_load_time_ff + , optimizer_cost + , optimizer_env_hash_value + , parsing_schema_name + , service service_ff + , module module_ff + , action action_ff + , sql_profile sql_profile_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_offload_eligible_bytes, '999,999,999,999,999,999,990'), 30) io_cell_offload_eligible_b_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_interconnect_bytes, '999,999,999,999,999,999,990'), 30) io_interconnect_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_uncompressed_bytes, '999,999,999,999,999,999,990'), 30) io_cell_uncompressed_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_offload_returned_bytes, '999,999,999,999,999,999,990'), 30) io_cell_offload_returned_b_ff + &&is_10g.&&is_11r1., LPAD(CASE WHEN io_cell_offload_eligible_bytes > io_cell_offload_returned_bytes AND io_cell_offload_eligible_bytes > 0 THEN LPAD(TO_CHAR(ROUND((io_cell_offload_eligible_bytes - io_cell_offload_returned_bytes) * 100 / io_cell_offload_eligible_bytes, 2), '990.00')||' %', 9) END, 10) io_saved_ff + FROM gv$sql + WHERE sql_id = :sql_id + ORDER BY inst_id + , SUBSTR(object_status, 1, 7) DESC + , is_obsolete + , is_shareable DESC + , last_active_time DESC + , child_number DESC +/ +CLEAR BREAKS; + +PRO +PRO GV$SQL (grouped by PHV and ordered by et_secs_per_exec) +PRO ~~~~~~ +SELECT plan_hash_value + , TO_CHAR(ROUND(SUM(elapsed_time)/SUM(executions)/1e6,6), '999,990.000000') et_secs_per_exec + , TO_CHAR(ROUND(SUM(cpu_time)/SUM(executions)/1e6,6), '999,990.000000') cpu_secs_per_exec + , SUM(executions) executions + --, TO_CHAR(ROUND(SUM(elapsed_time)/1e6,6), '999,999,999,990') et_secs_tot + --, TO_CHAR(ROUND(SUM(cpu_time)/1e6,6), '999,999,999,990') cpu_secs_tot + , COUNT(DISTINCT child_number) cursors + , MAX(child_number) max_child + , SUM(CASE is_bind_sensitive WHEN 'Y' THEN 1 ELSE 0 END) bind_send + , SUM(CASE is_bind_aware WHEN 'Y' THEN 1 ELSE 0 END) bind_aware + , SUM(CASE is_shareable WHEN 'Y' THEN 1 ELSE 0 END) shareable + , SUM(CASE object_status WHEN 'VALID' THEN 1 ELSE 0 END) valid + , SUM(CASE object_status WHEN 'INVALID_UNAUTH' THEN 1 ELSE 0 END) invalid + , TO_CHAR(MAX(last_active_time), 'YYYY-MM-DD"T"HH24:MI:SS') last_active_time + , ROUND(SUM(buffer_gets)/SUM(executions)) buffers_per_exec + , TO_CHAR(ROUND(SUM(rows_processed)/SUM(executions), 3), '999,999,999,990.000') rows_per_exec + FROM gv$sql + WHERE sql_id = :sql_id + AND executions > 0 + GROUP BY + plan_hash_value + ORDER BY + 2 +/ + +BREAK ON inst_id SKIP PAGE ON obj_sta SKIP PAGE ON obsl SKIP PAGE ON shar SKIP PAGE; +PRO +PRO GV$SQL (ordered by inst_id, object_status, is_obsolete, is_shareable, last_active_time and child_number) +PRO ~~~~~~ +SELECT inst_id + , SUBSTR(object_status, 1, 7) obj_sta + , is_obsolete obsl + , is_shareable shar + , LPAD(TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS'), 20) last_active_time_ff + , child_number + , plan_hash_value + , is_bind_sensitive sens + , is_bind_aware aware + , users_executing u_exec + , TO_CHAR(ROUND(elapsed_time/executions/1e6,6), '999,990.000000') et_secs_per_exec + , TO_CHAR(ROUND(cpu_time/executions/1e6,6), '999,990.000000') cpu_secs_per_exec + , executions + , TO_CHAR(ROUND(elapsed_time/1e6,6), '999,999,999,990') et_secs_tot + , TO_CHAR(ROUND(cpu_time/1e6,6), '999,999,999,990') cpu_secs_tot + , TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS') last_active_time + , ROUND(buffer_gets/executions) buffers_per_exec + , TO_CHAR(ROUND(rows_processed/executions, 3), '999,999,999,990.000') rows_per_exec + FROM gv$sql + WHERE sql_id = :sql_id + AND executions > 0 + ORDER BY inst_id + , SUBSTR(object_status, 1, 7) DESC + , is_obsolete + , is_shareable DESC + , last_active_time DESC + , child_number DESC +/ +CLEAR BREAKS; + +BREAK ON inst_id SKIP PAGE ON obj_sta SKIP PAGE ON obsl SKIP PAGE ON shar SKIP PAGE; +PRO +PRO GV$SQL (ordered by inst_id, object_status, is_obsolete, is_shareable, last_active_time and child_number) +PRO ~~~~~~ +SELECT inst_id + , SUBSTR(object_status, 1, 7) obj_sta + , is_obsolete obsl + , is_shareable shar + , LPAD(TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS'), 20) last_active_time_ff + , child_number + , plan_hash_value + &&is_10g., sql_plan_baseline + , sql_profile + &&is_10g., sql_patch + FROM gv$sql + WHERE sql_id = :sql_id + AND executions > 0 + ORDER BY inst_id + , SUBSTR(object_status, 1, 7) DESC + , is_obsolete + , is_shareable DESC + , last_active_time DESC + , child_number DESC +/ +CLEAR BREAKS; + +PRO +--PRO GV$SQL_PLAN_STATISTICS_ALL LAST (ordered by inst_id and child_number) +PRO GV$SQL_PLAN_STATISTICS_ALL LAST (ordered by child_number) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +--BREAK ON inst_child_ff SKIP 2; +SET PAGES 0; +SPO planx_&&sql_id._&¤t_time..txt APP; +/* +WITH v AS ( +SELECT /*+ MATERIALIZE * / + DISTINCT sql_id, inst_id, child_number + FROM gv$sql + WHERE sql_id = :sql_id + AND loaded_versions > 0 + ORDER BY 1, 2, 3 ) +SELECT /*+ ORDERED USE_NL(t) * / + RPAD('Inst: '||v.inst_id, 9)||' '||RPAD('Child: '||v.child_number, 11) inst_child_ff, + t.plan_table_output + FROM v, TABLE(DBMS_XPLAN.DISPLAY('gv$sql_plan_statistics_all', NULL, 'ADVANCED ALLSTATS LAST', + 'inst_id = '||v.inst_id||' AND sql_id = '''||v.sql_id||''' AND child_number = '||v.child_number)) t +/ +*/ +SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(:sql_id, NULL, 'ADVANCED ALLSTATS LAST')); + +PRO +PRO DBA_HIST_SQLSTAT DELTA (ordered by snap_id DESC, instance_number and plan_hash_value) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SET PAGES 50; +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT s.snap_id + , TO_CHAR(s.begin_interval_time, 'YYYY-MM-DD"T"HH24:MI:SS') begin_interval_time_ff + , TO_CHAR(s.end_interval_time, 'YYYY-MM-DD"T"HH24:MI:SS') end_interval_time_ff + , s.instance_number + , h.plan_hash_value + , DECODE(h.loaded_versions, 1, 'Y', 'N') loaded_ff + , LPAD(TO_CHAR(h.version_count, '999,990'), 8) version_count_ff + , LPAD(TO_CHAR(h.parse_calls_delta, '999,999,999,999,990'), 20) parse_calls_ff + , LPAD(TO_CHAR(h.executions_delta, '999,999,999,999,990'), 20) executions_ff + , LPAD(TO_CHAR(h.rows_processed_delta, '999,999,999,999,990'), 20) rows_processed_ff + , LPAD(TO_CHAR(h.loads_delta, '999,990'), 8) loads_ff + , LPAD(TO_CHAR(h.invalidations_delta, '999,990'), 8) invalidations_ff + , LPAD(TO_CHAR(h.buffer_gets_delta, '999,999,999,999,990'), 20) buffer_gets_ff + , LPAD(TO_CHAR(h.disk_reads_delta, '999,999,999,999,990'), 20) disk_reads_ff + , LPAD(TO_CHAR(h.direct_writes_delta, '999,999,999,999,990'), 20) direct_writes_ff + , LPAD(TO_CHAR(ROUND(h.elapsed_time_delta/1e6, 3), '999,999,990.000'), 18) elsapsed_secs_ff + , LPAD(TO_CHAR(ROUND(h.cpu_time_delta/1e6, 3), '999,999,990.000'), 18) cpu_secs_ff + , LPAD(TO_CHAR(ROUND(h.iowait_delta/1e6, 3), '999,999,990.000'), 18) user_io_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.clwait_delta/1e6, 3), '999,999,990.000'), 18) cluster_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.apwait_delta/1e6, 3), '999,999,990.000'), 18) appl_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.ccwait_delta/1e6, 3), '999,999,990.000'), 18) conc_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.plsexec_time_delta/1e6, 3), '999,999,990.000'), 18) plsql_exec_secs_ff + , LPAD(TO_CHAR(ROUND(h.javexec_time_delta/1e6, 3), '999,999,990.000'), 18) java_exec_secs_ff + , LPAD(TO_CHAR(h.sorts_delta, '999,999,999,999,990'), 20) sorts_ff + , LPAD(TO_CHAR(h.sharable_mem, '999,999,999,999,990'), 20) sharable_mem_ff + , h.optimizer_cost + , h.optimizer_env_hash_value + , h.parsing_schema_name + , h.module module_ff + , h.action action_ff + , h.sql_profile sql_profile_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_offload_elig_bytes_delta, '999,999,999,999,999,999,990'), 30) io_cell_offload_eligible_b_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_interconnect_bytes_delta, '999,999,999,999,999,999,990'), 30) io_interconnect_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.cell_uncompressed_bytes_delta, '999,999,999,999,999,999,990'), 30) io_cell_uncompressed_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_offload_return_bytes_delta, '999,999,999,999,999,999,990'), 30) io_cell_offload_returned_b_ff + &&is_10g.&&is_11r1., LPAD(CASE WHEN h.io_offload_elig_bytes_delta > h.io_offload_return_bytes_delta AND h.io_offload_elig_bytes_delta > 0 THEN LPAD(TO_CHAR(ROUND((h.io_offload_elig_bytes_delta - h.io_offload_return_bytes_delta) * 100 / h.io_offload_elig_bytes_delta, 2), '990.00')||' %', 9) END, 10) io_saved_ff + FROM dba_hist_sqlstat h, + dba_hist_snapshot s + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number + ORDER BY 1 DESC, 4, 5 +/ + +PRO +PRO DBA_HIST_SQLSTAT TOTAL (ordered by snap_id DESC, instance_number and plan_hash_value) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT s.snap_id + , TO_CHAR(s.begin_interval_time, 'YYYY-MM-DD"T"HH24:MI:SS') begin_interval_time_ff + , TO_CHAR(s.end_interval_time, 'YYYY-MM-DD"T"HH24:MI:SS') end_interval_time_ff + , s.instance_number + , h.plan_hash_value + , DECODE(h.loaded_versions, 1, 'Y', 'N') loaded_ff + , LPAD(TO_CHAR(h.version_count, '999,990'), 8) version_count_ff + , LPAD(TO_CHAR(h.parse_calls_total, '999,999,999,999,990'), 20) parse_calls_ff + , LPAD(TO_CHAR(h.executions_total, '999,999,999,999,990'), 20) executions_ff + , LPAD(TO_CHAR(h.rows_processed_total, '999,999,999,999,990'), 20) rows_processed_ff + , LPAD(TO_CHAR(h.loads_total, '999,990'), 8) loads_ff + , LPAD(TO_CHAR(h.invalidations_total, '999,990'), 8) invalidations_ff + , LPAD(TO_CHAR(h.buffer_gets_total, '999,999,999,999,990'), 20) buffer_gets_ff + , LPAD(TO_CHAR(h.disk_reads_total, '999,999,999,999,990'), 20) disk_reads_ff + , LPAD(TO_CHAR(h.direct_writes_total, '999,999,999,999,990'), 20) direct_writes_ff + , LPAD(TO_CHAR(ROUND(h.elapsed_time_total/1e6, 3), '999,999,990.000'), 18) elsapsed_secs_ff + , LPAD(TO_CHAR(ROUND(h.cpu_time_total/1e6, 3), '999,999,990.000'), 18) cpu_secs_ff + , LPAD(TO_CHAR(ROUND(h.iowait_total/1e6, 3), '999,999,990.000'), 18) user_io_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.clwait_total/1e6, 3), '999,999,990.000'), 18) cluster_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.apwait_total/1e6, 3), '999,999,990.000'), 18) appl_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.ccwait_total/1e6, 3), '999,999,990.000'), 18) conc_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.plsexec_time_total/1e6, 3), '999,999,990.000'), 18) plsql_exec_secs_ff + , LPAD(TO_CHAR(ROUND(h.javexec_time_total/1e6, 3), '999,999,990.000'), 18) java_exec_secs_ff + , LPAD(TO_CHAR(h.sorts_total, '999,999,999,999,990'), 20) sorts_ff + , LPAD(TO_CHAR(h.sharable_mem, '999,999,999,999,990'), 20) sharable_mem_ff + , h.optimizer_cost + , h.optimizer_env_hash_value + , h.parsing_schema_name + , h.module module_ff + , h.action action_ff + , h.sql_profile sql_profile_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_offload_elig_bytes_total, '999,999,999,999,999,999,990'), 30) io_cell_offload_eligible_b_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_interconnect_bytes_total, '999,999,999,999,999,999,990'), 30) io_interconnect_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.cell_uncompressed_bytes_total, '999,999,999,999,999,999,990'), 30) io_cell_uncompressed_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_offload_return_bytes_total, '999,999,999,999,999,999,990'), 30) io_cell_offload_returned_b_ff + &&is_10g.&&is_11r1., LPAD(CASE WHEN h.io_offload_elig_bytes_total > h.io_offload_return_bytes_total AND h.io_offload_elig_bytes_total > 0 THEN LPAD(TO_CHAR(ROUND((h.io_offload_elig_bytes_total - h.io_offload_return_bytes_total) * 100 / h.io_offload_elig_bytes_total, 2), '990.00')||' %', 9) END, 10) io_saved_ff + FROM dba_hist_sqlstat h, + dba_hist_snapshot s + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number + ORDER BY 1 DESC, 4, 5 +/ + +PRO +PRO DBA_HIST_SQLSTAT DELTA (ordered by et_secs_per_exec) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT plan_hash_value + , TO_CHAR(ROUND(SUM(elapsed_time_delta)/SUM(executions_delta)/1e6,6), '999,990.000000') et_secs_per_exec + , TO_CHAR(ROUND(SUM(cpu_time_delta)/SUM(executions_delta)/1e6,6), '999,990.000000') cpu_secs_per_exec + , SUM(executions_delta) executions + , TO_CHAR(ROUND(SUM(elapsed_time_delta)/1e6,6), '999,999,999,990') et_secs_tot + , TO_CHAR(ROUND(SUM(cpu_time_delta)/1e6,6), '999,999,999,990') cpu_secs_tot + , ROUND(SUM(buffer_gets_delta)/SUM(executions_delta)) buffers_per_exec + , TO_CHAR(ROUND(SUM(rows_processed_delta)/SUM(executions_delta), 3), '999,999,999,990.000') rows_per_exec + FROM dba_hist_sqlstat + WHERE :license = 'Y' + AND sql_id = :sql_id + AND executions_delta > 0 + GROUP BY + plan_hash_value + ORDER BY + 2 +/ + +PRO +PRO DBA_HIST_SQL_PLAN (ordered by plan_hash_value) +PRO ~~~~~~~~~~~~~~~~~ +BREAK ON plan_timestamp_ff SKIP 2; +SET PAGES 0; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH v AS ( +SELECT /*+ MATERIALIZE */ + DISTINCT sql_id, plan_hash_value, dbid, timestamp + FROM dba_hist_sql_plan + WHERE :license = 'Y' + AND dbid = :dbid + AND sql_id = :sql_id + ORDER BY 1, 2, 3 ) +SELECT /*+ ORDERED USE_NL(t) */ + TO_CHAR(v.timestamp, 'YYYY-MM-DD"T"HH24:MI:SS') plan_timestamp_ff, + t.plan_table_output + FROM v, TABLE(DBMS_XPLAN.DISPLAY_AWR(v.sql_id, v.plan_hash_value, v.dbid, 'ADVANCED')) t +/ +CLEAR BREAK; + +PRO +PRO GV$ACTIVE_SESSION_HISTORY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_slices = '10'; +SET PAGES 50; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ MATERIALIZE */ + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM gv$active_session_history h + WHERE :license = 'Y' + AND sql_id = :sql_id + GROUP BY + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 2 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 7 days by timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '7'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.ash) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + USE_HASH(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn h.INT$DBA_HIST_ACT_SESS_HISTORY.ash h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + FULL(h.sn) + FULL(h.ash) + FULL(h.evt) + USE_HASH(h.sn h.ash h.evt) + */ + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM dba_hist_active_sess_history h + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND h.snap_id BETWEEN &&x_minimum_snap_id. AND &&x_maximum_snap_id. + GROUP BY + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 2 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO AWR History range considered: from &&x_minimum_date. to &&x_maximum_date. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 31 days by timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '31'; +SPO planx_&&sql_id._&¤t_time..txt APP; +/ + +PRO +PRO GV$ACTIVE_SESSION_HISTORY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_slices = '15'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ MATERIALIZE */ + h.sql_plan_hash_value plan_hash_value, + NVL(h.sql_plan_line_id, 0) line_id_ff, + SUBSTR(h.sql_plan_operation||' '||h.sql_plan_options, 1, 50) operation_ff, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM gv$active_session_history h + WHERE :license = 'Y' + AND sql_id = :sql_id + GROUP BY + h.sql_plan_hash_value, + h.sql_plan_line_id, + h.sql_plan_operation, + h.sql_plan_options, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 5 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.plan_hash_value, + e.line_id_ff, + e.operation_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + TO_NUMBER(NULL) plan_hash_value, + TO_NUMBER(NULL) id, + NULL operation_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 7 days by plan line and timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '7'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.ash) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + USE_HASH(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn h.INT$DBA_HIST_ACT_SESS_HISTORY.ash h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + FULL(h.sn) + FULL(h.ash) + FULL(h.evt) + USE_HASH(h.sn h.ash h.evt) + */ + h.sql_plan_hash_value plan_hash_value, + NVL(h.sql_plan_line_id, 0) line_id_ff, + SUBSTR(h.sql_plan_operation||' '||h.sql_plan_options, 1, 50) operation_ff, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM dba_hist_active_sess_history h + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND h.snap_id BETWEEN &&x_minimum_snap_id. AND &&x_maximum_snap_id. + GROUP BY + h.sql_plan_hash_value, + h.sql_plan_line_id, + h.sql_plan_operation, + h.sql_plan_options, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 5 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.plan_hash_value, + e.line_id_ff, + e.operation_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + TO_NUMBER(NULL) plan_hash_value, + TO_NUMBER(NULL) id, + NULL operation_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO AWR History range considered: from &&x_minimum_date. to &&x_maximum_date. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 31 days by plan line and timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '31'; +SPO planx_&&sql_id._&¤t_time..txt APP; +/ + +PRO +PRO GV$ACTIVE_SESSION_HISTORY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_slices = '20'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ MATERIALIZE */ + h.sql_plan_hash_value plan_hash_value, + NVL(h.sql_plan_line_id, 0) line_id_ff, + SUBSTR(h.sql_plan_operation||' '||h.sql_plan_options, 1, 50) operation_ff, + CASE h.session_state WHEN 'ON CPU' THEN -1 ELSE h.current_obj# END current_obj#, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM gv$active_session_history h + WHERE :license = 'Y' + AND sql_id = :sql_id + GROUP BY + h.sql_plan_hash_value, + h.sql_plan_line_id, + h.sql_plan_operation, + h.sql_plan_options, + CASE h.session_state WHEN 'ON CPU' THEN -1 ELSE h.current_obj# END, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 6 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.plan_hash_value, + e.line_id_ff, + e.operation_ff, + SUBSTR(e.current_obj#||' '||TRIM( + (SELECT CASE e.current_obj# WHEN 0 THEN ' UNDO' ELSE ' '||o.owner||'.'||o.object_name||' ('||o.object_type||')' END + FROM dba_objects o WHERE o.object_id(+) = e.current_obj# AND ROWNUM = 1) + ), 1, 60) current_object_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + TO_NUMBER(NULL) plan_hash_value, + TO_NUMBER(NULL) id, + NULL operation_ff, + NULL current_object_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 7 days by plan line, obj and timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '7'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.ash) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + USE_HASH(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn h.INT$DBA_HIST_ACT_SESS_HISTORY.ash h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + FULL(h.sn) + FULL(h.ash) + FULL(h.evt) + USE_HASH(h.sn h.ash h.evt) + */ + h.sql_plan_hash_value plan_hash_value, + NVL(h.sql_plan_line_id, 0) line_id_ff, + SUBSTR(h.sql_plan_operation||' '||h.sql_plan_options, 1, 50) operation_ff, + CASE h.session_state WHEN 'ON CPU' THEN -1 ELSE h.current_obj# END current_obj#, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM dba_hist_active_sess_history h + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND h.snap_id BETWEEN &&x_minimum_snap_id. AND &&x_maximum_snap_id. + GROUP BY + h.sql_plan_hash_value, + h.sql_plan_line_id, + h.sql_plan_operation, + h.sql_plan_options, + CASE h.session_state WHEN 'ON CPU' THEN -1 ELSE h.current_obj# END, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 6 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.plan_hash_value, + e.line_id_ff, + e.operation_ff, + SUBSTR(e.current_obj#||' '||TRIM( + (SELECT CASE e.current_obj# WHEN 0 THEN ' UNDO' ELSE ' '||o.owner||'.'||o.object_name||' ('||o.object_type||')' END + FROM dba_objects o WHERE o.object_id(+) = e.current_obj# AND ROWNUM = 1) + ), 1, 60) current_object_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + TO_NUMBER(NULL) plan_hash_value, + TO_NUMBER(NULL) id, + NULL operation_ff, + NULL current_object_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO AWR History range considered: from &&x_minimum_date. to &&x_maximum_date. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 31 days by plan line, obj and timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '31'; +SPO planx_&&sql_id._&¤t_time..txt APP; +/ + +PRO +PRO SQL Plan Baselines +PRO ~~~~~~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT created, plan_name, origin, enabled, accepted, fixed, reproduced, &&is_10g.&&is_11r1.adaptive, + last_executed, last_modified, description +FROM dba_sql_plan_baselines WHERE signature = :signature +ORDER BY created, plan_name +/ +SET HEA OFF PAGES 0; +SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE('&&sql_handle.')) +/ +SET HEA ON PAGES 50; + +SPO planx_&&sql_id._&¤t_time..txt APP; +PRO get list of tables from execution plan +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +VAR tables_list CLOB; +EXEC :tables_list := NULL; +-- get list of tables from execution plan +-- format (('owner', 'table_name'), (), ()...) +DECLARE + l_pair VARCHAR2(32767); +BEGIN + DBMS_LOB.CREATETEMPORARY(:tables_list, TRUE, DBMS_LOB.SESSION); + FOR i IN (WITH object AS ( + SELECT /*+ MATERIALIZE */ + object_owner owner, object_name name + FROM gv$sql_plan + WHERE inst_id IN (SELECT inst_id FROM gv$instance) + AND sql_id = :sql_id + AND object_owner IS NOT NULL + AND object_name IS NOT NULL + UNION + SELECT object_owner owner, object_name name + FROM dba_hist_sql_plan + WHERE :license = 'Y' + AND dbid = :dbid + AND sql_id = :sql_id + AND object_owner IS NOT NULL + AND object_name IS NOT NULL + UNION + SELECT CASE h.current_obj# WHEN 0 THEN 'SYS' ELSE o.owner END owner, + CASE h.current_obj# WHEN 0 THEN 'UNDO' ELSE o.object_name END name + FROM gv$active_session_history h, + dba_objects o + WHERE :license = 'Y' + AND h.sql_id = :sql_id + AND h.current_obj# >= 0 + AND o.object_id(+) = h.current_obj# + UNION + SELECT /*+ + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.ash) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + USE_HASH(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn h.INT$DBA_HIST_ACT_SESS_HISTORY.ash h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + FULL(h.sn) + FULL(h.ash) + FULL(h.evt) + USE_HASH(h.sn h.ash h.evt) + */ + CASE h.current_obj# WHEN 0 THEN 'SYS' ELSE o.owner END owner, + CASE h.current_obj# WHEN 0 THEN 'UNDO' ELSE o.object_name END name + FROM dba_hist_active_sess_history h, + dba_objects o + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND h.current_obj# >= 0 + AND o.object_id(+) = h.current_obj# + ) + SELECT 'TABLE', t.owner, t.table_name + FROM dba_tab_statistics t, -- include fixed objects + object o + WHERE t.owner = o.owner + AND t.table_name = o.name + UNION + SELECT 'TABLE', i.table_owner, i.table_name + FROM dba_indexes i, + object o + WHERE i.owner = o.owner + AND i.index_name = o.name) + LOOP + IF l_pair IS NULL THEN + DBMS_LOB.WRITEAPPEND(:tables_list, 1, '('); + ELSE + IF DBMS_LOB.GETLENGTH(:tables_list) < 2799 THEN + DBMS_LOB.WRITEAPPEND(:tables_list, 1, ','); + END IF; + END IF; + l_pair := '('''||i.owner||''','''||i.table_name||''')'; + -- SP2-0341: line overflow during variable substitution (>3000 characters at line 12) + IF DBMS_LOB.GETLENGTH(:tables_list) < 2800 THEN + DBMS_LOB.WRITEAPPEND(:tables_list, LENGTH(l_pair), l_pair); + ELSE + EXIT; + END IF; + END LOOP; + IF l_pair IS NULL THEN + l_pair := '((''DUMMY'',''DUMMY''))'; + DBMS_LOB.WRITEAPPEND(:tables_list, LENGTH(l_pair), l_pair); + ELSE + DBMS_LOB.WRITEAPPEND(:tables_list, 1, ')'); + END IF; +END; +/ + +SET LONG 2000000 LONGC 2000 LIN 32767; +COL tables_list NEW_V tables_list FOR A32767; +SET HEAD OFF; +PRO +PRO (owner, table) list +PRO ~~~~~~~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT :tables_list tables_list FROM DUAL +/ +SET HEAD ON; + +PRO +PRO Tables Accessed +PRO ~~~~~~~~~~~~~~~ +COL table_name FOR A50; +COL degree FOR A10; +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT owner||'.'||table_name table_name, + partitioned, + degree, + temporary, + blocks, + num_rows, + avg_row_len, + sample_size, + TO_CHAR(last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS') last_analyzed, + global_stats, + compression + FROM dba_tables + WHERE (owner, table_name) IN &&tables_list. + ORDER BY + owner, + table_name +/ + +PRO +PRO Indexes +PRO ~~~~~~~ +COL table_and_index_name FOR A70; +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT i.table_owner||'.'||i.table_name||' '||i.owner||'.'||i.index_name table_and_index_name, + i.partitioned, + i.degree, + i.index_type, + i.uniqueness, + (SELECT COUNT(*) FROM dba_ind_columns ic WHERE ic.index_owner = i.owner AND ic.index_name = i.index_name) columns, + i.status, + &&is_10g.i.visibility, + i.blevel, + i.leaf_blocks, + i.distinct_keys, + i.clustering_factor, + i.num_rows, + i.sample_size, + TO_CHAR(i.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS') last_analyzed, + i.global_stats + FROM dba_indexes i + WHERE (i.table_owner, i.table_name) IN &&tables_list. + ORDER BY + i.table_owner, + i.table_name, + i.owner, + i.index_name +/ + +SET LONG 200 LONGC 20; +COL index_and_column_name FOR A70; +COL table_and_column_name FOR A70; +COL data_type FOR A20; +COL data_default FOR A20; +COL low_value FOR A32; +COL high_value FOR A32; +COL low_value_translated FOR A32; +COL high_value_translated FOR A32; +PRO +PRO Index Columns +PRO ~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT i.index_owner||'.'||i.index_name||' '||c.column_name index_and_column_name, + c.data_type, + c.nullable, + c.data_default, + c.num_distinct, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.low_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.low_value)),1,32) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.low_value)),1,32) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.low_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.low_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.low_value,15,8),'XXXXXXXX')) + END low_value_translated, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.high_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.high_value)),1,32) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.high_value)),1,32) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.high_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.high_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.high_value,15,8),'XXXXXXXX')) + END high_value_translated, + c.density, + c.num_nulls, + c.num_buckets, + c.histogram, + c.sample_size, + TO_CHAR(c.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS') last_analyzed, + c.global_stats, + c.avg_col_len + FROM dba_ind_columns i, + dba_tab_cols c + WHERE (i.table_owner, i.table_name) IN &&tables_list. + AND c.owner = i.table_owner + AND c.table_name = i.table_name + AND c.column_name = i.column_name + ORDER BY + i.index_owner, + i.index_name, + i.column_position +/ + +PRO +PRO Table Columns +PRO ~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT c.owner||'.'||c.table_name||' '||c.column_name table_and_column_name, + c.data_type, + c.nullable, + c.data_default, + c.num_distinct, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.low_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.low_value)),1,32) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.low_value)),1,32) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.low_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.low_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.low_value,15,8),'XXXXXXXX')) + END low_value_translated, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.high_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.high_value)),1,32) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.high_value)),1,32) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.high_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.high_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.high_value,15,8),'XXXXXXXX')) + END high_value_translated, + c.density, + c.num_nulls, + c.num_buckets, + c.histogram, + c.sample_size, + TO_CHAR(c.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS') last_analyzed, + c.global_stats, + c.avg_col_len + FROM dba_tab_cols c + WHERE (c.owner, c.table_name) IN &&tables_list. + ORDER BY + c.owner, + c.table_name, + c.column_name +/ +-- spool off and cleanup +PRO +PRO planx_&&sql_id._&¤t_time..txt has been generated +SPO OFF; + diff --git a/csierra/pm.sql b/csierra/pm.sql new file mode 100644 index 0000000..01dba8e --- /dev/null +++ b/csierra/pm.sql @@ -0,0 +1 @@ +@@cs_planm.sql \ No newline at end of file diff --git a/csierra/pp.sql b/csierra/pp.sql new file mode 100644 index 0000000..93e51fb --- /dev/null +++ b/csierra/pp.sql @@ -0,0 +1 @@ +@@cs_sqlperf_plus.sql \ No newline at end of file diff --git a/csierra/pr.sql b/csierra/pr.sql new file mode 100644 index 0000000..ce92592 --- /dev/null +++ b/csierra/pr.sql @@ -0,0 +1,2 @@ +-- null parameter (assumes then last sql executed) +@@cs_pr.sql "" \ No newline at end of file diff --git a/csierra/reason_not_shared.sql b/csierra/reason_not_shared.sql new file mode 100644 index 0000000..f01fd5c --- /dev/null +++ b/csierra/reason_not_shared.sql @@ -0,0 +1,26 @@ +-- reason_not_shared.sql - Reasons for not sharing Cursors +SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; +SET PAGES 0; +SPO all_reasons.sql +SELECT CASE WHEN ROWNUM = 1 THEN '( ' ELSE ', ' END||column_name + FROM dba_tab_columns + WHERE table_name = 'V_$SQL_SHARED_CURSOR' + AND owner = 'SYS' + AND data_type = 'VARCHAR2' + AND data_length = 1 +/ +SPO OFF; +GET all_reasons.sql +I ) +I ) +I WHERE value = 'Y' +I GROUP BY reason_not_shared +I ORDER BY cursors DESC, sql_ids DESC, reason_not_shared +0 ( value FOR reason_not_shared IN +0 FROM v$sql_shared_cursor UNPIVOT +0 SELECT COUNT(*) cursors, COUNT(DISTINCT sql_id) sql_ids, reason_not_shared +L +SET HEA ON NEWP 1 PAGES 30 +PRO please wait +/ +!rm all_reasons.sql diff --git a/csierra/session_undo.sql b/csierra/session_undo.sql new file mode 100644 index 0000000..6f5c7f6 --- /dev/null +++ b/csierra/session_undo.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_undo.sql +-- Author : Tim Hall +-- Description : Displays undo information on relevant database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_undo +-- Last Modified: 29/03/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN username FORMAT A15 + +SELECT s.username, + s.sid, + s.serial#, + t.used_ublk, + t.used_urec, + rs.segment_name, + r.rssize, + r.status +FROM v$transaction t, + v$session s, + v$rollstat r, + dba_rollback_segs rs +WHERE s.saddr = t.ses_addr +AND t.xidusn = r.usn +AND rs.segment_id = t.xidusn +ORDER BY t.used_ublk DESC; diff --git a/csierra/set.sql b/csierra/set.sql new file mode 100644 index 0000000..d597fa2 --- /dev/null +++ b/csierra/set.sql @@ -0,0 +1,6 @@ +SET TERM ON HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF3'; +ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD"T"HH24:MI:SS.FF3'; +ALTER SESSION SET STATISTICS_LEVEL = 'ALL'; +--ALTER SESSION SET "_px_cdb_view_enabled" = FALSE; -- fails on odis \ No newline at end of file diff --git a/csierra/spfile.sql b/csierra/spfile.sql new file mode 100644 index 0000000..0f626cf --- /dev/null +++ b/csierra/spfile.sql @@ -0,0 +1,39 @@ +-- spfile.sql - SPFILE Parameters (from PDB or CDB) +SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; +COL sid FOR A12; +COL name FOR A45; +COL type FOR A11; +COL ordinal FOR 999 HEA 'ORD'; +COL value FOR A45; +COL display_value FOR A45; +COL pdbs FOR 9999; +COL min_con_id FOR 999999 HEA 'MIN|CON_ID'; +COL max_con_id FOR 999999 HEA 'MAX|CON_ID'; + +SELECT sid, + name, + type, + ordinal, + value, + display_value, + COUNT(*) pdbs, + MIN(con_id) min_con_id, + MAX(con_id) max_con_id + FROM v$spparameter + WHERE isspecified = 'TRUE' + GROUP BY + sid, + name, + type, + ordinal, + value, + display_value + ORDER BY + sid, + name, + type, + ordinal, + value, + display_value +/ + diff --git a/csierra/spm_backup.sql b/csierra/spm_backup.sql new file mode 100644 index 0000000..7056714 --- /dev/null +++ b/csierra/spm_backup.sql @@ -0,0 +1,98 @@ +-- spm_backup.sql - Create DATAPUMP backup of SQL Plan Management (SPM) Repository for one PDB +SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; +ALTER SESSION SET container = CDB$ROOT; +SELECT name pdb_name FROM v$containers WHERE open_mode = 'READ WRITE' ORDER BY 1; +PRO 1. Enter PDB_NAME failing with ORA-13831: +DEF pdb_name = '&1.'; +UNDEF 1; +PRO +HOS echo $ORACLE_HOME +PRO 2. Enter directory path ($ORACLE_HOME): +DEF directory_path = '&2.'; +UNDEF 2; +PRO +PRO 3. Enter connect string such as: kiev-wfs-tenant-b-preprod.svc.ad2.r1/s_wfs_tenant_b_preprod.ad2.r1 +DEF connect_string = '&3' +UNDEF 3; +PRO +PRO 4. Enter sys password +DEF sys_pwd = '&4.'; +UNDEF 4; +PRO +SET FEED ON ECHO ON VER ON TI ON TIMI ON; +-- connect to pdb +ALTER SESSION SET container = &&pdb_name.; +-- +CREATE OR REPLACE DIRECTORY CS_TEMP_DIR AS '&&directory_path.'; +-- prepares backup owner +DEF repo_owner = 'C##IOD'; +COL default_tablespace NEW_V default_tablespace NOPRI; +SELECT default_tablespace FROM dba_users WHERE username = UPPER('&&repo_owner.'); +ALTER USER &&repo_owner. QUOTA UNLIMITED ON &&default_tablespace.; +-- backup SPM metadata (for subsequent datapump) +COL backup_timestamp NEW_V backup_timestamp NOPRI; +SELECT TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') backup_timestamp FROM DUAL; +CREATE TABLE &&repo_owner..sqllog$_&&backup_timestamp. AS SELECT * FROM sys.sqllog$; +CREATE TABLE &&repo_owner..smb$config_&&backup_timestamp. AS SELECT * FROM sys.smb$config; +CREATE TABLE &&repo_owner..sql$_&&backup_timestamp. AS SELECT * FROM sys.sql$; +CREATE TABLE &&repo_owner..sql$text_&&backup_timestamp. AS SELECT * FROM sys.sql$text; +CREATE TABLE &&repo_owner..sqlobj$_&&backup_timestamp. AS SELECT * FROM sys.sqlobj$; +CREATE TABLE &&repo_owner..sqlobj$data_&&backup_timestamp. AS SELECT * FROM sys.sqlobj$data; +CREATE TABLE &&repo_owner..sqlobj$auxdata_&&backup_timestamp. AS SELECT * FROM sys.sqlobj$auxdata; +--CREATE TABLE &&repo_owner..sqlobj$plan_&&backup_timestamp. AS SELECT * FROM sys.sqlobj$plan; +-- needed to avoid ORA-00997: illegal use of LONG datatype on column "other" +CREATE TABLE &&repo_owner..sqlobj$plan_&&backup_timestamp. AS SELECT + signature +,category +,obj_type +,plan_id +,statement_id +,xpl_plan_id +,timestamp +,remarks +,operation +,options +,object_node +,object_owner +,object_name +,object_alias +,object_instance +,object_type +,optimizer +,search_columns +,id +,parent_id +,depth +,position +,cost +,cardinality +,bytes +,other_tag +,partition_start +,partition_stop +,partition_id +,TO_LOB(other) other -- TO_LOB() needed to avoid ORA-00997: illegal use of LONG datatype +,distribution +,cpu_cost +,io_cost +,temp_space +,access_predicates +,filter_predicates +,projection +,time +,qblock_name +,other_xml +FROM sys.sqlobj$plan; +-- +COL table_list NEW_V table_list; +select LISTAGG(owner||'.'||replace(object_name,chr(36), chr(92)||chr(36) ),',') WITHIN GROUP (order by 1) as table_list +from dba_objects where owner='C##IOD' and object_type='TABLE' AND object_name LIKE '%_&&backup_timestamp.'; +-- +PRO +HOS expdp \"sys/&&sys_pwd.@&&connect_string. as sysdba\" file=SPM_&&backup_timestamp..dmp logfile=SPM_&&backup_timestamp..log DIRECTORY=CS_TEMP_DIR tables=&&table_list. +-- +DROP DIRECTORY CS_TEMP_DIR; +-- +HOS cp &&directory_path./SPM_&&backup_timestamp..* . +HOS chmod 777 SPM_&&backup_timestamp..* +HOS ls -lat SPM_&&backup_timestamp..* diff --git a/csierra/ssa.sql b/csierra/ssa.sql new file mode 100644 index 0000000..dc6d8b9 --- /dev/null +++ b/csierra/ssa.sql @@ -0,0 +1 @@ +@@cs_sqlstat_analytics.sql \ No newline at end of file diff --git a/csierra/ssaa.sql b/csierra/ssaa.sql new file mode 100644 index 0000000..653ef94 --- /dev/null +++ b/csierra/ssaa.sql @@ -0,0 +1 @@ +@@cs_sqlstat_analytics_aggregate.sql \ No newline at end of file diff --git a/csierra/ssaai.sql b/csierra/ssaai.sql new file mode 100644 index 0000000..a19e58d --- /dev/null +++ b/csierra/ssaai.sql @@ -0,0 +1 @@ +@@cs_sqlstat_analytics_aggregate_iod.sql \ No newline at end of file diff --git a/csierra/ssai.sql b/csierra/ssai.sql new file mode 100644 index 0000000..d694523 --- /dev/null +++ b/csierra/ssai.sql @@ -0,0 +1 @@ +@@cs_sqlstat_analytics_iod.sql \ No newline at end of file diff --git a/csierra/ssr.sql b/csierra/ssr.sql new file mode 100644 index 0000000..037a361 --- /dev/null +++ b/csierra/ssr.sql @@ -0,0 +1 @@ +@@cs_sqlstat_report.sql \ No newline at end of file diff --git a/csierra/ssri.sql b/csierra/ssri.sql new file mode 100644 index 0000000..7c83495 --- /dev/null +++ b/csierra/ssri.sql @@ -0,0 +1 @@ +@@cs_sqlstat_report_iod.sql \ No newline at end of file diff --git a/csierra/syncup_pdb_parameters_to_standbys.sql b/csierra/syncup_pdb_parameters_to_standbys.sql new file mode 100644 index 0000000..18287e1 --- /dev/null +++ b/csierra/syncup_pdb_parameters_to_standbys.sql @@ -0,0 +1,12 @@ +-- syncup_pdb_parameters_to_standbys.sql - Sync up SPFILE PDB Parameters from Primary into Standby and Bystander +UNDEF pdb_name; +SET SERVEROUT ON; +BEGIN + FOR i IN (SELECT name FROM v$containers WHERE name LIKE '%&pdb_name.%' AND open_mode = 'READ WRITE') + LOOP + DBMS_OUTPUT.put_line(i.name); + C##IOD.PDB_CONFIG.CONFIGURE(P_PDB_NAME=>i.name,P_CONFIG_NAME=>'syncup pdb parameters to standbys'); + END LOOP; +END; +/ +UNDEF pdb_name; diff --git a/csierra/sysdate.sql b/csierra/sysdate.sql new file mode 100644 index 0000000..3e1b307 --- /dev/null +++ b/csierra/sysdate.sql @@ -0,0 +1,2 @@ +-- sysdate.sql - Display SYSDATE in Filename safe format and in YYYY-MM-DDTHH24:MI:SS UTC format +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24.MI.SS"Z"') AS filename_safe_format, TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS') AS current_utc_time FROM dual; diff --git a/csierra/t.sql b/csierra/t.sql new file mode 100644 index 0000000..58fab5a --- /dev/null +++ b/csierra/t.sql @@ -0,0 +1 @@ +@@cs_top.sql \ No newline at end of file diff --git a/csierra/ta.sql b/csierra/ta.sql new file mode 100644 index 0000000..0e7922a --- /dev/null +++ b/csierra/ta.sql @@ -0,0 +1,3 @@ +DEF cs_minutes = '1'; +DEF cs_top = '30'; +@@cs_internal/cs_top_activity_internal.sql \ No newline at end of file diff --git a/csierra/tr.sql b/csierra/tr.sql new file mode 100644 index 0000000..3a40a8a --- /dev/null +++ b/csierra/tr.sql @@ -0,0 +1 @@ +@@cs_top_range.sql \ No newline at end of file diff --git a/csierra/trace_10046_10053_mysid_off.sql b/csierra/trace_10046_10053_mysid_off.sql new file mode 100644 index 0000000..e278a3f --- /dev/null +++ b/csierra/trace_10046_10053_mysid_off.sql @@ -0,0 +1,14 @@ +-- trace_10046_10053_mysid_off.sql - Turn OFF SQL Trace and 10053 on own Session +ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT OFF'; +ALTER SESSION SET SQL_TRACE = FALSE; +ALTER SESSION SET STATISTICS_LEVEL = 'TYPICAL'; +-- +HOS cp &&trace_file. /tmp/ +HOS chmod 644 /tmp/&&filename. +-- +HOS tkprof &&trace_file. /tmp/&&filename._tkprof_nosort.txt +HOS tkprof &&trace_file. /tmp/&&filename._tkprof_sort.txt sort=prsela exeela fchela +HOS chmod 644 /tmp/&&filename._tkprof_*sort.txt +-- +PRO scp &&host_name.:/tmp/&&filename.* . +PRO scp &&host_name.:/tmp/&&filename._tkprof*.txt . diff --git a/csierra/trace_10046_10053_mysid_on.sql b/csierra/trace_10046_10053_mysid_on.sql new file mode 100644 index 0000000..2ae8472 --- /dev/null +++ b/csierra/trace_10046_10053_mysid_on.sql @@ -0,0 +1,12 @@ +-- trace_10046_10053_mysid_on.sql - Turn ON SQL Trace EVENT 10046 LEVEL 12 and 10053 on own Session +ALTER SESSION SET tracefile_identifier = '10046_10053'; +-- +COL host_name NEW_V host_name; +COL trace_file NEW_V trace_file; +COL filename NEW_V filename; +-- +SELECT host_name, value trace_file, SUBSTR(value, INSTR(value, '/', -1) +1) filename FROM v$instance, v$diag_info WHERE name = 'Default Trace File'; +-- +ALTER SESSION SET STATISTICS_LEVEL = 'ALL'; +ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12'; +ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL 1'; \ No newline at end of file diff --git a/csierra/trace_10046_mysid_off.sql b/csierra/trace_10046_mysid_off.sql new file mode 100644 index 0000000..fcbee61 --- /dev/null +++ b/csierra/trace_10046_mysid_off.sql @@ -0,0 +1,13 @@ +-- trace_10046_mysid_off.sql - Turn OFF SQL Trace on own Session +ALTER SESSION SET SQL_TRACE = FALSE; +ALTER SESSION SET STATISTICS_LEVEL = 'TYPICAL'; +-- +HOS cp &&trace_file. /tmp/ +HOS chmod 644 /tmp/&&filename. +-- +HOS tkprof &&trace_file. /tmp/&&filename._tkprof_nosort.txt +HOS tkprof &&trace_file. /tmp/&&filename._tkprof_sort.txt sort=prsela exeela fchela +HOS chmod 644 /tmp/&&filename._tkprof_*sort.txt +-- +PRO scp &&host_name.:/tmp/&&filename.* . +PRO scp &&host_name.:/tmp/&&filename._tkprof*.txt . diff --git a/csierra/trace_10046_mysid_on.sql b/csierra/trace_10046_mysid_on.sql new file mode 100644 index 0000000..99bfa25 --- /dev/null +++ b/csierra/trace_10046_mysid_on.sql @@ -0,0 +1,11 @@ +-- trace_10046_mysid_on.sql - Turn ON SQL Trace EVENT 10046 LEVEL 12 on own Session +ALTER SESSION SET tracefile_identifier = '10046'; +-- +COL host_name NEW_V host_name; +COL trace_file NEW_V trace_file; +COL filename NEW_V filename; +-- +SELECT host_name, value trace_file, SUBSTR(value, INSTR(value, '/', -1) +1) filename FROM v$instance, v$diag_info WHERE name = 'Default Trace File'; +-- +ALTER SESSION SET STATISTICS_LEVEL = 'ALL'; +ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12'; diff --git a/csierra/trace_10046_sql_id.sql b/csierra/trace_10046_sql_id.sql new file mode 100644 index 0000000..8d438ab --- /dev/null +++ b/csierra/trace_10046_sql_id.sql @@ -0,0 +1,35 @@ +-- trace_10046_sql_id.sql - Turn ON and OFF SQL Trace EVENT 10046 LEVEL 12 on given SQL_ID +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +PRO +PRO 1. SQL_ID: +DEF sql_id = '&1.'; +UNDEF 1; +-- +COL host_name NEW_V host_name NOPRI; +COL trace_dir NEW_V trace_dir NOPRI; +SELECT host_name, value AS trace_dir FROM v$instance, v$diag_info WHERE name = 'Diag Trace'; +-- +ALTER SYSTEM SET EVENTS='RDBMS.sql_trace off' ; +ALTER SYSTEM SET EVENTS='RDBMS.sql_trace[SQL:&&sql_id.] {occurence: start_after 1, end_after 101} plan_stat=all_executions, bind=true, wait=true' ; +PRO +PAUSE Tracing &&sql_id.. Press RETURN to stop tracing (after enought time for &&sql_id. to execute). +PRO +ALTER SYSTEM SET EVENTS='RDBMS.sql_trace[SQL:&&sql_id.] off' ; +-- +HOS mkdir -p /tmp/SQL_ID_&&sql_id. +--*/ +PRO please wait... +HOS find &&trace_dir./ -mmin -60 | grep trc | xargs grep -i "sqlid='&&sql_id.'" | awk -F: '{print $1}' | sort | uniq | xargs -I{} mv "{}" /tmp/SQL_ID_&&sql_id. +--*/ +HOS rename ora EVENT_10046_&&sql_id. /tmp/SQL_ID_&&sql_id./*ora*.trc +--*/ +HOS chmod 644 /tmp/SQL_ID_&&sql_id./*EVENT_10046_&&sql_id.*.trc +--*/ +HOS ls -lt /tmp/SQL_ID_&&sql_id./*EVENT_10046_&&sql_id.*.trc +--*/ +PRO +PRO If you want to preserve traces, execute scp command below, from a TERM session running on your Mac/PC: +PRO scp &&host_name.:/tmp/SQL_ID_&&sql_id./*EVENT_10046_&&sql_id.*.trc . +--*/ +PRO \ No newline at end of file diff --git a/csierra/trace_10053_mysid_off.sql b/csierra/trace_10053_mysid_off.sql new file mode 100644 index 0000000..2e2bfe1 --- /dev/null +++ b/csierra/trace_10053_mysid_off.sql @@ -0,0 +1,7 @@ +-- trace_10053_mysid_off.sql - Turn OFF CBO EVENT 10053 on own Session +ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT OFF'; +-- +HOS cp &&trace_file. /tmp/ +HOS chmod 644 /tmp/&&filename. +-- +PRO scp &&host_name.:/tmp/&&filename.* . diff --git a/csierra/trace_10053_mysid_on.sql b/csierra/trace_10053_mysid_on.sql new file mode 100644 index 0000000..d658302 --- /dev/null +++ b/csierra/trace_10053_mysid_on.sql @@ -0,0 +1,10 @@ +-- trace_10053_mysid_on.sql - Turn ON CBO EVENT 10053 LEVEL 1 on own Session +ALTER SESSION SET tracefile_identifier = '10053'; +-- +COL host_name NEW_V host_name; +COL trace_file NEW_V trace_file; +COL filename NEW_V filename; +-- +SELECT host_name, value trace_file, SUBSTR(value, INSTR(value, '/', -1) +1) filename FROM v$instance, v$diag_info WHERE name = 'Default Trace File'; +-- +ALTER SESSION SET EVENTS '10053 TRACE NAME CONTEXT FOREVER, LEVEL 1'; \ No newline at end of file diff --git a/csierra/trace_10053_sql_id.sql b/csierra/trace_10053_sql_id.sql new file mode 100644 index 0000000..eaa3ea6 --- /dev/null +++ b/csierra/trace_10053_sql_id.sql @@ -0,0 +1,92 @@ +-- trace_10053_sql_id.sql - Turn ON and OFF SQL Trace EVENT 10053 LEVEL 1 on given SQL_ID +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +PRO +PRO 1. SQL_ID: +DEF sql_id = '&1.'; +UNDEF 1; +-- +PRO +PRO CBO Trace (a.k.a. 10053 Event Trace) is same as "SQL_Optimizer" scope. SQL_Compiler is a superset of SQL_Optimizer. +PRO +PRO 2. Scope: [{SQL_Optimizer}|SQL_Compiler] +DEF scope = '&2.'; +UNDEF 2; +COL scope NEW_V scope NOPRI; +SELECT CASE WHEN '&&scope.' IN ('SQL_Optimizer', 'SQL_Compiler') THEN '&&scope.' ELSE 'SQL_Optimizer' END AS scope FROM DUAL; +-- +PRO +PRO Trace would be enabled these many seconds for a Hard Parse to happen. Default value is recommended. +PRO +PRO 3. Seconds: [{600}|1-3600] +DEF seconds = '&3.'; +UNDEF 3; +COL seconds NEW_V seconds NOPRI; +SELECT CASE WHEN TO_NUMBER('&&seconds.') BETWEEN 1 AND 3600 THEN '&&seconds.' ELSE '600' END AS seconds FROM DUAL; +-- +PRO +PRO Cursor needs to be Purged (flushed) one or more times during &&seconds. seconds, in order to trap at least one Hard Parse. Default value is recommended. +PRO +PRO 4. Cursor Purge Count: [{5}|1-10] +DEF purge_count = '&4.'; +UNDEF 4; +COL purge_count NEW_V purge_count NOPRI; +SELECT CASE WHEN TO_NUMBER('&&purge_count.') BETWEEN 1 AND 10 THEN '&&purge_count.' ELSE '5' END AS purge_count FROM DUAL; +-- +COL host_name NEW_V host_name NOPRI; +COL trace_dir NEW_V trace_dir NOPRI; +COL timeout NEW_V timeout NOPRI; +SELECT host_name, value AS trace_dir, TO_CHAR(SYSDATE + (&&seconds. / 24 / 3600), 'YYYY-MM-DD"T"HH24:MI:SS') AS timeout FROM v$instance, v$diag_info WHERE name = 'Diag Trace'; +-- +ALTER SYSTEM SET EVENTS='trace[RDBMS.&&scope..*] off' ; +ALTER SYSTEM SET EVENTS='trace[RDBMS.&&scope..*][SQL:&&sql_id.]' ; +-- +PRO +PRO Tracing &&sql_id.. Sleeping for &&seconds. seconds. Timeout at &&timeout.. Please wait... +PRO +PRO To monitor progress from another session: +PRO HOS find &&trace_dir./ -mmin -60 | grep trc | xargs grep -i "(sql_id=&&sql_id.)" | awk -F: '{print $1}' | sort | uniq +PRO +-- purge cursor &&purge_count. times. this is to potentially collect up to &&purge_count. traces, hoping to produce more than one distinct plan. +SET SERVEROUT ON; +@@cs_internal/cs_internal_purge_cursor "&&sql_id." +DECLARE + l_name VARCHAR2(64); +BEGIN + FOR i IN 1 .. &&purge_count. + LOOP + BEGIN + SELECT address||','||hash_value INTO l_name FROM v$sqlarea WHERE sql_id = '&&sql_id.' AND ROWNUM = 1; -- there are cases where it comes back with > 1 row!!! + SYS.DBMS_SHARED_POOL.PURGE(name => l_name, flag => 'C', heaps => 1); -- not always does the job + -- report + DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')||' &&sql_id. purged using an api on parent cursor'); + EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')||' &&sql_id. not found in v$sqlarea'); + END; + -- + DBMS_LOCK.sleep(&&seconds. / &&purge_count.); + END LOOP; +END; +/ +SET SERVEROUT OFF; +-- +ALTER SYSTEM SET EVENTS='trace[RDBMS.&&scope..*][SQL:&&sql_id.] off' ; +-- +HOS mkdir -p /tmp/SQL_ID_&&sql_id. +--*/ +PRO please wait... +HOS find &&trace_dir./ -mmin -61 | grep trc | xargs grep -i "(sql_id=&&sql_id.)" | awk -F: '{print $1}' | sort | uniq | xargs -I{} mv "{}" /tmp/SQL_ID_&&sql_id. +--*/ +HOS rename ora EVENT_10053_&&sql_id. /tmp/SQL_ID_&&sql_id./*ora*.trc +--*/ +HOS chmod 644 /tmp/SQL_ID_&&sql_id./*EVENT_10053_&&sql_id.*.trc +--*/ +HOS ls -lt /tmp/SQL_ID_&&sql_id./*EVENT_10053_&&sql_id.*.trc +--*/ +PRO +PRO If you want to preserve traces, execute scp command below, from a TERM session running on your Mac/PC: +PRO scp &&host_name.:/tmp/SQL_ID_&&sql_id./*EVENT_10053_&&sql_id.*.trc . +--*/ +PRO \ No newline at end of file diff --git a/csierra/trace_DUMP_sql_id.sql b/csierra/trace_DUMP_sql_id.sql new file mode 100644 index 0000000..bf51641 --- /dev/null +++ b/csierra/trace_DUMP_sql_id.sql @@ -0,0 +1,53 @@ +-- trace_SPM_sql_id.sql - Turn ON and OFF SQL Plan Management Trace on given SQL_ID +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +PRO +PRO 1. SQL_ID: +DEF sql_id = '&1.'; +UNDEF 1; +-- +PRO +PRO CBO Trace (a.k.a. 10053 Event Trace) is same as "Optimizer" scope. Compiler is a superset of Optimizer. +PRO +PRO 2. Scope: [{Optimizer}|Compiler] +DEF scope = '&2.'; +UNDEF 2; +COL scope NEW_V scope NOPRI; +SELECT CASE WHEN '&&scope.' IN ('Optimizer', 'Compiler') THEN '&&scope.' ELSE 'Optimizer' END AS scope FROM DUAL; +-- +COL host_name NEW_V host_name NOPRI; +COL trace_dir NEW_V trace_dir NOPRI; +SELECT host_name, value AS trace_dir FROM v$instance, v$diag_info WHERE name = 'Diag Trace'; +-- +SET SERVEROUT ON; +DECLARE + l_child_number DBMS_UTILITY.number_array; +BEGIN + SELECT DISTINCT child_number BULK COLLECT INTO l_child_number FROM v$sql WHERE sql_id = '&&sql_id.' AND object_status = 'VALID' AND is_obsolete = 'N' ORDER BY 1; + IF l_child_number.LAST >= l_child_number.FIRST THEN + FOR i IN l_child_number.FIRST .. l_child_number.LAST + LOOP + DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')||' DBMS_SQLDIAG.dump_trace of child_number:'||l_child_number(i)); + DBMS_SQLDIAG.dump_trace(p_sql_id => '&&sql_id.', p_child_number => l_child_number(i), p_component => '&&scope.', p_file_id => 'DUMP_TRACE_10053_&&sql_id._'||l_child_number(i)); + END LOOP; + END IF; +END; +/ +SET SERVEROUT OFF; +-- +HOS mkdir -p /tmp/SQL_ID_&&sql_id. +--*/ +HOS mv &&trace_dir./*DUMP_TRACE_10053_&&sql_id.*.trc /tmp/SQL_ID_&&sql_id. +--*/ +HOS rename "ora_" "" /tmp/SQL_ID_&&sql_id./*ora*.trc +--*/ +HOS chmod 644 /tmp/SQL_ID_&&sql_id./*DUMP_TRACE_10053_&&sql_id.*.trc +--*/ +HOS ls -lt /tmp/SQL_ID_&&sql_id./*DUMP_TRACE_10053_&&sql_id.*.trc +--*/ +PRO +PRO If you want to preserve traces, execute scp command below, from a TERM session running on your Mac/PC: +PRO scp &&host_name.:/tmp/SQL_ID_&&sql_id./*DUMP_TRACE_10053_&&sql_id.*.trc . +--*/ +PRO \ No newline at end of file diff --git a/csierra/trace_SPM_sql_id.sql b/csierra/trace_SPM_sql_id.sql new file mode 100644 index 0000000..fe9094f --- /dev/null +++ b/csierra/trace_SPM_sql_id.sql @@ -0,0 +1,83 @@ +-- trace_SPM_sql_id.sql - Turn ON and OFF SQL Plan Management Trace on given SQL_ID +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 NUM 20 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +PRO +PRO 1. SQL_ID: +DEF sql_id = '&1.'; +UNDEF 1; +-- +PRO +PRO Trace would be enabled these many seconds for a Hard Parse to happen. Default value is recommended. +PRO +PRO 2. Seconds: [{600}|1-3600] +DEF seconds = '&2.'; +UNDEF 2; +COL seconds NEW_V seconds NOPRI; +SELECT CASE WHEN TO_NUMBER('&&seconds.') BETWEEN 1 AND 3600 THEN '&&seconds.' ELSE '600' END AS seconds FROM DUAL; +-- +PRO +PRO Cursor needs to be Purged (flushed) one or more times during &&seconds. seconds, in order to trap at least one Hard Parse. Default value is recommended. +PRO +PRO 3. Cursor Purge Count: [{5}|1-10] +DEF purge_count = '&3.'; +UNDEF 3; +COL purge_count NEW_V purge_count NOPRI; +SELECT CASE WHEN TO_NUMBER('&&purge_count.') BETWEEN 1 AND 10 THEN '&&purge_count.' ELSE '5' END AS purge_count FROM DUAL; +-- +COL host_name NEW_V host_name NOPRI; +COL trace_dir NEW_V trace_dir NOPRI; +COL timeout NEW_V timeout NOPRI; +SELECT host_name, value AS trace_dir, TO_CHAR(SYSDATE + (&&seconds. / 24 / 3600), 'YYYY-MM-DD"T"HH24:MI:SS') AS timeout FROM v$instance, v$diag_info WHERE name = 'Diag Trace'; +-- +ALTER SYSTEM SET EVENTS='trace[SQL_Plan_Management.*] off' ; +ALTER SYSTEM SET EVENTS='trace[SQL_Plan_Management.*][SQL:&&sql_id.]' ; +-- +PRO +PRO Tracing &&sql_id.. Sleeping for &&seconds. seconds. Timeout at &&timeout.. Please wait... +PRO +PRO To monitor progress from another session: +PRO HOS find &&trace_dir./ -mmin -60 | grep trc | xargs grep -i "SPM: statement" | awk -F: '{print $1}' | sort | uniq +PRO +-- purge cursor &&purge_count. times. this is to potentially collect up to &&purge_count. traces, hoping to produce more than one distinct plan. +SET SERVEROUT ON; +@@cs_internal/cs_internal_purge_cursor "&&sql_id." +DECLARE + l_name VARCHAR2(64); +BEGIN + FOR i IN 1 .. &&purge_count. + LOOP + BEGIN + SELECT address||','||hash_value INTO l_name FROM v$sqlarea WHERE sql_id = '&&sql_id.' AND ROWNUM = 1; -- there are cases where it comes back with > 1 row!!! + SYS.DBMS_SHARED_POOL.PURGE(name => l_name, flag => 'C', heaps => 1); -- not always does the job + -- report + DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')||' &&sql_id. purged using an api on parent cursor'); + EXCEPTION + WHEN NO_DATA_FOUND THEN + DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE, 'YYYY-MM-DD"T"HH24:MI:SS')||' &&sql_id. not found in v$sqlarea'); + END; + -- + DBMS_LOCK.sleep(&&seconds. / &&purge_count.); + END LOOP; +END; +/ +SET SERVEROUT OFF; +-- +ALTER SYSTEM SET EVENTS='trace[SQL_Plan_Management.*][SQL:&&sql_id.] off' ; +-- +HOS mkdir -p /tmp/SQL_ID_&&sql_id. +--*/ +PRO please wait... +HOS find &&trace_dir./ -mmin -61 | grep trc | xargs grep -i "SPM: statement" | awk -F: '{print $1}' | sort | uniq | xargs -I{} mv "{}" /tmp/SQL_ID_&&sql_id. +--*/ +HOS rename ora SPM_&&sql_id. /tmp/SQL_ID_&&sql_id./*ora*.trc +--*/ +HOS chmod 644 /tmp/SQL_ID_&&sql_id./*SPM_&&sql_id.*.trc +--*/ +HOS ls -lt /tmp/SQL_ID_&&sql_id./*SPM_&&sql_id.*.trc +--*/ +PRO +PRO If you want to preserve traces, execute scp command below, from a TERM session running on your Mac/PC: +PRO scp &&host_name.:/tmp/SQL_ID_&&sql_id./*SPM_&&sql_id.*.trc . +--*/ +PRO \ No newline at end of file diff --git a/csierra/view.sql b/csierra/view.sql new file mode 100644 index 0000000..5298631 --- /dev/null +++ b/csierra/view.sql @@ -0,0 +1,8 @@ +-- view.sql - Display Text of a given VIEW name +SET HEA ON LIN 2490 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF LONG 240000 LONGC 2400 SERVEROUT OFF; +ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; +-- +SELECT text + FROM dba_views + WHERE view_name = UPPER('&view_name.') +/ diff --git a/csierra/x.sql b/csierra/x.sql new file mode 100644 index 0000000..a2502e1 --- /dev/null +++ b/csierra/x.sql @@ -0,0 +1 @@ +@@cs_planx.sql \ No newline at end of file diff --git a/idev/asm_alias.sql b/idev/asm_alias.sql new file mode 100644 index 0000000..79d30f8 --- /dev/null +++ b/idev/asm_alias.sql @@ -0,0 +1,73 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_alias.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Provide a summary report of all alias definitions contained | +-- | within all ASM disk groups. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASM Aliases | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN disk_group_name FORMAT a25 HEAD 'Disk Group Name' +COLUMN alias_name FORMAT a50 HEAD 'Alias Name' +COLUMN file_number HEAD 'File|Number' +COLUMN file_incarnation HEAD 'File|Incarnation' +COLUMN alias_index HEAD 'Alias|Index' +COLUMN alias_incarnation HEAD 'Alias|Incarnation' +COLUMN parent_index HEAD 'Parent|Index' +COLUMN reference_index HEAD 'Reference|Index' +COLUMN alias_directory FORMAT a10 HEAD 'Alias|Directory?' +COLUMN system_created FORMAT a8 HEAD 'System|Created?' + +BREAK ON report ON disk_group_name SKIP 1 + +SELECT + g.name disk_group_name + , a.name alias_name + , a.file_number file_number + , a.file_incarnation file_incarnation + , a.alias_index alias_index + , a.alias_incarnation alias_incarnation + , a.parent_index parent_index + , a.reference_index reference_index + , a.alias_directory alias_directory + , a.system_created system_created +FROM + v$asm_alias a JOIN v$asm_diskgroup g USING (group_number) +ORDER BY + g.name + , a.file_number +/ + diff --git a/idev/asm_clients.sql b/idev/asm_clients.sql new file mode 100644 index 0000000..cb4163b --- /dev/null +++ b/idev/asm_clients.sql @@ -0,0 +1,58 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_clients.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Provide a summary report of all clients making use of this ASM | +-- | instance. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASM Clients | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN disk_group_name FORMAT a25 HEAD 'Disk Group Name' +COLUMN instance_name FORMAT a20 HEAD 'Instance Name' +COLUMN db_name FORMAT a9 HEAD 'Database Name' +COLUMN status FORMAT a12 HEAD 'Status' + +SELECT + a.name disk_group_name + , c.instance_name instance_name + , c.db_name db_name + , c.status status +FROM + v$asm_diskgroup a JOIN v$asm_client c USING (group_number) +ORDER BY + a.name +/ + diff --git a/idev/asm_diskgroups.sql b/idev/asm_diskgroups.sql new file mode 100644 index 0000000..0104eea --- /dev/null +++ b/idev/asm_diskgroups.sql @@ -0,0 +1,73 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_diskgroups.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Provide a summary report of all disk groups. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASM Disk Groups | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN group_name FORMAT a25 HEAD 'Disk Group|Name' +COLUMN sector_size FORMAT 99,999 HEAD 'Sector|Size' +COLUMN block_size FORMAT 99,999 HEAD 'Block|Size' +COLUMN allocation_unit_size FORMAT 999,999,999 HEAD 'Allocation|Unit Size' +COLUMN state FORMAT a11 HEAD 'State' +COLUMN type FORMAT a6 HEAD 'Type' +COLUMN total_mb FORMAT 999,999,999 HEAD 'Total Size (MB)' +COLUMN used_mb FORMAT 999,999,999 HEAD 'Used Size (MB)' +COLUMN pct_used FORMAT 999.99 HEAD 'Pct. Used' + +BREAK ON report ON disk_group_name SKIP 1 + +COMPUTE sum LABEL "Grand Total: " OF total_mb used_mb ON report + +SELECT + name group_name + , sector_size sector_size + , block_size block_size + , allocation_unit_size allocation_unit_size + , state state + , type type + , total_mb total_mb + , (total_mb - free_mb) used_mb + , ROUND((1- (free_mb / total_mb))*100, 2) pct_used +FROM + v$asm_diskgroup +WHERE + total_mb != 0 +ORDER BY + name +/ + diff --git a/idev/asm_disks.sql b/idev/asm_disks.sql new file mode 100644 index 0000000..c3200e2 --- /dev/null +++ b/idev/asm_disks.sql @@ -0,0 +1,70 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_disks.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Provide a summary report of all disks contained within all disk | +-- | groups. This script is also responsible for queriing all | +-- | candidate disks - those that are not assigned to any disk | +-- | group. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASM Disks | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN disk_group_name FORMAT a25 HEAD 'Disk Group Name' +COLUMN disk_file_path FORMAT a20 HEAD 'Path' +COLUMN disk_file_name FORMAT a20 HEAD 'File Name' +COLUMN disk_file_fail_group FORMAT a20 HEAD 'Fail Group' +COLUMN total_mb FORMAT 999,999,999 HEAD 'File Size (MB)' +COLUMN used_mb FORMAT 999,999,999 HEAD 'Used Size (MB)' +COLUMN pct_used FORMAT 999.99 HEAD 'Pct. Used' + +BREAK ON report ON disk_group_name SKIP 1 + +COMPUTE sum LABEL "" OF total_mb used_mb ON disk_group_name +COMPUTE sum LABEL "Grand Total: " OF total_mb used_mb ON report + +SELECT + NVL(a.name, '[CANDIDATE]') disk_group_name + , b.path disk_file_path + , b.name disk_file_name + , b.failgroup disk_file_fail_group + , b.total_mb total_mb + , (b.total_mb - b.free_mb) used_mb + , ROUND((1- (b.free_mb / b.total_mb))*100, 2) pct_used +FROM + v$asm_diskgroup a RIGHT OUTER JOIN v$asm_disk b USING (group_number) +ORDER BY + a.name +/ diff --git a/idev/asm_disks_perf.sql b/idev/asm_disks_perf.sql new file mode 100644 index 0000000..5988b3d --- /dev/null +++ b/idev/asm_disks_perf.sql @@ -0,0 +1,75 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_disks_perf.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Provide a summary report of all disks contained within all ASM | +-- | disk groups along with their performance metrics. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASM Disk Performance | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN disk_group_name FORMAT a20 HEAD 'Disk Group Name' +COLUMN disk_path FORMAT a20 HEAD 'Disk Path' +COLUMN reads FORMAT 999,999,999,999 HEAD 'Reads' +COLUMN writes FORMAT 999,999,999,999 HEAD 'Writes' +COLUMN read_errs FORMAT 999,999,999 HEAD 'Read|Errors' +COLUMN write_errs FORMAT 999,999,999 HEAD 'Write|Errors' +COLUMN read_time FORMAT 999,999,999,999 HEAD 'Read|Time' +COLUMN write_time FORMAT 999,999,999,999 HEAD 'Write|Time' +COLUMN bytes_read FORMAT 999,999,999,999,999 HEAD 'Bytes|Read' +COLUMN bytes_written FORMAT 999,999,999,999,999 HEAD 'Bytes|Written' + +BREAK ON report ON disk_group_name SKIP 2 + +COMPUTE sum LABEL "" OF reads writes read_errs write_errs read_time write_time bytes_read bytes_written ON disk_group_name +COMPUTE sum LABEL "Grand Total: " OF reads writes read_errs write_errs read_time write_time bytes_read bytes_written ON report + +SELECT + a.name disk_group_name + , b.path disk_path + , b.reads reads + , b.writes writes + , b.read_errs read_errs + , b.write_errs write_errs + , b.read_time read_time + , b.write_time write_time + , b.bytes_read bytes_read + , b.bytes_written bytes_written +FROM + v$asm_diskgroup a JOIN v$asm_disk b USING (group_number) +ORDER BY + a.name +/ + diff --git a/idev/asm_drop_files.sql b/idev/asm_drop_files.sql new file mode 100644 index 0000000..4254f01 --- /dev/null +++ b/idev/asm_drop_files.sql @@ -0,0 +1,56 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_drop_files.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Used to create a SQL script that removes all ASM files | +-- | contained within all diskgroups. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK OFF +SET HEADING OFF +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN full_alias_path FORMAT a255 HEAD 'File Name' +COLUMN disk_group_name NOPRINT + +SELECT + 'ALTER DISKGROUP ' || + disk_group_name || + ' DROP FILE ''' || CONCAT('+' || disk_group_name, SYS_CONNECT_BY_PATH(alias_name, '/')) || ''';' full_alias_path +FROM + ( SELECT + g.name disk_group_name + , a.parent_index pindex + , a.name alias_name + , a.reference_index rindex + , f.type type + FROM + v$asm_file f RIGHT OUTER JOIN v$asm_alias a USING (group_number, file_number) + JOIN v$asm_diskgroup g USING (group_number) + ) +WHERE type IS NOT NULL +START WITH (MOD(pindex, POWER(2, 24))) = 0 + CONNECT BY PRIOR rindex = pindex +/ + +SET FEEDBACK 6 +SET HEAD ON diff --git a/idev/asm_files.sql b/idev/asm_files.sql new file mode 100644 index 0000000..2d6b9c0 --- /dev/null +++ b/idev/asm_files.sql @@ -0,0 +1,108 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_files.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Provide a summary report of all files, file metadata, and | +-- | volume information for all ASM disk groups customized for | +-- | Oracle 11g and higher. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASM Files | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN full_path FORMAT a75 HEAD 'ASM File Name / Volume Name / Device Name' +COLUMN system_created FORMAT a8 HEAD 'System|Created?' +COLUMN bytes FORMAT 9,999,999,999,999 HEAD 'Bytes' +COLUMN space FORMAT 9,999,999,999,999 HEAD 'Space' +COLUMN type FORMAT a18 HEAD 'File Type' +COLUMN redundancy FORMAT a12 HEAD 'Redundancy' +COLUMN striped FORMAT a8 HEAD 'Striped' +COLUMN creation_date FORMAT a20 HEAD 'Creation Date' +COLUMN disk_group_name noprint + +BREAK ON report ON disk_group_name SKIP 1 + +COMPUTE sum LABEL "" OF bytes space ON disk_group_name +COMPUTE sum LABEL "Grand Total: " OF bytes space ON report + +SELECT + CONCAT('+' || db_files.disk_group_name, SYS_CONNECT_BY_PATH(db_files.alias_name, '/')) full_path + , db_files.bytes + , db_files.space + , NVL(LPAD(db_files.type, 18), '') type + , db_files.creation_date + , db_files.disk_group_name + , LPAD(db_files.system_created, 4) system_created +FROM + ( SELECT + g.name disk_group_name + , a.parent_index pindex + , a.name alias_name + , a.reference_index rindex + , a.system_created system_created + , f.bytes bytes + , f.space space + , f.type type + , TO_CHAR(f.creation_date, 'DD-MON-YYYY HH24:MI:SS') creation_date + FROM + v$asm_file f RIGHT OUTER JOIN v$asm_alias a USING (group_number, file_number) + JOIN v$asm_diskgroup g USING (group_number) + ) db_files +WHERE db_files.type IS NOT NULL +START WITH (MOD(db_files.pindex, POWER(2, 24))) = 0 + CONNECT BY PRIOR db_files.rindex = db_files.pindex +UNION +SELECT + '+' || volume_files.disk_group_name || ' [' || volume_files.volume_name || '] ' || volume_files.volume_device full_path + , volume_files.bytes + , volume_files.space + , NVL(LPAD(volume_files.type, 18), '') type + , volume_files.creation_date + , volume_files.disk_group_name + , null +FROM + ( SELECT + g.name disk_group_name + , v.volume_name volume_name + , v.volume_device volume_device + , f.bytes bytes + , f.space space + , f.type type + , TO_CHAR(f.creation_date, 'DD-MON-YYYY HH24:MI:SS') creation_date + FROM + v$asm_file f RIGHT OUTER JOIN v$asm_volume v USING (group_number, file_number) + JOIN v$asm_diskgroup g USING (group_number) + ) volume_files +WHERE volume_files.type IS NOT NULL +/ diff --git a/idev/asm_files2.sql b/idev/asm_files2.sql new file mode 100644 index 0000000..74d7ab1 --- /dev/null +++ b/idev/asm_files2.sql @@ -0,0 +1,73 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_files2.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Provide a summary report of all files (and file metadata) | +-- | information for all ASM disk groups. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASM Files | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN disk_group_name FORMAT a25 HEAD 'Disk Group Name' +COLUMN file_name FORMAT a50 HEAD 'File Name' +COLUMN bytes FORMAT 9,999,999,999,999 HEAD 'Bytes' +COLUMN space FORMAT 9,999,999,999,999 HEAD 'Space' +COLUMN type FORMAT a18 HEAD 'File Type' +COLUMN redundancy FORMAT a12 HEAD 'Redundancy' +COLUMN striped FORMAT a8 HEAD 'Striped' +COLUMN creation_date FORMAT a20 HEAD 'Creation Date' + +BREAK ON report ON disk_group_name SKIP 1 + +COMPUTE sum LABEL "" OF bytes space ON disk_group_name +COMPUTE sum LABEL "Grand Total: " OF bytes space ON report + +SELECT + g.name disk_group_name + , a.name file_name + , f.bytes bytes + , f.space space + , f.type type + , TO_CHAR(f.creation_date, 'DD-MON-YYYY HH24:MI:SS') creation_date +FROM + v$asm_file f JOIN v$asm_alias a USING (group_number, file_number) + JOIN v$asm_diskgroup g USING (group_number) +WHERE + system_created = 'Y' +ORDER BY + g.name + , file_number +/ + diff --git a/idev/asm_files_10g.sql b/idev/asm_files_10g.sql new file mode 100644 index 0000000..ab38e83 --- /dev/null +++ b/idev/asm_files_10g.sql @@ -0,0 +1,84 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_files_10g.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Provide a summary report of all files (and file metadata) | +-- | information for all ASM disk groups customized for Oracle 10g. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASM Files | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN full_alias_path FORMAT a75 HEAD 'File Name' +COLUMN system_created FORMAT a8 HEAD 'System|Created?' +COLUMN bytes FORMAT 9,999,999,999,999 HEAD 'Bytes' +COLUMN space FORMAT 9,999,999,999,999 HEAD 'Space' +COLUMN type FORMAT a18 HEAD 'File Type' +COLUMN redundancy FORMAT a12 HEAD 'Redundancy' +COLUMN striped FORMAT a8 HEAD 'Striped' +COLUMN creation_date FORMAT a20 HEAD 'Creation Date' +COLUMN disk_group_name NOPRINT + +BREAK ON report ON disk_group_name SKIP 1 + +COMPUTE sum LABEL "" OF bytes space ON disk_group_name +COMPUTE sum LABEL "Grand Total: " OF bytes space ON report + +SELECT + CONCAT('+' || disk_group_name, SYS_CONNECT_BY_PATH(alias_name, '/')) full_alias_path + , bytes + , space + , NVL(LPAD(type, 18), '') type + , creation_date + , disk_group_name + , LPAD(system_created, 4) system_created +FROM + ( SELECT + g.name disk_group_name + , a.parent_index pindex + , a.name alias_name + , a.reference_index rindex + , a.system_created system_created + , f.bytes bytes + , f.space space + , f.type type + , TO_CHAR(f.creation_date, 'DD-MON-YYYY HH24:MI:SS') creation_date + FROM + v$asm_file f RIGHT OUTER JOIN v$asm_alias a USING (group_number, file_number) + JOIN v$asm_diskgroup g USING (group_number) + ) +WHERE type IS NOT NULL +START WITH (MOD(pindex, POWER(2, 24))) = 0 + CONNECT BY PRIOR rindex = pindex +/ diff --git a/idev/asm_templates.sql b/idev/asm_templates.sql new file mode 100644 index 0000000..2aa1280 --- /dev/null +++ b/idev/asm_templates.sql @@ -0,0 +1,65 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asm_templates.sql | +-- | CLASS : Automatic Storage Management | +-- | PURPOSE : Provide a summary report of all template information for all | +-- | ASM disk groups. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASM Templates | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN disk_group_name FORMAT a25 HEAD 'Disk Group Name' +COLUMN entry_number FORMAT 999999 HEAD 'Entry Number' +COLUMN redundancy FORMAT a12 HEAD 'Redundancy' +COLUMN stripe FORMAT a8 HEAD 'Stripe' +COLUMN system FORMAT a6 HEAD 'System' +COLUMN template_name FORMAT a30 HEAD 'Template Name' + +BREAK ON report ON disk_group_name SKIP 1 + +SELECT + b.name disk_group_name + , a.entry_number entry_number + , a.redundancy redundancy + , a.stripe stripe + , a.system system + , a.name template_name +FROM + v$asm_template a JOIN v$asm_diskgroup b USING (group_number) +ORDER BY + b.name + , a.entry_number +/ + diff --git a/idev/asmm_components.sql b/idev/asmm_components.sql new file mode 100644 index 0000000..6659691 --- /dev/null +++ b/idev/asmm_components.sql @@ -0,0 +1,70 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : asmm_components.sql | +-- | CLASS : Automatic Shared Memory Management | +-- | PURPOSE : Provide a summary report of all dynamic components as part of | +-- | Oracle's ASMM configuration. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : ASMM Components | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN component FORMAT a25 HEAD 'Component Name' +COLUMN current_size FORMAT 9,999,999,999 HEAD 'Current Size' +COLUMN min_size FORMAT 9,999,999,999 HEAD 'Min Size' +COLUMN max_size FORMAT 9,999,999,999 HEAD 'Max Size' +COLUMN user_specified_size FORMAT 9,999,999,999 HEAD 'User Specified|Size' +COLUMN oper_count FORMAT 9,999 HEAD 'Oper.|Count' +COLUMN last_oper_type FORMAT a10 HEAD 'Last Oper.|Type' +COLUMN last_oper_mode FORMAT a10 HEAD 'Last Oper.|Mode' +COLUMN last_oper_time FORMAT a20 HEAD 'Last Oper.|Time' +COLUMN granule_size FORMAT 999,999,999 HEAD 'Granule Size' + +SELECT + component + , current_size + , min_size + , max_size + , user_specified_size + , oper_count + , last_oper_type + , last_oper_mode + , TO_CHAR(last_oper_time, 'DD-MON-YYYY HH24:MI:SS') last_oper_time + , granule_size +FROM + v$sga_dynamic_components +ORDER BY + component DESC +/ + diff --git a/idev/awr_snapshots_dbtime.sql b/idev/awr_snapshots_dbtime.sql new file mode 100644 index 0000000..3dba271 --- /dev/null +++ b/idev/awr_snapshots_dbtime.sql @@ -0,0 +1,94 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : awr_snapshots_dbtime.sql | +-- | CLASS : Automatic Workload Repository | +-- | PURPOSE : Provide a list of all AWR snapshots and the total database time | +-- | (DB Time) consumed within its interval. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : AWR Snapshots (DB Time Report) | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name_print FORMAT a13 HEADING 'Instance Name' +COLUMN snap_id FORMAT 9999999 HEADING 'Snap ID' +COLUMN startup_time FORMAT a21 HEADING 'Instance Startup Time' +COLUMN begin_interval_time FORMAT a20 HEADING 'Begin Interval Time' +COLUMN end_interval_time FORMAT a20 HEADING 'End Interval Time' +COLUMN elapsed_time FORMAT 999,999,999,999.99 HEADING 'Elapsed Time (min)' +COLUMN db_time FORMAT 999,999,999,999.99 HEADING 'DB Time (min)' +COLUMN pct_db_time FORMAT 999999999 HEADING '% DB Time' +COLUMN cpu_time FORMAT 999,999,999.99 HEADING 'CPU Time (min)' + +BREAK ON instance_name_print ON startup_time + +DEFINE spool_file=awr_snapshots_dbtime.lst + +SPOOL &spool_file + +SELECT + i.instance_name instance_name_print + , s.snap_id snap_id + , TO_CHAR(s.startup_time, 'mm/dd/yyyy HH24:MI:SS') startup_time + , TO_CHAR(s.begin_interval_time, 'mm/dd/yyyy HH24:MI:SS') begin_interval_time + , TO_CHAR(s.end_interval_time, 'mm/dd/yyyy HH24:MI:SS') end_interval_time + , ROUND(EXTRACT(DAY FROM s.end_interval_time - s.begin_interval_time) * 1440 + + EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 + + EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) + + EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60, 2) elapsed_time + , ROUND((e.value - b.value)/1000000/60, 2) db_time + , ROUND(((((e.value - b.value)/1000000/60) / (EXTRACT(DAY FROM s.end_interval_time - s.begin_interval_time) * 1440 + + EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 + + EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) + + EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60) ) * 100), 2) pct_db_time +FROM + dba_hist_snapshot s + , gv$instance i + , dba_hist_sys_time_model e + , dba_hist_sys_time_model b +WHERE + i.instance_number = s.instance_number + AND e.snap_id = s.snap_id + AND b.snap_id = s.snap_id - 1 + AND e.stat_id = b.stat_id + AND e.instance_number = b.instance_number + AND e.instance_number = s.instance_number + AND e.stat_name = 'DB time' +ORDER BY + i.instance_name + , s.snap_id; + +SPOOL OFF + +PROMPT Report written to &spool_file +PROMPT diff --git a/idev/awr_snapshots_dbtime_xls.sql b/idev/awr_snapshots_dbtime_xls.sql new file mode 100644 index 0000000..98f1844 --- /dev/null +++ b/idev/awr_snapshots_dbtime_xls.sql @@ -0,0 +1,102 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : awr_snapshots_dbtime_xls.sql | +-- | CLASS : Automatic Workload Repository | +-- | PURPOSE : Provide a list of all AWR snapshots and the total database time | +-- | (DB Time) consumed within its interval. The output from this | +-- | script can be used when loading the data into MS Excel. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : AWR Snapshots (DB Time Report) for Microsoft Excel | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK OFF +SET HEADING OFF +SET LINESIZE 32767 +SET PAGESIZE 50000 +SET TERMOUT OFF +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +DEFINE fileName=awr_snapshots_dbtime_xls + +COLUMN dbname NEW_VALUE _dbname NOPRINT +SELECT name dbname FROM v$database; + +COLUMN spool_time NEW_VALUE _spool_time NOPRINT +SELECT TO_CHAR(SYSDATE,'YYYYMMDD') spool_time FROM dual; + +SPOOL &FileName._&_dbname._&_spool_time..txt + +SELECT + 'Instance Name' || chr(9) + || 'Instance Startup Time' || chr(9) + || 'Begin Interval Time' || chr(9) + || 'End Interval Time' || chr(9) + || 'Elapsed Time (min)' || chr(9) + || 'DB Time (min)' || chr(9) + || '% DB Time' +FROM dual; + +SELECT + i.instance_name || chr(9) + || TO_CHAR(s.startup_time, 'mm/dd/yyyy HH24:MI:SS') || chr(9) + || TO_CHAR(s.begin_interval_time, 'mm/dd/yyyy HH24:MI:SS') || chr(9) + || TO_CHAR(s.end_interval_time, 'mm/dd/yyyy HH24:MI:SS') || chr(9) + || ROUND(EXTRACT(DAY FROM s.end_interval_time - s.begin_interval_time) * 1440 + + EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 + + EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) + + EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60, 2) || chr(9) + || ROUND((e.value - b.value)/1000000/60, 2) || chr(9) + || ROUND(((((e.value - b.value)/1000000/60) / (EXTRACT(DAY FROM s.end_interval_time - s.begin_interval_time) * 1440 + + EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 + + EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) + + EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60) ) * 100), 2) instance_db_time +FROM + dba_hist_snapshot s + , gv$instance i + , dba_hist_sys_time_model e + , dba_hist_sys_time_model b +WHERE + i.instance_number = s.instance_number + AND e.snap_id = s.snap_id + AND b.snap_id = s.snap_id - 1 + AND e.stat_id = b.stat_id + AND e.instance_number = b.instance_number + AND e.instance_number = s.instance_number + AND e.stat_name = 'DB time' +ORDER BY + i.instance_name + , s.snap_id; + +SPOOL OFF + +SET FEEDBACK 6 +SET HEADING ON +SET TERMOUT ON + +PROMPT Wrote report to &FileName._&_dbname._&_spool_time..txt +PROMPT diff --git a/idev/dba_blocks_used_by_table.sql b/idev/dba_blocks_used_by_table.sql new file mode 100644 index 0000000..6e3e08b --- /dev/null +++ b/idev/dba_blocks_used_by_table.sql @@ -0,0 +1,75 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_blocks_used_by_table.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : This article describes how to find out how many blocks are | +-- | really being used within a table. (ie. Blocks that are not | +-- | empty) Scripts are included for both Oracle7 and Oracle8. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +-------------------------------------------- +HOW MANY BLOCKS CONTAIN DATA (are not empty) +----------------------------------------------------------------------- +Each row in the table has pseudocolumn called ROWID. +This pseudo contains information about physical location +of the row in format: + + block_number.row.file + +If the table is stored in a tablespace which has one +datafile, all we have to do is to get DISTINCT +number of block_number from ROWID column of this table. + +But if the table is stored in a tablespace with more than one +datafile then you can have the same block_number but in +different datafiles so we have to get DISTINCT number of +block_number+file from ROWID. + +The SELECT statements which give us the number of "really used" +blocks is below. They are different for ORACLE 7 and ORACLE 8 +because of different structure of ROWID column in these versions. + +You could ask why the above information could not be determined +by using the ANALYZE TABLE command. The ANALYZE TABLE command only +identifies the number of 'ever' used blocks or the high water mark +for the table. +----------------------------------------------------------------------- + + + +------- +ORACLE7 +----------------------------------------------------------------------- + +SELECT + COUNT(DISTINCT(SUBSTR(rowid,1,8) + || + SUBSTR(rowid,15,4))) +FROM &table_name +/ + + +-------- +ORACLE8+ +----------------------------------------------------------------------- + +SELECT COUNT ( DISTINCT + DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) + || + DBMS_ROWID.ROWID_RELATIVE_FNO(rowid) + ) "Used" +FROM &table_name; + + - or - + +SELECT COUNT (DISTINCT SUBSTR(rowid,1,15)) "Used" +FROM &table_name; + diff --git a/idev/dba_column_constraints.sql b/idev/dba_column_constraints.sql new file mode 100644 index 0000000..ea0b33f --- /dev/null +++ b/idev/dba_column_constraints.sql @@ -0,0 +1,69 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_column_constraints.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all column constraints in the database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Column Constraints for a Specified Table | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT schema CHAR PROMPT 'Enter schema : ' +ACCEPT tab_name CHAR PROMPT 'Enter table name : ' + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN constraint_name FORMAT a20 HEADING 'Constraint Name' +COLUMN table_name FORMAT a20 HEADING 'Table Name' +COLUMN column_name FORMAT a25 HEADING 'Column Name' +COLUMN position FORMAT 999,999,999 HEADING 'Index Position' + +BREAK ON report ON owner ON table_name SKIP 1 + +SELECT + owner + , table_name + , constraint_name + , column_name + , position +FROM + dba_cons_columns +WHERE + owner = UPPER('&schema') + AND table_name = UPPER('&tab_name') +ORDER BY + owner + , table_name + , constraint_name + , position +/ diff --git a/idev/dba_compare_schemas.sql b/idev/dba_compare_schemas.sql new file mode 100644 index 0000000..db8b67b --- /dev/null +++ b/idev/dba_compare_schemas.sql @@ -0,0 +1,1632 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_compare_schemas.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : This script can be used by developers and DBAs to compare two | +-- | Oracle schemas. This script will generate a report of all | +-- | object discrepancies between two Oracle database schemas. | +-- | | +-- | This script has been tested on the following Oracle database | +-- | versions: 7.3, 8, 8i, 9i, 10g, 11g. | +-- | | +-- | At this time, the following schema object types (and | +-- | attributes) are not compared and reported on within the | +-- | detailed discrepancy sections. Most of them, however, will | +-- | appear in the "Summary" section of the report. | +-- | | +-- | - Comments (On either tables nor columns.) | +-- | - Partitions (Introduced in Oracle8) | +-- | - Object types (Introduced in Oracle8) | +-- | - Nested tables (Introduced in Oracle8) | +-- | - Dimensions (Introduced in Oracle8i) | +-- | - Cluster definitions | +-- | - Auditing metadata | +-- | - Index organized tables (Introduced in Oracle8i) | +-- | - Temporary tables (Introduced in Oracle8i) | +-- | - Snapshots (Also known as materialized views | +-- | in Oracle8 and higher. Also no | +-- | details on snapshot logs and | +-- | refresh groups will be | +-- | generated.) | +-- | - New schema attributes (Introduced in Oracle 9i) | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET PAGESIZE 50000 +SET LINESIZE 256 + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | COMPARE SCHEMA SCRIPT | +PROMPT |------------------------------------------------------------------------| +PROMPT | | +PROMPT | USAGE | +PROMPT | -----------------------------------------------------------------------| +PROMPT | This SQL script should be run while connected to the Oracle database | +PROMPT | as one of the schemas you would like to compare. You will be prompted | +PROMPT | to enter the Oracle username, password, and Oracle Net Service Name of | +PROMPT | the second (remote) schema you would like to compare against. Lastly, | +PROMPT | you will be asked for the filename of the report you would like this | +PROMPT | script to create for all generated discrepancies. (You can hit [ENTER] | +PROMPT | to accept the default file name.) | +PROMPT | | +PROMPT | NOTE | +PROMPT | -----------------------------------------------------------------------| +PROMPT | The following database objects will be created for use by this script. | +PROMPT | | +PROMPT | [*] Database Link (remote_schema_link) | +PROMPT | [*] Table (schema_compare_temp) | +PROMPT | [*] PL/SQL Procedure (getLongText) | +PROMPT | [*] PL/SQL Procedure (getLongText2) | +PROMPT | | +PROMPT | These objects will be dropped at the end of this script. | +PROMPT +------------------------------------------------------------------------+ +PROMPT + +SET TERMOUT OFF; +COLUMN local_conn_info NEW_VALUE local_conn_info NOPRINT; +SELECT 'You are currently connected to the [' || + sys_context('USERENV', 'INSTANCE_NAME') || '] instance as the [' || + sys_context('USERENV', 'SESSION_USER') || '] user.' local_conn_info +FROM dual; +SET TERMOUT ON; + +PROMPT +------------------------------------------------------------------------+ +PROMPT | LOCAL CONNECTION INFORMATION | +PROMPT |------------------------------------------------------------------------| +PROMPT | &local_conn_info +PROMPT +------------------------------------------------------------------------+ +PROMPT + +ACCEPT a1 CHAR PROMPT "Hit to continue or CTL-C to exit this script ... "; +PROMPT + + +REM +---------------------------------------------------------------------------+ +REM | PROMPT USER FOR USERNAME, PASSWORD, AND ORACLE NET SERVICE NAME. | +REM +---------------------------------------------------------------------------+ + +ACCEPT schema CHAR PROMPT "Enter USERNAME for remote schema: " +ACCEPT password CHAR PROMPT "Enter PASSWORD for remote schema: " HIDE +ACCEPT tns_name CHAR PROMPT "Enter ORACLE NET SERVICE NAME for remote schema: " + + +REM +---------------------------------------------------------------------------+ +REM | CREATE TEMPORARY DATABASE LINK. | +REM +---------------------------------------------------------------------------+ + +SET FEEDBACK OFF +SET VERIFY OFF +SET TRIMSPOOL ON + +CREATE DATABASE LINK remote_schema_link + CONNECT TO &schema IDENTIFIED BY &password + USING '&tns_name' +/ + + +REM +---------------------------------------------------------------------------+ +REM | CONFIGURE A DEFAULT REPORT FILE NAME FOR THIS SCRIPT RUN. THE USER WILL | +REM | BE PROMPTED TO ENTER AN ALTERNATIVE TO THIS DEFAULT. | +REM +---------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN dflt_name NEW_VALUE dflt_name NOPRINT; +SELECT 'compare_' || + lower(user) || '_' || + lower('&schema') || '_' || + lower('&tns_name') dflt_name +FROM dual; +SET TERMOUT ON; + +PROMPT +------------------------------------------------------------------------+ +PROMPT | SPECIFY THE DISCREPANCY REPORT FILE NAME | +PROMPT |------------------------------------------------------------------------| +PROMPT | The default report file name is &dflt_name..lst +PROMPT | | +PROMPT | To use this name, press [ENTER] to continue, otherwise enter an | +PROMPT | alternative. | +PROMPT +------------------------------------------------------------------------+ +PROMPT + +SET HEADING OFF; +COLUMN report_name new_value report_name NOPRINT; +SELECT + 'Using the report name: ' || nvl('&&report_name','&dflt_name') + , nvl('&&report_name','&dflt_name') || '.lst' report_name +FROM sys.dual; +spool &report_name; +SET HEADING ON; + + +REM +---------------------------------------------------------------------------+ +REM | PRINT OUT DATE AND TIME AND OTHER REPORT HEADER INFORMATION. | +REM +---------------------------------------------------------------------------+ + +SELECT SUBSTR(RPAD(TO_CHAR(sysdate, 'DD-MON-YYYY HH24:MI:SS'), 25), 1, 25) "Report Date and Time" +FROM dual; + +COLUMN local_schema FORMAT a45 HEADING "Local Schema" TRUNC +COLUMN remote_schema FORMAT a45 HEADING "Remote Schema" TRUNC + +SELECT + user || '@' || c.global_name local_schema + , a.username || '@' || b.global_name remote_schema +FROM + user_users@remote_schema_link a + , global_name@remote_schema_link b + , global_name c +WHERE + rownum = 1; + +SET FEEDBACK OFF +SET TERMOUT OFF + +COLUMN object_name FORMAT a40 HEADING 'Object Name' +COLUMN object_type FORMAT a40 HEADING 'Object Type' +COLUMN obj_count FORMAT 999,999,999 HEADING 'Object Count' + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| OBJECT SUMMARY |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + +PROMPT +PROMPT ======================================================== +PROMPT Objects missing from local schema - (Summary) +PROMPT ======================================================== + +SELECT + object_type + , count(*) obj_count +FROM + (select + object_type + , decode( object_type + , 'INDEX', decode(substr(object_name, 1, 5), 'SYS_C', 'SYS_C', object_name) + , 'LOB' , decode(substr(object_name, 1, 7), 'SYS_LOB', 'SYS_LOB', object_name) + , object_name) + from user_objects@remote_schema_link + minus + select + object_type + , decode( object_type + , 'INDEX', DECODE(SUBSTR(object_name, 1, 5), 'SYS_C', 'SYS_C', object_name) + , 'LOB', DECODE(SUBSTR(object_name, 1, 7), 'SYS_LOB', 'SYS_LOB', object_name), + object_name) + from user_objects + ) +GROUP BY object_type +ORDER BY object_type; + + +PROMPT +PROMPT +PROMPT ======================================================== +PROMPT Extraneous objects in local schema - (Summary) +PROMPT ======================================================== + +SELECT + object_type + , count(*) obj_count +FROM + (select + object_type + , DECODE( object_type + , 'INDEX', DECODE (SUBSTR (object_name, 1, 5), 'SYS_C', 'SYS_C', object_name) + , 'LOB', DECODE (SUBSTR (object_name, 1, 7), 'SYS_LOB', 'SYS_LOB', object_name) + , object_name) + from user_objects + where object_type != 'DATABASE LINK' + or object_name NOT LIKE 'REMOTE_SCHEMA_LINK.%' + minus + select + object_type + , DECODE( object_type + , 'INDEX', DECODE (SUBSTR (object_name, 1, 5), 'SYS_C', 'SYS_C', object_name) + , 'LOB', DECODE (SUBSTR (object_name, 1, 7), 'SYS_LOB', 'SYS_LOB', object_name) + , object_name) + from user_objects@remote_schema_link + ) +GROUP BY object_type +ORDER BY object_type; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| PRIVILEGE DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + + +COLUMN granted_role FORMAT a30 HEADING 'Granted Role' +COLUMN default_role FORMAT a22 HEADING 'Default Role' +COLUMN os_granted FORMAT a11 HEADING 'O/S Granted' +COLUMN owner FORMAT a30 HEADING 'Owner' +COLUMN table_name FORMAT a30 HEADING 'Table Name' +COLUMN schema FORMAT a7 HEADING 'Schema' +COLUMN grantee FORMAT a30 HEADING 'Grantee' +COLUMN privilege FORMAT a40 HEADING 'Privilege' +COLUMN grantable FORMAT a10 HEADING 'Grantable?' +COLUMN admin_option FORMAT a13 HEADING 'Admin Option?' + + +PROMPT +PROMPT ======================================================== +PROMPT Role privilege discrepancies +PROMPT ======================================================== + +( + SELECT + granted_role + , 'Remote' schema + , admin_option + , default_role + , os_granted + FROM + user_role_privs@remote_schema_link + MINUS + SELECT + granted_role + , 'Remote' schema + , admin_option + , default_role + , os_granted + FROM + user_role_privs +) +UNION ALL +( + SELECT + granted_role + , 'Local' schema + , admin_option + , default_role + , os_granted + FROM + user_role_privs + MINUS + SELECT + granted_role + , 'Local' schema + , admin_option + , default_role + , os_granted + FROM + user_role_privs@remote_schema_link +) +ORDER BY 1, 2; + + +PROMPT +PROMPT ======================================================== +PROMPT System privilege discrepancies +PROMPT ======================================================== + +( + SELECT + privilege + , 'Remote' schema + , admin_option + FROM + user_sys_privs@remote_schema_link + MINUS + SELECT + privilege + , 'Remote' schema + , admin_option + FROM + user_sys_privs +) +UNION ALL +( + SELECT + privilege + , 'Local' schema + , admin_option + FROM + user_sys_privs + MINUS + SELECT + privilege + , 'Local' schema + , admin_option + FROM + user_sys_privs@remote_schema_link +) +ORDER BY 1, 2; + + +PROMPT +PROMPT ======================================================== +PROMPT Object-level grant discrepancies +PROMPT ======================================================== + +( + SELECT + owner + , table_name + , 'Remote' schema + , grantee + , privilege + , grantable + FROM + user_tab_privs@remote_schema_link + WHERE + (owner, table_name) IN ( + select owner, object_name + from all_objects + ) + MINUS + SELECT + owner + , table_name + , 'Remote' schema + , grantee + , privilege + , grantable + FROM user_tab_privs +) +UNION ALL +( + SELECT + owner + , table_name + , 'Local' schema + , grantee + , privilege + , grantable + FROM + user_tab_privs + WHERE + (owner, table_name) IN ( + select owner, object_name + from all_objects@remote_schema_link + ) + MINUS + SELECT + owner + , table_name + , 'Local' schema + , grantee + , privilege + , grantable + FROM + user_tab_privs@remote_schema_link +) +ORDER BY 1, 2, 3; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| OBJECT DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + + +PROMPT +PROMPT ======================================================== +PROMPT Objects missing from local schema +PROMPT ======================================================== + +SELECT + DECODE( object_type + , 'INDEX', DECODE(SUBSTR(object_name, 1, 5), 'SYS_C', 'SYS_C', object_name) + , 'LOB', DECODE(SUBSTR(object_name, 1, 7), 'SYS_LOB', 'SYS_LOB', object_name) + , object_name) object_name + , object_type +FROM user_objects@remote_schema_link +MINUS +SELECT + DECODE( object_type + , 'INDEX', DECODE(SUBSTR(object_name, 1, 5), 'SYS_C', 'SYS_C', object_name) + , 'LOB', DECODE(SUBSTR(object_name, 1, 7), 'SYS_LOB', 'SYS_LOB', object_name) + , object_name) object_name + , object_type +FROM user_objects +ORDER BY object_type, object_name; + + +PROMPT +PROMPT +PROMPT ======================================================== +PROMPT Extraneous objects in local schema +PROMPT ======================================================== + +SELECT + DECODE( object_type + , 'INDEX', DECODE(SUBSTR(object_name, 1, 5), 'SYS_C', 'SYS_C', object_name) + , 'LOB', DECODE(SUBSTR(object_name, 1, 7), 'SYS_LOB', 'SYS_LOB', object_name) + , object_name) object_name + , object_type +FROM + user_objects +WHERE + object_type != 'DATABASE LINK' + OR object_name NOT LIKE 'REMOTE_SCHEMA_LINK.%' +MINUS +SELECT + DECODE( object_type + , 'INDEX', DECODE(SUBSTR(object_name, 1, 5), 'SYS_C', 'SYS_C', object_name) + , 'LOB', DECODE(SUBSTR(object_name, 1, 7), 'SYS_LOB', 'SYS_LOB', object_name) + , object_name) object_name + , object_type +FROM + user_objects@remote_schema_link +ORDER BY object_type, object_name; + + +PROMPT +PROMPT +PROMPT ======================================================== +PROMPT Objects in local schema that are not valid +PROMPT ======================================================== + +SELECT object_name, object_type, status +FROM user_objects +WHERE status != 'VALID' +ORDER BY object_name, object_type; + + +PROMPT +PROMPT +PROMPT ======================================================== +PROMPT Objects in remote schema that are not valid +PROMPT ======================================================== + +SELECT object_name, object_type, status +FROM user_objects@remote_schema_link +WHERE status != 'VALID' +ORDER BY object_name, object_type; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| TABLE COLUMN DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + + +PROMPT +PROMPT ======================================================== +PROMPT Table columns missing from one schema +PROMPT (Discrepancies are not listed in column order) +PROMPT ======================================================== + +COLUMN table_name FORMAT a30 HEADING 'Table Name' +COLUMN column_name FORMAT a30 HEADING 'Column Name' +COLUMN mis FORMAT a17 HEADING 'Missing in Schema' +COLUMN schema FORMAT a7 HEADING 'Schema' +COLUMN nullable FORMAT a8 HEADING 'Nullable?' +COLUMN data_type FORMAT a9 HEADING 'Data Type' +COLUMN data_length FORMAT 9999 HEADING 'Length' +COLUMN data_precision FORMAT 9999 HEADING 'Precision' +COLUMN data_scale FORMAT 9999 HEADING 'Scale' +COLUMN default_length FORMAT 9999 HEADING 'Length of Default Value' + +( + SELECT + table_name + , column_name + , 'Local' mis + FROM user_tab_columns@remote_schema_link + WHERE table_name IN ( + select table_name + from user_tables + ) + MINUS + SELECT + table_name + , column_name + , 'Local' mis + FROM user_tab_columns +) +UNION ALL +( + SELECT + table_name + , column_name + , 'Remote' mis + FROM user_tab_columns + WHERE table_name IN ( + select table_name + from user_tables@remote_schema_link + ) + MINUS + SELECT + table_name + , column_name + , 'Remote' mis + FROM user_tab_columns@remote_schema_link +) +ORDER BY 1, 2; + + +PROMPT +PROMPT ======================================================== +PROMPT Data type discrepancies for table columns that exist in +PROMPT both schemas +PROMPT ======================================================== + +( + SELECT + table_name + , column_name + , 'Remote' schema + , nullable + , data_type + , data_length + , data_precision + , data_scale + , default_length + FROM user_tab_columns@remote_schema_link + WHERE (table_name, column_name) IN ( + select table_name, column_name + from user_tab_columns + ) + MINUS + SELECT + table_name + , column_name + , 'Remote' schema + , nullable + , data_type + , data_length + , data_precision + , data_scale + , default_length + FROM user_tab_columns +) +UNION ALL +( + SELECT + table_name + , column_name + , 'Local' schema + , nullable + , data_type + , data_length + , data_precision + , data_scale + , default_length + FROM user_tab_columns + WHERE (table_name, column_name) IN ( + select table_name, column_name + from user_tab_columns@remote_schema_link + ) + MINUS + SELECT + table_name + , column_name + , 'Local' schema + , nullable + , data_type + , data_length + , data_precision + , data_scale + , default_length + FROM user_tab_columns@remote_schema_link +) +ORDER BY 1, 2, 3; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| INDEX DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + +COLUMN index_name FORMAT a30 HEADING 'Index Name' +COLUMN schema FORMAT a7 HEADING 'Schema' +COLUMN uniquenes HEADING 'Uniquenes' +COLUMN table_name FORMAT a30 HEADING 'Table Name' +COLUMN column_name FORMAT a30 HEADING 'Column Name' +COLUMN column_position FORMAT 999 HEADING 'Order' + +PROMPT +PROMPT ======================================================== +PROMPT Index discrepancies for indexes that exist in both +PROMPT schemas +PROMPT ======================================================== + +( + SELECT + a.index_name + , 'Remote' schema + , a.uniqueness + , a.table_name + , b.column_name + , b.column_position + FROM + user_indexes@remote_schema_link a + , user_ind_columns@remote_schema_link b + WHERE + a.index_name IN ( + select index_name + from user_indexes + ) + AND b.index_name = a.index_name + AND b.table_name = a.table_name + MINUS + SELECT + a.index_name + , 'Remote' schema + , a.uniqueness + , a.table_name + , b.column_name + , b.column_position + FROM + user_indexes a + , user_ind_columns b + WHERE + b.index_name = a.index_name + AND b.table_name = a.table_name +) +UNION ALL +( + SELECT + a.index_name + , 'Local' schema + , a.uniqueness + , a.table_name + , b.column_name + , b.column_position + FROM + user_indexes a + , user_ind_columns b + WHERE + a.index_name IN ( + select index_name + from user_indexes@remote_schema_link + ) + AND b.index_name = a.index_name + AND b.table_name = a.table_name + MINUS + SELECT + a.index_name + , 'Local' schema + , a.uniqueness + , a.table_name + , b.column_name + , b.column_position + FROM + user_indexes@remote_schema_link a + , user_ind_columns@remote_schema_link b + WHERE + b.index_name = a.index_name + AND b.table_name = a.table_name +) +ORDER BY 1, 2, 6; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| CONSTRAINT DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + + +PROMPT +PROMPT ======================================================== +PROMPT Constraint discrepancies for tables that exist in both +PROMPT schemas +PROMPT ======================================================== + +SET FEEDBACK OFF + +CREATE TABLE schema_compare_temp ( + database NUMBER(1) + , object_name VARCHAR2(30) + , object_text VARCHAR2(2000) + , hash_value NUMBER +) +/ + + +DECLARE + + CURSOR c1 IS + SELECT constraint_name, search_condition + FROM user_constraints + WHERE search_condition IS NOT NULL; + + CURSOR c2 IS + SELECT constraint_name, search_condition + FROM user_constraints@remote_schema_link + WHERE search_condition IS NOT NULL; + + v_constraint_name VARCHAR2(30); + v_search_condition VARCHAR2(32767); + +BEGIN + + OPEN c1; + LOOP + FETCH c1 INTO v_constraint_name, v_search_condition; + EXIT WHEN c1%NOTFOUND; + + v_search_condition := SUBSTR (v_search_condition, 1, 2000); + INSERT INTO schema_compare_temp ( + database, object_name, object_text + ) VALUES ( + 1, v_constraint_name, v_search_condition + ); + END LOOP; + CLOSE c1; + + OPEN c2; + LOOP + FETCH c2 INTO v_constraint_name, v_search_condition; + EXIT WHEN c2%NOTFOUND; + v_search_condition := SUBSTR (v_search_condition, 1, 2000); + INSERT INTO schema_compare_temp ( + database, object_name, object_text + ) VALUES ( + 2, v_constraint_name, v_search_condition + ); + END LOOP; + CLOSE c2; + + COMMIT; +END; +/ + +SET FEEDBACK ON + +COLUMN constraint_name FORMAT a30 HEADING 'Constraint|Name' +COLUMN schema FORMAT a7 HEADING 'Schema' +COLUMN constraint_type FORMAT a10 HEADING 'Constraint|Type' +COLUMN table_name FORMAT a30 HEADING 'Table|Name' +COLUMN r_constraint_name FORMAT a30 HEADING 'R Constraint|Name' +COLUMN delete_rule FORMAT a10 HEADING 'Delete|Rule' +COLUMN status FORMAT a9 HEADING 'Status' +COLUMN object_text FORMAT a20 HEADING 'Object|Text' + +( + SELECT + REPLACE(TRANSLATE(a.constraint_name,'012345678','999999999'), '9', NULL) constraint_name + , 'Remote' schema + , a.constraint_type + , a.table_name + , a.r_constraint_name + , a.delete_rule + , a.status + , b.object_text + FROM + user_constraints@remote_schema_link a + , schema_compare_temp b + WHERE + a.table_name IN ( + select table_name + from user_tables + ) + AND b.database(+) = 2 + AND b.object_name(+) = a.constraint_name + MINUS + SELECT + REPLACE(TRANSLATE(a.constraint_name,'012345678','999999999'), '9', NULL) constraint_name + , 'Remote' schema + , a.constraint_type + , a.table_name + , a.r_constraint_name + , a.delete_rule + , a.status + , b.object_text + FROM + user_constraints a + , schema_compare_temp b + WHERE + b.database(+) = 1 + AND b.object_name(+) = a.constraint_name +) +UNION ALL +( + SELECT + REPLACE(TRANSLATE(a.constraint_name,'012345678','999999999'), '9', NULL) constraint_name + , 'Local' schema + , a.constraint_type + , a.table_name + , a.r_constraint_name + , a.delete_rule + , a.status + , b.object_text + FROM + user_constraints a + , schema_compare_temp b + WHERE + a.table_name IN ( + select table_name + from user_tables@remote_schema_link + ) + AND b.database(+) = 1 + AND b.object_name(+) = a.constraint_name + MINUS + SELECT + REPLACE(TRANSLATE(a.constraint_name,'012345678','999999999'), '9', NULL) constraint_name + , 'Local' schema + , a.constraint_type + , a.table_name + , a.r_constraint_name + , a.delete_rule + , a.status + , b.object_text + FROM + user_constraints@remote_schema_link a + , schema_compare_temp b + WHERE + b.database(+) = 2 + AND b.object_name(+) = a.constraint_name +) +ORDER BY 1, 4, 2; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| SEQUENCE DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + + +PROMPT +PROMPT ======================================================== +PROMPT Sequence discrepancies +PROMPT ======================================================== + +COLUMN sequence_name FORMAT a30 HEADING 'Sequence|Name' +COLUMN schema FORMAT a7 HEADING 'Schema' +COLUMN min_value HEADING 'Min.|Value' +COLUMN max_value HEADING 'Max.|Value' +COLUMN increment_by HEADING 'Increment|By' +COLUMN cycle_flag FORMAT a5 HEADING 'Cycle|Flag' +COLUMN order_flag FORMAT a5 HEADING 'Order|Flag' +COLUMN cache_size HEADING 'Cache|Size' + +( + SELECT + sequence_name + , 'Remote' schema + , min_value + , max_value + , increment_by + , cycle_flag + , order_flag + , cache_size + FROM + user_sequences@remote_schema_link + MINUS + SELECT + sequence_name + , 'Remote' schema + , min_value + , max_value + , increment_by + , cycle_flag + , order_flag + , cache_size + FROM + user_sequences +) +UNION ALL +( + SELECT + sequence_name + , 'Local' schema + , min_value + , max_value + , increment_by + , cycle_flag + , order_flag + , cache_size + FROM + user_sequences + MINUS + SELECT + sequence_name + , 'Local' schema + , min_value + , max_value + , increment_by + , cycle_flag + , order_flag + , cache_size + FROM + user_sequences@remote_schema_link +) +ORDER BY 1, 2; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| PRIVATE SYNONYM DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + +PROMPT +PROMPT ======================================================== +PROMPT Private synonym discrepancies +PROMPT ======================================================== + +COLUMN synonym_name FORMAT a30 HEADING 'Synonym|Name' +COLUMN schema FORMAT a7 HEADING 'Schema' +COLUMN table_owner FORMAT a20 HEADING 'Table|Owner' +COLUMN table_name FORMAT a30 HEADING 'Table|Name' +COLUMN db_link FORMAT a25 HEADING 'DB|Link Name' + +( + SELECT + synonym_name + , 'Remote' schema + , table_owner + , table_name + , db_link + FROM + user_synonyms@remote_schema_link + MINUS + SELECT + synonym_name + , 'Remote' schema + , table_owner + , table_name + , db_link + FROM user_synonyms +) +UNION ALL +( + SELECT + synonym_name + , 'Local' schema + , table_owner + , table_name + , db_link + FROM + user_synonyms + MINUS + SELECT + synonym_name + , 'Local' schema + , table_owner + , table_name + , db_link + FROM + user_synonyms@remote_schema_link +) +ORDER BY 1, 2; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| PL/SQL DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + +PROMPT +PROMPT ======================================================== +PROMPT Source code discrepancies for all packages, procedures, +PROMPT and functions that exist in both schemas +PROMPT (CASE SENSITIVE COMPARISON) +PROMPT ======================================================== + +COLUMN name FORMAT a30 HEADING 'Source|Name' +COLUMN type FORMAT a20 HEADING 'Source|Type' +COLUMN discrepancies FORMAT 999,999,999 HEADING 'Number|Discrepancies' + +SELECT + name + , type + , COUNT(*) discrepancies +FROM + ( ( SELECT name, type, line, text + FROM user_source@remote_schema_link + WHERE (name, type) IN ( + SELECT object_name, object_type + FROM user_objects + ) + MINUS + SELECT name, type, line, text + FROM user_source + ) + UNION ALL + ( SELECT name, type, line, text + FROM user_source + WHERE (name, type) IN ( + SELECT object_name, object_type + FROM user_objects@remote_schema_link + ) + MINUS + SELECT name, type, line, text + FROM user_source@remote_schema_link + ) + ) +GROUP BY name, type +ORDER BY name, type; + +PROMPT +PROMPT ======================================================== +PROMPT Source code discrepancies for all packages, procedures, +PROMPT and functions that exist in both schemas +PROMPT (CASE INSENSITIVE COMPARISON) +PROMPT ======================================================== + +COLUMN name FORMAT a30 HEADING 'Source|Name' +COLUMN type FORMAT a20 HEADING 'Source|Type' +COLUMN discrepancies FORMAT 999,999,999 HEADING 'Number|Discrepancies' + +SELECT + name + , type + , COUNT (*) discrepancies +FROM + ( ( SELECT name, type, line, UPPER(text) + FROM user_source@remote_schema_link + WHERE (name, type) IN ( + select object_name, object_type + from user_objects + ) + MINUS + SELECT name, type, line, UPPER(text) + FROM user_source + ) + UNION ALL + ( SELECT name, type, line, UPPER(text) + FROM user_source + WHERE (name, type) IN ( + select object_name, object_type + from user_objects@remote_schema_link + ) + MINUS + SELECT name, type, line, UPPER(text) + FROM user_source@remote_schema_link + ) + ) +GROUP BY name, type +ORDER BY name, type; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| TRIGGER DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + + +PROMPT +PROMPT ======================================================== +PROMPT Trigger discrepancies +PROMPT ======================================================== + +SET FEEDBACK OFF + +TRUNCATE TABLE schema_compare_temp +/ + +DECLARE + + CURSOR c1 IS + SELECT trigger_name, trigger_body + FROM user_triggers; + + CURSOR c2 IS + SELECT trigger_name, trigger_body + FROM user_triggers@remote_schema_link; + + v_trigger_name VARCHAR2(30); + v_trigger_body VARCHAR2(32767); + v_hash_value NUMBER; +BEGIN + + OPEN c1; + LOOP + FETCH c1 INTO v_trigger_name, v_trigger_body; + EXIT WHEN c1%NOTFOUND; + v_trigger_body := REPLACE(v_trigger_body, ' ', NULL); + v_trigger_body := REPLACE(v_trigger_body, CHR(9), NULL); + v_trigger_body := REPLACE(v_trigger_body, CHR(10), NULL); + v_trigger_body := REPLACE(v_trigger_body, CHR(13), NULL); + v_trigger_body := UPPER(v_trigger_body); + v_hash_value := dbms_utility.get_hash_value(v_trigger_body, 1, 65536); + INSERT INTO schema_compare_temp ( + database, object_name, hash_value + ) VALUES ( + 1, v_trigger_name, v_hash_value + ); + END LOOP; + CLOSE c1; + + OPEN c2; + LOOP + FETCH c2 INTO v_trigger_name, v_trigger_body; + EXIT WHEN c2%NOTFOUND; + v_trigger_body := REPLACE(v_trigger_body, ' ', NULL); + v_trigger_body := REPLACE(v_trigger_body, CHR(9), NULL); + v_trigger_body := REPLACE(v_trigger_body, CHR(10), NULL); + v_trigger_body := REPLACE(v_trigger_body, CHR(13), NULL); + v_trigger_body := UPPER(v_trigger_body); + v_hash_value := dbms_utility.get_hash_value(v_trigger_body, 1, 65536); + INSERT INTO schema_compare_temp ( + database, object_name, hash_value + ) VALUES ( + 2, v_trigger_name, v_hash_value + ); + END LOOP; + CLOSE c2; + +END; +/ + +SET FEEDBACK ON + +COLUMN trigger_name FORMAT a20 HEADING 'Trigger|Name' +COLUMN schema FORMAT a7 HEADING 'Schema' +COLUMN trigger_type FORMAT a16 HEADING 'Trigger|Type' +COLUMN triggering_event FORMAT a20 HEADING 'Triggering|Event' +COLUMN table_name FORMAT a15 HEADING 'Table|Name' +COLUMN referencing_names FORMAT a20 HEADING 'Referencing|Names' +COLUMN when_clause FORMAT a20 HEADING 'When|Clause' +COLUMN status FORMAT a9 HEADING 'Status' +COLUMN hash_value HEADING 'Hash Value' + +( SELECT + a.trigger_name + , 'Local' schema + , a.trigger_type + , SUBSTR(a.triggering_event, 1, 20) triggering_event + , a.table_name + , SUBSTR(a.referencing_names, 1, 20) referencing_names + , SUBSTR(a.when_clause, 1, 20) when_clause + , a.status + , b.hash_value + FROM + user_triggers a + , schema_compare_temp b + WHERE + b.object_name(+) = a.trigger_name + AND b.database(+) = 1 + AND a.table_name IN ( + select table_name + from user_tables@remote_schema_link + ) + MINUS + SELECT + a.trigger_name + , 'Local' schema + , a.trigger_type + , SUBSTR(a.triggering_event, 1, 20) triggering_event + , a.table_name + , SUBSTR(a.referencing_names, 1, 20) referencing_names + , SUBSTR(a.when_clause, 1, 20) when_clause + , a.status + , b.hash_value + FROM + user_triggers@remote_schema_link a + , schema_compare_temp b + WHERE + b.object_name(+) = a.trigger_name + AND b.database(+) = 2 +) +UNION ALL +( + SELECT + a.trigger_name + , 'Remote' schema + , a.trigger_type + , SUBSTR(a.triggering_event, 1, 20) triggering_event + , a.table_name + , SUBSTR(a.referencing_names, 1, 20) referencing_names + , SUBSTR(a.when_clause, 1, 20) when_clause + , a.status + , b.hash_value + FROM + user_triggers@remote_schema_link a + , schema_compare_temp b + WHERE + b.object_name(+) = a.trigger_name + AND b.database(+) = 2 + AND a.table_name IN ( + select table_name + from user_tables + ) + MINUS + SELECT + a.trigger_name + , 'Remote' schema + , a.trigger_type + , SUBSTR(a.triggering_event, 1, 20) triggering_event + , a.table_name + , SUBSTR(a.referencing_names, 1, 20) referencing_names + , SUBSTR(a.when_clause, 1, 20) when_clause + , a.status + , b.hash_value + FROM + user_triggers a + , schema_compare_temp b + WHERE + b.object_name(+) = a.trigger_name + AND b.database(+) = 1 +) +ORDER BY 1, 2, 5, 3; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| VIEW DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + +prompt +prompt ======================================================== +prompt View discrepancies for views that exist in both +prompt schemas +prompt ======================================================== + +SET FEEDBACK OFF +SET LONG 32767 + +TRUNCATE TABLE schema_compare_temp +/ + +CREATE OR REPLACE FUNCTION getLongText ( p_tname IN VARCHAR2 + , p_cname IN VARCHAR2 + , p_vname IN VARCHAR2) RETURN VARCHAR2 + AS + l_sql VARCHAR2(4000); + l_cursor INTEGER DEFAULT dbms_sql.open_cursor; + l_n NUMBER; + l_long_val VARCHAR2(4000); + l_long_len NUMBER; + l_buflen NUMBER := 4000; + l_curpos NUMBER := 0; + BEGIN + l_sql := 'select ' || p_cname || ' from ' || p_tname || ' where UPPER(view_name) = UPPER(:view_name)'; + DBMS_SQL.PARSE( l_cursor + , l_sql + , DBMS_SQL.NATIVE); + DBMS_SQL.BIND_VARIABLE(l_cursor, ':view_name', p_vname); + DBMS_SQL.DEFINE_COLUMN_LONG(l_cursor, 1); + l_n := DBMS_SQL.EXECUTE(l_cursor); + + IF (DBMS_SQL.FETCH_ROWS(l_cursor) > 0) + THEN + DBMS_SQL.COLUMN_VALUE_LONG( l_cursor + , 1 + , l_buflen + , l_curpos + , l_long_val + , l_long_len); + END IF; + DBMS_SQL.CLOSE_CURSOR(l_cursor); + RETURN l_long_val; + END getLongText; +/ + +CREATE OR REPLACE FUNCTION getLongText2 ( p_tname IN VARCHAR2 + , p_cname IN VARCHAR2 + , p_vname IN VARCHAR2) RETURN VARCHAR2 + AS + l_sql VARCHAR2(4000); + l_cursor INTEGER DEFAULT dbms_sql.open_cursor; + l_n NUMBER; + l_long_val VARCHAR2(4000); + l_long_len NUMBER; + l_buflen NUMBER := 4000; + l_curpos NUMBER := 0; + BEGIN + l_sql := 'select ' || p_cname || ' from ' || p_tname || '@remote_schema_link where UPPER(view_name) = UPPER(:view_name)'; + DBMS_SQL.PARSE( l_cursor + , l_sql + , DBMS_SQL.NATIVE); + DBMS_SQL.BIND_VARIABLE(l_cursor, ':view_name', p_vname); + DBMS_SQL.DEFINE_COLUMN_LONG(l_cursor, 1); + l_n := DBMS_SQL.EXECUTE(l_cursor); + + IF (DBMS_SQL.FETCH_ROWS(l_cursor) > 0) + THEN + DBMS_SQL.COLUMN_VALUE_LONG( l_cursor + , 1 + , l_buflen + , l_curpos + , l_long_val + , l_long_len); + END IF; + DBMS_SQL.CLOSE_CURSOR(l_cursor); + RETURN l_long_val; + END getLongText2; +/ + +DECLARE + + CURSOR c1 IS + SELECT view_name, getLongText('USER_VIEWS', 'TEXT', view_name) + FROM user_views; + + CURSOR c2 IS + SELECT view_name, getLongText2('USER_VIEWS', 'TEXT', view_name) + FROM user_views@remote_schema_link; + + v_view_name VARCHAR2(30); + v_text VARCHAR2(32767); + v_hash_value NUMBER; + +BEGIN + + OPEN c1; + LOOP + FETCH c1 INTO v_view_name, v_text; + EXIT WHEN c1%NOTFOUND; + v_hash_value := dbms_utility.get_hash_value(v_text, 1, 65536); + INSERT INTO schema_compare_temp ( + database, object_name, object_text, hash_value + ) VALUES ( + 1, v_view_name, '[' || v_text || ']', v_hash_value + ); + END LOOP; + CLOSE c1; + + OPEN c2; + LOOP + FETCH c2 INTO v_view_name, v_text; + EXIT WHEN c2%NOTFOUND; + v_hash_value := dbms_utility.get_hash_value(v_text, 1, 65536); + INSERT INTO schema_compare_temp ( + database, object_name, object_text, hash_value + ) VALUES ( + 2, v_view_name, '[' || v_text || ']', v_hash_value + ); + END LOOP; + CLOSE c2; + +END; +/ + +SET FEEDBACK ON + +COLUMN view_name FORMAT a30 HEADING 'View|Name' +COLUMN schema FORMAT a7 HEADING 'Schema' +COLUMN hash_value HEADING 'Hash Value' + +( + SELECT + a.view_name + , 'Local' schema + , b.hash_value + FROM + user_views a + , schema_compare_temp b + WHERE + b.object_name(+) = a.view_name + AND b.database(+) = 1 + AND a.view_name IN ( + select view_name + from user_views@remote_schema_link + ) + MINUS + SELECT + a.view_name + , 'Local' schema + , b.hash_value + FROM + user_views@remote_schema_link a + , schema_compare_temp b + WHERE + b.object_name(+) = a.view_name + AND b.database(+) = 2 +) +UNION ALL +( + SELECT + a.view_name + , 'Remote' schema + , b.hash_value + FROM + user_views@remote_schema_link a + , schema_compare_temp b + WHERE + b.object_name(+) = a.view_name + AND b.database(+) = 2 + AND a.view_name IN ( + select view_name + from user_views + ) + MINUS + SELECT + a.view_name + , 'Remote' schema + , b.hash_value + FROM + user_views a + , schema_compare_temp b + WHERE + b.object_name(+) = a.view_name + AND b.database(+) = 1 +) +ORDER BY 1, 2; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| JOB QUEUE DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + +PROMPT +PROMPT ======================================================== +PROMPT Job queue discrepancies +PROMPT ======================================================== + +COLUMN what FORMAT a30 HEADING 'What' +COLUMN interval FORMAT a30 HEADING 'Interval' +COLUMN broken FORMAT a7 HEADING 'Broken?' + +( + SELECT + what + , interval + , broken + , 'Remote' schema + FROM + user_jobs@remote_schema_link + MINUS + SELECT + what + , interval + , broken + , 'Remote' schema + FROM + user_jobs +) +UNION ALL +( + SELECT + what + , interval + , broken + , 'Local' schema + FROM + user_jobs + MINUS + SELECT + what + , interval + , broken + , 'Local' schema + FROM + user_jobs@remote_schema_link +) +ORDER BY 1, 2, 3; + + +PROMPT +SET HEADING OFF +SET FEEDBACK OFF +SELECT '+----------------------------------------------------------------------+' || chr(10) || + '| DATABASE LINK DIFFERENCES |' || chr(10) || + '+----------------------------------------------------------------------+' +FROM dual; +SET HEADING ON +SET FEEDBACK ON + + +PROMPT +PROMPT ======================================================== +PROMPT Database link discrepancies +PROMPT ======================================================== + +COLUMN db_link FORMAT a30 HEADING 'DB Link Name' +COLUMN schema FORMAT a7 HEADING 'Schema' +COLUMN username FORMAT a20 HEADING 'User Name' +COLUMN host FORMAT a20 HEADING 'Host' + +( + SELECT + db_link + , 'Remote' schema + , username + , host + FROM + user_db_links@remote_schema_link + MINUS + SELECT + db_link + , 'Remote' schema + , username, host + FROM + user_db_links +) +UNION ALL +( + SELECT + db_link + , 'Local' schema + , username, host + FROM + user_db_links + WHERE + db_link NOT LIKE 'REMOTE_SCHEMA_LINK.%' + MINUS + SELECT + db_link + , 'Local' schema + , username + , host + FROM + user_db_links@remote_schema_link +) +ORDER BY 1, 2; + + +SPOOL OFF + +SET TERMOUT ON + +PROMPT +PROMPT ============= +PROMPT END OF REPORT +PROMPT ============= +PROMPT +PROMPT Report output written to &report_name +PROMPT ============================================================== + +SET FEEDBACK OFF + +DROP TABLE schema_compare_temp; +DROP DATABASE LINK remote_schema_link; +DROP FUNCTION getLongText; +DROP FUNCTION getLongText2; + +SET FEEDBACK 6 diff --git a/idev/dba_controlfile_records.sql b/idev/dba_controlfile_records.sql new file mode 100644 index 0000000..7d09c06 --- /dev/null +++ b/idev/dba_controlfile_records.sql @@ -0,0 +1,76 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_controlfile_records.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Query information information about the control file record | +-- | sections. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Control File Records | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN type FORMAT a30 HEADING "Record Section Type" +COLUMN record_size FORMAT 999,999 HEADING "Record Size|(in bytes)" +COLUMN records_total FORMAT 999,999 HEADING "Records Allocated" +COLUMN bytes_alloc FORMAT 999,999,999 HEADING "Bytes Allocated" +COLUMN records_used FORMAT 999,999 HEADING "Records Used" +COLUMN bytes_used FORMAT 999,999,999 HEADING "Bytes Used" +COLUMN pct_used FORMAT B999 HEADING "% Used" +COLUMN first_index HEADING "First Index" +COLUMN last_index HEADING "Last Index" +COLUMN last_recid HEADING "Last RecID" + +BREAK ON report + +COMPUTE sum OF records_total ON report +COMPUTE sum OF bytes_alloc ON report +COMPUTE sum OF records_used ON report +COMPUTE sum OF bytes_used ON report +COMPUTE avg OF pct_used ON report + +SELECT + type + , record_size + , records_total + , (records_total * record_size) bytes_alloc + , records_used + , (records_used * record_size) bytes_used + , NVL(records_used/records_total * 100, 0) pct_used + , first_index + , last_index + , last_recid +FROM v$controlfile_record_section +ORDER BY type +/ + diff --git a/idev/dba_controlfiles.sql b/idev/dba_controlfiles.sql new file mode 100644 index 0000000..2c26066 --- /dev/null +++ b/idev/dba_controlfiles.sql @@ -0,0 +1,51 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_controlfiles.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Query all control files from the database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Control Files | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN name FORMAT a85 HEADING "Controlfile Name" +COLUMN status HEADING "Status" + +SELECT + name + , LPAD(status, 7) status +FROM v$controlfile +ORDER BY name +/ + diff --git a/idev/dba_cr_init.sql b/idev/dba_cr_init.sql new file mode 100644 index 0000000..f9a892a --- /dev/null +++ b/idev/dba_cr_init.sql @@ -0,0 +1,82 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_cr_init.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : This script reads the database instance parameters and creates | +-- | an example init.ora file. This is often used when cloning a | +-- | database and need a fresh text init.ora file for the new | +-- | database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK OFF +SET HEADING OFF +SET LINESIZE 32767 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN oracle_sid NEW_VALUE xoracle_sid NOPRINT FORMAT a1 + +SELECT value oracle_sid +FROM v$parameter +WHERE name = 'instance_name' +/ + +spool init&xoracle_sid..ora.sample + +SELECT + '# +-------------------------------------------------------------------+' || chr(10) || + '# | FILE : init' || i.value || '.ora' || LPAD('|', 43-length(i.value), ' ') || chr(10) || + '# | CREATION DATE : ' || + to_char(sysdate, 'DD-MON-YYYY') || + ' |' || chr(10) || + '# | DATABASE NAME : ' || d.value || LPAD('|', 51-length(d.value), ' ') || chr(10) || + '# | INSTANCE NAME : ' || i.value || LPAD('|', 51-length(i.value), ' ') || chr(10) || + '# | SERVER NAME : ' || s.value || LPAD('|', 51-length(s.value), ' ') || chr(10) || + '# | GLOBAL NAME : ' || g.global_name|| LPAD('|', 51-length(g.global_name), ' ') || chr(10) || + '# +-------------------------------------------------------------------+' +FROM + v$parameter d + , v$parameter i + , v$parameter s + , global_name g +WHERE + d.name = 'db_name' + AND i.name = 'instance_name' + AND s.name = 'service_names'; + + +select + '# +---------------------+' || chr(10) || + '# | DATABASE PARAMETERS |' || chr(10) || + '# +---------------------+' +from dual; + +SELECT + DECODE(isdefault, 'TRUE', '# ') || + DECODE(isdefault, 'TRUE', RPAD(name,43), RPAD(name,45)) || + ' = ' || + value +FROM v$parameter +ORDER BY name; + +spool off + +SET FEEDBACK 6 +SET HEADING ON diff --git a/idev/dba_db_growth.sql b/idev/dba_db_growth.sql new file mode 100644 index 0000000..d88ad4c --- /dev/null +++ b/idev/dba_db_growth.sql @@ -0,0 +1,60 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_db_growth.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provides a report on physical database growth with respect to | +-- | the date that data files have been added. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Database Growth | +PROMPT | Instance : ¤t_instance | +PROMPT | Note : This script only tracks when a new data file was added to | +PROMPT | the database. Any data file that was manually increased or | +PROMPT | decreased in size or automatically increased using the | +PROMPT | AUTOEXTEND option is not tracked by this script. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN month FORMAT a7 HEADING 'Month' +COLUMN growth FORMAT 999,999,999,999,999 HEADING 'Growth (Bytes)' + +BREAK ON report + +COMPUTE sum OF growth ON report + +SELECT + TO_CHAR(creation_time, 'RRRR-MM') month + , SUM(bytes) growth +FROM sys.v_$datafile +GROUP BY TO_CHAR(creation_time, 'RRRR-MM') +ORDER BY TO_CHAR(creation_time, 'RRRR-MM'); + diff --git a/idev/dba_directories.sql b/idev/dba_directories.sql new file mode 100644 index 0000000..693ba49 --- /dev/null +++ b/idev/dba_directories.sql @@ -0,0 +1,54 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_directories.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provides a summary report of all Oracle Directory objects. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Oracle Directories | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT a10 HEADING 'Owner' +COLUMN directory_name FORMAT a30 HEADING 'Directory Name' +COLUMN directory_path FORMAT a85 HEADING 'Directory Path' + +SELECT + owner + , directory_name + , directory_path +FROM + dba_directories +ORDER BY + owner + , directory_name; diff --git a/idev/dba_errors.sql b/idev/dba_errors.sql new file mode 100644 index 0000000..13389ab --- /dev/null +++ b/idev/dba_errors.sql @@ -0,0 +1,63 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_errors.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Report on all procedural (PL/SQL, Views, Triggers, etc.) errors.| +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : All Procedural (PL/SQL, Views, Triggers, etc.) Errors | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN type FORMAT a15 HEAD 'Object Type' +COLUMN owner FORMAT a17 HEAD 'Schema' +COLUMN name FORMAT a30 HEAD 'Object Name' +COLUMN sequence FORMAT 999,999 HEAD 'Sequence' +COLUMN line FORMAT 999,999 HEAD 'Line' +COLUMN position FORMAT 999,999 HEAD 'Position' +COLUMN text HEAD 'Text' + +SELECT + type + , owner + , name + , sequence + , line + , position + , text || chr(10) || chr(10) text +FROM + dba_errors +ORDER BY + 1, 2, 3 +/ + diff --git a/idev/dba_file_space_usage.sql b/idev/dba_file_space_usage.sql new file mode 100644 index 0000000..395b273 --- /dev/null +++ b/idev/dba_file_space_usage.sql @@ -0,0 +1,88 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_file_space_usage.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all data file usage. This script was designed to | +-- | work with Oracle8i or higher. It will include true TEMPORARY | +-- | tablespaces. (i.e. use of "tempfiles") | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : File Usage | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN tablespace FORMAT a18 HEADING 'Tablespace Name' +COLUMN filename FORMAT a75 HEADING 'Filename' +COLUMN filesize FORMAT 9,999,999,999,999 HEADING 'File Size' +COLUMN used FORMAT 9,999,999,999,999 HEADING 'Used (in bytes)' +COLUMN pct_used FORMAT 999 HEADING 'Pct. Used' + +BREAK ON report + +COMPUTE sum OF filesize ON report +COMPUTE sum OF used ON report +COMPUTE avg OF pct_used ON report + +SELECT /*+ ordered */ + d.tablespace_name tablespace + , d.file_name filename + , d.file_id file_id + , d.bytes filesize + , NVL((d.bytes - s.bytes), d.bytes) used + , TRUNC(((NVL((d.bytes - s.bytes) , d.bytes)) / d.bytes) * 100) pct_used +FROM + sys.dba_data_files d + , v$datafile v + , ( select file_id, SUM(bytes) bytes + from sys.dba_free_space + GROUP BY file_id) s +WHERE + (s.file_id (+)= d.file_id) + AND (d.file_name = v.name) +UNION +SELECT + d.tablespace_name tablespace + , d.file_name filename + , d.file_id file_id + , d.bytes filesize + , NVL(t.bytes_cached, 0) used + , TRUNC((t.bytes_cached / d.bytes) * 100) pct_used +FROM + sys.dba_temp_files d + , v$temp_extent_pool t + , v$tempfile v +WHERE + (t.file_id (+)= d.file_id) + AND (d.file_id = v.file#) +/ + diff --git a/idev/dba_file_space_usage_7.sql b/idev/dba_file_space_usage_7.sql new file mode 100644 index 0000000..262f924 --- /dev/null +++ b/idev/dba_file_space_usage_7.sql @@ -0,0 +1,95 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_file_space_usage_7.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all data file usage. This script was designed to | +-- | work with Oracle7 and Oracle8. This script can be run against | +-- | higher database versions (i.e. Oracle8i) but will not return | +-- | information about true TEMPORARY tablespaces. (i.e. use of | +-- | "tempfiles") | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : File Usage | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN bs NEW_VALUE xbs NOPRINT FORMAT a1 + +COLUMN tablespace FORMAT a30 HEADING 'Tablespace Name' +COLUMN filename FORMAT a55 HEADING 'Filename' +COLUMN filesize FORMAT 9,999,999,999,999 HEADING 'File Size' +COLUMN used FORMAT 9,999,999,999,999 HEADING 'Used (in bytes)' +COLUMN free FORMAT 9,999,999,999,999 HEADING 'Free (in bytes)' +COLUMN pct_used FORMAT 999 HEADING 'Pct. Used' + +SET TERMOUT OFF +SELECT value bs FROM v$parameter WHERE name = 'db_block_size'; +SET TERMOUT ON + +BREAK ON report + +COMPUTE avg OF pct_used ON report +COMPUTE sum OF filesize ON report +COMPUTE sum OF used ON report +COMPUTE sum OF free ON report + +SELECT + DECODE(x.online$, + 1,x.name, + 65537, substr(rpad(x.name,9),1,9)||' (TEMP)', + substr(rpad(x.name,9),1,9)||' (OFF)') tablespace + , a.file_name filename + , ROUND(f.blocks*&xbs) filesize + , NVL(ROUND(SUM(s.length*&xbs),1),0) used + , ROUND(((f.blocks*&xbs)) - nvl(sum(s.length*&xbs),0), 1) free + , NVL(TRUNC(ROUND(SUM(s.length*&xbs) / (f.blocks*&xbs) * 100, 1)),0) pct_used +FROM + sys.dba_data_files A + , sys.uet$ s + , sys.file$ f + , sys.ts$ x +WHERE + x.ts# = f.ts# + AND x.online$ IN (1,2,65537) + AND f.status$ = 2 + AND f.ts# = s.ts# (+) + AND f.file# = s.file# (+) + AND f.file# = a.file_id +GROUP BY + x.name + , x.online$ + , f.blocks + , A.file_name + , a.file_id +/ + diff --git a/idev/dba_file_use.sql b/idev/dba_file_use.sql new file mode 100644 index 0000000..8da1008 --- /dev/null +++ b/idev/dba_file_use.sql @@ -0,0 +1,181 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_file_use.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all datafiles/controlfiles/redo log files. This | +-- | script was designed to work with Oracle8i or higher. It will | +-- | include true TEMPORARY tablespaces. (i.e. use of "tempfiles") | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : File Usage | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN db NEW_VALUE xdb NOPRINT FORMAT a1 + +COLUMN type FORMAT a8 HEADING 'Type' +COLUMN tablespace FORMAT a30 HEADING 'Tablspace' +COLUMN filename FORMAT a75 HEADING 'Filename' +COLUMN filesize FORMAT 9,999,999,999,999 HEADING 'File Size' +COLUMN stat FORMAT a10 HEADING 'Status' +COLUMN seq FORMAT 9999999 HEADING 'Sequence' +COLUMN arc FORMAT a4 HEADING 'Archived' + +SET TERMOUT OFF +SELECT name db +FROM v$database; +SET TERMOUT ON + +SELECT + 'Data' type + , tablespace_name tablespace + , REPLACE(file_name,'?','&xdb') filename + , bytes filesize + , DECODE(status,'AVAILABLE','Available','INVALID','Invalid','****') stat + , 0 seq + , '' arc +FROM dba_data_files +UNION +SELECT + 'Redo' + , 'Grp ' || a.group# + , member + , bytes + , DECODE(b.status,'CURRENT','Current','INACTIVE','Inactive','UNUSED','Unused','****') + , sequence# + , archived +FROM + v$logfile a + , v$log b +WHERE + a.group# = b.group# +UNION +SELECT + 'Parm' + , 'Ctrl 1' + , REPLACE(NVL(LTRIM(SUBSTR(value,1,instr(value||',',',',1,1)-1)),' (none)'), + '?','&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'control_files' +UNION +SELECT + 'Parm' + , 'Ctrl 2' + , REPLACE(nvl(ltrim(substr(value,instr(value||',',',',1,1)+1, + instr(value||',',',',1,2)-instr(value||',',',',1,1)-1)),' (none)'), + '?' ,'&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'control_files' +UNION +SELECT + 'Parm' + , 'Ctrl 3' + , REPLACE(nvl(ltrim(substr(value,instr(value||',',',',1,2)+1, + instr(value||',',',',1,3)-instr(value||',',',',1,2)-1)),' (none)'), + '?','&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'control_files' +UNION +SELECT + 'Parm' + , 'Ctrl 4' + , REPLACE(nvl(ltrim(substr(value,instr(value||',',',',1,3)+1, + instr(value||',',',',1,4)-instr(value||',',',',1,3)-1)),' (none)'), + '?','&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'control_files' +UNION +SELECT + 'Parm' + , 'Ifile' + , REPLACE(value,'?','&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'ifile' +UNION +SELECT + 'Parm' + , 'Archive' + , DECODE(d.log_mode, 'ARCHIVELOG', + REPLACE(p.value,'?','&xdb') || ' - ENABLED', + REPLACE(p.value,'?','&xdb') || ' - Disabled') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter p + , v$database d +WHERE + p.name = 'log_archive_dest' +UNION +SELECT + 'Tempfile' type + , tablespace_name + , REPLACE(file_name,'?','$input{Oracle_SID_Name}') tempfile_name + , bytes + , DECODE(status,'AVAILABLE','Available','INVALID','Invalid','****') stat + , 0 + , '' +FROM dba_temp_files +ORDER BY 1,2,3 +/ diff --git a/idev/dba_file_use_7.sql b/idev/dba_file_use_7.sql new file mode 100644 index 0000000..35a6e77 --- /dev/null +++ b/idev/dba_file_use_7.sql @@ -0,0 +1,174 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_file_use_7.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all datafiles/controlfiles/redo log files. This | +-- | script was designed to work with Oracle7 and Oracle8. This | +-- | script can be run against higher database versions (i.e. | +-- | Oracle8i) but will not return information about true TEMPORARY | +-- | tablespaces. (i.e. use of "tempfiles") | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : File Usage | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN db NEW_VALUE xdb NOPRINT FORMAT a1 + +COLUMN type FORMAT a8 HEADING 'Type' +COLUMN tablespace FORMAT a30 HEADING 'Tablspace' +COLUMN filename FORMAT a55 HEADING 'Filename' +COLUMN filesize FORMAT 9,999,999,999,999 HEADING 'File Size' +COLUMN stat FORMAT a10 HEADING 'Status' +COLUMN seq FORMAT 9999 HEADING 'Sequence' +COLUMN arc FORMAT a4 HEADING 'Archived' + +SET TERMOUT OFF +SELECT name db +FROM v$database; +SET TERMOUT ON + +SELECT + 'Data' type + , tablespace_name tablespace + , REPLACE(file_name,'?','&xdb') filename + , bytes filesize + , DECODE(status,'AVAILABLE','Available','INVALID','Invalid','****') stat + , 0 seq + , '' arc +FROM dba_data_files +UNION +SELECT + 'Redo' + , 'Grp ' || a.group# + , member + , bytes + , DECODE(b.status,'CURRENT','Current','INACTIVE','Inactive','UNUSED','Unused','****') + , sequence# + , archived +FROM + v$logfile a + , v$log b +WHERE + a.group# = b.group# +UNION +SELECT + 'Parm' + , 'Ctrl 1' + , REPLACE(NVL(LTRIM(SUBSTR(value,1,instr(value||',',',',1,1)-1)),' (none)'), + '?','&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'control_files' +UNION +SELECT + 'Parm' + , 'Ctrl 2' + , REPLACE(nvl(ltrim(substr(value,instr(value||',',',',1,1)+1, + instr(value||',',',',1,2)-instr(value||',',',',1,1)-1)),' (none)'), + '?' ,'&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'control_files' +UNION +SELECT + 'Parm' + , 'Ctrl 3' + , REPLACE(nvl(ltrim(substr(value,instr(value||',',',',1,2)+1, + instr(value||',',',',1,3)-instr(value||',',',',1,2)-1)),' (none)'), + '?','&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'control_files' +UNION +SELECT + 'Parm' + , 'Ctrl 4' + , REPLACE(nvl(ltrim(substr(value,instr(value||',',',',1,3)+1, + instr(value||',',',',1,4)-instr(value||',',',',1,3)-1)),' (none)'), + '?','&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'control_files' +UNION +SELECT + 'Parm' + , 'Ifile' + , REPLACE(value,'?','&xdb') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter +WHERE + name = 'ifile' +UNION +SELECT + 'Parm' + , 'Archive' + , DECODE(d.log_mode, 'ARCHIVELOG', + REPLACE(p.value,'?','&xdb') || ' - ENABLED', + REPLACE(p.value,'?','&xdb') || ' - Disabled') file_name + , 0 + , '' + , 0 + , '' +FROM + v$parameter p + , v$database d +WHERE + p.name = 'log_archive_dest' +ORDER BY 1,2,3 +/ + diff --git a/idev/dba_files.sql b/idev/dba_files.sql new file mode 100644 index 0000000..7523720 --- /dev/null +++ b/idev/dba_files.sql @@ -0,0 +1,84 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_files.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all data files within each tablespaces. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Data File Report | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN tablespace FORMAT a30 HEADING 'Tablespace Name' +COLUMN filename FORMAT a75 HEADING 'Filename' +COLUMN filesize FORMAT 9,999,999,999,999 HEADING 'File Size' +COLUMN autoextensible FORMAT a4 HEADING 'Auto' +COLUMN increment_by FORMAT 999,999,999,999 HEADING 'Next' +COLUMN maxbytes FORMAT 999,999,999,999 HEADING 'Max' + +BREAK ON report + +COMPUTE sum OF filesize ON report + +SELECT /*+ ordered */ + d.tablespace_name tablespace + , d.file_name filename + , d.bytes filesize + , d.autoextensible autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_data_files d + , v$datafile v + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +WHERE + (d.file_name = v.name) +UNION +SELECT + d.tablespace_name tablespace + , d.file_name filename + , d.bytes filesize + , d.autoextensible autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_temp_files d + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +ORDER BY + 1 + , 2 +/ diff --git a/idev/dba_files_all.sql b/idev/dba_files_all.sql new file mode 100644 index 0000000..5de3980 --- /dev/null +++ b/idev/dba_files_all.sql @@ -0,0 +1,106 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_files_all.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all data files, online redo log files, and control | +-- | files within the database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Data File Report (all physical files) | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN tablespace FORMAT a30 HEADING 'Tablespace Name / File Class' +COLUMN filename FORMAT a75 HEADING 'Filename' +COLUMN filesize FORMAT 9,999,999,999,999 HEADING 'File Size' +COLUMN autoextensible FORMAT a4 HEADING 'Auto' +COLUMN increment_by FORMAT 999,999,999,999 HEADING 'Next' +COLUMN maxbytes FORMAT 999,999,999,999 HEADING 'Max' + +BREAK ON report + +COMPUTE sum OF filesize ON report + +SELECT /*+ ordered */ + d.tablespace_name tablespace + , d.file_name filename + , d.bytes filesize + , d.autoextensible autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_data_files d + , v$datafile v + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +WHERE + (d.file_name = v.name) +UNION +SELECT + d.tablespace_name tablespace + , d.file_name filename + , d.bytes filesize + , d.autoextensible autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_temp_files d + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +UNION +SELECT + '[ ONLINE REDO LOG ]' + , a.member + , b.bytes + , null + , TO_NUMBER(null) + , TO_NUMBER(null) +FROM + v$logfile a + , v$log b +WHERE + a.group# = b.group# +UNION +SELECT + '[ CONTROL FILE ]' + , a.name + , TO_NUMBER(null) + , null + , TO_NUMBER(null) + , TO_NUMBER(null) +FROM + v$controlfile a +ORDER BY 1,2 +/ diff --git a/idev/dba_free_space_frag.sql b/idev/dba_free_space_frag.sql new file mode 100644 index 0000000..5b0ad20 --- /dev/null +++ b/idev/dba_free_space_frag.sql @@ -0,0 +1,108 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_free_space_frag.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Report free space fragmentation. | +-- | !!! THIS SCRIPT MUST BE RUN AS THE SYS USER !!! | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CONNECT / AS SYSDBA + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Free Space Fragmentation Report | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +CREATE OR REPLACE VIEW free_space ( + tablespace + , pieces + , free_bytes + , free_blocks + , largest_bytes + , largest_blks + , fsfi + , data_file + , file_id + , total_blocks +) +AS +SELECT + a.tablespace_name + , COUNT(*) + , SUM(a.bytes) + , SUM(a.blocks) + , MAX(a.bytes) + , MAX(a.blocks) + , SQRT(MAX(a.blocks)/SUM(a.blocks))*(100/SQRT(SQRT(count(a.blocks)))) + , UPPER(b.file_name) + , MAX(a.file_id) + , MAX(b.blocks) +FROM + sys.dba_free_space a + , sys.dba_data_files b +WHERE + a.file_id = b.file_id +GROUP BY + a.tablespace_name, b.file_name +/ + +CLEAR COLUMNS + +SET ECHO OFF +SET FEEDBACK OFF +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +BREAK ON tablespace SKIP 2 ON REPORT + +COMPUTE SUM OF total_blocks ON tablespace +COMPUTE SUM OF free_blocks ON tablespace +COMPUTE SUM OF free_blocks ON report +COMPUTE SUM OF total_blocks ON report + +COLUMN tablespace HEADING "Tablespace" FORMAT a30 +COLUMN file_id HEADING File# FORMAT 99999 +COLUMN pieces HEADING Frag FORMAT 9999 +COLUMN free_bytes HEADING 'Free Byte' +COLUMN free_blocks HEADING 'Free Blk' FORMAT 999,999,999 +COLUMN largest_bytes HEADING 'Biggest Bytes' +COLUMN largest_blks HEADING 'Biggest Blks' FORMAT 999,999,999 +COLUMN data_file HEADING 'File Name' FORMAT a75 +COLUMN total_blocks HEADING 'Total Blocks' FORMAT 999,999,999 + +SELECT + tablespace + , data_file + , pieces + , free_blocks + , largest_blks + , file_id + , total_blocks +FROM + free_space +/ + + +DROP VIEW free_space +/ + diff --git a/idev/dba_highwater_mark.sql b/idev/dba_highwater_mark.sql new file mode 100644 index 0000000..dbb4e9c --- /dev/null +++ b/idev/dba_highwater_mark.sql @@ -0,0 +1,175 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_highwater_mark.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Determine the highwater mark of a given table. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +analyze table &owner.&table_name compute statistics +/ + +SELECT + blocks +FROM + dba_segments +WHERE + owner = '&&owner' + AND segment_name = '&&table_name' +/ + +SELECT + empty_blocks +FROM + dba_tables +WHERE + owner = '&&owner' + AND table_name = '&&table_name' +/ + +HIGHWATER_MARK = dba_segments.blocks - dba_tables.empty_blocks - 1 + + +---------------------------------------------------------------- + +What is the High Water Mark? +---------------------------- +All Oracle segments have an upper boundary containing the data within +the segment. This upper boundary is called the "high water mark" or HWM. +The high water mark is an indicator that marks blocks that are allocated +to a segment, but are not used yet. This high water mark typically bumps +up at 5 data blocks at a time. It is reset to "zero" (position to the start +of the segment) when a TRUNCATE command is issued. So you can have empty +blocks below the high water mark, but that means that the block has been +used (and is probably empty caused by deletes). Oracle does not move the +HWM, nor does it *shrink* tables, as a result of deletes. This is also +true of Oracle8. Full table scans typically read up to the high water mark. + +Data files do not have a high water mark; only segments do have them. + +How to determine the high water mark +------------------------------------ +To view the high water mark of a particular table:: + + ANALYZE TABLE ESTIMATE/COMPUTE STATISTICS; + +This will update the table statistics. After generating the statistics, +to determine the high water mark: + +SELECT blocks, empty_blocks, num_rows +FROM user_tables +WHERE table_name = ; + +BLOCKS represents the number of blocks 'ever' used by the segment. +EMPTY_BLOCKS represents only the number of blocks above the 'HIGH WATER MARK' +. +Deleting records doesn't lower the high water mark. Therefore, deleting +records doesn't raise the EMPTY_BLOCKS figure. + +Let us take the following example based on table BIG_EMP1 which +has 28672 rows (Oracle 8.0.6): + +SQL> connect system/manager +Connected. + +SQL> SELECT segment_name,segment_type,blocks + 2> FROM dba_segments + 3> WHERE segment_name='BIG_EMP1'; +SEGMENT_NAME SEGMENT_TYPE BLOCKS EXTENTS +----------------------------- ----------------- ---------- ------- +BIG_EMP1 TABLE 1024 2 +1 row selected. + +SQL> connect scott/tiger + +SQL> ANALYZE TABLE big_emp1 ESTIMATE STATISTICS; +Statement processed. + +SQL> SELECT table_name,num_rows,blocks,empty_blocks + 2> FROM user_tables + 3> WHERE table_name='BIG_EMP1'; +TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS +------------------------------ ---------- ---------- ------------ +BIG_EMP1 28672 700 323 +1 row selected. + +Note: BLOCKS + EMPTY_BLOCKS (700+323=1023) is one block less than +DBA_SEGMENTS.BLOCKS. This is because one block is reserved for the +segment header. DBA_SEGMENTS.BLOCKS holds the total number of blocks +allocated to the table. USER_TABLES.BLOCKS holds the total number of +blocks allocated for data. + +SQL> SELECT COUNT (DISTINCT + 2> DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)|| + 3> DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) "Used" + 4> FROM big_emp1; +Used +---------- + 700 +1 row selected. + +SQL> DELETE from big_emp1; +28672 rows processed. + +SQL> commit; +Statement processed. + +SQL> ANALYZE TABLE big_emp1 ESTIMATE STATISTICS; +Statement processed. + +SQL> SELECT table_name,num_rows,blocks,empty_blocks + 2> FROM user_tables + 3> WHERE table_name='BIG_EMP1'; +TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS +------------------------------ ---------- ---------- ------------ +BIG_EMP1 0 700 323 +1 row selected. + +SQL> SELECT COUNT (DISTINCT + 2> DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)|| + 3> DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) "Used" + 4> FROM big_emp1; +Used +---------- + 0 +1 row selected. + +SQL> TRUNCATE TABLE big_emp1; +Statement processed. + +SQL> ANALYZE TABLE big_emp1 ESTIMATE STATISTICS; +Statement processed. + +SQL> SELECT table_name,num_rows,blocks,empty_blocks + 2> FROM user_tables + 3> WHERE table_name='BIG_EMP1'; +TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS +------------------------------ ---------- ---------- ------------ +BIG_EMP1 0 0 511 +1 row selected. + +SQL> connect system/manager +Connected. + +SQL> SELECT segment_name,segment_type,blocks + 2> FROM dba_segments + 3> WHERE segment_name='BIG_EMP1'; +SEGMENT_NAME SEGMENT_TYPE BLOCKS EXTENTS +----------------------------- ----------------- ---------- ------- +BIG_EMP1 TABLE 512 1 +1 row selected. + +NOTE: +---- + TRUNCATE has also deallocated the space from the deleted rows. + To retain the space from the deleted rows allocated to the table use: + + SQL> TRUNCATE TABLE big_emp1 REUSE STORAGE + diff --git a/idev/dba_index_fragmentation.sql b/idev/dba_index_fragmentation.sql new file mode 100644 index 0000000..f94f278 --- /dev/null +++ b/idev/dba_index_fragmentation.sql @@ -0,0 +1,62 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_index_fragmentation.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : To ascertain index fragmentation. As a rule of thumb if 10-15% | +-- | of the table data changes, then you should consider rebuilding | +-- | the index. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK OFF +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Calculate Index Fragmentation for a Specified Index | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT index_name CHAR prompt 'Enter index name [SCHEMA].index_name : ' + +ANALYZE INDEX &index_name VALIDATE STRUCTURE; + +COLUMN name HEADING 'Index Name' FORMAT a30 +COLUMN del_lf_rows HEADING 'Deleted|Leaf Rows' FORMAT 999,999,999,999,999 +COLUMN lf_rows_used HEADING 'Used|Leaf Rows' FORMAT 999,999,999,999,999 +COLUMN ibadness HEADING '% Deleted|Leaf Rows' FORMAT 999.99999 + +SELECT + name + , del_lf_rows + , lf_rows - del_lf_rows lf_rows_used + , TO_CHAR( del_lf_rows /(DECODE(lf_rows,0,0.01,lf_rows))*100,'999.99999') ibadness +FROM index_stats +/ + +PROMPT +PROMPT Consider rebuilding any index if % of Deleted Leaf Rows is > 20% +PROMPT + +UNDEFINE index_name + +SET FEEDBACK 6 diff --git a/idev/dba_index_schema_fragmentation_report.sql b/idev/dba_index_schema_fragmentation_report.sql new file mode 100644 index 0000000..be28fa1 --- /dev/null +++ b/idev/dba_index_schema_fragmentation_report.sql @@ -0,0 +1,108 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_index_schema_fragmentation_report.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Rebuilds an index to determine how fragmented it is. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Index Fragmentation Report for a Specified Schema | +PROMPT |------------------------------------------------------------------------| +PROMPT | Rebuild the index when: | +PROMPT | [*] deleted entries represent 20% or more of the current entries | +PROMPT | [*] the index depth is more then 4 levels | +PROMPT | | +PROMPT | Possible candidate for bitmap index: | +PROMPT | [*] when distinctiveness is more than 99% | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT schema CHAR prompt 'Schema name (% allowed) : ' +PROMPT + +SPOOL index_schema_fragmentation_report_&schema..lst + +SET SERVEROUTPUT ON + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +DECLARE + + c_name INTEGER; + ignore INTEGER; + height index_stats.height%TYPE := 0; + lf_rows index_stats.lf_rows%TYPE := 0; + del_lf_rows index_stats.del_lf_rows%TYPE := 0; + distinct_keys index_stats.distinct_keys%TYPE := 0; + + CURSOR c_indx IS + SELECT owner, table_name, index_name + FROM dba_indexes + WHERE owner LIKE upper('&schema') + AND owner NOT IN ('SYS','SYSTEM'); + +BEGIN + dbms_output.enable (1000000); + dbms_output.put_line ('Owner Index Name % Deleted Entries Blevel Distinctiveness'); + dbms_output.put_line ('--------------- --------------------------------------- ----------------- ------ ---------------'); + + c_name := DBMS_SQL.OPEN_CURSOR; + + FOR r_indx in c_indx LOOP + DBMS_SQL.PARSE(c_name,'analyze index ' || r_indx.owner || '.' || r_indx.index_name || ' validate structure', DBMS_SQL.NATIVE); + ignore := DBMS_SQL.EXECUTE(c_name); + + SELECT + height + , DECODE (lf_rows, 0, 1, lf_rows) + , del_lf_rows + , DECODE (distinct_keys, 0, 1, distinct_keys) + INTO + height + , lf_rows + , del_lf_rows + , distinct_keys + FROM index_stats; + + -- + -- Index is considered as candidate for rebuild when : + -- - when deleted entries represent 20% or more of the current entries + -- - when the index depth is more then 4 levels.(height starts counting from 1 so > 5) + -- Index is (possible) candidate for a bitmap index when : + -- - distinctiveness is more than 99% + -- + IF ( height > 5 ) OR ( (del_lf_rows/lf_rows) > 0.2 ) THEN + dbms_output.put_line ( RPAD(r_indx.owner, 16, ' ') + || RPAD(r_indx.index_name, 40, ' ') + || LPAD(ROUND((del_lf_rows/lf_rows)*100,3),17,' ') + || LPAD(height-1,7,' ') + || LPAD(ROUND((lf_rows-distinct_keys)*100/lf_rows,3),16,' ')); + END IF; + + END LOOP; + DBMS_SQL.CLOSE_CURSOR(c_name); +END; +/ + +SPOOL OFF + +PROMPT Report written to index_schema_fragmentation_report_&schema..lst +PROMPT \ No newline at end of file diff --git a/idev/dba_index_stats.sql b/idev/dba_index_stats.sql new file mode 100644 index 0000000..9e830ae --- /dev/null +++ b/idev/dba_index_stats.sql @@ -0,0 +1,92 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_index_stats.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Report index statistics. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK OFF +SET HEADING OFF +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Calculate Index Statistics for a Specified Index | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT index_name CHAR prompt 'Enter index name [SCHEMA].index_name : ' + +COLUMN name newline +COLUMN headsep newline +COLUMN height newline +COLUMN blocks newline +COLUMN lf_rows newline +COLUMN lf_blks newline +COLUMN lf_rows_len newline +COLUMN lf_blk_len newline +COLUMN br_rows newline +COLUMN br_blks newline +COLUMN br_rows_len newline +COLUMN br_blk_len newline +COLUMN del_lf_rows newline +COLUMN del_lf_rows_len newline +COLUMN distinct_keys newline +COLUMN most_repeated_key newline +COLUMN btree_space newline +COLUMN used_space newline +COLUMN pct_used newline +COLUMN rows_per_key newline +COLUMN blks_gets_per_access newline + +ANALYZE INDEX &index_name VALIDATE STRUCTURE; + +SELECT + name + , '----------------------------------------------------------------------------' headsep + , 'height ' ||to_char(height, '999,999,990') height + , 'blocks ' ||to_char(blocks, '999,999,990') blocks + , 'del_lf_rows ' ||to_char(del_lf_rows,'999,999,990') del_lf_rows + , 'del_lf_rows_len ' ||to_char(del_lf_rows_len,'999,999,990') del_lf_rows_len + , 'distinct_keys ' ||to_char(distinct_keys,'999,999,990') distinct_keys + , 'most_repeated_key ' ||to_char(most_repeated_key,'999,999,990') most_repeated_key + , 'btree_space ' ||to_char(btree_space,'999,999,990') btree_space + , 'used_space ' ||to_char(used_space,'999,999,990') used_space + , 'pct_used ' ||to_char(pct_used,'990') pct_used + , 'rows_per_key ' ||to_char(rows_per_key,'999,999,990') rows_per_key + , 'blks_gets_per_access ' ||to_char(blks_gets_per_access,'999,999,990') blks_gets_per_access + , 'lf_rows ' ||to_char(lf_rows, '999,999,990') || ' ' || + + 'br_rows ' ||to_char(br_rows, '999,999,990') br_rows + , 'lf_blks ' ||to_char(lf_blks, '999,999,990') || ' ' || + + 'br_blks ' ||to_char(br_blks, '999,999,990') br_blks + , 'lf_rows_len ' ||to_char(lf_rows_len,'999,999,990') || ' ' || + + 'br_rows_len ' ||to_char(br_rows_len,'999,999,990') br_rows_len + , 'lf_blk_len ' ||to_char(lf_blk_len, '999,999,990') || ' ' || + + 'br_blk_len ' ||to_char(br_blk_len, '999,999,990') br_blk_len +FROM + index_stats +/ + +UNDEFINE index_name + +SET FEEDBACK 6 +SET HEADING ON diff --git a/idev/dba_invalid_objects.sql b/idev/dba_invalid_objects.sql new file mode 100644 index 0000000..0d08b51 --- /dev/null +++ b/idev/dba_invalid_objects.sql @@ -0,0 +1,63 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_invalid_objects.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provide a detailed report of all invalid objects in the | +-- | database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Invalid Objects | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT a25 HEADING 'Owner' +COLUMN object_name FORMAT a30 HEADING 'Object Name' +COLUMN object_type FORMAT a20 HEADING 'Object Type' +COLUMN status FORMAT a10 HEADING 'Status' + +BREAK ON owner SKIP 2 ON report + +COMPUTE count LABEL "" OF object_name ON owner +COMPUTE count LABEL "Grand Total: " OF object_name ON report + +SELECT + owner + , object_name + , object_type + , status +FROM dba_objects +WHERE status <> 'VALID' +ORDER BY owner, object_name +/ + + diff --git a/idev/dba_invalid_objects_summary.sql b/idev/dba_invalid_objects_summary.sql new file mode 100644 index 0000000..48f44b3 --- /dev/null +++ b/idev/dba_invalid_objects_summary.sql @@ -0,0 +1,62 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_invalid_objects_summary.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provides a summary report of all invalid objects in the | +-- | database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Invalid Objects Summary | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT a25 HEADING 'Owner' +COLUMN object_name FORMAT a30 HEADING 'Object Name' +COLUMN object_type FORMAT a20 HEADING 'Object Type' +COLUMN count FORMAT 999,999,999 HEADING 'Count' + +BREAK ON owner SKIP 2 ON REPORT + +COMPUTE sum LABEL "Count: " OF count ON owner +COMPUTE sum LABEL "Grand Total: " OF count ON report + +SELECT + owner + , object_type + , count(*) Count +FROM dba_objects +WHERE status <> 'VALID' +GROUP BY owner, object_type +/ + + diff --git a/idev/dba_jobs.sql b/idev/dba_jobs.sql new file mode 100644 index 0000000..ce321b1 --- /dev/null +++ b/idev/dba_jobs.sql @@ -0,0 +1,61 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_jobs.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provides summary report on all registered and scheduled jobs. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Oracle Jobs | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN job FORMAT 9999999 HEADING 'Job ID' +COLUMN username FORMAT a20 HEADING 'User' +COLUMN what FORMAT a30 HEADING 'What' +COLUMN next_date HEADING 'Next Run Date' +COLUMN interval FORMAT a30 HEADING 'Interval' +COLUMN last_date HEADING 'Last Run Date' +COLUMN failures HEADING 'Failures' +COLUMN broken FORMAT a7 HEADING 'Broken?' + +SELECT + job + , log_user username + , what + , TO_CHAR(next_date, 'DD-MON-YYYY HH24:MI:SS') next_date + , interval + , TO_CHAR(last_date, 'DD-MON-YYYY HH24:MI:SS') last_date + , failures + , broken +FROM + dba_jobs; diff --git a/idev/dba_object_cache.sql b/idev/dba_object_cache.sql new file mode 100644 index 0000000..24f8a13 --- /dev/null +++ b/idev/dba_object_cache.sql @@ -0,0 +1,201 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_object_cache.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Summary of objects in the shared pool cache. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Summary of Objects in the Shared Pool Cache | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT OFF +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN inst_id HEAD "Inst.|ID" +COLUMN owner FORMAT a10 HEAD "Owner" +COLUMN name FORMAT a30 HEAD "Name" +COLUMN db_link FORMAT a7 HEAD "DB Link" +COLUMN namespace FORMAT a25 HEAD "Namespace" +COLUMN type FORMAT a18 HEAD "Type" +COLUMN sharable_mem FORMAT 99,999,999,999 HEAD "Sharable|Memory" +COLUMN loads HEAD "Loads" +COLUMN executions FORMAT 99,999,999 HEAD "Executions" +COLUMN locks HEAD "Locks" +COLUMN pins HEAD "Pins" +COLUMN kept FORMAT a5 HEAD "Kept?" +COLUMN child_latch HEAD "Child Latch" +COLUMN hash_value HEAD "Hash Value" +COLUMN address HEAD "Address" +COLUMN paddress HEAD "Paddress" +COLUMN crsr_plan_hash_value HEAD "Cursor Plan|Hash Value" +COLUMN kglobt02 HEAD "kglobt02" + +BREAK ON report + +COMPUTE sum OF sharable_mem ON report + +DEFINE spool_file=shared_pool_object_cache.lst + +SPOOL &spool_file + +SELECT + inst_id inst_id + , kglnaown owner + , kglnaobj name +-- , kglnadlk db_link + , DECODE( kglhdnsp + , 0 , 'CURSOR' + , 1 , 'TABLE/PROCEDURE' + , 2 , 'BODY' + , 3 , 'TRIGGER' + , 4 , 'INDEX' + , 5 , 'CLUSTER' + , 6 , 'OBJECT' + , 13, 'JAVA SOURCE' + , 14, 'JAVA RESOURCE' + , 15, 'REPLICATED TABLE OBJECT' + , 16, 'REPLICATION INTERNAL PACKAGE' + , 17, 'CONTEXT POLICY' + , 18, 'PUB_SUB' + , 19, 'SUMMARY' + , 20, 'DIMENSION' + , 21, 'APP CONTEXT' + , 22, 'STORED OUTLINE' + , 23, 'RULESET' + , 24, 'RSRC PLAN' + , 25, 'RSRC CONSUMER GROUP' + , 26, 'PENDING RSRC PLAN' + , 27, 'PENDING RSRC CONSUMER GROUP' + , 28, 'SUBSCRIPTION' + , 29, 'LOCATION' + , 30, 'REMOTE OBJECT' + , 31, 'SNAPSHOT METADATA' + , 32, 'JAVA SHARED DATA' + , 33, 'SECURITY PROFILE' + , 'INVALID NAMESPACE' + ) namespace + , DECODE ( BITAND(kglobflg, 3) + , 0, 'NOT LOADED' + , 2, 'NON-EXISTENT' + , 3, 'INVALID STATUS' + , DECODE ( kglobtyp + , 0 , 'CURSOR' + , 1 , 'INDEX' + , 2 , 'TABLE' + , 3 , 'CLUSTER' + , 4 , 'VIEW' + , 5 , 'SYNONYM' + , 6 , 'SEQUENCE' + , 7 , 'PROCEDURE' + , 8 , 'FUNCTION' + , 9 , 'PACKAGE' + , 10, 'NON-EXISTENT' + , 11, 'PACKAGE BODY' + , 12, 'TRIGGER' + , 13, 'TYPE' + , 14, 'TYPE BODY' + , 15, 'OBJECT' + , 16, 'USER' + , 17, 'DBLINK' + , 18, 'PIPE' + , 19, 'TABLE PARTITION' + , 20, 'INDEX PARTITION' + , 21, 'LOB' + , 22, 'LIBRARY' + , 23, 'DIRECTORY' + , 24, 'QUEUE' + , 25, 'INDEX-ORGANIZED TABLE' + , 26, 'REPLICATION OBJECT GROUP' + , 27, 'REPLICATION PROPAGATOR' + , 28, 'JAVA SOURCE' + , 29, 'JAVA CLASS' + , 30, 'JAVA RESOURCE' + , 31, 'JAVA JAR' + , 32, 'INDEX TYPE' + , 33, 'OPERATOR' + , 34, 'TABLE SUBPARTITION' + , 35, 'INDEX SUBPARTITION' + , 36, 'REPLICATED TABLE OBJECT' + , 37, 'REPLICATION INTERNAL PACKAGE' + , 38, 'CONTEXT POLICY' + , 39, 'PUB_SUB' + , 40, 'LOB PARTITION' + , 41, 'LOB SUBPARTITION' + , 42, 'SUMMARY' + , 43, 'DIMENSION' + , 44, 'APP CONTEXT' + , 45, 'STORED OUTLINE' + , 46, 'RULESET' + , 47, 'RSRC PLAN' + , 48, 'RSRC CONSUMER GROUP' + , 49, 'PENDING RSRC PLAN' + , 50, 'PENDING RSRC CONSUMER GROUP' + , 51, 'SUBSCRIPTION' + , 52, 'LOCATION' + , 53, 'REMOTE OBJECT' + , 54, 'SNAPSHOT METADATA' + , 55, 'IFS' + , 56, 'JAVA SHARED DATA' + , 57, 'SECURITY PROFILE' + , 'INVALID TYPE' + ) + ) type + , kglobhs0 + + kglobhs1 + + kglobhs2 + + kglobhs3 + + kglobhs4 + + kglobhs5 + + kglobhs6 sharable_mem + , kglhdldc loads + , kglhdexc executions + , kglhdlkc locks + , kglobpc0 pins + , DECODE( kglhdkmk + , 0 ,'NO' + , 'YES' + ) kept +-- , kglhdclt child_latch +-- , kglnahsh hash_value +-- , kglhdadr address +-- , kglhdpar paddress +-- , kglobt30 crsr_plan_hash_value +-- , kglobt02 kglobt02 +FROM x$kglob +/ + +SPOOL OFF + +SET TERMOUT ON + +PROMPT +PROMPT Report written to &spool_file +PROMPT diff --git a/idev/dba_object_search.sql b/idev/dba_object_search.sql new file mode 100644 index 0000000..cc4b027 --- /dev/null +++ b/idev/dba_object_search.sql @@ -0,0 +1,62 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_object_search.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Prompt the user for a query string and look for any object that | +-- | contains that string. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Object Search Interface | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT schema CHAR PROMPT 'Enter search string (i.e. GE_LINES) : ' + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT A20 HEADING "Owner" +COLUMN object_name FORMAT A45 HEADING "Object Name" +COLUMN object_type FORMAT A18 HEADING "Object Type" +COLUMN created HEADING "Created" +COLUMN status HEADING "Status" + +SELECT + owner + , object_name + , object_type + , TO_CHAR(created, 'DD-MON-YYYY HH24:MI:SS') created + , LPAD(status, 7) status +FROM all_objects +WHERE object_name like UPPER('%&schema%') +ORDER BY owner, object_name, object_type +/ + diff --git a/idev/dba_object_summary.sql b/idev/dba_object_summary.sql new file mode 100644 index 0000000..2b30f01 --- /dev/null +++ b/idev/dba_object_summary.sql @@ -0,0 +1,63 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_object_summary.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provide a summary report of all objects in the database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Object Summary | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT A20 HEADING "Owner" +COLUMN object_type FORMAT A25 HEADING "Object Type" +COLUMN obj_count FORMAT 999,999,999,999 HEADING "Object Count" + +BREAK ON report ON owner SKIP 2 + +COMPUTE sum LABEL "" OF obj_count ON owner +COMPUTE sum LABEL "Grand Total: " OF obj_count ON report + +SELECT + owner + , object_type + , count(*) obj_count +FROM + dba_objects +GROUP BY + owner + , object_type +ORDER BY + owner + , object_type +/ diff --git a/idev/dba_options.sql b/idev/dba_options.sql new file mode 100644 index 0000000..f50b21d --- /dev/null +++ b/idev/dba_options.sql @@ -0,0 +1,51 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_options.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Report on all Oracle installed options. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Database Options | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN parameter FORMAT a45 HEADING 'Option Name' +COLUMN value FORMAT a10 HEADING 'Installed?' + +SELECT + parameter + , value +FROM + v$option +ORDER BY + parameter; diff --git a/idev/dba_owner_to_tablespace.sql b/idev/dba_owner_to_tablespace.sql new file mode 100644 index 0000000..08b3d6a --- /dev/null +++ b/idev/dba_owner_to_tablespace.sql @@ -0,0 +1,71 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_owner_to_tablespace.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provide a summary report of owner to tablespace for all | +-- | segments in the database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Owner to Tablespace Report | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT a20 HEADING "Owner" +COLUMN tablespace_name FORMAT a30 HEADING "Tablespace Name" +COLUMN segment_type FORMAT a18 HEADING "Segment Type" +COLUMN bytes FORMAT 9,999,999,999,999 HEADING "Size (in Bytes)" +COLUMN seg_count FORMAT 9,999,999,999 HEADING "Segment Count" + +BREAK ON report ON owner SKIP 2 + +COMPUTE sum LABEL "" OF seg_count bytes ON owner +COMPUTE sum LABEL "Grand Total: " OF seg_count bytes ON report + +SELECT + owner + , tablespace_name + , segment_type + , sum(bytes) bytes + , count(*) seg_count +FROM + dba_segments +GROUP BY + owner + , tablespace_name + , segment_type +ORDER BY + owner + , tablespace_name + , segment_type +/ + diff --git a/idev/dba_plsql_package_size.sql b/idev/dba_plsql_package_size.sql new file mode 100644 index 0000000..ee5f5c8 --- /dev/null +++ b/idev/dba_plsql_package_size.sql @@ -0,0 +1,58 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_plsql_package_size.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Internal size of PL/SQL Packages. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : PL/SQL Package Body Size Report | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT a20 HEAD "Owner" +COLUMN name FORMAT a35 HEAD "Name" +COLUMN type FORMAT a18 HEAD "Type" +COLUMN total_bytes FORMAT 999,999,999,999 HEAD "Total bytes" + +SELECT + owner + , name + , type + , source_size+code_size+parsed_size+error_size total_bytes +FROM + dba_object_size +WHERE + type = 'PACKAGE BODY' + AND owner NOT IN ('SYS') +ORDER BY + 4 DESC; diff --git a/idev/dba_query_hidden_parameters.sql b/idev/dba_query_hidden_parameters.sql new file mode 100644 index 0000000..0e8d4b7 --- /dev/null +++ b/idev/dba_query_hidden_parameters.sql @@ -0,0 +1,59 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_query_hidden_parameters.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all hidden "undocumented" database parameters. You | +-- | must be connected as the SYS user to run this script. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Invalid Objects | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN ksppinm FORMAT a55 HEAD 'Parameter Name' +COLUMN ksppstvl FORMAT a40 HEAD 'Value' +COLUMN ksppdesc FORMAT a60 HEAD 'Description' TRUNC + +SELECT + ksppinm + , ksppstvl + , ksppdesc +FROM + x$ksppi x + , x$ksppcv y +WHERE + x.indx = y.indx + AND TRANSLATE(ksppinm,'_','#') like '#%' +ORDER BY + ksppinm +/ diff --git a/idev/dba_random_number.sql b/idev/dba_random_number.sql new file mode 100644 index 0000000..820b0c3 --- /dev/null +++ b/idev/dba_random_number.sql @@ -0,0 +1,20 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_random_number.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : A quick way to produce random numbers using SQL. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SELECT + TRUNC( + (TO_NUMBER(SUBSTR(TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE,'sssss'))/86399),-7,7))/10000000)*32767 + ) random +FROM dual; diff --git a/idev/dba_rebuild_indexes.sql b/idev/dba_rebuild_indexes.sql new file mode 100644 index 0000000..ff93d87 --- /dev/null +++ b/idev/dba_rebuild_indexes.sql @@ -0,0 +1,96 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_rebuild_indexes.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : This script generates another script that will include all of | +-- | the ALTER INDEX REBUILD .... commands needed to rebuild a | +-- | tablespaces indexes. This script will prompt the user for the | +-- | tablespace name. This script must be run be a user with the DBA | +-- | role under Oracle7. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Rebuild Index Build Script | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT TS_NAME CHAR PROMPT 'Enter the index tablespace name : ' + +PROMPT +PROMPT Thanks... Creating rebuild index script for tablespace: &TS_NAME + +SET ECHO OFF +SET FEEDBACK OFF +SET HEADING OFF +SET LINESIZE 180 +SET PAGESIZE 0 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +SET TERMOUT OFF + +spool rebuild_&TS_NAME._indexes.sql + +SELECT 'REM FILE : rebuild_&TS_NAME._indexes.sql' FROM dual; +SELECT ' ' FROM dual; +SELECT 'REM' FROM dual; +SELECT 'REM ***** ALTER INDEX REBUILD commands for tablespace: &TS_NAME' FROM dual; +SELECT 'REM' FROM dual; +SELECT ' ' FROM dual; + +SELECT + 'REM +------------------------------------------------------------------------+' || chr(10) || + 'REM | INDEX NAME : ' || owner || '.' || segment_name + || lpad('|', 58 - (length(owner) + length(segment_name)) ) + || chr(10) || + 'REM | BYTES : ' || bytes + || lpad ('|', 59-(length(bytes)) ) || chr(10) || + 'REM | EXTENTS : ' || extents + || lpad ('|', 59-(length(extents)) ) || chr(10) || + 'REM +------------------------------------------------------------------------+' || chr(10) || + 'ALTER INDEX ' || owner || '.' || segment_name || chr(10) || + ' REBUILD ONLINE' || chr(10) || + ' TABLESPACE ' || tablespace_name || chr(10) || + ' STORAGE ( ' || chr(10) || + ' INITIAL ' || initial_extent || chr(10) || + ' NEXT ' || next_extent || chr(10) || + ' MINEXTENTS ' || min_extents || chr(10) || + ' MAXEXTENTS ' || max_extents || chr(10) || + ' PCTINCREASE ' || pct_increase || chr(10) || + ');' || chr(10) || chr(10) +FROM dba_segments +WHERE segment_type = 'INDEX' + AND owner NOT IN ('SYS') + AND tablespace_name = UPPER('&TS_NAME') +ORDER BY owner, bytes DESC +/ + +SPOOL OFF + +SET TERMOUT ON + +PROMPT +PROMPT Done... Built the script rebuild_&TS_NAME._indexes.sql +PROMPT diff --git a/idev/dba_recompile_invalid_objects.sql b/idev/dba_recompile_invalid_objects.sql new file mode 100644 index 0000000..2615737 --- /dev/null +++ b/idev/dba_recompile_invalid_objects.sql @@ -0,0 +1,60 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_recompile_invalid_objects.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Dynamically create a SQL script to recompile all INVALID | +-- | objects. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK OFF +SET HEADING OFF +SET LINESIZE 180 +SET PAGESIZE 0 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +spool compile.sql + +SELECT 'alter ' || + decode(object_type, 'PACKAGE BODY', 'package', object_type) || + ' ' || + object_name|| + ' compile' || + decode(object_type, 'PACKAGE BODY', ' body;', ';') +FROM dba_objects +WHERE status = 'INVALID' +/ + +spool off + +SET ECHO off +SET FEEDBACK off +SET HEADING off +SET LINESIZE 180 +SET PAGESIZE 0 +SET TERMOUT on +SET TIMING off +SET TRIMOUT on +SET TRIMSPOOL on +SET VERIFY off + +@compile + +SET FEEDBACK 6 +SET HEADING ON diff --git a/idev/dba_registry.sql b/idev/dba_registry.sql new file mode 100644 index 0000000..1e245ad --- /dev/null +++ b/idev/dba_registry.sql @@ -0,0 +1,62 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_registry.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provides summary report on all registered components. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Database Registry Components | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN comp_id FORMAT a9 HEADING 'Component|ID' +COLUMN comp_name FORMAT a35 HEADING 'Component|Name' +COLUMN version FORMAT a13 HEADING 'Version' +COLUMN status FORMAT a11 HEADING 'Status' +COLUMN modified HEADING 'Modified' +COLUMN Schema FORMAT a15 HEADING 'Schema' +COLUMN procedure FORMAT a45 HEADING 'Procedure' + +SELECT + comp_id + , comp_name + , version + , status + , modified + , schema + , procedure +FROM + dba_registry +ORDER BY + comp_id; + diff --git a/idev/dba_related_child_tables.sql b/idev/dba_related_child_tables.sql new file mode 100644 index 0000000..391a8e0 --- /dev/null +++ b/idev/dba_related_child_tables.sql @@ -0,0 +1,57 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_related_child_tables.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Query all child tables related to a given parent table name. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | All child tables related to a parent table name | +PROMPT +------------------------------------------------------------------------+ +PROMPT + +ACCEPT table_owner prompt 'Enter parent table owner : ' +ACCEPT table_name prompt 'Enter parent table name : ' + +SELECT + p.table_name PARENT_TABLE_NAME + , c.table_name CHILD_TABLE +FROM + dba_constraints p + , dba_constraints c +WHERE + (p.constraint_type = 'P' OR p.constraint_type = 'U') + AND + (c.constraint_type = 'R') + AND + (p.constraint_name = c.r_constraint_name) + AND + (p.owner = UPPER('&table_owner')) + AND + (p.table_name = UPPER('&table_name')) +ORDER BY 2 +/ diff --git a/idev/dba_row_size.sql b/idev/dba_row_size.sql new file mode 100644 index 0000000..860ac75 --- /dev/null +++ b/idev/dba_row_size.sql @@ -0,0 +1,66 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_row_size.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Determines the row sizes for all tables in a given schema. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Calculate Row Size for Tables in a Specified Schema | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT schema CHAR PROMPT 'Enter schema name : ' + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN Tot_Size FORMAT 99,999 +COLUMN data_type FORMAT a15 + +BREAK ON table_name SKIP 2 + +COMPUTE sum OF Tot_Size ON table_name +COMPUTE sum OF data_length ON table_name + +SELECT + table_name + , column_name + , DECODE( DATA_TYPE + , 'NUMBER' , DATA_PRECISION+DATA_SCALE + , 'VARCHAR2' , TO_NUMBER(DATA_LENGTH) + , 'CHAR' , TO_NUMBER(DATA_LENGTH) + , 'DATE' , TO_NUMBER(DATA_LENGTH)) Tot_Size + , DATA_TYPE +FROM dba_tab_columns +WHERE owner = UPPER('&schema') +ORDER BY table_name + , column_id +/ diff --git a/idev/dba_segment_summary.sql b/idev/dba_segment_summary.sql new file mode 100644 index 0000000..0a5d38c --- /dev/null +++ b/idev/dba_segment_summary.sql @@ -0,0 +1,66 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_segment_summary.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provide a summary report of all segments in the database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Segment Summary Report | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT a20 HEADING "Owner" +COLUMN segment_type FORMAT a18 HEADING "Segment Type" +COLUMN bytes FORMAT 9,999,999,999,999 HEADING "Size (in Bytes)" +COLUMN seg_count FORMAT 9,999,999,999 HEADING "Segment Count" + +BREAK ON report ON owner SKIP 2 + +COMPUTE sum LABEL "" OF seg_count bytes ON owner +COMPUTE sum LABEL "Grand Total: " OF seg_count bytes ON report + +SELECT + owner + , segment_type + , sum(bytes) bytes + , count(*) seg_count +FROM + dba_segments +GROUP BY + owner + , segment_type +ORDER BY + owner + , segment_type +/ + diff --git a/idev/dba_snapshot_database_10g.sql b/idev/dba_snapshot_database_10g.sql new file mode 100644 index 0000000..21f9e6f --- /dev/null +++ b/idev/dba_snapshot_database_10g.sql @@ -0,0 +1,6639 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_snapshot_database_10g.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : This SQL script provides a detailed report (in HTML format) on | +-- | all database metrics including installed options, storage, | +-- | performance data, and security. | +-- | VERSION : This script was designed for Oracle Database 10g Release 2. | +-- | Although this script will also work with Oracle Database 10g | +-- | Release 1, several sections will error out from missing tables | +-- | or columns. | +-- | USAGE : | +-- | | +-- | sqlplus -s /@ @dba_snapshot_database_10g.sql | +-- | | +-- | TESTING : This script has been successfully tested on the following | +-- | platforms: | +-- | | +-- | Linux : Oracle Database 10.2.0.3.0 | +-- | Linux : Oracle RAC 10.2.0.3.0 | +-- | Solaris : Oracle Database 10.2.0.2.0 | +-- | Solaris : Oracle Database 10.2.0.3.0 | +-- | Windows XP : Oracle Database 10.2.0.3.0 | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +prompt +prompt +-----------------------------------------------------------------------------------------+ +prompt | Snapshot Database 10g Release 2 | +prompt |-----------------------------------------------------------------------------------------+ +prompt | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. (www.idevelopment.info) | +prompt +-----------------------------------------------------------------------------------------+ +prompt +prompt Creating database report. +prompt This script must be run as a user with SYSDBA privileges. +prompt This process can take several minutes to complete. +prompt + +define reportHeader="Snapshot Database 10g Release 2
Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. (www.idevelopment.info)

" + + +-- +----------------------------------------------------------------------------+ +-- | SCRIPT SETTINGS | +-- +----------------------------------------------------------------------------+ + +set termout off +set echo off +set feedback off +set heading off +set verify off +set wrap on +set trimspool on +set serveroutput on +set escape on + +set pagesize 50000 +set linesize 175 +set long 2000000000 + +clear buffer computes columns breaks + +define fileName=dba_snapshot_database_10g +define versionNumber=5.3 + + +-- +----------------------------------------------------------------------------+ +-- | GATHER DATABASE REPORT INFORMATION | +-- +----------------------------------------------------------------------------+ + +COLUMN tdate NEW_VALUE _date NOPRINT +SELECT TO_CHAR(SYSDATE,'MM/DD/YYYY') tdate FROM dual; + +COLUMN time NEW_VALUE _time NOPRINT +SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') time FROM dual; + +COLUMN date_time NEW_VALUE _date_time NOPRINT +SELECT TO_CHAR(SYSDATE,'MM/DD/YYYY HH24:MI:SS') date_time FROM dual; + +COLUMN date_time_timezone NEW_VALUE _date_time_timezone NOPRINT +SELECT TO_CHAR(systimestamp, 'Mon DD, YYYY (') || TRIM(TO_CHAR(systimestamp, 'Day')) || TO_CHAR(systimestamp, ') "at" HH:MI:SS AM') || TO_CHAR(systimestamp, ' "in Timezone" TZR') date_time_timezone +FROM dual; + +COLUMN spool_time NEW_VALUE _spool_time NOPRINT +SELECT TO_CHAR(SYSDATE,'YYYYMMDD') spool_time FROM dual; + +COLUMN dbname NEW_VALUE _dbname NOPRINT +SELECT name dbname FROM v$database; + +COLUMN dbid NEW_VALUE _dbid NOPRINT +SELECT dbid dbid FROM v$database; + +COLUMN platform_id NEW_VALUE _platform_id NOPRINT +SELECT platform_id platform_id FROM v$database; + +COLUMN platform_name NEW_VALUE _platform_name NOPRINT +SELECT platform_name platform_name FROM v$database; + +COLUMN global_name NEW_VALUE _global_name NOPRINT +SELECT global_name global_name FROM global_name; + +COLUMN blocksize NEW_VALUE _blocksize NOPRINT +SELECT value blocksize FROM v$parameter WHERE name='db_block_size'; + +COLUMN startup_time NEW_VALUE _startup_time NOPRINT +SELECT TO_CHAR(startup_time, 'MM/DD/YYYY HH24:MI:SS') startup_time FROM v$instance; + +COLUMN host_name NEW_VALUE _host_name NOPRINT +SELECT host_name host_name FROM v$instance; + +COLUMN instance_name NEW_VALUE _instance_name NOPRINT +SELECT instance_name instance_name FROM v$instance; + +COLUMN instance_number NEW_VALUE _instance_number NOPRINT +SELECT instance_number instance_number FROM v$instance; + +COLUMN thread_number NEW_VALUE _thread_number NOPRINT +SELECT thread# thread_number FROM v$instance; + +COLUMN cluster_database NEW_VALUE _cluster_database NOPRINT +SELECT value cluster_database FROM v$parameter WHERE name='cluster_database'; + +COLUMN cluster_database_instances NEW_VALUE _cluster_database_instances NOPRINT +SELECT value cluster_database_instances FROM v$parameter WHERE name='cluster_database_instances'; + +COLUMN reportRunUser NEW_VALUE _reportRunUser NOPRINT +SELECT user reportRunUser FROM dual; + + + +-- +----------------------------------------------------------------------------+ +-- | GATHER DATABASE REPORT INFORMATION | +-- +----------------------------------------------------------------------------+ + +set heading on + +set markup html on spool on preformat off entmap on - +head ' - + Database Report - + ' - +body 'BGCOLOR="#C0C0C0"' - +table 'WIDTH="90%" BORDER="1"' + +spool &FileName._&_dbname._&_spool_time..html + +set markup html on entmap off + + +-- +----------------------------------------------------------------------------+ +-- | - REPORT HEADER - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt &reportHeader + + + +-- +----------------------------------------------------------------------------+ +-- | - REPORT INDEX - | +-- +----------------------------------------------------------------------------+ + +prompt + + +prompt

Report Index
- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
Database and Instance Information
Report HeaderVersionOptionsDatabase Registry
Feature Usage StatisticsHigh Water Mark StatisticsInstance OverviewDatabase Overview
Initialization ParametersControl FilesControl File RecordsOnline Redo Logs
Redo Log SwitchesOutstanding AlertsStatistics Level
Scheduler / Jobs
Jobs


Storage
TablespacesData FilesDatabase GrowthTablespace Extents
Tablespace to OwnerOwner to Tablespace

UNDO Segments
UNDO SegmentsUNDO Segment ContentionUNDO Retention Parameters
Backups
RMAN Backup JobsRMAN ConfigurationRMAN Backup SetsRMAN Backup Pieces
RMAN Backup Control FilesRMAN Backup SPFILEArchiving ModeArchive Destinations
Archiving Instance ParametersArchiving HistoryFlash Recovery Area ParametersFlash Recovery Area Status
Flashback Technologies
UNDO Retention ParametersFlashback Database ParametersFlashback Database StatusFlashback Database Redo Time Matrix
Recycle Bin


Performance
SGA InformationSGA Target AdviceSGA (ASMM) Dynamic ComponentsPGA Target Advice
File I/O StatisticsFile I/O TimingsAverage Overall I/O per SecondRedo Log Contention
Full Table ScansSortsOutlinesOutline Hints
SQL Statements With Most Buffer GetsSQL Statements With Most Disk ReadsEnabled TracesEnabled Aggregations
Automatic Workload Repository - (AWR)
Workload Repository InformationAWR Snapshot SettingsAWR Snapshot ListAWR Snapshot Size Estimates
AWR Baselines


Sessions
Current SessionsUser Session MatrixEnabled TracesEnabled Aggregations
Security
User AccountsUsers With DBA PrivilegesRolesDefault Passwords
DB Links


Objects
Object SummarySegment SummaryTop 100 Segments (by size)Top 100 Segments (by number of extents)
DirectoriesDirectory PrivilegesLibrariesTypes
Type AttributesType MethodsCollectionsLOB Segments
Objects Unable to ExtendObjects Which Are Nearing MAXEXTENTSInvalid ObjectsProcedural Object Errors
Objects Without StatisticsTables Suffering From Row Chaining/MigrationUsers With Default Tablespace - (SYSTEM)Users With Default Temp Tablespace - (SYSTEM)
Objects in the SYSTEM TablespaceRecycle Bin

Online Analytical Processing - (OLAP)
DimensionsDimension LevelsDimension AttributesDimension Hierarchies
CubesMaterialized ViewsMaterialized View LogsMaterialized View Refresh Groups
Data Pump
Data Pump JobsData Pump SessionsData Pump Job Progress
Networking
MTS Dispatcher StatisticsMTS Dispatcher Response Queue Wait StatsMTS Shared Server Wait Statistics
Replication
Replication SummaryDeferred TransactionsAdministrative Request JobsInitialization Parameters
(Schedule) - Purge Jobs(Schedule) - Push Jobs(Schedule) - Refresh Jobs(Multi-Master) - Master Groups
(Multi-Master) - Master Groups and Sites(Materialized View) - Master Site Summary(Materialized View) - Master Site Logs(Materialized View) - Master Site Templates
(Materialized View) - Summary(Materialized View) - Groups(Materialized View) - Materialized Views(Materialized View) - Refresh Groups
+ +prompt

+ + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< Database and Instance Information >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

Database and Instance Information
+ + +-- +----------------------------------------------------------------------------+ +-- | - REPORT HEADER - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt +prompt Report Header
+ +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
Report Name&FileName._&_dbname._&_spool_time..html
Snapshot Database Version&versionNumber
Run Date / Time / Timezone&_date_time_timezone
Host Name&_host_name
Database Name&_dbname
Database ID&_dbid
Global Database Name&_global_name
Platform Name / ID&_platform_name / &_platform_id
Clustered Database?&_cluster_database
Clustered Database Instances&_cluster_database_instances
Instance Name&_instance_name
Instance Number&_instance_number
Thread Number&_thread_number
Database Startup Time&_startup_time
Database Block Size&_blocksize
Report Run User&_reportRunUser
+ +prompt
[Top]

+ + + + +-- SET TIMING ON + + + + +-- +----------------------------------------------------------------------------+ +-- | - VERSION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Version


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN banner FORMAT a120 HEADING 'Banner' + +SELECT * FROM v$version; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - OPTIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Options


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN parameter HEADING 'Option Name' ENTMAP off +COLUMN value HEADING 'Installed?' ENTMAP off + +SELECT + DECODE( value + , 'FALSE' + , '' || parameter || '' + , '' || parameter || '') parameter + , DECODE( value + , 'FALSE' + , '
' || value || '
' + , '
' || value || '
' ) value +FROM v$option +ORDER BY parameter; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - DATABASE REGISTRY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Database Registry


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN comp_id FORMAT a75 HEADING 'Component ID' ENTMAP off +COLUMN comp_name FORMAT a75 HEADING 'Component Name' ENTMAP off +COLUMN version HEADING 'Version' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Status' ENTMAP off +COLUMN modified FORMAT a75 HEADING 'Modified' ENTMAP off +COLUMN control HEADING 'Control' ENTMAP off +COLUMN schema HEADING 'Schema' ENTMAP off +COLUMN procedure HEADING 'Procedure' ENTMAP off + +SELECT + '' || comp_id || '' comp_id + , '
' || comp_name || '
' comp_name + , version + , DECODE( status + , 'VALID', '
' || status || '
' + , 'INVALID', '
' || status || '
' + , '
' || status || '
' ) status + , '
' || modified || '
' modified + , control + , schema + , procedure +FROM dba_registry +ORDER BY comp_name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - FEATURE USAGE STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Feature Usage Statistics


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN feature_name FORMAT a115 HEADING 'Feature|Name' +COLUMN version FORMAT a75 HEADING 'Version' +COLUMN detected_usages FORMAT a75 HEADING 'Detected|Usages' +COLUMN total_samples FORMAT a75 HEADING 'Total|Samples' +COLUMN currently_used FORMAT a60 HEADING 'Currently|Used' +COLUMN first_usage_date FORMAT a95 HEADING 'First Usage|Date' +COLUMN last_usage_date FORMAT a95 HEADING 'Last Usage|Date' +COLUMN last_sample_date FORMAT a95 HEADING 'Last Sample|Date' +COLUMN next_sample_date FORMAT a95 HEADING 'Next Sample|Date' + +SELECT + '
' || name || '
' feature_name + , DECODE( detected_usages + , 0 + , version + , '' || version || '') version + , DECODE( detected_usages + , 0 + , '
' || NVL(TO_CHAR(detected_usages), '
') || '
' + , '
' || NVL(TO_CHAR(detected_usages), '
') || '
') detected_usages + , DECODE( detected_usages + , 0 + , '
' || NVL(TO_CHAR(total_samples), '
') || '
' + , '
' || NVL(TO_CHAR(total_samples), '
') || '
') total_samples + , DECODE( detected_usages + , 0 + , '
' || NVL(currently_used, '
') || '
' + , '
' || NVL(currently_used, '
') || '
') currently_used + , DECODE( detected_usages + , 0 + , '
' || NVL(TO_CHAR(first_usage_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' + , '
' || NVL(TO_CHAR(first_usage_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') first_usage_date + , DECODE( detected_usages + , 0 + , '
' || NVL(TO_CHAR(last_usage_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' + , '
' || NVL(TO_CHAR(last_usage_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') last_usage_date + , DECODE( detected_usages + , 0 + , '
' || NVL(TO_CHAR(last_sample_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' + , '
' || NVL(TO_CHAR(last_sample_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') last_sample_date + , DECODE( detected_usages + , 0 + , '
' || NVL(TO_CHAR((last_sample_date+SAMPLE_INTERVAL/60/60/24), 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' + , '
' || NVL(TO_CHAR((last_sample_date+SAMPLE_INTERVAL/60/60/24), 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') next_sample_date +FROM dba_feature_usage_statistics +ORDER BY name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - HIGH WATER MARK STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt High Water Mark Statistics


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN statistic_name FORMAT a115 HEADING 'Statistic Name' +COLUMN version FORMAT a62 HEADING 'Version' +COLUMN highwater FORMAT 9,999,999,999,999,999 HEADING 'Highwater' +COLUMN last_value FORMAT 9,999,999,999,999,999 HEADING 'Last Value' +COLUMN description FORMAT a120 HEADING 'Description' + +SELECT + '
' || name || '
' statistic_name + , '
' || version || '
' version + , highwater highwater + , last_value last_value + , description description +FROM dba_high_water_mark_statistics +ORDER BY name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - INSTANCE OVERVIEW - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Instance Overview


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a75 HEADING 'Instance|Name' ENTMAP off +COLUMN instance_number_print FORMAT a75 HEADING 'Instance|Num' ENTMAP off +COLUMN thread_number_print HEADING 'Thread|Num' ENTMAP off +COLUMN host_name_print FORMAT a75 HEADING 'Host|Name' ENTMAP off +COLUMN version HEADING 'Oracle|Version' ENTMAP off +COLUMN start_time FORMAT a75 HEADING 'Start|Time' ENTMAP off +COLUMN uptime HEADING 'Uptime|(in days)' ENTMAP off +COLUMN parallel FORMAT a75 HEADING 'Parallel - (RAC)' ENTMAP off +COLUMN instance_status FORMAT a75 HEADING 'Instance|Status' ENTMAP off +COLUMN database_status FORMAT a75 HEADING 'Database|Status' ENTMAP off +COLUMN logins FORMAT a75 HEADING 'Logins' ENTMAP off +COLUMN archiver FORMAT a75 HEADING 'Archiver' ENTMAP off + +SELECT + '
' || instance_name || '
' instance_name_print + , '
' || instance_number || '
' instance_number_print + , '
' || thread# || '
' thread_number_print + , '
' || host_name || '
' host_name_print + , '
' || version || '
' version + , '
' || TO_CHAR(startup_time,'mm/dd/yyyy HH24:MI:SS') || '
' start_time + , ROUND(TO_CHAR(SYSDATE-startup_time), 2) uptime + , '
' || parallel || '
' parallel + , '
' || status || '
' instance_status + , '
' || logins || '
' logins + , DECODE( archiver + , 'FAILED' + , '
' || archiver || '
' + , '
' || archiver || '
') archiver +FROM gv$instance +ORDER BY instance_number; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - DATABASE OVERVIEW - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Database Overview


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a75 HEADING 'Database|Name' ENTMAP off +COLUMN dbid HEADING 'Database|ID' ENTMAP off +COLUMN db_unique_name HEADING 'Database|Unique Name' ENTMAP off +COLUMN creation_date HEADING 'Creation|Date' ENTMAP off +COLUMN platform_name_print HEADING 'Platform|Name' ENTMAP off +COLUMN current_scn HEADING 'Current|SCN' ENTMAP off +COLUMN log_mode HEADING 'Log|Mode' ENTMAP off +COLUMN open_mode HEADING 'Open|Mode' ENTMAP off +COLUMN force_logging HEADING 'Force|Logging' ENTMAP off +COLUMN flashback_on HEADING 'Flashback|On?' ENTMAP off +COLUMN controlfile_type HEADING 'Controlfile|Type' ENTMAP off +COLUMN last_open_incarnation_number HEADING 'Last Open|Incarnation Num' ENTMAP off + +SELECT + '
' || name || '
' name + , '
' || dbid || '
' dbid + , '
' || db_unique_name || '
' db_unique_name + , '
' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
' creation_date + , '
' || platform_name || '
' platform_name_print + , '
' || current_scn || '
' current_scn + , '
' || log_mode || '
' log_mode + , '
' || open_mode || '
' open_mode + , '
' || force_logging || '
' force_logging + , '
' || flashback_on || '
' flashback_on + , '
' || controlfile_type || '
' controlfile_type + , '
' || last_open_incarnation# || '
' last_open_incarnation_number +FROM v$database; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - INITIALIZATION PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Initialization Parameters


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN spfile HEADING 'SPFILE Usage' + +SELECT + 'This database '|| + DECODE( (1-SIGN(1-SIGN(count(*) - 0))) + , 1 + , 'IS' + , 'IS NOT') || + ' using an SPFILE.'spfile +FROM v$spparameter +WHERE value IS NOT null; + + +COLUMN pname FORMAT a75 HEADING 'Parameter Name' ENTMAP off +COLUMN instance_name_print FORMAT a45 HEADING 'Instance Name' ENTMAP off +COLUMN value FORMAT a75 HEADING 'Value' ENTMAP off +COLUMN isdefault FORMAT a75 HEADING 'Is Default?' ENTMAP off +COLUMN issys_modifiable FORMAT a75 HEADING 'Is Dynamic?' ENTMAP off + +BREAK ON report ON pname + +SELECT + DECODE( p.isdefault + , 'FALSE' + , '' || SUBSTR(p.name,0,512) || '' + , '' || SUBSTR(p.name,0,512) || '' ) pname + , DECODE( p.isdefault + , 'FALSE' + , '' || i.instance_name || '' + , i.instance_name ) instance_name_print + , DECODE( p.isdefault + , 'FALSE' + , '' || SUBSTR(p.value,0,512) || '' + , SUBSTR(p.value,0,512) ) value + , DECODE( p.isdefault + , 'FALSE' + , '
' || p.isdefault || '
' + , '
' || p.isdefault || '
') isdefault + , DECODE( p.isdefault + , 'FALSE' + , '
' || p.issys_modifiable || '
' + , '
' || p.issys_modifiable || '
') issys_modifiable +FROM + gv$parameter p + , gv$instance i +WHERE + p.inst_id = i.inst_id +ORDER BY + p.name + , i.instance_name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - CONTROL FILES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Control Files


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Controlfile Name' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Status' ENTMAP off +COLUMN file_size FORMAT a75 HEADING 'File Size' ENTMAP off + +SELECT + '' || c.name || '' name + , DECODE( c.status + , NULL + , '
VALID
' + , '
' || c.status || '
') status + , '
' || TO_CHAR(block_size * file_size_blks, '999,999,999,999') || '
' file_size +FROM + v$controlfile c +ORDER BY + c.name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - CONTROL FILE RECORDS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Control File Records


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN type FORMAT a95 HEADING 'Record Section Type' ENTMAP off +COLUMN record_size FORMAT 999,999 HEADING 'Record Size|(in bytes)' ENTMAP off +COLUMN records_total FORMAT 999,999 HEADING 'Records Allocated' ENTMAP off +COLUMN bytes_alloc FORMAT 999,999,999 HEADING 'Bytes Allocated' ENTMAP off +COLUMN records_used FORMAT 999,999 HEADING 'Records Used' ENTMAP off +COLUMN bytes_used FORMAT 999,999,999 HEADING 'Bytes Used' ENTMAP off +COLUMN pct_used FORMAT B999 HEADING '% Used' ENTMAP off +COLUMN first_index HEADING 'First Index' ENTMAP off +COLUMN last_index HEADING 'Last Index' ENTMAP off +COLUMN last_recid HEADING 'Last RecID' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' of record_size records_total bytes_alloc records_used bytes_used ON report +COMPUTE avg LABEL 'Average: ' of pct_used ON report + +SELECT + '
' || type || '
' type + , record_size record_size + , records_total records_total + , (records_total * record_size) bytes_alloc + , records_used records_used + , (records_used * record_size) bytes_used + , NVL(records_used/records_total * 100, 0) pct_used + , first_index first_index + , last_index last_index + , last_recid last_recid +FROM v$controlfile_record_section +ORDER BY type; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - ONLINE REDO LOGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Online Redo Logs


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a95 HEADING 'Instance Name' ENTMAP off +COLUMN thread_number_print FORMAT a95 HEADING 'Thread Number' ENTMAP off +COLUMN groupno HEADING 'Group Number' ENTMAP off +COLUMN member HEADING 'Member' ENTMAP off +COLUMN redo_file_type FORMAT a75 HEADING 'Redo Type' ENTMAP off +COLUMN log_status FORMAT a75 HEADING 'Log Status' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' ENTMAP off +COLUMN archived FORMAT a75 HEADING 'Archived?' ENTMAP off + +BREAK ON report ON instance_name_print ON thread_number_print + +SELECT + '
' || i.instance_name || '
' instance_name_print + , '
' || i.thread# || '
' thread_number_print + , f.group# groupno + , '' || f.member || '' member + , f.type redo_file_type + , DECODE( l.status + , 'CURRENT' + , '
' || l.status || '
' + , '
' || l.status || '
') log_status + , l.bytes bytes + , '
' || l.archived || '
' archived +FROM + gv$logfile f + , gv$log l + , gv$instance i +WHERE + f.group# = l.group# + AND l.thread# = i.thread# + AND i.inst_id = f.inst_id + AND f.inst_id = l.inst_id +ORDER BY + i.instance_name + , f.group# + , f.member; + + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - REDO LOG SWITCHES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Redo Log Switches


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN DAY FORMAT a75 HEADING 'Day / Time' ENTMAP off +COLUMN H00 FORMAT 999,999B HEADING '00' ENTMAP off +COLUMN H01 FORMAT 999,999B HEADING '01' ENTMAP off +COLUMN H02 FORMAT 999,999B HEADING '02' ENTMAP off +COLUMN H03 FORMAT 999,999B HEADING '03' ENTMAP off +COLUMN H04 FORMAT 999,999B HEADING '04' ENTMAP off +COLUMN H05 FORMAT 999,999B HEADING '05' ENTMAP off +COLUMN H06 FORMAT 999,999B HEADING '06' ENTMAP off +COLUMN H07 FORMAT 999,999B HEADING '07' ENTMAP off +COLUMN H08 FORMAT 999,999B HEADING '08' ENTMAP off +COLUMN H09 FORMAT 999,999B HEADING '09' ENTMAP off +COLUMN H10 FORMAT 999,999B HEADING '10' ENTMAP off +COLUMN H11 FORMAT 999,999B HEADING '11' ENTMAP off +COLUMN H12 FORMAT 999,999B HEADING '12' ENTMAP off +COLUMN H13 FORMAT 999,999B HEADING '13' ENTMAP off +COLUMN H14 FORMAT 999,999B HEADING '14' ENTMAP off +COLUMN H15 FORMAT 999,999B HEADING '15' ENTMAP off +COLUMN H16 FORMAT 999,999B HEADING '16' ENTMAP off +COLUMN H17 FORMAT 999,999B HEADING '17' ENTMAP off +COLUMN H18 FORMAT 999,999B HEADING '18' ENTMAP off +COLUMN H19 FORMAT 999,999B HEADING '19' ENTMAP off +COLUMN H20 FORMAT 999,999B HEADING '20' ENTMAP off +COLUMN H21 FORMAT 999,999B HEADING '21' ENTMAP off +COLUMN H22 FORMAT 999,999B HEADING '22' ENTMAP off +COLUMN H23 FORMAT 999,999B HEADING '23' ENTMAP off +COLUMN TOTAL FORMAT 999,999,999 HEADING 'Total' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total:' avg label 'Average:' OF total ON report + +SELECT + '
' || SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) || '
' DAY + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23 + , COUNT(*) TOTAL +FROM + v$log_history a +GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +ORDER BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +/ + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - OUTSTANDING ALERTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Outstanding Alerts


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN severity FORMAT a75 HEADING 'Severity' ENTMAP off +COLUMN target_name FORMAT a75 HEADING 'Target Name' ENTMAP off +COLUMN target_type FORMAT a75 HEADING 'Target Type' ENTMAP off +COLUMN category FORMAT a75 HEADING 'Category' ENTMAP off +COLUMN name FORMAT a75 HEADING 'Name' ENTMAP off +COLUMN message FORMAT a125 HEADING 'Message' ENTMAP off +COLUMN alert_triggered FORMAT a75 HEADING 'Alert Triggered' ENTMAP off + +SELECT + DECODE( alert_state + , 'Critical' + , '
' || alert_state || '
' + , '
' || alert_state || '
') severity + , target_name target_name + , (CASE target_type + WHEN 'oracle_listener' THEN 'Oracle Listener' + WHEN 'rac_database' THEN 'Cluster Database' + WHEN 'cluster' THEN 'Clusterware' + WHEN 'host' THEN 'Host' + WHEN 'osm_instance' THEN 'OSM Instance' + WHEN 'oracle_database' THEN 'Database Instance' + WHEN 'oracle_emd' THEN 'Oracle EMD' + WHEN 'oracle_emrep' THEN 'Oracle EMREP' + ELSE + target_type + END) target_type + , metric_label category + , column_label name + , message message + , '
' || TO_CHAR(collection_timestamp, 'mm/dd/yyyy HH24:MI:SS') || '
' alert_triggered +FROM + mgmt$alert_current +ORDER BY + alert_state + , collection_timestamp; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - STATISTICS LEVEL - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Statistics Level


+ +prompt "Automatic Database Management" was first introduced in Oracle10g where the Oracle database +prompt can now automatically perform many of the routine monitoring and administrative activities that had +prompt to be manually executed by the DBA in previous versions. Several of the new components that make +prompt up this new feature include (1) Automatic Workload Repository (2) Automatic Database Diagnostic +prompt Monitoring (3) Automatic Shared Memory Management and (4) Automatic UNDO Retention Tuning. All +prompt of these new components can only be enabled when the STATISTICS_LEVEL initialization parameter +prompt is set to TYPICAL (the default) or ALL. A value of BASIC turns off these components and disables +prompt all self-tuning capabilities of the database. The view V$STATISTICS_LEVEL shows the statistic +prompt component, description, and at what level of the STATISTICS_LEVEL parameter the +prompt component is enabled. + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a95 HEADING 'Instance Name' ENTMAP off +COLUMN statistics_name FORMAT a95 HEADING 'Statistics Name' ENTMAP off +COLUMN session_status FORMAT a95 HEADING 'Session Status' ENTMAP off +COLUMN system_status FORMAT a95 HEADING 'System Status' ENTMAP off +COLUMN activation_level FORMAT a95 HEADING 'Activation Level' ENTMAP off +COLUMN statistics_view_name FORMAT a95 HEADING 'Statistics View Name' ENTMAP off +COLUMN session_settable FORMAT a95 HEADING 'Session Settable?' ENTMAP off + +BREAK ON report ON instance_name_print + +SELECT + '
' || i.instance_name || '
' instance_name_print + , '
' || s.statistics_name || '
' statistics_name + , DECODE( s.session_status + , 'ENABLED' + , '
' || s.session_status || '
' + , '
' || s.session_status || '
') session_status + , DECODE( s.system_status + , 'ENABLED' + , '
' || s.system_status || '
' + , '
' || s.system_status || '
') system_status + , (CASE s.activation_level + WHEN 'TYPICAL' THEN '
' || s.activation_level || '
' + WHEN 'ALL' THEN '
' || s.activation_level || '
' + WHEN 'BASIC' THEN '
' || s.activation_level || '
' + ELSE + '
' || s.activation_level || '
' + END) activation_level + , s.statistics_view_name statistics_view_name + , '
' || s.session_settable || '
' session_settable +FROM + gv$statistics_level s + , gv$instance i +WHERE + s.inst_id = i.inst_id +ORDER BY + i.instance_name + , s.statistics_name; + +prompt
[Top]

+ + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< SCHEDULER / JOBS >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

Scheduler / Jobs
+ + +-- +----------------------------------------------------------------------------+ +-- | - JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Jobs
+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job_id FORMAT a75 HEADING 'Job ID' ENTMAP off +COLUMN username FORMAT a75 HEADING 'User' ENTMAP off +COLUMN what FORMAT a175 HEADING 'What' ENTMAP off +COLUMN next_date FORMAT a110 HEADING 'Next Run Date' ENTMAP off +COLUMN interval FORMAT a75 HEADING 'Interval' ENTMAP off +COLUMN last_date FORMAT a110 HEADING 'Last Run Date' ENTMAP off +COLUMN failures FORMAT a75 HEADING 'Failures' ENTMAP off +COLUMN broken FORMAT a75 HEADING 'Broken?' ENTMAP off + +SELECT + DECODE( broken + , 'Y' + , '
' || job || '
' + , '
' || job || '
') job_id + , DECODE( broken + , 'Y' + , '' || log_user || '' + , log_user ) username + , DECODE( broken + , 'Y' + , '' || what || '' + , what ) what + , DECODE( broken + , 'Y' + , '
' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' + , '
' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') next_date + , DECODE( broken + , 'Y' + , '' || interval || '' + , interval ) interval + , DECODE( broken + , 'Y' + , '
' || NVL(TO_CHAR(last_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' + , '
' || NVL(TO_CHAR(last_date, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
') last_date + , DECODE( broken + , 'Y' + , '
' || NVL(failures, 0) || '
' + , '
' || NVL(failures, 0) || '
') failures + , DECODE( broken + , 'Y' + , '
' || broken || '
' + , '
' || broken || '
') broken +FROM + dba_jobs +ORDER BY + job; + +prompt
[Top]

+ + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< STORAGE >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

Storage
+ + +-- +----------------------------------------------------------------------------+ +-- | - TABLESPACES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tablespaces
+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN status HEADING 'Status' ENTMAP off +COLUMN name HEADING 'Tablespace Name' ENTMAP off +COLUMN type FORMAT a12 HEADING 'TS Type' ENTMAP off +COLUMN extent_mgt FORMAT a10 HEADING 'Ext. Mgt.' ENTMAP off +COLUMN segment_mgt FORMAT a9 HEADING 'Seg. Mgt.' ENTMAP off +COLUMN ts_size FORMAT 999,999,999,999,999 HEADING 'Tablespace Size' ENTMAP off +COLUMN free FORMAT 999,999,999,999,999 HEADING 'Free (in bytes)' ENTMAP off +COLUMN used FORMAT 999,999,999,999,999 HEADING 'Used (in bytes)' ENTMAP off +COLUMN pct_used HEADING 'Pct. Used' ENTMAP off + +BREAK ON report +COMPUTE SUM label 'Total:' OF ts_size used free ON report + +SELECT + DECODE( d.status + , 'OFFLINE' + , '
' || d.status || '
' + , '
' || d.status || '
') status + , '' || d.tablespace_name || '' name + , d.contents type + , d.extent_management extent_mgt + , d.segment_space_management segment_mgt + , NVL(a.bytes, 0) ts_size + , NVL(f.bytes, 0) free + , NVL(a.bytes - NVL(f.bytes, 0), 0) used + , '
' || + DECODE ( + (1-SIGN(1-SIGN(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0)) - 90))) + , 1 + , '' || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || '' + , '' || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || '' + ) + || ' %
' pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_data_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes) bytes + from dba_free_space + group by tablespace_name + ) f +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = f.tablespace_name(+) + AND NOT ( + d.extent_management like 'LOCAL' + AND + d.contents like 'TEMPORARY' + ) +UNION ALL +SELECT + DECODE( d.status + , 'OFFLINE' + , '
' || d.status || '
' + , '
' || d.status || '
') status + , '' || d.tablespace_name || '' name + , d.contents type + , d.extent_management extent_mgt + , d.segment_space_management segment_mgt + , NVL(a.bytes, 0) ts_size + , NVL(a.bytes - NVL(t.bytes,0), 0) free + , NVL(t.bytes, 0) used + , '
' || + DECODE ( + (1-SIGN(1-SIGN(TRUNC(NVL(t.bytes / a.bytes * 100, 0)) - 90))) + , 1 + , '' || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || '' + , '' || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || '' + ) + || ' %
' pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_temp_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes_cached) bytes + from v$temp_extent_pool + group by tablespace_name + ) t +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = t.tablespace_name(+) + AND d.extent_management like 'LOCAL' + AND d.contents like 'TEMPORARY' +ORDER BY 2; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - DATA FILES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Data Files


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace HEADING 'Tablespace Name / File Class' ENTMAP off +COLUMN filename HEADING 'Filename' ENTMAP off +COLUMN filesize FORMAT 999,999,999,999,999 HEADING 'File Size' ENTMAP off +COLUMN autoextensible HEADING 'Autoextensible' ENTMAP off +COLUMN increment_by FORMAT 999,999,999,999,999 HEADING 'Next' ENTMAP off +COLUMN maxbytes FORMAT 999,999,999,999,999 HEADING 'Max' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF filesize ON report + +SELECT /*+ ordered */ + '' || d.tablespace_name || '' tablespace + , '' || d.file_name || '' filename + , d.bytes filesize + , '
' || NVL(d.autoextensible, '
') || '
' autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_data_files d + , v$datafile v + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +WHERE + (d.file_name = v.name) +UNION +SELECT + '' || d.tablespace_name || '' tablespace + , '' || d.file_name || '' filename + , d.bytes filesize + , '
' || NVL(d.autoextensible, '
') || '
' autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_temp_files d + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +UNION +SELECT + '[ ONLINE REDO LOG ]' + , '' || a.member || '' + , b.bytes + , null + , null + , null +FROM + v$logfile a + , v$log b +WHERE + a.group# = b.group# +UNION +SELECT + '[ CONTROL FILE ]' + , '' || a.name || '' + , null + , null + , null + , null +FROM + v$controlfile a +ORDER BY + 1 + , 2; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - DATABASE GROWTH - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Database Growth


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN month FORMAT a75 HEADING 'Month' +COLUMN growth FORMAT 999,999,999,999,999 HEADING 'Growth (bytes)' + +BREAK ON report +COMPUTE SUM label 'Total:' OF growth ON report + +SELECT + '
' || TO_CHAR(creation_time, 'RRRR-MM') || '
' month + , SUM(bytes) growth +FROM sys.v_$datafile +GROUP BY TO_CHAR(creation_time, 'RRRR-MM') +ORDER BY TO_CHAR(creation_time, 'RRRR-MM'); + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLESPACE EXTENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tablespace Extents


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN largest_ext FORMAT 999,999,999,999,999 HEADING 'Largest Extent' ENTMAP off +COLUMN smallest_ext FORMAT 999,999,999,999,999 HEADING 'Smallest Extent' ENTMAP off +COLUMN total_free FORMAT 999,999,999,999,999 HEADING 'Total Free' ENTMAP off +COLUMN pieces FORMAT 999,999,999,999,999 HEADING 'Number of Free Extents' ENTMAP off + +break on report +compute sum label 'Total:' of largest_ext smallest_ext total_free pieces on report + +SELECT + '' || tablespace_name || '' tablespace_name + , max(bytes) largest_ext + , min(bytes) smallest_ext + , sum(bytes) total_free + , count(*) pieces +FROM + dba_free_space +GROUP BY + tablespace_name +ORDER BY + tablespace_name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLESPACE TO OWNER - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tablespace to Owner


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace_name FORMAT a75 HEADING 'Tablespace Name' ENTMAP off +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN segment_type FORMAT a75 HEADING 'Segment Type' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in Bytes)' ENTMAP off +COLUMN seg_count FORMAT 999,999,999,999 HEADING 'Segment Count' ENTMAP off + +BREAK ON report ON tablespace_name +COMPUTE sum LABEL 'Total: ' of seg_count bytes ON report + +SELECT + '' || tablespace_name || '' tablespace_name + , '
' || owner || '
' owner + , '
' || segment_type || '
' segment_type + , sum(bytes) bytes + , count(*) seg_count +FROM + dba_segments +GROUP BY + tablespace_name + , owner + , segment_type +ORDER BY + tablespace_name + , owner + , segment_type; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - OWNER TO TABLESPACE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Owner to Tablespace


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN tablespace_name FORMAT a75 HEADING 'Tablespace Name' ENTMAP off +COLUMN segment_type FORMAT a75 HEADING 'Segment Type' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in Bytes)' ENTMAP off +COLUMN seg_count FORMAT 999,999,999,999 HEADING 'Segment Count' ENTMAP off + +break on report on owner +compute sum label 'Total: ' of seg_count bytes on report + +SELECT + '' || owner || '' owner + , '
' || tablespace_name || '
' tablespace_name + , '
' || segment_type || '
' segment_type + , sum(bytes) bytes + , count(*) seg_count +FROM + dba_segments +GROUP BY + owner + , tablespace_name + , segment_type +ORDER BY + owner + , tablespace_name + , segment_type; + +prompt
[Top]

+ + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< UNDO Segments >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

UNDO Segments
+ + +-- +----------------------------------------------------------------------------+ +-- | - UNDO RETENTION PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt UNDO Retention Parameters
+ +prompt undo_retention is specified in minutes + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a95 HEADING 'Instance Name' ENTMAP off +COLUMN thread_number_print FORMAT a95 HEADING 'Thread Number' ENTMAP off +COLUMN name FORMAT a125 HEADING 'Name' ENTMAP off +COLUMN value HEADING 'Value' ENTMAP off + +BREAK ON report ON instance_name_print ON thread_number_print + +SELECT + '
' || i.instance_name || '
' instance_name_print + , '
' || i.thread# || '
' thread_number_print + , '
' || p.name || '
' name + , (CASE p.name + WHEN 'undo_retention' THEN '
' || TO_CHAR(TO_NUMBER(p.value)/60, '999,999,999,999,999') || '
' + ELSE + '
' || p.value || '
' + END) value +FROM + gv$parameter p + , gv$instance i +WHERE + p.inst_id = i.inst_id + AND p.name LIKE 'undo%' +ORDER BY + i.instance_name + , p.name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - UNDO SEGMENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt UNDO Segments


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name FORMAT a75 HEADING 'Instance Name' ENTMAP off +COLUMN tablespace FORMAT a85 HEADING 'Tablspace' ENTMAP off +COLUMN roll_name HEADING 'UNDO Segment Name' ENTMAP off +COLUMN in_extents HEADING 'Init/Next Extents' ENTMAP off +COLUMN m_extents HEADING 'Min/Max Extents' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN wraps FORMAT 999,999,999 HEADING 'Wraps' ENTMAP off +COLUMN shrinks FORMAT 999,999,999 HEADING 'Shrinks' ENTMAP off +COLUMN opt FORMAT 999,999,999,999 HEADING 'Opt. Size' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' ENTMAP off +COLUMN extents FORMAT 999,999,999 HEADING 'Extents' ENTMAP off + +CLEAR COMPUTES BREAKS + +BREAK ON report ON instance_name ON tablespace +-- COMPUTE sum LABEL 'Total:' OF bytes extents shrinks wraps ON report + +SELECT + '
' || NVL(i.instance_name, '
') || '
' instance_name + , '
' || a.tablespace_name || '
' tablespace + , '
' || a.owner || '.' || a.segment_name || '
' roll_name + , '
' || + TO_CHAR(a.initial_extent) || ' / ' || + TO_CHAR(a.next_extent) || + '
' in_extents + , '
' || + TO_CHAR(a.min_extents) || ' / ' || + TO_CHAR(a.max_extents) || + '
' m_extents + , DECODE( a.status + , 'OFFLINE' + , '
' || a.status || '
' + , '
' || a.status || '
') status + , b.bytes bytes + , b.extents extents + , d.shrinks shrinks + , d.wraps wraps + , d.optsize opt +FROM + dba_rollback_segs a + , dba_segments b + , v$rollname c + , v$rollstat d + , gv$parameter p + , gv$instance i +WHERE + a.segment_name = b.segment_name + AND a.segment_name = c.name (+) + AND c.usn = d.usn (+) + AND p.name (+) = 'undo_tablespace' + AND p.value (+) = a.tablespace_name + AND p.inst_id = i.inst_id (+) +ORDER BY + a.tablespace_name + , a.segment_name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - UNDO SEGMENT CONTENTION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt UNDO Segment Contention


+ +prompt UNDO statistics from V$ROLLSTAT - (ordered by waits) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN roll_name HEADING 'UNDO Segment Name' ENTMAP off +COLUMN gets FORMAT 999,999,999 HEADING 'Gets' ENTMAP off +COLUMN waits FORMAT 999,999,999 HEADING 'Waits' ENTMAP off +COLUMN immediate_misses FORMAT 999,999,999 HEADING 'Immediate Misses' ENTMAP off +COLUMN hit_ratio HEADING 'Hit Ratio' ENTMAP off + +BREAK ON report +COMPUTE SUM label 'Total:' OF gets waits ON report + +SELECT + '' || b.name || '' roll_name + , gets gets + , waits waits + , '
' || TO_CHAR(ROUND(((gets - waits)*100)/gets, 2)) || '%
' hit_ratio +FROM + sys.v_$rollstat a + , sys.v_$rollname b +WHERE + a.USN = b.USN +ORDER BY + waits DESC; + + +prompt +prompt Wait statistics + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN class HEADING 'Class' +COLUMN ratio HEADING 'Wait Ratio' + +SELECT + '' || w.class || '' class + , '
' || TO_CHAR(ROUND(100*(w.count/SUM(s.value)),8)) || '%
' ratio +FROM + v$waitstat w + , v$sysstat s +WHERE + w.class IN ( 'system undo header' + , 'system undo block' + , 'undo header' + , 'undo block' + ) + AND s.name IN ('db block gets', 'consistent gets') +GROUP BY + w.class + , w.count; + + +prompt
[Top]

+ + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< BACKUPS >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

Backups
+ + +-- +----------------------------------------------------------------------------+ +-- | - RMAN BACKUP JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt RMAN Backup Jobs
+ +prompt Last 10 RMAN backup jobs + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN backup_name FORMAT a130 HEADING 'Backup Name' ENTMAP off +COLUMN start_time FORMAT a75 HEADING 'Start Time' ENTMAP off +COLUMN elapsed_time FORMAT a75 HEADING 'Elapsed Time' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN input_type HEADING 'Input Type' ENTMAP off +COLUMN output_device_type HEADING 'Output Devices' ENTMAP off +COLUMN input_size HEADING 'Input Size' ENTMAP off +COLUMN output_size HEADING 'Output Size' ENTMAP off +COLUMN output_rate_per_sec HEADING 'Output Rate Per Sec' ENTMAP off + +SELECT + '
' || r.command_id || '
' backup_name + , '
' || TO_CHAR(r.start_time, 'mm/dd/yyyy HH24:MI:SS') || '
' start_time + , '
' || r.time_taken_display || '
' elapsed_time + , DECODE( r.status + , 'COMPLETED' + , '
' || r.status || '
' + , 'RUNNING' + , '
' || r.status || '
' + , 'FAILED' + , '
' || r.status || '
' + , '
' || r.status || '
' + ) status + , r.input_type input_type + , r.output_device_type output_device_type + , '
' || r.input_bytes_display || '
' input_size + , '
' || r.output_bytes_display || '
' output_size + , '
' || r.output_bytes_per_sec_display || '
' output_rate_per_sec +FROM + (select + command_id + , start_time + , time_taken_display + , status + , input_type + , output_device_type + , input_bytes_display + , output_bytes_display + , output_bytes_per_sec_display + from v$rman_backup_job_details + order by start_time DESC + ) r +WHERE + rownum < 11; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - RMAN CONFIGURATION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt RMAN Configuration


+ +prompt All non-default RMAN configuration settings + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a130 HEADING 'Name' ENTMAP off +COLUMN value HEADING 'Value' ENTMAP off + +SELECT + '
' || name || '
' name + , value +FROM + v$rman_configuration +ORDER BY + name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - RMAN BACKUP SETS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt RMAN Backup Sets


+ +prompt Available backup sets contained in the control file including available and expired backup sets + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN backup_type FORMAT a70 HEADING 'Backup Type' ENTMAP off +COLUMN device_type HEADING 'Device Type' ENTMAP off +COLUMN controlfile_included FORMAT a30 HEADING 'Controlfile Included?' ENTMAP off +COLUMN spfile_included FORMAT a30 HEADING 'SPFILE Included?' ENTMAP off +COLUMN incremental_level HEADING 'Incremental Level' ENTMAP off +COLUMN pieces FORMAT 999,999,999,999 HEADING '# of Pieces' ENTMAP off +COLUMN start_time FORMAT a75 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a75 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN tag HEADING 'Tag' ENTMAP off +COLUMN block_size FORMAT 999,999,999,999,999 HEADING 'Block Size' ENTMAP off +COLUMN keep FORMAT a40 HEADING 'Keep?' ENTMAP off +COLUMN keep_until FORMAT a75 HEADING 'Keep Until' ENTMAP off +COLUMN keep_options FORMAT a15 HEADING 'Keep Options' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total:' OF pieces elapsed_seconds ON report + +SELECT + '
' || bs.recid || '
' bs_key + , DECODE(backup_type + , 'L', '
Archived Redo Logs
' + , 'D', '
Datafile Full Backup
' + , 'I', '
Incremental Backup
') backup_type + , '
' || device_type || '
' device_type + , '
' || + DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included) || '
' controlfile_included + , '
' || NVL(sp.spfile_included, '-') || '
' spfile_included + , bs.incremental_level incremental_level + , bs.pieces pieces + , '
' || TO_CHAR(bs.start_time, 'mm/dd/yyyy HH24:MI:SS') || '
' start_time + , '
' || TO_CHAR(bs.completion_time, 'mm/dd/yyyy HH24:MI:SS') || '
' completion_time + , bs.elapsed_seconds elapsed_seconds + , bp.tag tag + , bs.block_size block_size + , '
' || bs.keep || '
' keep + , '
' || NVL(TO_CHAR(bs.keep_until, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' keep_until + , bs.keep_options keep_options +FROM + v$backup_set bs + , (select distinct + set_stamp + , set_count + , tag + , device_type + from v$backup_piece + where status in ('A', 'X')) bp + , (select distinct set_stamp, set_count, 'YES' spfile_included + from v$backup_spfile) sp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bs.set_stamp = sp.set_stamp (+) + AND bs.set_count = sp.set_count (+) +ORDER BY + bs.recid; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - RMAN BACKUP PIECES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt RMAN Backup Pieces


+ +prompt Available backup pieces contained in the control file including available and expired backup sets + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN piece# HEADING 'Piece #' ENTMAP off +COLUMN copy# HEADING 'Copy #' ENTMAP off +COLUMN bp_key HEADING 'BP Key' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN handle HEADING 'Handle' ENTMAP off +COLUMN start_time FORMAT a75 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a75 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP off + +BREAK ON bs_key + +SELECT + '
' || bs.recid || '
' bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , DECODE( status + , 'A', '
Available
' + , 'D', '
Deleted
' + , 'X', '
Expired
') status + , handle handle + , '
' || TO_CHAR(bp.start_time, 'mm/dd/yyyy HH24:MI:SS') || '
' start_time + , '
' || TO_CHAR(bp.completion_time, 'mm/dd/yyyy HH24:MI:SS') || '
' completion_time + , bp.elapsed_seconds elapsed_seconds +FROM + v$backup_set bs + , v$backup_piece bp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bp.status IN ('A', 'X') +ORDER BY + bs.recid + , piece#; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - RMAN BACKUP CONTROL FILES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt RMAN Backup Control Files


+ +prompt Available automatic control files within all available (and expired) backup sets + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN piece# HEADING 'Piece #' ENTMAP off +COLUMN copy# HEADING 'Copy #' ENTMAP off +COLUMN bp_key HEADING 'BP Key' ENTMAP off +COLUMN controlfile_included FORMAT a75 HEADING 'Controlfile Included?' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN handle HEADING 'Handle' ENTMAP off +COLUMN start_time FORMAT a40 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a40 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP off + +BREAK ON bs_key + +SELECT + '
' || bs.recid || '
' bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , '
' || + DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included) || + '
' controlfile_included + , DECODE( status + , 'A', '
Available
' + , 'D', '
Deleted
' + , 'X', '
Expired
') status + , handle handle +FROM + v$backup_set bs + , v$backup_piece bp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bp.status IN ('A', 'X') + AND bs.controlfile_included != 'NO' +ORDER BY + bs.recid + , piece#; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - RMAN BACKUP SPFILE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt RMAN Backup SPFILE


+ +prompt Available automatic SPFILE backups within all available (and expired) backup sets + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN piece# HEADING 'Piece #' ENTMAP off +COLUMN copy# HEADING 'Copy #' ENTMAP off +COLUMN bp_key HEADING 'BP Key' ENTMAP off +COLUMN spfile_included FORMAT a75 HEADING 'SPFILE Included?' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN handle HEADING 'Handle' ENTMAP off +COLUMN start_time FORMAT a40 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a40 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP off + +BREAK ON bs_key + +SELECT + '
' || bs.recid || '
' bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , '
' || + NVL(sp.spfile_included, '-') || + '
' spfile_included + , DECODE( status + , 'A', '
Available
' + , 'D', '
Deleted
' + , 'X', '
Expired
') status + , handle handle +FROM + v$backup_set bs + , v$backup_piece bp + , (select distinct set_stamp, set_count, 'YES' spfile_included + from v$backup_spfile) sp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bp.status IN ('A', 'X') + AND bs.set_stamp = sp.set_stamp + AND bs.set_count = sp.set_count +ORDER BY + bs.recid + , piece#; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVING MODE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archiving Mode


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN db_log_mode FORMAT a95 HEADING 'Database|Log Mode' ENTMAP off +COLUMN log_archive_start FORMAT a95 HEADING 'Automatic|Archival' ENTMAP off +COLUMN oldest_online_log_sequence FORMAT 999999999999999 HEADING 'Oldest Online |Log Sequence' ENTMAP off +COLUMN current_log_seq FORMAT 999999999999999 HEADING 'Current |Log Sequence' ENTMAP off + +SELECT + '
' || d.log_mode || '
' db_log_mode + , '
' || p.log_archive_start || '
' log_archive_start + , c.current_log_seq current_log_seq + , o.oldest_online_log_sequence oldest_online_log_sequence +FROM + (select + DECODE( log_mode + , 'ARCHIVELOG', 'Archive Mode' + , 'NOARCHIVELOG', 'No Archive Mode' + , log_mode + ) log_mode + from v$database + ) d + , (select + DECODE( log_mode + , 'ARCHIVELOG', 'Enabled' + , 'NOARCHIVELOG', 'Disabled') log_archive_start + from v$database + ) p + , (select a.sequence# current_log_seq + from v$log a + where a.status = 'CURRENT' + and thread# = &_thread_number + ) c + , (select min(a.sequence#) oldest_online_log_sequence + from v$log a + where thread# = &_thread_number + ) o +/ + + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVE DESTINATIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archive Destinations


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN dest_id HEADING 'Destination|ID' ENTMAP off +COLUMN dest_name HEADING 'Destination|Name' ENTMAP off +COLUMN destination HEADING 'Destination' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN schedule HEADING 'Schedule' ENTMAP off +COLUMN archiver HEADING 'Archiver' ENTMAP off +COLUMN log_sequence FORMAT 999999999999999 HEADING 'Current Log|Sequence' ENTMAP off + +SELECT + '
' || a.dest_id || '
' dest_id + , a.dest_name dest_name + , a.destination destination + , DECODE( a.status + , 'VALID', '
' || status || '
' + , 'INACTIVE', '
' || status || '
' + , '
' || status || '
' ) status + , DECODE( a.schedule + , 'ACTIVE', '
' || schedule || '
' + , 'INACTIVE', '
' || schedule || '
' + , '
' || schedule || '
' ) schedule + , a.archiver archiver + , a.log_sequence log_sequence +FROM + v$archive_dest a +ORDER BY + a.dest_id +/ + + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVING INSTANCE PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archiving Instance Parameters


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Parameter Name' ENTMAP off +COLUMN value HEADING 'Parameter Value' ENTMAP off + +SELECT + '' || a.name || '' name + , a.value value +FROM + v$parameter a +WHERE + a.name like 'log_%' +ORDER BY + a.name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVING HISTORY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archiving History


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN thread# FORMAT a79 HEADING 'Thread#' ENTMAP off +COLUMN sequence# FORMAT a79 HEADING 'Sequence#' ENTMAP off +COLUMN name HEADING 'Name' ENTMAP off +COLUMN first_change# HEADING 'First|Change #' ENTMAP off +COLUMN first_time FORMAT a75 HEADING 'First|Time' ENTMAP off +COLUMN next_change# HEADING 'Next|Change #' ENTMAP off +COLUMN next_time FORMAT a75 HEADING 'Next|Time' ENTMAP off +COLUMN log_size FORMAT 999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off +COLUMN archived FORMAT a31 HEADING 'Archived?' ENTMAP off +COLUMN applied FORMAT a31 HEADING 'Applied?' ENTMAP off +COLUMN deleted FORMAT a31 HEADING 'Deleted?' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Status' ENTMAP off + +BREAK ON report ON thread# + +SELECT + '
' || thread# || '
' thread# + , '
' || sequence# || '
' sequence# + , name + , first_change# + , '
' || TO_CHAR(first_time, 'mm/dd/yyyy HH24:MI:SS') || '
' first_time + , next_change# + , '
' || TO_CHAR(next_time, 'mm/dd/yyyy HH24:MI:SS') || '
' next_time + , (blocks * block_size) log_size + , '
' || archived || '
' archived + , '
' || applied || '
' applied + , '
' || deleted || '
' deleted + , DECODE( status + , 'A', '
Available
' + , 'D', '
Deleted
' + , 'U', '
Unavailable
' + , 'X', '
Expired
' + ) status +FROM + v$archived_log +WHERE + status in ('A') +ORDER BY + thread# + , sequence#; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - FLASH RECOVERY AREA PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Flash Recovery Area Parameters


+ +prompt db_recovery_file_dest_size is specified in bytes + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a95 HEADING 'Instance Name' ENTMAP off +COLUMN thread_number_print FORMAT a95 HEADING 'Thread Number' ENTMAP off +COLUMN name FORMAT a125 HEADING 'Name' ENTMAP off +COLUMN value HEADING 'Value' ENTMAP off + +BREAK ON report ON instance_name_print ON thread_number_print + +SELECT + '
' || i.instance_name || '
' instance_name_print + , '
' || i.thread# || '
' thread_number_print + , '
' || p.name || '
' name + , (CASE p.name + WHEN 'db_recovery_file_dest_size' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' + ELSE + '
' || NVL(p.value, '(null)') || '
' + END) value +FROM + gv$parameter p + , gv$instance i +WHERE + p.inst_id = i.inst_id + AND p.name IN ('db_recovery_file_dest_size', 'db_recovery_file_dest') +ORDER BY + 1 + , 3; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - FLASH RECOVERY AREA STATUS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Flash Recovery Area Status


+ +prompt Current location, disk quota, space in use, space reclaimable by deleting files, and number of files in the Flash Recovery Area + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a75 HEADING 'Name' ENTMAP off +COLUMN space_limit FORMAT 99,999,999,999,999 HEADING 'Space Limit' ENTMAP off +COLUMN space_used FORMAT 99,999,999,999,999 HEADING 'Space Used' ENTMAP off +COLUMN space_used_pct FORMAT 999.99 HEADING '% Used' ENTMAP off +COLUMN space_reclaimable FORMAT 99,999,999,999,999 HEADING 'Space Reclaimable' ENTMAP off +COLUMN pct_reclaimable FORMAT 999.99 HEADING '% Reclaimable' ENTMAP off +COLUMN number_of_files FORMAT 999,999 HEADING 'Number of Files' ENTMAP off + +SELECT + '
' || name || '
' name + , space_limit space_limit + , space_used space_used + , ROUND((space_used / DECODE(space_limit, 0, 0.000001, space_limit))*100, 2) space_used_pct + , space_reclaimable space_reclaimable + , ROUND((space_reclaimable / DECODE(space_limit, 0, 0.000001, space_limit))*100, 2) pct_reclaimable + , number_of_files number_of_files +FROM + v$recovery_file_dest +ORDER BY + name; + + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN file_type FORMAT a75 HEADING 'File Type' +COLUMN percent_space_used HEADING 'Percent Space Used' +COLUMN percent_space_reclaimable HEADING 'Percent Space Reclaimable' +COLUMN number_of_files FORMAT 999,999 HEADING 'Number of Files' + +SELECT + '
' || file_type || '
' file_type + , percent_space_used percent_space_used + , percent_space_reclaimable percent_space_reclaimable + , number_of_files number_of_files +FROM + v$flash_recovery_area_usage; + +prompt
[Top]

+ + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< FLASHBACK TECHNOLOGIES >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

Flashback Technologies
+ + +-- +----------------------------------------------------------------------------+ +-- | - FLASHBACK DATABASE PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Flashback Database Parameters
+ +prompt db_flashback_retention_target is specified in minutes +prompt db_recovery_file_dest_size is specified in bytes + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a95 HEADING 'Instance Name' ENTMAP off +COLUMN thread_number_print FORMAT a95 HEADING 'Thread Number' ENTMAP off +COLUMN name FORMAT a125 HEADING 'Name' ENTMAP off +COLUMN value HEADING 'Value' ENTMAP off + +BREAK ON report ON instance_name_print ON thread_number_print + +SELECT + '
' || i.instance_name || '
' instance_name_print + , '
' || i.thread# || '
' thread_number_print + , '
' || p.name || '
' name + , (CASE p.name + WHEN 'db_recovery_file_dest_size' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' + WHEN 'db_flashback_retention_target' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' + ELSE + '
' || NVL(p.value, '(null)') || '
' + END) value +FROM + gv$parameter p + , gv$instance i +WHERE + p.inst_id = i.inst_id + AND p.name IN ('db_flashback_retention_target', 'db_recovery_file_dest_size', 'db_recovery_file_dest') +ORDER BY + 1 + , 3; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - FLASHBACK DATABASE STATUS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Flashback Database Status


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN dbid HEADING 'DB ID' ENTMAP off +COLUMN name FORMAT A75 HEADING 'DB Name' ENTMAP off +COLUMN log_mode FORMAT A75 HEADING 'Log Mode' ENTMAP off +COLUMN flashback_on FORMAT A75 HEADING 'Flashback DB On?' ENTMAP off + +SELECT + '
' || dbid || '
' dbid + , '
' || name || '
' name + , '
' || log_mode || '
' log_mode + , '
' || flashback_on || '
' flashback_on +FROM v$database; + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN oldest_flashback_time FORMAT a125 HEADING 'Oldest Flashback Time' ENTMAP off +COLUMN oldest_flashback_scn HEADING 'Oldest Flashback SCN' ENTMAP off +COLUMN retention_target FORMAT 999,999 HEADING 'Retention Target (min)' ENTMAP off +COLUMN retention_target_hours FORMAT 999,999 HEADING 'Retention Target (hour)' ENTMAP off +COLUMN flashback_size FORMAT 9,999,999,999,999 HEADING 'Flashback Size' ENTMAP off +COLUMN estimated_flashback_size FORMAT 9,999,999,999,999 HEADING 'Estimated Flashback Size' ENTMAP off + +SELECT + '
' || TO_CHAR(oldest_flashback_time,'mm/dd/yyyy HH24:MI:SS') || '
' oldest_flashback_time + , oldest_flashback_scn oldest_flashback_scn + , retention_target retention_target + , retention_target/60 retention_target_hours + , flashback_size flashback_size + , estimated_flashback_size estimated_flashback_size +FROM + v$flashback_database_log +ORDER BY + 1; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - FLASHBACK DATABASE REDO TIME MATRIX - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Flashback Database Redo Time Matrix


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN begin_time FORMAT a75 HEADING 'Begin Time' ENTMAP off +COLUMN end_time FORMAT a75 HEADING 'End Time' ENTMAP off +COLUMN flashback_data FORMAT 9,999,999,999,999 HEADING 'Flashback Data' ENTMAP off +COLUMN db_data FORMAT 9,999,999,999,999 HEADING 'DB Data' ENTMAP off +COLUMN redo_data FORMAT 9,999,999,999,999 HEADING 'Redo Data' ENTMAP off +COLUMN estimated_flashback_size FORMAT 9,999,999,999,999 HEADING 'Estimated Flashback Size' ENTMAP off + +SELECT + '
' || TO_CHAR(begin_time,'mm/dd/yyyy HH24:MI:SS') || '
' begin_time + , '
' || TO_CHAR(end_time,'mm/dd/yyyy HH24:MI:SS') || '
' end_time + , flashback_data + , db_data + , redo_data + , estimated_flashback_size +FROM + v$flashback_database_stat +ORDER BY + begin_time; + +prompt
[Top]

+ + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< PERFORMANCE >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

Performance
+ + +-- +----------------------------------------------------------------------------+ +-- | - SGA INFORMATION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SGA Information
+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name FORMAT a79 HEADING 'Instance Name' ENTMAP off +COLUMN name FORMAT a150 HEADING 'Pool Name' ENTMAP off +COLUMN value FORMAT 999,999,999,999,999 HEADING 'Bytes' ENTMAP off + +BREAK ON report ON instance_name +COMPUTE sum LABEL 'Total:' OF value ON instance_name + +SELECT + '
' || i.instance_name || '
' instance_name + , '
' || s.name || '
' name + , s.value value +FROM + gv$sga s + , gv$instance i +WHERE + s.inst_id = i.inst_id +ORDER BY + i.instance_name + , s.value DESC; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - SGA TARGET ADVICE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SGA Target Advice


+ +prompt Modify the SGA_TARGET parameter (up to the size of the SGA_MAX_SIZE, if necessary) to reduce +prompt the number of "Estimated Physical Reads". + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name FORMAT a79 HEADING 'Instance Name' ENTMAP off +COLUMN name FORMAT a79 HEADING 'Parameter Name' ENTMAP off +COLUMN value FORMAT a79 HEADING 'Value' ENTMAP off + +BREAK ON report ON instance_name + +SELECT + '
' || i.instance_name || '
' instance_name + , p.name name + , (CASE p.name + WHEN 'sga_max_size' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' + WHEN 'sga_target' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' + ELSE + '
' || p.value || '
' + END) value +FROM + gv$parameter p + , gv$instance i +WHERE + p.inst_id = i.inst_id + AND p.name IN ('sga_max_size', 'sga_target') +ORDER BY + i.instance_name + , p.name; + + + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name FORMAT a79 HEADING 'Instance Name' ENTMAP off +COLUMN sga_size FORMAT 999,999,999,999,999 HEADING 'SGA Size' ENTMAP off +COLUMN sga_size_factor FORMAT 999,999,999,999,999 HEADING 'SGA Size Factor' ENTMAP off +COLUMN estd_db_time FORMAT 999,999,999,999,999 HEADING 'Estimated DB Time' ENTMAP off +COLUMN estd_db_time_factor FORMAT 999,999,999,999,999 HEADING 'Estimated DB Time Factor' ENTMAP off +COLUMN estd_physical_reads FORMAT 999,999,999,999,999 HEADING 'Estimated Physical Reads' ENTMAP off + +BREAK ON report ON instance_name + +SELECT + '
' || i.instance_name || '
' instance_name + , s.sga_size + , s.sga_size_factor + , s.estd_db_time + , s.estd_db_time_factor + , s.estd_physical_reads +FROM + gv$sga_target_advice s + , gv$instance i +WHERE + s.inst_id = i.inst_id +ORDER BY + i.instance_name + , s.sga_size_factor; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - SGA (ASMM) DYNAMIC COMPONENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SGA (ASMM) Dynamic Components


+ +prompt Provides a summary report of all dynamic components as part of the Automatic Shared Memory +prompt Management (ASMM) configuration. This will display the total real memory allocation for the current +prompt SGA from the V$SGA_DYNAMIC_COMPONENTS view, which contains both manual and autotuned SGA components. +prompt As with the other manageability features of Oracle Database 10g, ASMM requires you to set the +prompt STATISTICS_LEVEL parameter to at least TYPICAL (the default) before attempting to enable ASMM. ASMM +prompt can be enabled by setting SGA_TARGET to a nonzero value in the initialization parameter file (pfile/spfile). + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name FORMAT a79 HEADING 'Instance Name' ENTMAP off +COLUMN component FORMAT a79 HEADING 'Component Name' ENTMAP off +COLUMN current_size FORMAT 999,999,999,999 HEADING 'Current Size' ENTMAP off +COLUMN min_size FORMAT 999,999,999,999 HEADING 'Min Size' ENTMAP off +COLUMN max_size FORMAT 999,999,999,999 HEADING 'Max Size' ENTMAP off +COLUMN user_specified_size FORMAT 999,999,999,999 HEADING 'User Specified|Size' ENTMAP off +COLUMN oper_count FORMAT 999,999,999,999 HEADING 'Oper.|Count' ENTMAP off +COLUMN last_oper_type FORMAT a75 HEADING 'Last Oper.|Type' ENTMAP off +COLUMN last_oper_mode FORMAT a75 HEADING 'Last Oper.|Mode' ENTMAP off +COLUMN last_oper_time FORMAT a75 HEADING 'Last Oper.|Time' ENTMAP off +COLUMN granule_size FORMAT 999,999,999,999 HEADING 'Granule Size' ENTMAP off + +BREAK ON report ON instance_name + +SELECT + '
' || i.instance_name || '
' instance_name + , sdc.component + , sdc.current_size + , sdc.min_size + , sdc.max_size + , sdc.user_specified_size + , sdc.oper_count + , sdc.last_oper_type + , sdc.last_oper_mode + , '
' || NVL(TO_CHAR(sdc.last_oper_time, 'mm/dd/yyyy HH24:MI:SS'), '
') || '
' last_oper_time + , sdc.granule_size +FROM + gv$sga_dynamic_components sdc + , gv$instance i +ORDER BY + i.instance_name + , sdc.component DESC; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - PGA TARGET ADVICE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt PGA Target Advice


+ +prompt The V$PGA_TARGET_ADVICE view predicts how the statistics cache hit percentage and over +prompt allocation count in V$PGASTAT will be impacted if you change the value of the +prompt initialization parameter PGA_AGGREGATE_TARGET. When you set the PGA_AGGREGATE_TARGET and +prompt WORKAREA_SIZE_POLICY to AUTO then the *_AREA_SIZE parameter are automatically ignored and +prompt Oracle will automatically use the computed value for these parameters. Use the results from +prompt the query below to adequately set the initialization parameter PGA_AGGREGATE_TARGET as to avoid +prompt any over allocation. If column ESTD_OVERALLOCATION_COUNT in the V$PGA_TARGET_ADVICE +prompt view (below) is nonzero, it indicates that PGA_AGGREGATE_TARGET is too small to even +prompt meet the minimum PGA memory needs. If PGA_AGGREGATE_TARGET is set within the over +prompt allocation zone, the memory manager will over-allocate memory and actual PGA memory +prompt consumed will be more than the limit you set. It is therefore meaningless to set a +prompt value of PGA_AGGREGATE_TARGET in that zone. After eliminating over-allocations, the +prompt goal is to maximize the PGA cache hit percentage, based on your response-time requirement +prompt and memory constraints. + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name FORMAT a79 HEADING 'Instance Name' ENTMAP off +COLUMN name FORMAT a79 HEADING 'Parameter Name' ENTMAP off +COLUMN value FORMAT a79 HEADING 'Value' ENTMAP off + +BREAK ON report ON instance_name + +SELECT + '
' || i.instance_name || '
' instance_name + , p.name name + , (CASE p.name + WHEN 'pga_aggregate_target' THEN '
' || TO_CHAR(p.value, '999,999,999,999,999') || '
' + ELSE + '
' || p.value || '
' + END) value +FROM + gv$parameter p + , gv$instance i +WHERE + p.inst_id = i.inst_id + AND p.name IN ('pga_aggregate_target', 'workarea_size_policy') +ORDER BY + i.instance_name + , p.name; + + + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name FORMAT a79 HEADING 'Instance Name' ENTMAP off +COLUMN pga_target_for_estimate FORMAT 999,999,999,999,999 HEADING 'PGA Target for Estimate' ENTMAP off +COLUMN estd_extra_bytes_rw FORMAT 999,999,999,999,999 HEADING 'Estimated Extra Bytes R/W' ENTMAP off +COLUMN estd_pga_cache_hit_percentage FORMAT 999,999,999,999,999 HEADING 'Estimated PGA Cache Hit %' ENTMAP off +COLUMN estd_overalloc_count FORMAT 999,999,999,999,999 HEADING 'ESTD_OVERALLOC_COUNT' ENTMAP off + +BREAK ON report ON instance_name + +SELECT + '
' || i.instance_name || '
' instance_name + , p.pga_target_for_estimate + , p.estd_extra_bytes_rw + , p.estd_pga_cache_hit_percentage + , p.estd_overalloc_count +FROM + gv$pga_target_advice p + , gv$instance i +WHERE + p.inst_id = i.inst_id +ORDER BY + i.instance_name + , p.pga_target_for_estimate; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - FILE I/O STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt File I/O Statistics


+ +prompt Ordered by "Physical Reads" since last startup of the Oracle instance + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace_name FORMAT a50 HEAD 'Tablespace' ENTMAP off +COLUMN fname HEAD 'File Name' ENTMAP off +COLUMN phyrds FORMAT 999,999,999,999,999 HEAD 'Physical Reads' ENTMAP off +COLUMN phywrts FORMAT 999,999,999,999,999 HEAD 'Physical Writes' ENTMAP off +COLUMN read_pct HEAD 'Read Pct.' ENTMAP off +COLUMN write_pct HEAD 'Write Pct.' ENTMAP off +COLUMN total_io FORMAT 999,999,999,999,999 HEAD 'Total I/O' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF phyrds phywrts total_io ON report + +SELECT + '' || df.tablespace_name || '' tablespace_name + , df.file_name fname + , fs.phyrds phyrds + , '
' || ROUND((fs.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
' read_pct + , fs.phywrts phywrts + , '
' || ROUND((fs.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
' write_pct + , (fs.phyrds + fs.phywrts) total_io +FROM + sys.dba_data_files df + , v$filestat fs + , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst + , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst +WHERE + df.file_id = fs.file# +UNION +SELECT + '' || tf.tablespace_name || '' tablespace_name + , tf.file_name fname + , ts.phyrds phyrds + , '
' || ROUND((ts.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
' read_pct + , ts.phywrts phywrts + , '
' || ROUND((ts.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
' write_pct + , (ts.phyrds + ts.phywrts) total_io +FROM + sys.dba_temp_files tf + , v$tempstat ts + , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst + , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst +WHERE + tf.file_id = ts.file# +ORDER BY phyrds DESC; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - FILE I/O TIMINGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt File I/O Timings


+ +prompt Average time (in milliseconds) for an I/O call per datafile since last startup of the Oracle instance - (ordered by Physical Reads) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN fname HEAD 'File Name' ENTMAP off +COLUMN phyrds FORMAT 999,999,999,999,999 HEAD 'Physical Reads' ENTMAP off +COLUMN read_rate FORMAT 999,999,999,999,999.99 HEAD 'Average Read Time
(milliseconds per read)' ENTMAP off +COLUMN phywrts FORMAT 999,999,999,999,999 HEAD 'Physical Writes' ENTMAP off +COLUMN write_rate FORMAT 999,999,999,999,999.99 HEAD 'Average Write Time
(milliseconds per write)' ENTMAP off + +BREAK ON REPORT +COMPUTE sum LABEL 'Total: ' OF phyrds phywrts ON report +COMPUTE avg LABEL 'Average: ' OF read_rate write_rate ON report + +SELECT + '' || d.name || '' fname + , s.phyrds phyrds + , ROUND((s.readtim/GREATEST(s.phyrds,1)), 2) read_rate + , s.phywrts phywrts + , ROUND((s.writetim/GREATEST(s.phywrts,1)),2) write_rate +FROM + v$filestat s + , v$datafile d +WHERE + s.file# = d.file# +UNION +SELECT + '' || t.name || '' fname + , s.phyrds phyrds + , ROUND((s.readtim/GREATEST(s.phyrds,1)), 2) read_rate + , s.phywrts phywrts + , ROUND((s.writetim/GREATEST(s.phywrts,1)),2) write_rate +FROM + v$tempstat s + , v$tempfile t +WHERE + s.file# = t.file# +ORDER BY + 2 DESC; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - AVERAGE OVERALL I/O PER SECOND - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Average Overall I/O per Second


+ +prompt Average overall I/O calls (physical read/write calls) since last startup of the Oracle instance + +CLEAR COLUMNS BREAKS COMPUTES + +DECLARE + +CURSOR get_file_io IS + SELECT + NVL(SUM(a.phyrds + a.phywrts), 0) sum_datafile_io + , TO_NUMBER(null) sum_tempfile_io + FROM + v$filestat a + UNION + SELECT + TO_NUMBER(null) sum_datafile_io + , NVL(SUM(b.phyrds + b.phywrts), 0) sum_tempfile_io + FROM + v$tempstat b; + +current_time DATE; +elapsed_time_seconds NUMBER; +sum_datafile_io NUMBER; +sum_datafile_io2 NUMBER; +sum_tempfile_io NUMBER; +sum_tempfile_io2 NUMBER; +total_io NUMBER; +datafile_io_per_sec NUMBER; +tempfile_io_per_sec NUMBER; +total_io_per_sec NUMBER; + +BEGIN + OPEN get_file_io; + FOR i IN 1..2 LOOP + FETCH get_file_io INTO sum_datafile_io, sum_tempfile_io; + IF i = 1 THEN + sum_datafile_io2 := sum_datafile_io; + ELSE + sum_tempfile_io2 := sum_tempfile_io; + END IF; + END LOOP; + + total_io := sum_datafile_io2 + sum_tempfile_io2; + SELECT sysdate INTO current_time FROM dual; + SELECT CEIL ((current_time - startup_time)*(60*60*24)) INTO elapsed_time_seconds FROM v$instance; + + datafile_io_per_sec := sum_datafile_io2/elapsed_time_seconds; + tempfile_io_per_sec := sum_tempfile_io2/elapsed_time_seconds; + total_io_per_sec := total_io/elapsed_time_seconds; + + DBMS_OUTPUT.PUT_LINE(''); + + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE(''); + + DBMS_OUTPUT.PUT_LINE('
Elapsed Time (in seconds)' || TO_CHAR(elapsed_time_seconds, '9,999,999,999,999') || '
Datafile I/O Calls per Second' || TO_CHAR(datafile_io_per_sec, '9,999,999,999,999') || '
Tempfile I/O Calls per Second' || TO_CHAR(tempfile_io_per_sec, '9,999,999,999,999') || '
Total I/O Calls per Second' || TO_CHAR(total_io_per_sec, '9,999,999,999,999') || '
'); +END; +/ + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - REDO LOG CONTENTION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Redo Log Contention


+ +prompt All latches like redo% - (ordered by misses) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a95 HEADING 'Latch Name' +COLUMN gets FORMAT 999,999,999,999,999,999 HEADING 'Gets' +COLUMN misses FORMAT 999,999,999,999 HEADING 'Misses' +COLUMN sleeps FORMAT 999,999,999,999 HEADING 'Sleeps' +COLUMN immediate_gets FORMAT 999,999,999,999,999,999 HEADING 'Immediate Gets' +COLUMN immediate_misses FORMAT 999,999,999,999 HEADING 'Immediate Misses' + +BREAK ON report +COMPUTE sum LABEL 'Total:' OF gets misses sleeps immediate_gets immediate_misses ON report + +SELECT + '
' || INITCAP(name) || '
' name + , gets + , misses + , sleeps + , immediate_gets + , immediate_misses +FROM sys.v_$latch +WHERE name LIKE 'redo%' +ORDER BY 1; + + +prompt +prompt System statistics like redo% + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a95 HEADING 'Statistics Name' +COLUMN value FORMAT 999,999,999,999,999 HEADING 'Value' + +SELECT + '
' || INITCAP(name) || '
' name + , value +FROM v$sysstat +WHERE name LIKE 'redo%' +ORDER BY 1; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - FULL TABLE SCANS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Full Table Scans


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN large_table_scans FORMAT 999,999,999,999,999 HEADING 'Large Table Scans' ENTMAP off +COLUMN small_table_scans FORMAT 999,999,999,999,999 HEADING 'Small Table Scans' ENTMAP off +COLUMN pct_large_scans HEADING 'Pct. Large Scans' ENTMAP off + +SELECT + a.value large_table_scans + , b.value small_table_scans + , '
' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
' pct_large_scans +FROM + v$sysstat a + , v$sysstat b +WHERE + a.name = 'table scans (long tables)' + AND b.name = 'table scans (short tables)'; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - SORTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Sorts


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN disk_sorts FORMAT 999,999,999,999,999 HEADING 'Disk Sorts' ENTMAP off +COLUMN memory_sorts FORMAT 999,999,999,999,999 HEADING 'Memory Sorts' ENTMAP off +COLUMN pct_disk_sorts HEADING 'Pct. Disk Sorts' ENTMAP off + +SELECT + a.value disk_sorts + , b.value memory_sorts + , '
' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
' pct_disk_sorts +FROM + v$sysstat a + , v$sysstat b +WHERE + a.name = 'sorts (disk)' + AND b.name = 'sorts (memory)'; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - OUTLINES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Outlines


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN category FORMAT a125 HEADING 'Category' ENTMAP off +COLUMN owner FORMAT a125 HEADING 'Owner' ENTMAP off +COLUMN name FORMAT a125 HEADING 'Name' ENTMAP off +COLUMN used HEADING 'Used?' ENTMAP off +COLUMN timestamp FORMAT a125 HEADING 'Time Stamp' ENTMAP off +COLUMN version HEADING 'Version' ENTMAP off +COLUMN sql_text HEADING 'SQL Text' ENTMAP off + +SELECT + '
' || category || '
' category + , owner + , name + , used + , '
' || TO_CHAR(timestamp, 'mm/dd/yyyy HH24:MI:SS') || '
' timestamp + , version + , sql_text +FROM + dba_outlines +ORDER BY + category + , owner + , name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - OUTLINE HINTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Outline Hints


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN category FORMAT a125 HEADING 'Category' ENTMAP off +COLUMN owner FORMAT a125 HEADING 'Owner' ENTMAP off +COLUMN name FORMAT a125 HEADING 'Name' ENTMAP off +COLUMN node HEADING 'Node' ENTMAP off +COLUMN join_pos HEADING 'Join Position' ENTMAP off +COLUMN hint HEADING 'Hint' ENTMAP off + +BREAK ON category ON owner ON name + +SELECT + '
' || a.category || '
' category + , a.owner owner + , a.name name + , '
' || b.node || '
' node + , '
' || b.join_pos || '
' join_pos + , b.hint hint +FROM + dba_outlines a + , dba_outline_hints b +WHERE + a.owner = b.owner + AND b.name = b.name +ORDER BY + category + , owner + , name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - SQL STATEMENTS WITH MOST BUFFER GETS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SQL Statements With Most Buffer Gets


+ +prompt Top 100 SQL statements with buffer gets greater than 1000 + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN buffer_gets FORMAT 999,999,999,999,999 HEADING 'Buffer Gets' ENTMAP off +COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP off +COLUMN gets_per_exec FORMAT 999,999,999,999,999 HEADING 'Buffer Gets / Execution' ENTMAP off +COLUMN sql_text HEADING 'SQL Text' ENTMAP off + +SELECT + '' || UPPER(b.username) || '' username + , a.buffer_gets buffer_gets + , a.executions executions + , (a.buffer_gets / decode(a.executions, 0, 1, a.executions)) gets_per_exec + , a.sql_text sql_text +FROM + (SELECT ai.buffer_gets, ai.executions, ai.sql_text, ai.parsing_user_id + FROM sys.v_$sqlarea ai + ORDER BY ai.buffer_gets + ) a + , dba_users b +WHERE + a.parsing_user_id = b.user_id + AND a.buffer_gets > 1000 + AND b.username NOT IN ('SYS','SYSTEM') + AND rownum < 101 +ORDER BY + a.buffer_gets DESC; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - SQL STATEMENTS WITH MOST DISK READS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SQL Statements With Most Disk Reads


+ +prompt Top 100 SQL statements with disk reads greater than 1000 + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP off +COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP off +COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP off +COLUMN sql_text HEADING 'SQL Text' ENTMAP off + +SELECT + '' || UPPER(b.username) || '' username + , a.disk_reads disk_reads + , a.executions executions + , (a.disk_reads / decode(a.executions, 0, 1, a.executions)) reads_per_exec + , a.sql_text sql_text +FROM + (SELECT ai.disk_reads, ai.executions, ai.sql_text, ai.parsing_user_id + FROM sys.v_$sqlarea ai + ORDER BY ai.buffer_gets + ) a + , dba_users b +WHERE + a.parsing_user_id = b.user_id + AND a.disk_reads > 1000 + AND b.username NOT IN ('SYS','SYSTEM') + AND rownum < 101 +ORDER BY + a.disk_reads DESC; + +prompt
[Top]

+ + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< AUTOMATIC WORKLOAD REPOSITORY - (AWR) >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

Automatic Workload Repository - (AWR)
+ + +-- +----------------------------------------------------------------------------+ +-- | - WORKLOAD REPOSITORY INFORMATION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Workload Repository Information
+ +prompt Instances found in the "Workload Repository" +prompt The instance running this report (&_instance_name) is indicated in "GREEN" + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN dbbid FORMAT a75 HEAD 'Database ID' ENTMAP off +COLUMN dbb_name FORMAT a75 HEAD 'Database Name' ENTMAP off +COLUMN instt_name FORMAT a75 HEAD 'Instance Name' ENTMAP off +COLUMN instt_num FORMAT 9999999999 HEAD 'Instance Number' ENTMAP off +COLUMN host FORMAT a75 HEAD 'Host' ENTMAP off +COLUMN host_platform FORMAT a125 HEAD 'Host Platform' ENTMAP off + +SELECT + DISTINCT (CASE WHEN cd.dbid = wr.dbid + AND + cd.name = wr.db_name + AND + ci.instance_number = wr.instance_number + AND + ci.instance_name = wr.instance_name + THEN '
' || wr.dbid || '
' + ELSE '
' || wr.dbid || '
' + END) dbbid + , wr.db_name dbb_name + , wr.instance_name instt_name + , wr.instance_number instt_num + , wr.host_name host + , cd.platform_name host_platform +FROM + dba_hist_database_instance wr + , v$database cd + , v$instance ci +ORDER BY + wr.instance_name; + +prompt
[Top]

+ + +-- +----------------------------------------------------------------------------+ +-- | - AWR SNAPSHOT SETTINGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt AWR Snapshot Settings


+ +prompt Use the DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS procedure to modify the interval +prompt of the snapshot generation and how long the snapshots are retained in the Workload Repository. The +prompt default interval is 60 minutes and can be set to a value between 10 minutes and 5,256,000 (1 year). +prompt The default retention period is 10,080 minutes (7 days) and can be set to a value between +prompt 1,440 minutes (1 day) and 52,560,000 minutes (100 years). + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN dbbid FORMAT a75 HEAD 'Database ID' ENTMAP off +COLUMN dbb_name FORMAT a75 HEAD 'Database Name' ENTMAP off +COLUMN snap_interval FORMAT a75 HEAD 'Snap Interval' ENTMAP off +COLUMN retention FORMAT a75 HEAD 'Retention Period' ENTMAP off +COLUMN topnsql FORMAT a75 HEAD 'Top N SQL' ENTMAP off + +SELECT + '
' || s.dbid || '
' dbbid + , d.name dbb_name + , s.snap_interval snap_interval + , s.retention retention + , s.topnsql +FROM + dba_hist_wr_control s + , v$database d +WHERE + s.dbid = d.dbid +ORDER BY + dbbid; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - AWR SNAPSHOT LIST - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt AWR Snapshot List


+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a75 HEADING 'Instance Name' ENTMAP off +COLUMN snap_id FORMAT a75 HEADING 'Snap ID' ENTMAP off +COLUMN startup_time FORMAT a75 HEADING 'Instance Startup Time' ENTMAP off +COLUMN begin_interval_time FORMAT a75 HEADING 'Begin Interval Time' ENTMAP off +COLUMN end_interval_time FORMAT a75 HEADING 'End Interval Time' ENTMAP off +COLUMN elapsed_time FORMAT 999,999,999.99 HEADING 'Elapsed Time (min)' ENTMAP off +COLUMN db_time FORMAT 999,999,999.99 HEADING 'DB Time (min)' ENTMAP off +COLUMN pct_db_time FORMAT a75 HEADING '% DB Time' ENTMAP off +COLUMN cpu_time FORMAT 999,999,999.99 HEADING 'CPU Time (min)' ENTMAP off + +BREAK ON instance_name_print ON startup_time + +SELECT + '
' || i.instance_name || '
' instance_name_print + , '
' || s.snap_id || '
' snap_id + , '
' || TO_CHAR(s.startup_time, 'mm/dd/yyyy HH24:MI:SS') || '
' startup_time + , '
' || TO_CHAR(s.begin_interval_time, 'mm/dd/yyyy HH24:MI:SS') || '
' begin_interval_time + , '
' || TO_CHAR(s.end_interval_time, 'mm/dd/yyyy HH24:MI:SS') || '
' end_interval_time + , ROUND(EXTRACT(DAY FROM s.end_interval_time - s.begin_interval_time) * 1440 + + EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 + + EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) + + EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60, 2) elapsed_time + , ROUND((e.value - b.value)/1000000/60, 2) db_time + , '
' || + ROUND(((((e.value - b.value)/1000000/60) / (EXTRACT(DAY FROM s.end_interval_time - s.begin_interval_time) * 1440 + + EXTRACT(HOUR FROM s.end_interval_time - s.begin_interval_time) * 60 + + EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) + + EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60) ) * 100), 2) + || ' %
' pct_db_time +FROM + dba_hist_snapshot s + , gv$instance i + , dba_hist_sys_time_model e + , dba_hist_sys_time_model b +WHERE + i.instance_number = s.instance_number + AND e.snap_id = s.snap_id + AND b.snap_id = s.snap_id - 1 + AND e.stat_id = b.stat_id + AND e.instance_number = b.instance_number + AND e.instance_number = s.instance_number + AND e.stat_name = 'DB time' +ORDER BY + i.instance_name + , s.snap_id; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - AWR SNAPSHOT SIZE ESTIMATES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt AWR Snapshot Size Estimates


+ +DECLARE + + CURSOR get_instances IS + SELECT COUNT(DISTINCT instance_number) + FROM wrm$_database_instance; + + CURSOR get_wr_control_info IS + SELECT snapint_num, retention_num + FROM wrm$_wr_control; + + CURSOR get_snaps IS + SELECT + SUM(all_snaps) + , SUM(good_snaps) + , SUM(today_snaps) + , SYSDATE - MIN(begin_interval_time) + FROM + (SELECT + 1 AS all_snaps + , (CASE WHEN s.status = 0 THEN 1 ELSE 0 END) AS good_snaps + , (CASE WHEN (s.end_interval_time > SYSDATE - 1) THEN 1 ELSE 0 END) AS today_snaps + , CAST(s.begin_interval_time AS DATE) AS begin_interval_time + FROM wrm$_snapshot s + ); + + CURSOR sysaux_occ_usage IS + SELECT + occupant_name + , schema_name + , space_usage_kbytes/1024 space_usage_mb + FROM + v$sysaux_occupants + ORDER BY + space_usage_kbytes DESC + , occupant_name; + + mb_format CONSTANT VARCHAR2(30) := '99,999,990.0'; + kb_format CONSTANT VARCHAR2(30) := '999,999,990'; + pct_format CONSTANT VARCHAR2(30) := '990.0'; + snapshot_interval NUMBER; + retention_interval NUMBER; + all_snaps NUMBER; + awr_size NUMBER; + snap_size NUMBER; + awr_average_size NUMBER; + est_today_snaps NUMBER; + awr_size_past24 NUMBER; + good_snaps NUMBER; + today_snaps NUMBER; + num_days NUMBER; + num_instances NUMBER; + +BEGIN + + OPEN get_instances; + FETCH get_instances INTO num_instances; + CLOSE get_instances; + + OPEN get_wr_control_info; + FETCH get_wr_control_info INTO snapshot_interval, retention_interval; + CLOSE get_wr_control_info; + + OPEN get_snaps; + FETCH get_snaps INTO all_snaps, good_snaps, today_snaps, num_days; + CLOSE get_snaps; + + FOR occ_rec IN sysaux_occ_usage + LOOP + IF (occ_rec.occupant_name = 'SM/AWR') THEN + awr_size := occ_rec.space_usage_mb; + END IF; + END LOOP; + + snap_size := awr_size/all_snaps; + awr_average_size := snap_size*86400/snapshot_interval; + + today_snaps := today_snaps / num_instances; + + IF (num_days < 1) THEN + est_today_snaps := ROUND(today_snaps / num_days); + ELSE + est_today_snaps := today_snaps; + END IF; + + awr_size_past24 := snap_size * est_today_snaps; + + DBMS_OUTPUT.PUT_LINE(''); + + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE('' ); + DBMS_OUTPUT.PUT_LINE('' ); + IF (num_instances > 1) THEN + DBMS_OUTPUT.PUT_LINE('' ); + END IF; + + DBMS_OUTPUT.PUT_LINE(''); + + DBMS_OUTPUT.PUT_LINE('' ); + DBMS_OUTPUT.PUT_LINE('' ); + IF (num_instances > 1) THEN + DBMS_OUTPUT.PUT_LINE('' ); + END IF; + + DBMS_OUTPUT.PUT_LINE('
Estimates based on ' || ROUND(snapshot_interval/60) || ' minute snapshot intervals
AWR size/day' + || TO_CHAR(awr_average_size, mb_format) + || ' MB(' || TRIM(TO_CHAR(snap_size*1024, kb_format)) || ' K/snap * ' + || ROUND(86400/snapshot_interval) || ' snaps/day)
AWR size/wk' + || TO_CHAR(awr_average_size * 7, mb_format) + || ' MB(size_per_day * 7) per instance
AWR size/wk' + || TO_CHAR(awr_average_size * 7 * num_instances, mb_format) + || ' MB(size_per_day * 7) per database
Estimates based on ' || ROUND(today_snaps) || ' snaps in past 24 hours
AWR size/day' + || TO_CHAR(awr_size_past24, mb_format) + || ' MB(' + || TRIM(TO_CHAR(snap_size*1024, kb_format)) || ' K/snap and ' + || ROUND(today_snaps) || ' snaps in past ' + || ROUND(least(num_days*24,24),1) || ' hours)
AWR size/wk' + || TO_CHAR(awr_size_past24 * 7, mb_format) + || ' MB(size_per_day * 7) per instance
AWR size/wk' + || TO_CHAR(awr_size_past24 * 7 * num_instances, mb_format) + || ' MB(size_per_day * 7) per database
'); + +END; +/ + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - AWR BASELINES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt AWR Baselines


+ +prompt Use the DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE procedure to create a named baseline. +prompt A baseline (also known as a preserved snapshot set) is a pair of AWR snapshots that represents a +prompt specific period of database usage. The Oracle database server will exempt the AWR snapshots +prompt assigned to a specific baseline from the automated purge routine. The main purpose of a baseline +prompt is to preserve typical run-time statistics in the AWR repository which can then be compared to +prompt current performance or similar periods in the past. + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN dbbid FORMAT a75 HEAD 'Database ID' ENTMAP off +COLUMN dbb_name FORMAT a75 HEAD 'Database Name' ENTMAP off +COLUMN baseline_id HEAD 'Baseline ID' ENTMAP off +COLUMN baseline_name FORMAT a75 HEAD 'Baseline Name' ENTMAP off +COLUMN start_snap_id HEAD 'Beginning Snapshot ID' ENTMAP off +COLUMN start_snap_time FORMAT a75 HEAD 'Beginning Snapshot Time' ENTMAP off +COLUMN end_snap_id HEAD 'Ending Snapshot ID' ENTMAP off +COLUMN end_snap_time FORMAT a75 HEAD 'Ending Snapshot Time' ENTMAP off + +SELECT + '
' || b.dbid || '
' dbbid + , d.name dbb_name + , b.baseline_id baseline_id + , baseline_name baseline_name + , b.start_snap_id start_snap_id + , '
' || TO_CHAR(b.start_snap_time, 'mm/dd/yyyy HH24:MI:SS') || '
' start_snap_time + , b.end_snap_id end_snap_id + , '
' || TO_CHAR(b.end_snap_time, 'mm/dd/yyyy HH24:MI:SS') || '
' end_snap_time +FROM + dba_hist_baseline b + , v$database d +WHERE + b.dbid = d.dbid +ORDER BY + dbbid + , b.baseline_id; + +prompt
[Top]

+ + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< SESSIONS >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

Sessions
+ + +-- +----------------------------------------------------------------------------+ +-- | - CURRENT SESSIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Current Sessions
+ +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a45 HEADING 'Instance Name' ENTMAP off +COLUMN thread_number_print FORMAT a45 HEADING 'Thread Number' ENTMAP off +COLUMN count FORMAT a45 HEADING 'Current No. of Processes' ENTMAP off +COLUMN value FORMAT a45 HEADING 'Max No. of Processes' ENTMAP off +COLUMN pct_usage FORMAT a45 HEADING '% Usage' ENTMAP off + +SELECT + '
' || a.instance_name || '
' instance_name_print + , '
' || a.thread# || '
' thread_number_print + , '
' || TO_CHAR(a.count) || '
' count + , '
' || b.value || '
' value + , '
' || TO_CHAR(ROUND(100*(a.count / b.value), 2)) || '%
' pct_usage +FROM + (select count(*) count, a1.inst_id, a2.instance_name, a2.thread# + from gv$session a1 + , gv$instance a2 + where a1.inst_id = a2.inst_id + group by a1.inst_id + , a2.instance_name + , a2.thread#) a + , (select value, inst_id from gv$parameter where name='processes') b +WHERE + a.inst_id = b.inst_id +ORDER BY + a.instance_name; + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - USER SESSION MATRIX - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt User Session Matrix


+ +prompt User sessions (excluding SYS and background processes) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a75 HEADING 'Instance Name' ENTMAP off +COLUMN thread_number_print FORMAT a75 HEADING 'Thread Number' ENTMAP off +COLUMN username FORMAT a79 HEADING 'Oracle User' ENTMAP off +COLUMN num_user_sess FORMAT 999,999,999,999 HEADING 'Total Number of Logins' ENTMAP off +COLUMN count_a FORMAT 999,999,999 HEADING 'Active Logins' ENTMAP off +COLUMN count_i FORMAT 999,999,999 HEADING 'Inactive Logins' ENTMAP off +COLUMN count_k FORMAT 999,999,999 HEADING 'Killed Logins' ENTMAP off + +BREAK ON report ON instance_name_print ON thread_number_print + +SELECT + '
' || i.instance_name || '
' instance_name_print + , '
' || i.thread# || '
' thread_number_print + , '
' || NVL(sess.username, '[B.G. Process]') || '
' username + , count(*) num_user_sess + , NVL(act.count, 0) count_a + , NVL(inact.count, 0) count_i + , NVL(killed.count, 0) count_k +FROM + gv$session sess + , gv$instance i + , (SELECT count(*) count, NVL(username, '[B.G. Process]') username, inst_id + FROM gv$session + WHERE status = 'ACTIVE' + GROUP BY username, inst_id) act + , (SELECT count(*) count, NVL(username, '[B.G. Process]') username, inst_id + FROM gv$session + WHERE status = 'INACTIVE' + GROUP BY username, inst_id) inact + , (SELECT count(*) count, NVL(username, '[B.G. Process]') username, inst_id + FROM gv$session + WHERE status = 'KILLED' + GROUP BY username, inst_id) killed +WHERE + sess.inst_id = i.inst_id + AND ( + NVL(sess.username, '[B.G. Process]') = act.username (+) + AND + sess.inst_id = act.inst_id (+) + ) + AND ( + NVL(sess.username, '[B.G. Process]') = inact.username (+) + AND + sess.inst_id = inact.inst_id (+) + ) + AND ( + NVL(sess.username, '[B.G. Process]') = killed.username (+) + AND + sess.inst_id = killed.inst_id (+) + ) + AND sess.username NOT IN ('SYS') +GROUP BY + i.instance_name + , i.thread# + , sess.username + , act.count + , inact.count + , killed.count +ORDER BY + i.instance_name + , i.thread# + , sess.username; + + +prompt
[Top]

+ + + + +-- +----------------------------------------------------------------------------+ +-- | - ENABLED TRACES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Enabled Traces


+ +prompt End-to-End Application Tracing from View DBA_ENABLED_TRACES. +prompt
  • Trace Type: Possible values are CLIENT_ID, SESSION, SERVICE, SERVICE_MODULE, SERVICE_MODULE_ACTION, and DATABASE, based on the type of tracing enabled. +prompt
  • Primary ID: Specific client identifier (username) or service name. +prompt

    + +prompt Application tracing is enabled using the DBMS_MONITOR package and the following procedures: +prompt

  • CLIENT_ID_TRACE_ENABLE: Enable tracing based on client identifier (username). +prompt
  • CLIENT_ID_TRACE_DISABLE: Disable client identifier tracing. +prompt
  • SESSION_TRACE_ENABLE: Enable tracing based on SID and SERIAL# of V$SESSION. +prompt
  • SESSION_TRACE_DISABLE: Disable session tracing. +prompt
  • SERV_MOD_ACT_TRACE_ENABLE: Enable tracing for a given combination of service name, module, and action. +prompt
  • SERV_MOD_ACT_TRACE_DISABLE: Disable service, module, and action tracing. +prompt
  • DATABASE_TRACE_ENABLE: Enable tracing for the entire database. +prompt
  • DATABASE_TRACE_DISABLE: Disable database tracing. +prompt

    + +prompt Hint: In a shared environment where you have more than one session to trace, it is +prompt possible to end up with many trace files when tracing is enabled (i.e. connection pools). +prompt Oracle10g introduces the trcsess command-line utility to combine all the relevant +prompt trace files based on a session or client identifier or the service name, module name, and +prompt action name hierarchy combination. The output trace file from the trcsess command can then be +prompt sent to tkprof for a formatted output. Type trcsess at the command-line without any arguments to +prompt show the parameters and usage. + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN trace_type FORMAT a75 HEADING 'Trace Type' ENTMAP off +COLUMN primary_id FORMAT a75 HEADING 'Primary ID' ENTMAP off +COLUMN qualifier_id1 FORMAT a75 HEADING 'Module Name' ENTMAP off +COLUMN qualifier_id2 FORMAT a75 HEADING 'Action Name' ENTMAP off +COLUMN waits FORMAT a75 HEADING 'Waits?' ENTMAP off +COLUMN binds FORMAT a75 HEADING 'Binds?' ENTMAP off +COLUMN instance_name_print FORMAT a75 HEADING 'Instance Name' ENTMAP off + +SELECT + '

    ' || trace_type || '
    ' trace_type + , '
    ' || NVL(primary_id, '
    ') || '
    ' primary_id + , '
    ' || NVL(qualifier_id1, '
    ') || '
    ' qualifier_id1 + , '
    ' || NVL(qualifier_id2, '
    ') || '
    ' qualifier_id2 + , '
    ' || waits || '
    ' waits + , '
    ' || binds || '
    ' binds + , '
    ' || NVL(instance_name, '
    ') || '
    ' instance_name_print +FROM + dba_enabled_traces +ORDER BY + trace_type + , primary_id + , qualifier_id1 + , qualifier_id2; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - ENABLED AGGREGATIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Enabled Aggregations


    + +prompt Statistics Aggregation from View DBA_ENABLED_AGGREGATIONS. +prompt
  • Aggregation Type: Possible values are CLIENT_ID, SERVICE_MODULE, and SERVICE_MODULE_ACTION, based on the type of statistics being gathered. +prompt
  • Primary ID: Specific client identifier (username) or service name. +prompt

    + +prompt Statistics aggregation is enabled using the DBMS_MONITOR package and the following procedures. +prompt Note that statistics gathering is global for the database and is persistent across instance starts +prompt and restarts. +prompt

  • CLIENT_ID_STAT_ENABLE: Enable statistics gathering based on client identifier (username). +prompt
  • CLIENT_ID_STAT_DISABLE: Disable client identifier statistics gathering. +prompt
  • SERV_MOD_ACT_STAT_ENABLE: Enable statistics gathering for a given combination of service name, module, and action. +prompt
  • SERV_MOD_ACT_STAT_DISABLE: Disable service, module, and action statistics gathering. +prompt

    + +prompt Hint: While the DBA_ENABLED_AGGREGATIONS provides global statistics for currently enabled +prompt statistics, several other views can be used to query statistics aggregation values: V$CLIENT_STATS, +prompt V$SERVICE_STATS, V$SERV_MOD_ACT_STATS, and V$SERVICEMETRIC. + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN aggregation_type FORMAT a75 HEADING 'Aggregation Type' ENTMAP off +COLUMN primary_id FORMAT a75 HEADING 'Primary ID' ENTMAP off +COLUMN qualifier_id1 FORMAT a75 HEADING 'Module Name' ENTMAP off +COLUMN qualifier_id2 FORMAT a75 HEADING 'Action Name' ENTMAP off + +SELECT + '

    ' || aggregation_type || '
    ' aggregation_type + , '
    ' || NVL(primary_id, '
    ') || '
    ' primary_id + , '
    ' || NVL(qualifier_id1, '
    ') || '
    ' qualifier_id1 + , '
    ' || NVL(qualifier_id2, '
    ') || '
    ' qualifier_id2 +FROM + dba_enabled_aggregations +ORDER BY + aggregation_type + , primary_id + , qualifier_id1 + , qualifier_id2; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< SECURITY >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

    Security
    + + +-- +----------------------------------------------------------------------------+ +-- | - USER ACCOUNTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt User Accounts
    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEAD 'Username' ENTMAP off +COLUMN account_status FORMAT a75 HEAD 'Account Status' ENTMAP off +COLUMN expiry_date FORMAT a75 HEAD 'Expire Date' ENTMAP off +COLUMN default_tablespace FORMAT a75 HEAD 'Default Tbs.' ENTMAP off +COLUMN temporary_tablespace FORMAT a75 HEAD 'Temp Tbs.' ENTMAP off +COLUMN created FORMAT a75 HEAD 'Created On' ENTMAP off +COLUMN profile FORMAT a75 HEAD 'Profile' ENTMAP off +COLUMN sysdba FORMAT a75 HEAD 'SYSDBA' ENTMAP off +COLUMN sysoper FORMAT a75 HEAD 'SYSOPER' ENTMAP off + +SELECT distinct + '' || a.username || '' username + , DECODE( a.account_status + , 'OPEN' + , '
    ' || a.account_status || '
    ' + , '
    ' || a.account_status || '
    ') account_status + , '
    ' || NVL(TO_CHAR(a.expiry_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' expiry_date + , a.default_tablespace default_tablespace + , a.temporary_tablespace temporary_tablespace + , '
    ' || TO_CHAR(a.created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created + , a.profile profile + , '
    ' || NVL(DECODE(p.sysdba,'TRUE', 'TRUE',''), '
    ') || '
    ' sysdba + , '
    ' || NVL(DECODE(p.sysoper,'TRUE','TRUE',''), '
    ') || '
    ' sysoper +FROM + dba_users a + , v$pwfile_users p +WHERE + p.username (+) = a.username +ORDER BY + username; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - USERS WITH DBA PRIVILEGES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Users With DBA Privileges


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN grantee FORMAT a70 HEADING 'Grantee' ENTMAP off +COLUMN granted_role FORMAT a35 HEADING 'Granted Role' ENTMAP off +COLUMN admin_option FORMAT a75 HEADING 'Admin. Option?' ENTMAP off +COLUMN default_role FORMAT a75 HEADING 'Default Role?' ENTMAP off + +SELECT + '' || grantee || '' grantee + , '
    ' || granted_role || '
    ' granted_role + , DECODE( admin_option + , 'YES' + , '
    ' || admin_option || '
    ' + , 'NO' + , '
    ' || admin_option || '
    ' + , '
    ' || admin_option || '
    ') admin_option + , DECODE( default_role + , 'YES' + , '
    ' || default_role || '
    ' + , 'NO' + , '
    ' || default_role || '
    ' + , '
    ' || default_role || '
    ') default_role +FROM + dba_role_privs +WHERE + granted_role = 'DBA' +ORDER BY + grantee + , granted_role; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - ROLES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Roles


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN role FORMAT a70 HEAD 'Role Name' ENTMAP off +COLUMN grantee FORMAT a35 HEAD 'Grantee' ENTMAP off +COLUMN admin_option FORMAT a75 HEAD 'Admin Option?' ENTMAP off +COLUMN default_role FORMAT a75 HEAD 'Default Role?' ENTMAP off + +BREAK ON role + +SELECT + '' || b.role || '' role + , a.grantee grantee + , DECODE( a.admin_option + , null + , '
    ' + , 'YES' + , '
    ' || a.admin_option || '
    ' + , 'NO' + , '
    ' || a.admin_option || '
    ' + , '
    ' || a.admin_option || '
    ') admin_option + , DECODE( a.default_role + , null + , '
    ' + , 'YES' + , '
    ' || a.default_role || '
    ' + , 'NO' + , '
    ' || a.default_role || '
    ' + , '
    ' || a.default_role || '
    ') default_role +FROM + dba_role_privs a + , dba_roles b +WHERE + granted_role(+) = b.role +ORDER BY + b.role + , a.grantee; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DEFAULT PASSWORDS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Default Passwords


    + +prompt User(s) with default password + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username HEADING 'Username' ENTMAP off +COLUMN account_status FORMAT a75 HEADING 'Account Status' ENTMAP off + +SELECT + '' || username || '' username + , DECODE( account_status + , 'OPEN' + , '
    ' || account_status || '
    ' + , '
    ' || account_status || '
    ') account_status +FROM dba_users +WHERE password IN ( + 'E066D214D5421CCC' -- dbsnmp + , '24ABAB8B06281B4C' -- ctxsys + , '72979A94BAD2AF80' -- mdsys + , 'C252E8FA117AF049' -- odm + , 'A7A32CD03D3CE8D5' -- odm_mtr + , '88A2B2C183431F00' -- ordplugins + , '7EFA02EC7EA6B86F' -- ordsys + , '4A3BA55E08595C81' -- outln + , 'F894844C34402B67' -- scott + , '3F9FBD883D787341' -- wk_proxy + , '79DF7A1BD138CF11' -- wk_sys + , '7C9BA362F8314299' -- wmsys + , '88D8364765FCE6AF' -- xdb + , 'F9DA8977092B7B81' -- tracesvr + , '9300C0977D7DC75E' -- oas_public + , 'A97282CE3D94E29E' -- websys + , 'AC9700FD3F1410EB' -- lbacsys + , 'E7B5D92911C831E1' -- rman + , 'AC98877DE1297365' -- perfstat + , 'D4C5016086B2DC6A' -- sys + , 'D4DF7931AB130E37') -- system +ORDER BY + username; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DB LINKS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt DB Links


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN db_link FORMAT a75 HEADING 'DB Link Name' ENTMAP off +COLUMN username HEADING 'Username' ENTMAP off +COLUMN host HEADING 'Host' ENTMAP off +COLUMN created FORMAT a75 HEADING 'Created' ENTMAP off + +BREAK ON owner + +SELECT + '' || owner || '' owner + , db_link + , username + , host + , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created +FROM dba_db_links +ORDER BY owner, db_link; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< OBJECTS >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

    Objects
    + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECT SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Object Summary
    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a60 HEADING 'Owner' ENTMAP off +COLUMN object_type FORMAT a25 HEADING 'Object Type' ENTMAP off +COLUMN obj_count FORMAT 999,999,999,999 HEADING 'Object Count' ENTMAP off + +BREAK ON report ON owner SKIP 2 +-- compute sum label "" of obj_count on owner +-- compute sum label 'Grand Total: ' of obj_count on report +COMPUTE sum LABEL 'Total: ' OF obj_count ON report + +SELECT + '' || owner || '' owner + , object_type object_type + , count(*) obj_count +FROM + dba_objects +GROUP BY + owner + , object_type +ORDER BY + owner + , object_type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - SEGMENT SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Segment Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a50 HEADING 'Owner' ENTMAP off +COLUMN segment_type FORMAT a25 HEADING 'Segment Type' ENTMAP off +COLUMN seg_count FORMAT 999,999,999,999 HEADING 'Segment Count' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in Bytes)' ENTMAP off + +BREAK ON report ON owner SKIP 2 +-- COMPUTE sum LABEL "" OF seg_count bytes ON owner +COMPUTE sum LABEL 'Total: ' OF seg_count bytes ON report + +SELECT + '' || owner || '' owner + , segment_type segment_type + , count(*) seg_count + , sum(bytes) bytes +FROM + dba_segments +GROUP BY + owner + , segment_type +ORDER BY + owner + , segment_type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 100 SEGMENTS (BY SIZE) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 100 Segments (by size)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN partition_name HEADING 'Partition Name' ENTMAP off +COLUMN segment_type HEADING 'Segment Type' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999,999 HEADING 'Extents' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF bytes extents ON report + +SELECT + a.owner + , a.segment_name + , a.partition_name + , a.segment_type + , a.tablespace_name + , a.bytes + , a.extents +FROM + (select + b.owner + , b.segment_name + , b.partition_name + , b.segment_type + , b.tablespace_name + , b.bytes + , b.extents + from + dba_segments b + order by + b.bytes desc + ) a +WHERE + rownum < 100; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 100 SEGMENTS (BY EXTENTS) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 100 Segments (by number of extents)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN partition_name HEADING 'Partition Name' ENTMAP off +COLUMN segment_type HEADING 'Segment Type' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999,999 HEADING 'Extents' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF extents bytes ON report + +SELECT + a.owner + , a.segment_name + , a.partition_name + , a.segment_type + , a.tablespace_name + , a.extents + , a.bytes +FROM + (select + b.owner + , b.segment_name + , b.partition_name + , b.segment_type + , b.tablespace_name + , b.bytes + , b.extents + from + dba_segments b + order by + b.extents desc + ) a +WHERE + rownum < 100; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DIRECTORIES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Directories


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN directory_name FORMAT a75 HEADING 'Directory Name' ENTMAP off +COLUMN directory_path HEADING 'Directory Path' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || owner || '
    ' owner + , '' || directory_name || '' directory_name + , '' || directory_path || '' directory_path +FROM + dba_directories +ORDER BY + owner + , directory_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DIRECTORY PRIVILEGES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Directory Privileges


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN table_name FORMAT a75 HEADING 'Directory Name' ENTMAP off +COLUMN grantee FORMAT a75 HEADING 'Grantee' ENTMAP off +COLUMN privilege FORMAT a75 HEADING 'Privilege' ENTMAP off +COLUMN grantable FORMAT a75 HEADING 'Grantable?' ENTMAP off + +BREAK ON report ON table_name ON grantee + +SELECT + '' || table_name || '' table_name + , '' || grantee || '' grantee + , privilege privilege + , DECODE( grantable + , 'YES' + , '
    ' || grantable || '
    ' + , 'NO' + , '
    ' || grantable || '
    ' + , '
    ' || grantable || '
    ') grantable +FROM + dba_tab_privs +WHERE + privilege IN ('READ', 'WRITE') +ORDER BY + table_name + , grantee + , privilege; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - LIBRARIES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Libraries


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN library_name FORMAT a75 HEADING 'Library Name' ENTMAP off +COLUMN file_spec HEADING 'File Spec' ENTMAP off +COLUMN dynamic FORMAT a75 HEADING 'Dynamic?' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Status' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || owner || '
    ' owner + , '' || library_name || '' library_name + , file_spec file_spec + , '
    ' || dynamic || '
    ' dynamic + , DECODE( status + , 'VALID' + , '
    ' || status || '
    ' + , '
    ' || status || '
    ' ) status +FROM + dba_libraries +ORDER BY + owner + , library_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TYPES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Types


    + +prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP off +COLUMN typecode FORMAT a75 HEADING 'Type Code' ENTMAP off +COLUMN attributes FORMAT a75 HEADING 'Num. Attributes' ENTMAP off +COLUMN methods FORMAT a75 HEADING 'Num. Methods' ENTMAP off +COLUMN predefined FORMAT a75 HEADING 'Predefined?' ENTMAP off +COLUMN incomplete FORMAT a75 HEADING 'Incomplete?' ENTMAP off +COLUMN final FORMAT a75 HEADING 'Final?' ENTMAP off +COLUMN instantiable FORMAT a75 HEADING 'Instantiable?' ENTMAP off +COLUMN supertype_owner FORMAT a75 HEADING 'Super Owner' ENTMAP off +COLUMN supertype_name FORMAT a75 HEADING 'Super Name' ENTMAP off +COLUMN local_attributes FORMAT a75 HEADING 'Local Attributes' ENTMAP off +COLUMN local_methods FORMAT a75 HEADING 'Local Methods' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || t.owner || '
    ' owner + , '
    ' || t.type_name || '
    ' type_name + , '
    ' || t.typecode || '
    ' typecode + , '
    ' || TO_CHAR(t.attributes, '999,999') || '
    ' attributes + , '
    ' || TO_CHAR(t.methods, '999,999') || '
    ' methods + , '
    ' || t.predefined || '
    ' predefined + , '
    ' || t.incomplete || '
    ' incomplete + , '
    ' || t.final || '
    ' final + , '
    ' || t.instantiable || '
    ' instantiable + , '
    ' || NVL(t.supertype_owner, '
    ') || '
    ' supertype_owner + , '
    ' || NVL(t.supertype_name, '
    ') || '
    ' supertype_name + , '
    ' || NVL(TO_CHAR(t.local_attributes, '999,999'), '
    ') || '
    ' local_attributes + , '
    ' || NVL(TO_CHAR(t.local_methods, '999,999'), '
    ') || '
    ' local_methods +FROM + dba_types t +WHERE + t.owner NOT IN ( 'CTXSYS' + , 'DBSNMP' + , 'DMSYS' + , 'EXFSYS' + , 'IX' + , 'LBACSYS' + , 'MDSYS' + , 'OLAPSYS' + , 'ORDSYS' + , 'OUTLN' + , 'SYS' + , 'SYSMAN' + , 'SYSTEM' + , 'WKSYS' + , 'WMSYS' + , 'XDB') +ORDER BY + t.owner + , t.type_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TYPE ATTRIBUTES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Type Attributes


    + +prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP off +COLUMN typecode FORMAT a75 HEADING 'Type Code' ENTMAP off +COLUMN attribute_name FORMAT a75 HEADING 'Attribute Name' ENTMAP off +COLUMN attribute_datatype FORMAT a75 HEADING 'Attribute Data Type' ENTMAP off +COLUMN inherited FORMAT a75 HEADING 'Inherited?' ENTMAP off + +BREAK ON report ON owner ON type_name ON typecode + +SELECT + '
    ' || t.owner || '
    ' owner + , '
    ' || t.type_name || '
    ' type_name + , '
    ' || t.typecode || '
    ' typecode + , '
    ' || a.attr_name || '
    ' attribute_name + , (CASE + WHEN (a.length IS NOT NULL) + THEN a.attr_type_name || '(' || a.length || ')' + WHEN (a.attr_type_name='NUMBER' AND (a.precision IS NOT NULL AND a.scale IS NOT NULL)) + THEN a.attr_type_name || '(' || a.precision || ',' || a.scale || ')' + WHEN (a.attr_type_name='NUMBER' AND (a.precision IS NOT NULL AND a.scale IS NULL)) + THEN a.attr_type_name || '(' || a.precision || ')' + ELSE + a.attr_type_name + END) attribute_datatype + , DECODE( a.inherited + , 'YES' + , '
    ' || a.inherited || '
    ' + , 'NO' + , '
    ' || a.inherited || '
    ' + , '
    ' || a.inherited || '
    ') inherited +FROM + dba_types t + , dba_type_attrs a +WHERE + t.owner = a.owner + AND t.type_name = a.type_name + AND t.owner NOT IN ( 'CTXSYS' + , 'DBSNMP' + , 'DMSYS' + , 'EXFSYS' + , 'IX' + , 'LBACSYS' + , 'MDSYS' + , 'OLAPSYS' + , 'ORDSYS' + , 'OUTLN' + , 'SYS' + , 'SYSMAN' + , 'SYSTEM' + , 'WKSYS' + , 'WMSYS' + , 'XDB') +ORDER BY + t.owner + , t.type_name + , t.typecode + , a.attr_no; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TYPE METHODS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Type Methods


    + +prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP off +COLUMN typecode FORMAT a75 HEADING 'Type Code' ENTMAP off +COLUMN method_name FORMAT a75 HEADING 'Method Name' ENTMAP off +COLUMN method_type FORMAT a75 HEADING 'Method Type' ENTMAP off +COLUMN num_parameters FORMAT a75 HEADING 'Num. Parameters' ENTMAP off +COLUMN results FORMAT a75 HEADING 'Results' ENTMAP off +COLUMN final FORMAT a75 HEADING 'Final?' ENTMAP off +COLUMN instantiable FORMAT a75 HEADING 'Instantiable?' ENTMAP off +COLUMN overriding FORMAT a75 HEADING 'Overriding?' ENTMAP off +COLUMN inherited FORMAT a75 HEADING 'Inherited?' ENTMAP off + +BREAK ON report ON owner ON type_name ON typecode + +SELECT + '
    ' || t.owner || '
    ' owner + , '
    ' || t.type_name || '
    ' type_name + , '
    ' || t.typecode || '
    ' typecode + , '
    ' || m.method_name || '
    ' method_name + , '
    ' || m.method_type || '
    ' method_type + , '
    ' || TO_CHAR(m.parameters, '999,999') || '
    ' num_parameters + , '
    ' || TO_CHAR(m.results, '999,999') || '
    ' results + , '
    ' || m.final || '
    ' final + , '
    ' || m.instantiable || '
    ' instantiable + , '
    ' || m.overriding || '
    ' overriding + , DECODE( m.inherited + , 'YES' + , '
    ' || m.inherited || '
    ' + , 'NO' + , '
    ' || m.inherited || '
    ' + , '
    ' || m.inherited || '
    ') inherited +FROM + dba_types t + , dba_type_methods m +WHERE + t.owner = m.owner + AND t.type_name = m.type_name + AND t.owner NOT IN ( 'CTXSYS' + , 'DBSNMP' + , 'DMSYS' + , 'EXFSYS' + , 'IX' + , 'LBACSYS' + , 'MDSYS' + , 'OLAPSYS' + , 'ORDSYS' + , 'OUTLN' + , 'SYS' + , 'SYSMAN' + , 'SYSTEM' + , 'WKSYS' + , 'WMSYS' + , 'XDB') +ORDER BY + t.owner + , t.type_name + , t.typecode + , m.method_no; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - COLLECTIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Collections


    + +prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP off +COLUMN coll_type FORMAT a75 HEADING 'Collection Type' ENTMAP off +COLUMN upper_bound FORMAT a75 HEADING 'VARRAY Limit' ENTMAP off +COLUMN elem_type_owner FORMAT a75 HEADING 'Element Type Owner' ENTMAP off +COLUMN elem_datatype FORMAT a75 HEADING 'Element Data Type' ENTMAP off +COLUMN character_set_name FORMAT a75 HEADING 'Character Set' ENTMAP off +COLUMN elem_storage FORMAT a75 HEADING 'Element Storage' ENTMAP off +COLUMN nulls_stored FORMAT a75 HEADING 'Nulls Stored?' ENTMAP off + +BREAK ON report ON owner ON type_name + +SELECT + '
    ' || c.owner || '
    ' owner + , '
    ' || c.type_name || '
    ' type_name + , '
    ' || c.coll_type || '
    ' coll_type + , '
    ' || NVL(TO_CHAR(c.upper_bound, '9,999,999,999'), '
    ') || '
    ' upper_bound + , '
    ' || NVL(c.elem_type_owner, '
    ') || '
    ' elem_type_owner + , (CASE + WHEN (c.length IS NOT NULL) + THEN c.elem_type_name || '(' || c.length || ')' + WHEN (c.elem_type_name='NUMBER' AND (c.precision IS NOT NULL AND c.scale IS NOT NULL)) + THEN c.elem_type_name || '(' || c.precision || ',' || c.scale || ')' + WHEN (c.elem_type_name='NUMBER' AND (c.precision IS NOT NULL AND c.scale IS NULL)) + THEN c.elem_type_name || '(' || c.precision || ')' + ELSE + c.elem_type_name + END) elem_datatype + , '
    ' || NVL(c.character_set_name, '
    ') || '
    ' character_set_name + , '
    ' || NVL(c.elem_storage, '
    ') || '
    ' elem_storage + , DECODE( c.nulls_stored + , 'YES' + , '
    ' || c.nulls_stored || '
    ' + , 'NO' + , '
    ' || c.nulls_stored || '
    ' + , '
    ' || c.nulls_stored || '
    ') nulls_stored +FROM + dba_coll_types c +WHERE + c.owner NOT IN ( 'CTXSYS' + , 'DBSNMP' + , 'DMSYS' + , 'EXFSYS' + , 'IX' + , 'LBACSYS' + , 'MDSYS' + , 'OLAPSYS' + , 'ORDSYS' + , 'OUTLN' + , 'SYS' + , 'SYSMAN' + , 'SYSTEM' + , 'WKSYS' + , 'WMSYS' + , 'XDB') +ORDER BY + c.owner + , c.type_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - LOB SEGMENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt LOB Segments


    + +prompt Excluding all internal system schemas (i.e. CTXSYS, MDSYS, SYS, SYSTEM) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a85 HEADING 'Owner' ENTMAP off +COLUMN table_name FORMAT a75 HEADING 'Table Name' ENTMAP off +COLUMN column_name FORMAT a75 HEADING 'Column Name' ENTMAP off +COLUMN segment_name FORMAT a125 HEADING 'LOB Segment Name' ENTMAP off +COLUMN tablespace_name FORMAT a75 HEADING 'Tablespace Name' ENTMAP off +COLUMN lob_segment_bytes FORMAT a75 HEADING 'Segment Size' ENTMAP off +COLUMN index_name FORMAT a125 HEADING 'LOB Index Name' ENTMAP off +COLUMN in_row FORMAT a75 HEADING 'In Row?' ENTMAP off + +BREAK ON report ON owner ON table_name + +SELECT + '
    ' || l.owner || '
    ' owner + , '
    ' || l.table_name || '
    ' table_name + , '
    ' || l.column_name || '
    ' column_name + , '
    ' || l.segment_name || '
    ' segment_name + , '
    ' || s.tablespace_name || '
    ' tablespace_name + , '
    ' || TO_CHAR(s.bytes, '999,999,999,999,999') || '
    ' lob_segment_bytes + , '
    ' || l.index_name || '
    ' index_name + , DECODE( l.in_row + , 'YES' + , '
    ' || l.in_row || '
    ' + , 'NO' + , '
    ' || l.in_row || '
    ' + , '
    ' || l.in_row || '
    ') in_row +FROM + dba_lobs l + , dba_segments s +WHERE + l.owner = s.owner + AND l.segment_name = s.segment_name + AND l.owner NOT IN ( 'CTXSYS' + , 'DBSNMP' + , 'DMSYS' + , 'EXFSYS' + , 'IX' + , 'LBACSYS' + , 'MDSYS' + , 'OLAPSYS' + , 'ORDSYS' + , 'OUTLN' + , 'SYS' + , 'SYSMAN' + , 'SYSTEM' + , 'WKSYS' + , 'WMSYS' + , 'XDB') +ORDER BY + l.owner + , l.table_name + , l.column_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS UNABLE TO EXTEND - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects Unable to Extend


    + +prompt Segments that cannot extend because of MAXEXTENTS or not enough space + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN segment_type HEADING 'Segment Type' ENTMAP off +COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next Extent' ENTMAP off +COLUMN max FORMAT 999,999,999,999,999 HEADING 'Max. Piece Size' ENTMAP off +COLUMN sum FORMAT 999,999,999,999,999 HEADING 'Sum of Bytes' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Num. of Extents' ENTMAP off +COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max Extents' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || ds.owner || '
    ' owner + , ds.tablespace_name tablespace_name + , ds.segment_name segment_name + , ds.segment_type segment_type + , ds.next_extent next_extent + , NVL(dfs.max, 0) max + , NVL(dfs.sum, 0) sum + , ds.extents extents + , ds.max_extents max_extents +FROM + dba_segments ds + , (select + max(bytes) max + , sum(bytes) sum + , tablespace_name + from + dba_free_space + group by + tablespace_name + ) dfs +WHERE + (ds.next_extent > nvl(dfs.max, 0) + OR + ds.extents >= ds.max_extents) + AND ds.tablespace_name = dfs.tablespace_name (+) + AND ds.owner NOT IN ('SYS','SYSTEM') +ORDER BY + ds.owner + , ds.tablespace_name + , ds.segment_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS WHICH ARE NEARING MAXEXTENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects Which Are Nearing MAXEXTENTS


    + +prompt Segments where number of EXTENTS is less than 1/2 of MAXEXTENTS + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN tablespace_name FORMAT a30 HEADING 'Tablespace name' ENTMAP off +COLUMN segment_name FORMAT a30 HEADING 'Segment Name' ENTMAP off +COLUMN segment_type FORMAT a20 HEADING 'Segment Type' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off +COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next Extent Size' ENTMAP off +COLUMN pct_increase HEADING '% Increase' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Num. of Extents' ENTMAP off +COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max Extents' ENTMAP off +COLUMN pct_util FORMAT a35 HEADING '% Utilized' ENTMAP off + +SELECT + owner + , tablespace_name + , segment_name + , segment_type + , bytes + , next_extent + , pct_increase + , extents + , max_extents + , '
    ' || ROUND((extents/max_extents)*100, 2) || '%
    ' pct_util +FROM + dba_segments +WHERE + extents > max_extents/2 + AND max_extents != 0 +ORDER BY + (extents/max_extents) DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - INVALID OBJECTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Invalid Objects


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a85 HEADING 'Owner' ENTMAP off +COLUMN object_name FORMAT a30 HEADING 'Object Name' ENTMAP off +COLUMN object_type FORMAT a20 HEADING 'Object Type' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Status' ENTMAP off + +BREAK ON report ON owner +COMPUTE count LABEL 'Grand Total: ' OF object_name ON report + +SELECT + '
    ' || owner || '
    ' owner + , object_name + , object_type + , DECODE( status + , 'VALID' + , '
    ' || status || '
    ' + , '
    ' || status || '
    ' ) status +FROM dba_objects +WHERE status <> 'VALID' +ORDER BY + owner + , object_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - PROCEDURAL OBJECT ERRORS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Procedural Object Errors


    + +prompt All records from DBA_ERRORS + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a85 HEAD 'Schema' ENTMAP off +COLUMN name FORMAT a30 HEAD 'Object Name' ENTMAP off +COLUMN type FORMAT a15 HEAD 'Object Type' ENTMAP off +COLUMN sequence FORMAT 999,999 HEAD 'Sequence' ENTMAP off +COLUMN line FORMAT 999,999 HEAD 'Line' ENTMAP off +COLUMN position FORMAT 999,999 HEAD 'Position' ENTMAP off +COLUMN text HEAD 'Text' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || owner || '
    ' owner + , name + , type + , sequence + , line + , position + , text +FROM + dba_errors +ORDER BY + 1 + , 2 + , 3; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS WITHOUT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects Without Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a95 HEAD 'Owner' ENTMAP off +COLUMN object_type FORMAT a20 HEAD 'Object Type' ENTMAP off +COLUMN count FORMAT 999,999,999,999 HEAD 'Count' ENTMAP off + +BREAK ON report ON owner +COMPUTE count LABEL 'Total: ' OF object_name ON report + +SELECT + '
    ' || owner || '
    ' owner + , 'Table' object_type + , count(*) count +FROM + sys.dba_tables +WHERE + last_analyzed IS NULL + AND owner NOT IN ('SYS','SYSTEM') + AND partitioned = 'NO' +GROUP BY + owner + , 'Table' +UNION +SELECT + '
    ' || owner || '
    ' owner + , 'Index' object_type + , count(*) count +FROM + sys.dba_indexes +WHERE + last_analyzed IS NULL + AND owner NOT IN ('SYS','SYSTEM') + AND partitioned = 'NO' +GROUP BY + owner + , 'Index' +UNION +SELECT + '
    ' || table_owner || '
    ' owner + , 'Table Partition' object_type + , count(*) count +FROM + sys.dba_tab_partitions +WHERE + last_analyzed IS NULL + AND table_owner NOT IN ('SYS','SYSTEM') +GROUP BY + table_owner + , 'Table Partition' +UNION +SELECT + '
    ' || index_owner || '
    ' owner + , 'Index Partition' object_type + , count(*) count +FROM + sys.dba_ind_partitions +WHERE + last_analyzed IS NULL + AND index_owner NOT IN ('SYS','SYSTEM') +GROUP BY + index_owner + , 'Index Partition' +ORDER BY + 1 + , 2 + , 3; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLES SUFFERING FROM ROW CHAINING/MIGRATION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tables Suffering From Row Chaining/Migration


    + +prompt NOTE: Tables must have statistics gathered + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN table_name HEADING 'Table Name' ENTMAP off +COLUMN partition_name HEADING 'Partition Name' ENTMAP off +COLUMN num_rows FORMAT 999,999,999,999,999 HEADING 'Total Rows' ENTMAP off +COLUMN pct_chained_rows FORMAT a65 HEADING '% Chained Rows' ENTMAP off +COLUMN avg_row_length FORMAT 999,999,999,999,999 HEADING 'Avg Row Length' ENTMAP off + +SELECT + owner owner + , table_name table_name + , '' partition_name + , num_rows num_rows + , '
    ' || ROUND((chain_cnt/num_rows)*100, 2) || '%
    ' pct_chained_rows + , avg_row_len avg_row_length +FROM + (select + owner + , table_name + , chain_cnt + , num_rows + , avg_row_len + from + sys.dba_tables + where + chain_cnt is not null + and num_rows is not null + and chain_cnt > 0 + and num_rows > 0 + and owner != 'SYS') +UNION ALL +SELECT + table_owner owner + , table_name table_name + , partition_name partition_name + , num_rows num_rows + , '
    ' || ROUND((chain_cnt/num_rows)*100, 2) || '%
    ' pct_chained_rows + , avg_row_len avg_row_length +FROM + (select + table_owner + , table_name + , partition_name + , chain_cnt + , num_rows + , avg_row_len + from + sys.dba_tab_partitions + where + chain_cnt is not null + and num_rows is not null + and chain_cnt > 0 + and num_rows > 0 + and table_owner != 'SYS') b +WHERE + (chain_cnt/num_rows)*100 > 10; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - USERS WITH DEFAULT TABLESPACE - (SYSTEM) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Users With Default Tablespace - (SYSTEM)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN default_tablespace FORMAT a125 HEADING 'Default Tablespace' ENTMAP off +COLUMN temporary_tablespace FORMAT a125 HEADING 'Temporary Tablespace' ENTMAP off +COLUMN created FORMAT a75 HEADING 'Created' ENTMAP off +COLUMN account_status FORMAT a75 HEADING 'Account Status' ENTMAP off + +SELECT + '' || username || '' username + , '
    ' || default_tablespace || '
    ' default_tablespace + , '
    ' || temporary_tablespace || '
    ' temporary_tablespace + , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created + , DECODE( account_status + , 'OPEN' + , '
    ' || account_status || '
    ' + , '
    ' || account_status || '
    ') account_status +FROM + dba_users +WHERE + default_tablespace = 'SYSTEM' +ORDER BY + username; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - USERS WITH DEFAULT TEMPORARY TABLESPACE - (SYSTEM) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Users With Default Temporary Tablespace - (SYSTEM)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN default_tablespace FORMAT a125 HEADING 'Default Tablespace' ENTMAP off +COLUMN temporary_tablespace FORMAT a125 HEADING 'Temporary Tablespace' ENTMAP off +COLUMN created FORMAT a75 HEADING 'Created' ENTMAP off +COLUMN account_status FORMAT a75 HEADING 'Account Status' ENTMAP off + +SELECT + '' || username || '' username + , '
    ' || default_tablespace || '
    ' default_tablespace + , '
    ' || temporary_tablespace || '
    ' temporary_tablespace + , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created + , DECODE( account_status + , 'OPEN' + , '
    ' || account_status || '
    ' + , '
    ' || account_status || '
    ') account_status +FROM + dba_users +WHERE + temporary_tablespace = 'SYSTEM' +ORDER BY + username; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS IN THE SYSTEM TABLESPACE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects in the SYSTEM Tablespace


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN segment_name FORMAT a125 HEADING 'Segment Name' ENTMAP off +COLUMN segment_type FORMAT a75 HEADING 'Type' ENTMAP off +COLUMN tablespace_name FORMAT a125 HEADING 'Tablespace' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Bytes|Alloc' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Extents' ENTMAP off +COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max|Ext' ENTMAP off +COLUMN initial_extent FORMAT 999,999,999,999,999 HEADING 'Initial|Ext' ENTMAP off +COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next|Ext' ENTMAP off +COLUMN pct_increase FORMAT 999,999,999,999,999 HEADING 'Pct|Inc' ENTMAP off + +BREAK ON report ON owner +COMPUTE count LABEL 'Total Count: ' OF segment_name ON report +COMPUTE sum LABEL 'Total Bytes: ' OF bytes ON report + +SELECT + '
    ' || owner || '
    ' owner + , segment_name + , segment_type + , tablespace_name + , bytes + , extents + , initial_extent + , next_extent + , pct_increase +FROM + dba_segments +WHERE + owner NOT IN ('SYS','SYSTEM') + AND tablespace_name = 'SYSTEM' +ORDER BY + owner + , segment_name + , extents DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - RECYCLE BIN - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Recycle Bin


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a85 HEADING 'Owner' ENTMAP off +COLUMN original_name HEADING 'Original|Name' ENTMAP off +COLUMN type HEADING 'Object|Type' ENTMAP off +COLUMN object_name HEADING 'Object|Name' ENTMAP off +COLUMN ts_name HEADING 'Tablespace' ENTMAP off +COLUMN operation HEADING 'Operation' ENTMAP off +COLUMN createtime HEADING 'Create|Time' ENTMAP off +COLUMN droptime HEADING 'Drop|Time' ENTMAP off +COLUMN can_undrop HEADING 'Can|Undrop?' ENTMAP off +COLUMN can_purge HEADING 'Can|Purge?' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Bytes' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || owner || '
    ' owner + , original_name + , type + , object_name + , ts_name + , operation + , '
    ' || NVL(createtime, '
    ') || '
    ' createtime + , '
    ' || NVL(droptime, '
    ') || '
    ' droptime + , DECODE( can_undrop + , null + , '
    ' + , 'YES' + , '
    ' || can_undrop || '
    ' + , 'NO' + , '
    ' || can_undrop || '
    ' + , '
    ' || can_undrop || '
    ') can_undrop + , DECODE( can_purge + , null + , '
    ' + , 'YES' + , '
    ' || can_purge || '
    ' + , 'NO' + , '
    ' || can_purge || '
    ' + , '
    ' || can_purge || '
    ') can_purge + , (space * p.blocksize) bytes +FROM + dba_recyclebin r + , (SELECT value blocksize FROM v$parameter WHERE name='db_block_size') p +ORDER BY + owner + , object_name; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< ONLINE ANALYTICAL PROCESSING - (OLAP) >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

    Online Analytical Processing - (OLAP)
    + + +-- +----------------------------------------------------------------------------+ +-- | - DIMENSIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dimensions
    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN dimension_name FORMAT a75 HEADING 'Dimension Name' ENTMAP off +COLUMN invalid FORMAT a75 HEADING 'Invalid?' ENTMAP off +COLUMN compile_state FORMAT a75 HEADING 'Compile State' ENTMAP off +COLUMN revision HEADING 'Revision' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || dd.owner || '
    ' owner + , dd.dimension_name dimension_name + , '
    ' || dd.invalid || '
    ' invalid + , DECODE( dd.compile_state + , 'VALID' + , '
    ' || dd.compile_state || '
    ' + , '
    ' || dd.compile_state || '
    ' ) compile_state + , '
    ' || dd.revision || '
    ' revision +FROM + dba_dimensions dd +ORDER BY + dd.owner + , dd.dimension_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DIMENSION LEVELS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dimension Levels


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN dimension_name FORMAT a75 HEADING 'Dimension Name' ENTMAP off +COLUMN level_name FORMAT a75 HEADING 'Level Name' ENTMAP off +COLUMN level_table_name FORMAT a75 HEADING 'Source Table' ENTMAP off +COLUMN column_name FORMAT a75 HEADING 'Column Name(s)' ENTMAP off +COLUMN key_position FORMAT a75 HEADING 'Column Position' ENTMAP off + +BREAK ON owner ON dimension_name ON level_name ON level_table_name + +SELECT + '
    ' || d.owner || '
    ' owner + , d.dimension_name dimension_name + , l.level_name level_name + , l.detailobj_owner || '.' || l.detailobj_name level_table_name + , k.column_name column_name + , '
    ' || TO_CHAR(k.key_position, '999,999') || '
    ' key_position +FROM + dba_dimensions d + , dba_dim_levels l + , dba_dim_level_key k +WHERE + d.owner = l.owner + AND d.dimension_name = l.dimension_name + AND d.owner = k.owner + AND d.dimension_name = k.dimension_name + AND l.level_name = k.level_name +ORDER by + l.owner + , l.dimension_name + , l.level_name + , level_table_name + , k.key_position; + + + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DIMENSION ATTRIBUTES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dimension Attributes


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN dimension_name FORMAT a75 HEADING 'Dimension Name' ENTMAP off +COLUMN level_name FORMAT a75 HEADING 'Level Name' ENTMAP off +COLUMN level_table_name FORMAT a75 HEADING 'Source Table' ENTMAP off +COLUMN column_name FORMAT a75 HEADING 'Attribute Source Column' ENTMAP off +COLUMN inferred FORMAT a75 HEADING 'Inferred?' ENTMAP off + +BREAK ON report ON owner ON dimension_name ON level_name + +SELECT + '
    ' || d.owner || '
    ' owner + , d.dimension_name dimension_name + , l.level_name level_name + , l.detailobj_owner || '.' || l.detailobj_name level_table_name + , a.column_name column_name + , '
    ' || a.inferred || '
    ' inferred +FROM + dba_dimensions d + , dba_dim_levels l + , dba_dim_attributes a +WHERE + d.owner = l.owner + AND d.dimension_name = l.dimension_name + AND d.owner = a.owner + AND d.dimension_name = a.dimension_name + AND l.level_name = a.level_name +ORDER by + l.owner + , l.dimension_name + , l.level_name + , level_table_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DIMENSION HIERARCHIES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dimension Hierarchies


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN dimension_name FORMAT a75 HEADING 'Dimension Name' ENTMAP off +COLUMN hierarchy_name FORMAT a75 HEADING 'Hierarchy Name' ENTMAP off +COLUMN parent_level_name FORMAT a75 HEADING 'Parent Level' ENTMAP off +COLUMN child_level_name FORMAT a75 HEADING 'Child Level' ENTMAP off +COLUMN position FORMAT a75 HEADING 'Position' ENTMAP off +COLUMN join_key_id FORMAT a75 HEADING 'Join Key ID' ENTMAP off + +BREAK ON owner ON dimension_name ON hierarchy_name + +SELECT + '
    ' || d.owner || '
    ' owner + , d.dimension_name dimension_name + , h.hierarchy_name hierarchy_name + , c.parent_level_name parent_level_name + , c.child_level_name child_level_name + , '
    ' || TO_CHAR(c.position, '999,999') || '
    ' position + , '
    ' || NVL(c.join_key_id,'
    ') || '
    ' join_key_id +FROM + dba_dimensions d + , dba_dim_hierarchies h + , dba_dim_child_of c +WHERE + d.owner = h.owner + AND d.dimension_name = h.dimension_name + AND d.owner = c.owner + AND d.dimension_name = c.dimension_name + AND h.hierarchy_name = c.hierarchy_name +ORDER BY + d.owner + , d.dimension_name + , h.hierarchy_name + , c.position DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - CUBES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Cubes


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN cube_name FORMAT a75 HEADING 'Cube Name' ENTMAP off +COLUMN invalid FORMAT a75 HEADING 'Valid?' ENTMAP off +COLUMN display_name FORMAT a75 HEADING 'Display Name' ENTMAP off +COLUMN description FORMAT a275 HEADING 'Description' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || c.owner || '
    ' owner + , c.cube_name cube_name + , DECODE( c.invalid + , 'O' + , '
    Yes
    ' + , '1' + , '
    No
    ' + , 'Y' + , '
    No
    ' + , 'N' + , '
    Yes
    ' + , '
    ' || invalid || '
    ') invalid + , c.display_name display_name + , REPLACE(REPLACE(c.description, '<', '\<'), '>', '\>') description +FROM + dba_olap_cubes c +ORDER BY + c.owner + , c.cube_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - MATERIALIZED VIEWS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Materialized Views


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN mview_name FORMAT a75 HEADING 'MView|Name' ENTMAP off +COLUMN master_link FORMAT a75 HEADING 'Master|Link' ENTMAP off +COLUMN updatable FORMAT a75 HEADING 'Updatable?' ENTMAP off +COLUMN update_log FORMAT a75 HEADING 'Update|Log' ENTMAP off +COLUMN rewrite_enabled FORMAT a75 HEADING 'Rewrite|Enabled?' ENTMAP off +COLUMN refresh_mode FORMAT a75 HEADING 'Refresh|Mode' ENTMAP off +COLUMN refresh_method FORMAT a75 HEADING 'Refresh|Method' ENTMAP off +COLUMN build_mode FORMAT a75 HEADING 'Build|Mode' ENTMAP off +COLUMN fast_refreshable FORMAT a75 HEADING 'Fast|Refreshable' ENTMAP off +COLUMN last_refresh_type FORMAT a75 HEADING 'Last Refresh|Type' ENTMAP off +COLUMN last_refresh_date FORMAT a75 HEADING 'Last Refresh|Date' ENTMAP off +COLUMN staleness FORMAT a75 HEADING 'Staleness' ENTMAP off +COLUMN compile_state FORMAT a75 HEADING 'Compile State' ENTMAP off + +BREAK ON owner + +SELECT + '
    ' || m.owner || '
    ' owner + , m.mview_name mview_name + , m.master_link master_link + , '
    ' || NVL(m.updatable,'
    ') || '
    ' updatable + , update_log update_log + , '
    ' || NVL(m.rewrite_enabled,'
    ') || '
    ' rewrite_enabled + , m.refresh_mode refresh_mode + , m.refresh_method refresh_method + , m.build_mode build_mode + , m.fast_refreshable fast_refreshable + , m.last_refresh_type last_refresh_type + , '
    ' || TO_CHAR(m.last_refresh_date, 'mm/dd/yyyy HH24:MI:SS') || '
    ' last_refresh_date + , m.staleness staleness + , DECODE( m.compile_state + , 'VALID' + , '
    ' || m.compile_state || '
    ' + , '
    ' || m.compile_state || '
    ' ) compile_state +FROM + dba_mviews m +ORDER BY + owner + , mview_name +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - MATERIALIZED VIEW LOGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Materialized View Logs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN log_owner FORMAT a75 HEADING 'Log Owner' ENTMAP off +COLUMN log_table FORMAT a75 HEADING 'Log Table' ENTMAP off +COLUMN master FORMAT a75 HEADING 'Master' ENTMAP off +COLUMN log_trigger FORMAT a75 HEADING 'Log Trigger' ENTMAP off +COLUMN rowids FORMAT a75 HEADING 'Rowids?' ENTMAP off +COLUMN primary_key FORMAT a75 HEADING 'Primary Key?' ENTMAP off +COLUMN object_id FORMAT a75 HEADING 'Object ID?' ENTMAP off +COLUMN filter_columns FORMAT a75 HEADING 'Filter Columns?' ENTMAP off +COLUMN sequence FORMAT a75 HEADING 'Sequence?' ENTMAP off +COLUMN include_new_values FORMAT a75 HEADING 'Include New Values?' ENTMAP off + +BREAK ON log_owner + +SELECT + '
    ' || ml.log_owner || '
    ' log_owner + , ml.log_table log_table + , ml.master master + , ml.log_trigger log_trigger + , '
    ' || NVL(ml.rowids,'
    ') || '
    ' rowids + , '
    ' || NVL(ml.primary_key,'
    ') || '
    ' primary_key + , '
    ' || NVL(ml.object_id,'
    ') || '
    ' object_id + , '
    ' || NVL(ml.filter_columns,'
    ') || '
    ' filter_columns + , '
    ' || NVL(ml.sequence,'
    ') || '
    ' sequence + , '
    ' || NVL(ml.include_new_values,'
    ') || '
    ' include_new_values +FROM + dba_mview_logs ml +ORDER BY + ml.log_owner + , ml.master; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - MATERIALIZED VIEW REFRESH GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Materialized View Refresh Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN name FORMAT a75 HEADING 'Name' ENTMAP off +COLUMN broken FORMAT a75 HEADING 'Broken?' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Next Date' ENTMAP off +COLUMN interval FORMAT a75 HEADING 'Interval' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || rowner || '
    ' owner + , '
    ' || rname || '
    ' name + , '
    ' || broken || '
    ' broken + , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , '
    ' || interval || '
    ' interval +FROM + dba_refresh +ORDER BY + rowner + , rname +/ + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< DATA PUMP >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

    Data Pump
    + + +-- +----------------------------------------------------------------------------+ +-- | - DATA PUMP JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Data Pump Jobs
    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner_name FORMAT a75 HEADING 'Owner Name' ENTMAP off +COLUMN job_name FORMAT a75 HEADING 'Job Name' ENTMAP off +COLUMN operation FORMAT a75 HEADING 'Operation' ENTMAP off +COLUMN job_mode FORMAT a75 HEADING 'Job Mode' ENTMAP off +COLUMN state FORMAT a75 HEADING 'State' ENTMAP off +COLUMN degree FORMAT 999,999,999 HEADING 'Degree' ENTMAP off +COLUMN attached_sessions FORMAT 999,999,999 HEADING 'Attached Sessions' ENTMAP off + +SELECT + '
    ' || dpj.owner_name || '
    ' owner_name + , dpj.job_name job_name + , dpj.operation operation + , dpj.job_mode job_mode + , dpj.state state + , dpj.degree degree + , dpj.attached_sessions attached_sessions +FROM + dba_datapump_jobs dpj +ORDER BY + dpj.owner_name + , dpj.job_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DATA PUMP SESSIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Data Pump Sessions


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a75 HEADING 'Instance Name' ENTMAP off +COLUMN owner_name FORMAT a75 HEADING 'Owner Name' ENTMAP off +COLUMN job_name FORMAT a75 HEADING 'Job Name' ENTMAP off +COLUMN session_type FORMAT a75 HEADING 'Session Type' ENTMAP off +COLUMN sid HEADING 'SID' ENTMAP off +COLUMN serial_no HEADING 'Serial#' ENTMAP off +COLUMN oracle_username FORMAT a75 HEADING 'Oracle Username' ENTMAP off +COLUMN os_username FORMAT a75 HEADING 'O/S Username' ENTMAP off +COLUMN os_pid HEADING 'O/S PID' ENTMAP off + +BREAK ON report ON instance_name_print ON owner_name ON job_name + +SELECT + '
    ' || i.instance_name || '
    ' instance_name_print + , dj.owner_name owner_name + , dj.job_name job_name + , ds.type session_type + , s.sid sid + , s.serial# serial_no + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid +FROM + gv$datapump_job dj + , gv$datapump_session ds + , gv$session s + , gv$instance i + , gv$process p +WHERE + s.inst_id = i.inst_id + AND s.inst_id = p.inst_id + AND ds.inst_id = i.inst_id + AND dj.inst_id = i.inst_id + AND s.saddr = ds.saddr + AND s.paddr = p.addr (+) + AND dj.job_id = ds.job_id +ORDER BY + i.instance_name + , dj.owner_name + , dj.job_name + , ds.type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DATA PUMP JOB PROGRESS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Data Pump Job Progress


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name_print FORMAT a75 HEADING 'Instance Name' ENTMAP off +COLUMN owner_name FORMAT a75 HEADING 'Owner Name' ENTMAP off +COLUMN job_name FORMAT a75 HEADING 'Job Name' ENTMAP off +COLUMN session_type FORMAT a75 HEADING 'Session Type' ENTMAP off +COLUMN start_time HEADING 'Start Time' ENTMAP off +COLUMN time_remaining FORMAT 9,999,999,999,999 HEADING 'Time Remaining (min.)' ENTMAP off +COLUMN sofar FORMAT 9,999,999,999,999 HEADING 'Bytes Completed So Far' ENTMAP off +COLUMN totalwork FORMAT 9,999,999,999,999 HEADING 'Total Bytes for Job' ENTMAP off +COLUMN pct_completed HEADING '% Completed' ENTMAP off + +BREAK ON report ON instance_name_print ON owner_name ON job_name + +SELECT + '
    ' || i.instance_name || '
    ' instance_name_print + , dj.owner_name owner_name + , dj.job_name job_name + , ds.type session_type + , '
    ' || TO_CHAR(sl.start_time,'mm/dd/yyyy HH24:MI:SS') || '
    ' start_time + , ROUND(sl.time_remaining/60,0) time_remaining + , sl.sofar sofar + , sl.totalwork totalwork + , '
    ' || TRUNC(ROUND((sl.sofar/sl.totalwork) * 100, 1)) || '%
    ' pct_completed +FROM + gv$datapump_job dj + , gv$datapump_session ds + , gv$session s + , gv$instance i + , gv$session_longops sl +WHERE + s.inst_id = i.inst_id + AND ds.inst_id = i.inst_id + AND dj.inst_id = i.inst_id + AND sl.inst_id = i.inst_id + AND s.saddr = ds.saddr + AND dj.job_id = ds.job_id + AND sl.sid = s.sid + AND sl.serial# = s.serial# + AND ds.type = 'MASTER' +ORDER BY + i.instance_name + , dj.owner_name + , dj.job_name + , ds.type; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< NETWORKING >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

    Networking
    + + +-- +----------------------------------------------------------------------------+ +-- | - MTS DISPATCHER STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt MTS Dispatcher Statistics
    + +prompt Dispatcher rate + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Name' ENTMAP off +COLUMN avg_loop_rate HEADING 'Avg|Loop|Rate' ENTMAP off +COLUMN avg_event_rate HEADING 'Avg|Event|Rate' ENTMAP off +COLUMN avg_events_per_loop HEADING 'Avg|Events|Per|Loop' ENTMAP off +COLUMN avg_msg_rate HEADING 'Avg|Msg|Rate' ENTMAP off +COLUMN avg_svr_buf_rate HEADING 'Avg|Svr|Buf|Rate' ENTMAP off +COLUMN avg_svr_byte_rate HEADING 'Avg|Svr|Byte|Rate' ENTMAP off +COLUMN avg_svr_byte_per_buf HEADING 'Avg|Svr|Byte|Per|Buf' ENTMAP off +COLUMN avg_clt_buf_rate HEADING 'Avg|Clt|Buf|Rate' ENTMAP off +COLUMN avg_clt_byte_rate HEADING 'Avg|Clt|Byte|Rate' ENTMAP off +COLUMN avg_clt_byte_per_buf HEADING 'Avg|Clt|Byte|Per|Buf' ENTMAP off +COLUMN avg_buf_rate HEADING 'Avg|Buf|Rate' ENTMAP off +COLUMN avg_byte_rate HEADING 'Avg|Byte|Rate' ENTMAP off +COLUMN avg_byte_per_buf HEADING 'Avg|Byte|Per|Buf' ENTMAP off +COLUMN avg_in_connect_rate HEADING 'Avg|In|Connect|Rate' ENTMAP off +COLUMN avg_out_connect_rate HEADING 'Avg|Out|Connect|Rate' ENTMAP off +COLUMN avg_reconnect_rate HEADING 'Avg|Reconnect|Rate' ENTMAP off + +SELECT + name + , avg_loop_rate + , avg_event_rate + , avg_events_per_loop + , avg_msg_rate + , avg_svr_buf_rate + , avg_svr_byte_rate + , avg_svr_byte_per_buf + , avg_clt_buf_rate + , avg_clt_byte_rate + , avg_clt_byte_per_buf + , avg_buf_rate + , avg_byte_rate + , avg_byte_per_buf + , avg_in_connect_rate + , avg_out_connect_rate + , avg_reconnect_rate +FROM + v$dispatcher_rate +ORDER BY + name; + + +COLUMN protocol HEADING 'Protocol' ENTMAP off +COLUMN total_busy_rate HEADING 'Total Busy Rate' ENTMAP off + +prompt Dispatcher busy rate + +SELECT + a.network protocol + , (SUM(a.BUSY) / (SUM(a.BUSY) + SUM(a.IDLE))) total_busy_rate +FROM + v$dispatcher a +GROUP BY + a.network; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - MTS DISPATCHER RESPONSE QUEUE WAIT STATS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt MTS Dispatcher Response Queue Wait Stats


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN type HEADING 'Type' ENTMAP off +COLUMN avg_wait HEADING 'Avg Wait Time Per Response' ENTMAP off + +SELECT + a.type + , DECODE( SUM(a.totalq), 0, 'NO RESPONSES', SUM(a.wait)/SUM(a.totalq) || ' HUNDREDTHS OF SECONDS') avg_wait +FROM + v$queue a +WHERE + a.type='DISPATCHER' +GROUP BY + a.type; + + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - MTS SHARED SERVER WAIT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt MTS Shared Server Wait Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN avg_wait HEADING 'Average Wait Time Per Request' ENTMAP off + +SELECT + DECODE(a.totalq, 0, 'No Requests', a.wait/a.totalq || ' HUNDREDTHS OF SECONDS') avg_wait +FROM + v$queue a +WHERE + a.type='COMMON'; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< REPLICATION >>>>> | +-- | | +-- +============================================================================+ + + +prompt +prompt

    Replication
    + + +-- +----------------------------------------------------------------------------+ +-- | - REPLICATION SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Replication Summary
    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN gname HEADING 'Current Database Name' ENTMAP off +COLUMN admin_request HEADING '# Admin. Requests' ENTMAP off +COLUMN status HEADING '# Admin. Request Errors' ENTMAP off +COLUMN df_txn HEADING '# Def. Trans' ENTMAP off +COLUMN df_error HEADING '# Def. Tran Errors' ENTMAP off +COLUMN complete HEADING '# Complete Trans in Queue' ENTMAP off + +SELECT + g.global_name gname + , d.admin_request admin_request + , e.status status + , dt.tran df_txn + , de.error df_error + , c.complete complete +FROM + (select global_name from global_name) g + , (select count(id) admin_request + from sys.dba_repcatlog) d + , (select count(status) status + from sys.dba_repcatlog + where status = 'ERROR') e + , (select count(*) tran + from deftrandest) dt + , (select count(*) error + from deferror) de + , (select count(a.deferred_tran_id) complete + from deftran a + where a.deferred_tran_id not in + (select b.deferred_tran_id + from deftrandest b) + ) c +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DEFERRED TRANSACTIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Deferred Transactions


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN source HEADING 'Source' ENTMAP off +COLUMN dest HEADING 'Target' ENTMAP off +COLUMN trans HEADING '# Def. Trans' ENTMAP off +COLUMN errors HEADING '# Def. Tran Errors' ENTMAP off + +SELECT + source + , dest + , trans + , errors +FROM + (select + e.origin_tran_db source + , e.destination dest + , 'n/a' trans + , to_char(count(*)) errors + from + deferror e + group by + e.origin_tran_db + , e.destination + union + select + g.global_name source + , d.dblink dest + , to_char(count(*)) trans + , 'n/a' errors + from + (select global_name from global_name) g + , deftran t + , deftrandest d + where + d.deferred_tran_id = t.deferred_tran_id + group by + g.global_name, d.dblink + ); + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - ADMINISTRATIVE REQUEST JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Administrative Request Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN what FORMAT a175 HEADING 'Definition' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + job job + , priv_user priv_user + , what what + , DECODE(broken, 'Y', 'Broken', 'Normal') status + , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , interval +FROM + sys.dba_jobs +WHERE + what LIKE '%dbms_repcat.do_deferred_repcat_admin%' +ORDER BY + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - INITIALIZATION PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Initialization Parameters


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN pname FORMAT a55 HEADING 'Parameter Name' ENTMAP off +COLUMN value FORMAT a55 HEADING 'Value' ENTMAP off +COLUMN isdefault FORMAT a55 HEADING 'Is Default?' ENTMAP off +COLUMN issys_modifiable FORMAT a55 HEADING 'Is Dynamic?' ENTMAP off + +SELECT + DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(name,0,512) || '' + , '' || SUBSTR(name,0,512) || '' ) pname + , DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(value,0,512) || '' + , SUBSTR(value,0,512) ) value + , DECODE( isdefault + , 'FALSE' + , '
    ' || isdefault || '
    ' + , '
    ' || isdefault || '
    ') isdefault + , DECODE( isdefault + , 'FALSE' + , '
    ' || issys_modifiable || '
    ' + , '
    ' || issys_modifiable || '
    ') issys_modifiable +FROM + v$parameter +WHERE + name IN ( 'compatible' + , 'commit_point_strength' + , 'dblink_encrypt_login' + , 'distributed_lock_timeout' + , 'distributed_recovery_connection_hold_time' + , 'distributed_transactions' + , 'global_names' + , 'job_queue_interval' + , 'job_queue_processes' + , 'max_transaction_branches' + , 'open_links' + , 'open_links_per_instance' + , 'parallel_automatic_tuning' + , 'parallel_max_servers' + , 'parallel_min_servers' + , 'parallel_server_idle_time' + , 'processes' + , 'remote_dependencies_mode' + , 'replication_dependency_tracking' + , 'shared_pool_size' + , 'utl_file_dir' + ) +ORDER BY name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (SCHEDULE) - PURGE JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Schedule) - Purge Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + j.job job + , j.priv_user priv_user + , decode(broken, 'Y', 'Broken', 'Normal') status + , '
    ' || NVL(TO_CHAR(s.next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , s.interval interval +FROM + sys.defschedule s + , sys.dba_jobs j +WHERE + s.dblink = (select global_name from global_name) + AND s.interval is not null AND s.job = j.job +ORDER BY + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (SCHEDULE) - PUSH JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Schedule) - Push Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN dblink HEADING 'Target' ENTMAP off +COLUMN broken HEADING 'Status' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + j.job job + , j.priv_user priv_user + , s.dblink dblink + , decode(j.broken, 'Y', 'Broken', 'Normal') broken + , '
    ' || NVL(TO_CHAR(s.next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , s.interval interval +FROM + sys.defschedule s + , sys.dba_jobs j +WHERE + s.dblink != (select global_name from global_name) + AND s.interval is not null + AND s.job = j.job +ORDER BY + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (SCHEDULE) - REFRESH JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Schedule) - Refresh Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN refresh_group HEADING 'Refresh Group' ENTMAP off +COLUMN broken HEADING 'Status' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Start' ENTMAP off +COLUMN interval FORMAT a75 HEADING 'Interval' ENTMAP off + +SELECT + j.job job + , j.priv_user priv_user + , r.rowner || '.' || r.rname refresh_group + , decode(j.broken, 'Y', 'Broken', 'Normal') broken + , '
    ' || NVL(TO_CHAR(j.next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , '
    ' || j.interval || '
    ' interval +FROM + sys.dba_refresh r + , sys.dba_jobs j +WHERE + r.job = j.job +order by + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MULTI-MASTER) - MASTER GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Multi-Master) - Master Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Master Group' ENTMAP off +COLUMN num_def_trans HEADING '# Def. Trans' ENTMAP off +COLUMN num_tran_errors HEADING '# Def. Tran Errors' ENTMAP off +COLUMN num_admin_requests HEADING '# Admin. Requests' ENTMAP off +COLUMN num_admin_request_errors HEADING '# Admin. Request Errors' ENTMAP off + +SELECT + g.gname name + , NVL(t.cnt1, 0) num_def_trans + , NVL(ie.cnt2, 0) num_tran_errors + , NVL(a.cnt3, 0) num_admin_requests + , NVL(b.cnt4, 0) num_admin_request_errors +FROM + (select distinct gname + from dba_repgroup + where master='Y') g + , (select + rog rog + , count(dt.deferred_tran_id) cnt1 + from (select distinct + ro.gname rog + , d.deferred_tran_id dft + from + dba_repobject ro + , defcall d + , deftrANDest td + where + ro.sname = d.schemaname + AND ro.oname = d.packagename + AND ro.type in ('TABLE', 'PACKAGE', 'SNAPSHOT') + AND td.deferred_tran_id = d.deferred_tran_id + ) t0, deftrANDest dt + where + dt.deferred_tran_id = dft + group by rog + ) t + , (select distinct + ro.gname + , count(distinct e.deferred_tran_id) cnt2 + from + dba_repobject ro + , defcall d + , deferror e + where + ro.sname = d.schemaname + AND ro.oname = d.packagename + AND ro.type in ('TABLE', 'PACKAGE', 'SNAPSHOT') + AND e.deferred_tran_id = d.deferred_tran_id + AND e.callno = d.callno + group by ro.gname + ) ie + , (select gname, count(*) cnt3 + from dba_repcatlog + group by gname + ) a + , (select gname, count(*) cnt4 + from dba_repcatlog + where status = 'ERROR' + group BY gname + ) b +WHERE + g.gname = ie.gname (+) + AND g.gname = t.rog (+) + AND g.gname = a.gname (+) + AND g.gname = b.gname (+) +ORDER BY + g.gname; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MULTI-MASTER) - MASTER GROUPS AND SITES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Multi-Master) - Master Groups and Sites


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN master_group HEADING 'Master Group' ENTMAP off +COLUMN sites HEADING 'Sites' ENTMAP off +COLUMN master_definition_site HEADING 'Master Definition Site' ENTMAP off + +SELECT + gname master_group + , dblink sites + , DECODE(masterdef, 'Y', 'YES', 'N', 'NO') master_definition_site +FROM + sys.dba_repsites +WHERE + master = 'Y' + AND gname NOT IN ( + SELECT gname from sys.dba_repsites + WHERE snapmaster = 'Y' + ) +ORDER BY + gname; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MASTER SITE SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Master Site Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN mgroup HEADING '# of Master Groups' ENTMAP off +COLUMN mvgroup HEADING '# of Registered MV Groups' ENTMAP off +COLUMN mv HEADING '# of Registered MVs' ENTMAP off +COLUMN mvlog HEADING '# of MV Logs' ENTMAP off +COLUMN template HEADING '# of Templates' ENTMAP off + +SELECT + a.mgroup mgroup + , b.mvgroup mvgroup + , c.mv mv + , d.mvlog mvlog + , e.template template +FROM + (select count(g.gname) mgroup + from sys.dba_repgroup g, sys.dba_repsites s + where g.master = 'Y' + and s.master = 'Y' + and g.gname = s.gname + and s.my_dblink = 'Y') a + , (select count(*) mvGROUP + from sys.dba_registered_snapshot_groups) b + , (select count(*) mv + from sys.dba_registered_snapshots) c + , (select count(*) mvlog + from sys.dba_snapshot_logs) d + , (select count(*) template + from sys.dba_repcat_refresh_templates) e; + + + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN log_owner FORMAT a75 HEADING 'Log Owner' ENTMAP off +COLUMN log_table HEADING 'Log Table' ENTMAP off +COLUMN master HEADING 'Master' ENTMAP off +COLUMN rowids FORMAT a75 HEADING 'Row ID' ENTMAP off +COLUMN primary_key FORMAT a75 HEADING 'Primary Key' ENTMAP off +COLUMN filter_columns FORMAT a75 HEADING 'Filter Columns' ENTMAP off + +BREAK ON report ON log_owner + +SELECT + '
    ' || log_owner || '
    ' log_owner + , log_table + , master + , '
    ' || rowids || '
    ' rowids + , '
    ' || primary_key || '
    ' primary_key + , '
    ' || filter_columns || '
    ' filter_columns +FROM + sys.dba_snapshot_logs +ORDER BY + log_owner; + + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN ref_temp_name HEADING 'Refresh Template Name' ENTMAP off +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN public_template HEADING 'Public' ENTMAP off +COLUMN instantiated HEADING '# of Instantiated Sites' ENTMAP off +COLUMN template_comment HEADING 'Comment' ENTMAP off + +SELECT + rt.refresh_template_name ref_temp_name + , owner owner + , decode(public_template, 'Y', 'YES', 'NO') public_template + , rs.instantiated instantiated + , rt.template_comment template_comment +FROM + sys.dba_repcat_refresh_templates rt + , (SELECT y.refresh_template_name, count(x.status) instantiated + FROM sys.dba_repcat_template_sites x, sys.dba_repcat_refresh_templates y + WHERE x.refresh_template_name(+) = y.refresh_template_name + GROUP BY y.refresh_template_name) rs +WHERE + rt.refresh_template_name(+) = rs.refresh_template_name +ORDER BY + rt.refresh_template_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MASTER SITE LOGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Master Site Logs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN log_owner FORMAT a75 HEADING 'Log Owner' ENTMAP off +COLUMN log_table HEADING 'Log Table' ENTMAP off +COLUMN master HEADING 'Master' ENTMAP off +COLUMN rowids FORMAT a75 HEADING 'Row ID' ENTMAP off +COLUMN primary_key FORMAT a75 HEADING 'Primary Key' ENTMAP off +COLUMN filter_columns FORMAT a75 HEADING 'Filter Columns' ENTMAP off + +BREAK ON report ON log_owner + +SELECT + '
    ' || log_owner || '
    ' log_owner + , log_table + , master + , '
    ' || rowids || '
    ' rowids + , '
    ' || primary_key || '
    ' primary_key + , '
    ' || filter_columns || '
    ' filter_columns +FROM + sys.dba_snapshot_logs +ORDER BY + log_owner; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MASTER SITE TEMPLATES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Master Site Templates


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN refresh_template_name HEADING 'Refresh Template Name' ENTMAP off +COLUMN public_template HEADING 'Public' ENTMAP off +COLUMN instantiated HEADING '# of Instantiated Sites' ENTMAP off +COLUMN template_comment HEADING 'Comment' ENTMAP off + +BREAK ON owner + +SELECT + '
    ' || owner || '
    ' owner + , rt.refresh_template_name refresh_template_name + , decode(public_template, 'Y', 'YES', 'NO') public_template + , rs.instantiated instantiated + , rt.template_comment template_comment +FROM + sys.dba_repcat_refresh_templates rt + , ( SELECT y.refresh_template_name, count(x.status) instantiated + FROM sys.dba_repcat_template_sites x, sys.dba_repcat_refresh_templates y + WHERE x.refresh_template_name(+) = y.refresh_template_name + GROUP BY y.refresh_template_name + ) rs +WHERE + rt.refresh_template_name(+) = rs.refresh_template_name +ORDER BY + owner; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - SITE SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN mvgroup HEADING '# of Materialized View Groups' ENTMAP off +COLUMN mv HEADING '# of Materialized Views' ENTMAP off +COLUMN rgroup HEADING '# of Refresh Groups' ENTMAP off + +SELECT + a.mvgroup mvgroup + , b.mv mv + , c.rgroup rgroup +FROM + ( select count(s.gname) mvgroup + from sys.dba_repsites s + where s.snapmaster = 'Y') a + , ( select count(*) mv + from sys.dba_snapshots) b + , ( select count(*) rgroup + from sys.dba_refresh) c; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - SITE GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN gname HEADING 'Name' ENTMAP off +COLUMN dblink HEADING 'Master' ENTMAP off +COLUMN propagation HEADING 'Propagation' ENTMAP off +COLUMN remark HEADING 'Remark' ENTMAP off + +SELECT + s.gname gname + , s.dblink dblink + , decode(s.prop_updates, 0, 'Async', 'Sync') propagation + , g.schema_comment remark +FROM + sys.dba_repsites s + , sys.dba_repgroup g +WHERE + s.gname = g.gname + AND s.snapmaster = 'Y' +ORDER BY + s.gname; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - SITE MATERIALIZED VIEWS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Materialized Views


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN name HEADING 'Name' ENTMAP off +COLUMN master_owner HEADING 'Master Owner' ENTMAP off +COLUMN master_table HEADING 'Master Table' ENTMAP off +COLUMN master_link HEADING 'Master Link' ENTMAP off +COLUMN type HEADING 'Type' ENTMAP off +COLUMN updatable FORMAT a75 HEADING 'Updatable?' ENTMAP off +COLUMN can_use_log FORMAT a75 HEADING 'Can Use Log?' ENTMAP off +COLUMN last_refresh FORMAT a75 HEADING 'Last Refresh' ENTMAP off + +BREAK ON owner + +SELECT + '
    ' || s.owner || '
    ' owner + , s.name name + , s.master_owner master_owner + , s.master master_table + , s.master_link master_link + , nls_initcap(s.type) type + , '
    ' || DECODE(s.updatable, 'YES', 'YES', 'NO') || '
    ' updatable + , '
    ' || DECODE(s.can_use_log,'YES', 'YES', 'NO') || '
    ' can_use_log + , '
    ' || NVL(TO_CHAR(m.last_refresh_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' last_refresh +FROM + sys.dba_snapshots s + , sys.dba_mviews m +WHERE + s.name = m.mview_name + AND s.owner = m.owner +ORDER BY + s.owner + , s.name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - SITE REFRESH GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Refresh Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN name FORMAT a75 HEADING 'Name' ENTMAP off +COLUMN broken FORMAT a75 HEADING 'Broken?' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Next Date' ENTMAP off +COLUMN interval FORMAT a75 HEADING 'Interval' ENTMAP off + +BREAK ON owner + +SELECT + '
    ' || rowner || '
    ' owner + , '
    ' || rname || '
    ' name + , '
    ' || broken || '
    ' broken + , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , '
    ' || interval || '
    ' interval +FROM + sys.dba_refresh +ORDER BY + rowner + , rname; + +prompt
    [Top]

    + + + + + + + + +-- +----------------------------------------------------------------------------+ +-- | - END OF REPORT - | +-- +----------------------------------------------------------------------------+ + +SPOOL OFF + +SET MARKUP HTML OFF + +SET TERMOUT ON + +prompt +prompt Output written to: &FileName._&_dbname._&_spool_time..html + +EXIT; diff --git a/idev/dba_snapshot_database_8i.sql b/idev/dba_snapshot_database_8i.sql new file mode 100644 index 0000000..eb9e577 --- /dev/null +++ b/idev/dba_snapshot_database_8i.sql @@ -0,0 +1,4261 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_snapshot_database_8i.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : This SQL script provides a detailed report (in HTML format) on | +-- | all database metrics including installed options, storage, | +-- | performance data, and security. | +-- | VERSION : This script was designed for Oracle8i. | +-- | USAGE : | +-- | | +-- | sqlplus -s /@ @dba_snapshot_database_8i.sql | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + + +define reportHeader="Snapshot Database 8i


    Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. (www.idevelopment.info)

    " + + +-- +----------------------------------------------------------------------------+ +-- | SCRIPT SETTINGS | +-- +----------------------------------------------------------------------------+ + +set termout off +set echo off +set feedback off +set heading off +set verify off +set wrap on +set trimspool on +set serveroutput on + +set pagesize 50000 +set linesize 145 + +clear buffer computes columns breaks screen + +define fileName=dba_snapshot_database_8i + + +-- +----------------------------------------------------------------------------+ +-- | GATHER DATABASE REPORT INFORMATION | +-- +----------------------------------------------------------------------------+ + +COLUMN tdate NEW_VALUE _date NOPRINT +SELECT TO_CHAR(SYSDATE,'MM/DD/YYYY') tdate FROM dual; + +COLUMN time NEW_VALUE _time NOPRINT +SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') time FROM dual; + +COLUMN date_time NEW_VALUE _date_time NOPRINT +SELECT TO_CHAR(SYSDATE,'MM/DD/YYYY HH24:MI:SS') date_time FROM dual; + +COLUMN spool_time NEW_VALUE _spool_time NOPRINT +SELECT TO_CHAR(SYSDATE,'YYYYMMDD') spool_time FROM dual; + +COLUMN dbname NEW_VALUE _dbname NOPRINT +SELECT name dbname FROM v$database; + +COLUMN global_name NEW_VALUE _global_name NOPRINT +SELECT global_name global_name FROM global_name; + +COLUMN blocksize NEW_VALUE _blocksize NOPRINT +SELECT value blocksize FROM v$parameter WHERE name='db_block_size'; + +COLUMN startup_time NEW_VALUE _startup_time NOPRINT +SELECT TO_CHAR(startup_time, 'MM/DD/YYYY HH24:MI:SS') startup_time FROM v$instance; + +COLUMN reportRunUser NEW_VALUE _reportRunUser NOPRINT +SELECT user reportRunUser FROM dual; + + + +-- +----------------------------------------------------------------------------+ +-- | GATHER DATABASE REPORT INFORMATION | +-- +----------------------------------------------------------------------------+ + +set heading on + +set markup html on spool on preformat off entmap on - +head ' - + Database Report - + ' - +body 'BGCOLOR="#C0C0C0"' - +table 'WIDTH="90%" BORDER="1"' + +spool &FileName._&_dbname._&_spool_time..html + +set markup html on entmap off + + +-- +----------------------------------------------------------------------------+ +-- | - REPORT HEADER - | +-- +----------------------------------------------------------------------------+ + +prompt &reportHeader + + +-- +----------------------------------------------------------------------------+ +-- | - REPORT INDEX - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt

    Report Index
    - + - + - + - + - + - + - + - + - + - + - + - + - + - + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + +prompt - + - + - + - + - + - + - + + +prompt - + - + - + - + - + - + - + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + +prompt - + - + - + - + - + - + - + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
    DATABASE AND INSTANCE INFORMATION
    Report HeaderVersionOptionsInitialization Parameters
    Instance OverviewDatabase OverviewJobsProcesses Summary
    STORAGE
    Control FilesControl File RecordsOnline Redo LogsRedo Log Switches
    Redo Log ContentionDatabase GrowthTablespacesTablespace Extents
    Tablespace to OwnerOwner to TablespaceData FilesRollback Segments
    Rollback Segment Contention


    ARCHIVING
    Archiving ModeArchiving ParametersArchiving History
    RMAN
    Backup SetsBackup PiecesBackup Control Files
    PERFORMANCE
    SGA InformationDB Buffer Cache Hit RatioDictionary Cache Hit RatioLibrary Cache Hit Ratio
    Latch ContentionSystem Wait StatisticsSystem StatisticsSystem Event Statistics
    Full Table ScansSortsFile I/O StatisticsSQL Statements With Most Disk Reads
    SQL Statements With Most Buffer GetsTop 10 TablesTop 10 ProceduresOutlines
    SESSIONS
    Current Sessions SummarySession StatisticsSessions by MemoryCurrent SQL
    All LocksBlocking Locks

    SECURITY
    User AccountsUsers With DBA PrivilegesRolesDefault Passwords
    DB Links


    OBJECTS
    Object summarySegment SummaryDirectoriesLibraries
    Top 200 Segments (by size)Top 200 Segments (by number of extents)Objects Unable to ExtendObjects Which Are Nearing MAXEXTENTS
    Invalid ObjectsProcedural Object ErrorsObjects without StatisticsTables Suffering From Row Chaining/Migration
    Users With Default Tablespace - (SYSTEM)Users With Default Temp Tablespace - (SYSTEM)Objects in the SYSTEM Tablespace
    NETWORKING
    MTS Dispatcher StatisticsMTS Dispatcher Response Queue Wait StatsMTS Shared Server Wait Statistics
    REPLICATION
    Replication SummaryDeferred TransactionsAdministrative Request JobsInitialization Parameters
    (Schedule) - Purge Jobs(Schedule) - Push Jobs(Schedule) - Refresh Jobs(Multi-Master) - Master Groups
    (Multi-Master) - Master Groups and Sites(Materialized View) - Master Site Summary(Materialized View) - Master Site Logs(Materialized View) - Master Site Templates
    (Materialized View) - Summary(Materialized View) - Groups(Materialized View) - Materialized Views(Materialized View) - Refresh Groups
    + +prompt

    + + + +-- +============================================================================+ +-- | | +-- | <<<<< Database and Instance Information >>>>> | +-- | | +-- +============================================================================+ + + + +-- +----------------------------------------------------------------------------+ +-- | - REPORT HEADER - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt +prompt Report Header


    + +prompt - + - + - + - + - + - + - + - +
    Report Name&FileName._&_dbname._&_spool_time..html
    Date / Time&_date_time
    Database Name&_dbname
    Global Database Name&_global_name
    Database Startup Time&_startup_time
    Database Block Size&_blocksize
    Report Run User&_reportRunUser
    + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - VERSION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Version


    + +COLUMN banner HEADING "Banner" + +SELECT * FROM v$version; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OPTIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Options


    + +COLUMN parameter HEADING "Option Name" ENTMAP off +COLUMN value HEADING "Installed?" ENTMAP off + +SELECT + DECODE( value + , 'FALSE' + , '' || parameter || '' + , '' || parameter || '') parameter + , DECODE( value + , 'FALSE' + , '
    ' || value || '
    ' + , '
    ' || value || '
    ' ) value +FROM v$option; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - INITIALIZATION PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Initialization Parameters


    + +COLUMN pname FORMAT a75 HEADING 'Parameter Name' ENTMAP off +COLUMN value FORMAT a75 HEADING 'Value' ENTMAP off +COLUMN isdefault FORMAT a75 HEADING 'Is Default?' ENTMAP off +COLUMN issys_modifiable FORMAT a75 HEADING 'Is Dynamic?' ENTMAP off + +SELECT + DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(name,0,512) || '' + , '' || SUBSTR(name,0,512) || '' ) pname + , DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(value,0,512) || '' + , SUBSTR(value,0,512) ) value + , DECODE( isdefault + , 'FALSE' + , '
    ' || isdefault || '
    ' + , '
    ' || isdefault || '
    ') isdefault + , DECODE( isdefault + , 'FALSE' + , '
    ' || issys_modifiable || '
    ' + , '
    ' || issys_modifiable || '
    ') issys_modifiable +FROM + v$parameter +ORDER BY + name; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - INSTANCE OVERVIEW - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Instance Overview


    + +COLUMN instance_number FORMAT a75 HEADING 'Instance|Num' +COLUMN instance_name HEADING 'Instance|Name' +COLUMN host_name HEADING 'Host|Name' +COLUMN version HEADING 'Oracle|Version' +COLUMN parallel HEADING 'Parallel' +COLUMN status HEADING 'Instance|Status' +COLUMN database_status HEADING 'Database|Status' +COLUMN logins HEADING 'Logins' +COLUMN archiver HEADING 'Archiver' +COLUMN start_time HEADING 'Start|Time' +COLUMN current_time HEADING 'Current|Time' +COLUMN uptime HEADING 'Uptime|(in days)' + +SELECT + '
    ' || instance_number || '
    ' instance_number + , '
    ' || instance_name || '
    ' instance_name + , '
    ' || host_name || '
    ' host_name + , '
    ' || version || '
    ' version + , '
    ' || parallel || '
    ' parallel + , '
    ' || status || '
    ' status + , '
    ' || TO_CHAR(startup_time,'MM/DD/YYYY HH24:MI:SS') || '
    ' start_time + , '
    ' || TO_CHAR(sysdate,'MM/DD/YYYY HH24:MI:SS') || '
    ' current_time + , ROUND(TO_CHAR(SYSDATE-startup_time), 2) uptime + , '
    ' || logins || '
    ' logins + , '
    ' || archiver || '
    ' archiver +FROM v$instance; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - DATABASE OVERVIEW - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Database Overview


    + +COLUMN name FORMAT a75 HEADING 'DB Name' +COLUMN dbid HEADING 'DB ID' +COLUMN log_mode HEADING 'Log Mode' +COLUMN version_time HEADING 'Version Time' +COLUMN open_mode HEADING 'Open Mode' + +SELECT + '
    ' || name || '
    ' name + , '
    ' || dbid || '
    ' dbid + , '
    ' || log_mode || '
    ' log_mode + , '
    ' || TO_CHAR(version_time, 'MM/DD/YYYY HH24:MI:SS') || '
    ' version_time + , '
    ' || open_mode || '
    ' open_mode +FROM v$database; + +prompt
    [Top]

    + + + + + +-- +----------------------------------------------------------------------------+ +-- | - JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Jobs


    + +COLUMN job FORMAT a75 HEADING 'Job ID' ENTMAP off +COLUMN username FORMAT a75 HEADING 'User' ENTMAP off +COLUMN what FORMAT a75 HEADING 'What' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Next Run Date' ENTMAP off +COLUMN interval FORMAT a75 HEADING 'Interval' ENTMAP off +COLUMN last_date FORMAT a75 HEADING 'Last Run Date' ENTMAP off +COLUMN failures FORMAT a75 HEADING 'Failures' ENTMAP off +COLUMN broken FORMAT a75 HEADING 'Broken?' ENTMAP off + +SELECT + DECODE( broken + , 'Y' + , '
    ' || job || '
    ' + , '
    ' || job || '
    ') job + , DECODE( broken + , 'Y' + , '' || log_user || '' + , log_user ) username + , DECODE( broken + , 'Y' + , '' || what || '' + , what ) what + , DECODE( broken + , 'Y' + , '' || TO_CHAR(next_date, 'MM/DD/YYYY HH24:MI:SS') || '' + , TO_CHAR(next_date, 'MM/DD/YYYY HH24:MI:SS') ) next_date + , DECODE( broken + , 'Y' + , '' || interval || '' + , interval ) interval + , DECODE( broken + , 'Y' + , '' || TO_CHAR(last_date, 'MM/DD/YYYY HH24:MI:SS') || '' + , TO_CHAR(last_date, 'MM/DD/YYYY HH24:MI:SS') ) last_date + , DECODE( broken + , 'Y' + , '
    ' || failures || '
    ' + , '
    ' || failures || '
    ') failures + , DECODE( broken + , 'Y' + , '
    ' || broken || '
    ' + , '
    ' || broken || '
    ') broken +FROM + dba_jobs; + +prompt
    [Top]

    + + + + + +-- +----------------------------------------------------------------------------+ +-- | - PROCESSES SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Processes Summary


    + +COLUMN count FORMAT a45 HEADING 'Current No. of Processes' ENTMAP off +COLUMN value FORMAT a45 HEADING 'Max No. of Processes' ENTMAP off +COLUMN pct_usage FORMAT a45 HEADING '% Usage' ENTMAP off + +SELECT + '
    ' || TO_char(a.count) || '
    ' count + , '
    ' || b.value || '
    ' value + , '
    ' || TO_CHAR(ROUND(100*(a.count / b.value), 2)) || '%
    ' pct_usage +FROM + (select count(*) count from v$session) a + , (select value from v$parameter where name='processes') b; + + +prompt
    [Top]

    + + + + + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< STORAGE >>>>> | +-- | | +-- +============================================================================+ + + + + +-- +----------------------------------------------------------------------------+ +-- | - CONTROL FILES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Control Files


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING "Controlfile Name" ENTMAP off +COLUMN status HEADING "Status" ENTMAP off + +SELECT + '' || name || '' name + , '
    ' || DECODE(status, NULL, 'VALID', status) || '
    'status +FROM v$controlfile +ORDER BY name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - CONTROL FILE RECORDS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Control File Records


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN type FORMAT a95 HEADING "Record Section Type" ENTMAP off +COLUMN record_size FORMAT 999,999 HEADING "Record Size|(in bytes)" ENTMAP off +COLUMN records_total FORMAT 999,999 HEADING "Records Allocated" ENTMAP off +COLUMN bytes_alloc FORMAT 999,999,999 HEADING "Bytes Allocated" ENTMAP off +COLUMN records_used FORMAT 999,999 HEADING "Records Used" ENTMAP off +COLUMN bytes_used FORMAT 999,999,999 HEADING "Bytes Used" ENTMAP off +COLUMN pct_used FORMAT B999 HEADING "% Used" ENTMAP off +COLUMN first_index HEADING "First Index" ENTMAP off +COLUMN last_index HEADING "Last Index" ENTMAP off +COLUMN last_recid HEADING "Last RecID" ENTMAP off + +break on report +compute sum label 'Total: ' of record_size records_total bytes_alloc records_used bytes_used on report +compute avg label 'Average: ' of pct_used on report + +SELECT + '
    ' || type || '
    ' type + , record_size + , records_total + , (records_total * record_size) bytes_alloc + , records_used + , (records_used * record_size) bytes_used + , NVL(records_used/records_total * 100, 0) pct_used + , first_index + , last_index + , last_recid +FROM v$controlfile_record_section +ORDER BY type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - ONLINE REDO LOGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Online Redo Logs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN member HEADING 'Member' +COLUMN groupno HEADING 'Group Number' +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' + +SELECT + '' || f.member || '' member + , f.group# groupno + , l.bytes +FROM + v$logfile f + , v$log l +WHERE + f.group#=l.group# +ORDER BY + f.group#,f.member; + + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - REDO LOG SWITCHES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Redo Log Switches


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN DAY FORMAT a75 HEADING 'Day / Time' ENTMAP off +COLUMN H00 FORMAT 999,999B HEADING '00' ENTMAP off +COLUMN H01 FORMAT 999,999B HEADING '01' ENTMAP off +COLUMN H02 FORMAT 999,999B HEADING '02' ENTMAP off +COLUMN H03 FORMAT 999,999B HEADING '03' ENTMAP off +COLUMN H04 FORMAT 999,999B HEADING '04' ENTMAP off +COLUMN H05 FORMAT 999,999B HEADING '05' ENTMAP off +COLUMN H06 FORMAT 999,999B HEADING '06' ENTMAP off +COLUMN H07 FORMAT 999,999B HEADING '07' ENTMAP off +COLUMN H08 FORMAT 999,999B HEADING '08' ENTMAP off +COLUMN H09 FORMAT 999,999B HEADING '09' ENTMAP off +COLUMN H10 FORMAT 999,999B HEADING '10' ENTMAP off +COLUMN H11 FORMAT 999,999B HEADING '11' ENTMAP off +COLUMN H12 FORMAT 999,999B HEADING '12' ENTMAP off +COLUMN H13 FORMAT 999,999B HEADING '13' ENTMAP off +COLUMN H14 FORMAT 999,999B HEADING '14' ENTMAP off +COLUMN H15 FORMAT 999,999B HEADING '15' ENTMAP off +COLUMN H16 FORMAT 999,999B HEADING '16' ENTMAP off +COLUMN H17 FORMAT 999,999B HEADING '17' ENTMAP off +COLUMN H18 FORMAT 999,999B HEADING '18' ENTMAP off +COLUMN H19 FORMAT 999,999B HEADING '19' ENTMAP off +COLUMN H20 FORMAT 999,999B HEADING '20' ENTMAP off +COLUMN H21 FORMAT 999,999B HEADING '21' ENTMAP off +COLUMN H22 FORMAT 999,999B HEADING '22' ENTMAP off +COLUMN H23 FORMAT 999,999B HEADING '23' ENTMAP off +COLUMN TOTAL FORMAT 999,999,999 HEADING 'Total' ENTMAP off + +break on report +compute sum label 'Total:' avg label 'Average:' of total on report + +SELECT + '
    ' || SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) || '
    ' DAY + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23 + , COUNT(*) TOTAL +FROM + v$log_history a +GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +/ + + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - REDO LOG CONTENTION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Redo Log Contention


    + + +prompt All Latches Like redo% + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a95 HEADING 'Latch Name' +COLUMN gets FORMAT 999,999,999,999,999,999 HEADING 'Gets' +COLUMN misses FORMAT 999,999,999,999 HEADING 'Misses' +COLUMN sleeps FORMAT 999,999,999,999 HEADING 'Sleeps' +COLUMN immediate_gets FORMAT 999,999,999,999,999,999 HEADING 'Immediate Gets' +COLUMN immediate_misses FORMAT 999,999,999,999 HEADING 'Immediate Misses' + +BREAK ON report +COMPUTE SUM label 'Total:' OF gets misses sleeps immediate_gets immediate_misses ON report + +SELECT + '
    ' || INITCAP(name) || '
    ' name + , gets + , misses + , sleeps + , immediate_gets + , immediate_misses +FROM sys.v_$latch +WHERE name LIKE 'redo%' +ORDER BY 1; + + +prompt +prompt System Statistics Like redo% + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a95 HEADING 'Statistics Name' +COLUMN value FORMAT 999,999,999,999,999 HEADING 'Value' + +SELECT + '
    ' || INITCAP(name) || '
    ' name + , value +FROM + v$sysstat +WHERE + name LIKE 'redo%'; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DATABASE GROWTH - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Database Growth


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN month FORMAT a75 HEADING 'Month' +COLUMN growth FORMAT 999,999,999,999,999 HEADING 'Growth (Bytes)' + +BREAK ON report +COMPUTE SUM label 'Total:' OF growth ON report + +SELECT + '
    ' || TO_CHAR(creation_time, 'RRRR-MM') || '
    ' month + , SUM(bytes) growth +FROM sys.v_$datafile +GROUP BY TO_CHAR(creation_time, 'RRRR-MM') +ORDER BY TO_CHAR(creation_time, 'RRRR-MM'); + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLESPACES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tablespaces


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN status HEADING 'Status' ENTMAP off +COLUMN name HEADING 'Tablespace Name' ENTMAP off +COLUMN type FORMAT a12 HEADING 'TS Type' ENTMAP off +COLUMN extent_mgt FORMAT a10 HEADING 'Ext. Mgt.' ENTMAP off +COLUMN ts_size FORMAT 999,999,999,999,999 HEADING 'Tablespace Size' ENTMAP off +COLUMN free FORMAT 999,999,999,999,999 HEADING 'Free (in bytes)' ENTMAP off +COLUMN used FORMAT 999,999,999,999,999 HEADING 'Used (in bytes)' ENTMAP off +COLUMN pct_used HEADING 'Pct. Used' ENTMAP off + +BREAK ON report +COMPUTE SUM label 'Total:' OF ts_size used free ON report + +SELECT + DECODE( d.status + , 'OFFLINE' + , '
    ' || d.status || '
    ' + , '
    ' || d.status || '
    ') status + , '' || d.tablespace_name || '' name + , d.contents type + , d.extent_management extent_mgt + , NVL(a.bytes, 0) ts_size + , NVL(f.bytes, 0) free + , NVL(a.bytes - NVL(f.bytes, 0), 0) used + , '
    ' || + DECODE ( + (1-SIGN(1-SIGN(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0)) - 90))) + , 1 + , '' || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || '' + , '' || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || '' + ) + || ' %
    ' pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_data_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes) bytes + from dba_free_space + group by tablespace_name + ) f +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = f.tablespace_name(+) + AND NOT ( + d.extent_management like 'LOCAL' + AND + d.contents like 'TEMPORARY' + ) +UNION ALL +SELECT + DECODE( d.status + , 'OFFLINE' + , '
    ' || d.status || '
    ' + , '
    ' || d.status || '
    ') status + , '' || d.tablespace_name || '' name + , d.contents type + , d.extent_management extent_mgt + , NVL(a.bytes, 0) ts_size + , NVL(a.bytes - NVL(t.bytes,0), 0) free + , NVL(t.bytes, 0) used + , '
    ' || + DECODE ( + (1-SIGN(1-SIGN(TRUNC(NVL(t.bytes / a.bytes * 100, 0)) - 90))) + , 1 + , '' || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || '' + , '' || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || '' + ) + || ' %
    ' pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_temp_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes_cached) bytes + from v$temp_extent_pool + group by tablespace_name + ) t +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = t.tablespace_name(+) + AND d.extent_management like 'LOCAL' + AND d.contents like 'TEMPORARY'; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLESPACE EXTENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tablespace Extents


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace_name HEADING 'Tablespace|Name' ENTMAP off +COLUMN largest_ext FORMAT 999,999,999,999,999 HEADING 'Largest|Extent' ENTMAP off +COLUMN smallest_ext FORMAT 999,999,999,999,999 HEADING 'Smallest|Extent' ENTMAP off +COLUMN total_free FORMAT 999,999,999,999,999 HEADING 'Total|Free' ENTMAP off +COLUMN pieces FORMAT 999,999,999,999,999 HEADING 'Number of|Free Extents' ENTMAP off + +break on report +compute sum label 'Total:' of largest_ext smallest_ext total_free pieces on report + +SELECT + '' || tablespace_name || '' tablespace_name + , max(bytes) largest_ext + , min(bytes) smallest_ext + , sum(bytes) total_free + , count(*) pieces +FROM + dba_free_space +GROUP BY + tablespace_name +ORDER BY + tablespace_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLESPACE TO OWNER - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tablespace to Owner


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace_name HEADING "Tablespace Name" ENTMAP off +COLUMN owner HEADING "Owner" ENTMAP off +COLUMN segment_type HEADING "Segment Type" ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING "Size (in Bytes)" ENTMAP off +COLUMN seg_count FORMAT 999,999,999,999 HEADING "Segment Count" ENTMAP off + +break on report on tablespace_name +compute sum label 'Total: ' of seg_count bytes on report + +SELECT + '' || tablespace_name || '' tablespace_name + , '
    ' || owner || '
    ' owner + , '
    ' || segment_type || '
    ' segment_type + , sum(bytes) bytes + , count(*) seg_count +FROM + dba_segments +GROUP BY + tablespace_name + , owner + , segment_type +ORDER BY + tablespace_name + , owner + , segment_type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OWNER TO TABLESPACE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Owner to Tablespace


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING "Owner" ENTMAP off +COLUMN tablespace_name HEADING "Tablespace Name" ENTMAP off +COLUMN segment_type HEADING "Segment Type" ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING "Size (in Bytes)" ENTMAP off +COLUMN seg_count FORMAT 999,999,999,999 HEADING "Segment Count" ENTMAP off + +break on report on owner +compute sum label 'Total: ' of seg_count bytes on report + +SELECT + '' || owner || '' owner + , '
    ' || tablespace_name || '
    ' tablespace_name + , '
    ' || segment_type || '
    ' segment_type + , sum(bytes) bytes + , count(*) seg_count +FROM + dba_segments +GROUP BY + owner + , tablespace_name + , segment_type +ORDER BY + owner + , tablespace_name + , segment_type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DATA FILES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Data Files


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace HEADING 'Tablespace Name / File Class' ENTMAP off +COLUMN filename HEADING 'Filename' ENTMAP off +COLUMN filesize FORMAT 999,999,999,999,999 HEADING 'File Size' ENTMAP off +COLUMN autoextensible HEADING 'Autoextensible' ENTMAP off +COLUMN increment_by FORMAT 999,999,999,999,999 HEADING 'Next' ENTMAP off +COLUMN maxbytes FORMAT 999,999,999,999,999 HEADING 'Max' ENTMAP off + +break on report +compute sum label 'Total: ' of filesize on report + +SELECT /*+ ordered */ + '' || d.tablespace_name || '' tablespace + , '' || d.file_name || '' filename + , d.bytes filesize + , '
    ' || d.autoextensible || '
    ' autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_data_files d + , v$datafile v + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +WHERE + (d.file_name = v.name) +UNION +SELECT + '' || d.tablespace_name || '' tablespace + , '' || d.file_name || '' filename + , d.bytes filesize + , '
    ' || d.autoextensible || '
    ' autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_temp_files d + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +UNION +SELECT + '[ ONLINE REDO LOG ]' + , '' || a.member || '' + , b.bytes + , null + , TO_NUMBER(null) + , TO_NUMBER(null) +FROM + v$logfile a + , v$log b +WHERE + a.group# = b.group# +UNION +SELECT + '[ CONTROL FILE ]' + , '' || a.name || '' + , TO_NUMBER(null) + , null + , TO_NUMBER(null) + , TO_NUMBER(null) +FROM + v$controlfile a +ORDER BY 1,2; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - ROLLBACK SEGMENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Rollback Segments


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN roll_name HEADING 'Rollback Name' ENTMAP off +COLUMN tablespace HEADING 'Tablspace' ENTMAP off +COLUMN in_extents HEADING 'Init/Next Extents' ENTMAP off +COLUMN m_extents HEADING 'Min/Max Extents' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN wraps FORMAT 999,999,999 HEADING 'Wraps' ENTMAP off +COLUMN shrinks FORMAT 999,999,999 HEADING 'Shrinks' ENTMAP off +COLUMN opt FORMAT 999,999,999,999 HEADING 'Opt. Size' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' ENTMAP off +COLUMN extents FORMAT 999,999,999 HEADING 'Extents' ENTMAP off + +clear computes breaks + +break on report +compute sum label 'Total:' of bytes extents shrinks wraps on report + +SELECT + '' || a.owner || '.' || a.segment_name || '' roll_name + , a.tablespace_name tablespace + , '
    ' || + TO_CHAR(a.initial_extent) || ' / ' || + TO_CHAR(a.next_extent) || + '
    ' in_extents + , '
    ' || + TO_CHAR(a.min_extents) || ' / ' || + TO_CHAR(a.max_extents) || + '
    ' m_extents + , DECODE( a.status + , 'OFFLINE' + , '
    ' || a.status || '
    ' + , '
    ' || a.status || '
    ') status + , b.bytes bytes + , b.extents extents + , d.shrinks shrinks + , d.wraps wraps + , d.optsize opt +FROM + dba_rollback_segs a + , dba_segments b + , v$rollname c + , v$rollstat d +WHERE + a.segment_name = b.segment_name + AND a.segment_name = c.name (+) + AND c.usn = d.usn (+) +ORDER BY a.segment_name; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - ROLLBACK SEGMENT CONTENTION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Rollback Segment Contention


    + + +prompt Rollback Statistics From V$ROLLSTAT + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN roll_name HEADING 'Rollback Name' ENTMAP off +COLUMN gets FORMAT 999,999,999 HEADING 'Gets' ENTMAP off +COLUMN waits FORMAT 999,999,999 HEADING 'waits' ENTMAP off +COLUMN immediate_misses FORMAT 999,999,999 HEADING 'Immediate Misses' ENTMAP off +COLUMN hit_ratio HEADING 'Hit Ratio' ENTMAP off + +BREAK ON report +COMPUTE SUM label 'Total:' OF gets waits ON report + +SELECT + '' || b.name || '' roll_name + , gets gets + , waits waits + , '
    ' || TO_CHAR(ROUND(((gets - waits)*100)/gets, 2)) || '%
    ' hit_ratio +FROM + sys.v_$rollstat a + , sys.v_$rollname b +WHERE + a.USN = b.USN +ORDER BY + 1; + + +prompt +prompt Wait Statistics + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN class HEADING 'Class' +COLUMN ratio HEADING 'Wait Ratio' + +SELECT + '' || w.class || '' class + , '
    ' || TO_CHAR(ROUND(100*(w.count/SUM(s.value)),8)) || '%
    ' ratio +FROM + v$waitstat w + , v$sysstat s +WHERE + w.class IN ( 'system undo header' + , 'system undo block' + , 'undo header' + , 'undo block' + ) + AND s.name IN ('db block gets', 'consistent gets') +GROUP BY w.class, w.count; + + +prompt
    [Top]

    + + + + +-- +============================================================================+ +-- | | +-- | <<<<< ARCHIVING >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVING MODE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archiving Mode


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN db_log_mode FORMAT a95 HEADING 'Database|Log Mode' ENTMAP off +COLUMN log_archive_start FORMAT a95 HEADING 'Automatic|Archival' ENTMAP off +COLUMN log_archive_dest_1 HEADING 'Archive|Destination' ENTMAP off +COLUMN oldest_online_log_sequence FORMAT 999999999999999 HEADING 'Oldest Online |Log Sequence' ENTMAP off +COLUMN current_log_seq FORMAT 999999999999999 HEADING 'Current |Log Sequence' ENTMAP off + +SELECT + '
    ' || d.log_mode || '
    ' db_log_mode + , '
    ' || p.log_archive_start || '
    ' log_archive_start + , p.log_archive_dest_1 log_archive_dest_1 + , c.current_log_seq current_log_seq + , o.oldest_online_log_sequence oldest_online_log_sequence +FROM + (select + DECODE( log_mode + , 'ARCHIVELOG', 'Archive Mode' + , 'NOARCHIVELOG', 'No Archive Mode' + , log_mode + ) log_mode + from v$database + ) d + , (select + DECODE( a.value + , 'TRUE', 'Enabled' + , 'FALSE', 'Disabled') log_archive_start + , b.value log_archive_dest_1 + from + v$parameter a + , v$parameter b + where + a.name = 'log_archive_start' + and b.name = 'log_archive_dest_1' + ) p + , (select a.sequence# current_log_seq + from v$log a + where a.status = 'CURRENT' + ) c + , (select min(a.sequence#) oldest_online_log_sequence + from v$log a + ) o +/ + + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVING PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archiving Parameters


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Parameter Name' ENTMAP off +COLUMN value HEADING 'Parameter Value' ENTMAP off + +SELECT + '' || a.name || '' name + , a.value value +FROM + v$parameter a +WHERE + a.name like 'log_%' +ORDER BY + a.name; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVING HISTORY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archiving History


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN sequence# FORMAT a79 HEADING 'Sequence#' ENTMAP off +COLUMN name HEADING 'Name' ENTMAP off +COLUMN first_change# HEADING 'First|Change #' ENTMAP off +COLUMN first_time FORMAT a60 HEADING 'First|Time' ENTMAP off +COLUMN next_change# HEADING 'Next|Change #' ENTMAP off +COLUMN next_time FORMAT a60 HEADING 'Next|Time' ENTMAP off +COLUMN log_size FORMAT 999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off +COLUMN archived FORMAT a31 HEADING 'Archived?' ENTMAP off +COLUMN deleted FORMAT a31 HEADING 'Deleted?' ENTMAP off + +SELECT + '
    ' || sequence# || '
    ' sequence# + , name + , first_change# + , '
    ' || TO_CHAR(first_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' first_time + , next_change# + , '
    ' || TO_CHAR(next_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' next_time + , (blocks * block_size) log_size + , '
    ' || archived || '
    ' archived + , '
    ' || deleted || '
    ' deleted +FROM + v$archived_log +WHERE + archived = 'NO' + OR deleted = 'NO'; + +prompt
    [Top]

    + + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< RMAN >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - BACKUP SETS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Backup Sets


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN backup_type FORMAT a70 HEADING 'Backup Type' ENTMAP off +COLUMN device_type HEADING 'Device Type' ENTMAP off +COLUMN controlfile_included FORMAT a30 HEADING 'Controlfile Included?' ENTMAP off +COLUMN incremental_level HEADING 'Incremental Level' ENTMAP off +COLUMN pieces FORMAT 999,999,999,999 HEADING '# of Pieces' ENTMAP off +COLUMN start_time FORMAT a40 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a40 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN tag HEADING 'Tag' ENTMAP off +COLUMN block_size FORMAT 999,999,999,999,999 HEADING 'Block Size' ENTMAP off + +BREAK ON report +COMPUTE SUM label 'Total:' OF pieces elapsed_seconds ON report + +prompt Available backup sets. Includes available and expired backup sets. + +SELECT + '
    ' || bs.recid || '
    ' bs_key + , DECODE(backup_type + , 'L', '
    Archived Redo Logs
    ' + , 'D', '
    Datafile Full Backup
    ' + , 'I', '
    Incremental Backup
    ') backup_type + , '
    ' || device_type || '
    ' device_type + , '
    ' || + DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included) || '
    ' controlfile_included + , bs.incremental_level incremental_level + , bs.pieces pieces + , '
    ' || TO_CHAR(bs.start_time, 'DD-MON-YYYY HH24:MI:SS') || '
    ' start_time + , '
    ' || TO_CHAR(bs.completion_time, 'DD-MON-YYYY HH24:MI:SS') || '
    ' completion_time + , bs.elapsed_seconds elapsed_seconds + , bp.tag tag + , bs.block_size block_size +FROM + v$backup_set bs + , (select distinct + set_stamp + , set_count + , tag + , device_type + from v$backup_piece + where status in ('A', 'X')) bp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count +ORDER BY + bs.recid; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - BACKUP PIECES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Backup Pieces


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN piece# HEADING 'Piece #' ENTMAP off +COLUMN copy# HEADING 'Copy #' ENTMAP off +COLUMN bp_key HEADING 'BP Key' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN handle HEADING 'Handle' ENTMAP off +COLUMN start_time FORMAT a40 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a40 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP off + +BREAK ON bs_key + +prompt Available backup pieces. Includes available and expired backup sets. + +SELECT + '
    ' || bs.recid || '
    ' bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , DECODE( status + , 'A', '
    Available
    ' + , 'D', '
    Deleted
    ' + , 'X', '
    Expired
    ') status + , handle handle + , '
    ' || TO_CHAR(bp.start_time, 'DD-MON-YYYY HH24:MI:SS') || '
    ' start_time + , '
    ' || TO_CHAR(bp.completion_time, 'DD-MON-YYYY HH24:MI:SS') || '
    ' completion_time + , bp.elapsed_seconds elapsed_seconds +FROM + v$backup_set bs + , v$backup_piece bp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bp.status IN ('A', 'X') +ORDER BY + bs.recid + , piece#; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - BACKUP CONTROL FILES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Backup Control Files


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN piece# HEADING 'Piece #' ENTMAP off +COLUMN copy# HEADING 'Copy #' ENTMAP off +COLUMN bp_key HEADING 'BP Key' ENTMAP off +COLUMN controlfile_included FORMAT a75 HEADING 'Controlfile Included?' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN handle HEADING 'Handle' ENTMAP off +COLUMN start_time FORMAT a40 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a40 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP off + +BREAK ON bs_key + +prompt Available automatic control files within all available (and expired) backup sets. + +SELECT + '
    ' || bs.recid || '
    ' bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , '
    ' || + DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included) || + '
    ' controlfile_included + , DECODE( status + , 'A', '
    Available
    ' + , 'D', '
    Deleted
    ' + , 'X', '
    Expired
    ') status + , handle handle +FROM + v$backup_set bs + , v$backup_piece bp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bp.status IN ('A', 'X') + AND bs.controlfile_included != 'NO' +ORDER BY + bs.recid + , piece#; + +prompt
    [Top]

    + + + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< PERFORMANCE >>>>> | +-- | | +-- +============================================================================+ + + + +-- +----------------------------------------------------------------------------+ +-- | - SGA INFORMATION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SGA Information


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a79 HEADING 'Pool Name' ENTMAP off +COLUMN value FORMAT 999,999,999,999 HEADING 'Bytes' ENTMAP off + +break on report +compute sum label 'Total:' of value on report + +SELECT + '
    ' || name || '
    ' name + , value +FROM + v$sga; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - DB BUFFER CACHE HIT RATIO - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt DB Buffer Cache Hit Ratio


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN consistent_gets FORMAT 999,999,999,999,999,999 HEADING "Consistent Gets" ENTMAP off +COLUMN db_block_gets FORMAT 999,999,999,999,999,999 HEADING "DB Block Gets" ENTMAP off +COLUMN phys_reads FORMAT 999,999,999,999,999,999 HEADING "Physical Reads" ENTMAP off +COLUMN db_hit_ratio HEADING "Hit Ratio" ENTMAP off + +SELECT + SUM(DECODE(name, 'consistent gets', value, 0)) consistent_gets + , SUM(DECODE(name, 'db block gets', value, 0)) db_block_gets + , SUM(DECODE(name, 'physical reads', value, 0)) phys_reads + , '
    ' || + TO_CHAR(ROUND((SUM(DECODE(name, 'consistent gets', value, 0)) + + SUM(DECODE(name, 'db block gets', value, 0)) - + SUM(DECODE(name, 'physical reads', value, 0))) / + (SUM(DECODE(name, 'consistent gets', value, 0)) + + SUM(DECODE(name, 'db block gets', value, 0)))*100, 2)) || + '%
    ' db_hit_ratio +FROM v$sysstat; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DICTIONARY CACHE HIT RATIO - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dictionary Cache Hit Ratio


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN gets FORMAT 999,999,999,999,999,999 HEADING "Misses" ENTMAP off +COLUMN misses FORMAT 999,999,999,999,999,999 HEADING "Gets" ENTMAP off +COLUMN dc_hit_ratio HEADING "Hit Ratio" ENTMAP off + +SELECT + SUM(gets) gets + , SUM(getmisses) misses + , '
    ' || + TO_CHAR(ROUND((((SUM(gets)-SUM(getmisses))/SUM(gets))*100), 2)) || + '%
    ' dc_hit_ratio +FROM + v$rowcache; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - LIBRARY CACHE HIT RATIO - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Library Cache Hit Ratio


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN pins FORMAT 999,999,999,999,999,999 HEADING "Pins - (Executions)" ENTMAP off +COLUMN reloads FORMAT 999,999,999,999,999,999 HEADING "Reloads - (Cache Miss)" ENTMAP off +COLUMN lc_hit_ratio HEADING "Hit Ratio" ENTMAP off + +SELECT + SUM(pins) pins + , SUM(reloads) reloads + , '
    ' || + TO_CHAR(ROUND((((SUM(pins)-SUM(reloads))/SUM(pins))*100),2)) || + '%
    ' lc_hit_ratio +FROM + v$librarycache; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - LATCH CONTENTION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Latch Contention


    + +prompt Latches with Gets, Misses, Sleeps, Immediate Gets, or Immediate Misses Greater Than 0 + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN latch_name FORMAT a110 HEADING 'Latch Name' ENTMAP off +COLUMN gets FORMAT 999,999,999,999,999,999 HEADING 'Gets' ENTMAP off +COLUMN misses FORMAT 999,999,999,999,999,999 HEADING 'Misses' ENTMAP off +COLUMN sleeps FORMAT 999,999,999,999,999,999 HEADING 'Sleeps' ENTMAP off +COLUMN miss_ratio HEADING 'Willing to Wait Ratio' ENTMAP off +COLUMN imm_gets FORMAT 999,999,999,999,999,999 HEADING 'Immediate Gets' ENTMAP off +COLUMN imm_misses FORMAT 999,999,999,999,999,999 HEADING 'Immediate Misses' ENTMAP off +COLUMN imm_miss_ratio HEADING 'Immediate Ratio' ENTMAP off + +SELECT + '' || SUBSTR(a.name,1,40) || '' latch_name + , gets gets + , misses misses + , sleeps sleeps + , '
    ' || ROUND((misses/(gets+.001))*100, 4) || '%
    ' miss_ratio + , immediate_gets imm_gets + , immediate_misses imm_misses + , '
    ' || ROUND((immediate_misses/(immediate_gets+.001))*100, 4) || '%
    ' imm_miss_ratio +FROM + v$latch a + , v$latchname b +WHERE + a.latch# = b.latch# + AND ( gets > 0 + OR misses > 0 + OR sleeps > 0 + OR immediate_gets > 0 + OR immediate_misses > 0 + ) +ORDER BY + misses DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - SYSTEM WAIT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt System Wait Statistics


    + +prompt Classes with Counts Greater Than 0 + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN class FORMAT A95 HEADING 'Class' ENTMAP off +COLUMN count FORMAT 99999999999990 HEADING 'Count' ENTMAP off + +SELECT + '' || class || '' class + , count +FROM + v$waitstat +WHERE + count > 0 +ORDER BY + 2 DESC + , 1; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - SYSTEM STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt System Statistics


    + +prompt Statistics with Values Greater Than 0 + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT A95 HEADING 'Name' ENTMAP off +COLUMN value FORMAT 999,999,999,999,999,999,999,990 HEADING 'Value' ENTMAP off + +SELECT + '' || name || '' name + , value +FROM + v$sysstat +WHERE + value > 0 +ORDER BY + 2 DESC + , 1; + +prompt
    [Top]

    + + +-- +----------------------------------------------------------------------------+ +-- | - SYSTEM EVENT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt System Event Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +prompt Non-Idle Events with Total Waits Greater Than 0 +prompt + +prompt - +EVENT: The name of the wait event.
    - +TOTAL_WAITS: The total number of waits for this event.
    - +TOTAL_TIMEOUTS: The total number of timeouts for this event.
    - +TIME_WAITED: The total amount of time waited for this event, in hundredths of a second.
    - +AVERAGE_WAIT: The average amount of time waited for this event, in hundredths of a second. + + +COLUMN event FORMAT a95 HEADING "Event" ENTMAP off +COLUMN total_waits FORMAT 999,999,999,999,999,999 HEADING "Total Waits" ENTMAP off +COLUMN total_timeouts FORMAT 999,999,999,999,999,999 HEADING "Total Timeouts" ENTMAP off +COLUMN time_waited FORMAT 999,999,999,999,999,999 HEADING "Time Waited" ENTMAP off +COLUMN average_wait FORMAT 999,999,999,999,999,999 HEADING "Average Wait" ENTMAP off + +SELECT + '' || event || '' event + , total_waits + , total_timeouts + , time_waited + , average_wait +FROM + v$system_event +WHERE + total_waits > 0 + AND event NOT IN ( 'PX Idle Wait' + , 'pmon timer' + , 'smon timer' + , 'rdbms ipc message' + , 'parallel dequeue wait' + , 'parallel query dequeue' + , 'virtual circuit' + , 'SQL*Net message from client' + , 'SQL*Net message to client' + , 'SQL*Net more data to client' + , 'client message','Null event' + , 'WMON goes to sleep' + , 'virtual circuit status' + , 'dispatcher timer' + , 'pipe get' + , 'slave wait' + , 'KXFX: execution message dequeue - Slaves' + , 'parallel query idle wait - Slaves' + , 'lock manager wait for remote message') +ORDER BY + time_waited DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - FULL TABLE SCANS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Full Table Scans


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN large_table_scans FORMAT 999,999,999,999,999 HEADING 'Large Table Scans' ENTMAP off +COLUMN small_table_scans FORMAT 999,999,999,999,999 HEADING 'Small Table Scans' ENTMAP off +COLUMN pct_large_scans HEADING 'Pct. Large Scans' ENTMAP off + +SELECT + a.value large_table_scans + , b.value small_table_scans + , '
    ' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
    ' pct_large_scans +FROM + v$sysstat a + , v$sysstat b +WHERE + a.name = 'table scans (long tables)' + AND b.name = 'table scans (short tables)'; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - SORTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Sorts


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN disk_sorts FORMAT 999,999,999,999,999 HEADING 'Disk Sorts' ENTMAP off +COLUMN memory_sorts FORMAT 999,999,999,999,999 HEADING 'Memory Sorts' ENTMAP off +COLUMN pct_disk_sorts HEADING 'Pct. Disk Sorts' ENTMAP off + +SELECT + a.value disk_sorts + , b.value memory_sorts + , '
    ' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
    ' pct_disk_sorts +FROM + v$sysstat a + , v$sysstat b +WHERE + a.name = 'sorts (disk)' + AND b.name = 'sorts (memory)'; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - FILE I/O STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt File I/O Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace_name FORMAT a50 HEAD 'Tablespace' ENTMAP off +COLUMN fname HEAD 'File Name' ENTMAP off +COLUMN phyrds FORMAT 999,999,999,999,999 HEAD 'Physical Reads' ENTMAP off +COLUMN phywrts FORMAT 999,999,999,999,999 HEAD 'Physical Writes' ENTMAP off +COLUMN read_pct HEAD 'Read Pct.' ENTMAP off +COLUMN write_pct HEAD 'Write Pct.' ENTMAP off +COLUMN total_io FORMAT 999,999,999,999,999 HEAD 'Total I/O' ENTMAP off + +break on report +compute sum label 'Total: ' of phyrds phywrts total_io on report + +SELECT + '' || df.tablespace_name || '' tablespace_name + , df.file_name fname + , fs.phyrds phyrds + , '
    ' || ROUND((fs.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
    ' read_pct + , fs.phywrts phywrts + , '
    ' || ROUND((fs.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
    ' write_pct + , (fs.phyrds + fs.phywrts) total_io +FROM + sys.dba_data_files df + , v$filestat fs + , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst + , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst +WHERE + df.file_id = fs.file# +UNION +SELECT + '' || tf.tablespace_name || '' tablespace_name + , tf.file_name fname + , ts.phyrds phyrds + , '
    ' || ROUND((ts.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
    ' read_pct + , ts.phywrts phywrts + , '
    ' || ROUND((ts.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
    ' write_pct + , (ts.phyrds + ts.phywrts) total_io +FROM + sys.dba_temp_files tf + , v$tempstat ts + , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst + , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst +WHERE + tf.file_id = ts.file# +ORDER BY phyrds DESC; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - SQL STATEMENTS WITH MOST DISK READS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SQL Statements With Most Disk Reads


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP off +COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP off +COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP off + +prompt SQL with disk reads greater than 1000 + +SELECT + '' || UPPER(b.username) || '' username + , a.disk_reads disk_reads + , a.executions executions + , (a.disk_reads / decode(a.executions, 0, 1, a.executions)) reads_per_exec + , sql_text sql +FROM + sys.v_$sqlarea a + , dba_users b +WHERE + a.parsing_user_id = b.user_id + AND a.disk_reads > 1000 + AND b.username NOT IN ('SYS','SYSTEM') +ORDER BY + a.disk_reads DESC; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - SQL STATEMENTS WITH MOST BUFFER GETS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SQL Statements With Most Buffer Gets


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN buffer_gets FORMAT 999,999,999,999,999 HEADING 'Buffer Gets' ENTMAP off +COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP off +COLUMN gets_per_exec FORMAT 999,999,999,999,999 HEADING 'Buffer Gets / Execution' ENTMAP off + +prompt SQL with buffer gets greater than 1000 + +SELECT + '' || UPPER(b.username) || '' username + , a.buffer_gets buffer_gets + , a.executions executions + , (a.buffer_gets / decode(a.executions, 0, 1, a.executions)) gets_per_exec + , sql_text sql +FROM + sys.v_$sqlarea a + , dba_users b +WHERE + a.parsing_user_id = b.user_id + AND a.buffer_gets > 1000 + AND b.username NOT IN ('SYS','SYSTEM') +ORDER BY + a.buffer_gets DESC; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 10 TABLES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 10 Tables


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN ctyp FORMAT a79 HEADING 'Command Type' ENTMAP off +COLUMN obj FORMAT a30 HEADING 'Object Name' ENTMAP off +COLUMN noe FORMAT 999,999,999,999,999 HEADING 'Number of Executions' ENTMAP off +COLUMN gets FORMAT 999,999,999,999,999 HEADING 'Buffer Gets' ENTMAP off +COLUMN rowp FORMAT 999,999,999,999,999 HEADING 'Rows Processed' ENTMAP off + +break on report +compute sum label 'Total: ' of noe gets rowp on report + +SELECT + '
    ' || ctyp || '
    ' ctyp + , obj + , 0 - exem noe + , gets + , rowp +FROM ( + select distinct exem, ctyp, obj, gets, rowp + from (select + DECODE( s.command_type + , 2, 'INSERT INTO ' + , 3, 'SELECT FROM ' + , 6, 'UPDATE OF ' + , 7, 'DELETE FROM ' + , 26, 'LOCK OF ') ctyp + , o.owner || '.' || o.name obj + , SUM(0 - s.executions) exem + , SUM(s.buffer_gets) gets + , SUM(s.rows_processed) rowp + from + v$sql s + , v$object_dependency d + , v$db_object_cache o + where + s.command_type IN (2,3,6,7,26) + and d.from_address = s.address + and d.to_owner = o.owner + and d.to_name = o.name + and o.type = 'TABLE' + group by + s.command_type + , o.owner + , o.name + ) +) +WHERE rownum <= 10; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 10 PROCEDURES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 10 Procedures


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN ptyp FORMAT a79 HEADING 'Object Type' +COLUMN obj FORMAT a42 HEADING 'Object Name' +COLUMN noe FORMAT 999,999,999,999,999 HEADING 'Number of Executions' + +break on report +compute sum label 'Total: ' of noe on report + +SELECT + '
    ' || ptyp || '
    ' ptyp + , obj + , 0 - exem noe +FROM ( select distinct exem, ptyp, obj + from ( select + o.type ptyp + , o.owner || '.' || o.name obj + , 0 - o.executions exem + from v$db_object_cache O + where o.type in ( 'FUNCTION' + , 'PACKAGE' + , 'PACKAGE BODY' + , 'PROCEDURE' + , 'TRIGGER') + ) + ) +WHERE rownum <= 10; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OUTLINES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Outlines


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a125 HEADING 'Owner' ENTMAP off +COLUMN name FORMAT a125 HEADING 'Name' ENTMAP off +COLUMN category HEADING 'Category' ENTMAP off +COLUMN used HEADING 'Used' ENTMAP off +COLUMN timestamp HEADING 'Time Stamp' ENTMAP off +COLUMN version HEADING 'Version' ENTMAP off +COLUMN sql_text HEADING 'SQL Text' ENTMAP off + +SELECT + '
    ' || owner || '
    ' owner + , '
    ' || name || '
    ' name + , category + , used + , TO_CHAR(timestamp, 'mm/dd/yyyy HH24:MI:SS') timestamp + , version + , sql_text +FROM + dba_outlines +ORDER BY + owner + , name; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< SESSIONS >>>>> | +-- | | +-- +============================================================================+ + + + +-- +----------------------------------------------------------------------------+ +-- | - CURRENT SESSIONS SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Current Sessions Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN count FORMAT a45 HEADING 'Current No. of Processes' ENTMAP off +COLUMN value FORMAT a45 HEADING 'Max No. of Processes' ENTMAP off +COLUMN pct_usage FORMAT a45 HEADING '% Usage' ENTMAP off + +SELECT + '
    ' || TO_char(a.count) || '
    ' count + , '
    ' || b.value || '
    ' value + , '
    ' || TO_CHAR(ROUND(100*(a.count / b.value), 2)) || '%
    ' pct_usage +FROM + (select count(*) count from v$session) a + , (select value from v$parameter where name='processes') b; + + +COLUMN username FORMAT a79 HEADING 'Oracle|User' ENTMAP off +COLUMN num_user_sess FORMAT 999,999,999,999 HEADING 'Total Number|of Logins' ENTMAP off +COLUMN count_a FORMAT 999,999,999 HEADING 'Active|Logins' ENTMAP off +COLUMN count_i FORMAT 999,999,999 HEADING 'Inactive|Logins' ENTMAP off +COLUMN count_k FORMAT 999,999,999 HEADING 'Killed|Logins' ENTMAP off + +break on report +compute sum label 'Total: ' of num_user_sess count_a count_i count_k on report + +SELECT + '
    ' || nvl(sess.username, '[B.G. Process]') || '
    ' username + , count(*) num_user_sess + , nvl(act.count, 0) count_a + , nvl(inact.count, 0) count_i + , nvl(killed.count, 0) count_k +FROM + v$session sess + , (SELECT count(*) count, nvl(username, '[B.G. Process]') username + FROM v$session + WHERE status = 'ACTIVE' + GROUP BY username) act + , (SELECT count(*) count, nvl(username, '[B.G. Process]') username + FROM v$session + WHERE status = 'INACTIVE' + GROUP BY username) inact + , (SELECT count(*) count, nvl(username, '[B.G. Process]') username + FROM v$session + WHERE status = 'KILLED' + GROUP BY username) killed +WHERE + nvl(sess.username, '[B.G. Process]') = act.username (+) + and nvl(sess.username, '[B.G. Process]') = inact.username (+) + and nvl(sess.username, '[B.G. Process]') = killed.username (+) +GROUP BY + sess.username + , act.count + , inact.count + , killed.count +ORDER BY username; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - SESSION STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Session Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN sid FORMAT a80 HEADING 'SID' +COLUMN session_status FORMAT a80 HEADING 'Status' ENTMAP off +COLUMN oracle_username FORMAT a30 HEADING 'Oracle User' ENTMAP off +COLUMN machine FORMAT a64 HEADING 'Machine' ENTMAP off +COLUMN session_program FORMAT a18 HEADING 'Session Program' ENTMAP off +COLUMN cpu_value FORMAT 999,999,999,999 HEADING 'CPU' ENTMAP off +COLUMN logical_io FORMAT 999,999,999,999 HEADING 'Logical I/O' ENTMAP off +COLUMN physical_reads FORMAT 999,999,999,999 HEADING 'Physical Reads' ENTMAP off +COLUMN physical_writes FORMAT 999,999,999,999 HEADING 'Physical Writes' ENTMAP off +COLUMN session_pga_memory FORMAT 999,999,999,999 HEADING 'PGA Memory' ENTMAP off +COLUMN open_cursors FORMAT 999,999 HEADING 'Cursors' ENTMAP off +COLUMN num_transactions FORMAT 999,999 HEADING 'Txns' ENTMAP off + +break on report +compute sum label 'Total: ' of cpu_value logical_io physical_reads physical_writes session_pga_memory open_cursors num_transactions on report + +prompt User Sessions and Statistics Ordered by Logical I/O + +SELECT + '
    ' || TO_CHAR(s.sid) || '
    ' sid + , DECODE( s.status + , 'ACTIVE' + , '
    ' || s.status || '
    ' + , 'KILLED' + , '
    ' || s.status || '
    ' + , '
    ' || s.status || '
    ') session_status + , NVL(s.username, '[B.G. Process]') oracle_username + , s.machine machine + , s.program session_program + , sstat1.value cpu_value + , sstat2.value + + sstat3.value logical_io + , sstat4.value physical_reads + , sstat5.value physical_writes + , sstat6.value session_pga_memory + , sstat7.value open_cursors + , sstat8.value num_transactions +FROM + v$process p + , v$session s + , v$sesstat sstat1 + , v$sesstat sstat2 + , v$sesstat sstat3 + , v$sesstat sstat4 + , v$sesstat sstat5 + , v$sesstat sstat6 + , v$sesstat sstat7 + , v$sesstat sstat8 + , v$statname statname1 + , v$statname statname2 + , v$statname statname3 + , v$statname statname4 + , v$statname statname5 + , v$statname statname6 + , v$statname statname7 + , v$statname statname8 +WHERE + p.addr (+) = s.paddr + AND s.sid = sstat1.sid + AND s.sid = sstat2.sid + AND s.sid = sstat3.sid + AND s.sid = sstat4.sid + AND s.sid = sstat5.sid + AND s.sid = sstat6.sid + AND s.sid = sstat7.sid + AND s.sid = sstat8.sid + AND statname1.statistic# = sstat1.statistic# + AND statname2.statistic# = sstat2.statistic# + AND statname3.statistic# = sstat3.statistic# + AND statname4.statistic# = sstat4.statistic# + AND statname5.statistic# = sstat5.statistic# + AND statname6.statistic# = sstat6.statistic# + AND statname7.statistic# = sstat7.statistic# + AND statname8.statistic# = sstat8.statistic# + AND statname1.name = 'CPU used by this session' + AND statname2.name = 'db block gets' + AND statname3.name = 'consistent gets' + AND statname4.name = 'physical reads' + AND statname5.name = 'physical writes' + AND statname6.name = 'session pga memory' + AND statname7.name = 'opened cursors current' + AND statname8.name = 'user commits' +ORDER BY logical_io DESC; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - SESSIONS BY MEMORY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Sessions by Memory


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN sid FORMAT a80 HEADING 'SID' ENTMAP off +COLUMN serial_id FORMAT 999999 HEADING 'Serial#' ENTMAP off +COLUMN session_status FORMAT a80 HEADING 'Status' ENTMAP off +COLUMN oracle_username FORMAT a30 HEADING 'Oracle User' ENTMAP off +COLUMN os_username HEADING 'O/S User' ENTMAP off +COLUMN os_pid FORMAT 9999999 HEADING 'O/S PID' ENTMAP off +COLUMN session_program FORMAT a18 HEADING 'Session Program' ENTMAP off +COLUMN session_machine HEADING 'Machine' ENTMAP off +COLUMN session_pga_memory FORMAT 999,999,999,999 HEADING 'PGA Memory' ENTMAP off +COLUMN session_pga_memory_max FORMAT 999,999,999,999 HEADING 'PGA Memory Max' ENTMAP off +COLUMN session_uga_memory FORMAT 999,999,999,999 HEADING 'UGA Memory' ENTMAP off +COLUMN session_uga_memory_max FORMAT 999,999,999,999 HEADING 'UGA Memory MAX' ENTMAP off + +break on report +compute sum label 'Total: ' of session_pga_memory session_pga_memory_max session_uga_memory session_uga_memory_max on report + +prompt User Sessions Ordered by Current PGA Size + +SELECT + '
    ' || TO_CHAR(s.sid) || '
    ' sid + , s.serial# serial_id + , DECODE( s.status + , 'ACTIVE' + , '
    ' || s.status || '
    ' + , 'KILLED' + , '
    ' || s.status || '
    ' + , '
    ' || s.status || '
    ') session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.program session_program + , s.machine session_machine + , sstat1.value session_pga_memory + , sstat2.value session_pga_memory_max + , sstat3.value session_uga_memory + , sstat4.value session_uga_memory_max +FROM + v$process p + , v$session s + , v$sesstat sstat1 + , v$sesstat sstat2 + , v$sesstat sstat3 + , v$sesstat sstat4 + , v$statname statname1 + , v$statname statname2 + , v$statname statname3 + , v$statname statname4 +WHERE + p.addr (+) = s.paddr + AND s.sid = sstat1.sid + AND s.sid = sstat2.sid + AND s.sid = sstat3.sid + AND s.sid = sstat4.sid + AND statname1.statistic# = sstat1.statistic# + AND statname2.statistic# = sstat2.statistic# + AND statname3.statistic# = sstat3.statistic# + AND statname4.statistic# = sstat4.statistic# + AND statname1.name = 'session pga memory' + AND statname2.name = 'session pga memory max' + AND statname3.name = 'session uga memory' + AND statname4.name = 'session uga memory max' +ORDER BY session_pga_memory DESC; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - CURRENT SQL - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Current SQL


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN sid FORMAT 99999 HEADING 'SID' ENTMAP off +COLUMN serial HEADING 'Serial #' ENTMAP off +COLUMN session_status FORMAT a90 HEADING 'Status' ENTMAP off +COLUMN oracle_username FORMAT a80 HEADING 'Oracle User' ENTMAP off +COLUMN os_username FORMAT a12 HEADING 'O/S User' ENTMAP off +COLUMN os_pid FORMAT 9999999 HEADING 'O/S PID' ENTMAP off +COLUMN session_program FORMAT a26 HEADING 'Session Program' ENTMAP off +COLUMN current_sql FORMAT a45 HEADING 'Current SQL' ENTMAP off WRAP + + +prompt All Active User Sessions with SQL + +SELECT + '
    ' || s.sid || '
    ' sid + , s.serial# serial + , '
    ' || s.status || '
    ' session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.program session_program + , sa.sql_text current_sql +FROM + v$process p + , v$session s + , v$sqlarea sa +WHERE + p.addr (+) = s.paddr + AND s.sql_address = sa.address(+) + AND s.sql_hash_value = sa.hash_value(+) + AND s.audsid <> userenv('SESSIONID') + AND s.username IS NOT NULL + AND s.status = 'ACTIVE' +ORDER BY sid; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - ALL LOCKS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt All Locks


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN session_id FORMAT a75 HEAD 'SID' ENTMAP off +COLUMN lock_type HEAD 'Lock Type' ENTMAP off +COLUMN mode_held HEAD 'Mode Held' ENTMAP off +COLUMN mode_requested HEAD 'Mode Requested' ENTMAP off +COLUMN lock_id1 HEAD 'Lock ID1' ENTMAP off +COLUMN lock_id2 HEAD 'Lock ID2' ENTMAP off +COLUMN last_convert HEAD 'Last Convert' ENTMAP off +COLUMN blocking_others HEAD 'Blocking Others?' ENTMAP off + +prompt All locks (excluding background process locks). + +SELECT + '
    ' || session_id || '
    ' session_id + , lock_type + , mode_held + , mode_requested + , lock_id1 + , lock_id2 + , last_convert + , blocking_others +FROM dba_locks +WHERE session_id > 5 +ORDER BY session_id; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - BLOCKING LOCKS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Blocking Locks


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN waiting_user FORMAT a75 HEAD 'WAITING USER' ENTMAP off +COLUMN w_os_user HEAD 'OS User' ENTMAP off +COLUMN w_sid FORMAT a55 HEAD 'SID' ENTMAP off +COLUMN w_pid FORMAT a55 HEAD 'PID' ENTMAP off +COLUMN holding_user FORMAT a75 HEAD 'HOLDING USER' ENTMAP off +COLUMN h_os_user HEAD 'OS User' ENTMAP off +COLUMN h_sid FORMAT a55 HEAD 'Sid' ENTMAP off +COLUMN h_pid FORMAT a55 HEAD 'PID' ENTMAP off + +SELECT + '
    ' || s1.username || '
    ' waiting_user + , s1.osuser w_os_user + , '
    ' || w.session_id || '
    ' w_sid + , '
    ' || p1.spid || '
    ' w_pid + , '
    ' || s2.username || '
    ' holding_user + , s2.osuser h_os_user + , '
    ' || h.session_id || '
    ' h_sid + , '
    ' || p2.spid || '
    ' h_pid +FROM + sys.v_$process p1 + , sys.v_$process p2 + , sys.v_$session s1 + , sys.v_$session s2 + , dba_locks w + , dba_locks h +WHERE + h.mode_held != 'None' + AND h.mode_held != 'Null' + AND w.mode_requested != 'None' + AND w.lock_type (+) = h.lock_type + AND w.lock_id1 (+) = h.lock_id1 + AND w.lock_id2 (+) = h.lock_id2 + AND w.session_id = s1.sid (+) + AND h.session_id = s2.sid (+) + AND s1.paddr = p1.addr (+) + AND s2.paddr = p2.addr (+) +/ + +prompt
    [Top]

    + + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< SECURITY >>>>> | +-- | | +-- +============================================================================+ + + + +-- +----------------------------------------------------------------------------+ +-- | - USER ACCOUNTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt User Accounts


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a70 HEAD 'Username' ENTMAP off +COLUMN account_status FORMAT a17 HEAD 'Status' ENTMAP off +COLUMN expiry_date HEAD 'Expire Date' ENTMAP off +COLUMN default_tablespace FORMAT a25 HEAD 'Default Tbs.' ENTMAP off +COLUMN temporary_tablespace FORMAT a10 HEAD 'Temp Tbs.' ENTMAP off +COLUMN created HEAD 'Created On' ENTMAP off +COLUMN profile FORMAT a10 HEAD 'Profile' ENTMAP off +COLUMN sysdba FORMAT a6 HEAD 'SYSDBA' ENTMAP off +COLUMN sysoper FORMAT a7 HEAD 'SYSOPER' ENTMAP off + +SELECT distinct + '' || a.username || '' username + , a.account_status account_status + , TO_CHAR(a.expiry_date, 'DD-MON-YYYY HH24:MI:SS') expiry_date + , a.default_tablespace default_tablespace + , a.temporary_tablespace temporary_tablespace + , TO_CHAR(a.created, 'DD-MON-YYYY HH24:MI:SS') created + , a.profile profile + , DECODE(p.sysdba,'TRUE', 'TRUE','') sysdba + , DECODE(p.sysoper,'TRUE','TRUE','') sysoper +FROM + dba_users a + , v$pwfile_users p +WHERE + p.username (+) = a.username +ORDER BY username; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - USERS WITH DBA PRIVILEGES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Users With DBA Privileges


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN grantee FORMAT a70 HEADING 'Grantee' ENTMAP off +COLUMN granted_role FORMAT a30 HEADING 'Granted Role' ENTMAP off +COLUMN admin_option FORMAT a40 HEADING 'Admin. Option?' ENTMAP off +COLUMN default_role FORMAT a40 HEADING 'Default Role?' ENTMAP off + +SELECT + '' || grantee || '' grantee + , '
    ' || granted_role || '
    ' granted_role + , '
    ' || admin_option || '
    ' admin_option + , '
    ' || default_role || '
    ' default_role +FROM + dba_role_privs +WHERE + granted_role = 'DBA' +ORDER BY + grantee + , granted_role; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - ROLES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Roles


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN role FORMAT a70 HEAD 'Role Name' ENTMAP off +COLUMN grantee FORMAT a30 HEAD 'Grantee' ENTMAP off +COLUMN admin_option FORMAT a40 HEAD 'Admin Option?' ENTMAP off +COLUMN default_role FORMAT a40 HEAD 'Default Role?' ENTMAP off + +break on role + +SELECT + '' || b.role || '' role + , a.grantee + , '
    ' || a.admin_option || '
    ' admin_option + , '
    ' || a.default_role || '
    ' default_role +FROM + dba_role_privs a + , dba_roles b +WHERE + granted_role(+) = b.role +ORDER BY + b.role + , a.grantee; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - DEFAULT PASSWORDS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Default Passwords


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username HEADING 'Username' ENTMAP off +COLUMN status FORMAT a50 HEADING 'Account Status' ENTMAP off + +prompt User(s) with Default Password + +SELECT + '' || username || '' username + , '
    ' || account_status || '
    ' status +FROM dba_users +WHERE password IN ( + 'E066D214D5421CCC' -- dbsnmp + , '24ABAB8B06281B4C' -- ctxsys + , '72979A94BAD2AF80' -- mdsys + , 'C252E8FA117AF049' -- odm + , 'A7A32CD03D3CE8D5' -- odm_mtr + , '88A2B2C183431F00' -- ordplugins + , '7EFA02EC7EA6B86F' -- ordsys + , '4A3BA55E08595C81' -- outln + , 'F894844C34402B67' -- scott + , '3F9FBD883D787341' -- wk_proxy + , '79DF7A1BD138CF11' -- wk_sys + , '7C9BA362F8314299' -- wmsys + , '88D8364765FCE6AF' -- xdb + , 'F9DA8977092B7B81' -- tracesvr + , '9300C0977D7DC75E' -- oas_public + , 'A97282CE3D94E29E' -- websys + , 'AC9700FD3F1410EB' -- lbacsys + , 'E7B5D92911C831E1' -- rman + , 'AC98877DE1297365' -- perfstat + , 'D4C5016086B2DC6A' -- sys + , 'D4DF7931AB130E37') -- system; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - DB LINKS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt DB Links


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN db_link HEADING 'DB Link' ENTMAP off +COLUMN username HEADING 'Username' ENTMAP off +COLUMN host HEADING 'Host' ENTMAP off +COLUMN created HEADING 'Created' ENTMAP off + +SELECT + owner + , db_link + , username + , host + , TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') created +FROM dba_db_links +ORDER BY db_link; + +prompt
    [Top]

    + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< OBJECTS >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECT SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Object summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT A60 HEADING "Owner" ENTMAP off +COLUMN object_type FORMAT A25 HEADING "Object Type" ENTMAP off +COLUMN obj_count FORMAT 999,999,999,999 HEADING "Object Count" ENTMAP off + +break on report on owner skip 2 +compute sum label "" of obj_count on owner +compute sum label 'Grand Total: ' of obj_count on report + +SELECT + '' || owner || '' owner + , object_type object_type + , count(*) obj_count +FROM + dba_objects +GROUP BY + owner + , object_type; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - SEGMENT SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Segment Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT A50 HEADING "Owner" ENTMAP off +COLUMN segment_type FORMAT A25 HEADING "Segment Type" ENTMAP off +COLUMN seg_count FORMAT 999,999,999,999 HEADING "Segment Count" ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING "Size (in Bytes)" ENTMAP off + +break on report on owner skip 2 +compute sum label "" of seg_count bytes on owner +compute sum label 'Grand Total: ' of seg_count bytes on report + +SELECT + '' || owner || '' owner + , segment_type segment_type + , count(*) seg_count + , sum(bytes) bytes +FROM + dba_segments +GROUP BY + owner + , segment_type; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - DIRECTORIES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Directories


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING "Owner" ENTMAP off +COLUMN directory_name HEADING "Directory Name" ENTMAP off +COLUMN directory_path HEADING "Directory Path" ENTMAP off + +SELECT * +FROM dba_directories; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - LIBRARIES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Libraries


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING "Owner" ENTMAP off +COLUMN library_name HEADING "Library Name" ENTMAP off +COLUMN file_spec HEADING "File Spec" ENTMAP off +COLUMN dynamic FORMAT a40 HEADING "Dynamic?" ENTMAP off +COLUMN status FORMAT a40 HEADING "Status" ENTMAP off + +SELECT + owner + , library_name + , file_spec + , '
    ' || dynamic || '
    ' dynamic + , '
    ' || status || '
    ' status +FROM dba_libraries; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 200 SEGMENTS (BY SIZE) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 200 Segments (by size)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN partition_name HEADING 'Partition Name' ENTMAP off +COLUMN segment_type HEADING 'Segment Type' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999,999 HEADING 'Extents' ENTMAP off + +SELECT + a.owner + , a.segment_name + , a.partition_name + , a.segment_type + , a.tablespace_name + , a.bytes + , a.extents +FROM + (select + b.owner + , b.segment_name + , b.partition_name + , b.segment_type + , b.tablespace_name + , b.bytes + , b.extents + from + dba_segments b + order by + b.bytes desc + ) a +WHERE + rownum < 200; + +prompt
    [Top]

    + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 200 SEGMENTS (BY EXTENTS) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 200 Segments (by number of extents)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN partition_name HEADING 'Partition Name' ENTMAP off +COLUMN segment_type HEADING 'Segment Type' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999,999 HEADING 'Extents' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off + +SELECT + a.owner + , a.segment_name + , a.partition_name + , a.segment_type + , a.tablespace_name + , a.extents + , a.bytes +FROM + (select + b.owner + , b.segment_name + , b.partition_name + , b.segment_type + , b.tablespace_name + , b.bytes + , b.extents + from + dba_segments b + order by + b.extents desc + ) a +WHERE + rownum < 200; + +prompt
    [Top]

    + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS UNABLE TO EXTEND - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects Unable to Extend


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN segment_type HEADING 'Segment Type' ENTMAP off +COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next Extent' ENTMAP off +COLUMN max FORMAT 999,999,999,999,999 HEADING 'Max. Piece Size' ENTMAP off +COLUMN sum FORMAT 999,999,999,999,999 HEADING 'Sum of Bytes' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Num. of Extents' ENTMAP off +COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max Extents' ENTMAP off + +prompt Segments that cannot extend because of MAXEXTENTS or not enough space + +SELECT + ds.owner owner + , ds.tablespace_name tablespace_name + , ds.segment_name segment_name + , ds.segment_type segment_type + , ds.next_extent next_extent + , NVL(dfs.max, 0) max + , NVL(dfs.sum, 0) sum + , ds.extents extents + , ds.max_extents max_extents +FROM + dba_segments ds + , (select + max(bytes) max + , sum(bytes) sum + , tablespace_name + from + dba_free_space + group by + tablespace_name + ) dfs +WHERE + (ds.next_extent > nvl(dfs.max, 0) + OR + ds.extents >= ds.max_extents) + AND ds.tablespace_name = dfs.tablespace_name (+) + AND ds.owner NOT IN ('SYS','SYSTEM') +ORDER BY + ds.owner + , ds.tablespace_name + , ds.segment_name; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS WHICH ARE NEARING MAXEXTENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects Which Are Nearing MAXEXTENTS


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN tablespace_name FORMAT a30 HEADING 'Tablespace name' ENTMAP off +COLUMN segment_name FORMAT a30 HEADING 'Segment Name' ENTMAP off +COLUMN segment_type FORMAT a20 HEADING 'Segment Type' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off +COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next Extent Size' ENTMAP off +COLUMN pct_increase HEADING '% Increase' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Num. of Extents' ENTMAP off +COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max Extents' ENTMAP off +COLUMN pct_util FORMAT a35 HEADING '% Utilized' ENTMAP off + +prompt Segments where number of EXTENTS is less than 1/2 of MAXEXTENTS + +SELECT + owner + , tablespace_name + , segment_name + , segment_type + , bytes + , next_extent + , pct_increase + , extents + , max_extents + , '
    ' || ROUND((extents/max_extents)*100, 2) || '%
    ' pct_util +FROM + dba_segments +WHERE + extents > max_extents/2 + AND max_extents != 0 +ORDER BY + (extents/max_extents) DESC; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - INVALID OBJECTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Invalid Objects


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a65 HEADING 'Owner' ENTMAP off +COLUMN object_name FORMAT a30 HEADING 'Object Name' ENTMAP off +COLUMN object_type FORMAT a20 HEADING 'Object Type' ENTMAP off +COLUMN status FORMAT a10 HEADING 'Status' ENTMAP off + +break on report +compute count label 'Grand Total: ' of object_name on report + +SELECT + owner + , object_name + , object_type + , status +FROM dba_objects +WHERE status <> 'VALID' +ORDER BY owner, object_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - PROCEDURAL OBJECT ERRORS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Procedural Object Errors


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN type FORMAT a15 HEAD 'Object Type' ENTMAP off +COLUMN owner FORMAT a17 HEAD 'Schema' ENTMAP off +COLUMN name FORMAT a30 HEAD 'Object Name' ENTMAP off +COLUMN sequence FORMAT 999,999 HEAD 'Sequence' ENTMAP off +COLUMN line FORMAT 999,999 HEAD 'Line' ENTMAP off +COLUMN position FORMAT 999,999 HEAD 'Position' ENTMAP off +COLUMN text HEAD 'Text' ENTMAP off + +prompt All records from DBA_ERRORS + +SELECT + type + , owner + , name + , sequence + , line + , position + , text +FROM + dba_errors +ORDER BY + 1, 2, 3; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS WITHOUT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects without Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a50 HEAD 'Owner' ENTMAP off +COLUMN object_type FORMAT a20 HEAD 'Object Type' ENTMAP off +COLUMN object_name HEAD 'Object Name' ENTMAP off +COLUMN partition_name FORMAT a35 HEAD 'Partition Name' ENTMAP off + +break on report +compute count label 'Total: ' of object_name on report + +SELECT + owner owner + , 'Table' object_type + , table_name object_name + , NULL partition_name +FROM + sys.dba_tables +WHERE + last_analyzed IS NULL + AND owner NOT IN ('SYS','SYSTEM') + AND partitioned = 'NO' +UNION +SELECT + owner owner + , 'Index' object_type + , index_name object_name + , NULL partition_name +FROM + sys.dba_indexes +WHERE + last_analyzed IS NULL + AND owner NOT IN ('SYS','SYSTEM') + AND partitioned = 'NO' +UNION +SELECT + table_owner owner + , 'Table Partition' object_type + , table_name object_name + , partition_name partition_name +FROM + sys.dba_tab_partitions +WHERE + last_analyzed IS NULL + AND table_owner NOT IN ('SYS','SYSTEM') +UNION +SELECT + index_owner owner + , 'Index Partition' object_type + , index_name object_name + , partition_name partition_name +FROM + sys.dba_ind_partitions +WHERE + last_analyzed IS NULL + AND index_owner NOT IN ('SYS','SYSTEM') +ORDER BY + 1 + , 2 + , 3; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLES SUFFERING FROM ROW CHAINING/MIGRATION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tables Suffering From Row Chaining/Migration


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN table_name HEADING 'Table Name' ENTMAP off +COLUMN partition_name HEADING 'Partition Name' ENTMAP off +COLUMN num_rows FORMAT 999,999,999,999,999 HEADING 'Total Rows' ENTMAP off +COLUMN pct_chained_rows FORMAT a65 HEADING '% Chained Rows' ENTMAP off +COLUMN avg_row_length FORMAT 999,999,999,999,999 HEADING 'Avg Row Length' ENTMAP off + +prompt NOTE: Must collect statistics using ANALYZE TABLE + +SELECT + owner owner + , table_name table_name + , '' partition_name + , num_rows num_rows + , '
    ' || ROUND((chain_cnt/num_rows)*100, 2) || '%
    ' pct_chained_rows + , avg_row_len avg_row_length +FROM + (select + owner + , table_name + , chain_cnt + , num_rows + , avg_row_len + from + sys.dba_tables + where + chain_cnt is not null + and num_rows is not null + and chain_cnt > 0 + and num_rows > 0 + and owner != 'SYS') +UNION ALL +SELECT + table_owner owner + , table_name table_name + , partition_name partition_name + , num_rows num_rows + , '
    ' || ROUND((chain_cnt/num_rows)*100, 2) || '%
    ' pct_chained_rows + , avg_row_len avg_row_length +FROM + (select + table_owner + , table_name + , partition_name + , chain_cnt + , num_rows + , avg_row_len + from + sys.dba_tab_partitions + where + chain_cnt is not null + and num_rows is not null + and chain_cnt > 0 + and num_rows > 0 + and table_owner != 'SYS') b +WHERE + (chain_cnt/num_rows)*100 > 10; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - USERS WITH DEFAULT TABLESPACE - (SYSTEM) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Users With Default Tablespace - (SYSTEM)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username HEADING 'Username' ENTMAP off +COLUMN account_status HEADING 'Status' ENTMAP off +COLUMN default_tablespace HEADING 'Default Tablespace' ENTMAP off +COLUMN temporary_tablespace HEADING 'Temporary Tablespace' ENTMAP off +COLUMN created HEADING 'Created' ENTMAP off +COLUMN account_status HEADING 'Status' ENTMAP off + +SELECT + username + , '
    ' || default_tablespace || '
    ' default_tablespace + , '
    ' || temporary_tablespace || '
    ' temporary_tablespace + , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created + , '
    ' || account_status || '
    ' account_status +FROM + dba_users +WHERE + default_tablespace = 'SYSTEM' +ORDER BY + username; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - Users With Default Temporary Tablespace - (SYSTEM) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Users With Default Temporary Tablespace - (SYSTEM)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username HEADING 'Username' ENTMAP off +COLUMN account_status HEADING 'Status' ENTMAP off +COLUMN default_tablespace HEADING 'Default Tablespace' ENTMAP off +COLUMN temporary_tablespace HEADING 'Temporary Tablespace' ENTMAP off +COLUMN created HEADING 'Created' ENTMAP off +COLUMN account_status HEADING 'Status' ENTMAP off + +SELECT + username + , '
    ' || default_tablespace || '
    ' default_tablespace + , '
    ' || temporary_tablespace || '
    ' temporary_tablespace + , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created + , '
    ' || account_status || '
    ' account_status +FROM + dba_users +WHERE + temporary_tablespace = 'SYSTEM' +ORDER BY + username; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS IN THE SYSTEM TABLESPACE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects in the SYSTEM Tablespace


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a60 HEADING 'Owner' ENTMAP off +COLUMN segment_type FORMAT a60 HEADING 'Type' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Bytes|Alloc' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Extents' ENTMAP off +COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max|Ext' ENTMAP off +COLUMN initial_extent FORMAT 999,999,999,999,999 HEADING 'Initial|Ext' ENTMAP off +COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next|Ext' ENTMAP off +COLUMN pct_increase FORMAT 999,999,999,999,999 HEADING 'Pct|Inc' ENTMAP off + +break on report +compute count label 'Total Count: ' of segment_name on report +compute sum label 'Total Bytes: ' of bytes on report + +SELECT + owner + , segment_type + , segment_name + , tablespace_name + , bytes + , extents + , initial_extent + , next_extent + , pct_increase +FROM + dba_segments +WHERE + owner NOT IN ('SYS','SYSTEM') + AND tablespace_name = 'SYSTEM' +ORDER BY + owner + , extents DESC + , segment_type + , segment_name + , tablespace_name; + +prompt
    [Top]

    + + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< NETWORKING >>>>> | +-- | | +-- +============================================================================+ + + + +-- +----------------------------------------------------------------------------+ +-- | - MTS DISPATCHER STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt MTS Dispatcher Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Name' ENTMAP off +COLUMN avg_loop_rate HEADING 'Avg|Loop|Rate' ENTMAP off +COLUMN avg_event_rate HEADING 'Avg|Event|Rate' ENTMAP off +COLUMN avg_events_per_loop HEADING 'Avg|Events|Per|Loop' ENTMAP off +COLUMN avg_msg_rate HEADING 'Avg|Msg|Rate' ENTMAP off +COLUMN avg_svr_buf_rate HEADING 'Avg|Svr|Buf|Rate' ENTMAP off +COLUMN avg_svr_byte_rate HEADING 'Avg|Svr|Byte|Rate' ENTMAP off +COLUMN avg_svr_byte_per_buf HEADING 'Avg|Svr|Byte|Per|Buf' ENTMAP off +COLUMN avg_clt_buf_rate HEADING 'Avg|Clt|Buf|Rate' ENTMAP off +COLUMN avg_clt_byte_rate HEADING 'Avg|Clt|Byte|Rate' ENTMAP off +COLUMN avg_clt_byte_per_buf HEADING 'Avg|Clt|Byte|Per|Buf' ENTMAP off +COLUMN avg_buf_rate HEADING 'Avg|Buf|Rate' ENTMAP off +COLUMN avg_byte_rate HEADING 'Avg|Byte|Rate' ENTMAP off +COLUMN avg_byte_per_buf HEADING 'Avg|Byte|Per|Buf' ENTMAP off +COLUMN avg_in_connect_rate HEADING 'Avg|In|Connect|Rate' ENTMAP off +COLUMN avg_out_connect_rate HEADING 'Avg|Out|Connect|Rate' ENTMAP off +COLUMN avg_reconnect_rate HEADING 'Avg|Reconnect|Rate' ENTMAP off + +prompt Dispatcher Rate + +SELECT + name + , avg_loop_rate + , avg_event_rate + , avg_events_per_loop + , avg_msg_rate + , avg_svr_buf_rate + , avg_svr_byte_rate + , avg_svr_byte_per_buf + , avg_clt_buf_rate + , avg_clt_byte_rate + , avg_clt_byte_per_buf + , avg_buf_rate + , avg_byte_rate + , avg_byte_per_buf + , avg_in_connect_rate + , avg_out_connect_rate + , avg_reconnect_rate +FROM + v$dispatcher_rate +ORDER BY + name; + + +COLUMN protocol HEADING 'Protocol' ENTMAP off +COLUMN total_busy_rate HEADING 'Total Busy Rate' ENTMAP off + +prompt Dispatcher Busy Rate + +SELECT + a.network protocol + , (SUM(a.BUSY) / (SUM(a.BUSY) + SUM(a.IDLE))) total_busy_rate +FROM + v$dispatcher a +GROUP BY + a.network; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - MTS DISPATCHER RESPONSE QUEUE WAIT STATS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt MTS Dispatcher Response Queue Wait Stats


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN type HEADING 'TYPE' ENTMAP off +COLUMN avgwait HEADING 'Avg Wait Time Per Response' ENTMAP off + +SELECT + a.type + , DECODE( SUM(a.totalq), 0, 'NO RESPONSES', SUM(a.wait)/SUM(a.totalq) || ' HUNDREDTHS OF SECONDS') avg_wait +FROM + v$queue a +WHERE + a.type='DISPATCHER' +GROUP BY + a.type; + + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - MTS SHARED SERVER WAIT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt MTS Shared Server Wait Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN avg_wait HEADING 'Average Wait Time Per Request' ENTMAP off + +SELECT + DECODE(a.totalq, 0, 'No Requests', a.wait/a.totalq || ' HUNDREDTHS OF SECONDS') avg_wait +FROM + v$queue a +WHERE + a.type='COMMON'; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< REPLICATION >>>>> | +-- | | +-- +============================================================================+ + + + +-- +----------------------------------------------------------------------------+ +-- | - REPLICATION SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Replication Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN gname HEADING 'Current Database Name' ENTMAP off +COLUMN admin_request HEADING '# Admin. Requests' ENTMAP off +COLUMN status HEADING '# Admin. Request Errors' ENTMAP off +COLUMN df_txn HEADING '# Def. Trans' ENTMAP off +COLUMN df_error HEADING '# Def. Tran Errors' ENTMAP off +COLUMN complete HEADING '# Complete Trans in Queue' ENTMAP off + +SELECT + g.global_name gname + , d.admin_request admin_request + , e.status status + , dt.tran df_txn + , de.error df_error + , c.complete complete +FROM + (select global_name from global_name) g + , (select count(id) admin_request + from sys.dba_repcatlog) d + , (select count(status) status + from sys.dba_repcatlog + where status = 'ERROR') e + , (select count(*) tran + from deftrandest) dt + , (select count(*) error + from deferror) de + , (select count(a.deferred_tran_id) complete + from deftran a + where a.deferred_tran_id not in + (select b.deferred_tran_id + from deftrandest b) + ) c +/ + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - DEFERRED TRANSACTIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Deferred Transactions


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN source HEADING 'Source' ENTMAP off +COLUMN dest HEADING 'Target' ENTMAP off +COLUMN trans HEADING '# Def. Trans' ENTMAP off +COLUMN errors HEADING '# Def. Tran Errors' ENTMAP off + +SELECT + source + , dest + , trans + , errors +FROM + (select + e.origin_tran_db source + , e.destination dest + , 'n/a' trans + , to_char(count(*)) errors + from + deferror e + group by + e.origin_tran_db + , e.destination + union + select + g.global_name source + , d.dblink dest + , to_char(count(*)) trans + , 'n/a' errors + from + (select global_name from global_name) g + , deftran t + , deftrandest d + where + d.deferred_tran_id = t.deferred_tran_id + group by + g.global_name, d.dblink + ); + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - ADMINISTRATIVE REQUEST JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Administrative Request Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN what HEADING 'Definition' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN next_date HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + job job + , priv_user priv_user + , what what + , DECODE(broken, 'Y', 'Broken', 'Normal') status + , TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS') next_date + , interval +FROM + sys.dba_jobs +WHERE + what LIKE '%dbms_repcat.do_deferred_repcat_admin%' +ORDER BY + 1; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - INITIALIZATION PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Initialization Parameters


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN pname FORMAT a75 HEADING 'Parameter Name' ENTMAP off +COLUMN value FORMAT a75 HEADING 'Value' ENTMAP off +COLUMN isdefault FORMAT a75 HEADING 'Is Default?' ENTMAP off +COLUMN issys_modifiable FORMAT a75 HEADING 'Is Dynamic?' ENTMAP off + +SELECT + DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(name,0,512) || '' + , '' || SUBSTR(name,0,512) || '' ) pname + , DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(value,0,512) || '' + , SUBSTR(value,0,512) ) value + , DECODE( isdefault + , 'FALSE' + , '
    ' || isdefault || '
    ' + , '
    ' || isdefault || '
    ') isdefault + , DECODE( isdefault + , 'FALSE' + , '
    ' || issys_modifiable || '
    ' + , '
    ' || issys_modifiable || '
    ') issys_modifiable +FROM + v$parameter +WHERE + name IN ( 'compatible' + , 'commit_point_strength' + , 'dblink_encrypt_login' + , 'distributed_lock_timeout' + , 'distributed_recovery_connection_hold_time' + , 'distributed_transactions' + , 'global_names' + , 'job_queue_interval' + , 'job_queue_processes' + , 'max_transaction_branches' + , 'open_links' + , 'open_links_per_instance' + , 'parallel_automatic_tuning' + , 'parallel_max_servers' + , 'parallel_min_servers' + , 'parallel_server_idle_time' + , 'processes' + , 'remote_dependencies_mode' + , 'replication_dependency_tracking' + , 'shared_pool_size' + , 'utl_file_dir' + ) +ORDER BY name; + +prompt
    [Top]

    + + + + + +-- +----------------------------------------------------------------------------+ +-- | - (SCHEDULE) - PURGE JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Schedule) - Purge Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN next_date HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + j.job job + , j.priv_user priv_user + , decode(broken, 'Y', 'Broken', 'Normal') status + , to_char(s.next_date, 'mm/dd/yyyy HH24:MI:SS') next_date + , s.interval interval +FROM + sys.defschedule s + , sys.dba_jobs j +WHERE + s.dblink = (select global_name from global_name) + AND s.interval is not null AND s.job = j.job +ORDER BY + 1; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (SCHEDULE) - PUSH JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Schedule) - Push Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN dblink HEADING 'Target' ENTMAP off +COLUMN broken HEADING 'Status' ENTMAP off +COLUMN next_date HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + j.job job + , j.priv_user priv_user + , s.dblink dblink + , decode(j.broken, 'Y', 'Broken', 'Normal') broken + , to_char(s.next_date, 'mm/dd/yyyy HH24:MI:SS') next_date + , s.interval interval +FROM + sys.defschedule s + , sys.dba_jobs j +WHERE + s.dblink != (select global_name from global_name) + AND s.interval is not null + AND s.job = j.job +ORDER BY + 1; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (SCHEDULE) - REFRESH JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Schedule) - Refresh Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN refresh_group HEADING 'Refresh Group' ENTMAP off +COLUMN broken HEADING 'Status' ENTMAP off +COLUMN next_date HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + j.job job + , j.priv_user priv_user + , r.rowner || '.' || r.rname refresh_group + , decode(j.broken, 'Y', 'Broken', 'Normal') broken + , to_char(j.next_date, 'mm/dd/yyyy HH24:MI:SS') next_date + , j.interval interval +FROM + sys.dba_refresh r + , sys.dba_jobs j +WHERE + r.job = j.job +order by + 1; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (MULTI-MASTER) - MASTER GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Multi-Master) - Master Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Master Group' ENTMAP off +COLUMN num_def_trans HEADING '# Def. Trans' ENTMAP off +COLUMN num_tran_errors HEADING '# Def. Tran Errors' ENTMAP off +COLUMN num_admin_requests HEADING '# Admin. Requests' ENTMAP off +COLUMN num_admin_request_errors HEADING '# Admin. Request Errors' ENTMAP off + +SELECT + g.gname name + , NVL(t.cnt1, 0) num_def_trans + , NVL(ie.cnt2, 0) num_tran_errors + , NVL(a.cnt3, 0) num_admin_requests + , NVL(b.cnt4, 0) num_admin_request_errors +FROM + (select distinct gname + from dba_repgroup + where master='Y') g + , (select + rog rog + , count(dt.deferred_tran_id) cnt1 + from (select distinct + ro.gname rog + , d.deferred_tran_id dft + from + dba_repobject ro + , defcall d + , deftrANDest td + where + ro.sname = d.schemaname + AND ro.oname = d.packagename + AND ro.type in ('TABLE', 'PACKAGE', 'SNAPSHOT') + AND td.deferred_tran_id = d.deferred_tran_id + ) t0, deftrANDest dt + where + dt.deferred_tran_id = dft + group by rog + ) t + , (select distinct + ro.gname + , count(distinct e.deferred_tran_id) cnt2 + from + dba_repobject ro + , defcall d + , deferror e + where + ro.sname = d.schemaname + AND ro.oname = d.packagename + AND ro.type in ('TABLE', 'PACKAGE', 'SNAPSHOT') + AND e.deferred_tran_id = d.deferred_tran_id + AND e.callno = d.callno + group by ro.gname + ) ie + , (select gname, count(*) cnt3 + from dba_repcatlog + group by gname + ) a + , (select gname, count(*) cnt4 + from dba_repcatlog + where status = 'ERROR' + group BY gname + ) b +WHERE + g.gname = ie.gname (+) + AND g.gname = t.rog (+) + AND g.gname = a.gname (+) + AND g.gname = b.gname (+) +ORDER BY + g.gname; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (MULTI-MASTER) - MASTER GROUPS AND SITES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Multi-Master) - Master Groups and Sites


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN master_group HEADING 'Master Group' ENTMAP off +COLUMN sites HEADING 'Sites' ENTMAP off +COLUMN master_definition_site HEADING 'Master Definition Site' ENTMAP off + +SELECT + gname master_group + , dblink sites + , DECODE(masterdef, 'Y', 'YES', 'N', 'NO') master_definition_site +FROM + sys.dba_repsites +WHERE + master = 'Y' + AND gname NOT IN ( + SELECT gname from sys.dba_repsites + WHERE snapmaster = 'Y' + ) +ORDER BY + gname; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MASTER SITE SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Master Site Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN mgroup HEADING '# of Master Groups' ENTMAP off +COLUMN mvgroup HEADING '# of Registered MV Groups' ENTMAP off +COLUMN mv HEADING '# of Registered MVs' ENTMAP off +COLUMN mvlog HEADING '# of MV Logs' ENTMAP off +COLUMN template HEADING '# of Templates' ENTMAP off + +SELECT + a.mgroup mgroup + , b.mvgroup mvgroup + , c.mv mv + , d.mvlog mvlog + , e.template template +FROM + (select count(g.gname) mgroup + from sys.dba_repgroup g, sys.dba_repsites s + where g.master = 'Y' + and s.master = 'Y' + and g.gname = s.gname + and s.my_dblink = 'Y') a + , (select count(*) mvGROUP + from sys.dba_registered_snapshot_groups) b + , (select count(*) mv + from sys.dba_registered_snapshots) c + , (select count(*) mvlog + from sys.dba_snapshot_logs) d + , (select count(*) template + from sys.dba_repcat_refresh_templates) e +/ + + + +COLUMN log_table HEADING 'Log Table' ENTMAP off +COLUMN log_owner HEADING 'Log Owner' ENTMAP off +COLUMN master HEADING 'Master' ENTMAP off +COLUMN rowids HEADING 'Row ID' ENTMAP off +COLUMN primary_key HEADING 'Primary Key' ENTMAP off +COLUMN filter_columns HEADING 'Filter Columns' ENTMAP off + +SELECT distinct + log_table + , log_owner + , master + , rowids + , primary_key + , filter_columns +FROM + sys.dba_snapshot_logs +ORDER BY + 1 +/ + + + +COLUMN ref_temp_name HEADING 'Refresh Template Name' ENTMAP off +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN public_template HEADING 'Public' ENTMAP off +COLUMN instantiated HEADING '# of Instantiated Sites' ENTMAP off +COLUMN template_comment HEADING 'Comment' ENTMAP off + +SELECT distinct + rt.refresh_template_name ref_temp_name + , owner owner + , decode(public_template, 'Y', 'YES', 'NO') public_template + , rs.instantiated instantiated + , rt.template_comment template_comment +FROM + sys.dba_repcat_refresh_templates rt + , (SELECT y.refresh_template_name, count(x.status) instantiated + FROM sys.dba_repcat_template_sites x, sys.dba_repcat_refresh_templates y + WHERE x.refresh_template_name(+) = y.refresh_template_name + GROUP BY y.refresh_template_name) rs +WHERE + rt.refresh_template_name(+) = rs.refresh_template_name +ORDER BY + 1 +/ + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MASTER SITE LOGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Master Site Logs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN log_table HEADING 'Log Table' ENTMAP off +COLUMN log_owner HEADING 'Log Owner' ENTMAP off +COLUMN master HEADING 'Master' ENTMAP off +COLUMN rowids HEADING 'Row ID' ENTMAP off +COLUMN primary_key HEADING 'Primary Key' ENTMAP off +COLUMN filter_columns HEADING 'Filter Columns' ENTMAP off + +SELECT distinct + log_table + , log_owner + , master + , rowids + , primary_key + , filter_columns +FROM + sys.dba_snapshot_logs +ORDER BY + 1; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MASTER SITE TEMPLATES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Master Site Templates


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN refresh_template_name HEADING 'Refresh Template Name' ENTMAP off +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN public_template HEADING 'Public' ENTMAP off +COLUMN instantiated HEADING '# of Instantiated Sites' ENTMAP off +COLUMN template_comment HEADING 'Comment' ENTMAP off + +SELECT distinct + rt.refresh_template_name refresh_template_name + , owner owner + , decode(public_template, 'Y', 'YES', 'NO') public_template + , rs.instantiated instantiated + , rt.template_comment template_comment +FROM + sys.dba_repcat_refresh_templates rt + , ( SELECT y.refresh_template_name, count(x.status) instantiated + FROM sys.dba_repcat_template_sites x, sys.dba_repcat_refresh_templates y + WHERE x.refresh_template_name(+) = y.refresh_template_name + GROUP BY y.refresh_template_name + ) rs +WHERE + rt.refresh_template_name(+) = rs.refresh_template_name +ORDER BY + 1; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN mvgroup HEADING '# of Materialized View Groups' ENTMAP off +COLUMN mv HEADING '# of Materialized Views' ENTMAP off +COLUMN rgroup HEADING '# of Refresh Groups' ENTMAP off + +SELECT + a.mvgroup mvgroup + , b.mv mv + , c.rgroup rgroup +FROM + ( select count(s.gname) mvgroup + from sys.dba_repsites s + where s.snapmaster = 'Y') a + , ( select count(*) mv + from sys.dba_snapshots) b + , ( select count(*) rgroup + from sys.dba_refresh) c +/ + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN gname HEADING 'Name' ENTMAP off +COLUMN dblink HEADING 'Master' ENTMAP off +COLUMN propagation HEADING 'Propagation' ENTMAP off +COLUMN remark HEADING 'Remark' ENTMAP off + +SELECT + s.gname gname + , s.dblink dblink + , decode(s.prop_updates, 0, 'Async', 'Sync') propagation + , g.schema_comment remark +FROM + sys.dba_repsites s + , sys.dba_repgroup g +WHERE + s.gname = g.gname + and s.snapmaster = 'Y' +/ + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MATERIALIZED VIEWS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Materialized Views


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN name HEADING 'Name' ENTMAP off +COLUMN master_owner HEADING 'Master Owner' ENTMAP off +COLUMN master_table HEADING 'Master Table' ENTMAP off +COLUMN master_link HEADING 'Master Link' ENTMAP off +COLUMN type HEADING 'Type' ENTMAP off +COLUMN updatable FORMAT a11 HEADING 'Updatable?' ENTMAP off +COLUMN can_use_log FORMAT a13 HEADING 'Can Use Log?' ENTMAP off +COLUMN last_refresh HEADING 'Last Refresh' ENTMAP off + +SELECT + s.owner owner + , s.name name + , s.master_owner master_owner + , s.master master_table + , s.master_link master_link + , nls_initcap(s.type) type + , decode(s.updatable, 'YES', 'YES', 'NO') updatable + , decode(s.can_use_log,'YES', 'YES', 'NO') can_use_log + , TO_CHAR(m.last_refresh_date, 'mm/dd/yyyy HH24:MI:SS') last_refresh +FROM + sys.dba_snapshots s + , sys.dba_mviews m +WHERE + s.name = m.mview_name + AND s.owner = m.owner +ORDER BY + 1 + , 2 +/ + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - REFRESH GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Refresh Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN name HEADING 'Name' ENTMAP off +COLUMN broken HEADING 'Broken' ENTMAP off +COLUMN next_date HEADING 'Next Date' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + rowner owner + , rname name + , broken broken + , TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS') next_date + , interval interval +FROM + sys.dba_refresh +ORDER BY + 1 + , 2 +/ + +prompt
    [Top]

    + + + + + + + + +-- +----------------------------------------------------------------------------+ +-- | - END OF REPORT - | +-- +----------------------------------------------------------------------------+ + +SPOOL OFF + +SET MARKUP HTML OFF + +SET TERMOUT ON + +prompt +prompt Output written to: &FileName._&_dbname._&_spool_time..html + +EXIT; + diff --git a/idev/dba_snapshot_database_9i.sql b/idev/dba_snapshot_database_9i.sql new file mode 100644 index 0000000..937ad2c --- /dev/null +++ b/idev/dba_snapshot_database_9i.sql @@ -0,0 +1,5164 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_snapshot_database_9i.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : This SQL script provides a detailed report (in HTML format) on | +-- | all database metrics including installed options, storage, | +-- | performance data, and security. | +-- | VERSION : This script was designed for Oracle9i. | +-- | USAGE : | +-- | | +-- | sqlplus -s /@ @dba_snapshot_database_9i.sql | +-- | | +-- | TESTING : This script has been successfully tested on the following | +-- | platforms: | +-- | | +-- | Solaris : Oracle Database 9.2.0.8.0 | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +define reportHeader="Snapshot Database 9i


    Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. (www.idevelopment.info)

    " + + +-- +----------------------------------------------------------------------------+ +-- | SCRIPT SETTINGS | +-- +----------------------------------------------------------------------------+ + +set termout off +set echo off +set feedback off +set heading off +set verify off +set wrap on +set trimspool on +set serveroutput on +set escape on + +set pagesize 50000 +set linesize 175 +set long 2000000000 + +clear buffer computes columns breaks + +define fileName=dba_snapshot_database_9i +define versionNumber=3.6 +define statsPackUser=PERFSTAT + + +-- +----------------------------------------------------------------------------+ +-- | GATHER DATABASE REPORT INFORMATION | +-- +----------------------------------------------------------------------------+ + +COLUMN tdate NEW_VALUE _date NOPRINT +SELECT TO_CHAR(SYSDATE,'MM/DD/YYYY') tdate FROM dual; + +COLUMN time NEW_VALUE _time NOPRINT +SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') time FROM dual; + +COLUMN date_time NEW_VALUE _date_time NOPRINT +SELECT TO_CHAR(SYSDATE,'MM/DD/YYYY HH24:MI:SS') date_time FROM dual; + +COLUMN spool_time NEW_VALUE _spool_time NOPRINT +SELECT TO_CHAR(SYSDATE,'YYYYMMDD') spool_time FROM dual; + +COLUMN dbname NEW_VALUE _dbname NOPRINT +SELECT name dbname FROM v$database; + +COLUMN global_name NEW_VALUE _global_name NOPRINT +SELECT global_name global_name FROM global_name; + +COLUMN blocksize NEW_VALUE _blocksize NOPRINT +SELECT value blocksize FROM v$parameter WHERE name='db_block_size'; + +COLUMN startup_time NEW_VALUE _startup_time NOPRINT +SELECT TO_CHAR(startup_time, 'MM/DD/YYYY HH24:MI:SS') startup_time FROM v$instance; + +COLUMN host_name NEW_VALUE _host_name NOPRINT +SELECT host_name host_name FROM v$instance; + +COLUMN cluster_database NEW_VALUE _cluster_database NOPRINT +SELECT value cluster_database FROM v$parameter WHERE name='cluster_database'; + +COLUMN cluster_database_instances NEW_VALUE _cluster_database_instances NOPRINT +SELECT value cluster_database_instances FROM v$parameter WHERE name='cluster_database_instances'; + +COLUMN reportRunUser NEW_VALUE _reportRunUser NOPRINT +SELECT user reportRunUser FROM dual; + + + +-- +----------------------------------------------------------------------------+ +-- | GATHER DATABASE REPORT INFORMATION | +-- +----------------------------------------------------------------------------+ + +set heading on + +set markup html on spool on preformat off entmap on - +head ' - + Database Report - + ' - +body 'BGCOLOR="#C0C0C0"' - +table 'WIDTH="90%" BORDER="1"' + +spool &FileName._&_dbname._&_spool_time..html + +set markup html on entmap off + + +-- +----------------------------------------------------------------------------+ +-- | - REPORT HEADER - | +-- +----------------------------------------------------------------------------+ + +prompt &reportHeader + + + +-- +----------------------------------------------------------------------------+ +-- | - REPORT INDEX - | +-- +----------------------------------------------------------------------------+ + +prompt + + +prompt

    Report Index
    - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + + + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
    Database and Instance Information
    Report HeaderVersionOptionsDatabase Registry
    Instance OverviewDatabase OverviewInitialization ParametersControl Files
    Control File RecordsOnline Redo LogsRedo Log Switches
    Jobs
    Jobs


    Storage
    TablespacesData FilesDatabase GrowthTablespace Extents
    Tablespace to OwnerOwner to Tablespace

    UNDO Segments
    UNDO SegmentsUNDO Segment Contention

    Archiving
    Archiving ModeArchiving ParametersArchiving History
    Recovery Manager - (RMAN)
    RMAN ConfigurationBackup SetsBackup PiecesBackup Control Files
    Backup SPFILE


    Performance
    SGA InformationDB Buffer Cache Hit RatioDictionary Cache Hit RatioLibrary Cache Hit Ratio
    Latch ContentionSystem Wait StatisticsSystem StatisticsSystem Event Statistics
    File I/O StatisticsFile I/O TimingsAverage Overall I/O per SecondRedo Log Contention
    Full Table ScansSortsOutlinesOutline Hints
    SQL Statements With Most Buffer GetsSQL Statements With Most Disk ReadsTop 10 TablesTop 10 Procedures
    Statspack
    ListParameters

    Sessions
    Current SessionsUser Session Matrix

    Security
    User AccountsUsers With DBA PrivilegesRolesDefault Passwords
    DB Links


    Objects
    Object SummarySegment SummaryTop 200 Segments (by size)Top 200 Segments (by number of extents)
    DirectoriesLibrariesTypesType Attributes
    Type MethodsCollectionsLOB SegmentsObjects Unable to Extend
    Objects Which Are Nearing MAXEXTENTSInvalid ObjectsProcedural Object ErrorsObjects Without Statistics
    Tables Suffering From Row Chaining/MigrationUsers With Default Tablespace - (SYSTEM)Users With Default Temp Tablespace - (SYSTEM)Objects in the SYSTEM Tablespace
    Online Analytical Processing - (OLAP)
    DimensionsDimension LevelsDimension AttributesDimension Hierarchies
    CubesMaterialized ViewsMaterialized View Logs
    Networking
    MTS Dispatcher StatisticsMTS Dispatcher Response Queue Wait StatsMTS Shared Server Wait Statistics
    Replication
    Replication SummaryDeferred TransactionsAdministrative Request JobsInitialization Parameters
    (Schedule) - Purge Jobs(Schedule) - Push Jobs(Schedule) - Refresh Jobs(Multi-Master) - Master Groups
    (Multi-Master) - Master Groups and Sites(Materialized View) - Master Site Summary(Materialized View) - Master Site Logs(Materialized View) - Master Site Templates
    (Materialized View) - Summary(Materialized View) - Groups(Materialized View) - Materialized Views(Materialized View) - Refresh Groups
    + +prompt

    + + + +-- +============================================================================+ +-- | | +-- | <<<<< Database and Instance Information >>>>> | +-- | | +-- +============================================================================+ + + + + +-- +----------------------------------------------------------------------------+ +-- | - REPORT HEADER - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt +prompt Report Header


    + +prompt - + - + - + - + - + - + - + - + - + - + - + - + - +
    Report Name&FileName._&_dbname._&_spool_time..html
    Snapshot Database Version&versionNumber
    Run Date / Time&_date_time
    Host Name&_host_name
    Database Name&_dbname
    Global Database Name&_global_name
    Clustered Database?&_cluster_database
    Clustered Database Instances&_cluster_database_instances
    Database Startup Time&_startup_time
    Database Block Size&_blocksize
    Report Run User&_reportRunUser
    Statspack User&statsPackUser
    + +prompt
    [Top]

    + + + + +-- SET TIMING ON + + + + +-- +----------------------------------------------------------------------------+ +-- | - VERSION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Version


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN banner FORMAT a120 HEADING 'Banner' + +SELECT * FROM v$version; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OPTIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Options


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN parameter HEADING 'Option Name' ENTMAP off +COLUMN value HEADING 'Installed?' ENTMAP off + +SELECT + DECODE( value + , 'FALSE' + , '' || parameter || '' + , '' || parameter || '') parameter + , DECODE( value + , 'FALSE' + , '
    ' || value || '
    ' + , '
    ' || value || '
    ' ) value +FROM v$option +ORDER BY parameter; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DATABASE REGISTRY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Database Registry


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN comp_id FORMAT a75 HEADING 'Component ID' ENTMAP off +COLUMN comp_name FORMAT a75 HEADING 'Component Name' ENTMAP off +COLUMN version HEADING 'Version' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Status' ENTMAP off +COLUMN modified FORMAT a75 HEADING 'Modified' ENTMAP off +COLUMN control HEADING 'Control' ENTMAP off +COLUMN schema HEADING 'Schema' ENTMAP off +COLUMN procedure HEADING 'Procedure' ENTMAP off + +SELECT + '' || comp_id || '' comp_id + , '
    ' || comp_name || '
    ' comp_name + , version version + , DECODE( status + , 'VALID', '
    ' || status || '
    ' + , 'INVALID', '
    ' || status || '
    ' + , '
    ' || status || '
    ' ) status + , '
    ' || modified || '
    ' modified + , control control + , schema schema + , procedure procedure +FROM dba_registry +ORDER BY comp_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - INSTANCE OVERVIEW - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Instance Overview


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN instance_name FORMAT a75 HEADING 'Instance|Name' ENTMAP off +COLUMN instance_number FORMAT a75 HEADING 'Instance|Number' ENTMAP off +COLUMN host_name_print FORMAT a75 HEADING 'Host|Name' ENTMAP off +COLUMN oracle_version HEADING 'Oracle|Version' ENTMAP off +COLUMN start_time FORMAT a75 HEADING 'Start|Time' ENTMAP off +COLUMN uptime HEADING 'Uptime|(in days)' ENTMAP off +COLUMN parallel FORMAT a75 HEADING 'Parallel - (RAC)' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Instance|Status' ENTMAP off +COLUMN logins FORMAT a75 HEADING 'Logins' ENTMAP off +COLUMN archiver FORMAT a75 HEADING 'Archiver' ENTMAP off + +SELECT + '
    ' || instance_name || '
    ' instance_name + , '
    ' || instance_number || '
    ' instance_number + , '
    ' || host_name || '
    ' host_name_print + , '
    ' || version || '
    ' oracle_version + , '
    ' || TO_CHAR(startup_time,'mm/dd/yyyy HH24:MI:SS') || '
    ' start_time + , ROUND(TO_CHAR(SYSDATE-startup_time), 2) uptime + , '
    ' || parallel || '
    ' parallel + , '
    ' || status || '
    ' status + , '
    ' || logins || '
    ' logins + , DECODE( archiver + , 'FAILED' + , '
    ' || archiver || '
    ' + , '
    ' || archiver || '
    ') archiver +FROM v$instance +ORDER BY instance_number; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DATABASE OVERVIEW - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Database Overview


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN database_name FORMAT a75 HEADING 'Database Name' ENTMAP off +COLUMN dbid HEADING 'Database ID' ENTMAP off +COLUMN creation_date FORMAT a75 HEADING 'Creation Date' ENTMAP off +COLUMN log_mode HEADING 'Log Mode' ENTMAP off +COLUMN open_mode HEADING 'Open Mode' ENTMAP off +COLUMN force_logging HEADING 'Force Logging' ENTMAP off +COLUMN controlfile_type HEADING 'Controlfile Type' ENTMAP off + +SELECT + '
    ' || name || '
    ' database_name + , '
    ' || dbid || '
    ' dbid + , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' creation_date + , '
    ' || log_mode || '
    ' log_mode + , '
    ' || open_mode || '
    ' open_mode + , '
    ' || force_logging || '
    ' force_logging + , '
    ' || controlfile_type || '
    ' controlfile_type +FROM v$database; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - INITIALIZATION PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Initialization Parameters


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN spfile HEADING "SPFILE Usage" + +SELECT + 'This database '|| + DECODE( (1-SIGN(1-SIGN(count(*) - 0))) + , 1 + , 'IS' + , 'IS NOT') || + ' using an SPFILE.'spfile +FROM v$spparameter +WHERE value IS NOT null; + + + +COLUMN pname FORMAT a75 HEADING 'Parameter Name' ENTMAP off +COLUMN value FORMAT a75 HEADING 'Value' ENTMAP off +COLUMN isdefault FORMAT a75 HEADING 'Is Default?' ENTMAP off +COLUMN issys_modifiable FORMAT a75 HEADING 'Is Dynamic?' ENTMAP off + +SELECT + DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(name,0,512) || '' + , '' || SUBSTR(name,0,512) || '' ) pname + , DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(value,0,512) || '' + , SUBSTR(value,0,512) ) value + , DECODE( isdefault + , 'FALSE' + , '
    ' || isdefault || '
    ' + , '
    ' || isdefault || '
    ') isdefault + , DECODE( isdefault + , 'FALSE' + , '
    ' || issys_modifiable || '
    ' + , '
    ' || issys_modifiable || '
    ') issys_modifiable +FROM + v$parameter +ORDER BY + name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - CONTROL FILES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Control Files


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Controlfile Name' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off + +SELECT + '' || c.name || '' name + , DECODE( c.status + , NULL + , '
    VALID
    ' + , '
    ' || c.status || '
    ') status +FROM v$controlfile c +ORDER BY c.name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - CONTROL FILE RECORDS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Control File Records


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN type FORMAT a95 HEADING 'Record Section Type' ENTMAP off +COLUMN record_size FORMAT 999,999 HEADING 'Record Size|(in bytes)' ENTMAP off +COLUMN records_total FORMAT 999,999 HEADING 'Records Allocated' ENTMAP off +COLUMN bytes_alloc FORMAT 999,999,999 HEADING 'Bytes Allocated' ENTMAP off +COLUMN records_used FORMAT 999,999 HEADING 'Records Used' ENTMAP off +COLUMN bytes_used FORMAT 999,999,999 HEADING 'Bytes Used' ENTMAP off +COLUMN pct_used FORMAT B999 HEADING '% Used' ENTMAP off +COLUMN first_index HEADING 'First Index' ENTMAP off +COLUMN last_index HEADING 'Last Index' ENTMAP off +COLUMN last_recid HEADING 'Last RecID' ENTMAP off + +BREAK ON REPORT +COMPUTE sum LABEL 'Total: ' OF record_size records_total bytes_alloc records_used bytes_used ON report +COMPUTE avg LABEL 'Average: ' OF pct_used ON report + +SELECT + '
    ' || type || '
    ' type + , record_size + , records_total + , (records_total * record_size) bytes_alloc + , records_used + , (records_used * record_size) bytes_used + , NVL(records_used/records_total * 100, 0) pct_used + , first_index + , last_index + , last_recid +FROM v$controlfile_record_section +ORDER BY type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - ONLINE REDO LOGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Online Redo Logs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN groupno FORMAT a75 HEADING 'Group Number' ENTMAP off +COLUMN member HEADING 'Member' ENTMAP off +COLUMN redo_file_type FORMAT a75 HEADING 'Redo Type' ENTMAP off +COLUMN log_status FORMAT a75 HEADING 'Log Status' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' ENTMAP off +COLUMN archived FORMAT a75 HEADING 'Archived?' ENTMAP off + +BREAK ON groupno + +SELECT + '
    ' || f.group# || '
    ' groupno + , '' || f.member || '' member + , f.type redo_file_type + , DECODE( l.status + , 'CURRENT' + , '
    ' || l.status || '
    ' + , '
    ' || l.status || '
    ') log_status + , l.bytes bytes + , '
    ' || l.archived || '
    ' archived +FROM + v$logfile f + , v$log l +WHERE + f.group# = l.group# +ORDER BY + f.group# + , f.member; + + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - REDO LOG SWITCHES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Redo Log Switches


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN DAY FORMAT a75 HEADING 'Day / Time' ENTMAP off +COLUMN H00 FORMAT 999,999B HEADING '00' ENTMAP off +COLUMN H01 FORMAT 999,999B HEADING '01' ENTMAP off +COLUMN H02 FORMAT 999,999B HEADING '02' ENTMAP off +COLUMN H03 FORMAT 999,999B HEADING '03' ENTMAP off +COLUMN H04 FORMAT 999,999B HEADING '04' ENTMAP off +COLUMN H05 FORMAT 999,999B HEADING '05' ENTMAP off +COLUMN H06 FORMAT 999,999B HEADING '06' ENTMAP off +COLUMN H07 FORMAT 999,999B HEADING '07' ENTMAP off +COLUMN H08 FORMAT 999,999B HEADING '08' ENTMAP off +COLUMN H09 FORMAT 999,999B HEADING '09' ENTMAP off +COLUMN H10 FORMAT 999,999B HEADING '10' ENTMAP off +COLUMN H11 FORMAT 999,999B HEADING '11' ENTMAP off +COLUMN H12 FORMAT 999,999B HEADING '12' ENTMAP off +COLUMN H13 FORMAT 999,999B HEADING '13' ENTMAP off +COLUMN H14 FORMAT 999,999B HEADING '14' ENTMAP off +COLUMN H15 FORMAT 999,999B HEADING '15' ENTMAP off +COLUMN H16 FORMAT 999,999B HEADING '16' ENTMAP off +COLUMN H17 FORMAT 999,999B HEADING '17' ENTMAP off +COLUMN H18 FORMAT 999,999B HEADING '18' ENTMAP off +COLUMN H19 FORMAT 999,999B HEADING '19' ENTMAP off +COLUMN H20 FORMAT 999,999B HEADING '20' ENTMAP off +COLUMN H21 FORMAT 999,999B HEADING '21' ENTMAP off +COLUMN H22 FORMAT 999,999B HEADING '22' ENTMAP off +COLUMN H23 FORMAT 999,999B HEADING '23' ENTMAP off +COLUMN TOTAL FORMAT 999,999,999 HEADING 'Total' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total:' avg label 'Average:' OF total ON report + +SELECT + '
    ' || SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) || '
    ' DAY + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23 + , COUNT(*) TOTAL +FROM + v$log_history a +GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +/ + + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< JOBS >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job_id FORMAT a75 HEADING 'Job ID' ENTMAP off +COLUMN username FORMAT a75 HEADING 'User' ENTMAP off +COLUMN what FORMAT a175 HEADING 'What' ENTMAP off +COLUMN next_date FORMAT a110 HEADING 'Next Run Date' ENTMAP off +COLUMN interval FORMAT a75 HEADING 'Interval' ENTMAP off +COLUMN last_date FORMAT a110 HEADING 'Last Run Date' ENTMAP off +COLUMN failures FORMAT a75 HEADING 'Failures' ENTMAP off +COLUMN broken FORMAT a75 HEADING 'Broken?' ENTMAP off + +SELECT + DECODE( broken + , 'Y' + , '
    ' || job || '
    ' + , '
    ' || job || '
    ') job_id + , DECODE( broken + , 'Y' + , '' || log_user || '' + , log_user ) username + , DECODE( broken + , 'Y' + , '' || what || '' + , what ) what + , DECODE( broken + , 'Y' + , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' + , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ') next_date + , DECODE( broken + , 'Y' + , '' || interval || '' + , interval ) interval + , DECODE( broken + , 'Y' + , '
    ' || NVL(TO_CHAR(last_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' + , '
    ' || NVL(TO_CHAR(last_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ') last_date + , DECODE( broken + , 'Y' + , '
    ' || failures || '
    ' + , '
    ' || failures || '
    ') failures + , DECODE( broken + , 'Y' + , '
    ' || broken || '
    ' + , '
    ' || broken || '
    ') broken +FROM + dba_jobs +ORDER BY + job; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< STORAGE >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - TABLESPACES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tablespaces


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN status HEADING 'Status' ENTMAP off +COLUMN name HEADING 'Tablespace Name' ENTMAP off +COLUMN type FORMAT a12 HEADING 'TS Type' ENTMAP off +COLUMN extent_mgt FORMAT a10 HEADING 'Ext. Mgt.' ENTMAP off +COLUMN segment_mgt FORMAT a9 HEADING 'Seg. Mgt.' ENTMAP off +COLUMN ts_size FORMAT 999,999,999,999,999 HEADING 'Tablespace Size' ENTMAP off +COLUMN free FORMAT 999,999,999,999,999 HEADING 'Free (in bytes)' ENTMAP off +COLUMN used FORMAT 999,999,999,999,999 HEADING 'Used (in bytes)' ENTMAP off +COLUMN pct_used HEADING 'Pct. Used' ENTMAP off + +BREAK ON report +COMPUTE SUM label 'Total:' OF ts_size used free ON report + +SELECT + DECODE( d.status + , 'OFFLINE' + , '
    ' || d.status || '
    ' + , '
    ' || d.status || '
    ') status + , '' || d.tablespace_name || '' name + , d.contents type + , d.extent_management extent_mgt + , d.segment_space_management segment_mgt + , NVL(a.bytes, 0) ts_size + , NVL(f.bytes, 0) free + , NVL(a.bytes - NVL(f.bytes, 0), 0) used + , '
    ' || + DECODE ( + (1-SIGN(1-SIGN(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0)) - 90))) + , 1 + , '' || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || '' + , '' || TO_CHAR(TRUNC(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0))) || '' + ) + || ' %
    ' pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_data_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes) bytes + from dba_free_space + group by tablespace_name + ) f +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = f.tablespace_name(+) + AND NOT ( + d.extent_management like 'LOCAL' + AND + d.contents like 'TEMPORARY' + ) +UNION ALL +SELECT + DECODE( d.status + , 'OFFLINE' + , '
    ' || d.status || '
    ' + , '
    ' || d.status || '
    ') status + , '' || d.tablespace_name || '' name + , d.contents type + , d.extent_management extent_mgt + , d.segment_space_management segment_mgt + , NVL(a.bytes, 0) ts_size + , NVL(a.bytes - NVL(t.bytes,0), 0) free + , NVL(t.bytes, 0) used + , '
    ' || + DECODE ( + (1-SIGN(1-SIGN(TRUNC(NVL(t.bytes / a.bytes * 100, 0)) - 90))) + , 1 + , '' || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || '' + , '' || TO_CHAR(TRUNC(NVL(t.bytes / a.bytes * 100, 0))) || '' + ) + || ' %
    ' pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_temp_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes_cached) bytes + from v$temp_extent_pool + group by tablespace_name + ) t +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = t.tablespace_name(+) + AND d.extent_management like 'LOCAL' + AND d.contents like 'TEMPORARY' +ORDER BY + 2; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DATA FILES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Data Files


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace HEADING 'Tablespace Name / File Class' ENTMAP off +COLUMN filename HEADING 'Filename' ENTMAP off +COLUMN filesize FORMAT 999,999,999,999,999 HEADING 'File Size' ENTMAP off +COLUMN autoextensible HEADING 'Autoextensible' ENTMAP off +COLUMN increment_by FORMAT 999,999,999 HEADING 'Next' ENTMAP off +COLUMN maxbytes FORMAT 999,999,999,999,999 HEADING 'Max' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF filesize ON report + +SELECT /*+ ordered */ + '' || d.tablespace_name || '' tablespace + , '' || d.file_name || '' filename + , d.bytes filesize + , '
    ' || NVL(d.autoextensible, '
    ') || '
    ' autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_data_files d + , v$datafile v + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +WHERE + (d.file_name = v.name) +UNION +SELECT + '' || d.tablespace_name || '' tablespace + , '' || d.file_name || '' filename + , d.bytes filesize + , '
    ' || NVL(d.autoextensible, '
    ') || '
    ' autoextensible + , d.increment_by * e.value increment_by + , d.maxbytes maxbytes +FROM + sys.dba_temp_files d + , (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') e +UNION +SELECT + '[ ONLINE REDO LOG ]' + , '' || a.member || '' + , b.bytes + , null + , null + , null +FROM + v$logfile a + , v$log b +WHERE + a.group# = b.group# +UNION +SELECT + '[ CONTROL FILE ]' + , '' || a.name || '' + , null + , null + , null + , null +FROM + v$controlfile a +ORDER BY + 1 + , 2; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DATABASE GROWTH - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Database Growth


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN month FORMAT a75 HEADING 'Month' +COLUMN growth FORMAT 999,999,999,999,999 HEADING 'Growth (bytes)' + +BREAK ON report +COMPUTE SUM label 'Total:' OF growth ON report + +SELECT + '
    ' || TO_CHAR(creation_time, 'RRRR-MM') || '
    ' month + , SUM(bytes) growth +FROM sys.v_$datafile +GROUP BY TO_CHAR(creation_time, 'RRRR-MM') +ORDER BY TO_CHAR(creation_time, 'RRRR-MM'); + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLESPACE EXTENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tablespace Extents


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN largest_ext FORMAT 999,999,999,999,999 HEADING 'Largest Extent' ENTMAP off +COLUMN smallest_ext FORMAT 999,999,999,999,999 HEADING 'Smallest Extent' ENTMAP off +COLUMN total_free FORMAT 999,999,999,999,999 HEADING 'Total Free' ENTMAP off +COLUMN pieces FORMAT 999,999,999,999,999 HEADING 'Number of Free Extents' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total:' OF largest_ext smallest_ext total_free pieces ON report + +SELECT + '' || tablespace_name || '' tablespace_name + , max(bytes) largest_ext + , min(bytes) smallest_ext + , sum(bytes) total_free + , count(*) pieces +FROM + dba_free_space +GROUP BY + tablespace_name +ORDER BY + tablespace_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLESPACE TO OWNER - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tablespace to Owner


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace_name FORMAT a75 HEADING 'Tablespace Name' ENTMAP off +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN segment_type FORMAT a75 HEADING 'Segment Type' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in Bytes)' ENTMAP off +COLUMN seg_count FORMAT 999,999,999,999 HEADING 'Segment Count' ENTMAP off + +BREAK ON report ON tablespace_name +COMPUTE sum LABEL 'Total: ' OF seg_count bytes ON report + +SELECT + '' || tablespace_name || '' tablespace_name + , '
    ' || owner || '
    ' owner + , '
    ' || segment_type || '
    ' segment_type + , sum(bytes) bytes + , count(*) seg_count +FROM + dba_segments +GROUP BY + tablespace_name + , owner + , segment_type +ORDER BY + tablespace_name + , owner + , segment_type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OWNER TO TABLESPACE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Owner to Tablespace


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN tablespace_name FORMAT a75 HEADING 'Tablespace Name' ENTMAP off +COLUMN segment_type FORMAT a75 HEADING 'Segment Type' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in Bytes)' ENTMAP off +COLUMN seg_count FORMAT 999,999,999,999 HEADING 'Segment Count' ENTMAP off + +BREAK ON report ON owner +COMPUTE sum LABEL 'Total: ' OF seg_count bytes ON report + +SELECT + '' || owner || '' owner + , '
    ' || tablespace_name || '
    ' tablespace_name + , '
    ' || segment_type || '
    ' segment_type + , sum(bytes) bytes + , count(*) seg_count +FROM + dba_segments +GROUP BY + owner + , tablespace_name + , segment_type +ORDER BY + owner + , tablespace_name + , segment_type; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< UNDO Segments >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - UNDO SEGMENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt UNDO Segments


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN roll_name HEADING 'UNDO Segment Name' ENTMAP off +COLUMN tablespace HEADING 'Tablspace' ENTMAP off +COLUMN in_extents HEADING 'Init/Next Extents' ENTMAP off +COLUMN m_extents HEADING 'Min/Max Extents' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN wraps FORMAT 999,999,999 HEADING 'Wraps' ENTMAP off +COLUMN shrinks FORMAT 999,999,999 HEADING 'Shrinks' ENTMAP off +COLUMN opt FORMAT 999,999,999,999 HEADING 'Opt. Size' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' ENTMAP off +COLUMN extents FORMAT 999,999,999 HEADING 'Extents' ENTMAP off + +CLEAR COMPUTES BREAKS + +BREAK ON report +COMPUTE sum LABEL 'Total:' OF bytes extents shrinks wraps ON report + +SELECT + '' || a.owner || '.' || a.segment_name || '' roll_name + , a.tablespace_name tablespace + , '
    ' || + TO_CHAR(a.initial_extent) || ' / ' || + TO_CHAR(a.next_extent) || + '
    ' in_extents + , '
    ' || + TO_CHAR(a.min_extents) || ' / ' || + TO_CHAR(a.max_extents) || + '
    ' m_extents + , DECODE( a.status + , 'OFFLINE' + , '
    ' || a.status || '
    ' + , '
    ' || a.status || '
    ') status + , b.bytes bytes + , b.extents extents + , d.shrinks shrinks + , d.wraps wraps + , d.optsize opt +FROM + dba_rollback_segs a + , dba_segments b + , v$rollname c + , v$rollstat d +WHERE + a.segment_name = b.segment_name + AND a.segment_name = c.name (+) + AND c.usn = d.usn (+) +ORDER BY + a.segment_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - UNDO SEGMENT CONTENTION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt UNDO Segment Contention


    + +prompt UNDO statistics from V$ROLLSTAT - (ordered by waits) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN roll_name HEADING 'UNDO Segment Name' ENTMAP off +COLUMN gets FORMAT 999,999,999 HEADING 'Gets' ENTMAP off +COLUMN waits FORMAT 999,999,999 HEADING 'Waits' ENTMAP off +COLUMN immediate_misses FORMAT 999,999,999 HEADING 'Immediate Misses' ENTMAP off +COLUMN hit_ratio HEADING 'Hit Ratio' ENTMAP off + +BREAK ON report +COMPUTE SUM label 'Total:' OF gets waits ON report + +SELECT + '' || b.name || '' roll_name + , gets gets + , waits waits + , '
    ' || TO_CHAR(ROUND(((gets - waits)*100)/gets, 2)) || '%
    ' hit_ratio +FROM + sys.v_$rollstat a + , sys.v_$rollname b +WHERE + a.USN = b.USN +ORDER BY + waits DESC; + + +prompt +prompt Wait Statistics + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN class HEADING 'Class' +COLUMN ratio HEADING 'Wait Ratio' + +SELECT + '' || w.class || '' class + , '
    ' || TO_CHAR(ROUND(100*(w.count/SUM(s.value)),8)) || '%
    ' ratio +FROM + v$waitstat w + , v$sysstat s +WHERE + w.class IN ( 'system undo header' + , 'system undo block' + , 'undo header' + , 'undo block' + ) + AND s.name IN ('db block gets', 'consistent gets') +GROUP BY + w.class + , w.count; + + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< ARCHIVING >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVING MODE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archiving Mode


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN db_log_mode FORMAT a95 HEADING 'Database Log Mode' ENTMAP off +COLUMN log_archive_start FORMAT a95 HEADING 'Automatic Archival' ENTMAP off +COLUMN oldest_online_log_sequence FORMAT 999999999999999 HEADING 'Oldest Online Log Sequence' ENTMAP off +COLUMN current_log_seq FORMAT 999999999999999 HEADING 'Current Log Sequence' ENTMAP off + +SELECT + '
    ' || d.log_mode || '
    ' db_log_mode + , '
    ' || p.log_archive_start || '
    ' log_archive_start + , c.current_log_seq current_log_seq + , o.oldest_online_log_sequence oldest_online_log_sequence +FROM + (select + DECODE( log_mode + , 'ARCHIVELOG', 'Archive Mode' + , 'NOARCHIVELOG', 'No Archive Mode' + , log_mode + ) log_mode + from v$database + ) d + , (select + DECODE( a.value + , 'TRUE', 'Enabled' + , 'FALSE', 'Disabled') log_archive_start + from + v$parameter a + where + a.name = 'log_archive_start' + ) p + , (select a.sequence# current_log_seq + from v$log a + where a.status = 'CURRENT' + ) c + , (select min(a.sequence#) oldest_online_log_sequence + from v$log a + ) o +/ + + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVING PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archiving Parameters


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Parameter Name' ENTMAP off +COLUMN value HEADING 'Parameter Value' ENTMAP off + +SELECT + '' || a.name || '' name + , a.value value +FROM + v$parameter a +WHERE + a.name like 'log_%' +ORDER BY + a.name; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - ARCHIVING HISTORY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Archiving History


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN sequence# FORMAT a79 HEADING 'Sequence#' ENTMAP off +COLUMN name HEADING 'Name' ENTMAP off +COLUMN first_change# HEADING 'First|Change #' ENTMAP off +COLUMN first_time FORMAT a75 HEADING 'First|Time' ENTMAP off +COLUMN next_change# HEADING 'Next|Change #' ENTMAP off +COLUMN next_time FORMAT a75 HEADING 'Next|Time' ENTMAP off +COLUMN log_size FORMAT 999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off +COLUMN archived FORMAT a31 HEADING 'Archived?' ENTMAP off +COLUMN applied FORMAT a31 HEADING 'Applied?' ENTMAP off +COLUMN deleted FORMAT a31 HEADING 'Deleted?' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Status' ENTMAP off + +SELECT + '
    ' || sequence# || '
    ' sequence# + , name + , first_change# + , '
    ' || TO_CHAR(first_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' first_time + , next_change# + , '
    ' || TO_CHAR(next_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' next_time + , (blocks * block_size) log_size + , '
    ' || archived || '
    ' archived + , '
    ' || applied || '
    ' applied + , '
    ' || deleted || '
    ' deleted + , DECODE( status + , 'A', '
    Available
    ' + , 'D', '
    Deleted
    ' + , 'U', '
    Unavailable
    ' + , 'X', '
    Expired
    ' + ) status +FROM + v$archived_log +WHERE + status in ('A') +ORDER BY + sequence#; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< RMAN >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - RMAN CONFIGURATION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt RMAN Configuration


    + +prompt All non-default RMAN configuration settings + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a130 HEADING 'Name' ENTMAP off +COLUMN value HEADING 'Value' ENTMAP off + +SELECT + '
    ' || name || '
    ' name + , value +FROM + v$rman_configuration +ORDER BY + name; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - BACKUP SETS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Backup Sets


    + +prompt Available backup sets contained in the control file including available and expired backup sets + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN backup_type FORMAT a70 HEADING 'Backup Type' ENTMAP off +COLUMN device_type HEADING 'Device Type' ENTMAP off +COLUMN controlfile_included FORMAT a30 HEADING 'Controlfile Included?' ENTMAP off +COLUMN spfile_included FORMAT a30 HEADING 'SPFILE Included?' ENTMAP off +COLUMN incremental_level HEADING 'Incremental Level' ENTMAP off +COLUMN pieces FORMAT 999,999,999,999 HEADING '# of Pieces' ENTMAP off +COLUMN start_time FORMAT a75 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a75 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN tag HEADING 'Tag' ENTMAP off +COLUMN block_size FORMAT 999,999,999,999,999 HEADING 'Block Size' ENTMAP off +COLUMN keep FORMAT a40 HEADING 'Keep?' ENTMAP off +COLUMN keep_until FORMAT a75 HEADING 'Keep Until' ENTMAP off +COLUMN keep_options FORMAT a15 HEADING 'Keep Options' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total:' OF pieces elapsed_seconds ON report + +SELECT + '
    ' || bs.recid || '
    ' bs_key + , DECODE(backup_type + , 'L', '
    Archived Redo Logs
    ' + , 'D', '
    Datafile Full Backup
    ' + , 'I', '
    Incremental Backup
    ') backup_type + , '
    ' || device_type || '
    ' device_type + , '
    ' || + DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included) || '
    ' controlfile_included + , '
    ' || NVL(sp.spfile_included, '-') || '
    ' spfile_included + , bs.incremental_level incremental_level + , bs.pieces pieces + , '
    ' || TO_CHAR(bs.start_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' start_time + , '
    ' || TO_CHAR(bs.completion_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' completion_time + , bs.elapsed_seconds elapsed_seconds + , bp.tag tag + , bs.block_size block_size + , '
    ' || bs.keep || '
    ' keep + , '
    ' || NVL(TO_CHAR(bs.keep_until, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' keep_until + , bs.keep_options keep_options +FROM + v$backup_set bs + , (select distinct + set_stamp + , set_count + , tag + , device_type + from v$backup_piece + where status in ('A', 'X')) bp + , (select distinct set_stamp, set_count, 'YES' spfile_included + from v$backup_spfile) sp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bs.set_stamp = sp.set_stamp (+) + AND bs.set_count = sp.set_count (+) +ORDER BY + bs.recid; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - BACKUP PIECES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Backup Pieces


    + +prompt Available backup pieces contained in the control file including available and expired backup sets + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN piece# HEADING 'Piece #' ENTMAP off +COLUMN copy# HEADING 'Copy #' ENTMAP off +COLUMN bp_key HEADING 'BP Key' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN handle HEADING 'Handle' ENTMAP off +COLUMN start_time FORMAT a75 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a75 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP off + +BREAK ON bs_key + +SELECT + '
    ' || bs.recid || '
    ' bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , DECODE( status + , 'A', '
    Available
    ' + , 'D', '
    Deleted
    ' + , 'X', '
    Expired
    ') status + , handle handle + , '
    ' || TO_CHAR(bp.start_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' start_time + , '
    ' || TO_CHAR(bp.completion_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' completion_time + , bp.elapsed_seconds elapsed_seconds +FROM + v$backup_set bs + , v$backup_piece bp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bp.status IN ('A', 'X') +ORDER BY + bs.recid + , piece#; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - BACKUP CONTROL FILES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Backup Control Files


    + +prompt Available automatic control files within all available (and expired) backup sets + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN piece# HEADING 'Piece #' ENTMAP off +COLUMN copy# HEADING 'Copy #' ENTMAP off +COLUMN bp_key HEADING 'BP Key' ENTMAP off +COLUMN controlfile_included FORMAT a75 HEADING 'Controlfile Included?' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN handle HEADING 'Handle' ENTMAP off +COLUMN start_time FORMAT a40 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a40 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP off + +BREAK ON bs_key + +SELECT + '
    ' || bs.recid || '
    ' bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , '
    ' || + DECODE(bs.controlfile_included, 'NO', '-', bs.controlfile_included) || + '
    ' controlfile_included + , DECODE( status + , 'A', '
    Available
    ' + , 'D', '
    Deleted
    ' + , 'X', '
    Expired
    ') status + , handle handle +FROM + v$backup_set bs + , v$backup_piece bp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bp.status IN ('A', 'X') + AND bs.controlfile_included != 'NO' +ORDER BY + bs.recid + , piece#; + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - BACKUP SPFILE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Backup SPFILE


    + +prompt Available automatic SPFILE backups within all available (and expired) backup sets + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN bs_key FORMAT a75 HEADING 'BS Key' ENTMAP off +COLUMN piece# HEADING 'Piece #' ENTMAP off +COLUMN copy# HEADING 'Copy #' ENTMAP off +COLUMN bp_key HEADING 'BP Key' ENTMAP off +COLUMN spfile_included FORMAT a75 HEADING 'SPFILE Included?' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN handle HEADING 'Handle' ENTMAP off +COLUMN start_time FORMAT a40 HEADING 'Start Time' ENTMAP off +COLUMN completion_time FORMAT a40 HEADING 'End Time' ENTMAP off +COLUMN elapsed_seconds FORMAT 999,999,999,999,999 HEADING 'Elapsed Seconds' ENTMAP off +COLUMN deleted FORMAT a10 HEADING 'Deleted?' ENTMAP off + +BREAK ON bs_key + +SELECT + '
    ' || bs.recid || '
    ' bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , '
    ' || + NVL(sp.spfile_included, '-') || + '
    ' spfile_included + , DECODE( status + , 'A', '
    Available
    ' + , 'D', '
    Deleted
    ' + , 'X', '
    Expired
    ') status + , handle handle +FROM + v$backup_set bs + , v$backup_piece bp + , (select distinct set_stamp, set_count, 'YES' spfile_included + from v$backup_spfile) sp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bp.status IN ('A', 'X') + AND bs.set_stamp = sp.set_stamp + AND bs.set_count = sp.set_count +ORDER BY + bs.recid + , piece#; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< PERFORMANCE >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - SGA INFORMATION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SGA Information


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a79 HEADING 'Pool Name' ENTMAP off +COLUMN value FORMAT 999,999,999,999 HEADING 'Bytes' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total:' OF value ON report + +SELECT + '
    ' || name || '
    ' name + , value +FROM + v$sga; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DB BUFFER CACHE HIT RATIO - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt DB Buffer Cache Hit Ratio


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN consistent_gets FORMAT 999,999,999,999,999,999 HEADING 'Consistent Gets' ENTMAP off +COLUMN db_block_gets FORMAT 999,999,999,999,999,999 HEADING 'DB Block Gets' ENTMAP off +COLUMN phys_reads FORMAT 999,999,999,999,999,999 HEADING 'Physical Reads' ENTMAP off +COLUMN db_hit_ratio HEADING 'Hit Ratio' ENTMAP off + +SELECT + SUM(DECODE(name, 'consistent gets', value, 0)) consistent_gets + , SUM(DECODE(name, 'db block gets', value, 0)) db_block_gets + , SUM(DECODE(name, 'physical reads', value, 0)) phys_reads + , '
    ' || + TO_CHAR(ROUND((SUM(DECODE(name, 'consistent gets', value, 0)) + + SUM(DECODE(name, 'db block gets', value, 0)) - + SUM(DECODE(name, 'physical reads', value, 0))) / + (SUM(DECODE(name, 'consistent gets', value, 0)) + + SUM(DECODE(name, 'db block gets', value, 0)))*100, 2)) || + '%
    ' db_hit_ratio +FROM v$sysstat; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DICTIONARY CACHE HIT RATIO - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dictionary Cache Hit Ratio


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN gets FORMAT 999,999,999,999,999,999 HEADING 'Misses' ENTMAP off +COLUMN misses FORMAT 999,999,999,999,999,999 HEADING 'Gets' ENTMAP off +COLUMN dc_hit_ratio HEADING 'Hit Ratio' ENTMAP off + +SELECT + SUM(gets) gets + , SUM(getmisses) misses + , '
    ' || + TO_CHAR(ROUND((((SUM(gets)-SUM(getmisses))/SUM(gets))*100), 2)) || + '%
    ' dc_hit_ratio +FROM + v$rowcache; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - LIBRARY CACHE HIT RATIO - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Library Cache Hit Ratio


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN pins FORMAT 999,999,999,999,999,999 HEADING 'Pins - (Executions)' ENTMAP off +COLUMN reloads FORMAT 999,999,999,999,999,999 HEADING 'Reloads - (Cache Miss)' ENTMAP off +COLUMN lc_hit_ratio HEADING 'Hit Ratio' ENTMAP off + +SELECT + SUM(pins) pins + , SUM(reloads) reloads + , '
    ' || + TO_CHAR(ROUND((((SUM(pins)-SUM(reloads))/SUM(pins))*100),2)) || + '%
    ' lc_hit_ratio +FROM + v$librarycache; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - LATCH CONTENTION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Latch Contention


    + +prompt Latches with "gets", "misses", "sleeps", "immediate gets", or "immediate misses" greater than 0 - (ordered by misses) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN latch_name FORMAT a110 HEADING 'Latch Name' ENTMAP off +COLUMN gets FORMAT 999,999,999,999,999,999 HEADING 'Gets' ENTMAP off +COLUMN misses FORMAT 999,999,999,999,999,999 HEADING 'Misses' ENTMAP off +COLUMN sleeps FORMAT 999,999,999,999,999,999 HEADING 'Sleeps' ENTMAP off +COLUMN miss_ratio HEADING 'Willing to Wait Ratio' ENTMAP off +COLUMN imm_gets FORMAT 999,999,999,999,999,999 HEADING 'Immediate Gets' ENTMAP off +COLUMN imm_misses FORMAT 999,999,999,999,999,999 HEADING 'Immediate Misses' ENTMAP off +COLUMN imm_miss_ratio HEADING 'Immediate Ratio' ENTMAP off + +SELECT + '' || SUBSTR(a.name,1,40) || '' latch_name + , gets gets + , misses misses + , sleeps sleeps + , '
    ' || ROUND((misses/(gets+.001))*100, 4) || '%
    ' miss_ratio + , immediate_gets imm_gets + , immediate_misses imm_misses + , '
    ' || ROUND((immediate_misses/(immediate_gets+.001))*100, 4) || '%
    ' imm_miss_ratio +FROM + v$latch a + , v$latchname b +WHERE + a.latch# = b.latch# + AND ( gets > 0 + OR misses > 0 + OR sleeps > 0 + OR immediate_gets > 0 + OR immediate_misses > 0 + ) +ORDER BY + misses DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - SYSTEM WAIT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt System Wait Statistics


    + +prompt Classes with counts greater than 0 + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN class FORMAT A95 HEADING 'Class' ENTMAP off +COLUMN count FORMAT 99999999999990 HEADING 'Count' ENTMAP off + +SELECT + '' || class || '' class + , count +FROM + v$waitstat +WHERE + count > 0 +ORDER BY + 2 DESC + , 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - SYSTEM STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt System Statistics


    + +prompt Statistics with values greater than 0 + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT A95 HEADING 'Name' ENTMAP off +COLUMN value FORMAT 999,999,999,999,999,999,999,990 HEADING 'Value' ENTMAP off + +SELECT + '' || name || '' name + , value +FROM + v$sysstat +WHERE + value > 0 +ORDER BY + 2 DESC + , 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - SYSTEM EVENT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt System Event Statistics


    + +prompt Non-idle events with total waits greater than 0 - (ordered by "Time Waited") +prompt + +prompt - +EVENT: The name of the wait event.
    - +TOTAL_WAITS: The total number of waits for this event.
    - +TOTAL_TIMEOUTS: The total number of timeouts for this event.
    - +TIME_WAITED: The total amount of time waited for this event, in hundredths of a second.
    - +AVERAGE_WAIT: The average amount of time waited for this event, in hundredths of a second. + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN event FORMAT a95 HEADING 'Event' ENTMAP off +COLUMN total_waits FORMAT 999,999,999,999,999,999 HEADING 'Total Waits' ENTMAP off +COLUMN total_timeouts FORMAT 999,999,999,999,999,999 HEADING 'Total Timeouts' ENTMAP off +COLUMN time_waited FORMAT 999,999,999,999,999,999 HEADING 'Time Waited' ENTMAP off +COLUMN average_wait FORMAT 999,999,999,999,999,999 HEADING 'Average Wait' ENTMAP off + +SELECT + '' || event || '' event + , total_waits + , total_timeouts + , time_waited + , average_wait +FROM + v$system_event +WHERE + total_waits > 0 + AND event NOT IN ( 'PX Idle Wait' + , 'pmon timer' + , 'smon timer' + , 'rdbms ipc message' + , 'parallel dequeue wait' + , 'parallel query dequeue' + , 'virtual circuit' + , 'SQL*Net message from client' + , 'SQL*Net message to client' + , 'SQL*Net more data to client' + , 'client message','Null event' + , 'WMON goes to sleep' + , 'virtual circuit status' + , 'dispatcher timer' + , 'pipe get' + , 'slave wait' + , 'KXFX: execution message dequeue - Slaves' + , 'parallel query idle wait - Slaves' + , 'lock manager wait for remote message') +ORDER BY + time_waited DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - FILE I/O STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt File I/O Statistics


    + +prompt Ordered by "Physical Reads" since last startup of the Oracle instance + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN tablespace_name FORMAT a50 HEAD 'Tablespace' ENTMAP off +COLUMN fname HEAD 'File Name' ENTMAP off +COLUMN phyrds FORMAT 999,999,999,999,999 HEAD 'Physical Reads' ENTMAP off +COLUMN phywrts FORMAT 999,999,999,999,999 HEAD 'Physical Writes' ENTMAP off +COLUMN read_pct HEAD 'Read Pct.' ENTMAP off +COLUMN write_pct HEAD 'Write Pct.' ENTMAP off +COLUMN total_io FORMAT 999,999,999,999,999 HEAD 'Total I/O' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF phyrds phywrts total_io ON report + +SELECT + '' || df.tablespace_name || '' tablespace_name + , df.file_name fname + , fs.phyrds phyrds + , '
    ' || ROUND((fs.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
    ' read_pct + , fs.phywrts phywrts + , '
    ' || ROUND((fs.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
    ' write_pct + , (fs.phyrds + fs.phywrts) total_io +FROM + sys.dba_data_files df + , v$filestat fs + , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst + , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst +WHERE + df.file_id = fs.file# +UNION +SELECT + '' || tf.tablespace_name || '' tablespace_name + , tf.file_name fname + , ts.phyrds phyrds + , '
    ' || ROUND((ts.phyrds * 100) / (fst.pr + tst.pr), 2) || '%
    ' read_pct + , ts.phywrts phywrts + , '
    ' || ROUND((ts.phywrts * 100) / (fst.pw + tst.pw), 2) || '%
    ' write_pct + , (ts.phyrds + ts.phywrts) total_io +FROM + sys.dba_temp_files tf + , v$tempstat ts + , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst + , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst +WHERE + tf.file_id = ts.file# +ORDER BY phyrds DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - FILE I/O TIMINGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt File I/O Timings


    + +prompt Average time (in milliseconds) for an I/O call per datafile since last startup of the Oracle instance - (ordered by Physical Reads) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN fname HEAD 'File Name' ENTMAP off +COLUMN phyrds FORMAT 999,999,999,999,999 HEAD 'Physical Reads' ENTMAP off +COLUMN read_rate FORMAT 999,999,999,999,999.99 HEAD 'Average Read Time
    (milliseconds per read)' ENTMAP off +COLUMN phywrts FORMAT 999,999,999,999,999 HEAD 'Physical Writes' ENTMAP off +COLUMN write_rate FORMAT 999,999,999,999,999.99 HEAD 'Average Write Time
    (milliseconds per write)' ENTMAP off + +BREAK ON REPORT +COMPUTE sum LABEL 'Total: ' OF phyrds phywrts ON report +COMPUTE avg LABEL 'Average: ' OF read_rate write_rate ON report + +SELECT + '' || d.name || '' fname + , s.phyrds phyrds + , ROUND((s.readtim/GREATEST(s.phyrds,1)), 2) read_rate + , s.phywrts phywrts + , ROUND((s.writetim/GREATEST(s.phywrts,1)),2) write_rate +FROM + v$filestat s + , v$datafile d +WHERE + s.file# = d.file# +UNION +SELECT + '' || t.name || '' fname + , s.phyrds phyrds + , ROUND((s.readtim/GREATEST(s.phyrds,1)), 2) read_rate + , s.phywrts phywrts + , ROUND((s.writetim/GREATEST(s.phywrts,1)),2) write_rate +FROM + v$tempstat s + , v$tempfile t +WHERE + s.file# = t.file# +ORDER BY + 2 DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - AVERAGE OVERALL I/O PER SECOND - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Average Overall I/O per Second


    + +prompt Average overall I/O calls (physical read/write calls) since last startup of the Oracle instance + +CLEAR COLUMNS BREAKS COMPUTES + +DECLARE + +CURSOR get_file_io IS + SELECT + NVL(SUM(a.phyrds + a.phywrts), 0) sum_datafile_io + , TO_NUMBER(null) sum_tempfile_io + FROM + v$filestat a + UNION + SELECT + TO_NUMBER(null) sum_datafile_io + , NVL(SUM(b.phyrds + b.phywrts), 0) sum_tempfile_io + FROM + v$tempstat b; + +current_time DATE; +elapsed_time_seconds NUMBER; +sum_datafile_io NUMBER; +sum_datafile_io2 NUMBER; +sum_tempfile_io NUMBER; +sum_tempfile_io2 NUMBER; +total_io NUMBER; +datafile_io_per_sec NUMBER; +tempfile_io_per_sec NUMBER; +total_io_per_sec NUMBER; + +BEGIN + OPEN get_file_io; + FOR i IN 1..2 LOOP + FETCH get_file_io INTO sum_datafile_io, sum_tempfile_io; + IF i = 1 THEN + sum_datafile_io2 := sum_datafile_io; + ELSE + sum_tempfile_io2 := sum_tempfile_io; + END IF; + END LOOP; + + total_io := sum_datafile_io2 + sum_tempfile_io2; + SELECT sysdate INTO current_time FROM dual; + SELECT CEIL ((current_time - startup_time)*(60*60*24)) INTO elapsed_time_seconds FROM v$instance; + + datafile_io_per_sec := sum_datafile_io2/elapsed_time_seconds; + tempfile_io_per_sec := sum_tempfile_io2/elapsed_time_seconds; + total_io_per_sec := total_io/elapsed_time_seconds; + + DBMS_OUTPUT.PUT_LINE(''); + + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE(''); + + DBMS_OUTPUT.PUT_LINE('
    Elapsed Time (in seconds)' || TO_CHAR(elapsed_time_seconds, '9,999,999,999,999') || '
    Datafile I/O Calls per Second' || TO_CHAR(datafile_io_per_sec, '9,999,999,999,999') || '
    Tempfile I/O Calls per Second' || TO_CHAR(tempfile_io_per_sec, '9,999,999,999,999') || '
    Total I/O Calls per Second' || TO_CHAR(total_io_per_sec, '9,999,999,999,999') || '
    '); +END; +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - REDO LOG CONTENTION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Redo Log Contention


    + +prompt All latches like redo% - (ordered by misses) + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a95 HEADING 'Latch Name' ENTMAP off +COLUMN gets FORMAT 999,999,999,999,999,999 HEADING 'Gets' ENTMAP off +COLUMN misses FORMAT 999,999,999,999 HEADING 'Misses' ENTMAP off +COLUMN sleeps FORMAT 999,999,999,999 HEADING 'Sleeps' ENTMAP off +COLUMN immediate_gets FORMAT 999,999,999,999,999,999 HEADING 'Immediate Gets' ENTMAP off +COLUMN immediate_misses FORMAT 999,999,999,999 HEADING 'Immediate Misses' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total:' OF gets misses sleeps immediate_gets immediate_misses ON report + +SELECT + '
    ' || INITCAP(name) || '
    ' name + , gets + , misses + , sleeps + , immediate_gets + , immediate_misses +FROM sys.v_$latch +WHERE name LIKE 'redo%' +ORDER BY 1; + + + +prompt +prompt System statistics like redo% + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a95 HEADING 'Statistics Name' +COLUMN value FORMAT 999,999,999,999,999 HEADING 'Value' + +SELECT + '
    ' || INITCAP(name) || '
    ' name + , value +FROM v$sysstat +WHERE name LIKE 'redo%' +ORDER BY 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - FULL TABLE SCANS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Full Table Scans


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN large_table_scans FORMAT 999,999,999,999,999 HEADING 'Large Table Scans' ENTMAP off +COLUMN small_table_scans FORMAT 999,999,999,999,999 HEADING 'Small Table Scans' ENTMAP off +COLUMN pct_large_scans HEADING 'Pct. Large Scans' ENTMAP off + +SELECT + a.value large_table_scans + , b.value small_table_scans + , '
    ' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
    ' pct_large_scans +FROM + v$sysstat a + , v$sysstat b +WHERE + a.name = 'table scans (long tables)' + AND b.name = 'table scans (short tables)'; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - SORTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Sorts


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN disk_sorts FORMAT 999,999,999,999,999 HEADING 'Disk Sorts' ENTMAP off +COLUMN memory_sorts FORMAT 999,999,999,999,999 HEADING 'Memory Sorts' ENTMAP off +COLUMN pct_disk_sorts HEADING 'Pct. Disk Sorts' ENTMAP off + +SELECT + a.value disk_sorts + , b.value memory_sorts + , '
    ' || ROUND(100*a.value/DECODE((a.value+b.value),0,1,(a.value+b.value)),2) || '%
    ' pct_disk_sorts +FROM + v$sysstat a + , v$sysstat b +WHERE + a.name = 'sorts (disk)' + AND b.name = 'sorts (memory)'; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OUTLINES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Outlines


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN category FORMAT a125 HEADING 'Category' ENTMAP off +COLUMN owner FORMAT a125 HEADING 'Owner' ENTMAP off +COLUMN name FORMAT a125 HEADING 'Name' ENTMAP off +COLUMN used HEADING 'Used?' ENTMAP off +COLUMN timestamp FORMAT a125 HEADING 'Time Stamp' ENTMAP off +COLUMN version HEADING 'Version' ENTMAP off +COLUMN sql_text HEADING 'SQL Text' ENTMAP off + +SELECT + '
    ' || category || '
    ' category + , owner + , name + , used + , '
    ' || TO_CHAR(timestamp, 'mm/dd/yyyy HH24:MI:SS') || '
    ' timestamp + , version + , sql_text +FROM + dba_outlines +ORDER BY + category + , owner + , name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OUTLINE HINTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Outline Hints


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN category FORMAT a125 HEADING 'Category' ENTMAP off +COLUMN owner FORMAT a125 HEADING 'Owner' ENTMAP off +COLUMN name FORMAT a125 HEADING 'Name' ENTMAP off +COLUMN node HEADING 'Node' ENTMAP off +COLUMN join_pos HEADING 'Join Position' ENTMAP off +COLUMN hint HEADING 'Hint' ENTMAP off + +BREAK ON category ON owner ON name + +SELECT + '
    ' || a.category || '
    ' category + , a.owner owner + , a.name name + , '
    ' || b.node || '
    ' node + , '
    ' || b.join_pos || '
    ' join_pos + , b.hint hint +FROM + dba_outlines a + , dba_outline_hints b +WHERE + a.owner = b.owner + AND b.name = b.name +ORDER BY + category + , owner + , name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - SQL STATEMENTS WITH MOST BUFFER GETS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SQL Statements With Most Buffer Gets


    + +prompt Top 100 SQL statements with buffer gets greater than 1000 + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN buffer_gets FORMAT 999,999,999,999,999 HEADING 'Buffer Gets' ENTMAP off +COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP off +COLUMN gets_per_exec FORMAT 999,999,999,999,999 HEADING 'Buffer Gets / Execution' ENTMAP off +COLUMN sql_text HEADING 'SQL Text' ENTMAP off + +SELECT + '' || UPPER(b.username) || '' username + , a.buffer_gets buffer_gets + , a.executions executions + , (a.buffer_gets / decode(a.executions, 0, 1, a.executions)) gets_per_exec + , a.sql_text sql_text +FROM + (SELECT ai.buffer_gets, ai.executions, ai.sql_text, ai.parsing_user_id + FROM sys.v_$sqlarea ai + ORDER BY ai.buffer_gets + ) a + , dba_users b +WHERE + a.parsing_user_id = b.user_id + AND a.buffer_gets > 1000 + AND b.username NOT IN ('SYS','SYSTEM') + AND rownum < 101 +ORDER BY + a.buffer_gets DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - SQL STATEMENTS WITH MOST DISK READS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt SQL Statements With Most Disk Reads


    + +prompt Top 100 SQL statements with disk reads greater than 1000 + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' ENTMAP off +COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' ENTMAP off +COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Execution' ENTMAP off +COLUMN sql_text HEADING 'SQL Text' ENTMAP off + + +SELECT + '' || UPPER(b.username) || '' username + , a.disk_reads disk_reads + , a.executions executions + , (a.disk_reads / decode(a.executions, 0, 1, a.executions)) reads_per_exec + , a.sql_text sql_text +FROM + (SELECT ai.disk_reads, ai.executions, ai.sql_text, ai.parsing_user_id + FROM sys.v_$sqlarea ai + ORDER BY ai.buffer_gets + ) a + , dba_users b +WHERE + a.parsing_user_id = b.user_id + AND a.disk_reads > 1000 + AND b.username NOT IN ('SYS','SYSTEM') + AND rownum < 101 +ORDER BY + a.disk_reads DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 10 TABLES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 10 Tables


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN ctyp FORMAT a79 HEADING 'Command Type' ENTMAP off +COLUMN obj FORMAT a30 HEADING 'Object Name' ENTMAP off +COLUMN noe FORMAT 999,999,999,999,999 HEADING 'Number of Executions' ENTMAP off +COLUMN gets FORMAT 999,999,999,999,999 HEADING 'Buffer Gets' ENTMAP off +COLUMN rowp FORMAT 999,999,999,999,999 HEADING 'Rows Processed' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF noe gets rowp ON report + +SELECT + '
    ' || ctyp || '
    ' ctyp + , obj + , 0 - exem noe + , gets + , rowp +FROM ( + select distinct exem, ctyp, obj, gets, rowp + from (select + DECODE( s.command_type + , 2, 'INSERT INTO ' + , 3, 'SELECT FROM ' + , 6, 'UPDATE OF ' + , 7, 'DELETE FROM ' + , 26, 'LOCK OF ') ctyp + , o.owner || '.' || o.name obj + , SUM(0 - s.executions) exem + , SUM(s.buffer_gets) gets + , SUM(s.rows_processed) rowp + from + v$sql s + , v$object_dependency d + , v$db_object_cache o + where + s.command_type IN (2,3,6,7,26) + and d.from_address = s.address + and d.to_owner = o.owner + and d.to_name = o.name + and o.type = 'TABLE' + group by + s.command_type + , o.owner + , o.name + ) +) +WHERE rownum <= 10; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 10 PROCEDURES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 10 Procedures


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN ptyp FORMAT a79 HEADING 'Object Type' ENTMAP off +COLUMN obj FORMAT a42 HEADING 'Object Name' ENTMAP off +COLUMN noe FORMAT 999,999,999,999,999 HEADING 'Number of Executions' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF noe ON report + +SELECT + '
    ' || ptyp || '
    ' ptyp + , obj + , 0 - exem noe +FROM ( select distinct exem, ptyp, obj + from ( select + o.type ptyp + , o.owner || '.' || o.name obj + , 0 - o.executions exem + from v$db_object_cache O + where o.type in ( 'FUNCTION' + , 'PACKAGE' + , 'PACKAGE BODY' + , 'PROCEDURE' + , 'TRIGGER') + ) + ) +WHERE rownum <= 10; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< STATSPACK >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - STATSPACK LIST - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Statspack List


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN snap_id FORMAT a75 HEAD 'Snap ID' ENTMAP off +COLUMN snap_time FORMAT a75 HEAD 'Statspack Snap Time' ENTMAP off +COLUMN startup_time FORMAT a75 HEAD 'Database Startup Time' ENTMAP off + +BREAK ON startup_time SKIP 1 + +SELECT + '
    ' || a.snap_id || '
    ' snap_id + , '
    ' || TO_CHAR(a.startup_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' startup_time + , '
    ' || TO_CHAR(a.snap_time, 'mm/dd/yyyy HH24:MI:SS') || '
    ' snap_time +FROM + stats$snapshot a + , v$database b +ORDER BY + a.snap_id +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - STATSPACK PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Statspack Parameters


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name FORMAT a75 HEAD 'Database|Name' ENTMAP off +COLUMN snap_level FORMAT 999999 HEAD 'Snap|Level' ENTMAP off +COLUMN num_sql FORMAT 999,999 HEAD 'Number|SQL' ENTMAP off +COLUMN executions_th FORMAT 999,999 HEAD 'Executions|(TH)' ENTMAP off +COLUMN parse_calls_th FORMAT 999,999 HEAD 'Parse|Calls|(TH)' ENTMAP off +COLUMN disk_reads_th FORMAT 999,999 HEAD 'Disk|Reads|(TH)' ENTMAP off +COLUMN buffer_gets_th FORMAT 999,999 HEAD 'Buffer|Gets|(TH)' ENTMAP off +COLUMN sharable_mem_th FORMAT 999,999,999 HEAD 'Sharable|Mem.|(TH)' ENTMAP off +COLUMN version_count_th HEAD 'Version|Count|(TH)' ENTMAP off +COLUMN pin_statspack HEAD 'Pin|Statspack' ENTMAP off +COLUMN all_init HEAD 'All|Init' ENTMAP off +COLUMN last_modified FORMAT a75 HEAD 'Last|Modified' ENTMAP off + +SELECT + '' || b.name || '' name + , a.snap_level + , a.num_sql + , a.executions_th + , a.parse_calls_th + , a.disk_reads_th + , a.buffer_gets_th + , a.sharable_mem_th + , a.version_count_th + , '
    ' || a.pin_statspack || '
    ' pin_statspack + , '
    ' || a.all_init || '
    ' all_init + , '
    ' || TO_CHAR(a.last_modified, 'mm/dd/yyyy HH24:MI:SS') || '
    ' last_modified +FROM + stats$statspack_parameter a + , v$database b +/ + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< SESSIONS >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - CURRENT SESSIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Current Sessions


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN count FORMAT a45 HEADING 'Current No. of Processes' ENTMAP off +COLUMN value FORMAT a45 HEADING 'Max No. of Processes' ENTMAP off +COLUMN pct_usage FORMAT a45 HEADING '% Usage' ENTMAP off + +SELECT + '
    ' || TO_char(a.count) || '
    ' count + , '
    ' || b.value || '
    ' value + , '
    ' || TO_CHAR(ROUND(100*(a.count / b.value), 2)) || '%
    ' pct_usage +FROM + (select count(*) count from v$session) a + , (select value from v$parameter where name='processes') b; + + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - USER SESSION MATRIX - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt User Session Matrix


    + +prompt User sessions (including SYS and background processes) + +COLUMN username FORMAT a79 HEADING 'Oracle User' ENTMAP off +COLUMN num_user_sess FORMAT 999,999,999,999 HEADING 'Total Number of Logins' ENTMAP off +COLUMN count_a FORMAT 999,999,999 HEADING 'Active Logins' ENTMAP off +COLUMN count_i FORMAT 999,999,999 HEADING 'Inactive Logins' ENTMAP off +COLUMN count_k FORMAT 999,999,999 HEADING 'Killed Logins' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF num_user_sess count_a count_i count_k ON report + +SELECT + '
    ' || NVL(sess.username, '[B.G. Process]') || '
    ' username + , count(*) num_user_sess + , NVL(act.count, 0) count_a + , NVL(inact.count, 0) count_i + , NVL(killed.count, 0) count_k +FROM + v$session sess + , (SELECT count(*) count, nvl(username, '[B.G. Process]') username + FROM v$session + WHERE status = 'ACTIVE' + GROUP BY username) act + , (SELECT count(*) count, nvl(username, '[B.G. Process]') username + FROM v$session + WHERE status = 'INACTIVE' + GROUP BY username) inact + , (SELECT count(*) count, nvl(username, '[B.G. Process]') username + FROM v$session + WHERE status = 'KILLED' + GROUP BY username) killed +WHERE + nvl(sess.username, '[B.G. Process]') = act.username (+) + and nvl(sess.username, '[B.G. Process]') = inact.username (+) + and nvl(sess.username, '[B.G. Process]') = killed.username (+) +GROUP BY + sess.username + , act.count + , inact.count + , killed.count +ORDER BY + username; + + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< SECURITY >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - USER ACCOUNTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt User Accounts


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEAD 'Username' ENTMAP off +COLUMN account_status FORMAT a75 HEAD 'Account Status' ENTMAP off +COLUMN expiry_date FORMAT a75 HEAD 'Expire Date' ENTMAP off +COLUMN default_tablespace FORMAT a75 HEAD 'Default Tbs.' ENTMAP off +COLUMN temporary_tablespace FORMAT a75 HEAD 'Temp Tbs.' ENTMAP off +COLUMN created FORMAT a75 HEAD 'Created On' ENTMAP off +COLUMN profile FORMAT a75 HEAD 'Profile' ENTMAP off +COLUMN sysdba FORMAT a75 HEAD 'SYSDBA' ENTMAP off +COLUMN sysoper FORMAT a75 HEAD 'SYSOPER' ENTMAP off + +SELECT distinct + '' || a.username || '' username + , DECODE( a.account_status + , 'OPEN' + , '
    ' || a.account_status || '
    ' + , '
    ' || a.account_status || '
    ') account_status + , '
    ' || NVL(TO_CHAR(a.expiry_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' expiry_date + , a.default_tablespace default_tablespace + , a.temporary_tablespace temporary_tablespace + , '
    ' || TO_CHAR(a.created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created + , a.profile profile + , '
    ' || NVL(DECODE(p.sysdba,'TRUE', 'TRUE',''), '
    ') || '
    ' sysdba + , '
    ' || NVL(DECODE(p.sysoper,'TRUE','TRUE',''), '
    ') || '
    ' sysoper +FROM + dba_users a + , v$pwfile_users p +WHERE + p.username (+) = a.username +ORDER BY + username; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - USERS WITH DBA PRIVILEGES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Users With DBA Privileges


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN grantee FORMAT a70 HEADING 'Grantee' ENTMAP off +COLUMN granted_role FORMAT a30 HEADING 'Granted Role' ENTMAP off +COLUMN admin_option FORMAT a40 HEADING 'Admin. Option?' ENTMAP off +COLUMN default_role FORMAT a40 HEADING 'Default Role?' ENTMAP off + +SELECT + '' || grantee || '' grantee + , '
    ' || granted_role || '
    ' granted_role + , '
    ' || admin_option || '
    ' admin_option + , '
    ' || default_role || '
    ' default_role +FROM + dba_role_privs +WHERE + granted_role = 'DBA' +ORDER BY + grantee + , granted_role; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - ROLES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Roles


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN role FORMAT a70 HEAD 'Role Name' ENTMAP off +COLUMN grantee FORMAT a30 HEAD 'Grantee' ENTMAP off +COLUMN admin_option FORMAT a40 HEAD 'Admin Option?' ENTMAP off +COLUMN default_role FORMAT a40 HEAD 'Default Role?' ENTMAP off + +BREAK ON role + +SELECT + '' || b.role || '' role + , a.grantee grantee + , '
    ' || NVL(a.admin_option, '
    ') || '
    ' admin_option + , '
    ' || NVL(a.default_role, '
    ') || '
    ' default_role +FROM + dba_role_privs a + , dba_roles b +WHERE + granted_role(+) = b.role +ORDER BY + b.role + , a.grantee; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DEFAULT PASSWORDS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Default Passwords


    + +prompt User(s) with default password + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username HEADING 'Username' ENTMAP off +COLUMN account_status FORMAT a75 HEADING 'Account Status' ENTMAP off + +SELECT + '' || username || '' username + , DECODE( account_status + , 'OPEN' + , '
    ' || account_status || '
    ' + , '
    ' || account_status || '
    ') account_status +FROM dba_users +WHERE password IN ( + 'E066D214D5421CCC' -- dbsnmp + , '24ABAB8B06281B4C' -- ctxsys + , '72979A94BAD2AF80' -- mdsys + , 'C252E8FA117AF049' -- odm + , 'A7A32CD03D3CE8D5' -- odm_mtr + , '88A2B2C183431F00' -- ordplugins + , '7EFA02EC7EA6B86F' -- ordsys + , '4A3BA55E08595C81' -- outln + , 'F894844C34402B67' -- scott + , '3F9FBD883D787341' -- wk_proxy + , '79DF7A1BD138CF11' -- wk_sys + , '7C9BA362F8314299' -- wmsys + , '88D8364765FCE6AF' -- xdb + , 'F9DA8977092B7B81' -- tracesvr + , '9300C0977D7DC75E' -- oas_public + , 'A97282CE3D94E29E' -- websys + , 'AC9700FD3F1410EB' -- lbacsys + , 'E7B5D92911C831E1' -- rman + , 'AC98877DE1297365' -- perfstat + , 'D4C5016086B2DC6A' -- sys + , 'D4DF7931AB130E37') -- system +ORDER BY username; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DB LINKS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt DB Links


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN db_link FORMAT a75 HEADING 'DB Link Name' ENTMAP off +COLUMN username HEADING 'Username' ENTMAP off +COLUMN host HEADING 'Host' ENTMAP off +COLUMN created FORMAT a75 HEADING 'Created' ENTMAP off + +BREAK ON owner + +SELECT + '' || owner || '' owner + , db_link + , username + , host + , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created +FROM dba_db_links +ORDER BY owner, db_link; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< OBJECTS >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECT SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Object Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a60 HEADING 'Owner' ENTMAP off +COLUMN object_type FORMAT a25 HEADING 'Object Type' ENTMAP off +COLUMN obj_count FORMAT 999,999,999,999 HEADING 'Object Count' ENTMAP off + +BREAK ON report ON owner SKIP 2 +-- compute sum label "" of obj_count on owner +-- compute sum label 'Grand Total: ' of obj_count on report +COMPUTE sum LABEL 'Total: ' OF obj_count ON report + +SELECT + '' || owner || '' owner + , object_type object_type + , count(*) obj_count +FROM + dba_objects +GROUP BY + owner + , object_type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - SEGMENT SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Segment Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a50 HEADING 'Owner' ENTMAP off +COLUMN segment_type FORMAT a25 HEADING 'Segment Type' ENTMAP off +COLUMN seg_count FORMAT 999,999,999,999 HEADING 'Segment Count' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in Bytes)' ENTMAP off + +BREAK ON report ON owner SKIP 2 +-- COMPUTE sum LABEL "" OF seg_count bytes ON owner +COMPUTE sum LABEL 'Total: ' OF seg_count bytes ON report + +SELECT + '' || owner || '' owner + , segment_type segment_type + , count(*) seg_count + , sum(bytes) bytes +FROM + dba_segments +GROUP BY + owner + , segment_type; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 200 SEGMENTS (BY SIZE) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 200 Segments (by size)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN partition_name HEADING 'Partition Name' ENTMAP off +COLUMN segment_type HEADING 'Segment Type' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999,999 HEADING 'Extents' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF bytes extents ON report + +SELECT + a.owner + , a.segment_name + , a.partition_name + , a.segment_type + , a.tablespace_name + , a.bytes + , a.extents +FROM + (select + b.owner + , b.segment_name + , b.partition_name + , b.segment_type + , b.tablespace_name + , b.bytes + , b.extents + from + dba_segments b + order by + b.bytes desc + ) a +WHERE + rownum < 200; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TOP 200 SEGMENTS (BY EXTENTS) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Top 200 Segments (by number of extents)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN partition_name HEADING 'Partition Name' ENTMAP off +COLUMN segment_type HEADING 'Segment Type' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999,999 HEADING 'Extents' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off + +BREAK ON report +COMPUTE sum LABEL 'Total: ' OF extents bytes ON report + +SELECT + a.owner + , a.segment_name + , a.partition_name + , a.segment_type + , a.tablespace_name + , a.extents + , a.bytes +FROM + (select + b.owner + , b.segment_name + , b.partition_name + , b.segment_type + , b.tablespace_name + , b.bytes + , b.extents + from + dba_segments b + order by + b.extents desc + ) a +WHERE + rownum < 200; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DIRECTORIES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Directories


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN directory_name HEADING 'Directory Name' ENTMAP off +COLUMN directory_path HEADING 'Directory Path' ENTMAP off + +SELECT + owner + , directory_name + , '' || directory_path || '' directory_path +FROM + dba_directories +ORDER BY + owner + , directory_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - LIBRARIES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Libraries


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN library_name HEADING 'Library Name' ENTMAP off +COLUMN file_spec HEADING 'File Spec' ENTMAP off +COLUMN dynamic FORMAT a40 HEADING 'Dynamic?' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Status' ENTMAP off + +SELECT + owner + , library_name + , file_spec + , '
    ' || dynamic || '
    ' dynamic + , DECODE( status + , 'VALID' + , '
    ' || status || '
    ' + , '
    ' || status || '
    ' ) status +FROM + dba_libraries +ORDER BY + owner + , library_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TYPES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Types


    + +prompt Excluding the SYS, SYSTEM, and XDB schemas + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP off +COLUMN typecode FORMAT a75 HEADING 'Type Code' ENTMAP off +COLUMN attributes FORMAT a75 HEADING 'Num. Attributes' ENTMAP off +COLUMN methods FORMAT a75 HEADING 'Num. Methods' ENTMAP off +COLUMN predefined FORMAT a75 HEADING 'Predefined?' ENTMAP off +COLUMN incomplete FORMAT a75 HEADING 'Incomplete?' ENTMAP off +COLUMN final FORMAT a75 HEADING 'Final?' ENTMAP off +COLUMN instantiable FORMAT a75 HEADING 'Instantiable?' ENTMAP off +COLUMN supertype_owner FORMAT a75 HEADING 'Super Owner' ENTMAP off +COLUMN supertype_name FORMAT a75 HEADING 'Super Name' ENTMAP off +COLUMN local_attributes FORMAT a75 HEADING 'Local Attributes' ENTMAP off +COLUMN local_methods FORMAT a75 HEADING 'Local Methods' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || t.owner || '
    ' owner + , '
    ' || t.type_name || '
    ' type_name + , '
    ' || t.typecode || '
    ' typecode + , '
    ' || TO_CHAR(t.attributes, '999,999') || '
    ' attributes + , '
    ' || TO_CHAR(t.methods, '999,999') || '
    ' methods + , '
    ' || t.predefined || '
    ' predefined + , '
    ' || t.incomplete || '
    ' incomplete + , '
    ' || t.final || '
    ' final + , '
    ' || t.instantiable || '
    ' instantiable + , '
    ' || NVL(t.supertype_owner, '
    ') || '
    ' supertype_owner + , '
    ' || NVL(t.supertype_name, '
    ') || '
    ' supertype_name + , '
    ' || NVL(TO_CHAR(t.local_attributes, '999,999'), '
    ') || '
    ' local_attributes + , '
    ' || NVL(TO_CHAR(t.local_methods, '999,999'), '
    ') || '
    ' local_methods +FROM + dba_types t +WHERE + t.owner NOT IN ('SYS', 'SYSTEM', 'XDB') +ORDER BY + t.owner + , t.type_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TYPE ATTRIBUTES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Type Attributes


    + +prompt Excluding the SYS, SYSTEM, and XDB schemas + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP off +COLUMN typecode FORMAT a75 HEADING 'Type Code' ENTMAP off +COLUMN attribute_name FORMAT a75 HEADING 'Attribute Name' ENTMAP off +COLUMN attribute_datatype FORMAT a75 HEADING 'Attribute Data Type' ENTMAP off +COLUMN inherited FORMAT a75 HEADING 'Inherited?' ENTMAP off + +BREAK ON report ON owner ON type_name ON typecode + +SELECT + '
    ' || t.owner || '
    ' owner + , '
    ' || t.type_name || '
    ' type_name + , '
    ' || t.typecode || '
    ' typecode + , '
    ' || a.attr_name || '
    ' attribute_name + , (CASE + WHEN (a.length IS NOT NULL) + THEN a.attr_type_name || '(' || a.length || ')' + WHEN (a.attr_type_name='NUMBER' AND (a.precision IS NOT NULL AND a.scale IS NOT NULL)) + THEN a.attr_type_name || '(' || a.precision || ',' || a.scale || ')' + WHEN (a.attr_type_name='NUMBER' AND (a.precision IS NOT NULL AND a.scale IS NULL)) + THEN a.attr_type_name || '(' || a.precision || ')' + ELSE + a.attr_type_name + END) attribute_datatype + , '
    ' || a.inherited || '
    ' inherited +FROM + dba_types t + , dba_type_attrs a +WHERE + t.owner = a.owner + AND t.type_name = a.type_name + AND t.owner NOT IN ('SYS', 'SYSTEM', 'XDB') +ORDER BY + t.owner + , t.type_name + , t.typecode + , a.attr_no; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TYPE METHODS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Type Methods


    + +prompt Excluding the SYS, SYSTEM, and XDB schemas + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP off +COLUMN typecode FORMAT a75 HEADING 'Type Code' ENTMAP off +COLUMN method_name FORMAT a75 HEADING 'Method Name' ENTMAP off +COLUMN method_type FORMAT a75 HEADING 'Method Type' ENTMAP off +COLUMN num_parameters FORMAT a75 HEADING 'Num. Parameters' ENTMAP off +COLUMN results FORMAT a75 HEADING 'Results' ENTMAP off +COLUMN final FORMAT a75 HEADING 'Final?' ENTMAP off +COLUMN instantiable FORMAT a75 HEADING 'Instantiable?' ENTMAP off +COLUMN overriding FORMAT a75 HEADING 'Overriding?' ENTMAP off +COLUMN inherited FORMAT a75 HEADING 'Inherited?' ENTMAP off + +BREAK ON report ON owner ON type_name ON typecode + +SELECT + '
    ' || t.owner || '
    ' owner + , '
    ' || t.type_name || '
    ' type_name + , '
    ' || t.typecode || '
    ' typecode + , '
    ' || m.method_name || '
    ' method_name + , '
    ' || m.method_type || '
    ' method_type + , '
    ' || TO_CHAR(m.parameters, '999,999') || '
    ' num_parameters + , '
    ' || TO_CHAR(m.results, '999,999') || '
    ' results + , '
    ' || m.final || '
    ' final + , '
    ' || m.instantiable || '
    ' instantiable + , '
    ' || m.overriding || '
    ' overriding + , '
    ' || m.inherited || '
    ' inherited +FROM + dba_types t + , dba_type_methods m +WHERE + t.owner = m.owner + AND t.type_name = m.type_name + AND t.owner NOT IN ('SYS', 'SYSTEM', 'XDB') +ORDER BY + t.owner + , t.type_name + , t.typecode + , m.method_no; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - COLLECTIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Collections


    +prompt Excluding the SYS, SYSTEM, and XDB schemas + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN type_name FORMAT a75 HEADING 'Type Name' ENTMAP off +COLUMN coll_type FORMAT a75 HEADING 'Collection Type' ENTMAP off +COLUMN upper_bound FORMAT a75 HEADING 'VARRAY Limit' ENTMAP off +COLUMN elem_type_owner FORMAT a75 HEADING 'Element Type Owner' ENTMAP off +COLUMN elem_datatype FORMAT a75 HEADING 'Element Data Type' ENTMAP off +COLUMN character_set_name FORMAT a75 HEADING 'Character Set' ENTMAP off +COLUMN elem_storage FORMAT a75 HEADING 'Element Storage' ENTMAP off +COLUMN nulls_stored FORMAT a75 HEADING 'Nulls Stored?' ENTMAP off + +BREAK ON report ON owner ON type_name + +SELECT + '
    ' || c.owner || '
    ' owner + , '
    ' || c.type_name || '
    ' type_name + , '
    ' || c.coll_type || '
    ' coll_type + , '
    ' || NVL(TO_CHAR(c.upper_bound, '9,999,999,999'), '
    ') || '
    ' upper_bound + , '
    ' || NVL(c.elem_type_owner, '
    ') || '
    ' elem_type_owner + , (CASE + WHEN (c.length IS NOT NULL) + THEN c.elem_type_name || '(' || c.length || ')' + WHEN (c.elem_type_name='NUMBER' AND (c.precision IS NOT NULL AND c.scale IS NOT NULL)) + THEN c.elem_type_name || '(' || c.precision || ',' || c.scale || ')' + WHEN (c.elem_type_name='NUMBER' AND (c.precision IS NOT NULL AND c.scale IS NULL)) + THEN c.elem_type_name || '(' || c.precision || ')' + ELSE + c.elem_type_name + END) elem_datatype + , '
    ' || NVL(c.character_set_name, '
    ') || '
    ' character_set_name + , '
    ' || NVL(c.elem_storage, '
    ') || '
    ' elem_storage + , '
    ' || c.nulls_stored || '
    ' nulls_stored +FROM + dba_coll_types c +WHERE + c.owner NOT IN ('SYS', 'SYSTEM', 'XDB') +ORDER BY + c.owner + , c.type_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - LOB SEGMENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt LOB Segments


    + +prompt Excluding the SYS, SYSTEM, and XDB schemas + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN table_name FORMAT a75 HEADING 'Table Name' ENTMAP off +COLUMN column_name FORMAT a75 HEADING 'Column Name' ENTMAP off +COLUMN segment_name FORMAT a125 HEADING 'LOB Segment Name' ENTMAP off +COLUMN tablespace_name FORMAT a75 HEADING 'Tablespace Name' ENTMAP off +COLUMN lob_segment_bytes FORMAT a75 HEADING 'Segment Size' ENTMAP off +COLUMN index_name FORMAT a125 HEADING 'LOB Index Name' ENTMAP off +COLUMN in_row FORMAT a75 HEADING 'In Row?' ENTMAP off + +BREAK ON report ON owner ON table_name + +SELECT + '
    ' || l.owner || '
    ' owner + , '
    ' || l.table_name || '
    ' table_name + , '
    ' || l.column_name || '
    ' column_name + , '
    ' || l.segment_name || '
    ' segment_name + , '
    ' || s.tablespace_name || '
    ' tablespace_name + , '
    ' || TO_CHAR(s.bytes, '999,999,999,999,999') || '
    ' lob_segment_bytes + , '
    ' || l.index_name || '
    ' index_name + , '
    ' || l.in_row || '
    ' in_row +FROM + dba_lobs l + , dba_segments s +WHERE + l.owner = s.owner + AND l.segment_name = s.segment_name + AND l.owner NOT IN ('SYS', 'SYSTEM', 'XDB') +ORDER BY + l.owner + , l.table_name + , l.column_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS UNABLE TO EXTEND - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects Unable to Extend


    + +prompt Segments that cannot extend because of MAXEXTENTS or not enough space + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN tablespace_name HEADING 'Tablespace Name' ENTMAP off +COLUMN segment_name HEADING 'Segment Name' ENTMAP off +COLUMN segment_type HEADING 'Segment Type' ENTMAP off +COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next Extent' ENTMAP off +COLUMN max FORMAT 999,999,999,999,999 HEADING 'Max. Piece Size' ENTMAP off +COLUMN sum FORMAT 999,999,999,999,999 HEADING 'Sum of Bytes' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Num. of Extents' ENTMAP off +COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max Extents' ENTMAP off + +SELECT + ds.owner owner + , ds.tablespace_name tablespace_name + , ds.segment_name segment_name + , ds.segment_type segment_type + , ds.next_extent next_extent + , NVL(dfs.max, 0) max + , NVL(dfs.sum, 0) sum + , ds.extents extents + , ds.max_extents max_extents +FROM + dba_segments ds + , (select + max(bytes) max + , sum(bytes) sum + , tablespace_name + from + dba_free_space + group by + tablespace_name + ) dfs +WHERE + (ds.next_extent > nvl(dfs.max, 0) + OR + ds.extents >= ds.max_extents) + AND ds.tablespace_name = dfs.tablespace_name (+) + AND ds.owner NOT IN ('SYS','SYSTEM') +ORDER BY + ds.owner + , ds.tablespace_name + , ds.segment_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS WHICH ARE NEARING MAXEXTENTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects Which Are Nearing MAXEXTENTS


    + +prompt Segments where number of EXTENTS is less than 1/2 of MAXEXTENTS + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN tablespace_name FORMAT a30 HEADING 'Tablespace name' ENTMAP off +COLUMN segment_name FORMAT a30 HEADING 'Segment Name' ENTMAP off +COLUMN segment_type FORMAT a20 HEADING 'Segment Type' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Size (in bytes)' ENTMAP off +COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next Extent Size' ENTMAP off +COLUMN pct_increase HEADING '% Increase' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Num. of Extents' ENTMAP off +COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max Extents' ENTMAP off +COLUMN pct_util FORMAT a35 HEADING '% Utilized' ENTMAP off + +SELECT + owner + , tablespace_name + , segment_name + , segment_type + , bytes + , next_extent + , pct_increase + , extents + , max_extents + , '
    ' || ROUND((extents/max_extents)*100, 2) || '%
    ' pct_util +FROM + dba_segments +WHERE + extents > max_extents/2 + AND max_extents != 0 +ORDER BY + (extents/max_extents) DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - INVALID OBJECTS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Invalid Objects


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a65 HEADING 'Owner' ENTMAP off +COLUMN object_name FORMAT a30 HEADING 'Object Name' ENTMAP off +COLUMN object_type FORMAT a20 HEADING 'Object Type' ENTMAP off +COLUMN status FORMAT a75 HEADING 'Status' ENTMAP off + +BREAK ON report +COMPUTE count LABEL 'Grand Total: ' OF object_name ON report + +SELECT + owner + , object_name + , object_type + , DECODE( status + , 'VALID' + , '
    ' || status || '
    ' + , '
    ' || status || '
    ' ) status +FROM dba_objects +WHERE status <> 'VALID' +ORDER BY owner, object_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - PROCEDURAL OBJECT ERRORS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Procedural Object Errors


    + +prompt All records from DBA_ERRORS + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN type FORMAT a15 HEAD 'Object Type' ENTMAP off +COLUMN owner FORMAT a17 HEAD 'Schema' ENTMAP off +COLUMN name FORMAT a30 HEAD 'Object Name' ENTMAP off +COLUMN sequence FORMAT 999,999 HEAD 'Sequence' ENTMAP off +COLUMN line FORMAT 999,999 HEAD 'Line' ENTMAP off +COLUMN position FORMAT 999,999 HEAD 'Position' ENTMAP off +COLUMN text HEAD 'Text' ENTMAP off + +SELECT + type + , owner + , name + , sequence + , line + , position + , text +FROM + dba_errors +ORDER BY + 1 + , 2 + , 3; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS WITHOUT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects Without Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a50 HEAD 'Owner' ENTMAP off +COLUMN object_type FORMAT a20 HEAD 'Object Type' ENTMAP off +COLUMN object_name HEAD 'Object Name' ENTMAP off +COLUMN partition_name FORMAT a35 HEAD 'Partition Name' ENTMAP off + +BREAK ON report +COMPUTE count LABEL 'Total: ' OF object_name ON report + +SELECT + owner owner + , 'Table' object_type + , table_name object_name + , NULL partition_name +FROM + sys.dba_tables +WHERE + last_analyzed IS NULL + AND owner NOT IN ('SYS','SYSTEM') + AND partitioned = 'NO' +UNION +SELECT + owner owner + , 'Index' object_type + , index_name object_name + , NULL partition_name +FROM + sys.dba_indexes +WHERE + last_analyzed IS NULL + AND owner NOT IN ('SYS','SYSTEM') + AND partitioned = 'NO' +UNION +SELECT + table_owner owner + , 'Table Partition' object_type + , table_name object_name + , partition_name partition_name +FROM + sys.dba_tab_partitions +WHERE + last_analyzed IS NULL + AND table_owner NOT IN ('SYS','SYSTEM') +UNION +SELECT + index_owner owner + , 'Index Partition' object_type + , index_name object_name + , partition_name partition_name +FROM + sys.dba_ind_partitions +WHERE + last_analyzed IS NULL + AND index_owner NOT IN ('SYS','SYSTEM') +ORDER BY + 1 + , 2 + , 3; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - TABLES SUFFERING FROM ROW CHAINING/MIGRATION - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Tables Suffering From Row Chaining/Migration


    + +prompt NOTE: Tables must have statistics gathered + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN table_name HEADING 'Table Name' ENTMAP off +COLUMN partition_name HEADING 'Partition Name' ENTMAP off +COLUMN num_rows FORMAT 999,999,999,999,999 HEADING 'Total Rows' ENTMAP off +COLUMN pct_chained_rows FORMAT a65 HEADING '% Chained Rows' ENTMAP off +COLUMN avg_row_length FORMAT 999,999,999,999,999 HEADING 'Avg Row Length' ENTMAP off + +SELECT + owner owner + , table_name table_name + , '' partition_name + , num_rows num_rows + , '
    ' || ROUND((chain_cnt/num_rows)*100, 2) || '%
    ' pct_chained_rows + , avg_row_len avg_row_length +FROM + (select + owner + , table_name + , chain_cnt + , num_rows + , avg_row_len + from + sys.dba_tables + where + chain_cnt is not null + and num_rows is not null + and chain_cnt > 0 + and num_rows > 0 + and owner != 'SYS') +UNION ALL +SELECT + table_owner owner + , table_name table_name + , partition_name partition_name + , num_rows num_rows + , '
    ' || ROUND((chain_cnt/num_rows)*100, 2) || '%
    ' pct_chained_rows + , avg_row_len avg_row_length +FROM + (select + table_owner + , table_name + , partition_name + , chain_cnt + , num_rows + , avg_row_len + from + sys.dba_tab_partitions + where + chain_cnt is not null + and num_rows is not null + and chain_cnt > 0 + and num_rows > 0 + and table_owner != 'SYS') b +WHERE + (chain_cnt/num_rows)*100 > 10; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - USERS WITH DEFAULT TABLESPACE - (SYSTEM) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Users With Default Tablespace - (SYSTEM)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN default_tablespace FORMAT a125 HEADING 'Default Tablespace' ENTMAP off +COLUMN temporary_tablespace FORMAT a125 HEADING 'Temporary Tablespace' ENTMAP off +COLUMN created FORMAT a75 HEADING 'Created' ENTMAP off +COLUMN account_status FORMAT a75 HEADING 'Account Status' ENTMAP off + +SELECT + '' || username || '' username + , '
    ' || default_tablespace || '
    ' default_tablespace + , '
    ' || temporary_tablespace || '
    ' temporary_tablespace + , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created + , DECODE( account_status + , 'OPEN' + , '
    ' || account_status || '
    ' + , '
    ' || account_status || '
    ') account_status +FROM + dba_users +WHERE + default_tablespace = 'SYSTEM' +ORDER BY + username; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - Users With Default Temporary Tablespace - (SYSTEM) - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Users With Default Temporary Tablespace - (SYSTEM)


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN username FORMAT a75 HEADING 'Username' ENTMAP off +COLUMN default_tablespace FORMAT a125 HEADING 'Default Tablespace' ENTMAP off +COLUMN temporary_tablespace FORMAT a125 HEADING 'Temporary Tablespace' ENTMAP off +COLUMN created FORMAT a75 HEADING 'Created' ENTMAP off +COLUMN account_status FORMAT a75 HEADING 'Account Status' ENTMAP off + +SELECT + '' || username || '' username + , '
    ' || default_tablespace || '
    ' default_tablespace + , '
    ' || temporary_tablespace || '
    ' temporary_tablespace + , '
    ' || TO_CHAR(created, 'mm/dd/yyyy HH24:MI:SS') || '
    ' created + , DECODE( account_status + , 'OPEN' + , '
    ' || account_status || '
    ' + , '
    ' || account_status || '
    ') account_status +FROM + dba_users +WHERE + temporary_tablespace = 'SYSTEM' +ORDER BY + username; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - OBJECTS IN THE SYSTEM TABLESPACE - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Objects in the SYSTEM Tablespace


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN segment_name FORMAT a125 HEADING 'Segment Name' ENTMAP off +COLUMN segment_type FORMAT a75 HEADING 'Type' ENTMAP off +COLUMN tablespace_name FORMAT a125 HEADING 'Tablespace' ENTMAP off +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'Bytes|Alloc' ENTMAP off +COLUMN extents FORMAT 999,999,999,999,999 HEADING 'Extents' ENTMAP off +COLUMN max_extents FORMAT 999,999,999,999,999 HEADING 'Max|Ext' ENTMAP off +COLUMN initial_extent FORMAT 999,999,999,999,999 HEADING 'Initial|Ext' ENTMAP off +COLUMN next_extent FORMAT 999,999,999,999,999 HEADING 'Next|Ext' ENTMAP off +COLUMN pct_increase FORMAT 999,999,999,999,999 HEADING 'Pct|Inc' ENTMAP off + +BREAK ON report +COMPUTE count LABEL 'Total Count: ' OF segment_name ON report +COMPUTE sum LABEL 'Total Bytes: ' OF bytes ON report + +SELECT + owner + , segment_name + , segment_type + , tablespace_name + , bytes + , extents + , initial_extent + , next_extent + , pct_increase +FROM + dba_segments +WHERE + owner NOT IN ('SYS','SYSTEM') + AND tablespace_name = 'SYSTEM' +ORDER BY + owner + , segment_name + , extents DESC; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< ONLINE ANALYTICAL PROCESSING - (OLAP) >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - DIMENSIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dimensions


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN dimension_name FORMAT a75 HEADING 'Dimension Name' ENTMAP off +COLUMN invalid FORMAT a75 HEADING 'Invalid?' ENTMAP off +COLUMN compile_state FORMAT a75 HEADING 'Compile State' ENTMAP off +COLUMN revision HEADING 'Revision' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || dd.owner || '
    ' owner + , dd.dimension_name dimension_name + , '
    ' || dd.invalid || '
    ' invalid + , DECODE( dd.compile_state + , 'VALID' + , '
    ' || dd.compile_state || '
    ' + , '
    ' || dd.compile_state || '
    ' ) compile_state + , '
    ' || dd.revision || '
    ' revision +FROM + dba_dimensions dd +ORDER BY + dd.owner + , dd.dimension_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DIMENSION LEVELS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dimension Levels


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN dimension_name FORMAT a75 HEADING 'Dimension Name' ENTMAP off +COLUMN level_name FORMAT a75 HEADING 'Level Name' ENTMAP off +COLUMN level_table_name FORMAT a75 HEADING 'Source Table' ENTMAP off +COLUMN column_name FORMAT a75 HEADING 'Column Name(s)' ENTMAP off +COLUMN key_position FORMAT a75 HEADING 'Column Position' ENTMAP off + +BREAK ON owner ON dimension_name ON level_name ON level_table_name + +SELECT + '
    ' || d.owner || '
    ' owner + , d.dimension_name dimension_name + , l.level_name level_name + , l.detailobj_owner || '.' || l.detailobj_name level_table_name + , k.column_name column_name + , '
    ' || TO_CHAR(k.key_position, '999,999') || '
    ' key_position +FROM + dba_dimensions d + , dba_dim_levels l + , dba_dim_level_key k +WHERE + d.owner = l.owner + AND d.dimension_name = l.dimension_name + AND d.owner = k.owner + AND d.dimension_name = k.dimension_name + AND l.level_name = k.level_name +ORDER by + l.owner + , l.dimension_name + , l.level_name + , level_table_name + , k.key_position; + + + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DIMENSION ATTRIBUTES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dimension Attributes


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN dimension_name FORMAT a75 HEADING 'Dimension Name' ENTMAP off +COLUMN level_name FORMAT a75 HEADING 'Level Name' ENTMAP off +COLUMN level_table_name FORMAT a75 HEADING 'Source Table' ENTMAP off +COLUMN column_name FORMAT a75 HEADING 'Attribute Source Column' ENTMAP off +COLUMN inferred FORMAT a75 HEADING 'Inferred?' ENTMAP off + +BREAK ON report ON owner ON dimension_name ON level_name + +SELECT + '
    ' || d.owner || '
    ' owner + , d.dimension_name dimension_name + , l.level_name level_name + , l.detailobj_owner || '.' || l.detailobj_name level_table_name + , a.column_name column_name + , '
    ' || a.inferred || '
    ' inferred +FROM + dba_dimensions d + , dba_dim_levels l + , dba_dim_attributes a +WHERE + d.owner = l.owner + AND d.dimension_name = l.dimension_name + AND d.owner = a.owner + AND d.dimension_name = a.dimension_name + AND l.level_name = a.level_name +ORDER by + l.owner + , l.dimension_name + , l.level_name + , level_table_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DIMENSION HIERARCHIES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Dimension Hierarchies


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN dimension_name FORMAT a75 HEADING 'Dimension Name' ENTMAP off +COLUMN hierarchy_name FORMAT a75 HEADING 'Hierarchy Name' ENTMAP off +COLUMN parent_level_name FORMAT a75 HEADING 'Parent Level' ENTMAP off +COLUMN child_level_name FORMAT a75 HEADING 'Child Level' ENTMAP off +COLUMN position FORMAT a75 HEADING 'Position' ENTMAP off +COLUMN join_key_id FORMAT a75 HEADING 'Join Key ID' ENTMAP off + +BREAK ON owner ON dimension_name ON hierarchy_name + +SELECT + '
    ' || d.owner || '
    ' owner + , d.dimension_name dimension_name + , h.hierarchy_name hierarchy_name + , c.parent_level_name parent_level_name + , c.child_level_name child_level_name + , '
    ' || TO_CHAR(c.position, '999,999') || '
    ' position + , '
    ' || NVL(c.join_key_id,'
    ') || '
    ' join_key_id +FROM + dba_dimensions d + , dba_dim_hierarchies h + , dba_dim_child_of c +WHERE + d.owner = h.owner + AND d.dimension_name = h.dimension_name + AND d.owner = c.owner + AND d.dimension_name = c.dimension_name + AND h.hierarchy_name = c.hierarchy_name +ORDER BY + d.owner + , d.dimension_name + , h.hierarchy_name + , c.position DESC; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - CUBES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Cubes


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN cube_name FORMAT a75 HEADING 'Cube Name' ENTMAP off +COLUMN invalid FORMAT a75 HEADING 'Valid?' ENTMAP off +COLUMN display_name FORMAT a75 HEADING 'Display Name' ENTMAP off +COLUMN description FORMAT a275 HEADING 'Description' ENTMAP off + +BREAK ON report ON owner + +SELECT + '
    ' || c.owner || '
    ' owner + , c.cube_name cube_name + , DECODE( c.invalid + , 'N' + , '
    Yes
    ' + , '
    No
    ' ) invalid + , c.display_name display_name + , REPLACE(REPLACE(c.description, '<', '\<'), '>', '\>') description +FROM + dba_olap_cubes c +ORDER BY + c.owner + , c.cube_name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - MATERIALIZED VIEWS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Materialized Views


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN mview_name FORMAT a75 HEADING 'MView|Name' ENTMAP off +COLUMN master_link FORMAT a75 HEADING 'Master|Link' ENTMAP off +COLUMN updatable FORMAT a75 HEADING 'Updatable?' ENTMAP off +COLUMN update_log FORMAT a75 HEADING 'Update|Log' ENTMAP off +COLUMN rewrite_enabled FORMAT a75 HEADING 'Rewrite|Enabled?' ENTMAP off +COLUMN refresh_mode FORMAT a75 HEADING 'Refresh|Mode' ENTMAP off +COLUMN refresh_method FORMAT a75 HEADING 'Refresh|Method' ENTMAP off +COLUMN build_mode FORMAT a75 HEADING 'Build|Mode' ENTMAP off +COLUMN fast_refreshable FORMAT a75 HEADING 'Fast|Refreshable' ENTMAP off +COLUMN last_refresh_type FORMAT a75 HEADING 'Last Refresh|Type' ENTMAP off +COLUMN last_refresh_date FORMAT a75 HEADING 'Last Refresh|Date' ENTMAP off +COLUMN staleness FORMAT a75 HEADING 'Staleness' ENTMAP off +COLUMN compile_state FORMAT a75 HEADING 'Compile State' ENTMAP off + +BREAK ON owner + +SELECT + '
    ' || m.owner || '
    ' owner + , m.mview_name mview_name + , m.master_link master_link + , '
    ' || NVL(m.updatable,'
    ') || '
    ' updatable + , update_log update_log + , '
    ' || NVL(m.rewrite_enabled,'
    ') || '
    ' rewrite_enabled + , m.refresh_mode refresh_mode + , m.refresh_method refresh_method + , m.build_mode build_mode + , m.fast_refreshable fast_refreshable + , m.last_refresh_type last_refresh_type + , '
    ' || TO_CHAR(m.last_refresh_date, 'mm/dd/yyyy HH24:MI:SS') || '
    ' last_refresh_date + , m.staleness staleness + , DECODE( m.compile_state + , 'VALID' + , '
    ' || m.compile_state || '
    ' + , '
    ' || m.compile_state || '
    ' ) compile_state +FROM + dba_mviews m +ORDER BY + owner + , mview_name +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - MATERIALIZED VIEW LOGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Materialized View Logs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN log_owner FORMAT a75 HEADING 'Log Owner' ENTMAP off +COLUMN log_table FORMAT a75 HEADING 'Log Table' ENTMAP off +COLUMN master FORMAT a75 HEADING 'Master' ENTMAP off +COLUMN log_trigger FORMAT a75 HEADING 'Log Trigger' ENTMAP off +COLUMN rowids FORMAT a75 HEADING 'Rowids?' ENTMAP off +COLUMN primary_key FORMAT a75 HEADING 'Primary Key?' ENTMAP off +COLUMN object_id FORMAT a75 HEADING 'Object ID?' ENTMAP off +COLUMN filter_columns FORMAT a75 HEADING 'Filter Columns?' ENTMAP off +COLUMN sequence FORMAT a75 HEADING 'Sequence?' ENTMAP off +COLUMN include_new_values FORMAT a75 HEADING 'Include New Values?' ENTMAP off + +BREAK ON log_owner + +SELECT + '
    ' || ml.log_owner || '
    ' log_owner + , ml.log_table log_table + , ml.master master + , ml.log_trigger log_trigger + , '
    ' || NVL(ml.rowids,'
    ') || '
    ' rowids + , '
    ' || NVL(ml.primary_key,'
    ') || '
    ' primary_key + , '
    ' || NVL(ml.object_id,'
    ') || '
    ' object_id + , '
    ' || NVL(ml.filter_columns,'
    ') || '
    ' filter_columns + , '
    ' || NVL(ml.sequence,'
    ') || '
    ' sequence + , '
    ' || NVL(ml.include_new_values,'
    ') || '
    ' include_new_values +FROM + dba_mview_logs ml +ORDER BY + ml.log_owner + , ml.master; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< NETWORKING >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - MTS DISPATCHER STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt MTS Dispatcher Statistics


    + +prompt Dispatcher rate + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Name' ENTMAP off +COLUMN avg_loop_rate HEADING 'Avg|Loop|Rate' ENTMAP off +COLUMN avg_event_rate HEADING 'Avg|Event|Rate' ENTMAP off +COLUMN avg_events_per_loop HEADING 'Avg|Events|Per|Loop' ENTMAP off +COLUMN avg_msg_rate HEADING 'Avg|Msg|Rate' ENTMAP off +COLUMN avg_svr_buf_rate HEADING 'Avg|Svr|Buf|Rate' ENTMAP off +COLUMN avg_svr_byte_rate HEADING 'Avg|Svr|Byte|Rate' ENTMAP off +COLUMN avg_svr_byte_per_buf HEADING 'Avg|Svr|Byte|Per|Buf' ENTMAP off +COLUMN avg_clt_buf_rate HEADING 'Avg|Clt|Buf|Rate' ENTMAP off +COLUMN avg_clt_byte_rate HEADING 'Avg|Clt|Byte|Rate' ENTMAP off +COLUMN avg_clt_byte_per_buf HEADING 'Avg|Clt|Byte|Per|Buf' ENTMAP off +COLUMN avg_buf_rate HEADING 'Avg|Buf|Rate' ENTMAP off +COLUMN avg_byte_rate HEADING 'Avg|Byte|Rate' ENTMAP off +COLUMN avg_byte_per_buf HEADING 'Avg|Byte|Per|Buf' ENTMAP off +COLUMN avg_in_connect_rate HEADING 'Avg|In|Connect|Rate' ENTMAP off +COLUMN avg_out_connect_rate HEADING 'Avg|Out|Connect|Rate' ENTMAP off +COLUMN avg_reconnect_rate HEADING 'Avg|Reconnect|Rate' ENTMAP off + +SELECT + name + , avg_loop_rate + , avg_event_rate + , avg_events_per_loop + , avg_msg_rate + , avg_svr_buf_rate + , avg_svr_byte_rate + , avg_svr_byte_per_buf + , avg_clt_buf_rate + , avg_clt_byte_rate + , avg_clt_byte_per_buf + , avg_buf_rate + , avg_byte_rate + , avg_byte_per_buf + , avg_in_connect_rate + , avg_out_connect_rate + , avg_reconnect_rate +FROM + v$dispatcher_rate +ORDER BY + name; + + + +COLUMN protocol HEADING 'Protocol' ENTMAP off +COLUMN total_busy_rate HEADING 'Total Busy Rate' ENTMAP off + +prompt Dispatcher busy rate + +SELECT + a.network protocol + , (SUM(a.BUSY) / (SUM(a.BUSY) + SUM(a.IDLE))) total_busy_rate +FROM + v$dispatcher a +GROUP BY + a.network; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - MTS DISPATCHER RESPONSE QUEUE WAIT STATS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt MTS Dispatcher Response Queue Wait Stats


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN type HEADING 'Type' ENTMAP off +COLUMN avg_wait HEADING 'Avg Wait Time Per Response' ENTMAP off + +SELECT + a.type + , DECODE( SUM(a.totalq), 0, 'NO RESPONSES', SUM(a.wait)/SUM(a.totalq) || ' HUNDREDTHS OF SECONDS') avg_wait +FROM + v$queue a +WHERE + a.type='DISPATCHER' +GROUP BY + a.type; + + +prompt
    [Top]

    + + + +-- +----------------------------------------------------------------------------+ +-- | - MTS SHARED SERVER WAIT STATISTICS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt MTS Shared Server Wait Statistics


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN avg_wait HEADING 'Average Wait Time Per Request' ENTMAP off + +SELECT + DECODE(a.totalq, 0, 'No Requests', a.wait/a.totalq || ' HUNDREDTHS OF SECONDS') avg_wait +FROM + v$queue a +WHERE + a.type='COMMON'; + +prompt
    [Top]

    + + + + + + +-- +============================================================================+ +-- | | +-- | <<<<< REPLICATION >>>>> | +-- | | +-- +============================================================================+ + + +-- +----------------------------------------------------------------------------+ +-- | - REPLICATION SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Replication Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN gname HEADING 'Current Database Name' ENTMAP off +COLUMN admin_request HEADING '# Admin. Requests' ENTMAP off +COLUMN status HEADING '# Admin. Request Errors' ENTMAP off +COLUMN df_txn HEADING '# Def. Trans' ENTMAP off +COLUMN df_error HEADING '# Def. Tran Errors' ENTMAP off +COLUMN complete HEADING '# Complete Trans in Queue' ENTMAP off + +SELECT + g.global_name gname + , d.admin_request admin_request + , e.status status + , dt.tran df_txn + , de.error df_error + , c.complete complete +FROM + (select global_name from global_name) g + , (select count(id) admin_request + from sys.dba_repcatlog) d + , (select count(status) status + from sys.dba_repcatlog + where status = 'ERROR') e + , (select count(*) tran + from deftrandest) dt + , (select count(*) error + from deferror) de + , (select count(a.deferred_tran_id) complete + from deftran a + where a.deferred_tran_id not in + (select b.deferred_tran_id + from deftrandest b) + ) c +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - DEFERRED TRANSACTIONS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Deferred Transactions


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN source HEADING 'Source' ENTMAP off +COLUMN dest HEADING 'Target' ENTMAP off +COLUMN trans HEADING '# Def. Trans' ENTMAP off +COLUMN errors HEADING '# Def. Tran Errors' ENTMAP off + +SELECT + source + , dest + , trans + , errors +FROM + (select + e.origin_tran_db source + , e.destination dest + , 'n/a' trans + , to_char(count(*)) errors + from + deferror e + group by + e.origin_tran_db + , e.destination + union + select + g.global_name source + , d.dblink dest + , to_char(count(*)) trans + , 'n/a' errors + from + (select global_name from global_name) g + , deftran t + , deftrandest d + where + d.deferred_tran_id = t.deferred_tran_id + group by + g.global_name, d.dblink + ); + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - ADMINISTRATIVE REQUEST JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Administrative Request Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN what FORMAT a175 HEADING 'Definition' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + job job + , priv_user priv_user + , what what + , DECODE(broken, 'Y', 'Broken', 'Normal') status + , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , interval +FROM + sys.dba_jobs +WHERE + what LIKE '%dbms_repcat.do_deferred_repcat_admin%' +ORDER BY + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - INITIALIZATION PARAMETERS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt Initialization Parameters


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN pname FORMAT a75 HEADING 'Parameter Name' ENTMAP off +COLUMN value FORMAT a75 HEADING 'Value' ENTMAP off +COLUMN isdefault FORMAT a75 HEADING 'Is Default?' ENTMAP off +COLUMN issys_modifiable FORMAT a75 HEADING 'Is Dynamic?' ENTMAP off + +SELECT + DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(name,0,512) || '' + , '' || SUBSTR(name,0,512) || '' ) pname + , DECODE( isdefault + , 'FALSE' + , '' || SUBSTR(value,0,512) || '' + , SUBSTR(value,0,512) ) value + , DECODE( isdefault + , 'FALSE' + , '
    ' || isdefault || '
    ' + , '
    ' || isdefault || '
    ') isdefault + , DECODE( isdefault + , 'FALSE' + , '
    ' || issys_modifiable || '
    ' + , '
    ' || issys_modifiable || '
    ') issys_modifiable +FROM + v$parameter +WHERE + name IN ( 'compatible' + , 'commit_point_strength' + , 'dblink_encrypt_login' + , 'distributed_lock_timeout' + , 'distributed_recovery_connection_hold_time' + , 'distributed_transactions' + , 'global_names' + , 'job_queue_interval' + , 'job_queue_processes' + , 'max_transaction_branches' + , 'open_links' + , 'open_links_per_instance' + , 'parallel_automatic_tuning' + , 'parallel_max_servers' + , 'parallel_min_servers' + , 'parallel_server_idle_time' + , 'processes' + , 'remote_dependencies_mode' + , 'replication_dependency_tracking' + , 'shared_pool_size' + , 'utl_file_dir' + ) +ORDER BY name; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (SCHEDULE) - PURGE JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Schedule) - Purge Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN status HEADING 'Status' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + j.job job + , j.priv_user priv_user + , decode(broken, 'Y', 'Broken', 'Normal') status + , '
    ' || NVL(TO_CHAR(s.next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , s.interval interval +FROM + sys.defschedule s + , sys.dba_jobs j +WHERE + s.dblink = (select global_name from global_name) + AND s.interval is not null AND s.job = j.job +ORDER BY + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (SCHEDULE) - PUSH JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Schedule) - Push Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN dblink HEADING 'Target' ENTMAP off +COLUMN broken HEADING 'Status' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + j.job job + , j.priv_user priv_user + , s.dblink dblink + , decode(j.broken, 'Y', 'Broken', 'Normal') broken + , '
    ' || NVL(TO_CHAR(s.next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , s.interval interval +FROM + sys.defschedule s + , sys.dba_jobs j +WHERE + s.dblink != (select global_name from global_name) + AND s.interval is not null + AND s.job = j.job +ORDER BY + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (SCHEDULE) - REFRESH JOBS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Schedule) - Refresh Jobs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN job HEADING 'Job ID' ENTMAP off +COLUMN priv_user HEADING 'Privilege Schema' ENTMAP off +COLUMN refresh_group HEADING 'Refresh Group' ENTMAP off +COLUMN broken HEADING 'Status' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Start' ENTMAP off +COLUMN interval HEADING 'Interval' ENTMAP off + +SELECT + j.job job + , j.priv_user priv_user + , r.rowner || '.' || r.rname refresh_group + , decode(j.broken, 'Y', 'Broken', 'Normal') broken + , '
    ' || NVL(TO_CHAR(j.next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , j.interval interval +FROM + sys.dba_refresh r + , sys.dba_jobs j +WHERE + r.job = j.job +order by + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MULTI-MASTER) - MASTER GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Multi-Master) - Master Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN name HEADING 'Master Group' ENTMAP off +COLUMN num_def_trans HEADING '# Def. Trans' ENTMAP off +COLUMN num_tran_errors HEADING '# Def. Tran Errors' ENTMAP off +COLUMN num_admin_requests HEADING '# Admin. Requests' ENTMAP off +COLUMN num_admin_request_errors HEADING '# Admin. Request Errors' ENTMAP off + +SELECT + g.gname name + , NVL(t.cnt1, 0) num_def_trans + , NVL(ie.cnt2, 0) num_tran_errors + , NVL(a.cnt3, 0) num_admin_requests + , NVL(b.cnt4, 0) num_admin_request_errors +FROM + (select distinct gname + from dba_repgroup + where master='Y') g + , (select + rog rog + , count(dt.deferred_tran_id) cnt1 + from (select distinct + ro.gname rog + , d.deferred_tran_id dft + from + dba_repobject ro + , defcall d + , deftrANDest td + where + ro.sname = d.schemaname + AND ro.oname = d.packagename + AND ro.type in ('TABLE', 'PACKAGE', 'SNAPSHOT') + AND td.deferred_tran_id = d.deferred_tran_id + ) t0, deftrANDest dt + where + dt.deferred_tran_id = dft + group by rog + ) t + , (select distinct + ro.gname + , count(distinct e.deferred_tran_id) cnt2 + from + dba_repobject ro + , defcall d + , deferror e + where + ro.sname = d.schemaname + AND ro.oname = d.packagename + AND ro.type in ('TABLE', 'PACKAGE', 'SNAPSHOT') + AND e.deferred_tran_id = d.deferred_tran_id + AND e.callno = d.callno + group by ro.gname + ) ie + , (select gname, count(*) cnt3 + from dba_repcatlog + group by gname + ) a + , (select gname, count(*) cnt4 + from dba_repcatlog + where status = 'ERROR' + group BY gname + ) b +WHERE + g.gname = ie.gname (+) + AND g.gname = t.rog (+) + AND g.gname = a.gname (+) + AND g.gname = b.gname (+) +ORDER BY + g.gname; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MULTI-MASTER) - MASTER GROUPS AND SITES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Multi-Master) - Master Groups and Sites


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN master_group HEADING 'Master Group' ENTMAP off +COLUMN sites HEADING 'Sites' ENTMAP off +COLUMN master_definition_site HEADING 'Master Definition Site' ENTMAP off + +SELECT + gname master_group + , dblink sites + , DECODE(masterdef, 'Y', 'YES', 'N', 'NO') master_definition_site +FROM + sys.dba_repsites +WHERE + master = 'Y' + AND gname NOT IN ( + SELECT gname from sys.dba_repsites + WHERE snapmaster = 'Y' + ) +ORDER BY + gname; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MASTER SITE SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Master Site Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN mgroup HEADING '# of Master Groups' ENTMAP off +COLUMN mvgroup HEADING '# of Registered MV Groups' ENTMAP off +COLUMN mv HEADING '# of Registered MVs' ENTMAP off +COLUMN mvlog HEADING '# of MV Logs' ENTMAP off +COLUMN template HEADING '# of Templates' ENTMAP off + +SELECT + a.mgroup mgroup + , b.mvgroup mvgroup + , c.mv mv + , d.mvlog mvlog + , e.template template +FROM + (select count(g.gname) mgroup + from sys.dba_repgroup g, sys.dba_repsites s + where g.master = 'Y' + and s.master = 'Y' + and g.gname = s.gname + and s.my_dblink = 'Y') a + , (select count(*) mvGROUP + from sys.dba_registered_snapshot_groups) b + , (select count(*) mv + from sys.dba_registered_snapshots) c + , (select count(*) mvlog + from sys.dba_snapshot_logs) d + , (select count(*) template + from sys.dba_repcat_refresh_templates) e +/ + + + +COLUMN log_table HEADING 'Log Table' ENTMAP off +COLUMN log_owner HEADING 'Log Owner' ENTMAP off +COLUMN master HEADING 'Master' ENTMAP off +COLUMN rowids FORMAT a10 HEADING 'Row ID' ENTMAP off +COLUMN primary_key FORMAT a13 HEADING 'Primary Key' ENTMAP off +COLUMN filter_columns FORMAT a15 HEADING 'Filter Columns' ENTMAP off + +SELECT distinct + log_table + , log_owner + , master + , rowids + , primary_key + , filter_columns +FROM + sys.dba_snapshot_logs +ORDER BY + 1 +/ + + + +COLUMN ref_temp_name HEADING 'Refresh Template Name' ENTMAP off +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN public_template HEADING 'Public' ENTMAP off +COLUMN instantiated HEADING '# of Instantiated Sites' ENTMAP off +COLUMN template_comment HEADING 'Comment' ENTMAP off + +SELECT distinct + rt.refresh_template_name ref_temp_name + , owner owner + , decode(public_template, 'Y', 'YES', 'NO') public_template + , rs.instantiated instantiated + , rt.template_comment template_comment +FROM + sys.dba_repcat_refresh_templates rt + , (SELECT y.refresh_template_name, count(x.status) instantiated + FROM sys.dba_repcat_template_sites x, sys.dba_repcat_refresh_templates y + WHERE x.refresh_template_name(+) = y.refresh_template_name + GROUP BY y.refresh_template_name) rs +WHERE + rt.refresh_template_name(+) = rs.refresh_template_name +ORDER BY + 1 +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MASTER SITE LOGS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Master Site Logs


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN log_table HEADING 'Log Table' ENTMAP off +COLUMN log_owner HEADING 'Log Owner' ENTMAP off +COLUMN master HEADING 'Master' ENTMAP off +COLUMN rowids FORMAT a10 HEADING 'Row ID' ENTMAP off +COLUMN primary_key FORMAT a13 HEADING 'Primary Key' ENTMAP off +COLUMN filter_columns FORMAT a15 HEADING 'Filter Columns' ENTMAP off + +SELECT distinct + log_table + , log_owner + , master + , rowids + , primary_key + , filter_columns +FROM + sys.dba_snapshot_logs +ORDER BY + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MASTER SITE TEMPLATES - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Master Site Templates


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN refresh_template_name HEADING 'Refresh Template Name' ENTMAP off +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN public_template HEADING 'Public' ENTMAP off +COLUMN instantiated HEADING '# of Instantiated Sites' ENTMAP off +COLUMN template_comment HEADING 'Comment' ENTMAP off + +SELECT distinct + rt.refresh_template_name refresh_template_name + , owner owner + , decode(public_template, 'Y', 'YES', 'NO') public_template + , rs.instantiated instantiated + , rt.template_comment template_comment +FROM + sys.dba_repcat_refresh_templates rt + , ( SELECT y.refresh_template_name, count(x.status) instantiated + FROM sys.dba_repcat_template_sites x, sys.dba_repcat_refresh_templates y + WHERE x.refresh_template_name(+) = y.refresh_template_name + GROUP BY y.refresh_template_name + ) rs +WHERE + rt.refresh_template_name(+) = rs.refresh_template_name +ORDER BY + 1; + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - SUMMARY - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Summary


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN mvgroup HEADING '# of Materialized View Groups' ENTMAP off +COLUMN mv HEADING '# of Materialized Views' ENTMAP off +COLUMN rgroup HEADING '# of Refresh Groups' ENTMAP off + +SELECT + a.mvgroup mvgroup + , b.mv mv + , c.rgroup rgroup +FROM + ( select count(s.gname) mvgroup + from sys.dba_repsites s + where s.snapmaster = 'Y') a + , ( select count(*) mv + from sys.dba_snapshots) b + , ( select count(*) rgroup + from sys.dba_refresh) c +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN gname HEADING 'Name' ENTMAP off +COLUMN dblink HEADING 'Master' ENTMAP off +COLUMN propagation HEADING 'Propagation' ENTMAP off +COLUMN remark HEADING 'Remark' ENTMAP off + +SELECT + s.gname gname + , s.dblink dblink + , decode(s.prop_updates, 0, 'Async', 'Sync') propagation + , g.schema_comment remark +FROM + sys.dba_repsites s + , sys.dba_repgroup g +WHERE + s.gname = g.gname + and s.snapmaster = 'Y' +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - MATERIALIZED VIEWS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Materialized Views


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner HEADING 'Owner' ENTMAP off +COLUMN name HEADING 'Name' ENTMAP off +COLUMN master_owner HEADING 'Master Owner' ENTMAP off +COLUMN master_table HEADING 'Master Table' ENTMAP off +COLUMN master_link HEADING 'Master Link' ENTMAP off +COLUMN type HEADING 'Type' ENTMAP off +COLUMN updatable FORMAT a11 HEADING 'Updatable?' ENTMAP off +COLUMN can_use_log FORMAT a13 HEADING 'Can Use Log?' ENTMAP off +COLUMN last_refresh FORMAT a75 HEADING 'Last Refresh' ENTMAP off + +SELECT + s.owner owner + , s.name name + , s.master_owner master_owner + , s.master master_table + , s.master_link master_link + , nls_initcap(s.type) type + , '
    ' || DECODE(s.updatable, 'YES', 'YES', 'NO') || '
    ' updatable + , '
    ' || DECODE(s.can_use_log,'YES', 'YES', 'NO') || '
    ' can_use_log + , '
    ' || NVL(TO_CHAR(m.last_refresh_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' last_refresh +FROM + sys.dba_snapshots s + , sys.dba_mviews m +WHERE + s.name = m.mview_name + AND s.owner = m.owner +ORDER BY + 1 + , 2 +/ + +prompt
    [Top]

    + + + + +-- +----------------------------------------------------------------------------+ +-- | - (MATERIALIZED VIEW) - REFRESH GROUPS - | +-- +----------------------------------------------------------------------------+ + +prompt +prompt (Materialized View) - Site Refresh Groups


    + +CLEAR COLUMNS BREAKS COMPUTES + +COLUMN owner FORMAT a75 HEADING 'Owner' ENTMAP off +COLUMN name FORMAT a75 HEADING 'Name' ENTMAP off +COLUMN broken FORMAT a75 HEADING 'Broken?' ENTMAP off +COLUMN next_date FORMAT a75 HEADING 'Next Date' ENTMAP off +COLUMN interval FORMAT a75 HEADING 'Interval' ENTMAP off + +SELECT + '
    ' || rowner || '
    ' owner + , '
    ' || rname || '
    ' name + , '
    ' || broken || '
    ' broken + , '
    ' || NVL(TO_CHAR(next_date, 'mm/dd/yyyy HH24:MI:SS'), '
    ') || '
    ' next_date + , interval interval +FROM + sys.dba_refresh +ORDER BY + 1 + , 2 +/ + +prompt
    [Top]

    + + + + + + + + +-- +----------------------------------------------------------------------------+ +-- | - END OF REPORT - | +-- +----------------------------------------------------------------------------+ + +SPOOL OFF + +SET MARKUP HTML OFF + +SET TERMOUT ON + +prompt +prompt Output written to: &FileName._&_dbname._&_spool_time..html + +EXIT; diff --git a/idev/dba_table_info.sql b/idev/dba_table_info.sql new file mode 100644 index 0000000..84431b1 --- /dev/null +++ b/idev/dba_table_info.sql @@ -0,0 +1,356 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_table_info.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Prompt the user for a schema and and table name then query all | +-- | metadata about the table. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Table Information | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT schema CHAR PROMPT 'Enter table owner : ' +ACCEPT table_name CHAR PROMPT 'Enter table name : ' + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET LONG 9000 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | TABLE INFORMATION | +PROMPT +------------------------------------------------------------------------+ + +COLUMN owner FORMAT a20 HEADING "Owner" +COLUMN table_name FORMAT a30 HEADING "Table Name" +COLUMN tablespace_name FORMAT a30 HEADING "Tablespace" +COLUMN last_analyzed FORMAT a23 HEADING "Last Analyzed" +COLUMN num_rows FORMAT 9,999,999,999,999 HEADING "# of Rows" + +SELECT + owner + , table_name + , tablespace_name + , TO_CHAR(last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed + , num_rows +FROM + dba_tables +WHERE + owner = UPPER('&schema') + AND table_name = UPPER('&table_name') +/ + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | OBJECT INFORMATION | +PROMPT +------------------------------------------------------------------------+ + +COLUMN object_id HEADING "Object ID" +COLUMN data_object_id HEADING "Data Object ID" +COLUMN created FORMAT A23 HEADING "Created" +COLUMN last_ddl_time FORMAT A23 HEADING "Last DDL" +COLUMN status HEADING "Status" + +SELECT + object_id + , data_object_id + , TO_CHAR(created, 'DD-MON-YYYY HH24:MI:SS') created + , TO_CHAR(last_ddl_time, 'DD-MON-YYYY HH24:MI:SS') last_ddl_time + , status +FROM + dba_objects +WHERE + owner = UPPER('&schema') + AND object_name = UPPER('&table_name') + AND object_type = 'TABLE' +/ + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | SEGMENT INFORMATION | +PROMPT +------------------------------------------------------------------------+ + +COLUMN segment_name FORMAT a30 HEADING "Segment Name" +COLUMN partition_name FORMAT a30 HEADING "Partition Name" +COLUMN segment_type FORMAT a16 HEADING "Segment Type" +COLUMN tablespace_name FORMAT a30 HEADING "Tablespace" +COLUMN num_rows FORMAT 9,999,999,999,999 HEADING "Num Rows" +COLUMN bytes FORMAT 9,999,999,999,999 HEADING "Bytes" +COLUMN last_analyzed FORMAT a23 HEADING "Last Analyzed" + +SELECT + seg.segment_name segment_name + , null partition_name + , seg.segment_type segment_type + , seg.tablespace_name tablespace_name + , tab.num_rows num_rows + , seg.bytes bytes + , TO_CHAR(tab.last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed +from + dba_segments seg + , dba_tables tab +WHERE + seg.owner = UPPER('&schema') + AND seg.segment_name = UPPER('&table_name') + AND seg.segment_name = tab.table_name + AND seg.owner = tab.owner + AND seg.segment_type = 'TABLE' +UNION ALL +SELECT + seg.segment_name segment_name + , seg.partition_name partition_name + , seg.segment_type segment_type + , seg.tablespace_name tablespace_name + , part.num_rows num_rows + , seg.bytes bytes + , TO_CHAR(part.last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed +FROM + dba_segments seg + , dba_tab_partitions part +WHERE + part.table_owner = UPPER('&schema') + AND part.table_name = UPPER('&table_name') + AND part.partition_name = seg.partition_name + AND seg.segment_type = 'TABLE PARTITION' +ORDER BY + segment_name + , partition_name +/ + + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | COLUMNS | +PROMPT +------------------------------------------------------------------------+ + +COLUMN column_name FORMAT a30 HEADING "Column Name" +COLUMN data_type FORMAT a25 HEADING "Data Type" +COLUMN nullable FORMAT a13 HEADing "Null?" + +SELECT + column_name + , DECODE(nullable, 'Y', ' ', 'NOT NULL') nullable + , DECODE(data_type + , 'RAW', data_type || '(' || data_length || ')' + , 'CHAR', data_type || '(' || data_length || ')' + , 'VARCHAR', data_type || '(' || data_length || ')' + , 'VARCHAR2', data_type || '(' || data_length || ')' + , 'NUMBER', NVL2( data_precision + , DECODE( data_scale + , 0 + , data_type || '(' || data_precision || ')' + , data_type || '(' || data_precision || ',' || data_scale || ')' + ) + , data_type) + , data_type + ) data_type +FROM + dba_tab_columns +WHERE + owner = UPPER('&schema') + AND table_name = UPPER('&table_name') +ORDER BY + column_id +/ + + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | INDEXES | +PROMPT +------------------------------------------------------------------------+ + +COLUMN index_name FORMAT a40 HEADING "Index Name" +COLUMN column_name FORMAT a30 HEADING "Column Name" +COLUMN column_length HEADING "Column Length" + +BREAK ON index_name SKIP 1 + +SELECT + index_owner || '.' || index_name index_name + , column_name + , column_length +FROM + dba_ind_columns +WHERE + table_owner = UPPER('&schema') + AND table_name = UPPER('&table_name') +ORDER BY + index_name + , column_position +/ + + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | CONSTRAINTS | +PROMPT +------------------------------------------------------------------------+ + +COLUMN constraint_name FORMAT a30 HEADING "Constraint Name" +COLUMN constraint_type FORMAT a13 HEADING "Constraint|Type" +COLUMN search_condition FORMAT a30 HEADING "Search Condition" +COLUMN r_constraint_name FORMAT a30 HEADING "R / Constraint Name" +COLUMN delete_rule FORMAT a12 HEADING "Delete Rule" +COLUMN status HEADING "Status" + +BREAK ON constraint_name ON constraint_type + +SELECT + a.constraint_name + , DECODE(a.constraint_type + , 'P', 'Primary Key' + , 'C', 'Check' + , 'R', 'Referential' + , 'V', 'View Check' + , 'U', 'Unique' + , a.constraint_type + ) constraint_type + , b.column_name + , a.search_condition + , NVL2(a.r_owner, a.r_owner || '.' || a.r_constraint_name, null) r_constraint_name + , a.delete_rule + , a.status +FROM + dba_constraints a + , dba_cons_columns b +WHERE + a.owner = UPPER('&schema') + AND a.table_name = UPPER('&table_name') + AND a.constraint_name = b.constraint_name + AND b.owner = UPPER('&schema') + AND b.table_name = UPPER('&table_name') +ORDER BY + a.constraint_name + , b.position +/ + + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | PARTITIONS (TABLE) | +PROMPT +------------------------------------------------------------------------+ + +COLUMN partition_name HEADING "Partition Name" +COLUMN column_name FORMAT a30 HEADING "Column Name" +COLUMN tablespace_name FORMAT a30 HEADING "Tablespace" +COLUMN composite FORMAT a9 HEADING "Composite" +COLUMN subpartition_count HEADING "Sub. Part.|Count" +COLUMN logging FORMAT a7 HEADING "Logging" +COLUMN high_value FORMAT a13 HEADING "High Value" TRUNC + +BREAK ON partition_name + +SELECT + a.partition_name + , b.column_name + , a.tablespace_name + , a.composite + , a.subpartition_count + , a.logging +FROM + dba_tab_partitions a + , dba_part_key_columns b +WHERE + a.table_owner = UPPER('&schema') + AND a.table_name = UPPER('&table_name') + AND RTRIM(b.object_type) = 'TABLE' + AND b.owner = a.table_owner + AND b.name = a.table_name +ORDER BY + a.partition_position + , b.column_position +/ + + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | PARTITIONS (INDEX) | +PROMPT +------------------------------------------------------------------------+ + +COLUMN index_name FORMAT a30 HEADING "Index Name" +COLUMN partitioning_type FORMAT a9 HEADING "Type" +COLUMN partition_count FORMAT 99999 HEADING "Part.|Count" +COLUMN partitioning_key_count FORMAT 99999 HEADING "Part.|Key Count" +COLUMN locality FORMAT a8 HEADING "Locality" +COLUMN alignment FORMAT a12 HEADING "Alignment" + +SELECT + a.owner || '.' || a.index_name index_name + , b.column_name + , a.partitioning_type + , a.partition_count + , a.partitioning_key_count + , a.locality + , a.alignment +FROM + dba_part_indexes a + , dba_part_key_columns b +WHERE + a.owner = UPPER('&schema') + AND a.table_name = UPPER('&table_name') + AND RTRIM(b.object_type) = 'INDEX' + AND b.owner = a.owner + AND b.name = a.index_name +ORDER BY + a.index_name + , b.column_position +/ + + + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | TRIGGERS | +PROMPT +------------------------------------------------------------------------+ + +COLUMN trigger_name FORMAT a30 HEADING "Trigger Name" +COLUMN trigger_type FORMAT a18 HEADING "Type" +COLUMN triggering_event FORMAT a9 HEADING "Trig.|Event" +COLUMN referencing_names FORMAT a65 HEADING "Referencing Names" newline +COLUMN when_clause FORMAT a65 HEADING "When Clause" newline +COLUMN trigger_body FORMAT a65 HEADING "Trigger Body" newline + +SELECT + owner || '.' || trigger_name trigger_name + , trigger_type + , triggering_event + , status + , referencing_names + , when_clause + , trigger_body +FROM + dba_triggers +WHERE + table_owner = UPPER('&schema') + AND table_name = UPPER('&table_name') +ORDER BY + trigger_name +/ diff --git a/idev/dba_tables_all.sql b/idev/dba_tables_all.sql new file mode 100644 index 0000000..7d65971 --- /dev/null +++ b/idev/dba_tables_all.sql @@ -0,0 +1,73 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_tables_all.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Query all tables (and owners) within the database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : All Database Tables | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT OFF +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT a20 HEADING "Owner" +COLUMN table_name FORMAT a30 HEADING "Table Name" +COLUMN tablespace_name FORMAT a30 HEADING "Tablespace" +COLUMN last_analyzed FORMAT a20 HEADING "Last Analyzed" +COLUMN num_rows FORMAT 999,999,999,999 HEADING "# of Rows" + +DEFINE spool_file=database_tables.lst + +SPOOL &spool_file + +SELECT + owner + , table_name + , tablespace_name + , TO_CHAR(last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed + , num_rows +FROM + dba_tables +WHERE + owner NOT IN ('SYS', 'SYSTEM') +ORDER BY + owner + , table_name +/ + +SPOOL OFF + +SET TERMOUT ON + +PROMPT +PROMPT Report written to &spool_file +PROMPT \ No newline at end of file diff --git a/idev/dba_tables_current_user.sql b/idev/dba_tables_current_user.sql new file mode 100644 index 0000000..f49158f --- /dev/null +++ b/idev/dba_tables_current_user.sql @@ -0,0 +1,57 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_tables_current_user.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Query all tables owned by the currently connected user. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +COLUMN current_user NEW_VALUE current_user NOPRINT; +SELECT rpad(instance_name, 17) current_instance, rpad(user, 13) current_user FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Tables owned by ¤t_user | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN table_name FORMAT a30 HEADING "Table Name" +COLUMN tablespace_name FORMAT a30 HEADING "Tablespace" +COLUMN last_analyzed FORMAT a20 HEADING "Last Analyzed" +COLUMN num_rows FORMAT 999,999,999,990 HEADING "# of Rows" + +SELECT + table_name + , tablespace_name + , TO_CHAR(last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed + , num_rows +FROM + user_tables +ORDER BY + table_name +/ diff --git a/idev/dba_tables_query_user.sql b/idev/dba_tables_query_user.sql new file mode 100644 index 0000000..b8daa69 --- /dev/null +++ b/idev/dba_tables_query_user.sql @@ -0,0 +1,64 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_tables_query_user.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Prompt the user for a schema and then query all tables within | +-- | that schema. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Query Tables for Specified Schema | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT schema CHAR PROMPT 'Enter schema : ' + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT a20 HEADING "Owner" +COLUMN table_name FORMAT a30 HEADING "Table Name" +COLUMN tablespace_name FORMAT a30 HEADING "Tablespace" +COLUMN last_analyzed FORMAT a20 HEADING "Last Analyzed" +COLUMN num_rows FORMAT 999,999,999,999 HEADING "# of Rows" + +SELECT + owner + , table_name + , tablespace_name + , TO_CHAR(last_analyzed, 'DD-MON-YYYY HH24:MI:SS') last_analyzed + , num_rows +FROM dba_tables +WHERE owner = UPPER('&schema') +ORDER BY + owner + , table_name +/ + diff --git a/idev/dba_tablespace_mapper.sql b/idev/dba_tablespace_mapper.sql new file mode 100644 index 0000000..5040037 --- /dev/null +++ b/idev/dba_tablespace_mapper.sql @@ -0,0 +1,97 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_tablespace_mapper.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Report on all USED and FREE SPACE within a tablespace. This is | +-- | a good script to report on tablespace fragmentation. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +COLUMN current_instance_nt NEW_VALUE current_instance_nt NOPRINT; +SELECT rpad(instance_name, 17) current_instance, instance_name current_instance_nt FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Tablespace Mapper | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +PROMPT +ACCEPT tbs_in CHAR PROMPT 'Enter tablespace name : ' + +SET TERMOUT OFF; +COLUMN tbs NEW_VALUE tbs NOPRINT; +SELECT rpad(upper('&tbs_in'), 30) tbs +FROM dual; +SET TERMOUT ON; + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT OFF +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +DEFINE fileName=tablespace_mapper + +SPOOL &FileName._¤t_instance_nt._&tbs_in..txt + +COLUMN owner FORMAT a20 HEADING "Owner" +COLUMN object FORMAT a30 HEADING "Object" +COLUMN file_id HEADING "File ID" +COLUMN block_id HEADING "Block ID" +COLUMN bytes FORMAT 999,999,999,999 HEADING "Bytes" + +SELECT + 'FREE SPACE' owner + , ' ' object + , file_id + , block_id + , bytes +FROM + dba_free_space +WHERE + tablespace_name = UPPER('&tbs_in') +UNION +SELECT + SUBSTR(owner, 1, 20) + , SUBSTR(segment_name, 1, 32) + , file_id + , block_id + , bytes +FROM + dba_extents +WHERE + tablespace_name = UPPER('&tbs_in') +ORDER BY + 3 + , 4 +/ + +SPOOL off + +SET FEEDBACK 6 +SET HEADING ON +SET TERMOUT ON + +PROMPT +PROMPT Report written to &FileName._¤t_instance_nt._&tbs_in..txt +PROMPT diff --git a/idev/dba_tablespace_to_owner.sql b/idev/dba_tablespace_to_owner.sql new file mode 100644 index 0000000..b0290c6 --- /dev/null +++ b/idev/dba_tablespace_to_owner.sql @@ -0,0 +1,70 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_tablespace_to_owner.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provide a summary report of tablespace to owner for all | +-- | segments in the database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Tablespace to Owner | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN tablespace_name FORMAT a30 HEADING "Tablespace Name" +COLUMN owner FORMAT a20 HEADING "Owner" +COLUMN segment_type FORMAT a20 HEADING "Segment Type" +COLUMN bytes FORMAT 9,999,999,999,999 HEADING "Size (in Bytes)" +COLUMN seg_count FORMAT 9,999,999,999 HEADING "Segment Count" + +BREAK ON report ON tablespace_name SKIP 2 + +COMPUTE sum LABEL "" OF seg_count bytes ON tablespace_name +COMPUTE sum LABEL "Grand Total: " OF seg_count bytes ON report + +SELECT + tablespace_name + , owner + , segment_type + , sum(bytes) bytes + , count(*) seg_count +FROM + dba_segments +GROUP BY + tablespace_name + , owner + , segment_type +ORDER BY + tablespace_name + , owner + , segment_type +/ diff --git a/idev/dba_tablespaces.sql b/idev/dba_tablespaces.sql new file mode 100644 index 0000000..5a42511 --- /dev/null +++ b/idev/dba_tablespaces.sql @@ -0,0 +1,119 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_tablespaces.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all tablespaces including size and usage. This | +-- | script was designed to work with Oracle9i or higher. It will | +-- | include all tablespaces using any type of extent management as | +-- | well as true TEMPORARY tablespaces. (i.e. use of "tempfiles") | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Tablespaces | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN status FORMAT a9 HEADING 'Status' +COLUMN name FORMAT a30 HEADING 'Tablespace Name' +COLUMN type FORMAT a15 HEADING 'TS Type' +COLUMN extent_mgt FORMAT a10 HEADING 'Ext. Mgt.' +COLUMN segment_mgt FORMAT a10 HEADING 'Seg. Mgt.' +COLUMN ts_size FORMAT 9,999,999,999,999 HEADING 'Tablespace Size' +COLUMN used FORMAT 9,999,999,999,999 HEADING 'Used (in bytes)' +COLUMN free FORMAT 9,999,999,999,999 HEADING 'Free (in bytes)' +COLUMN pct_used FORMAT 999 HEADING 'Pct. Used' + +BREAK ON report + +COMPUTE sum OF ts_size ON report +COMPUTE sum OF used ON report +COMPUTE sum OF free ON report +COMPUTE avg OF pct_used ON report + +SELECT + d.status status + , d.tablespace_name name + , d.contents type + , d.extent_management extent_mgt + , d.segment_space_management segment_mgt + , NVL(a.bytes, 0) ts_size + , NVL(a.bytes - NVL(f.bytes, 0), 0) used + -- , NVL(f.bytes, 0) free + , NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0) pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_data_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes) bytes + from dba_free_space + group by tablespace_name + ) f +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = f.tablespace_name(+) + AND NOT ( + d.extent_management like 'LOCAL' + AND + d.contents like 'TEMPORARY' + ) +UNION ALL +SELECT + d.status status + , d.tablespace_name name + , d.contents type + , d.extent_management extent_mgt + , d.segment_space_management segment_mgt + , NVL(a.bytes, 0) ts_size + , NVL(t.bytes, 0) used + -- , NVL(a.bytes - NVL(t.bytes,0), 0) free + , NVL(t.bytes / a.bytes * 100, 0) pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_temp_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes_cached) bytes + from v$temp_extent_pool + group by tablespace_name + ) t +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = t.tablespace_name(+) + AND d.extent_management like 'LOCAL' + AND d.contents like 'TEMPORARY' +ORDER BY + 2 +/ + diff --git a/idev/dba_tablespaces_7.sql b/idev/dba_tablespaces_7.sql new file mode 100644 index 0000000..a32096b --- /dev/null +++ b/idev/dba_tablespaces_7.sql @@ -0,0 +1,80 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_tablespaces_7.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all tablespaces including size and usage. This | +-- | script was designed to work with Oracle7 and Oracle8. This | +-- | script can be run against higher database versions (i.e. | +-- | Oracle8i) but will not return information about true TEMPORARY | +-- | tablespaces. (i.e. use of "tempfiles") | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Tablespaces | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN tablespace FORMAT a30 HEADING 'Tablespace Name' +COLUMN dummy NOPRINT +COLUMN bytes FORMAT 9,999,999,999,999 HEADING 'Tablespace Size' +COLUMN used FORMAT 9,999,999,999,999 HEADING 'Used (in bytes)' +COLUMN free FORMAT 9,999,999,999,999 HEADING 'Free (in bytes)' +COLUMN pct_used FORMAT 999 HEADING 'Pct. Used' + +BREAK ON report + +COMPUTE avg OF pct_used ON report +COMPUTE sum OF bytes ON report +COMPUTE sum OF used ON report +COMPUTE sum OF free ON report + +SELECT + b.tablespace_name tablespace + , a.tablespace_name dummy + , SUM(b.bytes)/COUNT(DISTINCT a.file_id||'.'||a.block_id ) bytes + , NVL(SUM(b.bytes)/COUNT(DISTINCT a.file_id||'.'||a.block_id ) - + SUM(a.bytes)/COUNT(DISTINCT b.file_id ), + SUM(b.bytes)/COUNT(DISTINCT a.file_id||'.'||a.block_id )) used + , NVL(SUM(a.bytes)/COUNT(DISTINCT b.file_id ),0) free + , NVL(TRUNC(CEIL(100 * ( (SUM(b.bytes)/COUNT(DISTINCT a.file_id||'.'||a.block_id )) - + (SUM(a.bytes)/COUNT(DISTINCT b.file_id ) )) / + (SUM(b.bytes)/COUNT(DISTINCT a.file_id||'.'||a.block_id )))),100) pct_used +FROM + sys.dba_free_space a + , sys.dba_data_files b +WHERE + a.tablespace_name (+) = b.tablespace_name +GROUP BY + a.tablespace_name, b.tablespace_name +/ + + diff --git a/idev/dba_tablespaces_8i.sql b/idev/dba_tablespaces_8i.sql new file mode 100644 index 0000000..93f3436 --- /dev/null +++ b/idev/dba_tablespaces_8i.sql @@ -0,0 +1,114 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_tablespaces_8i.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Reports on all tablespaces including size and usage. This | +-- | script was designed to work with Oracle8i or higher. It will | +-- | include all tablespaces using any type of extent management as | +-- | well as true TEMPORARY tablespaces. (i.e. use of "tempfiles") | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Tablespaces | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN status FORMAT a9 HEADING 'Status' +COLUMN name FORMAT a30 HEADING 'Tablespace Name' +COLUMN type FORMAT a15 HEADING 'TS Type' +COLUMN extent_mgt FORMAT a11 HEADING 'Extent Mgt.' +COLUMN ts_size FORMAT 9,999,999,999,999 HEADING 'Tablespace Size' +COLUMN used FORMAT 9,999,999,999,999 HEADING 'Used (in bytes)' +COLUMN free FORMAT 9,999,999,999,999 HEADING 'Free (in bytes)' +COLUMN pct_used FORMAT 999 HEADING 'Pct. Used' + +BREAK ON report + +COMPUTE sum OF ts_size ON report +COMPUTE sum OF used ON report +COMPUTE sum OF free ON report +COMPUTE avg OF pct_used ON report + +SELECT + d.status status + , d.tablespace_name name + , d.contents type + , d.extent_management extent_mgt + , NVL(a.bytes, 0) ts_size + , NVL(a.bytes - NVL(f.bytes, 0), 0) used + , NVL(f.bytes, 0) free + , NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0) pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_data_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes) bytes + from dba_free_space + group by tablespace_name + ) f +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = f.tablespace_name(+) + AND NOT ( + d.extent_management like 'LOCAL' + AND + d.contents like 'TEMPORARY' + ) +UNION ALL +SELECT + d.status status + , d.tablespace_name name + , d.contents type + , d.extent_management extent_mg + , NVL(a.bytes, 0) ts_size + , NVL(t.bytes, 0) used + , NVL(a.bytes - NVL(t.bytes,0), 0) free + , NVL(t.bytes / a.bytes * 100, 0) pct_used +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_temp_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes_cached) bytes + from v$temp_extent_pool + group by tablespace_name + ) t +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = t.tablespace_name(+) + AND d.extent_management like 'LOCAL' + AND d.contents like 'TEMPORARY' +/ + diff --git a/idev/dba_top_segments.sql b/idev/dba_top_segments.sql new file mode 100644 index 0000000..6f56c50 --- /dev/null +++ b/idev/dba_top_segments.sql @@ -0,0 +1,81 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_top_segments.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provides a report on the top segments (in bytes) grouped by | +-- | Segment Type. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Top Segments | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN segment_type FORMAT A20 HEADING 'Segment Type' +COLUMN owner FORMAT A15 HEADING 'Owner' +COLUMN segment_name FORMAT A30 HEADING 'Segment Name' +COLUMN partition_name FORMAT A30 HEADING 'Partition Name' +COLUMN tablespace_name FORMAT A20 HEADING 'Tablespace Name' +COLUMN bytes FORMAT 9,999,999,999,999 HEADING 'Size (in bytes)' +COLUMN extents FORMAT 999,999,999 HEADING 'Extents' + +BREAK ON segment_type SKIP 1 + +COMPUTE sum OF bytes ON segment_type + +SELECT + a.segment_type segment_type + , a.owner owner + , a.segment_name segment_name + , a.partition_name partition_name + , a.tablespace_name tablespace_name + , a.bytes bytes + , a.extents extents +FROM + (select + b.segment_type + , b.owner + , b.segment_name + , b.partition_name + , b.tablespace_name + , b.bytes + , b.extents + from + dba_segments b + order by + b.bytes desc + ) a +WHERE + rownum < 101 +ORDER BY + segment_type, bytes desc, owner, segment_name +/ diff --git a/idev/erp_conc_manager_job_status.sql b/idev/erp_conc_manager_job_status.sql new file mode 100644 index 0000000..7e8cc14 --- /dev/null +++ b/idev/erp_conc_manager_job_status.sql @@ -0,0 +1,76 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : erp_conc_manager_job_status.sql | +-- | CLASS : Oracle Applications | +-- | PURPOSE : Reports on concurrent manager job status. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Concurrent Manager Job Status | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN request_id FORMAT 9999999999 HEADING 'Request|ID'; +COLUMN Req_Date FORMAT a20 HEADING 'Req|Date'; +COLUMN oracle_process_id FORMAT 9999999 HEADING 'PID'; +COLUMN session_id FORMAT 9999999 HEADING 'Session ID'; +COLUMN oracle_id FORMAT 9999999 HEADING 'Oracle ID'; +COLUMN os_process_id FORMAT a10 HEADING 'OS PID'; +COLUMN requested_by FORMAT 9999999 HEADING 'Requested By'; +COLUMN phase_code FORMAT a6 HEADING "Phase|Code" +COLUMN status_code FORMAT a6 HEADING "Status|Code" +COLUMN completion_text FORMAT a35 HEADING 'Text'; +COLUMN user_id FORMAT 9999999 HEADING 'User ID'; +COLUMN user_name FORMAT a18 HEADING 'User|Name'; +COLUMN Req_Date FORMAT a20 HEADING 'Req|Date'; + +SELECT + a.request_id + , to_char(a.REQUEST_DATE,'DD-MON-YYYY HH24:MI:SS') Req_Date + , b.user_name + , a.phase_code + , a.status_code + , c.os_process_id + , a.oracle_id + , a.requested_by + , a.completion_text +FROM + applsys.fnd_concurrent_requests a + , applsys.fnd_user b + , applsys.fnd_concurrent_processes c +WHERE + a.requested_by = b.user_id + AND c.concurrent_process_id = a.controlling_manager + AND a.phase_code in ('R', 'T') +ORDER BY + a.request_id, c.os_process_id +/ diff --git a/idev/erp_conc_manager_job_status2.sql b/idev/erp_conc_manager_job_status2.sql new file mode 100644 index 0000000..35b762a --- /dev/null +++ b/idev/erp_conc_manager_job_status2.sql @@ -0,0 +1,86 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : erp_conc_manager_job_status.sql | +-- | CLASS : Oracle Applications | +-- | PURPOSE : Reports on concurrent manager job status. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Concurrent Manager Job Status | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN start_time FORMAT a20 HEADING "Start|Time" +COLUMN program_name FORMAT a50 HEADING "Program|Name" +COLUMN reqid FORMAT 9999999999 HEADING "Request|ID" +COLUMN tot_mins FORMAT 9999999 HEADING "Total|Run-Time|in Mins" +COLUMN hrs FORMAT 99999 HEADING "Running|Hrs" +COLUMN mins FORMAT 99999 HEADING "Running|Mins" +COLUMN secs FORMAT 99999 HEADING "Running|Secs" +COLUMN user_name FORMAT a18 HEADING "User|Name" +COLUMN oracle_sid FORMAT 99999 HEADING "Oracle|SID" +COLUMN serial# FORMAT 9999999 HEADING "Serial|#" +COLUMN phase FORMAT a5 HEADING "Phase|Code" +COLUMN status FORMAT a6 HEADING "Status|Code" + +SELECT + r.request_id reqid + , TO_CHAR(r.actual_start_date, 'DD-MON-YYYY HH24:MI:SS') start_time + , u.user_name user_name + , r.phase_code phase + , r.status_code status + , FLOOR(((SYSDATE - r.actual_start_date)*24*60*60)/3600) hrs + , FLOOR((((SYSDATE - r.actual_start_date)*24*60*60) - FLOOR(((SYSDATE - r.actual_start_date)*24*60*60)/3600)*3600)/60) mins + , ROUND((((SYSDATE - r.actual_start_date)*24*60*60) - FLOOR(((SYSDATE - r.actual_start_date)*24*60*60)/3600)*3600 - (FLOOR((((SYSDATE - r.actual_start_date)*24*60*60) - FLOOR(((SYSDATE - r.actual_start_date)*24*60*60)/3600)*3600)/60)*60) )) secs + , (SYSDATE - r.actual_start_date)*24*60 tot_mins + , /* p.concurrent_program_id progid,*/ + DECODE( p.user_concurrent_program_name + , 'Request Set Stage', 'RSS - '||r.description + , 'Report Set', 'RS - '||r.description + , p.user_concurrent_program_name ) program_name + , s.sid oracle_sid + , s.serial# +FROM + v$session s + , apps.fnd_user u + , apps.fnd_concurrent_processes pr + , apps.fnd_concurrent_programs_vl p + , apps.fnd_concurrent_requests r +WHERE + s.process = pr.os_process_id + AND pr.concurrent_process_id = r.controlling_manager + AND r.phase_code = 'R' -- and r.status_code = 'R' + AND r.requested_by = u.user_id + AND p.concurrent_program_id = r.concurrent_program_id +ORDER BY + 1 +/ diff --git a/idev/erp_conc_manager_user_query.sql b/idev/erp_conc_manager_user_query.sql new file mode 100644 index 0000000..87ad891 --- /dev/null +++ b/idev/erp_conc_manager_user_query.sql @@ -0,0 +1,73 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : erp_conc_manager_user_query.sql | +-- | CLASS : Oracle Applications | +-- | PURPOSE : Reports on concurrent manager processes. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Concurrent Manager Processes | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN oracle_process_id FORMAT 9999999 HEADING 'PID'; +COLUMN session_id FORMAT 9999999 HEADING 'Session ID'; +COLUMN oracle_id FORMAT 9999999 HEADING 'Oracle ID'; +COLUMN os_process_id FORMAT a10 HEADING 'OS PID'; +COLUMN request_id FORMAT 9999999999 HEADING 'Request ID'; +COLUMN requested_by FORMAT 9999999 HEADING 'Requested By'; +COLUMN status_code FORMAT a6 HEADING 'Status'; +COLUMN completion_text FORMAT a15 HEADING 'Text'; +COLUMN user_id FORMAT 9999999 HEADING 'User ID'; +COLUMN user_name FORMAT a10 HEADING 'User Name'; + +SELECT + c.os_process_id + , a.oracle_id + , a.request_id + , a.requested_by + , b.user_name + , a.phase_code + , a.completion_text +FROM + applsys.fnd_concurrent_requests a + , applsys.fnd_user b + , applsys.fnd_concurrent_processes c +WHERE + a.requested_by = b.user_id + AND c.concurrent_process_id = a.controlling_manager + AND a.phase_code in ('R', 'T') +ORDER BY + c.os_process_id +/ + + diff --git a/idev/example_create_clob.sql b/idev/example_create_clob.sql new file mode 100644 index 0000000..97cce35 --- /dev/null +++ b/idev/example_create_clob.sql @@ -0,0 +1,60 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_clob.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script that demonstrates how to create tables | +-- | containing a CLOB datatype in Oracle8i and higher. One of the | +-- | biggest differences between creating a CLOB in Oracle8 and | +-- | Oracle8i or higher is the use of the INDEX clause within the LOB| +-- | clause declaration. In Oracle8 it is possible to name the LOB | +-- | INDEX and declare a tablespace and storage clause for it. With | +-- | versions Oracle8i and higher, it is still possible to name the | +-- | INDEX LOB SEGMENT using the INDEX clause but these versions of | +-- | Oracle (8i and higher) will simply ignore anything else within | +-- | the INDEX clause (like tablespaces and storage clause.) From | +-- | what I have read Oracle is deprecating the tablespace and | +-- | storage clauses from being used within the INDEX clause. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +DROP TABLE xml_documents +/ + +CREATE TABLE xml_documents ( + docname VARCHAR2(200) + , xmldoc CLOB + , log CLOB + , timestamp DATE +) +LOB (xmldoc) + STORE AS xml_documents_lob ( + TABLESPACE lob_data + STORAGE ( + INITIAL 1m NEXT 1m PCTINCREASE 0 MAXEXTENTS unlimited + ) + INDEX xml_documents_lob_idx + ) +LOB (log) + STORE AS xml_log_lob ( + TABLESPACE lob_data + STORAGE ( + INITIAL 1m NEXT 1m PCTINCREASE 0 MAXEXTENTS unlimited + ) + INDEX xml_log_lob_idx + ) +TABLESPACE users +STORAGE ( + INITIAL 256k + NEXT 256k + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 +) +/ diff --git a/idev/example_create_clob_8.sql b/idev/example_create_clob_8.sql new file mode 100644 index 0000000..b03f00a --- /dev/null +++ b/idev/example_create_clob_8.sql @@ -0,0 +1,74 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_clob_8.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script that demonstrates how to create tables | +-- | containing a CLOB datatype in Oracle8. One of biggest | +-- | differences between creating a CLOB in Oracle8 and Oracle8i or | +-- | higher is the use of the INDEX clause within the LOB clause | +-- | declaration. In Oracle8 it is possible to name the LOB INDEX | +-- | and declare a tablespace and storage clause for it. With | +-- | versions Oracle8i and higher, it is still possible to name the | +-- | INDEX LOB SEGMENT using the INDEX clause but these versions of | +-- | Oracle (8i and higher) will simply ignore anything else within | +-- | the INDEX clause (like tablespaces and storage clause.) From | +-- | what I have read Oracle is deprecating the tablespace and | +-- | storage clauses from being used within the INDEX clause. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +DROP TABLE test_clob CASCADE CONSTRAINTS +/ + +CREATE TABLE test_clob ( + testrunid NUMBER(15) + , startdate DATE + , parameters VARCHAR2(1000) + , testtopology CLOB + , comments VARCHAR2(4000) + , testlog CLOB + , prefix VARCHAR2(100) +) +LOB (testtopology) + STORE AS testtopology_lob ( + TABLESPACE lob_data + STORAGE ( + INITIAL 1m NEXT 1m PCTINCREASE 0 MAXEXTENTS unlimited + ) + INDEX testtopology_lob_idx ( + TABLESPACE lob_indexes + STORAGE ( + INITIAL 256k NEXT 256k PCTINCREASE 0 MAXEXTENTS unlimited + ) + ) + ) +LOB (testlog) + STORE AS testlog_lob ( + TABLESPACE lob_data + STORAGE ( + INITIAL 1m NEXT 1m PCTINCREASE 0 MAXEXTENTS unlimited + ) + INDEX testlog_lob_idx ( + TABLESPACE lob_indexes + STORAGE ( + INITIAL 256k NEXT 256k PCTINCREASE 0 MAXEXTENTS unlimited + ) + ) + ) +TABLESPACE users +STORAGE ( + INITIAL 256k + NEXT 256k + MINEXTENTS 1 + MAXEXTENTS 505 + PCTINCREASE 0 +) +/ + diff --git a/idev/example_create_dimension.sql b/idev/example_create_dimension.sql new file mode 100644 index 0000000..065fe78 --- /dev/null +++ b/idev/example_create_dimension.sql @@ -0,0 +1,34 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_dimension.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script to create a dimension object. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CREATE DIMENSION dim_clothes + LEVEL upc IS retail_tab.upc + LEVEL style IS retail_tab.style + LEVEL class IS retail_tab.class + LEVEL department IS retail_tab.department + LEVEL store IS retail_tab.store + LEVEL region IS retail_tab.region + LEVEL company IS retail_tab.company + HIERARCHY sales_rollup ( + upc CHILD OF + style CHILD OF + class CHILD OF + department CHILD OF + store CHILD OF + region CHILD OF + company) + ATTRIBUTE style DETERMINES (color) + ATTRIBUTE upc DETERMINES (item_size); + diff --git a/idev/example_create_emp_dept_custom.sql b/idev/example_create_emp_dept_custom.sql new file mode 100644 index 0000000..5da99bf --- /dev/null +++ b/idev/example_create_emp_dept_custom.sql @@ -0,0 +1,296 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_emp_dept_custom.sql | +-- | CLASS : Examples | +-- | PURPOSE : Creates several DEMO tables along with creating a PL/SQL | +-- | procedure (fill_emp) for seeding the tables with demo data. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +prompt Connect as the test user. Default SCOTT... +CONNECT scott + +/* + * ------------------------------------------------------------- + * --- CREATE TABLE DEPT --- + * ------------------------------------------------------------- + */ + +DROP TABLE dept CASCADE CONSTRAINTS +/ + +CREATE TABLE dept ( + dept_id NUMBER + , name VARCHAR2(100) + , location VARCHAR2(100) +) +/ + +ALTER TABLE dept + ADD CONSTRAINT dept_pk PRIMARY KEY(dept_id) +/ + +ALTER TABLE dept +MODIFY ( name CONSTRAINT dept_nn1 NOT NULL + , location CONSTRAINT dept_nn2 NOT NULL +) +/ + +/* + * ------------------------------------------------------------- + * --- CREATE TABLE EMP --- + * ------------------------------------------------------------- + */ + +DROP TABLE emp CASCADE CONSTRAINTS +/ + +CREATE TABLE emp ( + emp_id NUMBER + , dept_id NUMBER + , name VARCHAR2(30) + , date_of_birth DATE + , date_of_hire DATE + , monthly_salary NUMBER(15,2) + , position VARCHAR2(100) + , extension NUMBER + , office_location VARCHAR2(100) +) +/ + +ALTER TABLE emp + ADD CONSTRAINT emp_pk PRIMARY KEY(emp_id) +/ + +ALTER TABLE emp +MODIFY ( name CONSTRAINT emp_nn1 NOT NULL + , date_of_birth CONSTRAINT emp_nn2 NOT NULL + , date_of_hire CONSTRAINT emp_nn3 NOT NULL + , monthly_salary CONSTRAINT emp_nn4 NOT NULL + , position CONSTRAINT emp_nn5 NOT NULL +) +/ + +ALTER TABLE emp +ADD CONSTRAINT emp_fk1 FOREIGN KEY (dept_id) + REFERENCES dept(dept_id) +/ + +/* + * ------------------------------------------------------------- + * --- INSERT INTO DEPT --- + * ------------------------------------------------------------- + */ + +INSERT INTO DEPT VALUES (100 , 'ACCOUNTING' , 'BUTLER, PA'); +INSERT INTO DEPT VALUES (101 , 'RESEARCH' , 'DALLAS, TX'); +INSERT INTO DEPT VALUES (102 , 'SALES' , 'CHICAGO, IL'); +INSERT INTO DEPT VALUES (103 , 'OPERATIONS' , 'BOSTON, MA'); +INSERT INTO DEPT VALUES (104 , 'IT' , 'PITTSBURGH, PA'); +INSERT INTO DEPT VALUES (105 , 'ENGINEERING' , 'WEXFORD, PA'); +INSERT INTO DEPT VALUES (106 , 'QA' , 'WEXFORD, PA'); +INSERT INTO DEPT VALUES (107 , 'PROCESSING' , 'NEW YORK, NY'); +INSERT INTO DEPT VALUES (108 , 'CUSTOMER SUPPORT' , 'TRANSFER, PA'); +INSERT INTO DEPT VALUES (109 , 'HQ' , 'WEXFORD, PA'); +INSERT INTO DEPT VALUES (110 , 'PRODUCTION SUPPORT' , 'MONTEREY, CA'); +INSERT INTO DEPT VALUES (111 , 'DOCUMENTATION' , 'WEXFORD, PA'); +INSERT INTO DEPT VALUES (112 , 'HELP DESK' , 'GREENVILLE, PA'); +INSERT INTO DEPT VALUES (113 , 'AFTER HOURS SUPPORT' , 'SAN JOSE, CA'); +INSERT INTO DEPT VALUES (114 , 'APPLICATION SUPPORT' , 'WEXFORD, PA'); +INSERT INTO DEPT VALUES (115 , 'MARKETING' , 'SEASIDE, CA'); +INSERT INTO DEPT VALUES (116 , 'NETWORKING' , 'WEXFORD, PA'); +INSERT INTO DEPT VALUES (117 , 'DIRECTORS OFFICE' , 'WEXFORD, PA'); +INSERT INTO DEPT VALUES (118 , 'ASSISTANTS' , 'WEXFORD, PA'); +INSERT INTO DEPT VALUES (119 , 'COMMUNICATIONS' , 'SEATTLE, WA'); +INSERT INTO DEPT VALUES (120 , 'REGIONAL SUPPORT' , 'PORTLAND, OR'); +COMMIT; + + +/* + * ------------------------------------------------------------- + * --- CREATE PACKAGE (random) --- + * ------------------------------------------------------------- + */ + +CREATE OR REPLACE PACKAGE random IS + + -- Returns random integer between [0, r-1] + FUNCTION rndint(r IN NUMBER) RETURN NUMBER; + + -- Returns random real between [0, 1] + FUNCTION rndflt RETURN NUMBER; + +END; +/ + +CREATE OR REPLACE PACKAGE BODY random IS + + m CONSTANT NUMBER:=100000000; /* initial conditions */ + m1 CONSTANT NUMBER:=10000; /* (for best results) */ + b CONSTANT NUMBER:=31415821; /* */ + a NUMBER; /* seed */ + the_date DATE; /* */ + days NUMBER; /* for generating initial seed */ + secs NUMBER; /* */ + + -- ------------------------ + -- Private utility FUNCTION + -- ------------------------ + FUNCTION mult(p IN NUMBER, q IN NUMBER) RETURN NUMBER IS + p1 NUMBER; + p0 NUMBER; + q1 NUMBER; + q0 NUMBER; + BEGIN + p1:=TRUNC(p/m1); + p0:=MOD(p,m1); + q1:=TRUNC(q/m1); + q0:=MOD(q,m1); + RETURN(MOD((MOD(p0*q1+p1*q0,m1)*m1+p0*q0),m)); + END; + + -- --------------------------------------- + -- Returns random integer between [0, r-1] + -- --------------------------------------- + FUNCTION rndint (r IN NUMBER) RETURN NUMBER IS + BEGIN + -- Generate a random NUMBER, and set it to be the new seed + a:=MOD(mult(a,b)+1,m); + + -- Convert it to integer between [0, r-1] and return it + RETURN(TRUNC((TRUNC(a/m1)*r)/m1)); + END; + + -- ---------------------------------- + -- Returns random real between [0, 1] + -- ---------------------------------- + FUNCTION rndflt RETURN NUMBER IS + BEGIN + -- Generate a random NUMBER, and set it to be the new seed + a:=MOD(mult(a,b)+1,m); + RETURN(a/m); + END; + +BEGIN + -- Generate initial seed "a" based on system date + the_date:=SYSDATE; + days:=TO_NUMBER(TO_CHAR(the_date, 'J')); + secs:=TO_NUMBER(TO_CHAR(the_date, 'SSSSS')); + a:=days*24*3600+secs; +END; +/ + +/* + * ------------------------------------------------------------- + * --- CREATE PROCEDURE (fill_emp) --- + * ------------------------------------------------------------- + */ + +CREATE OR REPLACE PROCEDURE fill_emp ( + num_records IN number) + +IS + + rand NUMBER; + randf NUMBER; + randfe NUMBER; + rand_dept_id NUMBER; + rand_dob NUMBER; + rand_date NUMBER; + rand_salary NUMBER; + + record_count_success NUMBER; + record_count_fail_ic NUMBER; + record_count_fail_other NUMBER; + + max_emp_id NUMBER; + + CURSOR max_emp_csr IS + SELECT MAX(emp_id) + FROM emp; + +BEGIN + + DBMS_OUTPUT.ENABLE; + + OPEN max_emp_csr; + FETCH max_emp_csr INTO max_emp_id; + CLOSE max_emp_csr; + + max_emp_id := NVL(max_emp_id,0) + 1; + + record_count_success := 0; + record_count_fail_ic := 0; + record_count_fail_other := 0; + + FOR loop_index IN max_emp_id .. (max_emp_id + (num_records-1)) + LOOP + + rand := random.rndint(20); + randf := random.rndflt; + randfe := TRUNC( (random.rndflt*10000)); + IF (randfe < 1000) THEN + randfe := randfe * 10; + END IF; + rand_dept_id := (rand + 100); + rand_date := rand * 10; + rand_salary := randf * 10000; + IF (rand_salary < 1000) THEN + rand_salary := rand_salary * 10; + END IF; + + DECLARE + integrity_constraint_e EXCEPTION; + pragma EXCEPTION_INIT (integrity_constraint_e, -02291); + BEGIN + + INSERT INTO emp + VALUES ( loop_index + , rand_dept_id + , 'Name at : ' || (rand_dept_id * 17) + , sysdate - (rand_date * 90) + , sysdate + rand_date + , rand_salary + , 'Position at : ' || (rand_dept_id * 13) + , randfe + , 'Office Location at : ' || (rand_dept_id * 15) + ); + + IF (MOD(loop_index, 1000) = 0) THEN + COMMIT; + -- DBMS_OUTPUT.PUT_LINE('Commit point reached at: ' || loop_index || '.'); + END IF; + + record_count_success := record_count_success + 1; + + EXCEPTION + WHEN integrity_constraint_e THEN + -- DBMS_OUTPUT.PUT_LINE('Integrity constraint for dept_id: ' || rand_dept_id); + record_count_fail_ic := record_count_fail_ic + 1; + WHEN others THEN + -- DBMS_OUTPUT.PUT_LINE('Other failure'); + record_count_fail_other := record_count_fail_other + 1; + END; + + END LOOP; + + COMMIT; + + DBMS_OUTPUT.NEW_LINE; + DBMS_OUTPUT.PUT_LINE('Procedure complete inserting records into emp.'); + DBMS_OUTPUT.PUT_LINE('----------------------------------------------'); + DBMS_OUTPUT.PUT_LINE('Requested records : ' || num_records); + DBMS_OUTPUT.PUT_LINE('Successfully inserted records : ' || record_count_success); + DBMS_OUTPUT.PUT_LINE('Failed records (integrity_constraint) : ' || record_count_fail_ic); + DBMS_OUTPUT.PUT_LINE('Failed records (other) : ' || record_count_fail_other); + +END; +/ + diff --git a/idev/example_create_emp_dept_original.sql b/idev/example_create_emp_dept_original.sql new file mode 100644 index 0000000..cc959f2 --- /dev/null +++ b/idev/example_create_emp_dept_original.sql @@ -0,0 +1,91 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_emp_dept_original.sql | +-- | CLASS : Examples | +-- | PURPOSE : Creates several DEMO tables along with creating a PL/SQL | +-- | procedure (fill_emp) for seeding the tables with demo data. | +-- | This is the original SQL script that is included with the | +-- | Oracle RDBMS. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CONNECT / AS SYSDBA + +DROP PUBLIC SYNONYM PARTS; + +prompt Connect as the test user. Default JHUNTER... +CONNECT JHUNTER + +CREATE TABLE DEPT + (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, + DNAME VARCHAR2(14) , + LOC VARCHAR2(13) ) ; +CREATE TABLE EMP + (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY, + ENAME VARCHAR2(10), + JOB VARCHAR2(9), + MGR NUMBER(4), + HIREDATE DATE, + SAL NUMBER(7,2), + COMM NUMBER(7,2), + DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT); +INSERT INTO DEPT VALUES + (10,'ACCOUNTING','NEW YORK'); +INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS'); +INSERT INTO DEPT VALUES + (30,'SALES','CHICAGO'); +INSERT INTO DEPT VALUES + (40,'OPERATIONS','BOSTON'); +INSERT INTO EMP VALUES +(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20); +INSERT INTO EMP VALUES +(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30); +INSERT INTO EMP VALUES +(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30); +INSERT INTO EMP VALUES +(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20); +INSERT INTO EMP VALUES +(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30); +INSERT INTO EMP VALUES +(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30); +INSERT INTO EMP VALUES +(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10); +INSERT INTO EMP VALUES +(7788,'JHUNTER','ANALYST',7566,to_date('13-JUL-87','dd-mm-rr')-85,3000,NULL,20); +INSERT INTO EMP VALUES +(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10); +INSERT INTO EMP VALUES +(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30); +INSERT INTO EMP VALUES +(7876,'ADAMS','CLERK',7788,to_date('13-JUL-87', 'dd-mm-rr')-51,1100,NULL,20); +INSERT INTO EMP VALUES +(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30); +INSERT INTO EMP VALUES +(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20); +INSERT INTO EMP VALUES +(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10); +CREATE TABLE BONUS + ( + ENAME VARCHAR2(10) , + JOB VARCHAR2(9) , + SAL NUMBER, + COMM NUMBER + ) ; +CREATE TABLE SALGRADE + ( GRADE NUMBER, + LOSAL NUMBER, + HISAL NUMBER ); +INSERT INTO SALGRADE VALUES (1,700,1200); +INSERT INTO SALGRADE VALUES (2,1201,1400); +INSERT INTO SALGRADE VALUES (3,1401,2000); +INSERT INTO SALGRADE VALUES (4,2001,3000); +INSERT INTO SALGRADE VALUES (5,3001,9999); +COMMIT; +rem EXIT diff --git a/idev/example_create_index.sql b/idev/example_create_index.sql new file mode 100644 index 0000000..818cba8 --- /dev/null +++ b/idev/example_create_index.sql @@ -0,0 +1,74 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_index.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script to demonstrate how to create indexes with | +-- | proper naming conventions. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +/* + * ------------------------------- + * UNIQUE INDEX + * ------------------------------- + */ + +CREATE UNIQUE INDEX emp_u1 + ON emp(emp_id) + TABLESPACE indexes + STORAGE ( + INITIAL 256K + NEXT 256K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 + FREELISTS 3 + ) +/ + + +/* + * ------------------------------- + * NON-UNIQUE (default) INDEX + * ------------------------------- + */ + +CREATE INDEX emp_n1 + ON emp(name) + TABLESPACE indexes + STORAGE ( + INITIAL 64K + NEXT 64K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 + FREELISTS 3 + ) +/ + + +/* + * ------------------------------- + * PRIMARY KEY INDEX + * ------------------------------- + */ + +ALTER TABLE emp +ADD CONSTRAINT emp_pk PRIMARY KEY(emp_id) + USING INDEX + TABLESPACE indexes + STORAGE ( + INITIAL 64K + NEXT 64K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 + ) +/ diff --git a/idev/example_create_index_organized_table.sql b/idev/example_create_index_organized_table.sql new file mode 100644 index 0000000..448b56f --- /dev/null +++ b/idev/example_create_index_organized_table.sql @@ -0,0 +1,63 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_index_organized_table.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script that demonstrates how to create an Index | +-- | Organized Table (IOT) object. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +/* + * ------------------------ + * NORMAL IOT + * ------------------------ + */ + +DROP TABLE my_iot +/ + +CREATE TABLE my_iot ( + id NUMBER + , name VARCHAR2(100) + , hiredate DATE + , CONSTRAINT my_iot_pk PRIMARY KEY (id) +) +ORGANIZATION INDEX +OVERFLOW TABLESPACE users +/ + + +/* + * -------------------------------------------- + * CREATE IOT FROM SELECTING FROM ANOTHER TABLE + * -------------------------------------------- + */ + +DROP TABLE my_iot_from_table +/ + +CREATE TABLE my_iot_from_table ( + emp_id + , dept_id + , name + , date_of_birth + , date_of_hire + , monthly_salary + , position + , extension + , office_location + , CONSTRAINT my_iot_from_table_pk PRIMARY KEY (emp_id) +) +ORGANIZATION INDEX +OVERFLOW TABLESPACE users +AS +SELECT * FROM emp +/ + diff --git a/idev/example_create_materialized_view.sql b/idev/example_create_materialized_view.sql new file mode 100644 index 0000000..3ce4d19 --- /dev/null +++ b/idev/example_create_materialized_view.sql @@ -0,0 +1,40 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_materialized_view.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script that demonstrates how to create several | +-- | materialized views. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CREATE MATERIALIZED VIEW flight_fact_mv + BUILD IMMEDIATE + REFRESH COMPLETE ON COMMIT + ENABLE QUERY REWRITE + AS + SELECT + plane_id PLANE_ID + , sum(sale_amount) SUM_SALE_AMOUNT + FROM scott.flight_fact + GROUP BY plane_id +/ + + +CREATE MATERIALIZED VIEW monthly_salary_mv + BUILD IMMEDIATE + REFRESH COMPLETE ON COMMIT + ENABLE QUERY REWRITE + AS + SELECT + b.name DEPT_NAME + , a.monthly_salary AVG_MONTHLY_SALARY + FROM emp a, dept b +/ + diff --git a/idev/example_create_not_null_constraints.sql b/idev/example_create_not_null_constraints.sql new file mode 100644 index 0000000..6c798f5 --- /dev/null +++ b/idev/example_create_not_null_constraints.sql @@ -0,0 +1,25 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_not_null_constraints.sql | +-- | CLASS : Examples | +-- | PURPOSE : It is important when designing tables to name your NOT NULL | +-- | constraints. The following example provides the syntax necessary| +-- | to name your NOT NULL constraints. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + + +ALTER TABLE user_names +MODIFY ( name CONSTRAINT user_names_nn1 NOT NULL + , age CONSTRAINT user_names_nn2 NOT NULL + , update_log_date CONSTRAINT user_names_nn3 NOT NULL +) +/ + diff --git a/idev/example_create_primary_foreign_key.sql b/idev/example_create_primary_foreign_key.sql new file mode 100644 index 0000000..7fa7407 --- /dev/null +++ b/idev/example_create_primary_foreign_key.sql @@ -0,0 +1,61 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_primary_foreign_key.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script that creates a Primary / Foreign key | +-- | relationship between the EMP and DEPT tables. It is advisable to| +-- | create a non-unique index on all foreign keys. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +-- +-----------------------------------------------------------------+ +-- | ADD PRIMARY KEY | +-- +-----------------------------------------------------------------+ + +ALTER TABLE dept +ADD CONSTRAINT dept_pk PRIMARY KEY(dept_id) + USING INDEX + TABLESPACE indexes + STORAGE ( + INITIAL 64K + NEXT 64K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 + ) +/ + + +-- +-----------------------------------------------------------------+ +-- | ADD FOREIGN KEY | +-- +-----------------------------------------------------------------+ + +ALTER TABLE emp +ADD CONSTRAINT emp_fk1 FOREIGN KEY (dept_id) + REFERENCES dept(dept_id) +/ + + +-- +-----------------------------------------------------------------+ +-- | ADD NON-UNIQUE INDEX FOR THE FOREIGN KEY | +-- +-----------------------------------------------------------------+ + +CREATE INDEX emp_fk_n1 + ON emp(dept_id) + TABLESPACE indexes + STORAGE ( + INITIAL 64K + NEXT 64K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 + FREELISTS 3 + ) +/ diff --git a/idev/example_create_profile_password_parameters.sql b/idev/example_create_profile_password_parameters.sql new file mode 100644 index 0000000..a83ba03 --- /dev/null +++ b/idev/example_create_profile_password_parameters.sql @@ -0,0 +1,235 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_profile_password_parameters.sql | +-- | CLASS : Examples | +-- | PURPOSE : The following CREATE FUNCTION and CREATE PROFILE script allow | +-- | the DBA to set better password controls for accounts in the | +-- | Oracle database. This script is based heavily on the default | +-- | script: utlpwdmg.sql | +-- | Note that this profile does not include parameters used to | +-- | limit resources. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CONNECT / as sysdba + +/* + * ------------------------------------------------------------------ + * FIRST CREATE THE PL/SQL PASSWORD VERIFY FUNCTION + * ------------------------------------------------------------------ + */ + +CREATE OR REPLACE FUNCTION verify_function ( + username VARCHAR2 + , password VARCHAR2 + , old_password VARCHAR2 +) RETURN boolean IS + + n BOOLEAN; + m INTEGER; + differ INTEGER; + isdigit BOOLEAN; + ischar BOOLEAN; + ispunct BOOLEAN; + digitarray VARCHAR2(20); + punctarray VARCHAR2(25); + chararray VARCHAR2(52); + +BEGIN + + digitarray:= '0123456789'; + chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + punctarray:='!"#$%&()``*+,-/:;<=>?_'; + + -- --------------------------------------------- + -- CHECK IF THE PASSWORD IS SAME AS THE USERNAME + -- --------------------------------------------- + IF NLS_LOWER(password) = NLS_LOWER(username) + THEN + raise_application_error(-20001, 'Password same as or similar to user'); + END IF; + + -- --------------------------------------------- + -- CHECK FOR THE MINIMUM LENGTH OF THE PASSWORD + -- --------------------------------------------- + IF length(password) < 4 THEN + raise_application_error(-20002, 'Password length less than 4'); + END IF; + + -- --------------------------------------------- + -- CHECK IF THE PASSWORD IS TOO SIMPLE. A + -- DICTIONARY OF WORDS MAY BE MAINTAINED AND A + -- CHECK MAY BE MADE SO AS NOT TO ALLOW THE + -- WORDS THAT ARE TOO SIMPLE FOR THE PASSWORD. + -- --------------------------------------------- + IF NLS_LOWER(password) IN ('welcome', 'database', 'account', 'user', 'password', 'oracle', 'computer', 'abcd') THEN + raise_application_error(-20002, 'Password too simple'); + END IF; + + -- --------------------------------------------- + -- CHECK IF THE PASSWORD CONTAINS AT LEAST ONE + -- LETTER, ONE DIGIT AND ONE PUNCTUATION MARK. + -- --------------------------------------------- + -- 1. Check for the digit + -- --------------------------------------------- + isdigit:=FALSE; + m := length(password); + FOR i IN 1..10 LOOP + FOR j IN 1..m LOOP + IF substr(password,j,1) = substr(digitarray,i,1) THEN + isdigit:=TRUE; + GOTO findchar; + END IF; + END LOOP; + END LOOP; + IF isdigit = FALSE THEN + raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation'); + END IF; + + -- --------------------------------------------- + -- 2. Check for the character + -- --------------------------------------------- + <> + ischar:=FALSE; + FOR i IN 1..length(chararray) LOOP + FOR j IN 1..m LOOP + IF substr(password,j,1) = substr(chararray,i,1) THEN + ischar:=TRUE; + GOTO findpunct; + END IF; + END LOOP; + END LOOP; + IF ischar = FALSE THEN + raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation'); + END IF; + + -- --------------------------------------------- + -- 3. Check for the punctuation + -- --------------------------------------------- + <> + ispunct:=FALSE; + FOR i IN 1..length(punctarray) LOOP + FOR j IN 1..m LOOP + IF substr(password,j,1) = substr(punctarray,i,1) THEN + ispunct:=TRUE; + GOTO endsearch; + END IF; + END LOOP; + END LOOP; + IF ispunct = FALSE THEN + raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation'); + END IF; + + <> + -- --------------------------------------------- + -- CHECK IF THE PASSWORD DIFFERS FROM THE + -- PREVIOUS PASSWORD BY AT LEAST 3 LETTERS + -- --------------------------------------------- + IF old_password = '' THEN + raise_application_error(-20004, 'Old password is null'); + END IF; + + differ := length(old_password) - length(password); + + IF abs(differ) < 3 THEN + IF length(password) < length(old_password) THEN + m := length(password); + ELSE + m := length(old_password); + END IF; + + differ := abs(differ); + + FOR i IN 1..m LOOP + IF substr(password,i,1) != substr(old_password,i,1) THEN + differ := differ + 1; + END IF; + END LOOP; + IF differ < 3 THEN + raise_application_error(-20004, 'Password should differ by at least 3 characters'); + END IF; + END IF; + + -- --------------------------------------------- + -- Everything is fine; return TRUE + -- --------------------------------------------- + RETURN(TRUE); + +END; +/ + + + +/* + ** +-----------------------------------------------------------------------------------+ + ** | CREATE PASSWORD PROFILE: developer_profile | + ** | --------------------------------------------------------------------------------- | + ** | | + ** | => FAILED_LOGIN_ATTEMPTS : Represents the number of failed login attempts that | + ** | can be tried before Oracle locks out an account. | + ** | Note that the user receives an error message: | + ** | "ERROR: ORA-28000": The account is locked" upon | + ** | the locking out of the account due to excessive | + ** | failed connect attempts. | + ** | | + ** | => PASSWORD_GRACE_TIME : This setting is the amount of time a user has to | + ** | change his or her password once the password | + ** | expires (from "password_life_time"). This parameter | + ** | is set by using by using either a number that | + ** | represents days or a number that represents a | + ** | fraction of a day. | + ** | | + ** | => PASSWORD_LIFE_TIME : This setting determines how long a user's password | + ** | is good for. Once the time has passed, the password | + ** | expires and the user cannot sign onto the system. | + ** | To delay the password expiration, use the | + ** | "PASSWORD_GRACE_TIME" parameter (above). | + ** | | + ** | => PASSWORD_LOCK_TIME : Determines how long an account will remain locked | + ** | out if the number of failed attempts, as defined | + ** | by "FAILED_LOGIN_ATTEMPTS", is exceeded. | + ** | | + ** | => PASSWORD_REUSE_MAX : This setting defines the number of times a password | + ** | has to be changed before it can be reused. If this | + ** | parameter is set, the parameter | + ** | "PASSWORD_REUSE_TIME" parameter MUST be set to | + ** | UNLIMITED. | + ** | | + ** | => PASSWORD_REUSE_TIME : This setting defines the number of days before a | + ** | password can be reused. | + ** | | + ** | => PASSWORD_VERIFY_FUNCTION : This setting defines the user-defined PL/SQL | + ** | function that is called to control the complexity | + ** | of the password. | + ** | | + ** | NOTES ON REPRESENTING TIME : | + ** | To express a fraction of a day for setting, use the notation y/z. In this | + ** | format, z is the total of the fractional part of the day you are representing. | + ** | Therefore, if you use hours, z is 24 (24 hours in a day). If you use minutes, | + ** | z is 1440. If you use seconds, z is 86400. | + ** | | + ** | The y part of the fraction is the fractional part of the z quantity you wish to | + ** | represent. For example, if you didn't want to immediately shut a user off when | + ** | his or her password expired - but wanted to give the user six hours to change | + ** | the password - you would use the setting of 1/4 (which is really 6/24, because | + ** | 1/4 of a day is six hours). In another example, if you wanted to use 90 | + ** | minutes, the proper setting would be 1/16 (90/1440 mathematically reduced). | + ** | | + ** +-----------------------------------------------------------------------------------+ +*/ + +CREATE PROFILE DEVELOPER_PROFILE LIMIT +PASSWORD_LIFE_TIME 60 +PASSWORD_GRACE_TIME 10 +PASSWORD_REUSE_TIME 1800 +PASSWORD_REUSE_MAX UNLIMITED +FAILED_LOGIN_ATTEMPTS 3 +PASSWORD_LOCK_TIME 1/1440 +PASSWORD_VERIFY_FUNCTION verify_function; diff --git a/idev/example_create_profile_resource_parameters.sql b/idev/example_create_profile_resource_parameters.sql new file mode 100644 index 0000000..f1cc2e7 --- /dev/null +++ b/idev/example_create_profile_resource_parameters.sql @@ -0,0 +1,224 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_profile_resource_parameters.sql | +-- | CLASS : Examples | +-- | PURPOSE : The following script provides syntax on how to create an Oracle | +-- | profile to be used in limiting resources. The profile in this | +-- | example does not provide parameters related to password | +-- | security. | +-- | | +-- | Oracle Database enforces resource limits in the following ways: | +-- | | +-- | (*) If a user exceeds the CONNECT_TIME or IDLE_TIME session | +-- | resource limit, then the database rolls back the current | +-- | transaction and ends the session. When the user process | +-- | next issues a call, the database returns an error. | +-- | | +-- | (*) If a user attempts to perform an operation that exceeds | +-- | the limit for other session resources, then the database | +-- | aborts the operation, rolls back the current statement, | +-- | and immediately returns an error. The user can then | +-- | commit or roll back the current transaction, and must | +-- | then end the session. | +-- | | +-- | (*) If a user attempts to perform an operation that exceeds | +-- | the limit for a single call, then the database aborts the | +-- | operation, rolls back the current statement, and returns | +-- | an error, leaving the current transaction intact. | +-- | | +-- | NOTES: | +-- | | +-- | (*) You can use fractions of days for all parameters that | +-- | limit time, with days as units. For example, 1 hour is | +-- | 1/24 and 1 minute is 1/1440. None of the resource | +-- | parameters are specified in days! | +-- | | +-- | (*) You can specify resource limits for users regardless of | +-- | whether the resource limits are enabled. However, Oracle | +-- | Database does not enforce the limits until you enable | +-- | them. | +-- | | +-- | (*) After you set up the new profile, you must edit your | +-- | INIT.ORA file and set: | +-- | | +-- | RESOURCE_LIMIT = TRUE | +-- | | +-- | if you attempt to limit any of the profile resources | +-- | below: | +-- | | +-- | SESSIONS_PER_USER | +-- | CPU_PER_SESSION | +-- | CPU_PER_CALL | +-- | CONNECT_TIME | +-- | IDLE_TIME | +-- | LOGICAL_READS_PER_SESSION | +-- | COMPOSITE_LIMIT | +-- | PRIVATE_SGA | +-- | | +-- | You can also modify the "RESOURCE_LIMIT" parameter on the | +-- | SYSTEM level via: | +-- | | +-- | ALTER SYSTEM SET RESOURCE_LIMIT = TRUE; | +-- | | +-- | Note though; this will only apply for new users login | +-- | onto the database - not the existing users currently | +-- | logged on. | +-- | | +-- | It is possible to check the current information on this | +-- | parameter by performing the below SELECT: | +-- | | +-- | SELECT * FROM V$PARAMETER | +-- | WHERE NAME = 'resource_limit'; | +-- | | +-- | (*) When specified with a resource parameter (like those | +-- | parameters defined in this example script), UNLIMITED | +-- | indicates that a user assigned this profile can use an | +-- | unlimited amount of this resource. When specified with a | +-- | password parameter, UNLIMITED indicates that no limit has | +-- | been set for the parameter. | +-- | | +-- | (*) Specify DEFAULT if you want to omit a limit for this | +-- | resource in this profile. A user assigned this profile is | +-- | subject to the limit for this resource specified in the | +-- | DEFAULT profile. The DEFAULT profile initially defines | +-- | unlimited resources. You can change those limits with the | +-- | ALTER PROFILE statement. | +-- | | +-- | Any user who is not explicitly assigned a profile is | +-- | subject to the limits defined in the DEFAULT profile. | +-- | Also, if the profile that is explicitly assigned to a | +-- | user omits limits for some resources or specifies DEFAULT | +-- | for some limits, then the user is subject to the limits | +-- | on those resources defined by the DEFAULT profile. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CONNECT / as sysdba + + +/* + ** +-----------------------------------------------------------------------------------+ + ** | CREATE PASSWORD PROFILE: developer_profile | + ** | --------------------------------------------------------------------------------- | + ** | | + ** | => SESSIONS_PER_USER : Specify the number of concurrent sessions to | + ** | which you want to limit the user. When a user | + ** | attempts to create a new session that exceeds | + ** | the given threshold, they will not be allowed | + ** | to login with that new session and presented | + ** | with an ORA-02391 error. | + ** | | + ** | => CPU_PER_SESSION : Specify the CPU time limit for a session, | + ** | expressed in hundredth of seconds. If the user | + ** | exceeds this time limit, they are logged off | + ** | with an ORA-02392 error. | + ** | | + ** | => CPU_PER_CALL : Specify the CPU time limit for a call (a parse, | + ** | execute, or fetch), expressed in hundredths of | + ** | seconds. If the user exceeds this time limit, | + ** | they are logged off with an ORA-02393 error. | + ** | | + ** | => CONNECT_TIME : Specify the total elapsed time limit for a | + ** | session, expressed in minutes. When a user | + ** | session exceeds the given threshold, they are | + ** | logged off and presented with an ORA-02399 | + ** | error. | + ** | | + ** | => IDLE_TIME : Specify the permitted periods of continuous | + ** | inactive time during a session, expressed in | + ** | minutes. Long-running queries and other | + ** | operations are not subject to this limit. When | + ** | a user session exceeds the given threshold, | + ** | they are logged off and presented with an | + ** | ORA-02396 error. | + ** | | + ** | => LOGICAL_READS_PER_SESSION : Specify the permitted number of data blocks | + ** | read in a session, including blocks read from | + ** | memory and disk. When a user session exceeds | + ** | the given threshold, they are logged off and | + ** | presented with an ORA-02394 error. | + ** | | + ** | => LOGICAL_READS_PER_CALL : Specify the permitted number of data blocks | + ** | read for a call to process a SQL statement | + ** | (a parse, execute, or fetch). When a user | + ** | session exceeds the given threshold, they are | + ** | logged off and presented with an ORA-02395 | + ** | error. | + ** | | + ** | => PRIVATE_SGA : Specify the amount of private space a session | + ** | can allocate in the shared pool of the system | + ** | global area (SGA) specified using the | + ** | "size_clause". The size_clause lets you specify | + ** | a number of bytes, kilobytes (K), megabytes (M),| + ** | gigabytes (G), terabytes (T), petabytes (P), or | + ** | exabytes (E) in any statement that lets you | + ** | establish amounts of disk or memory space. Use | + ** | the size_clause to specify a number or multiple | + ** | of bytes. If you do not specify any of the | + ** | multiple abbreviations, the integer is | + ** | interpreted as bytes. | + ** | | + ** | NOTE: | + ** | This limit applies only if you are using shared | + ** | server architecture. The private space for a | + ** | session in the SGA includes private SQL and | + ** | PL/SQL areas, but not shared SQL and PL/SQL | + ** | areas. | + ** | | + ** | => COMPOSITE_LIMIT : Specify the total resource cost for a session, | + ** | expressed in service units. Oracle Database | + ** | calculates the total service units as a | + ** | weighted sum of CPU_PER_SESSION, CONNECT_TIME, | + ** | LOGICAL_READS_PER_SESSION, and PRIVATE_SGA. | + ** | | + ** +-----------------------------------------------------------------------------------+ +*/ + + +/* + ** +-----------------------------------------------------------------------------------+ + ** | If you assign the developer_profile profile to a user (as defined below), the | + ** | user is subject to the following limits in subsequent sessions: | + ** | | + ** | => The user can have any number of concurrent sessions. | + ** | => In a single session, the user cannot consume more than 120 seconds | + ** | (2 minutes) of CPU time. | + ** | => A single call made by the user cannot consume more than 30 seconds of CPU | + ** | time. | + ** | => A single session cannot last for more than 45 minutes. | + ** | => A single session cannot be idle for more than 5 minutes. | + ** | => In a single session, the number of data blocks read from memory and disk | + ** | is subject to the limit specified in the DEFAULT profile. | + ** | => A single call made by the user cannot read more than 1000 data blocks from | + ** | memory and disk. | + ** | => A single session cannot allocate more than 15 kilobytes of memory in the | + ** | SGA. | + ** | => In a single session, the total resource cost cannot exceed 5 million | + ** | service units. The formula for calculating the total resource cost is | + ** | specified by the ALTER RESOURCE COST statement. | + ** | => Since the developer_profile profile omits a limit for password limits, the | + ** | user is subject to the limits on these resources specified in the DEFAULT | + ** | profile. | + ** +-----------------------------------------------------------------------------------+ +*/ + + +CREATE PROFILE developer_profile LIMIT + SESSIONS_PER_USER UNLIMITED + CPU_PER_SESSION 12000 + CPU_PER_CALL 3000 + CONNECT_TIME 45 + IDLE_TIME 5 + LOGICAL_READS_PER_SESSION DEFAULT + LOGICAL_READS_PER_CALL 1000 + PRIVATE_SGA 15K + COMPOSITE_LIMIT 5000000 +/ diff --git a/idev/example_create_resource_plan_multi_resource_plan_9i.sql b/idev/example_create_resource_plan_multi_resource_plan_9i.sql new file mode 100644 index 0000000..bb5c721 --- /dev/null +++ b/idev/example_create_resource_plan_multi_resource_plan_9i.sql @@ -0,0 +1,141 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_resource_plan_multi_resource_plan_9i.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script to create a Multilevel Schema / Resouce Plan | +-- | configuration in Oracle 9i. It will use default plan and | +-- | resource consumer group methods. | +-- | +---+ +-- | [TOP PLAN] | +-- | | | +-- | ---------------------------- | +-- | / \ | +-- | 30% @ level 1 70% @ level 1 | +-- | | | | +-- | [SUB PLAN 1] [SUB PLAN 2] | +-- | | | | +-- | | | | +-- | ------------------------- ---------------------- | +-- | / | \ / | \ | +-- | 80% @ 20% @ 100% @ 100% @ 60% @ 40% @ | +-- | level 1 level 1 level 2 level 2 level 1 level 1 | +-- | | | | | | | | +-- | [ONLINE GROUP] [BATCH GROUP ] [OTHER GROUPS] [ONLINE GROUP] [BATCH GROUP] | +-- | [ SUB PLAN 1 ] [ SUB PLAN 1 ] [ SUB PLAN 2 ] [ SUB PLAN 2] | +-- | | +-- | +---+ +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +BEGIN + +-- +----------------------------------------------------------------------------+ +-- | Create Pending Area | +-- +----------------------------------------------------------------------------+ +DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA(); + + +-- +----------------------------------------------------------------------------+ +-- | Create three plans - One "Top Plan" and Two "Sub Plans" | +-- +----------------------------------------------------------------------------+ +DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'TOP_PLAN', COMMENT => 'Top plan'); +DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'SUB_PLAN1', COMMENT => 'Sub plan 1'); +DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'SUB_PLAN2', COMMENT => 'Sub plan 2'); + + +-- +----------------------------------------------------------------------------+ +-- | Create all resource consumer groups that will be attached to the two | +-- | "Sub Plans". There will be two "user defined" resource consumer groups and | +-- | one "Oracle defined" resource consumer group (OTHER_GROUPS) defined for | +-- | each "Sub Plan". | +-- +----------------------------------------------------------------------------+ +DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'ONLINE_GROUP_SUB_PLAN_1', COMMENT => 'Online Group - Sub Plan 1'); +DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'BATCH_GROUP_SUB_PLAN_1', COMMENT => 'Batch Group - Sub Plan 1'); +DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'ONLINE_GROUP_SUB_PLAN_2', COMMENT => 'Online Group - Sub Plan 2'); +DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'BATCH_GROUP_SUB_PLAN_2', COMMENT => 'Batch Group - Sub Plan 2'); + + +-- +----------------------------------------------------------------------------+ +-- | We first define the directives that will control CPU resources between the | +-- | "Top Plan" and its two "Sub Plans". The first sub plan (SUB_PLAN1) will | +-- | receive 30% of the CPU at level 1 while the second sub plan (SUB_PLAN2) | +-- | will receive 70% of the CPU at level 1. | +-- +----------------------------------------------------------------------------+ +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN =>'TOP_PLAN' + , GROUP_OR_SUBPLAN =>'SUB_PLAN1' + , COMMENT=> 'All sub plan 1 user sessions at level 1' + , CPU_P1 => 30); + +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN =>'TOP_PLAN' + , GROUP_OR_SUBPLAN =>'SUB_PLAN2' + , COMMENT=> 'All sub plan 2 user sessions at level 1' + , CPU_P1 => 70); + + +-- +----------------------------------------------------------------------------+ +-- | Finally, we define the key directives for each of the sub plans and | +-- | resources available for user sessions. | +-- +----------------------------------------------------------------------------+ +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'SUB_PLAN1' + , GROUP_OR_SUBPLAN => 'ONLINE_GROUP_SUB_PLAN_1' + , COMMENT => 'Online sub plan 1 users sessions at level 1' + , CPU_P1 => 80 + , CPU_P2=> 0); + +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'SUB_PLAN1' + , GROUP_OR_SUBPLAN => 'BATCH_GROUP_SUB_PLAN_1' + , COMMENT => 'Batch sub plan 1 users sessions at level 1' + , CPU_P1 => 20 + , CPU_P2 => 0); + +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'SUB_PLAN1' + , GROUP_OR_SUBPLAN => 'OTHER_GROUPS' + , COMMENT => 'All other users sessions at level 2' + , CPU_P1 => 0 + , CPU_P2 => 100); + +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'SUB_PLAN2' + , GROUP_OR_SUBPLAN => 'ONLINE_GROUP_SUB_PLAN_2' + , COMMENT => 'Online sub plan 2 users sessions at level 1' + , CPU_P1 => 60 + , CPU_P2 => 0); + +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'SUB_PLAN2' + , GROUP_OR_SUBPLAN => 'BATCH_GROUP_SUB_PLAN_2' + , COMMENT => 'Batch sub plan 2 users sessions at level 1' + , CPU_P1 => 40 + , CPU_P2 => 0); + +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( PLAN => 'SUB_PLAN2' + , GROUP_OR_SUBPLAN => 'OTHER_GROUPS' + , COMMENT => 'All other users sessions at level 2' + , CPU_P1 => 0 + , CPU_P2 => 100); + + +-- +----------------------------------------------------------------------------+ +-- | The preceding call to VALIDATE_PENDING_AREA is optional because the | +-- | validation is implicitly performed in SUBMIT_PENDING_AREA. | +-- +----------------------------------------------------------------------------+ +DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA(); + + +-- +----------------------------------------------------------------------------+ +-- | Submit the pending area to Oracle! | +-- +----------------------------------------------------------------------------+ +DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA(); + +END; +/ + + +ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = top_plan; + diff --git a/idev/example_create_sequence.sql b/idev/example_create_sequence.sql new file mode 100644 index 0000000..2e61b93 --- /dev/null +++ b/idev/example_create_sequence.sql @@ -0,0 +1,25 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_sequence.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script that demonstrates how to create a sequence | +-- | number generator. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +DROP SEQUENCE user_id_seq +/ + +CREATE SEQUENCE user_id_seq + INCREMENT BY 1 + START WITH 1000 + NOMAXVALUE + NOCYCLE +/ diff --git a/idev/example_create_table.sql b/idev/example_create_table.sql new file mode 100644 index 0000000..22959a5 --- /dev/null +++ b/idev/example_create_table.sql @@ -0,0 +1,120 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_table.sql | +-- | CLASS : Examples | +-- | PURPOSE : Simple create table script. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + + +/* + * -------------------------------------------------------- + * ---------------- CREATE TABLE (DEPT) ------------------- + * -------------------------------------------------------- + */ + +prompt Dropping Table (dept)... + +DROP TABLE dept CASCADE CONSTRAINTS +/ + +prompt Creating Table (dept)... + +CREATE TABLE dept ( + deptno NUMBER(2) + , dname VARCHAR2(14) + , loc VARCHAR2(13) +) +TABLESPACE users +STORAGE ( + INITIAL 128K + NEXT 128K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 +) +/ + +ALTER TABLE dept +ADD CONSTRAINT dept_pk PRIMARY KEY(deptno) + USING INDEX + TABLESPACE idx + STORAGE ( + INITIAL 64K + NEXT 64K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 + ) +/ + +ALTER TABLE dept +MODIFY ( dname CONSTRAINT dept_nn1 NOT NULL +) +/ + + +/* + * ------------------------------------------------------- + * ---------------- CREATE TABLE (EMP) ------------------- + * ------------------------------------------------------- + */ + +prompt Dropping Table (emp)... + +DROP TABLE emp CASCADE CONSTRAINTS +/ + +prompt Creating Table (emp)... + +CREATE TABLE emp ( + empno NUMBER(4) + , ename VARCHAR2(10) + , job VARCHAR2(9) + , mgr NUMBER(4) + , hiredate DATE + , sal NUMBER(7,2) + , comm NUMBER(7,2) + , deptno NUMBER(2) +) +TABLESPACE users +STORAGE ( + INITIAL 128K + NEXT 128K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 +) +/ + +ALTER TABLE emp +ADD CONSTRAINT emp_pk PRIMARY KEY(empno) + USING INDEX + TABLESPACE idx + STORAGE ( + INITIAL 64K + NEXT 64K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 + ) +/ + +ALTER TABLE emp +MODIFY ( ename CONSTRAINT emp_nn1 NOT NULL + , job CONSTRAINT emp_nn2 NOT NULL + , hiredate CONSTRAINT emp_nn3 NOT NULL +) +/ + +ALTER TABLE emp +ADD CONSTRAINT emp_fk1 FOREIGN KEY (deptno) + REFERENCES dept(deptno) +/ diff --git a/idev/example_create_table_buffer_pools.sql b/idev/example_create_table_buffer_pools.sql new file mode 100644 index 0000000..8ee8bcf --- /dev/null +++ b/idev/example_create_table_buffer_pools.sql @@ -0,0 +1,155 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_table_buffer_pools.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script that demonstrates how to create tables that | +-- | will exist in separate buffer pools. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +/* + ** +---------------------------------------------------------------------------+ + ** | NOTES: | + ** | | + ** | DEFAULT Buffer Pool | + ** | ------------------- | + ** | (Still refered to as the database buffer cache) is always allocated in | + ** | Oracle8 and higher. As with Oracle7, the normal LRU algorithm manages the | + ** | data blocks in the default buffer pool. | + ** | | + ** | | + ** | KEEP Buffer Pool | + ** | ---------------- | + ** | In Oracle7, the database allowed the DBA to define tables with the CACHE | + ** | option. This allowed tables that where read in from a full table scan to | + ** | be placed on the 'most recently used' (MTU) end of the 'least recently | + ** | used' (LRU) list, as opposed to the LRU end. The idea was to keep database| + ** | blocks that where read from a full table scan in the database buffer | + ** | cache for a longer period of time before being aged out. These tables | + ** | where | typically small tables, such as lookup tables. Oracle8 introduced | + ** | the capability of reserving part of the default buffer pool for a "KEEP" | + ** | buffer pool. This pool can be used as a cache for database blocks that | + ** | should not be aged out. Keep in mind that as you allocate memory for the | + ** | keep buffer pool, that you are taking away memory from the default buffer | + ** | pool. If you undersize the KEEP buffer pool, objects will be aged out | + ** | using the LRU algorithm, as with the default buffer pool. Also take care | + ** | not to oversize this pool as this memory will go wasted and unused. | + ** | | + ** | RECYCLE Buffer Pool | + ** | ------------------- | + ** | The purpose of the RECYCLE buffer pool is to store memory blocks that are | + ** | not likely to be reused again soon. This are usually very large objects, | + ** | access to individual blocks may be very random and scattered. A prime | + ** | candidate for the RECYCLE buffer pool. It is important to not create the | + ** | size of this pool too small. Doing so may cause blocks to age out of the | + ** | pool before an application of SQL statement uses them completely. If the | + ** | block is aged out before the transaction is done with it, it needs to be | + ** | re-read from disk, causing more I/O. | + ** | | + ** | | + ** | Init.ora Settings | + ** | ----------------- | + ** | DB_BLOCK_BUFFERS = 2000 # Allocate 2000 blocks to the default buffer| + ** | # cache. | + ** | DB_BLOCK_LRU_LATCHES = 6 # Configure the number of LRU latches. The | + ** | # default is CPU_COUNT/2 and the maximum | + ** | # is CPU_COUNT. | + ** | BUFFER_POOL_KEEP = (BUFFERS:100, LRU_LATCHES:2) | + ** | # Configure the keep buffer pool. Assign 100| + ** | # blocks to it from the default buffer | + ** | # pool and 2 LRU latches. | + ** | BUFFER_POOL_RECYCLE = (BUFFERS:100, LRU_LATCHES:1) | + ** | # Configure the recycle buffer pool. Assign | + ** | # 100 blocks to it from the database | + ** | # buffer pool and 1 LRU latch. | + ** | | + ** | NOTE: Some documentation states to use 'nbuf,nlat' but this may not work | + ** | correctly - use the full string ("buffers:nbuf","lru_latches:Nlat") | + ** | | + ** | Oracle9i NOTE !!! | + ** | ----------------- | + ** | The above database block cache parameters are deprecated in | + ** | Oracle9i in favor of: --> | + ** | --> | + ** | --> | + ** | Oracle recommends that you use these new parameters instead. Also, | + ** | BUFFER_POOL_KEEP cannot be combined with the new dynamic | + ** | DB_KEEP_CACHE_SIZE parameter just as BUFFER_POOL_RECYCLE cannot be used | + ** | with the dynamic parameter DB_RECYCLE_CACHE_SIZE. Combining these | + ** | parameters in the same parameter file will produce an error. | + ** | DB_BLOCK_BUFFERS, BUFFER_POOL_KEEP and BUFFER_POOL_RECYCLE are being | + ** | retained for backward compatibility only. | + ** +---------------------------------------------------------------------------+ +*/ + +/* + ** -------------------------------------------------------- + ** ----------- CREATE TABLE (EMP) --------------- + ** ----------- BUFFER_POOL_KEEP --------------- + ** -------------------------------------------------------- +*/ + +prompt Dropping Table (emp)... + +DROP TABLE emp CASCADE CONSTRAINTS +/ + +prompt Creating Table (emp)... + +CREATE TABLE emp ( + empno NUMBER(4) + , ename VARCHAR2(10) + , job VARCHAR2(9) + , mgr NUMBER(4) + , hiredate DATE + , sal NUMBER(7,2) + , comm NUMBER(7,2) + , deptno NUMBER(2) +) +TABLESPACE users +STORAGE ( + INITIAL 128K + NEXT 128K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 + BUFFER_POOL KEEP +) +/ + +/* + ** -------------------------------------------------------- + ** ----------- CREATE TABLE (DEPT) -------------- + ** ----------- BUFFER_POOL_RECYCLE -------------- + ** -------------------------------------------------------- +*/ + +prompt Dropping Table (dept)... + +DROP TABLE dept CASCADE CONSTRAINTS +/ + +prompt Creating Table (dept)... + +CREATE TABLE dept ( + deptno NUMBER(2) + , dname VARCHAR2(14) + , loc VARCHAR2(13) +) +TABLESPACE users +STORAGE ( + INITIAL 128K + NEXT 128K + MINEXTENTS 1 + MAXEXTENTS 121 + PCTINCREASE 0 + BUFFER_POOL RECYCLE +) +/ diff --git a/idev/example_create_tablespace.sql b/idev/example_create_tablespace.sql new file mode 100644 index 0000000..2320f76 --- /dev/null +++ b/idev/example_create_tablespace.sql @@ -0,0 +1,108 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_tablespace.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script that demonstrates how to create several | +-- | types of tablespaces in Oracle7 - 11g. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + + +-- +-----------------------------------------------------------------+ +-- | (Oracle9i and higher) | +-- | ORACLE MANAGED FILES (OMF) | +-- +-----------------------------------------------------------------+ + +CREATE TABLESPACE users + LOGGING DATAFILE SIZE 500M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE 500M + EXTENT MANAGEMENT LOCAL AUTOALLOCATE + SEGMENT SPACE MANAGEMENT AUTO +/ + + +-- +-----------------------------------------------------------------+ +-- | (Oracle9i and higher) | +-- | SEGMENT SPACE MANAGEMENT AUTO | +-- +-----------------------------------------------------------------+ + +CREATE TABLESPACE users + LOGGING DATAFILE '/u10/app/oradata/ORA920/users01.dbf' SIZE 500M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE 500M + EXTENT MANAGEMENT LOCAL AUTOALLOCATE + SEGMENT SPACE MANAGEMENT AUTO +/ + + +-- +---------------------------------------------------------------------------+ +-- | (Oracle8i and higher) - In version Oracle9i and higher, you | +-- | create the temporary tablespace as part | +-- | of the CREATE TABLESPACE statement: | +-- | | +-- | ... | +-- | DEFAULT TEMPORARY TABLESPACE temp | +-- | TEMPFILE '/u07/app/oradata/ORA920/temp01.dbf' | +-- | SIZE 500M REUSE | +-- | AUTOEXTEND ON NEXT 500M MAXSIZE 1500M | +-- | ... | +-- | TEMPORARY TABLESPACES | +-- +---------------------------------------------------------------------------+ + +CREATE TEMPORARY TABLESPACE temp + TEMPFILE '/u07/app/oradata/ORA920/temp01.dbf' SIZE 500M REUSE + AUTOEXTEND on NEXT 100M MAXSIZE unlimited + EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M +/ + + +-- +-----------------------------------------------------------------+ +-- | (Oracle8i and higher) | +-- | LOCALLY MANAGED TABLESPACES - with AUTOALLOCATE clause | +-- | | +-- | Use AUTOALLOACTE clause, if the tablespace is expected to | +-- | contain objects of varying sizes requiring different extent | +-- | sizes and having many extents. AUTOALLOCATE is default. | +-- +-----------------------------------------------------------------+ + +CREATE TABLESPACE users + LOGGING DATAFILE '/u10/app/oradata/ORA817/users01.dbf' SIZE 100M REUSE + AUTOEXTEND ON NEXT 100M MAXSIZE 500M + EXTENT MANAGEMENT LOCAL AUTOALLOCATE +/ + + +-- +-----------------------------------------------------------------+ +-- | (Oracle8i and higher) | +-- | LOCALLY MANAGED TABLESPACES - with UNIFORM SIZE clause | +-- | | +-- | Use UNIFORM SIZE clause if you want exact control over | +-- | unused space, and you can predict exactly the space to be | +-- | allocated for an object or objects and the number and size | +-- | of extents. Default extent size is 1M, if you do not specify | +-- | size parameter. | +-- +-----------------------------------------------------------------+ + +CREATE TABLESPACE users + LOGGING DATAFILE '/u10/app/oradata/ORA817/users01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE 500M + EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K +/ + + +-- +-----------------------------------------------------------------+ +-- | (All versions of Oracle) | +-- | DICTIONARY MANAGED TABLESPACE | +-- +-----------------------------------------------------------------+ + +CREATE TABLESPACE users + DATAFILE '/u10/app/oradata/ORA734/users01.dbf' SIZE 10M + DEFAULT STORAGE (initial 64k next 64k maxextents 121 pctincrease 0) +/ + diff --git a/idev/example_create_temporary_tables.sql b/idev/example_create_temporary_tables.sql new file mode 100644 index 0000000..abf48f3 --- /dev/null +++ b/idev/example_create_temporary_tables.sql @@ -0,0 +1,64 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_temporary_tables.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL script that demonstrates how to create temporary | +-- | tables. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + + +connect scott/tiger + +set serveroutput on + +Prompt ==================================================== +Prompt CREATE TEMPORARY TABLE WITH DEFAULT SETTINGS... +Prompt (Oracle8i will use on commit delete rows by default) +Prompt ==================================================== +Prompt +accept a1 Prompt "Hit to continue"; + +CREATE GLOBAL TEMPORARY TABLE mytemptab1 ( + id NUMBER + , name VARCHAR2(500) + , average_salary NUMBER(15,2) +) +/ + + +Prompt ================================================ +Prompt CREATE TEMPORARY TABLE: on commit delete rows... +Prompt ================================================ +Prompt +accept a1 Prompt "Hit to continue"; + +CREATE GLOBAL TEMPORARY TABLE mytemptab2 ( + id NUMBER + , name VARCHAR2(500) + , average_salary NUMBER(15,2) +) ON COMMIT DELETE ROWS +/ + + +Prompt ================================================== +Prompt CREATE TEMPORARY TABLE: on commit preserve rows... +Prompt ================================================== +Prompt +accept a1 Prompt "Hit to continue"; + +CREATE GLOBAL TEMPORARY TABLE mytemptab3 ( + id NUMBER + , name VARCHAR2(500) + , average_salary NUMBER(15,2) +) ON COMMIT PRESERVE ROWS +/ + + diff --git a/idev/example_create_user_tables.sql b/idev/example_create_user_tables.sql new file mode 100644 index 0000000..c80c65b --- /dev/null +++ b/idev/example_create_user_tables.sql @@ -0,0 +1,244 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_create_user_tables.sql | +-- | CLASS : Examples | +-- | PURPOSE : Yet another SQL script that demonstrates how to sample tables | +-- | and a PL/SQL routine that populates those tables. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +/* +** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +*/ + +/* + +CONNECT / + +CREATE TABLESPACE users + DATAFILE '/u10/app/oradata/ORA901/users01.dbf' SIZE 10M +/ + +CREATE TABLESPACE idx + DATAFILE '/u09/app/oradata/ORA901/idx01.dbf' SIZE 10M +/ + +CREATE USER jhunter IDENTIFIED BY jhunter + DEFAULT TABLESPACE users + TEMPORARY TABLESPACE temp +/ + +GRANT dba, resource, connect TO jhunter +/ + +*/ + +/* +** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +*/ + +CONNECT jhunter/jhunter + +/* +** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +*/ + +DROP TABLE user_names CASCADE CONSTRAINTS +/ + +CREATE TABLE user_names ( + name_intr_no NUMBER(15) + , name VARCHAR2(30) + , age NUMBER(3) + , update_log_date DATE +) +TABLESPACE users +STORAGE ( + INITIAL 64K + NEXT 64K + MINEXTENTS 1 + MAXEXTENTS 100 + PCTINCREASE 0 +) +/ + +ALTER TABLE user_names +ADD CONSTRAINT user_names_pk PRIMARY KEY(name_intr_no) + USING INDEX + TABLESPACE idx + STORAGE ( + INITIAL 28K + NEXT 28K + MINEXTENTS 1 + MAXEXTENTS 100 + PCTINCREASE 0 + ) +/ + +ALTER TABLE user_names +MODIFY ( name CONSTRAINT user_names_nn1 NOT NULL + , age CONSTRAINT user_names_nn2 NOT NULL + , update_log_date CONSTRAINT user_names_nn3 NOT NULL +) +/ + +/* +** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +*/ + +DROP TABLE user_names_phone +/ + +CREATE TABLE user_names_phone ( + name_intr_no number(15) + , phone_number varchar2(12) + , country_code varchar2(15) +) +TABLESPACE users +STORAGE ( + INITIAL 64K + NEXT 64K + MINEXTENTS 1 + MAXEXTENTS 100 + PCTINCREASE 0 +) +/ + +ALTER TABLE user_names_phone +ADD CONSTRAINT user_names_phone_pk PRIMARY KEY(name_intr_no, phone_number) + USING INDEX + TABLESPACE idx + STORAGE ( + INITIAL 28K + NEXT 28K + MINEXTENTS 1 + MAXEXTENTS 100 + PCTINCREASE 0 + ) +/ + + +ALTER TABLE user_names_phone +MODIFY ( country_code CONSTRAINT user_names_phone_nn1 NOT NULL +) +/ + +ALTER TABLE user_names_phone +ADD CONSTRAINT user_names_phone_fk1 FOREIGN KEY (name_intr_no) + REFERENCES user_names(name_intr_no) +/ + +/* +** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +*/ + +DROP TABLE user_names_company +/ + +CREATE TABLE user_names_company ( + name_intr_no number(15) + , company_code varchar2(15) +) +TABLESPACE users +STORAGE ( + INITIAL 64K + NEXT 64K + MINEXTENTS 1 + MAXEXTENTS 100 + PCTINCREASE 0 +) +/ + +/* +** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +*/ + +create or replace procedure insert_user_names ( + num_records IN number) + +IS + + CURSOR csr1 IS + SELECT max(name_intr_no) + FROM user_names; + + max_intr_no NUMBER; + +BEGIN + + /* + || ENABLE DBMS_OUTPUT + */ + DBMS_OUTPUT.ENABLE; + + /* + || SET ROLLBACK SEGMENT TO THE LARGEST ONE: rbs2 + */ + DECLARE + incomplete_transaction EXCEPTION; + pragma EXCEPTION_INIT (incomplete_transaction, -01453); + BEGIN + SET TRANSACTION USE ROLLBACK SEGMENT rbs2; + EXCEPTION + WHEN incomplete_transaction THEN + ROLLBACK; + DBMS_OUTPUT.PUT_LINE('Needed to rollback previous transaction'); + SET TRANSACTION USE ROLLBACK SEGMENT rbs2; + END; + + /* + || INSERT DUMMY RECORDS INTO THE USER DEFINED + || TABLE: user_names. THE FIRST PARAMETER TO THIS + || FUNCTION WILL DETERMINE THE NUMBER OF RECORDS + || TO INSERT. + */ + + DECLARE + fail_rollback_segment EXCEPTION; + pragma EXCEPTION_INIT (fail_rollback_segment, -01562); + + BEGIN + OPEN csr1; + FETCH csr1 INTO max_intr_no; + CLOSE csr1; + + max_intr_no := NVL(max_intr_no,0) + 1; + + FOR loop_index IN max_intr_no .. (max_intr_no + (num_records-1)) + LOOP + + INSERT INTO user_names + VALUES (loop_index, 'Oracle DBA', 30, SYSDATE); + + INSERT INTO user_names_phone + VALUES (loop_index, '412-555-1234', 'USA'); + + INSERT INTO user_names_company + VALUES (loop_index, 'DBA Zone'); + + IF (MOD(loop_index, 100) = 0) THEN + COMMIT; + DBMS_OUTPUT.PUT_LINE('Commit point reached at: ' || loop_index || '.'); + END IF; + + END LOOP; + COMMIT; + DBMS_OUTPUT.NEW_LINE; + DBMS_OUTPUT.PUT_LINE('Successfully inserted ' || num_records || + ' records into table: user_names'); + EXCEPTION + WHEN fail_rollback_segment THEN + ROLLBACK; + DBMS_OUTPUT.PUT_LINE('Fail to extent rollback segment: RBS2'); + END; + +END; +/ +show errors; diff --git a/idev/example_database_resource_manager_setup.sql b/idev/example_database_resource_manager_setup.sql new file mode 100644 index 0000000..716f48d --- /dev/null +++ b/idev/example_database_resource_manager_setup.sql @@ -0,0 +1,152 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_database_resource_manager_setup.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL syntax used setup and configure database resource | +-- | manager (DRM). | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +connect system/manager + +set serveroutput on + +Prompt ==================== +Prompt Clean-Up DRM Area... +Prompt ==================== +Prompt +accept a1 Prompt "Hit to continue"; + +alter system set resource_manager_plan=system_plan; + +exec DBMS_RESOURCE_MANAGER.create_pending_area; +-- exec dbms_resource_manager.DELETE_PLAN_CASCADE('daytime_plan'); +-- exec dbms_resource_manager.DELETE_PLAN_CASCADE('night_weekend_plan'); +exec dbms_resource_manager.DELETE_PLAN_DIRECTIVE('daytime_plan', 'oltp_group'); +exec dbms_resource_manager.DELETE_PLAN_DIRECTIVE('daytime_plan', 'batch_group'); +exec dbms_resource_manager.DELETE_PLAN_DIRECTIVE('daytime_plan', 'other_groups'); +exec dbms_resource_manager.DELETE_PLAN_DIRECTIVE('night_weekend_plan', 'oltp_group'); +exec dbms_resource_manager.DELETE_PLAN_DIRECTIVE('night_weekend_plan', 'batch_group'); +exec dbms_resource_manager.DELETE_PLAN_DIRECTIVE('night_weekend_plan', 'other_groups'); +exec dbms_resource_manager.DELETE_PLAN('daytime_plan'); +exec dbms_resource_manager.DELETE_PLAN('night_weekend_plan'); +exec dbms_resource_manager.DELETE_CONSUMER_GROUP('oltp_group'); +exec dbms_resource_manager.DELETE_CONSUMER_GROUP('batch_group'); +exec DBMS_RESOURCE_MANAGER.validate_pending_area; +exec DBMS_RESOURCE_MANAGER.submit_pending_area; + + + +Prompt ======================== +Prompt Creating Pending Area... +Prompt ======================== +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_RESOURCE_MANAGER.create_pending_area; + + +Prompt ================================ +Prompt Create Resource Plan Template... +Prompt ================================ +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_RESOURCE_MANAGER.create_plan('daytime_plan', 'Plan for daytime processing'); +exec DBMS_RESOURCE_MANAGER.create_plan('night_weekend_plan', 'Plan for nights and weekends'); + + +Prompt ========================================== +Prompt Create Resource Consumer Group Template... +Prompt ========================================== +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_RESOURCE_MANAGER.create_consumer_group('oltp_group', 'data entry specialist'); +exec DBMS_RESOURCE_MANAGER.create_consumer_group('batch_group', 'nightly batch jobs'); + + + +Prompt ================================== +Prompt Create Resource Plan Directives... +Prompt ================================== +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_RESOURCE_MANAGER.create_plan_directive('daytime_plan', 'oltp_group', 'Daytime rule for oltp_group users', cpu_p1 => 90, parallel_degree_limit_p1 => 0); + +exec DBMS_RESOURCE_MANAGER.create_plan_directive('daytime_plan', 'batch_group', 'Daytime rule for batch_group users', cpu_p1 => 10, parallel_degree_limit_p1 => 0); + +exec DBMS_RESOURCE_MANAGER.create_plan_directive('daytime_plan', 'other_groups', 'Daytime rules for all other users/groups', cpu_p2 => 100, parallel_degree_limit_p1 => 0); + +exec DBMS_RESOURCE_MANAGER.create_plan_directive('night_weekend_plan', 'oltp_group', 'Night/Weekend rule for oltp_group users', cpu_p1 => 10, parallel_degree_limit_p1 => 0); + +exec DBMS_RESOURCE_MANAGER.create_plan_directive('night_weekend_plan', 'batch_group', 'Night/Weekend rule for batch_group users', cpu_p1 => 90, parallel_degree_limit_p1 => 0); + +exec DBMS_RESOURCE_MANAGER.create_plan_directive('night_weekend_plan', 'other_groups', 'Night/Weekend rules for all other users/groups', cpu_p2 => 100, parallel_degree_limit_p1 => 0); + + + +Prompt ================================== +Prompt Confirm (Validate) Pending Area... +Prompt ================================== +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_RESOURCE_MANAGER.validate_pending_area; + + +Prompt ====================== +Prompt Submit Pending Area... +Prompt ====================== +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_RESOURCE_MANAGER.submit_pending_area; +-- exec DBMS_RESOURCE_MANAGER.clear_pending_area; + + +Prompt ========================================================================= +Prompt ALLOW USER SCOTT TO SWITCH BETWEEN (oltp_group and batch_group) GROUPS... +Prompt ========================================================================= +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_RESOURCE_MANAGER_PRIVS.grant_switch_consumer_group('scott', 'oltp_group', FALSE); +exec DBMS_RESOURCE_MANAGER_PRIVS.grant_switch_consumer_group('scott', 'batch_group', FALSE); + + +Prompt ========================================================= +Prompt ASSIGN USER SCOTT TO INITIAL CONSUMER GROUP OF oltp_group... +Prompt ========================================================= +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_RESOURCE_MANAGER.set_initial_consumer_group('scott', 'oltp_group'); + + +Prompt ============================================== +Prompt SWITCH USER SCOTT INTO THE oltp_group GROUP... +Prompt ============================================== +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_RESOURCE_MANAGER.switch_consumer_group_for_user('scott', 'oltp_group'); + + +Prompt ============================== +Prompt Switch to DAYTIME_PLAN plan... +Prompt ============================== +Prompt +accept a1 Prompt "Hit to continue"; + +ALTER SYSTEM SET resource_manager_plan=daytime_plan; + + diff --git a/idev/example_drop_unused_column.sql b/idev/example_drop_unused_column.sql new file mode 100644 index 0000000..d73c19e --- /dev/null +++ b/idev/example_drop_unused_column.sql @@ -0,0 +1,90 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_drop_unused_column.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL syntax used to drop unused columns from a table. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +connect scott/tiger + +set serveroutput on + +Prompt ====================== +Prompt DROP existing table... +Prompt ====================== +Prompt +accept a1 Prompt "Hit to continue"; + +DROP TABLE d_table +/ + + +Prompt ======================= +Prompt CREATE TESTING TABLE... +Prompt ======================= +Prompt +accept a1 Prompt "Hit to continue"; + +CREATE TABLE d_table ( + id_no NUMBER + , name VARCHAR2(100) + , d_column VARCHAR2(100) +) +/ + + +Prompt ======================== +Prompt MARK COLUMN AS UNUSED... +Prompt ======================== +Prompt +accept a1 Prompt "Hit to continue"; + +ALTER TABLE d_table SET UNUSED COLUMN d_column; + + +Prompt ======================================= +Prompt QUERY ALL TABLES WITH UNUSED COLUMNS... +Prompt ======================================= +Prompt +accept a1 Prompt "Hit to continue"; + +SELECT * FROM sys.dba_unused_col_tabs; + + +Prompt ====================================== +Prompt PHYSICALLY REMOVE THE UNUSED COLUMN... +Prompt ====================================== +Prompt +accept a1 Prompt "Hit to continue"; + +ALTER TABLE d_table DROP UNUSED COLUMNS; + + +Prompt ================================================ +Prompt IF YOU WANTED TO PHYSICALLY REMOVE THE COLUMN... +Prompt ================================================ +Prompt +accept a1 Prompt "Hit to continue"; + +-- ALTER TABLE d_table DROP COLUMN d_column; + + +Prompt ========================================= +Prompt OPTIONALLY SYNTAX FOR REMOVING COLUMNS... +Prompt ========================================= +Prompt +Prompt ALTER TABLE d_table DROP COLUMN d_column CASCADE CONSTRAINTS; +Prompt ALTER TABLE d_table DROP COLUMN d_column INVALIDATE; +Prompt ALTER TABLE d_table DROP COLUMN d_column CHECKPOINT 1000; +Prompt +accept a1 Prompt "Hit to EXIT"; + + diff --git a/idev/example_lob_demonstration.sql b/idev/example_lob_demonstration.sql new file mode 100644 index 0000000..24d987a --- /dev/null +++ b/idev/example_lob_demonstration.sql @@ -0,0 +1,664 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_lob_demonstration.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example script that demonstrates how to manipulate LOBs using | +-- | SQL. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +Prompt +Prompt Dropping all testing LOB tables... +Prompt ---------------------------------- + +DROP TABLE test_lobs; +DROP DIRECTORY tmp_dir; +DROP TABLE long_data; + + + +Prompt Create TEST_LOB table... +Prompt ------------------------ + +CREATE TABLE test_lobs ( + c1 NUMBER + , c2 CLOB + , c3 BFILE + , c4 BLOB +) +LOB (c2) STORE AS (ENABLE STORAGE IN ROW) +LOB (c4) STORE AS (DISABLE STORAGE IN ROW) +/ + + +Prompt Inserting row with NO LOB locators... +Prompt ------------------------------------- + +INSERT INTO test_lobs + VALUES (1, null, null, null) +/ + +Prompt Inserting row with LOB locators (locators created but point to nothing) ... +Prompt --------------------------------------------------------------------------- + +INSERT INTO test_lobs + VALUES (2, empty_clob(), BFILENAME(null,null), empty_blob()) +/ + + +Prompt +------------------------------------------------------------------------+ +Prompt | It is possible to insert data directly up to 4K. | +Prompt | Even though you are only really accessing the locator, the data is | +Prompt | stored as appropriate behind the scenes. When inserting directly into | +Prompt | a BLOB either the string must be hex as an implicit HEXTORAW will be | +Prompt | done or you can call UTL_RAW.CAST_TO_RAW('the string') to convert it | +Prompt | for you. Note '48656C6C6F' = 'Hello'. | +Prompt +------------------------------------------------------------------------+ +Prompt + +INSERT INTO test_lobs + VALUES ( 3 + , 'Some data for record 3.' + , BFILENAME(null,null) + , '48656C6C6F'||UTL_RAW.CAST_TO_RAW(' there!')) +/ + + +Prompt +---------------------------------------------------------------------------+ +Prompt | Now it is time to select back the data. If you were to try to SELECT | +Prompt | all three columns from the test_lobs table, SQL*Plus would give you an | +Prompt | error: | +Prompt | SQL> SELECT * FROM test_lobs; | +Prompt | SQL> Column or attribute type can not be displayed by SQL*Plus | +Prompt | | +Prompt | SQL*Plus cannot convert the data behind the locator to hex for the BLOB | +Prompt | column (c3) nor can it interpret a locator for a BFILE (even when null). | +Prompt | In order for this query to run successfully, you would need to enter: | +Prompt | | +Prompt | column c2 format a60 wrap | +Prompt | | +Prompt | and ONLY select columns c1 and c2: | +Prompt +---------------------------------------------------------------------------+ +Prompt + +COLUMN c2 FORMAT a60 WRAP + +Prompt Query CLOB records... +Prompt --------------------- + +SELECT c1, c2 FROM test_lobs; + + +Prompt +---------------------------------------------------------------------------+ +Prompt | In the above query, we are really fetching only the LOB locator. SQL*Plus | +Prompt | will also then fetch the corresponding data. If we use a 3GL or PL/SQL we | +Prompt | can insert data from a character string variable but not select it into | +Prompt | one. For example: | +Prompt +---------------------------------------------------------------------------+ +Prompt + +DECLARE + c_lob VARCHAR2(10); +BEGIN + c_lob := 'Record 4.'; + INSERT INTO test_lobs + VALUES (4,c_lob,BFILENAME(null,null), EMPTY_BLOB()); +END; +/ + +DECLARE + c_lob VARCHAR2(10); +BEGIN + SELECT c2 INTO c_lob + FROM test_lobs + WHERE c1 = 4; +END; +/ + + +Prompt +-------------------------------------------------------------+ +Prompt | NEW IN 8i | +Prompt | ========= | +Prompt | From version 8.1 it is now possible to convert data stored | +Prompt | in longs and long raws to CLOBs and BLOBs respectively. | +Prompt | This is done using the TO_LOB function. | +Prompt +-------------------------------------------------------------+ + +Prompt +Prompt Create LONG_DATA table... +Prompt ------------------------- + +CREATE TABLE long_data ( + c1 NUMBER + , c2 LONG +) +/ + +INSERT INTO long_data + VALUES (1, 'This is some long data to be migrated to a CLOB') +/ + + +Prompt TO_LOB may be used in CREATE TABLE AS SELECT or INSERT...SELECT statements +Prompt --------------------------------------------------------------------------- + +INSERT INTO test_lobs + SELECT 5, TO_LOB(c2), null, null + FROM long_data +/ + +Prompt Query CLOB records... +Prompt --------------------- + +SELECT c1, c2 +FROM test_lobs +WHERE c1 = 5; + +ROLLBACK +/ + +Prompt Creating text file /tmp/rec2.txt... +Prompt ----------------------------------- + +!echo "This is some data for record 2's BFILE column. The data is\nstored in a file called \"rec2.txt\". The file is placed in \n/tmp.\nThe file comprises a total of 4 lines of text." > /tmp/rec2.txt + +Prompt Creating text file /tmp/rec3.txt... +Prompt ----------------------------------- + +!echo "This is some data for record 3's BFILE column. The data is\nstored in a file called \"rec3.txt\". The file is placed in\n/tmp. The file comprises a total of 5 lines of text and\nwill be used to demonstrate the functionality of the \nDBMS_LOB package." > /tmp/rec3.txt + + +Prompt First create the ALIAS for the directory /tmp +Prompt --------------------------------------------- + +CREATE DIRECTORY tmp_dir AS '/tmp' +/ + + +Prompt +------------------------------------------------------------+ +Prompt | Now update the records to associate the BFILE column with | +Prompt | the two files created above. | +Prompt +------------------------------------------------------------+ +Prompt + +UPDATE test_lobs + SET c3 = BFILENAME('TMP_DIR','rec2.txt') + WHERE c1 = 2 +/ + +UPDATE test_lobs + SET c3 = BFILENAME('TMP_DIR','rec3.txt') + WHERE c1 = 3 +/ + +commit; + +Prompt +---------------------------------------------------------------------+ +Prompt | Note the files associated with these columns are READ-ONLY through | +Prompt | Oracle. | +Prompt | They must be maintained via the operating system itself. To access | +Prompt | the BFILE columns you must use the DBMS_LOB package or OCI. | +Prompt | | +Prompt | Getting lengths of the LOB data. Notice the zero lengths where | +Prompt | "empty" locators were specified. | +Prompt +---------------------------------------------------------------------+ + +COLUMN len_c2 FORMAT 9999 +COLUMN len_c3 FORMAT 9999 +COLUMN len_c4 FORMAT 9999 + +SELECT + c1 + , DBMS_LOB.GETLENGTH(c2) len_c2 + , DBMS_LOB.GETLENGTH(c3) len_c3 + , DBMS_LOB.GETLENGTH(c4) len_c4 +FROM test_lobs +/ + + +Prompt +---------------------------------------------------------------------------------+ +Prompt | Using SUBSTR/INSTR - both may be used on all 3 types (CLOB, BLOB and --BFILE) | +Prompt | however for BFILEs the file must first have been opened - hence the functions | +Prompt | may only be used within PL/SQL in this case. | +Prompt | For SUBSTR the parameters are LOB, amount, offset - the opposite to the | +Prompt | standard substr function; for INSTR they are LOB, string, offset, occurence, | +Prompt | the latter 2 defaulting to 1 if omitted. So the following does a substr from | +Prompt | offset 3 in the CLOB for 9 characters and returns the first occurence of the | +Prompt | binary string representing "ello" in the BLOB. | +Prompt +---------------------------------------------------------------------------------+ + +COLUMN sub_c2 FORMAT a10 +COLUMN ins_c4 FORMAT 99 + +SELECT + c1 + , DBMS_LOB.SUBSTR(c2,9,3) sub_c2 + , DBMS_LOB.INSTR(c4,UTL_RAW.CAST_TO_RAW('ello'),1,1) ins_c4 +FROM test_lobs +/ + + +Prompt +----------------------------------------------------------------+ +Prompt | The following PL/SQL block demonstrates some of the DBMS_LOB | +Prompt | functionality. Note the use of "set long 1000" to prevent the | +Prompt | output data from being truncated. | +Prompt +----------------------------------------------------------------+ + +SET SERVEROUTPUT ON +SET LONG 1000 + +DECLARE + b_lob BLOB; + c_lob CLOB; + c_lob2 CLOB; + bf BFILE; + buf varchar2(100) := + 'This is some text to put into a CLOB column in the' || + chr(10) || + 'database. The data spans 2 lines.'; + n number; + fn varchar2(50); --Filename + fd varchar2(50); --Directory alias + + --Procedure to print out the LOB value from c_lob, one line + --at a time.. + + PROCEDURE print_clob IS + + offset number; + len number; + o_buf varchar2(200); + amount number; --} + f_amt number := 0; --}To hold the amount of data + f_amt2 number; --}to be read or that has been + amt2 number := -1; --}read + + BEGIN + len := DBMS_LOB.GETLENGTH(c_lob); + offset := 1; + WHILE len > 0 loop + amount := DBMS_LOB.INSTR(c_lob,chr(10),offset,1); + --Amount returned is the count from the start of the file, + --not from the offset. + IF amount = 0 THEN + --No more linefeeds so need to read remaining data. + amount := len; + amt2 := amount; + ELSE + f_amt2 := amount; --Store position of next LF + amount := amount - f_amt; --Calc position from last LF + f_amt := f_amt2; --Store position for next time + amt2 := amount - 1; --Read up to but not the LF + END IF; + + IF amt2 != 0 THEN + --If there is a linefeed as the first character then ignore. + DBMS_LOB.READ(c_lob,amt2,offset,o_buf); + dbms_output.put_line(o_buf); + END IF; + + len := len - amount; + offset := offset+amount; + END LOOP; + END; + + BEGIN + --For record 1 we did not initialise the locators so do so now. + --Note the RETURNING clause will retrieve the new lob locators so + --we do not need to perform an extra select. The update also + --ensures the corresponding row is locked. + + UPDATE test_lobs SET c2 = EMPTY_CLOB(), c4 = EMPTY_BLOB() + WHERE c1 = 1 RETURNING c2, c4 INTO c_lob, b_lob; + + --Also select the CLOB locator for record 2. + SELECT c2 INTO c_lob2 FROM test_lobs where c1 = 3; + + --Write the above buffer into the CLOB column. Offset is 1, amount + --is the size of the buffer. + DBMS_LOB.WRITE(c_lob,length(buf),1,buf); + + --See what we've got - a line at a time. + print_clob; + + --Add some more data to the above column and row. First commit what + --we have. Note when we commit, under 8.0, our LOB locators we + --previously held in c_lob, b_lob and c_lob2 will be lost and so must be + --reselected. **NEW 8i**: under 8.1 LOB locators may span transactions + --for read purposes, thus we no longer need to reselect c_lob2. + commit; + + --We must lock the row we are going to update through DBMS_LOB. + SELECT c2 INTO c_lob FROM test_lobs WHERE c1 = 1 FOR UPDATE; + + --**NEW 8i**: no longer need this select: + --select c2 into c_lob2 from test_lobs where c1 = 3; + --First append a linefeed then some data from another CLOB. + --Under 8.0 this was a two step process, first you had to get the + --the length of the LOB and secondly write the data using an offset + --of the length plus one. **NEW 8i**: with 8.1 you have a WRITEAPPEND + --function that does the two steps in a single call. + --**NEW 8i**: no longer need to get the length: + --n := DBMS_LOB.GETLENGTH(c_lob)+1; + --DBMS_LOB.WRITE(c_lob,1,n,chr(10)); -- 1 char from offset n + + DBMS_LOB.WRITEAPPEND(c_lob,1,chr(10)); -- **NEW 8i** + DBMS_LOB.APPEND(c_lob,c_lob2); + dbms_output.put_line(chr(10)); + print_clob; + + --Compare c_lob2 with the third line of c_lob - they should be + --the same - in which case remove it. Note the TRIM function takes + --the size at which you wish the LOB to end up, NOT how much you + --want to remove. + n := DBMS_LOB.GETLENGTH(c_lob) - DBMS_LOB.GETLENGTH(c_lob2); + + IF DBMS_LOB.COMPARE(c_lob,c_lob2,DBMS_LOB.GETLENGTH(c_lob2),n+1,1) = 0 THEN + DBMS_LOB.TRIM(c_lob,n-1); + END IF; + + dbms_output.put_line(chr(10)); + print_clob; + + --Remove the data from the column completely, ie use ERASE to + --remove all bytes from offset 1. Note unlike TRIM, ERASE does not + --cause the length of the LOB to be shortened - all bytes are simply + --set to zero. Thus GETLENGTH will return 0 after TRIM'ing all bytes + --but the original length after ERASE'ing. + n := DBMS_LOB.GETLENGTH(c_lob); + DBMS_LOB.ERASE(c_lob,n,1); + + --Add data from c_lob2 plus a trailing linefeed. + DBMS_LOB.COPY(c_lob,c_lob2,DBMS_LOB.GETLENGTH(c_lob2),1,1); + + --**NEW 8i**: could simply use WRITEAPPEND here. + n := DBMS_LOB.GETLENGTH(c_lob2)+1; + DBMS_LOB.WRITE(c_lob,1,n,chr(10)); -- 1 char from offset n + + --Now append the column with data read from one of the BFILE + --columns. + select c3 into bf from test_lobs where c1 = 3; + + --First get and output the file details. + DBMS_LOB.FILEGETNAME(bf,fd,fn); + dbms_output.put_line(chr(10)); + dbms_output.put_line('Appending data from file '||fn|| + ' in directory aliased by '||fd||':'); + dbms_output.put_line(chr(10)); + --Open the file to read from it - first checking that it does in + --fact still exist in the O/S and that it is not already open. + + IF DBMS_LOB.FILEEXISTS(bf) = 1 and + DBMS_LOB.FILEISOPEN(bf) = 0 THEN + DBMS_LOB.FILEOPEN(bf); + END IF; + + DBMS_LOB.LOADFROMFILE(c_lob,bf,DBMS_LOB.GETLENGTH(bf),n+1,1); + DBMS_LOB.FILECLOSE(bf); -- could use DBMS_LOB.FILECLOSEALL; + print_clob; + + commit; + END; +/ + +COMMIT; + +SELECT c1, c2 +FROM test_lobs +/ + + +Prompt +------------------------------------------------------------------------+ +Prompt | An important thing to note when using LOB locators within DBMS_LOB | +Prompt | and PL/SQL is that a given locator always gives a read consistent | +Prompt | image from when it was selected. You will see any changes that you | +Prompt | make to the LOB using that locator and DBMS_LOB, but not those made, | +Prompt | even in the same transaction, through other LOB locators pointing to | +Prompt | the same LOB values or made via SQL directly. For example: | +Prompt +------------------------------------------------------------------------+ + +DECLARE + c_lob CLOB; +BEGIN + + SELECT c2 + INTO c_lob + FROM test_lobs + WHERE c1 = 1; + + DBMS_OUTPUT.PUT_LINE('Before update length of c2 is '|| + DBMS_LOB.GETLENGTH(c_lob)); + + UPDATE TEST_LOBS + SET c2 = 'This is a string.' where c1 = 1; + + DBMS_OUTPUT.PUT_LINE('After update length of c2 is '|| + DBMS_LOB.GETLENGTH(c_lob)); + + SELECT c2 + INTO c_lob + FROM test_lobs + WHERE c1 = 1; + + DBMS_OUTPUT.PUT_LINE('After reselecting locator length of c2 is '|| + DBMS_LOB.GETLENGTH(c_lob)); + + ROLLBACK; + +END; +/ + +COMMIT; + +Prompt +--------------------------------------------------------------------------+ +Prompt | NEW IN 8i | +Prompt | ========= | +Prompt | The following PL/SQL blocks demonstrate the remaining new DBMS_LOB | +Prompt | functionality introduced in version 8.1. | +Prompt | | +Prompt | Temporary LOBs | +Prompt | ============== | +Prompt | In version 8.1 it is now possible to create temporary LOBs. These are | +Prompt | LOB locators that point to LOB values held in the user's temporary | +Prompt | tablespace. Temporary LOBs are automatically initialised upon creation | +Prompt | and exist for the duration specified in the create command or until | +Prompt | explicitly freed by the user. The duration of a temporary LOB may be | +Prompt | be session or call. At the end of the given duration the temporary | +Prompt | LOB is automatically deleted. Temporary LOBs can be used in the | +Prompt | same way as normal internal LOBs through the DBMS_LOB package (note | +Prompt | there is no temporary version of a BFILE), however being only part of | +Prompt | the temporary tablespace they are not permanently stored in the database | +Prompt | and they cause no rollback or undo information to be generated. | +Prompt | Temporary LOBs may be cached though. Because versioning (ie keeping | +Prompt | copies of pages prior to updates) is not performed for temporary LOBs, | +Prompt | if a temporary LOB locator is copied and then used to update the LOB | +Prompt | value, the whole LOB value must be copied in order to maintain a read | +Prompt | consistent image via both locators. For this reason it is recommended | +Prompt | that whenever LOB locators are passed as IN OUT or OUT parameters to | +Prompt | procedures, functions or methods, NOCOPY is specified so they are | +Prompt | passed by reference. | +Prompt | | +Prompt | The following example uses a temporary LOB to reverse one of the LOB | +Prompt | values in the table and then inserts the reversed LOB as a new row. | +Prompt +--------------------------------------------------------------------------+ + +DECLARE + c_lob CLOB; --permanent LOB locator + t_lob CLOB; --temporary LOB locator + buf varchar2(32000); --}this example assumes the LOB is + buf2 varchar2(32000); --}less than 32K. + chunk number; + len number; + offset number; + amount number; + + BEGIN + + SELECT c2 INTO c_lob FROM test_lobs WHERE c1 = 1; + + --Create a temporary LOB. The parameters to CREATETEMPORARY are + --locator, use caching or not and duration. Set no caching and a + --duration of call since the temporary LOB is not required outside + --of this PL/SQL block. + DBMS_LOB.CREATETEMPORARY(t_lob,FALSE,DBMS_LOB.CALL); --**NEW 8i** + + --**NEW 8i**: Use GETCHUNKSIZE to get the amount of space used in a LOB + --chunk for storing the LOB value. Using this amount for reads and + --writes of the LOB will improve performance. + chunk := DBMS_LOB.GETCHUNKSIZE(c_lob); + DBMS_OUTPUT.PUT_LINE('Chunksize of column c2 is '||chunk); + DBMS_OUTPUT.PUT_LINE('Chunksize of temporary LOB is '|| + DBMS_LOB.GETCHUNKSIZE(t_lob)); --for info only + + len := DBMS_LOB.GETLENGTH(c_lob); + offset := 1; + buf := null; + + WHILE offset < len loop + IF len - (offset-1) > chunk then + amount := chunk; + ELSE + amount := len - (offset-1); + END IF; + buf2 := null; + DBMS_LOB.READ(c_lob,amount,offset,buf2); + buf := buf||buf2; + offset := offset + amount; + END LOOP; + + --Reverse the read data and write it to the temporary LOB. + buf2 := null; + FOR i IN reverse 1..len LOOP + buf2 := buf2||substr(buf,i,1); + END LOOP; + + --Write the whole lot in one go. Note, if this was a large + --amount of data then ideally it should be written using the + --available chunksize of the temporary LOB. + DBMS_LOB.WRITEAPPEND(t_lob,len,buf2); --**NEW 8i** + + --Now insert a new row into the table setting the CLOB column to + --the value of the temporary LOB. This can be done in one of + --two ways: + --(i) A new row can be inserted with an empty locator, the locator + -- retrieved and the LOB value copied with DBMS_LOB.COPY. + --(ii) A new row can be inserted passing the temporary LOB locator + -- as a bind variable to the insert. + -- + --Using the second method: + INSERT INTO test_lobs VALUES (5,t_lob,null,null) RETURNING c2 INTO c_lob; + + --Free the temporary LOB explicitly. + IF DBMS_LOB.ISTEMPORARY(t_lob) = 1 THEN + DBMS_LOB.FREETEMPORARY(t_lob); + END IF; + + DBMS_OUTPUT.PUT_LINE('Length of CLOB inserted into record 5 is '|| + DBMS_LOB.GETLENGTH(c_lob)); + COMMIT; + + END; +/ + +Prompt Query CLOB records... +Prompt --------------------- + +SELECT c1, c2 +FROM test_lobs +WHERE c1 = 5 +/ + +Prompt +---------------------------------------------------------------------------+ +Prompt | OPEN AND CLOSE OPERATIONS | +Prompt | ========================= | +Prompt | Under version 8.0 the only concept of opening and closing a LOB applies | +Prompt | to BFILEs and the opening and closing of the physical O/S files they | +Prompt | represent. **NEW 8i**: With 8.1 it is now possible to open and close | +Prompt | any type of LOB. The new calls introduced for this functionality are | +Prompt | DBMS_LOB.OPEN, DBMS_LOB.CLOSE and DBMS_LOB.ISOPEN. When the given | +Prompt | locator is a BFILE, these three routines behave as DBMS_LOB.FILEOPEN, | +Prompt | DBMS_LOB.FILECLOSE and DBMS_LOB.FILEISOPEN. When applied to internal | +Prompt | LOBs they have the effect of batching up any writes such that triggers | +Prompt | on an extensible index will not fire until the DBMS_LOB.CLOSE is called. | +Prompt | When a LOB is opened it is with a mode of either read-only or read/write. | +Prompt | Setting this mode to read-only, prevents any writes from being performed | +Prompt | on the LOB in the current transaction until the LOB is closed. Note it | +Prompt | is an error to attempt to open a BFILE for read/write. The concept of | +Prompt | openness itself applies to a LOB rather than a locator, hence a LOB may | +Prompt | only be opened once within a transaction and closed only when open. | +Prompt | Attempting to do otherwise will result in an error. | +Prompt | | +Prompt | NOTE: | +Prompt | ===== | +Prompt | The following code segment will give: | +Prompt | | +Prompt | ORA-22294: cannot update a LOB opened in read-only mode | +Prompt | Closing LOB via locator 2 | +Prompt +---------------------------------------------------------------------------+ + +DECLARE + + c_lob1 CLOB; + c_lob2 CLOB; + + BEGIN + -- Select without locking the LOB. + SELECT c2 INTO c_lob1 FROM test_lobs WHERE c1 = 2; + c_lob2 := c_lob1; + + -- Open the LOB as read-only using locator 1. + DBMS_LOB.OPEN(c_lob1,DBMS_LOB.LOB_READONLY); --**NEW 8i** + + --Writes are not permitted. The following gives an error: + BEGIN + DBMS_LOB.WRITEAPPEND(c_lob1,5,'Hello'); --**NEW 8i** + EXCEPTION + WHEN others THEN + DBMS_OUTPUT.PUT_LINE(sqlerrm); + END; + + -- Commit and rollback are allowed because no transaction is started. + -- The LOB will still be open afterwards. + + ROLLBACK; + + -- Close - can use either locator. + IF DBMS_LOB.ISOPEN(c_lob2) = 1 THEN --**NEW 8i** + DBMS_OUTPUT.PUT_LINE('Closing LOB via locator 2'); + DBMS_LOB.CLOSE(c_lob2); --**NEW 8i** + END IF; + + IF DBMS_LOB.ISOPEN(c_lob1) = 1 THEN --**NEW 8i** + DBMS_OUTPUT.PUT_LINE('Closing LOB via locator 1'); + DBMS_LOB.CLOSE(c_lob1); --**NEW 8i** + END IF; + + -- To open for read/write the record in the database must be locked. + SELECT c2 INTO c_lob1 FROM test_lobs WHERE c1 = 2 FOR UPDATE; + + DBMS_LOB.OPEN(c_lob1,DBMS_LOB.LOB_READWRITE); --**NEW 8i** + DBMS_LOB.WRITEAPPEND(c_lob1,5,'Hello'); --**NEW 8i** + DBMS_LOB.WRITEAPPEND(c_lob1,7,' there.'); --**NEW 8i** + + -- The LOB MUST be closed before committing or rolling back. + DBMS_LOB.CLOSE(c_lob1); --**NEW 8i** + + COMMIT; + + END; +/ + +Prompt Query CLOB records... +Prompt --------------------- + +SELECT c2 +FROM test_lobs +WHERE c1 = 2 +/ diff --git a/idev/example_move_table.sql b/idev/example_move_table.sql new file mode 100644 index 0000000..5130e6d --- /dev/null +++ b/idev/example_move_table.sql @@ -0,0 +1,17 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_move_table.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL syntax used to move a table to an alternative | +-- | tablespace. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +ALTER TABLE emp MOVE TABLESPACE users2 STORAGE (INITIAL 10M NEXT 1M); diff --git a/idev/example_partition_range_date_oracle_8.sql b/idev/example_partition_range_date_oracle_8.sql new file mode 100644 index 0000000..bd6a17c --- /dev/null +++ b/idev/example_partition_range_date_oracle_8.sql @@ -0,0 +1,71 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_partition_range_date_oracle_8.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL syntax used to create and maintain range partitions | +-- | in Oracle8. The table in this example is partitioned by a date | +-- | range. In Oracle8, only range partitions are available. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CONNECT scott/tiger + +/* + ** +-----------------------------------+ + ** | DROP ALL OBJECTS | + ** +-----------------------------------+ +*/ + +DROP TABLE emp_date_part CASCADE CONSTRAINTS +/ + + +/* + ** +-------------------------------------------------+ + ** | CREATE (Range) PARTITIONED TABLE | + ** | ----------------------------------------------- | + ** | Create testing table partitioned by a | + ** | "range" of DATE values. | + ** | | + ** | NOTE: The only functions permitted in the | + ** | 'VALUES LESS THAN (value1, value2 ..., valueN)' | + ** | clause are TO_DATE and RPAD. | + ** +-------------------------------------------------+ +*/ + +CREATE TABLE emp_date_part ( + empno NUMBER(15) NOT NULL + , ename VARCHAR2(100) + , sal NUMBER(7,2) + , hire_date DATE NOT NULL +) +TABLESPACE users +STORAGE ( + INITIAL 128K + NEXT 128K + PCTINCREASE 0 + MAXEXTENTS UNLIMITED +) +PARTITION BY RANGE (hire_date) ( + PARTITION emp_date_part_Q1_2001_part + VALUES LESS THAN (TO_DATE('01-APR-2001', 'DD-MON-YYYY')) + TABLESPACE part_1_data_tbs, + PARTITION emp_date_part_Q2_2001_part + VALUES LESS THAN (TO_DATE('01-JUL-2001', 'DD-MON-YYYY')) + TABLESPACE part_2_data_tbs, + PARTITION emp_date_part_Q3_2001_part + VALUES LESS THAN (TO_DATE('01-OCT-2001', 'DD-MON-YYYY')) + TABLESPACE part_3_data_tbs, + PARTITION emp_date_part_Q4_2001_part + VALUES LESS THAN (TO_DATE('01-JAN-2002', 'DD-MON-YYYY')) + TABLESPACE part_4_data_tbs +) +/ + diff --git a/idev/example_partition_range_number_oracle_8.sql b/idev/example_partition_range_number_oracle_8.sql new file mode 100644 index 0000000..fa9122b --- /dev/null +++ b/idev/example_partition_range_number_oracle_8.sql @@ -0,0 +1,1258 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_partition_range_number_oracle_8.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example SQL syntax used to create and maintain range partitions | +-- | in Oracle8. The table in this example is partitioned by a | +-- | number range. In Oracle8, only range partitions are available. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CONNECT scott/tiger + +/* + ** +-----------------------------------+ + ** | DROP ALL OBJECTS | + ** +-----------------------------------+ +*/ + +DROP TABLE emp_part CASCADE CONSTRAINTS +/ +DROP VIEW less_view +/ +DROP TABLE new_less CASCADE CONSTRAINTS +/ +DROP TABLE less50 CASCADE CONSTRAINTS +/ +DROP TABLE less100 CASCADE CONSTRAINTS +/ +DROP TABLE less150 CASCADE CONSTRAINTS +/ +DROP TABLE less200 CASCADE CONSTRAINTS +/ + + +DROP TABLESPACE part_1_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_2_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_3_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_4_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_5_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_6_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_7_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_8_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_9_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_10_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_max_data_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_move_data_tbs INCLUDING CONTENTS +/ + +DROP TABLESPACE part_1_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_2_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_3_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_4_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_5_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_6_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_7_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_8_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_9_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_10_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_max_idx_tbs INCLUDING CONTENTS +/ +DROP TABLESPACE part_move_idx_tbs INCLUDING CONTENTS +/ + + + +/* + ** +-----------------------------------+ + ** | CREATE data TABLESPACES | + ** +-----------------------------------+ +*/ + + +CREATE TABLESPACE part_1_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_1_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_2_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_2_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_3_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_3_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_4_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_4_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_5_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_5_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_6_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_6_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_7_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_7_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_8_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_8_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_9_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_9_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_10_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_10_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_max_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_max_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_move_data_tbs + LOGGING DATAFILE '/u10/app/oradata/OEM1DB/part_move_data_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + + +/* + ** +-----------------------------------+ + ** | CREATE index TABLESPACES | + ** +-----------------------------------+ +*/ + + +CREATE TABLESPACE part_1_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_1_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_2_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_2_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_3_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_3_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_4_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_4_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_5_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_5_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_6_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_6_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_7_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_7_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_8_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_8_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_9_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_9_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_10_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_10_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_max_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_max_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + +CREATE TABLESPACE part_move_idx_tbs + LOGGING DATAFILE '/u09/app/oradata/OEM1DB/part_move_idx_tbs01.dbf' SIZE 10M REUSE + AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED + EXTENT MANAGEMENT LOCAL +/ + + +/* + ** +------------------------------------------+ + ** | CREATE (Range) PARTITIONED TABLE | + ** | ---------------------------------------- | + ** | Create testing table partitioned by a | + ** | "range" of NUMERIC values. | + ** +------------------------------------------+ +*/ + +CREATE TABLE emp_part ( + empno NUMBER(15) NOT NULL + , ename VARCHAR2(100) + , sal NUMBER(10,2) + , deptno NUMBER(15) +) +TABLESPACE users +STORAGE ( + INITIAL 1M + NEXT 1M + PCTINCREASE 0 + MAXEXTENTS UNLIMITED +) +PARTITION BY RANGE (empno) ( + PARTITION emp_part_50_part + VALUES LESS THAN (50) + TABLESPACE part_1_data_tbs, + PARTITION emp_part_100_part + VALUES LESS THAN (100) + TABLESPACE part_2_data_tbs, + PARTITION emp_part_150_part + VALUES LESS THAN (150) + TABLESPACE part_3_data_tbs, + PARTITION emp_part_200_part + VALUES LESS THAN (200) + TABLESPACE part_4_data_tbs, + PARTITION emp_part_MAX_part + VALUES LESS THAN (MAXVALUE) + TABLESPACE part_max_data_tbs +) +/ + +/* + ** +-------------------------------------------------------------+ + ** | CREATE PARTITIONED INDEX (Local Prefixed) | + ** | ----------------------------------------------------------- | + ** | This index is considered "prefixed" because the index key | + ** | 'empno' is identical to the partitioning key. This index is | + ** | defined as "local". It is thus partitioned automatically by | + ** | Oracle on the same key as the emp_part table; the key being | + ** | 'empno'. | + ** +-------------------------------------------------------------+ +*/ + +CREATE INDEX emp_part_idx1 + ON emp_part(empno) + LOCAL ( + PARTITION emp_part_50_part TABLESPACE part_1_idx_tbs, + PARTITION emp_part_100_part TABLESPACE part_2_idx_tbs, + PARTITION emp_part_150_part TABLESPACE part_3_idx_tbs, + PARTITION emp_part_200_part TABLESPACE part_4_idx_tbs, + PARTITION emp_part_MAX_part TABLESPACE part_max_idx_tbs + ) +/ + + +/* + ** +---------------------------------------------------------------+ + ** | CREATE PARTITIONED INDEX (Global Prefixed) | + ** | ------------------------------------------------------------- | + ** | This index is considered "prefixed" because the index key | + ** | 'deptno' is identical to the partitioning key. This index is | + ** | defined as "global". It is thus NOT partitioned automatically | + ** | by Oracle on the same key as the emp_part table. | + ** | | + ** | Note that global indexes MUST have a MAXVALUE partition | + ** | defined. | + ** +---------------------------------------------------------------+ +*/ + +CREATE INDEX emp_part_idx2 + ON emp_part(deptno) + GLOBAL PARTITION BY RANGE (deptno) ( + PARTITION emp_part_D10_part + VALUES LESS THAN (10) + TABLESPACE part_1_idx_tbs, + PARTITION emp_part_D20_part + VALUES LESS THAN (20) + TABLESPACE part_2_idx_tbs, + PARTITION emp_part_D30_part + VALUES LESS THAN (30) + TABLESPACE part_3_idx_tbs, + PARTITION emp_part_D40_part + VALUES LESS THAN (40) + TABLESPACE part_4_idx_tbs, + PARTITION emp_part_D50_part + VALUES LESS THAN (50) + TABLESPACE part_5_idx_tbs, + PARTITION emp_part_D60_part + VALUES LESS THAN (60) + TABLESPACE part_6_idx_tbs, + PARTITION emp_part_D70_part + VALUES LESS THAN (70) + TABLESPACE part_7_idx_tbs, + PARTITION emp_part_D80_part + VALUES LESS THAN (80) + TABLESPACE part_8_idx_tbs, + PARTITION emp_part_D90_part + VALUES LESS THAN (90) + TABLESPACE part_9_idx_tbs, + PARTITION emp_part_D100_part + VALUES LESS THAN (100) + TABLESPACE part_10_idx_tbs, + PARTITION emp_part_DMAX_part + VALUES LESS THAN (MAXVALUE) + TABLESPACE part_max_idx_tbs + ) +/ + +/* + ** +-------------------------------------------------------------+ + ** | INSERT VALUES | + ** | ----------------------------------------------------------- | + ** | Insert test values into the "emp_part" table. | + ** +-------------------------------------------------------------+ +*/ + +INSERT INTO emp_part VALUES (10, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (11, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (12, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (13, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (14, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (15, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (16, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (17, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (18, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (19, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (20, 'JHUNTER', '185000.00', 10); +INSERT INTO emp_part VALUES (21, 'MHUNTER', '125000.00', 10); +INSERT INTO emp_part VALUES (22, 'AHUNTER', '135000.00', 10); +INSERT INTO emp_part VALUES (23, 'MDUNN', '115000.00', 10); +INSERT INTO emp_part VALUES (24, 'JHUNTER', '115000.00', 10); +INSERT INTO emp_part VALUES (25, 'JHUNTER', '116000.00', 10); +INSERT INTO emp_part VALUES (26, 'MHUNTER', '117000.00', 10); +INSERT INTO emp_part VALUES (27, 'MHUNTER', '118000.00', 10); +INSERT INTO emp_part VALUES (28, 'MHUNTER', '119000.00', 10); +INSERT INTO emp_part VALUES (29, 'MHUNTER', '120000.00', 10); +INSERT INTO emp_part VALUES (30, 'MDUNN', '90000.00', 10); +INSERT INTO emp_part VALUES (50, 'AHUNTER', '80000.00', 20); +INSERT INTO emp_part VALUES (51, 'TFORNER', '125000.00', 20); +INSERT INTO emp_part VALUES (52, 'TFORNER', '135000.00', 20); +INSERT INTO emp_part VALUES (53, 'TFORNER', '145000.00', 20); +INSERT INTO emp_part VALUES (54, 'CROBERTS', '155000.00', 20); +INSERT INTO emp_part VALUES (55, 'AHUNTER', '165000.00', 20); +INSERT INTO emp_part VALUES (56, 'LBAACKE', '175000.00', 20); +INSERT INTO emp_part VALUES (99, 'JHUNTER', '185000.00', 20); +INSERT INTO emp_part VALUES (100, 'AHUNTER', '113000.00', 20); +INSERT INTO emp_part VALUES (101, 'LBAACKE', '112000.00', 30); +INSERT INTO emp_part VALUES (102, 'AHUNTER', '111000.00', 30); +INSERT INTO emp_part VALUES (103, 'GCRANE', '111000.00', 30); +INSERT INTO emp_part VALUES (104, 'AHUNTER', '115000.00', 30); +INSERT INTO emp_part VALUES (105, 'LBAACKE', '135000.00', 30); +INSERT INTO emp_part VALUES (106, 'AHUNTER', '100000.00', 30); +INSERT INTO emp_part VALUES (107, 'LBAACKE', '110000.00', 30); +INSERT INTO emp_part VALUES (108, 'AHUNTER', '119000.00', 30); +INSERT INTO emp_part VALUES (109, 'LBAACKE', '118000.00', 30); +INSERT INTO emp_part VALUES (110, 'AHUNTER', '117000.00', 30); +INSERT INTO emp_part VALUES (111, 'SCOLLINS', '116000.00', 30); +INSERT INTO emp_part VALUES (112, 'AHUNTER', '115000.00', 30); +INSERT INTO emp_part VALUES (113, 'ESMITH', '114000.00', 30); +INSERT INTO emp_part VALUES (114, 'AHUNTER', '113000.00', 30); +INSERT INTO emp_part VALUES (115, 'LBAACKE', '215000.00', 30); +INSERT INTO emp_part VALUES (120, 'AHUNTER', '515000.00', 30); +INSERT INTO emp_part VALUES (130, 'GCRANE', '415000.00', 30); +INSERT INTO emp_part VALUES (131, 'AHUNTER', '315000.00', 30); +INSERT INTO emp_part VALUES (150, 'LBAACKE', '215000.00', 40); +INSERT INTO emp_part VALUES (151, 'JHUNTER', '44000.00', 40); +INSERT INTO emp_part VALUES (152, 'MHUNTER', '55000.00', 40); +INSERT INTO emp_part VALUES (153, 'EDUNN', '65000.00', 40); +INSERT INTO emp_part VALUES (154, 'MDUNN', '75000.00', 40); +INSERT INTO emp_part VALUES (155, 'SCOLLINS', '85000.00', 40); +INSERT INTO emp_part VALUES (156, 'GCRANE', '95000.00', 40); +INSERT INTO emp_part VALUES (157, 'ESMITH', '25000.00', 40); +INSERT INTO emp_part VALUES (161, 'SCOLLINS', '25000.00', 40); +INSERT INTO emp_part VALUES (162, 'LBLACK', '25000.00', 40); +INSERT INTO emp_part VALUES (163, 'LBAACKE', '25000.00', 40); +INSERT INTO emp_part VALUES (164, 'TDRAKE', '25000.00', 40); +INSERT INTO emp_part VALUES (165, 'SCOLLINS', '25000.00', 40); +INSERT INTO emp_part VALUES (166, 'GCRANE', '35000.00', 40); +INSERT INTO emp_part VALUES (167, 'LBAACKE', '45000.00', 40); +INSERT INTO emp_part VALUES (168, 'LBLACK', '55000.00', 40); +INSERT INTO emp_part VALUES (169, 'SCOLLINS', '65000.00', 40); +INSERT INTO emp_part VALUES (170, 'TDRAKE', '75000.00', 40); +INSERT INTO emp_part VALUES (171, 'LBAACKE', '85000.00', 40); +INSERT INTO emp_part VALUES (172, 'ESMITH', '95000.00', 40); +INSERT INTO emp_part VALUES (192, 'SCOLLINS', '95000.00', 40); +INSERT INTO emp_part VALUES (193, 'TDRAKE', '95000.00', 40); +INSERT INTO emp_part VALUES (194, 'LBAACKE', '95000.00', 40); +INSERT INTO emp_part VALUES (195, 'LBLACK', '95000.00', 40); +INSERT INTO emp_part VALUES (196, 'LBAACKE', '95000.00', 40); +INSERT INTO emp_part VALUES (197, 'LBLACK', '95000.00', 40); +INSERT INTO emp_part VALUES (198, 'LBAACKE', '95000.00', 40); +INSERT INTO emp_part VALUES (199, 'ESMITH', '95000.00', 40); +INSERT INTO emp_part VALUES (200, 'SCOLLINS', '95000.00', 40); +INSERT INTO emp_part VALUES (201, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (202, 'LBAACKE', '95000.00', 50); +INSERT INTO emp_part VALUES (203, 'TDRAKE', '95000.00', 50); +INSERT INTO emp_part VALUES (204, 'SCOLLINS', '95000.00', 50); +INSERT INTO emp_part VALUES (205, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (206, 'LBAACKE', '95000.00', 50); +INSERT INTO emp_part VALUES (207, 'TFORNER', '95000.00', 50); +INSERT INTO emp_part VALUES (208, 'LBAACKE', '95000.00', 50); +INSERT INTO emp_part VALUES (209, 'ESMITH', '95000.00', 50); +INSERT INTO emp_part VALUES (210, 'LBAACKE', '95000.00', 50); +INSERT INTO emp_part VALUES (220, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (230, 'SCOLLINS', '95000.00', 50); +INSERT INTO emp_part VALUES (240, 'GCRANE', '95000.00', 50); +INSERT INTO emp_part VALUES (250, 'LBAACKE', '95000.00', 50); +INSERT INTO emp_part VALUES (260, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (270, 'ESMITH', '95000.00', 50); +INSERT INTO emp_part VALUES (280, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (290, 'TDRAKE', '95000.00', 50); +INSERT INTO emp_part VALUES (291, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (292, 'GCRANE', '95000.00', 50); +INSERT INTO emp_part VALUES (293, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (294, 'TDRAKE', '95000.00', 50); +INSERT INTO emp_part VALUES (295, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (296, 'JHUNTER', '95000.00', 50); +INSERT INTO emp_part VALUES (297, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (298, 'TDRAKE', '95000.00', 50); +INSERT INTO emp_part VALUES (299, 'LBLACK', '95000.00', 50); +INSERT INTO emp_part VALUES (300, 'TDRAKE', '95000.00', 60); +INSERT INTO emp_part VALUES (301, 'LBLACK', '95000.00', 60); +INSERT INTO emp_part VALUES (302, 'GCRANE', '95000.00', 60); +INSERT INTO emp_part VALUES (303, 'TDRAKE', '95000.00', 60); +INSERT INTO emp_part VALUES (304, 'JHUNTER', '95000.00', 60); +INSERT INTO emp_part VALUES (305, 'TDRAKE', '95000.00', 60); +INSERT INTO emp_part VALUES (306, 'ESMITH', '95000.00', 60); +INSERT INTO emp_part VALUES (307, 'TDRAKE', '95000.00', 60); +INSERT INTO emp_part VALUES (308, 'JHUNTER', '95000.00', 60); +INSERT INTO emp_part VALUES (309, 'TDRAKE', '95000.00', 60); +INSERT INTO emp_part VALUES (310, 'GCRANE', '95000.00', 60); +INSERT INTO emp_part VALUES (320, 'TDRAKE', '95000.00', 60); +INSERT INTO emp_part VALUES (330, 'ESMITH', '95000.00', 60); +INSERT INTO emp_part VALUES (340, 'TDRAKE', '95000.00', 60); +INSERT INTO emp_part VALUES (350, 'GCRANE', '95000.00', 70); +INSERT INTO emp_part VALUES (360, 'TDRAKE', '95000.00', 70); +INSERT INTO emp_part VALUES (370, 'JHUNTER', '95000.00', 70); +INSERT INTO emp_part VALUES (380, 'GCRANE', '95000.00', 70); +INSERT INTO emp_part VALUES (390, 'ESMITH', '95000.00', 70); +INSERT INTO emp_part VALUES (391, 'TDRAKE', '95000.00', 70); +INSERT INTO emp_part VALUES (392, 'GCRANE', '95000.00', 70); +INSERT INTO emp_part VALUES (393, 'TDRAKE', '95000.00', 70); +INSERT INTO emp_part VALUES (394, 'ESMITH', '95000.00', 70); +INSERT INTO emp_part VALUES (395, 'TDRAKE', '95000.00', 70); +INSERT INTO emp_part VALUES (396, 'GCRANE', '95000.00', 70); +INSERT INTO emp_part VALUES (397, 'TDRAKE', '95000.00', 70); +INSERT INTO emp_part VALUES (398, 'JHUNTER', '95000.00', 70); +INSERT INTO emp_part VALUES (399, 'TDRAKE', '95000.00', 70); +INSERT INTO emp_part VALUES (400, 'GCRANE', '95000.00', 80); +INSERT INTO emp_part VALUES (401, 'TDRAKE', '95000.00', 80); +INSERT INTO emp_part VALUES (402, 'ESMITH', '95000.00', 80); +INSERT INTO emp_part VALUES (403, 'GCRANE', '95000.00', 80); +INSERT INTO emp_part VALUES (404, 'GCRANE', '95000.00', 80); +INSERT INTO emp_part VALUES (405, 'TDRAKE', '95000.00', 80); +INSERT INTO emp_part VALUES (406, 'JHUNTER', '95000.00', 80); +INSERT INTO emp_part VALUES (407, 'TDRAKE', '95000.00', 80); +INSERT INTO emp_part VALUES (408, 'GCRANE', '95000.00', 80); +INSERT INTO emp_part VALUES (409, 'TDRAKE', '95000.00', 80); +INSERT INTO emp_part VALUES (410, 'GCRANE', '95000.00', 80); +INSERT INTO emp_part VALUES (420, 'TDRAKE', '95000.00', 80); +INSERT INTO emp_part VALUES (430, 'ESMITH', '95000.00', 80); +INSERT INTO emp_part VALUES (440, 'TDRAKE', '95000.00', 80); +INSERT INTO emp_part VALUES (450, 'GCRANE', '95000.00', 90); +INSERT INTO emp_part VALUES (460, 'ESMITH', '95000.00', 90); +INSERT INTO emp_part VALUES (470, 'TDRAKE', '95000.00', 90); +INSERT INTO emp_part VALUES (480, 'TDRAKE', '95000.00', 90); +INSERT INTO emp_part VALUES (490, 'JHUNTER', '95000.00', 90); +INSERT INTO emp_part VALUES (500, 'GCRANE', '95000.00', 90); +COMMIT; + +/* + ** +-------------------------------------------------------------+ + ** | MOVING PATITIONS | + ** | ----------------------------------------------------------- | + ** | Allows the transfer of table partitions from one tablespace | + ** | to another. The status of the index partitions tied to this | + ** | partition become 'unusable'. In the case of a global index, | + ** | the whole index has to be rebuilt. | + ** | | + ** | You can use the MOVE PARTITION clause of the ALTER TABLE | + ** | statement to re-cluster data and reduce fragmentation, move | + ** | a partition to another tablespace, or modify create-time | + ** | attributes. | + ** | | + ** | When the partition you are moving contains data, | + ** | MOVE PARTITION marks the matching partition in each local | + ** | index, and all global index partitions as unusable. You | + ** | must rebuild these index partitions after issuing | + ** | MOVE PARTITION. Global indexes must also be rebuilt. | + ** | | + ** | You can rebuild the entire index by rebuilding each | + ** | partition individually using the | + ** | ALTER INDEX...REBUILD PARTITION statement. You can perform | + ** | these rebuilds concurrently. You can also simply drop the | + ** | index and re-create it. | + ** | | + ** | If the partition is not empty, MOVE PARTITION marks all | + ** | corresponding local index partitions, all global | + ** | nonpartitioned indexes, and all the partitions of global | + ** | partitioned indexes, UNUSABLE. | + ** | | + ** | RESTRICTIONS: | + ** | You cannot MOVE an entire partitioned table (either heap or | + ** | index organized). You must move individual partitions or | + ** | subpartitions. | + ** | | + ** +-------------------------------------------------------------+ +*/ + +ALTER TABLE emp_part + MOVE PARTITION emp_part_50_part + TABLESPACE part_move_data_tbs +/ + + +/* + ** +-------------------------------------------------------------------+ + ** | REBUILDING INDEXES | + ** | ----------------------------------------------------------------- | + ** | At this point the local index defined on partition "50" is | + ** | marked as "unusable". You only need to rebuild that index | + ** | partition for the local index. | + ** | ORA_DEMO.EMP_PART_IDX1 / EMP_PART_50_PART / (EMPNO) / UNUSABLE/ | + ** | | + ** | Note: All partitions in the global index are marked as "UNUSABLE" | + ** | and will need rebuilt as well. | + ** | | + ** | You might rebuild index partitions for any of the following | + ** | reasons: | + ** | (+) To recover space and improve performance | + ** | (+) To repair a damaged index partition caused by media failure | + ** | (+) To rebuild a local index partition after loading the | + ** | underlying table partition with IMPORT or SQL*Loader | + ** | (+) To rebuild index partitions that have been marked UNUSABLE | + ** | | + ** +-------------------------------------------------------------------+ +*/ + + +/* + ** +-------------------------------------------------------------------+ + ** | LOCAL INDEXES | + ** | ----------------------------------------------------------------- | + ** | 1. ALTER INDEX...REBUILD PARTITION/SUBPARTITION--this statement | + ** | rebuilds an index partition or subpartition unconditionally. | + ** | 2. ALTER TABLE...MODIFY PARTITION/SUBPARTITION...REBUILD | + ** | UNUSABLE LOCAL INDEXES--this statement finds all of the | + ** | unusable indexes for the given table partition or | + ** | subpartition and rebuilds them. It only rebuilds an index | + ** | partition if it has been marked UNUSABLE. | + ** | | + ** | The REBUILD UNUSABLE LOCAL INDEXES clause of the | + ** | ALTER TABLE...MODIFY PARTITION does not allow you to specify any | + ** | new attributes for the rebuilt index partition. | + ** +-------------------------------------------------------------------+ +*/ + +ALTER INDEX emp_part_idx1 + REBUILD PARTITION emp_part_50_part + TABLESPACE part_move_idx_tbs +/ + +-- <-- ... OR ... --> + +ALTER TABLE emp_part + MODIFY PARTITION emp_part_50_part + REBUILD UNUSABLE LOCAL INDEXES +/ + +/* + ** +-------------------------------------------------------------------+ + ** | GLOBAL INDEXES | + ** | ----------------------------------------------------------------- | + ** | You can rebuild global index partitions in two ways: | + ** | 1. Rebuild each partition by issuing the | + ** | ALTER INDEX...REBUILD PARTITION statement (you can run the | + ** | rebuilds concurrently). | + ** | 2. Drop the index and re-create it. | + ** | Note: This second method is more efficient because the table | + ** | is scanned only once. | + ** | | + ** | NOTE: There is no short-cut to rebuilding all partitions within | + ** | a global index partition. You will need to rebuild all | + ** | partitions seperatley. | + ** +-------------------------------------------------------------------+ +*/ + +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D10_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D20_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D30_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D40_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D50_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D60_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D70_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D80_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D90_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D100_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_DMAX_part +/ + + +/* + ** +--------------------------------------------------------------------+ + ** | ADDING PARTITIONS | + ** | ------------------------------------------------------------------ | + ** | Allows you to add an extra partition beyond the last partition | + ** | as long as the upper limit is not equal to MAXVALUE. Should it | + ** | be equal, then adding a partition would be impossible. SPLIT | + ** | enables you to add intermediate partitions. SPLIT cuts an existing | + ** | partition in half, making two distinct partitions. Applied to the | + ** | upper partition, SPLIT allows you to add an extra partition beyond | + ** | the upper limit. | + ** | | + ** | The first example below would fail since the upper limit is equal | + ** | to MAXVALUE. | + ** | | + ** | In the case of indexes, partitions can only be added to global | + ** | indexes. The upper limit of a global index always being MAXVALUE | + ** | implies that SPLIT is the only possible command. | + ** +--------------------------------------------------------------------+ +*/ + +-- ALTER TABLE emp_part +-- ADD PARTITION emp_part_250_part +-- VALUES LESS THAN (250) +-- TABLESPACE part_4_idx_tbs +-- / +-- ERROR at line 2: +-- ORA-14074: partition bound must collate higher than that of the last partition + + +ALTER TABLE emp_part + SPLIT PARTITION emp_part_MAX_part AT (250) + INTO ( + PARTITION emp_part_250_part + TABLESPACE part_5_data_tbs, + PARTITION emp_part_MAX_part + TABLESPACE part_max_data_tbs + ) +/ + +/* + ** +--------------------------------------------------------------------+ + ** | At the point after the split, the two upper partitions (or the | + ** | "split" partitions will render local partitions (and all global | + ** | indexes UNUSABLE. Local partitions will ONLY be marked as | + ** | 'UNUSABLE' if they contain data. If they do not contain data, they | + ** | will remain as 'USABLE'. | + ** | | + ** | EMP_PART_IDX1 / EMP_PART_250_PART / PART_MAX_DATA_TBS / UNUSABLE | + ** | EMP_PART_IDX1 / EMP_PART_MAX_PART / PART_MAX_DATA_TBS / UNUSABLE | + ** | | + ** | Note that when I rebuild the indexes (to make them usable) I also | + ** | want to change the tablespaces they reside in since they are | + ** | split using the tablespace of the "DATA" partition. | + ** | | + ** | Note: As well as the above two partitions being rendered as | + ** | all global indexe partitions are maked "UNUSABLE". They | + ** | will all require to be rebuilt. | + ** +--------------------------------------------------------------------+ +*/ + + +/* + ** +--------------------------------------------------------------------+ + ** | REBUILD ALL LOCAL INDEXES... | + ** +--------------------------------------------------------------------+ +*/ + +ALTER INDEX emp_part_idx1 + REBUILD PARTITION emp_part_250_part + TABLESPACE part_5_idx_tbs +/ + +ALTER INDEX emp_part_idx1 + REBUILD PARTITION emp_part_max_part + TABLESPACE part_max_idx_tbs +/ + +/* + ** +--------------------------------------------------------------------+ + ** | REBUILD ALL GLOBAL INDEXES... | + ** +--------------------------------------------------------------------+ +*/ + +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D10_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D20_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D30_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D40_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D50_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D60_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D70_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D80_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D90_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D100_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_DMAX_part +/ + + + +/* + ** +--------------------------------------------------------------------+ + ** | DROPPING TABLE PARTITIONS | + ** | ------------------------------------------------------------------ | + ** | Allows the withdrawl of a table or global index partition. The | + ** | DROP of a table partition causes the status of all the partitions | + ** | of the global index to become "UNUSABLE". A complete rebuild of | + ** | the index has to occur to modify the status. | + ** | | + ** | The current row count of "emp_part" is: -> 152 | + ** +--------------------------------------------------------------------+ +*/ + +ALTER TABLE emp_part DROP PARTITION emp_part_100_part +/ + +/* + ** +---------------------------------------------------------------------+ + ** | After dropping partition "emp_part_100_part" the count is: -> 144 | + ** | | + ** | Note: Any global indexes are marked as "UNUSABLE". They will need | + ** | rebuilt. | + ** +---------------------------------------------------------------------+ +*/ + +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D10_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D20_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D30_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D40_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D50_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D60_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D70_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D80_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D90_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D100_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_DMAX_part +/ + + +/* + ** +--------------------------------------------------------------------+ + ** | DROPPING GLOBAL INDEX PARTITIONS | + ** | ------------------------------------------------------------------ | + ** | You cannot explicitly drop a partition of a local index. Instead, | + ** | local index partitions are dropped only when you drop a partition | + ** | from the underlying table. | + ** | | + ** | If a global index partition is empty, you can explicitly drop it | + ** | by issuing the ALTER INDEX...DROP PARTITION statement. But, if a | + ** | global index partition contains data, dropping the partition | + ** | causes the next highest partition to be marked UNUSABLE. For | + ** | example, you would like to drop the index partition P1 and P2 is | + ** | the next highest partition. You must issue the following | + ** | statements: | + ** | | + ** | ALTER INDEX npr DROP PARTITION P1; | + ** | ALTER INDEX npr REBUILD PARTITION P2; | + ** | | + ** | Note: You cannot drop the highest partition in a global index. | + ** +--------------------------------------------------------------------+ +*/ + +ALTER INDEX emp_part_idx2 DROP PARTITION emp_part_D80_part +/ + +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D90_part +/ + + +/* + ** +--------------------------------------------------------------------+ + ** | TRUNCATING PARTITIONS | + ** | ------------------------------------------------------------------ | + ** | Discards all the rows of a table partition while the storage | + ** | allocated may be preserved. This option is not available for | + ** | indexes. Local index partitions are automatically kept up to date | + ** | by Oracle and will remain in the 'USABLE' state. In the case of | + ** | global indexes, the status of ALL the partitions become 'UNUSABLE'.| + ** | | + ** | The current row count of "emp_part" is: -> 144 | + ** | | + ** +--------------------------------------------------------------------+ +*/ + + +ALTER TABLE emp_part TRUNCATE PARTITION emp_part_200_part +/ + + +/* + ** +--------------------------------------------------------------------+ + ** | | + ** | After truncating the "emp_part_200_part" partition, the count | + ** | is: -> 116 and ALL global index partitions need to be rebuilt. | + ** | | + ** +--------------------------------------------------------------------+ +*/ + + +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D10_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D20_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D30_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D40_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D50_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D60_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D70_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D90_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D100_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_DMAX_part +/ + + +/* + ** +--------------------------------------------------------------------+ + ** | SPLITTING PARTITIONS | + ** | ------------------------------------------------------------------ | + ** | Separates the contents of a partition into two distinct partitions.| + ** | The associated index partitions, global and local, become | + ** | 'UNUSABLE'. In the following example, the emp_part_150_part | + ** | partition is divided into two distinct partitions, | + ** | emp_part_100_part and emp_part_150_part. The two partitions are | + ** | redefined in the following values: 50-100 and 100-150. This | + ** | functionality also works on global indexes. | + ** +--------------------------------------------------------------------+ +*/ + + +ALTER TABLE emp_part + SPLIT PARTITION emp_part_150_part AT (100) + INTO ( + PARTITION emp_part_100_part + TABLESPACE part_2_data_tbs, + PARTITION emp_part_150_part + TABLESPACE part_3_data_tbs + ) +/ + + +/* + ** +--------------------------------------------------------------------+ + ** | At the point after the split, the two upper partitions (or the | + ** | "split" partitions will render local partitions (and all global | + ** | indexes UNUSABLE. Local partitions will ONLY be marked as | + ** | 'UNUSABLE' if they contain data. If they do not contain data, they | + ** | will remain as 'USABLE'. | + ** | | + ** | EMP_PART_IDX1 / EMP_PART_100_PART / PART_2_DATA_TBS / UNUSABLE | + ** | EMP_PART_IDX1 / EMP_PART_150_PART / PART_3_DATA_TBS / UNUSABLE | + ** | | + ** | Note that when I rebuild the indexes (to make them usable) I also | + ** | want to change the tablespaces they reside in since they are | + ** | split using the tablespace of the "DATA" partition. | + ** | | + ** | Note: As well as the above two partitions being rendered as | + ** | ALL global indexe partitions are maked "UNUSABLE". They | + ** | will all require to be rebuilt. | + ** +--------------------------------------------------------------------+ +*/ + + +/* + ** +--------------------------------------------------------------------+ + ** | REBUILD ALL LOCAL INDEXES... | + ** +--------------------------------------------------------------------+ +*/ + +ALTER INDEX emp_part_idx1 + REBUILD PARTITION emp_part_100_part + TABLESPACE part_2_idx_tbs +/ + +ALTER INDEX emp_part_idx1 + REBUILD PARTITION emp_part_150_part + TABLESPACE part_3_idx_tbs +/ + +/* + ** +--------------------------------------------------------------------+ + ** | REBUILD ALL GLOBAL INDEXES... | + ** +--------------------------------------------------------------------+ +*/ + +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D10_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D20_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D30_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D40_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D50_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D60_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D70_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D90_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_D100_part +/ +ALTER INDEX emp_part_idx2 + REBUILD PARTITION emp_part_DMAX_part +/ + + +/* + ** +--------------------------------------------------------------------+ + ** | EXCHANGE PARTITIONS | + ** | ------------------------------------------------------------------ | + ** | Allows the transfer of non-partitioned tables into partitions as | + ** | as the reverse. That is the transfer of partitions into | + ** | non-partitioned tables. This option is particualry useful in | + ** | migrating V7 partitioned views into table partitions. Consider the | + ** | following partitioned view based on four tables: less50, less100, | + ** | less150, less200. + ** +--------------------------------------------------------------------+ +*/ + +CREATE TABLE less50 (empno NUMBER(15), empname VARCHAR2(100)); +CREATE TABLE less100 (empno NUMBER(15), empname VARCHAR2(100)); +CREATE TABLE less150 (empno NUMBER(15), empname VARCHAR2(100)); +CREATE TABLE less200 (empno NUMBER(15), empname VARCHAR2(100)); + +CREATE VIEW less_view AS + SELECT * FROM less50 + UNION ALL + SELECT * FROM less100 + UNION ALL + SELECT * FROM less150 + UNION ALL + SELECT * FROM less200 +/ + + +/* + ** +--------------------------------------------------------------------+ + ** | An empty partitioned table needs to be created, within the same | + ** | schema as the underlying tables of the partitioned view. | + ** +--------------------------------------------------------------------+ +*/ + +CREATE TABLE new_less ( + empno NUMBER(15) + , empname VARCHAR2(100) +) +PARTITION BY RANGE (empno) ( + PARTITION new_less_50_part + VALUES LESS THAN (50), + PARTITION new_less_100_part + VALUES LESS THAN (100), + PARTITION new_less_150_part + VALUES LESS THAN (150), + PARTITION new_less_200_part + VALUES LESS THAN (200) +) +/ + +INSERT INTO less50 VALUES ( 0, 'JHUNTER'); +INSERT INTO less50 VALUES (10, 'JHUNTER'); +INSERT INTO less50 VALUES (20, 'JHUNTER'); +INSERT INTO less50 VALUES (30, 'JHUNTER'); +INSERT INTO less50 VALUES (40, 'JHUNTER'); + +INSERT INTO less100 VALUES (50, 'MHUNTER'); +INSERT INTO less100 VALUES (60, 'MHUNTER'); +INSERT INTO less100 VALUES (70, 'MHUNTER'); +INSERT INTO less100 VALUES (80, 'MHUNTER'); +INSERT INTO less100 VALUES (90, 'MHUNTER'); + +INSERT INTO less150 VALUES (100, 'AHUNTER'); +INSERT INTO less150 VALUES (110, 'AHUNTER'); +INSERT INTO less150 VALUES (120, 'AHUNTER'); +INSERT INTO less150 VALUES (130, 'AHUNTER'); +INSERT INTO less150 VALUES (140, 'AHUNTER'); + +INSERT INTO less200 VALUES (150, 'HUNTER'); +INSERT INTO less200 VALUES (160, 'HUNTER'); +INSERT INTO less200 VALUES (170, 'HUNTER'); +INSERT INTO less200 VALUES (180, 'HUNTER'); +INSERT INTO less200 VALUES (190, 'HUNTER'); + +COMMIT; + +/* + ** +---------------------------------------------------------------------+ + ** | Now transfer each underlying table of the view in the corresponding | + ** | partition of the new partitioned table. | + ** +---------------------------------------------------------------------+ +*/ + +ALTER TABLE new_less + EXCHANGE PARTITION new_less_50_part + WITH TABLE less50 + WITH VALIDATION +/ + +ALTER TABLE new_less + EXCHANGE PARTITION new_less_100_part + WITH TABLE less100 + WITH VALIDATION +/ + +ALTER TABLE new_less + EXCHANGE PARTITION new_less_150_part + WITH TABLE less150 + WITH VALIDATION +/ + +ALTER TABLE new_less + EXCHANGE PARTITION new_less_200_part + WITH TABLE less200 + WITH VALIDATION +/ + + +/* + ** +--------------------------------------------------------------------+ + ** | This operation takes a very short time as the updates only take | + ** | place in the data dictionary. There is no physical movement of the | + ** | segments. The structure of the tables to swap partitioned as well | + ** | as non-partitioned must be identical in terms of types, columns | + ** | and sizes, as well as number of columns. | + ** +--------------------------------------------------------------------+ +*/ + + + +/* + ** +--------------------------------------------------------------------+ + ** | UNUSABLE INDEXES | + ** | ------------------------------------------------------------------ | + ** | Both local and global indexes can be renered with the status | + ** | of 'UNUSABLE'. This happens mostly during maintenance operations | + ** | on the partitioned table. (i.e. Truncates, Splits, Moves, etc.) | + ** | When an index partition is in the 'UNUSABLE' state, any DML | + ** | operation that require use of the partition are not allowed. This | + ** | includes SELECT, INSERT, UPDATE and DELETE. | + ** | The following examples assume the index partition: | + ** | "emp_part_50_part" is in an 'UNUSABLE' state. | + ** +--------------------------------------------------------------------+ +*/ + + +/* + ** ------------------------------------------------------------ + ** FULL TABLE SCAN ALLOWED SINCE IT DOES NOT REQUIRE USE OF THE + ** PARTITIONED INDEX + ** + ** SQL> select * from emp_part; + ** + ** EMPNO ENAME SAL DEPTNO + ** ------ ------------------ ---------- ---------- + ** 10 JHUNTER 185000 10 + ** 11 JHUNTER 185000 10 + ** 12 JHUNTER 185000 10 + ** 13 JHUNTER 185000 10 + ** + ** ------------------------------------------------------------ +*/ + + +/* + ** ------------------------------------------------------------ + ** NOW TRY THE SAME QUERY BUT WITH THE INTENT OF USING THE + ** PARTITIONED INDEX: "EMP_PART_IDX1" + ** + ** SQL> select * from emp_part where empno < 200; + ** select * from emp_part where empno < 200 + ** * + ** ERROR at line 1: + ** ORA-01502: index 'ORA_DEMO.EMP_PART_IDX1' or partition of such index is in unusable state + ** + ** ------------------------------------------------------------ +*/ + + +/* + ** ------------------------------------------------------------ + ** DML OPERATIONS LIKE INSERT, UPDATE AND DELETE WILL WORK + ** AS LONG AS THEY DO NOT REQUIRE USE OF THE 'UNUSABLE' + ** INDEX PARTITION. + ** + ** SQL> delete from emp_part where empno > 100; + ** 122 rows deleted. + ** + ** ------------------------------------------------------------ +*/ + + +/* + ** ------------------------------------------------------------ + ** BUT WHEN ONE OF THESE COMMANDS NEED TO UPDATE THE INDEX + ** PARTITION, THEY WILL FAIL. + ** + ** SQL> delete from emp_part where empno > 20; + ** delete from emp_part where empno > 20 + ** * + ** ERROR at line 1: + ** ORA-01502: index 'ORA_DEMO.EMP_PART_IDX1' or partition of such index is in unusable state + ** + ** ------------------------------------------------------------ +*/ + diff --git a/idev/example_transport_tablespace.sql b/idev/example_transport_tablespace.sql new file mode 100644 index 0000000..6bb9e1c --- /dev/null +++ b/idev/example_transport_tablespace.sql @@ -0,0 +1,82 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : example_transport_tablespace.sql | +-- | CLASS : Examples | +-- | PURPOSE : Example script that demonstrates how to use the transportable | +-- | tablespace feature. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +connect "/ as sysdba" + +set serveroutput on + +Prompt ===================================================== +Prompt THE FOLLOWING EXAMPLE WILL TRANSPORT THE TABLESPACES +Prompt "users" and "users2" FROM DATABASE "CUSTDB" TO "DWDB" +Prompt ===================================================== +Prompt +Prompt + +Prompt ========================================== +Prompt VERIFY TABLESPACE(s) ARE SELF-CONTAINED... +Prompt ========================================== +Prompt +accept a1 Prompt "Hit to continue"; + +exec DBMS_TTS.TRANSPORT_SET_CHECK('users, users2', TRUE); + +SELECT * FROM TRANSPORT_SET_VIOLATIONS; + + +Prompt ========================================== +Prompt GENERATE A TRANSPORTABLE TABLESPACE SET... +Prompt ========================================== +Prompt +accept a1 Prompt "Hit to continue"; + +ALTER TABLESPACE users READ ONLY; +ALTER TABLESPACE users2 READ ONLY; + +!exp userid=\"sys/change_on_install@custdb_jeffreyh3\" transport_tablespace=y tablespaces=users,users2 triggers=y constraints=y grants=y file=users.dmp + +!cp /u10/app/oradata/CUSTDB/users01.dbf /u10/app/oradata/DWDB/users01.dbf +!cp /u10/app/oradata/CUSTDB/users2_02.dbf /u10/app/oradata/DWDB/users2_02.dbf + +ALTER TABLESPACE users READ WRITE; +ALTER TABLESPACE users2 READ WRITE; + + +Prompt =============================== +Prompt LOGGING INTO TARGET DATABASE... +Prompt =============================== +Prompt +accept a1 Prompt "Hit to continue"; + +connect sys/change_on_install@dwdb_jeffreyh3 as sysdba + + +Prompt ============================ +Prompt IMPORT THE TABLESPACE SET... +Prompt ============================ +Prompt +accept a1 Prompt "Hit to continue"; + +!imp userid=\"sys/change_on_install@dwdb_jeffreyh3 as sysdba\" transport_tablespace=y datafiles='/u10/app/oradata/DWDB/users01.dbf, /u10/app/oradata/DWDB/users2_02.dbf' file=users.dmp + + +Prompt ================================================= +Prompt FINAL CLEANUP. ALTER TABLESPACES TO READ/WRITE... +Prompt ================================================= +Prompt +accept a1 Prompt "Hit to continue"; + +ALTER TABLESPACE users READ WRITE; +ALTER TABLESPACE users2 READ WRITE; diff --git a/idev/fdb_log_files.sql b/idev/fdb_log_files.sql new file mode 100644 index 0000000..0fa0a3e --- /dev/null +++ b/idev/fdb_log_files.sql @@ -0,0 +1,68 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : fdb_log_files.sql | +-- | CLASS : Flashback Database | +-- | PURPOSE : Provide a list of all Flasback log files. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Flashback Database Log Files | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN thread# HEADING 'Thread #' +COLUMN sequence# HEADING 'Sequence #' +COLUMN name FORMAT a65 HEADING 'Log File Name' +COLUMN log# HEADING 'Log #' +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' +COLUMN first_change# HEADING 'First Change #' +COLUMN first_time HEADING 'First Time' JUST RIGHT + +BREAK ON thread# SKIP 2 + +COMPUTE count OF sequence# ON thread# +COMPUTE sum OF bytes ON thread# + +SELECT + thread# + , sequence# + , name + , log# + , bytes + , first_change# + , TO_CHAR(first_time, 'DD-MON-YYYY HH24:MI:SS') first_time +FROM + v$flashback_database_logfile +ORDER BY + thread# + , sequence#; diff --git a/idev/fdb_redo_time_matrix.sql b/idev/fdb_redo_time_matrix.sql new file mode 100644 index 0000000..1b6b576 --- /dev/null +++ b/idev/fdb_redo_time_matrix.sql @@ -0,0 +1,62 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : fdb_redo_time_matrix.sql | +-- | CLASS : Flashback Database | +-- | PURPOSE : Provide details on the amount of redo data being collected by | +-- | Oracle Flashback Database over given time frames. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Flashback Database Redo Time Matrix | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN begin_time FORMAT a21 HEADING 'Begin Time' +COLUMN end_time FORMAT a21 HEADING 'End Time' +COLUMN flashback_data FORMAT 9,999,999,999,999 HEADING 'Flashback Data' +COLUMN db_data FORMAT 9,999,999,999,999 HEADING 'DB Data' +COLUMN redo_data FORMAT 9,999,999,999,999 HEADING 'Redo Data' +COLUMN estimated_flashback_size FORMAT 9,999,999,999,999 HEADING 'Estimated|Flashback Size' + +SELECT + TO_CHAR(begin_time, 'DD-MON-YYYY HH24:MI:SS') begin_time + , TO_CHAR(end_time, 'DD-MON-YYYY HH24:MI:SS') end_time + , flashback_data + , db_data + , redo_data + , estimated_flashback_size +FROM + v$flashback_database_stat +ORDER BY + begin_time; + diff --git a/idev/fdb_status.sql b/idev/fdb_status.sql new file mode 100644 index 0000000..cde05c5 --- /dev/null +++ b/idev/fdb_status.sql @@ -0,0 +1,70 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : fdb_status.sql | +-- | CLASS : Flashback Database | +-- | PURPOSE : Provide an overview of the current state of the Flashback | +-- | database feature. First check that Flashback Database is | +-- | enabled. Next, provide an overview of the retention policy | +-- | settings and estimated size of the Flashback Logs. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Flashback Database Status | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN dbid HEADING 'DB ID' +COLUMN name FORMAT a15 HEADING 'DB Name' +COLUMN log_mode FORMAT a18 HEADING 'Log Mode' +COLUMN flashback_on FORMAT a18 HEADING 'Flashback DB On?' + +SELECT + dbid + , name + , log_mode + , flashback_on +FROM v$database; + +COLUMN oldest_flashback_scn HEADING 'Oldest|Flashback SCN' +COLUMN oldest_flashback_time FORMAT a21 HEADING 'Oldest|Flashback Time' JUST right +COLUMN retention_target FORMAT 999,999 HEADING 'Retention|Target (min)' +COLUMN flashback_size FORMAT 9,999,999,999,999 HEADING 'Flashback|Size' +COLUMN estimated_flashback_size FORMAT 9,999,999,999,999 HEADING 'Estimated|Flashback Size' + +SELECT + oldest_flashback_scn + , TO_CHAR(oldest_flashback_time, 'DD-MON-YYYY HH24:MI:SS') oldest_flashback_time + , retention_target + , flashback_size + , estimated_flashback_size +FROM v$flashback_database_log; diff --git a/idev/fra_alerts.sql b/idev/fra_alerts.sql new file mode 100644 index 0000000..4cf2f73 --- /dev/null +++ b/idev/fra_alerts.sql @@ -0,0 +1,80 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : fra_alerts.sql | +-- | CLASS : Flash Recovery Area | +-- | PURPOSE : Provide a list of alerts regarding the Oracle Flash Recovery | +-- | Area. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : FRA Alerts | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN object_type FORMAT a12 HEADING 'Object Type' +COLUMN message_type FORMAT a13 HEADING 'Message Type' +COLUMN message_level HEADING 'Message Level' +COLUMN reason FORMAT a50 HEADING 'Reason' WRAP +COLUMN suggested_action FORMAT a50 HEADING 'Suggested Action' WRAP + +prompt +prompt The database issues a warning alert when reclaimable space is less than +prompt 15% and a critical alert when relaimable space is less than 3%. To warn +prompt the DBA of this condition, an entry is added to the alert.log and to the +prompt DBA_OUTSTANDING_ALERTS table (used by Enterprise Manager). However, the +prompt database continues to consume space in the Flash Recovery Area until +prompt there is no reclaimable space left. When the Flash Recovery Area is +prompt completely full, the following error will be reported: +prompt +prompt ORA-19809: limit exceeded for recovery files +prompt ORA-19804: cannot reclaim nnnnn bytes disk space from mmmmm limit +prompt +prompt where nnnnn is the number of bytes required and mmmmm is the disk quota +prompt for the Flash Recovery Area. +prompt +prompt The following Error would be reported in the alert.log +prompt ORA-19815: WARNING: db_recovery_file_dest_size of "size of FRA configured" +prompt bytes is 100.00% used, and has 0 remaining bytes available. +prompt + +SELECT + object_type + , message_type + , message_level + , reason + , suggested_action +FROM + dba_outstanding_alerts +/ + + diff --git a/idev/fra_files.sql b/idev/fra_files.sql new file mode 100644 index 0000000..904cfa9 --- /dev/null +++ b/idev/fra_files.sql @@ -0,0 +1,70 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : fra_files.sql | +-- | CLASS : Flash Recovery Area | +-- | PURPOSE : Provide a list of all files in the Flash Recovery Area. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : FRA Files | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN name FORMAT a80 HEADING 'File Name' +COLUMN member FORMAT a80 HEADING 'File Name' +COLUMN handle FORMAT a80 HEADING 'File Name' +COLUMN bytes FORMAT 999,999,999,999,999 HEADING 'File Size (Bytes)' + +SELECT name, (blocks*block_size) bytes +FROM v$datafile_copy +WHERE is_recovery_dest_file = 'YES' +UNION +SELECT name, null +FROM v$controlfile +WHERE is_recovery_dest_file = 'YES' +UNION +SELECT member, null +FROM v$logfile +WHERE is_recovery_dest_file = 'YES' +UNION +SELECT handle, bytes +FROM v$backup_piece +WHERE is_recovery_dest_file = 'YES' +UNION +SELECT name, (blocks*block_size) bytes +FROM v$archived_log +WHERE is_recovery_dest_file = 'YES' +ORDER BY + 1 + , 2 +/ diff --git a/idev/fra_status.sql b/idev/fra_status.sql new file mode 100644 index 0000000..5118054 --- /dev/null +++ b/idev/fra_status.sql @@ -0,0 +1,82 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : fra_status.sql | +-- | CLASS : Fast Recovery Area | +-- | PURPOSE : Provide an overview of the Oracle Flash Recovery Area. This | +-- | script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : FRA Status | +PROMPT | Instance : ¤t_instance | +PROMPT | Notes : Current location, disk quota, space in use, space | +PROMPT | reclaimable by deleting files, and number of files in the | +PROMPT | Flash Recovery Area. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN recovery_file_dest FORMAT a30 HEADING 'Recovery File Dest' +COLUMN space_limit FORMAT 99,999,999,999,999 HEADING 'Space Limit' +COLUMN space_used FORMAT 99,999,999,999,999 HEADING 'Space Used' +COLUMN space_used_pct FORMAT 999.99 HEADING '% Used' +COLUMN space_reclaimable FORMAT 99,999,999,999,999 HEADING 'Space Reclaimable' +COLUMN pct_reclaimable FORMAT 999.99 HEADING '% Reclaimable' +COLUMN number_of_files FORMAT 999,999 HEADING 'Number of Files' + +SELECT + f.name recovery_file_dest + , f.space_limit space_limit + , f.space_used space_used + , ROUND((f.space_used / f.space_limit)*100, 2) space_used_pct + , f.space_reclaimable space_reclaimable + , ROUND((f.space_reclaimable / f.space_limit)*100, 2) pct_reclaimable + , f.number_of_files number_of_files +FROM + v$recovery_file_dest f +ORDER BY + f.name; + + +COLUMN file_type FORMAT a30 HEADING 'File Type' +COLUMN percent_space_used HEADING 'Percent Space Used' +COLUMN percent_space_reclaimable HEADING 'Percent Space Reclaimable' +COLUMN number_of_files FORMAT 999,999 HEADING 'Number of Files' + +SELECT + f.file_type + , f.percent_space_used + , f.percent_space_reclaimable + , f.number_of_files +FROM + v$flash_recovery_area_usage f +ORDER BY + f.file_type; diff --git a/idev/help.sql b/idev/help.sql new file mode 100644 index 0000000..7d7a480 --- /dev/null +++ b/idev/help.sql @@ -0,0 +1,368 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : help.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : A utility script used to print out the names of all Oracle SQL | +-- | scripts that can be executed from SQL*Plus. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +prompt +prompt ======================================== +prompt Automatic Shared Memory Management +prompt ======================================== +prompt asmm_components.sql + + +prompt +prompt ======================================== +prompt Automatic Storage Management +prompt ======================================== +prompt asm_alias.sql +prompt asm_clients.sql +prompt asm_diskgroups.sql +prompt asm_disks.sql +prompt asm_disks_perf.sql +prompt asm_drop_files.sql +prompt asm_files.sql +prompt asm_files2.sql +prompt asm_files_10g.sql +prompt asm_templates.sql + + +prompt +prompt ======================================== +prompt Automatic Workload Repository +prompt ======================================== +prompt awr_snapshots_dbtime.sql +prompt awr_snapshots_dbtime_xls.sql + + +prompt +prompt ======================================== +prompt Database Administration +prompt ======================================== +prompt dba_blocks_used_by_table.sql +prompt dba_column_constraints.sql +prompt dba_compare_schemas.sql +prompt dba_controlfile_records.sql +prompt dba_controlfiles.sql +prompt dba_cr_init.sql +prompt dba_db_growth.sql +prompt dba_directories.sql +prompt dba_errors.sql +prompt dba_file_space_usage.sql +prompt dba_file_space_usage_7.sql +prompt dba_file_use.sql +prompt dba_file_use_7.sql +prompt dba_files.sql +prompt dba_files_all.sql +prompt dba_free_space_frag.sql +prompt dba_highwater_mark.sql +prompt dba_index_fragmentation.sql +prompt dba_index_schema_fragmentation_report.sql +prompt dba_index_stats.sql +prompt dba_invalid_objects.sql +prompt dba_invalid_objects_summary.sql +prompt dba_jobs.sql +prompt dba_object_cache.sql +prompt dba_object_search.sql +prompt dba_object_summary.sql +prompt dba_options.sql +prompt dba_owner_to_tablespace.sql +prompt dba_plsql_package_size.sql +prompt dba_query_hidden_parameters.sql +prompt dba_random_number.sql +prompt dba_rebuild_indexes.sql +prompt dba_recompile_invalid_objects.sql +prompt dba_registry.sql +prompt dba_related_child_tables.sql +prompt dba_row_size.sql +prompt dba_segment_summary.sql +prompt dba_snapshot_database_10g.sql +prompt dba_snapshot_database_8i.sql +prompt dba_snapshot_database_9i.sql +prompt dba_table_info.sql +prompt dba_tables_all.sql +prompt dba_tables_current_user.sql +prompt dba_tables_query_user.sql +prompt dba_tablespace_mapper.sql +prompt dba_tablespace_to_owner.sql +prompt dba_tablespaces.sql +prompt dba_tablespaces_7.sql +prompt dba_tablespaces_8i.sql +prompt dba_top_segments.sql +prompt help.sql + + +prompt +prompt ======================================== +prompt Database Resource Manager +prompt ======================================== +prompt rsrc_plan_status_detail.sql +prompt rsrc_plan_status_summary.sql + + +prompt +prompt ======================================== +prompt Examples +prompt ======================================== +prompt example_create_clob.sql +prompt example_create_clob_8.sql +prompt example_create_dimension.sql +prompt example_create_emp_dept_custom.sql +prompt example_create_emp_dept_original.sql +prompt example_create_index.sql +prompt example_create_index_organized_table.sql +prompt example_create_materialized_view.sql +prompt example_create_not_null_constraints.sql +prompt example_create_primary_foreign_key.sql +prompt example_create_profile_password_parameters.sql +prompt example_create_profile_resource_parameters.sql +prompt example_create_resource_plan_multi_resource_plan_9i.sql +prompt example_create_sequence.sql +prompt example_create_table.sql +prompt example_create_table_buffer_pools.sql +prompt example_create_tablespace.sql +prompt example_create_temporary_tables.sql +prompt example_create_user_tables.sql +prompt example_database_resource_manager_setup.sql +prompt example_drop_unused_column.sql +prompt example_lob_demonstration.sql +prompt example_move_table.sql +prompt example_partition_range_date_oracle_8.sql +prompt example_partition_range_number_oracle_8.sql +prompt example_transport_tablespace.sql + + +prompt +prompt ======================================== +prompt Flash Recovery Area +prompt ======================================== +prompt fra_alerts.sql +prompt fra_files.sql +prompt fra_status.sql + + +prompt +prompt ======================================== +prompt Flashback Database +prompt ======================================== +prompt fdb_log_files.sql +prompt fdb_redo_time_matrix.sql +prompt fdb_status.sql + + +prompt +prompt ======================================== +prompt LOBs +prompt ======================================== +prompt lob_dump_blob.sql +prompt lob_dump_clob.sql +prompt lob_dump_nclob.sql +prompt lob_fragmentation_user.sql + + +prompt +prompt ======================================== +prompt Locks +prompt ======================================== +prompt locks_blocking.sql +prompt locks_blocking2.sql +prompt locks_dml_ddl.sql +prompt locks_dml_lock_time.sql + + +prompt +prompt ======================================== +prompt Multi Threaded Server +prompt ======================================== +prompt mts_dispatcher_status.sql +prompt mts_dispatcher_utilization.sql +prompt mts_queue_information.sql +prompt mts_shared_server_statistics.sql +prompt mts_shared_server_utilization.sql +prompt mts_user_connections.sql + + +prompt +prompt ======================================== +prompt Oracle Applications +prompt ======================================== +prompt erp_conc_manager_job_status.sql +prompt erp_conc_manager_job_status2.sql +prompt erp_conc_manager_user_query.sql + + +prompt +prompt ======================================== +prompt Oracle Wait Interface +prompt ======================================== +prompt owi_event_names.sql + + +prompt +prompt ======================================== +prompt PL SQL +prompt ======================================== +prompt plsql_random_numbers.sql +prompt plsql_webdba_utl_pkg.sql + + +prompt +prompt ======================================== +prompt RMAN +prompt ======================================== +prompt rman_backup_pieces.sql +prompt rman_backup_sets.sql +prompt rman_backup_sets_8i.sql +prompt rman_configuration.sql +prompt rman_controlfiles.sql +prompt rman_progress.sql +prompt rman_spfiles.sql + + +prompt +prompt ======================================== +prompt RMAN Recovery Catalog +prompt ======================================== +prompt rc_databases.sql + + +prompt +prompt ======================================== +prompt Real Application Clusters +prompt ======================================== +prompt rac_instances.sql + + +prompt +prompt ======================================== +prompt Security +prompt ======================================== +prompt sec_default_passwords.sql +prompt sec_roles.sql +prompt sec_users.sql + + +prompt +prompt ======================================== +prompt Session Management +prompt ======================================== +prompt sess_current_user_transactions.sql +prompt sess_query_sql.sql +prompt sess_uncommited_transactions.sql +prompt sess_user_sessions.sql +prompt sess_user_stats.sql +prompt sess_user_trace_file_location.sql +prompt sess_users.sql +prompt sess_users_8i.sql +prompt sess_users_active.sql +prompt sess_users_active_8i.sql +prompt sess_users_active_sql.sql +prompt sess_users_by_cpu.sql +prompt sess_users_by_cursors.sql +prompt sess_users_by_io.sql +prompt sess_users_by_memory.sql +prompt sess_users_by_transactions.sql +prompt sess_waiting.sql +prompt sess_waiting_8i.sql + + +prompt +prompt ======================================== +prompt Statspack +prompt ======================================== +prompt sp_auto.sql +prompt sp_auto_15.sql +prompt sp_auto_30.sql +prompt sp_auto_5.sql +prompt sp_list.sql +prompt sp_parameters.sql +prompt sp_purge.sql +prompt sp_purge_30_days_10g.sql +prompt sp_purge_30_days_9i.sql +prompt sp_purge_n_days_10g.sql +prompt sp_purge_n_days_9i.sql +prompt sp_snap.sql +prompt sp_statspack_custom_pkg_10g.sql +prompt sp_statspack_custom_pkg_9i.sql +prompt sp_trunc.sql + + +prompt +prompt ======================================== +prompt Temporary Tablespace +prompt ======================================== +prompt temp_sort_segment.sql +prompt temp_sort_users.sql +prompt temp_status.sql + + +prompt +prompt ======================================== +prompt Tuning +prompt ======================================== +prompt perf_db_block_buffer_usage.sql +prompt perf_explain_plan.sql +prompt perf_file_io.sql +prompt perf_file_io_7.sql +prompt perf_file_io_efficiency.sql +prompt perf_file_waits.sql +prompt perf_hit_ratio_by_session.sql +prompt perf_hit_ratio_system.sql +prompt perf_log_switch_history_bytes_daily_all.sql +prompt perf_log_switch_history_count_daily.sql +prompt perf_log_switch_history_count_daily_7.sql +prompt perf_log_switch_history_count_daily_all.sql +prompt perf_lru_latch_contention.sql +prompt perf_objects_without_statistics.sql +prompt perf_performance_snapshot.sql +prompt perf_redo_log_contention.sql +prompt perf_sga_free_pool.sql +prompt perf_sga_usage.sql +prompt perf_shared_pool_memory.sql +prompt perf_top_10_procedures.sql +prompt perf_top_10_tables.sql +prompt perf_top_sql_by_buffer_gets.sql +prompt perf_top_sql_by_disk_reads.sql + + +prompt +prompt ======================================== +prompt Undo Segments +prompt ======================================== +prompt rollback_segments.sql +prompt rollback_users.sql +prompt undo_contention.sql +prompt undo_segments.sql +prompt undo_users.sql + + +prompt +prompt ======================================== +prompt Workspace Manager +prompt ======================================== +prompt wm_create_workspace.sql +prompt wm_disable_versioning.sql +prompt wm_enable_versioning.sql +prompt wm_freeze_workspace.sql +prompt wm_get_workspace.sql +prompt wm_goto_workspace.sql +prompt wm_merge_workspace.sql +prompt wm_refresh_workspace.sql +prompt wm_remove_workspace.sql +prompt wm_rollback_workspace.sql +prompt wm_unfreeze_workspace.sql +prompt wm_workspaces.sql diff --git a/idev/lob_dump_blob.sql b/idev/lob_dump_blob.sql new file mode 100644 index 0000000..736615f --- /dev/null +++ b/idev/lob_dump_blob.sql @@ -0,0 +1,222 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : lob_dump_blob.sql | +-- | CLASS : LOBs | +-- | PURPOSE : This script can be used to dump the contents of a BLOB column. | +-- | The user will be prompted for the OWNER, TABLE_NAME, and | +-- | COLUMN_NAME for the BLOB column to read from. The anonymous | +-- | PL/SQL block will write the contents of the BLOB to a file | +-- | named using the format: OWNER_TABLE_COLUMN_.out | +-- | An example would be: SCOTT_XML_DOCS_LOG_1.out | +-- | SCOTT_XML_DOCS_LOG_2.out | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +COLUMN current_user NEW_VALUE current_user NOPRINT; +SELECT rpad(instance_name, 17) current_instance, rpad(user, 13) current_user FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Dump the Contents of a BLOB Column | +PROMPT | Instance : ¤t_instance | +PROMPT | User : ¤t_user | +PROMPT +------------------------------------------------------------------------+ +PROMPT + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET SERVEROUTPUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +ACCEPT oname PROMPT 'Enter Owner Name : ' +ACCEPT tname PROMPT 'Enter Table Name : ' +ACCEPT cname PROMPT 'Enter Column Name : ' +ACCEPT wclause PROMPT 'SQL WHERE clause (including WHERE clause) : ' +ACCEPT odir PROMPT 'Enter Output Directory : ' + +CREATE OR REPLACE DIRECTORY temp_dump_lob_dir AS '&odir'; + +DECLARE + + -- +----------------------------------------------------+ + -- | INCOMING VARIABLES | + -- +----------------------------------------------------+ + v_oname VARCHAR2(100) := UPPER('&oname'); + v_tname VARCHAR2(100) := UPPER('&tname'); + v_cname VARCHAR2(100) := UPPER('&cname'); + v_outdir VARCHAR2(30) := 'TEMP_DUMP_LOB_DIR'; + v_wclause VARCHAR2(4000) := '&wclause'; + + -- +----------------------------------------------------+ + -- | OUTPUT FILE VARIABLES | + -- +----------------------------------------------------+ + v_out_filename VARCHAR2(500) := v_oname || '_' || v_tname || '_' || v_cname; + v_out_fileext VARCHAR2(4) := '.out'; + v_out_filename_full VARCHAR2(500); + v_out_dirname VARCHAR2(2000); + v_file_count NUMBER := 0; + v_file_handle UTL_FILE.FILE_TYPE; + + -- +----------------------------------------------------+ + -- | DYNAMIC SQL VARIABLES | + -- +----------------------------------------------------+ + TYPE v_lob_cur_typ IS REF CURSOR; + v_lob_cur v_lob_cur_typ; + v_sql_string VARCHAR2(4000); + + -- +----------------------------------------------------+ + -- | BLOB WRITE VARIABLES | + -- +----------------------------------------------------+ + v_blob_loc BLOB; + v_buffer RAW(32767); + v_buffer_size CONSTANT BINARY_INTEGER := 32767; + v_amount BINARY_INTEGER; + v_offset NUMBER(38); + + -- +----------------------------------------------------+ + -- | EXCEPTIONS | + -- +----------------------------------------------------+ + invalid_directory_path EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_directory_path, -29280); + + table_does_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(table_does_not_exist, -00942); + + invalid_identifier EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_identifier, -00904); + + SQL_cmd_not_prop_ended EXCEPTION; + PRAGMA EXCEPTION_INIT(SQL_cmd_not_prop_ended, -00933); + +BEGIN + + -- +----------------------------------------------------+ + -- | ENABLE SERVER-SIDE OUTPUT | + -- +----------------------------------------------------+ + DBMS_OUTPUT.ENABLE(1000000); + + SELECT directory_path INTO v_out_dirname FROM all_directories WHERE directory_name = 'TEMP_DUMP_LOB_DIR'; + + v_sql_string := 'SELECT ' || v_cname || ' FROM ' || v_oname || '.' || v_tname || ' ' || v_wclause; + + OPEN v_lob_cur FOR + v_sql_string; + + LOOP + + FETCH v_lob_cur INTO v_blob_loc; + EXIT WHEN v_lob_cur%NOTFOUND; + + v_file_count := v_file_count + 1; + v_out_filename_full := v_out_filename || '_' || v_file_count || v_out_fileext; + + v_file_handle := UTL_FILE.FOPEN(v_outdir, v_out_filename_full, 'w', 32767); + + v_amount := v_buffer_size; + v_offset := 1; + + DECLARE + invalid_LOB_locator EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_LOB_locator, -06502); + + BEGIN + + WHILE v_amount >= v_buffer_size + LOOP + + DBMS_LOB.READ( + lob_loc => v_blob_loc, + amount => v_amount, + offset => v_offset, + buffer => v_buffer); + + v_offset := v_offset + v_amount; + + UTL_FILE.PUT_RAW( + file => v_file_handle, + buffer => v_buffer, + autoflush => true); + + UTL_FILE.FFLUSH(file => v_file_handle); + + END LOOP; + + EXCEPTION + + WHEN invalid_LOB_locator THEN + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '| *** ERROR *** |'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.NEW_LINE(file => v_file_handle); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => 'Invalid LOB Locator Exception for :'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '==================================='); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> ' || v_oname || '.' || v_tname || '.' || v_cname); + UTL_FILE.NEW_LINE(file => v_file_handle); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => 'SQL Text:'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '==================================='); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> ' || v_sql_string); + UTL_FILE.FFLUSH(file => v_file_handle); + + WHEN others THEN + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '| *** ERROR *** |'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.NEW_LINE(file => v_file_handle); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => 'WHEN OTHERS ERROR'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '================='); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> SQL CODE : ' || SQLCODE); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> SQL ERROR MESSAGE : ' || SQLERRM); + UTL_FILE.FFLUSH(file => v_file_handle); + + END; + + UTL_FILE.FCLOSE(v_file_handle); + + END LOOP; + + CLOSE v_lob_cur; + + DBMS_OUTPUT.PUT_LINE('Wrote out ' || v_file_count || ' file(s) to ' || v_out_dirname || '.'); + +EXCEPTION + + WHEN invalid_directory_path THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : Invalid Directory Path: ' || v_outdir); + + WHEN table_does_not_exist THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : Table Not Found.'); + DBMS_OUTPUT.PUT_LINE('--> SQL: ' || v_sql_string); + + WHEN invalid_identifier THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : Invalid Identifier.'); + DBMS_OUTPUT.PUT_LINE('--> SQL: ' || v_sql_string); + + WHEN SQL_cmd_not_prop_ended THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : SQL command not properly ended.'); + DBMS_OUTPUT.PUT_LINE('--> SQL: ' || v_sql_string); + +END; +/ + +DROP DIRECTORY temp_dump_lob_dir; diff --git a/idev/lob_dump_clob.sql b/idev/lob_dump_clob.sql new file mode 100644 index 0000000..d3a6d89 --- /dev/null +++ b/idev/lob_dump_clob.sql @@ -0,0 +1,221 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : lob_dump_clob.sql | +-- | CLASS : LOBs | +-- | PURPOSE : This script can be used to dump the contents of a CLOB column. | +-- | The user will be prompted for the OWNER, TABLE_NAME, and | +-- | COLUMN_NAME for the CLOB column to read from. The anonymous | +-- | PL/SQL block will write the contents of the CLOB to a file | +-- | named using the format: OWNER_TABLE_COLUMN_.out | +-- | An example would be: SCOTT_XML_DOCS_LOG_1.out | +-- | SCOTT_XML_DOCS_LOG_2.out | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +COLUMN current_user NEW_VALUE current_user NOPRINT; +SELECT rpad(instance_name, 17) current_instance, rpad(user, 13) current_user FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Dump the Contents of a CLOB Column | +PROMPT | Instance : ¤t_instance | +PROMPT | User : ¤t_user | +PROMPT +------------------------------------------------------------------------+ +PROMPT + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET SERVEROUTPUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +ACCEPT oname PROMPT 'Enter Owner Name : ' +ACCEPT tname PROMPT 'Enter Table Name : ' +ACCEPT cname PROMPT 'Enter Column Name : ' +ACCEPT wclause PROMPT 'SQL WHERE clause (including WHERE clause) : ' +ACCEPT odir PROMPT 'Enter Output Directory : ' + +CREATE OR REPLACE DIRECTORY temp_dump_lob_dir AS '&odir'; + +DECLARE + + -- +----------------------------------------------------+ + -- | INCOMING VARIABLES | + -- +----------------------------------------------------+ + v_oname VARCHAR2(100) := UPPER('&oname'); + v_tname VARCHAR2(100) := UPPER('&tname'); + v_cname VARCHAR2(100) := UPPER('&cname'); + v_outdir VARCHAR2(30) := 'TEMP_DUMP_LOB_DIR'; + v_wclause VARCHAR2(4000) := '&wclause'; + + -- +----------------------------------------------------+ + -- | OUTPUT FILE VARIABLES | + -- +----------------------------------------------------+ + v_out_filename VARCHAR2(500) := v_oname || '_' || v_tname || '_' || v_cname; + v_out_fileext VARCHAR2(4) := '.out'; + v_out_filename_full VARCHAR2(500); + v_out_dirname VARCHAR2(2000); + v_file_count NUMBER := 0; + v_file_handle UTL_FILE.FILE_TYPE; + + -- +----------------------------------------------------+ + -- | DYNAMIC SQL VARIABLES | + -- +----------------------------------------------------+ + TYPE v_lob_cur_typ IS REF CURSOR; + v_lob_cur v_lob_cur_typ; + v_sql_string VARCHAR2(4000); + + -- +----------------------------------------------------+ + -- | CLOB WRITE VARIABLES | + -- +----------------------------------------------------+ + v_clob_loc CLOB; + v_buffer VARCHAR2(32767); + v_buffer_size CONSTANT BINARY_INTEGER := 32767; + v_amount BINARY_INTEGER; + v_offset NUMBER(38); + + -- +----------------------------------------------------+ + -- | EXCEPTIONS | + -- +----------------------------------------------------+ + invalid_directory_path EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_directory_path, -29280); + + table_does_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(table_does_not_exist, -00942); + + invalid_identifier EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_identifier, -00904); + + SQL_cmd_not_prop_ended EXCEPTION; + PRAGMA EXCEPTION_INIT(SQL_cmd_not_prop_ended, -00933); + +BEGIN + + -- +----------------------------------------------------+ + -- | ENABLE SERVER-SIDE OUTPUT | + -- +----------------------------------------------------+ + DBMS_OUTPUT.ENABLE(1000000); + + SELECT directory_path INTO v_out_dirname FROM all_directories WHERE directory_name = 'TEMP_DUMP_LOB_DIR'; + + v_sql_string := 'SELECT ' || v_cname || ' FROM ' || v_oname || '.' || v_tname || ' ' || v_wclause; + + OPEN v_lob_cur FOR + v_sql_string; + + LOOP + + FETCH v_lob_cur INTO v_clob_loc; + EXIT WHEN v_lob_cur%NOTFOUND; + + v_file_count := v_file_count + 1; + v_out_filename_full := v_out_filename || '_' || v_file_count || v_out_fileext; + + v_file_handle := UTL_FILE.FOPEN(v_outdir, v_out_filename_full, 'w', 32767); + + v_amount := v_buffer_size; + v_offset := 1; + + DECLARE + invalid_LOB_locator EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_LOB_locator, -06502); + + BEGIN + + WHILE v_amount >= v_buffer_size + LOOP + + DBMS_LOB.READ( + lob_loc => v_clob_loc, + amount => v_amount, + offset => v_offset, + buffer => v_buffer); + + v_offset := v_offset + v_amount; + + UTL_FILE.PUT( + file => v_file_handle, + buffer => v_buffer); + + UTL_FILE.FFLUSH(file => v_file_handle); + + END LOOP; + + EXCEPTION + + WHEN invalid_LOB_locator THEN + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '| *** ERROR *** |'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.NEW_LINE(file => v_file_handle); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => 'Invalid LOB Locator Exception for :'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '==================================='); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> ' || v_oname || '.' || v_tname || '.' || v_cname); + UTL_FILE.NEW_LINE(file => v_file_handle); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => 'SQL Text:'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '==================================='); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> ' || v_sql_string); + UTL_FILE.FFLUSH(file => v_file_handle); + + WHEN others THEN + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '| *** ERROR *** |'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.NEW_LINE(file => v_file_handle); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => 'WHEN OTHERS ERROR'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '================='); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> SQL CODE : ' || SQLCODE); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> SQL ERROR MESSAGE : ' || SQLERRM); + UTL_FILE.FFLUSH(file => v_file_handle); + + END; + + UTL_FILE.FCLOSE(v_file_handle); + + END LOOP; + + CLOSE v_lob_cur; + + DBMS_OUTPUT.PUT_LINE('Wrote out ' || v_file_count || ' file(s) to ' || v_out_dirname || '.'); + +EXCEPTION + + WHEN invalid_directory_path THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : Invalid Directory Path: ' || v_outdir); + + WHEN table_does_not_exist THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : Table Not Found.'); + DBMS_OUTPUT.PUT_LINE('--> SQL: ' || v_sql_string); + + WHEN invalid_identifier THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : Invalid Identifier.'); + DBMS_OUTPUT.PUT_LINE('--> SQL: ' || v_sql_string); + + WHEN SQL_cmd_not_prop_ended THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : SQL command not properly ended.'); + DBMS_OUTPUT.PUT_LINE('--> SQL: ' || v_sql_string); + +END; +/ + +DROP DIRECTORY temp_dump_lob_dir; diff --git a/idev/lob_dump_nclob.sql b/idev/lob_dump_nclob.sql new file mode 100644 index 0000000..d380f05 --- /dev/null +++ b/idev/lob_dump_nclob.sql @@ -0,0 +1,221 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : lob_dump_nclob.sql | +-- | CLASS : LOBs | +-- | PURPOSE : This script can be used to dump the contents of a NCLOB column. | +-- | The user will be prompted for the OWNER, TABLE_NAME, and | +-- | COLUMN_NAME for the NCLOB column to read from. The anonymous | +-- | PL/SQL block will write the contents of the NCLOB to a file | +-- | named using the format: OWNER_TABLE_COLUMN_.out | +-- | An example would be: SCOTT_XML_DOCS_LOG_1.out | +-- | SCOTT_XML_DOCS_LOG_2.out | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +COLUMN current_user NEW_VALUE current_user NOPRINT; +SELECT rpad(instance_name, 17) current_instance, rpad(user, 13) current_user FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Dump the Contents of a NCLOB Column | +PROMPT | Instance : ¤t_instance | +PROMPT | User : ¤t_user | +PROMPT +------------------------------------------------------------------------+ +PROMPT + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET SERVEROUTPUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +ACCEPT oname PROMPT 'Enter Owner Name : ' +ACCEPT tname PROMPT 'Enter Table Name : ' +ACCEPT cname PROMPT 'Enter Column Name : ' +ACCEPT wclause PROMPT 'SQL WHERE clause (including WHERE clause) : ' +ACCEPT odir PROMPT 'Enter Output Directory : ' + +CREATE OR REPLACE DIRECTORY temp_dump_lob_dir AS '&odir'; + +DECLARE + + -- +----------------------------------------------------+ + -- | INCOMING VARIABLES | + -- +----------------------------------------------------+ + v_oname VARCHAR2(100) := UPPER('&oname'); + v_tname VARCHAR2(100) := UPPER('&tname'); + v_cname VARCHAR2(100) := UPPER('&cname'); + v_outdir VARCHAR2(30) := 'TEMP_DUMP_LOB_DIR'; + v_wclause VARCHAR2(4000) := '&wclause'; + + -- +----------------------------------------------------+ + -- | OUTPUT FILE VARIABLES | + -- +----------------------------------------------------+ + v_out_filename VARCHAR2(500) := v_oname || '_' || v_tname || '_' || v_cname; + v_out_fileext VARCHAR2(4) := '.out'; + v_out_filename_full VARCHAR2(500); + v_out_dirname VARCHAR2(2000); + v_file_count NUMBER := 0; + v_file_handle UTL_FILE.FILE_TYPE; + + -- +----------------------------------------------------+ + -- | DYNAMIC SQL VARIABLES | + -- +----------------------------------------------------+ + TYPE v_lob_cur_typ IS REF CURSOR; + v_lob_cur v_lob_cur_typ; + v_sql_string VARCHAR2(4000); + + -- +----------------------------------------------------+ + -- | NCLOB WRITE VARIABLES | + -- +----------------------------------------------------+ + v_nclob_loc NCLOB; + v_buffer VARCHAR2(32767); + v_buffer_size CONSTANT BINARY_INTEGER := 32767; + v_amount BINARY_INTEGER; + v_offset NUMBER(38); + + -- +----------------------------------------------------+ + -- | EXCEPTIONS | + -- +----------------------------------------------------+ + invalid_directory_path EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_directory_path, -29280); + + table_does_not_exist EXCEPTION; + PRAGMA EXCEPTION_INIT(table_does_not_exist, -00942); + + invalid_identifier EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_identifier, -00904); + + SQL_cmd_not_prop_ended EXCEPTION; + PRAGMA EXCEPTION_INIT(SQL_cmd_not_prop_ended, -00933); + +BEGIN + + -- +----------------------------------------------------+ + -- | ENABLE SERVER-SIDE OUTPUT | + -- +----------------------------------------------------+ + DBMS_OUTPUT.ENABLE(1000000); + + SELECT directory_path INTO v_out_dirname FROM all_directories WHERE directory_name = 'TEMP_DUMP_LOB_DIR'; + + v_sql_string := 'SELECT ' || v_cname || ' FROM ' || v_oname || '.' || v_tname || ' ' || v_wclause; + + OPEN v_lob_cur FOR + v_sql_string; + + LOOP + + FETCH v_lob_cur INTO v_nclob_loc; + EXIT WHEN v_lob_cur%NOTFOUND; + + v_file_count := v_file_count + 1; + v_out_filename_full := v_out_filename || '_' || v_file_count || v_out_fileext; + + v_file_handle := UTL_FILE.FOPEN(v_outdir, v_out_filename_full, 'w', 32767); + + v_amount := v_buffer_size; + v_offset := 1; + + DECLARE + invalid_LOB_locator EXCEPTION; + PRAGMA EXCEPTION_INIT(invalid_LOB_locator, -06502); + + BEGIN + + WHILE v_amount >= v_buffer_size + LOOP + + DBMS_LOB.READ( + lob_loc => v_nclob_loc, + amount => v_amount, + offset => v_offset, + buffer => v_buffer); + + v_offset := v_offset + v_amount; + + UTL_FILE.PUT( + file => v_file_handle, + buffer => v_buffer); + + UTL_FILE.FFLUSH(file => v_file_handle); + + END LOOP; + + EXCEPTION + + WHEN invalid_LOB_locator THEN + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '| *** ERROR *** |'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.NEW_LINE(file => v_file_handle); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => 'Invalid LOB Locator Exception for :'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '==================================='); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> ' || v_oname || '.' || v_tname || '.' || v_cname); + UTL_FILE.NEW_LINE(file => v_file_handle); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => 'SQL Text:'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '==================================='); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> ' || v_sql_string); + UTL_FILE.FFLUSH(file => v_file_handle); + + WHEN others THEN + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '| *** ERROR *** |'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '+----------------------------+'); + UTL_FILE.NEW_LINE(file => v_file_handle); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => 'WHEN OTHERS ERROR'); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => '================='); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> SQL CODE : ' || SQLCODE); + UTL_FILE.PUT_LINE(file => v_file_handle, buffer => ' --> SQL ERROR MESSAGE : ' || SQLERRM); + UTL_FILE.FFLUSH(file => v_file_handle); + + END; + + UTL_FILE.FCLOSE(v_file_handle); + + END LOOP; + + CLOSE v_lob_cur; + + DBMS_OUTPUT.PUT_LINE('Wrote out ' || v_file_count || ' file(s) to ' || v_out_dirname || '.'); + +EXCEPTION + + WHEN invalid_directory_path THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : Invalid Directory Path: ' || v_outdir); + + WHEN table_does_not_exist THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : Table Not Found.'); + DBMS_OUTPUT.PUT_LINE('--> SQL: ' || v_sql_string); + + WHEN invalid_identifier THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : Invalid Identifier.'); + DBMS_OUTPUT.PUT_LINE('--> SQL: ' || v_sql_string); + + WHEN SQL_cmd_not_prop_ended THEN + DBMS_OUTPUT.PUT_LINE('** ERROR ** : SQL command not properly ended.'); + DBMS_OUTPUT.PUT_LINE('--> SQL: ' || v_sql_string); + +END; +/ + +DROP DIRECTORY temp_dump_lob_dir; diff --git a/idev/lob_fragmentation_user.sql b/idev/lob_fragmentation_user.sql new file mode 100644 index 0000000..1a7c5ca --- /dev/null +++ b/idev/lob_fragmentation_user.sql @@ -0,0 +1,155 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : lob_fragmentation_user.sql | +-- | CLASS : LOBs | +-- | PURPOSE : When a LOB segment is first created, its initial "allocated" | +-- | size is 64K, even though there are no rows in the table. As LOB | +-- | data is entered into the LOB segment, the allocated space for | +-- | the segment will continue to increase. If over time, the LOB | +-- | segment starts to experience many deletes and updates, it is | +-- | possible for the LOB segment to become fragmented and possibly | +-- | waste a considerable amount of disk space. This occurs when the | +-- | size of the actual LOB segment data is considerably less than | +-- | what is allocated by the LOB segment. Consider a situation | +-- | where a LOB segment has 16GB allocated for the segment but only | +-- | contains 2GB worth of actual LOB data. Potentially, this is | +-- | nearly 14GB of wasted allocated space. This could occur when a | +-- | significant number of rows have been deleted from the table | +-- | storing the LOB column. | +-- | | +-- | This script can be used to identify the size and amount of | +-- | fragmentation that exists in all LOB segments for a particular | +-- | user. | +-- | | +-- | To reclaim the wasted space within a fragmented LOB segment, | +-- | use the following SQL command: | +-- | | +-- | ALTER TABLE . MODIFY LOB () (SHRINK SPACE); +-- | | +-- | NOTE: The time required to shrink the LOB segment is a function | +-- | of how much data needs to be coalesced. In many cases, | +-- | the shrink operation can take minutes or possibly several | +-- | hours depending on the amount of data that needs to be | +-- | moved. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +COLUMN current_user NEW_VALUE current_user NOPRINT; +SELECT rpad(instance_name, 17) current_instance, rpad(user, 13) current_user FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : LOB Fragmentation for the Current User | +PROMPT | Instance : ¤t_instance | +PROMPT | User : ¤t_user | +PROMPT +------------------------------------------------------------------------+ +PROMPT + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET SERVEROUTPUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +declare + v_actual_length number; + v_allocated_length number; + v_lob_fragmentation_pct number; + v_actual_length_char varchar2(50); + v_allocated_length_char varchar2(50); + v_statement varchar2(2000); + v_table_column_pad_length constant number := 45; + v_actual_length_pad_length constant number := 20; + v_allocated_length_pad_length constant number := 20; + v_fragmentation_pad_length constant number := 15; +begin + dbms_output.enable(1000000); + + -- Print column headers + dbms_output.put_line( rpad('LOB COLUMN - [OWNER.TABLE.COLUMN]', v_table_column_pad_length) || ' ' || + lpad('ALLOCATED LOB LENGTH', v_allocated_length_pad_length) || ' ' || + lpad('ACTUAL LOB LENGTH', v_actual_length_pad_length) || ' ' || + lpad('FRAGMENTATION', v_fragmentation_pad_length) + ); + dbms_output.put_line( rpad('-', v_table_column_pad_length, '-') || ' ' || + lpad('-', v_allocated_length_pad_length, '-') || ' ' || + lpad('-', v_actual_length_pad_length, '-') || ' ' || + lpad('-', v_fragmentation_pad_length, '-') + ); + + -- Get all LOB segments for the current user + for v_lob_segment in (select user, l.table_name, l.column_name + from user_lobs l join user_segments s + using (segment_name, tablespace_name) + where l.column_name not like '"%' + order by 2,3) + loop + dbms_output.put(rpad(v_lob_segment.user || '.' || v_lob_segment.table_name || '.' || v_lob_segment.column_name, v_table_column_pad_length)); + dbms_output.put(' '); + + -- Get "allocated size" of the LOB segment + v_statement := 'begin ' + || 'select to_char(a.bytes, ''999,999,999,999,999'') ' + || 'into :col_val2 ' + || 'from user_segments a join user_lobs b ' + || 'using (segment_name) ' + || 'where b.table_name = ''' || v_lob_segment.table_name || '''' + || ' and b.column_name = ''' || v_lob_segment.column_name || ''';' + || 'end;'; + execute immediate v_statement using out v_allocated_length_char; + v_allocated_length_char := regexp_replace(v_allocated_length_char, ' ', ''); + v_allocated_length := regexp_replace(v_allocated_length_char, ',', ''); + dbms_output.put(lpad(v_allocated_length_char, v_allocated_length_pad_length)); + dbms_output.put(' '); + + begin + -- Get "actual size" of the LOB segment + v_statement := 'begin ' + || 'select to_char(sum(dbms_lob.getlength(' || v_lob_segment.column_name || ')), ''999,999,999,999,999'' ) ' + || 'into :col_val1 ' + || 'from ' || v_lob_segment.table_name || ';' + || 'end;'; + execute immediate v_statement using out v_actual_length_char; + v_actual_length_char := nvl(regexp_replace(v_actual_length_char, ' ', ''), '0'); + v_actual_length := nvl(regexp_replace(v_actual_length_char, ',', ''), 0); + dbms_output.put(lpad(v_actual_length_char, v_actual_length_pad_length)); + dbms_output.put(' '); + + -- Calculate LOB fragmentation + if v_actual_length = 0 then + v_actual_length := v_allocated_length; + end if; + + v_lob_fragmentation_pct := round(((1-(v_actual_length/v_allocated_length))*100), 2); + dbms_output.put(lpad(v_lob_fragmentation_pct || ' %', v_fragmentation_pad_length)); + exception + when others then null; + end; + + dbms_output.put_line(''); + + end loop; +end; + +/ diff --git a/idev/locks_blocking.sql b/idev/locks_blocking.sql new file mode 100644 index 0000000..226696c --- /dev/null +++ b/idev/locks_blocking.sql @@ -0,0 +1,319 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : locks_blocking.sql | +-- | CLASS : Locks | +-- | PURPOSE : Query all Blocking Locks in the databases. This query will | +-- | display both the user(s) holding the lock and the user(s) | +-- | waiting for the lock. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Blocking Locks | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +PROMPT +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | BLOCKING LOCKS (Summary) | +PROMPT +------------------------------------------------------------------------+ +PROMPT + +SET serveroutput ON FORMAT WRAPPED +SET feedback OFF + +DECLARE + + CURSOR cur_BlockingLocks IS + SELECT + iw.instance_name AS waiting_instance + , sw.status AS waiting_status + , lw.sid AS waiting_sid + , sw.serial# AS waiting_serial_num + , sw.username AS waiting_oracle_username + , sw.osuser AS waiting_os_username + , sw.machine AS waiting_machine + , pw.spid AS waiting_spid + , SUBSTR(sw.terminal,0, 39) AS waiting_terminal + , SUBSTR(sw.program,0, 39) AS waiting_program + , ROUND(lw.ctime/60) AS waiting_lock_time_min + , DECODE ( lh.type + , 'CF', 'Control File' + , 'DX', 'Distributed Transaction' + , 'FS', 'File Set' + , 'IR', 'Instance Recovery' + , 'IS', 'Instance State' + , 'IV', 'Libcache Invalidation' + , 'LS', 'Log Start or Log Switch' + , 'MR', 'Media Recovery' + , 'RT', 'Redo Thread' + , 'RW', 'Row Wait' + , 'SQ', 'Sequence Number' + , 'ST', 'Diskspace Transaction' + , 'TE', 'Extend Table' + , 'TT', 'Temp Table' + , 'TX', 'Transaction' + , 'TM', 'DML' + , 'UL', 'PLSQL User_lock' + , 'UN', 'User Name' + , 'Nothing-' + ) AS waiter_lock_type + , DECODE ( lw.request + , 0, 'None' /* Mon Lock equivalent */ + , 1, 'NoLock' /* N */ + , 2, 'Row-Share (SS)' /* L */ + , 3, 'Row-Exclusive (SX)' /* R */ + , 4, 'Share-Table' /* S */ + , 5, 'Share-Row-Exclusive (SSX)' /* C */ + , 6, 'Exclusive' /* X */ + , '[Nothing]' + ) AS waiter_mode_request + , ih.instance_name AS locking_instance + , sh.status AS locking_status + , lh.sid AS locking_sid + , sh.serial# AS locking_serial_num + , sh.username AS locking_oracle_username + , sh.osuser AS locking_os_username + , sh.machine AS locking_machine + , ph.spid AS locking_spid + , SUBSTR(sh.terminal,0, 39) AS locking_terminal + , SUBSTR(sh.program,0, 39) AS locking_program + , ROUND(lh.ctime/60) AS locking_lock_time_min + , aw.sql_text AS waiting_sql_text + FROM + gv$lock lw + , gv$lock lh + , gv$instance iw + , gv$instance ih + , gv$session sw + , gv$session sh + , gv$process pw + , gv$process ph + , gv$sqlarea aw + WHERE + iw.inst_id = lw.inst_id + AND ih.inst_id = lh.inst_id + AND sw.inst_id = lw.inst_id + AND sh.inst_id = lh.inst_id + AND pw.inst_id = lw.inst_id + AND ph.inst_id = lh.inst_id + AND aw.inst_id = lw.inst_id + AND sw.sid = lw.sid + AND sh.sid = lh.sid + AND lh.id1 = lw.id1 + AND lh.id2 = lw.id2 + AND lh.request = 0 + AND lw.lmode = 0 + AND (lh.id1, lh.id2) IN ( SELECT id1,id2 + FROM gv$lock + WHERE request = 0 + INTERSECT + SELECT id1,id2 + FROM gv$lock + WHERE lmode = 0 + ) + AND sw.paddr = pw.addr (+) + AND sh.paddr = ph.addr (+) + AND sw.sql_address = aw.address + ORDER BY + iw.instance_name + , lw.sid; + + TYPE t_BlockingLockRecord IS RECORD ( + WaitingInstanceName VARCHAR2(16) + , WaitingStatus VARCHAR2(8) + , WaitingSid NUMBER + , WaitingSerialNum NUMBER + , WaitingOracleUsername VARCHAR2(30) + , WaitingOSUsername VARCHAR2(30) + , WaitingMachine VARCHAR2(64) + , WaitingSpid VARCHAR2(12) + , WaitingTerminal VARCHAR2(30) + , WaitingProgram VARCHAR2(48) + , WaitingLockTimeMinute NUMBER + , WaiterLockType VARCHAR2(30) + , WaiterModeRequest VARCHAR2(30) + , LockingInstanceName VARCHAR2(16) + , LockingStatus VARCHAR2(8) + , LockingSid NUMBER + , LockingSerialNum NUMBER + , LockingOracleUsername VARCHAR2(30) + , LockingOSUsername VARCHAR2(30) + , LockingMachine VARCHAR2(64) + , LockingSpid VARCHAR2(12) + , LockingTerminal VARCHAR2(30) + , LockingProgram VARCHAR2(48) + , LockingLockTimeMinute NUMBER + , SQLText VARCHAR2(1000) + + ); + + TYPE t_BlockingLockRecordTable IS TABLE OF t_BlockingLockRecord INDEX BY BINARY_INTEGER; + + v_BlockingLockArray t_BlockingLockRecordTable; + v_BlockingLockRec cur_BlockingLocks%ROWTYPE; + v_NumBlockingLocksIncidents BINARY_INTEGER := 0; + +BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + OPEN cur_BlockingLocks; + + LOOP + FETCH cur_BlockingLocks INTO v_BlockingLockRec; + EXIT WHEN cur_BlockingLocks%NOTFOUND; + + v_NumBlockingLocksIncidents := v_NumBlockingLocksIncidents + 1; + + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingInstanceName := v_BlockingLockRec.waiting_instance; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingStatus := v_BlockingLockRec.waiting_status; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingSid := v_BlockingLockRec.waiting_sid; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingSerialNum := v_BlockingLockRec.waiting_serial_num; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingOracleUsername := v_BlockingLockRec.waiting_oracle_username; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingOSUsername := v_BlockingLockRec.waiting_os_username; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingMachine := v_BlockingLockRec.waiting_machine; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingSpid := v_BlockingLockRec.waiting_spid; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingTerminal := v_BlockingLockRec.waiting_terminal; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingProgram := v_BlockingLockRec.waiting_program; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaitingLockTimeMinute := v_BlockingLockRec.waiting_lock_time_min; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaiterLockType := v_BlockingLockRec.waiter_lock_type; + v_BlockingLockArray(v_NumBlockingLocksIncidents).WaiterModeRequest := v_BlockingLockRec.waiter_mode_request; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingInstanceName := v_BlockingLockRec.locking_instance; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingStatus := v_BlockingLockRec.locking_status; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingSid := v_BlockingLockRec.locking_sid; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingSerialNum := v_BlockingLockRec.locking_serial_num; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingOracleUsername := v_BlockingLockRec.locking_oracle_username; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingOSUsername := v_BlockingLockRec.locking_os_username; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingMachine := v_BlockingLockRec.locking_machine; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingSpid := v_BlockingLockRec.locking_spid; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingTerminal := v_BlockingLockRec.locking_terminal; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingProgram := v_BlockingLockRec.locking_program; + v_BlockingLockArray(v_NumBlockingLocksIncidents).LockingLockTimeMinute := v_BlockingLockRec.locking_lock_time_min; + v_BlockingLockArray(v_NumBlockingLocksIncidents).SQLText := v_BlockingLockRec.waiting_sql_text; + END LOOP; + + CLOSE cur_BlockingLocks; + + DBMS_OUTPUT.PUT_LINE('Number of blocking lock incidents: ' || v_BlockingLockArray.COUNT); + DBMS_OUTPUT.PUT(chr(10)); + + FOR RowIndex IN 1 .. v_BlockingLockArray.COUNT + LOOP + DBMS_OUTPUT.PUT_LINE('Incident ' || RowIndex); + DBMS_OUTPUT.PUT_LINE('---------------------------------------------------------------------------------------------------------'); + DBMS_OUTPUT.PUT_LINE(' WAITING BLOCKING'); + DBMS_OUTPUT.PUT_LINE(' ---------------------------------------- ----------------------------------------'); + DBMS_OUTPUT.PUT_LINE('Instance Name : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingInstanceName, 41) || v_BlockingLockArray(RowIndex).LockingInstanceName); + DBMS_OUTPUT.PUT_LINE('Oracle SID : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingSid, 41) || v_BlockingLockArray(RowIndex).LockingSid); + DBMS_OUTPUT.PUT_LINE('Serial# : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingSerialNum, 41) || v_BlockingLockArray(RowIndex).LockingSerialNum); + DBMS_OUTPUT.PUT_LINE('Oracle User : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingOracleUsername, 41) || v_BlockingLockArray(RowIndex).LockingOracleUsername); + DBMS_OUTPUT.PUT_LINE('O/S User : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingOSUsername, 41) || v_BlockingLockArray(RowIndex).LockingOSUsername); + DBMS_OUTPUT.PUT_LINE('Machine : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingMachine, 41) || v_BlockingLockArray(RowIndex).LockingMachine); + DBMS_OUTPUT.PUT_LINE('O/S PID : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingSpid, 41) || v_BlockingLockArray(RowIndex).LockingSpid); + DBMS_OUTPUT.PUT_LINE('Terminal : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingTerminal, 41) || v_BlockingLockArray(RowIndex).LockingTerminal); + DBMS_OUTPUT.PUT_LINE('Lock Time : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingLockTimeMinute || ' minutes', 41) || v_BlockingLockArray(RowIndex).LockingLockTimeMinute ||' minutes'); + DBMS_OUTPUT.PUT_LINE('Status : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingStatus, 41) || v_BlockingLockArray(RowIndex).LockingStatus); + DBMS_OUTPUT.PUT_LINE('Program : ' || RPAD(v_BlockingLockArray(RowIndex).WaitingProgram, 41) || v_BlockingLockArray(RowIndex).LockingProgram); + DBMS_OUTPUT.PUT_LINE('Waiter Lock Type : ' || v_BlockingLockArray(RowIndex).WaiterLockType); + DBMS_OUTPUT.PUT_LINE('Waiter Mode Request : ' || v_BlockingLockArray(RowIndex).WaiterModeRequest); + DBMS_OUTPUT.PUT_LINE('Waiting SQL : ' || v_BlockingLockArray(RowIndex).SQLText); + DBMS_OUTPUT.PUT(chr(10)); + END LOOP; + +END; +/ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a9 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN sid_serial FORMAT a15 HEADING 'SID / Serial#' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN locking_oracle_user FORMAT a20 HEADING 'Locking Oracle User' +COLUMN object_owner FORMAT a15 HEADING 'Object Owner' +COLUMN object_name FORMAT a25 HEADING 'Object Name' +COLUMN object_type FORMAT a15 HEADING 'Object Type' +COLUMN locked_mode HEADING 'Locked Mode' + +CLEAR BREAKS + +PROMPT +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | LOCKED OBJECTS | +PROMPT +------------------------------------------------------------------------+ + +SELECT + i.instance_name instance_name + , l.session_id || ' / ' || s.serial# sid_serial + , s.status session_status + , l.oracle_username locking_oracle_user + , o.owner object_owner + , o.object_name object_name + , o.object_type object_type + , DECODE ( l.locked_mode + , 0, 'None' /* Mon Lock equivalent */ + , 1, 'NoLock' /* N */ + , 2, 'Row-Share (SS)' /* L */ + , 3, 'Row-Exclusive (SX)' /* R */ + , 4, 'Share-Table' /* S */ + , 5, 'Share-Row-Exclusive (SSX)' /* C */ + , 6, 'Exclusive' /* X */ + , '[Nothing]' + ) locked_mode +FROM + dba_objects o + , gv$session s + , gv$locked_object l + , gv$instance i +WHERE + i.inst_id = l.inst_id + AND s.inst_id = l.inst_id + AND s.sid = l.session_id + AND o.object_id = l.object_id +ORDER BY + i.instance_name + , l.session_id; diff --git a/idev/locks_blocking2.sql b/idev/locks_blocking2.sql new file mode 100644 index 0000000..04e3570 --- /dev/null +++ b/idev/locks_blocking2.sql @@ -0,0 +1,289 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : locks_blocking2.sql | +-- | CLASS : Locks | +-- | PURPOSE : Query all Blocking Locks in the databases. This query will | +-- | display both the user(s) holding the lock and the user(s) | +-- | waiting for the lock. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Blocking Locks | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN waiting_instance_sid_serial FORMAT a24 HEADING '[WAITING]|Instance - SID / Serial#' +COLUMN waiting_oracle_username FORMAT a20 HEADING '[WAITING]|Oracle User' +COLUMN waiting_pid FORMAT a11 HEADING '[WAITING]|PID' +COLUMN waiting_machine FORMAT a15 HEADING '[WAITING]|Machine' TRUNC +COLUMN waiting_os_username FORMAT a15 HEADING '[WAITING]|O/S User' +COLUMN waiter_lock_type_mode_req FORMAT a35 HEADING 'Waiter Lock Type / Mode Requested' +COLUMN waiting_lock_time_min FORMAT a10 HEADING '[WAITING]|Lock Time' +COLUMN waiting_instance_sid FORMAT a15 HEADING '[WAITING]|Instance - SID' +COLUMN waiting_sql_text FORMAT a105 HEADING '[WAITING]|SQL Text' WRAP + +COLUMN locking_instance_sid_serial FORMAT a24 HEADING '[LOCKING]|Instance - SID / Serial#' +COLUMN locking_oracle_username FORMAT a20 HEADING '[LOCKING]|Oracle User' +COLUMN locking_pid FORMAT a11 HEADING '[LOCKING]|PID' +COLUMN locking_machine FORMAT a15 HEADING '[LOCKING]|Machine' TRUNC +COLUMN locking_os_username FORMAT a15 HEADING '[LOCKING]|O/S User' +COLUMN locking_lock_time_min FORMAT a10 HEADING '[LOCKING]|Lock Time' + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN locking_oracle_user FORMAT a20 HEADING 'Locking Oracle User' +COLUMN locking_os_user FORMAT a20 HEADING 'Locking O/S User' +COLUMN locking_os_pid FORMAT a11 HEADING 'Locking PID' +COLUMN locking_machine FORMAT a15 HEADING 'Locking Machine' TRUNC +COLUMN object_owner FORMAT a15 HEADING 'Object Owner' +COLUMN object_name FORMAT a25 HEADING 'Object Name' +COLUMN object_type FORMAT a15 HEADING 'Object Type' +COLUMN locked_mode HEADING 'Locked Mode' + +CLEAR BREAKS + +PROMPT +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | BLOCKING LOCKS (Summary) | +PROMPT +------------------------------------------------------------------------+ + +SELECT + iw.instance_name || ' - ' || lw.sid || ' / ' || sw.serial# waiting_instance_sid_serial + , sw.username waiting_oracle_username + , ROUND(lw.ctime/60) || ' min.' waiting_lock_time_min + , DECODE ( lh.type + , 'CF', 'Control File' + , 'DX', 'Distributed Transaction' + , 'FS', 'File Set' + , 'IR', 'Instance Recovery' + , 'IS', 'Instance State' + , 'IV', 'Libcache Invalidation' + , 'LS', 'Log Start or Log Switch' + , 'MR', 'Media Recovery' + , 'RT', 'Redo Thread' + , 'RW', 'Row Wait' + , 'SQ', 'Sequence Number' + , 'ST', 'Diskspace Transaction' + , 'TE', 'Extend Table' + , 'TT', 'Temp Table' + , 'TX', 'Transaction' + , 'TM', 'DML' + , 'UL', 'PLSQL User_lock' + , 'UN', 'User Name' + , 'Nothing-' + ) || ' / ' || + DECODE ( lw.request + , 0, 'None' /* Mon Lock equivalent */ + , 1, 'NoLock' /* N */ + , 2, 'Row-Share (SS)' /* L */ + , 3, 'Row-Exclusive (SX)' /* R */ + , 4, 'Share-Table' /* S */ + , 5, 'Share-Row-Exclusive (SSX)' /* C */ + , 6, 'Exclusive' /* X */ + , '[Nothing]' + ) waiter_lock_type_mode_req + , ih.instance_name || ' - ' || lh.sid || ' / ' || sh.serial# locking_instance_sid_serial + , sh.username locking_oracle_username + , ROUND(lh.ctime/60) || ' min.' locking_lock_time_min +FROM + gv$lock lw + , gv$lock lh + , gv$instance iw + , gv$instance ih + , gv$session sw + , gv$session sh +WHERE + iw.inst_id = lw.inst_id + AND ih.inst_id = lh.inst_id + AND sw.inst_id = lw.inst_id + AND sh.inst_id = lh.inst_id + AND sw.sid = lw.sid + AND sh.sid = lh.sid + AND lh.id1 = lw.id1 + AND lh.id2 = lw.id2 + AND lh.request = 0 + AND lw.lmode = 0 + AND (lh.id1, lh.id2) IN ( SELECT id1,id2 + FROM gv$lock + WHERE request = 0 + INTERSECT + SELECT id1,id2 + FROM gv$lock + WHERE lmode = 0 + ) +ORDER BY + iw.instance_name + , lw.sid; + + +PROMPT +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | BLOCKING LOCKS (User Details) | +PROMPT +------------------------------------------------------------------------+ + +SELECT + iw.instance_name || ' - ' || lw.sid || ' / ' || sw.serial# waiting_instance_sid_serial + , sw.username waiting_oracle_username + , sw.osuser waiting_os_username + , sw.machine waiting_machine + , pw.spid waiting_pid + , ih.instance_name || ' - ' || lh.sid || ' / ' || sh.serial# locking_instance_sid_serial + , sh.username locking_oracle_username + , sh.osuser locking_os_username + , sh.machine locking_machine + , ph.spid locking_pid +FROM + gv$lock lw + , gv$lock lh + , gv$instance iw + , gv$instance ih + , gv$session sw + , gv$session sh + , gv$process pw + , gv$process ph +WHERE + iw.inst_id = lw.inst_id + AND ih.inst_id = lh.inst_id + AND sw.inst_id = lw.inst_id + AND sh.inst_id = lh.inst_id + AND pw.inst_id = lw.inst_id + AND ph.inst_id = lh.inst_id + AND sw.sid = lw.sid + AND sh.sid = lh.sid + AND lh.id1 = lw.id1 + AND lh.id2 = lw.id2 + AND lh.request = 0 + AND lw.lmode = 0 + AND (lh.id1, lh.id2) IN ( SELECT id1,id2 + FROM gv$lock + WHERE request = 0 + INTERSECT + SELECT id1,id2 + FROM gv$lock + WHERE lmode = 0 + ) + AND sw.paddr = pw.addr (+) + AND sh.paddr = ph.addr (+) +ORDER BY + iw.instance_name + , lw.sid; + + +PROMPT +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | BLOCKING LOCKS (Waiting SQL) | +PROMPT +------------------------------------------------------------------------+ + +SELECT + iw.instance_name || ' - ' || lw.sid || ' / ' || sw.serial# waiting_instance_sid_serial + , aw.sql_text waiting_sql_text +FROM + gv$lock lw + , gv$lock lh + , gv$instance iw + , gv$instance ih + , gv$session sw + , gv$session sh + , gv$sqlarea aw +WHERE + iw.inst_id = lw.inst_id + AND ih.inst_id = lh.inst_id + AND sw.inst_id = lw.inst_id + AND sh.inst_id = lh.inst_id + AND aw.inst_id = lw.inst_id + AND sw.sid = lw.sid + AND sh.sid = lh.sid + AND lh.id1 = lw.id1 + AND lh.id2 = lw.id2 + AND lh.request = 0 + AND lw.lmode = 0 + AND (lh.id1, lh.id2) IN ( SELECT id1,id2 + FROM gv$lock + WHERE request = 0 + INTERSECT + SELECT id1,id2 + FROM gv$lock + WHERE lmode = 0 + ) + AND sw.sql_address = aw.address +ORDER BY + iw.instance_name + , lw.sid; + + +PROMPT +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | LOCKED OBJECTS | +PROMPT +------------------------------------------------------------------------+ + +SELECT + i.instance_name instance_name + , l.session_id sid + , s.status session_status + , l.oracle_username locking_oracle_user + , s.osuser locking_os_user + , s.machine locking_machine + , p.spid locking_os_pid + , o.owner object_owner + , o.object_name object_name + , o.object_type object_type + , DECODE ( l.locked_mode + , 0, 'None' /* Mon Lock equivalent */ + , 1, 'NoLock' /* N */ + , 2, 'Row-Share (SS)' /* L */ + , 3, 'Row-Exclusive (SX)' /* R */ + , 4, 'Share-Table' /* S */ + , 5, 'Share-Row-Exclusive (SSX)' /* C */ + , 6, 'Exclusive' /* X */ + , '[Nothing]' + ) locked_mode +FROM + dba_objects o + , gv$session s + , gv$process p + , gv$locked_object l + , gv$instance i +WHERE + i.inst_id = l.inst_id + AND s.inst_id = l.inst_id + AND s.inst_id = p.inst_id + AND s.sid = l.session_id + AND o.object_id = l.object_id + AND s.paddr = p.addr +ORDER BY + i.instance_name + , l.session_id; diff --git a/idev/locks_dml_ddl.sql b/idev/locks_dml_ddl.sql new file mode 100644 index 0000000..47b8d89 --- /dev/null +++ b/idev/locks_dml_ddl.sql @@ -0,0 +1,82 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : locks_dml_ddl.sql | +-- | CLASS : Locks | +-- | PURPOSE : Query all DML and DDL locks in the database. This script will | +-- | query critical information about the lock including Lock Type, | +-- | Object Name/Owner, OS/Oracle User and Wait time (in minutes). | +-- | This script is not RAC enabled and will only display locks on | +-- | the current instance. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : DML and DDL Locks | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a9 HEADING 'Instance' +COLUMN sid_serial FORMAT a15 HEADING 'SID / Serial#' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN locking_oracle_user FORMAT a20 HEADING 'Locking Oracle User' +COLUMN lock_type FORMAT a9 HEADING 'Lock Type' +COLUMN mode_held FORMAT a10 HEADING 'Mode Held' +COLUMN object FORMAT a42 HEADING 'Object' +COLUMN program FORMAT a20 HEADING 'Program' +COLUMN wait_time_min FORMAT 999,999 HEADING 'Wait Time (min)' + +CLEAR BREAKS + +SELECT + i.instance_name instance_name + , l.session_id || ' / ' || s.serial# sid_serial + , s.status session_status + , s.username locking_oracle_user + , l.lock_type lock_type + , l.mode_held mode_held + , o.owner || '.' || o.object_name object + , SUBSTR(s.program, 0, 20) program + , ROUND(w.seconds_in_wait/60, 2) wait_time_min +FROM + v$instance i + , v$session s + , dba_locks l + , dba_objects o + , v$session_wait w +WHERE + s.sid = l.session_id + AND l.lock_type IN ('DML','DDL') + AND l.lock_id1 = o.object_id + AND l.session_id = w.sid +ORDER BY + i.instance_name + , l.session_id +/ diff --git a/idev/locks_dml_lock_time.sql b/idev/locks_dml_lock_time.sql new file mode 100644 index 0000000..14e36ff --- /dev/null +++ b/idev/locks_dml_lock_time.sql @@ -0,0 +1,117 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : locks_dml_lock_time.sql | +-- | CLASS : Locks | +-- | PURPOSE : Query all DML locks in the database (INSERT, UPDATE, DELETE) | +-- | and the number of minutes they have been holding the lock. | +-- | This script will also query critical information about the lock | +-- | including Lock Type, Object Name/Owner, OS/Oracle User and Wait | +-- | time (in minutes). This script is not RAC enabled and will only | +-- | display locks on the current instance. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : DML Table Lock Time | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a9 HEADING 'Instance' +COLUMN locking_oracle_user FORMAT a20 HEADING 'Locking Oracle User' +COLUMN sid_serial FORMAT a15 HEADING 'SID / Serial#' +COLUMN mode_held FORMAT a15 HEADING 'Mode Held' +COLUMN mode_requested FORMAT a15 HEADING 'Mode Requested' +COLUMN lock_type FORMAT a15 HEADING 'Lock Type' +COLUMN object FORMAT a42 HEADING 'Object' +COLUMN program FORMAT a20 HEADING 'Program' +COLUMN lock_time_min FORMAT 999,999 HEADING 'Lock Time (min)' + +CLEAR BREAKS + +SELECT + i.instance_name instance_name + , l.sid || ' / ' || s.serial# sid_serial + , s.username locking_oracle_user + , DECODE( l.lmode + , 1, NULL + , 2, 'Row Share' + , 3, 'Row Exclusive' + , 4, 'Share' + , 5, 'Share Row Exclusive' + , 6, 'Exclusive' + , 'None') mode_held + , DECODE( l.request + , 1, NULL + , 2, 'Row Share' + , 3, 'Row Exclusive' + , 4, 'Share' + , 5, 'Share Row Exclusive' + , 6, 'Exclusive' + , 'None') mode_requested + , DECODE ( l.type + , 'CF', 'Control File' + , 'DX', 'Distributed Transaction' + , 'FS', 'File Set' + , 'IR', 'Instance Recovery' + , 'IS', 'Instance State' + , 'IV', 'Libcache Invalidation' + , 'LS', 'Log Start or Log Switch' + , 'MR', 'Media Recovery' + , 'RT', 'Redo Thread' + , 'RW', 'Row Wait' + , 'SQ', 'Sequence Number' + , 'ST', 'Diskspace Transaction' + , 'TE', 'Extend Table' + , 'TT', 'Temp Table' + , 'TX', 'Transaction' + , 'TM', 'DML' + , 'UL', 'PLSQL User_lock' + , 'UN', 'User Name' + , 'Nothing' + ) lock_type + , o.owner || '.' || o.object_name object + , ROUND(l.ctime/60, 2) lock_time_min +FROM + v$instance i + , v$session s + , v$lock l + , dba_objects o + , dba_tables t +WHERE + l.id1 = o.object_id + AND s.sid = l.sid + AND o.owner = t.owner + AND o.object_name = t.table_name + AND o.owner <> 'SYS' + AND l.type = 'TM' +ORDER BY + i.instance_name + , l.sid; diff --git a/idev/mts_dispatcher_status.sql b/idev/mts_dispatcher_status.sql new file mode 100644 index 0000000..c8fd73b --- /dev/null +++ b/idev/mts_dispatcher_status.sql @@ -0,0 +1,99 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : mts_dispatcher_status.sql | +-- | CLASS : Multi-threaded Server (MTS) | +-- | PURPOSE : Display status and metrics related to the MTS dispatcher. The | +-- | following notes provide information on how to read and interpret| +-- | the results of this query: | +-- | | +-- | NAME : Returns the dispatcher's name. This forms part of | +-- | the operating system process name. | +-- | STATUS WAIT : The dispatcher is idle and waiting | +-- | for work. | +-- | SEND : The dispatcher is sending a message. | +-- | RECEIVE : The dispatcher is receiving a message.| +-- | CONNECT : The dispatcher is establishing a new | +-- | connection from a client. | +-- | DISCONNECT : A client is disconnecting from the | +-- | dispatcher. | +-- | BREAK : The dispatcher is handling a break. | +-- | OUTBOUND : The dispatcher is establishing an | +-- | outbound connection. | +-- | ACCEPT : Tells you whether or not the dispatcher is | +-- | accepting new connections. Valid values are YES | +-- | and NO. | +-- | CREATED : Returns the number of virtual circuits currently | +-- | associated with this dispatcher. | +-- | CONFIG IDX : Indicates the specific MTS_DISPATCHERS | +-- | initialization parameter on which this dispatcher | +-- | is based. Dispatchers created from the first | +-- | MTS_DISPATCHERS parameter in your instance's | +-- | parameter file will have a CONF_INDX value of 0. | +-- | Dispatcher's created from the second | +-- | MTS_DISPATCHERS parameter will have a value of 1, | +-- | and so on. | +-- | NETWORK : Returns the dispatcher's network address. | +-- | | +-- | This script is RAC enabled. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Multi-threaded Server: Dispatcher Status | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a10 HEAD 'Instance' +COLUMN dispatcher_name FORMAT a16 HEAD 'Dispatcher Name' +COLUMN dispatcher_status FORMAT a10 HEAD 'Status' +COLUMN accept FORMAT a10 HEAD 'Accept' +COLUMN created HEAD 'Created' +COLUMN conf_indx HEAD 'Config. Index' +COLUMN network FORMAT a70 HEAD 'Network' + +SELECT + i.instance_name instance_name + , d.name dispatcher_name + , d.status dispatcher_status + , d.accept accept + , d.created created + , d.conf_indx conf_indx + , d.network network +FROM + gv$instance i + , gv$dispatcher d +WHERE + i.inst_id = d.inst_id +ORDER BY + i.instance_name + , d.name; + diff --git a/idev/mts_dispatcher_utilization.sql b/idev/mts_dispatcher_utilization.sql new file mode 100644 index 0000000..4c9cd9f --- /dev/null +++ b/idev/mts_dispatcher_utilization.sql @@ -0,0 +1,58 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : mts_dispatcher_utilization.sql | +-- | CLASS : Multi-threaded Server (MTS) | +-- | PURPOSE : Display MTS dispatcher utilization. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Multi-threaded Server: Dispatcher Utilization | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a10 HEAD 'Instance' +COLUMN dispatcher_name FORMAT a16 HEAD 'Dispatcher Name' +COLUMN busy FORMAT 999.99 HEAD '% Busy' + +SELECT + i.instance_name instance_name + , d.name dispatcher_name + , ROUND(d.busy / (d.busy + d.idle) * 100, 2) busy +FROM + gv$instance i + , gv$dispatcher d +WHERE + i.inst_id = d.inst_id +ORDER BY + i.instance_name + , d.name; + diff --git a/idev/mts_queue_information.sql b/idev/mts_queue_information.sql new file mode 100644 index 0000000..e3cbc86 --- /dev/null +++ b/idev/mts_queue_information.sql @@ -0,0 +1,81 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : mts_queue_information.sql | +-- | CLASS : Multi-threaded Server (MTS) | +-- | PURPOSE : Display status and metrics related to MTS queue information. | +-- | You can get an idea of how well work is flowing through the | +-- | request and response queues by using v$queue. The DECODE in the | +-- | query handles the case where the TOTALQ column, which is the | +-- | divisor, happens to be zero. | +-- | | +-- | The average wait time is reported in hundreths of a second. | +-- | (i.e. If the average wait time of a dispatcher is 37, works out | +-- | to 0.37 seconds.) | +-- | | +-- | The COMMON queue is where requests are placed so that they can | +-- | be picked up and executed by a shared server process. If you | +-- | average wait time is high, you might be able to lower it by | +-- | creating more shared server processes. | +-- | | +-- | This script is RAC enabled. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Multi-threaded Server: Queue Information | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a10 HEAD 'Instance' +COLUMN dispatcher_name FORMAT a16 HEAD 'Dispatcher Name' +COLUMN queue_type FORMAT a13 HEAD 'Queue Type' +COLUMN queued HEAD 'Queued' +COLUMN awt FORMAT 999.99 HEAD 'Average_Wait_Time' + +SELECT + i.instance_name instance_name + , d.name dispatcher_name + , q.type queue_type + , q.queued queued + , DECODE(q.totalq,0,0,q.wait/q.totalq) awt +FROM + gv$instance i + , gv$queue q + , gv$dispatcher d +WHERE + i.inst_id = q.inst_id + AND d.inst_id = q.inst_id + AND d.paddr = q.paddr +ORDER BY + i.instance_name + , d.name; + diff --git a/idev/mts_shared_server_statistics.sql b/idev/mts_shared_server_statistics.sql new file mode 100644 index 0000000..f28cb7f --- /dev/null +++ b/idev/mts_shared_server_statistics.sql @@ -0,0 +1,89 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : mts_shared_server_statistics.sql | +-- | CLASS : Multi-threaded Server (MTS) | +-- | PURPOSE : Display status and metrics related to MTS shared server | +-- | statistics. | +-- | | +-- | SERVERS_STARTED : The number of shared server processes | +-- | started as the instance adjusts the number | +-- | of shared processes up and down from the | +-- | initial value specified by the MTS_SERVERS | +-- | parameter. When the instance starts, and | +-- | after the initial number of shared server | +-- | processes processes specified by | +-- | MTS_SERVERS has been started, this value | +-- | is set to 0. From that point on, this | +-- | value is incremented whenever a new shared | +-- | server process is started. | +-- | SERVERS_TERMINATED : A count of the total number of shared | +-- | server processes that have been terminated | +-- | since the instance was started. | +-- | SERVERS_HIGHWATER : The maximum number of shared server | +-- | processes that have ever been running at | +-- | one moment in time. | +-- | | +-- | NOTES: If the SERVERS_HIGHWATER value matches, the instance's | +-- | MTS_MAX_SERVERS value, then you might realize a | +-- | performance benefit from increasing MTS_MAX_SERVERS. If | +-- | the counts for SERVERS_STARTED and SERVERS_TERMINATED | +-- | keep climbing, then you should consider raising | +-- | MTS_SERVERS. Raising the minimum number of shared server | +-- | processes should reduce the number that are deleted only | +-- | to be recreated later. | +-- | | +-- | This script is RAC enabled. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Multi-threaded Server: Shared Server Statistics | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a10 HEAD 'Instance' +COLUMN servers_started FORMAT 999,999,999 HEAD 'Servers Started' +COLUMN servers_terminated FORMAT 999,999,999 HEAD 'Servers Terminated' +COLUMN servers_highwater FORMAT 999,999,999 HEAD 'Servers Highwater' + +SELECT + i.instance_name instance_name + , s.servers_started servers_started + , s.servers_terminated servers_terminated + , s.servers_highwater servers_highwater +FROM + gv$instance i + , gv$shared_server_monitor s +WHERE + i.inst_id = s.inst_id +ORDER BY + i.instance_name; diff --git a/idev/mts_shared_server_utilization.sql b/idev/mts_shared_server_utilization.sql new file mode 100644 index 0000000..8e10dc8 --- /dev/null +++ b/idev/mts_shared_server_utilization.sql @@ -0,0 +1,58 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : mts_shared_server_utilization.sql | +-- | CLASS : Multi-threaded Server (MTS) | +-- | PURPOSE : Display status and metrics related to MTS shared server | +-- | utilization. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Multi-threaded Server: Shared Server Utilization | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a10 HEAD 'Instance' +COLUMN s_name FORMAT a25 HEAD 'Server Name' +COLUMN s_busy HEAD '% Busy' + +SELECT + i.instance_name instance_name + , s.name s_name + , ROUND(s.busy / (s.busy + s.idle) * 100, 2) s_busy +FROM + gv$instance i + , gv$shared_server s +WHERE + i.inst_id = s.inst_id +ORDER BY + i.instance_name + , s.name; diff --git a/idev/mts_user_connections.sql b/idev/mts_user_connections.sql new file mode 100644 index 0000000..50ffd85 --- /dev/null +++ b/idev/mts_user_connections.sql @@ -0,0 +1,98 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : mts_user_connections.sql | +-- | CLASS : Multi-threaded Server (MTS) | +-- | PURPOSE : Display status and metrics related to MTS user connections. | +-- | | +-- | NAME : Returns the dispatcher's name. This forms part of | +-- | the operating system process name. | +-- | USERNAME : Oracle username. | +-- | STATUS : Reports the status of the circuit, and may take one | +-- | of the following values: | +-- | BREAK : The circuit had been interrupted due to a | +-- | break. | +-- | EOF : The connection is terminating, and the | +-- | circuit is about to be deleted. | +-- | OUTBOUND : The circuit represents an outbound | +-- | connection to another database. | +-- | NORMAL : The circuit represents a normal client | +-- | connection. | +-- | QUEUE : Reports on the work currently being done. One the | +-- | following values will be returned: | +-- | COMMON : A request has been placed into the | +-- | common request queue, and the circuit | +-- | is waiting for it to be picked up be a | +-- | shared server process. | +-- | DISPATCHER : Results from a request are being | +-- | returned to the client by the | +-- | dispatcher. | +-- | SERVER : A request is currently being acted upon | +-- | by a shared server process. | +-- | NONE : A circuit (or connection) is idle. | +-- | Nothing is happening. | +-- | | +-- | This script is RAC enabled. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Multi-threaded Server: User Connections | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a10 HEAD 'Instance' +COLUMN dispatcher_name FORMAT a16 HEAD 'Dispatcher Name' +COLUMN s_username FORMAT a15 HEAD 'Username' +COLUMN c_circuit_status FORMAT a15 HEAD 'Circuit Status' +COLUMN c_circuit_queue FORMAT a15 HEAD 'Circuit Queue' + +SELECT + i.instance_name instance_name + , d.name dispatcher_name + , s.username s_username + , c.status c_circuit_status + , c.queue c_circuit_queue +FROM + gv$instance i + , gv$circuit c + , gv$dispatcher d + , gv$session s +WHERE + i.inst_id = d.inst_id + AND c.inst_id = d.inst_id + AND s.inst_id = d.inst_id + AND c.dispatcher = d.paddr + AND c.saddr = s.saddr +ORDER BY + i.instance_name + , d.name + , s.username; diff --git a/idev/owi_event_names.sql b/idev/owi_event_names.sql new file mode 100644 index 0000000..c222c6e --- /dev/null +++ b/idev/owi_event_names.sql @@ -0,0 +1,59 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : owi_event_names.sql | +-- | CLASS : Oracle_Wait_Interface | +-- | PURPOSE : Reports on all defined event names included in the Oracle Wait | +-- | Interface. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Oracle Wait Interface: Event Names | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN event# FORMAT 9999 HEADING 'Event #' +COLUMN name FORMAT a60 HEADING 'Event Name' +COLUMN parameter1 FORMAT a40 HEADING 'Parameter 1' TRUNC +COLUMN parameter2 FORMAT a20 HEADING 'Parameter 2' TRUNC +COLUMN parameter3 FORMAT a20 HEADING 'Parameter 3' TRUNC + + +SELECT + en.event# event# + , en.name name + , en.parameter1 parameter1 + , en.parameter2 parameter2 + , en.parameter3 parameter3 +FROM + v$event_name en +ORDER BY + en.event#; diff --git a/idev/perf_db_block_buffer_usage.sql b/idev/perf_db_block_buffer_usage.sql new file mode 100644 index 0000000..a0f5193 --- /dev/null +++ b/idev/perf_db_block_buffer_usage.sql @@ -0,0 +1,40 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_db_block_buffer_usage.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report on the state of all DB_BLOCK_BUFFERS. This script must | +-- | be run as the SYS user. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 135 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN block_status HEADING "Block Status" +COLUMN count HEADING "Count" + +SELECT + DECODE(state, 0, 'Free', + 1, DECODE(lrba_seq, 0, 'Available', 'Being Modified'), + 2, 'Not Modified', + 3, 'Being Read', + 'Other') block_status + , count(*) count +FROM + sys.x$bh +GROUP BY + DECODE(state, 0, 'Free', + 1, DECODE(lrba_seq, 0, 'Available', 'Being Modified'), + 2, 'Not Modified', + 3, 'Being Read', + 'Other') +/ + diff --git a/idev/perf_explain_plan.sql b/idev/perf_explain_plan.sql new file mode 100644 index 0000000..06ee573 --- /dev/null +++ b/idev/perf_explain_plan.sql @@ -0,0 +1,33 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_explain_plan.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report the access path of a given STATEMENT_ID contained within | +-- | a PLAN_TABLE. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SELECT + LPAD(' ',2*level) + ||operation + ||' ' + ||options + ||' ' + ||object_name Q_PLAN +FROM + plan_table +WHERE + statement_id = '&&STATEMENT_ID' +CONNECT BY + prior id = parent_id + AND statement_id = '&&STATEMENT_ID' +START WITH + id = 1 +/ diff --git a/idev/perf_file_io.sql b/idev/perf_file_io.sql new file mode 100644 index 0000000..3d03ba4 --- /dev/null +++ b/idev/perf_file_io.sql @@ -0,0 +1,67 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_file_io.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports on Read/Write datafile activity. This script was | +-- | designed to work with Oracle8i or higher. It will include all | +-- | tablespaces using any type of extent management as well as true | +-- | TEMPORARY tablespaces. (i.e. use of "tempfiles") | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN ts_name FORMAT a15 HEAD 'Tablespace' +COLUMN fname FORMAT a45 HEAD 'File Name' +COLUMN phyrds FORMAT 999,999,999 HEAD 'Physical Reads' +COLUMN phywrts FORMAT 999,999,999 HEAD 'Physical Writes' +COLUMN read_pct FORMAT 999.99 HEAD 'Read Pct.' +COLUMN write_pct FORMAT 999.99 HEAD 'Write Pct.' + +BREAK ON report +COMPUTE SUM OF phyrds ON report +COMPUTE SUM OF phywrts ON report +COMPUTE AVG OF read_pct ON report +COMPUTE AVG OF write_pct ON report + +SELECT + df.tablespace_name ts_name + , df.file_name fname + , fs.phyrds phyrds + , (fs.phyrds * 100) / (fst.pr + tst.pr) read_pct + , fs.phywrts phywrts + , (fs.phywrts * 100) / (fst.pw + tst.pw) write_pct +FROM + sys.dba_data_files df + , v$filestat fs + , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst + , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst +WHERE + df.file_id = fs.file# +UNION +SELECT + tf.tablespace_name ts_name + , tf.file_name fname + , ts.phyrds phyrds + , (ts.phyrds * 100) / (fst.pr + tst.pr) read_pct + , ts.phywrts phywrts + , (ts.phywrts * 100) / (fst.pw + tst.pw) write_pct +FROM + sys.dba_temp_files tf + , v$tempstat ts + , (select sum(f.phyrds) pr, sum(f.phywrts) pw from v$filestat f) fst + , (select sum(t.phyrds) pr, sum(t.phywrts) pw from v$tempstat t) tst +WHERE + tf.file_id = ts.file# +ORDER BY phyrds DESC +/ + diff --git a/idev/perf_file_io_7.sql b/idev/perf_file_io_7.sql new file mode 100644 index 0000000..44e9217 --- /dev/null +++ b/idev/perf_file_io_7.sql @@ -0,0 +1,59 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_file_io_7.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports on Read/Write datafile activity. This script was | +-- | designed to work with Oracle7 and Oracle8. This script can be | +-- | run against higher database versions (i.e. Oracle8i) but will | +-- | not return information about true TEMPORARY tablespaces. | +-- | (i.e. use of "tempfiles") | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN phys_reads NEW_VALUE xphys_reads NOPRINT FORMAT a1 +COLUMN phys_writes NEW_VALUE xphys_writes NOPRINT FORMAT a1 + +SELECT + SUM(phyrds) phys_reads + , SUM(phywrts) phys_writes +FROM v$filestat +/ + +COLUMN name FORMAT a45 HEAD 'File Name' +COLUMN phyrds FORMAT 999,999,999 HEAD 'Physical Reads' +COLUMN phywrts FORMAT 999,999,999 HEAD 'Physical Writes' +COLUMN read_pct FORMAT 999.99 HEAD 'Read Pct.' +COLUMN write_pct FORMAT 999.99 HEAD 'Write Pct.' + +BREAK ON report +COMPUTE SUM OF phyrds ON report +COMPUTE SUM OF phywrts ON report +COMPUTE AVG OF read_pct ON report +COMPUTE AVG OF write_pct ON report + + +SELECT + name name + , phyrds phyrds + , phyrds * 100 / &xphys_reads read_pct + , phywrts phywrts + , phywrts * 100 / &xphys_writes write_pct +FROM + v$datafile df + , v$filestat fs +WHERE + df.file# = fs.file# +ORDER BY phyrds DESC +/ + diff --git a/idev/perf_file_io_efficiency.sql b/idev/perf_file_io_efficiency.sql new file mode 100644 index 0000000..b62a944 --- /dev/null +++ b/idev/perf_file_io_efficiency.sql @@ -0,0 +1,67 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_file_io_efficiency.sql | +-- | CLASS : Tuning | +-- | PURPOSE : This script produces a cumulative report that gives information | +-- | based on IO efficiency since the Oracle instance was started. | +-- | The report generated will list physical block reads and | +-- | efficiency (the efficiency number measures the percentage of | +-- | time Oracle asked for and got the right block the first time; | +-- | this is a function of the type of table scan and indexing). | +-- | | +-- | The relative low efficiency of the SYSTEM areas is normal. This | +-- | is due to indexes and tables being mixed together in the SYSTEM | +-- | tablespace. A classic case on Oracle's part of "Do what we say, | +-- | not what we do." | +-- | | +-- | * If your temporary tablespace shows an efficiency number, | +-- | someone is using if for data instead of temporary tables. | +-- | * Rollback efficiency should always be 100 percent; if not, | +-- | someone is using the rollback tablespace for tables/indexes. | +-- | * Index tablespace should always show high efficiencies; if | +-- | they don't, then either the indexes are bad or someone is | +-- | using the index tablespace for tables. | +-- | * An attempt should be made to even out IO. If a disk is | +-- | showing a considerable amount of IO, move some of the | +-- | datafiles to other disks. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 + +COLUMN ts FORMAT a15 HEADING 'Tablespace' +COLUMN fn FORMAT a38 HEADING 'Filename' +COLUMN rds HEADING 'Reads' +COLUMN blk_rds HEADING 'Block Reads' +COLUMN wrts HEADING 'Writes' +COLUMN blk_wrts HEADING 'Block Writes' +COLUMN rw HEADING 'Reads+Writes' +COLUMN blk_rw HEADING 'Block Reads+Writes' +COLUMN eff FORMAT a10 HEADING 'Effeciency' + +SELECT + f.tablespace_name ts + , f.file_name fn + , v.phyrds rds + , v.phyblkrd blk_rds + , v.phywrts wrts + , v.phyblkwrt blk_wrts + , v.phyrds + v.phywrts rw + , v.phyblkrd + v.phyblkwrt blk_rw + , DECODE(v.phyblkrd, 0, null, ROUND(100*(v.phyrds + v.phywrts)/(v.phyblkrd + v.phyblkwrt), 2)) eff +FROM + dba_data_files f + , v$filestat v +WHERE + f.file_id = v.file# +ORDER BY + rds +/ diff --git a/idev/perf_file_waits.sql b/idev/perf_file_waits.sql new file mode 100644 index 0000000..17719bc --- /dev/null +++ b/idev/perf_file_waits.sql @@ -0,0 +1,40 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_file_waits.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports on Busy Buffer Waits per file. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 + +COLUMN filename FORMAT a58 HEAD "File Name" +COLUMN file# FORMAT 999 HEAD "File #" +COLUMN ct FORMAT 999,999,999 HEAD "Waits (count)" +COLUMN time FORMAT 999,999,999 HEAD "Time (cs)" +COLUMN avg FORMAT 999.999 HEAD "Avg Time" + + +SELECT + a.indx + 1 file# + , b.name filename + , a.count ct + , a.time time + , a.time/(DECODE(a.count,0,1,a.count)) avg +FROM + x$kcbfwait a + , v$datafile b +WHERE + indx < (SELECT count(*) FROM v$datafile) + AND a.indx+1 = b.file# +ORDER BY a.time +/ + diff --git a/idev/perf_hit_ratio_by_session.sql b/idev/perf_hit_ratio_by_session.sql new file mode 100644 index 0000000..4cd4d8c --- /dev/null +++ b/idev/perf_hit_ratio_by_session.sql @@ -0,0 +1,54 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_hit_ratio_by_session.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports on all sessions along with their individual hit ratio. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 180 +SET PAGESIZE 9999 + +COLUMN unix_id FORMAT a10 HEAD Username +COLUMN oracle_id FORMAT a10 HEAD OracleID +COLUMN os_user FORMAT a20 HEAD OS_User +COLUMN sid FORMAT 99999 HEAD SID +COLUMN serial_id FORMAT 999999 HEAD Serial# +COLUMN unix_pid FORMAT a9 HEAD UNIX_Pid +COLUMN consistent_gets FORMAT 999,999,999,999,999 HEAD Cons_Gets +COLUMN block_gets FORMAT 999,999,999,999,999 HEAD Block_Gets +COLUMN physical_reads FORMAT 999,999,999,999,999 HEAD Phys_Reads +COLUMN hit_ratio FORMAT 999.00 HEAD Hit_Ratio + +SELECT + p.username unix_id + , s.username oracle_id + , s.osuser os_user + , s.sid sid + , s.serial# serial_id + , LPAD(p.spid,7) unix_pid + , sio.consistent_gets consistent_gets + , sio.block_gets block_gets + , sio.physical_reads physical_reads + , ROUND((consistent_gets+Block_gets-Physical_reads) / + (Consistent_gets+Block_gets)*100,2) hit_ratio +FROM + v$process p + , v$session s + , v$sess_io sio +WHERE + p.addr (+) = s.paddr + AND s.sid = sio.sid + AND (sio.consistent_gets + sio.block_gets) > 0 + AND s.username is not null +ORDER BY hit_ratio +/ + + diff --git a/idev/perf_hit_ratio_system.sql b/idev/perf_hit_ratio_system.sql new file mode 100644 index 0000000..ba7eefc --- /dev/null +++ b/idev/perf_hit_ratio_system.sql @@ -0,0 +1,41 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_hit_ratio_system.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports buffer cache hit ratio. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SELECT + TO_CHAR(SUM(DECODE(name, 'consistent gets', value, 0)), + '999,999,999,999,999,999') con + , TO_CHAR(SUM(DECODE(name, 'db block gets' , value, 0)), + '999,999,999,999,999,999') dbblockgets + , TO_CHAR(SUM(DECODE(name, 'physical reads' , value, 0)), + '999,999,999,999,999,999') physrds + , ROUND( ( ( + SUM(DECODE(name, 'consistent gets', Value,0)) + + + SUM(DECODE(name, 'db block gets', value,0)) + - + SUM(DECODE(name, 'physical reads', value,0)) + ) + / + ( + SUM(DECODE(name, 'consistent gets', Value,0)) + + + SUM(DECODE(name, 'db block gets', Value,0)) + ) + ) *100,2 + ) Hitratio +FROM v$sysstat +/ + + diff --git a/idev/perf_log_switch_history_bytes_daily_all.sql b/idev/perf_log_switch_history_bytes_daily_all.sql new file mode 100644 index 0000000..fbff2d9 --- /dev/null +++ b/idev/perf_log_switch_history_bytes_daily_all.sql @@ -0,0 +1,79 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_log_switch_history_bytes_daily_all.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports the amount of redo activity (in MB) each hour using | +-- | the archived redo log size per switch. It will query all active | +-- | archived records from v$archived_log. This script can be used | +-- | with Oracle 8 database or higher. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ +SET LINESIZE 250 +SET PAGESIZE 9999 +SET TRIMSPOOL ON +SET VERIFY off +COLUMN H00 FORMAT 99,999 HEADING '00' +COLUMN H01 FORMAT 99,999 HEADING '01' +COLUMN H02 FORMAT 99,999 HEADING '02' +COLUMN H03 FORMAT 99,999 HEADING '03' +COLUMN H04 FORMAT 99,999 HEADING '04' +COLUMN H05 FORMAT 99,999 HEADING '05' +COLUMN H06 FORMAT 99,999 HEADING '06' +COLUMN H07 FORMAT 99,999 HEADING '07' +COLUMN H08 FORMAT 99,999 HEADING '08' +COLUMN H09 FORMAT 99,999 HEADING '09' +COLUMN H10 FORMAT 99,999 HEADING '10' +COLUMN H11 FORMAT 99,999 HEADING '11' +COLUMN H12 FORMAT 99,999 HEADING '12' +COLUMN H13 FORMAT 99,999 HEADING '13' +COLUMN H14 FORMAT 99,999 HEADING '14' +COLUMN H15 FORMAT 99,999 HEADING '15' +COLUMN H16 FORMAT 99,999 HEADING '16' +COLUMN H17 FORMAT 99,999 HEADING '17' +COLUMN H18 FORMAT 99,999 HEADING '18' +COLUMN H19 FORMAT 99,999 HEADING '19' +COLUMN H20 FORMAT 99,999 HEADING '20' +COLUMN H21 FORMAT 99,999 HEADING '21' +COLUMN H22 FORMAT 99,999 HEADING '22' +COLUMN H23 FORMAT 99,999 HEADING '23' +COLUMN TOTAL FORMAT 999,999 HEADING 'Total' +SELECT + SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) DAY + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',ROUND(((blocks*block_size)/1024/1024)),0)) H00 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',ROUND(((blocks*block_size)/1024/1024)),0)) H01 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',ROUND(((blocks*block_size)/1024/1024)),0)) H02 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',ROUND(((blocks*block_size)/1024/1024)),0)) H03 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',ROUND(((blocks*block_size)/1024/1024)),0)) H04 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',ROUND(((blocks*block_size)/1024/1024)),0)) H05 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',ROUND(((blocks*block_size)/1024/1024)),0)) H06 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',ROUND(((blocks*block_size)/1024/1024)),0)) H07 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',ROUND(((blocks*block_size)/1024/1024)),0)) H08 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',ROUND(((blocks*block_size)/1024/1024)),0)) H09 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',ROUND(((blocks*block_size)/1024/1024)),0)) H10 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',ROUND(((blocks*block_size)/1024/1024)),0)) H11 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',ROUND(((blocks*block_size)/1024/1024)),0)) H12 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',ROUND(((blocks*block_size)/1024/1024)),0)) H13 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',ROUND(((blocks*block_size)/1024/1024)),0)) H14 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',ROUND(((blocks*block_size)/1024/1024)),0)) H15 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',ROUND(((blocks*block_size)/1024/1024)),0)) H16 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',ROUND(((blocks*block_size)/1024/1024)),0)) H17 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',ROUND(((blocks*block_size)/1024/1024)),0)) H18 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',ROUND(((blocks*block_size)/1024/1024)),0)) H19 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',ROUND(((blocks*block_size)/1024/1024)),0)) H20 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',ROUND(((blocks*block_size)/1024/1024)),0)) H21 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',ROUND(((blocks*block_size)/1024/1024)),0)) H22 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',ROUND(((blocks*block_size)/1024/1024)),0)) H23 + , ROUND(SUM((blocks*block_size)/1024/1024)) TOTAL +FROM + v$archived_log a +GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +ORDER BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +/ + diff --git a/idev/perf_log_switch_history_count_daily.sql b/idev/perf_log_switch_history_count_daily.sql new file mode 100644 index 0000000..0ac61f0 --- /dev/null +++ b/idev/perf_log_switch_history_count_daily.sql @@ -0,0 +1,94 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_log_switch_history_count_daily.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports on how often log switches occur in your database on a | +-- | daily basis. This script is to be used with an Oracle 8 | +-- | database or higher. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +ACCEPT startDate PROMPT 'Enter start date (DD-MON-YYYY): ' +ACCEPT endDate PROMPT 'Enter end date (DD-MON-YYYY): ' + +COLUMN H00 FORMAT 999 HEADING '00' +COLUMN H01 FORMAT 999 HEADING '01' +COLUMN H02 FORMAT 999 HEADING '02' +COLUMN H03 FORMAT 999 HEADING '03' +COLUMN H04 FORMAT 999 HEADING '04' +COLUMN H05 FORMAT 999 HEADING '05' +COLUMN H06 FORMAT 999 HEADING '06' +COLUMN H07 FORMAT 999 HEADING '07' +COLUMN H08 FORMAT 999 HEADING '08' +COLUMN H09 FORMAT 999 HEADING '09' +COLUMN H10 FORMAT 999 HEADING '10' +COLUMN H11 FORMAT 999 HEADING '11' +COLUMN H12 FORMAT 999 HEADING '12' +COLUMN H13 FORMAT 999 HEADING '13' +COLUMN H14 FORMAT 999 HEADING '14' +COLUMN H15 FORMAT 999 HEADING '15' +COLUMN H16 FORMAT 999 HEADING '16' +COLUMN H17 FORMAT 999 HEADING '17' +COLUMN H18 FORMAT 999 HEADING '18' +COLUMN H19 FORMAT 999 HEADING '19' +COLUMN H20 FORMAT 999 HEADING '20' +COLUMN H21 FORMAT 999 HEADING '21' +COLUMN H22 FORMAT 999 HEADING '22' +COLUMN H23 FORMAT 999 HEADING '23' +COLUMN TOTAL FORMAT 999,999 HEADING 'Total' + + +SELECT + SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) DAY + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23 + , COUNT(*) TOTAL +FROM + v$log_history a +WHERE + (TO_DATE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'), 1,8), 'MM/DD/RR') + >= + TO_DATE('&startDate', 'DD-MON-YYYY') + ) + AND + (TO_DATE(substr(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'), 1,8), 'MM/DD/RR') + <= + TO_DATE('&endDate', 'DD-MON-YYYY') + ) +GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +ORDER BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +/ + diff --git a/idev/perf_log_switch_history_count_daily_7.sql b/idev/perf_log_switch_history_count_daily_7.sql new file mode 100644 index 0000000..b4efcab --- /dev/null +++ b/idev/perf_log_switch_history_count_daily_7.sql @@ -0,0 +1,93 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_log_switch_history_count_daily_7.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports on how often log switches occur in your database on a | +-- | daily basis. This script is to be used with an Oracle 7 | +-- | database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +ACCEPT startDate PROMPT 'Enter start date (DD-MON-YYYY): ' +ACCEPT endDate PROMPT 'Enter end date (DD-MON-YYYY): ' + +COLUMN H00 FORMAT 999 HEADING '00' +COLUMN H01 FORMAT 999 HEADING '01' +COLUMN H02 FORMAT 999 HEADING '02' +COLUMN H03 FORMAT 999 HEADING '03' +COLUMN H04 FORMAT 999 HEADING '04' +COLUMN H05 FORMAT 999 HEADING '05' +COLUMN H06 FORMAT 999 HEADING '06' +COLUMN H07 FORMAT 999 HEADING '07' +COLUMN H08 FORMAT 999 HEADING '08' +COLUMN H09 FORMAT 999 HEADING '09' +COLUMN H10 FORMAT 999 HEADING '10' +COLUMN H11 FORMAT 999 HEADING '11' +COLUMN H12 FORMAT 999 HEADING '12' +COLUMN H13 FORMAT 999 HEADING '13' +COLUMN H14 FORMAT 999 HEADING '14' +COLUMN H15 FORMAT 999 HEADING '15' +COLUMN H16 FORMAT 999 HEADING '16' +COLUMN H17 FORMAT 999 HEADING '17' +COLUMN H18 FORMAT 999 HEADING '18' +COLUMN H19 FORMAT 999 HEADING '19' +COLUMN H20 FORMAT 999 HEADING '20' +COLUMN H21 FORMAT 999 HEADING '21' +COLUMN H22 FORMAT 999 HEADING '22' +COLUMN H23 FORMAT 999 HEADING '23' +COLUMN TOTAL FORMAT 999,999 HEADING 'Total' + + +SELECT + SUBSTR(time,1,5) DAY + , SUM(DECODE(SUBSTR(time,10,2),'00',1,0)) H00 + , SUM(DECODE(SUBSTR(time,10,2),'01',1,0)) H01 + , SUM(DECODE(SUBSTR(time,10,2),'02',1,0)) H02 + , SUM(DECODE(SUBSTR(time,10,2),'03',1,0)) H03 + , SUM(DECODE(SUBSTR(time,10,2),'04',1,0)) H04 + , SUM(DECODE(SUBSTR(time,10,2),'05',1,0)) H05 + , SUM(DECODE(SUBSTR(time,10,2),'06',1,0)) H06 + , SUM(DECODE(SUBSTR(time,10,2),'07',1,0)) H07 + , SUM(DECODE(SUBSTR(time,10,2),'08',1,0)) H08 + , SUM(DECODE(SUBSTR(time,10,2),'09',1,0)) H09 + , SUM(DECODE(SUBSTR(time,10,2),'10',1,0)) H10 + , SUM(DECODE(SUBSTR(time,10,2),'11',1,0)) H11 + , SUM(DECODE(SUBSTR(time,10,2),'12',1,0)) H12 + , SUM(DECODE(SUBSTR(time,10,2),'13',1,0)) H13 + , SUM(DECODE(SUBSTR(time,10,2),'14',1,0)) H14 + , SUM(DECODE(SUBSTR(time,10,2),'15',1,0)) H15 + , SUM(DECODE(SUBSTR(time,10,2),'16',1,0)) H16 + , SUM(DECODE(SUBSTR(time,10,2),'17',1,0)) H17 + , SUM(DECODE(SUBSTR(time,10,2),'18',1,0)) H18 + , SUM(DECODE(SUBSTR(time,10,2),'19',1,0)) H19 + , SUM(DECODE(SUBSTR(time,10,2),'20',1,0)) H20 + , SUM(DECODE(SUBSTR(time,10,2),'21',1,0)) H21 + , SUM(DECODE(SUBSTR(time,10,2),'22',1,0)) H22 + , SUM(DECODE(SUBSTR(time,10,2),'23',1,0)) H23 + , COUNT(*) TOTAL +FROM + v$log_history a +WHERE + (TO_DATE(SUBSTR(time, 1,8), 'MM/DD/RR') + >= + TO_DATE('&startDate', 'DD-MON-YYYY') + ) + AND + (TO_DATE(SUBSTR(time, 1,8), 'MM/DD/RR') + <= + TO_DATE('&endDate', 'DD-MON-YYYY') + ) +GROUP BY SUBSTR(time,1,5) +/ + diff --git a/idev/perf_log_switch_history_count_daily_all.sql b/idev/perf_log_switch_history_count_daily_all.sql new file mode 100644 index 0000000..db2b4c6 --- /dev/null +++ b/idev/perf_log_switch_history_count_daily_all.sql @@ -0,0 +1,81 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_log_switch_history_count_daily_all.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports on how often log switches occur in your database on a | +-- | daily basis. It will query all records contained in | +-- | v$log_history. This script is to be used with an Oracle 8 | +-- | database or higher. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN H00 FORMAT 999 HEADING '00' +COLUMN H01 FORMAT 999 HEADING '01' +COLUMN H02 FORMAT 999 HEADING '02' +COLUMN H03 FORMAT 999 HEADING '03' +COLUMN H04 FORMAT 999 HEADING '04' +COLUMN H05 FORMAT 999 HEADING '05' +COLUMN H06 FORMAT 999 HEADING '06' +COLUMN H07 FORMAT 999 HEADING '07' +COLUMN H08 FORMAT 999 HEADING '08' +COLUMN H09 FORMAT 999 HEADING '09' +COLUMN H10 FORMAT 999 HEADING '10' +COLUMN H11 FORMAT 999 HEADING '11' +COLUMN H12 FORMAT 999 HEADING '12' +COLUMN H13 FORMAT 999 HEADING '13' +COLUMN H14 FORMAT 999 HEADING '14' +COLUMN H15 FORMAT 999 HEADING '15' +COLUMN H16 FORMAT 999 HEADING '16' +COLUMN H17 FORMAT 999 HEADING '17' +COLUMN H18 FORMAT 999 HEADING '18' +COLUMN H19 FORMAT 999 HEADING '19' +COLUMN H20 FORMAT 999 HEADING '20' +COLUMN H21 FORMAT 999 HEADING '21' +COLUMN H22 FORMAT 999 HEADING '22' +COLUMN H23 FORMAT 999 HEADING '23' +COLUMN TOTAL FORMAT 999,999 HEADING 'Total' + + +SELECT + SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) DAY + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22 + , SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23 + , COUNT(*) TOTAL +FROM + v$log_history a +GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +ORDER BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) +/ diff --git a/idev/perf_lru_latch_contention.sql b/idev/perf_lru_latch_contention.sql new file mode 100644 index 0000000..5b49c18 --- /dev/null +++ b/idev/perf_lru_latch_contention.sql @@ -0,0 +1,34 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_lru_latch_contention.sql | +-- | CLASS : Tuning | +-- | PURPOSE : This script will detect latch contention in the db block buffer | +-- | LRU. The ratio of sleeps/gets should be < 1%. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN child_num HEADING "Child Number" +COLUMN ratio_sleeps_gets HEADING "Sleeps / Gets Ratio" +COLUMN ratio HEADING "Ratio" + +SELECT + child# child_num + , ROUND(sleeps/gets * 100,2) ratio_sleeps_gets + , ROUND(((1 - sleeps/gets) * 100),2) ratio +FROM + v$latch_children +WHERE + name = 'cache buffers lru chain' +/ + diff --git a/idev/perf_objects_without_statistics.sql b/idev/perf_objects_without_statistics.sql new file mode 100644 index 0000000..c6a7390 --- /dev/null +++ b/idev/perf_objects_without_statistics.sql @@ -0,0 +1,76 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_objects_without_statistics.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report on all objects that do not have statistics collected on | +-- | them. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN owner FORMAT a17 HEAD 'Owner' +COLUMN object_type FORMAT a15 HEAD 'Object Type' +COLUMN object_name FORMAT a30 HEAD 'Object Name' +COLUMN partition_name FORMAT a30 HEAD 'Partition Name' + +SELECT + owner owner + , 'Table' object_type + , table_name object_name + , NULL partition_name +FROM + sys.dba_tables +WHERE + last_analyzed IS NULL + AND owner NOT IN ('SYS','SYSTEM') + AND partitioned = 'NO' +UNION +SELECT + owner owner + , 'Index' object_type + , index_name object_name + , NULL partition_name +FROM + sys.dba_indexes +WHERE + last_analyzed IS NULL + AND owner NOT IN ('SYS','SYSTEM') + AND partitioned = 'NO' +UNION +SELECT + table_owner owner + , 'Table Partition' object_type + , table_name object_name + , partition_name partition_name +FROM + sys.dba_tab_partitions +WHERE + last_analyzed IS NULL + AND table_owner NOT IN ('SYS','SYSTEM') +UNION +SELECT + index_owner owner + , 'Index Partition' object_type + , index_name object_name + , partition_name partition_name +FROM + sys.dba_ind_partitions +WHERE + last_analyzed IS NULL + AND index_owner NOT IN ('SYS','SYSTEM') +ORDER BY + 1 + , 2 + , 3 +/ + diff --git a/idev/perf_performance_snapshot.sql b/idev/perf_performance_snapshot.sql new file mode 100644 index 0000000..4ac8f06 --- /dev/null +++ b/idev/perf_performance_snapshot.sql @@ -0,0 +1,199 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_performance_snapshot.sql | +-- | CLASS : Tuning | +-- | PURPOSE : This script will generate a small performance overview report | +-- | checking all key database performance indicators. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +PROMPT +PROMPT +-----------------------------------+ +PROMPT | Database Startup Date/Time | +PROMPT +-----------------------------------+ +PROMPT + +SELECT + instance "Instance Name" + , open_time "Open Date/Time" +FROM + v$thread +/ + +PROMPT +PROMPT +-----------------------------------+ +PROMPT | Buffer Cache Hit Ratio | +PROMPT +-----------------------------------+ +PROMPT + +SELECT + TRUNC( ( 1 - ( SUM(decode(name,'physical reads',value,0)) / + ( SUM(DECODE(name,'db block gets',value,0)) + + + (SUM(DECODE(name,'consistent gets',value,0))) + ) + ) + ) * 100 + ) "Buffer Hit Ratio" +FROM v$sysstat +/ + +SELECT + a.value + b.value "Logical reads" + , c.value "Physical Reads" + , d.value "Physical Writes" + , ROUND (100 * ( (a.value+b.value)-c.value) / (a.value+b.value) + ) "Buffer Hit Ratio" + , ROUND(c.value * 100 / (a.value + b.value)) "% Missed" +FROM + v$sysstat a + , v$sysstat b + , v$sysstat c + , v$sysstat d +WHERE + a.statistic#=37 + AND b.statistic#=38 + AND c.statistic#=39 + AND d.statistic#=40 +/ + +PROMPT +PROMPT +-----------------------------------+ +PROMPT | Data Dictionary Hit Ratio | +PROMPT +-----------------------------------+ +PROMPT + +SELECT + SUM(gets) "Data Dict. Gets" + , SUM(getmisses) "Data Dict. Cache Misses" + , ROUND((1-(sum(getmisses)/SUM(gets)))*100) "Data Dict Cache Hit Ratio" + , ROUND(SUM(getmisses)*100/SUM(gets)) "% Missed" +FROM + v$rowcache +/ + +PROMPT +PROMPT +-----------------------------------+ +PROMPT | Library Cache Miss Ratio | +PROMPT +-----------------------------------+ +PROMPT + +SELECT + SUM(pins) "Executions" + , SUM(reloads) "Cache Misses" + , ROUND((1-(SUM(reloads)/SUM(pins)))*100) "Library Cache Hit Ratio" + , ROUND(SUM(reloads)*100/SUM(pins)) "% Missed" +FROM + v$librarycache +/ + +SELECT + namespace "Namespace" + , TRUNC(gethitratio*100) "Hit Ratio" + , TRUNC(pinhitratio*100) "Pin Hit Ratio" + , reloads "Reloads" + , invalidations "Invalidations" +FROM + v$librarycache +/ + +PROMPT +PROMPT +-----------------------------------+ +PROMPT | Redo Log Buffer | +PROMPT +-----------------------------------+ +PROMPT + +SELECT + SUBSTR(name,1,30) "Name" + , TO_CHAR(value, '999,999') "Bytes" +FROM + v$sysstat +WHERE + name ='redo log space requests' +/ + +SELECT + name "Name" + , TO_CHAR(bytes, '999,999,999,999') "Bytes" +FROM + v$sgastat +WHERE + name ='free memory' +/ + +SELECT + TO_CHAR(SUM(executions), '999,999,999,999,999,999') "Tot SQL since startup" + , TO_CHAR(SUM(users_executing), '999,999,999,999,999') "SQL executing now" +FROM + v$sqlarea +/ + +PROMPT +PROMPT +--------------------------------------------------------+ +PROMPT | If miss_ratio or immediate_miss_ratio > 1 then latch | +PROMPT | contention exists, decrease LOG_SMALL_ENTRY_MAX_SIZE | +PROMPT +--------------------------------------------------------+ +PROMPT + +SELECT + SUBSTR(ln.name,1,30) "Name" + , (misses/(gets+.001)) * 100 "Miss Ratio" + , (immediate_misses/(immediate_gets+.001)) * 100 "Immd. Miss Ratio" +FROM + v$latch l + , v$latchname ln +WHERE + l.latch# = ln.latch# + AND ( (( misses / (gets+.001)) * 100 > .1 ) + OR + (( immediate_misses / (immediate_gets+.001)) * 100 > .1) + ) +ORDER BY + ln.name +/ + +PROMPT +PROMPT +--------------------------------------------------------+ +PROMPT | If these are < 1% of Total Number of requests for data | +PROMPT | then extra rollback segments are needed. | +PROMPT +--------------------------------------------------------+ +PROMPT + +SELECT + class "Class" + , count "Count" +FROM + v$waitstat +WHERE + class IN ( 'free list' + , 'system undo header' + , 'system undo block' + , 'undo header' + , 'undo block') +GROUP BY + class + , count +/ + +PROMPT +PROMPT +-----------------------------------+ +PROMPT | Total Number of Requests for Data | +PROMPT +-----------------------------------+ +PROMPT + +SELECT TO_CHAR(SUM(value), '999,999,999,999,999') "Total Requests" +FROM v$sysstat +WHERE name IN ('db block gets','consistent gets') +/ + diff --git a/idev/perf_redo_log_contention.sql b/idev/perf_redo_log_contention.sql new file mode 100644 index 0000000..ffc144c --- /dev/null +++ b/idev/perf_redo_log_contention.sql @@ -0,0 +1,68 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_redo_log_contention.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report on overall redo log contention for the instance since | +-- | the instance was last started. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +prompt +prompt ======================================= +prompt Latches +prompt ======================================= +prompt + +COLUMN name FORMAT a30 HEADING 'Latch Name' +COLUMN gets FORMAT 999,999,999 HEADING 'Gets' +COLUMN misses FORMAT 999,999,999 HEADING 'Misses' +COLUMN sleeps FORMAT 999,999,999 HEADING 'Sleeps' +COLUMN immediate_gets FORMAT 999,999,999 HEADING 'Immediate Gets' +COLUMN immediate_misses FORMAT 999,999,999 HEADING 'Immediate Misses' + +BREAK ON report +COMPUTE SUM OF gets ON report +COMPUTE SUM OF misses ON report +COMPUTE SUM OF sleeps ON report +COMPUTE SUM OF immediate_gets ON report +COMPUTE SUM OF immediate_misses ON report + +SELECT + INITCAP(name) name + , gets + , misses + , sleeps + , immediate_gets + , immediate_misses +FROM sys.v_$latch +WHERE name LIKE 'redo%' +ORDER BY 1; + + +prompt +prompt ======================================= +prompt System Statistics +prompt ======================================= +prompt + +COLUMN name FORMAT a30 HEADING 'Statistics Name' +COLUMN value FORMAT 999,999,999,999 HEADING 'Value' + +SELECT + name + , value +FROM + v$sysstat +WHERE + name LIKE 'redo%'; diff --git a/idev/perf_sga_free_pool.sql b/idev/perf_sga_free_pool.sql new file mode 100644 index 0000000..f9c5f10 --- /dev/null +++ b/idev/perf_sga_free_pool.sql @@ -0,0 +1,34 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_sga_free_pool.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report on Shared / Java Pool within SGA. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +COLUMN pool HEADING "Pool" +COLUMN name HEADING "Name" +COLUMN sgasize HEADING "Allocated" FORMAT 999,999,999 +COLUMN bytes HEADING "Free" FORMAT 999,999,999 + +SELECT + f.pool + , f.name + , s.sgasize + , f.bytes + , ROUND(f.bytes/s.sgasize*100, 2) "% Free" +FROM + (SELECT SUM(bytes) sgasize, pool FROM v$sgastat GROUP BY pool) s + , v$sgastat f +WHERE + f.name = 'free memory' + AND f.pool = s.pool +/ + diff --git a/idev/perf_sga_usage.sql b/idev/perf_sga_usage.sql new file mode 100644 index 0000000..c09c9fe --- /dev/null +++ b/idev/perf_sga_usage.sql @@ -0,0 +1,37 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_sga_usage.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report on all components within the SGA. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET FEEDBACK off +SET VERIFY off + +COLUMN bytes FORMAT 999,999,999 +COLUMN percent FORMAT 999.99999 + +break on report + +compute sum of bytes on report +compute sum of percent on report + +SELECT + a.name + , a.bytes + , a.bytes/(b.sum_bytes*100) Percent +FROM sys.v_$sgastat a + , (SELECT SUM(value)sum_bytes FROM sys.v_$sga) b +ORDER BY bytes DESC +/ + diff --git a/idev/perf_shared_pool_memory.sql b/idev/perf_shared_pool_memory.sql new file mode 100644 index 0000000..c581793 --- /dev/null +++ b/idev/perf_shared_pool_memory.sql @@ -0,0 +1,36 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_shared_pool_memory.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Query the total memory in the Shared Pool and the amount of | +-- | free memory. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 + +COLUMN value FORMAT 999,999,999,999 HEADING "Shared Pool Size" +COLUMN bytes FORMAT 999,999,999,999 HEADING "Free Bytes" +COLUMN percentfree FORMAT 999 HEADING "Percent Free" + +SELECT + TO_NUMBER(p.value) value + , s.bytes bytes + , (s.bytes/p.value) * 100 percentfree +FROM + v$sgastat s + , v$parameter p +WHERE + s.name = 'free memory' + AND s.pool = 'shared pool' + AND p.name = 'shared_pool_size' +/ + diff --git a/idev/perf_top_10_procedures.sql b/idev/perf_top_10_procedures.sql new file mode 100644 index 0000000..8eb3212 --- /dev/null +++ b/idev/perf_top_10_procedures.sql @@ -0,0 +1,41 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_top_10_procedures.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report on top 10 procedures with respect to usage . | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN ptyp FORMAT a13 HEADING 'Object Type' +COLUMN obj FORMAT a42 HEADING 'Object Name' +COLUMN noe FORMAT 999,999,999,999,999 HEADING 'Number of Executions' + +BREAK ON report +COMPUTE sum OF noe ON report + +SELECT + ptyp + , obj + , 0 - exem noe +FROM ( select distinct exem, ptyp, obj + from ( select + o.type ptyp + , o.owner || '.' || o.name obj + , 0 - o.executions exem + from v$db_object_cache O + where o.type in ('FUNCTION','PACKAGE','PACKAGE BODY','PROCEDURE','TRIGGER') + ) + ) +WHERE rownum <= 10; + diff --git a/idev/perf_top_10_tables.sql b/idev/perf_top_10_tables.sql new file mode 100644 index 0000000..ab43afb --- /dev/null +++ b/idev/perf_top_10_tables.sql @@ -0,0 +1,66 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_top_10_tables.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report on top 10 tables with respect to usage and command type. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN ctyp FORMAT a13 HEADING 'Command Type' +COLUMN obj FORMAT a30 HEADING 'Object Name' +COLUMN noe FORMAT 999,999,999,999,999 HEADING 'Number of Executions' +COLUMN gets FORMAT 999,999,999,999,999 HEADING 'Buffer Gets' +COLUMN rowp FORMAT 999,999,999,999,999 HEADING 'Rows Processed' + +BREAK ON report +COMPUTE sum OF noe ON report +COMPUTE sum OF gets ON report +COMPUTE sum OF rowp ON report + +SELECT + ctyp + , obj + , 0 - exem noe + , gets + , rowp +FROM ( + select distinct exem, ctyp, obj, gets, rowp + from (select + DECODE( s.command_type + , 2, 'Insert into ' + , 3, 'Select from ' + , 6, 'Update of ' + , 7, 'Delete from ' + , 26, 'Lock of ') ctyp + , o.owner || '.' || o.name obj + , SUM(0 - s.executions) exem + , SUM(s.buffer_gets) gets + , SUM(s.rows_processed) rowp + from + v$sql s + , v$object_dependency d + , v$db_object_cache o + where + s.command_type IN (2,3,6,7,26) + and d.from_address = s.address + and d.to_owner = o.owner + and d.to_name = o.name + and o.type = 'TABLE' + group by + s.command_type + , o.owner + , o.name + ) +) +WHERE rownum <= 10; diff --git a/idev/perf_top_sql_by_buffer_gets.sql b/idev/perf_top_sql_by_buffer_gets.sql new file mode 100644 index 0000000..3e5dd56 --- /dev/null +++ b/idev/perf_top_sql_by_buffer_gets.sql @@ -0,0 +1,51 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_top_sql_by_buffer_gets.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report on top SQL statements ordered by most buffer gets. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN username FORMAT a18 HEADING 'Username' +COLUMN buffer_gets FORMAT 999,999,999,999,999 HEADING 'Buffer Gets' +COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' +COLUMN gets_per_exec FORMAT 999,999,999,999,999 HEADING 'Gets / Executions' +COLUMN sql HEADING 'SQL Statement' + +BREAK ON report +COMPUTE sum OF buffer_gets ON report +COMPUTE sum OF executions ON report +COMPUTE sum OF gets_per_exec ON report + +prompt +prompt ============================================= +prompt SQL with buffer gets greater than 1000 +prompt ============================================= + + +SELECT + UPPER(b.username) username + , a.buffer_gets buffer_gets + , a.executions executions + , a.buffer_gets / decode(a.executions, 0, 1, a.executions) gets_per_exec + , sql_text || chr(10) || chr(10) sql +FROM + sys.v_$sqlarea a + , dba_users b +WHERE + a.parsing_user_id = b.user_id + AND a.buffer_gets > 1000 + AND b.username NOT IN ('SYS','SYSTEM') +ORDER BY + buffer_gets desc; diff --git a/idev/perf_top_sql_by_disk_reads.sql b/idev/perf_top_sql_by_disk_reads.sql new file mode 100644 index 0000000..c33fb27 --- /dev/null +++ b/idev/perf_top_sql_by_disk_reads.sql @@ -0,0 +1,50 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_top_sql_by_disk_reads.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Report on top SQL statements ordered by disk reads. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN username FORMAT a18 HEADING 'Username' +COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads' +COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions' +COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Executions' +COLUMN sql HEADING 'SQL Statement' + +BREAK ON report +COMPUTE sum OF disk_reads ON report +COMPUTE sum OF executions ON report +COMPUTE sum OF reads_per_exec ON report + +prompt +prompt ============================================= +prompt SQL with disk reads greater than 1000 +prompt ============================================= + +SELECT + UPPER(b.username) username + , a.disk_reads disk_reads + , a.executions executions + , a.disk_reads / decode(a.executions, 0, 1, a.executions) reads_per_exec + , sql_text || chr(10) || chr(10) sql +FROM + sys.v_$sqlarea a + , dba_users b +WHERE + a.parsing_user_id = b.user_id + AND a.disk_reads > 1000 + AND b.username NOT IN ('SYS','SYSTEM') +ORDER BY + disk_reads desc; diff --git a/idev/plsql_random_numbers.sql b/idev/plsql_random_numbers.sql new file mode 100644 index 0000000..3e68ed5 --- /dev/null +++ b/idev/plsql_random_numbers.sql @@ -0,0 +1,85 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : plsql_random_numbers.sql | +-- | CLASS : PL/SQL | +-- | PURPOSE : PL/SQL implementation of the linear congruential method of | +-- | generating random numbers. It is in the form of a PL/SQL | +-- | package, so it should be easy add to existing applications. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CREATE OR REPLACE PACKAGE random IS + + -- Returns random integer between [0, r-1] + FUNCTION rndint(r IN NUMBER) RETURN NUMBER; + + -- Returns random real between [0, 1] + FUNCTION rndflt RETURN NUMBER; + +END; +/ + +CREATE OR REPLACE PACKAGE BODY random IS + + m CONSTANT NUMBER:=100000000; /* initial conditions */ + m1 CONSTANT NUMBER:=10000; /* (for best results) */ + b CONSTANT NUMBER:=31415821; /* */ + a NUMBER; /* seed */ + the_date DATE; /* */ + days NUMBER; /* for generating initial seed */ + secs NUMBER; /* */ + + -- ------------------------ + -- Private utility FUNCTION + -- ------------------------ + FUNCTION mult(p IN NUMBER, q IN NUMBER) RETURN NUMBER IS + p1 NUMBER; + p0 NUMBER; + q1 NUMBER; + q0 NUMBER; + BEGIN + p1:=TRUNC(p/m1); + p0:=MOD(p,m1); + q1:=TRUNC(q/m1); + q0:=MOD(q,m1); + RETURN(MOD((MOD(p0*q1+p1*q0,m1)*m1+p0*q0),m)); + END; + + -- --------------------------------------- + -- Returns random integer between [0, r-1] + -- --------------------------------------- + FUNCTION rndint (r IN NUMBER) RETURN NUMBER IS + BEGIN + -- Generate a random NUMBER, and set it to be the new seed + a:=MOD(mult(a,b)+1,m); + + -- Convert it to integer between [0, r-1] and return it + RETURN(TRUNC((TRUNC(a/m1)*r)/m1)); + END; + + -- ---------------------------------- + -- Returns random real between [0, 1] + -- ---------------------------------- + FUNCTION rndflt RETURN NUMBER IS + BEGIN + -- Generate a random NUMBER, and set it to be the new seed + a:=MOD(mult(a,b)+1,m); + RETURN(a/m); + END; + +BEGIN + -- Generate initial seed "a" based on system date + the_date:=SYSDATE; + days:=TO_NUMBER(TO_CHAR(the_date, 'J')); + secs:=TO_NUMBER(TO_CHAR(the_date, 'SSSSS')); + a:=days*24*3600+secs; +END; +/ + diff --git a/idev/plsql_webdba_utl_pkg.sql b/idev/plsql_webdba_utl_pkg.sql new file mode 100644 index 0000000..01265b8 --- /dev/null +++ b/idev/plsql_webdba_utl_pkg.sql @@ -0,0 +1,129 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : plsql_webdba_utl_pkg.sql | +-- | CLASS : PL/SQL | +-- | PURPOSE : Example PL/SQL package that shows how to use dynamic SQL before | +-- | Oracle8i. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +CREATE OR REPLACE PACKAGE webdba_util AS + + PROCEDURE drop_user(username_in IN VARCHAR2); + PROCEDURE create_user(username_in IN VARCHAR2, + default_tablespace_in IN VARCHAR2, + temporary_tablespace_in IN VARCHAR2, + password_in IN VARCHAR2); + PROCEDURE change_user_password(username_in IN VARCHAR2, + password_in IN VARCHAR2); + PROCEDURE grant_user(username_in IN VARCHAR2, + privilege_in IN VARCHAR2); + PROCEDURE revoke_user(username_in IN VARCHAR2, + privilege_in IN VARCHAR2); + +END webdba_util; +/ +show errors + +CREATE OR REPLACE PACKAGE BODY webdba_util AS + + PROCEDURE drop_user(username_in IN VARCHAR2) IS + v_Cursor NUMBER; + v_DropUserString VARCHAR2(500); + v_Results INTEGER; + BEGIN + + v_Cursor := DBMS_SQL.open_cursor; + v_DropUserString := 'DROP USER ' || username_in || ' CASCADE'; + + DBMS_SQL.PARSE(v_Cursor, v_DropUserString, DBMS_SQL.V7); + v_Results := DBMS_SQL.EXECUTE(v_Cursor); + + DBMS_SQL.close_cursor(v_Cursor); + + END drop_user; + + PROCEDURE create_user(username_in IN VARCHAR2, + default_tablespace_in IN VARCHAR2, + temporary_tablespace_in IN VARCHAR2, + password_in IN VARCHAR2) IS + v_Cursor NUMBER; + v_DropUserString VARCHAR2(1500); + v_Results INTEGER; + BEGIN + + v_Cursor := DBMS_SQL.open_cursor; + v_DropUserString := 'CREATE USER ' || username_in || ' DEFAULT TABLESPACE ' || default_tablespace_in || +' TEMPORARY TABLESPACE ' || temporary_tablespace_in || ' IDENTIFIED BY ' || password_in; + + DBMS_SQL.PARSE(v_Cursor, v_DropUserString, DBMS_SQL.V7); + v_Results := DBMS_SQL.EXECUTE(v_Cursor); + + DBMS_SQL.close_cursor(v_Cursor); + + END create_user; + + + PROCEDURE change_user_password(username_in IN VARCHAR2, + password_in IN VARCHAR2) IS + v_Cursor NUMBER; + v_AlterUserString VARCHAR2(500); + v_Results INTEGER; + BEGIN + + v_Cursor := DBMS_SQL.open_cursor; + v_AlterUserString := 'ALTER USER ' || username_in || ' IDENTIFIED BY ' || password_in; + + DBMS_SQL.PARSE(v_Cursor, v_AlterUserString, DBMS_SQL.V7); + v_Results := DBMS_SQL.EXECUTE(v_Cursor); + + DBMS_SQL.close_cursor(v_Cursor); + + END change_user_password; + + PROCEDURE grant_user(username_in IN VARCHAR2, + privilege_in IN VARCHAR2) IS + v_Cursor NUMBER; + v_AlterUserString VARCHAR2(500); + v_Results INTEGER; + BEGIN + + v_Cursor := DBMS_SQL.open_cursor; + v_AlterUserString := 'GRANT ' || privilege_in || ' TO ' || username_in; + + DBMS_SQL.PARSE(v_Cursor, v_AlterUserString, DBMS_SQL.V7); + v_Results := DBMS_SQL.EXECUTE(v_Cursor); + + DBMS_SQL.close_cursor(v_Cursor); + + END grant_user; + + PROCEDURE revoke_user(username_in IN VARCHAR2, + privilege_in IN VARCHAR2) IS + v_Cursor NUMBER; + v_AlterUserString VARCHAR2(500); + v_Results INTEGER; + BEGIN + + v_Cursor := DBMS_SQL.open_cursor; + v_AlterUserString := 'REVOKE ' || privilege_in || ' FROM ' || username_in; + + DBMS_SQL.PARSE(v_Cursor, v_AlterUserString, DBMS_SQL.V7); + v_Results := DBMS_SQL.EXECUTE(v_Cursor); + + DBMS_SQL.close_cursor(v_Cursor); + + END revoke_user; + + +END webdba_util; +/ + +show errors diff --git a/idev/rac_instances.sql b/idev/rac_instances.sql new file mode 100644 index 0000000..a408012 --- /dev/null +++ b/idev/rac_instances.sql @@ -0,0 +1,71 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rac_instances.sql | +-- | CLASS : Real Application Clusters | +-- | PURPOSE : Provide a summary report of all configured instances for the | +-- | current clustered database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Oracle RAC Instances | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a13 HEAD 'Instance|Name / Number' +COLUMN thread# FORMAT 99999999 HEAD 'Thread #' +COLUMN host_name FORMAT a28 HEAD 'Host|Name' +COLUMN status FORMAT a6 HEAD 'Status' +COLUMN startup_time FORMAT a20 HEAD 'Startup|Time' +COLUMN database_status FORMAT a8 HEAD 'Database|Status' +COLUMN archiver FORMAT a8 HEAD 'Archiver' +COLUMN logins FORMAT a10 HEAD 'Logins?' +COLUMN shutdown_pending FORMAT a8 HEAD 'Shutdown|Pending?' +COLUMN active_state FORMAT a6 HEAD 'Active|State' +COLUMN version HEAD 'Version' + +SELECT + instance_name || ' (' || instance_number || ')' instance_name + , thread# + , host_name + , status + , TO_CHAR(startup_time, 'DD-MON-YYYY HH:MI:SS') startup_time + , database_status + , archiver + , logins + , shutdown_pending + , active_state + , version +FROM + gv$instance +ORDER BY + instance_number; diff --git a/idev/rc_databases.sql b/idev/rc_databases.sql new file mode 100644 index 0000000..416b7e4 --- /dev/null +++ b/idev/rc_databases.sql @@ -0,0 +1,62 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rc_databases.sql | +-- | CLASS : Recovery Manager | +-- | PURPOSE : Provide a listing of all databases found in the RMAN recovery | +-- | catalog. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : RMAN Registered Databases | +PROMPT | Instance : ¤t_instance | +PROMPT | Note : Listing of all databases in the RMAN recovery catalog. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN db_key FORMAT 999999 HEADING 'DB|Key' +COLUMN dbinc_key FORMAT 999999 HEADING 'DB Inc|Key' +COLUMN dbid HEADING 'DBID' +COLUMN name FORMAT a12 HEADING 'Database|Name' +COLUMN resetlogs_change_num HEADING 'Resetlogs|Change Num' +COLUMN resetlogs FORMAT a21 HEADING 'Reset Logs|Date/Time' + +SELECT + rd.db_key + , rd.dbinc_key + , rd.dbid + , rd.name + , rd.resetlogs_change# resetlogs_change_num + , TO_CHAR(rd.resetlogs_time, 'DD-MON-YYYY HH24:MI:SS') resetlogs +FROM + rc_database rd +ORDER BY + rd.name +/ diff --git a/idev/rman_backup_pieces.sql b/idev/rman_backup_pieces.sql new file mode 100644 index 0000000..737bbcb --- /dev/null +++ b/idev/rman_backup_pieces.sql @@ -0,0 +1,77 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rman_backup_pieces.sql | +-- | CLASS : Recovery Manager | +-- | PURPOSE : Provide a listing of all RMAN Backup Pieces. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : RMAN Backup Pieces | +PROMPT | Instance : ¤t_instance | +PROMPT | Note : Available backup pieces contained in the control file. | +PROMPT | Includes available and expired backup sets. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN bs_key FORMAT 9999 HEADING 'BS|Key' +COLUMN piece# FORMAT 99999 HEADING 'Piece|#' +COLUMN copy# FORMAT 9999 HEADING 'Copy|#' +COLUMN bp_key FORMAT 9999 HEADING 'BP|Key' +COLUMN status FORMAT a9 HEADING 'Status' +COLUMN handle FORMAT a75 HEADING 'Handle' +COLUMN start_time FORMAT a19 HEADING 'Start|Time' +COLUMN completion_time FORMAT a19 HEADING 'End|Time' +COLUMN elapsed_seconds FORMAT 999,999 HEADING 'Elapsed|Seconds' +COLUMN deleted FORMAT a8 HEADING 'Deleted?' + +BREAK ON bs_key SKIP 2 + +SELECT + bs.recid bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , DECODE( bp.status + , 'A', 'Available' + , 'D', 'Deleted' + , 'X', 'Expired') status + , bp.handle handle + , TO_CHAR(bp.start_time, 'mm/dd/yyyy HH24:MI:SS') start_time + , TO_CHAR(bp.completion_time, 'mm/dd/yyyy HH24:MI:SS') completion_time + , bp.elapsed_seconds elapsed_seconds +FROM + v$backup_set bs JOIN v$backup_piece bp USING (set_stamp,set_count) +WHERE + bp.status IN ('A', 'X') +ORDER BY + bs.recid + , bp.piece# +/ diff --git a/idev/rman_backup_sets.sql b/idev/rman_backup_sets.sql new file mode 100644 index 0000000..dc58e5b --- /dev/null +++ b/idev/rman_backup_sets.sql @@ -0,0 +1,96 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rman_backup_sets.sql | +-- | CLASS : Recovery Manager | +-- | PURPOSE : Provide a listing of all RMAN Backup Sets. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : RMAN Backup Sets | +PROMPT | Instance : ¤t_instance | +PROMPT | Note : Available backup sets contained in the control file. | +PROMPT | Includes available and expired backup sets. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN bs_key FORMAT 999999 HEADING 'BS|Key' +COLUMN backup_type FORMAT a14 HEADING 'Backup|Type' +COLUMN device_type FORMAT a6 HEADING 'Device|Type' +COLUMN controlfile_included FORMAT a11 HEADING 'Controlfile|Included?' +COLUMN spfile_included FORMAT a9 HEADING 'SPFILE|Included?' +COLUMN incremental_level FORMAT 999999 HEADING 'Inc.|Level' +COLUMN pieces FORMAT 9,999 HEADING '# of|Pieces' +COLUMN start_time FORMAT a19 HEADING 'Start|Time' +COLUMN completion_time FORMAT a19 HEADING 'End|Time' +COLUMN elapsed_seconds FORMAT 999,999 HEADING 'Elapsed|Seconds' +COLUMN tag FORMAT a19 HEADING 'Tag' +COLUMN block_size FORMAT 999,999 HEADING 'Block|Size' + +SELECT + bs.recid bs_key + , DECODE(backup_type + , 'L', 'Archived Logs' + , 'D', 'Datafile Full' + , 'I', 'Incremental') backup_type + , device_type device_type + , DECODE( bs.controlfile_included + , 'NO', null + , bs.controlfile_included) controlfile_included + , sp.spfile_included spfile_included + , bs.incremental_level incremental_level + , bs.pieces pieces + , TO_CHAR(bs.start_time, 'mm/dd/yyyy HH24:MI:SS') start_time + , TO_CHAR(bs.completion_time, 'mm/dd/yyyy HH24:MI:SS') completion_time + , bs.elapsed_seconds elapsed_seconds + , bp.tag tag + , bs.block_size block_size +FROM + v$backup_set bs + , (select distinct + set_stamp + , set_count + , tag + , device_type + from v$backup_piece + where status in ('A', 'X')) bp + , (select distinct + set_stamp + , set_count + , 'YES' spfile_included + from v$backup_spfile) sp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bs.set_stamp = sp.set_stamp (+) + AND bs.set_count = sp.set_count (+) +ORDER BY + bs.recid +/ diff --git a/idev/rman_backup_sets_8i.sql b/idev/rman_backup_sets_8i.sql new file mode 100644 index 0000000..c9ef755 --- /dev/null +++ b/idev/rman_backup_sets_8i.sql @@ -0,0 +1,93 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rman_backup_sets_8i.sql | +-- | CLASS : Recovery Manager | +-- | PURPOSE : Provide a listing of all RMAN Backup Sets. (Oracle8i Release) | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : RMAN Backup Sets (8i) | +PROMPT | Instance : ¤t_instance | +PROMPT | Note : Available backup sets contained in the control file. | +PROMPT | Includes available and expired backup sets. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN bs_key FORMAT 999999 HEADING 'BS|Key' +COLUMN backup_type FORMAT a13 HEADING 'Backup|Type' +COLUMN device_type FORMAT a6 HEADING 'Device|Type' +COLUMN controlfile_included FORMAT a11 HEADING 'Controlfile|Included?' +COLUMN incremental_level FORMAT 999999 HEADING 'Inc.|Level' +COLUMN pieces FORMAT 9,999 HEADING '# of|Pieces' +COLUMN start_time FORMAT a17 HEADING 'Start|Time' +COLUMN completion_time FORMAT a17 HEADING 'End|Time' +COLUMN elapsed_seconds FORMAT 999,999 HEADING 'Elapsed|Seconds' +COLUMN tag FORMAT a20 HEADING 'Tag' +COLUMN block_size FORMAT 9,999 HEADING 'Block|Size' + +prompt +prompt Available backup sets contained in the control file. +prompt Includes available and expired backup sets. +prompt + +SELECT + bs.recid bs_key + , DECODE(backup_type + , 'L', 'Archived Logs' + , 'D', 'Datafile Full' + , 'I', 'Incremental') backup_type + , device_type device_type + , DECODE( bs.controlfile_included + , 'NO', null + , bs.controlfile_included) controlfile_included + , bs.incremental_level incremental_level + , bs.pieces pieces + , TO_CHAR(bs.start_time, 'mm/dd/yy HH24:MI:SS') start_time + , TO_CHAR(bs.completion_time, 'mm/dd/yy HH24:MI:SS') completion_time + , bs.elapsed_seconds elapsed_seconds + , bp.tag tag + , bs.block_size block_size +FROM + v$backup_set bs + , (select distinct + set_stamp + , set_count + , tag + , device_type + from v$backup_piece + where status in ('A', 'X')) bp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count +ORDER BY + bs.recid +/ + diff --git a/idev/rman_configuration.sql b/idev/rman_configuration.sql new file mode 100644 index 0000000..1e5e19c --- /dev/null +++ b/idev/rman_configuration.sql @@ -0,0 +1,54 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rman_configuration.sql | +-- | CLASS : Recovery Manager | +-- | PURPOSE : Provide a listing of all non-default RMAN configuration | +-- | parameters. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : RMAN Configuration | +PROMPT | Instance : ¤t_instance | +PROMPT | Note : RMAN configuration settings that are not default. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN name FORMAT a48 HEADING 'Name' +COLUMN value FORMAT a55 HEADING 'Value' + +SELECT + name + , value +FROM + v$rman_configuration +ORDER BY + name +/ diff --git a/idev/rman_configuration_clear_all_9i.rcv b/idev/rman_configuration_clear_all_9i.rcv new file mode 100644 index 0000000..31d5e1a --- /dev/null +++ b/idev/rman_configuration_clear_all_9i.rcv @@ -0,0 +1,57 @@ +# +----------------------------------------------------------------------------+ +# | Jeffrey M. Hunter | +# | jhunter@idevelopment.info | +# | www.idevelopment.info | +# |----------------------------------------------------------------------------| +# | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +# |----------------------------------------------------------------------------| +# | DATABASE : Oracle | +# | FILE : rman_configuration_clear_all_9i.rcv | +# | CLASS : Recovery Manager | +# | PURPOSE : Provides an RMAN script used to clear all persistent RMAN | +# | configuration parameters to their default value. | +# | NOTE : As with any code, ensure to test this script in a development | +# | environment before attempting to run it in production. | +# +----------------------------------------------------------------------------+ + +# +----------------------------------------------------------------------------+ +# | <<< RMAN DEFAULT SETTING >>> | +# |----------------------------------------------------------------------------+--------------------------+ +# | CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default | +# | CONFIGURE BACKUP OPTIMIZATION OFF; # default | +# | CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default | +# | CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default | +# | CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default | +# | CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default | +# | CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default | +# | CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default | +# | CONFIGURE MAXSETSIZE TO UNLIMITED; # default | +# | CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/9.2.0/dbs/snapcf_ORA920.f'; # default | +# +-------------------------------------------------------------------------------------------------------+ + +CONFIGURE RETENTION POLICY CLEAR; + +CONFIGURE BACKUP OPTIMIZATION CLEAR; + +CONFIGURE DEFAULT DEVICE TYPE CLEAR; + +CONFIGURE CONTROLFILE AUTOBACKUP CLEAR; +CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK CLEAR; +CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT CLEAR; + +CONFIGURE DEVICE TYPE DISK CLEAR; + +CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK CLEAR; +CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT CLEAR; +CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK CLEAR; +CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT CLEAR; + +CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR; +CONFIGURE CHANNEL DEVICE TYPE SBT CLEAR; + +CONFIGURE MAXSETSIZE CLEAR; + +CONFIGURE SNAPSHOT CONTROLFILE NAME CLEAR; + +# CONFIGURE EXCLUDE FOR TABLESPACE USERS_READ_TBS; + diff --git a/idev/rman_configuration_setup_9i.rcv b/idev/rman_configuration_setup_9i.rcv new file mode 100644 index 0000000..aa6b344 --- /dev/null +++ b/idev/rman_configuration_setup_9i.rcv @@ -0,0 +1,467 @@ +# +----------------------------------------------------------------------------+ +# | Jeffrey M. Hunter | +# | jhunter@idevelopment.info | +# | www.idevelopment.info | +# |----------------------------------------------------------------------------| +# | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +# |----------------------------------------------------------------------------| +# | DATABASE : Oracle | +# | FILE : rman_configuration_setup_9i.rcv | +# | CLASS : Recovery Manager | +# | PURPOSE : Provides an example RMAN script used to persist Oracle9i RMAN | +# | configuration parameters to the control file of the target | +# | database. These parameters are used to control default RMAN | +# | operations. Some of the operations that can be performed are: | +# | | +# | - The required number of backups of each datafile. | +# | - The number of server processes that will perform Backup | +# | and Restore tasks in parallel. | +# | - The directory where on-disk backups will be stored. | +# | | +# | This script will can be run by RMAN to configure (persist) the | +# | default parameters for the target database. For parameters that | +# | should maintain their default setting, should use the "CLEAR" | +# | command to reset the parameter explicitly. | +# | | +# | NOTE : As with any code, ensure to test this script in a development | +# | environment before attempting to run it in production. | +# +----------------------------------------------------------------------------+ + +# +----------------------------------------------------------------------------+ +# | <<< RMAN DEFAULT SETTING >>> | +# |----------------------------------------------------------------------------+--------------------------+ +# | CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default | +# | CONFIGURE BACKUP OPTIMIZATION OFF; # default | +# | CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default | +# | CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default | +# | CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default | +# | CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default | +# | CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default | +# | CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default | +# | CONFIGURE MAXSETSIZE TO UNLIMITED; # default | +# | CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/9.2.0/dbs/snapcf_ORA920.f'; # default | +# +-------------------------------------------------------------------------------------------------------+ + + + +# +----------------------------------------------------------------------------+ +# | RETENTION POLICY | +# |----------------------------------------------------------------------------| +# | Used to control how long RMAN will keep backups. This can be configured by | +# | the "number" of backups taken, or by the numbers of "days" to keep. Here | +# | is an example of both: | +# | | +# | CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS; | +# | | +# | CONFIGURE RETENTION POLICY TO REDUNDANCY 2; | +# | | +# | Note that when configuring a retention policy, RMAN will *not* cause | +# | backups to be automatically deleted. The retention policy will, however, | +# | mark backups as OBSOLETE that have fallen outside the retention period. | +# | RMAN commands like "REPORT OBSOLETE" and "DELETE OBSOLETE" will work with | +# | these obsolete backups. | +# +----------------------------------------------------------------------------+ + +CONFIGURE RETENTION POLICY TO REDUNDANCY 2; + + + +# +----------------------------------------------------------------------------+ +# | BACKUP OPTIMIZATION | +# |----------------------------------------------------------------------------| +# | Used to enable or disable backup optimization. Backup file optimization | +# | can assist in reducing the space used to backup the database. When | +# | performing an RMAN backup, a check is done on the file before backup to | +# | see if the file already exists in a backupset with the same information: | +# | (dbid, checkpoint, and resetlogs data). | +# | | +# | For archive logs, the same file means the same dbid, thread, sequence, and | +# | resetlogs data. If the DELETE INPUT option is used, RMAN deletes all the | +# | files that would have been backed up, even when the file is not included | +# | due to file optimization. | +# | | +# | The two possible values for backup optimization is ON and OFF as shown in | +# | the following example syntax: | +# | | +# | CONFIGURE BACKUP OPTIMIZATION OFF; | +# | | +# | CONFIGURE BACKUP OPTIMIZATION ON; | +# | | +# | Use caution when enabling backup optimization if you use a media manager | +# | that has an expiration policy. The media manager can expire tapes | +# | containing backups (using its media control software), and RMAN will *not* | +# | make new backups because of optimization. One way to protect from this is | +# | to run CROSSCHECK periodically to synchronize the repository with the | +# | media manager. | +# | | +# | Also note that you should consider how backup optimization works with | +# | regards to the RETENTION POLICY. RMAN will only work with files within | +# | the retention period. For example, consider performing a backup with | +# | optimization enabled and a retention period of 3 days. RMAN will only | +# | compare the datafile with backup sets within the 3 day period - even if | +# | the datafile it is about to backup hasn't changed within that 3 days. | +# +----------------------------------------------------------------------------+ + +CONFIGURE BACKUP OPTIMIZATION CLEAR; + + + +# +----------------------------------------------------------------------------+ +# | DEFAULT DEVICE TYPE | +# |----------------------------------------------------------------------------| +# | Configures the default backup / restore device type for automatic | +# | channels. The two values for now are TAPE (SBT) and DISK (DISK) - the | +# | default being DISK. By default, the BACKUP and COPY commands only allocate | +# | channels of the default device type. For example, if you configure | +# | automatic channels for DISK and sbt and set the default device type to | +# | DISK, then RMAN only allocates disk channels when you run the BACKUP | +# | DATABASE command. You can override this behavior either by manually | +# | allocating channels in a RUN command, or by specifying DEVICE TYPE on the | +# | BACKUP command itself. The RESTORE command allocates automatic channels of | +# | all configured device types, regardless of the default device type. The | +# | RESTORE command obeys the PARALLELISM setting for each configured device | +# | type. | +# | | +# | The following two examples show the syntax for configuring the default | +# | device type to TAPE (SBT) - then another command to re-configure the | +# | default device type to DISK: | +# | | +# | CONFIGURE DEFAULT DEVICE TYPE TO SBT; | +# | | +# | CONFIGURE DEFAULT DEVICE TYPE TO DISK; | +# | | +# +----------------------------------------------------------------------------+ + +CONFIGURE DEFAULT DEVICE TYPE TO DISK; + + + +# +----------------------------------------------------------------------------+ +# | CONTROLFILE AUTOBACKUP | +# |----------------------------------------------------------------------------| +# | Starting with Oracle9i, RMAN offers the ability to backup the control file | +# | and the database parameter file (SPFILE only) and have this take place | +# | automatically by default after each backup. By default, this feature is | +# | not enabled. This feature can be enabled or disabled using the example | +# | syntax below: | +# | | +# | CONFIGURE CONTROLFILE AUTOBACKUP ON; | +# | | +# | CONFIGURE CONTROLFILE AUTOBACKUP OFF; | +# | | +# | When the CONTROLFILE AUTOBACKUP feature is enabled, then RMAN performs a | +# | control file autobackup in the following circumstances: | +# | | +# | - After every BACKUP or COPY command issued at the RMAN prompt. | +# | - Whenever a BACKUP or COPY command within a RUN block is followed | +# | by a command that is neither BACKUP nor COPY. | +# | - At the end of every RUN block if the last command in the block was | +# | either BACKUP or COPY. | +# | - After database structural changes such as adding a new tablespace, | +# | altering the state of a tablespace or datafile (for example, | +# | bringing it online), adding a new online redo log, renaming a file, | +# | adding a new redo thread, and so forth. This type of autobackup, | +# | unlike autobackups that occur in the preceding circumstances, goes | +# | only to disk. You can run: | +# | CONFIGURE CONTROLFILE AUTOBACKUP FOR DEVICE TYPE DISK | +# | to set a nondefault disk location. | +# | | +# | The "first channel" allocated during the BACKUP or COPY job creates the | +# | autobackup and places it "into its own backup set"; for post-structural | +# | autobackups, the "default disk channel" makes the backup. | +# | | +# | RMAN writes both the CONTROLFILE and the SPFILE (if the database was | +# | started with an SPFILE) to the same backup piece. | +# | After the CONTROLFILE AUTOBACKUP completes, Oracle writes a message | +# | containing the complete path of the backup piece and the device type to | +# | the alert log. | +# | | +# | RMAN automatically backs up the current control file using the default | +# | format of %F (see entry for CONFIGURE CONTROLFILE AUTOBACKUP FORMAT for an | +# | explanation of this substitution variable). You can change this format | +# | using the CONFIGURE CONTROLFILE AUTOBACKUP FORMAT and SET CONTROLFILE | +# | AUTOBACKUP FORMAT commands. | +# | | +# | When this feature is disabled, any BACKUP command that includes datafile 1 | +# | (including BACKUP DATABASE) automatically includes the current control | +# | file and server parameter file in the backup set. Otherwise, RMAN does not | +# | include these files. | +# | | +# | NOTE: You may see occasions where RMAN will sometimes automatically | +# | include the CONTROLFILE and SPFILE in the backupsets during a backup. This | +# | is normal and is documented (above). When CONTROLFILE AUTOBACKUP is not | +# | enabled, the CONTROLFILE and SPFILE, (if the database was started with an | +# | spfile), are included automatically when datafile 1 is backed up. Consider | +# | the following backup: | +# | | +# | RMAN> backup datafile 1; | +# | | +# | It will include the CONTROLFILE and the SPFILE (when the database is | +# | started with a spfile). | +# +----------------------------------------------------------------------------+ + +CONFIGURE CONTROLFILE AUTOBACKUP ON; + + + +# +----------------------------------------------------------------------------+ +# | CONTROLFILE AUTOBACKUP FORMAT | +# |----------------------------------------------------------------------------| +# | Configures the default filename format for the control file autobackup on | +# | the specified device type. By default, the initial format is %F for all | +# | devices. Any default format string specified with CONFIGURE must include | +# | the %F substitution variable (see BACKUP). This variable translates into | +# | c-IIIIIIIIII-YYYYMMDD-QQ, where: | +# | | +# | - IIIIIIIIII stands for the DBID. (The DBID is printed in decimal so | +# | that it can be easily associated with the target database. | +# | - YYYYMMDD is a time stamp in the Gregorian calendar of the day the | +# | backup is generated. | +# | - QQ is the sequence in hexadecimal number that starts with 00 | +# | and has a maximum of 'FF' (256). | +# | | +# | Specify CLEAR to return the format to the default %F. | +# | | +# | NOTE: The %F tag is essential for RMAN to be able to restore the file | +# | without a recovery catalog. | +# +----------------------------------------------------------------------------+ + +CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/orabackup/rman/ORA920/%F'; + + + +# +----------------------------------------------------------------------------+ +# | PARALLELISM | +# |----------------------------------------------------------------------------| +# | Configure RMAN to use [n] number of disk channels for backup, restore, | +# | recovery, and maintenance operations. Device types that are eligible for | +# | use in jobs that use automatic channels can sets the degree of channel | +# | parallelism. (The DISK device type is the default) | +# | | +# | The PARALLELISM parameter specifies the number of automatic channels of | +# | the specified device type allocated for RMAN jobs. RMAN always allocates | +# | the number of channels specified by PARALLELISM, although it may actually | +# | use only a subset of these channels. | +# | | +# | By default, PARALLELISM = 1. | +# | | +# | Take the following example; you can set PARALLELISM for DISK backups to 3. | +# | If you configure automatic channels of type disk and tape, and set the | +# | default device type as disk, then RMAN allocates three disk channels when | +# | you run BACKUP DATABASE at the RMAN prompt. | +# | | +# | To change the parallelism for a device type to [n], run: | +# | | +# | CONFIGURE DEVICE TYPE [DISK | SBT] PARALLELISM [n]; | +# | | +# | Here are several examples of how to configure PARALLELISM to 3 for sbt and | +# | then change it to 2: | +# | | +# | CONFIGURE DEVICE TYPE sbt PARALLELISM 3; | +# | CONFIGURE DEVICE TYPE sbt PARALLELISM 2; | +# | | +# | Another example that configures parallelism to 2 for automatic disk | +# | channel. | +# | | +# | CONFIGURE DEVICE TYPE DISK PARALLELISM 2; | +# | | +# | NOTE: If you configure [n] manually numbered channels, the PARALLELISM | +# | setting can be greater than or less than [n]. For example, you can | +# | manually number 10 automatic channels and configure PARALLELISM to 2 or | +# | even 12. | +# +----------------------------------------------------------------------------+ + +CONFIGURE DEVICE TYPE DISK CLEAR; + + + +# +----------------------------------------------------------------------------+ +# | DATABASE BACKUP COPIES | +# | ARCHIVELOG BACKUP COPIES | +# |----------------------------------------------------------------------------| +# | Specifies the number of copies of each backup set for DATAFILE (both | +# | datafiles and control files) or ARCHIVELOG files on the specified device | +# | type, from 1 (default) to 4. If duplexing is specified in the BACKUP | +# | command or in a SET BACKUP COPIES command, then the CONFIGURE setting is | +# | overridden. | +# | | +# | Here is the general syntax: | +# | | +# | {ARCHIVELOG| DATAFILE} | +# | BACKUP COPIES FOR DEVICE | +# | TYPE deviceSpecifier | +# | TO integer; | +# | | +# | NOTE: Control file autobackups on disk are a special case and are never | +# | duplexed. RMAN always writes one and only copy. | +# +----------------------------------------------------------------------------+ + +CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK CLEAR; +CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK CLEAR; + + + +# +----------------------------------------------------------------------------+ +# | CHANNEL CONFIGURATION | +# |----------------------------------------------------------------------------| +# | Specifies the standard or AUXILIARY channel that you are configuring or | +# | clearing, as well as the device type (DISK or sbt) of the channel. You can | +# | either configure a "generic channel" or specify a channel by number, where | +# | "integer" is less than 255. | +# | | +# | Here is the general syntax: | +# | | +# | CHANNEL integer DEVICE TYPE deviceSpecifier allocOperandList; | +# | | +# | integer You can specify a channel by number. You may | +# | also exclude an integer, in which case you | +# | are specifying a general channel. | +# | deviceSpecifier {DISK | SBT} | +# | allocOperandList /* Specifies control options for the */ | +# | /* allocated channel */ | +# | [PARMS = 'channel_parms'] | +# | [CONNECT = (quoted string)] | +# | [FORMAT = 'format_sring'] | +# | [MAXPIECESIZE = integer [K|M|G]] | +# | [RATE = integer [K|M|G]] | +# | [MAXOPENFILES = integer] | +# | [SEND = 'command'] | +# | | +# | NOTE: The RATE parameter is intended to slow down a backup so that you can | +# | run it in the background with as little effect as possible on OLTP | +# | operations. The RATE parameter specifies units of bytes/second. Test | +# | to find a value that improves performance of your queries while | +# | still letting RMAN complete the backup in a reasonable amount of | +# | time. Note that RATE is not designed to increase backup throughput, | +# | but to decrease backup throughput so that more disk bandwidth is | +# | available for other database operations. | +# | | +# | NOTE: The CONNECT parameter Specifies a connect string to the database | +# | instance where RMAN should conduct the backup or restore operations. | +# | Use this parameter to spread the work of backup or restore | +# | operations across different instances in an Oracle Real Application | +# | Clusters configuration. If you do not specify this parameter, and if | +# | you did not specify the AUXILIARY option, then RMAN conducts all | +# | operations on the target database instance specified by the | +# | command-line parameter or the instance connected to when you issued | +# | the CONNECT command. Typically, you should not use the CONNECT | +# | parameter in conjunction with the AUXILIARY option. | +# | | +# | I generally use this parameter to configure the location (directory) | +# | and file format where RMAN will write disk backups to. Here are some of | +# | the substitution variables that can be used in the backup set file name: | +# | | +# | %d Database name | +# | %s Backup set number | +# | %p Backup piece number | +# | %t 4-byte timestamp | +# | | +# | If you configure a generic channel (that is, if you do not specify a | +# | channel number), then RMAN uses the generic settings for every | +# | parallelized channel except any channel number that you have explicitly | +# | configured. In other words, a generic channel setting specifies options | +# | for all channels not configured explicitly. | +# | | +# | NOTE: For generic channels of a specified device type, a new command | +# | erases previous settings for this device type. Assume that you run | +# | these commands: | +# | | +# | CONFIGURE CHANNEL DEVICE TYPE sbt MAXPIECESIZE 1G; | +# | CONFIGURE CHANNEL DEVICE TYPE sbt RATE 1700K; | +# | | +# | The second command erases the MAXPIECESIZE setting of the first | +# | command. | +# | | +# | If AUXILIARY is specified, then this configuration is used only for | +# | channels allocated at the auxiliary instance. If no auxiliary device | +# | configuration is specified, and if RMAN needs to automatically allocate | +# | auxiliary channels, then RMAN uses the target database device | +# | configuration. It is not necessary to specify configuration information | +# | for auxiliary channels unless they require different parameters from the | +# | target channels. | +# | | +# | NOTE: It is useful to understand how the CLEAR command works for this | +# | parameter. CLEAR Clears the specified channel. For example, | +# | CONFIGURE CHANNEL 1 DEVICE TYPE DISK CLEAR returns only channel 1 to | +# | its default, whereas CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR | +# | returns the generic disk channel to its default. Note that you | +# | cannot specify any other channel options (for example, PARMS) when | +# | you specify CLEAR. | +# +----------------------------------------------------------------------------+ + + CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/orabackup/rman/ORA920/backup_db_%d_S_%s_P_%p_T_%t' MAXPIECESIZE 1024m; +# CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/orabackup/rman/ORA920/backup_db_%d_S_%s_P_%p_T_%t' MAXPIECESIZE 1024m RATE 5M; + + + +# +----------------------------------------------------------------------------+ +# | MAXSETSIZE | +# |----------------------------------------------------------------------------| +# | Specifies the maximum size of each backup set created on a channel. By | +# | default MAXSETSIZE is set to UNLIMITED, meaning that it is disabled. | +# | | +# | Here is the general syntax: | +# | | +# | CONFIGURE MAXSETSIZE TO { integer [K|M|G] | UNLIMITED | CLEAR }; | +# | | +# | TO integer Specifies the maximum set size in bytes, kilobytes (K), | +# | megabytes (M), or gigabtyes (G). The default setting is | +# | in bytes and is rounded down to kilobtyes. For example, | +# | if you set MAXSETSIZE to 5000, RMAN sets the maximum set | +# | size at 4 kilobytes (that is, 4096 bytes), which is the | +# | lower kilobyte boundary of 5000. The minimum value must | +# | be greater than or equal to the database block size. | +# | TO UNLIMITED Specifies that there is no size limit for backup sets. | +# | CLEAR Resets the maximum set size to its default value | +# | (UNLIMITED). | +# +----------------------------------------------------------------------------+ + +CONFIGURE MAXSETSIZE CLEAR; + + + +# +----------------------------------------------------------------------------+ +# | SNAPSHOT CONTROLFILE | +# |----------------------------------------------------------------------------| +# | Configures the snapshot control file filename to 'filename'. If you run | +# | CONFIGURE SNAPSHOT CONTROLFILE NAME CLEAR, then RMAN sets the snapshot | +# | control file name to its default. | +# | | +# | The default value for the snapshot control file name is platform-specific | +# | and dependent on the Oracle home. For example, the default on some UNIX | +# | system is ?/dbs/snapcf_@.f. If you clear the control file name, and you | +# | change the Oracle home, then the default location of the snapshot control | +# | file changes as well. | +# | | +# | SNAPSHOT CONTROLFILE NAME TO 'filename'; | +# +----------------------------------------------------------------------------+ + +CONFIGURE SNAPSHOT CONTROLFILE NAME CLEAR; + + + +# +----------------------------------------------------------------------------+ +# | EXCLUDE TABLESPACE | +# |----------------------------------------------------------------------------| +# | Excludes the specified tablespace from BACKUP DATABASE commands. Note that | +# | you cannot exclude the SYSTEM tablespace. By default, each tablespace is | +# | not excluded, that is, the exclude functionality is disabled. | +# | | +# | The exclusion is stored as an attribute of the tablespace, not the | +# | individual datafiles, so the exclusion applies to any files that are added | +# | to this tablespace in the future. | +# | | +# | If you run CONFIGURE ... CLEAR on a tablespace after excluding it, then it | +# | returns to the default configuration of "not excluded." | +# | | +# | You can still back up the configured tablespace by explicitly specifying | +# | it in a BACKUP command or by specifying the NOEXCLUDE option on a BACKUP | +# | DATABASE command. | +# | | +# | The general syntax is: | +# | | +# | EXCLUDE FOR TABLESPACE tablespace_name; | +# | | +# +----------------------------------------------------------------------------+ + +# CONFIGURE EXCLUDE FOR TABLESPACE USERS_READ_TBS; diff --git a/idev/rman_controlfiles.sql b/idev/rman_controlfiles.sql new file mode 100644 index 0000000..e3780c6 --- /dev/null +++ b/idev/rman_controlfiles.sql @@ -0,0 +1,77 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rman_controlfiles.sql | +-- | CLASS : Recovery Manager | +-- | PURPOSE : Provide a listing of automatically backed up control files. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : RMAN Control Files | +PROMPT | Instance : ¤t_instance | +PROMPT | Note : Available automatic control files within all available | +PROMPT | (and expired) backup sets. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN bs_key FORMAT 9999 HEADING 'BS|Key' +COLUMN piece# FORMAT 99999 HEADING 'Piece|#' +COLUMN copy# FORMAT 9999 HEADING 'Copy|#' +COLUMN bp_key FORMAT 9999 HEADING 'BP|Key' +COLUMN controlfile_included FORMAT a11 HEADING 'Controlfile|Included?' +COLUMN completion_time FORMAT a20 HEADING 'Completion|Time' +COLUMN status FORMAT a9 HEADING 'Status' +COLUMN handle FORMAT a75 HEADING 'Handle' + +BREAK ON bs_key + +SELECT + bs.recid bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , DECODE( bs.controlfile_included + , 'NO', '-' + , bs.controlfile_included) controlfile_included + , TO_CHAR(bs.completion_time, 'mm/dd/yyyy HH24:MI:SS') completion_time + , DECODE( status + , 'A', 'Available' + , 'D', 'Deleted' + , 'X', 'Expired') status + , handle handle +FROM + v$backup_set bs JOIN v$backup_piece bp USING (set_stamp,set_count) +WHERE + bp.status IN ('A', 'X') + AND bs.controlfile_included != 'NO' +ORDER BY + bs.recid + , piece# +/ diff --git a/idev/rman_progress.sql b/idev/rman_progress.sql new file mode 100644 index 0000000..e55b1ca --- /dev/null +++ b/idev/rman_progress.sql @@ -0,0 +1,89 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rman_progress.sql | +-- | CLASS : Recovery Manager | +-- | PURPOSE : Provide a listing of all current RMAN operations and their | +-- | estimated timings. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : RMAN Backup Progress | +PROMPT | Instance : ¤t_instance | +PROMPT | Note : A listing of all current RMAN operations and their | +PROMPT | estimated timings. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a10 HEADING 'Instance' +COLUMN sid HEADING 'Oracle|SID' +COLUMN serial_num HEADING 'Serial|#' +COLUMN opname FORMAT a30 HEADING 'RMAN|Operation' +COLUMN start_time FORMAT a18 HEADING 'Start|Time' +COLUMN totalwork HEADING 'Total|Work' +COLUMN sofar HEADING 'So|Far' +COLUMN pct_done HEADING 'Percent|Done' +COLUMN elapsed_seconds HEADING 'Elapsed|Seconds' +COLUMN time_remaining HEADING 'Seconds|Remaining' +COLUMN done_at FORMAT a18 HEADING 'Done|At' + +SELECT + i.instance_name instance_name + , sid sid + , serial# serial_num + , b.opname opname + , TO_CHAR(b.start_time, 'mm/dd/yy HH24:MI:SS') start_time + , b.totalwork totalwork + , b.sofar sofar + , ROUND( (b.sofar/DECODE( b.totalwork + , 0 + , 0.001 + , b.totalwork)*100),2) pct_done + , b.elapsed_seconds elapsed_seconds + , b.time_remaining time_remaining + , DECODE( b.time_remaining + , 0 + , TO_CHAR((b.start_time + b.elapsed_seconds/3600/24), 'mm/dd/yy HH24:MI:SS') + , TO_CHAR((SYSDATE + b.time_remaining/3600/24), 'mm/dd/yy HH24:MI:SS') + ) done_at +FROM + gv$session a + JOIN gv$session_longops b USING (sid,serial#) + JOIN gv$instance i ON ( i.inst_id = a.inst_id + AND i.inst_id = b.inst_id) +WHERE + a.program LIKE 'rman%' + AND b.opname LIKE 'RMAN%' + AND b.opname NOT LIKE '%aggregate%' + AND b.totalwork > 0 +ORDER BY + i.instance_name + , b.start_time +/ diff --git a/idev/rman_spfiles.sql b/idev/rman_spfiles.sql new file mode 100644 index 0000000..dcc5c2b --- /dev/null +++ b/idev/rman_spfiles.sql @@ -0,0 +1,84 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rman_spfiles.sql | +-- | CLASS : Recovery Manager | +-- | PURPOSE : Provide a listing of automatically backed up SPFILEs. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : RMAN Server Parameter Files (SPFILE) | +PROMPT | Instance : ¤t_instance | +PROMPT | Note : Available automatic SPFILE files within all available | +PROMPT | (and expired) backup sets. | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN bs_key FORMAT 9999 HEADING 'BS|Key' +COLUMN piece# FORMAT 99999 HEADING 'Piece|#' +COLUMN copy# FORMAT 9999 HEADING 'Copy|#' +COLUMN bp_key FORMAT 9999 HEADING 'BP|Key' +COLUMN spfile_included FORMAT a11 HEADING 'SPFILE|Included?' +COLUMN completion_time FORMAT a20 HEADING 'Completion|Time' +COLUMN status FORMAT a9 HEADING 'Status' +COLUMN handle FORMAT a75 HEADING 'Handle' + +BREAK ON bs_key + +SELECT + bs.recid bs_key + , bp.piece# piece# + , bp.copy# copy# + , bp.recid bp_key + , sp.spfile_included spfile_included + , TO_CHAR(bs.completion_time, 'mm/dd/yyyy HH24:MI:SS') completion_time + , DECODE( status + , 'A', 'Available' + , 'D', 'Deleted' + , 'X', 'Expired') status + , handle handle +FROM + v$backup_set bs + , v$backup_piece bp + , (select distinct + set_stamp + , set_count + , 'YES' spfile_included + from v$backup_spfile) sp +WHERE + bs.set_stamp = bp.set_stamp + AND bs.set_count = bp.set_count + AND bp.status IN ('A', 'X') + AND bs.set_stamp = sp.set_stamp + AND bs.set_count = sp.set_count +ORDER BY + bs.recid + , piece# +/ diff --git a/idev/rollback_segments.sql b/idev/rollback_segments.sql new file mode 100644 index 0000000..a0e7a9f --- /dev/null +++ b/idev/rollback_segments.sql @@ -0,0 +1,87 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rollback_segments.sql | +-- | CLASS : Rollback Segments | +-- | PURPOSE : Reports rollback statistic information including name, shrinks, | +-- | wraps, size and optimal size. This script is enabled to work | +-- | with Oracle parallel server. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Rollback Segments | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a9 HEADING 'Instance' +COLUMN rollback_name FORMAT a30 HEADING 'Rollback Name' +COLUMN tablespace FORMAT a11 HEADING 'Tablspace' +COLUMN in_extents FORMAT a23 HEADING 'Init / Next Extents' +COLUMN m_extents FORMAT a23 HEADING 'Min / Max Extents' +COLUMN status FORMAT a8 HEADING 'Status' +COLUMN wraps FORMAT 99,999 HEADING 'Wraps' +COLUMN shrinks FORMAT 99,999 HEADING 'Shrinks' +COLUMN opt FORMAT 999,999,999,999 HEADING 'Opt. Size' +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' +COLUMN extents FORMAT 999 HEADING 'Extents' + +BREAK ON instance_name SKIP 2 + +COMPUTE SUM LABEL 'Total: ' OF bytes ON instance_name + +SELECT + i.instance_name instance_name + , a.owner || '.' || a.segment_name rollback_name + , a.tablespace_name tablespace + , TRIM(TO_CHAR(a.initial_extent, '999,999,999,999')) || ' / ' || + TRIM(TO_CHAR(a.next_extent, '999,999,999,999')) in_extents + , TRIM(TO_CHAR(a.min_extents, '999,999,999,999')) || ' / ' || + TRIM(TO_CHAR(a.max_extents, '999,999,999,999')) m_extents + , a.status status + , b.bytes bytes + , b.extents extents + , d.shrinks shrinks + , d.wraps wraps + , d.optsize opt +FROM + gv$instance i + , gv$rollstat d + , sys.undo$ c + , dba_rollback_segs a + , dba_segments b +WHERE + i.inst_id = d.inst_id + AND d.usn = c.us# + AND a.segment_name = c.name + AND a.segment_name = b.segment_name +ORDER BY + i.instance_name + , a.segment_name; diff --git a/idev/rollback_users.sql b/idev/rollback_users.sql new file mode 100644 index 0000000..fc5f646 --- /dev/null +++ b/idev/rollback_users.sql @@ -0,0 +1,71 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rollback_users.sql | +-- | CLASS : Rollback Segments | +-- | PURPOSE : Query all active rollback segments and the sessions that are | +-- | using them. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Rollback Users | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN rollback_name FORMAT a25 HEADING 'Rollback Name' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC + +SELECT + r.name rollback_name + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , s.machine session_machine + , s.program session_program +FROM + v$lock l + , v$rollname r + , v$session s +WHERE + s.sid = l.sid + AND TRUNC (l.id1(+)/65536) = r.usn + AND l.type(+) = 'TX' + AND l.lmode(+) = 6 +ORDER BY + s.sid; diff --git a/idev/rsrc_plan_status_detail.sql b/idev/rsrc_plan_status_detail.sql new file mode 100644 index 0000000..642580a --- /dev/null +++ b/idev/rsrc_plan_status_detail.sql @@ -0,0 +1,65 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rsrc_plan_status_detail.sql | +-- | CLASS : Database Resource Manager | +-- | PURPOSE : List all available resource plans and their status. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Database Resource Manager - Resource Plans / Status | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN resource_plan_name FORMAT a30 HEAD 'Resource Plan Name' JUST left +COLUMN num_plan_directives FORMAT 999 HEAD '# of Plan|Directives' JUST left +COLUMN cpu_method FORMAT a9 HEAD 'CPU|Method' JUST left +COLUMN active_sess_pool_mth FORMAT a25 HEAD 'Active Sess|Pool Method' JUST left +COLUMN parallel_degree_limit_mth FORMAT a30 HEAD 'Parallel Degree|Limit Method' JUST left +COLUMN queueing_mth FORMAT a13 HEAD 'Queueing|Method' JUST left +COLUMN status FORMAT a10 HEAD 'Status' JUST left +COLUMN mandatory FORMAT a10 HEAD 'Mandatory?' JUST left +COLUMN run_status FORMAT a11 HEAD 'Run|Status' JUST left + +SELECT + a.plan resource_plan_name + , a.num_plan_directives num_plan_directives + , a.cpu_method cpu_method + , a.active_sess_pool_mth active_sess_pool_mth + , a.parallel_degree_limit_mth parallel_degree_limit_mth + , a.queueing_mth queueing_mth + , a.status status + , a.mandatory mandatory + , DECODE(b.name, a.plan, 'Running', 'Not Running') run_status +FROM + dba_rsrc_plans a LEFT OUTER JOIN v$rsrc_plan b ON (a.plan = b.name) +/ + diff --git a/idev/rsrc_plan_status_summary.sql b/idev/rsrc_plan_status_summary.sql new file mode 100644 index 0000000..aa45ea8 --- /dev/null +++ b/idev/rsrc_plan_status_summary.sql @@ -0,0 +1,59 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : rsrc_plan_status_summary.sql | +-- | CLASS : Database Resource Manager | +-- | PURPOSE : List all available resource plans and their status. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Database Resource Manager - Resource Plan Summary Report | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN resource_plan_name FORMAT a30 HEAD 'Resource Plan Name' JUST left +COLUMN comments FORMAT a50 HEAD 'Comments' JUST left WRAP +COLUMN num_plan_directives FORMAT 999 HEAD '# of Plan|Directives' JUST left +COLUMN status FORMAT a10 HEAD 'Status' JUST left +COLUMN mandatory FORMAT a10 HEAD 'Mandatory?' JUST left +COLUMN run_status FORMAT a11 HEAD 'Run|Status' JUST left + +SELECT + a.plan resource_plan_name + , a.comments comments + , a.num_plan_directives num_plan_directives + , a.status status + , a.mandatory mandatory + , DECODE(b.name, a.plan, 'Running', 'Not Running') run_status +FROM + dba_rsrc_plans a LEFT OUTER JOIN v$rsrc_plan b ON (a.plan = b.name) +/ + diff --git a/idev/sec_default_passwords.sql b/idev/sec_default_passwords.sql new file mode 100644 index 0000000..cba269a --- /dev/null +++ b/idev/sec_default_passwords.sql @@ -0,0 +1,76 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sec_default_passwords.sql | +-- | CLASS : Security | +-- | PURPOSE : Checks Oracle created users that still have their default | +-- | password. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Security - Users with default database password | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN username FORMAT a30 HEADING 'User(s) with Default Password!' +COLUMN account_status FORMAT a30 HEADING 'Account Status' + +SELECT + username username + , account_status account_status +FROM dba_users +WHERE password IN ( + 'E066D214D5421CCC' -- dbsnmp + , '24ABAB8B06281B4C' -- ctxsys + , '72979A94BAD2AF80' -- mdsys + , 'C252E8FA117AF049' -- odm + , 'A7A32CD03D3CE8D5' -- odm_mtr + , '88A2B2C183431F00' -- ordplugins + , '7EFA02EC7EA6B86F' -- ordsys + , '4A3BA55E08595C81' -- outln + , 'F894844C34402B67' -- scott + , '3F9FBD883D787341' -- wk_proxy + , '79DF7A1BD138CF11' -- wk_sys + , '7C9BA362F8314299' -- wmsys + , '88D8364765FCE6AF' -- xdb + , 'F9DA8977092B7B81' -- tracesvr + , '9300C0977D7DC75E' -- oas_public + , 'A97282CE3D94E29E' -- websys + , 'AC9700FD3F1410EB' -- lbacsys + , 'E7B5D92911C831E1' -- rman + , 'AC98877DE1297365' -- perfstat + , 'D4C5016086B2DC6A' -- sys + , 'D4DF7931AB130E37') -- system +ORDER BY + username +/ + + diff --git a/idev/sec_roles.sql b/idev/sec_roles.sql new file mode 100644 index 0000000..4d43ca1 --- /dev/null +++ b/idev/sec_roles.sql @@ -0,0 +1,63 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sec_roles.sql | +-- | CLASS : Security | +-- | PURPOSE : Report on all roles defined in the database and which users | +-- | are assigned to that role. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Security - All Roles | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN role FORMAT a30 HEAD 'Role Name' +COLUMN grantee FORMAT a30 HEAD 'Grantee' +COLUMN admin_option FORMAT a15 HEAD 'Admin Option?' +COLUMN default_role FORMAT a15 HEAD 'Default Role?' + +BREAK ON role SKIP 2 + +SELECT + b.role + , a.grantee + , a.admin_option + , a.default_role +FROM + dba_role_privs a + , dba_roles b +WHERE + granted_role(+) = b.role +ORDER BY + b.role + , a.grantee +/ diff --git a/idev/sec_users.sql b/idev/sec_users.sql new file mode 100644 index 0000000..f211624 --- /dev/null +++ b/idev/sec_users.sql @@ -0,0 +1,69 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sec_users.sql | +-- | CLASS : Security | +-- | PURPOSE : Lists all users in the database including their default and | +-- | temporary tablespaces. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Security - All Users | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN username FORMAT a30 HEAD 'Username' +COLUMN account_status FORMAT a17 HEAD 'Status' +COLUMN expiry_date HEAD 'Expire Date' +COLUMN default_tablespace FORMAT a28 HEAD 'Default Tablespace' +COLUMN temporary_tablespace FORMAT a15 HEAD 'Temp Tablespace' +COLUMN created HEAD 'Created On' +COLUMN profile FORMAT a10 HEAD 'Profile' +COLUMN sysdba FORMAT a6 HEAD 'SYSDBA' +COLUMN sysoper FORMAT a7 HEAD 'SYSOPER' + +SELECT distinct + a.username username + , a.account_status account_status + , TO_CHAR(a.expiry_date, 'mm/dd/yyyy HH24:MI:SS') expiry_date + , a.default_tablespace default_tablespace + , a.temporary_tablespace temporary_tablespace + , TO_CHAR(a.created, 'mm/dd/yyyy HH24:MI:SS') created + , a.profile profile + , DECODE(p.sysdba,'TRUE', 'TRUE','') sysdba + , DECODE(p.sysoper,'TRUE','TRUE','') sysoper +FROM + dba_users a + , v$pwfile_users p +WHERE + p.username (+) = a.username +ORDER BY username +/ diff --git a/idev/sess_current_user_transactions.sql b/idev/sess_current_user_transactions.sql new file mode 100644 index 0000000..d383d19 --- /dev/null +++ b/idev/sess_current_user_transactions.sql @@ -0,0 +1,146 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_current_user_transactions.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List table locking and current user transactions information. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Transactions | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN logon_time FORMAT a18 HEADING 'Login Time' +COLUMN owner FORMAT a20 HEADING 'Owner' +COLUMN object_type FORMAT a11 HEADING 'Object Type' +COLUMN object_name FORMAT a25 HEADING 'Object Name' +COLUMN locked_mode FORMAT a11 HEADING 'Locked Mode' + +prompt +prompt +----------------------------------------------------+ +prompt | Table Locking Information | +prompt +----------------------------------------------------+ + +SELECT + a.session_id sid + , c.serial# serial_id + , a.oracle_username oracle_username + , TO_CHAR( + c.logon_time,'mm/dd/yy hh24:mi:ss' + ) logon_time + , b.owner owner + , b.object_type object_type + , b.object_name object_name + , DECODE( + a.locked_mode + , 0, 'None' + , 1, 'Null' + , 2, 'Row-S' + , 3, 'Row-X' + , 4, 'Share' + , 5, 'S/Row-X' + , 6, 'Exclusive' + ) locked_mode +FROM + v$locked_object a + , dba_objects b + , v$session c +WHERE + a.object_id = b.object_id + AND a.session_id = c.sid +ORDER BY + b.owner + , b.object_type + , b.object_name +/ + + +prompt +prompt +----------------------------------------------------+ +prompt | User Transactions Information | +prompt +----------------------------------------------------+ + + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN trnx_start_time FORMAT a18 HEADING 'Trnx Start Time' +COLUMN current_time FORMAT a18 HEADING 'Current Time' +COLUMN elapsed_time FORMAT 999999999.99 HEADING 'Elapsed(mins)' +COLUMN undo_name FORMAT a10 HEADING 'Undo Name' TRUNC +COLUMN number_of_undo_records FORMAT 999,999,999,999 HEADING '# Undo Records' +COLUMN used_undo_blks FORMAT 999,999,999 HEADING 'Used Undo Blks' +COLUMN used_undo_size FORMAT 999,999,999 HEADING 'Used Undo (MB)' +COLUMN logical_io_blks FORMAT 999,999,999 HEADING 'Logical I/O (Blks)' +COLUMN logical_io_size FORMAT 999,999,999,999 HEADING 'Logical I/O (MB)' +COLUMN physical_io_blks FORMAT 999,999,999 HEADING 'Physical I/O (Blks)' +COLUMN physical_io_size FORMAT 999,999,999,999 HEADING 'Physical I/O (MB)' +COLUMN session_program FORMAT a26 HEADING 'Session Program' TRUNC + +SELECT + s.sid sid + , s.status session_status + , s.username oracle_username + , p.spid os_pid + , TO_CHAR( + TO_DATE( + b.start_time + ,'mm/dd/yy hh24:mi:ss' + ) + , 'mm/dd/yy hh24:mi:ss' + ) trnx_start_time + , ROUND(60*24*(sysdate-to_date(b.start_time,'mm/dd/yy hh24:mi:ss')),2) elapsed_time + , c.segment_name undo_name + , b.used_urec number_of_undo_records + , (b.used_ublk * d.value)/1024/1024 used_undo_size + , (b.log_io*d.value)/1024/1024 logical_io_size + , (b.phy_io*d.value)/1024/1024 physical_io_size + , s.program session_program +FROM + v$session s + , v$transaction b + , dba_rollback_segs c + , v$parameter d + , v$process p +WHERE + b.ses_addr = s.saddr + AND b.xidusn = c.segment_id + AND d.name = 'db_block_size' + AND p.ADDR = s.PADDR +ORDER BY 1 +/ diff --git a/idev/sess_query_sql.sql b/idev/sess_query_sql.sql new file mode 100644 index 0000000..cf915ac --- /dev/null +++ b/idev/sess_query_sql.sql @@ -0,0 +1,90 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_query_sql.sql | +-- | CLASS : Session Management | +-- | PURPOSE : Displays the SQL being run by a given session given the SID. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : SQL Query Search Interface | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Listing all User Sessions | +PROMPT +------------------------------------------------------------------------+ + +SELECT + s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.program session_program +FROM + v$process p + , v$session s +WHERE + p.addr (+) = s.paddr +ORDER BY + sid +/ + + +REM +----------------------------------------------------+ +REM | PROMPT USER FOR ORACLE SID. | +REM +----------------------------------------------------+ + +PROMPT +ACCEPT ora_sid CHAR PROMPT 'Enter Oracle SID: ' + +COLUMN sql_text FORMAT a80 + +SELECT + a.sql_text +FROM + v$sqlarea a + , v$session s +WHERE + a.address = s.sql_address + AND s.sid = &&ora_sid +/ diff --git a/idev/sess_uncommited_transactions.sql b/idev/sess_uncommited_transactions.sql new file mode 100644 index 0000000..8f7ccae --- /dev/null +++ b/idev/sess_uncommited_transactions.sql @@ -0,0 +1,72 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_uncommited_transactions.sql | +-- | CLASS : Session Management | +-- | PURPOSE : Query all users with uncommited transactions. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Uncommited Transactions | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_program FORMAT a30 HEADING 'Session Program' TRUNC +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN number_of_undo_records FORMAT 999,999,999,999 HEADING "# Undo Records" +COLUMN used_undo_size FORMAT 999,999,999 HEADING "Used Undo (MB)" + +SELECT + s.sid sid + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , b.used_urec number_of_undo_records + , (b.used_ublk * d.value)/1024/1024 used_undo_size + , s.program session_program + , s.machine session_machine +FROM + v$process p + , v$session s + , v$transaction b + , v$parameter d +WHERE + b.ses_addr = s.saddr + AND p.addr (+) = s.paddr + AND s.audsid <> userenv('SESSIONID') + AND d.name = 'db_block_size'; diff --git a/idev/sess_user_sessions.sql b/idev/sess_user_sessions.sql new file mode 100644 index 0000000..e5e1fe2 --- /dev/null +++ b/idev/sess_user_sessions.sql @@ -0,0 +1,89 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_user_sessions.sql | +-- | CLASS : Session Management | +-- | PURPOSE : Report on all User Sessions. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions Summary Report | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK OFF +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN max_sess_allowed FORMAT 9,999,999 JUSTIFY r HEADING 'Max sessions allowed' +COLUMN num_sessions FORMAT 9,999,999,999 JUSTIFY r HEADING 'Number of sessions' +COLUMN pct_utl FORMAT a19 JUSTIFY r HEADING 'Percent Utilization' +COLUMN username FORMAT a15 JUSTIFY r HEADING 'Oracle User' +COLUMN num_user_sess FORMAT 9,999,999 JUSTIFY r HEADING 'Number of Logins' +COLUMN count_a FORMAT 9,999,999 JUSTIFY r HEADING 'Active Logins' +COLUMN count_i FORMAT 9,999,999 JUSTIFY r HEADING 'Inactive Logins' + +SELECT + TO_NUMBER(a.value) max_sess_allowed + , TO_NUMBER(count(*)) num_sessions + , LPAD(ROUND((count(*)/a.value)*100,0) || '%', 19) pct_utl +FROM + v$session b + , v$parameter a +WHERE + a.name = 'sessions' +GROUP BY + a.value; + +BREAK on report +COMPUTE sum OF num_user_sess count_a count_i ON report + +SELECT + lpad(nvl(sess.username, '[B.G. Process]'), 15) username + , count(*) num_user_sess + , nvl(act.count, 0) count_a + , nvl(inact.count, 0) count_i +FROM + v$session sess + , (SELECT count(*) count, nvl(username, '[B.G. Process]') username + FROM v$session + WHERE status = 'ACTIVE' + GROUP BY username) act + , (SELECT count(*) count, nvl(username, '[B.G. Process]') username + FROM v$session + WHERE status = 'INACTIVE' + GROUP BY username) inact +WHERE + nvl(sess.username, '[B.G. Process]') = act.username (+) + and nvl(sess.username, '[B.G. Process]') = inact.username (+) +GROUP BY + sess.username + , act.count + , inact.count +/ + +SET FEEDBACK 6 diff --git a/idev/sess_user_stats.sql b/idev/sess_user_stats.sql new file mode 100644 index 0000000..5ecfcb4 --- /dev/null +++ b/idev/sess_user_stats.sql @@ -0,0 +1,115 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_user_stats.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected user sessions ordered by Logical | +-- | I/O. This report contains all common statistics for each user | +-- | connection. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions and Statistics Ordered by Logical I/O | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC +COLUMN cpu_value FORMAT 999,999,999 HEADING 'CPU' +COLUMN logical_io FORMAT 999,999,999,999 HEADING 'Logical I/O' +COLUMN physical_reads FORMAT 999,999,999,999 HEADING 'Physical Reads' +COLUMN physical_writes FORMAT 999,999,999,999 HEADING 'Physical Writes' +COLUMN session_pga_memory FORMAT 9,999,999,999 HEADING 'PGA Memory' +COLUMN open_cursors FORMAT 99,999 HEADING 'Cursors' +COLUMN num_transactions FORMAT 999,999 HEADING 'Txns' + +SELECT + s.sid sid + , s.status session_status + , s.username oracle_username + , s.program session_program + , sstat1.value cpu_value + , sstat2.value + + sstat3.value logical_io + , sstat4.value physical_reads + , sstat5.value physical_writes + , sstat6.value session_pga_memory + , sstat7.value open_cursors + , sstat8.value num_transactions +FROM + v$process p + , v$session s + , v$sesstat sstat1 + , v$sesstat sstat2 + , v$sesstat sstat3 + , v$sesstat sstat4 + , v$sesstat sstat5 + , v$sesstat sstat6 + , v$sesstat sstat7 + , v$sesstat sstat8 + , v$statname statname1 + , v$statname statname2 + , v$statname statname3 + , v$statname statname4 + , v$statname statname5 + , v$statname statname6 + , v$statname statname7 + , v$statname statname8 +WHERE + p.addr (+) = s.paddr + AND s.sid = sstat1.sid + AND s.sid = sstat2.sid + AND s.sid = sstat3.sid + AND s.sid = sstat4.sid + AND s.sid = sstat5.sid + AND s.sid = sstat6.sid + AND s.sid = sstat7.sid + AND s.sid = sstat8.sid + AND statname1.statistic# = sstat1.statistic# + AND statname2.statistic# = sstat2.statistic# + AND statname3.statistic# = sstat3.statistic# + AND statname4.statistic# = sstat4.statistic# + AND statname5.statistic# = sstat5.statistic# + AND statname6.statistic# = sstat6.statistic# + AND statname7.statistic# = sstat7.statistic# + AND statname8.statistic# = sstat8.statistic# + AND statname1.name = 'CPU used by this session' + AND statname2.name = 'db block gets' + AND statname3.name = 'consistent gets' + AND statname4.name = 'physical reads' + AND statname5.name = 'physical writes' + AND statname6.name = 'session pga memory' + AND statname7.name = 'opened cursors current' + AND statname8.name = 'user commits' +ORDER BY logical_io DESC +/ diff --git a/idev/sess_user_trace_file_location.sql b/idev/sess_user_trace_file_location.sql new file mode 100644 index 0000000..12f92cf --- /dev/null +++ b/idev/sess_user_trace_file_location.sql @@ -0,0 +1,69 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_user_trace_file_location.sql | +-- | CLASS : Session Management | +-- | PURPOSE : Oracle writes TRACE to the directory based on the value of your | +-- | "user_dump_dest" parameter in init.ora file. The trace files | +-- | use the "System Process ID" as part of the file name to ensure | +-- | a unique file for each user session. The following query helps | +-- | the DBA to determine where the TRACE files will be written and | +-- | the name of the file it would create for its particular | +-- | session. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Session Trace File Location | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN "Trace File Path" FORMAT a80 HEADING 'Your trace file with path is:' + +SELECT + a.trace_path || ' > ' || b.trace_file "Trace File Path" +FROM + ( SELECT value trace_path + FROM v$parameter + WHERE name='user_dump_dest' + ) a + , ( SELECT c.instance || '_ora_' || spid ||'.trc' TRACE_FILE + FROM v$process, + (select lower(instance_name) instance from v$instance) c + WHERE addr = ( SELECT paddr + FROM v$session + WHERE (audsid, sid) = ( SELECT + sys_context('USERENV', 'SESSIONID') + , sys_context('USERENV', 'SID') + FROM dual + ) + ) + ) b +/ diff --git a/idev/sess_users.sql b/idev/sess_users.sql new file mode 100644 index 0000000..84952f0 --- /dev/null +++ b/idev/sess_users.sql @@ -0,0 +1,72 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected users. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions (All) | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +-- SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_terminal FORMAT a10 HEADING 'Terminal' TRUNC +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC + +BREAK ON instance_name SKIP PAGE + +SELECT + i.instance_name instance_name + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.terminal session_terminal + , s.machine session_machine + , s.program session_program +FROM + gv$session s + INNER JOIN gv$process p ON (s.paddr = p.addr AND s.inst_id = p.inst_id) + INNER JOIN gv$instance i ON (p.inst_id = i.inst_id) +ORDER BY + i.instance_name + , s.sid; diff --git a/idev/sess_users_8i.sql b/idev/sess_users_8i.sql new file mode 100644 index 0000000..26adea0 --- /dev/null +++ b/idev/sess_users_8i.sql @@ -0,0 +1,77 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_8i.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected users. This script is enabled for | +-- | use by Oracle parallel server. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions (All) | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_terminal FORMAT a10 HEADING 'Terminal' TRUNC +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC + +BREAK ON instance_name SKIP PAGE + +SELECT + i.instance_name instance_name + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.terminal session_terminal + , s.machine session_machine + , s.program session_program +FROM + gv$session s + , gv$process p + , gv$instance i +WHERE + p.addr (+) = s.paddr + AND p.inst_id = s.inst_id + AND p.inst_id = i.inst_id +ORDER BY + i.instance_name + , s.sid; diff --git a/idev/sess_users_active.sql b/idev/sess_users_active.sql new file mode 100644 index 0000000..64b9469 --- /dev/null +++ b/idev/sess_users_active.sql @@ -0,0 +1,76 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_active.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected and active user sessions. This | +-- | script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Active User Sessions (All) | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +-- SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_terminal FORMAT a10 HEADING 'Terminal' TRUNC +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC + +BREAK ON instance_name SKIP PAGE + +SELECT + i.instance_name instance_name + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.terminal session_terminal + , s.machine session_machine + , s.program session_program +FROM + gv$session s + INNER JOIN gv$process p ON (s.paddr = p.addr AND s.inst_id = p.inst_id) + INNER JOIN gv$instance i ON (p.inst_id = i.inst_id) +WHERE + s.status = 'ACTIVE' + AND s.username IS NOT null +ORDER BY + i.instance_name + , s.sid; diff --git a/idev/sess_users_active_8i.sql b/idev/sess_users_active_8i.sql new file mode 100644 index 0000000..6377f05 --- /dev/null +++ b/idev/sess_users_active_8i.sql @@ -0,0 +1,79 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_active_8i.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected and active user sessions. This | +-- | script is enabled for use by Oracle parallel server. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Active User Sessions (All) | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_terminal FORMAT a10 HEADING 'Terminal' TRUNC +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC + +BREAK ON instance_name SKIP PAGE + +SELECT + i.instance_name instance_name + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.terminal session_terminal + , s.machine session_machine + , s.program session_program +FROM + gv$session s + , gv$process p + , gv$instance i +WHERE + s.status = 'ACTIVE' + AND s.username IS NOT null + AND p.addr (+) = s.paddr + AND p.inst_id = s.inst_id + AND p.inst_id = i.inst_id +ORDER BY + i.instance_name + , s.sid; diff --git a/idev/sess_users_active_sql.sql b/idev/sess_users_active_sql.sql new file mode 100644 index 0000000..72550d3 --- /dev/null +++ b/idev/sess_users_active_sql.sql @@ -0,0 +1,75 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_active_sql.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected and active users and the SQL that | +-- | they are running. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : All Active User Sessions and Current SQL | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC +COLUMN current_sql FORMAT a85 HEADING 'Current SQL' FOLD_AFTER WRAP + +SELECT + s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.machine session_machine + , s.program session_program + , SUBSTR(sa.sql_text, 1, 1024) current_sql +FROM + v$process p + , v$session s + , v$sqlarea sa +WHERE + p.addr (+) = s.paddr + AND s.sql_address = sa.address(+) + AND s.sql_hash_value = sa.hash_value(+) + AND s.audsid <> userenv('SESSIONID') + AND s.username IS NOT NULL + AND s.status = 'ACTIVE' +ORDER BY sid +/ diff --git a/idev/sess_users_by_cpu.sql b/idev/sess_users_by_cpu.sql new file mode 100644 index 0000000..e845357 --- /dev/null +++ b/idev/sess_users_by_cpu.sql @@ -0,0 +1,73 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_by_cpu.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected user sessions ordered by CPU time. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions Ordered by CPU | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC +COLUMN cpu_value FORMAT 999,999,999,999 HEADING 'CPU' + +SELECT + s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.machine session_machine + , s.program session_program + , sstat.value cpu_value +FROM + v$process p + , v$session s + , v$sesstat sstat + , v$statname statname +WHERE + p.addr (+) = s.paddr + AND s.sid = sstat.sid + AND statname.statistic# = sstat.statistic# + AND statname.name = 'CPU used by this session' +ORDER BY cpu_value DESC +/ diff --git a/idev/sess_users_by_cursors.sql b/idev/sess_users_by_cursors.sql new file mode 100644 index 0000000..eef1d7f --- /dev/null +++ b/idev/sess_users_by_cursors.sql @@ -0,0 +1,79 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_by_cursors.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected user sessions ordered by the | +-- | number of current open cursors within their session. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions Ordered by Number of Open Cursors | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC +COLUMN open_cursors FORMAT 99,999 HEADING 'Open Cursors' +COLUMN open_pct FORMAT 999 HEADING 'Open %' + +SELECT + s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.machine session_machine + , s.program session_program + , sstat.value open_cursors + , ROUND((sstat.value/u.value)*100) open_pct +FROM + v$process p + , v$session s + , v$sesstat sstat + , v$statname statname + , (select name, value + from v$parameter) u +WHERE + p.addr (+) = s.paddr + AND s.sid = sstat.sid + AND statname.statistic# = sstat.statistic# + AND statname.name = 'opened cursors current' + AND u.name = 'open_cursors' +ORDER BY open_cursors DESC +/ diff --git a/idev/sess_users_by_io.sql b/idev/sess_users_by_io.sql new file mode 100644 index 0000000..33d45af --- /dev/null +++ b/idev/sess_users_by_io.sql @@ -0,0 +1,94 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_by_io.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected user sessions ordered by Logical | +-- | I/O. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions Ordered by Logical I/O | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a12 HEADING 'Oracle User' +COLUMN os_username FORMAT a12 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_machine FORMAT a25 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC +COLUMN logical_io FORMAT 999,999,999,999 HEADING 'Logical I/O' +COLUMN physical_reads FORMAT 999,999,999,999 HEADING 'Physical Reads' +COLUMN physical_writes FORMAT 999,999,999,999 HEADING 'Physical Writes' + +SELECT + s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.machine session_machine + , s.program session_program + , sstat1.value + + sstat2.value logical_io + , sstat3.value physical_reads + , sstat4.value physical_writes +FROM + v$process p + , v$session s + , v$sesstat sstat1 + , v$sesstat sstat2 + , v$sesstat sstat3 + , v$sesstat sstat4 + , v$statname statname1 + , v$statname statname2 + , v$statname statname3 + , v$statname statname4 +WHERE + p.addr (+) = s.paddr + AND s.sid = sstat1.sid + AND s.sid = sstat2.sid + AND s.sid = sstat3.sid + AND s.sid = sstat4.sid + AND statname1.statistic# = sstat1.statistic# + AND statname2.statistic# = sstat2.statistic# + AND statname3.statistic# = sstat3.statistic# + AND statname4.statistic# = sstat4.statistic# + AND statname1.name = 'db block gets' + AND statname2.name = 'consistent gets' + AND statname3.name = 'physical reads' + AND statname4.name = 'physical writes' +ORDER BY logical_io DESC +/ diff --git a/idev/sess_users_by_memory.sql b/idev/sess_users_by_memory.sql new file mode 100644 index 0000000..5c20d51 --- /dev/null +++ b/idev/sess_users_by_memory.sql @@ -0,0 +1,95 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_by_memory.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected user sessions ordered by current | +-- | PGA size. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions Ordered by Current PGA Size | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a12 HEADING 'Oracle User' +COLUMN os_username FORMAT a12 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_machine FORMAT a20 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a30 HEADING 'Session Program' TRUNC +COLUMN session_pga_memory FORMAT 9,999,999,999 HEADING 'PGA Memory' +COLUMN session_pga_memory_max FORMAT 9,999,999,999 HEADING 'PGA Memory Max' +COLUMN session_uga_memory FORMAT 9,999,999,999 HEADING 'UGA Memory' +COLUMN session_uga_memory_max FORMAT 9,999,999,999 HEADING 'UGA Memory MAX' + +SELECT + s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.machine session_machine + , s.program session_program + , sstat1.value session_pga_memory + , sstat2.value session_pga_memory_max + , sstat3.value session_uga_memory + , sstat4.value session_uga_memory_max +FROM + v$process p + , v$session s + , v$sesstat sstat1 + , v$sesstat sstat2 + , v$sesstat sstat3 + , v$sesstat sstat4 + , v$statname statname1 + , v$statname statname2 + , v$statname statname3 + , v$statname statname4 +WHERE + p.addr (+) = s.paddr + AND s.sid = sstat1.sid + AND s.sid = sstat2.sid + AND s.sid = sstat3.sid + AND s.sid = sstat4.sid + AND statname1.statistic# = sstat1.statistic# + AND statname2.statistic# = sstat2.statistic# + AND statname3.statistic# = sstat3.statistic# + AND statname4.statistic# = sstat4.statistic# + AND statname1.name = 'session pga memory' + AND statname2.name = 'session pga memory max' + AND statname3.name = 'session uga memory' + AND statname4.name = 'session uga memory max' +ORDER BY session_pga_memory DESC +/ diff --git a/idev/sess_users_by_transactions.sql b/idev/sess_users_by_transactions.sql new file mode 100644 index 0000000..a9dfa1e --- /dev/null +++ b/idev/sess_users_by_transactions.sql @@ -0,0 +1,75 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_by_transactions.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected user sessions ordered by the | +-- | number of transactions. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions Ordered by Number of Transactions | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC +COLUMN num_transactions FORMAT 999,999,999,999 HEADING '# Transactions' + +SELECT + s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.machine session_machine + , s.program session_program + , sstat.value num_transactions +FROM + v$process p + , v$session s + , v$sesstat sstat + , v$statname statname +WHERE + p.addr (+) = s.paddr + AND s.sid = sstat.sid + AND statname.statistic# = sstat.statistic# + AND statname.name = 'user commits' +ORDER BY num_transactions DESC +/ + diff --git a/idev/sess_waiting.sql b/idev/sess_waiting.sql new file mode 100644 index 0000000..a56807f --- /dev/null +++ b/idev/sess_waiting.sql @@ -0,0 +1,110 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_waiting.sql | +-- | CLASS : Session Management | +-- | PURPOSE : This script produces a report of the top sessions that have | +-- | waited (the entries at top have waited the longest) for | +-- | non-idle wait events (event column). The Oracle Server | +-- | Reference Manual can be used to further diagnose the wait event | +-- | (along with its parameters). Metalink can also be used by | +-- | supplying the event name in the search bar. | +-- | | +-- | The INST_ID column shows the instance where the session resides | +-- | and the SID is the unique identifier for the session | +-- | (gv$session). The p1, p2, and p3 columns will show event | +-- | specific information that may be important to debug the | +-- | problem. | +-- | EXAMPLE : For example, you can search Metalink by supplying the event | +-- | METALINK : name (surrounded by single quotes) as in the following example: | +-- | SEARCH : | +-- | [ 'Sync ASM rebalance' ] | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Session Waits | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a9 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a20 HEADING 'Oracle User' +COLUMN state FORMAT a8 HEADING 'State' +COLUMN event FORMAT a25 HEADING 'Event' +COLUMN wait_time_sec FORMAT 999,999,999 HEADING 'Wait Time (sec)' +COLUMN last_sql FORMAT a45 HEADING 'Last SQL' + +SELECT + i.instance_name instance_name + , s.sid sid + , s.serial# serial_id + , s.username oracle_username + , sw.state state + , sw.event event + , sw.seconds_in_wait wait_time_sec + , sa.sql_text last_sql +FROM + gv$session_wait sw + INNER JOIN gv$session s ON ( sw.inst_id = s.inst_id + AND + sw.sid = s.sid + ) + INNER JOIN gv$sqlarea sa ON ( s.inst_id = sa.inst_id + AND + s.sql_address = sa.address + ) + INNER JOIN gv$instance i ON ( s.inst_id = i.inst_id) +WHERE + sw.event NOT IN ( 'rdbms ipc message' + , 'smon timer' + , 'pmon timer' + , 'SQL*Net message from client' + , 'lock manager wait for remote message' + , 'ges remote message' + , 'gcs remote message' + , 'gcs for action' + , 'client message' + , 'pipe get' + , 'null event' + , 'PX Idle Wait' + , 'single-task message' + , 'PX Deq: Execution Msg' + , 'KXFQ: kxfqdeq - normal deqeue' + , 'listen endpoint status' + , 'slave wait' + , 'wakeup time manager' + ) + AND sw.seconds_in_wait > 0 +ORDER BY + wait_time_sec DESC + , i.instance_name; diff --git a/idev/sess_waiting_8i.sql b/idev/sess_waiting_8i.sql new file mode 100644 index 0000000..1d077fb --- /dev/null +++ b/idev/sess_waiting_8i.sql @@ -0,0 +1,109 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_waiting.sql | +-- | CLASS : Session Management | +-- | PURPOSE : This script produces a report of the top sessions that have | +-- | waited (the entries at top have waited the longest) for | +-- | non-idle wait events (event column). The Oracle Server | +-- | Reference Manual can be used to further diagnose the wait event | +-- | (along with its parameters). Metalink can also be used by | +-- | supplying the event name in the search bar. | +-- | | +-- | The INST_ID column shows the instance where the session resides | +-- | and the SID is the unique identifier for the session | +-- | (gv$session). The p1, p2, and p3 columns will show event | +-- | specific information that may be important to debug the | +-- | problem. | +-- | EXAMPLE : For example, you can search Metalink by supplying the event | +-- | METALINK : name (surrounded by single quotes) as in the following example: | +-- | SEARCH : | +-- | [ 'Sync ASM rebalance' ] | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Session Waits | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a9 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a20 HEADING 'Oracle User' +COLUMN state FORMAT a8 HEADING 'State' +COLUMN event FORMAT a25 HEADING 'Event' +COLUMN wait_time_sec FORMAT 999,999,999 HEADING 'Wait Time (sec)' +COLUMN last_sql FORMAT a45 HEADING 'Last SQL' + +SELECT + i.instance_name instance_name + , s.sid sid + , s.serial# serial_id + , s.username oracle_username + , sw.state state + , sw.event event + , sw.seconds_in_wait wait_time_sec + , sa.sql_text last_sql +FROM + gv$session_wait sw + , gv$session s + , gv$sqlarea sa + , gv$instance i +WHERE + sw.event NOT IN ( 'rdbms ipc message' + , 'smon timer' + , 'pmon timer' + , 'SQL*Net message from client' + , 'lock manager wait for remote message' + , 'ges remote message' + , 'gcs remote message' + , 'gcs for action' + , 'client message' + , 'pipe get' + , 'null event' + , 'PX Idle Wait' + , 'single-task message' + , 'PX Deq: Execution Msg' + , 'KXFQ: kxfqdeq - normal deqeue' + , 'listen endpoint status' + , 'slave wait' + , 'wakeup time manager' + ) + AND sw.seconds_in_wait > 0 + AND sw.inst_id = s.inst_id + AND sw.sid = s.sid + AND s.inst_id = sa.inst_id + AND s.sql_address = sa.address + AND s.inst_id = i.inst_id +ORDER BY + wait_time_sec DESC + , i.instance_name; diff --git a/idev/sp_auto.sql b/idev/sp_auto.sql new file mode 100644 index 0000000..23a2b7e --- /dev/null +++ b/idev/sp_auto.sql @@ -0,0 +1,92 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_auto.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This script is responsible to configuring a DBMS Job to be run | +-- | at the top of each hour to execute a Statspack snapshot. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +prompt +prompt ========================================================================= +prompt The following script will create a new DBMS Job to be run at the top +prompt of each hour. The job will perform a Statspack snapshot using the +prompt Oracle supplied STATSPACK package. +prompt +prompt Note that this script should be run as the owner of the +prompt STATSPACK repository. (i.e. PERFSTAT) +prompt This script will prompt you for the PERFSTAT password. +prompt +prompt Also note that in order to submit and run a job, the init.ora parameter +prompt job_queue_processes must be set to a value greater than zero. +prompt ========================================================================= +prompt +prompt Hit [ENTER] to continue or CTRL-C to cancel ... +pause + +prompt Supply the password for the PERFSTAT user: +connect perfstat + + +-- +------------------------------------------------------------------------+ +-- | SCHEDULE A SNAPSHOT TO BE RUN ON THIS INSTANCE EVERY HOUR, ON THE HOUR | +-- +------------------------------------------------------------------------+ + +VARIABLE jobno NUMBER; +VARIABLE instno NUMBER; + +BEGIN + + SELECT instance_number into :instno + FROM v$instance; + + DBMS_JOB.SUBMIT(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno); + + COMMIT; + +END; +/ + +prompt +prompt +prompt +----------------------------------+ +prompt | JOB NUMBER | +prompt |------------------------------------------------------------------+ +prompt | The following job number should be noted as it will be required | +prompt | when modifying or removing prompt the job: | +prompt +------------------------------------------------------------------+ +prompt +print jobno + + +prompt +prompt +prompt +----------------------------------+ +prompt | JOB QUEUE PROCESS CONFIGURATION | +prompt |------------------------------------------------------------------+ +prompt | Below is the current setting of the job_queue_processes init.ora | +prompt | parameter - the value for this parameter must be greater than 0 | +prompt | to use automatic statistics gathering: | +prompt +------------------------------------------------------------------+ +prompt +show parameter job_queue_processes + +prompt +prompt +prompt +----------------------------------+ +prompt | NEXT SCHEDULED RUN | +prompt |------------------------------------------------------------------+ +prompt | The next scheduled run for this job is: | +prompt +------------------------------------------------------------------+ +prompt +SELECT job, next_date, next_sec +FROM user_jobs +WHERE job = :jobno; + diff --git a/idev/sp_auto_15.sql b/idev/sp_auto_15.sql new file mode 100644 index 0000000..b3e9e59 --- /dev/null +++ b/idev/sp_auto_15.sql @@ -0,0 +1,100 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_auto_15.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This script is responsible to configure a DBMS Job to be run | +-- | every 15 minutes starting at the quarter of each hour. For | +-- | example, if this script is run at 10:32 pm, the first job will | +-- | be run at 10:45 pm, then the next job at 11:00 pm and so on | +-- | every 15 minutes. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +prompt +prompt ========================================================================= +prompt The following script will create a new DBMS Job to be run at the quarter +prompt of each hour. (i.e. Every 15 minutes). The job will perform a Statspack +prompt snapshot using the Oracle supplied STATSPACK package. +prompt +prompt Note that this script should be run as the owner of the +prompt STATSPACK repository. (i.e. PERFSTAT) +prompt This script will prompt you for the PERFSTAT password. +prompt +prompt Also note that in order to submit and run a job, the init.ora parameter +prompt job_queue_processes must be set to a value greater than zero. +prompt ========================================================================= +prompt +prompt Hit [ENTER] to continue or CTRL-C to cancel ... +pause + +prompt Supply the password for the PERFSTAT user: +connect perfstat + + +-- +------------------------------------------------------------------------+ +-- | SCHEDULE A SNAPSHOT TO BE RUN EVERY 15 MINUTES. | +-- +------------------------------------------------------------------------+ + +VARIABLE jobno NUMBER; +VARIABLE instno NUMBER; + +BEGIN + + SELECT instance_number into :instno + FROM v$instance; + + DBMS_JOB.SUBMIT( :jobno + , 'statspack.snap;' + , TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/15)+1)*15)/(24*60) + , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/15)+1)*15)/(24*60)' + , TRUE + , :instno); + + COMMIT; + +END; +/ + +prompt +prompt +prompt +----------------------------------+ +prompt | JOB NUMBER | +prompt |------------------------------------------------------------------+ +prompt | The following job number should be noted as it will be required | +prompt | when modifying or removing prompt the job: | +prompt +------------------------------------------------------------------+ +prompt +print jobno + + +prompt +prompt +prompt +----------------------------------+ +prompt | JOB QUEUE PROCESS CONFIGURATION | +prompt |------------------------------------------------------------------+ +prompt | Below is the current setting of the job_queue_processes init.ora | +prompt | parameter - the value for this parameter must be greater than 0 | +prompt | to use automatic statistics gathering: | +prompt +------------------------------------------------------------------+ +prompt +show parameter job_queue_processes + +prompt +prompt +prompt +----------------------------------+ +prompt | NEXT SCHEDULED RUN | +prompt |------------------------------------------------------------------+ +prompt | The next scheduled run for this job is: | +prompt +------------------------------------------------------------------+ +prompt +SELECT job, next_date, next_sec +FROM user_jobs +WHERE job = :jobno; + diff --git a/idev/sp_auto_30.sql b/idev/sp_auto_30.sql new file mode 100644 index 0000000..79589dd --- /dev/null +++ b/idev/sp_auto_30.sql @@ -0,0 +1,100 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_auto_30.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This script is responsible to configure a DBMS Job to be run | +-- | every 30 minutes starting at the quarter of each hour. For | +-- | example, if this script is run at 10:32 pm, the first job will | +-- | be run at 11:00 pm, then the next job at 11:30 pm and so on | +-- | every 30 minutes. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +prompt +prompt ========================================================================= +prompt The following script will create a new DBMS Job to be run at the quarter +prompt of each hour. (i.e. Every 30 minutes). The job will perform a Statspack +prompt snapshot using the Oracle supplied STATSPACK package. +prompt +prompt Note that this script should be run as the owner of the +prompt STATSPACK repository. (i.e. PERFSTAT) +prompt This script will prompt you for the PERFSTAT password. +prompt +prompt Also note that in order to submit and run a job, the init.ora parameter +prompt job_queue_processes must be set to a value greater than zero. +prompt ========================================================================= +prompt +prompt Hit [ENTER] to continue or CTRL-C to cancel ... +pause + +prompt Supply the password for the PERFSTAT user: +connect perfstat + + +-- +------------------------------------------------------------------------+ +-- | SCHEDULE A SNAPSHOT TO BE RUN EVERY 30 MINUTES. | +-- +------------------------------------------------------------------------+ + +VARIABLE jobno NUMBER; +VARIABLE instno NUMBER; + +BEGIN + + SELECT instance_number into :instno + FROM v$instance; + + DBMS_JOB.SUBMIT( :jobno + , 'statspack.snap;' + , TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/30)+1)*30)/(24*60) + , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/30)+1)*30)/(24*60)' + , TRUE + , :instno); + + COMMIT; + +END; +/ + +prompt +prompt +prompt +----------------------------------+ +prompt | JOB NUMBER | +prompt |------------------------------------------------------------------+ +prompt | The following job number should be noted as it will be required | +prompt | when modifying or removing prompt the job: | +prompt +------------------------------------------------------------------+ +prompt +print jobno + + +prompt +prompt +prompt +----------------------------------+ +prompt | JOB QUEUE PROCESS CONFIGURATION | +prompt |------------------------------------------------------------------+ +prompt | Below is the current setting of the job_queue_processes init.ora | +prompt | parameter - the value for this parameter must be greater than 0 | +prompt | to use automatic statistics gathering: | +prompt +------------------------------------------------------------------+ +prompt +show parameter job_queue_processes + +prompt +prompt +prompt +----------------------------------+ +prompt | NEXT SCHEDULED RUN | +prompt |------------------------------------------------------------------+ +prompt | The next scheduled run for this job is: | +prompt +------------------------------------------------------------------+ +prompt +SELECT job, next_date, next_sec +FROM user_jobs +WHERE job = :jobno; + diff --git a/idev/sp_auto_5.sql b/idev/sp_auto_5.sql new file mode 100644 index 0000000..e003295 --- /dev/null +++ b/idev/sp_auto_5.sql @@ -0,0 +1,100 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_auto_5.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This script is responsible to configure a DBMS Job to be run | +-- | every 5 minutes starting at the quarter of each hour. For | +-- | example, if this script is run at 10:32 pm, the first job will | +-- | be run at 10:35 pm, then the next job at 10:40 pm and so on | +-- | every 5 minutes. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +prompt +prompt ========================================================================= +prompt The following script will create a new DBMS Job to be run at the quarter +prompt of each hour. (i.e. Every 5 minutes). The job will perform a Statspack +prompt snapshot using the Oracle supplied STATSPACK package. +prompt +prompt Note that this script should be run as the owner of the +prompt STATSPACK repository. (i.e. PERFSTAT) +prompt This script will prompt you for the PERFSTAT password. +prompt +prompt Also note that in order to submit and run a job, the init.ora parameter +prompt job_queue_processes must be set to a value greater than zero. +prompt ========================================================================= +prompt +prompt Hit [ENTER] to continue or CTRL-C to cancel ... +pause + +prompt Supply the password for the PERFSTAT user: +connect perfstat + + +-- +------------------------------------------------------------------------+ +-- | SCHEDULE A SNAPSHOT TO BE RUN EVERY 5 MINUTES. | +-- +------------------------------------------------------------------------+ + +VARIABLE jobno NUMBER; +VARIABLE instno NUMBER; + +BEGIN + + SELECT instance_number into :instno + FROM v$instance; + + DBMS_JOB.SUBMIT( :jobno + , 'statspack.snap;' + , TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/5)+1)*5)/(24*60) + , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/5)+1)*5)/(24*60)' + , TRUE + , :instno); + + COMMIT; + +END; +/ + +prompt +prompt +prompt +----------------------------------+ +prompt | JOB NUMBER | +prompt |------------------------------------------------------------------+ +prompt | The following job number should be noted as it will be required | +prompt | when modifying or removing prompt the job: | +prompt +------------------------------------------------------------------+ +prompt +print jobno + + +prompt +prompt +prompt +----------------------------------+ +prompt | JOB QUEUE PROCESS CONFIGURATION | +prompt |------------------------------------------------------------------+ +prompt | Below is the current setting of the job_queue_processes init.ora | +prompt | parameter - the value for this parameter must be greater than 0 | +prompt | to use automatic statistics gathering: | +prompt +------------------------------------------------------------------+ +prompt +show parameter job_queue_processes + +prompt +prompt +prompt +----------------------------------+ +prompt | NEXT SCHEDULED RUN | +prompt |------------------------------------------------------------------+ +prompt | The next scheduled run for this job is: | +prompt +------------------------------------------------------------------+ +prompt +SELECT job, next_date, next_sec +FROM user_jobs +WHERE job = :jobno; + diff --git a/idev/sp_list.sql b/idev/sp_list.sql new file mode 100644 index 0000000..c7a065a --- /dev/null +++ b/idev/sp_list.sql @@ -0,0 +1,36 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_list.sql | +-- | CLASS : Statspack | +-- | PURPOSE : Provide a summary report of all Statspack snapshot IDs. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN snap_id HEAD 'Snap ID' +COLUMN startup_time FORMAT a25 HEAD 'Startup Time' +COLUMN snap_time FORMAT a25 HEAD 'Snap Time' + +break on startup_time skip 1 + +SELECT + a.snap_id + , TO_CHAR(a.startup_time, 'DD-MON-YYYY HH24:MI:SS') startup_time + , TO_CHAR(a.snap_time, 'DD-MON-YYYY HH24:MI:SS') snap_time +FROM + stats$snapshot a + , v$database b +ORDER BY + snap_id +/ + diff --git a/idev/sp_parameters.sql b/idev/sp_parameters.sql new file mode 100644 index 0000000..25e8169 --- /dev/null +++ b/idev/sp_parameters.sql @@ -0,0 +1,50 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_parameters.sql | +-- | CLASS : Statspack | +-- | PURPOSE : Provide a report of all Statspack parameters. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +COLUMN name FORMAT a10 HEAD 'Database|Name' +COLUMN snap_level FORMAT 999999 HEAD 'Snap|Level' +COLUMN num_sql FORMAT 999,999 HEAD 'Number|SQL' +COLUMN executions_th FORMAT 999,999 HEAD 'Executions|(TH)' +COLUMN parse_calls_th FORMAT 999,999 HEAD 'Parse|Calls|(TH)' +COLUMN disk_reads_th FORMAT 999,999 HEAD 'Disk|Reads|(TH)' +COLUMN buffer_gets_th FORMAT 999,999 HEAD 'Buffer|Gets|(TH)' +COLUMN sharable_mem_th FORMAT 999,999,999 HEAD 'Sharable|Mem.|(TH)' +COLUMN version_count_th HEAD 'Version|Count|(TH)' +COLUMN pin_statspack HEAD 'Pin|Statspack' +COLUMN all_init HEAD 'All|Init' +COLUMN last_modified HEAD 'Last|Modified' + +SELECT + b.name + , a.snap_level + , a.num_sql + , a.executions_th + , a.parse_calls_th + , a.disk_reads_th + , a.buffer_gets_th + , a.sharable_mem_th + , a.version_count_th + , a.pin_statspack + , a.all_init + , TO_CHAR(a.last_modified, 'DD-MON-YYYY HH24:MI:SS') last_modified +FROM + stats$statspack_parameter a + , v$database b +/ + diff --git a/idev/sp_purge.sql b/idev/sp_purge.sql new file mode 100644 index 0000000..a245499 --- /dev/null +++ b/idev/sp_purge.sql @@ -0,0 +1,37 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_purge.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This is a wrapper script to the Oracle supplied sppurge.sql. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +prompt +prompt ========================================================================= +prompt The following script is a wrapper script to the Oracle supplied SQL +prompt script ?/rdbms/admin/sppurge.sql. +prompt +prompt The Oracle supplied script sppurge.sql will prompt the user for two +prompt snapshot IDs; a low snapshot ID and a high snapshot ID. The script +prompt will then remove all records contained in that range. +prompt +prompt Note that this script should be run as the owner of the +prompt STATSPACK repository. +prompt +prompt Also note that a major portion of the sppurge.sql script is +prompt commented out for performance reasons. Search for the string +prompt "Delete any dangling SQLtext" and uncomment out the section +prompt below it. +prompt ========================================================================= +prompt +prompt Hit [ENTER] to continue or CTRL-C to cancel ... +pause + +@?/rdbms/admin/sppurge.sql diff --git a/idev/sp_purge_30_days_10g.sql b/idev/sp_purge_30_days_10g.sql new file mode 100644 index 0000000..28f0faa --- /dev/null +++ b/idev/sp_purge_30_days_10g.sql @@ -0,0 +1,98 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_purge_30_days_10g.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This script is responsible for removing all Statspack snapshot | +-- | records older than 30 days. Most of the code contained in this | +-- | script is modeled after the Oracle supplied sppurge.sql script | +-- | but removes by Snapshot date rather than Snapshot IDs. | +-- | | +-- | Note that this script only works with Oracle10g. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET FEEDBACK off +SET VERIFY off + +DEFINE days_to_keep=30 + +UNDEFINE dbid inst_num snapshots_purged + +WHENEVER SQLERROR EXIT ROLLBACK + +SPOOL sp_purge_&days_to_keep._days_10g.lis + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Get database and instance currently connected to. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +COLUMN inst_num FORMAT 99999999999999 HEADING "Instance Num." NEW_VALUE inst_num +COLUMN inst_name FORMAT a15 HEADING "Instance Name" NEW_VALUE inst_name +COLUMN db_name FORMAT a10 HEADING "DB Name" NEW_VALUE db_name +COLUMN dbid FORMAT 9999999999 HEADING "DB Id" NEW_VALUE dbid + +SELECT + d.dbid dbid + , d.name db_name + , i.instance_number inst_num + , i.instance_name inst_name +FROM + v$database d + , v$instance i +/ + + +VARIABLE dbid NUMBER; +VARIABLE inst_num NUMBER; +VARIABLE inst_name VARCHAR2(20); +VARIABLE db_name VARCHAR2(20); +VARIABLE num_days NUMBER; +VARIABLE snapshots_purged NUMBER; + +BEGIN + :dbid := &dbid; + :inst_num := &inst_num; + :inst_name := '&inst_name'; + :db_name := '&db_name'; + :num_days := &days_to_keep; + + :snapshots_purged := statspack.purge( i_num_days => :num_days + , i_extended_purge => true + , i_dbid => :dbid + , i_instance_number => :inst_num); +END; +/ + +SET FEEDBACK on + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Removed Statspack snapshots older than &days_to_keep days. | +prompt +----------------------------------------------------------------------------+ + +print snapshots_purged + +SPOOL off + +COMMIT; + +EXIT + diff --git a/idev/sp_purge_30_days_9i.sql b/idev/sp_purge_30_days_9i.sql new file mode 100644 index 0000000..5a9a555 --- /dev/null +++ b/idev/sp_purge_30_days_9i.sql @@ -0,0 +1,477 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_purge_30_days_9i.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This script is responsible for removing all Statspack snapshot | +-- | records older than 30 days. Most of the code contained in this | +-- | script is modeled after the Oracle supplied sppurge.sql script | +-- | but removes by Snapshot date rather than Snapshot IDs. | +-- | | +-- | Note that this script only works with Oracle9i. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET FEEDBACK off +SET VERIFY off + +DEFINE days_to_keep=30 + +UNDEFINE dbid inst_num hisnapid + +WHENEVER SQLERROR EXIT ROLLBACK + +SPOOL sp_purge_&days_to_keep._days_9i.lis + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Get database and instance currently connected to. This will be used later | +prompt | in the report along with other metadata to lookup snapshots. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +COLUMN inst_num FORMAT 99999999999999 HEADING "Instance Num." NEW_VALUE inst_num +COLUMN inst_name FORMAT a15 HEADING "Instance Name" NEW_VALUE inst_name +COLUMN db_name FORMAT a10 HEADING "DB Name" NEW_VALUE db_name +COLUMN dbid FORMAT 9999999999 HEADING "DB Id" NEW_VALUE dbid + +SELECT + d.dbid dbid + , d.name db_name + , i.instance_number inst_num + , i.instance_name inst_name +FROM + v$database d + , v$instance i +/ + + +VARIABLE dbid NUMBER; +VARIABLE inst_num NUMBER; +VARIABLE inst_name VARCHAR2(20); +VARIABLE db_name VARCHAR2(20); + +BEGIN + :dbid := &dbid; + :inst_num := &inst_num; + :inst_name := '&inst_name'; + :db_name := '&db_name'; +END; +/ + +SET FEEDBACK on + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Obtain the MIN and MAX Snapshot IDs to be removed from the range of IDs | +prompt | order than &days_to_keep days. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +COLUMN lo_snap HEADING "Min Snapshot ID" NEW_VALUE LoSnapId +COLUMN hi_snap HEADING "Max Snapshot ID" NEW_VALUE HiSnapId + +SELECT NVL(MAX(snap_id),0) hi_snap + , NVL(MIN(snap_id),0) lo_snap +FROM stats$snapshot +WHERE snap_time < (sysdate - &days_to_keep); + +VARIABLE lo_snap NUMBER; +VARIABLE hi_snap NUMBER; + +BEGIN + :lo_snap := &losnapid; + :hi_snap := &hisnapid; +END; +/ + + +COLUMN l HEADING 'Low Snap ID' +COLUMN h HEADING 'High Snap ID' + +SELECT + :lo_snap l + , :hi_snap h +FROM dual; + +SET FEEDBACK ON + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Snapshots that will be removed for this database instance. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +COLUMN snap_id FORMAT 9999990 HEADING 'Snap Id' +COLUMN level FORMAT 99 HEADING 'Snap|Level' +COLUMN snap_date FORMAT a21 HEADING 'Snapshot Started' +COLUMN host_name FORMAT a15 HEADING 'Host' +COLUMN ucomment format a25 HEADING 'Comment' + +SELECT + s.snap_id snap_id + , s.snap_level "level" + , to_char(s.snap_time,'mm/dd/yyyy HH24:MI:SS') snap_date + , di.host_name host_name + , s.ucomment ucomment +FROM + stats$snapshot s + , stats$database_instance di +WHERE + s.dbid = :dbid + AND di.dbid = :dbid + AND s.instance_number = :inst_num + AND di.instance_number = :inst_num + AND di.startup_time = s.startup_time + AND s.snap_id < :hi_snap +ORDER BY + db_name + , instance_name + , snap_id +/ + +SET HEADING off + +SELECT 'WARNING: No snapshots found older than &days_to_keep days in STATS$SNAPSHOT' +FROM dual +WHERE NOT EXISTS + ( + select null + from stats$snapshot + where instance_number = :inst_num + and dbid = :dbid + and snap_id = :lo_snap + ) + OR + NOT EXISTS + ( + select null + from stats$snapshot + where instance_number = :inst_num + and dbid = :dbid + and snap_id = :hi_snap + ) +/ + +SET HEADING on +SET FEEDBACK ON + + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Get begin and end snapshot times - these are used to delete undostat. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK OFF + +COLUMN btime NEW_VALUE btime +COLUMN etime NEW_VALUE etime + +SELECT + b.snap_id + , TO_CHAR(b.snap_time, 'YYYYMMDD HH24:MI:SS') btime +FROM + stats$snapshot b +WHERE + b.snap_id = :lo_snap + AND b.dbid = :dbid + AND b.instance_number = :inst_num; + + +SELECT + e.snap_id + , TO_CHAR(e.snap_time, 'YYYYMMDD HH24:MI:SS') etime +FROM stats$snapshot e +WHERE + e.snap_id = :hi_snap + AND e.dbid = :dbid + AND e.instance_number = :inst_num; + +VARIABLE btime VARCHAR2(25); +VARIABLE etime VARCHAR2(25); + +BEGIN + :btime := '&btime'; + :etime := '&etime'; +END; +/ + +SET FEEDBACK on + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Deleting snapshots older than &days_to_keep days. +prompt | Deleting snapshots &&losnapid - &&hisnapid. +prompt +----------------------------------------------------------------------------+ + +DELETE FROM stats$snapshot + WHERE instance_number = :inst_num + AND dbid = :dbid + AND snap_id between :lo_snap and :hi_snap; + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Delete any dangling SQLtext. The following statement deletes any dangling | +prompt | SQL statements which are no longer referred to by ANY snapshots. By | +prompt | default, Oracle comments this statement out as it can be very resource | +prompt | intensive. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +ALTER SESSION SET hash_area_size=1048576; + +COLUMN last_snap_id HEADING 'Last Snap ID' +COLUMN count HEADING 'Count' + +SELECT --+ index_ffs(st) + last_snap_id + , count(*) count +FROM + stats$sqltext st +WHERE + ( hash_value + , text_subset + ) + NOT IN + ( select --+ hash_aj full(ss) no_expand + hash_value + , text_subset + from stats$sql_summary ss + where ( ( + snap_id < :lo_snap + or + snap_id > :hi_snap + ) + and dbid = :dbid + and instance_number = :inst_num + ) + or + ( + dbid != :dbid + or + instance_number != :inst_num + ) + ) +GROUP BY + last_snap_id; + +SET FEEDBACK on + +DELETE --+ index_ffs(st) +FROM stats$sqltext st +WHERE + ( hash_value + , text_subset + ) + NOT IN + ( select --+ hash_aj full(ss) no_expand + hash_value + , text_subset + from stats$sql_summary ss + where ( ( + snap_id < :lo_snap + or + snap_id > :hi_snap + ) + and dbid = :dbid + and instance_number = :inst_num + ) + or + ( + dbid != :dbid + or + instance_number != :inst_num + ) + ); + + +SET FEEDBACK on + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | (OPTIONAL) - STATS$SEG_STAT_OBJ delete statement | +prompt +----------------------------------------------------------------------------+ + +DELETE --+ index_ffs(sso) +FROM stats$seg_stat_obj sso +WHERE ( dbid + , dataobj# + , obj# + ) + NOT IN + ( + select --+ hash_aj full(ss) no_expand + dbid + , dataobj# + , obj# + from + stats$seg_stat ss + where ( ( snap_id < :lo_snap + or + snap_id > :hi_snap + ) + and dbid = :dbid + and instance_number = :inst_num + ) + or + ( dbid != :dbid + or + instance_number != :inst_num + ) + ); + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Delete from stats$undostat | +prompt | Undostat rows that cover the snap times | +prompt +----------------------------------------------------------------------------+ + +COLUMN dbid HEADING 'DB Id' +COLUMN instance_number HEADING 'Instance Number' +COLUMN snap_id HEADING 'Snap ID' +COLUMN begin_time HEADING 'Begin Time' +COLUMN end_time HEADING 'End Time' + +SELECT + dbid + , instance_number + , snap_id + , TO_CHAR(begin_time, 'YYYYMMDD HH24:MI:SS') begin_time + , TO_CHAR(end_time, 'YYYYMMDD HH24:MI:SS') end_time +FROM + stats$undostat us +WHERE + dbid = :dbid + AND instance_number = :inst_num + AND end_time < to_date(:etime, 'YYYYMMDD HH24:MI:SS') +ORDER BY + snap_id; + + +DELETE from stats$undostat us + WHERE dbid = :dbid + AND instance_number = :inst_num + AND end_time < to_date(:etime, 'YYYYMMDD HH24:MI:SS'); + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Delete from stats$database_instance | +prompt | Dangling database instance rows for that startup time | +prompt +----------------------------------------------------------------------------+ + +COLUMN dbid HEADING 'DB Id' +COLUMN instance_number HEADING 'Instance Number' +COLUMN startup_time HEADING 'Startup Time' +COLUMN snap_id HEADING 'Snap ID' + +SELECT + dbid + , instance_number + , TO_CHAR(startup_time, 'DD-MON-YYYY HH24:MI:SS') startup_time + , snap_id +FROM + stats$database_instance di +WHERE + instance_number = :inst_num + AND dbid = :dbid + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = di.dbid + and s.instance_number = di.instance_number + and s.startup_time = di.startup_time) +ORDER BY + snap_id; + + +DELETE from stats$database_instance di + WHERE instance_number = :inst_num + AND dbid = :dbid + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = di.dbid + and s.instance_number = di.instance_number + and s.startup_time = di.startup_time); + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Delete from stats$statspack_parameter | +prompt | Dangling statspack parameter rows for the database / instance | +prompt +----------------------------------------------------------------------------+ + +COLUMN dbid HEADING 'DB Id' +COLUMN instance_number HEADING 'Instance Number' +COLUMN session_id HEADING 'Session ID' +COLUMN snap_level HEADING 'Snap Level' + +SELECT + dbid + , instance_number + , session_id + , snap_level +FROM + stats$statspack_parameter sp +WHERE + instance_number = :inst_num + AND dbid = :dbid + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = sp.dbid + and s.instance_number = sp.instance_number); + + +DELETE from stats$statspack_parameter sp + WHERE instance_number = :inst_num + AND dbid = :dbid + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = sp.dbid + and s.instance_number = sp.instance_number); + + +SPOOL off + +COMMIT; + +EXIT + diff --git a/idev/sp_purge_n_days_10g.sql b/idev/sp_purge_n_days_10g.sql new file mode 100644 index 0000000..2aaae76 --- /dev/null +++ b/idev/sp_purge_n_days_10g.sql @@ -0,0 +1,102 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_purge_n_days_10g.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This script is responsible for removing all Statspack snapshot | +-- | records older than [n] days. Most of the code contained in this | +-- | script is modeled after the Oracle supplied sppurge.sql script | +-- | but removes by Snapshot date rather than Snapshot IDs. | +-- | | +-- | Note that this script will either prompt for the number of days | +-- | or this parameter can be passed in from another calling | +-- | program. | +-- | | +-- | Note that this script only works with Oracle10g. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET FEEDBACK off +SET VERIFY off + +DEFINE days_to_keep=&1 + +UNDEFINE dbid inst_num snapshots_purged + +WHENEVER SQLERROR EXIT ROLLBACK + +SPOOL sp_purge_&days_to_keep._days_10g.lis + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Get database and instance currently connected to. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +COLUMN inst_num FORMAT 99999999999999 HEADING "Instance Num." NEW_VALUE inst_num +COLUMN inst_name FORMAT a15 HEADING "Instance Name" NEW_VALUE inst_name +COLUMN db_name FORMAT a10 HEADING "DB Name" NEW_VALUE db_name +COLUMN dbid FORMAT 9999999999 HEADING "DB Id" NEW_VALUE dbid + +SELECT + d.dbid dbid + , d.name db_name + , i.instance_number inst_num + , i.instance_name inst_name +FROM + v$database d + , v$instance i +/ + + +VARIABLE dbid NUMBER; +VARIABLE inst_num NUMBER; +VARIABLE inst_name VARCHAR2(20); +VARIABLE db_name VARCHAR2(20); +VARIABLE num_days NUMBER; +VARIABLE snapshots_purged NUMBER; + +BEGIN + :dbid := &dbid; + :inst_num := &inst_num; + :inst_name := '&inst_name'; + :db_name := '&db_name'; + :num_days := &days_to_keep; + + :snapshots_purged := statspack.purge( i_num_days => :num_days + , i_extended_purge => true + , i_dbid => :dbid + , i_instance_number => :inst_num); +END; +/ + +SET FEEDBACK on + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Removed Statspack snapshots older than &days_to_keep days. | +prompt +----------------------------------------------------------------------------+ + +print snapshots_purged + +SPOOL off + +COMMIT; + +EXIT + diff --git a/idev/sp_purge_n_days_9i.sql b/idev/sp_purge_n_days_9i.sql new file mode 100644 index 0000000..43e2494 --- /dev/null +++ b/idev/sp_purge_n_days_9i.sql @@ -0,0 +1,477 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_purge_n_days_9i.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This script is responsible for removing all Statspack snapshot | +-- | records older than [n] days. Most of the code contained in this | +-- | script is modeled after the Oracle supplied sppurge.sql script | +-- | but removes by Snapshot date rather than Snapshot IDs. | +-- | | +-- | Note that this script will either prompt for the number of days | +-- | or this parameter can be passed in from another calling | +-- | program. | +-- | | +-- | Note that this script only works with Oracle9i. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET LINESIZE 145 +SET PAGESIZE 9999 +SET FEEDBACK off +SET VERIFY off + +DEFINE days_to_keep=&1 + +UNDEFINE dbid inst_num hisnapid + +WHENEVER SQLERROR EXIT ROLLBACK + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Get database and instance currently connected to. This will be used later | +prompt | in the report along with other metadata to lookup snapshots. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +COLUMN inst_num FORMAT 99999999999999 HEADING "Instance Num." NEW_VALUE inst_num +COLUMN inst_name FORMAT a15 HEADING "Instance Name" NEW_VALUE inst_name +COLUMN db_name FORMAT a10 HEADING "DB Name" NEW_VALUE db_name +COLUMN dbid FORMAT 9999999999 HEADING "DB Id" NEW_VALUE dbid + +SELECT + d.dbid dbid + , d.name db_name + , i.instance_number inst_num + , i.instance_name inst_name +FROM + v$database d + , v$instance i +/ + + +VARIABLE dbid NUMBER; +VARIABLE inst_num NUMBER; +VARIABLE inst_name VARCHAR2(20); +VARIABLE db_name VARCHAR2(20); + +BEGIN + :dbid := &dbid; + :inst_num := &inst_num; + :inst_name := '&inst_name'; + :db_name := '&db_name'; +END; +/ + +SET FEEDBACK on + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Obtain the MIN and MAX Snapshot IDs to be removed from the range of IDs | +prompt | order than &days_to_keep days. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +COLUMN lo_snap HEADING "Min Snapshot ID" NEW_VALUE LoSnapId +COLUMN hi_snap HEADING "Max Snapshot ID" NEW_VALUE HiSnapId + +SELECT NVL(MAX(snap_id),0) hi_snap + , NVL(MIN(snap_id),0) lo_snap +FROM stats$snapshot +WHERE snap_time < (sysdate - &days_to_keep); + +VARIABLE lo_snap NUMBER; +VARIABLE hi_snap NUMBER; + +BEGIN + :lo_snap := &losnapid; + :hi_snap := &hisnapid; +END; +/ + + +COLUMN l HEADING 'Low Snap ID' +COLUMN h HEADING 'High Snap ID' + +SELECT + :lo_snap l + , :hi_snap h +FROM dual; + +SET FEEDBACK ON + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Snapshots that will be removed for this database instance. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +COLUMN snap_id FORMAT 9999990 HEADING 'Snap Id' +COLUMN level FORMAT 99 HEADING 'Snap|Level' +COLUMN snap_date FORMAT a21 HEADING 'Snapshot Started' +COLUMN host_name FORMAT a15 HEADING 'Host' +COLUMN ucomment format a25 HEADING 'Comment' + +SELECT + s.snap_id snap_id + , s.snap_level "level" + , to_char(s.snap_time,'mm/dd/yyyy HH24:MI:SS') snap_date + , di.host_name host_name + , s.ucomment ucomment +FROM + stats$snapshot s + , stats$database_instance di +WHERE + s.dbid = :dbid + AND di.dbid = :dbid + AND s.instance_number = :inst_num + AND di.instance_number = :inst_num + AND di.startup_time = s.startup_time + AND s.snap_id < :hi_snap +ORDER BY + db_name + , instance_name + , snap_id +/ + +SET HEADING off + +SELECT 'WARNING: No snapshots found older than &days_to_keep days in STATS$SNAPSHOT' +FROM dual +WHERE NOT EXISTS + ( + select null + from stats$snapshot + where instance_number = :inst_num + and dbid = :dbid + and snap_id = :lo_snap + ) + OR + NOT EXISTS + ( + select null + from stats$snapshot + where instance_number = :inst_num + and dbid = :dbid + and snap_id = :hi_snap + ) +/ + +SET HEADING on +SET FEEDBACK ON + + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Get begin and end snapshot times - these are used to delete undostat. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK OFF + +COLUMN btime NEW_VALUE btime +COLUMN etime NEW_VALUE etime + +SELECT + b.snap_id + , TO_CHAR(b.snap_time, 'YYYYMMDD HH24:MI:SS') btime +FROM + stats$snapshot b +WHERE + b.snap_id = :lo_snap + AND b.dbid = :dbid + AND b.instance_number = :inst_num; + + +SELECT + e.snap_id + , TO_CHAR(e.snap_time, 'YYYYMMDD HH24:MI:SS') etime +FROM stats$snapshot e +WHERE + e.snap_id = :hi_snap + AND e.dbid = :dbid + AND e.instance_number = :inst_num; + +VARIABLE btime VARCHAR2(25); +VARIABLE etime VARCHAR2(25); + +BEGIN + :btime := '&btime'; + :etime := '&etime'; +END; +/ + +SET FEEDBACK on + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Deleting snapshots older than &days_to_keep days. +prompt | Deleting snapshots &&losnapid - &&hisnapid. +prompt +----------------------------------------------------------------------------+ + +DELETE FROM stats$snapshot + WHERE instance_number = :inst_num + AND dbid = :dbid + AND snap_id between :lo_snap and :hi_snap; + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Delete any dangling SQLtext. The following statement deletes any dangling | +prompt | SQL statements which are no longer referred to by ANY snapshots. By | +prompt | default, Oracle comments this statement out as it can be very resource | +prompt | intensive. | +prompt +----------------------------------------------------------------------------+ + +SET FEEDBACK off + +ALTER SESSION SET hash_area_size=1048576; + +COLUMN last_snap_id HEADING 'Last Snap ID' +COLUMN count HEADING 'Count' + +SELECT --+ index_ffs(st) + last_snap_id + , count(*) count +FROM + stats$sqltext st +WHERE + ( hash_value + , text_subset + ) + NOT IN + ( select --+ hash_aj full(ss) no_expand + hash_value + , text_subset + from stats$sql_summary ss + where ( ( + snap_id < :lo_snap + or + snap_id > :hi_snap + ) + and dbid = :dbid + and instance_number = :inst_num + ) + or + ( + dbid != :dbid + or + instance_number != :inst_num + ) + ) +GROUP BY + last_snap_id; + +SET FEEDBACK on + +DELETE --+ index_ffs(st) +FROM stats$sqltext st +WHERE + ( hash_value + , text_subset + ) + NOT IN + ( select --+ hash_aj full(ss) no_expand + hash_value + , text_subset + from stats$sql_summary ss + where ( ( + snap_id < :lo_snap + or + snap_id > :hi_snap + ) + and dbid = :dbid + and instance_number = :inst_num + ) + or + ( + dbid != :dbid + or + instance_number != :inst_num + ) + ); + + +SET FEEDBACK on + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | (OPTIONAL) - STATS$SEG_STAT_OBJ delete statement | +prompt +----------------------------------------------------------------------------+ + +DELETE --+ index_ffs(sso) +FROM stats$seg_stat_obj sso +WHERE ( dbid + , dataobj# + , obj# + ) + NOT IN + ( + select --+ hash_aj full(ss) no_expand + dbid + , dataobj# + , obj# + from + stats$seg_stat ss + where ( ( snap_id < :lo_snap + or + snap_id > :hi_snap + ) + and dbid = :dbid + and instance_number = :inst_num + ) + or + ( dbid != :dbid + or + instance_number != :inst_num + ) + ); + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Delete from stats$undostat | +prompt | Undostat rows that cover the snap times | +prompt +----------------------------------------------------------------------------+ + +COLUMN dbid HEADING 'DB Id' +COLUMN instance_number HEADING 'Instance Number' +COLUMN snap_id HEADING 'Snap ID' +COLUMN begin_time HEADING 'Begin Time' +COLUMN end_time HEADING 'End Time' + +SELECT + dbid + , instance_number + , snap_id + , TO_CHAR(begin_time, 'YYYYMMDD HH24:MI:SS') begin_time + , TO_CHAR(end_time, 'YYYYMMDD HH24:MI:SS') end_time +FROM + stats$undostat us +WHERE + dbid = :dbid + AND instance_number = :inst_num + AND end_time < to_date(:etime, 'YYYYMMDD HH24:MI:SS') +ORDER BY + snap_id; + + +DELETE from stats$undostat us + WHERE dbid = :dbid + AND instance_number = :inst_num + AND end_time < to_date(:etime, 'YYYYMMDD HH24:MI:SS'); + + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Delete from stats$database_instance | +prompt | Dangling database instance rows for that startup time | +prompt +----------------------------------------------------------------------------+ + +COLUMN dbid HEADING 'DB Id' +COLUMN instance_number HEADING 'Instance Number' +COLUMN startup_time HEADING 'Startup Time' +COLUMN snap_id HEADING 'Snap ID' + +SELECT + dbid + , instance_number + , TO_CHAR(startup_time, 'DD-MON-YYYY HH24:MI:SS') startup_time + , snap_id +FROM + stats$database_instance di +WHERE + instance_number = :inst_num + AND dbid = :dbid + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = di.dbid + and s.instance_number = di.instance_number + and s.startup_time = di.startup_time) +ORDER BY + snap_id; + + +DELETE from stats$database_instance di + WHERE instance_number = :inst_num + AND dbid = :dbid + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = di.dbid + and s.instance_number = di.instance_number + and s.startup_time = di.startup_time); + +prompt +prompt +prompt +prompt +----------------------------------------------------------------------------+ +prompt | Delete from stats$statspack_parameter | +prompt | Dangling statspack parameter rows for the database / instance | +prompt +----------------------------------------------------------------------------+ + +COLUMN dbid HEADING 'DB Id' +COLUMN instance_number HEADING 'Instance Number' +COLUMN session_id HEADING 'Session ID' +COLUMN snap_level HEADING 'Snap Level' + +SELECT + dbid + , instance_number + , session_id + , snap_level +FROM + stats$statspack_parameter sp +WHERE + instance_number = :inst_num + AND dbid = :dbid + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = sp.dbid + and s.instance_number = sp.instance_number); + + +DELETE from stats$statspack_parameter sp + WHERE instance_number = :inst_num + AND dbid = :dbid + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = sp.dbid + and s.instance_number = sp.instance_number); + + +COMMIT; + +EXIT + + diff --git a/idev/sp_snap.sql b/idev/sp_snap.sql new file mode 100644 index 0000000..aeeaa95 --- /dev/null +++ b/idev/sp_snap.sql @@ -0,0 +1,28 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_snap.sql | +-- | CLASS : Statspack | +-- | PURPOSE : This is a wrapper script used to perform a manual Statspack | +-- | snapshot. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +prompt +prompt ========================================================================= +prompt The following script is a wrapper script to the Oracle supplied package +prompt Statspack. +prompt ========================================================================= +prompt Note that this script should be run as the owner of the +prompt STATSPACK repository. +prompt ========================================================================= +prompt + +exec statspack.snap; + diff --git a/idev/sp_statspack_custom_pkg_10g.sql b/idev/sp_statspack_custom_pkg_10g.sql new file mode 100644 index 0000000..1f8a4ae --- /dev/null +++ b/idev/sp_statspack_custom_pkg_10g.sql @@ -0,0 +1,734 @@ +-- +-------------------------------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |-------------------------------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |-------------------------------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_statspack_custom_pkg_10g.sql | +-- | CLASS : Statspack | +-- | PURPOSE : Custom package to be used in managing Statspack. This version has been modified to | +-- | work with Oracle10g. | +-- | | +-- | EXAMPLES: | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Perform a Statspack Snapshot. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap; | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a snapshot job to run once every 15 minutes starting at the next 15 minute interval. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap_schedule( | +-- | TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/15)+1)*15)/(24*60) | +-- | , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/15)+1)*15)/(24*60)'); | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a snapshot job to run once every 5 minutes starting at the next 5 minute interval. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap_schedule_5; | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a snapshot job to run once every 15 minutes starting at the next 15 minute interval. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap_schedule_15; | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a snapshot job to run once every 30 minutes starting at the next 30 minute interval. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap_schedule_30; | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Purge all snapshots older than 30 days. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.purge(30); | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a purge job to run once a day and purge snapshots older than 30 days. The job will | +-- | start at the begining of the next hour. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.purge_schedule(30, trunc(sysdate+1/24,'HH'), 'SYSDATE+1'); | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a purge job to run once a day at midnight to purge snapshots older than 30 days. The | +-- | job will start at the next midnight and continue to run daily at midnight. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.purge_schedule(30, trunc(sysdate+1), 'SYSDATE+1'); | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a purge job to run once every day at midnight, removing snapshot records older than 30 | +-- | days. The job will start at the next midnight and continue to run daily at midnight. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.purge_schedule_midnight(30); | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development environment before | +-- | attempting to run it in production. | +-- +-------------------------------------------------------------------------------------------------+ + +set feedback on +set timing on +set verify on +set serveroutput on + +spool sp_statspack_custom_10g.lst + + +prompt +prompt +prompt COMPILING statspack_custom (specification)... +prompt ============================================ +prompt + + +set termout off + + +-- +----------------------------------------------------------------------------+ +-- | ************************************************************************** | +-- | * *** PACKAGE SPECIFICATION *** * | +-- | * * | +-- | * statspack_custom * | +-- | ************************************************************************** | +-- +----------------------------------------------------------------------------+ + +CREATE OR REPLACE PACKAGE statspack_custom +IS + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap | + -- | | + -- | Wrapper procedure (wraps the original snap() | + -- | procedure in the STATSPACK package) used to | + -- | perform a Statspack snapshot. | + -- +-----------------------------------------------------------+ + PROCEDURE snap; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule( in_start_date IN DATE + , in_interval IN VARCHAR2 + ); + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_5 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 5 minutes and | + -- | starts at the next 5 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_5; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_15 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 15 minutes and | + -- | starts at the next 15 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_15; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_30 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 30 minutes and | + -- | starts at the next 30 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_30; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge | + -- | | + -- | Used to purge old records from the Statspack | + -- | repository. | + -- +-----------------------------------------------------------+ + PROCEDURE purge(in_days_older_than IN INTEGER); + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge_schedule | + -- | | + -- | Utility procedure used to schedule the | + -- | "purge()" procedure - removing a given number | + -- | of obsolete records by the provided number of | + -- | days parameter. | + -- +-----------------------------------------------------------+ + PROCEDURE purge_schedule( in_days_older_than IN INTEGER + , in_start_date IN DATE + , in_interval IN VARCHAR2 + ); + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge_schedule_midnight | + -- | | + -- | Utility procedure used to schedule the | + -- | "purge()" procedure to run every day at | + -- | midnight - removing a given number of | + -- | obsolete records by the provided number of | + -- | days parameter. | + -- +-----------------------------------------------------------+ + PROCEDURE purge_schedule_midnight(in_days_older_than IN INTEGER); + + + +END statspack_custom; +/ + +set termout on +show errors + + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + +prompt +prompt +prompt COMPILING statspack_custom (body)... +prompt ============================================ +prompt + +set termout off + +-- +----------------------------------------------------------------------------+ +-- | ************************************************************************** | +-- | * *** PACKAGE BODY *** * | +-- | * * | +-- | * statspack_custom * | +-- | ************************************************************************** | +-- +----------------------------------------------------------------------------+ + +CREATE OR REPLACE PACKAGE BODY statspack_custom +IS + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap | + -- | | + -- | Wrapper procedure (wraps the original snap() | + -- | procedure in the STATSPACK package) used to | + -- | perform a Statspack snapshot. | + -- +-----------------------------------------------------------+ + PROCEDURE snap + IS + BEGIN + statspack.snap; + commit; + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule( in_start_date IN DATE + , in_interval IN VARCHAR2) + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + v_JobNumber NUMBER; + v_InstanceNumber NUMBER; + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.snap_schedule'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Get instance number + -- ------------------------------------------------------------------------- + v_ActionContext := 'Get instance number'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + SELECT instance_number INTO v_InstanceNumber FROM v$instance; + + + -- ------------------------------------------------------------------------- + -- Submit job + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + DBMS_JOB.SUBMIT( job => v_JobNumber + , what => 'statspack_custom.snap;' + , next_date => in_start_date + , interval => in_interval + , no_parse => TRUE + , instance => v_InstanceNumber); + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_5 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 5 minutes and | + -- | starts at the next 5 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_5 + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.snap_schedule_5'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Submit job to run every 5 minutes + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job every 5 minutes'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + statspack_custom.snap_schedule( + TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/5)+1)*5)/(24*60) + , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/5)+1)*5)/(24*60)'); + + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_15 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 15 minutes and | + -- | starts at the next 15 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_15 + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.snap_schedule_15'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Submit job to run every 15 minutes + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job every 15 minutes'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + statspack_custom.snap_schedule( + TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/15)+1)*15)/(24*60) + , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/15)+1)*15)/(24*60)'); + + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_30 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 30 minutes and | + -- | starts at the next 30 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_30 + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.snap_schedule_30'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Submit job to run every 30 minutes + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job every 30 minutes'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + statspack_custom.snap_schedule( + TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/30)+1)*30)/(24*60) + , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/30)+1)*30)/(24*60)'); + + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge | + -- | | + -- | Used to purge old records from the Statspack | + -- | repository. | + -- +-----------------------------------------------------------+ + PROCEDURE purge(in_days_older_than IN INTEGER) + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + v_DbId sys.v_$database.dbid%TYPE; + v_DbName sys.v_$database.name%TYPE; + v_InstanceNumber sys.v_$instance.instance_number%TYPE; + v_InstanceName sys.v_$instance.instance_name%TYPE; + + v_snapshots_purged NUMBER; + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.purge'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + -- ------------------------------------------------------------------------- + -- Get database and instance currently connected to. This will be used later + -- in the report along with other metadata to lookup snapshots. + -- ------------------------------------------------------------------------- + v_ActionContext := 'Gather instance / DB information'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + SELECT + d.dbid + , d.name + , i.instance_number + , i.instance_name + INTO + v_DbId + , v_DbName + , v_InstanceNumber + , v_InstanceName + FROM + v$database d + , v$instance i; + + DBMS_OUTPUT.PUT_LINE('v_DbId : ' || v_DbId); + DBMS_OUTPUT.PUT_LINE('v_DbName : ' || v_DbName); + DBMS_OUTPUT.PUT_LINE('v_InstanceNumber : ' || v_InstanceNumber); + DBMS_OUTPUT.PUT_LINE('v_InstanceName : ' || v_InstanceName); + + + -- ------------------------------------------------------------------------- + -- Deleting obsolete Statspack records. + -- ------------------------------------------------------------------------- + v_ActionContext := 'Deleting obsolete SP records'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + v_snapshots_purged := statspack.purge( i_num_days => in_days_older_than + , i_extended_purge => true + , i_dbid => v_DbId + , i_instance_number => v_InstanceNumber); + + DBMS_OUTPUT.PUT_LINE('Removed Statspack snapshots older than : ' || in_days_older_than); + DBMS_OUTPUT.PUT_LINE('Number of purged records : ' || v_snapshots_purged); + + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge_schedule | + -- | | + -- | Utility procedure used to schedule the | + -- | "purge()" procedure - removing a given number | + -- | of obsolete records by the provided number of | + -- | days parameter. | + -- +-----------------------------------------------------------+ + PROCEDURE purge_schedule( in_days_older_than IN INTEGER + , in_start_date IN DATE + , in_interval IN VARCHAR2) + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + v_JobNumber NUMBER; + v_InstanceNumber NUMBER; + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.purge_schedule'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Get instance number + -- ------------------------------------------------------------------------- + v_ActionContext := 'Get instance number'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + SELECT instance_number INTO v_InstanceNumber FROM v$instance; + + + -- ------------------------------------------------------------------------- + -- Submit job + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + DBMS_JOB.SUBMIT( job => v_JobNumber + , what => 'statspack_custom.purge(' || in_days_older_than || ');' + , next_date => in_start_date + , interval => in_interval + , no_parse => TRUE + , instance => v_InstanceNumber); + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge_schedule_midnight | + -- | | + -- | Utility procedure used to schedule the | + -- | "purge()" procedure to run every day at | + -- | midnight - removing a given number of | + -- | obsolete records by the provided number of | + -- | days parameter. | + -- +-----------------------------------------------------------+ + PROCEDURE purge_schedule_midnight(in_days_older_than IN INTEGER) + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.purge_schedule_midnight'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + -- ------------------------------------------------------------------------- + -- Submit midnight job + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit midnight job'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + statspack_custom.purge_schedule(in_days_older_than, trunc(sysdate+1), 'SYSDATE+1'); + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + +END statspack_custom; +/ + +set termout on +show errors + +prompt + +spool off diff --git a/idev/sp_statspack_custom_pkg_9i.sql b/idev/sp_statspack_custom_pkg_9i.sql new file mode 100644 index 0000000..e8b6ab5 --- /dev/null +++ b/idev/sp_statspack_custom_pkg_9i.sql @@ -0,0 +1,934 @@ +-- +-------------------------------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |-------------------------------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |-------------------------------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_statspack_custom_pkg_9i.sql | +-- | CLASS : Statspack | +-- | PURPOSE : Custom package to be used in managing Statspack. This version has been modified to | +-- | work with Oracle9i. | +-- | | +-- | EXAMPLES: | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Perform a Statspack Snapshot. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap; | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a snapshot job to run once every 15 minutes starting at the next 15 minute interval. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap_schedule( | +-- | TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/15)+1)*15)/(24*60) | +-- | , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/15)+1)*15)/(24*60)'); | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a snapshot job to run once every 5 minutes starting at the next 5 minute interval. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap_schedule_5; | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a snapshot job to run once every 15 minutes starting at the next 15 minute interval. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap_schedule_15; | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a snapshot job to run once every 30 minutes starting at the next 30 minute interval. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.snap_schedule_30; | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Purge all snapshots older than 30 days. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.purge(30); | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a purge job to run once a day and purge snapshots older than 30 days. The job will | +-- | start at the begining of the next hour. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.purge_schedule(30, trunc(sysdate+1/24,'HH'), 'SYSDATE+1'); | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a purge job to run once a day at midnight to purge snapshots older than 30 days. The | +-- | job will start at the next midnight and continue to run daily at midnight. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.purge_schedule(30, trunc(sysdate+1), 'SYSDATE+1'); | +-- | | +-- | ----------------------------------------------------------------------------------------------- | +-- | Schedule a purge job to run once every day at midnight, removing snapshot records older than 30 | +-- | days. The job will start at the next midnight and continue to run daily at midnight. | +-- | ----------------------------------------------------------------------------------------------- | +-- | statspack_custom.purge_schedule_midnight(30); | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development environment before | +-- | attempting to run it in production. | +-- +-------------------------------------------------------------------------------------------------+ + +set feedback on +set timing on +set verify on +set serveroutput on + +spool sp_statspack_custom_9i.lst + + +prompt +prompt +prompt COMPILING statspack_custom (specification)... +prompt ============================================ +prompt + + +set termout off + + +-- +----------------------------------------------------------------------------+ +-- | ************************************************************************** | +-- | * *** PACKAGE SPECIFICATION *** * | +-- | * * | +-- | * statspack_custom * | +-- | ************************************************************************** | +-- +----------------------------------------------------------------------------+ + +CREATE OR REPLACE PACKAGE statspack_custom +IS + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap | + -- | | + -- | Wrapper procedure (wraps the original snap() | + -- | procedure in the STATSPACK package) used to | + -- | perform a Statspack snapshot. | + -- +-----------------------------------------------------------+ + PROCEDURE snap; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule( in_start_date IN DATE + , in_interval IN VARCHAR2 + ); + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_5 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 5 minutes and | + -- | starts at the next 5 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_5; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_15 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 15 minutes and | + -- | starts at the next 15 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_15; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_30 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 30 minutes and | + -- | starts at the next 30 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_30; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge | + -- | | + -- | Used to purge old records from the Statspack | + -- | repository. | + -- +-----------------------------------------------------------+ + PROCEDURE purge(in_days_older_than IN INTEGER); + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge_schedule | + -- | | + -- | Utility procedure used to schedule the | + -- | "purge()" procedure - removing a given number | + -- | of obsolete records by the provided number of | + -- | days parameter. | + -- +-----------------------------------------------------------+ + PROCEDURE purge_schedule( in_days_older_than IN INTEGER + , in_start_date IN DATE + , in_interval IN VARCHAR2 + ); + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge_schedule_midnight | + -- | | + -- | Utility procedure used to schedule the | + -- | "purge()" procedure to run every day at | + -- | midnight - removing a given number of | + -- | obsolete records by the provided number of | + -- | days parameter. | + -- +-----------------------------------------------------------+ + PROCEDURE purge_schedule_midnight(in_days_older_than IN INTEGER); + + + +END statspack_custom; +/ + +set termout on +show errors + + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + +prompt +prompt +prompt COMPILING statspack_custom (body)... +prompt ============================================ +prompt + +set termout off + +-- +----------------------------------------------------------------------------+ +-- | ************************************************************************** | +-- | * *** PACKAGE BODY *** * | +-- | * * | +-- | * statspack_custom * | +-- | ************************************************************************** | +-- +----------------------------------------------------------------------------+ + +CREATE OR REPLACE PACKAGE BODY statspack_custom +IS + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap | + -- | | + -- | Wrapper procedure (wraps the original snap() | + -- | procedure in the STATSPACK package) used to | + -- | perform a Statspack snapshot. | + -- +-----------------------------------------------------------+ + PROCEDURE snap + IS + BEGIN + statspack.snap; + commit; + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule( in_start_date IN DATE + , in_interval IN VARCHAR2) + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + v_JobNumber NUMBER; + v_InstanceNumber NUMBER; + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.snap_schedule'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Get instance number + -- ------------------------------------------------------------------------- + v_ActionContext := 'Get instance number'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + SELECT instance_number INTO v_InstanceNumber FROM v$instance; + + + -- ------------------------------------------------------------------------- + -- Submit job + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + DBMS_JOB.SUBMIT( job => v_JobNumber + , what => 'statspack_custom.snap;' + , next_date => in_start_date + , interval => in_interval + , no_parse => TRUE + , instance => v_InstanceNumber); + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_5 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 5 minutes and | + -- | starts at the next 5 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_5 + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.snap_schedule_5'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Submit job to run every 5 minutes + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job every 5 minutes'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + statspack_custom.snap_schedule( + TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/5)+1)*5)/(24*60) + , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/5)+1)*5)/(24*60)'); + + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_15 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 15 minutes and | + -- | starts at the next 15 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_15 + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.snap_schedule_15'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Submit job to run every 15 minutes + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job every 15 minutes'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + statspack_custom.snap_schedule( + TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/15)+1)*15)/(24*60) + , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/15)+1)*15)/(24*60)'); + + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - snap_schedule_30 | + -- | | + -- | Utility procedure used to schedule a | + -- | "snap()" procedure call every 30 minutes and | + -- | starts at the next 30 minute interval. | + -- +-----------------------------------------------------------+ + PROCEDURE snap_schedule_30 + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.snap_schedule_30'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Submit job to run every 30 minutes + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job every 30 minutes'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + statspack_custom.snap_schedule( + TRUNC(sysdate,'HH24')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,'MI'))/30)+1)*30)/(24*60) + , 'TRUNC(sysdate,''HH24'')+((FLOOR(TO_NUMBER(TO_CHAR(sysdate,''MI''))/30)+1)*30)/(24*60)'); + + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge | + -- | | + -- | Used to purge old records from the Statspack | + -- | repository. | + -- +-----------------------------------------------------------+ + PROCEDURE purge(in_days_older_than IN INTEGER) + IS + + e_NoRecordsFound EXCEPTION; + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + v_DbId sys.v_$database.dbid%TYPE; + v_DbName sys.v_$database.name%TYPE; + v_InstanceNumber sys.v_$instance.instance_number%TYPE; + v_InstanceName sys.v_$instance.instance_name%TYPE; + + v_LowSnapId NUMBER; + v_HiSnapId NUMBER; + + v_BeginTime DATE; + v_EndTime DATE; + + v_tempRowCount NUMBER; + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.purge'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + -- ------------------------------------------------------------------------- + -- Get database and instance currently connected to. This will be used later + -- in the report along with other metadata to lookup snapshots. + -- ------------------------------------------------------------------------- + v_ActionContext := 'Gather instance / DB information'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + SELECT + d.dbid + , d.name + , i.instance_number + , i.instance_name + INTO + v_DbId + , v_DbName + , v_InstanceNumber + , v_InstanceName + FROM + v$database d + , v$instance i; + + DBMS_OUTPUT.PUT_LINE('v_DbId : ' || v_DbId); + DBMS_OUTPUT.PUT_LINE('v_DbName : ' || v_DbName); + DBMS_OUTPUT.PUT_LINE('v_InstanceNumber : ' || v_InstanceNumber); + DBMS_OUTPUT.PUT_LINE('v_InstanceName : ' || v_InstanceName); + + + -- ------------------------------------------------------------------------- + -- Obtain the MIN and MAX Snapshot IDs to be removed from the range of IDs + -- order than "days_to_purge days". + -- ------------------------------------------------------------------------- + v_ActionContext := 'Gather MIN/MAX Snapshot IDs'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + SELECT + NVL(MIN(snap_id),0) + , NVL(MAX(snap_id),0) + INTO + v_LowSnapId + , v_HiSnapId + FROM stats$snapshot + WHERE snap_time < (sysdate - in_days_older_than); + + DBMS_OUTPUT.PUT_LINE('v_LowSnapId : ' || v_LowSnapId); + DBMS_OUTPUT.PUT_LINE('v_HiSnapId : ' || v_HiSnapId); + + + -- ------------------------------------------------------------------------- + -- Check if any Statspack Records exist for the given number of days old. + -- ------------------------------------------------------------------------- + v_ActionContext := 'Checking HiSnapId > 0'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + IF (v_HiSnapId = 0) THEN + v_ActionContext := 'No snapshots older than ' || in_days_older_than || ' days in STATS$SNAPSHOT'; + DBMS_OUTPUT.PUT_LINE('No snapshots found older than ' || in_days_older_than || ' days in STATS$SNAPSHOT'); + RAISE e_NoRecordsFound; + END IF; + + + -- ------------------------------------------------------------------------- + -- Get begin and end snapshot times - these are used to delete undostat. + -- ------------------------------------------------------------------------- + v_ActionContext := 'Get Begin / End SS Times'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + SELECT b.snap_time + INTO v_BeginTime + FROM stats$snapshot b + WHERE b.snap_id = v_LowSnapId + AND b.dbid = v_DbId + AND b.instance_number = v_InstanceNumber; + + SELECT e.snap_time + INTO v_EndTime + FROM stats$snapshot e + WHERE e.snap_id = v_HiSnapId + AND e.dbid = v_DbId + AND e.instance_number = v_InstanceNumber; + + DBMS_OUTPUT.PUT_LINE('v_BeginTime : ' || TO_CHAR(v_BeginTime, 'MM/DD/YYYY HH24:MI:SS')); + DBMS_OUTPUT.PUT_LINE('v_EndTime : ' || TO_CHAR(v_EndTime, 'MM/DD/YYYY HH24:MI:SS')); + + + -- ------------------------------------------------------------------------- + -- Deleting obsolete Statspack records. + -- ------------------------------------------------------------------------- + v_ActionContext := 'Deleting obsolete SP records'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + DELETE FROM stats$snapshot + WHERE instance_number = v_InstanceNumber + AND dbid = v_DbId + AND snap_id between v_LowSnapId and v_HiSnapId; + + v_tempRowCount := SQL%ROWCOUNT; + DBMS_OUTPUT.PUT_LINE('stats$snapshot DELETE %ROWCOUNT : ' || v_tempRowCount); + + -- ------------------------------------------------------------------------- + -- Delete any dangling SQLtext. The following statement deletes any dangling + -- SQL statements which are no longer referred to by ANY snapshots. By + -- default, Oracle comments this statement out as it can be very resource + -- intensive. + -- ------------------------------------------------------------------------- + v_ActionContext := 'Delete dangling SQLtext'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + EXECUTE IMMEDIATE 'ALTER SESSION SET hash_area_size=1048576'; + + DELETE --+ index_ffs(st) + FROM stats$sqltext st + WHERE + ( hash_value + , text_subset + ) + NOT IN + ( select --+ hash_aj full(ss) no_expand + hash_value + , text_subset + from stats$sql_summary ss + where ( ( + snap_id < v_LowSnapId + or + snap_id > v_HiSnapId + ) + and dbid = v_DbId + and instance_number = v_InstanceNumber + ) + or + ( + dbid != v_DbId + or + instance_number != v_InstanceNumber + ) + ); + + v_tempRowCount := SQL%ROWCOUNT; + DBMS_OUTPUT.PUT_LINE('stats$sqltext DELETE %ROWCOUNT : ' || v_tempRowCount); + + + -- ------------------------------------------------------------------------- + -- (OPTIONAL) - STATS$SEG_STAT_OBJ delete statement + -- ------------------------------------------------------------------------- + v_ActionContext := 'Delete STATS$SEG_STAT_OBJ'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + DELETE --+ index_ffs(sso) + FROM stats$seg_stat_obj sso + WHERE ( dbid + , dataobj# + , obj# + ) + NOT IN + ( + select --+ hash_aj full(ss) no_expand + dbid + , dataobj# + , obj# + from + stats$seg_stat ss + where ( ( snap_id < v_LowSnapId + or + snap_id > v_HiSnapId + ) + and dbid = v_DbId + and instance_number = v_InstanceNumber + ) + or + ( dbid != v_DbId + or + instance_number != v_InstanceNumber + ) + ); + + v_tempRowCount := SQL%ROWCOUNT; + DBMS_OUTPUT.PUT_LINE('stats$seg_stat_obj DELETE %ROWCOUNT : ' || v_tempRowCount); + + + -- ------------------------------------------------------------------------- + -- Delete from stats$undostat - Undostat rows that cover the snap times + -- ------------------------------------------------------------------------- + v_ActionContext := 'Delete from stats$undostat'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + DELETE from stats$undostat + WHERE dbid = v_DbId + AND instance_number = v_InstanceNumber + AND end_time < v_EndTime; + + v_tempRowCount := SQL%ROWCOUNT; + DBMS_OUTPUT.PUT_LINE('stats$undostat DELETE %ROWCOUNT : ' || v_tempRowCount); + + + -- ------------------------------------------------------------------------- + -- Delete from stats$database_instance. + -- Dangling database instance rows for that startup time + -- ------------------------------------------------------------------------- + v_ActionContext := 'Delete from stats$database_instance'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + DELETE from stats$database_instance di + WHERE instance_number = v_InstanceNumber + AND dbid = v_DbId + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = di.dbid + and s.instance_number = di.instance_number + and s.startup_time = di.startup_time); + + v_tempRowCount := SQL%ROWCOUNT; + DBMS_OUTPUT.PUT_LINE('stats$database_instance DELETE %ROWCOUNT : ' || v_tempRowCount); + + + -- ------------------------------------------------------------------------- + -- Delete from stats$statspack_parameter + -- Dangling statspack parameter rows for the database / instance + -- ------------------------------------------------------------------------- + v_ActionContext := 'Delete from stats$statspack_parameter'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + DELETE from stats$statspack_parameter sp + WHERE instance_number = v_InstanceNumber + AND dbid = v_DbId + AND NOT EXISTS (select 1 + from stats$snapshot s + where s.dbid = sp.dbid + and s.instance_number = sp.instance_number); + + v_tempRowCount := SQL%ROWCOUNT; + DBMS_OUTPUT.PUT_LINE('stats$statspack_parameter DELETE %ROWCOUNT : ' || v_tempRowCount); + + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + + EXCEPTION + + WHEN e_NoRecordsFound THEN + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'WARNING: ' || v_ActionContext); + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge_schedule | + -- | | + -- | Utility procedure used to schedule the | + -- | "purge()" procedure - removing a given number | + -- | of obsolete records by the provided number of | + -- | days parameter. | + -- +-----------------------------------------------------------+ + PROCEDURE purge_schedule( in_days_older_than IN INTEGER + , in_start_date IN DATE + , in_interval IN VARCHAR2) + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + v_JobNumber NUMBER; + v_InstanceNumber NUMBER; + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.purge_schedule'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + + -- ------------------------------------------------------------------------- + -- Get instance number + -- ------------------------------------------------------------------------- + v_ActionContext := 'Get instance number'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + SELECT instance_number INTO v_InstanceNumber FROM v$instance; + + + -- ------------------------------------------------------------------------- + -- Submit job + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit job'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + DBMS_JOB.SUBMIT( job => v_JobNumber + , what => 'statspack_custom.purge(' || in_days_older_than || ');' + , next_date => in_start_date + , interval => in_interval + , no_parse => TRUE + , instance => v_InstanceNumber); + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + + + -- +-----------------------------------------------------------+ + -- | PROCEDURE - purge_schedule_midnight | + -- | | + -- | Utility procedure used to schedule the | + -- | "purge()" procedure to run every day at | + -- | midnight - removing a given number of | + -- | obsolete records by the provided number of | + -- | days parameter. | + -- +-----------------------------------------------------------+ + PROCEDURE purge_schedule_midnight(in_days_older_than IN INTEGER) + IS + + v_ModuleName VARCHAR2(48); + v_ActionContext VARCHAR2(100); + v_ErrorMessage VARCHAR2(1000); + + BEGIN + + DBMS_OUTPUT.ENABLE(1000000); + + -- ------------------------------------------------------------------------- + -- Register and initialize program module plus set the Client Info + -- ------------------------------------------------------------------------- + v_ModuleName := 'statspack_custom.purge_schedule_midnight'; + v_ActionContext := 'Begin'; + + DBMS_APPLICATION_INFO.SET_MODULE( module_name => v_ModuleName + , action_name => v_ActionContext); + + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info => 'PERFSTAT'); + + -- ------------------------------------------------------------------------- + -- Submit midnight job + -- ------------------------------------------------------------------------- + v_ActionContext := 'Submit midnight job'; + DBMS_APPLICATION_INFO.SET_ACTION(action_name => v_ActionContext); + + statspack_custom.purge_schedule(in_days_older_than, trunc(sysdate+1), 'SYSDATE+1'); + + -- ------------------------------------------------------------------------- + -- Successful end to module. + -- ------------------------------------------------------------------------- + DBMS_APPLICATION_INFO.SET_MODULE( module_name => null + , action_name => null); + + COMMIT; + + EXCEPTION + + WHEN others THEN + v_ErrorMessage := sqlerrm; + DBMS_APPLICATION_INFO.SET_MODULE(v_ModuleName, 'ERROR: ' || v_ActionContext); + RAISE_APPLICATION_ERROR(-20000, v_ActionContext || chr(10) || v_ErrorMessage); + + END; + + +END statspack_custom; +/ + +set termout on +show errors + +prompt + +spool off diff --git a/idev/sp_trunc.sql b/idev/sp_trunc.sql new file mode 100644 index 0000000..a63d0a5 --- /dev/null +++ b/idev/sp_trunc.sql @@ -0,0 +1,17 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sp_trunc.sql | +-- | CLASS : Statspack | +-- | PURPOSE : Wrapper script to truncate all Statspack tables. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +@?/rdbms/admin/sptrunc.sql + diff --git a/idev/temp_sort_segment.sql b/idev/temp_sort_segment.sql new file mode 100644 index 0000000..8a299ac --- /dev/null +++ b/idev/temp_sort_segment.sql @@ -0,0 +1,103 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : temp_sort_segment.sql | +-- | CLASS : Temporary_Tablespace | +-- | PURPOSE : List all temporary tablespaces and details about the actual | +-- | sort segment. The statistics that come from the v$sort_segment | +-- | view depicts the true space within the temporary segment at | +-- | this current time. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Temporary Sort Segments | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN tablespace_name FORMAT a15 HEADING 'Tablespace|Name' JUST right +COLUMN temp_segment_name FORMAT a8 HEADING 'Segment|Name' JUST right +COLUMN current_users FORMAT 9,999 HEADING 'Current|Users' JUST right +COLUMN total_temp_segment_size FORMAT 999,999,999,999 HEADING 'Total Temp|Segment Size' JUST right +COLUMN currently_used_bytes FORMAT 999,999,999,999 HEADING 'Currently|Used Bytes' JUST right +COLUMN pct_used FORMAT 999 HEADING 'Pct.|Used' JUST right +COLUMN extent_hits FORMAT 999,999 HEADING 'Extent|Hits' JUST right +COLUMN max_size FORMAT 999,999,999,999 HEADING 'Max|Size' JUST right +COLUMN max_used_size FORMAT 999,999,999,999 HEADING 'Max Used|Size' JUST right +COLUMN max_sort_size FORMAT 999,999,999,999 HEADING 'Max Sort|Size' JUST right +COLUMN free_requests FORMAT 999 HEADING 'Free|Requests' JUST right + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Segment Name : The segment name is a concatenation of the | +PROMPT | SEGMENT_FILE (File number of the first | +PROMPT | extent) and the SEGMENT_BLOCK (Block number | +PROMPT | of the first extent) | +PROMPT | Current Users : Number of active users of the segment | +PROMPT | Total Temp Segment Size : Total size of the temporary segment in bytes | +PROMPT | Currently Used Bytes : Bytes allocated to active sorts | +PROMPT | Extent Hits : Number of times an unused extent was found | +PROMPT | in the pool | +PROMPT | Max Size : Maximum number of bytes ever used | +PROMPT | Max Used Size : Maximum number of bytes used by all sorts | +PROMPT | Max Sort Size : Maximum number of bytes used by an | +PROMPT | individual sort | +PROMPT | Free Requests : Number of requests to de-allocate | +PROMPT +------------------------------------------------------------------------+ + +BREAK ON instance_name SKIP PAGE + +SELECT + i.instance_name instance_name + , t.tablespace_name tablespace_name + , 'SYS.' || + t.segment_file || + '.' || + t.segment_block temp_segment_name + , t.current_users current_users + , (t.total_blocks*b.value) total_temp_segment_size + , (t.used_blocks*b.value) currently_used_bytes + , TRUNC(ROUND((t.used_blocks/t.total_blocks)*100)) pct_used + , t.extent_hits extent_hits + , (t.max_blocks*b.value) max_size + , (t.max_used_blocks*b.value) max_used_size + , (t.max_sort_blocks *b.value) max_sort_size + , t.free_requests free_requests +FROM + gv$instance i + , gv$sort_segment t + , (select value from v$parameter + where name = 'db_block_size') b +WHERE + t.inst_id = i.inst_id +ORDER BY + i.instance_name + , t.tablespace_name; diff --git a/idev/temp_sort_users.sql b/idev/temp_sort_users.sql new file mode 100644 index 0000000..9279643 --- /dev/null +++ b/idev/temp_sort_users.sql @@ -0,0 +1,98 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : temp_sort_users.sql | +-- | CLASS : Temporary_Tablespace | +-- | PURPOSE : List all temporary tablespaces and the users performing sorts. | +-- | The statistics will come from the v$sort_usage view which shows | +-- | currently active sorts for the instance. Joining "v$sort_usage" | +-- | to "v$session" will provide the user who is performing a sort | +-- | within the sort segment. | +-- | The CONTENTS column shows whether the segment is created in a | +-- | temporary or permanent tablespace, however, unless you are | +-- | using Oracle8, this should always be temporary. | +-- | This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Temporary Sort Users | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN tablespace_name FORMAT a15 HEADING 'Tablespace Name' +COLUMN sid FORMAT 99999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_terminal FORMAT a10 HEADING 'Terminal' TRUNC +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a20 HEADING 'Session Program' TRUNC +COLUMN contents FORMAT a9 HEADING 'Contents' +COLUMN extents FORMAT 999,999,999 HEADING 'Extents' +COLUMN blocks FORMAT 999,999,999 HEADING 'Blocks' +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' +COLUMN segtype FORMAT a12 HEADING 'Segment Type' + +BREAK ON instance_name SKIP PAGE + +SELECT + i.instance_name instance_name + , t.tablespace tablespace_name + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.program session_program + , t.contents contents + , t.segtype segtype + , (t.blocks * c.value) bytes +FROM + gv$instance i + , gv$session s + , gv$process p + , gv$sort_usage t + , (select value from v$parameter + where name = 'db_block_size') c +WHERE + s.inst_id = p.inst_id + AND p.inst_id = i.inst_id + AND t.inst_id = i.inst_id + AND s.inst_id = i.inst_id + AND s.saddr = t.session_addr + AND s.paddr = p.addr +ORDER BY + i.instance_name + , s.sid; diff --git a/idev/temp_status.sql b/idev/temp_status.sql new file mode 100644 index 0000000..29505f4 --- /dev/null +++ b/idev/temp_status.sql @@ -0,0 +1,78 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : temp_status.sql | +-- | CLASS : Temporary_Tablespace | +-- | PURPOSE : List all temporary tablespaces along with a brief status. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Temporary Status | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN tablespace_name FORMAT a20 HEAD 'Tablespace Name' +COLUMN tablespace_status FORMAT a9 HEAD 'Status' +COLUMN tablespace_size FORMAT 9,999,999,999,999 HEAD 'Size' +COLUMN used FORMAT 9,999,999,999,999 HEAD 'Used' +COLUMN used_pct FORMAT 999 HEAD 'Pct. Used' +COLUMN current_users FORMAT 999,999 HEAD 'Current Users' + +BREAK ON report + +COMPUTE SUM OF tablespace_size ON report +COMPUTE SUM OF used ON report +COMPUTE SUM OF current_users ON report + +SELECT + d.tablespace_name tablespace_name + , d.status tablespace_status + , NVL(a.bytes, 0) tablespace_size + , NVL(t.bytes, 0) used + , TRUNC(NVL(t.bytes / a.bytes * 100, 0)) used_pct + , NVL(s.current_users, 0) current_users +FROM + sys.dba_tablespaces d + , ( select tablespace_name, sum(bytes) bytes + from dba_temp_files + group by tablespace_name + ) a + , ( select tablespace_name, sum(bytes_cached) bytes + from v$temp_extent_pool + group by tablespace_name + ) t + , v$sort_segment s +WHERE + d.tablespace_name = a.tablespace_name(+) + AND d.tablespace_name = t.tablespace_name(+) + AND d.tablespace_name = s.tablespace_name(+) + AND d.extent_management like 'LOCAL' + AND d.contents like 'TEMPORARY'; diff --git a/idev/undo_contention.sql b/idev/undo_contention.sql new file mode 100644 index 0000000..a13d62a --- /dev/null +++ b/idev/undo_contention.sql @@ -0,0 +1,71 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : undo_contention.sql | +-- | CLASS : Undo Segments | +-- | PURPOSE : Undo contention report. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Undo Contention | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a10 HEAD 'Instance' +COLUMN class FORMAT a18 HEADING 'Class' +COLUMN ratio HEADING 'Wait Ratio' + +BREAK ON instance_name SKIP 2 + +SELECT + i.instance_name instance_name + , w.class class + , ROUND(100*(w.count/SUM(s.value)),8) ratio +FROM + gv$instance i + , gv$waitstat w + , gv$sysstat s +WHERE + i.inst_id = w.inst_id + AND i.inst_id = s.inst_id + AND w.class IN ( 'system undo header' + , 'system undo block' + , 'undo header' + , 'undo block' + ) + AND s.name IN ('db block gets', 'consistent gets') +GROUP BY + i.instance_name + , w.class + , w.count +ORDER BY + i.instance_name + , w.class; diff --git a/idev/undo_segments.sql b/idev/undo_segments.sql new file mode 100644 index 0000000..31b04d3 --- /dev/null +++ b/idev/undo_segments.sql @@ -0,0 +1,81 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : undo_segments.sql | +-- | CLASS : Undo Segments | +-- | PURPOSE : Reports undo statistic information including name, shrinks, | +-- | wraps, size and optimal size. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Undo Segments | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a9 HEADING 'Instance' +COLUMN undo_name FORMAT a30 HEADING 'Undo Name' +COLUMN tablespace FORMAT a11 HEADING 'Tablspace' +COLUMN in_extents FORMAT a23 HEADING 'Init / Next Extents' +COLUMN m_extents FORMAT a23 HEADING 'Min / Max Extents' +COLUMN status FORMAT a8 HEADING 'Status' +COLUMN wraps FORMAT 99,999 HEADING 'Wraps' +COLUMN shrinks FORMAT 99,999 HEADING 'Shrinks' +COLUMN opt FORMAT 999,999,999,999 HEADING 'Opt. Size' +COLUMN bytes FORMAT 999,999,999,999 HEADING 'Bytes' +COLUMN extents FORMAT 999 HEADING 'Extents' + +BREAK ON instance_name SKIP 2 + +COMPUTE SUM LABEL 'Total: ' OF bytes ON instance_name + +SELECT + i.instance_name instance_name + , a.owner || '.' || a.segment_name undo_name + , a.tablespace_name tablespace + , TRIM(TO_CHAR(a.initial_extent, '999,999,999,999')) || ' / ' || + TRIM(TO_CHAR(a.next_extent, '999,999,999,999')) in_extents + , TRIM(TO_CHAR(a.min_extents, '999,999,999,999')) || ' / ' || + TRIM(TO_CHAR(a.max_extents, '999,999,999,999')) m_extents + , a.status status + , b.bytes bytes + , b.extents extents + , d.shrinks shrinks + , d.wraps wraps + , d.optsize opt +FROM + gv$instance i + INNER JOIN gv$rollstat d ON (i.inst_id = d.inst_id) + INNER JOIN sys.undo$ c ON (d.usn = c.us#) + INNER JOIN dba_rollback_segs a ON (a.segment_name = c.name) + INNER JOIN dba_segments b ON (a.segment_name = b.segment_name) +ORDER BY + i.instance_name + , a.segment_name; diff --git a/idev/undo_users.sql b/idev/undo_users.sql new file mode 100644 index 0000000..8bc0d6e --- /dev/null +++ b/idev/undo_users.sql @@ -0,0 +1,73 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : undo_users.sql | +-- | CLASS : Undo Segments | +-- | PURPOSE : Query all active undo segments and the sessions that are using | +-- | them. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Undo Users | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN undo_name FORMAT a25 HEADING 'Undo Name' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC + +SELECT + i.instance_name instance_name + , r.name undo_name + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , s.machine session_machine + , s.program session_program +FROM + gv$session s + INNER JOIN gv$instance i ON (s.inst_id = i.inst_id) + INNER JOIN gv$lock l ON (s.sid = l.sid AND i.inst_id = l.inst_id) + LEFT OUTER JOIN sys.undo$ r ON (TRUNC(l.id1/65536) = r.us#) +WHERE + l.type = 'TX' + AND l.lmode = 6 +ORDER BY + i.instance_name + , s.sid; diff --git a/idev/wm_create_workspace.sql b/idev/wm_create_workspace.sql new file mode 100644 index 0000000..c2b406d --- /dev/null +++ b/idev/wm_create_workspace.sql @@ -0,0 +1,97 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_create_workspace.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : This script will list all workspaces and which workspace is the | +-- | current workspace. You are then prompted for the name of a new | +-- | workspace to create. The script then creates the new workspace | +-- | as a child of the current (parent) workspace. Keep in mind that | +-- | this script (nor the PL/SQL library) performs a "go to" to the | +-- | new workspace. To go to the new workspace is a manual process. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +SET TERMOUT OFF; +COLUMN current_schema NEW_VALUE current_schema NOPRINT; +SELECT sys_context('USERENV', 'CURRENT_SCHEMA') current_schema +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Create New Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN current_workspace FORMAT a10 HEADING "Current" +COLUMN owner FORMAT a20 HEADING "Workspace Owner" +COLUMN workspace FORMAT a30 HEADING "Workspace Name" +COLUMN createtime FORMAT a20 HEADING "Create Time" + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | All Workspaces | +PROMPT +------------------------------------------------------------------------+ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime +FROM + dba_workspaces +ORDER BY + owner + , workspace; + +PROMPT +ACCEPT wm_new_workspace_name CHAR PROMPT 'Enter name for new workspace: ¤t_schema..' +PROMPT + +BEGIN + dbms_wm.createworkspace('&wm_new_workspace_name'); +END; +/ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime +FROM + dba_workspaces +ORDER BY + owner + , workspace; diff --git a/idev/wm_disable_versioning.sql b/idev/wm_disable_versioning.sql new file mode 100644 index 0000000..8b41a3a --- /dev/null +++ b/idev/wm_disable_versioning.sql @@ -0,0 +1,101 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_disable_versioning.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : Prompt the user for an owner and table name. This table will be | +-- | disabled of any versioning used with Workspace Manager. This | +-- | script deletes all support structures that were created to | +-- | enable the table to support versioned rows. This procedure is | +-- | used to reverse the effect of the EnableVersioning Procedure. | +-- | It deletes the Workspace Manager infrastructure (support | +-- | structures) for versioning of rows, but does not affect any | +-- | user data in the LIVE workspace. The workspace hierarchy and | +-- | any savepoints still exist, but all rows are the same as in the | +-- | LIVE workspace. (If there are multiple versions in the LIVE | +-- | workspace of a row in the table for which versioning is | +-- | disabled, only the most recent version of the row is kept.) | +-- | Only the owner of a table or a user with the WM_ADMIN_ROLE role | +-- | can disable versioning on the table. Tables that are | +-- | version-enabled and users that own version-enabled tables | +-- | cannot be deleted. You must first disable versioning on the | +-- | relevant table or tables. An exception is raised if the table | +-- | is not version-enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Disable Table Versioning for Current Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN getworkspace FORMAT a50 HEADING "Current Workspace" +COLUMN ver_tables FORMAT a50 HEADING "All Current Versioned Tables" + +SELECT dbms_wm.getworkspace FROM dual; + +SELECT + owner || '.' || table_name AS ver_tables +FROM + wmsys.wm$versioned_tables +UNION ALL +SELECT + 'No versioned tables found' +FROM + dual +WHERE NOT EXISTS ( SELECT owner, table_name + FROM wmsys.wm$versioned_tables) +ORDER BY 1; + +PROMPT +ACCEPT wm_ev_owner CHAR PROMPT 'Enter table owner : ' +ACCEPT wm_ev_table CHAR PROMPT 'Enter table name : ' +PROMPT + +DEFINE wm_ev_table_name = &wm_ev_owner..&wm_ev_table + +BEGIN + dbms_wm.disableversioning('&wm_ev_table_name'); +END; +/ + +SELECT + owner || '.' || table_name AS ver_tables +FROM + wmsys.wm$versioned_tables +UNION ALL +SELECT + 'No versioned tables found' +FROM + dual +WHERE NOT EXISTS ( SELECT owner, table_name + FROM wmsys.wm$versioned_tables) +ORDER BY 1; diff --git a/idev/wm_enable_versioning.sql b/idev/wm_enable_versioning.sql new file mode 100644 index 0000000..f0827d2 --- /dev/null +++ b/idev/wm_enable_versioning.sql @@ -0,0 +1,92 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_enable_versioning.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : Prompt the user for an owner and table name. This table will be | +-- | "version enabled" for use with Workspace Manager. This is often | +-- | the first step in using Oracle's Workspace Manager feature. | +-- | This script creates the necessary structures to enable the | +-- | specified table to support multiple versions of rows. The | +-- | length of a table name must not exceed 25 characters. The name | +-- | is not case sensitive. The table that is being version-enabled | +-- | must have a primary key defined. Only the owner of a table can | +-- | enable versioning on the table. Tables that are version-enabled | +-- | and users that own version-enabled tables cannot be deleted. | +-- | You must first disable versioning on the relevant table or | +-- | tables. Tables owned by SYS cannot be version-enabled. An | +-- | exception is raised if the table is already version-enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Enable Table Versioning for Current Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +COLUMN getworkspace FORMAT a50 HEADING "Current Workspace" +COLUMN ver_tables FORMAT a50 HEADING "All Current Versioned Tables" + +SELECT dbms_wm.getworkspace FROM dual; + +SELECT + owner || '.' || table_name AS ver_tables +FROM + wmsys.wm$versioned_tables +UNION ALL +SELECT + 'No versioned tables found' +FROM + dual +WHERE NOT EXISTS ( SELECT owner, table_name + FROM wmsys.wm$versioned_tables) +ORDER BY 1; + +PROMPT +ACCEPT wm_ev_owner CHAR PROMPT 'Enter table owner : ' +ACCEPT wm_ev_table CHAR PROMPT 'Enter table name : ' +PROMPT + +DEFINE wm_ev_table_name = &wm_ev_owner..&wm_ev_table + +BEGIN + dbms_wm.enableversioning('&wm_ev_table_name'); +END; +/ + +SELECT + owner || '.' || table_name AS ver_tables +FROM + wmsys.wm$versioned_tables +UNION ALL +SELECT + 'No versioned tables found' +FROM + dual +WHERE NOT EXISTS ( SELECT owner, table_name + FROM wmsys.wm$versioned_tables) +ORDER BY 1; diff --git a/idev/wm_freeze_workspace.sql b/idev/wm_freeze_workspace.sql new file mode 100644 index 0000000..e3ee74d --- /dev/null +++ b/idev/wm_freeze_workspace.sql @@ -0,0 +1,97 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_freeze_workspace.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : This script will list all workspaces and which workspace is the | +-- | current workspace. You are then prompted for the name of the | +-- | workspace to freeze. The script then freezes the workspace in | +-- | READ ONLY mode. Freezing a workspace disables changes in a | +-- | workspace and prevents subsequent sessions from entering the | +-- | workspace. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Freeze Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN current_workspace FORMAT a10 HEADING "Current" +COLUMN owner FORMAT a20 HEADING "Workspace Owner" +COLUMN workspace FORMAT a30 HEADING "Workspace Name" +COLUMN createtime FORMAT a20 HEADING "Create Time" +COLUMN freeze_status FORMAT a8 HEADING "Freeze|Status" +COLUMN freeze_mode FORMAT a20 HEADING "Freeze|Mode" + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | All Workspaces | +PROMPT +------------------------------------------------------------------------+ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime + , freeze_status + , freeze_mode +FROM + dba_workspaces +ORDER BY + owner + , workspace; + +PROMPT +ACCEPT wm_freeze_workspace_name CHAR PROMPT 'Enter name of workspace to freeze: ' +PROMPT + +BEGIN + dbms_wm.freezeworkspace('&wm_freeze_workspace_name', 'READ_ONLY'); +END; +/ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime + , freeze_status + , freeze_mode +FROM + dba_workspaces +ORDER BY + owner + , workspace; \ No newline at end of file diff --git a/idev/wm_get_workspace.sql b/idev/wm_get_workspace.sql new file mode 100644 index 0000000..6827b62 --- /dev/null +++ b/idev/wm_get_workspace.sql @@ -0,0 +1,46 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_get_workspace.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : Identify the current workspace. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Get Current Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN getworkspace FORMAT a50 HEADING "Current Workspace" + +SELECT dbms_wm.getworkspace +FROM dual; diff --git a/idev/wm_goto_workspace.sql b/idev/wm_goto_workspace.sql new file mode 100644 index 0000000..f84a4fc --- /dev/null +++ b/idev/wm_goto_workspace.sql @@ -0,0 +1,86 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_goto_workspace.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : This script will list all workspaces and which workspace is the | +-- | current workspace. You are then prompted for the name of a | +-- | workspace to go to. This script then moves the current session | +-- | to the specified workspace. After a user goes to a workspace, | +-- | modifications to data can be made there. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Go To Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +COLUMN current_workspace FORMAT a10 HEADING "Current" +COLUMN owner FORMAT a20 HEADING "Workspace Owner" +COLUMN workspace FORMAT a30 HEADING "Workspace Name" +COLUMN createtime FORMAT a20 HEADING "Create Time" + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | All Workspaces | +PROMPT +------------------------------------------------------------------------+ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime +FROM + dba_workspaces +ORDER BY + owner + , workspace; + +PROMPT +ACCEPT wm_goto_workspace_name CHAR PROMPT 'Enter name of workspace to go to: ' +PROMPT + +BEGIN + dbms_wm.gotoworkspace('&wm_goto_workspace_name'); +END; +/ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime +FROM + dba_workspaces +ORDER BY + owner + , workspace; diff --git a/idev/wm_merge_workspace.sql b/idev/wm_merge_workspace.sql new file mode 100644 index 0000000..5c31010 --- /dev/null +++ b/idev/wm_merge_workspace.sql @@ -0,0 +1,83 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_merge_workspace.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : This script will list all workspaces and which workspace is the | +-- | current workspace. You are then prompted for the name of a | +-- | workspace to merge. The script then merges the specified | +-- | workspace (the parent workspace) from its child workspace. | +-- | While this procedure is executing, the current workspace is | +-- | frozen in NO_ACCESS mode and the parent workspace is frozen in | +-- | READ_ONLY mode. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Merge Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN current_workspace FORMAT a10 HEADING "Current" +COLUMN owner FORMAT a20 HEADING "Workspace Owner" +COLUMN workspace FORMAT a30 HEADING "Workspace Name" +COLUMN createtime FORMAT a20 HEADING "Create Time" +COLUMN freeze_status FORMAT a8 HEADING "Freeze|Status" +COLUMN freeze_mode FORMAT a20 HEADING "Freeze|Mode" + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | All Workspaces | +PROMPT +------------------------------------------------------------------------+ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime + , freeze_status + , freeze_mode +FROM + dba_workspaces +ORDER BY + owner + , workspace; + +PROMPT +ACCEPT wm_merge_workspace_name CHAR PROMPT 'Enter name of workspace to merge: ' +PROMPT + +BEGIN + dbms_wm.mergeworkspace('&wm_merge_workspace_name'); +END; +/ diff --git a/idev/wm_refresh_workspace.sql b/idev/wm_refresh_workspace.sql new file mode 100644 index 0000000..b6659dd --- /dev/null +++ b/idev/wm_refresh_workspace.sql @@ -0,0 +1,80 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_refresh_workspace.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : This script will list all workspaces and which workspace is the | +-- | current workspace. You are then prompted for the name of a | +-- | workspace to refresh. The script then refreshes the specified | +-- | workspace (the child workspace) from its parent workspace. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Refresh Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN current_workspace FORMAT a10 HEADING "Current" +COLUMN owner FORMAT a20 HEADING "Workspace Owner" +COLUMN workspace FORMAT a30 HEADING "Workspace Name" +COLUMN createtime FORMAT a20 HEADING "Create Time" +COLUMN freeze_status FORMAT a8 HEADING "Freeze|Status" +COLUMN freeze_mode FORMAT a20 HEADING "Freeze|Mode" + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | All Workspaces | +PROMPT +------------------------------------------------------------------------+ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime + , freeze_status + , freeze_mode +FROM + dba_workspaces +ORDER BY + owner + , workspace; + +PROMPT +ACCEPT wm_refresh_workspace_name CHAR PROMPT 'Enter name of workspace to refresh: ' +PROMPT + +BEGIN + dbms_wm.refreshworkspace('&wm_refresh_workspace_name'); +END; +/ diff --git a/idev/wm_remove_workspace.sql b/idev/wm_remove_workspace.sql new file mode 100644 index 0000000..5434a0d --- /dev/null +++ b/idev/wm_remove_workspace.sql @@ -0,0 +1,94 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_remove_workspace.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : This script will list all workspaces and which workspace is the | +-- | current workspace. You are then prompted for the name of a | +-- | workspace to be removed. This script rolls back the data in the | +-- | specified workspace and removes all support structures created | +-- | for the workspace. The workspace ceases to exist. | +-- | The RemoveWorkspace operation can only be performed on leaf | +-- | workspaces (the bottom-most workspaces in a branch in the | +-- | hierarchy). There must be no other users in the workspace being | +-- | removed. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Remove Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN current_workspace FORMAT a10 HEADING "Current" +COLUMN owner FORMAT a20 HEADING "Workspace Owner" +COLUMN workspace FORMAT a30 HEADING "Workspace Name" +COLUMN createtime FORMAT a20 HEADING "Create Time" + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | All Workspaces | +PROMPT +------------------------------------------------------------------------+ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime +FROM + dba_workspaces +ORDER BY + owner + , workspace; + +PROMPT +ACCEPT wm_remove_workspace_name CHAR PROMPT 'Enter name of workspace to remove: ' +PROMPT + +BEGIN + dbms_wm.removeworkspace('&wm_remove_workspace_name'); +END; +/ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime +FROM + dba_workspaces +ORDER BY + owner + , workspace; diff --git a/idev/wm_rollback_workspace.sql b/idev/wm_rollback_workspace.sql new file mode 100644 index 0000000..5c04d60 --- /dev/null +++ b/idev/wm_rollback_workspace.sql @@ -0,0 +1,102 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_rollback_workspace.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : This script will list all workspaces and which workspace is the | +-- | current workspace. You are then prompted for the name of a | +-- | workspace to rollback. This script discards all changes made in | +-- | the specified workspace to all tables. Any changes made in the | +-- | specified workspace since that workspace was created will be | +-- | rolled back and will be executed as an autonomous regular | +-- | transaction that will be committed when it finishes. | +-- | | +-- | Only leaf workspaces can be rolled back. That is, a workspace | +-- | cannot be rolled back if it has any descendant workspaces. | +-- | | +-- | Like the RemoveWorkspace procedure, Rollback Workspace deletes | +-- | the data in the workspace; however, unlike the RemoveWorkspace | +-- | procedure, RollbackWorkspace does not delete the Workspace | +-- | Manager workspace structure. | +-- | | +-- | While this procedure is executing, the specified workspace is | +-- | frozen in NO_ACCESS mode. | +-- | | +-- | An exception is raised if one or more of the following apply: | +-- | | +-- | [*] - workspace has any descendant workspaces. | +-- | [*] - workspace does not exist. | +-- | [*] - you do not have the privilege to roll back workspace | +-- | or any affected table. | +-- | | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Rollback Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN current_workspace FORMAT a10 HEADING "Current" +COLUMN owner FORMAT a20 HEADING "Workspace Owner" +COLUMN workspace FORMAT a30 HEADING "Workspace Name" +COLUMN createtime FORMAT a20 HEADING "Create Time" +COLUMN freeze_status FORMAT a8 HEADING "Freeze|Status" +COLUMN freeze_mode FORMAT a20 HEADING "Freeze|Mode" + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | All Workspaces | +PROMPT +------------------------------------------------------------------------+ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime + , freeze_status + , freeze_mode +FROM + dba_workspaces +ORDER BY + owner + , workspace; + +PROMPT +ACCEPT wm_rollback_workspace_name CHAR PROMPT 'Enter name of workspace to rollback: ' +PROMPT + +BEGIN + dbms_wm.rollbackworkspace('&wm_rollback_workspace_name', TRUE); +END; +/ diff --git a/idev/wm_unfreeze_workspace.sql b/idev/wm_unfreeze_workspace.sql new file mode 100644 index 0000000..20df8bf --- /dev/null +++ b/idev/wm_unfreeze_workspace.sql @@ -0,0 +1,94 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_unfreeze_workspace.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : This script will list all workspaces and which workspace is the | +-- | current workspace. You are then prompted for the name of the | +-- | workspace to unfreeze. The script then unfreezes the workspace. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Unfreeze Workspace | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN current_workspace FORMAT a10 HEADING "Current" +COLUMN owner FORMAT a20 HEADING "Workspace Owner" +COLUMN workspace FORMAT a30 HEADING "Workspace Name" +COLUMN createtime FORMAT a20 HEADING "Create Time" +COLUMN freeze_status FORMAT a8 HEADING "Freeze|Status" +COLUMN freeze_mode FORMAT a20 HEADING "Freeze|Mode" + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | All Workspaces | +PROMPT +------------------------------------------------------------------------+ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime + , freeze_status + , freeze_mode +FROM + dba_workspaces +ORDER BY + owner + , workspace; + +PROMPT +ACCEPT wm_unfreeze_workspace_name CHAR PROMPT 'Enter name of workspace to unfreeze: ' +PROMPT + +BEGIN + dbms_wm.unfreezeworkspace('&wm_unfreeze_workspace_name'); +END; +/ + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime + , freeze_status + , freeze_mode +FROM + dba_workspaces +ORDER BY + owner + , workspace; diff --git a/idev/wm_workspaces.sql b/idev/wm_workspaces.sql new file mode 100644 index 0000000..5f18ccd --- /dev/null +++ b/idev/wm_workspaces.sql @@ -0,0 +1,76 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : wm_workspaces.sql | +-- | CLASS : Workspace Manager | +-- | PURPOSE : Identify all workspaces and which workspace is the current | +-- | workspace. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(sys_context('USERENV', 'INSTANCE_NAME'), 17) current_instance +FROM dual; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : All Workspaces | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +COLUMN current_workspace FORMAT a10 HEADING "Current|Workspace" +COLUMN owner FORMAT a20 HEADING "Workspace|Owner" +COLUMN workspace FORMAT a30 HEADING "Workspace|Name" +COLUMN parent_workspace FORMAT a30 HEADING "Parent|Workspace" +COLUMN createtime FORMAT a20 HEADING "Create|Time" +COLUMN freeze_status FORMAT a8 HEADING "Freeze|Status" +COLUMN freeze_mode FORMAT a20 HEADING "Freeze|Mode" +COLUMN ver_tables FORMAT a50 HEADING "All Current Versioned Tables" + +SELECT + CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' + ELSE null + END AS current_workspace + , owner + , workspace + , parent_workspace + , TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime + , freeze_status + , freeze_mode +FROM + dba_workspaces +ORDER BY + owner + , workspace; + +SELECT + owner || '.' || table_name AS ver_tables +FROM + wmsys.wm$versioned_tables +UNION ALL +SELECT + 'No versioned tables found' +FROM + dual +WHERE NOT EXISTS ( SELECT owner, table_name + FROM wmsys.wm$versioned_tables) +ORDER BY 1; \ No newline at end of file diff --git a/mhouri/AwrBulkCollect.sql b/mhouri/AwrBulkCollect.sql new file mode 100644 index 0000000..feb0fab --- /dev/null +++ b/mhouri/AwrBulkCollect.sql @@ -0,0 +1,57 @@ +-- +----------------------------------------------------------------------------+ +-- | Author : Mohamed Houri | +-- |----------------------------------------------------------------------------| +-- | DATABASE : 12cR1 | +-- | Name : AwrBulkcollect.sql | +-- | PURPOSE : Dynamically create a SQL script to generate a list of AWR | +-- | reports between two snapshots dates. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- | Remarks : CHR(10) new line is mandatory. Unfortunately | +-- | SET termout off so that AWR content will not be displayed | +-- | For RAC configuration consider the instance number | +-- | Enter input date in this format :'mmddyyyy hh24:mi:ss' | +-- | | +-- ------------------------------------------------------------------------------ +set termout off +set head off +set define off +set linesize 120 +spool collectAWRs.sql + +SELECT + 'spool awr_XYZ_inst_1_' + || t.si + || '_' + || t.se + || '.text ' + || CHR(10) + -- || ' alter session set nls_language=''AMERICAN'';' + -- || CHR(13) + || 'SELECT * FROM TABLE(dbms_workload_repository.awr_report_text(' + || t.dbid + || ',' + || t.instance_number + || ',' + || t.si + || ',' + || t.se + || '));' + || CHR(10) + || ' spool off;' +FROM + ( + SELECT + dbid, + snap_id si, + snap_id + 1 se, + instance_number + FROM + dba_hist_snapshot + WHERE + begin_interval_time > TO_DATE('28102019 04:00:00', 'ddmmyyyy hh24:mi:ss') + AND end_interval_time <= TO_DATE('28102019 12:30:00', 'ddmmyyyy hh24:mi:ss') + AND instance_number = 1 + ) t; + +spool off; \ No newline at end of file diff --git a/mhouri/CurSelCubeHybridNonPop.sql b/mhouri/CurSelCubeHybridNonPop.sql new file mode 100644 index 0000000..759cf3b --- /dev/null +++ b/mhouri/CurSelCubeHybridNonPop.sql @@ -0,0 +1,86 @@ +--************************************************************************ +-- Name : CurSelCubeHybridNonPop +-- Date : October 2017 +-- Author : Mohamed Houri +-- Purpose: gives the selectivity low and high value range of a Hybrid +-- non-popular histogram bind variable having an endpoint number +-- when this bind variable is used in a bind aware cursor +--*********************************************************************** +var num_rows number +var new_density number + +begin + select num_rows into :num_rows from all_tables where table_name = upper ('&table_name'); +end; +/ + +begin + SELECT + trunc(((BktCnt-PopBktCnt)/BktCnt)/(NDV-PopValCnt),10) + into :new_density + FROM + (SELECT + COUNT(1) PopValCnt, + SUM(endpoint_repeat_count) PopBktCnt, + ndv, + BktCnt, + pop_bucketSize + FROM + (SELECT + (sample_size - num_nulls) BktCnt, + num_distinct ndv, + num_buckets, + density OldDensity, + (sample_size-num_nulls)/num_buckets pop_bucketSize + FROM user_tab_col_statistics + WHERE + table_name = upper ('&table_name') + AND column_name = upper ('&column_name') + ), + user_histograms + WHERE table_name = upper ('&table_name') + AND column_name = upper ('&column_name') + AND endpoint_repeat_count> pop_bucketSize + GROUP BY ndv, + BktCnt, + pop_bucketSize + ); +end; +/ + +col bind format a10 +select + bind + ,round((sel_of_bind - offset),6) low + ,round((sel_of_bind + offset),6) high +from + (select + bind + ,value_count/:num_rows sel_of_bind + ,0.1*(value_count/:num_rows) offset + from + (select + endpoint_actual_value bind + ,(:num_rows*greatest(:new_density,endpoint_repeat_count/sample_size)) value_count + from + (select + sample_size + ,endpoint_actual_value + ,endpoint_repeat_count + from (select + ucs.sample_size + ,uth.endpoint_actual_value + ,uth.endpoint_repeat_count + from + user_tab_histograms uth + ,user_tab_col_statistics ucs + where + uth.table_name = ucs.table_name + and uth.column_name = ucs.column_name + and uth.table_name = upper ('&table_name') + and uth.column_name = upper ('&column_name') + ) + ) + ) + ) +where bind = &bind; \ No newline at end of file diff --git a/mhouri/CurSelCubeHybridNonPopWithoutEndPoint.sql b/mhouri/CurSelCubeHybridNonPopWithoutEndPoint.sql new file mode 100644 index 0000000..7d60bbf --- /dev/null +++ b/mhouri/CurSelCubeHybridNonPopWithoutEndPoint.sql @@ -0,0 +1,67 @@ +--******************************************************************* +-- Name : CurSelCubeHybridNonPopWithoutEndPoint +-- Date : October 2017 +-- Author : Mohamed Houri +-- Purpose: gives the selectivity low and high value range of a Hybrid +-- non-popular histogram bind variable which has not been +-- captured by the histogram gathering program. +-- This low-high value range corresponds to the low-high +-- selectivity range of a bind aware cursor using this +-- bind variable value +--*****************************************************************| +var num_rows number +var new_density number + +begin + select num_rows into :num_rows from all_tables where table_name = 'ACS_TEST_TAB'; +end; +/ + +begin + SELECT + trunc(((BktCnt-PopBktCnt)/BktCnt)/(NDV-PopValCnt),10) + into :new_density + FROM + (SELECT + COUNT(1) PopValCnt, + SUM(endpoint_repeat_count) PopBktCnt, + ndv, + BktCnt, + pop_bucketSize + FROM + (SELECT + (sample_size - num_nulls) BktCnt, + num_distinct ndv, + num_buckets, + density OldDensity, + (sample_size-num_nulls)/num_buckets pop_bucketSize + FROM user_tab_col_statistics + WHERE + table_name = 'ACS_TEST_TAB' + AND column_name = 'RECORD_TYPE' + ), + user_histograms + WHERE table_name = 'ACS_TEST_TAB' + AND column_name = 'RECORD_TYPE' + AND endpoint_repeat_count> pop_bucketSize + GROUP BY ndv, + BktCnt, + pop_bucketSize + ); +end; +/ + +col bind format a10 +select + &&bind + ,round((sel_of_bind - offset),6) low + ,round((sel_of_bind + offset),6) high +from + (select + &bind + ,:new_density sel_of_bind + ,0.1*(:new_density) offset + from dual + ); + + diff --git a/mhouri/CurSelCubeHybridPop.sql b/mhouri/CurSelCubeHybridPop.sql new file mode 100644 index 0000000..c1bd937 --- /dev/null +++ b/mhouri/CurSelCubeHybridPop.sql @@ -0,0 +1,49 @@ +--************************************************************************ +-- Name : CurSelCubeHybridNonPop +-- Date : October 2017 +-- Author : Mohamed Houri +-- Purpose: gives the selectivity low and high value range of a Hybrid +-- non-popular histogram bind variable having an endpoint number +-- when this bind variable is used in a bind aware cursor +--*********************************************************************** +var num_rows number +var new_density number + +begin + select num_rows into :num_rows from all_tables where table_name = upper ('&table_name'); +end; +/ + +begin + SELECT + trunc(((BktCnt-PopBktCnt)/BktCnt)/(NDV-PopValCnt),10) + into :new_density + FROM + (SELECT + COUNT(1) PopValCnt, + SUM(endpoint_repeat_count) PopBktCnt, + ndv, + BktCnt, + pop_bucketSize + FROM + (SELECT + (sample_size - num_nulls) BktCnt, + num_distinct ndv, + num_buckets, + density OldDensity, + (sample_size-num_nulls)/num_buckets pop_bucketSize + FROM user_tab_col_statistics + WHERE + table_name = upper ('&table_name') + AND column_name = upper ('&column_name') + ), + user_histograms + WHERE table_name = upper ('&table_name') + AND column_name = upper ('&column_name') + AND endpoint_repeat_count> pop_bucketSize + GROUP BY ndv, + BktCnt, + pop_bucketSize + ); +end; +/ \ No newline at end of file diff --git a/mhouri/CurrentSize.sql b/mhouri/CurrentSize.sql new file mode 100644 index 0000000..b460396 --- /dev/null +++ b/mhouri/CurrentSize.sql @@ -0,0 +1,98 @@ +/* ---------------------------------------------------- +| Author : Aziz Cherrabi | +| Updated : 24/08/2015 | +| Get size of the existing tablespace | +| except TEMP | +| | +|-----------------------------------------------------| */ + +column ts format a35 heading 'TABLESPACE' +column tst format a9 heading 'STATUS' +column vt format 99999999990 heading 'TOTAL|SPACE|(Mo)' +column vo format 99999999990 heading 'SPACE|USED|(Mo)' +column vr format 99999999990 heading 'SPACE|REMAINED|(Mo)' +column tx format 990 heading '%USED' + +compute sum label 'Total tablespaces' of vt vo vr on report + +break on report + + +with got_my_max +as (select + tablespace_name tbs, + Bytes_G, + maxbytes_G, + to_max_G, + case when maxbytes_G=0 then -1 else round((Bytes_G*100/maxbytes_G)) end pct +from + ( + select + tablespace_name, + round(sum(nvl(BYTES,0))/1024/1024/1024) Bytes_G, + round(sum(nvl(MAXBYTES,0))/1024/1024/1024) maxbytes_G, + round(sum(nvl(MAXBYTES-BYTES,0))/1024/1024/1024) to_max_G + from (select + tablespace_name + ,file_name,bytes + ,case when nvl(maxbytes,0)=0 then bytes + else nvl(maxbytes,0) end MAXBYTES + from dba_data_files) + group by tablespace_name + ) + ) +select + t.tablespace_name + ||decode(t.contents,'TEMPORARY',' (TEMPORARY/'||b.file_type||')','') ts, + t.status tst, + b.bytes/1024/1024 vt, + b.bytes_used/1024/1024 vo, + b.bytes_free/1024/1024 vr, +-- ceil(b.bytes_used*100/b.bytes) tx, + ceil(b.bytes_used*100/(b.bytes+(g.to_max_G*1024*1024*1024))) tx, + g.to_max_G to_max_G +from ( + select + df.tablespace_name tablespace_name, + df.bytes bytes, + nvl(u.bytes_used,0) bytes_used, + nvl(f.bytes_free,0) bytes_free, + 'DATAFILE' file_type + from + (select + tablespace_name, + sum(bytes) bytes + from + dba_data_files + group by + tablespace_name + ) df, + (select + tablespace_name, + sum(bytes) bytes_used + from + dba_segments + group by + tablespace_name + ) u, + (select + tablespace_name, + sum(bytes) bytes_free + from + dba_free_space + group by + tablespace_name + ) f + where + df.tablespace_name = u.tablespace_name (+) + and + df.tablespace_name = f.tablespace_name (+) + ) b, + dba_tablespaces t, + got_my_max g +where + t.tablespace_name = b.tablespace_name +and g.tbs = b.tablespace_name +order by tx desc, vo desc +; + diff --git a/mhouri/FindVW_all.sql b/mhouri/FindVW_all.sql new file mode 100644 index 0000000..b74f959 --- /dev/null +++ b/mhouri/FindVW_all.sql @@ -0,0 +1,36 @@ +/* ------------------------------------------------------------------------------------| +|Author : Mohamed Houri | +|Date : 03/07/2017 | +|Scope : gives all sql_id in memory and from AWR history using all VW_ transformation | +| | +---------------------------------------------------------------------------------------|*/ +-- +col sql_id format a15 +col plan_hash_value format 999999999999 +col object_name format a25 + +break on report +select + * +from +( select + sql_id + ,plan_hash_value + ,object_name + ,cardinality + from + gv$sql_plan + where + object_name like '%VW%' + union + select + sql_id + ,plan_hash_value + ,object_name + ,cardinality + from + dba_hist_sql_plan + where + object_name like '%VW%' +) +order by sql_id; \ No newline at end of file diff --git a/mhouri/FixProfileFromXmlFromCache.sql b/mhouri/FixProfileFromXmlFromCache.sql new file mode 100644 index 0000000..33303c6 --- /dev/null +++ b/mhouri/FixProfileFromXmlFromCache.sql @@ -0,0 +1,69 @@ +rem +rem Script: FixProfileXmlFromCache.sql +rem Author: Original taken somewhere (Kerry Osborne or Carlos Sierra Or Aziz Cherrabi) +rem and updated by Mohamed Houri to consider hints > 500 bytes +rem and avoid ORA-06502 +rem Dated: September 2016 +rem Purpose: Transfer an execution plan of (hinted_sql_id) to a packaged query +rem +rem +rem Last tested +rem 12.1.0.2 +rem +rem Usage: +rem SQL> @fixProfilefromCache +rem Enter value for sql_id_from: 2w9a295mxcjgx +rem Enter value for child_no_from: 0 +rem Enter value for sql_id_to: addzft9frsckw +rem Enter value for sql_id_to: addzft9frsckw +rem Enter value for sql_id_to: addzft9frsckw +rem Notes : any feedback will be highly appreciated +rem +declare + ar_profile_xml clob; + cl_sql_text clob; +begin +-- get sql_id_from information +-- + select + regexp_replace(other_xml,'.*(.*).*','\1') + into ar_profile_xml + from + gv$sql_plan + where + sql_id = '&sql_id_from' + and child_number = &child_no_from + and other_xml is not null + and rownum =1; + +-- get information of sql_id_to +-- use gv$sql instead of g$sqlstats +-- to avoid query text being truncated when it is very big + begin + select + sql_fulltext into cl_sql_text + from + gv$sql + where + sql_id = '&sql_id_to'; +exception + when NO_DATA_FOUND then + select + sql_text into cl_sql_text + from + dba_hist_sqltext + where + sql_id = '&sql_id_to' + and dbid = (select dbid from v$database); +end; +-- fix Profile + dbms_sqltune.import_sql_profile( + sql_text => cl_sql_text , + profile_xml => ar_profile_xml , + name => 'profile_'||'&&sql_id_to'||'_attach' , + category => 'DEFAULT' , + replace => true , + force_match => TRUE + ); + end; +/ \ No newline at end of file diff --git a/mhouri/PXElaps.sql b/mhouri/PXElaps.sql new file mode 100644 index 0000000..4b6b19a --- /dev/null +++ b/mhouri/PXElaps.sql @@ -0,0 +1,22 @@ +/* -----------------------------------------------------------------------------| +|Author : Mohamed Houri | +|Date : 03/07/2017 | +|Scope : gives time consumed by all PX slaves during a parallel query | +| | +--------------------------------------------------------------------------------|*/ +compute sum label 'Total Slaves time' of elapsed on report +break on report +select + sql_id + ,sql_exec_id + ,sid + , process_name + , round(elapsed_time/1e6,2) elapsed + -- , round(cpu_time/1e6) cpu + --, round(concurrency_wait_time/1e6,2) conc + -- , round(user_io_wait_time/1e6) IO_Waits + from gv$sql_monitor + where sql_id = '&sql_id' + and sql_exec_id = '&exec_id' + and sql_text is null + order by round(elapsed_time/1e6,2); \ No newline at end of file diff --git a/mhouri/PartitionedIndexEfficiency.sql b/mhouri/PartitionedIndexEfficiency.sql new file mode 100644 index 0000000..f89be3d --- /dev/null +++ b/mhouri/PartitionedIndexEfficiency.sql @@ -0,0 +1,324 @@ +rem +rem Script: index_est_proc_2.sql +rem Author: Jonathan Lewis +rem Dated: August 2005 (updated Apr 2009) +rem Purpose: Fast analysis of indexes to help identify +rem extreme degeneration. +rem +rem Last tested +rem 11.1.0.7 +rem 10.2.0.3 +rem 10.1.0.4 +rem 9.2.0.8 +rem 8.1.7.4 +rem Not tested +rem 11.2.0.1 +rem 10.2.0.4 +rem +rem Usage: +rem Set the values in the "define" section +rem Log on with the privilege to see the "dba_" views +rem using SQL*Plus and run the script. +rem +rem Notes: +rem This script assumes that statistics have been collected in +rem the fairly recent past, and uses some approximations to +rem compare the number of leaf blocks with the number of leaf +rem blocks that ought to be needed to hold the data. +rem +rem There are various little oddities with the way that +rem (a) Oracle calculates average column lenght and +rem (b) I use the available data +rem that mean that at small sizes and in extreme cases the +rem numbers I produce can be wrong. In particular, for indexes +rem where a lot of the table data has nulls (so no entry in the +rem index), the estimated size can be significantly larger than +rem they finally turn out to be. +rem +rem +rem Targets +rem ======= +rem Where the estimate is very much smaller than the actual, then +rem you may be looking at a "FIFO" index, emptying out in the past +rem and filling in the future. This type of index is a candidate for +rem a regular "coalesce" - although you may want to rebuild it once +rem to get it to the right starting size and release excess space +rem back to the tablespace. +rem +rem See https://jonathanlewis.wordpress.com/2008/09/26/index-analysis/ +rem for an example and discussion on this type of index. +rem +rem Where the estimate is about half the size of the actual, then +rem it is worth checking whether there is any special treatment of +rem the data that is making this happen. 50% utilisation is fairly +rem common in RAC for indexes based on a sequence with a large cache +rem size, so it may be best to leave the indexes at that level. +rem However, you may find that rebuilding (perhaps just once) with +rem a pctfree in the region of 30% may give you a slightly more efficient +rem index in non-RAC systems. +rem +rem If your index is running at 50% and is not strongly sequence based +rem then you may be suffering from the concurrency/ITL bug and may want +rem to rebuild the index and force a maxtrans setting into the index. +rem +rem If the index is running at a fairly uniform 25%, it may be subject +rem to side effects of both sequencing and the concurrency effects. +rem +rem Usage: +rem ====== +rem This script takes a username (table owner), percent usage, and +rem scaling factor. It reports the estimated leaf block count of +rem all simple indexes for that schema where the size of the index +rem would be smaller than the supplied fraction of the current size +rem when rebuilt at the supplied percentage utilisation. Current settings +rem are 90% (which equates to the default pctfree 10) and 0.6 which means +rem the index would be running at about 50% empty wastage - which is the +rem point at which it begins to be a possible target for investigation. +rem The script does not report any index smaller than 10,000 leaf blocks, +rem and assumes an 8KB block size. +rem +rem Technical notes: +rem ================ +rem Don't need to add a length byte after using dbms_stats +rem Don't need a 'descending' byte because it's automatically included +rem Don't need to adjust for num_nulls because it's automatically included +rem Reverse key indexes don't affect column lengths +rem +rem Need to worry about COMPRESSED indexes. At present compression +rem may reduce the size of an index so that I don't notice it should +rem still be smaller than it is. +rem +rem Index types that can be used (with partitioned = 'NO') +rem NORMAL +rem NORMAL/REV +rem FUNCTION-BASED NORMAL +rem +rem Still needs enhancing for partitioned and subpartitioned indexes +rem Check dba_part_indexes for locality, partitioning_type, subpartitioning_type +rem But does handle global indexes on partitioned tables. +rem +rem To investigate +rem LOB +rem IOT - TOP +rem IOT - NESTED +rem SECONDARY +rem BITMAP (and BITMAP JOIN) +rem FUNCTION-BASED BITMAP +rem CLUSTER +rem ANSI ? +rem +rem Probably not possible +rem DOMAIN +rem FUNCTION-BASED DOMAIN +rem +rem Need to avoid partitioned, temporary, unusable and dropped indexes +rem +rem +rem Update : December 2016 by Mohamed Houri to consider Locally +rem Partitioned and SUB-Partitioned indexes +rem : Any error is this script is mine. +rem : This script has been tested on running systems and seems giving +rem acceptable results. But still I have not enough feedback. So use it +rem carefully. +rem +set serveroutput on size 1000000 format wrapped + +define m_owner = '&m_schemaname' +define m_blocksize = 8192 +define m_target_use = 90 -- equates to pctfree 10 +define m_scale_factor = 0.6 +define m_minimum = 1000 +define m_overhead = 192 -- leaf block "lost" space in index_stats + +set verify off +set serveroutput on size 1000000 format wrapped + +declare + m_leaf_estimate number; + ln_size number; +begin + for r in + ( + select + ww.table_owner, + ww.table_name, + ww.index_owner, + ww.index_name, + ww.partition_name, + ww.leaf_blocks, + ww.status, + ww.part_level + from -- top level partitioned index + ( + select + a.table_owner, + a.table_name, + b.index_owner, + b.index_name, + b.partition_name, + b.leaf_blocks, + b.status, + 'TOP' part_level + from + dba_indexes a + ,dba_ind_partitions b + where + a.owner = b.index_owner + and a.index_name = b.index_name + and a.owner = upper('&m_owner') + and a.partitioned = 'YES' + and a.temporary = 'N' + and a.dropped = 'NO' + and b.status != 'UNUSABLE' + and a.last_analyzed is not null + union all + -- sub partitioned indexes + select + a.table_owner, + a.table_name, + c.index_owner, + c.index_name, + c.subpartition_name, + c.leaf_blocks, + c.status, + 'SUB' part_level + from + dba_indexes a + ,dba_ind_subpartitions c + where + a.owner = c.index_owner + and a.index_name = c.index_name + and a.owner = upper('&m_owner') + and a.partitioned = 'YES' + and a.temporary = 'N' + and a.dropped = 'NO' + and c.status != 'UNUSABLE' + and a.last_analyzed is not null + )ww + order by + ww.index_owner, ww.table_name, ww.index_name,ww.partition_name + ) loop + if r.leaf_blocks > &m_minimum then + select + round( 100 / &m_target_use * (ind.num_rows * (tab.rowid_length + ind.uniq_ind + 4) + sum((tc.avg_col_len) *(tab.num_rows)) ) /(&m_blocksize - &m_overhead) + ) index_leaf_estimate + into m_leaf_estimate + from + ( + select /*+ no_merge */ + a.partition_name, + a.num_rows, + 10 rowid_length + from + dba_ind_partitions a + where + a.index_owner = r.index_owner + and a.index_name = r.index_name + and a.partition_name = r.partition_name + union all + select /*+ no_merge */ + a.subpartition_name, + a.num_rows, + 10 rowid_length + from + dba_ind_subpartitions a + where + a.index_owner = r.index_owner + and a.index_name = r.index_name + and a.subpartition_name = r.partition_name + ) tab, + ( + select /*+ no_merge */ + a.index_name, + a.num_rows, + decode(uniqueness,'UNIQUE',0,1) uniq_ind + from + dba_ind_partitions a + ,dba_indexes b + where + a.index_name = b.index_name + and a.index_owner = r.index_owner + and b.table_name = r.table_name + and b.owner = r.index_owner + and a.index_name = r.index_name + and a.partition_name = r.partition_name + union all + select /*+ no_merge */ + c.index_name, + c.num_rows, + decode(uniqueness,'UNIQUE',0,1) uniq_ind + from + dba_ind_subpartitions c + ,dba_indexes b + where + c.index_name = b.index_name + and c.index_owner = r.index_owner + and b.table_name = r.table_name + and b.owner = r.index_owner + and c.index_name = r.index_name + and c.subpartition_name = r.partition_name + ) ind, + ( + select /*+ no_merge */ + column_name + from + dba_ind_columns + where + table_owner = r.table_owner + and index_owner = r.index_owner + and table_name = r.table_name + and index_name = r.index_name + ) ic, + ( + select /*+ no_merge */ + column_name, + avg_col_len + from + dba_tab_cols + where + owner = r.table_owner + and table_name = r.table_name + ) tc + where + tc.column_name = ic.column_name + group by + ind.num_rows, + ind.uniq_ind, + tab.rowid_length + ; + if m_leaf_estimate < &m_scale_factor * r.leaf_blocks then + + select sum(round(bytes/1024/1024,2)) into ln_size + from dba_segments a + where segment_name = r.index_name + and partition_name = r.partition_name; + + if ln_size is not null + then + dbms_output.new_line; + dbms_output.put_line + ( + 'table name ' || ': ' || trim(r.table_name) || ' - ' || + 'index name ' || ': ' || trim(r.index_name) || + ' - Partition Name :' || trim(r.partition_name) || + ' - Partition Level:' || r.part_level + ); + + dbms_output.put_line + ( + '--> Current partition index size (MB): ' || + round(ln_size,2) || + ' Expected Partition index size (MB): ' || + round(ln_size * (m_leaf_estimate/r.leaf_blocks),2) + ); + + dbms_output.new_line; + + end if; + end if; + end if; + end loop; +end; +/ +set verify on + \ No newline at end of file diff --git a/mhouri/QCElaps.sql b/mhouri/QCElaps.sql new file mode 100644 index 0000000..ac24dad --- /dev/null +++ b/mhouri/QCElaps.sql @@ -0,0 +1,13 @@ +select + sql_id + , round(elapsed_time/1e6,2) QC_time + , px_maxdop DOP + , px_servers_requested + , px_servers_allocated + , round(cpu_time/1e6) cpu + --, round(concurrency_wait_time/1e6,2) conc + , round(user_io_wait_time/1e6) IO_Waits + from gv$sql_monitor + where sql_id = '&sql_id' + and sql_exec_id = '&exec_id' + and sql_text is not null; \ No newline at end of file diff --git a/mhouri/QcPxElaps.sql b/mhouri/QcPxElaps.sql new file mode 100644 index 0000000..6a21646 --- /dev/null +++ b/mhouri/QcPxElaps.sql @@ -0,0 +1,24 @@ +compute sum label 'Query time' of wall_clock_time on report +break on report +with px as (select max(px_maxdop) px_maxdop + from gv$sql_monitor + where sql_id ='&sql_id' + and sql_exec_id = '&sql_exec_id') +select + sql_id + ,round(elapsed_time/1e6,2) wall_clock_time + ,px_maxdop +from gv$sql_monitor +where sql_id = '&sql_id' +and sql_exec_id = '&exec_id' +and sql_text is null +union all +select + sql_id + ,round(elapsed_time/1e6,2) wall_clock_time + ,null +from gv$sql_monitor,px +where sql_id = '&sql_id' +and sql_exec_id = '&exec_id' +and sql_text is null +order by round(elapsed_time/1e6,2) diff --git a/mhouri/README.md b/mhouri/README.md new file mode 100644 index 0000000..8c28ce8 --- /dev/null +++ b/mhouri/README.md @@ -0,0 +1 @@ +I share some SQL scripts that I use regularly in my work as a consultant specialized around the Oracle database diff --git a/mhouri/SizeCurrent2.sql b/mhouri/SizeCurrent2.sql new file mode 100644 index 0000000..d3e8b76 --- /dev/null +++ b/mhouri/SizeCurrent2.sql @@ -0,0 +1,90 @@ +column ts format a35 heading 'TABLESPACE' +column tst format a9 heading 'STATUS' +column vt format 99999999990 heading 'TOTAL|SPACE|(GB)' +column vo format 99999999990 heading 'SPACE|USED|(GB)' +column vr format 99999999990 heading 'SPACE|REMAINED|(GB)' +column tx format 990 heading '%USED' + +compute sum label 'Total tablespaces' of vt vo vr on report + +break on report + + +with got_my_max +as (select + tablespace_name tbs, + Bytes_G, + maxbytes_G, + to_max_G, + case when maxbytes_G=0 then -1 else round((Bytes_G*100/maxbytes_G)) end pct +from + ( + select + tablespace_name, + round(sum(nvl(BYTES,0))/1024/1024/1024) Bytes_G, + round(sum(nvl(MAXBYTES,0))/1024/1024/1024) maxbytes_G, + round(sum(nvl(MAXBYTES-BYTES,0))/1024/1024/1024) to_max_G + from (select + tablespace_name + ,file_name,bytes + ,case when nvl(maxbytes,0)=0 then bytes + else nvl(maxbytes,0) end MAXBYTES + from dba_data_files) + group by tablespace_name + ) + ) +select + t.tablespace_name + ||decode(t.contents,'TEMPORARY',' (TEMPORARY/'||b.file_type||')','') ts, + t.status tst, + b.bytes/1024/1024/1024 vt, + b.bytes_used/1024/1024/1024 vo, + b.bytes_free/1024/1024/1024 vr, +-- ceil(b.bytes_used*100/b.bytes) tx, + ceil(b.bytes_used*100/(b.bytes+(g.to_max_G*1024*1024*1024))) tx, + g.to_max_G to_max_G +from ( + select + df.tablespace_name tablespace_name, + df.bytes bytes, + nvl(u.bytes_used,0) bytes_used, + nvl(f.bytes_free,0) bytes_free, + 'DATAFILE' file_type + from + (select + tablespace_name, + sum(bytes) bytes + from + dba_data_files + group by + tablespace_name + ) df, + (select + tablespace_name, + sum(bytes) bytes_used + from + dba_segments + group by + tablespace_name + ) u, + (select + tablespace_name, + sum(bytes) bytes_free + from + dba_free_space + group by + tablespace_name + ) f + where + df.tablespace_name = u.tablespace_name (+) + and + df.tablespace_name = f.tablespace_name (+) + ) b, + dba_tablespaces t, + got_my_max g +where + t.tablespace_name = b.tablespace_name +and g.tbs = b.tablespace_name +order by tx desc, vo desc +; + diff --git a/mhouri/SpmTranfer.sql b/mhouri/SpmTranfer.sql new file mode 100644 index 0000000..cb76e64 --- /dev/null +++ b/mhouri/SpmTranfer.sql @@ -0,0 +1,24 @@ +declare + +v_sql_text clob; +ln_plans pls_integer; + +begin + + select replace(sql_fulltext, chr(00), ' ') + into v_sql_text + from gv$sqlarea + where sql_id = trim('&original_sql_id') + and rownum = 1; + + + -- create sql_plan_baseline for original sql using plan from modified sql + ln_plans := dbms_spm.load_plans_from_cursor_cache ( + sql_id => trim('&modified_sql_id'), + plan_hash_value => to_number(trim('&plan_hash_value')), + sql_text => v_sql_text ); + + dbms_output.put_line('Plans Loaded: '||ln_plans); + +end; +/ \ No newline at end of file diff --git a/mhouri/UndoHist.sql b/mhouri/UndoHist.sql new file mode 100644 index 0000000..f6601dc --- /dev/null +++ b/mhouri/UndoHist.sql @@ -0,0 +1,69 @@ +----- ./MohamedUndoHist.sql ------------------------ +/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +Author : Mohamed Houri +Date : 02/03/2020 +Scope : comments to be added here + : check historical undo, particularly ORA-01555 + : input dates have to be changed as a subtition parameters +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +col snap_begin format a25 +col maxquerysqlid format a15 +col maxquerylen format 9999999 +col txncount format 9999999 +col ora_01555 format 99 +col undoblks format 9999999 +col undoConsump format 9999999 +col tuned_undoretention format 9999999 +col activeblks format 9999999 +col unexpiredblks format 9999999 +col expiredblks format 9999999 + +compute sum label 'Total Unexpired' of unexpiredblks on report +break on report +SELECT + snap_begin + ,maxquerysqlid + ,maxquerylen + ,txncount + ,unxpstealcnt + ,unxpblkrelcnt + ,unxpblkreucnt + ,expstealcnt + ,expblkrelcnt + ,expblkreucnt + ,nospaceerrcnt + ,ssolderrcnt ora_01555 + ,round(undoblks * 8 / 1024) undo_mb + ,tuned_undoretention + ,activeblks + ,unexpiredblks + ,expiredblks + FROM + (SELECT + sn.begin_interval_time snap_begin + ,sn.instance_number inst + ,st.maxquerylen + ,st.maxquerysqlid + ,st.unxpstealcnt + ,st.unxpblkrelcnt + ,st.unxpblkreucnt + ,st.expstealcnt + ,st.expblkrelcnt + ,st.expblkreucnt + ,st.ssolderrcnt + ,st.nospaceerrcnt + ,st.txncount + ,st.undoblks + ,st.tuned_undoretention + ,st.activeblks + ,st.unexpiredblks + ,st.expiredblks + FROM + dba_hist_undostat st, + dba_hist_snapshot sn + WHERE st.snap_id = sn.snap_id + AND begin_interval_time between to_date('06032020 04:00:00','ddmmyyyy hh24:mi:ss') + and to_date('09032020 07:00:00','ddmmyyyy hh24:mi:ss') + ) + ORDER by 1 asc, 3 desc; + diff --git a/mhouri/ashPerAction.sql b/mhouri/ashPerAction.sql new file mode 100644 index 0000000..3730bc5 --- /dev/null +++ b/mhouri/ashPerAction.sql @@ -0,0 +1,17 @@ +----- ./ashPerAction2.sql ------------------------ +column cnt format 9999999 +compute sum label 'Total Elapsed' of cnt on report + +break on report + +select + sql_id, sql_plan_hash_value, count(1) cnt +from + gv$active_session_history + where + sample_time between to_date('&datefrom', 'mm/dd/yyyy hh24:mi:ss') + and to_date('&dateto', 'mm/dd/yyyy hh24:mi:ss') +and action = '&ACTION' +group by sql_id, sql_plan_hash_value +order by 2 desc +; \ No newline at end of file diff --git a/mhouri/ashPlanLineId.sql b/mhouri/ashPlanLineId.sql new file mode 100644 index 0000000..d399013 --- /dev/null +++ b/mhouri/ashPlanLineId.sql @@ -0,0 +1,16 @@ +column cnt format 9999999 +compute sum label 'Total Elapsed' of cnt on report + +break on report + +select + sql_plan_line_id + ,count(1) cnt +from + gv$active_session_history + where + sample_time between to_date('&datefrom', 'mm/dd/yyyy hh24:mi:ss') + and to_date('&dateto', 'mm/dd/yyyy hh24:mi:ss') +and sql_id = '&sql_id' +group by sql_plan_line_id +order by 2 desc; \ No newline at end of file diff --git a/mhouri/ashPlanLineId2.sql b/mhouri/ashPlanLineId2.sql new file mode 100644 index 0000000..060789e --- /dev/null +++ b/mhouri/ashPlanLineId2.sql @@ -0,0 +1,17 @@ +column cnt format 9999999 +compute sum label 'Total Elapsed' of cnt on report + +break on report + +select + sql_plan_line_id + ,count(1) cnt +from + gv$active_session_history + where + sample_time between to_date('&datefrom', 'mm/dd/yyyy hh24:mi:ss') + and to_date('&dateto', 'mm/dd/yyyy hh24:mi:ss') +and sql_id = '&sql_id' +and sql_exec_id = &sql_exec_id +group by sql_plan_line_id +order by 2 desc; \ No newline at end of file diff --git a/mhouri/ashgetBreak.sql b/mhouri/ashgetBreak.sql new file mode 100644 index 0000000..c1fe194 --- /dev/null +++ b/mhouri/ashgetBreak.sql @@ -0,0 +1,47 @@ +--|-----------------------------------------------------------| +--|Author : Mhouri | +--|scope : get Origin of the SQL*Netbreak/reset to client | +--| | +--|-----------------------------------------------------------| +col top_level_call for a25 +col osuser for a20 +col osuser for a20 +col osuser for a20 +with got_my_sid +as(select + session_id + ,inst_id + ,count(1) cnt + from + gv$active_session_history + where + sample_time between to_date('10072015 11:00:00', 'ddmmyyyy hh24:mi:ss') + and to_date('10072015 12:00:00', 'ddmmyyyy hh24:mi:ss') + and event = 'SQL*Net break/reset to client' + group by session_id, inst_id + having count(1) > 10 + ) +select + a.inst_id + ,a.session_id + ,a.cnt elaps + ,s.schema# + ,s.schemaname + ,s.top_level_call# + ,(select l.top_level_call_name from v$toplevelcall l + where l.top_level_call# = s.top_level_call# + ) top_level_call + ,s.osuser + ,s.username sess_user + ,p.username proc_user + ,p.tracefile + --,p.pga_used_mem +-- ,p.pga_alloc_mem +from + gv$process p + ,gv$session s + ,got_my_sid a +where + p.addr = s.paddr +and a.session_id = s.sid +and a.inst_id = s.inst_id; diff --git a/mhouri/ashtop20.sql b/mhouri/ashtop20.sql new file mode 100644 index 0000000..2aa572d --- /dev/null +++ b/mhouri/ashtop20.sql @@ -0,0 +1,32 @@ +--|-----------------------------------------------------------| +--|Scope : display awr top events and sql | +--|Usage : @aashtop20 "16032021 08:00:00" "16032021 09:00:00"| +--|-----------------------------------------------------------| + +set feed off + +define from_mmddyy="&1" +define to_mmddyy="&2" + +clear break + +select decode(event,null, 'on cpu', event) event, count(1) +from gv$active_session_history +where + sample_time between to_date('&from_mmddyy', 'ddmmyyyy hh24:mi:ss') + and to_date('&to_mmddyy', 'ddmmyyyy hh24:mi:ss') +group by event +order by 2 desc +fetch first 20 rows only; + +select sql_id, count(1) +from gv$active_session_history +where + sample_time between to_date('&from_mmddyy', 'ddmmyyyy hh24:mi:ss') + and to_date('&to_mmddyy', 'ddmmyyyy hh24:mi:ss') +group by sql_id +order by 2 desc +fetch first 20 rows only; + +undefine from_mmddyy +undefine to_mmddyy \ No newline at end of file diff --git a/mhouri/awrPlanLineId.sql b/mhouri/awrPlanLineId.sql new file mode 100644 index 0000000..7d99440 --- /dev/null +++ b/mhouri/awrPlanLineId.sql @@ -0,0 +1,19 @@ +column cnt format 9999 +compute sum label 'Total Elapsed' of cnt on report + +break on report + +select + sql_plan_line_id + ,10* count(1) cnt +from + dba_hist_active_sess_history + where + sample_time between to_date('&datefrom', 'mm/dd/yyyy hh24:mi:ss') + and to_date('&dateto', 'mm/dd/yyyy hh24:mi:ss') +and sql_id = '&sql_id' +group by sql_plan_line_id +order by 2 desc; + + + diff --git a/mhouri/checkUndoAsh.sql b/mhouri/checkUndoAsh.sql new file mode 100644 index 0000000..76925a5 --- /dev/null +++ b/mhouri/checkUndoAsh.sql @@ -0,0 +1,28 @@ +/* -------------------------------------------------------------- +Author : Mohamed Houri +Date : 24/08/2015 +If you want to know what object are read +in ASH then use the following script +Particularly : + -- if current_obj = 0 then this means you are reading from + undo block(useful to check read consistency) + + -- if current_obj = -1 then this means you are working on cpu +----------------------------------------------------------------------- */ +select + decode(current_obj# + ,0 + ,'undo block' + ,-1 + ,'cpu' + ,current_obj#) cur_obj + , count(1) +from + gv$active_session_history +where + sample_time between to_date('&date_from', 'ddmmyyyy hh24:mi:ss') + and to_date('&date_from', 'ddmmyyyy hh24:mi:ss') +and event = 'db file sequential read' +and sql_id = '&sql_id' +group by current_obj# +order by 2 asc; \ No newline at end of file diff --git a/mhouri/disProf.sql b/mhouri/disProf.sql new file mode 100644 index 0000000..57d49f2 --- /dev/null +++ b/mhouri/disProf.sql @@ -0,0 +1,2 @@ +--Mhouri +EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE('&PROFILE_NAME','STATUS','DISABLED'); \ No newline at end of file diff --git a/mhouri/disSPM.sql b/mhouri/disSPM.sql new file mode 100644 index 0000000..e29f358 --- /dev/null +++ b/mhouri/disSPM.sql @@ -0,0 +1,11 @@ +DECLARE + l_plans_altered PLS_INTEGER; +BEGIN + l_plans_altered := DBMS_SPM.alter_sql_plan_baseline( + sql_handle => '&SQL_HANDLE', + plan_name => '&plan_name', + attribute_name => 'enabled', + attribute_value => 'NO'); + +END; +/ \ No newline at end of file diff --git a/mhouri/dropSPM.sql b/mhouri/dropSPM.sql new file mode 100644 index 0000000..8185b58 --- /dev/null +++ b/mhouri/dropSPM.sql @@ -0,0 +1,7 @@ +declare +spm_op pls_integer; +begin +spm_op := dbms_spm.drop_sql_plan_baseline (sql_handle => NULL, plan_name => '&plan_name'); +end; +/ + diff --git a/mhouri/enableCons.sql b/mhouri/enableCons.sql new file mode 100644 index 0000000..cd71853 --- /dev/null +++ b/mhouri/enableCons.sql @@ -0,0 +1,11 @@ +-- Enabling constraint using parallelism +--Mhouri +alter table table_name add constraint constraint_name primary key (col1, col2, col3) +using index +enable novalidate; + +alter session force parallel ddl; +alter table table_name parallel 8; +alter table table_name modify constraint constraint_name validate; +alter table table_name noparallel; +alter session disable parallel ddl; \ No newline at end of file diff --git a/mhouri/getAdvisorTasks.sql b/mhouri/getAdvisorTasks.sql new file mode 100644 index 0000000..90ce99c --- /dev/null +++ b/mhouri/getAdvisorTasks.sql @@ -0,0 +1,10 @@ +col task_name for a50 +compute sum label 'Total Size' of MB on report +break on report +select + task_name, count(1) cnt +from + dba_advisor_objects +group by + task_name +order by 2 desc; \ No newline at end of file diff --git a/mhouri/getAdvisors.sql b/mhouri/getAdvisors.sql new file mode 100644 index 0000000..f999f2b --- /dev/null +++ b/mhouri/getAdvisors.sql @@ -0,0 +1 @@ +select task_name, enabled from dba_autotask_schedule_control; \ No newline at end of file diff --git a/mhouri/getFRA.sql b/mhouri/getFRA.sql new file mode 100644 index 0000000..c2be1f8 --- /dev/null +++ b/mhouri/getFRA.sql @@ -0,0 +1,24 @@ +archive log list + +show parameter db_flashback_retention_target + + +col db_recovery_file_dest for a45 +col space_limit_GB for 9999999 +col space_used_GB for 9999999 +select + name as db_recovery_file_dest + ,space_limit/power(1024,3) space_limit_GB + ,space_used/power(1024,3) space_used_GB + ,number_of_files +from + v$recovery_file_dest; + +select + file_type + ,percent_space_used + ,percent_space_reclaimable +from + v$recovery_area_usage; + + \ No newline at end of file diff --git a/mhouri/getLOBname.sql b/mhouri/getLOBname.sql new file mode 100644 index 0000000..6bc08e2 --- /dev/null +++ b/mhouri/getLOBname.sql @@ -0,0 +1,26 @@ +--****************************************************************** +-- |Name : getLOBname | +-- |Date : 08 2022 | +-- |Author : Mohamed Houri | +-- | | +--****************************************************************** + +col owner for a30 +col table_name for a30 +col segment_type for a30 +col segment_name for a30 + +SELECT + a.owner + ,b.table_name + ,a.segment_type + ,a.segment_name +FROM + dba_segments a + ,dba_lobs b +WHERE + a.owner = b.owner +AND a.segment_name = b.segment_name +AND a.segment_name ='&lob_seg_name' +AND a.segment_type like '%LOB%'; +; \ No newline at end of file diff --git a/mhouri/getPartCol.sql b/mhouri/getPartCol.sql new file mode 100644 index 0000000..ef49c83 --- /dev/null +++ b/mhouri/getPartCol.sql @@ -0,0 +1,19 @@ +col partition_name format a20 +col num_distinct format a20 +col last_anal format a20 +col column_name format a12 +col user_stats format a12 +select + partition_name + ,column_name + --,num_distinct + --,density + ,to_char(last_analyzed,'dd/mm/yyyy hh24:mi:ss') last_anal + ,histogram + ,notes + from + all_part_col_statistics + where owner = upper('&owner') + and table_name = upper('&table_name') + -- and column_name = upper('&column_name') + ; \ No newline at end of file diff --git a/mhouri/getPartTab.sql b/mhouri/getPartTab.sql new file mode 100644 index 0000000..f7535ff --- /dev/null +++ b/mhouri/getPartTab.sql @@ -0,0 +1,42 @@ +col table_name format a20 +col table_owner format a20 +col pname format a20 +col ppos format 99999 +col last_anal format a20 +col global_stats format a12 +col user_stats format a12 +compute sum label 'Total num_rows' of num_rows on report +break on report +set verify off +select + table_owner + ,table_name + ,partition_name pname + -- ,partition_position ppos + ,sample_size + ,global_stats + ,user_stats + -- ,tablespace_name + ,to_char(last_analyzed, 'dd/mm/yyyy hh24:mi:ss') last_anal + ,num_rows +from + ( + select + table_owner + ,table_name + ,partition_name + ,partition_position + ,subpartition_count + ,num_rows + ,sample_size + ,global_stats + ,user_stats + ,last_analyzed + ,tablespace_name + from + all_tab_partitions +where + table_owner = upper('&owner') +and + table_name = upper('&table_name') +); diff --git a/mhouri/getPartTab1.sql b/mhouri/getPartTab1.sql new file mode 100644 index 0000000..8c1367b --- /dev/null +++ b/mhouri/getPartTab1.sql @@ -0,0 +1,34 @@ +col table_name format a20 +col pname format a10 +col ppos format 99999 +col last_anal format a20 +compute sum label 'Total num_rows' of num_rows on report +break on report +select + table_name + ,partition_name pname + ,partition_position ppos + -- ,subpartition_count + ,num_rows + ,tablespace_name + ,to_char(last_analyzed, 'dd/mm/yyyy hh24:mi:ss') last_anal +from + ( + select + table_name + ,partition_name + ,partition_position + ,subpartition_count + ,num_rows + ,last_analyzed + ,tablespace_name + from + all_tab_partitions +where + table_owner = upper('c##mhouri') +and + table_name = upper('t_acs_part') +); + + + \ No newline at end of file diff --git a/mhouri/getPartTab2.sql b/mhouri/getPartTab2.sql new file mode 100644 index 0000000..38ef024 --- /dev/null +++ b/mhouri/getPartTab2.sql @@ -0,0 +1,43 @@ +col table_name format a30 +col pname format a30 +col ppos format 99999 +col las_anal format a20 +compute sum label 'Total num_rows' of num_rows on report +break on report +set verify off +select + table_name + ,partition_name pname + ,partition_position ppos + ,subpartition_count + ,num_rows + ,tablespace_name + ,to_date((regexp_replace( extract(dbms_xmlgen.getxmltype( + 'select high_value from dba_tab_partitions + where table_owner='''||&owner||''' + and table_name='''||&table_name||''' + and partition_name='''||partition_name||'''' + ),'/ROWSET/ROW/HIGH_VALUE/text()').getstringval() + ,'[^;]*apos; *([^;]*) *[^;]apos;.*','\1')) + ,'yyyy-mm-dd hh24:mi:ss') high_value + ,to_char(last_analyzed, 'dd/mm/yyyy hh24:mi:ss') last_anal +from + ( + select + table_name + ,partition_name + ,partition_position + ,subpartition_count + ,num_rows + ,last_analyzed + ,tablespace_name + from + all_tab_partitions +where + table_owner = upper('&owner') +and + table_name = upper('&table_name') +); + + + \ No newline at end of file diff --git a/mhouri/getPrefs.sql b/mhouri/getPrefs.sql new file mode 100644 index 0000000..9c452f8 --- /dev/null +++ b/mhouri/getPrefs.sql @@ -0,0 +1,43 @@ +--***************************************************************************** +-- Name : get_prefs +-- Date : October 2018 +-- Author : Mohamed Houri +-- Purpose: gets the value of dbms_stats preference at global or table level +-- +-- +-- Input arguments: +-- pname - preference name +-- The default value for following preferences can be retrieved. +-- CASCADE +-- DEGREE +-- ESTIMATE_PERCENT +-- METHOD_OPT +-- NO_INVALIDATE +-- GRANULARITY +-- PUBLISH +-- INCREMENTAL +-- INCREMENTAL_LEVEL +-- INCREMENTAL_STALENESS +-- GLOBAL_TEMP_TABLE_STATS +-- STALE_PERCENT +-- AUTOSTATS_TARGET +-- CONCURRENT +-- TABLE_CACHED_BLOCKS +-- OPTIONS +-- STAT_CATEGORY +-- PREFERENCE_OVERRIDES_PARAMETER +-- APPROXIMATE_NDV_ALGORITHM +-- AUTO_STAT_EXTENSIONS +-- WAIT_TIME_TO_UPDATE_STATS +-- +-- +-- ownname - owner name +-- tabname - table name +-- +-- +-- Exceptions: +-- ORA-20001: Invalid input values +-- +--************************************************************************** + +select dbms_stats.get_prefs('&preference', tabname => '&tablename') prefs from dual; \ No newline at end of file diff --git a/mhouri/getScalarSubInSQL.sql b/mhouri/getScalarSubInSQL.sql new file mode 100644 index 0000000..3fd9611 --- /dev/null +++ b/mhouri/getScalarSubInSQL.sql @@ -0,0 +1,63 @@ +--|-------------------------------------------------------------------| +--|Author : Mhouri | +--|Date : mars 2023 | +--|Scope : find all SQL statments calling scalar subquery function | +--| -- from memory | +--| -- from AWR | +--| UNION ALL is used instead of UNION because of distinct | +--| on CLOB (sql_text) | +--| Update : 20-03-2023 | +--| I workarround the distinct on CLOB by using | +--| dbms_lob.substr | +--|-------------------------------------------------------------------| +select + gv.sql_id + ,gv.force_matching_signature as force_match_sign + ,dbms_lob.substr(gv.sql_fulltext,32767) +from + gv$sql gv +where + gv.plsql_exec_time > 0 +-- Exclude non applicative schemas +and gv.parsing_schema_name not in + (select + db.username + from + dba_users db + where + db.oracle_maintained ='Y' + ) +-- Exclude INSERT/UPDATE/DELETE +-- exclude PL/SQL blocks +and gv.command_type not in ('2','6','7','47') +--exclude automatic tasks (stats, space, tuning) +and + gv.module != 'DBMS_SCHEDULER' +UNION ALL +select + st.sql_id + ,st.force_matching_signature as force_match_sign + ,dbms_lob.substr(qt.sql_text,32767) +from + dba_hist_sqlstat st + ,dba_hist_sqltext qt +where + st.sql_id = qt.sql_id +and + st.plsexec_time_delta > 0 +-- Exclude non applicative schemas +and st.parsing_schema_name not in + (select + db.username + from + dba_users db + where + db.oracle_maintained ='Y' + ) +-- Exclude INSERT/UPDATE/DELETE/CREATE +-- Exclude PL/SQL blocks +and qt.command_type not in ('1','2','6','7','47') +--exclude automatic tasks (stats, space, tuning) +and + st.module != 'DBMS_SCHEDULER' + order by 2; diff --git a/mhouri/getUndoHist.sql b/mhouri/getUndoHist.sql new file mode 100644 index 0000000..5fb4eff --- /dev/null +++ b/mhouri/getUndoHist.sql @@ -0,0 +1,69 @@ +----- ./MohamedUndoHist.sql ------------------------ +/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +|Author : Mohamed Houri | +|Date : 02/03/2020 | +|Scope : comments to be added here | +| : check historical undo, particularly ORA-01555 | +| : input dates have to be changed as a subtition parameters | +|++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +col snap_begin format a25 +col maxquerysqlid format a15 +col maxquerylen format 9999999 +col txncount format 9999999 +col ora_01555 format 99 +col undoblks format 9999999 +col undoConsump format 9999999 +col tuned_undoretention format 9999999 +col activeblks format 9999999 +col unexpiredblks format 9999999 +col expiredblks format 9999999 + +compute sum label 'Total Unexpired' of unexpiredblks on report +break on report +SELECT + snap_begin + ,maxquerysqlid + ,maxquerylen + ,txncount + ,unxpstealcnt + ,unxpblkrelcnt + ,unxpblkreucnt + ,expstealcnt + ,expblkrelcnt + ,expblkreucnt + ,nospaceerrcnt + ,ssolderrcnt ora_01555 + ,round(undoblks * 8 / 1024) undo_mb + ,tuned_undoretention + ,activeblks + ,unexpiredblks + ,expiredblks + FROM + (SELECT + sn.begin_interval_time snap_begin + ,sn.instance_number inst + ,st.maxquerylen + ,st.maxquerysqlid + ,st.unxpstealcnt + ,st.unxpblkrelcnt + ,st.unxpblkreucnt + ,st.expstealcnt + ,st.expblkrelcnt + ,st.expblkreucnt + ,st.ssolderrcnt + ,st.nospaceerrcnt + ,st.txncount + ,st.undoblks + ,st.tuned_undoretention + ,st.activeblks + ,st.unexpiredblks + ,st.expiredblks + FROM + dba_hist_undostat st, + dba_hist_snapshot sn + WHERE st.snap_id = sn.snap_id + AND begin_interval_time between to_date('&from_date','ddmmyyyy hh24:mi:ss') + and to_date('&to_date','ddmmyyyy hh24:mi:ss') + ) + ORDER by 1 asc, 3 desc; + diff --git a/mhouri/getarchiv.sql b/mhouri/getarchiv.sql new file mode 100644 index 0000000..56ebd00 --- /dev/null +++ b/mhouri/getarchiv.sql @@ -0,0 +1,6 @@ +-- check whether we are in archive mode log or not +archive log list + +SELECT LOG_MODE from v$database; + +show parameter recovery \ No newline at end of file diff --git a/mhouri/getredo.sql b/mhouri/getredo.sql new file mode 100644 index 0000000..7644f51 --- /dev/null +++ b/mhouri/getredo.sql @@ -0,0 +1,29 @@ +--|--------------------------------------------------------------------------------------| +--|MHouri | +--|thread# : représente le numéro du groupe dans lequel se trouve le redo log | +--|members : indique si le redo log est multiplexé (>1) ou pas(=1) | +--|redo_size_mb : la taille de chaque redo log file | +--|Total size : représente la taille réellement disponible pour gérer les transactions | +--| : cette taille ne prend pas en compte les redos log multiplexés. | +--|---------------------------------------------------------------------------------------| + +column REDOLOG_FILE_NAME format a50 + +compute sum label 'Total size' of size_MB on report + +break on report + select + a.group#, + a.thread#, + a.members, + a.sequence#, + a.archived, + a.status, + b.member as redolog_file_name, + trunc(a.bytes/power(1024,2),3) as redo_size_mb, + case when a.thread# = 1 then + trunc(a.bytes/power(1024,2),3) + else null end as size_MB +from gv$log a +join gv$logfile b on a.group#=b.group# +order by a.group# ; \ No newline at end of file diff --git a/mhouri/gv$getBreak.sql b/mhouri/gv$getBreak.sql new file mode 100644 index 0000000..1b64bd1 --- /dev/null +++ b/mhouri/gv$getBreak.sql @@ -0,0 +1,36 @@ +with got_my_sid as +(select + sid + ,inst_id + ,event + ,total_waits + from + gv$session_event + where + event = 'SQL*Net break/reset to client' + and sid = (select sid from v$mystat where rownum = 1) + ) +select + a.inst_id + ,a.sid + ,a.event + ,a.total_waits + -- ,s.schema# + -- ,s.schemaname + -- ,s.top_level_call# + ,(select l.top_level_call_name from v$toplevelcall l + where l.top_level_call# = s.top_level_call# + ) top_level_call + ,s.osuser + ,s.username sess_user + ,p.username proc_user + ,p.tracefile +from + gv$process p + ,gv$session s + ,got_my_sid a +where + p.addr = s.paddr +and a.sid = s.sid +and a.inst_id = s.inst_id; + diff --git a/mhouri/gvsql.sql b/mhouri/gvsql.sql new file mode 100644 index 0000000..a9520ed --- /dev/null +++ b/mhouri/gvsql.sql @@ -0,0 +1,23 @@ +col object_status format a10 +col end_of_fetch_count format 999 +SELECT + p.sql_id + ,p.child_number + --,p.plan_hash_value + ,p.is_bind_sensitive bsens + ,p.is_bind_aware baware + --,p.first_load_time + --,p.last_load_time + ,p.executions + ,p.end_of_fetch_count end_fetch + ,p.invalidations + ,p.object_status + FROM + gv$sql p +where + p.sql_id = '&sql_id' +and + p.is_shareable ='Y'; + + + \ No newline at end of file diff --git a/mhouri/h_hist1.sql b/mhouri/h_hist1.sql new file mode 100644 index 0000000..dc4d24c --- /dev/null +++ b/mhouri/h_hist1.sql @@ -0,0 +1,80 @@ +/* ----------------------------------------------------------------------------------| +|Author : Mohamed Houri | +|Date : 03/07/2020 | +|Scope : This script gives historical column histogram values | +| -- I am using sys.WRI$_OPTSTAT_HISTHEAD_HISTORY for this purpose | +| -- I am only able to say whether, previously, there was HISTOGRAM or not | +| -- I can't show the historical type of Histogram | +| | +|Usage : SQL> @h_hist1 | +| Enter value for table_name: t1 | +| Enter value for owner: test | +| Enter value for col_name: n2 | +-------------------------------------------------------------------------------------|*/ +col object_name format a20 +col column_name format a12 +col last_analyzed format a20 +col prev_last_analyzed format a20 +col histogram format a16 +col prev_histogram format a16 +WITH sq AS + ( + SELECT + object_id + ,object_name + ,subobject_name + FROM + dba_objects + WHERE + object_name = upper ('&&table_name') + AND owner = upper('&&owner') + AND subobject_name IS NULL + ) +SELECT + object_name + ,column_name + ,lead(prev_histogram,1,histogram) over (order by last_analyzed) histogram + ,last_analyzed + ,prev_histogram + ,prev_last_analyzed +FROM + ( + SELECT + object_name + ,column_name + ,(select histogram from all_tab_col_statistics where owner = upper('&&owner') + and table_name = upper('&&table_name') and column_name = upper('&&col_name')) histogram + ,last_analyzed + ,stat_time prev_last_analyzed + ,row_number() over (order by last_analyzed) rn + ,case when round(derivedDensity,9)= round(density,9) then 'NONE' else 'HISTOGRAM' end prev_histogram + FROM + ( + SELECT + object_name + ,column_name + ,to_char(savtime ,'dd/mm/yyyy hh24:mi:ss') last_analyzed + ,to_char(timestamp# ,'dd/mm/yyyy hh24:mi:ss') stat_time + ,density + ,1/distcnt derivedDensity + ,row_number() over (order by savtime) rn + ,lag(case when round(1/distcnt,9) = round(density,9) then 'NONE' else 'HISTOGRAM' end) over(order by savtime) hist_histogram + FROM + sys.WRI$_OPTSTAT_HISTHEAD_HISTORY + INNER JOIN sq ON object_id = obj# + INNER JOIN (SELECT + column_id + ,column_name + FROM + dba_tab_columns + WHERE + column_name = upper('&&col_name') + AND table_name = upper('&&table_name') + AND owner = upper('&&owner') + ) ON intcol# = column_id + ) +WHERE + rn >= 1 --exlcude/include the very first dbms_stat + ) +ORDER BY + last_analyzed; \ No newline at end of file diff --git a/mhouri/isInParse.sql b/mhouri/isInParse.sql new file mode 100644 index 0000000..8ec5793 --- /dev/null +++ b/mhouri/isInParse.sql @@ -0,0 +1,24 @@ +column in_exec format a15 +column in_hard_parse format a15 +column in_parse format a15 +column cnt format 9999 +compute sum label 'Total Elapsed' of cnt on report +break on report +select + sql_exec_id + ,in_sql_execution in_exec + ,in_parse + ,in_hard_parse + ,count(1) cnt +from + gv$active_session_history + where + sql_id = '&sql_id' +group by + sql_exec_id + ,in_sql_execution + ,in_parse + ,in_hard_parse +order by 5 desc +; + diff --git a/mhouri/isInSQLCurrentPerObj.sql b/mhouri/isInSQLCurrentPerObj.sql new file mode 100644 index 0000000..962c3d8 --- /dev/null +++ b/mhouri/isInSQLCurrentPerObj.sql @@ -0,0 +1,35 @@ +--|-------------------------------------------------------------------| +--|Author : Mhouri | +--|Date : september 20222 | +--|Scope : this script helps identifying whether the current sql_id | +--| is really the one that is responsible for the time stored | +--| into ASH. In other words, we can state whether the input | +--| sql_id has triggered a recursive sql id or not | +--|-------------------------------------------------------------------| +column is_sqlid_current format a10 +column event format a70 +column current_obj# format a30 +column cnt format 9999 +compute sum label 'Total Elapsed' of cnt on report +break on report +select + h.is_sqlid_current + ,h.event + ,ob.object_name + ,count(1) cnt +from + gv$active_session_history h + join dba_objects ob +on ob.object_id = h.current_obj# + where + sample_time between to_date('&from_date', 'mm/dd/yyyy hh24:mi:ss') + and to_date('&to_date', 'mm/dd/yyyy hh24:mi:ss') +and + sql_id = '&sql_id' +group by + h.is_sqlid_current + ,h.event + ,ob.object_name +order by 4 desc +; + diff --git a/mhouri/isSQLCurrent.sql b/mhouri/isSQLCurrent.sql new file mode 100644 index 0000000..2f84768 --- /dev/null +++ b/mhouri/isSQLCurrent.sql @@ -0,0 +1,29 @@ +--|-------------------------------------------------------------------| +--|Author : Mhouri | +--|Date : september 20222 | +--|Scope : this script helps identifying whether the current sql_id | +--| is really the one that is responsible for the time stored | +--| into ASH. In other words, we can state whether the input | +--| sql_id has triggered a recursive sql id or not | +--|-------------------------------------------------------------------| +column sql_current format a15 +column cnt format 9999 +compute sum label 'Total Elapsed' of cnt on report +break on report +select + sql_exec_id + ,is_sqlid_current sql_current + ,count(1) cnt +from + gv$active_session_history + where + sql_id = '&sql_id' + and + sample_time between to_date('&datefrom', 'mm/dd/yyyy hh24:mi:ss') + and to_date('&dateto', 'mm/dd/yyyy hh24:mi:ss') +group by + sql_exec_id + ,is_sqlid_current +order by 3 desc +; + diff --git a/mhouri/isSQLusingSPM.sql b/mhouri/isSQLusingSPM.sql new file mode 100644 index 0000000..e8aec27 --- /dev/null +++ b/mhouri/isSQLusingSPM.sql @@ -0,0 +1,53 @@ +--https://orastory.wordpress.com/2014/02/05/awr-was-a-baselined-plan-used/ +with subq_mysql as + (select sql_id + , (select dbms_sqltune.sqltext_to_signature(ht.sql_text) + from dual) sig + from dba_hist_sqltext ht + where sql_id = '&sql_id') + , subq_baselines as + (select b.signature + , b.plan_name + , b.accepted + , b.created + , o.plan_id + from subq_mysql ms + , dba_sql_plan_baselines b + , sys.sqlobj$ o + where b.signature = ms.sig + and o.signature = b.signature + and o.name = b.plan_name) + , subq_awr_plans as + (select sn.snap_id + , to_char(sn.end_interval_time,'DD-MON-YYYY HH24:MI') dt + , hs.sql_id + , hs.plan_hash_value + , t.phv2 + , ms.sig + from subq_mysql ms + , dba_hist_sqlstat hs + , dba_hist_snapshot sn + , dba_hist_sql_plan hp + , xmltable('for $i in /other_xml/info + where $i/@type eq "plan_hash_2" + return $i' + passing xmltype(hp.other_xml) + columns phv2 number path '/') t + where hs.sql_id = ms.sql_id + and sn.snap_id = hs.snap_id + and sn.instance_number = hs.instance_number + and hp.sql_id = hs.sql_id + and hp.plan_hash_value = hs.plan_hash_value + and hp.other_xml is not null) + select awr.* + , nvl((select max('Y') + from subq_baselines b + where b.signature = awr.sig + and b.accepted = 'YES'),'N') does_baseline_exist + , nvl2(b.plan_id,'Y','N') is_baselined_plan + , to_char(b.created,'DD-MON-YYYY HH24:MI') when_baseline_created + from subq_awr_plans awr + , subq_baselines b + where b.signature (+) = awr.sig + and b.plan_id (+) = awr.phv2 + order by awr.snap_id; diff --git a/mhouri/isSysmodifiable.sql b/mhouri/isSysmodifiable.sql new file mode 100644 index 0000000..1c75dfb --- /dev/null +++ b/mhouri/isSysmodifiable.sql @@ -0,0 +1,25 @@ +-- script used to check whether you have to stop/restart the database when you change +-- a particular parameter value or not + + -- IMMEDIATE : no need to restart the instance + -- FALSE : you need to restart the instance + -- DEFERRED : session has to be reconnected to see the new value: but no need to stop/restart the instance +col name for a35 + +select + name + ,issys_modifiable + --,ispdb_modifiable +from + gv$parameter + where + name = '¶meter_name' +union + select + n.ksppinm as name + , c.ksppstdf as issys_modifiable +from + sys.x$ksppi n + ,sys.x$ksppcv c +where n.indx=c.indx +and lower(n.ksppinm) = lower('¶meter_name'); \ No newline at end of file diff --git a/mhouri/loadSPMfromAWR.sql b/mhouri/loadSPMfromAWR.sql new file mode 100644 index 0000000..8b4e93d --- /dev/null +++ b/mhouri/loadSPMfromAWR.sql @@ -0,0 +1,104 @@ +/* --|-------------------------------------------------------------------------| + --| Author : Mohamed Houri --| + --| Date : 08/06/2022 --| + --| inspired by : Carlos Sierra create_spb_from_awr.sq script --| + --| Scope : Create a SPM baseline from a historical execution plan --| + --| Usage : @loadSPMfromAWR --| + --| Remarks : the begin and end snap must be different --| + --| : the plan hash value must be present in the end snap --| + --| : for example if you are in the following case --| + --| --| + --| SQL> @loadSPMAWR --| + --| Enter sql_id: b64jvr5722ujx --| + --| --| + --| PLAN_HASH_VALUE AVG_ET_SECS EXECUTIONS_TOTAL --| + --| --------------- ----------- ---------------- --| + --| 1362763525 17.825681 1 --| + --| 1518369540 --| + --| --| + --| Enter Plan Hash Value: 1362763525 --| + --| --| + --| BEGIN_SNAP_ID END_SNAP_ID --| + --| ------------- ----------- --| + --| 692 692 --| + --| --| + --| Enter begin snap: 691 spot this --| + --| Enter end snap: 692 --| + --| --| + --| PL/SQL procedure successfully completed. --| + --| --| + --| RS --| + --| ---------- --| + --| 1 --| + --|-----------------------------------------------------------------------| */ + +acc sql_id prompt 'Enter sql_id: '; + +with p as + (SELECT + plan_hash_value + FROM + dba_hist_sql_plan + WHERE + sql_id = trim('&&sql_id.') + AND other_xml IS NOT NULL ) +,a as + (SELECT + plan_hash_value + ,SUM(elapsed_time_total)/SUM(executions_total) avg_et_secs + ,MAX(executions_total) executions_total + FROM + dba_hist_sqlstat + WHERE + sql_id = TRIM('&&sql_id.') + AND executions_total > 0 + GROUP BY + plan_hash_value + ) +SELECT + p.plan_hash_value + ,ROUND(a.avg_et_secs/1e6, 6) avg_et_secs + ,a.executions_total +FROM + p,a +WHERE + p.plan_hash_value = a.plan_hash_value(+) +ORDER BY + avg_et_secs NULLS LAST; + +acc plan_hash_value prompt 'Enter Plan Hash Value: '; + +COL dbid new_v dbid NOPRI; +SELECT dbid FROM v$database; + +col begin_snap_id new_v begin_snap_id; +col end_snap_id new_v end_snap_id; + +SELECT + MIN(p.snap_id) begin_snap_id + ,MAX(p.snap_id) end_snap_id +FROM + dba_hist_sqlstat p + ,dba_hist_snapshot s + WHERE + p.dbid = &&dbid + AND p.sql_id = '&&sql_id.' + AND p.plan_hash_value = to_number('&&plan_hash_value.') + AND s.snap_id = p.snap_id + AND s.dbid = p.dbid + AND s.instance_number = p.instance_number; + +acc begin_snap_id prompt 'Enter begin snap: '; +acc end_snap_id prompt 'Enter end snap: '; + +var rs number; + +begin + :rs := dbms_spm.load_plans_from_awr(begin_snap => &&begin_snap_id. + ,end_snap => &&end_snap_id. + ,basic_filter => q'# sql_id = TRIM('&&sql_id.') and plan_hash_value = TO_NUMBER('&&plan_hash_value.') #'); +end; +/ + +print rs; + \ No newline at end of file diff --git a/mhouri/loadSPMfromCache.sql b/mhouri/loadSPMfromCache.sql new file mode 100644 index 0000000..961725c --- /dev/null +++ b/mhouri/loadSPMfromCache.sql @@ -0,0 +1,17 @@ + --|-------------------------------------------------------------| + --| Author : Mohamed Houri --| + --| Date : 08/06/2022 --| + --| Scope : Create a SPM baseline from a cursor cache --| + --| Usage : @loadSPMfromCache --| + --| Remarks : --| + --|-------------------------------------------------------------| +set serveroutput on +declare + spm_op pls_integer; +begin + spm_op := dbms_spm.load_plans_from_cursor_cache (sql_id => '&sqlid' + ,plan_hash_value => to_number(trim('&plan_hash_value')) + ); + dbms_output.put_line('Plans Loaded into SPB :'||spm_op); +end; +/ \ No newline at end of file diff --git a/mhouri/nonsharedMho.sql b/mhouri/nonsharedMho.sql new file mode 100644 index 0000000..310f01f --- /dev/null +++ b/mhouri/nonsharedMho.sql @@ -0,0 +1,18 @@ +select + sh.sql_id, + xt.c1, + xt.r1 raison, + xt.d1 + from + gv$sql_shared_cursor sh + inner join xmltable ( + '/ChildNode' + passing xmlparse(content sh.reason) + columns + c1 number path 'ChildNumber', + r1 varchar2(40) path 'reason', + d1 varchar2(40) path 'details' + ) + xt on ( 1 = 1 ) + where + sh.sql_id = '&sql_id'; diff --git a/mhouri/phv2.sql b/mhouri/phv2.sql new file mode 100644 index 0000000..b4a944c --- /dev/null +++ b/mhouri/phv2.sql @@ -0,0 +1,19 @@ +/* -----------------------------------------------------------------------------| +|Author : Mohamed Houri | +|Date : 03/07/2017 | +|Scope : gives plan_hash_value and phv2 that includes the predicate part | +| | +--------------------------------------------------------------------------------|*/ +SELECT + p.sql_id + ,p.plan_hash_value + ,p.child_number + ,t.phv2 + FROM v$sql_plan p + ,xmltable('for $i in /other_xml/info + where $i/@type eq "plan_hash_2" + return $i' + passing xmltype(p.other_xml) + columns phv2 number path '/') t + WHERE p.sql_id = '&1' + and p.other_xml is not null; \ No newline at end of file diff --git a/mhouri/sqlHist.sql b/mhouri/sqlHist.sql new file mode 100644 index 0000000..c0dcb24 --- /dev/null +++ b/mhouri/sqlHist.sql @@ -0,0 +1,86 @@ +/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +Author : Mohamed Houri +Date : 03/08/2016 +Scope : This is an updated version of an existing script (over the web) + in which I have taken into account the following points: + + -- Superfluous executions and not used plan_hash_value are excluded. + Superfluous plan_hash_value are inserted into dba_hist_sqlstat + because they were present in gv$sql at the AWR capture time. + This generally happens when a SQL_ID has several child cursors + in gv$sql. All these child cursors will be captured regardless + of their activity (used or not used). These superfluous executions + are excluded using the following where clause: + + WHERE avg_lio != 0 + + But a "lock table" for example doesn't consume any logical I/O. This + is why I added the following extra where clause: + + OR (avg_lio =0 AND avg_etime > 0) + + -- When a query is run in PARALLEL the avg_etime represents the time + spent by all parallel servers concurrently. So if avg_px is not null then + avg_etime represents the cumulated time of all PX servers. To have + the approximate wall clock time of the query I have divided the + avg_time by the avg_px to obtain avg_px_time. + + Warning : avg_px_time do not include the Query Coordinator time + I still have not figured out how to get the QC time from a historical + table. I have a script QCelaps.sql which gives the QC time but it + is based on gv$sql_monitor. This is obviously not reliable when + dealing with historical executions. + + Investigation : may be I have to investigate the new 12c RTSM + historical tables : dba_hist_reports + dba_hist_reports_details +Update : 28-09-2016 : add end_of_fetch column + if end_of_fetch = 0 and exec = 1 then + this means that the query not finished during the snapshot + end if + When you see avg_rows = 0 this doesnt' necessarily means that + the query has not finished during the snapshot + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +col snap_begin format a25 +col sql_profile format a20 +col execs format 9999999 +SELECT + snap_begin + ,snap_id + ,plan_hash_value + ,sql_profile + ,execs + ,end_of_fetch + ,avg_etime + ,avg_px + ,trunc(avg_etime/decode(avg_px,0,1,avg_px) ,2) avg_px_time + ,avg_pio + ,avg_lio + ,avg_rows + FROM + (SELECT + sn.begin_interval_time snap_begin + ,sn.snap_id + ,plan_hash_value + ,st.sql_profile + ,executions_delta execs + ,end_of_fetch_count_delta end_of_fetch + ,trunc(elapsed_time_delta/1e6/decode(executions_delta, 0, 1, executions_delta)) avg_etime + ,round(disk_reads_delta/decode(executions_delta,0,1, executions_delta),1) avg_pio + ,round(buffer_gets_delta/decode(executions_delta,0,1, executions_delta), 1) avg_lio + ,round(px_servers_execs_delta/decode(executions_delta,0,1, executions_delta), 1) avg_px + ,round(rows_processed_delta/decode(executions_delta,0, 1, executions_delta), 1) avg_rows + FROM + dba_hist_sqlstat st, + dba_hist_snapshot sn + WHERE st.snap_id = sn.snap_id + AND st.instance_number = sn.instance_number + AND sql_id = '&sql_id' + AND begin_interval_time > to_date('&from_date','ddmmyyyy') + ) + WHERE avg_lio != 0 + OR (avg_lio =0 AND avg_etime > 0) + ORDER by 1 asc; + + \ No newline at end of file diff --git a/mhouri/sqlmonHist.sql b/mhouri/sqlmonHist.sql new file mode 100644 index 0000000..227c787 --- /dev/null +++ b/mhouri/sqlmonHist.sql @@ -0,0 +1,22 @@ +SELECT report_id, key1 sql_id, key2 sql_exec_id, key3 sql_exec_start + FROM dba_hist_reports + WHERE component_name = 'sqlmonitor' +and key1 = ''; + + +SELECT DBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAIL(RID => 1022, TYPE => 'text') + FROM dual; + +-- another way to do this + +SELECT + report_id, + EXTRACTVALUE(XMLType(report_summary),'/report_repository_summary/sql/@sql_id') sql_id, + EXTRACTVALUE(XMLType(report_summary),'/report_repository_summary/sql/@sql_exec_id') sql_exec_id, + EXTRACTVALUE(XMLType(report_summary),'/report_repository_summary/sql/@sql_exec_start') sql_exec_start +FROM + dba_hist_reports +WHERE + component_name = 'sqlmonitor' + and EXTRACTVALUE(XMLType(report_summary),'/report_repository_summary/sql/@sql_id')='6qkdybw3ruwtx' +; \ No newline at end of file diff --git a/mhouri/sqlstats.sql b/mhouri/sqlstats.sql new file mode 100644 index 0000000..649690e --- /dev/null +++ b/mhouri/sqlstats.sql @@ -0,0 +1,13 @@ +ol execs format 99999999 +select + child_number child + --, sql_profile + , plan_hash_value + , round(buffer_gets/decode(nvl(executions,0),0,1,executions)) avg_gets + , round(disk_reads/decode(nvl(executions,0),0,1,executions)) avg_pios + , (elapsed_time/1000000)/decode(nvl(executions,0),0,1,executions) avg_etime + , executions execs +from + gv$sql +where + sql_id = '&sql_id'; \ No newline at end of file diff --git a/mhouri/xpgv$.sql b/mhouri/xpgv$.sql new file mode 100644 index 0000000..2b5338f --- /dev/null +++ b/mhouri/xpgv$.sql @@ -0,0 +1,31 @@ +SELECT + RPAD('Inst: '||v.inst_id, 9)||' '||RPAD('Child: '||v.child_number, 11) inst_child + ,t.plan_table_output +FROM + gv$sql v, + TABLE(DBMS_XPLAN.DISPLAY('gv$sql_plan_statistics_all' + , NULL + , 'ADVANCED ALLSTATS LAST' + , 'inst_id = '||v.inst_id||' + AND sql_id = '''||v.sql_id||''' AND child_number = '||v.child_number + ) + ) t + WHERE + v.sql_id = '&&sql_id.' + AND v.loaded_versions > 0; + + +SELECT + t.plan_table_output +FROM + gv$sql v, + TABLE(DBMS_XPLAN.DISPLAY('gv$sql_plan_statistics_all' + , NULL + , 'ADVANCED ALLSTATS LAST' + , 'inst_id = '||v.inst_id||' + AND sql_id = '''||v.sql_id||''' AND child_number = '||v.child_number + ) + ) t + WHERE + v.sql_id = '&&sql_id.' + AND v.loaded_versions > 0; \ No newline at end of file diff --git a/mhouri/xpsimp.sql b/mhouri/xpsimp.sql new file mode 100644 index 0000000..94b46fb --- /dev/null +++ b/mhouri/xpsimp.sql @@ -0,0 +1 @@ +select * from table(dbms_xplan.display_cursor); \ No newline at end of file diff --git a/my/.DS_Store b/my/.DS_Store new file mode 100644 index 0000000..3770c14 Binary files /dev/null and b/my/.DS_Store differ diff --git a/my/Rocky_Linux/gitlab_ce_docker_second_edition.md b/my/Rocky_Linux/gitlab_ce_docker_second_edition.md new file mode 100644 index 0000000..134e90b --- /dev/null +++ b/my/Rocky_Linux/gitlab_ce_docker_second_edition.md @@ -0,0 +1,72 @@ +In this example gitlab will be accessible through the public URL: http://code.databasepro.fr + +As prerequisits: +- A valid SSL certificate for the subdomain `code.databasepro.fr` was generated (using **LetsEncrypt** `certbot`) +- a reverse-proxy was defined. + +Examlple of *nginx* reverse-proxy configuration: + + server { + listen 80; + server_name code.databasepro.fr; + access_log /wwwlogs/code.databasepro.fr.access.log combined; + error_log /wwwlogs/code.databasepro.fr.error.log info; + location / { + root /www/code.databasepro.fr; + index index.html index.htm; + autoindex on; + } + rewrite ^ https://code.databasepro.fr$request_uri? permanent; + } + server { + listen 443 ssl http2; + ssl_certificate /etc/letsencrypt/live/code.databasepro.fr/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/code.databasepro.fr/privkey.pem; + ssl_stapling on; + server_name code.databasepro.fr; + access_log /wwwlogs/code.databasepro.fr.access.log combined; + error_log /wwwlogs/code.databasepro.fr.error.log info; + location / { + proxy_pass https://192.168.0.91:7004/; + } + } + + +Create persistent directories: + + mkdir /app/persistent_docker/gitlab + cd /app/persistent_docker/gitlab + mkdir config data logs + + +Pull the *Comunity Edition* of gitlab: + + docker pull gitlab/gitlab-ce + + +Create `docker-compose.yaml` file in `/app/persistent_docker/gitlab`: + + services: + gitlab: + image: 'gitlab/gitlab-ce:latest' + restart: always + hostname: 'code.databasepro.fr' + environment: + gitlab_omnibus_config: | + external_url 'https://code.databasepro.fr' + # add any other gitlab.rb configuration here, each on its own line + ports: + - 7004:443 + volumes: + - /app/persistent_docker/gitlab/config:/etc/gitlab + - /app/persistent_docker/gitlab/logs:/var/log/gitlab + - /app/persistent_docker/gitlab/data:/var/opt/gitlab + + +Start container: + + docker-compose up -d + + +Initial `root` password can be found in `/app/persistent_docker/gitlab/config/initial_root_password` + diff --git a/my/Rocky_Linux/install_01.txt b/my/Rocky_Linux/install_01.txt new file mode 100644 index 0000000..6df6dc3 --- /dev/null +++ b/my/Rocky_Linux/install_01.txt @@ -0,0 +1,41 @@ +virt-install \ + --graphics vnc,listen=0.0.0.0 \ + --name=seedmachine \ + --vcpus=2 \ + --memory=4096 \ + --network bridge=br0 \ + --network bridge=br0 \ + --cdrom=/vm/hdd0/_kit_/Rocky-8.5-x86_64-minimal.iso \ + --disk /vm/ssd0/seedmachine/hdd_01.img,size=16 \ + --disk /vm/ssd0/seedmachine/app_01.img,size=32 \ + --disk /vm/ssd0/seedmachine/swap_01.img,size=8 \ + --os-variant=rocky8.5 + + +# Packages +dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm +dnf install epel-release elrepo-release -y + +dnf install -y htop.x86_64 lsof.x86_64 cifs-utils.x86_64 tar.x86_64 bzip2.x86_64 telnet.x86_64 nmap-ncat.x86_64 bind-utils.x86_64 wget epel-release +dnf install -y rlwrap.x86_64 screen.x86_64 banner.x86_64 cowsay.noarch certbot.noarch kernel-headers.x86_64 kernel-devel kmod-wireguard wireguard-tools git.x86_64 +dnf install -y ethtool.x86_64 net-tools.x86_64 ipmitool.x86_64 +dnf install -y gcc.x86_64 redhat-rpm-config automake.noarch make.x86_64 + +# Ruby +Install Ruby avec rvm +Install roo module avec gem + + + + + +# Firewall +systemctl status firewalld +systemctl stop firewalld +systemctl disable firewalld + +# SELinux +getenforce +vi /etc/selinux/config +disabled + diff --git a/my/Rocky_Linux/mazzolino_tiddlywiki.md b/my/Rocky_Linux/mazzolino_tiddlywiki.md new file mode 100644 index 0000000..7ce05d2 --- /dev/null +++ b/my/Rocky_Linux/mazzolino_tiddlywiki.md @@ -0,0 +1,46 @@ +# Get basic docker image + + docker pull mazzolino/tiddlywiki + + +# Customize the image upgrading tiddlywiki + +Create persistent directory: + + mkdir -p /app/persistent_docker/tiddlywiki + +Create `Dockerfile`: + + FROM mazzolino/tiddlywiki:latest + MAINTAINER Valeriu PLESNILA + RUN npm update -g tiddlywiki + + +Build new image `my_tiddlywiki`: + + docker build -t my_tiddlywiki . + + +Create `docker-compose.yaml` file: + + services: + wiki: + image: my_tiddlywiki + restart: always + environment: + - USERNAME=***** + - PASSWORD=***** + ports: + - 8080:8080 + volumes: + - /app/persistent_docker/tiddlywiki:/var/lib/tiddlywiki + + +# Create and run the container: + + docker-compose up -d + + + + + \ No newline at end of file diff --git a/my/Rocky_Linux/nginx_docker.md b/my/Rocky_Linux/nginx_docker.md new file mode 100644 index 0000000..a3e06c9 --- /dev/null +++ b/my/Rocky_Linux/nginx_docker.md @@ -0,0 +1,66 @@ +List available docker images: + + docker search nginx + +Download official image: + + docker pull nginx + +Create persistent directory: + + mkdir -p /app/persistent_docker/nginx + cd /app/persistent_docker/nginx + mkdir www conf logs + +Create `/app/persistent_docker/nginx/conf/nginx.conf`: + + events { + + } + error_log /wwwlogs/error.log info; + http { + + server { + listen 80; + server_name localhost; + access_log /wwwlogs/access.log combined; + location / { + root /www/demo; + index index.html index.htm; + } + } + + +Create then root directory for default site: + + mkdir /app/persistent_docker/nginx/www/demo + echo "Hello world" > /app/persistent_docker/nginx/www/demo/index.html + +Start the container: + + docker run -p 80:80 -p 443:443 --name nginx -v /etc/letsencrypt:/etc/letsencrypt -v /app/persistent_docker/nginx/www:/www -v /app/persistent_docker/nginx/conf:/etc/nginx -v /app/persistent_docker/nginx/logs:/wwwlogs -d nginx + + +In order to use docker-compose, create `docker-compose.yml`: + + services: + nginx: + image: nginx + restart: always + volumes: + - /etc/letsencrypt:/etc/letsencrypt + - /app/persistent_docker/nginx/www:/www + - /app/persistent_docker/nginx/conf:/etc/nginx + - /app/persistent_docker/nginx/logs:/wwwlogs + ports: + - 80:80 + - 443:443 + + +Start the container and set the autostart: + + docker-compose up -d + docker update --restart unless-stopped nginx + + + diff --git a/my/awrsqlid.sql b/my/awrsqlid.sql new file mode 100644 index 0000000..ec92297 --- /dev/null +++ b/my/awrsqlid.sql @@ -0,0 +1,53 @@ +@@myheader.sql + +COLUMN iname HEADING "Instance" FORMAT A8 +COLUMN snap_id HEADING "Snap|Id" FORMAT 9999999 +COLUMN endsnaptime HEADING "End|snaphot|time" FORMAT A11 +COLUMN plan_hash_value HEADING "Plan|hash|value" +COLUMN executions_delta HEADING "#Ex" FORMAT 999 +COLUMN buffer_gets_delta HEADING "Buffer|gets" +COLUMN bufferperexec HEADING "Buffer|gets|/exec" FORMAT 9999999999 +COLUMN optimizer_cost HEADING "0ptimizer|cost" +COLUMN rows_processed_delta HEADING "#Rows" +COLUMN sql_profile HEADING "SQL|Prof" FORMAT A4 +COLUMN elapsed_time_delta HEADING "Elapsed|time|/exec|(sec)" FORMAT 99999 +COLUMN cpu_time_delta HEADING "CPU|time|/exec|(sec)" FORMAT 9999 +COLUMN iowait_delta HEADING "IO|time|/exec|(sec)" FORMAT 99999 +COLUMN px_servers_execs_delta HEADING "Px" FORMAT 999 +COLUMN disk_reads_delta HEADING "Disk|reads" +COLUMN io_offload_elig_bytes_delta HEADING "Elig|Mb" FORMAT 999999 +COLUMN io_interconnect_bytes_delta HEADING "Inter|Mb" FORMAT 999999 + +select + i.instance_name iname, + sqlstat.snap_id, + to_char(end_interval_time,'dd/mm hh24:mi') endsnaptime, + plan_hash_value, + optimizer_cost, + executions_delta, + buffer_gets_delta, + buffer_gets_delta/executions_delta bufferperexec, + decode (sql_profile,null, '',substr(sql_profile,1,4)) sql_profile, + px_servers_execs_delta, + disk_reads_delta, + round(elapsed_time_delta/1000000) elapsed_time_delta, + round(cpu_time_delta/1000000) cpu_time_delta, + round(iowait_delta/1000000) iowait_delta, + io_offload_elig_bytes_delta/1024/1024 io_offload_elig_bytes_delta, + io_interconnect_bytes_delta/1024/1024 io_interconnect_bytes_delta, + rows_processed_delta +from + dba_hist_sqlstat sqlstat + join dba_hist_snapshot snap on (sqlstat.snap_id=snap.snap_id) and (sqlstat.INSTANCE_NUMBER=snap.INSTANCE_NUMBER) + join gv$instance i on sqlstat.instance_number=i.instance_number +where + snap.begin_interval_time>=&&2 + and snap.end_interval_time<=&&3 + and sql_id='&&1' + and executions_delta>0 +order by + sqlstat.snap_id +/ + + +@@myfooter.sql diff --git a/my/bak/sqlmon_lsrep.sql b/my/bak/sqlmon_lsrep.sql new file mode 100644 index 0000000..b0d51e9 --- /dev/null +++ b/my/bak/sqlmon_lsrep.sql @@ -0,0 +1,121 @@ +/* + +Usage: + @sqlmon_lsrep + +Examples: + + @sqlmon_lsrep 1=1 sysdate-1 sysdate + @sqlmon_lsrep "sql_id='c5wnbwzzc7h3k'" sysdate-31 sysdate + @sqlmon_lsrep 1=1 "timestamp'2023-02-12 19:31:10'" "timestamp'2023-02-12 22:00:31'" + @sqlmon_lsrep "t.session_id=303 and session_serial#=59545" sysdate-10 sysdate "6 asc" + +*/ + +@@myheader.sql + +COLUMN _order_by_clause NEW_VALUE order_by_clause NOPRINT + +set term off +SELECT + DECODE('&&4','','1,4 ASC','&&4') "_order_by_clause" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * List SQL Monitor reports +PROMPT * +PROMPT * Input Parameters +PROMPT * - where clause = &&1 +PROMPT * - min timestamp = &&2 +PROMPT * - min timestamp = &&3 +PROMPT * - order by list = &&order_by_clause +PROMPT *********************************************************************** + +set pages 50 + +column report_id format 99999 heading 'Report|ID' +column status format a15 heading 'Status' +column sql_id format a17 heading 'SQL_ID' +column plan_hash format a15 heading 'Plan|hash value' +column sql_exec_start format a21 heading 'SQL|start' +column sql_exec_id format a12 heading 'SQL|exec ID' +column elap_sec format 9999.99 heading 'Elapsed|sec' +column cpu_sec format 9999.99 heading 'CPU|sec' +column io_sec format 9999.99 heading 'IO|sec' +column buffer_gets format a9 heading 'Buffer|gets' +column px_servers_requested format a3 heading 'PX|req' +column px_servers_allocated format a3 heading 'PW|all' +column sess format a16 heading 'Session' +column username format a15 heading 'Username' + + + +SELECT /*+ NO_XML_QUERY_REWRITE */ + t.report_id + , t.key1 sql_id + , t.key2 sql_exec_id + , to_char(to_date(t.key3,'MM:DD:YYYY HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') sql_exec_start + , x.plan_hash + , x.elapsed_time/1000000 elap_sec + , x.cpu_time/1000000 cpu_sec + , x.user_io_wait_time/1000000 io_sec + , x.buffer_gets + , x.username + , ''''||t.session_id||','||t.session_serial#||'@'||t.instance_number||'''' sess + , x.px_servers_requested + , x.px_servers_allocated + , x.status +FROM dba_hist_reports t + , xmltable('/report_repository_summary/sql' + PASSING xmlparse(document t.report_summary) + COLUMNS + sql_id path '@sql_id' + , sql_exec_start path '@sql_exec_start' + , sql_exec_id path '@sql_exec_id' + , status path 'status' + , sql_text path 'sql_text' + , first_refresh_time path 'first_refresh_time' + , last_refresh_time path 'last_refresh_time' + , refresh_count path 'refresh_count' + , inst_id path 'inst_id' + , session_id path 'session_id' + , session_serial path 'session_serial' + , user_id path 'user_id' + , username path 'user' + , con_id path 'con_id' + , con_name path 'con_name' + , modul path 'module' + , action path 'action' + , service path 'service' + , program path 'program' + , plan_hash path 'plan_hash' + , is_cross_instance path 'is_cross_instance' + , dop path 'dop' + , instances path 'instances' + , px_servers_requested path 'px_servers_requested' + , px_servers_allocated path 'px_servers_allocated' + , duration path 'stats/stat[@name="duration"]' + , elapsed_time path 'stats/stat[@name="elapsed_time"]' + , cpu_time path 'stats/stat[@name="cpu_time"]' + , user_io_wait_time path 'stats/stat[@name="user_io_wait_time"]' + , application_wait_time path 'stats/stat[@name="application_wait_time"]' + , concurrency_wait_time path 'stats/stat[@name="concurrency_wait_time"]' + , cluster_wait_time path 'stats/stat[@name="cluster_wait_time"]' + , plsql_exec_time path 'stats/stat[@name="plsql_exec_time"]' + , other_wait_time path 'stats/stat[@name="other_wait_time"]' + , buffer_gets path 'stats/stat[@name="buffer_gets"]' + , read_reqs path 'stats/stat[@name="read_reqs"]' + , read_bytes path 'stats/stat[@name="read_bytes"]' + ) x +where &&1 +and t.COMPONENT_NAME = 'sqlmonitor' +and to_date(t.key3,'MM:DD:YYYY HH24:MI:SS') between &&2 and &&3 +order by &&order_by_clause +/ + +@@myfooter.sql + + diff --git a/my/bak/sqlmon_lsrep_01.sql b/my/bak/sqlmon_lsrep_01.sql new file mode 100644 index 0000000..b0d51e9 --- /dev/null +++ b/my/bak/sqlmon_lsrep_01.sql @@ -0,0 +1,121 @@ +/* + +Usage: + @sqlmon_lsrep + +Examples: + + @sqlmon_lsrep 1=1 sysdate-1 sysdate + @sqlmon_lsrep "sql_id='c5wnbwzzc7h3k'" sysdate-31 sysdate + @sqlmon_lsrep 1=1 "timestamp'2023-02-12 19:31:10'" "timestamp'2023-02-12 22:00:31'" + @sqlmon_lsrep "t.session_id=303 and session_serial#=59545" sysdate-10 sysdate "6 asc" + +*/ + +@@myheader.sql + +COLUMN _order_by_clause NEW_VALUE order_by_clause NOPRINT + +set term off +SELECT + DECODE('&&4','','1,4 ASC','&&4') "_order_by_clause" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * List SQL Monitor reports +PROMPT * +PROMPT * Input Parameters +PROMPT * - where clause = &&1 +PROMPT * - min timestamp = &&2 +PROMPT * - min timestamp = &&3 +PROMPT * - order by list = &&order_by_clause +PROMPT *********************************************************************** + +set pages 50 + +column report_id format 99999 heading 'Report|ID' +column status format a15 heading 'Status' +column sql_id format a17 heading 'SQL_ID' +column plan_hash format a15 heading 'Plan|hash value' +column sql_exec_start format a21 heading 'SQL|start' +column sql_exec_id format a12 heading 'SQL|exec ID' +column elap_sec format 9999.99 heading 'Elapsed|sec' +column cpu_sec format 9999.99 heading 'CPU|sec' +column io_sec format 9999.99 heading 'IO|sec' +column buffer_gets format a9 heading 'Buffer|gets' +column px_servers_requested format a3 heading 'PX|req' +column px_servers_allocated format a3 heading 'PW|all' +column sess format a16 heading 'Session' +column username format a15 heading 'Username' + + + +SELECT /*+ NO_XML_QUERY_REWRITE */ + t.report_id + , t.key1 sql_id + , t.key2 sql_exec_id + , to_char(to_date(t.key3,'MM:DD:YYYY HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') sql_exec_start + , x.plan_hash + , x.elapsed_time/1000000 elap_sec + , x.cpu_time/1000000 cpu_sec + , x.user_io_wait_time/1000000 io_sec + , x.buffer_gets + , x.username + , ''''||t.session_id||','||t.session_serial#||'@'||t.instance_number||'''' sess + , x.px_servers_requested + , x.px_servers_allocated + , x.status +FROM dba_hist_reports t + , xmltable('/report_repository_summary/sql' + PASSING xmlparse(document t.report_summary) + COLUMNS + sql_id path '@sql_id' + , sql_exec_start path '@sql_exec_start' + , sql_exec_id path '@sql_exec_id' + , status path 'status' + , sql_text path 'sql_text' + , first_refresh_time path 'first_refresh_time' + , last_refresh_time path 'last_refresh_time' + , refresh_count path 'refresh_count' + , inst_id path 'inst_id' + , session_id path 'session_id' + , session_serial path 'session_serial' + , user_id path 'user_id' + , username path 'user' + , con_id path 'con_id' + , con_name path 'con_name' + , modul path 'module' + , action path 'action' + , service path 'service' + , program path 'program' + , plan_hash path 'plan_hash' + , is_cross_instance path 'is_cross_instance' + , dop path 'dop' + , instances path 'instances' + , px_servers_requested path 'px_servers_requested' + , px_servers_allocated path 'px_servers_allocated' + , duration path 'stats/stat[@name="duration"]' + , elapsed_time path 'stats/stat[@name="elapsed_time"]' + , cpu_time path 'stats/stat[@name="cpu_time"]' + , user_io_wait_time path 'stats/stat[@name="user_io_wait_time"]' + , application_wait_time path 'stats/stat[@name="application_wait_time"]' + , concurrency_wait_time path 'stats/stat[@name="concurrency_wait_time"]' + , cluster_wait_time path 'stats/stat[@name="cluster_wait_time"]' + , plsql_exec_time path 'stats/stat[@name="plsql_exec_time"]' + , other_wait_time path 'stats/stat[@name="other_wait_time"]' + , buffer_gets path 'stats/stat[@name="buffer_gets"]' + , read_reqs path 'stats/stat[@name="read_reqs"]' + , read_bytes path 'stats/stat[@name="read_bytes"]' + ) x +where &&1 +and t.COMPONENT_NAME = 'sqlmonitor' +and to_date(t.key3,'MM:DD:YYYY HH24:MI:SS') between &&2 and &&3 +order by &&order_by_clause +/ + +@@myfooter.sql + + diff --git a/my/coe_xfr_sql_profile.sql b/my/coe_xfr_sql_profile.sql new file mode 100644 index 0000000..625963b --- /dev/null +++ b/my/coe_xfr_sql_profile.sql @@ -0,0 +1,484 @@ +SPO coe_xfr_sql_profile.log; +SET DEF ON TERM OFF ECHO ON FEED OFF VER OFF HEA ON LIN 2000 PAGES 100 LONG 8000000 LONGC 800000 TRIMS ON TI OFF TIMI OFF SERVEROUT ON SIZE 1000000 NUMF "" SQLP SQL>; +SET SERVEROUT ON SIZE UNL; +REM +REM $Header: 215187.1 coe_xfr_sql_profile.sql 11.4.5.5 2013/03/01 carlos.sierra $ +REM +REM Copyright (c) 2000-2013, Oracle Corporation. All rights reserved. +REM +REM AUTHOR +REM carlos.sierra@oracle.com +REM +REM SCRIPT +REM coe_xfr_sql_profile.sql +REM +REM DESCRIPTION +REM This script generates another that contains the commands to +REM create a manual custom SQL Profile out of a known plan from +REM memory or AWR. The manual custom profile can be implemented +REM into the same SOURCE system where the plan was retrieved, +REM or into another similar TARGET system that has same schema +REM objects referenced by the SQL that generated the known plan. +REM +REM PRE-REQUISITES +REM 1. Oracle Tuning Pack license. +REM +REM PARAMETERS +REM 1. SQL_ID (required) +REM 2. Plan Hash Value for which a manual custom SQL Profile is +REM needed (required). A list of known plans is presented. +REM You may choose from list provided or enter a valid phv +REM from a version of the SQL modified with Hints. +REM +REM EXECUTION +REM 1. Connect into SQL*Plus as user with access to data dictionary. +REM Do not use SYS. +REM 2. Execute script coe_xfr_sql_profile.sql passing SQL_ID and +REM plan hash value (parameters can be passed inline or until +REM requested). +REM +REM EXAMPLE +REM # sqlplus system +REM SQL> START coe_xfr_sql_profile.sql [SQL_ID] [PLAN_HASH_VALUE]; +REM SQL> START coe_xfr_sql_profile.sql gnjy0mn4y9pbm 2055843663; +REM SQL> START coe_xfr_sql_profile.sql gnjy0mn4y9pbm; +REM SQL> START coe_xfr_sql_profile.sql; +REM +REM NOTES +REM 1. For possible errors see coe_xfr_sql_profile.log +REM 2. If SQLT is installed in SOURCE, you can use instead: +REM sqlt/utl/sqltprofile.sql +REM 3. Be aware that using DBMS_SQLTUNE requires a license for +REM Oracle Tuning Pack. +REM 4. Use a DBA user but not SYS. +REM +SET TERM ON ECHO OFF; +PRO +PRO Parameter 1: +PRO SQL_ID (required) +PRO +DEF sql_id = '&1'; +PRO +WITH +p AS ( +SELECT plan_hash_value + FROM gv$sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND other_xml IS NOT NULL + UNION +SELECT plan_hash_value + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND other_xml IS NOT NULL ), +m AS ( +SELECT plan_hash_value, + SUM(elapsed_time)/SUM(executions) avg_et_secs + FROM gv$sql + WHERE sql_id = TRIM('&&sql_id.') + AND executions > 0 + GROUP BY + plan_hash_value ), +a AS ( +SELECT plan_hash_value, + SUM(elapsed_time_total)/SUM(executions_total) avg_et_secs + FROM dba_hist_sqlstat + WHERE sql_id = TRIM('&&sql_id.') + AND executions_total > 0 + GROUP BY + plan_hash_value ) +SELECT p.plan_hash_value, + ROUND(NVL(m.avg_et_secs, a.avg_et_secs)/1e6, 3) avg_et_secs + FROM p, m, a + WHERE p.plan_hash_value = m.plan_hash_value(+) + AND p.plan_hash_value = a.plan_hash_value(+) + ORDER BY + avg_et_secs NULLS LAST; +PRO +PRO Parameter 2: +PRO PLAN_HASH_VALUE (required) +PRO +DEF plan_hash_value = '&2'; +PRO +PRO Values passed to coe_xfr_sql_profile: +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO SQL_ID : "&&sql_id." +PRO PLAN_HASH_VALUE: "&&plan_hash_value." +PRO +SET TERM OFF ECHO ON; +WHENEVER SQLERROR EXIT SQL.SQLCODE; + +-- trim parameters +COL sql_id NEW_V sql_id FOR A30; +COL plan_hash_value NEW_V plan_hash_value FOR A30; +SELECT TRIM('&&sql_id.') sql_id, TRIM('&&plan_hash_value.') plan_hash_value FROM DUAL; + +VAR sql_text CLOB; +VAR sql_text2 CLOB; +VAR other_xml CLOB; +EXEC :sql_text := NULL; +EXEC :sql_text2 := NULL; +EXEC :other_xml := NULL; + +-- get sql_text from memory +DECLARE + l_sql_text VARCHAR2(32767); +BEGIN -- 10g see bug 5017909 + FOR i IN (SELECT DISTINCT piece, sql_text + FROM gv$sqltext_with_newlines + WHERE sql_id = TRIM('&&sql_id.') + ORDER BY 1, 2) + LOOP + IF :sql_text IS NULL THEN + DBMS_LOB.CREATETEMPORARY(:sql_text, TRUE); + DBMS_LOB.OPEN(:sql_text, DBMS_LOB.LOB_READWRITE); + END IF; + -- removes NUL characters + l_sql_text := REPLACE(i.sql_text, CHR(00), ' '); + -- adds a NUL character at the end of each line + DBMS_LOB.WRITEAPPEND(:sql_text, LENGTH(l_sql_text) + 1, l_sql_text||CHR(00)); + END LOOP; + -- if found in memory then sql_text is not null + IF :sql_text IS NOT NULL THEN + DBMS_LOB.CLOSE(:sql_text); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting sql_text from memory: '||SQLERRM); + :sql_text := NULL; +END; +/ + +SELECT :sql_text FROM DUAL; + +-- get sql_text from awr +DECLARE + l_sql_text VARCHAR2(32767); + l_clob_size NUMBER; + l_offset NUMBER; +BEGIN + IF :sql_text IS NULL OR NVL(DBMS_LOB.GETLENGTH(:sql_text), 0) = 0 THEN + SELECT sql_text + INTO :sql_text2 + FROM dba_hist_sqltext + WHERE sql_id = TRIM('&&sql_id.') + AND sql_text IS NOT NULL + AND ROWNUM = 1; + END IF; + -- if found in awr then sql_text2 is not null + IF :sql_text2 IS NOT NULL THEN + l_clob_size := NVL(DBMS_LOB.GETLENGTH(:sql_text2), 0); + l_offset := 1; + DBMS_LOB.CREATETEMPORARY(:sql_text, TRUE); + DBMS_LOB.OPEN(:sql_text, DBMS_LOB.LOB_READWRITE); + -- store in clob as 64 character pieces plus a NUL character at the end of each piece + WHILE l_offset < l_clob_size + LOOP + IF l_clob_size - l_offset > 64 THEN + l_sql_text := REPLACE(DBMS_LOB.SUBSTR(:sql_text2, 64, l_offset), CHR(00), ' '); + ELSE -- last piece + l_sql_text := REPLACE(DBMS_LOB.SUBSTR(:sql_text2, l_clob_size - l_offset + 1, l_offset), CHR(00), ' '); + END IF; + DBMS_LOB.WRITEAPPEND(:sql_text, LENGTH(l_sql_text) + 1, l_sql_text||CHR(00)); + l_offset := l_offset + 64; + END LOOP; + DBMS_LOB.CLOSE(:sql_text); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting sql_text from awr: '||SQLERRM); + :sql_text := NULL; +END; +/ + +SELECT :sql_text2 FROM DUAL; +SELECT :sql_text FROM DUAL; + +-- validate sql_text +SET TERM ON; +BEGIN + IF :sql_text IS NULL THEN + RAISE_APPLICATION_ERROR(-20100, 'SQL_TEXT for SQL_ID &&sql_id. was not found in memory (gv$sqltext_with_newlines) or AWR (dba_hist_sqltext).'); + END IF; +END; +/ +SET TERM OFF; + +-- get other_xml from memory +BEGIN + FOR i IN (SELECT other_xml + FROM gv$sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + child_number, id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from memory: '||SQLERRM); + :other_xml := NULL; +END; +/ + +-- get other_xml from awr +BEGIN + IF :other_xml IS NULL OR NVL(DBMS_LOB.GETLENGTH(:other_xml), 0) = 0 THEN + FOR i IN (SELECT other_xml + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from awr: '||SQLERRM); + :other_xml := NULL; +END; +/ + +-- get other_xml from memory from modified SQL +BEGIN + IF :other_xml IS NULL OR NVL(DBMS_LOB.GETLENGTH(:other_xml), 0) = 0 THEN + FOR i IN (SELECT other_xml + FROM gv$sql_plan + WHERE plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + child_number, id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from memory: '||SQLERRM); + :other_xml := NULL; +END; +/ + +-- get other_xml from awr from modified SQL +BEGIN + IF :other_xml IS NULL OR NVL(DBMS_LOB.GETLENGTH(:other_xml), 0) = 0 THEN + FOR i IN (SELECT other_xml + FROM dba_hist_sql_plan + WHERE plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from awr: '||SQLERRM); + :other_xml := NULL; +END; +/ + +SELECT :other_xml FROM DUAL; + +-- validate other_xml +SET TERM ON; +BEGIN + IF :other_xml IS NULL THEN + RAISE_APPLICATION_ERROR(-20101, 'PLAN for SQL_ID &&sql_id. and PHV &&plan_hash_value. was not found in memory (gv$sql_plan) or AWR (dba_hist_sql_plan).'); + END IF; +END; +/ +SET TERM OFF; + +-- generates script that creates sql profile in target system: +SET ECHO OFF; +PRO coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql. +SET FEED OFF LIN 666 TRIMS ON TI OFF TIMI OFF SERVEROUT ON SIZE 1000000 FOR WOR; +SET SERVEROUT ON SIZE UNL FOR WOR; +SPO OFF; +SPO coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql; +DECLARE + l_pos NUMBER; + l_clob_size NUMBER; + l_offset NUMBER; + l_sql_text VARCHAR2(32767); + l_len NUMBER; + l_hint VARCHAR2(32767); +BEGIN + DBMS_OUTPUT.PUT_LINE('SPO coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..log;'); + DBMS_OUTPUT.PUT_LINE('SET ECHO ON TERM ON LIN 2000 TRIMS ON NUMF 99999999999999999999;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM $Header: 215187.1 coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql 11.4.4.4 '||TO_CHAR(SYSDATE, 'YYYY/MM/DD')||' carlos.sierra $'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM Copyright (c) 2000-2012, Oracle Corporation. All rights reserved.'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM AUTHOR'); + DBMS_OUTPUT.PUT_LINE('REM carlos.sierra@oracle.com'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM SCRIPT'); + DBMS_OUTPUT.PUT_LINE('REM coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM DESCRIPTION'); + DBMS_OUTPUT.PUT_LINE('REM This script is generated by coe_xfr_sql_profile.sql'); + DBMS_OUTPUT.PUT_LINE('REM It contains the SQL*Plus commands to create a custom'); + DBMS_OUTPUT.PUT_LINE('REM SQL Profile for SQL_ID &&sql_id. based on plan hash'); + DBMS_OUTPUT.PUT_LINE('REM value &&plan_hash_value..'); + DBMS_OUTPUT.PUT_LINE('REM The custom SQL Profile to be created by this script'); + DBMS_OUTPUT.PUT_LINE('REM will affect plans for SQL commands with signature'); + DBMS_OUTPUT.PUT_LINE('REM matching the one for SQL Text below.'); + DBMS_OUTPUT.PUT_LINE('REM Review SQL Text and adjust accordingly.'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM PARAMETERS'); + DBMS_OUTPUT.PUT_LINE('REM None.'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM EXAMPLE'); + DBMS_OUTPUT.PUT_LINE('REM SQL> START coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM NOTES'); + DBMS_OUTPUT.PUT_LINE('REM 1. Should be run as SYSTEM or SYSDBA.'); + DBMS_OUTPUT.PUT_LINE('REM 2. User must have CREATE ANY SQL PROFILE privilege.'); + DBMS_OUTPUT.PUT_LINE('REM 3. SOURCE and TARGET systems can be the same or similar.'); + DBMS_OUTPUT.PUT_LINE('REM 4. To drop this custom SQL Profile after it has been created:'); + DBMS_OUTPUT.PUT_LINE('REM EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(''coe_&&sql_id._&&plan_hash_value.'');'); + DBMS_OUTPUT.PUT_LINE('REM 5. Be aware that using DBMS_SQLTUNE requires a license'); + DBMS_OUTPUT.PUT_LINE('REM for the Oracle Tuning Pack.'); + DBMS_OUTPUT.PUT_LINE('REM 6. If you modified a SQL putting Hints in order to produce a desired'); + DBMS_OUTPUT.PUT_LINE('REM Plan, you can remove the artifical Hints from SQL Text pieces below.'); + DBMS_OUTPUT.PUT_LINE('REM By doing so you can create a custom SQL Profile for the original'); + DBMS_OUTPUT.PUT_LINE('REM SQL but with the Plan captured from the modified SQL (with Hints).'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('WHENEVER SQLERROR EXIT SQL.SQLCODE;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('VAR signature NUMBER;'); + DBMS_OUTPUT.PUT_LINE('VAR signaturef NUMBER;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('DECLARE'); + DBMS_OUTPUT.PUT_LINE('sql_txt CLOB;'); + DBMS_OUTPUT.PUT_LINE('h SYS.SQLPROF_ATTR;'); + DBMS_OUTPUT.PUT_LINE('PROCEDURE wa (p_line IN VARCHAR2) IS'); + DBMS_OUTPUT.PUT_LINE('BEGIN'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.WRITEAPPEND(sql_txt, LENGTH(p_line), p_line);'); + DBMS_OUTPUT.PUT_LINE('END wa;'); + DBMS_OUTPUT.PUT_LINE('BEGIN'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.CREATETEMPORARY(sql_txt, TRUE);'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.OPEN(sql_txt, DBMS_LOB.LOB_READWRITE);'); + DBMS_OUTPUT.PUT_LINE('-- SQL Text pieces below do not have to be of same length.'); + DBMS_OUTPUT.PUT_LINE('-- So if you edit SQL Text (i.e. removing temporary Hints),'); + DBMS_OUTPUT.PUT_LINE('-- there is no need to edit or re-align unmodified pieces.'); + l_clob_size := NVL(DBMS_LOB.GETLENGTH(:sql_text), 0); + l_offset := 1; + WHILE l_offset < l_clob_size + LOOP + l_pos := DBMS_LOB.INSTR(:sql_text, CHR(00), l_offset); + IF l_pos > 0 THEN + l_len := l_pos - l_offset; + ELSE -- last piece + l_len := l_clob_size - l_pos + 1; + END IF; + l_sql_text := DBMS_LOB.SUBSTR(:sql_text, l_len, l_offset); + /* cannot do such 3 replacement since a line could end with a comment using "--" + l_sql_text := REPLACE(l_sql_text, CHR(10), ' '); -- replace LF with SP + l_sql_text := REPLACE(l_sql_text, CHR(13), ' '); -- replace CR with SP + l_sql_text := REPLACE(l_sql_text, CHR(09), ' '); -- replace TAB with SP + */ + l_offset := l_offset + l_len + 1; + IF l_len > 0 THEN + IF INSTR(l_sql_text, '''[') + INSTR(l_sql_text, ']''') = 0 THEN + l_sql_text := '['||l_sql_text||']'; + ELSIF INSTR(l_sql_text, '''{') + INSTR(l_sql_text, '}''') = 0 THEN + l_sql_text := '{'||l_sql_text||'}'; + ELSIF INSTR(l_sql_text, '''<') + INSTR(l_sql_text, '>''') = 0 THEN + l_sql_text := '<'||l_sql_text||'>'; + ELSIF INSTR(l_sql_text, '''(') + INSTR(l_sql_text, ')''') = 0 THEN + l_sql_text := '('||l_sql_text||')'; + ELSIF INSTR(l_sql_text, '''"') + INSTR(l_sql_text, '"''') = 0 THEN + l_sql_text := '"'||l_sql_text||'"'; + ELSIF INSTR(l_sql_text, '''|') + INSTR(l_sql_text, '|''') = 0 THEN + l_sql_text := '|'||l_sql_text||'|'; + ELSIF INSTR(l_sql_text, '''~') + INSTR(l_sql_text, '~''') = 0 THEN + l_sql_text := '~'||l_sql_text||'~'; + ELSIF INSTR(l_sql_text, '''^') + INSTR(l_sql_text, '^''') = 0 THEN + l_sql_text := '^'||l_sql_text||'^'; + ELSIF INSTR(l_sql_text, '''@') + INSTR(l_sql_text, '@''') = 0 THEN + l_sql_text := '@'||l_sql_text||'@'; + ELSIF INSTR(l_sql_text, '''#') + INSTR(l_sql_text, '#''') = 0 THEN + l_sql_text := '#'||l_sql_text||'#'; + ELSIF INSTR(l_sql_text, '''%') + INSTR(l_sql_text, '%''') = 0 THEN + l_sql_text := '%'||l_sql_text||'%'; + ELSIF INSTR(l_sql_text, '''$') + INSTR(l_sql_text, '$''') = 0 THEN + l_sql_text := '$'||l_sql_text||'$'; + ELSE + l_sql_text := CHR(96)||l_sql_text||CHR(96); + END IF; + DBMS_OUTPUT.PUT_LINE('wa(q'''||l_sql_text||''');'); + END IF; + END LOOP; + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.CLOSE(sql_txt);'); + DBMS_OUTPUT.PUT_LINE('h := SYS.SQLPROF_ATTR('); + DBMS_OUTPUT.PUT_LINE('q''[BEGIN_OUTLINE_DATA]'','); + FOR i IN (SELECT /*+ opt_param('parallel_execution_enabled', 'false') */ + SUBSTR(EXTRACTVALUE(VALUE(d), '/hint'), 1, 4000) hint + FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(:other_xml), '/*/outline_data/hint'))) d) + LOOP + l_hint := i.hint; + WHILE NVL(LENGTH(l_hint), 0) > 0 + LOOP + IF LENGTH(l_hint) <= 500 THEN + DBMS_OUTPUT.PUT_LINE('q''['||l_hint||']'','); + l_hint := NULL; + ELSE + l_pos := INSTR(SUBSTR(l_hint, 1, 500), ' ', -1); + DBMS_OUTPUT.PUT_LINE('q''['||SUBSTR(l_hint, 1, l_pos)||']'','); + l_hint := ' '||SUBSTR(l_hint, l_pos); + END IF; + END LOOP; + END LOOP; + DBMS_OUTPUT.PUT_LINE('q''[END_OUTLINE_DATA]'');'); + DBMS_OUTPUT.PUT_LINE(':signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt);'); + DBMS_OUTPUT.PUT_LINE(':signaturef := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt, TRUE);'); + DBMS_OUTPUT.PUT_LINE('DBMS_SQLTUNE.IMPORT_SQL_PROFILE ('); + DBMS_OUTPUT.PUT_LINE('sql_text => sql_txt,'); + DBMS_OUTPUT.PUT_LINE('profile => h,'); + DBMS_OUTPUT.PUT_LINE('name => ''coe_&&sql_id._&&plan_hash_value.'','); + DBMS_OUTPUT.PUT_LINE('description => ''coe &&sql_id. &&plan_hash_value. ''||:signature||'' ''||:signaturef||'''','); + DBMS_OUTPUT.PUT_LINE('category => ''DEFAULT'','); + DBMS_OUTPUT.PUT_LINE('validate => TRUE,'); + DBMS_OUTPUT.PUT_LINE('replace => TRUE,'); + DBMS_OUTPUT.PUT_LINE('force_match => FALSE /* TRUE:FORCE (match even when different literals in SQL). FALSE:EXACT (similar to CURSOR_SHARING) */ );'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.FREETEMPORARY(sql_txt);'); + DBMS_OUTPUT.PUT_LINE('END;'); + DBMS_OUTPUT.PUT_LINE('/'); + DBMS_OUTPUT.PUT_LINE('WHENEVER SQLERROR CONTINUE'); + DBMS_OUTPUT.PUT_LINE('SET ECHO OFF;'); + DBMS_OUTPUT.PUT_LINE('PRINT signature'); + DBMS_OUTPUT.PUT_LINE('PRINT signaturef'); + DBMS_OUTPUT.PUT_LINE('PRO'); + DBMS_OUTPUT.PUT_LINE('PRO ... manual custom SQL Profile has been created'); + DBMS_OUTPUT.PUT_LINE('PRO'); + DBMS_OUTPUT.PUT_LINE('SET TERM ON ECHO OFF LIN 80 TRIMS OFF NUMF "";'); + DBMS_OUTPUT.PUT_LINE('SPO OFF;'); + DBMS_OUTPUT.PUT_LINE('PRO'); + DBMS_OUTPUT.PUT_LINE('PRO COE_XFR_SQL_PROFILE_&&sql_id._&&plan_hash_value. completed'); +END; +/ +SPO OFF; +SET DEF ON TERM ON ECHO OFF FEED 6 VER ON HEA ON LIN 80 PAGES 14 LONG 80 LONGC 80 TRIMS OFF TI OFF TIMI OFF SERVEROUT OFF NUMF "" SQLP SQL>; +SET SERVEROUT OFF; +PRO +PRO Execute coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql +PRO on TARGET system in order to create a custom SQL Profile +PRO with plan &&plan_hash_value linked to adjusted sql_text. +PRO +UNDEFINE 1 2 sql_id plan_hash_value +CL COL +PRO +PRO COE_XFR_SQL_PROFILE completed. diff --git a/my/help2.sql b/my/help2.sql new file mode 100644 index 0000000..1506a93 --- /dev/null +++ b/my/help2.sql @@ -0,0 +1,56 @@ +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +-------------------------------------------------------------------------------- +-- +-- File name: help.sql +-- Purpose: Help +-- Author: Tomasz Sroka +-- Usage: @help +-- +-------------------------------------------------------------------------------- +--ACCEPT search_string CHAR PROMPT "Search: [%] " + +DEFINE amp=chr(38) +DEFINE nl=chr(10) +DEFINE search_string=&1 + +COLUMN name FORMAT A30 TRUNC +COLUMN description FORMAT A60 WORD_WRAP +COLUMN usage FORMAT A115 + +WITH q AS ( +SELECT name, description, usage +FROM ( + SELECT 'stats_opls.sql' AS name, 'List stats operations' AS description, '@stats_opls '||&nl||'@stats_opls sysdate-14 sysdate BASIC TEXT'||&nl||'@stats_opls "timestamp''2023-01-12 14:00:00''" "timestamp''2023-02-12 14:00:00''" TYPICAL HTML' AS usage FROM dual UNION ALL + SELECT 'stats_opdet.sql' AS name, 'Display details of a stats operation' AS description, '@stats_opdet '||&nl||'@stats_opdet 1482'||&nl||'@stats_opdet 1482 TYPICAL HTML +' AS usage FROM dual UNION ALL + SELECT 'histo_endpoints.sql' AS name, 'List bucket details in histograms' AS description, '@histo_endpoints.sql . ' AS usage FROM dual UNION ALL + SELECT 'sqlmon_sqlid.sql' AS name, 'SQL Monitor reports list of sql_id' AS description, '@sqlmon_sqlid 8c2mb6gp8w8zy sysdate-1 sysdate'||&nl||'@sqlmon_sqlid 8c2mb6gp8w8zy "timestamp''2023-04-22 09:30:45''" "timestamp''2023-04-22 12:00:00''"' AS usage FROM dual UNION ALL + SELECT 'sqlmon_rep.sql' AS name, 'Display a SQL Monitor report' AS description, '@sqlmon_rep.sql (default=TEXT)'||&nl||'@sqlmon_rep.sql 553 '||&nl||'@sqlmon_rep.sql 553 HTML'||&nl||'@sqlmon_rep.sql 553 ACTIVE' AS usage FROM dual UNION ALL + SELECT 'stdby_redolog' AS name, 'List standby redolog status' AS description, '@stdby_redolog' AS usage FROM dual UNION ALL + SELECT 'mv_m_logtable.sql' AS name, '(matview) Log table of a master table' AS description, '@mv_m_logtable.sql _owner> ' AS usage FROM dual UNION ALL + SELECT 'mv_m_refreshlog.sql' AS name, '(matview) Refresh history of a master table' AS description, '@mv_m_refreshlog.sql _owner> ' AS usage FROM dual UNION ALL + SELECT 'mv_m_registeredsnap.sql' AS name, '(matview) Registered snapshots a master table' AS description, '@mv_m_registeredsnap.sql _owner> ' AS usage FROM dual UNION ALL + SELECT 'awrsqlid.sql' AS name, 'sql_id AWR execution history' AS description, '@awrsqlid ' ||&nl||'@awrsqlid 2qr52n47vt2aj sysdate-1000 sysdate'||&nl||'@awrsqlid 2qr52n47vt2aj "timestamp''2023-06-10 02:30:00''" "timestamp''2023-06-12 02:30:00''"' AS usage FROM dual UNION ALL + SELECT 'monitoring/code_dep_on.sql' AS name, 'Displays all objects dependant on the specified object' AS description, '@monitoring/code_dep_on.sql ' AS usage FROM dual UNION ALL + SELECT 'monitoring/code_dep.sql' AS name, 'Displays all dependencies of specified object' AS description, '@monitoring/code_dep.sql ' AS usage FROM dual UNION ALL + SELECT 'transactions.sql' AS name, '(VG) Displays transactions' AS description, '@transactions '||&nl||'@transactions "and 1=1"'||&nl||'@transactions "and sid=506"' AS usage FROM dual UNION ALL + SELECT 'transaction_long_running.sql' AS name, '(VG) Displays long transactions' AS description, '@transaction_long_running.sql '||&nl||'@transaction_long_running "and 1=1"'||&nl||'@transaction_long_running "and sid=506"' AS usage FROM dual UNION ALL + SELECT 'racasqlmon.sql' AS name, '(RAC aware) Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent (ASH based)' AS description, '@racasqlmon '||&nl||'@racasqlmon 7q729nhdgtsqq 0 sysdate-1/24 sysdate'||&nl||'@racasqlmon 7q729nhdgtsqq % sysdate-1 sysdate' AS usage FROM dual UNION ALL + SELECT 'stats_history.sql' AS name, '(VG) Display table/index/partition statistics history' AS description, '@stats_history.sql USR '||&nl||'@stats_history.sql USR T1 % %'||&nl||'@stats_history.sql USR IDX_T1_BLOCKS % INDEX' AS usage FROM dual UNION ALL + SELECT '' AS name, '' AS description, '' AS usage FROM dual UNION ALL + SELECT '' AS name, '' AS description, '' AS usage FROM dual + ) +) +SELECT * FROM q +WHERE + (upper(name) LIKE upper ('%&search_string%') OR regexp_like(name, '&search_string', 'i')) +OR (upper(description) LIKE upper ('%&search_string%') OR regexp_like(description, '&search_string', 'i')) +-- OR (upper(usage) LIKE upper ('%&search_string%') OR regexp_like(usage, '&search_string', 'i')) +ORDER BY + name +/ + +UNDEFINE search_string +CLEAR COLUMNS diff --git a/my/hist_cross_freq.sql b/my/hist_cross_freq.sql new file mode 100644 index 0000000..8e504c9 --- /dev/null +++ b/my/hist_cross_freq.sql @@ -0,0 +1,43 @@ +set verify off + +col value head 'Value' +col f1 format 999,999,999 head 'Table #1 | frequency' +col f2 format 999,999,999 head 'Table #2 | frequency' +column product format 999,999,999 head 'Tables join | frequency | (product)' + + +break on report skip 1 +compute sum of product on report + +WITH f1 +AS ( + SELECT endpoint_value value + ,endpoint_number - lag(endpoint_number, 1, 0) OVER ( + ORDER BY endpoint_number + ) frequency + FROM dba_tab_histograms + WHERE OWNER = '&1' + AND table_name = '&2' + AND column_name = '&3' + ORDER BY endpoint_value + ) + ,f2 +AS ( + SELECT endpoint_value value + ,endpoint_number - lag(endpoint_number, 1, 0) OVER ( + ORDER BY endpoint_number + ) frequency + FROM dba_tab_histograms + WHERE OWNER = '&4' + AND table_name = '&5' + AND column_name = '&6' + ORDER BY endpoint_value + ) +SELECT f1.value + ,f1.frequency f1 + ,f2.frequency f2 + ,f1.frequency * f2.frequency product +FROM f1 + ,f2 +WHERE f2.value = f1.value; + diff --git a/my/histo_endpoints.sql b/my/histo_endpoints.sql new file mode 100644 index 0000000..98a5581 --- /dev/null +++ b/my/histo_endpoints.sql @@ -0,0 +1,55 @@ +set verify off + +-- arguments: +-- table name as SCHEMA.TABLE_NAME +-- column name + +col endpoint_number format 999,999,999 head 'Endpoint|number' +col endpoint_value format 999,999,999 head 'Endpoint|value' +col frequency format 999,999,999 head 'Frequency' +col endpoint_repeat_count format 999,999,999 head 'Endpoint|repeat count' + + +col column_name format a30 + +SELECT column_id, + column_name, + histogram +FROM user_tab_columns +WHERE upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' + and COLUMN_NAME='&2' +ORDER BY column_id; + + +break on report skip 1 +compute sum of frequency on report +compute sum of endpoint_repeat_count on report + +select + endpoint_number, + endpoint_value, + endpoint_number - LAG(endpoint_number, 1, 0) OVER (ORDER BY endpoint_value, endpoint_number) AS frequency, + endpoint_repeat_count +from + dba_tab_histograms +where + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' + and COLUMN_NAME='&2' +order by + endpoint_number +; + diff --git a/my/mv_m_logtable.sql b/my/mv_m_logtable.sql new file mode 100644 index 0000000..d393a03 --- /dev/null +++ b/my/mv_m_logtable.sql @@ -0,0 +1,36 @@ +@@myheader.sql + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE owner="&&1" +DEFINE table="&&2" + + +PROMPT +PROMPT ************************************************* +PROMPT * Log table of a master table +PROMPT * +PROMPT * Input Parameters +PROMPT * - owner = '&&owner' +PROMPT * - table = '&&table' +PROMPT ************************************************* + + +set lines 256 + +col log_table for a30 +col log_trigger for a30 +col primary_key for a3 head PK + +select + log_table + ,log_trigger + ,primary_key +from + dba_mview_logs +where + log_owner like'&&owner' and master like '&&table'; + + +@@myfooter.sql diff --git a/my/mv_m_refreshlog.sql b/my/mv_m_refreshlog.sql new file mode 100644 index 0000000..70bc167 --- /dev/null +++ b/my/mv_m_refreshlog.sql @@ -0,0 +1,37 @@ +@@myheader.sql + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE owner="&&1" +DEFINE table="&&2" + + +PROMPT +PROMPT ************************************************* +PROMPT * Registerd napshots on MASTER site +PROMPT * +PROMPT * Input Parameters +PROMPT * - owner = '&&owner' +PROMPT * - table = '&&table' +PROMPT ************************************************* + + +set lines 256 + +col mowner for a15 +col master for a25 + +col snapname for a30 +col snapsite for a30 +col snaptime for a30 + +select + r.name snapname, snapid, nvl(r.snapshot_site, 'not registered') snapsite, snaptime +from + sys.slog$ s, dba_registered_snapshots r +where + s.snapid=r.snapshot_id(+) and mowner like '&&owner' and master like '&&table'; + + +@@myfooter.sql diff --git a/my/mv_m_registeredsnap.sql b/my/mv_m_registeredsnap.sql new file mode 100644 index 0000000..937b884 --- /dev/null +++ b/my/mv_m_registeredsnap.sql @@ -0,0 +1,33 @@ +@@myheader.sql + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE owner="&&1" +DEFINE table="&&2" + + +PROMPT +PROMPT ************************************************* +PROMPT * Snapshot logs on MASTER site +PROMPT * +PROMPT * Input Parameters +PROMPT * - owner = '&&owner' +PROMPT * - table = '&&table' +PROMPT ************************************************* + + +set lines 256 + +col mowner for a15 +col master for a25 + +select + * +from + sys.slog$ slog +where + slog.mowner like '&&owner' and slog.master like '&&table'; + + +@@myfooter.sql diff --git a/my/myfooter.sql b/my/myfooter.sql new file mode 100644 index 0000000..29c18eb --- /dev/null +++ b/my/myfooter.sql @@ -0,0 +1,32 @@ +/* +* Based on Vishal Gupta script +*/ + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +set trimspool on +set feed on +set arraysize 5000 +set lines 80 +set pages 80 +set verify on +set sqlblankline on +set serveroutput on +set tab off +set term on +--start backupenv + +DEFINE 1="" +DEFINE 2="" +DEFINE 3="" +DEFINE 4="" +DEFINE 5="" +DEFINE 6="" +DEFINE 7="" +DEFINE 8="" +DEFINE 9="" +DEFINE 10="" + +PROMPT \ No newline at end of file diff --git a/my/myheader.sql b/my/myheader.sql new file mode 100644 index 0000000..44712c8 --- /dev/null +++ b/my/myheader.sql @@ -0,0 +1,74 @@ +/* +* Based on Vishal Gupta script +*/ + +set echo off +set term off +set trimspool on +set tab off +set feed off +set arraysize 5000 +set lines 250 +set pages 5000 +set verify off +set sqlblankline on + +set serveroutput on + + +-- Set the terminal output off. Otherwise it puts the blank lines on console for +-- query executed with noprint option below to version variable + + +define _IF_ORA_8i_OR_HIGHER="--" +define _IF_ORA_9iR2_OR_HIGHER="--" +define _IF_ORA_10gR1_OR_HIGHER="--" +define _IF_ORA_10gR2_OR_HIGHER="--" +define _IF_ORA_11gR1_OR_HIGHER="--" +define _IF_ORA_11107_OR_HIGHER="--" +define _IF_ORA_11gR2_OR_HIGHER="--" +define _IF_ORA_11202_OR_HIGHER="--" +define _IF_ORA_11204_OR_HIGHER="--" +define _IF_ORA_12cR1_OR_HIGHER="--" + +define _IF_ORA_9iR2_OR_LOWER="--" +define _IF_ORA_10gR1_OR_LOWER="--" +define _IF_ORA_10gR2_OR_LOWER="--" +define _IF_ORA_11gR2_OR_LOWER="--" + +col oraverion_8i_or_higher new_value _IF_ORA_8i_OR_HIGHER noprint +col oraverion_9iR2_or_higher new_value _IF_ORA_9iR2_OR_HIGHER noprint +col oraverion_10gR1_or_higher new_value _IF_ORA_10gR1_OR_HIGHER noprint +col oraverion_10gR2_or_higher new_value _IF_ORA_10gR2_OR_HIGHER noprint +col oraverion_11gR1_or_higher new_value _IF_ORA_11gR1_OR_HIGHER noprint +col oraverion_11107_or_higher new_value _IF_ORA_11107_OR_HIGHER noprint +col oraverion_11gR2_or_higher new_value _IF_ORA_11gR2_OR_HIGHER noprint +col oraverion_11202_or_higher new_value _IF_ORA_11202_OR_HIGHER noprint +col oraverion_11204_or_higher new_value _IF_ORA_11204_OR_HIGHER noprint +col oraverion_12cR1_or_higher new_value _IF_ORA_12cR1_OR_HIGHER noprint + +col oraverion_9iR2_or_lower new_value _IF_ORA_9iR2_OR_LOWER noprint +col oraverion_10gR1_or_lower new_value _IF_ORA_10gR1_OR_LOWER noprint +col oraverion_10gR2_or_lower new_value _IF_ORA_10gR2_OR_LOWER noprint +col oraverion_11gR2_or_lower new_value _IF_ORA_11gR2_OR_LOWER noprint + + +SELECT CASE WHEN &&_O_RELEASE >= 0801000000 THEN '' ELSE '--' END oraverion_8i_or_higher + , CASE WHEN &&_O_RELEASE >= 0902000000 THEN '' ELSE '--' END oraverion_9iR2_or_higher + , CASE WHEN &&_O_RELEASE >= 1001000000 THEN '' ELSE '--' END oraverion_10gR1_or_higher + , CASE WHEN &&_O_RELEASE >= 1002000000 THEN '' ELSE '--' END oraverion_10gR2_or_higher + , CASE WHEN &&_O_RELEASE >= 1101000000 THEN '' ELSE '--' END oraverion_11gR1_or_higher + , CASE WHEN &&_O_RELEASE >= 1101000700 THEN '' ELSE '--' END oraverion_11107_or_higher + , CASE WHEN &&_O_RELEASE >= 1102000000 THEN '' ELSE '--' END oraverion_11gR2_or_higher + , CASE WHEN &&_O_RELEASE >= 1102000200 THEN '' ELSE '--' END oraverion_11202_or_higher + , CASE WHEN &&_O_RELEASE >= 1102000400 THEN '' ELSE '--' END oraverion_11204_or_higher + , CASE WHEN &&_O_RELEASE < 1001000000 THEN '' ELSE '--' END oraverion_9iR2_or_lower + , CASE WHEN &&_O_RELEASE < 1002000000 THEN '' ELSE '--' END oraverion_10gR1_or_lower + , CASE WHEN &&_O_RELEASE < 1101000000 THEN '' ELSE '--' END oraverion_10gR2_or_lower + , CASE WHEN &&_O_RELEASE < 1201000000 THEN '' ELSE '--' END oraverion_11gR2_or_lower + , CASE WHEN &&_O_RELEASE >= 1201000000 THEN '' ELSE '--' END oraverion_12cR1_or_higher + FROM dual + ; + +set term on + diff --git a/my/myhelp.sql b/my/myhelp.sql new file mode 100644 index 0000000..116f314 --- /dev/null +++ b/my/myhelp.sql @@ -0,0 +1,2 @@ +@help &&1 +@help2 &&1 diff --git a/my/mytemp.sql b/my/mytemp.sql new file mode 100644 index 0000000..e7b85ba --- /dev/null +++ b/my/mytemp.sql @@ -0,0 +1,25 @@ +@@myheader.sql + + +COLUMN _wh NEW_VALUE wh NOPRINT +COLUMN _ob NEW_VALUE ob NOPRINT + +select + LENGTH(TRIM('&&1')) +from dual; + + +select + CASE WHEN '&&1' is null THEN + 'Defa' + ELSE + '&&1' + END +from dual; + + + + +@@myfooter.sql + + diff --git a/my/racasqlmon.sql b/my/racasqlmon.sql new file mode 100644 index 0000000..c0f6b6c --- /dev/null +++ b/my/racasqlmon.sql @@ -0,0 +1,114 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: asqlmon.sql (v1.3) +-- +-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @asqlmon +-- +-- Notes: This script runs on Oracle 11g+ and you should have the +-- Diagnostics pack license for using it as it queries +-- some separately licensed views. +-- +------------------------------------------------------------------------------------------------------------------------ +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation HEADING Plan_Operation FORMAT A72 +COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE FOR 99999999999 +COL asqlmon_sql_id HEAD SQL_ID +COL asqlmon_sql_child HEAD CHILD FOR 999999 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "ID" FOR 9999 +COL asqlmon_parent_id HEAD "PID" FOR 9999 + +COL inst_id HEAD "I#" FOR 99 + +BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_operation + +PROMPT +PROMPT -- ASQLMon v1.3 - by Tanel Poder ( https://tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.inst_id + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events +FROM + gv$active_session_history ash +WHERE + 1=1 +AND ash.sql_id LIKE '&1' +AND ash.sql_child_number LIKE '&2' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.inst_id + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +) +SELECT + sq.inst_id + , plan.child_number asqlmon_sql_child + , plan.plan_hash_value asqlmon_plan_hash_value + , sq.samples seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id + , plan.id asqlmon_id + , plan.parent_id asqlmon_parent_id + , LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , sq.session_state + , sq.event +-- , sq.avg_p3 + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name +-- , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1990) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1990) END asqlmon_predicates +-- , plan.projection +FROM + gv$sql_plan plan + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_child_number(+) = plan.child_number +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.child_number LIKE '&2' +ORDER BY + plan.child_number + , plan.plan_hash_value + , plan.id +/ diff --git a/my/raclocks.sql b/my/raclocks.sql new file mode 100644 index 0000000..e2802d6 --- /dev/null +++ b/my/raclocks.sql @@ -0,0 +1,80 @@ +-- https://easyteam.fr/dealing-with-lock-issues-in-oracle-rac-environnement/ + +@@myheader.sql + +col running_session for a20 +col machine for a30 +col osuser for a20 +col username for a20 +col module for a20 +col event for a30 +col wait_class for a20 +col inst_id for 9 head I# + +WITH +-- global lock view +gl AS ( +select +inst_id || '-' || sid instsid, id1, id2, +ctime, lmode, block, request +from +gv$lock +), +-- joins the global lock view on itself to identify locks +l AS ( +SELECT +l1.instsid holding_session, +l2.instsid waiting_session +FROM +gl l1, +gl l2 +WHERE +l1.block > 0 +AND l2.request > 0 +AND l1.id1=l2.id1 +AND l1.id2=l2.id2 +), +-- result view (tree of locked sessions) +rs AS ( +SELECT +lpad(' ',3*(level-1),' ') || waiting_session running_session +FROM ( +-- first insert as in utllockt +(SELECT +'-' holding_session, holding_session waiting_session +FROM +l +MINUS +SELECT +'-', waiting_session +FROM +l +) +UNION ALL +-- second insert as in utllockt +SELECT +holding_session, waiting_session +FROM +l +) +CONNECT BY PRIOR +waiting_session = holding_session +START WITH +holding_session = '-' +), +-- useful session informations +s AS ( +SELECT +inst_id, sid,serial#, module,machine, osuser, username, +nvl(sql_id, '-') sql_id, event, wait_class +FROM gv$session +) +-- final tree +SELECT +* +FROM +rs +JOIN +s ON ltrim(rs.running_session)=s.inst_id || '-' || s.sid; + +@@myfooter.sql diff --git a/my/random_data/STORE_random_01.sql b/my/random_data/STORE_random_01.sql new file mode 100644 index 0000000..7f6f6ad --- /dev/null +++ b/my/random_data/STORE_random_01.sql @@ -0,0 +1,46 @@ +declare + id VARCHAR2(40); + firstname VARCHAR2(20); + lastname VARCHAR2(20); + name VARCHAR2(50); + birthdate DATE; + zip VARCHAR2(5); + i NUMBER; + rand1 NUMBER; + rand2 NUMBER; + rand3 NUMBER; + max_id_firstname NUMBER; + max_id_lastname NUMBER; + max_id_city NUMBER; +begin + select max(id) into max_id_firstname from US_FIRSTNAME; + select max(id) into max_id_lastname from US_LASTNAME; + select max(id) into max_id_city from CITY; + + for i in 1..1000000 loop + rand1:=round(dbms_random.value(1,max_id_firstname)); + rand2:=round(dbms_random.value(1,max_id_lastname)); + rand3:=round(dbms_random.value(1,max_id_city)); + SELECT FIRSTNAME into firstname FROM US_FIRSTNAME where ID=rand1; + SELECT LASTNAME into lastname FROM US_LASTNAME where ID=rand2; + SELECT ZIP into zip FROM CITY where ID=rand3; + + NAME:=FIRSTNAME ||' '|| LASTNAME; + + SELECT TO_DATE( + TRUNC( + DBMS_RANDOM.VALUE(TO_CHAR(DATE '1960-01-01','J') + ,TO_CHAR(DATE '2011-12-31','J') + ) + ),'J' + ) into birthdate FROM DUAL; + + insert into CLIENT(ID,NAME,BIRTHDATE,ZIP) values (i,NAME,BIRTHDATE,ZIP); + if mod(i,10000)=0 then + commit; + end if; + end loop; + commit; +end; +/ + diff --git a/my/random_data/STORE_random_02.sql b/my/random_data/STORE_random_02.sql new file mode 100644 index 0000000..69b7041 --- /dev/null +++ b/my/random_data/STORE_random_02.sql @@ -0,0 +1,26 @@ +declare + max_id_client NUMBER; + max_id_street NUMBER; + i NUMBER; + rand1 NUMBER; + rand2 NUMBER; + random_address VARCHAR2(50); + random_street VARCHAR2(40); + +begin + select max(id) into max_id_client from CLIENT; + select max(id) into max_id_street from US_STREET; + + for i in 1..max_id_client loop + rand1:=round(dbms_random.value(1,max_id_street)); + rand2:=round(dbms_random.value(1,400)); + + select FULLNAME into random_street from US_STREET where ID=rand1; + random_address:=to_char(rand2)||' '||random_street; + + update CLIENT set ADDRESS=random_address where ID=i; + end loop; + commit; +end; +/ + diff --git a/my/random_data/scratch_01.sql b/my/random_data/scratch_01.sql new file mode 100644 index 0000000..026af6d --- /dev/null +++ b/my/random_data/scratch_01.sql @@ -0,0 +1,97 @@ +drop table R1 purge; +create table R1 as +select + rownum ID, + round(dbms_random.value(1,100000)) N1, + round(dbms_random.value(1,1000)) N2, + case + when mod(rownum,10)=0 then 'BINGO' + else + dbms_random.string('X',5) + end S1, + TO_DATE( + TRUNC( + dbms_random.value(TO_CHAR(DATE '1960-01-01','J') + ,TO_CHAR(DATE '2011-12-31','J') + ) + ),'J' + ) D1, + 'Record #'||to_char(rownum) S2 +from + dual +connect by level<=100000; + + +drop table R2 purge; +create table R2 as +select + rownum ID, + dbms_random.string('X',5) S1, + case + when mod(rownum,3)=0 then 'M3' + else + dbms_random.string('X',5) + end S2, + round(dbms_random.value(1,100)) N1, + TO_DATE( + TRUNC( + dbms_random.value(TO_CHAR(DATE '1960-01-01','J') + ,TO_CHAR(DATE '2011-12-31','J') + ) + ),'J' + ) D1 +from + dual +connect by level<=1000; + +drop table R3 purge; +create table R3 as +select + rownum ID, + dbms_random.string('X',5) S1, + case + when mod(rownum,2)=0 then 'M2' + else + dbms_random.string('X',5) + end S2, + round(dbms_random.value(1,1000)) N1 +from + dual +connect by level<=1000; + + +drop table R4 purge; +create table R4 as +select + rownum ID, + dbms_random.string('X',5) S1, + TO_DATE( + TRUNC( + dbms_random.value(TO_CHAR(DATE '1960-01-01','J') + ,TO_CHAR(DATE '2011-12-31','J') + ) + ),'J' + ) D1 +from + dual +connect by level<=10000; + + + +ALTER TABLE R1 MODIFY (ID NOT NULL); +ALTER TABLE R1 ADD CONSTRAINT R1_PK PRIMARY KEY (ID) ENABLE; + +ALTER TABLE R2 MODIFY (ID NOT NULL); +ALTER TABLE R2 ADD CONSTRAINT R2_PK PRIMARY KEY (ID) ENABLE; + +ALTER TABLE R3 MODIFY (ID NOT NULL); +ALTER TABLE R3 ADD CONSTRAINT R3_PK PRIMARY KEY (ID) ENABLE; + +ALTER TABLE R4 MODIFY (ID NOT NULL); +ALTER TABLE R4 ADD CONSTRAINT R4_PK PRIMARY KEY (ID) ENABLE; + + +ALTER TABLE R1 ADD CONSTRAINT R1_FK1 FOREIGN KEY(N2) REFERENCES R2(ID) ENABLE; +ALTER TABLE R3 ADD CONSTRAINT R3_FK1 FOREIGN KEY(N1) REFERENCES R2(ID) ENABLE; +ALTER TABLE R2 ADD CONSTRAINT R2_FK1 FOREIGN KEY(N1) REFERENCES R4(ID) ENABLE; + diff --git a/my/sess.sql b/my/sess.sql new file mode 120000 index 0000000..c1b2d76 --- /dev/null +++ b/my/sess.sql @@ -0,0 +1 @@ +../idev/sess_users.sql \ No newline at end of file diff --git a/my/sessa.sql b/my/sessa.sql new file mode 120000 index 0000000..8bdc197 --- /dev/null +++ b/my/sessa.sql @@ -0,0 +1 @@ +../idev/sess_users_active.sql \ No newline at end of file diff --git a/my/sqlmon_rep.sql b/my/sqlmon_rep.sql new file mode 100644 index 0000000..5735634 --- /dev/null +++ b/my/sqlmon_rep.sql @@ -0,0 +1,35 @@ +@@myheader.sql + +set long 10000000 longchunksize 10000000 pages 0 + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE rid +UNDEFINE type + +DEFINE rid="&&1" +DEFINE type="&&2" + +COLUMN _type NEW_VALUE type NOPRINT + +set term off +SELECT + DECODE('&&type','','TEXT',UPPER('&&type')) "_type" +FROM DUAL; +set term on + +PROMPT +PROMPT *********************************************************************** +PROMPT * SINGLE STATS OPERATION DETAIL +PROMPT * +PROMPT * Input Parameters +PROMPT * - report id = '&&rid' +PROMPT * - type = '&&type' +PROMPT *********************************************************************** + + +select dbms_auto_report.report_repository_detail(rid => &&rid, type => '&&type') + from dual; + +@@myfooter.sql diff --git a/my/sqlmon_sqlid.sql b/my/sqlmon_sqlid.sql new file mode 100644 index 0000000..fe1b899 --- /dev/null +++ b/my/sqlmon_sqlid.sql @@ -0,0 +1,106 @@ +/* + +Usage: + @sqlmon_sqlid + +Examples: + + @sqlmon_sqlid 8c2mb6gp8w8zy sysdate-1 sysdate + @sqlmon_sqlid 8c2mb6gp8w8zy "timestamp'2023-04-22 09:30:45'" "timestamp'2023-04-22 12:00:00'" +*/ + +@@myheader.sql + +PROMPT +PROMPT *********************************************************************** +PROMPT * List SQL Monitor reports +PROMPT * +PROMPT * Input Parameters +PROMPT * - sql_id = &&1 +PROMPT * - min timestamp = &&2 +PROMPT * - min timestamp = &&3 +PROMPT *********************************************************************** + +set pages 50 + +column report_id format 99999999999 heading 'Report|ID' +column status format a15 heading 'Status' +column sql_id format a17 heading 'SQL_ID' +column plan_hash format a15 heading 'Plan|hash value' +column sql_exec_start format a21 heading 'SQL|start' +column sql_exec_id format a12 heading 'SQL|exec ID' +column elap_sec format 9999.99 heading 'Elapsed|sec' +column cpu_sec format 9999.99 heading 'CPU|sec' +column io_sec format 9999.99 heading 'IO|sec' +column buffer_gets format a9 heading 'Buffer|gets' +column px_servers_requested format a3 heading 'PX|req' +column px_servers_allocated format a3 heading 'PX|all' +column sess format a16 heading 'Session' +column username format a15 heading 'Username' + + +SELECT /*+ NO_XML_QUERY_REWRITE */ + t.report_id + , t.key1 sql_id + , t.key2 sql_exec_id + , to_char(to_date(t.key3,'MM:DD:YYYY HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') sql_exec_start + , x.plan_hash + , x.elapsed_time/1000000 elap_sec + , x.cpu_time/1000000 cpu_sec + , x.user_io_wait_time/1000000 io_sec + , x.buffer_gets + , x.username + , ''''||t.session_id||','||t.session_serial#||'@'||t.instance_number||'''' sess + , x.px_servers_requested + , x.px_servers_allocated + , x.status +FROM dba_hist_reports t + , xmltable('/report_repository_summary/sql' + PASSING xmlparse(document t.report_summary) + COLUMNS + sql_id path '@sql_id' + , sql_exec_start path '@sql_exec_start' + , sql_exec_id path '@sql_exec_id' + , status path 'status' + , sql_text path 'sql_text' + , first_refresh_time path 'first_refresh_time' + , last_refresh_time path 'last_refresh_time' + , refresh_count path 'refresh_count' + , inst_id path 'inst_id' + , session_id path 'session_id' + , session_serial path 'session_serial' + , user_id path 'user_id' + , username path 'user' + , con_id path 'con_id' + , con_name path 'con_name' + , modul path 'module' + , action path 'action' + , service path 'service' + , program path 'program' + , plan_hash path 'plan_hash' + , is_cross_instance path 'is_cross_instance' + , dop path 'dop' + , instances path 'instances' + , px_servers_requested path 'px_servers_requested' + , px_servers_allocated path 'px_servers_allocated' + , duration path 'stats/stat[@name="duration"]' + , elapsed_time path 'stats/stat[@name="elapsed_time"]' + , cpu_time path 'stats/stat[@name="cpu_time"]' + , user_io_wait_time path 'stats/stat[@name="user_io_wait_time"]' + , application_wait_time path 'stats/stat[@name="application_wait_time"]' + , concurrency_wait_time path 'stats/stat[@name="concurrency_wait_time"]' + , cluster_wait_time path 'stats/stat[@name="cluster_wait_time"]' + , plsql_exec_time path 'stats/stat[@name="plsql_exec_time"]' + , other_wait_time path 'stats/stat[@name="other_wait_time"]' + , buffer_gets path 'stats/stat[@name="buffer_gets"]' + , read_reqs path 'stats/stat[@name="read_reqs"]' + , read_bytes path 'stats/stat[@name="read_bytes"]' + ) x +where + t.key1= '&&1' + and t.COMPONENT_NAME='sqlmonitor' + and to_date(t.key3,'MM:DD:YYYY HH24:MI:SS') between &&2 and &&3 + order by sql_exec_start +/ + +@@myfooter.sql diff --git a/my/stats_hhist.sql b/my/stats_hhist.sql new file mode 100644 index 0000000..83c39c7 --- /dev/null +++ b/my/stats_hhist.sql @@ -0,0 +1,131 @@ +@@myheader.sql + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE tab="&&1" +DEFINE col="&&2" + +UNDEFINE owner +UNDEFINE table_name +UNDEFINE col_name + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _col_name NEW_VALUE col_name NOPRINT + +set term off +SELECT + upper(CASE + WHEN INSTR('&&tab','.') > 0 THEN + SUBSTR('&&tab',INSTR('&&tab','.')+1) + ELSE + '&tab' + END + ) + "_table_name" + , upper(CASE + WHEN INSTR('&&tab','.') > 0 THEN + UPPER(SUBSTR('&&tab',1,INSTR('&&tab','.')-1)) + ELSE + user + END + ) + "_owner" + , upper('&&col') + "_col_name" +FROM DUAL; + + + +set term on + +PROMPT +PROMPT ************************************************* +PROMPT * Historical column histogram values +PROMPT * +PROMPT * Input Parameters +PROMPT * - owner = '&&owner' +PROMPT * - table_name = '&&table_name' +PROMPT * - col_name = '&&col_name' +PROMPT ************************************************* + +/* ----------------------------------------------------------------------------------| +|Author : Mohamed Houri | +|Date : 03/07/2020 | +|Scope : This script gives historical column histogram values | +| -- I am using sys.WRI$_OPTSTAT_HISTHEAD_HISTORY for this purpose | +| -- I am only able to say whether, previously, there was HISTOGRAM or not | +| -- I can't show the historical type of Histogram | +| | | +-------------------------------------------------------------------------------------|*/ + +col object_name format a25 +col column_name format a25 +col last_analyzed format a20 +col prev_last_analyzed format a20 +col histogram format a16 +col prev_histogram format a16 +WITH sq AS + ( + SELECT + object_id + ,object_name + ,subobject_name + FROM + dba_objects + WHERE + object_name = upper ('&&table_name') + AND owner = upper('&&owner') + AND subobject_name IS NULL + ) +SELECT + object_name + ,column_name + ,lead(prev_histogram,1,histogram) over (order by last_analyzed) histogram + ,last_analyzed + ,prev_histogram + ,prev_last_analyzed +FROM + ( + SELECT + object_name + ,column_name + ,(select histogram from all_tab_col_statistics where owner = upper('&&owner') + and table_name = upper('&&table_name') and column_name = upper('&&col_name')) histogram + ,last_analyzed + ,stat_time prev_last_analyzed + ,row_number() over (order by last_analyzed) rn + ,case when round(derivedDensity,9)= round(density,9) then 'NONE' else 'HISTOGRAM' end prev_histogram + FROM + ( + SELECT + object_name + ,column_name + ,to_char(savtime ,'yyyy-mm-dd hh24:mi:ss') last_analyzed + ,to_char(timestamp# ,'yyyy-mm-dd hh24:mi:ss') stat_time + ,density + ,1/distcnt derivedDensity + ,row_number() over (order by savtime) rn + ,lag(case when round(1/distcnt,9) = round(density,9) then 'NONE' else 'HISTOGRAM' end) over(order by savtime) hist_histogram + FROM + sys.WRI$_OPTSTAT_HISTHEAD_HISTORY + INNER JOIN sq ON object_id = obj# + INNER JOIN (SELECT + column_id + ,column_name + FROM + dba_tab_columns + WHERE + column_name = upper('&&col_name') + AND table_name = upper('&&table_name') + AND owner = upper('&&owner') + ) ON intcol# = column_id + ) +WHERE + rn >= 1 --exlcude/include the very first dbms_stat + ) +ORDER BY + last_analyzed; + +@@myfooter.sql diff --git a/my/stats_opdet.sql b/my/stats_opdet.sql new file mode 100644 index 0000000..07eaa38 --- /dev/null +++ b/my/stats_opdet.sql @@ -0,0 +1,43 @@ +@@myheader.sql + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE opid +UNDEFINE detail_level + +DEFINE opid="&&1" +DEFINE detail_level="&&2" +DEFINE format="&&3" + +COLUMN _opid NEW_VALUE opid NOPRINT +COLUMN _detail_level NEW_VALUE detail_level NOPRINT +COLUMN _format NEW_VALUE format NOPRINT + +set term off +SELECT + DECODE('&&detail_level','','BASIC',UPPER('&&detail_level')) "_detail_level" + , DECODE('&&format','','TEXT',UPPER('&&format')) "_format" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * SINGLE STATS OPERATION DETAIL +PROMPT * +PROMPT * Input Parameters +PROMPT * - opid = '&&opid' +PROMPT * - detail_level = '&&detail_level' +PROMPT *********************************************************************** + +select + dbms_stats.report_single_stats_operation( + opid => &&opid + ,detail_level => '&&detail_level' + ,format => '&&format' + ) +from dual; + + +@@myfooter.sql diff --git a/my/stats_opls.sql b/my/stats_opls.sql new file mode 100644 index 0000000..fe41c89 --- /dev/null +++ b/my/stats_opls.sql @@ -0,0 +1,49 @@ +@@myheader.sql + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE since +UNDEFINE until +UNDEFINE detail_level +UNDEFINE format + +DEFINE since="&&1" +DEFINE until="&&2" +DEFINE detail_level="&&3" +DEFINE format="&&4" + +COLUMN _detail_level NEW_VALUE detail_level NOPRINT +COLUMN _format NEW_VALUE format NOPRINT + +set term off +SELECT + DECODE('&&detail_level','','BASIC',UPPER('&&detail_level')) "_detail_level" + , DECODE('&&format','','TEXT',UPPER('&&format')) "_format" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * STATS OPERATIONS +PROMPT * +PROMPT * Input Parameters +PROMPT * - since = '&&since' +PROMPT * - until = '&&until' +PROMPT * - detail_level = '&&detail_level' +PROMPT * - format = '&&format' +PROMPT *********************************************************************** + + +select + DBMS_STATS.REPORT_STATS_OPERATIONS ( + since => &&since + ,until => &&until + ,detail_level => '&&detail_level' + ,format => '&&format' + ) + from dual; + + +@@myfooter.sql diff --git a/my/stdby_redolog.sql b/my/stdby_redolog.sql new file mode 100644 index 0000000..2290e74 --- /dev/null +++ b/my/stdby_redolog.sql @@ -0,0 +1,20 @@ +col thread# for 9999990 +col sequence# for 999999990 +col grp for 990 +col fnm for a50 head "File Name" +col "Fisrt SCN Number" for 999999999999990 +break on thread + +select + a.thread# + ,a.sequence# + ,a.group# grp + , a.bytes/1024/1024 Size_MB + ,a.status + ,a.archived + ,a.first_change# "First SCN Number" + ,to_char(FIRST_TIME,'YYYY-MM-DD HH24:MI:SS') "First SCN Time" + ,to_char(LAST_TIME,'YYYY-MM-DD HH24:MI:SS') "Last SCN Time" +from + gv$standby_log a order by 1,2,3,4 + / diff --git a/my/whoami.sql b/my/whoami.sql new file mode 100644 index 0000000..c71de8e --- /dev/null +++ b/my/whoami.sql @@ -0,0 +1,32 @@ +-- give information on the own session without needing additional privs +-- credits to Uwe Hesse +-- +-- changed to use select from dual instead of dbms_output + +column username format a30 +column sess format a15 +column current_schema format a30 +column instance_name format a15 +column pdb_name format a15 +column database_role format a20 +column os_user format a20 +column client_ip format a20 +column server_hostname format a20 +column client_hostname format a20 + +select + sys_context('userenv','session_user') as username, + ''''||sys_context('userenv','sid')||','||sys_context('userenv','sessionid')||'@'||sys_context('userenv','instance')||'''' as sess, + sys_context('userenv','current_schema') as current_schema, + sys_context('userenv','instance_name') as instance_name, + sys_context('userenv','con_name') as pdb_name, + sys_context('userenv','database_role') as database_role, + sys_context('userenv','os_user') as os_user, + sys_context('userenv','ip_address') as client_ip, + sys_context('userenv','host') as client_hostname, + sys_context('userenv','server_host') as server_hostname +from + dual +; + + diff --git a/notes.txt b/notes.txt new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/notes.txt @@ -0,0 +1 @@ +test diff --git a/push_all b/push_all new file mode 100644 index 0000000..615d889 --- /dev/null +++ b/push_all @@ -0,0 +1,5 @@ +NOW=$(date -u +"%Y-%m-%d %H:%M:%S" ) +git add . +git commit -m "${NOW}" +git push -u origin main + diff --git a/star/arch_size_hourly.sql b/star/arch_size_hourly.sql new file mode 100644 index 0000000..1773fd9 --- /dev/null +++ b/star/arch_size_hourly.sql @@ -0,0 +1,131 @@ +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display hourly and daily redolog switches by size +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Dec-14 Vishal Gupta Added number of days as input parameter +* 18-Mar-14 Vishal Gupta Added separator columns for daily total +* 27-Feb-12 Vishal Gupta Formated the output and parameterized size granuality +* 05-Aug-04 Vishal Gupta First Draft +* +*/ +set term on + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE days +DEFINE days="&&1" + +set term off +COLUMN _DAYS NEW_VALUE DAYS NOPRINT + +SELECT UPPER(DECODE('&&days','','15','&&days')) "_DAYS" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE size_label=GB +DEFINE size_divider="1024/1024/1024" +DEFINE round_precision=2 + + +PROMPT +PROMPT ************************************************************************ +PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Size) +PROMPT * (Hourly and Daily figures in &&size_label) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Days = '&&days' +PROMPT ************************************************************************ +PROMPT +PROMPT - <-------------------------------------------------------- hourly total -----------------------------------------------> +/* + Total h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 + Date Day (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) + --------- --- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +*/ + +SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000 + +COLUMN separator HEADING "!|!|!" FORMAT A1 + +COLUMN "Date" HEADING "Date" FORMAT A9 +COLUMN "Total" HEADING "Day|Total|(&size_label)" FORMAT 99999 +COLUMN "Day" HEADING "Day" FORMAT A3 +COLUMN h0 HEADING "h0|(&size_label)" FORMAT 9999 +COLUMN h1 HEADING "h1|(&size_label)" FORMAT 9999 +COLUMN h2 HEADING "h2|(&size_label)" FORMAT 9999 +COLUMN h3 HEADING "h3|(&size_label)" FORMAT 9999 +COLUMN h4 HEADING "h4|(&size_label)" FORMAT 9999 +COLUMN h5 HEADING "h5|(&size_label)" FORMAT 9999 +COLUMN h6 HEADING "h6|(&size_label)" FORMAT 9999 +COLUMN h7 HEADING "h7|(&size_label)" FORMAT 9999 +COLUMN h8 HEADING "h8|(&size_label)" FORMAT 9999 +COLUMN h9 HEADING "h9|(&size_label)" FORMAT 9999 +COLUMN h10 HEADING "h10|(&size_label)" FORMAT 9999 +COLUMN h11 HEADING "h11|(&size_label)" FORMAT 9999 +COLUMN h12 HEADING "h12|(&size_label)" FORMAT 9999 +COLUMN h13 HEADING "h13|(&size_label)" FORMAT 9999 +COLUMN h14 HEADING "h14|(&size_label)" FORMAT 9999 +COLUMN h15 HEADING "h15|(&size_label)" FORMAT 9999 +COLUMN h16 HEADING "h16|(&size_label)" FORMAT 9999 +COLUMN h17 HEADING "h17|(&size_label)" FORMAT 9999 +COLUMN h18 HEADING "h18|(&size_label)" FORMAT 9999 +COLUMN h19 HEADING "h19|(&size_label)" FORMAT 9999 +COLUMN h20 HEADING "h20|(&size_label)" FORMAT 9999 +COLUMN h21 HEADING "h21|(&size_label)" FORMAT 9999 +COLUMN h22 HEADING "h22|(&size_label)" FORMAT 9999 +COLUMN h23 HEADING "h23|(&size_label)" FORMAT 9999 + + + + +SELECT to_char(trunc(COMPLETION_TIME),'DD-Mon-YY') "Date", + to_char(COMPLETION_TIME, 'Dy') "Day", + '|' separator, + ROUND(SUM(((BLOCKS * BLOCK_SIZE)/&size_divider))) "Total", + '|' separator, + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'00',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h0", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'01',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h1", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'02',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h2", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'03',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h3", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'04',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h4", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'05',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h5", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'06',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h6", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'07',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h7", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'08',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h8", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'09',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h9", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'10',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h10", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'11',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h11", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'12',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h12", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'13',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h13", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'14',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h14", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'15',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h15", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'16',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h16", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'17',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h17", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'18',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h18", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'19',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h19", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'20',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h20", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'21',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h21", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'22',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h22", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'23',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h23" + from v$archived_log + where standby_dest = 'NO' + AND CREATOR IN ('ARCH' , 'FGRD','LGWR','RFS') + AND completion_time > sysdate - &days + group by trunc(COMPLETION_TIME), to_char(COMPLETION_TIME, 'Dy') + order by trunc(COMPLETION_TIME) +/ + diff --git a/star/arch_size_hourly_detail.sql b/star/arch_size_hourly_detail.sql new file mode 100644 index 0000000..d25eb18 --- /dev/null +++ b/star/arch_size_hourly_detail.sql @@ -0,0 +1,92 @@ +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display hourly and daily redolog switches by size +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Dec-14 Vishal Gupta Added number of days as input parameter +* 18-Mar-14 Vishal Gupta Added separator columns for daily total +* 27-Feb-12 Vishal Gupta Formated the output and parameterized size granuality +* 05-Aug-04 Vishal Gupta First Draft +* +*/ +set term on + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE days +DEFINE days="&&1" + +set term off +COLUMN _DAYS NEW_VALUE DAYS NOPRINT + +SELECT UPPER(DECODE('&&days','','2','&&days')) "_DAYS" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE size_label=MB +DEFINE size_divider="1024/1024" +--DEFINE size_label=GB +--DEFINE size_divider="1024/1024/1024" +DEFINE round_precision=2 + + +PROMPT +PROMPT ************************************************************************ +PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Size) +PROMPT * (Hourly and Daily figures in &&size_label) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Days = '&&days' +PROMPT ************************************************************************ +PROMPT + +SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000 + +COLUMN separator HEADING "!|!|!" FORMAT A1 + +COLUMN "Date" HEADING "Date" FORMAT A12 +COLUMN "Day" HEADING "Day" FORMAT A3 +COLUMN "Total" HEADING "Hourly|Total|(&size_label)" FORMAT 9,999,999 +COLUMN "M00" HEADING "Minutes|01-10 |(&size_label) " FORMAT 999,999 +COLUMN "M10" HEADING "Minutes|11-20 |(&size_label) " FORMAT 999,999 +COLUMN "M20" HEADING "Minutes|21-30 |(&size_label) " FORMAT 999,999 +COLUMN "M30" HEADING "Minutes|31-40 |(&size_label) " FORMAT 999,999 +COLUMN "M40" HEADING "Minutes|41-50 |(&size_label) " FORMAT 999,999 +COLUMN "M50" HEADING "Minutes|51-60 |(&size_label) " FORMAT 999,999 + + + + +SELECT TO_CHAR(trunc(COMPLETION_TIME,'HH24'),'DD-MON-YY HH24') "Date", + to_char(COMPLETION_TIME, 'Dy') "Day", + '|' separator, + ROUND(SUM(((BLOCKS * BLOCK_SIZE)/&&size_divider))) "Total", + '|' separator, + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 01 AND 10 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M00", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 11 AND 20 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M10", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 21 AND 30 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M20", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 31 AND 40 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M30", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 41 AND 50 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M40", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 51 AND 60 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M50", + '|' separator + from v$archived_log + where standby_dest = 'NO' + and CREATOR IN ('ARCH' , 'FGRD') + AND completion_time > sysdate - &days +group by trunc(COMPLETION_TIME,'HH24'), to_char(COMPLETION_TIME, 'Dy') +order by trunc(COMPLETION_TIME,'HH24') +; + diff --git a/star/arch_switch_hist.sql b/star/arch_switch_hist.sql new file mode 100644 index 0000000..f46fd89 --- /dev/null +++ b/star/arch_switch_hist.sql @@ -0,0 +1,93 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : perf_log_switch_history_count_daily_7.sql | +-- | CLASS : Tuning | +-- | PURPOSE : Reports on how often log switches occur in your database on a | +-- | daily basis. This script is to be used with an Oracle 7 | +-- | database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +-- SET LINESIZE 145 +SET PAGESIZE 9999 +SET VERIFY off + +ACCEPT startDate PROMPT 'Enter start date (DD-MON-YYYY): ' +ACCEPT endDate PROMPT 'Enter end date (DD-MON-YYYY): ' + +COLUMN H00 FORMAT 999 HEADING '00' +COLUMN H01 FORMAT 999 HEADING '01' +COLUMN H02 FORMAT 999 HEADING '02' +COLUMN H03 FORMAT 999 HEADING '03' +COLUMN H04 FORMAT 999 HEADING '04' +COLUMN H05 FORMAT 999 HEADING '05' +COLUMN H06 FORMAT 999 HEADING '06' +COLUMN H07 FORMAT 999 HEADING '07' +COLUMN H08 FORMAT 999 HEADING '08' +COLUMN H09 FORMAT 999 HEADING '09' +COLUMN H10 FORMAT 999 HEADING '10' +COLUMN H11 FORMAT 999 HEADING '11' +COLUMN H12 FORMAT 999 HEADING '12' +COLUMN H13 FORMAT 999 HEADING '13' +COLUMN H14 FORMAT 999 HEADING '14' +COLUMN H15 FORMAT 999 HEADING '15' +COLUMN H16 FORMAT 999 HEADING '16' +COLUMN H17 FORMAT 999 HEADING '17' +COLUMN H18 FORMAT 999 HEADING '18' +COLUMN H19 FORMAT 999 HEADING '19' +COLUMN H20 FORMAT 999 HEADING '20' +COLUMN H21 FORMAT 999 HEADING '21' +COLUMN H22 FORMAT 999 HEADING '22' +COLUMN H23 FORMAT 999 HEADING '23' +COLUMN TOTAL FORMAT 999,999 HEADING 'Total' + + +SELECT + SUBSTR(time,1,5) DAY + , SUM(DECODE(SUBSTR(time,10,2),'00',1,0)) H00 + , SUM(DECODE(SUBSTR(time,10,2),'01',1,0)) H01 + , SUM(DECODE(SUBSTR(time,10,2),'02',1,0)) H02 + , SUM(DECODE(SUBSTR(time,10,2),'03',1,0)) H03 + , SUM(DECODE(SUBSTR(time,10,2),'04',1,0)) H04 + , SUM(DECODE(SUBSTR(time,10,2),'05',1,0)) H05 + , SUM(DECODE(SUBSTR(time,10,2),'06',1,0)) H06 + , SUM(DECODE(SUBSTR(time,10,2),'07',1,0)) H07 + , SUM(DECODE(SUBSTR(time,10,2),'08',1,0)) H08 + , SUM(DECODE(SUBSTR(time,10,2),'09',1,0)) H09 + , SUM(DECODE(SUBSTR(time,10,2),'10',1,0)) H10 + , SUM(DECODE(SUBSTR(time,10,2),'11',1,0)) H11 + , SUM(DECODE(SUBSTR(time,10,2),'12',1,0)) H12 + , SUM(DECODE(SUBSTR(time,10,2),'13',1,0)) H13 + , SUM(DECODE(SUBSTR(time,10,2),'14',1,0)) H14 + , SUM(DECODE(SUBSTR(time,10,2),'15',1,0)) H15 + , SUM(DECODE(SUBSTR(time,10,2),'16',1,0)) H16 + , SUM(DECODE(SUBSTR(time,10,2),'17',1,0)) H17 + , SUM(DECODE(SUBSTR(time,10,2),'18',1,0)) H18 + , SUM(DECODE(SUBSTR(time,10,2),'19',1,0)) H19 + , SUM(DECODE(SUBSTR(time,10,2),'20',1,0)) H20 + , SUM(DECODE(SUBSTR(time,10,2),'21',1,0)) H21 + , SUM(DECODE(SUBSTR(time,10,2),'22',1,0)) H22 + , SUM(DECODE(SUBSTR(time,10,2),'23',1,0)) H23 + , COUNT(*) TOTAL +FROM + v$log_history a +WHERE + (TO_DATE(SUBSTR(time, 1,8), 'MM/DD/RR') + >= + TO_DATE('&startDate', 'DD-MON-YYYY') + ) + AND + (TO_DATE(SUBSTR(time, 1,8), 'MM/DD/RR') + <= + TO_DATE('&endDate', 'DD-MON-YYYY') + ) +GROUP BY SUBSTR(time,1,5) +/ + diff --git a/star/ash_wait_chains.sql b/star/ash_wait_chains.sql new file mode 100644 index 0000000..6df1b9e --- /dev/null +++ b/star/ash_wait_chains.sql @@ -0,0 +1,143 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ash_wait_chains.sql (v0.6 BETA) +-- Purpose: Display ASH wait chains (multi-session wait signature, a session +-- waiting for another session etc.) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @ash_wait_chains +-- +-- Example: +-- @ash_wait_chains username||':'||program2||event2 session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the in-memory V$ACTIVE_SESSION_HISTORY, use +-- @dash_wait_chains.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-- Oracle 10g does not have the BLOCKING_INST_ID column in ASH so you'll need +-- to comment out this column in this script. This may give you somewhat +-- incorrect results in RAC environment with global blockers. +-- +-------------------------------------------------------------------------------- +COL wait_chain FOR A300 WORD_WRAP +COL distinct_sids FOR 9999 HEAD "#Blkrs" +COL "%This" FOR A6 + +PROMPT +PROMPT -- Display ASH Wait Chain Signatures script v0.6 BETA by Tanel Poder ( http://blog.tanelpoder.com ) + +WITH +bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat), +ash AS (SELECT /*+ INLINE QB_NAME(ash) LEADING(a) USE_HASH(u) SWAP_JOIN_INPUTS(u) */ + a.* + , o.* + , u.username + , CASE WHEN a.session_type = 'BACKGROUND' AND a.program LIKE '%(DBW%)' THEN + '(DBWn)' + WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , NVL(a.event||CASE WHEN event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||NVL((SELECT class FROM bclass WHERE r = a.p3),'undo @bclass '||a.p3)||']' ELSE null END,'ON CPU') + || ' ' event2 + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM + gv$active_session_history a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND sample_time BETWEEN &3 AND &4 + ), +ash_samples AS (SELECT /*+ INLINE */ DISTINCT sample_id FROM ash), +ash_data AS (SELECT /*+ INLINE */ * FROM ash), +chains AS ( + SELECT /*+ INLINE */ + sample_time ts + , level lvl + , session_id sid + , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND d.blocking_session IS NOT NULL THEN ' -> [idle blocker '||d.blocking_inst_id||','||d.blocking_session||','||d.blocking_session_serial#||(SELECT ' ('||s.program||')' FROM gv$session s WHERE (s.inst_id, s.sid , s.serial#) = ((d.blocking_inst_id,d.blocking_session,d.blocking_session_serial#)))||']' ELSE NULL END path -- there's a reason why I'm doing this + --, SYS_CONNECT_BY_PATH(&1, ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN '('||d.session_id||')' ELSE NULL END path + -- , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND LEVEL > 1 THEN ' [sid='||session_id||' seq#='||TO_CHAR(seq#)||']' ELSE NULL END path -- there's a reason why I'm doing this + --, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ') path -- there's a reason why I'm doing this (ORA-30004 :) + , CASE WHEN CONNECT_BY_ISLEAF = 1 THEN d.session_id ELSE NULL END sids + , CONNECT_BY_ISLEAF isleaf + , CONNECT_BY_ISCYCLE iscycle + , d.* + FROM + ash_samples s + , ash_data d + WHERE + s.sample_id = d.sample_id + AND d.sample_time BETWEEN &3 AND &4 + CONNECT BY NOCYCLE + ( PRIOR d.blocking_session = d.session_id + AND PRIOR d.blocking_inst_id = d.inst_id + AND PRIOR s.sample_id = d.sample_id + ) + START WITH &2 +) +SELECT * FROM ( + SELECT + LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , COUNT(*) seconds + , ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , COUNT(DISTINCT sids) distinct_sids + , path wait_chain + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + -- , MIN(sids) + -- , MAX(sids) + FROM + chains + WHERE + isleaf = 1 + GROUP BY + &1 + , path + ORDER BY + COUNT(*) DESC + ) +WHERE + ROWNUM <= 30 +/ diff --git a/star/ashtop.sql b/star/ashtop.sql new file mode 100644 index 0000000..edde9b7 --- /dev/null +++ b/star/ashtop.sql @@ -0,0 +1,133 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ashtop.sql v1.2 +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @ashtop +-- +-- Example: +-- @ashtop username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use +-- @dashtop.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-------------------------------------------------------------------------------- +COL "%This" FOR A7 +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL dop FOR 99 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +SELECT + * +FROM ( + WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + COUNT(*) totalseconds + , ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This" + , &1 + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen +-- , MAX(sql_exec_id) - MIN(sql_exec_id) + , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen + , COUNT(DISTINCT sample_time) dist_timestamps + FROM + (SELECT + a.* + , session_id sid + , session_serial# serial + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , TRUNC(px_flags / 2097152) dop + , NVL(a.event, a.session_state)|| + CASE + WHEN a.event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM gv$active_session_history a) a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + &1 + ORDER BY + TotalSeconds DESC + , &1 +) +WHERE + ROWNUM <= 15 +/ + diff --git a/star/asqlmon.sql b/star/asqlmon.sql new file mode 100644 index 0000000..8455300 --- /dev/null +++ b/star/asqlmon.sql @@ -0,0 +1,111 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: asqlmon.sql (v1.3) +-- +-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @asqlmon +-- +-- Notes: This script runs on Oracle 11g+ and you should have the +-- Diagnostics pack license for using it as it queries +-- some separately licensed views. +-- +------------------------------------------------------------------------------------------------------------------------ +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation HEADING Plan_Operation FORMAT A72 +COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE FOR 99999999999 +COL asqlmon_sql_id HEAD SQL_ID +COL asqlmon_sql_child HEAD CHILD FOR 999999 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "ID" FOR 9999 +COL asqlmon_parent_id HEAD "PID" FOR 9999 + + +BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_operation + +PROMPT +PROMPT -- ASQLMon v1.3 - by Tanel Poder ( https://tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events +FROM + v$active_session_history ash +WHERE + 1=1 +AND ash.sql_id LIKE '&1' +AND ash.sql_child_number LIKE '&2' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +) +SELECT + -- plan.sql_id asqlmon_sql_id + plan.child_number asqlmon_sql_child + , plan.plan_hash_value asqlmon_plan_hash_value + , sq.samples seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id + , plan.id asqlmon_id + , plan.parent_id asqlmon_parent_id + , LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , sq.session_state + , sq.event +-- , sq.avg_p3 + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name +-- , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1990) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1990) END asqlmon_predicates +-- , plan.projection +FROM + v$sql_plan plan + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_child_number(+) = plan.child_number +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.child_number LIKE '&2' +ORDER BY + plan.child_number + , plan.plan_hash_value + , plan.id +/ diff --git a/star/awr_snapshot.sql b/star/awr_snapshot.sql new file mode 100644 index 0000000..3e779cf --- /dev/null +++ b/star/awr_snapshot.sql @@ -0,0 +1,2 @@ +-- Create AWR snapshot +EXEC DBMS_WORKLOAD_REPOSITORY.create_snapshot; \ No newline at end of file diff --git a/star/awr_sql_binds.sql b/star/awr_sql_binds.sql new file mode 100644 index 0000000..f9976bc --- /dev/null +++ b/star/awr_sql_binds.sql @@ -0,0 +1,129 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Binds from AWR +* Version : 10.2 and above +* Parameters : 1 - SQL_ID +* 2 - Number of Days (Default 7 days) +* 2 - Whereclause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Aug-15 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE days +UNDEFINE whereclause +UNDEFINE force_matching_signature +UNDEFINE use_force_matching_signature + +DEFINE sql_id="&&1" +DEFINE days="&&2" +DEFINE whereclause="&&3" +DEFINE force_matching_signature="" + +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&days','','7','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL +; + +set term on + + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from v$database d + , dba_hist_sqlstat ss2 + where d.dbid = ss2.dbid + AND ss2.sql_id = '&&sql_id' and rownum = 1; + +select CASE WHEN '&&force_matching_signature' IS NULL THEN '0' + WHEN '&&force_matching_signature' = '' THEN '0' + ELSE '&&force_matching_signature' + END "_force_matching_signature" + from dual +; + +set term on + +/************************************/ + +Prompt +Prompt ************************************************************** +Prompt * AWR SQL Bind Values +Prompt * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt ************************************************************** + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN bind_values HEADING "Bind Values" FORMAT a100 +COLUMN bind_datatype HEADING "Bind DataType" FORMAT a80 + +SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , ss.instance_number + , ss.sql_id + , ss.plan_hash_value + , (select listagg(NVL(name,':B' || position) + ||'[' + || datatype_string || NVL2(scale + ,'(' || scale || NVL2(precision,','|| precision,'') || ')' + ,'' + ) + || ']' + ||'=' + || CASE + WHEN datatype_string <> 'TIMESTAMP' THEN NVL(value_string,'NULL') + ELSE TO_CHAR(ANYDATA.ACCESStimestamp(VALUE_ANYDATA)) + END + ,',' + ) WITHIN GROUP (order by position) + from table(dbms_sqltune.extract_binds(ss.BIND_DATA)) + ) bind_values +/* + , (select listagg(NVL(name,':B' || position) || '=' + || datatype_string || NVL2(scale,'(' || scale || NVL2(precision,','|| precision, '') || ')' ,'' ) + ,',' + ) WITHIN GROUP (order by position) + from table(dbms_sqltune.extract_binds(ss.BIND_DATA)) + ) bind_datatype +*/ + from v$database d + JOIN dba_hist_snapshot s ON s.dbid = d.dbid + JOIN dba_hist_sqlstat ss ON ss.dbid = s.dbid AND ss.instance_number = s.instance_number AND ss.snap_id = s.snap_id + AND ss.executions_delta > 0 + where s.end_interval_time > SYSDATE - &&days + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature = '&&force_matching_signature' + &&whereclause +ORDER BY s.end_interval_time + , ss.instance_number +; + diff --git a/star/awr_sqlid.sql b/star/awr_sqlid.sql new file mode 100644 index 0000000..f4bb9ff --- /dev/null +++ b/star/awr_sqlid.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sql_text FOR A200 WORD_WRAP + +SELECT + * +FROM + dba_hist_sqltext +WHERE + sql_id = '&1' +/ diff --git a/star/awrsign.sql b/star/awrsign.sql new file mode 100644 index 0000000..f34f5bd --- /dev/null +++ b/star/awrsign.sql @@ -0,0 +1,53 @@ +COLUMN iname HEADING "Instance" FORMAT A8 +COLUMN snap_id HEADING "Snap|Id" FORMAT 9999999 +COLUMN endsnaptime HEADING "End|snaphot|time" FORMAT A11 +COLUMN sql_id HEADING "SQL_ID" FORMAT A13 +COLUMN plan_hash_value HEADING "Plan|hash|value" +COLUMN executions_delta HEADING "#Ex" FORMAT 9999999 +COLUMN end_of_fetch_count_delta HEADING "#EOF" FORMAT 9999999 +COLUMN buffer_gets_delta HEADING "Buffer|gets" +COLUMN bufferperexec HEADING "Buffer|gets|/exec" FORMAT 9999999999 +COLUMN optimizer_cost HEADING "0ptimizer|cost" +COLUMN rows_processed_delta HEADING "#Rows" +COLUMN sql_profile HEADING "SQL|Prof" FORMAT A4 +COLUMN elapsed_time_delta HEADING "Elapsed|time|/exec|(sec)" FORMAT 99999 +COLUMN cpu_time_delta HEADING "CPU|time|/exec|(sec)" FORMAT 9999 +COLUMN iowait_delta HEADING "IO|time|/exec|(sec)" FORMAT 99999 +COLUMN px_servers_execs_delta HEADING "Px" FORMAT 9999 +COLUMN disk_reads_delta HEADING "Disk|reads" +COLUMN io_offload_elig_bytes_delta HEADING "Elig|Mb" FORMAT 999999 +COLUMN io_interconnect_bytes_delta HEADING "Inter|Mb" FORMAT 999999 + +select + i.instance_name iname, + snap_id, + to_char(end_interval_time,'dd/mm hh24:mi') endsnaptime, + sql_id, + plan_hash_value, + optimizer_cost, + executions_delta, + end_of_fetch_count_delta, + buffer_gets_delta, + buffer_gets_delta/executions_delta bufferperexec, + decode (sql_profile,null, '',substr(sql_profile,1,4)) sql_profile, + px_servers_execs_delta, + disk_reads_delta, + round(elapsed_time_delta/1000000) elapsed_time_delta, + round(cpu_time_delta/1000000) cpu_time_delta, + round(iowait_delta/1000000) iowait_delta, + io_offload_elig_bytes_delta/1024/1024 io_offload_elig_bytes_delta, + io_interconnect_bytes_delta/1024/1024 io_interconnect_bytes_delta, + rows_processed_delta +from + dba_hist_sqlstat sqlstat + join dba_hist_snapshot snap using (snap_id,instance_number) + join gv$instance i using (instance_number) +where + snap.begin_interval_time>=&&2 + and snap.end_interval_time<=&&3 + and force_matching_signature='&&1' + and executions_delta>0 +order by + snap_id asc +/ + diff --git a/star/awrsqlid.sql b/star/awrsqlid.sql new file mode 100644 index 0000000..937ef43 --- /dev/null +++ b/star/awrsqlid.sql @@ -0,0 +1,51 @@ +COLUMN iname HEADING "Instance" FORMAT A8 +COLUMN snap_id HEADING "Snap|Id" FORMAT 9999999 +COLUMN endsnaptime HEADING "End|snaphot|time" FORMAT A11 +COLUMN plan_hash_value HEADING "Plan|hash|value" +COLUMN executions_delta HEADING "#Ex" FORMAT 9999999 +COLUMN end_of_fetch_count_delta HEADING "#EOF" FORMAT 9999999 +COLUMN buffer_gets_delta HEADING "Buffer|gets" +COLUMN bufferperexec HEADING "Buffer|gets|/exec" FORMAT 9999999999 +COLUMN optimizer_cost HEADING "0ptimizer|cost" +COLUMN rows_processed_delta HEADING "#Rows" +COLUMN sql_profile HEADING "SQL|Prof" FORMAT A4 +COLUMN elapsed_time_delta HEADING "Elapsed|time|/exec|(sec)" FORMAT 99999 +COLUMN cpu_time_delta HEADING "CPU|time|/exec|(sec)" FORMAT 9999 +COLUMN iowait_delta HEADING "IO|time|/exec|(sec)" FORMAT 99999 +COLUMN px_servers_execs_delta HEADING "Px" FORMAT 99999 +COLUMN disk_reads_delta HEADING "Disk|reads" +COLUMN io_offload_elig_bytes_delta HEADING "Elig|Mb" FORMAT 999999 +COLUMN io_interconnect_bytes_delta HEADING "Inter|Mb" FORMAT 999999 + +select + i.instance_name iname, + snap_id, + to_char(end_interval_time,'dd/mm hh24:mi') endsnaptime, + plan_hash_value, + optimizer_cost, + executions_delta, + end_of_fetch_count_delta, + buffer_gets_delta, + buffer_gets_delta/executions_delta bufferperexec, + decode (sql_profile,null, '',substr(sql_profile,1,4)) sql_profile, + px_servers_execs_delta, + disk_reads_delta, + round(elapsed_time_delta/1000000) elapsed_time_delta, + round(cpu_time_delta/1000000) cpu_time_delta, + round(iowait_delta/1000000) iowait_delta, + io_offload_elig_bytes_delta/1024/1024 io_offload_elig_bytes_delta, + io_interconnect_bytes_delta/1024/1024 io_interconnect_bytes_delta, + rows_processed_delta +from + dba_hist_sqlstat sqlstat + join dba_hist_snapshot snap using (snap_id,instance_number) + join gv$instance i using (instance_number) +where + snap.begin_interval_time>=&&2 + and snap.end_interval_time<=&&3 + and sql_id='&&1' + and executions_delta>0 +order by + snap_id asc +/ + diff --git a/star/coe_xfr_sql_profile.sql b/star/coe_xfr_sql_profile.sql new file mode 100644 index 0000000..625963b --- /dev/null +++ b/star/coe_xfr_sql_profile.sql @@ -0,0 +1,484 @@ +SPO coe_xfr_sql_profile.log; +SET DEF ON TERM OFF ECHO ON FEED OFF VER OFF HEA ON LIN 2000 PAGES 100 LONG 8000000 LONGC 800000 TRIMS ON TI OFF TIMI OFF SERVEROUT ON SIZE 1000000 NUMF "" SQLP SQL>; +SET SERVEROUT ON SIZE UNL; +REM +REM $Header: 215187.1 coe_xfr_sql_profile.sql 11.4.5.5 2013/03/01 carlos.sierra $ +REM +REM Copyright (c) 2000-2013, Oracle Corporation. All rights reserved. +REM +REM AUTHOR +REM carlos.sierra@oracle.com +REM +REM SCRIPT +REM coe_xfr_sql_profile.sql +REM +REM DESCRIPTION +REM This script generates another that contains the commands to +REM create a manual custom SQL Profile out of a known plan from +REM memory or AWR. The manual custom profile can be implemented +REM into the same SOURCE system where the plan was retrieved, +REM or into another similar TARGET system that has same schema +REM objects referenced by the SQL that generated the known plan. +REM +REM PRE-REQUISITES +REM 1. Oracle Tuning Pack license. +REM +REM PARAMETERS +REM 1. SQL_ID (required) +REM 2. Plan Hash Value for which a manual custom SQL Profile is +REM needed (required). A list of known plans is presented. +REM You may choose from list provided or enter a valid phv +REM from a version of the SQL modified with Hints. +REM +REM EXECUTION +REM 1. Connect into SQL*Plus as user with access to data dictionary. +REM Do not use SYS. +REM 2. Execute script coe_xfr_sql_profile.sql passing SQL_ID and +REM plan hash value (parameters can be passed inline or until +REM requested). +REM +REM EXAMPLE +REM # sqlplus system +REM SQL> START coe_xfr_sql_profile.sql [SQL_ID] [PLAN_HASH_VALUE]; +REM SQL> START coe_xfr_sql_profile.sql gnjy0mn4y9pbm 2055843663; +REM SQL> START coe_xfr_sql_profile.sql gnjy0mn4y9pbm; +REM SQL> START coe_xfr_sql_profile.sql; +REM +REM NOTES +REM 1. For possible errors see coe_xfr_sql_profile.log +REM 2. If SQLT is installed in SOURCE, you can use instead: +REM sqlt/utl/sqltprofile.sql +REM 3. Be aware that using DBMS_SQLTUNE requires a license for +REM Oracle Tuning Pack. +REM 4. Use a DBA user but not SYS. +REM +SET TERM ON ECHO OFF; +PRO +PRO Parameter 1: +PRO SQL_ID (required) +PRO +DEF sql_id = '&1'; +PRO +WITH +p AS ( +SELECT plan_hash_value + FROM gv$sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND other_xml IS NOT NULL + UNION +SELECT plan_hash_value + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND other_xml IS NOT NULL ), +m AS ( +SELECT plan_hash_value, + SUM(elapsed_time)/SUM(executions) avg_et_secs + FROM gv$sql + WHERE sql_id = TRIM('&&sql_id.') + AND executions > 0 + GROUP BY + plan_hash_value ), +a AS ( +SELECT plan_hash_value, + SUM(elapsed_time_total)/SUM(executions_total) avg_et_secs + FROM dba_hist_sqlstat + WHERE sql_id = TRIM('&&sql_id.') + AND executions_total > 0 + GROUP BY + plan_hash_value ) +SELECT p.plan_hash_value, + ROUND(NVL(m.avg_et_secs, a.avg_et_secs)/1e6, 3) avg_et_secs + FROM p, m, a + WHERE p.plan_hash_value = m.plan_hash_value(+) + AND p.plan_hash_value = a.plan_hash_value(+) + ORDER BY + avg_et_secs NULLS LAST; +PRO +PRO Parameter 2: +PRO PLAN_HASH_VALUE (required) +PRO +DEF plan_hash_value = '&2'; +PRO +PRO Values passed to coe_xfr_sql_profile: +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO SQL_ID : "&&sql_id." +PRO PLAN_HASH_VALUE: "&&plan_hash_value." +PRO +SET TERM OFF ECHO ON; +WHENEVER SQLERROR EXIT SQL.SQLCODE; + +-- trim parameters +COL sql_id NEW_V sql_id FOR A30; +COL plan_hash_value NEW_V plan_hash_value FOR A30; +SELECT TRIM('&&sql_id.') sql_id, TRIM('&&plan_hash_value.') plan_hash_value FROM DUAL; + +VAR sql_text CLOB; +VAR sql_text2 CLOB; +VAR other_xml CLOB; +EXEC :sql_text := NULL; +EXEC :sql_text2 := NULL; +EXEC :other_xml := NULL; + +-- get sql_text from memory +DECLARE + l_sql_text VARCHAR2(32767); +BEGIN -- 10g see bug 5017909 + FOR i IN (SELECT DISTINCT piece, sql_text + FROM gv$sqltext_with_newlines + WHERE sql_id = TRIM('&&sql_id.') + ORDER BY 1, 2) + LOOP + IF :sql_text IS NULL THEN + DBMS_LOB.CREATETEMPORARY(:sql_text, TRUE); + DBMS_LOB.OPEN(:sql_text, DBMS_LOB.LOB_READWRITE); + END IF; + -- removes NUL characters + l_sql_text := REPLACE(i.sql_text, CHR(00), ' '); + -- adds a NUL character at the end of each line + DBMS_LOB.WRITEAPPEND(:sql_text, LENGTH(l_sql_text) + 1, l_sql_text||CHR(00)); + END LOOP; + -- if found in memory then sql_text is not null + IF :sql_text IS NOT NULL THEN + DBMS_LOB.CLOSE(:sql_text); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting sql_text from memory: '||SQLERRM); + :sql_text := NULL; +END; +/ + +SELECT :sql_text FROM DUAL; + +-- get sql_text from awr +DECLARE + l_sql_text VARCHAR2(32767); + l_clob_size NUMBER; + l_offset NUMBER; +BEGIN + IF :sql_text IS NULL OR NVL(DBMS_LOB.GETLENGTH(:sql_text), 0) = 0 THEN + SELECT sql_text + INTO :sql_text2 + FROM dba_hist_sqltext + WHERE sql_id = TRIM('&&sql_id.') + AND sql_text IS NOT NULL + AND ROWNUM = 1; + END IF; + -- if found in awr then sql_text2 is not null + IF :sql_text2 IS NOT NULL THEN + l_clob_size := NVL(DBMS_LOB.GETLENGTH(:sql_text2), 0); + l_offset := 1; + DBMS_LOB.CREATETEMPORARY(:sql_text, TRUE); + DBMS_LOB.OPEN(:sql_text, DBMS_LOB.LOB_READWRITE); + -- store in clob as 64 character pieces plus a NUL character at the end of each piece + WHILE l_offset < l_clob_size + LOOP + IF l_clob_size - l_offset > 64 THEN + l_sql_text := REPLACE(DBMS_LOB.SUBSTR(:sql_text2, 64, l_offset), CHR(00), ' '); + ELSE -- last piece + l_sql_text := REPLACE(DBMS_LOB.SUBSTR(:sql_text2, l_clob_size - l_offset + 1, l_offset), CHR(00), ' '); + END IF; + DBMS_LOB.WRITEAPPEND(:sql_text, LENGTH(l_sql_text) + 1, l_sql_text||CHR(00)); + l_offset := l_offset + 64; + END LOOP; + DBMS_LOB.CLOSE(:sql_text); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting sql_text from awr: '||SQLERRM); + :sql_text := NULL; +END; +/ + +SELECT :sql_text2 FROM DUAL; +SELECT :sql_text FROM DUAL; + +-- validate sql_text +SET TERM ON; +BEGIN + IF :sql_text IS NULL THEN + RAISE_APPLICATION_ERROR(-20100, 'SQL_TEXT for SQL_ID &&sql_id. was not found in memory (gv$sqltext_with_newlines) or AWR (dba_hist_sqltext).'); + END IF; +END; +/ +SET TERM OFF; + +-- get other_xml from memory +BEGIN + FOR i IN (SELECT other_xml + FROM gv$sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + child_number, id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from memory: '||SQLERRM); + :other_xml := NULL; +END; +/ + +-- get other_xml from awr +BEGIN + IF :other_xml IS NULL OR NVL(DBMS_LOB.GETLENGTH(:other_xml), 0) = 0 THEN + FOR i IN (SELECT other_xml + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from awr: '||SQLERRM); + :other_xml := NULL; +END; +/ + +-- get other_xml from memory from modified SQL +BEGIN + IF :other_xml IS NULL OR NVL(DBMS_LOB.GETLENGTH(:other_xml), 0) = 0 THEN + FOR i IN (SELECT other_xml + FROM gv$sql_plan + WHERE plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + child_number, id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from memory: '||SQLERRM); + :other_xml := NULL; +END; +/ + +-- get other_xml from awr from modified SQL +BEGIN + IF :other_xml IS NULL OR NVL(DBMS_LOB.GETLENGTH(:other_xml), 0) = 0 THEN + FOR i IN (SELECT other_xml + FROM dba_hist_sql_plan + WHERE plan_hash_value = TO_NUMBER(TRIM('&&plan_hash_value.')) + AND other_xml IS NOT NULL + ORDER BY + id) + LOOP + :other_xml := i.other_xml; + EXIT; -- 1st + END LOOP; + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('getting other_xml from awr: '||SQLERRM); + :other_xml := NULL; +END; +/ + +SELECT :other_xml FROM DUAL; + +-- validate other_xml +SET TERM ON; +BEGIN + IF :other_xml IS NULL THEN + RAISE_APPLICATION_ERROR(-20101, 'PLAN for SQL_ID &&sql_id. and PHV &&plan_hash_value. was not found in memory (gv$sql_plan) or AWR (dba_hist_sql_plan).'); + END IF; +END; +/ +SET TERM OFF; + +-- generates script that creates sql profile in target system: +SET ECHO OFF; +PRO coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql. +SET FEED OFF LIN 666 TRIMS ON TI OFF TIMI OFF SERVEROUT ON SIZE 1000000 FOR WOR; +SET SERVEROUT ON SIZE UNL FOR WOR; +SPO OFF; +SPO coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql; +DECLARE + l_pos NUMBER; + l_clob_size NUMBER; + l_offset NUMBER; + l_sql_text VARCHAR2(32767); + l_len NUMBER; + l_hint VARCHAR2(32767); +BEGIN + DBMS_OUTPUT.PUT_LINE('SPO coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..log;'); + DBMS_OUTPUT.PUT_LINE('SET ECHO ON TERM ON LIN 2000 TRIMS ON NUMF 99999999999999999999;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM $Header: 215187.1 coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql 11.4.4.4 '||TO_CHAR(SYSDATE, 'YYYY/MM/DD')||' carlos.sierra $'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM Copyright (c) 2000-2012, Oracle Corporation. All rights reserved.'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM AUTHOR'); + DBMS_OUTPUT.PUT_LINE('REM carlos.sierra@oracle.com'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM SCRIPT'); + DBMS_OUTPUT.PUT_LINE('REM coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM DESCRIPTION'); + DBMS_OUTPUT.PUT_LINE('REM This script is generated by coe_xfr_sql_profile.sql'); + DBMS_OUTPUT.PUT_LINE('REM It contains the SQL*Plus commands to create a custom'); + DBMS_OUTPUT.PUT_LINE('REM SQL Profile for SQL_ID &&sql_id. based on plan hash'); + DBMS_OUTPUT.PUT_LINE('REM value &&plan_hash_value..'); + DBMS_OUTPUT.PUT_LINE('REM The custom SQL Profile to be created by this script'); + DBMS_OUTPUT.PUT_LINE('REM will affect plans for SQL commands with signature'); + DBMS_OUTPUT.PUT_LINE('REM matching the one for SQL Text below.'); + DBMS_OUTPUT.PUT_LINE('REM Review SQL Text and adjust accordingly.'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM PARAMETERS'); + DBMS_OUTPUT.PUT_LINE('REM None.'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM EXAMPLE'); + DBMS_OUTPUT.PUT_LINE('REM SQL> START coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('REM NOTES'); + DBMS_OUTPUT.PUT_LINE('REM 1. Should be run as SYSTEM or SYSDBA.'); + DBMS_OUTPUT.PUT_LINE('REM 2. User must have CREATE ANY SQL PROFILE privilege.'); + DBMS_OUTPUT.PUT_LINE('REM 3. SOURCE and TARGET systems can be the same or similar.'); + DBMS_OUTPUT.PUT_LINE('REM 4. To drop this custom SQL Profile after it has been created:'); + DBMS_OUTPUT.PUT_LINE('REM EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(''coe_&&sql_id._&&plan_hash_value.'');'); + DBMS_OUTPUT.PUT_LINE('REM 5. Be aware that using DBMS_SQLTUNE requires a license'); + DBMS_OUTPUT.PUT_LINE('REM for the Oracle Tuning Pack.'); + DBMS_OUTPUT.PUT_LINE('REM 6. If you modified a SQL putting Hints in order to produce a desired'); + DBMS_OUTPUT.PUT_LINE('REM Plan, you can remove the artifical Hints from SQL Text pieces below.'); + DBMS_OUTPUT.PUT_LINE('REM By doing so you can create a custom SQL Profile for the original'); + DBMS_OUTPUT.PUT_LINE('REM SQL but with the Plan captured from the modified SQL (with Hints).'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('WHENEVER SQLERROR EXIT SQL.SQLCODE;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('VAR signature NUMBER;'); + DBMS_OUTPUT.PUT_LINE('VAR signaturef NUMBER;'); + DBMS_OUTPUT.PUT_LINE('REM'); + DBMS_OUTPUT.PUT_LINE('DECLARE'); + DBMS_OUTPUT.PUT_LINE('sql_txt CLOB;'); + DBMS_OUTPUT.PUT_LINE('h SYS.SQLPROF_ATTR;'); + DBMS_OUTPUT.PUT_LINE('PROCEDURE wa (p_line IN VARCHAR2) IS'); + DBMS_OUTPUT.PUT_LINE('BEGIN'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.WRITEAPPEND(sql_txt, LENGTH(p_line), p_line);'); + DBMS_OUTPUT.PUT_LINE('END wa;'); + DBMS_OUTPUT.PUT_LINE('BEGIN'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.CREATETEMPORARY(sql_txt, TRUE);'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.OPEN(sql_txt, DBMS_LOB.LOB_READWRITE);'); + DBMS_OUTPUT.PUT_LINE('-- SQL Text pieces below do not have to be of same length.'); + DBMS_OUTPUT.PUT_LINE('-- So if you edit SQL Text (i.e. removing temporary Hints),'); + DBMS_OUTPUT.PUT_LINE('-- there is no need to edit or re-align unmodified pieces.'); + l_clob_size := NVL(DBMS_LOB.GETLENGTH(:sql_text), 0); + l_offset := 1; + WHILE l_offset < l_clob_size + LOOP + l_pos := DBMS_LOB.INSTR(:sql_text, CHR(00), l_offset); + IF l_pos > 0 THEN + l_len := l_pos - l_offset; + ELSE -- last piece + l_len := l_clob_size - l_pos + 1; + END IF; + l_sql_text := DBMS_LOB.SUBSTR(:sql_text, l_len, l_offset); + /* cannot do such 3 replacement since a line could end with a comment using "--" + l_sql_text := REPLACE(l_sql_text, CHR(10), ' '); -- replace LF with SP + l_sql_text := REPLACE(l_sql_text, CHR(13), ' '); -- replace CR with SP + l_sql_text := REPLACE(l_sql_text, CHR(09), ' '); -- replace TAB with SP + */ + l_offset := l_offset + l_len + 1; + IF l_len > 0 THEN + IF INSTR(l_sql_text, '''[') + INSTR(l_sql_text, ']''') = 0 THEN + l_sql_text := '['||l_sql_text||']'; + ELSIF INSTR(l_sql_text, '''{') + INSTR(l_sql_text, '}''') = 0 THEN + l_sql_text := '{'||l_sql_text||'}'; + ELSIF INSTR(l_sql_text, '''<') + INSTR(l_sql_text, '>''') = 0 THEN + l_sql_text := '<'||l_sql_text||'>'; + ELSIF INSTR(l_sql_text, '''(') + INSTR(l_sql_text, ')''') = 0 THEN + l_sql_text := '('||l_sql_text||')'; + ELSIF INSTR(l_sql_text, '''"') + INSTR(l_sql_text, '"''') = 0 THEN + l_sql_text := '"'||l_sql_text||'"'; + ELSIF INSTR(l_sql_text, '''|') + INSTR(l_sql_text, '|''') = 0 THEN + l_sql_text := '|'||l_sql_text||'|'; + ELSIF INSTR(l_sql_text, '''~') + INSTR(l_sql_text, '~''') = 0 THEN + l_sql_text := '~'||l_sql_text||'~'; + ELSIF INSTR(l_sql_text, '''^') + INSTR(l_sql_text, '^''') = 0 THEN + l_sql_text := '^'||l_sql_text||'^'; + ELSIF INSTR(l_sql_text, '''@') + INSTR(l_sql_text, '@''') = 0 THEN + l_sql_text := '@'||l_sql_text||'@'; + ELSIF INSTR(l_sql_text, '''#') + INSTR(l_sql_text, '#''') = 0 THEN + l_sql_text := '#'||l_sql_text||'#'; + ELSIF INSTR(l_sql_text, '''%') + INSTR(l_sql_text, '%''') = 0 THEN + l_sql_text := '%'||l_sql_text||'%'; + ELSIF INSTR(l_sql_text, '''$') + INSTR(l_sql_text, '$''') = 0 THEN + l_sql_text := '$'||l_sql_text||'$'; + ELSE + l_sql_text := CHR(96)||l_sql_text||CHR(96); + END IF; + DBMS_OUTPUT.PUT_LINE('wa(q'''||l_sql_text||''');'); + END IF; + END LOOP; + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.CLOSE(sql_txt);'); + DBMS_OUTPUT.PUT_LINE('h := SYS.SQLPROF_ATTR('); + DBMS_OUTPUT.PUT_LINE('q''[BEGIN_OUTLINE_DATA]'','); + FOR i IN (SELECT /*+ opt_param('parallel_execution_enabled', 'false') */ + SUBSTR(EXTRACTVALUE(VALUE(d), '/hint'), 1, 4000) hint + FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(:other_xml), '/*/outline_data/hint'))) d) + LOOP + l_hint := i.hint; + WHILE NVL(LENGTH(l_hint), 0) > 0 + LOOP + IF LENGTH(l_hint) <= 500 THEN + DBMS_OUTPUT.PUT_LINE('q''['||l_hint||']'','); + l_hint := NULL; + ELSE + l_pos := INSTR(SUBSTR(l_hint, 1, 500), ' ', -1); + DBMS_OUTPUT.PUT_LINE('q''['||SUBSTR(l_hint, 1, l_pos)||']'','); + l_hint := ' '||SUBSTR(l_hint, l_pos); + END IF; + END LOOP; + END LOOP; + DBMS_OUTPUT.PUT_LINE('q''[END_OUTLINE_DATA]'');'); + DBMS_OUTPUT.PUT_LINE(':signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt);'); + DBMS_OUTPUT.PUT_LINE(':signaturef := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt, TRUE);'); + DBMS_OUTPUT.PUT_LINE('DBMS_SQLTUNE.IMPORT_SQL_PROFILE ('); + DBMS_OUTPUT.PUT_LINE('sql_text => sql_txt,'); + DBMS_OUTPUT.PUT_LINE('profile => h,'); + DBMS_OUTPUT.PUT_LINE('name => ''coe_&&sql_id._&&plan_hash_value.'','); + DBMS_OUTPUT.PUT_LINE('description => ''coe &&sql_id. &&plan_hash_value. ''||:signature||'' ''||:signaturef||'''','); + DBMS_OUTPUT.PUT_LINE('category => ''DEFAULT'','); + DBMS_OUTPUT.PUT_LINE('validate => TRUE,'); + DBMS_OUTPUT.PUT_LINE('replace => TRUE,'); + DBMS_OUTPUT.PUT_LINE('force_match => FALSE /* TRUE:FORCE (match even when different literals in SQL). FALSE:EXACT (similar to CURSOR_SHARING) */ );'); + DBMS_OUTPUT.PUT_LINE('DBMS_LOB.FREETEMPORARY(sql_txt);'); + DBMS_OUTPUT.PUT_LINE('END;'); + DBMS_OUTPUT.PUT_LINE('/'); + DBMS_OUTPUT.PUT_LINE('WHENEVER SQLERROR CONTINUE'); + DBMS_OUTPUT.PUT_LINE('SET ECHO OFF;'); + DBMS_OUTPUT.PUT_LINE('PRINT signature'); + DBMS_OUTPUT.PUT_LINE('PRINT signaturef'); + DBMS_OUTPUT.PUT_LINE('PRO'); + DBMS_OUTPUT.PUT_LINE('PRO ... manual custom SQL Profile has been created'); + DBMS_OUTPUT.PUT_LINE('PRO'); + DBMS_OUTPUT.PUT_LINE('SET TERM ON ECHO OFF LIN 80 TRIMS OFF NUMF "";'); + DBMS_OUTPUT.PUT_LINE('SPO OFF;'); + DBMS_OUTPUT.PUT_LINE('PRO'); + DBMS_OUTPUT.PUT_LINE('PRO COE_XFR_SQL_PROFILE_&&sql_id._&&plan_hash_value. completed'); +END; +/ +SPO OFF; +SET DEF ON TERM ON ECHO OFF FEED 6 VER ON HEA ON LIN 80 PAGES 14 LONG 80 LONGC 80 TRIMS OFF TI OFF TIMI OFF SERVEROUT OFF NUMF "" SQLP SQL>; +SET SERVEROUT OFF; +PRO +PRO Execute coe_xfr_sql_profile_&&sql_id._&&plan_hash_value..sql +PRO on TARGET system in order to create a custom SQL Profile +PRO with plan &&plan_hash_value linked to adjusted sql_text. +PRO +UNDEFINE 1 2 sql_id plan_hash_value +CL COL +PRO +PRO COE_XFR_SQL_PROFILE completed. diff --git a/star/colored_sql_id.sql b/star/colored_sql_id.sql new file mode 100644 index 0000000..f483b56 --- /dev/null +++ b/star/colored_sql_id.sql @@ -0,0 +1,7 @@ +select * from DBA_HIST_COLORED_SQL; + +prompt To ADD colored : execute DBMS_WORKLOAD_REPOSITORY.ADD_COLORED_SQL(sql_id=>'') +prompt To REMOVE colored : execute DBMS_WORKLOAD_REPOSITORY.REMOVE_COLORED_SQL(sql_id=>'') +prompt + + diff --git a/star/create_spb_from_awr.sql b/star/create_spb_from_awr.sql new file mode 100644 index 0000000..17a3406 --- /dev/null +++ b/star/create_spb_from_awr.sql @@ -0,0 +1,108 @@ +-- Create SQL Plan Baselin from AWR Plan +SET PAGES 200 LONG 80000; + +ACC sql_id PROMPT 'Enter SQL_ID: '; + +WITH +p AS ( +SELECT plan_hash_value + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND dbid = (SELECT dbid FROM v$database) + AND other_xml IS NOT NULL ), +a AS ( +SELECT plan_hash_value, + SUM(elapsed_time_total)/SUM(executions_total) avg_et_secs, + MAX(executions_total) executions_total + FROM dba_hist_sqlstat + WHERE sql_id = TRIM('&&sql_id.') + AND executions_total > 0 + GROUP BY + plan_hash_value ) +SELECT p.plan_hash_value, + ROUND(a.avg_et_secs/1e6, 6) avg_et_secs, + a.executions_total + FROM p, a + WHERE p.plan_hash_value = a.plan_hash_value(+) + ORDER BY + avg_et_secs NULLS LAST; + +ACC plan_hash_value PROMPT 'Enter Plan Hash Value: '; + +COL dbid NEW_V dbid NOPRI; +SELECT dbid FROM v$database; + +COL begin_snap_id NEW_V begin_snap_id NOPRI; +COL end_snap_id NEW_V end_snap_id NOPRI; + +SELECT MIN(p.snap_id) begin_snap_id, MAX(p.snap_id) end_snap_id + FROM dba_hist_sqlstat p, + dba_hist_snapshot s + WHERE p.dbid = &&dbid + AND p.sql_id = '&&sql_id.' + AND p.plan_hash_value = TO_NUMBER('&&plan_hash_value.') + AND s.snap_id = p.snap_id + AND s.dbid = p.dbid + AND s.instance_number = p.instance_number; + +VAR sqlset_name VARCHAR2(30); + +EXEC :sqlset_name := REPLACE('s_&&sql_id._&&plan_hash_value._awr', ' '); + +PRINT sqlset_name; + +SET SERVEROUT ON; + +VAR plans NUMBER; + +DECLARE + l_sqlset_name VARCHAR2(30); + l_description VARCHAR2(256); + sts_cur SYS.DBMS_SQLTUNE.SQLSET_CURSOR; +BEGIN + l_sqlset_name := :sqlset_name; + l_description := 'SQL_ID:&&sql_id., PHV:&&plan_hash_value., BEGIN:&&begin_snap_id., END:&&end_snap_id.'; + l_description := REPLACE(REPLACE(l_description, ' '), ',', ', '); + + BEGIN + DBMS_OUTPUT.put_line('dropping sqlset: '||l_sqlset_name); + SYS.DBMS_SQLTUNE.drop_sqlset ( + sqlset_name => l_sqlset_name, + sqlset_owner => USER ); + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line(SQLERRM||' while trying to drop STS: '||l_sqlset_name||' (safe to ignore)'); + END; + + l_sqlset_name := + SYS.DBMS_SQLTUNE.create_sqlset ( + sqlset_name => l_sqlset_name, + description => l_description, + sqlset_owner => USER ); + DBMS_OUTPUT.put_line('created sqlset: '||l_sqlset_name); + + OPEN sts_cur FOR + SELECT VALUE(p) + FROM TABLE(DBMS_SQLTUNE.select_workload_repository (&&begin_snap_id., &&end_snap_id., + 'sql_id = ''&&sql_id.'' AND plan_hash_value = TO_NUMBER(''&&plan_hash_value.'') AND loaded_versions > 0', + NULL, NULL, NULL, NULL, 1, NULL, 'ALL')) p; + + SYS.DBMS_SQLTUNE.load_sqlset ( + sqlset_name => l_sqlset_name, + populate_cursor => sts_cur ); + DBMS_OUTPUT.put_line('loaded sqlset: '||l_sqlset_name); + + CLOSE sts_cur; + + :plans := DBMS_SPM.load_plans_from_sqlset ( + sqlset_name => l_sqlset_name, + sqlset_owner => USER ); +END; +/ + +PRINT plans; + +SET PAGES 14 LONG 80 ECHO OFF SERVEROUT OFF; + +UNDEF sql_id plan_hash_value +CL COL diff --git a/star/create_spb_from_cur.sql b/star/create_spb_from_cur.sql new file mode 100644 index 0000000..972ff72 --- /dev/null +++ b/star/create_spb_from_cur.sql @@ -0,0 +1,35 @@ +REM $Header: 215187.1 create_spb_from_cur.sql 12.1.02 2013/09/09 carlos.sierra $ +-- Create SQL Plan Baseline from SQL Cursor +ACC sql_text_piece PROMPT 'Enter SQL Text piece: ' + +SET PAGES 200 LONG 80000 ECHO ON; + +COL sql_text PRI; + +SELECT sql_id, sql_text /* exclude_me */ + FROM v$sqlarea + WHERE sql_text LIKE '%&&sql_text_piece.%' + AND sql_text NOT LIKE '%/* exclude_me */%'; + +ACC sql_id PROMPT 'Enter SQL_ID: '; + +SELECT plan_hash_value, SUM(executions) executions, SUM(elapsed_time) elapsed_time, /* exclude_me */ + CASE WHEN SUM(executions) > 0 THEN ROUND(SUM(elapsed_time)/SUM(executions)/1e6, 3) END avg_secs_per_exec + FROM v$sql + WHERE sql_id = '&&sql_id.' + GROUP BY + plan_hash_value + ORDER BY + 4 DESC NULLS FIRST; + +ACC plan_hash_value PROMPT 'Enter Plan Hash Value: '; + +VAR plans NUMBER; + +EXEC :plans := DBMS_SPM.load_plans_from_cursor_cache('&&sql_id.', TO_NUMBER('&&plan_hash_value.')); + +PRINT plans; + +SET PAGES 14 LONG 80 ECHO OFF; + +UNDEF sql_text_piece sql_id plan_hash_value diff --git a/star/dash_wait_chains.sql b/star/dash_wait_chains.sql new file mode 100644 index 0000000..ec1632b --- /dev/null +++ b/star/dash_wait_chains.sql @@ -0,0 +1,137 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: dash_wait_chains.sql (v0.6 BETA) +-- Purpose: Display ASH wait chains (multi-session wait signature, a session +-- waiting for another session etc.) +-- +-- Author: Tanel Poder +-- Copyright: (c) https://tanelpoder.com +-- +-- Usage: +-- @dash_wait_chains +-- +-- Example: +-- @dash_wait_chains username||':'||program2||event2 session_type='FOREGROUND' sysdate-1 sysdate +-- +-- Other: +-- This script uses only the DBA_HIST_ACTIVE_SESS_HISTORY view, use +-- @ash_wait_chains.sql for accessiong the V$ ASH view +-- +-------------------------------------------------------------------------------- +COL wait_chain FOR A300 WORD_WRAP +COL distinct_sids FOR 9999 HEAD "#Blkrs" +COL "%This" FOR A6 + +PROMPT +PROMPT -- Display ASH Wait Chain Signatures script v0.6 BETA by Tanel Poder ( https://tanelpoder.com ) + +WITH +bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat), +ash AS (SELECT /*+ INLINE QB_NAME(ash) LEADING(a) USE_HASH(u) SWAP_JOIN_INPUTS(u) */ + a.* + , o.* + , u.username + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , NVL(a.event||CASE WHEN event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||NVL((SELECT class FROM bclass WHERE r = a.p3),'undo @bclass '||a.p3)||']' ELSE null END,'ON CPU') + || ' ' event2 + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM + dba_hist_active_sess_history a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND sample_time BETWEEN &3 AND &4 + ), +ash_samples AS (SELECT /*+ INLINE */ DISTINCT sample_id FROM ash), +ash_data AS (SELECT /*+ INLINE */ * FROM ash), +chains AS ( + SELECT /*+ INLINE */ + sample_time ts + , level lvl + , session_id sid + , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND d.blocking_session IS NOT NULL THEN ' -> [idle blocker '||d.blocking_inst_id||','||d.blocking_session||','||d.blocking_session_serial#||(SELECT ' ('||s.program||')' FROM gv$session s WHERE (s.inst_id, s.sid , s.serial#) = ((d.blocking_inst_id,d.blocking_session,d.blocking_session_serial#)))||']' ELSE NULL END path -- there's a reason why I'm doing this + --, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ') path -- there's a reason why I'm doing this (ORA-30004 :) + --, SYS_CONNECT_BY_PATH(&1, ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN '('||d.session_id||')' ELSE NULL END path + --, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN ' [sid='||d.session_id||' seq#='||TO_CHAR(seq#)||']' ELSE NULL END path -- there's a reason why I'm doing this (ORA-30004 :) + , CASE WHEN CONNECT_BY_ISLEAF = 1 THEN d.session_id ELSE NULL END sids + , CONNECT_BY_ISLEAF isleaf + , CONNECT_BY_ISCYCLE iscycle + , d.* + FROM + ash_samples s + , ash_data d + WHERE + s.sample_id = d.sample_id + AND d.sample_time BETWEEN &3 AND &4 + CONNECT BY NOCYCLE + ( PRIOR d.blocking_session = d.session_id + AND PRIOR s.sample_id = d.sample_id + AND PRIOR d.blocking_inst_id = d.instance_number) + START WITH &2 +) +SELECT * FROM ( + SELECT + LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , COUNT(*) * 10 seconds + , ROUND(COUNT(*) * 10 / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + -- , MIN(sids) + -- , MAX(sids) + , COUNT(DISTINCT sids) distinct_sids + , path wait_chain + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + FROM + chains + WHERE + isleaf = 1 + GROUP BY + &1 + , path + ORDER BY + COUNT(*) DESC +) +WHERE + rownum <= 30 +/ + diff --git a/star/dashtop.sql b/star/dashtop.sql new file mode 100644 index 0000000..457281c --- /dev/null +++ b/star/dashtop.sql @@ -0,0 +1,146 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: dashtop.sql v1.2 +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @dashtop +-- +-- Example: +-- @dashtop username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the AWR's DBA_HIST_ACTIVE_SESS_HISTORY, use +-- @dashtop.sql for accessiong the V$ ASH view +-- +-- +-- TODO: +-- Deal with cases where there's no AWR snapshot saved to DBA_HIST_SNAPSHOTS +-- (due to a DB issue) but DBA_HIST_ASH samples are there +-------------------------------------------------------------------------------- + +COL "%This" FOR A7 +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" +COL event FOR A42 WORD_WRAP +COL event2 FOR A46 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +SELECT * FROM ( + WITH bclass AS (SELECT class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + 10 * COUNT(*) "TotalSeconds" + , ROUND(10 * COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , &1 +-- , 10 * SUM(CASE WHEN wait_class IS NULL THEN 1 ELSE 0 END) "CPU" +-- , 10 * SUM(CASE WHEN wait_class ='User I/O' THEN 1 ELSE 0 END) "User I/O" +-- , 10 * SUM(CASE WHEN wait_class ='Application' THEN 1 ELSE 0 END) "Application" +-- , 10 * SUM(CASE WHEN wait_class ='Concurrency' THEN 1 ELSE 0 END) "Concurrency" +-- , 10 * SUM(CASE WHEN wait_class ='Commit' THEN 1 ELSE 0 END) "Commit" +-- , 10 * SUM(CASE WHEN wait_class ='Configuration' THEN 1 ELSE 0 END) "Configuration" +-- , 10 * SUM(CASE WHEN wait_class ='Cluster' THEN 1 ELSE 0 END) "Cluster" +-- , 10 * SUM(CASE WHEN wait_class ='Idle' THEN 1 ELSE 0 END) "Idle" +-- , 10 * SUM(CASE WHEN wait_class ='Network' THEN 1 ELSE 0 END) "Network" +-- , 10 * SUM(CASE WHEN wait_class ='System I/O' THEN 1 ELSE 0 END) "System I/O" +-- , 10 * SUM(CASE WHEN wait_class ='Scheduler' THEN 1 ELSE 0 END) "Scheduler" +-- , 10 * SUM(CASE WHEN wait_class ='Administrative' THEN 1 ELSE 0 END) "Administrative" +-- , 10 * SUM(CASE WHEN wait_class ='Queueing' THEN 1 ELSE 0 END) "Queueing" +-- , 10 * SUM(CASE WHEN wait_class ='Other' THEN 1 ELSE 0 END) "Other" + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + FROM + (SELECT + a.* + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , NVL(event, session_state)|| + CASE + WHEN event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM dba_hist_active_sess_history a) a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND a.sample_time BETWEEN &3 AND &4 + AND a.dbid = (SELECT d.dbid FROM v$database d) -- for partition pruning + --AND a.snap_id IN (SELECT sn.snap_id FROM dba_hist_snapshot sn WHERE sn.begin_interval_time >= &3 AND sn.end_interval_time <= &4) -- for partition pruning + AND snap_id IN (SELECT snap_id FROM dba_hist_snapshot WHERE sample_time BETWEEN &3 AND &4) -- for partition pruning + --AND (a.dbid, a.snap_id) IN (SELECT d.dbid, sn.snap_id FROM v$database d, dba_hist_snapshot sn WHERE d.dbid = sn.dbid AND sn.begin_interval_time >= &3 AND sn.end_interval_time <= &4) -- for partition pruning + GROUP BY + &1 + ORDER BY + "TotalSeconds" DESC + , &1 +) +WHERE + ROWNUM <= 20 +/ + diff --git a/star/dasqlmon.sql b/star/dasqlmon.sql new file mode 100644 index 0000000..648e4ea --- /dev/null +++ b/star/dasqlmon.sql @@ -0,0 +1,107 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: dasqlmon.sql (v1.2) +-- +-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) https://tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @dasqlmon +-- +-- Notes: This script runs on Oracle 11g+ and you should have the +-- Diagnostics license for using it as it queries +-- some separately licensed views. +-- +------------------------------------------------------------------------------------------------------------------------ +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation HEAD Plan_Operation FOR a70 +COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE +COL asqlmon_sql_id HEAD SQL_ID NOPRINT +COL asqlmon_sql_child HEAD "CHILD" PRINT +COL asqlmon_sample_time HEAD SAMPLE_HOUR +COL projection FOR A520 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "ID" FOR 9999 +COL asqlmon_parent_id HEAD "PID" FOR 9999 + +BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation + +PROMPT +PROMPT -- ASQLMon v1.1 - by Tanel Poder ( https://tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events +FROM + dba_hist_active_sess_history ash +WHERE + 1=1 +AND ash.sql_id LIKE '&1' +AND ash.sql_plan_hash_value LIKE '&2' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +) +SELECT + plan.sql_id asqlmon_sql_id + , plan.plan_hash_value asqlmon_plan_hash_value + , sq.samples * 10 seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id + , plan.id asqlmon_id + , plan.parent_id asqlmon_parent_id + , LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , sq.session_state + , sq.event +-- , sq.avg_p3 + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name + , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| plan.access_predicates END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:]' || plan.filter_predicates END asqlmon_predicates +-- , plan.projection +FROM + dba_hist_sql_plan plan + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.plan_hash_value LIKE '&2' +ORDER BY + plan.plan_hash_value + , plan.id +/ diff --git a/star/dba_invalid_objects.sql b/star/dba_invalid_objects.sql new file mode 100644 index 0000000..c9853dc --- /dev/null +++ b/star/dba_invalid_objects.sql @@ -0,0 +1,63 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_invalid_objects.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provide a detailed report of all invalid objects in the | +-- | database. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Invalid Objects | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +-- SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN owner FORMAT a25 HEADING 'Owner' +COLUMN object_name FORMAT a30 HEADING 'Object Name' +COLUMN object_type FORMAT a20 HEADING 'Object Type' +COLUMN status FORMAT a10 HEADING 'Status' + +BREAK ON owner SKIP 2 ON report + +COMPUTE count LABEL "" OF object_name ON owner +COMPUTE count LABEL "Grand Total: " OF object_name ON report + +SELECT + owner + , object_name + , object_type + , status +FROM dba_objects +WHERE status <> 'VALID' +ORDER BY owner, object_name +/ + + diff --git a/star/dba_registry.sql b/star/dba_registry.sql new file mode 100644 index 0000000..d61e06f --- /dev/null +++ b/star/dba_registry.sql @@ -0,0 +1,62 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : dba_registry.sql | +-- | CLASS : Database Administration | +-- | PURPOSE : Provides summary report on all registered components. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Database Registry Components | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +-- SET LINESIZE 180 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN comp_id FORMAT a9 HEADING 'Component|ID' +COLUMN comp_name FORMAT a35 HEADING 'Component|Name' +COLUMN version FORMAT a13 HEADING 'Version' +COLUMN status FORMAT a11 HEADING 'Status' +COLUMN modified HEADING 'Modified' +COLUMN Schema FORMAT a15 HEADING 'Schema' +COLUMN procedure FORMAT a45 HEADING 'Procedure' + +SELECT + comp_id + , comp_name + , version + , status + , modified + , schema + , procedure +FROM + dba_registry +ORDER BY + comp_id; + diff --git a/star/h.sql b/star/h.sql new file mode 100644 index 0000000..97bf3ed --- /dev/null +++ b/star/h.sql @@ -0,0 +1,146 @@ +DEFINE search_string=&1 + +COLUMN name FORMAT A28 TRUNC +COLUMN description FORMAT A60 WORD_WRAP +COLUMN usage FORMAT A60 WORD_WRAP +COLUMN example FORMAT A56 WORD_WRAP +COLUMN tag FORMAT A20 WORD_WRAP + + +WITH q AS ( +SELECT * +FROM ( +SELECT 'otherxml.sql' AS name, 'Display outline hints from library cache' AS description, '@otherxml +' AS Usage, '@otherxml 1fbwxvngasv1f 1' AS Example, 'outline hint' AS tag FROM dual UNION ALL +SELECT 'sql_profile_hints.sql' AS name, 'Display SQL profile hints' AS description, '@sql_profile_hints.sql +' AS Usage, '@sql_profile_hints.sql sqlprof_2v4h21kf9bz0h' AS Example, 'sqlprof hint' AS tag FROM dual UNION ALL +SELECT 'awr_sqlid.sql' AS name, 'Display SQL text from AWR' AS description, '@awr_sqlid +' AS Usage, '@awr_sqlid 7q729nhdgtsqq' AS Example, 'awr sqltext' AS tag FROM dual UNION ALL +SELECT 'sqlbinds.sql' AS name, 'Show captured binds from GV$SQL_BIND_CAPTURE' AS description, '@sqlbinds +' AS Usage, '@sqlbinds 0qyu7wm1b2g1r % %' AS Example, 'bind' AS tag FROM dual UNION ALL +SELECT 'awr_sql_binds.sql' AS name, 'Display SQL Binds from AWR' AS description, '@awr_sql_binds.sql +' AS Usage, '@awr_sql_binds.sql 0qyu7wm1b2g1r 7 "and 1=1"'||chr(10)||'@awr_sql_binds.sql 6qqf9bakz7j3n 7 "and plan_hash_value=2088506832"' AS Example, 'bind' AS tag FROM dual UNION ALL +SELECT 'xlast.sql' AS name, 'Explain plan last SQL_ID' AS description, 'xlast.sql +' AS Usage, '' AS Example, 'explain' AS tag FROM dual UNION ALL +SELECT 'colored_sql_id.sql' AS name, 'Show colored SQL_ID' AS description, 'colored_sql_id.sql +' AS Usage, '' AS Example, 'color' AS tag FROM dual UNION ALL +SELECT 'xplan.sql' AS name, 'Explain plan from Library Cache' AS description, '@xplan +' AS Usage, '@xplan.sql gy2zd0jzw3w6y 0' AS Example, 'explain' AS tag FROM dual UNION ALL +SELECT 'sqlidtabstat.sql' AS name, 'Staleness for tables/indexes in execution plan' AS description, '@sqlidtabstat.sql +' AS Usage, '@sqlidtabstat.sql 2bu78cxnrm4s7' AS Example, 'stale' AS tag FROM dual UNION ALL +SELECT 'stale.sql' AS name, 'List DB stale tables' AS description, '@stale.sql +' AS Usage, '' AS Example, 'stale' AS tag FROM dual UNION ALL +SELECT 'tab_details.sql' AS name, 'Table details' AS description, '@tab_details.sql +' AS Usage, '@tab_details.sql SCOTT EMP' AS Example, 'table detail' AS tag FROM dual UNION ALL +SELECT 'tabstat.sql' AS name, 'Stats details for non PARTITIONED table' AS description, '@tabstat.sql +' AS Usage, '@tabstat.sql SCOTT DEPT' AS Example, 'table stat' AS tag FROM dual UNION ALL +SELECT 'tspstat.sql' AS name, 'Stats details for SUB-PARTITIONED table' AS description, '@tspstat.sql +' AS Usage, '@tspstat.sql SCOTT EMP EMP1998 EMP EMP1998_ITALY'||chr(10)||'@tspstat.sql SCOTT EMP EMP1998 EMP %' AS Example, 'subpart stat' AS tag FROM dual UNION ALL +SELECT 'tpstat.sql' AS name, 'Stats details for PARTITIONED table' AS description, '@tpstat.sql
    +' AS Usage, '@tpstat.sql SCOTT EMP EMP1998' AS Example, 'part stat' AS tag FROM dual UNION ALL +SELECT 'stats_history.sql' AS name, 'Display table statistics history' AS description, '@stats_history.sql +' AS Usage, '@stats_history.sql XPS LOAD % %' AS Example, 'history stat' AS tag FROM dual UNION ALL +SELECT 'stats_getpref_table.sql' AS name, 'Get table statistics prefs' AS description, '@stats_getpref_table.sql +' AS Usage, '@stats_getpref_table.sql REPORT REP112' AS Example, 'pref stat' AS tag FROM dual UNION ALL +SELECT 'stats_getpref_global.sql' AS name, 'Get GLOBAL statistics prefs' AS description, '@stats_getpref_global.sql +' AS Usage, '' AS Example, 'pref stat' AS tag FROM dual UNION ALL +SELECT 'sqltt_sqlid.sql' AS name, 'Create SQL Tuning Task for SQL_ID' AS description, '@sqltt_sqlid.sql +' AS Usage, '@sqltt_sqlid.sql 70mfpusqy9jvj 5' AS Example, 'tuning task' AS tag FROM dual UNION ALL +SELECT 'awr_snapshot.sql' AS name, 'Create AWR snapshot' AS description, '@awr_snapshot.sql +' AS Usage, '' AS Example, 'awr snapshot' AS tag FROM dual UNION ALL +SELECT 'sql_profile.sql' AS name, 'Display all SQL Profiles' AS description, '@sql_profile.sql +' AS Usage, '' AS Example, 'sqlprofile' AS tag FROM dual UNION ALL +SELECT 'sql_profile_detail.sql' AS name, 'Display SQL Profile detail' AS description, '@sql_profile_detail.sql +' AS Usage, '@sql_profile_detail.sql sqlprof_2v4h21kf9bz0h' AS Example, 'sqlprofile' AS tag FROM dual UNION ALL +SELECT 'create_spb_from_cur.sql' AS name, 'Create SQL Plan Baseline from Library Cache' AS description, '@create_spb_from_cur.sql +' AS Usage, '@create_spb_from_cur.sql g3sm89z3xb4zs' AS Example, 'baseline spb' AS tag FROM dual UNION ALL +SELECT 'create_spb_from_awr.sql' AS name, 'Create SQL Plan Baseline from AWR' AS description, '@create_spb_from_awr.sql +' AS Usage, '@create_spb_from_awr.sql g3sm89z3xb4zs' AS Example, 'baseline spb awr' AS tag FROM dual UNION ALL +SELECT 'sql_plan_baselines.sql' AS name, 'List SQL Plan Baselines' AS description, '@sql_plan_baselines.sql +' AS Usage, '' AS Example, 'baseline spb' AS tag FROM dual UNION ALL +SELECT 'sqlid_sign.sql' AS name, 'Display force matching signature of SQL_ID' AS description, '@sqlid_sign.sql +' AS Usage, '' AS Example, 'signature' AS tag FROM dual UNION ALL +SELECT 'awrsign.sql' AS name, 'AWR history for this force matching signature' AS description, '@awrsign.sql +' AS Usage, '' AS Example, 'signature' AS tag FROM dual UNION ALL +SELECT 'awrsqlid.sql' AS name, 'AWR history of SQL_ID' AS description, '@awrsqlid.sql +' AS Usage, '' AS Example, 'awr' AS tag FROM dual UNION ALL +SELECT 'ashtop.sql' AS name, 'ASH time from GV$ACTIVE_SESSION_HISTORY grouped by dimensions' AS description, '@ashtop.sql +' AS Usage, '@ashtop.sql username,sql_id session_type=''FOREGROUND'' sysdate-1/24 sysdate' AS Example, 'ash' AS tag FROM dual UNION ALL +SELECT 'dashtop.sql' AS name, 'ASH time from DBA_HIST_ACTIVE_SESS_HISTORY grouped by dimensions' AS description, '@dashtop.sql +' AS Usage, '@dashtop.sql sql_id 1=1 "TIMESTAMP''2024-02-06 09:10:35''" "TIMESTAMP''2024-02-06 12:20:50''"' AS Example, 'ash' AS tag FROM dual UNION ALL +SELECT 'ash_wait_chains.sql' AS name, 'ASH wait chains GV$ACTIVE_SESSION_HISTORY' AS description, '@ash_wait_chains.sql +' AS Usage, '@ash_wait_chains.sql username||'':''||program2||event2 session_type=''FOREGROUND'' sysdate-1/24 sysdate' AS Example, 'ash wait chain' AS tag FROM dual UNION ALL +SELECT 'dash_wait_chains.sql' AS name, 'ASH wait chains DBA_HIST_ACTIVE_SESS_HISTORY' AS description, '@dash_wait_chains.sql +' AS Usage, '@dash_wait_chains.sql username||'':''||program2||event2 session_type=''FOREGROUND'' "TIMESTAMP''2024-02-06 09:10:35''" "TIMESTAMP''2024-02-06 12:20:50''"' AS Example, 'ash wait chain' AS tag FROM dual UNION ALL +SELECT 'asqlmon.sql' AS name, 'Report SQL-monitoring-style from ASH (GV$ACTIVE_SESSION_HISTORY)' AS description, '@asqlmon.sql +' AS Usage, '' AS Example, 'ash sqlmon' AS tag FROM dual UNION ALL +SELECT 'dasqlmon.sql' AS name, 'Report SQL-monitoring-style from ASH (DBA_HIST_ACTIVE_SESS_HISTORY)' AS description, '@dasqlmon.sql +' AS Usage, '' AS Example, 'ash sqlmon' AS tag FROM dual UNION ALL +SELECT 'transaction_long_running.sql' AS name, 'Long running transactions' AS description, '@transaction_long_running.sql +' AS Usage, '@transaction_long_running.sql "and 1=1"'||chr(10)||'@transaction_long_running.sql "and sid=3198"' AS Example, 'trans' AS tag FROM dual UNION ALL +SELECT 'pardef.sql' AS name, 'Table (and index) partitions definition' AS description, '@pardef.sql +' AS Usage, '@pardef.sql POC DEMO1 %' AS Example, 'part' AS tag FROM dual UNION ALL +SELECT 'planx.sql' AS name, 'Carlos Sierra Explain Plan from LC/AWR' AS description, '@planx.sql +' AS Usage, '@planx.sql Y gy2zd0jzw3w6y' AS Example, 'explain cache library awr' AS tag FROM dual UNION ALL +SELECT 's.sql' AS name, 'Display current Session Wait and SQL_ID' AS description, '@s.sql +' AS Usage, '@s.sql 52,110,225'||chr(10)||'@s.sql "select sid from v$session where username = ''XYZ''"'||chr(10)||'@s/sql &mysid' AS Example, 'session wait sql_id' AS tag FROM dual UNION ALL +SELECT 'usess.sql' AS name, 'User session ldetails (SQL_ID, event, module etc.)' AS description, '@usess.sql +' AS Usage, '@usess.sql "1=1"'||chr(10)||'@usess.sql s.status=''ACTIVE'''||chr(10)||'@usess.sql "s.status=''ACTIVE'' and s.username=''STREAM_USER'' and s.module like ''%REPLI%''"' AS Example, 'session wait' AS tag FROM dual UNION ALL +SELECT 'sess.sql' AS name, 'User session (idevelopment.info)' AS description, '@sess.sql +' AS Usage, '' AS Example, 'session' AS tag FROM dual UNION ALL +SELECT 'sessa.sql' AS name, 'User active session (idevelopment.info)' AS description, '@sessa.sql +' AS Usage, '' AS Example, 'session active' AS tag FROM dual UNION ALL +SELECT 'locked_objects.sql' AS name, 'Locked objects' AS description, '@locked_objects.sql +' AS Usage, '@locked_objects.sql % % % "and 1=1"'||chr(10)||'@locked_objects.sql SCOTT EMP % "and 1=1"'||chr(10)||'@locked_objects.sql % % % "and osuser!=''oracle'' and owner!=''SYS''"' AS Example, 'lock' AS tag FROM dual UNION ALL +SELECT 'locks.sql' AS name, 'Displays currently locked objects in database' AS description, '@locks.sql +' AS Usage, '' AS Example, 'lock' AS tag FROM dual UNION ALL +SELECT 'locks_blocking.sql' AS name, 'Displays blocking locks in database' AS description, '@locks_blocking.sql +' AS Usage, '' AS Example, 'lock block' AS tag FROM dual UNION ALL +SELECT 'sid_details.sql' AS name, 'Display Session Details' AS description, '@sid_details.sql +' AS Usage, '@sid_details.sql 7531 3' AS Example, 'session' AS tag FROM dual UNION ALL +SELECT 'nonshared.sql' AS name, 'Print reasons for non-shared child cursors from V$SQL_SHARED_CURSOR' AS description, '@nonshared.sql +' AS Usage, '@nonshared.sql 7gf6xg9xfv3vb' AS Example, 'shared cursor' AS tag FROM dual UNION ALL +SELECT 'o.sql' AS name, 'Display object' AS description, '@o.sql . +' AS Usage, '@o.sql SCOTT.EMP'||chr(10)||'@o.sql %.EMP%' AS Example, 'object' AS tag FROM dual UNION ALL +SELECT 'xawr.sql' AS name, 'Execution plan from AWR' AS description, '@xawr.sql +' AS Usage, '@xawr.sql 6qqf9bakz7j3n 1522095726' AS Example, 'awr sql_id' AS tag FROM dual UNION ALL +SELECT 'wrka.sql' AS name, 'PGA and TEMP usage' AS description, '@wrka.sql +' AS Usage, '@wrka.sql 1=1 '||chr(10)||'@wrka.sql sid=123'||chr(10)||'@wrka.sql username=''APPUSER'' '||chr(10)||'@wrka.sql @wrka "program LIKE ''%BatchRunner.exe%'' AND machine=''host123''"' AS Example, 'temp pga' AS tag FROM dual UNION ALL +SELECT 'wrkasum.sql' AS name, 'Summary of PGA and TEMP' AS description, '@wrkasum.sql +' AS Usage, '@wrkasum.sql sql_id=''7q729nhdgtsqq''' AS Example, 'temp pga' AS tag FROM dual UNION ALL +SELECT 'arch_size_hourly.sql' AS name, 'Archivelog size history by DAY' AS description, '@arch_size_hourly.sql +' AS Usage, '@arch_size_hourly.sql 7' AS Example, 'arch' AS tag FROM dual UNION ALL +SELECT 'arch_size_hourly_detail.sql' AS name, 'Archivelog size history by HOUR' AS description, '@arch_size_hourly_detail.sql +' AS Usage, '@arch_size_hourly_detail.sql 2' AS Example, 'arch' AS tag FROM dual UNION ALL +SELECT 'arch_switch_hist.sql' AS name, 'Archivelog switch history by DAY+HOUR' AS description, '@arch_switch_hist.sql +' AS Usage, '@arch_switch_hist.sql' AS Example, 'arch switch' AS tag FROM dual UNION ALL +SELECT 'recovery_area_usage.sql' AS name, 'Display Recovery Area Usage' AS description, '@recovery_area_usage.sql +' AS Usage, '@recovery_area_usage.sql' AS Example, 'recovery area recovery area fra' AS tag FROM dual UNION ALL +SELECT 'log.sql' AS name, 'Show redo log layout' AS description, '@log.sql +' AS Usage, '@log.sql' AS Example, 'log redo standby' AS tag FROM dual UNION ALL +SELECT 'tbs.sql' AS name, 'Tablespace usage' AS description, '@tbs.sql +' AS Usage, '@tbs.sql %'||chr(10)||'@tbs USERS' AS Example, 'tablespace' AS tag FROM dual UNION ALL +SELECT 'dba_registry.sql' AS name, 'Database registry/components' AS description, '@dba_registry.sql +' AS Usage, '@dba_registry.sql' AS Example, 'registry component' AS tag FROM dual UNION ALL +SELECT 'dba_invalid_objects.sql' AS name, 'List invalid objects' AS description, '@dba_invalid_objects.sql +' AS Usage, '@dba_invalid_objects.sql' AS Example, 'invalid' AS tag FROM dual UNION ALL +SELECT 'tpardef.sql' AS name, 'Table only partitions definition' AS description, '@tpardef.sql +' AS Usage, '@tpardef.sql POC DEMO1 %' AS Example, 'part' AS tag FROM dual UNION ALL +SELECT 'sqlid.sql' AS name, 'SQL_ID details from Library Cache' AS description, '@sqlid.sql +' AS Usage, '@sqlid.sql a5ks9fhw2v9s1 %'||chr(10)||'@sqlid.sql a5ks9fhw2v9s1 0' AS Example, 'sqlid cache library' AS tag FROM dual UNION ALL +SELECT 'hint.sql' AS name, 'SQL Hint information' AS description, '@hint.sql +' AS Usage, '@hint.sql FULL'||chr(10)||'@hint.sql MERGE' AS Example, 'hint' AS tag FROM dual +) +) +SELECT name,description,usage,example FROM q +WHERE +(upper(name) LIKE upper ('%&search_string%') OR regexp_like(name, '&search_string', 'i')) +OR (upper(description) LIKE upper ('%&search_string%') OR regexp_like(description, '&search_string', 'i')) +OR (upper(tag) LIKE upper ('%&search_string%') OR regexp_like(tag, '&search_string', 'i')) +ORDER BY + name ASC +/ + + +UNDEFINE search_string +CLEAR COLUMNS diff --git a/star/hint.sql b/star/hint.sql new file mode 100644 index 0000000..5833e88 --- /dev/null +++ b/star/hint.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +col name for a35 +col version for a15 +col version_outline for a15 +col inverse for a35 + +col hint_scope for a27 + +select + name, + version, + version_outline, + inverse, + decode(bitand(target_level,1),1,'STATEMENT ') || + decode(bitand(target_level,2),2,'QBLOCK ') || + decode(bitand(target_level,4),4,'OBJECT ') || + decode(bitand(target_level,8),8,'JOIN ') hint_scope +from v$sql_hint +where lower(name) like lower('%&1%') +/ + + diff --git a/star/i.sql b/star/i.sql new file mode 100644 index 0000000..edc5f61 --- /dev/null +++ b/star/i.sql @@ -0,0 +1,95 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at https://blog.tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. + +-------------------------------------------------------------------------------- +-- +-- Name: i.sql +-- Purpose: the Who am I script (also sets terminal title) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Other: Some settings client OS specific (search for title) +-- +-------------------------------------------------------------------------------- + +def mysid="NA" +def _i_spid="NA" +def _i_cpid="NA" +def _i_opid="NA" +def _i_serial="NA" +def _i_inst="NA" +def _i_host="NA" +def _i_user="&_user" +def _i_conn="&_connect_identifier" + +col i_username head USERNAME for a20 +col i_sid head SID for a5 new_value mysid +col i_serial head "SERIAL#" for a8 new_value _i_serial +col i_cpid head CPID for a15 new_value _i_cpid +col i_spid head SPID for a10 new_value _i_spid +col i_opid head OPID for a5 new_value _i_opid +col i_host_name head HOST_NAME for a25 new_value _i_host truncate +--col i_instance_name head CON@INST_NAME for a20 new_value _i_inst +col i_instance_name head INST_NAME for a20 new_value _i_inst +col i_ver head VERSION for a12 +col i_startup_day head STARTED for a19 +col _i_user noprint new_value _i_user +col _i_conn noprint new_value _i_conn +col i_myoraver noprint new_value myoraver +col i_inst head I# FOR 99 +col i_db_role head DB_ROLE FOR A17 +col d_open_mode head OPEN_MODE FOR A17 + +select + s.username i_username, +-- i.instance_name i_instance_name, + (CASE WHEN TO_NUMBER(SUBSTR(i.version, 1, instr(i.version,'.',1)-1)) >= 12 THEN (SELECT SYS_CONTEXT('userenv', 'con_name') FROM dual)||'-'||i.instance_name ELSE i.instance_name END) i_instance_name, + i.host_name i_host_name, + sys_context('userenv', 'database_role') i_db_role, + d.open_mode, + i.instance_number i_inst, + to_char(s.sid) i_sid, + to_char(s.serial#) i_serial, + (select substr(banner_full, instr(banner_full, 'Version ')+8,11) from v$version where rownum = 1) i_ver, + -- (select substr(banner, instr(banner, 'Release ')+8,10) from v$version where rownum = 1) i_ver, + (select substr(substr(banner, instr(banner, 'Release ')+8), + 1, + instr(substr(banner, instr(banner, 'Release ')+8),'.')-1) + from v$version + where rownum = 1) i_myoraver, + to_char(startup_time, 'YYYY-MM-DD HH24:MI:SS') i_startup_day, + trim(p.spid) i_spid, + trim(to_char(p.pid)) i_opid, + s.process i_cpid, + s.saddr saddr, + p.addr paddr, + lower(s.username) "_i_user", + upper('&_connect_identifier') "_i_conn" +from + v$session s, + v$instance i, + v$process p, + v$database d +where + s.paddr = p.addr +and + sid = (select sid from v$mystat where rownum = 1); + +-- Windows CMD.exe specific stuff + +--host title &_i_user@&_i_conn [sid=&mysid ser#=&_i_serial spid=&_i_spid inst=&_i_inst host=&_i_host cpid=&_i_cpid opid=&_i_opid] +--host doskey /exename=sqlplus.exe desc=set lines 80 sqlprompt ""$Tdescribe $*$Tset lines 299 sqlprompt "SQL> " + +-- short xterm title +-- host echo -ne '\033]0;&_i_user@&_i_inst &mysid[&_i_spid]\007' +-- long xterm title +--host echo -ne "\033]0;host=&_i_host inst=&_i_inst sid=&mysid ser#=&_i_serial spid=&_i_spid cpid=&_i_cpid opid=&_i_opid\007" + + +def myopid=&_i_opid +def myspid=&_i_spid +def mycpid=&_i_cpid + +-- undef _i_spid _i_inst _i_host _i_user _i_conn _i_cpid + diff --git a/star/init.sql b/star/init.sql new file mode 100644 index 0000000..a6a23b9 --- /dev/null +++ b/star/init.sql @@ -0,0 +1,205 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Name: init.sql +-- Purpose: Initializes sqlplus variables for 156 character terminal width and other settings. +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Other: You need to comment out the right variable definitions for your client platform below. +-- Assumes SQLPATH variable set to point to TPT script directory. +-- +-------------------------------------------------------------------------------- + +-- this must be here to avoid logon problems when SQLPATH env variable is unset +def SQLPATH="" + + +-- set SQLPATH variable to either Unix or Windows format + +def SQLPATH=$SQLPATH -- (Unix/Mac OSX) +--def SQLPATH=%SQLPATH% -- (Windows) + + +-- def _start=start -- Windows +-- def _start=firefox -- Unix/Linux +def _start=open -- MacOS + +def _delete="rm -f" -- Unix/MacOSX +-- def _delete="del" -- Windows + +def _tpt_tempdir=&SQLPATH/tmp + +-- some internal variables required for TPT scripts + + define _ti_sequence=0 + define _tptmode=normal + define _xt_seq=0 + + define all='"select /*+ no_merge */ sid from v$session"' + define prev="(select /*+ no_unnest */ prev_sql_id from v$session where sid = (select sid from v$mystat where rownum=1))" + + -- geeky shorcuts for producing date ranges for various ASH scripts + define min="sysdate-1/24/60 sysdate" + define 1min="sysdate-1/24/60 sysdate" + define minute="sysdate-1/24/60 sysdate" + define 5min="sysdate-1/24/12 sysdate" + define hour="sysdate-1/24 sysdate" + define 1hour="sysdate-1/24 sysdate" + define 2hours="sysdate-1/12 sysdate" + define 24hours="sysdate-1 sysdate" + define day="sysdate-1 sysdate" + define today="TRUNC(sysdate) sysdate" + +set errordetails off + +-- you should change linesize to match terminal width - 1 only +-- if you don't have a terminal with horizontal scrolling +-- capability (cmd.exe and Terminator terminal do have horizontal scrolling) + + set linesize 999 + +-- set truncate after linesize on + + -- set truncate on + +-- set pagesize larger to avoid repeting headings + + set pagesize 5000 + +-- fetch 10000000 bytes of long datatypes. good for +-- querying DBA_VIEWS and DBA_TRIGGERS + + set long 10000000 + set longchunksize 10000000 + +-- larger arraysize for faster fetching of data +-- note that arraysize can affect outcome of experiments +-- like buffer gets for select statements etc. +-- +-- setting from 500 to 100 as otherwise snapper/dbms_output starts getting ORA-6502 errors due to 32k fetch limit of dbms_output + + set arraysize 100 + +-- normally I keep this commented out, otherwise +-- a DBMS_OUTPUT.GET_LINES call is made after all +-- PL/SQL executions from sqlplus. this may distort +-- execution statistics for experiments + + --set serveroutput on size unlimited + +-- to have less garbage on screen + + set verify off + +-- to trim trailing spaces from spool files + + set trimspool on + +-- to trim trailing spaces from screen output + + set trimout on + +-- don't use tabs instead of spaces for "wide blanks" +-- this can mess up the vertical column locations in output + + set tab off + +-- this makes describe command better to read and more +-- informative in case of complex datatypes in columns + + set describe depth 1 linenum on indent on + +-- you can make sqlplus run any command as your editor +-- I could use "start notepad" on windows if you want to +-- return control back to sqlplus immediately after launching +-- notepad (so that you can continue typing in sqlplus + + define _editor="vi -c 'set notitle'" +-- define _external_editor="/Applications/Terminator.app/Contents/MacOS/Terminator vi " + +-- assign the tracefile name to trc variable + + def trc=unknown + + column tracefile noprint new_value trc + + -- its nice to have termout off here as otherwise this would be + -- displayed on the screen + set termout off + + select value ||'/'||(select instance_name from v$instance) ||'_ora_'|| + (select spid||case when traceid is not null then '_'||traceid else null end + from v$process where addr = (select paddr from v$session + where sid = (select sid from v$mystat + where rownum = 1 + ) + ) + ) || '.trc' tracefile + from v$parameter where name = 'user_dump_dest'; + + column tracefile print + +-- make default date format nicer + + alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'; + +-- include username and connect identifier in prompt + +-- column pr new_value _pr +-- select initcap('&_user@&_connect_identifier> ') pr from dual; +-- set sqlprompt "&_pr" +-- column _pr clear + + +-- format some more columns for common DBA queries + + col first_change# for 99999999999999999 + col next_change# for 999999999999999999999 + col checkpoint_change# for 99999999999999999 + col resetlogs_change# for 99999999999999999 + col plan_plus_exp for a100 + col value_col_plus_show_param ON HEADING 'VALUE' FORMAT a100 + col name_col_plus_show_param ON HEADING 'PARAMETER_NAME' FORMAT a60 + +-- oracle 12.2+ has too wide OWNER and OBJECT_NAME... + + col owner for a30 wrap + col object_name for a30 wrap + col subobject_name for a30 wrap + col segment_name for a30 wrap + col partition_name for a30 wrap + +-- set html format + +@@htmlset nowrap "&_user@&_connect_identifier report" + +-- set seminar logging file + +DEF _tpt_tempfile=sqlplus_tmpfile + +col seminar_logfile new_value seminar_logfile +col tpt_tempfile new_value _tpt_tempfile + +select + to_char(sysdate, 'YYYYMMDD-HH24MISS') seminar_logfile + , instance_name||'-'||to_char(sysdate, 'YYYYMMDD-HH24MISS') tpt_tempfile +from v$instance; + +def seminar_logfile=&SQLPATH/logs/&_tpt_tempfile..log + +-- spool sqlplus output +spool &seminar_logfile append + +set editfile afiedit.sql + +-- set up a default ref cursor for Snapper V4 begin/end snapshotting +-- var snapper refcursor + +-- reset termout back to normal + + set termout on + diff --git a/star/locked_objects.sql b/star/locked_objects.sql new file mode 100644 index 0000000..b35c6f6 --- /dev/null +++ b/star/locked_objects.sql @@ -0,0 +1,122 @@ +/* +* Author : Vishal Gupta +* Purpose : Displays currently locked objects in database +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - Object Type (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 29-Jan-16 Vishal Gupta Switched from gv$locked_objects to gv$lock, as +* earlier view was giving information about locks on +* temporary tables (with preserve on commit rows setting). +* - Also added machine and process in the output +* 06-Sep-12 Vishal Gupta Added where clause to add more filtering +* 09-Aug-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE object_type +UNDEFINE WHERE_CLAUSE + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE object_type="&&3" +DEFINE WHERE_CLAUSE="&&4" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&object_name'),'','%','&&object_name') "_object_name" + , DECODE(UPPER('&&object_type'),'','%','&&object_type') "_object_type" +FROM DUAL; + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" +FROM DUAL; +set term on + + + +PROMPT ************************************************************** +PROMPT * L O C K E D O B J E C T S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - Object Type = '&&object_type' +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************** + +COLUMN object_name HEADING "ObjectName" FORMAT a40 +COLUMN object_type HEADING "ObjectType" FORMAT a10 TRUNCATED +COLUMN locked_mode HEADING "LockedMode" FORMAT a10 +COLUMN sid HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN state HEADING "State" FORMAT a12 TRUNCATED +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED +COLUMN process HEADING "Process" FORMAT a11 +COLUMN program HEADING "Program" FORMAT a18 TRUNCATED +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT a12 +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +SELECT o.owner || '.' || o.object_name object_name + , o.object_type + , DECODE(l.lmode, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(l.lmode)) locked_mode + , s.sid sid + , s.inst_id + , s.status + , s.username + , s.machine + , s.osuser + , s.program + , s.process + , s.event + FROM gv$lock l + JOIN dba_objects o ON o.object_id = l.id1 + JOIN gv$session s ON s.inst_id = l.inst_id AND s.sid = l.sid +WHERE o.owner like '&&owner' ESCAPE '\' + AND o.object_name like '&&object_name' ESCAPE '\' + AND o.object_type like '&&object_type' ESCAPE '\' + &&WHERE_CLAUSE +ORDER BY object_name +; + + +UNDEFINE owner +UNDEFINE object_name +UNDEFINE object_type +UNDEFINE WHERE_CLAUSE diff --git a/star/locks.sql b/star/locks.sql new file mode 100644 index 0000000..8de02cb --- /dev/null +++ b/star/locks.sql @@ -0,0 +1,88 @@ +@@header + +/* + +Author : Vishal Gupta +Purpose : Displays currently locked objects in database + +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +* 25-Sep-09 Vishal Gupta Modified to use v$lock as DBA_LOCK might not +* exist in some databases if rdbms/admin/dbablock.sql +* has not been run. +*/ + +COLUMN Blocking HEADING "Bl'ing" FORMAT a6 +COLUMN Blocked HEADING "Bl'ed" FORMAT a6 +COLUMN Since FORMAT a18 +COLUMN inst_id HEADING 'I#' FORMAT 99 +rem COLUMN sid FORMAT 9999 +COLUMN username FORMAT a15 +COLUMN osuser FORMAT a11 TRUNC +COLUMN machine FORMAT a15 +COLUMN lock_type FORMAT a22 TRUNC +COLUMN mode_held FORMAT a13 +COLUMN mode_requested FORMAT a13 +COLUMN mode_requested FORMAT a13 +COLUMN owner FORMAT a15 +COLUMN object_type FORMAT a10 +COLUMN object_name FORMAT a25 + + +SELECT /*+ RULE */ + DECODE(lk.block,1,'Y',0,' ', lk.block) Blocking + , DECODE(s.lockwait,NULL,' ','Y') Blocked +-- , DECODE(block, +-- 0, 'Not Blocking', /* Not blocking any other processes */ +-- 1, 'Blocking', /* This lock blocks other processes */ +-- 2, 'Global', /* This lock is global, so we can't tell */ +-- TO_CHAR(block)) blocking_others + , TO_CHAR(sysdate - (lk.ctime/24/60/60),'DD-MON-YY hh24:MI:SS') Since + , lk.inst_id + , lk.sid + , s.status + , s.username + , s.osuser + , NVL(t.name, lk.type) lock_type + , DECODE(lk.lmode, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(lmode)) mode_held + , DECODE(request, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(request)) mode_requested + , NVL(ob.object_type,' ') object_type + , NVL(ob.owner,' ') owner + , NVL(ob.object_name,' ') object_name + FROM gv$lock lk + , dba_objects ob + , gv$session s + , v$lock_type t + WHERE lk.inst_id = s.inst_id + AND lk.sid = s.sid + AND lk.id1 = ob.object_id (+) + AND lk.type = t.type (+) + AND lk.type NOT IN + ( + 'MR' -- Media Recovery + , 'AE' -- Edition Lock + ) +-- AND (lk.block = 1 OR s.lockwait IS NOT NULL ) +ORDER BY lk.block desc, s.lockwait desc , s.sid, ob.object_name +/ + +@@footer \ No newline at end of file diff --git a/star/locks_blocking.sql b/star/locks_blocking.sql new file mode 100644 index 0000000..4e529a4 --- /dev/null +++ b/star/locks_blocking.sql @@ -0,0 +1,96 @@ +/* + +Author : Vishal Gupta +Purpose : Displays blocking locks in database + +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------- +* 19-Oct-12 Vishal Gupta Added ClientProcess in output and changed column sizing +* 18-Apr-12 Vishal Gupta Replace with gv$session with materialize hinted +* sub-query factoring (CTE - common table extression) +* 27-Feb-12 Vishal Gupta Created +* +*/ + +PROMPT +PROMPT ********************************* +PROMPT * B L O C K I N G L O C K S +PROMPT ********************************* +PROMPT + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SID FORMAT a30 +COLUMN username HEADING "UserName" FORMAT a20 TRUNC +COLUMN lock_type HEADING "Lock|type" FORMAT a4 TRUNC +COLUMN lock_Name HEADING "Lock Name" FORMAT a22 TRUNC +COLUMN lmode HEADING "Lock|Held" FORMAT a10 +COLUMN request HEADING "Lock|Request" FORMAT a10 +COLUMN osuser HEADING "OSUser" FORMAT a20 TRUNC +COLUMN machine HEADING "Client|Machine" FORMAT a20 TRUNC +COLUMN process HEADING "Client|Process" FORMAT a10 +COLUMN program HEADING "Program" FORMAT a30 TRUNC +COLUMN event HEADING "Event" FORMAT a30 TRUNC + + + +-- +-- Need to use Subquery for gv$session, otherwise session is disconnected with +-- ORA-07445 [qksopCheckPropOpt] when joining dynamic performance views in heirarichal query. +-- +WITH sess as + ( select /*+ RULE NO_MERGE */ s1.* from gv$session s1 + ) +, locks as + (select /*+ RULE NO_MERGE */ * + from gv$lock where lmode = 0 + --AND ( lmode = 0 OR (lmode > 0 AND block > 0)) + ) +SELECT /*+ RULE */ + s.inst_id + , DECODE(level + ,1 , s.sid || ' (Blocker)' + , ' ' || LPAD('-',(level-1)*4,'|---') || '> ' || s.sid + ) + sid + , s.status + , NVL2(lt.type,lt.type || ': ' , NULL)|| lt.name lock_name + , DECODE(l.lmode + ,0,'None' + ,1,'Null' + ,2,'Row-S (SS)' + ,3,'Row-X (SX)' + ,4,'Share (S)' + ,5,'S/Row-X (SSX)' + ,6,'Excl (X)' + , l.lmode + ) lmode + , DECODE(l.request + ,0,'None' + ,1,'Null' + ,2,'Row-S (SS)' + ,3,'Row-X (SX)' + ,4,'Share (S)' + ,5,'S/Row-X (SSX)' + ,6,'Excl (X)' + , l.request + ) request + , s.username + , s.sql_id + , s.machine + , s.osuser + , s.process + , s.program + , s.event +FROM sess s + LEFT OUTER JOIN locks l ON l.inst_id = s.inst_id AND l.sid = s.sid + LEFT OUTER JOIN v$lock_type lt ON l.type = lt.type +WHERE ( s.blocking_session IS NOT NULL + OR exists (select 1 from sess s2 where s2.blocking_instance = s.inst_id and s2.blocking_session = s.sid) + ) +CONNECT BY PRIOR s.inst_id = s.blocking_instance + AND PRIOR s.sid = s.blocking_session +START WITH s.blocking_session IS NULL +; + diff --git a/star/log.sql b/star/log.sql new file mode 100644 index 0000000..f2b5d6e --- /dev/null +++ b/star/log.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show redo log layout from V$LOG, V$STANDBY_LOG and V$LOGFILE... + +col log_member head MEMBER for a100 + +select * from v$log order by group#; +select * from v$standby_log order by group#; +select group#, status, type, is_recovery_dest_file, member log_member from v$logfile order by group#,member; diff --git a/star/login.sql b/star/login.sql new file mode 100644 index 0000000..4521a64 --- /dev/null +++ b/star/login.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- calling init.sql which will set up sqlpus variables +@init.sql +-- i.sql is the "who am i" script which shows your session/instance info and +-- also sets command prompt window/xterm title +@i.sql + +-- you can put your own login scripts here + diff --git a/star/nonshared.sql b/star/nonshared.sql new file mode 100644 index 0000000..8bd7938 --- /dev/null +++ b/star/nonshared.sql @@ -0,0 +1,60 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: nonshared.sql +-- Purpose: Print reasons for non-shared child cursors from v$sql_shared_cursor +-- in a readable format +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @nonshared +-- @nonshared 7gf6xg9xfv3vb +-- +-- Other: Uses modified version of Tom Kyte's printtab code +-- ( http://asktom.oracle.com ) +-- +-------------------------------------------------------------------------------- + +set serverout on size 1000000 +prompt Show why existing SQL child cursors were not reused (V$SQL_SHARED_CURSOR)... +prompt + +def cmd="select * from v$sql_shared_cursor where sql_id = ''&1''" + + +declare + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_descTbl dbms_sql.desc_tab; + l_colCnt number; + procedure execute_immediate( p_sql in varchar2 ) + is + BEGIN + dbms_sql.parse(l_theCursor,p_sql,dbms_sql.native); + l_status := dbms_sql.execute(l_theCursor); + END; +begin + dbms_sql.parse( l_theCursor, replace( '&cmd', '"', ''''), dbms_sql.native ); + dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl ); + for i in 1 .. l_colCnt loop + dbms_sql.define_column( l_theCursor, i, l_columnValue, 4000 ); + end loop; + l_status := dbms_sql.execute(l_theCursor); + while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop + for i in 1 .. l_colCnt loop + dbms_sql.column_value( l_theCursor, i, l_columnValue ); + if l_columnValue != 'N' then + dbms_output.put_line ( rpad( l_descTbl(i).col_name, 30 ) || ': ' || l_columnValue ); + end if; + end loop; + dbms_output.put_line( '-----------------' ); + end loop; +end; +/ + +set serverout off + diff --git a/star/o.sql b/star/o.sql new file mode 100644 index 0000000..0e785fe --- /dev/null +++ b/star/o.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@o2 "%&1%" \ No newline at end of file diff --git a/star/pardef.sql b/star/pardef.sql new file mode 100644 index 0000000..422da11 --- /dev/null +++ b/star/pardef.sql @@ -0,0 +1,85 @@ +set lines 256 pages 50 + +col TABLE_OWNER for a25 heading "Owner" +col TABLE_NAME for a30 heading "Table" +col OWNER for a25 heading "Owner" +col INDEX_NAME for a30 heading "Index" +col INDEX_TYPE for a10 heading "Type" +col PARTITIONED for a3 heading "Par" +col PARTITION_POSITION for 999 heading "P#" +col PARTITION_NAME for a30 heading "Partition" +col SUBPARTITION_NAME for a30 heading "Subpartition" +col PART_HIGHVAL for a32 trunc heading "Partition|high value" +col PART_INTERVAL for a3 heading "Par|Int" +col SUBPART_HIGHVAL for a32 trunc heading "Subpartition|high value" +col SUBPART_INTERVAL for a3 heading "Sub|Int" +col NUM_ROWS heading "Rows" +col DISTINCT_KEYS heading "Dist|keys" +col CLUSTERING_FACTOR heading "CLUF" + + +define v_table_owner=&&1 +define v_table_name=&&2 + +prompt +prompt Table +prompt ===== + +select + par.TABLE_OWNER + ,par.TABLE_NAME + ,par.PARTITION_POSITION + ,par.PARTITION_NAME + ,par.NUM_ROWS + ,par.HIGH_VALUE PART_HIGHVAL + ,par.INTERVAL PART_INTERVAL + ,sub.SUBPARTITION_NAME + ,sub.NUM_ROWS + ,sub.HIGH_VALUE SUBPART_HIGHVAL + ,sub.INTERVAL SUBPART_INTERVAL +from + dba_tab_partitions par + left outer join dba_tab_subpartitions sub + on (par.TABLE_OWNER=sub.TABLE_OWNER) and (par.TABLE_NAME=sub.TABLE_NAME) and(par.PARTITION_NAME=sub.PARTITION_NAME) +where + par.table_owner='&&v_table_owner' + and par.table_name='&&v_table_name' +order by + par.PARTITION_POSITION asc + ,sub.SUBPARTITION_POSITION asc +; + +prompt Index +prompt ===== + +select + ind.OWNER + ,ind.INDEX_NAME + ,ind.INDEX_TYPE + ,ind.STATUS + ,ind.PARTITIONED + ,ind.NUM_ROWS + ,ind.DISTINCT_KEYS + ,ind.CLUSTERING_FACTOR + ,indpar.PARTITION_NAME + ,indpar.NUM_ROWS + ,indpar.DISTINCT_KEYS + ,indpar.CLUSTERING_FACTOR + ,indsubpar.SUBPARTITION_NAME + ,indsubpar.NUM_ROWS + ,indsubpar.DISTINCT_KEYS + ,indsubpar.CLUSTERING_FACTOR +from + dba_tables tab + left join dba_indexes ind on (tab.TABLE_NAME=ind.TABLE_NAME) + left outer join dba_ind_partitions indpar on (ind.OWNER=indpar.INDEX_OWNER and ind.INDEX_NAME=indpar.INDEX_NAME) + left outer join dba_ind_subpartitions indsubpar on (ind.OWNER=indsubpar.INDEX_OWNER and ind.INDEX_NAME=indsubpar.INDEX_NAME and indpar.PARTITION_NAME=indsubpar.PARTITION_NAME) +where + tab.owner='&&v_table_owner' + and tab.table_name='&&v_table_name' +order by + ind.INDEX_NAME asc + ,indpar.PARTITION_POSITION asc + ,indsubpar.SUBPARTITION_POSITION asc +; + diff --git a/star/planx.sql b/star/planx.sql new file mode 100644 index 0000000..0e4b8d0 --- /dev/null +++ b/star/planx.sql @@ -0,0 +1,1409 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: planx.sql +-- +-- Purpose: Reports Execution Plans for one SQL_ID from RAC and AWR(opt) +-- +-- Author: Carlos Sierra +-- +-- Version: 2018/01/29 +-- +-- Usage: This script inputs two parameters. Parameter 1 is a flag to specify if +-- your database is licensed to use the Oracle Diagnostics Pack or not. +-- Parameter 2 specifies the SQL_ID for which you want to report all +-- execution plans from all nodes, plus all plans from AWR. +-- If you don't have the Oracle Diagnostics Pack license, or if you want +-- to omit the AWR portion then specify "N" on Parameter 1. +-- +-- Example: @planx.sql Y f995z9antmhxn +-- +-- Notes: Developed and tested on 11.2.0.3 and 12.0.1.0 +-- +-- For a more robust tool use SQLd360 +-- +--------------------------------------------------------------------------------------- +-- +SET HEA ON LIN 500 PAGES 100 TAB OFF FEED OFF ECHO OFF VER OFF TRIMS ON TRIM ON TI OFF TIMI OFF; +SET LIN 1000; +SET SERVEROUT OFF; + +PRO +PRO 1. Enter Oracle Diagnostics Pack License Flag [ Y | N ] (required) +DEF input_license = '&1.'; +PRO +PRO 2. Enter SQL_ID (required) +DEF sql_id = '&2.'; +-- set license +VAR license CHAR(1); +BEGIN + SELECT UPPER(SUBSTR(TRIM('&input_license.'), 1, 1)) INTO :license FROM DUAL; +END; +/ +-- get dbid +VAR dbid NUMBER; +BEGIN + SELECT dbid INTO :dbid FROM v$database; +END; +/ +-- is_10g +DEF is_10g = ''; +COL is_10g NEW_V is_10g NOPRI; +SELECT '--' is_10g FROM v$instance WHERE version LIKE '10%'; +-- is_11r1 +DEF is_11r1 = ''; +COL is_11r1 NEW_V is_11r1 NOPRI; +SELECT '--' is_11r1 FROM v$instance WHERE version LIKE '11.1%'; +-- is_11r2 +DEF is_11r2 = ''; +COL is_11r2 NEW_V is_11r2 NOPRI; +SELECT '--' is_11r2 FROM v$instance WHERE version LIKE '11.2%'; +-- get current time +COL current_time NEW_V current_time FOR A15; +SELECT 'current_time: ' x, TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') current_time FROM DUAL; +-- set min and max snap id +COL x_minimum_snap_id NEW_V x_minimum_snap_id NOPRI; +SELECT NVL(TO_CHAR(MAX(snap_id)), '0') x_minimum_snap_id FROM dba_hist_snapshot WHERE :license = 'Y' AND begin_interval_time < SYSDATE - 31; +SELECT '-1' x_minimum_snap_id FROM DUAL WHERE TRIM('&&x_minimum_snap_id.') IS NULL; +COL x_maximum_snap_id NEW_V x_maximum_snap_id NOPRI; +SELECT NVL(TO_CHAR(MAX(snap_id)), '&&x_minimum_snap_id.') x_maximum_snap_id FROM dba_hist_snapshot WHERE :license = 'Y'; +SELECT '-1' x_maximum_snap_id FROM DUAL WHERE TRIM('&&x_maximum_snap_id.') IS NULL; +COL x_minimum_date NEW_V x_minimum_date NOPRI; +SELECT TO_CHAR(MIN(begin_interval_time), 'YYYY-MM-DD"T"HH24:MI:SS') x_minimum_date FROM dba_hist_snapshot WHERE :license = 'Y' AND snap_id = &&x_minimum_snap_id.; +COL x_maximum_date NEW_V x_maximum_date NOPRI; +SELECT TO_CHAR(MAX(end_interval_time), 'YYYY-MM-DD"T"HH24:MI:SS') x_maximum_date FROM dba_hist_snapshot WHERE :license = 'Y' AND snap_id = &&x_maximum_snap_id.; +-- get sql_text +VAR sql_id VARCHAR2(13); +EXEC :sql_id := '&&sql_id.'; +VAR sql_text CLOB; +EXEC :sql_text := NULL; +VAR signature NUMBER; +VAR signaturef NUMBER; +BEGIN + SELECT exact_matching_signature, sql_text INTO :signature, :sql_text FROM gv$sql WHERE sql_id = '&&sql_id.' AND ROWNUM = 1; +END; +/ +BEGIN + IF :sql_text IS NULL OR NVL(DBMS_LOB.GETLENGTH(:sql_text), 0) = 0 THEN + SELECT sql_fulltext + INTO :sql_text + FROM gv$sqlstats + WHERE sql_id = :sql_id + AND ROWNUM = 1; + END IF; +END; +/ +BEGIN + IF :license = 'Y' AND (:sql_text IS NULL OR NVL(DBMS_LOB.GETLENGTH(:sql_text), 0) = 0) THEN + SELECT sql_text + INTO :sql_text + FROM dba_hist_sqltext + WHERE sql_id = :sql_id + AND ROWNUM = 1; + END IF; +END; +/ +BEGIN + IF :signature IS NULL THEN + :signature := NVL(DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(:sql_text), -1); + END IF; +END; +/ +EXEC :signaturef := NVL(DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(:sql_text, TRUE), -1); +COL signature NEW_V signature FOR A20; +COL signaturef NEW_V signaturef FOR A20; +SELECT TO_CHAR(:signature) signature, TO_CHAR(:signaturef) signaturef FROM DUAL; +BEGIN + IF :sql_text IS NULL THEN + :sql_text := 'Unknown SQL Text'; + END IF; +END; +/ +COL x_host_name NEW_V x_host_name; +SELECT host_name x_host_name FROM v$instance; +COL x_db_name NEW_V x_db_name; +SELECT name x_db_name FROM v$database; +COL x_container NEW_V x_container; +SELECT 'NONE' x_container FROM DUAL; +SELECT SYS_CONTEXT('USERENV', 'CON_NAME') x_container FROM DUAL; +DEF sql_handle = ''; +COL sql_handle NEW_V sql_handle; +SELECT sql_handle FROM dba_sql_plan_baselines WHERE signature = &&signature. AND ROWNUM = 1; + +-- spool and sql_text +SPO planx_&&sql_id._&¤t_time..txt; +PRO SQL_ID: &&sql_id. +PRO SIGNATURE: &&signature. +PRO SIGNATUREF: &&signaturef. +PRO SQL_HANDLE: &&sql_handle. +PRO HOST: &&x_host_name. +PRO DATABASE: &&x_db_name. +PRO CONTAINER: &&x_container. +PRO +SET PAGES 0; +PRINT :sql_text; +SET PAGES 50; +-- columns funky format +COL action_ff FOR A30 HEA "Action"; +COL appl_wait_secs_ff FOR A18 HEA "Appl wait secs"; +COL begin_interval_time_ff FOR A20 HEA "Begin interval time"; +COL buffer_gets_ff FOR A20 HEA "Buffer Gets"; +COL cluster_wait_secs_ff FOR A18 HEA "Cluster wait secs"; +COL conc_wait_secs_ff FOR A18 HEA "Conc wait secs"; +COL cpu_secs_ff FOR A18 HEA "CPU secs"; +COL current_object_ff FOR A60 HEA "Current object"; +COL direct_writes_ff FOR A20 HEA "Direct Writes"; +COL disk_reads_ff FOR A20 HEA "Disk Reads"; +COL elsapsed_secs_ff FOR A18 HEA "Elapsed secs"; +COL end_interval_time_ff FOR A20 HEA "End interval time"; +COL executions_ff FOR A20 HEA "Executions"; +COL fetches_ff FOR A20 HEA "Fetches"; +COL first_load_time_ff FOR A20 HEA "First load time"; +COL inst_child_ff FOR A21 HEA "Inst child"; +COL invalidations_ff FOR A8 HEA "Invalidations"; +COL io_cell_offload_eligible_b_ff FOR A30 HEA "IO cell offload eligible bytes"; +COL io_cell_offload_returned_b_ff FOR A30 HEA "IO cell offload returned bytes"; +COL io_cell_uncompressed_bytes_ff FOR A30 HEA "IO cell uncompressed bytes"; +COL io_interconnect_bytes_ff FOR A30 HEA "IO interconnect bytes"; +COL io_saved_ff FOR A10 HEA "IO saved"; +COL java_exec_secs_ff FOR A18 HEA "Java exec secs"; +COL last_active_time_ff FOR A20 HEA "Last active time"; +COL last_load_time_ff FOR A20 HEA "Last load time"; +COL line_id_ff FOR 9999999 HEA "Line id"; +COL loaded_ff FOR A6 HEA "Loaded"; +COL loaded_versions_ff FOR A15 HEA "Loaded versions"; +COL loads_ff FOR A8 HEA "Loads"; +COL module_ff FOR A30 HEA "Module"; +COL open_versions_ff FOR A15 HEA "Open versions"; +COL operation_ff FOR A50 HEA "Operation"; +COL parse_calls_ff FOR A20 HEA "Parse calls"; +COL percent_ff FOR 9,990.0 HEA "Percent"; +COL persistent_mem_ff FOR A20 HEA "Persistent mem"; +COL plan_timestamp_ff FOR A19 HEA "Plan timestamp"; +COL plsql_exec_secs_ff FOR A18 HEA "PLSQL exec secs"; +COL px_servers_executions_ff FOR A20 HEA "PX servers executions"; +COL rows_processed_ff FOR A20 HEA "Rows processed"; +COL runtime_mem_ff FOR A20 HEA "Runtime mem"; +COL samples_ff FOR 999,999,999,999 HEA "Samples"; +COL service_ff FOR A30 HEA "Service"; +COL sharable_mem_ff FOR A20 HEA "Sharable mem"; +COL sorts_ff FOR A20 HEA "Sorts"; +COL sql_profile_ff FOR A30 HEA "SQL Profile"; +COL timed_event_ff FOR A70 HEA "Timed event"; +COL total_sharable_mem_ff FOR A20 HEA "Total sharable mem"; +COL user_io_wait_secs_ff FOR A18 HEA "User IO wait secs"; +COL users_executing_ff FOR A15 HEA "Users executing"; +COL users_opening_ff FOR A15 HEA "Users opening"; +COL version_count_ff FOR A8 HEA "Version count"; + +COL obsl FOR A4; +COL sens FOR A4; +COL aware FOR A5; +COL shar FOR A4; +COL u_exec FOR 999999; +COL obj_sta FOR A7; + +COL plan_name FOR A30; +COL created FOR A30; +COL last_executed FOR A30; + +COL avg_et_ms_awr FOR A11 HEA 'ET Avg|AWR (ms)'; +COL avg_et_ms_mem FOR A11 HEA 'ET Avg|MEM (ms)'; +COL avg_cpu_ms_awr FOR A11 HEA 'CPU Avg|AWR (ms)'; +COL avg_cpu_ms_mem FOR A11 HEA 'CPU Avg|MEM (ms)'; +COL avg_bg_awr FOR 999,999,990 HEA 'BG Avg|AWR'; +COL avg_bg_mem FOR 999,999,990 HEA 'BG Avg|MEM'; +COL avg_row_awr FOR 999,999,990 HEA 'Rows Avg|AWR'; +COL avg_row_mem FOR 999,999,990 HEA 'Rows Avg|MEM'; +COL plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; +COL executions_awr FOR 999,999,999,999 HEA 'Executions|AWR'; +COL executions_mem FOR 999,999,999,999 HEA 'Executions|MEM'; +COL min_cost FOR 9,999,999 HEA 'MIN Cost'; +COL max_cost FOR 9,999,999 HEA 'MAX Cost'; +COL nl FOR 99; +COL hj FOR 99; +COL mj FOR 99; +COL p100_et_ms FOR A11 HEA 'ET 100th|Pctl (ms)'; +COL p99_et_ms FOR A11 HEA 'ET 99th|Pctl (ms)'; +COL p97_et_ms FOR A11 HEA 'ET 97th|Pctl (ms)'; +COL p95_et_ms FOR A11 HEA 'ET 95th|Pctl (ms)'; +COL p100_cpu_ms FOR A11 HEA 'CPU 100th|Pctl (ms)'; +COL p99_cpu_ms FOR A11 HEA 'CPU 99th|Pctl (ms)'; +COL p97_cpu_ms FOR A11 HEA 'CPU 97th|Pctl (ms)'; +COL p95_cpu_ms FOR A11 HEA 'CPU 95th|Pctl (ms)'; + +PRO +PRO PLANS PERFORMANCE +PRO ~~~~~~~~~~~~~~~~~ +WITH +pm AS ( +SELECT plan_hash_value, operation, + CASE operation WHEN 'NESTED LOOPS' THEN COUNT(DISTINCT id) ELSE 0 END nl, + CASE operation WHEN 'HASH JOIN' THEN COUNT(DISTINCT id) ELSE 0 END hj, + CASE operation WHEN 'MERGE JOIN' THEN COUNT(DISTINCT id) ELSE 0 END mj + FROM gv$sql_plan + WHERE sql_id = TRIM('&&sql_id.') + GROUP BY + plan_hash_value, + operation ), +pa AS ( +SELECT plan_hash_value, operation, + CASE operation WHEN 'NESTED LOOPS' THEN COUNT(DISTINCT id) ELSE 0 END nl, + CASE operation WHEN 'HASH JOIN' THEN COUNT(DISTINCT id) ELSE 0 END hj, + CASE operation WHEN 'MERGE JOIN' THEN COUNT(DISTINCT id) ELSE 0 END mj + FROM dba_hist_sql_plan + WHERE sql_id = TRIM('&&sql_id.') + AND :license = 'Y' + GROUP BY + plan_hash_value, + operation ), +pm_pa AS ( +SELECT plan_hash_value, MAX(nl) nl, MAX(hj) hj, MAX(mj) mj + FROM pm + GROUP BY + plan_hash_value + UNION +SELECT plan_hash_value, MAX(nl) nl, MAX(hj) hj, MAX(mj) mj + FROM pa + GROUP BY + plan_hash_value ), +p AS ( +SELECT plan_hash_value, MAX(nl) nl, MAX(hj) hj, MAX(mj) mj + FROM pm_pa + GROUP BY + plan_hash_value ), +phv_perf AS ( +SELECT plan_hash_value, + snap_id, + SUM(elapsed_time_delta)/SUM(executions_delta) avg_et_us, + SUM(cpu_time_delta)/SUM(executions_delta) avg_cpu_us + FROM dba_hist_sqlstat + WHERE sql_id = TRIM('&&sql_id.') + AND executions_delta > 0 + AND optimizer_cost > 0 + AND :license = 'Y' + GROUP BY + plan_hash_value, + snap_id ), +phv_stats AS ( +SELECT plan_hash_value, + MAX(avg_et_us) p100_et_us, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY avg_et_us) p99_et_us, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY avg_et_us) p97_et_us, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY avg_et_us) p95_et_us, + MAX(avg_cpu_us) p100_cpu_us, + PERCENTILE_DISC(0.99) WITHIN GROUP (ORDER BY avg_cpu_us) p99_cpu_us, + PERCENTILE_DISC(0.97) WITHIN GROUP (ORDER BY avg_cpu_us) p97_cpu_us, + PERCENTILE_DISC(0.95) WITHIN GROUP (ORDER BY avg_cpu_us) p95_cpu_us + FROM phv_perf + GROUP BY + plan_hash_value ), +m AS ( +SELECT plan_hash_value, + SUM(elapsed_time)/SUM(executions) avg_et_us, + SUM(cpu_time)/SUM(executions) avg_cpu_us, + ROUND(SUM(buffer_gets)/SUM(executions)) avg_buffer_gets, + ROUND(SUM(rows_processed)/SUM(executions)) avg_rows_processed, + SUM(executions) executions, + MIN(optimizer_cost) min_cost, + MAX(optimizer_cost) max_cost + FROM gv$sql + WHERE sql_id = TRIM('&&sql_id.') + AND executions > 0 + AND optimizer_cost > 0 + GROUP BY + plan_hash_value ), +a AS ( +SELECT plan_hash_value, + SUM(elapsed_time_delta)/SUM(executions_delta) avg_et_us, + SUM(cpu_time_delta)/SUM(executions_delta) avg_cpu_us, + ROUND(SUM(buffer_gets_delta)/SUM(executions_delta)) avg_buffer_gets, + ROUND(SUM(rows_processed_delta)/SUM(executions_delta)) avg_rows_processed, + SUM(executions_delta) executions, + MIN(optimizer_cost) min_cost, + MAX(optimizer_cost) max_cost + FROM dba_hist_sqlstat + WHERE sql_id = TRIM('&&sql_id.') + AND executions_delta > 0 + AND optimizer_cost > 0 + AND :license = 'Y' + GROUP BY + plan_hash_value ) +SELECT + p.plan_hash_value, + LPAD(TRIM(TO_CHAR(ROUND(a.avg_et_us/1e3, 6), '9999,990.000')), 11) avg_et_ms_awr, + LPAD(TRIM(TO_CHAR(ROUND(m.avg_et_us/1e3, 6), '9999,990.000')), 11) avg_et_ms_mem, + LPAD(TRIM(TO_CHAR(ROUND(a.avg_cpu_us/1e3, 6), '9999,990.000')), 11) avg_cpu_ms_awr, + LPAD(TRIM(TO_CHAR(ROUND(m.avg_cpu_us/1e3, 6), '9999,990.000')), 11) avg_cpu_ms_mem, + a.avg_buffer_gets avg_bg_awr, + m.avg_buffer_gets avg_bg_mem, + a.avg_rows_processed avg_row_awr, + m.avg_rows_processed avg_row_mem, + a.executions executions_awr, + m.executions executions_mem, + LEAST(NVL(m.min_cost, a.min_cost), NVL(a.min_cost, m.min_cost)) min_cost, + GREATEST(NVL(m.max_cost, a.max_cost), NVL(a.max_cost, m.max_cost)) max_cost, + p.nl, + p.hj, + p.mj, + LPAD(TRIM(TO_CHAR(ROUND(s.p100_et_us/1e3, 6), '9999,990.000')), 11) p100_et_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p99_et_us/1e3, 6), '9999,990.000')), 11) p99_et_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p97_et_us/1e3, 6), '9999,990.000')), 11) p97_et_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p95_et_us/1e3, 6), '9999,990.000')), 11) p95_et_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p100_cpu_us/1e3, 6), '9999,990.000')), 11) p100_cpu_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p99_cpu_us/1e3, 6), '9999,990.000')), 11) p99_cpu_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p97_cpu_us/1e3, 6), '9999,990.000')), 11) p97_cpu_ms, + LPAD(TRIM(TO_CHAR(ROUND(s.p95_cpu_us/1e3, 6), '9999,990.000')), 11) p95_cpu_ms + FROM p, m, a, phv_stats s + WHERE p.plan_hash_value = m.plan_hash_value(+) + AND p.plan_hash_value = a.plan_hash_value(+) + AND p.plan_hash_value = s.plan_hash_value(+) + ORDER BY + NVL(a.avg_et_us, m.avg_et_us), m.avg_et_us; + +PRO +PRO GV$SQLSTATS (it shows only one row for SQL, with most recent info) +PRO ~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT inst_id + , plan_hash_value + , LPAD(TO_CHAR(parse_calls, '999,999,999,999,990'), 20) parse_calls_ff + , LPAD(TO_CHAR(executions, '999,999,999,999,990'), 20) executions_ff + , LPAD(TO_CHAR(px_servers_executions, '999,999,999,999,990'), 20) px_servers_executions_ff + , LPAD(TO_CHAR(fetches, '999,999,999,999,990'), 20) fetches_ff + , LPAD(TO_CHAR(rows_processed, '999,999,999,999,990'), 20) rows_processed_ff + , LPAD(TO_CHAR(version_count, '999,990'), 8) version_count_ff + , LPAD(TO_CHAR(loads, '999,990'), 8) loads_ff + , LPAD(TO_CHAR(invalidations, '999,990'), 8) invalidations_ff + , LPAD(TO_CHAR(buffer_gets, '999,999,999,999,990'), 20) buffer_gets_ff + , LPAD(TO_CHAR(disk_reads, '999,999,999,999,990'), 20) disk_reads_ff + , LPAD(TO_CHAR(direct_writes, '999,999,999,999,990'), 20) direct_writes_ff + , LPAD(TO_CHAR(ROUND(elapsed_time/1e6, 3), '999,999,990.000'), 18) elsapsed_secs_ff + , LPAD(TO_CHAR(ROUND(cpu_time/1e6, 3), '999,999,990.000'), 18) cpu_secs_ff + , LPAD(TO_CHAR(ROUND(user_io_wait_time/1e6, 3), '999,999,990.000'), 18) user_io_wait_secs_ff + , LPAD(TO_CHAR(ROUND(cluster_wait_time/1e6, 3), '999,999,990.000'), 18) cluster_wait_secs_ff + , LPAD(TO_CHAR(ROUND(application_wait_time/1e6, 3), '999,999,990.000'), 18) appl_wait_secs_ff + , LPAD(TO_CHAR(ROUND(concurrency_wait_time/1e6, 3), '999,999,990.000'), 18) conc_wait_secs_ff + , LPAD(TO_CHAR(ROUND(plsql_exec_time/1e6, 3), '999,999,990.000'), 18) plsql_exec_secs_ff + , LPAD(TO_CHAR(ROUND(java_exec_time/1e6, 3), '999,999,990.000'), 18) java_exec_secs_ff + , LPAD(TO_CHAR(sorts, '999,999,999,999,990'), 20) sorts_ff + , LPAD(TO_CHAR(sharable_mem, '999,999,999,999,990'), 20) sharable_mem_ff + , LPAD(TO_CHAR(total_sharable_mem, '999,999,999,999,990'), 20) total_sharable_mem_ff + , LPAD(TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS'), 20) last_active_time_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_offload_eligible_bytes, '999,999,999,999,999,999,990'), 30) io_cell_offload_eligible_b_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_interconnect_bytes, '999,999,999,999,999,999,990'), 30) io_interconnect_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_uncompressed_bytes, '999,999,999,999,999,999,990'), 30) io_cell_uncompressed_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_offload_returned_bytes, '999,999,999,999,999,999,990'), 30) io_cell_offload_returned_b_ff + &&is_10g.&&is_11r1., LPAD(CASE WHEN io_cell_offload_eligible_bytes > io_cell_offload_returned_bytes AND io_cell_offload_eligible_bytes > 0 THEN LPAD(TO_CHAR(ROUND((io_cell_offload_eligible_bytes - io_cell_offload_returned_bytes) * 100 / io_cell_offload_eligible_bytes, 2), '990.00')||' %', 9) END, 10) io_saved_ff + FROM gv$sqlstats + WHERE sql_id = :sql_id + ORDER BY inst_id +/ + +BREAK ON inst_id SKIP PAGE ON obj_sta SKIP PAGE ON obsl SKIP PAGE ON shar SKIP PAGE; +PRO +PRO GV$SQL (ordered by inst_id, object_status, is_obsolete, is_shareable, last_active_time and child_number) +PRO ~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT inst_id + , SUBSTR(object_status, 1, 7) obj_sta + , is_obsolete obsl + , is_shareable shar + , LPAD(TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS'), 20) last_active_time_ff + , child_number + , plan_hash_value + , LPAD(TO_CHAR(parse_calls, '999,999,999,999,990'), 20) parse_calls_ff + , LPAD(TO_CHAR(executions, '999,999,999,999,990'), 20) executions_ff + , LPAD(TO_CHAR(px_servers_executions, '999,999,999,999,990'), 20) px_servers_executions_ff + , LPAD(TO_CHAR(fetches, '999,999,999,999,990'), 20) fetches_ff + , LPAD(TO_CHAR(rows_processed, '999,999,999,999,990'), 20) rows_processed_ff + , LPAD(TO_CHAR(loaded_versions, '999,999,990'), 15) loaded_versions_ff + , LPAD(TO_CHAR(open_versions, '999,999,990'), 15) open_versions_ff + , LPAD(TO_CHAR(users_opening, '999,999,990'), 15) users_opening_ff + , LPAD(TO_CHAR(users_executing, '999,999,990'), 15) users_executing_ff + , LPAD(TO_CHAR(loads, '999,990'), 8) loads_ff + , LPAD(TO_CHAR(invalidations, '999,990'), 8) invalidations_ff + , LPAD(TO_CHAR(buffer_gets, '999,999,999,999,990'), 20) buffer_gets_ff + , LPAD(TO_CHAR(disk_reads, '999,999,999,999,990'), 20) disk_reads_ff + , LPAD(TO_CHAR(direct_writes, '999,999,999,999,990'), 20) direct_writes_ff + , LPAD(TO_CHAR(ROUND(elapsed_time/1e6, 3), '999,999,990.000'), 18) elsapsed_secs_ff + , LPAD(TO_CHAR(ROUND(cpu_time/1e6, 3), '999,999,990.000'), 18) cpu_secs_ff + , LPAD(TO_CHAR(ROUND(user_io_wait_time/1e6, 3), '999,999,990.000'), 18) user_io_wait_secs_ff + , LPAD(TO_CHAR(ROUND(cluster_wait_time/1e6, 3), '999,999,990.000'), 18) cluster_wait_secs_ff + , LPAD(TO_CHAR(ROUND(application_wait_time/1e6, 3), '999,999,990.000'), 18) appl_wait_secs_ff + , LPAD(TO_CHAR(ROUND(concurrency_wait_time/1e6, 3), '999,999,990.000'), 18) conc_wait_secs_ff + , LPAD(TO_CHAR(ROUND(plsql_exec_time/1e6, 3), '999,999,990.000'), 18) plsql_exec_secs_ff + , LPAD(TO_CHAR(ROUND(java_exec_time/1e6, 3), '999,999,990.000'), 18) java_exec_secs_ff + , LPAD(TO_CHAR(sorts, '999,999,999,999,990'), 20) sorts_ff + , LPAD(TO_CHAR(sharable_mem, '999,999,999,999,990'), 20) sharable_mem_ff + , LPAD(TO_CHAR(persistent_mem, '999,999,999,999,990'), 20) persistent_mem_ff + , LPAD(TO_CHAR(runtime_mem, '999,999,999,999,990'), 20) runtime_mem_ff + , LPAD(first_load_time, 20) first_load_time_ff + , LPAD(last_load_time, 20) last_load_time_ff + , optimizer_cost + , optimizer_env_hash_value + , parsing_schema_name + , service service_ff + , module module_ff + , action action_ff + , sql_profile sql_profile_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_offload_eligible_bytes, '999,999,999,999,999,999,990'), 30) io_cell_offload_eligible_b_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_interconnect_bytes, '999,999,999,999,999,999,990'), 30) io_interconnect_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_uncompressed_bytes, '999,999,999,999,999,999,990'), 30) io_cell_uncompressed_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(io_cell_offload_returned_bytes, '999,999,999,999,999,999,990'), 30) io_cell_offload_returned_b_ff + &&is_10g.&&is_11r1., LPAD(CASE WHEN io_cell_offload_eligible_bytes > io_cell_offload_returned_bytes AND io_cell_offload_eligible_bytes > 0 THEN LPAD(TO_CHAR(ROUND((io_cell_offload_eligible_bytes - io_cell_offload_returned_bytes) * 100 / io_cell_offload_eligible_bytes, 2), '990.00')||' %', 9) END, 10) io_saved_ff + FROM gv$sql + WHERE sql_id = :sql_id + ORDER BY inst_id + , SUBSTR(object_status, 1, 7) DESC + , is_obsolete + , is_shareable DESC + , last_active_time DESC + , child_number DESC +/ +CLEAR BREAKS; + +PRO +PRO GV$SQL (grouped by PHV and ordered by et_secs_per_exec) +PRO ~~~~~~ +SELECT plan_hash_value + , TO_CHAR(ROUND(SUM(elapsed_time)/SUM(executions)/1e6,6), '999,990.000000') et_secs_per_exec + , TO_CHAR(ROUND(SUM(cpu_time)/SUM(executions)/1e6,6), '999,990.000000') cpu_secs_per_exec + , SUM(executions) executions + --, TO_CHAR(ROUND(SUM(elapsed_time)/1e6,6), '999,999,999,990') et_secs_tot + --, TO_CHAR(ROUND(SUM(cpu_time)/1e6,6), '999,999,999,990') cpu_secs_tot + , COUNT(DISTINCT child_number) cursors + , MAX(child_number) max_child + , SUM(CASE is_bind_sensitive WHEN 'Y' THEN 1 ELSE 0 END) bind_send + , SUM(CASE is_bind_aware WHEN 'Y' THEN 1 ELSE 0 END) bind_aware + , SUM(CASE is_shareable WHEN 'Y' THEN 1 ELSE 0 END) shareable + , SUM(CASE object_status WHEN 'VALID' THEN 1 ELSE 0 END) valid + , SUM(CASE object_status WHEN 'INVALID_UNAUTH' THEN 1 ELSE 0 END) invalid + , TO_CHAR(MAX(last_active_time), 'YYYY-MM-DD"T"HH24:MI:SS') last_active_time + , ROUND(SUM(buffer_gets)/SUM(executions)) buffers_per_exec + , TO_CHAR(ROUND(SUM(rows_processed)/SUM(executions), 3), '999,999,999,990.000') rows_per_exec + FROM gv$sql + WHERE sql_id = :sql_id + AND executions > 0 + GROUP BY + plan_hash_value + ORDER BY + 2 +/ + +BREAK ON inst_id SKIP PAGE ON obj_sta SKIP PAGE ON obsl SKIP PAGE ON shar SKIP PAGE; +PRO +PRO GV$SQL (ordered by inst_id, object_status, is_obsolete, is_shareable, last_active_time and child_number) +PRO ~~~~~~ +SELECT inst_id + , SUBSTR(object_status, 1, 7) obj_sta + , is_obsolete obsl + , is_shareable shar + , LPAD(TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS'), 20) last_active_time_ff + , child_number + , plan_hash_value + , is_bind_sensitive sens + , is_bind_aware aware + , users_executing u_exec + , TO_CHAR(ROUND(elapsed_time/executions/1e6,6), '999,990.000000') et_secs_per_exec + , TO_CHAR(ROUND(cpu_time/executions/1e6,6), '999,990.000000') cpu_secs_per_exec + , executions + , TO_CHAR(ROUND(elapsed_time/1e6,6), '999,999,999,990') et_secs_tot + , TO_CHAR(ROUND(cpu_time/1e6,6), '999,999,999,990') cpu_secs_tot + , TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS') last_active_time + , ROUND(buffer_gets/executions) buffers_per_exec + , TO_CHAR(ROUND(rows_processed/executions, 3), '999,999,999,990.000') rows_per_exec + FROM gv$sql + WHERE sql_id = :sql_id + AND executions > 0 + ORDER BY inst_id + , SUBSTR(object_status, 1, 7) DESC + , is_obsolete + , is_shareable DESC + , last_active_time DESC + , child_number DESC +/ +CLEAR BREAKS; + +BREAK ON inst_id SKIP PAGE ON obj_sta SKIP PAGE ON obsl SKIP PAGE ON shar SKIP PAGE; +PRO +PRO GV$SQL (ordered by inst_id, object_status, is_obsolete, is_shareable, last_active_time and child_number) +PRO ~~~~~~ +SELECT inst_id + , SUBSTR(object_status, 1, 7) obj_sta + , is_obsolete obsl + , is_shareable shar + , LPAD(TO_CHAR(last_active_time, 'YYYY-MM-DD"T"HH24:MI:SS'), 20) last_active_time_ff + , child_number + , plan_hash_value + &&is_10g., sql_plan_baseline + , sql_profile + &&is_10g., sql_patch + FROM gv$sql + WHERE sql_id = :sql_id + AND executions > 0 + ORDER BY inst_id + , SUBSTR(object_status, 1, 7) DESC + , is_obsolete + , is_shareable DESC + , last_active_time DESC + , child_number DESC +/ +CLEAR BREAKS; + +PRO +--PRO GV$SQL_PLAN_STATISTICS_ALL LAST (ordered by inst_id and child_number) +PRO GV$SQL_PLAN_STATISTICS_ALL LAST (ordered by child_number) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +--BREAK ON inst_child_ff SKIP 2; +SET PAGES 0; +SPO planx_&&sql_id._&¤t_time..txt APP; +/* +WITH v AS ( +SELECT /*+ MATERIALIZE * / + DISTINCT sql_id, inst_id, child_number + FROM gv$sql + WHERE sql_id = :sql_id + AND loaded_versions > 0 + ORDER BY 1, 2, 3 ) +SELECT /*+ ORDERED USE_NL(t) * / + RPAD('Inst: '||v.inst_id, 9)||' '||RPAD('Child: '||v.child_number, 11) inst_child_ff, + t.plan_table_output + FROM v, TABLE(DBMS_XPLAN.DISPLAY('gv$sql_plan_statistics_all', NULL, 'ADVANCED ALLSTATS LAST', + 'inst_id = '||v.inst_id||' AND sql_id = '''||v.sql_id||''' AND child_number = '||v.child_number)) t +/ +*/ +SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(:sql_id, NULL, 'ADVANCED ALLSTATS LAST')); + +PRO +PRO DBA_HIST_SQLSTAT DELTA (ordered by snap_id DESC, instance_number and plan_hash_value) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SET PAGES 50; +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT s.snap_id + , TO_CHAR(s.begin_interval_time, 'YYYY-MM-DD"T"HH24:MI:SS') begin_interval_time_ff + , TO_CHAR(s.end_interval_time, 'YYYY-MM-DD"T"HH24:MI:SS') end_interval_time_ff + , s.instance_number + , h.plan_hash_value + , DECODE(h.loaded_versions, 1, 'Y', 'N') loaded_ff + , LPAD(TO_CHAR(h.version_count, '999,990'), 8) version_count_ff + , LPAD(TO_CHAR(h.parse_calls_delta, '999,999,999,999,990'), 20) parse_calls_ff + , LPAD(TO_CHAR(h.executions_delta, '999,999,999,999,990'), 20) executions_ff + , LPAD(TO_CHAR(h.rows_processed_delta, '999,999,999,999,990'), 20) rows_processed_ff + , LPAD(TO_CHAR(h.loads_delta, '999,990'), 8) loads_ff + , LPAD(TO_CHAR(h.invalidations_delta, '999,990'), 8) invalidations_ff + , LPAD(TO_CHAR(h.buffer_gets_delta, '999,999,999,999,990'), 20) buffer_gets_ff + , LPAD(TO_CHAR(h.disk_reads_delta, '999,999,999,999,990'), 20) disk_reads_ff + , LPAD(TO_CHAR(h.direct_writes_delta, '999,999,999,999,990'), 20) direct_writes_ff + , LPAD(TO_CHAR(ROUND(h.elapsed_time_delta/1e6, 3), '999,999,990.000'), 18) elsapsed_secs_ff + , LPAD(TO_CHAR(ROUND(h.cpu_time_delta/1e6, 3), '999,999,990.000'), 18) cpu_secs_ff + , LPAD(TO_CHAR(ROUND(h.iowait_delta/1e6, 3), '999,999,990.000'), 18) user_io_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.clwait_delta/1e6, 3), '999,999,990.000'), 18) cluster_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.apwait_delta/1e6, 3), '999,999,990.000'), 18) appl_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.ccwait_delta/1e6, 3), '999,999,990.000'), 18) conc_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.plsexec_time_delta/1e6, 3), '999,999,990.000'), 18) plsql_exec_secs_ff + , LPAD(TO_CHAR(ROUND(h.javexec_time_delta/1e6, 3), '999,999,990.000'), 18) java_exec_secs_ff + , LPAD(TO_CHAR(h.sorts_delta, '999,999,999,999,990'), 20) sorts_ff + , LPAD(TO_CHAR(h.sharable_mem, '999,999,999,999,990'), 20) sharable_mem_ff + , h.optimizer_cost + , h.optimizer_env_hash_value + , h.parsing_schema_name + , h.module module_ff + , h.action action_ff + , h.sql_profile sql_profile_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_offload_elig_bytes_delta, '999,999,999,999,999,999,990'), 30) io_cell_offload_eligible_b_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_interconnect_bytes_delta, '999,999,999,999,999,999,990'), 30) io_interconnect_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.cell_uncompressed_bytes_delta, '999,999,999,999,999,999,990'), 30) io_cell_uncompressed_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_offload_return_bytes_delta, '999,999,999,999,999,999,990'), 30) io_cell_offload_returned_b_ff + &&is_10g.&&is_11r1., LPAD(CASE WHEN h.io_offload_elig_bytes_delta > h.io_offload_return_bytes_delta AND h.io_offload_elig_bytes_delta > 0 THEN LPAD(TO_CHAR(ROUND((h.io_offload_elig_bytes_delta - h.io_offload_return_bytes_delta) * 100 / h.io_offload_elig_bytes_delta, 2), '990.00')||' %', 9) END, 10) io_saved_ff + FROM dba_hist_sqlstat h, + dba_hist_snapshot s + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number + ORDER BY 1 DESC, 4, 5 +/ + +PRO +PRO DBA_HIST_SQLSTAT TOTAL (ordered by snap_id DESC, instance_number and plan_hash_value) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT s.snap_id + , TO_CHAR(s.begin_interval_time, 'YYYY-MM-DD"T"HH24:MI:SS') begin_interval_time_ff + , TO_CHAR(s.end_interval_time, 'YYYY-MM-DD"T"HH24:MI:SS') end_interval_time_ff + , s.instance_number + , h.plan_hash_value + , DECODE(h.loaded_versions, 1, 'Y', 'N') loaded_ff + , LPAD(TO_CHAR(h.version_count, '999,990'), 8) version_count_ff + , LPAD(TO_CHAR(h.parse_calls_total, '999,999,999,999,990'), 20) parse_calls_ff + , LPAD(TO_CHAR(h.executions_total, '999,999,999,999,990'), 20) executions_ff + , LPAD(TO_CHAR(h.rows_processed_total, '999,999,999,999,990'), 20) rows_processed_ff + , LPAD(TO_CHAR(h.loads_total, '999,990'), 8) loads_ff + , LPAD(TO_CHAR(h.invalidations_total, '999,990'), 8) invalidations_ff + , LPAD(TO_CHAR(h.buffer_gets_total, '999,999,999,999,990'), 20) buffer_gets_ff + , LPAD(TO_CHAR(h.disk_reads_total, '999,999,999,999,990'), 20) disk_reads_ff + , LPAD(TO_CHAR(h.direct_writes_total, '999,999,999,999,990'), 20) direct_writes_ff + , LPAD(TO_CHAR(ROUND(h.elapsed_time_total/1e6, 3), '999,999,990.000'), 18) elsapsed_secs_ff + , LPAD(TO_CHAR(ROUND(h.cpu_time_total/1e6, 3), '999,999,990.000'), 18) cpu_secs_ff + , LPAD(TO_CHAR(ROUND(h.iowait_total/1e6, 3), '999,999,990.000'), 18) user_io_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.clwait_total/1e6, 3), '999,999,990.000'), 18) cluster_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.apwait_total/1e6, 3), '999,999,990.000'), 18) appl_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.ccwait_total/1e6, 3), '999,999,990.000'), 18) conc_wait_secs_ff + , LPAD(TO_CHAR(ROUND(h.plsexec_time_total/1e6, 3), '999,999,990.000'), 18) plsql_exec_secs_ff + , LPAD(TO_CHAR(ROUND(h.javexec_time_total/1e6, 3), '999,999,990.000'), 18) java_exec_secs_ff + , LPAD(TO_CHAR(h.sorts_total, '999,999,999,999,990'), 20) sorts_ff + , LPAD(TO_CHAR(h.sharable_mem, '999,999,999,999,990'), 20) sharable_mem_ff + , h.optimizer_cost + , h.optimizer_env_hash_value + , h.parsing_schema_name + , h.module module_ff + , h.action action_ff + , h.sql_profile sql_profile_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_offload_elig_bytes_total, '999,999,999,999,999,999,990'), 30) io_cell_offload_eligible_b_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_interconnect_bytes_total, '999,999,999,999,999,999,990'), 30) io_interconnect_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.cell_uncompressed_bytes_total, '999,999,999,999,999,999,990'), 30) io_cell_uncompressed_bytes_ff + &&is_10g.&&is_11r1., LPAD(TO_CHAR(h.io_offload_return_bytes_total, '999,999,999,999,999,999,990'), 30) io_cell_offload_returned_b_ff + &&is_10g.&&is_11r1., LPAD(CASE WHEN h.io_offload_elig_bytes_total > h.io_offload_return_bytes_total AND h.io_offload_elig_bytes_total > 0 THEN LPAD(TO_CHAR(ROUND((h.io_offload_elig_bytes_total - h.io_offload_return_bytes_total) * 100 / h.io_offload_elig_bytes_total, 2), '990.00')||' %', 9) END, 10) io_saved_ff + FROM dba_hist_sqlstat h, + dba_hist_snapshot s + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND s.snap_id = h.snap_id + AND s.dbid = h.dbid + AND s.instance_number = h.instance_number + ORDER BY 1 DESC, 4, 5 +/ + +PRO +PRO DBA_HIST_SQLSTAT DELTA (ordered by et_secs_per_exec) +PRO ~~~~~~~~~~~~~~~~~~~~~~ +SELECT plan_hash_value + , TO_CHAR(ROUND(SUM(elapsed_time_delta)/SUM(executions_delta)/1e6,6), '999,990.000000') et_secs_per_exec + , TO_CHAR(ROUND(SUM(cpu_time_delta)/SUM(executions_delta)/1e6,6), '999,990.000000') cpu_secs_per_exec + , SUM(executions_delta) executions + , TO_CHAR(ROUND(SUM(elapsed_time_delta)/1e6,6), '999,999,999,990') et_secs_tot + , TO_CHAR(ROUND(SUM(cpu_time_delta)/1e6,6), '999,999,999,990') cpu_secs_tot + , ROUND(SUM(buffer_gets_delta)/SUM(executions_delta)) buffers_per_exec + , TO_CHAR(ROUND(SUM(rows_processed_delta)/SUM(executions_delta), 3), '999,999,999,990.000') rows_per_exec + FROM dba_hist_sqlstat + WHERE :license = 'Y' + AND sql_id = :sql_id + AND executions_delta > 0 + GROUP BY + plan_hash_value + ORDER BY + 2 +/ + +PRO +PRO DBA_HIST_SQL_PLAN (ordered by plan_hash_value) +PRO ~~~~~~~~~~~~~~~~~ +BREAK ON plan_timestamp_ff SKIP 2; +SET PAGES 0; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH v AS ( +SELECT /*+ MATERIALIZE */ + DISTINCT sql_id, plan_hash_value, dbid, timestamp + FROM dba_hist_sql_plan + WHERE :license = 'Y' + AND dbid = :dbid + AND sql_id = :sql_id + ORDER BY 1, 2, 3 ) +SELECT /*+ ORDERED USE_NL(t) */ + TO_CHAR(v.timestamp, 'YYYY-MM-DD"T"HH24:MI:SS') plan_timestamp_ff, + t.plan_table_output + FROM v, TABLE(DBMS_XPLAN.DISPLAY_AWR(v.sql_id, v.plan_hash_value, v.dbid, 'ADVANCED')) t +/ +CLEAR BREAK; + +PRO +PRO GV$ACTIVE_SESSION_HISTORY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_slices = '10'; +SET PAGES 50; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ MATERIALIZE */ + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM gv$active_session_history h + WHERE :license = 'Y' + AND sql_id = :sql_id + GROUP BY + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 2 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 7 days by timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '7'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.ash) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + USE_HASH(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn h.INT$DBA_HIST_ACT_SESS_HISTORY.ash h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + FULL(h.sn) + FULL(h.ash) + FULL(h.evt) + USE_HASH(h.sn h.ash h.evt) + */ + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM dba_hist_active_sess_history h + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND h.snap_id BETWEEN &&x_minimum_snap_id. AND &&x_maximum_snap_id. + GROUP BY + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 2 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO AWR History range considered: from &&x_minimum_date. to &&x_maximum_date. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 31 days by timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '31'; +SPO planx_&&sql_id._&¤t_time..txt APP; +/ + +PRO +PRO GV$ACTIVE_SESSION_HISTORY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_slices = '15'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ MATERIALIZE */ + h.sql_plan_hash_value plan_hash_value, + NVL(h.sql_plan_line_id, 0) line_id_ff, + SUBSTR(h.sql_plan_operation||' '||h.sql_plan_options, 1, 50) operation_ff, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM gv$active_session_history h + WHERE :license = 'Y' + AND sql_id = :sql_id + GROUP BY + h.sql_plan_hash_value, + h.sql_plan_line_id, + h.sql_plan_operation, + h.sql_plan_options, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 5 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.plan_hash_value, + e.line_id_ff, + e.operation_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + TO_NUMBER(NULL) plan_hash_value, + TO_NUMBER(NULL) id, + NULL operation_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 7 days by plan line and timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '7'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.ash) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + USE_HASH(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn h.INT$DBA_HIST_ACT_SESS_HISTORY.ash h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + FULL(h.sn) + FULL(h.ash) + FULL(h.evt) + USE_HASH(h.sn h.ash h.evt) + */ + h.sql_plan_hash_value plan_hash_value, + NVL(h.sql_plan_line_id, 0) line_id_ff, + SUBSTR(h.sql_plan_operation||' '||h.sql_plan_options, 1, 50) operation_ff, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM dba_hist_active_sess_history h + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND h.snap_id BETWEEN &&x_minimum_snap_id. AND &&x_maximum_snap_id. + GROUP BY + h.sql_plan_hash_value, + h.sql_plan_line_id, + h.sql_plan_operation, + h.sql_plan_options, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 5 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.plan_hash_value, + e.line_id_ff, + e.operation_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + TO_NUMBER(NULL) plan_hash_value, + TO_NUMBER(NULL) id, + NULL operation_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO AWR History range considered: from &&x_minimum_date. to &&x_maximum_date. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 31 days by plan line and timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '31'; +SPO planx_&&sql_id._&¤t_time..txt APP; +/ + +PRO +PRO GV$ACTIVE_SESSION_HISTORY +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_slices = '20'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ MATERIALIZE */ + h.sql_plan_hash_value plan_hash_value, + NVL(h.sql_plan_line_id, 0) line_id_ff, + SUBSTR(h.sql_plan_operation||' '||h.sql_plan_options, 1, 50) operation_ff, + CASE h.session_state WHEN 'ON CPU' THEN -1 ELSE h.current_obj# END current_obj#, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM gv$active_session_history h + WHERE :license = 'Y' + AND sql_id = :sql_id + GROUP BY + h.sql_plan_hash_value, + h.sql_plan_line_id, + h.sql_plan_operation, + h.sql_plan_options, + CASE h.session_state WHEN 'ON CPU' THEN -1 ELSE h.current_obj# END, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 6 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.plan_hash_value, + e.line_id_ff, + e.operation_ff, + SUBSTR(e.current_obj#||' '||TRIM( + (SELECT CASE e.current_obj# WHEN 0 THEN ' UNDO' ELSE ' '||o.owner||'.'||o.object_name||' ('||o.object_type||')' END + FROM dba_objects o WHERE o.object_id(+) = e.current_obj# AND ROWNUM = 1) + ), 1, 60) current_object_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + TO_NUMBER(NULL) plan_hash_value, + TO_NUMBER(NULL) id, + NULL operation_ff, + NULL current_object_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 7 days by plan line, obj and timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '7'; +SPO planx_&&sql_id._&¤t_time..txt APP; +WITH +events AS ( +SELECT /*+ + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.ash) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + USE_HASH(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn h.INT$DBA_HIST_ACT_SESS_HISTORY.ash h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + FULL(h.sn) + FULL(h.ash) + FULL(h.evt) + USE_HASH(h.sn h.ash h.evt) + */ + h.sql_plan_hash_value plan_hash_value, + NVL(h.sql_plan_line_id, 0) line_id_ff, + SUBSTR(h.sql_plan_operation||' '||h.sql_plan_options, 1, 50) operation_ff, + CASE h.session_state WHEN 'ON CPU' THEN -1 ELSE h.current_obj# END current_obj#, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END timed_event, + COUNT(*) samples + FROM dba_hist_active_sess_history h + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND h.snap_id BETWEEN &&x_minimum_snap_id. AND &&x_maximum_snap_id. + GROUP BY + h.sql_plan_hash_value, + h.sql_plan_line_id, + h.sql_plan_operation, + h.sql_plan_options, + CASE h.session_state WHEN 'ON CPU' THEN -1 ELSE h.current_obj# END, + CASE h.session_state WHEN 'ON CPU' THEN h.session_state ELSE h.wait_class||' "'||h.event||'"' END + ORDER BY + 6 DESC +), +total AS ( +SELECT SUM(samples) samples, + SUM(CASE WHEN ROWNUM > &&x_slices. THEN samples ELSE 0 END) others + FROM events +) +SELECT e.samples samples_ff, + ROUND(100 * e.samples / t.samples, 1) percent_ff, + e.plan_hash_value, + e.line_id_ff, + e.operation_ff, + SUBSTR(e.current_obj#||' '||TRIM( + (SELECT CASE e.current_obj# WHEN 0 THEN ' UNDO' ELSE ' '||o.owner||'.'||o.object_name||' ('||o.object_type||')' END + FROM dba_objects o WHERE o.object_id(+) = e.current_obj# AND ROWNUM = 1) + ), 1, 60) current_object_ff, + e.timed_event timed_event_ff + FROM events e, + total t + WHERE ROWNUM <= &&x_slices. + AND ROUND(100 * e.samples / t.samples, 1) > 0.1 + UNION ALL +SELECT others samples_ff, + ROUND(100 * others / samples, 1) percent_ff, + TO_NUMBER(NULL) plan_hash_value, + TO_NUMBER(NULL) id, + NULL operation_ff, + NULL current_object_ff, + 'Others' timed_event_ff + FROM total + WHERE others > 0 + AND ROUND(100 * others / samples, 1) > 0.1 +/ + +PRO +PRO AWR History range considered: from &&x_minimum_date. to &&x_maximum_date. +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PRO +PRO DBA_HIST_ACTIVE_SESS_HISTORY (past 31 days by plan line, obj and timed event) +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +DEF x_days = '31'; +SPO planx_&&sql_id._&¤t_time..txt APP; +/ + +PRO +PRO SQL Plan Baselines +PRO ~~~~~~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT created, plan_name, origin, enabled, accepted, fixed, reproduced, &&is_10g.&&is_11r1.adaptive, + last_executed, last_modified, description +FROM dba_sql_plan_baselines WHERE signature = :signature +ORDER BY created, plan_name +/ +SET HEA OFF PAGES 0; +SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE('&&sql_handle.')) +/ +SET HEA ON PAGES 50; + +SPO planx_&&sql_id._&¤t_time..txt APP; +PRO get list of tables from execution plan +PRO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +VAR tables_list CLOB; +EXEC :tables_list := NULL; +-- get list of tables from execution plan +-- format (('owner', 'table_name'), (), ()...) +DECLARE + l_pair VARCHAR2(32767); +BEGIN + DBMS_LOB.CREATETEMPORARY(:tables_list, TRUE, DBMS_LOB.SESSION); + FOR i IN (WITH object AS ( + SELECT /*+ MATERIALIZE */ + object_owner owner, object_name name + FROM gv$sql_plan + WHERE inst_id IN (SELECT inst_id FROM gv$instance) + AND sql_id = :sql_id + AND object_owner IS NOT NULL + AND object_name IS NOT NULL + UNION + SELECT object_owner owner, object_name name + FROM dba_hist_sql_plan + WHERE :license = 'Y' + AND dbid = :dbid + AND sql_id = :sql_id + AND object_owner IS NOT NULL + AND object_name IS NOT NULL + UNION + SELECT CASE h.current_obj# WHEN 0 THEN 'SYS' ELSE o.owner END owner, + CASE h.current_obj# WHEN 0 THEN 'UNDO' ELSE o.object_name END name + FROM gv$active_session_history h, + dba_objects o + WHERE :license = 'Y' + AND h.sql_id = :sql_id + AND h.current_obj# >= 0 + AND o.object_id(+) = h.current_obj# + UNION + SELECT /*+ + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.ash) + FULL(h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + USE_HASH(h.INT$DBA_HIST_ACT_SESS_HISTORY.sn h.INT$DBA_HIST_ACT_SESS_HISTORY.ash h.INT$DBA_HIST_ACT_SESS_HISTORY.evt) + FULL(h.sn) + FULL(h.ash) + FULL(h.evt) + USE_HASH(h.sn h.ash h.evt) + */ + CASE h.current_obj# WHEN 0 THEN 'SYS' ELSE o.owner END owner, + CASE h.current_obj# WHEN 0 THEN 'UNDO' ELSE o.object_name END name + FROM dba_hist_active_sess_history h, + dba_objects o + WHERE :license = 'Y' + AND h.dbid = :dbid + AND h.sql_id = :sql_id + AND h.current_obj# >= 0 + AND o.object_id(+) = h.current_obj# + ) + SELECT 'TABLE', t.owner, t.table_name + FROM dba_tab_statistics t, -- include fixed objects + object o + WHERE t.owner = o.owner + AND t.table_name = o.name + UNION + SELECT 'TABLE', i.table_owner, i.table_name + FROM dba_indexes i, + object o + WHERE i.owner = o.owner + AND i.index_name = o.name) + LOOP + IF l_pair IS NULL THEN + DBMS_LOB.WRITEAPPEND(:tables_list, 1, '('); + ELSE + IF DBMS_LOB.GETLENGTH(:tables_list) < 2799 THEN + DBMS_LOB.WRITEAPPEND(:tables_list, 1, ','); + END IF; + END IF; + l_pair := '('''||i.owner||''','''||i.table_name||''')'; + -- SP2-0341: line overflow during variable substitution (>3000 characters at line 12) + IF DBMS_LOB.GETLENGTH(:tables_list) < 2800 THEN + DBMS_LOB.WRITEAPPEND(:tables_list, LENGTH(l_pair), l_pair); + ELSE + EXIT; + END IF; + END LOOP; + IF l_pair IS NULL THEN + l_pair := '((''DUMMY'',''DUMMY''))'; + DBMS_LOB.WRITEAPPEND(:tables_list, LENGTH(l_pair), l_pair); + ELSE + DBMS_LOB.WRITEAPPEND(:tables_list, 1, ')'); + END IF; +END; +/ + +SET LONG 2000000 LONGC 2000 LIN 32767; +COL tables_list NEW_V tables_list FOR A32767; +SET HEAD OFF; +PRO +PRO (owner, table) list +PRO ~~~~~~~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT :tables_list tables_list FROM DUAL +/ +SET HEAD ON; + +PRO +PRO Tables Accessed +PRO ~~~~~~~~~~~~~~~ +COL table_name FOR A50; +COL degree FOR A10; +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT owner||'.'||table_name table_name, + partitioned, + degree, + temporary, + blocks, + num_rows, + avg_row_len, + sample_size, + TO_CHAR(last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS') last_analyzed, + global_stats, + compression + FROM dba_tables + WHERE (owner, table_name) IN &&tables_list. + ORDER BY + owner, + table_name +/ + +PRO +PRO Indexes +PRO ~~~~~~~ +COL table_and_index_name FOR A70; +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT i.table_owner||'.'||i.table_name||' '||i.owner||'.'||i.index_name table_and_index_name, + i.partitioned, + i.degree, + i.index_type, + i.uniqueness, + (SELECT COUNT(*) FROM dba_ind_columns ic WHERE ic.index_owner = i.owner AND ic.index_name = i.index_name) columns, + i.status, + &&is_10g.i.visibility, + i.blevel, + i.leaf_blocks, + i.distinct_keys, + i.clustering_factor, + i.num_rows, + i.sample_size, + TO_CHAR(i.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS') last_analyzed, + i.global_stats + FROM dba_indexes i + WHERE (i.table_owner, i.table_name) IN &&tables_list. + ORDER BY + i.table_owner, + i.table_name, + i.owner, + i.index_name +/ + +SET LONG 200 LONGC 20; +COL index_and_column_name FOR A70; +COL table_and_column_name FOR A70; +COL data_type FOR A20; +COL data_default FOR A20; +COL low_value FOR A32; +COL high_value FOR A32; +COL low_value_translated FOR A32; +COL high_value_translated FOR A32; +PRO +PRO Index Columns +PRO ~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT i.index_owner||'.'||i.index_name||' '||c.column_name index_and_column_name, + c.data_type, + c.nullable, + c.data_default, + c.num_distinct, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.low_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.low_value)),1,32) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.low_value)),1,32) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.low_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.low_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.low_value,15,8),'XXXXXXXX')) + END low_value_translated, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.high_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.high_value)),1,32) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.high_value)),1,32) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.high_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.high_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.high_value,15,8),'XXXXXXXX')) + END high_value_translated, + c.density, + c.num_nulls, + c.num_buckets, + c.histogram, + c.sample_size, + TO_CHAR(c.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS') last_analyzed, + c.global_stats, + c.avg_col_len + FROM dba_ind_columns i, + dba_tab_cols c + WHERE (i.table_owner, i.table_name) IN &&tables_list. + AND c.owner = i.table_owner + AND c.table_name = i.table_name + AND c.column_name = i.column_name + ORDER BY + i.index_owner, + i.index_name, + i.column_position +/ + +PRO +PRO Table Columns +PRO ~~~~~~~~~~~~~ +SPO planx_&&sql_id._&¤t_time..txt APP; +SELECT c.owner||'.'||c.table_name||' '||c.column_name table_and_column_name, + c.data_type, + c.nullable, + c.data_default, + c.num_distinct, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.low_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.low_value)),1,32) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.low_value)),1,32) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.low_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.low_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.low_value,1,2) ,'XX')-100) + (to_number(substr(c.low_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.low_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.low_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.low_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.low_value,15,8),'XXXXXXXX')) + END low_value_translated, + CASE WHEN c.data_type = 'NUMBER' THEN to_char(utl_raw.cast_to_number(c.high_value)) + WHEN c.data_type IN ('VARCHAR2', 'CHAR') THEN SUBSTR(to_char(utl_raw.cast_to_varchar2(c.high_value)),1,32) + WHEN c.data_type IN ('NVARCHAR2','NCHAR') THEN SUBSTR(to_char(utl_raw.cast_to_nvarchar2(c.high_value)),1,32) + WHEN c.data_type = 'BINARY_DOUBLE' THEN to_char(utl_raw.cast_to_binary_double(c.high_value)) + WHEN c.data_type = 'BINARY_FLOAT' THEN to_char(utl_raw.cast_to_binary_float(c.high_value)) + WHEN c.data_type = 'DATE' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))) + WHEN c.data_type LIKE 'TIMESTAMP%' THEN rtrim( + ltrim(to_char(100*(to_number(substr(c.high_value,1,2) ,'XX')-100) + (to_number(substr(c.high_value,3,2) ,'XX')-100),'0000'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,5,2) ,'XX') ,'00'))||'-'|| + ltrim(to_char( to_number(substr(c.high_value,7,2) ,'XX') ,'00'))||'/'|| + ltrim(to_char( to_number(substr(c.high_value,9,2) ,'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,11,2),'XX')-1,'00'))||':'|| + ltrim(to_char( to_number(substr(c.high_value,13,2),'XX')-1,'00'))||'.'|| + to_number(substr(c.high_value,15,8),'XXXXXXXX')) + END high_value_translated, + c.density, + c.num_nulls, + c.num_buckets, + c.histogram, + c.sample_size, + TO_CHAR(c.last_analyzed, 'YYYY-MM-DD"T"HH24:MI:SS') last_analyzed, + c.global_stats, + c.avg_col_len + FROM dba_tab_cols c + WHERE (c.owner, c.table_name) IN &&tables_list. + ORDER BY + c.owner, + c.table_name, + c.column_name +/ +-- spool off and cleanup +PRO +PRO planx_&&sql_id._&¤t_time..txt has been generated +SPO OFF; + diff --git a/star/raclocks.sql b/star/raclocks.sql new file mode 100644 index 0000000..e2802d6 --- /dev/null +++ b/star/raclocks.sql @@ -0,0 +1,80 @@ +-- https://easyteam.fr/dealing-with-lock-issues-in-oracle-rac-environnement/ + +@@myheader.sql + +col running_session for a20 +col machine for a30 +col osuser for a20 +col username for a20 +col module for a20 +col event for a30 +col wait_class for a20 +col inst_id for 9 head I# + +WITH +-- global lock view +gl AS ( +select +inst_id || '-' || sid instsid, id1, id2, +ctime, lmode, block, request +from +gv$lock +), +-- joins the global lock view on itself to identify locks +l AS ( +SELECT +l1.instsid holding_session, +l2.instsid waiting_session +FROM +gl l1, +gl l2 +WHERE +l1.block > 0 +AND l2.request > 0 +AND l1.id1=l2.id1 +AND l1.id2=l2.id2 +), +-- result view (tree of locked sessions) +rs AS ( +SELECT +lpad(' ',3*(level-1),' ') || waiting_session running_session +FROM ( +-- first insert as in utllockt +(SELECT +'-' holding_session, holding_session waiting_session +FROM +l +MINUS +SELECT +'-', waiting_session +FROM +l +) +UNION ALL +-- second insert as in utllockt +SELECT +holding_session, waiting_session +FROM +l +) +CONNECT BY PRIOR +waiting_session = holding_session +START WITH +holding_session = '-' +), +-- useful session informations +s AS ( +SELECT +inst_id, sid,serial#, module,machine, osuser, username, +nvl(sql_id, '-') sql_id, event, wait_class +FROM gv$session +) +-- final tree +SELECT +* +FROM +rs +JOIN +s ON ltrim(rs.running_session)=s.inst_id || '-' || s.sid; + +@@myfooter.sql diff --git a/star/recovery_area_usage.sql b/star/recovery_area_usage.sql new file mode 100644 index 0000000..4b535fc --- /dev/null +++ b/star/recovery_area_usage.sql @@ -0,0 +1,66 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display Recovery Area Usage +* Compatibility : 11.2 and above +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Jan-16 Vishal Gupta Added total computation +* 02-May-13 Vishal Gupta Updated to display space used in GB +* 30-Jul-12 Vishal Gupta Created +* +*/ + +PROMPT ***************************************************************** +PROMPT * R E C O V E R Y A R E A U S A G E +PROMPT ***************************************************************** + + + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN name HEADING "Name" FORMAT a28 +COLUMN value HEADING "Value" FORMAT a15 +COLUMN type HEADING "Type" FORMAT a10 +COLUMN ordinal HEADING "Ordinal" FORMAT 99 +COLUMN isdefault HEADING "Def|ault?" FORMAT a5 +COLUMN ismodified HEADING "Modi|fied?" FORMAT a8 +COLUMN isadjusted HEADING "Adjus|ted?" FORMAT a5 + +SELECT p.inst_id + , p.name + , TRIM(TO_CHAR(ROUND(p.value / 1024 / 1024 / 1024),'999,999') || ' GB') value + FROM gv$system_parameter p + WHERE p.name = 'db_recovery_file_dest_size' +ORDER BY p.inst_id +; + +COLUMN file_type HEADING "File Type" FORMAT a25 +COLUMN number_of_files HEADING "Files (#)" FORMAT 999,999,999 +COLUMN space_used HEADING "Space|Used|(MB)" FORMAT 999,999,999 +COLUMN space_reclaimable HEADING "Space|Reclaimable|(MB)" FORMAT 999,999,999 +COLUMN percent_space_used HEADING "Space|Used|(%)" FORMAT 999.99 +COLUMN percent_space_reclaimable HEADING "Space|Reclaimable|(%)" FORMAT 999.99 + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF number_of_files FORMAT 999,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF space_used FORMAT 999,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF space_reclaimable FORMAT 999,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF percent_space_used FORMAT 999.99 ON REPORT +COMPUTE SUM LABEL 'Total' OF percent_space_reclaimable FORMAT 999.99 ON REPORT + +SELECT r.file_type + , r.number_of_files + , ROUND(r.percent_space_used * p.value / 100 / 1024 / 1024) space_used + , ROUND(r.percent_space_reclaimable * p.value / 100 / 1024 / 1024) space_reclaimable + , r.percent_space_used + , r.percent_space_reclaimable + FROM v$recovery_area_usage r + , v$system_parameter p + WHERE p.name = 'db_recovery_file_dest_size' +; + diff --git a/star/s.sql b/star/s.sql new file mode 100644 index 0000000..24e3246 --- /dev/null +++ b/star/s.sql @@ -0,0 +1,80 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: s.sql +-- Purpose: Display current Session Wait and SQL_ID info (10g+) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @s +-- @s 52,110,225 +-- @s "select sid from v$session where username = 'XYZ'" +-- @s &mysid +-- +-------------------------------------------------------------------------------- + +col sw_event head EVENT for a40 truncate +col sw_p1transl head P1TRANSL for a42 +col sw_sid head SID for 999999 + +col sw_p1 head P1 for a18 justify left word_wrap +col sw_p2 head P2 for a18 justify left word_wrap +col sw_p3 head P3 for a19 justify left word_wrap + +col sw_blocking_session head BLOCKING_SID for a12 +col sqlid_and_child for a20 +select + sid sw_sid, + sql_id || ' '|| TO_CHAR( sql_child_number ) sqlid_and_child, +-- sql_exec_start, + status, + CASE WHEN state != 'WAITING' THEN 'WORKING' + ELSE 'WAITING' + END AS state, + CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' + ELSE event + END AS sw_event, + seq#, + seconds_in_wait sec_in_wait, + --wait_time_micro / 1000000 sec_in_wait2, + CASE WHEN blocking_session_status = 'VALID' THEN TO_CHAR(blocking_session)||CASE WHEN blocking_instance != USERENV('INSTANCE') THEN ' inst='||blocking_instance ELSE NULL END ELSE blocking_session_status END sw_blocking_session, + CASE state WHEN 'WAITING' THEN NVL2(p1text,p1text||'= ',null)||CASE WHEN P1 < 536870912 THEN to_char(P1) ELSE '0x'||rawtohex(P1RAW) END ELSE null END SW_P1, + CASE state WHEN 'WAITING' THEN NVL2(p2text,p2text||'= ',null)||CASE WHEN P2 < 536870912 THEN to_char(P2) ELSE '0x'||rawtohex(P2RAW) END ELSE null END SW_P2, + CASE state WHEN 'WAITING' THEN NVL2(p3text,p3text||'= ',null)||CASE WHEN P3 < 536870912 THEN to_char(P3) ELSE '0x'||rawtohex(P3RAW) END ELSE null END SW_P3, + CASE state WHEN 'WAITING' THEN + CASE + WHEN event like 'cursor:%' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX')) + WHEN event like 'enq%' AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '|| + chr(bitand(p1, -16777216)/16777215)|| + chr(bitand(p1,16711680)/65535)|| + ' mode '||bitand(p1, power(2,14)-1) + WHEN event like 'latch%' AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '||( + select name||'[par' + from v$latch_parent + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + union all + select name||'[c'||child#||']' + from v$latch_children + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + ) + WHEN event like 'library cache pin' THEN + '0x'||RAWTOHEX(p1raw) + ELSE NULL END + ELSE NULL END AS sw_p1transl +FROM + v$session +WHERE + sid IN (&1) +ORDER BY + state, + sw_event, + p1, + p2, + p3 +/ diff --git a/star/sess.sql b/star/sess.sql new file mode 100644 index 0000000..fcf12f2 --- /dev/null +++ b/star/sess.sql @@ -0,0 +1,72 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected users. This script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : User Sessions (All) | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +-- SET LINESIZE 180 +-- SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_terminal FORMAT a10 HEADING 'Terminal' TRUNC +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC + +BREAK ON instance_name SKIP PAGE + +SELECT + i.instance_name instance_name + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.terminal session_terminal + , s.machine session_machine + , s.program session_program +FROM + gv$session s + INNER JOIN gv$process p ON (s.paddr = p.addr AND s.inst_id = p.inst_id) + INNER JOIN gv$instance i ON (p.inst_id = i.inst_id) +ORDER BY + i.instance_name + , s.sid; diff --git a/star/sessa.sql b/star/sessa.sql new file mode 100644 index 0000000..8b37513 --- /dev/null +++ b/star/sessa.sql @@ -0,0 +1,76 @@ +-- +----------------------------------------------------------------------------+ +-- | Jeffrey M. Hunter | +-- | jhunter@idevelopment.info | +-- | www.idevelopment.info | +-- |----------------------------------------------------------------------------| +-- | Copyright (c) 1998-2012 Jeffrey M. Hunter. All rights reserved. | +-- |----------------------------------------------------------------------------| +-- | DATABASE : Oracle | +-- | FILE : sess_users_active.sql | +-- | CLASS : Session Management | +-- | PURPOSE : List all currently connected and active user sessions. This | +-- | script is RAC enabled. | +-- | NOTE : As with any code, ensure to test this script in a development | +-- | environment before attempting to run it in production. | +-- +----------------------------------------------------------------------------+ + +SET TERMOUT OFF; +COLUMN current_instance NEW_VALUE current_instance NOPRINT; +SELECT rpad(instance_name, 17) current_instance FROM v$instance; +SET TERMOUT ON; + +PROMPT +PROMPT +------------------------------------------------------------------------+ +PROMPT | Report : Active User Sessions (All) | +PROMPT | Instance : ¤t_instance | +PROMPT +------------------------------------------------------------------------+ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +-- SET LINESIZE 180 +-- SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN instance_name FORMAT a8 HEADING 'Instance' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN oracle_username FORMAT a18 HEADING 'Oracle User' +COLUMN os_username FORMAT a18 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_terminal FORMAT a10 HEADING 'Terminal' TRUNC +COLUMN session_machine FORMAT a30 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC + +BREAK ON instance_name SKIP PAGE + +SELECT + i.instance_name instance_name + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.username oracle_username + , s.osuser os_username + , p.spid os_pid + , s.terminal session_terminal + , s.machine session_machine + , s.program session_program +FROM + gv$session s + INNER JOIN gv$process p ON (s.paddr = p.addr AND s.inst_id = p.inst_id) + INNER JOIN gv$instance i ON (p.inst_id = i.inst_id) +WHERE + s.status = 'ACTIVE' + AND s.username IS NOT null +ORDER BY + i.instance_name + , s.sid; diff --git a/star/sid_details.sql b/star/sid_details.sql new file mode 100644 index 0000000..8c6db39 --- /dev/null +++ b/star/sid_details.sql @@ -0,0 +1,675 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Details +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------- +* 25-JUN-15 Vishal Gupta Changed exadata specific statistics section +* 03-JUN-15 Vishal Gupta Changed event history's average waits from sec to msec. +* 12-MAR-15 Vishal Gupta Added follwoing columns to the output +* command name, +* 05-SEP-14 Vishal Gupta In last 10 SQL statement, removed filter for SQL_EXEC_START IS NOT NULL +* 03-JUL-14 Vishal Gupta Change Top Session Events column formatting + Added PGA and Temp usage in Last 10 SQL statements section +* 20-MAY-14 Vishal Gupta Updated last 10 sql statements query +* 12-Feb-14 Vishal Gupta Changed session tranactions output layout to transpose +* columns to rows. +* 04-Oct-13 Vishal Gupta Added SQL's SQLProfile and sql_plan_baseline +* information to output +* 17-May-13 Vishal Gupta Added last 10 SQL statements from ASH +* 08-Jan-13 Vishal Gupta Added time since last wait in wait-history section +* 05-Sep-12 Vishal Gupta Changed output field layout again. +* 09-Aug-12 Vishal Gupta Changed output field layout +* 11-May-12 Vishal Gupta Change output layout. Instead of SELECT output +* now it display dbms_output lines. +* 27-Mar-12 Vishal Gupta Included the session wait history +* 05-Aug-04 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + + +VARIABLE SID number ; +VARIABLE INST_ID number ; + + BEGIN + :SID := '&&1'; + :INST_ID := NVL('&&2',1); + IF :INST_ID = '' OR :INST_ID IS NULL THEN + :INST_ID := 1; + END IF; +END; +/ + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +UNDEFINE TOP_EVENT_COUNT +UNDEFINE BYTES_FORMAT +UNDEFINE BYTES_HEADING +UNDEFINE BYTES_DIVIDER + +DEFINE TOP_EVENT_COUNT=10 + +DEFINE COUNT_SMALL_FORMAT=9,999 +--DEFINE COUNT_SMALL_DIVIDER="1" +--DEFINE COUNT_SMALL_HEADING="#" +DEFINE COUNT_SMALL_DIVIDER="1000" +DEFINE COUNT_SMALL_HEADING="#1000" + +DEFINE COUNT_FORMAT=999,999,999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=999,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" + + +COLUMN session_details1 HEADING "Session Details" FORMAT a41 +COLUMN session_details2 HEADING "Session Details" FORMAT a70 +COLUMN sql_details HEADING "Session Details" FORMAT a151 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN SID HEADING "SID" FORMAT 99999 + +PROMPT +PROMPT ################# Session Details ########################## + +set heading off + select /*+ORDERED */ + /* First Column */ + TRIM(SUBSTR('Instance : ' || s.inst_id ,1,70)) || chr(10) + || TRIM(SUBSTR('SID : ' || s.sid ,1,70)) || chr(10) + || TRIM(SUBSTR('Session Serial# : ' || s.serial# ,1,70)) || chr(10) + || TRIM(SUBSTR('Status : ' || s.status ,1,70)) || chr(10) + || TRIM(SUBSTR('State : ' || s.state ,1,70)) || chr(10) + || TRIM(SUBSTR('Logon Time : ' || TO_CHAR(s.logon_time,'DD-MON-YY HH24:MI:SS') ,1,70)) || chr(10) + || TRIM(SUBSTR('Session Duration : ' || FLOOR(sysdate-s.logon_time) || 'd ' + || FLOOR(MOD((sysdate-s.logon_time) ,1 ) * 24) || 'h ' + || FLOOR(MOD((sysdate-s.logon_time)*24 ,1 ) * 60) || 'm ' + || FLOOR(MOD((sysdate-s.logon_time)*24*60,1 ) * 60) || 's' + ,1,70)) || chr(10) + || TRIM(SUBSTR('LastCall(sec) : ' || FLOOR(s.last_call_et/ 3600) || 'h ' + || LPAD(FLOOR(MOD(s.last_call_et , 3600 ) / 60),2) || 'm ' + || LPAD(MOD(s.last_call_et, 60 ) ,2) || 's' + ,1,70)) || chr(10) + || TRIM('Failed Over : ' || s.failed_over ) || chr(10) + || TRIM('Failover Type : ' || s.failover_type ) || chr(10) + || TRIM('Failover Method : ' || s.failover_method ) || chr(10) + || TRIM('Parallel Query : ' || s.pq_status ) || chr(10) + || TRIM('PDML Enabled : ' || s.pdml_enabled ) || chr(10) + || TRIM('PDML Status : ' || s.pdml_status ) || chr(10) + || TRIM('PDDL Status : ' || s.pddl_status ) || chr(10) + || TRIM('SQL Trace : ' || s.sql_trace ) || chr(10) + || TRIM('SQL Trace Waits : ' || s.sql_trace_waits ) || chr(10) + || TRIM('SQL Trace Binds : ' || s.sql_trace_binds ) || chr(10) + || TRIM('SQL Trace PlanStats: ' || s.sql_trace_plan_stats ) || chr(10) + as session_details1 + /* Second Column */ + , TRIM(SUBSTR('OS Username : ' || s.osuser ,1,70)) || chr(10) + || TRIM(SUBSTR('Client Machine : ' || s.machine ,1,70)) || chr(10) + || TRIM(SUBSTR('Client Process : ' || s.process ,1,70)) || chr(10) + || TRIM(SUBSTR('Program : ' || s.program ,1,70)) || chr(10) + || TRIM(SUBSTR('Module : ' || s.module ,1,70)) || chr(10) + || TRIM(SUBSTR('Action : ' || s.action ,1,70)) || chr(10) + || TRIM(SUBSTR('Client Info : ' || s.client_info ,1,70)) || chr(10) + || TRIM(SUBSTR('Client Identifier : ' || s.client_identifier ,1,70)) || chr(10) + || TRIM(SUBSTR('DB UserName : ' || s.username ,1,70)) || chr(10) + || TRIM(SUBSTR('Schema Name : ' || s.schemaname ,1,70)) || chr(10) + || TRIM(SUBSTR('ServiceName : ' || s.service_name ,1,70)) || chr(10) + || TRIM(SUBSTR('DB HostName : ' || i.host_name ,1,70)) || chr(10) + || TRIM(SUBSTR('Oracle SPID : ' || p.spid ,1,70)) || chr(10) + || TRIM(SUBSTR('Oracle PID : ' || p.pid ,1,70)) || chr(10) + || TRIM(SUBSTR('Oracle Process Name: ' || p.pname ,1,70)) || chr(10) + || TRIM(SUBSTR('Session Type : ' || s.type ,1,70)) || chr(10) + || TRIM(SUBSTR('Command Name : ' || c.command_name ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait Event : ' || w.event ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait(sec) : ' || w.seconds_in_wait ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait Parameter 1 : ' || w.p1text || ' ' || w.p1 ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait Parameter 2 : ' || w.p2text || ' ' || w.p2 ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait Parameter 3 : ' || w.p3text || ' ' || w.p3 ,1,70)) || chr(10) + as session_details2 + from gv$instance i + JOIN gv$session s ON i.inst_id = s.inst_id + LEFT OUTER JOIN gv$process p ON p.inst_id = s.inst_id AND p.ADDR = s.PADDR + LEFT OUTER JOIN gv$session_wait w ON w.inst_id = s.inst_id AND w.sid = s.sid + LEFT OUTER JOIN v$sqlcommand c ON c.command_type = s.command + where 1=1 + AND s.sid = :SID + AND s.inst_id = :INST_ID +; + +PROMPT +PROMPT ################# Currrent SQL Statement #################### + +-- Get the SQL Statement being executed + select --+ + TRIM(SUBSTR('Current SQL Exec Start : ' || TO_CHAR(s.sql_exec_start,'DD-MON-YY HH24:MI:SS') ,1,150)) || chr(10) || + TRIM(SUBSTR('Current SQL Exec Duration: ' || NVL2(s.sql_exec_start,FLOOR(sysdate - s.sql_exec_start) || 'd ' + || LPAD(FLOOR(MOD((sysdate - s.sql_exec_start) , 1) * 24 ) ,2) || 'h ' + || LPAD(FLOOR(MOD((sysdate - s.sql_exec_start) * 24 , 1) * 60 ) ,2) || 'm ' + || LPAD(FLOOR(MOD((sysdate - s.sql_exec_start) * 24 * 60 , 1) * 60 ) ,2),'') + ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL ID : ' || s.sql_id ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL Child Number : ' || s.sql_child_number ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL Plan : ' || sql.plan_hash_value ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL Profile : ' || sql.sql_profile ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL Plan Baseline: ' || sql.sql_plan_baseline,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQLText : ' || sql.sql_text ,1,150)) || chr(10) + || chr(10) + || TRIM(SUBSTR('Previous SQL Exec Start : ' || TO_CHAR(s.prev_exec_start,'DD-MON-YY HH24:MI:SS') ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL ID : ' || s.prev_sql_id ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL Child Number : ' || s.prev_child_number ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL Plan : ' || prev_sql.plan_hash_value ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL Profile : ' || prev_sql.sql_profile ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL Plan Baseline: ' || prev_sql.sql_plan_baseline ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQLText : ' || prev_sql.sql_text ,1,150)) + as sql_details + from gv$session s + , gv$sqlarea sql + , gv$sqlarea prev_sql + where s.inst_id = sql.inst_id (+) + AND s.sql_id = sql.sql_id (+) + AND s.inst_id = prev_sql.inst_id (+) + AND s.prev_sql_id = prev_sql.sql_id (+) + AND s.sid = :SID + AND s.inst_id = :INST_ID +; + + +PROMPT +PROMPT ############### Session Statistics ####################### + +COLUMN stat HEADING "Statisic" FORMAT a60 + +WITH stat1 AS +( + SELECT DECODE(sn.name + ,'physical read total bytes' ,1 + ,'physical reads' ,2 + ,'physical reads direct' ,3 + ,'physical reads direct temporary tablespace' ,4 + ,'physical reads direct (lob)' ,5 + ,'redo size' ,6 + ,'redo size for direct writes' ,7 + ,'CPU used by this session' ,8 + ,'CPU used when call started' ,9 + ,'session logical reads' ,10 + ,'user calls' ,11 + ,'table fetch by rowid' ,12 + ,'table fetch continued row' ,13 + , 99 + ) sr_no + , DECODE(sn.name + ,'physical reads' ,RPAD('Physical Read Requests' ,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ,'redo size' ,RPAD('Redo Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' + ,'redo size for direct writes' ,RPAD('Redo Size (For Direct Reads)' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' + ,'physical read total bytes' ,RPAD('Physical Read Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' + ,'CPU used when call started' ,RPAD('CPU used when call started',35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/100/&&TIME_DIVIDER),'&&TIME_FORMAT')) || ' &&TIME_HEADING' + ,'CPU used by this session' ,RPAD('CPU used by this session' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/100/&&TIME_DIVIDER),'&&TIME_FORMAT')) || ' &&TIME_HEADING' + ,'session logical reads' ,RPAD('Logical Reads' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND((ss.value*p.value)/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' + , RPAD(sn.name,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ) stat + FROM gv$sesstat ss + , v$statname sn + , v$system_parameter p + WHERE ss.statistic# = sn.statistic# + AND sn.name IN + ( + 'physical reads' + ,'redo size' + ,'redo size for direct writes' + ,'physical read total bytes' + ,'physical reads direct' + ,'physical reads direct temporary tablespace' + ,'physical reads direct (lob)' + ,'user calls' + ,'CPU used by this session' + ,'CPU used when call started' + ,'session logical reads' + ,'table fetch by rowid' + ,'table fetch continued row' + ) + AND p.name = 'db_block_size' + AND ss.inst_id = :INST_ID + AND ss.sid = :SID + ORDER BY sr_no +) +, stat2 as +( + SELECT DECODE(sn.name + ,'physical write total bytes' ,1 + ,'physical writes' ,2 + ,'physical writes direct' ,3 + ,'physical writes direct temporary tablespace',4 + ,'physical writes direct (lob)' ,5 + ,'temp space allocated (bytes)' ,6 + ,'session pga memory' ,7 + ,'session pga memory max' ,8 + ,'OS User time used' ,9 + ,'OS System time used' ,10 + ,'bytes sent via SQL*Net to client' ,11 + ,'bytes received via SQL*Net from client' ,12 + , 99 + ) sr_no + , DECODE(sn.name + ,'physical reads' ,RPAD('Physical Read Requests' ,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ,'physical writes' ,RPAD('Physical Write Requests' ,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ,'physical read total bytes' ,RPAD('Physical Read Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'physical write total bytes' ,RPAD('Physical Write Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'temp space allocated (bytes)' ,RPAD('Temp Space Allocated' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'session pga memory' ,RPAD('PGA Memory Used (HostRAM)' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'session pga memory max' ,RPAD('PGA Memory Max (HostRAM)' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'bytes sent via SQL*Net to client' ,RPAD('Data Sent to Client' ,35)|| ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'bytes received via SQL*Net from client' ,RPAD('Data received from Client' ,35)|| ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + , RPAD(sn.name,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ) stat + FROM gv$sesstat ss + , v$statname sn + WHERE ss.statistic# = sn.statistic# + AND sn.name IN + ( + 'physical writes' + ,'physical write total bytes' + ,'physical writes direct' + ,'physical writes direct temporary tablespace' + ,'physical writes direct (lob)' + ,'session pga memory' + ,'session pga memory max' + ,'bytes sent via SQL*Net to client' + ,'bytes received via SQL*Net from client' + ,'OS User time used' + ,'OS System time used' + ,'temp space allocated (bytes)' + ) + AND ss.inst_id = :INST_ID + AND ss.sid = :SID + ORDER BY sr_no +) +SELECT stat1.stat, stat2.stat + FROM stat1 + FULL OUTER JOIN stat2 ON stat1.sr_no = stat2.sr_no +ORDER BY stat1.sr_no +; + + +PROMPT +PROMPT ######### Session Statistics (Exadata specific) ########### + +COLUMN stat HEADING "Statistic" FORMAT a150 + +WITH stat1 AS +( + SELECT DECODE(sn.name + ,'cell physical IO interconnect bytes' ,1 + ,'cell physical IO interconnect bytes returned by smart scan' ,2 + ,'physical read total bytes optimized' ,3 + ,'cell physical IO bytes eligible for predicate offload' ,4 + ,'cell physical IO bytes saved by storage index' ,5 + ,'cell physical IO bytes eligible for predicate offload' ,6 + ,'cell IO uncompressed bytes' ,7 + ,'cell overwrites in flash cache' ,8 + ,'cell partial writes in flash cache' ,9 + ,'cell writes to flash cache' ,10 + ,'cell num bytes in passthru during predicate offload' ,11 + , 99 + ) sr_no + , DECODE(sn.name + ,'cell physical IO interconnect bytes' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell physical IO interconnect bytes returned by smart scan' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'physical read total bytes optimized' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell physical IO bytes eligible for predicate offload' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell physical IO bytes saved by storage index' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell physical IO bytes eligible for predicate offload' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell IO uncompressed bytes' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + , RPAD(sn.name,60) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ) stat + FROM gv$sesstat ss + , v$statname sn + WHERE ss.statistic# = sn.statistic# + AND sn.name IN + ( + 'cell physical IO interconnect bytes' + ,'cell physical IO interconnect bytes returned by smart scan' + ,'physical read total bytes optimized' + ,'cell physical IO bytes eligible for predicate offload' + ,'cell physical IO bytes saved by storage index' + ,'cell physical IO bytes eligible for predicate offload' + ,'cell IO uncompressed bytes' + ,'cell overwrites in flash cache' + ,'cell partial writes in flash cache' + ,'cell writes to flash cache' + ,'cell num bytes in passthru during predicate offload' + ) + AND ss.inst_id = :INST_ID + AND ss.sid = :SID + ORDER BY sr_no +) +SELECT stat1.stat + FROM stat1 +ORDER BY stat1.sr_no +; + +set heading on + + +PROMPT +PROMPT ################# Session Transactions #################### + + +COLUMN xid HEADING "XID" FORMAT a16 +COLUMN transaction_status HEADING "Tran|Status" FORMAT a8 +COLUMN transaction_start_date HEADING "Tran|StartDate" FORMAT a18 +COLUMN tran_duration HEADING "Tran|Duration" FORMAT a15 +COLUMN space HEADING "Space|Tran" FORMAT a5 +COLUMN recursive HEADING "Recu|rsive|Tran" FORMAT a5 +COLUMN noundo HEADING "No|Undo|Tran" FORMAT a4 +COLUMN ptx HEADING "Par'l|Tran" FORMAT a5 +COLUMN used_undo HEADING "Undo|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN log_io HEADING "Logical|IO" FORMAT 999,999,999 +COLUMN phy_io HEADING "Physical|IO" FORMAT 999,999,999 +COLUMN cr_get HEADING "Consistent|Gets" FORMAT 999,999,999 +COLUMN name HEADING "Tran Name" FORMAT a15 WRAP + + +set heading off + +SELECT 'Transaction Name : ' || TRIM(t.name) || chr(10) + || 'XID : ' || TRIM(t.xid) || chr(10) + || 'Parent XID : ' || TRIM(t.ptx_xid) || chr(10) + || 'Tran Status : ' || TRIM(t.status) || chr(10) + || 'Tran Start Time : ' || TO_CHAR(t.start_date,'DD-MON-YY HH24:MI:SS') || chr(10) + || 'Tran Duration : ' || FLOOR(sysdate - t.start_date) || 'd ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) , 1) * 24 ) ,2) || 'h ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 , 1) * 60 ) ,2) || 'm ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 * 60 , 1) * 60 ) ,2) || 's ' || chr(10) + || 'Parallel Tran : ' || TRIM(t.ptx) || chr(10) + || 'Space Tran : ' || TRIM(t.space) || chr(10) + || 'Recursive Tran : ' || TRIM(t.recursive) || chr(10) + || 'No UNDO Tran : ' || TRIM(t.noundo) || chr(10) + || 'Undo : ' || TRIM(TO_CHAR(ROUND((t.used_ublk * p.value)/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' || chr(10) + || 'Logical IO : ' || TRIM(TO_CHAR(t.log_io,'999,999,999')) || chr(10) + || 'Physical IO : ' || TRIM(TO_CHAR(t.phy_io,'999,999,999')) || chr(10) + || 'Consistent Gets : ' || TRIM(TO_CHAR(t.cr_get,'999,999,999')) || chr(10) +FROM gv$transaction t + INNER JOIN gv$session s ON t.inst_id = s.inst_id AND t.ses_addr = s.saddr + INNER JOIN v$parameter p ON p.name = 'db_block_size' +WHERE s.inst_id = :INST_ID + AND s.sid = :SID +ORDER BY t.start_date +; + +set heading on + +PROMPT +PROMPT ######### Locked Objects ########################## + +COLUMN object_name HEADING "ObjectName" FORMAT a40 +COLUMN object_type HEADING "ObjectType" FORMAT a10 TRUNCATED +COLUMN locked_mode HEADING "LockedMode" FORMAT a10 + +SELECT o.owner || '.' || o.object_name object_name + , o.object_type + , DECODE(l.locked_mode, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(l.locked_mode)) locked_mode + FROM gv$locked_object l + JOIN dba_objects o ON o.object_id = l.object_id + JOIN gv$session s ON s.inst_id = l.inst_id AND s.sid = l.session_id +WHERE s.sid = :SID + AND s.inst_id = :INST_ID +ORDER BY object_name +; + + + + +PROMPT +PROMPT ######### Session Lock Information ################# + +COLUMN Block HEADING "Block" FORMAT a10 +COLUMN blocking_instance HEADING "Blocking|I#" FORMAT 999999999 +COLUMN blocking_instance HEADING "Blocking|I#" FORMAT 999999999 +COLUMN blocking_session_status HEADING "Blocking|SID Status" FORMAT a10 +COLUMN final_blocking_instance HEADING "Final|Blocking|I#" FORMAT 999999999 +COLUMN final_blocking_session HEADING "Final|Blocking|SID" FORMAT 999999999 +COLUMN final_blocking_session_status HEADING "Final|Blocking|SID Status" FORMAT a10 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN username HEADING "DBUser" FORMAT a15 +COLUMN osuser HEADING "OSUser" FORMAT a15 +COLUMN status HEADING "Status" FORMAT a10 +COLUMN state HEADING "State" FORMAT a10 +COLUMN logon_time HEADING "LogonTime" FORMAT a18 +COLUMN service_name HEADING "ServiceName" FORMAT a20 + + + select 'Blocked By' Block + , s.blocking_instance + , s.blocking_session + , s.blocking_session_status + , s.final_blocking_instance + , s.final_blocking_session + , s.final_blocking_session_status + FROM gv$session s + where s.sid = :SID + AND s.inst_id = :INST_ID + and s.blocking_session is NOT NULL + order by 1; + + +select 'Blocking' Block + , s.inst_id + , s.SID + --, s.SERIAL# + , s.username + , s.osuser + , s.status + , s.state + , CASE + WHEN s.status = 'ACTIVE' THEN s.last_call_et + ELSE NULL + END last_call_et + , TO_CHAR(s.LOGON_TIME,'DD-Mon-YY HH24:MI:SS') logon_time + , s.service_name + , s.sql_id +FROM gv$session s +where (s.blocking_session = :SID + AND s.blocking_instance = :INST_ID) + OR (s.final_blocking_session = :SID + AND s.final_blocking_instance = :INST_ID) +; + + +PROMPT +PROMPT ######### Session Events (Top &&TOP_EVENT_COUNT) ### + +COLUMN wait_class HEAD "WaitClass" FORMAT a20 TRUNCATE +COLUMN event HEAD "EventName" FORMAT a40 +COLUMN total_waits HEAD "TotalWaits" FORMAT 9,999,999 +COLUMN total_timeouts HEAD "TotalTimeOuts" FORMAT 9,999,999 +COLUMN time_waited HEAD "TimeWaited (s)" FORMAT 9,999,999 +COLUMN average_wait HEAD "AvgWait (ms)" FORMAT 9,999,999 +COLUMN max_wait HEAD "MaxWait (s)" FORMAT 9,999,999 + +select * from +( +SELECT e.sid + , e.inst_id + , e.wait_class + , e.event + , e.total_waits + , e.total_timeouts + , e.time_waited / 100 time_waited + , e.average_wait * 10 average_wait + , e.max_wait / 100 max_wait +FROM gv$session_event e +WHERE e.sid = :SID +AND e.inst_id = :INST_ID +order by e.time_waited desc, e.total_waits desc +) +where rownum <= &&TOP_EVENT_COUNT +/ + + +PROMPT +PROMPT ######### Session Wait History ##################### + +COLUMN seq# FORMAT 999 +COLUMN state FORMAT a10 +COLUMN event HEADING "EventName" FORMAT a40 +COLUMN wait_time HEADING "Wait(ms)" FORMAT 99,999 +COLUMN TIME_SINCE_LAST_WAIT HEADING "TimeSince|LastWait|(ms)" FORMAT 999,999 +COLUMN p1 FORMAT 9999999999 +COLUMN p2 FORMAT 9999999999 +COLUMN p3 FORMAT 9999999999 +COLUMN p1text FORMAT a20 +COLUMN p2text FORMAT a20 +COLUMN p3text FORMAT a20 + +SELECT w.sid + , w.inst_id + , w.seq# + , w.event + , w.wait_time * 10 wait_time + , w.TIME_SINCE_LAST_WAIT_MICRO/1000 TIME_SINCE_LAST_WAIT + , w.p1 + , w.p1text + , w.p2 + , w.p2text + , w.p3 + , w.p3text +FROM gv$session_wait_history w +WHERE w.sid = :SID +AND w.inst_id = :INST_ID +ORDER BY seq# +/ + + +PROMPT +PROMPT ######### Last 10 SQL Statements ################## + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a19 +COLUMN sql_exec_end HEADING "MaxSampleTime" FORMAT a19 +COLUMN duration FORMAT a15 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a15 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999 +COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999 +COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999 +COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 99.00 +COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 999.00 + +-- Get the SQL Statements from ASH +SELECT * FROM +( +SELECT --ash.sql_exec_id, + --TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end + , REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'+00000000','+') duration + , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , max(trunc(ash.px_flags / 2097152)) current_dop + , ash.force_matching_signature + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id + , ROUND(SUM(ash.delta_read_io_bytes)/power(1024,3)) phyread + , ROUND(SUM(ash.delta_write_io_bytes)/power(1024,3)) phywrite + , ROUND(SUM(ash.delta_interconnect_io_bytes)/power(1024,3)) interconnect_io + , ROUND(MAX(ash.pga_allocated)/power(1024,3),2) pga_allocated + , ROUND(MAX(ash.temp_space_allocated)/power(1024,3),2) temp_space_allocated + FROM gv$session s + JOIN gv$active_session_history ash + ON s.inst_id = NVL(ash.qc_instance_id,ash.inst_id) + AND s.sid = NVL(ash.qc_session_id,ash.session_id) + AND s.serial# = NVL(ash.qc_session_serial#,ash.session_serial#) + LEFT OUTER JOIN gv$active_session_history ash_parent + ON ash_parent.inst_id = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + WHERE s.inst_id = :INST_ID + AND s.sid = :SID + --AND ash.sql_exec_id IS NOT NULL +GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.FORCE_MATCHING_SIGNATURE + , ash.sql_opname + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) +ORDER BY + -- max(ash.sample_time) asc + --, + NVL(ash.sql_exec_start,MIN(ash.sample_time)) DESC + , max(ash.sample_time) DESC +) +WHERE ROWNUM <= 10 +ORDER BY sql_exec_end +; + +PROMPT +PROMPT ######### Kill/Disconnect Command ################## + +COLUMN command HEADING "Disconnect Command" FORMAT a60 +COLUMN command2 HEADING "Kill Command" FORMAT a60 + +BEGIN + FOR i IN (select 'alter system disconnect session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command + , 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command2 + from gv$session s + , gv$process p + where s.inst_id = p.inst_id (+) + AND s.PADDR = p.ADDR (+) + AND s.sid = :SID + AND s.inst_id = :INST_ID) + LOOP + DBMS_OUTPUT.PUT_LINE( i.command || chr(10) + || i.command2 ); + END LOOP; +END; +/ + diff --git a/star/sql_plan_baselines.sql b/star/sql_plan_baselines.sql new file mode 100644 index 0000000..9a388c8 --- /dev/null +++ b/star/sql_plan_baselines.sql @@ -0,0 +1,52 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display all SQL PLAN Baselines +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Jun-12 Vishal Gupta First created +* +*/ + +COLUMN sql_handle HEADING "SQL Handle" FORMAT a20 +COLUMN enabled HEADING "Ena|bled" FORMAT a4 +COLUMN accepted HEADING "Accep|ted" FORMAT a5 +COLUMN fixed HEADING "Fixed" FORMAT a5 +COLUMN reproduced HEADING "Repro|duced" FORMAT a5 +COLUMN autopurge HEADING "Auto|Purge" FORMAT a5 +COLUMN optimizer_cost HEADING "Optimizer|Cost" FORMAT 99999999 +COLUMN creator HEADING "Creator" FORMAT a12 +COLUMN created HEADING "Created" FORMAT a15 +COLUMN last_modified HEADING "LastModified" FORMAT a15 +COLUMN last_executed HEADING "LastExecuted" FORMAT a15 +COLUMN last_verified HEADING "LastVerified" FORMAT a15 +COLUMN force_matching HEADING "Force|Match" FORMAT a5 +COLUMN signature HEADING "Signature" FORMAT 999999999999999999999 +COLUMN description HEADING "Description" FORMAT a50 + +BREAK ON name ON CATEGORY ON created ON last_modified ON type ON status ON force_matching ON signature ON description + +SELECT spb.sql_handle + , spb.plan_name + , spb.origin + , spb.enabled + , spb.accepted + , spb.fixed + , spb.reproduced + , spb.autopurge + , spb.optimizer_cost + , spb.creator + , to_char(spb.created,'DD-MON-YY HH24:MI') created + , to_char(spb.last_modified,'DD-MON-YY HH24:MI') last_modified + , to_char(spb.last_executed,'DD-MON-YY HH24:MI') last_executed + , to_char(spb.last_verified,'DD-MON-YY HH24:MI') last_verified + , spb.description + FROM dba_sql_plan_baselines spb +ORDER BY spb.last_modified DESC +; + diff --git a/star/sql_profile.sql b/star/sql_profile.sql new file mode 100644 index 0000000..bea8b0c --- /dev/null +++ b/star/sql_profile.sql @@ -0,0 +1,47 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display all SQL Profiles +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 13-Jan-14 Vishal Gupta Add additional columns +* 16-May-12 Vishal Gupta Created +*/ + +COLUMN name HEADING "Name" FORMAT a30 +COLUMN category HEADING "Category" FORMAT a15 +COLUMN creator HEADING "Creator" FORMAT a15 +COLUMN created HEADING "Created" FORMAT a18 +COLUMN last_modified HEADING "LastModified" FORMAT a18 +COLUMN last_executed HEADING "LastExecuted" FORMAT a18 +COLUMN force_matching HEADING "Force|Match" FORMAT a5 +COLUMN signature HEADING "Signature" FORMAT 999999999999999999999 +COLUMN description HEADING "Description" FORMAT a50 + +BREAK ON name ON CATEGORY ON created ON last_modified ON type ON status ON force_matching ON signature ON description + +SELECT /*+ ORDERED */ + sp.name + , sp.category + , ad.creator + , to_char(sp.created,'DD-MON-YY HH24:MI:SS') created + , to_char(sp.last_modified,'DD-MON-YY HH24:MI:SS') last_modified + -- Last executed is display NULL for all the rows + -- , to_char(so.last_executed,'DD-MON-YY HH24:MI:SS') last_executed + , sp.type + , sp.status + , sp.force_matching + , sp.signature + , sp.description + FROM dba_sql_profiles sp + JOIN sys.sqlobj$ so ON so.signature = sp.signature AND so.category = sp.category AND so.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sqlobj$auxdata ad ON so.signature = ad.signature AND so.category = ad.category AND ad.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + WHERE 1=1 +ORDER BY sp.last_modified DESC +; + diff --git a/star/sql_profile_detail.sql b/star/sql_profile_detail.sql new file mode 100644 index 0000000..27d2407 --- /dev/null +++ b/star/sql_profile_detail.sql @@ -0,0 +1,55 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display all SQL Profiles +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-May-12 Vishal Gupta Created +*/ + +COLUMN column1 FORMAT a120 + +UNDEFINE sql_profile_name +DEFINE sql_profile_name="&&1" + + +DEFINE rpad_length=15 + +PROMPT ***************************************************************** +PROMPT * Profile Details +PROMPT ***************************************************************** + +set heading off +SELECT /*+ ORDERED */ + RPAD('Name',&&rpad_length) || ' : ' || so.name || chr(10) || + RPAD('Description',&&rpad_length) || ' : ' || sp.description || chr(10) || + RPAD('Version',&&rpad_length) || ' : ' || ad.version || chr(10) || + RPAD('Category',&&rpad_length) || ' : ' || sp.category || chr(10) || + RPAD('Force Matching',&&rpad_length)|| ' : ' || sp.force_matching || chr(10) || + RPAD('Type',&&rpad_length) || ' : ' || sp.type || chr(10) || + RPAD('Status',&&rpad_length) || ' : ' || sp.status || chr(10) || + RPAD('Signature',&&rpad_length) || ' : ' || so.signature || chr(10) || + RPAD('Creator',&&rpad_length) || ' : ' || ad.creator || chr(10) || + RPAD('Creation Time',&&rpad_length) || ' : ' || to_char(sp.created,'DD-MON-YY HH24:MI:SS') || chr(10) || + RPAD('Last Modified',&&rpad_length) || ' : ' || to_char(sp.last_modified,'DD-MON-YY HH24:MI:SS') || chr(10) || + RPAD('Last Executed',&&rpad_length) || ' : ' || to_char(so.last_executed,'DD-MON-YY HH24:MI:SS') || chr(10) || + RPAD('Last Verified',&&rpad_length) || ' : ' || to_char(ad.last_verified,'DD-MON-YY HH24:MI:SS') || chr(10) || + RPAD('SQL Text',&&rpad_length) || ' : ' || chr(10) || + sp.sql_text || chr(10) || + ' ' column1 + FROM dba_sql_profiles sp + JOIN sys.sqlobj$ so ON so.signature = sp.signature AND so.category = sp.category AND so.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sqlobj$auxdata ad ON so.signature = ad.signature AND so.category = ad.category AND ad.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sql$text st ON so.signature = st.signature + JOIN sys.sql$ sq ON so.signature = sq.signature +WHERE 1=1 + AND upper(sp.name) = upper('&&sql_profile_name') +ORDER BY sp.last_modified DESC +; + +set heading on diff --git a/star/sql_profile_hints.sql b/star/sql_profile_hints.sql new file mode 100644 index 0000000..f6a3146 --- /dev/null +++ b/star/sql_profile_hints.sql @@ -0,0 +1,35 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Profile hints +* Parameters : 1 - SQL Profile Name +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-Mar-15 Vishal Gupta Created +* +*/ + + +UNDEFINE SQLPROFILENAME +DEFINE SQLPROFILENAME="&&1" + +COLUMN outline_hints HEADING "SQL Profile Hints" FORMAT a150 + + +SELECT extractvalue(value(d), '/hint') AS outline_hints +FROM xmltable('/outline_data/hint' passing + (SELECT xmltype(sd.comp_data) as xmlval + FROM dba_sql_profiles sp + JOIN sys.sqlobj$ so ON so.signature = sp.signature AND so.category = sp.category AND so.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sqlobj$data sd ON sd.signature = so.signature AND sd.category = so.category AND sd.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + --JOIN sys.sqlobj$auxdata ad ON ad.signature = so.signature AND ad.category = so.category AND ad.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + WHERE 1=1 + AND sp.name = '&&SQLPROFILENAME' + ) + ) d +; + diff --git a/star/sqlid.sql b/star/sqlid.sql new file mode 100644 index 0000000..1b47611 --- /dev/null +++ b/star/sqlid.sql @@ -0,0 +1,76 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sql_sql_text head SQL_TEXT format a150 word_wrap +col sql_child_number head CH# for 9999 + + +col cpu_sec_exec FOR 999999.999 +col ela_sec_exec FOR 999999.999 +col lios_per_exec FOR 9999999999 +col pios_per_exec FOR 9999999999 + +prompt Show SQL text, child cursors and execution stats for SQLID &1 child &2 + +select + hash_value, + plan_hash_value, + child_number sql_child_number, + sql_text sql_sql_text +from + v$sql +where + sql_id = ('&1') +and child_number like '&2' +order by + sql_id, + hash_value, + child_number +/ + +select + child_number sql_child_number, + plan_hash_value plan_hash, + parse_calls parses, + loads h_parses, + executions, + fetches, + rows_processed, + rows_processed/nullif(fetches,0) rows_per_fetch, + ROUND(cpu_time/NULLIF(executions,0)/1000000,3) cpu_sec_exec, + ROUND(elapsed_time/NULLIF(executions,0)/1000000,3) ela_sec_exec, + ROUND(buffer_gets/NULLIF(executions,0),3) lios_per_exec, + ROUND(disk_reads/NULLIF(executions,0),3) pios_per_exec, + ROUND(cpu_time/1000000,3) total_cpu_sec, + ROUND(elapsed_time/1000000,3) total_ela_sec, + user_io_wait_time/1000000 total_iowait_sec, + buffer_gets total_LIOS, + disk_reads total_pios, + sorts +-- address, +-- sharable_mem, +-- persistent_mem, +-- runtime_mem, +-- , PHYSICAL_READ_REQUESTS +-- , PHYSICAL_READ_BYTES +-- , PHYSICAL_WRITE_REQUESTS +-- , PHYSICAL_WRITE_BYTES +-- , IO_CELL_OFFLOAD_ELIGIBLE_BYTES +-- , IO_INTERCONNECT_BYTES +-- , IO_CELL_UNCOMPRESSED_BYTES +-- , IO_CELL_OFFLOAD_RETURNED_BYTES + , users_executing + , last_active_time + , address parent_handle + , child_address object_handle +from + v$sql +where + sql_id = ('&1') +and child_number like '&2' +order by + sql_id, + hash_value, + child_number +/ + diff --git a/star/sqlid_sign.sql b/star/sqlid_sign.sql new file mode 100644 index 0000000..e66ea99 --- /dev/null +++ b/star/sqlid_sign.sql @@ -0,0 +1,7 @@ +col FORCE_MATCHING_SIGNATURE for 99999999999999999999 + +select FORCE_MATCHING_SIGNATURE from gv$sql where sql_id='&&1' +union all +select FORCE_MATCHING_SIGNATURE from DBA_HIST_SQLSTAT where sql_id='&&1' +fetch first 1 rows only; + diff --git a/star/sqlidtabstat.sql b/star/sqlidtabstat.sql new file mode 100644 index 0000000..2ef74a4 --- /dev/null +++ b/star/sqlidtabstat.sql @@ -0,0 +1,49 @@ +-- https://blogs.oracle.com/optimizer/post/check-sql-stale-statistics + +set pagesize 100 +set linesize 150 +set trims off +set tab off +set verify off +column table_name format a50 +column index_name format a50 +column object_type format a40 +column owner format a40 + +with plan_tables as ( +select distinct object_name,object_owner, object_type +from gv$sql_plan +where object_type like 'TABLE%' +and sql_id = '&1') +select t.object_owner owner, + t.object_name table_name, + t.object_type object_type, + decode(stale_stats,'NO','OK',NULL, 'NO STATS!', 'STALE!') staleness +from dba_tab_statistics s, + plan_tables t +where s.table_name = t.object_name +and s.owner = t.object_owner +and s.partition_name is null +and s.subpartition_name is null +order by t.object_owner, t.object_name; + +PROMPT ========== +PROMPT Indexes +PROMPT ========== +with plan_indexes as ( +select distinct object_name,object_owner, object_type +from gv$sql_plan +where object_type like 'INDEX%' +and sql_id = '&1') +select i.object_owner owner, + i.object_name index_name, + i.object_type object_type, + decode(stale_stats,'NO','OK',NULL, 'NO STATS!', 'STALE!') staleness +from dba_ind_statistics s, + plan_indexes i +where s.index_name = i.object_name +and s.owner = i.object_owner +and s.partition_name is null +and s.subpartition_name is null +order by i.object_owner, i.object_name; + diff --git a/star/sqltt_sqlid.sql b/star/sqltt_sqlid.sql new file mode 100644 index 0000000..868ed6d --- /dev/null +++ b/star/sqltt_sqlid.sql @@ -0,0 +1,38 @@ +set serveroutput ON + +variable max_secs NUMBER + +begin + :max_secs:=to_number(&2)*60; +end; +/ + +variable c_tt refcursor + +DECLARE + r CLOB; + t varchar2(30) := 'SQLTT_&1'; +BEGIN + BEGIN + dbms_sqltune.drop_tuning_task(t); + EXCEPTION + WHEN OTHERS THEN + NULL; + END; + + r := dbms_sqltune.create_tuning_task(task_name => t, sql_id => '&1', time_limit => :max_secs); + dbms_sqltune.execute_tuning_task(t); + + open :c_tt for select dbms_sqltune.report_tuning_task(t) recommendations from dual; + + if :c_tt is NULL then + begin + open :c_tt for select 'N/A' recommendations from dual; + end; + end if; + +END; +/ + +print :c_tt + diff --git a/star/stats_history.sql b/star/stats_history.sql new file mode 100644 index 0000000..16b68a9 --- /dev/null +++ b/star/stats_history.sql @@ -0,0 +1,273 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display table statistics history +* Parameters : 1 - OWNER (% - wildchar, \ - escape char) +* 2 - Object Name (% - wildchar, \ - escape char) +* 3 - Partition Name (% - wildchar, \ - escape char) +* 5 - Object Type (% - wildchar, \ - escape char) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Jul-15 Vishal Gupta Removed savetime column from output +* 19-JUN-14 Vishal Gupta Updated AvgRowLength heading +* 28-FEB-14 Vishal Gupta Changed the ordering +* 02-Jul-12 Vishal Gupta Added partition, sub-partition and objecttype as input +* 30-Apr-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE subobject_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE subobject_name="&&3" +DEFINE object_type="&&4" + + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" + , DECODE('&&subobject_name','','%','&&subobject_name') "_subobject_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" +FROM DUAL +; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * S T A T I S T I C S H I S T O R Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - Object Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - SubObject Name = '&&subobject_name' +PROMPT * - Object Type = '&&object_type' +PROMPT *********************************************************************** + +COLUMN object_name HEADING "ObjectName" FORMAT a60 +COLUMN subobject_name HEADING "SubObjectName" FORMAT a30 +COLUMN object_type HEADING "Object|Type" FORMAT a18 +COLUMN object_type_sort_order NOPRINT +COLUMN savtime HEADING "SaveTime" FORMAT a18 +COLUMN ANALYZETIME HEADING "AnalyzeTime" FORMAT a18 +COLUMN samplesize HEADING "SampleSize" FORMAT 999,999,999,999 +COLUMN rowcnt HEADING "RowCount" FORMAT 999,999,999,999 +COLUMN blkcnt HEADING "BlockCount" FORMAT 999,999,999 +COLUMN avgrln HEADING "Avg|Row|Length" FORMAT 999,999 +COLUMN SizeMB HEADING "Size (MB)" FORMAT 9,999,999 + +select object_name + , object_type + , object_type_sort_order + --, to_char(savtime,'DD-MON-YY HH24:MI:SS') savtime + , to_char(ANALYZETIME,'DD-MON-YY HH24:MI:SS') ANALYZETIME + , SizeMB + , rowcnt + , avgrln + --, blkcnt + , samplesize +FROM +( +select o.owner || '.' || o.object_name + || NVL2(o.subobject_name,':' || o.subobject_name, '') + object_name + , o.object_type + , DECODE (o.object_type + , 'TABLE' ,1 + , 'TABLE PARTITION' ,2 + , 'TABLE SUBPARTITION' ,3 + , 'INDEX' ,4 + , 'INDEX PARTITION' ,5 + , 'INDEX SUBPARTITION' ,6 + ,9 + ) object_type_sort_order + , h.savtime + , h.ANALYZETIME + , h.samplesize + , h.rowcnt + , h.avgrln + , (h.blkcnt * p.value) /1024/1024 SizeMB + , h.blkcnt + FROM sys.wri$_optstat_tab_history h + , dba_objects o + , v$system_parameter p +WHERE h.obj# = o.object_id + AND p.name = 'db_block_size' + AND o.owner LIKE upper('&&owner') ESCAPE '\' + AND o.object_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(o.subobject_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(DECODE(o.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,o.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +UNION +select s.owner || '.' || s.table_name + || NVL2(s.partition_name,':' || s.partition_name, '') + object_name + , DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type) object_type + , DECODE (s.object_type + , 'TABLE' ,1 + , 'TABLE PARTITION' ,2 + , 'TABLE SUBPARTITION' ,3 + , 'INDEX' ,4 + , 'INDEX PARTITION' ,5 + , 'INDEX SUBPARTITION' ,6 + ,9 + ) object_type_sort_order + , NULL savtime + , last_analyzed ANALYZETIME + , sample_size + , num_rows + , avg_row_len + , (s.blocks * p.value) /1024/1024 SizeMB + , s.blocks + FROM dba_tab_statistics s + , v$system_parameter p +WHERE p.name = 'db_block_size' + AND s.owner LIKE upper('&&owner') ESCAPE '\' + AND s.table_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(s.partition_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +) a +ORDER BY a.object_name + , a.object_type_sort_order + , a.savtime NULLS LAST + --, a.ANALYZETIME +/ + + + +COLUMN table_name HEADING "IndexName" FORMAT a40 +COLUMN object_name HEADING "IndexName" FORMAT a50 +COLUMN distinct_keys HEADING "DistinctKeys" FORMAT 99,999,999,999 +COLUMN blevel HEADING "BLevel" FORMAT 99999 +COLUMN leaf_blocks HEADING "Leaf|Blocks" FORMAT 99,999,999 +COLUMN clustering_factor HEADING "Clustering|Factor" FORMAT 99,999,999,999 +COLUMN avg_leaf_blocks_per_key HEADING "Avg|LeafBlocks|PerKey" FORMAT 999,999,999 +COLUMN avg_data_blocks_per_key HEADING "Avg|DataBlocks|PerKey" FORMAT 999,999,999 + +select object_name + , object_type + , object_type_sort_order + --, to_char(savtime,'DD-MON-YY HH24:MI:SS') savtime + , to_char(ANALYZETIME,'DD-MON-YY HH24:MI:SS') ANALYZETIME + , SizeMB + , rowcnt + , samplesize + , distinct_keys + , blevel + , clustering_factor + , leaf_blocks + , avg_leaf_blocks_per_key + , avg_data_blocks_per_key +FROM +( +select o.owner || '.' || o.object_name + || NVL2(o.subobject_name,':' || o.subobject_name, '') + object_name + , o.object_type + , DECODE (o.object_type + , 'TABLE' ,1 + , 'TABLE PARTITION' ,2 + , 'TABLE SUBPARTITION' ,3 + , 'INDEX' ,4 + , 'INDEX PARTITION' ,5 + , 'INDEX SUBPARTITION' ,6 + ,9 + ) object_type_sort_order + , h.savtime + , h.ANALYZETIME + , (h.leafcnt * p.value) /1024/1024 SizeMB + , h.rowcnt + , h.samplesize + , h.distkey distinct_keys + , h.blevel + , h.clufac clustering_factor + , h.leafcnt leaf_blocks + , h.lblkkey avg_leaf_blocks_per_key + , h.dblkkey avg_data_blocks_per_key + --, h.avgrln + FROM sys.wri$_optstat_ind_history h + , dba_objects o + , v$system_parameter p +WHERE h.obj# = o.object_id + AND p.name = 'db_block_size' + AND o.owner LIKE upper('&&owner') ESCAPE '\' + AND o.object_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(o.subobject_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(o.object_type,'%') LIKE upper('&&object_type') ESCAPE '\' +UNION ALL +select s.owner || '.' || s.index_name + || NVL2(s.partition_name,':' || s.partition_name, '') + object_name + , DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type) object_type + , DECODE (s.object_type + , 'TABLE' ,1 + , 'TABLE PARTITION' ,2 + , 'TABLE SUBPARTITION' ,3 + , 'INDEX' ,4 + , 'INDEX PARTITION' ,5 + , 'INDEX SUBPARTITION' ,6 + ,9 + ) object_type_sort_order + , null savtime + , s.last_analyzed ANALYZETIME + , ROUND((s.leaf_blocks * p.value) /1024/1024 ) SizeMB + , s.num_rows + , s.sample_size + , s.distinct_keys + , s.blevel + , s.clustering_factor + , s.leaf_blocks + , s.avg_leaf_blocks_per_key + , s.avg_data_blocks_per_key + FROM dba_ind_statistics s + , v$system_parameter p +WHERE p.name = 'db_block_size' + AND s.owner LIKE upper('&&owner') ESCAPE '\' + AND s.index_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(s.partition_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','INDEX PARTITION' + ,'SUBPARTITION','INDEX SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +) a +ORDER BY a.object_name + , a.object_type_sort_order + , a.savtime NULLS LAST + --, a.ANALYZETIME +/ + diff --git a/star/tab_details.sql b/star/tab_details.sql new file mode 100644 index 0000000..be695fd --- /dev/null +++ b/star/tab_details.sql @@ -0,0 +1,359 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display Tables details +* Parameters : 1 - Owner (Use % as wild card, \ as ESCAPE) +* 2 - TableName (Use % as wild card, \ as ESCAPE) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Aug-16 Vishal Gupta Added child foreign key constrainst list +* 30-Apr-15 Vishal Gupta Added join to dba_objects to get creation date +* 13-Mar-15 Vishal Gupta Added table's indexes in output +* 24-Apr-13 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name + +DEFINE owner="&&1" +DEFINE table_name="&&2" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT + + +set term off +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END) "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE UPPER('&&table_name') + END "_table_name" +FROM DUAL; +set term on + + +PROMPT ************************************ +PROMPT * T A B L E D E T A I L S +PROMPT ************************************ + +COLUMN col1 FORMAT a60 +COLUMN col2 FORMAT a60 + +set head off +SELECT 'Owner : ' || t.owner + || chr(10) || 'Table Name : ' || t.table_name + || chr(10) || 'Table Comments : ' || c.comments + || chr(10) || 'Tablespace Name : ' || t.tablespace_name + || chr(10) || 'Status : ' || t.status + || chr(10) || 'Temporary : ' || t.temporary + || chr(10) || 'Partitioned : ' || t.partitioned + || chr(10) || 'Compression : ' || t.compression + || chr(10) || 'Compress For : ' || t.compress_for + || chr(10) || 'Segment Created : ' || t.segment_created + || chr(10) || 'Degree : ' || TRIM(t.degree) + || chr(10) || 'IOT Type : ' || t.iot_type + || chr(10) || 'IOT Name : ' || t.iot_name + || chr(10) || 'Logging : ' || t.logging + || chr(10) || 'Backed Up : ' || t.backed_up + || chr(10) || 'Instances : ' || TRIM(t.instances) + || chr(10) || 'Table Lock : ' || t.table_lock + || chr(10) || 'Secondary : ' || t.secondary + || chr(10) || 'Nested : ' || t.nested + || chr(10) || 'Row Movement : ' || t.row_movement + || chr(10) || 'Duration : ' || t.duration + || chr(10) || 'Skip Corrupt : ' || t.skip_corrupt + || chr(10) || 'Monitoring : ' || t.monitoring + || chr(10) || 'Cluster Owner : ' || t.cluster_owner + || chr(10) || 'Cluster Name : ' || t.cluster_name + || chr(10) || 'Dependencies : ' || t.dependencies + || chr(10) || 'Dropped : ' || t.dropped + || chr(10) || 'Read Only : ' || t.read_only + || chr(10) || ' ' + || chr(10) || '[ Cache ] ' + || chr(10) || 'Cache : ' || TRIM(t.cache) + || chr(10) || 'Buffer Pool : ' || t.buffer_pool + || chr(10) || 'Flash Cache : ' || t.flash_cache + || chr(10) || 'Cell Flash Cache : ' || t.cell_flash_cache + || chr(10) || 'Result Cache : ' || t.result_cache + col1 + , + '[ Dates ] ' + || chr(10) || 'Created : ' || TO_CHAR(o.created,'DD-MON-YYYY HH24:MI:SS') + || chr(10) || 'Last DDL : ' || TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') + || chr(10) || 'Last Spec Change : ' || TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') + || chr(10) || ' ' + || chr(10) || '[ Storage ] ' + || chr(10) || 'PCT Free : ' || t.pct_free + || chr(10) || 'PCT Used : ' || t.pct_used + || chr(10) || 'PCT Increase : ' || t.pct_increase + || chr(10) || 'INI Trans : ' || t.ini_trans + || chr(10) || 'Max Trans : ' || t.max_trans + || chr(10) || 'Initial Extent Size : ' || t.initial_extent + || chr(10) || 'Next Extent Size : ' || t.next_extent + || chr(10) || 'Mininum Extents : ' || t.min_extents + || chr(10) || 'Max Extents : ' || t.max_extents + || chr(10) || 'Freelists : ' || t.freelists + || chr(10) || 'Freelists Group : ' || t.freelist_groups + || chr(10) || ' ' + || chr(10) || '[ Statistics ] ' + || chr(10) || 'Last Analyzed : ' || to_char(t.last_analyzed,'DD-MON-YY HH24:MI:SS') + || chr(10) || 'Global Stats : ' || t.global_stats + || chr(10) || 'User Stats : ' || t.user_stats + || chr(10) || 'Sample Size : ' || TRIM(TO_CHAR(t.sample_size,'999,999,999,999,999')) + || chr(10) || 'Num Rows : ' || TRIM(TO_CHAR(t.num_rows,'999,999,999,999,999')) + || chr(10) || 'Table Size : ' || TRIM(TO_CHAR((t.blocks * (select BLOCK_SIZE from dba_tablespaces tbs where tbs.tablespace_name = t.tablespace_name) )/power(1024,2),'999,999,999,999,999' )) || ' MB' + || chr(10) || 'Blocks : ' || t.blocks + || chr(10) || 'Empty Blocks : ' || t.empty_blocks + || chr(10) || 'Average Row Length : ' || t.avg_row_len + || chr(10) || 'Average Space : ' || t.avg_space + || chr(10) || 'Chain Count : ' || t.chain_cnt + || chr(10) || 'Freelist Blocks : ' || t.num_freelist_blocks + || chr(10) || 'Avg Space Freelists Blocks: ' || t.avg_space_freelist_blocks + col2 +FROM dba_tables t + JOIN dba_objects o ON o.owner = t.owner AND o.object_name = t.table_name AND o.object_type = 'TABLE' + LEFT OUTER JOIN dba_tab_comments c ON c.owner = t.owner AND c.table_name = t.table_name +WHERE t.owner = '&&owner' + AND t.table_name = '&&table_name' +; +set head on + + +/* Taken from tab_parts_summary.sql */ + +PROMPT ******************************* +PROMPT * Table's Partitions Details +PROMPT ******************************* + + +COLUMN table_name HEADING "Table Name" FORMAT a40 +COLUMN partitioning_type HEADING "Part|Type" FORMAT a7 +COLUMN partitioning_key_count HEADING "Part|Key|Count" FORMAT 99999 +COLUMN interval HEADING "Interval" FORMAT a30 +COLUMN subpartitioning_type HEADING "SubPart|Type" FORMAT a10 +COLUMN subpartitioning_key_count HEADING "SubPart|Key|Count" FORMAT 99999 +COLUMN def_subpartition_count HEADING "Default|Subpart|Count|PerPart" FORMAT 999 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN partition_count HEADING "Part|Count" FORMAT 999,999 +COLUMN subpartition_count HEADING "SubPart|Count" FORMAT 999,999 +COLUMN total_count HEADING "Total|Count" FORMAT 999,999 + + + +SELECT pt.owner || '.' || pt.table_name table_name + , pt.status + , pt.partitioning_type + , pt.partitioning_key_count + -- for interval RANGE partition, dba_part_tables.partition_count is always 1048575 + -- , so we need to take actual partition count from dba_tab_partitions + , count(distinct p.partition_name) partition_count + , pt.interval + , pt.subpartitioning_type + , pt.subpartitioning_key_count + , pt.def_subpartition_count + , count(s.subpartition_name) subpartition_count + , GREATEST(count(distinct p.partition_name) , count(s.subpartition_name)) total_count + FROM dba_part_tables pt + JOIN dba_tab_partitions p ON p.table_owner = pt.owner AND p.table_name = pt.table_name + LEFT OUTER JOIN dba_tab_subpartitions s ON s.table_owner = pt.owner AND s.table_name = pt.table_name AND p.partition_name = s.partition_name +WHERE 1=1 + AND pt.owner LIKE '&&owner' ESCAPE '\' + AND pt.table_name LIKE '&&table_name' ESCAPE '\' +GROUP BY + pt.owner + , pt.table_name + , pt.partitioning_type + , pt.interval + , pt.subpartitioning_type + , pt.def_subpartition_count + , pt.partitioning_key_count + , pt.subpartitioning_key_count + , pt.status +--ORDER BY total_count desc +ORDER BY pt.owner + , pt.table_name +; + + + + +/* Taken from tab_indexes.sql */ +PROMPT +PROMPT ******************** +PROMPT * Table's Indices +PROMPT ******************** + +COLUMN owner HEADING "Index Owner" FORMAT a20 +COLUMN table_name HEADING "Table Name" FORMAT a40 +COLUMN index_owner HEADING "Index Owner" FORMAT a20 +COLUMN index_name HEADING "Index Name" FORMAT a40 +COLUMN index_type HEADING "Index Type" FORMAT a10 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN visibility HEADING "Visible" FORMAT a10 +COLUMN uniqueness HEADING "Uniqueness" FORMAT a15 +COLUMN Columns HEADING "Index columns" FORMAT a90 + +BREAK ON TABLE_NAME + +SELECT /*+ */ + -- i.table_owner || '.' || i.table_name table_name + --, + i.owner || '.' || i.index_name index_name + , i.uniqueness + , i.index_type + , i.status + , i.visibility +-- , column_name +-- , column_position +-- , CONNECT_BY_ISLEAF +-- , LEVEL + --, SUBSTR(SYS_CONNECT_BY_PATH ( NVL(to_char(ie.column_expression),ic.column_name) || DECODE(ic.descend,'ASC','',' (desc) ') , ' , ' ),4) Columns + , SUBSTR(SYS_CONNECT_BY_PATH ( ic.column_name || DECODE(ic.descend,'ASC','',' (desc) ') , ' , ' ),4) Columns +FROM dba_indexes i + , dba_ind_columns ic + , dba_ind_expressions ie +WHERE i.owner = ic.index_owner + AND i.index_name = ic.index_name + AND i.table_owner = ic.table_owner + AND i.table_name = ic.table_name + AND ic.index_owner = ie.index_owner (+) + AND ic.index_name = ie.index_name (+) + AND ic.table_owner = ie.table_owner (+) + AND ic.table_name = ie.table_name (+) + AND ic.column_position = ie.column_position (+) + AND i.table_owner LIKE upper('&&owner') ESCAPE '\' + AND i.table_name LIKE upper('&&table_name') ESCAPE '\' + AND CONNECT_BY_ISLEAF = 1 + AND LEVEL = ic.column_position +CONNECT BY ic.table_owner = PRIOR ic.table_owner + AND ic.table_name = PRIOR ic.table_name + AND ic.index_owner = PRIOR ic.index_owner + AND ic.index_name = PRIOR ic.index_name + AND ic.column_position - 1 = PRIOR ic.column_position +START WITH ic.table_owner LIKE upper('&&owner') ESCAPE '\' + AND ic.table_name LIKE upper('&&table_name') ESCAPE '\' +ORDER BY ic.table_owner + , ic.table_name + , ic.index_owner + , ic.index_name +; + + +-- Taken from columns.sql +/* +PROMPT +PROMPT ******************** +PROMPT * Table's Columns +PROMPT ******************** + +COLUMN object_name HEADING "ObjectName" FORMAT a45 +COLUMN object_type HEADING "ObjectType" FORMAT a17 +COLUMN column_id HEADING "ColumnId" FORMAT 9999 +COLUMN column_name HEADING "ColumnName" FORMAT a30 +COLUMN nullable HEADING "Null?" FORMAT a8 +COLUMN Type HEADING "ColumnType" FORMAT a20 +COLUMN data_default HEADING "Default|Value" FORMAT a40 +COLUMN comments HEADING "Comments" FORMAT a60 + + +SELECT + --c.owner || '.' || c.table_name object_name, + c.column_id + , c.column_name + , DECODE(c.nullable,'N','NOT NULL','') nullable + , CASE + WHEN c.data_type = 'NUMBER' + THEN c.data_type || NVL2(c.data_precision||c.data_scale, '(' || NVL(c.data_precision,'38') || ',' || NVL(c.data_scale,'127') || ')','') + WHEN c.data_type = 'FLOAT' + THEN c.data_type || NVL2(c.data_precision,'(' || c.data_precision || ')','') + WHEN c.data_type = 'VARCHAR2' OR c.data_type = 'CHAR' + THEN c.data_type || '(' || c.char_length || ' ' || DECODE(c.char_used,'B','BYTE','CHAR') || ')' + WHEN c.data_type = 'NVARCHAR2' OR c.data_type = 'NCHAR' + THEN c.data_type || '(' || c.char_length || ')' + WHEN c.data_type = 'RAW' OR c.data_type = 'UROWID' + THEN c.data_type || '(' || c.data_length || ')' + ELSE c.data_type + END Type + , c.data_default + , cc.comments +FROM dba_tab_columns c + LEFT OUTER JOIN dba_col_comments cc ON cc.owner = c.owner AND cc.table_name = c.table_name AND cc.column_name = c.column_name +WHERE UPPER(c.owner) like UPPER('&&owner') ESCAPE '\' + AND UPPER(c.table_name) like UPPER('&&table_name') ESCAPE '\' + AND c.table_name NOT LIKE 'BIN$%' +ORDER BY c.column_id ; +*/ + + +PROMPT +PROMPT **************************** +PROMPT * Table's Constraints +PROMPT **************************** + +COLUMN constraint_name HEADING "ConstraintName" FORMAT a30 +COLUMN constraint_type HEADING "Type" FORMAT a4 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN delete_rule HEADING "Delete|Rule" FORMAT a9 +COLUMN validated HEADING "Validated" +COLUMN generated HEADING "Generated" +COLUMN last_change HEADING "LastChange" FORMAT a18 +COLUMN search_condition HEADING "SearchCondition" FORMAT a50 + +select * +from + xmltable( '/ROWSET/ROW' + passing dbms_xmlgen.getXMLType(' + SELECT c.constraint_name + , c.constraint_type + , c.status + , c.delete_rule + , c.validated + , c.generated + , TO_CHAR(last_change,''DD-MON-YY HH24:MI:SS'') last_change + , c.search_condition /* <---- Long Column type*/ + FROM dba_constraints c + WHERE UPPER(c.owner) like UPPER(''' || '&&owner' || ''') ESCAPE ''\'' + AND UPPER(c.table_name) like UPPER(''' || '&&table_name' || ''') ESCAPE ''\'' + ') + columns + constraint_name varchar2(30) + , constraint_type varchar2(30) + , status varchar2(30) + , delete_rule varchar2(9) + , validated varchar2(30) + , generated varchar2(30) + , last_change varchar2(30) + , search_condition varchar2(2000) + ) +WHERE 1=1 + AND NOT (constraint_type = 'C' AND search_condition LIKE '%NOT NULL%' ) +; + +PROMPT +PROMPT ******************************************** +PROMPT * Child Foreign Key Constraints +PROMPT ******************************************** + + +SELECT c.owner + , c.constraint_name + , c.table_name + , c.r_constraint_name + , c.delete_rule + FROM dba_constraints c + WHERE (c.r_owner, c.r_constraint_name) IN (SELECT c2.owner, c2.constraint_name + FROM dba_constraints c2 + WHERE UPPER(c2.owner) like UPPER('&&owner') ESCAPE '\' + AND UPPER(c2.table_name) like UPPER('&&table_name') ESCAPE '\' + AND c2.constraint_type in ('P','U') + ) +; + diff --git a/star/tabstat.sql b/star/tabstat.sql new file mode 100644 index 0000000..d5f4bb4 --- /dev/null +++ b/star/tabstat.sql @@ -0,0 +1,46 @@ +/* Statistics details for table partitions/subpartitios + + Usage: @tabstat
    + + vplesnila 2024-01-29: creation +*/ + +col owner for a20 head "Owner" +col table_name for a25 head "Table name" +col last_DML for a20 head "Last DML" +col last_analyzed for a20 head "Last Analyzed" +col STALE_STATS for a7 head "Stale" +col NUM_ROWS head "#Rows" +col INSERTS head "Table|INS" +col UPDATES head "Table|UPD" +col DELETES head "Table|DEL" +col TRUNCATED head "Table|TRUN" + +break on report skip 1 +compute sum of INSERTS on report +compute sum of UPDATES on report +compute sum of DELETES on report + +select + tabstat.OWNER + ,tabstat.TABLE_NAME + ,tabstat.NUM_ROWS + ,tabstat.STALE_STATS + ,tabstat.LAST_ANALYZED + ,tabmod.INSERTS + ,tabmod.UPDATES + ,tabmod.DELETES + ,tabmod.TRUNCATED + ,tabmod.TIMESTAMP last_DML +from + dba_tab_statistics tabstat + ,dba_tab_modifications tabmod +WHERE + tabstat.owner = '&&1' + AND tabstat.table_name = '&&2' + AND tabstat.owner = tabmod.table_owner(+) + AND tabstat.table_name = tabmod.table_name(+) + AND tabstat.partition_name = tabmod.partition_name(+) + AND tabstat.subpartition_name = tabmod.subpartition_name(+) +/ + diff --git a/star/tabstats.sql b/star/tabstats.sql new file mode 100644 index 0000000..08d4a9b --- /dev/null +++ b/star/tabstats.sql @@ -0,0 +1,50 @@ +col owner for a20 head "Owner" +col table_name for a25 head "Table name" +col PARTITION_NAME for a25 head "Partition name" +col SUBPARTITION_NAME for a25 head "Subpartition name" +col last_DML for a20 head "Last DML" +col last_analyzed for a20 head "Last Analyzed" +col STALE_STATS for a7 head "Stale" +col NUM_ROWS head "#Rows" +col INSERTS head "Table|INS" +col UPDATES head "Table|UPD" +col DELETES head "Table|DEL" +col TRUNCATED head "Table|TRUN" + +break on report skip 1 +compute sum of INSERTS on report +compute sum of UPDATES on report +compute sum of DELETES on report + +select + tabstat.OWNER + ,tabstat.TABLE_NAME + ,tabstat.PARTITION_NAME + ,tabstat.SUBPARTITION_NAME + ,tabstat.NUM_ROWS + ,tabstat.STALE_STATS + ,tabstat.LAST_ANALYZED + ,tabmod.INSERTS + ,tabmod.UPDATES + ,tabmod.DELETES + ,tabmod.TRUNCATED + ,tabmod.TIMESTAMP last_DML +from + dba_tab_statistics tabstat + ,dba_tab_modifications tabmod +WHERE + tabstat.owner = '&&1' + AND tabstat.table_name = '&&2' + AND (tabstat.partition_name like '%&&3%' or tabstat.partition_name is NULL) + AND (tabstat.subpartition_name like '%&&4%' or tabstat.subpartition_name is NULL) + AND tabstat.owner = tabmod.table_owner(+) + AND tabstat.table_name = tabmod.table_name(+) + AND tabstat.partition_name = tabmod.partition_name(+) + AND tabstat.subpartition_name = tabmod.subpartition_name(+) +ORDER BY + tabstat.owner asc, + tabstat.table_name asc, + tabstat.partition_position asc, + tabstat.subpartition_position asc +/ + diff --git a/star/tbs.sql b/star/tbs.sql new file mode 100644 index 0000000..4de9abf --- /dev/null +++ b/star/tbs.sql @@ -0,0 +1,182 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage +* Parameters : 1 - tablespace_name (Use % as wildcard, Default value '%') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 14-Jul-15 Vishal Gupta Added tablespace creation_time (Approximated from earliest datafile time) +* 11-Mar-13 Vishal Gupta Fixed temp space calculations +* 02-Apr-12 Vishal Gupta Bug fixes +* 05-Aug-04 Vishal Gupta First Draft +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE tablespace_name +DEFINE tablespace_name="&&1" + +set term off +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT + +SELECT UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="GB" +DEFINE BYTES_DIVIDER="1024/1024/1024" + +DEFINE ROUND_PRECISION=2 +DEFINE STAR=4 --Defines how much %usage is represented by one star on Graph + +set term off +SET FEED OFF +SELECT (100/&&STAR+2) UsageGraphWidth +FROM DUAL; +SET FEED ON +set term on + + +PROMPT ***************************************************************** +PROMPT * T A B L E S P A C E U S A G E R E P O R T +PROMPT * +PROMPT * Input Parameters +PROMPT * - Tablespace Name = '&&TABLESPACE_NAME' +PROMPT ***************************************************************** + + +COLUMN UsageGraphWidth NOPRINT old_value UGWidth +COLUMN tablespace_name FORMAT a23 +COLUMN creation_time HEADING "Creation Time" FORMAT a15 +COLUMN alloc HEADING "Alloc(&&BYTES_HEADING)" FORMAT 9,999,999 ON +COLUMN used HEADING "Used&&BYTES_HEADING)" FORMAT 9,999,999 ON +COLUMN free HEADING "Free|(&&BYTES_HEADING)" FORMAT 999,999 ON +COLUMN pct_Used HEADING "%Used" FORMAT 999 ON +COLUMN pct_Free HEADING "%Free" FORMAT 999 ON +COLUMN MAXSIZE HEADING "MaxSize|(&&BYTES_HEADING)" FORMAT 9,999,999 ON +COLUMN Maxfree HEADING "MaxFree|(&&BYTES_HEADING)" FORMAT 9,999,999 ON +COLUMN Max_pct_Used HEADING "MAX|%Used" FORMAT 999 ON +COLUMN Max_pct_Free HEADING "MAX|%Free" FORMAT 999 ON +COLUMN "Usage Graph" FORMAT a27 +COLUMN "MaxUsage Graph" FORMAT a27 + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF alloc FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF used FORMAT 99,999,999.9 ON REPORT +COMPUTE SUM LABEL 'Total' OF free FORMAT 99,999,999.9 ON REPORT +COMPUTE SUM LABEL 'Total' OF maxsize FORMAT 9,999,999.9 ON REPORT +COMPUTE SUM LABEL 'Total' OF maxfree FORMAT 9,999,999.9 ON REPORT + +SELECT /*+ CHOOSE */ c.tablespace_name + , c.alloc + , c.used + , c.free + , c.pct_used + , c.pct_free + , '|' || RPAD(NVL(LPAD(' ',CEIL(NVL(c.pct_used,0)/&&STAR),'*'),' '),CEIL(100/&&STAR)) || '|' "Usage Graph" + , c.MAXSIZE + , c.maxfree + , c.max_pct_used + , c.max_pct_free + , '|' || RPAD(NVL(LPAD(' ',CEIL(NVL(c.max_pct_used,0)/&&STAR),'*'),' '),CEIL(100/&&STAR)) || '|' "MaxUsage Graph" + , TO_CHAR(c.creation_time,'DD-MON-YY HH24:MI') creation_time +FROM ( + SELECT /*+ CHOOSE */ a.tablespace_name + , c.creation_time + , ROUND(a.bytes_alloc / &&BYTES_DIVIDER, &&ROUND_PRECISION) alloc + , ROUND((a.bytes_alloc - NVL(b.bytes_free, 0)) / &&BYTES_DIVIDER, &&ROUND_PRECISION ) used + , ROUND(NVL(b.bytes_free, 0) / &&BYTES_DIVIDER, &&ROUND_PRECISION) free + , 100 - ROUND((NVL(b.bytes_free, 0) / a.bytes_alloc) * 100, &&ROUND_PRECISION) pct_Used + , ROUND((NVL(b.bytes_free, 0) / a.bytes_alloc) * 100, &&ROUND_PRECISION) pct_Free + , ROUND(a.maxbytes/ &&BYTES_DIVIDER, &&ROUND_PRECISION) MAXSIZE + , ROUND( (maxbytes - a.bytes_alloc + NVL(b.bytes_free, 0) ) / &&BYTES_DIVIDER , &&ROUND_PRECISION) Maxfree + , ROUND(((a.bytes_alloc - NVL(b.bytes_free, 0)) / a.maxbytes) * 100, &&ROUND_PRECISION) Max_pct_Used + , ROUND( ((a.maxbytes - a.bytes_alloc + NVL(b.bytes_free, 0) ) / a.maxbytes) * 100, &&ROUND_PRECISION) Max_pct_Free + FROM ( SELECT /*+ CHOOSE */ + f.tablespace_name + , SUM(f.bytes) bytes_alloc + , SUM(DECODE(f.autoextensible, 'YES',GREATEST(f.maxbytes,f.bytes),'NO', f.bytes)) maxbytes + FROM DBA_DATA_FILES f + WHERE f.tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + ) a + , ( SELECT /*+ CHOOSE */ + f.tablespace_name + , SUM(f.bytes) bytes_free + FROM DBA_FREE_SPACE f + WHERE f.tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + ) b + , (SELECT t.name tablespace_name, min(creation_time) creation_time + FROM v$tablespace t , v$datafile f + WHERE t.ts# = f.ts# + GROUP BY t.name) c + WHERE a.tablespace_name = b.tablespace_name (+) + AND a.tablespace_name = c.tablespace_name (+) + UNION ALL + SELECT /*+ CHOOSE */ + ts.tablespace_name + , c.creation_time + --, ROUND((ts.bytes_used + ts.bytes_free) / &&BYTES_DIVIDER , &&ROUND_PRECISION) alloc + , ROUND( tf.bytes / &&BYTES_DIVIDER , &&ROUND_PRECISION) alloc + , ROUND((ts.bytes_used - ss.free_bytes) / &&BYTES_DIVIDER , &&ROUND_PRECISION) used + , ROUND(((ts.bytes_free) + ss.free_bytes ) / &&BYTES_DIVIDER , &&ROUND_PRECISION) free + , ROUND(((ts.bytes_used - ss.free_bytes ) / (ts.bytes_used + ts.bytes_free)) + * 100, &&ROUND_PRECISION) pct_Used + , 100 - ROUND(((ts.bytes_used - ss.free_bytes) / (ts.bytes_used + ts.bytes_free)) * 100, &&ROUND_PRECISION) pct_Free + , ROUND( tf.max_bytes / &&BYTES_DIVIDER , &&ROUND_PRECISION) MaxSize + , ROUND( ((ts.bytes_free) + ss.free_bytes + (tf.max_bytes - (ts.bytes_used + ts.bytes_free) ) + ) / &&BYTES_DIVIDER , &&ROUND_PRECISION) Maxfree + , ROUND( ( (ts.bytes_used - ss.free_bytes )/tf.max_bytes) * 100, &&ROUND_PRECISION) Max_pct_Used + , 100 - ROUND( ((ts.bytes_used - ss.free_bytes ) /tf.max_bytes )* 100, &&ROUND_PRECISION ) Max_pct_Free + FROM (SELECT tablespace_name + , sum(bytes_used) bytes_used + , sum(bytes_free) bytes_free + FROM v$temp_space_header + WHERE tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + ) ts + , (SELECT tablespace_name + , SUM(bytes) bytes + , SUM(DECODE(autoextensible, 'YES',GREATEST(maxbytes,bytes),'NO', bytes)) max_bytes + FROM dba_temp_files + WHERE tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + ) tf + , (SELECT ss.tablespace_name + , sum(ss.free_blocks * t.block_size) free_bytes + FROM gv$sort_segment ss + , dba_tablespaces t + WHERE ss.tablespace_name = t.tablespace_name + AND ss.tablespace_name LIKE '&&tablespace_name' + GROUP BY ss.tablespace_name + ) ss + , dba_tablespaces t + , (SELECT t.name tablespace_name, min(creation_time) creation_time + FROM v$tablespace t , v$tempfile f + WHERE t.ts# = f.ts# + GROUP BY t.name) c + WHERE t.tablespace_name = ts.tablespace_name + AND t.tablespace_name = tf.tablespace_name + AND t.tablespace_name = ss.tablespace_name (+) + AND t.tablespace_name = c.tablespace_name (+) + AND t.tablespace_name LIKE '&&tablespace_name' +) c +ORDER BY 1 asc; + +UNDEFINE tablespace_name + diff --git a/star/tpardef.sql b/star/tpardef.sql new file mode 100644 index 0000000..d811b2d --- /dev/null +++ b/star/tpardef.sql @@ -0,0 +1,42 @@ +col TABLE_OWNER for a25 heading "Owner" +col TABLE_NAME for a30 heading "Table" +col OWNER for a25 heading "Owner" +col INDEX_NAME for a30 heading "Index" +col INDEX_TYPE for a10 heading "Type" +col PARTITIONED for a3 heading "Par" +col PARTITION_POSITION for 999 heading "P#" +col PARTITION_NAME for a30 heading "Partition" +col SUBPARTITION_NAME for a30 heading "Subpartition" +col PART_HIGHVAL for a32 trunc heading "Partition|high value" +col PART_INTERVAL for a3 heading "Par|Int" +col SUBPART_HIGHVAL for a32 trunc heading "Subpartition|high value" +col SUBPART_INTERVAL for a3 heading "Sub|Int" +col NUM_ROWS heading "Rows" + +define v_table_owner=&&1 +define v_table_name=&&2 + +select + par.TABLE_OWNER + ,par.TABLE_NAME + ,par.PARTITION_POSITION + ,par.PARTITION_NAME + ,par.NUM_ROWS + ,par.HIGH_VALUE PART_HIGHVAL + ,par.INTERVAL PART_INTERVAL + ,sub.SUBPARTITION_NAME + ,sub.NUM_ROWS + ,sub.HIGH_VALUE SUBPART_HIGHVAL + ,sub.INTERVAL SUBPART_INTERVAL +from + dba_tab_partitions par + left outer join dba_tab_subpartitions sub + on (par.TABLE_OWNER=sub.TABLE_OWNER) and (par.TABLE_NAME=sub.TABLE_NAME) and(par.PARTITION_NAME=sub.PARTITION_NAME) +where + par.table_owner='&&v_table_owner' + and par.table_name='&&v_table_name' +order by + par.PARTITION_POSITION asc + ,sub.SUBPARTITION_POSITION asc +; + diff --git a/star/tpstat.sql b/star/tpstat.sql new file mode 100644 index 0000000..84f5889 --- /dev/null +++ b/star/tpstat.sql @@ -0,0 +1,55 @@ +/* Statistics details for table partitions + + Usage: @tpstat
    + + vplesnila 2024-01-29: creation +*/ + +col owner for a20 head "Owner" +col table_name for a30 head "Table name" +col PARTITION_NAME for a20 head "Partition name" +col last_DML for a20 head "Last DML" +col last_analyzed for a20 head "Last Analyzed" +col STALE_STATS for a7 head "Stale" +col NUM_ROWS head "#Rows" +col PARTITION_POSITION head "P#" for 999 +col INSERTS head "Table|INS" +col UPDATES head "Table|UPD" +col DELETES head "Table|DEL" +col TRUNCATED head "Table|TRUN" + +break on report skip 1 +compute sum of INSERTS on report +compute sum of UPDATES on report +compute sum of DELETES on report + +select + tabstat.OWNER + ,tabstat.TABLE_NAME + ,tabstat.PARTITION_POSITION + ,tabstat.PARTITION_NAME + ,tabstat.NUM_ROWS + ,tabstat.STALE_STATS + ,tabstat.LAST_ANALYZED + ,tabmod.INSERTS + ,tabmod.UPDATES + ,tabmod.DELETES + ,tabmod.TRUNCATED + ,tabmod.TIMESTAMP last_DML +from + dba_tab_statistics tabstat + ,dba_tab_modifications tabmod +WHERE + tabstat.owner = '&&1' + AND tabstat.table_name = '&&2' + AND (tabstat.partition_name like '%&&3%' or tabstat.partition_name is NULL) + AND tabstat.owner = tabmod.table_owner(+) + AND tabstat.table_name = tabmod.table_name(+) + AND tabstat.partition_name = tabmod.partition_name(+) +ORDER BY + tabstat.owner asc, + tabstat.table_name asc, + tabstat.partition_position asc, + tabstat.subpartition_position asc +/ + diff --git a/star/transaction_long_running.sql b/star/transaction_long_running.sql new file mode 100644 index 0000000..550f872 --- /dev/null +++ b/star/transaction_long_running.sql @@ -0,0 +1,135 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Displays long running transactions +* Parameter: 1 - Where Clause +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-May-15 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE WHERE_CLAUSE +DEFINE WHERE_CLAUSE="&&1" + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + + +DEFINE COUNT_FORMAT=999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + + +PROMPT +PROMPT ********************************************* +PROMPT * D A T A B A S E T R A N S A C T I O N S +PROMPT ********************************************* + +COLUMN xid HEADING "XID" FORMAT a16 +COLUMN sid HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN transaction_start_date HEADING "Transaction|StartTime" FORMAT a18 +COLUMN tran_duration HEADING "Transaction|Duration" FORMAT a15 +COLUMN transaction_status HEADING "Tran|Status" FORMAT a8 +COLUMN space HEADING "Space|Tran" FORMAT a5 +COLUMN recursive HEADING "Recu|rsive|Tran" FORMAT a5 +COLUMN noundo HEADING "No|Undo|Tran" FORMAT a4 +COLUMN ptx HEADING "Par'l|Tran" FORMAT a5 +COLUMN used_undo HEADING "Undo|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN status HEADING "Session|Status" FORMAT a8 +COLUMN state HEADING "Session|State" FORMAT a12 TRUNCATED +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED +COLUMN process HEADING "Process" FORMAT a11 +COLUMN program HEADING "Program" FORMAT a20 TRUNCATED +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +--COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999 +COLUMN last_call_et HEADING "LastCall" FORMAT a12 +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +COLUMN log_io HEADING "Logical|IO|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN phy_io HEADING "Physical|IO|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN cr_get HEADING "Consistent|Gets|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT + +COLUMN locked_mode HEADING "Lock Mode" FORMAT a10 +COLUMN object_name HEADING "ObjectName" FORMAT a35 + + +SELECT + -- t.xid xid + --, t.ptx_xid + s.sid sid + , t.inst_id + , p.spid + , s.status + , TO_CHAR(t.start_date,'DD-MON-YY HH24:MI:SS') transaction_start_date + , FLOOR(sysdate - t.start_date) || 'd ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) , 1) * 24 ) ,2) || 'h ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 , 1) * 60 ) ,2) || 'm ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 * 60 , 1) * 60 ) ,2) || 's ' tran_duration + , t.status transaction_status + , t.space + , t.recursive + , t.noundo + , t.ptx + , DECODE(lo.locked_mode, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(lo.locked_mode) + ) locked_mode + , NVL2(o.owner,o.owner|| '.' || o.object_name || NVL2(o.subobject_name,'(' || o.subobject_name || ')','') , '' ) object_name + , ROUND((t.used_ublk * p.value)/&&BYTES_DIVIDER) used_undo + , t.log_io/&&COUNT_DIVIDER log_io + , t.phy_io/&&COUNT_DIVIDER phy_io + , t.cr_get/&&COUNT_DIVIDER cr_get + , s.username + , s.osuser +-- , s.sql_id +-- , s.sql_child_number + , s.program +FROM gv$transaction t + INNER JOIN gv$session s ON t.inst_id = s.inst_id AND t.ses_addr = s.saddr + INNER JOIN gv$process p ON p.inst_id = s.inst_id AND p.addr = s.paddr + INNER JOIN v$parameter p ON p.name = 'db_block_size' + LEFT OUTER JOIN gv$locked_object lo ON t.inst_id = lo.inst_id + AND s.sid = lo.session_id + AND t.xidusn = lo.xidusn + AND t.xidslot = lo.xidslot + AND t.xidsqn = lo.xidsqn + LEFT OUTER JOIN dba_objects o ON lo.object_id = o.object_id +WHERE 1=1 and 2=2 +-- had to put AND clause other when no where clause is passed it was giving following error +-- SP2-0341: line overflow during variable substitution (>3000 characters at line 53) + &&WHERE_CLAUSE +ORDER BY transaction_start_date asc +; + diff --git a/star/tspstat.sql b/star/tspstat.sql new file mode 100644 index 0000000..0474c65 --- /dev/null +++ b/star/tspstat.sql @@ -0,0 +1,59 @@ +/* Statistics details for table partitions/subpartitios + + Usage: @tspstat
    + + vplesnila 2024-01-29: creation +*/ + +col owner for a20 head "Owner" +col table_name for a25 head "Table name" +col PARTITION_POSITION for 999 heading "P#" +col PARTITION_NAME for a25 head "Partition name" +col SUBPARTITION_NAME for a25 head "Subpartition name" +col last_DML for a20 head "Last DML" +col last_analyzed for a20 head "Last Analyzed" +col STALE_STATS for a7 head "Stale" +col NUM_ROWS head "#Rows" +col INSERTS head "Table|INS" +col UPDATES head "Table|UPD" +col DELETES head "Table|DEL" +col TRUNCATED head "Table|TRUN" + +break on report skip 1 +compute sum of INSERTS on report +compute sum of UPDATES on report +compute sum of DELETES on report + +select + tabstat.OWNER + ,tabstat.TABLE_NAME + ,tabstat.PARTITION_POSITION + ,tabstat.PARTITION_NAME + ,tabstat.SUBPARTITION_NAME + ,tabstat.NUM_ROWS + ,tabstat.STALE_STATS + ,tabstat.LAST_ANALYZED + ,tabmod.INSERTS + ,tabmod.UPDATES + ,tabmod.DELETES + ,tabmod.TRUNCATED + ,tabmod.TIMESTAMP last_DML +from + dba_tab_statistics tabstat + ,dba_tab_modifications tabmod +WHERE + tabstat.owner = '&&1' + AND tabstat.table_name = '&&2' + AND (tabstat.partition_name like '%&&3%' or tabstat.partition_name is NULL) + AND (tabstat.subpartition_name like '%&&4%' or tabstat.subpartition_name is NULL) + AND tabstat.owner = tabmod.table_owner(+) + AND tabstat.table_name = tabmod.table_name(+) + AND tabstat.partition_name = tabmod.partition_name(+) + AND tabstat.subpartition_name = tabmod.subpartition_name(+) +ORDER BY + tabstat.owner asc, + tabstat.table_name asc, + tabstat.partition_position asc, + tabstat.subpartition_position asc +/ + diff --git a/star/usess.sql b/star/usess.sql new file mode 100644 index 0000000..6daba34 --- /dev/null +++ b/star/usess.sql @@ -0,0 +1,61 @@ +/* + based on Jeffrey M. Hunter jhunter@idevelopment.info script / www.idevelopment.info +*/ + +SET ECHO OFF +SET FEEDBACK 6 +SET HEADING ON +SET LINESIZE 256 +SET PAGESIZE 50000 +SET TERMOUT ON +SET TIMING OFF +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +COLUMN inst_id FORMAT 9 HEADING 'I' +COLUMN sid FORMAT 999999 HEADING 'SID' +COLUMN serial_id FORMAT 99999999 HEADING 'Serial#' +COLUMN session_status FORMAT a9 HEADING 'Status' +COLUMN sql_id FORMAT a13 HEADING 'SQL_ID' +COLUMN event FORMAT a30 HEADING 'Event' TRUNC +COLUMN oracle_username FORMAT a15 HEADING 'Oracle User' +COLUMN os_username FORMAT a15 HEADING 'O/S User' +COLUMN os_pid FORMAT a8 HEADING 'O/S PID' +COLUMN session_machine FORMAT a25 HEADING 'Machine' TRUNC +COLUMN session_program FORMAT a40 HEADING 'Session Program' TRUNC +COLUMN module FORMAT a30 HEADING 'Module' TRUNC +COLUMN action FORMAT a30 HEADING 'Action' TRUNC + +BREAK ON inst_id SKIP PAGE + +SELECT + s.inst_id inst_id + , s.sid sid + , s.serial# serial_id + , s.status session_status + , s.sql_id sql_id + , s.username oracle_username + , s.osuser os_username + , s.machine session_machine + , s.program session_program + , p.spid os_pid + , s.event event + , s.module module + , s.action action +FROM + gv$session s + INNER JOIN gv$process p ON (s.paddr = p.addr AND s.inst_id = p.inst_id) + INNER JOIN gv$instance i ON (p.inst_id = i.inst_id) +WHERE + (&1) + AND s.username IS NOT null + AND s.username not in ('SYS','SYSRAC') +ORDER BY + i.instance_name + , s.sid; + diff --git a/star/wrka.sql b/star/wrka.sql new file mode 100644 index 0000000..3aedd93 --- /dev/null +++ b/star/wrka.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Purpose: List ACTIVE SQL workarea memory usage details at session/workarea level. +-- Show both PGA workarea usage and TEMP usage by workareas (workareas don't include +-- other PGA/TEMP use like PL/SQL arrays and global temporary tables) +-- +-- Usage: @wrka 1=1 +-- @wrka sid=123 +-- @wrka username='APPUSER' +-- @wrka "sid IN (123,234,456)" +-- @wrka "program LIKE '%BatchRunner.exe%' AND machine='host123'" +-- @wrka "sid in (SELECT sid FROM v$session WHERE ....)" + +prompt Show Active workarea memory usage for where &1.... + +COL wrka_operation_type HEAD OPERATION_TYPE FOR A30 + +SELECT + inst_id + , sid + , qcinst_id + , qcsid + , sql_id +-- , sql_exec_start -- 11g+ + , operation_type wrka_operation_type + , operation_id plan_line + , policy + , ROUND(active_time/1000000,1) active_sec + , actual_mem_used + , max_mem_used + , work_area_size + , number_passes + , tempseg_size + , tablespace +FROM + gv$sql_workarea_active +WHERE + &1 +ORDER BY + sid + , sql_hash_value + , operation_id +/ diff --git a/star/wrkasum.sql b/star/wrkasum.sql new file mode 100644 index 0000000..6ae47a6 --- /dev/null +++ b/star/wrkasum.sql @@ -0,0 +1,71 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Purpose: Show a summary of ACTIVE SQL workareas grouped by operation type (SORT, HASH, etc) +-- Show both PGA workarea usage and TEMP usage by workareas (workareas don't include +-- other PGA/TEMP use like PL/SQL arrays and global temporary tables) +-- +-- Usage: @wrkasum 1=1 +-- @wrkasum username='APPUSER' +-- @wrkasum "program LIKE '%BatchRunner.exe%' AND machine='host123'" + +PROMPT Total PGA allocation from V$PROCESS (excluding MGA) + +SELECT + inst_id + , ROUND(SUM(pga_alloc_mem)/1048576,1) total_alloc_pga + , ROUND(SUM(pga_used_mem) /1048576,1) total_used_pga +FROM + gv$process +GROUP BY + inst_id +ORDER BY + inst_id +/ + +PROMPT Top allocation reason by PGA memory usage + +COL wrkasum_operation_type FOR A30 + +SELECT + operation_type wrkasum_operation_type + , policy + , ROUND(SUM(actual_mem_used)/1048576) actual_pga_mb + , ROUND(SUM(work_area_size)/1048576) allowed_pga_mb + , ROUND(SUM(tempseg_size)/1048576) temp_mb + , MAX(number_passes) num_passes + , COUNT(DISTINCT qcinst_id||','||qcsid) num_qc + , COUNT(DISTINCT inst_id||','||sid) num_sessions +FROM + gv$sql_workarea_active +WHERE + &1 +GROUP BY + operation_type + , policy +ORDER BY + actual_pga_mb DESC NULLS LAST +/ + +PROMPT Top SQL_ID by TEMP usage... + + SELECT + sql_id + , policy + , ROUND(SUM(actual_mem_used)/1048576) actual_pga_mb + , ROUND(SUM(work_area_size)/1048576) allowed_pga_mb + , ROUND(SUM(tempseg_size)/1048576) temp_mb + , MAX(number_passes) num_passes + , COUNT(DISTINCT qcinst_id||','||qcsid) num_qc + , COUNT(DISTINCT inst_id||','||sid) num_sessions + FROM + gv$sql_workarea_active + WHERE + &1 + GROUP BY + sql_id + , policy + ORDER BY + temp_mb DESC NULLS LAST +/ + diff --git a/star/xawr.sql b/star/xawr.sql new file mode 100644 index 0000000..2b420da --- /dev/null +++ b/star/xawr.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('&1', CASE WHEN '&2' = '%' THEN null ELSE '&2' END, format=>'+PEEKED_BINDS')); diff --git a/star/xlast.sql b/star/xlast.sql new file mode 100644 index 0000000..9eb0ac4 --- /dev/null +++ b/star/xlast.sql @@ -0,0 +1,5 @@ +prompt Display execution plan for last statement for this session from library cache... + +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +ALIAS +PEEKED_BINDS +PARALLEL +PARTITION +COST +BYTES +HINT_REPORT')); + + diff --git a/star/xplan.sql b/star/xplan.sql new file mode 100644 index 0000000..9ea4817 --- /dev/null +++ b/star/xplan.sql @@ -0,0 +1,48 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display Execution plan from cursor cache +* Parameters : 1 - SQL_ID +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 18-Mar-12 Vishal Gupta Intial version +* +* +*/ + + + +DEFINE sql_id="&&1" +DEFINE child_number="&&2" + + + +COLUMN _sql_id NEW_VALUE sql_id NOPRINT +COLUMN _child_number NEW_VALUE child_number NOPRINT + +SELECT DECODE('&&sql_id','','%','&&sql_id') "_sql_id" + , DECODE('&&child_number','','NULL','&&child_number') "_child_number" +FROM DUAL +; + + + +SET long 4000 +SET longchunksize 4000 +SET pagesize 0 + +SELECT * +FROM table(DBMS_XPLAN.display_cursor( sql_id => '&&sql_id' + , cursor_child_no => &&child_number + , format => 'ADVANCED ALLSTATS LAST' + ) + ) +; + +UNDEFINE sql_id +UNDEFINE child_number + diff --git a/timhall/.DS_Store b/timhall/.DS_Store new file mode 100644 index 0000000..3214d15 Binary files /dev/null and b/timhall/.DS_Store differ diff --git a/timhall/10g/active_session_waits.sql b/timhall/10g/active_session_waits.sql new file mode 100644 index 0000000..ff8ae3e --- /dev/null +++ b/timhall/10g/active_session_waits.sql @@ -0,0 +1,39 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/active_session_waits.sql +-- Author : Tim Hall +-- Description : Displays information on the current wait states for all active database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @active_session_waits +-- Last Modified: 21/12/2004 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 250 +SET PAGESIZE 1000 + +COLUMN username FORMAT A15 +COLUMN osuser FORMAT A15 +COLUMN sid FORMAT 99999 +COLUMN serial# FORMAT 9999999 +COLUMN wait_class FORMAT A15 +COLUMN state FORMAT A19 +COLUMN logon_time FORMAT A20 + +SELECT NVL(a.username, \'(oracle)\') AS username, + a.osuser, + a.sid, + a.serial#, + d.spid AS process_id, + a.wait_class, + a.seconds_in_wait, + a.state, + a.blocking_session, + a.blocking_session_status, + a.module, + TO_CHAR(a.logon_Time,\'DD-MON-YYYY HH24:MI:SS\') AS logon_time +FROM v$session a, + v$process d +WHERE a.paddr = d.addr +AND a.status = \'ACTIVE\' +ORDER BY 1,2; + +SET PAGESIZE 14 + diff --git a/timhall/10g/ash.sql b/timhall/10g/ash.sql new file mode 100644 index 0000000..90470eb --- /dev/null +++ b/timhall/10g/ash.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/ash.sql +-- Author : Tim Hall +-- Description : Displays the minutes spent on each event for the specified time. +-- Requirements : Access to the V$ views. +-- Call Syntax : @active_session_waits (mins) +-- Last Modified: 21/12/2004 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF + +SELECT NVL(a.event, 'ON CPU') AS event, + COUNT(*) AS total_wait_time +FROM v$active_session_history a +WHERE a.sample_time > SYSDATE - &1/(24*60) +GROUP BY a.event +ORDER BY total_wait_time DESC; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/10g/datapump_jobs.sql b/timhall/10g/datapump_jobs.sql new file mode 100644 index 0000000..7044058 --- /dev/null +++ b/timhall/10g/datapump_jobs.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/datapump_jobs.sql +-- Author : Tim Hall +-- Description : Displays information about all Data Pump jobs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @datapump_jobs +-- Last Modified: 28/01/2019 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 + +COLUMN owner_name FORMAT A20 +COLUMN job_name FORMAT A30 +COLUMN operation FORMAT A10 +COLUMN job_mode FORMAT A10 +COLUMN state FORMAT A12 + +SELECT owner_name, + job_name, + TRIM(operation) AS operation, + TRIM(job_mode) AS job_mode, + state, + degree, + attached_sessions, + datapump_sessions +FROM dba_datapump_jobs +ORDER BY 1, 2; diff --git a/timhall/10g/db_usage_hwm.sql b/timhall/10g/db_usage_hwm.sql new file mode 100644 index 0000000..a6d5f58 --- /dev/null +++ b/timhall/10g/db_usage_hwm.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/db_usage_hwm.sql +-- Author : Tim Hall +-- Description : Displays high water mark statistics. +-- Requirements : Access to the DBA views. +-- Call Syntax : @db_usage_hwm +-- Last Modified: 26-NOV-2004 +-- ----------------------------------------------------------------------------------- + +COLUMN name FORMAT A40 +COLUMN highwater FORMAT 999999999999 +COLUMN last_value FORMAT 999999999999 +SET PAGESIZE 24 + +SELECT hwm1.name, + hwm1.highwater, + hwm1.last_value +FROM dba_high_water_mark_statistics hwm1 +WHERE hwm1.version = (SELECT MAX(hwm2.version) + FROM dba_high_water_mark_statistics hwm2 + WHERE hwm2.name = hwm1.name) +ORDER BY hwm1.name; + +COLUMN FORMAT DEFAULT diff --git a/timhall/10g/dynamic_memory.sql b/timhall/10g/dynamic_memory.sql new file mode 100644 index 0000000..d38c559 --- /dev/null +++ b/timhall/10g/dynamic_memory.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/dynamic_memory.sql +-- Author : Tim Hall +-- Description : Displays the values of the dynamically memory pools. +-- Requirements : Access to the V$ views. +-- Call Syntax : @dynamic_memory +-- Last Modified: 08-NOV-2004 +-- ----------------------------------------------------------------------------------- + +COLUMN name FORMAT A40 +COLUMN value FORMAT A40 + +SELECT name, + value +FROM v$parameter +WHERE SUBSTR(name, 1, 1) = '_' +ORDER BY name; + +COLUMN FORMAT DEFAULT diff --git a/timhall/10g/event_histogram.sql b/timhall/10g/event_histogram.sql new file mode 100644 index 0000000..0967042 --- /dev/null +++ b/timhall/10g/event_histogram.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/event_histogram.sql +-- Author : Tim Hall +-- Description : Displays histogram of the event waits times. +-- Requirements : Access to the V$ views. +-- Call Syntax : @event_histogram "(event-name)" +-- Last Modified: 08-NOV-2005 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF +COLUMN event FORMAT A30 + +SELECT event#, + event, + wait_time_milli, + wait_count +FROM v$event_histogram +WHERE event LIKE '%&1%' +ORDER BY event, wait_time_milli; + +COLUMN FORMAT DEFAULT +SET VERIFY ON \ No newline at end of file diff --git a/timhall/10g/feature_usage.sql b/timhall/10g/feature_usage.sql new file mode 100644 index 0000000..42fb0ce --- /dev/null +++ b/timhall/10g/feature_usage.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/feature_usage.sql +-- Author : Tim Hall +-- Description : Displays feature usage statistics. +-- Requirements : Access to the DBA views. +-- Call Syntax : @feature_usage +-- Last Modified: 26-NOV-2004 +-- ----------------------------------------------------------------------------------- + +COLUMN name FORMAT A60 +COLUMN detected_usages FORMAT 999999999999 + +SELECT u1.name, + u1.detected_usages, + u1.currently_used, + u1.version +FROM dba_feature_usage_statistics u1 +WHERE u1.version = (SELECT MAX(u2.version) + FROM dba_feature_usage_statistics u2 + WHERE u2.name = u1.name) +AND u1.detected_usages > 0 +AND u1.dbid = (SELECT dbid FROM v$database) +ORDER BY u1.name; + +COLUMN FORMAT DEFAULT \ No newline at end of file diff --git a/timhall/10g/flashback_db_info.sql b/timhall/10g/flashback_db_info.sql new file mode 100644 index 0000000..542768b --- /dev/null +++ b/timhall/10g/flashback_db_info.sql @@ -0,0 +1,31 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/flashback_db_info.sql +-- Author : Tim Hall +-- Description : Displays information relevant to flashback database. +-- Requirements : Access to the V$ views. +-- Call Syntax : @flashback_db_info +-- Last Modified: 21/12/2004 +-- ----------------------------------------------------------------------------------- +PROMPT Flashback Status +PROMPT ================ +select flashback_on from v$database; + +PROMPT Flashback Parameters +PROMPT ==================== + +column name format A30 +column value format A50 +select name, value +from v$parameter +where name in ('db_flashback_retention_target', 'db_recovery_file_dest','db_recovery_file_dest_size') +order by name; + +PROMPT Flashback Restore Points +PROMPT ======================== + +select * from v$restore_point; + +PROMPT Flashback Logs +PROMPT ============== + +select * from v$flashback_database_log; diff --git a/timhall/10g/generate_multiple_awr_reports.sql b/timhall/10g/generate_multiple_awr_reports.sql new file mode 100644 index 0000000..ea61e99 --- /dev/null +++ b/timhall/10g/generate_multiple_awr_reports.sql @@ -0,0 +1,60 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/10g/generate_multiple_awr_reports.sql +-- Author : DR Timothy S Hall +-- Description : Generates AWR reports for all snapsots between the specified start and end point. +-- Requirements : Access to the v$ views, UTL_FILE and DBMS_WORKLOAD_REPOSITORY packages. +-- Call Syntax : Create the directory with the appropriate path. +-- Adjust the start and end snapshots as required. +-- @generate_multiple_awr_reports.sql +-- Last Modified: 02/08/2007 +-- ----------------------------------------------------------------------------------- +CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/tmp/'; + +DECLARE + -- Adjust before use. + l_snap_start NUMBER := 1; + l_snap_end NUMBER := 10; + l_dir VARCHAR2(50) := 'AWR_REPORTS_DIR'; + + l_last_snap NUMBER := NULL; + l_dbid v$database.dbid%TYPE; + l_instance_number v$instance.instance_number%TYPE; + l_file UTL_FILE.file_type; + l_file_name VARCHAR(50); + +BEGIN + SELECT dbid + INTO l_dbid + FROM v$database; + + SELECT instance_number + INTO l_instance_number + FROM v$instance; + + FOR cur_snap IN (SELECT snap_id + FROM dba_hist_snapshot + WHERE instance_number = l_instance_number + AND snap_id BETWEEN l_snap_start AND l_snap_end + ORDER BY snap_id) + LOOP + IF l_last_snap IS NOT NULL THEN + l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || cur_snap.snap_id || '.htm', 'w', 32767); + + FOR cur_rep IN (SELECT output + FROM TABLE(DBMS_WORKLOAD_REPOSITORY.awr_report_html(l_dbid, l_instance_number, l_last_snap, cur_snap.snap_id))) + LOOP + UTL_FILE.put_line(l_file, cur_rep.output); + END LOOP; + UTL_FILE.fclose(l_file); + END IF; + l_last_snap := cur_snap.snap_id; + END LOOP; + +EXCEPTION + WHEN OTHERS THEN + IF UTL_FILE.is_open(l_file) THEN + UTL_FILE.fclose(l_file); + END IF; + RAISE; +END; +/ diff --git a/timhall/10g/job_chain_rules.sql b/timhall/10g/job_chain_rules.sql new file mode 100644 index 0000000..bc83d7c --- /dev/null +++ b/timhall/10g/job_chain_rules.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/job_chain_rules.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about job chain rules. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_chain_rules +-- Last Modified: 26/10/2011 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +COLUMN owner FORMAT A10 +COLUMN chain_name FORMAT A15 +COLUMN rule_owner FORMAT A10 +COLUMN rule_name FORMAT A15 +COLUMN condition FORMAT A25 +COLUMN action FORMAT A20 +COLUMN comments FORMAT A25 + +SELECT owner, + chain_name, + rule_owner, + rule_name, + condition, + action, + comments +FROM dba_scheduler_chain_rules +ORDER BY owner, chain_name, rule_owner, rule_name; \ No newline at end of file diff --git a/timhall/10g/job_chain_steps.sql b/timhall/10g/job_chain_steps.sql new file mode 100644 index 0000000..1499b71 --- /dev/null +++ b/timhall/10g/job_chain_steps.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/job_chain_steps.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about job chain steps. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_chain_steps +-- Last Modified: 26/10/2011 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +COLUMN owner FORMAT A10 +COLUMN chain_name FORMAT A15 +COLUMN step_name FORMAT A15 +COLUMN program_owner FORMAT A10 +COLUMN program_name FORMAT A15 + +SELECT owner, + chain_name, + step_name, + program_owner, + program_name, + step_type +FROM dba_scheduler_chain_steps +ORDER BY owner, chain_name, step_name; \ No newline at end of file diff --git a/timhall/10g/job_chains.sql b/timhall/10g/job_chains.sql new file mode 100644 index 0000000..600c916 --- /dev/null +++ b/timhall/10g/job_chains.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/job_chains.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about job chains. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_chains +-- Last Modified: 26/10/2011 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +COLUMN owner FORMAT A10 +COLUMN chain_name FORMAT A15 +COLUMN rule_set_owner FORMAT A10 +COLUMN rule_set_name FORMAT A15 +COLUMN comments FORMAT A15 + +SELECT owner, + chain_name, + rule_set_owner, + rule_set_name, + number_of_rules, + number_of_steps, + enabled, + comments +FROM dba_scheduler_chains; \ No newline at end of file diff --git a/timhall/10g/job_classes.sql b/timhall/10g/job_classes.sql new file mode 100644 index 0000000..45228c3 --- /dev/null +++ b/timhall/10g/job_classes.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/job_classes.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about job classes. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_classes +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN service FORMAT A20 +COLUMN comments FORMAT A40 + +SELECT job_class_name, + resource_consumer_group, + service, + logging_level, + log_history, + comments +FROM dba_scheduler_job_classes +ORDER BY job_class_name; diff --git a/timhall/10g/job_programs.sql b/timhall/10g/job_programs.sql new file mode 100644 index 0000000..3b3ef58 --- /dev/null +++ b/timhall/10g/job_programs.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/job_programs.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about job programs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_programs +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 250 + +COLUMN owner FORMAT A20 +COLUMN program_name FORMAT A30 +COLUMN program_action FORMAT A50 +COLUMN comments FORMAT A40 + +SELECT owner, + program_name, + program_type, + program_action, + number_of_arguments, + enabled, + comments +FROM dba_scheduler_programs +ORDER BY owner, program_name; diff --git a/timhall/10g/job_running_chains.sql b/timhall/10g/job_running_chains.sql new file mode 100644 index 0000000..19449b6 --- /dev/null +++ b/timhall/10g/job_running_chains.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/job_running_chains.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about job running chains. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_running_chains.sql +-- Last Modified: 26/10/2011 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +COLUMN owner FORMAT A10 +COLUMN job_name FORMAT A20 +COLUMN chain_owner FORMAT A10 +COLUMN chain_name FORMAT A15 +COLUMN step_name FORMAT A25 + +SELECT owner, + job_name, + chain_owner, + chain_name, + step_name, + state +FROM dba_scheduler_running_chains +ORDER BY owner, job_name, chain_name, step_name; \ No newline at end of file diff --git a/timhall/10g/job_schedules.sql b/timhall/10g/job_schedules.sql new file mode 100644 index 0000000..7956f48 --- /dev/null +++ b/timhall/10g/job_schedules.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/job_schedules.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about job schedules. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_schedules +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 250 + +COLUMN owner FORMAT A20 +COLUMN schedule_name FORMAT A30 +COLUMN start_date FORMAT A35 +COLUMN repeat_interval FORMAT A50 +COLUMN end_date FORMAT A35 +COLUMN comments FORMAT A40 + +SELECT owner, + schedule_name, + start_date, + repeat_interval, + end_date, + comments +FROM dba_scheduler_schedules +ORDER BY owner, schedule_name; diff --git a/timhall/10g/jobs.sql b/timhall/10g/jobs.sql new file mode 100644 index 0000000..9e0c04d --- /dev/null +++ b/timhall/10g/jobs.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/jobs.sql +-- Author : Tim Hall +-- Description : Displays scheduler job information. +-- Requirements : Access to the DBA views. +-- Call Syntax : @jobs +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN owner FORMAT A20 +COLUMN job_name FORMAT A30 +COLUMN job_class FORMAT A30 +COLUMN next_run_date FORMAT A36 + +SELECT owner, + job_name, + enabled, + job_class, + next_run_date +FROM dba_scheduler_jobs +ORDER BY owner, job_name; diff --git a/timhall/10g/jobs_running.sql b/timhall/10g/jobs_running.sql new file mode 100644 index 0000000..b669d67 --- /dev/null +++ b/timhall/10g/jobs_running.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/jobs_running.sql +-- Author : Tim Hall +-- Description : Displays scheduler information for running jobs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @jobs_running +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN owner FORMAT A20 +COLUMN elapsed_time FORMAT A30 + +SELECT owner, + job_name, + running_instance, + elapsed_time, + session_id +FROM dba_scheduler_running_jobs +ORDER BY owner, job_name; \ No newline at end of file diff --git a/timhall/10g/lock_tree.sql b/timhall/10g/lock_tree.sql new file mode 100644 index 0000000..b94c45d --- /dev/null +++ b/timhall/10g/lock_tree.sql @@ -0,0 +1,37 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/lock_tree.sql +-- Author : DR Timothy S Hall +-- Description : Displays information on all database sessions with the username +-- column displayed as a heirarchy if locks are present. +-- Requirements : Access to the V$ views. +-- Call Syntax : @lock_tree +-- Last Modified: 18-MAY-2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 + +COLUMN username FORMAT A30 +COLUMN osuser FORMAT A10 +COLUMN machine FORMAT A25 +COLUMN logon_time FORMAT A20 + +SELECT level, + LPAD(' ', (level-1)*2, ' ') || NVL(s.username, '(oracle)') AS username, + s.osuser, + s.sid, + s.serial#, + s.lockwait, + s.status, + s.module, + s.machine, + s.program, + TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time +FROM v$session s +WHERE level > 1 +OR EXISTS (SELECT 1 + FROM v$session + WHERE blocking_session = s.sid) +CONNECT BY PRIOR s.sid = s.blocking_session +START WITH s.blocking_session IS NULL; + +SET PAGESIZE 14 diff --git a/timhall/10g/scheduler_attributes.sql b/timhall/10g/scheduler_attributes.sql new file mode 100644 index 0000000..07c6673 --- /dev/null +++ b/timhall/10g/scheduler_attributes.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/scheduler_attributes.sql +-- Author : Tim Hall +-- Description : Displays the top-level scheduler parameters. +-- Requirements : Access to the DBMS_SCHEDULER package and the MANAGE SCHEDULER privilege. +-- Call Syntax : @scheduler_attributes +-- Last Modified: 13-DEC-2016 +-- ----------------------------------------------------------------------------------- + +SET SERVEROUTPUT ON +DECLARE + PROCEDURE display(p_param IN VARCHAR2) AS + l_result VARCHAR2(50); + BEGIN + DBMS_SCHEDULER.get_scheduler_attribute( + attribute => p_param, + value => l_result); + DBMS_OUTPUT.put_line(RPAD(p_param, 30, ' ') || ' : ' || l_result); + END; +BEGIN + display('current_open_window'); + display('default_timezone'); + display('email_sender'); + display('email_server'); + display('event_expiry_time'); + display('log_history'); + display('max_job_slave_processes'); +END; +/ diff --git a/timhall/10g/segment_advisor.sql b/timhall/10g/segment_advisor.sql new file mode 100644 index 0000000..cc57c3f --- /dev/null +++ b/timhall/10g/segment_advisor.sql @@ -0,0 +1,74 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/segment_advisor.sql +-- Author : Tim Hall +-- Description : Displays segment advice for the specified segment. +-- Requirements : Access to the DBMS_ADVISOR package. +-- Call Syntax : Object-type = "tablespace": +-- @segment_advisor.sql tablespace (tablespace-name) null +-- Object-type = "table" or "index": +-- @segment_advisor.sql (object-type) (object-owner) (object-name) +-- Last Modified: 08-APR-2005 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON SIZE 1000000 +SET LINESIZE 200 +SET VERIFY OFF + +DECLARE + l_object_id NUMBER; + l_task_name VARCHAR2(32767) := 'SEGMENT_ADVISOR_TASK'; + l_object_type VARCHAR2(32767) := UPPER('&1'); + l_attr1 VARCHAR2(32767) := UPPER('&2'); + l_attr2 VARCHAR2(32767) := UPPER('&3'); +BEGIN + IF l_attr2 = 'NULL' THEN + l_attr2 := NULL; + END IF; + + DBMS_ADVISOR.create_task ( + advisor_name => 'Segment Advisor', + task_name => l_task_name); + + DBMS_ADVISOR.create_object ( + task_name => l_task_name, + object_type => l_object_type, + attr1 => l_attr1, + attr2 => l_attr2, + attr3 => NULL, + attr4 => 'null', + attr5 => NULL, + object_id => l_object_id); + + DBMS_ADVISOR.set_task_parameter ( + task_name => l_task_name, + parameter => 'RECOMMEND_ALL', + value => 'TRUE'); + + DBMS_ADVISOR.execute_task(task_name => l_task_name); + + + FOR cur_rec IN (SELECT f.impact, + o.type, + o.attr1, + o.attr2, + f.message, + f.more_info + FROM dba_advisor_findings f + JOIN dba_advisor_objects o ON f.object_id = o.object_id AND f.task_name = o.task_name + WHERE f.task_name = l_task_name + ORDER BY f.impact DESC) + LOOP + DBMS_OUTPUT.put_line('..'); + DBMS_OUTPUT.put_line('Type : ' || cur_rec.type); + DBMS_OUTPUT.put_line('Attr1 : ' || cur_rec.attr1); + DBMS_OUTPUT.put_line('Attr2 : ' || cur_rec.attr2); + DBMS_OUTPUT.put_line('Message : ' || cur_rec.message); + DBMS_OUTPUT.put_line('More info : ' || cur_rec.more_info); + END LOOP; + + DBMS_ADVISOR.delete_task(task_name => l_task_name); +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line('Error : ' || DBMS_UTILITY.format_error_backtrace); + DBMS_ADVISOR.delete_task(task_name => l_task_name); +END; +/ diff --git a/timhall/10g/services.sql b/timhall/10g/services.sql new file mode 100644 index 0000000..7d02f63 --- /dev/null +++ b/timhall/10g/services.sql @@ -0,0 +1,16 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/services.sql +-- Author : Tim Hall +-- Description : Displays information about database services. +-- Requirements : Access to the DBA views. +-- Call Syntax : @services +-- Last Modified: 05/11/2004 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +COLUMN name FORMAT A30 +COLUMN network_name FORMAT A50 + +SELECT name, + network_name +FROM dba_services +ORDER BY name; \ No newline at end of file diff --git a/timhall/10g/session_waits.sql b/timhall/10g/session_waits.sql new file mode 100644 index 0000000..a95ab73 --- /dev/null +++ b/timhall/10g/session_waits.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/session_waits.sql +-- Author : Tim Hall +-- Description : Displays information on all database session waits. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_waits +-- Last Modified: 11/03/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET PAGESIZE 1000 + +COLUMN username FORMAT A20 +COLUMN event FORMAT A30 +COLUMN wait_class FORMAT A15 + +SELECT NVL(s.username, '(oracle)') AS username, + s.sid, + s.serial#, + sw.event, + sw.wait_class, + sw.wait_time, + sw.seconds_in_wait, + sw.state +FROM v$session_wait sw, + v$session s +WHERE s.sid = sw.sid +ORDER BY sw.seconds_in_wait DESC; diff --git a/timhall/10g/sga_buffers.sql b/timhall/10g/sga_buffers.sql new file mode 100644 index 0000000..6c0e81b --- /dev/null +++ b/timhall/10g/sga_buffers.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/10g/sga_buffers.sql +-- Author : DR Timothy S Hall +-- Description : Displays the status of buffers in the SGA. +-- Requirements : Access to the v$ and DBA views. +-- Call Syntax : @sga_buffers +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +COLUMN object_name FORMAT A30 + +SELECT t.name AS tablespace_name, + o.object_name, + SUM(DECODE(bh.status, 'free', 1, 0)) AS free, + SUM(DECODE(bh.status, 'xcur', 1, 0)) AS xcur, + SUM(DECODE(bh.status, 'scur', 1, 0)) AS scur, + SUM(DECODE(bh.status, 'cr', 1, 0)) AS cr, + SUM(DECODE(bh.status, 'read', 1, 0)) AS read, + SUM(DECODE(bh.status, 'mrec', 1, 0)) AS mrec, + SUM(DECODE(bh.status, 'irec', 1, 0)) AS irec +FROM v$bh bh + JOIN dba_objects o ON o.object_id = bh.objd + JOIN v$tablespace t ON t.ts# = bh.ts# +GROUP BY t.name, o.object_name; diff --git a/timhall/10g/sga_dynamic_components.sql b/timhall/10g/sga_dynamic_components.sql new file mode 100644 index 0000000..02e3d5b --- /dev/null +++ b/timhall/10g/sga_dynamic_components.sql @@ -0,0 +1,17 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/sga_dynamic_components.sql +-- Author : Tim Hall +-- Description : Provides information about dynamic SGA components. +-- Requirements : Access to the v$ views. +-- Call Syntax : @sga_dynamic_components +-- Last Modified: 09/05/2017 +-- ----------------------------------------------------------------------------------- +COLUMN component FORMAT A30 + +SELECT component, + ROUND(current_size/1024/1024) AS current_size_mb, + ROUND(min_size/1024/1024) AS min_size_mb, + ROUND(max_size/1024/1024) AS max_size_mb +FROM v$sga_dynamic_components +WHERE current_size != 0 +ORDER BY component; diff --git a/timhall/10g/sga_dynamic_free_memory.sql b/timhall/10g/sga_dynamic_free_memory.sql new file mode 100644 index 0000000..2c4e3e7 --- /dev/null +++ b/timhall/10g/sga_dynamic_free_memory.sql @@ -0,0 +1,11 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/sga_dynamic_free_memory.sql +-- Author : Tim Hall +-- Description : Provides information about free memory in the SGA. +-- Requirements : Access to the v$ views. +-- Call Syntax : @sga_dynamic_free_memory +-- Last Modified: 23/08/2008 +-- ----------------------------------------------------------------------------------- + +SELECT * +FROM v$sga_dynamic_free_memory; diff --git a/timhall/10g/sga_resize_ops.sql b/timhall/10g/sga_resize_ops.sql new file mode 100644 index 0000000..0f88ce4 --- /dev/null +++ b/timhall/10g/sga_resize_ops.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/sga_resize_ops.sql +-- Author : Tim Hall +-- Description : Provides information about memory resize operations. +-- Requirements : Access to the v$ views. +-- Call Syntax : @sga_resize_ops +-- Last Modified: 09/05/2017 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 + +COLUMN parameter FORMAT A25 + +SELECT start_time, + end_time, + component, + oper_type, + oper_mode, + parameter, + ROUND(initial_size/1024/1024) AS initial_size_mb, + ROUND(target_size/1024/1024) AS target_size_mb, + ROUND(final_size/1024/1024) AS final_size_mb, + status +FROM v$sga_resize_ops +ORDER BY start_time; diff --git a/timhall/10g/sysaux_occupants.sql b/timhall/10g/sysaux_occupants.sql new file mode 100644 index 0000000..afac305 --- /dev/null +++ b/timhall/10g/sysaux_occupants.sql @@ -0,0 +1,16 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/sysaux_occupants.sql +-- Author : Tim Hall +-- Description : Displays information about the contents of the SYSAUX tablespace. +-- Requirements : Access to the v$ views. +-- Call Syntax : @sysaux_occupants +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +COLUMN occupant_name FORMAT A30 +COLUMN schema_name FORMAT A20 + +SELECT occupant_name, + schema_name, + space_usage_kbytes +FROM v$sysaux_occupants +ORDER BY occupant_name; diff --git a/timhall/10g/test_calendar_string.sql b/timhall/10g/test_calendar_string.sql new file mode 100644 index 0000000..5a6ea92 --- /dev/null +++ b/timhall/10g/test_calendar_string.sql @@ -0,0 +1,35 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/test_calendar_string.sql +-- Author : Tim Hall +-- Description : Displays the schedule associated with a calendar string. +-- Requirements : Access to the DBMS_SCHEDULER package. +-- Call Syntax : @test_calendar_string (frequency) (interations) +-- @test_calendar_string 'freq=hourly; byminute=0,30; bysecond=0;' 5 +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- + +SET SERVEROUTPUT ON; +SET VERIFY OFF +ALTER SESSION SET nls_timestamp_format = 'DD-MON-YYYY HH24:MI:SS'; + +DECLARE + l_calendar_string VARCHAR2(100) := '&1'; + l_iterations NUMBER := &2; + + l_start_date TIMESTAMP := TO_TIMESTAMP('01-JAN-2004 03:04:32', + 'DD-MON-YYYY HH24:MI:SS'); + l_return_date_after TIMESTAMP := l_start_date; + l_next_run_date TIMESTAMP; +BEGIN + FOR i IN 1 .. l_iterations LOOP + DBMS_SCHEDULER.evaluate_calendar_string( + calendar_string => l_calendar_string, + start_date => l_start_date, + return_date_after => l_return_date_after, + next_run_date => l_next_run_date); + + DBMS_OUTPUT.put_line('Next Run Date: ' || l_next_run_date); + l_return_date_after := l_next_run_date; + END LOOP; +END; +/ \ No newline at end of file diff --git a/timhall/10g/window_groups.sql b/timhall/10g/window_groups.sql new file mode 100644 index 0000000..56b54bb --- /dev/null +++ b/timhall/10g/window_groups.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/window_groups.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about window groups. +-- Requirements : Access to the DBA views. +-- Call Syntax : @window_groups +-- Last Modified: 05/11/2004 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 250 + +COLUMN comments FORMAT A40 + +SELECT window_group_name, + enabled, + number_of_windows, + comments +FROM dba_scheduler_window_groups +ORDER BY window_group_name; + +SELECT window_group_name, + window_name +FROM dba_scheduler_wingroup_members +ORDER BY window_group_name, window_name; diff --git a/timhall/10g/windows.sql b/timhall/10g/windows.sql new file mode 100644 index 0000000..d825eba --- /dev/null +++ b/timhall/10g/windows.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/windows.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about windows. +-- Requirements : Access to the DBA views. +-- Call Syntax : @windows +-- Last Modified: 05/11/2004 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 250 + +COLUMN comments FORMAT A40 + +SELECT window_name, + resource_plan, + enabled, + active, + comments +FROM dba_scheduler_windows +ORDER BY window_name; diff --git a/timhall/11g/admin_privs.sql b/timhall/11g/admin_privs.sql new file mode 100644 index 0000000..8ae145a --- /dev/null +++ b/timhall/11g/admin_privs.sql @@ -0,0 +1,12 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/admin_privs.sql +-- Author : Tim Hall +-- Description : Displays the users who currently have admin privileges. +-- Requirements : Access to the V$ views. +-- Call Syntax : @min_datafile_size +-- Last Modified: 30/11/2011 +-- ----------------------------------------------------------------------------------- + +SELECT * +FROM v$pwfile_users +ORDER BY username; \ No newline at end of file diff --git a/timhall/11g/autotask_change_window_schedules.sql b/timhall/11g/autotask_change_window_schedules.sql new file mode 100644 index 0000000..1ab7466 --- /dev/null +++ b/timhall/11g/autotask_change_window_schedules.sql @@ -0,0 +1,48 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/autotask_change_window_schedules.sql +-- Author : Tim Hall +-- Description : Use this script to alter the autotask window schedules. +-- Requirements : Access to the DBA views. +-- Call Syntax : @autotask_change_window_schedules.sql +-- Last Modified: 14-JUL-2016 +-- ----------------------------------------------------------------------------------- + +DECLARE + TYPE t_window_tab IS TABLE OF VARCHAR2(30) + INDEX BY BINARY_INTEGER; + + l_tab t_window_tab; + l_repeat_interval VARCHAR2(100); + l_duration NUMBER; +BEGIN + + -- Windows of interest. + l_tab(1) := 'SYS.MONDAY_WINDOW'; + l_tab(2) := 'SYS.TUESDAY_WINDOW'; + l_tab(3) := 'SYS.WEDNESDAY_WINDOW'; + l_tab(4) := 'SYS.THURSDAY_WINDOW'; + l_tab(5) := 'SYS.FRIDAY_WINDOW'; + --l_tab(6) := 'SYS.SATURDAY_WINDOW'; + --l_tab(7) := 'SYS.SUNDAY_WINDOW'; + + -- Adjust as required. + l_repeat_interval := 'freq=weekly; byday=mon; byhour=12; byminute=0; bysecond=0;'; + l_duration := 120; -- minutes + + FOR i IN l_tab.FIRST .. l_tab.LAST LOOP + DBMS_SCHEDULER.disable(name => l_tab(i), force => TRUE); + + DBMS_SCHEDULER.set_attribute( + name => l_tab(i), + attribute => 'REPEAT_INTERVAL', + value => l_repeat_interval); + + DBMS_SCHEDULER.set_attribute( + name => l_tab(i), + attribute => 'DURATION', + value => numtodsinterval(l_duration, 'minute')); + + DBMS_SCHEDULER.enable(name => l_tab(i)); + END LOOP; +END; +/ diff --git a/timhall/11g/autotask_job_history.sql b/timhall/11g/autotask_job_history.sql new file mode 100644 index 0000000..1e64589 --- /dev/null +++ b/timhall/11g/autotask_job_history.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/autotask_job_history.sql +-- Author : Tim Hall +-- Description : Displays the job history for the automatic maintenance tasks. +-- Requirements : Access to the DBA views. +-- Call Syntax : @autotask_job_history.sql +-- Last Modified: 14-JUL-2016 +-- ----------------------------------------------------------------------------------- + +COLUMN client_name FORMAT A40 +COLUMN window_name FORMAT A20 +COLUMN job_start_time FORMAT A40 +COLUMN job_duration FORMAT A20 +COLUMN job_status FORMAT A10 + +SELECT client_name, + window_name, + job_start_time, + job_duration, + job_status, + job_error +FROM dba_autotask_job_history +ORDER BY job_start_time; + +COLUMN FORMAT DEFAULT diff --git a/timhall/11g/autotask_schedule.sql b/timhall/11g/autotask_schedule.sql new file mode 100644 index 0000000..e1e3acd --- /dev/null +++ b/timhall/11g/autotask_schedule.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/autotask_schedule.sql +-- Author : Tim Hall +-- Description : Displays the window schedule the automatic maintenance tasks. +-- Requirements : Access to the DBA views. +-- Call Syntax : @autotask_schedule.sql +-- Last Modified: 14-JUL-2016 +-- ----------------------------------------------------------------------------------- + +COLUMN window_name FORMAT A20 +COLUMN start_time FORMAT A40 +COLUMN duration FORMAT A20 + +SELECT * +FROM dba_autotask_schedule +ORDER BY start_time; + + +COLUMN FORMAT DEFAULT diff --git a/timhall/11g/database_block_corruption.sql b/timhall/11g/database_block_corruption.sql new file mode 100644 index 0000000..77acf1b --- /dev/null +++ b/timhall/11g/database_block_corruption.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/database_block_corruption.sql +-- Author : Tim Hall +-- Description : Displays the users who currently have admin privileges. +-- Requirements : Access to the V$ and DBA views. +-- Assumes a RMAN VALIDATE has been run against a datafile, tablespace +-- or the whole database before this query is run. +-- Call Syntax : @database_block_corruption +-- Last Modified: 29/11/2018 +-- ----------------------------------------------------------------------------------- + +COLUMN owner FORMAT A30 +COLUMN segment_name FORMAT A30 + +SELECT DISTINCT owner, segment_name +FROM v$database_block_corruption dbc + JOIN dba_extents e ON dbc.file# = e.file_id AND dbc.block# BETWEEN e.block_id and e.block_id+e.blocks-1 +ORDER BY 1,2; diff --git a/timhall/11g/default_passwords.sql b/timhall/11g/default_passwords.sql new file mode 100644 index 0000000..e0c8782 --- /dev/null +++ b/timhall/11g/default_passwords.sql @@ -0,0 +1,13 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/default_passwords.sql +-- Author : Tim Hall +-- Description : Displays users with default passwords. +-- Requirements : Access to the DBA views. +-- Call Syntax : @default_passwords +-- Last Modified: 26-NOV-2011 +-- ----------------------------------------------------------------------------------- + +SELECT a.username, b.account_status +FROM dba_users_with_defpwd a + JOIN dba_users b ON a.username = b.username +ORDER BY 1; diff --git a/timhall/11g/diag_info.sql b/timhall/11g/diag_info.sql new file mode 100644 index 0000000..ba3adc2 --- /dev/null +++ b/timhall/11g/diag_info.sql @@ -0,0 +1,14 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/diag_info.sql +-- Author : Tim Hall +-- Description : Displays the contents of the v$diag_info view. +-- Requirements : Access to the V$ views. +-- Call Syntax : @diag_info +-- Last Modified: 23/08/2008 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +COLUMN name FORMAT A30 +COLUMN value FORMAT A110 + +SELECT * +FROM v$diag_info; diff --git a/timhall/11g/extended_stats.sql b/timhall/11g/extended_stats.sql new file mode 100644 index 0000000..c8bbbe2 --- /dev/null +++ b/timhall/11g/extended_stats.sql @@ -0,0 +1,16 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/extended_stats.sql +-- Author : Tim Hall +-- Description : Provides information about extended statistics. +-- Requirements : Access to the DBA views. +-- Call Syntax : @extended_stats +-- Last Modified: 30/11/2011 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +COLUMN owner FORMAT A20 +COLUMN extension_name FORMAT A15 +COLUMN extension FORMAT A50 + +SELECT owner, table_name, extension_name, extension +FROM dba_stat_extensions +ORDER by owner, table_name; \ No newline at end of file diff --git a/timhall/11g/fda.sql b/timhall/11g/fda.sql new file mode 100644 index 0000000..9ba66fd --- /dev/null +++ b/timhall/11g/fda.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/fda.sql +-- Author : Tim Hall +-- Description : Displays information about flashback data archives. +-- Requirements : Access to the DBA views. +-- Call Syntax : @fda +-- Last Modified: 06-JAN-2015 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 150 + +COLUMN owner_name FORMAT A20 +COLUMN flashback_archive_name FORMAT A22 +COLUMN create_time FORMAT A20 +COLUMN last_purge_time FORMAT A20 + +SELECT owner_name, + flashback_archive_name, + flashback_archive#, + retention_in_days, + TO_CHAR(create_time, 'DD-MON-YYYY HH24:MI:SS') AS create_time, + TO_CHAR(last_purge_time, 'DD-MON-YYYY HH24:MI:SS') AS last_purge_time, + status +FROM dba_flashback_archive +ORDER BY owner_name, flashback_archive_name; diff --git a/timhall/11g/fda_tables.sql b/timhall/11g/fda_tables.sql new file mode 100644 index 0000000..c72f65c --- /dev/null +++ b/timhall/11g/fda_tables.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/fda_tables.sql +-- Author : Tim Hall +-- Description : Displays information about flashback data archives. +-- Requirements : Access to the DBA views. +-- Call Syntax : @fda_tables +-- Last Modified: 06-JAN-2015 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 150 + +COLUMN owner_name FORMAT A20 +COLUMN table_name FORMAT A20 +COLUMN flashback_archive_name FORMAT A22 +COLUMN archive_table_name FORMAT A20 + +SELECT owner_name, + table_name, + flashback_archive_name, + archive_table_name, + status +FROM dba_flashback_archive_tables +ORDER BY owner_name, table_name; diff --git a/timhall/11g/fda_ts.sql b/timhall/11g/fda_ts.sql new file mode 100644 index 0000000..07cd1bd --- /dev/null +++ b/timhall/11g/fda_ts.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/fda_ts.sql +-- Author : Tim Hall +-- Description : Displays information about flashback data archives. +-- Requirements : Access to the DBA views. +-- Call Syntax : @fda_ts +-- Last Modified: 06-JAN-2015 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 150 + +COLUMN flashback_archive_name FORMAT A22 +COLUMN tablespace_name FORMAT A20 +COLUMN quota_in_mb FORMAT A11 + +SELECT flashback_archive_name, + flashback_archive#, + tablespace_name, + quota_in_mb +FROM dba_flashback_archive_ts +ORDER BY flashback_archive_name; diff --git a/timhall/11g/identify_trace_file.sql b/timhall/11g/identify_trace_file.sql new file mode 100644 index 0000000..8829050 --- /dev/null +++ b/timhall/11g/identify_trace_file.sql @@ -0,0 +1,14 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/identify_trace_file.sql +-- Author : Tim Hall +-- Description : Displays the name of the trace file associated with the current session. +-- Requirements : Access to the V$ views. +-- Call Syntax : @identify_trace_file +-- Last Modified: 23/08/2008 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 100 +COLUMN value FORMAT A60 + +SELECT value +FROM v$diag_info +WHERE name = 'Default Trace File'; \ No newline at end of file diff --git a/timhall/11g/job_credentials.sql b/timhall/11g/job_credentials.sql new file mode 100644 index 0000000..b72135f --- /dev/null +++ b/timhall/11g/job_credentials.sql @@ -0,0 +1,17 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/job_credentials.sql +-- Author : Tim Hall +-- Description : Displays scheduler information about job credentials. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_credentials +-- Last Modified: 23/08/2008 +-- ----------------------------------------------------------------------------------- +COLUMN credential_name FORMAT A25 +COLUMN username FORMAT A20 +COLUMN windows_domain FORMAT A20 + +SELECT credential_name, + username, + windows_domain +FROM dba_scheduler_credentials +ORDER BY credential_name; diff --git a/timhall/11g/job_output_file.sql b/timhall/11g/job_output_file.sql new file mode 100644 index 0000000..fdddeb8 --- /dev/null +++ b/timhall/11g/job_output_file.sql @@ -0,0 +1,42 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/job_output_file.sql +-- Author : DR Timothy S Hall +-- Description : Displays scheduler job information for previous runs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_output_file (job-name) (credential-name) +-- Last Modified: 06/06/2014 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF + +SET SERVEROUTPUT ON +DECLARE + l_clob CLOB; + l_additional_info VARCHAR2(4000); + l_external_log_id VARCHAR2(50); +BEGIN + SELECT additional_info, external_log_id + INTO l_additional_info, l_external_log_id + FROM (SELECT log_id, + additional_info, + REGEXP_SUBSTR(additional_info,'job[_0-9]*') AS external_log_id + FROM dba_scheduler_job_run_details + WHERE job_name = UPPER('&1') + ORDER BY log_id DESC) + WHERE ROWNUM = 1; + + DBMS_OUTPUT.put_line('ADDITIONAL_INFO: ' || l_additional_info); + DBMS_OUTPUT.put_line('EXTERNAL_LOG_ID: ' || l_external_log_id); + + DBMS_LOB.createtemporary(l_clob, FALSE); + + DBMS_SCHEDULER.get_file( + source_file => l_external_log_id ||'_stdout', + credential_name => UPPER('&2'), + file_contents => l_clob, + source_host => NULL); + + DBMS_OUTPUT.put_line('stdout:'); + DBMS_OUTPUT.put_line(l_clob); +END; +/ diff --git a/timhall/11g/job_run_details.sql b/timhall/11g/job_run_details.sql new file mode 100644 index 0000000..45e8f34 --- /dev/null +++ b/timhall/11g/job_run_details.sql @@ -0,0 +1,35 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/job_run_details.sql +-- Author : DR Timothy S Hall +-- Description : Displays scheduler job information for previous runs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @job_run_details (job-name | all) +-- Last Modified: 06/06/2014 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 300 VERIFY OFF + +COLUMN log_date FORMAT A35 +COLUMN owner FORMAT A20 +COLUMN job_name FORMAT A30 +COLUMN error FORMAT A20 +COLUMN req_start_date FORMAT A35 +COLUMN actual_start_date FORMAT A35 +COLUMN run_duration FORMAT A20 +COLUMN credential_owner FORMAT A20 +COLUMN credential_name FORMAT A20 +COLUMN additional_info FORMAT A30 + +SELECT log_date, + owner, + job_name, + status + error, + req_start_date, + actual_start_date, + run_duration, + credential_owner, + credential_name, + additional_info +FROM dba_scheduler_job_run_details +WHERE job_name = DECODE(UPPER('&1'), 'ALL', job_name, UPPER('&1')) +ORDER BY log_date; diff --git a/timhall/11g/memory_dynamic_components.sql b/timhall/11g/memory_dynamic_components.sql new file mode 100644 index 0000000..34eaead --- /dev/null +++ b/timhall/11g/memory_dynamic_components.sql @@ -0,0 +1,17 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/memory_dynamic_components.sql +-- Author : Tim Hall +-- Description : Provides information about dynamic memory components. +-- Requirements : Access to the v$ views. +-- Call Syntax : @memory_dynamic_components +-- Last Modified: 09/05/2017 +-- ----------------------------------------------------------------------------------- +COLUMN component FORMAT A30 + +SELECT component, + ROUND(current_size/1024/1024) AS current_size_mb, + ROUND(min_size/1024/1024) AS min_size_mb, + ROUND(max_size/1024/1024) AS max_size_mb +FROM v$memory_dynamic_components +WHERE current_size != 0 +ORDER BY component; diff --git a/timhall/11g/memory_resize_ops.sql b/timhall/11g/memory_resize_ops.sql new file mode 100644 index 0000000..4e193de --- /dev/null +++ b/timhall/11g/memory_resize_ops.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/memory_resize_ops.sql +-- Author : Tim Hall +-- Description : Provides information about memory resize operations. +-- Requirements : Access to the v$ views. +-- Call Syntax : @memory_resize_ops +-- Last Modified: 09/05/2017 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 + +COLUMN parameter FORMAT A25 + +SELECT start_time, + end_time, + component, + oper_type, + oper_mode, + parameter, + ROUND(initial_size/1024/1024) AS initial_size_mb, + ROUND(target_size/1024/1024) AS target_size_mb, + ROUND(final_size/1024/1024) AS final_size_mb, + status +FROM v$memory_resize_ops +ORDER BY start_time; diff --git a/timhall/11g/memory_target_advice.sql b/timhall/11g/memory_target_advice.sql new file mode 100644 index 0000000..3597e7d --- /dev/null +++ b/timhall/11g/memory_target_advice.sql @@ -0,0 +1,11 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/memory_target_advice.sql +-- Author : Tim Hall +-- Description : Provides information to help tune the MEMORY_TARGET parameter. +-- Requirements : Access to the DBA views. +-- Call Syntax : @memory_target_advice +-- Last Modified: 23/08/2008 +-- ----------------------------------------------------------------------------------- +SELECT * +FROM v$memory_target_advice +ORDER BY memory_size; \ No newline at end of file diff --git a/timhall/11g/network_acl_privileges.sql b/timhall/11g/network_acl_privileges.sql new file mode 100644 index 0000000..883716b --- /dev/null +++ b/timhall/11g/network_acl_privileges.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/network_acl_privileges.sql +-- Author : Tim Hall +-- Description : Displays privileges for the network ACLs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @network_acl_privileges +-- Last Modified: 30/11/2011 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 + +COLUMN acl FORMAT A50 +COLUMN principal FORMAT A20 +COLUMN privilege FORMAT A10 + +SELECT acl, + principal, + privilege, + is_grant, + TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date, + TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date +FROM dba_network_acl_privileges +ORDER BY acl, principal, privilege; + +SET LINESIZE 80 diff --git a/timhall/11g/network_acls.sql b/timhall/11g/network_acls.sql new file mode 100644 index 0000000..936870b --- /dev/null +++ b/timhall/11g/network_acls.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/network_acls.sql +-- Author : Tim Hall +-- Description : Displays information about network ACLs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @network_acls +-- Last Modified: 30/11/2011 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 + +COLUMN host FORMAT A40 +COLUMN acl FORMAT A50 + +SELECT host, lower_port, upper_port, acl +FROM dba_network_acls +ORDER BY host; + +SET LINESIZE 80 \ No newline at end of file diff --git a/timhall/11g/result_cache_objects.sql b/timhall/11g/result_cache_objects.sql new file mode 100644 index 0000000..e2b9a4a --- /dev/null +++ b/timhall/11g/result_cache_objects.sql @@ -0,0 +1,12 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/result_cache_objects.sql +-- Author : Tim Hall +-- Description : Displays information about the objects in the result cache. +-- Requirements : Access to the V$ views. +-- Call Syntax : @result_cache_objects +-- Last Modified: 07/11/2012 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 1000 + +SELECT * +FROM v$result_cache_objects; diff --git a/timhall/11g/result_cache_report.sql b/timhall/11g/result_cache_report.sql new file mode 100644 index 0000000..1a6094c --- /dev/null +++ b/timhall/11g/result_cache_report.sql @@ -0,0 +1,11 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/result_cache_report.sql +-- Author : Tim Hall +-- Description : Displays the result cache report. +-- Requirements : Access to the DBMS_RESULT_CACHE package. +-- Call Syntax : @result_cache_report +-- Last Modified: 07/11/2012 +-- ----------------------------------------------------------------------------------- + +SET SERVEROUTPUT ON +EXEC DBMS_RESULT_CACHE.memory_report(detailed => true); diff --git a/timhall/11g/result_cache_statistics.sql b/timhall/11g/result_cache_statistics.sql new file mode 100644 index 0000000..0ddf587 --- /dev/null +++ b/timhall/11g/result_cache_statistics.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/result_cache_statistics.sql +-- Author : Tim Hall +-- Description : Displays result cache statistics. +-- Requirements : Access to the V$ views. +-- Call Syntax : @result_cache_statistics +-- Last Modified: 07/11/2012 +-- ----------------------------------------------------------------------------------- + +COLUMN name FORMAT A30 +COLUMN value FORMAT A30 + +SELECT id, + name, + value +FROM v$result_cache_statistics +ORDER BY id; + +CLEAR COLUMNS \ No newline at end of file diff --git a/timhall/11g/result_cache_status.sql b/timhall/11g/result_cache_status.sql new file mode 100644 index 0000000..1db72e5 --- /dev/null +++ b/timhall/11g/result_cache_status.sql @@ -0,0 +1,10 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/result_cache_status.sql +-- Author : Tim Hall +-- Description : Displays the status of the result cache. +-- Requirements : Access to the DBMS_RESULT_CACHE package. +-- Call Syntax : @result_cache_status +-- Last Modified: 07/11/2012 +-- ----------------------------------------------------------------------------------- + +SELECT DBMS_RESULT_CACHE.status FROM dual; \ No newline at end of file diff --git a/timhall/11g/session_fix.sql b/timhall/11g/session_fix.sql new file mode 100644 index 0000000..b51b2e6 --- /dev/null +++ b/timhall/11g/session_fix.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/session_fix.sql +-- Author : Tim Hall +-- Description : Provides information about session fixes for the specified phrase and version. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_fix (session_id | all) (phrase | all) (version | all) +-- Last Modified: 30/11/2011 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 300 + +COLUMN sql_feature FORMAT A35 +COLUMN optimizer_feature_enable FORMAT A9 + +SELECT * +FROM v$session_fix_control +WHERE session_id = DECODE('&1', 'all', session_id, '&1') +AND LOWER(description) LIKE DECODE('&2', 'all', '%', '%&2%') +AND optimizer_feature_enable = DECODE('&3', 'all', optimizer_feature_enable, '&3'); \ No newline at end of file diff --git a/timhall/11g/statistics_global_prefs.sql b/timhall/11g/statistics_global_prefs.sql new file mode 100644 index 0000000..6987176 --- /dev/null +++ b/timhall/11g/statistics_global_prefs.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/statistics_global_prefs.sql +-- Author : Tim Hall +-- Description : Displays the top-level global statistics preferences. +-- Requirements : Access to the DBMS_STATS package. +-- Call Syntax : @statistics_global_prefs +-- Last Modified: 13-DEC-2016 +-- ----------------------------------------------------------------------------------- + +SET SERVEROUTPUT ON +DECLARE + PROCEDURE display(p_param IN VARCHAR2) AS + l_result VARCHAR2(50); + BEGIN + l_result := DBMS_STATS.get_prefs (pname => p_param); + DBMS_OUTPUT.put_line(RPAD(p_param, 30, ' ') || ' : ' || l_result); + END; +BEGIN + display('AUTOSTATS_TARGET'); + display('CASCADE'); + display('DEGREE'); + display('ESTIMATE_PERCENT'); + display('METHOD_OPT'); + display('NO_INVALIDATE'); + display('GRANULARITY'); + display('PUBLISH'); + display('INCREMENTAL'); + display('STALE_PERCENT'); +END; +/ diff --git a/timhall/11g/system_fix.sql b/timhall/11g/system_fix.sql new file mode 100644 index 0000000..13e4d80 --- /dev/null +++ b/timhall/11g/system_fix.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/system_fix.sql +-- Author : Tim Hall +-- Description : Provides information about system fixes for the specified phrase and version. +-- Requirements : Access to the V$ views. +-- Call Syntax : @system_fix (phrase | all) (version | all) +-- Last Modified: 30/11/2011 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 300 + +COLUMN sql_feature FORMAT A35 +COLUMN optimizer_feature_enable FORMAT A9 + +SELECT * +FROM v$system_fix_control +WHERE LOWER(description) LIKE DECODE('&1', 'all', '%', '%&1%') +AND optimizer_feature_enable = DECODE('&2', 'all', optimizer_feature_enable, '&2'); \ No newline at end of file diff --git a/timhall/11g/system_fix_count.sql b/timhall/11g/system_fix_count.sql new file mode 100644 index 0000000..781c739 --- /dev/null +++ b/timhall/11g/system_fix_count.sql @@ -0,0 +1,13 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/system_fix_count.sql +-- Author : Tim Hall +-- Description : Provides information about system fixes per version. +-- Requirements : Access to the V$ views. +-- Call Syntax : @system_fix_count +-- Last Modified: 30/11/2011 +-- ----------------------------------------------------------------------------------- +SELECT optimizer_feature_enable, + COUNT(*) +FROM v$system_fix_control +GROUP BY optimizer_feature_enable +ORDER BY optimizer_feature_enable; \ No newline at end of file diff --git a/timhall/11g/temp_free_space.sql b/timhall/11g/temp_free_space.sql new file mode 100644 index 0000000..3ab5f73 --- /dev/null +++ b/timhall/11g/temp_free_space.sql @@ -0,0 +1,10 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/temp_free_space.sql +-- Author : Tim Hall +-- Description : Displays information about temporary tablespace usage. +-- Requirements : Access to the DBA views. +-- Call Syntax : @temp_free_space +-- Last Modified: 23-AUG-2008 +-- ----------------------------------------------------------------------------------- +SELECT * +FROM dba_temp_free_space; \ No newline at end of file diff --git a/timhall/12c/cdb_resource_plan_directives.sql b/timhall/12c/cdb_resource_plan_directives.sql new file mode 100644 index 0000000..23e5f82 --- /dev/null +++ b/timhall/12c/cdb_resource_plan_directives.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/cdb_resource_plan_directives.sql +-- Author : Tim Hall +-- Description : Displays CDB resource plan directives. +-- Requirements : Access to the DBA views. +-- Call Syntax : @cdb_resource_plan_directives.sql (plan-name or all) +-- Last Modified: 22-MAR-2014 +-- ----------------------------------------------------------------------------------- + +COLUMN plan FORMAT A30 +COLUMN pluggable_database FORMAT A25 +SET LINESIZE 100 VERIFY OFF + +SELECT plan, + pluggable_database, + shares, + utilization_limit AS util, + parallel_server_limit AS parallel +FROM dba_cdb_rsrc_plan_directives +WHERE plan = DECODE(UPPER('&1'), 'ALL', plan, UPPER('&1')) +ORDER BY plan, pluggable_database; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/12c/cdb_resource_plans.sql b/timhall/12c/cdb_resource_plans.sql new file mode 100644 index 0000000..3548c15 --- /dev/null +++ b/timhall/12c/cdb_resource_plans.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/cdb_resource_plans.sql +-- Author : Tim Hall +-- Description : Displays CDB resource plans. +-- Requirements : Access to the DBA views. +-- Call Syntax : @cdb_resource_plans.sql +-- Last Modified: 22-MAR-2014 +-- ----------------------------------------------------------------------------------- + +COLUMN plan FORMAT A30 +COLUMN comments FORMAT A30 +COLUMN status FORMAT A10 +SET LINESIZE 100 + +SELECT plan_id, + plan, + comments, + status, + mandatory +FROM dba_cdb_rsrc_plans +ORDER BY plan; diff --git a/timhall/12c/cdb_resource_profile_directives.sql b/timhall/12c/cdb_resource_profile_directives.sql new file mode 100644 index 0000000..89f1e43 --- /dev/null +++ b/timhall/12c/cdb_resource_profile_directives.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/cdb_resource_profile_directives.sql +-- Author : Tim Hall +-- Description : Displays CDB resource profile directives. +-- Requirements : Access to the DBA views. +-- Call Syntax : @cdb_resource_profile_directives.sql (plan-name or all) +-- Last Modified: 10-JAN-2017 +-- ----------------------------------------------------------------------------------- + +COLUMN plan FORMAT A30 +COLUMN pluggable_database FORMAT A25 +COLUMN profile FORMAT A25 +SET LINESIZE 150 VERIFY OFF + +SELECT plan, + pluggable_database, + profile, + shares, + utilization_limit AS util, + parallel_server_limit AS parallel +FROM dba_cdb_rsrc_plan_directives +WHERE plan = DECODE(UPPER('&1'), 'ALL', plan, UPPER('&1')) +ORDER BY plan, pluggable_database, profile; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/12c/clustering_dimensions.sql b/timhall/12c/clustering_dimensions.sql new file mode 100644 index 0000000..2ba3695 --- /dev/null +++ b/timhall/12c/clustering_dimensions.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/clustering_dimensions.sql +-- Author : Tim Hall +-- Description : Display clustering dimensions in the specified schema, or all schemas. +-- Call Syntax : @clustering_dimensions (schema or all) +-- Last Modified: 24/12/2020 +-- ----------------------------------------------------------------------------------- +set linesize 200 verify off trimspool on +column owner form a30 +column table_name form a30 +column dimension_owner form a30 +column dimension_name form a30 + +select owner, + table_name, + dimension_owner, + dimension_name +from dba_clustering_dimensions +where owner = decode(upper('&1'), 'ALL', owner, upper('&1')) +order by owner, table_name; diff --git a/timhall/12c/clustering_joins.sql b/timhall/12c/clustering_joins.sql new file mode 100644 index 0000000..a009839 --- /dev/null +++ b/timhall/12c/clustering_joins.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/clustering_joins.sql +-- Author : Tim Hall +-- Description : Display clustering joins in the specified schema, or all schemas. +-- Call Syntax : @clustering_joins (schema or all) +-- Last Modified: 24/12/2020 +-- ----------------------------------------------------------------------------------- +set linesize 260 verify off trimspool on +column owner format a30 +column table_name form a30 +column tab1_owner form a30 +column tab1_name form a30 +column tab1_column form a30 +column tab2_owner form a30 +column tab2_name form a30 +column tab2_column form a31 + +select owner, + table_name, + tab1_owner, + tab1_name, + tab1_column, + tab2_owner, + tab2_name, + tab2_column +from dba_clustering_joins +where owner = decode(upper('&1'), 'ALL', owner, upper('&1')) +order by owner, table_name; diff --git a/timhall/12c/clustering_keys.sql b/timhall/12c/clustering_keys.sql new file mode 100644 index 0000000..bbb3dad --- /dev/null +++ b/timhall/12c/clustering_keys.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/clustering_keys.sql +-- Author : Tim Hall +-- Description : Display clustering keys in the specified schema, or all schemas. +-- Call Syntax : @clustering_keys (schema or all) +-- Last Modified: 24/12/2020 +-- ----------------------------------------------------------------------------------- +set linesize 200 verify off trimspool on +column owner format a30 +column table_name format a30 +column detail_owner format a30 +column detail_name format a30 +column detail_column format a30 + +select owner, + table_name, + detail_owner, + detail_name, + detail_column, + position, + groupid +from dba_clustering_keys +where owner = decode(upper('&1'), 'ALL', owner, upper('&1')) +order by owner, table_name; diff --git a/timhall/12c/clustering_tables.sql b/timhall/12c/clustering_tables.sql new file mode 100644 index 0000000..6c7ae8b --- /dev/null +++ b/timhall/12c/clustering_tables.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/clustering_tables.sql +-- Author : Tim Hall +-- Description : Display clustering tables in the specified schema, or all schemas. +-- Call Syntax : @clustering_tables (schema or all) +-- Last Modified: 24/12/2020 +-- ----------------------------------------------------------------------------------- +set linesize 200 verify off trimspool on +column owner format a30 +column table_name format a30 +column clustering_type format a25 +column on_load format a7 +column on_datamovement format a15 +column valid format a5 +column with_zonemap format a12 +column last_load_clst format a30 +column last_datamove_clst format a30 + +select owner, + table_name, + clustering_type, + on_load, + on_datamovement, + valid, + with_zonemap, + last_load_clst, + last_datamove_clst +from dba_clustering_tables +where owner = decode(upper('&1'), 'ALL', owner, upper('&1')) +order by owner, table_name; diff --git a/timhall/12c/credentials.sql b/timhall/12c/credentials.sql new file mode 100644 index 0000000..8db6692 --- /dev/null +++ b/timhall/12c/credentials.sql @@ -0,0 +1,17 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/credentials.sql +-- Author : Tim Hall +-- Description : Displays information about credentials. +-- Requirements : Access to the DBA views. +-- Call Syntax : @credentials +-- Last Modified: 18/12/2013 +-- ----------------------------------------------------------------------------------- +COLUMN credential_name FORMAT A25 +COLUMN username FORMAT A20 +COLUMN windows_domain FORMAT A20 + +SELECT credential_name, + username, + windows_domain +FROM dba_credentials +ORDER BY credential_name; \ No newline at end of file diff --git a/timhall/12c/host_aces.sql b/timhall/12c/host_aces.sql new file mode 100644 index 0000000..e8a3a82 --- /dev/null +++ b/timhall/12c/host_aces.sql @@ -0,0 +1,31 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/host_aces.sql +-- Author : Tim Hall +-- Description : Displays information about host ACEs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @host_aces +-- Last Modified: 10/09/2014 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN host FORMAT A20 +COLUMN principal FORMAT A30 +COLUMN privilege FORMAT A30 +COLUMN start_date FORMAT A11 +COLUMN end_date FORMAT A11 + +SELECT host, + lower_port, + upper_port, + ace_order, + TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date, + TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date, + grant_type, + inverted_principal, + principal, + principal_type, + privilege +FROM dba_host_aces +ORDER BY host, ace_order; + +SET LINESIZE 80 \ No newline at end of file diff --git a/timhall/12c/host_acls.sql b/timhall/12c/host_acls.sql new file mode 100644 index 0000000..85b4490 --- /dev/null +++ b/timhall/12c/host_acls.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/host_acls.sql +-- Author : Tim Hall +-- Description : Displays information about host ACLs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @host_acls +-- Last Modified: 10/09/2014 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 + +COLUMN acl FORMAT A50 +COLUMN host FORMAT A20 +COLUMN acl_owner FORMAT A10 + +SELECT HOST, + LOWER_PORT, + UPPER_PORT, + ACL, + ACLID, + ACL_OWNER +FROM dba_host_acls +ORDER BY host; + +SET LINESIZE 80 \ No newline at end of file diff --git a/timhall/12c/lockdown_profiles.sql b/timhall/12c/lockdown_profiles.sql new file mode 100644 index 0000000..3c3903c --- /dev/null +++ b/timhall/12c/lockdown_profiles.sql @@ -0,0 +1,37 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/lockdown_profiles.sql +-- Author : Tim Hall +-- Description : Displays information about lockdown profiles. +-- Requirements : Access to the DBA views. +-- Call Syntax : @lockdown_profiles +-- Last Modified: 05/01/2019 - Increase the LINESIZE setting and include PDB ID and name. +-- Switch to LEFT OUTER JOIN. Alter column order. +-- ----------------------------------------------------------------------------------- +SET LINESIZE 250 + +COLUMN pdb_name FORMAT A30 +COLUMN profile_name FORMAT A30 +COLUMN rule_type FORMAT A20 +COLUMN rule FORMAT A20 +COLUMN clause FORMAT A20 +COLUMN clause_option FORMAT A20 +COLUMN option_value FORMAT A20 +COLUMN min_value FORMAT A20 +COLUMN max_value FORMAT A20 +COLUMN list FORMAT A20 + +SELECT lp.con_id, + p.pdb_name, + lp.profile_name, + lp.rule_type, + lp.status, + lp.rule, + lp.clause, + lp.clause_option, + lp.option_value, + lp.min_value, + lp.max_value, + lp.list +FROM cdb_lockdown_profiles lp + LEFT OUTER JOIN cdb_pdbs p ON lp.con_id = p.con_id +ORDER BY 1, 3; diff --git a/timhall/12c/login.sql b/timhall/12c/login.sql new file mode 100644 index 0000000..3219459 --- /dev/null +++ b/timhall/12c/login.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/login.sql +-- Author : Tim Hall +-- Description : Resets the SQL*Plus prompt when a new connection is made. +-- Includes PDB:CDB. +-- Call Syntax : @login +-- Last Modified: 21/04/2014 +-- ----------------------------------------------------------------------------------- +SET FEEDBACK OFF +SET TERMOUT OFF + +COLUMN X NEW_VALUE Y +SELECT LOWER(USER || '@' || + SYS_CONTEXT('userenv', 'con_name') || ':' || + SYS_CONTEXT('userenv', 'instance_name')) X +FROM dual; +SET SQLPROMPT '&Y> ' + +ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'; +ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YYYY HH24:MI:SS.FF'; + +SET TERMOUT ON +SET FEEDBACK ON +SET LINESIZE 100 +SET TAB OFF +SET TRIM ON +SET TRIMSPOOL ON \ No newline at end of file diff --git a/timhall/12c/pdb_spfiles.sql b/timhall/12c/pdb_spfiles.sql new file mode 100644 index 0000000..c9cc2f1 --- /dev/null +++ b/timhall/12c/pdb_spfiles.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/pdb_spfiles.sql +-- Author : Tim Hall +-- Description : Displays information from the pdb_spfile$ table. +-- Requirements : Access to pdb_spfile$ and v$pdbs. +-- Call Syntax : @pdb_spfiles +-- Last Modified: 04/05/2021 +-- ----------------------------------------------------------------------------------- +set linesize 120 +column pdb_name format a10 +column name format a30 +column value$ format a30 + +select ps.db_uniq_name, + ps.pdb_uid, + p.name as pdb_name, + ps.name, + ps.value$ +from pdb_spfile$ ps + join v$pdbs p on ps.pdb_uid = p.con_uid +order by 1, 2, 3; diff --git a/timhall/12c/pdbs.sql b/timhall/12c/pdbs.sql new file mode 100644 index 0000000..a31787f --- /dev/null +++ b/timhall/12c/pdbs.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/pdbs.sql +-- Author : Tim Hall +-- Description : Displays information about all PDBs in the current CDB. +-- Requirements : Access to the DBA views. +-- Call Syntax : @pdbs +-- Last Modified: 01/01/2019 - Added format for NAME column. +-- ----------------------------------------------------------------------------------- + +COLUMN pdb_name FORMAT A20 + +SELECT pdb_name, status +FROM dba_pdbs +ORDER BY pdb_name; + +COLUMN name FORMAT A20 + +SELECT name, open_mode +FROM v$pdbs +ORDER BY name; diff --git a/timhall/12c/plugin_violations.sql b/timhall/12c/plugin_violations.sql new file mode 100644 index 0000000..663b5c6 --- /dev/null +++ b/timhall/12c/plugin_violations.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/plugin_violations.sql +-- Author : Tim Hall +-- Description : Displays information about recent PDB plugin violations. +-- Requirements : +-- Call Syntax : @plugin_violations +-- Last Modified: 09-JAN-2017 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 + +COLUMN time FORMAT A30 +COLUMN name FORMAT A30 +COLUMN cause FORMAT A30 +COLUMN message FORMAT A30 + +SELECT time, name, cause, message +FROM pdb_plug_in_violations +WHERE time > TRUNC(SYSTIMESTAMP) +ORDER BY time; \ No newline at end of file diff --git a/timhall/12c/priv_captures.sql b/timhall/12c/priv_captures.sql new file mode 100644 index 0000000..bae9726 --- /dev/null +++ b/timhall/12c/priv_captures.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/priv_captures.sql +-- Author : Tim Hall +-- Description : Displays privilege capture policies. +-- Requirements : Access to the DBA views. +-- Call Syntax : @priv_captures.sql +-- Last Modified: 22-APR-2014 +-- ----------------------------------------------------------------------------------- + +COLUMN name FORMAT A15 +COLUMN description FORMAT A30 +COLUMN roles FORMAT A20 +COLUMN context FORMAT A30 +SET LINESIZE 200 + +SELECT name, + description, + type, + enabled, + roles, + context +FROM dba_priv_captures +ORDER BY name; \ No newline at end of file diff --git a/timhall/12c/redaction_columns.sql b/timhall/12c/redaction_columns.sql new file mode 100644 index 0000000..50cb4ee --- /dev/null +++ b/timhall/12c/redaction_columns.sql @@ -0,0 +1,36 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/redaction_columns.sql +-- Author : Tim Hall +-- Description : Displays information about columns related to redaction policies. +-- Requirements : Access to the REDACTION_COLUMNS view. +-- Call Syntax : @redaction_columns (schema | all) (object | all) +-- Last Modified: 27-NOV-2014 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 300 VERIFY OFF + +COLUMN object_owner FORMAT A20 +COLUMN object_name FORMAT A30 +COLUMN column_name FORMAT A30 +COLUMN function_parameters FORMAT A30 +COLUMN regexp_pattern FORMAT A30 +COLUMN regexp_replace_string FORMAT A30 +COLUMN column_description FORMAT A20 + +SELECT object_owner, + object_name, + column_name, + function_type, + function_parameters, + regexp_pattern, + regexp_replace_string, + regexp_position, + regexp_occurrence, + regexp_match_parameter, + column_description +FROM redaction_columns +WHERE object_owner = DECODE(UPPER('&1'), 'ALL', object_owner, UPPER('&1')) +AND object_name = DECODE(UPPER('&2'), 'ALL', object_name, UPPER('&2')) +ORDER BY 1, 2, 3; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/12c/redaction_policies.sql b/timhall/12c/redaction_policies.sql new file mode 100644 index 0000000..0d94d45 --- /dev/null +++ b/timhall/12c/redaction_policies.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/redaction_policies.sql +-- Author : Tim Hall +-- Description : Displays redaction policy information. +-- Requirements : Access to the REDACTION_POLICIES view. +-- Call Syntax : @redaction_policies +-- Last Modified: 27-NOV-2014 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 + +COLUMN object_owner FORMAT A20 +COLUMN object_name FORMAT A30 +COLUMN policy_name FORMAT A30 +COLUMN expression FORMAT A30 +COLUMN policy_description FORMAT A20 + +SELECT object_owner, + object_name, + policy_name, + expression, + enable, + policy_description +FROM redaction_policies +ORDER BY 1, 2, 3; \ No newline at end of file diff --git a/timhall/12c/redaction_value_defaults.sql b/timhall/12c/redaction_value_defaults.sql new file mode 100644 index 0000000..e736a2f --- /dev/null +++ b/timhall/12c/redaction_value_defaults.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/12c/redaction_value_defaults.sql +-- Author : Tim Hall +-- Description : Displays information about redaction defaults. +-- Requirements : Access to the REDACTION_VALUES_FOR_TYPE_FULL view. +-- Call Syntax : @redaction_value_defaults +-- Last Modified: 27-NOV-2014 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 250 +COLUMN char_value FORMAT A10 +COLUMN varchar_value FORMAT A10 +COLUMN nchar_value FORMAT A10 +COLUMN nvarchar_value FORMAT A10 +COLUMN timestamp_value FORMAT A27 +COLUMN timestamp_with_time_zone_value FORMAT A32 +COLUMN blob_value FORMAT A20 +COLUMN clob_value FORMAT A10 +COLUMN nclob_value FORMAT A10 + +SELECT * +FROM redaction_values_for_type_full; diff --git a/timhall/12c/services.sql b/timhall/12c/services.sql new file mode 100644 index 0000000..6f3a701 --- /dev/null +++ b/timhall/12c/services.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/services.sql +-- Author : Tim Hall +-- Description : Displays information about database services. +-- Requirements : Access to the DBA views. +-- Call Syntax : @services +-- Last Modified: 05/11/2004 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +COLUMN name FORMAT A30 +COLUMN network_name FORMAT A50 +COLUMN pdb FORMAT A20 + +SELECT name, + network_name, + pdb +FROM dba_services +ORDER BY name; \ No newline at end of file diff --git a/timhall/18c/lockdown_rules.sql b/timhall/18c/lockdown_rules.sql new file mode 100644 index 0000000..8f32bc1 --- /dev/null +++ b/timhall/18c/lockdown_rules.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/18c/lockdown_rules.sql +-- Author : Tim Hall +-- Description : Displays information about lockdown rules applis in the current container. +-- Requirements : Access to the DBA views. +-- Call Syntax : @lockdown_rules +-- Last Modified: 06/01/2019 - Switch to OUTER JOIN and alter ORDER BY. +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN rule_type FORMAT A20 +COLUMN rule FORMAT A20 +COLUMN clause FORMAT A20 +COLUMN clause_option FORMAT A20 +COLUMN pdb_name FORMAT A30 + +SELECT lr.rule_type, + lr.rule, + lr.status, + lr.clause, + lr.clause_option, + lr.users, + lr.con_id, + p.pdb_name +FROM v$lockdown_rules lr + LEFT OUTER JOIN cdb_pdbs p ON lr.con_id = p.con_id +ORDER BY 1, 2; diff --git a/timhall/18c/max_pdb_snapshots.sql b/timhall/18c/max_pdb_snapshots.sql new file mode 100644 index 0000000..58455c4 --- /dev/null +++ b/timhall/18c/max_pdb_snapshots.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/18c/max_pdb_snapshots.sql +-- Author : Tim Hall +-- Description : Displays the MAX_PDB_SNAPSHOTS setting for each container. +-- Requirements : Access to the CDB views. +-- Call Syntax : @max_pdb_snapshots +-- Last Modified: 01/01/2019 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 TAB OFF + +COLUMN property_name FORMAT A20 +COLUMN pdb_name FORMAT A10 +COLUMN property_value FORMAT A15 +COLUMN description FORMAT A50 + +SELECT pr.con_id, + p.pdb_name, + pr.property_name, + pr.property_value, + pr.description +FROM cdb_properties pr + JOIN cdb_pdbs p ON pr.con_id = p.con_id +WHERE pr.property_name = 'MAX_PDB_SNAPSHOTS' +ORDER BY pr.property_name; diff --git a/timhall/18c/pdb_snapshot_mode.sql b/timhall/18c/pdb_snapshot_mode.sql new file mode 100644 index 0000000..19da9e8 --- /dev/null +++ b/timhall/18c/pdb_snapshot_mode.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/18c/pdb_snapshot_mode.sql +-- Author : Tim Hall +-- Description : Displays the SNAPSHOT_MODE and SNAPSHOT_INTERVAL setting for each container. +-- Requirements : Access to the CDB views. +-- Call Syntax : @pdb_snapshot_mode +-- Last Modified: 01/01/2019 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 TAB OFF + +COLUMN pdb_name FORMAT A10 +COLUMN snapshot_mode FORMAT A15 + +SELECT p.con_id, + p.pdb_name, + p.snapshot_mode, + p.snapshot_interval +FROM cdb_pdbs p +ORDER BY 1; diff --git a/timhall/18c/pdb_snapshots.sql b/timhall/18c/pdb_snapshots.sql new file mode 100644 index 0000000..657d17b --- /dev/null +++ b/timhall/18c/pdb_snapshots.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/18c/pdb_snapshots.sql +-- Author : Tim Hall +-- Description : Displays the snapshots for all PDBs. +-- Requirements : Access to the CDB views. +-- Call Syntax : @pdb_snapshots +-- Last Modified: 01/01/2019 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 TAB OFF + +COLUMN con_name FORMAT A10 +COLUMN snapshot_name FORMAT A30 +COLUMN snapshot_scn FORMAT 9999999 +COLUMN full_snapshot_path FORMAT A50 + +SELECT con_id, + con_name, + snapshot_name, + snapshot_scn, + full_snapshot_path +FROM cdb_pdb_snapshots +ORDER BY con_id, snapshot_scn; diff --git a/timhall/19c/auto_index_config.sql b/timhall/19c/auto_index_config.sql new file mode 100644 index 0000000..ee9d5df --- /dev/null +++ b/timhall/19c/auto_index_config.sql @@ -0,0 +1,14 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/19c/auto_index_config.sql +-- Author : Tim Hall +-- Description : Displays the auto-index configuration for each container. +-- Requirements : Access to the CDB views. +-- Call Syntax : @auto_index_config +-- Last Modified: 04/06/2019 +-- ----------------------------------------------------------------------------------- +COLUMN parameter_name FORMAT A40 +COLUMN parameter_value FORMAT A40 + +SELECT con_id, parameter_name, parameter_value +FROM cdb_auto_index_config +ORDER BY 1, 2; diff --git a/timhall/19c/auto_indexes.sql b/timhall/19c/auto_indexes.sql new file mode 100644 index 0000000..0f6eac9 --- /dev/null +++ b/timhall/19c/auto_indexes.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/19c/auto_indexes.sql +-- Author : Tim Hall +-- Description : Displays auto indexes for the specified schema or all schemas. +-- Requirements : Access to the DBA views. +-- Call Syntax : @auto_indexes (schema-name or all) +-- Last Modified: 04/06/2019 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF LINESIZE 200 + +COLUMN owner FORMAT A30 +COLUMN index_name FORMAT A30 +COLUMN table_owner FORMAT A30 +COLUMN table_name FORMAT A30 + +SELECT owner, + index_name, + index_type, + table_owner, + table_name + table_type +FROM dba_indexes +WHERE owner = DECODE(UPPER('&1'), 'ALL', owner, UPPER('&1')) +AND auto = 'YES' +ORDER BY owner, index_name; + diff --git a/timhall/21c/blockchain_tables.sql b/timhall/21c/blockchain_tables.sql new file mode 100644 index 0000000..b7940cb --- /dev/null +++ b/timhall/21c/blockchain_tables.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/21c/blockchain_tables.sql +-- Author : Tim Hall +-- Description : Display blockchain tables in the specified schema, or all schemas. +-- Call Syntax : @blockchain_tables (schema or all) +-- Last Modified: 23/12/2020 +-- ----------------------------------------------------------------------------------- +set linesize 200 verify off trimspool on + +column schema_name format a30 +column table_name format a30 +column row_retention format a13 +column row_retention_locked format a20 +column table_inactivity_retention format a26 +column hash_algorithm format a14 + +SELECT schema_name, + table_name, + row_retention, + row_retention_locked, + table_inactivity_retention, + hash_algorithm +FROM dba_blockchain_tables +WHERE schema_name = DECODE(UPPER('&1'), 'ALL', schema_name, UPPER('&1')); + diff --git a/timhall/21c/certificates.sql b/timhall/21c/certificates.sql new file mode 100644 index 0000000..7062c50 --- /dev/null +++ b/timhall/21c/certificates.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/21c/certificates.sql +-- Author : Tim Hall +-- Description : Display certificates in the specified schema, or all schemas. +-- Call Syntax : @certificates (schema or all) +-- Last Modified: 23/12/2020 +-- ----------------------------------------------------------------------------------- +set linesize 200 verify off trimspool on + +column user_name format a10 +column distinguished_name format a30 +column certificate format a30 + +select user_name, + certificate_guid, + distinguished_name, + substr(certificate, 1, 25) || '...' as certificate +from dba_certificates +where user_name = DECODE(UPPER('&1'), 'ALL', user_name, UPPER('&1')) +order by user_name; diff --git a/timhall/21c/sql_macros.sql b/timhall/21c/sql_macros.sql new file mode 100644 index 0000000..285a2e2 --- /dev/null +++ b/timhall/21c/sql_macros.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/21c/sql_macros.sql +-- Author : Tim Hall +-- Description : Displays information about SQL macros for the specific schema, or all schemas. +-- Call Syntax : @sql_macros (schema or all) +-- Last Modified: 27/12/2020 +-- ----------------------------------------------------------------------------------- +set linesize 150 verify off trimspool on +column owner format a30 +column object_name format a30 +column procedure_name format a30 +column sql_macro format a9 + +select p.owner, + o.object_type, + p.sql_macro, + p.object_name, + p.procedure_name +from dba_procedures p + join dba_objects o on p.object_id = o.object_id +where p.sql_macro != 'NULL' +and p.owner = decode(upper('&1'), 'ALL', p.owner, upper('&1')) +order by p.owner, o.object_type, p.sql_macro, p.object_name, p.procedure_name; diff --git a/timhall/README.md b/timhall/README.md new file mode 100644 index 0000000..2e6cef5 --- /dev/null +++ b/timhall/README.md @@ -0,0 +1,6 @@ +# oracle-base.com scripts + +Here are the scripts from my website [oracle-base.com](https://oracle-base.com/dba/scripts). + +The scripts are maintained by a CMS, not Git, so the GitHub commit dates and comments may not reflect the specific changes made to the scripts. They are provided here for convenience only. + diff --git a/timhall/constraints/disable_chk.sql b/timhall/constraints/disable_chk.sql new file mode 100644 index 0000000..b0c073a --- /dev/null +++ b/timhall/constraints/disable_chk.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/constraints/disable_chk.sql +-- Author : Tim Hall +-- Description : Disables all check constraints for a specified table, or all tables. +-- Call Syntax : @disable_chk (table-name or all) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || a.table_name || '" DISABLE CONSTRAINT "' || a.constraint_name || '";' +FROM all_constraints a +WHERE a.constraint_type = 'C' +AND a.owner = UPPER('&2'); +AND a.table_name = DECODE(UPPER('&1'),'ALL',a.table_name,UPPER('&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/constraints/disable_fk.sql b/timhall/constraints/disable_fk.sql new file mode 100644 index 0000000..bbb598c --- /dev/null +++ b/timhall/constraints/disable_fk.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/constraints/disable_fk.sql +-- Author : Tim Hall +-- Description : Disables all Foreign Keys belonging to the specified table, or all tables. +-- Call Syntax : @disable_fk (table-name or all) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || a.table_name || '" DISABLE CONSTRAINT "' || a.constraint_name || '";' +FROM all_constraints a +WHERE a.constraint_type = 'R' +AND a.table_name = DECODE(Upper('&1'),'ALL',a.table_name,Upper('&1')) +AND a.owner = Upper('&2'); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/constraints/disable_pk.sql b/timhall/constraints/disable_pk.sql new file mode 100644 index 0000000..c3df79f --- /dev/null +++ b/timhall/constraints/disable_pk.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/constraints/disable_pk.sql +-- Author : Tim Hall +-- Description : Disables the Primary Key for the specified table, or all tables. +-- Call Syntax : @disable_pk (table-name or all) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || a.table_name || '" DISABLE PRIMARY KEY;' +FROM all_constraints a +WHERE a.constraint_type = 'P' +AND a.owner = Upper('&2') +AND a.table_name = DECODE(Upper('&1'),'ALL',a.table_name,Upper('&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/constraints/disable_ref_fk.sql b/timhall/constraints/disable_ref_fk.sql new file mode 100644 index 0000000..8dbd44a --- /dev/null +++ b/timhall/constraints/disable_ref_fk.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/constraints/disable_ref_fk.sql +-- Author : Tim Hall +-- Description : Disables all Foreign Keys referencing a specified table, or all tables. +-- Call Syntax : @disable_ref_fk (table-name) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || a.table_name || '" DISABLE CONSTRAINT "' || a.constraint_name || '";' enable_constraints +FROM all_constraints a +WHERE a.owner = Upper('&2') +AND a.constraint_type = 'R' +AND a.r_constraint_name IN (SELECT a1.constraint_name + FROM all_constraints a1 + WHERE a1.table_name = DECODE(Upper('&1'),'ALL',a.table_name,Upper('&1')) + AND a1.owner = Upper('&2')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/constraints/enable_chk.sql b/timhall/constraints/enable_chk.sql new file mode 100644 index 0000000..b0508a3 --- /dev/null +++ b/timhall/constraints/enable_chk.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/constraints/enable_chk.sql +-- Author : Tim Hall +-- Description : Enables all check constraints for a specified table, or all tables. +-- Call Syntax : @enable_chk (table-name or all) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || a.table_name || '" ENABLE CONSTRAINT "' || a.constraint_name || '";' +FROM all_constraints a +WHERE a.constraint_type = 'C' +AND a.owner = Upper('&2'); +AND a.table_name = DECODE(Upper('&1'),'ALL',a.table_name,UPPER('&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/constraints/enable_fk.sql b/timhall/constraints/enable_fk.sql new file mode 100644 index 0000000..75a99de --- /dev/null +++ b/timhall/constraints/enable_fk.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/constraints/enable_fk.sql +-- Author : Tim Hall +-- Description : Enables all Foreign Keys belonging to the specified table, or all tables. +-- Call Syntax : @enable_fk (table-name or all) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || a.table_name || '" ENABLE CONSTRAINT "' || a.constraint_name || '";' +FROM all_constraints a +WHERE a.constraint_type = 'R' +AND a.table_name = DECODE(Upper('&1'),'ALL',a.table_name,Upper('&1')) +AND a.owner = Upper('&2'); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/constraints/enable_pk.sql b/timhall/constraints/enable_pk.sql new file mode 100644 index 0000000..c2ca8b6 --- /dev/null +++ b/timhall/constraints/enable_pk.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/constraints/enable_pk.sql +-- Author : Tim Hall +-- Description : Enables the Primary Key for the specified table, or all tables. +-- Call Syntax : @disable_pk (table-name or all) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || a.table_name || '" ENABLE PRIMARY KEY;' +FROM all_constraints a +WHERE a.constraint_type = 'P' +AND a.owner = Upper('&2') +AND a.table_name = DECODE(Upper('&1'),'ALL',a.table_name,Upper('&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/constraints/enable_ref_fk.sql b/timhall/constraints/enable_ref_fk.sql new file mode 100644 index 0000000..6a9da82 --- /dev/null +++ b/timhall/constraints/enable_ref_fk.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/constraints/enable_ref_fk.sql +-- Author : Tim Hall +-- Description : Enables all Foreign Keys referencing a specified table, or all tables. +-- Call Syntax : @enable_ref_fk (table-name) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || a.table_name || '" ENABLE CONSTRAINT "' || a.constraint_name || '";' +FROM all_constraints a +WHERE a.owner = Upper('&2') +AND a.constraint_type = 'R' +AND a.r_constraint_name IN (SELECT a1.constraint_name + FROM all_constraints a1 + WHERE a1.table_name = DECODE(Upper('&1'),'ALL',a.table_name,Upper('&1')) + AND a1.owner = Upper('&2')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/miscellaneous/analyze_all.sql b/timhall/miscellaneous/analyze_all.sql new file mode 100644 index 0000000..3d331f6 --- /dev/null +++ b/timhall/miscellaneous/analyze_all.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/analyze_all.sql +-- Author : Tim Hall +-- Description : Outdated script to analyze all tables for the specified schema. +-- Comment : Use DBMS_UTILITY.ANALYZE_SCHEMA or DBMS_STATS.GATHER_SCHEMA_STATS if your server allows it. +-- Call Syntax : @ananlyze_all (schema-name) +-- Last Modified: 26/02/2002 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ANALYZE TABLE "' || table_name || '" COMPUTE STATISTICS;' +FROM all_tables +WHERE owner = Upper('&1') +ORDER BY 1; + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/miscellaneous/base64decode.sql b/timhall/miscellaneous/base64decode.sql new file mode 100644 index 0000000..7d888ea --- /dev/null +++ b/timhall/miscellaneous/base64decode.sql @@ -0,0 +1,30 @@ +CREATE OR REPLACE FUNCTION base64decode(p_clob CLOB) + RETURN BLOB +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/base64decode.sql +-- Author : Tim Hall +-- Description : Decodes a Base64 CLOB into a BLOB +-- Last Modified: 09/11/2011 +-- ----------------------------------------------------------------------------------- +IS + l_blob BLOB; + l_raw RAW(32767); + l_amt NUMBER := 7700; + l_offset NUMBER := 1; + l_temp VARCHAR2(32767); +BEGIN + BEGIN + DBMS_LOB.createtemporary (l_blob, FALSE, DBMS_LOB.CALL); + LOOP + DBMS_LOB.read(p_clob, l_amt, l_offset, l_temp); + l_offset := l_offset + l_amt; + l_raw := UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw(l_temp)); + DBMS_LOB.append (l_blob, TO_BLOB(l_raw)); + END LOOP; + EXCEPTION + WHEN NO_DATA_FOUND THEN + NULL; + END; + RETURN l_blob; +END; +/ \ No newline at end of file diff --git a/timhall/miscellaneous/base64encode.sql b/timhall/miscellaneous/base64encode.sql new file mode 100644 index 0000000..aa1d2a7 --- /dev/null +++ b/timhall/miscellaneous/base64encode.sql @@ -0,0 +1,18 @@ +CREATE OR REPLACE FUNCTION base64encode(p_blob IN BLOB) + RETURN CLOB +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/base64encode.sql +-- Author : Tim Hall +-- Description : Encodes a BLOB into a Base64 CLOB. +-- Last Modified: 09/11/2011 +-- ----------------------------------------------------------------------------------- +IS + l_clob CLOB; + l_step PLS_INTEGER := 12000; -- make sure you set a multiple of 3 not higher than 24573 +BEGIN + FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_blob) - 1 )/l_step) LOOP + l_clob := l_clob || UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(DBMS_LOB.substr(p_blob, l_step, i * l_step + 1))); + END LOOP; + RETURN l_clob; +END; +/ \ No newline at end of file diff --git a/timhall/miscellaneous/blob_to_clob.sql b/timhall/miscellaneous/blob_to_clob.sql new file mode 100644 index 0000000..4136ff4 --- /dev/null +++ b/timhall/miscellaneous/blob_to_clob.sql @@ -0,0 +1,33 @@ +CREATE OR REPLACE FUNCTION blob_to_clob (p_data IN BLOB) + RETURN CLOB +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/blob_to_clob.sql +-- Author : Tim Hall +-- Description : Converts a BLOB to a CLOB. +-- Last Modified: 26/12/2016 +-- ----------------------------------------------------------------------------------- +AS + l_clob CLOB; + l_dest_offset PLS_INTEGER := 1; + l_src_offset PLS_INTEGER := 1; + l_lang_context PLS_INTEGER := DBMS_LOB.default_lang_ctx; + l_warning PLS_INTEGER; +BEGIN + + DBMS_LOB.createTemporary( + lob_loc => l_clob, + cache => TRUE); + + DBMS_LOB.converttoclob( + dest_lob => l_clob, + src_blob => p_data, + amount => DBMS_LOB.lobmaxsize, + dest_offset => l_dest_offset, + src_offset => l_src_offset, + blob_csid => DBMS_LOB.default_csid, + lang_context => l_lang_context, + warning => l_warning); + + RETURN l_clob; +END; +/ diff --git a/timhall/miscellaneous/blob_to_file.sql b/timhall/miscellaneous/blob_to_file.sql new file mode 100644 index 0000000..570f547 --- /dev/null +++ b/timhall/miscellaneous/blob_to_file.sql @@ -0,0 +1,41 @@ +CREATE OR REPLACE PROCEDURE blob_to_file (p_blob IN BLOB, + p_dir IN VARCHAR2, + p_filename IN VARCHAR2) +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/blob_to_file.sql +-- Author : Tim Hall +-- Description : Writes the contents of a BLOB to a file. +-- Last Modified: 26/02/2019 - Taken from 2005 article. +-- 22/05/2020 - BLOB parameter switched from IN OUT NOCOPY to IN. +-- ----------------------------------------------------------------------------------- +AS + l_file UTL_FILE.FILE_TYPE; + l_buffer RAW(32767); + l_amount BINARY_INTEGER := 32767; + l_pos INTEGER := 1; + l_blob_len INTEGER; +BEGIN + l_blob_len := DBMS_LOB.getlength(p_blob); + + -- Open the destination file. + l_file := UTL_FILE.fopen(p_dir, p_filename,'wb', 32767); + + -- Read chunks of the BLOB and write them to the file until complete. + WHILE l_pos <= l_blob_len LOOP + DBMS_LOB.read(p_blob, l_amount, l_pos, l_buffer); + UTL_FILE.put_raw(l_file, l_buffer, TRUE); + l_pos := l_pos + l_amount; + END LOOP; + + -- Close the file. + UTL_FILE.fclose(l_file); + +EXCEPTION + WHEN OTHERS THEN + -- Close the file if something goes wrong. + IF UTL_FILE.is_open(l_file) THEN + UTL_FILE.fclose(l_file); + END IF; + RAISE; +END blob_to_file; +/ diff --git a/timhall/miscellaneous/clob_to_blob.sql b/timhall/miscellaneous/clob_to_blob.sql new file mode 100644 index 0000000..ef61bc7 --- /dev/null +++ b/timhall/miscellaneous/clob_to_blob.sql @@ -0,0 +1,33 @@ +CREATE OR REPLACE FUNCTION clob_to_blob (p_data IN CLOB) + RETURN BLOB +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/clob_to_blob.sql +-- Author : Tim Hall +-- Description : Converts a CLOB to a BLOB. +-- Last Modified: 26/12/2016 +-- ----------------------------------------------------------------------------------- +AS + l_blob BLOB; + l_dest_offset PLS_INTEGER := 1; + l_src_offset PLS_INTEGER := 1; + l_lang_context PLS_INTEGER := DBMS_LOB.default_lang_ctx; + l_warning PLS_INTEGER := DBMS_LOB.warn_inconvertible_char; +BEGIN + + DBMS_LOB.createtemporary( + lob_loc => l_blob, + cache => TRUE); + + DBMS_LOB.converttoblob( + dest_lob => l_blob, + src_clob => p_data, + amount => DBMS_LOB.lobmaxsize, + dest_offset => l_dest_offset, + src_offset => l_src_offset, + blob_csid => DBMS_LOB.default_csid, + lang_context => l_lang_context, + warning => l_warning); + + RETURN l_blob; +END; +/ diff --git a/timhall/miscellaneous/clob_to_file.sql b/timhall/miscellaneous/clob_to_file.sql new file mode 100644 index 0000000..1974c1b --- /dev/null +++ b/timhall/miscellaneous/clob_to_file.sql @@ -0,0 +1,36 @@ +CREATE OR REPLACE PROCEDURE clob_to_file (p_clob IN CLOB, + p_dir IN VARCHAR2, + p_filename IN VARCHAR2) +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/clob_to_file.sql +-- Author : Tim Hall +-- Description : Writes the contents of a CLOB to a file. +-- Last Modified: 26/02/2019 - Taken from 2005 article. +-- 22/05/2020 - BLOB parameter switched from IN OUT NOCOPY to IN. +-- ----------------------------------------------------------------------------------- +AS + l_file UTL_FILE.FILE_TYPE; + l_buffer VARCHAR2(32767); + l_amount BINARY_INTEGER := 32767; + l_pos INTEGER := 1; +BEGIN + l_file := UTL_FILE.fopen(p_dir, p_filename, 'w', 32767); + + LOOP + DBMS_LOB.read (p_clob, l_amount, l_pos, l_buffer); + UTL_FILE.put(l_file, l_buffer); + l_pos := l_pos + l_amount; + END LOOP; +EXCEPTION + WHEN NO_DATA_FOUND THEN + -- Expected end. + IF UTL_FILE.is_open(l_file) THEN + UTL_FILE.fclose(l_file); + END IF; + WHEN OTHERS THEN + IF UTL_FILE.is_open(l_file) THEN + UTL_FILE.fclose(l_file); + END IF; + RAISE; +END clob_to_file; +/ diff --git a/timhall/miscellaneous/column_comments.sql b/timhall/miscellaneous/column_comments.sql new file mode 100644 index 0000000..98de086 --- /dev/null +++ b/timhall/miscellaneous/column_comments.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/column_comments.sql +-- Author : Tim Hall +-- Description : Displays comments associate with specific tables. +-- Requirements : Access to the DBA views. +-- Call Syntax : @column_comments (schema) (table-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET PAGESIZE 100 +COLUMN column_name FORMAT A20 +COLUMN comments FORMAT A50 + +SELECT column_name, + comments +FROM dba_col_comments +WHERE owner = UPPER('&1') +AND table_name = UPPER('&2') +ORDER BY column_name; diff --git a/timhall/miscellaneous/comments.sql b/timhall/miscellaneous/comments.sql new file mode 100644 index 0000000..4d450fb --- /dev/null +++ b/timhall/miscellaneous/comments.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/comments.sql +-- Author : Tim Hall +-- Description : Displays all comments for the specified table and its columns. +-- Call Syntax : @comments (table-name) (schema-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +PROMPT +SET VERIFY OFF +SET FEEDBACK OFF +SET LINESIZE 255 +SET PAGESIZE 1000 + +SELECT a.table_name "Table", + a.table_type "Type", + Substr(a.comments,1,200) "Comments" +FROM all_tab_comments a +WHERE a.table_name = Upper('&1') +AND a.owner = Upper('&2'); + +SELECT a.column_name "Column", + Substr(a.comments,1,200) "Comments" +FROM all_col_comments a +WHERE a.table_name = Upper('&1') +AND a.owner = Upper('&2'); + +SET VERIFY ON +SET FEEDBACK ON +SET PAGESIZE 14 +PROMPT diff --git a/timhall/miscellaneous/compile_all.sql b/timhall/miscellaneous/compile_all.sql new file mode 100644 index 0000000..68cbb2a --- /dev/null +++ b/timhall/miscellaneous/compile_all.sql @@ -0,0 +1,13 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/compile_all.sql +-- Author : Tim Hall +-- Description : Compiles all invalid objects for specified schema, or all schema. +-- Requirements : Requires all other "Compile_All" scripts. +-- Call Syntax : @compile_all (schema-name or all) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +@Compile_All_Specs &&1 +@Compile_All_Bodies &&1 +@Compile_All_Procs &&1 +@Compile_All_Funcs &&1 +@Compile_All_Views &&1 diff --git a/timhall/miscellaneous/compile_all_bodies.sql b/timhall/miscellaneous/compile_all_bodies.sql new file mode 100644 index 0000000..64c0553 --- /dev/null +++ b/timhall/miscellaneous/compile_all_bodies.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/compile_all_bodies.sql +-- Author : Tim Hall +-- Description : Compiles all invalid package bodies for specified schema, or all schema. +-- Call Syntax : @compile_all_bodies (schema-name or all) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER PACKAGE ' || a.owner || '.' || a.object_name || ' COMPILE BODY;' +FROM all_objects a +WHERE a.object_type = 'PACKAGE BODY' +AND a.status = 'INVALID' +AND a.owner = Decode(Upper('&&1'), 'ALL',a.owner, Upper('&&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/miscellaneous/compile_all_funcs.sql b/timhall/miscellaneous/compile_all_funcs.sql new file mode 100644 index 0000000..61cd389 --- /dev/null +++ b/timhall/miscellaneous/compile_all_funcs.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/compile_all_funcs.sql +-- Author : Tim Hall +-- Description : Compiles all invalid functions for specified schema, or all schema. +-- Call Syntax : @compile_all_funcs (schema-name or all) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER FUNCTION ' || a.owner || '.' || a.object_name || ' COMPILE;' +FROM all_objects a +WHERE a.object_type = 'FUNCTION' +AND a.status = 'INVALID' +AND a.owner = Decode(Upper('&&1'), 'ALL',a.owner, Upper('&&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/miscellaneous/compile_all_procs.sql b/timhall/miscellaneous/compile_all_procs.sql new file mode 100644 index 0000000..c5ec75f --- /dev/null +++ b/timhall/miscellaneous/compile_all_procs.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/compile_all_procs.sql +-- Author : Tim Hall +-- Description : Compiles all invalid procedures for specified schema, or all schema. +-- Call Syntax : @compile_all_procs (schema-name or all) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER PROCEDURE ' || a.owner || '.' || a.object_name || ' COMPILE;' +FROM all_objects a +WHERE a.object_type = 'PROCEDURE' +AND a.status = 'INVALID' +AND a.owner = Decode(Upper('&&1'), 'ALL',a.owner, Upper('&&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/miscellaneous/compile_all_specs.sql b/timhall/miscellaneous/compile_all_specs.sql new file mode 100644 index 0000000..c7210b5 --- /dev/null +++ b/timhall/miscellaneous/compile_all_specs.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/compile_all_specs.sql +-- Author : Tim Hall +-- Description : Compiles all invalid package specifications for specified schema, or all schema. +-- Call Syntax : @compile_all_specs (schema-name or all) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER PACKAGE ' || a.owner || '.' || a.object_name || ' COMPILE;' +FROM all_objects a +WHERE a.object_type = 'PACKAGE' +AND a.status = 'INVALID' +AND a.owner = Decode(Upper('&&1'), 'ALL',a.owner, Upper('&&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/miscellaneous/compile_all_trigs.sql b/timhall/miscellaneous/compile_all_trigs.sql new file mode 100644 index 0000000..56a1f60 --- /dev/null +++ b/timhall/miscellaneous/compile_all_trigs.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/compile_all_trigs.sql +-- Author : Tim Hall +-- Description : Compiles all invalid triggers for specified schema, or all schema. +-- Call Syntax : @compile_all_trigs (schema-name or all) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER TRIGGER ' || a.owner || '.' || a.object_name || ' COMPILE;' +FROM all_objects a +WHERE a.object_type = 'TRIGGER' +AND a.status = 'INVALID' +AND a.owner = Decode(Upper('&&1'), 'ALL',a.owner, Upper('&&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/miscellaneous/compile_all_views.sql b/timhall/miscellaneous/compile_all_views.sql new file mode 100644 index 0000000..0c27ace --- /dev/null +++ b/timhall/miscellaneous/compile_all_views.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/compile_all_views.sql +-- Author : Tim Hall +-- Description : Compiles all invalid views for specified schema, or all schema. +-- Call Syntax : @compile_all_views (schema-name or all) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER VIEW ' || a.owner || '.' || a.object_name || ' COMPILE;' +FROM all_objects a +WHERE a.object_type = 'VIEW' +AND a.status = 'INVALID' +AND a.owner = Decode(Upper('&&1'), 'ALL',a.owner, Upper('&&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/miscellaneous/conversion_api.sql b/timhall/miscellaneous/conversion_api.sql new file mode 100644 index 0000000..5a937eb --- /dev/null +++ b/timhall/miscellaneous/conversion_api.sql @@ -0,0 +1,106 @@ +CREATE OR REPLACE PACKAGE conversion_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/conversion_api.sql +-- Author : Tim Hall +-- Description : Provides some base conversion functions. +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 10-SEP-2003 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + +FUNCTION to_base(p_dec IN NUMBER, + p_base IN NUMBER) RETURN VARCHAR2; + +FUNCTION to_dec (p_str IN VARCHAR2, + p_from_base IN NUMBER DEFAULT 16) RETURN NUMBER; + +FUNCTION to_hex(p_dec IN NUMBER) RETURN VARCHAR2; + +FUNCTION to_bin(p_dec IN NUMBER) RETURN VARCHAR2; + +FUNCTION to_oct(p_dec IN NUMBER) RETURN VARCHAR2; + +END conversion_api; +/ +SHOW ERRORS + + +CREATE OR REPLACE PACKAGE BODY conversion_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/conversion_api.sql +-- Author : Tim Hall +-- Description : Provides some base conversion functions. +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 10-SEP-2003 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + + + +-- ---------------------------------------------------------------------------- +FUNCTION to_base(p_dec IN NUMBER, + p_base IN NUMBER) RETURN VARCHAR2 IS +-- ---------------------------------------------------------------------------- + l_str VARCHAR2(255) DEFAULT NULL; + l_num NUMBER DEFAULT p_dec; + l_hex VARCHAR2(16) DEFAULT '0123456789ABCDEF'; +BEGIN + IF (TRUNC(p_dec) <> p_dec OR p_dec < 0) THEN + RAISE PROGRAM_ERROR; + END IF; + LOOP + l_str := SUBSTR(l_hex, MOD(l_num,p_base)+1, 1) || l_str; + l_num := TRUNC(l_num/p_base); + EXIT WHEN (l_num = 0); + END LOOP; + RETURN l_str; +END to_base; +-- ---------------------------------------------------------------------------- + + +-- ---------------------------------------------------------------------------- +FUNCTION to_dec (p_str IN VARCHAR2, + p_from_base IN NUMBER DEFAULT 16) RETURN NUMBER IS +-- ---------------------------------------------------------------------------- + l_num NUMBER DEFAULT 0; + l_hex VARCHAR2(16) DEFAULT '0123456789ABCDEF'; +BEGIN + FOR i IN 1 .. LENGTH(p_str) LOOP + l_num := l_num * p_from_base + INSTR(l_hex,UPPER(SUBSTR(p_str,i,1)))-1; + END LOOP; + RETURN l_num; +END to_dec; +-- ---------------------------------------------------------------------------- + + +-- ---------------------------------------------------------------------------- +FUNCTION to_hex(p_dec IN NUMBER) RETURN VARCHAR2 IS +-- ---------------------------------------------------------------------------- +BEGIN + RETURN to_base(p_dec, 16); +END to_hex; +-- ---------------------------------------------------------------------------- + + +-- ---------------------------------------------------------------------------- +FUNCTION to_bin(p_dec IN NUMBER) RETURN VARCHAR2 IS +-- ---------------------------------------------------------------------------- +BEGIN + RETURN to_base(p_dec, 2); +END to_bin; +-- ---------------------------------------------------------------------------- + + +-- ---------------------------------------------------------------------------- +FUNCTION to_oct(p_dec IN NUMBER) RETURN VARCHAR2 IS +-- ---------------------------------------------------------------------------- +BEGIN + RETURN to_base(p_dec, 8); +END to_oct; +-- ---------------------------------------------------------------------------- + +END conversion_api; +/ +SHOW ERRORS diff --git a/timhall/miscellaneous/csv.sql b/timhall/miscellaneous/csv.sql new file mode 100644 index 0000000..45612d4 --- /dev/null +++ b/timhall/miscellaneous/csv.sql @@ -0,0 +1,304 @@ +CREATE OR REPLACE PACKAGE csv AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/cvs.sql +-- Author : Tim Hall +-- Description : Basic CSV API. For usage notes see: +-- https://oracle-base.com/articles/9i/GeneratingCSVFiles.php +-- +-- CREATE OR REPLACE DIRECTORY dba_dir AS '/u01/app/oracle/dba/'; +-- ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'; +-- +-- EXEC csv.generate('DBA_DIR', 'generate.csv', p_query => 'SELECT * FROM emp'); +-- +-- Requirements : UTL_FILE, DBMS_SQL +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 14-MAY-2005 Tim Hall Initial Creation +-- 19-MAY-2016 Tim Hall Add REF CURSOR support. +-- 15-JAN-2019 Tim Hall Add DBMS_OUTPUT support. +-- 31-JAN-2019 Tim Hall Add set_quotes procedure. +-- 22-NOV-2020 Tim Hall Amend set_quotes to allow control of string escaping. +-- -------------------------------------------------------------------------- + +PROCEDURE generate (p_dir IN VARCHAR2, + p_file IN VARCHAR2, + p_query IN VARCHAR2); + +PROCEDURE generate_rc (p_dir IN VARCHAR2, + p_file IN VARCHAR2, + p_refcursor IN OUT SYS_REFCURSOR); + +PROCEDURE output (p_query IN VARCHAR2); + +PROCEDURE output_rc (p_refcursor IN OUT SYS_REFCURSOR); + +PROCEDURE set_separator (p_sep IN VARCHAR2); + +PROCEDURE set_quotes (p_add_quotes IN BOOLEAN := TRUE, + p_quote_char IN VARCHAR2 := '"', + p_escape IN BOOLEAN := TRUE); + +END csv; +/ +SHOW ERRORS + +CREATE OR REPLACE PACKAGE BODY csv AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/cvs.sql +-- Author : Tim Hall +-- Description : Basic CSV API. For usage notes see: +-- https://oracle-base.com/articles/9i/GeneratingCSVFiles.php +-- +-- CREATE OR REPLACE DIRECTORY dba_dir AS '/u01/app/oracle/dba/'; +-- ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'; +-- +-- -- Query +-- EXEC csv.generate('DBA_DIR', 'generate.csv', p_query => 'SELECT * FROM emp'); +-- +-- -- Ref Cursor +-- DECLARE +-- l_refcursor SYS_REFCURSOR; +-- BEGIN +-- OPEN l_refcursor FOR +-- SELECT * FROM emp; +-- +-- csv.generate_rc('DBA_DIR','generate.csv', l_refcursor); +-- END; +-- / +-- +-- +-- Requirements : UTL_FILE, DBMS_SQL +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 14-MAY-2005 Tim Hall Initial Creation +-- 19-MAY-2016 Tim Hall Add REF CURSOR support. +-- 15-JAN-2019 Tim Hall Add DBMS_OUTPUT support. +-- 31-JAN-2019 Tim Hall Add quotes to strings. Code suggested by Moose T. +-- 22-NOV-2020 Tim Hall Amend set_quotes to allow control of string escaping. +-- Amend generate_all to include optional string escapes. +-- Suggested by Anssi Kanninen. +-- 02-MAR-2021 Tim Hall Amend generate_all to also escape the escape character +-- when present in the string. +-- Suggested by Anssi Kanninen. +-- -------------------------------------------------------------------------- + +g_out_type VARCHAR2(1) := 'F'; +g_sep VARCHAR2(5) := ','; +g_add_quotes BOOLEAN := TRUE; +g_quote_char VARCHAR2(1) := '"'; +g_escape BOOLEAN := TRUE; + +-- Prototype for hidden procedures. +PROCEDURE generate_all (p_dir IN VARCHAR2, + p_file IN VARCHAR2, + p_query IN VARCHAR2, + p_refcursor IN OUT SYS_REFCURSOR); + +PROCEDURE put (p_file IN UTL_FILE.file_type, + p_text IN VARCHAR2); + +PROCEDURE new_line (p_file IN UTL_FILE.file_type); + + + +-- Stub to generate a CSV from a query. +PROCEDURE generate (p_dir IN VARCHAR2, + p_file IN VARCHAR2, + p_query IN VARCHAR2) AS + l_cursor SYS_REFCURSOR; +BEGIN + g_out_type := 'F'; + + generate_all (p_dir => p_dir, + p_file => p_file, + p_query => p_query, + p_refcursor => l_cursor); +END generate; + + +-- Stub to generate a CVS from a REF CURSOR. +PROCEDURE generate_rc (p_dir IN VARCHAR2, + p_file IN VARCHAR2, + p_refcursor IN OUT SYS_REFCURSOR) AS +BEGIN + g_out_type := 'F'; + + generate_all (p_dir => p_dir, + p_file => p_file, + p_query => NULL, + p_refcursor => p_refcursor); +END generate_rc; + + +-- Stub to output a CSV from a query. +PROCEDURE output (p_query IN VARCHAR2) AS + l_cursor SYS_REFCURSOR; +BEGIN + g_out_type := 'D'; + + generate_all (p_dir => NULL, + p_file => NULL, + p_query => p_query, + p_refcursor => l_cursor); +END output; + + +-- Stub to output a CVS from a REF CURSOR. +PROCEDURE output_rc (p_refcursor IN OUT SYS_REFCURSOR) AS +BEGIN + g_out_type := 'D'; + + generate_all (p_dir => NULL, + p_file => NULL, + p_query => NULL, + p_refcursor => p_refcursor); +END output_rc; + + +-- Do the actual work. +PROCEDURE generate_all (p_dir IN VARCHAR2, + p_file IN VARCHAR2, + p_query IN VARCHAR2, + p_refcursor IN OUT SYS_REFCURSOR) AS + l_cursor PLS_INTEGER; + l_rows PLS_INTEGER; + l_col_cnt PLS_INTEGER; + l_desc_tab DBMS_SQL.desc_tab2; + l_buffer VARCHAR2(32767); + l_is_str BOOLEAN; + + l_file UTL_FILE.file_type; +BEGIN + IF p_query IS NOT NULL THEN + l_cursor := DBMS_SQL.open_cursor; + DBMS_SQL.parse(l_cursor, p_query, DBMS_SQL.native); + ELSIF p_refcursor%ISOPEN THEN + l_cursor := DBMS_SQL.to_cursor_number(p_refcursor); + ELSE + RAISE_APPLICATION_ERROR(-20000, 'You must specify a query or a REF CURSOR.'); + END IF; + + DBMS_SQL.describe_columns2 (l_cursor, l_col_cnt, l_desc_tab); + + FOR i IN 1 .. l_col_cnt LOOP + DBMS_SQL.define_column(l_cursor, i, l_buffer, 32767 ); + END LOOP; + + IF p_query IS NOT NULL THEN + l_rows := DBMS_SQL.execute(l_cursor); + END IF; + + IF g_out_type = 'F' THEN + l_file := UTL_FILE.fopen(p_dir, p_file, 'w', 32767); + END IF; + + -- Output the column names. + FOR i IN 1 .. l_col_cnt LOOP + IF i > 1 THEN + put(l_file, g_sep); + END IF; + put(l_file, l_desc_tab(i).col_name); + END LOOP; + new_line(l_file); + + -- Output the data. + LOOP + EXIT WHEN DBMS_SQL.fetch_rows(l_cursor) = 0; + + FOR i IN 1 .. l_col_cnt LOOP + IF i > 1 THEN + put(l_file, g_sep); + END IF; + + -- Check if this is a string column. + l_is_str := FALSE; + IF l_desc_tab(i).col_type IN (DBMS_TYPES.typecode_varchar, + DBMS_TYPES.typecode_varchar2, + DBMS_TYPES.typecode_char, + DBMS_TYPES.typecode_clob, + DBMS_TYPES.typecode_nvarchar2, + DBMS_TYPES.typecode_nchar, + DBMS_TYPES.typecode_nclob) THEN + l_is_str := TRUE; + END IF; + + DBMS_SQL.COLUMN_VALUE(l_cursor, i, l_buffer); + -- Optionally add quotes for strings. + IF g_add_quotes AND l_is_str THEN + put(l_file, g_quote_char); + -- Optionally escape the quote character and the escape character in the string. + IF g_escape THEN + l_buffer := replace(l_buffer, '\', '\\'); + l_buffer := replace(l_buffer, g_quote_char, '\'||g_quote_char); + END IF; + put(l_file, l_buffer); + put(l_file, g_quote_char); + ELSE + put(l_file, l_buffer); + END IF; + END LOOP; + new_line(l_file); + END LOOP; + + IF UTL_FILE.is_open(l_file) THEN + UTL_FILE.fclose(l_file); + END IF; + DBMS_SQL.close_cursor(l_cursor); +EXCEPTION + WHEN OTHERS THEN + IF UTL_FILE.is_open(l_file) THEN + UTL_FILE.fclose(l_file); + END IF; + IF DBMS_SQL.is_open(l_cursor) THEN + DBMS_SQL.close_cursor(l_cursor); + END IF; + DBMS_OUTPUT.put_line('ERROR: ' || DBMS_UTILITY.format_error_backtrace); + RAISE; +END generate_all; + + +-- Alter separator from default. +PROCEDURE set_separator (p_sep IN VARCHAR2) AS +BEGIN + g_sep := p_sep; +END set_separator; + + +-- Alter separator from default. +PROCEDURE set_quotes (p_add_quotes IN BOOLEAN := TRUE, + p_quote_char IN VARCHAR2 := '"', + p_escape IN BOOLEAN := TRUE) AS +BEGIN + g_add_quotes := NVL(p_add_quotes, TRUE); + g_quote_char := NVL(SUBSTR(p_quote_char,1,1), '"'); + g_escape := NVL(p_escape, TRUE); +END set_quotes; + + +-- Handle put to file or screen. +PROCEDURE put (p_file IN UTL_FILE.file_type, + p_text IN VARCHAR2) AS +BEGIN + IF g_out_type = 'F' THEN + UTL_FILE.put(p_file, p_text); + ELSE + DBMS_OUTPUT.put(p_text); + END IF; +END put; + + +-- Handle newline to file or screen. +PROCEDURE new_line (p_file IN UTL_FILE.file_type) AS +BEGIN + IF g_out_type = 'F' THEN + UTL_FILE.new_line(p_file); + ELSE + DBMS_OUTPUT.new_line; + END IF; +END new_line; + +END csv; +/ +SHOW ERRORS \ No newline at end of file diff --git a/timhall/miscellaneous/date_api.sql b/timhall/miscellaneous/date_api.sql new file mode 100644 index 0000000..7f8f8a6 --- /dev/null +++ b/timhall/miscellaneous/date_api.sql @@ -0,0 +1,47 @@ +CREATE OR REPLACE PACKAGE date_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/date_api.sql +-- Author : Tim Hall +-- Description : A package to hold date utilities. +-- Requirements : +-- Amendments : +-- When Who What +-- =========== ======== ================================================= +-- 04-FEB-2015 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + +FUNCTION oracle_to_unix (p_date IN DATE) RETURN NUMBER; +FUNCTION unix_to_oracle (p_unix IN NUMBER) RETURN DATE; + +END date_api; +/ +SHOW ERRORS + + +CREATE OR REPLACE PACKAGE BODY date_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/date_api.sql +-- Author : Tim Hall +-- Description : A package to hold date utilities. +-- Requirements : +-- Amendments : +-- When Who What +-- =========== ======== ================================================= +-- 04-FEB-2015 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + +FUNCTION oracle_to_unix (p_date IN DATE) RETURN NUMBER AS + l_number NUMBER; +BEGIN + l_number := (p_date - TO_DATE('01/01/1970', 'DD/MM/YYYY')); + RETURN l_number * 86400000; +END oracle_to_unix; + +FUNCTION unix_to_oracle (p_unix IN NUMBER) RETURN DATE AS +BEGIN + RETURN TO_DATE('01/01/1970', 'DD/MM/YYYY') + (p_unix * 86400000); +END unix_to_oracle; + +END date_api; +/ +SHOW ERRORS diff --git a/timhall/miscellaneous/dict_comments.sql b/timhall/miscellaneous/dict_comments.sql new file mode 100644 index 0000000..5537647 --- /dev/null +++ b/timhall/miscellaneous/dict_comments.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/dict_comments.sql +-- Author : Tim Hall +-- Description : Displays comments associate with specific tables. +-- Requirements : Access to the DBA views. +-- Call Syntax : @dict_comments (table-name or partial match) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +PROMPT +SET VERIFY OFF +SET FEEDBACK OFF +SET LINESIZE 255 +SET PAGESIZE 1000 + +SELECT a.table_name "Table", + Substr(a.comments,1,200) "Comments" +FROM dictionary a +WHERE a.table_name LIKE Upper('%&1%'); + +SET VERIFY ON +SET FEEDBACK ON +SET PAGESIZE 14 +PROMPT diff --git a/timhall/miscellaneous/digest_auth_api.sql b/timhall/miscellaneous/digest_auth_api.sql new file mode 100644 index 0000000..4b479ba --- /dev/null +++ b/timhall/miscellaneous/digest_auth_api.sql @@ -0,0 +1,319 @@ +CREATE OR REPLACE PACKAGE digest_auth_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/digest_auth_api.sql +-- Author : Tim Hall +-- Description : API to allow digest authentication when using UTL_HTTP. +-- The aim is this only replaces UTL_HTTP.BEGIN_REQUEST. +-- All other coding (wallet handling and processing the response) +-- are still done by you, in the normal way. +-- +-- References : This is heavily inspired by the blog post by Gary Myers. +-- http://blog.sydoracle.com/2014/03/plsql-utlhttp-and-digest-authentication.html +-- I make liberal use of the ideas, and in some cases the code, he discussed in +-- that blog post! +-- For setting up certificates and wallets, see this article. +-- https://oracle-base.com/articles/misc/utl_http-and-ssl +-- +-- License : Free for personal and commercial use. +-- You can amend the code, but leave existing the headers, current +-- amendments history and links intact. +-- Copyright and disclaimer available here: +-- https://oracle-base.com/misc/site-info.php#copyright +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 11-DEC-2015 Tim Hall Initial Creation +-- 30-JUN-2016 Tim Hall Add debug_on and debug_off procedures. +-- -------------------------------------------------------------------------- + +/* +Example call. + +SET SERVEROUTPUT ON +DECLARE + l_url VARCHAR2(32767) := 'https://example.com/ws/get-something'; + l_http_request UTL_HTTP.req; + l_http_response UTL_HTTP.resp; + l_text VARCHAR2(32767); +BEGIN + -- Set wallet credentials. + UTL_HTTP.set_wallet('file:/path/to/wallet', 'wallet-password'); + + -- Make a HTTP request and get the response. + l_http_request := digest_auth_api.begin_request(p_url => l_url, + p_username => 'my-username', + p_password => 'my-password', + p_method => 'GET'); + + l_http_response := UTL_HTTP.get_response(l_http_request); + + -- Loop through the response. + BEGIN + LOOP + UTL_HTTP.read_text(l_http_response, l_text, 32767); + DBMS_OUTPUT.put_line (l_text); + END LOOP; + EXCEPTION + WHEN UTL_HTTP.end_of_body THEN + UTL_HTTP.end_response(l_http_response); + END; + +EXCEPTION + WHEN OTHERS THEN + UTL_HTTP.end_response(l_http_response); + RAISE; +END; + +*/ +-- -------------------------------------------------------------------------- + +PROCEDURE debug_on; + +PROCEDURE debug_off; + +FUNCTION begin_request(p_url IN VARCHAR2, + p_username IN VARCHAR2, + p_password IN VARCHAR2, + p_method IN VARCHAR2 DEFAULT 'GET', + p_http_version IN VARCHAR2 DEFAULT 'HTTP/1.1', + p_req_cnt IN PLS_INTEGER DEFAULT 1) + RETURN UTL_HTTP.req; + +END digest_auth_api; +/ +SHOW ERRORS + + +CREATE OR REPLACE PACKAGE BODY digest_auth_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/digest_auth_api.sql +-- Author : Tim Hall +-- Description : API to allow digest authentication when using UTL_HTTP. +-- The aim is this only replaces UTL_HTTP.BEGIN_REQUEST. +-- All other coding (wallet handling and processing the response) +-- are still done by you, in the normal way. +-- +-- References : This is heavily inspired by the blog post by Gary Myers. +-- http://blog.sydoracle.com/2014/03/plsql-utlhttp-and-digest-authentication.html +-- I make liberal use of the ideas, and in some cases the code, he discussed in +-- that blog post! +-- For setting up certificates and wallets, see this article. +-- https://oracle-base.com/articles/misc/utl_http-and-ssl +-- +-- License : Free for personal and commercial use. +-- You can amend the code, but leave existing the headers, current +-- amendments history and links intact. +-- Copyright and disclaimer available here: +-- https://oracle-base.com/misc/site-info.php#copyright +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 11-DEC-2015 Tim Hall Initial Creation +-- 30-JUN-2016 Tim Hall Add debug_on and debug_off procedures. +-- -------------------------------------------------------------------------- + +-- Package variables. +g_debug BOOLEAN := FALSE; + +-- Set by call to get_header_info. +g_server VARCHAR2(32767); +g_realm VARCHAR2(32767); +g_qop VARCHAR2(32767); +g_nonce VARCHAR2(32767); +g_opaque VARCHAR2(32767); +g_cnonce VARCHAR2(32767); + +-- Prototypes. +PROCEDURE debug (p_text IN VARCHAR2); + +PROCEDURE init; + +PROCEDURE get_header_info (p_http_response IN OUT NOCOPY UTL_HTTP.resp); + +FUNCTION get_response (p_username IN VARCHAR2, + p_password IN VARCHAR2, + p_uri IN VARCHAR2, + p_method IN VARCHAR2 DEFAULT 'GET', + p_req_cnt IN NUMBER DEFAULT 1) +RETURN VARCHAR2; + + + +-- Real stuff starts here. + +-- ----------------------------------------------------------------------------- +PROCEDURE debug_on AS +BEGIN + g_debug := TRUE; +END debug_on; +-- ----------------------------------------------------------------------------- + + + +-- ----------------------------------------------------------------------------- +PROCEDURE debug_off AS +BEGIN + g_debug := FALSE; +END debug_off; +-- ----------------------------------------------------------------------------- + + + +-- ----------------------------------------------------------------------------- +PROCEDURE debug (p_text IN VARCHAR2) AS +BEGIN + IF g_debug THEN + DBMS_OUTPUT.put_line(p_text); + END IF; +END debug; +-- ----------------------------------------------------------------------------- + + + +-- ----------------------------------------------------------------------------- +PROCEDURE init IS +BEGIN + g_server := NULL; + g_realm := NULL; + g_qop := NULL; + g_nonce := NULL; + g_opaque := NULL; + g_cnonce := NULL; +END init; +-- ----------------------------------------------------------------------------- + + + +-- ----------------------------------------------------------------------------- +PROCEDURE get_header_info (p_http_response IN OUT NOCOPY UTL_HTTP.resp) IS + + l_name VARCHAR2(256); + l_value VARCHAR2(1024); +BEGIN + FOR i IN 1..UTL_HTTP.get_header_count(p_http_response) LOOP + UTL_HTTP.get_header(p_http_response, i, l_name, l_value); + debug('------ Header (' || i || ') ------'); + debug('l_name=' || l_name); + debug('l_value=' || l_value); + IF l_name = 'Server' THEN + g_server := l_value; + debug('g_server=' || g_server); + END IF; + + IF l_name = 'WWW-Authenticate' THEN + g_realm := SUBSTR(REGEXP_SUBSTR(l_value, 'realm="[^"]+' ),8); + g_qop := SUBSTR(REGEXP_SUBSTR(l_value, 'qop="[^"]+' ),6); + g_nonce := SUBSTR(REGEXP_SUBSTR(l_value, 'nonce="[^"]+' ),8); + g_opaque := SUBSTR(REGEXP_SUBSTR(l_value, 'opaque="[^"]+'),9); + + debug('g_realm=' || g_realm); + debug('g_qop=' || g_qop); + debug('g_nonce=' || g_nonce); + debug('g_opaque=' || g_opaque); + END IF; + END LOOP; + + g_cnonce := LOWER(UTL_RAW.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.md5(input_string => DBMS_RANDOM.value))); + debug('g_cnonce=' || g_cnonce); +END get_header_info; +-- ----------------------------------------------------------------------------- + + + +-- ----------------------------------------------------------------------------- +FUNCTION get_response (p_username IN VARCHAR2, + p_password IN VARCHAR2, + p_uri IN VARCHAR2, + p_method IN VARCHAR2 DEFAULT 'GET', + p_req_cnt IN NUMBER DEFAULT 1) +RETURN VARCHAR2 IS + l_text VARCHAR2(2000); + l_raw RAW(2000); + l_out VARCHAR2(60); + l_ha1 VARCHAR2(40); + l_ha2 VARCHAR2(40); +BEGIN + l_text := p_username || ':' || g_realm || ':' || p_password; + l_raw := UTL_RAW.cast_to_raw(l_text); + l_out := DBMS_OBFUSCATION_TOOLKIT.md5(input => l_raw); + l_ha1 := LOWER(l_out); + + l_text := p_method || ':' || p_uri; + l_raw := UTL_RAW.cast_to_raw(l_text); + l_out := DBMS_OBFUSCATION_TOOLKIT.md5(input => l_raw); + l_ha2 := LOWER(l_out); + + l_text := l_ha1 || ':' || g_nonce || ':' || LPAD(p_req_cnt,8,0) || ':' || g_cnonce || ':' || g_qop || ':' || l_ha2; + l_raw := UTL_RAW.cast_to_raw(l_text); + l_out := DBMS_OBFUSCATION_TOOLKIT.md5(input => l_raw); + + RETURN LOWER(l_out); +END get_response; +-- ----------------------------------------------------------------------------- + + + +-- ----------------------------------------------------------------------------- +FUNCTION begin_request(p_url IN VARCHAR2, + p_username IN VARCHAR2, + p_password IN VARCHAR2, + p_method IN VARCHAR2 DEFAULT 'GET', + p_http_version IN VARCHAR2 DEFAULT 'HTTP/1.1', + p_req_cnt IN PLS_INTEGER DEFAULT 1) + RETURN UTL_HTTP.req +AS + l_http_request UTL_HTTP.req; + l_http_response UTL_HTTP.resp; + l_text VARCHAR2(32767); + l_uri VARCHAR2(32767); + l_response VARCHAR2(32767); +BEGIN + init; + + -- Make a request that will fail to get the header information. + -- This will be used to build up the pieces for the digest authentication + -- using a call to get_header_info. + l_http_request := UTL_HTTP.begin_request(p_url, p_method); + l_http_response := UTL_HTTP.get_response(l_http_request); + get_header_info (l_http_response); + UTL_HTTP.end_response(l_http_response); + + -- Get everything after the domain as the URI. + l_uri := SUBSTR(p_url, INSTR(p_url, '/', 1, 3)); + + l_response := get_response(p_username => p_username, + p_password => p_password, + p_uri => l_uri, + p_method => p_method, + p_req_cnt => p_req_cnt); + + -- Build the final digest string. + l_text := 'Digest username="' || p_username ||'",'|| + ' realm="' || g_realm ||'",'|| + ' nonce="' || g_nonce ||'",'|| + ' uri="' || l_uri ||'",'|| + ' response="' || l_response ||'",'|| + ' qop=' || g_qop ||',' || + ' nc=' || LPAD(p_req_cnt,8,0) ||',' || + ' cnonce="' || g_cnonce ||'"'; + + IF g_opaque IS NOT NULL THEN + l_text := l_text || ',opaque="'||g_opaque||'"'; + END IF; + debug(l_text); + + -- Make the new request and set the digest authorization. + l_http_request := UTL_HTTP.begin_request(p_url, p_method); + UTL_HTTP.SET_HEADER(l_http_request, 'Authorization', l_text); + + RETURN l_http_request; +EXCEPTION + WHEN OTHERS THEN + UTL_HTTP.end_response(l_http_response); + RAISE; +END begin_request; +-- ----------------------------------------------------------------------------- + +END digest_auth_api; +/ +SHOW ERRORS diff --git a/timhall/miscellaneous/drop_all.sql b/timhall/miscellaneous/drop_all.sql new file mode 100644 index 0000000..293bf31 --- /dev/null +++ b/timhall/miscellaneous/drop_all.sql @@ -0,0 +1,39 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/drop_all.sql +-- Author : Tim Hall +-- Description : Drops all objects within the current schema. +-- Call Syntax : @drop_all +-- Last Modified: 20/01/2006 +-- Notes : Loops a maximum of 5 times, allowing for failed drops due to dependencies. +-- Quits outer loop if no drops were atempted. +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +DECLARE + l_count NUMBER; + l_cascade VARCHAR2(20); +BEGIN + << dependency_failure_loop >> + FOR i IN 1 .. 5 LOOP + EXIT dependency_failure_loop WHEN l_count = 0; + l_count := 0; + + FOR cur_rec IN (SELECT object_name, object_type + FROM user_objects) LOOP + BEGIN + l_count := l_count + 1; + l_cascade := NULL; + IF cur_rec.object_type = 'TABLE' THEN + l_cascade := ' CASCADE CONSTRAINTS'; + END IF; + EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"' || l_cascade; + EXCEPTION + WHEN OTHERS THEN + NULL; + END; + END LOOP; + -- Comment out the following line if you are pre-10g, or want to preserve the recyclebin contents. + EXECUTE IMMEDIATE 'PURGE RECYCLEBIN'; + DBMS_OUTPUT.put_line('Pass: ' || i || ' Drops: ' || l_count); + END LOOP; +END; +/ diff --git a/timhall/miscellaneous/dsp.pkb b/timhall/miscellaneous/dsp.pkb new file mode 100644 index 0000000..1aedb64 --- /dev/null +++ b/timhall/miscellaneous/dsp.pkb @@ -0,0 +1,463 @@ +CREATE OR REPLACE PACKAGE BODY dsp AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/dsp.pkb +-- Author : Tim Hall +-- Description : An extension of the DBMS_OUTPUT package. +-- Requirements : https://oracle-base.com/dba/miscellaneous/dsp.pks +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 08-JAN-2002 Tim Hall Initial Creation. +-- 04-APR-2005 Tim Hall Store last call. Add get_last_prefix and +-- get_last_data to allow retrieval. +-- Switch from date to timestamp for greater accuracy. +-- 01-MAR-2013 Tim Hall Add RAISE to output procedure. +-- Force upper case on directory object names. +-- 02-MAR-2013 Tim Hall Fix wrap_line. ORA-21780: Maximum number of object durations exceeded. +-- Added file_contents pipelined table function. +-- Added delete_file. +-- 02-DEC-2013 Tim Hall Add p_trace_level parameter to most code to +-- limit amount of trace produced. +-- Prefixed UTL_FILE references with "SYS.". +-- 21-NOV-2018 Tim Hall Add CLOB overloads to LINE. +-- -------------------------------------------------------------------------- + +-- Package Variables +g_show_output BOOLEAN := FALSE; +g_show_date BOOLEAN := FALSE; +g_line_wrap BOOLEAN := TRUE; +g_max_width PLS_INTEGER := 255; +g_date_format VARCHAR2(32767) := 'DD-MON-YYYY HH24:MI:SS.FF'; +g_file_dir VARCHAR2(32767) := NULL; +g_file_name VARCHAR2(32767) := NULL; +g_last_prefix VARCHAR2(32767) := NULL; +g_last_data VARCHAR2(32767) := NULL; +g_trace_level PLS_INTEGER := DSP.trace_level_all; + +-- Hidden Methods +PROCEDURE display (p_prefix IN VARCHAR2, + p_data IN VARCHAR2, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info, + p_wrap IN BOOLEAN := FALSE); + +PROCEDURE display_clob (p_prefix IN VARCHAR2, + p_data IN CLOB, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + +PROCEDURE wrap_line (p_data IN VARCHAR2, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + +PROCEDURE wrap_line_clob (p_data IN CLOB, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + +PROCEDURE output (p_data IN VARCHAR2); + + +-- Exposed Methods + +-- -------------------------------------------------------------------------- +PROCEDURE reset_defaults IS +-- -------------------------------------------------------------------------- +BEGIN + g_show_output := FALSE; + g_show_date := FALSE; + g_line_wrap := TRUE; + g_max_width := 255; + g_date_format := 'DD-MON-YYYY HH24:MI:SS.FF'; + g_trace_level := DSP.trace_level_all; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE show_output_on(p_trace_level IN PLS_INTEGER := DSP.trace_level_all) IS +-- -------------------------------------------------------------------------- +BEGIN + g_show_output := TRUE; + g_trace_level := p_trace_level; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE show_output_off IS +-- -------------------------------------------------------------------------- +BEGIN + g_show_output := FALSE; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE show_date_on IS +-- -------------------------------------------------------------------------- +BEGIN + g_show_date := TRUE; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE show_date_off IS +-- -------------------------------------------------------------------------- +BEGIN + g_show_date := FALSE; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line_wrap_on IS +-- -------------------------------------------------------------------------- +BEGIN + g_line_wrap := TRUE; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line_wrap_off IS +-- -------------------------------------------------------------------------- +BEGIN + g_line_wrap := FALSE; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE set_max_width (p_width IN PLS_INTEGER) IS +-- -------------------------------------------------------------------------- +BEGIN + g_max_width := p_width; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE set_date_format (p_date_format IN VARCHAR2) IS +-- -------------------------------------------------------------------------- +BEGIN + g_date_format := p_date_format; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE file_output_on (p_file_dir IN VARCHAR2 DEFAULT NULL, + p_file_name IN VARCHAR2 DEFAULT NULL) IS +-- -------------------------------------------------------------------------- +BEGIN + g_file_dir := UPPER(p_file_dir); + g_file_name := p_file_name; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE file_output_off IS +-- -------------------------------------------------------------------------- +BEGIN + g_file_dir := NULL; + g_file_name := NULL; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +FUNCTION get_last_prefix + RETURN VARCHAR2 IS +-- -------------------------------------------------------------------------- +BEGIN + RETURN g_last_prefix; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +FUNCTION get_last_data + RETURN VARCHAR2 IS +-- -------------------------------------------------------------------------- +BEGIN + RETURN g_last_data; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_data IN VARCHAR2, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + display (NULL, p_data, p_trace_level); +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_data IN CLOB, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + display_clob (NULL, p_data, p_trace_level); +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_data IN NUMBER, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + display (NULL, p_data, p_trace_level); +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_data IN BOOLEAN, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + line (NULL, p_data, p_trace_level); +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_data IN DATE, + p_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS.FF', + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + line (NULL, p_data, p_format, p_trace_level); +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN VARCHAR2, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + display (p_prefix, p_data, p_trace_level); +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN CLOB, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + display_clob (p_prefix, p_data, p_trace_level); +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN NUMBER, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + display (p_prefix, TO_CHAR(p_data), p_trace_level); +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN BOOLEAN, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + IF p_data THEN + display (p_prefix, 'TRUE', p_trace_level); + ELSE + display (p_prefix, 'FALSE', p_trace_level); + END IF; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN DATE, + p_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS.FF', + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- +BEGIN + display (p_prefix, TO_CHAR(p_data, p_format), p_trace_level); +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE display (p_prefix IN VARCHAR2, + p_data IN VARCHAR2, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info, + p_wrap IN BOOLEAN := FALSE) IS +-- -------------------------------------------------------------------------- + l_data VARCHAR2(32767) := p_data; +BEGIN + g_last_prefix := p_prefix; + g_last_data := p_data; + + IF g_show_output AND p_trace_level <= g_trace_level THEN + IF l_data IS NULL THEN + l_data := ''; + END IF; + + IF p_prefix IS NOT NULL AND p_wrap = FALSE THEN + l_data := p_prefix || ' : ' || l_data; + END IF; + + IF g_show_date AND p_wrap = FALSE THEN + l_data := TO_CHAR(SYSTIMESTAMP, g_date_format) || ' : ' || l_data; + END IF; + + IF LENGTH(l_data) > g_max_width THEN + IF g_line_wrap THEN + wrap_line (l_data); + ELSE + l_data := SUBSTR(l_data, 1, g_max_width); + output (l_data); + END IF; + ELSE + output (l_data); + END IF; + END IF; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE display_clob (p_prefix IN VARCHAR2, + p_data IN CLOB, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- + l_data CLOB := p_data; +BEGIN + g_last_prefix := p_prefix; + + IF g_show_output AND p_trace_level <= g_trace_level THEN + IF l_data IS NULL THEN + l_data := ''; + END IF; + + IF p_prefix IS NOT NULL THEN + l_data := p_prefix || ' : ' || l_data; + END IF; + + IF g_show_date THEN + l_data := TO_CHAR(SYSTIMESTAMP, g_date_format) || ' : ' || l_data; + END IF; + + wrap_line_clob (l_data); + END IF; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE wrap_line (p_data IN VARCHAR2, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- + l_offset NUMBER := 1; +BEGIN + LOOP + EXIT WHEN l_offset > LENGTH(p_data); + display (NULL, SUBSTR(p_data, l_offset, g_max_width), p_trace_level, TRUE); + l_offset := l_offset + g_max_width; + END LOOP; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE wrap_line_clob (p_data IN CLOB, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info) IS +-- -------------------------------------------------------------------------- + l_offset NUMBER := 1; +BEGIN + LOOP + EXIT WHEN l_offset > LENGTH(p_data); + display (NULL, SUBSTR(p_data, l_offset, g_max_width), p_trace_level, TRUE); + l_offset := l_offset + g_max_width; + END LOOP; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE output (p_data IN VARCHAR2) IS +-- -------------------------------------------------------------------------- +BEGIN + IF g_file_dir IS NULL OR g_file_name IS NULL THEN + DBMS_OUTPUT.put_line(p_data); + ELSE + DECLARE + l_file SYS.UTL_FILE.file_type; + BEGIN + l_file := SYS.UTL_FILE.fopen (g_file_dir, g_file_name, 'A', 32767); + SYS.UTL_FILE.put_line(l_file, p_data); + SYS.UTL_FILE.fclose (l_file); + EXCEPTION + WHEN OTHERS THEN + SYS.UTL_FILE.fclose (l_file); + RAISE; + END; + END IF; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +FUNCTION file_contents (p_dir IN VARCHAR2, + p_file IN VARCHAR2) + RETURN DBMSOUTPUT_LINESARRAY PIPELINED IS +-- -------------------------------------------------------------------------- + l_file SYS.UTL_FILE.file_type; + l_text VARCHAR2(32767); +BEGIN + l_file := SYS.UTL_FILE.fopen(UPPER(p_dir), p_file, 'r', 32767); + BEGIN + LOOP + SYS.UTL_FILE.get_line(l_file, l_text); + PIPE ROW (l_text); + END LOOP; + EXCEPTION + WHEN NO_DATA_FOUND THEN + NULL; + END; + UTL_FILE.fclose(l_file); + RETURN; +EXCEPTION + WHEN OTHERS THEN + PIPE ROW ('ERROR: ' || SQLERRM); + IF SYS.UTL_FILE.is_open(l_file) THEN + SYS.UTL_FILE.fclose(l_file); + END IF; + RETURN; +END; +-- -------------------------------------------------------------------------- + + +-- -------------------------------------------------------------------------- +PROCEDURE delete_file (p_dir IN VARCHAR2, + p_file IN VARCHAR2) IS +-- -------------------------------------------------------------------------- +BEGIN + SYS.UTL_FILE.fremove(UPPER(p_dir), p_file); +END; +-- -------------------------------------------------------------------------- + +END dsp; +/ + +SHOW ERRORS diff --git a/timhall/miscellaneous/dsp.pks b/timhall/miscellaneous/dsp.pks new file mode 100644 index 0000000..05b4b0a --- /dev/null +++ b/timhall/miscellaneous/dsp.pks @@ -0,0 +1,128 @@ +CREATE OR REPLACE PACKAGE dsp AUTHID CURRENT_USER AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/dsp.pks +-- Author : Tim Hall +-- Description : An extension of the DBMS_OUTPUT package. +-- Requirements : https://oracle-base.com/dba/miscellaneous/dsp.pkb +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 08-JAN-2002 Tim Hall Initial Creation +-- 04-APR-2005 Tim Hall Store last call. Add get_last_prefix and +-- get_last_data to allow retrieval. +-- Switch from date to timestamp for greater accuracy. +-- 02-MAR-2013 Tim Hall Added file_contents pipelined table function. +-- Added delete_file. +-- Added example usage comments. +-- 02-DEC-2013 Tim Hall Add p_trace_level parameter to most code to +-- limit amount of trace produced. +-- Added "AUTHID CURRENT_USER". +-- 21-NOV-2018 Tim Hall Add CLOB overloads to LINE. +-- -------------------------------------------------------------------------- +-- Example usage : +/* +-- Set up test directory object. +CREATE OR REPLACE DIRECTORY test_dir AS '/home/oracle/'; +GRANT READ, WRITE ON DIRECTORY test_dir TO test; + +-- Test DSP. +BEGIN + -- Turn on tracing, redirecting it to a file. + DSP.show_output_on; + DSP.file_output_on('TEST_DIR', 'test.txt'); + DSP.show_date_on; + DSP.line_wrap_on; + DSP.set_max_width(200); + + -- Trace something. + DSP.line('This is a test'); +END; + +-- Check the contents of the file. +SELECT * FROM TABLE(DSP.file_contents('TEST_DIR', 'test.txt')); + +-- Delete the file. +EXEC DSP.delete_file('TEST_DIR', 'test.txt'); +*/ +-- -------------------------------------------------------------------------- + + -- Constants to control tracing level. + trace_level_all CONSTANT PLS_INTEGER := 99; + trace_level_info CONSTANT PLS_INTEGER := 30; + trace_level_warn CONSTANT PLS_INTEGER := 20; + trace_level_error CONSTANT PLS_INTEGER := 10; + + PROCEDURE reset_defaults; + + PROCEDURE show_output_on(p_trace_level IN PLS_INTEGER := DSP.trace_level_all); + PROCEDURE show_output_off; + + PROCEDURE show_date_on; + PROCEDURE show_date_off; + + PROCEDURE line_wrap_on; + PROCEDURE line_wrap_off; + + PROCEDURE set_max_width (p_width IN PLS_INTEGER); + + PROCEDURE set_date_format (p_date_format IN VARCHAR2); + + PROCEDURE file_output_on (p_file_dir IN VARCHAR2 DEFAULT NULL, + p_file_name IN VARCHAR2 DEFAULT NULL); + + PROCEDURE file_output_off; + + FUNCTION get_last_prefix + RETURN VARCHAR2; + + FUNCTION get_last_data + RETURN VARCHAR2; + + PROCEDURE line (p_data IN VARCHAR2, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + PROCEDURE line (p_data IN CLOB, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + PROCEDURE line (p_data IN NUMBER, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + PROCEDURE line (p_data IN BOOLEAN, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + PROCEDURE line (p_data IN DATE, + p_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS.FF', + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN VARCHAR2, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN CLOB, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN NUMBER, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN BOOLEAN, + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN DATE, + p_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS.FF', + p_trace_level IN PLS_INTEGER := DSP.trace_level_info); + + FUNCTION file_contents (p_dir IN VARCHAR2, + p_file IN VARCHAR2) + RETURN DBMSOUTPUT_LINESARRAY PIPELINED; + + PROCEDURE delete_file (p_dir IN VARCHAR2, + p_file IN VARCHAR2); + +END dsp; +/ + +SHOW ERRORS diff --git a/timhall/miscellaneous/err.pkb b/timhall/miscellaneous/err.pkb new file mode 100644 index 0000000..b80ae2f --- /dev/null +++ b/timhall/miscellaneous/err.pkb @@ -0,0 +1,126 @@ +CREATE OR REPLACE PACKAGE BODY err AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/err.pkb +-- Author : Tim Hall +-- Description : A simple mechanism for logging error information to a table. +-- Requirements : err.pks, dsp.pks, dsp.pkb and schema definied in err.pks +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 17-JUL-2003 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + + -- Package Variables + g_logs_on BOOLEAN := TRUE; + g_date_format VARCHAR2(50) := 'DD-MON-YYYY HH24:MI:SS'; + + -- Exposed Methods + + -- -------------------------------------------------------------------------- + PROCEDURE reset_defaults IS + -- -------------------------------------------------------------------------- + BEGIN + g_logs_on := TRUE; + g_date_format := 'DD-MON-YYYY HH24:MI:SS'; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE logs_on IS + -- -------------------------------------------------------------------------- + BEGIN + g_logs_on := TRUE; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE logs_off IS + -- -------------------------------------------------------------------------- + BEGIN + g_logs_on := FALSE; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE set_date_format (p_date_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS') IS + -- -------------------------------------------------------------------------- + BEGIN + g_date_format := p_date_format; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN VARCHAR2, + p_error_level IN NUMBER DEFAULT 5, + p_error_user IN VARCHAR2 DEFAULT USER) IS + -- -------------------------------------------------------------------------- + PRAGMA AUTONOMOUS_TRANSACTION; + BEGIN + IF g_logs_on THEN + INSERT INTO error_logs + (id, + prefix, + data, + error_level, + created_date, + created_by) + VALUES + (error_logs_seq.NEXTVAL, + p_prefix, + p_data, + p_error_level, + SYSDATE, + p_error_user); + + COMMIT; + END IF; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE line (p_data IN VARCHAR2, + p_error_level IN NUMBER DEFAULT 5, + p_error_user IN VARCHAR2 DEFAULT USER) IS + -- -------------------------------------------------------------------------- + PRAGMA AUTONOMOUS_TRANSACTION; + BEGIN + line (p_prefix => NULL, + p_data => p_data, + p_error_level => p_error_level, + p_error_user => p_error_user); + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE display (p_error_level IN NUMBER DEFAULT NULL, + p_error_user IN VARCHAR2 DEFAULT NULL, + p_from_date IN DATE DEFAULT NULL, + p_to_date IN DATE DEFAULT NUll) IS + -- -------------------------------------------------------------------------- + CURSOR c_errors IS + SELECT * + FROM error_logs + WHERE error_level = NVL(p_error_level, error_level) + AND created_by = NVL(p_error_user, created_by) + AND created_date >= NVL(p_from_date, created_date) + AND created_date <= NVL(p_to_date, created_date) + ORDER BY id; + BEGIN + FOR cur_rec IN c_errors LOOP + dsp.line(cur_rec.prefix, cur_rec.data); + END LOOP; + END; + -- -------------------------------------------------------------------------- + +END err; +/ + +SHOW ERRORS + diff --git a/timhall/miscellaneous/err.pks b/timhall/miscellaneous/err.pks new file mode 100644 index 0000000..3cbe2cb --- /dev/null +++ b/timhall/miscellaneous/err.pks @@ -0,0 +1,50 @@ +CREATE OR REPLACE PACKAGE err AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/err.pks +-- Author : Tim Hall +-- Description : A simple mechanism for logging error information to a table. +-- Requirements : err.pkb, dsp.pks, dsp.pkb and: +-- +-- CREATE TABLE error_logs ( +-- id NUMBER(10) NOT NULL, +-- prefix VARCHAR2(50), +-- data VARCHAR2(2000) NOT NULL, +-- error_level NUMBER(2) NOT NULL, +-- created_date DATE NOT NULL, +-- created_by VARCHAR2(50) NOT NULL); +-- +-- ALTER TABLE error_logs ADD (CONSTRAINT error_logs_pk PRIMARY KEY (id)); +-- +-- CREATE SEQUENCE error_logs_seq; +-- +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 17-JUL-2003 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + + PROCEDURE reset_defaults; + + PROCEDURE logs_on; + PROCEDURE logs_off; + + PROCEDURE set_date_format (p_date_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS'); + + PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN VARCHAR2, + p_error_level IN NUMBER DEFAULT 5, + p_error_user IN VARCHAR2 DEFAULT USER); + + PROCEDURE line (p_data IN VARCHAR2, + p_error_level IN NUMBER DEFAULT 5, + p_error_user IN VARCHAR2 DEFAULT USER); + + PROCEDURE display (p_error_level IN NUMBER DEFAULT NULL, + p_error_user IN VARCHAR2 DEFAULT NULL, + p_from_date IN DATE DEFAULT NULL, + p_to_date IN DATE DEFAULT NUll); +END err; +/ + +SHOW ERRORS + diff --git a/timhall/miscellaneous/file_to_blob.sql b/timhall/miscellaneous/file_to_blob.sql new file mode 100644 index 0000000..b26c3d6 --- /dev/null +++ b/timhall/miscellaneous/file_to_blob.sql @@ -0,0 +1,29 @@ +CREATE OR REPLACE PROCEDURE file_to_blob (p_blob IN OUT NOCOPY BLOB, + p_dir IN VARCHAR2, + p_filename IN VARCHAR2) +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/file_to_blob.sql +-- Author : Tim Hall +-- Description : Loads the contents of a file into a BLOB. +-- Last Modified: 26/02/2019 - Taken from 2005 article. +-- ----------------------------------------------------------------------------------- +AS + l_bfile BFILE; + + l_dest_offset INTEGER := 1; + l_src_offset INTEGER := 1; +BEGIN + l_bfile := BFILENAME(p_dir, p_filename); + DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly); + DBMS_LOB.trim(p_blob, 0); + IF DBMS_LOB.getlength(l_bfile) > 0 THEN + DBMS_LOB.loadblobfromfile ( + dest_lob => p_blob, + src_bfile => l_bfile, + amount => DBMS_LOB.lobmaxsize, + dest_offset => l_dest_offset, + src_offset => l_src_offset); + END IF; + DBMS_LOB.fileclose(l_bfile); +END file_to_blob; +/ diff --git a/timhall/miscellaneous/file_to_clob.sql b/timhall/miscellaneous/file_to_clob.sql new file mode 100644 index 0000000..a19937f --- /dev/null +++ b/timhall/miscellaneous/file_to_clob.sql @@ -0,0 +1,33 @@ +CREATE OR REPLACE PROCEDURE file_to_clob (p_clob IN OUT NOCOPY CLOB, + p_dir IN VARCHAR2, + p_filename IN VARCHAR2) +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/file_to_clob.sql +-- Author : Tim Hall +-- Description : Loads the contents of a file into a CLOB. +-- Last Modified: 26/02/2019 - Taken from 2005 article. +-- ----------------------------------------------------------------------------------- +AS + l_bfile BFILE; + + l_dest_offset INTEGER := 1; + l_src_offset INTEGER := 1; + l_bfile_csid NUMBER := 0; + l_lang_context INTEGER := 0; + l_warning INTEGER := 0; +BEGIN + l_bfile := BFILENAME(p_dir, p_filename); + DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly); + DBMS_LOB.trim(p_clob, 0); + DBMS_LOB.loadclobfromfile ( + dest_lob => p_clob, + src_bfile => l_bfile, + amount => DBMS_LOB.lobmaxsize, + dest_offset => l_dest_offset, + src_offset => l_src_offset, + bfile_csid => l_bfile_csid , + lang_context => l_lang_context, + warning => l_warning); + DBMS_LOB.fileclose(l_bfile); +END file_to_clob; +/ diff --git a/timhall/miscellaneous/find_object.sql b/timhall/miscellaneous/find_object.sql new file mode 100644 index 0000000..82586af --- /dev/null +++ b/timhall/miscellaneous/find_object.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/find_object.sql +-- Author : Tim Hall +-- Description : Lists all objects with a similar name to that specified. +-- Requirements : Access to the DBA views. +-- Call Syntax : @find_object (object-name) +-- Last Modified: 26-JUL-2016 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF LINESIZE 200 + +COLUMN object_name FORMAT A30 +COLUMN owner FORMAT A20 + +SELECT object_name, owner, object_type, status +FROM dba_objects +WHERE LOWER(object_name) LIKE '%' || LOWER('&1') || '%' +ORDER BY 1, 2, 3; diff --git a/timhall/miscellaneous/ftp.pkb b/timhall/miscellaneous/ftp.pkb new file mode 100644 index 0000000..b937b8d --- /dev/null +++ b/timhall/miscellaneous/ftp.pkb @@ -0,0 +1,839 @@ +CREATE OR REPLACE PACKAGE BODY ftp AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/ftp.pkb +-- Author : Tim Hall +-- Description : Basic FTP API. For usage notes see: +-- https://oracle-base.com/articles/misc/ftp-from-plsql.php +-- Requirements : https://oracle-base.com/dba/miscellaneous/ftp.pks +-- License : Free for personal and commercial use. +-- You can amend the code, but leave existing the headers, current +-- amendments history and links intact. +-- Copyright and disclaimer available here: +-- https://oracle-base.com/misc/site-info.php#copyright +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 14-AUG-2003 Tim Hall Initial Creation +-- 10-MAR-2004 Tim Hall Add convert_crlf procedure. +-- Incorporate CRLF conversion functionality into +-- put_local_ascii_data and put_remote_ascii_data +-- functions. +-- Make get_passive function visible. +-- Added get_direct and put_direct procedures. +-- 23-DEC-2004 Tim Hall The get_reply procedure was altered to deal with +-- banners starting with 4 white spaces. This fix is +-- a small variation on the resolution provided by +-- Gary Mason who spotted the bug. +-- 10-NOV-2005 Tim Hall Addition of get_reply after doing a transfer to +-- pickup the 226 Transfer complete message. This +-- allows gets and puts with a single connection. +-- Issue spotted by Trevor Woolnough. +-- 03-OCT-2006 Tim Hall Add list, rename, delete, mkdir, rmdir procedures. +-- 12-JAN-2007 Tim Hall A final call to get_reply was added to the get_remote% +-- procedures to allow multiple transfers per connection. +-- 15-Jan-2008 Tim Hall login: Include timeout parameter (suggested by Dmitry Bogomolov). +-- 21-Jan-2008 Tim Hall put_%: "l_pos < l_clob_len" to "l_pos <= l_clob_len" to prevent +-- potential loss of one character for single-byte files or files +-- sized 1 byte bigger than a number divisible by the buffer size +-- (spotted by Michael Surikov). +-- 23-Jan-2008 Tim Hall send_command: Possible solution for ORA-29260 errors included, +-- but commented out (suggested by Kevin Phillips). +-- 12-Feb-2008 Tim Hall put_local_binary_data and put_direct: Open file with "wb" for +-- binary writes (spotted by Dwayne Hoban). +-- 03-Mar-2008 Tim Hall list: get_reply call and close of passive connection added +-- (suggested by Julian, Bavaria). +-- 12-Jun-2008 Tim Hall A final call to get_reply was added to the put_remote% +-- procedures, but commented out. If uncommented, it may cause the +-- operation to hang, but it has been reported (morgul) to allow +-- multiple transfers per connection. +-- get_reply: Moved to pakage specification. +-- 24-Jun-2008 Tim Hall get_remote% and put_remote%: Exception handler added to close the passive +-- connection and reraise the error (suggested by Mark Reichman). +-- 22-Apr-2009 Tim Hall get_remote_ascii_data: Remove unnecessary logout (suggested by John Duncan). +-- get_reply and list: Handle 400 messages as well as 500 messages (suggested by John Duncan). +-- logout: Added a call to UTL_TCP.close_connection, so not necessary to close +-- any connections manually (suggested by Victor Munoz). +-- get_local_*_data: Check for zero length files to prevent exception (suggested by Daniel) +-- nlst: Added to return list of file names only (suggested by Julian and John Duncan) +-- 05-Apr-2011 Tim Hall put_remote_ascii_data: Added comment on definition of l_amount. Switch to 10000 if you get +-- ORA-06502 from this line. May give you unexpected result due to conversion. Better to use binary. +-- 05-Oct-2013 Tim Hall list, nlst: Fixed bug where files beginning with '4' or '5' could cause error. +-- 24-May-2014 Tim Hall Added license information. +-- 09-Feb-2015 Tim Hall get_passive: Removed reference to IP address (suggested by Dinesh Panwar). +-- 01-Oct-2016 Tim Hall All 32767 buffers altered to 32766 to prevent errors with some +-- multibyte character set operations (suggested by jdziurlaj). +-- 24-Oct-2016 Tim Hall Removed passive connections for mkdir, rmdir, rename, delete (suggested by Dirk). +-- 22-Jan-2017 Tim Hall Added UTL_TCP.close_connection for passive connections to exception handlers for +-- get_direct, put_direct, list, nlst (Peter Renner). +-- 05-Jan-2018 Tim Hall get_local_ascii_data : Switch from LOADFROMFILE to LOADCLOBFROMFILE. +-- get_local_binary_data : Switch from LOADFROMFILE to LOADBLOBFROMFILE. +-- (suggested by Stephen Skene) +-- -------------------------------------------------------------------------- + +g_reply t_string_table := t_string_table(); +g_binary BOOLEAN := TRUE; +g_debug BOOLEAN := TRUE; +g_convert_crlf BOOLEAN := TRUE; + +PROCEDURE debug (p_text IN VARCHAR2); + +-- -------------------------------------------------------------------------- +FUNCTION login (p_host IN VARCHAR2, + p_port IN VARCHAR2, + p_user IN VARCHAR2, + p_pass IN VARCHAR2, + p_timeout IN NUMBER := NULL) + RETURN UTL_TCP.connection IS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; +BEGIN + g_reply.delete; + + l_conn := UTL_TCP.open_connection(p_host, p_port, tx_timeout => p_timeout); + get_reply (l_conn); + send_command(l_conn, 'USER ' || p_user); + send_command(l_conn, 'PASS ' || p_pass); + RETURN l_conn; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION get_passive (p_conn IN OUT NOCOPY UTL_TCP.connection) + RETURN UTL_TCP.connection IS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; + l_reply VARCHAR2(32766); + --l_host VARCHAR(100); + l_port1 NUMBER(10); + l_port2 NUMBER(10); +BEGIN + send_command(p_conn, 'PASV'); + l_reply := g_reply(g_reply.last); + + l_reply := REPLACE(SUBSTR(l_reply, INSTR(l_reply, '(') + 1, (INSTR(l_reply, ')')) - (INSTR(l_reply, '('))-1), ',', '.'); + --l_host := SUBSTR(l_reply, 1, INSTR(l_reply, '.', 1, 4)-1); + + l_port1 := TO_NUMBER(SUBSTR(l_reply, INSTR(l_reply, '.', 1, 4)+1, (INSTR(l_reply, '.', 1, 5)-1) - (INSTR(l_reply, '.', 1, 4)))); + l_port2 := TO_NUMBER(SUBSTR(l_reply, INSTR(l_reply, '.', 1, 5)+1)); + + --l_conn := utl_tcp.open_connection(l_host, 256 * l_port1 + l_port2); + l_conn := utl_tcp.open_connection(p_conn.remote_host, 256 * l_port1 + l_port2); + return l_conn; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE logout(p_conn IN OUT NOCOPY UTL_TCP.connection, + p_reply IN BOOLEAN := TRUE) AS +-- -------------------------------------------------------------------------- +BEGIN + send_command(p_conn, 'QUIT', p_reply); + UTL_TCP.close_connection(p_conn); +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE send_command (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_command IN VARCHAR2, + p_reply IN BOOLEAN := TRUE) IS +-- -------------------------------------------------------------------------- + l_result PLS_INTEGER; +BEGIN + l_result := UTL_TCP.write_line(p_conn, p_command); + -- If you get ORA-29260 after the PASV call, replace the above line with the following line. + -- l_result := UTL_TCP.write_text(p_conn, p_command || utl_tcp.crlf, length(p_command || utl_tcp.crlf)); + + IF p_reply THEN + get_reply(p_conn); + END IF; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE get_reply (p_conn IN OUT NOCOPY UTL_TCP.connection) IS +-- -------------------------------------------------------------------------- + l_reply_code VARCHAR2(3) := NULL; +BEGIN + LOOP + g_reply.extend; + g_reply(g_reply.last) := UTL_TCP.get_line(p_conn, TRUE); + debug(g_reply(g_reply.last)); + IF l_reply_code IS NULL THEN + l_reply_code := SUBSTR(g_reply(g_reply.last), 1, 3); + END IF; + IF SUBSTR(l_reply_code, 1, 1) IN ('4', '5') THEN + RAISE_APPLICATION_ERROR(-20000, g_reply(g_reply.last)); + ELSIF (SUBSTR(g_reply(g_reply.last), 1, 3) = l_reply_code AND + SUBSTR(g_reply(g_reply.last), 4, 1) = ' ') THEN + EXIT; + END IF; + END LOOP; +EXCEPTION + WHEN UTL_TCP.END_OF_INPUT THEN + NULL; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION get_local_ascii_data (p_dir IN VARCHAR2, + p_file IN VARCHAR2) + RETURN CLOB IS +-- -------------------------------------------------------------------------- + l_bfile BFILE; + l_data CLOB; + l_dest_offset INTEGER := 1; + l_src_offset INTEGER := 1; + l_bfile_csid NUMBER := 0; + l_lang_context INTEGER := 0; + l_warning INTEGER := 0; + +BEGIN + DBMS_LOB.createtemporary (lob_loc => l_data, + cache => TRUE, + dur => DBMS_LOB.call); + + l_bfile := BFILENAME(p_dir, p_file); + DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly); + + IF DBMS_LOB.getlength(l_bfile) > 0 THEN + DBMS_LOB.loadclobfromfile ( + dest_lob => l_data, + src_bfile => l_bfile, + amount => DBMS_LOB.lobmaxsize, + dest_offset => l_dest_offset, + src_offset => l_src_offset, + bfile_csid => l_bfile_csid , + lang_context => l_lang_context, + warning => l_warning); + END IF; + + DBMS_LOB.fileclose(l_bfile); + + RETURN l_data; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION get_local_binary_data (p_dir IN VARCHAR2, + p_file IN VARCHAR2) + RETURN BLOB IS +-- -------------------------------------------------------------------------- + l_bfile BFILE; + l_data BLOB; + l_dest_offset INTEGER := 1; + l_src_offset INTEGER := 1; +BEGIN + DBMS_LOB.createtemporary (lob_loc => l_data, + cache => TRUE, + dur => DBMS_LOB.call); + + l_bfile := BFILENAME(p_dir, p_file); + DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly); + IF DBMS_LOB.getlength(l_bfile) > 0 THEN + DBMS_LOB.loadblobfromfile ( + dest_lob => l_data, + src_bfile => l_bfile, + amount => DBMS_LOB.lobmaxsize, + dest_offset => l_dest_offset, + src_offset => l_src_offset); + END IF; + DBMS_LOB.fileclose(l_bfile); + + RETURN l_data; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION get_remote_ascii_data (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2) + RETURN CLOB IS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; + l_amount PLS_INTEGER; + l_buffer VARCHAR2(32766); + l_data CLOB; +BEGIN + DBMS_LOB.createtemporary (lob_loc => l_data, + cache => TRUE, + dur => DBMS_LOB.call); + + l_conn := get_passive(p_conn); + send_command(p_conn, 'RETR ' || p_file, TRUE); + --logout(l_conn, FALSE); + + BEGIN + LOOP + l_amount := UTL_TCP.read_text (l_conn, l_buffer, 32766); + DBMS_LOB.writeappend(l_data, l_amount, l_buffer); + END LOOP; + EXCEPTION + WHEN UTL_TCP.END_OF_INPUT THEN + NULL; + WHEN OTHERS THEN + NULL; + END; + UTL_TCP.close_connection(l_conn); + get_reply(p_conn); + + RETURN l_data; + +EXCEPTION + WHEN OTHERS THEN + UTL_TCP.close_connection(l_conn); + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION get_remote_binary_data (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2) + RETURN BLOB IS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; + l_amount PLS_INTEGER; + l_buffer RAW(32766); + l_data BLOB; +BEGIN + DBMS_LOB.createtemporary (lob_loc => l_data, + cache => TRUE, + dur => DBMS_LOB.call); + + l_conn := get_passive(p_conn); + send_command(p_conn, 'RETR ' || p_file, TRUE); + + BEGIN + LOOP + l_amount := UTL_TCP.read_raw (l_conn, l_buffer, 32766); + DBMS_LOB.writeappend(l_data, l_amount, l_buffer); + END LOOP; + EXCEPTION + WHEN UTL_TCP.END_OF_INPUT THEN + NULL; + WHEN OTHERS THEN + NULL; + END; + UTL_TCP.close_connection(l_conn); + get_reply(p_conn); + + RETURN l_data; + +EXCEPTION + WHEN OTHERS THEN + UTL_TCP.close_connection(l_conn); + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE put_local_ascii_data (p_data IN CLOB, + p_dir IN VARCHAR2, + p_file IN VARCHAR2) IS +-- -------------------------------------------------------------------------- + l_out_file UTL_FILE.file_type; + l_buffer VARCHAR2(32766); + l_amount BINARY_INTEGER := 32766; + l_pos INTEGER := 1; + l_clob_len INTEGER; +BEGIN + l_clob_len := DBMS_LOB.getlength(p_data); + + l_out_file := UTL_FILE.fopen(p_dir, p_file, 'w', 32766); + + WHILE l_pos <= l_clob_len LOOP + DBMS_LOB.read (p_data, l_amount, l_pos, l_buffer); + IF g_convert_crlf THEN + l_buffer := REPLACE(l_buffer, CHR(13), NULL); + END IF; + + UTL_FILE.put(l_out_file, l_buffer); + UTL_FILE.fflush(l_out_file); + l_pos := l_pos + l_amount; + END LOOP; + + UTL_FILE.fclose(l_out_file); +EXCEPTION + WHEN OTHERS THEN + IF UTL_FILE.is_open(l_out_file) THEN + UTL_FILE.fclose(l_out_file); + END IF; + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE put_local_binary_data (p_data IN BLOB, + p_dir IN VARCHAR2, + p_file IN VARCHAR2) IS +-- -------------------------------------------------------------------------- + l_out_file UTL_FILE.file_type; + l_buffer RAW(32766); + l_amount BINARY_INTEGER := 32766; + l_pos INTEGER := 1; + l_blob_len INTEGER; +BEGIN + l_blob_len := DBMS_LOB.getlength(p_data); + + l_out_file := UTL_FILE.fopen(p_dir, p_file, 'wb', 32766); + + WHILE l_pos <= l_blob_len LOOP + DBMS_LOB.read (p_data, l_amount, l_pos, l_buffer); + UTL_FILE.put_raw(l_out_file, l_buffer, TRUE); + UTL_FILE.fflush(l_out_file); + l_pos := l_pos + l_amount; + END LOOP; + + UTL_FILE.fclose(l_out_file); +EXCEPTION + WHEN OTHERS THEN + IF UTL_FILE.is_open(l_out_file) THEN + UTL_FILE.fclose(l_out_file); + END IF; + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE put_remote_ascii_data (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2, + p_data IN CLOB) IS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; + l_result PLS_INTEGER; + l_buffer VARCHAR2(32766); + l_amount BINARY_INTEGER := 32766; -- Switch to 10000 (or use binary) if you get ORA-06502 from this line. + l_pos INTEGER := 1; + l_clob_len INTEGER; +BEGIN + l_conn := get_passive(p_conn); + send_command(p_conn, 'STOR ' || p_file, TRUE); + + l_clob_len := DBMS_LOB.getlength(p_data); + + WHILE l_pos <= l_clob_len LOOP + DBMS_LOB.READ (p_data, l_amount, l_pos, l_buffer); + IF g_convert_crlf THEN + l_buffer := REPLACE(l_buffer, CHR(13), NULL); + END IF; + l_result := UTL_TCP.write_text(l_conn, l_buffer, LENGTH(l_buffer)); + UTL_TCP.flush(l_conn); + l_pos := l_pos + l_amount; + END LOOP; + + UTL_TCP.close_connection(l_conn); + -- The following line allows some people to make multiple calls from one connection. + -- It causes the operation to hang for me, hence it is commented out by default. + -- get_reply(p_conn); + +EXCEPTION + WHEN OTHERS THEN + UTL_TCP.close_connection(l_conn); + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE put_remote_binary_data (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2, + p_data IN BLOB) IS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; + l_result PLS_INTEGER; + l_buffer RAW(32766); + l_amount BINARY_INTEGER := 32766; + l_pos INTEGER := 1; + l_blob_len INTEGER; +BEGIN + l_conn := get_passive(p_conn); + send_command(p_conn, 'STOR ' || p_file, TRUE); + + l_blob_len := DBMS_LOB.getlength(p_data); + + WHILE l_pos <= l_blob_len LOOP + DBMS_LOB.READ (p_data, l_amount, l_pos, l_buffer); + l_result := UTL_TCP.write_raw(l_conn, l_buffer, l_amount); + UTL_TCP.flush(l_conn); + l_pos := l_pos + l_amount; + END LOOP; + + UTL_TCP.close_connection(l_conn); + -- The following line allows some people to make multiple calls from one connection. + -- It causes the operation to hang for me, hence it is commented out by default. + -- get_reply(p_conn); + +EXCEPTION + WHEN OTHERS THEN + UTL_TCP.close_connection(l_conn); + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE get (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from_file IN VARCHAR2, + p_to_dir IN VARCHAR2, + p_to_file IN VARCHAR2) AS +-- -------------------------------------------------------------------------- +BEGIN + IF g_binary THEN + put_local_binary_data(p_data => get_remote_binary_data (p_conn, p_from_file), + p_dir => p_to_dir, + p_file => p_to_file); + ELSE + put_local_ascii_data(p_data => get_remote_ascii_data (p_conn, p_from_file), + p_dir => p_to_dir, + p_file => p_to_file); + END IF; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE put (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from_dir IN VARCHAR2, + p_from_file IN VARCHAR2, + p_to_file IN VARCHAR2) AS +-- -------------------------------------------------------------------------- +BEGIN + IF g_binary THEN + put_remote_binary_data(p_conn => p_conn, + p_file => p_to_file, + p_data => get_local_binary_data(p_from_dir, p_from_file)); + ELSE + put_remote_ascii_data(p_conn => p_conn, + p_file => p_to_file, + p_data => get_local_ascii_data(p_from_dir, p_from_file)); + END IF; + get_reply(p_conn); +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE get_direct (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from_file IN VARCHAR2, + p_to_dir IN VARCHAR2, + p_to_file IN VARCHAR2) IS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; + l_out_file UTL_FILE.file_type; + l_amount PLS_INTEGER; + l_buffer VARCHAR2(32766); + l_raw_buffer RAW(32766); +BEGIN + l_conn := get_passive(p_conn); + send_command(p_conn, 'RETR ' || p_from_file, TRUE); + IF g_binary THEN + l_out_file := UTL_FILE.fopen(p_to_dir, p_to_file, 'wb', 32766); + ELSE + l_out_file := UTL_FILE.fopen(p_to_dir, p_to_file, 'w', 32766); + END IF; + + BEGIN + LOOP + IF g_binary THEN + l_amount := UTL_TCP.read_raw (l_conn, l_raw_buffer, 32766); + UTL_FILE.put_raw(l_out_file, l_raw_buffer, TRUE); + ELSE + l_amount := UTL_TCP.read_text (l_conn, l_buffer, 32766); + IF g_convert_crlf THEN + l_buffer := REPLACE(l_buffer, CHR(13), NULL); + END IF; + UTL_FILE.put(l_out_file, l_buffer); + END IF; + UTL_FILE.fflush(l_out_file); + END LOOP; + EXCEPTION + WHEN UTL_TCP.END_OF_INPUT THEN + NULL; + WHEN OTHERS THEN + NULL; + END; + UTL_FILE.fclose(l_out_file); + UTL_TCP.close_connection(l_conn); +EXCEPTION + WHEN OTHERS THEN + UTL_TCP.close_connection(l_conn); + IF UTL_FILE.is_open(l_out_file) THEN + UTL_FILE.fclose(l_out_file); + END IF; + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE put_direct (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from_dir IN VARCHAR2, + p_from_file IN VARCHAR2, + p_to_file IN VARCHAR2) IS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; + l_bfile BFILE; + l_result PLS_INTEGER; + l_amount PLS_INTEGER := 32766; + l_raw_buffer RAW(32766); + l_len NUMBER; + l_pos NUMBER := 1; + ex_ascii EXCEPTION; +BEGIN + IF NOT g_binary THEN + RAISE ex_ascii; + END IF; + + l_conn := get_passive(p_conn); + send_command(p_conn, 'STOR ' || p_to_file, TRUE); + + l_bfile := BFILENAME(p_from_dir, p_from_file); + + DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly); + l_len := DBMS_LOB.getlength(l_bfile); + + WHILE l_pos <= l_len LOOP + DBMS_LOB.READ (l_bfile, l_amount, l_pos, l_raw_buffer); + debug(l_amount); + l_result := UTL_TCP.write_raw(l_conn, l_raw_buffer, l_amount); + l_pos := l_pos + l_amount; + END LOOP; + + DBMS_LOB.fileclose(l_bfile); + UTL_TCP.close_connection(l_conn); +EXCEPTION + WHEN ex_ascii THEN + UTL_TCP.close_connection(l_conn); + RAISE_APPLICATION_ERROR(-20000, 'PUT_DIRECT not available in ASCII mode.'); + WHEN OTHERS THEN + UTL_TCP.close_connection(l_conn); + IF DBMS_LOB.fileisopen(l_bfile) = 1 THEN + DBMS_LOB.fileclose(l_bfile); + END IF; + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE help (p_conn IN OUT NOCOPY UTL_TCP.connection) AS +-- -------------------------------------------------------------------------- +BEGIN + send_command(p_conn, 'HELP', TRUE); +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE ascii (p_conn IN OUT NOCOPY UTL_TCP.connection) AS +-- -------------------------------------------------------------------------- +BEGIN + send_command(p_conn, 'TYPE A', TRUE); + g_binary := FALSE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE binary (p_conn IN OUT NOCOPY UTL_TCP.connection) AS +-- -------------------------------------------------------------------------- +BEGIN + send_command(p_conn, 'TYPE I', TRUE); + g_binary := TRUE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE list (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_dir IN VARCHAR2, + p_list OUT t_string_table) AS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; + l_list t_string_table := t_string_table(); + l_reply_code VARCHAR2(3) := NULL; +BEGIN + l_conn := get_passive(p_conn); + send_command(p_conn, 'LIST ' || p_dir, TRUE); + + BEGIN + LOOP + l_list.extend; + l_list(l_list.last) := UTL_TCP.get_line(l_conn, TRUE); + debug(l_list(l_list.last)); + IF l_reply_code IS NULL THEN + l_reply_code := SUBSTR(l_list(l_list.last), 1, 3); + END IF; + IF (SUBSTR(l_reply_code, 1, 1) IN ('4', '5') AND + SUBSTR(l_reply_code, 4, 1) = ' ') THEN + RAISE_APPLICATION_ERROR(-20000, l_list(l_list.last)); + ELSIF (SUBSTR(g_reply(g_reply.last), 1, 3) = l_reply_code AND + SUBSTR(g_reply(g_reply.last), 4, 1) = ' ') THEN + EXIT; + END IF; + END LOOP; + EXCEPTION + WHEN UTL_TCP.END_OF_INPUT THEN + NULL; + END; + + l_list.delete(l_list.last); + p_list := l_list; + + utl_tcp.close_connection(l_conn); + get_reply (p_conn); +EXCEPTION + WHEN OTHERS THEN + UTL_TCP.close_connection(l_conn); + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE nlst (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_dir IN VARCHAR2, + p_list OUT t_string_table) AS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; + l_list t_string_table := t_string_table(); + l_reply_code VARCHAR2(3) := NULL; +BEGIN + l_conn := get_passive(p_conn); + send_command(p_conn, 'NLST ' || p_dir, TRUE); + + BEGIN + LOOP + l_list.extend; + l_list(l_list.last) := UTL_TCP.get_line(l_conn, TRUE); + debug(l_list(l_list.last)); + IF l_reply_code IS NULL THEN + l_reply_code := SUBSTR(l_list(l_list.last), 1, 3); + END IF; + IF (SUBSTR(l_reply_code, 1, 1) IN ('4', '5') AND + SUBSTR(l_reply_code, 4, 1) = ' ') THEN + RAISE_APPLICATION_ERROR(-20000, l_list(l_list.last)); + ELSIF (SUBSTR(g_reply(g_reply.last), 1, 3) = l_reply_code AND + SUBSTR(g_reply(g_reply.last), 4, 1) = ' ') THEN + EXIT; + END IF; + END LOOP; + EXCEPTION + WHEN UTL_TCP.END_OF_INPUT THEN + NULL; + END; + + l_list.delete(l_list.last); + p_list := l_list; + + utl_tcp.close_connection(l_conn); + get_reply (p_conn); +EXCEPTION + WHEN OTHERS THEN + UTL_TCP.close_connection(l_conn); + RAISE; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE rename (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from IN VARCHAR2, + p_to IN VARCHAR2) AS +-- -------------------------------------------------------------------------- + l_conn UTL_TCP.connection; +BEGIN + send_command(p_conn, 'RNFR ' || p_from, TRUE); + send_command(p_conn, 'RNTO ' || p_to, TRUE); +END rename; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE delete (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2) AS +-- -------------------------------------------------------------------------- +BEGIN + send_command(p_conn, 'DELE ' || p_file, TRUE); +END delete; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE mkdir (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_dir IN VARCHAR2) AS +-- -------------------------------------------------------------------------- +BEGIN + send_command(p_conn, 'MKD ' || p_dir, TRUE); +END mkdir; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE rmdir (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_dir IN VARCHAR2) AS +-- -------------------------------------------------------------------------- +BEGIN + send_command(p_conn, 'RMD ' || p_dir, TRUE); +END rmdir; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE convert_crlf (p_status IN BOOLEAN) AS +-- -------------------------------------------------------------------------- +BEGIN + g_convert_crlf := p_status; +END; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE debug (p_text IN VARCHAR2) IS +-- -------------------------------------------------------------------------- +BEGIN + IF g_debug THEN + DBMS_OUTPUT.put_line(SUBSTR(p_text, 1, 255)); + END IF; +END; +-- -------------------------------------------------------------------------- + +END ftp; +/ +SHOW ERRORS \ No newline at end of file diff --git a/timhall/miscellaneous/ftp.pks b/timhall/miscellaneous/ftp.pks new file mode 100644 index 0000000..6c0cdf6 --- /dev/null +++ b/timhall/miscellaneous/ftp.pks @@ -0,0 +1,131 @@ +CREATE OR REPLACE PACKAGE ftp AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/ftp.pks +-- Author : Tim Hall +-- Description : Basic FTP API. For usage notes see: +-- https://oracle-base.com/articles/misc/ftp-from-plsql.php +-- Requirements : UTL_TCP +-- License : Free for personal and commercial use. +-- You can amend the code, but leave existing the headers, current +-- amendments history and links intact. +-- Copyright and disclaimer available here: +-- https://oracle-base.com/misc/site-info.php#copyright +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 14-AUG-2003 Tim Hall Initial Creation +-- 10-MAR-2004 Tim Hall Add convert_crlf procedure. +-- Make get_passive function visible. +-- Added get_direct and put_direct procedures. +-- 03-OCT-2006 Tim Hall Add list, rename, delete, mkdir, rmdir procedures. +-- 15-Jan-2008 Tim Hall login: Include timeout parameter (suggested by Dmitry Bogomolov). +-- 12-Jun-2008 Tim Hall get_reply: Moved to pakage specification. +-- 22-Apr-2009 Tim Hall nlst: Added to return list of file names only (suggested by Julian and John Duncan) +-- 24-May-2014 Tim Hall Added license information. +-- -------------------------------------------------------------------------- + +TYPE t_string_table IS TABLE OF VARCHAR2(32767); + +FUNCTION login (p_host IN VARCHAR2, + p_port IN VARCHAR2, + p_user IN VARCHAR2, + p_pass IN VARCHAR2, + p_timeout IN NUMBER := NULL) + RETURN UTL_TCP.connection; + +FUNCTION get_passive (p_conn IN OUT NOCOPY UTL_TCP.connection) + RETURN UTL_TCP.connection; + +PROCEDURE logout (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_reply IN BOOLEAN := TRUE); + +PROCEDURE send_command (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_command IN VARCHAR2, + p_reply IN BOOLEAN := TRUE); + +PROCEDURE get_reply (p_conn IN OUT NOCOPY UTL_TCP.connection); + +FUNCTION get_local_ascii_data (p_dir IN VARCHAR2, + p_file IN VARCHAR2) + RETURN CLOB; + +FUNCTION get_local_binary_data (p_dir IN VARCHAR2, + p_file IN VARCHAR2) + RETURN BLOB; + +FUNCTION get_remote_ascii_data (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2) + RETURN CLOB; + +FUNCTION get_remote_binary_data (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2) + RETURN BLOB; + +PROCEDURE put_local_ascii_data (p_data IN CLOB, + p_dir IN VARCHAR2, + p_file IN VARCHAR2); + +PROCEDURE put_local_binary_data (p_data IN BLOB, + p_dir IN VARCHAR2, + p_file IN VARCHAR2); + +PROCEDURE put_remote_ascii_data (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2, + p_data IN CLOB); + +PROCEDURE put_remote_binary_data (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2, + p_data IN BLOB); + +PROCEDURE get (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from_file IN VARCHAR2, + p_to_dir IN VARCHAR2, + p_to_file IN VARCHAR2); + +PROCEDURE put (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from_dir IN VARCHAR2, + p_from_file IN VARCHAR2, + p_to_file IN VARCHAR2); + +PROCEDURE get_direct (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from_file IN VARCHAR2, + p_to_dir IN VARCHAR2, + p_to_file IN VARCHAR2); + +PROCEDURE put_direct (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from_dir IN VARCHAR2, + p_from_file IN VARCHAR2, + p_to_file IN VARCHAR2); + +PROCEDURE help (p_conn IN OUT NOCOPY UTL_TCP.connection); + +PROCEDURE ascii (p_conn IN OUT NOCOPY UTL_TCP.connection); + +PROCEDURE binary (p_conn IN OUT NOCOPY UTL_TCP.connection); + +PROCEDURE list (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_dir IN VARCHAR2, + p_list OUT t_string_table); + +PROCEDURE nlst (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_dir IN VARCHAR2, + p_list OUT t_string_table); + +PROCEDURE rename (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_from IN VARCHAR2, + p_to IN VARCHAR2); + +PROCEDURE delete (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_file IN VARCHAR2); + +PROCEDURE mkdir (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_dir IN VARCHAR2); + +PROCEDURE rmdir (p_conn IN OUT NOCOPY UTL_TCP.connection, + p_dir IN VARCHAR2); + +PROCEDURE convert_crlf (p_status IN BOOLEAN); + +END ftp; +/ +SHOW ERRORS diff --git a/timhall/miscellaneous/gen_health.sql b/timhall/miscellaneous/gen_health.sql new file mode 100644 index 0000000..212cf70 --- /dev/null +++ b/timhall/miscellaneous/gen_health.sql @@ -0,0 +1,40 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/gen_health.sql +-- Author : Tim Hall +-- Description : Miscellaneous queries to check the general health of the system. +-- Call Syntax : @gen_health +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SELECT file_id, + tablespace_name, + file_name, + status +FROM sys.dba_data_files; + +SELECT file#, + name, + status, + enabled +FROM v$datafile; + +SELECT * +FROM v$backup; + +SELECT * +FROM v$recovery_status; + +SELECT * +FROM v$recover_file; + +SELECT * +FROM v$recovery_file_status; + +SELECT * +FROM v$recovery_log; + +SELECT username, + command, + status, + module +FROM v$session; + diff --git a/timhall/miscellaneous/get_pivot.sql b/timhall/miscellaneous/get_pivot.sql new file mode 100644 index 0000000..a072259 --- /dev/null +++ b/timhall/miscellaneous/get_pivot.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/get_pivot.sql +-- Author : Tim Hall +-- Description : Creates a function to produce a virtual pivot table with the specific values. +-- Requirements : CREATE TYPE, CREATE PROCEDURE +-- Call Syntax : @get_pivot.sql +-- Last Modified: 13/08/2003 +-- ----------------------------------------------------------------------------------- + +CREATE OR REPLACE TYPE t_pivot AS TABLE OF NUMBER; +/ + +CREATE OR REPLACE FUNCTION get_pivot(p_max IN NUMBER, + p_step IN NUMBER DEFAULT 1) + RETURN t_pivot AS + l_pivot t_pivot := t_pivot(); +BEGIN + FOR i IN 0 .. TRUNC(p_max/p_step) LOOP + l_pivot.extend; + l_pivot(l_pivot.last) := 1 + (i * p_step); + END LOOP; + RETURN l_pivot; +END; +/ +SHOW ERRORS + +SELECT column_value +FROM TABLE(get_pivot(17,2)); + diff --git a/timhall/miscellaneous/get_stat.sql b/timhall/miscellaneous/get_stat.sql new file mode 100644 index 0000000..188b92c --- /dev/null +++ b/timhall/miscellaneous/get_stat.sql @@ -0,0 +1,32 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/get_stat.sql +-- Author : Tim Hall +-- Description : A function to return the specified statistic value. +-- Requirements : Select on V_$MYSTAT and V_$STATNAME. +-- Call Syntax : Example of checking the amount of PGA memory allocated. +-- +-- DECLARE +-- l_start NUMBER; +-- BEGIN +-- l_start := get_stat('session pga memory'); +-- +-- -- Do something. +-- +-- DBMS_OUTPUT.put_line('PGA Memory Allocated : ' || (get_stat('session pga memory') - g_start) || ' bytes'); +-- END; +-- / +-- +-- Last Modified: 05/03/2018 +-- ----------------------------------------------------------------------------------- +CREATE OR REPLACE FUNCTION get_stat (p_stat IN VARCHAR2) RETURN NUMBER AS + l_return NUMBER; +BEGIN + SELECT ms.value + INTO l_return + FROM v$mystat ms, + v$statname sn + WHERE ms.statistic# = sn.statistic# + AND sn.name = p_stat; + RETURN l_return; +END get_stat; +/ \ No newline at end of file diff --git a/timhall/miscellaneous/login.sql b/timhall/miscellaneous/login.sql new file mode 100644 index 0000000..146f289 --- /dev/null +++ b/timhall/miscellaneous/login.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/login.sql +-- Author : Tim Hall +-- Description : Resets the SQL*Plus prompt when a new connection is made. +-- Call Syntax : @login +-- Last Modified: 04/03/2004 +-- ----------------------------------------------------------------------------------- +SET FEEDBACK OFF +SET TERMOUT OFF + +COLUMN X NEW_VALUE Y +SELECT LOWER(USER || '@' || SYS_CONTEXT('userenv', 'instance_name')) X FROM dual; +SET SQLPROMPT '&Y> ' + +ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'; +ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YYYY HH24:MI:SS.FF'; + +SET TERMOUT ON +SET FEEDBACK ON +SET LINESIZE 100 +SET TAB OFF +SET TRIM ON +SET TRIMSPOOL ON diff --git a/timhall/miscellaneous/part_hv_to_date.sql b/timhall/miscellaneous/part_hv_to_date.sql new file mode 100644 index 0000000..f554795 --- /dev/null +++ b/timhall/miscellaneous/part_hv_to_date.sql @@ -0,0 +1,34 @@ +CREATE OR REPLACE FUNCTION part_hv_to_date (p_table_owner IN VARCHAR2, + p_table_name IN VARCHAR2, + p_partition_name IN VARCHAR2) + RETURN DATE +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/part_hv_to_date.sql +-- Author : Tim Hall +-- Description : Create a function to turn partition HIGH_VALUE column to a date. +-- Call Syntax : @part_hv_to_date +-- Last Modified: 19/01/2012 +-- Notes : Has to re-select the value from the view as LONG cannot be passed as a parameter. +-- Example call: +-- +-- SELECT a.partition_name, +-- part_hv_to_date(a.table_owner, a.table_name, a.partition_name) as high_value +-- FROM all_tab_partitions a; +-- +-- Does no error handling. +-- ----------------------------------------------------------------------------------- +AS + l_high_value VARCHAR2(32767); + l_date DATE; +BEGIN + SELECT high_value + INTO l_high_value + FROM all_tab_partitions + WHERE table_owner = p_table_owner + AND table_name = p_table_name + AND partition_name = p_partition_name; + + EXECUTE IMMEDIATE 'SELECT ' || l_high_value || ' FROM dual' INTO l_date; + RETURN l_date; +END; +/ \ No newline at end of file diff --git a/timhall/miscellaneous/proc_defs.sql b/timhall/miscellaneous/proc_defs.sql new file mode 100644 index 0000000..48219b5 --- /dev/null +++ b/timhall/miscellaneous/proc_defs.sql @@ -0,0 +1,39 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/proc_defs.sql +-- Author : Tim Hall +-- Description : Lists the parameters for the specified package and procedure. +-- Call Syntax : @proc_defs (package-name) (procedure-name or all) +-- Last Modified: 24/09/2003 +-- ----------------------------------------------------------------------------------- +COLUMN "Object Name" FORMAT A30 +COLUMN ol FORMAT A2 +COLUMN sq FORMAT 99 +COLUMN "Argument Name" FORMAT A32 +COLUMN "Type" FORMAT A15 +COLUMN "Size" FORMAT A6 +BREAK ON ol SKIP 2 +SET PAGESIZE 0 +SET LINESIZE 200 +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +SELECT object_name AS "Object Name", + overload AS ol, + sequence AS sq, + RPAD(' ', data_level*2, ' ') || argument_name AS "Argument Name", + data_type AS "Type", + (CASE + WHEN data_type IN ('VARCHAR2','CHAR') THEN TO_CHAR(data_length) + WHEN data_scale IS NULL OR data_scale = 0 THEN TO_CHAR(data_precision) + ELSE TO_CHAR(data_precision) || ',' || TO_CHAR(data_scale) + END) "Size", + in_out AS "In/Out", + default_value +FROM user_arguments +WHERE package_name = UPPER('&1') +AND object_name = DECODE(UPPER('&2'), 'ALL', object_name, UPPER('&2')) +ORDER BY object_name, overload, sequence; + +SET PAGESIZE 14 +SET LINESIZE 80 diff --git a/timhall/miscellaneous/rebuild_index.sql b/timhall/miscellaneous/rebuild_index.sql new file mode 100644 index 0000000..86c7176 --- /dev/null +++ b/timhall/miscellaneous/rebuild_index.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/rebuild_index.sql +-- Author : Tim Hall +-- Description : Rebuilds the specified index, or all indexes. +-- Call Syntax : @rebuild_index (index-name or all) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'ALTER INDEX ' || a.index_name || ' REBUILD;' +FROM all_indexes a +WHERE index_name = DECODE(Upper('&1'),'ALL',a.index_name,Upper('&1')) +AND table_owner = Upper('&2') +ORDER BY 1 +/ + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/miscellaneous/smart_quotes_api.sql b/timhall/miscellaneous/smart_quotes_api.sql new file mode 100644 index 0000000..44e1f9f --- /dev/null +++ b/timhall/miscellaneous/smart_quotes_api.sql @@ -0,0 +1,213 @@ +CREATE OR REPLACE PACKAGE smart_quotes_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/smart_quotes_api.sql +-- Author : Tim Hall +-- Description : Routines to help deal with smart quotes.. +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 07-JUN-2017 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + +FUNCTION contains_smart_quote_bool (p_clob IN CLOB) RETURN BOOLEAN; +FUNCTION contains_smart_quote_bool (p_text IN VARCHAR2) RETURN BOOLEAN; +FUNCTION contains_smart_quote_num (p_clob IN CLOB) RETURN NUMBER; +FUNCTION contains_smart_quote_num (p_text IN VARCHAR2) RETURN NUMBER; + +PROCEDURE remove_smart_quotes (p_clob IN OUT NOCOPY CLOB); +PROCEDURE remove_smart_quotes (p_text IN OUT VARCHAR2); +FUNCTION remove_smart_quotes (p_clob IN CLOB) RETURN CLOB; +FUNCTION remove_smart_quotes (p_text IN VARCHAR2) RETURN VARCHAR2; + +END smart_quotes_api; +/ +SHOW ERRORS + + +CREATE OR REPLACE PACKAGE BODY smart_quotes_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/smart_quotes_api.sql +-- Author : Tim Hall +-- Description : Routines to help deal with smart quotes.. +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 07-JUN-2017 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + +TYPE t_sq_arr IS TABLE OF VARCHAR2(10) + INDEX BY VARCHAR2 (10); + +g_sq_arr t_sq_arr; + + +-- -------------------------------------------------------------------------- +FUNCTION contains_smart_quote_bool (p_clob IN CLOB) RETURN BOOLEAN AS + l_idx VARCHAR2(10); +BEGIN + l_idx := g_sq_arr.FIRST; + + WHILE l_idx IS NOT NULL LOOP + IF INSTR(p_clob, l_idx) > 0 THEN + RETURN TRUE; + END IF; + l_idx := g_sq_arr.NEXT(l_idx); + END LOOP display_loop; + + RETURN FALSE; +END contains_smart_quote_bool; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION contains_smart_quote_bool (p_text IN VARCHAR2) RETURN BOOLEAN AS + l_idx VARCHAR2(10); +BEGIN + l_idx := g_sq_arr.FIRST; + + WHILE l_idx IS NOT NULL LOOP + IF INSTR(p_text, l_idx) > 0 THEN + RETURN TRUE; + END IF; + l_idx := g_sq_arr.NEXT(l_idx); + END LOOP display_loop; + + RETURN FALSE; +END contains_smart_quote_bool; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION contains_smart_quote_num (p_clob IN CLOB) RETURN NUMBER AS +BEGIN + IF contains_smart_quote_bool (p_clob => p_clob) = TRUE THEN + RETURN 1; + ELSE + RETURN 0; + END IF; +END contains_smart_quote_num; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION contains_smart_quote_num (p_text IN VARCHAR2) RETURN NUMBER AS +BEGIN + IF contains_smart_quote_bool (p_text => p_text) = TRUE THEN + RETURN 1; + ELSE + RETURN 0; + END IF; +END contains_smart_quote_num; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE remove_smart_quotes (p_clob IN OUT NOCOPY CLOB) AS +-- -------------------------------------------------------------------------- + l_idx VARCHAR2(10); +BEGIN + l_idx := g_sq_arr.FIRST; + + WHILE l_idx IS NOT NULL LOOP + p_clob := REPLACE(p_clob, l_idx, g_sq_arr(l_idx)); + l_idx := g_sq_arr.NEXT(l_idx); + END LOOP display_loop; +END remove_smart_quotes; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +PROCEDURE remove_smart_quotes (p_text IN OUT VARCHAR2) AS +-- -------------------------------------------------------------------------- + l_idx VARCHAR2(10); +BEGIN + l_idx := g_sq_arr.FIRST; + + WHILE l_idx IS NOT NULL LOOP + p_text := REPLACE(p_text, l_idx, g_sq_arr(l_idx)); + l_idx := g_sq_arr.NEXT(l_idx); + END LOOP display_loop; +END remove_smart_quotes; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION remove_smart_quotes (p_clob IN CLOB) RETURN CLOB AS +-- -------------------------------------------------------------------------- + l_clob CLOB; +BEGIN + l_clob := p_clob; + remove_smart_quotes (p_clob => l_clob); + RETURN l_clob; +END remove_smart_quotes; +-- -------------------------------------------------------------------------- + + + +-- -------------------------------------------------------------------------- +FUNCTION remove_smart_quotes (p_text IN VARCHAR2) RETURN VARCHAR2 AS +-- -------------------------------------------------------------------------- + l_text VARCHAR2(32767); +BEGIN + l_text := p_text; + remove_smart_quotes (p_text => l_text); + RETURN l_text; +END remove_smart_quotes; +-- -------------------------------------------------------------------------- + + +BEGIN + -- Initialise Array of Smart Quotes. + -- Array Index = Smart Quote. + -- Array Value = Replacement Value. + g_sq_arr(CHR(145)) := ''''; + g_sq_arr(CHR(146)) := ''''; + --g_sq_arr(CHR(8216)) := ''''; + --g_sq_arr(CHR(8217)) := ''''; + + g_sq_arr(CHR(147)) := '"'; + g_sq_arr(CHR(148)) := '"'; + g_sq_arr(CHR(8220)) := '"'; + g_sq_arr(CHR(8221)) := '"'; + + g_sq_arr(CHR(151)) := '--'; + g_sq_arr(CHR(150)) := '-'; + g_sq_arr(CHR(133)) := '...'; + g_sq_arr(CHR(149)) := CHR(38)||'bull;'; + + g_sq_arr(CHR(49855)) := '-'; + g_sq_arr(CHR(50578)) := CHR(38)||'OElig;'; + g_sq_arr(CHR(50579)) := CHR(38)||'oelig;'; + g_sq_arr(CHR(50592)) := 'S'; + g_sq_arr(CHR(50593)) := 's'; + g_sq_arr(CHR(50616)) := 'Y'; + g_sq_arr(CHR(50834)) := 'f'; + g_sq_arr(CHR(52102)) := '^'; + g_sq_arr(CHR(52124)) := '~'; + g_sq_arr(CHR(14844051)) := '-'; + g_sq_arr(CHR(14844052)) := '-'; + g_sq_arr(CHR(14844053)) := '-'; + g_sq_arr(CHR(14844056)) := ''''; + g_sq_arr(CHR(14844057)) := ''''; + g_sq_arr(CHR(14844058)) := ','; + g_sq_arr(CHR(14844060)) := '"'; + g_sq_arr(CHR(14844061)) := '"'; + g_sq_arr(CHR(14844062)) := '"'; + g_sq_arr(CHR(14844064)) := CHR(38)||'dagger;'; + g_sq_arr(CHR(14844064)) := CHR(38)||'Dagger;'; + g_sq_arr(CHR(14844066)) := '.'; + g_sq_arr(CHR(14844070)) := '...'; + g_sq_arr(CHR(14844080)) := CHR(38)||'permil;'; + g_sq_arr(CHR(14844089)) := '<'; + g_sq_arr(CHR(14844090)) := '>'; + g_sq_arr(CHR(14845090)) := CHR(38)||'trade;'; + +END smart_quotes_api; +/ +SHOW ERRORS diff --git a/timhall/miscellaneous/soap_api.sql b/timhall/miscellaneous/soap_api.sql new file mode 100644 index 0000000..a59bdfc --- /dev/null +++ b/timhall/miscellaneous/soap_api.sql @@ -0,0 +1,270 @@ +CREATE OR REPLACE PACKAGE soap_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/soap_api.sql +-- Author : Tim Hall +-- Description : SOAP related functions for consuming web services. +-- License : Free for personal and commercial use. +-- You can amend the code, but leave existing the headers, current +-- amendments history and links intact. +-- Copyright and disclaimer available here: +-- https://oracle-base.com/misc/site-info.php#copyright +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 04-OCT-2003 Tim Hall Initial Creation +-- 23-FEB-2006 Tim Hall Parameterized the "soap" envelope tags. +-- 25-MAY-2012 Tim Hall Added debug switch. +-- 29-MAY-2012 Tim Hall Allow parameters to have no type definition. +-- Change the default envelope tag to "soap". +-- add_complex_parameter: Include parameter XML manually. +-- 24-MAY-2014 Tim Hall Added license information. +-- -------------------------------------------------------------------------- + +TYPE t_request IS RECORD ( + method VARCHAR2(256), + namespace VARCHAR2(256), + body VARCHAR2(32767), + envelope_tag VARCHAR2(30) +); + +TYPE t_response IS RECORD +( + doc XMLTYPE, + envelope_tag VARCHAR2(30) +); + +FUNCTION new_request(p_method IN VARCHAR2, + p_namespace IN VARCHAR2, + p_envelope_tag IN VARCHAR2 DEFAULT 'soap') + RETURN t_request; + + +PROCEDURE add_parameter(p_request IN OUT NOCOPY t_request, + p_name IN VARCHAR2, + p_value IN VARCHAR2, + p_type IN VARCHAR2 := NULL); + +PROCEDURE add_complex_parameter(p_request IN OUT NOCOPY t_request, + p_xml IN VARCHAR2); + +FUNCTION invoke(p_request IN OUT NOCOPY t_request, + p_url IN VARCHAR2, + p_action IN VARCHAR2) + RETURN t_response; + +FUNCTION get_return_value(p_response IN OUT NOCOPY t_response, + p_name IN VARCHAR2, + p_namespace IN VARCHAR2) + RETURN VARCHAR2; + +PROCEDURE debug_on; +PROCEDURE debug_off; + +END soap_api; +/ +SHOW ERRORS + + +CREATE OR REPLACE PACKAGE BODY soap_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/soap_api.sql +-- Author : Tim Hall +-- Description : SOAP related functions for consuming web services. +-- License : Free for personal and commercial use. +-- You can amend the code, but leave existing the headers, current +-- amendments history and links intact. +-- Copyright and disclaimer available here: +-- https://oracle-base.com/misc/site-info.php#copyright +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 04-OCT-2003 Tim Hall Initial Creation +-- 23-FEB-2006 Tim Hall Parameterized the "soap" envelope tags. +-- 25-MAY-2012 Tim Hall Added debug switch. +-- 29-MAY-2012 Tim Hall Allow parameters to have no type definition. +-- Change the default envelope tag to "soap". +-- add_complex_parameter: Include parameter XML manually. +-- 24-MAY-2014 Tim Hall Added license information. +-- -------------------------------------------------------------------------- + +g_debug BOOLEAN := FALSE; + +PROCEDURE show_envelope(p_env IN VARCHAR2, + p_heading IN VARCHAR2 DEFAULT NULL); + + + +-- --------------------------------------------------------------------- +FUNCTION new_request(p_method IN VARCHAR2, + p_namespace IN VARCHAR2, + p_envelope_tag IN VARCHAR2 DEFAULT 'soap') + RETURN t_request AS +-- --------------------------------------------------------------------- + l_request t_request; +BEGIN + l_request.method := p_method; + l_request.namespace := p_namespace; + l_request.envelope_tag := p_envelope_tag; + RETURN l_request; +END; +-- --------------------------------------------------------------------- + + + +-- --------------------------------------------------------------------- +PROCEDURE add_parameter(p_request IN OUT NOCOPY t_request, + p_name IN VARCHAR2, + p_value IN VARCHAR2, + p_type IN VARCHAR2 := NULL) AS +-- --------------------------------------------------------------------- +BEGIN + IF p_type IS NULL THEN + p_request.body := p_request.body||'<'||p_name||'>'||p_value||''; + ELSE + p_request.body := p_request.body||'<'||p_name||' xsi:type="'||p_type||'">'||p_value||''; + END IF; +END; +-- --------------------------------------------------------------------- + + + +-- --------------------------------------------------------------------- +PROCEDURE add_complex_parameter(p_request IN OUT NOCOPY t_request, + p_xml IN VARCHAR2) AS +-- --------------------------------------------------------------------- +BEGIN + p_request.body := p_request.body||p_xml; +END; +-- --------------------------------------------------------------------- + + + +-- --------------------------------------------------------------------- +PROCEDURE generate_envelope(p_request IN OUT NOCOPY t_request, + p_env IN OUT NOCOPY VARCHAR2) AS +-- --------------------------------------------------------------------- +BEGIN + p_env := '<'||p_request.envelope_tag||':Envelope xmlns:'||p_request.envelope_tag||'="http://schemas.xmlsoap.org/soap/envelope/" ' || + 'xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">' || + '<'||p_request.envelope_tag||':Body>' || + '<'||p_request.method||' '||p_request.namespace||' '||p_request.envelope_tag||':encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' || + p_request.body || + '' || + '' || + ''; +END; +-- --------------------------------------------------------------------- + + + +-- --------------------------------------------------------------------- +PROCEDURE show_envelope(p_env IN VARCHAR2, + p_heading IN VARCHAR2 DEFAULT NULL) AS +-- --------------------------------------------------------------------- + i PLS_INTEGER; + l_len PLS_INTEGER; +BEGIN + IF g_debug THEN + IF p_heading IS NOT NULL THEN + DBMS_OUTPUT.put_line('*****' || p_heading || '*****'); + END IF; + + i := 1; l_len := LENGTH(p_env); + WHILE (i <= l_len) LOOP + DBMS_OUTPUT.put_line(SUBSTR(p_env, i, 60)); + i := i + 60; + END LOOP; + END IF; +END; +-- --------------------------------------------------------------------- + + + +-- --------------------------------------------------------------------- +PROCEDURE check_fault(p_response IN OUT NOCOPY t_response) AS +-- --------------------------------------------------------------------- + l_fault_node XMLTYPE; + l_fault_code VARCHAR2(256); + l_fault_string VARCHAR2(32767); +BEGIN + l_fault_node := p_response.doc.extract('/'||p_response.envelope_tag||':Fault', + 'xmlns:'||p_response.envelope_tag||'="http://schemas.xmlsoap.org/soap/envelope/'); + IF (l_fault_node IS NOT NULL) THEN + l_fault_code := l_fault_node.extract('/'||p_response.envelope_tag||':Fault/faultcode/child::text()', + 'xmlns:'||p_response.envelope_tag||'="http://schemas.xmlsoap.org/soap/envelope/').getstringval(); + l_fault_string := l_fault_node.extract('/'||p_response.envelope_tag||':Fault/faultstring/child::text()', + 'xmlns:'||p_response.envelope_tag||'="http://schemas.xmlsoap.org/soap/envelope/').getstringval(); + RAISE_APPLICATION_ERROR(-20000, l_fault_code || ' - ' || l_fault_string); + END IF; +END; +-- --------------------------------------------------------------------- + + + +-- --------------------------------------------------------------------- +FUNCTION invoke(p_request IN OUT NOCOPY t_request, + p_url IN VARCHAR2, + p_action IN VARCHAR2) + RETURN t_response AS +-- --------------------------------------------------------------------- + l_envelope VARCHAR2(32767); + l_http_request UTL_HTTP.req; + l_http_response UTL_HTTP.resp; + l_response t_response; +BEGIN + generate_envelope(p_request, l_envelope); + show_envelope(l_envelope, 'Request'); + l_http_request := UTL_HTTP.begin_request(p_url, 'POST','HTTP/1.1'); + UTL_HTTP.set_header(l_http_request, 'Content-Type', 'text/xml'); + UTL_HTTP.set_header(l_http_request, 'Content-Length', LENGTH(l_envelope)); + UTL_HTTP.set_header(l_http_request, 'SOAPAction', p_action); + UTL_HTTP.write_text(l_http_request, l_envelope); + l_http_response := UTL_HTTP.get_response(l_http_request); + UTL_HTTP.read_text(l_http_response, l_envelope); + UTL_HTTP.end_response(l_http_response); + show_envelope(l_envelope, 'Response'); + l_response.doc := XMLTYPE.createxml(l_envelope); + l_response.envelope_tag := p_request.envelope_tag; + l_response.doc := l_response.doc.extract('/'||l_response.envelope_tag||':Envelope/'||l_response.envelope_tag||':Body/child::node()', + 'xmlns:'||l_response.envelope_tag||'="http://schemas.xmlsoap.org/soap/envelope/"'); + check_fault(l_response); + RETURN l_response; +END; +-- --------------------------------------------------------------------- + + + +-- --------------------------------------------------------------------- +FUNCTION get_return_value(p_response IN OUT NOCOPY t_response, + p_name IN VARCHAR2, + p_namespace IN VARCHAR2) + RETURN VARCHAR2 AS +-- --------------------------------------------------------------------- +BEGIN + RETURN p_response.doc.extract('//'||p_name||'/child::text()',p_namespace).getstringval(); +END; +-- --------------------------------------------------------------------- + + + +-- --------------------------------------------------------------------- +PROCEDURE debug_on AS +-- --------------------------------------------------------------------- +BEGIN + g_debug := TRUE; +END; +-- --------------------------------------------------------------------- + + + +-- --------------------------------------------------------------------- +PROCEDURE debug_off AS +-- --------------------------------------------------------------------- +BEGIN + g_debug := FALSE; +END; +-- --------------------------------------------------------------------- + +END soap_api; +/ +SHOW ERRORS \ No newline at end of file diff --git a/timhall/miscellaneous/string_agg.sql b/timhall/miscellaneous/string_agg.sql new file mode 100644 index 0000000..17961fc --- /dev/null +++ b/timhall/miscellaneous/string_agg.sql @@ -0,0 +1,87 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/string_agg.sql +-- Author : Tim Hall (based on an a method suggested by Tom Kyte). +-- http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:229614022562 +-- Description : Aggregate function to concatenate strings. +-- Call Syntax : Incorporate into queries as follows: +-- COLUMN employees FORMAT A50 +-- +-- SELECT deptno, string_agg(ename) AS employees +-- FROM emp +-- GROUP BY deptno; +-- +-- DEPTNO EMPLOYEES +-- ---------- -------------------------------------------------- +-- 10 CLARK,KING,MILLER +-- 20 SMITH,FORD,ADAMS,SCOTT,JONES +-- 30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD +-- +-- Last Modified: 03-JAN-2018 : Correction to separator handling in ODCIAggregateTerminate +-- and ODCIAggregateMerge, suggested by Kim Berg Hansen. +-- ----------------------------------------------------------------------------------- +CREATE OR REPLACE TYPE t_string_agg AS OBJECT +( + g_string VARCHAR2(32767), + + STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT t_string_agg) + RETURN NUMBER, + + MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_string_agg, + value IN VARCHAR2 ) + RETURN NUMBER, + + MEMBER FUNCTION ODCIAggregateTerminate(self IN t_string_agg, + returnValue OUT VARCHAR2, + flags IN NUMBER) + RETURN NUMBER, + + MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_string_agg, + ctx2 IN t_string_agg) + RETURN NUMBER +); +/ +SHOW ERRORS + + +CREATE OR REPLACE TYPE BODY t_string_agg IS + STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT t_string_agg) + RETURN NUMBER IS + BEGIN + sctx := t_string_agg(NULL); + RETURN ODCIConst.Success; + END; + + MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_string_agg, + value IN VARCHAR2 ) + RETURN NUMBER IS + BEGIN + SELF.g_string := self.g_string || ',' || value; + RETURN ODCIConst.Success; + END; + + MEMBER FUNCTION ODCIAggregateTerminate(self IN t_string_agg, + returnValue OUT VARCHAR2, + flags IN NUMBER) + RETURN NUMBER IS + BEGIN + returnValue := SUBSTR(SELF.g_string, 2); + RETURN ODCIConst.Success; + END; + + MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_string_agg, + ctx2 IN t_string_agg) + RETURN NUMBER IS + BEGIN + SELF.g_string := SELF.g_string || ctx2.g_string; + RETURN ODCIConst.Success; + END; +END; +/ +SHOW ERRORS + + +CREATE OR REPLACE FUNCTION string_agg (p_input VARCHAR2) +RETURN VARCHAR2 +PARALLEL_ENABLE AGGREGATE USING t_string_agg; +/ +SHOW ERRORS diff --git a/timhall/miscellaneous/string_api.sql b/timhall/miscellaneous/string_api.sql new file mode 100644 index 0000000..a95a6f7 --- /dev/null +++ b/timhall/miscellaneous/string_api.sql @@ -0,0 +1,198 @@ +CREATE OR REPLACE PACKAGE string_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/string_api.sql +-- Author : Tim Hall +-- Description : A package to hold string utilities. +-- Requirements : +-- Amendments : +-- When Who What +-- =========== ======== ================================================= +-- 02-DEC-2004 Tim Hall Initial Creation +-- 19-JAN-2017 Tim Hall Add get_uri_paramter_value function. +-- -------------------------------------------------------------------------- + +-- Public types +TYPE t_split_array IS TABLE OF VARCHAR2(4000); + +FUNCTION split_text (p_text IN CLOB, + p_delimeter IN VARCHAR2 DEFAULT ',') + RETURN t_split_array; + +PROCEDURE print_clob (p_clob IN CLOB); +PROCEDURE print_clob_old (p_clob IN CLOB); + +PROCEDURE print_clob_htp (p_clob IN CLOB); +PROCEDURE print_clob_htp_old (p_clob IN CLOB); + +FUNCTION get_uri_paramter_value (p_uri IN VARCHAR2, + p_param_name IN VARCHAR2) + RETURN VARCHAR2; + +END string_api; +/ +SHOW ERRORS + + +CREATE OR REPLACE PACKAGE BODY string_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/string_api.sql +-- Author : Tim Hall +-- Description : A package to hold string utilities. +-- Requirements : +-- Amendments : +-- When Who What +-- =========== ======== ================================================= +-- 02-DEC-2004 Tim Hall Initial Creation +-- 31-AUG-2017 Tim Hall SUBSTR parameters switched. +-- 19-JAN-2017 Tim Hall Add get_uri_paramter_value function. +-- 20-NOV-2018 Tim Hall Reduce the chunk sizes to allow for multibyte character sets. +-- -------------------------------------------------------------------------- + +-- Variables to support the URI functionality. +TYPE t_uri_array IS TABLE OF VARCHAR2(32767) INDEX BY VARCHAR2(32767); +g_last_uri VARCHAR2(32767) := 'initialized'; +g_uri_tab t_uri_array; + + + +-- ---------------------------------------------------------------------------- +FUNCTION split_text (p_text IN CLOB, + p_delimeter IN VARCHAR2 DEFAULT ',') + RETURN t_split_array IS +-- ---------------------------------------------------------------------------- +-- Could be replaced by APEX_UTIL.STRING_TO_TABLE. +-- ---------------------------------------------------------------------------- + l_array t_split_array := t_split_array(); + l_text CLOB := p_text; + l_idx NUMBER; +BEGIN + l_array.delete; + + IF l_text IS NULL THEN + RAISE_APPLICATION_ERROR(-20000, 'P_TEXT parameter cannot be NULL'); + END IF; + + WHILE l_text IS NOT NULL LOOP + l_idx := INSTR(l_text, p_delimeter); + l_array.extend; + IF l_idx > 0 THEN + l_array(l_array.last) := SUBSTR(l_text, 1, l_idx - 1); + l_text := SUBSTR(l_text, l_idx + 1); + ELSE + l_array(l_array.last) := l_text; + l_text := NULL; + END IF; + END LOOP; + RETURN l_array; +END split_text; +-- ---------------------------------------------------------------------------- + + + +-- ---------------------------------------------------------------------------- +PROCEDURE print_clob (p_clob IN CLOB) IS +-- ---------------------------------------------------------------------------- + l_offset NUMBER := 1; + l_chunk NUMBER := 255; +BEGIN + LOOP + EXIT WHEN l_offset > LENGTH(p_clob); + DBMS_OUTPUT.put_line(SUBSTR(p_clob, l_offset, l_chunk)); + l_offset := l_offset + l_chunk; + END LOOP; +END print_clob; +-- ---------------------------------------------------------------------------- + + + +-- ---------------------------------------------------------------------------- +PROCEDURE print_clob_old (p_clob IN CLOB) IS +-- ---------------------------------------------------------------------------- + l_offset NUMBER := 1; + l_chunk NUMBER := 255; +BEGIN + LOOP + EXIT WHEN l_offset > DBMS_LOB.getlength(p_clob); + DBMS_OUTPUT.put_line(DBMS_LOB.substr(p_clob, l_offset, l_chunk)); + l_offset := l_offset + l_chunk; + END LOOP; +END print_clob_old; +-- ---------------------------------------------------------------------------- + + + +-- ---------------------------------------------------------------------------- +PROCEDURE print_clob_htp (p_clob IN CLOB) IS +-- ---------------------------------------------------------------------------- + l_offset NUMBER := 1; + l_chunk NUMBER := 3000; +BEGIN + LOOP + EXIT WHEN l_offset > LENGTH(p_clob); + HTP.prn(SUBSTR(p_clob, l_offset, l_chunk)); + l_offset := l_offset + l_chunk; + END LOOP; +END print_clob_htp; +-- ---------------------------------------------------------------------------- + + + +-- ---------------------------------------------------------------------------- +PROCEDURE print_clob_htp_old (p_clob IN CLOB) IS +-- ---------------------------------------------------------------------------- + l_offset NUMBER := 1; + l_chunk NUMBER := 3000; +BEGIN + LOOP + EXIT WHEN l_offset > DBMS_LOB.getlength(p_clob); + HTP.prn(DBMS_LOB.substr(p_clob, l_offset, l_chunk)); + l_offset := l_offset + l_chunk; + END LOOP; +END print_clob_htp_old; +-- ---------------------------------------------------------------------------- + + + +-- ---------------------------------------------------------------------------- +FUNCTION get_uri_paramter_value (p_uri IN VARCHAR2, + p_param_name IN VARCHAR2) + RETURN VARCHAR2 IS +-- ---------------------------------------------------------------------------- +-- Example: +-- l_uri := 'https://localhost:8080/my_page.php?param1=value1¶m2=value2¶m3=value3'; +-- l_value := string_api.get_uri_paramter_value(l_uri, 'param1') +-- ---------------------------------------------------------------------------- + l_uri VARCHAR2(32767); + l_array t_split_array := t_split_array(); + l_idx NUMBER; +BEGIN + IF p_uri IS NULL OR p_param_name IS NULL THEN + RAISE_APPLICATION_ERROR(-20000, 'p_uri and p_param_name must be specified.'); + END IF; + + IF p_uri != g_last_uri THEN + -- First time we've seen this URI, so build the key-value table. + g_uri_tab.DELETE; + g_last_uri := p_uri; + l_uri := TRANSLATE(g_last_uri, '&?', '^^'); + l_array := split_text(l_uri, '^'); + FOR i IN 1 .. l_array.COUNT LOOP + l_idx := INSTR(l_array(i), '='); + IF l_idx != 0 THEN + g_uri_tab(SUBSTR(l_array(i), 1, l_idx - 1)) := SUBSTR(l_array(i), l_idx + 1); + --DBMS_OUTPUT.put_line('param_name=' || SUBSTR(l_array(i), 1, l_idx - 1) || + -- ' | param_value=' || SUBSTR(l_array(i), l_idx + 1)); + END IF; + END LOOP; + END IF; + + RETURN g_uri_tab(p_param_name); +EXCEPTION + WHEN NO_DATA_FOUND THEN + RETURN NULL; +END get_uri_paramter_value; +-- ---------------------------------------------------------------------------- + +END string_api; +/ +SHOW ERRORS diff --git a/timhall/miscellaneous/switch_schema.sql b/timhall/miscellaneous/switch_schema.sql new file mode 100644 index 0000000..d446514 --- /dev/null +++ b/timhall/miscellaneous/switch_schema.sql @@ -0,0 +1,76 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/switch_schema.sql +-- Author : Tim Hall +-- Description : Allows developers to switch synonyms between schemas where a single instance +-- : contains multiple discrete schemas. +-- Requirements : Must be loaded into privileged user such as SYS. +-- Usage : Create the package in a user that has the appropriate privileges to perform the actions (SYS) +-- : Amend the list of schemas in the "reset_grants" FOR LOOP as necessary. +-- : Call SWITCH_SCHEMA.RESET_GRANTS once to grant privileges to the developer role. +-- : Assign the developer role to all developers. +-- : Tell developers to use EXEC SWITCH_SCHEMA.RESET_SCHEMA_SYNONYMS ('SCHEMA-NAME'); to switch +-- : there synonyms between schemas. +-- Call Syntax : EXEC SWITCH_SCHEMA.RESET_SCHEMA_SYNONYMS ('SCHEMA-NAME'); +-- Last Modified: 02/06/2003 +-- ----------------------------------------------------------------------------------- +CREATE OR REPLACE PACKAGE switch_schema AS + +PROCEDURE reset_grants; +PROCEDURE reset_schema_synonyms (p_schema IN VARCHAR2); + +END; +/ + +SHOW ERRORS + + +CREATE OR REPLACE PACKAGE BODY switch_schema AS + +PROCEDURE reset_grants IS +BEGIN + FOR cur_obj IN (SELECT owner, object_name, object_type + FROM all_objects + WHERE owner IN ('SCHEMA1','SCHEMA2','SCHEMA3','SCHEMA4') + AND object_type IN ('TABLE','VIEW','SEQUENCE', 'PACKAGE', 'PROCEDURE', 'FUNCTION', 'TYPE')) + LOOP + CASE + WHEN cur_obj.object_type IN ('TABLE','VIEW') THEN + EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE, DELETE ON ' || cur_obj.owner || '."' || cur_obj.object_name || '" TO developer'; + WHEN cur_obj.object_type IN ('SEQUENCE') THEN + EXECUTE IMMEDIATE 'GRANT SELECT ON ' || cur_obj.owner || '."' || cur_obj.object_name || '" TO developer'; + WHEN cur_obj.object_type IN ('PACKAGE', 'PROCEDURE', 'FUNCTION', 'TYPE') THEN + EXECUTE IMMEDIATE 'GRANT EXECUTE ON ' || cur_obj.owner || '."' || cur_obj.object_name || '" TO developer'; + END CASE; + END LOOP; +END; + +PROCEDURE reset_schema_synonyms (p_schema IN VARCHAR2) IS + v_user VARCHAR2(30) := USER; +BEGIN + -- Drop all existing synonyms + FOR cur_obj IN (SELECT synonym_name + FROM all_synonyms + WHERE owner = v_user) + LOOP + EXECUTE IMMEDIATE 'DROP SYNONYM ' || v_user || '."' || cur_obj.synonym_name || '"'; + END LOOP; + + -- Create new synonyms + FOR cur_obj IN (SELECT object_name, object_type + FROM all_objects + WHERE owner = p_schema + AND object_type IN ('TABLE','VIEW','SEQUENCE')) + LOOP + EXECUTE IMMEDIATE 'CREATE SYNONYM ' || v_user || '."' || cur_obj.object_name || '" FOR ' || p_schema || '."' || cur_obj.object_name || '"'; + END LOOP; +END; + +END; +/ + +SHOW ERRORS + +CREATE PUBLIC SYNONYM switch_schema FOR switch_schema; +GRANT EXECUTE ON switch_schema TO PUBLIC; + +CREATE ROLE developer; diff --git a/timhall/miscellaneous/table_comments.sql b/timhall/miscellaneous/table_comments.sql new file mode 100644 index 0000000..3c72b2d --- /dev/null +++ b/timhall/miscellaneous/table_comments.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/table_comments.sql +-- Author : Tim Hall +-- Description : Displays comments associate with specific tables. +-- Requirements : Access to the DBA views. +-- Call Syntax : @table_comments (schema or all) (table-name or partial match) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +COLUMN table_name FORMAT A30 +COLUMN comments FORMAT A40 + +SELECT table_name, + comments +FROM dba_tab_comments +WHERE owner = DECODE(UPPER('&1'), 'ALL', owner, UPPER('&1')) +AND table_name LIKE UPPER('%&2%') +ORDER BY table_name; diff --git a/timhall/miscellaneous/table_defs.sql b/timhall/miscellaneous/table_defs.sql new file mode 100644 index 0000000..e5a9034 --- /dev/null +++ b/timhall/miscellaneous/table_defs.sql @@ -0,0 +1,34 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/table_defs.sql +-- Author : Tim Hall +-- Description : Lists the column definitions for the specified table. +-- Call Syntax : @table_defs (tablee-name or all) +-- Last Modified: 24/09/2003 +-- ----------------------------------------------------------------------------------- +COLUMN column_id FORMAT 99 +COLUMN data_type FORMAT A10 +COLUMN nullable FORMAT A8 +COLUMN size FORMAT A6 +BREAK ON table_name SKIP 2 +SET PAGESIZE 0 +SET LINESIZE 200 +SET TRIMOUT ON +SET TRIMSPOOL ON +SET VERIFY OFF + +SELECT table_name, + column_id, + column_name, + data_type, + (CASE + WHEN data_type IN ('VARCHAR2','CHAR') THEN TO_CHAR(data_length) + WHEN data_scale IS NULL OR data_scale = 0 THEN TO_CHAR(data_precision) + ELSE TO_CHAR(data_precision) || ',' || TO_CHAR(data_scale) + END) "SIZE", + DECODE(nullable, 'Y', '', 'NOT NULL') nullable +FROM user_tab_columns +WHERE table_name = DECODE(UPPER('&1'), 'ALL', table_name, UPPER('&1')) +ORDER BY table_name, column_id; + +SET PAGESIZE 14 +SET LINESIZE 80 diff --git a/timhall/miscellaneous/table_differences.sql b/timhall/miscellaneous/table_differences.sql new file mode 100644 index 0000000..843ef60 --- /dev/null +++ b/timhall/miscellaneous/table_differences.sql @@ -0,0 +1,132 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/miscellaneous/table_differences.sql +-- Author : Tim Hall +-- Description : Checks column differences between a specified table or ALL tables. +-- : The comparison is done both ways so datatype/size mismatches will +-- : be listed twice per column. +-- : Log into the first schema-owner. Make sure a DB Link is set up to +-- : the second schema owner. Use this DB Link in the definition of +-- : the c_table2 cursor and amend v_owner1 and v_owner2 accordingly +-- : to make output messages sensible. +-- : The result is spooled to the Tab_Diffs.txt file in the working directory. +-- Call Syntax : @table_differences (table-name or all) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET LINESIZE 500 +SET VERIFY OFF +SET FEEDBACK OFF +PROMPT + +SPOOL Tab_Diffs.txt + +DECLARE + + CURSOR c_tables IS + SELECT a.table_name + FROM user_tables a + WHERE a.table_name = Decode(Upper('&&1'),'ALL',a.table_name,Upper('&&1')); + + CURSOR c_table1 (p_table_name IN VARCHAR2, + p_column_name IN VARCHAR2) IS + SELECT a.column_name, + a.data_type, + a.data_length, + a.data_precision, + a.data_scale, + a.nullable + FROM user_tab_columns a + WHERE a.table_name = p_table_name + AND a.column_name = NVL(p_column_name,a.column_name); + + CURSOR c_table2 (p_table_name IN VARCHAR2, + p_column_name IN VARCHAR2) IS + SELECT a.column_name, + a.data_type, + a.data_length, + a.data_precision, + a.data_scale, + a.nullable + FROM user_tab_columns@pdds a + WHERE a.table_name = p_table_name + AND a.column_name = NVL(p_column_name,a.column_name); + + v_owner1 VARCHAR2(10) := 'DDDS2'; + v_owner2 VARCHAR2(10) := 'PDDS'; + v_data c_table1%ROWTYPE; + v_work BOOLEAN := FALSE; + +BEGIN + + Dbms_Output.Disable; + Dbms_Output.Enable(1000000); + + FOR cur_tab IN c_tables LOOP + v_work := FALSE; + FOR cur_rec IN c_table1 (cur_tab.table_name, NULL) LOOP + v_work := TRUE; + + OPEN c_table2 (cur_tab.table_name, cur_rec.column_name); + FETCH c_table2 + INTO v_data; + IF c_table2%NOTFOUND THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : Present in ' || v_owner1 || ' but not in ' || v_owner2); + ELSE + IF cur_rec.data_type != v_data.data_type THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : DATA_TYPE differs between ' || v_owner1 || ' and ' || v_owner2); + END IF; + IF cur_rec.data_length != v_data.data_length THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : DATA_LENGTH differs between ' || v_owner1 || ' and ' || v_owner2); + END IF; + IF cur_rec.data_precision != v_data.data_precision THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : DATA_PRECISION differs between ' || v_owner1 || ' and ' || v_owner2); + END IF; + IF cur_rec.data_scale != v_data.data_scale THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : DATA_SCALE differs between ' || v_owner1 || ' and ' || v_owner2); + END IF; + IF cur_rec.nullable != v_data.nullable THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : NULLABLE differs between ' || v_owner1 || ' and ' || v_owner2); + END IF; + END IF; + CLOSE c_table2; + END LOOP; + + FOR cur_rec IN c_table2 (cur_tab.table_name, NULL) LOOP + v_work := TRUE; + + OPEN c_table1 (cur_tab.table_name, cur_rec.column_name); + FETCH c_table1 + INTO v_data; + IF c_table1%NOTFOUND THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : Present in ' || v_owner2 || ' but not in ' || v_owner1); + ELSE + IF cur_rec.data_type != v_data.data_type THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : DATA_TYPE differs between ' || v_owner2 || ' and ' || v_owner1); + END IF; + IF cur_rec.data_length != v_data.data_length THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : DATA_LENGTH differs between ' || v_owner2 || ' and ' || v_owner1); + END IF; + IF cur_rec.data_precision != v_data.data_precision THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : DATA_PRECISION differs between ' || v_owner2 || ' and ' || v_owner1); + END IF; + IF cur_rec.data_scale != v_data.data_scale THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : DATA_SCALE differs between ' || v_owner2 || ' and ' || v_owner1); + END IF; + IF cur_rec.nullable != v_data.nullable THEN + Dbms_Output.Put_Line(cur_tab.table_name || '.' || cur_rec.column_name || ' : NULLABLE differs between ' || v_owner2 || ' and ' || v_owner1); + END IF; + END IF; + CLOSE c_table1; + END LOOP; + + IF v_work = FALSE THEN + Dbms_Output.Put_Line(cur_tab.table_name || ' does not exist!'); + END IF; + END LOOP; +END; +/ + +SPOOL OFF + +PROMPT +SET FEEDBACK ON diff --git a/timhall/miscellaneous/trc.pkb b/timhall/miscellaneous/trc.pkb new file mode 100644 index 0000000..ca34a76 --- /dev/null +++ b/timhall/miscellaneous/trc.pkb @@ -0,0 +1,111 @@ +CREATE OR REPLACE PACKAGE BODY trc AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/trc.pkb +-- Author : Tim Hall +-- Description : A simple mechanism for tracing information to a table. +-- Requirements : trc.pks, dsp.pks, dsp.pkb and schema definied in trc.pks +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 08-JAN-2002 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + + -- Package Variables + g_trace_on BOOLEAN := FALSE; + g_date_format VARCHAR2(50) := 'DD-MON-YYYY HH24:MI:SS'; + + -- Exposed Methods + + -- -------------------------------------------------------------------------- + PROCEDURE reset_defaults IS + -- -------------------------------------------------------------------------- + BEGIN + g_trace_on := FALSE; + g_date_format := 'DD-MON-YYYY HH24:MI:SS'; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE trace_on IS + -- -------------------------------------------------------------------------- + BEGIN + g_trace_on := TRUE; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE trace_off IS + -- -------------------------------------------------------------------------- + BEGIN + g_trace_on := FALSE; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE set_date_format (p_date_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS') IS + -- -------------------------------------------------------------------------- + BEGIN + g_date_format := p_date_format; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN VARCHAR2, + p_trc_level IN NUMBER DEFAULT 5, + p_trc_user IN VARCHAR2 DEFAULT USER) IS + -- -------------------------------------------------------------------------- + PRAGMA AUTONOMOUS_TRANSACTION; + BEGIN + IF g_trace_on THEN + INSERT INTO trace_data + (id, + prefix, + data, + trc_level, + created_date, + created_by) + VALUES + (trc_seq.nextval, + p_prefix, + p_data, + p_trc_level, + Sysdate, + p_trc_user); + + COMMIT; + END IF; + END; + -- -------------------------------------------------------------------------- + + + -- -------------------------------------------------------------------------- + PROCEDURE display (p_trc_level IN NUMBER DEFAULT NULL, + p_trc_user IN VARCHAR2 DEFAULT NULL, + p_from_date IN DATE DEFAULT NULL, + p_to_date IN DATE DEFAULT NUll) IS + -- -------------------------------------------------------------------------- + CURSOR c_trace IS + SELECT * + FROM trace_data + WHERE trc_level = NVL(p_trc_level, trc_level) + AND created_by = NVL(p_trc_user, created_by) + AND created_date >= NVL(p_from_date, created_date) + AND created_date <= NVL(p_to_date, created_date) + ORDER BY id; + BEGIN + FOR cur_rec IN c_trace LOOP + dsp.line(cur_rec.prefix, cur_rec.data); + END LOOP; + END; + -- -------------------------------------------------------------------------- + +END trc; +/ + +SHOW ERRORS + diff --git a/timhall/miscellaneous/trc.pks b/timhall/miscellaneous/trc.pks new file mode 100644 index 0000000..4aaca61 --- /dev/null +++ b/timhall/miscellaneous/trc.pks @@ -0,0 +1,46 @@ +CREATE OR REPLACE PACKAGE trc AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/trc.pks +-- Author : Tim Hall +-- Description : A simple mechanism for tracing information to a table. +-- Requirements : trc.pkb, dsp.pks, dsp.pkb and: +-- +-- CREATE TABLE trace_data ( +-- id NUMBER(10) NOT NULL, +-- prefix VARCHAR2(50), +-- data VARCHAR2(2000) NOT NULL, +-- trc_level NUMBER(2) NOT NULL, +-- created_date DATE NOT NULL, +-- created_by VARCHAR2(50) NOT NULL); +-- +-- ALTER TABLE trace_data ADD (CONSTRAINT trc_pk PRIMARY KEY (id)); +-- +-- CREATE SEQUENCE trc_seq; +-- +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 08-JAN-2002 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + + PROCEDURE reset_defaults; + + PROCEDURE trace_on; + PROCEDURE trace_off; + + PROCEDURE set_date_format (p_date_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS'); + + PROCEDURE line (p_prefix IN VARCHAR2, + p_data IN VARCHAR2, + p_trc_level IN NUMBER DEFAULT 5, + p_trc_user IN VARCHAR2 DEFAULT USER); + + PROCEDURE display (p_trc_level IN NUMBER DEFAULT NULL, + p_trc_user IN VARCHAR2 DEFAULT NULL, + p_from_date IN DATE DEFAULT NULL, + p_to_date IN DATE DEFAULT NUll); +END trc; +/ + +SHOW ERRORS + diff --git a/timhall/miscellaneous/ts_move_api.sql b/timhall/miscellaneous/ts_move_api.sql new file mode 100644 index 0000000..98d0c31 --- /dev/null +++ b/timhall/miscellaneous/ts_move_api.sql @@ -0,0 +1,246 @@ +CREATE OR REPLACE PACKAGE ts_move_api AUTHID CURRENT_USER AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/ts_move_api.sql +-- Author : Tim Hall +-- Description : Allows you to move objects between tablespaces. +-- Requirements : The package should be run by a DBA user. +-- +-- The following grants are needed for this package to compile. +-- +-- GRANT SELECT ON dba_tables TO username; +-- GRANT SELECT ON dba_tab_partitions TO username; +-- GRANT SELECT ON dba_indexes TO username; +-- GRANT SELECT ON dba_ind_partitions TO username; +-- GRANT SELECT ON dba_lobs TO username; +-- +-- License : Free for personal and commercial use. +-- You can amend the code, but leave existing the headers, current +-- amendments history and links intact. +-- Copyright and disclaimer available here: +-- https://oracle-base.com/misc/site-info.php#copyright +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 20-JUN-2010 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + +PROCEDURE move_tables( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +); + +PROCEDURE move_part_tables( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +); + +PROCEDURE move_indexes( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +); + +PROCEDURE move_part_indexes( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +); + +PROCEDURE move_lobs( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +); + +END ts_move_api; +/ +SHOW ERRORS + + + +CREATE OR REPLACE PACKAGE BODY ts_move_api AS +-- -------------------------------------------------------------------------- +-- Name : https://oracle-base.com/dba/miscellaneous/ts_move_api.sql +-- Author : Tim Hall +-- Description : Allows you to move objects between tablespaces. +-- Requirements : The package should be run by a DBA user. +-- +-- The following grants are needed for this package to compile. +-- +-- GRANT SELECT ON dba_tables TO username; +-- GRANT SELECT ON dba_tab_partitions TO username; +-- GRANT SELECT ON dba_indexes TO username; +-- GRANT SELECT ON dba_ind_partitions TO username; +-- GRANT SELECT ON dba_lobs TO username; +-- +-- License : Free for personal and commercial use. +-- You can amend the code, but leave existing the headers, current +-- amendments history and links intact. +-- Copyright and disclaimer available here: +-- https://oracle-base.com/misc/site-info.php#copyright +-- Ammedments : +-- When Who What +-- =========== ======== ================================================= +-- 20-JUN-2010 Tim Hall Initial Creation +-- -------------------------------------------------------------------------- + +g_sql VARCHAR2(32767); + +-- ----------------------------------------------------------------------------- +PROCEDURE move_tables( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +) AS + +BEGIN + FOR cur_rec IN (SELECT owner, table_name + FROM dba_tables + WHERE tablespace_name = UPPER(p_from_ts) + AND partitioned = 'NO' + AND temporary = 'N') + LOOP + BEGIN + g_sql := 'ALTER TABLE "' || cur_rec.owner || '"."' || cur_rec.table_name || '" MOVE TABLESPACE ' || p_to_ts; + EXECUTE IMMEDIATE g_sql; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line('ERROR: ' || g_sql); + DBMS_OUTPUT.put_line('ERROR: ' || SQLERRM); + END; + END LOOP; +END move_tables; +-- ----------------------------------------------------------------------------- + + +-- ----------------------------------------------------------------------------- +PROCEDURE move_part_tables( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +) AS + +BEGIN + -- Table partitions. + FOR cur_rec IN (SELECT table_owner, table_name, partition_name + FROM dba_tab_partitions + WHERE tablespace_name = UPPER(p_from_ts)) + LOOP + BEGIN + g_sql := 'ALTER TABLE "' || cur_rec.table_owner || '"."' || cur_rec.table_name || '" MOVE PARTITION "' || cur_rec.partition_name || '" TABLESPACE ' || p_to_ts; + EXECUTE IMMEDIATE g_sql; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line('ERROR: ' || g_sql); + DBMS_OUTPUT.put_line('ERROR: ' || SQLERRM); + END; + END LOOP; + + -- Partitioned table defaults. + FOR cur_rec IN (SELECT owner, table_name + FROM dba_tables + WHERE tablespace_name = UPPER(p_from_ts) + AND partitioned = 'YES') + LOOP + BEGIN + g_sql := 'ALTER TABLE "' || cur_rec.owner || '"."' || cur_rec.table_name || '" MODIFY DEFAULT ATTRIBUTES TABLESPACE ' || p_to_ts; + EXECUTE IMMEDIATE g_sql; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line('ERROR: ' || g_sql); + DBMS_OUTPUT.put_line('ERROR: ' || SQLERRM); + END; + END LOOP; +END move_part_tables; +-- ----------------------------------------------------------------------------- + + +-- ----------------------------------------------------------------------------- +PROCEDURE move_indexes( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +) AS + +BEGIN + FOR cur_rec IN (SELECT owner, index_name + FROM dba_indexes + WHERE tablespace_name = UPPER(p_from_ts) + AND partitioned = 'NO' + AND index_type != 'LOB') + LOOP + BEGIN + g_sql := 'ALTER INDEX "' || cur_rec.owner || '"."' || cur_rec.index_name || '" REBUILD TABLESPACE ' || p_to_ts; + EXECUTE IMMEDIATE g_sql; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line('ERROR: ' || g_sql); + DBMS_OUTPUT.put_line('ERROR: ' || SQLERRM); + END; + END LOOP; +END move_indexes; +-- ----------------------------------------------------------------------------- + + +-- ----------------------------------------------------------------------------- +PROCEDURE move_part_indexes( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +) AS + +BEGIN + -- Index partitions. + FOR cur_rec IN (SELECT index_owner, index_name, partition_name + FROM dba_ind_partitions + WHERE tablespace_name = UPPER(p_from_ts)) + LOOP + BEGIN + g_sql := 'ALTER INDEX "' || cur_rec.index_owner || '"."' || cur_rec.index_name || '" REBUILD PARTITION "' || cur_rec.partition_name || '" TABLESPACE ' || p_to_ts; + EXECUTE IMMEDIATE g_sql; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line('ERROR: ' || g_sql); + DBMS_OUTPUT.put_line('ERROR: ' || SQLERRM); + END; + END LOOP; + + -- Partitioned index default. + FOR cur_rec IN (SELECT owner, index_name + FROM dba_indexes + WHERE tablespace_name = UPPER(p_from_ts) + AND partitioned = 'YES') + LOOP + BEGIN + g_sql := 'ALTER INDEX "' || cur_rec.owner || '"."' || cur_rec.index_name || '" MODIFY DEFAULT ATTRIBUTES TABLESPACE ' || p_to_ts; + EXECUTE IMMEDIATE g_sql; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line('ERROR: ' || g_sql); + DBMS_OUTPUT.put_line('ERROR: ' || SQLERRM); + END; + END LOOP; +END move_part_indexes; +-- ----------------------------------------------------------------------------- + + +-- ----------------------------------------------------------------------------- +PROCEDURE move_lobs( + p_from_ts IN VARCHAR2, + p_to_ts IN VARCHAR2 +) AS + +BEGIN + FOR cur_rec IN (SELECT owner, table_name, column_name + FROM dba_lobs + WHERE tablespace_name = UPPER(p_from_ts) + AND partitioned = 'NO') + LOOP + BEGIN + g_sql := 'ALTER TABLE "' || cur_rec.owner || '"."' || cur_rec.table_name || '" MOVE LOB("' || cur_rec.column_name || '") STORE AS (TABLESPACE ' || p_to_ts || ')'; + EXECUTE IMMEDIATE g_sql; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.put_line('ERROR: ' || g_sql); + DBMS_OUTPUT.put_line('ERROR: ' || SQLERRM); + END; + END LOOP; +END move_lobs; +-- ----------------------------------------------------------------------------- + +END ts_move_api; +/ +SHOW ERRORS diff --git a/timhall/monitoring/access.sql b/timhall/monitoring/access.sql new file mode 100644 index 0000000..cbc10b0 --- /dev/null +++ b/timhall/monitoring/access.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/access.sql +-- Author : Tim Hall +-- Description : Lists all objects being accessed in the schema. +-- Call Syntax : @access (schema-name or all) (object-name or all) +-- Requirements : Access to the v$views. +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 255 +SET VERIFY OFF + +COLUMN object FORMAT A30 + +SELECT a.object, + a.type, + a.sid, + b.serial#, + b.username, + b.osuser, + b.program +FROM v$access a, + v$session b +WHERE a.sid = b.sid +AND a.owner = DECODE(UPPER('&1'), 'ALL', a.object, UPPER('&1')) +AND a.object = DECODE(UPPER('&2'), 'ALL', a.object, UPPER('&2')) +ORDER BY a.object; diff --git a/timhall/monitoring/active_sessions.sql b/timhall/monitoring/active_sessions.sql new file mode 100644 index 0000000..f558fc8 --- /dev/null +++ b/timhall/monitoring/active_sessions.sql @@ -0,0 +1,42 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/active_sessions.sql +-- Author : Tim Hall +-- Description : Displays information on all active database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @active_sessions +-- Last Modified: 16-MAY-2019 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 + +COLUMN username FORMAT A30 +COLUMN osuser FORMAT A20 +COLUMN spid FORMAT A10 +COLUMN service_name FORMAT A15 +COLUMN module FORMAT A45 +COLUMN machine FORMAT A30 +COLUMN logon_time FORMAT A20 + +SELECT NVL(s.username, '(oracle)') AS username, + s.osuser, + s.sid, + s.serial#, + p.spid, + s.lockwait, + s.status, + s.machine, + s.program, + TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time, + s.last_call_et AS last_call_et_secs, + s.module, + s.action, + s.client_info, + s.client_identifier +FROM v$session s, + v$process p +WHERE s.paddr = p.addr +AND s.status = 'ACTIVE' +ORDER BY s.username, s.osuser; + +SET PAGESIZE 14 + diff --git a/timhall/monitoring/active_user_sessions.sql b/timhall/monitoring/active_user_sessions.sql new file mode 100644 index 0000000..3c5f8ea --- /dev/null +++ b/timhall/monitoring/active_user_sessions.sql @@ -0,0 +1,42 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/active_user_sessions.sql +-- Author : Tim Hall +-- Description : Displays information on all active database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @active_user_sessions +-- Last Modified: 16-MAY-2019 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 + +COLUMN username FORMAT A30 +COLUMN osuser FORMAT A20 +COLUMN spid FORMAT A10 +COLUMN service_name FORMAT A15 +COLUMN module FORMAT A45 +COLUMN machine FORMAT A30 +COLUMN logon_time FORMAT A20 + +SELECT NVL(s.username, '(oracle)') AS username, + s.osuser, + s.sid, + s.serial#, + p.spid, + s.lockwait, + s.status, + s.machine, + s.program, + TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time, + s.last_call_et AS last_call_et_secs, + s.module, + s.action, + s.client_info, + s.client_identifier +FROM v$session s, + v$process p +WHERE s.paddr = p.addr +AND s.status = 'ACTIVE' +AND s.username IS NOT NULL +ORDER BY s.username, s.osuser; + +SET PAGESIZE 14 diff --git a/timhall/monitoring/cache_hit_ratio.sql b/timhall/monitoring/cache_hit_ratio.sql new file mode 100644 index 0000000..03e03a4 --- /dev/null +++ b/timhall/monitoring/cache_hit_ratio.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/cache_hit_ratio.sql +-- Author : Tim Hall +-- Description : Displays cache hit ratio for the database. +-- Comments : The minimum figure of 89% is often quoted, but depending on the type of system this may not be possible. +-- Requirements : Access to the v$ views. +-- Call Syntax : @cache_hit_ratio +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +PROMPT +PROMPT Hit ratio should exceed 89% + +SELECT Sum(Decode(a.name, 'consistent gets', a.value, 0)) "Consistent Gets", + Sum(Decode(a.name, 'db block gets', a.value, 0)) "DB Block Gets", + Sum(Decode(a.name, 'physical reads', a.value, 0)) "Physical Reads", + Round(((Sum(Decode(a.name, 'consistent gets', a.value, 0)) + + Sum(Decode(a.name, 'db block gets', a.value, 0)) - + Sum(Decode(a.name, 'physical reads', a.value, 0)) )/ + (Sum(Decode(a.name, 'consistent gets', a.value, 0)) + + Sum(Decode(a.name, 'db block gets', a.value, 0)))) + *100,2) "Hit Ratio %" +FROM v$sysstat a; diff --git a/timhall/monitoring/call_stack.sql b/timhall/monitoring/call_stack.sql new file mode 100644 index 0000000..4944964 --- /dev/null +++ b/timhall/monitoring/call_stack.sql @@ -0,0 +1,16 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/call_stack.sql +-- Author : Tim Hall +-- Description : Displays the current call stack. +-- Requirements : Access to DBMS_UTILITY. +-- Call Syntax : @call_stack +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +DECLARE + v_stack VARCHAR2(2000); +BEGIN + v_stack := Dbms_Utility.Format_Call_Stack; + Dbms_Output.Put_Line(v_stack); +END; +/ diff --git a/timhall/monitoring/code_dep.sql b/timhall/monitoring/code_dep.sql new file mode 100644 index 0000000..b1344b6 --- /dev/null +++ b/timhall/monitoring/code_dep.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/code_dep.sql +-- Author : Tim Hall +-- Description : Displays all dependencies of specified object. +-- Call Syntax : @code_dep (schema-name or all) (object-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 255 +SET PAGESIZE 1000 +BREAK ON referenced_type SKIP 1 + +COLUMN referenced_type FORMAT A20 +COLUMN referenced_owner FORMAT A20 +COLUMN referenced_name FORMAT A40 +COLUMN referenced_link_name FORMAT A20 + +SELECT a.referenced_type, + a.referenced_owner, + a.referenced_name, + a.referenced_link_name +FROM all_dependencies a +WHERE a.owner = DECODE(UPPER('&1'), 'ALL', a.referenced_owner, UPPER('&1')) +AND a.name = UPPER('&2') +ORDER BY 1,2,3; + +SET VERIFY ON +SET PAGESIZE 22 \ No newline at end of file diff --git a/timhall/monitoring/code_dep_distinct.sql b/timhall/monitoring/code_dep_distinct.sql new file mode 100644 index 0000000..66c7371 --- /dev/null +++ b/timhall/monitoring/code_dep_distinct.sql @@ -0,0 +1,31 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/code_dep_distinct.sql +-- Author : Tim Hall +-- Description : Displays a tree of dependencies of specified object. +-- Call Syntax : @code_dep_distinct (schema-name) (object-name) (object_type or all) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 255 +SET PAGESIZE 1000 + +COLUMN referenced_object FORMAT A50 +COLUMN referenced_type FORMAT A20 +COLUMN referenced_link_name FORMAT A20 + +SELECT DISTINCT a.referenced_owner || '.' || a.referenced_name AS referenced_object, + a.referenced_type, + a.referenced_link_name +FROM all_dependencies a +WHERE a.owner NOT IN ('SYS','SYSTEM','PUBLIC') +AND a.referenced_owner NOT IN ('SYS','SYSTEM','PUBLIC') +AND a.referenced_type != 'NON-EXISTENT' +AND a.referenced_type = DECODE(UPPER('&3'), 'ALL', a.referenced_type, UPPER('&3')) +START WITH a.owner = UPPER('&1') +AND a.name = UPPER('&2') +CONNECT BY a.owner = PRIOR a.referenced_owner +AND a.name = PRIOR a.referenced_name +AND a.type = PRIOR a.referenced_type; + +SET VERIFY ON +SET PAGESIZE 22 \ No newline at end of file diff --git a/timhall/monitoring/code_dep_on.sql b/timhall/monitoring/code_dep_on.sql new file mode 100644 index 0000000..b970947 --- /dev/null +++ b/timhall/monitoring/code_dep_on.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/code_dep_on.sql +-- Author : Tim Hall +-- Description : Displays all objects dependant on the specified object. +-- Call Syntax : @code_dep_on (schema-name or all) (object-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 255 +SET PAGESIZE 1000 +BREAK ON type SKIP 1 + +COLUMN owner FORMAT A20 + +SELECT a.type, + a.owner, + a.name +FROM all_dependencies a +WHERE a.referenced_owner = DECODE(UPPER('&1'), 'ALL', a.referenced_owner, UPPER('&1')) +AND a.referenced_name = UPPER('&2') +ORDER BY 1,2,3; + +SET PAGESIZE 22 +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/code_dep_tree.sql b/timhall/monitoring/code_dep_tree.sql new file mode 100644 index 0000000..12baa73 --- /dev/null +++ b/timhall/monitoring/code_dep_tree.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/code_dep_tree.sql +-- Author : Tim Hall +-- Description : Displays a tree of dependencies of specified object. +-- Call Syntax : @code_dep_tree (schema-name) (object-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 255 +SET PAGESIZE 1000 + +COLUMN referenced_object FORMAT A50 +COLUMN referenced_type FORMAT A20 +COLUMN referenced_link_name FORMAT A20 + +SELECT RPAD(' ', level*2, ' ') || a.referenced_owner || '.' || a.referenced_name AS referenced_object, + a.referenced_type, + a.referenced_link_name +FROM all_dependencies a +WHERE a.owner NOT IN ('SYS','SYSTEM','PUBLIC') +AND a.referenced_owner NOT IN ('SYS','SYSTEM','PUBLIC') +AND a.referenced_type != 'NON-EXISTENT' +START WITH a.owner = UPPER('&1') +AND a.name = UPPER('&2') +CONNECT BY a.owner = PRIOR a.referenced_owner +AND a.name = PRIOR a.referenced_name +AND a.type = PRIOR a.referenced_type; + +SET VERIFY ON +SET PAGESIZE 22 \ No newline at end of file diff --git a/timhall/monitoring/column_defaults.sql b/timhall/monitoring/column_defaults.sql new file mode 100644 index 0000000..bd28d85 --- /dev/null +++ b/timhall/monitoring/column_defaults.sql @@ -0,0 +1,16 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/column_defaults.sql +-- Author : Tim Hall +-- Description : Displays the default values where present for the specified table. +-- Call Syntax : @column_defaults (table-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 100 +SET VERIFY OFF + +SELECT a.column_name "Column", + a.data_default "Default" +FROM all_tab_columns a +WHERE a.table_name = Upper('&1') +AND a.data_default IS NOT NULL +/ \ No newline at end of file diff --git a/timhall/monitoring/controlfiles.sql b/timhall/monitoring/controlfiles.sql new file mode 100644 index 0000000..3e66633 --- /dev/null +++ b/timhall/monitoring/controlfiles.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/controlfiles.sql +-- Author : Tim Hall +-- Description : Displays information about controlfiles. +-- Requirements : Access to the V$ views. +-- Call Syntax : @controlfiles +-- Last Modified: 21/12/2004 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 100 +COLUMN name FORMAT A80 + +SELECT name, + status +FROM v$controlfile +ORDER BY name; + +SET LINESIZE 80 \ No newline at end of file diff --git a/timhall/monitoring/datafiles.sql b/timhall/monitoring/datafiles.sql new file mode 100644 index 0000000..df7e0b5 --- /dev/null +++ b/timhall/monitoring/datafiles.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/datafiles.sql +-- Author : Tim Hall +-- Description : Displays information about datafiles. +-- Requirements : Access to the V$ views. +-- Call Syntax : @datafiles +-- Last Modified: 17-AUG-2005 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 +COLUMN file_name FORMAT A70 + +SELECT file_id, + file_name, + ROUND(bytes/1024/1024/1024) AS size_gb, + ROUND(maxbytes/1024/1024/1024) AS max_size_gb, + autoextensible, + increment_by, + status +FROM dba_data_files +ORDER BY file_name; diff --git a/timhall/monitoring/db_cache_advice.sql b/timhall/monitoring/db_cache_advice.sql new file mode 100644 index 0000000..bf9970d --- /dev/null +++ b/timhall/monitoring/db_cache_advice.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/db_cache_advice.sql +-- Author : Tim Hall +-- Description : Predicts how changes to the buffer cache will affect physical reads. +-- Requirements : Access to the V$ views. +-- Call Syntax : @db_cache_advice +-- Last Modified: 12/02/2004 +-- ----------------------------------------------------------------------------------- + +COLUMN size_for_estimate FORMAT 999,999,999,999 heading 'Cache Size (MB)' +COLUMN buffers_for_estimate FORMAT 999,999,999 heading 'Buffers' +COLUMN estd_physical_read_factor FORMAT 999.90 heading 'Estd Phys|Read Factor' +COLUMN estd_physical_reads FORMAT 999,999,999,999 heading 'Estd Phys| Reads' + +SELECT size_for_estimate, + buffers_for_estimate, + estd_physical_read_factor, + estd_physical_reads +FROM v$db_cache_advice +WHERE name = 'DEFAULT' +AND block_size = (SELECT value + FROM v$parameter + WHERE name = 'db_block_size') +AND advice_status = 'ON'; diff --git a/timhall/monitoring/db_info.sql b/timhall/monitoring/db_info.sql new file mode 100644 index 0000000..aef6a61 --- /dev/null +++ b/timhall/monitoring/db_info.sql @@ -0,0 +1,48 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/db_info.sql +-- Author : Tim Hall +-- Description : Displays general information about the database. +-- Requirements : Access to the v$ views. +-- Call Syntax : @db_info +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 1000 +SET LINESIZE 100 +SET FEEDBACK OFF + +SELECT * +FROM v$database; + +SELECT * +FROM v$instance; + +SELECT * +FROM v$version; + +SELECT a.name, + a.value +FROM v$sga a; + +SELECT Substr(c.name,1,60) "Controlfile", + NVL(c.status,'UNKNOWN') "Status" +FROM v$controlfile c +ORDER BY 1; + +SELECT Substr(d.name,1,60) "Datafile", + NVL(d.status,'UNKNOWN') "Status", + d.enabled "Enabled", + LPad(To_Char(Round(d.bytes/1024000,2),'9999990.00'),10,' ') "Size (M)" +FROM v$datafile d +ORDER BY 1; + +SELECT l.group# "Group", + Substr(l.member,1,60) "Logfile", + NVL(l.status,'UNKNOWN') "Status" +FROM v$logfile l +ORDER BY 1,2; + +PROMPT +SET PAGESIZE 14 +SET FEEDBACK ON + + diff --git a/timhall/monitoring/db_links.sql b/timhall/monitoring/db_links.sql new file mode 100644 index 0000000..cc2bc1c --- /dev/null +++ b/timhall/monitoring/db_links.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/db_links.sql +-- Author : Tim Hall +-- Description : Displays information on all database links. +-- Requirements : Access to the DBA views. +-- Call Syntax : @db_links +-- Last Modified: 11/05/2007 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 + +COLUMN owner FORMAT A30 +COLUMN db_link FORMAT A30 +COLUMN username FORMAT A30 +COLUMN host FORMAT A30 + +SELECT owner, + db_link, + username, + host +FROM dba_db_links +ORDER BY owner, db_link; diff --git a/timhall/monitoring/db_links_open.sql b/timhall/monitoring/db_links_open.sql new file mode 100644 index 0000000..8dac645 --- /dev/null +++ b/timhall/monitoring/db_links_open.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/db_links_open.sql +-- Author : Tim Hall +-- Description : Displays information on all open database links. +-- Requirements : Access to the V$ views. +-- Call Syntax : @db_links_open +-- Last Modified: 11/05/2007 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN db_link FORMAT A30 + +SELECT db_link, + owner_id, + logged_on, + heterogeneous, + protocol, + open_cursors, + in_transaction, + update_sent, + commit_point_strength +FROM v$dblink +ORDER BY db_link; + +SET LINESIZE 80 diff --git a/timhall/monitoring/db_properties.sql b/timhall/monitoring/db_properties.sql new file mode 100644 index 0000000..602b958 --- /dev/null +++ b/timhall/monitoring/db_properties.sql @@ -0,0 +1,13 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/db_properties.sql +-- Author : Tim Hall +-- Description : Displays all database property values. +-- Call Syntax : @db_properties +-- Last Modified: 15/09/2006 +-- ----------------------------------------------------------------------------------- +COLUMN property_value FORMAT A50 + +SELECT property_name, + property_value +FROM database_properties +ORDER BY property_name; diff --git a/timhall/monitoring/default_tablespaces.sql b/timhall/monitoring/default_tablespaces.sql new file mode 100644 index 0000000..b172531 --- /dev/null +++ b/timhall/monitoring/default_tablespaces.sql @@ -0,0 +1,16 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/default_tablespaces.sql +-- Author : Tim Hall +-- Description : Displays the default temporary and permanent tablespaces. +-- Requirements : Access to the DATABASE_PROPERTIES views. +-- Call Syntax : @default_tablespaces +-- Last Modified: 04/06/2019 +-- ----------------------------------------------------------------------------------- +COLUMN property_name FORMAT A30 +COLUMN property_value FORMAT A30 +COLUMN description FORMAT A50 +SET LINESIZE 200 + +SELECT * +FROM database_properties +WHERE property_name like '%TABLESPACE'; diff --git a/timhall/monitoring/df_free_space.sql b/timhall/monitoring/df_free_space.sql new file mode 100644 index 0000000..9594f0b --- /dev/null +++ b/timhall/monitoring/df_free_space.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/df_free_space.sql +-- Author : Tim Hall +-- Description : Displays free space information about datafiles. +-- Requirements : Access to the V$ views. +-- Call Syntax : @df_free_space.sql +-- Last Modified: 17-AUG-2005 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 120 +COLUMN file_name FORMAT A60 + +SELECT a.file_name, + ROUND(a.bytes/1024/1024) AS size_mb, + ROUND(a.maxbytes/1024/1024) AS maxsize_mb, + ROUND(b.free_bytes/1024/1024) AS free_mb, + ROUND((a.maxbytes-a.bytes)/1024/1024) AS growth_mb, + 100 - ROUND(((b.free_bytes+a.growth)/a.maxbytes) * 100) AS pct_used +FROM (SELECT file_name, + file_id, + bytes, + GREATEST(bytes,maxbytes) AS maxbytes, + GREATEST(bytes,maxbytes)-bytes AS growth + FROM dba_data_files) a, + (SELeCT file_id, + SUM(bytes) AS free_bytes + FROM dba_free_space + GROUP BY file_id) b +WHERE a.file_id = b.file_id +ORDER BY file_name; diff --git a/timhall/monitoring/directories.sql b/timhall/monitoring/directories.sql new file mode 100644 index 0000000..be62845 --- /dev/null +++ b/timhall/monitoring/directories.sql @@ -0,0 +1,17 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/directories.sql +-- Author : Tim Hall +-- Description : Displays information about all directories. +-- Requirements : Access to the DBA views. +-- Call Syntax : @directories +-- Last Modified: 04/10/2006 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 + +COLUMN owner FORMAT A20 +COLUMN directory_name FORMAT A25 +COLUMN directory_path FORMAT A80 + +SELECT * +FROM dba_directories +ORDER BY owner, directory_name; diff --git a/timhall/monitoring/directory_permissions.sql b/timhall/monitoring/directory_permissions.sql new file mode 100644 index 0000000..60b80e5 --- /dev/null +++ b/timhall/monitoring/directory_permissions.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/directory_permissions.sql +-- Author : Tim Hall +-- Description : Displays permission information about all directories. +-- Requirements : Access to the DBA views. +-- Call Syntax : @directory_permissions (directory_name) +-- Last Modified: 09/02/2016 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN grantee FORMAT A20 +COLUMN owner FORMAT A10 +COLUMN grantor FORMAT A20 +COLUMN privilege FORMAT A20 + +COLUMN +SELECT * +FROM dba_tab_privs +WHERE table_name = UPPER('&1'); diff --git a/timhall/monitoring/dispatchers.sql b/timhall/monitoring/dispatchers.sql new file mode 100644 index 0000000..16ce196 --- /dev/null +++ b/timhall/monitoring/dispatchers.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/dispatchers.sql +-- Author : Tim Hall +-- Description : Displays dispatcher statistics. +-- Requirements : Access to the v$ views. +-- Call Syntax : @dispatchers +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT a.name "Name", + a.status "Status", + a.accept "Accept", + a.messages "Total Mesgs", + a.bytes "Total Bytes", + a.owned "Circs Owned", + a.idle "Total Idle Time", + a.busy "Total Busy Time", + Round(a.busy/(a.busy + a.idle),2) "Load" +FROM v$dispatcher a +ORDER BY 1; + +SET PAGESIZE 14 +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/error_stack.sql b/timhall/monitoring/error_stack.sql new file mode 100644 index 0000000..7cb3836 --- /dev/null +++ b/timhall/monitoring/error_stack.sql @@ -0,0 +1,15 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/error_stack.sql +-- Author : Tim Hall +-- Description : Displays contents of the error stack. +-- Call Syntax : @error_stack +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +DECLARE + v_stack VARCHAR2(2000); +BEGIN + v_stack := Dbms_Utility.Format_Error_Stack; + Dbms_Output.Put_Line(v_stack); +END; +/ diff --git a/timhall/monitoring/errors.sql b/timhall/monitoring/errors.sql new file mode 100644 index 0000000..008b246 --- /dev/null +++ b/timhall/monitoring/errors.sql @@ -0,0 +1,16 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/errors.sql +-- Author : Tim Hall +-- Description : Displays the source line and the associated error after compilation failure. +-- Comments : Essentially the same as SHOW ERRORS. +-- Call Syntax : @errors (source-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SELECT To_Char(a.line) || ' - ' || a.text error +FROM user_source a, + user_errors b +WHERE a.name = Upper('&&1') +AND a.name = b.name +AND a.type = b.type +AND a.line = b.line +ORDER BY a.name, a.line; \ No newline at end of file diff --git a/timhall/monitoring/explain.sql b/timhall/monitoring/explain.sql new file mode 100644 index 0000000..1b76172 --- /dev/null +++ b/timhall/monitoring/explain.sql @@ -0,0 +1,35 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/explain.sql +-- Author : Tim Hall +-- Description : Displays a tree-style execution plan of the specified statement after it has been explained. +-- Requirements : Access to the plan table. +-- Call Syntax : @explain (statement-id) +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 100 +SET LINESIZE 200 +SET VERIFY OFF + +COLUMN plan FORMAT A50 +COLUMN object_name FORMAT A30 +COLUMN object_type FORMAT A15 +COLUMN bytes FORMAT 9999999999 +COLUMN cost FORMAT 9999999 +COLUMN partition_start FORMAT A20 +COLUMN partition_stop FORMAT A20 + +SELECT LPAD(' ', 2 * (level - 1)) || + DECODE (level,1,NULL,level-1 || '.' || pt.position || ' ') || + INITCAP(pt.operation) || + DECODE(pt.options,NULL,'',' (' || INITCAP(pt.options) || ')') plan, + pt.object_name, + pt.object_type, + pt.bytes, + pt.cost, + pt.partition_start, + pt.partition_stop +FROM plan_table pt +START WITH pt.id = 0 + AND pt.statement_id = '&1' +CONNECT BY PRIOR pt.id = pt.parent_id + AND pt.statement_id = '&1'; diff --git a/timhall/monitoring/file_io.sql b/timhall/monitoring/file_io.sql new file mode 100644 index 0000000..c44650f --- /dev/null +++ b/timhall/monitoring/file_io.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/file_io.sql +-- Author : Tim Hall +-- Description : Displays the amount of IO for each datafile. +-- Requirements : Access to the v$ views. +-- Call Syntax : @file_io +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 1000 + +SELECT Substr(d.name,1,50) "File Name", + f.phyblkrd "Blocks Read", + f.phyblkwrt "Blocks Writen", + f.phyblkrd + f.phyblkwrt "Total I/O" +FROM v$filestat f, + v$datafile d +WHERE d.file# = f.file# +ORDER BY f.phyblkrd + f.phyblkwrt DESC; + +SET PAGESIZE 18 \ No newline at end of file diff --git a/timhall/monitoring/fk_columns.sql b/timhall/monitoring/fk_columns.sql new file mode 100644 index 0000000..1ed42ad --- /dev/null +++ b/timhall/monitoring/fk_columns.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/monitoring/fk_columns.sql +-- Author : DR Timothy S Hall +-- Description : Displays information on all FKs for the specified schema and table. +-- Requirements : Access to the V$ views. +-- Call Syntax : @fk_columns (schema-name or all) (table-name or all) +-- Last Modified: 22/09/2005 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 1000 +COLUMN column_name FORMAT A30 +COLUMN r_column_name FORMAT A30 + +SELECT c.constraint_name, + cc.table_name, + cc.column_name, + rcc.table_name AS r_table_name, + rcc.column_name AS r_column_name, + cc.position +FROM dba_constraints c + JOIN dba_cons_columns cc ON c.owner = cc.owner AND c.constraint_name = cc.constraint_name + JOIN dba_cons_columns rcc ON c.owner = rcc.owner AND c.r_constraint_name = rcc.constraint_name AND cc.position = rcc.position +WHERE c.owner = DECODE(UPPER('&1'), 'ALL', c.owner, UPPER('&1')) +AND c.table_name = DECODE(UPPER('&2'), 'ALL', c.table_name, UPPER('&2')) +ORDER BY c.constraint_name, cc.table_name, cc.position; diff --git a/timhall/monitoring/fks.sql b/timhall/monitoring/fks.sql new file mode 100644 index 0000000..cfd1acd --- /dev/null +++ b/timhall/monitoring/fks.sql @@ -0,0 +1,47 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/fks.sql +-- Author : Tim Hall +-- Description : Displays the constraints on a specific table and those referencing it. +-- Call Syntax : @fks (table-name) (schema) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +PROMPT +SET VERIFY OFF +SET FEEDBACK OFF +SET LINESIZE 255 +SET PAGESIZE 1000 + +PROMPT +PROMPT Constraints Owned By Table +PROMPT ========================== +SELECT c.constraint_name "Constraint", + Decode(c.constraint_type,'P','Primary Key', + 'U','Unique Key', + 'C','Check', + 'R','Foreign Key', + c.constraint_type) "Type", + c.r_owner "Ref Table", + c.r_constraint_name "Ref Constraint" +FROM all_constraints c +WHERE c.table_name = Upper('&&1') +AND c.owner = Upper('&&2'); + + +PROMPT +PROMPT Constraints Referencing Table +PROMPT ============================= +SELECT c1.table_name "Table", + c1.constraint_name "Foreign Key", + c1.r_constraint_name "References" +FROM all_constraints c1 +WHERE c1.owner = Upper('&&2') +AND c1.r_constraint_name IN (SELECT c2.constraint_name + FROM all_constraints c2 + WHERE c2.table_name = Upper('&&1') + AND c2.owner = Upper('&&2') + AND c2.constraint_type IN ('P','U')); + +SET VERIFY ON +SET FEEDBACK ON +SET PAGESIZE 1000 +PROMPT diff --git a/timhall/monitoring/free_space.sql b/timhall/monitoring/free_space.sql new file mode 100644 index 0000000..9693360 --- /dev/null +++ b/timhall/monitoring/free_space.sql @@ -0,0 +1,38 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/free_space.sql +-- Author : Tim Hall +-- Description : Displays space usage for each datafile. +-- Requirements : Access to the DBA views. +-- Call Syntax : @free_space +-- Last Modified: 15-JUL-2000 - Created. +-- 12-OCT-2012 - Amended to include auto-extend and maxsize. +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 100 +SET LINESIZE 265 + +COLUMN tablespace_name FORMAT A20 +COLUMN file_name FORMAT A50 + +SELECT df.tablespace_name, + df.file_name, + df.size_mb, + f.free_mb, + df.max_size_mb, + f.free_mb + (df.max_size_mb - df.size_mb) AS max_free_mb, + RPAD(' '|| RPAD('X',ROUND((df.max_size_mb-(f.free_mb + (df.max_size_mb - df.size_mb)))/max_size_mb*10,0), 'X'),11,'-') AS used_pct +FROM (SELECT file_id, + file_name, + tablespace_name, + TRUNC(bytes/1024/1024) AS size_mb, + TRUNC(GREATEST(bytes,maxbytes)/1024/1024) AS max_size_mb + FROM dba_data_files) df, + (SELECT TRUNC(SUM(bytes)/1024/1024) AS free_mb, + file_id + FROM dba_free_space + GROUP BY file_id) f +WHERE df.file_id = f.file_id (+) +ORDER BY df.tablespace_name, + df.file_name; + +PROMPT +SET PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/health.sql b/timhall/monitoring/health.sql new file mode 100644 index 0000000..80dd7d5 --- /dev/null +++ b/timhall/monitoring/health.sql @@ -0,0 +1,17 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/health.sql +-- Author : Tim Hall +-- Description : Lots of information about the database so you can asses the general health of the system. +-- Requirements : Access to the V$ & DBA views and several other monitoring scripts. +-- Call Syntax : @health (username/password@service) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SPOOL Health_Checks.txt + +conn &1 +@db_info +@sessions +@ts_full +@max_extents + +SPOOL OFF \ No newline at end of file diff --git a/timhall/monitoring/hidden_parameters.sql b/timhall/monitoring/hidden_parameters.sql new file mode 100644 index 0000000..b807477 --- /dev/null +++ b/timhall/monitoring/hidden_parameters.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/monitoring/hidden_parameters.sql +-- Author : DR Timothy S Hall +-- Description : Displays a list of one or all the hidden parameters. +-- Requirements : Access to the v$ views. +-- Call Syntax : @hidden_parameters (parameter-name or all) +-- Last Modified: 28-NOV-2006 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +COLUMN parameter FORMAT a37 +COLUMN description FORMAT a30 WORD_WRAPPED +COLUMN session_value FORMAT a10 +COLUMN instance_value FORMAT a10 + +SELECT a.ksppinm AS parameter, + a.ksppdesc AS description, + b.ksppstvl AS session_value, + c.ksppstvl AS instance_value +FROM x$ksppi a, + x$ksppcv b, + x$ksppsv c +WHERE a.indx = b.indx +AND a.indx = c.indx +AND a.ksppinm LIKE '/_%' ESCAPE '/' +AND a.ksppinm = DECODE(LOWER('&1'), 'all', a.ksppinm, LOWER('&1')) +ORDER BY a.ksppinm; diff --git a/timhall/monitoring/high_water_mark.sql b/timhall/monitoring/high_water_mark.sql new file mode 100644 index 0000000..e41cda2 --- /dev/null +++ b/timhall/monitoring/high_water_mark.sql @@ -0,0 +1,44 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/high_water_mark.sql +-- Author : Tim Hall +-- Description : Displays the High Water Mark for the specified table, or all tables. +-- Requirements : Access to the Dbms_Space. +-- Call Syntax : @high_water_mark (table_name or all) (schema-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET VERIFY OFF + +DECLARE + CURSOR cu_tables IS + SELECT a.owner, + a.table_name + FROM all_tables a + WHERE a.table_name = Decode(Upper('&&1'),'ALL',a.table_name,Upper('&&1')) + AND a.owner = Upper('&&2'); + + op1 NUMBER; + op2 NUMBER; + op3 NUMBER; + op4 NUMBER; + op5 NUMBER; + op6 NUMBER; + op7 NUMBER; +BEGIN + + Dbms_Output.Disable; + Dbms_Output.Enable(1000000); + Dbms_Output.Put_Line('TABLE UNUSED BLOCKS TOTAL BLOCKS HIGH WATER MARK'); + Dbms_Output.Put_Line('------------------------------ --------------- --------------- ---------------'); + FOR cur_rec IN cu_tables LOOP + Dbms_Space.Unused_Space(cur_rec.owner,cur_rec.table_name,'TABLE',op1,op2,op3,op4,op5,op6,op7); + Dbms_Output.Put_Line(RPad(cur_rec.table_name,30,' ') || + LPad(op3,15,' ') || + LPad(op1,15,' ') || + LPad(Trunc(op1-op3-1),15,' ')); + END LOOP; + +END; +/ + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/hot_blocks.sql b/timhall/monitoring/hot_blocks.sql new file mode 100644 index 0000000..6e1bfa4 --- /dev/null +++ b/timhall/monitoring/hot_blocks.sql @@ -0,0 +1,44 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/hot_blocks.sql +-- Author : Tim Hall +-- Description : Detects hot blocks. +-- Call Syntax : @hot_blocks +-- Last Modified: 17/02/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET VERIFY OFF + +SELECT * +FROM (SELECT name, + addr, + gets, + misses, + sleeps + FROM v$latch_children + WHERE name = 'cache buffers chains' + AND misses > 0 + ORDER BY misses DESC) +WHERE rownum < 11; + +ACCEPT address PROMPT "Enter ADDR: " + +COLUMN owner FORMAT A15 +COLUMN object_name FORMAT A30 +COLUMN subobject_name FORMAT A20 + +SELECT * +FROM (SELECT o.owner, + o.object_name, + o.subobject_name, + bh.tch, + bh.obj, + bh.file#, + bh.dbablk, + bh.class, + bh.state + FROM x$bh bh, + dba_objects o + WHERE o.data_object_id = bh.obj + AND hladdr = '&address' + ORDER BY tch DESC) +WHERE rownum < 11; diff --git a/timhall/monitoring/identify_trace_file.sql b/timhall/monitoring/identify_trace_file.sql new file mode 100644 index 0000000..669452f --- /dev/null +++ b/timhall/monitoring/identify_trace_file.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/identify_trace_file.sql +-- Author : Tim Hall +-- Description : Displays the name of the trace file associated with the current session. +-- Requirements : Access to the V$ views. +-- Call Syntax : @identify_trace_file +-- Last Modified: 17-AUG-2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 100 +COLUMN trace_file FORMAT A60 + +SELECT s.sid, + s.serial#, + pa.value || '/' || LOWER(SYS_CONTEXT('userenv','instance_name')) || + '_ora_' || p.spid || '.trc' AS trace_file +FROM v$session s, + v$process p, + v$parameter pa +WHERE pa.name = 'user_dump_dest' +AND s.paddr = p.addr +AND s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID'); \ No newline at end of file diff --git a/timhall/monitoring/index_extents.sql b/timhall/monitoring/index_extents.sql new file mode 100644 index 0000000..3cb7591 --- /dev/null +++ b/timhall/monitoring/index_extents.sql @@ -0,0 +1,39 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/index_extents.sql +-- Author : Tim Hall +-- Description : Displays number of extents for all indexes belonging to the specified table, or all tables. +-- Requirements : Access to the DBA views. +-- Call Syntax : @index_extents (table_name or all) (schema-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT i.index_name, + Count(e.segment_name) extents, + i.max_extents, + t.num_rows "ROWS", + Trunc(i.initial_extent/1024) "INITIAL K", + Trunc(i.next_extent/1024) "NEXT K", + t.table_name +FROM all_tables t, + all_indexes i, + dba_extents e +WHERE i.table_name = t.table_name +AND i.owner = t.owner +AND e.segment_name = i.index_name +AND e.owner = i.owner +AND i.table_name = Decode(Upper('&&1'),'ALL',i.table_name,Upper('&&1')) +AND i.owner = Upper('&&2') +GROUP BY t.table_name, + i.index_name, + i.max_extents, + t.num_rows, + i.initial_extent, + i.next_extent +HAVING Count(e.segment_name) > 5 +ORDER BY Count(e.segment_name) DESC; + +SET PAGESIZE 18 +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/index_monitoring_status.sql b/timhall/monitoring/index_monitoring_status.sql new file mode 100644 index 0000000..b8f8744 --- /dev/null +++ b/timhall/monitoring/index_monitoring_status.sql @@ -0,0 +1,15 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/index_monitoring_status.sql +-- Author : Tim Hall +-- Description : Shows the monitoring status for the specified table indexes. +-- Call Syntax : @index_monitoring_status (table-name) (index-name or all) +-- Last Modified: 04/02/2005 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF + +SELECT table_name, + index_name, + monitoring +FROM v$object_usage +WHERE table_name = UPPER('&1') +AND index_name = DECODE(UPPER('&2'), 'ALL', index_name, UPPER('&2')); diff --git a/timhall/monitoring/index_partitions.sql b/timhall/monitoring/index_partitions.sql new file mode 100644 index 0000000..95f2b9b --- /dev/null +++ b/timhall/monitoring/index_partitions.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/index_partitions.sql +-- Author : Tim Hall +-- Description : Displays partition information for the specified index, or all indexes. +-- Requirements : Access to the DBA views. +-- Call Syntax : @index_patitions (index_name or all) (schema-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET FEEDBACK OFF +SET VERIFY OFF + +SELECT a.index_name, + a.partition_name, + a.tablespace_name, + a.initial_extent, + a.next_extent, + a.pct_increase, + a.num_rows +FROM dba_ind_partitions a +WHERE a.index_name = Decode(Upper('&&1'),'ALL',a.index_name,Upper('&&1')) +AND a.index_owner = Upper('&&2') +ORDER BY a.index_name, a.partition_name +/ + +PROMPT +SET PAGESIZE 14 +SET FEEDBACK ON diff --git a/timhall/monitoring/index_usage.sql b/timhall/monitoring/index_usage.sql new file mode 100644 index 0000000..0c3dafa --- /dev/null +++ b/timhall/monitoring/index_usage.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/index_usage.sql +-- Author : Tim Hall +-- Description : Shows the usage for the specified table indexes. +-- Call Syntax : @index_usage (table-name) (index-name or all) +-- Last Modified: 04/02/2005 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 200 + +SELECT table_name, + index_name, + used, + start_monitoring, + end_monitoring +FROM v$object_usage +WHERE table_name = UPPER('&1') +AND index_name = DECODE(UPPER('&2'), 'ALL', index_name, UPPER('&2')); diff --git a/timhall/monitoring/invalid_objects.sql b/timhall/monitoring/invalid_objects.sql new file mode 100644 index 0000000..0ecc9ad --- /dev/null +++ b/timhall/monitoring/invalid_objects.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/invalid_objects.sql +-- Author : Tim Hall +-- Description : Lists all invalid objects in the database. +-- Call Syntax : @invalid_objects +-- Requirements : Access to the DBA views. +-- Last Modified: 18/12/2005 +-- ----------------------------------------------------------------------------------- +COLUMN owner FORMAT A30 +COLUMN object_name FORMAT A30 + +SELECT owner, + object_type, + object_name, + status +FROM dba_objects +WHERE status = 'INVALID' +ORDER BY owner, object_type, object_name; diff --git a/timhall/monitoring/jobs.sql b/timhall/monitoring/jobs.sql new file mode 100644 index 0000000..ab1a166 --- /dev/null +++ b/timhall/monitoring/jobs.sql @@ -0,0 +1,35 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/jobs.sql +-- Author : Tim Hall +-- Description : Displays information about all scheduled jobs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @jobs +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 1000 PAGESIZE 1000 + +COLUMN log_user FORMAT A15 +COLUMN priv_user FORMAT A15 +COLUMN schema_user FORMAT A15 +COLUMN interval FORMAT A40 +COLUMN what FORMAT A50 +COLUMN nls_env FORMAT A50 +COLUMN misc_env FORMAT A50 + +SELECT a.job, + a.log_user, + a.priv_user, + a.schema_user, + To_Char(a.last_date,'DD-MON-YYYY HH24:MI:SS') AS last_date, + --To_Char(a.this_date,'DD-MON-YYYY HH24:MI:SS') AS this_date, + To_Char(a.next_date,'DD-MON-YYYY HH24:MI:SS') AS next_date, + a.broken, + a.interval, + a.failures, + a.what, + a.total_time, + a.nls_env, + a.misc_env +FROM dba_jobs a; + +SET LINESIZE 80 PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/jobs_running.sql b/timhall/monitoring/jobs_running.sql new file mode 100644 index 0000000..f8ddc49 --- /dev/null +++ b/timhall/monitoring/jobs_running.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/jobs_running.sql +-- Author : Tim Hall +-- Description : Displays information about all jobs currently running. +-- Requirements : Access to the DBA views. +-- Call Syntax : @jobs_running +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT a.job "Job", + a.sid, + a.failures "Failures", + Substr(To_Char(a.last_date,'DD-Mon-YYYY HH24:MI:SS'),1,20) "Last Date", + Substr(To_Char(a.this_date,'DD-Mon-YYYY HH24:MI:SS'),1,20) "This Date" +FROM dba_jobs_running a; + +SET PAGESIZE 14 +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/large_lob_segments.sql b/timhall/monitoring/large_lob_segments.sql new file mode 100644 index 0000000..c449787 --- /dev/null +++ b/timhall/monitoring/large_lob_segments.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/large_lob_segments.sql +-- Author : Tim Hall +-- Description : Displays size of large LOB segments. +-- Requirements : Access to the DBA views. +-- Call Syntax : @large_lob_segments (rows) +-- Last Modified: 12/09/2017 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 VERIFY OFF +COLUMN owner FORMAT A30 +COLUMN table_name FORMAT A30 +COLUMN column_name FORMAT A30 +COLUMN segment_name FORMAT A30 +COLUMN tablespace_name FORMAT A30 +COLUMN size_mb FORMAT 99999999.00 + +SELECT * +FROM (SELECT l.owner, + l.table_name, + l.column_name, + l.segment_name, + l.tablespace_name, + ROUND(s.bytes/1024/1024,2) size_mb + FROM dba_lobs l + JOIN dba_segments s ON s.owner = l.owner AND s.segment_name = l.segment_name + ORDER BY 6 DESC) +WHERE ROWNUM <= &1; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/large_segments.sql b/timhall/monitoring/large_segments.sql new file mode 100644 index 0000000..3d671c1 --- /dev/null +++ b/timhall/monitoring/large_segments.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/large_segments.sql +-- Author : Tim Hall +-- Description : Displays size of large segments. +-- Requirements : Access to the DBA views. +-- Call Syntax : @large_segments (rows) +-- Last Modified: 12/09/2017 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 VERIFY OFF +COLUMN owner FORMAT A30 +COLUMN segment_name FORMAT A30 +COLUMN tablespace_name FORMAT A30 +COLUMN size_mb FORMAT 99999999.00 + +SELECT * +FROM (SELECT owner, + segment_name, + segment_type, + tablespace_name, + ROUND(bytes/1024/1024,2) size_mb + FROM dba_segments + ORDER BY 5 DESC) +WHERE ROWNUM <= &1; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/latch_hit_ratios.sql b/timhall/monitoring/latch_hit_ratios.sql new file mode 100644 index 0000000..519dbf6 --- /dev/null +++ b/timhall/monitoring/latch_hit_ratios.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/latch_hit_ratios.sql +-- Author : Tim Hall +-- Description : Displays current latch hit ratios. +-- Requirements : Access to the V$ views. +-- Call Syntax : @latch_hit_ratios +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN latch_hit_ratio FORMAT 990.00 + +SELECT l.name, + l.gets, + l.misses, + ((1 - (l.misses / l.gets)) * 100) AS latch_hit_ratio +FROM v$latch l +WHERE l.gets != 0 +UNION +SELECT l.name, + l.gets, + l.misses, + 100 AS latch_hit_ratio +FROM v$latch l +WHERE l.gets = 0 +ORDER BY 4 DESC; diff --git a/timhall/monitoring/latch_holders.sql b/timhall/monitoring/latch_holders.sql new file mode 100644 index 0000000..65e2a8a --- /dev/null +++ b/timhall/monitoring/latch_holders.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/latch_holders.sql +-- Author : Tim Hall +-- Description : Displays information about all current latch holders. +-- Requirements : Access to the V$ views. +-- Call Syntax : @latch_holders +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +SELECT l.name "Latch Name", + lh.pid "PID", + lh.sid "SID", + l.gets "Gets (Wait)", + l.misses "Misses (Wait)", + l.sleeps "Sleeps (Wait)", + l.immediate_gets "Gets (No Wait)", + l.immediate_misses "Misses (Wait)" +FROM v$latch l, + v$latchholder lh +WHERE l.addr = lh.laddr +ORDER BY l.name; diff --git a/timhall/monitoring/latches.sql b/timhall/monitoring/latches.sql new file mode 100644 index 0000000..f0c0dbe --- /dev/null +++ b/timhall/monitoring/latches.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/latches.sql +-- Author : Tim Hall +-- Description : Displays information about all current latches. +-- Requirements : Access to the V$ views. +-- Call Syntax : @latches +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +SELECT l.latch#, + l.name, + l.gets, + l.misses, + l.sleeps, + l.immediate_gets, + l.immediate_misses, + l.spin_gets +FROM v$latch l +ORDER BY l.name; diff --git a/timhall/monitoring/library_cache.sql b/timhall/monitoring/library_cache.sql new file mode 100644 index 0000000..ea23dcb --- /dev/null +++ b/timhall/monitoring/library_cache.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/library_cache.sql +-- Author : Tim Hall +-- Description : Displays library cache statistics. +-- Requirements : Access to the V$ views. +-- Call Syntax : @library_cache +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT a.namespace "Name Space", + a.gets "Get Requests", + a.gethits "Get Hits", + Round(a.gethitratio,2) "Get Ratio", + a.pins "Pin Requests", + a.pinhits "Pin Hits", + Round(a.pinhitratio,2) "Pin Ratio", + a.reloads "Reloads", + a.invalidations "Invalidations" +FROM v$librarycache a +ORDER BY 1; + +SET PAGESIZE 14 +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/license.sql b/timhall/monitoring/license.sql new file mode 100644 index 0000000..e00ebd8 --- /dev/null +++ b/timhall/monitoring/license.sql @@ -0,0 +1,10 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/license.sql +-- Author : Tim Hall +-- Description : Displays session usage for licensing purposes. +-- Requirements : Access to the V$ views. +-- Call Syntax : @license +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SELECT * +FROM v$license; diff --git a/timhall/monitoring/locked_objects.sql b/timhall/monitoring/locked_objects.sql new file mode 100644 index 0000000..6b9bd1a --- /dev/null +++ b/timhall/monitoring/locked_objects.sql @@ -0,0 +1,39 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/locked_objects.sql +-- Author : DR Timothy S Hall +-- Description : Lists all locked objects. +-- Requirements : Access to the V$ views. +-- Call Syntax : @locked_objects +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +COLUMN owner FORMAT A20 +COLUMN username FORMAT A20 +COLUMN object_owner FORMAT A20 +COLUMN object_name FORMAT A30 +COLUMN locked_mode FORMAT A15 + +SELECT lo.session_id AS sid, + s.serial#, + NVL(lo.oracle_username, '(oracle)') AS username, + o.owner AS object_owner, + o.object_name, + Decode(lo.locked_mode, 0, 'None', + 1, 'Null (NULL)', + 2, 'Row-S (SS)', + 3, 'Row-X (SX)', + 4, 'Share (S)', + 5, 'S/Row-X (SSX)', + 6, 'Exclusive (X)', + lo.locked_mode) locked_mode, + lo.os_user_name +FROM v$locked_object lo + JOIN dba_objects o ON o.object_id = lo.object_id + JOIN v$session s ON lo.session_id = s.sid +ORDER BY 1, 2, 3, 4; + +SET PAGESIZE 14 +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/locked_objects_internal.sql b/timhall/monitoring/locked_objects_internal.sql new file mode 100644 index 0000000..60d2709 --- /dev/null +++ b/timhall/monitoring/locked_objects_internal.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/monitoring/locked_objects_internal.sql +-- Author : Tim Hall +-- Description : Lists all locks on the specific object. +-- Requirements : Access to the DBA views. +-- Call Syntax : @locked_objects_internal (object-name) +-- Last Modified: 16/02/2018 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 1000 VERIFY OFF + +COLUMN lock_type FORMAT A20 +COLUMN mode_held FORMAT A10 +COLUMN mode_requested FORMAT A10 +COLUMN lock_id1 FORMAT A50 +COLUMN lock_id2 FORMAT A30 + +SELECT li.session_id AS sid, + s.serial#, + li.lock_type, + li.mode_held, + li.mode_requested, + li.lock_id1, + li.lock_id2 +FROM dba_lock_internal li + JOIN v$session s ON li.session_id = s.sid +WHERE UPPER(lock_id1) LIKE UPPER('%&1%'); + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/logfiles.sql b/timhall/monitoring/logfiles.sql new file mode 100644 index 0000000..e61523a --- /dev/null +++ b/timhall/monitoring/logfiles.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/logfiles.sql +-- Author : Tim Hall +-- Description : Displays information about redo log files. +-- Requirements : Access to the V$ views. +-- Call Syntax : @logfiles +-- Last Modified: 21/12/2004 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 +COLUMN member FORMAT A50 +COLUMN first_change# FORMAT 99999999999999999999 +COLUMN next_change# FORMAT 99999999999999999999 + +SELECT l.thread#, + lf.group#, + lf.member, + TRUNC(l.bytes/1024/1024) AS size_mb, + l.status, + l.archived, + lf.type, + lf.is_recovery_dest_file AS rdf, + l.sequence#, + l.first_change#, + l.next_change# +FROM v$logfile lf + JOIN v$log l ON l.group# = lf.group# +ORDER BY l.thread#,lf.group#, lf.member; + +SET LINESIZE 80 diff --git a/timhall/monitoring/longops.sql b/timhall/monitoring/longops.sql new file mode 100644 index 0000000..b658d20 --- /dev/null +++ b/timhall/monitoring/longops.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/longops.sql +-- Author : Tim Hall +-- Description : Displays information on all long operations. +-- Requirements : Access to the V$ views. +-- Call Syntax : @longops +-- Last Modified: 03/07/2003 +-- ----------------------------------------------------------------------------------- + +COLUMN sid FORMAT 999 +COLUMN serial# FORMAT 9999999 +COLUMN machine FORMAT A30 +COLUMN progress_pct FORMAT 99999999.00 +COLUMN elapsed FORMAT A10 +COLUMN remaining FORMAT A10 + +SELECT s.sid, + s.serial#, + s.machine, + ROUND(sl.elapsed_seconds/60) || ':' || MOD(sl.elapsed_seconds,60) elapsed, + ROUND(sl.time_remaining/60) || ':' || MOD(sl.time_remaining,60) remaining, + ROUND(sl.sofar/sl.totalwork*100, 2) progress_pct +FROM v$session s, + v$session_longops sl +WHERE s.sid = sl.sid +AND s.serial# = sl.serial#; diff --git a/timhall/monitoring/lru_latch_ratio.sql b/timhall/monitoring/lru_latch_ratio.sql new file mode 100644 index 0000000..7497165 --- /dev/null +++ b/timhall/monitoring/lru_latch_ratio.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/lru_latch_ratio.sql +-- Author : Tim Hall +-- Description : Displays current LRU latch ratios. +-- Requirements : Access to the V$ views. +-- Call Syntax : @lru_latch_hit_ratio +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +COLUMN "Ratio %" FORMAT 990.00 + +PROMPT +PROMPT Values greater than 3% indicate contention. + +SELECT a.child#, + (a.SLEEPS / a.GETS) * 100 "Ratio %" +FROM v$latch_children a +WHERE a.name = 'cache buffers lru chain' +ORDER BY 1; + + +SET PAGESIZE 14 diff --git a/timhall/monitoring/max_extents.sql b/timhall/monitoring/max_extents.sql new file mode 100644 index 0000000..533e480 --- /dev/null +++ b/timhall/monitoring/max_extents.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/max_extents.sql +-- Author : Tim Hall +-- Description : Displays all tables and indexes nearing their MAX_EXTENTS setting. +-- Requirements : Access to the DBA views. +-- Call Syntax : @max_extents +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +PROMPT +PROMPT Tables and Indexes nearing MAX_EXTENTS +PROMPT ************************************** +SELECT e.owner, + e.segment_type, + Substr(e.segment_name, 1, 30) segment_name, + Trunc(s.initial_extent/1024) "INITIAL K", + Trunc(s.next_extent/1024) "NEXT K", + s.max_extents, + Count(*) as extents +FROM dba_extents e, + dba_segments s +WHERE e.owner = s.owner +AND e.segment_name = s.segment_name +AND e.owner NOT IN ('SYS', 'SYSTEM') +GROUP BY e.owner, e.segment_type, e.segment_name, s.initial_extent, s.next_extent, s.max_extents +HAVING Count(*) > s.max_extents - 10 +ORDER BY e.owner, e.segment_type, Count(*) DESC; diff --git a/timhall/monitoring/min_datafile_size.sql b/timhall/monitoring/min_datafile_size.sql new file mode 100644 index 0000000..d64c1fa --- /dev/null +++ b/timhall/monitoring/min_datafile_size.sql @@ -0,0 +1,34 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/monitoring/min_datafile_size.sql +-- Author : DR Timothy S Hall +-- Description : Displays smallest size the datafiles can shrink to without a reorg. +-- Requirements : Access to the V$ and DBA views. +-- Call Syntax : @min_datafile_size +-- Last Modified: 07/09/2007 +-- ----------------------------------------------------------------------------------- + +COLUMN block_size NEW_VALUE v_block_size + +SELECT TO_NUMBER(value) AS block_size +FROM v$parameter +WHERE name = 'db_block_size'; + +COLUMN tablespace_name FORMAT A20 +COLUMN file_name FORMAT A50 +COLUMN current_bytes FORMAT 999999999999999 +COLUMN shrink_by_bytes FORMAT 999999999999999 +COLUMN resize_to_bytes FORMAT 999999999999999 +SET VERIFY OFF +SET LINESIZE 200 + +SELECT a.tablespace_name, + a.file_name, + a.bytes AS current_bytes, + a.bytes - b.resize_to AS shrink_by_bytes, + b.resize_to AS resize_to_bytes +FROM dba_data_files a, + (SELECT file_id, MAX((block_id+blocks-1)*&v_block_size) AS resize_to + FROM dba_extents + GROUP by file_id) b +WHERE a.file_id = b.file_id +ORDER BY a.tablespace_name, a.file_name; diff --git a/timhall/monitoring/monitor.sql b/timhall/monitoring/monitor.sql new file mode 100644 index 0000000..0274910 --- /dev/null +++ b/timhall/monitoring/monitor.sql @@ -0,0 +1,35 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/monitor.sql +-- Author : Tim Hall +-- Description : Displays SQL statements for the current database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @monitor +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 255 +COL SID FORMAT 999 +COL STATUS FORMAT A8 +COL PROCESS FORMAT A10 +COL SCHEMANAME FORMAT A16 +COL OSUSER FORMAT A16 +COL SQL_TEXT FORMAT A120 HEADING 'SQL QUERY' +COL PROGRAM FORMAT A30 + +SELECT s.sid, + s.status, + s.process, + s.schemaname, + s.osuser, + a.sql_text, + p.program +FROM v$session s, + v$sqlarea a, + v$process p +WHERE s.SQL_HASH_VALUE = a.HASH_VALUE +AND s.SQL_ADDRESS = a.ADDRESS +AND s.PADDR = p.ADDR +/ + +SET VERIFY ON +SET LINESIZE 255 \ No newline at end of file diff --git a/timhall/monitoring/monitor_memory.sql b/timhall/monitoring/monitor_memory.sql new file mode 100644 index 0000000..2a45f21 --- /dev/null +++ b/timhall/monitoring/monitor_memory.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/monitor_memory.sql +-- Author : Tim Hall +-- Description : Displays memory allocations for the current database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @monitor_memory +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN username FORMAT A20 +COLUMN module FORMAT A20 + +SELECT NVL(a.username,'(oracle)') AS username, + a.module, + a.program, + Trunc(b.value/1024) AS memory_kb +FROM v$session a, + v$sesstat b, + v$statname c +WHERE a.sid = b.sid +AND b.statistic# = c.statistic# +AND c.name = 'session pga memory' +AND a.program IS NOT NULL +ORDER BY b.value DESC; \ No newline at end of file diff --git a/timhall/monitoring/monitoring_status.sql b/timhall/monitoring/monitoring_status.sql new file mode 100644 index 0000000..ae8e2c4 --- /dev/null +++ b/timhall/monitoring/monitoring_status.sql @@ -0,0 +1,13 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/monitoring_status.sql +-- Author : Tim Hall +-- Description : Shows the monitoring status for the specified tables. +-- Call Syntax : @monitoring_status (schema) (table-name or all) +-- Last Modified: 21/03/2003 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF + +SELECT table_name, monitoring +FROM dba_tables +WHERE owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')); diff --git a/timhall/monitoring/nls_params.sql b/timhall/monitoring/nls_params.sql new file mode 100644 index 0000000..9c731c4 --- /dev/null +++ b/timhall/monitoring/nls_params.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/nls_params.sql +-- Author : Tim Hall +-- Description : Displays National Language Suppport (NLS) information. +-- Requirements : +-- Call Syntax : @nls_params +-- Last Modified: 21-FEB-2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 100 +COLUMN parameter FORMAT A45 +COLUMN value FORMAT A45 + +PROMPT *** Database parameters *** +SELECT * FROM nls_database_parameters ORDER BY 1; + +PROMPT *** Instance parameters *** +SELECT * FROM nls_instance_parameters ORDER BY 1; + +PROMPT *** Session parameters *** +SELECT * FROM nls_session_parameters ORDER BY 1; \ No newline at end of file diff --git a/timhall/monitoring/non_indexed_fks.sql b/timhall/monitoring/non_indexed_fks.sql new file mode 100644 index 0000000..1633dea --- /dev/null +++ b/timhall/monitoring/non_indexed_fks.sql @@ -0,0 +1,33 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/non_indexed_fks.sql +-- Author : Tim Hall +-- Description : Displays a list of non-indexes FKs. +-- Requirements : Access to the ALL views. +-- Call Syntax : @non_indexed_fks +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET PAGESIZE 1000 +SET LINESIZE 255 +SET FEEDBACK OFF + +SELECT t.table_name, + c.constraint_name, + c.table_name table2, + acc.column_name +FROM all_constraints t, + all_constraints c, + all_cons_columns acc +WHERE c.r_constraint_name = t.constraint_name +AND c.table_name = acc.table_name +AND c.constraint_name = acc.constraint_name +AND NOT EXISTS (SELECT '1' + FROM all_ind_columns aid + WHERE aid.table_name = acc.table_name + AND aid.column_name = acc.column_name) +ORDER BY c.table_name; + + +PROMPT +SET FEEDBACK ON +SET PAGESIZE 18 diff --git a/timhall/monitoring/obj_lock.sql b/timhall/monitoring/obj_lock.sql new file mode 100644 index 0000000..388c933 --- /dev/null +++ b/timhall/monitoring/obj_lock.sql @@ -0,0 +1,16 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/obj_lock.sql +-- Author : Tim Hall +-- Description : Displays a list of locked objects. +-- Requirements : Access to the V$ views. +-- Call Syntax : @obj_lock +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SELECT a.type, + Substr(a.owner,1,30) owner, + a.sid, + Substr(a.object,1,30) object +FROM v$access a +WHERE a.owner NOT IN ('SYS','PUBLIC') +ORDER BY 1,2,3,4 +/ diff --git a/timhall/monitoring/object_privs.sql b/timhall/monitoring/object_privs.sql new file mode 100644 index 0000000..b060732 --- /dev/null +++ b/timhall/monitoring/object_privs.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/object_privs.sql +-- Author : Tim Hall +-- Description : Displays object privileges on a specified object. +-- Requirements : Access to the DBA views. +-- Call Syntax : @object_privs (owner) (object-name) +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 VERIFY OFF + +COLUMN owner FORMAT A30 +COLUMN object_name FORMAT A30 +COLUMN grantor FORMAT A30 +COLUMN grantee FORMAT A30 + +SELECT owner, + table_name AS object_name, + grantor, + grantee, + privilege, + grantable, + hierarchy +FROM dba_tab_privs +WHERE owner = UPPER('&1') +AND table_name = UPPER('&2') +ORDER BY 1,2,3,4; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/object_status.sql b/timhall/monitoring/object_status.sql new file mode 100644 index 0000000..5cecd72 --- /dev/null +++ b/timhall/monitoring/object_status.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/object_status.sql +-- Author : Tim Hall +-- Description : Displays a list of objects and their status for the specific schema. +-- Requirements : Access to the ALL views. +-- Call Syntax : @object_status (schema-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET PAGESIZE 1000 +SET LINESIZE 255 +SET FEEDBACK OFF +SET VERIFY OFF + +SELECT Substr(object_name,1,30) object_name, + object_type, + status +FROM all_objects +WHERE owner = Upper('&&1'); + +PROMPT +SET FEEDBACK ON +SET PAGESIZE 18 diff --git a/timhall/monitoring/objects.sql b/timhall/monitoring/objects.sql new file mode 100644 index 0000000..bad1eff --- /dev/null +++ b/timhall/monitoring/objects.sql @@ -0,0 +1,34 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/objects.sql +-- Author : Tim Hall +-- Description : Displays information about all database objects. +-- Requirements : Access to the dba_objects view. +-- Call Syntax : @objects [ object-name | % (for all)] +-- Last Modified: 21-FEB-2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 VERIFY OFF + +COLUMN owner FORMAT A20 +COLUMN object_name FORMAT A30 +COLUMN edition_name FORMAT A15 + +SELECT owner, + object_name, + --subobject_name, + object_id, + data_object_id, + object_type, + TO_CHAR(created, 'DD-MON-YYYY HH24:MI:SS') AS created, + TO_CHAR(last_ddl_time, 'DD-MON-YYYY HH24:MI:SS') AS last_ddl_time, + timestamp, + status, + temporary, + generated, + secondary, + --namespace, + edition_name +FROM dba_objects +WHERE UPPER(object_name) LIKE UPPER('%&1%') +ORDER BY owner, object_name; + +SET VERIFY ON diff --git a/timhall/monitoring/open_cursors.sql b/timhall/monitoring/open_cursors.sql new file mode 100644 index 0000000..1810d20 --- /dev/null +++ b/timhall/monitoring/open_cursors.sql @@ -0,0 +1,14 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/open_cursors.sql +-- Author : Tim Hall +-- Description : Displays a list of all cursors currently open. +-- Requirements : Access to the V$ views. +-- Call Syntax : @open_cursors +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SELECT a.user_name, + a.sid, + a.sql_text +FROM v$open_cursor a +ORDER BY 1,2 +/ diff --git a/timhall/monitoring/open_cursors_by_sid.sql b/timhall/monitoring/open_cursors_by_sid.sql new file mode 100644 index 0000000..7a394fd --- /dev/null +++ b/timhall/monitoring/open_cursors_by_sid.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/open_cursors_by_sid.sql +-- Author : Tim Hall +-- Description : Displays the SQL statement held for a specific SID. +-- Comments : The SID can be found by running session.sql or top_session.sql. +-- Requirements : Access to the V$ views. +-- Call Syntax : @open_cursors_by_sid (sid) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT oc.sql_text, cursor_type +FROM v$open_cursor oc +WHERE oc.sid = &1 +ORDER BY cursor_type; + +PROMPT +SET PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/open_cursors_full_by_sid.sql b/timhall/monitoring/open_cursors_full_by_sid.sql new file mode 100644 index 0000000..138fbac --- /dev/null +++ b/timhall/monitoring/open_cursors_full_by_sid.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/open_cursors_full_by_sid.sql +-- Author : Tim Hall +-- Description : Displays the SQL statement held for a specific SID. +-- Comments : The SID can be found by running session.sql or top_session.sql. +-- Requirements : Access to the V$ views. +-- Call Syntax : @open_cursors_full_by_sid (sid) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT st.sql_text +FROM v$sqltext st, + v$open_cursor oc +WHERE st.address = oc.address +AND st.hash_value = oc.hash_value +AND oc.sid = &1 +ORDER BY st.address, st.piece; + +PROMPT +SET PAGESIZE 14 diff --git a/timhall/monitoring/options.sql b/timhall/monitoring/options.sql new file mode 100644 index 0000000..8014307 --- /dev/null +++ b/timhall/monitoring/options.sql @@ -0,0 +1,14 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/options.sql +-- Author : Tim Hall +-- Description : Displays information about all database options. +-- Requirements : Access to the V$ views. +-- Call Syntax : @options +-- Last Modified: 12/04/2013 +-- ----------------------------------------------------------------------------------- + +COLUMN value FORMAT A20 + +SELECT * +FROM v$option +ORDER BY parameter; diff --git a/timhall/monitoring/param_valid_values.sql b/timhall/monitoring/param_valid_values.sql new file mode 100644 index 0000000..335e16c --- /dev/null +++ b/timhall/monitoring/param_valid_values.sql @@ -0,0 +1,17 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/param_valid_values.sql +-- Author : Tim Hall +-- Description : Lists all valid values for the specified parameter. +-- Call Syntax : @param_valid_values (parameter-name) +-- Requirements : Access to the v$views. +-- Last Modified: 14/05/2013 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF + +COLUMN value FORMAT A50 +COLUMN isdefault FORMAT A10 + +SELECT value, + isdefault +FROM v$parameter_valid_values +WHERE name = '&1'; diff --git a/timhall/monitoring/parameter_diffs.sql b/timhall/monitoring/parameter_diffs.sql new file mode 100644 index 0000000..b7b7d0f --- /dev/null +++ b/timhall/monitoring/parameter_diffs.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/parameter_diffs.sql +-- Author : Tim Hall +-- Description : Displays parameter values that differ between the current value and the spfile. +-- Requirements : Access to the V$ views. +-- Call Syntax : @parameter_diffs +-- Last Modified: 08-NOV-2004 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 120 +COLUMN name FORMAT A30 +COLUMN current_value FORMAT A30 +COLUMN sid FORMAT A8 +COLUMN spfile_value FORMAT A30 + +SELECT p.name, + i.instance_name AS sid, + p.value AS current_value, + sp.sid, + sp.value AS spfile_value +FROM v$spparameter sp, + v$parameter p, + v$instance i +WHERE sp.name = p.name +AND sp.value != p.value; + +COLUMN FORMAT DEFAULT diff --git a/timhall/monitoring/parameters.sql b/timhall/monitoring/parameters.sql new file mode 100644 index 0000000..7b6043b --- /dev/null +++ b/timhall/monitoring/parameters.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/parameters.sql +-- Author : Tim Hall +-- Description : Displays a list of all the parameters. +-- Requirements : Access to the v$ views. +-- Call Syntax : @parameters +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 + +COLUMN name FORMAT A30 +COLUMN value FORMAT A60 + +SELECT p.name, + p.type, + p.value, + p.isses_modifiable, + p.issys_modifiable, + p.isinstance_modifiable +FROM v$parameter p +ORDER BY p.name; + diff --git a/timhall/monitoring/parameters_non_default.sql b/timhall/monitoring/parameters_non_default.sql new file mode 100644 index 0000000..d7dca38 --- /dev/null +++ b/timhall/monitoring/parameters_non_default.sql @@ -0,0 +1,17 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/parameters_non_default.sql +-- Author : Tim Hall +-- Description : Displays a list of all the non-default parameters. +-- Requirements : Access to the v$ views. +-- Call Syntax : @parameters_non_default +-- Last Modified: 11-JAN-2017 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 150 + +COLUMN name FORMAT A50 +COLUMN value FORMAT A50 + +SELECT name, + value +FROM v$parameter +WHERE isdefault = 'FALSE'; diff --git a/timhall/monitoring/part_tables.sql b/timhall/monitoring/part_tables.sql new file mode 100644 index 0000000..eba6a3c --- /dev/null +++ b/timhall/monitoring/part_tables.sql @@ -0,0 +1,13 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/part_tables.sql +-- Author : Tim Hall +-- Description : Displays information about all partitioned tables. +-- Requirements : Access to the DBA views. +-- Call Syntax : @part_tables +-- Last Modified: 21/12/2004 +-- ----------------------------------------------------------------------------------- + +SELECT owner, table_name, partitioning_type, partition_count +FROM dba_part_tables +WHERE owner NOT IN ('SYS', 'SYSTEM') +ORDER BY owner, table_name; diff --git a/timhall/monitoring/pga_target_advice.sql b/timhall/monitoring/pga_target_advice.sql new file mode 100644 index 0000000..a3819f7 --- /dev/null +++ b/timhall/monitoring/pga_target_advice.sql @@ -0,0 +1,13 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/pga_target_advice.sql +-- Author : Tim Hall +-- Description : Predicts how changes to the PGA_AGGREGATE_TARGET will affect PGA usage. +-- Requirements : Access to the V$ views. +-- Call Syntax : @pga_target_advice +-- Last Modified: 12/02/2004 +-- ----------------------------------------------------------------------------------- + +SELECT ROUND(pga_target_for_estimate/1024/1024) target_mb, + estd_pga_cache_hit_percentage cache_hit_perc, + estd_overalloc_count +FROM v$pga_target_advice; \ No newline at end of file diff --git a/timhall/monitoring/pipes.sql b/timhall/monitoring/pipes.sql new file mode 100644 index 0000000..379a1cd --- /dev/null +++ b/timhall/monitoring/pipes.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/pipes.sql +-- Author : Tim Hall +-- Description : Displays a list of all database pipes. +-- Requirements : Access to the V$ views. +-- Call Syntax : @pipes +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 100 + +COLUMN name FORMAT A40 + +SELECT ownerid, + name, + type, + pipe_size +FROM v$db_pipes +ORDER BY 1,2; + diff --git a/timhall/monitoring/profiler_run_details.sql b/timhall/monitoring/profiler_run_details.sql new file mode 100644 index 0000000..f21d3fc --- /dev/null +++ b/timhall/monitoring/profiler_run_details.sql @@ -0,0 +1,33 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/profiler_run_details.sql +-- Author : Tim Hall +-- Description : Displays details of a specified profiler run. +-- Requirements : Access to the V$ views. +-- Call Syntax : @profiler_run_details.sql (runid) +-- Last Modified: 25/02/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET VERIFY OFF + +COLUMN runid FORMAT 99999 +COLUMN unit_number FORMAT 99999 +COLUMN unit_type FORMAT A20 +COLUMN unit_owner FORMAT A20 + +SELECT u.runid, + u.unit_number, + u.unit_type, + u.unit_owner, + u.unit_name, + d.line#, + d.total_occur, + ROUND(d.total_time/d.total_occur) as time_per_occur, + d.total_time, + d.min_time, + d.max_time +FROM plsql_profiler_units u + JOIN plsql_profiler_data d ON u.runid = d.runid AND u.unit_number = d.unit_number +WHERE u.runid = &1 +AND d.total_time > 0 +AND d.total_occur > 0 +ORDER BY (d.total_time/d.total_occur) DESC, u.unit_number, d.line#; diff --git a/timhall/monitoring/profiler_runs.sql b/timhall/monitoring/profiler_runs.sql new file mode 100644 index 0000000..949c3b7 --- /dev/null +++ b/timhall/monitoring/profiler_runs.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/profiler_runs.sql +-- Author : Tim Hall +-- Description : Displays information on all profiler_runs. +-- Requirements : Access to the V$ views. +-- Call Syntax : @profiler_runs.sql +-- Last Modified: 25/02/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET TRIMOUT ON + +COLUMN runid FORMAT 99999 +COLUMN run_comment FORMAT A50 + +SELECT runid, + run_date, + run_comment, + run_total_time +FROM plsql_profiler_runs +ORDER BY runid; diff --git a/timhall/monitoring/profiles.sql b/timhall/monitoring/profiles.sql new file mode 100644 index 0000000..bfdcf4b --- /dev/null +++ b/timhall/monitoring/profiles.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/profiles.sql +-- Author : Tim Hall +-- Description : Displays the specified profile(s). +-- Call Syntax : @profiles (profile | part of profile | all) +-- Last Modified: 28/01/2006 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 150 PAGESIZE 20 VERIFY OFF + +BREAK ON profile SKIP 1 + +COLUMN profile FORMAT A35 +COLUMN resource_name FORMAT A40 +COLUMN limit FORMAT A15 + +SELECT profile, + resource_type, + resource_name, + limit +FROM dba_profiles +WHERE profile LIKE (DECODE(UPPER('&1'), 'ALL', '%', UPPER('%&1%'))) +ORDER BY profile, resource_type, resource_name; + +CLEAR BREAKS +SET LINESIZE 80 PAGESIZE 14 VERIFY ON diff --git a/timhall/monitoring/proxy_users.sql b/timhall/monitoring/proxy_users.sql new file mode 100644 index 0000000..d75755a --- /dev/null +++ b/timhall/monitoring/proxy_users.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/proxy_users.sql +-- Author : Tim Hall +-- Description : Displays information about proxy users. +-- Requirements : Access to the PROXY_USERS views. +-- Call Syntax : @proxy_users.sql {username or %} +-- Last Modified: 02/06/2020 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF + +COLUMN proxy FORMAT A30 +COLUMN client FORMAT A30 + +SELECT proxy, + client, + authentication, + flags +FROM proxy_users +WHERE proxy LIKE UPPER('%&1%'); diff --git a/timhall/monitoring/rbs_extents.sql b/timhall/monitoring/rbs_extents.sql new file mode 100644 index 0000000..4031dec --- /dev/null +++ b/timhall/monitoring/rbs_extents.sql @@ -0,0 +1,35 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/rbs_extents.sql +-- Author : Tim Hall +-- Description : Displays information about the rollback segment extents. +-- Requirements : Access to the DBA views. +-- Call Syntax : @rbs_extents +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT Substr(a.segment_name,1,30) "Segment Name", + b.status "Status", + Count(*) "Extents", + b.max_extents "Max Extents", + Trunc(b.initial_extent/1024) "Initial Extent (Kb)", + Trunc(b.next_extent/1024) "Next Extent (Kb)", + Trunc(c.bytes/1024) "Size (Kb)" +FROM dba_extents a, + dba_rollback_segs b, + dba_segments c +WHERE a.segment_type = 'ROLLBACK' +AND b.segment_name = a.segment_name +AND b.segment_name = c.segment_name +GROUP BY a.segment_name, + b.status, + b.max_extents, + b.initial_extent, + b.next_extent, + c.bytes +ORDER BY a.segment_name; + +SET PAGESIZE 14 +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/rbs_stats.sql b/timhall/monitoring/rbs_stats.sql new file mode 100644 index 0000000..ed1e464 --- /dev/null +++ b/timhall/monitoring/rbs_stats.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/rbs_stats.sql +-- Author : Tim Hall +-- Description : Displays rollback segment statistics. +-- Requirements : Access to the v$ & DBA views. +-- Call Syntax : @rbs_stats +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT b.name "Segment Name", + Trunc(c.bytes/1024) "Size (Kb)", + a.optsize "Optimal", + a.shrinks "Shrinks", + a.aveshrink "Avg Shrink", + a.wraps "Wraps", + a.extends "Extends" +FROM v$rollstat a, + v$rollname b, + dba_segments c +WHERE a.usn = b.usn +AND b.name = c.segment_name +ORDER BY b.name; + +SET PAGESIZE 14 +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/recovery_status.sql b/timhall/monitoring/recovery_status.sql new file mode 100644 index 0000000..853b4de --- /dev/null +++ b/timhall/monitoring/recovery_status.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/recovery_status.sql +-- Author : Tim Hall +-- Description : Displays the recovery status of each datafile. +-- Requirements : Access to the V$ views. +-- Call Syntax : @recovery_status +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 500 +SET FEEDBACK OFF + +SELECT Substr(a.name,1,60) "Datafile", + b.status "Status" +FROM v$datafile a, + v$backup b +WHERE a.file# = b.file#; + +SET PAGESIZE 14 +SET FEEDBACK ON \ No newline at end of file diff --git a/timhall/monitoring/recyclebin.sql b/timhall/monitoring/recyclebin.sql new file mode 100644 index 0000000..d12445e --- /dev/null +++ b/timhall/monitoring/recyclebin.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/recyclebin.sql +-- Author : Tim Hall +-- Description : Displays the contents of the recyclebin. +-- Requirements : Access to the DBA views. Depending on DB version, different columns +-- are available. +-- Call Syntax : @recyclebin (owner | all) +-- Last Modified: 15/07/2010 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 VERIFY OFF + +SELECT owner, + original_name, + object_name, + operation, + type, + space AS space_blks, + ROUND((space*8)/1024,2) space_mb +FROM dba_recyclebin +WHERE owner = DECODE(UPPER('&1'), 'ALL', owner, UPPER('&1')) +ORDER BY 1, 2; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/redo_by_day.sql b/timhall/monitoring/redo_by_day.sql new file mode 100644 index 0000000..694481a --- /dev/null +++ b/timhall/monitoring/redo_by_day.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/redo_by_day.sql +-- Author : Tim Hall +-- Description : Lists the volume of archived redo by day for the specified number of days. +-- Call Syntax : @redo_by_day (days) +-- Requirements : Access to the v$views. +-- Last Modified: 11/10/2013 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF + +SELECT TRUNC(first_time) AS day, + ROUND(SUM(blocks * block_size)/1024/1024/1024,2) size_gb +FROM v$archived_log +WHERE TRUNC(first_time) >= TRUNC(SYSDATE) - &1 +GROUP BY TRUNC(first_time) +ORDER BY TRUNC(first_time); + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/redo_by_hour.sql b/timhall/monitoring/redo_by_hour.sql new file mode 100644 index 0000000..f91beb1 --- /dev/null +++ b/timhall/monitoring/redo_by_hour.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/redo_by_hour.sql +-- Author : Tim Hall +-- Description : Lists the volume of archived redo by hour for the specified day. +-- Call Syntax : @redo_by_hour (day 0=Today, 1=Yesterday etc.) +-- Requirements : Access to the v$views. +-- Last Modified: 11/10/2013 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF PAGESIZE 30 + +WITH hours AS ( + SELECT TRUNC(SYSDATE) - &1 + ((level-1)/24) AS hours + FROM dual + CONNECT BY level < = 24 +) +SELECT h.hours AS date_hour, + ROUND(SUM(blocks * block_size)/1024/1024/1024,2) size_gb +FROM hours h + LEFT OUTER JOIN v$archived_log al ON h.hours = TRUNC(al.first_time, 'HH24') +GROUP BY h.hours +ORDER BY h.hours; + +SET VERIFY ON PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/redo_by_min.sql b/timhall/monitoring/redo_by_min.sql new file mode 100644 index 0000000..f8c4ece --- /dev/null +++ b/timhall/monitoring/redo_by_min.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/redo_by_min.sql +-- Author : Tim Hall +-- Description : Lists the volume of archived redo by min for the specified number of hours. +-- Call Syntax : @redo_by_min (N number of minutes from now) +-- Requirements : Access to the v$views. +-- Last Modified: 11/10/2013 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF PAGESIZE 100 + +WITH mins AS ( + SELECT TRUNC(SYSDATE, 'MI') - (&1/(24*60)) + ((level-1)/(24*60)) AS mins + FROM dual + CONNECT BY level <= &1 +) +SELECT m.mins AS date_min, + ROUND(SUM(blocks * block_size)/1024/1024,2) size_mb +FROM mins m + LEFT OUTER JOIN v$archived_log al ON m.mins = TRUNC(al.first_time, 'MI') +GROUP BY m.mins +ORDER BY m.mins; + +SET VERIFY ON PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/registry_history.sql b/timhall/monitoring/registry_history.sql new file mode 100644 index 0000000..6bb9a39 --- /dev/null +++ b/timhall/monitoring/registry_history.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/registry_history.sql +-- Author : Tim Hall +-- Description : Displays contents of the registry history +-- Requirements : Access to the DBA role. +-- Call Syntax : @registry_history +-- Last Modified: 23/08/2008 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN action_time FORMAT A20 +COLUMN action FORMAT A20 +COLUMN namespace FORMAT A20 +COLUMN version FORMAT A10 +COLUMN comments FORMAT A30 +COLUMN bundle_series FORMAT A10 + +SELECT TO_CHAR(action_time, 'DD-MON-YYYY HH24:MI:SS') AS action_time, + action, + namespace, + version, + id, + comments, + bundle_series +FROM sys.registry$history +ORDER by action_time; \ No newline at end of file diff --git a/timhall/monitoring/role_privs.sql b/timhall/monitoring/role_privs.sql new file mode 100644 index 0000000..138c84f --- /dev/null +++ b/timhall/monitoring/role_privs.sql @@ -0,0 +1,44 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/role_privs.sql +-- Author : Tim Hall +-- Description : Displays a list of all roles and privileges granted to the specified role. +-- Requirements : Access to the USER views. +-- Call Syntax : @role_privs (role-name, ALL) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET VERIFY OFF + +SELECT a.role, + a.granted_role, + a.admin_option +FROM role_role_privs a +WHERE a.role = DECODE(UPPER('&1'), 'ALL', a.role, UPPER('&1')) +ORDER BY a.role, a.granted_role; + +SELECT a.grantee, + a.granted_role, + a.admin_option, + a.default_role +FROM dba_role_privs a +WHERE a.grantee = DECODE(UPPER('&1'), 'ALL', a.grantee, UPPER('&1')) +ORDER BY a.grantee, a.granted_role; + +SELECT a.role, + a.privilege, + a.admin_option +FROM role_sys_privs a +WHERE a.role = DECODE(UPPER('&1'), 'ALL', a.role, UPPER('&1')) +ORDER BY a.role, a.privilege; + +SELECT a.role, + a.owner, + a.table_name, + a.column_name, + a.privilege, + a.grantable +FROM role_tab_privs a +WHERE a.role = DECODE(UPPER('&1'), 'ALL', a.role, UPPER('&1')) +ORDER BY a.role, a.owner, a.table_name; + +SET VERIFY ON diff --git a/timhall/monitoring/roles.sql b/timhall/monitoring/roles.sql new file mode 100644 index 0000000..f34b563 --- /dev/null +++ b/timhall/monitoring/roles.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/roles.sql +-- Author : Tim Hall +-- Description : Displays a list of all roles and privileges granted to the specified user. +-- Requirements : Access to the USER views. +-- Call Syntax : @roles +-- Last Modified: 27/02/2018 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET VERIFY OFF + +COLUMN role FORMAT A30 + +SELECT a.role, + a.password_required, + a.authentication_type +FROM dba_roles a +ORDER BY a.role; + +SET VERIFY ON diff --git a/timhall/monitoring/search_source.sql b/timhall/monitoring/search_source.sql new file mode 100644 index 0000000..43162ab --- /dev/null +++ b/timhall/monitoring/search_source.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/search_source.sql +-- Author : Tim Hall +-- Description : Displays a list of all code-objects that contain the specified word. +-- Requirements : Access to the ALL views. +-- Call Syntax : @search_source (text) (schema-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +BREAK ON Name Skip 2 +SET PAGESIZE 0 +SET LINESIZE 500 +SET VERIFY OFF + +SPOOL Search_Source.txt + +SELECT a.name "Name", + a.line "Line", + Substr(a.text,1,200) "Text" +FROM all_source a +WHERE Instr(Upper(a.text),Upper('&&1')) != 0 +AND a.owner = Upper('&&2') +ORDER BY 1,2; + +SPOOL OFF +SET PAGESIZE 14 +SET VERIFY ON diff --git a/timhall/monitoring/segment_size.sql b/timhall/monitoring/segment_size.sql new file mode 100644 index 0000000..c5d4fce --- /dev/null +++ b/timhall/monitoring/segment_size.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/segment_size.sql +-- Author : Tim Hall +-- Description : Displays size of specified segment. +-- Requirements : Access to the DBA views. +-- Call Syntax : @segment_size (owner) (segment_name) +-- Last Modified: 15/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 VERIFY OFF +COLUMN segment_name FORMAT A30 + +SELECT owner, + segment_name, + segment_type, + tablespace_name, + ROUND(bytes/1024/1024,2) size_mb +FROM dba_segments +WHERE owner = UPPER('&1') +AND segment_name LIKE '%' || UPPER('&2') || '%' +ORDER BY 1, 2; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/segment_stats.sql b/timhall/monitoring/segment_stats.sql new file mode 100644 index 0000000..c221a12 --- /dev/null +++ b/timhall/monitoring/segment_stats.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/monitoring/segment_stats.sql +-- Author : DR Timothy S Hall +-- Description : Displays statistics for segments in th specified schema. +-- Requirements : Access to the V$ views. +-- Call Syntax : @segment_stats +-- Last Modified: 20/10/2006 +-- ----------------------------------------------------------------------------------- +SELECT statistic#, + name +FROM v$segstat_name +ORDER BY statistic#; + +ACCEPT l_schema char PROMPT 'Enter Schema: ' +ACCEPT l_stat NUMBER PROMPT 'Enter Statistic#: ' +SET VERIFY OFF + +SELECT object_name, + object_type, + value +FROM v$segment_statistics +WHERE owner = UPPER('&l_schema') +AND statistic# = &l_stat +ORDER BY value; diff --git a/timhall/monitoring/segments_in_ts.sql b/timhall/monitoring/segments_in_ts.sql new file mode 100644 index 0000000..401d380 --- /dev/null +++ b/timhall/monitoring/segments_in_ts.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/segments_in_ts.sql +-- Author : Tim Hall +-- Description : Lists the objects stored in a tablespace. +-- Call Syntax : @objects_in_ts (tablespace-name) +-- Last Modified: 15/06/2018 +-- ----------------------------------------------------------------------------------- + +SET PAGESIZE 20 +BREAK ON segment_type SKIP 1 + +COLUMN segment_name FORMAT A30 +COLUMN partition_name FORMAT A30 + +SELECT segment_type, + segment_name, + partition_name, + ROUND(bytes/2014/1024,2) AS size_mb +FROM dba_segments +WHERE tablespace_name = UPPER('&1') +ORDER BY 1, 2; + +CLEAR BREAKS diff --git a/timhall/monitoring/session_events.sql b/timhall/monitoring/session_events.sql new file mode 100644 index 0000000..d2e1341 --- /dev/null +++ b/timhall/monitoring/session_events.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_events.sql +-- Author : Tim Hall +-- Description : Displays information on all database session events. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_events +-- Last Modified: 11/03/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET PAGESIZE 1000 +SET VERIFY OFF + +COLUMN username FORMAT A20 +COLUMN event FORMAT A40 + +SELECT NVL(s.username, '(oracle)') AS username, + s.sid, + s.serial#, + se.event, + se.total_waits, + se.total_timeouts, + se.time_waited, + se.average_wait, + se.max_wait, + se.time_waited_micro +FROM v$session_event se, + v$session s +WHERE s.sid = se.sid +AND s.sid = &1 +ORDER BY se.time_waited DESC; diff --git a/timhall/monitoring/session_events_by_sid.sql b/timhall/monitoring/session_events_by_sid.sql new file mode 100644 index 0000000..1d791e4 --- /dev/null +++ b/timhall/monitoring/session_events_by_sid.sql @@ -0,0 +1,31 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_events_by_sid.sql +-- Author : Tim Hall +-- Description : Displays information on all database session events for the specified sid. +-- This is a rename of session_events. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_events_by_sid (sid) +-- Last Modified: 06-APR-2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET PAGESIZE 1000 +SET VERIFY OFF + +COLUMN username FORMAT A20 +COLUMN event FORMAT A40 + +SELECT NVL(s.username, '(oracle)') AS username, + s.sid, + s.serial#, + se.event, + se.total_waits, + se.total_timeouts, + se.time_waited, + se.average_wait, + se.max_wait, + se.time_waited_micro +FROM v$session_event se, + v$session s +WHERE s.sid = se.sid +AND s.sid = &1 +ORDER BY se.time_waited DESC; diff --git a/timhall/monitoring/session_events_by_spid.sql b/timhall/monitoring/session_events_by_spid.sql new file mode 100644 index 0000000..5a96653 --- /dev/null +++ b/timhall/monitoring/session_events_by_spid.sql @@ -0,0 +1,32 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_events_by_spid.sql +-- Author : Tim Hall +-- Description : Displays information on all database session events for the specified spid. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_events_by_spid (spid) +-- Last Modified: 06-APR-2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET PAGESIZE 1000 +SET VERIFY OFF + +COLUMN username FORMAT A20 +COLUMN event FORMAT A40 + +SELECT NVL(s.username, '(oracle)') AS username, + s.sid, + s.serial#, + se.event, + se.total_waits, + se.total_timeouts, + se.time_waited, + se.average_wait, + se.max_wait, + se.time_waited_micro +FROM v$session_event se, + v$session s, + v$process p +WHERE s.sid = se.sid +AND s.paddr = p.addr +AND p.spid = &1 +ORDER BY se.time_waited DESC; diff --git a/timhall/monitoring/session_io.sql b/timhall/monitoring/session_io.sql new file mode 100644 index 0000000..c26618b --- /dev/null +++ b/timhall/monitoring/session_io.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_io.sql +-- Author : Tim Hall +-- Description : Displays I/O information on all database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_io +-- Last Modified: 21-FEB-2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 + +COLUMN username FORMAT A15 + +SELECT NVL(s.username, '(oracle)') AS username, + s.osuser, + s.sid, + s.serial#, + si.block_gets, + si.consistent_gets, + si.physical_reads, + si.block_changes, + si.consistent_changes +FROM v$session s, + v$sess_io si +WHERE s.sid = si.sid +ORDER BY s.username, s.osuser; + +SET PAGESIZE 14 diff --git a/timhall/monitoring/session_pga.sql b/timhall/monitoring/session_pga.sql new file mode 100644 index 0000000..7249bab --- /dev/null +++ b/timhall/monitoring/session_pga.sql @@ -0,0 +1,46 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_pga.sql +-- Author : Tim Hall +-- Description : Displays information about PGA usage for each session. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_pga +-- Last Modified: 21-FEB-2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 + +COLUMN username FORMAT A30 +COLUMN osuser FORMAT A20 +COLUMN spid FORMAT A10 +COLUMN service_name FORMAT A15 +COLUMN module FORMAT A45 +COLUMN machine FORMAT A30 +COLUMN logon_time FORMAT A20 +COLUMN pga_used_mem_mb FORMAT 99990.00 +COLUMN pga_alloc_mem_mb FORMAT 99990.00 +COLUMN pga_freeable_mem_mb FORMAT 99990.00 +COLUMN pga_max_mem_mb FORMAT 99990.00 + +SELECT NVL(s.username, '(oracle)') AS username, + s.osuser, + s.sid, + s.serial#, + p.spid, + ROUND(p.pga_used_mem/1024/1024,2) AS pga_used_mem_mb, + ROUND(p.pga_alloc_mem/1024/1024,2) AS pga_alloc_mem_mb, + ROUND(p.pga_freeable_mem/1024/1024,2) AS pga_freeable_mem_mb, + ROUND(p.pga_max_mem/1024/1024,2) AS pga_max_mem_mb, + s.lockwait, + s.status, + s.service_name, + s.module, + s.machine, + s.program, + TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time, + s.last_call_et AS last_call_et_secs +FROM v$session s, + v$process p +WHERE s.paddr = p.addr +ORDER BY s.username, s.osuser; + +SET PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/session_rollback.sql b/timhall/monitoring/session_rollback.sql new file mode 100644 index 0000000..bd17177 --- /dev/null +++ b/timhall/monitoring/session_rollback.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_rollback.sql +-- Author : Tim Hall +-- Description : Displays rollback information on relevant database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_rollback +-- Last Modified: 29/03/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN username FORMAT A15 + +SELECT s.username, + s.sid, + s.serial#, + t.used_ublk, + t.used_urec, + rs.segment_name, + r.rssize, + r.status +FROM v$transaction t, + v$session s, + v$rollstat r, + dba_rollback_segs rs +WHERE s.saddr = t.ses_addr +AND t.xidusn = r.usn +AND rs.segment_id = t.xidusn +ORDER BY t.used_ublk DESC; diff --git a/timhall/monitoring/session_stats.sql b/timhall/monitoring/session_stats.sql new file mode 100644 index 0000000..ecdaa79 --- /dev/null +++ b/timhall/monitoring/session_stats.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_stats.sql +-- Author : Tim Hall +-- Description : Displays session-specific statistics. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_stats (statistic-name or all) +-- Last Modified: 03/11/2004 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF + +SELECT sn.name, ss.value +FROM v$sesstat ss, + v$statname sn, + v$session s +WHERE ss.statistic# = sn.statistic# +AND s.sid = ss.sid +AND s.audsid = SYS_CONTEXT('USERENV','SESSIONID') +AND sn.name LIKE '%' || DECODE(LOWER('&1'), 'all', '', LOWER('&1')) || '%'; + diff --git a/timhall/monitoring/session_stats_by_sid.sql b/timhall/monitoring/session_stats_by_sid.sql new file mode 100644 index 0000000..953afcb --- /dev/null +++ b/timhall/monitoring/session_stats_by_sid.sql @@ -0,0 +1,17 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/monitoring/session_stats_by_sid.sql +-- Author : DR Timothy S Hall +-- Description : Displays session-specific statistics. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_stats_by_sid (sid) (statistic-name or all) +-- Last Modified: 19/09/2006 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF + +SELECT sn.name, ss.value +FROM v$sesstat ss, + v$statname sn +WHERE ss.statistic# = sn.statistic# +AND ss.sid = &1 +AND sn.name LIKE '%' || DECODE(LOWER('&2'), 'all', '', LOWER('&2')) || '%'; + diff --git a/timhall/monitoring/session_undo.sql b/timhall/monitoring/session_undo.sql new file mode 100644 index 0000000..6f5c7f6 --- /dev/null +++ b/timhall/monitoring/session_undo.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_undo.sql +-- Author : Tim Hall +-- Description : Displays undo information on relevant database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_undo +-- Last Modified: 29/03/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN username FORMAT A15 + +SELECT s.username, + s.sid, + s.serial#, + t.used_ublk, + t.used_urec, + rs.segment_name, + r.rssize, + r.status +FROM v$transaction t, + v$session s, + v$rollstat r, + dba_rollback_segs rs +WHERE s.saddr = t.ses_addr +AND t.xidusn = r.usn +AND rs.segment_id = t.xidusn +ORDER BY t.used_ublk DESC; diff --git a/timhall/monitoring/session_waits.sql b/timhall/monitoring/session_waits.sql new file mode 100644 index 0000000..210e745 --- /dev/null +++ b/timhall/monitoring/session_waits.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_waits.sql +-- Author : Tim Hall +-- Description : Displays information on all database session waits. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_waits +-- Last Modified: 11/03/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET PAGESIZE 1000 + +COLUMN username FORMAT A20 +COLUMN event FORMAT A30 + +SELECT NVL(s.username, '(oracle)') AS username, + s.sid, + s.serial#, + sw.event, + sw.wait_time, + sw.seconds_in_wait, + sw.state +FROM v$session_wait sw, + v$session s +WHERE s.sid = sw.sid +ORDER BY sw.seconds_in_wait DESC; diff --git a/timhall/monitoring/sessions.sql b/timhall/monitoring/sessions.sql new file mode 100644 index 0000000..b9b815f --- /dev/null +++ b/timhall/monitoring/sessions.sql @@ -0,0 +1,41 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/sessions.sql +-- Author : Tim Hall +-- Description : Displays information on all database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @sessions +-- Last Modified: 16-MAY-2019 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 + +COLUMN username FORMAT A30 +COLUMN osuser FORMAT A20 +COLUMN spid FORMAT A10 +COLUMN service_name FORMAT A15 +COLUMN module FORMAT A45 +COLUMN machine FORMAT A30 +COLUMN logon_time FORMAT A20 + +SELECT NVL(s.username, '(oracle)') AS username, + s.osuser, + s.sid, + s.serial#, + p.spid, + s.lockwait, + s.status, + s.service_name, + s.machine, + s.program, + TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time, + s.last_call_et AS last_call_et_secs, + s.module, + s.action, + s.client_info, + s.client_identifier +FROM v$session s, + v$process p +WHERE s.paddr = p.addr +ORDER BY s.username, s.osuser; + +SET PAGESIZE 14 diff --git a/timhall/monitoring/sessions_by_machine.sql b/timhall/monitoring/sessions_by_machine.sql new file mode 100644 index 0000000..22eed2e --- /dev/null +++ b/timhall/monitoring/sessions_by_machine.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/sessions_by_machine.sql +-- Author : Tim Hall +-- Description : Displays the number of sessions for each client machine. +-- Requirements : Access to the V$ views. +-- Call Syntax : @sessions_by_machine +-- Last Modified: 20-JUL-2014 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 1000 + +SELECT machine, + NVL(active_count, 0) AS active, + NVL(inactive_count, 0) AS inactive, + NVL(killed_count, 0) AS killed +FROM (SELECT machine, status, count(*) AS quantity + FROM v$session + GROUP BY machine, status) +PIVOT (SUM(quantity) AS count FOR (status) IN ('ACTIVE' AS active, 'INACTIVE' AS inactive, 'KILLED' AS killed)) +ORDER BY machine; + +SET PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/sessions_by_sid.sql b/timhall/monitoring/sessions_by_sid.sql new file mode 100644 index 0000000..8a214c1 --- /dev/null +++ b/timhall/monitoring/sessions_by_sid.sql @@ -0,0 +1,41 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/sessions_by_sid.sql +-- Author : Tim Hall +-- Description : Displays information on all database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @sessions_by_sid (sid) +-- Last Modified: 19-NOV-2019 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 PAGESIZE 1000 VERIFY OFF + +COLUMN username FORMAT A30 +COLUMN osuser FORMAT A20 +COLUMN spid FORMAT A10 +COLUMN service_name FORMAT A15 +COLUMN module FORMAT A45 +COLUMN machine FORMAT A30 +COLUMN logon_time FORMAT A20 + +SELECT NVL(s.username, '(oracle)') AS username, + s.osuser, + s.sid, + s.serial#, + p.spid, + s.lockwait, + s.status, + s.service_name, + s.machine, + s.program, + TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time, + s.last_call_et AS last_call_et_secs, + s.module, + s.action, + s.client_info, + s.client_identifier +FROM v$session s, + v$process p +WHERE s.paddr = p.addr +AND s.sid = &1 +ORDER BY s.username, s.osuser; + +SET PAGESIZE 14 diff --git a/timhall/monitoring/show_indexes.sql b/timhall/monitoring/show_indexes.sql new file mode 100644 index 0000000..e4a3236 --- /dev/null +++ b/timhall/monitoring/show_indexes.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/monitoring/show_indexes.sql +-- Author : DR Timothy S Hall +-- Description : Displays information about specified indexes. +-- Requirements : Access to the DBA views. +-- Call Syntax : @show_indexes (schema) (table-name or all) +-- Last Modified: 04/10/2006 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 200 + +COLUMN table_owner FORMAT A20 +COLUMN index_owner FORMAT A20 +COLUMN index_type FORMAT A12 +COLUMN tablespace_name FORMAT A20 + +SELECT table_owner, + table_name, + owner AS index_owner, + index_name, + tablespace_name, + num_rows, + status, + index_type +FROM dba_indexes +WHERE table_owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')) +ORDER BY table_owner, table_name, index_owner, index_name; diff --git a/timhall/monitoring/show_space.sql b/timhall/monitoring/show_space.sql new file mode 100644 index 0000000..c9429c2 --- /dev/null +++ b/timhall/monitoring/show_space.sql @@ -0,0 +1,59 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/show_space.sql +-- Author : Tom Kyte +-- Description : Displays free and unused space for the specified object. +-- Call Syntax : EXEC Show_Space('Tablename'); +-- Requirements : SET SERVEROUTPUT ON +-- Last Modified: 10/09/2002 +-- ----------------------------------------------------------------------------------- +CREATE OR REPLACE +PROCEDURE show_space +( p_segname IN VARCHAR2, + p_owner IN VARCHAR2 DEFAULT user, + p_type IN VARCHAR2 DEFAULT 'TABLE' ) +AS + l_free_blks NUMBER; + l_total_blocks NUMBER; + l_total_bytes NUMBER; + l_unused_blocks NUMBER; + l_unused_bytes NUMBER; + l_last_used_ext_file_id NUMBER; + l_last_used_ext_block_id NUMBER; + l_last_used_block NUMBER; + + PROCEDURE p( p_label IN VARCHAR2, p_num IN NUMBER ) + IS + BEGIN + DBMS_OUTPUT.PUT_LINE( RPAD(p_label,40,'.') || p_num ); + END; + +BEGIN + DBMS_SPACE.FREE_BLOCKS ( + segment_owner => p_owner, + segment_name => p_segname, + segment_type => p_type, + freelist_group_id => 0, + free_blks => l_free_blks ); + + DBMS_SPACE.UNUSED_SPACE ( + segment_owner => p_owner, + segment_name => p_segname, + segment_type => p_type, + total_blocks => l_total_blocks, + total_bytes => l_total_bytes, + unused_blocks => l_unused_blocks, + unused_bytes => l_unused_bytes, + last_used_extent_file_id => l_last_used_ext_file_id, + last_used_extent_block_id => l_last_used_ext_block_id, + last_used_block => l_last_used_block ); + + p( 'Free Blocks', l_free_blks ); + p( 'Total Blocks', l_total_blocks ); + p( 'Total Bytes', l_total_bytes ); + p( 'Unused Blocks', l_unused_blocks ); + p( 'Unused Bytes', l_unused_bytes ); + p( 'Last Used Ext FileId', l_last_used_ext_file_id ); + p( 'Last Used Ext BlockId', l_last_used_ext_block_id ); + p( 'Last Used Block', l_LAST_USED_BLOCK ); +END; +/ \ No newline at end of file diff --git a/timhall/monitoring/show_tables.sql b/timhall/monitoring/show_tables.sql new file mode 100644 index 0000000..eb84caa --- /dev/null +++ b/timhall/monitoring/show_tables.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/show_tables.sql +-- Author : DR Timothy S Hall +-- Description : Displays information about specified tables. +-- Requirements : Access to the DBA views. +-- Call Syntax : @show_tables (schema) +-- Last Modified: 04/10/2006 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF +SET LINESIZE 200 + +COLUMN owner FORMAT A20 +COLUMN table_name FORMAT A30 + +SELECT t.table_name, + t.tablespace_name, + t.num_rows, + t.avg_row_len, + t.blocks, + t.empty_blocks, + ROUND(t.blocks * ts.block_size/1024/1024,2) AS size_mb +FROM dba_tables t + JOIN dba_tablespaces ts ON t.tablespace_name = ts.tablespace_name +WHERE t.owner = UPPER('&1') +ORDER BY t.table_name; diff --git a/timhall/monitoring/source.sql b/timhall/monitoring/source.sql new file mode 100644 index 0000000..a9616c3 --- /dev/null +++ b/timhall/monitoring/source.sql @@ -0,0 +1,55 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/source.sql +-- Author : Tim Hall +-- Description : Displays the section of code specified. Prompts user for parameters. +-- Requirements : Access to the ALL views. +-- Call Syntax : @source +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +PROMPT +ACCEPT a_name PROMPT 'Enter Name: ' +ACCEPT a_type PROMPT 'Enter Type (S,B,P,F): ' +ACCEPT a_from PROMPT 'Enter Line From: ' +ACCEPT a_to PROMPT 'Enter Line To: ' +ACCEPT a_owner PROMPT 'Enter Owner: ' +VARIABLE v_name VARCHAR2(100) +VARIABLE v_type VARCHAR2(100) +VARIABLE v_from NUMBER +VARIABLE v_to NUMBER +VARIABLE v_owner VARCHAR2(100) +SET VERIFY OFF +SET FEEDBACK OFF +SET LINESIZE 300 +SET PAGESIZE 0 + +BEGIN + :v_name := Upper('&a_name'); + :v_type := Upper('&a_type'); + :v_from := &a_from; + :v_to := &a_to; + :v_owner := Upper('&a_owner'); + + IF :v_type = 'S' THEN + :v_type := 'PACKAGE'; + ELSIF :v_type = 'B' THEN + :v_type := 'PACKAGE BODY'; + ELSIF :v_type = 'P' THEN + :v_type := 'PROCEDURE'; + ELSE + :v_type := 'FUNCTION'; + END IF; +END; +/ + +SELECT a.line "Line", + Substr(a.text,1,200) "Text" +FROM all_source a +WHERE a.name = :v_name +AND a.type = :v_type +AND a.line BETWEEN :v_from AND :v_to +AND a.owner = :v_owner; + +SET VERIFY ON +SET FEEDBACK ON +SET PAGESIZE 22 +PROMPT diff --git a/timhall/monitoring/spfile_parameters.sql b/timhall/monitoring/spfile_parameters.sql new file mode 100644 index 0000000..87ea45c --- /dev/null +++ b/timhall/monitoring/spfile_parameters.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/spfile_parameters.sql +-- Author : Tim Hall +-- Description : Displays a list of all the spfile parameters. +-- Requirements : Access to the v$ views. +-- Call Syntax : @spfile_parameters +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 + +COLUMN name FORMAT A30 +COLUMN value FORMAT A60 +COLUMN displayvalue FORMAT A60 + +SELECT sp.sid, + sp.name, + sp.value, + sp.display_value +FROM v$spparameter sp +ORDER BY sp.name, sp.sid; diff --git a/timhall/monitoring/sql_area.sql b/timhall/monitoring/sql_area.sql new file mode 100644 index 0000000..34b1d7f --- /dev/null +++ b/timhall/monitoring/sql_area.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/sql_area.sql +-- Author : Tim Hall +-- Description : Displays the SQL statements for currently running processes. +-- Requirements : Access to the V$ views. +-- Call Syntax : @sql_area +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET FEEDBACK OFF + +SELECT s.sid, + s.status "Status", + p.spid "Process", + s.schemaname "Schema Name", + s.osuser "OS User", + Substr(a.sql_text,1,120) "SQL Text", + s.program "Program" +FROM v$session s, + v$sqlarea a, + v$process p +WHERE s.sql_hash_value = a.hash_value (+) +AND s.sql_address = a.address (+) +AND s.paddr = p.addr; + +SET PAGESIZE 14 +SET FEEDBACK ON + diff --git a/timhall/monitoring/sql_text.sql b/timhall/monitoring/sql_text.sql new file mode 100644 index 0000000..0674f7b --- /dev/null +++ b/timhall/monitoring/sql_text.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/sql_text.sql +-- Author : Tim Hall +-- Description : Displays the SQL statement held at the specified address. +-- Comments : The address can be found using v$session or Top_SQL.sql. +-- Requirements : Access to the V$ views. +-- Call Syntax : @sql_text (address) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET FEEDBACK OFF +SET VERIFY OFF + +SELECT a.sql_text +FROM v$sqltext_with_newlines a +WHERE a.address = UPPER('&&1') +ORDER BY a.piece; + +PROMPT +SET PAGESIZE 14 +SET FEEDBACK ON diff --git a/timhall/monitoring/sql_text_by_sid.sql b/timhall/monitoring/sql_text_by_sid.sql new file mode 100644 index 0000000..4242d6f --- /dev/null +++ b/timhall/monitoring/sql_text_by_sid.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/sql_text_by_sid.sql +-- Author : Tim Hall +-- Description : Displays the SQL statement held for a specific SID. +-- Comments : The SID can be found by running session.sql or top_session.sql. +-- Requirements : Access to the V$ views. +-- Call Syntax : @sql_text_by_sid (sid) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT a.sql_text +FROM v$sqltext a, + v$session b +WHERE a.address = b.sql_address +AND a.hash_value = b.sql_hash_value +AND b.sid = &1 +ORDER BY a.piece; + +PROMPT +SET PAGESIZE 14 diff --git a/timhall/monitoring/statistics_prefs.sql b/timhall/monitoring/statistics_prefs.sql new file mode 100644 index 0000000..af3c0f2 --- /dev/null +++ b/timhall/monitoring/statistics_prefs.sql @@ -0,0 +1,33 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/statistics_prefs.sql +-- Author : Tim Hall +-- Description : Displays current statistics preferences. +-- Requirements : Access to the DBMS_STATS package. +-- Call Syntax : @statistics_prefs +-- Last Modified: 06-DEC-2013 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 250 + +COLUMN autostats_target FORMAT A20 +COLUMN cascade FORMAT A25 +COLUMN degree FORMAT A10 +COLUMN estimate_percent FORMAT A30 +COLUMN method_opt FORMAT A25 +COLUMN no_invalidate FORMAT A30 +COLUMN granularity FORMAT A15 +COLUMN publish FORMAT A10 +COLUMN incremental FORMAT A15 +COLUMN stale_percent FORMAT A15 + +SELECT DBMS_STATS.GET_PREFS('AUTOSTATS_TARGET') AS autostats_target, + DBMS_STATS.GET_PREFS('CASCADE') AS cascade, + DBMS_STATS.GET_PREFS('DEGREE') AS degree, + DBMS_STATS.GET_PREFS('ESTIMATE_PERCENT') AS estimate_percent, + DBMS_STATS.GET_PREFS('METHOD_OPT') AS method_opt, + DBMS_STATS.GET_PREFS('NO_INVALIDATE') AS no_invalidate, + DBMS_STATS.GET_PREFS('GRANULARITY') AS granularity, + DBMS_STATS.GET_PREFS('PUBLISH') AS publish, + DBMS_STATS.GET_PREFS('INCREMENTAL') AS incremental, + DBMS_STATS.GET_PREFS('STALE_PERCENT') AS stale_percent +FROM dual; diff --git a/timhall/monitoring/synonyms_to_missing_objects.sql b/timhall/monitoring/synonyms_to_missing_objects.sql new file mode 100644 index 0000000..60bfd82 --- /dev/null +++ b/timhall/monitoring/synonyms_to_missing_objects.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/synonyms_to_missing_objects.sql +-- Author : Tim Hall +-- Description : Lists all synonyms that point to missing objects. +-- Call Syntax : @synonyms_to_missing_objects(object-schema-name or all) +-- Requirements : Access to the DBA views. +-- Last Modified: 07/10/2013 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 1000 VERIFY OFF + +SELECT s.owner, + s.synonym_name, + s.table_owner, + s.table_name +FROM dba_synonyms s +WHERE s.db_link IS NULL +AND s.table_owner NOT IN ('SYS','SYSTEM') +AND NOT EXISTS (SELECT 1 + FROM dba_objects o + WHERE o.owner = s.table_owner + AND o.object_name = s.table_name + AND o.object_type != 'SYNONYM') +AND s.table_owner = DECODE(UPPER('&1'), 'ALL', s.table_owner, UPPER('&1')) +ORDER BY s.owner, s.synonym_name; + +SET LINESIZE 80 VERIFY ON diff --git a/timhall/monitoring/system_events.sql b/timhall/monitoring/system_events.sql new file mode 100644 index 0000000..58ea1eb --- /dev/null +++ b/timhall/monitoring/system_events.sql @@ -0,0 +1,16 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/system_events.sql +-- Author : Tim Hall +-- Description : Displays information on all system events. +-- Requirements : Access to the V$ views. +-- Call Syntax : @system_events +-- Last Modified: 21-FEB-2005 +-- ----------------------------------------------------------------------------------- +SELECT event, + total_waits, + total_timeouts, + time_waited, + average_wait, + time_waited_micro +FROM v$system_event +ORDER BY event; diff --git a/timhall/monitoring/system_parameters.sql b/timhall/monitoring/system_parameters.sql new file mode 100644 index 0000000..142eccb --- /dev/null +++ b/timhall/monitoring/system_parameters.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/system_parameters.sql +-- Author : Tim Hall +-- Description : Displays a list of all the system parameters. +-- Comment out isinstance_modifiable for use prior to 10g. +-- Requirements : Access to the v$ views. +-- Call Syntax : @system_parameters +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 + +COLUMN name FORMAT A30 +COLUMN value FORMAT A60 + +SELECT sp.name, + sp.type, + sp.value, + sp.isses_modifiable, + sp.issys_modifiable, + sp.isinstance_modifiable +FROM v$system_parameter sp +ORDER BY sp.name; + diff --git a/timhall/monitoring/system_privs.sql b/timhall/monitoring/system_privs.sql new file mode 100644 index 0000000..1bfd5f8 --- /dev/null +++ b/timhall/monitoring/system_privs.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/system_privs.sql +-- Author : Tim Hall +-- Description : Displays users granted the specified system privilege. +-- Requirements : Access to the DBA views. +-- Call Syntax : @system_privs ("sys-priv") +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 VERIFY OFF + +SELECT privilege, + grantee, + admin_option +FROM dba_sys_privs +WHERE privilege LIKE UPPER('%&1%') +ORDER BY privilege, grantee; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/system_stats.sql b/timhall/monitoring/system_stats.sql new file mode 100644 index 0000000..dac022b --- /dev/null +++ b/timhall/monitoring/system_stats.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/system_stats.sql +-- Author : Tim Hall +-- Description : Displays system statistics. +-- Requirements : Access to the V$ views. +-- Call Syntax : @system_stats (statistic-name or all) +-- Last Modified: 03-NOV-2004 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF + +COLUMN name FORMAT A50 +COLUMN value FORMAT 99999999999999999999 + +SELECT sn.name, ss.value +FROM v$sysstat ss, + v$statname sn +WHERE ss.statistic# = sn.statistic# +AND sn.name LIKE '%' || DECODE(LOWER('&1'), 'all', '', LOWER('&1')) || '%'; diff --git a/timhall/monitoring/table_dep.sql b/timhall/monitoring/table_dep.sql new file mode 100644 index 0000000..3873591 --- /dev/null +++ b/timhall/monitoring/table_dep.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/table_dep.sql +-- Author : Tim Hall +-- Description : Displays a list dependencies for the specified table. +-- Requirements : Access to the ALL views. +-- Call Syntax : @table_dep (table-name) (schema-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +PROMPT +SET VERIFY OFF +SET FEEDBACK OFF +SET LINESIZE 255 +SET PAGESIZE 1000 + + +SELECT ad.referenced_name "Object", + ad.name "Ref Object", + ad.type "Type", + Substr(ad.referenced_owner,1,10) "Ref Owner", + Substr(ad.referenced_link_name,1,20) "Ref Link Name" +FROM all_dependencies ad +WHERE ad.referenced_name = Upper('&&1') +AND ad.owner = Upper('&&2') +ORDER BY 1,2,3; + +SET VERIFY ON +SET FEEDBACK ON +SET PAGESIZE 14 +PROMPT diff --git a/timhall/monitoring/table_extents.sql b/timhall/monitoring/table_extents.sql new file mode 100644 index 0000000..bdb33cc --- /dev/null +++ b/timhall/monitoring/table_extents.sql @@ -0,0 +1,33 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/table_extents.sql +-- Author : Tim Hall +-- Description : Displays a list of tables having more than 1 extent. +-- Requirements : Access to the DBA views. +-- Call Syntax : @table_extents (schema-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT t.table_name, + Count(e.segment_name) extents, + t.max_extents, + t.num_rows "ROWS", + Trunc(t.initial_extent/1024) "INITIAL K", + Trunc(t.next_extent/1024) "NEXT K" +FROM all_tables t, + dba_extents e +WHERE e.segment_name = t.table_name +AND e.owner = t.owner +AND t.owner = Upper('&&1') +GROUP BY t.table_name, + t.max_extents, + t.num_rows, + t.initial_extent, + t.next_extent +HAVING Count(e.segment_name) > 1 +ORDER BY Count(e.segment_name) DESC; + +SET PAGESIZE 18 +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/table_growth.sql b/timhall/monitoring/table_growth.sql new file mode 100644 index 0000000..535a34a --- /dev/null +++ b/timhall/monitoring/table_growth.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/table_growth.sql +-- Author : Tim Hall +-- Description : Displays information on all active database sessions. +-- Requirements : Access to the DBA_HIST views. Diagnostics and Tuning license. +-- Call Syntax : @table_growth (schema-name) (table_name) +-- Last Modified: 03-DEC-2019 +-- ----------------------------------------------------------------------------------- +COLUMN object_name FORMAT A30 + +SELECT TO_CHAR(sn.begin_interval_time,'DD-MON-YYYY HH24:MM') AS begin_interval_time, + sso.object_name, + ss.space_used_total +FROM dba_hist_seg_stat ss, + dba_hist_seg_stat_obj sso, + dba_hist_snapshot sn +WHERE sso.owner = UPPER('&1') +AND sso.obj# = ss.obj# +AND sn.snap_id = ss.snap_id +AND sso.object_name LIKE UPPER('&2') || '%' +ORDER BY sn.begin_interval_time; diff --git a/timhall/monitoring/table_indexes.sql b/timhall/monitoring/table_indexes.sql new file mode 100644 index 0000000..caff997 --- /dev/null +++ b/timhall/monitoring/table_indexes.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/table_indexes.sql +-- Author : Tim Hall +-- Description : Displays index-column information for the specified table. +-- Requirements : Access to the DBA views. +-- Call Syntax : @table_indexes (schema-name) (table-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 PAGESIZE 1000 VERIFY OFF + +COLUMN index_name FORMAT A30 +COLUMN column_name FORMAT A30 +COLUMN column_position FORMAT 99999 + +SELECT a.index_name, + a.column_name, + a.column_position +FROM all_ind_columns a, + all_indexes b +WHERE b.owner = UPPER('&1') +AND b.table_name = UPPER('&2') +AND b.index_name = a.index_name +AND b.owner = a.index_owner +ORDER BY 1,3; + +SET PAGESIZE 18 VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/table_partitions.sql b/timhall/monitoring/table_partitions.sql new file mode 100644 index 0000000..ac37e19 --- /dev/null +++ b/timhall/monitoring/table_partitions.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/table_partitions.sql +-- Author : Tim Hall +-- Description : Displays partition information for the specified table, or all tables. +-- Requirements : Access to the DBA views. +-- Call Syntax : @table_partitions (table-name or all) (schema-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET FEEDBACK OFF +SET VERIFY OFF + +SELECT a.table_name, + a.partition_name, + a.tablespace_name, + a.initial_extent, + a.next_extent, + a.pct_increase, + a.num_rows, + a.avg_row_len +FROM dba_tab_partitions a +WHERE a.table_name = Decode(Upper('&&1'),'ALL',a.table_name,Upper('&&1')) +AND a.table_owner = Upper('&&2') +ORDER BY a.table_name, a.partition_name +/ + + +SET PAGESIZE 14 +SET FEEDBACK ON diff --git a/timhall/monitoring/table_stats.sql b/timhall/monitoring/table_stats.sql new file mode 100644 index 0000000..b7a8dda --- /dev/null +++ b/timhall/monitoring/table_stats.sql @@ -0,0 +1,59 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/table_stats.sql +-- Author : Tim Hall +-- Description : Displays the table statistics belonging to the specified schema. +-- Requirements : Access to the DBA and v$ views. +-- Call Syntax : @table_stats (schema-name) (table-name) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 300 VERIFY OFF + +COLUMN owner FORMAT A20 +COLUMN table_name FORMAT A30 +COLUMN index_name FORMAT A30 + +SELECT owner, + table_name, + num_rows, + blocks, + empty_blocks, + avg_space + chain_cnt, + avg_row_len, + last_analyzed +FROM dba_tables +WHERE owner = UPPER('&1') +AND table_name = UPPER('&2'); + +SELECT index_name, + blevel, + leaf_blocks, + distinct_keys, + avg_leaf_blocks_per_key, + avg_data_blocks_per_key, + clustering_factor, + num_rows, + last_analyzed +FROM dba_indexes +WHERE table_owner = UPPER('&1') +AND table_name = UPPER('&2') +ORDER BY index_name; + +COLUMN column_name FORMAT A30 +COLUMN low_value FORMAT A40 +COLUMN high_value FORMAT A40 +COLUMN endpoint_actual_value FORMAT A30 + +SELECT column_id, + column_name, + num_distinct, + avg_col_len, + histogram, + low_value, + high_value +FROM dba_tab_columns +WHERE owner = UPPER('&1') +AND table_name = UPPER('&2') +ORDER BY column_id; + +SET VERIFY ON diff --git a/timhall/monitoring/table_triggers.sql b/timhall/monitoring/table_triggers.sql new file mode 100644 index 0000000..9b18031 --- /dev/null +++ b/timhall/monitoring/table_triggers.sql @@ -0,0 +1,13 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/table_triggers.sql +-- Author : Tim Hall +-- Description : Lists the triggers for the specified table. +-- Call Syntax : @table_triggers (schema) (table_name) +-- Last Modified: 07/11/2016 +-- ----------------------------------------------------------------------------------- +SELECT owner, + trigger_name, + status +FROM dba_triggers +WHERE table_owner = UPPER('&1') +AND table_name = UPPER('&2'); \ No newline at end of file diff --git a/timhall/monitoring/tables_with_locked_stats.sql b/timhall/monitoring/tables_with_locked_stats.sql new file mode 100644 index 0000000..9a7c345 --- /dev/null +++ b/timhall/monitoring/tables_with_locked_stats.sql @@ -0,0 +1,15 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/tables_with_locked_stats.sql +-- Author : Tim Hall +-- Description : Displays tables with locked stats. +-- Requirements : Access to the DBA views. +-- Call Syntax : @tables_with_locked_stats.sql +-- Last Modified: 06-DEC-2013 +-- ----------------------------------------------------------------------------------- + +SELECT owner, + table_name, + stattype_locked +FROM dba_tab_statistics +WHERE stattype_locked IS NOT NULL +ORDER BY owner, table_name; diff --git a/timhall/monitoring/tables_with_zero_rows.sql b/timhall/monitoring/tables_with_zero_rows.sql new file mode 100644 index 0000000..fe8fbc7 --- /dev/null +++ b/timhall/monitoring/tables_with_zero_rows.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/tables_with_zero_rows.sql +-- Author : Tim Hall +-- Description : Displays tables with stats saying they have zero rows. +-- Requirements : Access to the DBA views. +-- Call Syntax : @tables_with_zero_rows.sql +-- Last Modified: 06-DEC-2013 +-- ----------------------------------------------------------------------------------- + +SELECT owner, + table_name, + last_analyzed, + num_rows +FROM dba_tables +WHERE num_rows = 0 +AND owner NOT IN ('SYS','SYSTEM','SYSMAN','XDB','MDSYS', + 'WMSYS','OUTLN','ORDDATA','ORDSYS', + 'OLAPSYS','EXFSYS','DBNSMP','CTXSYS', + 'APEX_030200','FLOWS_FILES','SCOTT', + 'TSMSYS','DBSNMP','APPQOSSYS','OWBSYS', + 'DMSYS','FLOWS_030100','WKSYS','WK_TEST') +ORDER BY owner, table_name; diff --git a/timhall/monitoring/tablespaces.sql b/timhall/monitoring/tablespaces.sql new file mode 100644 index 0000000..bdea26f --- /dev/null +++ b/timhall/monitoring/tablespaces.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/tablespaces.sql +-- Author : Tim Hall +-- Description : Displays information about tablespaces. +-- Requirements : Access to the DBA views. +-- Call Syntax : @tablespaces +-- Last Modified: 17-AUG-2005 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 + +SELECT tablespace_name, + block_size, + extent_management, + allocation_type, + segment_space_management, + status +FROM dba_tablespaces +ORDER BY tablespace_name; diff --git a/timhall/monitoring/temp_extent_map.sql b/timhall/monitoring/temp_extent_map.sql new file mode 100644 index 0000000..d0f352b --- /dev/null +++ b/timhall/monitoring/temp_extent_map.sql @@ -0,0 +1,45 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/monitoring/temp_extent_map.sql +-- Author : DR Timothy S Hall +-- Description : Displays temp extents and their locations within the tablespace allowing identification of tablespace fragmentation. +-- Requirements : Access to the DBA views. +-- Call Syntax : @temp_extent_map (tablespace-name) +-- Last Modified: 25/01/2003 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON SIZE 1000000 +SET FEEDBACK OFF +SET TRIMOUT ON +SET VERIFY OFF + +DECLARE + CURSOR c_extents IS + SELECT d.name, + t.block_id AS start_block, + t.block_id + t.blocks - 1 AS end_block + FROM v$temp_extent_map t, + v$tempfile d + WHERE t.file_id = d.file# + AND t.tablespace_name = Upper('&1') + ORDER BY d.name, t.block_id; + + l_last_block_id NUMBER := 0; + l_gaps_only BOOLEAN := TRUE; +BEGIN + FOR cur_rec IN c_extents LOOP + IF cur_rec.start_block > l_last_block_id + 1 THEN + DBMS_OUTPUT.PUT_LINE('*** GAP *** (' || l_last_block_id || ' -> ' || cur_rec.start_block || ')'); + END IF; + l_last_block_id := cur_rec.end_block; + IF NOT l_gaps_only THEN + DBMS_OUTPUT.PUT_LINE(RPAD(cur_rec.name, 50, ' ') || + ' (' || cur_rec.start_block || ' -> ' || cur_rec.end_block || ')'); + END IF; + END LOOP; +END; +/ + +PROMPT +SET FEEDBACK ON +SET PAGESIZE 18 + + diff --git a/timhall/monitoring/temp_free_space.sql b/timhall/monitoring/temp_free_space.sql new file mode 100644 index 0000000..b9c1947 --- /dev/null +++ b/timhall/monitoring/temp_free_space.sql @@ -0,0 +1,36 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/temp_free_space.sql +-- Author : Tim Hall +-- Description : Displays temp space usage for each datafile. +-- Requirements : Access to the DBA views. +-- Call Syntax : @temp_free_space +-- Last Modified: 15-JUL-2000 - Created. +-- 13-OCT-2012 - Amended to include auto-extend and maxsize. +-- ----------------------------------------------------------------------------------- +SET LINESIZE 255 + +COLUMN tablespace_name FORMAT A20 +COLUMN file_name FORMAT A40 + +SELECT tf.tablespace_name, + tf.file_name, + tf.size_mb, + f.free_mb, + tf.max_size_mb, + f.free_mb + (tf.max_size_mb - tf.size_mb) AS max_free_mb, + RPAD(' '|| RPAD('X',ROUND((tf.max_size_mb-(f.free_mb + (tf.max_size_mb - tf.size_mb)))/max_size_mb*10,0), 'X'),11,'-') AS used_pct +FROM (SELECT file_id, + file_name, + tablespace_name, + TRUNC(bytes/1024/1024) AS size_mb, + TRUNC(GREATEST(bytes,maxbytes)/1024/1024) AS max_size_mb + FROM dba_temp_files) tf, + (SELECT TRUNC(SUM(bytes)/1024/1024) AS free_mb, + file_id + FROM dba_free_space + GROUP BY file_id) f +WHERE tf.file_id = f.file_id (+) +ORDER BY tf.tablespace_name, + tf.file_name; + +SET PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/temp_io.sql b/timhall/monitoring/temp_io.sql new file mode 100644 index 0000000..52b5eee --- /dev/null +++ b/timhall/monitoring/temp_io.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/temp_io.sql +-- Author : Tim Hall +-- Description : Displays the amount of IO for each tempfile. +-- Requirements : Access to the v$ views. +-- Call Syntax : @temp_io +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 1000 + +SELECT SUBSTR(t.name,1,50) AS file_name, + f.phyblkrd AS blocks_read, + f.phyblkwrt AS blocks_written, + f.phyblkrd + f.phyblkwrt AS total_io +FROM v$tempstat f, + v$tempfile t +WHERE t.file# = f.file# +ORDER BY f.phyblkrd + f.phyblkwrt DESC; + +SET PAGESIZE 18 \ No newline at end of file diff --git a/timhall/monitoring/temp_segments.sql b/timhall/monitoring/temp_segments.sql new file mode 100644 index 0000000..2f49644 --- /dev/null +++ b/timhall/monitoring/temp_segments.sql @@ -0,0 +1,15 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/temp_segments.sql +-- Author : Tim Hall +-- Description : Displays a list of all temporary segments. +-- Requirements : Access to the DBA views. +-- Call Syntax : @temp_segments +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 + +SELECT owner, + Trunc(Sum(bytes)/1024) Kb +FROM dba_segments +WHERE segment_type = 'TEMPORARY' +GROUP BY owner; diff --git a/timhall/monitoring/temp_usage.sql b/timhall/monitoring/temp_usage.sql new file mode 100644 index 0000000..30edc11 --- /dev/null +++ b/timhall/monitoring/temp_usage.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/temp_usage.sql +-- Author : Tim Hall +-- Description : Displays temp usage for all session currently using temp space. +-- Requirements : Access to the V$ views. +-- Call Syntax : @temp_usage +-- Last Modified: 12/02/2004 +-- ----------------------------------------------------------------------------------- + + +COLUMN temp_used FORMAT 9999999999 + +SELECT NVL(s.username, '(background)') AS username, + s.sid, + s.serial#, + ROUND(ss.value/1024/1024, 2) AS temp_used_mb +FROM v$session s + JOIN v$sesstat ss ON s.sid = ss.sid + JOIN v$statname sn ON ss.statistic# = sn.statistic# +WHERE sn.name = 'temp space allocated (bytes)' +AND ss.value > 0 +ORDER BY 1; diff --git a/timhall/monitoring/tempfiles.sql b/timhall/monitoring/tempfiles.sql new file mode 100644 index 0000000..721095b --- /dev/null +++ b/timhall/monitoring/tempfiles.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/tempfiles.sql +-- Author : Tim Hall +-- Description : Displays information about tempfiles. +-- Requirements : Access to the V$ views. +-- Call Syntax : @tempfiles +-- Last Modified: 17-AUG-2005 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 +COLUMN file_name FORMAT A70 + +SELECT file_id, + file_name, + ROUND(bytes/1024/1024/1024) AS size_gb, + ROUND(maxbytes/1024/1024/1024) AS max_size_gb, + autoextensible, + increment_by, + status +FROM dba_temp_files +ORDER BY file_name; diff --git a/timhall/monitoring/tempseg_usage.sql b/timhall/monitoring/tempseg_usage.sql new file mode 100644 index 0000000..a871192 --- /dev/null +++ b/timhall/monitoring/tempseg_usage.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/tempseg_usage.sql +-- Author : Tim Hall +-- Description : Displays temp segment usage for all session currently using temp space. +-- Requirements : Access to the V$ views. +-- Call Syntax : @tempseg_usage +-- Last Modified: 01/04/2006 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 +COLUMN username FORMAT A20 + +SELECT username, + session_addr, + session_num, + sqladdr, + sqlhash, + sql_id, + contents, + segtype, + extents, + blocks +FROM v$tempseg_usage +ORDER BY username; \ No newline at end of file diff --git a/timhall/monitoring/top_latches.sql b/timhall/monitoring/top_latches.sql new file mode 100644 index 0000000..98a112d --- /dev/null +++ b/timhall/monitoring/top_latches.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/top_latches.sql +-- Author : Tim Hall +-- Description : Displays information about the top latches. +-- Requirements : Access to the V$ views. +-- Call Syntax : @top_latches +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +SELECT l.latch#, + l.name, + l.gets, + l.misses, + l.sleeps, + l.immediate_gets, + l.immediate_misses, + l.spin_gets +FROM v$latch l +WHERE l.misses > 0 +ORDER BY l.misses DESC; diff --git a/timhall/monitoring/top_sessions.sql b/timhall/monitoring/top_sessions.sql new file mode 100644 index 0000000..2fb3888 --- /dev/null +++ b/timhall/monitoring/top_sessions.sql @@ -0,0 +1,39 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/top_sessions.sql +-- Author : Tim Hall +-- Description : Displays information on all database sessions ordered by executions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @top_sessions.sql (reads, execs or cpu) +-- Last Modified: 21/02/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +COLUMN username FORMAT A15 +COLUMN machine FORMAT A25 +COLUMN logon_time FORMAT A20 + +SELECT NVL(a.username, '(oracle)') AS username, + a.osuser, + a.sid, + a.serial#, + c.value AS &1, + a.lockwait, + a.status, + a.module, + a.machine, + a.program, + TO_CHAR(a.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time +FROM v$session a, + v$sesstat c, + v$statname d +WHERE a.sid = c.sid +AND c.statistic# = d.statistic# +AND d.name = DECODE(UPPER('&1'), 'READS', 'session logical reads', + 'EXECS', 'execute count', + 'CPU', 'CPU used by this session', + 'CPU used by this session') +ORDER BY c.value DESC; + +SET PAGESIZE 14 diff --git a/timhall/monitoring/top_sql.sql b/timhall/monitoring/top_sql.sql new file mode 100644 index 0000000..015d23b --- /dev/null +++ b/timhall/monitoring/top_sql.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/top_sql.sql +-- Author : Tim Hall +-- Description : Displays a list of SQL statements that are using the most resources. +-- Comments : The address column can be use as a parameter with SQL_Text.sql to display the full statement. +-- Requirements : Access to the V$ views. +-- Call Syntax : @top_sql (number) +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +SELECT * +FROM (SELECT Substr(a.sql_text,1,50) sql_text, + Trunc(a.disk_reads/Decode(a.executions,0,1,a.executions)) reads_per_execution, + a.buffer_gets, + a.disk_reads, + a.executions, + a.sorts, + a.address + FROM v$sqlarea a + ORDER BY 2 DESC) +WHERE rownum <= &&1; + +SET PAGESIZE 14 diff --git a/timhall/monitoring/trace_run_details.sql b/timhall/monitoring/trace_run_details.sql new file mode 100644 index 0000000..ddc0d1a --- /dev/null +++ b/timhall/monitoring/trace_run_details.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/trace_run_details.sql +-- Author : Tim Hall +-- Description : Displays details of a specified trace run. +-- Requirements : Access to the V$ views. +-- Call Syntax : @trace_run_details.sql (runid) +-- Last Modified: 06/05/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET TRIMOUT ON + +COLUMN runid FORMAT 99999 +COLUMN event_seq FORMAT 99999 +COLUMN event_unit_owner FORMAT A20 +COLUMN event_unit FORMAT A20 +COLUMN event_unit_kind FORMAT A20 +COLUMN event_comment FORMAT A30 + +SELECT e.runid, + e.event_seq, + TO_CHAR(e.event_time, 'DD-MON-YYYY HH24:MI:SS') AS event_time, + e.event_unit_owner, + e.event_unit, + e.event_unit_kind, + e.proc_line, + e.event_comment +FROM plsql_trace_events e +WHERE e.runid = &1 +ORDER BY e.runid, e.event_seq; \ No newline at end of file diff --git a/timhall/monitoring/trace_runs.sql b/timhall/monitoring/trace_runs.sql new file mode 100644 index 0000000..9306412 --- /dev/null +++ b/timhall/monitoring/trace_runs.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/trace_runs.sql +-- Author : Tim Hall +-- Description : Displays information on all trace runs. +-- Requirements : Access to the V$ views. +-- Call Syntax : @trace_runs.sql +-- Last Modified: 06/05/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET TRIMOUT ON + +COLUMN runid FORMAT 99999 + +SELECT runid, + run_date, + run_owner +FROM plsql_trace_runs +ORDER BY runid; \ No newline at end of file diff --git a/timhall/monitoring/ts_datafiles.sql b/timhall/monitoring/ts_datafiles.sql new file mode 100644 index 0000000..c7411d8 --- /dev/null +++ b/timhall/monitoring/ts_datafiles.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/ts_datafiles.sql +-- Author : Tim Hall +-- Description : Displays information about datafiles for the specified tablespace. +-- Requirements : Access to the V$ views. +-- Call Syntax : @ts_datafiles (tablespace-name) +-- Last Modified: 17-AUG-2005 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 +COLUMN file_name FORMAT A70 + +SELECT file_id, + file_name, + ROUND(bytes/1024/1024/1024) AS size_gb, + ROUND(maxbytes/1024/1024/1024) AS max_size_gb, + autoextensible, + increment_by, + status +FROM dba_data_files +WHERE tablespace_name = UPPER('&1') +ORDER BY file_id; diff --git a/timhall/monitoring/ts_extent_map.sql b/timhall/monitoring/ts_extent_map.sql new file mode 100644 index 0000000..1caa681 --- /dev/null +++ b/timhall/monitoring/ts_extent_map.sql @@ -0,0 +1,67 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/ts_extent_map.sql +-- Author : Tim Hall +-- Description : Displays gaps (empty space) in a tablespace or specific datafile. +-- Requirements : Access to the DBA views. +-- Call Syntax : @ts_extent_map (tablespace-name) [all | file_id] +-- Last Modified: 25/01/2003 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON SIZE 1000000 +SET FEEDBACK OFF +SET TRIMOUT ON +SET VERIFY OFF + +DECLARE + l_tablespace_name VARCHAR2(30) := UPPER('&1'); + l_file_id VARCHAR2(30) := UPPER('&2'); + + CURSOR c_extents IS + SELECT owner, + segment_name, + file_id, + block_id AS start_block, + block_id + blocks - 1 AS end_block + FROM dba_extents + WHERE tablespace_name = l_tablespace_name + AND file_id = DECODE(l_file_id, 'ALL', file_id, TO_NUMBER(l_file_id)) + ORDER BY file_id, block_id; + + l_block_size NUMBER := 0; + l_last_file_id NUMBER := 0; + l_last_block_id NUMBER := 0; + l_gaps_only BOOLEAN := TRUE; + l_total_blocks NUMBER := 0; +BEGIN + SELECT block_size + INTO l_block_size + FROM dba_tablespaces + WHERE tablespace_name = l_tablespace_name; + + DBMS_OUTPUT.PUT_LINE('Tablespace Block Size (bytes): ' || l_block_size); + FOR cur_rec IN c_extents LOOP + IF cur_rec.file_id != l_last_file_id THEN + l_last_file_id := cur_rec.file_id; + l_last_block_id := cur_rec.start_block - 1; + END IF; + + IF cur_rec.start_block > l_last_block_id + 1 THEN + DBMS_OUTPUT.PUT_LINE('*** GAP *** (' || l_last_block_id || ' -> ' || cur_rec.start_block || ')' || + ' FileID=' || cur_rec.file_id || + ' Blocks=' || (cur_rec.start_block-l_last_block_id-1) || + ' Size(MB)=' || ROUND(((cur_rec.start_block-l_last_block_id-1) * l_block_size)/1024/1024,2) + ); + l_total_blocks := l_total_blocks + cur_rec.start_block - l_last_block_id-1; + END IF; + l_last_block_id := cur_rec.end_block; + IF NOT l_gaps_only THEN + DBMS_OUTPUT.PUT_LINE(RPAD(cur_rec.owner || '.' || cur_rec.segment_name, 40, ' ') || + ' (' || cur_rec.start_block || ' -> ' || cur_rec.end_block || ')'); + END IF; + END LOOP; + DBMS_OUTPUT.PUT_LINE('Total Gap Blocks: ' || l_total_blocks); + DBMS_OUTPUT.PUT_LINE('Total Gap Space (MB): ' || ROUND((l_total_blocks * l_block_size)/1024/1024,2)); +END; +/ + +PROMPT +SET FEEDBACK ON diff --git a/timhall/monitoring/ts_free_space.sql b/timhall/monitoring/ts_free_space.sql new file mode 100644 index 0000000..399ea51 --- /dev/null +++ b/timhall/monitoring/ts_free_space.sql @@ -0,0 +1,39 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/ts_free_space.sql +-- Author : Tim Hall +-- Description : Displays a list of tablespaces and their used/full status. +-- Requirements : Access to the DBA views. +-- Call Syntax : @ts_free_space.sql +-- Last Modified: 13-OCT-2012 - Created. Based on ts_full.sql +-- 22-SEP-2017 - LINESIZE set. +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 140 LINESIZE 200 +COLUMN used_pct FORMAT A11 + +SELECT tablespace_name, + size_mb, + free_mb, + max_size_mb, + max_free_mb, + TRUNC((max_free_mb/max_size_mb) * 100) AS free_pct, + RPAD(' '|| RPAD('X',ROUND((max_size_mb-max_free_mb)/max_size_mb*10,0), 'X'),11,'-') AS used_pct +FROM ( + SELECT a.tablespace_name, + b.size_mb, + a.free_mb, + b.max_size_mb, + a.free_mb + (b.max_size_mb - b.size_mb) AS max_free_mb + FROM (SELECT tablespace_name, + TRUNC(SUM(bytes)/1024/1024) AS free_mb + FROM dba_free_space + GROUP BY tablespace_name) a, + (SELECT tablespace_name, + TRUNC(SUM(bytes)/1024/1024) AS size_mb, + TRUNC(SUM(GREATEST(bytes,maxbytes))/1024/1024) AS max_size_mb + FROM dba_data_files + GROUP BY tablespace_name) b + WHERE a.tablespace_name = b.tablespace_name + ) +ORDER BY tablespace_name; + +SET PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/ts_full.sql b/timhall/monitoring/ts_full.sql new file mode 100644 index 0000000..9365620 --- /dev/null +++ b/timhall/monitoring/ts_full.sql @@ -0,0 +1,39 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/ts_full.sql +-- Author : Tim Hall +-- Description : Displays a list of tablespaces that are nearly full. +-- Requirements : Access to the DBA views. +-- Call Syntax : @ts_full +-- Last Modified: 15-JUL-2000 - Created. +- 13-OCT-2012 - Included support for auto-extend and maxsize. +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 100 + +PROMPT Tablespaces nearing 0% free +PROMPT *************************** +SELECT tablespace_name, + size_mb, + free_mb, + max_size_mb, + max_free_mb, + TRUNC((max_free_mb/max_size_mb) * 100) AS free_pct +FROM ( + SELECT a.tablespace_name, + b.size_mb, + a.free_mb, + b.max_size_mb, + a.free_mb + (b.max_size_mb - b.size_mb) AS max_free_mb + FROM (SELECT tablespace_name, + TRUNC(SUM(bytes)/1024/1024) AS free_mb + FROM dba_free_space + GROUP BY tablespace_name) a, + (SELECT tablespace_name, + TRUNC(SUM(bytes)/1024/1024) AS size_mb, + TRUNC(SUM(GREATEST(bytes,maxbytes))/1024/1024) AS max_size_mb + FROM dba_data_files + GROUP BY tablespace_name) b + WHERE a.tablespace_name = b.tablespace_name + ) +WHERE ROUND((max_free_mb/max_size_mb) * 100,2) < 10; + +SET PAGESIZE 14 \ No newline at end of file diff --git a/timhall/monitoring/ts_thresholds.sql b/timhall/monitoring/ts_thresholds.sql new file mode 100644 index 0000000..39a7e8c --- /dev/null +++ b/timhall/monitoring/ts_thresholds.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/ts_thresholds.sql +-- Author : Tim Hall +-- Description : Displays threshold information for tablespaces. +-- Call Syntax : @ts_thresholds +-- Last Modified: 13/02/2014 - Created +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN metrics_name FORMAT A30 +COLUMN warning_value FORMAT A30 +COLUMN critical_value FORMAT A15 + +SELECT tablespace_name, + contents, + extent_management, + threshold_type, + metrics_name, + warning_operator, + warning_value, + critical_operator, + critical_value +FROM dba_tablespace_thresholds +ORDER BY tablespace_name, metrics_name; + +SET LINESIZE 80 diff --git a/timhall/monitoring/ts_thresholds_reset.sql b/timhall/monitoring/ts_thresholds_reset.sql new file mode 100644 index 0000000..216477c --- /dev/null +++ b/timhall/monitoring/ts_thresholds_reset.sql @@ -0,0 +1,51 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/ts_thresholds_reset.sql +-- Author : Tim Hall +-- Description : Displays threshold information for tablespaces. +-- Call Syntax : @ts_thresholds_reset (warning) (critical) +-- @ts_thresholds_reset NULL NULL -- To reset to defaults +-- Last Modified: 13/02/2014 - Created +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF + +DECLARE + g_warning_value VARCHAR2(4) := '&1'; + g_warning_operator VARCHAR2(4) := DBMS_SERVER_ALERT.OPERATOR_GE; + g_critical_value VARCHAR2(4) := '&2'; + g_critical_operator VARCHAR2(4) := DBMS_SERVER_ALERT.OPERATOR_GE; + + PROCEDURE set_threshold(p_ts_name IN VARCHAR2) AS + BEGIN + DBMS_SERVER_ALERT.SET_THRESHOLD( + metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL, + warning_operator => g_warning_operator, + warning_value => g_warning_value, + critical_operator => g_critical_operator, + critical_value => g_critical_value, + observation_period => 1, + consecutive_occurrences => 1, + instance_name => NULL, + object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE, + object_name => p_ts_name); + END; +BEGIN + IF g_warning_value = 'NULL' THEN + g_warning_value := NULL; + g_warning_operator := NULL; + END IF; + IF g_critical_value = 'NULL' THEN + g_critical_value := NULL; + g_critical_operator := NULL; + END IF; + + FOR cur_ts IN (SELECT tablespace_name + FROM dba_tablespace_thresholds + WHERE warning_operator != 'DO NOT CHECK' + AND extent_management = 'LOCAL') + LOOP + set_threshold(cur_ts.tablespace_name); + END LOOP; +END; +/ + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/ts_thresholds_set_default.sql b/timhall/monitoring/ts_thresholds_set_default.sql new file mode 100644 index 0000000..e05ecd6 --- /dev/null +++ b/timhall/monitoring/ts_thresholds_set_default.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/ts_thresholds_set_default.sql +-- Author : Tim Hall +-- Description : Displays threshold information for tablespaces. +-- Call Syntax : @ts_thresholds_set_default (warning) (critical) +-- Last Modified: 13/02/2014 - Created +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF + +DECLARE + l_warning VARCHAR2(2) := '&1'; + l_critical VARCHAR2(2) := '&2'; +BEGIN + DBMS_SERVER_ALERT.SET_THRESHOLD( + metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL, + warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE, + warning_value => l_warning, + critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE, + critical_value => l_critical, + observation_period => 1, + consecutive_occurrences => 1, + instance_name => NULL, + object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE, + object_name => NULL); +END; +/ + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/tuning.sql b/timhall/monitoring/tuning.sql new file mode 100644 index 0000000..516c470 --- /dev/null +++ b/timhall/monitoring/tuning.sql @@ -0,0 +1,138 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/tuning.sql +-- Author : Tim Hall +-- Description : Displays several performance indicators and comments on the value. +-- Requirements : Access to the V$ views. +-- Call Syntax : @tuning +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET LINESIZE 1000 +SET FEEDBACK OFF + +SELECT * +FROM v$database; +PROMPT + +DECLARE + v_value NUMBER; + + FUNCTION Format(p_value IN NUMBER) + RETURN VARCHAR2 IS + BEGIN + RETURN LPad(To_Char(Round(p_value,2),'990.00') || '%',8,' ') || ' '; + END; + +BEGIN + + -- -------------------------- + -- Dictionary Cache Hit Ratio + -- -------------------------- + SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 + INTO v_value + FROM v$rowcache; + + DBMS_Output.Put('Dictionary Cache Hit Ratio : ' || Format(v_value)); + IF v_value < 90 THEN + DBMS_Output.Put_Line('Increase SHARED_POOL_SIZE parameter to bring value above 90%'); + ELSE + DBMS_Output.Put_Line('Value Acceptable.'); + END IF; + + -- ----------------------- + -- Library Cache Hit Ratio + -- ----------------------- + SELECT (1 -(Sum(reloads)/(Sum(pins) + Sum(reloads)))) * 100 + INTO v_value + FROM v$librarycache; + + DBMS_Output.Put('Library Cache Hit Ratio : ' || Format(v_value)); + IF v_value < 99 THEN + DBMS_Output.Put_Line('Increase SHARED_POOL_SIZE parameter to bring value above 99%'); + ELSE + DBMS_Output.Put_Line('Value Acceptable.'); + END IF; + + -- ------------------------------- + -- DB Block Buffer Cache Hit Ratio + -- ------------------------------- + SELECT (1 - (phys.value / (db.value + cons.value))) * 100 + INTO v_value + FROM v$sysstat phys, + v$sysstat db, + v$sysstat cons + WHERE phys.name = 'physical reads' + AND db.name = 'db block gets' + AND cons.name = 'consistent gets'; + + DBMS_Output.Put('DB Block Buffer Cache Hit Ratio : ' || Format(v_value)); + IF v_value < 89 THEN + DBMS_Output.Put_Line('Increase DB_BLOCK_BUFFERS parameter to bring value above 89%'); + ELSE + DBMS_Output.Put_Line('Value Acceptable.'); + END IF; + + -- --------------- + -- Latch Hit Ratio + -- --------------- + SELECT (1 - (Sum(misses) / Sum(gets))) * 100 + INTO v_value + FROM v$latch; + + DBMS_Output.Put('Latch Hit Ratio : ' || Format(v_value)); + IF v_value < 98 THEN + DBMS_Output.Put_Line('Increase number of latches to bring the value above 98%'); + ELSE + DBMS_Output.Put_Line('Value acceptable.'); + END IF; + + -- ----------------------- + -- Disk Sort Ratio + -- ----------------------- + SELECT (disk.value/mem.value) * 100 + INTO v_value + FROM v$sysstat disk, + v$sysstat mem + WHERE disk.name = 'sorts (disk)' + AND mem.name = 'sorts (memory)'; + + DBMS_Output.Put('Disk Sort Ratio : ' || Format(v_value)); + IF v_value > 5 THEN + DBMS_Output.Put_Line('Increase SORT_AREA_SIZE parameter to bring value below 5%'); + ELSE + DBMS_Output.Put_Line('Value Acceptable.'); + END IF; + + -- ---------------------- + -- Rollback Segment Waits + -- ---------------------- + SELECT (Sum(waits) / Sum(gets)) * 100 + INTO v_value + FROM v$rollstat; + + DBMS_Output.Put('Rollback Segment Waits : ' || Format(v_value)); + IF v_value > 5 THEN + DBMS_Output.Put_Line('Increase number of Rollback Segments to bring the value below 5%'); + ELSE + DBMS_Output.Put_Line('Value acceptable.'); + END IF; + + -- ------------------- + -- Dispatcher Workload + -- ------------------- + SELECT NVL((Sum(busy) / (Sum(busy) + Sum(idle))) * 100,0) + INTO v_value + FROM v$dispatcher; + + DBMS_Output.Put('Dispatcher Workload : ' || Format(v_value)); + IF v_value > 50 THEN + DBMS_Output.Put_Line('Increase MTS_DISPATCHERS to bring the value below 50%'); + ELSE + DBMS_Output.Put_Line('Value acceptable.'); + END IF; + +END; +/ + +PROMPT +SET FEEDBACK ON diff --git a/timhall/monitoring/undo_segments.sql b/timhall/monitoring/undo_segments.sql new file mode 100644 index 0000000..de7a1c0 --- /dev/null +++ b/timhall/monitoring/undo_segments.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/undo_segments.sql +-- Author : Tim Hall +-- Description : Displays information about undo segments. +-- Requirements : Access to the DBA views. +-- Call Syntax : @undo_segments {name | all} +-- Last Modified: 20-APR-2021 +-- ----------------------------------------------------------------------------------- + +set verify off linesize 100 +column owner format a30 +column segment_name format a30 +column segment_type format a20 + +select owner, + segment_name, + segment_type +from dba_segments +where segment_type in ('TYPE2 UNDO','ROLLBACK') +and lower(segment_name) like '%' || decode(lower('&1'), 'all', '', lower('&1')) || '%' +order by 1, 2; \ No newline at end of file diff --git a/timhall/monitoring/unusable_indexes.sql b/timhall/monitoring/unusable_indexes.sql new file mode 100644 index 0000000..14a58d1 --- /dev/null +++ b/timhall/monitoring/unusable_indexes.sql @@ -0,0 +1,26 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/unusable_indexes.sql +-- Author : Tim Hall +-- Description : Displays unusable indexes for the specified schema or all schemas. +-- Requirements : Access to the DBA views. +-- Call Syntax : @unusable_indexes (schema-name or all) +-- Last Modified: 28/01/2018 +-- ----------------------------------------------------------------------------------- +SET VERIFY OFF LINESIZE 200 + +COLUMN owner FORMAT A30 +COLUMN index_name FORMAT A30 +COLUMN table_owner FORMAT A30 +COLUMN table_name FORMAT A30 + +SELECT owner, + index_name, + index_type, + table_owner, + table_name + table_type +FROM dba_indexes +WHERE owner = DECODE(UPPER('&1'), 'ALL', owner, UPPER('&1')) +AND status NOT IN ('VALID', 'N/A') +ORDER BY owner, index_name; + diff --git a/timhall/monitoring/unused_space.sql b/timhall/monitoring/unused_space.sql new file mode 100644 index 0000000..a0b3a5c --- /dev/null +++ b/timhall/monitoring/unused_space.sql @@ -0,0 +1,55 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/unused_space.sql +-- Author : Tim Hall +-- Description : Displays unused space for each segment. +-- Requirements : Access to the DBMS_SPACE package. +-- Call Syntax : @unused_space (segment_owner) (segment_name) (segment_type) (partition_name OR NA) +-- Last Modified: 16/05/2001 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET VERIFY OFF +DECLARE + v_partition_name VARCHAR2(30) := UPPER('&4'); + v_total_blocks NUMBER; + v_total_bytes NUMBER; + v_unused_blocks NUMBER; + v_unused_bytes NUMBER; + v_last_used_extent_file_id NUMBER; + v_last_used_extent_block_id NUMBER; + v_last_used_block NUMBER; +BEGIN + IF v_partition_name != 'NA' THEN + DBMS_SPACE.UNUSED_SPACE (segment_owner => UPPER('&1'), + segment_name => UPPER('&2'), + segment_type => UPPER('&3'), + total_blocks => v_total_blocks, + total_bytes => v_total_bytes, + unused_blocks => v_unused_blocks, + unused_bytes => v_unused_bytes, + last_used_extent_file_id => v_last_used_extent_file_id, + last_used_extent_block_id => v_last_used_extent_block_id, + last_used_block => v_last_used_block, + partition_name => v_partition_name); + ELSE + DBMS_SPACE.UNUSED_SPACE (segment_owner => UPPER('&1'), + segment_name => UPPER('&2'), + segment_type => UPPER('&3'), + total_blocks => v_total_blocks, + total_bytes => v_total_bytes, + unused_blocks => v_unused_blocks, + unused_bytes => v_unused_bytes, + last_used_extent_file_id => v_last_used_extent_file_id, + last_used_extent_block_id => v_last_used_extent_block_id, + last_used_block => v_last_used_block); + END IF; + + DBMS_OUTPUT.PUT_LINE('v_total_blocks :' || v_total_blocks); + DBMS_OUTPUT.PUT_LINE('v_total_bytes :' || v_total_bytes); + DBMS_OUTPUT.PUT_LINE('v_unused_blocks :' || v_unused_blocks); + DBMS_OUTPUT.PUT_LINE('v_unused_bytes :' || v_unused_bytes); + DBMS_OUTPUT.PUT_LINE('v_last_used_extent_file_id :' || v_last_used_extent_file_id); + DBMS_OUTPUT.PUT_LINE('v_last_used_extent_block_id :' || v_last_used_extent_block_id); + DBMS_OUTPUT.PUT_LINE('v_last_used_block :' || v_last_used_block); +END; +/ + diff --git a/timhall/monitoring/user_hit_ratio.sql b/timhall/monitoring/user_hit_ratio.sql new file mode 100644 index 0000000..561110e --- /dev/null +++ b/timhall/monitoring/user_hit_ratio.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/user_hit_ratio.sql +-- Author : Tim Hall +-- Description : Displays the Cache Hit Ratio per user. +-- Requirements : Access to the V$ views. +-- Call Syntax : @user_hit_ratio +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +COLUMN "Hit Ratio %" FORMAT 999.99 + +SELECT a.username "Username", + b.consistent_gets "Consistent Gets", + b.block_gets "DB Block Gets", + b.physical_reads "Physical Reads", + Round(100* (b.consistent_gets + b.block_gets - b.physical_reads) / + (b.consistent_gets + b.block_gets),2) "Hit Ratio %" +FROM v$session a, + v$sess_io b +WHERE a.sid = b.sid +AND (b.consistent_gets + b.block_gets) > 0 +AND a.username IS NOT NULL; diff --git a/timhall/monitoring/user_objects.sql b/timhall/monitoring/user_objects.sql new file mode 100644 index 0000000..b41ace5 --- /dev/null +++ b/timhall/monitoring/user_objects.sql @@ -0,0 +1,14 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/monitoring/user_objects.sql +-- Author : Tim Hall +-- Description : Displays the objects owned by the current user. +-- Requirements : +-- Call Syntax : @user_objects +-- Last Modified: 23-OCT-2019 +-- ----------------------------------------------------------------------------------- + +COLUMN object_name FORMAT A30 + +SELECT object_name, object_type +FROM user_objects +ORDER BY 1, 2; diff --git a/timhall/monitoring/user_roles.sql b/timhall/monitoring/user_roles.sql new file mode 100644 index 0000000..e064898 --- /dev/null +++ b/timhall/monitoring/user_roles.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/user_roles.sql +-- Author : Tim Hall +-- Description : Displays a list of all roles and privileges granted to the specified user. +-- Requirements : Access to the USER views. +-- Call Syntax : @user_roles +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET VERIFY OFF + +SELECT a.granted_role, + a.admin_option +FROM user_role_privs a +ORDER BY a.granted_role; + +SELECT a.privilege, + a.admin_option +FROM user_sys_privs a +ORDER BY a.privilege; + +SET VERIFY ON diff --git a/timhall/monitoring/user_sessions.sql b/timhall/monitoring/user_sessions.sql new file mode 100644 index 0000000..6cdbc86 --- /dev/null +++ b/timhall/monitoring/user_sessions.sql @@ -0,0 +1,42 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/user_sessions.sql +-- Author : Tim Hall +-- Description : Displays information on all user database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @user_sessions +-- Last Modified: 16-MAY-2019 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 + +COLUMN username FORMAT A30 +COLUMN osuser FORMAT A20 +COLUMN spid FORMAT A10 +COLUMN service_name FORMAT A15 +COLUMN module FORMAT A45 +COLUMN machine FORMAT A30 +COLUMN logon_time FORMAT A20 + +SELECT s.username, + s.osuser, + s.sid, + s.serial#, + p.spid, + s.lockwait, + s.status, + s.service_name, + s.machine, + s.program, + TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time, + s.last_call_et AS last_call_et_secs, + s.module, + s.action, + s.client_info, + s.client_identifier +FROM v$session s, + v$process p +WHERE s.paddr = p.addr +AND s.username IS NOT NULL +ORDER BY s.username, s.osuser; + +SET PAGESIZE 14 diff --git a/timhall/monitoring/user_system_privs.sql b/timhall/monitoring/user_system_privs.sql new file mode 100644 index 0000000..40c631c --- /dev/null +++ b/timhall/monitoring/user_system_privs.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/user_system_privs.sql +-- Author : Tim Hall +-- Description : Displays system privileges granted to a specified user. +-- Requirements : Access to the DBA views. +-- Call Syntax : @user_system_privs (user-name) +-- Last Modified: 27/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 VERIFY OFF + +SELECT grantee, + privilege, + admin_option +FROM dba_sys_privs +WHERE grantee = UPPER('&1') +ORDER BY grantee, privilege; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/user_temp_space.sql b/timhall/monitoring/user_temp_space.sql new file mode 100644 index 0000000..25e8f77 --- /dev/null +++ b/timhall/monitoring/user_temp_space.sql @@ -0,0 +1,27 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : http://www.oracle-base.com/dba/monitoring/user_temp_space.sql +-- Author : DR Timothy S Hall +-- Description : Displays the temp space currently in use by users. +-- Requirements : Access to the V$ views. +-- Call Syntax : @user_temp_space +-- Last Modified: 12/02/2004 +-- ----------------------------------------------------------------------------------- + +COLUMN tablespace FORMAT A20 +COLUMN temp_size FORMAT A20 +COLUMN sid_serial FORMAT A20 +COLUMN username FORMAT A20 +COLUMN program FORMAT A40 +SET LINESIZE 200 + +SELECT b.tablespace, + ROUND(((b.blocks*p.value)/1024/1024),2)||'M' AS temp_size, + a.sid||','||a.serial# AS sid_serial, + NVL(a.username, '(oracle)') AS username, + a.program +FROM v$session a, + v$sort_usage b, + v$parameter p +WHERE p.name = 'db_block_size' +AND a.saddr = b.session_addr +ORDER BY b.tablespace, b.blocks; diff --git a/timhall/monitoring/user_undo_space.sql b/timhall/monitoring/user_undo_space.sql new file mode 100644 index 0000000..3a45d33 --- /dev/null +++ b/timhall/monitoring/user_undo_space.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/user_undo_space.sql +-- Author : Tim Hall +-- Description : Displays the undo space currently in use by users. +-- Requirements : Access to the V$ views. +-- Call Syntax : @user_undo_space +-- Last Modified: 12/02/2004 +-- ----------------------------------------------------------------------------------- + +COLUMN sid_serial FORMAT A20 +COLUMN username FORMAT A20 +COLUMN program FORMAT A30 +COLUMN undoseg FORMAT A25 +COLUMN undo FORMAT A20 +SET LINESIZE 120 + +SELECT TO_CHAR(s.sid)||','||TO_CHAR(s.serial#) AS sid_serial, + NVL(s.username, '(oracle)') AS username, + s.program, + r.name undoseg, + t.used_ublk * TO_NUMBER(x.value)/1024||'K' AS undo +FROM v$rollname r, + v$session s, + v$transaction t, + v$parameter x +WHERE s.taddr = t.addr +AND r.usn = t.xidusn(+) +AND x.name = 'db_block_size'; \ No newline at end of file diff --git a/timhall/monitoring/users.sql b/timhall/monitoring/users.sql new file mode 100644 index 0000000..841bbff --- /dev/null +++ b/timhall/monitoring/users.sql @@ -0,0 +1,32 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/users.sql +-- Author : Tim Hall +-- Description : Displays information about all database users. +-- Requirements : Access to the dba_users view. +-- Call Syntax : @users [ username | % (for all)] +-- Last Modified: 21-FEB-2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 VERIFY OFF + +COLUMN username FORMAT A20 +COLUMN account_status FORMAT A16 +COLUMN default_tablespace FORMAT A15 +COLUMN temporary_tablespace FORMAT A15 +COLUMN profile FORMAT A15 + +SELECT username, + account_status, + TO_CHAR(lock_date, 'DD-MON-YYYY') AS lock_date, + TO_CHAR(expiry_date, 'DD-MON-YYYY') AS expiry_date, + default_tablespace, + temporary_tablespace, + TO_CHAR(created, 'DD-MON-YYYY') AS created, + profile, + initial_rsrc_consumer_group, + editions_enabled, + authentication_type +FROM dba_users +WHERE username LIKE UPPER('%&1%') +ORDER BY username; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/users_with_role.sql b/timhall/monitoring/users_with_role.sql new file mode 100644 index 0000000..21b35df --- /dev/null +++ b/timhall/monitoring/users_with_role.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/users_with_role.sql +-- Author : Tim Hall +-- Description : Displays a list of users granted the specified role. +-- Requirements : Access to the DBA views. +-- Call Syntax : @user_with_role DBA +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF +COLUMN username FORMAT A30 + +SELECT username, + lock_date, + expiry_date +FROM dba_users +WHERE username IN (SELECT grantee + FROM dba_role_privs + WHERE granted_role = UPPER('&1')) +ORDER BY username; + +SET VERIFY ON \ No newline at end of file diff --git a/timhall/monitoring/users_with_sys_priv.sql b/timhall/monitoring/users_with_sys_priv.sql new file mode 100644 index 0000000..119bc7d --- /dev/null +++ b/timhall/monitoring/users_with_sys_priv.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/users_with_sys_priv.sql +-- Author : Tim Hall +-- Description : Displays a list of users granted the specified role. +-- Requirements : Access to the DBA views. +-- Call Syntax : @users_with_sys_priv "UNLIMITED TABLESPACE" +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- + +SET VERIFY OFF +COLUMN username FORMAT A30 + +SELECT username, + lock_date, + expiry_date +FROM dba_users +WHERE username IN (SELECT grantee + FROM dba_sys_privs + WHERE privilege = UPPER('&1')) +ORDER BY username; diff --git a/timhall/rac/locked_objects_rac.sql b/timhall/rac/locked_objects_rac.sql new file mode 100644 index 0000000..2b1e869 --- /dev/null +++ b/timhall/rac/locked_objects_rac.sql @@ -0,0 +1,40 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/locked_objects.sql +-- Author : Tim Hall +-- Description : Lists all locked objects for whole RAC. +-- Requirements : Access to the V$ views. +-- Call Syntax : @locked_objects +-- Last Modified: 15/07/2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 +SET VERIFY OFF + +COLUMN owner FORMAT A20 +COLUMN username FORMAT A20 +COLUMN object_owner FORMAT A20 +COLUMN object_name FORMAT A30 +COLUMN locked_mode FORMAT A15 + +SELECT b.inst_id, + b.session_id AS sid, + NVL(b.oracle_username, '(oracle)') AS username, + a.owner AS object_owner, + a.object_name, + Decode(b.locked_mode, 0, 'None', + 1, 'Null (NULL)', + 2, 'Row-S (SS)', + 3, 'Row-X (SX)', + 4, 'Share (S)', + 5, 'S/Row-X (SSX)', + 6, 'Exclusive (X)', + b.locked_mode) locked_mode, + b.os_user_name +FROM dba_objects a, + gv$locked_object b +WHERE a.object_id = b.object_id +ORDER BY 1, 2, 3, 4; + +SET PAGESIZE 14 +SET VERIFY ON + diff --git a/timhall/rac/longops_rac.sql b/timhall/rac/longops_rac.sql new file mode 100644 index 0000000..50e93ab --- /dev/null +++ b/timhall/rac/longops_rac.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/longops_rac.sql +-- Author : Tim Hall +-- Description : Displays information on all long operations for whole RAC. +-- Requirements : Access to the V$ views. +-- Call Syntax : @longops_rac +-- Last Modified: 03/07/2003 +-- ----------------------------------------------------------------------------------- + +SET LINESIZE 200 +COLUMN sid FORMAT 9999 +COLUMN serial# FORMAT 9999999 +COLUMN machine FORMAT A30 +COLUMN progress_pct FORMAT 99999999.00 +COLUMN elapsed FORMAT A10 +COLUMN remaining FORMAT A10 + +SELECT s.inst_id, + s.sid, + s.serial#, + s.username, + s.module, + ROUND(sl.elapsed_seconds/60) || ':' || MOD(sl.elapsed_seconds,60) elapsed, + ROUND(sl.time_remaining/60) || ':' || MOD(sl.time_remaining,60) remaining, + ROUND(sl.sofar/sl.totalwork*100, 2) progress_pct +FROM gv$session s, + gv$session_longops sl +WHERE s.sid = sl.sid +AND s.inst_id = sl.inst_id +AND s.serial# = sl.serial#; diff --git a/timhall/rac/monitor_memory_rac.sql b/timhall/rac/monitor_memory_rac.sql new file mode 100644 index 0000000..204da54 --- /dev/null +++ b/timhall/rac/monitor_memory_rac.sql @@ -0,0 +1,28 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/monitor_memory_rac.sql +-- Author : Tim Hall +-- Description : Displays memory allocations for the current database sessions for the whole RAC. +-- Requirements : Access to the V$ views. +-- Call Syntax : @monitor_memory_rac +-- Last Modified: 15-JUL-2000 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN username FORMAT A20 +COLUMN module FORMAT A20 + +SELECT a.inst_id, + NVL(a.username,'(oracle)') AS username, + a.module, + a.program, + Trunc(b.value/1024) AS memory_kb +FROM gv$session a, + gv$sesstat b, + gv$statname c +WHERE a.sid = b.sid +AND a.inst_id = b.inst_id +AND b.statistic# = c.statistic# +AND b.inst_id = c.inst_id +AND c.name = 'session pga memory' +AND a.program IS NOT NULL +ORDER BY b.value DESC; \ No newline at end of file diff --git a/timhall/rac/session_undo_rac.sql b/timhall/rac/session_undo_rac.sql new file mode 100644 index 0000000..69bbe83 --- /dev/null +++ b/timhall/rac/session_undo_rac.sql @@ -0,0 +1,31 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/session_undo_rac.sql +-- Author : Tim Hall +-- Description : Displays undo information on relevant database sessions. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_undo_rac +-- Last Modified: 20/12/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 + +COLUMN username FORMAT A15 + +SELECT s.inst_id, + s.username, + s.sid, + s.serial#, + t.used_ublk, + t.used_urec, + rs.segment_name, + r.rssize, + r.status +FROM gv$transaction t, + gv$session s, + gv$rollstat r, + dba_rollback_segs rs +WHERE s.saddr = t.ses_addr +AND s.inst_id = t.inst_id +AND t.xidusn = r.usn +AND t.inst_id = r.inst_id +AND rs.segment_id = t.xidusn +ORDER BY t.used_ublk DESC; diff --git a/timhall/rac/session_waits_rac.sql b/timhall/rac/session_waits_rac.sql new file mode 100644 index 0000000..84d26ef --- /dev/null +++ b/timhall/rac/session_waits_rac.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/10g/session_waits_rac.sql +-- Author : Tim Hall +-- Description : Displays information on all database session waits for the whole RAC. +-- Requirements : Access to the V$ views. +-- Call Syntax : @session_waits_rac +-- Last Modified: 02/07/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET PAGESIZE 1000 + +COLUMN username FORMAT A20 +COLUMN event FORMAT A30 +COLUMN wait_class FORMAT A15 + +SELECT s.inst_id, + NVL(s.username, '(oracle)') AS username, + s.sid, + s.serial#, + sw.event, + sw.wait_class, + sw.wait_time, + sw.seconds_in_wait, + sw.state +FROM gv$session_wait sw, + gv$session s +WHERE s.sid = sw.sid +AND s.inst_id = sw.inst_id +ORDER BY sw.seconds_in_wait DESC; diff --git a/timhall/rac/sessions_rac.sql b/timhall/rac/sessions_rac.sql new file mode 100644 index 0000000..d32b458 --- /dev/null +++ b/timhall/rac/sessions_rac.sql @@ -0,0 +1,34 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/monitoring/sessions_rac.sql +-- Author : Tim Hall +-- Description : Displays information on all database sessions for whole RAC. +-- Requirements : Access to the V$ views. +-- Call Syntax : @sessions_rac +-- Last Modified: 21/02/2005 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 500 +SET PAGESIZE 1000 + +COLUMN username FORMAT A15 +COLUMN machine FORMAT A25 +COLUMN logon_time FORMAT A20 + +SELECT NVL(s.username, '(oracle)') AS username, + s.inst_id, + s.osuser, + s.sid, + s.serial#, + p.spid, + s.lockwait, + s.status, + s.module, + s.machine, + s.program, + TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time +FROM gv$session s, + gv$process p +WHERE s.paddr = p.addr +AND s.inst_id = p.inst_id +ORDER BY s.username, s.osuser; + +SET PAGESIZE 14 diff --git a/timhall/resource_manager/active_plan.sql b/timhall/resource_manager/active_plan.sql new file mode 100644 index 0000000..b4fa3d4 --- /dev/null +++ b/timhall/resource_manager/active_plan.sql @@ -0,0 +1,12 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/resource_manager/active_plan.sql +-- Author : Tim Hall +-- Description : Lists the currently active resource plan if one is set. +-- Call Syntax : @active_plan +-- Requirements : Access to the v$ views. +-- Last Modified: 12/11/2004 +-- ----------------------------------------------------------------------------------- +SELECT name, + is_top_plan +FROM v$rsrc_plan +ORDER BY name; diff --git a/timhall/resource_manager/consumer_group_usage.sql b/timhall/resource_manager/consumer_group_usage.sql new file mode 100644 index 0000000..05d87cd --- /dev/null +++ b/timhall/resource_manager/consumer_group_usage.sql @@ -0,0 +1,12 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/resource_manager/consumer_group_usage.sql +-- Author : Tim Hall +-- Description : Lists usage information of consumer groups. +-- Call Syntax : @consumer_group_usage +-- Requirements : Access to the v$ views. +-- Last Modified: 12/11/2004 +-- ----------------------------------------------------------------------------------- +SELECT name, + consumed_cpu_time +FROM v$rsrc_consumer_group +ORDER BY name; diff --git a/timhall/resource_manager/consumer_groups.sql b/timhall/resource_manager/consumer_groups.sql new file mode 100644 index 0000000..7635220 --- /dev/null +++ b/timhall/resource_manager/consumer_groups.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/resource_manager/consumer_groups.sql +-- Author : Tim Hall +-- Description : Lists all consumer groups. +-- Call Syntax : @consumer_groups +-- Requirements : Access to the DBA views. +-- Last Modified: 12/11/2004 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET VERIFY OFF + +COLUMN status FORMAT A10 +COLUMN comments FORMAT A50 + +SELECT consumer_group, + status, + comments +FROM dba_rsrc_consumer_groups +ORDER BY consumer_group; \ No newline at end of file diff --git a/timhall/resource_manager/plan_directives.sql b/timhall/resource_manager/plan_directives.sql new file mode 100644 index 0000000..d4f3d11 --- /dev/null +++ b/timhall/resource_manager/plan_directives.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/resource_manager/plan_directives.sql +-- Author : Tim Hall +-- Description : Lists all plan directives. +-- Call Syntax : @plan_directives (plan-name or all) +-- Requirements : Access to the DBA views. +-- Last Modified: 12/11/2004 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET VERIFY OFF + +SELECT plan, + group_or_subplan, + cpu_p1, + cpu_p2, + cpu_p3, + cpu_p4 +FROM dba_rsrc_plan_directives +WHERE plan = DECODE(UPPER('&1'), 'ALL', plan, UPPER('&1')) +ORDER BY plan, cpu_p1 DESC, cpu_p2 DESC, cpu_p3 DESC; diff --git a/timhall/resource_manager/resource_plans.sql b/timhall/resource_manager/resource_plans.sql new file mode 100644 index 0000000..294cce3 --- /dev/null +++ b/timhall/resource_manager/resource_plans.sql @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/resource_manager/resource_plans.sql +-- Author : Tim Hall +-- Description : Lists all resource plans. +-- Call Syntax : @resource_plans +-- Requirements : Access to the DBA views. +-- Last Modified: 12/11/2004 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 200 +SET VERIFY OFF + +COLUMN status FORMAT A10 +COLUMN comments FORMAT A50 + +SELECT plan, + status, + comments +FROM dba_rsrc_plans +ORDER BY plan; \ No newline at end of file diff --git a/timhall/script_creation/backup.sql b/timhall/script_creation/backup.sql new file mode 100644 index 0000000..53e2e3d --- /dev/null +++ b/timhall/script_creation/backup.sql @@ -0,0 +1,86 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/backup.sql +-- Author : Tim Hall +-- Description : Creates a very basic hot-backup script. A useful starting point. +-- Call Syntax : @backup +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET LINESIZE 1000 +SET TRIMOUT ON +SET FEEDBACK OFF +SPOOL Backup.txt + +DECLARE + + CURSOR c_tablespace IS + SELECT a.tablespace_name + FROM dba_tablespaces a + ORDER BY 1; + + CURSOR c_datafiles (in_ts_name IN VARCHAR2) IS + SELECT a.file_name + FROM dba_data_files a + WHERE a.tablespace_name = in_ts_name + ORDER BY 1; + + CURSOR c_archive_redo IS + SELECT a.value + FROM v$parameter a + WHERE a.name = \'log_archive_dest\'; + + v_sid VARCHAR2(100) := \'ORCL\'; + v_backup_com VARCHAR2(100) := \'!ocopy \'; + v_remove_com VARCHAR2(100) := \'!rm\'; + v_dest_loc VARCHAR2(100) := \'/opt/oracleddds/dbs1/oradata/ddds/\'; + +BEGIN + + DBMS_Output.Disable; + DBMS_Output.Enable(1000000); + + DBMS_Output.Put_Line(\'svrmgrl\'); + DBMS_Output.Put_Line(\'connect internal\'); + + DBMS_Output.Put_Line(\' \'); + DBMS_Output.Put_Line(\'-- ----------------------\'); + DBMS_Output.Put_Line(\'-- Backup all tablespaces\'); + DBMS_Output.Put_Line(\'-- ----------------------\'); + FOR cur_ts IN c_tablespace LOOP + DBMS_Output.Put_Line(\' \'); + DBMS_Output.Put_Line(\'ALTER TABLESPACE \' || cur_ts.tablespace_name || \' BEGIN BACKUP;\'); + FOR cur_df IN c_datafiles (in_ts_name => cur_ts.tablespace_name) LOOP + DBMS_Output.Put_Line(v_backup_com || \' \' || cur_df.file_name || \' \' || + v_dest_loc || SUBSTR(cur_df.file_name, INSTR(cur_df.file_name, \'/\', -1)+1)); + END LOOP; + DBMS_Output.Put_Line(\'ALTER TABLESPACE \' || cur_ts.tablespace_name || \' END BACKUP;\'); + END LOOP; + + DBMS_Output.Put_Line(\' \'); + DBMS_Output.Put_Line(\'-- -----------------------------\'); + DBMS_Output.Put_Line(\'-- Backup the archived redo logs\'); + DBMS_Output.Put_Line(\'-- -----------------------------\'); + FOR cur_ar IN c_archive_redo LOOP + DBMS_Output.Put_Line(v_backup_com || \' \' || cur_ar.value || \'/* \' || + v_dest_loc); + END LOOP; + + + DBMS_Output.Put_Line(\' \'); + DBMS_Output.Put_Line(\'-- ----------------------\'); + DBMS_Output.Put_Line(\'-- Backup the controlfile\'); + DBMS_Output.Put_Line(\'-- ----------------------\'); + DBMS_Output.Put_Line(\'ALTER DATABASE BACKUP CONTROLFILE TO \'\'\' || v_dest_loc || v_sid || \'Controlfile.backup\'\';\'); + DBMS_Output.Put_Line(v_backup_com || \' \' || v_dest_loc || v_sid || \'Controlfile.backup\'); + DBMS_Output.Put_Line(v_remove_com || \' \' || v_dest_loc || v_sid || \'Controlfile.backup\'); + + DBMS_Output.Put_Line(\' \'); + DBMS_Output.Put_Line(\'EXIT\'); + +END; +/ + +PROMPT +SPOOL OFF +SET LINESIZE 80 +SET FEEDBACK ON \ No newline at end of file diff --git a/timhall/script_creation/build_api.sql b/timhall/script_creation/build_api.sql new file mode 100644 index 0000000..c9ec9e0 --- /dev/null +++ b/timhall/script_creation/build_api.sql @@ -0,0 +1,302 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/build_api.sql +-- Author : Tim Hall +-- Description : Generates a basic API package for the specific table. +-- Requirements : USER_% and ALL_% views. +-- Call Syntax : @build_api (table-name) (schema) +-- Last Modified: 08/01/2002 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET VERIFY OFF +SET ECHO OFF +SET TERMOUT OFF +SET FEEDBACK OFF + +SPOOL Package.pkh + +DECLARE + + v_table_name VARCHAR2(30) := Upper('&1'); + v_owner VARCHAR2(30) := Upper('&2'); + + CURSOR c_pk_columns IS + SELECT a.position, + a.column_name + FROM all_cons_columns a, + all_constraints b + WHERE a.owner = v_owner + AND a.table_name = v_table_name + AND a.constraint_name = b.constraint_name + AND b.constraint_type = 'P' + AND b.owner = a.owner + AND b.table_name = a.table_name + ORDER BY position; + + CURSOR c_columns IS + SELECT atc.column_name + FROM all_tab_columns atc + WHERE atc.owner = v_owner + AND atc.table_name = v_table_name; + + CURSOR c_non_pk_columns (p_nullable IN VARCHAR2) IS + SELECT atc.column_name + FROM all_tab_columns atc + WHERE atc.owner = v_owner + AND atc.table_name = v_table_name + AND atc.nullable = p_nullable + AND atc.column_name NOT IN (SELECT a.column_name + FROM all_cons_columns a, + all_constraints b + WHERE a. owner = v_owner + AND a.table_name = v_table_name + AND a.constraint_name = b.constraint_name + AND b.constraint_type = 'P' + AND b.owner = a.owner + AND b.table_name = a.table_name); + + PROCEDURE GetParameterList IS + BEGIN + FOR cur_col IN c_pk_columns LOOP + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad(Lower(cur_col.column_name), 30, ' ') || ' IN ' || Lower(v_table_name) || '.' || Lower(cur_col.column_name) || '%TYPE,'); + END LOOP; + FOR cur_col IN c_non_pk_columns('N') LOOP + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad(Lower(cur_col.column_name), 30, ' ') || ' IN ' || Lower(v_table_name) || '.' || Lower(cur_col.column_name) || '%TYPE,'); + END LOOP; + FOR cur_col IN c_non_pk_columns('Y') LOOP + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad(Lower(cur_col.column_name), 30, ' ') || ' IN ' || Lower(v_table_name) || '.' || Lower(cur_col.column_name) || '%TYPE DEFAULT NULL,'); + END LOOP; + DBMS_Output.Put(Chr(9) || 'p_' || RPad('commit', 30, ' ') || ' IN VARCHAR2 DEFAULT ''Y'''); + END; + + PROCEDURE GetPKParameterList IS + BEGIN + FOR cur_col IN c_pk_columns LOOP + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad(Lower(cur_col.column_name), 30, ' ') || ' IN ' || Lower(v_table_name) || '.' || Lower(cur_col.column_name) || '%TYPE,'); + END LOOP; + DBMS_Output.Put(Chr(9) || 'p_' || RPad('commit', 30, ' ') || ' IN VARCHAR2 DEFAULT ''Y'''); + END; + + PROCEDURE GetInsertColumnList IS + BEGIN + FOR cur_col IN c_columns LOOP + IF c_columns%ROWCOUNT != 1 THEN + DBMS_Output.Put_Line(','); + END IF; + DBMS_Output.Put(Chr(9) || Chr(9) || Lower(cur_col.column_name)); + END LOOP; + DBMS_Output.New_Line; + END; + + PROCEDURE GetInsertValueList IS + BEGIN + FOR cur_col IN c_columns LOOP + IF c_columns%ROWCOUNT != 1 THEN + DBMS_Output.Put_Line(','); + END IF; + DBMS_Output.Put(Chr(9) || Chr(9) || 'p_' || Lower(cur_col.column_name)); + END LOOP; + DBMS_Output.New_Line; + END; + + PROCEDURE GetUpdateSetList IS + BEGIN + FOR cur_col IN c_columns LOOP + IF c_columns%ROWCOUNT != 1 THEN + DBMS_Output.Put_Line(','); + DBMS_Output.Put(Chr(9) || Chr(9) || Chr(9) || Chr(9)); + ELSE + DBMS_Output.Put(Chr(9) || 'SET '); + END IF; + DBMS_Output.Put(RPad(Lower(cur_col.column_name), 30, ' ') || ' = p_' || Lower(cur_col.column_name)); + END LOOP; + DBMS_Output.New_Line; + END; + + PROCEDURE GetPKWhere (p_for_update IN VARCHAR2 DEFAULT NULL) IS + BEGIN + FOR cur_col IN c_pk_columns LOOP + IF c_pk_columns%ROWCOUNT = 1 THEN + DBMS_Output.Put(Chr(9) || 'WHERE '); + ELSE + DBMS_Output.New_Line; + DBMS_Output.Put(Chr(9) || 'AND '); + END IF; + DBMS_Output.Put(RPad(Lower(cur_col.column_name), 30, ' ') || ' = p_' || Lower(cur_col.column_name)); + END LOOP; + + IF p_for_update = 'Y' THEN + DBMS_Output.New_Line; + DBMS_Output.Put(Chr(9) || 'FOR UPDATE'); + END IF; + DBMS_Output.Put_Line(';'); + END; + + PROCEDURE GetCommit IS + BEGIN + DBMS_Output.Put_Line(Chr(9) || 'IF p_commit = ''Y'' THEN'); + DBMS_Output.Put_Line(Chr(9) || Chr(9) || 'COMMIT;'); + DBMS_Output.Put_Line(Chr(9) || 'END IF;'); + DBMS_Output.New_Line; + END; + + PROCEDURE GetSeparator IS + BEGIN + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + END; + +BEGIN + + DBMS_Output.Enable(1000000); + + -- --------------------- + -- Package Specification + -- --------------------- + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + DBMS_Output.Put_Line('-- Name : ' || Lower(v_table_name) || '_api.pkh'); + DBMS_Output.Put_Line('-- Created By : Tim Hall'); + DBMS_Output.Put_Line('-- Created Date: ' || To_Char(Sysdate, 'DD-Mon-YYYY')); + DBMS_Output.Put_Line('-- Description : API procedures for the ' || v_table_name || ' table.'); + DBMS_Output.Put_Line('-- Ammendments :'); + DBMS_Output.Put_Line('-- ' || To_Char(Sysdate, 'DD-Mon-YYYY') || ' TSH Initial Creation'); + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + DBMS_Output.Put_Line('CREATE OR REPLACE PACKAGE ' || Lower(v_table_name) || '_api AS'); + DBMS_Output.Put_Line(Chr(9)); + DBMS_Output.Put_Line('TYPE cursor_type IS REF CURSOR;'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('PROCEDURE Sel ('); + GetPKParameterList; + DBMS_Output.New_Line; + DBMS_Output.Put_Line(Chr(9) || RPad('p_recordset', 32, ' ') || ' OUT cursor_type'); + DBMS_Output.Put_Line(');'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('PROCEDURE Ins ('); + GetParameterList; + DBMS_Output.Put_Line(');'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('PROCEDURE Upd ('); + GetParameterList; + DBMS_Output.Put_Line(');'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('PROCEDURE Del ('); + GetPKParameterList; + DBMS_Output.Put_Line(');'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('END ' || Lower(v_table_name) || '_api;'); + DBMS_Output.Put_Line('/'); + + -- ------------ + -- Package Body + -- ------------ + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + DBMS_Output.Put_Line('-- Name : ' || Lower(v_table_name) || '_api.pkg'); + DBMS_Output.Put_Line('-- Created By : Tim Hall'); + DBMS_Output.Put_Line('-- Created Date: ' || To_Char(Sysdate, 'DD-Mon-YYYY')); + DBMS_Output.Put_Line('-- Description : API procedures for the ' || v_table_name || ' table.'); + DBMS_Output.Put_Line('-- Ammendments :'); + DBMS_Output.Put_Line('-- ' || To_Char(Sysdate, 'DD-Mon-YYYY') || ' TSH Initial Creation'); + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + DBMS_Output.Put_Line('CREATE OR REPLACE PACKAGE BODY ' || Lower(v_table_name) || '_api AS'); + DBMS_Output.Put_Line(Chr(9)); + + -- Select + GetSeparator; + DBMS_Output.Put_Line('PROCEDURE Sel ('); + GetPKParameterList; + DBMS_Output.New_Line; + DBMS_Output.Put_Line(Chr(9) || RPad('p_recordset', 32, ' ') || ' OUT cursor_type'); + DBMS_Output.Put_Line(') IS'); + GetSeparator; + + DBMS_Output.Put_Line('BEGIN'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line(Chr(9) || 'OPEN p_recordset FOR'); + DBMS_Output.Put_Line(Chr(9) || 'SELECT'); + GetInsertColumnList; + DBMS_Output.Put_Line(Chr(9) || 'FROM ' || Lower(v_table_name)); + GetPKWhere; + + DBMS_Output.Put_Line(Chr(9)); + DBMS_Output.Put_Line('END Sel;'); + GetSeparator; + DBMS_Output.Put_Line(Chr(9)); + + + -- Insert + GetSeparator; + DBMS_Output.Put_Line('PROCEDURE Ins ('); + GetParameterList; + DBMS_Output.Put_Line(') IS'); + GetSeparator; + + DBMS_Output.Put_Line('BEGIN'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line(Chr(9) || 'INSERT INTO ' || Lower(v_table_name)); + DBMS_Output.Put_Line(Chr(9) || '('); + GetInsertColumnList; + DBMS_Output.Put_Line(Chr(9) || ')'); + DBMS_Output.Put_Line(Chr(9) || 'VALUES'); + DBMS_Output.Put_Line(Chr(9) || '('); + GetInsertValueList; + DBMS_Output.Put_Line(Chr(9) || ');'); + DBMS_Output.Put_Line(Chr(9)); + + GetCommit; + DBMS_Output.Put_Line('END Ins;'); + GetSeparator; + DBMS_Output.Put_Line(Chr(9)); + + -- Update + GetSeparator; + DBMS_Output.Put_Line('PROCEDURE Upd ('); + GetParameterList; + DBMS_Output.Put_Line(') IS'); + GetSeparator; + + DBMS_Output.Put_Line('BEGIN'); + DBMS_Output.Put_Line(Chr(9)); + DBMS_Output.Put_Line(Chr(9) || 'UPDATE ' || Lower(v_table_name)); + GetUpdateSetList; + GetPKWhere; + DBMS_Output.Put_Line(Chr(9)); + + GetCommit; + DBMS_Output.Put_Line('END Upd;'); + GetSeparator; + DBMS_Output.Put_Line(Chr(9)); + + -- Delete + GetSeparator; + DBMS_Output.Put_Line('PROCEDURE Del ('); + GetPKParameterList; + DBMS_Output.Put_Line(') IS'); + GetSeparator; + + DBMS_Output.Put_Line('BEGIN'); + DBMS_Output.Put_Line(Chr(9)); + DBMS_Output.Put_Line(Chr(9) || 'DELETE FROM ' || Lower(v_table_name)); + GetPKWhere; + DBMS_Output.Put_Line(Chr(9)); + + GetCommit; + DBMS_Output.Put_Line('END Del;'); + GetSeparator; + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('END ' || Lower(v_table_name) || '_api;'); + DBMS_Output.Put_Line('/'); + +END; +/ + +SPOOL OFF + +SET ECHO ON +SET TERMOUT ON +SET FEEDBACK ON diff --git a/timhall/script_creation/build_api2.sql b/timhall/script_creation/build_api2.sql new file mode 100644 index 0000000..468d81d --- /dev/null +++ b/timhall/script_creation/build_api2.sql @@ -0,0 +1,301 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/build_api2.sql +-- Author : Tim Hall +-- Description : Generates a basic API package for the specific table. +-- Update of build_api to use ROWTYPEs as parameters. +-- Requirements : USER_% and ALL_% views. +-- Call Syntax : @build_api2 (table-name) (schema) +-- Last Modified: 08/01/2002 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET VERIFY OFF +SET ECHO OFF +SET TERMOUT OFF +SET TRIMSPOOL ON +SET FEEDBACK OFF + +SPOOL Package.pkh + +DECLARE + + v_table_name VARCHAR2(30) := Upper('&&1'); + v_owner VARCHAR2(30) := Upper('&&2'); + + CURSOR c_pk_columns IS + SELECT a.position, + a.column_name + FROM all_cons_columns a, + all_constraints b + WHERE a.owner = v_owner + AND a.table_name = v_table_name + AND a.constraint_name = b.constraint_name + AND b.constraint_type = 'P' + AND b.owner = a.owner + AND b.table_name = a.table_name + ORDER BY position; + + CURSOR c_columns IS + SELECT atc.column_name + FROM all_tab_columns atc + WHERE atc.owner = v_owner + AND atc.table_name = v_table_name; + + CURSOR c_non_pk_columns (p_nullable IN VARCHAR2) IS + SELECT atc.column_name + FROM all_tab_columns atc + WHERE atc.owner = v_owner + AND atc.table_name = v_table_name + AND atc.nullable = p_nullable + AND atc.column_name NOT IN (SELECT a.column_name + FROM all_cons_columns a, + all_constraints b + WHERE a. owner = v_owner + AND a.table_name = v_table_name + AND a.constraint_name = b.constraint_name + AND b.constraint_type = 'P' + AND b.owner = a.owner + AND b.table_name = a.table_name); + + PROCEDURE GetPKParameterList(p_commit IN BOOLEAN DEFAULT TRUE) IS + BEGIN + FOR cur_col IN c_pk_columns LOOP + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad(Lower(cur_col.column_name), 30, ' ') || ' IN ' || Lower(v_table_name) || '.' || Lower(cur_col.column_name) || '%TYPE,'); + END LOOP; + IF p_commit THEN + DBMS_Output.Put(Chr(9) || 'p_' || RPad('commit', 30, ' ') || ' IN VARCHAR2 DEFAULT ''Y'''); + END IF; + END; + + PROCEDURE GetInsertColumnList IS + BEGIN + FOR cur_col IN c_columns LOOP + IF c_columns%ROWCOUNT != 1 THEN + DBMS_Output.Put_Line(','); + END IF; + DBMS_Output.Put(Chr(9) || Chr(9) || Lower(cur_col.column_name)); + END LOOP; + DBMS_Output.New_Line; + END; + + PROCEDURE GetInsertValueList IS + BEGIN + FOR cur_col IN c_columns LOOP + IF c_columns%ROWCOUNT != 1 THEN + DBMS_Output.Put_Line(','); + END IF; + DBMS_Output.Put(Chr(9) || Chr(9) || 'p_' || Lower(v_table_name) || '.' || Lower(cur_col.column_name)); + END LOOP; + DBMS_Output.New_Line; + END; + + PROCEDURE GetUpdateSetList IS + BEGIN + FOR cur_col IN c_columns LOOP + IF c_columns%ROWCOUNT != 1 THEN + DBMS_Output.Put_Line(','); + DBMS_Output.Put(Chr(9) || Chr(9) || Chr(9) || Chr(9)); + ELSE + DBMS_Output.Put(Chr(9) || 'SET '); + END IF; + DBMS_Output.Put(RPad(Lower(cur_col.column_name), 30, ' ') || ' = p_' || Lower(v_table_name) || '.' || Lower(cur_col.column_name)); + END LOOP; + DBMS_Output.New_Line; + END; + + PROCEDURE GetPKWhere (p_record IN VARCHAR2 DEFAULT NULL, + p_for_update IN VARCHAR2 DEFAULT NULL) IS + BEGIN + FOR cur_col IN c_pk_columns LOOP + IF c_pk_columns%ROWCOUNT = 1 THEN + DBMS_Output.Put(Chr(9) || 'WHERE '); + ELSE + DBMS_Output.New_Line; + DBMS_Output.Put(Chr(9) || 'AND '); + END IF; + IF p_record = 'Y' THEN + DBMS_Output.Put(RPad(Lower(cur_col.column_name), 30, ' ') || ' = p_' || Lower(v_table_name) || '.' || Lower(cur_col.column_name)); + ELSE + DBMS_Output.Put(RPad(Lower(cur_col.column_name), 30, ' ') || ' = p_' || Lower(cur_col.column_name)); + END IF; + END LOOP; + + IF p_for_update = 'Y' THEN + DBMS_Output.New_Line; + DBMS_Output.Put(Chr(9) || 'FOR UPDATE'); + END IF; + DBMS_Output.Put_Line(';'); + END; + + PROCEDURE GetCommit IS + BEGIN + DBMS_Output.Put_Line(Chr(9) || 'IF p_commit = ''Y'' THEN'); + DBMS_Output.Put_Line(Chr(9) || Chr(9) || 'COMMIT;'); + DBMS_Output.Put_Line(Chr(9) || 'END IF;'); + DBMS_Output.New_Line; + END; + + PROCEDURE GetSeparator IS + BEGIN + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + END; + +BEGIN + + DBMS_Output.Enable(1000000); + + -- --------------------- + -- Package Specification + -- --------------------- + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + DBMS_Output.Put_Line('-- Name : ' || Lower(v_table_name) || '_api.pkh'); + DBMS_Output.Put_Line('-- Created By : Tim Hall'); + DBMS_Output.Put_Line('-- Created Date: ' || To_Char(Sysdate, 'DD-Mon-YYYY')); + DBMS_Output.Put_Line('-- Description : API procedures for the ' || v_table_name || ' table.'); + DBMS_Output.Put_Line('-- Ammendments :'); + DBMS_Output.Put_Line('-- ' || To_Char(Sysdate, 'DD-Mon-YYYY') || ' TSH Initial Creation'); + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + DBMS_Output.Put_Line('CREATE OR REPLACE PACKAGE ' || Lower(v_table_name) || '_api AS'); + DBMS_Output.Put_Line(Chr(9)); + DBMS_Output.Put_Line('TYPE cursor_type IS REF CURSOR;'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('PROCEDURE Sel ('); + GetPKParameterList(FALSE); + DBMS_Output.New_Line; + DBMS_Output.Put_Line(Chr(9) || RPad('p_recordset', 32, ' ') || ' OUT cursor_type'); + DBMS_Output.Put_Line(');'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('PROCEDURE Ins ('); + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad(Lower(v_table_name), 30, ' ') || ' IN ' || Lower(v_table_name) || '%ROWTYPE,'); + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad('commit', 30, ' ') || ' IN VARCHAR2 DEFAULT ''Y'''); + DBMS_Output.Put_Line(');'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('PROCEDURE Upd ('); + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad(Lower(v_table_name), 30, ' ') || ' IN ' || Lower(v_table_name) || '%ROWTYPE,'); + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad('commit', 30, ' ') || ' IN VARCHAR2 DEFAULT ''Y'''); + DBMS_Output.Put_Line(');'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('PROCEDURE Del ('); + GetPKParameterList; + DBMS_Output.Put_Line(');'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('END ' || Lower(v_table_name) || '_api;'); + DBMS_Output.Put_Line('/'); + + -- ------------ + -- Package Body + -- ------------ + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + DBMS_Output.Put_Line('-- Name : ' || Lower(v_table_name) || '_api.pkg'); + DBMS_Output.Put_Line('-- Created By : Tim Hall'); + DBMS_Output.Put_Line('-- Created Date: ' || To_Char(Sysdate, 'DD-Mon-YYYY')); + DBMS_Output.Put_Line('-- Description : API procedures for the ' || v_table_name || ' table.'); + DBMS_Output.Put_Line('-- Ammendments :'); + DBMS_Output.Put_Line('-- ' || To_Char(Sysdate, 'DD-Mon-YYYY') || ' TSH Initial Creation'); + DBMS_Output.Put_Line('-- -----------------------------------------------------------------------'); + DBMS_Output.Put_Line('CREATE OR REPLACE PACKAGE BODY ' || Lower(v_table_name) || '_api AS'); + DBMS_Output.Put_Line(Chr(9)); + + -- Select + GetSeparator; + DBMS_Output.Put_Line('PROCEDURE Sel ('); + GetPKParameterList(FALSE); + DBMS_Output.New_Line; + DBMS_Output.Put_Line(Chr(9) || RPad('p_recordset', 32, ' ') || ' OUT cursor_type'); + DBMS_Output.Put_Line(') IS'); + GetSeparator; + + DBMS_Output.Put_Line('BEGIN'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line(Chr(9) || 'OPEN p_recordset FOR'); + DBMS_Output.Put_Line(Chr(9) || 'SELECT'); + GetInsertColumnList; + DBMS_Output.Put_Line(Chr(9) || 'FROM ' || Lower(v_table_name)); + GetPKWhere; + + DBMS_Output.Put_Line(Chr(9)); + DBMS_Output.Put_Line('END Sel;'); + GetSeparator; + DBMS_Output.Put_Line(Chr(9)); + + + -- Insert + GetSeparator; + DBMS_Output.Put_Line('PROCEDURE Ins ('); + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad(Lower(v_table_name), 30, ' ') || ' IN ' || Lower(v_table_name) || '%ROWTYPE,'); + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad('commit', 30, ' ') || ' IN VARCHAR2 DEFAULT ''Y'''); + DBMS_Output.Put_Line(') IS'); + GetSeparator; + + DBMS_Output.Put_Line('BEGIN'); + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line(Chr(9) || 'INSERT INTO ' || Lower(v_table_name)); + DBMS_Output.Put_Line(Chr(9) || '('); + GetInsertColumnList; + DBMS_Output.Put_Line(Chr(9) || ')'); + DBMS_Output.Put_Line(Chr(9) || 'VALUES'); + DBMS_Output.Put_Line(Chr(9) || '('); + GetInsertValueList; + DBMS_Output.Put_Line(Chr(9) || ');'); + DBMS_Output.Put_Line(Chr(9)); + + GetCommit; + DBMS_Output.Put_Line('END Ins;'); + GetSeparator; + DBMS_Output.Put_Line(Chr(9)); + + -- Update + GetSeparator; + DBMS_Output.Put_Line('PROCEDURE Upd ('); + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad(Lower(v_table_name), 30, ' ') || ' IN ' || Lower(v_table_name) || '%ROWTYPE,'); + DBMS_Output.Put_Line(Chr(9) || 'p_' || RPad('commit', 30, ' ') || ' IN VARCHAR2 DEFAULT ''Y'''); + DBMS_Output.Put_Line(') IS'); + GetSeparator; + + DBMS_Output.Put_Line('BEGIN'); + DBMS_Output.Put_Line(Chr(9)); + DBMS_Output.Put_Line(Chr(9) || 'UPDATE ' || Lower(v_table_name)); + GetUpdateSetList; + GetPKWhere('Y'); + DBMS_Output.Put_Line(Chr(9)); + + GetCommit; + DBMS_Output.Put_Line('END Upd;'); + GetSeparator; + DBMS_Output.Put_Line(Chr(9)); + + -- Delete + GetSeparator; + DBMS_Output.Put_Line('PROCEDURE Del ('); + GetPKParameterList; + DBMS_Output.Put_Line(') IS'); + GetSeparator; + + DBMS_Output.Put_Line('BEGIN'); + DBMS_Output.Put_Line(Chr(9)); + DBMS_Output.Put_Line(Chr(9) || 'DELETE FROM ' || Lower(v_table_name)); + GetPKWhere; + DBMS_Output.Put_Line(Chr(9)); + + GetCommit; + DBMS_Output.Put_Line('END Del;'); + GetSeparator; + DBMS_Output.Put_Line(Chr(9)); + + DBMS_Output.Put_Line('END ' || Lower(v_table_name) || '_api;'); + DBMS_Output.Put_Line('/'); + +END; +/ + +SPOOL OFF + +SET ECHO ON +SET TERMOUT ON +SET FEEDBACK ON diff --git a/timhall/script_creation/create_data.sql b/timhall/script_creation/create_data.sql new file mode 100644 index 0000000..8ef5f17 --- /dev/null +++ b/timhall/script_creation/create_data.sql @@ -0,0 +1,90 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/create_data.sql +-- Author : Tim Hall +-- Description : Creates the DDL to repopulate the specified table. +-- Call Syntax : @create_data (table-name) (schema) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET LINESIZE 1000 +SET SERVEROUTPUT ON +SET FEEDBACK OFF +SET PAGESIZE 0 +SET VERIFY OFF +SET TRIMSPOOL ON +SET TRIMOUT ON + +ALTER SESSION SET nls_date_format = 'DD-MON-YYYY HH24:MI:SS'; + +SPOOL temp.sql + +DECLARE + + CURSOR c_columns (p_table_name IN VARCHAR2, + p_owner IN VARCHAR2) IS + SELECT Lower(a.column_name) column_name, + a.data_type + FROM all_tab_columns a + WHERE a.table_name = p_table_name + AND a.owner = p_owner + AND a.data_type IN ('CHAR','VARCHAR2','DATE','NUMBER','INTEGER'); + + v_table_name VARCHAR2(30) := Upper('&&1'); + v_owner VARCHAR2(30) := Upper('&&2'); + + + FUNCTION Format_Col(p_column IN VARCHAR2, + p_datatype IN VARCHAR2) + RETURN VARCHAR2 IS + BEGIN + IF p_datatype IN ('CHAR','VARCHAR2','DATE') THEN + RETURN ''' || Decode(' || p_column || ',NULL,''NULL'','''''''' || ' || p_column || ' || '''''''') || '''; + ELSE + RETURN ''' || Decode(' || p_column || ',NULL,''NULL'',' || p_column || ') || '''; + END IF; + END; + +BEGIN + + Dbms_Output.Disable; + Dbms_Output.Enable(1000000); + + Dbms_Output.Put_Line('SELECT ''INSERT INTO ' || Lower(v_owner) || '.' || Lower(v_table_name)); + Dbms_Output.Put_Line('('); + << Columns_Loop >> + FOR cur_rec IN c_columns (v_table_name, v_owner) LOOP + IF c_columns%ROWCOUNT != 1 THEN + Dbms_Output.Put_Line(','); + END IF; + Dbms_Output.Put(cur_rec.column_name); + END LOOP Columns_Loop; + Dbms_Output.New_Line; + Dbms_Output.Put_Line(')'); + Dbms_Output.Put_Line('VALUES'); + Dbms_Output.Put_Line('('); + + << Data_Loop >> + FOR cur_rec IN c_columns (v_table_name, v_owner) LOOP + IF c_columns%ROWCOUNT != 1 THEN + Dbms_Output.Put_Line(','); + END IF; + Dbms_Output.Put(Format_Col(cur_rec.column_name, cur_rec.data_type)); + END LOOP Data_Loop; + Dbms_Output.New_Line; + Dbms_Output.Put_Line(');'''); + Dbms_Output.Put_Line('FROM ' || Lower(v_owner) || '.' || Lower(v_table_name) ); + Dbms_Output.Put_Line('/'); + +END; +/ + +SPOOL OFF + +SET LINESIZE 1000 +SPOOL table_data.sql + +@temp.sql + +SPOOL OFF + +SET PAGESIZE 14 +SET FEEDBACK ON \ No newline at end of file diff --git a/timhall/script_creation/db_link_ddl.sql b/timhall/script_creation/db_link_ddl.sql new file mode 100644 index 0000000..6fecf00 --- /dev/null +++ b/timhall/script_creation/db_link_ddl.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/db_link_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for DB links for the specific schema, or all schemas. +-- Call Syntax : @db_link_ddl (schema or all) +-- Last Modified: 16/03/2013 +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('DB_LINK', db_link, owner) +FROM dba_db_links +WHERE owner = DECODE(UPPER('&1'), 'ALL', owner, UPPER('&1')); + +SET PAGESIZE 14 LINESIZE 1000 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/directory_ddl.sql b/timhall/script_creation/directory_ddl.sql new file mode 100644 index 0000000..fa10fe0 --- /dev/null +++ b/timhall/script_creation/directory_ddl.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/directory_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for specified directory, or all directories. +-- Call Syntax : @directory_ddl (directory or all) +-- Last Modified: 16/03/2013 +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('DIRECTORY', directory_name) +FROM dba_directories +WHERE directory_name = DECODE(UPPER('&1'), 'ALL', directory_name, UPPER('&1')); + +SET PAGESIZE 14 LINESIZE 1000 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/drop_cons_on_table.sql b/timhall/script_creation/drop_cons_on_table.sql new file mode 100644 index 0000000..a7759d0 --- /dev/null +++ b/timhall/script_creation/drop_cons_on_table.sql @@ -0,0 +1,75 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/drop_cons_on_table.sql +-- Author : Tim Hall +-- Description : Creates the DDL to drop the UK & PK constraints on the specified table, or all tables. +-- Call Syntax : @drop_cons_on_table (table-name or all) (schema) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET LINESIZE 100 +SET VERIFY OFF +SET FEEDBACK OFF +PROMPT + +DECLARE + + CURSOR cu_cons IS + SELECT * + FROM all_constraints a + WHERE a.table_name = Decode(Upper('&&1'),'ALL',a.table_name,Upper('&&1')) + AND a.owner = Upper('&&2') + AND a.constraint_type IN ('P','U'); + + -- ---------------------------------------------------------------------------------------- + FUNCTION Con_Columns(p_tab IN VARCHAR2, + p_con IN VARCHAR2) + RETURN VARCHAR2 IS + -- ---------------------------------------------------------------------------------------- + CURSOR cu_col_cursor IS + SELECT a.column_name + FROM all_cons_columns a + WHERE a.table_name = p_tab + AND a.constraint_name = p_con + AND a.owner = Upper('&&2') + ORDER BY a.position; + + l_result VARCHAR2(1000); + BEGIN + FOR cur_rec IN cu_col_cursor LOOP + IF cu_col_cursor%ROWCOUNT = 1 THEN + l_result := cur_rec.column_name; + ELSE + l_result := l_result || ',' || cur_rec.column_name; + END IF; + END LOOP; + RETURN Lower(l_result); + END; + -- ---------------------------------------------------------------------------------------- + +BEGIN + + DBMS_Output.Disable; + DBMS_Output.Enable(1000000); + DBMS_Output.Put_Line('PROMPT'); + DBMS_Output.Put_Line('PROMPT Droping Constraints on ' || Upper('&&1')); + FOR cur_rec IN cu_cons LOOP + IF cur_rec.constraint_type = 'P' THEN + DBMS_Output.Put_Line('ALTER TABLE ' || Lower(cur_rec.table_name) || ' DROP PRIMARY KEY;'); + ELSIF cur_rec.constraint_type = 'R' THEN + DBMS_Output.Put_Line('ALTER TABLE ' || Lower(cur_rec.table_name) || ' DROP CONSTRAINT ' || Lower(cur_rec.constraint_name) || ';'); + ELSIF cur_rec.constraint_type = 'U' THEN + DBMS_Output.Put_Line('ALTER TABLE ' || Lower(cur_rec.table_name) || ' DROP UNIQUE (' || Con_Columns(cur_rec.table_name, cur_rec.constraint_name) || ');'); + END IF; + END LOOP; + +END; +/ + +PROMPT +SET VERIFY ON +SET FEEDBACK ON + + + + + diff --git a/timhall/script_creation/drop_fks_on_table.sql b/timhall/script_creation/drop_fks_on_table.sql new file mode 100644 index 0000000..32c6e46 --- /dev/null +++ b/timhall/script_creation/drop_fks_on_table.sql @@ -0,0 +1,43 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/drop_fks_on_table.sql +-- Author : Tim Hall +-- Description : Creates the DDL to drop the foreign keys on the specified table. +-- Call Syntax : @drop_fks_on_table (table-name) (schema) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET LINESIZE 100 +SET VERIFY OFF +SET FEEDBACK OFF +PROMPT + +DECLARE + + CURSOR cu_fks IS + SELECT * + FROM all_constraints a + WHERE a.constraint_type = 'R' + AND a.table_name = Decode(Upper('&&1'),'ALL',a.table_name,Upper('&&1')) + AND a.owner = Upper('&&2'); + +BEGIN + + DBMS_Output.Disable; + DBMS_Output.Enable(1000000); + DBMS_Output.Put_Line('PROMPT'); + DBMS_Output.Put_Line('PROMPT Droping Foreign Keys on ' || Upper('&&1')); + FOR cur_rec IN cu_fks LOOP + DBMS_Output.Put_Line('ALTER TABLE ' || Lower(cur_rec.table_name) || ' DROP CONSTRAINT ' || Lower(cur_rec.constraint_name) || ';'); + END LOOP; + +END; +/ + +PROMPT +SET VERIFY ON +SET FEEDBACK ON + + + + + diff --git a/timhall/script_creation/drop_fks_ref_table.sql b/timhall/script_creation/drop_fks_ref_table.sql new file mode 100644 index 0000000..3b62ea4 --- /dev/null +++ b/timhall/script_creation/drop_fks_ref_table.sql @@ -0,0 +1,44 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/drop_fks_ref_table.sql +-- Author : Tim Hall +-- Description : Creates the DDL to drop the foreign keys that referenece the specified table. +-- Call Syntax : @drop_fks_ref_table (table-name) (schema) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET LINESIZE 100 +SET VERIFY OFF +SET FEEDBACK OFF +PROMPT + +DECLARE + + CURSOR cu_fks IS + SELECT * + FROM all_constraints a + WHERE a.owner = Upper('&&2') + AND a.constraint_type = 'R' + AND a.r_constraint_name IN (SELECT a1.constraint_name + FROM all_constraints a1 + WHERE a1.table_name = Upper('&&1') + AND a1.owner = Upper('&&2')); + +BEGIN + + DBMS_Output.Put_Line('PROMPT'); + DBMS_Output.Put_Line('PROMPT Droping Foreign Keys to ' || Upper('&&1')); + FOR cur_rec IN cu_fks LOOP + DBMS_Output.Put_Line('ALTER TABLE ' || Lower(cur_rec.table_name) || ' DROP CONSTRAINT ' || Lower(cur_rec.constraint_name) || ';'); + END LOOP; + +END; +/ + +PROMPT +SET VERIFY ON +SET FEEDBACK ON + + + + + diff --git a/timhall/script_creation/drop_indexes.sql b/timhall/script_creation/drop_indexes.sql new file mode 100644 index 0000000..5d0a7c8 --- /dev/null +++ b/timhall/script_creation/drop_indexes.sql @@ -0,0 +1,42 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/drop_indexes.sql +-- Author : Tim Hall +-- Description : Creates the DDL to drop the indexes on the specified table, or all tables. +-- Call Syntax : @drop_indexes (table-name or all) (schema) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET LINESIZE 100 +SET VERIFY OFF +SET FEEDBACK OFF +PROMPT + +DECLARE + + CURSOR cu_idx IS + SELECT * + FROM all_indexes a + WHERE a.table_name = Decode(Upper('&&1'),'ALL',a.table_name,Upper('&&1')) + AND a.owner = Upper('&&2'); + +BEGIN + + DBMS_Output.Disable; + DBMS_Output.Enable(1000000); + DBMS_Output.Put_Line('PROMPT'); + DBMS_Output.Put_Line('PROMPT Droping Indexes on ' || Upper('&&1')); + FOR cur_rec IN cu_idx LOOP + DBMS_Output.Put_Line('DROP INDEX ' || Lower(cur_rec.index_name) || ';'); + END LOOP; + +END; +/ + +PROMPT +SET VERIFY ON +SET FEEDBACK ON + + + + + diff --git a/timhall/script_creation/fks_on_table_ddl.sql b/timhall/script_creation/fks_on_table_ddl.sql new file mode 100644 index 0000000..6bcadd7 --- /dev/null +++ b/timhall/script_creation/fks_on_table_ddl.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/fks_on_table_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for the foreign keys on the specified table, or all tables. +-- Call Syntax : @fks_on_table_ddl (schema) (table-name or all) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('REF_CONSTRAINT', constraint_name, owner) +FROM all_constraints +WHERE owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')) +AND constraint_type = 'R'; + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON diff --git a/timhall/script_creation/fks_ref_table_ddl.sql b/timhall/script_creation/fks_ref_table_ddl.sql new file mode 100644 index 0000000..707dd79 --- /dev/null +++ b/timhall/script_creation/fks_ref_table_ddl.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/fks_ref_table_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for the foreign keys that reference the specified table. +-- Call Syntax : @fks_ref_table_ddl (schema) (table-name) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('REF_CONSTRAINT', ac1.constraint_name, ac1.owner) +FROM all_constraints ac1 + JOIN all_constraints ac2 ON ac1.r_owner = ac2.owner AND ac1.r_constraint_name = ac2.constraint_name +WHERE ac2.owner = UPPER('&1') +AND ac2.table_name = UPPER('&2') +AND ac2.constraint_type IN ('P','U') +AND ac1.constraint_type = 'R'; + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/index_monitoring_off.sql b/timhall/script_creation/index_monitoring_off.sql new file mode 100644 index 0000000..7e3f3d0 --- /dev/null +++ b/timhall/script_creation/index_monitoring_off.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/index_monitoring_on.sql +-- Author : Tim Hall +-- Description : Sets monitoring off for the specified table indexes. +-- Call Syntax : @index_monitoring_on (schema) (table-name or all) +-- Last Modified: 04/02/2005 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF +SPOOL temp.sql + +SELECT 'ALTER INDEX "' || i.owner || '"."' || i.index_name || '" NOMONITORING USAGE;' +FROM dba_indexes i +WHERE owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')); + +SPOOL OFF + +SET PAGESIZE 18 +SET FEEDBACK ON + +@temp.sql + diff --git a/timhall/script_creation/index_monitoring_on.sql b/timhall/script_creation/index_monitoring_on.sql new file mode 100644 index 0000000..c65508b --- /dev/null +++ b/timhall/script_creation/index_monitoring_on.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/index_monitoring_on.sql +-- Author : Tim Hall +-- Description : Sets monitoring on for the specified table indexes. +-- Call Syntax : @index_monitoring_on (schema) (table-name or all) +-- Last Modified: 04/02/2005 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF +SPOOL temp.sql + +SELECT 'ALTER INDEX "' || i.owner || '"."' || i.index_name || '" MONITORING USAGE;' +FROM dba_indexes i +WHERE owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')); + +SPOOL OFF + +SET PAGESIZE 18 +SET FEEDBACK ON + +@temp.sql + diff --git a/timhall/script_creation/job_ddl.sql b/timhall/script_creation/job_ddl.sql new file mode 100644 index 0000000..3ac868a --- /dev/null +++ b/timhall/script_creation/job_ddl.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/job_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for the specified job. +-- Call Syntax : @job_ddl (schema-name) (job-name) +-- Last Modified: 31/12/2018 +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('PROCOBJ', job_name, owner) +FROM all_scheduler_jobs +WHERE owner = UPPER('&1') +AND job_name = DECODE(UPPER('&2'), 'ALL', job_name, UPPER('&2')); + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/logon_as_user.sql b/timhall/script_creation/logon_as_user.sql new file mode 100644 index 0000000..3cc4de7 --- /dev/null +++ b/timhall/script_creation/logon_as_user.sql @@ -0,0 +1,32 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/logon_as_user.sql +-- Author : Tim Hall +-- Description : Displays the DDL for a specific user. +-- Better approaches included here. +-- https://oracle-base.com/articles/misc/proxy-users-and-connect-through +-- Call Syntax : @logon_as_user (username) +-- Last Modified: 28/01/2006 - Added link to article. +-- ----------------------------------------------------------------------------------- + +set serveroutput on verify off +declare + l_username VARCHAR2(30) := upper('&1'); + l_orig_pwd VARCHAR2(32767); +begin + select password + into l_orig_pwd + from sys.user$ + where name = l_username; + + dbms_output.put_line('--'); + dbms_output.put_line('alter user ' || l_username || ' identified by DummyPassword1;'); + dbms_output.put_line('conn ' || l_username || '/DummyPassword1'); + + dbms_output.put_line('--'); + dbms_output.put_line('-- Do something here.'); + dbms_output.put_line('--'); + + dbms_output.put_line('conn / as sysdba'); + dbms_output.put_line('alter user ' || l_username || ' identified by values '''||l_orig_pwd||''';'); +end; +/ diff --git a/timhall/script_creation/logon_as_user_orig.sql b/timhall/script_creation/logon_as_user_orig.sql new file mode 100644 index 0000000..283eda8 --- /dev/null +++ b/timhall/script_creation/logon_as_user_orig.sql @@ -0,0 +1,32 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/logon_as_user_orig.sql +-- Author : Tim Hall +-- Description : Displays the DDL for a specific user. +-- Better approaches included here. +-- https://oracle-base.com/articles/misc/proxy-users-and-connect-through +-- Call Syntax : @logon_as_user_orig (username) +-- Last Modified: 06/06/2019 - Added link to article. +-- ----------------------------------------------------------------------------------- + +set serveroutput on verify off +declare + l_username VARCHAR2(30) := upper('&1'); + l_orig_pwd VARCHAR2(32767); +begin + select password + into l_orig_pwd + from dba_users + where username = l_username; + + dbms_output.put_line('--'); + dbms_output.put_line('alter user ' || l_username || ' identified by DummyPassword1;'); + dbms_output.put_line('conn ' || l_username || '/DummyPassword1'); + + dbms_output.put_line('--'); + dbms_output.put_line('-- Do something here.'); + dbms_output.put_line('--'); + + dbms_output.put_line('conn / as sysdba'); + dbms_output.put_line('alter user ' || l_username || ' identified by values '''||l_orig_pwd||''';'); +end; +/ diff --git a/timhall/script_creation/monitoring_off.sql b/timhall/script_creation/monitoring_off.sql new file mode 100644 index 0000000..32a7565 --- /dev/null +++ b/timhall/script_creation/monitoring_off.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/monitoring_on.sql +-- Author : Tim Hall +-- Description : Sets monitoring off for the specified tables. +-- Call Syntax : @monitoring_on (schema) (table-name or all) +-- Last Modified: 21/03/2003 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || owner || '"."' || table_name || '" NOMONITORING;' +FROM dba_tables +WHERE owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')) +AND monitoring = 'YES'; + +SPOOL OFF + +SET PAGESIZE 18 +SET FEEDBACK ON + +@temp.sql + diff --git a/timhall/script_creation/monitoring_on.sql b/timhall/script_creation/monitoring_on.sql new file mode 100644 index 0000000..2c1c1c4 --- /dev/null +++ b/timhall/script_creation/monitoring_on.sql @@ -0,0 +1,25 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/monitoring_on.sql +-- Author : Tim Hall +-- Description : Sets monitoring on for the specified tables. +-- Call Syntax : @monitoring_on (schema) (table-name or all) +-- Last Modified: 21/03/2003 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF +SPOOL temp.sql + +SELECT 'ALTER TABLE "' || owner || '"."' || table_name || '" MONITORING;' +FROM dba_tables +WHERE owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')) +AND monitoring != 'YES'; + +SPOOL OFF + +SET PAGESIZE 18 +SET FEEDBACK ON + +@temp.sql + diff --git a/timhall/script_creation/network_acls_ddl.sql b/timhall/script_creation/network_acls_ddl.sql new file mode 100644 index 0000000..272226f --- /dev/null +++ b/timhall/script_creation/network_acls_ddl.sql @@ -0,0 +1,107 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/11g/network_acls_ddl.sql +-- Author : Tim Hall +-- Description : Displays DDL for all network ACLs. +-- Requirements : Access to the DBA views. +-- Call Syntax : @network_acls_ddl +-- Last Modified: 28-JUL-2017 +-- ----------------------------------------------------------------------------------- + +SET SERVEROUTPUT ON FORMAT WRAPPED LINESIZE 300 +DECLARE + l_last_acl dba_network_acls.acl%TYPE := '~'; + l_last_principal dba_network_acl_privileges.principal%TYPE := '~'; + l_last_privilege dba_network_acl_privileges.privilege%TYPE := '~'; + l_last_host dba_network_acls.host%TYPE := '~'; + + FUNCTION get_timestamp (p_timestamp IN TIMESTAMP WITH TIME ZONE) + RETURN VARCHAR2 + AS + l_return VARCHAR2(32767); + BEGIN + IF p_timestamp IS NULL THEN + RETURN 'NULL'; + END IF; + RETURN 'TO_TIMESTAMP_TZ(''' || TO_CHAR(p_timestamp, 'DD-MON-YYYY HH24:MI:SS.FF TZH:TZM') || ''',''DD-MON-YYYY HH24:MI:SS.FF TZH:TZM'')'; + END; +BEGIN + FOR i IN (SELECT a.acl, + a.host, + a.lower_port, + a.upper_port, + b.principal, + b.privilege, + b.is_grant, + b.start_date, + b.end_date + FROM dba_network_acls a + JOIN dba_network_acl_privileges b ON a.acl = b.acl + ORDER BY a.acl, a.host, a.lower_port, a.upper_port) + LOOP + IF l_last_acl <> i.acl THEN + -- First time we've seen this ACL, so create a new one. + l_last_host := '~'; + + DBMS_OUTPUT.put_line('-- -------------------------------------------------'); + DBMS_OUTPUT.put_line('-- ' || i.acl); + DBMS_OUTPUT.put_line('-- -------------------------------------------------'); + DBMS_OUTPUT.put_line('BEGIN'); + DBMS_OUTPUT.put_line(' DBMS_NETWORK_ACL_ADMIN.drop_acl ('); + DBMS_OUTPUT.put_line(' acl => ''' || i.acl || ''');'); + DBMS_OUTPUT.put_line(' COMMIT;'); + DBMS_OUTPUT.put_line('END;'); + DBMS_OUTPUT.put_line('/'); + DBMS_OUTPUT.put_line(' '); + DBMS_OUTPUT.put_line('BEGIN'); + DBMS_OUTPUT.put_line(' DBMS_NETWORK_ACL_ADMIN.create_acl ('); + DBMS_OUTPUT.put_line(' acl => ''' || i.acl || ''','); + DBMS_OUTPUT.put_line(' description => ''' || i.acl || ''','); + DBMS_OUTPUT.put_line(' principal => ''' || i.principal || ''','); + DBMS_OUTPUT.put_line(' is_grant => ' || i.is_grant || ','); + DBMS_OUTPUT.put_line(' privilege => ''' || i.privilege || ''','); + DBMS_OUTPUT.put_line(' start_date => ' || get_timestamp(i.start_date) || ','); + DBMS_OUTPUT.put_line(' end_date => ' || get_timestamp(i.end_date) || ');'); + DBMS_OUTPUT.put_line(' COMMIT;'); + DBMS_OUTPUT.put_line('END;'); + DBMS_OUTPUT.put_line('/'); + DBMS_OUTPUT.put_line(' '); + l_last_acl := i.acl; + l_last_principal := i.principal; + l_last_privilege := i.privilege; + END IF; + + IF l_last_principal <> i.principal + OR (l_last_principal = i.principal AND l_last_privilege <> i.privilege) THEN + -- Add another principal to an existing ACL. + DBMS_OUTPUT.put_line('BEGIN'); + DBMS_OUTPUT.put_line(' DBMS_NETWORK_ACL_ADMIN.add_privilege ('); + DBMS_OUTPUT.put_line(' acl => ''' || i.acl || ''','); + DBMS_OUTPUT.put_line(' principal => ''' || i.principal || ''','); + DBMS_OUTPUT.put_line(' is_grant => ' || i.is_grant || ','); + DBMS_OUTPUT.put_line(' privilege => ''' || i.privilege || ''','); + DBMS_OUTPUT.put_line(' start_date => ' || get_timestamp(i.start_date) || ','); + DBMS_OUTPUT.put_line(' end_date => ' || get_timestamp(i.end_date) || ');'); + DBMS_OUTPUT.put_line(' COMMIT;'); + DBMS_OUTPUT.put_line('END;'); + DBMS_OUTPUT.put_line('/'); + DBMS_OUTPUT.put_line(' '); + l_last_principal := i.principal; + l_last_privilege := i.privilege; + END IF; + + IF l_last_host <> i.host||':'||i.lower_port||':'||i.upper_port THEN + DBMS_OUTPUT.put_line('BEGIN'); + DBMS_OUTPUT.put_line(' DBMS_NETWORK_ACL_ADMIN.assign_acl ('); + DBMS_OUTPUT.put_line(' acl => ''' || i.acl || ''','); + DBMS_OUTPUT.put_line(' host => ''' || i.host || ''','); + DBMS_OUTPUT.put_line(' lower_port => ' || NVL(TO_CHAR(i.lower_port),'NULL') || ','); + DBMS_OUTPUT.put_line(' upper_port => ' || NVL(TO_CHAR(i.upper_port),'NULL') || ');'); + DBMS_OUTPUT.put_line(' COMMIT;'); + DBMS_OUTPUT.put_line('END;'); + DBMS_OUTPUT.put_line('/'); + DBMS_OUTPUT.put_line(' '); + l_last_host := i.host||':'||i.lower_port||':'||i.upper_port; + END IF; + END LOOP; +END; +/ diff --git a/timhall/script_creation/object_grants.sql b/timhall/script_creation/object_grants.sql new file mode 100644 index 0000000..2ee33b3 --- /dev/null +++ b/timhall/script_creation/object_grants.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/object_grants.sql +-- Author : Tim Hall +-- Description : Displays the DDL for all grants on a specific object. +-- Call Syntax : @object_grants (owner) (object_name) +-- Last Modified: 28/01/2006 +-- ----------------------------------------------------------------------------------- + +set long 1000000 linesize 1000 pagesize 0 feedback off trimspool on verify off +column ddl format a1000 + +begin + dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'SQLTERMINATOR', true); + dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'PRETTY', true); +end; +/ + +select dbms_metadata.get_dependent_ddl('OBJECT_GRANT', UPPER('&2'), UPPER('&1')) AS ddl +from dual; + +set linesize 80 pagesize 14 feedback on trimspool on verify on diff --git a/timhall/script_creation/profile_ddl.sql b/timhall/script_creation/profile_ddl.sql new file mode 100644 index 0000000..e301461 --- /dev/null +++ b/timhall/script_creation/profile_ddl.sql @@ -0,0 +1,23 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/profile_ddl.sql +-- Author : Tim Hall +-- Description : Displays the DDL for the specified profile(s). +-- Call Syntax : @profile_ddl (profile | part of profile) +-- Last Modified: 28/01/2006 +-- ----------------------------------------------------------------------------------- + +set long 20000 longchunksize 20000 pagesize 0 linesize 1000 feedback off verify off trimspool on +column ddl format a1000 + +begin + dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'SQLTERMINATOR', true); + dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'PRETTY', true); +end; +/ + +select dbms_metadata.get_ddl('PROFILE', profile) as profile_ddl +from (select distinct profile + from dba_profiles) +where profile like upper('%&1%'); + +set linesize 80 pagesize 14 feedback on verify on diff --git a/timhall/script_creation/rbs_structure.sql b/timhall/script_creation/rbs_structure.sql new file mode 100644 index 0000000..37f0031 --- /dev/null +++ b/timhall/script_creation/rbs_structure.sql @@ -0,0 +1,58 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/rbs_structure.sql +-- Author : Tim Hall +-- Description : Creates the DDL for specified segment, or all segments. +-- Call Syntax : @rbs_structure (segment-name or all) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET LINESIZE 100 +SET VERIFY OFF +SET FEEDBACK OFF +PROMPT + +DECLARE + + CURSOR cu_rs IS + SELECT a.segment_name, + a.tablespace_name, + a.initial_extent, + a.next_extent, + a.min_extents, + a.max_extents, + a.pct_increase, + b.bytes + FROM dba_rollback_segs a, + dba_segments b + WHERE a.segment_name = b.segment_name + AND a.segment_name = Decode(Upper('&&1'), 'ALL',a.segment_name, Upper('&&1')) + ORDER BY a.segment_name; + +BEGIN + + DBMS_Output.Disable; + DBMS_Output.Enable(1000000); + + FOR cur_rs IN cu_rs LOOP + DBMS_Output.Put_Line('PROMPT'); + DBMS_Output.Put_Line('PROMPT Creating Rollback Segment ' || cur_rs.segment_name); + DBMS_Output.Put_Line('CREATE ROLLBACK SEGMENT ' || Lower(cur_rs.segment_name)); + DBMS_Output.Put_Line('TABLESPACE ' || Lower(cur_rs.tablespace_name)); + DBMS_Output.Put_Line('STORAGE ('); + DBMS_Output.Put_Line(' INITIAL ' || Trunc(cur_rs.initial_extent/1024) || 'K'); + DBMS_Output.Put_Line(' NEXT ' || Trunc(cur_rs.next_extent/1024) || 'K'); + DBMS_Output.Put_Line(' MINEXTENTS ' || cur_rs.min_extents); + DBMS_Output.Put_Line(' MAXEXTENTS ' || cur_rs.max_extents); + DBMS_Output.Put_Line(' PCTINCREASE ' || cur_rs.pct_increase); + DBMS_Output.Put_Line(' )'); + DBMS_Output.Put_Line('/'); + DBMS_Output.Put_Line(' '); + END LOOP; + + DBMS_Output.Put_Line(' '); + +END; +/ + +SET VERIFY ON +SET FEEDBACK ON \ No newline at end of file diff --git a/timhall/script_creation/recreate_table.sql b/timhall/script_creation/recreate_table.sql new file mode 100644 index 0000000..b417003 --- /dev/null +++ b/timhall/script_creation/recreate_table.sql @@ -0,0 +1,148 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/recreate_table.sql +-- Author : Tim Hall +-- Description : Creates the DDL to recreate the specified table. +-- Comments : Mostly used when dropping columns prior to Oracle 8i. Not updated since Oracle 7.3.4. +-- Requirements : Requires a number of the other creation scripts. +-- Call Syntax : @recreate_table (table-name) (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET SERVEROUTPUT ON +SET LINESIZE 100 +SET VERIFY OFF +SET FEEDBACK OFF +SET TERMOUT OFF +SPOOL ReCreate_&&1 +PROMPT + +-- ---------------------------------------------- +-- Reset the buffer size and display script title +-- ---------------------------------------------- +BEGIN + DBMS_Output.Disable; + DBMS_Output.Enable(1000000); + DBMS_Output.Put_Line('-------------------------------------------------------------'); + DBMS_Output.Put_Line('-- Author : Tim Hall'); + DBMS_Output.Put_Line('-- Creation Date : ' || To_Char(SYSDATE,'DD/MM/YYYY HH24:MI:SS')); + DBMS_Output.Put_Line('-- Description : Re-creation script for ' || Upper('&&1')); + DBMS_Output.Put_Line('-------------------------------------------------------------'); +END; +/ + +-- ------------------------------------ +-- Drop existing FKs to specified table +-- ------------------------------------ +@Drop_FKs_Ref_Table &&1 &&2 + +-- ----------------- +-- Drop FKs on table +-- ----------------- +@Drop_FKs_On_Table &&1 &&2 + +-- ------------------------- +-- Drop constraints on table +-- ------------------------- +@Drop_Cons_On_Table &&1 &&2 + +-- --------------------- +-- Drop indexes on table +-- --------------------- +@Drop_Indexes &&1 &&2 + +-- ----------------------------------------- +-- Rename existing table - prefix with 'tmp' +-- ----------------------------------------- +SET VERIFY OFF +SET FEEDBACK OFF +BEGIN + DBMS_Output.Put_Line(' '); + DBMS_Output.Put_Line('PROMPT'); + DBMS_Output.Put_Line('PROMPT Renaming ' || Upper('&&1') || ' to TMP_' || Upper('&&1')); + DBMS_Output.Put_Line('RENAME ' || Lower('&&1') || ' TO tmp_' || Lower('&&1')); + DBMS_Output.Put_Line('/'); +END; +/ + +-- --------------- +-- Re-Create table +-- --------------- +@Table_Structure &&1 &&2 + +-- --------------------- +-- Re-Create constraints +-- --------------------- +@Table_Constraints &&1 &&2 + +-- --------------------- +-- Recreate FKs on table +-- --------------------- +@FKs_On_Table &&1 &&2 + +-- ----------------- +-- Re-Create indexes +-- ----------------- +@Table_Indexes &&1 &&2 + +-- -------------------------- +-- Build up population insert +-- -------------------------- +SET VERIFY OFF +SET FEEDBACK OFF +DECLARE + + CURSOR cu_columns IS + SELECT Lower(column_name) column_name + FROM all_tab_columns atc + WHERE atc.table_name = Upper('&&1') + AND atc.owner = Upper('&&2'); + +BEGIN + + DBMS_Output.Put_Line(' '); + DBMS_Output.Put_Line('PROMPT'); + DBMS_Output.Put_Line('PROMPT Populating ' || Upper('&&1') || ' from TPM_' || Upper('&&1')); + DBMS_Output.Put_Line('INSERT INTO ' || Lower('&&1')); + DBMS_Output.Put('SELECT '); + FOR cur_rec IN cu_columns LOOP + IF cu_columns%ROWCOUNT != 1 THEN + DBMS_Output.Put_Line(','); + END IF; + DBMS_Output.Put(' a.' || cur_rec.column_name); + END LOOP; + DBMS_Output.New_Line; + DBMS_Output.Put_Line('FROM tmp_' || Lower('&&1') || ' a'); + DBMS_Output.Put_Line('/'); + + -- -------------- + -- Drop tmp table + -- -------------- + DBMS_Output.Put_Line(' '); + DBMS_Output.Put_Line('PROMPT'); + DBMS_Output.Put_Line('PROMPT Droping TMP_' || Upper('&&1')); + DBMS_Output.Put_Line('DROP TABLE tmp_' || Lower('&&1')); + DBMS_Output.Put_Line('/'); + +END; +/ + +-- --------------------- +-- Recreate FKs to table +-- --------------------- +@FKs_Ref_Table &&1 &&2 + +SET VERIFY OFF +SET FEEDBACK OFF +BEGIN + DBMS_Output.Put_Line(' '); + DBMS_Output.Put_Line('-------------------------------------------------------------'); + DBMS_Output.Put_Line('-- END Re-creation script for ' || Upper('&&1')); + DBMS_Output.Put_Line('-------------------------------------------------------------'); +END; +/ + +SPOOL OFF +PROMPT +SET VERIFY ON +SET FEEDBACK ON +SET TERMOUT ON + diff --git a/timhall/script_creation/role_ddl.sql b/timhall/script_creation/role_ddl.sql new file mode 100644 index 0000000..4dee824 --- /dev/null +++ b/timhall/script_creation/role_ddl.sql @@ -0,0 +1,42 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/role_ddl.sql +-- Author : Tim Hall +-- Description : Displays the DDL for a specific role. +-- Call Syntax : @role_ddl (role) +-- Last Modified: 28/01/2006 +-- ----------------------------------------------------------------------------------- + +set long 20000 longchunksize 20000 pagesize 0 linesize 1000 feedback off verify off trimspool on +column ddl format a1000 + +begin + dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'SQLTERMINATOR', true); + dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'PRETTY', true); +end; +/ + +variable v_role VARCHAR2(30); + +exec :v_role := upper('&1'); + +select dbms_metadata.get_ddl('ROLE', r.role) AS ddl +from dba_roles r +where r.role = :v_role +union all +select dbms_metadata.get_granted_ddl('ROLE_GRANT', rp.grantee) AS ddl +from dba_role_privs rp +where rp.grantee = :v_role +and rownum = 1 +union all +select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', sp.grantee) AS ddl +from dba_sys_privs sp +where sp.grantee = :v_role +and rownum = 1 +union all +select dbms_metadata.get_granted_ddl('OBJECT_GRANT', tp.grantee) AS ddl +from dba_tab_privs tp +where tp.grantee = :v_role +and rownum = 1 +/ + +set linesize 80 pagesize 14 feedback on verify on diff --git a/timhall/script_creation/sequence_ddl.sql b/timhall/script_creation/sequence_ddl.sql new file mode 100644 index 0000000..1c3e97d --- /dev/null +++ b/timhall/script_creation/sequence_ddl.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/sequence_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for the specified sequence, or all sequences. +-- Call Syntax : @sequence_ddl (schema-name) (sequence-name or all) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('SEQUENCE', sequence_name, sequence_owner) +FROM all_sequences +WHERE sequence_owner = UPPER('&1') +AND sequence_name = DECODE(UPPER('&2'), 'ALL', sequence_name, UPPER('&2')); + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/synonym_by_object_owner_ddl.sql b/timhall/script_creation/synonym_by_object_owner_ddl.sql new file mode 100644 index 0000000..a8477c2 --- /dev/null +++ b/timhall/script_creation/synonym_by_object_owner_ddl.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/synonym_by_object_owner_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for the specified synonym, or all synonyms. +-- Search based on owner of the object, not the synonym. +-- Call Syntax : @synonym_by_object_owner_ddl (schema-name) (synonym-name or all) +-- Last Modified: 08/07/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('SYNONYM', synonym_name, owner) +FROM all_synonyms +WHERE table_owner = UPPER('&1') +AND synonym_name = DECODE(UPPER('&2'), 'ALL', synonym_name, UPPER('&2')); + +SET PAGESIZE 14 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/synonym_ddl.sql b/timhall/script_creation/synonym_ddl.sql new file mode 100644 index 0000000..63c161e --- /dev/null +++ b/timhall/script_creation/synonym_ddl.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/synonym_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for the specified synonym, or all synonyms. +-- Search based on owner of the synonym. +-- Call Syntax : @synonym_ddl (schema-name) (synonym-name or all) +-- Last Modified: 08/07/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('SYNONYM', synonym_name, owner) +FROM all_synonyms +WHERE owner = UPPER('&1') +AND synonym_name = DECODE(UPPER('&2'), 'ALL', synonym_name, UPPER('&2')); + +SET PAGESIZE 14 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/synonym_public_remote_ddl.sql b/timhall/script_creation/synonym_public_remote_ddl.sql new file mode 100644 index 0000000..1bc4ff5 --- /dev/null +++ b/timhall/script_creation/synonym_public_remote_ddl.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/synonym_public_remote_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for public synonyms to remote objects. +-- Call Syntax : @synonym_remote_ddl +-- Last Modified: 08/07/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('SYNONYM', synonym_name, owner) +FROM dba_synonyms +WHERE owner = 'PUBLIC' +AND db_link IS NOT NULL; + +SET PAGESIZE 14 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/table_constraints_ddl.sql b/timhall/script_creation/table_constraints_ddl.sql new file mode 100644 index 0000000..99b1e6b --- /dev/null +++ b/timhall/script_creation/table_constraints_ddl.sql @@ -0,0 +1,22 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/table_constraints_ddl.sql +-- Author : Tim Hall +-- Description : Creates the UK & PK constraint DDL for specified table, or all tables. +-- Call Syntax : @table_constraints_ddl (schema-name) (table-name or all) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('CONSTRAINT', constraint_name, owner) +FROM all_constraints +WHERE owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')) +AND constraint_type IN ('U', 'P'); + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON diff --git a/timhall/script_creation/table_ddl.sql b/timhall/script_creation/table_ddl.sql new file mode 100644 index 0000000..775371e --- /dev/null +++ b/timhall/script_creation/table_ddl.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/table_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for specified table, or all tables. +-- Call Syntax : @table_ddl (schema) (table-name or all) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); + -- Uncomment the following lines if you need them. + --DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', false); + --DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'STORAGE', false); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('TABLE', table_name, owner) +FROM all_tables +WHERE owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')); + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/table_grants_ddl.sql b/timhall/script_creation/table_grants_ddl.sql new file mode 100644 index 0000000..b1cbe03 --- /dev/null +++ b/timhall/script_creation/table_grants_ddl.sql @@ -0,0 +1,18 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/table_grants_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for all grants on the specified table. +-- Call Syntax : @table_grants_ddl (schema) (table_name) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT dbms_metadata.get_dependent_ddl('OBJECT_GRANT', UPPER('&2'), UPPER('&1')) from dual; + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/table_indexes_ddl.sql b/timhall/script_creation/table_indexes_ddl.sql new file mode 100644 index 0000000..57758b2 --- /dev/null +++ b/timhall/script_creation/table_indexes_ddl.sql @@ -0,0 +1,24 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/table_indexes_ddl.sql +-- Author : Tim Hall +-- Description : Creates the index DDL for specified table, or all tables. +-- Call Syntax : @table_indexes_ddl (schema-name) (table-name or all) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); + -- Uncomment the following lines if you need them. + --DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', false); + --DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'STORAGE', false); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('INDEX', index_name, owner) +FROM all_indexes +WHERE owner = UPPER('&1') +AND table_name = DECODE(UPPER('&2'), 'ALL', table_name, UPPER('&2')); + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/table_triggers_ddl.sql b/timhall/script_creation/table_triggers_ddl.sql new file mode 100644 index 0000000..deaebc4 --- /dev/null +++ b/timhall/script_creation/table_triggers_ddl.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/table_triggers_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for all triggers on the specified table. +-- Call Syntax : @table_triggers_ddl (schema) (table_name) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('TRIGGER', trigger_name, owner) +FROM all_triggers +WHERE table_owner = UPPER('&1') +AND table_name = UPPER('&2'); + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/tablespace_ddl.sql b/timhall/script_creation/tablespace_ddl.sql new file mode 100644 index 0000000..08686ca --- /dev/null +++ b/timhall/script_creation/tablespace_ddl.sql @@ -0,0 +1,20 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/tablespace_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for the specified tablespace, or all tablespaces. +-- Call Syntax : @tablespace_ddl (tablespace-name or all) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('TABLESPACE', tablespace_name) +FROM dba_tablespaces +WHERE tablespace_name = DECODE(UPPER('&1'), 'ALL', tablespace_name, UPPER('&1')); + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/tablespace_structure.sql b/timhall/script_creation/tablespace_structure.sql new file mode 100644 index 0000000..7a84071 --- /dev/null +++ b/timhall/script_creation/tablespace_structure.sql @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/timhall/script_creation/trigger_ddl.sql b/timhall/script_creation/trigger_ddl.sql new file mode 100644 index 0000000..6a06553 --- /dev/null +++ b/timhall/script_creation/trigger_ddl.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/trigger_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for specified trigger, or all trigger. +-- Call Syntax : @trigger_ddl (schema) (trigger-name or all) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('TRIGGER', trigger_name, owner) +FROM all_triggers +WHERE owner = UPPER('&1') +AND trigger_name = DECODE(UPPER('&2'), 'ALL', trigger_name, UPPER('&2')); + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/script_creation/user_ddl.sql b/timhall/script_creation/user_ddl.sql new file mode 100644 index 0000000..393a0a2 --- /dev/null +++ b/timhall/script_creation/user_ddl.sql @@ -0,0 +1,70 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/user_ddl.sql +-- Author : Tim Hall +-- Description : Displays the DDL for a specific user. +-- Call Syntax : @user_ddl (username) +-- Last Modified: 07/08/2018 +-- ----------------------------------------------------------------------------------- + +set long 20000 longchunksize 20000 pagesize 0 linesize 1000 feedback off verify off trimspool on +column ddl format a1000 + +begin + dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'SQLTERMINATOR', true); + dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'PRETTY', true); +end; +/ + +variable v_username VARCHAR2(30); + +exec :v_username := upper('&1'); + +select dbms_metadata.get_ddl('USER', u.username) AS ddl +from dba_users u +where u.username = :v_username +union all +select dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA', tq.username) AS ddl +from dba_ts_quotas tq +where tq.username = :v_username +and rownum = 1 +union all +select dbms_metadata.get_granted_ddl('ROLE_GRANT', rp.grantee) AS ddl +from dba_role_privs rp +where rp.grantee = :v_username +and rownum = 1 +union all +select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', sp.grantee) AS ddl +from dba_sys_privs sp +where sp.grantee = :v_username +and rownum = 1 +union all +select dbms_metadata.get_granted_ddl('OBJECT_GRANT', tp.grantee) AS ddl +from dba_tab_privs tp +where tp.grantee = :v_username +and rownum = 1 +union all +select dbms_metadata.get_granted_ddl('DEFAULT_ROLE', rp.grantee) AS ddl +from dba_role_privs rp +where rp.grantee = :v_username +and rp.default_role = 'YES' +and rownum = 1 +union all +select to_clob('/* Start profile creation script in case they are missing') AS ddl +from dba_users u +where u.username = :v_username +and u.profile <> 'DEFAULT' +and rownum = 1 +union all +select dbms_metadata.get_ddl('PROFILE', u.profile) AS ddl +from dba_users u +where u.username = :v_username +and u.profile <> 'DEFAULT' +union all +select to_clob('End profile creation script */') AS ddl +from dba_users u +where u.username = :v_username +and u.profile <> 'DEFAULT' +and rownum = 1 +/ + +set linesize 80 pagesize 14 feedback on trimspool on verify on diff --git a/timhall/script_creation/view_ddl.sql b/timhall/script_creation/view_ddl.sql new file mode 100644 index 0000000..70ceb5e --- /dev/null +++ b/timhall/script_creation/view_ddl.sql @@ -0,0 +1,21 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/script_creation/view_ddl.sql +-- Author : Tim Hall +-- Description : Creates the DDL for the specified view. +-- Call Syntax : @view_ddl (schema-name) (view-name) +-- Last Modified: 16/03/2013 - Rewritten to use DBMS_METADATA +-- ----------------------------------------------------------------------------------- +SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON + +BEGIN + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', true); + DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', true); +END; +/ + +SELECT DBMS_METADATA.get_ddl ('VIEW', view_name, owner) +FROM all_views +WHERE owner = UPPER('&1') +AND view_name = DECODE(UPPER('&2'), 'ALL', view_name, UPPER('&2')); + +SET PAGESIZE 14 LINESIZE 100 FEEDBACK ON VERIFY ON \ No newline at end of file diff --git a/timhall/security/grant_delete.sql b/timhall/security/grant_delete.sql new file mode 100644 index 0000000..1855ea8 --- /dev/null +++ b/timhall/security/grant_delete.sql @@ -0,0 +1,31 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/grant_delete.sql +-- Author : Tim Hall +-- Description : Grants delete on current schemas tables to the specified user/role. +-- Call Syntax : @grant_delete (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'GRANT DELETE ON "' || u.table_name || '" TO &1;' +FROM user_tables u +WHERE NOT EXISTS (SELECT '1' + FROM all_tab_privs a + WHERE a.grantee = UPPER('&1') + AND a.privilege = 'DELETE' + AND a.table_name = u.table_name); + +SPOOL OFF + +@temp.sql + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/security/grant_execute.sql b/timhall/security/grant_execute.sql new file mode 100644 index 0000000..472f566 --- /dev/null +++ b/timhall/security/grant_execute.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/grant_execute.sql +-- Author : Tim Hall +-- Description : Grants execute on current schemas code objects to the specified user/role. +-- Call Syntax : @grant_execute (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'GRANT EXECUTE ON "' || u.object_name || '" TO &1;' +FROM user_objects u +WHERE u.object_type IN ('PACKAGE','PROCEDURE','FUNCTION') +AND NOT EXISTS (SELECT '1' + FROM all_tab_privs a + WHERE a.grantee = UPPER('&1') + AND a.privilege = 'EXECUTE' + AND a.table_name = u.object_name); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/security/grant_insert.sql b/timhall/security/grant_insert.sql new file mode 100644 index 0000000..6a6ce06 --- /dev/null +++ b/timhall/security/grant_insert.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/grant_insert.sql +-- Author : Tim Hall +-- Description : Grants insert on current schemas tables to the specified user/role. +-- Call Syntax : @grant_insert (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'GRANT INSERT ON "' || u.table_name || '" TO &1;' +FROM user_tables u +WHERE NOT EXISTS (SELECT '1' + FROM all_tab_privs a + WHERE a.grantee = UPPER('&1') + AND a.privilege = 'INSERT' + AND a.table_name = u.table_name); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/security/grant_select.sql b/timhall/security/grant_select.sql new file mode 100644 index 0000000..0fc6c9d --- /dev/null +++ b/timhall/security/grant_select.sql @@ -0,0 +1,30 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/grant_select.sql +-- Author : Tim Hall +-- Description : Grants select on current schemas tables, views & sequences to the specified user/role. +-- Call Syntax : @grant_select (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'GRANT SELECT ON "' || u.object_name || '" TO &1;' +FROM user_objects u +WHERE u.object_type IN ('TABLE','VIEW','SEQUENCE') +AND NOT EXISTS (SELECT '1' + FROM all_tab_privs a + WHERE a.grantee = UPPER('&1') + AND a.privilege = 'SELECT' + AND a.table_name = u.object_name); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/security/grant_update.sql b/timhall/security/grant_update.sql new file mode 100644 index 0000000..82c9350 --- /dev/null +++ b/timhall/security/grant_update.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/grant_update.sql +-- Author : Tim Hall +-- Description : Grants update on current schemas tables to the specified user/role. +-- Call Syntax : @grant_update (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'GRANT UPDATE ON "' || u.table_name || '" TO &1;' +FROM user_tables u +WHERE NOT EXISTS (SELECT '1' + FROM all_tab_privs a + WHERE a.grantee = UPPER('&1') + AND a.privilege = 'UPDATE' + AND a.table_name = u.table_name); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/security/package_synonyms.sql b/timhall/security/package_synonyms.sql new file mode 100644 index 0000000..9d21240 --- /dev/null +++ b/timhall/security/package_synonyms.sql @@ -0,0 +1,31 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/package_synonyms.sql +-- Author : Tim Hall +-- Description : Creates synonyms in the current schema for all code objects in the specified schema. +-- Call Syntax : @package_synonyms (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'CREATE SYNONYM "' || a.object_name || '" FOR "' || a.owner || '"."' || a.object_name || '";' +FROM all_objects a +WHERE a.object_type IN ('PACKAGE','PROCEDURE','FUNCTION') +AND a.owner = UPPER('&1') +AND NOT EXISTS (SELECT '1' + FROM user_synonyms u + WHERE u.synonym_name = a.object_name + AND u.table_owner = UPPER('&1')); + + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/security/schema_write_access.sql b/timhall/security/schema_write_access.sql new file mode 100644 index 0000000..a9b04a4 --- /dev/null +++ b/timhall/security/schema_write_access.sql @@ -0,0 +1,35 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/schema_write_access.sql +-- Author : Tim Hall +-- Description : Displays the users with write access to a specified schema. +-- Requirements : Access to the DBA views. +-- Call Syntax : @schema_write_access.sql (schema-name) +-- Last Modified: 05-MAY-2012 +-- ----------------------------------------------------------------------------------- + +set verify off + +-- Direct grants +select distinct grantee +from dba_tab_privs +where privilege in ('INSERT', 'UPDATE', 'DELETE') +and owner = upper('&1') +union +-- Grants via a role +select distinct grantee +from dba_role_privs + join dba_users on grantee = username +where granted_role IN (select distinct role + from role_tab_privs + where privilege in ('INSERT', 'UPDATE', 'DELETE') + and owner = upper('&1') + union + select distinct role + from role_sys_privs + where privilege in ('INSERT ANY TABLE', 'UPDATE ANY TABLE', 'DELETE ANY TABLE')) +union +-- Access via ANY sys privileges +select distinct grantee +from dba_sys_privs +join dba_users on grantee = username +where privilege in ('INSERT ANY TABLE', 'UPDATE ANY TABLE', 'DELETE ANY TABLE'); diff --git a/timhall/security/sequence_synonyms.sql b/timhall/security/sequence_synonyms.sql new file mode 100644 index 0000000..8ff24ea --- /dev/null +++ b/timhall/security/sequence_synonyms.sql @@ -0,0 +1,31 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/sequence_synonyms.sql +-- Author : Tim Hall +-- Description : Creates synonyms in the current schema for all sequences in the specified schema. +-- Call Syntax : @sequence_synonyms (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'CREATE SYNONYM "' || a.object_name || '" FOR "' || a.owner || '"."' || a.object_name || '";' +FROM all_objects a +WHERE a.object_type = 'SEQUENCE' +AND a.owner = UPPER('&1') +AND NOT EXISTS (SELECT '1' + FROM user_synonyms a1 + WHERE a1.synonym_name = a.object_name + AND a1.table_owner = UPPER('&1')); + + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/security/table_synonyms.sql b/timhall/security/table_synonyms.sql new file mode 100644 index 0000000..6a3e72d --- /dev/null +++ b/timhall/security/table_synonyms.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/table_synonyms.sql +-- Author : Tim Hall +-- Description : Creates synonyms in the current schema for all tables in the specified schema. +-- Call Syntax : @table_synonyms (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'CREATE SYNONYM "' || a.table_name || '" FOR "' || a.owner || '"."' || a.table_name || '";' +FROM all_tables a +WHERE NOT EXISTS (SELECT '1' + FROM user_synonyms u + WHERE u.synonym_name = a.table_name + AND u.table_owner = UPPER('&1')) +AND a.owner = UPPER('&1'); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/security/view_synonyms.sql b/timhall/security/view_synonyms.sql new file mode 100644 index 0000000..cfa8291 --- /dev/null +++ b/timhall/security/view_synonyms.sql @@ -0,0 +1,29 @@ +-- ----------------------------------------------------------------------------------- +-- File Name : https://oracle-base.com/dba/security/view_synonyms.sql +-- Author : Tim Hall +-- Description : Creates synonyms in the current schema for all views in the specified schema. +-- Call Syntax : @view_synonyms (schema-name) +-- Last Modified: 28/01/2001 +-- ----------------------------------------------------------------------------------- +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL temp.sql + +SELECT 'CREATE SYNONYM "' || a.view_name || '" FOR "' || a.owner || '"."' || a.view_name || '";' +FROM all_views a +WHERE a.owner = UPPER('&1') +AND NOT EXISTS (SELECT '1' + FROM user_synonyms u + WHERE u.synonym_name = a.view_name + AND u.table_owner = UPPER('&1')); + +SPOOL OFF + +-- Comment out following line to prevent immediate run +@temp.sql + +SET PAGESIZE 14 +SET FEEDBACK ON +SET VERIFY ON diff --git a/timhall/weblogic/deploy_app.py.txt b/timhall/weblogic/deploy_app.py.txt new file mode 100644 index 0000000..ca4b35f --- /dev/null +++ b/timhall/weblogic/deploy_app.py.txt @@ -0,0 +1,75 @@ +#!/usr/bin/python +# Author : Tim Hall +# Save Script as : deploy_app.py +# +# Requirements: +# +# Set the environment and start WLST +# +# export MW_HOME=/u01/app/oracle/middleware +# export DOMAIN_HOME=$MW_HOME/user_projects/domains/myDomain +# . $DOMAIN_HOME/bin/setDomainEnv.sh +# java weblogic.WLST +# +# Connect to the admin server and store the credentials. +# +# connect('weblogic', 'password1', 't3://myserver.localdomain:7001') +# configfile = '/home/oracle/scripts/appconfigfile.secure' +# keyfile = '/home/oracle/scripts/appkeyfile.secure' +# storeUserConfig(userConfigFile=configfile, userKeyFile=keyfile) +# disconnect() +# exit() +# + +import time +import getopt +import sys +import re + +# Get parameter values. +configfile = '/home/oracle/scripts/appconfigfile.secure' +keyfile = '/home/oracle/scripts/appkeyfile.secure' +adminurl = 't3://myserver.localdomain:7001' +app = '' +path = '' +targetlist = 'myServer_1' +try: + opts, args = getopt.getopt(sys.argv[1:],"p:a:t:h::",["path=","app=","targetlist="]) +except getopt.GetoptError: + print 'deploy_birms_app.py -p [-a ] [-t ]' + sys.exit(2) +for opt, arg in opts: + if opt == '-h': + print 'deploy_birms_app.py -p [-a ] [-t ]' + sys.exit() + elif opt in ("-a", "--app"): + app = arg + elif opt in ("-p", "--path"): + path = arg + elif opt in ("-t", "--targetlist"): + targetlist = arg +if app == '': + app = os.path.basename(path) + app = os.path.splitext(app)[0] +print 'app=', app +print 'path=', path +print 'targetlist=', targetlist + +# Undeploy then deploy the application. +connect(userConfigFile=configfile, userKeyFile=keyfile, url=adminurl) +#edit() +#startEdit() + +try: + undeploy(app) +except: + print '**********************************************************' + print '***** Failed to undeploy. Is it a first-time deploy? *****' + print '**********************************************************' + +deploy(app,path,targets=targetlist) + +#save() +#activate() +disconnect() +exit() diff --git a/timhall/weblogic/deploy_app.sh b/timhall/weblogic/deploy_app.sh new file mode 100644 index 0000000..616a6da --- /dev/null +++ b/timhall/weblogic/deploy_app.sh @@ -0,0 +1,16 @@ +#!/bin/bash +path=$1 +app=$2 +targetlist=$3 + +export MW_HOME=/u01/app/oracle/middleware +export DOMAIN_HOME=$MW_HOME/user_projects/domains/myDomain +. $DOMAIN_HOME/bin/setDomainEnv.sh + +if [ "$app" != "" -a "$targetlist" = "" ]; then + java weblogic.WLST ~/scripts/deploy_app.py -p $path -a $app +elif [ "$app" != "" -a "$targetlist" != "" ] ; then + java weblogic.WLST ~/scripts/deploy_app.py -p $path -a $app -t $targetlist +else + java weblogic.WLST ~/scripts/deploy_app.py -p $path +fi diff --git a/timhall/weblogic/start-domain.sh b/timhall/weblogic/start-domain.sh new file mode 100644 index 0000000..53b0d1c --- /dev/null +++ b/timhall/weblogic/start-domain.sh @@ -0,0 +1,21 @@ +# ----------------------------------------------------------------------------------- +# File Name : https://oracle-base.com/dba/weblogic/start-domain.sh +# Author : Tim Hall +# Description : Starts a WebLogic domain and managed server. +# Call Syntax : ./start-domain.sh +# Last Modified: 15-JUN-2013 +# Notes : Amend DOMAIN_HOME and managed server name appropriately. +# ----------------------------------------------------------------------------------- + +export MW_HOME=/u01/app/oracle/middleware +export DOMAIN_HOME=$MW_HOME/user_projects/domains/clusterDomain + +echo "Starting AdminServer" +nohup $DOMAIN_HOME/startWebLogic.sh > /dev/null 2>&1 & +sleep 120 + +echo "Starting clusterServer_1" +nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh clusterServer_1 > /dev/null 2>&1 & +sleep 60 + +echo "Done!" \ No newline at end of file diff --git a/timhall/weblogic/start-forms-reports.sh b/timhall/weblogic/start-forms-reports.sh new file mode 100644 index 0000000..55c3ce0 --- /dev/null +++ b/timhall/weblogic/start-forms-reports.sh @@ -0,0 +1,29 @@ +# ----------------------------------------------------------------------------------- +# File Name : https://oracle-base.com/dba/weblogic/start-forms-reports.sh +# Author : Tim Hall +# Description : Starts a WebLogic Forms and Reports Services installation. +# Call Syntax : ./start-forms-reports.sh +# Last Modified: 15-JUN-2013 +# ----------------------------------------------------------------------------------- + +export MW_HOME=/u01/app/oracle/middleware +export DOMAIN_HOME=$MW_HOME/user_projects/domains/ClassicDomain +export FR_INST=$MW_HOME/asinst_1 + +echo "Starting AdminServer" +nohup $DOMAIN_HOME/bin/startWebLogic.sh > /dev/null 2>&1 & +sleep 120 + +echo "Starting WLS_FORMS" +nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_FORMS > /dev/null 2>&1 & +echo "Starting WLS_REPORTS" +nohup $DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_REPORTS > /dev/null 2>&1 & + +echo "Start remaining processes using OPMN" +$FR_INST/bin/opmnctl startall + +echo "Sleep for 10 minutes before calling reports startserver" +sleep 600 +curl http://localhost:8888/reports/rwservlet/startserver > /dev/null 2>&1 & + +echo "Done!" diff --git a/timhall/weblogic/start-node-manager.sh b/timhall/weblogic/start-node-manager.sh new file mode 100644 index 0000000..ccc6158 --- /dev/null +++ b/timhall/weblogic/start-node-manager.sh @@ -0,0 +1,15 @@ +# ----------------------------------------------------------------------------------- +# File Name : https://oracle-base.com/dba/weblogic/start-node-manager.sh +# Author : Tim Hall +# Description : Starts the WebLogic Node Manager +# Call Syntax : ./start-node-manager.sh +# Last Modified: 15-JUN-2013 +# ----------------------------------------------------------------------------------- + +export MW_HOME=/u01/app/oracle/middleware +export WLS_HOME=$MW_HOME/wlserver_10.3 + +echo "Starting Node Manger" +nohup $WLS_HOME/server/bin/startNodeManager.sh > /dev/null 2>&1 & + +echo "Done!" diff --git a/timhall/weblogic/stop-domain.sh b/timhall/weblogic/stop-domain.sh new file mode 100644 index 0000000..8daf80b --- /dev/null +++ b/timhall/weblogic/stop-domain.sh @@ -0,0 +1,23 @@ +# ----------------------------------------------------------------------------------- +# File Name : https://oracle-base.com/dba/weblogic/stop-domain.sh +# Author : Tim Hall +# Description : Stops a WebLogic domain and managed server. +# Call Syntax : ./stop-domain.sh +# Last Modified: 15-JUN-2013 +# Notes : Amend DOMAIN_HOME and managed server name appropriately. +# ----------------------------------------------------------------------------------- + +export MW_HOME=/u01/app/oracle/middleware +export DOMAIN_HOME=$MW_HOME/user_projects/domains/clusterDomain + +echo "Stopping clusterServer_1" +$DOMAIN_HOME/bin/stopManagedWebLogic.sh clusterServer_1 + +echo "Stopping AdminServer" +$DOMAIN_HOME/bin/stopWebLogic.sh + +echo "Tidy up temp files" +find $DOMAIN_HOME/servers -name "*.lok" -exec rm -f {} \; +find $DOMAIN_HOME/servers -name "*.DAT" -exec rm -f {} \; + +echo "Done!" \ No newline at end of file diff --git a/timhall/weblogic/stop-forms-reports.sh b/timhall/weblogic/stop-forms-reports.sh new file mode 100644 index 0000000..e5feaf0 --- /dev/null +++ b/timhall/weblogic/stop-forms-reports.sh @@ -0,0 +1,28 @@ +# ----------------------------------------------------------------------------------- +# File Name : https://oracle-base.com/dba/weblogic/stop-forms-reports.sh +# Author : Tim Hall +# Description : Stop a WebLogic Forms and Reports Services installation. +# Call Syntax : ./stop-forms-reports.sh +# Last Modified: 15-JUN-2013 +# ----------------------------------------------------------------------------------- + +export MW_HOME=/u01/app/oracle/middleware +export DOMAIN_HOME=$MW_HOME/user_projects/domains/ClassicDomain +export FR_INST=$MW_HOME/asinst_1 + +echo "Stop OPMN processes" +$FR_INST/bin/opmnctl stopall + +echo "Stop WLS_FORMS" +$DOMAIN_HOME/bin/stopManagedWebLogic.sh WLS_FORMS +echo "Stop WLS_REPORTS" +$DOMAIN_HOME/bin/stopManagedWebLogic.sh WLS_REPORTS + +echo "Stop AdminServer" +$DOMAIN_HOME/bin/stopWebLogic.sh + +echo "Tidy up temp files" +find $DOMAIN_HOME/servers -name "*.lok" -exec rm -f {} \; +find $DOMAIN_HOME/servers -name "*.DAT" -exec rm -f {} \; + +echo "Done!" diff --git a/timhall/weblogic/stop-node-manager.sh b/timhall/weblogic/stop-node-manager.sh new file mode 100644 index 0000000..da3a24f --- /dev/null +++ b/timhall/weblogic/stop-node-manager.sh @@ -0,0 +1,10 @@ +# ----------------------------------------------------------------------------------- +# File Name : https://oracle-base.com/dba/weblogic/stop-node-manager.sh +# Author : Tim Hall +# Description : Stops the WebLogic Node Manager by killing the processes. +# Call Syntax : ./stop-node-manager.sh +# Last Modified: 15-JUN-2013 +# ----------------------------------------------------------------------------------- + +echo "Stopping Node Manger" +kill -9 `ps -ef | grep [N]odeManager | awk '{print $2}'` \ No newline at end of file diff --git a/tpt/.gitignore b/tpt/.gitignore new file mode 100644 index 0000000..a60fa35 --- /dev/null +++ b/tpt/.gitignore @@ -0,0 +1,25 @@ +# Logs +*.log +*.tmp +logs/* +tmp/* +!tmp/.gitkeep +!logs/.gitkeep + +# build files +*.pyc + +# OS generated files # +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# vim tmp files +**/*~ +*.swp +*.swo + diff --git a/tpt/46off.sql b/tpt/46off.sql new file mode 100644 index 0000000..2b22181 --- /dev/null +++ b/tpt/46off.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +alter session set events '10046 trace name context off' +/ diff --git a/tpt/46on.sql b/tpt/46on.sql new file mode 100644 index 0000000..312b7ec --- /dev/null +++ b/tpt/46on.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +alter session set events '10046 trace name context forever, level &1' +/ diff --git a/tpt/53off.sql b/tpt/53off.sql new file mode 100644 index 0000000..e54f5d1 --- /dev/null +++ b/tpt/53off.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt alter session set events '10053 trace name context off';; + +alter session set events '10053 trace name context off'; diff --git a/tpt/53on.sql b/tpt/53on.sql new file mode 100644 index 0000000..e6d20d5 --- /dev/null +++ b/tpt/53on.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt alter session set events '10053 trace name context forever, level 1';; +prompt alter session set "_optimizer_trace"=all;; + +alter session set events '10053 trace name context forever, level 1'; +alter session set "_optimizer_trace"=all; diff --git a/tpt/53trace.sql b/tpt/53trace.sql new file mode 100644 index 0000000..c0b46eb --- /dev/null +++ b/tpt/53trace.sql @@ -0,0 +1,41 @@ +/* + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Purpose: + + generate an optimizer trace from the cursor cache. Removes the need to + purge the cursor or force a hard parse +*/ + +PRO +PRO Generate an optimizer trace from the cursor cache +PRO + +ACC v_sql_id PROMPT 'Enter your SQL ID: ' + +PRO checking cursor cache for SQL ID &v_sql_id + +select sql_id, plan_hash_value, child_number from gv$sql where sql_id = '&v_sql_id'; + +ACC v_child_number PROMPT 'Enter the child cursor number: ' + +BEGIN + sys.DBMS_SQLDIAG.DUMP_TRACE( + p_sql_id => '&v_sql_id', + p_child_number => &v_child_number, + p_component => 'Compiler' + ); +END; +/ + +select 'Trace file: ' || value tracefile from v$diag_info where name like 'Def%'; \ No newline at end of file diff --git a/tpt/LICENSE.txt b/tpt/LICENSE.txt new file mode 100644 index 0000000..fd75510 --- /dev/null +++ b/tpt/LICENSE.txt @@ -0,0 +1,220 @@ + Copyright 2018 Tanel Poder + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + + + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/tpt/README.md b/tpt/README.md new file mode 100644 index 0000000..c95dd63 --- /dev/null +++ b/tpt/README.md @@ -0,0 +1,15 @@ +# Tanel Poder's Troubleshooting Scripts (TPT) + +These sqlplus scripts are for Oracle Database performance optimization & troubleshooting. +Most of the scripts should be runnable directly from SQL Developer too. + +### Getting Started & Videos + +To get an idea of how I set up my client environment and use some of my main Oracle-related scripts, check out the videos here: + +* [https://www.youtube.com/tanelpoder](https://www.youtube.com/tanelpoder) + +Also you can follow me in Twitter as I'll post any noteworthy updates there: + +* [https://twitter.com/tanelpoder](https://twitter.com/tanelpoder) + diff --git a/tpt/a.sql b/tpt/a.sql new file mode 100644 index 0000000..fdfa4d7 --- /dev/null +++ b/tpt/a.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt A-Script: Display CURRENT active sessions... + +select + count(*) + , sql_id + , case state when 'WAITING' then 'WAITING' else 'ON CPU' end state + , case state when 'WAITING' then event else 'On CPU / runqueue' end event +from + v$session +where + status='ACTIVE' +and type !='BACKGROUND' +and wait_class != 'Idle' +and sid != (select sid from v$mystat where rownum=1) +group by + sql_id + , case state when 'WAITING' then 'WAITING' else 'ON CPU' end + , case state when 'WAITING' then event else 'On CPU / runqueue' end +order by + count(*) desc +/ + diff --git a/tpt/acc.sql b/tpt/acc.sql new file mode 100644 index 0000000..5a074c6 --- /dev/null +++ b/tpt/acc.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt alter session set session_cached_cursors=&1;; +alter session set session_cached_cursors=&1 +/ diff --git a/tpt/alog.sql b/tpt/alog.sql new file mode 100644 index 0000000..c0c1ad0 --- /dev/null +++ b/tpt/alog.sql @@ -0,0 +1,12 @@ +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL originating_timestamp FOR a25 +COL message_text FOR a100 + +SELECT to_char(originating_timestamp, 'yyyy-mm-dd hh24:mi:ss') AS originating_timestamp, message_text, container_name +FROM v$diag_alert_ext +WHERE component_id = 'rdbms' +AND originating_timestamp BETWEEN &1 AND &2 +ORDER BY originating_timestamp; + +CLEAR COLUMNS diff --git a/tpt/aon.sql b/tpt/aon.sql new file mode 100644 index 0000000..fc29660 --- /dev/null +++ b/tpt/aon.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set autotrace trace stat + diff --git a/tpt/aot/06_libcache_deadlock.sql b/tpt/aot/06_libcache_deadlock.sql new file mode 100644 index 0000000..4341161 --- /dev/null +++ b/tpt/aot/06_libcache_deadlock.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Script written based on Alex Nuijten's finding: +-- http://nuijten.blogspot.com/2015/06/deadlock-with-virtual-column.html +-- +-- This should be reproducible all the way up to 12.1.0.2 versions (like the Oracle 12cR1 Developer VM) + +DROP TABLE t_dl; +CREATE TABLE t_dl AS SELECT dummy a, rownum b FROM dual; + +CREATE OR REPLACE FUNCTION VC (p_a in t_dl.a%TYPE ,p_b in t_dl.b%TYPE) RETURN VARCHAR2 DETERMINISTIC +IS +BEGIN + RETURN p_a || p_b; +END vc; +/ + +ALTER TABLE t_dl ADD c AS (vc (a, b)); + +TRUNCATE TABLE t_dl; + + +-- Back in Oracle 9i days you could have used this too (not anymore): + +-- SQL> CREATE OR REPLACE PROCEDURE p1 AS BEGIN p2; END; +-- 2 / +-- +-- Warning: Procedure created with compilation errors. +-- +-- SQL> +-- SQL> CREATE OR REPLACE PROCEDURE p2 AS BEGIN p1; END; +-- 2 / +-- +-- Warning: Procedure created with compilation errors. +-- +-- SQL> ALTER PROCEDURE p1 COMPILE; +-- ALTER PROCEDURE p1 COMPILE +-- * +-- ERROR at line 1: +-- ORA-04020: deadlock detected while trying to lock object SYS.P1 + diff --git a/tpt/aot/06_self_deadlock.sql b/tpt/aot/06_self_deadlock.sql new file mode 100644 index 0000000..60ff22a --- /dev/null +++ b/tpt/aot/06_self_deadlock.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET TIMING ON + +DROP TABLE t_lock; +CREATE TABLE t_lock AS SELECT * FROM dual; + +@pd enqueue_deadlock + +DECLARE + PROCEDURE p IS + PRAGMA AUTONOMOUS_TRANSACTION; + j VARCHAR2(100); + BEGIN + --UPDATE t_lock SET dummy = 'Z'; + SELECT dummy INTO j FROM t_lock FOR UPDATE WAIT 6; + END; +BEGIN + UPDATE t_lock SET dummy = 'Z'; + p(); +END; +/ diff --git a/tpt/aot/README.txt b/tpt/aot/README.txt new file mode 100644 index 0000000..4158694 --- /dev/null +++ b/tpt/aot/README.txt @@ -0,0 +1,7 @@ +Advanced Oracle Troubleshooting course scripts by Tanel Poder + +DON'T JUST RUN THE SCRIPTS HERE WITHOUT CHECKING WHAT THEY DO! +DON'T TEST THESE SCRIPTS IN PRODUCTION! + +These scripts are designed to cause trouble, so that they could be troubleshooted. + diff --git a/tpt/aot/bh_private.sql b/tpt/aot/bh_private.sql new file mode 100644 index 0000000..a731f39 --- /dev/null +++ b/tpt/aot/bh_private.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col bhla_object head object for a40 truncate +col bhla_DBA head DBA for a20 +col flg_lruflg head "FLAG:LRUFLAG" + +select /*+ ORDERED */ + trim(to_char(bh.flag, 'XXXXXXXX')) ||':'|| + trim(to_char(bh.lru_flag, 'XXXXXXXX')) flg_lruflg, + bh.obj, + o.object_type, + o.owner||'.'||o.object_name bhla_object, + bh.tch, + file# ||' '||dbablk bhla_DBA, + bh.class, + bh.state, + bh.mode_held, + bh.dirty_queue DQ +from + x$bh bh, + dba_objects o +where + bh.obj = o.data_object_id +and bitand(flag,8)=8 +order by + tch asc +/ diff --git a/tpt/aot/bigcomment.sql b/tpt/aot/bigcomment.sql new file mode 100644 index 0000000..5be9904 --- /dev/null +++ b/tpt/aot/bigcomment.sql @@ -0,0 +1,4105 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE OR REPLACE PROCEDURE bigp AS + i NUMBER := 0; +BEGIN + i := i + 1; + /* comment + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + */ +END; +/ + diff --git a/tpt/aot/bigp.sql b/tpt/aot/bigp.sql new file mode 100644 index 0000000..dd2f177 --- /dev/null +++ b/tpt/aot/bigp.sql @@ -0,0 +1,14713 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE OR REPLACE PROCEDURE bigp AS + i NUMBER := 0; +BEGIN + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; i := i + 1; + +END; +/ + diff --git a/tpt/aot/bigsql.sql b/tpt/aot/bigsql.sql new file mode 100644 index 0000000..ed9a672 --- /dev/null +++ b/tpt/aot/bigsql.sql @@ -0,0 +1,469 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DELETE FROM t +WHERE 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 OR 1=1 +/ + diff --git a/tpt/aot/cbchammer.sh b/tpt/aot/cbchammer.sh new file mode 100644 index 0000000..c53f9fc --- /dev/null +++ b/tpt/aot/cbchammer.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +# usage: ./cbchammer + +# schema creation: +# +# CREATE TABLE cbchammer (a INT); +# INSERT INTO cbchammer VALUES (1); +# INSERT INTO cbchammer VALUES (2); +# COMMIT; +# EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'CBCHAMMER') + + +CONN=system/oracle@linux01/linprd + + +SQL_CMD=" +CONNECT $CONN +ALTER SESSION SET plsql_optimize_level = 0; +DECLARE + x NUMBER; +BEGIN + FOR I IN 1 .. $1 LOOP + SELECT a INTO x FROM cbchammer WHERE ROWNUM = 1; + END LOOP; +END; +/ +" + +while true +do + #printf "$SQL_CMD" + printf "$SQL_CMD" | sqlplus -s /nolog + #sleep 0.1 +done + diff --git a/tpt/aot/cbchammer2.sh b/tpt/aot/cbchammer2.sh new file mode 100644 index 0000000..80778a9 --- /dev/null +++ b/tpt/aot/cbchammer2.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +# usage: ./cbchammer2 +# notes: +# the updated version will do an exclusive CBC get every 1000 loop iterations for long-running tasks +# so if you schedule only 1000 loop iterations per connect, these guys will do just shared gets +# after 1000th iteration we consider the task long running and they will start doing a select for update +# with exclusive CBC get every 1000 iterations +# +# schema creation: +# +# CREATE TABLE cbchammer (a INT); +# INSERT INTO cbchammer VALUES (1); +# INSERT INTO cbchammer VALUES (2); +# COMMIT; +# EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'CBCHAMMER') + + +CONN=system/oracle@linux01/linprd + + +SQL_CMD=" +CONNECT $CONN +ALTER SESSION SET plsql_optimize_level = 0; +DECLARE + x NUMBER; +BEGIN + FOR i IN 1 .. $1 LOOP + IF i / 1000 <= 1 THEN + SELECT a INTO x FROM cbchammer WHERE a = 1; + ELSE + IF MOD(i,1000) = 0 THEN + SELECT a INTO x FROM cbchammer WHERE a = 2 FOR UPDATE; + COMMIT WRITE NOWAIT; + ELSE + SELECT a INTO x FROM cbchammer WHERE a = 1; + END IF; + END IF; + END LOOP; +END; +/ +" + +while true +do + #printf "$SQL_CMD" + printf "$SQL_CMD" | sqlplus -s /nolog + #sleep 0.1 +done + diff --git a/tpt/aot/demo1.sql b/tpt/aot/demo1.sql new file mode 100644 index 0000000..92b4be3 --- /dev/null +++ b/tpt/aot/demo1.sql @@ -0,0 +1,103 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demo1.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- Depending on the speed of LGWR IO will cause the session to wait +-- for log buffer space and log switch wait events (demo works +-- ok on a single hard disk laptop, probably will not wait so much +-- on a server with write cached storage) +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- Copyright: (c) Tanel Poder +-- +-------------------------------------------------------------------------------- + +prompt Initializing Demo1... + +set feedback off termout off + +drop table t; +drop table t2; + +create table t tablespace users as select * from dba_source; +create table t2 tablespace users as select * from dba_source where 1=0; + +alter system switch logfile; +alter system switch logfile; + +set termout on +--prompt Taking Statspack report... +--EXEC statspack.snap + +prompt Starting Demo1 (running a "batch job") +set termout off + +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; + +commit; + +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; + +commit; + +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; +insert into t2 select * from t; + +commit; + + +set termout on + +prompt "Batch job" finished... +--prompt Taking Statspack report... +--EXEC statspack.snap + + diff --git a/tpt/aot/demo11.sql b/tpt/aot/demo11.sql new file mode 100644 index 0000000..e94af12 --- /dev/null +++ b/tpt/aot/demo11.sql @@ -0,0 +1,55 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Bug 12345717 - ORA-600 [13013] or hang/spin from MERGE into table with added column [ID 12345717.8] +-- +-- ORA-600 [13013] can occur when executing a MERGE statement +-- with an UPDATE clause into a table which has had an ADD COLUMN +-- executed against it with a DEFAULT value with add column +-- optimization enabled. +-- +-- +-- Rediscovery Notes: +-- ORA-600 [13013] on a MERGE SQL. +-- In some cases this problem can also show up as a spin +-- executing a MERGE SQL against a table with an added column. +-- +-- In both cases the problem can occur only if the target table has +-- a NOT NULL added column with a default value. +-- You can check this with SQL of the form below which shows such columns: +-- select owner, object_name, name +-- from dba_objects, col$ +-- where bitand(col$.PROPERTY,1073741824)=1073741824 +-- and object_id=obj#; +-- +-- Workaround +-- Set _add_col_optim_enabled=false before adding columns +-- (this can cause the ADD COLUMN DDL to take longer as +-- all rows need updating) +-- For existing tables set the parameter then rebuild the table +-- to remove any existing optimized columns. + +-- DROP TABLE tab1; +-- DROP TABLE tab2; + +CREATE TABLE TAB1 ( ID_NACE NUMBER(5) ); + ALTER TABLE TAB1 ADD ( + ID_INDUSTRY NUMBER(5) DEFAULT -1 NOT NULL + ); + insert into TAB1 values(1, 1); + insert into TAB1 values(2, 2); + + CREATE TABLE TAB2 ( + ID_NACE NUMBER(5), + ID_INDUSTRY NUMBER(5) + ); + insert into TAB2 values(1, 3); + commit; + +MERGE /*+ LEADING(c) */ + INTO TAB1 c + USING (SELECT * from TAB2 b) a + ON (c.id_nace=a.id_nace) + WHEN matched THEN + UPDATE SET c.ID_INDUSTRY=a.ID_INDUSTRY; + diff --git a/tpt/aot/demo1a.sql b/tpt/aot/demo1a.sql new file mode 100644 index 0000000..4825b11 --- /dev/null +++ b/tpt/aot/demo1a.sql @@ -0,0 +1,36 @@ +-- demo1 +-- the idea is to show that "slow sessions" do not always spend majority of time +-- actively working in the database, but spend time waiting for the application +-- to send the next command (application think time) + +SET TIMING ON +SET ARRAYSIZE 15 +SET APPINFO ON + +PROMPT Running Report... +SET AUTOTRACE TRACE STAT + +-- a "simple report" that returns lots of records +SELECT * FROM soe.customers WHERE credit_limit > 10; + +--SELECT /*+ NO_PARALLEL */ +-- c.customer_id +-- , c.cust_first_name ||' '||c.cust_last_name +-- , c.credit_limit +--FROM +-- soe.orders o +-- , soe.order_items oi +-- , soe.customers c +--WHERE +---- join conditions +-- c.customer_id = o.customer_id +--AND o.order_id = oi.order_id +---- constant filter conditions +--AND c.customer_id BETWEEN 100000 AND 200000 +----AND c.dob BETWEEN DATE'2000-01-01' AND DATE'2001-01-01' +--AND o.order_mode = 'online' +--AND o.order_status = 5 +--/ + +SET AUTOTRACE OFF + diff --git a/tpt/aot/demo2.sql b/tpt/aot/demo2.sql new file mode 100644 index 0000000..69ff9c7 --- /dev/null +++ b/tpt/aot/demo2.sql @@ -0,0 +1,106 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demo2.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- Makes a single fetch to generate lots of LIOs by +-- nested looping over full table scans. +-- Requires lotslios.sql script from TPT scripts. +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- Copyright: (c) Tanel Poder +-- +-------------------------------------------------------------------------------- + +prompt Starting Demo2... + +-- @@lotslios 1000000000000 + +-------------------------------------------------------------------------------- +-- +-- File name: demos/bind_peeking_nested_loops.sql +-- Purpose: this script demos how a "wrong" bind variable value +-- can cause an execution plan to be compiled which is +-- very inefficient for the next execution with different bind variable +-- values (with large number of matching rows) +-- the second execution of the query takes very long time to complete +-- despite adaptive bind variable peeking, which would kick in during the +-- next (3rd) execution +-- +-- This problem happens even on Oracle 11.2 despite adaptive bind peeking +-- and cardinality feedback (due design, not a bug) +-- +-- Author: Tanel Poder (tanel@e2sn.com) +-- Copyright: (c) http://tech.e2sn.com +-- +-------------------------------------------------------------------------------- + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; + +CREATE TABLE t1 AS SELECT * FROM dba_objects; +CREATE TABLE t2 AS SELECT * FROM dba_objects; +CREATE TABLE t3 AS SELECT * FROM dba_objects; + +CREATE INDEX i1 ON t1(owner); +CREATE INDEX i2 ON t2(owner); +CREATE INDEX i3 ON t3(owner); + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); + +ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=1; + +VAR v VARCHAR2(100) + +EXEC :v:='SCOTT' + +SET TIMING ON + +--PROMPT Running query first time, this should be fast (and should use nested loops execution plan) + +SELECT + MIN(t1.created), MAX(t1.created) +FROM + t1 + , t2 + , t3 +WHERE + t1.object_id = t2.object_id +AND t2.object_id = t3.object_id +AND t1.owner = :v +AND t2.owner = :v +AND t3.owner = :v +/ + +SET TIMING OFF + +--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST ADVANCED')); +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null)); + +EXEC :v:='SYS' + +SET TIMING ON + +PROMPT Running the "report"... +--PROMPT Now running the same query with different bind variables (this query should take very long time) + +SELECT + MIN(t1.created), MAX(t1.created) +FROM + t1 + , t2 + , t3 +WHERE + t1.object_id = t2.object_id +AND t2.object_id = t3.object_id +AND t1.owner = :v +AND t2.owner = :v +AND t3.owner = :v +/ + diff --git a/tpt/aot/demo2a.sql b/tpt/aot/demo2a.sql new file mode 100644 index 0000000..976d38b --- /dev/null +++ b/tpt/aot/demo2a.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demo2a.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- Will cause some recursive dynamic sampling activity +-- that does not show up in V$SESSION and ASH +-- +-- Uses SwingBench Order Entry schema table (but you can use +-- any other large table for testing this effect). +-- +-- Requires Oracle 11.2 or lower (12c works slightly differently) +-- +-- Author: Tanel Poder ( http://tanelpoder.com ) +-- Copyright: (c) Tanel Poder +-- +-------------------------------------------------------------------------------- + +prompt Starting Demo2a... + +set echo on + +ALTER SYSTEM FLUSH SHARED_POOL; + +SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1; +SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1; +SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1; + +ALTER SYSTEM FLUSH SHARED_POOL; + +SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1; +SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1; +SELECT /*+ DYNAMIC_SAMPLING(o 10) */ * FROM soe.order_items o WHERE order_id = 1; + +set echo off + diff --git a/tpt/aot/demo3.sql b/tpt/aot/demo3.sql new file mode 100644 index 0000000..4212c4e --- /dev/null +++ b/tpt/aot/demo3.sql @@ -0,0 +1,52 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demo3.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- Causes a session hang by reading from external table +-- which in turn reads from a Unix named pipe. Before 11.1.0.7 +-- this wait was uninstrumented. +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- Copyright: (c) Tanel Poder +-- +-- Notes: Meant to be executed from an Unix/Linux Oracle DB server +-- +-------------------------------------------------------------------------------- + +prompt Running demo3... + +set feedback off termout off + +CREATE OR REPLACE DIRECTORY mydir AS '/tmp'; + +host rm -f /tmp/myfile + +host mknod /tmp/myfile p + +DROP TABLE mytab; + +CREATE TABLE mytab ( + a int +) +ORGANIZATION EXTERNAL ( + TYPE oracle_loader + DEFAULT DIRECTORY mydir + ACCESS PARAMETERS ( + RECORDS DELIMITED BY NEWLINE + FIELDS TERMINATED BY ',' + (a) + ) + LOCATION ('myfile') +) +/ + +select * from mytab; + +set feedback on termout on + +drop table mytab; + diff --git a/tpt/aot/demo4.sql b/tpt/aot/demo4.sql new file mode 100644 index 0000000..ec79df9 --- /dev/null +++ b/tpt/aot/demo4.sql @@ -0,0 +1,131 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demo4.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- Causes optimizer to loop in CBO code for very long time +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- Copyright: (c) Tanel Poder +-- +-------------------------------------------------------------------------------- + +prompt Starting demo4... + +set termout off feedback off + +drop table t; + +create table t as select * from all_objects where 1=0; + +exec dbms_stats.gather_table_stats(user,'T'); +alter session set "_optimizer_search_limit"=100; + +select * +from + t t1 +,t t2 +,t t3 +,t t4 +,t t5 +,t t6 +,t t7 +,t t8 +,t t9 +,t t10 +,t t11 +,t t12 +,t t13 +,t t14 +,t t15 +,t t16 +,t t17 +,t t18 +,t t19 +,t t20 +,t t21 +,t t22 +,t t23 +,t t24 +,t t25 +,t t26 +,t t27 +,t t28 +,t t29 +,t t30 +,t t31 +,t t32 +,t t33 +,t t34 +,t t35 +,t t36 +,t t37 +,t t38 +,t t39 +,t t40 +,t t41 +,t t42 +,t t43 +,t t44 +,t t45 +,t t46 +,t t47 +,t t48 +,t t49 +,t t50 +,t t51 +,t t52 +,t t53 +,t t54 +,t t55 +,t t56 +,t t57 +,t t58 +,t t59 +,t t60 +,t t61 +,t t62 +,t t63 +,t t64 +,t t65 +,t t66 +,t t67 +,t t68 +,t t69 +,t t70 +,t t71 +,t t72 +,t t73 +,t t74 +,t t75 +,t t76 +,t t77 +,t t78 +,t t79 +,t t80 +,t t81 +,t t82 +,t t83 +,t t84 +,t t85 +,t t86 +,t t87 +,t t88 +,t t89 +,t t90 +,t t91 +,t t92 +,t t93 +,t t94 +,t t95 +,t t96 +,t t97 +,t t98 +,t t99 +/ + +set termout on feedback on + diff --git a/tpt/aot/demo4_ora600.sql b/tpt/aot/demo4_ora600.sql new file mode 100644 index 0000000..1bc629b --- /dev/null +++ b/tpt/aot/demo4_ora600.sql @@ -0,0 +1,131 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demo4_ora600.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- Causes optimizer to loop in CBO code for very long time +-- OR an ORA-600 crash on Oracle 12.1.0.2 (fixed in 12.2) +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- Copyright: (c) Tanel Poder +-- +-------------------------------------------------------------------------------- + +prompt Starting demo4... + +drop table t; + +-- use this (table with a number of rows) for ORA-600 testing on 12.1.0.2 +create table t as select * from all_objects; + +exec dbms_stats.gather_table_stats(user,'T'); +alter session set "_optimizer_search_limit"=100; + +select * +from + t t1 +,t t2 +,t t3 +,t t4 +,t t5 +,t t6 +,t t7 +,t t8 +,t t9 +,t t10 +,t t11 +,t t12 +,t t13 +,t t14 +,t t15 +,t t16 +,t t17 +,t t18 +,t t19 +,t t20 +,t t21 +,t t22 +,t t23 +,t t24 +,t t25 +,t t26 +,t t27 +,t t28 +,t t29 +,t t30 +,t t31 +,t t32 +,t t33 +,t t34 +,t t35 +,t t36 +,t t37 +,t t38 +,t t39 +,t t40 +,t t41 +,t t42 +,t t43 +,t t44 +,t t45 +,t t46 +,t t47 +,t t48 +,t t49 +,t t50 +,t t51 +,t t52 +,t t53 +,t t54 +,t t55 +,t t56 +,t t57 +,t t58 +,t t59 +,t t60 +,t t61 +,t t62 +,t t63 +,t t64 +,t t65 +,t t66 +,t t67 +,t t68 +,t t69 +,t t70 +,t t71 +,t t72 +,t t73 +,t t74 +,t t75 +,t t76 +,t t77 +,t t78 +,t t79 +,t t80 +,t t81 +,t t82 +,t t83 +,t t84 +,t t85 +,t t86 +,t t87 +,t t88 +,t t89 +,t t90 +,t t91 +,t t92 +,t t93 +,t t94 +,t t95 +,t t96 +,t t97 +,t t98 +,t t99 +/ + +set termout on feedback on + diff --git a/tpt/aot/demo5.sql b/tpt/aot/demo5.sql new file mode 100644 index 0000000..b003dc4 --- /dev/null +++ b/tpt/aot/demo5.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demo5.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- Causes a session hang by creating a pipe instead of a tracefile +-- and enabling tracing then +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- Copyright: (c) Tanel Poder +-- +-- Notes: Meant to be executed from an Unix/Linux Oracle DB server +-- Requires the TPT toolset login.sql to be executed (via putting +-- TPT directory into SQLPATH) so that &trc variable would be +-- initialized with tracefile name. +-- +-------------------------------------------------------------------------------- + +prompt Starting demo5... + +host mknod &trc p + +alter session set sql_trace=true; + +select * from dual; + diff --git a/tpt/aot/demo6.sql b/tpt/aot/demo6.sql new file mode 100644 index 0000000..2e9780b --- /dev/null +++ b/tpt/aot/demo6.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- on 10.2.0.1 +-- doesn't work in all cases... + +set feedback off termout off +alter session set optimizer_mode=first_rows; + +select * from dba_lock_internal; + +set feedback on termout on diff --git a/tpt/aot/demo7.sql b/tpt/aot/demo7.sql new file mode 100644 index 0000000..02e4fce --- /dev/null +++ b/tpt/aot/demo7.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- from metalink bug 2456257 + +-- drop table fact; + +create table fact ( +id number primary key, +col01 number, col02 number, col03 number, col04 number, +col05 number, col06 number, col07 number, col08 number, +col09 number, col10 number, col11 number, col12 number, +col13 number, col14 number, col15 number, col16 number, +col17 number, col18 number, col19 number, col20 number, +dat01 number, dat02 number, dat03 number, dat04 number, +dat05 number, dat06 number, dat07 number, dat08 number, +dat09 number, dat10 number +); + + +select +id, +col01, col02, col03, col04, col05, col06, col07, col08, col09, col10, +col11, col12, col13, col14, col15, col16, col17, col18, col19, col20, +sum(dat01), sum(dat02), sum(dat03), sum(dat04), sum(dat05), +sum(dat06), sum(dat07), sum(dat08), sum(dat09), sum(dat10) +from +fact +group by cube ( id, +col01, col02, col03, col04, col05, col06, col07, col08, col09, col10, +col11, col12, col13, col14, col15, col16, col17, col18, col19, col20 +); + diff --git a/tpt/aot/demo8.sql b/tpt/aot/demo8.sql new file mode 100644 index 0000000..c0e3e9d --- /dev/null +++ b/tpt/aot/demo8.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- test case from http://forums.oracle.com/forums/thread.jspa?threadID=2228426 +-- +-- When I choose a high_value > 100000 the grouping query runs < 1 sec. +-- With high_value = 100000: < 1 sec +-- With high_value = 90000: < 1 sec +-- With high_value = 80000: 3 sec +-- With high_value = 70000: 9 sec +-- With high_value = 60000: 17 sec +-- With high_value = 50000: 28 sec +-- With high_value = 40000: 34 sec +-- With high_value = 30000: 47 sec +-- With high_value = 20000: 61 sec +-- With high_value = 10000: 76 sec +-- With high_value = 1: 102 sec + + + +set verify off +undefine high_value + +drop table test_interval_p1_&&high_value; + +create table test_interval_p1_&high_value + partition by range (id) + interval (1) + (partition test_p1 values less than (&high_value)) +as +select 100000 id + , t.* + from all_objects t + where 1 = 0; + +insert into test_interval_p1_&high_value +select 100000 id + , t.* + from all_objects t; + +commit; + +-- pause + +select id, count(*) + from test_interval_p1_&high_value + group by id; + diff --git a/tpt/aot/demo9.sql b/tpt/aot/demo9.sql new file mode 100644 index 0000000..fc28eeb --- /dev/null +++ b/tpt/aot/demo9.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +drop table a; +drop table b; + +create table A(col11 number, col12 number); +create table B(col21 number, col22 number); + +insert into a values (-3,-7); +insert into a values (null,-1); +insert into b values ( -7,-3); + +update a set col11 = + (select avg(b.col22) keep (dense_rank first order by (col22)) + FROM b where b.col21= a.col12) +/ + diff --git a/tpt/aot/disable_throttle.sh b/tpt/aot/disable_throttle.sh new file mode 100644 index 0000000..a9e74e8 --- /dev/null +++ b/tpt/aot/disable_throttle.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Copyright 2020 Tanel Poder. All rights reserved. +# Licensed under the Apache License, Version 2.0. + +# Purpose: disable I/O throttling for a block device using cgroups +# +# Usage: find block device major:minor numbers using ls -l /dev or lsblk +# ./disable_throttle.sh +# ./disable_throttle.sh 259:3 +# +# More info at https://tanelpoder.com + +DEVICE_ID=$1 +DEVICE_IOPS=0 +DEVICE_BPS=0 + +echo $DEVICE_ID $DEVICE_IOPS > /sys/fs/cgroup/blkio/blkio.throttle.write_iops_device +echo $DEVICE_ID $DEVICE_IOPS > /sys/fs/cgroup/blkio/blkio.throttle.read_iops_device + +echo $DEVICE_ID $DEVICE_BPS > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device +echo $DEVICE_ID $DEVICE_BPS > /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device + +grep . /sys/fs/cgroup/blkio/blkio.throttle*device + diff --git a/tpt/aot/enable_throttle.sh b/tpt/aot/enable_throttle.sh new file mode 100644 index 0000000..381b18b --- /dev/null +++ b/tpt/aot/enable_throttle.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Copyright 2020 Tanel Poder. All rights reserved. +# Licensed under the Apache License, Version 2.0. + +# Purpose: enable I/O throttling for a block device using cgroups +# +# Usage: find block device major:minor numbers using ls -l /dev or lsblk +# ./enable_throttle.sh +# ./enable_throttle.sh 259:3 500 100000000 +# +# More info at https://tanelpoder.com + +DEVICE_ID=$1 +DEVICE_IOPS=$2 +DEVICE_BPS=$3 + +echo $DEVICE_ID $DEVICE_IOPS > /sys/fs/cgroup/blkio/blkio.throttle.write_iops_device +echo $DEVICE_ID $DEVICE_IOPS > /sys/fs/cgroup/blkio/blkio.throttle.read_iops_device + +echo $DEVICE_ID $DEVICE_BPS > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device +echo $DEVICE_ID $DEVICE_BPS > /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device + +grep . /sys/fs/cgroup/blkio/blkio.throttle*device + diff --git a/tpt/aot/failed_parse_loop.sql b/tpt/aot/failed_parse_loop.sql new file mode 100644 index 0000000..2f56396 --- /dev/null +++ b/tpt/aot/failed_parse_loop.sql @@ -0,0 +1,13 @@ +-- ALTER SESSION SET plsql_optimize_level=0; + +VAR n NUMBER +BEGIN + LOOP + BEGIN + EXECUTE IMMEDIATE 'select count(*) into :n from nonexistent'||TO_CHAR(ROUND(DBMS_RANDOM.VALUE(1,1000000))); + EXCEPTION WHEN OTHERS THEN NULL; + END; + END LOOP; +END; +/ + diff --git a/tpt/aot/fatal_bg_proc.sql b/tpt/aot/fatal_bg_proc.sql new file mode 100644 index 0000000..e81ac04 --- /dev/null +++ b/tpt/aot/fatal_bg_proc.sql @@ -0,0 +1,9 @@ +-- a simple script for (hopefully) showing just the "fatal" background +-- processes. when these processes disappear, it will bring the whole +-- database instance down. other processes are typically just restarted + +SELECT indx,ksuprpnm,TO_CHAR(ksuprflg,'XXXXXXXXXXXXXXXX') +FROM x$ksupr +WHERE BITAND(ksuprflg,4) = 4 ORDER BY indx +/ + diff --git a/tpt/aot/fulltrace.sql b/tpt/aot/fulltrace.sql new file mode 100644 index 0000000..f3b7f65 --- /dev/null +++ b/tpt/aot/fulltrace.sql @@ -0,0 +1,30 @@ +EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(binds=>TRUE, waits=>TRUE); +ALTER SESSION SET EVENTS '10051 trace name context forever, level 1'; +ORADEBUG SETMYPID +ORADEBUG TRACEFILE_NAME +-- ORA-10079: trace data sent/received via SQL*Net +ORADEBUG EVENT 10079 TRACE NAME CONTEXT FOREVER, LEVEL 1; + +-- looks like this event disabled in newer Oracle versions when using ALTER SESSION: +-- +-- SQL> ALTER SESSION SET EVENTS '10079 trace name context forever, level 1'; +-- ERROR: +-- ORA-01031: insufficient privileges +-- +-- This is to prevent users with a simple ALTER SESSION privilege from setting +-- events that could expose sensitive data or crash/hang the system +-- MOS note: ORA-1031 When Setting The Event 10079 (or how to set event 10079 in session) (Doc ID 2199860.1) +-- +-- An alternative would be to use: +-- ORADEBUG SETMYPID +-- ORADEBUG DUMP SQLNET_SERVER_TRACE 16 + +-- trace wait event stack traces (this will slow stuff down) +-- +-- ALTER SESSION SET EVENTS 'wait_event[all] trace(''event="%" ela=% p1=% p2=% p3=%\n'', evargs(5), evargn(1), evargn(2), evargn(3), evargn(4))'; + +-- trace enqueue gets (ksq) +-- ALTER SESSION SET EVENTS '10704 trace name context forever, level 4'; + +-- trace rowcache gets (kqr) +-- ALTER SESSION SET EVENTS '10222 trace name context forever, level 15'; diff --git a/tpt/aot/hang.sh b/tpt/aot/hang.sh new file mode 100644 index 0000000..4078be9 --- /dev/null +++ b/tpt/aot/hang.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +sqlplus $1 @hang_1.sql & +sleep 3 +sqlplus $1 @hang_2.sql & +sleep 3 +sqlplus $1 @hang_3.sql & +sleep 3 +sqlplus $1 @hang_4.sql & + diff --git a/tpt/aot/hang_1.sql b/tpt/aot/hang_1.sql new file mode 100644 index 0000000..d64f327 --- /dev/null +++ b/tpt/aot/hang_1.sql @@ -0,0 +1,3 @@ +DELETE FROM t1 WHERE rownum = 1; + +EXEC dbms_lock.sleep(9999999) diff --git a/tpt/aot/hang_2.sql b/tpt/aot/hang_2.sql new file mode 100644 index 0000000..5fa0714 --- /dev/null +++ b/tpt/aot/hang_2.sql @@ -0,0 +1,4 @@ +DELETE FROM t2 WHERE rownum = 1; +LOCK TABLE t3 IN SHARE MODE; +DELETE FROM t1; + diff --git a/tpt/aot/hang_3.sql b/tpt/aot/hang_3.sql new file mode 100644 index 0000000..da8b9f4 --- /dev/null +++ b/tpt/aot/hang_3.sql @@ -0,0 +1,2 @@ +UPDATE t4 SET owner = 'X' WHERE rownum <= 100; +UPDATE t3 SET owner = 'X' WHERE rownum <= 100; diff --git a/tpt/aot/hang_4.sql b/tpt/aot/hang_4.sql new file mode 100644 index 0000000..b41cbd4 --- /dev/null +++ b/tpt/aot/hang_4.sql @@ -0,0 +1 @@ +UPDATE t4 SET object_id = object_id + 1 WHERE object_id = 500; diff --git a/tpt/aot/hang_run.sql b/tpt/aot/hang_run.sql new file mode 100644 index 0000000..ffdc648 --- /dev/null +++ b/tpt/aot/hang_run.sql @@ -0,0 +1 @@ +@&1 diff --git a/tpt/aot/hang_setup.sql b/tpt/aot/hang_setup.sql new file mode 100644 index 0000000..e64a8d2 --- /dev/null +++ b/tpt/aot/hang_setup.sql @@ -0,0 +1,15 @@ +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; +DROP TABLE t5; + +CREATE TABLE t1 AS SELECT * FROM dba_objects WHERE object_id IS NOT NULL; +CREATE TABLE t2 AS SELECT * FROM t1; +CREATE TABLE t3 AS SELECT * FROM t1; +CREATE TABLE t4 AS SELECT * FROM t1; +CREATE TABLE t5 AS SELECT * FROM t1; + +ALTER TABLE t1 ADD PRIMARY KEY (object_id); + + diff --git a/tpt/aot/hash.sql b/tpt/aot/hash.sql new file mode 100644 index 0000000..1e4b7c3 --- /dev/null +++ b/tpt/aot/hash.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col aot_hash_owner head OWNER for a12 +col aot_hash_name head NAME word_wrap for a30 +col aot_hash_dblink head DBLINK for a12 + +SELECT + kglnaown aot_hash_OWNER + , kglnaobj aot_hash_NAME + , kglnadlk aot_hash_DBLINK + , kglnahsh HASH_VALUE + , TO_CHAR(kglnahsh, 'xxxxxxxx') HASH_HEX + , kglnahsv MD5_HASH + , kglobt03 SQL_ID + , kglobt30 PLAN_HASH + , kglobt31 LIT_HASH + , kglobt46 OLD_HASH +FROM + x$kglob +WHERE + lower(kglnaobj) like lower('&1') +/ diff --git a/tpt/aot/hash_demo.sql b/tpt/aot/hash_demo.sql new file mode 100644 index 0000000..811ffc6 --- /dev/null +++ b/tpt/aot/hash_demo.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Dropping and creating users... + +drop user a cascade; +drop user aa cascade; + +set echo on + +create user A identified by x; +create user AA identified by x; +alter user a quota unlimited on users; +alter user aa quota unlimited on users; + +-- about to create two tables under different usernames... +pause + +create table A.AA(a int); +create table AA.A(a int); + +-- about to run @aot/hash commands for both tables... +pause + +set echo off + +@aot/hash a +@aot/hash aa + diff --git a/tpt/aot/insert_loop.sql b/tpt/aot/insert_loop.sql new file mode 100644 index 0000000..42f7743 --- /dev/null +++ b/tpt/aot/insert_loop.sql @@ -0,0 +1,78 @@ +COL c1 FOR A20 + +--DROP TABLE sys.tbind; +--CREATE TABLE sys.tbind (c1 VARCHAR2(4000), c2 NUMBER, c3 NUMBER, c4 NUMBER, c5 NUMBER); +--DROP TABLE system.tbind; +--CREATE TABLE system.tbind (c1 VARCHAR2(4000), c2 VARCHAR2(4000), c3 VARCHAR2(4000), c4 VARCHAR2(4000), c5 VARCHAR2(4000)); + +VAR b1 VARCHAR2(10) +VAR b2 NUMBER +VAR b3 NUMBER +VAR b4 NUMBER +VAR b5 NUMBER + +EXEC :b1 := 'A' +EXEC :b2 := 1; +-- b3-b5 are NULL + +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); + +VAR b1 VARCHAR2(33) +EXEC :b1 := 'A' + +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); + +VAR b1 VARCHAR2(129) +EXEC :b1 := 'A' + +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); + +VAR b1 VARCHAR2(2001) +EXEC :b1 := 'A' + +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); + +VAR b1 VARCHAR2(4000) +EXEC :b1 := 'A' + +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); + +VAR b1 CHAR +EXEC :b1 := 'A' + +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); + +VAR b1 NCHAR +EXEC :b1 := 'A' + +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); + +ALTER SESSION SET current_schema = SYSTEM; + +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); + +ALTER SESSION SET nls_date_format = 'YYYY:MM:DD'; + +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); +INSERT INTO tbind VALUES (:b1, :b2, :b3, :b4, :b5); + +--@sqlid gbusbc081f8m4 % +--@nonshared gbusbc081f8m4 % + diff --git a/tpt/aot/kill_cpu.sql b/tpt/aot/kill_cpu.sql new file mode 100644 index 0000000..2b03f37 --- /dev/null +++ b/tpt/aot/kill_cpu.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt +prompt Jonathan Lewis'es kill_cpu script +prompt + +set termout off + +--drop table kill_cpu; + +create table kill_cpu (n, primary key(n)) organization index +as +select rownum n +from all_objects +where rownum <= 50 +; + +set termout on echo on + +alter session set "_old_connect_by_enabled"=true; + +select count(*) X +from kill_cpu +connect by n > prior n +start with n = 1 +; + +set echo off diff --git a/tpt/aot/lookup_cbc.sql b/tpt/aot/lookup_cbc.sql new file mode 100644 index 0000000..94e7612 --- /dev/null +++ b/tpt/aot/lookup_cbc.sql @@ -0,0 +1,24 @@ +-- Cause CBC latch contention + +-- CREATE TABLE lookup AS SELECT * FROM dba_objects +-- WHERE object_id IS NOT NULL +-- AND rownum <= 50; +-- +-- CREATE INDEX idx_lookup ON lookup(object_id); +-- ALTER TABLE lookup ADD CONSTRAINT pk_lookup PRIMARY KEY (object_id); +-- +-- @gts lookup + +ALTER SESSION SET plsql_optimize_level = 0; + +VAR x NUMBER + +BEGIN + LOOP + SELECT data_object_id INTO :x + FROM lookup + WHERE object_id IN (10,-1,-2,-3,-4,-5,-6,-7,-8,-9); + END LOOP; +END; +/ + diff --git a/tpt/aot/matching_lock_type_wait.sql b/tpt/aot/matching_lock_type_wait.sql new file mode 100644 index 0000000..6ea4b3b --- /dev/null +++ b/tpt/aot/matching_lock_type_wait.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- show which locks' id1/id2 columns have matching columns in v$session_wait/ASH + +select /*+ leading(e) */ + e.name + , lt.type + , lt.id1_tag + , lt.id2_tag + , lt.description lock_description +from + v$lock_type lt + , v$event_name e +where + substr(e.name, 6,2) = lt.type +and e.parameter2 = lt.id1_tag +and e.parameter3 = lt.id2_tag +and e.name like 'enq: %' +order by + e.name +/ + diff --git a/tpt/aot/nonsharing_child.sql b/tpt/aot/nonsharing_child.sql new file mode 100644 index 0000000..2ffd4cc --- /dev/null +++ b/tpt/aot/nonsharing_child.sql @@ -0,0 +1,12 @@ +VAR n NUMBER + +DECLARE + scn NUMBER; +BEGIN + scn := dbms_flashback.GET_SYSTEM_CHANGE_NUMBER; + LOOP + SELECT COUNT(*) INTO :n FROM t AS OF SCN scn; + END LOOP; +END; +/ + diff --git a/tpt/aot/optimizer_bug.sql b/tpt/aot/optimizer_bug.sql new file mode 100644 index 0000000..f59dbee --- /dev/null +++ b/tpt/aot/optimizer_bug.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t; + +CREATE TABLE t AS SELECT * FROM dba_objects; +CREATE INDEX i1 ON t(owner); +CREATE INDEX i2 ON t(owner,object_name); +CREATE INDEX i3 ON t(owner,subobject_name); +CREATE INDEX i4 ON t(owner,object_id); +CREATE INDEX i5 ON t(owner,data_object_id); +CREATE INDEX i6 ON t(owner,object_type); +CREATE INDEX i7 ON t(owner,created); +CREATE INDEX i8 ON t(owner,last_ddl_time); +CREATE INDEX i9 ON t(owner,timestamp); +CREATE INDEX i10 ON t(owner,status); + +EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T',NULL,100,METHOD_OPT=>'FOR ALL COLUMNS SIZE 254'); + +SELECT * FROM t +WHERE owner IN (SELECT owner FROM t GROUP BY owner HAVING count(*) > 1) +AND owner NOT IN (SELECT owner FROM t WHERE owner NOT LIKE 'S%') +; + diff --git a/tpt/aot/ora4031.sql b/tpt/aot/ora4031.sql new file mode 100644 index 0000000..283fa64 --- /dev/null +++ b/tpt/aot/ora4031.sql @@ -0,0 +1,41 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- metalink bug 7340448 +-- oracle 10.2.0.4 + +drop table t; +drop table t1; +drop table t2; + + +create table t ( pat varchar2(10) ); + +begin + for i in 1 .. 1000 loop + insert into t values('abcdedghi'); + end loop; +end; +/ + +commit; + +create table t1 ( pk number , val varchar2(100) ); + +begin + for i in 1 .. 1000 loop + insert into t1 values(i,'a'); + end loop; +end; +/ + +commit; + +create table t2 as +select /*+ USE_NL(t) ordered */ + pk, val, pat +from + t1,t +where + regexp_like(val,pat) +/ diff --git a/tpt/aot/pga_dbms_output.sql b/tpt/aot/pga_dbms_output.sql new file mode 100644 index 0000000..96e330b --- /dev/null +++ b/tpt/aot/pga_dbms_output.sql @@ -0,0 +1,32 @@ +SET SERVEROUTPUT ON SIZE UNLIMITED + +BEGIN + FOR x IN 1..&1*10 LOOP + DBMS_OUTPUT.PUT_LINE(LPAD('x',100,'x')); + END LOOP; +END; +/ + + +SET SERVEROUT OFF + +DBMS_OUTPUT.PUT_LINE ('...') + + +SET SERVEROUT ON + +-> DBMS_OUTPUT.ENABLE(1000000) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) +-> DBMS_OUTPUT.PUT_LINE ('...') -> "plsql vc2 collection" (UGA) + +DBMS_OUTPUT.GET_LINES(.....) + + diff --git a/tpt/aot/pga_memleak.sql b/tpt/aot/pga_memleak.sql new file mode 100644 index 0000000..04c948f --- /dev/null +++ b/tpt/aot/pga_memleak.sql @@ -0,0 +1,51 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Bug 16855783 : MEMORY LEAK IN PGA ON INSERT OF XMLTYPE COLUMN +SET sqlblanklines ON; +SET serveroutput ON; + +--drop table memleak_test_tab; +--CREATE TABLE memleak_test_tab (my_xmltype XMLTYPE); + +DECLARE + l_my_varchar2 VARCHAR2(4001 CHAR); -- change this to CLOB and there will be a reduced memory leak. + --l_my_varchar2 CLOB; + l_pga_used_mb NUMBER; + l_dummy NUMBER; + l_my_xmltype XMLTYPE; +BEGIN + -- build XML string with length of 4001 characters. + l_my_varchar2 := ''; + FOR i IN 1 .. (4000/20) - 10 + LOOP + l_my_varchar2 := l_my_varchar2 || '1234567890'; -- reduce string size by removing final 0 + END LOOP; + l_my_varchar2 := l_my_varchar2 || ''; + dbms_output.put_line('Input string length: [' || LENGTH(l_my_varchar2) || ']'); + + -- repeatedly insert the same value in a table (XMLType column) + l_my_xmltype := XMLTYPE(l_my_varchar2); + FOR i IN 1 .. 5000 + LOOP + -- l_my_xmltype := XMLTYPE(l_my_varchar2); + INSERT INTO memleak_test_tab (my_xmltype) + VALUES (l_my_xmltype); + + -- following insert throws ORA-1461 which I suppose is also a bug + -- ORA-1461: can bind a LONG value only for insert into a LONG column + -- INSERT INTO memleak_test_tab (my_xmltype) + -- VALUES (XMLTYPE(l_my_varchar2)); + END LOOP; + + ROLLBACK; + + -- Check how much memory are we currently using + SELECT round(p.pga_used_mem/1024/1024, 2) INTO l_pga_used_mb + FROM v$session s + JOIN v$process p ON p.addr = s.paddr + WHERE s."SID"=sys_context('userenv', 'sid'); + dbms_output.put_line('Currently used PGA: [' || l_pga_used_mb || '] MB'); +END; +/ + diff --git a/tpt/aot/report_sp_chunk_durations.sql b/tpt/aot/report_sp_chunk_durations.sql new file mode 100644 index 0000000..6e18235 --- /dev/null +++ b/tpt/aot/report_sp_chunk_durations.sql @@ -0,0 +1,26 @@ +prompt +prompt WARNING!!! This script will query X$KSMSP, which will cause heavy shared pool latch contention +prompt in systems under load and with large shared pool. This may even completely hang +prompt your instance until the query has finished! You probably do not want to run this in production! +prompt +pause Press ENTER to continue, CTRL+C to cancel... + +COL chunk_comment FOR A20 +BREAK ON ksmchdur SKIP 1 DUPLICATES + +SELECT + ksmchdur + , ksmchcls + , SUBSTR(ksmchcom,1,DECODE(INSTR(ksmchcom,'^'),0,99,INSTR(ksmchcom,'^'))) chunk_comment + , COUNT(*),MIN(ksmchsiz),MAX(ksmchsiz),SUM(ksmchsiz) +FROM + x$ksmsp +GROUP BY + ksmchdur + , ksmchcls + , SUBSTR(ksmchcom,1,DECODE(INSTR(ksmchcom,'^'),0,99,INSTR(ksmchcom,'^'))) +ORDER BY + ksmchdur + , SUM(ksmchsiz) DESC +/ + diff --git a/tpt/aot/shared_pool_leak_bug.sql b/tpt/aot/shared_pool_leak_bug.sql new file mode 100644 index 0000000..cd5c0c2 --- /dev/null +++ b/tpt/aot/shared_pool_leak_bug.sql @@ -0,0 +1,99 @@ +-- MOS: Bug 13250244 : ORA-4031 ERRORS SEEN WHEN PARAMETER _KGHDSIDX_COUNT IS SET TO >1 DUE TO MEM LEAK + +-- ~~~~~~~~~~~~~ +-- Testcase +-- ~~~~~~~~~~~~~~~~~ +-- +-- Files: BDETC.tar.Z (containing init.ora, setup.sql, tc.sql) +-- +-- Steps: +-- ** IMPORTANT ** Merge init.ora into the pfile used to start the instance. +-- +-- ie: Ensure the instance has _kghdsidx_count=4 set +-- +-- +-- sqlplus /nolog @setup +-- Creates a user TC with table FOO and a few stored outlines. +-- eg: +-- create table foo ( a number ); +-- insert into foo values(10); +-- commit; +-- create index ifoo on foo(a); +-- analyze table foo compute statistics; +-- create sequence seq; +-- alter session set create_stored_outlines=true; +-- declare n number; +-- begin +-- for i in 1 .. 10 loop +-- execute immediate 'select count(*) from foo where a='||i INTO n; +-- end loop; +-- end; +-- / +-- +-- sqlplus /nolog @tc +-- Sets USE_STORED_OUTLINES=TRUE and runs a load of literal selects. +-- eg: +-- alter session set use_stored_outlines=true; +-- declare n number; +-- begin +-- for i in 1 .. 40000 +-- loop +-- select seq.nextval into n from dual; +-- execute immediate 'select count(*) from foo where a='||n INTO n; +-- end loop; +-- end; +-- / +-- +-- Then flushes the shared pool and shows the number of 'STORED OUTLINE' +-- objects in V$DB_OBJECT_CACHE (ie: In the library cache). +-- eg: +-- select count(*) from v$db_object_cache +-- where namespace='STORED OUTLINE'; +-- +-- ^ +-- After one run of tc.sql you will see there are many thousand +-- STORED OUTLINE objects in the library cache even after a flush +-- of the shared pool. These objects are not in use by anyone +-- but are not on the shared pool LRU so just accumulate "KGLHD" +-- space. +-- +-- If you run tc.sql several times then eventually you will get +-- ORA-4031 errors as all free space is taken by the STORED OUTLINE +-- KGLHD handles. +-- +-- +-- Reproduced +-- ~~~~~~~~~~ +-- Reproduced in 11.2.0.2 +-- Reproduced in 11.2.0.3 +-- Reproduced in RDBMS_MAIN_LINUX.X64_111025 +-- +-- +-- Workaround/s +-- ~~~~~~~~~~~~ +-- Use plan baselines and related 11g options to control the execution +-- plans instead of using stored outlines. +-- OR +-- The problem does not seem to occur if there is only one SGA subpool. +-- ie: Instance runs with "_kghdsidx_count"=1 +-- (but setting this to 1 may affect shared pool concurrency on some systems) +-- +-- The problem is aggravated by having USE_STORED_OUTLINES set for sessions +-- running literal SQL as each literal statement gets a STORED OUTLINE +-- handle , even if there is no matching outline (this is expected). +-- Hence avoiding literal SQL in sessions with USE_STORED_OUTLINES +-- can help reduce/eliminate any impact from this problem +-- eg: If the DB has CURSOR_SHARING=FORCE then the example test above +-- leaks no KGLHD STORED OUTLINE handles +-- +-- +-- Diagnostic Notes +-- ~~~~~~~~~~~~~~~~ +-- If a session has USE_STORED_OUTLINES set then any SQL issued by the +-- session gets an outline handle, even if there is no actual outline. +-- This is normal and expected. +-- +-- However, +-- It seems that if there is more than one shared pool subpool then +-- we somehow manage to get some stored outline handles left off of +-- the LRU list leading to a leak of KGLHD STORED OUTLINE handles over diff --git a/tpt/aot/short_stack.sql b/tpt/aot/short_stack.sql new file mode 100644 index 0000000..e893151 --- /dev/null +++ b/tpt/aot/short_stack.sql @@ -0,0 +1,1718 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +spool c:\tmp\stacks_&1.txt +prompt Attaching to SPID &1 +oradebug setospid &1 +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +oradebug short_stack +spool off diff --git a/tpt/aot/soe_indexes.sql b/tpt/aot/soe_indexes.sql new file mode 100644 index 0000000..8be7483 --- /dev/null +++ b/tpt/aot/soe_indexes.sql @@ -0,0 +1,39 @@ +-- undo optimizations to bad scalability + +-- ALTER SEQUENCE SOE.ORDERS_SEQ NOORDER CACHE 2; -- enq: SV +ALTER SEQUENCE SOE.ORDERS_SEQ NOORDER CACHE 2; -- enq: SQ + +--@disable_restricting_fks SOE.ORDERS +ALTER TABLE SOE.ORDER_ITEMS DISABLE CONSTRAINT ORDER_ITEMS_ORDER_ID_FK; +ALTER TABLE soe.orders DISABLE CONSTRAINT order_pk; + +DROP INDEX soe.order_pk; +DROP INDEX soe.ord_order_date_ix; + +CREATE UNIQUE INDEX SOE.ORDER_PK ON SOE.ORDERS (ORDER_ID) +NOLOGGING TABLESPACE SOE PARALLEL 4; + +CREATE INDEX SOE.ORD_ORDER_DATE_IX ON SOE.ORDERS (ORDER_DATE) +NOLOGGING TABLESPACE SOE PARALLEL 4; + +CREATE BITMAP INDEX SOE.ORDER_MAGIC ON SOE.ORDERS(ORDER_ID,ORDER_DATE) +NOLOGGING TABLESPACE SOE PARALLEL 4; + +ALTER INDEX SOE.ORDER_PK NOPARALLEL; +ALTER INDEX SOE.ORD_ORDER_DATE_IX NOPARALLEL; +ALTER INDEX SOE.ORDER_MAGIC NOPARALLEL; + +ALTER TABLE soe.orders ENABLE VALIDATE CONSTRAINT order_pk; + + + +ALTER SESSION SET ddl_lock_timeout = 10; + +ALTER TABLE soe.orders ENABLE VALIDATE CONSTRAINT order_pk; +ALTER TABLE soe.orders ENABLE VALIDATE CONSTRAINT orders_customer_id_fk; + + +-- reverse key +-- recreate above indexes with REVERSE flag + + diff --git a/tpt/aot/sqlidconv.sql b/tpt/aot/sqlidconv.sql new file mode 100644 index 0000000..97da72e --- /dev/null +++ b/tpt/aot/sqlidconv.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@saveset +set serverout on + +def convstr=0123456789abcdfghjkmnpqrstuvwxyz +def base=32 + +declare + r number := 0; + j number := 0; + a number := 0; +begin + + for i in 1..length('&1') loop + + j := length('&1') - i + 1; + -- dbms_output.put_line('i='||i||' j='||j||' chr='||substr('&1',i,1)); + + a := (( power(&base, j-1) * (instr('&convstr',substr('&1',i,1))-1) )); + -- dbms_output.put_line(' a='||a); + + r := r + a; + + -- dbms_output.put_line(' r='||to_char(r,'XXXXXXXXXXXXXXXX')); + -- dbms_output.put_line('power='||to_char(power(&base, i-1))); + -- dbms_output.put_line(' mult='||to_char(instr('&convstr',substr('&1',i,1))-1) ); + -- dbms_output.put_line('--'); + dbms_output.put_line('j='||j||' i='||i||' c='||substr('&1',i,1)||' mult='||to_char(instr('&convstr',substr('&1',i,1))-1)||' power='||to_char(power(&base, i-1))||' a='||a ); + end loop; + dbms_output.put_line('result= '||r||' 0x'||trim(to_char(r, 'xxxxxxxxxxxxxxxxxxxxxxxx'))); + dbms_output.put_line('last 4B= '||trunc(mod(r,power(2,32)))||' 0x'||trim(to_char(trunc(mod(r,power(2,32))), 'xxxxxxxxxxxxxxxxxxxxxxxx'))); + + dbms_output.put_line(chr(10)||'sqlid=&1 hash_value='|| trunc(mod(r,power(2,32))) ); +end; +/ + +@loadset diff --git a/tpt/aot/system_ts_writes.sql b/tpt/aot/system_ts_writes.sql new file mode 100644 index 0000000..ca295f4 --- /dev/null +++ b/tpt/aot/system_ts_writes.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t1 PURGE; +DROP TABLE t2 PURGE; + +SET ECHO ON + +CREATE TABLE t1(a INT) TABLESPACE users; +CREATE TABLE t2(a INT) TABLESPACE system; + +ALTER SYSTEM SWITCH LOGFILE; +ALTER SYSTEM CHECKPOINT; + +PAUSE + +SET TIMING ON + +EXEC FOR i IN 1..300000 LOOP INSERT INTO t1 VALUES(i); END LOOP; + +ALTER SYSTEM CHECKPOINT; + +EXEC FOR i IN 1..300000 LOOP INSERT INTO t2 VALUES(i); END LOOP; + +SET TIMING OFF ECHO OFF diff --git a/tpt/aot/temp_io.sql b/tpt/aot/temp_io.sql new file mode 100644 index 0000000..2421b25 --- /dev/null +++ b/tpt/aot/temp_io.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +ALTER SESSION SET workarea_size_policy=MANUAL; +ALTER SESSION SET sort_area_size=40960; +ALTER SESSION SET sort_area_retained_size=40960; + +VAR c REFCURSOR + +DECLARE + t VARCHAR2(4000); +BEGIN + LOOP + OPEN :c FOR SELECT TO_CHAR(rownum)||LPAD('x',3900,'x') text FROM dual CONNECT BY LEVEL <=1000 ORDER BY text; + FETCH :c INTO t; + CLOSE :c; + END LOOP; +END; +/ + diff --git a/tpt/aot/tx_lock_diag.txt b/tpt/aot/tx_lock_diag.txt new file mode 100644 index 0000000..b99567a --- /dev/null +++ b/tpt/aot/tx_lock_diag.txt @@ -0,0 +1,189 @@ +SQL> @s 152 + + SID STATE EVENT SEQ# SEC_IN_WAIT P1 P2 P3 P1TRANSL +------- ------- ---------------------------------------- ---------- ----------- ---------- ---------- ---------- ------------------------------------------ + 152 WAITING enq: TX - row lock contention 21 3 1415053318 393221 6000 0x54580006: TX mode 6 + +SQL> select obj, tch, file#, dbablk + 2 from x$bh + 3 where bitand(flag,8)=8; + +no rows selected + +SQL> +SQL> +SQL> +SQL> +SQL> +SQL> desc v$transaction + Name Null? Type + ------------------------------------------------------------------------------------------------------ -------- ---------------------------------------------------------------------------- + 1 ADDR RAW(8) + 2 XIDUSN NUMBER + 3 XIDSLOT NUMBER + 4 XIDSQN NUMBER + 5 UBAFIL NUMBER + 6 UBABLK NUMBER + 7 UBASQN NUMBER + 8 UBAREC NUMBER + 9 STATUS VARCHAR2(16) + 10 START_TIME VARCHAR2(20) + 11 START_SCNB NUMBER + 12 START_SCNW NUMBER + 13 START_UEXT NUMBER + 14 START_UBAFIL NUMBER + 15 START_UBABLK NUMBER + 16 START_UBASQN NUMBER + 17 START_UBAREC NUMBER + 18 SES_ADDR RAW(8) + 19 FLAG NUMBER + 20 SPACE VARCHAR2(3) + 21 RECURSIVE VARCHAR2(3) + 22 NOUNDO VARCHAR2(3) + 23 PTX VARCHAR2(3) + 24 NAME VARCHAR2(256) + 25 PRV_XIDUSN NUMBER + 26 PRV_XIDSLT NUMBER + 27 PRV_XIDSQN NUMBER + 28 PTX_XIDUSN NUMBER + 29 PTX_XIDSLT NUMBER + 30 PTX_XIDSQN NUMBER + 31 DSCN-B NUMBER + 32 DSCN-W NUMBER + 33 USED_UBLK NUMBER + 34 USED_UREC NUMBER + 35 LOG_IO NUMBER + 36 PHY_IO NUMBER + 37 CR_GET NUMBER + 38 CR_CHANGE NUMBER + 39 START_DATE DATE + 40 DSCN_BASE NUMBER + 41 DSCN_WRAP NUMBER + 42 START_SCN NUMBER + 43 DEPENDENT_SCN NUMBER + 44 XID RAW(8) + 45 PRV_XID RAW(8) + 46 PTX_XID RAW(8) + +SQL> @dec 1415053318 + + DEC HEX +----------------------------------- -------------------- + 1415053318.000000 54580006 + +SQL> @lt TX + +TYPE LOCK NAME ID1 MEANING ID2 MEANING LT_ DESCRIPTION +---- ------------------------------ ------------------------- ------------------------- --- ------------------------------------------------------------ +TX Transaction usn<<16 | slot sequence YES Lock held by a transaction to allow other transactions to + wait for it + + +SQL> @s 152 + + SID STATE EVENT SEQ# SEC_IN_WAIT P1 P2 P3 P1TRANSL +------- ------- ---------------------------------------- ---------- ----------- ---------- ---------- ---------- ------------------------------------------ + 152 WAITING enq: TX - row lock contention 21 78 1415053318 393221 6000 0x54580006: TX mode 6 + +SQL> +SQL> +SQL> @s 152 + + SID STATE EVENT SEQ# SEC_IN_WAIT P1 P2 P3 P1TRANSL +------- ------- ---------------------------------------- ---------- ----------- ---------- ---------- ---------- ------------------------------------------ + 152 WAITING enq: TX - row lock contention 21 81 1415053318 393221 6000 0x54580006: TX mode 6 + +SQL> +SQL> select * from v$lock where sid = 152; + +ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK +---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ---------- +00000003DA32CE88 00000003DA32CEA8 152 TX 393221 6000 0 6 99 0 +00000003DA99E260 00000003DA99E288 152 TM 58197 0 3 0 99 0 + +SQL> select * from v$lock where sid = 152 and request != 0; + +ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK +---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ---------- +00000003DA32CE88 00000003DA32CEA8 152 TX 393221 6000 0 6 108 0 + +SQL> select mod(393221,power(2,16)) from dual; + +MOD(393221,POWER(2,16)) +----------------------- + 5 + +SQL> select 393221/power(2,16) usn, mod(393221,power(2,16)) slot from dual; + + USN SLOT +---------- ---------- +6.00007629 5 + +SQL> select trunc(393221/power(2,16)) usn, mod(393221,power(2,16)) slot from dual; + + USN SLOT +---------- ---------- + 6 5 + +SQL> +SQL> +SQL> +SQL> select ses_addr from v$transaction where XIDUSN = 6 and XIDSLOT = 5; + +SES_ADDR +---------------- +00000003DD24CBA0 + +SQL> select sid, sql_hash_value from v$session where saddr = '00000003DD24CBA0'; + + SID SQL_HASH_VALUE +---------- -------------- + 144 3935459581 + +SQL> @sql 3935459581 + + CH# SQL_TEXT +---- ------------------------------------------------------------------------------------------------------------------------------------------------------ + 0 BEGIN dbms_lock.sleep(600); END; + + + CH# PARENT_HANDLE OBJECT_HANDLE PARSES H_PARSES EXECUTIONS FETCHES ROWS_PROCESSED LIOS PIOS SORTS CPU_MS ELA_MS USERS_EXECUTING +---- ---------------- ---------------- ---------- ---------- ---------- ---------- -------------- ---------- ---------- ---------- ---------- ---------- --------------- + 0 00000003DC63AD80 00000003DC4EF988 1 1 0 0 0 0 0 0 3.729 3.729 1 + +SQL> +SQL> +SQL> desc v$open_cursor + Name Null? Type + ------------------------------------------------------------------------------------------------------ -------- ---------------------------------------------------------------------------- + 1 SADDR RAW(8) + 2 SID NUMBER + 3 USER_NAME VARCHAR2(30) + 4 ADDRESS RAW(8) + 5 HASH_VALUE NUMBER + 6 SQL_ID VARCHAR2(13) + 7 SQL_TEXT VARCHAR2(60) + +SQL> select hash_value, sql_text from v$open_cursor where sid = 144; + +HASH_VALUE SQL_TEXT +---------- ------------------------------------------------------------ +1420612433 update smon_scn_time set orig_thread=0, time_mp=:1, time_dp= +3114265815 select local_tran_id, global_tran_fmt, global_oracle_id, glo +3935459581 BEGIN dbms_lock.sleep(600); END; + 541202592 select obj, tch, file#, dbablk from x$bh where bitand(flag,8 + 599212612 select s.username i_username, i.instance_name i_instance +2953317698 update mytest set dummy = 'Y' +2509924099 select value ||'/'||(select instance_name from v$instance) + +7 rows selected. + +SQL> + + + +-- these were the troublemakers +3935459581 BEGIN dbms_lock.sleep(600); END; +2953317698 update mytest set dummy = 'Y' + + diff --git a/tpt/aot/wrong_results.sql b/tpt/aot/wrong_results.sql new file mode 100644 index 0000000..1c8e694 --- /dev/null +++ b/tpt/aot/wrong_results.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- BUG 10259620 +-- https://supporthtml.oracle.com/ep/faces/secure/km/DocumentDisplay.jspx?id=10259620.8 + +drop table t; +create table t(c1 number, c2 number, c3 as (c1 + 2)); + +insert into t(c1, c2) values (1, 2); +insert into t(c1, c2) values (2, 3); +commit; + +create index btix_1 on t (c2 desc); +create index btix_2 on t (c3, c2); + +@sl all + +select c2, c3 +from t where c2 = 3 or (c3 = 3) +order by c2, c3; +@x + +select /*+ use_concat index(t) */ c2, c3 +from t where c2 = 3 or (c3 = 3) +order by c2, c3; +@x + diff --git a/tpt/appinfo.sql b/tpt/appinfo.sql new file mode 100644 index 0000000..b49e7f0 --- /dev/null +++ b/tpt/appinfo.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT module, action, client_identifier, ecid FROM v$session WHERE sid IN (&1); diff --git a/tpt/aq.sql b/tpt/aq.sql new file mode 100644 index 0000000..b108232 --- /dev/null +++ b/tpt/aq.sql @@ -0,0 +1,10 @@ +select * from gv$qmon_tasks order by inst_id, task_type, task_name, task_number; + +select inst_id, queue_schema, queue_name, queue_id, queue_state, startup_time, + num_msgs, spill_msgs, waiting, ready, expired, cnum_msgs, cspill_msgs, expired_msgs, + total_wait, average_wait +from gv$buffered_queues, gv$aq +where queue_id=qid +order by 1,2,3; + + diff --git a/tpt/ar.sql b/tpt/ar.sql new file mode 100644 index 0000000..826e1ad --- /dev/null +++ b/tpt/ar.sql @@ -0,0 +1,7 @@ +and rownum <= &1 +. +prompt ....and rownum <= &1 +/ + +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. diff --git a/tpt/arg.sql b/tpt/arg.sql new file mode 100644 index 0000000..909928a --- /dev/null +++ b/tpt/arg.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- object arguments + +col proc_owner head OWNER for a25 +col proc_object_name head OBJECT_NAME for a30 +col proc_procedure_name head PROCEDURE_NAME for a30 + +select + a.owner proc_owner + , a.object_name proc_object_name + , p.procedure_name proc_procedure_name + , a.subprogram_id +from + dba_arguments a + , dba_procedures p +where + a.owner = p.owner +and a.object_name = p.object_name +and a.object_id = p.object_id +and a.subprogram_id = p.subprogram_id +and lower(p.owner) like lower('%&1%') +and lower(p.object_name) like lower('%&2%') +and lower(p.procedure_name) like lower('%&3%') +/ diff --git a/tpt/as.sql b/tpt/as.sql new file mode 100644 index 0000000..94214d3 --- /dev/null +++ b/tpt/as.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt A-Script: Display active sessions grouped by &1.... + +select + &1 + , count(*) +from + v$session +where + status='ACTIVE' +and type !='BACKGROUND' +and wait_class != 'Idle' +and sid != (select sid from v$mystat where rownum=1) +group by + &1 +order by + count(*) desc +/ + diff --git a/tpt/ascii.sql b/tpt/ascii.sql new file mode 100644 index 0000000..c943cd8 --- /dev/null +++ b/tpt/ascii.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + r*4+0, chr(r*4+0), + r*4+1, chr(r*4+1), + r*4+2, chr(r*4+2), + r*4+3, chr(r*4+3) +from ( + select + rownum-1 r + from + dual connect by level <=64 +) +/ diff --git a/tpt/asfp.sql b/tpt/asfp.sql new file mode 100644 index 0000000..4bcc84a --- /dev/null +++ b/tpt/asfp.sql @@ -0,0 +1,2 @@ +PROMPT ALTER SESSION FORCE PARALLEL QUERY PARALLEL &1;; +ALTER SESSION FORCE PARALLEL QUERY PARALLEL &1; diff --git a/tpt/ash.sql b/tpt/ash.sql new file mode 100644 index 0000000..886ff5f --- /dev/null +++ b/tpt/ash.sql @@ -0,0 +1,38 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +DEF from_time="TIMESTAMP'2012-05-21 07:55:00'" +DEF to_time="TIMESTAMP'2012-05-21 08:15:00'" +--DEF from_time=sysdate-1/24/60*5 +--DEF to_time=sysdate + +--DEF cols=session_state,event,sql_id +DEF cols=&1 + +PROMPT FROM_TIME=&from_time TO_TIME=&to_time + +SELECT * FROM ( + SELECT + &cols + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + FROM + -- active_session_history_bak + v$active_session_history + -- dba_hist_active_sess_history + WHERE + sample_time BETWEEN &from_time AND &to_time + AND &where_clause + GROUP BY + &cols + ORDER BY + percent DESC +) +WHERE ROWNUM <= 20 +/ + +-- DEF cols=session_state,event,p1,p2 +-- DEF cols=session_state,event,sql_id + diff --git a/tpt/ash/ash_index_helper.sql b/tpt/ash/ash_index_helper.sql new file mode 100644 index 0000000..f7f5717 --- /dev/null +++ b/tpt/ash/ash_index_helper.sql @@ -0,0 +1,176 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL accessed_table HEAD Accessed_Table FOR a40 +COL aindex_operation HEAD Plan_Operation FOR a70 +COL aindex_predicates HEAD PREDICATES FOR a100 truncate +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL AAS FOR 9999.9 +COL cpu_pct HEAD CPU FOR A5 +COL wait_pct HEAD WAIT FOR A5 + +COL ela_sec_exec HEAD "ELA_SEC/EXEC" FOR 9999990.999 + +COL aindex_plan_hash_value HEAD PLAN_HASH_VALUE PRINT +COL aindex_sql_id HEAD SQL_ID NOPRINT +COL aindex_sql_child HEAD "CHILD" PRINT +COL aindex_sample_time HEAD SAMPLE_HOUR +COL projection FOR A520 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL aindex_id HEAD "ID" FOR 9999 +COL aindex_parent_id HEAD "PID" FOR 9999 + + +PROMPT +PROMPT -- Santa's Little (Index) Helper BETA v0.5 - by Tanel Poder ( https://tanelpoder.com ) + +WITH +tab AS (SELECT /*+ NO_MERGE */ owner, table_name, num_rows + FROM dba_tables + WHERE UPPER(table_name) LIKE + UPPER(CASE + WHEN INSTR('&2','.') > 0 THEN + SUBSTR('&2',INSTR('&2','.')+1) + ELSE + '&2' + END + ) ESCAPE '\' + AND owner LIKE + CASE WHEN INSTR('&2','.') > 0 THEN + UPPER(SUBSTR('&2',1,INSTR('&2','.')-1)) + ELSE + user + END ESCAPE '\' +), +ind AS (SELECT /*+ NO_MERGE */ owner, index_name, table_owner, table_name + FROM dba_indexes + WHERE (table_owner, table_name) IN (SELECT owner, table_name FROM tab)), +sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.wait_class + , ash.event +FROM + v$active_session_history ash +WHERE + 1=1 +AND ash.sql_plan_operation IN ('TABLE ACCESS', 'INDEX') +AND ash.sql_id LIKE '&1' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.wait_class + , ash.event +), +ash_and_plan AS ( +SELECT + plan.sql_id + , plan.child_number + , plan.plan_hash_value + , sq.samples seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) aindex_plan_id + , plan.id aindex_id + , plan.parent_id aindex_parent_id + , plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_owner||'.'||plan.object_name ||']', null) aindex_operation + , plan.object_owner + , plan.object_name + , plan.object_type + , plan.cardinality + , stat.executions + , stat.elapsed_time + , sq.session_state + , sq.wait_class + , sq.event + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name + , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1994) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1994) END aindex_predicates +-- , plan.projection +FROM + v$sql_plan plan + , v$sqlstats_plan_hash stat + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_child_number(+) = plan.child_number +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +-- +AND sq.sql_id(+) = stat.sql_id +AND sq.sql_plan_hash_value(+) = stat.plan_hash_value +AND stat.sql_id = plan.sql_id +AND stat.plan_hash_value = plan.plan_hash_value +-- +AND plan.sql_id LIKE '&1' +---- +) +SELECT * FROM ( + SELECT + SUM(ap.seconds) seconds + , ROUND(SUM(ap.seconds) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(TO_CHAR(ROUND(SUM(CASE WHEN ap.session_state = 'ON CPU' THEN ap.seconds ELSE 0 END) / SUM(ap.seconds) * 100))||'%',4) cpu_pct + , LPAD(TO_CHAR(ROUND(SUM(CASE WHEN ap.session_state = 'WAITING' THEN ap.seconds ELSE 0 END) / SUM(ap.seconds) * 100))||'%',4) wait_pct + --, SUM(CASE WHEN ap.wait_class = 'User I/O' THEN ap.seconds ELSE 0 END) iowait_sec + , t.owner||'.'||table_name accessed_table + , ap.aindex_operation + , ap.cardinality plan_card + , t.num_rows table_rows + , ap.cardinality / NULLIF(t.num_rows,0) * 100 filter_pct + , ap.executions sql_execs + , ROUND(ap.elapsed_time / NULLIF(ap.executions,0) / 1000000,3) ela_sec_exec + , ap.aindex_predicates + , COUNT(DISTINCT ap.sql_id) dist_sqlids + , COUNT(DISTINCT ap.plan_hash_value) dist_plans + , MIN(ap.sql_id) + , MAX(ap.sql_id) +-- , ap.projection + FROM + ash_and_plan ap + , (SELECT tab.*, 'TABLE' object_type, tab.owner object_owner, tab.table_name object_name FROM tab + UNION ALL + SELECT tab.*, 'INDEX', ind.owner object_owner, ind.index_name object_name + FROM tab, ind + WHERE tab.owner = ind.table_owner AND tab.table_name = ind.table_name + ) t + WHERE + ap.object_owner = t.object_owner AND ap.object_name = t.object_name AND SUBSTR(ap.object_type,1,5) = t.object_type + AND ap.seconds > 0 + GROUP BY + t.owner + , t.table_name + , ap.aindex_operation + , t.num_rows + , ap.cardinality + , ap.executions + , ap.elapsed_time + , ap.aindex_predicates +-- , ap.projection + ORDER BY + seconds DESC +) +WHERE rownum <= 30 +/ diff --git a/tpt/ash/ash_index_helperx.sql b/tpt/ash/ash_index_helperx.sql new file mode 100644 index 0000000..6548e32 --- /dev/null +++ b/tpt/ash/ash_index_helperx.sql @@ -0,0 +1,176 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL accessed_table HEAD Accessed_Table FOR a40 +COL aindex_operation HEAD Plan_Operation FOR a70 +COL aindex_predicates HEAD PREDICATES FOR a100 truncate +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL AAS FOR 9999.9 +COL cpu_pct HEAD CPU FOR A5 +COL wait_pct HEAD WAIT FOR A5 + +COL ela_sec_exec HEAD "ELA_SEC/EXEC" FOR 9999990.999 + +COL aindex_plan_hash_value HEAD PLAN_HASH_VALUE PRINT +COL aindex_sql_id HEAD SQL_ID NOPRINT +COL aindex_sql_child HEAD "CHILD" PRINT +COL aindex_sample_time HEAD SAMPLE_HOUR +COL projection FOR A520 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL aindex_id HEAD "ID" FOR 9999 +COL aindex_parent_id HEAD "PID" FOR 9999 + + +PROMPT +PROMPT -- Santa's Little (Index) Helper BETA v0.5 - by Tanel Poder ( https://tanelpoder.com ) + +WITH +tab AS (SELECT /*+ NO_MERGE */ owner, table_name, num_rows + FROM dba_tables + WHERE UPPER(table_name) LIKE + UPPER(CASE + WHEN INSTR('&2','.') > 0 THEN + SUBSTR('&2',INSTR('&2','.')+1) + ELSE + '&2' + END + ) ESCAPE '\' + AND owner LIKE + CASE WHEN INSTR('&2','.') > 0 THEN + UPPER(SUBSTR('&2',1,INSTR('&2','.')-1)) + ELSE + user + END ESCAPE '\' +), +ind AS (SELECT /*+ NO_MERGE */ owner, index_name, table_owner, table_name + FROM dba_indexes + WHERE (table_owner, table_name) IN (SELECT owner, table_name FROM tab)), +sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.wait_class + , ash.event +FROM + v$active_session_history ash +WHERE + 1=1 +AND ash.sql_plan_operation IN ('TABLE ACCESS', 'INDEX') +AND ash.sql_id LIKE '&1' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.wait_class + , ash.event +), +ash_and_plan AS ( +SELECT + plan.sql_id + , plan.child_number + , plan.plan_hash_value + , sq.samples seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) aindex_plan_id + , plan.id aindex_id + , plan.parent_id aindex_parent_id + , plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_owner||'.'||plan.object_name ||']', null) aindex_operation + , plan.object_owner + , plan.object_name + , plan.object_type + , plan.cardinality + , stat.executions + , stat.elapsed_time + , sq.session_state + , sq.wait_class + , sq.event + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name + , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1994) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1994) END aindex_predicates + , plan.projection +FROM + v$sql_plan plan + , v$sqlstats_plan_hash stat + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_child_number(+) = plan.child_number +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +-- +AND sq.sql_id(+) = stat.sql_id +AND sq.sql_plan_hash_value(+) = stat.plan_hash_value +AND stat.sql_id = plan.sql_id +AND stat.plan_hash_value = plan.plan_hash_value +-- +AND plan.sql_id LIKE '&1' +---- +) +SELECT * FROM ( + SELECT + SUM(ap.seconds) seconds + , ROUND(SUM(ap.seconds) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(TO_CHAR(ROUND(SUM(CASE WHEN ap.session_state = 'ON CPU' THEN ap.seconds ELSE 0 END) / SUM(ap.seconds) * 100))||'%',4) cpu_pct + , LPAD(TO_CHAR(ROUND(SUM(CASE WHEN ap.session_state = 'WAITING' THEN ap.seconds ELSE 0 END) / SUM(ap.seconds) * 100))||'%',4) wait_pct + --, SUM(CASE WHEN ap.wait_class = 'User I/O' THEN ap.seconds ELSE 0 END) iowait_sec + , t.owner||'.'||table_name accessed_table + , ap.aindex_operation + , ap.cardinality plan_card + , t.num_rows table_rows + , ap.cardinality / NULLIF(t.num_rows,0) * 100 filter_pct + , ap.executions sql_execs + , ROUND(ap.elapsed_time / NULLIF(ap.executions,0) / 1000000,3) ela_sec_exec + , ap.aindex_predicates + , COUNT(DISTINCT ap.sql_id) dist_sqlids + , COUNT(DISTINCT ap.plan_hash_value) dist_plans + , MIN(ap.sql_id) + , MAX(ap.sql_id) + , ap.projection + FROM + ash_and_plan ap + , (SELECT tab.*, 'TABLE' object_type, tab.owner object_owner, tab.table_name object_name FROM tab + UNION ALL + SELECT tab.*, 'INDEX', ind.owner object_owner, ind.index_name object_name + FROM tab, ind + WHERE tab.owner = ind.table_owner AND tab.table_name = ind.table_name + ) t + WHERE + ap.object_owner = t.object_owner AND ap.object_name = t.object_name AND SUBSTR(ap.object_type,1,5) = t.object_type + AND ap.seconds > 0 + GROUP BY + t.owner + , t.table_name + , ap.aindex_operation + , t.num_rows + , ap.cardinality + , ap.executions + , ap.elapsed_time + , ap.aindex_predicates + , ap.projection + ORDER BY + seconds DESC +) +WHERE rownum <= 30 +/ diff --git a/tpt/ash/ash_log_file_sync.sql b/tpt/ash/ash_log_file_sync.sql new file mode 100644 index 0000000..88c9b0e --- /dev/null +++ b/tpt/ash/ash_log_file_sync.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + POWER(2, TRUNC(LOG(2,NULLIF(time_waited,0)))) up_to_microsec + , COUNT(*) + , SUM(time_waited) + , MAX(time_waited) +FROM + v$active_session_history a +WHERE + a.event = 'log file sync' +GROUP BY + POWER(2, TRUNC(LOG(2,NULLIF(time_waited,0)))) +ORDER BY + up_to_microsec +/ + diff --git a/tpt/ash/ash_object_predicates.sql b/tpt/ash/ash_object_predicates.sql new file mode 100644 index 0000000..4b45b52 --- /dev/null +++ b/tpt/ash/ash_object_predicates.sql @@ -0,0 +1,118 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation HEAD Plan_Operation FOR a72 +COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE PRINT +COL asqlmon_sql_id HEAD SQL_ID NOPRINT +COL asqlmon_sql_child HEAD "CHILD" PRINT +COL asqlmon_sample_time HEAD SAMPLE_HOUR +COL projection FOR A520 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "ID" FOR 9999 +COL asqlmon_parent_id HEAD "PID" FOR 9999 + + +BREAK ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation + +PROMPT +PROMPT -- ASQLMon v1.1 - by Tanel Poder ( http://blog.tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events +FROM + v$active_session_history ash +WHERE + 1=1 +AND ash.sql_plan_operation IN ('TABLE ACCESS', 'INDEX') +AND ash.sql_id LIKE '&1' +AND ash.sql_child_number LIKE '&2' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +), +ash_and_plan AS ( +SELECT + plan.sql_id + , plan.child_number + , plan.plan_hash_value + , sq.samples seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id + , plan.id asqlmon_id + , plan.parent_id asqlmon_parent_id + , plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , sq.session_state + , sq.event +-- , sq.avg_p3 + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name + , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1994) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1994) END asqlmon_predicates +-- , plan.projection +FROM + v$sql_plan plan + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_child_number(+) = plan.child_number +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.child_number LIKE '&2' +) +SELECT * FROM ( + SELECT + SUM(seconds) seconds + , asqlmon_operation + , session_state +-- , event +-- , obj_alias_qbc_name + , asqlmon_predicates + , COUNT(DISTINCT sql_id) dist_sqlids + , COUNT(DISTINCT plan_hash_value) dist_plans + , MIN(sql_id) + , MAX(sql_id) + FROM + ash_and_plan + WHERE + seconds > 0 + GROUP BY + asqlmon_operation + , session_state +-- , event +-- , obj_alias_qbc_name + , asqlmon_predicates + ORDER BY + seconds DESC +) +WHERE rownum <= 30 +/ diff --git a/tpt/ash/ash_wait_chains.sql b/tpt/ash/ash_wait_chains.sql new file mode 100644 index 0000000..acaa350 --- /dev/null +++ b/tpt/ash/ash_wait_chains.sql @@ -0,0 +1,143 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ash_wait_chains.sql (v0.8) +-- Purpose: Display ASH wait chains (multi-session wait signature, a session +-- waiting for another session etc.) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @ash_wait_chains +-- +-- Example: +-- @ash_wait_chains username||':'||program2||event2 session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the in-memory G$ACTIVE_SESSION_HISTORY, use +-- @dash_wait_chains.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-- Oracle 10g does not have the BLOCKING_INST_ID column in ASH so you'll need +-- to comment out this column in this script. This may give you somewhat +-- incorrect results in RAC environment with global blockers. +-- +-------------------------------------------------------------------------------- +COL wait_chain FOR A300 WORD_WRAP +COL "%This" FOR A6 + +PROMPT +PROMPT -- Display ASH Wait Chain Signatures script v0.8 by Tanel Poder ( https://tanelpoder.com ) + +WITH +bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat), +ash AS (SELECT /*+ INLINE QB_NAME(ash) LEADING(a) USE_HASH(u) SWAP_JOIN_INPUTS(u) */ + a.* + , CAST(a.sample_time AS DATE) sample_time_s -- round timestamp to 1 sec boundary for matching across RAC nodes + , o.* + , u.username + , CASE WHEN a.session_type = 'BACKGROUND' AND a.program LIKE '%(DBW%)' THEN + '(DBWn)' + WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , NVL(a.event||CASE WHEN event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||NVL((SELECT class FROM bclass WHERE r = a.p3),'undo @bclass '||a.p3)||']' ELSE null END,'ON CPU') + || ' ' event2 + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM + gv$active_session_history a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND sample_time BETWEEN &3 AND &4 + ), +ash_samples AS (SELECT /*+ INLINE */ DISTINCT sample_time_s FROM ash), +ash_data AS (SELECT /*+ INLINE */ * FROM ash), +chains AS ( + SELECT /*+ INLINE */ + d.sample_time_s ts + , level lvl + , session_id sid + , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND d.blocking_session IS NOT NULL THEN ' -> [idle blocker '||d.blocking_inst_id||','||d.blocking_session||','||d.blocking_session_serial#||(SELECT ' ('||s.program||')' FROM gv$session s WHERE (s.inst_id, s.sid , s.serial#) = ((d.blocking_inst_id,d.blocking_session,d.blocking_session_serial#)))||']' ELSE NULL END path -- there's a reason why I'm doing this + --, SYS_CONNECT_BY_PATH(&1, ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN '('||d.session_id||')' ELSE NULL END path + -- , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND LEVEL > 1 THEN ' [sid='||session_id||' seq#='||TO_CHAR(seq#)||']' ELSE NULL END path -- there's a reason why I'm doing this + --, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ') path -- there's a reason why I'm doing this (ORA-30004 :) + , CASE WHEN CONNECT_BY_ISLEAF = 1 THEN d.session_id ELSE NULL END sids + , CONNECT_BY_ISLEAF isleaf + , CONNECT_BY_ISCYCLE iscycle + , d.* + FROM + ash_samples s + , ash_data d + WHERE + s.sample_time_s = d.sample_time_s + AND d.sample_time BETWEEN &3 AND &4 + CONNECT BY NOCYCLE + ( PRIOR d.blocking_session = d.session_id + AND PRIOR d.blocking_inst_id = d.inst_id + AND PRIOR s.sample_time_s = d.sample_time_s -- Different RAC nodes have sample_id drift (assuming that clocks are synced enough) + ) + START WITH &2 +) +SELECT * FROM ( + SELECT + LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , COUNT(*) seconds + , ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , path wait_chain + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + , COUNT(DISTINCT sids) num_sids + , MIN(sids) + , MAX(sids) + FROM + chains + WHERE + isleaf = 1 + GROUP BY + &1 + , path + ORDER BY + COUNT(*) DESC + ) +WHERE + ROWNUM <= 30 +/ diff --git a/tpt/ash/ashmem.sql b/tpt/ash/ashmem.sql new file mode 100644 index 0000000..d616458 --- /dev/null +++ b/tpt/ash/ashmem.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM ( + SELECT + TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI:SS.FF') sample_time + , ROUND(SUM(pga_allocated)/1024/1024) total_pga_mb + , ROUND(SUM(temp_space_allocated)/1024/1024) total_temp_mp + , COUNT(DISTINCT session_id||':'||session_serial#) act_sessions + FROM + v$active_session_history + GROUP BY + sample_time + ORDER BY total_pga_mb + DESC +) +WHERE rownum <= 10 +/ + + diff --git a/tpt/ash/ashpeak.sql b/tpt/ash/ashpeak.sql new file mode 100644 index 0000000..c9127c3 --- /dev/null +++ b/tpt/ash/ashpeak.sql @@ -0,0 +1,98 @@ +-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ashpeak.sql +-- Purpose: +-- +-- Author: Tanel Poder +-- Copyright: (c) https://tanelpoder.com +-- +-- Usage: +-- @ashpeak +-- +-- Example: +-- +-- Other: +-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use +-- @dashpeak.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-------------------------------------------------------------------------------- +COL "%Total" FOR A7 JUST RIGHT +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL dop FOR 99 +COL AAS FOR 9999999999.9 +COL log2_aas_4k FOR A14 HEAD "Log(2,AAS)" JUST LEFT +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +PROMPT +PROMPT AAS by &1 within time range between &3 and &4 + +WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) +SELECT + &1 + , COUNT(*) totalseconds + , ROUND(COUNT(*) / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400, 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%Total" + , '|'||RPAD(NVL(RPAD('#', ROUND(LOG(2,COUNT(*) / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400), 1), '#'),' '), 12)||'|' log2_aas_4k +FROM ( + SELECT + TRUNC(sample_time, 'DD') dd + , TRUNC(sample_time, 'HH') hh + , TRUNC(sample_time, 'MI') mi + , TO_DATE(SUBSTR(TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI'), 1, 15)||'0', 'YYYY-MM-DD HH24:MI') mt + , CAST(sample_time AS DATE) ss + , NVL(a.event, a.session_state)|| + CASE + WHEN a.event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , a.* + , u.username + , o.* + FROM + v$active_session_history a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 +) +GROUP BY + &1 +ORDER BY + &1 +/ + diff --git a/tpt/ash/ashpeaktop.sql b/tpt/ash/ashpeaktop.sql new file mode 100644 index 0000000..1efce54 --- /dev/null +++ b/tpt/ash/ashpeaktop.sql @@ -0,0 +1,119 @@ +-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ashpeak.sql +-- Purpose: +-- +-- Author: Tanel Poder +-- Copyright: (c) https://tanelpoder.com +-- +-- Usage: +-- @dashpeaktop +-- +-- Example: +-- +-- Other: +-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use +-- @dashpeak.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-------------------------------------------------------------------------------- +COL "%Total" FOR A7 JUST RIGHT +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL dop FOR 99 +COL AAS FOR 9999999999.9 +COL log2_aas_4k FOR A14 HEAD "Log(2,AAS)" JUST LEFT +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +PROMPT +PROMPT Top AAS peaks within time range between &3 and &4 + +WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) +SELECT * FROM ( + SELECT + &1 + , COUNT(*) sessions + , COUNT(*) totalseconds + , ROUND(COUNT(*) / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400, 1) AAS + FROM ( + SELECT + TRUNC(sample_time, 'DD') dd + , TRUNC(sample_time, 'HH') hh + , TRUNC(sample_time, 'MI') mi + , TO_DATE(SUBSTR(TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI'), 1, 15)||'0', 'YYYY-MM-DD HH24:MI') mt + , CAST(sample_time AS DATE) ss + , NVL(a.event, a.session_state)|| + CASE + WHEN a.event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , a.* + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM + gv$active_session_history a + WHERE + &2 + AND sample_time BETWEEN &3 AND &4 + ) + GROUP BY + &1 + ORDER BY + totalseconds DESC +) +WHERE + rownum <= 25 +/ + diff --git a/tpt/ash/ashtop.sql b/tpt/ash/ashtop.sql new file mode 100644 index 0000000..edde9b7 --- /dev/null +++ b/tpt/ash/ashtop.sql @@ -0,0 +1,133 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ashtop.sql v1.2 +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @ashtop +-- +-- Example: +-- @ashtop username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use +-- @dashtop.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-------------------------------------------------------------------------------- +COL "%This" FOR A7 +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL dop FOR 99 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +SELECT + * +FROM ( + WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + COUNT(*) totalseconds + , ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This" + , &1 + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen +-- , MAX(sql_exec_id) - MIN(sql_exec_id) + , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen + , COUNT(DISTINCT sample_time) dist_timestamps + FROM + (SELECT + a.* + , session_id sid + , session_serial# serial + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , TRUNC(px_flags / 2097152) dop + , NVL(a.event, a.session_state)|| + CASE + WHEN a.event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM gv$active_session_history a) a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + &1 + ORDER BY + TotalSeconds DESC + , &1 +) +WHERE + ROWNUM <= 15 +/ + diff --git a/tpt/ash/ashtop10.sql b/tpt/ash/ashtop10.sql new file mode 100644 index 0000000..eabc02e --- /dev/null +++ b/tpt/ash/ashtop10.sql @@ -0,0 +1,104 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ashtop.sql v1.2 +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @ashtop +-- +-- Example: +-- @ashtop username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use +-- @dashtop.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-------------------------------------------------------------------------------- +COL "%This" FOR A7 +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +SELECT + * +FROM ( + WITH bclass AS (SELECT class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + COUNT(*) totalseconds + , ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This" + , &1 + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + FROM + (SELECT + a.* + , session_id sid + , session_serial# serial + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , NVL(event, session_state)|| + CASE + WHEN event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + FROM gv$active_session_history a) a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + &1 + ORDER BY + TotalSeconds DESC + , &1 +) +WHERE + ROWNUM <= 15 +/ + diff --git a/tpt/ash/ashtopsum.sql b/tpt/ash/ashtopsum.sql new file mode 100644 index 0000000..21437c2 --- /dev/null +++ b/tpt/ash/ashtopsum.sql @@ -0,0 +1,154 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ashtopsum.sql v1.3 +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions AND (potentially lossy) SUM of IO rate metrics +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @ashtopsum +-- +-- Example: +-- @ashtopsum username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use +-- @dashtopsum.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-------------------------------------------------------------------------------- +COL "%This" FOR A7 +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL dop FOR 99 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +COL rd_rq FOR 999,999,999 +COL wr_rq FOR 999,999,999 +COL rd_mb FOR 999,999,999 +COL wr_mb FOR 999,999,999 +COL pgamem_mb FOR 9,999,999 +COL tempspc_mb FOR 99,999,999 + +PROMPT This is an experimental script as some documentation/explanation is needed. +PROMPT The ASH "delta" metrics are not tied to individual SQL_IDs or wait events, +PROMPT They are valid in the session scope (and related mostly static attributes, +PROMPT like PROGRAM, MACHINE, MODULE). Which SQL_ID/operation/event happens to be +PROMPT active when ASH samples its data is just matter of luck. + +SELECT + * +FROM ( + WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + COUNT(*) totalseconds + , ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This" + , SUM(delta_read_io_requests) rd_rq + , SUM(delta_write_io_requests) wr_rq + , SUM(delta_read_io_bytes)/1048576 rd_mb + , SUM(delta_write_io_bytes)/1048576 wr_mb + --, SUM(delta_interconnect_io_bytes) + --, SUM(delta_read_mem_bytes) + , MAX(pga_allocated)/1048576 pgamem_mb + , MAX(temp_space_allocated)/1048576 tempspc_mb + , &1 + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen +-- , MAX(sql_exec_id) - MIN(sql_exec_id) + , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen + , COUNT(DISTINCT sample_time) dist_timestamps + FROM + (SELECT + a.* + , session_id sid + , session_serial# serial + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , TRUNC(px_flags / 2097152) dop + , NVL(a.event, a.session_state)|| + CASE + WHEN a.event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM gv$active_session_history a) a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + &1 + ORDER BY + TotalSeconds DESC + , &1 +) +WHERE + ROWNUM <= 20 +/ + diff --git a/tpt/ash/asqlflame.sql b/tpt/ash/asqlflame.sql new file mode 100644 index 0000000..464cf4d --- /dev/null +++ b/tpt/ash/asqlflame.sql @@ -0,0 +1,43 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- prototype script for displaying execution plan profile as a flame chart +-- @sqlflame.sql + +SET HEADING OFF LINESIZE 32767 PAGESIZE 0 TRIMSPOOL ON TRIMOUT ON LONG 9999999 VERIFY OFF LONGCHUNKSIZE 100000 FEEDBACK OFF APPINFO OFF +SET TERMOUT OFF +--SET TIMING OFF + +WITH sq AS ( + SELECT /*+ MATERIALIZE */ + sp.id, sp.parent_id, sp.operation, sp.options + , sp.object_owner, sp.object_name, ss.last_elapsed_time, ss.elapsed_time + FROM v$sql_plan_statistics ss, v$sql_plan sp + WHERE + sp.sql_id=ss.sql_id + AND sp.child_number=ss.child_number + AND sp.address=ss.address + AND sp.id=ss.operation_id + AND sp.sql_id='&1' + AND sp.child_number=&2 +) +SELECT + '0 - SELECT STATEMENT'||TRIM(SYS_CONNECT_BY_PATH(id||' - '||operation||NVL2(options,' '||options,NULL)||NVL2(object_owner||object_name, ' ['||object_owner||'.'||object_name||']', NULL), ';'))||' '||TRIM(ROUND(elapsed_time/1000)) +FROM + sq +CONNECT BY + parent_id = PRIOR id + START WITH parent_id = 0 +. + +spool $HOME/sqlflame_stacks.txt +/ +spool off + + +SET TERMOUT ON HEADING ON PAGESIZE 5000 LINESIZE 999 FEEDBACK ON +--SET TIMING ON + +HOST $HOME/dev/FlameGraph/flamegraph.pl --countname=Milliseconds --title="sql_id=&1" $HOME/sqlflame_stacks.txt > $HOME/sqlflame_&1..svg +HOST OPEN $HOME/sqlflame_&1..svg + diff --git a/tpt/ash/asqlmon.sql b/tpt/ash/asqlmon.sql new file mode 100644 index 0000000..8455300 --- /dev/null +++ b/tpt/ash/asqlmon.sql @@ -0,0 +1,111 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: asqlmon.sql (v1.3) +-- +-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @asqlmon +-- +-- Notes: This script runs on Oracle 11g+ and you should have the +-- Diagnostics pack license for using it as it queries +-- some separately licensed views. +-- +------------------------------------------------------------------------------------------------------------------------ +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation HEADING Plan_Operation FORMAT A72 +COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE FOR 99999999999 +COL asqlmon_sql_id HEAD SQL_ID +COL asqlmon_sql_child HEAD CHILD FOR 999999 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "ID" FOR 9999 +COL asqlmon_parent_id HEAD "PID" FOR 9999 + + +BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_operation + +PROMPT +PROMPT -- ASQLMon v1.3 - by Tanel Poder ( https://tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events +FROM + v$active_session_history ash +WHERE + 1=1 +AND ash.sql_id LIKE '&1' +AND ash.sql_child_number LIKE '&2' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +) +SELECT + -- plan.sql_id asqlmon_sql_id + plan.child_number asqlmon_sql_child + , plan.plan_hash_value asqlmon_plan_hash_value + , sq.samples seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id + , plan.id asqlmon_id + , plan.parent_id asqlmon_parent_id + , LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , sq.session_state + , sq.event +-- , sq.avg_p3 + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name +-- , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1990) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1990) END asqlmon_predicates +-- , plan.projection +FROM + v$sql_plan plan + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_child_number(+) = plan.child_number +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.child_number LIKE '&2' +ORDER BY + plan.child_number + , plan.plan_hash_value + , plan.id +/ diff --git a/tpt/ash/asqlmon12.sql b/tpt/ash/asqlmon12.sql new file mode 100644 index 0000000..03fc4e4 --- /dev/null +++ b/tpt/ash/asqlmon12.sql @@ -0,0 +1,117 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: asqlmon.sql (v1.2) +-- +-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) https://tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @asqlmon +-- +-- Notes: This script runs on Oracle 11g+ and you should have the +-- Diagnostics pack license for using it as it queries +-- some separately licensed views. +-- +------------------------------------------------------------------------------------------------------------------------ +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation HEAD Plan_Operation FOR a72 +COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE PRINT +COL asqlmon_sql_id HEAD SQL_ID NOPRINT +COL asqlmon_sql_child HEAD "CHILD" PRINT +COL asqlmon_sample_time HEAD SAMPLE_HOUR +COL projection FOR A520 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "ID" FOR 9999 +COL asqlmon_parent_id HEAD "PID" FOR 9999 + + +BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation + +PROMPT +PROMPT -- ASQLMon v1.1 - by Tanel Poder ( https://tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.sql_full_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events +FROM + v$active_session_history ash +WHERE + 1=1 +AND ash.sql_id LIKE '&1' +AND ash.sql_child_number LIKE '&2' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.sql_full_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +) +SELECT + plan.sql_id asqlmon_sql_id + , plan.child_number asqlmon_sql_child + , plan.full_plan_hash_value asqlmon_full_plan_hash_value + , plan.plan_hash_value asqlmon_plan_hash_value + , sq.samples seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id + , plan.id asqlmon_id + , plan.parent_id asqlmon_parent_id + , LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , sq.session_state + , sq.event +-- , sq.avg_p3 + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name +-- , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1990) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1990) END asqlmon_predicates +-- , plan.projection +FROM + v$sql_plan plan + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_child_number(+) = plan.child_number +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_full_plan_hash_value(+) = plan.full_plan_hash_value +--AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.child_number LIKE '&2' +ORDER BY + plan.child_number + , plan.plan_hash_value + , plan.id +/ diff --git a/tpt/ash/asqlmonx.sql b/tpt/ash/asqlmonx.sql new file mode 100644 index 0000000..992cee9 --- /dev/null +++ b/tpt/ash/asqlmonx.sql @@ -0,0 +1,112 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: asqlmon.sql (v1.1) +-- +-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @asqlmon +-- +-- Notes: This script runs on Oracle 11g+ and you should have the +-- Diagnostics pack license for using it as it queries +-- some separately licensed views. +-- +------------------------------------------------------------------------------------------------------------------------ +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation HEAD Plan_Operation FOR a72 +COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE PRINT +COL asqlmon_sql_id HEAD SQL_ID NOPRINT +COL asqlmon_sql_child HEAD "CHILD" PRINT +COL asqlmon_sample_time HEAD SAMPLE_HOUR +COL projection FOR A520 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "ID" FOR 9999 +COL asqlmon_parent_id HEAD "PID" FOR 9999 + +BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation + +PROMPT +PROMPT -- ASQLMon eXtended v1.1 - by Tanel Poder ( http://blog.tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events +FROM + v$active_session_history ash +WHERE + 1=1 +AND ash.sql_id LIKE '&1' +AND ash.sql_child_number LIKE '&2' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +) +SELECT + plan.sql_id asqlmon_sql_id + , plan.child_number asqlmon_sql_child + , plan.plan_hash_value asqlmon_plan_hash_value + , sq.samples seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id + , plan.id asqlmon_id + , plan.parent_id asqlmon_parent_id + , LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , sq.session_state + , sq.event +-- , sq.avg_p3 + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name + , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| SUBSTR(plan.access_predicates,1,1990) END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:] ' || SUBSTR(plan.filter_predicates,1,1990) END asqlmon_predicates + , plan.projection +FROM + v$sql_plan plan + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_child_number(+) = plan.child_number +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.child_number LIKE '&2' +ORDER BY + plan.child_number + , plan.plan_hash_value + , plan.id +/ diff --git a/tpt/ash/bash_wait_chains.sql b/tpt/ash/bash_wait_chains.sql new file mode 100644 index 0000000..935e4ac --- /dev/null +++ b/tpt/ash/bash_wait_chains.sql @@ -0,0 +1,132 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ash_wait_chains.sql (v0.2 BETA) +-- Purpose: Display ASH wait chains (multi-session wait signature, a session +-- waiting for another session etc.) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @ash_wait_chains +-- +-- Example: +-- @ash_wait_chains username||':'||program2||event2 session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the in-memory V$ACTIVE_SESSION_HISTORY, use +-- @dash_wait_chains.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-- Oracle 10g does not have the BLOCKING_INST_ID column in ASH so you'll need +-- to comment out this column in this script. This may give you somewhat +-- incorrect results in RAC environment with global blockers. +-- +-------------------------------------------------------------------------------- +COL wait_chain FOR A300 WORD_WRAP +COL "%This" FOR A6 + +PROMPT +PROMPT -- Display ASH Wait Chain Signatures script v0.4 BETA by Tanel Poder ( http://blog.tanelpoder.com ) + +WITH +bclass AS (SELECT class, ROWNUM r from v$waitstat), +ash AS (SELECT /*+ QB_NAME(ash) LEADING(a) USE_HASH(u) SWAP_JOIN_INPUTS(u) */ + a.* + , u.username + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , NVL(a.event||CASE WHEN a.event IN ('buffer busy waits', 'gc buffer busy', 'gc buffer busy acquire', 'gc buffer busy release') + THEN ' ['||NVL((SELECT class FROM bclass WHERE r = a.p3),'undo @bclass '||a.p3)||']' ELSE null END,'ON CPU') + || ' ' event2 + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM + &ashtable. a + , dba_users u + WHERE + a.user_id = u.user_id (+) + AND sample_time BETWEEN &3 AND &4 + ), +ash_samples AS (SELECT DISTINCT sample_id FROM ash), +ash_data AS (SELECT * FROM ash), +chains AS ( + SELECT + sample_time ts + , level lvl + , session_id sid + , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND d.blocking_session IS NOT NULL THEN ' -> [idle blocker '||d.blocking_inst_id||','||d.blocking_session||','||d.blocking_session_serial#||(SELECT ' ('||s.program||')' FROM gv$session s WHERE (s.inst_id, s.sid , s.serial#) = ((d.blocking_inst_id,d.blocking_session,d.blocking_session_serial#)))||']' ELSE NULL END path -- there's a reason why I'm doing this + --, SYS_CONNECT_BY_PATH(&1, ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN '('||d.session_id||')' ELSE NULL END path + -- , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND LEVEL > 1 THEN ' [sid='||session_id||' seq#='||TO_CHAR(seq#)||']' ELSE NULL END path -- there's a reason why I'm doing this + --, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ') path -- there's a reason why I'm doing this (ORA-30004 :) + , CASE WHEN CONNECT_BY_ISLEAF = 1 THEN d.session_id ELSE NULL END sids + , CONNECT_BY_ISLEAF isleaf + , CONNECT_BY_ISCYCLE iscycle + , d.* + FROM + ash_samples s + , ash_data d + WHERE + s.sample_id = d.sample_id + AND d.sample_time BETWEEN &3 AND &4 + CONNECT BY NOCYCLE + ( PRIOR d.blocking_session = d.session_id + -- ash was saved from V$ not GV$ - AND PRIOR d.blocking_inst_id = d.inst_id + AND PRIOR s.sample_id = d.sample_id + ) + START WITH &2 +) +SELECT * FROM ( + SELECT + LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , COUNT(*) seconds + , ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , path wait_chain + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + -- , COUNT(DISTINCT sids) + -- , MIN(sids) + -- , MAX(sids) + FROM + chains + WHERE + isleaf = 1 + GROUP BY + &1 + , path + ORDER BY + COUNT(*) DESC + ) +WHERE + ROWNUM <= 30 +/ + diff --git a/tpt/ash/bashtop.sql b/tpt/ash/bashtop.sql new file mode 100644 index 0000000..36baacc --- /dev/null +++ b/tpt/ash/bashtop.sql @@ -0,0 +1,129 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ashtop.sql v1.2 +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @ashtop +-- +-- Example: +-- @ashtop username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the in-memory V$ACTIVE_SESSION_HISTORY, use +-- @dashtop.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-------------------------------------------------------------------------------- +COL "%This" FOR A7 +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +SELECT * FROM ( + WITH bclass AS (SELECT class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + COUNT(*) totalseconds + , ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This" + , &1 + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen +-- , MAX(sql_exec_id) - MIN(sql_exec_id) + , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen + FROM + (SELECT + a.* + , session_id sid + , session_serial# serial + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , NVL(event, session_state)|| + CASE + WHEN event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN ('buffer busy waits', 'gc buffer busy', 'gc buffer busy acquire', 'gc buffer busy release') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM + &ashtable. a + ) a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + &1 + ORDER BY + TotalSeconds DESC + , &1 +) +WHERE + ROWNUM <= 15 +/ + diff --git a/tpt/ash/bevent_hist.sql b/tpt/ash/bevent_hist.sql new file mode 100644 index 0000000..2faa8f3 --- /dev/null +++ b/tpt/ash/bevent_hist.sql @@ -0,0 +1,54 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft +-- for estimating the event counts (and average durations): +-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678 + +COL evh_event HEAD "Wait Event" for A50 TRUNCATE +COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12 +COL pct_evt_time HEAD "% Event|Time" +COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,999.9 +COL evh_millisec HEAD "Wait time|bucket ms+" FOR A15 JUST RIGHT +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" + +BREAK ON evh_event SKIP 1 + +SELECT + e.evh_event + , e.evh_millisec + , e.evh_sample_count + , e.evh_est_event_count + , e.evh_est_total_sec + , ROUND ( 100 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event)), '#'),' '), 10)||'|' evh_graph + , first_seen + , last_seen +FROM ( + SELECT + event evh_event + , LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END, 15) evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END) / 1000,1) evh_est_total_sec + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + FROM + &ashtable + --gv$active_session_history + WHERE + regexp_like(event, '&1') + AND &2 + AND sample_time BETWEEN &3 AND &4 + AND session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity + AND time_waited > 0 + GROUP BY + event + , CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END -- evh_millisec +) e +ORDER BY + evh_event + , evh_millisec +/ + diff --git a/tpt/ash/bevent_hist_micro.sql b/tpt/ash/bevent_hist_micro.sql new file mode 100644 index 0000000..fa7cbe7 --- /dev/null +++ b/tpt/ash/bevent_hist_micro.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft +-- for estimating the event counts (and average durations): +-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678 + +COL evh_event HEAD WAIT_EVENT for A50 TRUNCATE +COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12 +COL pct_evt_time HEAD "% Event|Time" +COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,999.9 +COL evh_millisec HEAD "Wait time|bucket us+" FOR A15 JUST RIGHT +COL evh_event HEAD "Wait Event" +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" + +BREAK ON evh_event SKIP 1 + +SELECT + e.* + , ROUND ( 100 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event)), '#'),' '), 10)||'|' evh_graph +FROM ( + SELECT + event evh_event + , LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END, 15) evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END)/1000000,1) evh_est_total_sec + FROM + &ashtable + --V$ACTIVE_SESSION_HISTORY + --dba_hist_active_sess_history + WHERE + regexp_like(event, '&1') + AND &2 + AND sample_time BETWEEN &3 AND &4 + AND session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity + AND time_waited > 0 + GROUP BY + event + , CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END -- evh_millisec +) e +ORDER BY + evh_event + , evh_millisec +/ + diff --git a/tpt/ash/bshortmon_logfilesync.sql b/tpt/ash/bshortmon_logfilesync.sql new file mode 100644 index 0000000..a3ee7a0 --- /dev/null +++ b/tpt/ash/bshortmon_logfilesync.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL wait_class FOR a15 +COL event FOR a55 +COL time_range HEAD "WAIT_TIM_BUCKET_US+" FOR 999,999,999,999 +COL avg_wait_us HEAD "AVG_WAIT_IN_BKT_US" FOR 999,999,999,999 +COL pct_event FOR a9 +COL pct_total FOR a9 + +BREAK ON event SKIP 1 DUPLICATES + +-- TODO: ignore latest sample (0 waits) + +SELECT + session_state state + , wait_class + , event + , ROUND(AVG(time_waited)) avg_wait_us + , POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))) time_range + , COUNT(*) samples + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 100, 1), 999.9))||' %',8) pct_event + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 10), '#'), ' '), 10,' ')||'|' pct_event_vis + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1), 999.9))||' %',8) pct_total + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 10), '#'), ' '), 10,' ')||'|' pct_total_vis +FROM + dba_hist_ash_aug + --gv$active_session_history + --DBA_HIST_ACTIVE_SESS_HISTORY +WHERE + &2 +AND sample_time BETWEEN &3 AND &4 +--AND sample_time BETWEEN TIMESTAMP'2013-10-01 13:54:00' AND TIMESTAMP'2013-10-01 13:55:00' +AND (UPPER(wait_class) LIKE UPPER('%&1%') OR UPPER(event) LIKE UPPER('%&1%')) +--AND program LIKE 'sqlplus%' +GROUP BY + session_state + , wait_class + , event + , POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))) +ORDER BY + session_state + , wait_class + , event + , time_range NULLS FIRST + , samples DESC +/ + diff --git a/tpt/ash/btime_model_phases.sql b/tpt/ash/btime_model_phases.sql new file mode 100644 index 0000000..62e5c9d --- /dev/null +++ b/tpt/ash/btime_model_phases.sql @@ -0,0 +1,46 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM ( + SELECT /*+ LEADING(a) USE_HASH(u) */ + count(*) + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , &1 + , CASE WHEN IN_CONNECTION_MGMT = 'Y' THEN 'CONNECTION_MGMT ' END || + CASE WHEN IN_PARSE = 'Y' THEN 'PARSE ' END || + CASE WHEN IN_HARD_PARSE = 'Y' THEN 'HARD_PARSE ' END || + CASE WHEN IN_SQL_EXECUTION = 'Y' THEN 'SQL_EXECUTION ' END || + CASE WHEN IN_PLSQL_EXECUTION = 'Y' THEN 'PLSQL_EXECUTION ' END || + CASE WHEN IN_PLSQL_RPC = 'Y' THEN 'PLSQL_RPC ' END || + CASE WHEN IN_PLSQL_COMPILATION = 'Y' THEN 'PLSQL_COMPILATION ' END || + CASE WHEN IN_JAVA_EXECUTION = 'Y' THEN 'JAVA_EXECUTION ' END || + CASE WHEN IN_BIND = 'Y' THEN 'BIND ' END || + CASE WHEN IN_CURSOR_CLOSE = 'Y' THEN 'CURSOR_CLOSE ' END || + CASE WHEN IN_SEQUENCE_LOAD = 'Y' THEN 'SEQUENCE_LOAD ' END phase + FROM + v$active_session_history a + , dba_users u + WHERE + a.user_id = u.user_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + AND session_type = 'FOREGROUND' + GROUP BY + &1 + , CASE WHEN IN_CONNECTION_MGMT = 'Y' THEN 'CONNECTION_MGMT ' END || + CASE WHEN IN_PARSE = 'Y' THEN 'PARSE ' END || + CASE WHEN IN_HARD_PARSE = 'Y' THEN 'HARD_PARSE ' END || + CASE WHEN IN_SQL_EXECUTION = 'Y' THEN 'SQL_EXECUTION ' END || + CASE WHEN IN_PLSQL_EXECUTION = 'Y' THEN 'PLSQL_EXECUTION ' END || + CASE WHEN IN_PLSQL_RPC = 'Y' THEN 'PLSQL_RPC ' END || + CASE WHEN IN_PLSQL_COMPILATION = 'Y' THEN 'PLSQL_COMPILATION ' END || + CASE WHEN IN_JAVA_EXECUTION = 'Y' THEN 'JAVA_EXECUTION ' END || + CASE WHEN IN_BIND = 'Y' THEN 'BIND ' END || + CASE WHEN IN_CURSOR_CLOSE = 'Y' THEN 'CURSOR_CLOSE ' END || + CASE WHEN IN_SEQUENCE_LOAD = 'Y' THEN 'SEQUENCE_LOAD ' END + ORDER BY + "%This" DESC +) +WHERE ROWNUM <= 20 +/ + diff --git a/tpt/ash/cashtop.sql b/tpt/ash/cashtop.sql new file mode 100644 index 0000000..6c784aa --- /dev/null +++ b/tpt/ash/cashtop.sql @@ -0,0 +1,151 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: cashtop.sql +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @cashtop +-- +-- Example: +-- @cashtop pdb_name,username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the AWR's CDB_HIST_ACTIVE_SESS_HISTORY, use +-- @ashtop.sql for accessiong the V$ ASH view +-- +-- +-- TODO: +-- Deal with cases where there's no AWR snapshot saved to DBA_HIST_SNAPSHOTS +-- (due to a DB issue) but DBA_HIST_ASH samples are there +-------------------------------------------------------------------------------- + +COL "%This" FOR A7 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A46 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 +COL sql_plan_op FOR A40 + +SELECT /*+ qb_name(main) */ * FROM ( + WITH bclass AS (SELECT class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + 10 * COUNT(*) "TotalSeconds" + , ROUND(10 * COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , &1 +-- , 10 * SUM(CASE WHEN wait_class IS NULL THEN 1 ELSE 0 END) "CPU" +-- , 10 * SUM(CASE WHEN wait_class ='User I/O' THEN 1 ELSE 0 END) "User I/O" +-- , 10 * SUM(CASE WHEN wait_class ='Application' THEN 1 ELSE 0 END) "Application" +-- , 10 * SUM(CASE WHEN wait_class ='Concurrency' THEN 1 ELSE 0 END) "Concurrency" +-- , 10 * SUM(CASE WHEN wait_class ='Commit' THEN 1 ELSE 0 END) "Commit" +-- , 10 * SUM(CASE WHEN wait_class ='Configuration' THEN 1 ELSE 0 END) "Configuration" +-- , 10 * SUM(CASE WHEN wait_class ='Cluster' THEN 1 ELSE 0 END) "Cluster" +-- , 10 * SUM(CASE WHEN wait_class ='Idle' THEN 1 ELSE 0 END) "Idle" +-- , 10 * SUM(CASE WHEN wait_class ='Network' THEN 1 ELSE 0 END) "Network" +-- , 10 * SUM(CASE WHEN wait_class ='System I/O' THEN 1 ELSE 0 END) "System I/O" +-- , 10 * SUM(CASE WHEN wait_class ='Scheduler' THEN 1 ELSE 0 END) "Scheduler" +-- , 10 * SUM(CASE WHEN wait_class ='Administrative' THEN 1 ELSE 0 END) "Administrative" +-- , 10 * SUM(CASE WHEN wait_class ='Queueing' THEN 1 ELSE 0 END) "Queueing" +-- , 10 * SUM(CASE WHEN wait_class ='Other' THEN 1 ELSE 0 END) "Other" + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen + , COUNT(DISTINCT sample_time) dist_timestamps + FROM + (SELECT + a.* + , a.instance_number AS inst_id + , a.sql_plan_operation||' '||a.sql_plan_options sql_plan_op + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , NVL(event, session_state)|| + CASE + WHEN event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + END event2 + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM cdb_hist_active_sess_history a) a + , cdb_users u + , cdb_pdbs p + , (SELECT + con_id + , object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM cdb_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.con_id = u.con_id (+) + AND a.current_obj# = o.object_id (+) + AND a.con_id = o.con_id (+) + AND a.con_id = p.con_id (+) + AND &2 + AND a.sample_time BETWEEN &3 AND &4 + GROUP BY + &1 + ORDER BY + "TotalSeconds" DESC + , &1 +) +WHERE + ROWNUM <= 20 +/ + diff --git a/tpt/ash/create_ash_without_timestamps.sql b/tpt/ash/create_ash_without_timestamps.sql new file mode 100644 index 0000000..6ded18e --- /dev/null +++ b/tpt/ash/create_ash_without_timestamps.sql @@ -0,0 +1,119 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE OR REPLACE VIEW t$ash AS +SELECT + SAMPLE_ID -- NUMBER + , CAST(SAMPLE_TIME AS DATE) sample_time -- TIMESTAMP(3) + , TO_CHAR(sample_time, 'YYYY') sample_year + , TO_CHAR(sample_time, 'MM') sample_month_num + , TO_CHAR(sample_time, 'MON') sample_mon + , TO_CHAR(sample_time, 'Month') sample_month + , TO_CHAR(sample_time, 'DD') sample_day + , TO_CHAR(sample_time, 'HH24') sample_hour + , TO_CHAR(sample_time, 'MI') sample_minute + , TO_CHAR(sample_time, 'SS') sample_second + , IS_AWR_SAMPLE -- VARCHAR2(1) + , SESSION_ID -- NUMBER + , SESSION_SERIAL# -- NUMBER + , SESSION_TYPE -- VARCHAR2(10) + , FLAGS -- NUMBER + , a.USER_ID -- NUMBER + , u.username + , SQL_ID -- VARCHAR2(13) + , IS_SQLID_CURRENT -- VARCHAR2(1) + , SQL_CHILD_NUMBER -- NUMBER + , SQL_OPCODE -- NUMBER + , SQL_OPNAME -- VARCHAR2(64) + , FORCE_MATCHING_SIGNATURE -- NUMBER + , TOP_LEVEL_SQL_ID -- VARCHAR2(13) + , TOP_LEVEL_SQL_OPCODE -- NUMBER + , SQL_PLAN_HASH_VALUE -- NUMBER + , SQL_PLAN_LINE_ID -- NUMBER + , SQL_PLAN_OPERATION -- VARCHAR2(30) + , SQL_PLAN_OPTIONS -- VARCHAR2(30) + , SQL_EXEC_ID -- NUMBER + , SQL_EXEC_START -- DATE + , PLSQL_ENTRY_OBJECT_ID -- NUMBER + , PLSQL_ENTRY_SUBPROGRAM_ID -- NUMBER + , PLSQL_OBJECT_ID -- NUMBER + , PLSQL_SUBPROGRAM_ID -- NUMBER + , QC_INSTANCE_ID -- NUMBER + , QC_SESSION_ID -- NUMBER + , QC_SESSION_SERIAL# -- NUMBER + , PX_FLAGS -- NUMBER + , EVENT -- VARCHAR2(64) + , EVENT_ID -- NUMBER + , EVENT# -- NUMBER + , SEQ# -- NUMBER + , P1TEXT -- VARCHAR2(64) + , P1 -- NUMBER + , P2TEXT -- VARCHAR2(64) + , P2 -- NUMBER + , P3TEXT -- VARCHAR2(64) + , P3 -- NUMBER + , WAIT_CLASS -- VARCHAR2(64) + , WAIT_CLASS_ID -- NUMBER + , WAIT_TIME -- NUMBER + , SESSION_STATE -- VARCHAR2(7) + , TIME_WAITED -- NUMBER + , BLOCKING_SESSION_STATUS -- VARCHAR2(11) + , BLOCKING_SESSION -- NUMBER + , BLOCKING_SESSION_SERIAL# -- NUMBER + , BLOCKING_INST_ID -- NUMBER + , BLOCKING_HANGCHAIN_INFO -- VARCHAR2(1) + , CURRENT_OBJ# -- NUMBER + , CURRENT_FILE# -- NUMBER + , CURRENT_BLOCK# -- NUMBER + , CURRENT_ROW# -- NUMBER + , TOP_LEVEL_CALL# -- NUMBER + , TOP_LEVEL_CALL_NAME -- VARCHAR2(64) + , CONSUMER_GROUP_ID -- NUMBER + , XID -- RAW(8) + , REMOTE_INSTANCE# -- NUMBER + , TIME_MODEL -- NUMBER + , IN_CONNECTION_MGMT -- VARCHAR2(1) + , IN_PARSE -- VARCHAR2(1) + , IN_HARD_PARSE -- VARCHAR2(1) + , IN_SQL_EXECUTION -- VARCHAR2(1) + , IN_PLSQL_EXECUTION -- VARCHAR2(1) + , IN_PLSQL_RPC -- VARCHAR2(1) + , IN_PLSQL_COMPILATION -- VARCHAR2(1) + , IN_JAVA_EXECUTION -- VARCHAR2(1) + , IN_BIND -- VARCHAR2(1) + , IN_CURSOR_CLOSE -- VARCHAR2(1) + , IN_SEQUENCE_LOAD -- VARCHAR2(1) + , CAPTURE_OVERHEAD -- VARCHAR2(1) + , REPLAY_OVERHEAD -- VARCHAR2(1) + , IS_CAPTURED -- VARCHAR2(1) + , IS_REPLAYED -- VARCHAR2(1) + , SERVICE_HASH -- NUMBER + , PROGRAM -- VARCHAR2(48) + , MODULE -- VARCHAR2(64) + , ACTION -- VARCHAR2(64) + , CLIENT_ID -- VARCHAR2(64) + , MACHINE -- VARCHAR2(64) + , PORT -- NUMBER + , ECID -- VARCHAR2(64) + , DBREPLAY_FILE_ID -- NUMBER + , DBREPLAY_CALL_COUNTER -- NUMBER + , TM_DELTA_TIME -- NUMBER + , TM_DELTA_CPU_TIME -- NUMBER + , TM_DELTA_DB_TIME -- NUMBER + , DELTA_TIME -- NUMBER + , DELTA_READ_IO_REQUESTS -- NUMBER + , DELTA_WRITE_IO_REQUESTS -- NUMBER + , DELTA_READ_IO_BYTES -- NUMBER + , DELTA_WRITE_IO_BYTES -- NUMBER + , DELTA_INTERCONNECT_IO_BYTES -- NUMBER + , PGA_ALLOCATED -- NUMBER + , TEMP_SPACE_ALLOCATED -- NUMBER +FROM + v$active_session_history a +-- , dba_users u +WHERE + a.user_id = u.user_id (+) +/ + +GRANT SELECT ON t$ash TO public; +CREATE PUBLIC SYNONYM t$ash FOR sys.t$ash; diff --git a/tpt/ash/daplanline.sql b/tpt/ash/daplanline.sql new file mode 100644 index 0000000..02914dc --- /dev/null +++ b/tpt/ash/daplanline.sql @@ -0,0 +1,89 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: daplanline.sql (v1.0) +-- +-- Purpose: Report response time consumption data from DBA_HIST_ACTIVE_SESS_HISTORY +-- by top SQL PLAN rowsource TYPE (not individual SQL) +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @daplanline SYSDATE-1 SYSDATE +-- @daplanline DATE'2013-11-11' DATE'2013-11-12' +-- @daplanline "TIMESTAMP'2013-11-11 10:00:00'" "TIMESTAMP'2013-11-11 15:00:00'" +-- ^^^- note the double quotes around the timestamp syntax, needed due to spaces +-- +-- Notes: This script runs on Oracle 11g+ and you should have the +-- Diagnostics and Tuning pack licenses for using it as it queries +-- some separately licensed views. +-- +------------------------------------------------------------------------------------------------------------------------ +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation FOR a100 +COL asqlmon_predicates FOR a100 word_wrap +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE +COL asqlmon_sql_id HEAD SQL_ID NOPRINT +COL asqlmon_sql_child HEAD CHILD# NOPRINT +COL asqlmon_sample_time HEAD SAMPLE_HOUR +COL projection FOR A520 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "Line ID" FOR 9999 +COL asqlmon_parent_id HEAD "Parent" FOR 9999 +COL daplanline_plan_line FOR A60 HEAD "Plan Line" + +BREAK ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation + +WITH sq AS ( +SELECT + -- to_char(ash.sample_time, 'YYYY-MM-DD HH24') sample_time + count(*) samples + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +FROM + dba_hist_active_sess_history ash +WHERE + sample_time BETWEEN &1 AND &2 +AND snap_id IN (SELECT snap_id FROM dba_hist_snapshot WHERE begin_interval_time >= &1 AND end_interval_time <= &2) +AND session_type = 'FOREGROUND' +GROUP BY + --to_char(ash.sample_time, 'YYYY-MM-DD HH24') + ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +) +SELECT * FROM ( + SELECT + sq.samples * 10 seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER () * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER () * 10), '#'), ' '), 10,' ')||'|' pct_child_vis + --, sq.sample_time asqlmon_sample_time + , sq.sql_plan_operation ||' '|| sq.sql_plan_options daplanline_plan_line + , sq.session_state + , sq.event + FROM + sq + WHERE + 1=1 + ORDER BY + --sq.sample_time + seconds DESC +) +WHERE + rownum <= 30 +/ diff --git a/tpt/ash/dash_wait_chains.sql b/tpt/ash/dash_wait_chains.sql new file mode 100644 index 0000000..f7bcfdf --- /dev/null +++ b/tpt/ash/dash_wait_chains.sql @@ -0,0 +1,137 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: dash_wait_chains.sql (v0.8) +-- Purpose: Display ASH wait chains (multi-session wait signature, a session +-- waiting for another session etc.) +-- +-- Author: Tanel Poder +-- Copyright: (c) https://tanelpoder.com +-- +-- Usage: +-- @dash_wait_chains +-- +-- Example: +-- @dash_wait_chains username||':'||program2||event2 session_type='FOREGROUND' sysdate-1 sysdate +-- +-- Other: +-- This script uses only the DBA_HIST_ACTIVE_SESS_HISTORY view, use +-- @ash_wait_chains.sql for accessiong the GV$ ASH view for realtime info +-- +-------------------------------------------------------------------------------- +COL wait_chain FOR A300 WORD_WRAP +COL "%This" FOR A6 + +PROMPT +PROMPT -- Display ASH Wait Chain Signatures script v0.8 by Tanel Poder ( https://tanelpoder.com ) + +WITH +bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat), +ash AS (SELECT /*+ INLINE QB_NAME(ash) LEADING(a) USE_HASH(u) SWAP_JOIN_INPUTS(u) */ + a.* + , o.* + , SUBSTR(TO_CHAR(a.sample_time, 'YYYYMMDDHH24MISS'),1,13) sample_time_10s -- ASH dba_hist_ samples stored every 10sec + , u.username + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , NVL(a.event||CASE WHEN event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||NVL((SELECT class FROM bclass WHERE r = a.p3),'undo @bclass '||a.p3)||']' ELSE null END,'ON CPU') + || ' ' event2 + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM + dba_hist_active_sess_history a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND sample_time BETWEEN &3 AND &4 + ), +ash_samples AS (SELECT /*+ INLINE */ DISTINCT sample_time_10s FROM ash), +ash_data AS (SELECT /*+ INLINE */ * FROM ash), +chains AS ( + SELECT /*+ INLINE */ + d.sample_time_10s ts + , level lvl + , session_id sid + , REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 AND d.blocking_session IS NOT NULL THEN ' -> [idle blocker '||d.blocking_inst_id||','||d.blocking_session||','||d.blocking_session_serial#||(SELECT ' ('||s.program||')' FROM gv$session s WHERE (s.inst_id, s.sid , s.serial#) = ((d.blocking_inst_id,d.blocking_session,d.blocking_session_serial#)))||']' ELSE NULL END path -- there's a reason why I'm doing this + --, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ') path -- there's a reason why I'm doing this (ORA-30004 :) + --, SYS_CONNECT_BY_PATH(&1, ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN '('||d.session_id||')' ELSE NULL END path + --, REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ')||CASE WHEN CONNECT_BY_ISLEAF = 1 THEN ' [sid='||d.session_id||' seq#='||TO_CHAR(seq#)||']' ELSE NULL END path -- there's a reason why I'm doing this (ORA-30004 :) + , CASE WHEN CONNECT_BY_ISLEAF = 1 THEN d.session_id ELSE NULL END sids + , CONNECT_BY_ISLEAF isleaf + , CONNECT_BY_ISCYCLE iscycle + , d.* + FROM + ash_samples s + , ash_data d + WHERE + s.sample_time_10s = d.sample_time_10s + AND d.sample_time BETWEEN &3 AND &4 + CONNECT BY NOCYCLE + ( PRIOR d.blocking_session = d.session_id + AND PRIOR s.sample_time_10s = d.sample_time_10s + AND PRIOR d.blocking_inst_id = d.instance_number) + START WITH &2 +) +SELECT * FROM ( + SELECT + LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , COUNT(*) * 10 seconds + , ROUND(COUNT(*) * 10 / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , path wait_chain + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + , COUNT(DISTINCT sids) num_sids + , MIN(sids) + , MAX(sids) + FROM + chains + WHERE + isleaf = 1 + GROUP BY + &1 + , path + ORDER BY + COUNT(*) DESC +) +WHERE + rownum <= 30 +/ + diff --git a/tpt/ash/dashpeak.sql b/tpt/ash/dashpeak.sql new file mode 100644 index 0000000..81e6520 --- /dev/null +++ b/tpt/ash/dashpeak.sql @@ -0,0 +1,98 @@ +-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ashpeak.sql +-- Purpose: +-- +-- Author: Tanel Poder +-- Copyright: (c) https://tanelpoder.com +-- +-- Usage: +-- @ashpeak +-- +-- Example: +-- +-- Other: +-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use +-- @dashpeak.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-------------------------------------------------------------------------------- +COL "%Total" FOR A7 JUST RIGHT +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL dop FOR 99 +COL AAS FOR 9999999999.9 +COL log2_aas_4k FOR A14 HEAD "Log(2,AAS)" JUST LEFT +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +PROMPT +PROMPT AAS by &1 within time range between &3 and &4 + +WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) +SELECT + &1 + , COUNT(*) * 10 totalseconds + , ROUND(COUNT(*) * 10 / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400, 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*) * 10) OVER () * 100)||'%',5,' ') "%Total" + , '|'||RPAD(NVL(RPAD('#', ROUND(LOG(2,COUNT(*) * 10 / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400), 1), '#'),' '), 12)||'|' log2_aas_4k +FROM ( + SELECT + TRUNC(sample_time, 'DD') dd + , TRUNC(sample_time, 'HH') hh + , TRUNC(sample_time, 'MI') mi + , TO_DATE(SUBSTR(TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI'), 1, 15)||'0', 'YYYY-MM-DD HH24:MI') mt + , CAST(sample_time AS DATE) ss + , NVL(a.event, a.session_state)|| + CASE + WHEN a.event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , a.* + , u.username + , o.* + FROM + dba_hist_active_sess_history a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 +) +GROUP BY + &1 +ORDER BY + &1 +/ + diff --git a/tpt/ash/dashpeaktop.sql b/tpt/ash/dashpeaktop.sql new file mode 100644 index 0000000..aad9aa9 --- /dev/null +++ b/tpt/ash/dashpeaktop.sql @@ -0,0 +1,119 @@ +-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ashpeak.sql +-- Purpose: +-- +-- Author: Tanel Poder +-- Copyright: (c) https://tanelpoder.com +-- +-- Usage: +-- @dashpeaktop +-- +-- Example: +-- +-- Other: +-- This script uses only the in-memory GV$ACTIVE_SESSION_HISTORY, use +-- @dashpeak.sql for accessiong the DBA_HIST_ACTIVE_SESS_HISTORY archive +-- +-------------------------------------------------------------------------------- +COL "%Total" FOR A7 JUST RIGHT +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL dop FOR 99 +COL AAS FOR 9999999999.9 +COL log2_aas_4k FOR A14 HEAD "Log(2,AAS)" JUST LEFT +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +PROMPT +PROMPT Top AAS peaks within time range between &3 and &4 + +WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) +SELECT * FROM ( + SELECT + &1 + , COUNT(*) sessions + , COUNT(*) * 10 totalseconds + , ROUND(COUNT(*) * 10 / NULLIF(CAST(MAX(sample_time) AS DATE) - CAST(MIN(sample_time) AS DATE),0) / 86400, 1) AAS + FROM ( + SELECT + TRUNC(sample_time, 'DD') dd + , TRUNC(sample_time, 'HH') hh + , TRUNC(sample_time, 'MI') mi + , TO_DATE(SUBSTR(TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI'), 1, 15)||'0', 'YYYY-MM-DD HH24:MI') mt + , CAST(sample_time AS DATE) ss + , NVL(a.event, a.session_state)|| + CASE + WHEN a.event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , a.* + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM + dba_hist_active_sess_history a + WHERE + &2 + AND sample_time BETWEEN &3 AND &4 + ) + GROUP BY + &1 + ORDER BY + totalseconds DESC +) +WHERE + rownum <= 25 +/ + diff --git a/tpt/ash/dashtop.sql b/tpt/ash/dashtop.sql new file mode 100644 index 0000000..20873dc --- /dev/null +++ b/tpt/ash/dashtop.sql @@ -0,0 +1,150 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: dashtop.sql v1.2 +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @dashtop +-- +-- Example: +-- @dashtop username,sql_id session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses only the AWR's DBA_HIST_ACTIVE_SESS_HISTORY, use +-- @dashtop.sql for accessiong the V$ ASH view +-- +-- +-- TODO: +-- Deal with cases where there's no AWR snapshot saved to DBA_HIST_SNAPSHOTS +-- (due to a DB issue) but DBA_HIST_ASH samples are there +-------------------------------------------------------------------------------- + +COL "%This" FOR A7 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A46 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 +COL sql_plan_op FOR A40 + +SELECT /*+ qb_name(main) */ * FROM ( + WITH bclass AS (SELECT class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + 10 * COUNT(*) "TotalSeconds" + , ROUND(10 * COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , &1 +-- , 10 * SUM(CASE WHEN wait_class IS NULL THEN 1 ELSE 0 END) "CPU" +-- , 10 * SUM(CASE WHEN wait_class ='User I/O' THEN 1 ELSE 0 END) "User I/O" +-- , 10 * SUM(CASE WHEN wait_class ='Application' THEN 1 ELSE 0 END) "Application" +-- , 10 * SUM(CASE WHEN wait_class ='Concurrency' THEN 1 ELSE 0 END) "Concurrency" +-- , 10 * SUM(CASE WHEN wait_class ='Commit' THEN 1 ELSE 0 END) "Commit" +-- , 10 * SUM(CASE WHEN wait_class ='Configuration' THEN 1 ELSE 0 END) "Configuration" +-- , 10 * SUM(CASE WHEN wait_class ='Cluster' THEN 1 ELSE 0 END) "Cluster" +-- , 10 * SUM(CASE WHEN wait_class ='Idle' THEN 1 ELSE 0 END) "Idle" +-- , 10 * SUM(CASE WHEN wait_class ='Network' THEN 1 ELSE 0 END) "Network" +-- , 10 * SUM(CASE WHEN wait_class ='System I/O' THEN 1 ELSE 0 END) "System I/O" +-- , 10 * SUM(CASE WHEN wait_class ='Scheduler' THEN 1 ELSE 0 END) "Scheduler" +-- , 10 * SUM(CASE WHEN wait_class ='Administrative' THEN 1 ELSE 0 END) "Administrative" +-- , 10 * SUM(CASE WHEN wait_class ='Queueing' THEN 1 ELSE 0 END) "Queueing" +-- , 10 * SUM(CASE WHEN wait_class ='Other' THEN 1 ELSE 0 END) "Other" + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen + , COUNT(DISTINCT sample_time) dist_timestamps + FROM + (SELECT + a.* + , a.instance_number AS inst_id + , a.sql_plan_operation||' '||a.sql_plan_options sql_plan_op + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , NVL(event, session_state)|| + CASE + WHEN event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + END event2 + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM dba_hist_active_sess_history a) a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND a.sample_time BETWEEN &3 AND &4 + --AND a.dbid = (SELECT d.dbid FROM v$database d) -- for partition pruning + --AND a.snap_id IN (SELECT sn.snap_id FROM dba_hist_snapshot sn WHERE sn.begin_interval_time >= &3 AND sn.end_interval_time <= &4) -- for partition pruning + AND snap_id IN (SELECT snap_id FROM dba_hist_snapshot WHERE sample_time BETWEEN &3 AND &4) -- for partition pruning + --AND (a.dbid, a.snap_id) IN (SELECT d.dbid, sn.snap_id FROM v$database d, dba_hist_snapshot sn WHERE d.dbid = sn.dbid AND sn.begin_interval_time >= &3 AND sn.end_interval_time <= &4) -- for partition pruning + GROUP BY + &1 + ORDER BY + "TotalSeconds" DESC + , &1 +) +WHERE + ROWNUM <= 20 +/ + diff --git a/tpt/ash/dashtopsum.sql b/tpt/ash/dashtopsum.sql new file mode 100644 index 0000000..224095d --- /dev/null +++ b/tpt/ash/dashtopsum.sql @@ -0,0 +1,154 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: dashtopsum.sql v1.3 +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions AND (potentially lossy) SUM of IO rate metrics +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @dashtopsum +-- +-- Example: +-- @dashtopsum username,sql_opname session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses the DBA_HIST_ACTIVE_SESS_HISTORY archive in AWR repo +-- use +-- +-------------------------------------------------------------------------------- +COL "%This" FOR A7 +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL dop FOR 99 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +COL rd_rq FOR 99,999,999,999 +COL wr_rq FOR 99,999,999,999 +COL rd_mb FOR 99,999,999,999 +COL wr_mb FOR 99,999,999,999 +COL pgamem_mb FOR 9,999,999 +COL tempspc_mb FOR 99,999,999 + +PROMPT This is an experimental script as some documentation/explanation is needed. +PROMPT The ASH "delta" metrics are not tied to individual SQL_IDs or wait events, +PROMPT They are valid in the session scope (and related mostly static attributes, +PROMPT like PROGRAM, MACHINE, MODULE). Which SQL_ID/operation/event happens to be +PROMPT active when ASH samples its data is just matter of luck. + +SELECT + * +FROM ( + WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + 10 * COUNT(*) totalseconds + , ROUND(10 * COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This" + , SUM(delta_read_io_requests) rd_rq + , SUM(delta_write_io_requests) wr_rq + , SUM(delta_read_io_bytes)/1048576 rd_mb + , SUM(delta_write_io_bytes)/1048576 wr_mb + --, SUM(delta_interconnect_io_bytes) + --, SUM(delta_read_mem_bytes) + , MAX(pga_allocated)/1048576 pgamem_mb + , MAX(temp_space_allocated)/1048576 tempspc_mb + , &1 + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen +-- , MAX(sql_exec_id) - MIN(sql_exec_id) + , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen + , COUNT(DISTINCT sample_time) dist_timestamps + FROM + (SELECT + a.* + , session_id sid + , session_serial# serial + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , TRUNC(px_flags / 2097152) dop + , NVL(a.event, a.session_state)|| + CASE + WHEN a.event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM dba_hist_active_sess_history a) a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + &1 + ORDER BY + TotalSeconds DESC + , &1 +) +WHERE + ROWNUM <= 20 +/ + diff --git a/tpt/ash/dashtopsum_pga.sql b/tpt/ash/dashtopsum_pga.sql new file mode 100644 index 0000000..b106bd0 --- /dev/null +++ b/tpt/ash/dashtopsum_pga.sql @@ -0,0 +1,154 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: dashtopsum.sql v1.3 +-- Purpose: Display top ASH time (count of ASH samples) grouped by your +-- specified dimensions AND (potentially lossy) SUM of IO rate metrics +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @dashtopsum +-- +-- Example: +-- @dashtopsum username,sql_opname session_type='FOREGROUND' sysdate-1/24 sysdate +-- +-- Other: +-- This script uses the DBA_HIST_ACTIVE_SESS_HISTORY archive in AWR repo +-- use +-- +-------------------------------------------------------------------------------- +COL "%This" FOR A7 +--COL p1 FOR 99999999999999 +--COL p2 FOR 99999999999999 +--COL p3 FOR 99999999999999 +COL p1text FOR A30 word_wrap +COL p2text FOR A30 word_wrap +COL p3text FOR A30 word_wrap +COL p1hex FOR A17 +COL p2hex FOR A17 +COL p3hex FOR A17 +COL dop FOR 99 +COL AAS FOR 9999.9 +COL totalseconds HEAD "Total|Seconds" FOR 99999999 +COL dist_sqlexec_seen HEAD "Distinct|Execs Seen" FOR 999999 +COL dist_timestamps HEAD "Distinct|Tstamps" FOR 999999 +COL event FOR A42 WORD_WRAP +COL event2 FOR A42 WORD_WRAP +COL time_model_name FOR A50 WORD_WRAP +COL program2 FOR A40 TRUNCATE +COL username FOR A20 wrap +COL obj FOR A30 +COL objt FOR A50 +COL sql_opname FOR A20 +COL top_level_call_name FOR A30 +COL wait_class FOR A15 + +COL rd_rq FOR 99,999,999,999 +COL wr_rq FOR 99,999,999,999 +COL rd_mb FOR 99,999,999,999 +COL wr_mb FOR 99,999,999,999 +COL pgamem_mb FOR 9,999,999 +COL tempspc_mb FOR 99,999,999 + +PROMPT This is an experimental script as some documentation/explanation is needed. +PROMPT The ASH "delta" metrics are not tied to individual SQL_IDs or wait events, +PROMPT They are valid in the session scope (and related mostly static attributes, +PROMPT like PROGRAM, MACHINE, MODULE). Which SQL_ID/operation/event happens to be +PROMPT active when ASH samples its data is just matter of luck. + +SELECT + * +FROM ( + WITH bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) + SELECT /*+ LEADING(a) USE_HASH(u) */ + 10 * COUNT(*) totalseconds + , ROUND(10 * COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This" + , SUM(delta_read_io_requests) rd_rq + , SUM(delta_write_io_requests) wr_rq + , SUM(delta_read_io_bytes)/1048576 rd_mb + , SUM(delta_write_io_bytes)/1048576 wr_mb + --, SUM(delta_interconnect_io_bytes) + --, SUM(delta_read_mem_bytes) + , MAX(pga_allocated)/1048576 pgamem_mb + , MAX(temp_space_allocated)/1048576 tempspc_mb + , &1 + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen +-- , MAX(sql_exec_id) - MIN(sql_exec_id) + , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen + , COUNT(DISTINCT sample_time) dist_timestamps + FROM + (SELECT + a.* + , session_id sid + , session_serial# serial + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN session_state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + , TRUNC(px_flags / 2097152) dop + , NVL(a.event, a.session_state)|| + CASE + WHEN a.event like 'enq%' AND session_state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN a.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||CASE WHEN a.p3 <= (SELECT MAX(r) FROM bclass) + THEN (SELECT class FROM bclass WHERE r = a.p3) + ELSE (SELECT DECODE(MOD(BITAND(a.p3,TO_NUMBER('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') FROM dual) + END ||']' + ELSE null + END event2 -- event is NULL in ASH if the session is not waiting (session_state = ON CPU) + , CASE WHEN a.session_type = 'BACKGROUND' OR REGEXP_LIKE(a.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(a.program,INSTR(a.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(a.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , CASE WHEN BITAND(time_model, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + ||CASE WHEN BITAND(time_model, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + ||CASE WHEN BITAND(time_model, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + ||CASE WHEN BITAND(time_model, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + ||CASE WHEN BITAND(time_model, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + ||CASE WHEN BITAND(time_model, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + ||CASE WHEN BITAND(time_model, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + ||CASE WHEN BITAND(time_model, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + ||CASE WHEN BITAND(time_model, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END time_model_name + FROM dba_hist_active_sess_history a) a + , dba_users u + , (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + a.user_id = u.user_id (+) + AND a.current_obj# = o.object_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + &1 + ORDER BY + pgamem_mb DESC NULLS LAST + , &1 +) +WHERE + ROWNUM <= 20 +/ + diff --git a/tpt/ash/dasqlmon.sql b/tpt/ash/dasqlmon.sql new file mode 100644 index 0000000..648e4ea --- /dev/null +++ b/tpt/ash/dasqlmon.sql @@ -0,0 +1,107 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: dasqlmon.sql (v1.2) +-- +-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) https://tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @dasqlmon +-- +-- Notes: This script runs on Oracle 11g+ and you should have the +-- Diagnostics license for using it as it queries +-- some separately licensed views. +-- +------------------------------------------------------------------------------------------------------------------------ +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation HEAD Plan_Operation FOR a70 +COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE +COL asqlmon_sql_id HEAD SQL_ID NOPRINT +COL asqlmon_sql_child HEAD "CHILD" PRINT +COL asqlmon_sample_time HEAD SAMPLE_HOUR +COL projection FOR A520 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "ID" FOR 9999 +COL asqlmon_parent_id HEAD "PID" FOR 9999 + +BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation + +PROMPT +PROMPT -- ASQLMon v1.1 - by Tanel Poder ( https://tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events +FROM + dba_hist_active_sess_history ash +WHERE + 1=1 +AND ash.sql_id LIKE '&1' +AND ash.sql_plan_hash_value LIKE '&2' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +) +SELECT + plan.sql_id asqlmon_sql_id + , plan.plan_hash_value asqlmon_plan_hash_value + , sq.samples * 10 seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id + , plan.id asqlmon_id + , plan.parent_id asqlmon_parent_id + , LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , sq.session_state + , sq.event +-- , sq.avg_p3 + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name + , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| plan.access_predicates END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:]' || plan.filter_predicates END asqlmon_predicates +-- , plan.projection +FROM + dba_hist_sql_plan plan + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.plan_hash_value LIKE '&2' +ORDER BY + plan.plan_hash_value + , plan.id +/ diff --git a/tpt/ash/dasqlmonx.sql b/tpt/ash/dasqlmonx.sql new file mode 100644 index 0000000..b698b69 --- /dev/null +++ b/tpt/ash/dasqlmonx.sql @@ -0,0 +1,107 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: dasqlmon.sql (v1.2) +-- +-- Purpose: Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) https://tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @dasqlmon +-- +-- Notes: This script runs on Oracle 11g+ and you should have the +-- Diagnostics license for using it as it queries +-- some separately licensed views. +-- +------------------------------------------------------------------------------------------------------------------------ +SET LINESIZE 999 PAGESIZE 5000 TRIMOUT ON TRIMSPOOL ON + +COL asqlmon_operation HEAD Plan_Operation FOR a70 +COL asqlmon_predicates HEAD PREDICATES FOR a100 word_wrap +COL obj_alias_qbc_name FOR a40 +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE +COL asqlmon_sql_id HEAD SQL_ID NOPRINT +COL asqlmon_sql_child HEAD "CHILD" PRINT +COL asqlmon_sample_time HEAD SAMPLE_HOUR +COL projection FOR A520 + +COL pct_child HEAD "Activity %" FOR A8 +COL pct_child_vis HEAD "Visual" FOR A12 + +COL asqlmon_id HEAD "ID" FOR 9999 +COL asqlmon_parent_id HEAD "PID" FOR 9999 + +BREAK ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sample_time SKIP 1 DUP ON asqlmon_operation + +PROMPT +PROMPT -- ASQLMon v1.1 - by Tanel Poder ( https://tanelpoder.com ) - Display SQL execution plan line level activity breakdown from ASH + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT + count(*) samples + , ash.sql_id + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) sql_plan_line_id -- this is because simple "planless" operations like single-row insert + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +-- , AVG(ash.p3) avg_p3 -- p3 is sometimes useful for listing block counts for IO wait events +FROM + dba_hist_active_sess_history ash +WHERE + 1=1 +AND ash.sql_id LIKE '&1' +AND ash.sql_plan_hash_value LIKE '&2' +AND ash.sample_time BETWEEN &3 AND &4 +GROUP BY + ash.sql_id + , ash.sql_plan_hash_value + , NVL(ash.sql_plan_line_id,1) + , ash.sql_plan_operation + , ash.sql_plan_options + , ash.session_state + , ash.event +) +SELECT + plan.sql_id asqlmon_sql_id + , plan.plan_hash_value asqlmon_plan_hash_value + , sq.samples * 10 seconds + , LPAD(TO_CHAR(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9)||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis +--, LPAD(plan.id,4)||CASE WHEN parent_id IS NULL THEN ' ' ELSE ' <- ' END||LPAD(plan.parent_id,4) asqlmon_plan_id + , plan.id asqlmon_id + , plan.parent_id asqlmon_parent_id + , LPAD(' ', depth, ' ') || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , sq.session_state + , sq.event +-- , sq.avg_p3 + , plan.object_alias || CASE WHEN plan.qblock_name IS NOT NULL THEN ' ['|| plan.qblock_name || ']' END obj_alias_qbc_name + , CASE WHEN plan.access_predicates IS NOT NULL THEN '[A:] '|| plan.access_predicates END || CASE WHEN plan.filter_predicates IS NOT NULL THEN ' [F:]' || plan.filter_predicates END asqlmon_predicates + , plan.projection +FROM + dba_hist_sql_plan plan + , sq +WHERE + 1=1 +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.plan_hash_value LIKE '&2' +ORDER BY + plan.plan_hash_value + , plan.id +/ diff --git a/tpt/ash/devent_hist.sql b/tpt/ash/devent_hist.sql new file mode 100644 index 0000000..873c39a --- /dev/null +++ b/tpt/ash/devent_hist.sql @@ -0,0 +1,70 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------------------------- +-- +-- File name: devent_hist.sql +-- Purpose: Display wait event duration histogram from DBA_HIST_ACTIVE_SESS_HISTORY +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com | @tanelpoder +-- +-- Usage: +-- @ash/devent_hist file 1=1 sysdate-1 sysdate +-- @ash/devent_hist file 1=1 "TIMESTAMP'2014-06-05 09:30:00'" "TIMESTAMP'2014-06-05 09:35:00'" +-- +-- Other: +-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft +-- for estimating the event counts (and average durations): +-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678 +-- +-------------------------------------------------------------------------------------------------- + +COL evh_event HEAD "Wait Event" for A50 TRUNCATE +COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12 +COL pct_evt_time HEAD "% Event|Time" +COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,999.9 +COL evh_millisec HEAD "Wait time|bucket ms+" FOR A15 JUST RIGHT +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" FOR 999,999,999.9 +COL first_seen FOR A25 +COL last_seen FOR A25 + +BREAK ON evh_event SKIP 1 + +SELECT + e.evh_event + , e.evh_millisec + , e.evh_sample_count + , e.evh_est_event_count + , e.evh_est_total_sec + , ROUND ( 100 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event)), '#'),' '), 10)||'|' evh_graph + , first_seen + , last_seen +FROM ( + SELECT + event evh_event + , LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END, 15) evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END) * 10 / 1000,1 ) evh_est_total_sec + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + FROM + dba_hist_active_sess_history + WHERE + regexp_like(event, '&1') + AND &2 + AND sample_time BETWEEN &3 AND &4 + AND session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity + AND time_waited > 0 + GROUP BY + event + , CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END -- evh_millisec +) e +ORDER BY + evh_event + , evh_millisec +/ + diff --git a/tpt/ash/devent_hist_micro.sql b/tpt/ash/devent_hist_micro.sql new file mode 100644 index 0000000..05d0d05 --- /dev/null +++ b/tpt/ash/devent_hist_micro.sql @@ -0,0 +1,46 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft +-- for estimating the event counts (and average durations): +-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678 + +COL evh_event HEAD WAIT_EVENT for A50 TRUNCATE +COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12 +COL pct_evt_time HEAD "% Event|Time" +COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,999.9 +COL evh_millisec HEAD "Wait time|bucket us+" FOR A15 JUST RIGHT +COL evh_event HEAD "Wait Event" +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" + +BREAK ON evh_event SKIP 1 + +SELECT + e.* + , ROUND ( 100 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event)), '#'),' '), 10)||'|' evh_graph +FROM ( + SELECT + event evh_event + , LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END, 15) evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END)/1000000,1) evh_est_total_sec + FROM + dba_hist_active_sess_history + WHERE + regexp_like(event, '&1') + AND &2 + AND sample_time BETWEEN &3 AND &4 + AND session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity + AND time_waited > 0 + GROUP BY + event + , CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END -- evh_millisec +) e +ORDER BY + evh_event + , evh_millisec +/ + diff --git a/tpt/ash/disk_rereads.sql b/tpt/ash/disk_rereads.sql new file mode 100644 index 0000000..7bc5538 --- /dev/null +++ b/tpt/ash/disk_rereads.sql @@ -0,0 +1,37 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- experimental script - it will only capture a tiny portion of disk reread waits +-- due to relatively infrequent sampling of ASH + +SELECT + SUM(rereads) + , t.tablespace_name + , ts.block_size + , o.owner + , o.object_name +FROM + (SELECT current_obj#, p1, p2, TO_CHAR(p1)||':'||TO_CHAR(p2), COUNT(*) rereads + FROM v$active_session_history + WHERE + sample_time < SYSDATE-1/24 + AND event = 'db file sequential read' + GROUP BY + current_obj#, p1, p2 + HAVING + COUNT(*) > 1 + ) a + , dba_data_files t + , dba_tablespaces ts + , dba_objects o +WHERE + a.p1 = t.file_id +AND t.tablespace_name = ts.tablespace_name +AND a.current_obj# = o.object_id (+) +GROUP BY + t.tablespace_name + , ts.block_size + , o.owner + , o.object_name +ORDER BY SUM(rereads) DESC +/ diff --git a/tpt/ash/event_hist.sql b/tpt/ash/event_hist.sql new file mode 100644 index 0000000..f7c278c --- /dev/null +++ b/tpt/ash/event_hist.sql @@ -0,0 +1,53 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft +-- for estimating the event counts (and average durations): +-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678 + +COL evh_event HEAD "Wait Event" for A50 TRUNCATE +COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12 +COL pct_evt_time HEAD "% Event|Time" FOR 990.9 +COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,990.9 +COL evh_millisec HEAD "Wait time|bucket ms+" FOR A15 JUST RIGHT +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" FOR 999,999,990.9 + +BREAK ON evh_event SKIP 1 + +SELECT + e.evh_event + , e.evh_millisec + , e.evh_sample_count + , e.evh_est_event_count + , e.evh_est_total_sec + , ROUND ( 100 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event)), '#'),' '), 10)||'|' evh_graph + , first_seen + , last_seen +FROM ( + SELECT + event evh_event + , LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END, 15) evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END) / 1000,1) evh_est_total_sec + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + FROM + gv$active_session_history + WHERE + regexp_like(event, '&1') + AND &2 + AND sample_time BETWEEN &3 AND &4 + AND session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity + AND time_waited > 0 + GROUP BY + event + , CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END -- evh_millisec +) e +ORDER BY + evh_event + , evh_millisec +/ + diff --git a/tpt/ash/event_hist_cell.sql b/tpt/ash/event_hist_cell.sql new file mode 100644 index 0000000..70f4287 --- /dev/null +++ b/tpt/ash/event_hist_cell.sql @@ -0,0 +1,55 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft +-- for estimating the event counts (and average durations): +-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678 + +COL evh_event HEAD WAIT_EVENT for A50 TRUNCATE +COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12 +COL pct_evt_time HEAD "% Event|Time" +COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,999.9 +COL evh_millisec HEAD "Wait time|bucket ms+" FOR A15 JUST RIGHT +COL evh_event HEAD "Wait Event" +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" +COL evh_cell_path HEAD "Cell Path" FOR A16 + +BREAK ON evh_event SKIP 1 ON evh_cell_path SKIP 1 NODUPLICATES + +PROMPT Showing only CELL wait events as they have the wait_event.p1 = v$cell.cell_hashval link... + +SELECT + e.* + , ROUND ( 100 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event)), '#'),' '), 10)||'|' evh_graph +FROM ( + SELECT + event evh_event + , c.cell_path evh_cell_path + , LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END, 15) evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END) / 1000,1) evh_est_total_sec + FROM + V$ACTIVE_SESSION_HISTORY a + , v$cell c + --dba_hist_active_sess_history + WHERE + c.cell_hashval = a.p1 + AND regexp_like(a.event, '&1') + AND &2 + AND a.sample_time BETWEEN &3 AND &4 + AND a.session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity + AND a.time_waited > 0 + GROUP BY + event + , c.cell_path + , CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END -- evh_millisec +) e +ORDER BY + evh_event + , evh_cell_path + , evh_millisec +/ + diff --git a/tpt/ash/event_hist_micro.sql b/tpt/ash/event_hist_micro.sql new file mode 100644 index 0000000..2475235 --- /dev/null +++ b/tpt/ash/event_hist_micro.sql @@ -0,0 +1,54 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft +-- for estimating the event counts (and average durations): +-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678 + +COL evh_event HEAD "Wait Event" for A50 TRUNCATE +COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12 +COL pct_evt_time HEAD "% Event|Time" FOR 990.9 +COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,990.9 +COL evh_millisec HEAD "Wait time|bucket us+" FOR A15 JUST RIGHT +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" FOR 999,999,990.9 + + +BREAK ON evh_event SKIP 1 + +SELECT + e.evh_event + , evh_millisec + , evh_sample_count + , evh_est_event_count + , evh_est_total_sec + , ROUND ( 100 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(evh_est_total_sec) OVER (PARTITION BY evh_event)), '#'),' '), 10)||'|' evh_graph + , first_seen + , last_seen +FROM ( + SELECT + event evh_event + , LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END, 15) evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END)/1000000,1) evh_est_total_sec + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen + FROM + v$active_session_history + WHERE + regexp_like(event, '&1') + AND &2 + AND sample_time BETWEEN &3 AND &4 + AND session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity + AND time_waited > 0 + GROUP BY + event + , CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited)))) END -- evh_millisec +) e +ORDER BY + evh_event + , evh_millisec +/ + diff --git a/tpt/ash/evet_hist_cell.sql b/tpt/ash/evet_hist_cell.sql new file mode 100644 index 0000000..835c4a3 --- /dev/null +++ b/tpt/ash/evet_hist_cell.sql @@ -0,0 +1,38 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this scripts uses "ASH math" by Graham Wood, Uri Shaft and John Beresniewicz for +-- estimating the event counts (and average durations) + +COL evh_event HEAD WAIT_EVENT for A50 TRUNCATE +COL evh_graph HEAD "Awesome|Graphic" JUST CENTER FOR A12 +COL pct_evt_time HEAD "% Event|Time" +COL evh_est_total_ms HEAD "Estimated|Total ms" +COL evh_millisec HEAD "Wait time|bucket ms+" +COL evh_event HEAD "Wait Event" +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" + +BREAK ON evh_event SKIP 1 + +SELECT + event evh_event + , CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END * COUNT(*),1) evh_est_total_ms + , ROUND ( 100 * RATIO_TO_REPORT( CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END * COUNT(*) ) OVER (PARTITION BY event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT( CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END * COUNT(*) ) OVER (PARTITION BY event)), '#'),' '), 10)||'|' evh_graph +FROM + V$ACTIVE_SESSION_HISTORY + --dba_hist_active_sess_history +WHERE + regexp_like(event, '&1') +AND sample_time > SYSDATE - 1 +AND time_waited > 0 -- TODO +GROUP BY + event + , CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END -- evh_millisec +ORDER BY 1, 2 +/ + diff --git a/tpt/ash/examples/ash10.sql b/tpt/ash/examples/ash10.sql new file mode 100644 index 0000000..f790d5c --- /dev/null +++ b/tpt/ash/examples/ash10.sql @@ -0,0 +1,43 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +COL sql_plan_step FOR A50 WORD_WRAP + +SELECT * FROM ( + SELECT + a.session_state + , a.event + , a.sql_id + , a.blocking_session_status + , a.blocking_session + , a.blocking_session_serial# + , a.current_obj# + , a.sql_plan_line_id + , a.sql_plan_operation ||' '||a.sql_plan_options sql_plan_step + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + DBA_HIST_ACTIVE_SESS_HISTORY a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-20 17:25:00' AND TIMESTAMP'2011-01-20 18:55:00' + AND a.event = 'enq: TX - index contention' + GROUP BY + a.session_state + , a.event + , a.sql_id + , a.blocking_session_status + , a.blocking_session + , a.blocking_session_serial# + , a.current_obj# + , a.sql_plan_line_id + , a.sql_plan_operation ||' '||a.sql_plan_options + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + diff --git a/tpt/ash/examples/ash11.sql b/tpt/ash/examples/ash11.sql new file mode 100644 index 0000000..a8454ce --- /dev/null +++ b/tpt/ash/examples/ash11.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +COL sql_plan_step FOR A50 WORD_WRAP + +SELECT * FROM ( + SELECT + a.session_type + , a.session_state + , a.event + , a.sql_id + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + DBA_HIST_ACTIVE_SESS_HISTORY a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-05-14 06:00:00' AND TIMESTAMP'2011-05-14 06:10:00' + GROUP BY + a.session_type + , a.session_state + , a.event + , a.sql_id + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + diff --git a/tpt/ash/examples/ash12a.sql b/tpt/ash/examples/ash12a.sql new file mode 100644 index 0000000..d843b94 --- /dev/null +++ b/tpt/ash/examples/ash12a.sql @@ -0,0 +1,90 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +SPOOL ash12.txt + +--DEF from_time="2010-10-30 18:12:00" +--DEF to_time="2010-10-30 18:14:00" +DEF cols=session_type,program,sql_opcode + +--PROMPT FROM_TIME=&from_time TO_TIME=&to_time + +SELECT * FROM ( + SELECT + &cols + , CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT' + WHEN IN_PARSE ='Y' THEN 'PARSE' + WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE' + WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION' + WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION' + WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC' + WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION' + WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION' + WHEN IN_BIND ='Y' THEN 'BIND' + WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE' + END stage + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + FROM + gv$active_session_history + -- dba_hist_active_sess_history + WHERE + 1=1 + --AND sample_time BETWEEN TIMESTAMP'from_time' AND TIMESTAMP'to_time' + AND session_state = 'ON CPU' + AND event IS NULL + AND sql_id IS NULL + GROUP BY + &cols + , CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT' + WHEN IN_PARSE ='Y' THEN 'PARSE' + WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE' + WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION' + WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION' + WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC' + WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION' + WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION' + WHEN IN_BIND ='Y' THEN 'BIND' + WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE' + END + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +DEF cols=module +/ + +DEF cols=action +/ + +DEF cols=user_id +/ + +DEF cols=session_type,program,top_level_sql_opcode +/ + +DEF cols=session_type,program,top_level_sql_opcode,top_level_sql_id +/ + +DEF cols=session_type,program,plsql_object_id,plsql_subprogram_id +/ + +DEF cols=wait_class,event +/ + +DEF cols=sql_id,wait_class +/ + +DEF cols=sql_id,event +/ + +DEF cols=program,event +/ + + +SPOOL OFF + diff --git a/tpt/ash/examples/ash13.sql b/tpt/ash/examples/ash13.sql new file mode 100644 index 0000000..ee77f36 --- /dev/null +++ b/tpt/ash/examples/ash13.sql @@ -0,0 +1,73 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +SPOOL ash13.txt + +--DEF from_time="2010-10-30 18:12:00" +--DEF to_time="2010-10-30 18:14:00" +DEF cols=session_type,program,sql_opcode + +--PROMPT FROM_TIME=&from_time TO_TIME=&to_time + +SELECT * FROM ( + SELECT + &cols + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + FROM + gv$active_session_history + -- dba_hist_active_sess_history + WHERE + 1=1 + -- AND sample_time BETWEEN TIMESTAMP'from_time' AND TIMESTAMP'to_time' + -- AND event IS NULL + -- AND sql_id IS NULL + GROUP BY + &cols + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +DEF cols=event +/ + +DEF cols=sql_id +/ + +DEF cols=module +/ + +DEF cols=action +/ + +DEF cols=user_id +/ + +DEF cols=session_type,program,top_level_sql_opcode +/ + +DEF cols=session_type,program,top_level_sql_opcode,top_level_sql_id +/ + +DEF cols=session_type,program,plsql_object_id,plsql_subprogram_id +/ + +DEF cols=wait_class,event +/ + +DEF cols=sql_id,wait_class +/ + +DEF cols=sql_id,event +/ + +DEF cols=program,event +/ + + +SPOOL OFF + diff --git a/tpt/ash/examples/ash13a.sql b/tpt/ash/examples/ash13a.sql new file mode 100644 index 0000000..6c20478 --- /dev/null +++ b/tpt/ash/examples/ash13a.sql @@ -0,0 +1,73 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +SPOOL ash13a.txt + +--DEF from_time="2010-10-30 18:12:00" +--DEF to_time="2010-10-30 18:14:00" +DEF cols=session_type,program,sql_opcode + +--PROMPT FROM_TIME=&from_time TO_TIME=&to_time + +SELECT * FROM ( + SELECT + &cols + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + FROM + gv$active_session_history + -- dba_hist_active_sess_history + WHERE + 1=1 + -- AND sample_time BETWEEN TIMESTAMP'from_time' AND TIMESTAMP'to_time' + -- AND event IS NULL + -- AND sql_id IS NULL + GROUP BY + &cols + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +DEF cols=event +/ + +DEF cols=sql_id +/ + +DEF cols=module +/ + +DEF cols=action +/ + +DEF cols=user_id +/ + +DEF cols=session_type,program,top_level_sql_opcode +/ + +DEF cols=session_type,program,top_level_sql_opcode,top_level_sql_id +/ + +DEF cols=session_type,program,plsql_object_id,plsql_subprogram_id +/ + +DEF cols=wait_class,event +/ + +DEF cols=sql_id,wait_class +/ + +DEF cols=sql_id,event +/ + +DEF cols=program,event +/ + + +SPOOL OFF + diff --git a/tpt/ash/examples/ash2.sql b/tpt/ash/examples/ash2.sql new file mode 100644 index 0000000..d89fc71 --- /dev/null +++ b/tpt/ash/examples/ash2.sql @@ -0,0 +1,78 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +--DEF from_time="2010-10-30 18:12:00" +--DEF to_time="2010-10-30 18:14:00" + +DEF from_time="&1" +DEF to_time="&2" + +DEF cols=session_type,top_level_call_name,program,top_level_sql_opcode,top_level_sql_id,sql_opcode,sql_id + +PROMPT FROM_TIME=&from_time TO_TIME=&to_time + +SELECT * FROM ( + SELECT + count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , &cols + , CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT' + WHEN IN_PARSE ='Y' THEN 'PARSE' + WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE' + WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION' + WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION' + WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC' + WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION' + WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION' + WHEN IN_BIND ='Y' THEN 'BIND' + WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE' + WHEN IN_SEQUENCE_LOAD ='Y' THEN 'SEQUENCE_LOAD' + END stage + FROM + v$active_session_history + WHERE + sample_time BETWEEN TIMESTAMP'&from_time' AND TIMESTAMP'&to_time' + AND session_state = 'ON CPU' + AND event IS NULL + AND sql_id IS NULL + AND session_type = 'FOREGROUND' + GROUP BY + &cols + , CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT' + WHEN IN_PARSE ='Y' THEN 'PARSE' + WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE' + WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION' + WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION' + WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC' + WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION' + WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION' + WHEN IN_BIND ='Y' THEN 'BIND' + WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE' + WHEN IN_SEQUENCE_LOAD ='Y' THEN 'SEQUENCE_LOAD' + END + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +DEF cols=session_type,program,top_level_sql_opcode,sql_id +/ +-- +-- DEF cols=session_type,program,top_level_sql_opcode,sql_id,event +-- / +-- +-- DEF cols=session_type,program,top_level_sql_opcode,sql_id,event,p1 +-- / +-- +-- DEF cols=session_type,program,top_level_sql_opcode,sql_id,event,p1,p2 +-- / +-- +-- DEF cols=session_type,program,top_level_sql_opcode,top_level_sql_id +-- / +-- +-- DEF cols=session_type,program,plsql_object_id,plsql_subprogram_id +-- / +-- diff --git a/tpt/ash/examples/ash3.sql b/tpt/ash/examples/ash3.sql new file mode 100644 index 0000000..44b2914 --- /dev/null +++ b/tpt/ash/examples/ash3.sql @@ -0,0 +1,75 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +DEF from_time="2010-10-30 18:12:00" +DEF to_time="2010-10-30 18:14:00" +DEF cols=session_type,program,sql_opcode + +PROMPT FROM_TIME=&from_time TO_TIME=&to_time + +SELECT * FROM ( + SELECT + &cols + , CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT' + WHEN IN_PARSE ='Y' THEN 'PARSE' + WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE' + WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION' + WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION' + WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC' + WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION' + WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION' + WHEN IN_BIND ='Y' THEN 'BIND' + WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE' + WHEN IN_SEQUENCE_LOAD ='Y' THEN 'SEQUENCE_LOAD' + END stage + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + FROM + -- active_session_history_bak + v$active_session_history + -- dba_hist_active_sess_history + WHERE + 1=1 -- sample_time BETWEEN TIMESTAMP'&from_time' AND TIMESTAMP'&to_time' + AND session_state = 'ON CPU' + AND event IS NULL + AND sql_id IS NULL + GROUP BY + &cols + , CASE WHEN IN_CONNECTION_MGMT='Y' THEN 'CONNECTION_MGMT' + WHEN IN_PARSE ='Y' THEN 'PARSE' + WHEN IN_HARD_PARSE ='Y' THEN 'HARD_PARSE' + WHEN IN_SQL_EXECUTION ='Y' THEN 'SQL_EXECUTION' + WHEN IN_PLSQL_EXECUTION ='Y' THEN 'PLSQL_EXECUTION' + WHEN IN_PLSQL_RPC ='Y' THEN 'PLSQL_RPC' + WHEN IN_PLSQL_COMPILATION ='Y' THEN 'PLSQL_COMPILATION' + WHEN IN_JAVA_EXECUTION ='Y' THEN 'JAVA_EXECUTION' + WHEN IN_BIND ='Y' THEN 'BIND' + WHEN IN_CURSOR_CLOSE ='Y' THEN 'CURSOR_CLOSE' + WHEN IN_SEQUENCE_LOAD ='Y' THEN 'SEQUENCE_LOAD' + END + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +DEF cols=module +/ + +DEF cols=action +/ + +DEF cols=user_id +/ + +DEF cols=session_type,program,top_level_sql_opcode +/ + +DEF cols=session_type,program,top_level_sql_opcode,top_level_sql_id +/ + +DEF cols=session_type,program,plsql_object_id,plsql_subprogram_id +/ + diff --git a/tpt/ash/examples/ash5.sql b/tpt/ash/examples/ash5.sql new file mode 100644 index 0000000..78a0c76 --- /dev/null +++ b/tpt/ash/examples/ash5.sql @@ -0,0 +1,66 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +SELECT * FROM ( + SELECT /*+ LEADING(o) USE_HASH(a) */ + a.sql_id + , o.kglnaobj cursor_name + , a.session_state + , a.event + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + v$active_session_history a + , x$kglob o + WHERE + a.sql_id = o.kglobt13 + AND a.sample_time BETWEEN SYSDATE AND SYSDATE - 1/12 + AND o.kglnaobj = 'table_4_9_73c8_0_0_0' + GROUP BY + a.sql_id + , o.kglnaobj + , a.session_state + , a.event + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +SELECT * FROM ( + SELECT /*+ LEADING(o) USE_HASH(a) */ + a.sql_id + , o.kglnaobj cursor_name + , a.session_state + , a.event + , a.p1 + , a.p2 + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + v$active_session_history a + , x$kglob o + WHERE + a.sql_id = o.kglobt13 + AND a.sample_time BETWEEN SYSDATE AND SYSDATE - 1/12 + AND o.kglnaobj = 'table_4_9_73c8_0_0_0' + GROUP BY + a.sql_id + , a.p1 + , a.p2 + , o.kglnaobj + , a.session_state + , a.event + ORDER BY + percent DESC +) +WHERE ROWNUM <= 300 +/ + + diff --git a/tpt/ash/examples/ash6.sql b/tpt/ash/examples/ash6.sql new file mode 100644 index 0000000..a4a35cc --- /dev/null +++ b/tpt/ash/examples/ash6.sql @@ -0,0 +1,57 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +SELECT * FROM ( + SELECT + a.sql_id + , a.session_state + , a.event + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + dba_hist_active_sess_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-05 15:00:00' AND TIMESTAMP'2011-01-05 15:30:00' + AND a.sql_id = '9dq68unz1naqz' -- table_4_9_73c8_0_0_0 + GROUP BY + a.sql_id + , a.session_state + , a.event + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +SELECT * FROM ( + SELECT + a.sql_id + , a.session_state + , a.event + , a.p1 + , a.p2 + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + dba_hist_active_sess_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-05 15:00:00' AND TIMESTAMP'2011-01-05 15:30:00' + AND a.sql_id = '9dq68unz1naqz' -- table_4_9_73c8_0_0_0 + GROUP BY + a.sql_id + , a.session_state + , a.event + , a.p1 + , a.p2 + ORDER BY + percent DESC +) +WHERE ROWNUM <= 300 +/ + diff --git a/tpt/ash/examples/ash7.sql b/tpt/ash/examples/ash7.sql new file mode 100644 index 0000000..a4a35cc --- /dev/null +++ b/tpt/ash/examples/ash7.sql @@ -0,0 +1,57 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +SELECT * FROM ( + SELECT + a.sql_id + , a.session_state + , a.event + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + dba_hist_active_sess_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-05 15:00:00' AND TIMESTAMP'2011-01-05 15:30:00' + AND a.sql_id = '9dq68unz1naqz' -- table_4_9_73c8_0_0_0 + GROUP BY + a.sql_id + , a.session_state + , a.event + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +SELECT * FROM ( + SELECT + a.sql_id + , a.session_state + , a.event + , a.p1 + , a.p2 + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + dba_hist_active_sess_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-05 15:00:00' AND TIMESTAMP'2011-01-05 15:30:00' + AND a.sql_id = '9dq68unz1naqz' -- table_4_9_73c8_0_0_0 + GROUP BY + a.sql_id + , a.session_state + , a.event + , a.p1 + , a.p2 + ORDER BY + percent DESC +) +WHERE ROWNUM <= 300 +/ + diff --git a/tpt/ash/examples/ash8.sql b/tpt/ash/examples/ash8.sql new file mode 100644 index 0000000..cccad1d --- /dev/null +++ b/tpt/ash/examples/ash8.sql @@ -0,0 +1,80 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +SELECT * FROM ( + SELECT + a.session_state + , a.event + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + dba_hist_active_sess_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00' + GROUP BY + a.session_state + , a.event + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +SELECT * FROM ( + SELECT + a.program + , a.sql_id + , a.session_state + , a.event + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + dba_hist_active_sess_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00' + GROUP BY + a.program + , a.sql_id + , a.session_state + , a.event + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +SELECT * FROM ( + SELECT + a.program + , a.sql_id + , a.session_state + , a.event + , a.p1 + , a.p2 + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + dba_hist_active_sess_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00' + GROUP BY + a.program + , a.sql_id + , a.session_state + , a.event + , a.p1 + , a.p2 + ORDER BY + percent DESC +) +WHERE ROWNUM <= 300 +/ + diff --git a/tpt/ash/examples/ash9.sql b/tpt/ash/examples/ash9.sql new file mode 100644 index 0000000..fa8e7ff --- /dev/null +++ b/tpt/ash/examples/ash9.sql @@ -0,0 +1,80 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON VERIFY OFF + +SELECT * FROM ( + SELECT + a.session_state + , a.event + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + v$active_session_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00' + GROUP BY + a.session_state + , a.event + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +SELECT * FROM ( + SELECT + a.program + , a.sql_id + , a.session_state + , a.event + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + v$active_session_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00' + GROUP BY + a.program + , a.sql_id + , a.session_state + , a.event + ORDER BY + percent DESC +) +WHERE ROWNUM <= 30 +/ + +SELECT * FROM ( + SELECT + a.program + , a.sql_id + , a.session_state + , a.event + , a.p1 + , a.p2 + , count(*) + , lpad(round(ratio_to_report(count(*)) over () * 100)||'%',10,' ') percent + , MIN(a.sample_time) + , MAX(a.sample_time) + FROM + v$active_session_history a + WHERE + a.sample_time BETWEEN TIMESTAMP'2011-01-10 18:00:00' AND TIMESTAMP'2011-01-10 19:00:00' + GROUP BY + a.program + , a.sql_id + , a.session_state + , a.event + , a.p1 + , a.p2 + ORDER BY + percent DESC +) +WHERE ROWNUM <= 300 +/ + diff --git a/tpt/ash/examples/ashrelated.sql b/tpt/ash/examples/ashrelated.sql new file mode 100644 index 0000000..3a9f7ad --- /dev/null +++ b/tpt/ash/examples/ashrelated.sql @@ -0,0 +1,19 @@ +SELECT + COUNT(*) totalseconds + , ROUND(COUNT(*) / ((CAST(&4 AS DATE) - CAST(&3 AS DATE)) * 86400), 1) AAS + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ')||' |' "%This" + , &1 + , TO_CHAR(MIN(sample_time), 'YYYY-MM-DD HH24:MI:SS') first_seen + , TO_CHAR(MAX(sample_time), 'YYYY-MM-DD HH24:MI:SS') last_seen +-- , MAX(sql_exec_id) - MIN(sql_exec_id) + , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen +FROM v$active_session_history a +WHERE (session_id, session_serial#) IN (SELECT session_id, session_serial# FROM v$active_session_history + WHERE sample_time BETWEEN &3 AND &4 + AND &2 + ) +AND sample_time BETWEEN &3 AND &4 +GROUP BY + &1 +/ + diff --git a/tpt/ash/gashtop.sql b/tpt/ash/gashtop.sql new file mode 100644 index 0000000..01cb03e --- /dev/null +++ b/tpt/ash/gashtop.sql @@ -0,0 +1,66 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- usage: @ashtop sql_id + +COL ash_from_date NEW_VALUE ash_from_date +COL ash_to_date NEW_VALUE ash_to_date + +-- This was too much! +--SELECT +-- regexp_replace('&3','^-([0-9]*)(.)$', ' sysdate - \1 / ', 1, 0, 'i') +-- ||decode(regexp_replace('&3', '^-[0-9]*(.)$', '\1', 1, 0, 'i'), +-- 'd', '1', +-- 'h', '24', +-- 'm','24/60', +-- 's','24/60/60', +-- '' +-- ) ash_from_date, +-- regexp_replace(regexp_replace('&4', '^now$', 'sysdate'),'^-([0-9]*)(.)$', ' sysdate - \1 / ', 1, 0, 'i') +-- ||decode(regexp_replace(regexp_replace('&4', '^now$', 'sysdate'), '^-[0-9]*(.)$', '\1', 1, 0, 'i'), +-- 'd', '1', +-- 'h', '24', +-- 'm','24/60', +-- 's','24/60/60', +-- '' +-- ) ash_to_date +--from +-- dual +--/ + +SELECT * FROM ( + SELECT + LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , &1 + , COUNT(*) "TotalSeconds" + , SUM(CASE WHEN wait_class IS NULL THEN 1 ELSE 0 END) "CPU" + , SUM(CASE WHEN wait_class ='User I/O' THEN 1 ELSE 0 END) "User I/O" + , SUM(CASE WHEN wait_class ='Application' THEN 1 ELSE 0 END) "Application" + , SUM(CASE WHEN wait_class ='Concurrency' THEN 1 ELSE 0 END) "Concurrency" + , SUM(CASE WHEN wait_class ='Commit' THEN 1 ELSE 0 END) "Commit" + , SUM(CASE WHEN wait_class ='Configuration' THEN 1 ELSE 0 END) "Configuration" + , SUM(CASE WHEN wait_class ='Cluster' THEN 1 ELSE 0 END) "Cluster" + , SUM(CASE WHEN wait_class ='Idle' THEN 1 ELSE 0 END) "Idle" + , SUM(CASE WHEN wait_class ='Network' THEN 1 ELSE 0 END) "Network" + , SUM(CASE WHEN wait_class ='System I/O' THEN 1 ELSE 0 END) "System I/O" + , SUM(CASE WHEN wait_class ='Scheduler' THEN 1 ELSE 0 END) "Scheduler" + , SUM(CASE WHEN wait_class ='Administrative' THEN 1 ELSE 0 END) "Administrative" + , SUM(CASE WHEN wait_class ='Queueing' THEN 1 ELSE 0 END) "Queueing" + , SUM(CASE WHEN wait_class ='Other' THEN 1 ELSE 0 END) "Other" + FROM + gv$active_session_history a + , dba_users u + WHERE + a.user_id = u.user_id (+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + &1 + ORDER BY + "TotalSeconds" DESC + , &1 +) +WHERE + ROWNUM <= 20 +/ + diff --git a/tpt/ash/gasqlmon.sql b/tpt/ash/gasqlmon.sql new file mode 100644 index 0000000..2c2e831 --- /dev/null +++ b/tpt/ash/gasqlmon.sql @@ -0,0 +1,77 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL asqlmon_operation FOR a80 +COL asqlmon_predicates FOR a100 word_wrap +COL options FOR a30 + +COL asqlmon_plan_hash_value HEAD PLAN_HASH_VALUE +COL asqlmon_sql_id HEAD SQL_ID +COL asqlmon_sql_child HEAD CHILD# +COL asqlmon_sample_time HEAD SAMPLE_HOUR + +BREAK ON asqlmon_plan_hash_value SKIP 1 ON asqlmon_sql_id SKIP 1 ON asqlmon_sql_child SKIP 1 ON asqlmon_sample_time SKIP 1 DUP + +WITH sample_times AS ( + select * from dual +), +sq AS ( +SELECT /*+ MATERIALIZE */ + -- to_char(ash.sample_time, 'YYYY-MM-DD HH24') sample_time + count(*) samples + , ash.inst_id + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.sql_plan_line_id + , ash.sql_plan_operation + , ash.sql_plan_options +FROM + gv$active_session_history ash +WHERE + 1=1 +AND ash.sql_id LIKE '&1' +AND ash.sql_child_number LIKE '%&2%' +GROUP BY + --to_char(ash.sample_time, 'YYYY-MM-DD HH24') + ash.inst_id + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.sql_plan_line_id + , ash.sql_plan_operation + , ash.sql_plan_options +), +plan AS ( + SELECT /*+ MATERIALIZE */ * FROM gv$sql_plan + WHERE sql_id IN (SELECT DISTINCT sql_id FROM sq) +) +SELECT + plan.sql_id asqlmon_sql_id +-- , plan.child_number asqlmon_sql_child + , plan.plan_hash_value asqlmon_plan_hash_value + , sq.samples seconds + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 100, 1), 999.9))||' %',8) pct_child + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(sq.samples) OVER (PARTITION BY sq.sql_id, sq.sql_plan_hash_value) * 10), '#'), ' '), 10,' ')||'|' pct_child_vis + --, sq.sample_time asqlmon_sample_time + , plan.id + , LPAD(' ', depth) || plan.operation ||' '|| plan.options || NVL2(plan.object_name, ' ['||plan.object_name ||']', null) asqlmon_operation + , plan.access_predicates ||' ' || plan.filter_predicates asqlmon_predicates +FROM + plan + , sq +WHERE + 1=1 +AND sq.inst_id = plan.inst_id +AND sq.sql_id(+) = plan.sql_id +AND sq.sql_child_number(+) = plan.child_number +AND sq.sql_plan_line_id(+) = plan.id +AND sq.sql_plan_hash_value(+) = plan.plan_hash_value +AND plan.sql_id LIKE '&1' +AND plan.child_number LIKE '%&2%' +ORDER BY + --sq.sample_time + plan.sql_id + , plan.plan_hash_value + , plan.id +/ diff --git a/tpt/ash/gen_ash_report_html.sql b/tpt/ash/gen_ash_report_html.sql new file mode 100644 index 0000000..a03c965 --- /dev/null +++ b/tpt/ash/gen_ash_report_html.sql @@ -0,0 +1,41 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +VAR dbid NUMBER +VAR inst_id NUMBER + +COL bdate NEW_VALUE def_bdate +COL edate NEW_VALUE def_edate + +SET TERMOUT OFF + +SELECT + TO_CHAR(SYSDATE-1/24, 'YYYY-MM-DD HH24:MI') bdate + , TO_CHAR(SYSDATE , 'YYYY-MM-DD HH24:MI') edate +FROM + dual +/ + +SET TERMOUT ON + +ACCEPT bdate DATE FORMAT 'YYYY-MM-DD HH24:MI' DEFAULT '&def_bdate' PROMPT "Enter begin time [&def_bdate]: " +ACCEPT edate DATE FORMAT 'YYYY-MM-DD HH24:MI' DEFAULT '&def_edate' PROMPT "Enter end time [&def_edate]: " + +BEGIN +SELECT inst_id, dbid INTO :inst_id, :dbid FROM gv$database WHERE inst_id = SYS_CONTEXT('USERENV', 'INSTANCE'); +END; +/ + + +PROMPT Spooling into ash_report.html +SPOOL ash_report.html +SET TERMOUT OFF PAGESIZE 0 HEADING OFF LINESIZE 1000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_HTML(:dbid, :inst_id, TO_DATE('&bdate', 'YYYY-MM-DD HH24:MI'), TO_DATE('&edate', 'YYYY-MM-DD HH24:MI'), null, null, null, null )); + +SPOOL OFF +SET TERMOUT ON PAGESIZE 5000 HEADING ON +PROMPT Done. + +HOST &_start ash_report.html + diff --git a/tpt/ash/gen_ash_report_text.sql b/tpt/ash/gen_ash_report_text.sql new file mode 100644 index 0000000..30fa250 --- /dev/null +++ b/tpt/ash/gen_ash_report_text.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +VAR dbid NUMBER +VAR inst_id NUMBER + +COL bdate NEW_VALUE def_bdate +COL edate NEW_VALUE def_edate + +SET TERMOUT OFF + +SELECT + TO_CHAR(SYSDATE-1/24, 'YYYY-MM-DD HH24:MI') bdate + , TO_CHAR(SYSDATE , 'YYYY-MM-DD HH24:MI') edate +FROM + dual +/ + +SET TERMOUT ON + +ACCEPT bdate DATE FORMAT 'YYYY-MM-DD HH24:MI' DEFAULT '&def_bdate' PROMPT "Enter begin time [&def_bdate]: " +ACCEPT edate DATE FORMAT 'YYYY-MM-DD HH24:MI' DEFAULT '&def_edate' PROMPT "Enter end time [&def_edate]: " + +BEGIN +SELECT inst_id, dbid INTO :inst_id, :dbid FROM gv$database; +END; +/ + + +PROMPT Spooling into ash_report.txt +SPOOL ash_report.txt +SET TERMOUT OFF PAGESIZE 0 HEADING OFF LINESIZE 1000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT(:dbid, :inst_id, TO_DATE('&bdate', 'YYYY-MM-DD HH24:MI'), TO_DATE('&edate', 'YYYY-MM-DD HH24:MI'), null, null, null, null )); + +SPOOL OFF +SET TERMOUT ON PAGESIZE 5000 HEADING ON +PROMPT Done. + +HOST &_start ash_report.txt diff --git a/tpt/ash/old.event_hist_cell.sql b/tpt/ash/old.event_hist_cell.sql new file mode 100644 index 0000000..7d09092 --- /dev/null +++ b/tpt/ash/old.event_hist_cell.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft +-- for estimating the event counts (and average durations): +-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678 + +COL evh_event HEAD WAIT_EVENT for A50 TRUNCATE +COL evh_graph HEAD "Event|Breakdown" JUST CENTER FOR A12 +COL evh_cell_graph HEAD "Cell Event|Breakdown" JUST CENTER FOR A12 +COL pct_cell_time HEAD "% Cell|Time" +COL pct_evt_time HEAD "% Event|Time" +COL evh_est_total_ms HEAD "Estimated|Total ms" +COL evh_millisec HEAD "Wait time|bucket ms+" FOR 999999 +COL evh_event HEAD "Wait Event" +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" +COL evh_cell_path HEAD "Cell Path" FOR A16 + +BREAK ON evh_event SKIP 1 ON evh_cell_path SKIP 1 NODUPLICATES + +SELECT + event evh_event + , cell_path evh_cell_path + , CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END * COUNT(*),1) evh_est_total_ms + , ROUND ( 100 * RATIO_TO_REPORT( CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END * COUNT(*) ) OVER (PARTITION BY event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT( CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END * COUNT(*) ) OVER (PARTITION BY event)), '#'),' '), 10)||'|' evh_graph + , ROUND ( 100 * RATIO_TO_REPORT( CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END * COUNT(*) ) OVER (PARTITION BY event, cell_path) , 1 ) pct_cell_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT( CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END * COUNT(*) ) OVER (PARTITION BY event, cell_path)), '#'),' '), 10)||'|' evh_cell_graph +FROM + v$cell + , V$ACTIVE_SESSION_HISTORY + --dba_hist_active_sess_history +WHERE + regexp_like(event, '&1') +AND v$cell.cell_hashval = v$active_session_history.p1 +AND sample_time > SYSDATE - 1 +AND time_waited > 0 -- TODO +GROUP BY + event + , cell_path + , CASE WHEN time_waited = 0 THEN 0 ELSE TRUNC(POWER(2,TRUNC(LOG(2,time_waited/1000)))) END -- evh_millisec +ORDER BY 1, 2 +/ + diff --git a/tpt/ash/old_devent_hist.sql b/tpt/ash/old_devent_hist.sql new file mode 100644 index 0000000..1b6e991 --- /dev/null +++ b/tpt/ash/old_devent_hist.sql @@ -0,0 +1,41 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this script uses "ASH math" by John Beresniewicz, Graham Wood and Uri Shaft +-- for estimating the event counts (and average durations): +-- https://www.slideshare.net/jberesni/ash-architecture-and-advanced-usage-rmoug2014-36611678 + +COL evh_event HEAD WAIT_EVENT for A50 TRUNCATE +COL evh_graph HEAD "Estimated|Time Graph" JUST CENTER FOR A12 +COL pct_evt_time HEAD "% Event|Time" +COL evh_est_total_sec HEAD "Estimated|Total Sec" FOR 9,999,999.9 +COL evh_millisec HEAD "Wait time|bucket ms+" FOR A15 JUST RIGHT +COL evh_event HEAD "Wait Event" +COL evh_sample_count HEAD "Num ASH|Samples" +COL evh_est_event_count HEAD "Estimated|Total Waits" + +BREAK ON evh_event SKIP 1 + +SELECT + event evh_event + , LPAD('< ' || CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END, 15) evh_millisec + , COUNT(*) evh_sample_count + , ROUND(SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END),1) evh_est_event_count + , ROUND(CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END * SUM(CASE WHEN time_waited >= 1000000 THEN 1 WHEN time_waited = 0 THEN 0 ELSE 1000000 / time_waited END) / 1000,1) evh_est_total_sec + , ROUND ( 100 * RATIO_TO_REPORT( CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END * COUNT(*) ) OVER (PARTITION BY event) , 1 ) pct_evt_time + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT( CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END * COUNT(*) ) OVER (PARTITION BY event)), '#'),' '), 10)||'|' evh_graph +FROM + dba_hist_active_sess_history +WHERE + regexp_like(event, '&1') +AND sample_time BETWEEN &2 AND &3 +AND session_state = 'WAITING' -- not really needed as "event" for ON CPU will be NULL in ASH, but added just for clarity +AND time_waited > 0 +GROUP BY + event + , CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END -- evh_millisec +ORDER BY + event + , CASE WHEN time_waited = 0 THEN 0 ELSE CEIL(POWER(2,CEIL(LOG(2,time_waited/1000)))) END +/ + diff --git a/tpt/ash/perfsheet_ash.sql b/tpt/ash/perfsheet_ash.sql new file mode 100644 index 0000000..6014095 --- /dev/null +++ b/tpt/ash/perfsheet_ash.sql @@ -0,0 +1,74 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + SAMPLE_ID + , CAST(SAMPLE_TIME AS DATE) sample_time + , SESSION_ID + , SESSION_SERIAL# + , SESSION_TYPE + , USER_ID + , SQL_ID + , SQL_CHILD_NUMBER + , SQL_OPCODE + , FORCE_MATCHING_SIGNATURE + , TOP_LEVEL_SQL_ID + , TOP_LEVEL_SQL_OPCODE + , SQL_PLAN_HASH_VALUE + , SQL_PLAN_LINE_ID + , SQL_PLAN_OPERATION + , SQL_PLAN_OPTIONS + , SQL_EXEC_ID + , SQL_EXEC_START + , PLSQL_ENTRY_OBJECT_ID + , PLSQL_ENTRY_SUBPROGRAM_ID + , PLSQL_OBJECT_ID + , PLSQL_SUBPROGRAM_ID + , QC_INSTANCE_ID + , QC_SESSION_ID + , QC_SESSION_SERIAL# + , EVENT + , EVENT_ID + , EVENT# + , SEQ# + , P1TEXT + , P1 + , P2TEXT + , P2 + , P3TEXT + , P3 + , WAIT_CLASS + , WAIT_CLASS_ID + , WAIT_TIME + , SESSION_STATE + , BLOCKING_SESSION_STATUS + , BLOCKING_SESSION + , BLOCKING_SESSION_SERIAL# + , CURRENT_OBJ# + , CURRENT_FILE# + , CURRENT_BLOCK# + , CURRENT_ROW# + , CONSUMER_GROUP_ID + , XID + , REMOTE_INSTANCE# + , IN_CONNECTION_MGMT + , IN_PARSE + , IN_HARD_PARSE + , IN_SQL_EXECUTION + , IN_PLSQL_EXECUTION + , IN_PLSQL_RPC + , IN_PLSQL_COMPILATION + , IN_JAVA_EXECUTION + , IN_BIND + , IN_CURSOR_CLOSE + , SERVICE_HASH + , PROGRAM + , MODULE + , ACTION + , CLIENT_ID +FROM + v$active_session_history +WHERE + sample_time BETWEEN %FROM_DATE% AND %TO_DATE% +AND %FILTER% + diff --git a/tpt/ash/rowsource_events.sql b/tpt/ash/rowsource_events.sql new file mode 100644 index 0000000..2ec26d0 --- /dev/null +++ b/tpt/ash/rowsource_events.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: rowsource_events.sql +-- Purpose: Display top ASH time (count of ASH samples) grouped by +-- exeution plan rowsource type and session serial/parallel +-- status. +-- +-- This allows to find out if your parallel slaves are doing +-- buffered full table scan IOs. +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: +-- @rowsource_events.sql +-- +-- Other: +-- Requires Oracle 11g+ +-- +-------------------------------------------------------------------------------- +SELECT * FROM ( +SELECT + COUNT(*) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + , sql_plan_operation||' '||sql_plan_options plan_line + , CASE WHEN qc_session_id IS NULL THEN 'SERIAL' ELSE 'PARALLEL' END is_parallel + , session_state + , wait_class + , event +FROM + gv$active_session_history +WHERE + sql_plan_operation LIKE '&1' +AND sql_plan_options LIKE '&2' +AND sample_time > SYSDATE - 1/24 +GROUP BY + sql_plan_operation||' '||sql_plan_options + , CASE WHEN qc_session_id IS NULL THEN 'SERIAL' ELSE 'PARALLEL' END + , session_state + , wait_class + , event +ORDER BY COUNT(*) DESC +) +WHERE rownum <= 20 +/ diff --git a/tpt/ash/sample_drift.sql b/tpt/ash/sample_drift.sql new file mode 100644 index 0000000..ae9d015 --- /dev/null +++ b/tpt/ash/sample_drift.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- check if there's sample time drift in ASH (should be every 1 seconds) +-- it makes sense to run this only on active systems where every sample there +-- are some active sessions seen + +select * from ( + select + to_char(sample_time,'YYYYMMDD HH24:MI:SS') + , sample_time-lag(sample_time) over(order by sample_time) delta + from + (select distinct sample_time from v$active_session_history) +) +where + delta < numtodsinterval(2, 'second') -- eliminate ASH sample gaps without captured DB activity +/ + + diff --git a/tpt/ash/shortmon.sql b/tpt/ash/shortmon.sql new file mode 100644 index 0000000..ca876bf --- /dev/null +++ b/tpt/ash/shortmon.sql @@ -0,0 +1,47 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL wait_class FOR a15 +COL event FOR a35 +COL time_range HEAD "WAIT_TIM_BUCKET_US+" FOR A26 JUST RIGHT +COL avg_wait_us HEAD "AVG_WAIT_IN_BKT_US" FOR 9,999,999,999 +COL pct_event FOR a9 +COL pct_event_vis FOR a13 +COL pct_total_vis FOR a13 +COL pct_total FOR a9 + +BREAK ON event SKIP 1 NODUPLICATES ON state ON wait_class + +-- TODO: ignore latest sample (0 waits) + +SELECT /* (hint disabled) LEADING(@"SEL$4" "S"@"SEL$4" "A"@"SEL$4") USE_HASH(@"SEL$4" "A"@"SEL$4") */ + session_state state + , wait_class + , event + , ROUND(AVG(time_waited)) avg_wait_us + , LPAD(REPLACE(TO_CHAR(POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))),'9,999,999,999')||' ..'||TO_CHAR(POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END)))*2, '9,999,999,999'), ' ',''), 26) time_range + , COUNT(*) samples + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 100, 1), 999.9))||' %',8) pct_event + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 10), '#'), ' '), 10,' ')||'|' pct_event_vis + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1), 999.9))||' %',8) pct_total + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 10), '#'), ' '), 10,' ')||'|' pct_total_vis +FROM + v$active_session_history +WHERE + 1=1 +AND sample_time BETWEEN sysdate-1/24 AND sysdate +--AND sample_time BETWEEN TIMESTAMP'2012-04-29 19:30:00' AND TIMESTAMP'2012-04-29 19:30:59' +AND (REGEXP_LIKE(wait_class, '&1') OR REGEXP_LIKE(event, '&1')) +GROUP BY + session_state + , wait_class + , event + , POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))) +ORDER BY + session_state + , wait_class + , event + , time_range NULLS FIRST + , samples DESC +/ + diff --git a/tpt/ash/shortmon_cell.sql b/tpt/ash/shortmon_cell.sql new file mode 100644 index 0000000..c73f047 --- /dev/null +++ b/tpt/ash/shortmon_cell.sql @@ -0,0 +1,52 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- shortmon_cell.sql : script by Tanel Poder (http://blog.tanelpoder.com) + +COL wait_class FOR a15 +COL event FOR a35 +COL time_range HEAD "WAIT_TIM_BUCKET_US+" FOR A26 JUST RIGHT +COL avg_wait_us HEAD "AVG_WAIT_IN_BKT_US" FOR 9,999,999,999 +COL pct_event FOR a9 +COL pct_total FOR a9 +COL cell_path FOR a16 +BREAK ON state ON wait_class ON event SKIP 1 NODUPLICATES ON CELL_PATH SKIP 1 + +-- TODO: ignore latest sample (0 waits) + +SELECT /* (hint disabled) LEADING(@"SEL$4" "S"@"SEL$4" "A"@"SEL$4") USE_HASH(@"SEL$4" "A"@"SEL$4") */ + session_state state + , wait_class + , event + , cell_path + , ROUND(AVG(time_waited)) avg_wait_us + , LPAD(REPLACE(TO_CHAR(POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))),'9,999,999,999')||' ..'||TO_CHAR(POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END)))*2, '9,999,999,999'), ' ',''), 26) time_range + , COUNT(*) samples + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 100, 1), 999.9))||' %',8) pct_event + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 10), '#'), ' '), 10,' ')||'|' pct_event_vis + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1), 999.9))||' %',8) pct_total + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 10), '#'), ' '), 10,' ')||'|' pct_total_vis +FROM + v$active_session_history + , v$cell +WHERE + 1=1 +AND v$cell.cell_hashval = v$active_session_history.p1 +AND sample_time BETWEEN &1 AND &2 -- sysdate-1/24 AND sysdate +--AND sample_time BETWEEN TIMESTAMP'2012-04-29 19:30:00' AND TIMESTAMP'2012-04-29 19:30:59' +AND (REGEXP_LIKE(wait_class, 'User I/O')) --OR REGEXP_LIKE(event, '&1')) +GROUP BY + session_state + , wait_class + , event + , cell_path + , POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))) +ORDER BY + session_state + , wait_class + , event + , cell_path + , time_range NULLS FIRST + , samples DESC +/ + diff --git a/tpt/ash/shortmon_logfilesync.sql b/tpt/ash/shortmon_logfilesync.sql new file mode 100644 index 0000000..fb99e22 --- /dev/null +++ b/tpt/ash/shortmon_logfilesync.sql @@ -0,0 +1,45 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL wait_class FOR a15 +COL event FOR a55 +COL time_range HEAD "WAIT_TIM_BUCKET_US+" FOR 999,999,999,999 +COL avg_wait_us HEAD "AVG_WAIT_IN_BKT_US" FOR 999,999,999,999 +COL pct_event FOR a9 +COL pct_total FOR a9 + +BREAK ON event SKIP 1 DUPLICATES + +-- TODO: ignore latest sample (0 waits) + +SELECT + session_state state + , wait_class + , event + , ROUND(AVG(time_waited)) avg_wait_us + , POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))) time_range + , COUNT(*) samples + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 100, 1), 999.9))||' %',8) pct_event + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 10), '#'), ' '), 10,' ')||'|' pct_event_vis + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1), 999.9))||' %',8) pct_total + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 10), '#'), ' '), 10,' ')||'|' pct_total_vis +FROM + gv$active_session_history + --DBA_HIST_ACTIVE_SESS_HISTORY +WHERE + 1=1 +AND sample_time BETWEEN TIMESTAMP'2011-10-25 08:24:00' AND TIMESTAMP'2011-10-25 08:30:00' +AND (UPPER(wait_class) LIKE UPPER('%&1%') OR UPPER(event) LIKE UPPER('%&1%')) +GROUP BY + session_state + , wait_class + , event + , POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))) +ORDER BY + session_state + , wait_class + , event + , time_range NULLS FIRST + , samples DESC +/ + diff --git a/tpt/ash/shortmon_numblocks.sql b/tpt/ash/shortmon_numblocks.sql new file mode 100644 index 0000000..583a0fc --- /dev/null +++ b/tpt/ash/shortmon_numblocks.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL wait_class FOR a15 +COL event FOR a35 +COL time_range HEAD "WAIT_TIM_BUCKET_US+" FOR A26 JUST RIGHT +COL avg_wait_us HEAD "AVG_WAIT_IN_BKT_US" FOR 9,999,999,999 +COL pct_event FOR a9 +COL pct_total FOR a9 + +BREAK ON event SKIP 1 DUPLICATES + +-- TODO: ignore latest sample (0 waits) + +SELECT /* (hint disabled) LEADING(@"SEL$4" "S"@"SEL$4" "A"@"SEL$4") USE_HASH(@"SEL$4" "A"@"SEL$4") */ + session_state state + , wait_class + , event + , p3 num_blocks + , ROUND(AVG(time_waited)) avg_wait_us + , LPAD(REPLACE(TO_CHAR(POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))),'9,999,999,999')||' ..'||TO_CHAR(POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END)))*2, '9,999,999,999'), ' ',''), 26) time_range + , COUNT(*) samples + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 100, 1), 999.9))||' %',8) pct_event + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY session_state, wait_class, event) * 10), '#'), ' '), 10,' ')||'|' pct_event_vis + , LPAD(TO_CHAR(TO_NUMBER(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1), 999.9))||' %',8) pct_total + , '|'||RPAD( NVL( LPAD('#', ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 10), '#'), ' '), 10,' ')||'|' pct_total_vis +FROM + v$active_session_history +WHERE + 1=1 +AND sample_time BETWEEN sysdate-1/24 AND sysdate +--AND sample_time BETWEEN TIMESTAMP'2012-04-29 19:30:00' AND TIMESTAMP'2012-04-29 19:30:59' +AND (REGEXP_LIKE(wait_class, '&1') OR REGEXP_LIKE(event, '&1')) +GROUP BY + session_state + , wait_class + , event + , p3 + , POWER(2,TRUNC(LOG(2,CASE WHEN time_waited < 1 THEN NULL ELSE time_waited END))) +ORDER BY + session_state + , wait_class + , event + , p3 + , time_range NULLS FIRST + , samples DESC +/ + diff --git a/tpt/ash/sqlexec_duration_buckets.sql b/tpt/ash/sqlexec_duration_buckets.sql new file mode 100644 index 0000000..518fd63 --- /dev/null +++ b/tpt/ash/sqlexec_duration_buckets.sql @@ -0,0 +1,76 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +COL approx_elapsed_time FOR A30 + +BREAK ON ash_sql_id SKIP 1 + +WITH ash AS ( + SELECT + sql_id + , session_id + , sample_time + , sample_time - CAST(MIN(sql_exec_start) + OVER(PARTITION BY session_id,session_serial#,sql_exec_start,sql_exec_id) + AS TIMESTAMP) elapsed_time + , sql_exec_start + , sql_exec_id + , COUNT(*) seconds + FROM + gv$active_session_history + WHERE + sql_id LIKE '&1' + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + sql_id + , session_id + , session_serial# + , sample_time + , sql_exec_start + , sql_exec_id +), +longrunning AS ( +SELECT * FROM ash +WHERE + elapsed_time > INTERVAL '1' SECOND +), +individualexecutions AS ( +SELECT + sql_id + , sql_exec_start + -- an earlier analytic function already does the "partition by session_id,session_serial#" + , MAX(elapsed_time) approx_elapsed_time + , TRUNC((EXTRACT(DAY FROM MAX(elapsed_time)) * 24 * 60 * 60) + + (EXTRACT(HOUR FROM MAX(elapsed_time)) * 60 * 60) + + (EXTRACT(MINUTE FROM MAX(elapsed_time)) * 60) + + (EXTRACT(SECOND FROM MAX(elapsed_time))) + ) as approx_elapsed_sec + , SUM(seconds) sqlexec_db_time + , COUNT(DISTINCT session_id) sessions +FROM longrunning +GROUP BY + sql_id + , sql_exec_start +ORDER BY + sql_id + , sql_exec_start + , COUNT(*) DESC +) +SELECT + sql_id as ash_sql_id + , approx_elapsed_sec + , SUM(sqlexec_db_time) total_db_time + , MIN(sql_exec_start) first_seen_start + , MAX(sql_exec_start) last_seen_start +FROM + individualexecutions +GROUP BY + sql_id + , approx_elapsed_sec +ORDER BY + sql_id + , approx_elapsed_sec +/ + diff --git a/tpt/ash/sqlexec_longer_than.sql b/tpt/ash/sqlexec_longer_than.sql new file mode 100644 index 0000000..5bd1c7e --- /dev/null +++ b/tpt/ash/sqlexec_longer_than.sql @@ -0,0 +1,48 @@ +WITH ash AS ( + SELECT + sql_id + , sample_time + , sample_time - CAST(MIN(sql_exec_start) OVER(PARTITION BY session_id,session_serial#,sql_exec_start,sql_exec_id) AS TIMESTAMP) elapsed_time + , sql_exec_start + , sql_exec_id + , session_state + , event + FROM + v$active_session_history + WHERE + sql_id = '&1' + --AND sample_time BETWEEN TIMESTAMP'2020-02-26 14:45:17' AND TIMESTAMP'2020-02-26 15:15:17' + GROUP BY + sql_id + , session_id + , session_serial# + , sample_time + , sql_exec_start + , sql_exec_id + , session_state + , event +), +longrunning AS ( +SELECT * FROM ash +WHERE + elapsed_time > INTERVAL '1' SECOND +) +SELECT + sql_id + , sql_exec_start + , MAX(elapsed_time) -- an earlier analytic function already does the "partition by session_id,session_serial#" + , session_state + , event + , COUNT(*) seconds +FROM longrunning +GROUP BY + sql_id + , sql_exec_start + , session_state + , event +ORDER BY + sql_id + , sql_exec_start + , COUNT(*) DESC +/ + diff --git a/tpt/ash/sqlid_activity.sql b/tpt/ash/sqlid_activity.sql new file mode 100644 index 0000000..7977faa --- /dev/null +++ b/tpt/ash/sqlid_activity.sql @@ -0,0 +1,100 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET PAGESIZE 5000 LINESIZE 1000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +DEF sqlset_name="GPN_MON18" + +VAR dbid NUMBER +VAR inst_id NUMBER + +COL bdate NEW_VALUE def_bdate +COL edate NEW_VALUE def_edate + +SET TERMOUT OFF + +SELECT + TO_CHAR(SYSDATE-1/24, 'YYYY-MM-DD HH24:MI') bdate + , TO_CHAR(SYSDATE , 'YYYY-MM-DD HH24:MI') edate +FROM + dual +/ + +SET TERMOUT ON + +ACCEPT sqlid CHAR FORMAT A13 DEFAULT '%' PROMPT "Enter SQL ID [ % ]: " +SPOOL sql_activity_&sqlid..txt + +ACCEPT bdate DATE FORMAT 'YYYY-MM-DD HH24:MI' DEFAULT '&def_bdate' PROMPT "Enter begin time [&def_bdate]: " +ACCEPT edate DATE FORMAT 'YYYY-MM-DD HH24:MI' DEFAULT '&def_edate' PROMPT "Enter end time [&def_edate]: " + +PROMPT Spooling into sql_activity_&sqlid..txt + +BEGIN +SELECT inst_id, dbid INTO :inst_id, :dbid FROM gv$database; +END; +/ + + +SELECT + TO_CHAR(sample_time, 'YYYY-MM-DD HH24')||':00' sample_hour + , sql_id + , sql_plan_hash_value + , COUNT(*) * 10 seconds + , ROUND(COUNT(*) * 10 / 3600, 2) AAS + , COUNT(DISTINCT sql_exec_start||sql_exec_id) sampled_execs +FROM + dba_hist_active_sess_history +WHERE + dbid = :dbid +-- AND instance_number = :inst_id +AND sample_time BETWEEN TO_DATE('&bdate', 'YYYY-MM-DD HH24:MI:SS') AND TO_DATE('&edate', 'YYYY-MM-DD HH24:MI:SS') +AND sql_id LIKE '&sqlid' +GROUP BY + TO_CHAR(sample_time, 'YYYY-MM-DD HH24')||':00' + , sql_id + , sql_plan_hash_value +ORDER BY + sample_hour + , sql_id +/ + +SET PAGESIZE 0 HEADING OFF + +PROMPT +PROMPT ======================================================================================================= +PROMPT =========================================== DISPLAY_SQLSET ============================================ +PROMPT ======================================================================================================= +PROMPT + +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_SQLSET('&sqlset_name', '&sqlid', null, 'TYPICAL +ALIAS +MEMSTATS +NOTE')); + +PROMPT +PROMPT ======================================================================================================= +PROMPT ============================================= DISPLAY_AWR ============================================= +PROMPT ======================================================================================================= +PROMPT + +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('&sqlid', null, null, 'ALL')) +/ + +PROMPT +PROMPT ======================================================================================================= +PROMPT =============================== ASH Report for SQL ID &sqlid =================================== +PROMPT ======================================================================================================= +PROMPT + +SET VERIFY ON +-- Oracle 10.2 requires the :inst_id to be present (and not NULL) +SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT(:dbid, :inst_id, TO_DATE('&bdate', 'YYYY-MM-DD HH24:MI'), TO_DATE('&edate', 'YYYY-MM-DD HH24:MI'), null, null, null, DECODE('&sqlid', '%', NULL, '&sqlid'))) +WHERE exists (SELECT version FROM v$instance WHERE version LIKE '10%') +UNION ALL +SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT(:dbid, NULL, TO_DATE('&bdate', 'YYYY-MM-DD HH24:MI'), TO_DATE('&edate', 'YYYY-MM-DD HH24:MI'), null, null, null, DECODE('&sqlid', '%', NULL, '&sqlid'))) +WHERE exists (SELECT version FROM v$instance WHERE version LIKE '11%') +/ + +SET VERIFY OFF +SPOOL OFF +SET TERMOUT ON PAGESIZE 5000 HEADING ON +PROMPT Done. Output file: sql_activity_&sqlid..txt + diff --git a/tpt/ash/sqlid_dbtime_buckets.sql b/tpt/ash/sqlid_dbtime_buckets.sql new file mode 100644 index 0000000..d74f681 --- /dev/null +++ b/tpt/ash/sqlid_dbtime_buckets.sql @@ -0,0 +1,65 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +COL approx_elapsed_time FOR A30 + + +WITH ash AS ( + SELECT + sql_id + , session_id + , sample_time + , sample_time - CAST(MIN(sql_exec_start) + OVER(PARTITION BY session_id,session_serial#,sql_exec_start,sql_exec_id) + AS TIMESTAMP) elapsed_time + , sql_exec_start + , sql_exec_id + , session_state + , event + , machine + , module + FROM + v$active_session_history + WHERE + sql_id = '&1' + AND &2 + AND sample_time BETWEEN &3 AND &4 + GROUP BY + sql_id + , session_id + , session_serial# + , sample_time + , sql_exec_start + , sql_exec_id + , session_state + , event + , machine + , module +), +longrunning AS ( +SELECT * FROM ash +WHERE + elapsed_time > INTERVAL '1' SECOND +) +SELECT + sql_id + , sql_exec_start + -- an earlier analytic function already does the "partition by session_id,session_serial#" + , MAX(elapsed_time) approx_elapsed_time + , session_state + , event + , COUNT(*) seconds + , COUNT(DISTINCT session_id) sessions +FROM longrunning +GROUP BY + sql_id + , sql_exec_start + , session_state + , event +ORDER BY + sql_id + , sql_exec_start + , COUNT(*) DESC +/ + diff --git a/tpt/ash/sqlid_plan_activity.sql b/tpt/ash/sqlid_plan_activity.sql new file mode 100644 index 0000000..69defb4 --- /dev/null +++ b/tpt/ash/sqlid_plan_activity.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + TRUNC(sample_time,'MI') minute + , sql_plan_hash_value + , COUNT(*)/60 avg_act_ses +FROM + v$active_session_history + -- dba_hist_active_sess_history +WHERE + sql_id = '&1' +GROUP BY + TRUNC(sample_time,'MI') + , sql_plan_hash_value +ORDER BY + minute, sql_plan_hash_value +/ diff --git a/tpt/ash/time_model.sql b/tpt/ash/time_model.sql new file mode 100644 index 0000000..b528442 --- /dev/null +++ b/tpt/ash/time_model.sql @@ -0,0 +1,64 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL TOP_LEVEL_CALL_NAME FOR A25 +COL SQL_OPNAME FOR A25 + +SELECT * FROM ( + SELECT /*+ LEADING(a) USE_HASH(u) */ + count(*) seconds + , LPAD(ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100)||'%',5,' ') "%This" + , &1 + , CASE WHEN IN_CONNECTION_MGMT = 'Y' THEN 'CONNECTION_MGMT ' END || + CASE WHEN IN_PARSE = 'Y' THEN 'PARSE ' END || + CASE WHEN IN_HARD_PARSE = 'Y' THEN 'HARD_PARSE ' END || + CASE WHEN IN_SQL_EXECUTION = 'Y' THEN 'SQL_EXECUTION ' END || + CASE WHEN IN_PLSQL_EXECUTION = 'Y' THEN 'PLSQL_EXECUTION ' END || + CASE WHEN IN_PLSQL_RPC = 'Y' THEN 'PLSQL_RPC ' END || + CASE WHEN IN_PLSQL_COMPILATION = 'Y' THEN 'PLSQL_COMPILATION ' END || + CASE WHEN IN_JAVA_EXECUTION = 'Y' THEN 'JAVA_EXECUTION ' END || + CASE WHEN IN_BIND = 'Y' THEN 'BIND ' END || + CASE WHEN IN_CURSOR_CLOSE = 'Y' THEN 'CURSOR_CLOSE ' END || + CASE WHEN IN_SEQUENCE_LOAD = 'Y' THEN 'SEQUENCE_LOAD ' END || +-- CASE WHEN IN_INMEMORY_QUERY = 'Y' THEN 'IN_INMEMORY_QUERY' END || +-- CASE WHEN IN_INMEMORY_POPULATE = 'Y' THEN 'IN_INMEMORY_POPULATE' END || +-- CASE WHEN IN_INMEMORY_PREPOPULATE = 'Y' THEN 'IN_INMEMORY_PREPOPULATE' END || +-- CASE WHEN IN_INMEMORY_REPOPULATE = 'Y' THEN 'IN_INMEMORY_REPOPULATE' END || +-- CASE WHEN IN_INMEMORY_TREPOPULATE = 'Y' THEN 'IN_INMEMORY_TREPOPULATE' END || +-- CASE WHEN IN_TABLESPACE_ENCRYPTION= 'Y' THEN 'IN_TABLESPACE_ENCRYPTION' END || + '' phase + FROM + v$active_session_history a + , dba_users u + WHERE + a.user_id = u.user_id(+) + AND &2 + AND sample_time BETWEEN &3 AND &4 + --AND session_type = 'FOREGROUND' + GROUP BY + &1 + , CASE WHEN IN_CONNECTION_MGMT = 'Y' THEN 'CONNECTION_MGMT ' END || + CASE WHEN IN_PARSE = 'Y' THEN 'PARSE ' END || + CASE WHEN IN_HARD_PARSE = 'Y' THEN 'HARD_PARSE ' END || + CASE WHEN IN_SQL_EXECUTION = 'Y' THEN 'SQL_EXECUTION ' END || + CASE WHEN IN_PLSQL_EXECUTION = 'Y' THEN 'PLSQL_EXECUTION ' END || + CASE WHEN IN_PLSQL_RPC = 'Y' THEN 'PLSQL_RPC ' END || + CASE WHEN IN_PLSQL_COMPILATION = 'Y' THEN 'PLSQL_COMPILATION ' END || + CASE WHEN IN_JAVA_EXECUTION = 'Y' THEN 'JAVA_EXECUTION ' END || + CASE WHEN IN_BIND = 'Y' THEN 'BIND ' END || + CASE WHEN IN_CURSOR_CLOSE = 'Y' THEN 'CURSOR_CLOSE ' END || + CASE WHEN IN_SEQUENCE_LOAD = 'Y' THEN 'SEQUENCE_LOAD ' END || +-- CASE WHEN IN_INMEMORY_QUERY = 'Y' THEN 'IN_INMEMORY_QUERY' END || +-- CASE WHEN IN_INMEMORY_POPULATE = 'Y' THEN 'IN_INMEMORY_POPULATE' END || +-- CASE WHEN IN_INMEMORY_PREPOPULATE = 'Y' THEN 'IN_INMEMORY_PREPOPULATE' END || +-- CASE WHEN IN_INMEMORY_REPOPULATE = 'Y' THEN 'IN_INMEMORY_REPOPULATE' END || +-- CASE WHEN IN_INMEMORY_TREPOPULATE = 'Y' THEN 'IN_INMEMORY_TREPOPULATE' END || +-- CASE WHEN IN_INMEMORY_TREPOPULATE = 'Y' THEN 'IN_INMEMORY_TREPOPULATE' END || +-- CASE WHEN IN_TABLESPACE_ENCRYPTION= 'Y' THEN 'IN_TABLESPACE_ENCRYPTION' END || + '' + ORDER BY + seconds DESC +) +WHERE ROWNUM <= 20 +/ + diff --git a/tpt/ash/time_model_phases.sql b/tpt/ash/time_model_phases.sql new file mode 120000 index 0000000..7db74a9 --- /dev/null +++ b/tpt/ash/time_model_phases.sql @@ -0,0 +1 @@ +time_model.sql \ No newline at end of file diff --git a/tpt/ash/w.sql b/tpt/ash/w.sql new file mode 100644 index 0000000..03541c8 --- /dev/null +++ b/tpt/ash/w.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DEF filter=&1 + +PROMPT What's going on? Showing top timed events of last minute from ASH... +@ashtop event2 &filter sysdate-1/24/60 sysdate + +PROMPT Showing top SQL and wait classes of last minute from ASH... +@ashtop sql_id,session_state,wait_class &filter sysdate-1/24/60 sysdate + diff --git a/tpt/ashtop.sql b/tpt/ashtop.sql new file mode 120000 index 0000000..8dbb563 --- /dev/null +++ b/tpt/ashtop.sql @@ -0,0 +1 @@ +ash/ashtop.sql \ No newline at end of file diff --git a/tpt/asmdf.sql b/tpt/asmdf.sql new file mode 100644 index 0000000..c8c6825 --- /dev/null +++ b/tpt/asmdf.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM v$asm_diskgroup; + diff --git a/tpt/asmdg.sql b/tpt/asmdg.sql new file mode 100644 index 0000000..6188dcf --- /dev/null +++ b/tpt/asmdg.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from v$asm_diskgroup; + diff --git a/tpt/asmdump.sql b/tpt/asmdump.sql new file mode 100644 index 0000000..5bb8335 --- /dev/null +++ b/tpt/asmdump.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- simple asm dump utility +-- use full database file name (with +datagroup name) as only parameter +-- nb! doesnt work properly on multidisk diskgroups with fine grained striping +-- single disk disk groups with fine grained striping or multidisk groups +-- with coarse grained striping are ok +-- +-- tanel poder - nov 2005 [ http://www.tanelpoder.com ] + +set lines 300 trim on verify off pages 50000 + +select + 'dd if='|| d.path||' bs=1048576 skip='||AU_KFFXP||' count=1 '|| + '>> /tmp/'||substr('&1',instr('&1','/',-1)+1)||'.dmp' cmd +from + X$KFFXP X, V$ASM_DISK D, V$ASM_ALIAS A +where + lower(A.NAME) = lower(substr('&1',instr('&1','/',-1)+1)) + and X.NUMBER_KFFXP = A.FILE_NUMBER + and X.GROUP_KFFXP = A.GROUP_NUMBER + and X.INCARN_KFFXP = A.FILE_INCARNATION + and X.DISK_KFFXP = D.DISK_NUMBER + and X.GROUP_KFFXP = D.GROUP_NUMBER +order by + X.XNUM_KFFXP; + diff --git a/tpt/asmdumpf.sql b/tpt/asmdumpf.sql new file mode 100644 index 0000000..c2fa4cb --- /dev/null +++ b/tpt/asmdumpf.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- EXPERIMENTAL! USE AT YOUR OWN RISK! +-- +-- simple asm dump utility +-- use full database file name (with +datagroup name) as only parameter +-- nb! doesnt necessarily work properly on multidisk diskgroups with fine +-- grained striping. created for 2-disk diskgroup. doesnt probably work +-- ok on 2+ disk diskgroups. +-- +-- tanel poder - nov 2005 [ http://www.tanelpoder.com ] + +set lines 300 trim on verify off pages 50000 + +select + 'dd if='|| d.path||' bs=131072 skip='||(AU_KFFXP*8)+(mod(stripefact.r,8)*131072)||' count=1 '|| + '>> /tmp/'||substr('&1',instr('&1','/',-1)+1)||'.dmp' cmd +from + X$KFFXP X, + V$ASM_DISK D, + V$ASM_ALIAS A, + (select rownum-1 r from v$mystat where rownum <= 8) stripefact +where + lower(A.NAME) = lower(substr('&1',instr('&1','/',-1)+1)) + and X.NUMBER_KFFXP = A.FILE_NUMBER + and X.GROUP_KFFXP = A.GROUP_NUMBER + and X.INCARN_KFFXP = A.FILE_INCARNATION + and X.DISK_KFFXP = D.DISK_NUMBER + and X.GROUP_KFFXP = D.GROUP_NUMBER +order by + X.XNUM_KFFXP; + diff --git a/tpt/asmls.sql b/tpt/asmls.sql new file mode 100644 index 0000000..e206556 --- /dev/null +++ b/tpt/asmls.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + group_number + , disk_number + , mount_status + , state + , redundancy + , library + , total_mb + , free_mb + , name + , path + , product + , create_date +FROM + v$asm_disk +WHERE + UPPER(name) LIKE UPPER('%&1%') +ORDER BY + group_number + , disk_number +/ + diff --git a/tpt/asql.sql b/tpt/asql.sql new file mode 100644 index 0000000..c800951 --- /dev/null +++ b/tpt/asql.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Display active sessions current SQLs + +select + sql_id + , sql_hash_value + , sql_child_number + , count(*) +from + v$session +where + status='ACTIVE' +and type !='BACKGROUND' +and sid != (select sid from v$mystat where rownum=1) +group by + sql_id + , sql_hash_value + , sql_child_number +order by + count(*) desc +/ + diff --git a/tpt/ast/01_sql_plan_layout_intro.sql b/tpt/ast/01_sql_plan_layout_intro.sql new file mode 100644 index 0000000..948557c --- /dev/null +++ b/tpt/ast/01_sql_plan_layout_intro.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- view merging + +select * from dual; + +select * from table(dbms_xplan.display_cursor); + +create or replace view v as select * from dual; + +select * from (select * from v); + +alter session set "_simple_view_merging"=false; + +select * from (select * from v); + +alter session set "_simple_view_merging"=true; + +select * from (select /*+ NO_MERGE */ * from v); + +select * from (select rownum r, v.* from v); + + +-- scalar subqueries, run a subquery for populating a value in a single column or a row (9i+) + +select owner, count(*) from test_objects o group by owner; + +-- another way (excludes nulls if any) + +select u.username, (select count(*) from test_objects o where u.username = o.owner) obj_count from test_users u; + +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); + + diff --git a/tpt/ast/02_advanced_rewrite.sql b/tpt/ast/02_advanced_rewrite.sql new file mode 100644 index 0000000..4928c4d --- /dev/null +++ b/tpt/ast/02_advanced_rewrite.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- GRANT EXECUTE ON sys.dbms_advanced_rewrite TO &user +-- there's no public synonym for this package so you should reference it by schema name + +exec sys.DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE ('test_rewrite'); + +begin + sys.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE ( + 'test_rewrite' + , 'select username,created from test_users u where username in (select owner from test_objects o where o.owner = u.username)' + , 'select /*+ qb_name(main) no_unnest(@subq) */ username,created from test_users u where username in (select /*+ qb_name(subq) */ owner from test_objects o where o.owner = u.username) and /* careful! */ 1=1' + , validate => true + , rewrite_mode => 'general' + ); +end; +/ + + +alter session set query_rewrite_enabled = true -- this is true by default; +alter session set query_rewrite_integrity = trusted; + +-- if you see a FILTER operation (not a HASH JOIN SEMI) then the rewrite worked +select username,created from test_users u where username in (select owner from test_objects o where o.owner = u.username); +@x9a + + +-- an example of how to add a missing ORDER BY to a statement which assumes that GROUP BY always orders data too +-- (this is not true in 10.2+ where GROUP BY and DISTINCT operations can be done using hashing instead of sorting) + +exec sys.DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE ('test_rewrite_order'); + +begin + sys.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE ( + 'test_rewrite_order' + , 'select owner,count(*) from test_objects group by owner' + , 'select * from (select owner,count(*) from test_objects group by owner order by owner)' + , validate => true + , rewrite_mode => 'text_match' + ); +end; +/ + +select owner,count(*) from test_objects group by owner; +@x9a + + diff --git a/tpt/ast/02_badly_correlated.sql b/tpt/ast/02_badly_correlated.sql new file mode 100644 index 0000000..84eb4ee --- /dev/null +++ b/tpt/ast/02_badly_correlated.sql @@ -0,0 +1,133 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE badly_correlated1; +DROP TABLE badly_correlated2; + +CREATE TABLE badly_correlated1 (id, a, b, c, d, e, f, g, h, val) AS ( + SELECT rownum id, v.* FROM ( + SELECT + mod(rownum, 100000) a + , mod(rownum, 100000) b + , mod(rownum, 100000) c + , mod(rownum, 100000) d + , mod(rownum, 100000) e + , mod(rownum, 100000) f + , mod(rownum, 100000) g + , mod(rownum, 100000) h + , lpad('x',100,'x') + FROM + dual CONNECT BY LEVEL <= 100000 + UNION ALL + SELECT + 90 a + , 91 b + , 92 c + , 93 d + , 94 e + , 95 f + , 96 g + , 97 h + , lpad('y',100,'y') + FROM + dual CONNECT BY LEVEL <= 100000 + ) v +) +/ + +CREATE TABLE badly_correlated2 AS SELECT * FROM badly_correlated1; + +ALTER TABLE badly_correlated1 MODIFY id PRIMARY KEY; +ALTER TABLE badly_correlated2 MODIFY id PRIMARY KEY; + +CREATE INDEX idx1_badly_correlated1 ON badly_correlated1 (a,b,c,d,e,f,g); +CREATE INDEX idx1_badly_correlated2 ON badly_correlated2 (a,b,c,d,e,f,g); + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED1', method_opt=>'FOR TABLE', cascade=>true); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED2', method_opt=>'FOR TABLE', cascade=>true); + + +select /*+ opt_param('_optimizer_use_feedback', 'false') */ + * +from + badly_correlated1 t1 + , badly_correlated2 t2 +where + t1.id = t2.id +and t1.a = 90 +and t1.b = 91 +and t1.c = 92 +and t1.d = 93 +and t1.e = 94 +and t1.f = 95 +and t1.g = 96 +and t1.h = 97 +and t2.val like 'xy%' +/ + +@x + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED1', method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED2', method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true); + +select /*+ opt_param('_optimizer_use_feedback', 'false') */ + * +from + badly_correlated1 t1 + , badly_correlated2 t2 +where + t1.id = t2.id +and t1.a = 90 +and t1.b = 91 +and t1.c = 92 +and t1.d = 93 +and t1.e = 94 +and t1.f = 95 +and t1.g = 96 +and t1.h = 97 +and t2.val like 'xy%' +/ + +@x + +-- create extended stats +select + dbms_stats.create_extended_stats( + ownname => user + , tabname=>'BADLY_CORRELATED1' + , extension=>'(a,b,c,d,e,f,g,h)' + ) +from dual +/ + +select + dbms_stats.create_extended_stats( + ownname => user + , tabname=>'BADLY_CORRELATED2' + , extension=>'(a,b,c,d,e,f,g,h)' + ) +from dual +/ + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED1', method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'BADLY_CORRELATED2', method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true); + +select /*+ opt_param('_optimizer_use_feedback', 'false') */ + * +from + badly_correlated1 t1 + , badly_correlated2 t2 +where + t1.id = t2.id +and t1.a = 90 +and t1.b = 91 +and t1.c = 92 +and t1.d = 93 +and t1.e = 94 +and t1.f = 95 +and t1.g = 96 +and t1.h = 97 +and t2.val like 'xy%' +/ + +@x diff --git a/tpt/ast/02_bind_peeking_nested_loops.sql b/tpt/ast/02_bind_peeking_nested_loops.sql new file mode 100644 index 0000000..8ecc668 --- /dev/null +++ b/tpt/ast/02_bind_peeking_nested_loops.sql @@ -0,0 +1,126 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/bind_peeking_nested_loops.sql +-- Purpose: this script demos how a "wrong" bind variable value +-- can cause an execution plan to be compiled which is +-- very inefficient for the next execution with different bind variable +-- values (with large number of matching rows) +-- the second execution of the query takes very long time to complete +-- despite adaptive bind variable peeking, which would kick in during the +-- next (3rd) execution +-- +-- This problem happens even on Oracle 11.2 despite adaptive bind peeking +-- and cardinality feedback (due to design, not a bug) +-- +-- Author: Tanel Poder (tanel@e2sn.com) +-- Copyright: (c) http://tech.e2sn.com +-- +-------------------------------------------------------------------------------- +alter session set optimizer_use_sql_plan_baselines = false; + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; +DROP TABLE t5; + +CREATE TABLE t1 AS SELECT * FROM dba_objects WHERE rownum <= 50000; +CREATE TABLE t2 AS SELECT * FROM dba_objects WHERE rownum <= 10000; +CREATE TABLE t3 AS SELECT * FROM dba_objects WHERE rownum <= 10000; +CREATE TABLE t4 AS SELECT * FROM dba_objects WHERE rownum <= 10000; +CREATE TABLE t5 AS SELECT * FROM dba_objects WHERE rownum <= 10000; + +CREATE INDEX i1 ON t1(owner); +CREATE INDEX i2 ON t2(owner); +CREATE INDEX i3 ON t3(owner); +CREATE INDEX i4 ON t4(owner); +CREATE INDEX i5 ON t5(owner); + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T4',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T5',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T4',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T5',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); + +-- this hack might be needed to "help" this problem to show up sometimes: +-- ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=10; + +VAR v1 VARCHAR2(100) +VAR v2 VARCHAR2(100) +VAR v3 VARCHAR2(100) +VAR v4 VARCHAR2(100) +VAR v5 VARCHAR2(100) + +EXEC :v1:='SCOTT' +EXEC :v2:='SCOTT' +EXEC :v3:='SCOTT' +EXEC :v4:='SCOTT' +EXEC :v5:='SCOTT' + +SET TIMING ON + +PROMPT Running query first time, this should be fast (and should use nested loops execution plan) + +SELECT + MIN(t1.created), MAX(t1.created) +FROM + t1 + , t2 + , t3 + , t4 + , t5 +WHERE + t1.object_id = t2.object_id +AND t2.object_id = t3.object_id +AND t3.object_id = t4.object_id +AND t4.object_id = t5.object_id +AND t1.owner = :v1 +AND t2.owner = :v2 +AND t3.owner = :v3 +AND t4.owner = :v4 +AND t5.owner = :v5 +/ + +SET TIMING OFF + +--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST ADVANCED')); +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null)); + +EXEC :v1:='SYS' +EXEC :v2:='SYS' +EXEC :v3:='SYS' +EXEC :v4:='SYS' +EXEC :v5:='SYS' + +SET TIMING ON + +PROMPT Now running the same query with different bind variables (this query should take very long time) + +SELECT + MIN(t1.created), MAX(t1.created) +FROM + t1 + , t2 + , t3 + , t4 + , t5 +WHERE + t1.object_id = t2.object_id +AND t2.object_id = t3.object_id +AND t3.object_id = t4.object_id +AND t4.object_id = t5.object_id +AND t1.owner = :v1 +AND t2.owner = :v2 +AND t3.owner = :v3 +AND t4.owner = :v4 +AND t5.owner = :v5 +/ + diff --git a/tpt/ast/02_bind_peeking_nested_loops_2.sql b/tpt/ast/02_bind_peeking_nested_loops_2.sql new file mode 100644 index 0000000..c0d9714 --- /dev/null +++ b/tpt/ast/02_bind_peeking_nested_loops_2.sql @@ -0,0 +1,87 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/bind_peeking_nested_loops.sql +-- Purpose: this script demos how a "wrong" bind variable value +-- can cause an execution plan to be compiled which is +-- very inefficient for the next execution with different bind variable +-- values (with large number of matching rows) +-- the second execution of the query takes very long time to complete +-- despite adaptive bind variable peeking, which would kick in during the +-- next (3rd) execution +-- +-- This problem happens even on Oracle 11.2 despite adaptive bind peeking +-- and cardinality feedback (due design, not a bug) +-- +-- Author: Tanel Poder (tanel@e2sn.com) +-- Copyright: (c) http://tech.e2sn.com +-- +-------------------------------------------------------------------------------- + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; + +CREATE TABLE t1 AS SELECT * FROM dba_objects; +CREATE TABLE t2 AS SELECT * FROM dba_objects; +CREATE TABLE t3 AS SELECT * FROM dba_objects; + +CREATE INDEX i1 ON t1(owner); +CREATE INDEX i2 ON t2(owner); +CREATE INDEX i3 ON t3(owner); + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); + +ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=10; + +VAR v VARCHAR2(100) + +EXEC :v:='SYS' + +SET TIMING ON + +PROMPT Running query first time, this should be fast (and should use nested loops execution plan) + +SELECT + MIN(t1.created), MAX(t1.created) +FROM + t1 + , t2 + , t3 +WHERE + t1.object_id = t2.object_id +AND t2.object_id = t3.object_id +AND t1.owner = :v +AND t2.owner = :v +AND t3.owner = :v +/ + +SET TIMING OFF + +--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST ADVANCED')); +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null)); + +EXEC :v:='SCOTT' + +SET TIMING ON + +PROMPT Now running the same query with different bind variables (this query should take very long time) + +SELECT + MIN(t1.created), MAX(t1.created) +FROM + t1 + , t2 + , t3 +WHERE + t1.object_id = t2.object_id +AND t2.object_id = t3.object_id +AND t1.owner = :v +AND t2.owner = :v +AND t3.owner = :v +/ + diff --git a/tpt/ast/02_bind_peeking_nested_loops_nohist.sql b/tpt/ast/02_bind_peeking_nested_loops_nohist.sql new file mode 100644 index 0000000..ff7435c --- /dev/null +++ b/tpt/ast/02_bind_peeking_nested_loops_nohist.sql @@ -0,0 +1,87 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/bind_peeking_nested_loops.sql +-- Purpose: this script demos how a "wrong" bind variable value +-- can cause an execution plan to be compiled which is +-- very inefficient for the next execution with different bind variable +-- values (with large number of matching rows) +-- the second execution of the query takes very long time to complete +-- despite adaptive bind variable peeking, which would kick in during the +-- next (3rd) execution +-- +-- This problem happens even on Oracle 11.2 despite adaptive bind peeking +-- and cardinality feedback (due design, not a bug) +-- +-- Author: Tanel Poder (tanel@e2sn.com) +-- Copyright: (c) http://tech.e2sn.com +-- +-------------------------------------------------------------------------------- + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; + +CREATE TABLE t1 AS SELECT * FROM dba_objects; +CREATE TABLE t2 AS SELECT * FROM dba_objects; +CREATE TABLE t3 AS SELECT * FROM dba_objects; + +CREATE INDEX i1 ON t1(owner); +CREATE INDEX i2 ON t2(owner); +CREATE INDEX i3 ON t3(owner); + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); + +ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=10; + +VAR v VARCHAR2(100) + +EXEC :v:='SCOTT' + +SET TIMING ON + +PROMPT Running query first time, this should be fast (and should use nested loops execution plan) + +SELECT + MIN(t1.created), MAX(t1.created) +FROM + t1 + , t2 + , t3 +WHERE + t1.object_id = t2.object_id +AND t2.object_id = t3.object_id +AND t1.owner = :v +AND t2.owner = :v +AND t3.owner = :v +/ + +SET TIMING OFF + +--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST ADVANCED')); +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null)); + +EXEC :v:='SYS' + +SET TIMING ON + +PROMPT Now running the same query with different bind variables (this query should take very long time) + +SELECT + MIN(t1.created), MAX(t1.created) +FROM + t1 + , t2 + , t3 +WHERE + t1.object_id = t2.object_id +AND t2.object_id = t3.object_id +AND t1.owner = :v +AND t2.owner = :v +AND t3.owner = :v +/ + diff --git a/tpt/ast/02_bind_peeking_nested_loops_proc.sql b/tpt/ast/02_bind_peeking_nested_loops_proc.sql new file mode 100644 index 0000000..7c6d21c --- /dev/null +++ b/tpt/ast/02_bind_peeking_nested_loops_proc.sql @@ -0,0 +1,98 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/bind_peeking_nested_loops.sql +-- Purpose: this script demos how a "wrong" bind variable value +-- can cause an execution plan to be compiled which is +-- very inefficient for the next execution with different bind variable +-- values (with large number of matching rows) +-- the second execution of the query takes very long time to complete +-- despite adaptive bind variable peeking, which would kick in during the +-- next (3rd) execution +-- +-- This problem happens even on Oracle 11.2 despite adaptive bind peeking +-- and cardinality feedback (due to design, not a bug) +-- +-- Author: Tanel Poder (tanel@e2sn.com) +-- Copyright: (c) http://tech.e2sn.com +-- +-------------------------------------------------------------------------------- +alter session set optimizer_use_sql_plan_baselines = false; + +DROP TABLE t_bp1; +DROP TABLE t_bp2; +DROP TABLE t_bp3; +DROP TABLE t_bp4; +DROP TABLE t_bp5; + +CREATE TABLE t_bp1 AS SELECT * FROM dba_objects WHERE rownum <= 50000; +CREATE TABLE t_bp2 AS SELECT * FROM dba_objects WHERE rownum <= 10000; +CREATE TABLE t_bp3 AS SELECT * FROM dba_objects WHERE rownum <= 10000; +CREATE TABLE t_bp4 AS SELECT * FROM dba_objects WHERE rownum <= 10000; +CREATE TABLE t_bp5 AS SELECT * FROM dba_objects WHERE rownum <= 10000; + +CREATE INDEX i_bp1 ON t_bp1(owner); +CREATE INDEX i_bp2 ON t_bp2(owner); +CREATE INDEX i_bp3 ON t_bp3(owner); +CREATE INDEX i_bp4 ON t_bp4(owner); +CREATE INDEX i_bp5 ON t_bp5(owner); + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T_BP1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T_BP2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T_BP3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T_BP4',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T_BP5',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 254'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T1',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T2',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T3',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T4',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T5',cascade=>TRUE, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 1'); + +-- this hack might be needed to "help" this problem to show up sometimes: +-- ALTER SESSION SET OPTIMIZER_INDEX_COST_ADJ=10; + +CREATE OR REPLACE PROCEDURE test_bp (num_loops IN NUMBER, sleep IN NUMBER + , v1 IN VARCHAR2, v2 IN VARCHAR2, v3 IN VARCHAR2, v4 IN VARCHAR2, v5 IN VARCHAR2) +AS + r1 DATE; + r2 DATE; + s NUMBER; +BEGIN + FOR i IN 1..num_loops LOOP + SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + MIN(t_bp1.created), MAX(t_bp5.created) INTO r1, r2 + FROM + t_bp1 + , t_bp2 + , t_bp3 + , t_bp4 + , t_bp5 + WHERE + t_bp1.object_id = t_bp2.object_id + AND t_bp2.object_id = t_bp3.object_id + AND t_bp3.object_id = t_bp4.object_id + AND t_bp4.object_id = t_bp5.object_id + AND t_bp1.owner = v1 + AND t_bp2.owner = v2 + AND t_bp3.owner = v3 + AND t_bp4.owner = v4 + AND t_bp5.owner = v5; + + s := s + (r2 - r1); -- dummy calculation + IF sleep > 0 THEN DBMS_LOCK.SLEEP(sleep); END IF; + END LOOP; + DBMS_OUTPUT.PUT_LINE(TO_CHAR(s)); +END; +/ + +PROMPT Running query first time, this should be fast (and should use nested loops execution plan) + + +--SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null)); + +SET TIMING ON + +PROMPT Now running the same query with different bind variables (this query should take very long time) + diff --git a/tpt/ast/02_choosing_join_order.sql b/tpt/ast/02_choosing_join_order.sql new file mode 100644 index 0000000..7e06227 --- /dev/null +++ b/tpt/ast/02_choosing_join_order.sql @@ -0,0 +1,111 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: 02_choosing_join_order.sql +-- +-- Purpose: Advanced Oracle SQL Tuning demo script +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: You can run the query against Oracle's sample schemas (SH) +-- The optimizer stats have to be updated to cause trouble. +-- See the commented out code below +-- +-------------------------------------------------------------------------------- + +-- in Oracle 11gR2, set the cardinality feedback option to false for demo stability purposes +-- alter session set "_optimizer_use_feedback"=false; +-- +-- Set statistics_level = all for measuring optimizer misestimate (or use V$SQL_MONITOR): +-- alter session set statistics_level = all; +-- +-- Cause trouble for the optimizer: +-- EXEC DBMS_STATS.SET_TABLE_STATS('SH','CUSTOMERS', NUMROWS=>1, NUMBLKS=>1, NO_INVALIDATE=>FALSE); + +SELECT /*+ MONITOR */ + ch.channel_desc + , co.country_iso_code co + , cu.cust_city + , p.prod_category + , sum(s.quantity_sold) + , sum(s.amount_sold) +FROM + sh.sales s + , sh.customers cu + , sh.countries co + , sh.products p + , sh.channels ch +WHERE + -- join + s.cust_id = cu.cust_id +AND cu.country_id = co.country_id +AND s.prod_id = p.prod_id +AND s.channel_id = ch.channel_id + -- filter +AND ch.channel_class = 'Direct' +AND co.country_iso_code = 'US' +AND p.prod_category = 'Electronics' +GROUP BY + ch.channel_desc + , co.country_iso_code + , cu.cust_city + , p.prod_category +/ + + +-------------------------------------------------------------------------------------------------------- +-- SQL Profiles (require Tuning + Diag Pack): +-------------------------------------------------------------------------------------------------------- +-- +-- VAR sql_fulltext CLOB +-- EXEC SELECT sql_fulltext INTO :sql_fulltext FROM v$sql WHERE sql_id = '1ka5g0kh4h6pc' AND rownum = 1; +-- +-- Example 1: Set Join order: +-- EXEC DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=>sys.sqlprof_attr('LEADING(@"SEL$1" "CO"@"SEL$1" "CH"@"SEL$1" "CU"@"SEL$1" "S"@"SEL$1" "P"@"SEL$1")'), name=> 'MANUAL_PROFILE_1ka5g0kh4h6pc'); +-- +-- Example 2: Adjust cardinality: +-- EXEC DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=>sys.sqlprof_attr('CARDINALITY(@"SEL$1" "CU"@"SEL$1" 100000)'), name=> 'MANUAL_PROFILE_1ka5g0kh4h6pc'); +-- +-- Example 3: Set multiple hints: +-- DECLARE +-- hints sys.sqlprof_attr := sys.sqlprof_attr( +-- ('LEADING(@"SEL$1" "CO"@"SEL$1" "CH"@"SEL$1"') +-- , ('CARDINALITY(@"SEL$1" "CU"@"SEL$1" 100000)') +-- ); +-- BEGIN +-- DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=> hints, name=> 'MANUAL_PROFILE_1ka5g0kh4h6pc'); +-- END; +-- / +-- +-- Drop the profile: +-- EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE('MANUAL_PROFILE_1ka5g0kh4h6pc'); +-- +-- +-------------------------------------------------------------------------------------------------------- +-- SQL Plan Baselines - DBMS_SPM in EE licenses - see http://jonathanlewis.wordpress.com/2011/01/12/fake-baselines/ +-------------------------------------------------------------------------------------------------------- +-- bad_sqlid = 1ka5g0kh4h6pc +-- good_sqlid = 1fzf3vqv0f49q + +-- 1) Manually run the query with hints, params, etc to get the plan you want (the good query) +-- +-- 2) Create a disabled plan baseline for the "bad query": +-- VAR x NUMBER +-- EXEC :x:= DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE('&bad_sqlid', enabled=>'NO'); +-- +-- 3) SELECT sql_handle FROM dba_sql_plan_baselines WHERE sql_text = ''; +-- +-- 4) Associate the "good query" plan with the "bad query" SQL plan baseline: +-- DEF good_sql_id = 1fzf3vqv0f49q +-- DEF good_plan_hash_value = 2863714589 +-- DEF sql_handle_for_original = SQL_4b3ef772af37954d + +-- VAR x NUMBER +-- +-- exec :x := dbms_spm.load_plans_from_cursor_cache( - +-- sql_id => '&good_sql_id', - +-- plan_hash_value => &good_plan_hash_value, - +-- sql_handle => '&sql_handle_for_original'); +-- diff --git a/tpt/ast/02_distinct_agg_transform.sql b/tpt/ast/02_distinct_agg_transform.sql new file mode 100644 index 0000000..e9e8657 --- /dev/null +++ b/tpt/ast/02_distinct_agg_transform.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- TODO: not working yet +-- LEADING hint sets the order properly but not the ORDERED hint + +drop table t1; +drop table t2; + +create table t1 as select * from all_objects; +create table t2 as select * from all_objects; + +create index i1 on t2(object_id); + +exec dbms_stats.gather_table_stats(user,'T1'); +exec dbms_stats.gather_table_stats(user,'T2'); + +-- ordered hint "ignored" starting from 11.2.0.1 thanks to distinct aggregation transformation + +select /*+ ORDERED */ t1.owner, count(distinct t2.object_type) from t2, t1 where t1.object_id = t2.object_id group by t1.owner; +@x + +select /*+ ORDERED NO_TRANSFORM_DISTINCT_AGG */ t1.owner, count(distinct t2.object_type) from t2, t1 where t1.object_id = t2.object_id group by t1.owner; +@x + diff --git a/tpt/ast/02_join_nested_loops.sql b/tpt/ast/02_join_nested_loops.sql new file mode 100644 index 0000000..3287f72 --- /dev/null +++ b/tpt/ast/02_join_nested_loops.sql @@ -0,0 +1,73 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set echo on + +select + t.owner, t.created, i.last_ddl_time +from + test_objects t + , indexed_objects i +where + t.object_id = i.object_id +and t.owner = 'SH' +and t.object_name like 'S%' +/ + +@xall + + +select /*+ LEADING(t,i) USE_NL(i) */ + t.owner, t.created, i.last_ddl_time +from + test_objects t + , indexed_objects i +where + t.object_id = i.object_id +and t.owner = 'SH' +and t.object_name like 'S%' +/ + +@xall + + +select /*+ LEADING(t,i) USE_NL(i) NO_NLJ_PREFETCH(i) */ + t.owner, t.created, i.last_ddl_time +from + test_objects t + , indexed_objects i +where + t.object_id = i.object_id +and t.owner = 'SH' +and t.object_name like 'S%' +/ + +@xall + +select /*+ LEADING(t,i) USE_NL(i) NO_NLJ_BATCHING(i) */ + t.owner, t.created, i.last_ddl_time +from + test_objects t + , indexed_objects i +where + t.object_id = i.object_id +and t.owner = 'SH' +and t.object_name like 'S%' +/ + +@xall + +select /*+ LEADING(t,i) USE_NL(i) NO_NLJ_PREFETCH(t) NO_NLJ_PREFETCH(i) NO_NLJ_BATCHING(t) NO_NLJ_BATCHING(i) */ + t.owner, t.created, i.last_ddl_time +from + test_objects t + , indexed_objects i +where + t.object_id = i.object_id +and t.owner = 'SH' +and t.object_name like 'S%' +/ + +@xall + +set echo off diff --git a/tpt/ast/02_leading_sq.sql b/tpt/ast/02_leading_sq.sql new file mode 100644 index 0000000..d3dc67a --- /dev/null +++ b/tpt/ast/02_leading_sq.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select +/*+ + no_unnest(@my_sub) + leading (@my_sub emp_inner@my_sub) + use_merge (@my_sub dept_inner@my_sub) +*/ + * +from + scott.emp emp_outer +where + emp_outer.deptno in ( + select /*+ qb_name(my_sub) */ + dept_inner.deptno + from + scott.dept dept_inner + , scott.emp emp_inner + where + dept_inner.dname like 'S%' + and emp_inner.ename = dept_inner.dname + and dept_inner.deptno = emp_outer.deptno + ) +/ diff --git a/tpt/ast/02_outline_force_plan_from_cursor.sql b/tpt/ast/02_outline_force_plan_from_cursor.sql new file mode 100644 index 0000000..a633d15 --- /dev/null +++ b/tpt/ast/02_outline_force_plan_from_cursor.sql @@ -0,0 +1,176 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Advanced Oracle SQL Tuning + +-- when testing purposes on 11g+ +ALTER SESSION SET "_optimizer_use_feedback"=FALSE; + +--exec dbms_outln.drop_unused; +exec dbms_outln.drop_by_cat('TEMP_SWAP_OUTLINE'); +exec dbms_outln.drop_by_cat('TEMP_SWAP_OUTLINE_BAD'); +exec dbms_outln.drop_by_cat('TEMP_SWAP_OUTLINE_GOOD'); +-- this command will drop all default outlines!!! +exec dbms_outln.drop_by_cat('DEFAULT'); + +delete from ol$; +delete from ol$hints; +delete from ol$nodes; +COMMIT; + +ALTER SYSTEM FLUSH SHARED_POOL; + +-- bad original query +SELECT + ch.channel_desc + , co.country_iso_code co + , cu.cust_city + , p.prod_category + , sum(s.quantity_sold) + , sum(s.amount_sold) +FROM + sh.sales s + , sh.customers cu + , sh.countries co + , sh.products p + , sh.channels ch +WHERE + -- join + s.cust_id = cu.cust_id +AND cu.country_id = co.country_id +AND s.prod_id = p.prod_id +AND s.channel_id = ch.channel_id + -- filter +AND ch.channel_class = 'Direct' +AND co.country_iso_code = 'US' +AND p.prod_category = 'Electronics' +GROUP BY + ch.channel_desc + , co.country_iso_code + , cu.cust_city + , p.prod_category +/ +/ + +@hash +-- manually tuned query +SELECT /*+ CARDINALITY(cu 55500) CARDINALITY(s 918000) */ + ch.channel_desc + , co.country_iso_code co + , cu.cust_city + , p.prod_category + , sum(s.quantity_sold) + , sum(s.amount_sold) +FROM + sh.sales s + , sh.customers cu + , sh.countries co + , sh.products p + , sh.channels ch +WHERE + -- join + s.cust_id = cu.cust_id +AND cu.country_id = co.country_id +AND s.prod_id = p.prod_id +AND s.channel_id = ch.channel_id + -- filter +AND ch.channel_class = 'Direct' +AND co.country_iso_code = 'US' +AND p.prod_category = 'Electronics' +GROUP BY + ch.channel_desc + , co.country_iso_code + , cu.cust_city + , p.prod_category +/ +/ + +@hash + + + +-- orig: 2689079980 1ka5g0kh4h6pc 0 +-- tuned: 3053916470 1fzf3vqv0f49q 0 + +-- workaround bug: Bug 5454975 : ORA-3113 WHEN EXECUTING DBMS_OUTLN.CREATE_OUTLINE +ALTER SESSION SET create_stored_outlines = TRUE; +-- make sure you use right SQL hash values and child cursor numbers here! +EXEC DBMS_OUTLN.CREATE_OUTLINE(2689079980, 0, 'TEMP_SWAP_OUTLINE_BAD'); +EXEC DBMS_OUTLN.CREATE_OUTLINE(3053916470, 0, 'TEMP_SWAP_OUTLINE_GOOD'); +ALTER SESSION SET create_stored_outlines = FALSE; + +COL outline_name_bad NEW_VALUE outline_name_bad +COL outline_name_good NEW_VALUE outline_name_good + +-- get outline names +SELECT category,name outline_name_bad,owner,signature,enabled,timestamp,version FROM dba_outlines WHERE category = 'TEMP_SWAP_OUTLINE_BAD'; +SELECT category,name outline_name_good,owner,signature,enabled,timestamp,version FROM dba_outlines WHERE category = 'TEMP_SWAP_OUTLINE_GOOD'; + +-- change the outlines to the same category for modification +ALTER OUTLINE &outline_name_bad CHANGE CATEGORY TO temp_swap_outline; +ALTER OUTLINE &outline_name_good CHANGE CATEGORY TO temp_swap_outline; + +CREATE PRIVATE OUTLINE bad FROM &outline_name_bad; +CREATE PRIVATE OUTLINE good FROM &outline_name_good; + +-- these ol$ and ol$hints tables are actually just GTTs (private to your session - private outlines) +-- do NOT modify the real ol$ and ol$hints tables in OUTLN schema directly!!! +SAVEPOINT before_ol_update; +UPDATE ol$ SET hintcount=(SELECT hintcount FROM ol$ WHERE ol_name='GOOD') where ol_name='BAD'; +DELETE FROM ol$ WHERE ol_name='GOOD'; +DELETE FROM ol$hints WHERE ol_name='BAD'; +UPDATE ol$hints SET ol_name='BAD' where ol_name='GOOD'; + +COMMIT; + +-- this just invalidate outline +EXEC DBMS_OUTLN_EDIT.REFRESH_PRIVATE_OUTLINE('BAD'); + +ALTER SESSION SET use_private_outlines = TRUE; +-- run the original query again now - it should show "outline "BAD" used for this statement +-- ... +ALTER SESSION SET use_private_outlines = FALSE; + +-- now publish the outline for use by others: +CREATE OR REPLACE OUTLINE &outline_name_bad FROM PRIVATE bad FOR CATEGORY temp_swap_outline; +ALTER SESSION SET use_stored_outlines = temp_swap_outline; +-- run the query again, it should show the original production outline used, but with the new plan ... + +-- change the outline to DEFAULT category so that any session with use_stored_outlines = TRUE would use it +ALTER OUTLINE &outline_name_bad CHANGE CATEGORY TO "DEFAULT"; +ALTER SESSION SET use_stored_outlines = TRUE; +-- optional... +ALTER OUTLINE &outline_name_bad RENAME TO outline_1ka5g0kh4h6pc; + +SELECT + ch.channel_desc + , co.country_iso_code co + , cu.cust_city + , p.prod_category + , sum(s.quantity_sold) + , sum(s.amount_sold) +FROM + sh.sales s + , sh.customers cu + , sh.countries co + , sh.products p + , sh.channels ch +WHERE + -- join + s.cust_id = cu.cust_id +AND cu.country_id = co.country_id +AND s.prod_id = p.prod_id +AND s.channel_id = ch.channel_id + -- filter +AND ch.channel_class = 'Direct' +AND co.country_iso_code = 'US' +AND p.prod_category = 'Electronics' +GROUP BY + ch.channel_desc + , co.country_iso_code + , cu.cust_city + , p.prod_category +/ +@x + + diff --git a/tpt/ast/02_qt_troubleshooting.sql b/tpt/ast/02_qt_troubleshooting.sql new file mode 100644 index 0000000..dce42c5 --- /dev/null +++ b/tpt/ast/02_qt_troubleshooting.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table qt_test; + +create table qt_test ( + id number primary key + , name varchar2(100) +) +/ + +insert into qt_test select rownum, lpad('x',100,'x') from dual connect by level <=10000; + +exec dbms_stats.gather_table_stats(user,'QT_TEST'); + +select count(name) from qt_test; +@x + +alter table qt_test modify name not null; + +select count(name) from qt_test; +@x + diff --git a/tpt/ast/02_sql_plan_baseline_from_cursor.sql b/tpt/ast/02_sql_plan_baseline_from_cursor.sql new file mode 100644 index 0000000..02248c2 --- /dev/null +++ b/tpt/ast/02_sql_plan_baseline_from_cursor.sql @@ -0,0 +1,34 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------------------------------- +-- SQL Plan Baselines - DBMS_SPM in EE licenses - see http://jonathanlewis.wordpress.com/2011/01/12/fake-baselines/ +-------------------------------------------------------------------------------------------------------- +-- bad_sqlid = 1ka5g0kh4h6pc +-- good_sqlid = 1fzf3vqv0f49q + +-- 1) Make sure your "bad query" is in library cache +-- 2) Manually optimize the query with hints, params, etc to get the plan you want (the "good query") + +-- 3) Create a disabled plan baseline for the "bad query": + +VAR x NUMBER +EXEC :x:= DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE('&bad_sqlid', enabled=>'NO'); + +-- 4) Find the SQL handle of your "bad" query: + +SELECT sql_handle FROM dba_sql_plan_baselines WHERE sql_text = ''; + +-- 5) Associate the "good query" plan with the "bad query" SQL plan baseline: + +DEF good_sql_id = 1fzf3vqv0f49q +DEF good_plan_hash_value = 2863714589 +DEF sql_handle_for_original = SQL_4b3ef772af37954d + +VAR x NUMBER + +exec :x := dbms_spm.load_plans_from_cursor_cache( - + sql_id => '&good_sql_id', - + plan_hash_value => &good_plan_hash_value, - + sql_handle => '&sql_handle_for_original'); + diff --git a/tpt/ast/02_sqlprofile_force_plan_with_custom_hints.sql b/tpt/ast/02_sqlprofile_force_plan_with_custom_hints.sql new file mode 100644 index 0000000..515070c --- /dev/null +++ b/tpt/ast/02_sqlprofile_force_plan_with_custom_hints.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- use the @ast/02_choosing_join_order.sql script to run the demo query +-------------------------------------------------------------------------------------------------------- +-- SQL Profiles (require Tuning + Diag Pack): +-------------------------------------------------------------------------------------------------------- + +-- Drop the profile: +-- EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE('MANUAL_PROFILE_1ka5g0kh4h6pc'); + +VAR sql_fulltext CLOB +EXEC SELECT sql_fulltext INTO :sql_fulltext FROM v$sql WHERE sql_id = '1ka5g0kh4h6pc' AND rownum = 1; + +-- Example 1: Set Join order: +EXEC DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=>sys.sqlprof_attr('LEADING(@"SEL$1" "CO"@"SEL$1" "CH"@"SEL$1" "CU"@"SEL$1" "S"@"SEL$1" "P"@"SEL$1")'), name=> 'MANUAL_PROFILE_1ka5g0kh4h6pc'); + +-- Example 2: Adjust cardinality: +EXEC DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=>sys.sqlprof_attr('OPT_ESTIMATE(@"SEL$1", TABLE, "CU"@"SEL$1", SCALE_ROWS=100000)'), name=> 'MANUAL_PROFILE_1ka5g0kh4h6pc'); + +-- Example 3: Set multiple hints: +DECLARE + hints sys.sqlprof_attr := sys.sqlprof_attr( + ('LEADING(@"SEL$1" "CO"@"SEL$1" "CH"@"SEL$1")') + , ('OPT_ESTIMATE(@"SEL$1", TABLE, "CU"@"SEL$1", SCALE_ROWS=100000)') + ); +BEGIN + DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=> hints, name=> 'MANUAL_PROFILE_1ka5g0kh4h6pc'); +END; +/ + +-- Example 4: SwingBench TPCDS-Like Query 31 skip scan issue (force match) +-- alternative option would be to use opt_param('_optimizer_skip_scan_enabled','false') + +DECLARE + hints sys.sqlprof_attr := sys.sqlprof_attr( + ('NO_INDEX_SS(@"SEL$26CA4453" "STORE_SALES"@"SEL$1")') + , ('NO_INDEX_SS(@"SEL$2C2C13D8" "WEB_SALES"@"SEL$2")') + ); +BEGIN + DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=> hints, name=> 'QUERY31_DISABLE_SKIP_SCAN', force_match=> TRUE); +END; +/ + diff --git a/tpt/ast/03_bitmap_star_transformation.sql b/tpt/ast/03_bitmap_star_transformation.sql new file mode 100644 index 0000000..58dc8c4 --- /dev/null +++ b/tpt/ast/03_bitmap_star_transformation.sql @@ -0,0 +1,36 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- setting the 11.2 cardinality feedback option to false for demo stability purposes +exec execute immediate 'alter session set "_optimizer_use_feedback"=false'; exception when others then null; + +SELECT /*+ star_transformation */ + ch.channel_desc + , co.country_iso_code co + , cu.cust_city + , p.prod_category + , sum(s.quantity_sold) + , sum(s.amount_sold) +FROM + sh.sales s + , sh.customers cu + , sh.countries co + , sh.products p + , sh.channels ch +WHERE + -- join + s.cust_id = cu.cust_id +AND cu.country_id = co.country_id +AND s.prod_id = p.prod_id +AND s.channel_id = ch.channel_id + -- filter +AND ch.channel_class = 'Direct' +AND co.country_iso_code = 'US' +AND p.prod_category = 'Electronics' +GROUP BY + ch.channel_desc + , co.country_iso_code + , cu.cust_city + , p.prod_category +/ + diff --git a/tpt/ast/03_constraints_not_null.sql b/tpt/ast/03_constraints_not_null.sql new file mode 100644 index 0000000..bf2f2b4 --- /dev/null +++ b/tpt/ast/03_constraints_not_null.sql @@ -0,0 +1,46 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE cons_demo; + +CREATE TABLE cons_demo (owner varchar2(100), object_name varchar2(128)); + +INSERT /*+ APPEND */ INTO cons_demo SELECT owner, object_name FROM dba_objects; +COMMIT; + +SELECT COUNT(*) FROM cons_demo; +@x + +CREATE INDEX idx1_cons_demo ON cons_demo(owner); + +SELECT COUNT(*) FROM cons_demo; +@x + +SELECT /*+ INDEX(cons_demo cons_demo(owner)) */ COUNT(*) FROM cons_demo; + +ALTER TABLE cons_demo MODIFY owner NOT NULL NOVALIDATE; + +INSERT INTO cons_demo VALUES (null, 'x'); + +SELECT COUNT(*) FROM cons_demo; +@x + +ALTER TABLE cons_demo MODIFY owner NULL; +--ALTER TABLE cons_demo MODIFY owner NOT NULL VALIDATE; +--ALTER TABLE cons_demo MODIFY owner NOT NULL DEFERRABLE INITIALLY DEFERRED VALIDATE; +ALTER TABLE cons_demo MODIFY owner NOT NULL DEFERRABLE VALIDATE; + +SELECT COUNT(*) FROM cons_demo; +@x + + +DROP TABLE cons_demo2; + +CREATE TABLE cons_demo2 AS SELECT * FROM scott.emp; + +ALTER TABLE cons_demo2 ADD CONSTRAINT c2 CHECK (SAL > 500); + +SELECT * FROM cons_demo2 WHERE sal = 100; + +@x + diff --git a/tpt/ast/03_index_density.sql b/tpt/ast/03_index_density.sql new file mode 100644 index 0000000..fee7c6e --- /dev/null +++ b/tpt/ast/03_index_density.sql @@ -0,0 +1,43 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- analyze index density (how many rows per leaf block) +-- using SYS_OP_LBID function + +-- replace the first argument of SYS_OP_LBID number with the object_id of the index you are scanning +-- also you need to modify the table name and index name hint to query the table/index of your interest +-- make sure that the index is actually accessed in the execution plan (both fast full scan and range/full +-- scans do work, but fast full scan is the fastest if you want to scan through the entire index segment) +-- +-- additionally, you can use SAMPLE BLOCK syntax (below) to sample only some index blocks (when using +-- fast full scan) + + +COL blocks_histogram HEAD "Log(2,blocks) Histogram" FOR A30 + +SELECT + LPAD(NVL(TO_CHAR(rows_per_block), 'Total:'), 15, ' ') num_rows_in_blk + , blocks + , NVL2(rows_per_block, LPAD('#', LOG(2,blocks), '#'), null) blocks_histogram +FROM ( + SELECT + CEIL(num_rows/10) * 10 rows_per_block + , COUNT(*) blocks + FROM ( + SELECT /*+ INDEX_FFS(o IDX3_INDEXED_OBJECTS) */ + count(*) num_rows + FROM + indexed_objects o -- SAMPLE BLOCK (1000) o + WHERE + owner IS NOT NULL + GROUP BY + SYS_OP_LBID( 78363, 'L', o.ROWID) + ) + GROUP BY ROLLUP + ( CEIL(num_rows/10) * 10 ) + ORDER BY + CEIL(num_rows/10) * 10 +) +/ + + diff --git a/tpt/ast/03_index_inefficiency_1.sql b/tpt/ast/03_index_inefficiency_1.sql new file mode 100644 index 0000000..9ee60ae --- /dev/null +++ b/tpt/ast/03_index_inefficiency_1.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select /*+ index_rs(o o(owner)) */ avg(sysdate - created) days_old +from + indexed_objects o +where + owner = 'SYS' +and object_type = 'PACKAGE' +/ + +@x + +-- Then create an index which satisfies the additional filter column... +-- create index idx2_indexed_objects on indexed_objects (owner, object_type); + +-- Then re-create the index with also the column that includes the columns selected in the query +-- drop index idx2_indexed_objects; +-- create index idx2_indexed_objects on indexed_objects (owner, object_type, created); + diff --git a/tpt/ast/03_index_skip_scan.sql b/tpt/ast/03_index_skip_scan.sql new file mode 100644 index 0000000..a2cc591 --- /dev/null +++ b/tpt/ast/03_index_skip_scan.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t; +CREATE TABLE t AS SELECT * FROM dba_objects; +CREATE INDEX i1 ON t(MOD(object_id,4), object_id); +@gts t + +SELECT /*+ INDEX_SS(t) */ * FROM t WHERE object_id = 12345; +@x + +CREATE INDEX i2 ON t(MOD(SYS_CONTEXT('USERENV','SID'),4), object_id); +SELECT /*+ INDEX_SS(t) */ * FROM t WHERE object_id = 12345; +@x + +ALTER TABLE t ADD x NUMBER NULL; +ALTER TABLE t MODIFY x DEFAULT MOD(SYS_CONTEXT('USERENV','SID'),16); + +CREATE INDEX i3 ON t(x,object_id); +SELECT * FROM t WHERE object_id = 12345; +@x + diff --git a/tpt/ast/03_index_supporting_sorts.sql b/tpt/ast/03_index_supporting_sorts.sql new file mode 100644 index 0000000..593dac3 --- /dev/null +++ b/tpt/ast/03_index_supporting_sorts.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + owner, object_type, status, count(*) +from + indexed_objects o +where + owner = 'SYS' +and object_type = 'JAVA CLASS' +and created > sysdate - 3650 +group by + owner,object_type,status +order by + status +/ + + +-- Then re-create the index with also the column that we sort/group by +-- drop index idx2_indexed_objects; +-- create index idx2_indexed_objects on indexed_objects (owner, object_type, created, status); + +-- And try tho swap the last 2 columns in end of the index: +-- drop index idx2_indexed_objects; +-- create index idx2_indexed_objects on indexed_objects (owner, object_type, status, created); + diff --git a/tpt/ast/04_cbo_selectivity_decay.sql b/tpt/ast/04_cbo_selectivity_decay.sql new file mode 100644 index 0000000..dc21166 --- /dev/null +++ b/tpt/ast/04_cbo_selectivity_decay.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE selectivity_test; + +CREATE TABLE selectivity_test AS +SELECT sysdate - rownum d +FROM dual connect by level <= 365; + +@gts selectivity_test + +@minmax d selectivity_test + +@descxx selectivity_test + diff --git a/tpt/ast/04_cbo_troubleshoot_1.sql b/tpt/ast/04_cbo_troubleshoot_1.sql new file mode 100644 index 0000000..a17459e --- /dev/null +++ b/tpt/ast/04_cbo_troubleshoot_1.sql @@ -0,0 +1,45 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + oe.orders o + , oe.order_items oi + , oe.products prod + , oe.customers c + , oe.promotions prom + , hr.employees e + , hr.departments d +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND d.department_id = e.department_id + -- filters +AND d.department_name = 'Sales' +AND e.first_name = 'William' +AND e.last_name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' +AND c.cust_first_name = 'Gena' +AND c.cust_last_name = 'Harris' +GROUP BY + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price +/ diff --git a/tpt/ast/04_cbo_troubleshoot_2.sql b/tpt/ast/04_cbo_troubleshoot_2.sql new file mode 100644 index 0000000..7266b9b --- /dev/null +++ b/tpt/ast/04_cbo_troubleshoot_2.sql @@ -0,0 +1,53 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT /*+ leading (dep e o c oi) + use_hash(oi) + xuse_nl(oi) + xindex(oi iii) + NO_SWAP_JOIN_INPUTS(@"SEL$4B12EFE6" "C"@"SEL$1") + NO_SWAP_JOIN_INPUTS(@"SEL$5488CC2B" "C"@"MAIN") + opt_param('_optimizer_use_feedback', 'false') + qb_name(main) + */ + dep.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + hr.departments dep -- 1 + , hr.employees e -- 1 + , oe.orders o -- ? + , oe.order_items oi -- ? + , oe.products prod -- 1 + , oe.customers c -- 1 + , oe.promotions prom -- ? +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND dep.department_id = e.department_id + -- filters +AND dep.department_name = 'Sales' -- 1 row +AND e.first_name = 'William' -- 1 row +AND e.last_name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' -- 1 row (view) +AND c.cust_first_name = 'Gena' -- +AND c.cust_last_name = 'Harris' -- 1 row +GROUP BY + dep.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price +/ diff --git a/tpt/ast/04_cbo_troubleshoot_3.sql b/tpt/ast/04_cbo_troubleshoot_3.sql new file mode 100644 index 0000000..d20e3ed --- /dev/null +++ b/tpt/ast/04_cbo_troubleshoot_3.sql @@ -0,0 +1,50 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT /*+ + opt_param('_optimizer_use_feedback', 'false') + cardinality(c o 50000) + OPT_ESTIMATE(@"SEL$1", JOIN, ("C"@"SEL$1", "E"@"SEL$1" "D"@"SEL$1" "O"@SEL$1), SCALE_ROWS=100000) + cardinality(c e d o 100000) + */ + dep.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + hr.departments dep -- 1 + , hr.employees e -- 1 + , oe.orders o -- ? + , oe.order_items oi -- ? + , oe.products prod -- 1 + , oe.customers c -- 1 + , oe.promotions prom -- ? +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND dep.department_id = e.department_id + -- filters +AND dep.department_name = 'Sales' -- 1 row +AND e.first_name = 'William' -- 1 row +AND e.last_name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' -- 1 row (view) +AND c.cust_first_name = 'Gena' -- +AND c.cust_last_name = 'Harris' -- 1 row +GROUP BY + dep.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price +/ diff --git a/tpt/ast/04_cbo_troubleshoot_denormalized.sql b/tpt/ast/04_cbo_troubleshoot_denormalized.sql new file mode 100644 index 0000000..9fb0ed2 --- /dev/null +++ b/tpt/ast/04_cbo_troubleshoot_denormalized.sql @@ -0,0 +1,61 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + /*+ opt_param('_optimizer_use_feedback', 'false') + dynamic_sampling(4) opt_param('_optimizer_use_feedback', 'false') + leading(c d e o oi) + use_hash(o) + use_hash(oi) + index(o) + index(oi) + NO_SWAP_JOIN_INPUTS(@"SEL$4B12EFE6" "I"@"SEL$2") + NO_SWAP_JOIN_INPUTS(@"SEL$4B12EFE6" "D"@"SEL$2") + */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + oe.orders o + , oe.order_items oi + , oe.products prod + , oe.customers c + , oe.promotions prom + , hr.employees e + , hr.departments d +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND d.department_id = e.department_id + -- filters +AND d.department_name = 'Sales' +AND e.first_name = 'William' +AND e.last_name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' +AND c.cust_first_name = 'Gena' +AND c.cust_last_name = 'Harris' +AND o.customer_id = 189 -- (select customer_id from oe.customers c2 + -- WHERE c2.cust_first_name = 'Gena' + -- AND c2.cust_last_name = 'Harris') +AND oi.customer_id = 189 -- (select customer_id from oe.customers c3 + -- WHERE c3.cust_first_name = 'Gena' + -- AND c3.cust_last_name = 'Harris') +GROUP BY + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price +/ diff --git a/tpt/ast/04_cbo_troubleshoot_save.sql b/tpt/ast/04_cbo_troubleshoot_save.sql new file mode 100644 index 0000000..678da8f --- /dev/null +++ b/tpt/ast/04_cbo_troubleshoot_save.sql @@ -0,0 +1,49 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT /*+ leading (dep e o) + NO_SWAP_JOIN_INPUTS(@"SEL$5488CC2B" "C"@"MAIN") + opt_param('_optimizer_use_feedback', 'false') + qb_name(main) + */ + dep.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + hr.departments dep -- 1 + , hr.employees e -- 1 + , oe.orders o -- ? + , oe.order_items oi -- ? + , oe.products prod -- 1 + , oe.customers c -- 1 + , oe.promotions prom -- ? +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND dep.department_id = e.department_id + -- filters +AND dep.department_name = 'Sales' -- 1 row +AND e.first_name = 'William' -- 1 row +AND e.last_name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' -- 1 row (view) +AND c.cust_first_name = 'Gena' -- +AND c.cust_last_name = 'Harris' -- 1 row +GROUP BY + dep.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price +/ diff --git a/tpt/ast/04_cbo_troubleshoot_setup.sql b/tpt/ast/04_cbo_troubleshoot_setup.sql new file mode 100644 index 0000000..34ecb9a --- /dev/null +++ b/tpt/ast/04_cbo_troubleshoot_setup.sql @@ -0,0 +1,73 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +INSERT INTO oe.promotions +SELECT 10+rownum promo_id, 'promotion '||to_char(10+rownum) +FROM dual CONNECT BY level < 90 +/ + +INSERT INTO oe.promotions VALUES (100, 'online super-sale'); + +exec dbms_stats.gather_schema_stats('OE'); + +exec dbms_stats.create_stat_table('OE', 'STATS_BACKUP'); + +exec dbms_stats.export_schema_stats('OE', 'STATS_BACKUP', 'AST_04_TROUBLE_01'); + +CREATE TABLE oe.tmp AS SELECT * FROM oe.orders WHERE 1=0; + +INSERT /*+ APPEND */ INTO oe.tmp +SELECT + oe.orders_seq.NEXTVAL + , sysdate -- order date + , 'online' -- order mode + , 189 -- customer id + , 12 -- order status + , 99.95 -- order_total + , 171 -- sales rep + , 100 -- promotion_id + , null -- warehouse_id -- added new column + FROM + dual CONNECT BY level <= 100000 +/ +COMMIT; + +INSERT INTO oe.orders ( + order_id NOT NULL NUMBER(12) + , order_date NOT NULL TIMESTAMP(6) WITH LOCAL TIME ZONE + , order_mode VARCHAR2(8) + , customer_id NOT NULL NUMBER(6) + , order_status NUMBER(2) + , order_total NUMBER(8,2) + , sales_rep_id NUMBER(6) + , promotion_id + , warehouse_id -- added a new column +) +SELECT * FROM oe.tmp +ORDER BY + dbms_random.random -- to increase pk clustering factor +/ + +COMMIT; + +BEGIN + FOR i IN (SELECT order_id FROM oe.tmp) LOOP + -- such a lousy loop is needed as there's a "single row" trigger on order_items tab + INSERT INTO oe.order_items (ORDER_ID,PRODUCT_ID,UNIT_PRICE,QUANTITY) + VALUES ( i.order_id, 3337, 9.95, power(2,power(2,dbms_random.value(1,3))) ); + -- commit in a loop so i wouldnt blow up my little undo tablespace + COMMIT; + END LOOP; +END; +/ + +-- save old "bad" stats +exec dbms_stats.export_schema_stats('OE', 'STATS_BACKUP', 'AST_04_TROUBLE_BEGIN'); +-- to restore: +-- exec dbms_stats.import_schema_stats('OE', 'STATS_BACKUP', 'AST_04_TROUBLE_BEGIN', NO_INVALIDATE=>FALSE); + +-- run the 04_cbo_troubleshoot_1.sql and troubleshoot! :) + + + + diff --git a/tpt/ast/ast_setup.sql b/tpt/ast/ast_setup.sql new file mode 100644 index 0000000..72fd46a --- /dev/null +++ b/tpt/ast/ast_setup.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DEF datafile_dir=/export/home/oracle/oradata/SOL102 + +-- CREATE TABLESPACE ast DATAFILE '&datafile_dir/ast.01.dbf' SIZE 200M AUTOEXTEND ON; +CREATE BIGFILE TABLESPACE ast DATAFILE SIZE 200M AUTOEXTEND ON; + +CREATE USER ast IDENTIFIED BY ast DEFAULT TABLESPACE ast TEMPORARY TABLESPACE temp; + +ALTER USER ast QUOTA UNLIMITED ON ast; + +GRANT CREATE SESSION TO ast; +GRANT CONNECT, RESOURCE TO ast; +GRANT SELECT ANY DICTIONARY TO ast; + +GRANT EXECUTE ON DBMS_LOCK TO ast; +GRANT EXECUTE ON DBMS_MONITOR TO ast; + +GRANT EXECUTE ON DBMS_SQLTUNE TO ast; +GRANT EXECUTE ON DBMS_WORKLOAD_REPOSITORY TO ast; + +-- for testing +GRANT DBA TO ast; + diff --git a/tpt/ast/ast_setup_schema.sql b/tpt/ast/ast_setup_schema.sql new file mode 100644 index 0000000..51dbf5e --- /dev/null +++ b/tpt/ast/ast_setup_schema.sql @@ -0,0 +1,85 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE test_objects; +DROP TABLE test_objects10; +DROP TABLE test_objects100; +DROP TABLE test_users; +DROP TABLE indexed_objects; +DROP TABLE dummy1; +DROP TABLE dummy2; +DROP TABLE indexed_source; + +CREATE TABLE test_objects AS SELECT * FROM dba_objects; +CREATE TABLE test_objects10 AS SELECT * FROM test_objects WHERE rownum <= 10; +CREATE TABLE test_objects100 AS SELECT * FROM test_objects WHERE rownum <= 100; +CREATE TABLE test_users AS SELECT * FROM all_users; + +CREATE TABLE indexed_objects AS SELECT * FROM dba_objects; +CREATE UNIQUE INDEX pk_obj_id ON indexed_objects (object_id); +CREATE INDEX idx_owner_name ON indexed_objects(owner,object_name); + +CREATE TABLE dummy1 AS SELECT 1 a, 'one' b FROM dual; +CREATE TABLE dummy2 AS SELECT 1 a, 'one' b FROM dual; + +CREATE TABLE indexed_source AS SELECT * FROM dba_source; +CREATE INDEX idx1_indexed_source ON indexed_source (owner,name,line); + + +EXEC DBMS_STATS.SET_PARAM('METHOD_OPT', 'FOR ALL COLUMNS SIZE REPEAT'); + +--EXEC DBMS_STATS.GATHER_SCHEMA_STATS('AST'); +EXEC DBMS_STATS.GATHER_SCHEMA_STATS(user); + +-- deterministic PL/SQL functions can utilize PL/SQL function result caching +CREATE OR REPLACE FUNCTION my_multiply(a IN NUMBER, b IN NUMBER) RETURN NUMBER AS +BEGIN + DBMS_OUTPUT.PUT_LINE('x'); + RETURN a * b; +END; +/ + +CREATE OR REPLACE FUNCTION my_multiply_d (a IN NUMBER, b IN NUMBER) RETURN NUMBER + DETERMINISTIC +AS +BEGIN + RETURN a * b; +END; +/ + +CREATE OR REPLACE FUNCTION my_sqrt (a IN NUMBER) RETURN NUMBER +AS +BEGIN + RETURN SQRT(a); +END; +/ + +-- select max(my_sqrt(mod(rownum,100))) from dual connect by level<=100000; +CREATE OR REPLACE FUNCTION my_sqrt_d (a IN NUMBER) RETURN NUMBER + DETERMINISTIC +AS +BEGIN + RETURN SQRT(a); +END; +/ + + + + +-- additional stuff in scott and other standard demo schemas + +create or replace view scott.high_pay_depts as +select + * +from + scott.dept d +where + exists (select 1 + from + scott.emp e + where + e.deptno = d.deptno + and e.sal > 4500 + ) +/ + diff --git a/tpt/ast/execution_plan.txt b/tpt/ast/execution_plan.txt new file mode 100644 index 0000000..2fe39e3 --- /dev/null +++ b/tpt/ast/execution_plan.txt @@ -0,0 +1,224 @@ +---------------------------------------------------------------------------------------------------------------------------------------------------------- +| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | +---------------------------------------------------------------------------------------------------------------------------------------------------------- +| 0 | SELECT STATEMENT | | | | 2121K(100)| | | | +| 1 | SORT ORDER BY | | 3 | 6675 | 2121K (1)| 01:21:11 | | | +|* 2 | HASH JOIN | | 3 | 6675 | 2121K (1)| 01:21:11 | | | +|* 3 | HASH JOIN OUTER | | 1 | 2213 | 2121K (1)| 01:21:11 | | | +| 4 | VIEW | | 1 | 2116 | 2121K (1)| 01:21:11 | | | +| 5 | NESTED LOOPS OUTER | | 1 | 1306 | 2121K (1)| 01:21:11 | | | +| 6 | NESTED LOOPS OUTER | | 1 | 1248 | 2121K (1)| 01:21:11 | | | +| 7 | NESTED LOOPS | | 1 | 1190 | 2121K (1)| 01:21:11 | | | +|* 8 | HASH JOIN | | 1 | 1090 | 2121K (1)| 01:21:11 | | | +| 9 | VIEW | | 7 | 7329 | 2121K (1)| 01:21:11 | | | +| 10 | UNION-ALL | | | | | | | | +| 11 | NESTED LOOPS OUTER | | 1 | 648 | 31348 (2)| 00:01:12 | | | +| 12 | NESTED LOOPS | | 1 | 613 | 31347 (2)| 00:01:12 | | | +| 13 | NESTED LOOPS OUTER | | 1 | 513 | 31346 (2)| 00:01:12 | | | +| 14 | NESTED LOOPS OUTER | | 1 | 475 | 31345 (2)| 00:01:12 | | | +| 15 | NESTED LOOPS OUTER | | 1 | 412 | 31344 (2)| 00:01:12 | | | +| 16 | NESTED LOOPS | | 1 | 312 | 31343 (2)| 00:01:12 | | | +| 17 | VIEW | | 2 | 424 | 31341 (2)| 00:01:12 | | | +| 18 | UNION-ALL | | | | | | | | +| 19 | PARTITION LIST ITERATOR | | 1 | 100 | 18711 (1)| 00:00:43 | KEY | KEY | +| 20 | INLIST ITERATOR | | | | | | | | +|* 21 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_A | 1 | 100 | 18711 (1)| 00:00:43 | KEY | KEY | +|* 22 | INDEX RANGE SCAN | TABLE_A_PK | 335K| | 3751 (2)| 00:00:09 | KEY | KEY | +|* 23 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_B | 1 | 100 | 12628 (2)| 00:00:29 | 1 | 1 | +| 24 | NESTED LOOPS | | 1 | 150 | 12630 (2)| 00:00:29 | | | +| 25 | INLIST ITERATOR | | | | | | | | +|* 26 | TABLE ACCESS BY INDEX ROWID | TABLE_C | 1 | 50 | 1 (0)| 00:00:01 | | | +|* 27 | INDEX RANGE SCAN | TABLE_C_PK | 3 | | 1 (0)| 00:00:01 | | | +| 28 | PARTITION RANGE INLIST | | 36582 | | 6799 (4)| 00:00:16 | KEY(I | KEY(I | +| 29 | PARTITION LIST ITERATOR | | 36582 | | 6799 (4)| 00:00:16 | KEY | KEY | +|* 30 | INDEX RANGE SCAN | TABLE_D_PK | 36582 | | 6799 (4)| 00:00:16 | KEY(I | KEY(I | +| 31 | PARTITION RANGE INLIST | | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 32 | INLIST ITERATOR | | | | | | | | +| 33 | PARTITION LIST ITERATOR | | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|* 34 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_E | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|* 35 | INDEX RANGE SCAN | TABLE_E_PK | 1 | | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 36 | PARTITION RANGE ITERATOR | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +| 37 | PARTITION LIST ITERATOR | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +| 38 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_F | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +|* 39 | INDEX UNIQUE SCAN | TABLE_F_PK | 1 | | 0 (0)| | KEY | KEY | +| 40 | PARTITION RANGE ITERATOR | | 1 | 63 | 1 (0)| 00:00:01 | KEY | KEY | +| 41 | PARTITION LIST ITERATOR | | 1 | 63 | 1 (0)| 00:00:01 | KEY | KEY | +| 42 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_G | 1 | 63 | 1 (0)| 00:00:01 | KEY | KEY | +|* 43 | INDEX UNIQUE SCAN | TABLE_G_PK | 1 | | 0 (0)| | KEY | KEY | +| 44 | PARTITION RANGE ITERATOR | | 1 | 38 | 0 (0)| | KEY | KEY | +| 45 | PARTITION LIST ITERATOR | | 1 | 38 | 0 (0)| | KEY | KEY | +|* 46 | INDEX UNIQUE SCAN | TABLE_H_PK | 1 | 38 | 0 (0)| | KEY | KEY | +| 47 | PARTITION RANGE ITERATOR | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +|* 48 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_I | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +|* 49 | INDEX UNIQUE SCAN | TABLE_I_PK | 1 | | 0 (0)| | KEY | KEY | +| 50 | PARTITION RANGE ITERATOR | | 1 | 35 | 1 (0)| 00:00:01 | KEY | KEY | +| 51 | PARTITION LIST ITERATOR | | 1 | 35 | 1 (0)| 00:00:01 | KEY | KEY | +|* 52 | INDEX RANGE SCAN | TABLE_J_PK | 1 | 35 | 1 (0)| 00:00:01 | KEY | KEY | +| 53 | VIEW | | 2 | 2076 | 2089K (1)| 01:19:58 | | | +| 54 | UNION-ALL | | | | | | | | +| 55 | NESTED LOOPS OUTER | | 1 | 547 | 4574 (91)| 00:00:11 | | | +| 56 | NESTED LOOPS OUTER | | 1 | 447 | 4573 (91)| 00:00:11 | | | +| 57 | NESTED LOOPS OUTER | | 1 | 430 | 4572 (91)| 00:00:11 | | | +| 58 | NESTED LOOPS OUTER | | 1 | 413 | 4572 (91)| 00:00:11 | | | +| 59 | NESTED LOOPS | | 1 | 396 | 4571 (91)| 00:00:11 | | | +| 60 | NESTED LOOPS | | 1 | 300 | 4570 (91)| 00:00:11 | | | +|* 61 | HASH JOIN | | 1 | 200 | 4569 (91)| 00:00:11 | | | +| 62 | INLIST ITERATOR | | | | | | | | +| 63 | PARTITION RANGE ITERATOR | | 1 | 100 | 156 (4)| 00:00:01 | KEY(I | KEY(I | +| 64 | INLIST ITERATOR | | | | | | | | +| 65 | PARTITION LIST ITERATOR | | 1 | 100 | 156 (4)| 00:00:01 | KEY(I | KEY(I | +|* 66 | TABLE ACCESS BY LOCAL INDEX ROWID| TABLE_E | 1 | 100 | 156 (4)| 00:00:01 | KEY(I | KEY(I | +|* 67 | INDEX RANGE SCAN | TABLE_E_UQ | 37 | | 282 (5)| 00:00:01 | KEY(I | KEY(I | +| 68 | PARTITION LIST ALL | | 5 | 500 | 4411 (94)| 00:00:11 | 1 | 26 | +|* 69 | TABLE ACCESS FULL | TABLE_A | 5 | 500 | 4411 (94)| 00:00:11 | 1 | 26 | +| 70 | PARTITION RANGE INLIST | | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|* 71 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_I | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|* 72 | INDEX UNIQUE SCAN | TABLE_I_PK | 1 | | 0 (0)| | KEY(I | KEY(I | +| 73 | TABLE ACCESS BY GLOBAL INDEX ROWID | TABLE_K | 1 | 96 | 1 (0)| 00:00:01 | ROW L | ROW L | +|* 74 | INDEX UNIQUE SCAN | TABLE_K_PK | 1 | | 0 (0)| | | | +| 75 | PARTITION RANGE ITERATOR | | 6 | 102 | 0 (0)| | KEY | KEY | +|* 76 | INDEX UNIQUE SCAN | TABLE_I_PK | 6 | 102 | 0 (0)| | KEY | KEY | +| 77 | PARTITION RANGE ITERATOR | | 6 | 102 | 4 (50)| 00:00:01 | KEY | KEY | +|* 78 | INDEX FAST FULL SCAN | TABLE_I_PK | 6 | 102 | 4 (50)| 00:00:01 | KEY | KEY | +| 79 | PARTITION RANGE ITERATOR | | 6 | 102 | 4 (50)| 00:00:01 | KEY | KEY | +|* 80 | INDEX FAST FULL SCAN | TABLE_I_PK | 6 | 102 | 4 (50)| 00:00:01 | KEY | KEY | +| 81 | PARTITION RANGE ITERATOR | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +| 82 | PARTITION LIST ITERATOR | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +| 83 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_L | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +|* 84 | INDEX UNIQUE SCAN | TABLE_L_PK | 1 | | 0 (0)| | KEY | KEY | +| 85 | NESTED LOOPS OUTER | | 1 | 570 | 2085K (1)| 01:19:48 | | | +| 86 | NESTED LOOPS OUTER | | 1 | 470 | 2085K (1)| 01:19:48 | | | +| 87 | NESTED LOOPS OUTER | | 1 | 453 | 2085K (1)| 01:19:48 | | | +| 88 | NESTED LOOPS OUTER | | 1 | 436 | 2085K (1)| 01:19:48 | | | +| 89 | NESTED LOOPS | | 1 | 419 | 2085K (1)| 01:19:48 | | | +| 90 | NESTED LOOPS | | 1 | 323 | 2085K (1)| 01:19:48 | | | +| 91 | NESTED LOOPS | | 1 | 223 | 2085K (1)| 01:19:48 | | | +| 92 | NESTED LOOPS | | 55 | 6765 | 2085K (1)| 01:19:48 | | | +| 93 | INLIST ITERATOR | | | | | | | | +|* 94 | INDEX RANGE SCAN | TABLE_C_PK | 89 | 2047 | 1 (0)| 00:00:01 | | | +| 95 | INLIST ITERATOR | | | | | | | | +| 96 | PARTITION RANGE ITERATOR | | 1 | 100 | 23427 (1)| 00:00:54 | KEY(I | KEY(I | +| 97 | PARTITION LIST INLIST | | 1 | 100 | 23427 (1)| 00:00:54 | KEY(I | KEY(I | +|* 98 | TABLE ACCESS BY LOCAL INDEX ROWID| TABLE_E | 1 | 100 | 23427 (1)| 00:00:54 | KEY(I | KEY(I | +|* 99 | INDEX RANGE SCAN | TABLE_E_PK | 60462 | | 748 (8)| 00:00:02 | KEY(I | KEY(I | +| 100 | PARTITION RANGE INLIST | | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 101 | PARTITION LIST ITERATOR | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +|*102 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_B | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|*103 | INDEX RANGE SCAN | TABLE_D_PK | 1 | | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 104 | PARTITION RANGE INLIST | | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|*105 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_I | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|*106 | INDEX UNIQUE SCAN | TABLE_I_PK | 1 | | 0 (0)| | KEY(I | KEY(I | +| 107 | TABLE ACCESS BY GLOBAL INDEX ROWID | TABLE_K | 1 | 96 | 1 (0)| 00:00:01 | ROW L | ROW L | +|*108 | INDEX UNIQUE SCAN | TABLE_K_PK | 1 | | 0 (0)| | | | +| 109 | PARTITION RANGE ITERATOR | | 6 | 102 | 0 (0)| | KEY | KEY | +|*110 | INDEX UNIQUE SCAN | TABLE_I_PK | 6 | 102 | 0 (0)| | KEY | KEY | +| 111 | PARTITION RANGE ITERATOR | | 6 | 102 | 4 (50)| 00:00:01 | KEY | KEY | +|*112 | INDEX FAST FULL SCAN | TABLE_I_PK | 6 | 102 | 4 (50)| 00:00:01 | KEY | KEY | +| 113 | PARTITION RANGE ITERATOR | | 6 | 102 | 4 (50)| 00:00:01 | KEY | KEY | +|*114 | INDEX FAST FULL SCAN | TABLE_I_PK | 6 | 102 | 4 (50)| 00:00:01 | KEY | KEY | +| 115 | PARTITION RANGE ITERATOR | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +| 116 | PARTITION LIST ITERATOR | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +| 117 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_L | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +|*118 | INDEX UNIQUE SCAN | TABLE_L_PK | 1 | | 0 (0)| | KEY | KEY | +| 119 | VIEW | | 2 | 2054 | 147 (2)| 00:00:01 | | | +| 120 | UNION-ALL | | | | | | | | +| 121 | NESTED LOOPS | | 1 | 362 | 74 (2)| 00:00:01 | | | +| 122 | NESTED LOOPS | | 1 | 262 | 73 (2)| 00:00:01 | | | +| 123 | NESTED LOOPS | | 1 | 200 | 72 (2)| 00:00:01 | | | +| 124 | INLIST ITERATOR | | | | | | | | +| 125 | PARTITION RANGE ITERATOR | | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +| 126 | INLIST ITERATOR | | | | | | | | +| 127 | PARTITION LIST ITERATOR | | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +|*128 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_E | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +|*129 | INDEX RANGE SCAN | TABLE_E_UQ | 6 | | 137 (2)| 00:00:01 | KEY(I | KEY(I | +| 130 | PARTITION RANGE INLIST | | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 131 | PARTITION LIST ALL | | 1 | 100 | 1 (0)| 00:00:01 | 1 | 9 | +|*132 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_B | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|*133 | INDEX RANGE SCAN | TABLE_D_PK | 1 | | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 134 | TABLE ACCESS BY GLOBAL INDEX ROWID | TABLE_K | 1 | 62 | 1 (0)| 00:00:01 | ROW L | ROW L | +|*135 | INDEX UNIQUE SCAN | TABLE_K_PK | 1 | | 0 (0)| | | | +| 136 | PARTITION RANGE INLIST | | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|*137 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_I | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|*138 | INDEX UNIQUE SCAN | TABLE_I_PK | 1 | | 0 (0)| | KEY(I | KEY(I | +|*139 | FILTER | | | | | | | | +|*140 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_B | 1 | 100 | 1 (0)| 00:00:01 | 1 | 1 | +| 141 | NESTED LOOPS | | 1 | 200 | 72 (2)| 00:00:01 | | | +| 142 | INLIST ITERATOR | | | | | | | | +| 143 | PARTITION RANGE ITERATOR | | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +| 144 | INLIST ITERATOR | | | | | | | | +| 145 | PARTITION LIST ITERATOR | | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +|*146 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_E | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +|*147 | INDEX RANGE SCAN | TABLE_E_UQ | 6 | | 137 (2)| 00:00:01 | KEY(I | KEY(I | +| 148 | PARTITION RANGE INLIST | | 1 | | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 149 | PARTITION LIST ALL | | 1 | | 1 (0)| 00:00:01 | 1 | 9 | +|*150 | INDEX RANGE SCAN | TABLE_D_PK | 1 | | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 151 | NESTED LOOPS OUTER | | 1 | 426 | 76 (2)| 00:00:01 | | | +| 152 | NESTED LOOPS | | 1 | 358 | 75 (2)| 00:00:01 | | | +| 153 | NESTED LOOPS OUTER | | 1 | 313 | 74 (2)| 00:00:01 | | | +| 154 | NESTED LOOPS OUTER | | 1 | 275 | 73 (2)| 00:00:01 | | | +| 155 | NESTED LOOPS | | 1 | 200 | 72 (2)| 00:00:01 | | | +| 156 | INLIST ITERATOR | | | | | | | | +| 157 | PARTITION RANGE ITERATOR | | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +| 158 | INLIST ITERATOR | | | | | | | | +| 159 | PARTITION LIST ITERATOR | | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +|*160 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_E | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +|*161 | INDEX RANGE SCAN | TABLE_E_UQ | 6 | | 137 (2)| 00:00:01 | KEY(I | KEY(I | +| 162 | PARTITION RANGE INLIST | | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 163 | PARTITION LIST SINGLE | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +|*164 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_B | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|*165 | INDEX RANGE SCAN | TABLE_D_PK | 1 | | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 166 | PARTITION RANGE ITERATOR | | 1 | 75 | 1 (0)| 00:00:01 | KEY | KEY | +| 167 | PARTITION LIST ITERATOR | | 1 | 75 | 1 (0)| 00:00:01 | KEY | KEY | +| 168 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_G | 1 | 75 | 1 (0)| 00:00:01 | KEY | KEY | +|*169 | INDEX UNIQUE SCAN | TABLE_G_PK | 1 | | 0 (0)| | KEY | KEY | +| 170 | PARTITION RANGE ITERATOR | | 1 | 38 | 0 (0)| | KEY | KEY | +| 171 | PARTITION LIST ITERATOR | | 1 | 38 | 0 (0)| | KEY | KEY | +|*172 | INDEX UNIQUE SCAN | TABLE_H_PK | 1 | 38 | 0 (0)| | KEY | KEY | +| 173 | PARTITION RANGE ITERATOR | | 1 | 45 | 1 (0)| 00:00:01 | KEY | KEY | +|*174 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_I | 1 | 45 | 1 (0)| 00:00:01 | KEY | KEY | +|*175 | INDEX UNIQUE SCAN | TABLE_I_PK | 1 | | 0 (0)| | KEY | KEY | +| 176 | PARTITION RANGE ITERATOR | | 1 | 68 | 1 (0)| 00:00:01 | KEY | KEY | +| 177 | PARTITION LIST SINGLE | | 1 | 68 | 1 (0)| 00:00:01 | | | +| 178 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_F | 1 | 68 | 1 (0)| 00:00:01 | KEY | KEY | +|*179 | INDEX UNIQUE SCAN | TABLE_F_PK | 1 | | 0 (0)| | KEY | KEY | +| 180 | NESTED LOOPS OUTER | | 1 | 423 | 76 (2)| 00:00:01 | | | +| 181 | NESTED LOOPS | | 1 | 355 | 75 (2)| 00:00:01 | | | +| 182 | NESTED LOOPS OUTER | | 1 | 310 | 74 (2)| 00:00:01 | | | +| 183 | NESTED LOOPS OUTER | | 1 | 272 | 73 (2)| 00:00:01 | | | +| 184 | NESTED LOOPS | | 1 | 200 | 72 (2)| 00:00:01 | | | +| 185 | INLIST ITERATOR | | | | | | | | +| 186 | PARTITION RANGE ITERATOR | | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +| 187 | INLIST ITERATOR | | | | | | | | +| 188 | PARTITION LIST ITERATOR | | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +|*189 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_E | 1 | 100 | 71 (2)| 00:00:01 | KEY(I | KEY(I | +|*190 | INDEX RANGE SCAN | TABLE_E_UQ | 6 | | 137 (2)| 00:00:01 | KEY(I | KEY(I | +| 191 | PARTITION RANGE INLIST | | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 192 | PARTITION LIST SINGLE | | 1 | 100 | 1 (0)| 00:00:01 | KEY | KEY | +|*193 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_B | 1 | 100 | 1 (0)| 00:00:01 | KEY(I | KEY(I | +|*194 | INDEX RANGE SCAN | TABLE_D_PK | 1 | | 1 (0)| 00:00:01 | KEY(I | KEY(I | +| 195 | PARTITION RANGE ITERATOR | | 1 | 72 | 1 (0)| 00:00:01 | KEY | KEY | +| 196 | PARTITION LIST ITERATOR | | 1 | 72 | 1 (0)| 00:00:01 | KEY | KEY | +| 197 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_G | 1 | 72 | 1 (0)| 00:00:01 | KEY | KEY | +|*198 | INDEX UNIQUE SCAN | TABLE_G_PK | 1 | | 0 (0)| | KEY | KEY | +| 199 | PARTITION RANGE ITERATOR | | 1 | 38 | 0 (0)| | KEY | KEY | +| 200 | PARTITION LIST ITERATOR | | 1 | 38 | 0 (0)| | KEY | KEY | +|*201 | INDEX UNIQUE SCAN | TABLE_H_PK | 1 | 38 | 0 (0)| | KEY | KEY | +| 202 | PARTITION RANGE ITERATOR | | 1 | 45 | 1 (0)| 00:00:01 | KEY | KEY | +|*203 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_I | 1 | 45 | 1 (0)| 00:00:01 | KEY | KEY | +|*204 | INDEX UNIQUE SCAN | TABLE_I_PK | 1 | | 0 (0)| | KEY | KEY | +| 205 | PARTITION RANGE ITERATOR | | 1 | 68 | 1 (0)| 00:00:01 | KEY | KEY | +| 206 | PARTITION LIST SINGLE | | 1 | 68 | 1 (0)| 00:00:01 | | | +| 207 | TABLE ACCESS BY LOCAL INDEX ROWID | TABLE_F | 1 | 68 | 1 (0)| 00:00:01 | KEY | KEY | +|*208 | INDEX UNIQUE SCAN | TABLE_F_PK | 1 | | 0 (0)| | KEY | KEY | +| 209 | TABLE ACCESS FULL | TABLE_M | 252 | 10836 | 2 (0)| 00:00:01 | | | +| 210 | TABLE ACCESS BY INDEX ROWID | TABLE_N | 1 | 100 | 1 (0)| 00:00:01 | | | +|*211 | INDEX UNIQUE SCAN | TABLE_N_PK | 1 | | 0 (0)| | | | +| 212 | TABLE ACCESS BY INDEX ROWID | TABLE_O | 1 | 58 | 1 (0)| 00:00:01 | | | +|*213 | INDEX RANGE SCAN | TABLE_O_PK | 1 | | 0 (0)| | | | +| 214 | TABLE ACCESS BY INDEX ROWID | TABLE_P | 1 | 58 | 1 (0)| 00:00:01 | | | +|*215 | INDEX RANGE SCAN | TABLE_P_IDX | 1 | | 0 (0)| | | | +| 216 | TABLE ACCESS FULL | TABLE_Q | 227 | 22019 | 2 (0)| 00:00:01 | | | +| 217 | VIEW | | 252 | 3024 | 3 (34)| 00:00:01 | | | +| 218 | SORT UNIQUE | | 252 | 3024 | 3 (34)| 00:00:01 | | | +| 219 | TABLE ACCESS FULL | TABLE_M | 252 | 3024 | 2 (0)| 00:00:01 | | | +---------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/tpt/ast/index_coalesce_candidate.sql b/tpt/ast/index_coalesce_candidate.sql new file mode 100644 index 0000000..280c318 --- /dev/null +++ b/tpt/ast/index_coalesce_candidate.sql @@ -0,0 +1,100 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 1000 PAGES 5000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +COL owner FOR A15 +COL object_name FOR A30 + +WITH trends AS ( + SELECT + o.owner + , o.object_name + , o.subobject_name + , o.object_type + , MIN(ih.savtime) first_sample + , MAX(ih.savtime) last_sample + , REGR_SLOPE(ih.rowcnt / NULLIF(ih.leafcnt,0), (SYSDATE-CAST(ih.savtime AS DATE)) ) regr1 + , REGR_SLOPE(ih.rowcnt, ih.leafcnt) regr2 + , ROUND(MIN(ih.rowcnt / NULLIF(ih.leafcnt,0))) min_avg_rows_per_block + , ROUND(MAX(ih.rowcnt / NULLIF(ih.leafcnt,0))) max_avg_rows_per_block + , MIN(ih.rowcnt) min_rowcnt + , MAX(ih.rowcnt) max_rowcnt + , MIN(ih.leafcnt) min_leafcnt + , MAX(ih.leafcnt) max_leafcnt + , MIN(ih.lblkkey) min_lblkkey + , MAX(ih.lblkkey) max_lblkkey + , MIN(ih.dblkkey) min_dblkkey + , MAX(ih.dblkkey) max_dblkkey + , MIN(ih.blevel)+1 min_height + , MAX(ih.blevel)+1 max_height + FROM + dba_objects o + , sys.wri$_optstat_ind_history ih + WHERE + o.object_id = ih.obj# + AND o.object_type LIKE 'INDEX%' + AND ( + UPPER(o.object_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) + AND UPPER(o.owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END + ) + GROUP BY + o.owner + , o.object_name + , o.subobject_name + , o.object_type + ORDER BY + -- ih.savtime + regr1 DESC NULLS LAST +) +SELECT * FROM ( + SELECT + t.owner + , t.object_name + , t.subobject_name partition_name + , t.object_type + , ROUND(s.bytes / 1048576) current_mb + , CAST(first_sample AS DATE) first_sample + , CAST(last_sample AS DATE) last_sample + , min_avg_rows_per_block + , max_avg_rows_per_block + , min_leafcnt + , max_leafcnt + , min_lblkkey + , max_lblkkey + , min_dblkkey + , max_dblkkey + , t.regr1 + , t.regr2 + --, ROUND(SUM(s.bytes) / 1048576) mb_sum + --, COUNT(*) + FROM + trends t + , dba_segments s + WHERE + t.owner = s.owner + AND t.object_name = s.segment_name + AND t.object_type = s.segment_type + AND (t.subobject_name = s.partition_name OR (t.subobject_name IS NULL AND s.partition_name IS NULL)) + --GROUP BY + -- t.owner + -- , t.object_name + -- , t.object_type + -- , t.subobject_name + ORDER BY regr1 DESC NULLS LAST +) +WHERE + ROWNUM<=20 +/ diff --git a/tpt/ast/index_coalesce_candidate_detail.sql b/tpt/ast/index_coalesce_candidate_detail.sql new file mode 100644 index 0000000..7a73ebc --- /dev/null +++ b/tpt/ast/index_coalesce_candidate_detail.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL owner FOR A15 +COL object_name FOR A30 + +SELECT + o.owner + , o.object_name + , o.object_type + , ROUND(ih.rowcnt / NULLIF(ih.leafcnt,0)) avg_rows_per_block + , ih.rowcnt + , ih.leafcnt + , ih.lblkkey + , ih.dblkkey + , ih.blevel +FROM + dba_objects o + , sys.wri$_optstat_ind_history ih +WHERE + o.object_id = ih.obj# +AND o.object_type LIKE 'INDEX%' +AND o.object_name LIKE '&1' +ORDER BY + ih.savtime +/ diff --git a/tpt/ast/index_compress_candidate.sql b/tpt/ast/index_compress_candidate.sql new file mode 100644 index 0000000..69133eb --- /dev/null +++ b/tpt/ast/index_compress_candidate.sql @@ -0,0 +1,9 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + i.index_name + + +FROM + diff --git a/tpt/ast/index_range_scan_rereads.sql b/tpt/ast/index_range_scan_rereads.sql new file mode 100644 index 0000000..1438886 --- /dev/null +++ b/tpt/ast/index_range_scan_rereads.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- enable physical IO tracing + +@seg soe.orders +@ind soe.orders +@descxx soe.orders + +ALTER SESSION SET EVENTS '10298 trace name context forever, level 1'; +EXEC SYS.DBMS_MONITOR.SESSION_TRACE_ENABLE(waits=>TRUE); + +SET TIMING ON +SET AUTOTRACE ON STAT + +PAUSE Press enter to start... +SELECT /*+ MONITOR INDEX(o, o(warehouse_id)) */ SUM(order_total) FROM soe.orders o WHERE warehouse_id BETWEEN 400 AND 599; + +SET AUTOTRACE OFF + diff --git a/tpt/ast/new_outer_join_and_or.sql b/tpt/ast/new_outer_join_and_or.sql new file mode 100644 index 0000000..4d42558 --- /dev/null +++ b/tpt/ast/new_outer_join_and_or.sql @@ -0,0 +1,52 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- DROP TABLE s; +-- DROP TABLE t; +-- +-- CREATE TABLE s AS SELECT * FROM dba_segments; +-- CREATE TABLE t AS SELECT * FROM dba_tables; +-- +-- SET TIMING ON + +-- SELECT COUNT(*) +-- FROM +-- t +-- , s +-- WHERE +-- (t.owner = s.owner AND t.table_name = s.segment_name) +-- OR (t.owner = s.owner AND UPPER(t.table_name) = UPPER(s.segment_name)) +-- / +-- +-- @x + +SELECT + /*+ + ALL_ROWS + MERGE(@"SEL$2") + FULL(@"SEL$64EAE176" "T"@"SEL$2") + NO_ACCESS(@"SEL$64EAE176" "from$_subquery$_004"@"SEL$2") + LEADING(@"SEL$64EAE176" "T"@"SEL$2" "from$_subquery$_004"@"SEL$2") + USE_HASH(@"SEL$64EAE176" "from$_subquery$_004"@"SEL$2") + FULL(@"SEL$1" "S"@"SEL$1") + */ + COUNT(*) +FROM + t + LEFT OUTER JOIN + s +ON ( + (t.owner = s.owner AND t.table_name = s.segment_name) + OR (t.owner = s.owner AND UPPER(t.table_name) = UPPER(s.segment_name)) +); + +-- @x + +-- SELECT COUNT(*) FROM ( +-- SELECT * FROM t LEFT JOIN s ON (t.owner = s.owner AND t.table_name = s.segment_name) +-- UNION +-- SELECT * FROM t LEFT JOIN s ON (t.owner = s.owner AND UPPER(t.table_name) = UPPER(s.segment_name)) +-- ); +-- +-- @x + diff --git a/tpt/ast/scalar_subquery_in_where_clause.sql b/tpt/ast/scalar_subquery_in_where_clause.sql new file mode 100644 index 0000000..7a32399 --- /dev/null +++ b/tpt/ast/scalar_subquery_in_where_clause.sql @@ -0,0 +1,72 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- A-Times were misestimated with the default sampling +-- ALTER SESSION SET "_rowsource_statistics_sampfreq"=1; +ALTER SESSION SET "_serial_direct_read"=ALWAYS; + +SELECT /*+ MONITOR test2a */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ +@getprev +@xpi &prev_sql_id +@xia &prev_sql_id &prev_child_number + +-- @ash/asqlmon &prev_sql_id &prev_child_number +-- @sqlidx &prev_sql_id &prev_child_number + +SELECT /*+ MONITOR NO_PUSH_SUBQ(@"SEL$2") test2b */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ +@getprev +-- @ash/asqlmon &prev_sql_id &prev_child_number +-- @sqlidx &prev_sql_id &prev_child_number +@xpi &prev_sql_id +@xia &prev_sql_id &prev_child_number + +-- ALTER SESSION SET "_rowsource_statistics_sampfreq"=128; + + +SELECT /*+ MONITOR OPT_PARAM('cell_offload_processing', 'false') test3a */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ + +SELECT /*+ MONITOR NO_PUSH_SUBQ(@"SEL$2") OPT_PARAM('cell_offload_processing', 'false') test3b */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ + + +SELECT /*+ MONITOR PUSH_SUBQ(@"SEL$2") OPT_PARAM('cell_offload_processing', 'true') test4a */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ + +SELECT /*+ MONITOR NO_PUSH_SUBQ(@"SEL$2") OPT_PARAM('cell_offload_processing', 'true') test4b */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ + + + diff --git a/tpt/ast/scalar_subquery_unnesting.sql b/tpt/ast/scalar_subquery_unnesting.sql new file mode 100644 index 0000000..cb6cf1e --- /dev/null +++ b/tpt/ast/scalar_subquery_unnesting.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- DROP TABLE test_users; +-- DROP TABLE test_objects; +CREATE TABLE test_users AS SELECT * FROM all_users; +CREATE TABLE test_objects AS SELECT * FROM all_objects; +@gts test_users +@gts test_objects + +@53on + +SELECT /*+ GATHER_PLAN_STATISTICS */ + u.username + , (SELECT MAX(created) FROM test_objects o WHERE o.owner = u.username) +FROM + test_users u +WHERE + username LIKE 'S%' +/ + +@53off +@xall +@53on + +-- ALTER SESSION SET "_optimizer_unnest_scalar_sq" = FALSE; + +SELECT /*+ GATHER_PLAN_STATISTICS NO_UNNEST(@ssq) */ + u.username + , (SELECT /*+ QB_NAME(ssq) */ MAX(created) FROM test_objects o WHERE o.owner = u.username) +FROM + test_users u +WHERE + username LIKE 'S%' +/ + +@53off +@xall + diff --git a/tpt/ast/soe_query.sql b/tpt/ast/soe_query.sql new file mode 100644 index 0000000..24d273b --- /dev/null +++ b/tpt/ast/soe_query.sql @@ -0,0 +1,55 @@ +------------------------------------------------------------------------------ +-- +-- Copyright 2017 Tanel Poder ( tanel@tanelpoder.com | http://tanelpoder.com ) +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +------------------------------------------------------------------------------ + +ALTER SESSION SET plsql_optimize_level = 0; + +DECLARE + n NUMBER; +BEGIN + FOR i IN 1 .. &1 LOOP + n := DBMS_RANDOM.VALUE; + EXECUTE IMMEDIATE q'[SELECT + prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price + FROM + soe.orders o + , soe.order_items oi + , soe.products prod + , soe.customers c + WHERE + -- joins + o.order_id = oi.order_id + AND oi.product_id = prod.product_id + AND o.customer_id = c.customer_id + -- filters + AND prod.product_name = 'Mobile Web Phone'||:v + AND LOWER(c.cust_first_name) = LOWER('Gena'||:v) + AND LOWER(c.cust_last_name) = LOWER('Harris'||:v) + GROUP BY + prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price]' + USING n, n, n; + END LOOP; +END LOOP; +/ diff --git a/tpt/ast/subquery_execution.sql b/tpt/ast/subquery_execution.sql new file mode 100644 index 0000000..a693872 --- /dev/null +++ b/tpt/ast/subquery_execution.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- starting from 10g, the push_subq hint must be specified in the subquery block +-- you wish to push earlier (or with the @subq hint addressing) + +select + e.* + , d.dname +from + scott.emp e + , scott.dept d +where + e.deptno = d.deptno +and exists ( + select /*+ no_unnest push_subq */ + 1 + from + scott.bonus b + where + b.ename = e.ename + and b.job = e.job +) +/ + diff --git a/tpt/ast/test_index_coalesce_candidate.sql b/tpt/ast/test_index_coalesce_candidate.sql new file mode 100644 index 0000000..b5f9647 --- /dev/null +++ b/tpt/ast/test_index_coalesce_candidate.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE tcoal; +DROP SEQUENCE scoal; +CREATE TABLE tcoal (id NUMBER, a VARCHAR2(100), b VARCHAR2(100)) TABLESPACE users; +CREATE INDEX icoal1 ON tcoal(id) TABLESPACE users; +CREATE INDEX icoal2 ON tcoal(id,a) TABLESPACE users; +CREATE INDEX icoal3 ON tcoal(b) TABLESPACE users; +CREATE SEQUENCE scoal CACHE 10000; + +BEGIN FOR i IN 1..100 LOOP + INSERT INTO tcoal SELECT scoal.NEXTVAL, DBMS_RANDOM.STRING('a', 20), DBMS_RANDOM.STRING('a', 20) + FROM dual CONNECT BY LEVEL <= 10000; + COMMIT; + DBMS_STATS.GATHER_INDEX_STATS(user, 'ICOAL1'); + DBMS_STATS.GATHER_INDEX_STATS(user, 'ICOAL2'); + DBMS_STATS.GATHER_INDEX_STATS(user, 'ICOAL3'); +END LOOP; END; +/ + +BEGIN FOR i in 1..100 LOOP + DELETE FROM tcoal WHERE MOD(id,100)!=0 AND rownum <= 10000; + INSERT INTO tcoal SELECT scoal.NEXTVAL, DBMS_RANDOM.STRING('a', 20), DBMS_RANDOM.STRING('a', 20) + FROM dual CONNECT BY LEVEL <= 10000; + + DBMS_STATS.GATHER_INDEX_STATS(user, 'ICOAL1'); + DBMS_STATS.GATHER_INDEX_STATS(user, 'ICOAL2'); + DBMS_STATS.GATHER_INDEX_STATS(user, 'ICOAL3'); +END LOOP; END; +/ + diff --git a/tpt/ast/test_plan.txt b/tpt/ast/test_plan.txt new file mode 100644 index 0000000..c6e1699 --- /dev/null +++ b/tpt/ast/test_plan.txt @@ -0,0 +1,116 @@ +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | Writes | OMem | 1Mem | Used-Mem | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +| 0 | SELECT STATEMENT | | 1 | | 2 |00:00:06.65 | 50499 | 2086 | 1041 | | | | +| 1 | TEMP TABLE TRANSFORMATION | | 1 | | 2 |00:00:06.65 | 50499 | 2086 | 1041 | | | | +| 2 | LOAD AS SELECT | | 1 | | 0 |00:00:06.32 | 48405 | 2 | 1041 | 530K| 530K| 530K (0)| +|* 3 | TABLE ACCESS BY INDEX ROWID | SUM$ | 3 | 1 | 0 |00:00:00.01 | 3 | 0 | 0 | | | | +|* 4 | INDEX UNIQUE SCAN | I_SUM$_1 | 3 | 1 | 3 |00:00:00.01 | 2 | 0 | 0 | | | | +| 5 | TABLE ACCESS BY INDEX ROWID | OBJ$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 6 | INDEX RANGE SCAN | I_OBJ1 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 7 | FILTER | | 1 | | 73027 |00:00:05.77 | 47342 | 2 | 0 | | | | +|* 8 | HASH JOIN | | 1 | 74860 | 74936 |00:00:00.79 | 948 | 0 | 0 | 1063K| 1063K| 1234K (0)| +| 9 | TABLE ACCESS FULL | USER$ | 1 | 104 | 104 |00:00:00.01 | 7 | 0 | 0 | | | | +|* 10 | HASH JOIN | | 1 | 74860 | 74936 |00:00:00.51 | 941 | 0 | 0 | 981K| 981K| 1254K (0)| +| 11 | INDEX FULL SCAN | I_USER2 | 1 | 104 | 104 |00:00:00.01 | 1 | 0 | 0 | | | | +|* 12 | TABLE ACCESS FULL | OBJ$ | 1 | 74860 | 74936 |00:00:00.18 | 940 | 0 | 0 | | | | +|* 13 | TABLE ACCESS BY INDEX ROWID | IND$ | 4995 | 1 | 4087 |00:00:00.04 | 933 | 0 | 0 | | | | +|* 14 | INDEX UNIQUE SCAN | I_IND1 | 4995 | 1 | 4995 |00:00:00.01 | 134 | 0 | 0 | | | | +|* 15 | HASH JOIN | | 25955 | 1 | 24502 |00:00:03.60 | 26661 | 0 | 0 | 981K| 981K| 1051K (0)| +|* 16 | INDEX RANGE SCAN | I_OBJAUTH1 | 25955 | 1 | 24747 |00:00:00.19 | 26661 | 0 | 0 | | | | +| 17 | FIXED TABLE FULL | X$KZSRO | 24589 | 100 | 27424 |00:00:00.18 | 0 | 0 | 0 | | | | +|* 18 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 19 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +| 20 | NESTED LOOPS | | 1645 | 1 | 96 |00:00:00.01 | 1865 | 0 | 0 | | | | +|* 21 | INDEX RANGE SCAN | I_OBJAUTH1 | 1645 | 1 | 133 |00:00:00.01 | 1865 | 0 | 0 | | | | +|* 22 | FIXED TABLE FULL | X$KZSRO | 133 | 1 | 96 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 23 | HASH JOIN | | 2845 | 1 | 1478 |00:00:00.48 | 3051 | 0 | 0 | 990K| 990K| 485K (0)| +|* 24 | INDEX RANGE SCAN | I_OBJAUTH1 | 2845 | 1 | 1551 |00:00:00.02 | 3051 | 0 | 0 | | | | +| 25 | FIXED TABLE FULL | X$KZSRO | 1493 | 100 | 1853 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 26 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +| 27 | NESTED LOOPS | | 1255 | | 0 |00:00:00.35 | 7429 | 0 | 0 | | | | +| 28 | NESTED LOOPS | | 1255 | 1 | 0 |00:00:00.35 | 7429 | 0 | 0 | | | | +| 29 | NESTED LOOPS | | 1255 | 1 | 0 |00:00:00.35 | 7429 | 0 | 0 | | | | +| 30 | NESTED LOOPS | | 1255 | 1 | 28865 |00:00:00.25 | 4702 | 0 | 0 | | | | +| 31 | MERGE JOIN CARTESIAN | | 1255 | 1 | 28865 |00:00:00.12 | 3445 | 0 | 0 | | | | +|* 32 | INDEX RANGE SCAN | I_OBJ5 | 1255 | 1 | 1255 |00:00:00.01 | 3445 | 0 | 0 | | | | +| 33 | BUFFER SORT | | 1255 | 100 | 28865 |00:00:00.07 | 0 | 0 | 0 | 2048 | 2048 | 2048 (0)| +| 34 | FIXED TABLE FULL | X$KZSRO | 1255 | 100 | 28865 |00:00:00.03 | 0 | 0 | 0 | | | | +|* 35 | INDEX RANGE SCAN | I_USER2 | 28865 | 1 | 28865 |00:00:00.07 | 1257 | 0 | 0 | | | | +|* 36 | INDEX RANGE SCAN | I_OBJAUTH1 | 28865 | 1 | 0 |00:00:00.06 | 2727 | 0 | 0 | | | | +|* 37 | INDEX RANGE SCAN | I_DEPENDENCY1 | 0 | 3 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 38 | TABLE ACCESS BY INDEX ROWID | DEPENDENCY$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 39 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +| 40 | NESTED LOOPS | | 617 | 1 | 7 |00:00:00.01 | 1923 | 0 | 0 | | | | +| 41 | NESTED LOOPS | | 617 | 1 | 19 |00:00:00.01 | 1923 | 0 | 0 | | | | +|* 42 | TABLE ACCESS BY INDEX ROWID | TRIGGER$ | 617 | 1 | 592 |00:00:00.01 | 1245 | 0 | 0 | | | | +|* 43 | INDEX UNIQUE SCAN | I_TRIGGER2 | 617 | 1 | 617 |00:00:00.01 | 628 | 0 | 0 | | | | +|* 44 | INDEX RANGE SCAN | I_OBJAUTH1 | 592 | 1 | 19 |00:00:00.01 | 678 | 0 | 0 | | | | +|* 45 | FIXED TABLE FULL | X$KZSRO | 19 | 1 | 7 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 46 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +| 47 | NESTED LOOPS | | 240 | | 0 |00:00:00.07 | 1471 | 0 | 0 | | | | +| 48 | NESTED LOOPS | | 240 | 1 | 0 |00:00:00.07 | 1471 | 0 | 0 | | | | +| 49 | NESTED LOOPS | | 240 | 1 | 0 |00:00:00.07 | 1471 | 0 | 0 | | | | +| 50 | NESTED LOOPS | | 240 | 1 | 5727 |00:00:00.05 | 926 | 0 | 0 | | | | +| 51 | MERGE JOIN CARTESIAN | | 240 | 1 | 5727 |00:00:00.02 | 684 | 0 | 0 | | | | +|* 52 | INDEX RANGE SCAN | I_OBJ5 | 240 | 1 | 249 |00:00:00.01 | 684 | 0 | 0 | | | | +| 53 | BUFFER SORT | | 249 | 100 | 5727 |00:00:00.01 | 0 | 0 | 0 | 2048 | 2048 | 2048 (0)| +| 54 | FIXED TABLE FULL | X$KZSRO | 240 | 100 | 5520 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 55 | INDEX RANGE SCAN | I_USER2 | 5727 | 1 | 5727 |00:00:00.01 | 242 | 0 | 0 | | | | +|* 56 | INDEX RANGE SCAN | I_OBJAUTH1 | 5727 | 1 | 0 |00:00:00.01 | 545 | 0 | 0 | | | | +|* 57 | INDEX RANGE SCAN | I_DEPENDENCY1 | 0 | 3 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 58 | TABLE ACCESS BY INDEX ROWID | DEPENDENCY$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 59 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 60 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 61 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 62 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 63 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 64 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 65 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 66 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 67 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +| 68 | VIEW | | 52 | 1 | 52 |00:00:00.01 | 0 | 0 | 0 | | | | +| 69 | FAST DUAL | | 52 | 1 | 52 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 70 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 71 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 72 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 73 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 74 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 75 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 76 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 77 | FIXED TABLE FULL | X$KZSPR | 1 | 1 | 1 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 78 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 79 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 80 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 81 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +| 82 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 83 | INDEX RANGE SCAN | I_OBJAUTH1 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 84 | FIXED TABLE FULL | X$KZSRO | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 85 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +| 86 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 87 | INDEX RANGE SCAN | I_OBJAUTH1 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 88 | FIXED TABLE FULL | X$KZSRO | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 89 | FIXED TABLE FULL | X$KZSPR | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +| 90 | VIEW | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +| 91 | SORT GROUP BY | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | 73728 | 73728 | | +| 92 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +| 93 | MERGE JOIN CARTESIAN | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +| 94 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 95 | INDEX UNIQUE SCAN | I_OLAP_CUBES$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 96 | TABLE ACCESS BY INDEX ROWID| OLAP_DIMENSIONALITY$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|* 97 | INDEX RANGE SCAN | I_OLAP_DIMENSIONALITY$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +| 98 | BUFFER SORT | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | 73728 | 73728 | | +| 99 | INDEX FULL SCAN | I_OLAP_CUBE_DIMENSIONS$ | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|*100 | INDEX RANGE SCAN | I_OBJ1 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +| 101 | NESTED LOOPS | | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|*102 | INDEX FULL SCAN | I_USER2 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +|*103 | INDEX RANGE SCAN | I_OBJ4 | 0 | 1 | 0 |00:00:00.01 | 0 | 0 | 0 | | | | +| 104 | UNION-ALL | | 1 | | 2 |00:00:00.33 | 2091 | 2084 | 0 | | | | +| 105 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.18 | 1047 | 1042 | 0 | | | | +| 106 | VIEW | | 1 | 31935 | 73027 |00:00:00.13 | 1047 | 1042 | 0 | | | | +| 107 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6637_489CA79 | 1 | 31935 | 73027 |00:00:00.07 | 1047 | 1042 | 0 | | | | +| 108 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.15 | 1044 | 1042 | 0 | | | | +| 109 | VIEW | | 1 | 31935 | 73027 |00:00:00.12 | 1044 | 1042 | 0 | | | | +| 110 | TABLE ACCESS FULL | SYS_TEMP_0FD9D6637_489CA79 | 1 | 31935 | 73027 |00:00:00.05 | 1044 | 1042 | 0 | | | | +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + diff --git a/tpt/ast/trace/04_cbo_troubleshoot_1.trc b/tpt/ast/trace/04_cbo_troubleshoot_1.trc new file mode 100644 index 0000000..b700135 --- /dev/null +++ b/tpt/ast/trace/04_cbo_troubleshoot_1.trc @@ -0,0 +1,10950 @@ +Trace file /export/home/oracle/diag/rdbms/sol112/SOL112/trace/SOL112_ora_29553_0001.trc +Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production +With the Partitioning, OLAP, Data Mining and Real Application Testing options +ORACLE_HOME = /export/home/oracle/product/11.2.0/db_1 +System name: SunOS +Node name: solaris02 +Release: 5.11 +Version: snv_111b +Machine: i86pc +Instance name: SOL112 +Redo thread mounted by this instance: 1 +Oracle process number: 25 +Unix process pid: 29553, image: oracle@solaris02 + + +*** 2010-04-29 18:11:44.984 +*** SESSION ID:(142.6373) 2010-04-29 18:11:44.984 +*** CLIENT ID:() 2010-04-29 18:11:44.984 +*** SERVICE NAME:(SOL112) 2010-04-29 18:11:44.984 +*** MODULE NAME:(SQL*Plus) 2010-04-29 18:11:44.984 +*** ACTION NAME:() 2010-04-29 18:11:44.984 + + +*** TRACE CONTINUED FROM FILE /export/home/oracle/diag/rdbms/sol112/SOL112/trace/SOL112_ora_29553.trc *** + +Registered qb: SEL$1 0xfdbfdca8 (PARSER) +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature (): qb_name=SEL$1 nbfros=7 flg=0 + fro(0): flg=4 objn=74142 hint_alias="C"@"SEL$1" + fro(1): flg=4 objn=74123 hint_alias="D"@"SEL$1" + fro(2): flg=4 objn=74128 hint_alias="E"@"SEL$1" + fro(3): flg=4 objn=74165 hint_alias="O"@"SEL$1" + fro(4): flg=4 objn=74160 hint_alias="OI"@"SEL$1" + fro(5): flg=5 objn=74600 hint_alias="PROD"@"SEL$1" + fro(6): flg=4 objn=74179 hint_alias="PROM"@"SEL$1" + +Registered qb: SEL$2 0xfdb563d0 (PARSER) +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature (): qb_name=SEL$2 nbfros=2 flg=0 + fro(0): flg=4 objn=74176 hint_alias="D"@"SEL$2" + fro(1): flg=4 objn=74173 hint_alias="I"@"SEL$2" + +SPM: statement not found in SMB + +************************** +Automatic degree of parallelism (ADOP) +************************** +Automatic degree of parallelism is disabled: Parameter. + +PM: Considering predicate move-around in query block SEL$1 (#0) +************************** +Predicate Move-Around (PM) +************************** +OPTIMIZER INFORMATION + +****************************************** +----- Current SQL Statement for this session (sql_id=3qy33cc7bz0y2) ----- +SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + oe.orders o + , oe.order_items oi + , oe.products prod + , oe.customers c + , oe.promotions prom + , hr.employees e + , hr.departments d +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND d.department_id = e.department_id + -- filters +AND d.department_name = 'Sales' +AND e.first_name = 'William' +AND e.last_name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' +AND c.cust_first_name = 'Gena' +AND c.cust_last_name = 'Harris' +GROUP BY + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price +******************************************* +Legend +The following abbreviations are used by optimizer trace. +CBQT - cost-based query transformation +JPPD - join predicate push-down +OJPPD - old-style (non-cost-based) JPPD +FPD - filter push-down +PM - predicate move-around +CVM - complex view merging +SPJ - select-project-join +SJC - set join conversion +SU - subquery unnesting +OBYE - order by elimination +OST - old style star transformation +ST - new (cbqt) star transformation +CNT - count(col) to count(*) transformation +JE - Join Elimination +JF - join factorization +SLP - select list pruning +DP - distinct placement +qb - query block +LB - leaf blocks +DK - distinct keys +LB/K - average number of leaf blocks per key +DB/K - average number of data blocks per key +CLUF - clustering factor +NDV - number of distinct values +Resp - response cost +Card - cardinality +Resc - resource cost +NL - nested loops (join) +SM - sort merge (join) +HA - hash (join) +CPUSPEED - CPU Speed +IOTFRSPEED - I/O transfer speed +IOSEEKTIM - I/O seek time +SREADTIM - average single block read time +MREADTIM - average multiblock read time +MBRC - average multiblock read count +MAXTHR - maximum I/O system throughput +SLAVETHR - average slave I/O throughput +dmeth - distribution method + 1: no partitioning required + 2: value partitioned + 4: right is random (round-robin) + 128: left is random (round-robin) + 8: broadcast right and partition left + 16: broadcast left and partition right + 32: partition left using partitioning of right + 64: partition right using partitioning of left + 256: run the join in serial + 0: invalid distribution method +sel - selectivity +ptn - partition +*************************************** +PARAMETERS USED BY THE OPTIMIZER +******************************** + ************************************* + PARAMETERS WITH ALTERED VALUES + ****************************** +Compilation Environment Dump +Bug Fix Control Environment + + + ************************************* + PARAMETERS WITH DEFAULT VALUES + ****************************** +Compilation Environment Dump +optimizer_mode_hinted = false +optimizer_features_hinted = 0.0.0 +parallel_execution_enabled = true +parallel_query_forced_dop = 0 +parallel_dml_forced_dop = 0 +parallel_ddl_forced_degree = 0 +parallel_ddl_forced_instances = 0 +_query_rewrite_fudge = 90 +optimizer_features_enable = 11.2.0.1 +_optimizer_search_limit = 5 +cpu_count = 2 +active_instance_count = 1 +parallel_threads_per_cpu = 2 +hash_area_size = 131072 +bitmap_merge_area_size = 1048576 +sort_area_size = 65536 +sort_area_retained_size = 0 +_sort_elimination_cost_ratio = 0 +_optimizer_block_size = 8192 +_sort_multiblock_read_count = 2 +_hash_multiblock_io_count = 0 +_db_file_optimizer_read_count = 8 +_optimizer_max_permutations = 2000 +pga_aggregate_target = 286720 KB +_pga_max_size = 204800 KB +_query_rewrite_maxdisjunct = 257 +_smm_auto_min_io_size = 56 KB +_smm_auto_max_io_size = 248 KB +_smm_min_size = 286 KB +_smm_max_size = 57344 KB +_smm_px_max_size = 143360 KB +_cpu_to_io = 0 +_optimizer_undo_cost_change = 11.2.0.1 +parallel_query_mode = enabled +parallel_dml_mode = disabled +parallel_ddl_mode = enabled +optimizer_mode = all_rows +sqlstat_enabled = false +_optimizer_percent_parallel = 101 +_always_anti_join = choose +_always_semi_join = choose +_optimizer_mode_force = true +_partition_view_enabled = true +_always_star_transformation = false +_query_rewrite_or_error = false +_hash_join_enabled = true +cursor_sharing = exact +_b_tree_bitmap_plans = true +star_transformation_enabled = false +_optimizer_cost_model = choose +_new_sort_cost_estimate = true +_complex_view_merging = true +_unnest_subquery = true +_eliminate_common_subexpr = true +_pred_move_around = true +_convert_set_to_join = false +_push_join_predicate = true +_push_join_union_view = true +_fast_full_scan_enabled = true +_optim_enhance_nnull_detection = true +_parallel_broadcast_enabled = true +_px_broadcast_fudge_factor = 100 +_ordered_nested_loop = true +_no_or_expansion = false +optimizer_index_cost_adj = 100 +optimizer_index_caching = 0 +_system_index_caching = 0 +_disable_datalayer_sampling = false +query_rewrite_enabled = true +query_rewrite_integrity = enforced +_query_cost_rewrite = true +_query_rewrite_2 = true +_query_rewrite_1 = true +_query_rewrite_expression = true +_query_rewrite_jgmigrate = true +_query_rewrite_fpc = true +_query_rewrite_drj = true +_full_pwise_join_enabled = true +_partial_pwise_join_enabled = true +_left_nested_loops_random = true +_improved_row_length_enabled = true +_index_join_enabled = true +_enable_type_dep_selectivity = true +_improved_outerjoin_card = true +_optimizer_adjust_for_nulls = true +_optimizer_degree = 0 +_use_column_stats_for_function = true +_subquery_pruning_enabled = true +_subquery_pruning_mv_enabled = false +_or_expand_nvl_predicate = true +_like_with_bind_as_equality = false +_table_scan_cost_plus_one = true +_cost_equality_semi_join = true +_default_non_equality_sel_check = true +_new_initial_join_orders = true +_oneside_colstat_for_equijoins = true +_optim_peek_user_binds = true +_minimal_stats_aggregation = true +_force_temptables_for_gsets = false +workarea_size_policy = auto +_smm_auto_cost_enabled = true +_gs_anti_semi_join_allowed = true +_optim_new_default_join_sel = true +optimizer_dynamic_sampling = 2 +_pre_rewrite_push_pred = true +_optimizer_new_join_card_computation = true +_union_rewrite_for_gs = yes_gset_mvs +_generalized_pruning_enabled = true +_optim_adjust_for_part_skews = true +_force_datefold_trunc = false +statistics_level = typical +_optimizer_system_stats_usage = true +skip_unusable_indexes = true +_remove_aggr_subquery = true +_optimizer_push_down_distinct = 0 +_dml_monitoring_enabled = true +_optimizer_undo_changes = false +_predicate_elimination_enabled = true +_nested_loop_fudge = 100 +_project_view_columns = true +_local_communication_costing_enabled = true +_local_communication_ratio = 50 +_query_rewrite_vop_cleanup = true +_slave_mapping_enabled = true +_optimizer_cost_based_transformation = linear +_optimizer_mjc_enabled = true +_right_outer_hash_enable = true +_spr_push_pred_refspr = true +_optimizer_cache_stats = false +_optimizer_cbqt_factor = 50 +_optimizer_squ_bottomup = true +_fic_area_size = 131072 +_optimizer_skip_scan_enabled = true +_optimizer_cost_filter_pred = false +_optimizer_sortmerge_join_enabled = true +_optimizer_join_sel_sanity_check = true +_mmv_query_rewrite_enabled = true +_bt_mmv_query_rewrite_enabled = true +_add_stale_mv_to_dependency_list = true +_distinct_view_unnesting = false +_optimizer_dim_subq_join_sel = true +_optimizer_disable_strans_sanity_checks = 0 +_optimizer_compute_index_stats = true +_push_join_union_view2 = true +_optimizer_ignore_hints = false +_optimizer_random_plan = 0 +_query_rewrite_setopgrw_enable = true +_optimizer_correct_sq_selectivity = true +_disable_function_based_index = false +_optimizer_join_order_control = 3 +_optimizer_cartesian_enabled = true +_optimizer_starplan_enabled = true +_extended_pruning_enabled = true +_optimizer_push_pred_cost_based = true +_optimizer_null_aware_antijoin = true +_optimizer_extend_jppd_view_types = true +_sql_model_unfold_forloops = run_time +_enable_dml_lock_escalation = false +_bloom_filter_enabled = true +_update_bji_ipdml_enabled = 0 +_optimizer_extended_cursor_sharing = udo +_dm_max_shared_pool_pct = 1 +_optimizer_cost_hjsmj_multimatch = true +_optimizer_transitivity_retain = true +_px_pwg_enabled = true +optimizer_secure_view_merging = true +_optimizer_join_elimination_enabled = true +flashback_table_rpi = non_fbt +_optimizer_cbqt_no_size_restriction = true +_optimizer_enhanced_filter_push = true +_optimizer_filter_pred_pullup = true +_rowsrc_trace_level = 0 +_simple_view_merging = true +_optimizer_rownum_pred_based_fkr = true +_optimizer_better_inlist_costing = all +_optimizer_self_induced_cache_cost = false +_optimizer_min_cache_blocks = 10 +_optimizer_or_expansion = depth +_optimizer_order_by_elimination_enabled = true +_optimizer_outer_to_anti_enabled = true +_selfjoin_mv_duplicates = true +_dimension_skip_null = true +_force_rewrite_enable = false +_optimizer_star_tran_in_with_clause = true +_optimizer_complex_pred_selectivity = true +_optimizer_connect_by_cost_based = true +_gby_hash_aggregation_enabled = true +_globalindex_pnum_filter_enabled = true +_px_minus_intersect = true +_fix_control_key = 0 +_force_slave_mapping_intra_part_loads = false +_force_tmp_segment_loads = false +_query_mmvrewrite_maxpreds = 10 +_query_mmvrewrite_maxintervals = 5 +_query_mmvrewrite_maxinlists = 5 +_query_mmvrewrite_maxdmaps = 10 +_query_mmvrewrite_maxcmaps = 20 +_query_mmvrewrite_maxregperm = 512 +_query_mmvrewrite_maxmergedcmaps = 50 +_query_mmvrewrite_maxqryinlistvals = 500 +_disable_parallel_conventional_load = false +_trace_virtual_columns = false +_replace_virtual_columns = true +_virtual_column_overload_allowed = true +_kdt_buffering = true +_first_k_rows_dynamic_proration = true +_optimizer_sortmerge_join_inequality = true +_optimizer_aw_stats_enabled = true +_bloom_pruning_enabled = true +result_cache_mode = MANUAL +_px_ual_serial_input = true +_optimizer_skip_scan_guess = false +_enable_row_shipping = true +_row_shipping_threshold = 80 +_row_shipping_explain = false +transaction_isolation_level = read_commited +_optimizer_distinct_elimination = true +_optimizer_multi_level_push_pred = true +_optimizer_group_by_placement = true +_optimizer_rownum_bind_default = 10 +_enable_query_rewrite_on_remote_objs = true +_optimizer_extended_cursor_sharing_rel = simple +_optimizer_adaptive_cursor_sharing = true +_direct_path_insert_features = 0 +_optimizer_improve_selectivity = true +optimizer_use_pending_statistics = false +_optimizer_enable_density_improvements = true +_optimizer_aw_join_push_enabled = true +_optimizer_connect_by_combine_sw = true +_enable_pmo_ctas = 0 +_optimizer_native_full_outer_join = force +_bloom_predicate_enabled = true +_optimizer_enable_extended_stats = true +_is_lock_table_for_ddl_wait_lock = 0 +_pivot_implementation_method = choose +optimizer_capture_sql_plan_baselines = false +optimizer_use_sql_plan_baselines = true +_optimizer_star_trans_min_cost = 0 +_optimizer_star_trans_min_ratio = 0 +_with_subquery = OPTIMIZER +_optimizer_fkr_index_cost_bias = 10 +_optimizer_use_subheap = true +parallel_degree_policy = manual +parallel_degree = 0 +parallel_min_time_threshold = 10 +_parallel_time_unit = 10 +_optimizer_or_expansion_subheap = true +_optimizer_free_transformation_heap = true +_optimizer_reuse_cost_annotations = true +_result_cache_auto_size_threshold = 100 +_result_cache_auto_time_threshold = 1000 +_optimizer_nested_rollup_for_gset = 100 +_nlj_batching_enabled = 1 +parallel_query_default_dop = 0 +is_recur_flags = 0 +optimizer_use_invisible_indexes = false +flashback_data_archive_internal_cursor = 0 +_optimizer_extended_stats_usage_control = 224 +_parallel_syspls_obey_force = true +cell_offload_processing = true +_rdbms_internal_fplib_enabled = false +db_file_multiblock_read_count = 126 +_bloom_folding_enabled = true +_mv_generalized_oj_refresh_opt = true +cell_offload_compaction = ADAPTIVE +parallel_degree_limit = 65535 +parallel_force_local = false +parallel_max_degree = 4 +total_cpu_count = 2 +cell_offload_plan_display = AUTO +_optimizer_coalesce_subqueries = true +_optimizer_fast_pred_transitivity = true +_optimizer_fast_access_pred_analysis = true +_optimizer_unnest_disjunctive_subq = true +_optimizer_unnest_corr_set_subq = true +_optimizer_distinct_agg_transform = true +_aggregation_optimization_settings = 0 +_optimizer_connect_by_elim_dups = true +_optimizer_eliminate_filtering_join = true +_connect_by_use_union_all = true +dst_upgrade_insert_conv = true +advanced_queuing_internal_cursor = 0 +_optimizer_unnest_all_subqueries = true +_bloom_predicate_pushdown_to_storage = true +_bloom_vector_elements = 0 +_bloom_pushing_max = 524288 +parallel_autodop = 0 +parallel_ddldml = 0 +_parallel_cluster_cache_policy = adaptive +_parallel_scalability = 50 +iot_internal_cursor = 0 +_optimizer_instance_count = 0 +_optimizer_connect_by_cb_whr_only = false +_suppress_scn_chk_for_cqn = nosuppress_1466 +_optimizer_join_factorization = true +_optimizer_use_cbqt_star_transformation = true +_optimizer_table_expansion = true +_and_pruning_enabled = true +_deferred_constant_folding_mode = DEFAULT +_optimizer_distinct_placement = true +partition_pruning_internal_cursor = 0 +parallel_hinted = none +_sql_compatibility = 0 +_optimizer_use_feedback = true +_optimizer_try_st_before_jppd = true +Bug Fix Control Environment + fix 3834770 = 1 + fix 3746511 = enabled + fix 4519016 = enabled + fix 3118776 = enabled + fix 4488689 = enabled + fix 2194204 = disabled + fix 2660592 = enabled + fix 2320291 = enabled + fix 2324795 = enabled + fix 4308414 = enabled + fix 3499674 = disabled + fix 4569940 = enabled + fix 4631959 = enabled + fix 4519340 = enabled + fix 4550003 = enabled + fix 1403283 = enabled + fix 4554846 = enabled + fix 4602374 = enabled + fix 4584065 = enabled + fix 4545833 = enabled + fix 4611850 = enabled + fix 4663698 = enabled + fix 4663804 = enabled + fix 4666174 = enabled + fix 4567767 = enabled + fix 4556762 = 15 + fix 4728348 = enabled + fix 4708389 = enabled + fix 4175830 = enabled + fix 4752814 = enabled + fix 4583239 = enabled + fix 4386734 = enabled + fix 4887636 = enabled + fix 4483240 = enabled + fix 4872602 = disabled + fix 4711525 = enabled + fix 4545802 = enabled + fix 4605810 = enabled + fix 4704779 = enabled + fix 4900129 = enabled + fix 4924149 = enabled + fix 4663702 = enabled + fix 4878299 = enabled + fix 4658342 = enabled + fix 4881533 = enabled + fix 4676955 = enabled + fix 4273361 = enabled + fix 4967068 = enabled + fix 4969880 = disabled + fix 5005866 = enabled + fix 5015557 = enabled + fix 4705343 = enabled + fix 4904838 = enabled + fix 4716096 = enabled + fix 4483286 = disabled + fix 4722900 = enabled + fix 4615392 = enabled + fix 5096560 = enabled + fix 5029464 = enabled + fix 4134994 = enabled + fix 4904890 = enabled + fix 5104624 = enabled + fix 5014836 = enabled + fix 4768040 = enabled + fix 4600710 = enabled + fix 5129233 = enabled + fix 4595987 = enabled + fix 4908162 = enabled + fix 5139520 = enabled + fix 5084239 = enabled + fix 5143477 = disabled + fix 2663857 = enabled + fix 4717546 = enabled + fix 5240264 = disabled + fix 5099909 = enabled + fix 5240607 = enabled + fix 5195882 = enabled + fix 5220356 = enabled + fix 5263572 = enabled + fix 5385629 = enabled + fix 5302124 = enabled + fix 5391942 = enabled + fix 5384335 = enabled + fix 5482831 = enabled + fix 4158812 = enabled + fix 5387148 = enabled + fix 5383891 = enabled + fix 5466973 = enabled + fix 5396162 = enabled + fix 5394888 = enabled + fix 5395291 = enabled + fix 5236908 = enabled + fix 5509293 = enabled + fix 5449488 = enabled + fix 5567933 = enabled + fix 5570494 = enabled + fix 5288623 = enabled + fix 5505995 = enabled + fix 5505157 = enabled + fix 5112460 = enabled + fix 5554865 = enabled + fix 5112260 = enabled + fix 5112352 = enabled + fix 5547058 = enabled + fix 5618040 = enabled + fix 5585313 = enabled + fix 5547895 = enabled + fix 5634346 = enabled + fix 5620485 = enabled + fix 5483301 = enabled + fix 5657044 = enabled + fix 5694984 = enabled + fix 5868490 = enabled + fix 5650477 = enabled + fix 5611962 = enabled + fix 4279274 = enabled + fix 5741121 = enabled + fix 5714944 = enabled + fix 5391505 = enabled + fix 5762598 = enabled + fix 5578791 = enabled + fix 5259048 = enabled + fix 5882954 = enabled + fix 2492766 = enabled + fix 5707608 = enabled + fix 5891471 = enabled + fix 5884780 = enabled + fix 5680702 = enabled + fix 5371452 = enabled + fix 5838613 = enabled + fix 5949981 = enabled + fix 5624216 = enabled + fix 5741044 = enabled + fix 5976822 = enabled + fix 6006457 = enabled + fix 5872956 = enabled + fix 5923644 = enabled + fix 5943234 = enabled + fix 5844495 = enabled + fix 4168080 = enabled + fix 6020579 = enabled + fix 5842686 = disabled + fix 5996801 = enabled + fix 5593639 = enabled + fix 6133948 = enabled + fix 3151991 = enabled + fix 6146906 = enabled + fix 6239909 = enabled + fix 6267621 = enabled + fix 5909305 = enabled + fix 6279918 = enabled + fix 6141818 = enabled + fix 6151963 = enabled + fix 6251917 = enabled + fix 6282093 = enabled + fix 6119510 = enabled + fix 6119382 = enabled + fix 3801750 = enabled + fix 5705630 = disabled + fix 5944076 = enabled + fix 5406763 = enabled + fix 6070954 = enabled + fix 6282944 = enabled + fix 6138746 = enabled + fix 6082745 = enabled + fix 3426050 = enabled + fix 599680 = enabled + fix 6062266 = enabled + fix 6087237 = enabled + fix 6122894 = enabled + fix 6377505 = enabled + fix 5893768 = enabled + fix 6163564 = enabled + fix 6073325 = enabled + fix 6188881 = enabled + fix 6007259 = enabled + fix 6239971 = enabled + fix 5284200 = disabled + fix 6042205 = enabled + fix 6051211 = enabled + fix 6434668 = enabled + fix 6438752 = enabled + fix 5936366 = enabled + fix 6439032 = enabled + fix 6438892 = enabled + fix 6006300 = enabled + fix 5947231 = enabled + fix 5416118 = 1 + fix 6365442 = 1 + fix 6239039 = enabled + fix 6502845 = enabled + fix 6913094 = enabled + fix 6029469 = enabled + fix 5919513 = enabled + fix 6057611 = enabled + fix 6469667 = enabled + fix 6608941 = disabled + fix 6368066 = enabled + fix 6329318 = enabled + fix 6656356 = enabled + fix 4507997 = enabled + fix 6671155 = enabled + fix 6694548 = enabled + fix 6688200 = enabled + fix 6612471 = enabled + fix 6708183 = disabled + fix 6326934 = enabled + fix 6520717 = disabled + fix 6714199 = enabled + fix 6681545 = enabled + fix 6748058 = enabled + fix 6167716 = enabled + fix 6674254 = enabled + fix 6468287 = enabled + fix 6503543 = enabled + fix 6808773 = disabled + fix 6766962 = enabled + fix 6120483 = enabled + fix 6670551 = enabled + fix 6771838 = enabled + fix 6626018 = disabled + fix 6530596 = enabled + fix 6778642 = enabled + fix 6699059 = enabled + fix 6376551 = enabled + fix 6429113 = enabled + fix 6782437 = enabled + fix 6776808 = enabled + fix 6765823 = enabled + fix 6768660 = enabled + fix 6782665 = enabled + fix 6610822 = enabled + fix 6514189 = enabled + fix 6818410 = enabled + fix 6827696 = enabled + fix 6773613 = enabled + fix 5902962 = enabled + fix 6956212 = enabled + fix 3056297 = enabled + fix 6440977 = disabled + fix 6972291 = disabled + fix 6904146 = enabled + fix 6221403 = enabled + fix 5475051 = enabled + fix 6845871 = enabled + fix 5468809 = enabled + fix 6917633 = enabled + fix 4444536 = disabled + fix 6955210 = enabled + fix 6994194 = enabled + fix 6399597 = disabled + fix 6951776 = enabled + fix 5648287 = 3 + fix 6987082 = disabled + fix 7132036 = enabled + fix 6980350 = enabled + fix 5199213 = enabled + fix 7138405 = enabled + fix 7148689 = enabled + fix 6820988 = enabled + fix 7032684 = enabled + fix 6617866 = enabled + fix 7155968 = enabled + fix 7127980 = enabled + fix 6982954 = enabled + fix 7241819 = enabled + fix 6897034 = enabled + fix 7236148 = enabled + fix 7298570 = enabled + fix 7249095 = enabled + fix 7314499 = enabled + fix 7324224 = enabled + fix 7289023 = enabled + fix 7237571 = enabled + fix 7116357 = enabled + fix 7345484 = enabled + fix 7375179 = enabled + fix 6430500 = disabled + fix 5897486 = enabled + fix 6774209 = enabled + fix 7306637 = enabled + fix 6451322 = enabled + fix 7208131 = enabled + fix 7388652 = enabled + fix 7127530 = enabled + fix 6751206 = enabled + fix 6669103 = enabled + fix 7430474 = enabled + fix 6990305 = enabled + fix 7043307 = enabled + fix 6921505 = enabled + fix 7388457 = enabled + fix 3120429 = enabled + fix 7452823 = disabled + fix 6838105 = enabled + fix 6769711 = enabled + fix 7170213 = enabled + fix 6528872 = enabled + fix 7295298 = enabled + fix 5922070 = enabled + fix 7259468 = enabled + fix 6418552 = enabled + fix 4619997 = enabled + fix 7524366 = enabled + fix 6942476 = enabled + fix 6418771 = enabled + fix 7375077 = enabled + fix 5400639 = enabled + fix 4570921 = enabled + fix 7426911 = enabled + fix 5099019 = disabled + fix 7528216 = enabled + fix 7521266 = enabled + fix 7385140 = enabled + fix 7576516 = enabled + fix 7573526 = enabled + fix 7576476 = enabled + fix 7165898 = enabled + fix 7263214 = enabled + fix 3320140 = enabled + fix 7555510 = enabled + fix 7613118 = enabled + fix 7597059 = enabled + fix 7558911 = enabled + fix 5520732 = enabled + fix 7679490 = disabled + fix 7449971 = enabled + fix 3628118 = enabled + fix 4370840 = enabled + fix 7281191 = enabled + fix 7519687 = enabled + fix 5029592 = 3 + fix 6012093 = 1 + fix 6053861 = disabled + fix 6941515 = disabled + fix 7696414 = enabled + fix 7272039 = enabled + fix 7834811 = enabled + fix 7640597 = enabled + fix 7341616 = enabled + fix 7168184 = enabled + fix 399198 = enabled + fix 7831070 = enabled + fix 7676897 = disabled + fix 7414637 = enabled + fix 7585456 = enabled + fix 8202421 = enabled + fix 7658097 = disabled + fix 8251486 = enabled + fix 7132684 = enabled + fix 7512227 = enabled + fix 6972987 = enabled + fix 7199035 = enabled + fix 8243446 = enabled + fix 7650462 = enabled + fix 6720701 = enabled + fix 7592673 = enabled + fix 7718694 = enabled + fix 7534027 = enabled + fix 7708267 = enabled + fix 5716785 = enabled + fix 7356191 = enabled + fix 7679161 = enabled + fix 7597159 = enabled + fix 7499258 = enabled + fix 8328363 = enabled + fix 7452863 = enabled + fix 8284930 = enabled + fix 7298626 = enabled + fix 7657126 = enabled + fix 8371884 = enabled + fix 8318020 = enabled + fix 8255423 = enabled + fix 7135745 = enabled + fix 8356253 = enabled + fix 7534257 = enabled + fix 8323407 = enabled + fix 7539815 = enabled + fix 8289316 = enabled + fix 8447850 = enabled + fix 7675944 = enabled + fix 8355120 = enabled + fix 7176746 = enabled + fix 8442891 = enabled + fix 8373261 = enabled + fix 7679164 = enabled + fix 7670533 = enabled + fix 8408665 = enabled + fix 8491399 = enabled + fix 8348392 = enabled + fix 8348585 = enabled + fix 8508056 = enabled + fix 8335178 = enabled + fix 8515269 = enabled + fix 8247017 = enabled + fix 7325597 = enabled + fix 8531490 = enabled + fix 6163600 = enabled + fix 8589278 = disabled + fix 8557992 = enabled + fix 7556098 = enabled + fix 8580883 = enabled + fix 5892599 = disabled + fix 8609714 = enabled + fix 8514561 = enabled + fix 8619631 = disabled + + + *************************************** + PARAMETERS IN OPT_PARAM HINT + **************************** + _optimizer_use_feedback = 'false' +*************************************** +Column Usage Monitoring is ON: tracking level = 1 +*************************************** + +Considering Query Transformations on query block SEL$1 (#0) +************************** +Query transformations (QT) +************************** +JF: Checking validity of join factorization for query block SEL$2 (#0) +JF: Bypassed: not a UNION or UNION-ALL query block. +ST: not valid since star transformation parameter is FALSE +TE: Checking validity of table expansion for query block SEL$2 (#0) +TE: Bypassed: No partitioned table in query block. +Check Basic Validity for Non-Union View for query block SEL$2 (#0) +JPPD: JPPD bypassed: View has unsupported constructs. +CBQT: Validity checks passed for 3qy33cc7bz0y2. +CSE: Considering common sub-expression elimination in query block SEL$1 (#0) +************************* +Common Subexpression elimination (CSE) +************************* +CSE: Considering common sub-expression elimination in query block SEL$2 (#0) +************************* +Common Subexpression elimination (CSE) +************************* +CSE: CSE not performed on query block SEL$2 (#0). +CSE: CSE not performed on query block SEL$1 (#0). +OBYE: Considering Order-by Elimination from view SEL$1 (#0) +*************************** +Order-by elimination (OBYE) +*************************** +OBYE: Considering Order-by Elimination from view SEL$2 (#0) +*************************** +Order-by elimination (OBYE) +*************************** +OBYE: OBYE bypassed: no order by to eliminate. +OBYE: OBYE performed. +JE: Considering Join Elimination on query block SEL$2 (#0) +************************* +Join Elimination (JE) +************************* +SQL:******* UNPARSED QUERY IS ******* +SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') +SQL:******* UNPARSED QUERY IS ******* +SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') +Query block SEL$2 (#0) unchanged +JE: Considering Join Elimination on query block SEL$1 (#0) +************************* +Join Elimination (JE) +************************* +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME","PROD"."PRODUCT_NAME" "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI", (SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG')) "PROD","OE"."CUSTOMERS" "C","OE"."PROMOTIONS" "PROM","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="PROD"."PRODUCT_ID" AND "O"."PROMOTION_ID"="PROM"."PROMO_ID"(+) AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND "PROD"."PRODUCT_NAME"='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME","PROD"."PRODUCT_NAME","C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +Query block (fffffd7ffdbfdca8) before join elimination: +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME","PROD"."PRODUCT_NAME" "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI", (SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG')) "PROD","OE"."CUSTOMERS" "C","OE"."PROMOTIONS" "PROM","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="PROD"."PRODUCT_ID" AND "O"."PROMOTION_ID"="PROM"."PROMO_ID"(+) AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND "PROD"."PRODUCT_NAME"='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME","PROD"."PRODUCT_NAME","C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +JE: eliminate table: PROMOTIONS (PROM) +JE: cfro: ORDER_ITEMS objn:74165 col#:1 dfro:ORDERS dcol#:1 +Registered qb: SEL$31BE1502 0xfdbfdca8 (JOIN REMOVED FROM QUERY BLOCK SEL$1; SEL$1; "PROM"@"SEL$1") +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature (): qb_name=SEL$31BE1502 nbfros=6 flg=0 + fro(0): flg=0 objn=74142 hint_alias="C"@"SEL$1" + fro(1): flg=0 objn=74123 hint_alias="D"@"SEL$1" + fro(2): flg=0 objn=74128 hint_alias="E"@"SEL$1" + fro(3): flg=0 objn=74165 hint_alias="O"@"SEL$1" + fro(4): flg=0 objn=74160 hint_alias="OI"@"SEL$1" + fro(5): flg=1 objn=74600 hint_alias="PROD"@"SEL$1" + +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME","PROD"."PRODUCT_NAME" "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI", (SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG')) "PROD","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="PROD"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND "PROD"."PRODUCT_NAME"='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME","PROD"."PRODUCT_NAME","C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +Query block SEL$31BE1502 (#0) simplified +OJE: Considering outer-join elimination on query block SEL$31BE1502 (#0) +OJE: considering predicate"O"."ORDER_ID"="OI"."ORDER_ID" + +rejected +OJE: considering predicate"OI"."PRODUCT_ID"="PROD"."PRODUCT_ID" + +rejected +OJE: considering predicate"O"."CUSTOMER_ID"="C"."CUSTOMER_ID" + +rejected +OJE: considering predicate"O"."SALES_REP_ID"="E"."EMPLOYEE_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_NAME"='Sales' + +rejected +OJE: considering predicate"E"."FIRST_NAME"='William' + +rejected +OJE: considering predicate"E"."LAST_NAME"='Smith' + +rejected +OJE: considering predicate"PROD"."PRODUCT_NAME"='Mobile Web Phone' + +rejected +OJE: considering predicate"C"."CUST_FIRST_NAME"='Gena' + +rejected +OJE: considering predicate"C"."CUST_LAST_NAME"='Harris' + +rejected +OJE: outer-join not eliminated +CNT: Considering count(col) to count(*) on query block SEL$31BE1502 (#0) +************************* +Count(col) to Count(*) (CNT) +************************* +CNT: COUNT() to COUNT(*) not done. +OJE: Considering outer-join elimination on query block SEL$2 (#0) +OJE: considering predicate"D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') + +rejected +OJE: outer-join not eliminated +CVM: Merging SPJ view SEL$2 (#0) into SEL$31BE1502 (#0) +OJE: Considering outer-join elimination on query block SEL$31BE1502 (#0) +OJE: considering predicate"O"."ORDER_ID"="OI"."ORDER_ID" + +rejected +OJE: considering predicate"OI"."PRODUCT_ID"="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"O"."CUSTOMER_ID"="C"."CUSTOMER_ID" + +rejected +OJE: considering predicate"O"."SALES_REP_ID"="E"."EMPLOYEE_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_NAME"='Sales' + +rejected +OJE: considering predicate"E"."FIRST_NAME"='William' + +rejected +OJE: considering predicate"E"."LAST_NAME"='Smith' + +rejected +OJE: considering predicateCASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' + +rejected +OJE: considering predicate"C"."CUST_FIRST_NAME"='Gena' + +rejected +OJE: considering predicate"C"."CUST_LAST_NAME"='Harris' + +rejected +OJE: considering predicate"D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') + +rejected +OJE: outer-join not eliminated +CNT: Considering count(col) to count(*) on query block SEL$31BE1502 (#0) +************************* +Count(col) to Count(*) (CNT) +************************* +CNT: COUNT() to COUNT(*) not done. +Registered qb: SEL$4B12EFE6 0xfdbfdca8 (VIEW MERGE SEL$31BE1502; SEL$2) +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature (): qb_name=SEL$4B12EFE6 nbfros=7 flg=0 + fro(0): flg=0 objn=74142 hint_alias="C"@"SEL$1" + fro(1): flg=0 objn=74123 hint_alias="D"@"SEL$1" + fro(2): flg=0 objn=74128 hint_alias="E"@"SEL$1" + fro(3): flg=0 objn=74165 hint_alias="O"@"SEL$1" + fro(4): flg=0 objn=74160 hint_alias="OI"@"SEL$1" + fro(5): flg=0 objn=74176 hint_alias="D"@"SEL$2" + fro(6): flg=0 objn=74173 hint_alias="I"@"SEL$2" + +JE: Considering Join Elimination on query block SEL$4B12EFE6 (#0) +************************* +Join Elimination (JE) +************************* +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +JE: cfro: EMPLOYEES objn:74123 col#:11 dfro:DEPARTMENTS dcol#:11 +JE: cfro: EMPLOYEES objn:74123 col#:11 dfro:DEPARTMENTS dcol#:11 +JE: cfro: ORDERS objn:74128 col#:7 dfro:EMPLOYEES dcol#:7 +JE: cfro: ORDERS objn:74128 col#:7 dfro:EMPLOYEES dcol#:7 +JE: cfro: ORDERS objn:74142 col#:4 dfro:CUSTOMERS dcol#:4 +JE: cfro: ORDERS objn:74142 col#:4 dfro:CUSTOMERS dcol#:4 +JE: cfro: ORDER_ITEMS objn:74173 col#:3 dfro:PRODUCT_INFORMATION dcol#:3 +JE: cfro: ORDER_ITEMS objn:74173 col#:3 dfro:PRODUCT_INFORMATION dcol#:3 +JE: cfro: ORDER_ITEMS objn:74165 col#:1 dfro:ORDERS dcol#:1 +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +Query block SEL$4B12EFE6 (#0) unchanged +query block SEL$1 transformed to SEL$4B12EFE6 (#0) +Considering Query Transformations on query block SEL$4B12EFE6 (#0) +************************** +Query transformations (QT) +************************** +CSE: Considering common sub-expression elimination in query block SEL$4B12EFE6 (#0) +************************* +Common Subexpression elimination (CSE) +************************* +CSE: CSE not performed on query block SEL$4B12EFE6 (#0). +query block SEL$4B12EFE6 (#0) unchanged +apadrv-start sqlid=4285284322543371202 + : + call(in-use=31152, alloc=49080), compile(in-use=132728, alloc=134848), execution(in-use=12208, alloc=16200) + +******************************************* +Peeked values of the binds in SQL statement +******************************************* + +CBQT: Considering cost-based transformation on query block SEL$4B12EFE6 (#0) +******************************** +COST-BASED QUERY TRANSFORMATIONS +******************************** +FPD: Considering simple filter push (pre rewrite) in query block SEL$4B12EFE6 (#0) +FPD: Current where clause predicates "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='Willi + +OBYE: Considering Order-by Elimination from view SEL$4B12EFE6 (#0) +*************************** +Order-by elimination (OBYE) +*************************** +OBYE: OBYE performed. +Considering Query Transformations on query block SEL$4B12EFE6 (#0) +************************** +Query transformations (QT) +************************** +CSE: Considering common sub-expression elimination in query block SEL$4B12EFE6 (#0) +************************* +Common Subexpression elimination (CSE) +************************* +CSE: CSE not performed on query block SEL$4B12EFE6 (#0). +kkqctdrvTD-start on query block SEL$4B12EFE6 (#0) +kkqctdrvTD-start: : + call(in-use=31152, alloc=49080), compile(in-use=175184, alloc=179128), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-cleanup: transform(in-use=0, alloc=0) : + call(in-use=31152, alloc=49080), compile(in-use=177792, alloc=179128), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-end: + call(in-use=31152, alloc=49080), compile(in-use=180088, alloc=183272), execution(in-use=12208, alloc=16200) + +SJC: Considering set-join conversion in query block SEL$4B12EFE6 (#1) +************************* +Set-Join Conversion (SJC) +************************* +SJC: not performed +OJE: Considering outer-join elimination on query block SEL$4B12EFE6 (#1) +OJE: considering predicate"O"."ORDER_ID"="OI"."ORDER_ID" + +rejected +OJE: considering predicate"OI"."PRODUCT_ID"="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"O"."CUSTOMER_ID"="C"."CUSTOMER_ID" + +rejected +OJE: considering predicate"O"."SALES_REP_ID"="E"."EMPLOYEE_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_NAME"='Sales' + +rejected +OJE: considering predicate"E"."FIRST_NAME"='William' + +rejected +OJE: considering predicate"E"."LAST_NAME"='Smith' + +rejected +OJE: considering predicateCASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' + +rejected +OJE: considering predicate"C"."CUST_FIRST_NAME"='Gena' + +rejected +OJE: considering predicate"C"."CUST_LAST_NAME"='Harris' + +rejected +OJE: considering predicate"D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') + +rejected +OJE: outer-join not eliminated +CNT: Considering count(col) to count(*) on query block SEL$4B12EFE6 (#1) +************************* +Count(col) to Count(*) (CNT) +************************* +CNT: COUNT() to COUNT(*) not done. +JE: Considering Join Elimination on query block SEL$4B12EFE6 (#1) +************************* +Join Elimination (JE) +************************* +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +JE: cfro: EMPLOYEES objn:74123 col#:11 dfro:DEPARTMENTS dcol#:11 +JE: cfro: EMPLOYEES objn:74123 col#:11 dfro:DEPARTMENTS dcol#:11 +JE: cfro: ORDERS objn:74128 col#:7 dfro:EMPLOYEES dcol#:7 +JE: cfro: ORDERS objn:74128 col#:7 dfro:EMPLOYEES dcol#:7 +JE: cfro: ORDERS objn:74142 col#:4 dfro:CUSTOMERS dcol#:4 +JE: cfro: ORDERS objn:74142 col#:4 dfro:CUSTOMERS dcol#:4 +JE: cfro: ORDER_ITEMS objn:74173 col#:3 dfro:PRODUCT_INFORMATION dcol#:3 +JE: cfro: ORDER_ITEMS objn:74173 col#:3 dfro:PRODUCT_INFORMATION dcol#:3 +JE: cfro: ORDER_ITEMS objn:74165 col#:1 dfro:ORDERS dcol#:1 +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +Query block SEL$4B12EFE6 (#1) unchanged +PM: Considering predicate move-around in query block SEL$4B12EFE6 (#1) +************************** +Predicate Move-Around (PM) +************************** +PM: PM bypassed: Outer query contains no views. +PM: PM bypassed: Outer query contains no views. +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + call(in-use=34664, alloc=49080), compile(in-use=181368, alloc=183272), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-cleanup: transform(in-use=0, alloc=0) : + call(in-use=34664, alloc=49080), compile(in-use=183912, alloc=187416), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-end: + call(in-use=34664, alloc=49080), compile(in-use=186152, alloc=187416), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + call(in-use=34664, alloc=49080), compile(in-use=186152, alloc=187416), execution(in-use=12208, alloc=16200) + +Registered qb: SEL$4B12EFE6 0xfdba1d30 (COPY SEL$4B12EFE6) +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature(): NULL +**************************************** + Cost-Based Group-By/Distinct Placement +**************************************** +GBP/DP: Checking validity of GBP/DP for query block SEL$4B12EFE6 (#1) +GBP: Checking validity of group-by placement for query block SEL$4B12EFE6 (#1) +GBP: Bypassed: Expression/function found in group-by. +DP: Checking validity of distinct placement for query block SEL$4B12EFE6 (#1) +DP: Bypassed: Query has invalid constructs. +kkqctdrvTD-cleanup: transform(in-use=28344, alloc=29792) : + call(in-use=42760, alloc=49080), compile(in-use=242408, alloc=248296), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-end: + call(in-use=42760, alloc=49080), compile(in-use=214392, alloc=248296), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + call(in-use=42760, alloc=49080), compile(in-use=214392, alloc=248296), execution(in-use=12208, alloc=16200) + +TE: Checking validity of table expansion for query block SEL$4B12EFE6 (#1) +TE: Bypassed: No partitioned table in query block. +kkqctdrvTD-cleanup: transform(in-use=0, alloc=0) : + call(in-use=42760, alloc=49080), compile(in-use=216936, alloc=248296), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-end: + call(in-use=42760, alloc=49080), compile(in-use=219200, alloc=248296), execution(in-use=12208, alloc=16200) + +TE: Checking validity of table expansion for query block SEL$4B12EFE6 (#1) +TE: Bypassed: No partitioned table in query block. +ST: Query in kkqstardrv:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +ST: not valid since star transformation parameter is FALSE +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + call(in-use=43528, alloc=49080), compile(in-use=219200, alloc=248296), execution(in-use=12208, alloc=16200) + +JF: Checking validity of join factorization for query block SEL$4B12EFE6 (#1) +JF: Bypassed: has order-by clause. +kkqctdrvTD-cleanup: transform(in-use=0, alloc=0) : + call(in-use=43528, alloc=49080), compile(in-use=221728, alloc=248296), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-end: + call(in-use=43528, alloc=49080), compile(in-use=224000, alloc=248296), execution(in-use=12208, alloc=16200) + +JPPD: Considering Cost-based predicate pushdown from query block SEL$4B12EFE6 (#1) +************************************ +Cost-based predicate pushdown (JPPD) +************************************ +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + call(in-use=43528, alloc=49080), compile(in-use=224000, alloc=248296), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-cleanup: transform(in-use=0, alloc=0) : + call(in-use=43528, alloc=49080), compile(in-use=226544, alloc=248296), execution(in-use=12208, alloc=16200) + +kkqctdrvTD-end: + call(in-use=43528, alloc=49080), compile(in-use=228784, alloc=248296), execution(in-use=12208, alloc=16200) + +JPPD: Applying transformation directives +query block SEL$4B12EFE6 (#1) unchanged +FPD: Considering simple filter push in query block SEL$4B12EFE6 (#1) +"O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='Willi +try to generate transitive predicate from check constraints for query block SEL$4B12EFE6 (#1) +constraint: "C"."CUSTOMER_ID">0 + +finally: "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='Willi + +FPD: transitive predicates are generated in query block SEL$4B12EFE6 (#1) +"O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='Willi +Final query after transformations:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END =U'Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') AND "O"."CUSTOMER_ID">0 GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +kkoqbc: optimizing query block SEL$4B12EFE6 (#1) + + : + call(in-use=45960, alloc=65448), compile(in-use=233056, alloc=248296), execution(in-use=12336, alloc=16200) + +kkoqbc-subheap (create addr=0xfffffd7ffdbfa4e8) +**************** +QUERY BLOCK TEXT +**************** +SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + +--------------------- +QUERY BLOCK SIGNATURE +--------------------- +signature (optimizer): qb_name=SEL$4B12EFE6 nbfros=7 flg=0 + fro(0): flg=0 objn=74142 hint_alias="C"@"SEL$1" + fro(1): flg=0 objn=74123 hint_alias="D"@"SEL$1" + fro(2): flg=0 objn=74128 hint_alias="E"@"SEL$1" + fro(3): flg=0 objn=74165 hint_alias="O"@"SEL$1" + fro(4): flg=0 objn=74160 hint_alias="OI"@"SEL$1" + fro(5): flg=0 objn=74176 hint_alias="D"@"SEL$2" + fro(6): flg=0 objn=74173 hint_alias="I"@"SEL$2" + +----------------------------- +SYSTEM STATISTICS INFORMATION +----------------------------- + Using WORKLOAD Stats + CPUSPEED: 1319 millions instructions/sec + SREADTIM: 277242.072000 milliseconds + MREADTIM: 1191005.357000 millisecons + MBRC: 9 blocks + MAXTHR: -1 bytes/sec + SLAVETHR: -1 bytes/sec + +*************************************** +BASE STATISTICAL INFORMATION +*********************** +Table Stats:: + Table: DEPARTMENTS Alias: D + #Rows: 27 #Blks: 5 AvgRowLen: 21.00 +Index Stats:: + Index: DEPT_ID_PK Col#: 1 + LVLS: 0 #LB: 1 #DK: 27 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 + Index: DEPT_LOCATION_IX Col#: 4 + LVLS: 0 #LB: 1 #DK: 7 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 +*********************** +Table Stats:: + Table: EMPLOYEES Alias: E + #Rows: 107 #Blks: 5 AvgRowLen: 69.00 +Index Stats:: + Index: EMP_DEPARTMENT_IX Col#: 11 + LVLS: 0 #LB: 1 #DK: 11 LB/K: 1.00 DB/K: 1.00 CLUF: 7.00 + Index: EMP_EMAIL_UK Col#: 4 + LVLS: 0 #LB: 1 #DK: 107 LB/K: 1.00 DB/K: 1.00 CLUF: 19.00 + Index: EMP_EMP_ID_PK Col#: 1 + LVLS: 0 #LB: 1 #DK: 107 LB/K: 1.00 DB/K: 1.00 CLUF: 2.00 + Index: EMP_JOB_IX Col#: 7 + LVLS: 0 #LB: 1 #DK: 19 LB/K: 1.00 DB/K: 1.00 CLUF: 8.00 + Index: EMP_MANAGER_IX Col#: 10 + LVLS: 0 #LB: 1 #DK: 18 LB/K: 1.00 DB/K: 1.00 CLUF: 7.00 + Index: EMP_NAME_IX Col#: 3 2 + LVLS: 0 #LB: 1 #DK: 107 LB/K: 1.00 DB/K: 1.00 CLUF: 15.00 +*********************** +Table Stats:: + Table: CUSTOMERS Alias: C + #Rows: 319 #Blks: 13 AvgRowLen: 169.00 +Index Stats:: + Index: CUSTOMERS_PK Col#: 1 + LVLS: 0 #LB: 1 #DK: 319 LB/K: 1.00 DB/K: 1.00 CLUF: 8.00 + Index: CUST_ACCOUNT_MANAGER_IX Col#: 15 + LVLS: 0 #LB: 1 #DK: 4 LB/K: 1.00 DB/K: 4.00 CLUF: 18.00 + Index: CUST_EMAIL_IX Col#: 14 + LVLS: 1 #LB: 2 #DK: 319 LB/K: 1.00 DB/K: 1.00 CLUF: 139.00 + Index: CUST_LNAME_IX Col#: 3 + LVLS: 0 #LB: 1 #DK: 176 LB/K: 1.00 DB/K: 1.00 CLUF: 271.00 + Index: CUST_UPPER_NAME_IX Col#: 28 29 + LVLS: 1 #LB: 2 #DK: 319 LB/K: 1.00 DB/K: 1.00 CLUF: 278.00 + Index: SYS_IL0000074142C00022$$ Col#: (NOT ANALYZED) + LVLS: 1 #LB: 25 #DK: 100 LB/K: 1.00 DB/K: 1.00 CLUF: 800.00 + Index: SYS_IL0000074142C00023$$ Col#: (NOT ANALYZED) + LVLS: 1 #LB: 25 #DK: 100 LB/K: 1.00 DB/K: 1.00 CLUF: 800.00 +*********************** +Table Stats:: + Table: PRODUCT_DESCRIPTIONS Alias: D + #Rows: 8640 #Blks: 370 AvgRowLen: 283.00 +Index Stats:: + Index: PRD_DESC_PK Col#: 1 2 + LVLS: 1 #LB: 32 #DK: 8640 LB/K: 1.00 DB/K: 1.00 CLUF: 8640.00 + Index: PROD_NAME_IX Col#: 3 + LVLS: 1 #LB: 53 #DK: 3727 LB/K: 1.00 DB/K: 1.00 CLUF: 6794.00 +*********************** +Table Stats:: + Table: PRODUCT_INFORMATION Alias: I + #Rows: 288 #Blks: 13 AvgRowLen: 219.00 +Index Stats:: + Index: PRODUCT_INFORMATION_PK Col#: 1 + LVLS: 0 #LB: 1 #DK: 288 LB/K: 1.00 DB/K: 1.00 CLUF: 140.00 + Index: PROD_SUPPLIER_IX Col#: 7 + LVLS: 0 #LB: 1 #DK: 62 LB/K: 1.00 DB/K: 1.00 CLUF: 121.00 +*********************** +Table Stats:: + Table: ORDER_ITEMS Alias: OI + #Rows: 665 #Blks: 5 AvgRowLen: 18.00 +Index Stats:: + Index: ITEM_ORDER_IX Col#: 1 + LVLS: 1 #LB: 2 #DK: 105 LB/K: 1.00 DB/K: 1.00 CLUF: 196.00 + Index: ITEM_PRODUCT_IX Col#: 3 + LVLS: 1 #LB: 2 #DK: 185 LB/K: 1.00 DB/K: 1.00 CLUF: 162.00 + Index: ORDER_ITEMS_PK Col#: 1 2 + LVLS: 1 #LB: 2 #DK: 665 LB/K: 1.00 DB/K: 1.00 CLUF: 196.00 + Index: ORDER_ITEMS_UK Col#: 1 3 + LVLS: 1 #LB: 2 #DK: 665 LB/K: 1.00 DB/K: 1.00 CLUF: 196.00 +*********************** +Table Stats:: + Table: ORDERS Alias: O + #Rows: 105 #Blks: 13 AvgRowLen: 37.00 +Index Stats:: + Index: ORDER_PK Col#: 1 + LVLS: 1 #LB: 1 #DK: 105 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 + Index: ORD_CUSTOMER_IX Col#: 4 + LVLS: 1 #LB: 1 #DK: 47 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 + Index: ORD_ORDER_DATE_IX Col#: 2 + LVLS: 1 #LB: 1 #DK: 105 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 + Index: ORD_SALES_REP_IX Col#: 7 + LVLS: 1 #LB: 1 #DK: 9 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 +Access path analysis for ORDERS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for ORDERS[O] + + Table: ORDERS Alias: O + Card: Original: 105.000000 Rounded: 70 Computed: 70.00 Non Adjusted: 70.00 + Access Path: TableScan + Cost: 8.00 Resp: 8.00 Degree: 0 + Cost_io: 8.00 Cost_cpu: 126529 + Resp_io: 8.00 Resp_cpu: 126529 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 3.00 resc_cpu: 72814 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 3.00 Resp: 3.00 Degree: 1 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 57998 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 3.00 Resp: 3.00 Degree: 1 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** +******** Begin index join costing ******** + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 35243 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Bitmap nodes: + Used ORD_CUSTOMER_IX + Cost = 3.000094, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + Access Path: index (FullScan) + Index: ORDER_PK + resc_io: 2.00 resc_cpu: 35243 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 0 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 28243 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 0 + +******** Cost index join ******** + +Index join: Joining index ORD_CUSTOMER_IX +Index join: Joining index ORDER_PK +Ix HA Join + Outer table: ORDERS Alias: O + resc: 2.00 card 105.00 bytes: 14 deg: 1 resp: 2.00 + Inner table: Alias: + resc: 2.00 card: 105.00 bytes: 14 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 4.50 Resp: 4.50 [multiMatchCost=0.00] +Index join: Joining index ORD_SALES_REP_IX +Ix HA Join + Outer table: ORDERS Alias: O + resc: 2.00 card 105.00 bytes: 28 deg: 1 resp: 2.00 + Inner table: Alias: + resc: 2.00 card: 105.00 bytes: 13 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 4.50 Resp: 4.50 [multiMatchCost=0.00] + +******** Index join cost ******** + +Cost: 9.00 +******** End index join costing ******** + Best:: AccessPath: IndexRange + Index: ORD_SALES_REP_IX + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 70.00 Bytes: 0 + +Access path analysis for ORDER_ITEMS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for ORDER_ITEMS[OI] + Table: ORDER_ITEMS Alias: OI + Card: Original: 665.000000 Rounded: 665 Computed: 665.00 Non Adjusted: 665.00 + Access Path: TableScan + Cost: 4.00 Resp: 4.00 Degree: 0 + Cost_io: 4.00 Cost_cpu: 188557 + Resp_io: 4.00 Resp_cpu: 188557 + Best:: AccessPath: TableScan + Cost: 4.00 Degree: 1 Resp: 4.00 Card: 665.00 Bytes: 0 + +Access path analysis for PRODUCT_INFORMATION +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for PRODUCT_INFORMATION[I] + Table: PRODUCT_INFORMATION Alias: I + Card: Original: 288.000000 Rounded: 288 Computed: 288.00 Non Adjusted: 288.00 + Access Path: TableScan + Cost: 8.00 Resp: 8.00 Degree: 0 + Cost_io: 8.00 Cost_cpu: 141539 + Resp_io: 8.00 Resp_cpu: 141539 + Best:: AccessPath: TableScan + Cost: 8.00 Degree: 1 Resp: 8.00 Card: 288.00 Bytes: 0 + +Access path analysis for PRODUCT_DESCRIPTIONS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for PRODUCT_DESCRIPTIONS[D] + Table: PRODUCT_DESCRIPTIONS Alias: D + Card: Original: 8640.000000 Rounded: 288 Computed: 288.00 Non Adjusted: 288.00 + Access Path: TableScan + Cost: 179.00 Resp: 179.00 Degree: 0 + Cost_io: 179.00 Cost_cpu: 6701493 + Resp_io: 179.00 Resp_cpu: 6701493 +kkofmx: index filter:"D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') + + + Access Path: index (skip-scan) + SS sel: 0.033333 ANDV (#skips): 288.000000 + SS io: 288.000000 vs. table scan io: 179.000000 + Skip Scan rejected + + Access Path: index (FullScan) + Index: PRD_DESC_PK + resc_io: 321.00 resc_cpu: 4068702 + ix_sel: 1.000000 ix_sel_with_filters: 0.033333 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 300.00 + ***** End Logdef Adjustment ****** + Cost: 321.00 Resp: 321.00 Degree: 1 +******** Begin index join costing ******** + ****** trying bitmap/domain indexes ****** + Access Path: index (FullScan) + Index: PRD_DESC_PK + resc_io: 33.00 resc_cpu: 1963008 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 33.00 Resp: 33.00 Degree: 0 + Access Path: index (FullScan) + Index: PROD_NAME_IX + resc_io: 54.00 resc_cpu: 2112558 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 54.00 Resp: 54.00 Degree: 0 + Access Path: index (FullScan) + Index: PRD_DESC_PK + resc_io: 33.00 resc_cpu: 1963008 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 33.00 Resp: 33.00 Degree: 0 + Bitmap nodes: + Used PRD_DESC_PK + Cost = 41.250007, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + Access Path: index (FullScan) + Index: PROD_NAME_IX + resc_io: 54.00 resc_cpu: 2112558 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 54.00 Resp: 54.00 Degree: 0 + +******** Cost index join ******** + +Index join: Joining index PRD_DESC_PK +Index join: Joining index PROD_NAME_IX +Ix HA Join + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 33.00 card 8640.00 bytes: 17 deg: 1 resp: 33.00 + Inner table: Alias: + resc: 54.00 card: 8640.00 bytes: 43 deg: 1 resp: 54.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 31 probefrag: 59 ppasses: 1 + Hash join: Resc: 87.50 Resp: 87.50 [multiMatchCost=0.00] + +******** Index join cost ******** + +Cost: 87.50 + +******** Index join OK ******** + +******** End index join costing ******** + Best:: AccessPath: IndexJoin + Cost: 87.50 Degree: 1 Resp: 87.50 Card: 288.00 Bytes: 0 + +Access path analysis for CUSTOMERS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for CUSTOMERS[C] + ColGroup (#1, Index) CUST_UPPER_NAME_IX + Col#: 28 29 CorStregth: 93.79 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: + Table: CUSTOMERS Alias: C + Card: Original: 319.000000 Rounded: 1 Computed: 0.01 Non Adjusted: 0.01 + Access Path: TableScan + Cost: 8.00 Resp: 8.00 Degree: 0 + Cost_io: 8.00 Cost_cpu: 169229 + Resp_io: 8.00 Resp_cpu: 169229 + Access Path: index (AllEqRange) + Index: CUST_LNAME_IX + resc_io: 3.00 resc_cpu: 22235 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + Cost: 3.00 Resp: 3.00 Degree: 1 + Best:: AccessPath: IndexRange + Index: CUST_LNAME_IX + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 0.01 Bytes: 0 + +Access path analysis for EMPLOYEES +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for EMPLOYEES[E] + ColGroup (#1, Index) EMP_NAME_IX + Col#: 2 3 CorStregth: 86.75 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Table: EMPLOYEES Alias: E + Card: Original: 107.000000 Rounded: 1 Computed: 1.00 Non Adjusted: 1.00 + Access Path: TableScan + Cost: 4.00 Resp: 4.00 Degree: 0 + Cost_io: 4.00 Cost_cpu: 61500 + Resp_io: 4.00 Resp_cpu: 61500 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqRange) + Index: EMP_NAME_IX + resc_io: 2.00 resc_cpu: 14793 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + Cost: 2.00 Resp: 2.00 Degree: 1 +******** Begin index join costing ******** + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqRange) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 7321 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + Cost: 1.00 Resp: 1.00 Degree: 0 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 1.000000, sel = 0.009346 + ****** finished trying bitmap/domain indexes ****** + Access Path: index (FullScan) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 28321 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 1.00 Resp: 1.00 Degree: 0 + Access Path: index (FullScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 28521 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 1.00 Resp: 1.00 Degree: 0 + +******** Cost index join ******** + +Index join: Joining index EMP_NAME_IX +Index join: Joining index EMP_DEPARTMENT_IX +Ix HA Join + Outer table: EMPLOYEES Alias: E + resc: 1.00 card 1.00 bytes: 25 deg: 1 resp: 1.00 + Inner table: Alias: + resc: 1.00 card: 107.00 bytes: 13 deg: 1 resp: 1.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 2.50 Resp: 2.50 [multiMatchCost=0.00] +Index join: Joining index EMP_EMP_ID_PK +Ix HA Join + Outer table: EMPLOYEES Alias: E + resc: 1.00 card 1.00 bytes: 38 deg: 1 resp: 1.00 + Inner table: Alias: + resc: 1.00 card: 107.00 bytes: 14 deg: 1 resp: 1.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 2.50 Resp: 2.50 [multiMatchCost=0.00] + +******** Index join cost ******** + +Cost: 5.00 +******** End index join costing ******** + Best:: AccessPath: IndexRange + Index: EMP_NAME_IX + Cost: 2.00 Degree: 1 Resp: 2.00 Card: 1.00 Bytes: 0 + +Access path analysis for DEPARTMENTS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for DEPARTMENTS[D] + Table: DEPARTMENTS Alias: D + Card: Original: 27.000000 Rounded: 1 Computed: 1.00 Non Adjusted: 1.00 + Access Path: TableScan + Cost: 4.00 Resp: 4.00 Degree: 0 + Cost_io: 4.00 Cost_cpu: 41547 + Resp_io: 4.00 Resp_cpu: 41547 + Best:: AccessPath: TableScan + Cost: 4.00 Degree: 1 Resp: 4.00 Card: 1.00 Bytes: 0 + +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 +*************************************** + + +OPTIMIZER STATISTICS AND COMPUTATIONS +*************************************** +GENERAL PLANS +*************************************** +Considering cardinality-based initial join order. +Permutations for Starting Table :0 +Join order[1]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 DEPARTMENTS[D]#1 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.01 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 19 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 150514 + Resp_io: 11.00 Resp_cpu: 150514 +kkofmx: index filter:"O"."CUSTOMER_ID">0 + +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (AllEqJoinGuess) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 16548 + ix_sel: 0.021277 ix_sel_with_filters: 0.021277 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 50.00 + ***** End Logdef Adjustment ****** + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 38883 + Resp_io: 5.00 Resp_cpu: 38883 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 59164 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 81399 + Resp_io: 6.00 Resp_cpu: 81399 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 38883 + resp: 5.00 resp_io: 5.00 resc_cpu: 38883 +Join Card: 0.017255 = = outer (0.010599) * inner (70.000000) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.02 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364685499 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364685499 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841233867 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841233867 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.02 Bytes: 30 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 117348 + Resp_io: 9.00 Resp_cpu: 117348 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47404 + Resp_io: 6.00 Resp_cpu: 47404 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 5.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 5.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 6.00 + resc: 6.00 resc_io: 6.00 resc_cpu: 47404 + resp: 6.00 resp_io: 6.00 resc_cpu: 47404 +Join Card: 0.001917 = = outer (0.017255) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364639611 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364639611 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841200409 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841200409 +Best:: JoinMethod: NestedLoop + Cost: 6.00 Degree: 1 Resp: 6.00 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 88951 + Resp_io: 10.00 Resp_cpu: 88951 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + + Best NL cost: 7.00 + resc: 7.00 resc_io: 7.00 resc_cpu: 55795 + resp: 7.00 resp_io: 7.00 resc_cpu: 55795 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364674887 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364674887 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841235685 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841235685 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 244353 + Resp_io: 11.00 Resp_cpu: 244353 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +SM Join + SM cost: 13.00 + resc: 13.00 resc_io: 11.00 resc_cpu: 731365111242 + resp: 13.00 resp_io: 11.00 resp_cpu: 731365111242 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 11.50 Resp: 11.50 [multiMatchCost=0.00] +HA Join + HA cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841457487 + resp: 11.50 resp_io: 11.00 resp_cpu: 182841457487 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup (#1, Index) PRD_DESC_PK + Col#: 1 2 CorStregth: 1.00 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Best:: JoinMethod: NestedLoop + Cost: 14.00 Degree: 1 Resp: 14.00 Card: 0.01 Bytes: 144 +*********************** +Best so far: Table#: 0 cost: 3.0000 card: 0.0106 bytes: 19 + Table#: 3 cost: 5.0000 card: 0.0173 bytes: 30 + Table#: 2 cost: 6.0000 card: 0.0019 bytes: 52 + Table#: 1 cost: 7.0000 card: 0.0019 bytes: 68 + Table#: 6 cost: 10.0000 card: 0.0120 bytes: 84 + Table#: 4 cost: 11.0000 card: 0.0120 bytes: 104 + Table#: 5 cost: 14.0000 card: 0.0120 bytes: 144 +*********************** +Join order[2]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 ORDER_ITEMS[OI]#6 DEPARTMENTS[D]#1 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 235961 + Resp_io: 10.00 Resp_cpu: 235961 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72628 + Resp_io: 9.00 Resp_cpu: 72628 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72628 + Resp_io: 9.00 Resp_cpu: 72628 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72628 + Resp_io: 9.00 Resp_cpu: 72628 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 72628 + resp: 9.00 resp_io: 9.00 resc_cpu: 72628 +Join Card: 0.012142 = = outer (0.001917) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731365102850 + resp: 12.00 resp_io: 10.00 resp_cpu: 731365102850 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841449095 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841449095 +Best:: JoinMethod: NestedLoop + Cost: 9.00 Degree: 1 Resp: 9.00 Card: 0.01 Bytes: 68 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 9.00 Resp: 9.00 Degree: 1 Bytes: 68 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 114175 + Resp_io: 13.00 Resp_cpu: 114175 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +SM Join + SM cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364700111 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364700111 + Outer table: ORDER_ITEMS Alias: OI + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 13.50 Resp: 13.50 [multiMatchCost=0.00] +HA Join + HA cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841260909 + resp: 13.50 resp_io: 13.00 resp_cpu: 182841260909 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: DEPARTMENTS Alias: D + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Join order[3]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 DEPARTMENTS[D]#1 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 9.00 Resp: 9.00 Degree: 1 Bytes: 68 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 17.00 Resp: 17.00 Degree: 1 + Cost_io: 17.00 Cost_cpu: 214167 + Resp_io: 17.00 Resp_cpu: 214167 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 80970 + Resp_io: 10.00 Resp_cpu: 80970 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 80970 + Resp_io: 10.00 Resp_cpu: 80970 + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 80970 + resp: 10.00 resp_io: 10.00 resc_cpu: 80970 +Join Card: 0.012142 = = outer (0.012142) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 19.00 Resp: 19.00 [multiMatchCost=0.00] +SM Join + SM cost: 19.00 + resc: 19.00 resc_io: 17.00 resc_cpu: 731364906114 + resp: 19.00 resp_io: 17.00 resp_cpu: 731364906114 + Outer table: ORDER_ITEMS Alias: OI + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 17.50 Resp: 17.50 [multiMatchCost=0.00] +HA Join + HA cost: 17.50 + resc: 17.50 resc_io: 17.00 resc_cpu: 182841389601 + resp: 17.50 resp_io: 17.00 resp_cpu: 182841389601 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 88 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 88 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 14.00 Resp: 14.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 122517 + Resp_io: 14.00 Resp_cpu: 122517 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 107 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 16.00 Resp: 16.00 [multiMatchCost=0.00] +SM Join + SM cost: 16.00 + resc: 16.00 resc_io: 14.00 resc_cpu: 731364708453 + resp: 16.00 resp_io: 14.00 resp_cpu: 731364708453 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +HA Join + HA cost: 14.50 + resc: 14.50 resc_io: 14.00 resc_cpu: 182841269251 + resp: 14.50 resp_io: 14.00 resp_cpu: 182841269251 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: DEPARTMENTS Alias: D + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Best:: JoinMethod: NestedLoop + Cost: 14.00 Degree: 1 Resp: 14.00 Card: 0.01 Bytes: 144 +*********************** +Best so far: Table#: 0 cost: 3.0000 card: 0.0106 bytes: 19 + Table#: 3 cost: 5.0000 card: 0.0173 bytes: 30 + Table#: 2 cost: 6.0000 card: 0.0019 bytes: 52 + Table#: 6 cost: 9.0000 card: 0.0121 bytes: 68 + Table#: 4 cost: 10.0000 card: 0.0121 bytes: 88 + Table#: 1 cost: 11.0000 card: 0.0120 bytes: 104 + Table#: 5 cost: 14.0000 card: 0.0120 bytes: 144 +*********************** +Join order[4]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 DEPARTMENTS[D]#1 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 88 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 189.00 Resp: 189.00 Degree: 1 + Cost_io: 189.00 Cost_cpu: 6782463 + Resp_io: 189.00 Resp_cpu: 6782463 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 90181 + Resp_io: 11.00 Resp_cpu: 90181 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 90181 + Resp_io: 11.00 Resp_cpu: 90181 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 90181 + resp: 11.00 resp_io: 11.00 resc_cpu: 90181 +Outer Join Card: 0.012142 = max ( outer (0.012142),(outer (0.012142) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 107 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 99.50 Resp: 99.50 [multiMatchCost=0.00] +SM Join + SM cost: 99.50 + resc: 99.50 resc_io: 97.00 resc_cpu: 914212154966 + resp: 99.50 resp_io: 97.00 resp_cpu: 914212154966 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 98.00 Resp: 98.00 [multiMatchCost=0.00] +HA Join + HA cost: 98.00 + resc: 98.00 resc_io: 97.00 resc_cpu: 365688638453 + resp: 98.00 resp_io: 97.00 resp_cpu: 365688638453 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 128 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 128 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 15.00 Cost_cpu: 131728 + Resp_io: 15.00 Resp_cpu: 131728 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 11.00 card 0.01 bytes: 128 deg: 1 resp: 11.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 151 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 17.00 Resp: 17.00 [multiMatchCost=0.00] +SM Join + SM cost: 17.00 + resc: 17.00 resc_io: 15.00 resc_cpu: 731364717664 + resp: 17.00 resp_io: 15.00 resp_cpu: 731364717664 + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 11.00 card 0.01 bytes: 128 deg: 1 resp: 11.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 15.50 Resp: 15.50 [multiMatchCost=0.00] +HA Join + HA cost: 15.50 + resc: 15.50 resc_io: 15.00 resc_cpu: 182841278462 + resp: 15.50 resp_io: 15.00 resp_cpu: 182841278462 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Join order aborted: cost > best plan cost +*********************** +Join order[5]: CUSTOMERS[C]#0 ORDERS[O]#3 ORDER_ITEMS[OI]#6 EMPLOYEES[E]#2 DEPARTMENTS[D]#1 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 227440 + Resp_io: 9.00 Resp_cpu: 227440 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 64107 + Resp_io: 8.00 Resp_cpu: 64107 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 64107 + Resp_io: 8.00 Resp_cpu: 64107 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 64107 + Resp_io: 8.00 Resp_cpu: 64107 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 8.00 + resc: 8.00 resc_io: 8.00 resc_cpu: 64107 + resp: 8.00 resp_io: 8.00 resc_cpu: 64107 +Join Card: 0.109281 = = outer (0.017255) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.11 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 11.00 Resp: 11.00 [multiMatchCost=0.00] +SM Join + SM cost: 11.00 + resc: 11.00 resc_io: 9.00 resc_cpu: 731365094329 + resp: 11.00 resp_io: 9.00 resp_cpu: 731365094329 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 9.50 Resp: 9.50 [multiMatchCost=0.00] +HA Join + HA cost: 9.50 + resc: 9.50 resc_io: 9.00 resc_cpu: 182841440574 + resp: 9.50 resp_io: 9.00 resp_cpu: 182841440574 +Best:: JoinMethod: NestedLoop + Cost: 8.00 Degree: 1 Resp: 8.00 Card: 0.11 Bytes: 46 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 0.11 Cost: 8.00 Resp: 8.00 Degree: 1 Bytes: 46 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 142573 + Resp_io: 12.00 Resp_cpu: 142573 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72679 + Resp_io: 9.00 Resp_cpu: 72679 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72679 + Resp_io: 9.00 Resp_cpu: 72679 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72628 + Resp_io: 9.00 Resp_cpu: 72628 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 65157 + Resp_io: 8.00 Resp_cpu: 65157 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 65157 + Resp_io: 8.00 Resp_cpu: 65157 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 8.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 8.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 72628 + resp: 9.00 resp_io: 9.00 resc_cpu: 72628 +Join Card: 0.012142 = = outer (0.109281) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 8.00 card 0.11 bytes: 46 deg: 1 resp: 8.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 61 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364664836 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364664836 + Outer table: ORDER_ITEMS Alias: OI + resc: 8.00 card 0.11 bytes: 46 deg: 1 resp: 8.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841225634 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841225634 +Best:: JoinMethod: NestedLoop + Cost: 9.00 Degree: 1 Resp: 9.00 Card: 0.01 Bytes: 68 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 9.00 Resp: 9.00 Degree: 1 Bytes: 68 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 114175 + Resp_io: 13.00 Resp_cpu: 114175 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +SM Join + SM cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364700111 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364700111 + Outer table: EMPLOYEES Alias: E + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 13.50 Resp: 13.50 [multiMatchCost=0.00] +HA Join + HA cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841260909 + resp: 13.50 resp_io: 13.00 resp_cpu: 182841260909 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: DEPARTMENTS Alias: D + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Join order[6]: CUSTOMERS[C]#0 ORDERS[O]#3 ORDER_ITEMS[OI]#6 EMPLOYEES[E]#2 PRODUCT_INFORMATION[I]#4 DEPARTMENTS[D]#1 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 9.00 Resp: 9.00 Degree: 1 Bytes: 68 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 17.00 Resp: 17.00 Degree: 1 + Cost_io: 17.00 Cost_cpu: 214167 + Resp_io: 17.00 Resp_cpu: 214167 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 80970 + Resp_io: 10.00 Resp_cpu: 80970 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 80970 + Resp_io: 10.00 Resp_cpu: 80970 + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 80970 + resp: 10.00 resp_io: 10.00 resc_cpu: 80970 +Join Card: 0.012142 = = outer (0.012142) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 19.00 Resp: 19.00 [multiMatchCost=0.00] +SM Join + SM cost: 19.00 + resc: 19.00 resc_io: 17.00 resc_cpu: 731364906114 + resp: 19.00 resp_io: 17.00 resp_cpu: 731364906114 + Outer table: EMPLOYEES Alias: E + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 17.50 Resp: 17.50 [multiMatchCost=0.00] +HA Join + HA cost: 17.50 + resc: 17.50 resc_io: 17.00 resc_cpu: 182841389601 + resp: 17.50 resp_io: 17.00 resp_cpu: 182841389601 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 88 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 88 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 14.00 Resp: 14.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 122517 + Resp_io: 14.00 Resp_cpu: 122517 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 107 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 16.00 Resp: 16.00 [multiMatchCost=0.00] +SM Join + SM cost: 16.00 + resc: 16.00 resc_io: 14.00 resc_cpu: 731364708453 + resp: 16.00 resp_io: 14.00 resp_cpu: 731364708453 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +HA Join + HA cost: 14.50 + resc: 14.50 resc_io: 14.00 resc_cpu: 182841269251 + resp: 14.50 resp_io: 14.00 resp_cpu: 182841269251 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: DEPARTMENTS Alias: D + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Join order[7]: CUSTOMERS[C]#0 ORDERS[O]#3 ORDER_ITEMS[OI]#6 EMPLOYEES[E]#2 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 DEPARTMENTS[D]#1 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 88 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 189.00 Resp: 189.00 Degree: 1 + Cost_io: 189.00 Cost_cpu: 6782463 + Resp_io: 189.00 Resp_cpu: 6782463 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 90181 + Resp_io: 11.00 Resp_cpu: 90181 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 90181 + Resp_io: 11.00 Resp_cpu: 90181 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 90181 + resp: 11.00 resp_io: 11.00 resc_cpu: 90181 +Outer Join Card: 0.012142 = max ( outer (0.012142),(outer (0.012142) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 107 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 99.50 Resp: 99.50 [multiMatchCost=0.00] +SM Join + SM cost: 99.50 + resc: 99.50 resc_io: 97.00 resc_cpu: 914212154966 + resp: 99.50 resp_io: 97.00 resp_cpu: 914212154966 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 98.00 Resp: 98.00 [multiMatchCost=0.00] +HA Join + HA cost: 98.00 + resc: 98.00 resc_io: 97.00 resc_cpu: 365688638453 + resp: 98.00 resp_io: 97.00 resp_cpu: 365688638453 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 128 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 128 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 15.00 Cost_cpu: 131728 + Resp_io: 15.00 Resp_cpu: 131728 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 11.00 card 0.01 bytes: 128 deg: 1 resp: 11.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 151 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 17.00 Resp: 17.00 [multiMatchCost=0.00] +SM Join + SM cost: 17.00 + resc: 17.00 resc_io: 15.00 resc_cpu: 731364717664 + resp: 17.00 resp_io: 15.00 resp_cpu: 731364717664 + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 11.00 card 0.01 bytes: 128 deg: 1 resp: 11.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 15.50 Resp: 15.50 [multiMatchCost=0.00] +HA Join + HA cost: 15.50 + resc: 15.50 resc_io: 15.00 resc_cpu: 182841278462 + resp: 15.50 resp_io: 15.00 resp_cpu: 182841278462 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :1 +Join order[8]: EMPLOYEES[E]#2 DEPARTMENTS[D]#1 ORDERS[O]#3 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 1.00 Cost: 2.00 Resp: 2.00 Degree: 1 Bytes: 22 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 56340 + Resp_io: 6.00 Resp_cpu: 56340 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + + Best NL cost: 3.00 + resc: 3.00 resc_io: 3.00 resc_cpu: 23184 + resp: 3.00 resp_io: 3.00 resc_cpu: 23184 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: NestedLoop + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 151463 + Resp_io: 11.00 Resp_cpu: 151463 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 89727 + Resp_io: 5.00 Resp_cpu: 89727 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 42582 + Resp_io: 5.00 Resp_cpu: 42582 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 52156 + Resp_io: 4.00 Resp_cpu: 52156 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 33556 + Resp_io: 4.00 Resp_cpu: 33556 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 4.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 5.000188, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 42582 + resp: 5.00 resp_io: 5.00 resc_cpu: 42582 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364686449 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364686449 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841234816 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841234816 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 32.00 Resp: 32.00 Degree: 1 + Cost_io: 32.00 Cost_cpu: 719510 + Resp_io: 32.00 Resp_cpu: 719510 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 106436 + Resp_io: 13.00 Resp_cpu: 106436 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 46782 + Resp_io: 5.00 Resp_cpu: 46782 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 47582 + Resp_io: 5.00 Resp_cpu: 47582 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 5.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 5.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 76229 + resp: 9.00 resp_io: 9.00 resc_cpu: 76229 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 8.00 resc_cpu: 731364651113 + resp: 10.00 resp_io: 8.00 resp_cpu: 731364651113 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 8.00 resc_cpu: 182841212001 + resp: 8.50 resp_io: 8.00 resp_cpu: 182841212001 +Best:: JoinMethod: Hash + Cost: 8.50 Degree: 1 Resp: 8.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.00 Cost: 8.50 Resp: 8.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841400558 + Resp_io: 12.00 Resp_cpu: 182841400558 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841237225 + resp: 11.50 resp_io: 11.00 resc_cpu: 182841237225 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +SM Join + SM cost: 14.50 + resc: 14.50 resc_io: 12.00 resc_cpu: 914206267447 + resp: 14.50 resp_io: 12.00 resp_cpu: 914206267447 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +HA Join + HA cost: 13.00 + resc: 13.00 resc_io: 12.00 resc_cpu: 365682613692 + resp: 13.00 resp_io: 12.00 resp_cpu: 365682613692 +Best:: JoinMethod: NestedLoop + Cost: 11.50 Degree: 1 Resp: 11.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.50 Resp: 11.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 19.50 Resp: 19.50 Degree: 1 + Cost_io: 19.00 Cost_cpu: 182841378764 + Resp_io: 19.00 Resp_cpu: 182841378764 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + + Best NL cost: 12.50 + resc: 12.50 resc_io: 12.00 resc_cpu: 182841245566 + resp: 12.50 resp_io: 12.00 resc_cpu: 182841245566 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 21.50 Resp: 21.50 [multiMatchCost=0.00] +SM Join + SM cost: 21.50 + resc: 21.50 resc_io: 19.00 resc_cpu: 914206070710 + resp: 21.50 resp_io: 19.00 resp_cpu: 914206070710 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +HA Join + HA cost: 20.00 + resc: 20.00 resc_io: 19.00 resc_cpu: 365682554198 + resp: 20.00 resp_io: 19.00 resp_cpu: 365682554198 +Best:: JoinMethod: NestedLoop + Cost: 12.50 Degree: 1 Resp: 12.50 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 12.50 Resp: 12.50 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 191.50 Resp: 191.50 Degree: 1 + Cost_io: 191.00 Cost_cpu: 182847947059 + Resp_io: 191.00 Resp_cpu: 182847947059 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + + Best NL cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841254778 + resp: 13.50 resp_io: 13.00 resc_cpu: 182841254778 +Outer Join Card: 0.006014 = max ( outer (0.006014),(outer (0.006014) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 102.00 Resp: 102.00 [multiMatchCost=0.00] +SM Join + SM cost: 102.00 + resc: 102.00 resc_io: 99.00 resc_cpu: 1097053319562 + resp: 102.00 resp_io: 99.00 resp_cpu: 1097053319562 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +HA Join + HA cost: 100.50 + resc: 100.50 resc_io: 99.00 resc_cpu: 548529803050 + resp: 100.50 resp_io: 99.00 resp_cpu: 548529803050 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.00601441537 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :2 +Join order[9]: DEPARTMENTS[D]#1 EMPLOYEES[E]#2 ORDERS[O]#3 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 1.00 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 16 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 120013 + Resp_io: 8.00 Resp_cpu: 120013 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 13963 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 55510 + Resp_io: 5.00 Resp_cpu: 55510 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 50069 + Resp_io: 5.00 Resp_cpu: 50069 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42597 + Resp_io: 4.00 Resp_cpu: 42597 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 0.00 resc_cpu: 2850 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44397 + Resp_io: 4.00 Resp_cpu: 44397 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 4.000000, sel = 0.009346 + Not used EMP_DEPARTMENT_IX + Cost = 4.000000, sel = 0.495327 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 50069 + resp: 5.00 resp_io: 5.00 resc_cpu: 50069 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 +SM Join (with index on outer) + Access Path: index (FullScan) + Index: DEPT_ID_PK + resc_io: 2.00 resc_cpu: 25583 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 1 + Outer table: DEPARTMENTS Alias: D + resc: 2.00 card 1.00 bytes: 16 deg: 1 resp: 2.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 5.00 Resp: 5.00 [multiMatchCost=0.00] + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: SortMerge + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 365682461622 + Resp_io: 12.00 Resp_cpu: 365682461622 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682399887 + Resp_io: 6.00 Resp_cpu: 365682399887 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682352741 + Resp_io: 6.00 Resp_cpu: 365682352741 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682362315 + Resp_io: 5.00 Resp_cpu: 365682362315 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682343715 + Resp_io: 5.00 Resp_cpu: 365682343715 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 6.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 7.000235, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 7.00 + resc: 7.00 resc_io: 6.00 resc_cpu: 365682352741 + resp: 7.00 resp_io: 6.00 resc_cpu: 365682352741 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 7.00 resc_cpu: 1097046996608 + resp: 10.00 resp_io: 7.00 resp_cpu: 1097046996608 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 7.00 resc_cpu: 548523544975 + resp: 8.50 resp_io: 7.00 resp_cpu: 548523544975 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 34.00 Resp: 34.00 Degree: 1 + Cost_io: 33.00 Cost_cpu: 365683029669 + Resp_io: 33.00 Resp_cpu: 365683029669 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 365682416595 + Resp_io: 14.00 Resp_cpu: 365682416595 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682356941 + Resp_io: 6.00 Resp_cpu: 365682356941 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682357741 + Resp_io: 6.00 Resp_cpu: 365682357741 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 7.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 7.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.00 + resc: 11.00 resc_io: 10.00 resc_cpu: 365682386388 + resp: 11.00 resp_io: 10.00 resc_cpu: 365682386388 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 9.00 resc_cpu: 1097046961272 + resp: 12.00 resp_io: 9.00 resp_cpu: 1097046961272 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 9.00 resc_cpu: 548523522160 + resp: 10.50 resp_io: 9.00 resp_cpu: 548523522160 +Best:: JoinMethod: Hash + Cost: 10.50 Degree: 1 Resp: 10.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.00 Cost: 10.50 Resp: 10.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523710717 + Resp_io: 13.00 Resp_cpu: 548523710717 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 13.50 + resc: 13.50 resc_io: 12.00 resc_cpu: 548523547384 + resp: 13.50 resp_io: 12.00 resc_cpu: 548523547384 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 16.50 Resp: 16.50 [multiMatchCost=0.00] +SM Join + SM cost: 16.50 + resc: 16.50 resc_io: 13.00 resc_cpu: 1279888577607 + resp: 16.50 resp_io: 13.00 resp_cpu: 1279888577607 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +HA Join + HA cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364923851 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364923851 +Best:: JoinMethod: NestedLoop + Cost: 13.50 Degree: 1 Resp: 13.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 13.50 Resp: 13.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 21.50 Resp: 21.50 Degree: 1 + Cost_io: 20.00 Cost_cpu: 548523688923 + Resp_io: 20.00 Resp_cpu: 548523688923 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + + Best NL cost: 14.50 + resc: 14.50 resc_io: 13.00 resc_cpu: 548523555726 + resp: 14.50 resp_io: 13.00 resc_cpu: 548523555726 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 23.50 Resp: 23.50 [multiMatchCost=0.00] +SM Join + SM cost: 23.50 + resc: 23.50 resc_io: 20.00 resc_cpu: 1279888380870 + resp: 23.50 resp_io: 20.00 resp_cpu: 1279888380870 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 22.00 Resp: 22.00 [multiMatchCost=0.00] +HA Join + HA cost: 22.00 + resc: 22.00 resc_io: 20.00 resc_cpu: 731364864357 + resp: 22.00 resp_io: 20.00 resp_cpu: 731364864357 +Join order aborted: cost > best plan cost +*********************** + +*************************************** +ADDITIONAL PLANS +*************************************** +Considering RBO-ranked initial join order. +Best join order so far: 3 +Permutations for Starting Table :0 +Join order[10]: EMPLOYEES[E]#0 DEPARTMENTS[D]#1 ORDERS[O]#3 CUSTOMERS[C]#2 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 1.00 Cost: 2.00 Resp: 2.00 Degree: 1 Bytes: 22 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 56340 + Resp_io: 6.00 Resp_cpu: 56340 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + + Best NL cost: 3.00 + resc: 3.00 resc_io: 3.00 resc_cpu: 23184 + resp: 3.00 resp_io: 3.00 resc_cpu: 23184 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: NestedLoop + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 151463 + Resp_io: 11.00 Resp_cpu: 151463 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 89727 + Resp_io: 5.00 Resp_cpu: 89727 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 42582 + Resp_io: 5.00 Resp_cpu: 42582 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 52156 + Resp_io: 4.00 Resp_cpu: 52156 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 33556 + Resp_io: 4.00 Resp_cpu: 33556 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 4.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 5.000188, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 42582 + resp: 5.00 resp_io: 5.00 resc_cpu: 42582 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364686449 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364686449 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841234816 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841234816 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#2 +*************** +NL Join + Outer table: Card: 3.85 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 32.00 Resp: 32.00 Degree: 1 + Cost_io: 32.00 Cost_cpu: 719510 + Resp_io: 32.00 Resp_cpu: 719510 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 106436 + Resp_io: 13.00 Resp_cpu: 106436 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 46782 + Resp_io: 5.00 Resp_cpu: 46782 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 47582 + Resp_io: 5.00 Resp_cpu: 47582 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 5.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 5.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 76229 + resp: 9.00 resp_io: 9.00 resc_cpu: 76229 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 8.00 resc_cpu: 731364651113 + resp: 10.00 resp_io: 8.00 resp_cpu: 731364651113 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 8.00 resc_cpu: 182841212001 + resp: 8.50 resp_io: 8.00 resp_cpu: 182841212001 +Best:: JoinMethod: Hash + Cost: 8.50 Degree: 1 Resp: 8.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 8.50 Resp: 8.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841400558 + Resp_io: 12.00 Resp_cpu: 182841400558 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841237225 + resp: 11.50 resp_io: 11.00 resc_cpu: 182841237225 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +SM Join + SM cost: 14.50 + resc: 14.50 resc_io: 12.00 resc_cpu: 914206267447 + resp: 14.50 resp_io: 12.00 resp_cpu: 914206267447 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +HA Join + HA cost: 13.00 + resc: 13.00 resc_io: 12.00 resc_cpu: 365682613692 + resp: 13.00 resp_io: 12.00 resp_cpu: 365682613692 +Best:: JoinMethod: NestedLoop + Cost: 11.50 Degree: 1 Resp: 11.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.50 Resp: 11.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 19.50 Resp: 19.50 Degree: 1 + Cost_io: 19.00 Cost_cpu: 182841378764 + Resp_io: 19.00 Resp_cpu: 182841378764 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + + Best NL cost: 12.50 + resc: 12.50 resc_io: 12.00 resc_cpu: 182841245566 + resp: 12.50 resp_io: 12.00 resc_cpu: 182841245566 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 21.50 Resp: 21.50 [multiMatchCost=0.00] +SM Join + SM cost: 21.50 + resc: 21.50 resc_io: 19.00 resc_cpu: 914206070710 + resp: 21.50 resp_io: 19.00 resp_cpu: 914206070710 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +HA Join + HA cost: 20.00 + resc: 20.00 resc_io: 19.00 resc_cpu: 365682554198 + resp: 20.00 resp_io: 19.00 resp_cpu: 365682554198 +Best:: JoinMethod: NestedLoop + Cost: 12.50 Degree: 1 Resp: 12.50 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 12.50 Resp: 12.50 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 191.50 Resp: 191.50 Degree: 1 + Cost_io: 191.00 Cost_cpu: 182847947059 + Resp_io: 191.00 Resp_cpu: 182847947059 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + + Best NL cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841254778 + resp: 13.50 resp_io: 13.00 resc_cpu: 182841254778 +Outer Join Card: 0.006014 = max ( outer (0.006014),(outer (0.006014) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 102.00 Resp: 102.00 [multiMatchCost=0.00] +SM Join + SM cost: 102.00 + resc: 102.00 resc_io: 99.00 resc_cpu: 1097053319562 + resp: 102.00 resp_io: 99.00 resp_cpu: 1097053319562 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +HA Join + HA cost: 100.50 + resc: 100.50 resc_io: 99.00 resc_cpu: 548529803050 + resp: 100.50 resp_io: 99.00 resp_cpu: 548529803050 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.00601441537 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :1 +Join order[11]: CUSTOMERS[C]#2 ORDERS[O]#3 EMPLOYEES[E]#0 DEPARTMENTS[D]#1 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.01 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 19 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 150514 + Resp_io: 11.00 Resp_cpu: 150514 +kkofmx: index filter:"O"."CUSTOMER_ID">0 + +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (AllEqJoinGuess) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 16548 + ix_sel: 0.021277 ix_sel_with_filters: 0.021277 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 50.00 + ***** End Logdef Adjustment ****** + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 38883 + Resp_io: 5.00 Resp_cpu: 38883 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 59164 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 81399 + Resp_io: 6.00 Resp_cpu: 81399 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 38883 + resp: 5.00 resp_io: 5.00 resc_cpu: 38883 +Join Card: 0.017255 = = outer (0.010599) * inner (70.000000) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.02 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364685499 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364685499 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841233867 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841233867 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.02 Bytes: 30 + +*************** +Now joining: EMPLOYEES[E]#0 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 117348 + Resp_io: 9.00 Resp_cpu: 117348 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47404 + Resp_io: 6.00 Resp_cpu: 47404 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 5.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 5.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 6.00 + resc: 6.00 resc_io: 6.00 resc_cpu: 47404 + resp: 6.00 resp_io: 6.00 resc_cpu: 47404 +Join Card: 0.001917 = = outer (0.017255) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364639611 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364639611 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841200409 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841200409 +Best:: JoinMethod: NestedLoop + Cost: 6.00 Degree: 1 Resp: 6.00 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 88951 + Resp_io: 10.00 Resp_cpu: 88951 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + + Best NL cost: 7.00 + resc: 7.00 resc_io: 7.00 resc_cpu: 55795 + resp: 7.00 resp_io: 7.00 resc_cpu: 55795 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364674887 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364674887 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841235685 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841235685 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 244353 + Resp_io: 11.00 Resp_cpu: 244353 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +SM Join + SM cost: 13.00 + resc: 13.00 resc_io: 11.00 resc_cpu: 731365111242 + resp: 13.00 resp_io: 11.00 resp_cpu: 731365111242 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 11.50 Resp: 11.50 [multiMatchCost=0.00] +HA Join + HA cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841457487 + resp: 11.50 resp_io: 11.00 resp_cpu: 182841457487 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :2 +Join order[12]: DEPARTMENTS[D]#1 EMPLOYEES[E]#0 ORDERS[O]#3 CUSTOMERS[C]#2 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: EMPLOYEES[E]#0 +*************** +NL Join + Outer table: Card: 1.00 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 16 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 120013 + Resp_io: 8.00 Resp_cpu: 120013 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 13963 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 55510 + Resp_io: 5.00 Resp_cpu: 55510 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 50069 + Resp_io: 5.00 Resp_cpu: 50069 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42597 + Resp_io: 4.00 Resp_cpu: 42597 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 0.00 resc_cpu: 2850 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44397 + Resp_io: 4.00 Resp_cpu: 44397 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 4.000000, sel = 0.009346 + Not used EMP_DEPARTMENT_IX + Cost = 4.000000, sel = 0.495327 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 50069 + resp: 5.00 resp_io: 5.00 resc_cpu: 50069 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 +SM Join (with index on outer) + Access Path: index (FullScan) + Index: DEPT_ID_PK + resc_io: 2.00 resc_cpu: 25583 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 1 + Outer table: DEPARTMENTS Alias: D + resc: 2.00 card 1.00 bytes: 16 deg: 1 resp: 2.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 5.00 Resp: 5.00 [multiMatchCost=0.00] + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: SortMerge + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 365682461622 + Resp_io: 12.00 Resp_cpu: 365682461622 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682399887 + Resp_io: 6.00 Resp_cpu: 365682399887 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682352741 + Resp_io: 6.00 Resp_cpu: 365682352741 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682362315 + Resp_io: 5.00 Resp_cpu: 365682362315 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682343715 + Resp_io: 5.00 Resp_cpu: 365682343715 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 6.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 7.000235, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 7.00 + resc: 7.00 resc_io: 6.00 resc_cpu: 365682352741 + resp: 7.00 resp_io: 6.00 resc_cpu: 365682352741 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 7.00 resc_cpu: 1097046996608 + resp: 10.00 resp_io: 7.00 resp_cpu: 1097046996608 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 7.00 resc_cpu: 548523544975 + resp: 8.50 resp_io: 7.00 resp_cpu: 548523544975 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#2 +*************** +NL Join + Outer table: Card: 3.85 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 34.00 Resp: 34.00 Degree: 1 + Cost_io: 33.00 Cost_cpu: 365683029669 + Resp_io: 33.00 Resp_cpu: 365683029669 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 365682416595 + Resp_io: 14.00 Resp_cpu: 365682416595 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682356941 + Resp_io: 6.00 Resp_cpu: 365682356941 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682357741 + Resp_io: 6.00 Resp_cpu: 365682357741 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 7.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 7.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.00 + resc: 11.00 resc_io: 10.00 resc_cpu: 365682386388 + resp: 11.00 resp_io: 10.00 resc_cpu: 365682386388 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 9.00 resc_cpu: 1097046961272 + resp: 12.00 resp_io: 9.00 resp_cpu: 1097046961272 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 9.00 resc_cpu: 548523522160 + resp: 10.50 resp_io: 9.00 resp_cpu: 548523522160 +Best:: JoinMethod: Hash + Cost: 10.50 Degree: 1 Resp: 10.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 10.50 Resp: 10.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523710717 + Resp_io: 13.00 Resp_cpu: 548523710717 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 13.50 + resc: 13.50 resc_io: 12.00 resc_cpu: 548523547384 + resp: 13.50 resp_io: 12.00 resc_cpu: 548523547384 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 16.50 Resp: 16.50 [multiMatchCost=0.00] +SM Join + SM cost: 16.50 + resc: 16.50 resc_io: 13.00 resc_cpu: 1279888577607 + resp: 16.50 resp_io: 13.00 resp_cpu: 1279888577607 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +HA Join + HA cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364923851 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364923851 +Best:: JoinMethod: NestedLoop + Cost: 13.50 Degree: 1 Resp: 13.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 13.50 Resp: 13.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 21.50 Resp: 21.50 Degree: 1 + Cost_io: 20.00 Cost_cpu: 548523688923 + Resp_io: 20.00 Resp_cpu: 548523688923 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + + Best NL cost: 14.50 + resc: 14.50 resc_io: 13.00 resc_cpu: 548523555726 + resp: 14.50 resp_io: 13.00 resc_cpu: 548523555726 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 23.50 Resp: 23.50 [multiMatchCost=0.00] +SM Join + SM cost: 23.50 + resc: 23.50 resc_io: 20.00 resc_cpu: 1279888380870 + resp: 23.50 resp_io: 20.00 resp_cpu: 1279888380870 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 22.00 Resp: 22.00 [multiMatchCost=0.00] +HA Join + HA cost: 22.00 + resc: 22.00 resc_io: 20.00 resc_cpu: 731364864357 + resp: 22.00 resp_io: 20.00 resp_cpu: 731364864357 +Join order aborted: cost > best plan cost +*********************** +*************************************** +Considering join cardinality based initial join order. +Best join order so far: 3 +Permutations for Starting Table :0 +Join order[13]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 DEPARTMENTS[D]#1 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.01 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 19 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 150514 + Resp_io: 11.00 Resp_cpu: 150514 +kkofmx: index filter:"O"."CUSTOMER_ID">0 + +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (AllEqJoinGuess) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 16548 + ix_sel: 0.021277 ix_sel_with_filters: 0.021277 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 50.00 + ***** End Logdef Adjustment ****** + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 38883 + Resp_io: 5.00 Resp_cpu: 38883 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 59164 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 81399 + Resp_io: 6.00 Resp_cpu: 81399 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 38883 + resp: 5.00 resp_io: 5.00 resc_cpu: 38883 +Join Card: 0.017255 = = outer (0.010599) * inner (70.000000) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.02 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364685499 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364685499 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841233867 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841233867 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.02 Bytes: 30 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 117348 + Resp_io: 9.00 Resp_cpu: 117348 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47404 + Resp_io: 6.00 Resp_cpu: 47404 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 5.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 5.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 6.00 + resc: 6.00 resc_io: 6.00 resc_cpu: 47404 + resp: 6.00 resp_io: 6.00 resc_cpu: 47404 +Join Card: 0.001917 = = outer (0.017255) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364639611 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364639611 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841200409 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841200409 +Best:: JoinMethod: NestedLoop + Cost: 6.00 Degree: 1 Resp: 6.00 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 88951 + Resp_io: 10.00 Resp_cpu: 88951 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + + Best NL cost: 7.00 + resc: 7.00 resc_io: 7.00 resc_cpu: 55795 + resp: 7.00 resp_io: 7.00 resc_cpu: 55795 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364674887 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364674887 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841235685 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841235685 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 244353 + Resp_io: 11.00 Resp_cpu: 244353 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +SM Join + SM cost: 13.00 + resc: 13.00 resc_io: 11.00 resc_cpu: 731365111242 + resp: 13.00 resp_io: 11.00 resp_cpu: 731365111242 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 11.50 Resp: 11.50 [multiMatchCost=0.00] +HA Join + HA cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841457487 + resp: 11.50 resp_io: 11.00 resp_cpu: 182841457487 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Best:: JoinMethod: NestedLoop + Cost: 14.00 Degree: 1 Resp: 14.00 Card: 0.01 Bytes: 144 +*********************** +Best so far: Table#: 0 cost: 3.0000 card: 0.0106 bytes: 19 + Table#: 3 cost: 5.0000 card: 0.0173 bytes: 30 + Table#: 2 cost: 6.0000 card: 0.0019 bytes: 52 + Table#: 1 cost: 7.0000 card: 0.0019 bytes: 68 + Table#: 4 cost: 10.0000 card: 0.0120 bytes: 84 + Table#: 5 cost: 11.0000 card: 0.0120 bytes: 104 + Table#: 6 cost: 14.0000 card: 0.0120 bytes: 144 +*********************** +Permutations for Starting Table :1 +Join order[14]: EMPLOYEES[E]#2 DEPARTMENTS[D]#1 ORDERS[O]#3 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 1.00 Cost: 2.00 Resp: 2.00 Degree: 1 Bytes: 22 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 56340 + Resp_io: 6.00 Resp_cpu: 56340 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + + Best NL cost: 3.00 + resc: 3.00 resc_io: 3.00 resc_cpu: 23184 + resp: 3.00 resp_io: 3.00 resc_cpu: 23184 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: NestedLoop + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 151463 + Resp_io: 11.00 Resp_cpu: 151463 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 89727 + Resp_io: 5.00 Resp_cpu: 89727 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 42582 + Resp_io: 5.00 Resp_cpu: 42582 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 52156 + Resp_io: 4.00 Resp_cpu: 52156 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 33556 + Resp_io: 4.00 Resp_cpu: 33556 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 4.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 5.000188, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 42582 + resp: 5.00 resp_io: 5.00 resc_cpu: 42582 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364686449 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364686449 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841234816 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841234816 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 32.00 Resp: 32.00 Degree: 1 + Cost_io: 32.00 Cost_cpu: 719510 + Resp_io: 32.00 Resp_cpu: 719510 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 106436 + Resp_io: 13.00 Resp_cpu: 106436 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 46782 + Resp_io: 5.00 Resp_cpu: 46782 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 47582 + Resp_io: 5.00 Resp_cpu: 47582 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 5.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 5.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 76229 + resp: 9.00 resp_io: 9.00 resc_cpu: 76229 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 8.00 resc_cpu: 731364651113 + resp: 10.00 resp_io: 8.00 resp_cpu: 731364651113 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 8.00 resc_cpu: 182841212001 + resp: 8.50 resp_io: 8.00 resp_cpu: 182841212001 +Best:: JoinMethod: Hash + Cost: 8.50 Degree: 1 Resp: 8.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 8.50 Resp: 8.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841400558 + Resp_io: 12.00 Resp_cpu: 182841400558 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841237225 + resp: 11.50 resp_io: 11.00 resc_cpu: 182841237225 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +SM Join + SM cost: 14.50 + resc: 14.50 resc_io: 12.00 resc_cpu: 914206267447 + resp: 14.50 resp_io: 12.00 resp_cpu: 914206267447 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +HA Join + HA cost: 13.00 + resc: 13.00 resc_io: 12.00 resc_cpu: 365682613692 + resp: 13.00 resp_io: 12.00 resp_cpu: 365682613692 +Best:: JoinMethod: NestedLoop + Cost: 11.50 Degree: 1 Resp: 11.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.50 Resp: 11.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 19.50 Resp: 19.50 Degree: 1 + Cost_io: 19.00 Cost_cpu: 182841378764 + Resp_io: 19.00 Resp_cpu: 182841378764 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + + Best NL cost: 12.50 + resc: 12.50 resc_io: 12.00 resc_cpu: 182841245566 + resp: 12.50 resp_io: 12.00 resc_cpu: 182841245566 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 21.50 Resp: 21.50 [multiMatchCost=0.00] +SM Join + SM cost: 21.50 + resc: 21.50 resc_io: 19.00 resc_cpu: 914206070710 + resp: 21.50 resp_io: 19.00 resp_cpu: 914206070710 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +HA Join + HA cost: 20.00 + resc: 20.00 resc_io: 19.00 resc_cpu: 365682554198 + resp: 20.00 resp_io: 19.00 resp_cpu: 365682554198 +Best:: JoinMethod: NestedLoop + Cost: 12.50 Degree: 1 Resp: 12.50 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 12.50 Resp: 12.50 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 191.50 Resp: 191.50 Degree: 1 + Cost_io: 191.00 Cost_cpu: 182847947059 + Resp_io: 191.00 Resp_cpu: 182847947059 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + + Best NL cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841254778 + resp: 13.50 resp_io: 13.00 resc_cpu: 182841254778 +Outer Join Card: 0.006014 = max ( outer (0.006014),(outer (0.006014) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 102.00 Resp: 102.00 [multiMatchCost=0.00] +SM Join + SM cost: 102.00 + resc: 102.00 resc_io: 99.00 resc_cpu: 1097053319562 + resp: 102.00 resp_io: 99.00 resp_cpu: 1097053319562 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +HA Join + HA cost: 100.50 + resc: 100.50 resc_io: 99.00 resc_cpu: 548529803050 + resp: 100.50 resp_io: 99.00 resp_cpu: 548529803050 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.00601441537 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :2 +Join order[15]: DEPARTMENTS[D]#1 EMPLOYEES[E]#2 ORDERS[O]#3 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 1.00 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 16 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 120013 + Resp_io: 8.00 Resp_cpu: 120013 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 13963 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 55510 + Resp_io: 5.00 Resp_cpu: 55510 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 50069 + Resp_io: 5.00 Resp_cpu: 50069 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42597 + Resp_io: 4.00 Resp_cpu: 42597 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 0.00 resc_cpu: 2850 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44397 + Resp_io: 4.00 Resp_cpu: 44397 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 4.000000, sel = 0.009346 + Not used EMP_DEPARTMENT_IX + Cost = 4.000000, sel = 0.495327 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 50069 + resp: 5.00 resp_io: 5.00 resc_cpu: 50069 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 +SM Join (with index on outer) + Access Path: index (FullScan) + Index: DEPT_ID_PK + resc_io: 2.00 resc_cpu: 25583 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 1 + Outer table: DEPARTMENTS Alias: D + resc: 2.00 card 1.00 bytes: 16 deg: 1 resp: 2.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 5.00 Resp: 5.00 [multiMatchCost=0.00] + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: SortMerge + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 365682461622 + Resp_io: 12.00 Resp_cpu: 365682461622 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682399887 + Resp_io: 6.00 Resp_cpu: 365682399887 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682352741 + Resp_io: 6.00 Resp_cpu: 365682352741 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682362315 + Resp_io: 5.00 Resp_cpu: 365682362315 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682343715 + Resp_io: 5.00 Resp_cpu: 365682343715 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 6.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 7.000235, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 7.00 + resc: 7.00 resc_io: 6.00 resc_cpu: 365682352741 + resp: 7.00 resp_io: 6.00 resc_cpu: 365682352741 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 7.00 resc_cpu: 1097046996608 + resp: 10.00 resp_io: 7.00 resp_cpu: 1097046996608 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 7.00 resc_cpu: 548523544975 + resp: 8.50 resp_io: 7.00 resp_cpu: 548523544975 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 34.00 Resp: 34.00 Degree: 1 + Cost_io: 33.00 Cost_cpu: 365683029669 + Resp_io: 33.00 Resp_cpu: 365683029669 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 365682416595 + Resp_io: 14.00 Resp_cpu: 365682416595 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682356941 + Resp_io: 6.00 Resp_cpu: 365682356941 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682357741 + Resp_io: 6.00 Resp_cpu: 365682357741 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 7.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 7.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.00 + resc: 11.00 resc_io: 10.00 resc_cpu: 365682386388 + resp: 11.00 resp_io: 10.00 resc_cpu: 365682386388 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 9.00 resc_cpu: 1097046961272 + resp: 12.00 resp_io: 9.00 resp_cpu: 1097046961272 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 9.00 resc_cpu: 548523522160 + resp: 10.50 resp_io: 9.00 resp_cpu: 548523522160 +Best:: JoinMethod: Hash + Cost: 10.50 Degree: 1 Resp: 10.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 10.50 Resp: 10.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523710717 + Resp_io: 13.00 Resp_cpu: 548523710717 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 13.50 + resc: 13.50 resc_io: 12.00 resc_cpu: 548523547384 + resp: 13.50 resp_io: 12.00 resc_cpu: 548523547384 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 16.50 Resp: 16.50 [multiMatchCost=0.00] +SM Join + SM cost: 16.50 + resc: 16.50 resc_io: 13.00 resc_cpu: 1279888577607 + resp: 16.50 resp_io: 13.00 resp_cpu: 1279888577607 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +HA Join + HA cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364923851 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364923851 +Best:: JoinMethod: NestedLoop + Cost: 13.50 Degree: 1 Resp: 13.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 13.50 Resp: 13.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 21.50 Resp: 21.50 Degree: 1 + Cost_io: 20.00 Cost_cpu: 548523688923 + Resp_io: 20.00 Resp_cpu: 548523688923 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + + Best NL cost: 14.50 + resc: 14.50 resc_io: 13.00 resc_cpu: 548523555726 + resp: 14.50 resp_io: 13.00 resc_cpu: 548523555726 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 23.50 Resp: 23.50 [multiMatchCost=0.00] +SM Join + SM cost: 23.50 + resc: 23.50 resc_io: 20.00 resc_cpu: 1279888380870 + resp: 23.50 resp_io: 20.00 resp_cpu: 1279888380870 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 22.00 Resp: 22.00 [multiMatchCost=0.00] +HA Join + HA cost: 22.00 + resc: 22.00 resc_io: 20.00 resc_cpu: 731364864357 + resp: 22.00 resp_io: 20.00 resp_cpu: 731364864357 +Join order aborted: cost > best plan cost +*********************** +*************************************** +Considering join cardinality with NL access based initial join order. +Best join order so far: 13 +Permutations for Starting Table :0 +Join order[16]: CUSTOMERS[C]#0 ORDERS[O]#1 EMPLOYEES[E]#2 DEPARTMENTS[D]#3 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: ORDERS[O]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 19 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 150514 + Resp_io: 11.00 Resp_cpu: 150514 +kkofmx: index filter:"O"."CUSTOMER_ID">0 + +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (AllEqJoinGuess) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 16548 + ix_sel: 0.021277 ix_sel_with_filters: 0.021277 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 50.00 + ***** End Logdef Adjustment ****** + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 38883 + Resp_io: 5.00 Resp_cpu: 38883 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 59164 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 81399 + Resp_io: 6.00 Resp_cpu: 81399 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 38883 + resp: 5.00 resp_io: 5.00 resc_cpu: 38883 +Join Card: 0.017255 = = outer (0.010599) * inner (70.000000) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.02 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364685499 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364685499 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841233867 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841233867 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.02 Bytes: 30 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 117348 + Resp_io: 9.00 Resp_cpu: 117348 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47404 + Resp_io: 6.00 Resp_cpu: 47404 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 5.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 5.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 6.00 + resc: 6.00 resc_io: 6.00 resc_cpu: 47404 + resp: 6.00 resp_io: 6.00 resc_cpu: 47404 +Join Card: 0.001917 = = outer (0.017255) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364639611 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364639611 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841200409 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841200409 +Best:: JoinMethod: NestedLoop + Cost: 6.00 Degree: 1 Resp: 6.00 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#3 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 88951 + Resp_io: 10.00 Resp_cpu: 88951 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + + Best NL cost: 7.00 + resc: 7.00 resc_io: 7.00 resc_cpu: 55795 + resp: 7.00 resp_io: 7.00 resc_cpu: 55795 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364674887 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364674887 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841235685 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841235685 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 244353 + Resp_io: 11.00 Resp_cpu: 244353 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +SM Join + SM cost: 13.00 + resc: 13.00 resc_io: 11.00 resc_cpu: 731365111242 + resp: 13.00 resp_io: 11.00 resp_cpu: 731365111242 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 11.50 Resp: 11.50 [multiMatchCost=0.00] +HA Join + HA cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841457487 + resp: 11.50 resp_io: 11.00 resp_cpu: 182841457487 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Best:: JoinMethod: NestedLoop + Cost: 14.00 Degree: 1 Resp: 14.00 Card: 0.01 Bytes: 144 +*********************** +Best so far: Table#: 0 cost: 3.0000 card: 0.0106 bytes: 19 + Table#: 1 cost: 5.0000 card: 0.0173 bytes: 30 + Table#: 2 cost: 6.0000 card: 0.0019 bytes: 52 + Table#: 3 cost: 7.0000 card: 0.0019 bytes: 68 + Table#: 4 cost: 10.0000 card: 0.0120 bytes: 84 + Table#: 5 cost: 11.0000 card: 0.0120 bytes: 104 + Table#: 6 cost: 14.0000 card: 0.0120 bytes: 144 +*********************** +Permutations for Starting Table :1 +Join order[17]: EMPLOYEES[E]#2 ORDERS[O]#1 CUSTOMERS[C]#0 DEPARTMENTS[D]#3 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: ORDERS[O]#1 +*************** +NL Join + Outer table: Card: 1.00 Cost: 2.00 Resp: 2.00 Degree: 1 Bytes: 22 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 143072 + Resp_io: 10.00 Resp_cpu: 143072 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 81336 + Resp_io: 4.00 Resp_cpu: 81336 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 34190 + Resp_io: 4.00 Resp_cpu: 34190 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 43764 + Resp_io: 3.00 Resp_cpu: 43764 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 25164 + Resp_io: 3.00 Resp_cpu: 25164 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 3.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 4.000141, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 4.00 + resc: 4.00 resc_io: 4.00 resc_cpu: 34190 + resp: 4.00 resp_io: 4.00 resc_cpu: 34190 +Join Card: 7.777778 = = outer (1.000000) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 8 Computed: 7.78 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 7.00 Resp: 7.00 [multiMatchCost=0.00] +SM Join + SM cost: 7.00 + resc: 7.00 resc_io: 5.00 resc_cpu: 731364678057 + resp: 7.00 resp_io: 5.00 resp_cpu: 731364678057 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 5.50 Resp: 5.50 [multiMatchCost=0.00] +HA Join + HA cost: 5.50 + resc: 5.50 resc_io: 5.00 resc_cpu: 182841226425 + resp: 5.50 resp_io: 5.00 resp_cpu: 182841226425 +Best:: JoinMethod: NestedLoop + Cost: 4.00 Degree: 1 Resp: 4.00 Card: 7.78 Bytes: 33 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 7.78 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 33 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 55.00 Resp: 55.00 Degree: 1 + Cost_io: 55.00 Cost_cpu: 1388046 + Resp_io: 55.00 Resp_cpu: 1388046 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 101484 + Resp_io: 12.00 Resp_cpu: 101484 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 101484 + Resp_io: 12.00 Resp_cpu: 101484 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 20.00 Resp: 20.00 Degree: 1 + Cost_io: 20.00 Cost_cpu: 161898 + Resp_io: 20.00 Resp_cpu: 161898 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42590 + Resp_io: 4.00 Resp_cpu: 42590 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44190 + Resp_io: 4.00 Resp_cpu: 44190 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 4.000000, sel = 0.005682 + Used CUSTOMERS_PK + Cost = 4.000000, sel = 0.023256 + Access path: Bitmap index - accepted + Cost: 12.107945 Cost_io: 12.107945 Cost_cpu: 124551.056438 Sel: 0.000132 + Not Believed to be index-only + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 101484 + resp: 12.00 resp_io: 12.00 resc_cpu: 101484 +Join Card: 0.001917 = = outer (7.777778) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 4.00 card 7.78 bytes: 33 deg: 1 resp: 4.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 47 Total Rows: 8 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682294049 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364643442 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364643442 + Outer table: ORDERS Alias: O + resc: 4.00 card 7.78 bytes: 33 deg: 1 resp: 4.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841204209 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841204209 +Best:: JoinMethod: Hash + Cost: 7.50 Degree: 1 Resp: 7.50 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#3 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.50 Resp: 7.50 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841245756 + Resp_io: 11.00 Resp_cpu: 182841245756 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 8.50 Resp: 8.50 Degree: 1 + Cost_io: 8.00 Cost_cpu: 182841212601 + Resp_io: 8.00 Resp_cpu: 182841212601 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 8.50 Resp: 8.50 Degree: 1 + Cost_io: 8.00 Cost_cpu: 182841212601 + Resp_io: 8.00 Resp_cpu: 182841212601 + + Best NL cost: 8.50 + resc: 8.50 resc_io: 8.00 resc_cpu: 182841212601 + resp: 8.50 resp_io: 8.00 resc_cpu: 182841212601 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 7.50 card 0.00 bytes: 52 deg: 1 resp: 7.50 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 13.50 Resp: 13.50 [multiMatchCost=0.00] +SM Join + SM cost: 13.50 + resc: 13.50 resc_io: 11.00 resc_cpu: 914205831692 + resp: 13.50 resp_io: 11.00 resp_cpu: 914205831692 + Outer table: CUSTOMERS Alias: C + resc: 7.50 card 0.00 bytes: 52 deg: 1 resp: 7.50 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +HA Join + HA cost: 12.00 + resc: 12.00 resc_io: 11.00 resc_cpu: 365682392490 + resp: 12.00 resp_io: 11.00 resp_cpu: 365682392490 +Best:: JoinMethod: NestedLoop + Cost: 8.50 Degree: 1 Resp: 8.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 8.50 Resp: 8.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841401158 + Resp_io: 12.00 Resp_cpu: 182841401158 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237825 + Resp_io: 11.00 Resp_cpu: 182841237825 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237825 + Resp_io: 11.00 Resp_cpu: 182841237825 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237825 + Resp_io: 11.00 Resp_cpu: 182841237825 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841237825 + resp: 11.50 resp_io: 11.00 resc_cpu: 182841237825 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +SM Join + SM cost: 14.50 + resc: 14.50 resc_io: 12.00 resc_cpu: 914206268047 + resp: 14.50 resp_io: 12.00 resp_cpu: 914206268047 + Outer table: DEPARTMENTS Alias: D + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +HA Join + HA cost: 13.00 + resc: 13.00 resc_io: 12.00 resc_cpu: 365682614292 + resp: 13.00 resp_io: 12.00 resp_cpu: 365682614292 +Best:: JoinMethod: NestedLoop + Cost: 11.50 Degree: 1 Resp: 11.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.50 Resp: 11.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 19.50 Resp: 19.50 Degree: 1 + Cost_io: 19.00 Cost_cpu: 182841379364 + Resp_io: 19.00 Resp_cpu: 182841379364 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841246166 + Resp_io: 12.00 Resp_cpu: 182841246166 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841246166 + Resp_io: 12.00 Resp_cpu: 182841246166 + + Best NL cost: 12.50 + resc: 12.50 resc_io: 12.00 resc_cpu: 182841246166 + resp: 12.50 resp_io: 12.00 resc_cpu: 182841246166 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 21.50 Resp: 21.50 [multiMatchCost=0.00] +SM Join + SM cost: 21.50 + resc: 21.50 resc_io: 19.00 resc_cpu: 914206071310 + resp: 21.50 resp_io: 19.00 resp_cpu: 914206071310 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +HA Join + HA cost: 20.00 + resc: 20.00 resc_io: 19.00 resc_cpu: 365682554798 + resp: 20.00 resp_io: 19.00 resp_cpu: 365682554798 +Best:: JoinMethod: NestedLoop + Cost: 12.50 Degree: 1 Resp: 12.50 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 12.50 Resp: 12.50 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 191.50 Resp: 191.50 Degree: 1 + Cost_io: 191.00 Cost_cpu: 182847947659 + Resp_io: 191.00 Resp_cpu: 182847947659 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841255378 + Resp_io: 13.00 Resp_cpu: 182841255378 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841255378 + Resp_io: 13.00 Resp_cpu: 182841255378 + + Best NL cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841255378 + resp: 13.50 resp_io: 13.00 resc_cpu: 182841255378 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 102.00 Resp: 102.00 [multiMatchCost=0.00] +SM Join + SM cost: 102.00 + resc: 102.00 resc_io: 99.00 resc_cpu: 1097053320162 + resp: 102.00 resp_io: 99.00 resp_cpu: 1097053320162 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +HA Join + HA cost: 100.50 + resc: 100.50 resc_io: 99.00 resc_cpu: 548529803650 + resp: 100.50 resp_io: 99.00 resp_cpu: 548529803650 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :2 +Join order[18]: DEPARTMENTS[D]#3 EMPLOYEES[E]#2 ORDERS[O]#1 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 1.00 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 16 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 120013 + Resp_io: 8.00 Resp_cpu: 120013 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 13963 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 55510 + Resp_io: 5.00 Resp_cpu: 55510 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 50069 + Resp_io: 5.00 Resp_cpu: 50069 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42597 + Resp_io: 4.00 Resp_cpu: 42597 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 0.00 resc_cpu: 2850 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44397 + Resp_io: 4.00 Resp_cpu: 44397 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 4.000000, sel = 0.009346 + Not used EMP_DEPARTMENT_IX + Cost = 4.000000, sel = 0.495327 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 50069 + resp: 5.00 resp_io: 5.00 resc_cpu: 50069 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 +SM Join (with index on outer) + Access Path: index (FullScan) + Index: DEPT_ID_PK + resc_io: 2.00 resc_cpu: 25583 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 1 + Outer table: DEPARTMENTS Alias: D + resc: 2.00 card 1.00 bytes: 16 deg: 1 resp: 2.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 5.00 Resp: 5.00 [multiMatchCost=0.00] + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: SortMerge + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#1 +*************** +NL Join + Outer table: Card: 0.50 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 365682461622 + Resp_io: 12.00 Resp_cpu: 365682461622 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682399887 + Resp_io: 6.00 Resp_cpu: 365682399887 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682352741 + Resp_io: 6.00 Resp_cpu: 365682352741 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682362315 + Resp_io: 5.00 Resp_cpu: 365682362315 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682343715 + Resp_io: 5.00 Resp_cpu: 365682343715 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 6.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 7.000235, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 7.00 + resc: 7.00 resc_io: 6.00 resc_cpu: 365682352741 + resp: 7.00 resp_io: 6.00 resc_cpu: 365682352741 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 7.00 resc_cpu: 1097046996608 + resp: 10.00 resp_io: 7.00 resp_cpu: 1097046996608 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 7.00 resc_cpu: 548523544975 + resp: 8.50 resp_io: 7.00 resp_cpu: 548523544975 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 34.00 Resp: 34.00 Degree: 1 + Cost_io: 33.00 Cost_cpu: 365683029669 + Resp_io: 33.00 Resp_cpu: 365683029669 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 365682416595 + Resp_io: 14.00 Resp_cpu: 365682416595 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682356941 + Resp_io: 6.00 Resp_cpu: 365682356941 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682357741 + Resp_io: 6.00 Resp_cpu: 365682357741 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 7.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 7.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.00 + resc: 11.00 resc_io: 10.00 resc_cpu: 365682386388 + resp: 11.00 resp_io: 10.00 resc_cpu: 365682386388 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 9.00 resc_cpu: 1097046961272 + resp: 12.00 resp_io: 9.00 resp_cpu: 1097046961272 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 9.00 resc_cpu: 548523522160 + resp: 10.50 resp_io: 9.00 resp_cpu: 548523522160 +Best:: JoinMethod: Hash + Cost: 10.50 Degree: 1 Resp: 10.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 10.50 Resp: 10.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523710717 + Resp_io: 13.00 Resp_cpu: 548523710717 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 13.50 + resc: 13.50 resc_io: 12.00 resc_cpu: 548523547384 + resp: 13.50 resp_io: 12.00 resc_cpu: 548523547384 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 16.50 Resp: 16.50 [multiMatchCost=0.00] +SM Join + SM cost: 16.50 + resc: 16.50 resc_io: 13.00 resc_cpu: 1279888577607 + resp: 16.50 resp_io: 13.00 resp_cpu: 1279888577607 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +HA Join + HA cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364923851 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364923851 +Best:: JoinMethod: NestedLoop + Cost: 13.50 Degree: 1 Resp: 13.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 13.50 Resp: 13.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 21.50 Resp: 21.50 Degree: 1 + Cost_io: 20.00 Cost_cpu: 548523688923 + Resp_io: 20.00 Resp_cpu: 548523688923 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + + Best NL cost: 14.50 + resc: 14.50 resc_io: 13.00 resc_cpu: 548523555726 + resp: 14.50 resp_io: 13.00 resc_cpu: 548523555726 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 23.50 Resp: 23.50 [multiMatchCost=0.00] +SM Join + SM cost: 23.50 + resc: 23.50 resc_io: 20.00 resc_cpu: 1279888380870 + resp: 23.50 resp_io: 20.00 resp_cpu: 1279888380870 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 22.00 Resp: 22.00 [multiMatchCost=0.00] +HA Join + HA cost: 22.00 + resc: 22.00 resc_io: 20.00 resc_cpu: 731364864357 + resp: 22.00 resp_io: 20.00 resp_cpu: 731364864357 +Join order aborted: cost > best plan cost +*********************** + +********************************* +Number of join permutations tried: 18 +********************************* +Consider using bloom filter between C[CUSTOMERS] and O[ORDERS] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between O[ORDERS] and E[EMPLOYEES] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between E[EMPLOYEES] and D[DEPARTMENTS] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between D[DEPARTMENTS] and OI[ORDER_ITEMS] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between OI[ORDER_ITEMS] and I[PRODUCT_INFORMATION] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between I[PRODUCT_INFORMATION] and D[PRODUCT_DESCRIPTIONS] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Trying or-Expansion on query block SEL$4B12EFE6 (#1) +Transfer Optimizer annotations for query block SEL$4B12EFE6 (#1) +id=0 frofkks[i] (index start key) predicate="C"."CUST_LAST_NAME"='Harris' +id=0 frofkke[i] (index stop key) predicate="C"."CUST_LAST_NAME"='Harris' +id=0 frofand predicate="C"."CUST_FIRST_NAME"='Gena' +id=0 frofkks[i] (index start key) predicate="O"."CUSTOMER_ID"="C"."CUSTOMER_ID" +id=0 frofkke[i] (index stop key) predicate="O"."CUSTOMER_ID"="C"."CUSTOMER_ID" +id=0 froiand (index only filter) predicate="O"."CUSTOMER_ID">0 +id=0 frofand predicate="O"."SALES_REP_ID" IS NOT NULL +id=0 frofkks[i] (index start key) predicate="E"."LAST_NAME"='Smith' +id=0 frofkks[i] (index start key) predicate="E"."FIRST_NAME"='William' +id=0 frofkke[i] (index stop key) predicate="E"."LAST_NAME"='Smith' +id=0 frofkke[i] (index stop key) predicate="E"."FIRST_NAME"='William' +id=0 frofand predicate="O"."SALES_REP_ID"="E"."EMPLOYEE_ID" +id=0 frofkks[i] (index start key) predicate="D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" +id=0 frofkke[i] (index stop key) predicate="D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" +id=0 frofand predicate="D"."DEPARTMENT_NAME"='Sales' +id=0 frofkks[i] (index start key) predicate="O"."ORDER_ID"="OI"."ORDER_ID" +id=0 frofkke[i] (index stop key) predicate="O"."ORDER_ID"="OI"."ORDER_ID" +id=0 frofkks[i] (index start key) predicate="OI"."PRODUCT_ID"="I"."PRODUCT_ID" +id=0 frofkke[i] (index stop key) predicate="OI"."PRODUCT_ID"="I"."PRODUCT_ID" +id=0 frofkks[i] (index start key) predicate="D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" +id=0 frofkks[i] (index start key) predicate="D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') +id=0 frofkke[i] (index stop key) predicate="D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" +id=0 frofkke[i] (index stop key) predicate="D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') +id=0 froutand predicate=CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END =U'Mobile Web Phone' + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.011528 +Final cost for query block SEL$4B12EFE6 (#1) - All Rows Plan: + Best join order: 16 + Cost: 14.0000 Degree: 1 Card: 1.0000 Bytes: 144 + Resc: 14.0000 Resc_io: 12.0000 Resc_cpu: 731364684509 + Resp: 14.0000 Resp_io: 12.0000 Resc_cpu: 731364684509 +kkoqbc-subheap (delete addr=0xfffffd7ffdbfa4e8, in-use=299640, alloc=304848) +kkoqbc-end: + : + call(in-use=104616, alloc=427752), compile(in-use=244216, alloc=248296), execution(in-use=12824, alloc=16200) + +kkoqbc: finish optimizing query block SEL$4B12EFE6 (#1) +apadrv-end + : + call(in-use=104616, alloc=427752), compile(in-use=245568, alloc=248296), execution(in-use=12824, alloc=16200) + + +Starting SQL statement dump + +user_id=101 user_name=AST module=SQL*Plus action= +sql_id=3qy33cc7bz0y2 plan_hash_value=738251008 problem_type=3 +----- Current SQL Statement for this session (sql_id=3qy33cc7bz0y2) ----- +SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + oe.orders o + , oe.order_items oi + , oe.products prod + , oe.customers c + , oe.promotions prom + , hr.employees e + , hr.departments d +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND d.department_id = e.department_id + -- filters +AND d.department_name = 'Sales' +AND e.first_name = 'William' +AND e.last_name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' +AND c.cust_first_name = 'Gena' +AND c.cust_last_name = 'Harris' +GROUP BY + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price +sql_text_length=1059 +sql=SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + +sql= oe.orders o + , oe.order_items oi + , oe.products prod + , oe.customers c + , oe.promotions prom + , hr.employees e + , hr.departments d +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o +sql=.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND d.department_id = e.department_id + -- filters +AND d.department_name = 'Sales' +AND e.first_name = 'William' +AND e.last_ +sql=name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' +AND c.cust_first_name = 'Gena' +AND c.cust_last_name = 'Harris' +GROUP BY + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_l +sql=ast_name + ORDER BY + total_price +----- Explain Plan Dump ----- +----- Plan Table ----- + +============ +Plan Table +============ +----------------------------------------------------------------------+-----------------------------------+ +| Id | Operation | Name | Rows | Bytes | Cost | Time | +----------------------------------------------------------------------+-----------------------------------+ +| 0 | SELECT STATEMENT | | | | 14 | | +| 1 | SORT ORDER BY | | 1 | 144 | 14 | 01:05:42 | +| 2 | HASH GROUP BY | | 1 | 144 | 14 | 01:05:42 | +| 3 | FILTER | | | | | | +| 4 | NESTED LOOPS OUTER | | 1 | 144 | 12 | 00:55:27 | +| 5 | NESTED LOOPS | | 1 | 104 | 11 | 00:51:50 | +| 6 | NESTED LOOPS | | 1 | 84 | 10 | 00:46:13 | +| 7 | NESTED LOOPS | | 1 | 68 | 7 | 00:32:21 | +| 8 | NESTED LOOPS | | 1 | 52 | 6 | 00:28:44 | +| 9 | NESTED LOOPS | | 1 | 30 | 5 | 00:23:07 | +| 10 | TABLE ACCESS BY INDEX ROWID | CUSTOMERS | 1 | 19 | 3 | 00:14:52 | +| 11 | INDEX RANGE SCAN | CUST_LNAME_IX | 2 | | 1 | 00:05:38 | +| 12 | TABLE ACCESS BY INDEX ROWID | ORDERS | 2 | 22 | 2 | 00:09:15 | +| 13 | INDEX RANGE SCAN | ORD_CUSTOMER_IX | 2 | | 1 | 00:05:38 | +| 14 | TABLE ACCESS BY INDEX ROWID | EMPLOYEES | 1 | 22 | 1 | 00:05:38 | +| 15 | INDEX RANGE SCAN | EMP_NAME_IX | 1 | | 0 | | +| 16 | TABLE ACCESS BY INDEX ROWID | DEPARTMENTS | 1 | 16 | 1 | 00:05:38 | +| 17 | INDEX UNIQUE SCAN | DEPT_ID_PK | 1 | | 0 | | +| 18 | TABLE ACCESS BY INDEX ROWID | ORDER_ITEMS | 6 | 96 | 3 | 00:14:52 | +| 19 | INDEX RANGE SCAN | ITEM_ORDER_IX | 6 | | 1 | 00:05:38 | +| 20 | TABLE ACCESS BY INDEX ROWID | PRODUCT_INFORMATION | 1 | 20 | 1 | 00:05:38 | +| 21 | INDEX UNIQUE SCAN | PRODUCT_INFORMATION_PK| 1 | | 0 | | +| 22 | TABLE ACCESS BY INDEX ROWID | PRODUCT_DESCRIPTIONS | 1 | 40 | 1 | 00:05:38 | +| 23 | INDEX UNIQUE SCAN | PRD_DESC_PK | 1 | | 0 | | +----------------------------------------------------------------------+-----------------------------------+ +Predicate Information: +---------------------- +3 - filter(CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END =U'Mobile Web Phone') +10 - filter("C"."CUST_FIRST_NAME"='Gena') +11 - access("C"."CUST_LAST_NAME"='Harris') +12 - filter("O"."SALES_REP_ID" IS NOT NULL) +13 - access("O"."CUSTOMER_ID"="C"."CUSTOMER_ID") +13 - filter("O"."CUSTOMER_ID">0) +14 - filter("O"."SALES_REP_ID"="E"."EMPLOYEE_ID") +15 - access("E"."LAST_NAME"='Smith' AND "E"."FIRST_NAME"='William') +16 - filter("D"."DEPARTMENT_NAME"='Sales') +17 - access("D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID") +19 - access("O"."ORDER_ID"="OI"."ORDER_ID") +21 - access("OI"."PRODUCT_ID"="I"."PRODUCT_ID") +23 - access("D"."PRODUCT_ID"="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"=SYS_CONTEXT('USERENV','LANG')) + +Content of other_xml column +=========================== + db_version : 11.2.0.1 + parse_schema : AST + plan_hash : 738251008 + plan_hash_2 : 419624811 + Outline Data: + /*+ + BEGIN_OUTLINE_DATA + IGNORE_OPTIM_EMBEDDED_HINTS + OPTIMIZER_FEATURES_ENABLE('11.2.0.1') + DB_VERSION('11.2.0.1') + OPT_PARAM('_optimizer_use_feedback' 'false') + ALL_ROWS + OUTLINE_LEAF(@"SEL$4B12EFE6") + MERGE(@"SEL$2") + OUTLINE(@"SEL$31BE1502") + ELIMINATE_JOIN(@"SEL$1" "PROM"@"SEL$1") + OUTLINE(@"SEL$2") + OUTLINE(@"SEL$1") + INDEX_RS_ASC(@"SEL$4B12EFE6" "C"@"SEL$1" ("CUSTOMERS"."CUST_LAST_NAME")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "O"@"SEL$1" ("ORDERS"."CUSTOMER_ID")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "E"@"SEL$1" ("EMPLOYEES"."LAST_NAME" "EMPLOYEES"."FIRST_NAME")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "D"@"SEL$1" ("DEPARTMENTS"."DEPARTMENT_ID")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "OI"@"SEL$1" ("ORDER_ITEMS"."ORDER_ID")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "I"@"SEL$2" ("PRODUCT_INFORMATION"."PRODUCT_ID")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "D"@"SEL$2" ("PRODUCT_DESCRIPTIONS"."PRODUCT_ID" "PRODUCT_DESCRIPTIONS"."LANGUAGE_ID")) + LEADING(@"SEL$4B12EFE6" "C"@"SEL$1" "O"@"SEL$1" "E"@"SEL$1" "D"@"SEL$1" "OI"@"SEL$1" "I"@"SEL$2" "D"@"SEL$2") + USE_NL(@"SEL$4B12EFE6" "O"@"SEL$1") + USE_NL(@"SEL$4B12EFE6" "E"@"SEL$1") + USE_NL(@"SEL$4B12EFE6" "D"@"SEL$1") + USE_NL(@"SEL$4B12EFE6" "OI"@"SEL$1") + USE_NL(@"SEL$4B12EFE6" "I"@"SEL$2") + USE_NL(@"SEL$4B12EFE6" "D"@"SEL$2") + USE_HASH_AGGREGATION(@"SEL$4B12EFE6") + END_OUTLINE_DATA + */ + +Optimizer state dump: +Compilation Environment Dump +optimizer_mode_hinted = false +optimizer_features_hinted = 0.0.0 +parallel_execution_enabled = true +parallel_query_forced_dop = 0 +parallel_dml_forced_dop = 0 +parallel_ddl_forced_degree = 0 +parallel_ddl_forced_instances = 0 +_query_rewrite_fudge = 90 +optimizer_features_enable = 11.2.0.1 +_optimizer_search_limit = 5 +cpu_count = 2 +active_instance_count = 1 +parallel_threads_per_cpu = 2 +hash_area_size = 131072 +bitmap_merge_area_size = 1048576 +sort_area_size = 65536 +sort_area_retained_size = 0 +_sort_elimination_cost_ratio = 0 +_optimizer_block_size = 8192 +_sort_multiblock_read_count = 2 +_hash_multiblock_io_count = 0 +_db_file_optimizer_read_count = 8 +_optimizer_max_permutations = 2000 +pga_aggregate_target = 286720 KB +_pga_max_size = 204800 KB +_query_rewrite_maxdisjunct = 257 +_smm_auto_min_io_size = 56 KB +_smm_auto_max_io_size = 248 KB +_smm_min_size = 286 KB +_smm_max_size = 57344 KB +_smm_px_max_size = 143360 KB +_cpu_to_io = 0 +_optimizer_undo_cost_change = 11.2.0.1 +parallel_query_mode = enabled +parallel_dml_mode = disabled +parallel_ddl_mode = enabled +optimizer_mode = all_rows +sqlstat_enabled = false +_optimizer_percent_parallel = 101 +_always_anti_join = choose +_always_semi_join = choose +_optimizer_mode_force = true +_partition_view_enabled = true +_always_star_transformation = false +_query_rewrite_or_error = false +_hash_join_enabled = true +cursor_sharing = exact +_b_tree_bitmap_plans = true +star_transformation_enabled = false +_optimizer_cost_model = choose +_new_sort_cost_estimate = true +_complex_view_merging = true +_unnest_subquery = true +_eliminate_common_subexpr = true +_pred_move_around = true +_convert_set_to_join = false +_push_join_predicate = true +_push_join_union_view = true +_fast_full_scan_enabled = true +_optim_enhance_nnull_detection = true +_parallel_broadcast_enabled = true +_px_broadcast_fudge_factor = 100 +_ordered_nested_loop = true +_no_or_expansion = false +optimizer_index_cost_adj = 100 +optimizer_index_caching = 0 +_system_index_caching = 0 +_disable_datalayer_sampling = false +query_rewrite_enabled = true +query_rewrite_integrity = enforced +_query_cost_rewrite = true +_query_rewrite_2 = true +_query_rewrite_1 = true +_query_rewrite_expression = true +_query_rewrite_jgmigrate = true +_query_rewrite_fpc = true +_query_rewrite_drj = true +_full_pwise_join_enabled = true +_partial_pwise_join_enabled = true +_left_nested_loops_random = true +_improved_row_length_enabled = true +_index_join_enabled = true +_enable_type_dep_selectivity = true +_improved_outerjoin_card = true +_optimizer_adjust_for_nulls = true +_optimizer_degree = 0 +_use_column_stats_for_function = true +_subquery_pruning_enabled = true +_subquery_pruning_mv_enabled = false +_or_expand_nvl_predicate = true +_like_with_bind_as_equality = false +_table_scan_cost_plus_one = true +_cost_equality_semi_join = true +_default_non_equality_sel_check = true +_new_initial_join_orders = true +_oneside_colstat_for_equijoins = true +_optim_peek_user_binds = true +_minimal_stats_aggregation = true +_force_temptables_for_gsets = false +workarea_size_policy = auto +_smm_auto_cost_enabled = true +_gs_anti_semi_join_allowed = true +_optim_new_default_join_sel = true +optimizer_dynamic_sampling = 2 +_pre_rewrite_push_pred = true +_optimizer_new_join_card_computation = true +_union_rewrite_for_gs = yes_gset_mvs +_generalized_pruning_enabled = true +_optim_adjust_for_part_skews = true +_force_datefold_trunc = false +statistics_level = typical +_optimizer_system_stats_usage = true +skip_unusable_indexes = true +_remove_aggr_subquery = true +_optimizer_push_down_distinct = 0 +_dml_monitoring_enabled = true +_optimizer_undo_changes = false +_predicate_elimination_enabled = true +_nested_loop_fudge = 100 +_project_view_columns = true +_local_communication_costing_enabled = true +_local_communication_ratio = 50 +_query_rewrite_vop_cleanup = true +_slave_mapping_enabled = true +_optimizer_cost_based_transformation = linear +_optimizer_mjc_enabled = true +_right_outer_hash_enable = true +_spr_push_pred_refspr = true +_optimizer_cache_stats = false +_optimizer_cbqt_factor = 50 +_optimizer_squ_bottomup = true +_fic_area_size = 131072 +_optimizer_skip_scan_enabled = true +_optimizer_cost_filter_pred = false +_optimizer_sortmerge_join_enabled = true +_optimizer_join_sel_sanity_check = true +_mmv_query_rewrite_enabled = true +_bt_mmv_query_rewrite_enabled = true +_add_stale_mv_to_dependency_list = true +_distinct_view_unnesting = false +_optimizer_dim_subq_join_sel = true +_optimizer_disable_strans_sanity_checks = 0 +_optimizer_compute_index_stats = true +_push_join_union_view2 = true +_optimizer_ignore_hints = false +_optimizer_random_plan = 0 +_query_rewrite_setopgrw_enable = true +_optimizer_correct_sq_selectivity = true +_disable_function_based_index = false +_optimizer_join_order_control = 3 +_optimizer_cartesian_enabled = true +_optimizer_starplan_enabled = true +_extended_pruning_enabled = true +_optimizer_push_pred_cost_based = true +_optimizer_null_aware_antijoin = true +_optimizer_extend_jppd_view_types = true +_sql_model_unfold_forloops = run_time +_enable_dml_lock_escalation = false +_bloom_filter_enabled = true +_update_bji_ipdml_enabled = 0 +_optimizer_extended_cursor_sharing = udo +_dm_max_shared_pool_pct = 1 +_optimizer_cost_hjsmj_multimatch = true +_optimizer_transitivity_retain = true +_px_pwg_enabled = true +optimizer_secure_view_merging = true +_optimizer_join_elimination_enabled = true +flashback_table_rpi = non_fbt +_optimizer_cbqt_no_size_restriction = true +_optimizer_enhanced_filter_push = true +_optimizer_filter_pred_pullup = true +_rowsrc_trace_level = 0 +_simple_view_merging = true +_optimizer_rownum_pred_based_fkr = true +_optimizer_better_inlist_costing = all +_optimizer_self_induced_cache_cost = false +_optimizer_min_cache_blocks = 10 +_optimizer_or_expansion = depth +_optimizer_order_by_elimination_enabled = true +_optimizer_outer_to_anti_enabled = true +_selfjoin_mv_duplicates = true +_dimension_skip_null = true +_force_rewrite_enable = false +_optimizer_star_tran_in_with_clause = true +_optimizer_complex_pred_selectivity = true +_optimizer_connect_by_cost_based = true +_gby_hash_aggregation_enabled = true +_globalindex_pnum_filter_enabled = true +_px_minus_intersect = true +_fix_control_key = 0 +_force_slave_mapping_intra_part_loads = false +_force_tmp_segment_loads = false +_query_mmvrewrite_maxpreds = 10 +_query_mmvrewrite_maxintervals = 5 +_query_mmvrewrite_maxinlists = 5 +_query_mmvrewrite_maxdmaps = 10 +_query_mmvrewrite_maxcmaps = 20 +_query_mmvrewrite_maxregperm = 512 +_query_mmvrewrite_maxmergedcmaps = 50 +_query_mmvrewrite_maxqryinlistvals = 500 +_disable_parallel_conventional_load = false +_trace_virtual_columns = false +_replace_virtual_columns = true +_virtual_column_overload_allowed = true +_kdt_buffering = true +_first_k_rows_dynamic_proration = true +_optimizer_sortmerge_join_inequality = true +_optimizer_aw_stats_enabled = true +_bloom_pruning_enabled = true +result_cache_mode = MANUAL +_px_ual_serial_input = true +_optimizer_skip_scan_guess = false +_enable_row_shipping = true +_row_shipping_threshold = 80 +_row_shipping_explain = false +transaction_isolation_level = read_commited +_optimizer_distinct_elimination = true +_optimizer_multi_level_push_pred = true +_optimizer_group_by_placement = true +_optimizer_rownum_bind_default = 10 +_enable_query_rewrite_on_remote_objs = true +_optimizer_extended_cursor_sharing_rel = simple +_optimizer_adaptive_cursor_sharing = true +_direct_path_insert_features = 0 +_optimizer_improve_selectivity = true +optimizer_use_pending_statistics = false +_optimizer_enable_density_improvements = true +_optimizer_aw_join_push_enabled = true +_optimizer_connect_by_combine_sw = true +_enable_pmo_ctas = 0 +_optimizer_native_full_outer_join = force +_bloom_predicate_enabled = true +_optimizer_enable_extended_stats = true +_is_lock_table_for_ddl_wait_lock = 0 +_pivot_implementation_method = choose +optimizer_capture_sql_plan_baselines = false +optimizer_use_sql_plan_baselines = true +_optimizer_star_trans_min_cost = 0 +_optimizer_star_trans_min_ratio = 0 +_with_subquery = OPTIMIZER +_optimizer_fkr_index_cost_bias = 10 +_optimizer_use_subheap = true +parallel_degree_policy = manual +parallel_degree = 0 +parallel_min_time_threshold = 10 +_parallel_time_unit = 10 +_optimizer_or_expansion_subheap = true +_optimizer_free_transformation_heap = true +_optimizer_reuse_cost_annotations = true +_result_cache_auto_size_threshold = 100 +_result_cache_auto_time_threshold = 1000 +_optimizer_nested_rollup_for_gset = 100 +_nlj_batching_enabled = 1 +parallel_query_default_dop = 0 +is_recur_flags = 0 +optimizer_use_invisible_indexes = false +flashback_data_archive_internal_cursor = 0 +_optimizer_extended_stats_usage_control = 224 +_parallel_syspls_obey_force = true +cell_offload_processing = true +_rdbms_internal_fplib_enabled = false +db_file_multiblock_read_count = 126 +_bloom_folding_enabled = true +_mv_generalized_oj_refresh_opt = true +cell_offload_compaction = ADAPTIVE +parallel_degree_limit = 65535 +parallel_force_local = false +parallel_max_degree = 4 +total_cpu_count = 2 +cell_offload_plan_display = AUTO +_optimizer_coalesce_subqueries = true +_optimizer_fast_pred_transitivity = true +_optimizer_fast_access_pred_analysis = true +_optimizer_unnest_disjunctive_subq = true +_optimizer_unnest_corr_set_subq = true +_optimizer_distinct_agg_transform = true +_aggregation_optimization_settings = 0 +_optimizer_connect_by_elim_dups = true +_optimizer_eliminate_filtering_join = true +_connect_by_use_union_all = true +dst_upgrade_insert_conv = true +advanced_queuing_internal_cursor = 0 +_optimizer_unnest_all_subqueries = true +_bloom_predicate_pushdown_to_storage = true +_bloom_vector_elements = 0 +_bloom_pushing_max = 524288 +parallel_autodop = 0 +parallel_ddldml = 0 +_parallel_cluster_cache_policy = adaptive +_parallel_scalability = 50 +iot_internal_cursor = 0 +_optimizer_instance_count = 0 +_optimizer_connect_by_cb_whr_only = false +_suppress_scn_chk_for_cqn = nosuppress_1466 +_optimizer_join_factorization = true +_optimizer_use_cbqt_star_transformation = true +_optimizer_table_expansion = true +_and_pruning_enabled = true +_deferred_constant_folding_mode = DEFAULT +_optimizer_distinct_placement = true +partition_pruning_internal_cursor = 0 +parallel_hinted = none +_sql_compatibility = 0 +_optimizer_use_feedback = true +_optimizer_try_st_before_jppd = true +Bug Fix Control Environment + fix 3834770 = 1 + fix 3746511 = enabled + fix 4519016 = enabled + fix 3118776 = enabled + fix 4488689 = enabled + fix 2194204 = disabled + fix 2660592 = enabled + fix 2320291 = enabled + fix 2324795 = enabled + fix 4308414 = enabled + fix 3499674 = disabled + fix 4569940 = enabled + fix 4631959 = enabled + fix 4519340 = enabled + fix 4550003 = enabled + fix 1403283 = enabled + fix 4554846 = enabled + fix 4602374 = enabled + fix 4584065 = enabled + fix 4545833 = enabled + fix 4611850 = enabled + fix 4663698 = enabled + fix 4663804 = enabled + fix 4666174 = enabled + fix 4567767 = enabled + fix 4556762 = 15 + fix 4728348 = enabled + fix 4708389 = enabled + fix 4175830 = enabled + fix 4752814 = enabled + fix 4583239 = enabled + fix 4386734 = enabled + fix 4887636 = enabled + fix 4483240 = enabled + fix 4872602 = disabled + fix 4711525 = enabled + fix 4545802 = enabled + fix 4605810 = enabled + fix 4704779 = enabled + fix 4900129 = enabled + fix 4924149 = enabled + fix 4663702 = enabled + fix 4878299 = enabled + fix 4658342 = enabled + fix 4881533 = enabled + fix 4676955 = enabled + fix 4273361 = enabled + fix 4967068 = enabled + fix 4969880 = disabled + fix 5005866 = enabled + fix 5015557 = enabled + fix 4705343 = enabled + fix 4904838 = enabled + fix 4716096 = enabled + fix 4483286 = disabled + fix 4722900 = enabled + fix 4615392 = enabled + fix 5096560 = enabled + fix 5029464 = enabled + fix 4134994 = enabled + fix 4904890 = enabled + fix 5104624 = enabled + fix 5014836 = enabled + fix 4768040 = enabled + fix 4600710 = enabled + fix 5129233 = enabled + fix 4595987 = enabled + fix 4908162 = enabled + fix 5139520 = enabled + fix 5084239 = enabled + fix 5143477 = disabled + fix 2663857 = enabled + fix 4717546 = enabled + fix 5240264 = disabled + fix 5099909 = enabled + fix 5240607 = enabled + fix 5195882 = enabled + fix 5220356 = enabled + fix 5263572 = enabled + fix 5385629 = enabled + fix 5302124 = enabled + fix 5391942 = enabled + fix 5384335 = enabled + fix 5482831 = enabled + fix 4158812 = enabled + fix 5387148 = enabled + fix 5383891 = enabled + fix 5466973 = enabled + fix 5396162 = enabled + fix 5394888 = enabled + fix 5395291 = enabled + fix 5236908 = enabled + fix 5509293 = enabled + fix 5449488 = enabled + fix 5567933 = enabled + fix 5570494 = enabled + fix 5288623 = enabled + fix 5505995 = enabled + fix 5505157 = enabled + fix 5112460 = enabled + fix 5554865 = enabled + fix 5112260 = enabled + fix 5112352 = enabled + fix 5547058 = enabled + fix 5618040 = enabled + fix 5585313 = enabled + fix 5547895 = enabled + fix 5634346 = enabled + fix 5620485 = enabled + fix 5483301 = enabled + fix 5657044 = enabled + fix 5694984 = enabled + fix 5868490 = enabled + fix 5650477 = enabled + fix 5611962 = enabled + fix 4279274 = enabled + fix 5741121 = enabled + fix 5714944 = enabled + fix 5391505 = enabled + fix 5762598 = enabled + fix 5578791 = enabled + fix 5259048 = enabled + fix 5882954 = enabled + fix 2492766 = enabled + fix 5707608 = enabled + fix 5891471 = enabled + fix 5884780 = enabled + fix 5680702 = enabled + fix 5371452 = enabled + fix 5838613 = enabled + fix 5949981 = enabled + fix 5624216 = enabled + fix 5741044 = enabled + fix 5976822 = enabled + fix 6006457 = enabled + fix 5872956 = enabled + fix 5923644 = enabled + fix 5943234 = enabled + fix 5844495 = enabled + fix 4168080 = enabled + fix 6020579 = enabled + fix 5842686 = disabled + fix 5996801 = enabled + fix 5593639 = enabled + fix 6133948 = enabled + fix 3151991 = enabled + fix 6146906 = enabled + fix 6239909 = enabled + fix 6267621 = enabled + fix 5909305 = enabled + fix 6279918 = enabled + fix 6141818 = enabled + fix 6151963 = enabled + fix 6251917 = enabled + fix 6282093 = enabled + fix 6119510 = enabled + fix 6119382 = enabled + fix 3801750 = enabled + fix 5705630 = disabled + fix 5944076 = enabled + fix 5406763 = enabled + fix 6070954 = enabled + fix 6282944 = enabled + fix 6138746 = enabled + fix 6082745 = enabled + fix 3426050 = enabled + fix 599680 = enabled + fix 6062266 = enabled + fix 6087237 = enabled + fix 6122894 = enabled + fix 6377505 = enabled + fix 5893768 = enabled + fix 6163564 = enabled + fix 6073325 = enabled + fix 6188881 = enabled + fix 6007259 = enabled + fix 6239971 = enabled + fix 5284200 = disabled + fix 6042205 = enabled + fix 6051211 = enabled + fix 6434668 = enabled + fix 6438752 = enabled + fix 5936366 = enabled + fix 6439032 = enabled + fix 6438892 = enabled + fix 6006300 = enabled + fix 5947231 = enabled + fix 5416118 = 1 + fix 6365442 = 1 + fix 6239039 = enabled + fix 6502845 = enabled + fix 6913094 = enabled + fix 6029469 = enabled + fix 5919513 = enabled + fix 6057611 = enabled + fix 6469667 = enabled + fix 6608941 = disabled + fix 6368066 = enabled + fix 6329318 = enabled + fix 6656356 = enabled + fix 4507997 = enabled + fix 6671155 = enabled + fix 6694548 = enabled + fix 6688200 = enabled + fix 6612471 = enabled + fix 6708183 = disabled + fix 6326934 = enabled + fix 6520717 = disabled + fix 6714199 = enabled + fix 6681545 = enabled + fix 6748058 = enabled + fix 6167716 = enabled + fix 6674254 = enabled + fix 6468287 = enabled + fix 6503543 = enabled + fix 6808773 = disabled + fix 6766962 = enabled + fix 6120483 = enabled + fix 6670551 = enabled + fix 6771838 = enabled + fix 6626018 = disabled + fix 6530596 = enabled + fix 6778642 = enabled + fix 6699059 = enabled + fix 6376551 = enabled + fix 6429113 = enabled + fix 6782437 = enabled + fix 6776808 = enabled + fix 6765823 = enabled + fix 6768660 = enabled + fix 6782665 = enabled + fix 6610822 = enabled + fix 6514189 = enabled + fix 6818410 = enabled + fix 6827696 = enabled + fix 6773613 = enabled + fix 5902962 = enabled + fix 6956212 = enabled + fix 3056297 = enabled + fix 6440977 = disabled + fix 6972291 = disabled + fix 6904146 = enabled + fix 6221403 = enabled + fix 5475051 = enabled + fix 6845871 = enabled + fix 5468809 = enabled + fix 6917633 = enabled + fix 4444536 = disabled + fix 6955210 = enabled + fix 6994194 = enabled + fix 6399597 = disabled + fix 6951776 = enabled + fix 5648287 = 3 + fix 6987082 = disabled + fix 7132036 = enabled + fix 6980350 = enabled + fix 5199213 = enabled + fix 7138405 = enabled + fix 7148689 = enabled + fix 6820988 = enabled + fix 7032684 = enabled + fix 6617866 = enabled + fix 7155968 = enabled + fix 7127980 = enabled + fix 6982954 = enabled + fix 7241819 = enabled + fix 6897034 = enabled + fix 7236148 = enabled + fix 7298570 = enabled + fix 7249095 = enabled + fix 7314499 = enabled + fix 7324224 = enabled + fix 7289023 = enabled + fix 7237571 = enabled + fix 7116357 = enabled + fix 7345484 = enabled + fix 7375179 = enabled + fix 6430500 = disabled + fix 5897486 = enabled + fix 6774209 = enabled + fix 7306637 = enabled + fix 6451322 = enabled + fix 7208131 = enabled + fix 7388652 = enabled + fix 7127530 = enabled + fix 6751206 = enabled + fix 6669103 = enabled + fix 7430474 = enabled + fix 6990305 = enabled + fix 7043307 = enabled + fix 6921505 = enabled + fix 7388457 = enabled + fix 3120429 = enabled + fix 7452823 = disabled + fix 6838105 = enabled + fix 6769711 = enabled + fix 7170213 = enabled + fix 6528872 = enabled + fix 7295298 = enabled + fix 5922070 = enabled + fix 7259468 = enabled + fix 6418552 = enabled + fix 4619997 = enabled + fix 7524366 = enabled + fix 6942476 = enabled + fix 6418771 = enabled + fix 7375077 = enabled + fix 5400639 = enabled + fix 4570921 = enabled + fix 7426911 = enabled + fix 5099019 = disabled + fix 7528216 = enabled + fix 7521266 = enabled + fix 7385140 = enabled + fix 7576516 = enabled + fix 7573526 = enabled + fix 7576476 = enabled + fix 7165898 = enabled + fix 7263214 = enabled + fix 3320140 = enabled + fix 7555510 = enabled + fix 7613118 = enabled + fix 7597059 = enabled + fix 7558911 = enabled + fix 5520732 = enabled + fix 7679490 = disabled + fix 7449971 = enabled + fix 3628118 = enabled + fix 4370840 = enabled + fix 7281191 = enabled + fix 7519687 = enabled + fix 5029592 = 3 + fix 6012093 = 1 + fix 6053861 = disabled + fix 6941515 = disabled + fix 7696414 = enabled + fix 7272039 = enabled + fix 7834811 = enabled + fix 7640597 = enabled + fix 7341616 = enabled + fix 7168184 = enabled + fix 399198 = enabled + fix 7831070 = enabled + fix 7676897 = disabled + fix 7414637 = enabled + fix 7585456 = enabled + fix 8202421 = enabled + fix 7658097 = disabled + fix 8251486 = enabled + fix 7132684 = enabled + fix 7512227 = enabled + fix 6972987 = enabled + fix 7199035 = enabled + fix 8243446 = enabled + fix 7650462 = enabled + fix 6720701 = enabled + fix 7592673 = enabled + fix 7718694 = enabled + fix 7534027 = enabled + fix 7708267 = enabled + fix 5716785 = enabled + fix 7356191 = enabled + fix 7679161 = enabled + fix 7597159 = enabled + fix 7499258 = enabled + fix 8328363 = enabled + fix 7452863 = enabled + fix 8284930 = enabled + fix 7298626 = enabled + fix 7657126 = enabled + fix 8371884 = enabled + fix 8318020 = enabled + fix 8255423 = enabled + fix 7135745 = enabled + fix 8356253 = enabled + fix 7534257 = enabled + fix 8323407 = enabled + fix 7539815 = enabled + fix 8289316 = enabled + fix 8447850 = enabled + fix 7675944 = enabled + fix 8355120 = enabled + fix 7176746 = enabled + fix 8442891 = enabled + fix 8373261 = enabled + fix 7679164 = enabled + fix 7670533 = enabled + fix 8408665 = enabled + fix 8491399 = enabled + fix 8348392 = enabled + fix 8348585 = enabled + fix 8508056 = enabled + fix 8335178 = enabled + fix 8515269 = enabled + fix 8247017 = enabled + fix 7325597 = enabled + fix 8531490 = enabled + fix 6163600 = enabled + fix 8589278 = disabled + fix 8557992 = enabled + fix 7556098 = enabled + fix 8580883 = enabled + fix 5892599 = disabled + fix 8609714 = enabled + fix 8514561 = enabled + fix 8619631 = disabled + + +Query Block Registry: +SEL$2 0xfdb563d0 (PARSER) + SEL$4B12EFE6 0xfdbfdca8 (VIEW MERGE SEL$31BE1502; SEL$2) [FINAL] +SEL$1 0xfdbfdca8 (PARSER) + SEL$31BE1502 0xfdbfdca8 (JOIN REMOVED FROM QUERY BLOCK SEL$1; SEL$1; "PROM"@"SEL$1") + SEL$4B12EFE6 0xfdbfdca8 (VIEW MERGE SEL$31BE1502; SEL$2) [FINAL] + SEL$31BE1502 0xfdbfdca8 (JOIN REMOVED FROM QUERY BLOCK SEL$1; SEL$1; "PROM"@"SEL$1") + ... + +: + call(in-use=147040, alloc=427752), compile(in-use=390456, alloc=459304), execution(in-use=52088, alloc=52704) + +End of Optimizer State Dump +Dumping Hints +============= + atom_hint=(@=3a4cf6098 err=0 resol=0 used=1 token=1087 org=1 lvl=1 txt=OPT_PARAM ()) +====================== END SQL Statement Dump ====================== diff --git a/tpt/ast/trace/a.txt b/tpt/ast/trace/a.txt new file mode 100644 index 0000000..0531f7d --- /dev/null +++ b/tpt/ast/trace/a.txt @@ -0,0 +1,10920 @@ +Trace file /export/home/oracle/diag/rdbms/sol112/SOL112/trace/SOL112_ora_29553_0001.trc +Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production +With the Partitioning, OLAP, Data Mining and Real Application Testing options +ORACLE_HOME = /export/home/oracle/product/11.2.0/db_1 +System name: SunOS +Node name: solaris02 +Release: 5.11 +Version: snv_111b +Machine: i86pc +Instance name: SOL112 +Redo thread mounted by this instance: 1 +Oracle process number: 25 +Unix process pid: 29553, image: oracle@solaris02 + + +*** 2010-04-29 18:11:44.984 +*** SESSION ID:(142.6373) 2010-04-29 18:11:44.984 +*** CLIENT ID:() 2010-04-29 18:11:44.984 +*** SERVICE NAME:(SOL112) 2010-04-29 18:11:44.984 +*** MODULE NAME:(SQL*Plus) 2010-04-29 18:11:44.984 +*** ACTION NAME:() 2010-04-29 18:11:44.984 + + +*** TRACE CONTINUED FROM FILE /export/home/oracle/diag/rdbms/sol112/SOL112/trace/SOL112_ora_29553.trc *** + +Registered qb: SEL$1 0xfdbfdca8 (PARSER) +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature (): qb_name=SEL$1 nbfros=7 flg=0 + fro(0): flg=4 objn=74142 hint_alias="C"@"SEL$1" + fro(1): flg=4 objn=74123 hint_alias="D"@"SEL$1" + fro(2): flg=4 objn=74128 hint_alias="E"@"SEL$1" + fro(3): flg=4 objn=74165 hint_alias="O"@"SEL$1" + fro(4): flg=4 objn=74160 hint_alias="OI"@"SEL$1" + fro(5): flg=5 objn=74600 hint_alias="PROD"@"SEL$1" + fro(6): flg=4 objn=74179 hint_alias="PROM"@"SEL$1" + +Registered qb: SEL$2 0xfdb563d0 (PARSER) +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature (): qb_name=SEL$2 nbfros=2 flg=0 + fro(0): flg=4 objn=74176 hint_alias="D"@"SEL$2" + fro(1): flg=4 objn=74173 hint_alias="I"@"SEL$2" + +SPM: statement not found in SMB + +************************** +Automatic degree of parallelism (ADOP) +************************** +Automatic degree of parallelism is disabled: Parameter. + +PM: Considering predicate move-around in query block SEL$1 (#0) +************************** +Predicate Move-Around (PM) +************************** +OPTIMIZER INFORMATION + +****************************************** +----- Current SQL Statement for this session (sql_id=3qy33cc7bz0y2) ----- +SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + oe.orders o + , oe.order_items oi + , oe.products prod + , oe.customers c + , oe.promotions prom + , hr.employees e + , hr.departments d +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND d.department_id = e.department_id + -- filters +AND d.department_name = 'Sales' +AND e.first_name = 'William' +AND e.last_name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' +AND c.cust_first_name = 'Gena' +AND c.cust_last_name = 'Harris' +GROUP BY + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price +******************************************* +Legend +The following abbreviations are used by optimizer trace. +CBQT - cost-based query transformation +JPPD - join predicate push-down +OJPPD - old-style (non-cost-based) JPPD +FPD - filter push-down +PM - predicate move-around +CVM - complex view merging +SPJ - select-project-join +SJC - set join conversion +SU - subquery unnesting +OBYE - order by elimination +OST - old style star transformation +ST - new (cbqt) star transformation +CNT - count(col) to count(*) transformation +JE - Join Elimination +JF - join factorization +SLP - select list pruning +DP - distinct placement +qb - query block +LB - leaf blocks +DK - distinct keys +LB/K - average number of leaf blocks per key +DB/K - average number of data blocks per key +CLUF - clustering factor +NDV - number of distinct values +Resp - response cost +Card - cardinality +Resc - resource cost +NL - nested loops (join) +SM - sort merge (join) +HA - hash (join) +CPUSPEED - CPU Speed +IOTFRSPEED - I/O transfer speed +IOSEEKTIM - I/O seek time +SREADTIM - average single block read time +MREADTIM - average multiblock read time +MBRC - average multiblock read count +MAXTHR - maximum I/O system throughput +SLAVETHR - average slave I/O throughput +dmeth - distribution method + 1: no partitioning required + 2: value partitioned + 4: right is random (round-robin) + 128: left is random (round-robin) + 8: broadcast right and partition left + 16: broadcast left and partition right + 32: partition left using partitioning of right + 64: partition right using partitioning of left + 256: run the join in serial + 0: invalid distribution method +sel - selectivity +ptn - partition +*************************************** +PARAMETERS USED BY THE OPTIMIZER +******************************** + ************************************* + PARAMETERS WITH ALTERED VALUES + ****************************** +Compilation Environment Dump +Bug Fix Control Environment + + + ************************************* + PARAMETERS WITH DEFAULT VALUES + ****************************** +Compilation Environment Dump +optimizer_mode_hinted = false +optimizer_features_hinted = 0.0.0 +parallel_execution_enabled = true +parallel_query_forced_dop = 0 +parallel_dml_forced_dop = 0 +parallel_ddl_forced_degree = 0 +parallel_ddl_forced_instances = 0 +_query_rewrite_fudge = 90 +optimizer_features_enable = 11.2.0.1 +_optimizer_search_limit = 5 +cpu_count = 2 +active_instance_count = 1 +parallel_threads_per_cpu = 2 +hash_area_size = 131072 +bitmap_merge_area_size = 1048576 +sort_area_size = 65536 +sort_area_retained_size = 0 +_sort_elimination_cost_ratio = 0 +_optimizer_block_size = 8192 +_sort_multiblock_read_count = 2 +_hash_multiblock_io_count = 0 +_db_file_optimizer_read_count = 8 +_optimizer_max_permutations = 2000 +pga_aggregate_target = 286720 KB +_pga_max_size = 204800 KB +_query_rewrite_maxdisjunct = 257 +_smm_auto_min_io_size = 56 KB +_smm_auto_max_io_size = 248 KB +_smm_min_size = 286 KB +_smm_max_size = 57344 KB +_smm_px_max_size = 143360 KB +_cpu_to_io = 0 +_optimizer_undo_cost_change = 11.2.0.1 +parallel_query_mode = enabled +parallel_dml_mode = disabled +parallel_ddl_mode = enabled +optimizer_mode = all_rows +sqlstat_enabled = false +_optimizer_percent_parallel = 101 +_always_anti_join = choose +_always_semi_join = choose +_optimizer_mode_force = true +_partition_view_enabled = true +_always_star_transformation = false +_query_rewrite_or_error = false +_hash_join_enabled = true +cursor_sharing = exact +_b_tree_bitmap_plans = true +star_transformation_enabled = false +_optimizer_cost_model = choose +_new_sort_cost_estimate = true +_complex_view_merging = true +_unnest_subquery = true +_eliminate_common_subexpr = true +_pred_move_around = true +_convert_set_to_join = false +_push_join_predicate = true +_push_join_union_view = true +_fast_full_scan_enabled = true +_optim_enhance_nnull_detection = true +_parallel_broadcast_enabled = true +_px_broadcast_fudge_factor = 100 +_ordered_nested_loop = true +_no_or_expansion = false +optimizer_index_cost_adj = 100 +optimizer_index_caching = 0 +_system_index_caching = 0 +_disable_datalayer_sampling = false +query_rewrite_enabled = true +query_rewrite_integrity = enforced +_query_cost_rewrite = true +_query_rewrite_2 = true +_query_rewrite_1 = true +_query_rewrite_expression = true +_query_rewrite_jgmigrate = true +_query_rewrite_fpc = true +_query_rewrite_drj = true +_full_pwise_join_enabled = true +_partial_pwise_join_enabled = true +_left_nested_loops_random = true +_improved_row_length_enabled = true +_index_join_enabled = true +_enable_type_dep_selectivity = true +_improved_outerjoin_card = true +_optimizer_adjust_for_nulls = true +_optimizer_degree = 0 +_use_column_stats_for_function = true +_subquery_pruning_enabled = true +_subquery_pruning_mv_enabled = false +_or_expand_nvl_predicate = true +_like_with_bind_as_equality = false +_table_scan_cost_plus_one = true +_cost_equality_semi_join = true +_default_non_equality_sel_check = true +_new_initial_join_orders = true +_oneside_colstat_for_equijoins = true +_optim_peek_user_binds = true +_minimal_stats_aggregation = true +_force_temptables_for_gsets = false +workarea_size_policy = auto +_smm_auto_cost_enabled = true +_gs_anti_semi_join_allowed = true +_optim_new_default_join_sel = true +optimizer_dynamic_sampling = 2 +_pre_rewrite_push_pred = true +_optimizer_new_join_card_computation = true +_union_rewrite_for_gs = yes_gset_mvs +_generalized_pruning_enabled = true +_optim_adjust_for_part_skews = true +_force_datefold_trunc = false +statistics_level = typical +_optimizer_system_stats_usage = true +skip_unusable_indexes = true +_remove_aggr_subquery = true +_optimizer_push_down_distinct = 0 +_dml_monitoring_enabled = true +_optimizer_undo_changes = false +_predicate_elimination_enabled = true +_nested_loop_fudge = 100 +_project_view_columns = true +_local_communication_costing_enabled = true +_local_communication_ratio = 50 +_query_rewrite_vop_cleanup = true +_slave_mapping_enabled = true +_optimizer_cost_based_transformation = linear +_optimizer_mjc_enabled = true +_right_outer_hash_enable = true +_spr_push_pred_refspr = true +_optimizer_cache_stats = false +_optimizer_cbqt_factor = 50 +_optimizer_squ_bottomup = true +_fic_area_size = 131072 +_optimizer_skip_scan_enabled = true +_optimizer_cost_filter_pred = false +_optimizer_sortmerge_join_enabled = true +_optimizer_join_sel_sanity_check = true +_mmv_query_rewrite_enabled = true +_bt_mmv_query_rewrite_enabled = true +_add_stale_mv_to_dependency_list = true +_distinct_view_unnesting = false +_optimizer_dim_subq_join_sel = true +_optimizer_disable_strans_sanity_checks = 0 +_optimizer_compute_index_stats = true +_push_join_union_view2 = true +_optimizer_ignore_hints = false +_optimizer_random_plan = 0 +_query_rewrite_setopgrw_enable = true +_optimizer_correct_sq_selectivity = true +_disable_function_based_index = false +_optimizer_join_order_control = 3 +_optimizer_cartesian_enabled = true +_optimizer_starplan_enabled = true +_extended_pruning_enabled = true +_optimizer_push_pred_cost_based = true +_optimizer_null_aware_antijoin = true +_optimizer_extend_jppd_view_types = true +_sql_model_unfold_forloops = run_time +_enable_dml_lock_escalation = false +_bloom_filter_enabled = true +_update_bji_ipdml_enabled = 0 +_optimizer_extended_cursor_sharing = udo +_dm_max_shared_pool_pct = 1 +_optimizer_cost_hjsmj_multimatch = true +_optimizer_transitivity_retain = true +_px_pwg_enabled = true +optimizer_secure_view_merging = true +_optimizer_join_elimination_enabled = true +flashback_table_rpi = non_fbt +_optimizer_cbqt_no_size_restriction = true +_optimizer_enhanced_filter_push = true +_optimizer_filter_pred_pullup = true +_rowsrc_trace_level = 0 +_simple_view_merging = true +_optimizer_rownum_pred_based_fkr = true +_optimizer_better_inlist_costing = all +_optimizer_self_induced_cache_cost = false +_optimizer_min_cache_blocks = 10 +_optimizer_or_expansion = depth +_optimizer_order_by_elimination_enabled = true +_optimizer_outer_to_anti_enabled = true +_selfjoin_mv_duplicates = true +_dimension_skip_null = true +_force_rewrite_enable = false +_optimizer_star_tran_in_with_clause = true +_optimizer_complex_pred_selectivity = true +_optimizer_connect_by_cost_based = true +_gby_hash_aggregation_enabled = true +_globalindex_pnum_filter_enabled = true +_px_minus_intersect = true +_fix_control_key = 0 +_force_slave_mapping_intra_part_loads = false +_force_tmp_segment_loads = false +_query_mmvrewrite_maxpreds = 10 +_query_mmvrewrite_maxintervals = 5 +_query_mmvrewrite_maxinlists = 5 +_query_mmvrewrite_maxdmaps = 10 +_query_mmvrewrite_maxcmaps = 20 +_query_mmvrewrite_maxregperm = 512 +_query_mmvrewrite_maxmergedcmaps = 50 +_query_mmvrewrite_maxqryinlistvals = 500 +_disable_parallel_conventional_load = false +_trace_virtual_columns = false +_replace_virtual_columns = true +_virtual_column_overload_allowed = true +_kdt_buffering = true +_first_k_rows_dynamic_proration = true +_optimizer_sortmerge_join_inequality = true +_optimizer_aw_stats_enabled = true +_bloom_pruning_enabled = true +result_cache_mode = MANUAL +_px_ual_serial_input = true +_optimizer_skip_scan_guess = false +_enable_row_shipping = true +_row_shipping_threshold = 80 +_row_shipping_explain = false +transaction_isolation_level = read_commited +_optimizer_distinct_elimination = true +_optimizer_multi_level_push_pred = true +_optimizer_group_by_placement = true +_optimizer_rownum_bind_default = 10 +_enable_query_rewrite_on_remote_objs = true +_optimizer_extended_cursor_sharing_rel = simple +_optimizer_adaptive_cursor_sharing = true +_direct_path_insert_features = 0 +_optimizer_improve_selectivity = true +optimizer_use_pending_statistics = false +_optimizer_enable_density_improvements = true +_optimizer_aw_join_push_enabled = true +_optimizer_connect_by_combine_sw = true +_enable_pmo_ctas = 0 +_optimizer_native_full_outer_join = force +_bloom_predicate_enabled = true +_optimizer_enable_extended_stats = true +_is_lock_table_for_ddl_wait_lock = 0 +_pivot_implementation_method = choose +optimizer_capture_sql_plan_baselines = false +optimizer_use_sql_plan_baselines = true +_optimizer_star_trans_min_cost = 0 +_optimizer_star_trans_min_ratio = 0 +_with_subquery = OPTIMIZER +_optimizer_fkr_index_cost_bias = 10 +_optimizer_use_subheap = true +parallel_degree_policy = manual +parallel_degree = 0 +parallel_min_time_threshold = 10 +_parallel_time_unit = 10 +_optimizer_or_expansion_subheap = true +_optimizer_free_transformation_heap = true +_optimizer_reuse_cost_annotations = true +_result_cache_auto_size_threshold = 100 +_result_cache_auto_time_threshold = 1000 +_optimizer_nested_rollup_for_gset = 100 +_nlj_batching_enabled = 1 +parallel_query_default_dop = 0 +is_recur_flags = 0 +optimizer_use_invisible_indexes = false +flashback_data_archive_internal_cursor = 0 +_optimizer_extended_stats_usage_control = 224 +_parallel_syspls_obey_force = true +cell_offload_processing = true +_rdbms_internal_fplib_enabled = false +db_file_multiblock_read_count = 126 +_bloom_folding_enabled = true +_mv_generalized_oj_refresh_opt = true +cell_offload_compaction = ADAPTIVE +parallel_degree_limit = 65535 +parallel_force_local = false +parallel_max_degree = 4 +total_cpu_count = 2 +cell_offload_plan_display = AUTO +_optimizer_coalesce_subqueries = true +_optimizer_fast_pred_transitivity = true +_optimizer_fast_access_pred_analysis = true +_optimizer_unnest_disjunctive_subq = true +_optimizer_unnest_corr_set_subq = true +_optimizer_distinct_agg_transform = true +_aggregation_optimization_settings = 0 +_optimizer_connect_by_elim_dups = true +_optimizer_eliminate_filtering_join = true +_connect_by_use_union_all = true +dst_upgrade_insert_conv = true +advanced_queuing_internal_cursor = 0 +_optimizer_unnest_all_subqueries = true +_bloom_predicate_pushdown_to_storage = true +_bloom_vector_elements = 0 +_bloom_pushing_max = 524288 +parallel_autodop = 0 +parallel_ddldml = 0 +_parallel_cluster_cache_policy = adaptive +_parallel_scalability = 50 +iot_internal_cursor = 0 +_optimizer_instance_count = 0 +_optimizer_connect_by_cb_whr_only = false +_suppress_scn_chk_for_cqn = nosuppress_1466 +_optimizer_join_factorization = true +_optimizer_use_cbqt_star_transformation = true +_optimizer_table_expansion = true +_and_pruning_enabled = true +_deferred_constant_folding_mode = DEFAULT +_optimizer_distinct_placement = true +partition_pruning_internal_cursor = 0 +parallel_hinted = none +_sql_compatibility = 0 +_optimizer_use_feedback = true +_optimizer_try_st_before_jppd = true +Bug Fix Control Environment + fix 3834770 = 1 + fix 3746511 = enabled + fix 4519016 = enabled + fix 3118776 = enabled + fix 4488689 = enabled + fix 2194204 = disabled + fix 2660592 = enabled + fix 2320291 = enabled + fix 2324795 = enabled + fix 4308414 = enabled + fix 3499674 = disabled + fix 4569940 = enabled + fix 4631959 = enabled + fix 4519340 = enabled + fix 4550003 = enabled + fix 1403283 = enabled + fix 4554846 = enabled + fix 4602374 = enabled + fix 4584065 = enabled + fix 4545833 = enabled + fix 4611850 = enabled + fix 4663698 = enabled + fix 4663804 = enabled + fix 4666174 = enabled + fix 4567767 = enabled + fix 4556762 = 15 + fix 4728348 = enabled + fix 4708389 = enabled + fix 4175830 = enabled + fix 4752814 = enabled + fix 4583239 = enabled + fix 4386734 = enabled + fix 4887636 = enabled + fix 4483240 = enabled + fix 4872602 = disabled + fix 4711525 = enabled + fix 4545802 = enabled + fix 4605810 = enabled + fix 4704779 = enabled + fix 4900129 = enabled + fix 4924149 = enabled + fix 4663702 = enabled + fix 4878299 = enabled + fix 4658342 = enabled + fix 4881533 = enabled + fix 4676955 = enabled + fix 4273361 = enabled + fix 4967068 = enabled + fix 4969880 = disabled + fix 5005866 = enabled + fix 5015557 = enabled + fix 4705343 = enabled + fix 4904838 = enabled + fix 4716096 = enabled + fix 4483286 = disabled + fix 4722900 = enabled + fix 4615392 = enabled + fix 5096560 = enabled + fix 5029464 = enabled + fix 4134994 = enabled + fix 4904890 = enabled + fix 5104624 = enabled + fix 5014836 = enabled + fix 4768040 = enabled + fix 4600710 = enabled + fix 5129233 = enabled + fix 4595987 = enabled + fix 4908162 = enabled + fix 5139520 = enabled + fix 5084239 = enabled + fix 5143477 = disabled + fix 2663857 = enabled + fix 4717546 = enabled + fix 5240264 = disabled + fix 5099909 = enabled + fix 5240607 = enabled + fix 5195882 = enabled + fix 5220356 = enabled + fix 5263572 = enabled + fix 5385629 = enabled + fix 5302124 = enabled + fix 5391942 = enabled + fix 5384335 = enabled + fix 5482831 = enabled + fix 4158812 = enabled + fix 5387148 = enabled + fix 5383891 = enabled + fix 5466973 = enabled + fix 5396162 = enabled + fix 5394888 = enabled + fix 5395291 = enabled + fix 5236908 = enabled + fix 5509293 = enabled + fix 5449488 = enabled + fix 5567933 = enabled + fix 5570494 = enabled + fix 5288623 = enabled + fix 5505995 = enabled + fix 5505157 = enabled + fix 5112460 = enabled + fix 5554865 = enabled + fix 5112260 = enabled + fix 5112352 = enabled + fix 5547058 = enabled + fix 5618040 = enabled + fix 5585313 = enabled + fix 5547895 = enabled + fix 5634346 = enabled + fix 5620485 = enabled + fix 5483301 = enabled + fix 5657044 = enabled + fix 5694984 = enabled + fix 5868490 = enabled + fix 5650477 = enabled + fix 5611962 = enabled + fix 4279274 = enabled + fix 5741121 = enabled + fix 5714944 = enabled + fix 5391505 = enabled + fix 5762598 = enabled + fix 5578791 = enabled + fix 5259048 = enabled + fix 5882954 = enabled + fix 2492766 = enabled + fix 5707608 = enabled + fix 5891471 = enabled + fix 5884780 = enabled + fix 5680702 = enabled + fix 5371452 = enabled + fix 5838613 = enabled + fix 5949981 = enabled + fix 5624216 = enabled + fix 5741044 = enabled + fix 5976822 = enabled + fix 6006457 = enabled + fix 5872956 = enabled + fix 5923644 = enabled + fix 5943234 = enabled + fix 5844495 = enabled + fix 4168080 = enabled + fix 6020579 = enabled + fix 5842686 = disabled + fix 5996801 = enabled + fix 5593639 = enabled + fix 6133948 = enabled + fix 3151991 = enabled + fix 6146906 = enabled + fix 6239909 = enabled + fix 6267621 = enabled + fix 5909305 = enabled + fix 6279918 = enabled + fix 6141818 = enabled + fix 6151963 = enabled + fix 6251917 = enabled + fix 6282093 = enabled + fix 6119510 = enabled + fix 6119382 = enabled + fix 3801750 = enabled + fix 5705630 = disabled + fix 5944076 = enabled + fix 5406763 = enabled + fix 6070954 = enabled + fix 6282944 = enabled + fix 6138746 = enabled + fix 6082745 = enabled + fix 3426050 = enabled + fix 599680 = enabled + fix 6062266 = enabled + fix 6087237 = enabled + fix 6122894 = enabled + fix 6377505 = enabled + fix 5893768 = enabled + fix 6163564 = enabled + fix 6073325 = enabled + fix 6188881 = enabled + fix 6007259 = enabled + fix 6239971 = enabled + fix 5284200 = disabled + fix 6042205 = enabled + fix 6051211 = enabled + fix 6434668 = enabled + fix 6438752 = enabled + fix 5936366 = enabled + fix 6439032 = enabled + fix 6438892 = enabled + fix 6006300 = enabled + fix 5947231 = enabled + fix 5416118 = 1 + fix 6365442 = 1 + fix 6239039 = enabled + fix 6502845 = enabled + fix 6913094 = enabled + fix 6029469 = enabled + fix 5919513 = enabled + fix 6057611 = enabled + fix 6469667 = enabled + fix 6608941 = disabled + fix 6368066 = enabled + fix 6329318 = enabled + fix 6656356 = enabled + fix 4507997 = enabled + fix 6671155 = enabled + fix 6694548 = enabled + fix 6688200 = enabled + fix 6612471 = enabled + fix 6708183 = disabled + fix 6326934 = enabled + fix 6520717 = disabled + fix 6714199 = enabled + fix 6681545 = enabled + fix 6748058 = enabled + fix 6167716 = enabled + fix 6674254 = enabled + fix 6468287 = enabled + fix 6503543 = enabled + fix 6808773 = disabled + fix 6766962 = enabled + fix 6120483 = enabled + fix 6670551 = enabled + fix 6771838 = enabled + fix 6626018 = disabled + fix 6530596 = enabled + fix 6778642 = enabled + fix 6699059 = enabled + fix 6376551 = enabled + fix 6429113 = enabled + fix 6782437 = enabled + fix 6776808 = enabled + fix 6765823 = enabled + fix 6768660 = enabled + fix 6782665 = enabled + fix 6610822 = enabled + fix 6514189 = enabled + fix 6818410 = enabled + fix 6827696 = enabled + fix 6773613 = enabled + fix 5902962 = enabled + fix 6956212 = enabled + fix 3056297 = enabled + fix 6440977 = disabled + fix 6972291 = disabled + fix 6904146 = enabled + fix 6221403 = enabled + fix 5475051 = enabled + fix 6845871 = enabled + fix 5468809 = enabled + fix 6917633 = enabled + fix 4444536 = disabled + fix 6955210 = enabled + fix 6994194 = enabled + fix 6399597 = disabled + fix 6951776 = enabled + fix 5648287 = 3 + fix 6987082 = disabled + fix 7132036 = enabled + fix 6980350 = enabled + fix 5199213 = enabled + fix 7138405 = enabled + fix 7148689 = enabled + fix 6820988 = enabled + fix 7032684 = enabled + fix 6617866 = enabled + fix 7155968 = enabled + fix 7127980 = enabled + fix 6982954 = enabled + fix 7241819 = enabled + fix 6897034 = enabled + fix 7236148 = enabled + fix 7298570 = enabled + fix 7249095 = enabled + fix 7314499 = enabled + fix 7324224 = enabled + fix 7289023 = enabled + fix 7237571 = enabled + fix 7116357 = enabled + fix 7345484 = enabled + fix 7375179 = enabled + fix 6430500 = disabled + fix 5897486 = enabled + fix 6774209 = enabled + fix 7306637 = enabled + fix 6451322 = enabled + fix 7208131 = enabled + fix 7388652 = enabled + fix 7127530 = enabled + fix 6751206 = enabled + fix 6669103 = enabled + fix 7430474 = enabled + fix 6990305 = enabled + fix 7043307 = enabled + fix 6921505 = enabled + fix 7388457 = enabled + fix 3120429 = enabled + fix 7452823 = disabled + fix 6838105 = enabled + fix 6769711 = enabled + fix 7170213 = enabled + fix 6528872 = enabled + fix 7295298 = enabled + fix 5922070 = enabled + fix 7259468 = enabled + fix 6418552 = enabled + fix 4619997 = enabled + fix 7524366 = enabled + fix 6942476 = enabled + fix 6418771 = enabled + fix 7375077 = enabled + fix 5400639 = enabled + fix 4570921 = enabled + fix 7426911 = enabled + fix 5099019 = disabled + fix 7528216 = enabled + fix 7521266 = enabled + fix 7385140 = enabled + fix 7576516 = enabled + fix 7573526 = enabled + fix 7576476 = enabled + fix 7165898 = enabled + fix 7263214 = enabled + fix 3320140 = enabled + fix 7555510 = enabled + fix 7613118 = enabled + fix 7597059 = enabled + fix 7558911 = enabled + fix 5520732 = enabled + fix 7679490 = disabled + fix 7449971 = enabled + fix 3628118 = enabled + fix 4370840 = enabled + fix 7281191 = enabled + fix 7519687 = enabled + fix 5029592 = 3 + fix 6012093 = 1 + fix 6053861 = disabled + fix 6941515 = disabled + fix 7696414 = enabled + fix 7272039 = enabled + fix 7834811 = enabled + fix 7640597 = enabled + fix 7341616 = enabled + fix 7168184 = enabled + fix 399198 = enabled + fix 7831070 = enabled + fix 7676897 = disabled + fix 7414637 = enabled + fix 7585456 = enabled + fix 8202421 = enabled + fix 7658097 = disabled + fix 8251486 = enabled + fix 7132684 = enabled + fix 7512227 = enabled + fix 6972987 = enabled + fix 7199035 = enabled + fix 8243446 = enabled + fix 7650462 = enabled + fix 6720701 = enabled + fix 7592673 = enabled + fix 7718694 = enabled + fix 7534027 = enabled + fix 7708267 = enabled + fix 5716785 = enabled + fix 7356191 = enabled + fix 7679161 = enabled + fix 7597159 = enabled + fix 7499258 = enabled + fix 8328363 = enabled + fix 7452863 = enabled + fix 8284930 = enabled + fix 7298626 = enabled + fix 7657126 = enabled + fix 8371884 = enabled + fix 8318020 = enabled + fix 8255423 = enabled + fix 7135745 = enabled + fix 8356253 = enabled + fix 7534257 = enabled + fix 8323407 = enabled + fix 7539815 = enabled + fix 8289316 = enabled + fix 8447850 = enabled + fix 7675944 = enabled + fix 8355120 = enabled + fix 7176746 = enabled + fix 8442891 = enabled + fix 8373261 = enabled + fix 7679164 = enabled + fix 7670533 = enabled + fix 8408665 = enabled + fix 8491399 = enabled + fix 8348392 = enabled + fix 8348585 = enabled + fix 8508056 = enabled + fix 8335178 = enabled + fix 8515269 = enabled + fix 8247017 = enabled + fix 7325597 = enabled + fix 8531490 = enabled + fix 6163600 = enabled + fix 8589278 = disabled + fix 8557992 = enabled + fix 7556098 = enabled + fix 8580883 = enabled + fix 5892599 = disabled + fix 8609714 = enabled + fix 8514561 = enabled + fix 8619631 = disabled + + + *************************************** + PARAMETERS IN OPT_PARAM HINT + **************************** + _optimizer_use_feedback = 'false' +*************************************** +Column Usage Monitoring is ON: tracking level = 1 +*************************************** + +Considering Query Transformations on query block SEL$1 (#0) +************************** +Query transformations (QT) +************************** +JF: Checking validity of join factorization for query block SEL$2 (#0) +JF: Bypassed: not a UNION or UNION-ALL query block. +ST: not valid since star transformation parameter is FALSE +TE: Checking validity of table expansion for query block SEL$2 (#0) +TE: Bypassed: No partitioned table in query block. +Check Basic Validity for Non-Union View for query block SEL$2 (#0) +JPPD: JPPD bypassed: View has unsupported constructs. +CBQT: Validity checks passed for 3qy33cc7bz0y2. +CSE: Considering common sub-expression elimination in query block SEL$1 (#0) +************************* +Common Subexpression elimination (CSE) +************************* +CSE: Considering common sub-expression elimination in query block SEL$2 (#0) +************************* +Common Subexpression elimination (CSE) +************************* +CSE: CSE not performed on query block SEL$2 (#0). +CSE: CSE not performed on query block SEL$1 (#0). +OBYE: Considering Order-by Elimination from view SEL$1 (#0) +*************************** +Order-by elimination (OBYE) +*************************** +OBYE: Considering Order-by Elimination from view SEL$2 (#0) +*************************** +Order-by elimination (OBYE) +*************************** +OBYE: OBYE bypassed: no order by to eliminate. +OBYE: OBYE performed. +JE: Considering Join Elimination on query block SEL$2 (#0) +************************* +Join Elimination (JE) +************************* +SQL:******* UNPARSED QUERY IS ******* +SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') +SQL:******* UNPARSED QUERY IS ******* +SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') +Query block SEL$2 (#0) unchanged +JE: Considering Join Elimination on query block SEL$1 (#0) +************************* +Join Elimination (JE) +************************* +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME","PROD"."PRODUCT_NAME" "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI", (SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG')) "PROD","OE"."CUSTOMERS" "C","OE"."PROMOTIONS" "PROM","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="PROD"."PRODUCT_ID" AND "O"."PROMOTION_ID"="PROM"."PROMO_ID"(+) AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND "PROD"."PRODUCT_NAME"='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME","PROD"."PRODUCT_NAME","C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +Query block (fffffd7ffdbfdca8) before join elimination: +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME","PROD"."PRODUCT_NAME" "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI", (SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG')) "PROD","OE"."CUSTOMERS" "C","OE"."PROMOTIONS" "PROM","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="PROD"."PRODUCT_ID" AND "O"."PROMOTION_ID"="PROM"."PROMO_ID"(+) AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND "PROD"."PRODUCT_NAME"='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME","PROD"."PRODUCT_NAME","C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +JE: eliminate table: PROMOTIONS (PROM) +JE: cfro: ORDER_ITEMS objn:74165 col#:1 dfro:ORDERS dcol#:1 +Registered qb: SEL$31BE1502 0xfdbfdca8 (JOIN REMOVED FROM QUERY BLOCK SEL$1; SEL$1; "PROM"@"SEL$1") +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature (): qb_name=SEL$31BE1502 nbfros=6 flg=0 + fro(0): flg=0 objn=74142 hint_alias="C"@"SEL$1" + fro(1): flg=0 objn=74123 hint_alias="D"@"SEL$1" + fro(2): flg=0 objn=74128 hint_alias="E"@"SEL$1" + fro(3): flg=0 objn=74165 hint_alias="O"@"SEL$1" + fro(4): flg=0 objn=74160 hint_alias="OI"@"SEL$1" + fro(5): flg=1 objn=74600 hint_alias="PROD"@"SEL$1" + +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME","PROD"."PRODUCT_NAME" "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI", (SELECT "I"."PRODUCT_ID" "PRODUCT_ID",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME" FROM OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D" WHERE "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG')) "PROD","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="PROD"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND "PROD"."PRODUCT_NAME"='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME","PROD"."PRODUCT_NAME","C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +Query block SEL$31BE1502 (#0) simplified +OJE: Considering outer-join elimination on query block SEL$31BE1502 (#0) +OJE: considering predicate"O"."ORDER_ID"="OI"."ORDER_ID" + +rejected +OJE: considering predicate"OI"."PRODUCT_ID"="PROD"."PRODUCT_ID" + +rejected +OJE: considering predicate"O"."CUSTOMER_ID"="C"."CUSTOMER_ID" + +rejected +OJE: considering predicate"O"."SALES_REP_ID"="E"."EMPLOYEE_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_NAME"='Sales' + +rejected +OJE: considering predicate"E"."FIRST_NAME"='William' + +rejected +OJE: considering predicate"E"."LAST_NAME"='Smith' + +rejected +OJE: considering predicate"PROD"."PRODUCT_NAME"='Mobile Web Phone' + +rejected +OJE: considering predicate"C"."CUST_FIRST_NAME"='Gena' + +rejected +OJE: considering predicate"C"."CUST_LAST_NAME"='Harris' + +rejected +OJE: outer-join not eliminated +CNT: Considering count(col) to count(*) on query block SEL$31BE1502 (#0) +************************* +Count(col) to Count(*) (CNT) +************************* +CNT: COUNT() to COUNT(*) not done. +OJE: Considering outer-join elimination on query block SEL$2 (#0) +OJE: considering predicate"D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') + +rejected +OJE: outer-join not eliminated +CVM: Merging SPJ view SEL$2 (#0) into SEL$31BE1502 (#0) +OJE: Considering outer-join elimination on query block SEL$31BE1502 (#0) +OJE: considering predicate"O"."ORDER_ID"="OI"."ORDER_ID" + +rejected +OJE: considering predicate"OI"."PRODUCT_ID"="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"O"."CUSTOMER_ID"="C"."CUSTOMER_ID" + +rejected +OJE: considering predicate"O"."SALES_REP_ID"="E"."EMPLOYEE_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_NAME"='Sales' + +rejected +OJE: considering predicate"E"."FIRST_NAME"='William' + +rejected +OJE: considering predicate"E"."LAST_NAME"='Smith' + +rejected +OJE: considering predicateCASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' + +rejected +OJE: considering predicate"C"."CUST_FIRST_NAME"='Gena' + +rejected +OJE: considering predicate"C"."CUST_LAST_NAME"='Harris' + +rejected +OJE: considering predicate"D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') + +rejected +OJE: outer-join not eliminated +CNT: Considering count(col) to count(*) on query block SEL$31BE1502 (#0) +************************* +Count(col) to Count(*) (CNT) +************************* +CNT: COUNT() to COUNT(*) not done. +Registered qb: SEL$4B12EFE6 0xfdbfdca8 (VIEW MERGE SEL$31BE1502; SEL$2) +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature (): qb_name=SEL$4B12EFE6 nbfros=7 flg=0 + fro(0): flg=0 objn=74142 hint_alias="C"@"SEL$1" + fro(1): flg=0 objn=74123 hint_alias="D"@"SEL$1" + fro(2): flg=0 objn=74128 hint_alias="E"@"SEL$1" + fro(3): flg=0 objn=74165 hint_alias="O"@"SEL$1" + fro(4): flg=0 objn=74160 hint_alias="OI"@"SEL$1" + fro(5): flg=0 objn=74176 hint_alias="D"@"SEL$2" + fro(6): flg=0 objn=74173 hint_alias="I"@"SEL$2" + +JE: Considering Join Elimination on query block SEL$4B12EFE6 (#0) +************************* +Join Elimination (JE) +************************* +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +JE: cfro: EMPLOYEES objn:74123 col#:11 dfro:DEPARTMENTS dcol#:11 +JE: cfro: EMPLOYEES objn:74123 col#:11 dfro:DEPARTMENTS dcol#:11 +JE: cfro: ORDERS objn:74128 col#:7 dfro:EMPLOYEES dcol#:7 +JE: cfro: ORDERS objn:74128 col#:7 dfro:EMPLOYEES dcol#:7 +JE: cfro: ORDERS objn:74142 col#:4 dfro:CUSTOMERS dcol#:4 +JE: cfro: ORDERS objn:74142 col#:4 dfro:CUSTOMERS dcol#:4 +JE: cfro: ORDER_ITEMS objn:74173 col#:3 dfro:PRODUCT_INFORMATION dcol#:3 +JE: cfro: ORDER_ITEMS objn:74173 col#:3 dfro:PRODUCT_INFORMATION dcol#:3 +JE: cfro: ORDER_ITEMS objn:74165 col#:1 dfro:ORDERS dcol#:1 +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +Query block SEL$4B12EFE6 (#0) unchanged +query block SEL$1 transformed to SEL$4B12EFE6 (#0) +Considering Query Transformations on query block SEL$4B12EFE6 (#0) +************************** +Query transformations (QT) +************************** +CSE: Considering common sub-expression elimination in query block SEL$4B12EFE6 (#0) +************************* +Common Subexpression elimination (CSE) +************************* +CSE: CSE not performed on query block SEL$4B12EFE6 (#0). +query block SEL$4B12EFE6 (#0) unchanged +apadrv-start sqlid=4285284322543371202 + : + +******************************************* +Peeked values of the binds in SQL statement +******************************************* + +CBQT: Considering cost-based transformation on query block SEL$4B12EFE6 (#0) +******************************** +COST-BASED QUERY TRANSFORMATIONS +******************************** +FPD: Considering simple filter push (pre rewrite) in query block SEL$4B12EFE6 (#0) +FPD: Current where clause predicates "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='Willi + +OBYE: Considering Order-by Elimination from view SEL$4B12EFE6 (#0) +*************************** +Order-by elimination (OBYE) +*************************** +OBYE: OBYE performed. +Considering Query Transformations on query block SEL$4B12EFE6 (#0) +************************** +Query transformations (QT) +************************** +CSE: Considering common sub-expression elimination in query block SEL$4B12EFE6 (#0) +************************* +Common Subexpression elimination (CSE) +************************* +CSE: CSE not performed on query block SEL$4B12EFE6 (#0). +kkqctdrvTD-start on query block SEL$4B12EFE6 (#0) +kkqctdrvTD-start: : + + +kkqctdrvTD-end: + +SJC: Considering set-join conversion in query block SEL$4B12EFE6 (#1) +************************* +Set-Join Conversion (SJC) +************************* +SJC: not performed +OJE: Considering outer-join elimination on query block SEL$4B12EFE6 (#1) +OJE: considering predicate"O"."ORDER_ID"="OI"."ORDER_ID" + +rejected +OJE: considering predicate"OI"."PRODUCT_ID"="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"O"."CUSTOMER_ID"="C"."CUSTOMER_ID" + +rejected +OJE: considering predicate"O"."SALES_REP_ID"="E"."EMPLOYEE_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" + +rejected +OJE: considering predicate"D"."DEPARTMENT_NAME"='Sales' + +rejected +OJE: considering predicate"E"."FIRST_NAME"='William' + +rejected +OJE: considering predicate"E"."LAST_NAME"='Smith' + +rejected +OJE: considering predicateCASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' + +rejected +OJE: considering predicate"C"."CUST_FIRST_NAME"='Gena' + +rejected +OJE: considering predicate"C"."CUST_LAST_NAME"='Harris' + +rejected +OJE: considering predicate"D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" + +rejected +OJE: considering predicate"D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') + +rejected +OJE: outer-join not eliminated +CNT: Considering count(col) to count(*) on query block SEL$4B12EFE6 (#1) +************************* +Count(col) to Count(*) (CNT) +************************* +CNT: COUNT() to COUNT(*) not done. +JE: Considering Join Elimination on query block SEL$4B12EFE6 (#1) +************************* +Join Elimination (JE) +************************* +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +JE: cfro: EMPLOYEES objn:74123 col#:11 dfro:DEPARTMENTS dcol#:11 +JE: cfro: EMPLOYEES objn:74123 col#:11 dfro:DEPARTMENTS dcol#:11 +JE: cfro: ORDERS objn:74128 col#:7 dfro:EMPLOYEES dcol#:7 +JE: cfro: ORDERS objn:74128 col#:7 dfro:EMPLOYEES dcol#:7 +JE: cfro: ORDERS objn:74142 col#:4 dfro:CUSTOMERS dcol#:4 +JE: cfro: ORDERS objn:74142 col#:4 dfro:CUSTOMERS dcol#:4 +JE: cfro: ORDER_ITEMS objn:74173 col#:3 dfro:PRODUCT_INFORMATION dcol#:3 +JE: cfro: ORDER_ITEMS objn:74173 col#:3 dfro:PRODUCT_INFORMATION dcol#:3 +JE: cfro: ORDER_ITEMS objn:74165 col#:1 dfro:ORDERS dcol#:1 +SQL:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +Query block SEL$4B12EFE6 (#1) unchanged +PM: Considering predicate move-around in query block SEL$4B12EFE6 (#1) +************************** +Predicate Move-Around (PM) +************************** +PM: PM bypassed: Outer query contains no views. +PM: PM bypassed: Outer query contains no views. +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + + +kkqctdrvTD-end: + +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + +Registered qb: SEL$4B12EFE6 0xfdba1d30 (COPY SEL$4B12EFE6) +--------------------- +QUERY BLOCK SIGNATURE +--------------------- + signature(): NULL +**************************************** + Cost-Based Group-By/Distinct Placement +**************************************** +GBP/DP: Checking validity of GBP/DP for query block SEL$4B12EFE6 (#1) +GBP: Checking validity of group-by placement for query block SEL$4B12EFE6 (#1) +GBP: Bypassed: Expression/function found in group-by. +DP: Checking validity of distinct placement for query block SEL$4B12EFE6 (#1) +DP: Bypassed: Query has invalid constructs. + +kkqctdrvTD-end: + +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + +TE: Checking validity of table expansion for query block SEL$4B12EFE6 (#1) +TE: Bypassed: No partitioned table in query block. + +kkqctdrvTD-end: + +TE: Checking validity of table expansion for query block SEL$4B12EFE6 (#1) +TE: Bypassed: No partitioned table in query block. +ST: Query in kkqstardrv:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ='Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +ST: not valid since star transformation parameter is FALSE +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + +JF: Checking validity of join factorization for query block SEL$4B12EFE6 (#1) +JF: Bypassed: has order-by clause. + +kkqctdrvTD-end: + +JPPD: Considering Cost-based predicate pushdown from query block SEL$4B12EFE6 (#1) +************************************ +Cost-based predicate pushdown (JPPD) +************************************ +kkqctdrvTD-start on query block SEL$4B12EFE6 (#1) +kkqctdrvTD-start: : + + +kkqctdrvTD-end: + +JPPD: Applying transformation directives +query block SEL$4B12EFE6 (#1) unchanged +FPD: Considering simple filter push in query block SEL$4B12EFE6 (#1) +"O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='Willi +try to generate transitive predicate from check constraints for query block SEL$4B12EFE6 (#1) +constraint: "C"."CUSTOMER_ID">0 + +finally: "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='Willi + +FPD: transitive predicates are generated in query block SEL$4B12EFE6 (#1) +"O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='Willi +Final query after transformations:******* UNPARSED QUERY IS ******* +SELECT "D"."DEPARTMENT_NAME" "DEPARTMENT_NAME","E"."FIRST_NAME" "FIRST_NAME","E"."LAST_NAME" "LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END "PRODUCT_NAME","C"."CUST_FIRST_NAME" "CUST_FIRST_NAME","C"."CUST_LAST_NAME" "CUST_LAST_NAME",SUM("OI"."QUANTITY") "SUM(OI.QUANTITY)",SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") "TOTAL_PRICE" FROM "OE"."ORDERS" "O","OE"."ORDER_ITEMS" "OI",OE."PRODUCT_INFORMATION" "I",OE."PRODUCT_DESCRIPTIONS" "D","OE"."CUSTOMERS" "C","HR"."EMPLOYEES" "E","HR"."DEPARTMENTS" "D" WHERE "O"."ORDER_ID"="OI"."ORDER_ID" AND "OI"."PRODUCT_ID"="I"."PRODUCT_ID" AND "O"."CUSTOMER_ID"="C"."CUSTOMER_ID" AND "O"."SALES_REP_ID"="E"."EMPLOYEE_ID" AND "D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" AND "D"."DEPARTMENT_NAME"='Sales' AND "E"."FIRST_NAME"='William' AND "E"."LAST_NAME"='Smith' AND CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END =U'Mobile Web Phone' AND "C"."CUST_FIRST_NAME"='Gena' AND "C"."CUST_LAST_NAME"='Harris' AND "D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') AND "O"."CUSTOMER_ID">0 GROUP BY "D"."DEPARTMENT_NAME","E"."FIRST_NAME","E"."LAST_NAME",CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END ,"C"."CUST_FIRST_NAME","C"."CUST_LAST_NAME" ORDER BY SUM("OI"."UNIT_PRICE"*"OI"."QUANTITY") +kkoqbc: optimizing query block SEL$4B12EFE6 (#1) + + : + +kkoqbc-subheap (create addr=0xfffffd7ffdbfa4e8) +**************** +QUERY BLOCK TEXT +**************** +SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + +--------------------- +QUERY BLOCK SIGNATURE +--------------------- +signature (optimizer): qb_name=SEL$4B12EFE6 nbfros=7 flg=0 + fro(0): flg=0 objn=74142 hint_alias="C"@"SEL$1" + fro(1): flg=0 objn=74123 hint_alias="D"@"SEL$1" + fro(2): flg=0 objn=74128 hint_alias="E"@"SEL$1" + fro(3): flg=0 objn=74165 hint_alias="O"@"SEL$1" + fro(4): flg=0 objn=74160 hint_alias="OI"@"SEL$1" + fro(5): flg=0 objn=74176 hint_alias="D"@"SEL$2" + fro(6): flg=0 objn=74173 hint_alias="I"@"SEL$2" + +----------------------------- +SYSTEM STATISTICS INFORMATION +----------------------------- + Using WORKLOAD Stats + CPUSPEED: 1319 millions instructions/sec + SREADTIM: 277242.072000 milliseconds + MREADTIM: 1191005.357000 millisecons + MBRC: 9 blocks + MAXTHR: -1 bytes/sec + SLAVETHR: -1 bytes/sec + +*************************************** +BASE STATISTICAL INFORMATION +*********************** +Table Stats:: + Table: DEPARTMENTS Alias: D + #Rows: 27 #Blks: 5 AvgRowLen: 21.00 +Index Stats:: + Index: DEPT_ID_PK Col#: 1 + LVLS: 0 #LB: 1 #DK: 27 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 + Index: DEPT_LOCATION_IX Col#: 4 + LVLS: 0 #LB: 1 #DK: 7 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 +*********************** +Table Stats:: + Table: EMPLOYEES Alias: E + #Rows: 107 #Blks: 5 AvgRowLen: 69.00 +Index Stats:: + Index: EMP_DEPARTMENT_IX Col#: 11 + LVLS: 0 #LB: 1 #DK: 11 LB/K: 1.00 DB/K: 1.00 CLUF: 7.00 + Index: EMP_EMAIL_UK Col#: 4 + LVLS: 0 #LB: 1 #DK: 107 LB/K: 1.00 DB/K: 1.00 CLUF: 19.00 + Index: EMP_EMP_ID_PK Col#: 1 + LVLS: 0 #LB: 1 #DK: 107 LB/K: 1.00 DB/K: 1.00 CLUF: 2.00 + Index: EMP_JOB_IX Col#: 7 + LVLS: 0 #LB: 1 #DK: 19 LB/K: 1.00 DB/K: 1.00 CLUF: 8.00 + Index: EMP_MANAGER_IX Col#: 10 + LVLS: 0 #LB: 1 #DK: 18 LB/K: 1.00 DB/K: 1.00 CLUF: 7.00 + Index: EMP_NAME_IX Col#: 3 2 + LVLS: 0 #LB: 1 #DK: 107 LB/K: 1.00 DB/K: 1.00 CLUF: 15.00 +*********************** +Table Stats:: + Table: CUSTOMERS Alias: C + #Rows: 319 #Blks: 13 AvgRowLen: 169.00 +Index Stats:: + Index: CUSTOMERS_PK Col#: 1 + LVLS: 0 #LB: 1 #DK: 319 LB/K: 1.00 DB/K: 1.00 CLUF: 8.00 + Index: CUST_ACCOUNT_MANAGER_IX Col#: 15 + LVLS: 0 #LB: 1 #DK: 4 LB/K: 1.00 DB/K: 4.00 CLUF: 18.00 + Index: CUST_EMAIL_IX Col#: 14 + LVLS: 1 #LB: 2 #DK: 319 LB/K: 1.00 DB/K: 1.00 CLUF: 139.00 + Index: CUST_LNAME_IX Col#: 3 + LVLS: 0 #LB: 1 #DK: 176 LB/K: 1.00 DB/K: 1.00 CLUF: 271.00 + Index: CUST_UPPER_NAME_IX Col#: 28 29 + LVLS: 1 #LB: 2 #DK: 319 LB/K: 1.00 DB/K: 1.00 CLUF: 278.00 + Index: SYS_IL0000074142C00022$$ Col#: (NOT ANALYZED) + LVLS: 1 #LB: 25 #DK: 100 LB/K: 1.00 DB/K: 1.00 CLUF: 800.00 + Index: SYS_IL0000074142C00023$$ Col#: (NOT ANALYZED) + LVLS: 1 #LB: 25 #DK: 100 LB/K: 1.00 DB/K: 1.00 CLUF: 800.00 +*********************** +Table Stats:: + Table: PRODUCT_DESCRIPTIONS Alias: D + #Rows: 8640 #Blks: 370 AvgRowLen: 283.00 +Index Stats:: + Index: PRD_DESC_PK Col#: 1 2 + LVLS: 1 #LB: 32 #DK: 8640 LB/K: 1.00 DB/K: 1.00 CLUF: 8640.00 + Index: PROD_NAME_IX Col#: 3 + LVLS: 1 #LB: 53 #DK: 3727 LB/K: 1.00 DB/K: 1.00 CLUF: 6794.00 +*********************** +Table Stats:: + Table: PRODUCT_INFORMATION Alias: I + #Rows: 288 #Blks: 13 AvgRowLen: 219.00 +Index Stats:: + Index: PRODUCT_INFORMATION_PK Col#: 1 + LVLS: 0 #LB: 1 #DK: 288 LB/K: 1.00 DB/K: 1.00 CLUF: 140.00 + Index: PROD_SUPPLIER_IX Col#: 7 + LVLS: 0 #LB: 1 #DK: 62 LB/K: 1.00 DB/K: 1.00 CLUF: 121.00 +*********************** +Table Stats:: + Table: ORDER_ITEMS Alias: OI + #Rows: 665 #Blks: 5 AvgRowLen: 18.00 +Index Stats:: + Index: ITEM_ORDER_IX Col#: 1 + LVLS: 1 #LB: 2 #DK: 105 LB/K: 1.00 DB/K: 1.00 CLUF: 196.00 + Index: ITEM_PRODUCT_IX Col#: 3 + LVLS: 1 #LB: 2 #DK: 185 LB/K: 1.00 DB/K: 1.00 CLUF: 162.00 + Index: ORDER_ITEMS_PK Col#: 1 2 + LVLS: 1 #LB: 2 #DK: 665 LB/K: 1.00 DB/K: 1.00 CLUF: 196.00 + Index: ORDER_ITEMS_UK Col#: 1 3 + LVLS: 1 #LB: 2 #DK: 665 LB/K: 1.00 DB/K: 1.00 CLUF: 196.00 +*********************** +Table Stats:: + Table: ORDERS Alias: O + #Rows: 105 #Blks: 13 AvgRowLen: 37.00 +Index Stats:: + Index: ORDER_PK Col#: 1 + LVLS: 1 #LB: 1 #DK: 105 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 + Index: ORD_CUSTOMER_IX Col#: 4 + LVLS: 1 #LB: 1 #DK: 47 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 + Index: ORD_ORDER_DATE_IX Col#: 2 + LVLS: 1 #LB: 1 #DK: 105 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 + Index: ORD_SALES_REP_IX Col#: 7 + LVLS: 1 #LB: 1 #DK: 9 LB/K: 1.00 DB/K: 1.00 CLUF: 1.00 +Access path analysis for ORDERS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for ORDERS[O] + + Table: ORDERS Alias: O + Card: Original: 105.000000 Rounded: 70 Computed: 70.00 Non Adjusted: 70.00 + Access Path: TableScan + Cost: 8.00 Resp: 8.00 Degree: 0 + Cost_io: 8.00 Cost_cpu: 126529 + Resp_io: 8.00 Resp_cpu: 126529 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 3.00 resc_cpu: 72814 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 3.00 Resp: 3.00 Degree: 1 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 57998 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 3.00 Resp: 3.00 Degree: 1 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** +******** Begin index join costing ******** + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 35243 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Bitmap nodes: + Used ORD_CUSTOMER_IX + Cost = 3.000094, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + Access Path: index (FullScan) + Index: ORDER_PK + resc_io: 2.00 resc_cpu: 35243 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 0 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 28243 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 0 + +******** Cost index join ******** + +Index join: Joining index ORD_CUSTOMER_IX +Index join: Joining index ORDER_PK +Ix HA Join + Outer table: ORDERS Alias: O + resc: 2.00 card 105.00 bytes: 14 deg: 1 resp: 2.00 + Inner table: Alias: + resc: 2.00 card: 105.00 bytes: 14 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 4.50 Resp: 4.50 [multiMatchCost=0.00] +Index join: Joining index ORD_SALES_REP_IX +Ix HA Join + Outer table: ORDERS Alias: O + resc: 2.00 card 105.00 bytes: 28 deg: 1 resp: 2.00 + Inner table: Alias: + resc: 2.00 card: 105.00 bytes: 13 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 4.50 Resp: 4.50 [multiMatchCost=0.00] + +******** Index join cost ******** + +Cost: 9.00 +******** End index join costing ******** + Best:: AccessPath: IndexRange + Index: ORD_SALES_REP_IX + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 70.00 Bytes: 0 + +Access path analysis for ORDER_ITEMS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for ORDER_ITEMS[OI] + Table: ORDER_ITEMS Alias: OI + Card: Original: 665.000000 Rounded: 665 Computed: 665.00 Non Adjusted: 665.00 + Access Path: TableScan + Cost: 4.00 Resp: 4.00 Degree: 0 + Cost_io: 4.00 Cost_cpu: 188557 + Resp_io: 4.00 Resp_cpu: 188557 + Best:: AccessPath: TableScan + Cost: 4.00 Degree: 1 Resp: 4.00 Card: 665.00 Bytes: 0 + +Access path analysis for PRODUCT_INFORMATION +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for PRODUCT_INFORMATION[I] + Table: PRODUCT_INFORMATION Alias: I + Card: Original: 288.000000 Rounded: 288 Computed: 288.00 Non Adjusted: 288.00 + Access Path: TableScan + Cost: 8.00 Resp: 8.00 Degree: 0 + Cost_io: 8.00 Cost_cpu: 141539 + Resp_io: 8.00 Resp_cpu: 141539 + Best:: AccessPath: TableScan + Cost: 8.00 Degree: 1 Resp: 8.00 Card: 288.00 Bytes: 0 + +Access path analysis for PRODUCT_DESCRIPTIONS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for PRODUCT_DESCRIPTIONS[D] + Table: PRODUCT_DESCRIPTIONS Alias: D + Card: Original: 8640.000000 Rounded: 288 Computed: 288.00 Non Adjusted: 288.00 + Access Path: TableScan + Cost: 179.00 Resp: 179.00 Degree: 0 + Cost_io: 179.00 Cost_cpu: 6701493 + Resp_io: 179.00 Resp_cpu: 6701493 +kkofmx: index filter:"D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') + + + Access Path: index (skip-scan) + SS sel: 0.033333 ANDV (#skips): 288.000000 + SS io: 288.000000 vs. table scan io: 179.000000 + Skip Scan rejected + + Access Path: index (FullScan) + Index: PRD_DESC_PK + resc_io: 321.00 resc_cpu: 4068702 + ix_sel: 1.000000 ix_sel_with_filters: 0.033333 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 300.00 + ***** End Logdef Adjustment ****** + Cost: 321.00 Resp: 321.00 Degree: 1 +******** Begin index join costing ******** + ****** trying bitmap/domain indexes ****** + Access Path: index (FullScan) + Index: PRD_DESC_PK + resc_io: 33.00 resc_cpu: 1963008 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 33.00 Resp: 33.00 Degree: 0 + Access Path: index (FullScan) + Index: PROD_NAME_IX + resc_io: 54.00 resc_cpu: 2112558 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 54.00 Resp: 54.00 Degree: 0 + Access Path: index (FullScan) + Index: PRD_DESC_PK + resc_io: 33.00 resc_cpu: 1963008 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 33.00 Resp: 33.00 Degree: 0 + Bitmap nodes: + Used PRD_DESC_PK + Cost = 41.250007, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + Access Path: index (FullScan) + Index: PROD_NAME_IX + resc_io: 54.00 resc_cpu: 2112558 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 54.00 Resp: 54.00 Degree: 0 + +******** Cost index join ******** + +Index join: Joining index PRD_DESC_PK +Index join: Joining index PROD_NAME_IX +Ix HA Join + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 33.00 card 8640.00 bytes: 17 deg: 1 resp: 33.00 + Inner table: Alias: + resc: 54.00 card: 8640.00 bytes: 43 deg: 1 resp: 54.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 31 probefrag: 59 ppasses: 1 + Hash join: Resc: 87.50 Resp: 87.50 [multiMatchCost=0.00] + +******** Index join cost ******** + +Cost: 87.50 + +******** Index join OK ******** + +******** End index join costing ******** + Best:: AccessPath: IndexJoin + Cost: 87.50 Degree: 1 Resp: 87.50 Card: 288.00 Bytes: 0 + +Access path analysis for CUSTOMERS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for CUSTOMERS[C] + ColGroup (#1, Index) CUST_UPPER_NAME_IX + Col#: 28 29 CorStregth: 93.79 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: + Table: CUSTOMERS Alias: C + Card: Original: 319.000000 Rounded: 1 Computed: 0.01 Non Adjusted: 0.01 + Access Path: TableScan + Cost: 8.00 Resp: 8.00 Degree: 0 + Cost_io: 8.00 Cost_cpu: 169229 + Resp_io: 8.00 Resp_cpu: 169229 + Access Path: index (AllEqRange) + Index: CUST_LNAME_IX + resc_io: 3.00 resc_cpu: 22235 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + Cost: 3.00 Resp: 3.00 Degree: 1 + Best:: AccessPath: IndexRange + Index: CUST_LNAME_IX + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 0.01 Bytes: 0 + +Access path analysis for EMPLOYEES +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for EMPLOYEES[E] + ColGroup (#1, Index) EMP_NAME_IX + Col#: 2 3 CorStregth: 86.75 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Table: EMPLOYEES Alias: E + Card: Original: 107.000000 Rounded: 1 Computed: 1.00 Non Adjusted: 1.00 + Access Path: TableScan + Cost: 4.00 Resp: 4.00 Degree: 0 + Cost_io: 4.00 Cost_cpu: 61500 + Resp_io: 4.00 Resp_cpu: 61500 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqRange) + Index: EMP_NAME_IX + resc_io: 2.00 resc_cpu: 14793 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + Cost: 2.00 Resp: 2.00 Degree: 1 +******** Begin index join costing ******** + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqRange) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 7321 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + Cost: 1.00 Resp: 1.00 Degree: 0 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 1.000000, sel = 0.009346 + ****** finished trying bitmap/domain indexes ****** + Access Path: index (FullScan) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 28321 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 1.00 Resp: 1.00 Degree: 0 + Access Path: index (FullScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 28521 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 1.00 Resp: 1.00 Degree: 0 + +******** Cost index join ******** + +Index join: Joining index EMP_NAME_IX +Index join: Joining index EMP_DEPARTMENT_IX +Ix HA Join + Outer table: EMPLOYEES Alias: E + resc: 1.00 card 1.00 bytes: 25 deg: 1 resp: 1.00 + Inner table: Alias: + resc: 1.00 card: 107.00 bytes: 13 deg: 1 resp: 1.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 2.50 Resp: 2.50 [multiMatchCost=0.00] +Index join: Joining index EMP_EMP_ID_PK +Ix HA Join + Outer table: EMPLOYEES Alias: E + resc: 1.00 card 1.00 bytes: 38 deg: 1 resp: 1.00 + Inner table: Alias: + resc: 1.00 card: 107.00 bytes: 14 deg: 1 resp: 1.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 2.50 Resp: 2.50 [multiMatchCost=0.00] + +******** Index join cost ******** + +Cost: 5.00 +******** End index join costing ******** + Best:: AccessPath: IndexRange + Index: EMP_NAME_IX + Cost: 2.00 Degree: 1 Resp: 2.00 Card: 1.00 Bytes: 0 + +Access path analysis for DEPARTMENTS +*************************************** +SINGLE TABLE ACCESS PATH + Single Table Cardinality Estimation for DEPARTMENTS[D] + Table: DEPARTMENTS Alias: D + Card: Original: 27.000000 Rounded: 1 Computed: 1.00 Non Adjusted: 1.00 + Access Path: TableScan + Cost: 4.00 Resp: 4.00 Degree: 0 + Cost_io: 4.00 Cost_cpu: 41547 + Resp_io: 4.00 Resp_cpu: 41547 + Best:: AccessPath: TableScan + Cost: 4.00 Degree: 1 Resp: 4.00 Card: 1.00 Bytes: 0 + +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 +*************************************** + + +OPTIMIZER STATISTICS AND COMPUTATIONS +*************************************** +GENERAL PLANS +*************************************** +Considering cardinality-based initial join order. +Permutations for Starting Table :0 +Join order[1]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 DEPARTMENTS[D]#1 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.01 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 19 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 150514 + Resp_io: 11.00 Resp_cpu: 150514 +kkofmx: index filter:"O"."CUSTOMER_ID">0 + +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (AllEqJoinGuess) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 16548 + ix_sel: 0.021277 ix_sel_with_filters: 0.021277 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 50.00 + ***** End Logdef Adjustment ****** + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 38883 + Resp_io: 5.00 Resp_cpu: 38883 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 59164 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 81399 + Resp_io: 6.00 Resp_cpu: 81399 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 38883 + resp: 5.00 resp_io: 5.00 resc_cpu: 38883 +Join Card: 0.017255 = = outer (0.010599) * inner (70.000000) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.02 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364685499 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364685499 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841233867 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841233867 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.02 Bytes: 30 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 117348 + Resp_io: 9.00 Resp_cpu: 117348 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47404 + Resp_io: 6.00 Resp_cpu: 47404 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 5.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 5.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 6.00 + resc: 6.00 resc_io: 6.00 resc_cpu: 47404 + resp: 6.00 resp_io: 6.00 resc_cpu: 47404 +Join Card: 0.001917 = = outer (0.017255) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364639611 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364639611 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841200409 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841200409 +Best:: JoinMethod: NestedLoop + Cost: 6.00 Degree: 1 Resp: 6.00 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 88951 + Resp_io: 10.00 Resp_cpu: 88951 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + + Best NL cost: 7.00 + resc: 7.00 resc_io: 7.00 resc_cpu: 55795 + resp: 7.00 resp_io: 7.00 resc_cpu: 55795 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364674887 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364674887 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841235685 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841235685 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 244353 + Resp_io: 11.00 Resp_cpu: 244353 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +SM Join + SM cost: 13.00 + resc: 13.00 resc_io: 11.00 resc_cpu: 731365111242 + resp: 13.00 resp_io: 11.00 resp_cpu: 731365111242 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 11.50 Resp: 11.50 [multiMatchCost=0.00] +HA Join + HA cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841457487 + resp: 11.50 resp_io: 11.00 resp_cpu: 182841457487 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup (#1, Index) PRD_DESC_PK + Col#: 1 2 CorStregth: 1.00 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Best:: JoinMethod: NestedLoop + Cost: 14.00 Degree: 1 Resp: 14.00 Card: 0.01 Bytes: 144 +*********************** +Best so far: Table#: 0 cost: 3.0000 card: 0.0106 bytes: 19 + Table#: 3 cost: 5.0000 card: 0.0173 bytes: 30 + Table#: 2 cost: 6.0000 card: 0.0019 bytes: 52 + Table#: 1 cost: 7.0000 card: 0.0019 bytes: 68 + Table#: 6 cost: 10.0000 card: 0.0120 bytes: 84 + Table#: 4 cost: 11.0000 card: 0.0120 bytes: 104 + Table#: 5 cost: 14.0000 card: 0.0120 bytes: 144 +*********************** +Join order[2]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 ORDER_ITEMS[OI]#6 DEPARTMENTS[D]#1 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 235961 + Resp_io: 10.00 Resp_cpu: 235961 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72628 + Resp_io: 9.00 Resp_cpu: 72628 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72628 + Resp_io: 9.00 Resp_cpu: 72628 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72628 + Resp_io: 9.00 Resp_cpu: 72628 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 72628 + resp: 9.00 resp_io: 9.00 resc_cpu: 72628 +Join Card: 0.012142 = = outer (0.001917) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731365102850 + resp: 12.00 resp_io: 10.00 resp_cpu: 731365102850 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841449095 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841449095 +Best:: JoinMethod: NestedLoop + Cost: 9.00 Degree: 1 Resp: 9.00 Card: 0.01 Bytes: 68 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 9.00 Resp: 9.00 Degree: 1 Bytes: 68 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 114175 + Resp_io: 13.00 Resp_cpu: 114175 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +SM Join + SM cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364700111 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364700111 + Outer table: ORDER_ITEMS Alias: OI + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 13.50 Resp: 13.50 [multiMatchCost=0.00] +HA Join + HA cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841260909 + resp: 13.50 resp_io: 13.00 resp_cpu: 182841260909 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: DEPARTMENTS Alias: D + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Join order[3]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 DEPARTMENTS[D]#1 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 9.00 Resp: 9.00 Degree: 1 Bytes: 68 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 17.00 Resp: 17.00 Degree: 1 + Cost_io: 17.00 Cost_cpu: 214167 + Resp_io: 17.00 Resp_cpu: 214167 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 80970 + Resp_io: 10.00 Resp_cpu: 80970 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 80970 + Resp_io: 10.00 Resp_cpu: 80970 + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 80970 + resp: 10.00 resp_io: 10.00 resc_cpu: 80970 +Join Card: 0.012142 = = outer (0.012142) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 19.00 Resp: 19.00 [multiMatchCost=0.00] +SM Join + SM cost: 19.00 + resc: 19.00 resc_io: 17.00 resc_cpu: 731364906114 + resp: 19.00 resp_io: 17.00 resp_cpu: 731364906114 + Outer table: ORDER_ITEMS Alias: OI + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 17.50 Resp: 17.50 [multiMatchCost=0.00] +HA Join + HA cost: 17.50 + resc: 17.50 resc_io: 17.00 resc_cpu: 182841389601 + resp: 17.50 resp_io: 17.00 resp_cpu: 182841389601 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 88 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 88 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 14.00 Resp: 14.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 122517 + Resp_io: 14.00 Resp_cpu: 122517 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 107 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 16.00 Resp: 16.00 [multiMatchCost=0.00] +SM Join + SM cost: 16.00 + resc: 16.00 resc_io: 14.00 resc_cpu: 731364708453 + resp: 16.00 resp_io: 14.00 resp_cpu: 731364708453 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +HA Join + HA cost: 14.50 + resc: 14.50 resc_io: 14.00 resc_cpu: 182841269251 + resp: 14.50 resp_io: 14.00 resp_cpu: 182841269251 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: DEPARTMENTS Alias: D + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Best:: JoinMethod: NestedLoop + Cost: 14.00 Degree: 1 Resp: 14.00 Card: 0.01 Bytes: 144 +*********************** +Best so far: Table#: 0 cost: 3.0000 card: 0.0106 bytes: 19 + Table#: 3 cost: 5.0000 card: 0.0173 bytes: 30 + Table#: 2 cost: 6.0000 card: 0.0019 bytes: 52 + Table#: 6 cost: 9.0000 card: 0.0121 bytes: 68 + Table#: 4 cost: 10.0000 card: 0.0121 bytes: 88 + Table#: 1 cost: 11.0000 card: 0.0120 bytes: 104 + Table#: 5 cost: 14.0000 card: 0.0120 bytes: 144 +*********************** +Join order[4]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 DEPARTMENTS[D]#1 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 88 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 189.00 Resp: 189.00 Degree: 1 + Cost_io: 189.00 Cost_cpu: 6782463 + Resp_io: 189.00 Resp_cpu: 6782463 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 90181 + Resp_io: 11.00 Resp_cpu: 90181 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 90181 + Resp_io: 11.00 Resp_cpu: 90181 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 90181 + resp: 11.00 resp_io: 11.00 resc_cpu: 90181 +Outer Join Card: 0.012142 = max ( outer (0.012142),(outer (0.012142) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 107 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 99.50 Resp: 99.50 [multiMatchCost=0.00] +SM Join + SM cost: 99.50 + resc: 99.50 resc_io: 97.00 resc_cpu: 914212154966 + resp: 99.50 resp_io: 97.00 resp_cpu: 914212154966 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 98.00 Resp: 98.00 [multiMatchCost=0.00] +HA Join + HA cost: 98.00 + resc: 98.00 resc_io: 97.00 resc_cpu: 365688638453 + resp: 98.00 resp_io: 97.00 resp_cpu: 365688638453 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 128 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 128 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 15.00 Cost_cpu: 131728 + Resp_io: 15.00 Resp_cpu: 131728 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 11.00 card 0.01 bytes: 128 deg: 1 resp: 11.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 151 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 17.00 Resp: 17.00 [multiMatchCost=0.00] +SM Join + SM cost: 17.00 + resc: 17.00 resc_io: 15.00 resc_cpu: 731364717664 + resp: 17.00 resp_io: 15.00 resp_cpu: 731364717664 + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 11.00 card 0.01 bytes: 128 deg: 1 resp: 11.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 15.50 Resp: 15.50 [multiMatchCost=0.00] +HA Join + HA cost: 15.50 + resc: 15.50 resc_io: 15.00 resc_cpu: 182841278462 + resp: 15.50 resp_io: 15.00 resp_cpu: 182841278462 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Join order aborted: cost > best plan cost +*********************** +Join order[5]: CUSTOMERS[C]#0 ORDERS[O]#3 ORDER_ITEMS[OI]#6 EMPLOYEES[E]#2 DEPARTMENTS[D]#1 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 227440 + Resp_io: 9.00 Resp_cpu: 227440 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 64107 + Resp_io: 8.00 Resp_cpu: 64107 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 64107 + Resp_io: 8.00 Resp_cpu: 64107 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 64107 + Resp_io: 8.00 Resp_cpu: 64107 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 8.00 + resc: 8.00 resc_io: 8.00 resc_cpu: 64107 + resp: 8.00 resp_io: 8.00 resc_cpu: 64107 +Join Card: 0.109281 = = outer (0.017255) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.11 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 11.00 Resp: 11.00 [multiMatchCost=0.00] +SM Join + SM cost: 11.00 + resc: 11.00 resc_io: 9.00 resc_cpu: 731365094329 + resp: 11.00 resp_io: 9.00 resp_cpu: 731365094329 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 9.50 Resp: 9.50 [multiMatchCost=0.00] +HA Join + HA cost: 9.50 + resc: 9.50 resc_io: 9.00 resc_cpu: 182841440574 + resp: 9.50 resp_io: 9.00 resp_cpu: 182841440574 +Best:: JoinMethod: NestedLoop + Cost: 8.00 Degree: 1 Resp: 8.00 Card: 0.11 Bytes: 46 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 0.11 Cost: 8.00 Resp: 8.00 Degree: 1 Bytes: 46 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 142573 + Resp_io: 12.00 Resp_cpu: 142573 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72679 + Resp_io: 9.00 Resp_cpu: 72679 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72679 + Resp_io: 9.00 Resp_cpu: 72679 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 72628 + Resp_io: 9.00 Resp_cpu: 72628 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 65157 + Resp_io: 8.00 Resp_cpu: 65157 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 65157 + Resp_io: 8.00 Resp_cpu: 65157 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 8.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 8.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 72628 + resp: 9.00 resp_io: 9.00 resc_cpu: 72628 +Join Card: 0.012142 = = outer (0.109281) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 8.00 card 0.11 bytes: 46 deg: 1 resp: 8.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 61 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364664836 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364664836 + Outer table: ORDER_ITEMS Alias: OI + resc: 8.00 card 0.11 bytes: 46 deg: 1 resp: 8.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841225634 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841225634 +Best:: JoinMethod: NestedLoop + Cost: 9.00 Degree: 1 Resp: 9.00 Card: 0.01 Bytes: 68 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 9.00 Resp: 9.00 Degree: 1 Bytes: 68 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 114175 + Resp_io: 13.00 Resp_cpu: 114175 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +SM Join + SM cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364700111 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364700111 + Outer table: EMPLOYEES Alias: E + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 13.50 Resp: 13.50 [multiMatchCost=0.00] +HA Join + HA cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841260909 + resp: 13.50 resp_io: 13.00 resp_cpu: 182841260909 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: DEPARTMENTS Alias: D + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Join order[6]: CUSTOMERS[C]#0 ORDERS[O]#3 ORDER_ITEMS[OI]#6 EMPLOYEES[E]#2 PRODUCT_INFORMATION[I]#4 DEPARTMENTS[D]#1 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 9.00 Resp: 9.00 Degree: 1 Bytes: 68 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 17.00 Resp: 17.00 Degree: 1 + Cost_io: 17.00 Cost_cpu: 214167 + Resp_io: 17.00 Resp_cpu: 214167 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 80970 + Resp_io: 10.00 Resp_cpu: 80970 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 80970 + Resp_io: 10.00 Resp_cpu: 80970 + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 80970 + resp: 10.00 resp_io: 10.00 resc_cpu: 80970 +Join Card: 0.012142 = = outer (0.012142) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 19.00 Resp: 19.00 [multiMatchCost=0.00] +SM Join + SM cost: 19.00 + resc: 19.00 resc_io: 17.00 resc_cpu: 731364906114 + resp: 19.00 resp_io: 17.00 resp_cpu: 731364906114 + Outer table: EMPLOYEES Alias: E + resc: 9.00 card 0.01 bytes: 68 deg: 1 resp: 9.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 17.50 Resp: 17.50 [multiMatchCost=0.00] +HA Join + HA cost: 17.50 + resc: 17.50 resc_io: 17.00 resc_cpu: 182841389601 + resp: 17.50 resp_io: 17.00 resp_cpu: 182841389601 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 88 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 88 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 14.00 Resp: 14.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 122517 + Resp_io: 14.00 Resp_cpu: 122517 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 107 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 16.00 Resp: 16.00 [multiMatchCost=0.00] +SM Join + SM cost: 16.00 + resc: 16.00 resc_io: 14.00 resc_cpu: 731364708453 + resp: 16.00 resp_io: 14.00 resp_cpu: 731364708453 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +HA Join + HA cost: 14.50 + resc: 14.50 resc_io: 14.00 resc_cpu: 182841269251 + resp: 14.50 resp_io: 14.00 resp_cpu: 182841269251 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: DEPARTMENTS Alias: D + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Join order[7]: CUSTOMERS[C]#0 ORDERS[O]#3 ORDER_ITEMS[OI]#6 EMPLOYEES[E]#2 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 DEPARTMENTS[D]#1 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 88 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 189.00 Resp: 189.00 Degree: 1 + Cost_io: 189.00 Cost_cpu: 6782463 + Resp_io: 189.00 Resp_cpu: 6782463 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 90181 + Resp_io: 11.00 Resp_cpu: 90181 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 90181 + Resp_io: 11.00 Resp_cpu: 90181 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 90181 + resp: 11.00 resp_io: 11.00 resc_cpu: 90181 +Outer Join Card: 0.012142 = max ( outer (0.012142),(outer (0.012142) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 107 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 99.50 Resp: 99.50 [multiMatchCost=0.00] +SM Join + SM cost: 99.50 + resc: 99.50 resc_io: 97.00 resc_cpu: 914212154966 + resp: 99.50 resp_io: 97.00 resp_cpu: 914212154966 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 10.00 card 0.01 bytes: 88 deg: 1 resp: 10.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 98.00 Resp: 98.00 [multiMatchCost=0.00] +HA Join + HA cost: 98.00 + resc: 98.00 resc_io: 97.00 resc_cpu: 365688638453 + resp: 98.00 resp_io: 97.00 resp_cpu: 365688638453 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 128 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 128 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 15.00 Cost_cpu: 131728 + Resp_io: 15.00 Resp_cpu: 131728 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Join Card: 0.012029 = = outer (0.012142) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 11.00 card 0.01 bytes: 128 deg: 1 resp: 11.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 151 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 17.00 Resp: 17.00 [multiMatchCost=0.00] +SM Join + SM cost: 17.00 + resc: 17.00 resc_io: 15.00 resc_cpu: 731364717664 + resp: 17.00 resp_io: 15.00 resp_cpu: 731364717664 + Outer table: PRODUCT_DESCRIPTIONS Alias: D + resc: 11.00 card 0.01 bytes: 128 deg: 1 resp: 11.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 15.50 Resp: 15.50 [multiMatchCost=0.00] +HA Join + HA cost: 15.50 + resc: 15.50 resc_io: 15.00 resc_cpu: 182841278462 + resp: 15.50 resp_io: 15.00 resp_cpu: 182841278462 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :1 +Join order[8]: EMPLOYEES[E]#2 DEPARTMENTS[D]#1 ORDERS[O]#3 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 1.00 Cost: 2.00 Resp: 2.00 Degree: 1 Bytes: 22 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 56340 + Resp_io: 6.00 Resp_cpu: 56340 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + + Best NL cost: 3.00 + resc: 3.00 resc_io: 3.00 resc_cpu: 23184 + resp: 3.00 resp_io: 3.00 resc_cpu: 23184 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: NestedLoop + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 151463 + Resp_io: 11.00 Resp_cpu: 151463 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 89727 + Resp_io: 5.00 Resp_cpu: 89727 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 42582 + Resp_io: 5.00 Resp_cpu: 42582 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 52156 + Resp_io: 4.00 Resp_cpu: 52156 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 33556 + Resp_io: 4.00 Resp_cpu: 33556 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 4.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 5.000188, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 42582 + resp: 5.00 resp_io: 5.00 resc_cpu: 42582 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364686449 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364686449 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841234816 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841234816 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 32.00 Resp: 32.00 Degree: 1 + Cost_io: 32.00 Cost_cpu: 719510 + Resp_io: 32.00 Resp_cpu: 719510 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 106436 + Resp_io: 13.00 Resp_cpu: 106436 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 46782 + Resp_io: 5.00 Resp_cpu: 46782 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 47582 + Resp_io: 5.00 Resp_cpu: 47582 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 5.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 5.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 76229 + resp: 9.00 resp_io: 9.00 resc_cpu: 76229 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 8.00 resc_cpu: 731364651113 + resp: 10.00 resp_io: 8.00 resp_cpu: 731364651113 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 8.00 resc_cpu: 182841212001 + resp: 8.50 resp_io: 8.00 resp_cpu: 182841212001 +Best:: JoinMethod: Hash + Cost: 8.50 Degree: 1 Resp: 8.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.00 Cost: 8.50 Resp: 8.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841400558 + Resp_io: 12.00 Resp_cpu: 182841400558 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841237225 + resp: 11.50 resp_io: 11.00 resc_cpu: 182841237225 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +SM Join + SM cost: 14.50 + resc: 14.50 resc_io: 12.00 resc_cpu: 914206267447 + resp: 14.50 resp_io: 12.00 resp_cpu: 914206267447 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +HA Join + HA cost: 13.00 + resc: 13.00 resc_io: 12.00 resc_cpu: 365682613692 + resp: 13.00 resp_io: 12.00 resp_cpu: 365682613692 +Best:: JoinMethod: NestedLoop + Cost: 11.50 Degree: 1 Resp: 11.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.50 Resp: 11.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 19.50 Resp: 19.50 Degree: 1 + Cost_io: 19.00 Cost_cpu: 182841378764 + Resp_io: 19.00 Resp_cpu: 182841378764 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + + Best NL cost: 12.50 + resc: 12.50 resc_io: 12.00 resc_cpu: 182841245566 + resp: 12.50 resp_io: 12.00 resc_cpu: 182841245566 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 21.50 Resp: 21.50 [multiMatchCost=0.00] +SM Join + SM cost: 21.50 + resc: 21.50 resc_io: 19.00 resc_cpu: 914206070710 + resp: 21.50 resp_io: 19.00 resp_cpu: 914206070710 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +HA Join + HA cost: 20.00 + resc: 20.00 resc_io: 19.00 resc_cpu: 365682554198 + resp: 20.00 resp_io: 19.00 resp_cpu: 365682554198 +Best:: JoinMethod: NestedLoop + Cost: 12.50 Degree: 1 Resp: 12.50 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 12.50 Resp: 12.50 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 191.50 Resp: 191.50 Degree: 1 + Cost_io: 191.00 Cost_cpu: 182847947059 + Resp_io: 191.00 Resp_cpu: 182847947059 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + + Best NL cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841254778 + resp: 13.50 resp_io: 13.00 resc_cpu: 182841254778 +Outer Join Card: 0.006014 = max ( outer (0.006014),(outer (0.006014) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 102.00 Resp: 102.00 [multiMatchCost=0.00] +SM Join + SM cost: 102.00 + resc: 102.00 resc_io: 99.00 resc_cpu: 1097053319562 + resp: 102.00 resp_io: 99.00 resp_cpu: 1097053319562 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +HA Join + HA cost: 100.50 + resc: 100.50 resc_io: 99.00 resc_cpu: 548529803050 + resp: 100.50 resp_io: 99.00 resp_cpu: 548529803050 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.00601441537 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :2 +Join order[9]: DEPARTMENTS[D]#1 EMPLOYEES[E]#2 ORDERS[O]#3 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#6 PRODUCT_INFORMATION[I]#4 PRODUCT_DESCRIPTIONS[D]#5 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 1.00 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 16 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 120013 + Resp_io: 8.00 Resp_cpu: 120013 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 13963 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 55510 + Resp_io: 5.00 Resp_cpu: 55510 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 50069 + Resp_io: 5.00 Resp_cpu: 50069 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42597 + Resp_io: 4.00 Resp_cpu: 42597 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 0.00 resc_cpu: 2850 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44397 + Resp_io: 4.00 Resp_cpu: 44397 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 4.000000, sel = 0.009346 + Not used EMP_DEPARTMENT_IX + Cost = 4.000000, sel = 0.495327 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 50069 + resp: 5.00 resp_io: 5.00 resc_cpu: 50069 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 +SM Join (with index on outer) + Access Path: index (FullScan) + Index: DEPT_ID_PK + resc_io: 2.00 resc_cpu: 25583 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 1 + Outer table: DEPARTMENTS Alias: D + resc: 2.00 card 1.00 bytes: 16 deg: 1 resp: 2.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 5.00 Resp: 5.00 [multiMatchCost=0.00] + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: SortMerge + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 365682461622 + Resp_io: 12.00 Resp_cpu: 365682461622 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682399887 + Resp_io: 6.00 Resp_cpu: 365682399887 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682352741 + Resp_io: 6.00 Resp_cpu: 365682352741 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682362315 + Resp_io: 5.00 Resp_cpu: 365682362315 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682343715 + Resp_io: 5.00 Resp_cpu: 365682343715 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 6.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 7.000235, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 7.00 + resc: 7.00 resc_io: 6.00 resc_cpu: 365682352741 + resp: 7.00 resp_io: 6.00 resc_cpu: 365682352741 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 7.00 resc_cpu: 1097046996608 + resp: 10.00 resp_io: 7.00 resp_cpu: 1097046996608 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 7.00 resc_cpu: 548523544975 + resp: 8.50 resp_io: 7.00 resp_cpu: 548523544975 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 34.00 Resp: 34.00 Degree: 1 + Cost_io: 33.00 Cost_cpu: 365683029669 + Resp_io: 33.00 Resp_cpu: 365683029669 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 365682416595 + Resp_io: 14.00 Resp_cpu: 365682416595 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682356941 + Resp_io: 6.00 Resp_cpu: 365682356941 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682357741 + Resp_io: 6.00 Resp_cpu: 365682357741 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 7.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 7.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.00 + resc: 11.00 resc_io: 10.00 resc_cpu: 365682386388 + resp: 11.00 resp_io: 10.00 resc_cpu: 365682386388 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 9.00 resc_cpu: 1097046961272 + resp: 12.00 resp_io: 9.00 resp_cpu: 1097046961272 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 9.00 resc_cpu: 548523522160 + resp: 10.50 resp_io: 9.00 resp_cpu: 548523522160 +Best:: JoinMethod: Hash + Cost: 10.50 Degree: 1 Resp: 10.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#6 +*************** +NL Join + Outer table: Card: 0.00 Cost: 10.50 Resp: 10.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523710717 + Resp_io: 13.00 Resp_cpu: 548523710717 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 13.50 + resc: 13.50 resc_io: 12.00 resc_cpu: 548523547384 + resp: 13.50 resp_io: 12.00 resc_cpu: 548523547384 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 16.50 Resp: 16.50 [multiMatchCost=0.00] +SM Join + SM cost: 16.50 + resc: 16.50 resc_io: 13.00 resc_cpu: 1279888577607 + resp: 16.50 resp_io: 13.00 resp_cpu: 1279888577607 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +HA Join + HA cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364923851 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364923851 +Best:: JoinMethod: NestedLoop + Cost: 13.50 Degree: 1 Resp: 13.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#4 +*************** +NL Join + Outer table: Card: 0.01 Cost: 13.50 Resp: 13.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 21.50 Resp: 21.50 Degree: 1 + Cost_io: 20.00 Cost_cpu: 548523688923 + Resp_io: 20.00 Resp_cpu: 548523688923 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + + Best NL cost: 14.50 + resc: 14.50 resc_io: 13.00 resc_cpu: 548523555726 + resp: 14.50 resp_io: 13.00 resc_cpu: 548523555726 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 23.50 Resp: 23.50 [multiMatchCost=0.00] +SM Join + SM cost: 23.50 + resc: 23.50 resc_io: 20.00 resc_cpu: 1279888380870 + resp: 23.50 resp_io: 20.00 resp_cpu: 1279888380870 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 22.00 Resp: 22.00 [multiMatchCost=0.00] +HA Join + HA cost: 22.00 + resc: 22.00 resc_io: 20.00 resc_cpu: 731364864357 + resp: 22.00 resp_io: 20.00 resp_cpu: 731364864357 +Join order aborted: cost > best plan cost +*********************** + +*************************************** +ADDITIONAL PLANS +*************************************** +Considering RBO-ranked initial join order. +Best join order so far: 3 +Permutations for Starting Table :0 +Join order[10]: EMPLOYEES[E]#0 DEPARTMENTS[D]#1 ORDERS[O]#3 CUSTOMERS[C]#2 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 1.00 Cost: 2.00 Resp: 2.00 Degree: 1 Bytes: 22 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 56340 + Resp_io: 6.00 Resp_cpu: 56340 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + + Best NL cost: 3.00 + resc: 3.00 resc_io: 3.00 resc_cpu: 23184 + resp: 3.00 resp_io: 3.00 resc_cpu: 23184 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: NestedLoop + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 151463 + Resp_io: 11.00 Resp_cpu: 151463 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 89727 + Resp_io: 5.00 Resp_cpu: 89727 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 42582 + Resp_io: 5.00 Resp_cpu: 42582 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 52156 + Resp_io: 4.00 Resp_cpu: 52156 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 33556 + Resp_io: 4.00 Resp_cpu: 33556 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 4.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 5.000188, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 42582 + resp: 5.00 resp_io: 5.00 resc_cpu: 42582 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364686449 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364686449 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841234816 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841234816 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#2 +*************** +NL Join + Outer table: Card: 3.85 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 32.00 Resp: 32.00 Degree: 1 + Cost_io: 32.00 Cost_cpu: 719510 + Resp_io: 32.00 Resp_cpu: 719510 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 106436 + Resp_io: 13.00 Resp_cpu: 106436 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 46782 + Resp_io: 5.00 Resp_cpu: 46782 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 47582 + Resp_io: 5.00 Resp_cpu: 47582 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 5.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 5.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 76229 + resp: 9.00 resp_io: 9.00 resc_cpu: 76229 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 8.00 resc_cpu: 731364651113 + resp: 10.00 resp_io: 8.00 resp_cpu: 731364651113 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 8.00 resc_cpu: 182841212001 + resp: 8.50 resp_io: 8.00 resp_cpu: 182841212001 +Best:: JoinMethod: Hash + Cost: 8.50 Degree: 1 Resp: 8.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 8.50 Resp: 8.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841400558 + Resp_io: 12.00 Resp_cpu: 182841400558 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841237225 + resp: 11.50 resp_io: 11.00 resc_cpu: 182841237225 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +SM Join + SM cost: 14.50 + resc: 14.50 resc_io: 12.00 resc_cpu: 914206267447 + resp: 14.50 resp_io: 12.00 resp_cpu: 914206267447 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +HA Join + HA cost: 13.00 + resc: 13.00 resc_io: 12.00 resc_cpu: 365682613692 + resp: 13.00 resp_io: 12.00 resp_cpu: 365682613692 +Best:: JoinMethod: NestedLoop + Cost: 11.50 Degree: 1 Resp: 11.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.50 Resp: 11.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 19.50 Resp: 19.50 Degree: 1 + Cost_io: 19.00 Cost_cpu: 182841378764 + Resp_io: 19.00 Resp_cpu: 182841378764 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + + Best NL cost: 12.50 + resc: 12.50 resc_io: 12.00 resc_cpu: 182841245566 + resp: 12.50 resp_io: 12.00 resc_cpu: 182841245566 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 21.50 Resp: 21.50 [multiMatchCost=0.00] +SM Join + SM cost: 21.50 + resc: 21.50 resc_io: 19.00 resc_cpu: 914206070710 + resp: 21.50 resp_io: 19.00 resp_cpu: 914206070710 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +HA Join + HA cost: 20.00 + resc: 20.00 resc_io: 19.00 resc_cpu: 365682554198 + resp: 20.00 resp_io: 19.00 resp_cpu: 365682554198 +Best:: JoinMethod: NestedLoop + Cost: 12.50 Degree: 1 Resp: 12.50 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 12.50 Resp: 12.50 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 191.50 Resp: 191.50 Degree: 1 + Cost_io: 191.00 Cost_cpu: 182847947059 + Resp_io: 191.00 Resp_cpu: 182847947059 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + + Best NL cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841254778 + resp: 13.50 resp_io: 13.00 resc_cpu: 182841254778 +Outer Join Card: 0.006014 = max ( outer (0.006014),(outer (0.006014) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 102.00 Resp: 102.00 [multiMatchCost=0.00] +SM Join + SM cost: 102.00 + resc: 102.00 resc_io: 99.00 resc_cpu: 1097053319562 + resp: 102.00 resp_io: 99.00 resp_cpu: 1097053319562 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +HA Join + HA cost: 100.50 + resc: 100.50 resc_io: 99.00 resc_cpu: 548529803050 + resp: 100.50 resp_io: 99.00 resp_cpu: 548529803050 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.00601441537 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :1 +Join order[11]: CUSTOMERS[C]#2 ORDERS[O]#3 EMPLOYEES[E]#0 DEPARTMENTS[D]#1 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.01 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 19 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 150514 + Resp_io: 11.00 Resp_cpu: 150514 +kkofmx: index filter:"O"."CUSTOMER_ID">0 + +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (AllEqJoinGuess) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 16548 + ix_sel: 0.021277 ix_sel_with_filters: 0.021277 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 50.00 + ***** End Logdef Adjustment ****** + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 38883 + Resp_io: 5.00 Resp_cpu: 38883 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 59164 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 81399 + Resp_io: 6.00 Resp_cpu: 81399 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 38883 + resp: 5.00 resp_io: 5.00 resc_cpu: 38883 +Join Card: 0.017255 = = outer (0.010599) * inner (70.000000) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.02 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364685499 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364685499 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841233867 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841233867 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.02 Bytes: 30 + +*************** +Now joining: EMPLOYEES[E]#0 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 117348 + Resp_io: 9.00 Resp_cpu: 117348 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47404 + Resp_io: 6.00 Resp_cpu: 47404 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 5.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 5.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 6.00 + resc: 6.00 resc_io: 6.00 resc_cpu: 47404 + resp: 6.00 resp_io: 6.00 resc_cpu: 47404 +Join Card: 0.001917 = = outer (0.017255) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364639611 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364639611 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841200409 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841200409 +Best:: JoinMethod: NestedLoop + Cost: 6.00 Degree: 1 Resp: 6.00 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 88951 + Resp_io: 10.00 Resp_cpu: 88951 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + + Best NL cost: 7.00 + resc: 7.00 resc_io: 7.00 resc_cpu: 55795 + resp: 7.00 resp_io: 7.00 resc_cpu: 55795 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364674887 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364674887 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841235685 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841235685 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 244353 + Resp_io: 11.00 Resp_cpu: 244353 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +SM Join + SM cost: 13.00 + resc: 13.00 resc_io: 11.00 resc_cpu: 731365111242 + resp: 13.00 resp_io: 11.00 resp_cpu: 731365111242 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 11.50 Resp: 11.50 [multiMatchCost=0.00] +HA Join + HA cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841457487 + resp: 11.50 resp_io: 11.00 resp_cpu: 182841457487 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :2 +Join order[12]: DEPARTMENTS[D]#1 EMPLOYEES[E]#0 ORDERS[O]#3 CUSTOMERS[C]#2 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: EMPLOYEES[E]#0 +*************** +NL Join + Outer table: Card: 1.00 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 16 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 120013 + Resp_io: 8.00 Resp_cpu: 120013 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 13963 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 55510 + Resp_io: 5.00 Resp_cpu: 55510 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 50069 + Resp_io: 5.00 Resp_cpu: 50069 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42597 + Resp_io: 4.00 Resp_cpu: 42597 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 0.00 resc_cpu: 2850 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44397 + Resp_io: 4.00 Resp_cpu: 44397 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 4.000000, sel = 0.009346 + Not used EMP_DEPARTMENT_IX + Cost = 4.000000, sel = 0.495327 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 50069 + resp: 5.00 resp_io: 5.00 resc_cpu: 50069 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 +SM Join (with index on outer) + Access Path: index (FullScan) + Index: DEPT_ID_PK + resc_io: 2.00 resc_cpu: 25583 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 1 + Outer table: DEPARTMENTS Alias: D + resc: 2.00 card 1.00 bytes: 16 deg: 1 resp: 2.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 5.00 Resp: 5.00 [multiMatchCost=0.00] + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: SortMerge + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 365682461622 + Resp_io: 12.00 Resp_cpu: 365682461622 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682399887 + Resp_io: 6.00 Resp_cpu: 365682399887 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682352741 + Resp_io: 6.00 Resp_cpu: 365682352741 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682362315 + Resp_io: 5.00 Resp_cpu: 365682362315 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682343715 + Resp_io: 5.00 Resp_cpu: 365682343715 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 6.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 7.000235, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 7.00 + resc: 7.00 resc_io: 6.00 resc_cpu: 365682352741 + resp: 7.00 resp_io: 6.00 resc_cpu: 365682352741 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 7.00 resc_cpu: 1097046996608 + resp: 10.00 resp_io: 7.00 resp_cpu: 1097046996608 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 7.00 resc_cpu: 548523544975 + resp: 8.50 resp_io: 7.00 resp_cpu: 548523544975 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#2 +*************** +NL Join + Outer table: Card: 3.85 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 34.00 Resp: 34.00 Degree: 1 + Cost_io: 33.00 Cost_cpu: 365683029669 + Resp_io: 33.00 Resp_cpu: 365683029669 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 365682416595 + Resp_io: 14.00 Resp_cpu: 365682416595 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682356941 + Resp_io: 6.00 Resp_cpu: 365682356941 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682357741 + Resp_io: 6.00 Resp_cpu: 365682357741 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 7.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 7.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.00 + resc: 11.00 resc_io: 10.00 resc_cpu: 365682386388 + resp: 11.00 resp_io: 10.00 resc_cpu: 365682386388 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 9.00 resc_cpu: 1097046961272 + resp: 12.00 resp_io: 9.00 resp_cpu: 1097046961272 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 9.00 resc_cpu: 548523522160 + resp: 10.50 resp_io: 9.00 resp_cpu: 548523522160 +Best:: JoinMethod: Hash + Cost: 10.50 Degree: 1 Resp: 10.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 10.50 Resp: 10.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523710717 + Resp_io: 13.00 Resp_cpu: 548523710717 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 13.50 + resc: 13.50 resc_io: 12.00 resc_cpu: 548523547384 + resp: 13.50 resp_io: 12.00 resc_cpu: 548523547384 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 16.50 Resp: 16.50 [multiMatchCost=0.00] +SM Join + SM cost: 16.50 + resc: 16.50 resc_io: 13.00 resc_cpu: 1279888577607 + resp: 16.50 resp_io: 13.00 resp_cpu: 1279888577607 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +HA Join + HA cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364923851 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364923851 +Best:: JoinMethod: NestedLoop + Cost: 13.50 Degree: 1 Resp: 13.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 13.50 Resp: 13.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 21.50 Resp: 21.50 Degree: 1 + Cost_io: 20.00 Cost_cpu: 548523688923 + Resp_io: 20.00 Resp_cpu: 548523688923 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + + Best NL cost: 14.50 + resc: 14.50 resc_io: 13.00 resc_cpu: 548523555726 + resp: 14.50 resp_io: 13.00 resc_cpu: 548523555726 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 23.50 Resp: 23.50 [multiMatchCost=0.00] +SM Join + SM cost: 23.50 + resc: 23.50 resc_io: 20.00 resc_cpu: 1279888380870 + resp: 23.50 resp_io: 20.00 resp_cpu: 1279888380870 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 22.00 Resp: 22.00 [multiMatchCost=0.00] +HA Join + HA cost: 22.00 + resc: 22.00 resc_io: 20.00 resc_cpu: 731364864357 + resp: 22.00 resp_io: 20.00 resp_cpu: 731364864357 +Join order aborted: cost > best plan cost +*********************** +*************************************** +Considering join cardinality based initial join order. +Best join order so far: 3 +Permutations for Starting Table :0 +Join order[13]: CUSTOMERS[C]#0 ORDERS[O]#3 EMPLOYEES[E]#2 DEPARTMENTS[D]#1 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.01 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 19 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 150514 + Resp_io: 11.00 Resp_cpu: 150514 +kkofmx: index filter:"O"."CUSTOMER_ID">0 + +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (AllEqJoinGuess) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 16548 + ix_sel: 0.021277 ix_sel_with_filters: 0.021277 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 50.00 + ***** End Logdef Adjustment ****** + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 38883 + Resp_io: 5.00 Resp_cpu: 38883 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 59164 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 81399 + Resp_io: 6.00 Resp_cpu: 81399 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 38883 + resp: 5.00 resp_io: 5.00 resc_cpu: 38883 +Join Card: 0.017255 = = outer (0.010599) * inner (70.000000) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.02 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364685499 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364685499 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841233867 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841233867 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.02 Bytes: 30 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 117348 + Resp_io: 9.00 Resp_cpu: 117348 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47404 + Resp_io: 6.00 Resp_cpu: 47404 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 5.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 5.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 6.00 + resc: 6.00 resc_io: 6.00 resc_cpu: 47404 + resp: 6.00 resp_io: 6.00 resc_cpu: 47404 +Join Card: 0.001917 = = outer (0.017255) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364639611 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364639611 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841200409 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841200409 +Best:: JoinMethod: NestedLoop + Cost: 6.00 Degree: 1 Resp: 6.00 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 88951 + Resp_io: 10.00 Resp_cpu: 88951 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + + Best NL cost: 7.00 + resc: 7.00 resc_io: 7.00 resc_cpu: 55795 + resp: 7.00 resp_io: 7.00 resc_cpu: 55795 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364674887 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364674887 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841235685 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841235685 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 244353 + Resp_io: 11.00 Resp_cpu: 244353 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +SM Join + SM cost: 13.00 + resc: 13.00 resc_io: 11.00 resc_cpu: 731365111242 + resp: 13.00 resp_io: 11.00 resp_cpu: 731365111242 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 11.50 Resp: 11.50 [multiMatchCost=0.00] +HA Join + HA cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841457487 + resp: 11.50 resp_io: 11.00 resp_cpu: 182841457487 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Best:: JoinMethod: NestedLoop + Cost: 14.00 Degree: 1 Resp: 14.00 Card: 0.01 Bytes: 144 +*********************** +Best so far: Table#: 0 cost: 3.0000 card: 0.0106 bytes: 19 + Table#: 3 cost: 5.0000 card: 0.0173 bytes: 30 + Table#: 2 cost: 6.0000 card: 0.0019 bytes: 52 + Table#: 1 cost: 7.0000 card: 0.0019 bytes: 68 + Table#: 4 cost: 10.0000 card: 0.0120 bytes: 84 + Table#: 5 cost: 11.0000 card: 0.0120 bytes: 104 + Table#: 6 cost: 14.0000 card: 0.0120 bytes: 144 +*********************** +Permutations for Starting Table :1 +Join order[14]: EMPLOYEES[E]#2 DEPARTMENTS[D]#1 ORDERS[O]#3 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: DEPARTMENTS[D]#1 +*************** +NL Join + Outer table: Card: 1.00 Cost: 2.00 Resp: 2.00 Degree: 1 Bytes: 22 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 56340 + Resp_io: 6.00 Resp_cpu: 56340 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 23184 + Resp_io: 3.00 Resp_cpu: 23184 + + Best NL cost: 3.00 + resc: 3.00 resc_io: 3.00 resc_cpu: 23184 + resp: 3.00 resp_io: 3.00 resc_cpu: 23184 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: NestedLoop + Cost: 3.00 Degree: 1 Resp: 3.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 151463 + Resp_io: 11.00 Resp_cpu: 151463 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 89727 + Resp_io: 5.00 Resp_cpu: 89727 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 42582 + Resp_io: 5.00 Resp_cpu: 42582 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 52156 + Resp_io: 4.00 Resp_cpu: 52156 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 33556 + Resp_io: 4.00 Resp_cpu: 33556 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 4.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 5.000188, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 42582 + resp: 5.00 resp_io: 5.00 resc_cpu: 42582 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364686449 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364686449 + Outer table: DEPARTMENTS Alias: D + resc: 3.00 card 0.50 bytes: 38 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841234816 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841234816 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 32.00 Resp: 32.00 Degree: 1 + Cost_io: 32.00 Cost_cpu: 719510 + Resp_io: 32.00 Resp_cpu: 719510 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 76229 + Resp_io: 9.00 Resp_cpu: 76229 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 13.00 Cost_cpu: 106436 + Resp_io: 13.00 Resp_cpu: 106436 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 46782 + Resp_io: 5.00 Resp_cpu: 46782 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 47582 + Resp_io: 5.00 Resp_cpu: 47582 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 5.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 5.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 9.00 + resc: 9.00 resc_io: 9.00 resc_cpu: 76229 + resp: 9.00 resp_io: 9.00 resc_cpu: 76229 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 8.00 resc_cpu: 731364651113 + resp: 10.00 resp_io: 8.00 resp_cpu: 731364651113 + Outer table: ORDERS Alias: O + resc: 5.00 card 3.85 bytes: 49 deg: 1 resp: 5.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 8.00 resc_cpu: 182841212001 + resp: 8.50 resp_io: 8.00 resp_cpu: 182841212001 +Best:: JoinMethod: Hash + Cost: 8.50 Degree: 1 Resp: 8.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 8.50 Resp: 8.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841400558 + Resp_io: 12.00 Resp_cpu: 182841400558 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237225 + Resp_io: 11.00 Resp_cpu: 182841237225 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841237225 + resp: 11.50 resp_io: 11.00 resc_cpu: 182841237225 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +SM Join + SM cost: 14.50 + resc: 14.50 resc_io: 12.00 resc_cpu: 914206267447 + resp: 14.50 resp_io: 12.00 resp_cpu: 914206267447 + Outer table: CUSTOMERS Alias: C + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +HA Join + HA cost: 13.00 + resc: 13.00 resc_io: 12.00 resc_cpu: 365682613692 + resp: 13.00 resp_io: 12.00 resp_cpu: 365682613692 +Best:: JoinMethod: NestedLoop + Cost: 11.50 Degree: 1 Resp: 11.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.50 Resp: 11.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 19.50 Resp: 19.50 Degree: 1 + Cost_io: 19.00 Cost_cpu: 182841378764 + Resp_io: 19.00 Resp_cpu: 182841378764 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841245566 + Resp_io: 12.00 Resp_cpu: 182841245566 + + Best NL cost: 12.50 + resc: 12.50 resc_io: 12.00 resc_cpu: 182841245566 + resp: 12.50 resp_io: 12.00 resc_cpu: 182841245566 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 21.50 Resp: 21.50 [multiMatchCost=0.00] +SM Join + SM cost: 21.50 + resc: 21.50 resc_io: 19.00 resc_cpu: 914206070710 + resp: 21.50 resp_io: 19.00 resp_cpu: 914206070710 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +HA Join + HA cost: 20.00 + resc: 20.00 resc_io: 19.00 resc_cpu: 365682554198 + resp: 20.00 resp_io: 19.00 resp_cpu: 365682554198 +Best:: JoinMethod: NestedLoop + Cost: 12.50 Degree: 1 Resp: 12.50 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 12.50 Resp: 12.50 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 191.50 Resp: 191.50 Degree: 1 + Cost_io: 191.00 Cost_cpu: 182847947059 + Resp_io: 191.00 Resp_cpu: 182847947059 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841254778 + Resp_io: 13.00 Resp_cpu: 182841254778 + + Best NL cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841254778 + resp: 13.50 resp_io: 13.00 resc_cpu: 182841254778 +Outer Join Card: 0.006014 = max ( outer (0.006014),(outer (0.006014) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 102.00 Resp: 102.00 [multiMatchCost=0.00] +SM Join + SM cost: 102.00 + resc: 102.00 resc_io: 99.00 resc_cpu: 1097053319562 + resp: 102.00 resp_io: 99.00 resp_cpu: 1097053319562 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +HA Join + HA cost: 100.50 + resc: 100.50 resc_io: 99.00 resc_cpu: 548529803050 + resp: 100.50 resp_io: 99.00 resp_cpu: 548529803050 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.00601441537 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :2 +Join order[15]: DEPARTMENTS[D]#1 EMPLOYEES[E]#2 ORDERS[O]#3 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 1.00 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 16 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 120013 + Resp_io: 8.00 Resp_cpu: 120013 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 13963 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 55510 + Resp_io: 5.00 Resp_cpu: 55510 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 50069 + Resp_io: 5.00 Resp_cpu: 50069 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42597 + Resp_io: 4.00 Resp_cpu: 42597 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 0.00 resc_cpu: 2850 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44397 + Resp_io: 4.00 Resp_cpu: 44397 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 4.000000, sel = 0.009346 + Not used EMP_DEPARTMENT_IX + Cost = 4.000000, sel = 0.495327 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 50069 + resp: 5.00 resp_io: 5.00 resc_cpu: 50069 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 +SM Join (with index on outer) + Access Path: index (FullScan) + Index: DEPT_ID_PK + resc_io: 2.00 resc_cpu: 25583 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 1 + Outer table: DEPARTMENTS Alias: D + resc: 2.00 card 1.00 bytes: 16 deg: 1 resp: 2.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 5.00 Resp: 5.00 [multiMatchCost=0.00] + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: SortMerge + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#3 +*************** +NL Join + Outer table: Card: 0.50 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 365682461622 + Resp_io: 12.00 Resp_cpu: 365682461622 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682399887 + Resp_io: 6.00 Resp_cpu: 365682399887 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682352741 + Resp_io: 6.00 Resp_cpu: 365682352741 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682362315 + Resp_io: 5.00 Resp_cpu: 365682362315 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682343715 + Resp_io: 5.00 Resp_cpu: 365682343715 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 6.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 7.000235, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 7.00 + resc: 7.00 resc_io: 6.00 resc_cpu: 365682352741 + resp: 7.00 resp_io: 6.00 resc_cpu: 365682352741 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 7.00 resc_cpu: 1097046996608 + resp: 10.00 resp_io: 7.00 resp_cpu: 1097046996608 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 7.00 resc_cpu: 548523544975 + resp: 8.50 resp_io: 7.00 resp_cpu: 548523544975 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 34.00 Resp: 34.00 Degree: 1 + Cost_io: 33.00 Cost_cpu: 365683029669 + Resp_io: 33.00 Resp_cpu: 365683029669 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 365682416595 + Resp_io: 14.00 Resp_cpu: 365682416595 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682356941 + Resp_io: 6.00 Resp_cpu: 365682356941 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682357741 + Resp_io: 6.00 Resp_cpu: 365682357741 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 7.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 7.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.00 + resc: 11.00 resc_io: 10.00 resc_cpu: 365682386388 + resp: 11.00 resp_io: 10.00 resc_cpu: 365682386388 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 9.00 resc_cpu: 1097046961272 + resp: 12.00 resp_io: 9.00 resp_cpu: 1097046961272 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 9.00 resc_cpu: 548523522160 + resp: 10.50 resp_io: 9.00 resp_cpu: 548523522160 +Best:: JoinMethod: Hash + Cost: 10.50 Degree: 1 Resp: 10.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 10.50 Resp: 10.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523710717 + Resp_io: 13.00 Resp_cpu: 548523710717 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 13.50 + resc: 13.50 resc_io: 12.00 resc_cpu: 548523547384 + resp: 13.50 resp_io: 12.00 resc_cpu: 548523547384 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 16.50 Resp: 16.50 [multiMatchCost=0.00] +SM Join + SM cost: 16.50 + resc: 16.50 resc_io: 13.00 resc_cpu: 1279888577607 + resp: 16.50 resp_io: 13.00 resp_cpu: 1279888577607 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +HA Join + HA cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364923851 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364923851 +Best:: JoinMethod: NestedLoop + Cost: 13.50 Degree: 1 Resp: 13.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 13.50 Resp: 13.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 21.50 Resp: 21.50 Degree: 1 + Cost_io: 20.00 Cost_cpu: 548523688923 + Resp_io: 20.00 Resp_cpu: 548523688923 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + + Best NL cost: 14.50 + resc: 14.50 resc_io: 13.00 resc_cpu: 548523555726 + resp: 14.50 resp_io: 13.00 resc_cpu: 548523555726 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 23.50 Resp: 23.50 [multiMatchCost=0.00] +SM Join + SM cost: 23.50 + resc: 23.50 resc_io: 20.00 resc_cpu: 1279888380870 + resp: 23.50 resp_io: 20.00 resp_cpu: 1279888380870 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 22.00 Resp: 22.00 [multiMatchCost=0.00] +HA Join + HA cost: 22.00 + resc: 22.00 resc_io: 20.00 resc_cpu: 731364864357 + resp: 22.00 resp_io: 20.00 resp_cpu: 731364864357 +Join order aborted: cost > best plan cost +*********************** +*************************************** +Considering join cardinality with NL access based initial join order. +Best join order so far: 13 +Permutations for Starting Table :0 +Join order[16]: CUSTOMERS[C]#0 ORDERS[O]#1 EMPLOYEES[E]#2 DEPARTMENTS[D]#3 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: ORDERS[O]#1 +*************** +NL Join + Outer table: Card: 0.01 Cost: 3.00 Resp: 3.00 Degree: 1 Bytes: 19 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 150514 + Resp_io: 11.00 Resp_cpu: 150514 +kkofmx: index filter:"O"."CUSTOMER_ID">0 + +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (AllEqJoinGuess) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 16548 + ix_sel: 0.021277 ix_sel_with_filters: 0.021277 + ***** Logdef predicate Adjustment ****** + Final IO cst 0.00 , CPU cst 50.00 + ***** End Logdef Adjustment ****** + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 38883 + Resp_io: 5.00 Resp_cpu: 38883 + Access Path: index (FullScan) + Index: ORD_SALES_REP_IX + resc_io: 3.00 resc_cpu: 59164 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 81399 + Resp_io: 6.00 Resp_cpu: 81399 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 38883 + resp: 5.00 resp_io: 5.00 resc_cpu: 38883 +Join Card: 0.017255 = = outer (0.010599) * inner (70.000000) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.02 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364685499 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364685499 + Outer table: CUSTOMERS Alias: C + resc: 3.00 card 0.01 bytes: 19 deg: 1 resp: 3.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841233867 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841233867 +Best:: JoinMethod: NestedLoop + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.02 Bytes: 30 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 0.02 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 30 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 9.00 Resp: 9.00 Degree: 1 + Cost_io: 9.00 Cost_cpu: 117348 + Resp_io: 9.00 Resp_cpu: 117348 + Access Path: index (UniqueScan) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 1.00 resc_cpu: 8572 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47454 + Resp_io: 6.00 Resp_cpu: 47454 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 47404 + Resp_io: 6.00 Resp_cpu: 47404 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Access Path: index (AllEqUnique) + Index: EMP_EMP_ID_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 39933 + Resp_io: 5.00 Resp_cpu: 39933 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 5.000000, sel = 0.009346 + Not used EMP_EMP_ID_PK + Cost = 5.000000, sel = 0.111111 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 6.00 + resc: 6.00 resc_io: 6.00 resc_cpu: 47404 + resp: 6.00 resp_io: 6.00 resc_cpu: 47404 +Join Card: 0.001917 = = outer (0.017255) * inner (1.000000) * sel (0.111111) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 43 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364639611 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364639611 + Outer table: ORDERS Alias: O + resc: 5.00 card 0.02 bytes: 30 deg: 1 resp: 5.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841200409 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841200409 +Best:: JoinMethod: NestedLoop + Cost: 6.00 Degree: 1 Resp: 6.00 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#3 +*************** +NL Join + Outer table: Card: 0.00 Cost: 6.00 Resp: 6.00 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 88951 + Resp_io: 10.00 Resp_cpu: 88951 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 7.00 Cost_cpu: 55795 + Resp_io: 7.00 Resp_cpu: 55795 + + Best NL cost: 7.00 + resc: 7.00 resc_io: 7.00 resc_cpu: 55795 + resp: 7.00 resp_io: 7.00 resc_cpu: 55795 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 10.00 resc_cpu: 731364674887 + resp: 12.00 resp_io: 10.00 resp_cpu: 731364674887 + Outer table: EMPLOYEES Alias: E + resc: 6.00 card 0.00 bytes: 52 deg: 1 resp: 6.00 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 10.00 resc_cpu: 182841235685 + resp: 10.50 resp_io: 10.00 resp_cpu: 182841235685 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 244353 + Resp_io: 11.00 Resp_cpu: 244353 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 81020 + Resp_io: 10.00 Resp_cpu: 81020 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 10.00 + resc: 10.00 resc_io: 10.00 resc_cpu: 81020 + resp: 10.00 resp_io: 10.00 resc_cpu: 81020 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +SM Join + SM cost: 13.00 + resc: 13.00 resc_io: 11.00 resc_cpu: 731365111242 + resp: 13.00 resp_io: 11.00 resp_cpu: 731365111242 + Outer table: DEPARTMENTS Alias: D + resc: 7.00 card 0.00 bytes: 68 deg: 1 resp: 7.00 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 11.50 Resp: 11.50 [multiMatchCost=0.00] +HA Join + HA cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841457487 + resp: 11.50 resp_io: 11.00 resp_cpu: 182841457487 +Best:: JoinMethod: NestedLoop + Cost: 10.00 Degree: 1 Resp: 10.00 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 10.00 Resp: 10.00 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 18.00 Resp: 18.00 Degree: 1 + Cost_io: 18.00 Cost_cpu: 222558 + Resp_io: 18.00 Resp_cpu: 222558 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 11.00 Cost_cpu: 89361 + Resp_io: 11.00 Resp_cpu: 89361 + + Best NL cost: 11.00 + resc: 11.00 resc_io: 11.00 resc_cpu: 89361 + resp: 11.00 resp_io: 11.00 resc_cpu: 89361 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +SM Join + SM cost: 20.00 + resc: 20.00 resc_io: 18.00 resc_cpu: 731364914505 + resp: 20.00 resp_io: 18.00 resp_cpu: 731364914505 + Outer table: ORDER_ITEMS Alias: OI + resc: 10.00 card 0.01 bytes: 84 deg: 1 resp: 10.00 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 18.50 Resp: 18.50 [multiMatchCost=0.00] +HA Join + HA cost: 18.50 + resc: 18.50 resc_io: 18.00 resc_cpu: 182841397992 + resp: 18.50 resp_io: 18.00 resp_cpu: 182841397992 +Best:: JoinMethod: NestedLoop + Cost: 11.00 Degree: 1 Resp: 11.00 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.00 Resp: 11.00 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 190.00 Resp: 190.00 Degree: 1 + Cost_io: 190.00 Cost_cpu: 6790854 + Resp_io: 190.00 Resp_cpu: 6790854 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 98573 + Resp_io: 12.00 Resp_cpu: 98573 + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 98573 + resp: 12.00 resp_io: 12.00 resc_cpu: 98573 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +SM Join + SM cost: 100.50 + resc: 100.50 resc_io: 98.00 resc_cpu: 914212163357 + resp: 100.50 resp_io: 98.00 resp_cpu: 914212163357 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 11.00 card 0.01 bytes: 104 deg: 1 resp: 11.00 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 99.00 Resp: 99.00 [multiMatchCost=0.00] +HA Join + HA cost: 99.00 + resc: 99.00 resc_io: 98.00 resc_cpu: 365688646844 + resp: 99.00 resp_io: 98.00 resp_cpu: 365688646844 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Best:: JoinMethod: NestedLoop + Cost: 14.00 Degree: 1 Resp: 14.00 Card: 0.01 Bytes: 144 +*********************** +Best so far: Table#: 0 cost: 3.0000 card: 0.0106 bytes: 19 + Table#: 1 cost: 5.0000 card: 0.0173 bytes: 30 + Table#: 2 cost: 6.0000 card: 0.0019 bytes: 52 + Table#: 3 cost: 7.0000 card: 0.0019 bytes: 68 + Table#: 4 cost: 10.0000 card: 0.0120 bytes: 84 + Table#: 5 cost: 11.0000 card: 0.0120 bytes: 104 + Table#: 6 cost: 14.0000 card: 0.0120 bytes: 144 +*********************** +Permutations for Starting Table :1 +Join order[17]: EMPLOYEES[E]#2 ORDERS[O]#1 CUSTOMERS[C]#0 DEPARTMENTS[D]#3 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: ORDERS[O]#1 +*************** +NL Join + Outer table: Card: 1.00 Cost: 2.00 Resp: 2.00 Degree: 1 Bytes: 22 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 10.00 Resp: 10.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 143072 + Resp_io: 10.00 Resp_cpu: 143072 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 81336 + Resp_io: 4.00 Resp_cpu: 81336 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 34190 + Resp_io: 4.00 Resp_cpu: 34190 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 43764 + Resp_io: 3.00 Resp_cpu: 43764 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 3.00 Resp: 3.00 Degree: 1 + Cost_io: 3.00 Cost_cpu: 25164 + Resp_io: 3.00 Resp_cpu: 25164 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 3.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 4.000141, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 4.00 + resc: 4.00 resc_io: 4.00 resc_cpu: 34190 + resp: 4.00 resp_io: 4.00 resc_cpu: 34190 +Join Card: 7.777778 = = outer (1.000000) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 8 Computed: 7.78 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 7.00 Resp: 7.00 [multiMatchCost=0.00] +SM Join + SM cost: 7.00 + resc: 7.00 resc_io: 5.00 resc_cpu: 731364678057 + resp: 7.00 resp_io: 5.00 resp_cpu: 731364678057 + Outer table: EMPLOYEES Alias: E + resc: 2.00 card 1.00 bytes: 22 deg: 1 resp: 2.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 5.50 Resp: 5.50 [multiMatchCost=0.00] +HA Join + HA cost: 5.50 + resc: 5.50 resc_io: 5.00 resc_cpu: 182841226425 + resp: 5.50 resp_io: 5.00 resp_cpu: 182841226425 +Best:: JoinMethod: NestedLoop + Cost: 4.00 Degree: 1 Resp: 4.00 Card: 7.78 Bytes: 33 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 7.78 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 33 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 55.00 Resp: 55.00 Degree: 1 + Cost_io: 55.00 Cost_cpu: 1388046 + Resp_io: 55.00 Resp_cpu: 1388046 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 101484 + Resp_io: 12.00 Resp_cpu: 101484 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 12.00 Resp: 12.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 101484 + Resp_io: 12.00 Resp_cpu: 101484 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 20.00 Resp: 20.00 Degree: 1 + Cost_io: 20.00 Cost_cpu: 161898 + Resp_io: 20.00 Resp_cpu: 161898 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42590 + Resp_io: 4.00 Resp_cpu: 42590 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44190 + Resp_io: 4.00 Resp_cpu: 44190 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 4.000000, sel = 0.005682 + Used CUSTOMERS_PK + Cost = 4.000000, sel = 0.023256 + Access path: Bitmap index - accepted + Cost: 12.107945 Cost_io: 12.107945 Cost_cpu: 124551.056438 Sel: 0.000132 + Not Believed to be index-only + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 12.00 + resc: 12.00 resc_io: 12.00 resc_cpu: 101484 + resp: 12.00 resp_io: 12.00 resc_cpu: 101484 +Join Card: 0.001917 = = outer (7.777778) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 4.00 card 7.78 bytes: 33 deg: 1 resp: 4.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 47 Total Rows: 8 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682294049 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 9.00 Resp: 9.00 [multiMatchCost=0.00] +SM Join + SM cost: 9.00 + resc: 9.00 resc_io: 7.00 resc_cpu: 731364643442 + resp: 9.00 resp_io: 7.00 resp_cpu: 731364643442 + Outer table: ORDERS Alias: O + resc: 4.00 card 7.78 bytes: 33 deg: 1 resp: 4.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 7.50 Resp: 7.50 [multiMatchCost=0.00] +HA Join + HA cost: 7.50 + resc: 7.50 resc_io: 7.00 resc_cpu: 182841204209 + resp: 7.50 resp_io: 7.00 resp_cpu: 182841204209 +Best:: JoinMethod: Hash + Cost: 7.50 Degree: 1 Resp: 7.50 Card: 0.00 Bytes: 52 + +*************** +Now joining: DEPARTMENTS[D]#3 +*************** +NL Join + Outer table: Card: 0.00 Cost: 7.50 Resp: 7.50 Degree: 1 Bytes: 52 +Access path analysis for DEPARTMENTS + Inner table: DEPARTMENTS Alias: D + Access Path: TableScan + NL Join: Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841245756 + Resp_io: 11.00 Resp_cpu: 182841245756 + Access Path: index (UniqueScan) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 8.50 Resp: 8.50 Degree: 1 + Cost_io: 8.00 Cost_cpu: 182841212601 + Resp_io: 8.00 Resp_cpu: 182841212601 + Access Path: index (AllEqUnique) + Index: DEPT_ID_PK + resc_io: 1.00 resc_cpu: 8391 + ix_sel: 0.037037 ix_sel_with_filters: 0.037037 + NL Join : Cost: 8.50 Resp: 8.50 Degree: 1 + Cost_io: 8.00 Cost_cpu: 182841212601 + Resp_io: 8.00 Resp_cpu: 182841212601 + + Best NL cost: 8.50 + resc: 8.50 resc_io: 8.00 resc_cpu: 182841212601 + resp: 8.50 resp_io: 8.00 resc_cpu: 182841212601 +Join Card: 0.001899 = = outer (0.001917) * inner (1.000000) * sel (0.990654) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 7.50 card 0.00 bytes: 52 deg: 1 resp: 7.50 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 68 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 13.50 Resp: 13.50 [multiMatchCost=0.00] +SM Join + SM cost: 13.50 + resc: 13.50 resc_io: 11.00 resc_cpu: 914205831692 + resp: 13.50 resp_io: 11.00 resp_cpu: 914205831692 + Outer table: CUSTOMERS Alias: C + resc: 7.50 card 0.00 bytes: 52 deg: 1 resp: 7.50 + Inner table: DEPARTMENTS Alias: D + resc: 4.00 card: 1.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +HA Join + HA cost: 12.00 + resc: 12.00 resc_io: 11.00 resc_cpu: 365682392490 + resp: 12.00 resp_io: 11.00 resp_cpu: 365682392490 +Best:: JoinMethod: NestedLoop + Cost: 8.50 Degree: 1 Resp: 8.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 8.50 Resp: 8.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841401158 + Resp_io: 12.00 Resp_cpu: 182841401158 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237825 + Resp_io: 11.00 Resp_cpu: 182841237825 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237825 + Resp_io: 11.00 Resp_cpu: 182841237825 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 11.50 Resp: 11.50 Degree: 1 + Cost_io: 11.00 Cost_cpu: 182841237825 + Resp_io: 11.00 Resp_cpu: 182841237825 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.50 + resc: 11.50 resc_io: 11.00 resc_cpu: 182841237825 + resp: 11.50 resp_io: 11.00 resc_cpu: 182841237825 +Join Card: 0.012029 = = outer (0.001899) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 14.50 Resp: 14.50 [multiMatchCost=0.00] +SM Join + SM cost: 14.50 + resc: 14.50 resc_io: 12.00 resc_cpu: 914206268047 + resp: 14.50 resp_io: 12.00 resp_cpu: 914206268047 + Outer table: DEPARTMENTS Alias: D + resc: 8.50 card 0.00 bytes: 68 deg: 1 resp: 8.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 13.00 Resp: 13.00 [multiMatchCost=0.00] +HA Join + HA cost: 13.00 + resc: 13.00 resc_io: 12.00 resc_cpu: 365682614292 + resp: 13.00 resp_io: 12.00 resp_cpu: 365682614292 +Best:: JoinMethod: NestedLoop + Cost: 11.50 Degree: 1 Resp: 11.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 11.50 Resp: 11.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 19.50 Resp: 19.50 Degree: 1 + Cost_io: 19.00 Cost_cpu: 182841379364 + Resp_io: 19.00 Resp_cpu: 182841379364 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841246166 + Resp_io: 12.00 Resp_cpu: 182841246166 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 12.50 Resp: 12.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 182841246166 + Resp_io: 12.00 Resp_cpu: 182841246166 + + Best NL cost: 12.50 + resc: 12.50 resc_io: 12.00 resc_cpu: 182841246166 + resp: 12.50 resp_io: 12.00 resc_cpu: 182841246166 +Join Card: 0.012029 = = outer (0.012029) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 21.50 Resp: 21.50 [multiMatchCost=0.00] +SM Join + SM cost: 21.50 + resc: 21.50 resc_io: 19.00 resc_cpu: 914206071310 + resp: 21.50 resp_io: 19.00 resp_cpu: 914206071310 + Outer table: ORDER_ITEMS Alias: OI + resc: 11.50 card 0.01 bytes: 84 deg: 1 resp: 11.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 20.00 Resp: 20.00 [multiMatchCost=0.00] +HA Join + HA cost: 20.00 + resc: 20.00 resc_io: 19.00 resc_cpu: 365682554798 + resp: 20.00 resp_io: 19.00 resp_cpu: 365682554798 +Best:: JoinMethod: NestedLoop + Cost: 12.50 Degree: 1 Resp: 12.50 Card: 0.01 Bytes: 104 + +*************** +Now joining: PRODUCT_DESCRIPTIONS[D]#6 +*************** +NL Join + Outer table: Card: 0.01 Cost: 12.50 Resp: 12.50 Degree: 1 Bytes: 104 +Access path analysis for PRODUCT_DESCRIPTIONS + Inner table: PRODUCT_DESCRIPTIONS Alias: D + Access Path: TableScan + NL Join: Cost: 191.50 Resp: 191.50 Degree: 1 + Cost_io: 191.00 Cost_cpu: 182847947659 + Resp_io: 191.00 Resp_cpu: 182847947659 + Access Path: index (UniqueScan) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841255378 + Resp_io: 13.00 Resp_cpu: 182841255378 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0001 + Access Path: index (AllEqUnique) + Index: PRD_DESC_PK + resc_io: 1.00 resc_cpu: 9211 + ix_sel: 0.000116 ix_sel_with_filters: 0.000116 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 182841255378 + Resp_io: 13.00 Resp_cpu: 182841255378 + + Best NL cost: 13.50 + resc: 13.50 resc_io: 13.00 resc_cpu: 182841255378 + resp: 13.50 resp_io: 13.00 resc_cpu: 182841255378 +Outer Join Card: 0.012029 = max ( outer (0.012029),(outer (0.012029) * inner (288.000000) * sel (0.003472))) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 125 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 54 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 102.00 Resp: 102.00 [multiMatchCost=0.00] +SM Join + SM cost: 102.00 + resc: 102.00 resc_io: 99.00 resc_cpu: 1097053320162 + resp: 102.00 resp_io: 99.00 resp_cpu: 1097053320162 + Outer table: PRODUCT_INFORMATION Alias: I + resc: 12.50 card 0.01 bytes: 104 deg: 1 resp: 12.50 + Inner table: PRODUCT_DESCRIPTIONS Alias: D + resc: 87.50 card: 288.00 bytes: 40 deg: 1 resp: 87.50 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 100.50 Resp: 100.50 [multiMatchCost=0.00] +HA Join + HA cost: 100.50 + resc: 100.50 resc_io: 99.00 resc_cpu: 548529803650 + resp: 100.50 resp_io: 99.00 resp_cpu: 548529803650 +GROUP BY sort + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +ORDER BY sort + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Plan cardinality mismatch: best card= 0.01202883073 curr card= 0.01202883073 +Join order aborted: cost > best plan cost +*********************** +Permutations for Starting Table :2 +Join order[18]: DEPARTMENTS[D]#3 EMPLOYEES[E]#2 ORDERS[O]#1 CUSTOMERS[C]#0 ORDER_ITEMS[OI]#4 PRODUCT_INFORMATION[I]#5 PRODUCT_DESCRIPTIONS[D]#6 + +*************** +Now joining: EMPLOYEES[E]#2 +*************** +NL Join + Outer table: Card: 1.00 Cost: 4.00 Resp: 4.00 Degree: 1 Bytes: 16 +Access path analysis for EMPLOYEES + Inner table: EMPLOYEES Alias: E + Access Path: TableScan + NL Join: Cost: 8.00 Resp: 8.00 Degree: 1 + Cost_io: 8.00 Cost_cpu: 120013 + Resp_io: 8.00 Resp_cpu: 120013 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 1.00 resc_cpu: 13963 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 55510 + Resp_io: 5.00 Resp_cpu: 55510 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 1.00 resc_cpu: 8521 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 5.00 Resp: 5.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 50069 + Resp_io: 5.00 Resp_cpu: 50069 + ****** trying bitmap/domain indexes ****** + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + Access Path: index (AllEqJoin) + Index: EMP_NAME_IX + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.009346 ix_sel_with_filters: 0.009346 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 42597 + Resp_io: 4.00 Resp_cpu: 42597 + Access Path: index (AllEqJoinGuess) + Index: EMP_DEPARTMENT_IX + resc_io: 0.00 resc_cpu: 2850 + ix_sel: 0.091767 ix_sel_with_filters: 0.091767 + NL Join : Cost: 4.00 Resp: 4.00 Degree: 1 + Cost_io: 4.00 Cost_cpu: 44397 + Resp_io: 4.00 Resp_cpu: 44397 + Bitmap nodes: + Used EMP_NAME_IX + Cost = 4.000000, sel = 0.009346 + Not used EMP_DEPARTMENT_IX + Cost = 4.000000, sel = 0.495327 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 5.00 + resc: 5.00 resc_io: 5.00 resc_cpu: 50069 + resp: 5.00 resp_io: 5.00 resc_cpu: 50069 +Join Card: 0.495327 = = outer (1.000000) * inner (1.000000) * sel (0.495327) +Join Card - Rounded: 1 Computed: 0.50 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 28 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 8.00 Resp: 8.00 [multiMatchCost=0.00] +SM Join + SM cost: 8.00 + resc: 8.00 resc_io: 6.00 resc_cpu: 731364642276 + resp: 8.00 resp_io: 6.00 resp_cpu: 731364642276 +SM Join (with index on outer) + Access Path: index (FullScan) + Index: DEPT_ID_PK + resc_io: 2.00 resc_cpu: 25583 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + Cost: 2.00 Resp: 2.00 Degree: 1 + Outer table: DEPARTMENTS Alias: D + resc: 2.00 card 1.00 bytes: 16 deg: 1 resp: 2.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 35 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 5.00 Resp: 5.00 [multiMatchCost=0.00] + Outer table: DEPARTMENTS Alias: D + resc: 4.00 card 1.00 bytes: 16 deg: 1 resp: 4.00 + Inner table: EMPLOYEES Alias: E + resc: 2.00 card: 1.00 bytes: 22 deg: 1 resp: 2.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 6.50 Resp: 6.50 [multiMatchCost=0.00] +HA Join + HA cost: 6.50 + resc: 6.50 resc_io: 6.00 resc_cpu: 182841203074 + resp: 6.50 resp_io: 6.00 resp_cpu: 182841203074 +Best:: JoinMethod: SortMerge + Cost: 5.00 Degree: 1 Resp: 5.00 Card: 0.50 Bytes: 38 + +*************** +Now joining: ORDERS[O]#1 +*************** +NL Join + Outer table: Card: 0.50 Cost: 5.00 Resp: 5.00 Degree: 1 Bytes: 38 +Access path analysis for ORDERS + Inner table: ORDERS Alias: O + Access Path: TableScan + NL Join: Cost: 13.00 Resp: 13.00 Degree: 1 + Cost_io: 12.00 Cost_cpu: 365682461622 + Resp_io: 12.00 Resp_cpu: 365682461622 +kkofmx: index filter:"O"."SALES_REP_ID" IS NOT NULL + + Access Path: index (RangeScan) + Index: ORD_CUSTOMER_IX + resc_io: 2.00 resc_cpu: 66543 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682399887 + Resp_io: 6.00 Resp_cpu: 365682399887 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 2.00 resc_cpu: 19397 + ix_sel: 0.111111 ix_sel_with_filters: 0.111111 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682352741 + Resp_io: 6.00 Resp_cpu: 365682352741 + ****** trying bitmap/domain indexes ****** + Access Path: index (IndexOnly) + Index: ORD_CUSTOMER_IX + resc_io: 1.00 resc_cpu: 28971 + ix_sel: 1.000000 ix_sel_with_filters: 1.000000 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682362315 + Resp_io: 5.00 Resp_cpu: 365682362315 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 21 Total Rows: 105 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682324731 + Total Temp space used: 0 + Access Path: index (AllEqJoinGuess) + Index: ORD_SALES_REP_IX + resc_io: 1.00 resc_cpu: 10371 + ix_sel: 0.166667 ix_sel_with_filters: 0.166667 + NL Join : Cost: 6.00 Resp: 6.00 Degree: 1 + Cost_io: 5.00 Cost_cpu: 365682343715 + Resp_io: 5.00 Resp_cpu: 365682343715 + Bitmap nodes: + Used ORD_SALES_REP_IX + Cost = 6.000000, sel = 0.111111 + Not used ORD_CUSTOMER_IX + Cost = 7.000235, sel = 1.000000 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 7.00 + resc: 7.00 resc_io: 6.00 resc_cpu: 365682352741 + resp: 7.00 resp_io: 6.00 resc_cpu: 365682352741 +Join Card: 3.852544 = = outer (0.495327) * inner (70.000000) * sel (0.111111) +Join Card - Rounded: 4 Computed: 3.85 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 52 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 23 Total Rows: 70 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682312299 + Total Temp space used: 0 + SM join: Resc: 10.00 Resp: 10.00 [multiMatchCost=0.00] +SM Join + SM cost: 10.00 + resc: 10.00 resc_io: 7.00 resc_cpu: 1097046996608 + resp: 10.00 resp_io: 7.00 resp_cpu: 1097046996608 + Outer table: EMPLOYEES Alias: E + resc: 5.00 card 0.50 bytes: 38 deg: 1 resp: 5.00 + Inner table: ORDERS Alias: O + resc: 3.00 card: 70.00 bytes: 11 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 8.50 Resp: 8.50 [multiMatchCost=0.00] +HA Join + HA cost: 8.50 + resc: 8.50 resc_io: 7.00 resc_cpu: 548523544975 + resp: 8.50 resp_io: 7.00 resp_cpu: 548523544975 +Best:: JoinMethod: NestedLoop + Cost: 7.00 Degree: 1 Resp: 7.00 Card: 3.85 Bytes: 49 + +*************** +Now joining: CUSTOMERS[C]#0 +*************** +NL Join + Outer table: Card: 3.85 Cost: 7.00 Resp: 7.00 Degree: 1 Bytes: 49 +Access path analysis for CUSTOMERS + Inner table: CUSTOMERS Alias: C + Access Path: TableScan + NL Join: Cost: 34.00 Resp: 34.00 Degree: 1 + Cost_io: 33.00 Cost_cpu: 365683029669 + Resp_io: 33.00 Resp_cpu: 365683029669 + Access Path: index (UniqueScan) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 1.00 resc_cpu: 8412 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 11.00 Resp: 11.00 Degree: 1 + Cost_io: 10.00 Cost_cpu: 365682386388 + Resp_io: 10.00 Resp_cpu: 365682386388 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 2.00 resc_cpu: 15964 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 15.00 Resp: 15.00 Degree: 1 + Cost_io: 14.00 Cost_cpu: 365682416595 + Resp_io: 14.00 Resp_cpu: 365682416595 + ****** trying bitmap/domain indexes ****** + Access Path: index (AllEqUnique) + Index: CUSTOMERS_PK + resc_io: 0.00 resc_cpu: 1050 + ix_sel: 0.003135 ix_sel_with_filters: 0.003135 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682356941 + Resp_io: 6.00 Resp_cpu: 365682356941 + Access Path: index (AllEqJoin) + Index: CUST_LNAME_IX + resc_io: 0.00 resc_cpu: 1250 + ix_sel: 0.005682 ix_sel_with_filters: 0.005682 + NL Join : Cost: 7.00 Resp: 7.00 Degree: 1 + Cost_io: 6.00 Cost_cpu: 365682357741 + Resp_io: 6.00 Resp_cpu: 365682357741 + Bitmap nodes: + Used CUST_LNAME_IX + Cost = 7.000000, sel = 0.005682 + Not used CUSTOMERS_PK + Cost = 7.000000, sel = 0.023256 + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 11.00 + resc: 11.00 resc_io: 10.00 resc_cpu: 365682386388 + resp: 11.00 resp_io: 10.00 resc_cpu: 365682386388 +Join Card: 0.000950 = = outer (3.852544) * inner (0.010599) * sel (0.023256) +Join Card - Rounded: 1 Computed: 0.00 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 64 Total Rows: 4 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682293328 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 31 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SM join: Resc: 12.00 Resp: 12.00 [multiMatchCost=0.00] +SM Join + SM cost: 12.00 + resc: 12.00 resc_io: 9.00 resc_cpu: 1097046961272 + resp: 12.00 resp_io: 9.00 resp_cpu: 1097046961272 + Outer table: ORDERS Alias: O + resc: 7.00 card 3.85 bytes: 49 deg: 1 resp: 7.00 + Inner table: CUSTOMERS Alias: C + resc: 3.00 card: 0.01 bytes: 19 deg: 1 resp: 3.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 1 ppasses: 1 + Hash join: Resc: 10.50 Resp: 10.50 [multiMatchCost=0.00] +HA Join + HA cost: 10.50 + resc: 10.50 resc_io: 9.00 resc_cpu: 548523522160 + resp: 10.50 resp_io: 9.00 resp_cpu: 548523522160 +Best:: JoinMethod: Hash + Cost: 10.50 Degree: 1 Resp: 10.50 Card: 0.00 Bytes: 68 + +*************** +Now joining: ORDER_ITEMS[OI]#4 +*************** +NL Join + Outer table: Card: 0.00 Cost: 10.50 Resp: 10.50 Degree: 1 Bytes: 68 +Access path analysis for ORDER_ITEMS + Inner table: ORDER_ITEMS Alias: OI + Access Path: TableScan + NL Join: Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523710717 + Resp_io: 13.00 Resp_cpu: 548523710717 + Access Path: index (AllEqJoinGuess) + Index: ITEM_ORDER_IX + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_PK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + + + Access Path: index (RangeScan) + Index: ORDER_ITEMS_UK + resc_io: 3.00 resc_cpu: 25224 + ix_sel: 0.009524 ix_sel_with_filters: 0.009524 + NL Join : Cost: 13.50 Resp: 13.50 Degree: 1 + Cost_io: 12.00 Cost_cpu: 548523547384 + Resp_io: 12.00 Resp_cpu: 548523547384 + ****** trying bitmap/domain indexes ****** + ****** finished trying bitmap/domain indexes ****** + + Best NL cost: 13.50 + resc: 13.50 resc_io: 12.00 resc_cpu: 548523547384 + resp: 13.50 resp_io: 12.00 resc_cpu: 548523547384 +Join Card: 0.006014 = = outer (0.000950) * inner (665.000000) * sel (0.009524) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 85 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 3 Row size: 28 Total Rows: 665 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682573921 + Total Temp space used: 0 + SM join: Resc: 16.50 Resp: 16.50 [multiMatchCost=0.00] +SM Join + SM cost: 16.50 + resc: 16.50 resc_io: 13.00 resc_cpu: 1279888577607 + resp: 16.50 resp_io: 13.00 resp_cpu: 1279888577607 + Outer table: CUSTOMERS Alias: C + resc: 10.50 card 0.00 bytes: 68 deg: 1 resp: 10.50 + Inner table: ORDER_ITEMS Alias: OI + resc: 4.00 card: 665.00 bytes: 16 deg: 1 resp: 4.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 3 ppasses: 1 + Hash join: Resc: 15.00 Resp: 15.00 [multiMatchCost=0.00] +HA Join + HA cost: 15.00 + resc: 15.00 resc_io: 13.00 resc_cpu: 731364923851 + resp: 15.00 resp_io: 13.00 resp_cpu: 731364923851 +Best:: JoinMethod: NestedLoop + Cost: 13.50 Degree: 1 Resp: 13.50 Card: 0.01 Bytes: 84 + +*************** +Now joining: PRODUCT_INFORMATION[I]#5 +*************** +NL Join + Outer table: Card: 0.01 Cost: 13.50 Resp: 13.50 Degree: 1 Bytes: 84 +Access path analysis for PRODUCT_INFORMATION + Inner table: PRODUCT_INFORMATION Alias: I + Access Path: TableScan + NL Join: Cost: 21.50 Resp: 21.50 Degree: 1 + Cost_io: 20.00 Cost_cpu: 548523688923 + Resp_io: 20.00 Resp_cpu: 548523688923 + Access Path: index (UniqueScan) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + Access Path: index (AllEqUnique) + Index: PRODUCT_INFORMATION_PK + resc_io: 1.00 resc_cpu: 8341 + ix_sel: 0.003472 ix_sel_with_filters: 0.003472 + NL Join : Cost: 14.50 Resp: 14.50 Degree: 1 + Cost_io: 13.00 Cost_cpu: 548523555726 + Resp_io: 13.00 Resp_cpu: 548523555726 + + Best NL cost: 14.50 + resc: 14.50 resc_io: 13.00 resc_cpu: 548523555726 + resp: 14.50 resp_io: 13.00 resc_cpu: 548523555726 +Join Card: 0.006014 = = outer (0.006014) * inner (288.000000) * sel (0.003472) +Join Card - Rounded: 1 Computed: 0.01 +Grouping column cardinality [DEPARTMENT] 1 +Grouping column cardinality [FIRST_NAME] 1 +Grouping column cardinality [ LAST_NAME] 1 +Grouping column cardinality [LANGUAGE_I] 1 +Grouping column cardinality [TRANSLATED] 282 +Grouping column cardinality [PRODUCT_NA] 287 +Grouping column cardinality [CUST_FIRST] 1 +Grouping column cardinality [CUST_LAST_] 1 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 103 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 2 Row size: 32 Total Rows: 288 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682398979 + Total Temp space used: 0 + SM join: Resc: 23.50 Resp: 23.50 [multiMatchCost=0.00] +SM Join + SM cost: 23.50 + resc: 23.50 resc_io: 20.00 resc_cpu: 1279888380870 + resp: 23.50 resp_io: 20.00 resp_cpu: 1279888380870 + Outer table: ORDER_ITEMS Alias: OI + resc: 13.50 card 0.01 bytes: 84 deg: 1 resp: 13.50 + Inner table: PRODUCT_INFORMATION Alias: I + resc: 8.00 card: 288.00 bytes: 20 deg: 1 resp: 8.00 + using dmeth: 2 #groups: 1 + Cost per ptn: 0.50 #ptns: 1 + hash_area: 124 (max=14336) buildfrag: 1 probefrag: 2 ppasses: 1 + Hash join: Resc: 22.00 Resp: 22.00 [multiMatchCost=0.00] +HA Join + HA cost: 22.00 + resc: 22.00 resc_io: 20.00 resc_cpu: 731364864357 + resp: 22.00 resp_io: 20.00 resp_cpu: 731364864357 +Join order aborted: cost > best plan cost +*********************** + +********************************* +Number of join permutations tried: 18 +********************************* +Consider using bloom filter between C[CUSTOMERS] and O[ORDERS] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between O[ORDERS] and E[EMPLOYEES] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between E[EMPLOYEES] and D[DEPARTMENTS] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between D[DEPARTMENTS] and OI[ORDER_ITEMS] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between OI[ORDER_ITEMS] and I[PRODUCT_INFORMATION] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join +Consider using bloom filter between I[PRODUCT_INFORMATION] and D[PRODUCT_DESCRIPTIONS] +kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000) rejected because not a hash join + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.001441 +GROUP BY cardinality: 1.000000, TABLE cardinality: 1.000000 + SORT ressource Sort statistics + Sort width: 334 Area size: 292864 Max Area size: 58720256 + Degree: 1 + Blocks to Sort: 1 Row size: 169 Total Rows: 1 + Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 + Total IO sort cost: 0 Total CPU sort cost: 365682292968 + Total Temp space used: 0 +Trying or-Expansion on query block SEL$4B12EFE6 (#1) +Transfer Optimizer annotations for query block SEL$4B12EFE6 (#1) +id=0 frofkks[i] (index start key) predicate="C"."CUST_LAST_NAME"='Harris' +id=0 frofkke[i] (index stop key) predicate="C"."CUST_LAST_NAME"='Harris' +id=0 frofand predicate="C"."CUST_FIRST_NAME"='Gena' +id=0 frofkks[i] (index start key) predicate="O"."CUSTOMER_ID"="C"."CUSTOMER_ID" +id=0 frofkke[i] (index stop key) predicate="O"."CUSTOMER_ID"="C"."CUSTOMER_ID" +id=0 froiand (index only filter) predicate="O"."CUSTOMER_ID">0 +id=0 frofand predicate="O"."SALES_REP_ID" IS NOT NULL +id=0 frofkks[i] (index start key) predicate="E"."LAST_NAME"='Smith' +id=0 frofkks[i] (index start key) predicate="E"."FIRST_NAME"='William' +id=0 frofkke[i] (index stop key) predicate="E"."LAST_NAME"='Smith' +id=0 frofkke[i] (index stop key) predicate="E"."FIRST_NAME"='William' +id=0 frofand predicate="O"."SALES_REP_ID"="E"."EMPLOYEE_ID" +id=0 frofkks[i] (index start key) predicate="D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" +id=0 frofkke[i] (index stop key) predicate="D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID" +id=0 frofand predicate="D"."DEPARTMENT_NAME"='Sales' +id=0 frofkks[i] (index start key) predicate="O"."ORDER_ID"="OI"."ORDER_ID" +id=0 frofkke[i] (index stop key) predicate="O"."ORDER_ID"="OI"."ORDER_ID" +id=0 frofkks[i] (index start key) predicate="OI"."PRODUCT_ID"="I"."PRODUCT_ID" +id=0 frofkke[i] (index stop key) predicate="OI"."PRODUCT_ID"="I"."PRODUCT_ID" +id=0 frofkks[i] (index start key) predicate="D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" +id=0 frofkks[i] (index start key) predicate="D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') +id=0 frofkke[i] (index stop key) predicate="D"."PRODUCT_ID"(+)="I"."PRODUCT_ID" +id=0 frofkke[i] (index stop key) predicate="D"."LANGUAGE_ID"(+)=SYS_CONTEXT('USERENV','LANG') +id=0 froutand predicate=CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END =U'Mobile Web Phone' + ColGroup Usage:: PredCnt: 2 Matches Full: #1 Partial: Sel: 0.0093 + ColGroup Usage:: PredCnt: 2 Matches Full: Partial: +GROUP BY adjustment factor: 0.011528 +Final cost for query block SEL$4B12EFE6 (#1) - All Rows Plan: + Best join order: 16 + Cost: 14.0000 Degree: 1 Card: 1.0000 Bytes: 144 + Resc: 14.0000 Resc_io: 12.0000 Resc_cpu: 731364684509 + Resp: 14.0000 Resp_io: 12.0000 Resc_cpu: 731364684509 +kkoqbc-end: + : + +kkoqbc: finish optimizing query block SEL$4B12EFE6 (#1) +apadrv-end + : + + +Starting SQL statement dump + +user_id=101 user_name=AST module=SQL*Plus action= +sql_id=3qy33cc7bz0y2 plan_hash_value=738251008 problem_type=3 +----- Current SQL Statement for this session (sql_id=3qy33cc7bz0y2) ----- +SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + oe.orders o + , oe.order_items oi + , oe.products prod + , oe.customers c + , oe.promotions prom + , hr.employees e + , hr.departments d +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND d.department_id = e.department_id + -- filters +AND d.department_name = 'Sales' +AND e.first_name = 'William' +AND e.last_name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' +AND c.cust_first_name = 'Gena' +AND c.cust_last_name = 'Harris' +GROUP BY + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + ORDER BY + total_price +sql_text_length=1059 +sql=SELECT /*+ opt_param('_optimizer_use_feedback', 'false') */ + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_last_name + , SUM(oi.quantity) + , sum(oi.unit_price * oi.quantity) total_price +FROM + +sql= oe.orders o + , oe.order_items oi + , oe.products prod + , oe.customers c + , oe.promotions prom + , hr.employees e + , hr.departments d +WHERE + -- joins + o.order_id = oi.order_id +AND oi.product_id = prod.product_id +AND o +sql=.promotion_id = prom.promo_id (+) +AND o.customer_id = c.customer_id +AND o.sales_rep_id = e.employee_id +AND d.department_id = e.department_id + -- filters +AND d.department_name = 'Sales' +AND e.first_name = 'William' +AND e.last_ +sql=name = 'Smith' +AND prod.product_name = 'Mobile Web Phone' +AND c.cust_first_name = 'Gena' +AND c.cust_last_name = 'Harris' +GROUP BY + d.department_name + , e.first_name + , e.last_name + , prod.product_name + , c.cust_first_name + , c.cust_l +sql=ast_name + ORDER BY + total_price +----- Explain Plan Dump ----- +----- Plan Table ----- + +============ +Plan Table +============ +----------------------------------------------------------------------+-----------------------------------+ +| Id | Operation | Name | Rows | Bytes | Cost | Time | +----------------------------------------------------------------------+-----------------------------------+ +| 0 | SELECT STATEMENT | | | | 14 | | +| 1 | SORT ORDER BY | | 1 | 144 | 14 | 01:05:42 | +| 2 | HASH GROUP BY | | 1 | 144 | 14 | 01:05:42 | +| 3 | FILTER | | | | | | +| 4 | NESTED LOOPS OUTER | | 1 | 144 | 12 | 00:55:27 | +| 5 | NESTED LOOPS | | 1 | 104 | 11 | 00:51:50 | +| 6 | NESTED LOOPS | | 1 | 84 | 10 | 00:46:13 | +| 7 | NESTED LOOPS | | 1 | 68 | 7 | 00:32:21 | +| 8 | NESTED LOOPS | | 1 | 52 | 6 | 00:28:44 | +| 9 | NESTED LOOPS | | 1 | 30 | 5 | 00:23:07 | +| 10 | TABLE ACCESS BY INDEX ROWID | CUSTOMERS | 1 | 19 | 3 | 00:14:52 | +| 11 | INDEX RANGE SCAN | CUST_LNAME_IX | 2 | | 1 | 00:05:38 | +| 12 | TABLE ACCESS BY INDEX ROWID | ORDERS | 2 | 22 | 2 | 00:09:15 | +| 13 | INDEX RANGE SCAN | ORD_CUSTOMER_IX | 2 | | 1 | 00:05:38 | +| 14 | TABLE ACCESS BY INDEX ROWID | EMPLOYEES | 1 | 22 | 1 | 00:05:38 | +| 15 | INDEX RANGE SCAN | EMP_NAME_IX | 1 | | 0 | | +| 16 | TABLE ACCESS BY INDEX ROWID | DEPARTMENTS | 1 | 16 | 1 | 00:05:38 | +| 17 | INDEX UNIQUE SCAN | DEPT_ID_PK | 1 | | 0 | | +| 18 | TABLE ACCESS BY INDEX ROWID | ORDER_ITEMS | 6 | 96 | 3 | 00:14:52 | +| 19 | INDEX RANGE SCAN | ITEM_ORDER_IX | 6 | | 1 | 00:05:38 | +| 20 | TABLE ACCESS BY INDEX ROWID | PRODUCT_INFORMATION | 1 | 20 | 1 | 00:05:38 | +| 21 | INDEX UNIQUE SCAN | PRODUCT_INFORMATION_PK| 1 | | 0 | | +| 22 | TABLE ACCESS BY INDEX ROWID | PRODUCT_DESCRIPTIONS | 1 | 40 | 1 | 00:05:38 | +| 23 | INDEX UNIQUE SCAN | PRD_DESC_PK | 1 | | 0 | | +----------------------------------------------------------------------+-----------------------------------+ +Predicate Information: +---------------------- +3 - filter(CASE WHEN "D"."LANGUAGE_ID" IS NOT NULL THEN "D"."TRANSLATED_NAME" ELSE CSCONVERT("I"."PRODUCT_NAME",'NCHAR_CS') END =U'Mobile Web Phone') +10 - filter("C"."CUST_FIRST_NAME"='Gena') +11 - access("C"."CUST_LAST_NAME"='Harris') +12 - filter("O"."SALES_REP_ID" IS NOT NULL) +13 - access("O"."CUSTOMER_ID"="C"."CUSTOMER_ID") +13 - filter("O"."CUSTOMER_ID">0) +14 - filter("O"."SALES_REP_ID"="E"."EMPLOYEE_ID") +15 - access("E"."LAST_NAME"='Smith' AND "E"."FIRST_NAME"='William') +16 - filter("D"."DEPARTMENT_NAME"='Sales') +17 - access("D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID") +19 - access("O"."ORDER_ID"="OI"."ORDER_ID") +21 - access("OI"."PRODUCT_ID"="I"."PRODUCT_ID") +23 - access("D"."PRODUCT_ID"="I"."PRODUCT_ID" AND "D"."LANGUAGE_ID"=SYS_CONTEXT('USERENV','LANG')) + +Content of other_xml column +=========================== + db_version : 11.2.0.1 + parse_schema : AST + plan_hash : 738251008 + plan_hash_2 : 419624811 + Outline Data: + /*+ + BEGIN_OUTLINE_DATA + IGNORE_OPTIM_EMBEDDED_HINTS + OPTIMIZER_FEATURES_ENABLE('11.2.0.1') + DB_VERSION('11.2.0.1') + OPT_PARAM('_optimizer_use_feedback' 'false') + ALL_ROWS + OUTLINE_LEAF(@"SEL$4B12EFE6") + MERGE(@"SEL$2") + OUTLINE(@"SEL$31BE1502") + ELIMINATE_JOIN(@"SEL$1" "PROM"@"SEL$1") + OUTLINE(@"SEL$2") + OUTLINE(@"SEL$1") + INDEX_RS_ASC(@"SEL$4B12EFE6" "C"@"SEL$1" ("CUSTOMERS"."CUST_LAST_NAME")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "O"@"SEL$1" ("ORDERS"."CUSTOMER_ID")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "E"@"SEL$1" ("EMPLOYEES"."LAST_NAME" "EMPLOYEES"."FIRST_NAME")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "D"@"SEL$1" ("DEPARTMENTS"."DEPARTMENT_ID")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "OI"@"SEL$1" ("ORDER_ITEMS"."ORDER_ID")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "I"@"SEL$2" ("PRODUCT_INFORMATION"."PRODUCT_ID")) + INDEX_RS_ASC(@"SEL$4B12EFE6" "D"@"SEL$2" ("PRODUCT_DESCRIPTIONS"."PRODUCT_ID" "PRODUCT_DESCRIPTIONS"."LANGUAGE_ID")) + LEADING(@"SEL$4B12EFE6" "C"@"SEL$1" "O"@"SEL$1" "E"@"SEL$1" "D"@"SEL$1" "OI"@"SEL$1" "I"@"SEL$2" "D"@"SEL$2") + USE_NL(@"SEL$4B12EFE6" "O"@"SEL$1") + USE_NL(@"SEL$4B12EFE6" "E"@"SEL$1") + USE_NL(@"SEL$4B12EFE6" "D"@"SEL$1") + USE_NL(@"SEL$4B12EFE6" "OI"@"SEL$1") + USE_NL(@"SEL$4B12EFE6" "I"@"SEL$2") + USE_NL(@"SEL$4B12EFE6" "D"@"SEL$2") + USE_HASH_AGGREGATION(@"SEL$4B12EFE6") + END_OUTLINE_DATA + */ + +Optimizer state dump: +Compilation Environment Dump +optimizer_mode_hinted = false +optimizer_features_hinted = 0.0.0 +parallel_execution_enabled = true +parallel_query_forced_dop = 0 +parallel_dml_forced_dop = 0 +parallel_ddl_forced_degree = 0 +parallel_ddl_forced_instances = 0 +_query_rewrite_fudge = 90 +optimizer_features_enable = 11.2.0.1 +_optimizer_search_limit = 5 +cpu_count = 2 +active_instance_count = 1 +parallel_threads_per_cpu = 2 +hash_area_size = 131072 +bitmap_merge_area_size = 1048576 +sort_area_size = 65536 +sort_area_retained_size = 0 +_sort_elimination_cost_ratio = 0 +_optimizer_block_size = 8192 +_sort_multiblock_read_count = 2 +_hash_multiblock_io_count = 0 +_db_file_optimizer_read_count = 8 +_optimizer_max_permutations = 2000 +pga_aggregate_target = 286720 KB +_pga_max_size = 204800 KB +_query_rewrite_maxdisjunct = 257 +_smm_auto_min_io_size = 56 KB +_smm_auto_max_io_size = 248 KB +_smm_min_size = 286 KB +_smm_max_size = 57344 KB +_smm_px_max_size = 143360 KB +_cpu_to_io = 0 +_optimizer_undo_cost_change = 11.2.0.1 +parallel_query_mode = enabled +parallel_dml_mode = disabled +parallel_ddl_mode = enabled +optimizer_mode = all_rows +sqlstat_enabled = false +_optimizer_percent_parallel = 101 +_always_anti_join = choose +_always_semi_join = choose +_optimizer_mode_force = true +_partition_view_enabled = true +_always_star_transformation = false +_query_rewrite_or_error = false +_hash_join_enabled = true +cursor_sharing = exact +_b_tree_bitmap_plans = true +star_transformation_enabled = false +_optimizer_cost_model = choose +_new_sort_cost_estimate = true +_complex_view_merging = true +_unnest_subquery = true +_eliminate_common_subexpr = true +_pred_move_around = true +_convert_set_to_join = false +_push_join_predicate = true +_push_join_union_view = true +_fast_full_scan_enabled = true +_optim_enhance_nnull_detection = true +_parallel_broadcast_enabled = true +_px_broadcast_fudge_factor = 100 +_ordered_nested_loop = true +_no_or_expansion = false +optimizer_index_cost_adj = 100 +optimizer_index_caching = 0 +_system_index_caching = 0 +_disable_datalayer_sampling = false +query_rewrite_enabled = true +query_rewrite_integrity = enforced +_query_cost_rewrite = true +_query_rewrite_2 = true +_query_rewrite_1 = true +_query_rewrite_expression = true +_query_rewrite_jgmigrate = true +_query_rewrite_fpc = true +_query_rewrite_drj = true +_full_pwise_join_enabled = true +_partial_pwise_join_enabled = true +_left_nested_loops_random = true +_improved_row_length_enabled = true +_index_join_enabled = true +_enable_type_dep_selectivity = true +_improved_outerjoin_card = true +_optimizer_adjust_for_nulls = true +_optimizer_degree = 0 +_use_column_stats_for_function = true +_subquery_pruning_enabled = true +_subquery_pruning_mv_enabled = false +_or_expand_nvl_predicate = true +_like_with_bind_as_equality = false +_table_scan_cost_plus_one = true +_cost_equality_semi_join = true +_default_non_equality_sel_check = true +_new_initial_join_orders = true +_oneside_colstat_for_equijoins = true +_optim_peek_user_binds = true +_minimal_stats_aggregation = true +_force_temptables_for_gsets = false +workarea_size_policy = auto +_smm_auto_cost_enabled = true +_gs_anti_semi_join_allowed = true +_optim_new_default_join_sel = true +optimizer_dynamic_sampling = 2 +_pre_rewrite_push_pred = true +_optimizer_new_join_card_computation = true +_union_rewrite_for_gs = yes_gset_mvs +_generalized_pruning_enabled = true +_optim_adjust_for_part_skews = true +_force_datefold_trunc = false +statistics_level = typical +_optimizer_system_stats_usage = true +skip_unusable_indexes = true +_remove_aggr_subquery = true +_optimizer_push_down_distinct = 0 +_dml_monitoring_enabled = true +_optimizer_undo_changes = false +_predicate_elimination_enabled = true +_nested_loop_fudge = 100 +_project_view_columns = true +_local_communication_costing_enabled = true +_local_communication_ratio = 50 +_query_rewrite_vop_cleanup = true +_slave_mapping_enabled = true +_optimizer_cost_based_transformation = linear +_optimizer_mjc_enabled = true +_right_outer_hash_enable = true +_spr_push_pred_refspr = true +_optimizer_cache_stats = false +_optimizer_cbqt_factor = 50 +_optimizer_squ_bottomup = true +_fic_area_size = 131072 +_optimizer_skip_scan_enabled = true +_optimizer_cost_filter_pred = false +_optimizer_sortmerge_join_enabled = true +_optimizer_join_sel_sanity_check = true +_mmv_query_rewrite_enabled = true +_bt_mmv_query_rewrite_enabled = true +_add_stale_mv_to_dependency_list = true +_distinct_view_unnesting = false +_optimizer_dim_subq_join_sel = true +_optimizer_disable_strans_sanity_checks = 0 +_optimizer_compute_index_stats = true +_push_join_union_view2 = true +_optimizer_ignore_hints = false +_optimizer_random_plan = 0 +_query_rewrite_setopgrw_enable = true +_optimizer_correct_sq_selectivity = true +_disable_function_based_index = false +_optimizer_join_order_control = 3 +_optimizer_cartesian_enabled = true +_optimizer_starplan_enabled = true +_extended_pruning_enabled = true +_optimizer_push_pred_cost_based = true +_optimizer_null_aware_antijoin = true +_optimizer_extend_jppd_view_types = true +_sql_model_unfold_forloops = run_time +_enable_dml_lock_escalation = false +_bloom_filter_enabled = true +_update_bji_ipdml_enabled = 0 +_optimizer_extended_cursor_sharing = udo +_dm_max_shared_pool_pct = 1 +_optimizer_cost_hjsmj_multimatch = true +_optimizer_transitivity_retain = true +_px_pwg_enabled = true +optimizer_secure_view_merging = true +_optimizer_join_elimination_enabled = true +flashback_table_rpi = non_fbt +_optimizer_cbqt_no_size_restriction = true +_optimizer_enhanced_filter_push = true +_optimizer_filter_pred_pullup = true +_rowsrc_trace_level = 0 +_simple_view_merging = true +_optimizer_rownum_pred_based_fkr = true +_optimizer_better_inlist_costing = all +_optimizer_self_induced_cache_cost = false +_optimizer_min_cache_blocks = 10 +_optimizer_or_expansion = depth +_optimizer_order_by_elimination_enabled = true +_optimizer_outer_to_anti_enabled = true +_selfjoin_mv_duplicates = true +_dimension_skip_null = true +_force_rewrite_enable = false +_optimizer_star_tran_in_with_clause = true +_optimizer_complex_pred_selectivity = true +_optimizer_connect_by_cost_based = true +_gby_hash_aggregation_enabled = true +_globalindex_pnum_filter_enabled = true +_px_minus_intersect = true +_fix_control_key = 0 +_force_slave_mapping_intra_part_loads = false +_force_tmp_segment_loads = false +_query_mmvrewrite_maxpreds = 10 +_query_mmvrewrite_maxintervals = 5 +_query_mmvrewrite_maxinlists = 5 +_query_mmvrewrite_maxdmaps = 10 +_query_mmvrewrite_maxcmaps = 20 +_query_mmvrewrite_maxregperm = 512 +_query_mmvrewrite_maxmergedcmaps = 50 +_query_mmvrewrite_maxqryinlistvals = 500 +_disable_parallel_conventional_load = false +_trace_virtual_columns = false +_replace_virtual_columns = true +_virtual_column_overload_allowed = true +_kdt_buffering = true +_first_k_rows_dynamic_proration = true +_optimizer_sortmerge_join_inequality = true +_optimizer_aw_stats_enabled = true +_bloom_pruning_enabled = true +result_cache_mode = MANUAL +_px_ual_serial_input = true +_optimizer_skip_scan_guess = false +_enable_row_shipping = true +_row_shipping_threshold = 80 +_row_shipping_explain = false +transaction_isolation_level = read_commited +_optimizer_distinct_elimination = true +_optimizer_multi_level_push_pred = true +_optimizer_group_by_placement = true +_optimizer_rownum_bind_default = 10 +_enable_query_rewrite_on_remote_objs = true +_optimizer_extended_cursor_sharing_rel = simple +_optimizer_adaptive_cursor_sharing = true +_direct_path_insert_features = 0 +_optimizer_improve_selectivity = true +optimizer_use_pending_statistics = false +_optimizer_enable_density_improvements = true +_optimizer_aw_join_push_enabled = true +_optimizer_connect_by_combine_sw = true +_enable_pmo_ctas = 0 +_optimizer_native_full_outer_join = force +_bloom_predicate_enabled = true +_optimizer_enable_extended_stats = true +_is_lock_table_for_ddl_wait_lock = 0 +_pivot_implementation_method = choose +optimizer_capture_sql_plan_baselines = false +optimizer_use_sql_plan_baselines = true +_optimizer_star_trans_min_cost = 0 +_optimizer_star_trans_min_ratio = 0 +_with_subquery = OPTIMIZER +_optimizer_fkr_index_cost_bias = 10 +_optimizer_use_subheap = true +parallel_degree_policy = manual +parallel_degree = 0 +parallel_min_time_threshold = 10 +_parallel_time_unit = 10 +_optimizer_or_expansion_subheap = true +_optimizer_free_transformation_heap = true +_optimizer_reuse_cost_annotations = true +_result_cache_auto_size_threshold = 100 +_result_cache_auto_time_threshold = 1000 +_optimizer_nested_rollup_for_gset = 100 +_nlj_batching_enabled = 1 +parallel_query_default_dop = 0 +is_recur_flags = 0 +optimizer_use_invisible_indexes = false +flashback_data_archive_internal_cursor = 0 +_optimizer_extended_stats_usage_control = 224 +_parallel_syspls_obey_force = true +cell_offload_processing = true +_rdbms_internal_fplib_enabled = false +db_file_multiblock_read_count = 126 +_bloom_folding_enabled = true +_mv_generalized_oj_refresh_opt = true +cell_offload_compaction = ADAPTIVE +parallel_degree_limit = 65535 +parallel_force_local = false +parallel_max_degree = 4 +total_cpu_count = 2 +cell_offload_plan_display = AUTO +_optimizer_coalesce_subqueries = true +_optimizer_fast_pred_transitivity = true +_optimizer_fast_access_pred_analysis = true +_optimizer_unnest_disjunctive_subq = true +_optimizer_unnest_corr_set_subq = true +_optimizer_distinct_agg_transform = true +_aggregation_optimization_settings = 0 +_optimizer_connect_by_elim_dups = true +_optimizer_eliminate_filtering_join = true +_connect_by_use_union_all = true +dst_upgrade_insert_conv = true +advanced_queuing_internal_cursor = 0 +_optimizer_unnest_all_subqueries = true +_bloom_predicate_pushdown_to_storage = true +_bloom_vector_elements = 0 +_bloom_pushing_max = 524288 +parallel_autodop = 0 +parallel_ddldml = 0 +_parallel_cluster_cache_policy = adaptive +_parallel_scalability = 50 +iot_internal_cursor = 0 +_optimizer_instance_count = 0 +_optimizer_connect_by_cb_whr_only = false +_suppress_scn_chk_for_cqn = nosuppress_1466 +_optimizer_join_factorization = true +_optimizer_use_cbqt_star_transformation = true +_optimizer_table_expansion = true +_and_pruning_enabled = true +_deferred_constant_folding_mode = DEFAULT +_optimizer_distinct_placement = true +partition_pruning_internal_cursor = 0 +parallel_hinted = none +_sql_compatibility = 0 +_optimizer_use_feedback = true +_optimizer_try_st_before_jppd = true +Bug Fix Control Environment + fix 3834770 = 1 + fix 3746511 = enabled + fix 4519016 = enabled + fix 3118776 = enabled + fix 4488689 = enabled + fix 2194204 = disabled + fix 2660592 = enabled + fix 2320291 = enabled + fix 2324795 = enabled + fix 4308414 = enabled + fix 3499674 = disabled + fix 4569940 = enabled + fix 4631959 = enabled + fix 4519340 = enabled + fix 4550003 = enabled + fix 1403283 = enabled + fix 4554846 = enabled + fix 4602374 = enabled + fix 4584065 = enabled + fix 4545833 = enabled + fix 4611850 = enabled + fix 4663698 = enabled + fix 4663804 = enabled + fix 4666174 = enabled + fix 4567767 = enabled + fix 4556762 = 15 + fix 4728348 = enabled + fix 4708389 = enabled + fix 4175830 = enabled + fix 4752814 = enabled + fix 4583239 = enabled + fix 4386734 = enabled + fix 4887636 = enabled + fix 4483240 = enabled + fix 4872602 = disabled + fix 4711525 = enabled + fix 4545802 = enabled + fix 4605810 = enabled + fix 4704779 = enabled + fix 4900129 = enabled + fix 4924149 = enabled + fix 4663702 = enabled + fix 4878299 = enabled + fix 4658342 = enabled + fix 4881533 = enabled + fix 4676955 = enabled + fix 4273361 = enabled + fix 4967068 = enabled + fix 4969880 = disabled + fix 5005866 = enabled + fix 5015557 = enabled + fix 4705343 = enabled + fix 4904838 = enabled + fix 4716096 = enabled + fix 4483286 = disabled + fix 4722900 = enabled + fix 4615392 = enabled + fix 5096560 = enabled + fix 5029464 = enabled + fix 4134994 = enabled + fix 4904890 = enabled + fix 5104624 = enabled + fix 5014836 = enabled + fix 4768040 = enabled + fix 4600710 = enabled + fix 5129233 = enabled + fix 4595987 = enabled + fix 4908162 = enabled + fix 5139520 = enabled + fix 5084239 = enabled + fix 5143477 = disabled + fix 2663857 = enabled + fix 4717546 = enabled + fix 5240264 = disabled + fix 5099909 = enabled + fix 5240607 = enabled + fix 5195882 = enabled + fix 5220356 = enabled + fix 5263572 = enabled + fix 5385629 = enabled + fix 5302124 = enabled + fix 5391942 = enabled + fix 5384335 = enabled + fix 5482831 = enabled + fix 4158812 = enabled + fix 5387148 = enabled + fix 5383891 = enabled + fix 5466973 = enabled + fix 5396162 = enabled + fix 5394888 = enabled + fix 5395291 = enabled + fix 5236908 = enabled + fix 5509293 = enabled + fix 5449488 = enabled + fix 5567933 = enabled + fix 5570494 = enabled + fix 5288623 = enabled + fix 5505995 = enabled + fix 5505157 = enabled + fix 5112460 = enabled + fix 5554865 = enabled + fix 5112260 = enabled + fix 5112352 = enabled + fix 5547058 = enabled + fix 5618040 = enabled + fix 5585313 = enabled + fix 5547895 = enabled + fix 5634346 = enabled + fix 5620485 = enabled + fix 5483301 = enabled + fix 5657044 = enabled + fix 5694984 = enabled + fix 5868490 = enabled + fix 5650477 = enabled + fix 5611962 = enabled + fix 4279274 = enabled + fix 5741121 = enabled + fix 5714944 = enabled + fix 5391505 = enabled + fix 5762598 = enabled + fix 5578791 = enabled + fix 5259048 = enabled + fix 5882954 = enabled + fix 2492766 = enabled + fix 5707608 = enabled + fix 5891471 = enabled + fix 5884780 = enabled + fix 5680702 = enabled + fix 5371452 = enabled + fix 5838613 = enabled + fix 5949981 = enabled + fix 5624216 = enabled + fix 5741044 = enabled + fix 5976822 = enabled + fix 6006457 = enabled + fix 5872956 = enabled + fix 5923644 = enabled + fix 5943234 = enabled + fix 5844495 = enabled + fix 4168080 = enabled + fix 6020579 = enabled + fix 5842686 = disabled + fix 5996801 = enabled + fix 5593639 = enabled + fix 6133948 = enabled + fix 3151991 = enabled + fix 6146906 = enabled + fix 6239909 = enabled + fix 6267621 = enabled + fix 5909305 = enabled + fix 6279918 = enabled + fix 6141818 = enabled + fix 6151963 = enabled + fix 6251917 = enabled + fix 6282093 = enabled + fix 6119510 = enabled + fix 6119382 = enabled + fix 3801750 = enabled + fix 5705630 = disabled + fix 5944076 = enabled + fix 5406763 = enabled + fix 6070954 = enabled + fix 6282944 = enabled + fix 6138746 = enabled + fix 6082745 = enabled + fix 3426050 = enabled + fix 599680 = enabled + fix 6062266 = enabled + fix 6087237 = enabled + fix 6122894 = enabled + fix 6377505 = enabled + fix 5893768 = enabled + fix 6163564 = enabled + fix 6073325 = enabled + fix 6188881 = enabled + fix 6007259 = enabled + fix 6239971 = enabled + fix 5284200 = disabled + fix 6042205 = enabled + fix 6051211 = enabled + fix 6434668 = enabled + fix 6438752 = enabled + fix 5936366 = enabled + fix 6439032 = enabled + fix 6438892 = enabled + fix 6006300 = enabled + fix 5947231 = enabled + fix 5416118 = 1 + fix 6365442 = 1 + fix 6239039 = enabled + fix 6502845 = enabled + fix 6913094 = enabled + fix 6029469 = enabled + fix 5919513 = enabled + fix 6057611 = enabled + fix 6469667 = enabled + fix 6608941 = disabled + fix 6368066 = enabled + fix 6329318 = enabled + fix 6656356 = enabled + fix 4507997 = enabled + fix 6671155 = enabled + fix 6694548 = enabled + fix 6688200 = enabled + fix 6612471 = enabled + fix 6708183 = disabled + fix 6326934 = enabled + fix 6520717 = disabled + fix 6714199 = enabled + fix 6681545 = enabled + fix 6748058 = enabled + fix 6167716 = enabled + fix 6674254 = enabled + fix 6468287 = enabled + fix 6503543 = enabled + fix 6808773 = disabled + fix 6766962 = enabled + fix 6120483 = enabled + fix 6670551 = enabled + fix 6771838 = enabled + fix 6626018 = disabled + fix 6530596 = enabled + fix 6778642 = enabled + fix 6699059 = enabled + fix 6376551 = enabled + fix 6429113 = enabled + fix 6782437 = enabled + fix 6776808 = enabled + fix 6765823 = enabled + fix 6768660 = enabled + fix 6782665 = enabled + fix 6610822 = enabled + fix 6514189 = enabled + fix 6818410 = enabled + fix 6827696 = enabled + fix 6773613 = enabled + fix 5902962 = enabled + fix 6956212 = enabled + fix 3056297 = enabled + fix 6440977 = disabled + fix 6972291 = disabled + fix 6904146 = enabled + fix 6221403 = enabled + fix 5475051 = enabled + fix 6845871 = enabled + fix 5468809 = enabled + fix 6917633 = enabled + fix 4444536 = disabled + fix 6955210 = enabled + fix 6994194 = enabled + fix 6399597 = disabled + fix 6951776 = enabled + fix 5648287 = 3 + fix 6987082 = disabled + fix 7132036 = enabled + fix 6980350 = enabled + fix 5199213 = enabled + fix 7138405 = enabled + fix 7148689 = enabled + fix 6820988 = enabled + fix 7032684 = enabled + fix 6617866 = enabled + fix 7155968 = enabled + fix 7127980 = enabled + fix 6982954 = enabled + fix 7241819 = enabled + fix 6897034 = enabled + fix 7236148 = enabled + fix 7298570 = enabled + fix 7249095 = enabled + fix 7314499 = enabled + fix 7324224 = enabled + fix 7289023 = enabled + fix 7237571 = enabled + fix 7116357 = enabled + fix 7345484 = enabled + fix 7375179 = enabled + fix 6430500 = disabled + fix 5897486 = enabled + fix 6774209 = enabled + fix 7306637 = enabled + fix 6451322 = enabled + fix 7208131 = enabled + fix 7388652 = enabled + fix 7127530 = enabled + fix 6751206 = enabled + fix 6669103 = enabled + fix 7430474 = enabled + fix 6990305 = enabled + fix 7043307 = enabled + fix 6921505 = enabled + fix 7388457 = enabled + fix 3120429 = enabled + fix 7452823 = disabled + fix 6838105 = enabled + fix 6769711 = enabled + fix 7170213 = enabled + fix 6528872 = enabled + fix 7295298 = enabled + fix 5922070 = enabled + fix 7259468 = enabled + fix 6418552 = enabled + fix 4619997 = enabled + fix 7524366 = enabled + fix 6942476 = enabled + fix 6418771 = enabled + fix 7375077 = enabled + fix 5400639 = enabled + fix 4570921 = enabled + fix 7426911 = enabled + fix 5099019 = disabled + fix 7528216 = enabled + fix 7521266 = enabled + fix 7385140 = enabled + fix 7576516 = enabled + fix 7573526 = enabled + fix 7576476 = enabled + fix 7165898 = enabled + fix 7263214 = enabled + fix 3320140 = enabled + fix 7555510 = enabled + fix 7613118 = enabled + fix 7597059 = enabled + fix 7558911 = enabled + fix 5520732 = enabled + fix 7679490 = disabled + fix 7449971 = enabled + fix 3628118 = enabled + fix 4370840 = enabled + fix 7281191 = enabled + fix 7519687 = enabled + fix 5029592 = 3 + fix 6012093 = 1 + fix 6053861 = disabled + fix 6941515 = disabled + fix 7696414 = enabled + fix 7272039 = enabled + fix 7834811 = enabled + fix 7640597 = enabled + fix 7341616 = enabled + fix 7168184 = enabled + fix 399198 = enabled + fix 7831070 = enabled + fix 7676897 = disabled + fix 7414637 = enabled + fix 7585456 = enabled + fix 8202421 = enabled + fix 7658097 = disabled + fix 8251486 = enabled + fix 7132684 = enabled + fix 7512227 = enabled + fix 6972987 = enabled + fix 7199035 = enabled + fix 8243446 = enabled + fix 7650462 = enabled + fix 6720701 = enabled + fix 7592673 = enabled + fix 7718694 = enabled + fix 7534027 = enabled + fix 7708267 = enabled + fix 5716785 = enabled + fix 7356191 = enabled + fix 7679161 = enabled + fix 7597159 = enabled + fix 7499258 = enabled + fix 8328363 = enabled + fix 7452863 = enabled + fix 8284930 = enabled + fix 7298626 = enabled + fix 7657126 = enabled + fix 8371884 = enabled + fix 8318020 = enabled + fix 8255423 = enabled + fix 7135745 = enabled + fix 8356253 = enabled + fix 7534257 = enabled + fix 8323407 = enabled + fix 7539815 = enabled + fix 8289316 = enabled + fix 8447850 = enabled + fix 7675944 = enabled + fix 8355120 = enabled + fix 7176746 = enabled + fix 8442891 = enabled + fix 8373261 = enabled + fix 7679164 = enabled + fix 7670533 = enabled + fix 8408665 = enabled + fix 8491399 = enabled + fix 8348392 = enabled + fix 8348585 = enabled + fix 8508056 = enabled + fix 8335178 = enabled + fix 8515269 = enabled + fix 8247017 = enabled + fix 7325597 = enabled + fix 8531490 = enabled + fix 6163600 = enabled + fix 8589278 = disabled + fix 8557992 = enabled + fix 7556098 = enabled + fix 8580883 = enabled + fix 5892599 = disabled + fix 8609714 = enabled + fix 8514561 = enabled + fix 8619631 = disabled + + +Query Block Registry: +SEL$2 0xfdb563d0 (PARSER) + SEL$4B12EFE6 0xfdbfdca8 (VIEW MERGE SEL$31BE1502; SEL$2) [FINAL] +SEL$1 0xfdbfdca8 (PARSER) + SEL$31BE1502 0xfdbfdca8 (JOIN REMOVED FROM QUERY BLOCK SEL$1; SEL$1; "PROM"@"SEL$1") + SEL$4B12EFE6 0xfdbfdca8 (VIEW MERGE SEL$31BE1502; SEL$2) [FINAL] + SEL$31BE1502 0xfdbfdca8 (JOIN REMOVED FROM QUERY BLOCK SEL$1; SEL$1; "PROM"@"SEL$1") + ... + +: + +End of Optimizer State Dump +Dumping Hints +============= + atom_hint=(@=3a4cf6098 err=0 resol=0 used=1 token=1087 org=1 lvl=1 txt=OPT_PARAM ()) +====================== END SQL Statement Dump ====================== diff --git a/tpt/ast/trace/cbo_analyze.sh b/tpt/ast/trace/cbo_analyze.sh new file mode 100644 index 0000000..a1678e0 --- /dev/null +++ b/tpt/ast/trace/cbo_analyze.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +cat $1 | awk ' + +function p(str) { printf("%6d: %s\n", NR, str) ; return 0 } + +/Now joining|Join order/{ p($0) } + +/^Best::/{ x=1 ; p($0) } + +(!/Best::/ && x ==1) { p($0) ; x=0 } + +' diff --git a/tpt/ast/use_concat.sql b/tpt/ast/use_concat.sql new file mode 100644 index 0000000..14fd3a5 --- /dev/null +++ b/tpt/ast/use_concat.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t; + +CREATE TABLE t AS SELECT * FROM dba_objects; + +CREATE INDEX t_i1 ON t (object_id); +CREATE INDEX t_i2 ON t (data_object_id); + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T'); + +SELECT owner FROM t WHERE object_id = 123 OR data_object_id = 456; + +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+OUTLINE')); + diff --git a/tpt/atname.sql b/tpt/atname.sql new file mode 100644 index 0000000..ac0bfc3 --- /dev/null +++ b/tpt/atname.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +-- +-- Explain AutoTask names such as: ORA$AT_OS_OPT_SY_6809 + +COL task_class FOR A40 +COL task_operation FOR A40 +COL task_type FOR A40 + +SELECT + (SELECT cname_ketcl FROM x$ketcl WHERE ctag_ketcl = REGEXP_SUBSTR('&1', '([[:alnum:]]+)', 1, 3)) task_class + , (SELECT opname_ketop FROM x$ketop WHERE otag_ketop = REGEXP_SUBSTR('&1', '([[:alnum:]]+)', 1, 4)) task_operation + , (SELECT tname_kettg FROM x$kettg WHERE ttag_kettg = REGEXP_SUBSTR('&1', '([[:alnum:]]+)', 1, 5)) task_type +FROM dual +/ diff --git a/tpt/aud.sql b/tpt/aud.sql new file mode 100644 index 0000000..aa42b3a --- /dev/null +++ b/tpt/aud.sql @@ -0,0 +1,3 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + diff --git a/tpt/audo.sql b/tpt/audo.sql new file mode 100644 index 0000000..1b2ea25 --- /dev/null +++ b/tpt/audo.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@audo2 "%&1%" "%&2%" \ No newline at end of file diff --git a/tpt/audo2.sql b/tpt/audo2.sql new file mode 100644 index 0000000..a00344b --- /dev/null +++ b/tpt/audo2.sql @@ -0,0 +1,13 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + * +from + dba_audit_object +where + upper(owner) like upper('&1') +and upper(obj_name) like upper('&2') +order by + timestamp desc +/ diff --git a/tpt/aw.sql b/tpt/aw.sql new file mode 100644 index 0000000..951b538 --- /dev/null +++ b/tpt/aw.sql @@ -0,0 +1,49 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL w_metric_value HEAD METRIC_VALUE FOR 9,999,999,999,999.99 + +prompt What's going on right now?! +prompt Showing System metrics from V$SYSMETRIC... + +SELECT + metric_name + , ROUND(value,2) w_metric_value + , metric_unit +FROM + v$sysmetric +WHERE + metric_name IN ( + 'Average Active Sessions' + , 'Average Synchronous Single-Block Read Latency' + , 'CPU Usage Per Sec' + , 'Background CPU Usage Per Sec' + , 'DB Block Changes Per Txn' + , 'Executions Per Sec' + , 'Host CPU Usage Per Sec' + , 'I/O Megabytes per Second' + , 'I/O Requests per Second' + , 'Logical Reads Per Txn' + , 'Logons Per Sec' + , 'Network Traffic Volume Per Sec' + , 'Physical Reads Per Sec' + , 'Physical Reads Per Txn' + , 'Physical Writes Per Sec' + , 'Redo Generated Per Sec' + , 'Redo Generated Per Txn' + , 'Response Time Per Txn' + , 'SQL Service Response Time' + , 'Total Parse Count Per Txn' + , 'User Calls Per Sec' + , 'User Transaction Per Sec' +) +AND group_id = 2 -- get last 60 sec metrics +ORDER BY + metric_name +/ + +PROMPT + +@ash/w &1 + + diff --git a/tpt/awr/awr_evh.sql b/tpt/awr/awr_evh.sql new file mode 100644 index 0000000..8a8ce27 --- /dev/null +++ b/tpt/awr/awr_evh.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +BREAK ON snap_begin SKIP 1 ON snap_end ON event_name + +COL event_name FOR A40 + +SELECT + CAST(begin_interval_time AS DATE) snap_begin + , TO_CHAR(CAST(end_interval_time AS DATE), 'HH24:MI') snap_end + , event_name + , wait_time_milli + , CASE WHEN wait_count >= LAG(wait_count) OVER (PARTITION BY event_name,wait_time_milli ORDER BY CAST(begin_interval_time AS DATE)) THEN + wait_count - LAG(wait_count) OVER (PARTITION BY event_name,wait_time_milli ORDER BY CAST(begin_interval_time AS DATE)) + ELSE + wait_count + END wait_count +FROM + dba_hist_snapshot + NATURAL JOIN + dba_hist_event_histogram +WHERE + begin_interval_time > SYSDATE - 1/24 +--AND event_name LIKE 'ASM file metadata operation' +--AND event_name LIKE 'flashback log switch' +-- AND event_name LIKE 'KSV master wait' +AND wait_class = 'User I/O' +ORDER BY + event_name + , snap_begin + , wait_time_milli +/ + diff --git a/tpt/awr/awr_last.sql b/tpt/awr/awr_last.sql new file mode 100644 index 0000000..62a9b6a --- /dev/null +++ b/tpt/awr/awr_last.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +VAR dbid NUMBER +VAR inst_num NUMBER +VAR eid NUMBER +VAR bid NUMBER + +BEGIN +SELECT dbid, USERENV('instance') INTO :dbid, :inst_num FROM v$database; +SELECT MAX(snap_id) INTO :eid FROM dba_hist_snapshot WHERE dbid = :dbid AND instance_number = :inst_num; +SELECT MAX(snap_id) INTO :bid FROM dba_hist_snapshot WHERE dbid = :dbid AND instance_number = :inst_num AND snap_id < :eid; +END; +/ + +SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(:dbid, :inst_num, :bid, :eid)); diff --git a/tpt/awr/awr_lasth.sql b/tpt/awr/awr_lasth.sql new file mode 100644 index 0000000..d196a1a --- /dev/null +++ b/tpt/awr/awr_lasth.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +VAR dbid NUMBER +VAR inst_num NUMBER +VAR eid NUMBER +VAR bid NUMBER + +BEGIN +SELECT dbid, USERENV('instance') INTO :dbid, :inst_num FROM v$database; +SELECT MAX(snap_id) INTO :eid FROM dba_hist_snapshot WHERE dbid = :dbid AND instance_number = :inst_num; +SELECT MAX(snap_id) INTO :bid FROM dba_hist_snapshot WHERE dbid = :dbid AND instance_number = :inst_num AND snap_id < :eid; +END; +/ + +SET TERMOUT OFF PAGESIZE 0 +SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(:dbid, :inst_num, :bid, :eid)) +. +SPOOL /tmp/awr_tmp.html +/ +SPOOL OFF +SET TERMOUT ON PAGESIZE 5000 diff --git a/tpt/awr/awr_log_file_sync.sql b/tpt/awr/awr_log_file_sync.sql new file mode 100644 index 0000000..d00712f --- /dev/null +++ b/tpt/awr/awr_log_file_sync.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + CAST(begin_interval_time AS DATE) begin_time + , AVG(CASE WHEN event_name = 'log file sync' THEN time_waited_micro/nullif(total_waits,0) END) avg_log_file_sync + , AVG(CASE WHEN event_name = 'log file parallel write' THEN time_waited_micro/nullif(total_waits,0) END) avg_log_file_parallel_write +FROM + dba_hist_snapshot +NATURAL JOIN + dba_hist_system_event +WHERE + event_name IN ('log file sync', 'log file parallel write') +AND begin_interval_time > SYSDATE - 15 +GROUP BY CAST(begin_interval_time AS DATE) +ORDER BY + begin_time +/ + diff --git a/tpt/awr/awr_mem_resize.sql b/tpt/awr/awr_mem_resize.sql new file mode 100644 index 0000000..da54461 --- /dev/null +++ b/tpt/awr/awr_mem_resize.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL begin_interval_time FOR A30 +COL end_interval_time FOR A30 +COL stat_name FOR A50 + + +SELECT + TO_CHAR(end_interval_time, 'YYYY-MM-DD HH24:MI:SS') snap_end_time + , component + , oper_type + , TO_CHAR(start_time, 'YYYY-MM-DD HH24:MI:SS') start_time + , TO_CHAR(end_time, 'YYYY-MM-DD HH24:MI:SS') end_time + , target_size + , oper_mode + , parameter + , initial_size + , final_size + , status +FROM + dba_hist_memory_resize_ops + NATURAL JOIN + dba_hist_snapshot +WHERE + begin_interval_time >= &1 +AND end_interval_time <= &2 +ORDER BY + snap_end_time +/ + diff --git a/tpt/awr/awr_procmem.sql b/tpt/awr/awr_procmem.sql new file mode 100644 index 0000000..938b491 --- /dev/null +++ b/tpt/awr/awr_procmem.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +BREAK ON snap_begin SKIP 1 ON snap_end ON event_name + +COL event_name FOR A40 + +SELECT + CAST(begin_interval_time AS DATE) snap_begin + , TO_CHAR(CAST(end_interval_time AS DATE), 'HH24:MI') snap_end + , category + , num_processes + , ROUND(allocated_max/1048576) max_mb + , ROUND(max_allocated_max/1048576) max_max_mb +FROM + dba_hist_snapshot + NATURAL JOIN + dba_hist_process_mem_summary +WHERE + begin_interval_time > SYSDATE - 3 +--AND category = 'SQL' +ORDER BY + snap_begin + , category +/ + diff --git a/tpt/awr/awr_sqlid.sql b/tpt/awr/awr_sqlid.sql new file mode 100644 index 0000000..f4bb9ff --- /dev/null +++ b/tpt/awr/awr_sqlid.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sql_text FOR A200 WORD_WRAP + +SELECT + * +FROM + dba_hist_sqltext +WHERE + sql_id = '&1' +/ diff --git a/tpt/awr/awr_sqlid_binds.sql b/tpt/awr/awr_sqlid_binds.sql new file mode 100644 index 0000000..1258c62 --- /dev/null +++ b/tpt/awr/awr_sqlid_binds.sql @@ -0,0 +1,47 @@ +-- Copyright 2023 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- awr_sqlid_binds.sql v0.1 + +COL binds_begin_time FOR A25 +COL binds_instance_number HEAD INST FOR 9999 +COL binds_name HEAD NAME FOR A15 +COL binds_value_string HEAD VALUE_STRING FOR A100 WRAP +COL binds_position HEAD POS FOR 9999 +COL binds_dup_position HEAD DPOS FOR 9999 + +SELECT + sn.begin_interval_time binds_begin_time + , sn.dbid + , sn.instance_number binds_instance_number + , sb.sql_id + , sb.name binds_name + , sb.position binds_position + , sb.dup_position binds_dup_position + , sb.datatype_string +-- , sb.character_sid +-- , sb.precision +-- , sb.scale + , sb.was_captured + , sb.last_captured + , sb.value_string binds_value_string +FROM + dba_hist_snapshot sn + , dba_hist_sqlbind sb +WHERE + sn.snap_id = sb.snap_id +AND sn.dbid = sb.dbid +AND sn.instance_number = sb.instance_number +AND sb.sql_id = '&1' +AND &2 +AND begin_interval_time >= &3 +AND end_interval_time <= &4 +ORDER BY + sn.begin_interval_time + , sn.dbid + , sn.instance_number + , sb.sql_id + , sb.name + , sb.position +/ + diff --git a/tpt/awr/awr_sqlstats.sql b/tpt/awr/awr_sqlstats.sql new file mode 100644 index 0000000..6fb4cce --- /dev/null +++ b/tpt/awr/awr_sqlstats.sql @@ -0,0 +1,55 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET TERMOUT OFF pagesize 5000 tab off verify off linesize 999 trimspool on trimout on null "" +SET TERMOUT ON + + +COL exec_per_sec FOR 99999990 +COL ela_ms_per_sec FOR 99999990 +COL rows_per_sec FOR 99999990 +COL lios_per_sec FOR 99999990 +COL blkrd_per_sec FOR 99999990 +COL cpu_ms_per_sec FOR 99999990 +COL iow_ms_per_sec FOR 99999990 +COL clw_ms_per_sec FOR 99999990 +COL apw_ms_per_sec FOR 99999990 +COL ccw_ms_per_sec FOR 99999990 + + +SELECT + CAST(begin_interval_time AS DATE) begin_interval_time + , sql_id + , plan_hash_value + , ROUND(SUM(executions_delta ) / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) exec_per_sec + , ROUND(SUM(elapsed_time_delta ) / 1000 / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) ela_ms_per_sec + , ROUND(SUM(rows_processed_delta) / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) rows_per_sec + , ROUND(SUM(buffer_gets_delta ) / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) lios_per_sec + , ROUND(SUM(disk_reads_delta ) / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) blkrd_per_sec + , ROUND(SUM(cpu_time_delta ) / 1000 / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) cpu_ms_per_sec + , ROUND(SUM(iowait_delta ) / 1000 / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) iow_ms_per_sec + , ROUND(SUM(clwait_delta ) / 1000 / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) clw_ms_per_sec + , ROUND(SUM(apwait_delta ) / 1000 / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) apw_ms_per_sec + , ROUND(SUM(ccwait_delta ) / 1000 / ((CAST(end_interval_time AS DATE) - CAST(begin_interval_time AS DATE)) * 86400), 1) ccw_ms_per_sec +FROM + dba_hist_snapshot sn + , dba_hist_sqlstat st +WHERE + sn.snap_id = st.snap_id +AND sn.dbid = st.dbid +AND sn.instance_number = st.instance_number +AND sql_id = '&1' +AND plan_hash_value LIKE '&2' +AND begin_interval_time >= &3 +AND end_interval_time <= &4 +GROUP BY + CAST(begin_interval_time AS DATE) + , CAST(end_interval_time AS DATE) + , sql_id + , plan_hash_value +ORDER BY + begin_interval_time + , sql_id + , plan_hash_value +/ + diff --git a/tpt/awr/awr_sqlstats_per_exec.sql b/tpt/awr/awr_sqlstats_per_exec.sql new file mode 100644 index 0000000..d3feb45 --- /dev/null +++ b/tpt/awr/awr_sqlstats_per_exec.sql @@ -0,0 +1,73 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- awr_sqlstats_per_exec v1.01 + +SET TERMOUT OFF pagesize 5000 tab off verify off linesize 999 trimspool on trimout on null "" +SET TERMOUT ON + +COL executions FOR 99999990 +COL ela_ms_per_exec FOR 99999990 +COL rows_per_exec FOR 99999990.0 +COL lios_per_exec FOR 99999990 +COL blkrd_per_exec FOR 99999990 +COL cpu_ms_per_exec FOR 99999990 +COL iow_ms_per_exec FOR 99999990 +COL avg_iow_ms FOR 99999990.0 +COL clw_ms_per_exec FOR 99999990 +COL apw_ms_per_exec FOR 99999990 +COL ccw_ms_per_exec FOR 99999990 + +-- You can configure output column precision here + +-- COL executions FOR 99999990.0 +-- COL ela_ms_per_exec FOR 99999990.0 +-- COL rows_per_exec FOR 99999990.0 +-- COL lios_per_exec FOR 99999990.0 +-- COL blkrd_per_exec FOR 99999990.0 +-- COL cpu_ms_per_exec FOR 99999990.0 +-- COL iow_ms_per_exec FOR 99999990.0 +-- COL avg_iow_ms FOR 99999990.0 +-- COL clw_ms_per_exec FOR 99999990.0 +-- COL apw_ms_per_exec FOR 99999990.0 +-- COL ccw_ms_per_exec FOR 99999990.0 + +SELECT + CAST(begin_interval_time AS DATE) begin_interval_time + , sql_id + , plan_hash_value + , SUM(executions_delta) executions + , ROUND(SUM(elapsed_time_delta ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000) ela_ms_per_exec + , ROUND(SUM(cpu_time_delta ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000) cpu_ms_per_exec + , ROUND(SUM(rows_processed_delta) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta)),1) rows_per_exec + , ROUND(SUM(buffer_gets_delta ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta)),1) lios_per_exec + , ROUND(SUM(disk_reads_delta ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta)),1) blkrd_per_exec + , ROUND(SUM(iowait_delta ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000) iow_ms_per_exec + , ROUND(SUM(iowait_delta ) / DECODE(SUM(physical_read_requests_delta)+SUM(physical_write_requests_delta),0,1 + ,SUM(physical_read_requests_delta)+SUM(physical_write_requests_delta))/1000,1) avg_iow_ms + , ROUND(SUM(clwait_delta ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000) clw_ms_per_exec + , ROUND(SUM(apwait_delta ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000) apw_ms_per_exec + , ROUND(SUM(ccwait_delta ) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta))/1000) ccw_ms_per_exec +-- , ROUND(SUM(elapsed_time_delta - cpu_time_delta - iowait_delta - clwait_delta - apwait_delta - ccwait_delta) / DECODE(SUM(executions_delta),0,1,SUM(executions_delta)) / 1000, 1) oth_ms_per_exec +FROM + dba_hist_snapshot sn + , dba_hist_sqlstat st +WHERE + sn.snap_id = st.snap_id +AND sn.dbid = st.dbid +AND sn.instance_number = st.instance_number +AND sql_id = '&1' +AND plan_hash_value LIKE '&2' +AND begin_interval_time >= &3 +AND end_interval_time <= &4 +AND (elapsed_time_delta != 0 AND cpu_time_delta != 0) +GROUP BY + CAST(begin_interval_time AS DATE) + , sql_id + , plan_hash_value +ORDER BY + begin_interval_time + , sql_id + , plan_hash_value +/ + diff --git a/tpt/awr/awr_sqlstats_unstable.sql b/tpt/awr/awr_sqlstats_unstable.sql new file mode 100644 index 0000000..c94ecd3 --- /dev/null +++ b/tpt/awr/awr_sqlstats_unstable.sql @@ -0,0 +1,102 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- @awr/awr_sqlstats_unstable.sql version 0.1 BETA by Tanel Poder +-- +-- detect sql_id that use a varying amount of *elapsed time per execution* across different plan hash values +-- or across AWR time ranges +-- +-- usage examples: +-- a) typical use - show SQL_IDs from last 2 weeks that have different plans with different +-- elapsed time per execution (per plan) +-- +-- @awr/awr_sqlstats_unstable sql_id plan_hash_value sysdate-14 sysdate +-- +-- b) special case use with SQL using literals (note that AWR may not persist many of these queries) +-- as due to literals these tend to be executed only once +-- +-- @awr/awr_sqlstats_unstable force_matching_signature plan_hash_value sysdate-14 sysdate +-- +-- c) advanced use - show cases where *the same plan* (same plan hash value) uses different amounts +-- of elapsed time per execution over time. so it's not a *plan* flipping problem +-- +-- @awr/awr_sqlstats_unstable sql_id,plan_hash_value begin_interval_time sysdate-14 sysdate +-- +-- Once you have found a SQL_ID of interest, you can drill down into its actual plans and elapsed times using: +-- +-- @awr/awr_sqlstats_per_exec &sqlid % sysdate-14 sysdate +-- +-- +-- other: +-- Inspired by Kerry Osborne's unstable_plans.sql script - http://kerryosborne.oracle-guy.com/2008/10/unstable-plans/ +-- + +SET TERMOUT OFF pagesize 5000 tab off verify off linesize 999 trimspool on trimout on null "" +SET TERMOUT ON + +COL force_matching_signature FOR 99999999999999999999 + +WITH metrics AS( + SELECT + &1 + , MIN(CAST(begin_interval_time AS DATE)) first_seen + , MAX(CAST(end_interval_time AS DATE)) last_seen + , SUM(executions_delta) executions + , ROUND(SUM(elapsed_time_delta ) / CASE WHEN SUM(executions_delta) = 0 THEN 1 ELSE SUM(executions_delta) END) ela_us_per_exec + , ROUND(SUM(cpu_time_delta ) / NULLIF(SUM(executions_delta),0)) cpu_us_per_exec + , ROUND(SUM(rows_processed_delta) / NULLIF(SUM(executions_delta),0),1) rows_per_exec + , ROUND(SUM(buffer_gets_delta ) / NULLIF(SUM(executions_delta),0),1) lios_per_exec + , ROUND(SUM(disk_reads_delta ) / NULLIF(SUM(executions_delta),0),1) blkrd_per_exec + , ROUND(SUM(iowait_delta ) / NULLIF(SUM(executions_delta),0)) iow_us_per_exec + , ROUND(SUM(iowait_delta ) / NULLIF(SUM(physical_read_requests_delta)+SUM(physical_write_requests_delta),0),1) avg_iow_us + , ROUND(SUM(clwait_delta ) / NULLIF(SUM(executions_delta),0)) clw_us_per_exec + , ROUND(SUM(apwait_delta ) / NULLIF(SUM(executions_delta),0)) apw_us_per_exec + , ROUND(SUM(ccwait_delta ) / NULLIF(SUM(executions_delta),0)) ccw_us_per_exec + FROM + dba_hist_snapshot sn + , dba_hist_sqlstat st + WHERE + -- join conditions + sn.snap_id = st.snap_id + AND sn.dbid = st.dbid + AND sn.instance_number = st.instance_number + -- filter conditions + AND executions_delta > 0 + AND begin_interval_time >= &3 + AND end_interval_time <= &4 + GROUP BY + &1, &2 +) +, sq AS ( + SELECT + &1 + , executions + , ela_us_per_exec + , STDDEV(ela_us_per_exec) OVER (PARTITION BY &1) ela_us_stddev + FROM + metrics +), norm AS ( + SELECT + &1 + , SUM(executions) total_executions + , MIN(ela_us_per_exec) / 1000000 min_s_per_exec + , MAX(ela_us_per_exec) / 1000000 max_s_per_exec + , ela_us_stddev / MIN(ela_us_per_exec) ela_norm_stddev + , ela_us_stddev / 1000000 seconds_stddev + FROM + sq + GROUP BY + &1 + , ela_us_stddev +) +SELECT + * +FROM + norm +WHERE + ela_norm_stddev > 3 +AND max_s_per_exec > 1 -- avoid reporting very short queries +ORDER BY + ela_norm_stddev DESC +/ + diff --git a/tpt/awr/awr_sysmetric_history.sql b/tpt/awr/awr_sysmetric_history.sql new file mode 100644 index 0000000..2665cfa --- /dev/null +++ b/tpt/awr/awr_sysmetric_history.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT +-- CAST(begin_interval_time AS DATE) begin_time + begin_time + , metric_name + , metric_unit + , value +FROM + dba_hist_snapshot +NATURAL JOIN + dba_hist_sysmetric_history +WHERE + metric_name LIKE '&1' +-- metric_name IN ('Physical Reads Per Sec') +-- metric_name IN ('Host CPU Utilization (%)') +-- metric_name IN ('Logons Per Sec') +AND begin_interval_time > SYSDATE - 1 +ORDER BY + metric_name + , begin_time +/ + diff --git a/tpt/awr/awr_sysmetric_summary.sql b/tpt/awr/awr_sysmetric_summary.sql new file mode 100644 index 0000000..c2f6243 --- /dev/null +++ b/tpt/awr/awr_sysmetric_summary.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT +-- CAST(begin_interval_time AS DATE) begin_time + begin_time + , metric_name + , metric_unit + , average / 100 +FROM + dba_hist_snapshot +NATURAL JOIN + dba_hist_sysmetric_summary +WHERE +-- metric_name IN ('User Commits Per Sec', 'User Transaction Per Sec') +-- metric_name IN ('Physical Read IO Requests Per Sec', 'Physical Write IO Requests Per Sec') +-- metric_name IN ('Host CPU Utilization (%)') +-- metric_name IN ('Logons Per Sec') + REGEXP_LIKE(metric_name, '&1','i') +AND begin_interval_time > SYSDATE - 1 +ORDER BY + metric_name + , begin_time +/ + diff --git a/tpt/awr/awr_sysstat.sql b/tpt/awr/awr_sysstat.sql new file mode 100644 index 0000000..86a12c2 --- /dev/null +++ b/tpt/awr/awr_sysstat.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL begin_interval_time FOR A30 +COL end_interval_time FOR A30 +COL stat_name FOR A50 + +SELECT * FROM ( + SELECT + TO_CHAR(end_interval_time, 'YYYY-MM-DD HH24:MI:SS') snap_end_time + , stat_name + , CASE WHEN value - LAG(value) OVER (PARTITION BY stat_name ORDER BY begin_interval_time) < 0 THEN value ELSE value - LAG(value) OVER (PARTITION BY stat_name ORDER BY begin_interval_time) END value + FROM + dba_hist_sysstat + NATURAL JOIN + dba_hist_snapshot + WHERE + REGEXP_LIKE(stat_name, '&1', 'i') + AND begin_interval_time >= &2 + AND end_interval_time <= &3 + ORDER BY + begin_interval_time, stat_name +) +WHERE value > 0 +/ + diff --git a/tpt/awr/awr_system_event.sql b/tpt/awr/awr_system_event.sql new file mode 100644 index 0000000..5f70b94 --- /dev/null +++ b/tpt/awr/awr_system_event.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + CAST(begin_interval_time AS DATE) begin_time + , event_name + , time_waited_micro + , total_waits + , total_timeouts + , time_waited_micro/nullif(total_waits,0) avg_wait_micro +FROM + dba_hist_snapshot +NATURAL JOIN + dba_hist_system_event +WHERE +-- event_name IN ('log file sync', 'log file parallel write', 'ksfd: async disk IO') + event_name LIKE 'SQL*Net vector data%' +AND begin_interval_time > SYSDATE - 5 +ORDER BY + event_name + , begin_time +/ + diff --git a/tpt/awr/create_event_histogram_view.sql b/tpt/awr/create_event_histogram_view.sql new file mode 100644 index 0000000..7cac81c --- /dev/null +++ b/tpt/awr/create_event_histogram_view.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE OR REPLACE VIEW sys.t_hist_event_histogram AS +SELECT + SNAP_ID -- NOT NULL NUMBER + , DBID -- NOT NULL NUMBER + , INSTANCE_NUMBER -- NOT NULL NUMBER + , EVENT_ID -- NOT NULL NUMBER + , EVENT_NAME -- NOT NULL VARCHAR2(64) + , WAIT_CLASS_ID -- NUMBER + , WAIT_CLASS -- VARCHAR2(64) + , WAIT_TIME_MILLI -- NOT NULL NUMBER + , WAIT_COUNT -- NUMBER + , CAST(BEGIN_INTERVAL_TIME AS DATE) snapshot_begin_time -- NOT NULL TIMESTAMP(3) + , CAST(END_INTERVAL_TIME AS DATE) snapshot_end_time -- NOT NULL TIMESTAMP(3) + , TO_CHAR(begin_interval_time, 'YYYY') snapshot_begin_year + , TO_CHAR(begin_interval_time, 'MM') snapshot_begin_month_num + , TO_CHAR(begin_interval_time, 'MON') snapshot_begin_mon + , TO_CHAR(begin_interval_time, 'Month') snapshot_begin_month + , TO_CHAR(begin_interval_time, 'DD') snapshot_begin_day + , TO_CHAR(begin_interval_time, 'HH24') snapshot_begin_hour + , TO_CHAR(begin_interval_time, 'MI') snapshot_begin_minute +FROM + dba_hist_snapshot +NATURAL JOIN + dba_hist_event_histogram +/ + +GRANT SELECT ON sys.t_hist_event_histogram TO PUBLIC; +CREATE PUBLIC SYNONYM t_hist_event_histogram FOR sys.t_hist_event_histogram; + diff --git a/tpt/awr/dbload.sql b/tpt/awr/dbload.sql new file mode 100644 index 0000000..dc895c7 --- /dev/null +++ b/tpt/awr/dbload.sql @@ -0,0 +1,45 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +COL snap_time FOR A30 + +SELECT + sn.begin_interval_time snap_time + , ROUND(SUM(CASE WHEN metric_name = 'Average Active Sessions' THEN value END)) aas + , ROUND(AVG(CASE WHEN metric_name = 'Average Synchronous Single-Block Read Latency' THEN value END)) iolat + , ROUND(SUM(CASE WHEN metric_name = 'CPU Usage Per Sec' THEN value END)) cpusec + , ROUND(SUM(CASE WHEN metric_name = 'Background CPU Usage Per Sec' THEN value END)) bgcpusec + , ROUND(AVG(CASE WHEN metric_name = 'DB Block Changes Per Txn' THEN value END)) blkchgtxn + , ROUND(SUM(CASE WHEN metric_name = 'Executions Per Sec' THEN value END)) execsec + , ROUND(SUM(CASE WHEN metric_name = 'Host CPU Usage Per Sec' THEN value END)) oscpusec + , ROUND(SUM(CASE WHEN metric_name = 'I/O Megabytes per Second' THEN value END)) iombsec + , ROUND(SUM(CASE WHEN metric_name = 'I/O Requests per Second' THEN value END)) ioreqsec + , ROUND(AVG(CASE WHEN metric_name = 'Logical Reads Per Txn' THEN value END)) liotxn + , ROUND(SUM(CASE WHEN metric_name = 'Logons Per Sec' THEN value END)) logsec + , ROUND(SUM(CASE WHEN metric_name = 'Network Traffic Volume Per Sec' THEN value END)/1048576) netmbsec + , ROUND(SUM(CASE WHEN metric_name = 'Physical Reads Per Sec' THEN value END)) phyrdsec + , ROUND(AVG(CASE WHEN metric_name = 'Physical Reads Per Txn' THEN value END)) phyrdtxn + , ROUND(SUM(CASE WHEN metric_name = 'Physical Writes Per Sec' THEN value END)) phywrsec + , ROUND(SUM(CASE WHEN metric_name = 'Redo Generated Per Sec' THEN value END)/1024) redokbsec + , ROUND(AVG(CASE WHEN metric_name = 'Redo Generated Per Txn' THEN value END)/1024) redokbtxn + , ROUND(AVG(CASE WHEN metric_name = 'Response Time Per Txn' THEN value END)*10) timemsectxn + , ROUND(AVG(CASE WHEN metric_name = 'SQL Service Response Time' THEN value END)*10) timemseccall + , ROUND(AVG(CASE WHEN metric_name = 'Total Parse Count Per Txn' THEN value END)) prstxn + , ROUND(SUM(CASE WHEN metric_name = 'User Calls Per Sec' THEN value END)) ucallsec + , ROUND(SUM(CASE WHEN metric_name = 'User Transaction Per Sec' THEN value END)) utxnsec +FROM + dba_hist_snapshot sn + , dba_hist_sysmetric_history m +WHERE + sn.snap_id = m.snap_id +AND sn.dbid = m.dbid +AND sn.instance_number = m.instance_number +AND sn.begin_interval_time > SYSDATE - 7 +GROUP BY + sn.begin_interval_time +ORDER BY + sn.begin_interval_time +/ + diff --git a/tpt/awr/dstat.sql b/tpt/awr/dstat.sql new file mode 100644 index 0000000..beabca1 --- /dev/null +++ b/tpt/awr/dstat.sql @@ -0,0 +1,72 @@ +-- awr/dstat.sql by Tanel Poder v0.1 + +PROMPT This is a prototype script v0.2. It does not work correctly +PROMPT RAC and CDB databases yet and other things may change too... + +COL AAS HEAD "(#ses)|AAS" FOR 9999.9 +COL SBRLATms HEAD "(ms)|SBRLAT" FOR 99.90 +COL DBCPU HEAD "(%aCPU)|DBCPU" FOR 99999.90 +COL BGCPU HEAD "(%aCPU)|BGCPU" FOR 99999.90 +COL OSCPU HEAD "(%aCPU)|OSCPU" FOR 99999.90 +COL IOSIZE HEAD "(kB)|IOSIZE" FOR 99999 +COL "BLKCHG/tx" HEAD "BLKCHG/tx" FOR 9999999.0 +COL "REDOKB/s" HEAD "(kB/s)|REDOKB/s" FOR 9999999.0 +COL "NETKB/s" HEAD "(kB/s)|NETKB/s" FOR 9999999.0 +COL "IOMB/s" HEAD "(MB/s)|IOMB/s" FOR 999999.0 +COL "IOPS" HEAD "IOPS" FOR 99999999 +COL "LOGONS/s" HEAD "LOGONS/s" FOR 99999.0 +COL "EXECS/s" HEAD "EXECS/s" FOR 999999.0 + +COL "PARSE/tx" HEAD "PARSE/tx" FOR 9999999.0 +COL "UCALLS/s" HEAD "UCALLS/s" FOR 9999999.0 +COL "BLKRD/s" HEAD "BLKRD/s" FOR 9999999.0 +COL "BLKWR/s" HEAD "BLKWR/s" FOR 9999999.0 +COL "REDO/tx" HEAD "(kB)|REDO/tx" FOR 9999999.0 +COL "PARSE/tx" HEAD "PARSE/tx" FOR 9999999.0 +COL "SQLMS/call" HEAD "(ms)|SQLms/call" FOR 9999999.0 +COL "RESPMS/tx" HEAD "(ms)|RESPms/tx" FOR 9999999.0 +COL "ENQRQ/tx" HEAD "ENQRQ/tx" FOR 9999999.0 + + +SELECT + begin_time +-- , MAX(ROUND(intsize / 100)) seconds + , ROUND(MAX(CASE WHEN metric_name = 'Average Active Sessions' THEN value END),2) "AAS" + , ROUND(MAX(CASE WHEN metric_name = 'Average Synchronous Single-Block Read Latency' THEN value END),2) "SBRLATms" + , ROUND(MAX(CASE WHEN metric_name = 'CPU Usage Per Sec' THEN value END),2) "DBCPU" + , ROUND(MAX(CASE WHEN metric_name = 'Background CPU Usage Per Sec' THEN value END),2) "BGCPU" + , ROUND(MAX(CASE WHEN metric_name = 'Host CPU Usage Per Sec' THEN value END),2) "OSCPU" + , ROUND(MAX(CASE WHEN metric_name = 'Logons Per Sec' THEN value END),2) "LOGONS/s" + , ROUND(MAX(CASE WHEN metric_name = 'Executions Per Sec' THEN value END),2) "EXECS/s" + , ROUND(MAX(CASE WHEN metric_name = 'I/O Megabytes per Second' THEN value END),2) "IOMB/s" + , ROUND(MAX(CASE WHEN metric_name = 'I/O Requests per Second' THEN value END),2) "IOPS" + , ROUND(SUM(CASE WHEN metric_name = 'I/O Megabytes per Second' THEN value END) * 1024 / + SUM(CASE WHEN metric_name = 'I/O Requests per Second' THEN value END),2) "IOSIZE" + , ROUND(MAX(CASE WHEN metric_name = 'Logical Reads Per Txn' THEN value END)) "LIOs/tx" + , ROUND(MAX(CASE WHEN metric_name = 'DB Block Changes Per Txn' THEN value END),1) "BLKCHG/tx" + , ROUND(MAX(CASE WHEN metric_name = 'User Transaction Per Sec' THEN value END),2) "UTRANS/s" + , ROUND(MAX(CASE WHEN metric_name = 'Redo Generated Per Sec' THEN value END)/1024,2) "REDOKB/s" + , ROUND(MAX(CASE WHEN metric_name = 'Physical Reads Per Sec' THEN value END),2) "BLKRD/s" + , ROUND(MAX(CASE WHEN metric_name = 'Physical Writes Per Sec' THEN value END),2) "BLKWR/s" + , ROUND(MAX(CASE WHEN metric_name = 'Physical Reads Per Txn' THEN value END),2) "BLKRD/tx" + , ROUND(MAX(CASE WHEN metric_name = 'Network Traffic Volume Per Sec' THEN value END)/1024,2) "NETKB/s" + , ROUND(MAX(CASE WHEN metric_name = 'Total Parse Count Per Txn' THEN value END),2) "PARSE/tx" + , ROUND(MAX(CASE WHEN metric_name = 'User Calls Per Sec' THEN value END),2) "UCALLS/s" + , ROUND(MAX(CASE WHEN metric_name = 'SQL Service Response Time' THEN value END) * 10,2) "SQLms/call" + , ROUND(MAX(CASE WHEN metric_name = 'Response Time Per Txn' THEN value END) * 10,2) "RESPms/tx" + , ROUND(MAX(CASE WHEN metric_name = 'Redo Generated Per Txn' THEN value END)/1024,2) "REDO/tx" + , ROUND(MAX(CASE WHEN metric_name = 'Enqueue Requests Per Txn' THEN value END),2) "ENQRQ/tx" + --, metric_name + --, value + --, metric_unit +FROM + dba_hist_sysmetric_history h +WHERE + dbid = SYS_CONTEXT('userenv', 'dbid') +AND begin_time >= &1 AND end_time <= &2 +GROUP BY + begin_time +ORDER BY + begin_time +/ + diff --git a/tpt/awr/gen_awr_report.sql b/tpt/awr/gen_awr_report.sql new file mode 100644 index 0000000..cd6489d --- /dev/null +++ b/tpt/awr/gen_awr_report.sql @@ -0,0 +1,37 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +VAR dbid NUMBER + +PROMPT Listing latest AWR snapshots ... +SELECT snap_id, end_interval_time +FROM dba_hist_snapshot +--WHERE begin_interval_time > TO_DATE('2011-06-07 07:00:00', 'YYYY-MM-DD HH24:MI:SS') +WHERE end_interval_time > SYSDATE - 1 +ORDER BY end_interval_time; + +ACCEPT bid NUMBER PROMPT "Enter begin snapshot id: " +ACCEPT eid NUMBER PROMPT "Enter end snapshot id: " + +BEGIN + SELECT dbid INTO :dbid FROM v$database; +END; +/ + +SET TERMOUT OFF PAGESIZE 0 HEADING OFF LINESIZE 1000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +SPOOL awr_local_inst_1.html +SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(:dbid, 1, &bid, &eid)); + +-- SPOOL awr_local_inst_2.html +-- SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(:dbid, 2, &bid, &eid)); +-- +-- SPOOL awr_local_inst_3.html +-- SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(:dbid, 3, &bid, &eid)); + +-- SPOOL awr_global.html +-- SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_HTML(:dbid, CAST(null AS VARCHAR2(10)), &bid, &eid)); + +SPOOL OFF +SET TERMOUT ON PAGESIZE 5000 HEADING ON + diff --git a/tpt/awr/gen_perfhub_report.sql b/tpt/awr/gen_perfhub_report.sql new file mode 100644 index 0000000..b887630 --- /dev/null +++ b/tpt/awr/gen_perfhub_report.sql @@ -0,0 +1,20 @@ +SELECT DBMS_PERF.REPORT_PERFHUB ( + is_realtime => 0 -- 0 = dba_hist, 1 = v$ash + , outer_start_time => sysdate-1 + , outer_end_time => sysdate + , selected_start_time => TIMESTAMP'2023-05-15 20:15:00' + , selected_end_time => TIMESTAMP'2023-05-15 20:45:00' + , type=>'ACTIVE' +) +FROM dual +. + +SET HEADING OFF LINESIZE 32767 PAGESIZE 0 TRIMSPOOL ON TRIMOUT ON LONG 9999999 VERIFY OFF LONGCHUNKSIZE 100000 FEEDBACK OFF +SET TERMOUT OFF + +spool perfhub.html +/ + +spool off +SET TERMOUT ON HEADING ON PAGESIZE 5000 LINESIZE 999 FEEDBACK ON + diff --git a/tpt/awr/get_settings.sql b/tpt/awr/get_settings.sql new file mode 100644 index 0000000..15a3675 --- /dev/null +++ b/tpt/awr/get_settings.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM dba_hist_wr_control +@pr diff --git a/tpt/awr/other_xml.sql b/tpt/awr/other_xml.sql new file mode 100644 index 0000000..baf2f01 --- /dev/null +++ b/tpt/awr/other_xml.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select +-- sql_id +-- , child_number +-- , plan_hash_value + substr(extractvalue(value(d), '/hint'), 1, 100) as outline_hints +from + xmltable('/*/outline_data/hint' + passing ( + select + xmltype(other_xml) as xmlval + from + dba_hist_sql_plan + where + sql_id = '&1' + and other_xml is not null + ) +) d +/ diff --git a/tpt/awr/perfhub.html b/tpt/awr/perfhub.html new file mode 100644 index 0000000..2eb2c42 --- /dev/null +++ b/tpt/awr/perfhub.html @@ -0,0 +1,11252 @@ + + + + + + + + + + + diff --git a/tpt/awr/settings.sql b/tpt/awr/settings.sql new file mode 100644 index 0000000..cfb6abc --- /dev/null +++ b/tpt/awr/settings.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at https://blog.tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. + +PROMPT AWR Data Retention (Includes DBA_HIST ASH): +PROMPT +SELECT * FROM dba_hist_wr_control +@pr + +PROMPT Optimizer Statistics History retention: +SELECT dbms_stats.get_stats_history_retention retention_days FROM dual; + +PROMPT Use syntax like this to change AWR settings: +PROMPT -- EXEC SYS.DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(interval=>15, retention=>60*24*375); +PROMPT Statistics retention (days): +PROMPT -- EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(90); +PROMPT diff --git a/tpt/ba.sql b/tpt/ba.sql new file mode 100644 index 0000000..c8c840e --- /dev/null +++ b/tpt/ba.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col ba_blsiz head BLSZ for 99999 + +select +-- addr, + indx,hladdr, + blsiz ba_blsiz, + flag,lru_flag,ts#,file#, + dbarfil,dbablk,class,state,mode_held,obj,tch +from x$bh where ba = hextoraw(lpad('&1',16,0)) +/ + diff --git a/tpt/bclass.sql b/tpt/bclass.sql new file mode 100644 index 0000000..3b612fd --- /dev/null +++ b/tpt/bclass.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- blcass.sql by Tanel Poder (http://blog.tanelpoder.com) +-- +-- Usage: @bclass + +--with undostart as (select r from (select rownum r, class from v$waitstat) where class = 'undo header') + +select class, r undo_segment_id from ( + select class, null r + from (select class, rownum r from v$waitstat) + where r = bitand(&1,to_number('FFFF','XXXX')) + union all + select + decode(mod(bitand(&1,to_number('FFFF','XXXX')) - 17,2),0,'undo header',1,'undo data', 'error') type + , trunc((bitand(&1,to_number('FFFF','XXXX')) - 17)/2) undoseg_id + from + dual +) +where rownum = 1 +/ diff --git a/tpt/bf.sql b/tpt/bf.sql new file mode 100644 index 0000000..a389a87 --- /dev/null +++ b/tpt/bf.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + -- sqlhashv + -- , flags + qcinstid + , qcsid + , bfm + , 'BF'||TRIM(TO_CHAR(bfid,'0999')) bf_id + , len bytes_total + , len*8 bits_total + , nset bits_set + , TO_CHAR(ROUND((nset/(len*8))*100,1),'999.0')||' %' pct_set + , flt filtered + , tot total_probed + , active +FROM + x$qesblstat +WHERE + sqlhashv = DBMS_UTILITY.SQLID_TO_SQLHASH('&1') +ORDER BY + bfid +/ + diff --git a/tpt/bg.sql b/tpt/bg.sql new file mode 100644 index 0000000..b8372aa --- /dev/null +++ b/tpt/bg.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@bg2 "%&1%" \ No newline at end of file diff --git a/tpt/bg2.sql b/tpt/bg2.sql new file mode 100644 index 0000000..3bb83ab --- /dev/null +++ b/tpt/bg2.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select /*+ ordered use_hash(s) */ + b.name + , b.description + , s.sid + , p.pid opid + , p.spid + , b.paddr + , s.saddr +-- , b.typea -- 12.2+ +-- , b.priority -- 12.2+ +from + v$bgprocess b + , v$process p + , v$session s +where + b.paddr = p.addr +and b.paddr = s.paddr +and p.addr = s.paddr +and (lower(b.name) like lower('&1') or lower(b.description) like lower('&1')) +/ diff --git a/tpt/bgact.sql b/tpt/bgact.sql new file mode 100644 index 0000000..3014342 --- /dev/null +++ b/tpt/bgact.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL process_name_ksbtabact HEAD PROCESS_NAME FOR A20 + +-- similar to X$MESSAGES + +SELECT + indx + , process_name_ksbtabact + , action_description_ksbtabact + , timeout_ksbtabact + , options_ksbtabact +FROM + X$KSBTABACT +WHERE + LOWER(ACTION_DESCRIPTION_KSBTABACT) LIKE LOWER('%&1%') +OR LOWER(PROCESS_NAME_KSBTABACT) LIKE LOWER('%&1%') +/ + + diff --git a/tpt/bh_by_ts.sql b/tpt/bh_by_ts.sql new file mode 100644 index 0000000..55f05bb --- /dev/null +++ b/tpt/bh_by_ts.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT t.tablespace_name, b.ts#, t.block_size, b.status, COUNT(*) num_bufs, ROUND(COUNT(*) * t.block_size / 1048576) pool_mb +FROM v$bh b, dba_tablespaces t, v$tablespace vt +WHERE b.ts# = vt.ts# +AND vt.name = t.tablespace_name +GROUP BY t.tablespace_name, b.ts#, t.block_size, b.status +ORDER BY COUNT(*) DESC; + + diff --git a/tpt/bhcls.sql b/tpt/bhcls.sql new file mode 100644 index 0000000..d1787d0 --- /dev/null +++ b/tpt/bhcls.sql @@ -0,0 +1,50 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: bhla.sql (Buffer Headers by Latch Address) +-- Purpose: Report which blocks are in buffer cache, protected by a cache +-- buffers chains child latch +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @bhla +-- @bhla 27E5A780 +-- +-- +-- Other: This script reports all buffers "under" the given cache buffers +-- chains child latch, their corresponding segment names and +-- touch counts (TCH). +-- +-------------------------------------------------------------------------------- + +col bhla_object head object for a40 truncate +col bhla_DBA head DBA for a20 +col bhla_obj head OBJ for 99999999999 + +WITH bclass AS (SELECT class, ROWNUM id from v$waitstat) +select /*+ LEADING(bh) */ + bh.obj bhla_obj, + o.object_type, + o.owner||'.'||o.object_name bhla_object, + bclass.class, + bh.tch, + file# ||' '||dbablk bhla_DBA, + bh.state, + bh.mode_held, + bh.dirty_queue DQ, + trim(to_char(bh.flag, 'XXXXXXXX')) ||':'||trim(to_char(bh.lru_flag, 'XXXXXXXX')) flg_lruflg +from + x$bh bh, + dba_objects o, + bclass +where + bh.obj = o.data_object_id +and bh.class = bclass.id (+) +and bh.class = &1 +--and hladdr = hextoraw(lpad('&1', vsize(hladdr)*2 , '0')) +order by + tch desc +/ diff --git a/tpt/bhdo.sql b/tpt/bhdo.sql new file mode 100644 index 0000000..bde3b94 --- /dev/null +++ b/tpt/bhdo.sql @@ -0,0 +1,58 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + hladdr +-- , blsiz +-- , nxt_hash +-- , prv_hash +-- , nxt_repl +-- , prv_repl + , flag + , rflag + , sflag + , lru_flag + , ts# + , file# +-- , dbarfil + , dbablk + , class + , state + , mode_held + , changes + , cstate + , le_addr + , dirty_queue + , set_ds + , obj + , ba + , cr_scn_bas + , cr_scn_wrp + , cr_xid_usn + , cr_xid_slt + , cr_xid_sqn + , cr_uba_fil + , cr_uba_blk + , cr_uba_seq + , cr_uba_rec + , cr_sfl + , cr_cls_bas + , cr_cls_wrp + , lrba_seq + , lrba_bno + , hscn_bas + , hscn_wrp + , hsub_scn + , us_nxt + , us_prv + , wa_nxt + , wa_prv + , obj_flag + , tch + , tim +FROM + x$bh +WHERE + obj IN (&1) +/ + diff --git a/tpt/bhfp.sql b/tpt/bhfp.sql new file mode 100644 index 0000000..ba10c5b --- /dev/null +++ b/tpt/bhfp.sql @@ -0,0 +1,20 @@ +SELECT + obj + , class + , decode(state,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec' + ,6,'irec',7,'write',8,'pi', 9,'memory',10,'mwrite' + ,11,'donated', 12,'protected', 13,'securefile', 14 + ,'siop',15,'recckpt', 16, 'flashfree', 17, 'flashcur', 18, 'flashna') state + , hladdr + , cr_rfcnt + , shr_rfcnt + , fp_whr + , fp_scn_bas + , fp_scn_wrp +FROM + x$bh +WHERE + cr_rfcnt + shr_rfcnt > 0 +AND (&1) +/ + diff --git a/tpt/bhla.sql b/tpt/bhla.sql new file mode 100644 index 0000000..f526978 --- /dev/null +++ b/tpt/bhla.sql @@ -0,0 +1,49 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: bhla.sql (Buffer Headers by Latch Address) +-- Purpose: Report which blocks are in buffer cache, protected by a cache +-- buffers chains child latch +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @bhla +-- @bhla 27E5A780 +-- +-- +-- Other: This script reports all buffers "under" the given cache buffers +-- chains child latch, their corresponding segment names and +-- touch counts (TCH). +-- +-------------------------------------------------------------------------------- + +col bhla_object head object for a40 truncate +col bhla_DBA head DBA for a20 +col bhla_obj head OBJ for 99999999999 + +WITH bclass AS (SELECT class, ROWNUM id from v$waitstat) +select /*+ LEADING(bh) */ + bh.obj bhla_obj, + o.object_type, + o.owner||'.'||o.object_name bhla_object, + bclass.class, + bh.tch, + file# ||' '||dbablk bhla_DBA, + bh.state, + bh.mode_held, + bh.dirty_queue DQ, + trim(to_char(bh.flag, 'XXXXXXXX')) ||':'||trim(to_char(bh.lru_flag, 'XXXXXXXX')) flg_lruflg +from + x$bh bh, + dba_objects o, + bclass +where + bh.obj = o.data_object_id +and bh.class = bclass.id (+) +and hladdr = hextoraw(lpad('&1', vsize(hladdr)*2 , '0')) +order by + tch desc +/ diff --git a/tpt/bhobjects.sql b/tpt/bhobjects.sql new file mode 100644 index 0000000..3d7b9d2 --- /dev/null +++ b/tpt/bhobjects.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col bhobjects_owner head OWNER for a30 +col bhobjects_object_name head OBJECT_NAME for a30 +col bhobjects_subobject_name head SUBOBJECT_NAME for a30 +col bhobjects_object_type head OBJECT_TYPE for a20 word_wrap + + + +select * from ( + select + count(*) buffers + , o.owner bhobjects_owner + , o.object_name bhobjects_object_name + , o.subobject_name bhobjects_subobject_name + , o.object_type bhobjects_object_type + from + v$bh bh + , dba_objects o + where + bh.objd = o.data_object_id + group by + o.owner, o.object_name, o.subobject_name, o.object_type + order by + buffers desc +) +where rownum <=30 +/ + diff --git a/tpt/bhobjects2.sql b/tpt/bhobjects2.sql new file mode 100644 index 0000000..7203b74 --- /dev/null +++ b/tpt/bhobjects2.sql @@ -0,0 +1,78 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON + +col bhobjects_owner head OWNER for a30 +col bhobjects_object_name head OBJECT_NAME for a30 +col bhobjects_subobject_name head SUBOBJECT_NAME for a30 +col bhobjects_object_type head OBJECT_TYPE for a20 word_wrap + +select * from v$sgainfo; +select * from v$sga_dynamic_components; +select * from v$buffer_pool; + +SELECT * FROM ( + SELECT + TO_CHAR(ROUND(RATIO_TO_REPORT( ROUND(SUM(ts.block_size) / 1048576) ) OVER () * 100, 1), '999.9')||' %' "%BUFCACHE" + , ROUND(SUM(ts.block_size) / 1048576) MB + --, count(*) buffers + , bh.objd dataobj_id + , ts.tablespace_name + , o.owner bhobjects_owner + , o.object_name bhobjects_object_name + , o.subobject_name bhobjects_subobject_name + , o.object_type bhobjects_object_type + FROM + v$bh bh + , (SELECT data_object_id + , MIN(owner) owner + , MIN(object_name) object_name + , MIN(subobject_name) subobject_name + , MIN(object_type) object_type + , COUNT(*) num_duplicates + FROM dba_objects GROUP BY data_object_id) o + , v$tablespace vts + , dba_tablespaces ts + WHERE + bh.objd = o.data_object_id (+) + AND bh.ts# = vts.ts# + AND vts.name = ts.tablespace_name + GROUP BY + bh.objd, ts.tablespace_name, o.owner, o.object_name, o.subobject_name, o.object_type + ORDER BY + mb DESC +) +WHERE ROWNUM <=30 +/ + +SELECT * FROM ( + SELECT + TO_CHAR(ROUND(RATIO_TO_REPORT( ROUND(SUM(ts.block_size) / 1048576) ) OVER () * 100, 1), '999.9')||' %' "%BUFCACHE" + , ROUND(SUM(ts.block_size) / 1048576) MB + , ts.tablespace_name + , bh.status + FROM + v$bh bh + , (SELECT data_object_id + , MIN(owner) owner + , MIN(object_name) object_name + , MIN(subobject_name) subobject_name + , MIN(object_type) object_type + , COUNT(*) num_duplicates + FROM dba_objects GROUP BY data_object_id) o + , v$tablespace vts + , dba_tablespaces ts + WHERE + bh.objd = o.data_object_id (+) + AND bh.ts# = vts.ts# + AND vts.name = ts.tablespace_name + GROUP BY + ts.tablespace_name + , bh.status + ORDER BY + mb DESC +) +WHERE ROWNUM <=30 +/ + diff --git a/tpt/bitmask.sql b/tpt/bitmask.sql new file mode 100644 index 0000000..cb4dbba --- /dev/null +++ b/tpt/bitmask.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + level - 1 bit + ,DECODE(bitand(to_number('&1','XXXXXXXXXXXXXXXX'),power(2,level-1)),0,0,1) is_set + ,to_char(power(2,level-1),'XXXXXXXXXXXXXXXX') val_hex + ,bitand(to_number('&1','XXXXXXXXXXXXXXXX'),power(2,level-1)) val_dec +from + dual +where + DECODE(bitand(to_number('&1','XXXXXXXXXXXXXXXX'),power(2,level-1)),0,0,1) != 0 +connect by + level <= (select log(2,to_number('&1','XXXXXXXXXXXXXXXX'))+2 from dual) +/ diff --git a/tpt/break.sql b/tpt/break.sql new file mode 100644 index 0000000..899a44b --- /dev/null +++ b/tpt/break.sql @@ -0,0 +1,93 @@ +-- Copyright 2025 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: break.sql +-- Purpose: Display the PREV_SQL_ID of sessions if this query manages to +-- to catch a session in "SQL*Net break/reset to client" wait event +-- +-- Otherwise, scan the V$SESSION_WAIT_HISTORY (different from ASH) +-- and if seeing any break/reset waits in history (10 last waits) +-- then show whatever happens to be the current & prev SQL_ID for +-- the related session (in this case, the SQL_ID may be not related +-- to the error at all, as the app has moved on since the break +-- in history happened. +-- +-- Author: Tanel Poder +-- Copyright: (c) https://tanelpoder.com +-- +-- Usage: @break +-- (you can run it multiple times in a loop, to increase the chance +-- to catch an error handling in progress) +-- +-------------------------------------------------------------------------------- + +COL username FOR A30 +COL break_op FOR A9 +COL break_event HEAD EVENT FOR A30 +COL break_wait_us HEAD WAIT_US +COL break_run_us HEAD RUN_US +COL break_ses_type HEAD TYPE FOR A4 + +BREAK ON inst_id SKIP 1 DUP ON sid SKIP 1 DUP + +WITH swaits AS ( + SELECT + 'CUR' AS type, inst_id, sid, 0 AS seq# + , CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' + ELSE event + END AS event + , CASE WHEN state != 'WAITING' THEN NULL -- don't show old p2 if not in wait + ELSE p2 + END AS p2 + , username + , sql_id + , prev_sql_id + , null AS wait_time_micro, null AS time_since_last_wait_micro + FROM + gv$session s + WHERE + 1=1 -- get all sessions to look up current activity if only ses wait history shows a break + UNION ALL + SELECT + 'SWH', inst_id, sid, seq#, event, p2, null, null, null, wait_time_micro, time_since_last_wait_micro + FROM + gv$session_wait_history + WHERE + event = 'SQL*Net break/reset to client' +) +SELECT + type AS break_ses_type + , inst_id + , sid + , seq# waits_ago + , event break_event + , CASE WHEN event = 'SQL*Net break/reset to client' THEN + CASE WHEN p2 = 0 THEN 'reset' WHEN p2 = 1 THEN 'break' END||'('||TO_CHAR(p2)||')' + END break_op + , prev_sql_id + , wait_time_micro AS break_wait_us + , time_since_last_wait_micro AS break_run_us + , username -- could add module, action, etc into this script + , sql_id AS curr_sql_id -- usually NULL for CUR as the error cleans up state returning ORA- error and break wait shows up +FROM + swaits s1 +WHERE + event = 'SQL*Net break/reset to client' +OR (type = 'CUR' AND EXISTS ( + SELECT 1 FROM swaits s2 + WHERE + s2.event = 'SQL*Net break/reset to client' + AND s2.type = 'SWH' + AND s2.inst_id = s1.inst_id + AND s2.sid = s1.sid + ) + ) +ORDER BY + inst_id + , sid + , seq# +/ + + diff --git a/tpt/bufp.sql b/tpt/bufp.sql new file mode 100644 index 0000000..191aa5a --- /dev/null +++ b/tpt/bufp.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM v$buffer_pool; diff --git a/tpt/bufprof.sql b/tpt/bufprof.sql new file mode 100644 index 0000000..7328969 --- /dev/null +++ b/tpt/bufprof.sql @@ -0,0 +1,93 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: BufProf 1.04 ( Buffer Get Profiler ) +-- Purpose: Display buffer gets done by a session and their reason +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @bufprof <#samples> +-- @bufprof 142 1000 +-- +-- Other: This is an experimental script, which may or may not work for you +-- It's dependent on the size of the cache buffers handles array +-- (db_handles), so if you have lots of sessions configured +-- scanning this repeatedly may be slow. +-- +-------------------------------------------------------------------------------- + + +--DEF bufprof_cols=KCBBFSO_TYP,KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),KCBBFWHR,KCBBFWHY,w.KCBWHDES,KCBBPBH,KCBBPBF,m.ksmmmval,p.sid,p.username,p.program +--DEF bufprof_cols=KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES,KCBBPBF,m.ksmmmval,p.sid +--DEF bufprof_cols=p.sid,kcbbfwhy,kcbbfso_flg,TO_CHAR(kcbbfflg,'XXXXXXXX'),TO_CHAR(KCBBFCM,'XXXXXXXX'),KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES +DEF bufprof_cols=p.sid,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES + +COL kcbwhdes FOR A35 + +COL bufprof_addrlen NEW_VALUE addrlen +COL bufprof_addrmask NEW_VALUE addrmask + +SET TERMOUT OFF +SELECT VSIZE(addr) bufprof_addrlen, RPAD('0',VSIZE(addr)*2,'X') bufprof_addrmask FROM x$kcbsw WHERE ROWNUM = 1; +SET TERMOUT ON + +DEF num_samples=&2 + +PROMPT +PROMPT -- BufProf 1.04 (experimental) by Tanel Poder ( http://www.tanelpoder.com ) +PROMPT + +-- hack, newer connect by code crashes +--alter session set optimizer_features_enable = '9.2.0.8'; + +--explain plan for +WITH + s AS (SELECT /*+ NO_MERGE MATERIALIZE */ 1 r FROM DUAL CONNECT BY LEVEL <= &num_samples), + p AS (SELECT p.addr paddr, s.saddr saddr, s.sid sid, p.spid spid, s.username, s.program, s.terminal, s.machine + FROM v$process p, v$session s WHERE s.paddr = p.addr), + t1 AS (SELECT hsecs FROM v$timer), + samples AS ( + SELECT /*+ ORDERED NO_MERGE USE_NL(bf) USE_NL(m) USE_NL(p) USE_NL(w) */ + &bufprof_cols, + --m.ksmmmval proc_so, +-- bf.KCBBPBF, + COUNT(*) total_samples + FROM + s, -- this trick is here to avoid an ORA-600 in kkqcbydrv:1 + (SELECT /*+ NO_MERGE */ + b.*, + HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(b.kcbbfso_own),'&addrmask')+&addrlen*2,'&addrmask')) ) call_so -- call state object + FROM x$kcbbf b + WHERE 1=1 + AND bitand(b.KCBBFSO_FLG,1) = 1 + --AND b.KCBBFCM > 0 + ) bf, + --X$KSMMEM m, + p, + x$kcbwh w + WHERE + 1=1 + --AND bf.call_so = m.addr + ---AND rawtohex(bf.call_so) > '0000000000000002' + --AND m.ksmmmval = p.paddr -- compare the fetched word to process state object address + AND BITAND(bf.KCBBFSO_FLG,1) = 1 -- buffer handle in use + AND bf.kcbbfwhr = w.indx + --AND (p.sid LIKE '&1' OR p.sid IS NULL) + AND (p.sid LIKE '&1') + AND (p.sid != (select sid from v$mystat where rownum = 1)) + GROUP BY &bufprof_cols --, m.ksmmmval --,bf.KCBBPBF + ), + t2 AS (SELECT hsecs FROM v$timer) +SELECT /*+ ORDERED */ + s.* + , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &num_samples active_pct +FROM + t1, + samples s, + t2 +ORDER BY + s.total_samples DESC +/ diff --git a/tpt/bufprof_wrong.sql b/tpt/bufprof_wrong.sql new file mode 100644 index 0000000..c2b760c --- /dev/null +++ b/tpt/bufprof_wrong.sql @@ -0,0 +1,62 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--DEF bufprof_cols=KCBBFSO_TYP,KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),KCBBFWHR,KCBBFWHY,w.KCBWHDES,KCBBPBH,KCBBPBF,m.ksmmmval,p.sid,p.username,p.program +--DEF bufprof_cols=KCBBFSO_OWN,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES,KCBBPBF,m.ksmmmval,p.sid +DEF bufprof_cols=kcbbfso_own,p.sid,DECODE(KCBBFCR,1,'CR','CUR'),w.KCBWHDES + +COL kcbwhdes FOR A30 + +COL bufprof_addrlen NEW_VALUE addrlen +COL bufprof_addrmask NEW_VALUE addrmask + +SET TERMOUT OFF +SELECT VSIZE(addr) bufprof_addrlen, LPAD('X',VSIZE(addr)*2,'X') bufprof_addrmask FROM x$kcbsw WHERE ROWNUM = 1; +SET TERMOUT ON + +DEF num_samples=&2 + +WITH + s AS (SELECT /*+ NO_MERGE MATERIALIZE */ 1 r FROM DUAL CONNECT BY LEVEL <= &num_samples), + p AS (SELECT p.addr paddr, s.saddr saddr, s.sid sid, p.spid spid, s.username, s.program, s.terminal, s.machine + FROM v$process p, v$session s WHERE s.paddr = p.addr), + t1 AS (SELECT hsecs FROM v$timer), + samples AS ( + SELECT /*+ ORDERED USE_NL(bf) USE_NL(m) USE_NL(b) */ + &bufprof_cols, + COUNT(*) total_samples + FROM + s, -- this trick is here to avoid an ORA-600 in kkqcbydrv:1 + (SELECT /*+ NO_MERGE */ caddr top_so, bf.*, m.* FROM + (SELECT /*+ NO_MERGE */ + b.*, + HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(b.kcbbfso_own),'&addrmask')+&addrlen*2,'&addrmask')) ) caddr -- call SO address + FROM x$kcbbf b + WHERE bitand(b.KCBBFSO_FLG,1) = 1 + ) bf, + x$ksmmem m + WHERE + m.addr = bf.caddr + AND BITAND(bf.KCBBFSO_FLG,1) = 1 -- buffer handle in use + ) b, + p, + x$kcbwh w + WHERE + --m.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(bf.KCBBFSO_OWN),'&addrmask')+&addrlen,'&addrmask')) ) + --m.addr = bf.KCBBFSO_OWN + b.top_SO = p.paddr(+) + AND b.kcbbfwhr = w.indx + AND (p.sid LIKE '&1' OR p.sid IS NULL) + GROUP BY &bufprof_cols + ), + t2 AS (SELECT hsecs FROM v$timer) +SELECT /*+ ORDERED */ + s.* + , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &num_samples active_pct +FROM + t1, + samples s, + t2 +ORDER BY + s.total_samples DESC +/ diff --git a/tpt/bugs/sql_monitor_force.sql b/tpt/bugs/sql_monitor_force.sql new file mode 100644 index 0000000..ceb273d --- /dev/null +++ b/tpt/bugs/sql_monitor_force.sql @@ -0,0 +1,14 @@ +SELECT banner_full FROM v$version; + +CREATE TABLE force_sqlmon TABLESPACE users AS SELECT * FROM dba_objects; + +-- SELECT * FROM force_sqlmon; gives SQL_ID of 6v717k15utxsf + +ALTER SYSTEM SET EVENTS 'sql_monitor [sql: 6v717k15utxsf] force=true'; + +SET TERMOUT OFF +SELECT * FROM force_sqlmon; +SET TERMOUT ON + +SELECT * FROM v$sql_monitor WHERE sql_text LIKE '%force_sqlmon%'; + diff --git a/tpt/bugs/sqldev_break.sql b/tpt/bugs/sqldev_break.sql new file mode 100644 index 0000000..5d8b34b --- /dev/null +++ b/tpt/bugs/sqldev_break.sql @@ -0,0 +1,5 @@ +break on manager_id skip 1 + +select manager_id, first_name, last_name +from hr.employees +order by 1 desc; diff --git a/tpt/c.sql b/tpt/c.sql new file mode 100644 index 0000000..cf42638 --- /dev/null +++ b/tpt/c.sql @@ -0,0 +1,57 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col c_objtype head OBJTYPE for a20 +col c_kglhdnsp head NAMESPACE for a20 +col c_kglnaobj head SQL_TEXT for a40 word_wrap &1 +col c_kglnaown head OWNER for a25 word_wrap &1 +col c_kglnadlk head DB_LINK for a25 word_wrap &1 + +select /*+ ORDERED USE_NL(o) */ + kglhdadr, + kglhdpar, + kglnatim tstamp, +-- kglnaptm prev_tstamp, +-- decode(kglhdnsp,0,'CURSOR',1,'TABLE/PROCEDURE',2,'BODY',3,'TRIGGER', +-- 4,'INDEX',5,'CLUSTER',6,'OBJECT',13,'JAVA SOURCE',14,'JAVA RESOURCE', 15,'REPLICATED TABLE OBJECT', +-- 16,'REPLICATION INTERNAL PACKAGE', 17,'CONTEXT POLICY',18,'PUB_SUB',19,'SUMMARY',20,'DIMENSION', +-- 21,'APP CONTEXT',22,'STORED OUTLINE',23,'RULESET',24,'RSRC PLAN', 25,'RSRC CONSUMER GROUP', +-- 26,'PENDING RSRC PLAN',27,'PENDING RSRC CONSUMER GROUP', 28,'SUBSCRIPTION',29,'LOCATION',30,'REMOTE OBJECT', +-- 31,'SNAPSHOT METADATA',32,'JAVA SHARED DATA',33,'SECURITY PROFILE', 'INVALID NAMESPACE') c_kglhdnsp, + decode(bitand(kglobflg,3),0,'NOT LOADED',2,'NON-EXISTENT',3,'INVALID STATUS', + decode(kglobtyp,0,'CURSOR',1,'INDEX',2,'TABLE',3,'CLUSTER',4,'VIEW', 5,'SYNONYM',6,'SEQUENCE',7,'PROCEDURE', + 8,'FUNCTION',9,'PACKAGE',10, 'NON-EXISTENT',11,'PACKAGE BODY',12,'TRIGGER',13,'TYPE',14,'TYPE BODY', + 15,'OBJECT',16,'USER',17,'DBLINK',18,'PIPE',19,'TABLE PARTITION', 20,'INDEX PARTITION',21,'LOB',22,'LIBRARY', + 23,'DIRECTORY',24,'QUEUE', 25,'INDEX-ORGANIZED TABLE',26,'REPLICATION OBJECT GROUP', 27,'REPLICATION PROPAGATOR', + 28,'JAVA SOURCE',29,'JAVA CLASS',30,'JAVA RESOURCE',31,'JAVA JAR', 32,'INDEX TYPE',33, 'OPERATOR', + 34,'TABLE SUBPARTITION',35,'INDEX SUBPARTITION', 36, 'REPLICATED TABLE OBJECT',37,'REPLICATION INTERNAL PACKAGE', + 38,'CONTEXT POLICY',39,'PUB_SUB',40,'LOB PARTITION',41,'LOB SUBPARTITION', 42,'SUMMARY',43,'DIMENSION', + 44,'APP CONTEXT',45,'STORED OUTLINE',46,'RULESET', 47,'RSRC PLAN',48,'RSRC CONSUMER GROUP',49,'PENDING RSRC PLAN', + 50,'PENDING RSRC CONSUMER GROUP',51,'SUBSCRIPTION',52,'LOCATION', 53,'REMOTE OBJECT',54,'SNAPSHOT METADATA', + 55,'IFS', 56,'JAVA SHARED DATA',57,'SECURITY PROFILE','INVALID TYPE')) as cc_objtype, + kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6 heapsize, + kglhdldc, + kglhdexc, + kglhdlkc, + kglobpc0, + decode(kglhdkmk,0,'NO','YES'), + kglhdclt, + kglhdivc, + kglhdkmk, + kglnaown c_kglnaown, + kglnaobj c_kglnaobj, + kglnadlk c_kglnadlk +from + v$open_cursor c +, x$kglob o +where + c.hash_Value = o.kglnahsh +and c.address = o.kglhdadr +--and o.kglnaobj = 'select /*tanel*/ * from dual' +--and c.sid = (select sid from v$mystat where rownum = 1) +and c.sid in (&2) +--kglhdadr in ( +-- select /**/ address from v$open_cursor +-- where sid = (select sid from v$mystat where rownum = 1) +-- ) +/ diff --git a/tpt/calc.sql b/tpt/calc.sql new file mode 100644 index 0000000..b5a68fe --- /dev/null +++ b/tpt/calc.sql @@ -0,0 +1,56 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: calc.sql +-- Purpose: Basic calculator and dec/hex converter +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @calc +-- @calc 10 + 10 +-- @calc 10 + 0x10 +-- @calc 0xFFFF - 0x5F +-- @calc xBB * 1234 +-- Other: +-- Can calculate only 2 operands a time +-- You can use just "x" instead of "0x" for indicating hex numbers +-- +-------------------------------------------------------------------------------- + +COL calc_dec HEAD "DEC" FOR 999999999999999999999999999.999999 +COL calc_hex HEAD "HEX" FOR A20 JUSTIFY RIGHT + + +with +p1 as ( + select case + when lower('&1') like '%x%' then 'XXXXXXXXXXXXXXXXXX' + else '999999999999999999999999999.9999999999' + end + format + from dual +), +p3 as ( + select case + when lower('&3') like '%x%' then 'XXXXXXXXXXXXXXXXXX' + else '999999999999999999999999999.9999999999' + end + format + from dual +) +select + -- decimal + to_number(substr('&1',instr(upper('&1'),'X')+1), p1.format) + &2 + to_number(substr('&3',instr(upper('&3'),'X')+1), p3.format) calc_dec, + -- hex + to_char( to_number(substr('&1',instr(upper('&1'),'X')+1), p1.format) + &2 + to_number(substr('&3',instr(upper('&3'),'X')+1), p3.format) + , 'XXXXXXXXXXXXXXXXXXX') calc_hex +from + p1,p3 +/ diff --git a/tpt/cancel.sql b/tpt/cancel.sql new file mode 100644 index 0000000..d45b9a5 --- /dev/null +++ b/tpt/cancel.sql @@ -0,0 +1,43 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +-------------------------------------------------------------------------------- +-- +-- File name: cancel.sql +-- Purpose: Generates commands for canceling selected sessions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @cancel (example: @cancel username='SYSTEM') +-- @cancel sid=150 +-- @cancel username='SYSTEM' +-- @cancel "username='APP' and program like 'sqlplus%'" +-- +-- Other: Oracle 12.2 or newer required! +-- +-- This script doesnt actually cancel any sessions +-- it just generates the ALTER SYSTEM CANCEL SQL +-- commands, the user can select and paste in the selected +-- commands manually +-- +-- See more info at: +-- https://blog.tanelpoder.com/2010/02/17/how-to-cancel-a-query-running-in-another-session/ +-- +-- Oracle 12.2 and 18c take SID,SERIAL#[,@inst_id,sql_id] as arguments. +-- Just SID,SERIAL# are enough for canceling the currently running SQL +-- +-- An older resource manager technique that doesn't always seem to work (not fast enough at least): +-- +-- EXEC DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS (sid, serial#, 'CANCEL_SQL'); +-- +-------------------------------------------------------------------------------- + +SELECT 'ALTER SYSTEM CANCEL SQL '''||sid||','||serial#||''' -- ' + ||username||' ['||NVL(sql_id, 'sql_id is null')||'] @'||machine||' ('||program||');' commands_to_verify_and_run +FROM v$session +WHERE &1 +AND sid != (SELECT sid FROM v$mystat WHERE ROWNUM = 1) +/ + diff --git a/tpt/cbo_helper.sql b/tpt/cbo_helper.sql new file mode 100644 index 0000000..bbba67a --- /dev/null +++ b/tpt/cbo_helper.sql @@ -0,0 +1,211 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +begin + for i in (select value from v$parameter where name = 'user_dump_dest') loop + execute immediate 'create or replace directory e2sn_udump as '''||i.value||''''; + end loop; +end; +/ + + +create or replace package e2sn_monitor as + function get_trace_file (file_name in varchar2) return dbms_debug_vc2coll pipelined; + function get_session_trace ( p_sid in number default sys_context('userenv','sid') ) return dbms_debug_vc2coll pipelined; + procedure cbo_trace_on; + procedure cbo_trace_off; + procedure sql_trace_on (p_waits in boolean default true, p_binds in boolean default true); + procedure sql_trace_off; + + procedure set_tracefile_identifier(p_text in varchar2); + function trace_dump (p_exec_statement in varchar2) return dbms_debug_vc2coll pipelined; + function test (p_select_statement in varchar2 default 'select count(*) from dba_segments') return dbms_debug_vc2coll pipelined; +end e2sn_monitor; +/ + + +create or replace package body e2sn_monitor as + + procedure sql_trace_on (p_waits in boolean default true, p_binds in boolean default true) + as + begin + execute immediate 'alter session set events ''10046 trace name context forever, level 12'''; + --dbms_monitor.session_trace_enable(waits=>p_waits, binds=>p_binds); + end; -- sql_trace_on + + procedure sql_trace_off + as + begin + execute immediate 'alter session set events ''10046 trace name context off'''; + --dbms_monitor.session_trace_disable; + end; -- sql_trace_off + + procedure cbo_trace_on + as + begin + --dbms_output.put_line('setting 10053'); + execute immediate 'alter session set events ''10053 trace name context forever, level 1'''; + --execute immediate 'alter session set "_optimizer_trace"=all'; + --dbms_output.put_line('event 10053 set'); + end cbo_trace_on; + + procedure cbo_trace_off + as + begin + execute immediate 'alter session set events ''10053 trace name context off'''; + --execute immediate 'alter session set "_optimizer_trace"=none'; + end cbo_trace_off; + + procedure set_tracefile_identifier(p_text in varchar2) + as + begin + dbms_output.put_line('trci='||p_text); + execute immediate 'alter session set tracefile_identifier='||p_text; + end; + + function trace_dump (p_exec_statement in varchar2) return dbms_debug_vc2coll pipelined + as + j number; + l_prefix varchar2(100); + begin + l_prefix := upper('CBOHELP_'||to_char(sysdate, 'YYYYMMDD_HH24_MI_SS')); + + set_tracefile_identifier(l_prefix); + + --cbo_trace_on; + --sql_trace_on; + + execute immediate p_exec_statement ||' /* E2SN CBO helper: '||l_prefix||'*/ '; + dbms_output.put_line(j); + + --sql_trace_off; + --cbo_trace_off; + + for i in (select column_value from table(e2sn_monitor.get_session_trace)) loop + pipe row (i.column_value); + end loop; + end trace_dump; + + function test (p_select_statement in varchar2 default 'select count(*) from dba_segments') return dbms_debug_vc2coll pipelined + as + j number; + l_prefix varchar2(100); + begin + l_prefix := upper('CBOHELP_'||to_char(sysdate, 'YYYYMMDD_HH24_MI_SS')); + + set_tracefile_identifier(l_prefix); + + --cbo_trace_on; + --sql_trace_on; + + execute immediate p_select_statement ||' /* E2SN CBO helper: '||l_prefix||'*/ ' INTO j; + dbms_output.put_line(j); + + --sql_trace_off; + --cbo_trace_off; + + for i in (select column_value from table(e2sn_monitor.get_session_trace)) loop + pipe row (i.column_value); + end loop; + end test; + + function get_trace_file (file_name in varchar2) return dbms_debug_vc2coll pipelined + as + invalid_file_op exception; + pragma exception_init(invalid_file_op, -29283); + + f utl_file.file_type; + line varchar2(32767); + begin + + dbms_output.put_line('opening file='||file_name); + f := utl_file.fopen('E2SN_UDUMP', file_name, 'R', 32767); + + loop + begin + utl_file.get_line(f, line); + exception + when no_data_found then utl_file.fclose(f) ; exit; + when others then utl_file.fclose(f) ; raise; + end; + + if length(line) > 1000 then + for i in 0..trunc(length(line)/1000) loop + pipe row(substr(line,i*1000+1,1000)); + end loop; + else + pipe row(line); + end if; + + end loop; + + return; + + exception + when invalid_file_op then raise_application_error(-20000, 'ERROR: Unable to open tracefile. Maybe it does not exist'); + end get_trace_file; + + + function get_session_trace ( p_sid in number default sys_context('userenv','sid') ) return dbms_debug_vc2coll pipelined + as + tracefile_name varchar2(4000); + tracefile_name_lower varchar2(4000); + begin + + begin + select par.value ||'/'||(select instance_name from v$instance) ||'_ora_'||s.suffix|| '.trc' into tracefile_name + from + v$parameter par + , (select spid||case when traceid is not null then '_'||traceid else null end suffix + from v$process where addr = (select paddr from v$session + where sid = p_sid + ) + ) s + where name = 'user_dump_dest'; + + select par.value ||'/'||(select lower(instance_name) from v$instance) ||'_ora_'||s.suffix|| '.trc' into tracefile_name_lower + from + v$parameter par + , (select spid||case when traceid is not null then '_'||traceid else null end suffix + from v$process where addr = (select paddr from v$session + where sid = p_sid + ) + ) s + where name = 'user_dump_dest'; + + exception + when no_data_found then raise_application_error(-20000, 'ERROR: No matching SID/SERIAL# combination found'); + end; + + begin + for i in (select column_value from table(get_trace_file( tracefile_name ))) loop + pipe row(i.column_value); + end loop; + + return; + + exception + when others then + begin + for i in (select column_value from table(get_trace_file( tracefile_name_lower ))) loop + pipe row(i.column_value); + end loop; + + return; + exception + when others then raise_application_error(-20000, 'Unknown error: '||sqlerrm||chr(10)||dbms_utility.format_error_backtrace); + end; + end; + + return; + + end get_session_trace; + +end e2sn_monitor; +/ +show err; + + +-- grant execute on e2sn_monitor to public; +-- create public synonym e2sn_monitor for e2sn_monitor; + diff --git a/tpt/cborun.sql b/tpt/cborun.sql new file mode 100644 index 0000000..c510c23 --- /dev/null +++ b/tpt/cborun.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +exec e2sn_monitor.cbo_trace_on; + +def cbo_suffix ="/* cbotrace &_DATE */" + +clear buffer +1 &1 &cbo_suffix +/ + +exec e2sn_monitor.cbo_trace_off + +prompt Fetching tracefile... +set trimspool on termout off +spool &_tpt_tempdir/cbotrace_&_tpt_tempfile..txt + +prompt &1 &cbo_suffix +select column_value CBO_TRACE +from table (e2sn_monitor.get_session_trace) +where regexp_like(column_value, '&2', 'i') or lower(column_value) like lower('&2'); + +spool off +set termout on + +set define ^ +host mvim ^_tpt_tempdir/cbotrace_^_tpt_tempfile..txt & +set define & + + diff --git a/tpt/cbothis.sql b/tpt/cbothis.sql new file mode 100644 index 0000000..0f5c9b6 --- /dev/null +++ b/tpt/cbothis.sql @@ -0,0 +1,28 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +exec e2sn_monitor.cbo_trace_on; + +9999999 /* cbotrace &_DATE */ +/ + +exec e2sn_monitor.cbo_trace_off + +prompt Fetching tracefile... +set trimspool on termout off +spool &_tpt_tempdir/cbotrace_&_tpt_tempfile..txt + +list +select column_value CBO_TRACE +from table (e2sn_monitor.get_session_trace) +where regexp_like(column_value, '&1', 'i') or lower(column_value) like lower('&1'); + +spool off +set termout on + +set define ^ +host mvim ^_tpt_tempdir/cbotrace_^_tpt_tempfile..txt & +set define & + + diff --git a/tpt/cc.sql b/tpt/cc.sql new file mode 100644 index 0000000..49f77d0 --- /dev/null +++ b/tpt/cc.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT ALTER SESSION SET container = &1;; +ALTER SESSION SET container = &1; +@i diff --git a/tpt/ccr.sql b/tpt/ccr.sql new file mode 100644 index 0000000..9d09578 --- /dev/null +++ b/tpt/ccr.sql @@ -0,0 +1 @@ +@cc cdb$root diff --git a/tpt/channels.sql b/tpt/channels.sql new file mode 100644 index 0000000..1eab698 --- /dev/null +++ b/tpt/channels.sql @@ -0,0 +1,70 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: channels.sql +-- Purpose: Report KSR channel message counts by channel endpoints +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @channels +-- +-- Example: @channels context_ptr=HEXTORAW('000000008FED7240') +-- @channels 1=1 +-- @channels sid=123 +-- +-------------------------------------------------------------------------------- + + +--break on channel_name skip 1 +COL program head PROGRAM FOR a20 TRUNCATE +COL channels_descr HEAD DESCR FOR A10 +COL channels_username HEAD USERNAME FOR A20 + +SELECT * FROM ( + SELECT + cd.name_ksrcdes channel_name + , cd.id_ksrcdes channels_descr + , CASE WHEN BITAND(c.flags_ksrchdl, 1) = 1 THEN 'PUB ' END || + CASE WHEN BITAND(c.flags_ksrchdl, 2) = 2 THEN 'SUB ' END || + CASE WHEN BITAND(c.flags_ksrchdl, 16) = 16 THEN 'INA' END flags + , c.mesgcnt_ksrchdl mesg_count + , NVL(s.sid, -1) sid + , p.spid + , SUBSTR(NVL(s.program,p.program),INSTR(NVL(s.program,p.program),'(')) program + , CASE WHEN BITAND(cd.scope_ksrcdes, 1) = 1 THEN 'ANY ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 2) = 2 THEN 'LGWR ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 4) = 4 THEN 'DBWR ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 8) = 8 THEN 'PQ ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 256) = 256 THEN 'REG ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 512) = 512 THEN 'NFY ' END scope + , c.ctxp_ksrchdl context_ptr + , c.kssobown owning_so + , p.addr paddr + , c.owner_ksrchdl owning_proc + , s.serial# + , s.username channels_username + , s.type + , cd.maxsize_ksrcdes + , EVTNUM_KSRCHDL + FROM + x$ksrchdl c + , v$process p + , v$session s + , X$KSRCCTX ctx + , X$KSRCDES cd + WHERE + s.paddr (+) = c.owner_ksrchdl + AND p.addr (+) = c.owner_ksrchdl + AND c.ctxp_ksrchdl = ctx.addr + AND cd.indx = ctx.name_ksrcctx +-- AND bitand(c.kssobflg,1) = 1 +-- AND lower(cd.name_ksrcdes) like '%&1%' +) +WHERE &1 +ORDER BY + channel_name + , flags +/ diff --git a/tpt/channels2.sql b/tpt/channels2.sql new file mode 100644 index 0000000..7ea10f7 --- /dev/null +++ b/tpt/channels2.sql @@ -0,0 +1,67 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: channels.sql +-- Purpose: Report KSR channel message counts by channel endpoints +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @channels +-- +-------------------------------------------------------------------------------- + + +--break on channel_name skip 1 +col channels_program head PROGRAM for a20 truncate +col channels_descr FOR A30 word_wrap + +SELECT * FROM ( + SELECT + cd.name_ksrcdes channel_name + , cd.id_ksrcdes channels_descr + , c.ctxp_ksrchdl context_ptr + , c.addr handle_addr + , CASE WHEN BITAND(c.flags_ksrchdl, 1) = 1 THEN 'PUB ' END || + CASE WHEN BITAND(c.flags_ksrchdl, 2) = 2 THEN 'SUB ' END || + CASE WHEN BITAND(c.flags_ksrchdl, 16) = 16 THEN 'INA' END flags + , NVL(s.sid, -1) sid + , p.addr paddr + , p.program + , p.spid + , SUBSTR(NVL(s.program,p.program),INSTR(NVL(s.program,p.program),'(')) channels_program + , c.mesgcnt_ksrchdl mesg_count + , CASE WHEN BITAND(cd.scope_ksrcdes, 1) = 1 THEN 'ANY ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 2) = 2 THEN 'LGWR ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 4) = 4 THEN 'DBWR ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 8) = 8 THEN 'PQ ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 256) = 256 THEN 'REG ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 512) = 512 THEN 'NFY ' END scope + , c.kssobown owning_so + , c.owner_ksrchdl owning_proc + , s.serial# + , s.username + , s.type + , cd.maxsize_ksrcdes + , EVTNUM_KSRCHDL + FROM + x$ksrchdl c + , v$process p + , v$session s + , X$KSRCCTX ctx + , X$KSRCDES cd + WHERE + s.paddr (+) = c.owner_ksrchdl + AND p.addr (+) = c.owner_ksrchdl + AND c.ctxp_ksrchdl = ctx.addr + AND cd.indx = ctx.name_ksrcctx +-- AND bitand(c.kssobflg,1) = 1 +-- AND lower(cd.name_ksrcdes) like '%&1%' +) +WHERE &1 +ORDER BY + channel_name + , flags +/ diff --git a/tpt/channels3.sql b/tpt/channels3.sql new file mode 100644 index 0000000..8edfe40 --- /dev/null +++ b/tpt/channels3.sql @@ -0,0 +1,72 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: channels.sql +-- Purpose: Report KSR channel message counts by channel endpoints +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @channels +-- +-------------------------------------------------------------------------------- + + +--break on channel_name skip 1 +col channels_program head PROGRAM for a20 truncate +col channels_descr FOR A30 word_wrap + +SELECT * FROM ( + SELECT + c.NXTMSG_KSRCHDL + , cd.name_ksrcdes channel_name + , cd.id_ksrcdes channels_descr + , c.ctxp_ksrchdl context_ptr + , c.addr handle_addr + , CASE WHEN BITAND(c.flags_ksrchdl, 1) = 1 THEN 'PUB ' END || + CASE WHEN BITAND(c.flags_ksrchdl, 2) = 2 THEN 'SUB ' END || + CASE WHEN BITAND(c.flags_ksrchdl, 16) = 16 THEN 'INA' END flags + , NVL(s.sid, -1) sid + , p.addr paddr + , p.program + , p.spid + , SUBSTR(NVL(s.program,p.program),INSTR(NVL(s.program,p.program),'(')) channels_program + , c.mesgcnt_ksrchdl mesg_count + , CASE WHEN BITAND(cd.scope_ksrcdes, 1) = 1 THEN 'ANY ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 2) = 2 THEN 'LGWR ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 4) = 4 THEN 'DBWR ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 8) = 8 THEN 'PQ ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 256) = 256 THEN 'REG ' END || + CASE WHEN BITAND(cd.scope_ksrcdes, 512) = 512 THEN 'NFY ' END scope + , c.kssobown owning_so + , c.owner_ksrchdl owning_proc + , s.serial# + , s.username + , s.type + , cd.maxsize_ksrcdes + , EVTNUM_KSRCHDL + FROM + x$ksrchdl c + , v$process p + , v$session s + , X$KSRCCTX ctx + , X$KSRCDES cd + , X$KSRMSGO m + , X$KSRMSGDES md + WHERE + s.paddr (+) = c.owner_ksrchdl + AND p.addr (+) = c.owner_ksrchdl + AND c.ctxp_ksrchdl = ctx.addr + AND cd.indx = ctx.name_ksrcctx + AND c.nxtmsg_ksrchdl = m.addr(+) + AND m.NAME_KSRMSGO = md.indx (+) +-- AND bitand(c.kssobflg,1) = 1 +-- AND lower(cd.name_ksrcdes) like '%&1%' +) +WHERE &1 +ORDER BY + channel_name + , flags +/ diff --git a/tpt/chr.sql b/tpt/chr.sql new file mode 100644 index 0000000..3b0d0ca --- /dev/null +++ b/tpt/chr.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT CHR('&1') FROM dual; diff --git a/tpt/ci.sql b/tpt/ci.sql new file mode 100644 index 0000000..a94f385 --- /dev/null +++ b/tpt/ci.sql @@ -0,0 +1,2 @@ +PROMPT EXEC DBMS_SESSION.SET_IDENTIFIER('&1'); +EXEC DBMS_SESSION.SET_IDENTIFIER('&1'); diff --git a/tpt/cid.sql b/tpt/cid.sql new file mode 100644 index 0000000..a289f87 --- /dev/null +++ b/tpt/cid.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +exec dbms_session.set_identifier('&1') diff --git a/tpt/cinfo.sql b/tpt/cinfo.sql new file mode 100644 index 0000000..d22d8d0 --- /dev/null +++ b/tpt/cinfo.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT sid, client_info FROM v$session WHERE sid IN (&1); diff --git a/tpt/clt.sql b/tpt/clt.sql new file mode 100644 index 0000000..ece591b --- /dev/null +++ b/tpt/clt.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +oradebug setmypid +oradebug close_trace diff --git a/tpt/cnt.sql b/tpt/cnt.sql new file mode 100644 index 0000000..a2925a0 --- /dev/null +++ b/tpt/cnt.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- count rows in a table +select count(*) from &1; + diff --git a/tpt/cnta.sql b/tpt/cnta.sql new file mode 100644 index 0000000..257558a --- /dev/null +++ b/tpt/cnta.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select count(*) from &1 where &2; + diff --git a/tpt/cntg.sql b/tpt/cntg.sql new file mode 100644 index 0000000..2bd4d89 --- /dev/null +++ b/tpt/cntg.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select &2 , count(*) from &1 group by &2 order by 2 desc; diff --git a/tpt/cofef.sql b/tpt/cofef.sql new file mode 100644 index 0000000..6cf77c4 --- /dev/null +++ b/tpt/cofef.sql @@ -0,0 +1,65 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Compare Optimizer Features Enable Fix values +-- By Tanel Poder ( http://www.tanelpoder.com ) +-- Requires opt_param_matrix table to be created (using tools/optimizer/optimizer_features_matrix.sql) +-- Requires Oracle 11g due PIVOT clause (but you can rewrite this SQL in earlier versions)` + +COL sql_feature FOR a40 + +-- funky pivot formatting for sqlplus + +COL "'18.1.0'" FOR A30 WRAP +COL "'8.0.0'" FOR A30 WRAP +COL "'8.0.3'" FOR A30 WRAP +COL "'8.0.4'" FOR A30 WRAP +COL "'8.0.5'" FOR A30 WRAP +COL "'8.0.6'" FOR A30 WRAP +COL "'8.0.7'" FOR A30 WRAP +COL "'8.1.0'" FOR A30 WRAP +COL "'8.1.3'" FOR A30 WRAP +COL "'8.1.4'" FOR A30 WRAP +COL "'8.1.5'" FOR A30 WRAP +COL "'8.1.6'" FOR A30 WRAP +COL "'8.1.7'" FOR A30 WRAP +COL "'9.0.0'" FOR A30 WRAP +COL "'9.0.1'" FOR A30 WRAP +COL "'9.2.0'" FOR A30 WRAP +COL "'9.2.0.8'" FOR A30 WRAP +COL "'10.1.0'" FOR A30 WRAP +COL "'10.1.0.3'" FOR A30 WRAP +COL "'10.1.0.4'" FOR A30 WRAP +COL "'10.1.0.5'" FOR A30 WRAP +COL "'10.2.0.1'" FOR A30 WRAP +COL "'10.2.0.2'" FOR A30 WRAP +COL "'10.2.0.3'" FOR A30 WRAP +COL "'10.2.0.4'" FOR A30 WRAP +COL "'10.2.0.5'" FOR A30 WRAP +COL "'11.1.0.6'" FOR A30 WRAP +COL "'11.1.0.7'" FOR A30 WRAP +COL "'11.2.0.1'" FOR A30 WRAP +COL "'11.2.0.2'" FOR A30 WRAP +COL "'11.2.0.3'" FOR A30 WRAP +COL "'11.2.0.4'" FOR A30 WRAP +COL "'12.1.0.1'" FOR A30 WRAP +COL "'12.1.0.2'" FOR A30 WRAP +COL "'12.2.0.1'" FOR A30 WRAP +COL "'18.1.0.1'" FOR A30 WRAP + + +prompt Compare Optimizer_Features_Enable Fix differences +prompt for values &1 and &2 (v$session_fix_control) +prompt + +SELECT * +FROM + opt_fix_matrix + PIVOT( + MAX(SUBSTR(value,1,20)) + FOR opt_features_enabled IN ('&1','&2') + ) +WHERE + "'&1'" != "'&2'" +/ + diff --git a/tpt/cofef_missing.sql b/tpt/cofef_missing.sql new file mode 100644 index 0000000..5dec0c5 --- /dev/null +++ b/tpt/cofef_missing.sql @@ -0,0 +1,92 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Compare Optimizer Features Enable Fix values - find fixes that are not affected by optimizer_features_enable setting +-- +-- By Tanel Poder ( https://blog.tanelpoder.com ) +-- Requires opt_param_matrix table to be created (using tools/optimizer/optimizer_features_matrix.sql) +-- Requires Oracle 11g+ due to PIVOT clause (but you can rewrite this SQL in earlier versions)` + +COL sql_feature FOR a40 + +-- funky pivot formatting for sqlplus + +COL "'18.1.0'" FOR A30 WRAP +COL "'8.0.0'" FOR A30 WRAP +COL "'8.0.3'" FOR A30 WRAP +COL "'8.0.4'" FOR A30 WRAP +COL "'8.0.5'" FOR A30 WRAP +COL "'8.0.6'" FOR A30 WRAP +COL "'8.0.7'" FOR A30 WRAP +COL "'8.1.0'" FOR A30 WRAP +COL "'8.1.3'" FOR A30 WRAP +COL "'8.1.4'" FOR A30 WRAP +COL "'8.1.5'" FOR A30 WRAP +COL "'8.1.6'" FOR A30 WRAP +COL "'8.1.7'" FOR A30 WRAP +COL "'9.0.0'" FOR A30 WRAP +COL "'9.0.1'" FOR A30 WRAP +COL "'9.2.0'" FOR A30 WRAP +COL "'9.2.0.8'" FOR A30 WRAP +COL "'10.1.0'" FOR A30 WRAP +COL "'10.1.0.3'" FOR A30 WRAP +COL "'10.1.0.4'" FOR A30 WRAP +COL "'10.1.0.5'" FOR A30 WRAP +COL "'10.2.0.1'" FOR A30 WRAP +COL "'10.2.0.2'" FOR A30 WRAP +COL "'10.2.0.3'" FOR A30 WRAP +COL "'10.2.0.4'" FOR A30 WRAP +COL "'10.2.0.5'" FOR A30 WRAP +COL "'11.1.0.6'" FOR A30 WRAP +COL "'11.1.0.7'" FOR A30 WRAP +COL "'11.2.0.1'" FOR A30 WRAP +COL "'11.2.0.2'" FOR A30 WRAP +COL "'11.2.0.3'" FOR A30 WRAP +COL "'11.2.0.4'" FOR A30 WRAP +COL "'12.1.0.1'" FOR A30 WRAP +COL "'12.1.0.2'" FOR A30 WRAP +COL "'12.2.0.1'" FOR A30 WRAP +COL "'18.1.0.1'" FOR A30 WRAP + + +prompt Compare Optimizer_Features_Enable Fix differences +prompt for values &1 and &2 (v$session_fix_control) +prompt + +COL cofef_min NEW_VALUE cofef_min +COL cofef_max NEW_VALUE cofef_max + +SET TERMOUT OFF +WITH sq AS ( + SELECT ordinal, name, value FROM v$parameter_valid_values WHERE name = 'optimizer_features_enable' +) +SELECT + (SELECT value FROM sq WHERE ordinal = (SELECT MIN(ordinal) FROM sq)) cofef_min + , (SELECT value FROM sq WHERE ordinal = (SELECT MAX(ordinal) FROM sq)) cofef_max +FROM + dual +/ +SET TERMOUT ON + +WITH sq AS ( + SELECT /*+ MATERIALIZE */ bugno + FROM + opt_fix_matrix + PIVOT( + MAX(SUBSTR(value,1,20)) + FOR opt_features_enabled IN ('&cofef_min' , '&cofef_max') + ) + WHERE + "'&cofef_min'" != "'&cofef_max'" +) +SELECT + * +FROM + v$session_fix_control +WHERE + session_id = SYS_CONTEXT('userenv', 'sid') +AND bugno NOT IN ( + SELECT bugno FROM sq +) +/ + diff --git a/tpt/cofep.sql b/tpt/cofep.sql new file mode 100644 index 0000000..16906bf --- /dev/null +++ b/tpt/cofep.sql @@ -0,0 +1,72 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Compare Optimizer Features Enable Parameter values +-- By Tanel Poder ( http://www.tanelpoder.com ) +-- Requires opt_param_matrix table to be created (using tools/optimizer/optimizer_features_matrix.sql) +-- Requires Oracle 11g+ due to PIVOT clause (but you can rewrite this SQL in earlier versions)` + +col pd_name head NAME for a50 +col pd_value head VALUE for a30 +column pd_descr heading DESCRIPTION format a70 word_wrap + +-- funky pivot formatting for sqlplus + +COL "'18.1.0'" FOR A30 WRAP +COL "'8.0.0'" FOR A30 WRAP +COL "'8.0.3'" FOR A30 WRAP +COL "'8.0.4'" FOR A30 WRAP +COL "'8.0.5'" FOR A30 WRAP +COL "'8.0.6'" FOR A30 WRAP +COL "'8.0.7'" FOR A30 WRAP +COL "'8.1.0'" FOR A30 WRAP +COL "'8.1.3'" FOR A30 WRAP +COL "'8.1.4'" FOR A30 WRAP +COL "'8.1.5'" FOR A30 WRAP +COL "'8.1.6'" FOR A30 WRAP +COL "'8.1.7'" FOR A30 WRAP +COL "'9.0.0'" FOR A30 WRAP +COL "'9.0.1'" FOR A30 WRAP +COL "'9.2.0'" FOR A30 WRAP +COL "'9.2.0.8'" FOR A30 WRAP +COL "'10.1.0'" FOR A30 WRAP +COL "'10.1.0.3'" FOR A30 WRAP +COL "'10.1.0.4'" FOR A30 WRAP +COL "'10.1.0.5'" FOR A30 WRAP +COL "'10.2.0.1'" FOR A30 WRAP +COL "'10.2.0.2'" FOR A30 WRAP +COL "'10.2.0.3'" FOR A30 WRAP +COL "'10.2.0.4'" FOR A30 WRAP +COL "'10.2.0.5'" FOR A30 WRAP +COL "'11.1.0.6'" FOR A30 WRAP +COL "'11.1.0.7'" FOR A30 WRAP +COL "'11.2.0.1'" FOR A30 WRAP +COL "'11.2.0.2'" FOR A30 WRAP +COL "'11.2.0.3'" FOR A30 WRAP +COL "'11.2.0.4'" FOR A30 WRAP +COL "'12.1.0.1'" FOR A30 WRAP +COL "'12.1.0.2'" FOR A30 WRAP +COL "'12.2.0.1'" FOR A30 WRAP +COL "'18.1.0.1'" FOR A30 WRAP + + +prompt Compare Optimizer_Features_Enable Parameter differences +prompt for values &1 and &2 + +select m.*, n.ksppdesc pd_descr +from ( + select * + from opt_param_matrix + pivot( + max(substr(value,1,20)) + for opt_features_enabled in ('&1','&2') + ) + where "'&1'" != "'&2'" +) m +, sys.x$ksppi n +, sys.x$ksppcv c +where + n.indx=c.indx +and n.ksppinm = m.parameter +/ + diff --git a/tpt/col.sql b/tpt/col.sql new file mode 100644 index 0000000..5517d1e --- /dev/null +++ b/tpt/col.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column col_owner head OWNER for a20 +column col_table_name head TABLE_NAME for a30 +column col_column_name head COLUMN_NAME for a30 +column col_data_type head DATA_TYPE for a20 + +break on col_owner skip 1 on table_name + +select + owner col_owner, + table_name col_table_name, + column_name col_column_name, + data_type col_data_type, + nullable, + num_distinct, + low_value, + high_value, + density, + num_nulls, + num_buckets +from + dba_tab_columns +where + lower(column_name) like lower('%&1%') +order by + col_owner, + col_table_name, + col_column_name +/ diff --git a/tpt/colltypes.sql b/tpt/colltypes.sql new file mode 100644 index 0000000..4e084ca --- /dev/null +++ b/tpt/colltypes.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Original by William Robertson but modified by Tanel - added the varying array filter +-- in comment section: http://awads.net/wp/2005/10/13/pre-defined-collection-types-in-oracle/ + +SELECT ct.owner, ct.type_name, ct.elem_type_name, ct.length +FROM all_coll_types ct + , all_types ot +WHERE ct.coll_type IN ('TABLE', 'VARYING ARRAY') +AND ot.type_name(+) = ct.elem_type_name +AND ot.owner(+) = ct.elem_type_owner +AND ot.type_name IS NULL +ORDER BY ct.owner, ct.type_name +/ + diff --git a/tpt/colusage.sql b/tpt/colusage.sql new file mode 100644 index 0000000..e68fc38 --- /dev/null +++ b/tpt/colusage.sql @@ -0,0 +1,51 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col colusage_owner head OWNER for a25 wrap +col colusage_table_name head TABLE_NAME for a25 wrap +col colusage_column_name head COLUMN_NAME for a25 wrap + +prompt Show column usage stats from sys.col_usage$ for table &1..&2.... +prompt Did you run DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO for getting latest stats? + +select + c.owner colusage_owner + , c.table_name colusage_table_name + , c.column_name colusage_column_name + , u.intcol# + , u.equality_preds + , u.equijoin_preds + , u.nonequijoin_preds + , u.range_preds + , u.like_preds + , u.null_preds + , u.timestamp +from + sys.col_usage$ u + , dba_objects o + , dba_tab_cols c +where + o.object_id = u.obj# +and c.owner = o.owner +and c.table_name = o.object_name +and u.intcol# = c.internal_column_id +and o.object_type = 'TABLE' +and upper(o.object_name) like + upper(case + when instr('&1','.') > 0 then + substr('&1',instr('&1','.')+1) + else + '&1' + end + ) +and o.owner like + case when instr('&1','.') > 0 then + upper(substr('&1',1,instr('&1','.')-1)) + else + user + end +order by + o.owner + , c.table_name + , c.column_name +/ diff --git a/tpt/comm.sql b/tpt/comm.sql new file mode 100644 index 0000000..5049237 --- /dev/null +++ b/tpt/comm.sql @@ -0,0 +1,34 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Not listing tables without comments... + +COLUMN comm_comments HEADING COMMENTS FORMAT a90 WORD_WRAP +COLUMN comm_owner HEADING OWNER FORMAT A20 WRAP +COLUMN comm_table_name HEADING TABLE_NAME FORMAT A30 + +SELECT + owner comm_owner + , table_name comm_table_name + , comments comm_comments +FROM + all_tab_comments +WHERE + comments is not null +AND + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +/ + diff --git a/tpt/comments/library_cache_lock.txt b/tpt/comments/library_cache_lock.txt new file mode 100644 index 0000000..b9c3208 --- /dev/null +++ b/tpt/comments/library_cache_lock.txt @@ -0,0 +1,14 @@ +If the BLOCKING_SESSION isn't working well enough for you or doesn't exist in your DB version, then +you can use X$KGLLK directly to find sessions blocking/with interest in your lock + +1) V$SESSION_WAIT.PARAMETER1 is the lib cache object handle we are trying to lock (@sw.sql) + + -> V$EVENT_NAME PARAMETER1 shows that ( @sed "library cache lock" ) + +2) Query X$KGLLK by matching X$KGLLK.KGLHDADR to V$SESSION_WAIT.PARAMETER1 + + -> find the "holder" sid + +3) Use sw, snapper on the SID holding the lock to see what its doing + + diff --git a/tpt/compileall.sql b/tpt/compileall.sql new file mode 100644 index 0000000..955b4dc --- /dev/null +++ b/tpt/compileall.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt +prompt Generating the compile commands into compileall_out.sql... + +set head off pages 0 lines 200 feed off trimspool on termout off + +spool compileall_out.sql + +select + 'alter '||decode(object_type, 'PACKAGE BODY', 'PACKAGE', object_type)||' ' + ||owner||'.'||object_name||' compile'|| + decode(object_type, 'PACKAGE BODY', ' BODY;', ';') +from + dba_objects +where + object_type in ('PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'FUNCTION', 'TRIGGER'); + +spool off + +set termout on + +prompt Done. +prompt Now review the compileall_out.sql and execute it as SYS. +prompt Press enter to continue... +pause diff --git a/tpt/cons.sql b/tpt/cons.sql new file mode 100644 index 0000000..e228222 --- /dev/null +++ b/tpt/cons.sql @@ -0,0 +1,52 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column cons_constraint_name heading CONSTRAINT_NAME format a30 +column cons_column_name heading COLUMN_NAME format a30 +column cons_owner heading OWNER format A30 +column cons_table_name heading TABLE_NAME format A30 +column constraint_name for a30 +column r_constraint_name for a30 + +prompt Show constraints on table &1.... + +select + co.owner cons_owner, + co.table_name cons_table_name, + co.constraint_name cons_constraint_name, + co.constraint_type, + co.r_constraint_name, + cc.column_name cons_column_name, + cc.position, + co.status, + co.validated +from + dba_constraints co, + dba_cons_columns cc +where + co.owner = cc.owner +and co.table_name = cc.table_name +and co.constraint_name = cc.constraint_name +and upper(co.table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND co.owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +order by + cons_owner, + cons_table_name, + constraint_type, + cons_constraint_name, + position, + column_name +/ + diff --git a/tpt/cons2.sql b/tpt/cons2.sql new file mode 100644 index 0000000..b27cb2e --- /dev/null +++ b/tpt/cons2.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column cons_column_name heading COLUMN_NAME format a30 +column R_CONSTRAINT_NAME for a30 +column CONSTRAINT_NAME for a30 + +select + co.owner, + co.table_name, + co.constraint_name, + co.constraint_type, + cc.column_name cons_column_name, + cc.position +from + dba_constraints co, + dba_cons_columns cc +where + co.owner = cc.owner +and co.table_name = cc.table_name +and co.constraint_name = cc.constraint_name +and lower(co.table_name) like lower('&1') +order by + owner, + table_name, + constraint_type, + column_name, + constraint_name, + position +/ + diff --git a/tpt/cont.sql b/tpt/cont.sql new file mode 100644 index 0000000..c11fc63 --- /dev/null +++ b/tpt/cont.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL cont_open_time HEAD OPEN_TIME FOR A35 + +SELECT + con_id + , dbid +-- , con_uid +-- , guid + , name + , open_mode + , restricted + , open_time cont_open_time + , create_scn + , total_size + , block_size + , recovery_status + , snapshot_parent_con_id +FROM v$containers; + diff --git a/tpt/create_sql_baseline.sql b/tpt/create_sql_baseline.sql new file mode 100644 index 0000000..c201c9a --- /dev/null +++ b/tpt/create_sql_baseline.sql @@ -0,0 +1,66 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------------------------------- +-- this script allows you to transfer a plan from an existing (good) cursor to the problematic (bad) one. +-- usage: +-- +-- @create_sql_baseline +-- +-- +-- Query baseline info from: DBA_SQL_PLAN_BASELINES +-- Drop baselines: @drop_sql_baseline &sql_handle +-- or: exec DBMS_SPM.DROP_SQL_PLAN_BASELINE('&sql_handle') +-- +-- You can get the SQL_HANDLE from DBA_SQL_PLAN_BASELINES +-- +-- More info: +-- SQL Plan Baselines - DBMS_SPM in EE licenses +-- - https://jonathanlewis.wordpress.com/2011/01/12/fake-baselines/ +-- DBMS_SPM basic baseline use is included in Oracle EE in 11g+ and SE from 18c+ +-- - https://blogs.oracle.com/optimizer/does-the-use-of-sql-plan-management-and-the-dbmsspm-database-package-require-a-tuning-or-diagnostic-pack-license +-- +-------------------------------------------------------------------------------------------------------- +SET SERVEROUT ON SIZE 1000000 + +DEF good_sql_id = &1 +DEF good_sql_phv = &2 +DEF bad_sql_id = &3 + +DECLARE + ret NUMBER; + v_signature NUMBER; -- hash value of normalized SQL text + v_sql_text CLOB; + v_sql_handle VARCHAR2(100); +BEGIN + ret := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE('&bad_sql_id', enabled=>'NO'); + + DBMS_OUTPUT.PUT_LINE(q'[Looking up SQL_ID &bad_sql_id]'); + + -- rownum = 1 because there may be multiple children with this SQL_ID + SELECT sql_fulltext, exact_matching_signature INTO v_sql_text, v_signature + FROM v$sql + WHERE + sql_id = '&bad_sql_id' + AND rownum = 1; + + DBMS_OUTPUT.PUT_LINE('Found: '||SUBSTR(v_sql_text,1,80)||'...'); + + DBMS_OUTPUT.PUT_LINE(q'[Signature = ]'||v_signature); + SELECT sql_handle INTO v_sql_handle FROM dba_sql_plan_baselines WHERE signature = v_signature AND rownum = 1; + DBMS_OUTPUT.PUT_LINE(q'[Handle = ]'||v_sql_handle); + + -- associate good SQL_IDs plan outline with the bad SQL_ID + + ret := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE( + sql_id => '&good_sql_id' + , plan_hash_value => &good_sql_phv + , sql_handle => v_sql_handle + ); + + DBMS_OUTPUT.PUT_LINE(q'[SQL Baseline Name = SQL_BASELINE_&1 return=]'||ret); +END; +/ + +SET SERVEROUT OFF + diff --git a/tpt/create_sql_baseline_awr.sql b/tpt/create_sql_baseline_awr.sql new file mode 100644 index 0000000..b9ec044 --- /dev/null +++ b/tpt/create_sql_baseline_awr.sql @@ -0,0 +1,70 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------------------------------- +-- this script allows you to transfer a plan from an existing (good) cursor to the problematic (bad) one. +-- usage: +-- +-- @create_sql_baseline +-- +-- +-- Query baseline info from: DBA_SQL_PLAN_BASELINES +-- Drop baselines: @drop_sql_baseline &sql_handle +-- or: exec DBMS_SPM.DROP_SQL_PLAN_BASELINE('&sql_handle') +-- +-- You can get the SQL_HANDLE from DBA_SQL_PLAN_BASELINES +-- +-- More info: +-- SQL Plan Baselines - DBMS_SPM in EE licenses +-- - https://jonathanlewis.wordpress.com/2011/01/12/fake-baselines/ +-- DBMS_SPM basic baseline use is included in Oracle EE in 11g+ and SE from 18c+ +-- - https://blogs.oracle.com/optimizer/does-the-use-of-sql-plan-management-and-the-dbmsspm-database-package-require-a-tuning-or-diagnostic-pack-license +-- +-------------------------------------------------------------------------------------------------------- +SET SERVEROUT ON SIZE 1000000 + +DEF good_sql_id = &1 +DEF good_sql_phv = &2 +DEF bad_sql_id = &3 + +DECLARE + ret NUMBER; + ret2 NUMBER; + v_signature NUMBER; -- hash value of normalized SQL text + v_sql_text CLOB; + v_sql_handle VARCHAR2(100); + v_plan_name VARCHAR2(100); + v_begin_snap NUMBER; + v_end_snap NUMBER; + +BEGIN + + SELECT sql_text, DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_text, 0) exact_matching_signature INTO v_sql_text, v_signature + FROM dba_hist_sqltext + WHERE sql_id = '&bad_sql_id'; -- AND dbid = ... + + SELECT MIN(snap_id), MAX(snap_id) INTO v_begin_snap, v_end_snap + FROM dba_hist_sqlstat + WHERE sql_id = '&good_sql_id' AND plan_hash_value = TO_NUMBER('&good_sql_phv') AND rownum = 1; + + ret := DBMS_SPM.LOAD_PLANS_FROM_AWR( + v_begin_snap - 1 + , v_end_snap + , basic_filter => q'[sql_id = '&good_sql_id' AND plan_hash_value = TO_NUMBER('&good_sql_phv')]' + , enabled=>'YES' + , fixed=>'YES' + ); + + DBMS_OUTPUT.put_line('Number of plans loaded and fixed: '||ret); + + -- FOR i IN (SELECT sql_handle, plan_name FROM dba_sql_plan_baselines WHERE signature = v_signature) LOOP + -- ret := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(i.sql_handle, i.plan_name, 'ENABLED', 'YES'); + -- ret2 := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(i.sql_handle, i.plan_name, 'FIXED', 'YES'); + -- DBMS_OUTPUT.PUT_LINE('handle='||i.sql_handle||' plan_name='||i.plan_name||' ret='||ret ||' ret2='||ret2); + -- END LOOP; + +END; +/ + +SET SERVEROUT OFF + diff --git a/tpt/create_sql_patch.sql b/tpt/create_sql_patch.sql new file mode 100644 index 0000000..7a5798c --- /dev/null +++ b/tpt/create_sql_patch.sql @@ -0,0 +1,47 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- you can query patch info from DBA_SQL_PATCHES +-- the actual hints can be seen using: +-- select comp_data from sqlobj$data; +-- +-- a sql patch can be dropped with: +-- dbms_sqldiag.drop_sql_patch('&patch_name'); +-- +-- Note that it's best to use manual hinting first and if the hint works, extract it in its full +-- format from the OUTLINE section of the plan. for example, I had to use this format: +-- +-- FULL(@"SEL$1" "T"@"SEL$1") +-- +-- ... instead of just FULL(t) to make the patch work (12.1) +-- +-- The DBMS_SQLDIAG_INTERNAL.I_CREATE_PATCH actually requires the SQL Text (as a CLOB) instead of just +-- the SQL_ID, in 12.1 and earlier this script fetches the SQL Text from v$sql (the cursor needs +-- to be in library cache). Similarly the DBMS_SQLDIAG.CREATE_PATCH(sql_id=>...) needs the cursor to be +-- in library cache in order to find the corresponding SQL text. + +SET SERVEROUT ON SIZE 1000000 + +DECLARE + v_sql_text CLOB; + ret VARCHAR2(100); +BEGIN + -- rownum = 1 because there may be multiple children with this SQL_ID + DBMS_OUTPUT.PUT_LINE(q'[Looking up SQL_ID &1]'); + SELECT sql_fulltext INTO v_sql_text FROM v$sql WHERE sql_id = '&1' AND rownum = 1; + DBMS_OUTPUT.PUT_LINE('Found: '||SUBSTR(v_sql_text,1,80)||'...'); + + -- TODO: should use PL/SQL conditional compilation here + -- The leading space in hint_text is intentional. + + -- 12.2+ + ret := DBMS_SQLDIAG.CREATE_SQL_PATCH(sql_id=>'&1', hint_text=>q'[ &2]', name=>'SQL_PATCH_&1'); + + -- 11g and 12.1 + --DBMS_SQLDIAG_INTERNAL.I_CREATE_PATCH(sql_text=>v_sql_text, hint_text=>q'[ &2]', name=>'SQL_PATCH_&1'); + DBMS_OUTPUT.PUT_LINE(q'[SQL Patch Name = SQL_PATCH_&1]'); +END; +/ + +SET SERVEROUT OFF + diff --git a/tpt/create_sql_profile.sql b/tpt/create_sql_profile.sql new file mode 100644 index 0000000..6ec6e48 --- /dev/null +++ b/tpt/create_sql_profile.sql @@ -0,0 +1,44 @@ +VAR sql_fulltext CLOB +EXEC SELECT sql_fulltext INTO :sql_fulltext FROM v$sql WHERE sql_id = '1ka5g0kh4h6pc' AND rownum = 1; + +-- Example 1: Set Join order: +EXEC DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=>sys.sqlprof_attr('LEADING(@"SEL$1" "CO"@"SEL$1" "CH"@"SEL$1" "CU"@"SEL$1" "S"@"SEL$1" "P"@"SEL$1")'), name=> 'MANUAL_PROFILE_1k + +-- Example 2: Adjust cardinality: +EXEC DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=>sys.sqlprof_attr('OPT_ESTIMATE(@"SEL$1", TABLE, "CU"@"SEL$1", SCALE_ROWS=100000)'), name=> 'MANUAL_PROFILE_1ka5g0kh4h6pc'); + +-- Example 3: Set multiple hints: +DECLARE + hints sys.sqlprof_attr := sys.sqlprof_attr( + ('LEADING(@"SEL$1" "CO"@"SEL$1" "CH"@"SEL$1")') + , ('OPT_ESTIMATE(@"SEL$1", TABLE, "CU"@"SEL$1", SCALE_ROWS=100000)') + ); +BEGIN + DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=> hints, name=> 'MANUAL_PROFILE_1ka5g0kh4h6pc'); +END; +/ + +-- Example 4: SwingBench TPCDS-Like Query 31 skip scan issue (force match) +-- alternative option would be to use opt_param('_optimizer_skip_scan_enabled','false') + +DECLARE + hints sys.sqlprof_attr := sys.sqlprof_attr( + ('NO_INDEX_SS(@"SEL$26CA4453" "STORE_SALES"@"SEL$1")') + , ('NO_INDEX_SS(@"SEL$2C2C13D8" "WEB_SALES"@"SEL$2")') + ); +BEGIN + DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=> hints, name=> 'QUERY31_DISABLE_SKIP_SCAN', force_match=> TRUE); +END; +/ + +DECLARE + hints sys.sqlprof_attr := sys.sqlprof_attr( + ('NO_INDEX(@"SEL$26CA4453" "STORE_SALES"@"SEL$1")') + , ('NO_INDEX(@"SEL$2C2C13D8" "WEB_SALES"@"SEL$2")') + ); +BEGIN + DBMS_SQLTUNE.IMPORT_SQL_PROFILE(sql_text=>:sql_fulltext, profile=> hints, name=> 'QUERY31_DISABLE_SKIP_SCAN', force_match=> TRUE); +END; +/ + + diff --git a/tpt/cs.sql b/tpt/cs.sql new file mode 100644 index 0000000..49d4fd8 --- /dev/null +++ b/tpt/cs.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt alter session set current_schema=&1 +alter session set current_schema=&1; diff --git a/tpt/csv.sql b/tpt/csv.sql new file mode 100644 index 0000000..863a823 --- /dev/null +++ b/tpt/csv.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@dsv , csv \ No newline at end of file diff --git a/tpt/curheaps.sql b/tpt/curheaps.sql new file mode 100644 index 0000000..19cd361 --- /dev/null +++ b/tpt/curheaps.sql @@ -0,0 +1,128 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: curheaps.sql +-- Purpose: Show main cursor data block heap sizes and their contents +-- (heap0 and heap6) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @curheaps +-- +-- @curheaps 942515969 % -- shows a summary of cursor heaps +-- @curheaps 942515969 0 -- shows detail for child cursor 0 +-- +-- Other: "Child" cursor# 65535 is actually the parent cursor +-- +-------------------------------------------------------------------------------- + +col curheaps_size0 heading SIZE0 for 9999999 +col curheaps_size1 heading SIZE1 for 9999999 +col curheaps_size2 heading SIZE2 for 9999999 +col curheaps_size3 heading SIZE3 for 9999999 +col curheaps_size4 heading SIZE4 for 9999999 +col curheaps_size5 heading SIZE5 for 9999999 +col curheaps_size6 heading SIZE6 for 9999999 +col curheaps_size7 heading SIZE7 for 9999999 + +col KGLOBHD0 new_value v_curheaps_kglobhd0 print +col KGLOBHD1 new_value v_curheaps_kglobhd1 noprint +col KGLOBHD2 new_value v_curheaps_kglobhd2 noprint +col KGLOBHD3 new_value v_curheaps_kglobhd3 noprint +col KGLOBHD4 new_value v_curheaps_kglobhd4 print +col KGLOBHD5 new_value v_curheaps_kglobhd5 noprint +col KGLOBHD6 new_value v_curheaps_kglobhd6 print +col KGLOBHD7 new_value v_curheaps_kglobhd7 noprint + + +select + KGLNAHSH, + KGLHDPAR, + kglobt09 CHILD#, + KGLHDADR, + KGLOBHD0, KGLOBHS0 curheaps_size0, + KGLOBHD1, KGLOBHS1 curheaps_size1, + KGLOBHD2, KGLOBHS2 curheaps_size2, + KGLOBHD3, KGLOBHS3 curheaps_size3, + KGLOBHD4, KGLOBHS4 curheaps_size4, + KGLOBHD5, KGLOBHS5 curheaps_size5, + KGLOBHD6, KGLOBHS6 curheaps_size6, + KGLOBHD7, KGLOBHS7 curheaps_size7, +-- KGLOBT00 CTXSTAT, + KGLOBSTA STATUS +from + X$KGLOB +-- X$KGLCURSOR_CHILD +where + KGLNAHSH in (&1) +and KGLOBT09 like ('&2') +order by + KGLOBT09 ASC +/ + +-- Cursor data block summary +select + 'HEAP0' heap + , ksmchcls class + , ksmchcom alloc_comment + , sum(ksmchsiz) bytes + , count(*) chunks +from + x$ksmhp +where + KSMCHDS = hextoraw('&v_curheaps_kglobhd0') +group by + 'HEAP0' + , ksmchcls + , ksmchcom +order by + sum(ksmchsiz) desc +/ + +select + 'HEAP4' heap + , ksmchcls class + , ksmchcom alloc_comment + , sum(ksmchsiz) bytes + , count(*) chunks +from + x$ksmhp +where + KSMCHDS = hextoraw('&v_curheaps_kglobhd4') +group by + 'HEAP4' + , ksmchcls + , ksmchcom +order by + sum(ksmchsiz) desc +/ + + + +select + 'HEAP6' heap + , ksmchcls class + , ksmchcom alloc_comment + , sum(ksmchsiz) bytes + , count(*) chunks +from + x$ksmhp +where + KSMCHDS = hextoraw('&v_curheaps_kglobhd6') +group by + 'HEAP6' + , ksmchcls + , ksmchcom +order by + sum(ksmchsiz) desc +/ + + +-- Cursor data block details + +-- select * from x$ksmhp where KSMCHDS = hextoraw('&v_curheaps_kglobhd0'); +-- select * from x$ksmhp where KSMCHDS = hextoraw('&v_curheaps_kglobhd6'); + diff --git a/tpt/curlog.sql b/tpt/curlog.sql new file mode 100644 index 0000000..e1794ac --- /dev/null +++ b/tpt/curlog.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select member from v$logfile where group# = (select group# from v$log where status = 'CURRENT'); diff --git a/tpt/curschema.sql b/tpt/curschema.sql new file mode 100644 index 0000000..00cf0b8 --- /dev/null +++ b/tpt/curschema.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@ue CURRENT_SCHEMA \ No newline at end of file diff --git a/tpt/d.sql b/tpt/d.sql new file mode 100644 index 0000000..b4bea2c --- /dev/null +++ b/tpt/d.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column d_table_name heading TABLE_NAME format a30 +column d_comments heading COMMENTS format a80 word_wrap +break on d_table_name + +prompt Show data dictionary views and x$ tables matching the expression "&1"... + +select d.table_name d_table_name, d.comments d_comments + from dict d + where upper(d.table_name) like upper('%&1%') +union all +select t.table_name d_table_name, 'BASE TABLE' d_comments + from dba_tables t + where t.owner = 'SYS' + and upper(t.table_name) like upper('%&1%') +/ +select ft.object_id, ft.name d_table_name, (select fvd.view_name + from v$fixed_view_definition fvd + where instr(upper(fvd.view_definition),upper(ft.name)) > 0 + and rownum = 1) used_in + from v$fixed_table ft + where ft.type in ('TABLE', 'VIEW') + and replace(upper(ft.name),'V_$','V$') like upper('%&1%') +/ + diff --git a/tpt/d2.sql b/tpt/d2.sql new file mode 100644 index 0000000..71794ce --- /dev/null +++ b/tpt/d2.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- d.sql using ALL_ views + +column d_table_name heading TABLE_NAME format a30 +column d_comments heading COMMENTS format a80 word_wrap +break on d_table_name + +prompt Show data dictionary views and x$ tables matching the expression "&1" from ALL_TABLES... + +select d.table_name d_table_name, d.comments d_comments + from dict d + where upper(d.table_name) like upper('%&1%') +union all +select t.table_name d_table_name, 'BASE TABLE' d_comments + from all_tables t + where t.owner = 'SYS' + and upper(t.table_name) like upper('%&1%') +/ +select ft.name d_table_name, (select fvd.view_name + from v$fixed_view_definition fvd + where instr(upper(fvd.view_definition),upper(ft.name)) > 0 + and rownum = 1) used_in + from v$fixed_table ft + where ft.type in ('TABLE', 'VIEW') + and replace(upper(ft.name),'V_$','V$') like upper('%&1%') +/ + diff --git a/tpt/date.sql b/tpt/date.sql new file mode 100644 index 0000000..a0ab4e3 --- /dev/null +++ b/tpt/date.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + TO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss') as "SYSDATE", + (to_date(sysdate) - to_date('01011970','ddmmyyyy')) * 24*60*60 SECONDS_EPOCH, + to_char((to_date(sysdate) - to_date('01011970','ddmmyyyy')) * 24*60*60, 'XXXXXXXX') SEC_HEX, + q'[TIMESTAMP']'||TO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss')||'''' as "SYSDATE_ANSI_TIMESTAMP_SYNTAX" +from + dual +/ diff --git a/tpt/date2unix.sql b/tpt/date2unix.sql new file mode 100644 index 0000000..55e02c6 --- /dev/null +++ b/tpt/date2unix.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + (to_date(&1) - to_date('01011970','ddmmyyyy')) * 24*60*60 SECONDS_EPOCH +FrOM DUAL +/ + diff --git a/tpt/db.sql b/tpt/db.sql new file mode 100644 index 0000000..db277b5 --- /dev/null +++ b/tpt/db.sql @@ -0,0 +1,17 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col db_scn for 99999999999999999 head SCN + +select + dbid + , name + , log_mode + , open_mode + , current_scn db_scn + , '0x'||trim(to_char(current_scn,'XXXXXXXXXXXXXX')) hex_scn + , platform_name +from + v$database +/ + diff --git a/tpt/dba.sql b/tpt/dba.sql new file mode 100644 index 0000000..f3a69c9 --- /dev/null +++ b/tpt/dba.sql @@ -0,0 +1,97 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: dba.sql (version 0.2) +-- Purpose: Convert Data Block Address (a 6 byte hex number) to file#, block# +-- and find to which segment it belongs +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @dba +-- @dba 40EB02 +-- +-- +-- Other: This script also tries to identify the segment into which this +-- block belongs. It first queries X$BH, as if this block is really +-- hot, it should be in buffer cache. Note that you can change this +-- query to use V$BH if you dont have access to X$ tables. +-- If the block is not in buffer cache anymore, then this script +-- can query DBA_EXTENTS next, but this can be a IO intensive operation +-- on some systems, so if X$BH already answers your question, press +-- CTRL+C here. +-- +-------------------------------------------------------------------------------- + +col rfile# new_value v_dba_rfile +col block# new_value v_dba_block +col bigfile_block# new_value v_bigfile_block +col dba_object head object for a40 truncate +col dba_DBA head DBA for a20 + + +select + dbms_utility.data_block_address_file(to_number('&1','XXXXXXXXXX')) RFILE#, + dbms_utility.data_block_address_block(to_number('&1','XXXXXXXXXX')) BLOCK#, + TO_NUMBER('&1','XXXXXXXXXX') bigfile_block#, + '-- alter system dump datafile '||dbms_utility.data_block_address_file(to_number('&1','XXXXXXXXXX')) + ||' block '||dbms_utility.data_block_address_block(to_number('&1','XXXXXXXXXX')) dump_cmd +from dual; + +pause Press enter to find the segment using V$BH (this may take CPU time), CTRL+C to cancel: + +select /*+ ORDERED */ + decode(bh.state,0,'free',1,'xcur',2,'scur',3,'cr',4,'read',5,'mrec', + 6,'irec',7,'write',8,'pi', 9,'memory',10,'mwrite', + 11,'donated', 12,'protected',13,'securefile', 14,'siop',15,'recckpt' + ) state, + decode(bh.class,1,'data block',2,'sort block',3,'save undo block', + 4,'segment header',5,'save undo header',6,'free list',7,'extent map', + 8,'1st level bmb',9,'2nd level bmb',10,'3rd level bmb', 11,'bitmap block', + 12,'bitmap index block',13,'file header block',14,'unused', + 15,'system undo header',16,'system undo block', 17,'undo header', + 18,'undo block' + ) block_class, + o.object_type, + o.owner||'.'||o.object_name dba_object, + bh.tch, + bh.mode_held, + decode(bitand(bh.flag,1),0, 'N', 'Y') dirty, + decode(bitand(bh.flag,16), 0, 'N', 'Y') temp, + decode(bitand(bh.flag,1536), 0, 'N', 'Y') ping, + decode(bitand(bh.flag,16384), 0, 'N', 'Y') stale, + decode(bitand(bh.flag,65536), 0, 'N', 'Y') direct, + bh.cr_scn_bas, + bh.cr_scn_wrp, + cr_scn_wrp * power(2, 32) + cr_scn_bas full_scn, + trim(to_char(bh.flag, 'XXXXXXXX')) ||':'|| + trim(to_char(bh.lru_flag, 'XXXXXXXX')) flg_lruflg, + bh.dirty_queue DQ +from + x$bh bh, + dba_objects o +where + bh.obj = o.data_object_id +and ( + (file# = &v_dba_rfile and dbablk = &v_dba_block) + or + dbablk = &v_bigfile_block) +order by + tch asc +/ + +pause Press enter to query what segment resides there using DBA_EXTENTS (this can be IO intensive), CTRL+C to cancel: + +select owner, segment_name, partition_name, tablespace_name +from dba_extents +where + relative_fno = &v_dba_rfile +and &v_dba_block between block_id and block_id + blocks - 1 +union all +select owner, segment_name, partition_name, tablespace_name +from dba_extents +where + &v_bigfile_block between block_id and block_id + blocks - 1 +/ diff --git a/tpt/dba2.sql b/tpt/dba2.sql new file mode 100644 index 0000000..62f3c6e --- /dev/null +++ b/tpt/dba2.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Usage: @dba2 + +PROMPT Translate file#=&1 block#=&2 to segment name ... + +COL dba2_owner HEAD OWNER FOR A30 +COL dba2_segment_name HEAD SEGMENT_NAME FOR A30 +COL dba2_partition_name HEAD PARTITION_NAME FOR A30 + +select + owner dba2_owner + , segment_name dba2_segment_name + , partition_name dba2_partition_name + , tablespace_name + , extent_id +from dba_extents +where file_id = &1 +and &2 between block_id and block_id + blocks - 1; diff --git a/tpt/dbinfo.sql b/tpt/dbinfo.sql new file mode 100644 index 0000000..6b9ebe6 --- /dev/null +++ b/tpt/dbinfo.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select dbid, name, created, log_mode, checkpoint_change#, open_mode, force_logging from v$database; diff --git a/tpt/dblinks.sql b/tpt/dblinks.sql new file mode 100644 index 0000000..1db2d9f --- /dev/null +++ b/tpt/dblinks.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col dblinks_owner head OWNER for a20 +col dblinks_db_link head DB_LINK for a40 +col dblinks_username head USERNAME for a20 +col dblinks_host head HOST for a40 + +select + owner dblinks_owner, + db_link dblinks_db_link, + username dblinks_username, + host dblinks_host, + created +from + dba_db_links; diff --git a/tpt/dc.sql b/tpt/dc.sql new file mode 100644 index 0000000..3e0373c --- /dev/null +++ b/tpt/dc.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col table_name for a30 +col column_name for a30 +col comments for a60 + +select table_name, column_name, comments +from dict_columns +where column_name like '%&1%' +order by table_name, column_name +/ diff --git a/tpt/ddl.sql b/tpt/ddl.sql new file mode 100644 index 0000000..7e9e940 --- /dev/null +++ b/tpt/ddl.sql @@ -0,0 +1,43 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ddl.sql +-- Purpose: Extracts DDL statements for specified objects +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @ddl [schema.] +-- @ddl mytable +-- @ddl system.table +-- @ddl sys%.%tab% +-- +-------------------------------------------------------------------------------- + + +exec dbms_metadata.set_transform_param( dbms_metadata.session_transform,'SQLTERMINATOR', TRUE); + +select + dbms_metadata.get_ddl( object_type, object_name, owner ) +from + all_objects +where + object_type NOT LIKE '%PARTITION' AND object_type NOT LIKE '%BODY' +AND upper(object_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +/ + diff --git a/tpt/dec.sql b/tpt/dec.sql new file mode 100644 index 0000000..b9fbba1 --- /dev/null +++ b/tpt/dec.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@calc &1 + 0 \ No newline at end of file diff --git a/tpt/demos/ArrayBindSelect.class b/tpt/demos/ArrayBindSelect.class new file mode 100644 index 0000000..1977543 Binary files /dev/null and b/tpt/demos/ArrayBindSelect.class differ diff --git a/tpt/demos/ArrayBindSelect.java b/tpt/demos/ArrayBindSelect.java new file mode 100644 index 0000000..7351fe5 --- /dev/null +++ b/tpt/demos/ArrayBindSelect.java @@ -0,0 +1,50 @@ +// run with: +// java -cp $ORACLE_HOME/jdbc/lib/ojdbc5.jar:. Client_id + + +import java.sql.*; +import oracle.jdbc.OracleConnection; +import java.util.UUID; +import java.util.Arrays; + +public class ArrayBindSelect { + + public static void main(String[] args) throws InterruptedException { + + try { + // get connection and statement + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@oel6:1521:LIN112", "system","oracle"); + Statement stmt = conn.createStatement(); + + // set metrics for connection (will be sent to server the next rountrip) + String[] metrics = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX]; + metrics[OracleConnection.END_TO_END_MODULE_INDEX]="Array Bind Select"; + ((OracleConnection)conn).setEndToEndMetrics(metrics,(short)0); + + String[] values = new String[1000]; + Arrays.fill(values, UUID.randomUUID().toString()); + //for (int i=0; i<1000; i++) + // values[i] = UUID.randomUUID().toString(); + + ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("ARRAY_OF_PERSONS", conn); + // then obtain an Array filled with the content below + String[] content = { "v4" }; + + sqlArray = new oracle.sql.ARRAY(arrayDescriptor, (OracleConnection)conn, content); + + + for(int i=1;i<1000000;i++) { + stmt.setArray(1,values); + ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM dual WHERE dummy IN (?)"); + } + + Thread.sleep(1000); + } + catch (SQLException e) { + e.printStackTrace(); + } + } +} + + diff --git a/tpt/demos/BatchInsert.java b/tpt/demos/BatchInsert.java new file mode 100644 index 0000000..c34b1a2 --- /dev/null +++ b/tpt/demos/BatchInsert.java @@ -0,0 +1,46 @@ +// run with: +// java -cp $ORACLE_HOME/jdbc/lib/ojdbc8.jar:. BatchInsert + +// requires: +// CREATE TABLE t(a NUMBER, b VARCHAR2(150)); + +// results in these metrics (Starts=10) for a single *batch* execution of the SQL (v$sql.executions=1) +// +// INSERT INTO t SELECT :1 , :2 FROM dual +// +// -------------------------------------------------------------------------------------------------------- +// | Id | Operation | Name | Starts | E-Rows | Cost (%CPU)| A-Rows | A-Time | Buffers | +// -------------------------------------------------------------------------------------------------------- +// | 0 | INSERT STATEMENT | | 10 | | 2 (100)| 0 |00:00:00.01 | 13 | +// | 1 | LOAD TABLE CONVENTIONAL | T | 10 | | | 0 |00:00:00.01 | 13 | +// | 2 | FAST DUAL | | 10 | 1 | 2 (0)| 10 |00:00:00.01 | 0 | +// -------------------------------------------------------------------------------------------------------- + + +import java.sql.*; +import oracle.jdbc.OracleConnection; + +public class BatchInsert { + + public static void main(String[] args) throws InterruptedException { + + try { + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@linux01:1521:LIN19C", "system","oracle"); + + String sql = "INSERT INTO t SELECT ?, ? FROM dual"; + PreparedStatement stmt = conn.prepareStatement(sql); + + for(int i=1; i<=10; i++) { + stmt.setInt(1, i); + stmt.setString(2, new String("blah")); + stmt.addBatch(); + } + + stmt.executeBatch(); + + } catch (SQLException ex) { + ex.printStackTrace(); + } + } +} diff --git a/tpt/demos/Client_id.java b/tpt/demos/Client_id.java new file mode 100644 index 0000000..181a64c --- /dev/null +++ b/tpt/demos/Client_id.java @@ -0,0 +1,47 @@ +// run with: +// java -cp $ORACLE_HOME/jdbc/lib/ojdbc5.jar:. Client_id +// +// Note that Oracle 12c JDBC drivers support JDBC 4.1 with SetClientInfo() method +// In Oracle 12c+ drivers, conn.setEndToEndMetrics() is deprecated in favor of +// conn.setClientInfo() +// +// https://docs.oracle.com/en/database/oracle/oracle-database/19/jjdbc/JDBC-standards-support.html#GUID-1987FAC4-E93A-49A5-9EB4-A78B465E6938 + +import java.sql.*; +import oracle.jdbc.OracleConnection; + +public class Client_id { + + public static void main(String[] args) throws InterruptedException { + + try { + // get connection and statement + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:LIN11G", "system","oracle"); + Statement stmt = conn.createStatement(); + + // set metrics for connection (will be sent to server the next rountrip) + String[] metrics = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX]; + metrics[OracleConnection.END_TO_END_CLIENTID_INDEX]="Tanel Poder:123"; + ((OracleConnection)conn).setEndToEndMetrics(metrics,(short)0); + + // run your SQL code. the client identifier attribute is bundled with this roundtrip and automatically sent to server with this request + ResultSet rs = stmt.executeQuery("SELECT sid, username, client_identifier FROM v$session WHERE type='USER' AND status='ACTIVE'"); + + // print output from v$session. here you should see this java program's session with client identifier set + System.out.printf("\n%4s %20s %30s\n", new Object[] {"SID", "USERNAME", "CLIENT_IDENTIFIER"}); + System.out.println("--------------------------------------------------------"); + while (rs.next()) { + System.out.printf("%4s %20s %30s\n", new Object[] {Integer.toString(rs.getInt("sid")), rs.getString("username"), rs.getString("client_identifier")} ); + } + + // Sleeping for 10 seconds. If you query the client_identifier from another session + // you'll see that the last client_identifier still remains set (is not automatically cleared + // upon statement completion) + Thread.sleep(10000); + } + catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/tpt/demos/Commit.java b/tpt/demos/Commit.java new file mode 100644 index 0000000..b64dcdc --- /dev/null +++ b/tpt/demos/Commit.java @@ -0,0 +1,34 @@ +// run with: +// java -cp $ORACLE_HOME/jdbc/lib/ojdbc5.jar:. Client_id + + +import java.sql.*; +import oracle.jdbc.OracleConnection; + +public class Commit { + + public static void main(String[] args) throws InterruptedException { + + try { + // get connection and statement + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:LIN11G", "system","oracle"); + Statement stmt = conn.createStatement(); + + // set metrics for connection (will be sent to server the next rountrip) + String[] metrics = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX]; + metrics[OracleConnection.END_TO_END_MODULE_INDEX]="Committer"; + ((OracleConnection)conn).setEndToEndMetrics(metrics,(short)0); + + for(int i=1;i<1000000;i++) { + ResultSet rs = stmt.executeQuery("UPDATE t SET a=a+1"); + //autocommit takes care of this conn.commit(); + } + + Thread.sleep(100); + } + catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/tpt/demos/Commit2.java b/tpt/demos/Commit2.java new file mode 100644 index 0000000..103e904 --- /dev/null +++ b/tpt/demos/Commit2.java @@ -0,0 +1,34 @@ +// run with: +// java -cp $ORACLE_HOME/jdbc/lib/ojdbc5.jar:. Client_id + + +import java.sql.*; +import oracle.jdbc.OracleConnection; + +public class Commit2 { + + public static void main(String[] args) throws InterruptedException { + + try { + // get connection and statement + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:LIN11G", "system","oracle"); + Statement stmt = conn.createStatement(); + + // set metrics for connection (will be sent to server the next rountrip) + String[] metrics = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX]; + metrics[OracleConnection.END_TO_END_MODULE_INDEX]="Committer"; + ((OracleConnection)conn).setEndToEndMetrics(metrics,(short)0); + + for(int i=1;i<1000000;i++) { + ResultSet rs = stmt.executeQuery("UPDATE t SET a=a+1"); + //autocommit takes care of this conn.commit(); + } + + Thread.sleep(1000); + } + catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/tpt/demos/GetDate.class b/tpt/demos/GetDate.class new file mode 100644 index 0000000..c2bbbd7 Binary files /dev/null and b/tpt/demos/GetDate.class differ diff --git a/tpt/demos/GetDate.java b/tpt/demos/GetDate.java new file mode 100644 index 0000000..6bcf053 --- /dev/null +++ b/tpt/demos/GetDate.java @@ -0,0 +1,32 @@ +// run with: +// java -cp $ORACLE_HOME/jdbc/lib/ojdbc6.jar:. GetDate + + +import java.sql.*; +import oracle.jdbc.OracleConnection; + +public class GetDate { + + public static void main(String[] args) throws InterruptedException { + + try { + // get connection and statement + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@centos7:1521:LIN121", "system","oracle"); + Statement stmt = conn.createStatement(); + stmt.execute("ALTER SESSION SET time_zone = '-08:00'"); + + ResultSet rs = stmt.executeQuery("SELECT d FROM t"); + + // print output from v$session. here you should see this java program's session with client identifier set + System.out.printf("\n%-10s %-10s %-20s\n", "DATE", "TIME", "TIMESTAMP"); + System.out.println("-------------------------------------------------"); + while (rs.next()) { + System.out.printf("%-10s %-10s %-20s\n", new Object[] {rs.getDate("D").toString(), rs.getTime("D").toString(), rs.getTimestamp("D").toString()} ); + } + } + catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/tpt/demos/JustSleep.class b/tpt/demos/JustSleep.class new file mode 100644 index 0000000..b50a866 Binary files /dev/null and b/tpt/demos/JustSleep.class differ diff --git a/tpt/demos/JustSleep.java b/tpt/demos/JustSleep.java new file mode 100644 index 0000000..672078a --- /dev/null +++ b/tpt/demos/JustSleep.java @@ -0,0 +1,30 @@ +// run with: +// java -cp $ORACLE_HOME/jdbc/lib/ojdbc5.jar:. Client_id + + +import java.sql.*; +import oracle.jdbc.OracleConnection; + +public class JustSleep { + + public static void main(String[] args) throws InterruptedException { + + try { + // get connection and statement + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@oel6:1521:LIN112", "system","oracle"); + Statement stmt = conn.createStatement(); + + // set metrics for connection (will be sent to server the next rountrip) + String[] metrics = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX]; + metrics[OracleConnection.END_TO_END_CLIENTID_INDEX]="Tanel Poder"; + ((OracleConnection)conn).setEndToEndMetrics(metrics,(short)0); + + // run your SQL code. the client identifier attribute is bundled with this roundtrip and automatically sent to server with this request + ResultSet rs = stmt.executeQuery("BEGIN DBMS_LOCK.SLEEP(9999); END;"); + } + catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/tpt/demos/SelectCount.class b/tpt/demos/SelectCount.class new file mode 100644 index 0000000..0e17846 Binary files /dev/null and b/tpt/demos/SelectCount.class differ diff --git a/tpt/demos/SelectCount.java b/tpt/demos/SelectCount.java new file mode 100644 index 0000000..20e632b --- /dev/null +++ b/tpt/demos/SelectCount.java @@ -0,0 +1,42 @@ +// run with: +// java -cp $ORACLE_HOME/jdbc/lib/ojdbc5.jar:. Client_id + + +import java.sql.*; +import oracle.jdbc.OracleConnection; + +public class SelectCount { + + public static void main(String[] args) throws InterruptedException { + + try { + // get connection and statement + DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); + Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@oel6:1521:LIN112", "system","oracle"); + Statement stmt = conn.createStatement(); + + // set metrics for connection (will be sent to server the next rountrip) + String[] metrics = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX]; + metrics[OracleConnection.END_TO_END_CLIENTID_INDEX]="Tanel Poder"; + ((OracleConnection)conn).setEndToEndMetrics(metrics,(short)0); + + // run your SQL code. the client identifier attribute is bundled with this roundtrip and automatically sent to server with this request + ResultSet rs = stmt.executeQuery("SELECT COUNT(*) c FROM dba_source"); + + // print output from v$session. here you should see this java program's session with client identifier set + System.out.printf("\nCOUNT\n"); + System.out.println("---------------------------------"); + while (rs.next()) { + System.out.printf("%-10s\n", new Object[] {Integer.toString(rs.getInt("C"))} ); + } + + // Sleeping for 10 seconds. If you query the client_identifier from another session + // you'll see that the last client_identifier still remains set (is not automatically cleared + // upon statement completion) + Thread.sleep(10000); + } + catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/tpt/demos/assm_bug.sql b/tpt/demos/assm_bug.sql new file mode 100644 index 0000000..2ea688a --- /dev/null +++ b/tpt/demos/assm_bug.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Make sure that the USERS tablespace is ASSM-managed +DROP TABLE t; +CREATE TABLE t(a CHAR(100)) TABLESPACE users; + +INSERT INTO t SELECT 'x' FROM dual CONNECT BY LEVEL <= 5000000; + +COMMIT; + +ALTER SESSION SET plsql_optimize_level = 0; + +-- EXEC FOR i IN 1..1000 LOOP INSERT INTO t VALUES ('x'); END LOOP; + +PROMPT Deleting all rows from t, do not commit... + +DELETE t; + +PROMPT Run this in another session, this should be very slow: +PROMPT EXEC FOR i IN 1..1000 LOOP INSERT INTO t VALUES ('x'); END LOOP;; +PROMPT diff --git a/tpt/demos/bad_monitor.sql b/tpt/demos/bad_monitor.sql new file mode 100644 index 0000000..9faa882 --- /dev/null +++ b/tpt/demos/bad_monitor.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT THIS SCRIPT WILL CAUSE A LOT OF TORUBLE!!! +PROMPT DON'T RUN IT IN PRODUCTION!!! +PAUSE PRESS ENTER TO CONTINUE OR CTRL+C TO EXIT... + +DECLARE + j number; +BEGIN + WHILE true LOOP + select count(*) into j from x$ksmsp; + END LOOP; +END; +/ + diff --git a/tpt/demos/bak_assm_bug.sql b/tpt/demos/bak_assm_bug.sql new file mode 100644 index 0000000..b67b3ea --- /dev/null +++ b/tpt/demos/bak_assm_bug.sql @@ -0,0 +1,73 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- create tablespace assm +-- extent management local uniform size 1m +-- segment space management auto +-- datafile +-- '/abc/db01/oracle/ABC1P/oradata/assm_01.dbf' size 1000m; + +create table test_assm +( + n1 number, + v1 varchar2(50), + v2 varchar2(50), + v3 varchar2(50), + v4 varchar2(50), + v5 varchar2(50), + v6 varchar2(50), + v7 varchar2(50), + v8 varchar2(50), + v9 varchar2(50), +v10 varchar2(50) +) +tablespace USERS; + + +begin +for i in 1..1000000 loop +insert into test_assm values +(i, +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567'); +end loop; +end; +/ + +COMMIT; + +ALTER SESSION SET plsql_optimize_level = 0; + +begin +for i in 1..1000 loop +insert into test_assm values +(i, +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567', +'123456789*123456789*123456789*123456789*1234567'); +end loop; +end; +/ + +PROMPT Deleting all rows from the table, do not commit... + +DELETE test_assm; + +PROMPT Re-execute script that inserts 1000 rows from a different session - this should be very slow + + diff --git a/tpt/demos/bind_peeking.sql b/tpt/demos/bind_peeking.sql new file mode 100644 index 0000000..bd0b0eb --- /dev/null +++ b/tpt/demos/bind_peeking.sql @@ -0,0 +1,60 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/bind_peeking.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- +-- Copyright: (c) 2007-2009 Tanel Poder +-- +-------------------------------------------------------------------------------- + +set echo on + +drop table t; +create table t as select * from dba_objects, (select rownum from dual connect by level <= 20); +create index i on t(object_id); + +exec dbms_stats.gather_table_stats(user, 'T'); + +select count(*), min(object_id) , max(object_id) from t; + +pause + +var x number + +exec :x := 100000 + +pause + +set timing on + +select sum(length(object_name)) from t where object_id > :x; + + + +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); + +pause + +exec :x := 1 + +select sum(length(object_name)) from t where object_id > :x; + + + +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); + +pause + +select sum(length(object_name)) from t where object_id > :x; + + + +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); + +set echo off diff --git a/tpt/demos/buffer_busy.sql b/tpt/demos/buffer_busy.sql new file mode 100644 index 0000000..c6c9612 --- /dev/null +++ b/tpt/demos/buffer_busy.sql @@ -0,0 +1,46 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- DROP TABLE tbb; +-- DROP SEQUENCE tbb_seq; +-- +-- CREATE SEQUENCE tbb_seq NOCACHE; +-- +-- CREATE TABLE tbb ( +-- id NUMBER PRIMARY KEY +-- , val NUMBER +-- , entry_date DATE +-- ); +-- +-- CREATE INDEX tbb_entry ON tbb(entry_date); +-- +-- INSERT INTO tbb VALUES (0, 123, sysdate); +-- COMMIT; + +DECLARE + tmp_id NUMBER; +BEGIN + + WHILE TRUE LOOP + + SELECT MIN(id) INTO tmp_id FROM tbb; + + INSERT INTO tbb VALUES (tbb_seq.NEXTVAL, 123, sysdate); + + BEGIN + DELETE FROM tbb WHERE id = tmp_id; + EXCEPTION + WHEN no_data_found THEN NULL; + END; + + COMMIT; + + END LOOP; + +END; +/ + + + + + diff --git a/tpt/demos/bulk_insert.sql b/tpt/demos/bulk_insert.sql new file mode 100644 index 0000000..58a86d9 --- /dev/null +++ b/tpt/demos/bulk_insert.sql @@ -0,0 +1,47 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Simple Export + +drop table t; +create table t as select * from all_users where 1=0; + +-- this type def is created based on data dictionary definition of extracted table when exporting +create or replace type rtype as object ( username varchar2(30), user_id number, created date ) +/ +create or replace type ttype as table of rtype; +/ + +-- set nls_date format to some standard format + +declare + rows ttype := ttype(); +begin + insert into t + select * from table ( + ttype ( + rtype('a',1,sysdate), + rtype('b',2,sysdate), + rtype('c',3,sysdate), + rtype('d',4,sysdate), + rtype('e',5,sysdate), + rtype('f',6,sysdate), + rtype('g',7,sysdate), + rtype('h',8,sysdate), + rtype('i',9,sysdate), + rtype('j',10,sysdate), + rtype('k',11,sysdate), + rtype('l',12,sysdate), + rtype('m',13,sysdate), + rtype('n',14,sysdate) + ) + ); +end; +/ + +select * from t; + +drop type ttype; +drop type rtype; + +-- can we do completely without creating stored types? \ No newline at end of file diff --git a/tpt/demos/color.sql b/tpt/demos/color.sql new file mode 100644 index 0000000..2aea175 --- /dev/null +++ b/tpt/demos/color.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + color(lpad(' ',20), trunc(mod((r+0)/36,6)), trunc(mod((r+0)/6,6)), trunc(mod((r+0),6)) ) + || color(lpad(' ',20), trunc(mod((r+0)/36,6))+0, trunc(mod((r+0)/6,6))+0, trunc(mod((r+0),6))+0 ) + || color(lpad(' ',20), trunc(mod((r+0)/36,6))+0, trunc(mod((r+0)/6,6))+0, trunc(mod((r+0),6))+0 ) + || color(lpad(' ',20), trunc(mod((r+0)/36,6))+0, trunc(mod((r+0)/6,6))+0, trunc(mod((r+0),6))+0 ) + || color(lpad(' ',20), trunc(mod((r+0)/36,6))+0, trunc(mod((r+0)/6,6))+0, trunc(mod((r+0),6))+0 ) + || color(lpad(' ',20), trunc(mod((r+0)/36,6))+0, trunc(mod((r+0)/6,6))+0, trunc(mod((r+0),6))+0 ) +from + (select rownum - 1 r from dual connect by level <= 36*6) +/ + diff --git a/tpt/demos/countstar.sql b/tpt/demos/countstar.sql new file mode 100644 index 0000000..c8d53fa --- /dev/null +++ b/tpt/demos/countstar.sql @@ -0,0 +1,52 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- count(columnX) is slower than count(*) or count(1) + +drop table t; +create table t cache as select * from v$session; +insert into t select * from t; +insert into t select * from t; +insert into t select * from t; +insert into t select * from t; +insert into t select * from t; +insert into t select * from t; +insert into t select * from t; +insert into t select * from t; +insert into t select * from t; +insert /*+ append */ into t select * from t; +commit; +insert /*+ append */ into t select * from t; +commit; +insert /*+ append */ into t select * from t; +commit; +insert /*+ append */ into t select * from t; +commit; +insert /*+ append */ into t select * from t; +commit; +insert /*+ append */ into t select * from t; +commit; + +exec dbms_stats.gather_table_stats(user, 'T'); + +-- to get better rowsource level timing accuracy +alter session set "_rowsource_statistics_sampfreq"=1; + +select /*+ gather_plan_statistics */ count(*) from t; + +set timing on + +select /*+ gather_plan_statistics */ count(*) from t; +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); + +select /*+ gather_plan_statistics */ count(1) from t; +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); + +select /*+ gather_plan_statistics */ count(sid) from t; +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); + +select /*+ gather_plan_statistics */ count(state) from t; +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); + +-- set back to default +alter session set "_rowsource_statistics_sampfreq"=128; diff --git a/tpt/demos/crash_process_with_coredump.sql b/tpt/demos/crash_process_with_coredump.sql new file mode 100644 index 0000000..9fa3b5b --- /dev/null +++ b/tpt/demos/crash_process_with_coredump.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- This hard crashes the target process in 10.2.0.3 Solaris with SEGV + +DROP VIEW v1; +DROP FUNCTION f1; + + +CREATE OR REPLACE FUNCTION f1 RETURN NUMBER AS +BEGIN + RETURN 1; +END; +/ + + +CREATE OR REPLACE view v1 AS SELECT f1 FROM dual; + +CREATE OR REPLACE FUNCTION f1 RETURN NUMBER AS + i NUMBER; +BEGIN + SELECT f1 INTO i FROM v1; + RETURN i; +END; +/ + +CREATE OR REPLACE view v1 AS SELECT f1 FROM dual; + diff --git a/tpt/demos/crash_session_9208.txt b/tpt/demos/crash_session_9208.txt new file mode 100644 index 0000000..bfe7e09 --- /dev/null +++ b/tpt/demos/crash_session_9208.txt @@ -0,0 +1,48 @@ +From Metalink note: 602111.1 + +----------------------- + +connect scott/tiger + +CREATE TABLE "SCOTT"."DS_CONFIG" ( +"ID" NUMBER NOT NULL, +"TITLE" VARCHAR2(100 byte) NOT NULL, +"MENU" VARCHAR2(50 byte) NOT NULL, +"DESCRIPTION" VARCHAR2(200 byte), +"CODE" VARCHAR2(3 byte) NOT NULL, +"LOB_TABLE" VARCHAR2(1024 byte) NOT NULL, +"LOB_FIELD" VARCHAR2(100 byte) NOT NULL, +"ISBLOB" CHAR(1byte) NOT NULL, +"DOC_TYPE" VARCHAR2(4 byte), +"TYPE_FIELD" VARCHAR2(100 byte), +"ROLE" VARCHAR2(50 byte), +"KEY_FIELD" VARCHAR2(100 byte) NOT NULL, +"KEY_TYPE" CHAR(1 byte) NOT NULL, +"BROWSE_TABLE" VARCHAR2(1024 byte) NOT NULL, +"BROWSE_ORDER" VARCHAR2(250 byte), +"ISPROD" CHAR(1 byte), +CONSTRAINT "DS_CONFIG_PK" PRIMARY KEY("ID") +USING INDEX +TABLESPACE "USERS" +STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS +2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255 +NOVALIDATE, +CONSTRAINT "DS_CONFIG__ISBLOB" CHECK("ISBLOB" IN ('T','F'))) +TABLESPACE "USERS" PCTFREE 10 PCTUSED 0 INITRANS 1 +MAXTRANS 255 +STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS +2147483645 PCTINCREASE 0); + +connect / as sysdba + +CREATE OR REPLACE VIEW "SCOTT"."DS_ROLES" ("ROLE","GRANTEE", +"CODE","MENU") AS +SELECT DISTINCT c1.ROLE, p1.GRANTEE,c1.CODE, c1.menu +FROM SYS.DBA_ROLE_PRIVS p1 +LEFT JOIN DBA_ROLE_PRIVS p2 ON p1.granted_role = p2.grantee +LEFT JOIN DBA_ROLE_PRIVS p3 ON p2.granted_role = p3.grantee +LEFT JOIN DBA_ROLE_PRIVS p4 ON p3.granted_role = p4.grantee +LEFT JOIN DBA_ROLE_PRIVS p5 ON p4.granted_role = p5.grantee +LEFT JOIN SCOTT.DS_CONFIG c1 ON c1.role = p1.granted_role OR c1.role = p2.granted_role OR +c1.role = p3.granted_role OR c1.role = p4.granted_role OR c1.role = p5.granted_role +WHERE p1.GRANTEE LIKE 'OPS$%' AND c1.ID IS NOT NULL; diff --git a/tpt/demos/create_wide_table.sql b/tpt/demos/create_wide_table.sql new file mode 100644 index 0000000..3af23e2 --- /dev/null +++ b/tpt/demos/create_wide_table.sql @@ -0,0 +1,27 @@ +-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DECLARE + cmd CLOB := 'CREATE TABLE widetable ( id NUMBER PRIMARY KEY '; + ins CLOB := 'INSERT INTO widetable SELECT rownum'; +BEGIN + FOR x IN 1..999 LOOP + cmd := cmd || ', col'||TRIM(TO_CHAR(x))||' VARCHAR2(10)'; + ins := ins || ', TRIM(TO_CHAR(rownum))'; + END LOOP; + cmd := cmd || ')'; + ins := ins || ' FROM dual CONNECT BY level <= 100'; + EXECUTE IMMEDIATE cmd; + EXECUTE IMMEDIATE ins; +END; +/ + +COMMIT; + +-- stats with histograms +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'WIDETABLE',method_opt=>'FOR TABLE, FOR ALL COLUMNS SIZE 254'); + +-- no histograms +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'WIDETABLE',method_opt=>'FOR TABLE, FOR ALL COLUMNS SIZE 1'); + +-- EXEC sys.dbms_shared_pool.purge('SYSTEM', 'WIDETABLE', 1, 1); diff --git a/tpt/demos/cse.sql b/tpt/demos/cse.sql new file mode 100644 index 0000000..298f33e --- /dev/null +++ b/tpt/demos/cse.sql @@ -0,0 +1,57 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/cse.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- +-- Demonstrating common subexpression elimination transformation +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- +-- Copyright: (c) 2007-2009 Tanel Poder +-- +-------------------------------------------------------------------------------- + +set serverout on size 1000000 + +create or replace function imhere( par in varchar2 ) + return varchar2 +as +begin + dbms_output.put_line('i''m here!: '||par); + return par; +end; +/ + + +@pd eliminate_common_subexpr + +set echo on + +select /*+ ORDERED_PREDICATES tanel1 */ * +from dual +where + (imhere(dummy) = 'X' and length(dummy) = 10) +or (imhere(dummy) = 'X' and length(dummy) = 11) +/ + +alter session set "_eliminate_common_subexpr"=false; + +select /*+ ORDERED_PREDICATES tanel2 */ * +from dual +where + (imhere(dummy) = 'X' and length(dummy) = 10) +or (imhere(dummy) = 'X' and length(dummy) = 11) +/ + +set echo off + +select /*+ tanel3 */ * +from dual +where + (imhere(dummy) = 'X' and length(dummy) = 10) +or (imhere(dummy) = 'X' and length(dummy) = 11) +/ diff --git a/tpt/demos/cursor_sharing_similar.sql b/tpt/demos/cursor_sharing_similar.sql new file mode 100644 index 0000000..370c925 --- /dev/null +++ b/tpt/demos/cursor_sharing_similar.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t; + +create table t as +select rownum a, 'zzz' b from dual connect by level<=1000; + +create index i on t(a); + +exec dbms_stats.gather_table_stats(user,'T',method_opt=>'FOR COLUMNS A SIZE 254'); + +@sqlt "select * from t where a =" + + +alter session set cursor_sharing = similar; + +spool lotsofselects.sql + +select 'select * from t where a = '||rownum||';' from dual connect by level<=10000; + +spool off + +@lotsofselects.sql +@hash + + +@sqlt "select * from t where a =" + +--exec for i in 1 .. 10000 loop execute immediate 'delete t where a = '||to_char(i); end loop; +--declare j number; begin for i in 1..1000 loop select count(*) into + + diff --git a/tpt/demos/cursor_sharing_similar2.sql b/tpt/demos/cursor_sharing_similar2.sql new file mode 100644 index 0000000..d93c3b8 --- /dev/null +++ b/tpt/demos/cursor_sharing_similar2.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t; + +create table t as +select rownum a, 'zzz' b from dual connect by level<=1000 +union all +select 0, 'yyy' FROM dual; + +create index i on t(a); + +exec dbms_stats.gather_table_stats(user,'T',method_opt=>'FOR COLUMNS A,B SIZE 254'); + +alter session set cursor_sharing = similar; + +declare + j number; +begin + for i in 1..1000 loop + select count(*) into j from t where a = to_char(i); + end loop; +end; +/ + + diff --git a/tpt/demos/ddl_trigger.sql b/tpt/demos/ddl_trigger.sql new file mode 100644 index 0000000..8532859 --- /dev/null +++ b/tpt/demos/ddl_trigger.sql @@ -0,0 +1,92 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ddl_trigger.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- +-- Allows creating a DDL safeguard trigger, which prohibits +-- DDL on all objects except the ones listed. +-- This helps to work around accidential table/index dropping etc +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- +-- Copyright: (c) 2007-2009 Tanel Poder +-- +-------------------------------------------------------------------------------- + +EXEC EXECUTE IMMEDIATE 'DROP TRIGGER ddl_trig'; EXCEPTION WHEN OTHERS THEN NULL; +DROP TABLE test_table; +DROP TABLE ddl_allowed_operations; + +CREATE TABLE ddl_allowed_operations ( + owner VARCHAR2(30) NOT NULL + , object_name VARCHAR2(128) NOT NULL + , create_allowed CHAR(1) NOT NULL + , alter_allowed CHAR(1) NOT NULL + , drop_allowed CHAR(1) NOT NULL + , truncate_allowed CHAR(1) NOT NULL + , CONSTRAINT ddl_allowed_operations PRIMARY KEY ( owner, object_name ) +) +ORGANIZATION INDEX +/ + +CREATE OR REPLACE TRIGGER ddl_trig + BEFORE CREATE OR ALTER OR DROP OR TRUNCATE ON DATABASE + +DECLARE + + l_create CHAR(1); + l_alter CHAR(1); + l_drop CHAR(1); + l_truncate CHAR(1); + +BEGIN + + BEGIN + SELECT create_allowed, alter_allowed, drop_allowed, truncate_allowed + INTO l_create, l_alter, l_drop, l_truncate + FROM ddl_allowed_operations + WHERE owner = ora_dict_obj_owner + AND object_name = ora_dict_obj_name; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, 'DDL on '||ora_dict_obj_owner||'.'||ora_dict_obj_name|| ' prohibited. Object not listed in DDL_ALLOWED_OPERATIONS table.'); + END; + + CASE ora_sysevent + WHEN 'CREATE' THEN + IF UPPER(l_create) != 'Y' THEN + RAISE_APPLICATION_ERROR(-20000, 'CREATE on '||ora_dict_obj_owner||'.'||ora_dict_obj_name|| ' prohibited.'); + END IF; + WHEN 'ALTER' THEN + IF UPPER(l_alter) != 'Y' THEN + RAISE_APPLICATION_ERROR(-20000, 'ALTER on '||ora_dict_obj_owner||'.'||ora_dict_obj_name|| ' prohibited.'); + END IF; + WHEN 'DROP' THEN + IF UPPER(l_drop) != 'Y' THEN + RAISE_APPLICATION_ERROR(-20000, 'DROP on '||ora_dict_obj_owner||'.'||ora_dict_obj_name|| ' prohibited.'); + END IF; + WHEN 'TRUNCATE' THEN + IF UPPER(l_truncate) != 'Y' THEN + RAISE_APPLICATION_ERROR(-20000, 'TRUNCATE on '||ora_dict_obj_owner||'.'||ora_dict_obj_name|| ' prohibited.'); + END IF; + END CASE; + +END; +/ + +SHOW ERR + +INSERT INTO ddl_allowed_operations VALUES (user, 'TEST_TABLE', 'Y', 'N', 'N', 'N'); +COMMIT; + +CREATE TABLE test_table (a INT); + +-- DROP TABLE test_table; +-- TRUNCATE TABLE test_table; + +-- UPDATE ddl_allowed_operations SET drop_allowed = 'Y' WHERE owner = user AND object_name = 'TEST_TABLE'; +-- DROP TABLE test_table; diff --git a/tpt/demos/direct_load_cleanout.sql b/tpt/demos/direct_load_cleanout.sql new file mode 100644 index 0000000..936d60b --- /dev/null +++ b/tpt/demos/direct_load_cleanout.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--DROP TABLE t; +--CREATE TABLE t (a CHAR(100)) PCTFREE 99 PCTUSED 1 TABLESPACE users; +--@seg2 T +--@gts T + +TRUNCATE TABLE t; + +INSERT /*+ APPEND */ INTO t SELECT 'x' FROM dual CONNECT BY LEVEL <= 1000; +--@dump 4 99316 Start +--@dump 4 99317 Start + +ALTER SYSTEM FLUSH BUFFER_CACHE; + +COMMIT; +--@dump 4 99316 Start +--@dump 4 99317 Start + +--@ev 10203 2 +--@ev 10200 1 +--@ev 10046 8 + +SELECT COUNT(*) FROM t; +--@dump 4 99316 Start +--@dump 4 99317 Start diff --git a/tpt/demos/dontrun.sql b/tpt/demos/dontrun.sql new file mode 100644 index 0000000..cf4945a --- /dev/null +++ b/tpt/demos/dontrun.sql @@ -0,0 +1,37 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM dual dontrun; + +@hash + +@oddc optim + +ALTER SESSION SET EVENTS 'trace [SQL_Optimizer] [sql:g40pz6bqjwbzt] controlc_signal()'; + +ALTER SYSTEM FLUSH SHARED_POOL; + +SELECT * FROM dual pleaserun; +SELECT * FROM dual dontrun; +SELECT * FROM dual dontrun; + +ALTER SESSION SET EVENTS 'trace [SQL_Optimizer] [sql:g40pz6bqjwbzt] off'; + +ALTER SESSION SET EVENTS 'trace [Parallel_Execution] [sql:g40pz6bqjwbzt] controlc_signal()'; + +SELECT * FROM dual dontrun; + +ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4; + +SELECT * FROM dual dontrun; + +ALTER SESSION SET EVENTS 'trace [Parallel_Execution] [sql:g40pz6bqjwbzt] off'; + + +ALTER SYSTEM FLUSH SHARED_POOL; + +ALTER SESSION SET EVENTS 'trace [SQL_Optimizer] [sql:g40pz6bqjwbzt] crash'; + +SELECT * FROM dual dontrun; + + diff --git a/tpt/demos/drop_logmine.sql b/tpt/demos/drop_logmine.sql new file mode 100644 index 0000000..15f0650 --- /dev/null +++ b/tpt/demos/drop_logmine.sql @@ -0,0 +1,86 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/drop_logmine.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- +-- A logminer demo script showing logged DDL statement texts +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- +-- Copyright: (c) 2007-2009 Tanel Poder +-- +-------------------------------------------------------------------------------- + +@ti + +--alter session set events '1349 trace name context forever, level 131071'; + +set echo on + +create table tanel_drop_test( a int ) enable supplemental log data (all) columns; + +--insert into t select rownum from dba_objects where rownum <= 25000; + +alter system switch logfile; + +connect tanel/oracle@lin11g + +col member new_value member +col sequence# new_value sequence +select member from v$logfile where group# = (select group# from v$log where status = 'CURRENT'); +select to_char(sequence#) sequence# from v$log where status = 'CURRENT'; + +prompt drop /* tanel_blah_&sequence */ table tanel_drop_test purge;; +drop /* tanel_blah_&sequence */ table tanel_drop_test purge; + +delete from TANEL_DEL_TEST where rownum <= 1; +--delete from TANEL_DEL_TEST where rownum <= 1000; +commit; + + +@date + +select + sid + , serial# + , audsid + , '0x'||trim(to_char(sid, 'XXXX')) "0xSID" + , '0x'||trim(to_char(serial#, 'XXXXXXXX')) "0xSERIAL" + , '0x'||trim(to_char(audsid, 'XXXXXXXX')) "0xAUDSID" +from + v$session +where + sid = userenv('SID') +/ + +connect tanel/oracle@lin11g + +alter system switch logfile; + +alter system dump logfile '&member'; + +set echo off + +@minelog &member + +select * from v$logmnr_contents where table_name = 'TANEL_DROP_TEST' and rbasqn = &sequence +. + +@pr + +select * from v$logmnr_contents where table_name = 'TANEL_DEL_TEST' or table_name like '%80184%' and rbasqn = &sequence +. + +@pr + +col member clear +col sequence# clear + + +alter system checkpoint; + +host pscp oracle@linux03:&member c:\tmp\ddl.log diff --git a/tpt/demos/exchange_partition.sql b/tpt/demos/exchange_partition.sql new file mode 100644 index 0000000..7775881 --- /dev/null +++ b/tpt/demos/exchange_partition.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--drop table mytab; +--drop table tmp; + +-- this is our "source table" +create table mytab as select * from all_objects; +create index i on mytab(owner); + +-- this is where we copy only needed rows: +create table tmp +partition by range (owner) ( + partition p1 values less than (maxvalue) +) +as +select * from mytab +where owner != 'SYS' +/ + +-- in order to do partition exchange, the physical structure of source table and target need to be the same (including indexes): +create index i_tmp on tmp(owner) local; + +-- get rid of old rows +truncate table mytab; + +-- exchange the tmp.p1 partition segment with mytab's segment +alter table tmp exchange partition p1 with table mytab including indexes; + +-- you may need to run this to validate any constraints if they're in novalidate status +alter table mytab constraint enable validate; diff --git a/tpt/demos/explain.sql b/tpt/demos/explain.sql new file mode 100644 index 0000000..86fd860 --- /dev/null +++ b/tpt/demos/explain.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t; +create table t as select * from all_objects; +create index i on t(object_id); +@gts t + +explain plan for +select * from t where object_id = 10000; + +select * from table(dbms_xplan.display); + +rollback; +var v number +exec :v:=10000; + +explain plan for +select * from t where object_id = :v; + +select * from table(dbms_xplan.display); diff --git a/tpt/demos/fetch.sql b/tpt/demos/fetch.sql new file mode 100644 index 0000000..1762646 --- /dev/null +++ b/tpt/demos/fetch.sql @@ -0,0 +1,66 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/fetch.sql "" +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- +-- Shows effect of arraysize to fetch lengths and +-- in which execution/fetching stage data access work is done +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- +-- Copyright: (c) 2007-2009 Tanel Poder +-- +-------------------------------------------------------------------------------- + +set termout off + +drop table t; + +create table t as +select + rownum a + , CAST(rownum as CHAR(2000)) b +from + dual +connect by + level <= 50 +/ + +create index i on t(a); + +exec dbms_stats.gather_table_stats(user, 'T'); + +--set arraysize 5 + +col fetch_command new_value fetch_command + +select replace(replace(replace('&1', '*', '\*'),'/','\/'),'>','\>') fetch_command from dual; + +-- hard parse +clear buffer +1 &1 +/ + +alter session set sql_trace=true; + +@ti +set termout off + +clear buffer +1 &1 +/ + +set termout on + +prompt TRACE OUTPUT: +prompt _________________________________ +prompt + +host "grep -A 99999 -B1 '&fetch_command' &trc | sed -e '/&fetch_command/p;/PARS/p;/EXEC/p;/FETCH/p;d'" + +--select * from table(dbms_xplan.display_cursor(null,null, 'ALLSTATS LAST')); + diff --git a/tpt/demos/find_hash_collision.sql b/tpt/demos/find_hash_collision.sql new file mode 100644 index 0000000..09d6759 --- /dev/null +++ b/tpt/demos/find_hash_collision.sql @@ -0,0 +1,50 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/find_hash_collision.sql +-- Purpose: Advanced Oracle Troubleshooting seminar demo script +-- for finding different SQL statements which have colliding hash +-- values +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @demos/find_hash_collision.sql +-- +-- Other: In theory it may take a lot of memory if iterating way too many +-- times before finding colliding hash value +-- +-- NB! This script is not working properly yet! As GET_SQL_HASH function +-- isn't doing its job right +-- +-------------------------------------------------------------------------------- + +SET SERVEROUT ON SIZE 1000000 + +DECLARE + TYPE typ IS TABLE OF NUMBER INDEX BY VARCHAR2(10); + t typ; + i NUMBER := 0; + h VARCHAR2(10); + tmp NUMBER; + tmp_raw RAW(16); + str VARCHAR2(100):='select * from dual where rownum = '; +BEGIN + WHILE TRUE LOOP + h := TO_CHAR(DBMS_UTILITY.GET_SQL_HASH(str||TO_CHAR(i), tmp_raw, tmp)); + + IF t.EXISTS(h) THEN + DBMS_OUTPUT.PUT_LINE(CHR(10)||'Matching hash values found (hash='||TO_CHAR(h)||'):'||CHR(10)||CHR(10)||str||TO_CHAR(t(h))||CHR(10)||str||TO_CHAR(i)); + DBMS_OUTPUT.PUT_LINE('raw='||RAWTOHEX(tmp_raw)); + EXIT; + ELSE + t(h):=i; + i:=i+1; + END IF; + END LOOP; +END; +/ + +SET SERVEROUT OFF diff --git a/tpt/demos/heapdump.sql b/tpt/demos/heapdump.sql new file mode 100644 index 0000000..6e8d38c --- /dev/null +++ b/tpt/demos/heapdump.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set echo on + +declare + type tabtype is table of char(100); + t tabtype := NULL; + + +begin + + select object_name + bulk collect into t + from dba_objects + order by lower(object_name); + + + dbms_lock.sleep(999999); + +end; +/ + +set echo off \ No newline at end of file diff --git a/tpt/demos/index_build_migrated_rows.sql b/tpt/demos/index_build_migrated_rows.sql new file mode 100644 index 0000000..e6328f3 --- /dev/null +++ b/tpt/demos/index_build_migrated_rows.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t; + +create table t PCTFREE 0 as select * from dba_source, (select 1 from dual connect by level<=5); +--create table t PCTFREE 0 as select * from dba_source; + +-- deliberately using analyze table command to compute the number of chained rows +analyze table t compute statistics; +select num_rows,blocks,empty_blocks,chain_cnt from user_tables where table_name = 'T'; + +update t set owner = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' where rownum <= 100000; +commit; + +update t set owner = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' where rownum <= 100000; +commit; + +update t set owner = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' where rownum <= 100000; +commit; + +update t set owner = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' where rownum <= 100000; +commit; + +update t set owner = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' where rownum <= 100000; +commit; + +update t set owner = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' where rownum <= 100000; +commit; + +analyze table t compute statistics; +select num_rows,blocks,empty_blocks,chain_cnt from user_tables where table_name = 'T'; + +--exec dbms_stats.gather_table_stats(user,'T'); + +pause About to create the index, run snapper in another window on this session. Press ENTER to continue... + +create index i on t(case when owner = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' then owner else null end) online; + + diff --git a/tpt/demos/index_build_migrated_rows_small.sql b/tpt/demos/index_build_migrated_rows_small.sql new file mode 100644 index 0000000..9956999 --- /dev/null +++ b/tpt/demos/index_build_migrated_rows_small.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t; + +create table t PCTFREE 0 as select * from all_objects; + +update t set owner = lpad('x',30,'x') where owner = 'SYS' and rownum <= 10; + +analyze table t compute statistics; + +select chain_cnt from user_tables where table_name = 'T'; + +create index i on t(owner); + diff --git a/tpt/demos/insert_bufgets.sql b/tpt/demos/insert_bufgets.sql new file mode 100644 index 0000000..e0c3ff4 --- /dev/null +++ b/tpt/demos/insert_bufgets.sql @@ -0,0 +1,60 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +desc sydney_demo1 +desc sydney_demo2 +desc sydney_demo3 + +alter session set plsql_optimize_level=0; + +set timing on +exec for i in 1..&1 loop insert into sydney_demo1 values (0); end loop; + +set timing off termout off +rollback; +alter system checkpoint; +set timing on termout on + +exec for i in 1..&1 loop insert into sydney_demo2 values (0); end loop; + +set timing off termout off +rollback; +alter system checkpoint; +set timing on termout on + +exec for i in 1..&1 loop insert into sydney_demo3 values (0); end loop; + +set timing off termout off +rollback; +alter system checkpoint; +set timing on termout on + +set timing off + + + + + + + + + + + + + + + + + + + + + + + + + +--create table sydney_demo1 (a int) tablespace system; +--create table sydney_demo2 (a int) tablespace users; +--create table sydney_demo3 (a int) tablespace users2; diff --git a/tpt/demos/join_elimination.sql b/tpt/demos/join_elimination.sql new file mode 100644 index 0000000..06597e4 --- /dev/null +++ b/tpt/demos/join_elimination.sql @@ -0,0 +1,40 @@ +-- Oracle join elimiation demo by Tanel Poder (https://tanelpoder.com) + +DROP TABLE o; +DROP TABLE u; + +CREATE TABLE u AS SELECT * FROM all_users; +CREATE TABLE o AS SELECT * FROM all_objects WHERE owner IN (SELECT username FROM all_users); + +ALTER SESSION SET statistics_level = ALL; + +-- set echo on + +SELECT COUNT(*) FROM u, o WHERE u.username = o.owner; +SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE')); + +SELECT COUNT(*) FROM u, o WHERE u.username = o.owner AND u.created IS NULL; +SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE')); + +ALTER TABLE u ADD PRIMARY KEY (username); +ALTER TABLE o ADD CONSTRAINT fk_u FOREIGN KEY (owner) REFERENCES u(username); + +SELECT COUNT(*) FROM u, o WHERE u.username = o.owner; +SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE')); + +ALTER TABLE o DISABLE CONSTRAINT fk_u; + +SELECT COUNT(*) FROM u, o WHERE u.username = o.owner; +SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE')); + +ALTER TABLE o ENABLE NOVALIDATE CONSTRAINT fk_u; + +SELECT COUNT(*) FROM u, o WHERE u.username = o.owner; +SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE')); + +ALTER TABLE o ENABLE VALIDATE CONSTRAINT fk_u; + +SELECT COUNT(*) FROM u, o WHERE u.username = o.owner; +SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+OUTLINE -NOTE')); + +-- set echo off diff --git a/tpt/demos/kghupr1.sql b/tpt/demos/kghupr1.sql new file mode 100644 index 0000000..8be3c5a --- /dev/null +++ b/tpt/demos/kghupr1.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/kghupr1.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- +-- Copyright: (c) 2007-2009 Tanel Poder +-- +-------------------------------------------------------------------------------- + +col laddr new_value laddr +col wordsize new_value wordsize + +alter system flush shared_pool; + +select addr laddr, vsize(addr) wordsize +from v$latch_children +where gets + immediate_gets >= ( + select max(gets+immediate_gets) + from v$latch_children + where name = 'shared pool' +) +and name = 'shared pool' +/ + +-- oradebug watch 0x&laddr &wordsize self + +alter session set session_cached_cursors = 0; +alter session set "_close_cached_open_cursors"=true; + +prompt Running lots of soft parses. Use latchprofx on my SID in another session + +declare + x number; +begin + for i in 1..10000000 loop + execute immediate 'select count(*) from dual where rownum = 1'; + end loop; +end; +/ + +col laddr clear +col wordsize clear \ No newline at end of file diff --git a/tpt/demos/load.sql b/tpt/demos/load.sql new file mode 100644 index 0000000..8a593f8 --- /dev/null +++ b/tpt/demos/load.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +alter session set plsql_optimize_level=0; + +declare + l_sid number; +begin + + select sid into l_sid from v$mystat where rownum = 1; + + while true loop + execute immediate 'insert into t values('||to_char(l_sid)||')'; + execute immediate 'commit'; + execute immediate 'delete from t where a = '||to_char(l_sid); + execute immediate 'commit'; + end loop; +end; +/ diff --git a/tpt/demos/load_1.sql b/tpt/demos/load_1.sql new file mode 100644 index 0000000..64ed175 --- /dev/null +++ b/tpt/demos/load_1.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt starting demo_load_1... +set termout off +insert into t values(0); +commit; +delete t where a=0; +set termout on +prompt done. run demo_load_2 now in another session... diff --git a/tpt/demos/load_2.sql b/tpt/demos/load_2.sql new file mode 100644 index 0000000..6e1fb81 --- /dev/null +++ b/tpt/demos/load_2.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt starting demo_load_2... +delete from t where a=0; diff --git a/tpt/demos/loadlock.sql b/tpt/demos/loadlock.sql new file mode 100644 index 0000000..7d3a606 --- /dev/null +++ b/tpt/demos/loadlock.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demoX.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- +-- If executed in multiple session, should cause library cache load lock contention +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- +-- Copyright: (c) 2007-2009 Tanel Poder +-- +-------------------------------------------------------------------------------- + +prompt compiling procedure p in loop... + +begin + for i in 1..100000 loop + execute immediate 'alter system flush shared_pool'; + execute immediate 'alter procedure p compile'; +end loop; +end; +/ + diff --git a/tpt/demos/logical_ios_block_changes.sql b/tpt/demos/logical_ios_block_changes.sql new file mode 100644 index 0000000..4206ec0 --- /dev/null +++ b/tpt/demos/logical_ios_block_changes.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t; +exec dbms_random.seed(0); +create table t(a) tablespace users as select dbms_random.random from dual connect by level <= 10000; +create index i on t(a); +@gts t + +@stat changes "update (select a from t where a < 10000) set a = a + 1" + + +drop table t; +exec dbms_random.seed(0); +create table t(a) tablespace users as select dbms_random.random from dual connect by level <= 10000; +create index i on t(a); +@gts t + +@stat changes "update (select /*+ index(t) */ a from t where a < 10000) set a = a + 1" + + +drop table t; +exec dbms_random.seed(0); +create table t(a) tablespace users as select dbms_random.random from dual connect by level <= 10000 order by 1; +create index i on t(a); +@gts t + +@stat changes "update (select /*+ index(t) */ a from t where a < 10000) set a = a + 1" diff --git a/tpt/demos/lots_nonshared_children.sql b/tpt/demos/lots_nonshared_children.sql new file mode 100644 index 0000000..a6f5937 --- /dev/null +++ b/tpt/demos/lots_nonshared_children.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t; +CREATE TABLE t AS SELECT * FROM dual; +INSERT INTO t VALUES ('Y'); +COMMIT; + +PROMPT Sleeping for 3 seconds... +EXEC DBMS_LOCK.SLEEP(5); + +PROMPT Running... +DECLARE + j NUMBER; + t NUMBER := 0; + curscn NUMBER; +BEGIN + SELECT current_scn INTO curscn FROM v$database; + FOR i IN 1..10000 LOOP + EXECUTE IMMEDIATE 'select count(*) from t as of scn '||curscn INTO j; + t := t + j; + DBMS_OUTPUT.PUT_LINE(j); + END LOOP; + DBMS_OUTPUT.PUT_LINE(t); +END; +/ + +@topcur + diff --git a/tpt/demos/lotsofchildren.sql b/tpt/demos/lotsofchildren.sql new file mode 100644 index 0000000..10c645a --- /dev/null +++ b/tpt/demos/lotsofchildren.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +EXEC EXECUTE IMMEDIATE 'drop table t_children'; EXCEPTION WHEN OTHERS THEN NULL; + +CREATE TABLE t_children AS SELECT rownum a, 'zzz' b FROM dual CONNECT BY LEVEL<=1000; + +CREATE INDEX i_children ON t_children(a); + +-- deliberately gathering a histogram +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T_CHILDREN',method_opt=>'FOR COLUMNS A SIZE 254'); + +-- this is the crap setting +ALTER SESSION SET cursor_sharing = similar; + +@saveset + +SET PAGES 0 HEAD OFF TRIMOUT OFF TRIMSPOOL OFF ARRAYSIZE 5000 TERMOUT OFF +SPOOL tmp_lotschildren.sql +SELECT 'SELECT COUNT(*) FROM t_children WHERE a = '||TO_CHAR(ABS(DBMS_RANDOM.RANDOM))||';' +FROM dual CONNECT BY LEVEL <= 100000; +SPOOL OFF + +@loadset + +PROMPT Now run @tmp_lotschildren.sql + +-- this hack is not working, must use plain SQL instead of plsql +-- ALTER SESSION SET session_cached_cursors = 0; +-- ALTER SESSION SET "_close_cached_open_cursors" = TRUE; +-- ALTER SESSION SET plsql_optimize_level = 0; +-- +-- DECLARE +-- j NUMBER; +-- x NUMBER; +-- BEGIN +-- EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM t_children WHERE a = '||TO_CHAR(ABS(DBMS_RANDOM.RANDOM)) INTO j; +-- x:=x+j; +-- COMMIT; +-- END; +-- / + diff --git a/tpt/demos/lotsofselects.sql b/tpt/demos/lotsofselects.sql new file mode 100644 index 0000000..8186f49 --- /dev/null +++ b/tpt/demos/lotsofselects.sql @@ -0,0 +1,10015 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +'SELECT*FROMTWHEREA='||ROWNUM||';' +-------------------------------------------------------------------------------------------------------- +select * from t where a = 1; +select * from t where a = 2; +select * from t where a = 3; +select * from t where a = 4; +select * from t where a = 5; +select * from t where a = 6; +select * from t where a = 7; +select * from t where a = 8; +select * from t where a = 9; +select * from t where a = 10; +select * from t where a = 11; +select * from t where a = 12; +select * from t where a = 13; +select * from t where a = 14; +select * from t where a = 15; +select * from t where a = 16; +select * from t where a = 17; +select * from t where a = 18; +select * from t where a = 19; +select * from t where a = 20; +select * from t where a = 21; +select * from t where a = 22; +select * from t where a = 23; +select * from t where a = 24; +select * from t where a = 25; +select * from t where a = 26; +select * from t where a = 27; +select * from t where a = 28; +select * from t where a = 29; +select * from t where a = 30; +select * from t where a = 31; +select * from t where a = 32; +select * from t where a = 33; +select * from t where a = 34; +select * from t where a = 35; +select * from t where a = 36; +select * from t where a = 37; +select * from t where a = 38; +select * from t where a = 39; +select * from t where a = 40; +select * from t where a = 41; +select * from t where a = 42; +select * from t where a = 43; +select * from t where a = 44; +select * from t where a = 45; +select * from t where a = 46; +select * from t where a = 47; +select * from t where a = 48; +select * from t where a = 49; +select * from t where a = 50; +select * from t where a = 51; +select * from t where a = 52; +select * from t where a = 53; +select * from t where a = 54; +select * from t where a = 55; +select * from t where a = 56; +select * from t where a = 57; +select * from t where a = 58; +select * from t where a = 59; +select * from t where a = 60; +select * from t where a = 61; +select * from t where a = 62; +select * from t where a = 63; +select * from t where a = 64; +select * from t where a = 65; +select * from t where a = 66; +select * from t where a = 67; +select * from t where a = 68; +select * from t where a = 69; +select * from t where a = 70; +select * from t where a = 71; +select * from t where a = 72; +select * from t where a = 73; +select * from t where a = 74; +select * from t where a = 75; +select * from t where a = 76; +select * from t where a = 77; +select * from t where a = 78; +select * from t where a = 79; +select * from t where a = 80; +select * from t where a = 81; +select * from t where a = 82; +select * from t where a = 83; +select * from t where a = 84; +select * from t where a = 85; +select * from t where a = 86; +select * from t where a = 87; +select * from t where a = 88; +select * from t where a = 89; +select * from t where a = 90; +select * from t where a = 91; +select * from t where a = 92; +select * from t where a = 93; +select * from t where a = 94; +select * from t where a = 95; +select * from t where a = 96; +select * from t where a = 97; +select * from t where a = 98; +select * from t where a = 99; +select * from t where a = 100; +select * from t where a = 101; +select * from t where a = 102; +select * from t where a = 103; +select * from t where a = 104; +select * from t where a = 105; +select * from t where a = 106; +select * from t where a = 107; +select * from t where a = 108; +select * from t where a = 109; +select * from t where a = 110; +select * from t where a = 111; +select * from t where a = 112; +select * from t where a = 113; +select * from t where a = 114; +select * from t where a = 115; +select * from t where a = 116; +select * from t where a = 117; +select * from t where a = 118; +select * from t where a = 119; +select * from t where a = 120; +select * from t where a = 121; +select * from t where a = 122; +select * from t where a = 123; +select * from t where a = 124; +select * from t where a = 125; +select * from t where a = 126; +select * from t where a = 127; +select * from t where a = 128; +select * from t where a = 129; +select * from t where a = 130; +select * from t where a = 131; +select * from t where a = 132; +select * from t where a = 133; +select * from t where a = 134; +select * from t where a = 135; +select * from t where a = 136; +select * from t where a = 137; +select * from t where a = 138; +select * from t where a = 139; +select * from t where a = 140; +select * from t where a = 141; +select * from t where a = 142; +select * from t where a = 143; +select * from t where a = 144; +select * from t where a = 145; +select * from t where a = 146; +select * from t where a = 147; +select * from t where a = 148; +select * from t where a = 149; +select * from t where a = 150; +select * from t where a = 151; +select * from t where a = 152; +select * from t where a = 153; +select * from t where a = 154; +select * from t where a = 155; +select * from t where a = 156; +select * from t where a = 157; +select * from t where a = 158; +select * from t where a = 159; +select * from t where a = 160; +select * from t where a = 161; +select * from t where a = 162; +select * from t where a = 163; +select * from t where a = 164; +select * from t where a = 165; +select * from t where a = 166; +select * from t where a = 167; +select * from t where a = 168; +select * from t where a = 169; +select * from t where a = 170; +select * from t where a = 171; +select * from t where a = 172; +select * from t where a = 173; +select * from t where a = 174; +select * from t where a = 175; +select * from t where a = 176; +select * from t where a = 177; +select * from t where a = 178; +select * from t where a = 179; +select * from t where a = 180; +select * from t where a = 181; +select * from t where a = 182; +select * from t where a = 183; +select * from t where a = 184; +select * from t where a = 185; +select * from t where a = 186; +select * from t where a = 187; +select * from t where a = 188; +select * from t where a = 189; +select * from t where a = 190; +select * from t where a = 191; +select * from t where a = 192; +select * from t where a = 193; +select * from t where a = 194; +select * from t where a = 195; +select * from t where a = 196; +select * from t where a = 197; +select * from t where a = 198; +select * from t where a = 199; +select * from t where a = 200; +select * from t where a = 201; +select * from t where a = 202; +select * from t where a = 203; +select * from t where a = 204; +select * from t where a = 205; +select * from t where a = 206; +select * from t where a = 207; +select * from t where a = 208; +select * from t where a = 209; +select * from t where a = 210; +select * from t where a = 211; +select * from t where a = 212; +select * from t where a = 213; +select * from t where a = 214; +select * from t where a = 215; +select * from t where a = 216; +select * from t where a = 217; +select * from t where a = 218; +select * from t where a = 219; +select * from t where a = 220; +select * from t where a = 221; +select * from t where a = 222; +select * from t where a = 223; +select * from t where a = 224; +select * from t where a = 225; +select * from t where a = 226; +select * from t where a = 227; +select * from t where a = 228; +select * from t where a = 229; +select * from t where a = 230; +select * from t where a = 231; +select * from t where a = 232; +select * from t where a = 233; +select * from t where a = 234; +select * from t where a = 235; +select * from t where a = 236; +select * from t where a = 237; +select * from t where a = 238; +select * from t where a = 239; +select * from t where a = 240; +select * from t where a = 241; +select * from t where a = 242; +select * from t where a = 243; +select * from t where a = 244; +select * from t where a = 245; +select * from t where a = 246; +select * from t where a = 247; +select * from t where a = 248; +select * from t where a = 249; +select * from t where a = 250; +select * from t where a = 251; +select * from t where a = 252; +select * from t where a = 253; +select * from t where a = 254; +select * from t where a = 255; +select * from t where a = 256; +select * from t where a = 257; +select * from t where a = 258; +select * from t where a = 259; +select * from t where a = 260; +select * from t where a = 261; +select * from t where a = 262; +select * from t where a = 263; +select * from t where a = 264; +select * from t where a = 265; +select * from t where a = 266; +select * from t where a = 267; +select * from t where a = 268; +select * from t where a = 269; +select * from t where a = 270; +select * from t where a = 271; +select * from t where a = 272; +select * from t where a = 273; +select * from t where a = 274; +select * from t where a = 275; +select * from t where a = 276; +select * from t where a = 277; +select * from t where a = 278; +select * from t where a = 279; +select * from t where a = 280; +select * from t where a = 281; +select * from t where a = 282; +select * from t where a = 283; +select * from t where a = 284; +select * from t where a = 285; +select * from t where a = 286; +select * from t where a = 287; +select * from t where a = 288; +select * from t where a = 289; +select * from t where a = 290; +select * from t where a = 291; +select * from t where a = 292; +select * from t where a = 293; +select * from t where a = 294; +select * from t where a = 295; +select * from t where a = 296; +select * from t where a = 297; +select * from t where a = 298; +select * from t where a = 299; +select * from t where a = 300; +select * from t where a = 301; +select * from t where a = 302; +select * from t where a = 303; +select * from t where a = 304; +select * from t where a = 305; +select * from t where a = 306; +select * from t where a = 307; +select * from t where a = 308; +select * from t where a = 309; +select * from t where a = 310; +select * from t where a = 311; +select * from t where a = 312; +select * from t where a = 313; +select * from t where a = 314; +select * from t where a = 315; +select * from t where a = 316; +select * from t where a = 317; +select * from t where a = 318; +select * from t where a = 319; +select * from t where a = 320; +select * from t where a = 321; +select * from t where a = 322; +select * from t where a = 323; +select * from t where a = 324; +select * from t where a = 325; +select * from t where a = 326; +select * from t where a = 327; +select * from t where a = 328; +select * from t where a = 329; +select * from t where a = 330; +select * from t where a = 331; +select * from t where a = 332; +select * from t where a = 333; +select * from t where a = 334; +select * from t where a = 335; +select * from t where a = 336; +select * from t where a = 337; +select * from t where a = 338; +select * from t where a = 339; +select * from t where a = 340; +select * from t where a = 341; +select * from t where a = 342; +select * from t where a = 343; +select * from t where a = 344; +select * from t where a = 345; +select * from t where a = 346; +select * from t where a = 347; +select * from t where a = 348; +select * from t where a = 349; +select * from t where a = 350; +select * from t where a = 351; +select * from t where a = 352; +select * from t where a = 353; +select * from t where a = 354; +select * from t where a = 355; +select * from t where a = 356; +select * from t where a = 357; +select * from t where a = 358; +select * from t where a = 359; +select * from t where a = 360; +select * from t where a = 361; +select * from t where a = 362; +select * from t where a = 363; +select * from t where a = 364; +select * from t where a = 365; +select * from t where a = 366; +select * from t where a = 367; +select * from t where a = 368; +select * from t where a = 369; +select * from t where a = 370; +select * from t where a = 371; +select * from t where a = 372; +select * from t where a = 373; +select * from t where a = 374; +select * from t where a = 375; +select * from t where a = 376; +select * from t where a = 377; +select * from t where a = 378; +select * from t where a = 379; +select * from t where a = 380; +select * from t where a = 381; +select * from t where a = 382; +select * from t where a = 383; +select * from t where a = 384; +select * from t where a = 385; +select * from t where a = 386; +select * from t where a = 387; +select * from t where a = 388; +select * from t where a = 389; +select * from t where a = 390; +select * from t where a = 391; +select * from t where a = 392; +select * from t where a = 393; +select * from t where a = 394; +select * from t where a = 395; +select * from t where a = 396; +select * from t where a = 397; +select * from t where a = 398; +select * from t where a = 399; +select * from t where a = 400; +select * from t where a = 401; +select * from t where a = 402; +select * from t where a = 403; +select * from t where a = 404; +select * from t where a = 405; +select * from t where a = 406; +select * from t where a = 407; +select * from t where a = 408; +select * from t where a = 409; +select * from t where a = 410; +select * from t where a = 411; +select * from t where a = 412; +select * from t where a = 413; +select * from t where a = 414; +select * from t where a = 415; +select * from t where a = 416; +select * from t where a = 417; +select * from t where a = 418; +select * from t where a = 419; +select * from t where a = 420; +select * from t where a = 421; +select * from t where a = 422; +select * from t where a = 423; +select * from t where a = 424; +select * from t where a = 425; +select * from t where a = 426; +select * from t where a = 427; +select * from t where a = 428; +select * from t where a = 429; +select * from t where a = 430; +select * from t where a = 431; +select * from t where a = 432; +select * from t where a = 433; +select * from t where a = 434; +select * from t where a = 435; +select * from t where a = 436; +select * from t where a = 437; +select * from t where a = 438; +select * from t where a = 439; +select * from t where a = 440; +select * from t where a = 441; +select * from t where a = 442; +select * from t where a = 443; +select * from t where a = 444; +select * from t where a = 445; +select * from t where a = 446; +select * from t where a = 447; +select * from t where a = 448; +select * from t where a = 449; +select * from t where a = 450; +select * from t where a = 451; +select * from t where a = 452; +select * from t where a = 453; +select * from t where a = 454; +select * from t where a = 455; +select * from t where a = 456; +select * from t where a = 457; +select * from t where a = 458; +select * from t where a = 459; +select * from t where a = 460; +select * from t where a = 461; +select * from t where a = 462; +select * from t where a = 463; +select * from t where a = 464; +select * from t where a = 465; +select * from t where a = 466; +select * from t where a = 467; +select * from t where a = 468; +select * from t where a = 469; +select * from t where a = 470; +select * from t where a = 471; +select * from t where a = 472; +select * from t where a = 473; +select * from t where a = 474; +select * from t where a = 475; +select * from t where a = 476; +select * from t where a = 477; +select * from t where a = 478; +select * from t where a = 479; +select * from t where a = 480; +select * from t where a = 481; +select * from t where a = 482; +select * from t where a = 483; +select * from t where a = 484; +select * from t where a = 485; +select * from t where a = 486; +select * from t where a = 487; +select * from t where a = 488; +select * from t where a = 489; +select * from t where a = 490; +select * from t where a = 491; +select * from t where a = 492; +select * from t where a = 493; +select * from t where a = 494; +select * from t where a = 495; +select * from t where a = 496; +select * from t where a = 497; +select * from t where a = 498; +select * from t where a = 499; +select * from t where a = 500; +select * from t where a = 501; +select * from t where a = 502; +select * from t where a = 503; +select * from t where a = 504; +select * from t where a = 505; +select * from t where a = 506; +select * from t where a = 507; +select * from t where a = 508; +select * from t where a = 509; +select * from t where a = 510; +select * from t where a = 511; +select * from t where a = 512; +select * from t where a = 513; +select * from t where a = 514; +select * from t where a = 515; +select * from t where a = 516; +select * from t where a = 517; +select * from t where a = 518; +select * from t where a = 519; +select * from t where a = 520; +select * from t where a = 521; +select * from t where a = 522; +select * from t where a = 523; +select * from t where a = 524; +select * from t where a = 525; +select * from t where a = 526; +select * from t where a = 527; +select * from t where a = 528; +select * from t where a = 529; +select * from t where a = 530; +select * from t where a = 531; +select * from t where a = 532; +select * from t where a = 533; +select * from t where a = 534; +select * from t where a = 535; +select * from t where a = 536; +select * from t where a = 537; +select * from t where a = 538; +select * from t where a = 539; +select * from t where a = 540; +select * from t where a = 541; +select * from t where a = 542; +select * from t where a = 543; +select * from t where a = 544; +select * from t where a = 545; +select * from t where a = 546; +select * from t where a = 547; +select * from t where a = 548; +select * from t where a = 549; +select * from t where a = 550; +select * from t where a = 551; +select * from t where a = 552; +select * from t where a = 553; +select * from t where a = 554; +select * from t where a = 555; +select * from t where a = 556; +select * from t where a = 557; +select * from t where a = 558; +select * from t where a = 559; +select * from t where a = 560; +select * from t where a = 561; +select * from t where a = 562; +select * from t where a = 563; +select * from t where a = 564; +select * from t where a = 565; +select * from t where a = 566; +select * from t where a = 567; +select * from t where a = 568; +select * from t where a = 569; +select * from t where a = 570; +select * from t where a = 571; +select * from t where a = 572; +select * from t where a = 573; +select * from t where a = 574; +select * from t where a = 575; +select * from t where a = 576; +select * from t where a = 577; +select * from t where a = 578; +select * from t where a = 579; +select * from t where a = 580; +select * from t where a = 581; +select * from t where a = 582; +select * from t where a = 583; +select * from t where a = 584; +select * from t where a = 585; +select * from t where a = 586; +select * from t where a = 587; +select * from t where a = 588; +select * from t where a = 589; +select * from t where a = 590; +select * from t where a = 591; +select * from t where a = 592; +select * from t where a = 593; +select * from t where a = 594; +select * from t where a = 595; +select * from t where a = 596; +select * from t where a = 597; +select * from t where a = 598; +select * from t where a = 599; +select * from t where a = 600; +select * from t where a = 601; +select * from t where a = 602; +select * from t where a = 603; +select * from t where a = 604; +select * from t where a = 605; +select * from t where a = 606; +select * from t where a = 607; +select * from t where a = 608; +select * from t where a = 609; +select * from t where a = 610; +select * from t where a = 611; +select * from t where a = 612; +select * from t where a = 613; +select * from t where a = 614; +select * from t where a = 615; +select * from t where a = 616; +select * from t where a = 617; +select * from t where a = 618; +select * from t where a = 619; +select * from t where a = 620; +select * from t where a = 621; +select * from t where a = 622; +select * from t where a = 623; +select * from t where a = 624; +select * from t where a = 625; +select * from t where a = 626; +select * from t where a = 627; +select * from t where a = 628; +select * from t where a = 629; +select * from t where a = 630; +select * from t where a = 631; +select * from t where a = 632; +select * from t where a = 633; +select * from t where a = 634; +select * from t where a = 635; +select * from t where a = 636; +select * from t where a = 637; +select * from t where a = 638; +select * from t where a = 639; +select * from t where a = 640; +select * from t where a = 641; +select * from t where a = 642; +select * from t where a = 643; +select * from t where a = 644; +select * from t where a = 645; +select * from t where a = 646; +select * from t where a = 647; +select * from t where a = 648; +select * from t where a = 649; +select * from t where a = 650; +select * from t where a = 651; +select * from t where a = 652; +select * from t where a = 653; +select * from t where a = 654; +select * from t where a = 655; +select * from t where a = 656; +select * from t where a = 657; +select * from t where a = 658; +select * from t where a = 659; +select * from t where a = 660; +select * from t where a = 661; +select * from t where a = 662; +select * from t where a = 663; +select * from t where a = 664; +select * from t where a = 665; +select * from t where a = 666; +select * from t where a = 667; +select * from t where a = 668; +select * from t where a = 669; +select * from t where a = 670; +select * from t where a = 671; +select * from t where a = 672; +select * from t where a = 673; +select * from t where a = 674; +select * from t where a = 675; +select * from t where a = 676; +select * from t where a = 677; +select * from t where a = 678; +select * from t where a = 679; +select * from t where a = 680; +select * from t where a = 681; +select * from t where a = 682; +select * from t where a = 683; +select * from t where a = 684; +select * from t where a = 685; +select * from t where a = 686; +select * from t where a = 687; +select * from t where a = 688; +select * from t where a = 689; +select * from t where a = 690; +select * from t where a = 691; +select * from t where a = 692; +select * from t where a = 693; +select * from t where a = 694; +select * from t where a = 695; +select * from t where a = 696; +select * from t where a = 697; +select * from t where a = 698; +select * from t where a = 699; +select * from t where a = 700; +select * from t where a = 701; +select * from t where a = 702; +select * from t where a = 703; +select * from t where a = 704; +select * from t where a = 705; +select * from t where a = 706; +select * from t where a = 707; +select * from t where a = 708; +select * from t where a = 709; +select * from t where a = 710; +select * from t where a = 711; +select * from t where a = 712; +select * from t where a = 713; +select * from t where a = 714; +select * from t where a = 715; +select * from t where a = 716; +select * from t where a = 717; +select * from t where a = 718; +select * from t where a = 719; +select * from t where a = 720; +select * from t where a = 721; +select * from t where a = 722; +select * from t where a = 723; +select * from t where a = 724; +select * from t where a = 725; +select * from t where a = 726; +select * from t where a = 727; +select * from t where a = 728; +select * from t where a = 729; +select * from t where a = 730; +select * from t where a = 731; +select * from t where a = 732; +select * from t where a = 733; +select * from t where a = 734; +select * from t where a = 735; +select * from t where a = 736; +select * from t where a = 737; +select * from t where a = 738; +select * from t where a = 739; +select * from t where a = 740; +select * from t where a = 741; +select * from t where a = 742; +select * from t where a = 743; +select * from t where a = 744; +select * from t where a = 745; +select * from t where a = 746; +select * from t where a = 747; +select * from t where a = 748; +select * from t where a = 749; +select * from t where a = 750; +select * from t where a = 751; +select * from t where a = 752; +select * from t where a = 753; +select * from t where a = 754; +select * from t where a = 755; +select * from t where a = 756; +select * from t where a = 757; +select * from t where a = 758; +select * from t where a = 759; +select * from t where a = 760; +select * from t where a = 761; +select * from t where a = 762; +select * from t where a = 763; +select * from t where a = 764; +select * from t where a = 765; +select * from t where a = 766; +select * from t where a = 767; +select * from t where a = 768; +select * from t where a = 769; +select * from t where a = 770; +select * from t where a = 771; +select * from t where a = 772; +select * from t where a = 773; +select * from t where a = 774; +select * from t where a = 775; +select * from t where a = 776; +select * from t where a = 777; +select * from t where a = 778; +select * from t where a = 779; +select * from t where a = 780; +select * from t where a = 781; +select * from t where a = 782; +select * from t where a = 783; +select * from t where a = 784; +select * from t where a = 785; +select * from t where a = 786; +select * from t where a = 787; +select * from t where a = 788; +select * from t where a = 789; +select * from t where a = 790; +select * from t where a = 791; +select * from t where a = 792; +select * from t where a = 793; +select * from t where a = 794; +select * from t where a = 795; +select * from t where a = 796; +select * from t where a = 797; +select * from t where a = 798; +select * from t where a = 799; +select * from t where a = 800; +select * from t where a = 801; +select * from t where a = 802; +select * from t where a = 803; +select * from t where a = 804; +select * from t where a = 805; +select * from t where a = 806; +select * from t where a = 807; +select * from t where a = 808; +select * from t where a = 809; +select * from t where a = 810; +select * from t where a = 811; +select * from t where a = 812; +select * from t where a = 813; +select * from t where a = 814; +select * from t where a = 815; +select * from t where a = 816; +select * from t where a = 817; +select * from t where a = 818; +select * from t where a = 819; +select * from t where a = 820; +select * from t where a = 821; +select * from t where a = 822; +select * from t where a = 823; +select * from t where a = 824; +select * from t where a = 825; +select * from t where a = 826; +select * from t where a = 827; +select * from t where a = 828; +select * from t where a = 829; +select * from t where a = 830; +select * from t where a = 831; +select * from t where a = 832; +select * from t where a = 833; +select * from t where a = 834; +select * from t where a = 835; +select * from t where a = 836; +select * from t where a = 837; +select * from t where a = 838; +select * from t where a = 839; +select * from t where a = 840; +select * from t where a = 841; +select * from t where a = 842; +select * from t where a = 843; +select * from t where a = 844; +select * from t where a = 845; +select * from t where a = 846; +select * from t where a = 847; +select * from t where a = 848; +select * from t where a = 849; +select * from t where a = 850; +select * from t where a = 851; +select * from t where a = 852; +select * from t where a = 853; +select * from t where a = 854; +select * from t where a = 855; +select * from t where a = 856; +select * from t where a = 857; +select * from t where a = 858; +select * from t where a = 859; +select * from t where a = 860; +select * from t where a = 861; +select * from t where a = 862; +select * from t where a = 863; +select * from t where a = 864; +select * from t where a = 865; +select * from t where a = 866; +select * from t where a = 867; +select * from t where a = 868; +select * from t where a = 869; +select * from t where a = 870; +select * from t where a = 871; +select * from t where a = 872; +select * from t where a = 873; +select * from t where a = 874; +select * from t where a = 875; +select * from t where a = 876; +select * from t where a = 877; +select * from t where a = 878; +select * from t where a = 879; +select * from t where a = 880; +select * from t where a = 881; +select * from t where a = 882; +select * from t where a = 883; +select * from t where a = 884; +select * from t where a = 885; +select * from t where a = 886; +select * from t where a = 887; +select * from t where a = 888; +select * from t where a = 889; +select * from t where a = 890; +select * from t where a = 891; +select * from t where a = 892; +select * from t where a = 893; +select * from t where a = 894; +select * from t where a = 895; +select * from t where a = 896; +select * from t where a = 897; +select * from t where a = 898; +select * from t where a = 899; +select * from t where a = 900; +select * from t where a = 901; +select * from t where a = 902; +select * from t where a = 903; +select * from t where a = 904; +select * from t where a = 905; +select * from t where a = 906; +select * from t where a = 907; +select * from t where a = 908; +select * from t where a = 909; +select * from t where a = 910; +select * from t where a = 911; +select * from t where a = 912; +select * from t where a = 913; +select * from t where a = 914; +select * from t where a = 915; +select * from t where a = 916; +select * from t where a = 917; +select * from t where a = 918; +select * from t where a = 919; +select * from t where a = 920; +select * from t where a = 921; +select * from t where a = 922; +select * from t where a = 923; +select * from t where a = 924; +select * from t where a = 925; +select * from t where a = 926; +select * from t where a = 927; +select * from t where a = 928; +select * from t where a = 929; +select * from t where a = 930; +select * from t where a = 931; +select * from t where a = 932; +select * from t where a = 933; +select * from t where a = 934; +select * from t where a = 935; +select * from t where a = 936; +select * from t where a = 937; +select * from t where a = 938; +select * from t where a = 939; +select * from t where a = 940; +select * from t where a = 941; +select * from t where a = 942; +select * from t where a = 943; +select * from t where a = 944; +select * from t where a = 945; +select * from t where a = 946; +select * from t where a = 947; +select * from t where a = 948; +select * from t where a = 949; +select * from t where a = 950; +select * from t where a = 951; +select * from t where a = 952; +select * from t where a = 953; +select * from t where a = 954; +select * from t where a = 955; +select * from t where a = 956; +select * from t where a = 957; +select * from t where a = 958; +select * from t where a = 959; +select * from t where a = 960; +select * from t where a = 961; +select * from t where a = 962; +select * from t where a = 963; +select * from t where a = 964; +select * from t where a = 965; +select * from t where a = 966; +select * from t where a = 967; +select * from t where a = 968; +select * from t where a = 969; +select * from t where a = 970; +select * from t where a = 971; +select * from t where a = 972; +select * from t where a = 973; +select * from t where a = 974; +select * from t where a = 975; +select * from t where a = 976; +select * from t where a = 977; +select * from t where a = 978; +select * from t where a = 979; +select * from t where a = 980; +select * from t where a = 981; +select * from t where a = 982; +select * from t where a = 983; +select * from t where a = 984; +select * from t where a = 985; +select * from t where a = 986; +select * from t where a = 987; +select * from t where a = 988; +select * from t where a = 989; +select * from t where a = 990; +select * from t where a = 991; +select * from t where a = 992; +select * from t where a = 993; +select * from t where a = 994; +select * from t where a = 995; +select * from t where a = 996; +select * from t where a = 997; +select * from t where a = 998; +select * from t where a = 999; +select * from t where a = 1000; +select * from t where a = 1001; +select * from t where a = 1002; +select * from t where a = 1003; +select * from t where a = 1004; +select * from t where a = 1005; +select * from t where a = 1006; +select * from t where a = 1007; +select * from t where a = 1008; +select * from t where a = 1009; +select * from t where a = 1010; +select * from t where a = 1011; +select * from t where a = 1012; +select * from t where a = 1013; +select * from t where a = 1014; +select * from t where a = 1015; +select * from t where a = 1016; +select * from t where a = 1017; +select * from t where a = 1018; +select * from t where a = 1019; +select * from t where a = 1020; +select * from t where a = 1021; +select * from t where a = 1022; +select * from t where a = 1023; +select * from t where a = 1024; +select * from t where a = 1025; +select * from t where a = 1026; +select * from t where a = 1027; +select * from t where a = 1028; +select * from t where a = 1029; +select * from t where a = 1030; +select * from t where a = 1031; +select * from t where a = 1032; +select * from t where a = 1033; +select * from t where a = 1034; +select * from t where a = 1035; +select * from t where a = 1036; +select * from t where a = 1037; +select * from t where a = 1038; +select * from t where a = 1039; +select * from t where a = 1040; +select * from t where a = 1041; +select * from t where a = 1042; +select * from t where a = 1043; +select * from t where a = 1044; +select * from t where a = 1045; +select * from t where a = 1046; +select * from t where a = 1047; +select * from t where a = 1048; +select * from t where a = 1049; +select * from t where a = 1050; +select * from t where a = 1051; +select * from t where a = 1052; +select * from t where a = 1053; +select * from t where a = 1054; +select * from t where a = 1055; +select * from t where a = 1056; +select * from t where a = 1057; +select * from t where a = 1058; +select * from t where a = 1059; +select * from t where a = 1060; +select * from t where a = 1061; +select * from t where a = 1062; +select * from t where a = 1063; +select * from t where a = 1064; +select * from t where a = 1065; +select * from t where a = 1066; +select * from t where a = 1067; +select * from t where a = 1068; +select * from t where a = 1069; +select * from t where a = 1070; +select * from t where a = 1071; +select * from t where a = 1072; +select * from t where a = 1073; +select * from t where a = 1074; +select * from t where a = 1075; +select * from t where a = 1076; +select * from t where a = 1077; +select * from t where a = 1078; +select * from t where a = 1079; +select * from t where a = 1080; +select * from t where a = 1081; +select * from t where a = 1082; +select * from t where a = 1083; +select * from t where a = 1084; +select * from t where a = 1085; +select * from t where a = 1086; +select * from t where a = 1087; +select * from t where a = 1088; +select * from t where a = 1089; +select * from t where a = 1090; +select * from t where a = 1091; +select * from t where a = 1092; +select * from t where a = 1093; +select * from t where a = 1094; +select * from t where a = 1095; +select * from t where a = 1096; +select * from t where a = 1097; +select * from t where a = 1098; +select * from t where a = 1099; +select * from t where a = 1100; +select * from t where a = 1101; +select * from t where a = 1102; +select * from t where a = 1103; +select * from t where a = 1104; +select * from t where a = 1105; +select * from t where a = 1106; +select * from t where a = 1107; +select * from t where a = 1108; +select * from t where a = 1109; +select * from t where a = 1110; +select * from t where a = 1111; +select * from t where a = 1112; +select * from t where a = 1113; +select * from t where a = 1114; +select * from t where a = 1115; +select * from t where a = 1116; +select * from t where a = 1117; +select * from t where a = 1118; +select * from t where a = 1119; +select * from t where a = 1120; +select * from t where a = 1121; +select * from t where a = 1122; +select * from t where a = 1123; +select * from t where a = 1124; +select * from t where a = 1125; +select * from t where a = 1126; +select * from t where a = 1127; +select * from t where a = 1128; +select * from t where a = 1129; +select * from t where a = 1130; +select * from t where a = 1131; +select * from t where a = 1132; +select * from t where a = 1133; +select * from t where a = 1134; +select * from t where a = 1135; +select * from t where a = 1136; +select * from t where a = 1137; +select * from t where a = 1138; +select * from t where a = 1139; +select * from t where a = 1140; +select * from t where a = 1141; +select * from t where a = 1142; +select * from t where a = 1143; +select * from t where a = 1144; +select * from t where a = 1145; +select * from t where a = 1146; +select * from t where a = 1147; +select * from t where a = 1148; +select * from t where a = 1149; +select * from t where a = 1150; +select * from t where a = 1151; +select * from t where a = 1152; +select * from t where a = 1153; +select * from t where a = 1154; +select * from t where a = 1155; +select * from t where a = 1156; +select * from t where a = 1157; +select * from t where a = 1158; +select * from t where a = 1159; +select * from t where a = 1160; +select * from t where a = 1161; +select * from t where a = 1162; +select * from t where a = 1163; +select * from t where a = 1164; +select * from t where a = 1165; +select * from t where a = 1166; +select * from t where a = 1167; +select * from t where a = 1168; +select * from t where a = 1169; +select * from t where a = 1170; +select * from t where a = 1171; +select * from t where a = 1172; +select * from t where a = 1173; +select * from t where a = 1174; +select * from t where a = 1175; +select * from t where a = 1176; +select * from t where a = 1177; +select * from t where a = 1178; +select * from t where a = 1179; +select * from t where a = 1180; +select * from t where a = 1181; +select * from t where a = 1182; +select * from t where a = 1183; +select * from t where a = 1184; +select * from t where a = 1185; +select * from t where a = 1186; +select * from t where a = 1187; +select * from t where a = 1188; +select * from t where a = 1189; +select * from t where a = 1190; +select * from t where a = 1191; +select * from t where a = 1192; +select * from t where a = 1193; +select * from t where a = 1194; +select * from t where a = 1195; +select * from t where a = 1196; +select * from t where a = 1197; +select * from t where a = 1198; +select * from t where a = 1199; +select * from t where a = 1200; +select * from t where a = 1201; +select * from t where a = 1202; +select * from t where a = 1203; +select * from t where a = 1204; +select * from t where a = 1205; +select * from t where a = 1206; +select * from t where a = 1207; +select * from t where a = 1208; +select * from t where a = 1209; +select * from t where a = 1210; +select * from t where a = 1211; +select * from t where a = 1212; +select * from t where a = 1213; +select * from t where a = 1214; +select * from t where a = 1215; +select * from t where a = 1216; +select * from t where a = 1217; +select * from t where a = 1218; +select * from t where a = 1219; +select * from t where a = 1220; +select * from t where a = 1221; +select * from t where a = 1222; +select * from t where a = 1223; +select * from t where a = 1224; +select * from t where a = 1225; +select * from t where a = 1226; +select * from t where a = 1227; +select * from t where a = 1228; +select * from t where a = 1229; +select * from t where a = 1230; +select * from t where a = 1231; +select * from t where a = 1232; +select * from t where a = 1233; +select * from t where a = 1234; +select * from t where a = 1235; +select * from t where a = 1236; +select * from t where a = 1237; +select * from t where a = 1238; +select * from t where a = 1239; +select * from t where a = 1240; +select * from t where a = 1241; +select * from t where a = 1242; +select * from t where a = 1243; +select * from t where a = 1244; +select * from t where a = 1245; +select * from t where a = 1246; +select * from t where a = 1247; +select * from t where a = 1248; +select * from t where a = 1249; +select * from t where a = 1250; +select * from t where a = 1251; +select * from t where a = 1252; +select * from t where a = 1253; +select * from t where a = 1254; +select * from t where a = 1255; +select * from t where a = 1256; +select * from t where a = 1257; +select * from t where a = 1258; +select * from t where a = 1259; +select * from t where a = 1260; +select * from t where a = 1261; +select * from t where a = 1262; +select * from t where a = 1263; +select * from t where a = 1264; +select * from t where a = 1265; +select * from t where a = 1266; +select * from t where a = 1267; +select * from t where a = 1268; +select * from t where a = 1269; +select * from t where a = 1270; +select * from t where a = 1271; +select * from t where a = 1272; +select * from t where a = 1273; +select * from t where a = 1274; +select * from t where a = 1275; +select * from t where a = 1276; +select * from t where a = 1277; +select * from t where a = 1278; +select * from t where a = 1279; +select * from t where a = 1280; +select * from t where a = 1281; +select * from t where a = 1282; +select * from t where a = 1283; +select * from t where a = 1284; +select * from t where a = 1285; +select * from t where a = 1286; +select * from t where a = 1287; +select * from t where a = 1288; +select * from t where a = 1289; +select * from t where a = 1290; +select * from t where a = 1291; +select * from t where a = 1292; +select * from t where a = 1293; +select * from t where a = 1294; +select * from t where a = 1295; +select * from t where a = 1296; +select * from t where a = 1297; +select * from t where a = 1298; +select * from t where a = 1299; +select * from t where a = 1300; +select * from t where a = 1301; +select * from t where a = 1302; +select * from t where a = 1303; +select * from t where a = 1304; +select * from t where a = 1305; +select * from t where a = 1306; +select * from t where a = 1307; +select * from t where a = 1308; +select * from t where a = 1309; +select * from t where a = 1310; +select * from t where a = 1311; +select * from t where a = 1312; +select * from t where a = 1313; +select * from t where a = 1314; +select * from t where a = 1315; +select * from t where a = 1316; +select * from t where a = 1317; +select * from t where a = 1318; +select * from t where a = 1319; +select * from t where a = 1320; +select * from t where a = 1321; +select * from t where a = 1322; +select * from t where a = 1323; +select * from t where a = 1324; +select * from t where a = 1325; +select * from t where a = 1326; +select * from t where a = 1327; +select * from t where a = 1328; +select * from t where a = 1329; +select * from t where a = 1330; +select * from t where a = 1331; +select * from t where a = 1332; +select * from t where a = 1333; +select * from t where a = 1334; +select * from t where a = 1335; +select * from t where a = 1336; +select * from t where a = 1337; +select * from t where a = 1338; +select * from t where a = 1339; +select * from t where a = 1340; +select * from t where a = 1341; +select * from t where a = 1342; +select * from t where a = 1343; +select * from t where a = 1344; +select * from t where a = 1345; +select * from t where a = 1346; +select * from t where a = 1347; +select * from t where a = 1348; +select * from t where a = 1349; +select * from t where a = 1350; +select * from t where a = 1351; +select * from t where a = 1352; +select * from t where a = 1353; +select * from t where a = 1354; +select * from t where a = 1355; +select * from t where a = 1356; +select * from t where a = 1357; +select * from t where a = 1358; +select * from t where a = 1359; +select * from t where a = 1360; +select * from t where a = 1361; +select * from t where a = 1362; +select * from t where a = 1363; +select * from t where a = 1364; +select * from t where a = 1365; +select * from t where a = 1366; +select * from t where a = 1367; +select * from t where a = 1368; +select * from t where a = 1369; +select * from t where a = 1370; +select * from t where a = 1371; +select * from t where a = 1372; +select * from t where a = 1373; +select * from t where a = 1374; +select * from t where a = 1375; +select * from t where a = 1376; +select * from t where a = 1377; +select * from t where a = 1378; +select * from t where a = 1379; +select * from t where a = 1380; +select * from t where a = 1381; +select * from t where a = 1382; +select * from t where a = 1383; +select * from t where a = 1384; +select * from t where a = 1385; +select * from t where a = 1386; +select * from t where a = 1387; +select * from t where a = 1388; +select * from t where a = 1389; +select * from t where a = 1390; +select * from t where a = 1391; +select * from t where a = 1392; +select * from t where a = 1393; +select * from t where a = 1394; +select * from t where a = 1395; +select * from t where a = 1396; +select * from t where a = 1397; +select * from t where a = 1398; +select * from t where a = 1399; +select * from t where a = 1400; +select * from t where a = 1401; +select * from t where a = 1402; +select * from t where a = 1403; +select * from t where a = 1404; +select * from t where a = 1405; +select * from t where a = 1406; +select * from t where a = 1407; +select * from t where a = 1408; +select * from t where a = 1409; +select * from t where a = 1410; +select * from t where a = 1411; +select * from t where a = 1412; +select * from t where a = 1413; +select * from t where a = 1414; +select * from t where a = 1415; +select * from t where a = 1416; +select * from t where a = 1417; +select * from t where a = 1418; +select * from t where a = 1419; +select * from t where a = 1420; +select * from t where a = 1421; +select * from t where a = 1422; +select * from t where a = 1423; +select * from t where a = 1424; +select * from t where a = 1425; +select * from t where a = 1426; +select * from t where a = 1427; +select * from t where a = 1428; +select * from t where a = 1429; +select * from t where a = 1430; +select * from t where a = 1431; +select * from t where a = 1432; +select * from t where a = 1433; +select * from t where a = 1434; +select * from t where a = 1435; +select * from t where a = 1436; +select * from t where a = 1437; +select * from t where a = 1438; +select * from t where a = 1439; +select * from t where a = 1440; +select * from t where a = 1441; +select * from t where a = 1442; +select * from t where a = 1443; +select * from t where a = 1444; +select * from t where a = 1445; +select * from t where a = 1446; +select * from t where a = 1447; +select * from t where a = 1448; +select * from t where a = 1449; +select * from t where a = 1450; +select * from t where a = 1451; +select * from t where a = 1452; +select * from t where a = 1453; +select * from t where a = 1454; +select * from t where a = 1455; +select * from t where a = 1456; +select * from t where a = 1457; +select * from t where a = 1458; +select * from t where a = 1459; +select * from t where a = 1460; +select * from t where a = 1461; +select * from t where a = 1462; +select * from t where a = 1463; +select * from t where a = 1464; +select * from t where a = 1465; +select * from t where a = 1466; +select * from t where a = 1467; +select * from t where a = 1468; +select * from t where a = 1469; +select * from t where a = 1470; +select * from t where a = 1471; +select * from t where a = 1472; +select * from t where a = 1473; +select * from t where a = 1474; +select * from t where a = 1475; +select * from t where a = 1476; +select * from t where a = 1477; +select * from t where a = 1478; +select * from t where a = 1479; +select * from t where a = 1480; +select * from t where a = 1481; +select * from t where a = 1482; +select * from t where a = 1483; +select * from t where a = 1484; +select * from t where a = 1485; +select * from t where a = 1486; +select * from t where a = 1487; +select * from t where a = 1488; +select * from t where a = 1489; +select * from t where a = 1490; +select * from t where a = 1491; +select * from t where a = 1492; +select * from t where a = 1493; +select * from t where a = 1494; +select * from t where a = 1495; +select * from t where a = 1496; +select * from t where a = 1497; +select * from t where a = 1498; +select * from t where a = 1499; +select * from t where a = 1500; +select * from t where a = 1501; +select * from t where a = 1502; +select * from t where a = 1503; +select * from t where a = 1504; +select * from t where a = 1505; +select * from t where a = 1506; +select * from t where a = 1507; +select * from t where a = 1508; +select * from t where a = 1509; +select * from t where a = 1510; +select * from t where a = 1511; +select * from t where a = 1512; +select * from t where a = 1513; +select * from t where a = 1514; +select * from t where a = 1515; +select * from t where a = 1516; +select * from t where a = 1517; +select * from t where a = 1518; +select * from t where a = 1519; +select * from t where a = 1520; +select * from t where a = 1521; +select * from t where a = 1522; +select * from t where a = 1523; +select * from t where a = 1524; +select * from t where a = 1525; +select * from t where a = 1526; +select * from t where a = 1527; +select * from t where a = 1528; +select * from t where a = 1529; +select * from t where a = 1530; +select * from t where a = 1531; +select * from t where a = 1532; +select * from t where a = 1533; +select * from t where a = 1534; +select * from t where a = 1535; +select * from t where a = 1536; +select * from t where a = 1537; +select * from t where a = 1538; +select * from t where a = 1539; +select * from t where a = 1540; +select * from t where a = 1541; +select * from t where a = 1542; +select * from t where a = 1543; +select * from t where a = 1544; +select * from t where a = 1545; +select * from t where a = 1546; +select * from t where a = 1547; +select * from t where a = 1548; +select * from t where a = 1549; +select * from t where a = 1550; +select * from t where a = 1551; +select * from t where a = 1552; +select * from t where a = 1553; +select * from t where a = 1554; +select * from t where a = 1555; +select * from t where a = 1556; +select * from t where a = 1557; +select * from t where a = 1558; +select * from t where a = 1559; +select * from t where a = 1560; +select * from t where a = 1561; +select * from t where a = 1562; +select * from t where a = 1563; +select * from t where a = 1564; +select * from t where a = 1565; +select * from t where a = 1566; +select * from t where a = 1567; +select * from t where a = 1568; +select * from t where a = 1569; +select * from t where a = 1570; +select * from t where a = 1571; +select * from t where a = 1572; +select * from t where a = 1573; +select * from t where a = 1574; +select * from t where a = 1575; +select * from t where a = 1576; +select * from t where a = 1577; +select * from t where a = 1578; +select * from t where a = 1579; +select * from t where a = 1580; +select * from t where a = 1581; +select * from t where a = 1582; +select * from t where a = 1583; +select * from t where a = 1584; +select * from t where a = 1585; +select * from t where a = 1586; +select * from t where a = 1587; +select * from t where a = 1588; +select * from t where a = 1589; +select * from t where a = 1590; +select * from t where a = 1591; +select * from t where a = 1592; +select * from t where a = 1593; +select * from t where a = 1594; +select * from t where a = 1595; +select * from t where a = 1596; +select * from t where a = 1597; +select * from t where a = 1598; +select * from t where a = 1599; +select * from t where a = 1600; +select * from t where a = 1601; +select * from t where a = 1602; +select * from t where a = 1603; +select * from t where a = 1604; +select * from t where a = 1605; +select * from t where a = 1606; +select * from t where a = 1607; +select * from t where a = 1608; +select * from t where a = 1609; +select * from t where a = 1610; +select * from t where a = 1611; +select * from t where a = 1612; +select * from t where a = 1613; +select * from t where a = 1614; +select * from t where a = 1615; +select * from t where a = 1616; +select * from t where a = 1617; +select * from t where a = 1618; +select * from t where a = 1619; +select * from t where a = 1620; +select * from t where a = 1621; +select * from t where a = 1622; +select * from t where a = 1623; +select * from t where a = 1624; +select * from t where a = 1625; +select * from t where a = 1626; +select * from t where a = 1627; +select * from t where a = 1628; +select * from t where a = 1629; +select * from t where a = 1630; +select * from t where a = 1631; +select * from t where a = 1632; +select * from t where a = 1633; +select * from t where a = 1634; +select * from t where a = 1635; +select * from t where a = 1636; +select * from t where a = 1637; +select * from t where a = 1638; +select * from t where a = 1639; +select * from t where a = 1640; +select * from t where a = 1641; +select * from t where a = 1642; +select * from t where a = 1643; +select * from t where a = 1644; +select * from t where a = 1645; +select * from t where a = 1646; +select * from t where a = 1647; +select * from t where a = 1648; +select * from t where a = 1649; +select * from t where a = 1650; +select * from t where a = 1651; +select * from t where a = 1652; +select * from t where a = 1653; +select * from t where a = 1654; +select * from t where a = 1655; +select * from t where a = 1656; +select * from t where a = 1657; +select * from t where a = 1658; +select * from t where a = 1659; +select * from t where a = 1660; +select * from t where a = 1661; +select * from t where a = 1662; +select * from t where a = 1663; +select * from t where a = 1664; +select * from t where a = 1665; +select * from t where a = 1666; +select * from t where a = 1667; +select * from t where a = 1668; +select * from t where a = 1669; +select * from t where a = 1670; +select * from t where a = 1671; +select * from t where a = 1672; +select * from t where a = 1673; +select * from t where a = 1674; +select * from t where a = 1675; +select * from t where a = 1676; +select * from t where a = 1677; +select * from t where a = 1678; +select * from t where a = 1679; +select * from t where a = 1680; +select * from t where a = 1681; +select * from t where a = 1682; +select * from t where a = 1683; +select * from t where a = 1684; +select * from t where a = 1685; +select * from t where a = 1686; +select * from t where a = 1687; +select * from t where a = 1688; +select * from t where a = 1689; +select * from t where a = 1690; +select * from t where a = 1691; +select * from t where a = 1692; +select * from t where a = 1693; +select * from t where a = 1694; +select * from t where a = 1695; +select * from t where a = 1696; +select * from t where a = 1697; +select * from t where a = 1698; +select * from t where a = 1699; +select * from t where a = 1700; +select * from t where a = 1701; +select * from t where a = 1702; +select * from t where a = 1703; +select * from t where a = 1704; +select * from t where a = 1705; +select * from t where a = 1706; +select * from t where a = 1707; +select * from t where a = 1708; +select * from t where a = 1709; +select * from t where a = 1710; +select * from t where a = 1711; +select * from t where a = 1712; +select * from t where a = 1713; +select * from t where a = 1714; +select * from t where a = 1715; +select * from t where a = 1716; +select * from t where a = 1717; +select * from t where a = 1718; +select * from t where a = 1719; +select * from t where a = 1720; +select * from t where a = 1721; +select * from t where a = 1722; +select * from t where a = 1723; +select * from t where a = 1724; +select * from t where a = 1725; +select * from t where a = 1726; +select * from t where a = 1727; +select * from t where a = 1728; +select * from t where a = 1729; +select * from t where a = 1730; +select * from t where a = 1731; +select * from t where a = 1732; +select * from t where a = 1733; +select * from t where a = 1734; +select * from t where a = 1735; +select * from t where a = 1736; +select * from t where a = 1737; +select * from t where a = 1738; +select * from t where a = 1739; +select * from t where a = 1740; +select * from t where a = 1741; +select * from t where a = 1742; +select * from t where a = 1743; +select * from t where a = 1744; +select * from t where a = 1745; +select * from t where a = 1746; +select * from t where a = 1747; +select * from t where a = 1748; +select * from t where a = 1749; +select * from t where a = 1750; +select * from t where a = 1751; +select * from t where a = 1752; +select * from t where a = 1753; +select * from t where a = 1754; +select * from t where a = 1755; +select * from t where a = 1756; +select * from t where a = 1757; +select * from t where a = 1758; +select * from t where a = 1759; +select * from t where a = 1760; +select * from t where a = 1761; +select * from t where a = 1762; +select * from t where a = 1763; +select * from t where a = 1764; +select * from t where a = 1765; +select * from t where a = 1766; +select * from t where a = 1767; +select * from t where a = 1768; +select * from t where a = 1769; +select * from t where a = 1770; +select * from t where a = 1771; +select * from t where a = 1772; +select * from t where a = 1773; +select * from t where a = 1774; +select * from t where a = 1775; +select * from t where a = 1776; +select * from t where a = 1777; +select * from t where a = 1778; +select * from t where a = 1779; +select * from t where a = 1780; +select * from t where a = 1781; +select * from t where a = 1782; +select * from t where a = 1783; +select * from t where a = 1784; +select * from t where a = 1785; +select * from t where a = 1786; +select * from t where a = 1787; +select * from t where a = 1788; +select * from t where a = 1789; +select * from t where a = 1790; +select * from t where a = 1791; +select * from t where a = 1792; +select * from t where a = 1793; +select * from t where a = 1794; +select * from t where a = 1795; +select * from t where a = 1796; +select * from t where a = 1797; +select * from t where a = 1798; +select * from t where a = 1799; +select * from t where a = 1800; +select * from t where a = 1801; +select * from t where a = 1802; +select * from t where a = 1803; +select * from t where a = 1804; +select * from t where a = 1805; +select * from t where a = 1806; +select * from t where a = 1807; +select * from t where a = 1808; +select * from t where a = 1809; +select * from t where a = 1810; +select * from t where a = 1811; +select * from t where a = 1812; +select * from t where a = 1813; +select * from t where a = 1814; +select * from t where a = 1815; +select * from t where a = 1816; +select * from t where a = 1817; +select * from t where a = 1818; +select * from t where a = 1819; +select * from t where a = 1820; +select * from t where a = 1821; +select * from t where a = 1822; +select * from t where a = 1823; +select * from t where a = 1824; +select * from t where a = 1825; +select * from t where a = 1826; +select * from t where a = 1827; +select * from t where a = 1828; +select * from t where a = 1829; +select * from t where a = 1830; +select * from t where a = 1831; +select * from t where a = 1832; +select * from t where a = 1833; +select * from t where a = 1834; +select * from t where a = 1835; +select * from t where a = 1836; +select * from t where a = 1837; +select * from t where a = 1838; +select * from t where a = 1839; +select * from t where a = 1840; +select * from t where a = 1841; +select * from t where a = 1842; +select * from t where a = 1843; +select * from t where a = 1844; +select * from t where a = 1845; +select * from t where a = 1846; +select * from t where a = 1847; +select * from t where a = 1848; +select * from t where a = 1849; +select * from t where a = 1850; +select * from t where a = 1851; +select * from t where a = 1852; +select * from t where a = 1853; +select * from t where a = 1854; +select * from t where a = 1855; +select * from t where a = 1856; +select * from t where a = 1857; +select * from t where a = 1858; +select * from t where a = 1859; +select * from t where a = 1860; +select * from t where a = 1861; +select * from t where a = 1862; +select * from t where a = 1863; +select * from t where a = 1864; +select * from t where a = 1865; +select * from t where a = 1866; +select * from t where a = 1867; +select * from t where a = 1868; +select * from t where a = 1869; +select * from t where a = 1870; +select * from t where a = 1871; +select * from t where a = 1872; +select * from t where a = 1873; +select * from t where a = 1874; +select * from t where a = 1875; +select * from t where a = 1876; +select * from t where a = 1877; +select * from t where a = 1878; +select * from t where a = 1879; +select * from t where a = 1880; +select * from t where a = 1881; +select * from t where a = 1882; +select * from t where a = 1883; +select * from t where a = 1884; +select * from t where a = 1885; +select * from t where a = 1886; +select * from t where a = 1887; +select * from t where a = 1888; +select * from t where a = 1889; +select * from t where a = 1890; +select * from t where a = 1891; +select * from t where a = 1892; +select * from t where a = 1893; +select * from t where a = 1894; +select * from t where a = 1895; +select * from t where a = 1896; +select * from t where a = 1897; +select * from t where a = 1898; +select * from t where a = 1899; +select * from t where a = 1900; +select * from t where a = 1901; +select * from t where a = 1902; +select * from t where a = 1903; +select * from t where a = 1904; +select * from t where a = 1905; +select * from t where a = 1906; +select * from t where a = 1907; +select * from t where a = 1908; +select * from t where a = 1909; +select * from t where a = 1910; +select * from t where a = 1911; +select * from t where a = 1912; +select * from t where a = 1913; +select * from t where a = 1914; +select * from t where a = 1915; +select * from t where a = 1916; +select * from t where a = 1917; +select * from t where a = 1918; +select * from t where a = 1919; +select * from t where a = 1920; +select * from t where a = 1921; +select * from t where a = 1922; +select * from t where a = 1923; +select * from t where a = 1924; +select * from t where a = 1925; +select * from t where a = 1926; +select * from t where a = 1927; +select * from t where a = 1928; +select * from t where a = 1929; +select * from t where a = 1930; +select * from t where a = 1931; +select * from t where a = 1932; +select * from t where a = 1933; +select * from t where a = 1934; +select * from t where a = 1935; +select * from t where a = 1936; +select * from t where a = 1937; +select * from t where a = 1938; +select * from t where a = 1939; +select * from t where a = 1940; +select * from t where a = 1941; +select * from t where a = 1942; +select * from t where a = 1943; +select * from t where a = 1944; +select * from t where a = 1945; +select * from t where a = 1946; +select * from t where a = 1947; +select * from t where a = 1948; +select * from t where a = 1949; +select * from t where a = 1950; +select * from t where a = 1951; +select * from t where a = 1952; +select * from t where a = 1953; +select * from t where a = 1954; +select * from t where a = 1955; +select * from t where a = 1956; +select * from t where a = 1957; +select * from t where a = 1958; +select * from t where a = 1959; +select * from t where a = 1960; +select * from t where a = 1961; +select * from t where a = 1962; +select * from t where a = 1963; +select * from t where a = 1964; +select * from t where a = 1965; +select * from t where a = 1966; +select * from t where a = 1967; +select * from t where a = 1968; +select * from t where a = 1969; +select * from t where a = 1970; +select * from t where a = 1971; +select * from t where a = 1972; +select * from t where a = 1973; +select * from t where a = 1974; +select * from t where a = 1975; +select * from t where a = 1976; +select * from t where a = 1977; +select * from t where a = 1978; +select * from t where a = 1979; +select * from t where a = 1980; +select * from t where a = 1981; +select * from t where a = 1982; +select * from t where a = 1983; +select * from t where a = 1984; +select * from t where a = 1985; +select * from t where a = 1986; +select * from t where a = 1987; +select * from t where a = 1988; +select * from t where a = 1989; +select * from t where a = 1990; +select * from t where a = 1991; +select * from t where a = 1992; +select * from t where a = 1993; +select * from t where a = 1994; +select * from t where a = 1995; +select * from t where a = 1996; +select * from t where a = 1997; +select * from t where a = 1998; +select * from t where a = 1999; +select * from t where a = 2000; +select * from t where a = 2001; +select * from t where a = 2002; +select * from t where a = 2003; +select * from t where a = 2004; +select * from t where a = 2005; +select * from t where a = 2006; +select * from t where a = 2007; +select * from t where a = 2008; +select * from t where a = 2009; +select * from t where a = 2010; +select * from t where a = 2011; +select * from t where a = 2012; +select * from t where a = 2013; +select * from t where a = 2014; +select * from t where a = 2015; +select * from t where a = 2016; +select * from t where a = 2017; +select * from t where a = 2018; +select * from t where a = 2019; +select * from t where a = 2020; +select * from t where a = 2021; +select * from t where a = 2022; +select * from t where a = 2023; +select * from t where a = 2024; +select * from t where a = 2025; +select * from t where a = 2026; +select * from t where a = 2027; +select * from t where a = 2028; +select * from t where a = 2029; +select * from t where a = 2030; +select * from t where a = 2031; +select * from t where a = 2032; +select * from t where a = 2033; +select * from t where a = 2034; +select * from t where a = 2035; +select * from t where a = 2036; +select * from t where a = 2037; +select * from t where a = 2038; +select * from t where a = 2039; +select * from t where a = 2040; +select * from t where a = 2041; +select * from t where a = 2042; +select * from t where a = 2043; +select * from t where a = 2044; +select * from t where a = 2045; +select * from t where a = 2046; +select * from t where a = 2047; +select * from t where a = 2048; +select * from t where a = 2049; +select * from t where a = 2050; +select * from t where a = 2051; +select * from t where a = 2052; +select * from t where a = 2053; +select * from t where a = 2054; +select * from t where a = 2055; +select * from t where a = 2056; +select * from t where a = 2057; +select * from t where a = 2058; +select * from t where a = 2059; +select * from t where a = 2060; +select * from t where a = 2061; +select * from t where a = 2062; +select * from t where a = 2063; +select * from t where a = 2064; +select * from t where a = 2065; +select * from t where a = 2066; +select * from t where a = 2067; +select * from t where a = 2068; +select * from t where a = 2069; +select * from t where a = 2070; +select * from t where a = 2071; +select * from t where a = 2072; +select * from t where a = 2073; +select * from t where a = 2074; +select * from t where a = 2075; +select * from t where a = 2076; +select * from t where a = 2077; +select * from t where a = 2078; +select * from t where a = 2079; +select * from t where a = 2080; +select * from t where a = 2081; +select * from t where a = 2082; +select * from t where a = 2083; +select * from t where a = 2084; +select * from t where a = 2085; +select * from t where a = 2086; +select * from t where a = 2087; +select * from t where a = 2088; +select * from t where a = 2089; +select * from t where a = 2090; +select * from t where a = 2091; +select * from t where a = 2092; +select * from t where a = 2093; +select * from t where a = 2094; +select * from t where a = 2095; +select * from t where a = 2096; +select * from t where a = 2097; +select * from t where a = 2098; +select * from t where a = 2099; +select * from t where a = 2100; +select * from t where a = 2101; +select * from t where a = 2102; +select * from t where a = 2103; +select * from t where a = 2104; +select * from t where a = 2105; +select * from t where a = 2106; +select * from t where a = 2107; +select * from t where a = 2108; +select * from t where a = 2109; +select * from t where a = 2110; +select * from t where a = 2111; +select * from t where a = 2112; +select * from t where a = 2113; +select * from t where a = 2114; +select * from t where a = 2115; +select * from t where a = 2116; +select * from t where a = 2117; +select * from t where a = 2118; +select * from t where a = 2119; +select * from t where a = 2120; +select * from t where a = 2121; +select * from t where a = 2122; +select * from t where a = 2123; +select * from t where a = 2124; +select * from t where a = 2125; +select * from t where a = 2126; +select * from t where a = 2127; +select * from t where a = 2128; +select * from t where a = 2129; +select * from t where a = 2130; +select * from t where a = 2131; +select * from t where a = 2132; +select * from t where a = 2133; +select * from t where a = 2134; +select * from t where a = 2135; +select * from t where a = 2136; +select * from t where a = 2137; +select * from t where a = 2138; +select * from t where a = 2139; +select * from t where a = 2140; +select * from t where a = 2141; +select * from t where a = 2142; +select * from t where a = 2143; +select * from t where a = 2144; +select * from t where a = 2145; +select * from t where a = 2146; +select * from t where a = 2147; +select * from t where a = 2148; +select * from t where a = 2149; +select * from t where a = 2150; +select * from t where a = 2151; +select * from t where a = 2152; +select * from t where a = 2153; +select * from t where a = 2154; +select * from t where a = 2155; +select * from t where a = 2156; +select * from t where a = 2157; +select * from t where a = 2158; +select * from t where a = 2159; +select * from t where a = 2160; +select * from t where a = 2161; +select * from t where a = 2162; +select * from t where a = 2163; +select * from t where a = 2164; +select * from t where a = 2165; +select * from t where a = 2166; +select * from t where a = 2167; +select * from t where a = 2168; +select * from t where a = 2169; +select * from t where a = 2170; +select * from t where a = 2171; +select * from t where a = 2172; +select * from t where a = 2173; +select * from t where a = 2174; +select * from t where a = 2175; +select * from t where a = 2176; +select * from t where a = 2177; +select * from t where a = 2178; +select * from t where a = 2179; +select * from t where a = 2180; +select * from t where a = 2181; +select * from t where a = 2182; +select * from t where a = 2183; +select * from t where a = 2184; +select * from t where a = 2185; +select * from t where a = 2186; +select * from t where a = 2187; +select * from t where a = 2188; +select * from t where a = 2189; +select * from t where a = 2190; +select * from t where a = 2191; +select * from t where a = 2192; +select * from t where a = 2193; +select * from t where a = 2194; +select * from t where a = 2195; +select * from t where a = 2196; +select * from t where a = 2197; +select * from t where a = 2198; +select * from t where a = 2199; +select * from t where a = 2200; +select * from t where a = 2201; +select * from t where a = 2202; +select * from t where a = 2203; +select * from t where a = 2204; +select * from t where a = 2205; +select * from t where a = 2206; +select * from t where a = 2207; +select * from t where a = 2208; +select * from t where a = 2209; +select * from t where a = 2210; +select * from t where a = 2211; +select * from t where a = 2212; +select * from t where a = 2213; +select * from t where a = 2214; +select * from t where a = 2215; +select * from t where a = 2216; +select * from t where a = 2217; +select * from t where a = 2218; +select * from t where a = 2219; +select * from t where a = 2220; +select * from t where a = 2221; +select * from t where a = 2222; +select * from t where a = 2223; +select * from t where a = 2224; +select * from t where a = 2225; +select * from t where a = 2226; +select * from t where a = 2227; +select * from t where a = 2228; +select * from t where a = 2229; +select * from t where a = 2230; +select * from t where a = 2231; +select * from t where a = 2232; +select * from t where a = 2233; +select * from t where a = 2234; +select * from t where a = 2235; +select * from t where a = 2236; +select * from t where a = 2237; +select * from t where a = 2238; +select * from t where a = 2239; +select * from t where a = 2240; +select * from t where a = 2241; +select * from t where a = 2242; +select * from t where a = 2243; +select * from t where a = 2244; +select * from t where a = 2245; +select * from t where a = 2246; +select * from t where a = 2247; +select * from t where a = 2248; +select * from t where a = 2249; +select * from t where a = 2250; +select * from t where a = 2251; +select * from t where a = 2252; +select * from t where a = 2253; +select * from t where a = 2254; +select * from t where a = 2255; +select * from t where a = 2256; +select * from t where a = 2257; +select * from t where a = 2258; +select * from t where a = 2259; +select * from t where a = 2260; +select * from t where a = 2261; +select * from t where a = 2262; +select * from t where a = 2263; +select * from t where a = 2264; +select * from t where a = 2265; +select * from t where a = 2266; +select * from t where a = 2267; +select * from t where a = 2268; +select * from t where a = 2269; +select * from t where a = 2270; +select * from t where a = 2271; +select * from t where a = 2272; +select * from t where a = 2273; +select * from t where a = 2274; +select * from t where a = 2275; +select * from t where a = 2276; +select * from t where a = 2277; +select * from t where a = 2278; +select * from t where a = 2279; +select * from t where a = 2280; +select * from t where a = 2281; +select * from t where a = 2282; +select * from t where a = 2283; +select * from t where a = 2284; +select * from t where a = 2285; +select * from t where a = 2286; +select * from t where a = 2287; +select * from t where a = 2288; +select * from t where a = 2289; +select * from t where a = 2290; +select * from t where a = 2291; +select * from t where a = 2292; +select * from t where a = 2293; +select * from t where a = 2294; +select * from t where a = 2295; +select * from t where a = 2296; +select * from t where a = 2297; +select * from t where a = 2298; +select * from t where a = 2299; +select * from t where a = 2300; +select * from t where a = 2301; +select * from t where a = 2302; +select * from t where a = 2303; +select * from t where a = 2304; +select * from t where a = 2305; +select * from t where a = 2306; +select * from t where a = 2307; +select * from t where a = 2308; +select * from t where a = 2309; +select * from t where a = 2310; +select * from t where a = 2311; +select * from t where a = 2312; +select * from t where a = 2313; +select * from t where a = 2314; +select * from t where a = 2315; +select * from t where a = 2316; +select * from t where a = 2317; +select * from t where a = 2318; +select * from t where a = 2319; +select * from t where a = 2320; +select * from t where a = 2321; +select * from t where a = 2322; +select * from t where a = 2323; +select * from t where a = 2324; +select * from t where a = 2325; +select * from t where a = 2326; +select * from t where a = 2327; +select * from t where a = 2328; +select * from t where a = 2329; +select * from t where a = 2330; +select * from t where a = 2331; +select * from t where a = 2332; +select * from t where a = 2333; +select * from t where a = 2334; +select * from t where a = 2335; +select * from t where a = 2336; +select * from t where a = 2337; +select * from t where a = 2338; +select * from t where a = 2339; +select * from t where a = 2340; +select * from t where a = 2341; +select * from t where a = 2342; +select * from t where a = 2343; +select * from t where a = 2344; +select * from t where a = 2345; +select * from t where a = 2346; +select * from t where a = 2347; +select * from t where a = 2348; +select * from t where a = 2349; +select * from t where a = 2350; +select * from t where a = 2351; +select * from t where a = 2352; +select * from t where a = 2353; +select * from t where a = 2354; +select * from t where a = 2355; +select * from t where a = 2356; +select * from t where a = 2357; +select * from t where a = 2358; +select * from t where a = 2359; +select * from t where a = 2360; +select * from t where a = 2361; +select * from t where a = 2362; +select * from t where a = 2363; +select * from t where a = 2364; +select * from t where a = 2365; +select * from t where a = 2366; +select * from t where a = 2367; +select * from t where a = 2368; +select * from t where a = 2369; +select * from t where a = 2370; +select * from t where a = 2371; +select * from t where a = 2372; +select * from t where a = 2373; +select * from t where a = 2374; +select * from t where a = 2375; +select * from t where a = 2376; +select * from t where a = 2377; +select * from t where a = 2378; +select * from t where a = 2379; +select * from t where a = 2380; +select * from t where a = 2381; +select * from t where a = 2382; +select * from t where a = 2383; +select * from t where a = 2384; +select * from t where a = 2385; +select * from t where a = 2386; +select * from t where a = 2387; +select * from t where a = 2388; +select * from t where a = 2389; +select * from t where a = 2390; +select * from t where a = 2391; +select * from t where a = 2392; +select * from t where a = 2393; +select * from t where a = 2394; +select * from t where a = 2395; +select * from t where a = 2396; +select * from t where a = 2397; +select * from t where a = 2398; +select * from t where a = 2399; +select * from t where a = 2400; +select * from t where a = 2401; +select * from t where a = 2402; +select * from t where a = 2403; +select * from t where a = 2404; +select * from t where a = 2405; +select * from t where a = 2406; +select * from t where a = 2407; +select * from t where a = 2408; +select * from t where a = 2409; +select * from t where a = 2410; +select * from t where a = 2411; +select * from t where a = 2412; +select * from t where a = 2413; +select * from t where a = 2414; +select * from t where a = 2415; +select * from t where a = 2416; +select * from t where a = 2417; +select * from t where a = 2418; +select * from t where a = 2419; +select * from t where a = 2420; +select * from t where a = 2421; +select * from t where a = 2422; +select * from t where a = 2423; +select * from t where a = 2424; +select * from t where a = 2425; +select * from t where a = 2426; +select * from t where a = 2427; +select * from t where a = 2428; +select * from t where a = 2429; +select * from t where a = 2430; +select * from t where a = 2431; +select * from t where a = 2432; +select * from t where a = 2433; +select * from t where a = 2434; +select * from t where a = 2435; +select * from t where a = 2436; +select * from t where a = 2437; +select * from t where a = 2438; +select * from t where a = 2439; +select * from t where a = 2440; +select * from t where a = 2441; +select * from t where a = 2442; +select * from t where a = 2443; +select * from t where a = 2444; +select * from t where a = 2445; +select * from t where a = 2446; +select * from t where a = 2447; +select * from t where a = 2448; +select * from t where a = 2449; +select * from t where a = 2450; +select * from t where a = 2451; +select * from t where a = 2452; +select * from t where a = 2453; +select * from t where a = 2454; +select * from t where a = 2455; +select * from t where a = 2456; +select * from t where a = 2457; +select * from t where a = 2458; +select * from t where a = 2459; +select * from t where a = 2460; +select * from t where a = 2461; +select * from t where a = 2462; +select * from t where a = 2463; +select * from t where a = 2464; +select * from t where a = 2465; +select * from t where a = 2466; +select * from t where a = 2467; +select * from t where a = 2468; +select * from t where a = 2469; +select * from t where a = 2470; +select * from t where a = 2471; +select * from t where a = 2472; +select * from t where a = 2473; +select * from t where a = 2474; +select * from t where a = 2475; +select * from t where a = 2476; +select * from t where a = 2477; +select * from t where a = 2478; +select * from t where a = 2479; +select * from t where a = 2480; +select * from t where a = 2481; +select * from t where a = 2482; +select * from t where a = 2483; +select * from t where a = 2484; +select * from t where a = 2485; +select * from t where a = 2486; +select * from t where a = 2487; +select * from t where a = 2488; +select * from t where a = 2489; +select * from t where a = 2490; +select * from t where a = 2491; +select * from t where a = 2492; +select * from t where a = 2493; +select * from t where a = 2494; +select * from t where a = 2495; +select * from t where a = 2496; +select * from t where a = 2497; +select * from t where a = 2498; +select * from t where a = 2499; +select * from t where a = 2500; +select * from t where a = 2501; +select * from t where a = 2502; +select * from t where a = 2503; +select * from t where a = 2504; +select * from t where a = 2505; +select * from t where a = 2506; +select * from t where a = 2507; +select * from t where a = 2508; +select * from t where a = 2509; +select * from t where a = 2510; +select * from t where a = 2511; +select * from t where a = 2512; +select * from t where a = 2513; +select * from t where a = 2514; +select * from t where a = 2515; +select * from t where a = 2516; +select * from t where a = 2517; +select * from t where a = 2518; +select * from t where a = 2519; +select * from t where a = 2520; +select * from t where a = 2521; +select * from t where a = 2522; +select * from t where a = 2523; +select * from t where a = 2524; +select * from t where a = 2525; +select * from t where a = 2526; +select * from t where a = 2527; +select * from t where a = 2528; +select * from t where a = 2529; +select * from t where a = 2530; +select * from t where a = 2531; +select * from t where a = 2532; +select * from t where a = 2533; +select * from t where a = 2534; +select * from t where a = 2535; +select * from t where a = 2536; +select * from t where a = 2537; +select * from t where a = 2538; +select * from t where a = 2539; +select * from t where a = 2540; +select * from t where a = 2541; +select * from t where a = 2542; +select * from t where a = 2543; +select * from t where a = 2544; +select * from t where a = 2545; +select * from t where a = 2546; +select * from t where a = 2547; +select * from t where a = 2548; +select * from t where a = 2549; +select * from t where a = 2550; +select * from t where a = 2551; +select * from t where a = 2552; +select * from t where a = 2553; +select * from t where a = 2554; +select * from t where a = 2555; +select * from t where a = 2556; +select * from t where a = 2557; +select * from t where a = 2558; +select * from t where a = 2559; +select * from t where a = 2560; +select * from t where a = 2561; +select * from t where a = 2562; +select * from t where a = 2563; +select * from t where a = 2564; +select * from t where a = 2565; +select * from t where a = 2566; +select * from t where a = 2567; +select * from t where a = 2568; +select * from t where a = 2569; +select * from t where a = 2570; +select * from t where a = 2571; +select * from t where a = 2572; +select * from t where a = 2573; +select * from t where a = 2574; +select * from t where a = 2575; +select * from t where a = 2576; +select * from t where a = 2577; +select * from t where a = 2578; +select * from t where a = 2579; +select * from t where a = 2580; +select * from t where a = 2581; +select * from t where a = 2582; +select * from t where a = 2583; +select * from t where a = 2584; +select * from t where a = 2585; +select * from t where a = 2586; +select * from t where a = 2587; +select * from t where a = 2588; +select * from t where a = 2589; +select * from t where a = 2590; +select * from t where a = 2591; +select * from t where a = 2592; +select * from t where a = 2593; +select * from t where a = 2594; +select * from t where a = 2595; +select * from t where a = 2596; +select * from t where a = 2597; +select * from t where a = 2598; +select * from t where a = 2599; +select * from t where a = 2600; +select * from t where a = 2601; +select * from t where a = 2602; +select * from t where a = 2603; +select * from t where a = 2604; +select * from t where a = 2605; +select * from t where a = 2606; +select * from t where a = 2607; +select * from t where a = 2608; +select * from t where a = 2609; +select * from t where a = 2610; +select * from t where a = 2611; +select * from t where a = 2612; +select * from t where a = 2613; +select * from t where a = 2614; +select * from t where a = 2615; +select * from t where a = 2616; +select * from t where a = 2617; +select * from t where a = 2618; +select * from t where a = 2619; +select * from t where a = 2620; +select * from t where a = 2621; +select * from t where a = 2622; +select * from t where a = 2623; +select * from t where a = 2624; +select * from t where a = 2625; +select * from t where a = 2626; +select * from t where a = 2627; +select * from t where a = 2628; +select * from t where a = 2629; +select * from t where a = 2630; +select * from t where a = 2631; +select * from t where a = 2632; +select * from t where a = 2633; +select * from t where a = 2634; +select * from t where a = 2635; +select * from t where a = 2636; +select * from t where a = 2637; +select * from t where a = 2638; +select * from t where a = 2639; +select * from t where a = 2640; +select * from t where a = 2641; +select * from t where a = 2642; +select * from t where a = 2643; +select * from t where a = 2644; +select * from t where a = 2645; +select * from t where a = 2646; +select * from t where a = 2647; +select * from t where a = 2648; +select * from t where a = 2649; +select * from t where a = 2650; +select * from t where a = 2651; +select * from t where a = 2652; +select * from t where a = 2653; +select * from t where a = 2654; +select * from t where a = 2655; +select * from t where a = 2656; +select * from t where a = 2657; +select * from t where a = 2658; +select * from t where a = 2659; +select * from t where a = 2660; +select * from t where a = 2661; +select * from t where a = 2662; +select * from t where a = 2663; +select * from t where a = 2664; +select * from t where a = 2665; +select * from t where a = 2666; +select * from t where a = 2667; +select * from t where a = 2668; +select * from t where a = 2669; +select * from t where a = 2670; +select * from t where a = 2671; +select * from t where a = 2672; +select * from t where a = 2673; +select * from t where a = 2674; +select * from t where a = 2675; +select * from t where a = 2676; +select * from t where a = 2677; +select * from t where a = 2678; +select * from t where a = 2679; +select * from t where a = 2680; +select * from t where a = 2681; +select * from t where a = 2682; +select * from t where a = 2683; +select * from t where a = 2684; +select * from t where a = 2685; +select * from t where a = 2686; +select * from t where a = 2687; +select * from t where a = 2688; +select * from t where a = 2689; +select * from t where a = 2690; +select * from t where a = 2691; +select * from t where a = 2692; +select * from t where a = 2693; +select * from t where a = 2694; +select * from t where a = 2695; +select * from t where a = 2696; +select * from t where a = 2697; +select * from t where a = 2698; +select * from t where a = 2699; +select * from t where a = 2700; +select * from t where a = 2701; +select * from t where a = 2702; +select * from t where a = 2703; +select * from t where a = 2704; +select * from t where a = 2705; +select * from t where a = 2706; +select * from t where a = 2707; +select * from t where a = 2708; +select * from t where a = 2709; +select * from t where a = 2710; +select * from t where a = 2711; +select * from t where a = 2712; +select * from t where a = 2713; +select * from t where a = 2714; +select * from t where a = 2715; +select * from t where a = 2716; +select * from t where a = 2717; +select * from t where a = 2718; +select * from t where a = 2719; +select * from t where a = 2720; +select * from t where a = 2721; +select * from t where a = 2722; +select * from t where a = 2723; +select * from t where a = 2724; +select * from t where a = 2725; +select * from t where a = 2726; +select * from t where a = 2727; +select * from t where a = 2728; +select * from t where a = 2729; +select * from t where a = 2730; +select * from t where a = 2731; +select * from t where a = 2732; +select * from t where a = 2733; +select * from t where a = 2734; +select * from t where a = 2735; +select * from t where a = 2736; +select * from t where a = 2737; +select * from t where a = 2738; +select * from t where a = 2739; +select * from t where a = 2740; +select * from t where a = 2741; +select * from t where a = 2742; +select * from t where a = 2743; +select * from t where a = 2744; +select * from t where a = 2745; +select * from t where a = 2746; +select * from t where a = 2747; +select * from t where a = 2748; +select * from t where a = 2749; +select * from t where a = 2750; +select * from t where a = 2751; +select * from t where a = 2752; +select * from t where a = 2753; +select * from t where a = 2754; +select * from t where a = 2755; +select * from t where a = 2756; +select * from t where a = 2757; +select * from t where a = 2758; +select * from t where a = 2759; +select * from t where a = 2760; +select * from t where a = 2761; +select * from t where a = 2762; +select * from t where a = 2763; +select * from t where a = 2764; +select * from t where a = 2765; +select * from t where a = 2766; +select * from t where a = 2767; +select * from t where a = 2768; +select * from t where a = 2769; +select * from t where a = 2770; +select * from t where a = 2771; +select * from t where a = 2772; +select * from t where a = 2773; +select * from t where a = 2774; +select * from t where a = 2775; +select * from t where a = 2776; +select * from t where a = 2777; +select * from t where a = 2778; +select * from t where a = 2779; +select * from t where a = 2780; +select * from t where a = 2781; +select * from t where a = 2782; +select * from t where a = 2783; +select * from t where a = 2784; +select * from t where a = 2785; +select * from t where a = 2786; +select * from t where a = 2787; +select * from t where a = 2788; +select * from t where a = 2789; +select * from t where a = 2790; +select * from t where a = 2791; +select * from t where a = 2792; +select * from t where a = 2793; +select * from t where a = 2794; +select * from t where a = 2795; +select * from t where a = 2796; +select * from t where a = 2797; +select * from t where a = 2798; +select * from t where a = 2799; +select * from t where a = 2800; +select * from t where a = 2801; +select * from t where a = 2802; +select * from t where a = 2803; +select * from t where a = 2804; +select * from t where a = 2805; +select * from t where a = 2806; +select * from t where a = 2807; +select * from t where a = 2808; +select * from t where a = 2809; +select * from t where a = 2810; +select * from t where a = 2811; +select * from t where a = 2812; +select * from t where a = 2813; +select * from t where a = 2814; +select * from t where a = 2815; +select * from t where a = 2816; +select * from t where a = 2817; +select * from t where a = 2818; +select * from t where a = 2819; +select * from t where a = 2820; +select * from t where a = 2821; +select * from t where a = 2822; +select * from t where a = 2823; +select * from t where a = 2824; +select * from t where a = 2825; +select * from t where a = 2826; +select * from t where a = 2827; +select * from t where a = 2828; +select * from t where a = 2829; +select * from t where a = 2830; +select * from t where a = 2831; +select * from t where a = 2832; +select * from t where a = 2833; +select * from t where a = 2834; +select * from t where a = 2835; +select * from t where a = 2836; +select * from t where a = 2837; +select * from t where a = 2838; +select * from t where a = 2839; +select * from t where a = 2840; +select * from t where a = 2841; +select * from t where a = 2842; +select * from t where a = 2843; +select * from t where a = 2844; +select * from t where a = 2845; +select * from t where a = 2846; +select * from t where a = 2847; +select * from t where a = 2848; +select * from t where a = 2849; +select * from t where a = 2850; +select * from t where a = 2851; +select * from t where a = 2852; +select * from t where a = 2853; +select * from t where a = 2854; +select * from t where a = 2855; +select * from t where a = 2856; +select * from t where a = 2857; +select * from t where a = 2858; +select * from t where a = 2859; +select * from t where a = 2860; +select * from t where a = 2861; +select * from t where a = 2862; +select * from t where a = 2863; +select * from t where a = 2864; +select * from t where a = 2865; +select * from t where a = 2866; +select * from t where a = 2867; +select * from t where a = 2868; +select * from t where a = 2869; +select * from t where a = 2870; +select * from t where a = 2871; +select * from t where a = 2872; +select * from t where a = 2873; +select * from t where a = 2874; +select * from t where a = 2875; +select * from t where a = 2876; +select * from t where a = 2877; +select * from t where a = 2878; +select * from t where a = 2879; +select * from t where a = 2880; +select * from t where a = 2881; +select * from t where a = 2882; +select * from t where a = 2883; +select * from t where a = 2884; +select * from t where a = 2885; +select * from t where a = 2886; +select * from t where a = 2887; +select * from t where a = 2888; +select * from t where a = 2889; +select * from t where a = 2890; +select * from t where a = 2891; +select * from t where a = 2892; +select * from t where a = 2893; +select * from t where a = 2894; +select * from t where a = 2895; +select * from t where a = 2896; +select * from t where a = 2897; +select * from t where a = 2898; +select * from t where a = 2899; +select * from t where a = 2900; +select * from t where a = 2901; +select * from t where a = 2902; +select * from t where a = 2903; +select * from t where a = 2904; +select * from t where a = 2905; +select * from t where a = 2906; +select * from t where a = 2907; +select * from t where a = 2908; +select * from t where a = 2909; +select * from t where a = 2910; +select * from t where a = 2911; +select * from t where a = 2912; +select * from t where a = 2913; +select * from t where a = 2914; +select * from t where a = 2915; +select * from t where a = 2916; +select * from t where a = 2917; +select * from t where a = 2918; +select * from t where a = 2919; +select * from t where a = 2920; +select * from t where a = 2921; +select * from t where a = 2922; +select * from t where a = 2923; +select * from t where a = 2924; +select * from t where a = 2925; +select * from t where a = 2926; +select * from t where a = 2927; +select * from t where a = 2928; +select * from t where a = 2929; +select * from t where a = 2930; +select * from t where a = 2931; +select * from t where a = 2932; +select * from t where a = 2933; +select * from t where a = 2934; +select * from t where a = 2935; +select * from t where a = 2936; +select * from t where a = 2937; +select * from t where a = 2938; +select * from t where a = 2939; +select * from t where a = 2940; +select * from t where a = 2941; +select * from t where a = 2942; +select * from t where a = 2943; +select * from t where a = 2944; +select * from t where a = 2945; +select * from t where a = 2946; +select * from t where a = 2947; +select * from t where a = 2948; +select * from t where a = 2949; +select * from t where a = 2950; +select * from t where a = 2951; +select * from t where a = 2952; +select * from t where a = 2953; +select * from t where a = 2954; +select * from t where a = 2955; +select * from t where a = 2956; +select * from t where a = 2957; +select * from t where a = 2958; +select * from t where a = 2959; +select * from t where a = 2960; +select * from t where a = 2961; +select * from t where a = 2962; +select * from t where a = 2963; +select * from t where a = 2964; +select * from t where a = 2965; +select * from t where a = 2966; +select * from t where a = 2967; +select * from t where a = 2968; +select * from t where a = 2969; +select * from t where a = 2970; +select * from t where a = 2971; +select * from t where a = 2972; +select * from t where a = 2973; +select * from t where a = 2974; +select * from t where a = 2975; +select * from t where a = 2976; +select * from t where a = 2977; +select * from t where a = 2978; +select * from t where a = 2979; +select * from t where a = 2980; +select * from t where a = 2981; +select * from t where a = 2982; +select * from t where a = 2983; +select * from t where a = 2984; +select * from t where a = 2985; +select * from t where a = 2986; +select * from t where a = 2987; +select * from t where a = 2988; +select * from t where a = 2989; +select * from t where a = 2990; +select * from t where a = 2991; +select * from t where a = 2992; +select * from t where a = 2993; +select * from t where a = 2994; +select * from t where a = 2995; +select * from t where a = 2996; +select * from t where a = 2997; +select * from t where a = 2998; +select * from t where a = 2999; +select * from t where a = 3000; +select * from t where a = 3001; +select * from t where a = 3002; +select * from t where a = 3003; +select * from t where a = 3004; +select * from t where a = 3005; +select * from t where a = 3006; +select * from t where a = 3007; +select * from t where a = 3008; +select * from t where a = 3009; +select * from t where a = 3010; +select * from t where a = 3011; +select * from t where a = 3012; +select * from t where a = 3013; +select * from t where a = 3014; +select * from t where a = 3015; +select * from t where a = 3016; +select * from t where a = 3017; +select * from t where a = 3018; +select * from t where a = 3019; +select * from t where a = 3020; +select * from t where a = 3021; +select * from t where a = 3022; +select * from t where a = 3023; +select * from t where a = 3024; +select * from t where a = 3025; +select * from t where a = 3026; +select * from t where a = 3027; +select * from t where a = 3028; +select * from t where a = 3029; +select * from t where a = 3030; +select * from t where a = 3031; +select * from t where a = 3032; +select * from t where a = 3033; +select * from t where a = 3034; +select * from t where a = 3035; +select * from t where a = 3036; +select * from t where a = 3037; +select * from t where a = 3038; +select * from t where a = 3039; +select * from t where a = 3040; +select * from t where a = 3041; +select * from t where a = 3042; +select * from t where a = 3043; +select * from t where a = 3044; +select * from t where a = 3045; +select * from t where a = 3046; +select * from t where a = 3047; +select * from t where a = 3048; +select * from t where a = 3049; +select * from t where a = 3050; +select * from t where a = 3051; +select * from t where a = 3052; +select * from t where a = 3053; +select * from t where a = 3054; +select * from t where a = 3055; +select * from t where a = 3056; +select * from t where a = 3057; +select * from t where a = 3058; +select * from t where a = 3059; +select * from t where a = 3060; +select * from t where a = 3061; +select * from t where a = 3062; +select * from t where a = 3063; +select * from t where a = 3064; +select * from t where a = 3065; +select * from t where a = 3066; +select * from t where a = 3067; +select * from t where a = 3068; +select * from t where a = 3069; +select * from t where a = 3070; +select * from t where a = 3071; +select * from t where a = 3072; +select * from t where a = 3073; +select * from t where a = 3074; +select * from t where a = 3075; +select * from t where a = 3076; +select * from t where a = 3077; +select * from t where a = 3078; +select * from t where a = 3079; +select * from t where a = 3080; +select * from t where a = 3081; +select * from t where a = 3082; +select * from t where a = 3083; +select * from t where a = 3084; +select * from t where a = 3085; +select * from t where a = 3086; +select * from t where a = 3087; +select * from t where a = 3088; +select * from t where a = 3089; +select * from t where a = 3090; +select * from t where a = 3091; +select * from t where a = 3092; +select * from t where a = 3093; +select * from t where a = 3094; +select * from t where a = 3095; +select * from t where a = 3096; +select * from t where a = 3097; +select * from t where a = 3098; +select * from t where a = 3099; +select * from t where a = 3100; +select * from t where a = 3101; +select * from t where a = 3102; +select * from t where a = 3103; +select * from t where a = 3104; +select * from t where a = 3105; +select * from t where a = 3106; +select * from t where a = 3107; +select * from t where a = 3108; +select * from t where a = 3109; +select * from t where a = 3110; +select * from t where a = 3111; +select * from t where a = 3112; +select * from t where a = 3113; +select * from t where a = 3114; +select * from t where a = 3115; +select * from t where a = 3116; +select * from t where a = 3117; +select * from t where a = 3118; +select * from t where a = 3119; +select * from t where a = 3120; +select * from t where a = 3121; +select * from t where a = 3122; +select * from t where a = 3123; +select * from t where a = 3124; +select * from t where a = 3125; +select * from t where a = 3126; +select * from t where a = 3127; +select * from t where a = 3128; +select * from t where a = 3129; +select * from t where a = 3130; +select * from t where a = 3131; +select * from t where a = 3132; +select * from t where a = 3133; +select * from t where a = 3134; +select * from t where a = 3135; +select * from t where a = 3136; +select * from t where a = 3137; +select * from t where a = 3138; +select * from t where a = 3139; +select * from t where a = 3140; +select * from t where a = 3141; +select * from t where a = 3142; +select * from t where a = 3143; +select * from t where a = 3144; +select * from t where a = 3145; +select * from t where a = 3146; +select * from t where a = 3147; +select * from t where a = 3148; +select * from t where a = 3149; +select * from t where a = 3150; +select * from t where a = 3151; +select * from t where a = 3152; +select * from t where a = 3153; +select * from t where a = 3154; +select * from t where a = 3155; +select * from t where a = 3156; +select * from t where a = 3157; +select * from t where a = 3158; +select * from t where a = 3159; +select * from t where a = 3160; +select * from t where a = 3161; +select * from t where a = 3162; +select * from t where a = 3163; +select * from t where a = 3164; +select * from t where a = 3165; +select * from t where a = 3166; +select * from t where a = 3167; +select * from t where a = 3168; +select * from t where a = 3169; +select * from t where a = 3170; +select * from t where a = 3171; +select * from t where a = 3172; +select * from t where a = 3173; +select * from t where a = 3174; +select * from t where a = 3175; +select * from t where a = 3176; +select * from t where a = 3177; +select * from t where a = 3178; +select * from t where a = 3179; +select * from t where a = 3180; +select * from t where a = 3181; +select * from t where a = 3182; +select * from t where a = 3183; +select * from t where a = 3184; +select * from t where a = 3185; +select * from t where a = 3186; +select * from t where a = 3187; +select * from t where a = 3188; +select * from t where a = 3189; +select * from t where a = 3190; +select * from t where a = 3191; +select * from t where a = 3192; +select * from t where a = 3193; +select * from t where a = 3194; +select * from t where a = 3195; +select * from t where a = 3196; +select * from t where a = 3197; +select * from t where a = 3198; +select * from t where a = 3199; +select * from t where a = 3200; +select * from t where a = 3201; +select * from t where a = 3202; +select * from t where a = 3203; +select * from t where a = 3204; +select * from t where a = 3205; +select * from t where a = 3206; +select * from t where a = 3207; +select * from t where a = 3208; +select * from t where a = 3209; +select * from t where a = 3210; +select * from t where a = 3211; +select * from t where a = 3212; +select * from t where a = 3213; +select * from t where a = 3214; +select * from t where a = 3215; +select * from t where a = 3216; +select * from t where a = 3217; +select * from t where a = 3218; +select * from t where a = 3219; +select * from t where a = 3220; +select * from t where a = 3221; +select * from t where a = 3222; +select * from t where a = 3223; +select * from t where a = 3224; +select * from t where a = 3225; +select * from t where a = 3226; +select * from t where a = 3227; +select * from t where a = 3228; +select * from t where a = 3229; +select * from t where a = 3230; +select * from t where a = 3231; +select * from t where a = 3232; +select * from t where a = 3233; +select * from t where a = 3234; +select * from t where a = 3235; +select * from t where a = 3236; +select * from t where a = 3237; +select * from t where a = 3238; +select * from t where a = 3239; +select * from t where a = 3240; +select * from t where a = 3241; +select * from t where a = 3242; +select * from t where a = 3243; +select * from t where a = 3244; +select * from t where a = 3245; +select * from t where a = 3246; +select * from t where a = 3247; +select * from t where a = 3248; +select * from t where a = 3249; +select * from t where a = 3250; +select * from t where a = 3251; +select * from t where a = 3252; +select * from t where a = 3253; +select * from t where a = 3254; +select * from t where a = 3255; +select * from t where a = 3256; +select * from t where a = 3257; +select * from t where a = 3258; +select * from t where a = 3259; +select * from t where a = 3260; +select * from t where a = 3261; +select * from t where a = 3262; +select * from t where a = 3263; +select * from t where a = 3264; +select * from t where a = 3265; +select * from t where a = 3266; +select * from t where a = 3267; +select * from t where a = 3268; +select * from t where a = 3269; +select * from t where a = 3270; +select * from t where a = 3271; +select * from t where a = 3272; +select * from t where a = 3273; +select * from t where a = 3274; +select * from t where a = 3275; +select * from t where a = 3276; +select * from t where a = 3277; +select * from t where a = 3278; +select * from t where a = 3279; +select * from t where a = 3280; +select * from t where a = 3281; +select * from t where a = 3282; +select * from t where a = 3283; +select * from t where a = 3284; +select * from t where a = 3285; +select * from t where a = 3286; +select * from t where a = 3287; +select * from t where a = 3288; +select * from t where a = 3289; +select * from t where a = 3290; +select * from t where a = 3291; +select * from t where a = 3292; +select * from t where a = 3293; +select * from t where a = 3294; +select * from t where a = 3295; +select * from t where a = 3296; +select * from t where a = 3297; +select * from t where a = 3298; +select * from t where a = 3299; +select * from t where a = 3300; +select * from t where a = 3301; +select * from t where a = 3302; +select * from t where a = 3303; +select * from t where a = 3304; +select * from t where a = 3305; +select * from t where a = 3306; +select * from t where a = 3307; +select * from t where a = 3308; +select * from t where a = 3309; +select * from t where a = 3310; +select * from t where a = 3311; +select * from t where a = 3312; +select * from t where a = 3313; +select * from t where a = 3314; +select * from t where a = 3315; +select * from t where a = 3316; +select * from t where a = 3317; +select * from t where a = 3318; +select * from t where a = 3319; +select * from t where a = 3320; +select * from t where a = 3321; +select * from t where a = 3322; +select * from t where a = 3323; +select * from t where a = 3324; +select * from t where a = 3325; +select * from t where a = 3326; +select * from t where a = 3327; +select * from t where a = 3328; +select * from t where a = 3329; +select * from t where a = 3330; +select * from t where a = 3331; +select * from t where a = 3332; +select * from t where a = 3333; +select * from t where a = 3334; +select * from t where a = 3335; +select * from t where a = 3336; +select * from t where a = 3337; +select * from t where a = 3338; +select * from t where a = 3339; +select * from t where a = 3340; +select * from t where a = 3341; +select * from t where a = 3342; +select * from t where a = 3343; +select * from t where a = 3344; +select * from t where a = 3345; +select * from t where a = 3346; +select * from t where a = 3347; +select * from t where a = 3348; +select * from t where a = 3349; +select * from t where a = 3350; +select * from t where a = 3351; +select * from t where a = 3352; +select * from t where a = 3353; +select * from t where a = 3354; +select * from t where a = 3355; +select * from t where a = 3356; +select * from t where a = 3357; +select * from t where a = 3358; +select * from t where a = 3359; +select * from t where a = 3360; +select * from t where a = 3361; +select * from t where a = 3362; +select * from t where a = 3363; +select * from t where a = 3364; +select * from t where a = 3365; +select * from t where a = 3366; +select * from t where a = 3367; +select * from t where a = 3368; +select * from t where a = 3369; +select * from t where a = 3370; +select * from t where a = 3371; +select * from t where a = 3372; +select * from t where a = 3373; +select * from t where a = 3374; +select * from t where a = 3375; +select * from t where a = 3376; +select * from t where a = 3377; +select * from t where a = 3378; +select * from t where a = 3379; +select * from t where a = 3380; +select * from t where a = 3381; +select * from t where a = 3382; +select * from t where a = 3383; +select * from t where a = 3384; +select * from t where a = 3385; +select * from t where a = 3386; +select * from t where a = 3387; +select * from t where a = 3388; +select * from t where a = 3389; +select * from t where a = 3390; +select * from t where a = 3391; +select * from t where a = 3392; +select * from t where a = 3393; +select * from t where a = 3394; +select * from t where a = 3395; +select * from t where a = 3396; +select * from t where a = 3397; +select * from t where a = 3398; +select * from t where a = 3399; +select * from t where a = 3400; +select * from t where a = 3401; +select * from t where a = 3402; +select * from t where a = 3403; +select * from t where a = 3404; +select * from t where a = 3405; +select * from t where a = 3406; +select * from t where a = 3407; +select * from t where a = 3408; +select * from t where a = 3409; +select * from t where a = 3410; +select * from t where a = 3411; +select * from t where a = 3412; +select * from t where a = 3413; +select * from t where a = 3414; +select * from t where a = 3415; +select * from t where a = 3416; +select * from t where a = 3417; +select * from t where a = 3418; +select * from t where a = 3419; +select * from t where a = 3420; +select * from t where a = 3421; +select * from t where a = 3422; +select * from t where a = 3423; +select * from t where a = 3424; +select * from t where a = 3425; +select * from t where a = 3426; +select * from t where a = 3427; +select * from t where a = 3428; +select * from t where a = 3429; +select * from t where a = 3430; +select * from t where a = 3431; +select * from t where a = 3432; +select * from t where a = 3433; +select * from t where a = 3434; +select * from t where a = 3435; +select * from t where a = 3436; +select * from t where a = 3437; +select * from t where a = 3438; +select * from t where a = 3439; +select * from t where a = 3440; +select * from t where a = 3441; +select * from t where a = 3442; +select * from t where a = 3443; +select * from t where a = 3444; +select * from t where a = 3445; +select * from t where a = 3446; +select * from t where a = 3447; +select * from t where a = 3448; +select * from t where a = 3449; +select * from t where a = 3450; +select * from t where a = 3451; +select * from t where a = 3452; +select * from t where a = 3453; +select * from t where a = 3454; +select * from t where a = 3455; +select * from t where a = 3456; +select * from t where a = 3457; +select * from t where a = 3458; +select * from t where a = 3459; +select * from t where a = 3460; +select * from t where a = 3461; +select * from t where a = 3462; +select * from t where a = 3463; +select * from t where a = 3464; +select * from t where a = 3465; +select * from t where a = 3466; +select * from t where a = 3467; +select * from t where a = 3468; +select * from t where a = 3469; +select * from t where a = 3470; +select * from t where a = 3471; +select * from t where a = 3472; +select * from t where a = 3473; +select * from t where a = 3474; +select * from t where a = 3475; +select * from t where a = 3476; +select * from t where a = 3477; +select * from t where a = 3478; +select * from t where a = 3479; +select * from t where a = 3480; +select * from t where a = 3481; +select * from t where a = 3482; +select * from t where a = 3483; +select * from t where a = 3484; +select * from t where a = 3485; +select * from t where a = 3486; +select * from t where a = 3487; +select * from t where a = 3488; +select * from t where a = 3489; +select * from t where a = 3490; +select * from t where a = 3491; +select * from t where a = 3492; +select * from t where a = 3493; +select * from t where a = 3494; +select * from t where a = 3495; +select * from t where a = 3496; +select * from t where a = 3497; +select * from t where a = 3498; +select * from t where a = 3499; +select * from t where a = 3500; +select * from t where a = 3501; +select * from t where a = 3502; +select * from t where a = 3503; +select * from t where a = 3504; +select * from t where a = 3505; +select * from t where a = 3506; +select * from t where a = 3507; +select * from t where a = 3508; +select * from t where a = 3509; +select * from t where a = 3510; +select * from t where a = 3511; +select * from t where a = 3512; +select * from t where a = 3513; +select * from t where a = 3514; +select * from t where a = 3515; +select * from t where a = 3516; +select * from t where a = 3517; +select * from t where a = 3518; +select * from t where a = 3519; +select * from t where a = 3520; +select * from t where a = 3521; +select * from t where a = 3522; +select * from t where a = 3523; +select * from t where a = 3524; +select * from t where a = 3525; +select * from t where a = 3526; +select * from t where a = 3527; +select * from t where a = 3528; +select * from t where a = 3529; +select * from t where a = 3530; +select * from t where a = 3531; +select * from t where a = 3532; +select * from t where a = 3533; +select * from t where a = 3534; +select * from t where a = 3535; +select * from t where a = 3536; +select * from t where a = 3537; +select * from t where a = 3538; +select * from t where a = 3539; +select * from t where a = 3540; +select * from t where a = 3541; +select * from t where a = 3542; +select * from t where a = 3543; +select * from t where a = 3544; +select * from t where a = 3545; +select * from t where a = 3546; +select * from t where a = 3547; +select * from t where a = 3548; +select * from t where a = 3549; +select * from t where a = 3550; +select * from t where a = 3551; +select * from t where a = 3552; +select * from t where a = 3553; +select * from t where a = 3554; +select * from t where a = 3555; +select * from t where a = 3556; +select * from t where a = 3557; +select * from t where a = 3558; +select * from t where a = 3559; +select * from t where a = 3560; +select * from t where a = 3561; +select * from t where a = 3562; +select * from t where a = 3563; +select * from t where a = 3564; +select * from t where a = 3565; +select * from t where a = 3566; +select * from t where a = 3567; +select * from t where a = 3568; +select * from t where a = 3569; +select * from t where a = 3570; +select * from t where a = 3571; +select * from t where a = 3572; +select * from t where a = 3573; +select * from t where a = 3574; +select * from t where a = 3575; +select * from t where a = 3576; +select * from t where a = 3577; +select * from t where a = 3578; +select * from t where a = 3579; +select * from t where a = 3580; +select * from t where a = 3581; +select * from t where a = 3582; +select * from t where a = 3583; +select * from t where a = 3584; +select * from t where a = 3585; +select * from t where a = 3586; +select * from t where a = 3587; +select * from t where a = 3588; +select * from t where a = 3589; +select * from t where a = 3590; +select * from t where a = 3591; +select * from t where a = 3592; +select * from t where a = 3593; +select * from t where a = 3594; +select * from t where a = 3595; +select * from t where a = 3596; +select * from t where a = 3597; +select * from t where a = 3598; +select * from t where a = 3599; +select * from t where a = 3600; +select * from t where a = 3601; +select * from t where a = 3602; +select * from t where a = 3603; +select * from t where a = 3604; +select * from t where a = 3605; +select * from t where a = 3606; +select * from t where a = 3607; +select * from t where a = 3608; +select * from t where a = 3609; +select * from t where a = 3610; +select * from t where a = 3611; +select * from t where a = 3612; +select * from t where a = 3613; +select * from t where a = 3614; +select * from t where a = 3615; +select * from t where a = 3616; +select * from t where a = 3617; +select * from t where a = 3618; +select * from t where a = 3619; +select * from t where a = 3620; +select * from t where a = 3621; +select * from t where a = 3622; +select * from t where a = 3623; +select * from t where a = 3624; +select * from t where a = 3625; +select * from t where a = 3626; +select * from t where a = 3627; +select * from t where a = 3628; +select * from t where a = 3629; +select * from t where a = 3630; +select * from t where a = 3631; +select * from t where a = 3632; +select * from t where a = 3633; +select * from t where a = 3634; +select * from t where a = 3635; +select * from t where a = 3636; +select * from t where a = 3637; +select * from t where a = 3638; +select * from t where a = 3639; +select * from t where a = 3640; +select * from t where a = 3641; +select * from t where a = 3642; +select * from t where a = 3643; +select * from t where a = 3644; +select * from t where a = 3645; +select * from t where a = 3646; +select * from t where a = 3647; +select * from t where a = 3648; +select * from t where a = 3649; +select * from t where a = 3650; +select * from t where a = 3651; +select * from t where a = 3652; +select * from t where a = 3653; +select * from t where a = 3654; +select * from t where a = 3655; +select * from t where a = 3656; +select * from t where a = 3657; +select * from t where a = 3658; +select * from t where a = 3659; +select * from t where a = 3660; +select * from t where a = 3661; +select * from t where a = 3662; +select * from t where a = 3663; +select * from t where a = 3664; +select * from t where a = 3665; +select * from t where a = 3666; +select * from t where a = 3667; +select * from t where a = 3668; +select * from t where a = 3669; +select * from t where a = 3670; +select * from t where a = 3671; +select * from t where a = 3672; +select * from t where a = 3673; +select * from t where a = 3674; +select * from t where a = 3675; +select * from t where a = 3676; +select * from t where a = 3677; +select * from t where a = 3678; +select * from t where a = 3679; +select * from t where a = 3680; +select * from t where a = 3681; +select * from t where a = 3682; +select * from t where a = 3683; +select * from t where a = 3684; +select * from t where a = 3685; +select * from t where a = 3686; +select * from t where a = 3687; +select * from t where a = 3688; +select * from t where a = 3689; +select * from t where a = 3690; +select * from t where a = 3691; +select * from t where a = 3692; +select * from t where a = 3693; +select * from t where a = 3694; +select * from t where a = 3695; +select * from t where a = 3696; +select * from t where a = 3697; +select * from t where a = 3698; +select * from t where a = 3699; +select * from t where a = 3700; +select * from t where a = 3701; +select * from t where a = 3702; +select * from t where a = 3703; +select * from t where a = 3704; +select * from t where a = 3705; +select * from t where a = 3706; +select * from t where a = 3707; +select * from t where a = 3708; +select * from t where a = 3709; +select * from t where a = 3710; +select * from t where a = 3711; +select * from t where a = 3712; +select * from t where a = 3713; +select * from t where a = 3714; +select * from t where a = 3715; +select * from t where a = 3716; +select * from t where a = 3717; +select * from t where a = 3718; +select * from t where a = 3719; +select * from t where a = 3720; +select * from t where a = 3721; +select * from t where a = 3722; +select * from t where a = 3723; +select * from t where a = 3724; +select * from t where a = 3725; +select * from t where a = 3726; +select * from t where a = 3727; +select * from t where a = 3728; +select * from t where a = 3729; +select * from t where a = 3730; +select * from t where a = 3731; +select * from t where a = 3732; +select * from t where a = 3733; +select * from t where a = 3734; +select * from t where a = 3735; +select * from t where a = 3736; +select * from t where a = 3737; +select * from t where a = 3738; +select * from t where a = 3739; +select * from t where a = 3740; +select * from t where a = 3741; +select * from t where a = 3742; +select * from t where a = 3743; +select * from t where a = 3744; +select * from t where a = 3745; +select * from t where a = 3746; +select * from t where a = 3747; +select * from t where a = 3748; +select * from t where a = 3749; +select * from t where a = 3750; +select * from t where a = 3751; +select * from t where a = 3752; +select * from t where a = 3753; +select * from t where a = 3754; +select * from t where a = 3755; +select * from t where a = 3756; +select * from t where a = 3757; +select * from t where a = 3758; +select * from t where a = 3759; +select * from t where a = 3760; +select * from t where a = 3761; +select * from t where a = 3762; +select * from t where a = 3763; +select * from t where a = 3764; +select * from t where a = 3765; +select * from t where a = 3766; +select * from t where a = 3767; +select * from t where a = 3768; +select * from t where a = 3769; +select * from t where a = 3770; +select * from t where a = 3771; +select * from t where a = 3772; +select * from t where a = 3773; +select * from t where a = 3774; +select * from t where a = 3775; +select * from t where a = 3776; +select * from t where a = 3777; +select * from t where a = 3778; +select * from t where a = 3779; +select * from t where a = 3780; +select * from t where a = 3781; +select * from t where a = 3782; +select * from t where a = 3783; +select * from t where a = 3784; +select * from t where a = 3785; +select * from t where a = 3786; +select * from t where a = 3787; +select * from t where a = 3788; +select * from t where a = 3789; +select * from t where a = 3790; +select * from t where a = 3791; +select * from t where a = 3792; +select * from t where a = 3793; +select * from t where a = 3794; +select * from t where a = 3795; +select * from t where a = 3796; +select * from t where a = 3797; +select * from t where a = 3798; +select * from t where a = 3799; +select * from t where a = 3800; +select * from t where a = 3801; +select * from t where a = 3802; +select * from t where a = 3803; +select * from t where a = 3804; +select * from t where a = 3805; +select * from t where a = 3806; +select * from t where a = 3807; +select * from t where a = 3808; +select * from t where a = 3809; +select * from t where a = 3810; +select * from t where a = 3811; +select * from t where a = 3812; +select * from t where a = 3813; +select * from t where a = 3814; +select * from t where a = 3815; +select * from t where a = 3816; +select * from t where a = 3817; +select * from t where a = 3818; +select * from t where a = 3819; +select * from t where a = 3820; +select * from t where a = 3821; +select * from t where a = 3822; +select * from t where a = 3823; +select * from t where a = 3824; +select * from t where a = 3825; +select * from t where a = 3826; +select * from t where a = 3827; +select * from t where a = 3828; +select * from t where a = 3829; +select * from t where a = 3830; +select * from t where a = 3831; +select * from t where a = 3832; +select * from t where a = 3833; +select * from t where a = 3834; +select * from t where a = 3835; +select * from t where a = 3836; +select * from t where a = 3837; +select * from t where a = 3838; +select * from t where a = 3839; +select * from t where a = 3840; +select * from t where a = 3841; +select * from t where a = 3842; +select * from t where a = 3843; +select * from t where a = 3844; +select * from t where a = 3845; +select * from t where a = 3846; +select * from t where a = 3847; +select * from t where a = 3848; +select * from t where a = 3849; +select * from t where a = 3850; +select * from t where a = 3851; +select * from t where a = 3852; +select * from t where a = 3853; +select * from t where a = 3854; +select * from t where a = 3855; +select * from t where a = 3856; +select * from t where a = 3857; +select * from t where a = 3858; +select * from t where a = 3859; +select * from t where a = 3860; +select * from t where a = 3861; +select * from t where a = 3862; +select * from t where a = 3863; +select * from t where a = 3864; +select * from t where a = 3865; +select * from t where a = 3866; +select * from t where a = 3867; +select * from t where a = 3868; +select * from t where a = 3869; +select * from t where a = 3870; +select * from t where a = 3871; +select * from t where a = 3872; +select * from t where a = 3873; +select * from t where a = 3874; +select * from t where a = 3875; +select * from t where a = 3876; +select * from t where a = 3877; +select * from t where a = 3878; +select * from t where a = 3879; +select * from t where a = 3880; +select * from t where a = 3881; +select * from t where a = 3882; +select * from t where a = 3883; +select * from t where a = 3884; +select * from t where a = 3885; +select * from t where a = 3886; +select * from t where a = 3887; +select * from t where a = 3888; +select * from t where a = 3889; +select * from t where a = 3890; +select * from t where a = 3891; +select * from t where a = 3892; +select * from t where a = 3893; +select * from t where a = 3894; +select * from t where a = 3895; +select * from t where a = 3896; +select * from t where a = 3897; +select * from t where a = 3898; +select * from t where a = 3899; +select * from t where a = 3900; +select * from t where a = 3901; +select * from t where a = 3902; +select * from t where a = 3903; +select * from t where a = 3904; +select * from t where a = 3905; +select * from t where a = 3906; +select * from t where a = 3907; +select * from t where a = 3908; +select * from t where a = 3909; +select * from t where a = 3910; +select * from t where a = 3911; +select * from t where a = 3912; +select * from t where a = 3913; +select * from t where a = 3914; +select * from t where a = 3915; +select * from t where a = 3916; +select * from t where a = 3917; +select * from t where a = 3918; +select * from t where a = 3919; +select * from t where a = 3920; +select * from t where a = 3921; +select * from t where a = 3922; +select * from t where a = 3923; +select * from t where a = 3924; +select * from t where a = 3925; +select * from t where a = 3926; +select * from t where a = 3927; +select * from t where a = 3928; +select * from t where a = 3929; +select * from t where a = 3930; +select * from t where a = 3931; +select * from t where a = 3932; +select * from t where a = 3933; +select * from t where a = 3934; +select * from t where a = 3935; +select * from t where a = 3936; +select * from t where a = 3937; +select * from t where a = 3938; +select * from t where a = 3939; +select * from t where a = 3940; +select * from t where a = 3941; +select * from t where a = 3942; +select * from t where a = 3943; +select * from t where a = 3944; +select * from t where a = 3945; +select * from t where a = 3946; +select * from t where a = 3947; +select * from t where a = 3948; +select * from t where a = 3949; +select * from t where a = 3950; +select * from t where a = 3951; +select * from t where a = 3952; +select * from t where a = 3953; +select * from t where a = 3954; +select * from t where a = 3955; +select * from t where a = 3956; +select * from t where a = 3957; +select * from t where a = 3958; +select * from t where a = 3959; +select * from t where a = 3960; +select * from t where a = 3961; +select * from t where a = 3962; +select * from t where a = 3963; +select * from t where a = 3964; +select * from t where a = 3965; +select * from t where a = 3966; +select * from t where a = 3967; +select * from t where a = 3968; +select * from t where a = 3969; +select * from t where a = 3970; +select * from t where a = 3971; +select * from t where a = 3972; +select * from t where a = 3973; +select * from t where a = 3974; +select * from t where a = 3975; +select * from t where a = 3976; +select * from t where a = 3977; +select * from t where a = 3978; +select * from t where a = 3979; +select * from t where a = 3980; +select * from t where a = 3981; +select * from t where a = 3982; +select * from t where a = 3983; +select * from t where a = 3984; +select * from t where a = 3985; +select * from t where a = 3986; +select * from t where a = 3987; +select * from t where a = 3988; +select * from t where a = 3989; +select * from t where a = 3990; +select * from t where a = 3991; +select * from t where a = 3992; +select * from t where a = 3993; +select * from t where a = 3994; +select * from t where a = 3995; +select * from t where a = 3996; +select * from t where a = 3997; +select * from t where a = 3998; +select * from t where a = 3999; +select * from t where a = 4000; +select * from t where a = 4001; +select * from t where a = 4002; +select * from t where a = 4003; +select * from t where a = 4004; +select * from t where a = 4005; +select * from t where a = 4006; +select * from t where a = 4007; +select * from t where a = 4008; +select * from t where a = 4009; +select * from t where a = 4010; +select * from t where a = 4011; +select * from t where a = 4012; +select * from t where a = 4013; +select * from t where a = 4014; +select * from t where a = 4015; +select * from t where a = 4016; +select * from t where a = 4017; +select * from t where a = 4018; +select * from t where a = 4019; +select * from t where a = 4020; +select * from t where a = 4021; +select * from t where a = 4022; +select * from t where a = 4023; +select * from t where a = 4024; +select * from t where a = 4025; +select * from t where a = 4026; +select * from t where a = 4027; +select * from t where a = 4028; +select * from t where a = 4029; +select * from t where a = 4030; +select * from t where a = 4031; +select * from t where a = 4032; +select * from t where a = 4033; +select * from t where a = 4034; +select * from t where a = 4035; +select * from t where a = 4036; +select * from t where a = 4037; +select * from t where a = 4038; +select * from t where a = 4039; +select * from t where a = 4040; +select * from t where a = 4041; +select * from t where a = 4042; +select * from t where a = 4043; +select * from t where a = 4044; +select * from t where a = 4045; +select * from t where a = 4046; +select * from t where a = 4047; +select * from t where a = 4048; +select * from t where a = 4049; +select * from t where a = 4050; +select * from t where a = 4051; +select * from t where a = 4052; +select * from t where a = 4053; +select * from t where a = 4054; +select * from t where a = 4055; +select * from t where a = 4056; +select * from t where a = 4057; +select * from t where a = 4058; +select * from t where a = 4059; +select * from t where a = 4060; +select * from t where a = 4061; +select * from t where a = 4062; +select * from t where a = 4063; +select * from t where a = 4064; +select * from t where a = 4065; +select * from t where a = 4066; +select * from t where a = 4067; +select * from t where a = 4068; +select * from t where a = 4069; +select * from t where a = 4070; +select * from t where a = 4071; +select * from t where a = 4072; +select * from t where a = 4073; +select * from t where a = 4074; +select * from t where a = 4075; +select * from t where a = 4076; +select * from t where a = 4077; +select * from t where a = 4078; +select * from t where a = 4079; +select * from t where a = 4080; +select * from t where a = 4081; +select * from t where a = 4082; +select * from t where a = 4083; +select * from t where a = 4084; +select * from t where a = 4085; +select * from t where a = 4086; +select * from t where a = 4087; +select * from t where a = 4088; +select * from t where a = 4089; +select * from t where a = 4090; +select * from t where a = 4091; +select * from t where a = 4092; +select * from t where a = 4093; +select * from t where a = 4094; +select * from t where a = 4095; +select * from t where a = 4096; +select * from t where a = 4097; +select * from t where a = 4098; +select * from t where a = 4099; +select * from t where a = 4100; +select * from t where a = 4101; +select * from t where a = 4102; +select * from t where a = 4103; +select * from t where a = 4104; +select * from t where a = 4105; +select * from t where a = 4106; +select * from t where a = 4107; +select * from t where a = 4108; +select * from t where a = 4109; +select * from t where a = 4110; +select * from t where a = 4111; +select * from t where a = 4112; +select * from t where a = 4113; +select * from t where a = 4114; +select * from t where a = 4115; +select * from t where a = 4116; +select * from t where a = 4117; +select * from t where a = 4118; +select * from t where a = 4119; +select * from t where a = 4120; +select * from t where a = 4121; +select * from t where a = 4122; +select * from t where a = 4123; +select * from t where a = 4124; +select * from t where a = 4125; +select * from t where a = 4126; +select * from t where a = 4127; +select * from t where a = 4128; +select * from t where a = 4129; +select * from t where a = 4130; +select * from t where a = 4131; +select * from t where a = 4132; +select * from t where a = 4133; +select * from t where a = 4134; +select * from t where a = 4135; +select * from t where a = 4136; +select * from t where a = 4137; +select * from t where a = 4138; +select * from t where a = 4139; +select * from t where a = 4140; +select * from t where a = 4141; +select * from t where a = 4142; +select * from t where a = 4143; +select * from t where a = 4144; +select * from t where a = 4145; +select * from t where a = 4146; +select * from t where a = 4147; +select * from t where a = 4148; +select * from t where a = 4149; +select * from t where a = 4150; +select * from t where a = 4151; +select * from t where a = 4152; +select * from t where a = 4153; +select * from t where a = 4154; +select * from t where a = 4155; +select * from t where a = 4156; +select * from t where a = 4157; +select * from t where a = 4158; +select * from t where a = 4159; +select * from t where a = 4160; +select * from t where a = 4161; +select * from t where a = 4162; +select * from t where a = 4163; +select * from t where a = 4164; +select * from t where a = 4165; +select * from t where a = 4166; +select * from t where a = 4167; +select * from t where a = 4168; +select * from t where a = 4169; +select * from t where a = 4170; +select * from t where a = 4171; +select * from t where a = 4172; +select * from t where a = 4173; +select * from t where a = 4174; +select * from t where a = 4175; +select * from t where a = 4176; +select * from t where a = 4177; +select * from t where a = 4178; +select * from t where a = 4179; +select * from t where a = 4180; +select * from t where a = 4181; +select * from t where a = 4182; +select * from t where a = 4183; +select * from t where a = 4184; +select * from t where a = 4185; +select * from t where a = 4186; +select * from t where a = 4187; +select * from t where a = 4188; +select * from t where a = 4189; +select * from t where a = 4190; +select * from t where a = 4191; +select * from t where a = 4192; +select * from t where a = 4193; +select * from t where a = 4194; +select * from t where a = 4195; +select * from t where a = 4196; +select * from t where a = 4197; +select * from t where a = 4198; +select * from t where a = 4199; +select * from t where a = 4200; +select * from t where a = 4201; +select * from t where a = 4202; +select * from t where a = 4203; +select * from t where a = 4204; +select * from t where a = 4205; +select * from t where a = 4206; +select * from t where a = 4207; +select * from t where a = 4208; +select * from t where a = 4209; +select * from t where a = 4210; +select * from t where a = 4211; +select * from t where a = 4212; +select * from t where a = 4213; +select * from t where a = 4214; +select * from t where a = 4215; +select * from t where a = 4216; +select * from t where a = 4217; +select * from t where a = 4218; +select * from t where a = 4219; +select * from t where a = 4220; +select * from t where a = 4221; +select * from t where a = 4222; +select * from t where a = 4223; +select * from t where a = 4224; +select * from t where a = 4225; +select * from t where a = 4226; +select * from t where a = 4227; +select * from t where a = 4228; +select * from t where a = 4229; +select * from t where a = 4230; +select * from t where a = 4231; +select * from t where a = 4232; +select * from t where a = 4233; +select * from t where a = 4234; +select * from t where a = 4235; +select * from t where a = 4236; +select * from t where a = 4237; +select * from t where a = 4238; +select * from t where a = 4239; +select * from t where a = 4240; +select * from t where a = 4241; +select * from t where a = 4242; +select * from t where a = 4243; +select * from t where a = 4244; +select * from t where a = 4245; +select * from t where a = 4246; +select * from t where a = 4247; +select * from t where a = 4248; +select * from t where a = 4249; +select * from t where a = 4250; +select * from t where a = 4251; +select * from t where a = 4252; +select * from t where a = 4253; +select * from t where a = 4254; +select * from t where a = 4255; +select * from t where a = 4256; +select * from t where a = 4257; +select * from t where a = 4258; +select * from t where a = 4259; +select * from t where a = 4260; +select * from t where a = 4261; +select * from t where a = 4262; +select * from t where a = 4263; +select * from t where a = 4264; +select * from t where a = 4265; +select * from t where a = 4266; +select * from t where a = 4267; +select * from t where a = 4268; +select * from t where a = 4269; +select * from t where a = 4270; +select * from t where a = 4271; +select * from t where a = 4272; +select * from t where a = 4273; +select * from t where a = 4274; +select * from t where a = 4275; +select * from t where a = 4276; +select * from t where a = 4277; +select * from t where a = 4278; +select * from t where a = 4279; +select * from t where a = 4280; +select * from t where a = 4281; +select * from t where a = 4282; +select * from t where a = 4283; +select * from t where a = 4284; +select * from t where a = 4285; +select * from t where a = 4286; +select * from t where a = 4287; +select * from t where a = 4288; +select * from t where a = 4289; +select * from t where a = 4290; +select * from t where a = 4291; +select * from t where a = 4292; +select * from t where a = 4293; +select * from t where a = 4294; +select * from t where a = 4295; +select * from t where a = 4296; +select * from t where a = 4297; +select * from t where a = 4298; +select * from t where a = 4299; +select * from t where a = 4300; +select * from t where a = 4301; +select * from t where a = 4302; +select * from t where a = 4303; +select * from t where a = 4304; +select * from t where a = 4305; +select * from t where a = 4306; +select * from t where a = 4307; +select * from t where a = 4308; +select * from t where a = 4309; +select * from t where a = 4310; +select * from t where a = 4311; +select * from t where a = 4312; +select * from t where a = 4313; +select * from t where a = 4314; +select * from t where a = 4315; +select * from t where a = 4316; +select * from t where a = 4317; +select * from t where a = 4318; +select * from t where a = 4319; +select * from t where a = 4320; +select * from t where a = 4321; +select * from t where a = 4322; +select * from t where a = 4323; +select * from t where a = 4324; +select * from t where a = 4325; +select * from t where a = 4326; +select * from t where a = 4327; +select * from t where a = 4328; +select * from t where a = 4329; +select * from t where a = 4330; +select * from t where a = 4331; +select * from t where a = 4332; +select * from t where a = 4333; +select * from t where a = 4334; +select * from t where a = 4335; +select * from t where a = 4336; +select * from t where a = 4337; +select * from t where a = 4338; +select * from t where a = 4339; +select * from t where a = 4340; +select * from t where a = 4341; +select * from t where a = 4342; +select * from t where a = 4343; +select * from t where a = 4344; +select * from t where a = 4345; +select * from t where a = 4346; +select * from t where a = 4347; +select * from t where a = 4348; +select * from t where a = 4349; +select * from t where a = 4350; +select * from t where a = 4351; +select * from t where a = 4352; +select * from t where a = 4353; +select * from t where a = 4354; +select * from t where a = 4355; +select * from t where a = 4356; +select * from t where a = 4357; +select * from t where a = 4358; +select * from t where a = 4359; +select * from t where a = 4360; +select * from t where a = 4361; +select * from t where a = 4362; +select * from t where a = 4363; +select * from t where a = 4364; +select * from t where a = 4365; +select * from t where a = 4366; +select * from t where a = 4367; +select * from t where a = 4368; +select * from t where a = 4369; +select * from t where a = 4370; +select * from t where a = 4371; +select * from t where a = 4372; +select * from t where a = 4373; +select * from t where a = 4374; +select * from t where a = 4375; +select * from t where a = 4376; +select * from t where a = 4377; +select * from t where a = 4378; +select * from t where a = 4379; +select * from t where a = 4380; +select * from t where a = 4381; +select * from t where a = 4382; +select * from t where a = 4383; +select * from t where a = 4384; +select * from t where a = 4385; +select * from t where a = 4386; +select * from t where a = 4387; +select * from t where a = 4388; +select * from t where a = 4389; +select * from t where a = 4390; +select * from t where a = 4391; +select * from t where a = 4392; +select * from t where a = 4393; +select * from t where a = 4394; +select * from t where a = 4395; +select * from t where a = 4396; +select * from t where a = 4397; +select * from t where a = 4398; +select * from t where a = 4399; +select * from t where a = 4400; +select * from t where a = 4401; +select * from t where a = 4402; +select * from t where a = 4403; +select * from t where a = 4404; +select * from t where a = 4405; +select * from t where a = 4406; +select * from t where a = 4407; +select * from t where a = 4408; +select * from t where a = 4409; +select * from t where a = 4410; +select * from t where a = 4411; +select * from t where a = 4412; +select * from t where a = 4413; +select * from t where a = 4414; +select * from t where a = 4415; +select * from t where a = 4416; +select * from t where a = 4417; +select * from t where a = 4418; +select * from t where a = 4419; +select * from t where a = 4420; +select * from t where a = 4421; +select * from t where a = 4422; +select * from t where a = 4423; +select * from t where a = 4424; +select * from t where a = 4425; +select * from t where a = 4426; +select * from t where a = 4427; +select * from t where a = 4428; +select * from t where a = 4429; +select * from t where a = 4430; +select * from t where a = 4431; +select * from t where a = 4432; +select * from t where a = 4433; +select * from t where a = 4434; +select * from t where a = 4435; +select * from t where a = 4436; +select * from t where a = 4437; +select * from t where a = 4438; +select * from t where a = 4439; +select * from t where a = 4440; +select * from t where a = 4441; +select * from t where a = 4442; +select * from t where a = 4443; +select * from t where a = 4444; +select * from t where a = 4445; +select * from t where a = 4446; +select * from t where a = 4447; +select * from t where a = 4448; +select * from t where a = 4449; +select * from t where a = 4450; +select * from t where a = 4451; +select * from t where a = 4452; +select * from t where a = 4453; +select * from t where a = 4454; +select * from t where a = 4455; +select * from t where a = 4456; +select * from t where a = 4457; +select * from t where a = 4458; +select * from t where a = 4459; +select * from t where a = 4460; +select * from t where a = 4461; +select * from t where a = 4462; +select * from t where a = 4463; +select * from t where a = 4464; +select * from t where a = 4465; +select * from t where a = 4466; +select * from t where a = 4467; +select * from t where a = 4468; +select * from t where a = 4469; +select * from t where a = 4470; +select * from t where a = 4471; +select * from t where a = 4472; +select * from t where a = 4473; +select * from t where a = 4474; +select * from t where a = 4475; +select * from t where a = 4476; +select * from t where a = 4477; +select * from t where a = 4478; +select * from t where a = 4479; +select * from t where a = 4480; +select * from t where a = 4481; +select * from t where a = 4482; +select * from t where a = 4483; +select * from t where a = 4484; +select * from t where a = 4485; +select * from t where a = 4486; +select * from t where a = 4487; +select * from t where a = 4488; +select * from t where a = 4489; +select * from t where a = 4490; +select * from t where a = 4491; +select * from t where a = 4492; +select * from t where a = 4493; +select * from t where a = 4494; +select * from t where a = 4495; +select * from t where a = 4496; +select * from t where a = 4497; +select * from t where a = 4498; +select * from t where a = 4499; +select * from t where a = 4500; +select * from t where a = 4501; +select * from t where a = 4502; +select * from t where a = 4503; +select * from t where a = 4504; +select * from t where a = 4505; +select * from t where a = 4506; +select * from t where a = 4507; +select * from t where a = 4508; +select * from t where a = 4509; +select * from t where a = 4510; +select * from t where a = 4511; +select * from t where a = 4512; +select * from t where a = 4513; +select * from t where a = 4514; +select * from t where a = 4515; +select * from t where a = 4516; +select * from t where a = 4517; +select * from t where a = 4518; +select * from t where a = 4519; +select * from t where a = 4520; +select * from t where a = 4521; +select * from t where a = 4522; +select * from t where a = 4523; +select * from t where a = 4524; +select * from t where a = 4525; +select * from t where a = 4526; +select * from t where a = 4527; +select * from t where a = 4528; +select * from t where a = 4529; +select * from t where a = 4530; +select * from t where a = 4531; +select * from t where a = 4532; +select * from t where a = 4533; +select * from t where a = 4534; +select * from t where a = 4535; +select * from t where a = 4536; +select * from t where a = 4537; +select * from t where a = 4538; +select * from t where a = 4539; +select * from t where a = 4540; +select * from t where a = 4541; +select * from t where a = 4542; +select * from t where a = 4543; +select * from t where a = 4544; +select * from t where a = 4545; +select * from t where a = 4546; +select * from t where a = 4547; +select * from t where a = 4548; +select * from t where a = 4549; +select * from t where a = 4550; +select * from t where a = 4551; +select * from t where a = 4552; +select * from t where a = 4553; +select * from t where a = 4554; +select * from t where a = 4555; +select * from t where a = 4556; +select * from t where a = 4557; +select * from t where a = 4558; +select * from t where a = 4559; +select * from t where a = 4560; +select * from t where a = 4561; +select * from t where a = 4562; +select * from t where a = 4563; +select * from t where a = 4564; +select * from t where a = 4565; +select * from t where a = 4566; +select * from t where a = 4567; +select * from t where a = 4568; +select * from t where a = 4569; +select * from t where a = 4570; +select * from t where a = 4571; +select * from t where a = 4572; +select * from t where a = 4573; +select * from t where a = 4574; +select * from t where a = 4575; +select * from t where a = 4576; +select * from t where a = 4577; +select * from t where a = 4578; +select * from t where a = 4579; +select * from t where a = 4580; +select * from t where a = 4581; +select * from t where a = 4582; +select * from t where a = 4583; +select * from t where a = 4584; +select * from t where a = 4585; +select * from t where a = 4586; +select * from t where a = 4587; +select * from t where a = 4588; +select * from t where a = 4589; +select * from t where a = 4590; +select * from t where a = 4591; +select * from t where a = 4592; +select * from t where a = 4593; +select * from t where a = 4594; +select * from t where a = 4595; +select * from t where a = 4596; +select * from t where a = 4597; +select * from t where a = 4598; +select * from t where a = 4599; +select * from t where a = 4600; +select * from t where a = 4601; +select * from t where a = 4602; +select * from t where a = 4603; +select * from t where a = 4604; +select * from t where a = 4605; +select * from t where a = 4606; +select * from t where a = 4607; +select * from t where a = 4608; +select * from t where a = 4609; +select * from t where a = 4610; +select * from t where a = 4611; +select * from t where a = 4612; +select * from t where a = 4613; +select * from t where a = 4614; +select * from t where a = 4615; +select * from t where a = 4616; +select * from t where a = 4617; +select * from t where a = 4618; +select * from t where a = 4619; +select * from t where a = 4620; +select * from t where a = 4621; +select * from t where a = 4622; +select * from t where a = 4623; +select * from t where a = 4624; +select * from t where a = 4625; +select * from t where a = 4626; +select * from t where a = 4627; +select * from t where a = 4628; +select * from t where a = 4629; +select * from t where a = 4630; +select * from t where a = 4631; +select * from t where a = 4632; +select * from t where a = 4633; +select * from t where a = 4634; +select * from t where a = 4635; +select * from t where a = 4636; +select * from t where a = 4637; +select * from t where a = 4638; +select * from t where a = 4639; +select * from t where a = 4640; +select * from t where a = 4641; +select * from t where a = 4642; +select * from t where a = 4643; +select * from t where a = 4644; +select * from t where a = 4645; +select * from t where a = 4646; +select * from t where a = 4647; +select * from t where a = 4648; +select * from t where a = 4649; +select * from t where a = 4650; +select * from t where a = 4651; +select * from t where a = 4652; +select * from t where a = 4653; +select * from t where a = 4654; +select * from t where a = 4655; +select * from t where a = 4656; +select * from t where a = 4657; +select * from t where a = 4658; +select * from t where a = 4659; +select * from t where a = 4660; +select * from t where a = 4661; +select * from t where a = 4662; +select * from t where a = 4663; +select * from t where a = 4664; +select * from t where a = 4665; +select * from t where a = 4666; +select * from t where a = 4667; +select * from t where a = 4668; +select * from t where a = 4669; +select * from t where a = 4670; +select * from t where a = 4671; +select * from t where a = 4672; +select * from t where a = 4673; +select * from t where a = 4674; +select * from t where a = 4675; +select * from t where a = 4676; +select * from t where a = 4677; +select * from t where a = 4678; +select * from t where a = 4679; +select * from t where a = 4680; +select * from t where a = 4681; +select * from t where a = 4682; +select * from t where a = 4683; +select * from t where a = 4684; +select * from t where a = 4685; +select * from t where a = 4686; +select * from t where a = 4687; +select * from t where a = 4688; +select * from t where a = 4689; +select * from t where a = 4690; +select * from t where a = 4691; +select * from t where a = 4692; +select * from t where a = 4693; +select * from t where a = 4694; +select * from t where a = 4695; +select * from t where a = 4696; +select * from t where a = 4697; +select * from t where a = 4698; +select * from t where a = 4699; +select * from t where a = 4700; +select * from t where a = 4701; +select * from t where a = 4702; +select * from t where a = 4703; +select * from t where a = 4704; +select * from t where a = 4705; +select * from t where a = 4706; +select * from t where a = 4707; +select * from t where a = 4708; +select * from t where a = 4709; +select * from t where a = 4710; +select * from t where a = 4711; +select * from t where a = 4712; +select * from t where a = 4713; +select * from t where a = 4714; +select * from t where a = 4715; +select * from t where a = 4716; +select * from t where a = 4717; +select * from t where a = 4718; +select * from t where a = 4719; +select * from t where a = 4720; +select * from t where a = 4721; +select * from t where a = 4722; +select * from t where a = 4723; +select * from t where a = 4724; +select * from t where a = 4725; +select * from t where a = 4726; +select * from t where a = 4727; +select * from t where a = 4728; +select * from t where a = 4729; +select * from t where a = 4730; +select * from t where a = 4731; +select * from t where a = 4732; +select * from t where a = 4733; +select * from t where a = 4734; +select * from t where a = 4735; +select * from t where a = 4736; +select * from t where a = 4737; +select * from t where a = 4738; +select * from t where a = 4739; +select * from t where a = 4740; +select * from t where a = 4741; +select * from t where a = 4742; +select * from t where a = 4743; +select * from t where a = 4744; +select * from t where a = 4745; +select * from t where a = 4746; +select * from t where a = 4747; +select * from t where a = 4748; +select * from t where a = 4749; +select * from t where a = 4750; +select * from t where a = 4751; +select * from t where a = 4752; +select * from t where a = 4753; +select * from t where a = 4754; +select * from t where a = 4755; +select * from t where a = 4756; +select * from t where a = 4757; +select * from t where a = 4758; +select * from t where a = 4759; +select * from t where a = 4760; +select * from t where a = 4761; +select * from t where a = 4762; +select * from t where a = 4763; +select * from t where a = 4764; +select * from t where a = 4765; +select * from t where a = 4766; +select * from t where a = 4767; +select * from t where a = 4768; +select * from t where a = 4769; +select * from t where a = 4770; +select * from t where a = 4771; +select * from t where a = 4772; +select * from t where a = 4773; +select * from t where a = 4774; +select * from t where a = 4775; +select * from t where a = 4776; +select * from t where a = 4777; +select * from t where a = 4778; +select * from t where a = 4779; +select * from t where a = 4780; +select * from t where a = 4781; +select * from t where a = 4782; +select * from t where a = 4783; +select * from t where a = 4784; +select * from t where a = 4785; +select * from t where a = 4786; +select * from t where a = 4787; +select * from t where a = 4788; +select * from t where a = 4789; +select * from t where a = 4790; +select * from t where a = 4791; +select * from t where a = 4792; +select * from t where a = 4793; +select * from t where a = 4794; +select * from t where a = 4795; +select * from t where a = 4796; +select * from t where a = 4797; +select * from t where a = 4798; +select * from t where a = 4799; +select * from t where a = 4800; +select * from t where a = 4801; +select * from t where a = 4802; +select * from t where a = 4803; +select * from t where a = 4804; +select * from t where a = 4805; +select * from t where a = 4806; +select * from t where a = 4807; +select * from t where a = 4808; +select * from t where a = 4809; +select * from t where a = 4810; +select * from t where a = 4811; +select * from t where a = 4812; +select * from t where a = 4813; +select * from t where a = 4814; +select * from t where a = 4815; +select * from t where a = 4816; +select * from t where a = 4817; +select * from t where a = 4818; +select * from t where a = 4819; +select * from t where a = 4820; +select * from t where a = 4821; +select * from t where a = 4822; +select * from t where a = 4823; +select * from t where a = 4824; +select * from t where a = 4825; +select * from t where a = 4826; +select * from t where a = 4827; +select * from t where a = 4828; +select * from t where a = 4829; +select * from t where a = 4830; +select * from t where a = 4831; +select * from t where a = 4832; +select * from t where a = 4833; +select * from t where a = 4834; +select * from t where a = 4835; +select * from t where a = 4836; +select * from t where a = 4837; +select * from t where a = 4838; +select * from t where a = 4839; +select * from t where a = 4840; +select * from t where a = 4841; +select * from t where a = 4842; +select * from t where a = 4843; +select * from t where a = 4844; +select * from t where a = 4845; +select * from t where a = 4846; +select * from t where a = 4847; +select * from t where a = 4848; +select * from t where a = 4849; +select * from t where a = 4850; +select * from t where a = 4851; +select * from t where a = 4852; +select * from t where a = 4853; +select * from t where a = 4854; +select * from t where a = 4855; +select * from t where a = 4856; +select * from t where a = 4857; +select * from t where a = 4858; +select * from t where a = 4859; +select * from t where a = 4860; +select * from t where a = 4861; +select * from t where a = 4862; +select * from t where a = 4863; +select * from t where a = 4864; +select * from t where a = 4865; +select * from t where a = 4866; +select * from t where a = 4867; +select * from t where a = 4868; +select * from t where a = 4869; +select * from t where a = 4870; +select * from t where a = 4871; +select * from t where a = 4872; +select * from t where a = 4873; +select * from t where a = 4874; +select * from t where a = 4875; +select * from t where a = 4876; +select * from t where a = 4877; +select * from t where a = 4878; +select * from t where a = 4879; +select * from t where a = 4880; +select * from t where a = 4881; +select * from t where a = 4882; +select * from t where a = 4883; +select * from t where a = 4884; +select * from t where a = 4885; +select * from t where a = 4886; +select * from t where a = 4887; +select * from t where a = 4888; +select * from t where a = 4889; +select * from t where a = 4890; +select * from t where a = 4891; +select * from t where a = 4892; +select * from t where a = 4893; +select * from t where a = 4894; +select * from t where a = 4895; +select * from t where a = 4896; +select * from t where a = 4897; +select * from t where a = 4898; +select * from t where a = 4899; +select * from t where a = 4900; +select * from t where a = 4901; +select * from t where a = 4902; +select * from t where a = 4903; +select * from t where a = 4904; +select * from t where a = 4905; +select * from t where a = 4906; +select * from t where a = 4907; +select * from t where a = 4908; +select * from t where a = 4909; +select * from t where a = 4910; +select * from t where a = 4911; +select * from t where a = 4912; +select * from t where a = 4913; +select * from t where a = 4914; +select * from t where a = 4915; +select * from t where a = 4916; +select * from t where a = 4917; +select * from t where a = 4918; +select * from t where a = 4919; +select * from t where a = 4920; +select * from t where a = 4921; +select * from t where a = 4922; +select * from t where a = 4923; +select * from t where a = 4924; +select * from t where a = 4925; +select * from t where a = 4926; +select * from t where a = 4927; +select * from t where a = 4928; +select * from t where a = 4929; +select * from t where a = 4930; +select * from t where a = 4931; +select * from t where a = 4932; +select * from t where a = 4933; +select * from t where a = 4934; +select * from t where a = 4935; +select * from t where a = 4936; +select * from t where a = 4937; +select * from t where a = 4938; +select * from t where a = 4939; +select * from t where a = 4940; +select * from t where a = 4941; +select * from t where a = 4942; +select * from t where a = 4943; +select * from t where a = 4944; +select * from t where a = 4945; +select * from t where a = 4946; +select * from t where a = 4947; +select * from t where a = 4948; +select * from t where a = 4949; +select * from t where a = 4950; +select * from t where a = 4951; +select * from t where a = 4952; +select * from t where a = 4953; +select * from t where a = 4954; +select * from t where a = 4955; +select * from t where a = 4956; +select * from t where a = 4957; +select * from t where a = 4958; +select * from t where a = 4959; +select * from t where a = 4960; +select * from t where a = 4961; +select * from t where a = 4962; +select * from t where a = 4963; +select * from t where a = 4964; +select * from t where a = 4965; +select * from t where a = 4966; +select * from t where a = 4967; +select * from t where a = 4968; +select * from t where a = 4969; +select * from t where a = 4970; +select * from t where a = 4971; +select * from t where a = 4972; +select * from t where a = 4973; +select * from t where a = 4974; +select * from t where a = 4975; +select * from t where a = 4976; +select * from t where a = 4977; +select * from t where a = 4978; +select * from t where a = 4979; +select * from t where a = 4980; +select * from t where a = 4981; +select * from t where a = 4982; +select * from t where a = 4983; +select * from t where a = 4984; +select * from t where a = 4985; +select * from t where a = 4986; +select * from t where a = 4987; +select * from t where a = 4988; +select * from t where a = 4989; +select * from t where a = 4990; +select * from t where a = 4991; +select * from t where a = 4992; +select * from t where a = 4993; +select * from t where a = 4994; +select * from t where a = 4995; +select * from t where a = 4996; +select * from t where a = 4997; + +'SELECT*FROMTWHEREA='||ROWNUM||';' +-------------------------------------------------------------------------------------------------------- +select * from t where a = 4998; +select * from t where a = 4999; +select * from t where a = 5000; +select * from t where a = 5001; +select * from t where a = 5002; +select * from t where a = 5003; +select * from t where a = 5004; +select * from t where a = 5005; +select * from t where a = 5006; +select * from t where a = 5007; +select * from t where a = 5008; +select * from t where a = 5009; +select * from t where a = 5010; +select * from t where a = 5011; +select * from t where a = 5012; +select * from t where a = 5013; +select * from t where a = 5014; +select * from t where a = 5015; +select * from t where a = 5016; +select * from t where a = 5017; +select * from t where a = 5018; +select * from t where a = 5019; +select * from t where a = 5020; +select * from t where a = 5021; +select * from t where a = 5022; +select * from t where a = 5023; +select * from t where a = 5024; +select * from t where a = 5025; +select * from t where a = 5026; +select * from t where a = 5027; +select * from t where a = 5028; +select * from t where a = 5029; +select * from t where a = 5030; +select * from t where a = 5031; +select * from t where a = 5032; +select * from t where a = 5033; +select * from t where a = 5034; +select * from t where a = 5035; +select * from t where a = 5036; +select * from t where a = 5037; +select * from t where a = 5038; +select * from t where a = 5039; +select * from t where a = 5040; +select * from t where a = 5041; +select * from t where a = 5042; +select * from t where a = 5043; +select * from t where a = 5044; +select * from t where a = 5045; +select * from t where a = 5046; +select * from t where a = 5047; +select * from t where a = 5048; +select * from t where a = 5049; +select * from t where a = 5050; +select * from t where a = 5051; +select * from t where a = 5052; +select * from t where a = 5053; +select * from t where a = 5054; +select * from t where a = 5055; +select * from t where a = 5056; +select * from t where a = 5057; +select * from t where a = 5058; +select * from t where a = 5059; +select * from t where a = 5060; +select * from t where a = 5061; +select * from t where a = 5062; +select * from t where a = 5063; +select * from t where a = 5064; +select * from t where a = 5065; +select * from t where a = 5066; +select * from t where a = 5067; +select * from t where a = 5068; +select * from t where a = 5069; +select * from t where a = 5070; +select * from t where a = 5071; +select * from t where a = 5072; +select * from t where a = 5073; +select * from t where a = 5074; +select * from t where a = 5075; +select * from t where a = 5076; +select * from t where a = 5077; +select * from t where a = 5078; +select * from t where a = 5079; +select * from t where a = 5080; +select * from t where a = 5081; +select * from t where a = 5082; +select * from t where a = 5083; +select * from t where a = 5084; +select * from t where a = 5085; +select * from t where a = 5086; +select * from t where a = 5087; +select * from t where a = 5088; +select * from t where a = 5089; +select * from t where a = 5090; +select * from t where a = 5091; +select * from t where a = 5092; +select * from t where a = 5093; +select * from t where a = 5094; +select * from t where a = 5095; +select * from t where a = 5096; +select * from t where a = 5097; +select * from t where a = 5098; +select * from t where a = 5099; +select * from t where a = 5100; +select * from t where a = 5101; +select * from t where a = 5102; +select * from t where a = 5103; +select * from t where a = 5104; +select * from t where a = 5105; +select * from t where a = 5106; +select * from t where a = 5107; +select * from t where a = 5108; +select * from t where a = 5109; +select * from t where a = 5110; +select * from t where a = 5111; +select * from t where a = 5112; +select * from t where a = 5113; +select * from t where a = 5114; +select * from t where a = 5115; +select * from t where a = 5116; +select * from t where a = 5117; +select * from t where a = 5118; +select * from t where a = 5119; +select * from t where a = 5120; +select * from t where a = 5121; +select * from t where a = 5122; +select * from t where a = 5123; +select * from t where a = 5124; +select * from t where a = 5125; +select * from t where a = 5126; +select * from t where a = 5127; +select * from t where a = 5128; +select * from t where a = 5129; +select * from t where a = 5130; +select * from t where a = 5131; +select * from t where a = 5132; +select * from t where a = 5133; +select * from t where a = 5134; +select * from t where a = 5135; +select * from t where a = 5136; +select * from t where a = 5137; +select * from t where a = 5138; +select * from t where a = 5139; +select * from t where a = 5140; +select * from t where a = 5141; +select * from t where a = 5142; +select * from t where a = 5143; +select * from t where a = 5144; +select * from t where a = 5145; +select * from t where a = 5146; +select * from t where a = 5147; +select * from t where a = 5148; +select * from t where a = 5149; +select * from t where a = 5150; +select * from t where a = 5151; +select * from t where a = 5152; +select * from t where a = 5153; +select * from t where a = 5154; +select * from t where a = 5155; +select * from t where a = 5156; +select * from t where a = 5157; +select * from t where a = 5158; +select * from t where a = 5159; +select * from t where a = 5160; +select * from t where a = 5161; +select * from t where a = 5162; +select * from t where a = 5163; +select * from t where a = 5164; +select * from t where a = 5165; +select * from t where a = 5166; +select * from t where a = 5167; +select * from t where a = 5168; +select * from t where a = 5169; +select * from t where a = 5170; +select * from t where a = 5171; +select * from t where a = 5172; +select * from t where a = 5173; +select * from t where a = 5174; +select * from t where a = 5175; +select * from t where a = 5176; +select * from t where a = 5177; +select * from t where a = 5178; +select * from t where a = 5179; +select * from t where a = 5180; +select * from t where a = 5181; +select * from t where a = 5182; +select * from t where a = 5183; +select * from t where a = 5184; +select * from t where a = 5185; +select * from t where a = 5186; +select * from t where a = 5187; +select * from t where a = 5188; +select * from t where a = 5189; +select * from t where a = 5190; +select * from t where a = 5191; +select * from t where a = 5192; +select * from t where a = 5193; +select * from t where a = 5194; +select * from t where a = 5195; +select * from t where a = 5196; +select * from t where a = 5197; +select * from t where a = 5198; +select * from t where a = 5199; +select * from t where a = 5200; +select * from t where a = 5201; +select * from t where a = 5202; +select * from t where a = 5203; +select * from t where a = 5204; +select * from t where a = 5205; +select * from t where a = 5206; +select * from t where a = 5207; +select * from t where a = 5208; +select * from t where a = 5209; +select * from t where a = 5210; +select * from t where a = 5211; +select * from t where a = 5212; +select * from t where a = 5213; +select * from t where a = 5214; +select * from t where a = 5215; +select * from t where a = 5216; +select * from t where a = 5217; +select * from t where a = 5218; +select * from t where a = 5219; +select * from t where a = 5220; +select * from t where a = 5221; +select * from t where a = 5222; +select * from t where a = 5223; +select * from t where a = 5224; +select * from t where a = 5225; +select * from t where a = 5226; +select * from t where a = 5227; +select * from t where a = 5228; +select * from t where a = 5229; +select * from t where a = 5230; +select * from t where a = 5231; +select * from t where a = 5232; +select * from t where a = 5233; +select * from t where a = 5234; +select * from t where a = 5235; +select * from t where a = 5236; +select * from t where a = 5237; +select * from t where a = 5238; +select * from t where a = 5239; +select * from t where a = 5240; +select * from t where a = 5241; +select * from t where a = 5242; +select * from t where a = 5243; +select * from t where a = 5244; +select * from t where a = 5245; +select * from t where a = 5246; +select * from t where a = 5247; +select * from t where a = 5248; +select * from t where a = 5249; +select * from t where a = 5250; +select * from t where a = 5251; +select * from t where a = 5252; +select * from t where a = 5253; +select * from t where a = 5254; +select * from t where a = 5255; +select * from t where a = 5256; +select * from t where a = 5257; +select * from t where a = 5258; +select * from t where a = 5259; +select * from t where a = 5260; +select * from t where a = 5261; +select * from t where a = 5262; +select * from t where a = 5263; +select * from t where a = 5264; +select * from t where a = 5265; +select * from t where a = 5266; +select * from t where a = 5267; +select * from t where a = 5268; +select * from t where a = 5269; +select * from t where a = 5270; +select * from t where a = 5271; +select * from t where a = 5272; +select * from t where a = 5273; +select * from t where a = 5274; +select * from t where a = 5275; +select * from t where a = 5276; +select * from t where a = 5277; +select * from t where a = 5278; +select * from t where a = 5279; +select * from t where a = 5280; +select * from t where a = 5281; +select * from t where a = 5282; +select * from t where a = 5283; +select * from t where a = 5284; +select * from t where a = 5285; +select * from t where a = 5286; +select * from t where a = 5287; +select * from t where a = 5288; +select * from t where a = 5289; +select * from t where a = 5290; +select * from t where a = 5291; +select * from t where a = 5292; +select * from t where a = 5293; +select * from t where a = 5294; +select * from t where a = 5295; +select * from t where a = 5296; +select * from t where a = 5297; +select * from t where a = 5298; +select * from t where a = 5299; +select * from t where a = 5300; +select * from t where a = 5301; +select * from t where a = 5302; +select * from t where a = 5303; +select * from t where a = 5304; +select * from t where a = 5305; +select * from t where a = 5306; +select * from t where a = 5307; +select * from t where a = 5308; +select * from t where a = 5309; +select * from t where a = 5310; +select * from t where a = 5311; +select * from t where a = 5312; +select * from t where a = 5313; +select * from t where a = 5314; +select * from t where a = 5315; +select * from t where a = 5316; +select * from t where a = 5317; +select * from t where a = 5318; +select * from t where a = 5319; +select * from t where a = 5320; +select * from t where a = 5321; +select * from t where a = 5322; +select * from t where a = 5323; +select * from t where a = 5324; +select * from t where a = 5325; +select * from t where a = 5326; +select * from t where a = 5327; +select * from t where a = 5328; +select * from t where a = 5329; +select * from t where a = 5330; +select * from t where a = 5331; +select * from t where a = 5332; +select * from t where a = 5333; +select * from t where a = 5334; +select * from t where a = 5335; +select * from t where a = 5336; +select * from t where a = 5337; +select * from t where a = 5338; +select * from t where a = 5339; +select * from t where a = 5340; +select * from t where a = 5341; +select * from t where a = 5342; +select * from t where a = 5343; +select * from t where a = 5344; +select * from t where a = 5345; +select * from t where a = 5346; +select * from t where a = 5347; +select * from t where a = 5348; +select * from t where a = 5349; +select * from t where a = 5350; +select * from t where a = 5351; +select * from t where a = 5352; +select * from t where a = 5353; +select * from t where a = 5354; +select * from t where a = 5355; +select * from t where a = 5356; +select * from t where a = 5357; +select * from t where a = 5358; +select * from t where a = 5359; +select * from t where a = 5360; +select * from t where a = 5361; +select * from t where a = 5362; +select * from t where a = 5363; +select * from t where a = 5364; +select * from t where a = 5365; +select * from t where a = 5366; +select * from t where a = 5367; +select * from t where a = 5368; +select * from t where a = 5369; +select * from t where a = 5370; +select * from t where a = 5371; +select * from t where a = 5372; +select * from t where a = 5373; +select * from t where a = 5374; +select * from t where a = 5375; +select * from t where a = 5376; +select * from t where a = 5377; +select * from t where a = 5378; +select * from t where a = 5379; +select * from t where a = 5380; +select * from t where a = 5381; +select * from t where a = 5382; +select * from t where a = 5383; +select * from t where a = 5384; +select * from t where a = 5385; +select * from t where a = 5386; +select * from t where a = 5387; +select * from t where a = 5388; +select * from t where a = 5389; +select * from t where a = 5390; +select * from t where a = 5391; +select * from t where a = 5392; +select * from t where a = 5393; +select * from t where a = 5394; +select * from t where a = 5395; +select * from t where a = 5396; +select * from t where a = 5397; +select * from t where a = 5398; +select * from t where a = 5399; +select * from t where a = 5400; +select * from t where a = 5401; +select * from t where a = 5402; +select * from t where a = 5403; +select * from t where a = 5404; +select * from t where a = 5405; +select * from t where a = 5406; +select * from t where a = 5407; +select * from t where a = 5408; +select * from t where a = 5409; +select * from t where a = 5410; +select * from t where a = 5411; +select * from t where a = 5412; +select * from t where a = 5413; +select * from t where a = 5414; +select * from t where a = 5415; +select * from t where a = 5416; +select * from t where a = 5417; +select * from t where a = 5418; +select * from t where a = 5419; +select * from t where a = 5420; +select * from t where a = 5421; +select * from t where a = 5422; +select * from t where a = 5423; +select * from t where a = 5424; +select * from t where a = 5425; +select * from t where a = 5426; +select * from t where a = 5427; +select * from t where a = 5428; +select * from t where a = 5429; +select * from t where a = 5430; +select * from t where a = 5431; +select * from t where a = 5432; +select * from t where a = 5433; +select * from t where a = 5434; +select * from t where a = 5435; +select * from t where a = 5436; +select * from t where a = 5437; +select * from t where a = 5438; +select * from t where a = 5439; +select * from t where a = 5440; +select * from t where a = 5441; +select * from t where a = 5442; +select * from t where a = 5443; +select * from t where a = 5444; +select * from t where a = 5445; +select * from t where a = 5446; +select * from t where a = 5447; +select * from t where a = 5448; +select * from t where a = 5449; +select * from t where a = 5450; +select * from t where a = 5451; +select * from t where a = 5452; +select * from t where a = 5453; +select * from t where a = 5454; +select * from t where a = 5455; +select * from t where a = 5456; +select * from t where a = 5457; +select * from t where a = 5458; +select * from t where a = 5459; +select * from t where a = 5460; +select * from t where a = 5461; +select * from t where a = 5462; +select * from t where a = 5463; +select * from t where a = 5464; +select * from t where a = 5465; +select * from t where a = 5466; +select * from t where a = 5467; +select * from t where a = 5468; +select * from t where a = 5469; +select * from t where a = 5470; +select * from t where a = 5471; +select * from t where a = 5472; +select * from t where a = 5473; +select * from t where a = 5474; +select * from t where a = 5475; +select * from t where a = 5476; +select * from t where a = 5477; +select * from t where a = 5478; +select * from t where a = 5479; +select * from t where a = 5480; +select * from t where a = 5481; +select * from t where a = 5482; +select * from t where a = 5483; +select * from t where a = 5484; +select * from t where a = 5485; +select * from t where a = 5486; +select * from t where a = 5487; +select * from t where a = 5488; +select * from t where a = 5489; +select * from t where a = 5490; +select * from t where a = 5491; +select * from t where a = 5492; +select * from t where a = 5493; +select * from t where a = 5494; +select * from t where a = 5495; +select * from t where a = 5496; +select * from t where a = 5497; +select * from t where a = 5498; +select * from t where a = 5499; +select * from t where a = 5500; +select * from t where a = 5501; +select * from t where a = 5502; +select * from t where a = 5503; +select * from t where a = 5504; +select * from t where a = 5505; +select * from t where a = 5506; +select * from t where a = 5507; +select * from t where a = 5508; +select * from t where a = 5509; +select * from t where a = 5510; +select * from t where a = 5511; +select * from t where a = 5512; +select * from t where a = 5513; +select * from t where a = 5514; +select * from t where a = 5515; +select * from t where a = 5516; +select * from t where a = 5517; +select * from t where a = 5518; +select * from t where a = 5519; +select * from t where a = 5520; +select * from t where a = 5521; +select * from t where a = 5522; +select * from t where a = 5523; +select * from t where a = 5524; +select * from t where a = 5525; +select * from t where a = 5526; +select * from t where a = 5527; +select * from t where a = 5528; +select * from t where a = 5529; +select * from t where a = 5530; +select * from t where a = 5531; +select * from t where a = 5532; +select * from t where a = 5533; +select * from t where a = 5534; +select * from t where a = 5535; +select * from t where a = 5536; +select * from t where a = 5537; +select * from t where a = 5538; +select * from t where a = 5539; +select * from t where a = 5540; +select * from t where a = 5541; +select * from t where a = 5542; +select * from t where a = 5543; +select * from t where a = 5544; +select * from t where a = 5545; +select * from t where a = 5546; +select * from t where a = 5547; +select * from t where a = 5548; +select * from t where a = 5549; +select * from t where a = 5550; +select * from t where a = 5551; +select * from t where a = 5552; +select * from t where a = 5553; +select * from t where a = 5554; +select * from t where a = 5555; +select * from t where a = 5556; +select * from t where a = 5557; +select * from t where a = 5558; +select * from t where a = 5559; +select * from t where a = 5560; +select * from t where a = 5561; +select * from t where a = 5562; +select * from t where a = 5563; +select * from t where a = 5564; +select * from t where a = 5565; +select * from t where a = 5566; +select * from t where a = 5567; +select * from t where a = 5568; +select * from t where a = 5569; +select * from t where a = 5570; +select * from t where a = 5571; +select * from t where a = 5572; +select * from t where a = 5573; +select * from t where a = 5574; +select * from t where a = 5575; +select * from t where a = 5576; +select * from t where a = 5577; +select * from t where a = 5578; +select * from t where a = 5579; +select * from t where a = 5580; +select * from t where a = 5581; +select * from t where a = 5582; +select * from t where a = 5583; +select * from t where a = 5584; +select * from t where a = 5585; +select * from t where a = 5586; +select * from t where a = 5587; +select * from t where a = 5588; +select * from t where a = 5589; +select * from t where a = 5590; +select * from t where a = 5591; +select * from t where a = 5592; +select * from t where a = 5593; +select * from t where a = 5594; +select * from t where a = 5595; +select * from t where a = 5596; +select * from t where a = 5597; +select * from t where a = 5598; +select * from t where a = 5599; +select * from t where a = 5600; +select * from t where a = 5601; +select * from t where a = 5602; +select * from t where a = 5603; +select * from t where a = 5604; +select * from t where a = 5605; +select * from t where a = 5606; +select * from t where a = 5607; +select * from t where a = 5608; +select * from t where a = 5609; +select * from t where a = 5610; +select * from t where a = 5611; +select * from t where a = 5612; +select * from t where a = 5613; +select * from t where a = 5614; +select * from t where a = 5615; +select * from t where a = 5616; +select * from t where a = 5617; +select * from t where a = 5618; +select * from t where a = 5619; +select * from t where a = 5620; +select * from t where a = 5621; +select * from t where a = 5622; +select * from t where a = 5623; +select * from t where a = 5624; +select * from t where a = 5625; +select * from t where a = 5626; +select * from t where a = 5627; +select * from t where a = 5628; +select * from t where a = 5629; +select * from t where a = 5630; +select * from t where a = 5631; +select * from t where a = 5632; +select * from t where a = 5633; +select * from t where a = 5634; +select * from t where a = 5635; +select * from t where a = 5636; +select * from t where a = 5637; +select * from t where a = 5638; +select * from t where a = 5639; +select * from t where a = 5640; +select * from t where a = 5641; +select * from t where a = 5642; +select * from t where a = 5643; +select * from t where a = 5644; +select * from t where a = 5645; +select * from t where a = 5646; +select * from t where a = 5647; +select * from t where a = 5648; +select * from t where a = 5649; +select * from t where a = 5650; +select * from t where a = 5651; +select * from t where a = 5652; +select * from t where a = 5653; +select * from t where a = 5654; +select * from t where a = 5655; +select * from t where a = 5656; +select * from t where a = 5657; +select * from t where a = 5658; +select * from t where a = 5659; +select * from t where a = 5660; +select * from t where a = 5661; +select * from t where a = 5662; +select * from t where a = 5663; +select * from t where a = 5664; +select * from t where a = 5665; +select * from t where a = 5666; +select * from t where a = 5667; +select * from t where a = 5668; +select * from t where a = 5669; +select * from t where a = 5670; +select * from t where a = 5671; +select * from t where a = 5672; +select * from t where a = 5673; +select * from t where a = 5674; +select * from t where a = 5675; +select * from t where a = 5676; +select * from t where a = 5677; +select * from t where a = 5678; +select * from t where a = 5679; +select * from t where a = 5680; +select * from t where a = 5681; +select * from t where a = 5682; +select * from t where a = 5683; +select * from t where a = 5684; +select * from t where a = 5685; +select * from t where a = 5686; +select * from t where a = 5687; +select * from t where a = 5688; +select * from t where a = 5689; +select * from t where a = 5690; +select * from t where a = 5691; +select * from t where a = 5692; +select * from t where a = 5693; +select * from t where a = 5694; +select * from t where a = 5695; +select * from t where a = 5696; +select * from t where a = 5697; +select * from t where a = 5698; +select * from t where a = 5699; +select * from t where a = 5700; +select * from t where a = 5701; +select * from t where a = 5702; +select * from t where a = 5703; +select * from t where a = 5704; +select * from t where a = 5705; +select * from t where a = 5706; +select * from t where a = 5707; +select * from t where a = 5708; +select * from t where a = 5709; +select * from t where a = 5710; +select * from t where a = 5711; +select * from t where a = 5712; +select * from t where a = 5713; +select * from t where a = 5714; +select * from t where a = 5715; +select * from t where a = 5716; +select * from t where a = 5717; +select * from t where a = 5718; +select * from t where a = 5719; +select * from t where a = 5720; +select * from t where a = 5721; +select * from t where a = 5722; +select * from t where a = 5723; +select * from t where a = 5724; +select * from t where a = 5725; +select * from t where a = 5726; +select * from t where a = 5727; +select * from t where a = 5728; +select * from t where a = 5729; +select * from t where a = 5730; +select * from t where a = 5731; +select * from t where a = 5732; +select * from t where a = 5733; +select * from t where a = 5734; +select * from t where a = 5735; +select * from t where a = 5736; +select * from t where a = 5737; +select * from t where a = 5738; +select * from t where a = 5739; +select * from t where a = 5740; +select * from t where a = 5741; +select * from t where a = 5742; +select * from t where a = 5743; +select * from t where a = 5744; +select * from t where a = 5745; +select * from t where a = 5746; +select * from t where a = 5747; +select * from t where a = 5748; +select * from t where a = 5749; +select * from t where a = 5750; +select * from t where a = 5751; +select * from t where a = 5752; +select * from t where a = 5753; +select * from t where a = 5754; +select * from t where a = 5755; +select * from t where a = 5756; +select * from t where a = 5757; +select * from t where a = 5758; +select * from t where a = 5759; +select * from t where a = 5760; +select * from t where a = 5761; +select * from t where a = 5762; +select * from t where a = 5763; +select * from t where a = 5764; +select * from t where a = 5765; +select * from t where a = 5766; +select * from t where a = 5767; +select * from t where a = 5768; +select * from t where a = 5769; +select * from t where a = 5770; +select * from t where a = 5771; +select * from t where a = 5772; +select * from t where a = 5773; +select * from t where a = 5774; +select * from t where a = 5775; +select * from t where a = 5776; +select * from t where a = 5777; +select * from t where a = 5778; +select * from t where a = 5779; +select * from t where a = 5780; +select * from t where a = 5781; +select * from t where a = 5782; +select * from t where a = 5783; +select * from t where a = 5784; +select * from t where a = 5785; +select * from t where a = 5786; +select * from t where a = 5787; +select * from t where a = 5788; +select * from t where a = 5789; +select * from t where a = 5790; +select * from t where a = 5791; +select * from t where a = 5792; +select * from t where a = 5793; +select * from t where a = 5794; +select * from t where a = 5795; +select * from t where a = 5796; +select * from t where a = 5797; +select * from t where a = 5798; +select * from t where a = 5799; +select * from t where a = 5800; +select * from t where a = 5801; +select * from t where a = 5802; +select * from t where a = 5803; +select * from t where a = 5804; +select * from t where a = 5805; +select * from t where a = 5806; +select * from t where a = 5807; +select * from t where a = 5808; +select * from t where a = 5809; +select * from t where a = 5810; +select * from t where a = 5811; +select * from t where a = 5812; +select * from t where a = 5813; +select * from t where a = 5814; +select * from t where a = 5815; +select * from t where a = 5816; +select * from t where a = 5817; +select * from t where a = 5818; +select * from t where a = 5819; +select * from t where a = 5820; +select * from t where a = 5821; +select * from t where a = 5822; +select * from t where a = 5823; +select * from t where a = 5824; +select * from t where a = 5825; +select * from t where a = 5826; +select * from t where a = 5827; +select * from t where a = 5828; +select * from t where a = 5829; +select * from t where a = 5830; +select * from t where a = 5831; +select * from t where a = 5832; +select * from t where a = 5833; +select * from t where a = 5834; +select * from t where a = 5835; +select * from t where a = 5836; +select * from t where a = 5837; +select * from t where a = 5838; +select * from t where a = 5839; +select * from t where a = 5840; +select * from t where a = 5841; +select * from t where a = 5842; +select * from t where a = 5843; +select * from t where a = 5844; +select * from t where a = 5845; +select * from t where a = 5846; +select * from t where a = 5847; +select * from t where a = 5848; +select * from t where a = 5849; +select * from t where a = 5850; +select * from t where a = 5851; +select * from t where a = 5852; +select * from t where a = 5853; +select * from t where a = 5854; +select * from t where a = 5855; +select * from t where a = 5856; +select * from t where a = 5857; +select * from t where a = 5858; +select * from t where a = 5859; +select * from t where a = 5860; +select * from t where a = 5861; +select * from t where a = 5862; +select * from t where a = 5863; +select * from t where a = 5864; +select * from t where a = 5865; +select * from t where a = 5866; +select * from t where a = 5867; +select * from t where a = 5868; +select * from t where a = 5869; +select * from t where a = 5870; +select * from t where a = 5871; +select * from t where a = 5872; +select * from t where a = 5873; +select * from t where a = 5874; +select * from t where a = 5875; +select * from t where a = 5876; +select * from t where a = 5877; +select * from t where a = 5878; +select * from t where a = 5879; +select * from t where a = 5880; +select * from t where a = 5881; +select * from t where a = 5882; +select * from t where a = 5883; +select * from t where a = 5884; +select * from t where a = 5885; +select * from t where a = 5886; +select * from t where a = 5887; +select * from t where a = 5888; +select * from t where a = 5889; +select * from t where a = 5890; +select * from t where a = 5891; +select * from t where a = 5892; +select * from t where a = 5893; +select * from t where a = 5894; +select * from t where a = 5895; +select * from t where a = 5896; +select * from t where a = 5897; +select * from t where a = 5898; +select * from t where a = 5899; +select * from t where a = 5900; +select * from t where a = 5901; +select * from t where a = 5902; +select * from t where a = 5903; +select * from t where a = 5904; +select * from t where a = 5905; +select * from t where a = 5906; +select * from t where a = 5907; +select * from t where a = 5908; +select * from t where a = 5909; +select * from t where a = 5910; +select * from t where a = 5911; +select * from t where a = 5912; +select * from t where a = 5913; +select * from t where a = 5914; +select * from t where a = 5915; +select * from t where a = 5916; +select * from t where a = 5917; +select * from t where a = 5918; +select * from t where a = 5919; +select * from t where a = 5920; +select * from t where a = 5921; +select * from t where a = 5922; +select * from t where a = 5923; +select * from t where a = 5924; +select * from t where a = 5925; +select * from t where a = 5926; +select * from t where a = 5927; +select * from t where a = 5928; +select * from t where a = 5929; +select * from t where a = 5930; +select * from t where a = 5931; +select * from t where a = 5932; +select * from t where a = 5933; +select * from t where a = 5934; +select * from t where a = 5935; +select * from t where a = 5936; +select * from t where a = 5937; +select * from t where a = 5938; +select * from t where a = 5939; +select * from t where a = 5940; +select * from t where a = 5941; +select * from t where a = 5942; +select * from t where a = 5943; +select * from t where a = 5944; +select * from t where a = 5945; +select * from t where a = 5946; +select * from t where a = 5947; +select * from t where a = 5948; +select * from t where a = 5949; +select * from t where a = 5950; +select * from t where a = 5951; +select * from t where a = 5952; +select * from t where a = 5953; +select * from t where a = 5954; +select * from t where a = 5955; +select * from t where a = 5956; +select * from t where a = 5957; +select * from t where a = 5958; +select * from t where a = 5959; +select * from t where a = 5960; +select * from t where a = 5961; +select * from t where a = 5962; +select * from t where a = 5963; +select * from t where a = 5964; +select * from t where a = 5965; +select * from t where a = 5966; +select * from t where a = 5967; +select * from t where a = 5968; +select * from t where a = 5969; +select * from t where a = 5970; +select * from t where a = 5971; +select * from t where a = 5972; +select * from t where a = 5973; +select * from t where a = 5974; +select * from t where a = 5975; +select * from t where a = 5976; +select * from t where a = 5977; +select * from t where a = 5978; +select * from t where a = 5979; +select * from t where a = 5980; +select * from t where a = 5981; +select * from t where a = 5982; +select * from t where a = 5983; +select * from t where a = 5984; +select * from t where a = 5985; +select * from t where a = 5986; +select * from t where a = 5987; +select * from t where a = 5988; +select * from t where a = 5989; +select * from t where a = 5990; +select * from t where a = 5991; +select * from t where a = 5992; +select * from t where a = 5993; +select * from t where a = 5994; +select * from t where a = 5995; +select * from t where a = 5996; +select * from t where a = 5997; +select * from t where a = 5998; +select * from t where a = 5999; +select * from t where a = 6000; +select * from t where a = 6001; +select * from t where a = 6002; +select * from t where a = 6003; +select * from t where a = 6004; +select * from t where a = 6005; +select * from t where a = 6006; +select * from t where a = 6007; +select * from t where a = 6008; +select * from t where a = 6009; +select * from t where a = 6010; +select * from t where a = 6011; +select * from t where a = 6012; +select * from t where a = 6013; +select * from t where a = 6014; +select * from t where a = 6015; +select * from t where a = 6016; +select * from t where a = 6017; +select * from t where a = 6018; +select * from t where a = 6019; +select * from t where a = 6020; +select * from t where a = 6021; +select * from t where a = 6022; +select * from t where a = 6023; +select * from t where a = 6024; +select * from t where a = 6025; +select * from t where a = 6026; +select * from t where a = 6027; +select * from t where a = 6028; +select * from t where a = 6029; +select * from t where a = 6030; +select * from t where a = 6031; +select * from t where a = 6032; +select * from t where a = 6033; +select * from t where a = 6034; +select * from t where a = 6035; +select * from t where a = 6036; +select * from t where a = 6037; +select * from t where a = 6038; +select * from t where a = 6039; +select * from t where a = 6040; +select * from t where a = 6041; +select * from t where a = 6042; +select * from t where a = 6043; +select * from t where a = 6044; +select * from t where a = 6045; +select * from t where a = 6046; +select * from t where a = 6047; +select * from t where a = 6048; +select * from t where a = 6049; +select * from t where a = 6050; +select * from t where a = 6051; +select * from t where a = 6052; +select * from t where a = 6053; +select * from t where a = 6054; +select * from t where a = 6055; +select * from t where a = 6056; +select * from t where a = 6057; +select * from t where a = 6058; +select * from t where a = 6059; +select * from t where a = 6060; +select * from t where a = 6061; +select * from t where a = 6062; +select * from t where a = 6063; +select * from t where a = 6064; +select * from t where a = 6065; +select * from t where a = 6066; +select * from t where a = 6067; +select * from t where a = 6068; +select * from t where a = 6069; +select * from t where a = 6070; +select * from t where a = 6071; +select * from t where a = 6072; +select * from t where a = 6073; +select * from t where a = 6074; +select * from t where a = 6075; +select * from t where a = 6076; +select * from t where a = 6077; +select * from t where a = 6078; +select * from t where a = 6079; +select * from t where a = 6080; +select * from t where a = 6081; +select * from t where a = 6082; +select * from t where a = 6083; +select * from t where a = 6084; +select * from t where a = 6085; +select * from t where a = 6086; +select * from t where a = 6087; +select * from t where a = 6088; +select * from t where a = 6089; +select * from t where a = 6090; +select * from t where a = 6091; +select * from t where a = 6092; +select * from t where a = 6093; +select * from t where a = 6094; +select * from t where a = 6095; +select * from t where a = 6096; +select * from t where a = 6097; +select * from t where a = 6098; +select * from t where a = 6099; +select * from t where a = 6100; +select * from t where a = 6101; +select * from t where a = 6102; +select * from t where a = 6103; +select * from t where a = 6104; +select * from t where a = 6105; +select * from t where a = 6106; +select * from t where a = 6107; +select * from t where a = 6108; +select * from t where a = 6109; +select * from t where a = 6110; +select * from t where a = 6111; +select * from t where a = 6112; +select * from t where a = 6113; +select * from t where a = 6114; +select * from t where a = 6115; +select * from t where a = 6116; +select * from t where a = 6117; +select * from t where a = 6118; +select * from t where a = 6119; +select * from t where a = 6120; +select * from t where a = 6121; +select * from t where a = 6122; +select * from t where a = 6123; +select * from t where a = 6124; +select * from t where a = 6125; +select * from t where a = 6126; +select * from t where a = 6127; +select * from t where a = 6128; +select * from t where a = 6129; +select * from t where a = 6130; +select * from t where a = 6131; +select * from t where a = 6132; +select * from t where a = 6133; +select * from t where a = 6134; +select * from t where a = 6135; +select * from t where a = 6136; +select * from t where a = 6137; +select * from t where a = 6138; +select * from t where a = 6139; +select * from t where a = 6140; +select * from t where a = 6141; +select * from t where a = 6142; +select * from t where a = 6143; +select * from t where a = 6144; +select * from t where a = 6145; +select * from t where a = 6146; +select * from t where a = 6147; +select * from t where a = 6148; +select * from t where a = 6149; +select * from t where a = 6150; +select * from t where a = 6151; +select * from t where a = 6152; +select * from t where a = 6153; +select * from t where a = 6154; +select * from t where a = 6155; +select * from t where a = 6156; +select * from t where a = 6157; +select * from t where a = 6158; +select * from t where a = 6159; +select * from t where a = 6160; +select * from t where a = 6161; +select * from t where a = 6162; +select * from t where a = 6163; +select * from t where a = 6164; +select * from t where a = 6165; +select * from t where a = 6166; +select * from t where a = 6167; +select * from t where a = 6168; +select * from t where a = 6169; +select * from t where a = 6170; +select * from t where a = 6171; +select * from t where a = 6172; +select * from t where a = 6173; +select * from t where a = 6174; +select * from t where a = 6175; +select * from t where a = 6176; +select * from t where a = 6177; +select * from t where a = 6178; +select * from t where a = 6179; +select * from t where a = 6180; +select * from t where a = 6181; +select * from t where a = 6182; +select * from t where a = 6183; +select * from t where a = 6184; +select * from t where a = 6185; +select * from t where a = 6186; +select * from t where a = 6187; +select * from t where a = 6188; +select * from t where a = 6189; +select * from t where a = 6190; +select * from t where a = 6191; +select * from t where a = 6192; +select * from t where a = 6193; +select * from t where a = 6194; +select * from t where a = 6195; +select * from t where a = 6196; +select * from t where a = 6197; +select * from t where a = 6198; +select * from t where a = 6199; +select * from t where a = 6200; +select * from t where a = 6201; +select * from t where a = 6202; +select * from t where a = 6203; +select * from t where a = 6204; +select * from t where a = 6205; +select * from t where a = 6206; +select * from t where a = 6207; +select * from t where a = 6208; +select * from t where a = 6209; +select * from t where a = 6210; +select * from t where a = 6211; +select * from t where a = 6212; +select * from t where a = 6213; +select * from t where a = 6214; +select * from t where a = 6215; +select * from t where a = 6216; +select * from t where a = 6217; +select * from t where a = 6218; +select * from t where a = 6219; +select * from t where a = 6220; +select * from t where a = 6221; +select * from t where a = 6222; +select * from t where a = 6223; +select * from t where a = 6224; +select * from t where a = 6225; +select * from t where a = 6226; +select * from t where a = 6227; +select * from t where a = 6228; +select * from t where a = 6229; +select * from t where a = 6230; +select * from t where a = 6231; +select * from t where a = 6232; +select * from t where a = 6233; +select * from t where a = 6234; +select * from t where a = 6235; +select * from t where a = 6236; +select * from t where a = 6237; +select * from t where a = 6238; +select * from t where a = 6239; +select * from t where a = 6240; +select * from t where a = 6241; +select * from t where a = 6242; +select * from t where a = 6243; +select * from t where a = 6244; +select * from t where a = 6245; +select * from t where a = 6246; +select * from t where a = 6247; +select * from t where a = 6248; +select * from t where a = 6249; +select * from t where a = 6250; +select * from t where a = 6251; +select * from t where a = 6252; +select * from t where a = 6253; +select * from t where a = 6254; +select * from t where a = 6255; +select * from t where a = 6256; +select * from t where a = 6257; +select * from t where a = 6258; +select * from t where a = 6259; +select * from t where a = 6260; +select * from t where a = 6261; +select * from t where a = 6262; +select * from t where a = 6263; +select * from t where a = 6264; +select * from t where a = 6265; +select * from t where a = 6266; +select * from t where a = 6267; +select * from t where a = 6268; +select * from t where a = 6269; +select * from t where a = 6270; +select * from t where a = 6271; +select * from t where a = 6272; +select * from t where a = 6273; +select * from t where a = 6274; +select * from t where a = 6275; +select * from t where a = 6276; +select * from t where a = 6277; +select * from t where a = 6278; +select * from t where a = 6279; +select * from t where a = 6280; +select * from t where a = 6281; +select * from t where a = 6282; +select * from t where a = 6283; +select * from t where a = 6284; +select * from t where a = 6285; +select * from t where a = 6286; +select * from t where a = 6287; +select * from t where a = 6288; +select * from t where a = 6289; +select * from t where a = 6290; +select * from t where a = 6291; +select * from t where a = 6292; +select * from t where a = 6293; +select * from t where a = 6294; +select * from t where a = 6295; +select * from t where a = 6296; +select * from t where a = 6297; +select * from t where a = 6298; +select * from t where a = 6299; +select * from t where a = 6300; +select * from t where a = 6301; +select * from t where a = 6302; +select * from t where a = 6303; +select * from t where a = 6304; +select * from t where a = 6305; +select * from t where a = 6306; +select * from t where a = 6307; +select * from t where a = 6308; +select * from t where a = 6309; +select * from t where a = 6310; +select * from t where a = 6311; +select * from t where a = 6312; +select * from t where a = 6313; +select * from t where a = 6314; +select * from t where a = 6315; +select * from t where a = 6316; +select * from t where a = 6317; +select * from t where a = 6318; +select * from t where a = 6319; +select * from t where a = 6320; +select * from t where a = 6321; +select * from t where a = 6322; +select * from t where a = 6323; +select * from t where a = 6324; +select * from t where a = 6325; +select * from t where a = 6326; +select * from t where a = 6327; +select * from t where a = 6328; +select * from t where a = 6329; +select * from t where a = 6330; +select * from t where a = 6331; +select * from t where a = 6332; +select * from t where a = 6333; +select * from t where a = 6334; +select * from t where a = 6335; +select * from t where a = 6336; +select * from t where a = 6337; +select * from t where a = 6338; +select * from t where a = 6339; +select * from t where a = 6340; +select * from t where a = 6341; +select * from t where a = 6342; +select * from t where a = 6343; +select * from t where a = 6344; +select * from t where a = 6345; +select * from t where a = 6346; +select * from t where a = 6347; +select * from t where a = 6348; +select * from t where a = 6349; +select * from t where a = 6350; +select * from t where a = 6351; +select * from t where a = 6352; +select * from t where a = 6353; +select * from t where a = 6354; +select * from t where a = 6355; +select * from t where a = 6356; +select * from t where a = 6357; +select * from t where a = 6358; +select * from t where a = 6359; +select * from t where a = 6360; +select * from t where a = 6361; +select * from t where a = 6362; +select * from t where a = 6363; +select * from t where a = 6364; +select * from t where a = 6365; +select * from t where a = 6366; +select * from t where a = 6367; +select * from t where a = 6368; +select * from t where a = 6369; +select * from t where a = 6370; +select * from t where a = 6371; +select * from t where a = 6372; +select * from t where a = 6373; +select * from t where a = 6374; +select * from t where a = 6375; +select * from t where a = 6376; +select * from t where a = 6377; +select * from t where a = 6378; +select * from t where a = 6379; +select * from t where a = 6380; +select * from t where a = 6381; +select * from t where a = 6382; +select * from t where a = 6383; +select * from t where a = 6384; +select * from t where a = 6385; +select * from t where a = 6386; +select * from t where a = 6387; +select * from t where a = 6388; +select * from t where a = 6389; +select * from t where a = 6390; +select * from t where a = 6391; +select * from t where a = 6392; +select * from t where a = 6393; +select * from t where a = 6394; +select * from t where a = 6395; +select * from t where a = 6396; +select * from t where a = 6397; +select * from t where a = 6398; +select * from t where a = 6399; +select * from t where a = 6400; +select * from t where a = 6401; +select * from t where a = 6402; +select * from t where a = 6403; +select * from t where a = 6404; +select * from t where a = 6405; +select * from t where a = 6406; +select * from t where a = 6407; +select * from t where a = 6408; +select * from t where a = 6409; +select * from t where a = 6410; +select * from t where a = 6411; +select * from t where a = 6412; +select * from t where a = 6413; +select * from t where a = 6414; +select * from t where a = 6415; +select * from t where a = 6416; +select * from t where a = 6417; +select * from t where a = 6418; +select * from t where a = 6419; +select * from t where a = 6420; +select * from t where a = 6421; +select * from t where a = 6422; +select * from t where a = 6423; +select * from t where a = 6424; +select * from t where a = 6425; +select * from t where a = 6426; +select * from t where a = 6427; +select * from t where a = 6428; +select * from t where a = 6429; +select * from t where a = 6430; +select * from t where a = 6431; +select * from t where a = 6432; +select * from t where a = 6433; +select * from t where a = 6434; +select * from t where a = 6435; +select * from t where a = 6436; +select * from t where a = 6437; +select * from t where a = 6438; +select * from t where a = 6439; +select * from t where a = 6440; +select * from t where a = 6441; +select * from t where a = 6442; +select * from t where a = 6443; +select * from t where a = 6444; +select * from t where a = 6445; +select * from t where a = 6446; +select * from t where a = 6447; +select * from t where a = 6448; +select * from t where a = 6449; +select * from t where a = 6450; +select * from t where a = 6451; +select * from t where a = 6452; +select * from t where a = 6453; +select * from t where a = 6454; +select * from t where a = 6455; +select * from t where a = 6456; +select * from t where a = 6457; +select * from t where a = 6458; +select * from t where a = 6459; +select * from t where a = 6460; +select * from t where a = 6461; +select * from t where a = 6462; +select * from t where a = 6463; +select * from t where a = 6464; +select * from t where a = 6465; +select * from t where a = 6466; +select * from t where a = 6467; +select * from t where a = 6468; +select * from t where a = 6469; +select * from t where a = 6470; +select * from t where a = 6471; +select * from t where a = 6472; +select * from t where a = 6473; +select * from t where a = 6474; +select * from t where a = 6475; +select * from t where a = 6476; +select * from t where a = 6477; +select * from t where a = 6478; +select * from t where a = 6479; +select * from t where a = 6480; +select * from t where a = 6481; +select * from t where a = 6482; +select * from t where a = 6483; +select * from t where a = 6484; +select * from t where a = 6485; +select * from t where a = 6486; +select * from t where a = 6487; +select * from t where a = 6488; +select * from t where a = 6489; +select * from t where a = 6490; +select * from t where a = 6491; +select * from t where a = 6492; +select * from t where a = 6493; +select * from t where a = 6494; +select * from t where a = 6495; +select * from t where a = 6496; +select * from t where a = 6497; +select * from t where a = 6498; +select * from t where a = 6499; +select * from t where a = 6500; +select * from t where a = 6501; +select * from t where a = 6502; +select * from t where a = 6503; +select * from t where a = 6504; +select * from t where a = 6505; +select * from t where a = 6506; +select * from t where a = 6507; +select * from t where a = 6508; +select * from t where a = 6509; +select * from t where a = 6510; +select * from t where a = 6511; +select * from t where a = 6512; +select * from t where a = 6513; +select * from t where a = 6514; +select * from t where a = 6515; +select * from t where a = 6516; +select * from t where a = 6517; +select * from t where a = 6518; +select * from t where a = 6519; +select * from t where a = 6520; +select * from t where a = 6521; +select * from t where a = 6522; +select * from t where a = 6523; +select * from t where a = 6524; +select * from t where a = 6525; +select * from t where a = 6526; +select * from t where a = 6527; +select * from t where a = 6528; +select * from t where a = 6529; +select * from t where a = 6530; +select * from t where a = 6531; +select * from t where a = 6532; +select * from t where a = 6533; +select * from t where a = 6534; +select * from t where a = 6535; +select * from t where a = 6536; +select * from t where a = 6537; +select * from t where a = 6538; +select * from t where a = 6539; +select * from t where a = 6540; +select * from t where a = 6541; +select * from t where a = 6542; +select * from t where a = 6543; +select * from t where a = 6544; +select * from t where a = 6545; +select * from t where a = 6546; +select * from t where a = 6547; +select * from t where a = 6548; +select * from t where a = 6549; +select * from t where a = 6550; +select * from t where a = 6551; +select * from t where a = 6552; +select * from t where a = 6553; +select * from t where a = 6554; +select * from t where a = 6555; +select * from t where a = 6556; +select * from t where a = 6557; +select * from t where a = 6558; +select * from t where a = 6559; +select * from t where a = 6560; +select * from t where a = 6561; +select * from t where a = 6562; +select * from t where a = 6563; +select * from t where a = 6564; +select * from t where a = 6565; +select * from t where a = 6566; +select * from t where a = 6567; +select * from t where a = 6568; +select * from t where a = 6569; +select * from t where a = 6570; +select * from t where a = 6571; +select * from t where a = 6572; +select * from t where a = 6573; +select * from t where a = 6574; +select * from t where a = 6575; +select * from t where a = 6576; +select * from t where a = 6577; +select * from t where a = 6578; +select * from t where a = 6579; +select * from t where a = 6580; +select * from t where a = 6581; +select * from t where a = 6582; +select * from t where a = 6583; +select * from t where a = 6584; +select * from t where a = 6585; +select * from t where a = 6586; +select * from t where a = 6587; +select * from t where a = 6588; +select * from t where a = 6589; +select * from t where a = 6590; +select * from t where a = 6591; +select * from t where a = 6592; +select * from t where a = 6593; +select * from t where a = 6594; +select * from t where a = 6595; +select * from t where a = 6596; +select * from t where a = 6597; +select * from t where a = 6598; +select * from t where a = 6599; +select * from t where a = 6600; +select * from t where a = 6601; +select * from t where a = 6602; +select * from t where a = 6603; +select * from t where a = 6604; +select * from t where a = 6605; +select * from t where a = 6606; +select * from t where a = 6607; +select * from t where a = 6608; +select * from t where a = 6609; +select * from t where a = 6610; +select * from t where a = 6611; +select * from t where a = 6612; +select * from t where a = 6613; +select * from t where a = 6614; +select * from t where a = 6615; +select * from t where a = 6616; +select * from t where a = 6617; +select * from t where a = 6618; +select * from t where a = 6619; +select * from t where a = 6620; +select * from t where a = 6621; +select * from t where a = 6622; +select * from t where a = 6623; +select * from t where a = 6624; +select * from t where a = 6625; +select * from t where a = 6626; +select * from t where a = 6627; +select * from t where a = 6628; +select * from t where a = 6629; +select * from t where a = 6630; +select * from t where a = 6631; +select * from t where a = 6632; +select * from t where a = 6633; +select * from t where a = 6634; +select * from t where a = 6635; +select * from t where a = 6636; +select * from t where a = 6637; +select * from t where a = 6638; +select * from t where a = 6639; +select * from t where a = 6640; +select * from t where a = 6641; +select * from t where a = 6642; +select * from t where a = 6643; +select * from t where a = 6644; +select * from t where a = 6645; +select * from t where a = 6646; +select * from t where a = 6647; +select * from t where a = 6648; +select * from t where a = 6649; +select * from t where a = 6650; +select * from t where a = 6651; +select * from t where a = 6652; +select * from t where a = 6653; +select * from t where a = 6654; +select * from t where a = 6655; +select * from t where a = 6656; +select * from t where a = 6657; +select * from t where a = 6658; +select * from t where a = 6659; +select * from t where a = 6660; +select * from t where a = 6661; +select * from t where a = 6662; +select * from t where a = 6663; +select * from t where a = 6664; +select * from t where a = 6665; +select * from t where a = 6666; +select * from t where a = 6667; +select * from t where a = 6668; +select * from t where a = 6669; +select * from t where a = 6670; +select * from t where a = 6671; +select * from t where a = 6672; +select * from t where a = 6673; +select * from t where a = 6674; +select * from t where a = 6675; +select * from t where a = 6676; +select * from t where a = 6677; +select * from t where a = 6678; +select * from t where a = 6679; +select * from t where a = 6680; +select * from t where a = 6681; +select * from t where a = 6682; +select * from t where a = 6683; +select * from t where a = 6684; +select * from t where a = 6685; +select * from t where a = 6686; +select * from t where a = 6687; +select * from t where a = 6688; +select * from t where a = 6689; +select * from t where a = 6690; +select * from t where a = 6691; +select * from t where a = 6692; +select * from t where a = 6693; +select * from t where a = 6694; +select * from t where a = 6695; +select * from t where a = 6696; +select * from t where a = 6697; +select * from t where a = 6698; +select * from t where a = 6699; +select * from t where a = 6700; +select * from t where a = 6701; +select * from t where a = 6702; +select * from t where a = 6703; +select * from t where a = 6704; +select * from t where a = 6705; +select * from t where a = 6706; +select * from t where a = 6707; +select * from t where a = 6708; +select * from t where a = 6709; +select * from t where a = 6710; +select * from t where a = 6711; +select * from t where a = 6712; +select * from t where a = 6713; +select * from t where a = 6714; +select * from t where a = 6715; +select * from t where a = 6716; +select * from t where a = 6717; +select * from t where a = 6718; +select * from t where a = 6719; +select * from t where a = 6720; +select * from t where a = 6721; +select * from t where a = 6722; +select * from t where a = 6723; +select * from t where a = 6724; +select * from t where a = 6725; +select * from t where a = 6726; +select * from t where a = 6727; +select * from t where a = 6728; +select * from t where a = 6729; +select * from t where a = 6730; +select * from t where a = 6731; +select * from t where a = 6732; +select * from t where a = 6733; +select * from t where a = 6734; +select * from t where a = 6735; +select * from t where a = 6736; +select * from t where a = 6737; +select * from t where a = 6738; +select * from t where a = 6739; +select * from t where a = 6740; +select * from t where a = 6741; +select * from t where a = 6742; +select * from t where a = 6743; +select * from t where a = 6744; +select * from t where a = 6745; +select * from t where a = 6746; +select * from t where a = 6747; +select * from t where a = 6748; +select * from t where a = 6749; +select * from t where a = 6750; +select * from t where a = 6751; +select * from t where a = 6752; +select * from t where a = 6753; +select * from t where a = 6754; +select * from t where a = 6755; +select * from t where a = 6756; +select * from t where a = 6757; +select * from t where a = 6758; +select * from t where a = 6759; +select * from t where a = 6760; +select * from t where a = 6761; +select * from t where a = 6762; +select * from t where a = 6763; +select * from t where a = 6764; +select * from t where a = 6765; +select * from t where a = 6766; +select * from t where a = 6767; +select * from t where a = 6768; +select * from t where a = 6769; +select * from t where a = 6770; +select * from t where a = 6771; +select * from t where a = 6772; +select * from t where a = 6773; +select * from t where a = 6774; +select * from t where a = 6775; +select * from t where a = 6776; +select * from t where a = 6777; +select * from t where a = 6778; +select * from t where a = 6779; +select * from t where a = 6780; +select * from t where a = 6781; +select * from t where a = 6782; +select * from t where a = 6783; +select * from t where a = 6784; +select * from t where a = 6785; +select * from t where a = 6786; +select * from t where a = 6787; +select * from t where a = 6788; +select * from t where a = 6789; +select * from t where a = 6790; +select * from t where a = 6791; +select * from t where a = 6792; +select * from t where a = 6793; +select * from t where a = 6794; +select * from t where a = 6795; +select * from t where a = 6796; +select * from t where a = 6797; +select * from t where a = 6798; +select * from t where a = 6799; +select * from t where a = 6800; +select * from t where a = 6801; +select * from t where a = 6802; +select * from t where a = 6803; +select * from t where a = 6804; +select * from t where a = 6805; +select * from t where a = 6806; +select * from t where a = 6807; +select * from t where a = 6808; +select * from t where a = 6809; +select * from t where a = 6810; +select * from t where a = 6811; +select * from t where a = 6812; +select * from t where a = 6813; +select * from t where a = 6814; +select * from t where a = 6815; +select * from t where a = 6816; +select * from t where a = 6817; +select * from t where a = 6818; +select * from t where a = 6819; +select * from t where a = 6820; +select * from t where a = 6821; +select * from t where a = 6822; +select * from t where a = 6823; +select * from t where a = 6824; +select * from t where a = 6825; +select * from t where a = 6826; +select * from t where a = 6827; +select * from t where a = 6828; +select * from t where a = 6829; +select * from t where a = 6830; +select * from t where a = 6831; +select * from t where a = 6832; +select * from t where a = 6833; +select * from t where a = 6834; +select * from t where a = 6835; +select * from t where a = 6836; +select * from t where a = 6837; +select * from t where a = 6838; +select * from t where a = 6839; +select * from t where a = 6840; +select * from t where a = 6841; +select * from t where a = 6842; +select * from t where a = 6843; +select * from t where a = 6844; +select * from t where a = 6845; +select * from t where a = 6846; +select * from t where a = 6847; +select * from t where a = 6848; +select * from t where a = 6849; +select * from t where a = 6850; +select * from t where a = 6851; +select * from t where a = 6852; +select * from t where a = 6853; +select * from t where a = 6854; +select * from t where a = 6855; +select * from t where a = 6856; +select * from t where a = 6857; +select * from t where a = 6858; +select * from t where a = 6859; +select * from t where a = 6860; +select * from t where a = 6861; +select * from t where a = 6862; +select * from t where a = 6863; +select * from t where a = 6864; +select * from t where a = 6865; +select * from t where a = 6866; +select * from t where a = 6867; +select * from t where a = 6868; +select * from t where a = 6869; +select * from t where a = 6870; +select * from t where a = 6871; +select * from t where a = 6872; +select * from t where a = 6873; +select * from t where a = 6874; +select * from t where a = 6875; +select * from t where a = 6876; +select * from t where a = 6877; +select * from t where a = 6878; +select * from t where a = 6879; +select * from t where a = 6880; +select * from t where a = 6881; +select * from t where a = 6882; +select * from t where a = 6883; +select * from t where a = 6884; +select * from t where a = 6885; +select * from t where a = 6886; +select * from t where a = 6887; +select * from t where a = 6888; +select * from t where a = 6889; +select * from t where a = 6890; +select * from t where a = 6891; +select * from t where a = 6892; +select * from t where a = 6893; +select * from t where a = 6894; +select * from t where a = 6895; +select * from t where a = 6896; +select * from t where a = 6897; +select * from t where a = 6898; +select * from t where a = 6899; +select * from t where a = 6900; +select * from t where a = 6901; +select * from t where a = 6902; +select * from t where a = 6903; +select * from t where a = 6904; +select * from t where a = 6905; +select * from t where a = 6906; +select * from t where a = 6907; +select * from t where a = 6908; +select * from t where a = 6909; +select * from t where a = 6910; +select * from t where a = 6911; +select * from t where a = 6912; +select * from t where a = 6913; +select * from t where a = 6914; +select * from t where a = 6915; +select * from t where a = 6916; +select * from t where a = 6917; +select * from t where a = 6918; +select * from t where a = 6919; +select * from t where a = 6920; +select * from t where a = 6921; +select * from t where a = 6922; +select * from t where a = 6923; +select * from t where a = 6924; +select * from t where a = 6925; +select * from t where a = 6926; +select * from t where a = 6927; +select * from t where a = 6928; +select * from t where a = 6929; +select * from t where a = 6930; +select * from t where a = 6931; +select * from t where a = 6932; +select * from t where a = 6933; +select * from t where a = 6934; +select * from t where a = 6935; +select * from t where a = 6936; +select * from t where a = 6937; +select * from t where a = 6938; +select * from t where a = 6939; +select * from t where a = 6940; +select * from t where a = 6941; +select * from t where a = 6942; +select * from t where a = 6943; +select * from t where a = 6944; +select * from t where a = 6945; +select * from t where a = 6946; +select * from t where a = 6947; +select * from t where a = 6948; +select * from t where a = 6949; +select * from t where a = 6950; +select * from t where a = 6951; +select * from t where a = 6952; +select * from t where a = 6953; +select * from t where a = 6954; +select * from t where a = 6955; +select * from t where a = 6956; +select * from t where a = 6957; +select * from t where a = 6958; +select * from t where a = 6959; +select * from t where a = 6960; +select * from t where a = 6961; +select * from t where a = 6962; +select * from t where a = 6963; +select * from t where a = 6964; +select * from t where a = 6965; +select * from t where a = 6966; +select * from t where a = 6967; +select * from t where a = 6968; +select * from t where a = 6969; +select * from t where a = 6970; +select * from t where a = 6971; +select * from t where a = 6972; +select * from t where a = 6973; +select * from t where a = 6974; +select * from t where a = 6975; +select * from t where a = 6976; +select * from t where a = 6977; +select * from t where a = 6978; +select * from t where a = 6979; +select * from t where a = 6980; +select * from t where a = 6981; +select * from t where a = 6982; +select * from t where a = 6983; +select * from t where a = 6984; +select * from t where a = 6985; +select * from t where a = 6986; +select * from t where a = 6987; +select * from t where a = 6988; +select * from t where a = 6989; +select * from t where a = 6990; +select * from t where a = 6991; +select * from t where a = 6992; +select * from t where a = 6993; +select * from t where a = 6994; +select * from t where a = 6995; +select * from t where a = 6996; +select * from t where a = 6997; +select * from t where a = 6998; +select * from t where a = 6999; +select * from t where a = 7000; +select * from t where a = 7001; +select * from t where a = 7002; +select * from t where a = 7003; +select * from t where a = 7004; +select * from t where a = 7005; +select * from t where a = 7006; +select * from t where a = 7007; +select * from t where a = 7008; +select * from t where a = 7009; +select * from t where a = 7010; +select * from t where a = 7011; +select * from t where a = 7012; +select * from t where a = 7013; +select * from t where a = 7014; +select * from t where a = 7015; +select * from t where a = 7016; +select * from t where a = 7017; +select * from t where a = 7018; +select * from t where a = 7019; +select * from t where a = 7020; +select * from t where a = 7021; +select * from t where a = 7022; +select * from t where a = 7023; +select * from t where a = 7024; +select * from t where a = 7025; +select * from t where a = 7026; +select * from t where a = 7027; +select * from t where a = 7028; +select * from t where a = 7029; +select * from t where a = 7030; +select * from t where a = 7031; +select * from t where a = 7032; +select * from t where a = 7033; +select * from t where a = 7034; +select * from t where a = 7035; +select * from t where a = 7036; +select * from t where a = 7037; +select * from t where a = 7038; +select * from t where a = 7039; +select * from t where a = 7040; +select * from t where a = 7041; +select * from t where a = 7042; +select * from t where a = 7043; +select * from t where a = 7044; +select * from t where a = 7045; +select * from t where a = 7046; +select * from t where a = 7047; +select * from t where a = 7048; +select * from t where a = 7049; +select * from t where a = 7050; +select * from t where a = 7051; +select * from t where a = 7052; +select * from t where a = 7053; +select * from t where a = 7054; +select * from t where a = 7055; +select * from t where a = 7056; +select * from t where a = 7057; +select * from t where a = 7058; +select * from t where a = 7059; +select * from t where a = 7060; +select * from t where a = 7061; +select * from t where a = 7062; +select * from t where a = 7063; +select * from t where a = 7064; +select * from t where a = 7065; +select * from t where a = 7066; +select * from t where a = 7067; +select * from t where a = 7068; +select * from t where a = 7069; +select * from t where a = 7070; +select * from t where a = 7071; +select * from t where a = 7072; +select * from t where a = 7073; +select * from t where a = 7074; +select * from t where a = 7075; +select * from t where a = 7076; +select * from t where a = 7077; +select * from t where a = 7078; +select * from t where a = 7079; +select * from t where a = 7080; +select * from t where a = 7081; +select * from t where a = 7082; +select * from t where a = 7083; +select * from t where a = 7084; +select * from t where a = 7085; +select * from t where a = 7086; +select * from t where a = 7087; +select * from t where a = 7088; +select * from t where a = 7089; +select * from t where a = 7090; +select * from t where a = 7091; +select * from t where a = 7092; +select * from t where a = 7093; +select * from t where a = 7094; +select * from t where a = 7095; +select * from t where a = 7096; +select * from t where a = 7097; +select * from t where a = 7098; +select * from t where a = 7099; +select * from t where a = 7100; +select * from t where a = 7101; +select * from t where a = 7102; +select * from t where a = 7103; +select * from t where a = 7104; +select * from t where a = 7105; +select * from t where a = 7106; +select * from t where a = 7107; +select * from t where a = 7108; +select * from t where a = 7109; +select * from t where a = 7110; +select * from t where a = 7111; +select * from t where a = 7112; +select * from t where a = 7113; +select * from t where a = 7114; +select * from t where a = 7115; +select * from t where a = 7116; +select * from t where a = 7117; +select * from t where a = 7118; +select * from t where a = 7119; +select * from t where a = 7120; +select * from t where a = 7121; +select * from t where a = 7122; +select * from t where a = 7123; +select * from t where a = 7124; +select * from t where a = 7125; +select * from t where a = 7126; +select * from t where a = 7127; +select * from t where a = 7128; +select * from t where a = 7129; +select * from t where a = 7130; +select * from t where a = 7131; +select * from t where a = 7132; +select * from t where a = 7133; +select * from t where a = 7134; +select * from t where a = 7135; +select * from t where a = 7136; +select * from t where a = 7137; +select * from t where a = 7138; +select * from t where a = 7139; +select * from t where a = 7140; +select * from t where a = 7141; +select * from t where a = 7142; +select * from t where a = 7143; +select * from t where a = 7144; +select * from t where a = 7145; +select * from t where a = 7146; +select * from t where a = 7147; +select * from t where a = 7148; +select * from t where a = 7149; +select * from t where a = 7150; +select * from t where a = 7151; +select * from t where a = 7152; +select * from t where a = 7153; +select * from t where a = 7154; +select * from t where a = 7155; +select * from t where a = 7156; +select * from t where a = 7157; +select * from t where a = 7158; +select * from t where a = 7159; +select * from t where a = 7160; +select * from t where a = 7161; +select * from t where a = 7162; +select * from t where a = 7163; +select * from t where a = 7164; +select * from t where a = 7165; +select * from t where a = 7166; +select * from t where a = 7167; +select * from t where a = 7168; +select * from t where a = 7169; +select * from t where a = 7170; +select * from t where a = 7171; +select * from t where a = 7172; +select * from t where a = 7173; +select * from t where a = 7174; +select * from t where a = 7175; +select * from t where a = 7176; +select * from t where a = 7177; +select * from t where a = 7178; +select * from t where a = 7179; +select * from t where a = 7180; +select * from t where a = 7181; +select * from t where a = 7182; +select * from t where a = 7183; +select * from t where a = 7184; +select * from t where a = 7185; +select * from t where a = 7186; +select * from t where a = 7187; +select * from t where a = 7188; +select * from t where a = 7189; +select * from t where a = 7190; +select * from t where a = 7191; +select * from t where a = 7192; +select * from t where a = 7193; +select * from t where a = 7194; +select * from t where a = 7195; +select * from t where a = 7196; +select * from t where a = 7197; +select * from t where a = 7198; +select * from t where a = 7199; +select * from t where a = 7200; +select * from t where a = 7201; +select * from t where a = 7202; +select * from t where a = 7203; +select * from t where a = 7204; +select * from t where a = 7205; +select * from t where a = 7206; +select * from t where a = 7207; +select * from t where a = 7208; +select * from t where a = 7209; +select * from t where a = 7210; +select * from t where a = 7211; +select * from t where a = 7212; +select * from t where a = 7213; +select * from t where a = 7214; +select * from t where a = 7215; +select * from t where a = 7216; +select * from t where a = 7217; +select * from t where a = 7218; +select * from t where a = 7219; +select * from t where a = 7220; +select * from t where a = 7221; +select * from t where a = 7222; +select * from t where a = 7223; +select * from t where a = 7224; +select * from t where a = 7225; +select * from t where a = 7226; +select * from t where a = 7227; +select * from t where a = 7228; +select * from t where a = 7229; +select * from t where a = 7230; +select * from t where a = 7231; +select * from t where a = 7232; +select * from t where a = 7233; +select * from t where a = 7234; +select * from t where a = 7235; +select * from t where a = 7236; +select * from t where a = 7237; +select * from t where a = 7238; +select * from t where a = 7239; +select * from t where a = 7240; +select * from t where a = 7241; +select * from t where a = 7242; +select * from t where a = 7243; +select * from t where a = 7244; +select * from t where a = 7245; +select * from t where a = 7246; +select * from t where a = 7247; +select * from t where a = 7248; +select * from t where a = 7249; +select * from t where a = 7250; +select * from t where a = 7251; +select * from t where a = 7252; +select * from t where a = 7253; +select * from t where a = 7254; +select * from t where a = 7255; +select * from t where a = 7256; +select * from t where a = 7257; +select * from t where a = 7258; +select * from t where a = 7259; +select * from t where a = 7260; +select * from t where a = 7261; +select * from t where a = 7262; +select * from t where a = 7263; +select * from t where a = 7264; +select * from t where a = 7265; +select * from t where a = 7266; +select * from t where a = 7267; +select * from t where a = 7268; +select * from t where a = 7269; +select * from t where a = 7270; +select * from t where a = 7271; +select * from t where a = 7272; +select * from t where a = 7273; +select * from t where a = 7274; +select * from t where a = 7275; +select * from t where a = 7276; +select * from t where a = 7277; +select * from t where a = 7278; +select * from t where a = 7279; +select * from t where a = 7280; +select * from t where a = 7281; +select * from t where a = 7282; +select * from t where a = 7283; +select * from t where a = 7284; +select * from t where a = 7285; +select * from t where a = 7286; +select * from t where a = 7287; +select * from t where a = 7288; +select * from t where a = 7289; +select * from t where a = 7290; +select * from t where a = 7291; +select * from t where a = 7292; +select * from t where a = 7293; +select * from t where a = 7294; +select * from t where a = 7295; +select * from t where a = 7296; +select * from t where a = 7297; +select * from t where a = 7298; +select * from t where a = 7299; +select * from t where a = 7300; +select * from t where a = 7301; +select * from t where a = 7302; +select * from t where a = 7303; +select * from t where a = 7304; +select * from t where a = 7305; +select * from t where a = 7306; +select * from t where a = 7307; +select * from t where a = 7308; +select * from t where a = 7309; +select * from t where a = 7310; +select * from t where a = 7311; +select * from t where a = 7312; +select * from t where a = 7313; +select * from t where a = 7314; +select * from t where a = 7315; +select * from t where a = 7316; +select * from t where a = 7317; +select * from t where a = 7318; +select * from t where a = 7319; +select * from t where a = 7320; +select * from t where a = 7321; +select * from t where a = 7322; +select * from t where a = 7323; +select * from t where a = 7324; +select * from t where a = 7325; +select * from t where a = 7326; +select * from t where a = 7327; +select * from t where a = 7328; +select * from t where a = 7329; +select * from t where a = 7330; +select * from t where a = 7331; +select * from t where a = 7332; +select * from t where a = 7333; +select * from t where a = 7334; +select * from t where a = 7335; +select * from t where a = 7336; +select * from t where a = 7337; +select * from t where a = 7338; +select * from t where a = 7339; +select * from t where a = 7340; +select * from t where a = 7341; +select * from t where a = 7342; +select * from t where a = 7343; +select * from t where a = 7344; +select * from t where a = 7345; +select * from t where a = 7346; +select * from t where a = 7347; +select * from t where a = 7348; +select * from t where a = 7349; +select * from t where a = 7350; +select * from t where a = 7351; +select * from t where a = 7352; +select * from t where a = 7353; +select * from t where a = 7354; +select * from t where a = 7355; +select * from t where a = 7356; +select * from t where a = 7357; +select * from t where a = 7358; +select * from t where a = 7359; +select * from t where a = 7360; +select * from t where a = 7361; +select * from t where a = 7362; +select * from t where a = 7363; +select * from t where a = 7364; +select * from t where a = 7365; +select * from t where a = 7366; +select * from t where a = 7367; +select * from t where a = 7368; +select * from t where a = 7369; +select * from t where a = 7370; +select * from t where a = 7371; +select * from t where a = 7372; +select * from t where a = 7373; +select * from t where a = 7374; +select * from t where a = 7375; +select * from t where a = 7376; +select * from t where a = 7377; +select * from t where a = 7378; +select * from t where a = 7379; +select * from t where a = 7380; +select * from t where a = 7381; +select * from t where a = 7382; +select * from t where a = 7383; +select * from t where a = 7384; +select * from t where a = 7385; +select * from t where a = 7386; +select * from t where a = 7387; +select * from t where a = 7388; +select * from t where a = 7389; +select * from t where a = 7390; +select * from t where a = 7391; +select * from t where a = 7392; +select * from t where a = 7393; +select * from t where a = 7394; +select * from t where a = 7395; +select * from t where a = 7396; +select * from t where a = 7397; +select * from t where a = 7398; +select * from t where a = 7399; +select * from t where a = 7400; +select * from t where a = 7401; +select * from t where a = 7402; +select * from t where a = 7403; +select * from t where a = 7404; +select * from t where a = 7405; +select * from t where a = 7406; +select * from t where a = 7407; +select * from t where a = 7408; +select * from t where a = 7409; +select * from t where a = 7410; +select * from t where a = 7411; +select * from t where a = 7412; +select * from t where a = 7413; +select * from t where a = 7414; +select * from t where a = 7415; +select * from t where a = 7416; +select * from t where a = 7417; +select * from t where a = 7418; +select * from t where a = 7419; +select * from t where a = 7420; +select * from t where a = 7421; +select * from t where a = 7422; +select * from t where a = 7423; +select * from t where a = 7424; +select * from t where a = 7425; +select * from t where a = 7426; +select * from t where a = 7427; +select * from t where a = 7428; +select * from t where a = 7429; +select * from t where a = 7430; +select * from t where a = 7431; +select * from t where a = 7432; +select * from t where a = 7433; +select * from t where a = 7434; +select * from t where a = 7435; +select * from t where a = 7436; +select * from t where a = 7437; +select * from t where a = 7438; +select * from t where a = 7439; +select * from t where a = 7440; +select * from t where a = 7441; +select * from t where a = 7442; +select * from t where a = 7443; +select * from t where a = 7444; +select * from t where a = 7445; +select * from t where a = 7446; +select * from t where a = 7447; +select * from t where a = 7448; +select * from t where a = 7449; +select * from t where a = 7450; +select * from t where a = 7451; +select * from t where a = 7452; +select * from t where a = 7453; +select * from t where a = 7454; +select * from t where a = 7455; +select * from t where a = 7456; +select * from t where a = 7457; +select * from t where a = 7458; +select * from t where a = 7459; +select * from t where a = 7460; +select * from t where a = 7461; +select * from t where a = 7462; +select * from t where a = 7463; +select * from t where a = 7464; +select * from t where a = 7465; +select * from t where a = 7466; +select * from t where a = 7467; +select * from t where a = 7468; +select * from t where a = 7469; +select * from t where a = 7470; +select * from t where a = 7471; +select * from t where a = 7472; +select * from t where a = 7473; +select * from t where a = 7474; +select * from t where a = 7475; +select * from t where a = 7476; +select * from t where a = 7477; +select * from t where a = 7478; +select * from t where a = 7479; +select * from t where a = 7480; +select * from t where a = 7481; +select * from t where a = 7482; +select * from t where a = 7483; +select * from t where a = 7484; +select * from t where a = 7485; +select * from t where a = 7486; +select * from t where a = 7487; +select * from t where a = 7488; +select * from t where a = 7489; +select * from t where a = 7490; +select * from t where a = 7491; +select * from t where a = 7492; +select * from t where a = 7493; +select * from t where a = 7494; +select * from t where a = 7495; +select * from t where a = 7496; +select * from t where a = 7497; +select * from t where a = 7498; +select * from t where a = 7499; +select * from t where a = 7500; +select * from t where a = 7501; +select * from t where a = 7502; +select * from t where a = 7503; +select * from t where a = 7504; +select * from t where a = 7505; +select * from t where a = 7506; +select * from t where a = 7507; +select * from t where a = 7508; +select * from t where a = 7509; +select * from t where a = 7510; +select * from t where a = 7511; +select * from t where a = 7512; +select * from t where a = 7513; +select * from t where a = 7514; +select * from t where a = 7515; +select * from t where a = 7516; +select * from t where a = 7517; +select * from t where a = 7518; +select * from t where a = 7519; +select * from t where a = 7520; +select * from t where a = 7521; +select * from t where a = 7522; +select * from t where a = 7523; +select * from t where a = 7524; +select * from t where a = 7525; +select * from t where a = 7526; +select * from t where a = 7527; +select * from t where a = 7528; +select * from t where a = 7529; +select * from t where a = 7530; +select * from t where a = 7531; +select * from t where a = 7532; +select * from t where a = 7533; +select * from t where a = 7534; +select * from t where a = 7535; +select * from t where a = 7536; +select * from t where a = 7537; +select * from t where a = 7538; +select * from t where a = 7539; +select * from t where a = 7540; +select * from t where a = 7541; +select * from t where a = 7542; +select * from t where a = 7543; +select * from t where a = 7544; +select * from t where a = 7545; +select * from t where a = 7546; +select * from t where a = 7547; +select * from t where a = 7548; +select * from t where a = 7549; +select * from t where a = 7550; +select * from t where a = 7551; +select * from t where a = 7552; +select * from t where a = 7553; +select * from t where a = 7554; +select * from t where a = 7555; +select * from t where a = 7556; +select * from t where a = 7557; +select * from t where a = 7558; +select * from t where a = 7559; +select * from t where a = 7560; +select * from t where a = 7561; +select * from t where a = 7562; +select * from t where a = 7563; +select * from t where a = 7564; +select * from t where a = 7565; +select * from t where a = 7566; +select * from t where a = 7567; +select * from t where a = 7568; +select * from t where a = 7569; +select * from t where a = 7570; +select * from t where a = 7571; +select * from t where a = 7572; +select * from t where a = 7573; +select * from t where a = 7574; +select * from t where a = 7575; +select * from t where a = 7576; +select * from t where a = 7577; +select * from t where a = 7578; +select * from t where a = 7579; +select * from t where a = 7580; +select * from t where a = 7581; +select * from t where a = 7582; +select * from t where a = 7583; +select * from t where a = 7584; +select * from t where a = 7585; +select * from t where a = 7586; +select * from t where a = 7587; +select * from t where a = 7588; +select * from t where a = 7589; +select * from t where a = 7590; +select * from t where a = 7591; +select * from t where a = 7592; +select * from t where a = 7593; +select * from t where a = 7594; +select * from t where a = 7595; +select * from t where a = 7596; +select * from t where a = 7597; +select * from t where a = 7598; +select * from t where a = 7599; +select * from t where a = 7600; +select * from t where a = 7601; +select * from t where a = 7602; +select * from t where a = 7603; +select * from t where a = 7604; +select * from t where a = 7605; +select * from t where a = 7606; +select * from t where a = 7607; +select * from t where a = 7608; +select * from t where a = 7609; +select * from t where a = 7610; +select * from t where a = 7611; +select * from t where a = 7612; +select * from t where a = 7613; +select * from t where a = 7614; +select * from t where a = 7615; +select * from t where a = 7616; +select * from t where a = 7617; +select * from t where a = 7618; +select * from t where a = 7619; +select * from t where a = 7620; +select * from t where a = 7621; +select * from t where a = 7622; +select * from t where a = 7623; +select * from t where a = 7624; +select * from t where a = 7625; +select * from t where a = 7626; +select * from t where a = 7627; +select * from t where a = 7628; +select * from t where a = 7629; +select * from t where a = 7630; +select * from t where a = 7631; +select * from t where a = 7632; +select * from t where a = 7633; +select * from t where a = 7634; +select * from t where a = 7635; +select * from t where a = 7636; +select * from t where a = 7637; +select * from t where a = 7638; +select * from t where a = 7639; +select * from t where a = 7640; +select * from t where a = 7641; +select * from t where a = 7642; +select * from t where a = 7643; +select * from t where a = 7644; +select * from t where a = 7645; +select * from t where a = 7646; +select * from t where a = 7647; +select * from t where a = 7648; +select * from t where a = 7649; +select * from t where a = 7650; +select * from t where a = 7651; +select * from t where a = 7652; +select * from t where a = 7653; +select * from t where a = 7654; +select * from t where a = 7655; +select * from t where a = 7656; +select * from t where a = 7657; +select * from t where a = 7658; +select * from t where a = 7659; +select * from t where a = 7660; +select * from t where a = 7661; +select * from t where a = 7662; +select * from t where a = 7663; +select * from t where a = 7664; +select * from t where a = 7665; +select * from t where a = 7666; +select * from t where a = 7667; +select * from t where a = 7668; +select * from t where a = 7669; +select * from t where a = 7670; +select * from t where a = 7671; +select * from t where a = 7672; +select * from t where a = 7673; +select * from t where a = 7674; +select * from t where a = 7675; +select * from t where a = 7676; +select * from t where a = 7677; +select * from t where a = 7678; +select * from t where a = 7679; +select * from t where a = 7680; +select * from t where a = 7681; +select * from t where a = 7682; +select * from t where a = 7683; +select * from t where a = 7684; +select * from t where a = 7685; +select * from t where a = 7686; +select * from t where a = 7687; +select * from t where a = 7688; +select * from t where a = 7689; +select * from t where a = 7690; +select * from t where a = 7691; +select * from t where a = 7692; +select * from t where a = 7693; +select * from t where a = 7694; +select * from t where a = 7695; +select * from t where a = 7696; +select * from t where a = 7697; +select * from t where a = 7698; +select * from t where a = 7699; +select * from t where a = 7700; +select * from t where a = 7701; +select * from t where a = 7702; +select * from t where a = 7703; +select * from t where a = 7704; +select * from t where a = 7705; +select * from t where a = 7706; +select * from t where a = 7707; +select * from t where a = 7708; +select * from t where a = 7709; +select * from t where a = 7710; +select * from t where a = 7711; +select * from t where a = 7712; +select * from t where a = 7713; +select * from t where a = 7714; +select * from t where a = 7715; +select * from t where a = 7716; +select * from t where a = 7717; +select * from t where a = 7718; +select * from t where a = 7719; +select * from t where a = 7720; +select * from t where a = 7721; +select * from t where a = 7722; +select * from t where a = 7723; +select * from t where a = 7724; +select * from t where a = 7725; +select * from t where a = 7726; +select * from t where a = 7727; +select * from t where a = 7728; +select * from t where a = 7729; +select * from t where a = 7730; +select * from t where a = 7731; +select * from t where a = 7732; +select * from t where a = 7733; +select * from t where a = 7734; +select * from t where a = 7735; +select * from t where a = 7736; +select * from t where a = 7737; +select * from t where a = 7738; +select * from t where a = 7739; +select * from t where a = 7740; +select * from t where a = 7741; +select * from t where a = 7742; +select * from t where a = 7743; +select * from t where a = 7744; +select * from t where a = 7745; +select * from t where a = 7746; +select * from t where a = 7747; +select * from t where a = 7748; +select * from t where a = 7749; +select * from t where a = 7750; +select * from t where a = 7751; +select * from t where a = 7752; +select * from t where a = 7753; +select * from t where a = 7754; +select * from t where a = 7755; +select * from t where a = 7756; +select * from t where a = 7757; +select * from t where a = 7758; +select * from t where a = 7759; +select * from t where a = 7760; +select * from t where a = 7761; +select * from t where a = 7762; +select * from t where a = 7763; +select * from t where a = 7764; +select * from t where a = 7765; +select * from t where a = 7766; +select * from t where a = 7767; +select * from t where a = 7768; +select * from t where a = 7769; +select * from t where a = 7770; +select * from t where a = 7771; +select * from t where a = 7772; +select * from t where a = 7773; +select * from t where a = 7774; +select * from t where a = 7775; +select * from t where a = 7776; +select * from t where a = 7777; +select * from t where a = 7778; +select * from t where a = 7779; +select * from t where a = 7780; +select * from t where a = 7781; +select * from t where a = 7782; +select * from t where a = 7783; +select * from t where a = 7784; +select * from t where a = 7785; +select * from t where a = 7786; +select * from t where a = 7787; +select * from t where a = 7788; +select * from t where a = 7789; +select * from t where a = 7790; +select * from t where a = 7791; +select * from t where a = 7792; +select * from t where a = 7793; +select * from t where a = 7794; +select * from t where a = 7795; +select * from t where a = 7796; +select * from t where a = 7797; +select * from t where a = 7798; +select * from t where a = 7799; +select * from t where a = 7800; +select * from t where a = 7801; +select * from t where a = 7802; +select * from t where a = 7803; +select * from t where a = 7804; +select * from t where a = 7805; +select * from t where a = 7806; +select * from t where a = 7807; +select * from t where a = 7808; +select * from t where a = 7809; +select * from t where a = 7810; +select * from t where a = 7811; +select * from t where a = 7812; +select * from t where a = 7813; +select * from t where a = 7814; +select * from t where a = 7815; +select * from t where a = 7816; +select * from t where a = 7817; +select * from t where a = 7818; +select * from t where a = 7819; +select * from t where a = 7820; +select * from t where a = 7821; +select * from t where a = 7822; +select * from t where a = 7823; +select * from t where a = 7824; +select * from t where a = 7825; +select * from t where a = 7826; +select * from t where a = 7827; +select * from t where a = 7828; +select * from t where a = 7829; +select * from t where a = 7830; +select * from t where a = 7831; +select * from t where a = 7832; +select * from t where a = 7833; +select * from t where a = 7834; +select * from t where a = 7835; +select * from t where a = 7836; +select * from t where a = 7837; +select * from t where a = 7838; +select * from t where a = 7839; +select * from t where a = 7840; +select * from t where a = 7841; +select * from t where a = 7842; +select * from t where a = 7843; +select * from t where a = 7844; +select * from t where a = 7845; +select * from t where a = 7846; +select * from t where a = 7847; +select * from t where a = 7848; +select * from t where a = 7849; +select * from t where a = 7850; +select * from t where a = 7851; +select * from t where a = 7852; +select * from t where a = 7853; +select * from t where a = 7854; +select * from t where a = 7855; +select * from t where a = 7856; +select * from t where a = 7857; +select * from t where a = 7858; +select * from t where a = 7859; +select * from t where a = 7860; +select * from t where a = 7861; +select * from t where a = 7862; +select * from t where a = 7863; +select * from t where a = 7864; +select * from t where a = 7865; +select * from t where a = 7866; +select * from t where a = 7867; +select * from t where a = 7868; +select * from t where a = 7869; +select * from t where a = 7870; +select * from t where a = 7871; +select * from t where a = 7872; +select * from t where a = 7873; +select * from t where a = 7874; +select * from t where a = 7875; +select * from t where a = 7876; +select * from t where a = 7877; +select * from t where a = 7878; +select * from t where a = 7879; +select * from t where a = 7880; +select * from t where a = 7881; +select * from t where a = 7882; +select * from t where a = 7883; +select * from t where a = 7884; +select * from t where a = 7885; +select * from t where a = 7886; +select * from t where a = 7887; +select * from t where a = 7888; +select * from t where a = 7889; +select * from t where a = 7890; +select * from t where a = 7891; +select * from t where a = 7892; +select * from t where a = 7893; +select * from t where a = 7894; +select * from t where a = 7895; +select * from t where a = 7896; +select * from t where a = 7897; +select * from t where a = 7898; +select * from t where a = 7899; +select * from t where a = 7900; +select * from t where a = 7901; +select * from t where a = 7902; +select * from t where a = 7903; +select * from t where a = 7904; +select * from t where a = 7905; +select * from t where a = 7906; +select * from t where a = 7907; +select * from t where a = 7908; +select * from t where a = 7909; +select * from t where a = 7910; +select * from t where a = 7911; +select * from t where a = 7912; +select * from t where a = 7913; +select * from t where a = 7914; +select * from t where a = 7915; +select * from t where a = 7916; +select * from t where a = 7917; +select * from t where a = 7918; +select * from t where a = 7919; +select * from t where a = 7920; +select * from t where a = 7921; +select * from t where a = 7922; +select * from t where a = 7923; +select * from t where a = 7924; +select * from t where a = 7925; +select * from t where a = 7926; +select * from t where a = 7927; +select * from t where a = 7928; +select * from t where a = 7929; +select * from t where a = 7930; +select * from t where a = 7931; +select * from t where a = 7932; +select * from t where a = 7933; +select * from t where a = 7934; +select * from t where a = 7935; +select * from t where a = 7936; +select * from t where a = 7937; +select * from t where a = 7938; +select * from t where a = 7939; +select * from t where a = 7940; +select * from t where a = 7941; +select * from t where a = 7942; +select * from t where a = 7943; +select * from t where a = 7944; +select * from t where a = 7945; +select * from t where a = 7946; +select * from t where a = 7947; +select * from t where a = 7948; +select * from t where a = 7949; +select * from t where a = 7950; +select * from t where a = 7951; +select * from t where a = 7952; +select * from t where a = 7953; +select * from t where a = 7954; +select * from t where a = 7955; +select * from t where a = 7956; +select * from t where a = 7957; +select * from t where a = 7958; +select * from t where a = 7959; +select * from t where a = 7960; +select * from t where a = 7961; +select * from t where a = 7962; +select * from t where a = 7963; +select * from t where a = 7964; +select * from t where a = 7965; +select * from t where a = 7966; +select * from t where a = 7967; +select * from t where a = 7968; +select * from t where a = 7969; +select * from t where a = 7970; +select * from t where a = 7971; +select * from t where a = 7972; +select * from t where a = 7973; +select * from t where a = 7974; +select * from t where a = 7975; +select * from t where a = 7976; +select * from t where a = 7977; +select * from t where a = 7978; +select * from t where a = 7979; +select * from t where a = 7980; +select * from t where a = 7981; +select * from t where a = 7982; +select * from t where a = 7983; +select * from t where a = 7984; +select * from t where a = 7985; +select * from t where a = 7986; +select * from t where a = 7987; +select * from t where a = 7988; +select * from t where a = 7989; +select * from t where a = 7990; +select * from t where a = 7991; +select * from t where a = 7992; +select * from t where a = 7993; +select * from t where a = 7994; +select * from t where a = 7995; +select * from t where a = 7996; +select * from t where a = 7997; +select * from t where a = 7998; +select * from t where a = 7999; +select * from t where a = 8000; +select * from t where a = 8001; +select * from t where a = 8002; +select * from t where a = 8003; +select * from t where a = 8004; +select * from t where a = 8005; +select * from t where a = 8006; +select * from t where a = 8007; +select * from t where a = 8008; +select * from t where a = 8009; +select * from t where a = 8010; +select * from t where a = 8011; +select * from t where a = 8012; +select * from t where a = 8013; +select * from t where a = 8014; +select * from t where a = 8015; +select * from t where a = 8016; +select * from t where a = 8017; +select * from t where a = 8018; +select * from t where a = 8019; +select * from t where a = 8020; +select * from t where a = 8021; +select * from t where a = 8022; +select * from t where a = 8023; +select * from t where a = 8024; +select * from t where a = 8025; +select * from t where a = 8026; +select * from t where a = 8027; +select * from t where a = 8028; +select * from t where a = 8029; +select * from t where a = 8030; +select * from t where a = 8031; +select * from t where a = 8032; +select * from t where a = 8033; +select * from t where a = 8034; +select * from t where a = 8035; +select * from t where a = 8036; +select * from t where a = 8037; +select * from t where a = 8038; +select * from t where a = 8039; +select * from t where a = 8040; +select * from t where a = 8041; +select * from t where a = 8042; +select * from t where a = 8043; +select * from t where a = 8044; +select * from t where a = 8045; +select * from t where a = 8046; +select * from t where a = 8047; +select * from t where a = 8048; +select * from t where a = 8049; +select * from t where a = 8050; +select * from t where a = 8051; +select * from t where a = 8052; +select * from t where a = 8053; +select * from t where a = 8054; +select * from t where a = 8055; +select * from t where a = 8056; +select * from t where a = 8057; +select * from t where a = 8058; +select * from t where a = 8059; +select * from t where a = 8060; +select * from t where a = 8061; +select * from t where a = 8062; +select * from t where a = 8063; +select * from t where a = 8064; +select * from t where a = 8065; +select * from t where a = 8066; +select * from t where a = 8067; +select * from t where a = 8068; +select * from t where a = 8069; +select * from t where a = 8070; +select * from t where a = 8071; +select * from t where a = 8072; +select * from t where a = 8073; +select * from t where a = 8074; +select * from t where a = 8075; +select * from t where a = 8076; +select * from t where a = 8077; +select * from t where a = 8078; +select * from t where a = 8079; +select * from t where a = 8080; +select * from t where a = 8081; +select * from t where a = 8082; +select * from t where a = 8083; +select * from t where a = 8084; +select * from t where a = 8085; +select * from t where a = 8086; +select * from t where a = 8087; +select * from t where a = 8088; +select * from t where a = 8089; +select * from t where a = 8090; +select * from t where a = 8091; +select * from t where a = 8092; +select * from t where a = 8093; +select * from t where a = 8094; +select * from t where a = 8095; +select * from t where a = 8096; +select * from t where a = 8097; +select * from t where a = 8098; +select * from t where a = 8099; +select * from t where a = 8100; +select * from t where a = 8101; +select * from t where a = 8102; +select * from t where a = 8103; +select * from t where a = 8104; +select * from t where a = 8105; +select * from t where a = 8106; +select * from t where a = 8107; +select * from t where a = 8108; +select * from t where a = 8109; +select * from t where a = 8110; +select * from t where a = 8111; +select * from t where a = 8112; +select * from t where a = 8113; +select * from t where a = 8114; +select * from t where a = 8115; +select * from t where a = 8116; +select * from t where a = 8117; +select * from t where a = 8118; +select * from t where a = 8119; +select * from t where a = 8120; +select * from t where a = 8121; +select * from t where a = 8122; +select * from t where a = 8123; +select * from t where a = 8124; +select * from t where a = 8125; +select * from t where a = 8126; +select * from t where a = 8127; +select * from t where a = 8128; +select * from t where a = 8129; +select * from t where a = 8130; +select * from t where a = 8131; +select * from t where a = 8132; +select * from t where a = 8133; +select * from t where a = 8134; +select * from t where a = 8135; +select * from t where a = 8136; +select * from t where a = 8137; +select * from t where a = 8138; +select * from t where a = 8139; +select * from t where a = 8140; +select * from t where a = 8141; +select * from t where a = 8142; +select * from t where a = 8143; +select * from t where a = 8144; +select * from t where a = 8145; +select * from t where a = 8146; +select * from t where a = 8147; +select * from t where a = 8148; +select * from t where a = 8149; +select * from t where a = 8150; +select * from t where a = 8151; +select * from t where a = 8152; +select * from t where a = 8153; +select * from t where a = 8154; +select * from t where a = 8155; +select * from t where a = 8156; +select * from t where a = 8157; +select * from t where a = 8158; +select * from t where a = 8159; +select * from t where a = 8160; +select * from t where a = 8161; +select * from t where a = 8162; +select * from t where a = 8163; +select * from t where a = 8164; +select * from t where a = 8165; +select * from t where a = 8166; +select * from t where a = 8167; +select * from t where a = 8168; +select * from t where a = 8169; +select * from t where a = 8170; +select * from t where a = 8171; +select * from t where a = 8172; +select * from t where a = 8173; +select * from t where a = 8174; +select * from t where a = 8175; +select * from t where a = 8176; +select * from t where a = 8177; +select * from t where a = 8178; +select * from t where a = 8179; +select * from t where a = 8180; +select * from t where a = 8181; +select * from t where a = 8182; +select * from t where a = 8183; +select * from t where a = 8184; +select * from t where a = 8185; +select * from t where a = 8186; +select * from t where a = 8187; +select * from t where a = 8188; +select * from t where a = 8189; +select * from t where a = 8190; +select * from t where a = 8191; +select * from t where a = 8192; +select * from t where a = 8193; +select * from t where a = 8194; +select * from t where a = 8195; +select * from t where a = 8196; +select * from t where a = 8197; +select * from t where a = 8198; +select * from t where a = 8199; +select * from t where a = 8200; +select * from t where a = 8201; +select * from t where a = 8202; +select * from t where a = 8203; +select * from t where a = 8204; +select * from t where a = 8205; +select * from t where a = 8206; +select * from t where a = 8207; +select * from t where a = 8208; +select * from t where a = 8209; +select * from t where a = 8210; +select * from t where a = 8211; +select * from t where a = 8212; +select * from t where a = 8213; +select * from t where a = 8214; +select * from t where a = 8215; +select * from t where a = 8216; +select * from t where a = 8217; +select * from t where a = 8218; +select * from t where a = 8219; +select * from t where a = 8220; +select * from t where a = 8221; +select * from t where a = 8222; +select * from t where a = 8223; +select * from t where a = 8224; +select * from t where a = 8225; +select * from t where a = 8226; +select * from t where a = 8227; +select * from t where a = 8228; +select * from t where a = 8229; +select * from t where a = 8230; +select * from t where a = 8231; +select * from t where a = 8232; +select * from t where a = 8233; +select * from t where a = 8234; +select * from t where a = 8235; +select * from t where a = 8236; +select * from t where a = 8237; +select * from t where a = 8238; +select * from t where a = 8239; +select * from t where a = 8240; +select * from t where a = 8241; +select * from t where a = 8242; +select * from t where a = 8243; +select * from t where a = 8244; +select * from t where a = 8245; +select * from t where a = 8246; +select * from t where a = 8247; +select * from t where a = 8248; +select * from t where a = 8249; +select * from t where a = 8250; +select * from t where a = 8251; +select * from t where a = 8252; +select * from t where a = 8253; +select * from t where a = 8254; +select * from t where a = 8255; +select * from t where a = 8256; +select * from t where a = 8257; +select * from t where a = 8258; +select * from t where a = 8259; +select * from t where a = 8260; +select * from t where a = 8261; +select * from t where a = 8262; +select * from t where a = 8263; +select * from t where a = 8264; +select * from t where a = 8265; +select * from t where a = 8266; +select * from t where a = 8267; +select * from t where a = 8268; +select * from t where a = 8269; +select * from t where a = 8270; +select * from t where a = 8271; +select * from t where a = 8272; +select * from t where a = 8273; +select * from t where a = 8274; +select * from t where a = 8275; +select * from t where a = 8276; +select * from t where a = 8277; +select * from t where a = 8278; +select * from t where a = 8279; +select * from t where a = 8280; +select * from t where a = 8281; +select * from t where a = 8282; +select * from t where a = 8283; +select * from t where a = 8284; +select * from t where a = 8285; +select * from t where a = 8286; +select * from t where a = 8287; +select * from t where a = 8288; +select * from t where a = 8289; +select * from t where a = 8290; +select * from t where a = 8291; +select * from t where a = 8292; +select * from t where a = 8293; +select * from t where a = 8294; +select * from t where a = 8295; +select * from t where a = 8296; +select * from t where a = 8297; +select * from t where a = 8298; +select * from t where a = 8299; +select * from t where a = 8300; +select * from t where a = 8301; +select * from t where a = 8302; +select * from t where a = 8303; +select * from t where a = 8304; +select * from t where a = 8305; +select * from t where a = 8306; +select * from t where a = 8307; +select * from t where a = 8308; +select * from t where a = 8309; +select * from t where a = 8310; +select * from t where a = 8311; +select * from t where a = 8312; +select * from t where a = 8313; +select * from t where a = 8314; +select * from t where a = 8315; +select * from t where a = 8316; +select * from t where a = 8317; +select * from t where a = 8318; +select * from t where a = 8319; +select * from t where a = 8320; +select * from t where a = 8321; +select * from t where a = 8322; +select * from t where a = 8323; +select * from t where a = 8324; +select * from t where a = 8325; +select * from t where a = 8326; +select * from t where a = 8327; +select * from t where a = 8328; +select * from t where a = 8329; +select * from t where a = 8330; +select * from t where a = 8331; +select * from t where a = 8332; +select * from t where a = 8333; +select * from t where a = 8334; +select * from t where a = 8335; +select * from t where a = 8336; +select * from t where a = 8337; +select * from t where a = 8338; +select * from t where a = 8339; +select * from t where a = 8340; +select * from t where a = 8341; +select * from t where a = 8342; +select * from t where a = 8343; +select * from t where a = 8344; +select * from t where a = 8345; +select * from t where a = 8346; +select * from t where a = 8347; +select * from t where a = 8348; +select * from t where a = 8349; +select * from t where a = 8350; +select * from t where a = 8351; +select * from t where a = 8352; +select * from t where a = 8353; +select * from t where a = 8354; +select * from t where a = 8355; +select * from t where a = 8356; +select * from t where a = 8357; +select * from t where a = 8358; +select * from t where a = 8359; +select * from t where a = 8360; +select * from t where a = 8361; +select * from t where a = 8362; +select * from t where a = 8363; +select * from t where a = 8364; +select * from t where a = 8365; +select * from t where a = 8366; +select * from t where a = 8367; +select * from t where a = 8368; +select * from t where a = 8369; +select * from t where a = 8370; +select * from t where a = 8371; +select * from t where a = 8372; +select * from t where a = 8373; +select * from t where a = 8374; +select * from t where a = 8375; +select * from t where a = 8376; +select * from t where a = 8377; +select * from t where a = 8378; +select * from t where a = 8379; +select * from t where a = 8380; +select * from t where a = 8381; +select * from t where a = 8382; +select * from t where a = 8383; +select * from t where a = 8384; +select * from t where a = 8385; +select * from t where a = 8386; +select * from t where a = 8387; +select * from t where a = 8388; +select * from t where a = 8389; +select * from t where a = 8390; +select * from t where a = 8391; +select * from t where a = 8392; +select * from t where a = 8393; +select * from t where a = 8394; +select * from t where a = 8395; +select * from t where a = 8396; +select * from t where a = 8397; +select * from t where a = 8398; +select * from t where a = 8399; +select * from t where a = 8400; +select * from t where a = 8401; +select * from t where a = 8402; +select * from t where a = 8403; +select * from t where a = 8404; +select * from t where a = 8405; +select * from t where a = 8406; +select * from t where a = 8407; +select * from t where a = 8408; +select * from t where a = 8409; +select * from t where a = 8410; +select * from t where a = 8411; +select * from t where a = 8412; +select * from t where a = 8413; +select * from t where a = 8414; +select * from t where a = 8415; +select * from t where a = 8416; +select * from t where a = 8417; +select * from t where a = 8418; +select * from t where a = 8419; +select * from t where a = 8420; +select * from t where a = 8421; +select * from t where a = 8422; +select * from t where a = 8423; +select * from t where a = 8424; +select * from t where a = 8425; +select * from t where a = 8426; +select * from t where a = 8427; +select * from t where a = 8428; +select * from t where a = 8429; +select * from t where a = 8430; +select * from t where a = 8431; +select * from t where a = 8432; +select * from t where a = 8433; +select * from t where a = 8434; +select * from t where a = 8435; +select * from t where a = 8436; +select * from t where a = 8437; +select * from t where a = 8438; +select * from t where a = 8439; +select * from t where a = 8440; +select * from t where a = 8441; +select * from t where a = 8442; +select * from t where a = 8443; +select * from t where a = 8444; +select * from t where a = 8445; +select * from t where a = 8446; +select * from t where a = 8447; +select * from t where a = 8448; +select * from t where a = 8449; +select * from t where a = 8450; +select * from t where a = 8451; +select * from t where a = 8452; +select * from t where a = 8453; +select * from t where a = 8454; +select * from t where a = 8455; +select * from t where a = 8456; +select * from t where a = 8457; +select * from t where a = 8458; +select * from t where a = 8459; +select * from t where a = 8460; +select * from t where a = 8461; +select * from t where a = 8462; +select * from t where a = 8463; +select * from t where a = 8464; +select * from t where a = 8465; +select * from t where a = 8466; +select * from t where a = 8467; +select * from t where a = 8468; +select * from t where a = 8469; +select * from t where a = 8470; +select * from t where a = 8471; +select * from t where a = 8472; +select * from t where a = 8473; +select * from t where a = 8474; +select * from t where a = 8475; +select * from t where a = 8476; +select * from t where a = 8477; +select * from t where a = 8478; +select * from t where a = 8479; +select * from t where a = 8480; +select * from t where a = 8481; +select * from t where a = 8482; +select * from t where a = 8483; +select * from t where a = 8484; +select * from t where a = 8485; +select * from t where a = 8486; +select * from t where a = 8487; +select * from t where a = 8488; +select * from t where a = 8489; +select * from t where a = 8490; +select * from t where a = 8491; +select * from t where a = 8492; +select * from t where a = 8493; +select * from t where a = 8494; +select * from t where a = 8495; +select * from t where a = 8496; +select * from t where a = 8497; +select * from t where a = 8498; +select * from t where a = 8499; +select * from t where a = 8500; +select * from t where a = 8501; +select * from t where a = 8502; +select * from t where a = 8503; +select * from t where a = 8504; +select * from t where a = 8505; +select * from t where a = 8506; +select * from t where a = 8507; +select * from t where a = 8508; +select * from t where a = 8509; +select * from t where a = 8510; +select * from t where a = 8511; +select * from t where a = 8512; +select * from t where a = 8513; +select * from t where a = 8514; +select * from t where a = 8515; +select * from t where a = 8516; +select * from t where a = 8517; +select * from t where a = 8518; +select * from t where a = 8519; +select * from t where a = 8520; +select * from t where a = 8521; +select * from t where a = 8522; +select * from t where a = 8523; +select * from t where a = 8524; +select * from t where a = 8525; +select * from t where a = 8526; +select * from t where a = 8527; +select * from t where a = 8528; +select * from t where a = 8529; +select * from t where a = 8530; +select * from t where a = 8531; +select * from t where a = 8532; +select * from t where a = 8533; +select * from t where a = 8534; +select * from t where a = 8535; +select * from t where a = 8536; +select * from t where a = 8537; +select * from t where a = 8538; +select * from t where a = 8539; +select * from t where a = 8540; +select * from t where a = 8541; +select * from t where a = 8542; +select * from t where a = 8543; +select * from t where a = 8544; +select * from t where a = 8545; +select * from t where a = 8546; +select * from t where a = 8547; +select * from t where a = 8548; +select * from t where a = 8549; +select * from t where a = 8550; +select * from t where a = 8551; +select * from t where a = 8552; +select * from t where a = 8553; +select * from t where a = 8554; +select * from t where a = 8555; +select * from t where a = 8556; +select * from t where a = 8557; +select * from t where a = 8558; +select * from t where a = 8559; +select * from t where a = 8560; +select * from t where a = 8561; +select * from t where a = 8562; +select * from t where a = 8563; +select * from t where a = 8564; +select * from t where a = 8565; +select * from t where a = 8566; +select * from t where a = 8567; +select * from t where a = 8568; +select * from t where a = 8569; +select * from t where a = 8570; +select * from t where a = 8571; +select * from t where a = 8572; +select * from t where a = 8573; +select * from t where a = 8574; +select * from t where a = 8575; +select * from t where a = 8576; +select * from t where a = 8577; +select * from t where a = 8578; +select * from t where a = 8579; +select * from t where a = 8580; +select * from t where a = 8581; +select * from t where a = 8582; +select * from t where a = 8583; +select * from t where a = 8584; +select * from t where a = 8585; +select * from t where a = 8586; +select * from t where a = 8587; +select * from t where a = 8588; +select * from t where a = 8589; +select * from t where a = 8590; +select * from t where a = 8591; +select * from t where a = 8592; +select * from t where a = 8593; +select * from t where a = 8594; +select * from t where a = 8595; +select * from t where a = 8596; +select * from t where a = 8597; +select * from t where a = 8598; +select * from t where a = 8599; +select * from t where a = 8600; +select * from t where a = 8601; +select * from t where a = 8602; +select * from t where a = 8603; +select * from t where a = 8604; +select * from t where a = 8605; +select * from t where a = 8606; +select * from t where a = 8607; +select * from t where a = 8608; +select * from t where a = 8609; +select * from t where a = 8610; +select * from t where a = 8611; +select * from t where a = 8612; +select * from t where a = 8613; +select * from t where a = 8614; +select * from t where a = 8615; +select * from t where a = 8616; +select * from t where a = 8617; +select * from t where a = 8618; +select * from t where a = 8619; +select * from t where a = 8620; +select * from t where a = 8621; +select * from t where a = 8622; +select * from t where a = 8623; +select * from t where a = 8624; +select * from t where a = 8625; +select * from t where a = 8626; +select * from t where a = 8627; +select * from t where a = 8628; +select * from t where a = 8629; +select * from t where a = 8630; +select * from t where a = 8631; +select * from t where a = 8632; +select * from t where a = 8633; +select * from t where a = 8634; +select * from t where a = 8635; +select * from t where a = 8636; +select * from t where a = 8637; +select * from t where a = 8638; +select * from t where a = 8639; +select * from t where a = 8640; +select * from t where a = 8641; +select * from t where a = 8642; +select * from t where a = 8643; +select * from t where a = 8644; +select * from t where a = 8645; +select * from t where a = 8646; +select * from t where a = 8647; +select * from t where a = 8648; +select * from t where a = 8649; +select * from t where a = 8650; +select * from t where a = 8651; +select * from t where a = 8652; +select * from t where a = 8653; +select * from t where a = 8654; +select * from t where a = 8655; +select * from t where a = 8656; +select * from t where a = 8657; +select * from t where a = 8658; +select * from t where a = 8659; +select * from t where a = 8660; +select * from t where a = 8661; +select * from t where a = 8662; +select * from t where a = 8663; +select * from t where a = 8664; +select * from t where a = 8665; +select * from t where a = 8666; +select * from t where a = 8667; +select * from t where a = 8668; +select * from t where a = 8669; +select * from t where a = 8670; +select * from t where a = 8671; +select * from t where a = 8672; +select * from t where a = 8673; +select * from t where a = 8674; +select * from t where a = 8675; +select * from t where a = 8676; +select * from t where a = 8677; +select * from t where a = 8678; +select * from t where a = 8679; +select * from t where a = 8680; +select * from t where a = 8681; +select * from t where a = 8682; +select * from t where a = 8683; +select * from t where a = 8684; +select * from t where a = 8685; +select * from t where a = 8686; +select * from t where a = 8687; +select * from t where a = 8688; +select * from t where a = 8689; +select * from t where a = 8690; +select * from t where a = 8691; +select * from t where a = 8692; +select * from t where a = 8693; +select * from t where a = 8694; +select * from t where a = 8695; +select * from t where a = 8696; +select * from t where a = 8697; +select * from t where a = 8698; +select * from t where a = 8699; +select * from t where a = 8700; +select * from t where a = 8701; +select * from t where a = 8702; +select * from t where a = 8703; +select * from t where a = 8704; +select * from t where a = 8705; +select * from t where a = 8706; +select * from t where a = 8707; +select * from t where a = 8708; +select * from t where a = 8709; +select * from t where a = 8710; +select * from t where a = 8711; +select * from t where a = 8712; +select * from t where a = 8713; +select * from t where a = 8714; +select * from t where a = 8715; +select * from t where a = 8716; +select * from t where a = 8717; +select * from t where a = 8718; +select * from t where a = 8719; +select * from t where a = 8720; +select * from t where a = 8721; +select * from t where a = 8722; +select * from t where a = 8723; +select * from t where a = 8724; +select * from t where a = 8725; +select * from t where a = 8726; +select * from t where a = 8727; +select * from t where a = 8728; +select * from t where a = 8729; +select * from t where a = 8730; +select * from t where a = 8731; +select * from t where a = 8732; +select * from t where a = 8733; +select * from t where a = 8734; +select * from t where a = 8735; +select * from t where a = 8736; +select * from t where a = 8737; +select * from t where a = 8738; +select * from t where a = 8739; +select * from t where a = 8740; +select * from t where a = 8741; +select * from t where a = 8742; +select * from t where a = 8743; +select * from t where a = 8744; +select * from t where a = 8745; +select * from t where a = 8746; +select * from t where a = 8747; +select * from t where a = 8748; +select * from t where a = 8749; +select * from t where a = 8750; +select * from t where a = 8751; +select * from t where a = 8752; +select * from t where a = 8753; +select * from t where a = 8754; +select * from t where a = 8755; +select * from t where a = 8756; +select * from t where a = 8757; +select * from t where a = 8758; +select * from t where a = 8759; +select * from t where a = 8760; +select * from t where a = 8761; +select * from t where a = 8762; +select * from t where a = 8763; +select * from t where a = 8764; +select * from t where a = 8765; +select * from t where a = 8766; +select * from t where a = 8767; +select * from t where a = 8768; +select * from t where a = 8769; +select * from t where a = 8770; +select * from t where a = 8771; +select * from t where a = 8772; +select * from t where a = 8773; +select * from t where a = 8774; +select * from t where a = 8775; +select * from t where a = 8776; +select * from t where a = 8777; +select * from t where a = 8778; +select * from t where a = 8779; +select * from t where a = 8780; +select * from t where a = 8781; +select * from t where a = 8782; +select * from t where a = 8783; +select * from t where a = 8784; +select * from t where a = 8785; +select * from t where a = 8786; +select * from t where a = 8787; +select * from t where a = 8788; +select * from t where a = 8789; +select * from t where a = 8790; +select * from t where a = 8791; +select * from t where a = 8792; +select * from t where a = 8793; +select * from t where a = 8794; +select * from t where a = 8795; +select * from t where a = 8796; +select * from t where a = 8797; +select * from t where a = 8798; +select * from t where a = 8799; +select * from t where a = 8800; +select * from t where a = 8801; +select * from t where a = 8802; +select * from t where a = 8803; +select * from t where a = 8804; +select * from t where a = 8805; +select * from t where a = 8806; +select * from t where a = 8807; +select * from t where a = 8808; +select * from t where a = 8809; +select * from t where a = 8810; +select * from t where a = 8811; +select * from t where a = 8812; +select * from t where a = 8813; +select * from t where a = 8814; +select * from t where a = 8815; +select * from t where a = 8816; +select * from t where a = 8817; +select * from t where a = 8818; +select * from t where a = 8819; +select * from t where a = 8820; +select * from t where a = 8821; +select * from t where a = 8822; +select * from t where a = 8823; +select * from t where a = 8824; +select * from t where a = 8825; +select * from t where a = 8826; +select * from t where a = 8827; +select * from t where a = 8828; +select * from t where a = 8829; +select * from t where a = 8830; +select * from t where a = 8831; +select * from t where a = 8832; +select * from t where a = 8833; +select * from t where a = 8834; +select * from t where a = 8835; +select * from t where a = 8836; +select * from t where a = 8837; +select * from t where a = 8838; +select * from t where a = 8839; +select * from t where a = 8840; +select * from t where a = 8841; +select * from t where a = 8842; +select * from t where a = 8843; +select * from t where a = 8844; +select * from t where a = 8845; +select * from t where a = 8846; +select * from t where a = 8847; +select * from t where a = 8848; +select * from t where a = 8849; +select * from t where a = 8850; +select * from t where a = 8851; +select * from t where a = 8852; +select * from t where a = 8853; +select * from t where a = 8854; +select * from t where a = 8855; +select * from t where a = 8856; +select * from t where a = 8857; +select * from t where a = 8858; +select * from t where a = 8859; +select * from t where a = 8860; +select * from t where a = 8861; +select * from t where a = 8862; +select * from t where a = 8863; +select * from t where a = 8864; +select * from t where a = 8865; +select * from t where a = 8866; +select * from t where a = 8867; +select * from t where a = 8868; +select * from t where a = 8869; +select * from t where a = 8870; +select * from t where a = 8871; +select * from t where a = 8872; +select * from t where a = 8873; +select * from t where a = 8874; +select * from t where a = 8875; +select * from t where a = 8876; +select * from t where a = 8877; +select * from t where a = 8878; +select * from t where a = 8879; +select * from t where a = 8880; +select * from t where a = 8881; +select * from t where a = 8882; +select * from t where a = 8883; +select * from t where a = 8884; +select * from t where a = 8885; +select * from t where a = 8886; +select * from t where a = 8887; +select * from t where a = 8888; +select * from t where a = 8889; +select * from t where a = 8890; +select * from t where a = 8891; +select * from t where a = 8892; +select * from t where a = 8893; +select * from t where a = 8894; +select * from t where a = 8895; +select * from t where a = 8896; +select * from t where a = 8897; +select * from t where a = 8898; +select * from t where a = 8899; +select * from t where a = 8900; +select * from t where a = 8901; +select * from t where a = 8902; +select * from t where a = 8903; +select * from t where a = 8904; +select * from t where a = 8905; +select * from t where a = 8906; +select * from t where a = 8907; +select * from t where a = 8908; +select * from t where a = 8909; +select * from t where a = 8910; +select * from t where a = 8911; +select * from t where a = 8912; +select * from t where a = 8913; +select * from t where a = 8914; +select * from t where a = 8915; +select * from t where a = 8916; +select * from t where a = 8917; +select * from t where a = 8918; +select * from t where a = 8919; +select * from t where a = 8920; +select * from t where a = 8921; +select * from t where a = 8922; +select * from t where a = 8923; +select * from t where a = 8924; +select * from t where a = 8925; +select * from t where a = 8926; +select * from t where a = 8927; +select * from t where a = 8928; +select * from t where a = 8929; +select * from t where a = 8930; +select * from t where a = 8931; +select * from t where a = 8932; +select * from t where a = 8933; +select * from t where a = 8934; +select * from t where a = 8935; +select * from t where a = 8936; +select * from t where a = 8937; +select * from t where a = 8938; +select * from t where a = 8939; +select * from t where a = 8940; +select * from t where a = 8941; +select * from t where a = 8942; +select * from t where a = 8943; +select * from t where a = 8944; +select * from t where a = 8945; +select * from t where a = 8946; +select * from t where a = 8947; +select * from t where a = 8948; +select * from t where a = 8949; +select * from t where a = 8950; +select * from t where a = 8951; +select * from t where a = 8952; +select * from t where a = 8953; +select * from t where a = 8954; +select * from t where a = 8955; +select * from t where a = 8956; +select * from t where a = 8957; +select * from t where a = 8958; +select * from t where a = 8959; +select * from t where a = 8960; +select * from t where a = 8961; +select * from t where a = 8962; +select * from t where a = 8963; +select * from t where a = 8964; +select * from t where a = 8965; +select * from t where a = 8966; +select * from t where a = 8967; +select * from t where a = 8968; +select * from t where a = 8969; +select * from t where a = 8970; +select * from t where a = 8971; +select * from t where a = 8972; +select * from t where a = 8973; +select * from t where a = 8974; +select * from t where a = 8975; +select * from t where a = 8976; +select * from t where a = 8977; +select * from t where a = 8978; +select * from t where a = 8979; +select * from t where a = 8980; +select * from t where a = 8981; +select * from t where a = 8982; +select * from t where a = 8983; +select * from t where a = 8984; +select * from t where a = 8985; +select * from t where a = 8986; +select * from t where a = 8987; +select * from t where a = 8988; +select * from t where a = 8989; +select * from t where a = 8990; +select * from t where a = 8991; +select * from t where a = 8992; +select * from t where a = 8993; +select * from t where a = 8994; +select * from t where a = 8995; +select * from t where a = 8996; +select * from t where a = 8997; +select * from t where a = 8998; +select * from t where a = 8999; +select * from t where a = 9000; +select * from t where a = 9001; +select * from t where a = 9002; +select * from t where a = 9003; +select * from t where a = 9004; +select * from t where a = 9005; +select * from t where a = 9006; +select * from t where a = 9007; +select * from t where a = 9008; +select * from t where a = 9009; +select * from t where a = 9010; +select * from t where a = 9011; +select * from t where a = 9012; +select * from t where a = 9013; +select * from t where a = 9014; +select * from t where a = 9015; +select * from t where a = 9016; +select * from t where a = 9017; +select * from t where a = 9018; +select * from t where a = 9019; +select * from t where a = 9020; +select * from t where a = 9021; +select * from t where a = 9022; +select * from t where a = 9023; +select * from t where a = 9024; +select * from t where a = 9025; +select * from t where a = 9026; +select * from t where a = 9027; +select * from t where a = 9028; +select * from t where a = 9029; +select * from t where a = 9030; +select * from t where a = 9031; +select * from t where a = 9032; +select * from t where a = 9033; +select * from t where a = 9034; +select * from t where a = 9035; +select * from t where a = 9036; +select * from t where a = 9037; +select * from t where a = 9038; +select * from t where a = 9039; +select * from t where a = 9040; +select * from t where a = 9041; +select * from t where a = 9042; +select * from t where a = 9043; +select * from t where a = 9044; +select * from t where a = 9045; +select * from t where a = 9046; +select * from t where a = 9047; +select * from t where a = 9048; +select * from t where a = 9049; +select * from t where a = 9050; +select * from t where a = 9051; +select * from t where a = 9052; +select * from t where a = 9053; +select * from t where a = 9054; +select * from t where a = 9055; +select * from t where a = 9056; +select * from t where a = 9057; +select * from t where a = 9058; +select * from t where a = 9059; +select * from t where a = 9060; +select * from t where a = 9061; +select * from t where a = 9062; +select * from t where a = 9063; +select * from t where a = 9064; +select * from t where a = 9065; +select * from t where a = 9066; +select * from t where a = 9067; +select * from t where a = 9068; +select * from t where a = 9069; +select * from t where a = 9070; +select * from t where a = 9071; +select * from t where a = 9072; +select * from t where a = 9073; +select * from t where a = 9074; +select * from t where a = 9075; +select * from t where a = 9076; +select * from t where a = 9077; +select * from t where a = 9078; +select * from t where a = 9079; +select * from t where a = 9080; +select * from t where a = 9081; +select * from t where a = 9082; +select * from t where a = 9083; +select * from t where a = 9084; +select * from t where a = 9085; +select * from t where a = 9086; +select * from t where a = 9087; +select * from t where a = 9088; +select * from t where a = 9089; +select * from t where a = 9090; +select * from t where a = 9091; +select * from t where a = 9092; +select * from t where a = 9093; +select * from t where a = 9094; +select * from t where a = 9095; +select * from t where a = 9096; +select * from t where a = 9097; +select * from t where a = 9098; +select * from t where a = 9099; +select * from t where a = 9100; +select * from t where a = 9101; +select * from t where a = 9102; +select * from t where a = 9103; +select * from t where a = 9104; +select * from t where a = 9105; +select * from t where a = 9106; +select * from t where a = 9107; +select * from t where a = 9108; +select * from t where a = 9109; +select * from t where a = 9110; +select * from t where a = 9111; +select * from t where a = 9112; +select * from t where a = 9113; +select * from t where a = 9114; +select * from t where a = 9115; +select * from t where a = 9116; +select * from t where a = 9117; +select * from t where a = 9118; +select * from t where a = 9119; +select * from t where a = 9120; +select * from t where a = 9121; +select * from t where a = 9122; +select * from t where a = 9123; +select * from t where a = 9124; +select * from t where a = 9125; +select * from t where a = 9126; +select * from t where a = 9127; +select * from t where a = 9128; +select * from t where a = 9129; +select * from t where a = 9130; +select * from t where a = 9131; +select * from t where a = 9132; +select * from t where a = 9133; +select * from t where a = 9134; +select * from t where a = 9135; +select * from t where a = 9136; +select * from t where a = 9137; +select * from t where a = 9138; +select * from t where a = 9139; +select * from t where a = 9140; +select * from t where a = 9141; +select * from t where a = 9142; +select * from t where a = 9143; +select * from t where a = 9144; +select * from t where a = 9145; +select * from t where a = 9146; +select * from t where a = 9147; +select * from t where a = 9148; +select * from t where a = 9149; +select * from t where a = 9150; +select * from t where a = 9151; +select * from t where a = 9152; +select * from t where a = 9153; +select * from t where a = 9154; +select * from t where a = 9155; +select * from t where a = 9156; +select * from t where a = 9157; +select * from t where a = 9158; +select * from t where a = 9159; +select * from t where a = 9160; +select * from t where a = 9161; +select * from t where a = 9162; +select * from t where a = 9163; +select * from t where a = 9164; +select * from t where a = 9165; +select * from t where a = 9166; +select * from t where a = 9167; +select * from t where a = 9168; +select * from t where a = 9169; +select * from t where a = 9170; +select * from t where a = 9171; +select * from t where a = 9172; +select * from t where a = 9173; +select * from t where a = 9174; +select * from t where a = 9175; +select * from t where a = 9176; +select * from t where a = 9177; +select * from t where a = 9178; +select * from t where a = 9179; +select * from t where a = 9180; +select * from t where a = 9181; +select * from t where a = 9182; +select * from t where a = 9183; +select * from t where a = 9184; +select * from t where a = 9185; +select * from t where a = 9186; +select * from t where a = 9187; +select * from t where a = 9188; +select * from t where a = 9189; +select * from t where a = 9190; +select * from t where a = 9191; +select * from t where a = 9192; +select * from t where a = 9193; +select * from t where a = 9194; +select * from t where a = 9195; +select * from t where a = 9196; +select * from t where a = 9197; +select * from t where a = 9198; +select * from t where a = 9199; +select * from t where a = 9200; +select * from t where a = 9201; +select * from t where a = 9202; +select * from t where a = 9203; +select * from t where a = 9204; +select * from t where a = 9205; +select * from t where a = 9206; +select * from t where a = 9207; +select * from t where a = 9208; +select * from t where a = 9209; +select * from t where a = 9210; +select * from t where a = 9211; +select * from t where a = 9212; +select * from t where a = 9213; +select * from t where a = 9214; +select * from t where a = 9215; +select * from t where a = 9216; +select * from t where a = 9217; +select * from t where a = 9218; +select * from t where a = 9219; +select * from t where a = 9220; +select * from t where a = 9221; +select * from t where a = 9222; +select * from t where a = 9223; +select * from t where a = 9224; +select * from t where a = 9225; +select * from t where a = 9226; +select * from t where a = 9227; +select * from t where a = 9228; +select * from t where a = 9229; +select * from t where a = 9230; +select * from t where a = 9231; +select * from t where a = 9232; +select * from t where a = 9233; +select * from t where a = 9234; +select * from t where a = 9235; +select * from t where a = 9236; +select * from t where a = 9237; +select * from t where a = 9238; +select * from t where a = 9239; +select * from t where a = 9240; +select * from t where a = 9241; +select * from t where a = 9242; +select * from t where a = 9243; +select * from t where a = 9244; +select * from t where a = 9245; +select * from t where a = 9246; +select * from t where a = 9247; +select * from t where a = 9248; +select * from t where a = 9249; +select * from t where a = 9250; +select * from t where a = 9251; +select * from t where a = 9252; +select * from t where a = 9253; +select * from t where a = 9254; +select * from t where a = 9255; +select * from t where a = 9256; +select * from t where a = 9257; +select * from t where a = 9258; +select * from t where a = 9259; +select * from t where a = 9260; +select * from t where a = 9261; +select * from t where a = 9262; +select * from t where a = 9263; +select * from t where a = 9264; +select * from t where a = 9265; +select * from t where a = 9266; +select * from t where a = 9267; +select * from t where a = 9268; +select * from t where a = 9269; +select * from t where a = 9270; +select * from t where a = 9271; +select * from t where a = 9272; +select * from t where a = 9273; +select * from t where a = 9274; +select * from t where a = 9275; +select * from t where a = 9276; +select * from t where a = 9277; +select * from t where a = 9278; +select * from t where a = 9279; +select * from t where a = 9280; +select * from t where a = 9281; +select * from t where a = 9282; +select * from t where a = 9283; +select * from t where a = 9284; +select * from t where a = 9285; +select * from t where a = 9286; +select * from t where a = 9287; +select * from t where a = 9288; +select * from t where a = 9289; +select * from t where a = 9290; +select * from t where a = 9291; +select * from t where a = 9292; +select * from t where a = 9293; +select * from t where a = 9294; +select * from t where a = 9295; +select * from t where a = 9296; +select * from t where a = 9297; +select * from t where a = 9298; +select * from t where a = 9299; +select * from t where a = 9300; +select * from t where a = 9301; +select * from t where a = 9302; +select * from t where a = 9303; +select * from t where a = 9304; +select * from t where a = 9305; +select * from t where a = 9306; +select * from t where a = 9307; +select * from t where a = 9308; +select * from t where a = 9309; +select * from t where a = 9310; +select * from t where a = 9311; +select * from t where a = 9312; +select * from t where a = 9313; +select * from t where a = 9314; +select * from t where a = 9315; +select * from t where a = 9316; +select * from t where a = 9317; +select * from t where a = 9318; +select * from t where a = 9319; +select * from t where a = 9320; +select * from t where a = 9321; +select * from t where a = 9322; +select * from t where a = 9323; +select * from t where a = 9324; +select * from t where a = 9325; +select * from t where a = 9326; +select * from t where a = 9327; +select * from t where a = 9328; +select * from t where a = 9329; +select * from t where a = 9330; +select * from t where a = 9331; +select * from t where a = 9332; +select * from t where a = 9333; +select * from t where a = 9334; +select * from t where a = 9335; +select * from t where a = 9336; +select * from t where a = 9337; +select * from t where a = 9338; +select * from t where a = 9339; +select * from t where a = 9340; +select * from t where a = 9341; +select * from t where a = 9342; +select * from t where a = 9343; +select * from t where a = 9344; +select * from t where a = 9345; +select * from t where a = 9346; +select * from t where a = 9347; +select * from t where a = 9348; +select * from t where a = 9349; +select * from t where a = 9350; +select * from t where a = 9351; +select * from t where a = 9352; +select * from t where a = 9353; +select * from t where a = 9354; +select * from t where a = 9355; +select * from t where a = 9356; +select * from t where a = 9357; +select * from t where a = 9358; +select * from t where a = 9359; +select * from t where a = 9360; +select * from t where a = 9361; +select * from t where a = 9362; +select * from t where a = 9363; +select * from t where a = 9364; +select * from t where a = 9365; +select * from t where a = 9366; +select * from t where a = 9367; +select * from t where a = 9368; +select * from t where a = 9369; +select * from t where a = 9370; +select * from t where a = 9371; +select * from t where a = 9372; +select * from t where a = 9373; +select * from t where a = 9374; +select * from t where a = 9375; +select * from t where a = 9376; +select * from t where a = 9377; +select * from t where a = 9378; +select * from t where a = 9379; +select * from t where a = 9380; +select * from t where a = 9381; +select * from t where a = 9382; +select * from t where a = 9383; +select * from t where a = 9384; +select * from t where a = 9385; +select * from t where a = 9386; +select * from t where a = 9387; +select * from t where a = 9388; +select * from t where a = 9389; +select * from t where a = 9390; +select * from t where a = 9391; +select * from t where a = 9392; +select * from t where a = 9393; +select * from t where a = 9394; +select * from t where a = 9395; +select * from t where a = 9396; +select * from t where a = 9397; +select * from t where a = 9398; +select * from t where a = 9399; +select * from t where a = 9400; +select * from t where a = 9401; +select * from t where a = 9402; +select * from t where a = 9403; +select * from t where a = 9404; +select * from t where a = 9405; +select * from t where a = 9406; +select * from t where a = 9407; +select * from t where a = 9408; +select * from t where a = 9409; +select * from t where a = 9410; +select * from t where a = 9411; +select * from t where a = 9412; +select * from t where a = 9413; +select * from t where a = 9414; +select * from t where a = 9415; +select * from t where a = 9416; +select * from t where a = 9417; +select * from t where a = 9418; +select * from t where a = 9419; +select * from t where a = 9420; +select * from t where a = 9421; +select * from t where a = 9422; +select * from t where a = 9423; +select * from t where a = 9424; +select * from t where a = 9425; +select * from t where a = 9426; +select * from t where a = 9427; +select * from t where a = 9428; +select * from t where a = 9429; +select * from t where a = 9430; +select * from t where a = 9431; +select * from t where a = 9432; +select * from t where a = 9433; +select * from t where a = 9434; +select * from t where a = 9435; +select * from t where a = 9436; +select * from t where a = 9437; +select * from t where a = 9438; +select * from t where a = 9439; +select * from t where a = 9440; +select * from t where a = 9441; +select * from t where a = 9442; +select * from t where a = 9443; +select * from t where a = 9444; +select * from t where a = 9445; +select * from t where a = 9446; +select * from t where a = 9447; +select * from t where a = 9448; +select * from t where a = 9449; +select * from t where a = 9450; +select * from t where a = 9451; +select * from t where a = 9452; +select * from t where a = 9453; +select * from t where a = 9454; +select * from t where a = 9455; +select * from t where a = 9456; +select * from t where a = 9457; +select * from t where a = 9458; +select * from t where a = 9459; +select * from t where a = 9460; +select * from t where a = 9461; +select * from t where a = 9462; +select * from t where a = 9463; +select * from t where a = 9464; +select * from t where a = 9465; +select * from t where a = 9466; +select * from t where a = 9467; +select * from t where a = 9468; +select * from t where a = 9469; +select * from t where a = 9470; +select * from t where a = 9471; +select * from t where a = 9472; +select * from t where a = 9473; +select * from t where a = 9474; +select * from t where a = 9475; +select * from t where a = 9476; +select * from t where a = 9477; +select * from t where a = 9478; +select * from t where a = 9479; +select * from t where a = 9480; +select * from t where a = 9481; +select * from t where a = 9482; +select * from t where a = 9483; +select * from t where a = 9484; +select * from t where a = 9485; +select * from t where a = 9486; +select * from t where a = 9487; +select * from t where a = 9488; +select * from t where a = 9489; +select * from t where a = 9490; +select * from t where a = 9491; +select * from t where a = 9492; +select * from t where a = 9493; +select * from t where a = 9494; +select * from t where a = 9495; +select * from t where a = 9496; +select * from t where a = 9497; +select * from t where a = 9498; +select * from t where a = 9499; +select * from t where a = 9500; +select * from t where a = 9501; +select * from t where a = 9502; +select * from t where a = 9503; +select * from t where a = 9504; +select * from t where a = 9505; +select * from t where a = 9506; +select * from t where a = 9507; +select * from t where a = 9508; +select * from t where a = 9509; +select * from t where a = 9510; +select * from t where a = 9511; +select * from t where a = 9512; +select * from t where a = 9513; +select * from t where a = 9514; +select * from t where a = 9515; +select * from t where a = 9516; +select * from t where a = 9517; +select * from t where a = 9518; +select * from t where a = 9519; +select * from t where a = 9520; +select * from t where a = 9521; +select * from t where a = 9522; +select * from t where a = 9523; +select * from t where a = 9524; +select * from t where a = 9525; +select * from t where a = 9526; +select * from t where a = 9527; +select * from t where a = 9528; +select * from t where a = 9529; +select * from t where a = 9530; +select * from t where a = 9531; +select * from t where a = 9532; +select * from t where a = 9533; +select * from t where a = 9534; +select * from t where a = 9535; +select * from t where a = 9536; +select * from t where a = 9537; +select * from t where a = 9538; +select * from t where a = 9539; +select * from t where a = 9540; +select * from t where a = 9541; +select * from t where a = 9542; +select * from t where a = 9543; +select * from t where a = 9544; +select * from t where a = 9545; +select * from t where a = 9546; +select * from t where a = 9547; +select * from t where a = 9548; +select * from t where a = 9549; +select * from t where a = 9550; +select * from t where a = 9551; +select * from t where a = 9552; +select * from t where a = 9553; +select * from t where a = 9554; +select * from t where a = 9555; +select * from t where a = 9556; +select * from t where a = 9557; +select * from t where a = 9558; +select * from t where a = 9559; +select * from t where a = 9560; +select * from t where a = 9561; +select * from t where a = 9562; +select * from t where a = 9563; +select * from t where a = 9564; +select * from t where a = 9565; +select * from t where a = 9566; +select * from t where a = 9567; +select * from t where a = 9568; +select * from t where a = 9569; +select * from t where a = 9570; +select * from t where a = 9571; +select * from t where a = 9572; +select * from t where a = 9573; +select * from t where a = 9574; +select * from t where a = 9575; +select * from t where a = 9576; +select * from t where a = 9577; +select * from t where a = 9578; +select * from t where a = 9579; +select * from t where a = 9580; +select * from t where a = 9581; +select * from t where a = 9582; +select * from t where a = 9583; +select * from t where a = 9584; +select * from t where a = 9585; +select * from t where a = 9586; +select * from t where a = 9587; +select * from t where a = 9588; +select * from t where a = 9589; +select * from t where a = 9590; +select * from t where a = 9591; +select * from t where a = 9592; +select * from t where a = 9593; +select * from t where a = 9594; +select * from t where a = 9595; +select * from t where a = 9596; +select * from t where a = 9597; +select * from t where a = 9598; +select * from t where a = 9599; +select * from t where a = 9600; +select * from t where a = 9601; +select * from t where a = 9602; +select * from t where a = 9603; +select * from t where a = 9604; +select * from t where a = 9605; +select * from t where a = 9606; +select * from t where a = 9607; +select * from t where a = 9608; +select * from t where a = 9609; +select * from t where a = 9610; +select * from t where a = 9611; +select * from t where a = 9612; +select * from t where a = 9613; +select * from t where a = 9614; +select * from t where a = 9615; +select * from t where a = 9616; +select * from t where a = 9617; +select * from t where a = 9618; +select * from t where a = 9619; +select * from t where a = 9620; +select * from t where a = 9621; +select * from t where a = 9622; +select * from t where a = 9623; +select * from t where a = 9624; +select * from t where a = 9625; +select * from t where a = 9626; +select * from t where a = 9627; +select * from t where a = 9628; +select * from t where a = 9629; +select * from t where a = 9630; +select * from t where a = 9631; +select * from t where a = 9632; +select * from t where a = 9633; +select * from t where a = 9634; +select * from t where a = 9635; +select * from t where a = 9636; +select * from t where a = 9637; +select * from t where a = 9638; +select * from t where a = 9639; +select * from t where a = 9640; +select * from t where a = 9641; +select * from t where a = 9642; +select * from t where a = 9643; +select * from t where a = 9644; +select * from t where a = 9645; +select * from t where a = 9646; +select * from t where a = 9647; +select * from t where a = 9648; +select * from t where a = 9649; +select * from t where a = 9650; +select * from t where a = 9651; +select * from t where a = 9652; +select * from t where a = 9653; +select * from t where a = 9654; +select * from t where a = 9655; +select * from t where a = 9656; +select * from t where a = 9657; +select * from t where a = 9658; +select * from t where a = 9659; +select * from t where a = 9660; +select * from t where a = 9661; +select * from t where a = 9662; +select * from t where a = 9663; +select * from t where a = 9664; +select * from t where a = 9665; +select * from t where a = 9666; +select * from t where a = 9667; +select * from t where a = 9668; +select * from t where a = 9669; +select * from t where a = 9670; +select * from t where a = 9671; +select * from t where a = 9672; +select * from t where a = 9673; +select * from t where a = 9674; +select * from t where a = 9675; +select * from t where a = 9676; +select * from t where a = 9677; +select * from t where a = 9678; +select * from t where a = 9679; +select * from t where a = 9680; +select * from t where a = 9681; +select * from t where a = 9682; +select * from t where a = 9683; +select * from t where a = 9684; +select * from t where a = 9685; +select * from t where a = 9686; +select * from t where a = 9687; +select * from t where a = 9688; +select * from t where a = 9689; +select * from t where a = 9690; +select * from t where a = 9691; +select * from t where a = 9692; +select * from t where a = 9693; +select * from t where a = 9694; +select * from t where a = 9695; +select * from t where a = 9696; +select * from t where a = 9697; +select * from t where a = 9698; +select * from t where a = 9699; +select * from t where a = 9700; +select * from t where a = 9701; +select * from t where a = 9702; +select * from t where a = 9703; +select * from t where a = 9704; +select * from t where a = 9705; +select * from t where a = 9706; +select * from t where a = 9707; +select * from t where a = 9708; +select * from t where a = 9709; +select * from t where a = 9710; +select * from t where a = 9711; +select * from t where a = 9712; +select * from t where a = 9713; +select * from t where a = 9714; +select * from t where a = 9715; +select * from t where a = 9716; +select * from t where a = 9717; +select * from t where a = 9718; +select * from t where a = 9719; +select * from t where a = 9720; +select * from t where a = 9721; +select * from t where a = 9722; +select * from t where a = 9723; +select * from t where a = 9724; +select * from t where a = 9725; +select * from t where a = 9726; +select * from t where a = 9727; +select * from t where a = 9728; +select * from t where a = 9729; +select * from t where a = 9730; +select * from t where a = 9731; +select * from t where a = 9732; +select * from t where a = 9733; +select * from t where a = 9734; +select * from t where a = 9735; +select * from t where a = 9736; +select * from t where a = 9737; +select * from t where a = 9738; +select * from t where a = 9739; +select * from t where a = 9740; +select * from t where a = 9741; +select * from t where a = 9742; +select * from t where a = 9743; +select * from t where a = 9744; +select * from t where a = 9745; +select * from t where a = 9746; +select * from t where a = 9747; +select * from t where a = 9748; +select * from t where a = 9749; +select * from t where a = 9750; +select * from t where a = 9751; +select * from t where a = 9752; +select * from t where a = 9753; +select * from t where a = 9754; +select * from t where a = 9755; +select * from t where a = 9756; +select * from t where a = 9757; +select * from t where a = 9758; +select * from t where a = 9759; +select * from t where a = 9760; +select * from t where a = 9761; +select * from t where a = 9762; +select * from t where a = 9763; +select * from t where a = 9764; +select * from t where a = 9765; +select * from t where a = 9766; +select * from t where a = 9767; +select * from t where a = 9768; +select * from t where a = 9769; +select * from t where a = 9770; +select * from t where a = 9771; +select * from t where a = 9772; +select * from t where a = 9773; +select * from t where a = 9774; +select * from t where a = 9775; +select * from t where a = 9776; +select * from t where a = 9777; +select * from t where a = 9778; +select * from t where a = 9779; +select * from t where a = 9780; +select * from t where a = 9781; +select * from t where a = 9782; +select * from t where a = 9783; +select * from t where a = 9784; +select * from t where a = 9785; +select * from t where a = 9786; +select * from t where a = 9787; +select * from t where a = 9788; +select * from t where a = 9789; +select * from t where a = 9790; +select * from t where a = 9791; +select * from t where a = 9792; +select * from t where a = 9793; +select * from t where a = 9794; +select * from t where a = 9795; +select * from t where a = 9796; +select * from t where a = 9797; +select * from t where a = 9798; +select * from t where a = 9799; +select * from t where a = 9800; +select * from t where a = 9801; +select * from t where a = 9802; +select * from t where a = 9803; +select * from t where a = 9804; +select * from t where a = 9805; +select * from t where a = 9806; +select * from t where a = 9807; +select * from t where a = 9808; +select * from t where a = 9809; +select * from t where a = 9810; +select * from t where a = 9811; +select * from t where a = 9812; +select * from t where a = 9813; +select * from t where a = 9814; +select * from t where a = 9815; +select * from t where a = 9816; +select * from t where a = 9817; +select * from t where a = 9818; +select * from t where a = 9819; +select * from t where a = 9820; +select * from t where a = 9821; +select * from t where a = 9822; +select * from t where a = 9823; +select * from t where a = 9824; +select * from t where a = 9825; +select * from t where a = 9826; +select * from t where a = 9827; +select * from t where a = 9828; +select * from t where a = 9829; +select * from t where a = 9830; +select * from t where a = 9831; +select * from t where a = 9832; +select * from t where a = 9833; +select * from t where a = 9834; +select * from t where a = 9835; +select * from t where a = 9836; +select * from t where a = 9837; +select * from t where a = 9838; +select * from t where a = 9839; +select * from t where a = 9840; +select * from t where a = 9841; +select * from t where a = 9842; +select * from t where a = 9843; +select * from t where a = 9844; +select * from t where a = 9845; +select * from t where a = 9846; +select * from t where a = 9847; +select * from t where a = 9848; +select * from t where a = 9849; +select * from t where a = 9850; +select * from t where a = 9851; +select * from t where a = 9852; +select * from t where a = 9853; +select * from t where a = 9854; +select * from t where a = 9855; +select * from t where a = 9856; +select * from t where a = 9857; +select * from t where a = 9858; +select * from t where a = 9859; +select * from t where a = 9860; +select * from t where a = 9861; +select * from t where a = 9862; +select * from t where a = 9863; +select * from t where a = 9864; +select * from t where a = 9865; +select * from t where a = 9866; +select * from t where a = 9867; +select * from t where a = 9868; +select * from t where a = 9869; +select * from t where a = 9870; +select * from t where a = 9871; +select * from t where a = 9872; +select * from t where a = 9873; +select * from t where a = 9874; +select * from t where a = 9875; +select * from t where a = 9876; +select * from t where a = 9877; +select * from t where a = 9878; +select * from t where a = 9879; +select * from t where a = 9880; +select * from t where a = 9881; +select * from t where a = 9882; +select * from t where a = 9883; +select * from t where a = 9884; +select * from t where a = 9885; +select * from t where a = 9886; +select * from t where a = 9887; +select * from t where a = 9888; +select * from t where a = 9889; +select * from t where a = 9890; +select * from t where a = 9891; +select * from t where a = 9892; +select * from t where a = 9893; +select * from t where a = 9894; +select * from t where a = 9895; +select * from t where a = 9896; +select * from t where a = 9897; +select * from t where a = 9898; +select * from t where a = 9899; +select * from t where a = 9900; +select * from t where a = 9901; +select * from t where a = 9902; +select * from t where a = 9903; +select * from t where a = 9904; +select * from t where a = 9905; +select * from t where a = 9906; +select * from t where a = 9907; +select * from t where a = 9908; +select * from t where a = 9909; +select * from t where a = 9910; +select * from t where a = 9911; +select * from t where a = 9912; +select * from t where a = 9913; +select * from t where a = 9914; +select * from t where a = 9915; +select * from t where a = 9916; +select * from t where a = 9917; +select * from t where a = 9918; +select * from t where a = 9919; +select * from t where a = 9920; +select * from t where a = 9921; +select * from t where a = 9922; +select * from t where a = 9923; +select * from t where a = 9924; +select * from t where a = 9925; +select * from t where a = 9926; +select * from t where a = 9927; +select * from t where a = 9928; +select * from t where a = 9929; +select * from t where a = 9930; +select * from t where a = 9931; +select * from t where a = 9932; +select * from t where a = 9933; +select * from t where a = 9934; +select * from t where a = 9935; +select * from t where a = 9936; +select * from t where a = 9937; +select * from t where a = 9938; +select * from t where a = 9939; +select * from t where a = 9940; +select * from t where a = 9941; +select * from t where a = 9942; +select * from t where a = 9943; +select * from t where a = 9944; +select * from t where a = 9945; +select * from t where a = 9946; +select * from t where a = 9947; +select * from t where a = 9948; +select * from t where a = 9949; +select * from t where a = 9950; +select * from t where a = 9951; +select * from t where a = 9952; +select * from t where a = 9953; +select * from t where a = 9954; +select * from t where a = 9955; +select * from t where a = 9956; +select * from t where a = 9957; +select * from t where a = 9958; +select * from t where a = 9959; +select * from t where a = 9960; +select * from t where a = 9961; +select * from t where a = 9962; +select * from t where a = 9963; +select * from t where a = 9964; +select * from t where a = 9965; +select * from t where a = 9966; +select * from t where a = 9967; +select * from t where a = 9968; +select * from t where a = 9969; +select * from t where a = 9970; +select * from t where a = 9971; +select * from t where a = 9972; +select * from t where a = 9973; +select * from t where a = 9974; +select * from t where a = 9975; +select * from t where a = 9976; +select * from t where a = 9977; +select * from t where a = 9978; +select * from t where a = 9979; +select * from t where a = 9980; +select * from t where a = 9981; +select * from t where a = 9982; +select * from t where a = 9983; +select * from t where a = 9984; +select * from t where a = 9985; +select * from t where a = 9986; +select * from t where a = 9987; +select * from t where a = 9988; +select * from t where a = 9989; +select * from t where a = 9990; +select * from t where a = 9991; +select * from t where a = 9992; +select * from t where a = 9993; +select * from t where a = 9994; + +'SELECT*FROMTWHEREA='||ROWNUM||';' +-------------------------------------------------------------------------------------------------------- +select * from t where a = 9995; +select * from t where a = 9996; +select * from t where a = 9997; +select * from t where a = 9998; +select * from t where a = 9999; +select * from t where a = 10000; + +10000 rows selected. + diff --git a/tpt/demos/mysgastat.sql b/tpt/demos/mysgastat.sql new file mode 100644 index 0000000..3fa380b --- /dev/null +++ b/tpt/demos/mysgastat.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE TABLE myspstat ( + sample_time DATE + , subpool NUMBER + , name VARCHAR2(100) + , bytes NUMBER +); + +BEGIN + WHILE TRUE LOOP + INSERT INTO myspstat + SELECT + SYSDATE + , ksmdsidx + , ksmssnam + , SUM(ksmsslen) + FROM + x$ksmss + WHERE + ksmsslen > 0 + AND ksmdsidx > 0 + GROUP BY + SYSDATE + , ksmdsidx + , ksmssnam; + + COMMIT; + DBMS_LOCK.SLEEP(5); + END LOOP; +END; +/ diff --git a/tpt/demos/nl.sql b/tpt/demos/nl.sql new file mode 100644 index 0000000..5264cf7 --- /dev/null +++ b/tpt/demos/nl.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t1; +drop table t2; + +create table t1 as select * from dba_users; +create table t2 as select * from dba_objects; + +select /*+ ordered use_nl(t2) gather_plan_statistics */ + t1.user_id, t1.username, sum(length(t2.object_name)) +from t1, t2 +where t1.username = t2.owner +and t1.username = 'SYSTEM' +group by t1.user_id, t1.username +/ + +@x + +select /*+ ordered use_nl(t2) gather_plan_statistics */ + t1.user_id, t1.username, sum(length(t2.object_name)) +from t1, t2 +where t1.username = t2.owner +and t1.username like 'SYS%' +group by t1.user_id, t1.username +/ + +@x \ No newline at end of file diff --git a/tpt/demos/ora_600_connect_by_10.2.sql b/tpt/demos/ora_600_connect_by_10.2.sql new file mode 100644 index 0000000..f56b017 --- /dev/null +++ b/tpt/demos/ora_600_connect_by_10.2.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +alter session set "_old_connect_by_enabled"=true; +select 1 from dual connect by level < 2; + diff --git a/tpt/demos/ordering_antijoin.sql b/tpt/demos/ordering_antijoin.sql new file mode 100644 index 0000000..28967d3 --- /dev/null +++ b/tpt/demos/ordering_antijoin.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM ( + select rownum r from + all_users where username like 'S%' + order by r desc +) +WHERE r NOT IN (select /*+ HASH_AJ(a) */ rownum FROM all_users a where rownum<= 2) +and rownum <= 5 +/ + diff --git a/tpt/demos/plsql_commit.sql b/tpt/demos/plsql_commit.sql new file mode 100644 index 0000000..b65e94f --- /dev/null +++ b/tpt/demos/plsql_commit.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t_commit; +CREATE TABLE t_commit AS SELECT 1 a FROM dual; + +-- experiment with +ALTER SESSION SET COMMIT_LOGGING = IMMEDIATE; +ALTER SESSION SET COMMIT_WRITE = WAIT; + +BEGIN + FOR i IN 1..1000000 LOOP + UPDATE t_commit SET a=a+1; + COMMIT; + END LOOP; +END; +/ + diff --git a/tpt/demos/precompute_subquery.sql b/tpt/demos/precompute_subquery.sql new file mode 100644 index 0000000..27daca4 --- /dev/null +++ b/tpt/demos/precompute_subquery.sql @@ -0,0 +1,36 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t1; +drop table t2; + +set echo on + +create table t1 as select rownum a from dual connect by level < 10; +create table t2 as select rownum+10 b from dual connect by level < 10; + +exec dbms_stats.gather_table_stats(user,'T1'); +exec dbms_stats.gather_table_stats(user,'T2'); + +--alter session set events '10053 trace name context forever'; +--alter session set "_optimizer_trace"=all; +--alter session set events '10046 trace name context forever, level 4'; + +select * from t1; + +select * from t2; + + +select a +from t1 +where a in (select b from t2); + +@x + +select a +from t1 +where a in (select /*+ PRECOMPUTE_SUBQUERY */b from t2); + +@x + +set echo off diff --git a/tpt/demos/predicate_ordering.sql b/tpt/demos/predicate_ordering.sql new file mode 100644 index 0000000..c3780c5 --- /dev/null +++ b/tpt/demos/predicate_ordering.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t; + +set echo on + +create or replace function f(x in number) return number as +begin + dbms_output.put_line('F='||to_char(x)); + return x; +end; +/ + +set serverout on size 1000000 + +select * from dual +where + rownum = f(2) +or rownum = f(1) +/ + +create table t (a, b) as select 1, 1 from dual connect by level <= 100000; +insert into t values (1,2); +commit; + +@gts t + +truncate table t; +insert into t values (1,2); +commit; + +--exec dbms_stats.set_table_stats(user, 'T', numrows=>1000000, numblks=>10000, avgrlen=>10, no_invalidate=>false); + +select * from t where b=f(2) or a=f(1); + +set echo off serverout off + +/ + +@x + diff --git a/tpt/demos/recursive_autonomous_transactions.sql b/tpt/demos/recursive_autonomous_transactions.sql new file mode 100644 index 0000000..4d52db5 --- /dev/null +++ b/tpt/demos/recursive_autonomous_transactions.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +declare + procedure p is + pragma autonomous_transaction; + begin + begin + insert into t values(1); +-- set transaction read only; + dbms_lock.sleep(1); +-- exception +-- when others then null; + end; + p; + end; + +begin + p; +end; +/ diff --git a/tpt/demos/recursive_sessions.sql b/tpt/demos/recursive_sessions.sql new file mode 100644 index 0000000..e92733d --- /dev/null +++ b/tpt/demos/recursive_sessions.sql @@ -0,0 +1,155 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t; +create table t(a int); + +create or replace package recursive_session_test +-- authid definer +as + procedure p; +end; +/ + +create or replace package body recursive_session_test as + procedure p is + pragma autonomous_transaction; + begin + + begin +-- insert into t values(1); + insert into t select rownum from dual connect by level <=100000; + dbms_lock.sleep(60); +-- set transaction read only; + exception + when others then null; + end; + p; + end; + +begin + recursive_session_test.p; +end; +/ +show err + +grant execute on recursive_session_test to public; + +select q'\@sample "decode(bitand(ksuseflg,19),17,'BACKGROUND',1,'USER',2,'RECURSIVE','?'),ksuudsna" x$ksuse ksusepro=hextoraw('\'||hextoraw(paddr)||''') 10000' run_this +from v$session where sid = userenv('SID') +union all +select ' ' from dual +union all +select 'select decode(bitand(ksuseflg,19),17,''BACKGROUND'',1,''USER'',2,''RECURSIVE'',''?''),ksuudsna,ksusepro,ksspaown'||chr(10) +||'from x$ksuse'||chr(10) +||'where ksusepro=hextoraw('''||paddr||''');' run_this +from v$session where sid = userenv('SID'); + +--' + +insert into t select rownum from dual connect by level <= 100000; + +exec recursive_session_test.p; + + +--, STATUS +--, SERVER +--, SCHEMA# +--, SCHEMANAME +--, OSUSER +--, PROCESS +--, MACHINE +--, TERMINAL +--, PROGRAM +--, TYPE +--, SQL_ADDRESS +--, SQL_HASH_VALUE +--, SQL_ID +--, SQL_CHILD_NUMBER +--, PREV_SQL_ADDR +--, PREV_HASH_VALUE +--, PREV_SQL_ID +--, PREV_CHILD_NUMBER +--, MODULE +--, MODULE_HASH +--, ACTION +--, ACTION_HASH +--, CLIENT_INFO +--, FIXED_TABLE_SEQUENCE +--, ROW_WAIT_OBJ# +--, ROW_WAIT_FILE# +--, ROW_WAIT_BLOCK# +--, ROW_WAIT_ROW# +--, LOGON_TIME +--, LAST_CALL_ET +--, PDML_ENABLED +--, FAILOVER_TYPE +--, FAILOVER_METHOD +--, FAILED_OVER +--, RESOURCE_CONSUMER_GROUP +--, PDML_STATUS +--, PDDL_STATUS +--, PQ_STATUS +--, CURRENT_QUEUE_DURATION +--, CLIENT_IDENTIFIER +--, BLOCKING_SESSION_STATUS +--, BLOCKING_INSTANCE +--, BLOCKING_SESSION +--, SEQ# +--, EVENT# +--, EVENT +--, P1TEXT +--, P1 +--, P1RAW +--, P2TEXT +--, P2 +--, P2RAW +--, P3TEXT +--, P3 +--, P3RAW +--, WAIT_CLASS_ID +--, WAIT_CLASS# +--, WAIT_CLASS +--, WAIT_TIME +--, SECONDS_IN_WAIT +--, STATE +--, SERVICE_NAME +--, SQL_TRACE +--, SQL_TRACE_WAITS +--, SQL_TRACE_BINDS ) +--as +--select +--s.inst_id,s.addr,s.indx,s.ksuseser,s.ksuudses,s.ksusepro,s.ksuudlui,s.ksuudlna,s.ksuudoct,s.ksusesow +--, +--decode(s.ksusetrn,hextoraw('00'),null,s.ksusetrn),decode(s.ksqpswat,hextoraw('00'),null,s.ksqpswat), +--decode(bitand(s.ksuseidl,11),1,'ACTIVE',0,decode(bitand(s.ksuseflg,4096),0,'INACTIVE','CACHED'),2,'SNIPED',3,'SNIPED', 'KILLED'), +--decode(s.ksspatyp,1,'DEDICATED',2,'SHARED',3,'PSEUDO','NONE'), +--s.ksuudsid,s.ksuudsna,s.ksuseunm,s.ksusepid,s.ksusemnm,s.ksusetid,s.ksusepnm, +--decode(bitand(s.ksuseflg,19),17,'BACKGROUND',1,'USER',2,'RECURSIVE','?'), s.ksusesql, s.ksusesqh, +--s.ksusesqi, decode(s.ksusesch, 65535, to_number(null), s.ksusesch), s.ksusepsq, s.ksusepha, +--s.ksusepsi, decode(s.ksusepch, 65535, to_number(null), s.ksusepch), s.ksuseapp, s.ksuseaph, +--s.ksuseact, s.ksuseach, s.ksusecli, s.ksusefix, s.ksuseobj, s.ksusefil, s.ksuseblk, s.ksuseslt, +--s.ksuseltm, s.ksusectm,decode(bitand(s.ksusepxopt, 12),0,'NO','YES'),decode(s.ksuseft, 2,'SESSION', +--4,'SELECT',8,'TRANSACTIONAL','NONE'),decode(s.ksusefm,1,'BASIC',2,'PRECONNECT',4,'PREPARSE','NONE'), +--decode(s.ksusefs, 1, 'YES','NO'),s.ksusegrp,decode(bitand(s.ksusepxopt,4),4,'ENABLED',decode(bitand(s.ksusepxopt,8),8,'FORCED', +--'DISABLED')),decode(bitand(s.ksusepxopt,2),2,'FORCED',decode(bitand(s.ksusepxopt,1),1,'DISABLED','ENABLED')) +--,decode(bitand(s.ksusepxopt,32),32,'FORCED',decode(bitand(s.ksusepxopt,16),16,'DISABLED','EN +--ABLED')), s.ksusecqd, s.ksuseclid, decode(s.ksuseblocker,4294967295,'UNKNOWN', 4294967294, +--'UNKNOWN',4294967293,'UNKNOWN',4294967292,'NO HOLDER', 4294967291,'NOT IN WAIT','VALID'), +--decode(s.ksuseblocker, 4294967295,to_number(null),4294967294,to_number(null), +--4294967293,to_number(null), 4294967292,to_number(null),4294967291, +--to_number(null),bitand(s.ksuseblocker, 2147418112)/65536),decode(s.ksuseblocker, +--4294967295,to_number(null),4294967294,to_number(null), 4294967293,to_number(null), +--4294967292,to_number(null),4294967291, to_number(null),bitand(s.ksuseblocker, 65535)),s.ksuseseq, +--s.ksuseopc,e.kslednam, e.ksledp1, s.ksusep1,s.ksusep1r,e.ksledp2, +--s.ksusep2,s.ksusep2r,e.ksledp3,s.ksusep3,s.ksusep3r,e.ksledclassid, e.ksledclass#, e.ksledclass, +--decode(s.ksusetim,0,0,-1,-1,-2,-2, decode(round(s.ksusetim/10000),0,-1,round(s.ksusetim/10000))), +--s.ksusewtm,decode(s.ksusetim, 0, 'WAITING', -2, 'WAITED UNKNOWN TIME', -1, 'WAITED SHORT TIME', +--decode(round(s.ksusetim/10000),0,'WAITED SHORT TIME','WAITED KNOWN TIME')),s.ksusesvc, +--decode(bitand(s.ksuseflg2,32),32,'ENABLED','DISABLED'),decode(bitand(s.ksuseflg2,64),64,'TRUE','FALSE'), +--decode(bitand(s.ksuseflg2,128),128,'TRUE','FALSE') +--from x$ksuse s, x$ksled e +--where +-- s.ksuseopc=e.indx +----and bitand(s.ksspaflg,1)!=0 +----and bitand(s.ksuseflg,1)!=0 diff --git a/tpt/demos/refcursor_materialization.sql b/tpt/demos/refcursor_materialization.sql new file mode 100644 index 0000000..05f722b --- /dev/null +++ b/tpt/demos/refcursor_materialization.sql @@ -0,0 +1,67 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Connor McDonald's example + +-- drop table t; +-- +-- create table T +-- as select rownum x +-- from dual connect by level <= 10; +-- +-- create or replace +-- type numlist is table of number; +-- / +-- +-- create or replace function F(c sys_refcursor) return numlist pipelined is +-- n number; +-- begin +-- loop +-- fetch c into n; +-- exit when c%notfound; +-- pipe row (n); +-- end loop; +-- close c; +-- return; +-- end; +-- / +-- + +delete t; +commit; + +variable rc refcursor; +lock table T in exclusive mode; + +exec open :rc for select * from table(f(cursor(select * from t))); + +commit; + +insert into T values (11); + +commit; + +print rc + +variable rc refcursor; +variable rc1 refcursor; + +delete t; +commit; + +lock table T in exclusive mode; + +exec open :rc1 for select * from t; + +exec open :rc for select * from table(f(:rc1)); + +commit; + +insert into T values (11); + +commit; + +print rc + +select * from dual; + \ No newline at end of file diff --git a/tpt/demos/rowdep_cleanup.sql b/tpt/demos/rowdep_cleanup.sql new file mode 100644 index 0000000..5f5cdd5 --- /dev/null +++ b/tpt/demos/rowdep_cleanup.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table t; + +Prompt Creating table with NO rowdependencies... + + +create table t tablespace users as select * From dba_objects; + +update t set object_id = 1; + +alter system flush buffer_cache; + +@db +commit; + +pause Press any key to select count(*) from t... + +select distinct ora_rowscn from t; + +pause Done. Press any key to continue... + +drop table t; + +Prompt Creating table WITH rowdependencies... + + +create table t tablespace users ROWDEPENDENCIES as select * From dba_objects; + +update t set object_id = 1; + +alter system flush buffer_cache; + +@db +commit; + +pause Press any key to select count(*) from t... + +select distinct ora_rowscn from t; diff --git a/tpt/demos/scalar_subquery_in_where_clause.sql b/tpt/demos/scalar_subquery_in_where_clause.sql new file mode 100644 index 0000000..7a32399 --- /dev/null +++ b/tpt/demos/scalar_subquery_in_where_clause.sql @@ -0,0 +1,72 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- A-Times were misestimated with the default sampling +-- ALTER SESSION SET "_rowsource_statistics_sampfreq"=1; +ALTER SESSION SET "_serial_direct_read"=ALWAYS; + +SELECT /*+ MONITOR test2a */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ +@getprev +@xpi &prev_sql_id +@xia &prev_sql_id &prev_child_number + +-- @ash/asqlmon &prev_sql_id &prev_child_number +-- @sqlidx &prev_sql_id &prev_child_number + +SELECT /*+ MONITOR NO_PUSH_SUBQ(@"SEL$2") test2b */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ +@getprev +-- @ash/asqlmon &prev_sql_id &prev_child_number +-- @sqlidx &prev_sql_id &prev_child_number +@xpi &prev_sql_id +@xia &prev_sql_id &prev_child_number + +-- ALTER SESSION SET "_rowsource_statistics_sampfreq"=128; + + +SELECT /*+ MONITOR OPT_PARAM('cell_offload_processing', 'false') test3a */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ + +SELECT /*+ MONITOR NO_PUSH_SUBQ(@"SEL$2") OPT_PARAM('cell_offload_processing', 'false') test3b */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ + + +SELECT /*+ MONITOR PUSH_SUBQ(@"SEL$2") OPT_PARAM('cell_offload_processing', 'true') test4a */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ + +SELECT /*+ MONITOR NO_PUSH_SUBQ(@"SEL$2") OPT_PARAM('cell_offload_processing', 'true') test4b */ + SUM(LENGTH(object_name)) + SUM(LENGTH(object_type)) + SUM(LENGTH(owner)) +FROM + test_objects_100m o +WHERE + o.owner = (SELECT u.username FROM test_users u WHERE user_id = 13) +/ + + + diff --git a/tpt/demos/scalar_subquery_unnesting.sql b/tpt/demos/scalar_subquery_unnesting.sql new file mode 100644 index 0000000..cb6cf1e --- /dev/null +++ b/tpt/demos/scalar_subquery_unnesting.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- DROP TABLE test_users; +-- DROP TABLE test_objects; +CREATE TABLE test_users AS SELECT * FROM all_users; +CREATE TABLE test_objects AS SELECT * FROM all_objects; +@gts test_users +@gts test_objects + +@53on + +SELECT /*+ GATHER_PLAN_STATISTICS */ + u.username + , (SELECT MAX(created) FROM test_objects o WHERE o.owner = u.username) +FROM + test_users u +WHERE + username LIKE 'S%' +/ + +@53off +@xall +@53on + +-- ALTER SESSION SET "_optimizer_unnest_scalar_sq" = FALSE; + +SELECT /*+ GATHER_PLAN_STATISTICS NO_UNNEST(@ssq) */ + u.username + , (SELECT /*+ QB_NAME(ssq) */ MAX(created) FROM test_objects o WHERE o.owner = u.username) +FROM + test_users u +WHERE + username LIKE 'S%' +/ + +@53off +@xall + diff --git a/tpt/demos/spin.sql b/tpt/demos/spin.sql new file mode 100644 index 0000000..46f93f0 --- /dev/null +++ b/tpt/demos/spin.sql @@ -0,0 +1,54 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- metalink bug# 5245101 + +create table TCMDTY(CMDTY_CD VARCHAR2(4),CMDTY_DESC VARCHAR2(30)); + +create or replace package UGS_LKUPS is + TYPE T_CURSOR IS REF CURSOR; + PROCEDURE GET_ACTIVE_CMDTYS (COMMODITIES_CURSOR IN OUT T_CURSOR); +end ugs_lkups; +/ + +create or replace package body UGS_LKUPS IS + PROCEDURE GET_ACTIVE_CMDTYS (COMMODITIES_CURSOR IN OUT T_CURSOR) IS + v_commodities T_CURSOR; + TYPE cmdty_code_type IS TABLE OF TCMDTY.CMDTY_CD%TYPE; + TYPE cmdty_desc_type IS TABLE OF TCMDTY.CMDTY_DESC%TYPE; + t_CMDTY_CD cmdty_code_type; + t_CMDTY_DESC cmdty_desc_type; + BEGIN + OPEN v_commodities FOR + SELECT CMDTY_CD, CMDTY_DESC + BULK COLLECT INTO t_CMDTY_CD, t_CMDTY_DESC + FROM TCMDTY + ORDER BY CMDTY_CD; + + COMMODITIES_CURSOR := v_commodities; + END GET_ACTIVE_CMDTYS; +end ugs_lkups; +/ + + +insert into TCMDTY values('a','aaaa'); +insert into TCMDTY values('b','bbbb'); +commit; + +set serverout on + +DECLARE + v_cursor ugs_lkups.t_cursor; + v_cmdty_cd tcmdty.cmdty_cd%TYPE; + v_cmdty_desc tcmdty.cmdty_desc%TYPE; +BEGIN + ugs_lkups.GET_ACTIVE_CMDTYS (COMMODITIES_CURSOR => v_cursor); + LOOP + FETCH v_cursor INTO v_cmdty_cd, v_cmdty_desc; + EXIT WHEN v_cursor%NOTFOUND; + DBMS_OUTPUT.PUT_LINE(v_cmdty_cd || ' | ' || v_cmdty_desc); + END LOOP; + CLOSE v_cursor; +END; +/ + \ No newline at end of file diff --git a/tpt/demos/spm_synonym.sql b/tpt/demos/spm_synonym.sql new file mode 100644 index 0000000..b4517fb --- /dev/null +++ b/tpt/demos/spm_synonym.sql @@ -0,0 +1,52 @@ +-- Copyright 2019 Tanel Poder. All rights reserved. More info at https://blog.tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this demos that a SQL Plan Baseline will still apply, even a synonym repoints to a different table. +-- the table has to have the same name (as otherwise the plan hash value changes), but the schema +-- is not part of plan hash value. + +PROMPT This script will drop some tables called "T". +PROMPT Hit enter to continue, CTRL+C to cancel... +PAUSE + +ALTER SESSION SET optimizer_use_sql_plan_baselines=TRUE; + +DROP TABLE system.t; +DROP TABLE scott.t; +DROP SYNONYM syn; + +CREATE TABLE system.t AS SELECT * FROM dba_objects; +CREATE TABLE scott.t AS SELECT * FROM system.t; + +CREATE INDEX system.i ON system.t (object_id); +CREATE INDEX scott.i ON scott.t (object_id); + +EXEC DBMS_STATS.GATHER_TABLE_STATS('SYSTEM','T', cascade=>TRUE); +EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT' ,'T', cascade=>TRUE); + +-- First point SYN to system schema +CREATE SYNONYM syn FOR system.t; + +SELECT COUNT(owner) FROM syn t WHERE object_id = 12345; + +@x + +SELECT /*+ FULL(t) */ COUNT(owner) FROM syn t WHERE object_id = 12345; + +@x + +@create_sql_baseline bfwpapz4cfwz2 2966233522 3v3yzqv6dp704 + +SELECT COUNT(owner) FROM syn t WHERE object_id = 12345; + +@x + +-- Then point SYN to scott schema and run the same query text +DROP SYNONYM syn; +CREATE SYNONYM syn FOR scott.t; + +SELECT COUNT(owner) FROM syn t WHERE object_id = 12345; + +@x + +@drop_sql_baseline SQL_547b571057dbd3d4 diff --git a/tpt/demos/sql_cursor.sql b/tpt/demos/sql_cursor.sql new file mode 100644 index 0000000..82c8bfb --- /dev/null +++ b/tpt/demos/sql_cursor.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set echo on + +select curno,status,pers_heap_mem,work_heap_mem from v$sql_cursor where status != 'CURNULL'; +pause + +var x refcursor +exec open :x for select * from all_objects order by dbms_random.random; +pause + +declare r all_objects%rowtype; begin fetch :x into r; end; +/ + +pause + +select curno,status,pers_heap_mem,work_heap_mem from v$sql_cursor where status != 'CURNULL'; + +set echo off diff --git a/tpt/demos/state_objects.sql b/tpt/demos/state_objects.sql new file mode 100644 index 0000000..180c0a0 --- /dev/null +++ b/tpt/demos/state_objects.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +create or replace function delete_func (owner_name in varchar2) return number +as + num_deleted number; +begin + -- this is a demo procedure + -- it does not do anything useful! + + DELETE FROM mytab WHERE owner = owner_name; + COMMIT; + + num_deleted := SQL%ROWCOUNT; + DBMS_OUTPUT.PUT_LINE('Deleted rows ='|| TO_CHAR(num_deleted)); + + return num_deleted; +end; +/ +show err diff --git a/tpt/demos/t_c_hotsos.sql b/tpt/demos/t_c_hotsos.sql new file mode 100644 index 0000000..7366b76 --- /dev/null +++ b/tpt/demos/t_c_hotsos.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +ALTER SESSION SET EVENTS 'immediate trace name trace_buffer_on level 1048576'; + +DECLARE + j NUMBER; +BEGIN + WHILE TRUE LOOP + BEGIN + SELECT /*+ INDEX_RS_ASC(t i_c_hotsos) */ data_object_id INTO j + FROM t_c_hotsos t + WHERE object_id = 21230 - 5000 + TRUNC(DBMS_RANDOM.VALUE(0, 10000)); -- 21230 + + --DBMS_LOCK.SLEEP(DBMS_RANDOM.VALUE(0,0.01)); + EXCEPTION + WHEN OTHERS THEN NULL; -- Do not show this to Tom Kyte!!! + END; + END LOOP; +END; +/ + +ALTER SESSION SET EVENTS 'immediate trace name trace_buffer_off'; + diff --git a/tpt/demos/tom_kyte_unindexed_fk.sql b/tpt/demos/tom_kyte_unindexed_fk.sql new file mode 100644 index 0000000..36c5b20 --- /dev/null +++ b/tpt/demos/tom_kyte_unindexed_fk.sql @@ -0,0 +1,43 @@ +-- Tom Kyte's script: http://tkyte.blogspot.com/2009/10/httpasktomoraclecomtkyteunindex.html + +COL child_table_name FOR A30 +COL child_constraint_name FOR A30 +COL fk_columns FOR A100 WORD_WRAP + +select table_name child_table_name, constraint_name child_constraint_name, + cname1 || nvl2(cname2,','||cname2,null) || + nvl2(cname3,','||cname3,null) || nvl2(cname4,','||cname4,null) || + nvl2(cname5,','||cname5,null) || nvl2(cname6,','||cname6,null) || + nvl2(cname7,','||cname7,null) || nvl2(cname8,','||cname8,null) fk_columns +from ( select b.table_name, + b.constraint_name, + max(decode( position, 1, column_name, null )) cname1, + max(decode( position, 2, column_name, null )) cname2, + max(decode( position, 3, column_name, null )) cname3, + max(decode( position, 4, column_name, null )) cname4, + max(decode( position, 5, column_name, null )) cname5, + max(decode( position, 6, column_name, null )) cname6, + max(decode( position, 7, column_name, null )) cname7, + max(decode( position, 8, column_name, null )) cname8, + count(*) col_cnt + from (select substr(table_name,1,30) table_name, + substr(constraint_name,1,30) constraint_name, + substr(column_name,1,30) column_name, + position + from user_cons_columns ) a, + user_constraints b + where a.constraint_name = b.constraint_name + and b.constraint_type = 'R' + group by b.table_name, b.constraint_name + ) cons +where col_cnt > ALL + ( select count(*) + from user_ind_columns i + where i.table_name = cons.table_name + and i.column_name in (cname1, cname2, cname3, cname4, + cname5, cname6, cname7, cname8 ) + and i.column_position <= cons.col_cnt + group by i.index_name + ) +/ + diff --git a/tpt/demos/tx_index_contention.sql b/tpt/demos/tx_index_contention.sql new file mode 100644 index 0000000..18dc6e8 --- /dev/null +++ b/tpt/demos/tx_index_contention.sql @@ -0,0 +1,64 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- DROP TABLE t; +-- CREATE TABLE t (a NUMBER, b CHAR(2000)); +-- +-- CREATE INDEX i ON t(a,b) PCTFREE 0; +-- +-- ALTER SESSION SET plsql_optimize_level = 0; +-- EXEC FOR i IN 1..50000 LOOP INSERT INTO t VALUES (i, 'x'); END LOOP; + +-- modified version, based on http://sai-oracle.blogspot.com/2009/04/beware-of-index-contention-after-mass.html + +CREATE TABLESPACE tmp_freelist_ts DATAFILE 'tmp_freelist_ts.dbf' SIZE 100M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M SEGMENT SPACE MANAGEMENT MANUAL; + +DROP TABLE idx1; +DROP TABLE idx2; + +CREATE TABLE idx1(a NUMBER) TABLESPACE tmp_freelist_ts; + +CREATE INDEX idx1_idx ON idx1 (a) TABLESPACE tmp_freelist_ts PCTFREE 0; + +INSERT INTO idx1 SELECT rownum FROM all_objects, all_objects WHERE ROWNUM <= 250000; + +COMMIT; + +CREATE TABLE idx2 TABLESPACE tmp_freelist_ts AS SELECT * FROM idx1 WHERE 1=2; + +INSERT INTO idx2 +SELECT * FROM idx1 WHERE rowid IN +(SELECT rid FROM +(SELECT rid, ROWNUM rn FROM +(SELECT rowid rid FROM idx1 WHERE a BETWEEN 10127 AND 243625 ORDER BY a) +) +WHERE MOD(rn, 250) = 0 +) +/ + +COMMIT; + +DELETE FROM idx1 WHERE a BETWEEN 10127 AND 243625; + +COMMIT; + +INSERT INTO idx1 SELECT * FROM idx2; + +COMMIT; + +INSERT INTO IDX1 SELECT 250000+ROWNUM FROM ALL_OBJECTS WHERE ROWNUM <= 126; + +COMMIT; + +SELECT SQL_ID, EXECUTIONS, BUFFER_GETS, DISK_READS, CPU_TIME, ELAPSED_TIME, ROWS_PROCESSED, SQL_TEXT FROM V$SQL +WHERE SQL_TEXT LIKE '%INSERT%IDX1%' AND SQL_TEXT NOT LIKE '%V$SQL%'; + +INSERT INTO IDX1 VALUES (251000); + +COMMIT; + +SELECT SQL_ID, EXECUTIONS, BUFFER_GETS, DISK_READS, CPU_TIME, ELAPSED_TIME, ROWS_PROCESSED, SQL_TEXT FROM V$SQL +WHERE SQL_TEXT LIKE '%INSERT%IDX1%' AND SQL_TEXT NOT LIKE '%V$SQL%'; + + + diff --git a/tpt/demos/uga_alloc.sql b/tpt/demos/uga_alloc.sql new file mode 100644 index 0000000..abb872d --- /dev/null +++ b/tpt/demos/uga_alloc.sql @@ -0,0 +1,36 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: demos/uga_alloc.sql +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- +-- Copyright: (c) 2007-2009 Tanel Poder +-- +-------------------------------------------------------------------------------- + +set echo on + +declare + type tabtype is table of char(1000); + t tabtype := NULL; + + +begin + + select object_name + bulk collect into t + from dba_objects + order by lower(object_name); + + + dbms_lock.sleep(999999); + +end; +/ + +set echo off diff --git a/tpt/demos/unindexed_foreign_key.sql b/tpt/demos/unindexed_foreign_key.sql new file mode 100644 index 0000000..ad9fdb3 --- /dev/null +++ b/tpt/demos/unindexed_foreign_key.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t_child; +DROP TABLE t_parent; + +CREATE TABLE t_parent(a INT PRIMARY KEY); +CREATE TABLE t_child(b INT, c INT, FOREIGN KEY (c) REFERENCES t_parent(a)); + +INSERT INTO t_parent SELECT rownum FROM dual CONNECT BY LEVEL<=10; +INSERT INTO t_child SELECT rownum, MOD(rownum,9)+1 FROM dual CONNECT BY LEVEL <= 10; + +COMMIT; + +PAUSE Press enter to update CHILD table: + +PROMPT UPDATE t_child SET c = 10 WHERE c = 1;; +UPDATE t_child SET c = 10 WHERE c = 1; + +PROMPT -- In another session run: +PROMPT UPDATE t_parent SET a = 7 WHERE a = 6;; +PROMPT + diff --git a/tpt/demos/unique_index_lios.sql b/tpt/demos/unique_index_lios.sql new file mode 100644 index 0000000..5873313 --- /dev/null +++ b/tpt/demos/unique_index_lios.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set echo on + +drop table t; + +create table t(a int, b char(100)); + +insert /*+ APPEND */ into t select rownum, object_name from all_objects; + +create &1 index i on t(a); + +exec dbms_stats.gather_table_stats(user,'T'); + +-- hard parse statement +set termout off +select a from t where a = 40000; +set termout on + +set autot trace stat + +select a from t where a = 40000; + +set echo off autot off \ No newline at end of file diff --git a/tpt/demos/xa1.sql b/tpt/demos/xa1.sql new file mode 100644 index 0000000..bcc4ff2 --- /dev/null +++ b/tpt/demos/xa1.sql @@ -0,0 +1,66 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Taken and customized from http://docs.oracle.com/cd/E18283_01/appdev.112/e17125/adfns_xa.htm + +-- CREATE TABLE xa_t (a INT, b VARCHAR2(100)); +-- INSERT INTO xa_t VALUES (1, 'tanel is testing'); +-- COMMIT; + +SET SERVEROUT ON + +--ACCEPT global_trans_id NUMBER DEFAULT 123 PROMPT "Enter value for global_trans_id [123]: " +DEF global_trans_id = &1 +PROMPT + +REM Session 1 starts a transaction and does some work. +DECLARE + gtid NUMBER := &global_trans_id; + + PROCEDURE handle_err (rc IN PLS_INTEGER, p_comment IN VARCHAR2 DEFAULT 'N/A') IS + xae EXCEPTION; + oer PLS_INTEGER; + BEGIN + IF rc!=DBMS_XA.XA_OK THEN + oer := DBMS_XA.XA_GETLASTOER(); + DBMS_OUTPUT.PUT_LINE('ORA-' || oer || ' occurred, XA call '||p_comment||' failed'); + RAISE xae; + ELSE + DBMS_OUTPUT.PUT_LINE('XA call '||p_comment||' succeeded'); + END IF; + END handle_err; + +BEGIN + HANDLE_ERR(SYS.DBMS_XA.XA_SETTIMEOUT(5), 'XA_SETTIMEOUT'); + HANDLE_ERR(DBMS_XA.XA_START(DBMS_XA_XID(gtid), DBMS_XA.TMNOFLAGS), 'XA_START ('||gtid||')'); + UPDATE xa_t SET b = 'tanel is not testing anymore' WHERE a = 1; + HANDLE_ERR(DBMS_XA.XA_END(DBMS_XA_XID(gtid), DBMS_XA.TMSUSPEND), 'XA_END/SUSP('||gtid||')'); + + HANDLE_ERR(DBMS_XA.XA_PREPARE(DBMS_XA_XID(gtid)), 'XA_PREPARE ('||gtid||')'); + -- this is not needed for our test + -- DBMS_LOCK.SLEEP(10); + -- HANDLE_ERR(DBMS_XA.XA_ROLLBACK(DBMS_XA_XID(gtid)), 'XA_ROLLBACK('||gtid||')'); + +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('XA error occurred, rolling back the transaction ...'); + DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); + DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK); + DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_CALL_STACK); + HANDLE_ERR(DBMS_XA.XA_END(DBMS_XA_XID(gtid), DBMS_XA.TMSUCCESS), 'XA_END/SUCC('||gtid||')'); + HANDLE_ERR(DBMS_XA.XA_ROLLBACK(DBMS_XA_XID(gtid)), 'XA_ROLLBACK('||gtid||')'); + +END; +/ + +PROMPT Now wait for 10 seconds and run SELECT * FROM dba_2pc_pending;; + +EXEC DBMS_LOCK.SLEEP(10); + +COL tran_comment FOR A20 +COL global_tran_id FOR A20 + +SELECT * FROM dba_2pc_pending WHERE state != 'forced rollback'; + +SET SERVEROUT OFF + diff --git a/tpt/demos/xa_rollback.sql b/tpt/demos/xa_rollback.sql new file mode 100644 index 0000000..fa8800b --- /dev/null +++ b/tpt/demos/xa_rollback.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DEF trans_id=&1 + +VAR begin_scn NUMBER; +VAR end_scn NUMBER; + +EXEC :begin_scn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER; + +ROLLBACK FORCE '&1'; + +EXEC :end_scn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER; + +-- noarchivelog: +DECLARE + logfile VARCHAR2(1000); +BEGIN + SELECT member INTO logfile FROM v$logfile WHERE group# = (SELECT group# FROM v$log WHERE status = 'CURRENT') AND rownum = 1; + SYS.DBMS_LOGMNR.ADD_LOGFILE(logfile, DBMS_LOGMNR.NEW); + SYS.DBMS_LOGMNR.START_LOGMNR(:begin_scn, :end_scn, OPTIONS=>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG); +END; +/ + +SELECT * FROM v$logmnr_contents; + +SELECT scn,timestamp,xid,operation,seg_owner,seg_name,row_id,sql_redo FROM v$logmnr_contents; +-- then exit the session or close the logmnr session or run +-- EXEC SYS.DBMS_LOGMNR.END_LOGMNR; + diff --git a/tpt/demos/xterm-color.sql b/tpt/demos/xterm-color.sql new file mode 100644 index 0000000..5e5f13c --- /dev/null +++ b/tpt/demos/xterm-color.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col a for a20 +col b for a20 +col c for a20 +col d for a20 +col e for a20 +col f for a20 +col g for a20 +col h for a20 + +select + chr(27)||'[40m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' a + , chr(27)||'[41m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' b + , chr(27)||'[42m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' c + , chr(27)||'[43m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' d + , chr(27)||'[44m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' e + , chr(27)||'[45m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' f + , chr(27)||'[46m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' g + , chr(27)||'[47m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' h +from dual + connect by level<=8 +union all +select chr(27)||'[0m', null, null, null, null, null, null, null from dual +union all +select + chr(27)||'[32m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' a + , chr(27)||'[33m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' b + , chr(27)||'[34m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' c + , chr(27)||'[35m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' d + , chr(27)||'[36m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' e + , chr(27)||'[37m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' f + , chr(27)||'[38m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' g + , chr(27)||'[39m'||chr(27)||'[1;'||to_char(rownum+29)||'mTest' h +from dual + connect by level<=8 +union all +select chr(27)||'[0m', null, null, null, null, null, null, null from dual +/ diff --git a/tpt/demos/xterm-color256.sql b/tpt/demos/xterm-color256.sql new file mode 100644 index 0000000..5d97ea7 --- /dev/null +++ b/tpt/demos/xterm-color256.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- oracle 11.2+ + +SELECT + LISTAGG (CHR(27)||'[48;5;'|| + ( 16 + MOD(r,6) + MOD(TRUNC(r/6),6)*6 + MOD(TRUNC(r/36),6)*6*6 )||'m'|| + LPAD(16 + MOD(r,6) + MOD(TRUNC(r/6),6)*6 + MOD(TRUNC(r/36),6)*6*6,4)|| + CHR(27)||'[0m' + ) WITHIN GROUP (ORDER BY MOD(TRUNC(r/6),6)) +FROM + (SELECT rownum r FROM dual CONNECT BY LEVEL <= 216) +GROUP BY + MOD(TRUNC(r/36),6) +/ diff --git a/tpt/dep.sql b/tpt/dep.sql new file mode 100644 index 0000000..bc7b0df --- /dev/null +++ b/tpt/dep.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col dep_owner head OWNER for a16 +col dep_name head DEPENDENT_NAME for a30 +col dep_type head DEPENDENT_TYPE for a12 +col dep_referenced_owner head REF_OWNER for a16 +col dep_referenced_name head REF_NAME for a30 +col dep_referenced_type head REF_TYPE for a12 +col dep_depency_type head HARDSOFT for a8 + +select + owner dep_owner, + name dep_name, + type dep_type, + referenced_owner dep_referenced_owner, + referenced_name dep_referenced_name, + referenced_type dep_referenced_type, + dependency_type dep_dependency_type +-- +--from dba_dependencies where owner like '&1' and referenced_owner like '&2' +--from dba_dependencies where owner like '&1' and name like '&2' +-- +from + dba_dependencies +where + lower(owner) like lower('&1') +and lower(name) like lower('&2') +and lower(referenced_owner) like lower('&3') +and lower(referenced_name) like lower('&4') +/ + + diff --git a/tpt/deprecated/sql_id.sql b/tpt/deprecated/sql_id.sql new file mode 100644 index 0000000..89933d8 --- /dev/null +++ b/tpt/deprecated/sql_id.sql @@ -0,0 +1,54 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sql_sql_text head SQL_TEXT format a150 word_wrap +col sql_child_number head "CH#" for 999 + +prompt Show SQL text, child cursors and execution stats for SQLID &1 child &2 + +select + hash_value, + child_number sql_child_number, + sql_text sql_sql_text +from + v$sql +where + sql_id = ('&1') +and child_number like '&2' +order by + sql_id, + hash_value, + child_number +/ + +select + child_number sql_child_number, + address parent_handle, + child_address object_handle, + plan_hash_value plan_hash, + parse_calls parses, + loads h_parses, + executions, + fetches, + rows_processed, + cpu_time/1000 cpu_ms, + elapsed_time/1000 ela_ms, + buffer_gets LIOS, + disk_reads PIOS, + sorts, +-- address, +-- sharable_mem, +-- persistent_mem, +-- runtime_mem, + users_executing +from + v$sql +where + sql_id = ('&1') +and child_number like '&2' +order by + sql_id, + hash_value, + child_number +/ + diff --git a/tpt/desc.sql b/tpt/desc.sql new file mode 100644 index 0000000..a7ccbbc --- /dev/null +++ b/tpt/desc.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@saveset + +set lines 80 +describe &1 + +@@loadset + diff --git a/tpt/descpartxx.sql b/tpt/descpartxx.sql new file mode 100644 index 0000000..09934b5 --- /dev/null +++ b/tpt/descpartxx.sql @@ -0,0 +1,94 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- requires 12c or later as it uses inline WITH PL/SQL functions. It is possible to convert this +-- to 11g too, using the function which is included in the comment section below (see descxx11.sql) + +COL column_id HEAD "Col#" FOR A4 +COL column_name HEAD "Column Name" FOR A30 +COL nullable HEAD "Null?" FOR A10 +COL data_type HEAD "Type" FOR A25 WORD_WRAP +COL num_distinct HEAD "# distinct" FOR 999999999999999 +COL density HEAD "Density" FOR 9.99999999999 +COL num_nulls HEAD "# nulls" FOR 999999999999999 +COL histogram HEAD "Histogram" FOR A10 TRUNCATE +COL num_buckets HEAD "# buckets" FOR 999999 +COL low_value HEAD "Low Value" FOR A32 +COL high_value HEAD "High Value" FOR A32 + +WITH + FUNCTION display_raw(rawval RAW, type VARCHAR2) + RETURN VARCHAR2 + IS + cn NUMBER; + cv VARCHAR2(128); + cd DATE; + cnv NVARCHAR2(128); + cr ROWID; + cc CHAR(128); + BEGIN + IF (type = 'NUMBER') THEN + dbms_stats.convert_raw_value(rawval, cn); + RETURN to_char(cn); + ELSIF (type = 'VARCHAR2' OR type = 'CHAR') THEN + dbms_stats.convert_raw_value(rawval, cv); + RETURN to_char(cv); + ELSIF (type = 'DATE') THEN + dbms_stats.convert_raw_value(rawval, cd); + RETURN to_char(cd); + ELSIF (type = 'NVARCHAR2') THEN + dbms_stats.convert_raw_value(rawval, cnv); + RETURN to_char(cnv); + ELSIF (type = 'ROWID') THEN + dbms_stats.convert_raw_value(rawval, cr); + RETURN to_char(cr); + ELSIF (type = 'VARCHAR2') THEN + dbms_stats.convert_raw_value(rawval, cc); + RETURN to_char(cc); + ELSE + RETURN 'UNKNOWN DATATYPE'; + END IF; + END; +SELECT + cs.partition_name + , CASE WHEN tc.hidden_column = 'YES' THEN 'H' ELSE ' ' END || LPAD(column_id, 3) AS column_id + , tc.column_name + , CASE WHEN nullable = 'N' THEN 'NOT NULL' ELSE NULL END AS nullable + , data_type || CASE + WHEN data_type = 'NUMBER' THEN '(' || data_precision || ',' || data_scale || ')' + ELSE '(' || data_length || ')' + END AS data_type + , cs.num_distinct + , cs.density + , cs.num_nulls + , CASE WHEN cs.histogram = 'NONE' THEN null ELSE cs.histogram END AS histogram + , cs.num_buckets + , display_raw(cs.low_value, data_type) AS low_value + , display_raw(cs.high_value, data_type) AS high_value + , notes +FROM dba_tab_cols tc, + dba_part_col_statistics cs +WHERE + tc.owner = cs.owner (+) +AND tc.table_name = cs.table_name (+) +AND tc.column_name = cs.column_name (+) +AND upper(tc.table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) + AND tc.owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END + AND UPPER(cs.partition_name) LIKE UPPER('&2') + AND UPPER(tc.column_name) LIKE UPPER('&3') +ORDER BY + tc.owner, tc.table_name, tc.column_id, + cs.partition_name +/ diff --git a/tpt/descx.sql b/tpt/descx.sql new file mode 100644 index 0000000..7034978 --- /dev/null +++ b/tpt/descx.sql @@ -0,0 +1,55 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL desc_column_id HEAD "Col#" FOR A4 +COL desc_column_name HEAD "Column Name" FOR A30 +COL desc_data_type HEAD "Type" FOR A25 WORD_WRAP +COL desc_nullable HEAD "Null?" FOR A10 +COL desc_density HEAD "Density" FOR 9.99999999999 +--prompt eXtended describe of &1 + +SELECT + CASE WHEN hidden_column = 'YES' THEN 'H' ELSE ' ' END|| + LPAD(column_id,3) desc_column_id, + SEGMENT_COLUMN_ID seg_col_id, +-- owner, +-- table_name, + column_name desc_column_name, + CASE WHEN nullable = 'N' THEN 'NOT NULL' ELSE NULL END AS desc_nullable, + data_type||CASE +-- WHEN data_type = 'NUMBER' THEN '('||data_precision||CASE WHEN data_scale = 0 THEN NULL ELSE ','||data_scale END||')' + WHEN data_type = 'NUMBER' THEN '('||data_precision||','||data_scale||')' + ELSE '('||data_length||')' + END AS desc_data_type, +-- data_default, + num_distinct, + density desc_density, + num_nulls, + CASE WHEN histogram = 'NONE' THEN null ELSE histogram END histogram, + num_buckets, + low_value, + high_value + --,'--' desc_succeeded +FROM + dba_tab_cols +WHERE + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +ORDER BY + owner ASC + , table_name ASC + , column_id ASC +/ + diff --git a/tpt/descx2.sql b/tpt/descx2.sql new file mode 100644 index 0000000..d535ac5 --- /dev/null +++ b/tpt/descx2.sql @@ -0,0 +1,58 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL desc_column_id HEAD "Col#" FOR A4 +COL desc_column_name HEAD "Column Name" FOR A30 +COL desc_data_type HEAD "Type" FOR A20 WORD_WRAP +COL desc_nullable HEAD "Null?" FOR A10 +COL desc_owner HEAD Owner +COL desc_table_name HEAD Table_Name + +--prompt eXtended describe of &1 + +break on desc_owner on desc_table_name skip 1 + +SELECT + owner desc_owner, + table_name desc_table_name, + CASE WHEN hidden_column = 'YES' THEN 'H' ELSE ' ' END|| + LPAD(column_id,3) desc_column_id, + column_name desc_column_name, + CASE WHEN nullable = 'N' THEN 'NOT NULL' ELSE NULL END AS desc_nullable, + data_type||CASE +-- WHEN data_type = 'NUMBER' THEN '('||data_precision||CASE WHEN data_scale = 0 THEN NULL ELSE ','||data_scale END||')' + WHEN data_type = 'NUMBER' THEN '('||data_precision||','||data_scale||')' + ELSE '('||data_length||')' + END AS desc_data_type, +-- data_default, + num_distinct, + density, + num_nulls, + CASE WHEN histogram = 'NONE' THEN null ELSE histogram END histogram, + num_buckets, + low_value, + high_value + --,'--' desc_succeeded +FROM + dba_tab_cols +WHERE + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +ORDER BY + owner, + table_name, + column_id +/ + diff --git a/tpt/descxx.sql b/tpt/descxx.sql new file mode 100644 index 0000000..1b81a87 --- /dev/null +++ b/tpt/descxx.sql @@ -0,0 +1,82 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL column_id HEAD "Col#" FOR A4 +COL column_name HEAD "Column Name" FOR A30 +COL nullable HEAD "Null?" FOR A10 +COL data_type HEAD "Type" FOR A25 WORD_WRAP +COL num_distinct HEAD "# distinct" FOR 9999999999999 +COL density HEAD "Density" FOR 9.99999999999 +COL num_nulls HEAD "# nulls" FOR 9999999999999 +COL histogram HEAD "Histogram" FOR A10 TRUNCATE +COL num_buckets HEAD "# buckets" FOR 999999 +COL low_value HEAD "Low Value" FOR A32 +COL high_value HEAD "High Value" FOR A32 + +WITH + FUNCTION display_raw(rawval RAW, type VARCHAR2) + RETURN VARCHAR2 + IS + cn NUMBER; + cv VARCHAR2(128); + cd DATE; + cnv NVARCHAR2(128); + cr ROWID; + cc CHAR(128); + BEGIN + IF (type = 'NUMBER') THEN + dbms_stats.convert_raw_value(rawval, cn); + RETURN to_char(cn); + ELSIF (type = 'VARCHAR2' OR type = 'CHAR') THEN + dbms_stats.convert_raw_value(rawval, cv); + RETURN to_char(cv); + ELSIF (type = 'DATE') THEN + dbms_stats.convert_raw_value(rawval, cd); + RETURN to_char(cd); + ELSIF (type = 'NVARCHAR2') THEN + dbms_stats.convert_raw_value(rawval, cnv); + RETURN to_char(cnv); + ELSIF (type = 'ROWID') THEN + dbms_stats.convert_raw_value(rawval, cr); + RETURN to_char(cr); + ELSIF (type = 'VARCHAR2') THEN + dbms_stats.convert_raw_value(rawval, cc); + RETURN to_char(cc); + ELSE + RETURN 'UNKNOWN DATATYPE'; + END IF; + END; +SELECT + CASE WHEN hidden_column = 'YES' THEN 'H' ELSE ' ' END || LPAD(column_id, 3) AS column_id + , column_name + , CASE WHEN nullable = 'N' THEN 'NOT NULL' ELSE NULL END AS nullable + , data_type || CASE + WHEN data_type = 'NUMBER' THEN '(' || data_precision || ',' || data_scale || ')' + ELSE '(' || data_length || ')' + END AS data_type + , num_distinct + , density + , num_nulls + , CASE WHEN histogram = 'NONE' THEN null ELSE histogram END AS histogram + , num_buckets + , display_raw(low_value, data_type) AS low_value + , display_raw(high_value, data_type) AS high_value +FROM dba_tab_cols +WHERE + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) + AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +ORDER BY + owner, table_name, column_id ASC +/ diff --git a/tpt/descxx11.sql b/tpt/descxx11.sql new file mode 100644 index 0000000..f6c36e1 --- /dev/null +++ b/tpt/descxx11.sql @@ -0,0 +1,106 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- descxx11.sql is for Oracle 11.x and lower. Use descxx.sql if you are on Oracle 12.1 or newer +-- +-- On versions older than 12c you need to create a PL/SQL stored procedure: +-- descxx.sql requires the display_raw function which is included in the comment section below. +-- the display_raw function is taken from Greg Rahn's blog as I'm too lazy to write one myself +-- http://structureddata.org/2007/10/16/how-to-display-high_valuelow_value-columns-from-user_tab_col_statistics/ +-- +-- create or replace function display_raw (rawval raw, type varchar2) +--return varchar2 +--is +-- cn number; +-- cv varchar2(128); +-- cd date; +-- cnv nvarchar2(128); +-- cr rowid; +-- cc char(128) +--begin +-- if (type = 'NUMBER') then +-- dbms_stats.convert_raw_value(rawval, cn); +-- return to_char(cn); +-- elsif (type = 'VARCHAR2') then +-- dbms_stats.convert_raw_value(rawval, cv); +-- return to_char(cv); +-- elsif (type = 'DATE') then +-- dbms_stats.convert_raw_value(rawval, cd); +-- return to_char(cd); +-- elsif (type = 'NVARCHAR2') then +-- dbms_stats.convert_raw_value(rawval, cnv); +-- return to_char(cnv); +-- elsif (type = 'ROWID') then +-- dbms_stats.convert_raw_value(rawval, cr); +-- return to_char(cnv); +-- elsif (type = 'CHAR') then +-- dbms_stats.convert_raw_value(rawval, cc); +-- return to_char(cc); +-- else +-- return 'UNKNOWN DATATYPE'; +-- end if; +--end; +--/ +-- +-- grant execute on display_raw to public; +-- create public synonym display_raw for display_raw; + + + +COL desc_column_id HEAD "Col#" FOR A4 +COL desc_table_owner HEAD "Table Owner" FOR A25 +COL desc_table_name HEAD "Table Name" FOR A30 +COL desc_column_name HEAD "Column Name" FOR A30 +COL desc_data_type HEAD "Type" FOR A20 WORD_WRAP +COL desc_nullable HEAD "Null?" FOR A10 +COL desc_low_value HEAD "Low Value" FOR A32 +COL desc_high_value HEAD "High Value" FOR A32 + +BREAK ON desc_table_owner ON desc_table_name SKIP 1 + + +--prompt eXtended describe of &1 + +SELECT + owner desc_table_owner, + table_name desc_table_name, + CASE WHEN hidden_column = 'YES' THEN 'H' ELSE ' ' END|| + LPAD(column_id,3) desc_column_id, + column_name desc_column_name, + CASE WHEN nullable = 'N' THEN 'NOT NULL' ELSE NULL END AS desc_nullable, + data_type||CASE +-- WHEN data_type = 'NUMBER' THEN '('||data_precision||CASE WHEN data_scale = 0 THEN NULL ELSE ','||data_scale END||')' + WHEN data_type = 'NUMBER' THEN '('||data_precision||','||data_scale||')' + ELSE '('||data_length||')' + END AS desc_data_type, +-- data_default, + num_distinct, + density, + num_nulls, + CASE WHEN histogram = 'NONE' THEN null ELSE histogram END histogram, + num_buckets, + display_raw(low_value, data_type) desc_low_value, + display_raw(high_value, data_type) desc_high_value +FROM + dba_tab_cols +WHERE + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +ORDER BY + owner, + table_name, + column_id +/ + diff --git a/tpt/descxx2.sql b/tpt/descxx2.sql new file mode 100644 index 0000000..645e8a2 --- /dev/null +++ b/tpt/descxx2.sql @@ -0,0 +1,103 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- descxx.sql requires the display_raw function which is included in the comment section below. +-- the display_raw function is taken from Greg Rahn's blog as I'm too lazy to write one myself +-- http://structureddata.org/2007/10/16/how-to-display-high_valuelow_value-columns-from-user_tab_col_statistics/ +-- +-- create or replace function display_raw (rawval raw, type varchar2) +--return varchar2 +--is +-- cn number; +-- cv varchar2(128); +-- cd date; +-- cnv nvarchar2(128); +-- cr rowid; +-- cc char(128) +--begin +-- if (type = 'NUMBER') then +-- dbms_stats.convert_raw_value(rawval, cn); +-- return to_char(cn); +-- elsif (type = 'VARCHAR2') then +-- dbms_stats.convert_raw_value(rawval, cv); +-- return to_char(cv); +-- elsif (type = 'DATE') then +-- dbms_stats.convert_raw_value(rawval, cd); +-- return to_char(cd); +-- elsif (type = 'NVARCHAR2') then +-- dbms_stats.convert_raw_value(rawval, cnv); +-- return to_char(cnv); +-- elsif (type = 'ROWID') then +-- dbms_stats.convert_raw_value(rawval, cr); +-- return to_char(cnv); +-- elsif (type = 'CHAR') then +-- dbms_stats.convert_raw_value(rawval, cc); +-- return to_char(cc); +-- else +-- return 'UNKNOWN DATATYPE'; +-- end if; +--end; +--/ +-- +-- grant execute on display_raw to public; +-- create public synonym display_raw for display_raw; + + + +COL desc_column_id HEAD "Col#" FOR A4 +COL desc_table_owner HEAD "Table Owner" FOR A25 +COL desc_table_name HEAD "Table Name" FOR A30 +COL desc_column_name HEAD "Column Name" FOR A30 +COL desc_data_type HEAD "Type" FOR A20 WORD_WRAP +COL desc_nullable HEAD "Null?" FOR A10 +COL desc_low_value HEAD "Low Value" FOR A32 +COL desc_high_value HEAD "High Value" FOR A32 + +BREAK ON desc_table_owner ON desc_table_name SKIP 1 + + +--prompt eXtended describe of &1 + +SELECT + owner desc_table_owner, + table_name desc_table_name, + CASE WHEN hidden_column = 'YES' THEN 'H' ELSE ' ' END|| + LPAD(column_id,3) desc_column_id, + column_name desc_column_name, + CASE WHEN nullable = 'N' THEN 'NOT NULL' ELSE NULL END AS desc_nullable, + data_type||CASE +-- WHEN data_type = 'NUMBER' THEN '('||data_precision||CASE WHEN data_scale = 0 THEN NULL ELSE ','||data_scale END||')' + WHEN data_type = 'NUMBER' THEN '('||data_precision||','||data_scale||')' + ELSE '('||data_length||')' + END AS desc_data_type, +-- data_default, + num_distinct, + density, + num_nulls, + CASE WHEN histogram = 'NONE' THEN null ELSE histogram END histogram, + num_buckets, + display_raw(low_value, data_type) desc_low_value, + display_raw(high_value, data_type) desc_high_value +FROM + dba_tab_cols +WHERE + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +ORDER BY + owner, + table_name, + column_id +/ + diff --git a/tpt/df.sql b/tpt/df.sql new file mode 100644 index 0000000..6227698 --- /dev/null +++ b/tpt/df.sql @@ -0,0 +1,36 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------- +-- SCRIPT: DF.SQL +-- PURPOSE: Show Oracle tablespace free space in Unix df style +-- AUTHOR: Tanel Poder [ http://www.tanelpoder.com ] +-- DATE: 2003-05-01 +------------------------------------------------------------------------------------------- + +col "% Used" for a6 +col "Used" for a22 + +select t.tablespace_name, t.gb "TotalGB", t.gb - nvl(f.gb,0) "UsedGB", nvl(f.gb,0) "FreeGB" + ,lpad(ceil((1-nvl(f.gb,0)/decode(t.gb,0,1,t.gb))*100)||'%', 6) "% Used", t.ext "Ext", + '|'||rpad(nvl(lpad('#',ceil((1-nvl(f.gb,0)/decode(t.gb,0,1,t.gb))*20),'#'),' '),20,' ')||'|' "Used" +from ( + select tablespace_name, trunc(sum(bytes)/(1024*1024*1024)) gb + from dba_free_space + group by tablespace_name + union all + select tablespace_name, trunc(sum(bytes_free)/(1024*1024*1024)) gb + from v$temp_space_header + group by tablespace_name +) f, ( + select tablespace_name, trunc(sum(bytes)/(1024*1024*1024)) gb, max(autoextensible) ext + from dba_data_files + group by tablespace_name + union all + select tablespace_name, trunc(sum(bytes)/(1024*1024*1024)) gb, max(autoextensible) ext + from dba_temp_files + group by tablespace_name +) t +where t.tablespace_name = f.tablespace_name (+) +order by t.tablespace_name; + diff --git a/tpt/dfm.sql b/tpt/dfm.sql new file mode 100644 index 0000000..09eb984 --- /dev/null +++ b/tpt/dfm.sql @@ -0,0 +1,36 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------- +-- SCRIPT: DF.SQL +-- PURPOSE: Show Oracle tablespace free space in Unix df style +-- AUTHOR: Tanel Poder [ http://www.tanelpoder.com ] +-- DATE: 2003-05-01 +------------------------------------------------------------------------------------------- + +col "% Used" for a6 +col "Used" for a22 + +select t.tablespace_name, t.mb "TotalMB", t.mb - nvl(f.mb,0) "UsedMB", nvl(f.mb,0) "FreeMB" + ,lpad(ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*100)||'%', 6) "% Used", t.ext "Ext", + '|'||rpad(nvl(lpad('#',ceil((1-nvl(f.mb,0)/decode(t.mb,0,1,t.mb))*20),'#'),' '),20,' ')||'|' "Used" +from ( + select tablespace_name, trunc(sum(bytes)/1048576) MB + from dba_free_space + group by tablespace_name + union all + select tablespace_name, trunc(sum(bytes_free)/1048576) MB + from v$temp_space_header + group by tablespace_name +) f, ( + select tablespace_name, trunc(sum(bytes)/1048576) MB, max(autoextensible) ext + from dba_data_files + group by tablespace_name + union all + select tablespace_name, trunc(sum(bytes)/1048576) MB, max(autoextensible) ext + from dba_temp_files + group by tablespace_name +) t +where t.tablespace_name = f.tablespace_name (+) +order by t.tablespace_name; + diff --git a/tpt/dg.sql b/tpt/dg.sql new file mode 100644 index 0000000..b6aff9b --- /dev/null +++ b/tpt/dg.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT == v$database +SELECT name,open_mode,database_role FROM v$database; +PROMPT == v$dataguard_config +SELECT * FROM v$dataguard_config; +PROMPT == v$managed_standby +SELECT process,status,sequence# FROM v$managed_standby; +PROMPT == v$recovery_progress +SELECT item, units, sofar, total, start_time, type FROM v$recovery_progress; + diff --git a/tpt/diag.sql b/tpt/diag.sql new file mode 100644 index 0000000..a49b939 --- /dev/null +++ b/tpt/diag.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM v$diag_info; + diff --git a/tpt/diag_sid.sql b/tpt/diag_sid.sql new file mode 100644 index 0000000..d117c01 --- /dev/null +++ b/tpt/diag_sid.sql @@ -0,0 +1,1164 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET FEEDBACK OFF LINES 300 + +DEF diag_sid="select sid from v$session where sid in (&1) union select sid from v$px_session where qcsid in (&1)" + +PROMPT +PROMPT -- diag_sid v2.01 by Tanel Poder ( http://www.tanelpoder.com ) +PROMPT + +-- v$session + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_spid head SPID for a12 wrap +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 truncate +col u_machine head MACHINE for a18 truncate +col u_program head PROGRAM for a20 truncate + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, +-- s.machine u_machine, +-- s.program u_program, + substr(s.program,instr(s.program,'(')) u_program, +-- p.pid, + p.spid u_spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +and s.sid in (&diag_sid) +/ + +-- v$session_wait + +-------------------------------------------------------------------------------- +-- +-- File name: sw.sql +-- Purpose: Display current Session Wait info +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sw +-- @sw 52,110,225 +-- @sw "select sid from v$session where username = 'XYZ'" +-- @sw &mysid +-- +-------------------------------------------------------------------------------- + +col sw_event head EVENT for a40 truncate +col sw_p1transl head P1TRANSL for a42 +col sw_sid head SID for 999999 + +col sw_p1 head P1 for a16 justify right +col sw_p2 head P2 for a16 justify right +col sw_p3 head P3 for a16 justify right + +select + sid sw_sid, + CASE WHEN state != 'WAITING' THEN 'WORKING' + ELSE 'WAITING' + END AS state, + CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' + ELSE event + END AS sw_event, + seq#, + seconds_in_wait sec_in_wait, + lpad(CASE WHEN P1 < 536870912 THEN to_char(P1) ELSE '0x'||rawtohex(P1RAW) END, 16) SW_P1, + lpad(CASE WHEN P2 < 536870912 THEN to_char(P2) ELSE '0x'||rawtohex(P2RAW) END, 16) SW_P2, + lpad(CASE WHEN P3 < 536870912 THEN to_char(P3) ELSE '0x'||rawtohex(P3RAW) END, 16) SW_P3, + CASE + WHEN event like 'cursor:%' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX')) + WHEN event like 'enq%' AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '|| + chr(bitand(p1, -16777216)/16777215)|| + chr(bitand(p1,16711680)/65535)|| + ' mode '||bitand(p1, power(2,14)-1) + WHEN event like 'latch%' AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '||( + select name||'[par' + from v$latch_parent + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + union all + select name||'[c'||child#||']' + from v$latch_children + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + ) + WHEN event like 'library cache pin' THEN + '0x'||RAWTOHEX(p1raw) + ELSE NULL END AS sw_p1transl +FROM + v$session_wait +WHERE + sid IN (&diag_sid) +ORDER BY + state, + sw_event, + p1, + p2, + p3 +/ +SET HEADING OFF +exec dbms_lock.sleep(1) +/ +exec dbms_lock.sleep(1) +/ +SET HEADING ON + +prompt +prompt Listing parallel Slave sessions (if any)... +prompt + +select * from v$px_session where qcsid in (&diag_sid); + +-- snapper begin +prompt +prompt Taking Snapper Snapshot (6 seconds) +prompt + +-------------------------------------------------------------------------------- +-- +-- File name: snapper.sql +-- Purpose: An easy to use Oracle session-level performance snapshot utility +-- +-- NB! This script does NOT require creation of any database objects! +-- +-- This is very useful for ad-hoc performance diagnosis in environments +-- with restrictive change management processes, where creating +-- even temporary tables and PL/SQL packages is not allowed or would +-- take too much time to get approved. +-- +-- All processing is done by few sqlplus commands and an anonymous +-- PL/SQL block, all that's needed is SQLPLUS access (and if you want +-- to output data to server-side tracefile then execute rights on +-- DBMS_SYSTEM). +-- +-- The output is formatted the way it could be easily post-processed +-- by either Unix string manipulation tools or loaded to spreadsheet. +-- +-- +-- Author: Tanel Poder +-- Copyright: (c) Tanel Poder - http://www.tanelpoder.com - All rights reserved. +-- +-------------------------------------------------------------------------------- +-- +-- The Session Snapper v2.01 +-- (c) Tanel Poder ( http://www.tanelpoder.com ) +-- +-- +-- +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a cheap ASCII +-- / imitation of a fish and a fishing rod. +-- | Nevertheless the PL/SQL code below the +-- | fish itself should be helpful for quick +-- | catching of relevant Oracle performance +-- | information. +-- | So I wish you happy... um... snapping? +-- | ) +-- | ...... +-- | iittii,,.... +-- ¿ iiffffjjjjtttt,, +-- ..;;ttffLLLLffLLLLLLffjjtt;;.. +-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,, +-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;.... +-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;.. +-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,, +-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;.. +-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii.. +-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;.. +-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,, +-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii.. +-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;.. +-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;; +-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;.. +-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. .... +-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii.. +-- ..;;ttttii;;.... ..;;;;.... +-- ..iiii;;.. +-- ..;;,, +-- .... +-- +-- +-- Usage: +-- +-- snapper.sql +-- +-- out - use dbms_output.put_line() for output +-- trace - write output to server process tracefile +-- (you must have execute permission on sys.dbms_system.ksdwrt() for that, +-- you can use both out and trace parameters together if you like ) +-- pagesize - display header lines after X snapshots. if pagesize=0 don't display +-- any headers. pagesize=-1 will display a terse header only once +-- gather - if omitted, gathers all statistics +-- - if specified, then gather following: +-- s - Session Statistics from v$sesstat +-- t - Session Time model info from v$sess_time_model +-- w - Session Wait statistics from v$session_event and v$session_wait +-- l - instance Latch get statistics ( gets + immediate_gets ) +-- e - instance Enqueue lock get statistics +-- b - buffer get Where statistics +-- a - All above +-- +-- sinclude - if specified, then show only V$SESSTAT stats which match the +-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+) +-- linclude - if specified, then show only V$LATCH latch stats which match the +-- LIKE pattern of linclude (REGEXP_LIKE in 10g+) +-- tinclude - if specified, then show only V$SESS_TIME_MODEL stats which match the +-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+) +-- winclude - if specified, then show only V$SESSION_EVENT wait stats which match the +-- LIKE pattern of winclude (REGEXP_LIKE in 10g+) +-- +-- you can combine above parameters in any order, separate them by commas +-- (and don't use spaces as otherwise they are treated as following parameters) +-- +-- - the number of seconds between taking snapshots +-- - the number of snapshots to take ( maximum value is power(2,31)-1 ) +-- +-- can be either one sessionid, multiple sessionids separated by +-- commas or a SQL statement which returns a list of SIDs (if you need spaces +-- in that parameter text, enclose it in double quotes). +-- +-- if you want to snap ALL sids, use "select sid from v$session" as value for +-- parameter +-- +-- +-- Examples: +-- +-- @snapper out 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- Wait, v$sesstat and v$sess_time_model statistics are reported by default) +-- +-- @snapper out,gather=w 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only Wait event statistics are reported) +-- +-- @snapper out,gather=st 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only v$sesstat and v$sess_Time_model statistics are gathered) +-- +-- @snapper trace,gather=stw,pagesize=0 10 90 117,210,313 +-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313 +-- all statistics are reported, do not print any headers) +-- +-- @snapper trace 900 999999999 "select sid from v$session" +-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace, +-- loop (almost) forever ) +-- +-- @snapper out,trace 300 12 "select sid from v$session where username='APPS'" +-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write +-- output to both dbms_output and tracefile) +-- +-- Notes: +-- +-- Snapper does not currently detect if a session with given SID has +-- ended and been recreated between snapshots, thus it may report bogus +-- statistics for such sessions. The check and warning for that will be +-- implemented in a future version. +-- +-------------------------------------------------------------------------------- + +set termout off tab off verify off linesize 299 + +-- Get parameters +-- Get parameters +define snapper_options="out" +define snapper_sleep="6" +define snapper_count="1" +define snapper_sid="&diag_sid" + +-- The following code is required for making this script "dynamic" as due +-- different Oracle versions, script parameters or granted privileges some +-- statements might not compile if not adjusted properly. + +define _IF_ORA10_OR_HIGHER="--" +define _IF_ORA11_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA11="--" +define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" /*dummy*/ +define _IF_X_ACCESSIBLE="--" + +col snapper_ora10higher noprint new_value _IF_ORA10_OR_HIGHER +col snapper_ora11higher noprint new_value _IF_ORA11_OR_HIGHER +col snapper_ora11lower noprint new_value _IF_LOWER_THAN_ORA11 +col dbms_system_accessible noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLE +col x_accessible noprint new_value _IF_X_ACCESSIBLE +col snapper_sid noprint new_value snapper_sid + +-- this block determines whether dbms_system.ksdwrt is accessible to us +-- dbms_describe is required as all_procedures/all_objects may show this object +-- even if its not executable by us (thanks to o7_dictionary_accessibility=false) + +var v varchar2(100) +var x varchar2(10) + +declare + + o sys.dbms_describe.number_table; + p sys.dbms_describe.number_table; + l sys.dbms_describe.number_table; + a sys.dbms_describe.varchar2_table; + dty sys.dbms_describe.number_table; + def sys.dbms_describe.number_table; + inout sys.dbms_describe.number_table; + len sys.dbms_describe.number_table; + prec sys.dbms_describe.number_table; + scal sys.dbms_describe.number_table; + rad sys.dbms_describe.number_table; + spa sys.dbms_describe.number_table; + + tmp number; + +begin + + begin + execute immediate 'select count(*) from x$kcbwh where rownum = 1' into tmp; + :x:= ' '; -- x$ tables are accessible, so dont comment any lines out + exception + when others then null; + end; + + sys.dbms_describe.describe_procedure( + 'DBMS_SYSTEM.KSDWRT', null, null, + o, p, l, a, dty, def, inout, len, prec, scal, rad, spa + ); + + -- we never get to following statement if dbms_system is not accessible + -- as sys.dbms_describe will raise an exception + :v:= '-- dbms_system is accessible'; + +exception + when others then null; +end; +/ + + +select + decode(substr(banner, instr(banner, 'Release ')+8,1), '1', '', '--') snapper_ora10higher, + decode(substr(banner, instr(banner, 'Release ')+8,2), '11','', '--') snapper_ora11higher, + decode(substr(banner, instr(banner, 'Release ')+8,2), '11','--', '') snapper_ora11lower, + nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible, + nvl(:x, '--') x_accessible +from + v$version +where + rownum=1; + +set termout on serverout on size 1000000 format wrapped + +-- main() + +declare + + -- forward declarations + procedure output(p_txt in varchar2); + procedure fout; + + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, + p_grouplen in number default 3 + ) + return varchar2; + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) + return varchar2; + + -- type, constant, variable declarations + + -- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_INTEGER + pls_adjust constant number(10,0) := power(2,31) - 1; + + type srec is record (stype varchar2(4), sid number, statistic# number, value number ); + type stab is table of srec index by pls_integer; + s1 stab; + s2 stab; + + type snrec is record (stype varchar2(4), statistic# number, name varchar2(64)); + type sntab is table of snrec index by pls_integer; + sn_tmp sntab; + sn sntab; + + type sestab is table of v$session%rowtype index by pls_integer; + + g_sessions sestab; + g_empty_sessions sestab; + + g_count_statname number; + g_count_eventname number; + + i number; + a number; + b number; + + c number; + delta number; + changed_values number; + pagesize number:=99999999999999; + missing_values_s1 number := 0; + missing_values_s2 number := 0; + disappeared_sid number := 0; + d1 date; + d2 date; + lv_gather varchar2(1000); + lv_header_string varchar2(1000); + lv_data_string varchar2(1000); + + -- output column configuration + output_header number := 0; -- 1=true 0=false + output_username number := 1; -- v$session.username + output_sid number := 1; -- sid + output_time number := 0; -- time of snapshot start + output_seconds number := 0; -- seconds in snapshot (shown in footer of each snapshot too) + output_stype number := 1; -- statistic type (WAIT,STAT,TIME,ENQG,LATG,...) + output_sname number := 1; -- statistic name + output_delta number := 1; -- raw delta + output_delta_s number := 0; -- raw delta normalized to per second + output_hdelta number := 0; -- human readable delta + output_hdelta_s number := 1; -- human readable delta normalized to per second + output_percent number := 1; -- percent of total time/samples + output_pcthist number := 1; -- percent of total visual bar (histogram) + + /*--------------------------------------------------- + -- proc for outputting data to trace or dbms_output + ---------------------------------------------------*/ + procedure output(p_txt in varchar2) is + begin + + if (getopt('&snapper_options', 'out') is not null) + or + (getopt('&snapper_options', 'out') is null and getopt('&snapper_options', 'trace') is null) + then + dbms_output.put_line(p_txt); + end if; + + -- The block below is a sqlplus trick for conditionally commenting out PL/SQL code + &_IF_DBMS_SYSTEM_ACCESSIBLE + if getopt('&snapper_options', 'trace') is not null then + sys.dbms_system.ksdwrt(1, p_txt); + sys.dbms_system.ksdfls; + end if; + -- */ + end; -- output + + /*--------------------------------------------------- + -- proc for outputting data, utilizing global vars + ---------------------------------------------------*/ + procedure fout is + l_output_username VARCHAR2(30); + begin + +-- output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# ); +-- output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + if output_username = 1 then + begin + l_output_username := nvl( g_sessions(s2(b).sid).username, substr(g_sessions(s2(b).sid).program, instr(g_sessions(s2(b).sid).program,'(')) ); + exception + when no_data_found then l_output_username := 'error'; + when others then raise; + end; + end if; + + output( CASE WHEN output_header = 1 THEN 'SID= ' END + || CASE WHEN output_sid = 1 THEN to_char(s2(b).sid,'999999')||', ' END + || CASE WHEN output_username = 1 THEN rpad(CASE s2(b).sid WHEN -1 THEN ' ' ELSE l_output_username END, 10)||', ' END + || CASE WHEN output_time = 1 THEN to_char(d1, 'YYYYMMDD HH24:MI:SS')||', ' END + || CASE WHEN output_seconds = 1 THEN to_char(case (d2-d1) when 0 then &snapper_sleep else (d2-d1) * 86400 end, '9999999')||', ' END + || CASE WHEN output_stype = 1 THEN s2(b).stype||', ' END + || CASE WHEN output_sname = 1 THEN rpad(sn(s2(b).statistic#).name, 40, ' ')||', ' END + || CASE WHEN output_delta = 1 THEN to_char(delta, '999999999999')||', ' END + || CASE WHEN output_delta_s = 1 THEN to_char(delta/(case (d2-d1) when 0 then &snapper_sleep else (d2-d1) * 86400 end),'999999999')||', ' END + || CASE WHEN output_hdelta = 1 THEN lpad(tptformat(delta, s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_hdelta_s = 1 THEN lpad(tptformat(delta/(case (d2-d1) when 0 then &snapper_sleep else (d2-d1)* 86400 end ), s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_percent = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN to_char(delta/CASE (d2-d1) WHEN 0 THEN &snapper_sleep ELSE (d2-d1) * 86400 END / 10000, '9999.9')||'%,' END END + || CASE WHEN output_pcthist = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN rpad(' '||rpad('|', ceil(round(delta/CASE (d2-d1) WHEN 0 THEN &snapper_sleep ELSE (d2-d1) * 86400 END / 100000,1))+1, '@'),12,' ')||'|' END END + ); + + end; + + /*--------------------------------------------------- + -- function for converting large numbers to human-readable format + ---------------------------------------------------*/ + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, -- for KiB/MiB formatting use + p_grouplen in number default 3 -- p_base=2 and p_grouplen=10 + ) + return varchar2 + is + begin + + if p_stype in ('WAIT','TIME') then + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then 'us' + when 1 then 'us' + when p_grouplen*1 then 'ms' + when p_grouplen*2 then 's' + when p_grouplen*3 then 'ks' + when p_grouplen*4 then 'Ms' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us' + end; + + else + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then '' + when 1 then '' + when p_grouplen*1 then 'k' + when p_grouplen*2 then 'M' + when p_grouplen*3 then 'G' + when p_grouplen*4 then 'T' + when p_grouplen*5 then 'P' + when p_grouplen*6 then 'E' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ) + end; + + end if; + + end; -- tptformat + + /*--------------------------------------------------- + -- simple function for parsing arguments from parameter string + ---------------------------------------------------*/ + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) return varchar2 + is + ret varchar(1000) := NULL; + begin + +-- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' ); +-- dbms_output.put('p_extract = ['||p_extract||'] ' ); + + if lower(p_parvalues) like lower(p_extract)||'%' + or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then + + ret := + nvl ( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract), + case + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) + when 0 then length(p_parvalues) + else + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) - 1 + end + ) + , chr(0) -- in case parameter was specified but with no value + ); + + else + ret := null; -- no parameter found + end if; + +-- dbms_output.put_line('ret = ['||ret||']'); + + return ret; + + end; -- getopt + + /*--------------------------------------------------- + -- proc for getting session list with username, osuser, machine etc + ---------------------------------------------------*/ + procedure get_sessions is + tmp_sessions sestab; + begin + + select + * + bulk collect into + tmp_sessions + from + v$session + where + sid in (&snapper_sid); + + g_sessions := g_empty_sessions; + + for i in 1..tmp_sessions.count loop + g_sessions(tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + end; -- get_sessions + + /*--------------------------------------------------- + -- proc for querying performance data into collections + ---------------------------------------------------*/ + procedure snap( p_snapdate in out date, p_stats in out stab ) is + + lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options', 'sinclude=' )), '%'); + lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options', 'linclude=' )), '%'); + lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options', 'tinclude=' )), '%'); + lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options', 'winclude=' )), '%'); + + + begin + p_snapdate := sysdate; + + select * + bulk collect into p_stats + from ( + select 'STAT' stype, sid, statistic# - pls_adjust statistic#, value + from v$sesstat + where sid in (&snapper_sid) + and (lv_gather like '%s%' or lv_gather like '%a%') + and statistic# in (select /*+ no_unnest */ statistic# from v$statname + where lower(name) like '%'||lv_include_stat||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (name, lv_include_stat, 'i') + ) + -- + union all + select + 'WAIT', sw.sid, + en.event# + (select count(*) from v$statname) + 1 - pls_adjust, + nvl(se.time_waited_micro,0) + ( decode(se.event||sw.state, sw.event||'WAITING', sw.seconds_in_wait, 0) * 1000000 ) value + from v$session_wait sw, v$session_event se, v$event_name en + where sw.sid = se.sid + and se.event = en.name + and se.sid in (&snapper_sid) + and (lv_gather like '%w%' or lv_gather like '%a%') + and event# in (select event# from v$event_name + where lower(name) like '%'||lv_include_wait||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (name, lv_include_wait, 'i') + ) + -- + &_IF_ORA10_OR_HIGHER union all + &_IF_ORA10_OR_HIGHER select 'TIME' stype, sid, stat_id - pls_adjust statistic#, value + &_IF_ORA10_OR_HIGHER from v$sess_time_model + &_IF_ORA10_OR_HIGHER where sid in (&snapper_sid) + &_IF_ORA10_OR_HIGHER and (lv_gather like '%t%' or lv_gather like '%a%') + &_IF_ORA10_OR_HIGHER and stat_id in (select stat_id from v$sys_time_model + &_IF_ORA10_OR_HIGHER where lower(stat_name) like '%'||lv_include_time||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (stat_name, lv_include_time, 'i') + &_IF_ORA10_OR_HIGHER ) + -- + union all + select 'LATG', -1 sid, + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + l.gets + l.immediate_gets value + from v$latch l + where + (lv_gather like '%l%' or lv_gather like '%a%') + and latch# in (select latch# from v$latchname + where lower(name) like '%'||lv_include_latch||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (name, lv_include_latch, 'i') + ) + -- + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 union all + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 select 'BUFG', -1 sid, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.why0+s.why1+s.why2 value + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 from x$kcbsw s, x$kcbwh w + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 where + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx = w.indx + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and s.why0+s.why1+s.why2 > 0 + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and (lv_gather like '%b%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER union all + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER select 'BUFG', -1 sid, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER sw.indx + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.why0+why.why1+why.why2+sw.other_wait value + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER from + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbuwhy why, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbwh dsc, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbsw sw + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER where + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.indx = dsc.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.why0 + why.why1 + why.why2 + sw.other_wait > 0 + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER -- deliberate cartesian join + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', -1 sid, + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + e.total_req# value + from v$enqueue_stat e + where + (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_stats + order by sid, stype, statistic#; + end snap; + + +begin + + pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize); + --output ( 'Pagesize='||pagesize ); + + -- determine which statistics to collect + lv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + when 'all' then 'stw' + else nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + end; + + --lv_gather:=getopt ('&snapper_options', 'gather='); + --output('lv_gather='||lv_gather); + + + + if pagesize > 0 then + output(' '); + output('-- Session Snapper v2.01 by Tanel Poder ( http://www.tanelpoder.com )'); + output(' '); + end if; + + -- initialize statistic and event name array + -- fetch statistic names with their adjusted IDs + select * + bulk collect into sn_tmp + from ( + select 'STAT' stype, statistic# - pls_adjust statistic#, name + from v$statname + where (lv_gather like '%s%' or lv_gather like '%a%') + -- + union all + select 'WAIT', + event# + (select count(*) from v$statname) + 1 - pls_adjust, name + from v$event_name + where (lv_gather like '%w%' or lv_gather like '%a%') + -- + &_IF_ORA10_OR_HIGHER union all + &_IF_ORA10_OR_HIGHER select 'TIME' stype, stat_id - pls_adjust statistic#, stat_name name + &_IF_ORA10_OR_HIGHER from v$sys_time_model + &_IF_ORA10_OR_HIGHER where (lv_gather like '%t%' or lv_gather like '%a%') + -- + union all + select 'LATG', + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + name + from v$latch l + where (lv_gather like '%l%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE union all + &_IF_X_ACCESSIBLE select 'BUFG', + &_IF_X_ACCESSIBLE indx + + &_IF_X_ACCESSIBLE (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE kcbwhdes name + &_IF_X_ACCESSIBLE from x$kcbwh + &_IF_X_ACCESSIBLE where (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + eq_type + from ( + select es.eq_type + &_IF_ORA10_OR_HIGHER ||' - '||lt.name + eq_type, + total_req# + from + v$enqueue_stat es + &_IF_ORA10_OR_HIGHER , v$lock_type lt + &_IF_ORA10_OR_HIGHER where es.eq_type = lt.type + ) e + where (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_statnames + order by stype, statistic#; + + -- store these into an index_by array organized by statistic# for fast lookup + --output('sn_tmp.count='||sn_tmp.count); + --output('lv_gather='||lv_gather); + for i in 1..sn_tmp.count loop + -- output('i='||i||' statistic#='||sn_tmp(i).statistic#); + sn(sn_tmp(i).statistic#) := sn_tmp(i); + end loop; + + + -- main sampling loop + for c in 1..&snapper_count loop + + -- print header if required + lv_header_string := + CASE WHEN output_header = 1 THEN 'HEAD,' END + || CASE WHEN output_sid = 1 THEN ' SID,' END + || CASE WHEN output_username = 1 THEN ' USERNAME ,' END + || CASE WHEN output_time = 1 THEN ' SNAPSHOT START ,' END + || CASE WHEN output_seconds = 1 THEN ' SECONDS,' END + || CASE WHEN output_stype = 1 THEN ' TYPE,' END + || CASE WHEN output_sname = 1 THEN rpad(' STATISTIC',41,' ')||',' END + || CASE WHEN output_delta = 1 THEN ' DELTA,' END + || CASE WHEN output_delta_s = 1 THEN ' DELTA/SEC,' END + || CASE WHEN output_hdelta = 1 THEN ' HDELTA,' END + || CASE WHEN output_hdelta_s = 1 THEN ' HDELTA/SEC,' END + || CASE WHEN output_percent = 1 THEN ' %TIME,' END + || CASE WHEN output_pcthist = 1 THEN ' GRAPH ' END + ; + + + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(rpad('-',length(lv_header_string),'-')); + output(lv_header_string); + output(rpad('-',length(lv_header_string),'-')); + else + if pagesize = -1 and c = 1 then + + output(lv_header_string); + + end if; + end if; + + + if c = 1 then + + get_sessions; + snap(d1,s1); + + else + + get_sessions; + d1 := d2; + s1 := s2; + + end if; -- c = 1 + + dbms_lock.sleep( (&snapper_sleep - (sysdate - d1)) ); + -- dbms_lock.sleep( (&snapper_sleep - (sysdate - d1))*1000/1024 ); + + get_sessions; + snap(d2,s2); + + -- manually coded nested loop outer join for calculating deltas + -- why not use a SQL join? this would require creation of PL/SQL + -- collection object types, but Snapper does not require any changes + -- to the database, so any custom object types are out! + changed_values := 0; + missing_values_s1 := 0; + missing_values_s2 := 0; + + -- remember last disappeared SID so we woudlnt need to output a warning + -- message for each statistic row of that disappeared sid + disappeared_sid := 0; + + i :=1; -- iteration counter (for debugging) + a :=1; -- s1 array index + b :=1; -- s2 array index + + while ( a <= s1.count and b <= s2.count ) loop + + delta := 0; -- don't print + + case + when s1(a).sid = s2(b).sid then + + case + when s1(a).statistic# = s2(b).statistic# then + + delta := s2(b).value - s1(a).value; + if delta != 0 then fout(); end if; + + a := a + 1; + b := b + 1; + + when s1(a).statistic# > s2(b).statistic# then + + delta := s2(b).value; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).statistic# < s2(b).statistic# then + + output('ERROR, s1(a).statistic# < s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + else + output('ERROR, s1(a).statistic# ? s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + end case; -- s1(a).statistic# ... s2(b).statistic# + + when s1(a).sid > s2(b).sid then + + delta := s2(b).value; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).sid < s2(b).sid then + + if disappeared_sid != s2(b).sid then + output('WARN, Session has disappeared during snapshot, ignoring SID='||to_char(s2(b).sid)||' debug(a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count||')'); + end if; + disappeared_sid := s2(b).sid; + a := a + 1; + + else + output('ERROR, Should not be here, SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + end case; -- s1(a).sid ... s2(b).sid + + i:=i+1; + + if delta != 0 then + + changed_values := changed_values + 1; + + end if; -- delta != 0 + + end loop; -- while ( a <= s1.count and b <= s2.count ) + + + if pagesize > 0 and changed_values > 0 then output('-- End of snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(case (d2-d1) when 0 then &snapper_sleep else round((d2-d1) * 86400, 1) end)); output(''); end if; + + end loop; -- for c in 1..snapper_count + +end; +/ + +undefine snapper_oraversion +undefine snapper_sleep +undefine snapper_count +undefine snapper_sid +undefine _IF_ORA10_OR_HIGHER +undefine _IF_DBMS_SYSTEM_ACCESSIBLE +undefine _IF_X_ACCESSIBLE +col snapper_ora10higher clear +col snapper_ora11higher clear +col snapper_ora11lower clear +col dbms_system_accessible clear + +set serverout off +--- snapper end --- + +-- sql text begin + +-- col sql_sql_text head SQL_TEXT format a150 word_wrap +-- col sql_child_number head CH# for 999 +-- +-- select +-- hash_value, +-- child_number sql_child_number, +-- sql_text sql_sql_text +-- from +-- v$sql +-- where +-- hash_value in (&1); +-- +-- select +-- child_number sql_child_number, +-- address parent_handle, +-- child_address object_handle, +-- parse_calls parses, +-- loads h_parses, +-- executions, +-- fetches, +-- rows_processed, +-- buffer_gets LIOS, +-- disk_reads PIOS, +-- sorts, +-- -- address, +-- cpu_time/1000 cpu_ms, +-- elapsed_time/1000 ela_ms, +-- -- sharable_mem, +-- -- persistent_mem, +-- -- runtime_mem, +-- users_executing +-- from +-- v$sql +-- where +-- hash_value in (&1); + + + +-- sql text end + +--- exec plan +set verify off heading off feedback off linesize 299 pagesize 5000 tab off + + +column xms_child_number noprint +break on xms_child_number skip 1 + +column xms_id heading Op|ID format 999 +column xms_id2 heading Op|ID format a6 +column xms_pred heading Pr|ed format a2 +column xms_optimizer heading Optimizer|Mode format a10 +column xms_plan_step heading Operation for a55 +column xms_object_name heading Objcect|Name for a30 +column xms_opt_cost heading Optimizer|Cost for 99999999999 +column xms_opt_card heading "Estimated|output rows" for 999999999999 +column xms_opt_bytes heading "Estimated|output bytes" for 999999999999 +column xms_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap +column xms_cpu_cost heading CPU|Cost for 9999999 +column xms_io_cost heading IO|Cost for 9999999 + +column xms_last_output_rows heading "Real #rows|returned" for 999999999 +column xms_last_starts heading "Op. ite-|rations" for 999999999 +column xms_last_cr_buffer_gets heading "Logical|reads" for 999999999 +column xms_last_cu_buffer_gets heading "Logical|writes" for 999999999 +column xms_last_disk_reads heading "Physical|reads" for 999999999 +column xms_last_disk_writes heading "Physical|writes" for 999999999 +column xms_last_elapsed_time_ms heading "ms spent in|operation" for 9,999,999.99 + + + + +select --+ ordered use_nl(mys ses) use_nl(mys sql) + 'SQL hash value: ' xms_sql_hash_value_text, + sql.hash_value xms_hash_value, + ' Cursor address: ' xms_cursor_address_text, + sql.address xms_sql_address, + ' | Statement first parsed at: '|| sql.first_load_time ||' | '|| + round( (sysdate - to_date(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'))*86400 ) || ' seconds ago' xms_seconds_ago +from + v$sql sql, + all_users usr +where + sql.parsing_user_id = usr.user_id +--and sql.hash_value in (&1) +and sql.hash_value = (select /*+ NO_UNNEST */ sql_hash_value from v$session where sid = &1) +and to_char(sql.child_number) like '&2' +order by + sql.hash_value asc, + sql.child_number asc +/ + +set heading on + +select --+ ordered use_nl(p ps) + p.child_number xms_child_number, + case when p.access_predicates is not null then 'A' else ' ' end || + case when p.filter_predicates is not null then 'F' else ' ' end xms_pred, + p.id xms_id, + lpad(' ',p.depth*1,' ')|| p.operation || ' ' || p.options xms_plan_step, + p.object_name xms_object_name, +-- p.search_columns, +-- p.optimizer xms_optimizer, + round(ps.last_elapsed_time/1000,2) + xms_last_elapsed_time_ms, + p.cardinality xms_opt_card, + ps.last_output_rows xms_last_output_rows, + ps.last_starts xms_last_starts, + ps.last_cr_buffer_gets xms_last_cr_buffer_gets, + ps.last_cu_buffer_gets xms_last_cu_buffer_gets, + ps.last_disk_reads xms_last_disk_reads, + ps.last_disk_writes xms_last_disk_writes, + p.cost xms_opt_cost +-- p.bytes xms_opt_bytes, +-- p.cpu_cost xms_cpu_cost, +-- p.io_cost xms_io_cost, +-- p.other_tag, +-- p.other, +-- p.distribution, +-- p.access_predicates, +-- p.filter_predicates, +from + v$sql_plan p, + v$sql_plan_statistics ps +where + p.address = ps.address(+) +and p.hash_value = ps.hash_value(+) +and p.id = ps.operation_id(+) +--and p.hash_value in (&1) +and p.hash_value = (select /*+ NO_UNNEST */ sql_hash_value from v$session where sid = &1) +and to_char(p.child_number) like '%' -- to_char is just used for convenient filtering using % for all children +/ + +prompt + + +select * from ( + select + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - access('|| substr(access_predicates,1,3989) || ')' xms_predicate_info + from + v$sql_plan + where + hash_value in (&1) + and to_char(child_number) like '&2' + and access_predicates is not null + union all + select + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - filter('|| substr(filter_predicates,1,3989) || ')' xms_predicate_info + from + v$sql_plan + where +-- hash_value in (&1) + hash_value = (select /*+ NO_UNNEST */ sql_hash_value from v$session where sid = &1) + and to_char(child_number) like '%' + and filter_predicates is not null +) +order by + xms_child_number asc, + xms_id2 asc, + xms_predicate_info asc +/ + +--- exec plan end --- + +CLEAR COLUMNS + +SET FEEDBACK ON + +PROMPT +PROMPT -- diag_sid complete! +PROMPT \ No newline at end of file diff --git a/tpt/dir.sql b/tpt/dir.sql new file mode 100644 index 0000000..fb2eb34 --- /dev/null +++ b/tpt/dir.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +host ls -l &SQLPATH/&1 diff --git a/tpt/dirs.sql b/tpt/dirs.sql new file mode 100644 index 0000000..9f30300 --- /dev/null +++ b/tpt/dirs.sql @@ -0,0 +1,7 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col dirs_directory_path head DIRECTORY_PATH for a90 +col dirs_directory_name head DIRECTORY_NAME for a40 WRAP +col dirs_owner HEAD DIRECTORY_OWNER FOR A30 +select directory_name dirs_directory_name, directory_path dirs_directory_path from dba_directories; diff --git a/tpt/disable_restricting_fks.sql b/tpt/disable_restricting_fks.sql new file mode 100644 index 0000000..2888b75 --- /dev/null +++ b/tpt/disable_restricting_fks.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT 'ALTER TABLE '||c.owner||'.'||c.table_name||' DISABLE CONSTRAINT '||c.constraint_name||';' +FROM dba_constraints c +WHERE (c.owner, c.constraint_name) IN (select a.owner, a.constraint_name + FROM dba_constraints a, dba_constraints b + WHERE + a.r_owner = b.owner + AND a.r_constraint_name = b.constraint_name + AND a.constraint_type = 'R' + AND UPPER(b.table_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' + AND UPPER(b.owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' + ) +/ diff --git a/tpt/disco.sql b/tpt/disco.sql new file mode 100644 index 0000000..ce1a1fb --- /dev/null +++ b/tpt/disco.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: disco.sql +-- Purpose: Generates commands for disconnecting selected sessions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @disco +-- @disco sid=150 +-- @disco username='SYSTEM' +-- @disco "username='APP' and program like 'sqlplus%'" +-- +-- Other: This script doesnt actually kill or disconnect any sessions +-- it just generates the ALTER SYSTEM DISCONNECT SESSION +-- commands, the user can select and paste in the selected +-- commands manually +-- +-------------------------------------------------------------------------------- + +select '-- alter system disconnect session '''||sid||','||serial#||''' immediate -- ' + ||username||'@'||machine||' ('||program||');' commands_to_verify_and_run +from v$session +where &1 +/ diff --git a/tpt/dist.sql b/tpt/dist.sql new file mode 100644 index 0000000..439ec06 --- /dev/null +++ b/tpt/dist.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt select distinct &1 from &2; +select distinct &1 from &2; diff --git a/tpt/distribution.sql b/tpt/distribution.sql new file mode 100644 index 0000000..2b804d3 --- /dev/null +++ b/tpt/distribution.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@hist_generic &1 &2 10 \ No newline at end of file diff --git a/tpt/dnfs.sql b/tpt/dnfs.sql new file mode 100644 index 0000000..c240940 --- /dev/null +++ b/tpt/dnfs.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL svrname FOR A20 +COL dirname FOR A20 +COL filename FOR A60 +COL path FOR A20 +COL local FOR A20 + +--SELECT 'MY_STATS' my_stats, s.* FROM v$dnfs_stats s WHERE pnum = (SELECT pid FROM v$process WHERE addr = (SELECT paddr FROM v$session WHERE sid = SYS_CONTEXT('USERENV', 'SID'))); +SELECT 'STATS ' my_stats, s.* FROM v$dnfs_stats s WHERE pnum IN (SELECT pnum FROM v$dnfs_channels) ORDER BY pnum; +SELECT 'SERVERS ' servers, s.* FROM v$dnfs_servers s; +SELECT 'CHANNELS' channels, c.* FROM v$dnfs_channels c; +SELECT 'FILES ' files, f.* FROM v$dnfs_files f; + diff --git a/tpt/doid.sql b/tpt/doid.sql new file mode 100644 index 0000000..9744b70 --- /dev/null +++ b/tpt/doid.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col o_owner heading owner for a25 +col o_object_name heading object_name for a30 +col o_object_type heading object_type for a18 +col o_status heading status for a9 + +select + object_id, + owner o_owner, + object_name o_object_name, + subobject_name o_partition, + object_type o_object_type, + created, + last_ddl_time, + status o_status +from + dba_objects +where + data_object_id in (&1) +order by + o_object_name, + o_owner, + o_object_type +; + diff --git a/tpt/drop_sql_baseline.sql b/tpt/drop_sql_baseline.sql new file mode 100644 index 0000000..0224c50 --- /dev/null +++ b/tpt/drop_sql_baseline.sql @@ -0,0 +1,23 @@ +DEF sql_handle=&1 + +-- TODO: Additionally look up the correct SQL_HANDLE using dba_sql_plan_baselines.plan_name +-- as this is what DBMS_XPLAN reports as used... (so no manual lookup from plan_name -> sql_handle +-- is needed) + +-- You can get the SQL_HANDLE from DBA_SQL_PLAN_BASELINES + +-- DBMS_SPM basic baseline use is included in Oracle EE in 11g+ and SE from 18c+ +-- https://blogs.oracle.com/optimizer/does-the-use-of-sql-plan-management-and-the-dbmsspm-database-package-require-a-tuning-or-diagnostic-pack-license + +SET SERVEROUT ON SIZE 1000000 + +DECLARE + x NUMBER; +BEGIN + x:=DBMS_SPM.DROP_SQL_PLAN_BASELINE('&sql_handle'); + DBMS_OUTPUT.PUT_LINE('ret='||x); +END; +/ + +SET SERVEROUT OFF + diff --git a/tpt/drop_sql_patch.sql b/tpt/drop_sql_patch.sql new file mode 100644 index 0000000..1f2019a --- /dev/null +++ b/tpt/drop_sql_patch.sql @@ -0,0 +1 @@ +EXEC dbms_sqldiag.drop_sql_patch('&1'); diff --git a/tpt/drop_sql_profile.sql b/tpt/drop_sql_profile.sql new file mode 100644 index 0000000..c7a8099 --- /dev/null +++ b/tpt/drop_sql_profile.sql @@ -0,0 +1 @@ +EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE('&1') diff --git a/tpt/dsv.sql b/tpt/dsv.sql new file mode 100644 index 0000000..f87754d --- /dev/null +++ b/tpt/dsv.sql @@ -0,0 +1,14 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@saveset +-- set underline off if dont want dashes to appear between column headers and data +set termout off feedback off colsep &1 lines 32767 trimspool on trimout on tab off newpage none underline off +spool &_TPT_TEMPDIR/output_&_i_inst..&2 +/ +spool off + +@@loadset + +host &_START &_TPT_TEMPDIR/output_&_i_inst..&2 diff --git a/tpt/dtrace/dstackprof.sh b/tpt/dtrace/dstackprof.sh new file mode 100644 index 0000000..06ba70c --- /dev/null +++ b/tpt/dtrace/dstackprof.sh @@ -0,0 +1,69 @@ +#!/bin/ksh +# +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +################################################################################# +# +# File name: dstackprof.sh v1.02 29-Aug-2008 +# Purpose: Samples target process stack using DTrace, strips the PC function +# offsets from output and re-aggregates +# +# Author: Tanel Poder +# Copyright: (c) http://www.tanelpoder.com +# +# Usage: dstackprof.sh [SECONDS] [STACKS] [FRAMES] +# +# +# Other: +# +# +# +################################################################################# + +DEFAULT_SECONDS=5 +DEFAULT_FRAMES=100 +DEFAULT_STACKS=20 + +FREQUENCY=1001 + +[ $# -lt 1 ] && echo " Usage: $0 [SECONDS] [STACKS] [FRAMES]\n" && exit 1 +[ -z $2 ] && SECONDS=$DEFAULT_SECONDS || SECONDS=$2 +[ -z $3 ] && STACKS=$DEFAULT_STACKS || STACKS=$3 +[ -z $4 ] && FRAMES=$DEFAULT_FRAMES || FRAMES=$4 +PROCESS=$1 + +echo +echo "DStackProf v1.02 by Tanel Poder ( http://www.tanelpoder.com )" +echo "Sampling pid $PROCESS for $SECONDS seconds with stack depth of $FRAMES frames..." +echo + +dtrace -q -p $PROCESS -n ' +profile-'$FREQUENCY' +/pid == $target/ { + @u[ustack('$FRAMES')] = count(); + @k[stack('$FRAMES')] = count(); +} +tick-1sec +/i++ >= '$SECONDS'/ { + exit(0); +} +END { + printa(@u); + printa(@k); +} +' | sed 's/^ *//;/^$/d;s/+.*$//;s/^oracle`//g' | \ + awk '/^$/{ printf "\n" }/^[0-9]*$/{ printf ";%s\n", $1 }/[a-z]/{ printf "%s<", $1 }END{ printf "\n" }' | \ + sed '/^;/d' | \ + sort | \ + awk -F";" ' + /NR==1/{ sum=0; total=0; oldstack=$1 } + { + if (oldstack==$1) {sum+=$2;total+=$2} + else {printf "%d samples with stack below<__________________<%s\n", sum, oldstack; oldstack=$1; sum=$2; total+=$2} + } + END {printf "%d samples with stack below<__________________<%s\n%d Total samples captured\n", sum, oldstack, total} + ' | \ + sort -bn | \ + tail -$((STACKS+1)) | \ + tr '<' '\n' + diff --git a/tpt/dtrace/enq_trace.sh b/tpt/dtrace/enq_trace.sh new file mode 100644 index 0000000..ddb3edf --- /dev/null +++ b/tpt/dtrace/enq_trace.sh @@ -0,0 +1,96 @@ +#!/bin/ksh + +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +#-------------------------------------------------------------------------------- +#-- +#-- File name: enq_trace.sh +#-- Purpose: Trace specific enqueue lock gets and process activity during +#-- lock holding to find out why exactly was a lock taken and why +#-- hasn't it been released fast enough. This script should be used +#-- only when conventional troubleshooting mechanisms +#-- (v$ views, ASH, hanganalyze, systemstate dumps) do not give +#-- enough relevant details about the hang +#-- +#-- Author: Tanel Poder +#-- Copyright: (c) http://www.tanelpoder.com +#-- +#-- Other: EXPERIMENTAL! This script needs reviewinng and adjustment, +#-- case by case. It's meant for diagnosing very specific hangs +#-- and you need to know what you're doing before running it in +#-- production +#-- +#-------------------------------------------------------------------------------- + + +# Set the lock type# we want to trace (should be 22 for CF enqueue on 11.1.0.7 and 18 on 10.2.0.3) +LOCK_TYPE=18 + +# --------------------------------------------------------------- +# -- You can verify what's the correct lock type# for CF enqueue +# -- using this query (run as SYS). Set the LOCK_TYPE variable +# -- above to match the result of the query +# --------------------------------------------------------------- +# select +# i +# from +# ( +# select +# rest.indx i, +# rest.resname type +# from X$KSIRESTYP rest, X$KSQEQTYP eqt +# where (rest.inst_id = eqt.inst_id) +# and (rest.indx = eqt.indx) +# and (rest.indx > 0) +# ) +# where +# type = 'CF' +# / +# --------------------------------------------------------------- + +PID=$1 +echo Tracing PID $PID `ps -ocomm -p $PID | grep -v COMMAND` + +dtrace $LOCK_TYPE -p $PID -qn ' +/* ring buffer policy probably not needed due low trace volume so its commented out + #pragma D option bufpolicy=ring + #pragma D option bufsize=256k +*/ + +pid$target:oracle:ksqgtlctx:entry +/arg4 == $1/ +{ + gettime=timestamp; + enqHolder = pid; + enqAddress = arg0; + printf("%d [%Y] getting enqueue: pid=%d proc=%s enqAddress=0x%x locktype#=%d get_stack={", gettime, walltimestamp, pid, curpsinfo->pr_psargs, enqAddress, arg4); + ustack(50); + printf("}\n"); +} + +pid$target:oracle:ksqrcl:entry +/arg0 == enqAddress/ { + printf("%d [%Y] releasing enqueue: pid=%d proc=%s enqAddress=0x%x usec_held=%d\n", timestamp, walltimestamp, pid, curpsinfo->pr_psargs, arg0, (timestamp-gettime)/1000); + enqAddress = 0; +} + +pid$target:oracle:kslwtb_tm:entry +/enqAddress && enqHolder == pid/ { + currentWait = arg0; +} + +pid$target:oracle:kslwte_tm:return +/enqAddress && enqHolder == pid/ { + currentWait = 0; +} + +tick-1sec +/enqAddress/ +{ + printf("%d [%Y] still holding enqueue: pid=%d proc=%s enqAddress=0x%x current_wait=%d current_stack={", timestamp, walltimestamp, pid, curpsinfo->pr_psargs, enqAddress, currentWait); + stack(50); + ustack(50); + printf("}\n"); +} +' + diff --git a/tpt/dtrace/qd b/tpt/dtrace/qd new file mode 100644 index 0000000..3a2303a --- /dev/null +++ b/tpt/dtrace/qd @@ -0,0 +1,31 @@ +#!/bin/ksh + +# "Quick Dtrace" script by Tanel Poder (http://www.tanelpoder.com) + +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +PROCESS=$1 +shift + +for F in $* ; do + + FUNCLIST_ENTRY=${FUNCLIST_ENTRY}",pid\$target::$F:entry" + FUNCLIST_RETURN=${FUNCLIST_RETURN}",pid\$target::$F:return" + +done + +FUNCLIST_ENTRY=`echo "$FUNCLIST_ENTRY" | sed 's/^,//'` +FUNCLIST_RETURN=`echo "$FUNCLIST_RETURN" | sed 's/^,//'` + +echo $FUNCLIST_ENTRY +echo $FUNCLIST_RETURN + +#dtrace -p $PROCESS -Fn $FUNCLIST"{ trace(probefunc); trace(arg0); trace(arg1); trace(arg2); trace(arg3); }" +#dtrace -p $PROCESS -Fn $FUNCLIST'{ printf("%16x %16x %16x %16x %16x %16x", arg0, arg1, arg2, arg3, arg4, arg5); }' +#dtrace -p $PROCESS -Fn $FUNCLIST'{ printf("%s %16x %16x %16x %16x %16x", copyinstr(arg0), arg1, arg2, arg3, arg4, arg5); }' + +dtrace -Zp $PROCESS -Fn \ +$FUNCLIST_ENTRY'{ printf("%16x ", arg0 ); }'\ +$FUNCLIST_RETURN'{ printf("%16x", arg1); }' + + diff --git a/tpt/dtrace/qda b/tpt/dtrace/qda new file mode 100644 index 0000000..6412c20 --- /dev/null +++ b/tpt/dtrace/qda @@ -0,0 +1,31 @@ +#!/bin/ksh + +# "Quick Dtrace" script by Tanel Poder (http://www.tanelpoder.com) +# (qda prints first 6 function arguments for function calls) + +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +#$FUNCLIST_ENTRY'{ printf("%16x %16x %16x %16x %16x %16x", arg0, arg1, arg2, arg3, arg4, arg5); }'\ + +PROCESS=$1 +shift + +for F in $* ; do + + FUNCLIST_ENTRY=${FUNCLIST_ENTRY}",pid\$target::$F:entry" + FUNCLIST_RETURN=${FUNCLIST_RETURN}",pid\$target::$F:return" + +done + +FUNCLIST_ENTRY=`echo "$FUNCLIST_ENTRY" | sed 's/^,//'` +FUNCLIST_RETURN=`echo "$FUNCLIST_RETURN" | sed 's/^,//'` + +echo $FUNCLIST + +#$FUNCLIST_ENTRY'{ printf("%16x %16x %16x %16x %16x %16x", arg0, arg1, arg2, arg3, arg4, arg5); }' + +dtrace -p $PROCESS -Fn \ +$FUNCLIST_ENTRY'{ printf("%x %x %x %x %x %x", arg0, arg1, arg2, arg3, arg4, arg5); }'\ +$FUNCLIST_RETURN'{ printf("%x", arg1); }' + diff --git a/tpt/dtrace/qer_trace.sh b/tpt/dtrace/qer_trace.sh new file mode 100644 index 0000000..bf2b9a6 --- /dev/null +++ b/tpt/dtrace/qer_trace.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +# Name: qer_trace.sh - Query Execution Row-source Trace script +# Version: 0.2 +# Author: Tanel Poder (http://blog.tanelpoder.com) +# +# Notes: Comment out the kcbgtcr:entry and kcbgtcr:return functions if you +# want to reduce the amount of output this script generates or see the +# output being indented more and more to the right without returning +# (dtrace doesn't recognize the return call in some cases) + +dtrace -Fp $1 -n ' + +pid$target:oracle:opifch*:entry +{} + +pid$target:oracle:opifch*:return +{ printf("= %x", arg1) } + +struct qer_rws { + uint16_t rws_id; + uint16_t rws_parent; +}; + +struct qer_rws op; + +pid$target:oracle:qer*Fetch*:entry +/*, pid$target:oracle:kpofcr:entry + , pid$target:oracle:rwsfcd:entry */ +{ + op.rws_parent = *(uint32_t *)copyin(arg0,2); + op.rws_id = *(uint32_t *)copyin(arg0+2,2); + printf("op=%d par=%d rows=%d", op.rws_id, op.rws_parent, arg4) + +} + +pid$target:oracle:qer*Fetch*:return +/*, pid$target:oracle:kpofcr:return + , pid$target:oracle:rwsfcd:return */ +{ printf("= %d", arg1) } + + +struct kcb_dba_t { + uint32_t ts; + uint16_t rfile; + uint32_t block; +}; + +struct kcb_dba_t dba; + +pid$target:oracle:kcbgtcr:entry +{ + + dba.ts = *(uint32_t *) copyin(arg0,4); + dba.rfile = *(uint32_t *) copyin(arg0+4,4) >> 22 & 0x000003FF ; + dba.block = *(uint32_t *) copyin(arg0+4,4) & 0x003FFFFF ; + + printf("ts=%d rfile=%x block=%d %x x$kcbwh.indx=%x", dba.ts, dba.rfile, dba.block, arg1,arg2); + +} + +pid$target:oracle:kcbgtcr:return +{ printf("= %x %x", arg0, arg1) } + +' diff --git a/tpt/dtrace/trace_kghal.sh b/tpt/dtrace/trace_kghal.sh new file mode 100644 index 0000000..d85d155 --- /dev/null +++ b/tpt/dtrace/trace_kghal.sh @@ -0,0 +1,19 @@ +#!/bin/ksh + +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +dtrace -F -q -p $1 -n ' + pid$target::kghalf:entry,pid$target::kghalp:entry { + from_heap=arg1; comment_ptr=arg5; + printf("(%s(%x), \"%s\")\n", copyinstr(from_heap+76),from_heap,copyinstr(comment_ptr)); + } + pid$target::kghalo:entry { + from_heap=arg1; comment_ptr=arg8; + printf("(%s(%x), \"%s\")\n", copyinstr(from_heap+76),from_heap,copyinstr(comment_ptr)); + } + + + pid$target::kghalf:return,pid$target::kghalp:return,pid$target::kghalo:return { + printf("= %x\n", arg1); + } +' diff --git a/tpt/du.sql b/tpt/du.sql new file mode 100644 index 0000000..542653c --- /dev/null +++ b/tpt/du.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@du2 "%&1%" diff --git a/tpt/du2.sql b/tpt/du2.sql new file mode 100644 index 0000000..59cdf90 --- /dev/null +++ b/tpt/du2.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col du_MB head MB FOR 99999999.9 +col du_GB head GB FOR 99999999.9 +col du_owner HEAD OWNER FOR A30 + +select + owner du_owner + , sum(bytes)/1048576 du_MB + , sum(bytes)/1048576/1024 du_GB +from + dba_segments +where + lower(owner) like lower('&1') +group by + owner +order by + du_MB desc +/ diff --git a/tpt/dump.sql b/tpt/dump.sql new file mode 100644 index 0000000..34ca1a4 --- /dev/null +++ b/tpt/dump.sql @@ -0,0 +1,17 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- prompt @dump + +--select dump(&1) dec from dual; +--select dump(&1,16) hex from dual; + +@ti +set termout off + +alter system dump datafile &1 block &2; + +--host "cat &trc | grep -v '\[................\]$' | grep -v 'col ' | grep -v 'tab ' | grep -v 'Dump of memory' | grep -v ' Repeat ' | grep &3" +host "cat &trc | grep -v '\[................\]' | grep -v '^\*\*\*' | grep -v '^Dump of memory' | grep -v ' Repeat ' | grep -A15 '&3'" + +set termout on diff --git a/tpt/dumptrc.sql b/tpt/dumptrc.sql new file mode 100644 index 0000000..e58fd36 --- /dev/null +++ b/tpt/dumptrc.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +alter session set tracefile_identifier = &1; +alter session set events 'immediate trace name &1'; +alter session set tracefile_identifier = ''; diff --git a/tpt/dumpvar.sql b/tpt/dumpvar.sql new file mode 100644 index 0000000..e957c39 --- /dev/null +++ b/tpt/dumpvar.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +oradebug dumpvar &1 &2 \ No newline at end of file diff --git a/tpt/dv.sql b/tpt/dv.sql new file mode 100644 index 0000000..e957c39 --- /dev/null +++ b/tpt/dv.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +oradebug dumpvar &1 &2 \ No newline at end of file diff --git a/tpt/e2d.sql b/tpt/e2d.sql new file mode 100644 index 0000000..902cb9f --- /dev/null +++ b/tpt/e2d.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + sysdate - ( sysdate - date'1970-01-01' - &1/1000/86400 ) result_date + , round((( sysdate - &1 /1000/86400 ) - date'1970-01-01'),2 ) days + , round((( sysdate - &1 /1000/86400 ) - date'1970-01-01') * 24, 2 ) hours + , round((( sysdate - &1 /1000/86400 ) - date'1970-01-01') * 60 ) minutes + , round((( sysdate - &1 /1000/86400 ) - date'1970-01-01') * 3600 ) seconds +from dual; + diff --git a/tpt/ed.sql b/tpt/ed.sql new file mode 100644 index 0000000..089cdb8 --- /dev/null +++ b/tpt/ed.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +define _ed_tmp_editor="&_editor" +define _editor="&_editor" + +ed &1 + +define _editor="&_ed_tmp_editor" +undefine _ed_tmp_editor + +-- for unix use smth like: +-- define _editor="host xterm -c vi &1 &#" +-- or +-- define _editor="host nedit &1 &#" diff --git a/tpt/el.sql b/tpt/el.sql new file mode 100644 index 0000000..04db364 --- /dev/null +++ b/tpt/el.sql @@ -0,0 +1,9 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +spool off + +host vi + &seminar_logfile + +spool &seminar_logfile append + diff --git a/tpt/eme.sql b/tpt/eme.sql new file mode 100644 index 0000000..19ada3b --- /dev/null +++ b/tpt/eme.sql @@ -0,0 +1,3 @@ +PROMPT XDB / EM Express port: +SELECT dbms_xdb_config.getHTTPport HTTP, dbms_xdb_config.getHTTPSport HTTPS FROM dual; + diff --git a/tpt/eoff.sql b/tpt/eoff.sql new file mode 100644 index 0000000..0569b72 --- /dev/null +++ b/tpt/eoff.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set echo off diff --git a/tpt/eon.sql b/tpt/eon.sql new file mode 100644 index 0000000..e4fecd5 --- /dev/null +++ b/tpt/eon.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set echo on diff --git a/tpt/ep.sql b/tpt/ep.sql new file mode 100644 index 0000000..4de4f61 --- /dev/null +++ b/tpt/ep.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT EXPLAIN PLAN FOR +EXPLAIN PLAN FOR diff --git a/tpt/eqs.sql b/tpt/eqs.sql new file mode 100644 index 0000000..d2346a2 --- /dev/null +++ b/tpt/eqs.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL eqs_req_reason HEAD REQ_REASON FOR A35 WORD_WRAP +PROMPT Display Enqueue Statistics from v$enqueue_statistics + +SELECT + eq_type + , req_reason eqs_req_reason + , total_req# + , total_wait# + , succ_req# + , failed_req# + , cum_wait_time +FROM + v$enqueue_statistics +WHERE + UPPER(eq_type) LIKE UPPER('&1') +/ + diff --git a/tpt/equiv.sql b/tpt/equiv.sql new file mode 100644 index 0000000..088cb29 --- /dev/null +++ b/tpt/equiv.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- DBA_REWRITE_EQUIVALENCES +-- Name Null? Type +-- ------------------------------- -------- ---------------------------- +-- OWNER NOT NULL VARCHAR2(128) +-- NAME NOT NULL VARCHAR2(128) +-- SOURCE_STMT CLOB +-- DESTINATION_STMT CLOB +-- REWRITE_MODE VARCHAR2(10) + +COL equiv_owner FOR A20 WRAP +COL equiv_name FOR A30 WRAP +COL source_stmt FOR A50 WORD_WRAP +COL destination_stmt FOR A50 WORD_WRAP + +SELECT + owner equiv_owner + , name equiv_name + , rewrite_mode +-- , source_stmt +-- , destination_stmt +FROM + dba_rewrite_equivalences +WHERE + UPPER(name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +/ + diff --git a/tpt/equivx.sql b/tpt/equivx.sql new file mode 100644 index 0000000..511fe64 --- /dev/null +++ b/tpt/equivx.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- DBA_REWRITE_EQUIVALENCES +-- Name Null? Type +-- ------------------------------- -------- ---------------------------- +-- OWNER NOT NULL VARCHAR2(128) +-- NAME NOT NULL VARCHAR2(128) +-- SOURCE_STMT CLOB +-- DESTINATION_STMT CLOB +-- REWRITE_MODE VARCHAR2(10) + +COL equiv_owner FOR A20 WRAP +COL equiv_name FOR A30 WRAP +COL source_stmt FOR A50 WORD_WRAP +COL destination_stmt FOR A50 WORD_WRAP + +SELECT + owner equiv_owner + , name equiv_name + , rewrite_mode + , source_stmt + , destination_stmt +FROM + dba_rewrite_equivalences +WHERE + UPPER(name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +/ + diff --git a/tpt/es.sql b/tpt/es.sql new file mode 100644 index 0000000..e05d640 --- /dev/null +++ b/tpt/es.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- prompt Edit TPT script &SQLPATH/&1.... +@ed &SQLPATH/&1 diff --git a/tpt/esn.sql b/tpt/esn.sql new file mode 100644 index 0000000..42e3daa --- /dev/null +++ b/tpt/esn.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM TABLE(exasnap.display_sid('&2', &1)); diff --git a/tpt/esnx.sql b/tpt/esnx.sql new file mode 100644 index 0000000..ade2964 --- /dev/null +++ b/tpt/esnx.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM TABLE(exasnap.display_sid('&2', &1, '%')); + diff --git a/tpt/et.sql b/tpt/et.sql new file mode 100644 index 0000000..8723f69 --- /dev/null +++ b/tpt/et.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@ed &trc diff --git a/tpt/ev.sql b/tpt/ev.sql new file mode 100644 index 0000000..0e3d0d0 --- /dev/null +++ b/tpt/ev.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@oerr &1 +prompt alter session set events '&1 trace name context forever, level &2';; +alter session set events '&1 trace name context forever, level &2'; diff --git a/tpt/evh.sql b/tpt/evh.sql new file mode 100644 index 0000000..0287c88 --- /dev/null +++ b/tpt/evh.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- EST_TIME_S column is a rough ESTIMATE of total wait time consumed by waits in a latency bucket +-- it assumes random distribution of event latencies between adjacent buckets which may not be the +-- case in reality + +COL evh_event HEAD WAIT_EVENT +COL evh_est_time HEAD "EST_TIME_S*" +COL wait_count_graph FOR A22 +COL evh_wait_time_milli HEAD WAIT_TIME_MILLI FOR A15 JUST RIGHT +BREAK ON evh_event SKIP 1 + +SELECT + event evh_event + , LPAD('< ' ||wait_time_milli, 15) evh_wait_time_milli + , wait_count + , CASE WHEN wait_count = 0 THEN NULL ELSE ROUND(wait_time_milli * wait_count * CASE WHEN wait_time_milli = 1 THEN 0.5 ELSE 0.75 END / 1000, 3) END evh_est_time + , last_update_time -- 11g +fROM + v$event_histogram +WHERE + regexp_like(event, '&1', 'i') +ORDER BY + event + , wait_time_milli +/ diff --git a/tpt/evi.sql b/tpt/evi.sql new file mode 100644 index 0000000..cfc9295 --- /dev/null +++ b/tpt/evi.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt alter session set events 'immediate trace name &1 level &2';; +alter session set events 'immediate trace name &1 level &2'; diff --git a/tpt/evo.sql b/tpt/evo.sql new file mode 100644 index 0000000..4cfa16e --- /dev/null +++ b/tpt/evo.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +alter session set events '&1 trace name context off'; diff --git a/tpt/evts.sql b/tpt/evts.sql new file mode 100644 index 0000000..4360815 --- /dev/null +++ b/tpt/evts.sql @@ -0,0 +1,8 @@ +PROMPT ORADEBUG EVENTDUMP system +ORADEBUG EVENTDUMP system +PROMPT +PROMPT ORADEBUG EVENTDUMP process +ORADEBUG EVENTDUMP process +PROMPT +PROMPT ORADEBUG EVENTDUMP session +ORADEBUG EVENTDUMP session diff --git a/tpt/exadata/alter_all_indexes_degree.sql b/tpt/exadata/alter_all_indexes_degree.sql new file mode 100644 index 0000000..e8da4b5 --- /dev/null +++ b/tpt/exadata/alter_all_indexes_degree.sql @@ -0,0 +1,17 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- @alter_all_indexes_degree.sql NOPARALLEL +-- @alter_all_indexes_degree.sql "PARALLEL 4" + +DECLARE + cmd VARCHAR2(1000); +BEGIN + FOR i IN (SELECT owner,index_name FROM dba_indexes WHERE table_owner = '&1' AND table_owner NOT IN('SYS', 'SYSTEM') AND index_type NOT IN ('LOB', 'IOT - TOP')) LOOP + cmd := 'ALTER INDEX '||i.owner||'.'||i.index_name||' &2'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; +END; +/ + diff --git a/tpt/exadata/ash_storage.sql b/tpt/exadata/ash_storage.sql new file mode 100644 index 0000000..951d899 --- /dev/null +++ b/tpt/exadata/ash_storage.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL wait_event FOR A45 TRUNCATE +COL ash_storage_graph HEAD "GRAPHIC" JUST CENTER FOR A12 + +SELECT + CASE WHEN sql_plan_options LIKE '%STORAGE%' THEN sql_plan_operation ELSE 'not storage-aware' END sql_plan_operation + , CASE WHEN sql_plan_options LIKE '%STORAGE%' THEN sql_plan_options ELSE 'not storage-aware' END sql_plan_options + , CASE WHEN sql_plan_options LIKE '%STORAGE%' THEN + CASE WHEN session_state = 'WAITING' THEN event ELSE 'ON CPU' END + ELSE + 'not storage-aware' + END wait_event + , COUNT(*) + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER() * 100 ,1) pct + , '|'||RPAD(NVL(RPAD('#', ROUND (10 * RATIO_TO_REPORT(COUNT(*)) OVER()), '#'),' '), 10)||'|' ash_storage_graph +FROM + v$active_session_history +WHERE + 1=1 +AND sample_time BETWEEN sysdate-1/24/12 AND sysdate +-- AND sql_plan_options LIKE '%STORAGE%' +GROUP BY + CASE WHEN sql_plan_options LIKE '%STORAGE%' THEN sql_plan_operation ELSE 'not storage-aware' END + , CASE WHEN sql_plan_options LIKE '%STORAGE%' THEN sql_plan_options ELSE 'not storage-aware' END + , CASE WHEN sql_plan_options LIKE '%STORAGE%' THEN + CASE WHEN session_state = 'WAITING' THEN event ELSE 'ON CPU' END + ELSE + 'not storage-aware' + END +ORDER BY + COUNT(*) DESC +/ + diff --git a/tpt/exadata/badfetch.sql b/tpt/exadata/badfetch.sql new file mode 100644 index 0000000..42e3eab --- /dev/null +++ b/tpt/exadata/badfetch.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT /*+ MONITOR */ * FROM tanel.sales; + diff --git a/tpt/exadata/cell.sql b/tpt/exadata/cell.sql new file mode 100644 index 0000000..6491057 --- /dev/null +++ b/tpt/exadata/cell.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL cell_cell_path HEAD CELL_PATH FOR A30 + +SELECT + c.cell_path cell_cell_path + , c.cell_hashval +FROM + v$cell c +/ + diff --git a/tpt/exadata/cell_intrablock_chaining.sql b/tpt/exadata/cell_intrablock_chaining.sql new file mode 100644 index 0000000..39b03ee --- /dev/null +++ b/tpt/exadata/cell_intrablock_chaining.sql @@ -0,0 +1,274 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--DROP TABLE t_intrablock_chained ; + +CREATE TABLE t_intrablock_chained +TABLESPACE tanel_bigfile +AS SELECT + CAST('x' AS CHAR(100)) padding +, 0 col_1 +, 0 col_2 +, 0 col_3 +, 0 col_4 +, 0 col_5 +, 0 col_6 +, 0 col_7 +, 0 col_8 +, 0 col_9 +, 0 col_10 +, 0 col_11 +, 0 col_12 +, 0 col_13 +, 0 col_14 +, 0 col_15 +, 0 col_16 +, 0 col_17 +, 0 col_18 +, 0 col_19 +, 0 col_20 +, 0 col_21 +, 0 col_22 +, 0 col_23 +, 0 col_24 +, 0 col_25 +, 0 col_26 +, 0 col_27 +, 0 col_28 +, 0 col_29 +, 0 col_30 +, 0 col_31 +, 0 col_32 +, 0 col_33 +, 0 col_34 +, 0 col_35 +, 0 col_36 +, 0 col_37 +, 0 col_38 +, 0 col_39 +, 0 col_40 +, 0 col_41 +, 0 col_42 +, 0 col_43 +, 0 col_44 +, 0 col_45 +, 0 col_46 +, 0 col_47 +, 0 col_48 +, 0 col_49 +, 0 col_50 +, 0 col_51 +, 0 col_52 +, 0 col_53 +, 0 col_54 +, 0 col_55 +, 0 col_56 +, 0 col_57 +, 0 col_58 +, 0 col_59 +, 0 col_60 +, 0 col_61 +, 0 col_62 +, 0 col_63 +, 0 col_64 +, 0 col_65 +, 0 col_66 +, 0 col_67 +, 0 col_68 +, 0 col_69 +, 0 col_70 +, 0 col_71 +, 0 col_72 +, 0 col_73 +, 0 col_74 +, 0 col_75 +, 0 col_76 +, 0 col_77 +, 0 col_78 +, 0 col_79 +, 0 col_80 +, 0 col_81 +, 0 col_82 +, 0 col_83 +, 0 col_84 +, 0 col_85 +, 0 col_86 +, 0 col_87 +, 0 col_88 +, 0 col_89 +, 0 col_90 +, 0 col_91 +, 0 col_92 +, 0 col_93 +, 0 col_94 +, 0 col_95 +, 0 col_96 +, 0 col_97 +, 0 col_98 +, 0 col_99 +, 0 col_100 +, 0 col_101 +, 0 col_102 +, 0 col_103 +, 0 col_104 +, 0 col_105 +, 0 col_106 +, 0 col_107 +, 0 col_108 +, 0 col_109 +, 0 col_110 +, 0 col_111 +, 0 col_112 +, 0 col_113 +, 0 col_114 +, 0 col_115 +, 0 col_116 +, 0 col_117 +, 0 col_118 +, 0 col_119 +, 0 col_120 +, 0 col_121 +, 0 col_122 +, 0 col_123 +, 0 col_124 +, 0 col_125 +, 0 col_126 +, 0 col_127 +, 0 col_128 +, 0 col_129 +, 0 col_130 +, 0 col_131 +, 0 col_132 +, 0 col_133 +, 0 col_134 +, 0 col_135 +, 0 col_136 +, 0 col_137 +, 0 col_138 +, 0 col_139 +, 0 col_140 +, 0 col_141 +, 0 col_142 +, 0 col_143 +, 0 col_144 +, 0 col_145 +, 0 col_146 +, 0 col_147 +, 0 col_148 +, 0 col_149 +, 0 col_150 +, 0 col_151 +, 0 col_152 +, 0 col_153 +, 0 col_154 +, 0 col_155 +, 0 col_156 +, 0 col_157 +, 0 col_158 +, 0 col_159 +, 0 col_160 +, 0 col_161 +, 0 col_162 +, 0 col_163 +, 0 col_164 +, 0 col_165 +, 0 col_166 +, 0 col_167 +, 0 col_168 +, 0 col_169 +, 0 col_170 +, 0 col_171 +, 0 col_172 +, 0 col_173 +, 0 col_174 +, 0 col_175 +, 0 col_176 +, 0 col_177 +, 0 col_178 +, 0 col_179 +, 0 col_180 +, 0 col_181 +, 0 col_182 +, 0 col_183 +, 0 col_184 +, 0 col_185 +, 0 col_186 +, 0 col_187 +, 0 col_188 +, 0 col_189 +, 0 col_190 +, 0 col_191 +, 0 col_192 +, 0 col_193 +, 0 col_194 +, 0 col_195 +, 0 col_196 +, 0 col_197 +, 0 col_198 +, 0 col_199 +, 0 col_200 +, 0 col_201 +, 0 col_202 +, 0 col_203 +, 0 col_204 +, 0 col_205 +, 0 col_206 +, 0 col_207 +, 0 col_208 +, 0 col_209 +, 0 col_210 +, 0 col_211 +, 0 col_212 +, 0 col_213 +, 0 col_214 +, 0 col_215 +, 0 col_216 +, 0 col_217 +, 0 col_218 +, 0 col_219 +, 0 col_220 +, 0 col_221 +, 0 col_222 +, 0 col_223 +, 0 col_224 +, 0 col_225 +, 0 col_226 +, 0 col_227 +, 0 col_228 +, 0 col_229 +, 0 col_230 +, 0 col_231 +, 0 col_232 +, 0 col_233 +, 0 col_234 +, 0 col_235 +, 0 col_236 +, 0 col_237 +, 0 col_238 +, 0 col_239 +, 0 col_240 +, 0 col_241 +, 0 col_242 +, 0 col_243 +, 0 col_244 +, 0 col_245 +, 0 col_246 +, 0 col_247 +, 0 col_248 +, 0 col_249 +, 0 col_250 +, 0 col_251 +, 0 col_252 +, 0 col_253 +, 0 col_254 +, 0 col_255 +, 0 col_256 +, 0 col_257 +, 0 col_258 +, 0 col_259 +, 0 col_260 +FROM + DUAL +CONNECT BY LEVEL <= 1000000 +/ + diff --git a/tpt/exadata/cell_scan_resulting_traffic.sql b/tpt/exadata/cell_scan_resulting_traffic.sql new file mode 100644 index 0000000..57b0700 --- /dev/null +++ b/tpt/exadata/cell_scan_resulting_traffic.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE cell_traffic_test; +CREATE TABLE cell_traffic_test +PARALLEL 8 +AS +SELECT 'TANEL_TEST' col, a.*, b.* FROM + (SELECT ROWNUM r FROM dual CONNECT BY LEVEL <= 100) a + , dba_objects b +ORDER BY + DBMS_RANDOM.VALUE +-- b.owner, b.object_type +/ +@gts cell_traffic_test + +ALTER TABLE cell_traffic_test NOPARALLEL; + +CREATE TABLE diff --git a/tpt/exadata/cellash.sh b/tpt/exadata/cellash.sh new file mode 100644 index 0000000..5decdbd --- /dev/null +++ b/tpt/exadata/cellash.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +CMD="LIST ACTIVEREQUEST ATTRIBUTES name,asmDiskGroupNumber,asmFileIncarnation,asmFileNumber\ + ,consumerGroupID,consumerGroupName,dbID,dbName,dbRequestID,fileType,id,instanceNumber\ + ,ioBytes,ioBytesSofar,ioGridDisk,ioOffset,ioReason,ioType,objectNumber,parentID\ + ,requestState,sessionID,sessionSerNumber,sqlID,tableSpaceNumber" + +CMD2="LIST ACTIVEREQUEST DETAIL" + +echo set echo on + +while true ; do + echo REM TIME `date +"%Y-%m-%d %H:%M:%S"` + echo $CMD2 + sleep 1 +done diff --git a/tpt/exadata/cellio.sql b/tpt/exadata/cellio.sql new file mode 100644 index 0000000..68923e4 --- /dev/null +++ b/tpt/exadata/cellio.sql @@ -0,0 +1,55 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL cell_cell_path HEAD CELL_PATH FOR A20 +COL cell_event HEAD IO_TYPE FOR A35 +COL disk_name HEAD DISK_NAME FOR A30 +BREAK ON cell_event SKIP 1 + +--WITH cc AS ( +-- SELECT /*+ MATERIALIZE */ +-- CAST(extract(xmltype(confval), '/cli-output/cell/name/text()') AS VARCHAR2(20)) cell_name +-- FROM +-- v$cell_config +-- WHERE +--) +SELECT /*+ CARDINALITY(a 100000) */ /* LEADING(c cc d) USE_HASH(d) USE_HASH(cc) USE_HASH(a) */ + a.event cell_event + , current_obj# + , CAST(extract(xmltype(confval), '/cli-output/cell/name/text()') AS VARCHAR2(20)) cell_name + , c.cell_path cell_cell_path +-- , sql_id + , nvl(substr(d.name,1,30),'-') disk_name + --, substr(d.path,1,30) disk_path + , c.cell_hashval + , COUNT(*) +FROM + v$cell c + , v$cell_config cc + , v$asm_disk d + , v$active_session_history a +WHERE + a.p1 = c.cell_hashval +AND c.cell_path = cc.cellname +--AND c.cell_path = replace(regexp_substr(d.path,'/(.*)/'),'/') +AND cc.conftype = 'CELL' +AND a.p2 = d.hash_value(+) +AND &1 +--AND a.event LIKE 'cell%' +AND sample_time BETWEEN &2 AND &3 +GROUP BY + a.event + , nvl(substr(d.name,1,30),'-') + --, substr(d.path,1,30) + , CAST(extract(xmltype(confval), '/cli-output/cell/name/text()') AS VARCHAR2(20)) + , c.cell_path + , c.cell_hashval + , a.current_obj# + -- , sql_id +--HAVING COUNT(*) > 1000 +ORDER BY + a.event + , COUNT(*) DESC +/ + + diff --git a/tpt/exadata/celliorm.sql b/tpt/exadata/celliorm.sql new file mode 100644 index 0000000..4aa1c6b --- /dev/null +++ b/tpt/exadata/celliorm.sql @@ -0,0 +1,41 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: celliorm.sql (v1.0) +-- +-- Purpose: Report Exadata cell IORM status from V$CELL_CONFIG +-- +-- Author: Tanel Poder +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @celliorm.sql +-- +------------------------------------------------------------------------------------------------------------------------ + +COL cv_cellname HEAD CELLNAME FOR A20 +COL cv_cellversion HEAD CELLSRV_VERSION FOR A20 +COL cv_flashcachemode HEAD FLASH_CACHE_MODE FOR A20 + +PROMPT Show Exadata cell versions from V$CELL_CONFIG.... + +SELECT + cellname cv_cellname + , CAST(extract(xmltype(confval), '/cli-output/interdatabaseplan/objective/text()') AS VARCHAR2(20)) objective + , CAST(extract(xmltype(confval), '/cli-output/interdatabaseplan/status/text()') AS VARCHAR2(15)) status + , CAST(extract(xmltype(confval), '/cli-output/interdatabaseplan/name/text()') AS VARCHAR2(30)) interdb_plan + , CAST(extract(xmltype(confval), '/cli-output/interdatabaseplan/catPlan/text()') AS VARCHAR2(30)) cat_plan + , CAST(extract(xmltype(confval), '/cli-output/interdatabaseplan/dbPlan/text()') AS VARCHAR2(30)) db_plan +FROM + v$cell_config -- gv$ isn't needed, all cells should be visible in all instances +WHERE + conftype = 'IORM' +ORDER BY + cv_cellname +/ + diff --git a/tpt/exadata/cellpd.sql b/tpt/exadata/cellpd.sql new file mode 100644 index 0000000..9185192 --- /dev/null +++ b/tpt/exadata/cellpd.sql @@ -0,0 +1,80 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: cellpd.sql (v1.0) +-- +-- Purpose: Report physical disk summary from V$CELL_CONFIG +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @cellpd.sql +-- +------------------------------------------------------------------------------------------------------------------------ + +COL cv_cellname HEAD CELLNAME FOR A20 +COL cv_cellversion HEAD CELLSRV_VERSION FOR A20 +COL cv_flashcachemode HEAD FLASH_CACHE_MODE FOR A20 + +PROMPT Show Exadata cell versions from V$CELL_CONFIG.... + +SELECT + disktype + , cv_cellname + , status + , ROUND(SUM(physicalsize/1024/1024/1024)) total_gb + , ROUND(AVG(physicalsize/1024/1024/1024)) avg_gb + , COUNT(*) num_disks + , SUM(CASE WHEN predfailStatus = 'TRUE' THEN 1 END) predfail + , SUM(CASE WHEN poorPerfStatus = 'TRUE' THEN 1 END) poorperf + , SUM(CASE WHEN wtCachingStatus = 'TRUE' THEN 1 END) wtcacheprob + , SUM(CASE WHEN peerFailStatus = 'TRUE' THEN 1 END) peerfail + , SUM(CASE WHEN criticalStatus = 'TRUE' THEN 1 END) critical +FROM ( + SELECT /*+ NO_MERGE */ + c.cellname cv_cellname + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/name/text()') AS VARCHAR2(20)) diskname + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/diskType/text()') AS VARCHAR2(20)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/luns/text()') AS VARCHAR2(20)) luns + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/makeModel/text()') AS VARCHAR2(50)) makeModel + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalFirmware/text()') AS VARCHAR2(20)) physicalFirmware + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalInsertTime/text()') AS VARCHAR2(30)) physicalInsertTime + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalSerial/text()') AS VARCHAR2(20)) physicalSerial + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalSize/text()') AS VARCHAR2(20)) physicalSize + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/slotNumber/text()') AS VARCHAR2(30)) slotNumber + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/status/text()') AS VARCHAR2(20)) status + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/id/text()') AS VARCHAR2(20)) id + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/key_500/text()') AS VARCHAR2(20)) key_500 + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/predfailStatus/text()') AS VARCHAR2(20)) predfailStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/poorPerfStatus/text()') AS VARCHAR2(20)) poorPerfStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/wtCachingStatus/text()') AS VARCHAR2(20)) wtCachingStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/peerFailStatus/text()') AS VARCHAR2(20)) peerFailStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/criticalStatus/text()') AS VARCHAR2(20)) criticalStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errCmdTimeoutCount/text()') AS VARCHAR2(20)) errCmdTimeoutCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errHardReadCount/text()') AS VARCHAR2(20)) errHardReadCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errHardWriteCount/text()') AS VARCHAR2(20)) errHardWriteCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errMediaCount/text()') AS VARCHAR2(20)) errMediaCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errOtherCount/text()') AS VARCHAR2(20)) errOtherCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errSeekCount/text()') AS VARCHAR2(20)) errSeekCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/sectorRemapCount/text()') AS VARCHAR2(20)) sectorRemapCount + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/physicaldisk'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'PHYSICALDISKS' +) +GROUP BY + cv_cellname + , disktype + , status +ORDER BY + disktype + , cv_cellname +/ + diff --git a/tpt/exadata/cellpdx.sql b/tpt/exadata/cellpdx.sql new file mode 100644 index 0000000..d10716e --- /dev/null +++ b/tpt/exadata/cellpdx.sql @@ -0,0 +1,91 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: cellpdx.sql (v1.0) +-- +-- Purpose: Report detailed physical disk info from V$CELL_CONFIG +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @cellpd.sql +-- +------------------------------------------------------------------------------------------------------------------------ + +COL cv_cellname HEAD CELLNAME FOR A20 +COL cv_cellversion HEAD CELLSRV_VERSION FOR A20 +COL cv_flashcachemode HEAD FLASH_CACHE_MODE FOR A20 + +PROMPT Show Exadata cell versions from V$CELL_CONFIG.... + +SELECT * FROM ( + SELECT + c.cellname cv_cellname + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/name/text()') AS VARCHAR2(20)) diskname + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/diskType/text()') AS VARCHAR2(20)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/luns/text()') AS VARCHAR2(20)) luns + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/makeModel/text()') AS VARCHAR2(40)) makeModel + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalFirmware/text()') AS VARCHAR2(20)) physicalFirmware + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalInsertTime/text()') AS VARCHAR2(30)) physicalInsertTime + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalSerial/text()') AS VARCHAR2(20)) physicalSerial + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalSize/text()') AS VARCHAR2(20)) physicalSize + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/sectorRemapCount/text()') AS VARCHAR2(20)) sectorRemapCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/slotNumber/text()') AS VARCHAR2(30)) slotNumber + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/status/text()') AS VARCHAR2(20)) status + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/id/text()') AS VARCHAR2(20)) id + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/key_500/text()') AS VARCHAR2(20)) key_500 + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/predfailStatus/text()') AS VARCHAR2(20)) predfailStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/poorPerfStatus/text()') AS VARCHAR2(20)) poorPerfStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/wtCachingStatus/text()') AS VARCHAR2(20)) wtCachingStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/peerFailStatus/text()') AS VARCHAR2(20)) peerFailStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/criticalStatus/text()') AS VARCHAR2(20)) criticalStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errCmdTimeoutCount/text()') AS VARCHAR2(20)) errCmdTimeoutCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errHardReadCount/text()') AS VARCHAR2(20)) errHardReadCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errHardWriteCount/text()') AS VARCHAR2(20)) errHardWriteCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errMediaCount/text()') AS VARCHAR2(20)) errMediaCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errOtherCount/text()') AS VARCHAR2(20)) errOtherCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errSeekCount/text()') AS VARCHAR2(20)) errSeekCount + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/physicaldisk'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'PHYSICALDISKS' +) +ORDER BY + cv_cellname + , diskname +/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tpt/exadata/cellsrvstat_metrics.txt b/tpt/exadata/cellsrvstat_metrics.txt new file mode 100644 index 0000000..5a5045d --- /dev/null +++ b/tpt/exadata/cellsrvstat_metrics.txt @@ -0,0 +1,135 @@ +> cellsrvstat -list +Statistic Groups: +io Input/Output related stats +mem Memory related stats +exec Execution related stats +net Network related stats +smartio SmartIO related stats + +Statistics: +[ * - Absolute values. Indicates no delta computation in tabular format] + +io_nbiorr_hdd Number of hard disk block IO read requests +io_nbiowr_hdd Number of hard disk block IO write requests +io_nbiorb_hdd Hard disk block IO reads (KB) +io_nbiowb_hdd Hard disk block IO writes (KB) +io_nbiorr_flash Number of flash disk block IO read requests +io_nbiowr_flash Number of flash disk block IO write requests +io_nbiorb_flash Flash disk block IO reads (KB) +io_nbiowb_flash Flash disk block IO writes (KB) +io_ndioerr Number of disk IO errors +io_nrfc Number of reads from flash cache +io_nwfc Number of writes to flash cache +io_fcrb Flash cache reads (KB) +io_fcwb Flash cache writes (KB) +io_nfioerr Number of flash cache IO errors +io_nbpfce Size of eviction from flash cache (KB) +io_nolfio Number of outstanding large flash IOs +io_ltow Number of latency threshold warnings during job +io_ltcw Number of latency threshold warnings by checker +io_ltsiow Number of latency threshold warnings for smart IO +io_ltrlw Number of latency threshold warnings for redo log writes +io_bcrti Current read block IO to be issued (KB) * +io_btrti Total read block IO to be issued (KB) +io_bcwti Current write block IO to be issued (KB) * +io_btwti Total write block IO to be issued (KB) +io_bcrii Current read blocks in IO (KB) * +io_btrii Total read block IO issued (KB) +io_bcwii Current write blocks in IO (KB) * +io_btwii Total write block IO issued (KB) +io_bcrsi Current read block IO in network send (KB) * +io_btrsi Total read block IO in network send (KB) +io_bcwsi Current write block IO in network send (KB) * +io_btwsi Total write block IO in network send (KB) +io_bcfp Current block IO being populated in flash (KB) * +io_btfp Total block IO KB populated in flash (KB) +mem_sgahu SGA heap used - kgh statistics (KB) +mem_sgahf SGA heap free - cellsrv statistics (KB) +mem_sgaos OS memory allocated to SGA (KB) +mem_sgahuc SGA heap used - cellsrv statistics - KB +mem_pgaos OS memory allocated to PGA (KB) +mem_pgahuc PGA heap used - cellsrv statistics (KB) +mem_allos OS memory allocated to cellsrv (KB) +mem_sgatop Top 5 SGA consumers (KB) * +mem_sgasubtop Top 5 SGA subheap consumers (KB) * +mem_halfkaf Number of allocation failures in 512 bytes pool +mem_2kaf Number of allocation failures in 2KB pool +mem_4kaf Number of allocation failures in 4KB pool +mem_8kaf Number of allocation failures in 8KB pool +mem_16kaf Number of allocation failures in 16KB pool +mem_32kaf Number of allocation failures in 32KB pool +mem_64kaf Number of allocation failures in 64KB pool +mem_1maf Number of allocation failures in 1MB pool +mem_halfkhwm Allocation hwm in 512 bytes pool +mem_2khwm Allocation hwm in 2KB pool +mem_4khwm Allocation hwm in 4KB pool +mem_8khwm Allocation hwm in 8KB pool +mem_16khwm Allocation hwm in 16KB pool +mem_32khwm Allocation hwm in 32KB pool +mem_64khwm Allocation hwm in 64KB pool +mem_1mhwm Allocation hwm in 1MB pool +mem_lmtf Number of low memory threshold failures +mem_nmtf Number of no memory threshold failures +mem_dynar Dynamic buffer allocation requests +mem_dynaf Dynamic buffer allocation failures +mem_dynafl Dynamic buffer allocation failures due to low mem +mem_dynam Dynamic buffer allocated size (KB) +mem_dynamh Dynamic buffer allocation hwm (KB) +exec_incno Incarnation number * +exec_versf Number of module version failures * +exec_ntwork Number of threads working * +exec_ntnetwait Number of threads waiting for network * +exec_ntreswait Number of threads waiting for resource * +exec_ntmutexwait Number of threads waiting for a mutex * +exec_njx Number of Jobs executed for each job type +exec_topcpusqlid SQL ids consuming the most CPU +net_rxb Total bytes received from the network +net_txb Total bytes transmitted to the network +net_rtxb Total bytes retransmitted to the network +net_sps Number of active sendports +net_sph Hwm of active sendports +net_rois Number of active remote open infos +net_roih HWM of remote open infos +sio_ns Number of active smart IO sessions * +sio_hs High water mark of smart IO sessions * +sio_ncs Number of completed smart IO sessions +sio_oe Smart IO offload efficiency (percentage) * +sio_sis Size of IO avoided due to storage index (KB) +sio_ctb Current smart IO to be issued (KB) * +sio_ttb Total smart IO to be issued (KB) +sio_cii Current smart IO in IO (KB) * +sio_tii Total smart IO in IO (KB) +sio_cfp Current smart IO being cached in flash (KB) * +sio_tfp Total smart IO being cached in flash (KB) +sio_cic Current smart IO with IO completed (KB) * +sio_tic Total smart IO with IO completed (KB) +sio_cif Current smart IO being filtered (KB) * +sio_tif Total smart IO being filtered (KB) +sio_cfc Current smart IO filtering completed (KB) * +sio_tfc Total smart IO filtering completed (KB) +sio_cfo Current smart IO filtered size (KB) * +sio_tfo Total smart IO filtered (KB) +sio_tcpo Total cpu passthru output IO size (KB) +sio_tpo Total passthru output IO size (KB) +sio_cis Current smart IO with results in send (KB) * +sio_tis Total smart IO with results in send (KB) +sio_ciso Current smart IO filtered in send (KB) * +sio_tiso Total smart IO filtered in send (KB) +sio_fcr Total smart IO read from flash (KB) +sio_fcw Total smart IO initiated flash population (KB) +sio_hdr Total smart IO read from hard disk (KB) +sio_hdw Total smart IO writes (fcre) to hard disk (KB) +sio_n512kb Number of smart IO requests < 512KB +sio_n1mb Number of smart IO requests >= 512KB and < 1MB +sio_n2mb Number of smart IO requests >= 1MB and < 2MB +sio_n4mb Number of smart IO requests >= 2MB and < 4MB +sio_n8mb Number of smart IO requests >= 4MB and < 8MB +sio_ngt8mb Number of smart IO requests >= 8MB +sio_nbrf Number of times smart IO buffer reserve failures +sio_nrm Number of times smart IO request misses +sio_ncio Number of times IO for smart IO not allowed to be issued +sio_nplr Number of times smart IO prefetch limit was reached +sio_nssuo Number of times smart scan used unoptimized mode +sio_nfcuo Number of times smart fcre used unoptimized mode +sio_nsbuo Number of times smart backup used unoptimized mode + diff --git a/tpt/exadata/cellver.sql b/tpt/exadata/cellver.sql new file mode 100644 index 0000000..b6870c0 --- /dev/null +++ b/tpt/exadata/cellver.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: cellver.sql (v1.01) +-- +-- Purpose: Report Exadata cell details from V$CELL_CONFIG +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @cellver.sql +-- +------------------------------------------------------------------------------------------------------------------------ + +COL cv_cellname HEAD CELL_NAME FOR A20 +COL cv_cell_path HEAD CELL_PATH FOR A30 +COL cv_cellversion HEAD CELLSRV_VERSION FOR A20 +COL cv_flashcachemode HEAD FLASH_CACHE_MODE FOR A20 + +PROMPT Show Exadata cell versions from V$CELL_CONFIG.... + +SELECT + cellname cv_cell_path + , CAST(extract(xmltype(confval), '/cli-output/cell/name/text()') AS VARCHAR2(20)) cv_cellname + , CAST(extract(xmltype(confval), '/cli-output/cell/releaseVersion/text()') AS VARCHAR2(20)) cv_cellVersion + , CAST(extract(xmltype(confval), '/cli-output/cell/flashCacheMode/text()') AS VARCHAR2(20)) cv_flashcachemode + , CAST(extract(xmltype(confval), '/cli-output/cell/cpuCount/text()') AS VARCHAR2(10)) cpu_count + , CAST(extract(xmltype(confval), '/cli-output/cell/upTime/text()') AS VARCHAR2(20)) uptime + , CAST(extract(xmltype(confval), '/cli-output/cell/kernelVersion/text()') AS VARCHAR2(30)) kernel_version + , CAST(extract(xmltype(confval), '/cli-output/cell/makeModel/text()') AS VARCHAR2(50)) make_model +FROM + v$cell_config -- gv$ isn't needed, all cells should be visible in all instances +WHERE + conftype = 'CELL' +ORDER BY + cv_cellname +/ + diff --git a/tpt/exadata/comptype.sql b/tpt/exadata/comptype.sql new file mode 100644 index 0000000..2f93a09 --- /dev/null +++ b/tpt/exadata/comptype.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- get_compression_type runs recursive queries for every row analyzed, so it is extremely inefficient to run for analyzing many rows + +SELECT + COUNT(*) + , DECODE( SYS.DBMS_COMPRESSION.GET_COMPRESSION_TYPE(USER, UPPER('&1'), ROWID), + 1, 'No Compression', + 2, 'Basic/OLTP Compression', + 4, 'HCC Query High', + 8, 'HCC Query Low', + 16, 'HCC Archive High', + 32, 'HCC Archive Low', + 64, 'COMP_BLOCK ZFS?', + 'Unknown Compression Level' + ) AS comp_type +FROM + &1 +WHERE rownum <= &2 +GROUP BY + DECODE( SYS.DBMS_COMPRESSION.GET_COMPRESSION_TYPE(USER, UPPER('&1'), ROWID), + 1, 'No Compression', + 2, 'Basic/OLTP Compression', + 4, 'HCC Query High', + 8, 'HCC Query Low', + 16, 'HCC Archive High', + 32, 'HCC Archive Low', + 64, 'COMP_BLOCK ZFS?', + 'Unknown Compression Level' + ) +/ + diff --git a/tpt/exadata/cth.sql b/tpt/exadata/cth.sql new file mode 100644 index 0000000..f6ac8f8 --- /dev/null +++ b/tpt/exadata/cth.sql @@ -0,0 +1,67 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: cth.sql (v1.01) +-- +-- Purpose: Display the "ASH for Storage Cells" info from V$CELL_THREAD_HISTORY +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @cth +-- +-- @cth job_type,wait_state,wait_object_name,sql_id,database_id session_id=1234 sysdate-1/24 sysdate +-- @cth job_type,wait_state,wait_object_name,sql_id,database_id sql_id='5huy4dwv57qmt' sysdate-1/24 sysdate +-- +-- Notes: The v$cell_thread_history is pretty limited compared to the database ASH, so don't get +-- your hopes too up :) +-- Also, the snapshot_time is the cell OS time, so if your DB and cells have clock drift, +-- you may end up matching the wrong time range from cell with the DB performance data. +-- +------------------------------------------------------------------------------------------------------------------------ + +PROMPT Querying V$CELL_THREAD_HISTORY ("ASH" for Storage Cells) ... + +SELECT * FROM ( + SELECT + COUNT(*) seconds + , ROUND(COUNT(*) / LEAST((CAST(&4 AS DATE)-CAST(&3 AS DATE))*86400, 600),1) avg_threads -- V$CELL_THREAD_HISTORY doesn't usually keep more than 10 minutes of history + , &1 + , MIN(snapshot_time), MAX(snapshot_time) + FROM ( + SELECT + substr(cell_name,1,20) cell_name + , thread_id + , job_type + , wait_state + , wait_object_name + , sql_id + , database_id + , instance_id + , session_id + , session_serial_num + , snapshot_time + FROM + v$cell_thread_history + WHERE + snapshot_time BETWEEN &3 AND &4 + AND &2 + AND wait_state NOT IN ( -- "idle" thread states + 'waiting_for_SKGXP_receive' + , 'waiting_for_connect' + , 'waiting_for_SKGXP_receive' + , 'looking_for_job' + ) + ) + GROUP BY &1 + ORDER BY COUNT(*) DESC +) +WHERE ROWNUM <= 20 +/ + diff --git a/tpt/exadata/default_flash_cache_for_user.sql b/tpt/exadata/default_flash_cache_for_user.sql new file mode 100644 index 0000000..93023c4 --- /dev/null +++ b/tpt/exadata/default_flash_cache_for_user.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DECLARE + cmd VARCHAR2(1000); +BEGIN + FOR i IN (SELECT owner,table_name FROM dba_tables WHERE owner = '&1') LOOP + cmd := 'ALTER TABLE '||i.owner||'.'||i.table_name||' STORAGE (CELL_FLASH_CACHE DEFAULT)'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; + + FOR i IN (SELECT owner,index_name FROM dba_indexes WHERE owner = '&1') LOOP + cmd := 'ALTER INDEX '||i.owner||'.'||i.index_name||' STORAGE (CELL_FLASH_CACHE DEFAULT)'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; +END; +/ + diff --git a/tpt/exadata/demos/bloom_minmax_storage_index.sql b/tpt/exadata/demos/bloom_minmax_storage_index.sql new file mode 100644 index 0000000..6faa5e9 --- /dev/null +++ b/tpt/exadata/demos/bloom_minmax_storage_index.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET ECHO ON +-- ALTER SESSION SET "_serial_direct_read"=ALWAYS; +-- ALTER SESSION SET "_cell_storidx_mode"=EVA; + +SELECT + /*+ LEADING(c) + NO_SWAP_JOIN_INPUTS(o) + INDEX_RS_ASC(c(cust_email)) + FULL(o) + MONITOR + */ + * +FROM + soe.customers c + , soe.orders o +WHERE + o.customer_id = c.customer_id +AND c.cust_email = 'bill.jones@yahoo.com' +--AND c.cust_email = 'anthony.pena@bellsouth.com' +/ +SET ECHO OFF + + + diff --git a/tpt/exadata/demos/bloom_minmax_storage_index2.sql b/tpt/exadata/demos/bloom_minmax_storage_index2.sql new file mode 100644 index 0000000..8da4940 --- /dev/null +++ b/tpt/exadata/demos/bloom_minmax_storage_index2.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET ECHO ON +ALTER SESSION SET "_serial_direct_read"=ALWAYS; +ALTER SESSION SET "_cell_storidx_mode"=EVA; + +SELECT + /*+ LEADING(c) + NO_SWAP_JOIN_INPUTS(o) + FULL(o) + PARALLEL(2) + MONITOR + */ + * +FROM + soe.customers2 c + , soe.orders2 o +WHERE + o.customer_id = c.customer_id +AND c.cust_email = 'rico@mbtuhkbv.com' +/ +SET ECHO OFF + diff --git a/tpt/exadata/demos/bloom_minmax_storage_index3.sql b/tpt/exadata/demos/bloom_minmax_storage_index3.sql new file mode 100644 index 0000000..fabcf5d --- /dev/null +++ b/tpt/exadata/demos/bloom_minmax_storage_index3.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET ECHO ON +-- ALTER SESSION SET "_serial_direct_read"=ALWAYS; +-- ALTER SESSION SET "_cell_storidx_mode"=EVA; + +SELECT + /*+ LEADING(c) + NO_SWAP_JOIN_INPUTS(o) + FULL(c) + FULL(o) + MONITOR + */ + * +FROM + soe.customers c + , soe.orders o +WHERE + o.customer_id = c.customer_id +--AND c.cust_email = 'florencio@ivtboge.com' +AND c.cust_email = 'anthony.pena@bellsouth.com' +/ +SET ECHO OFF + + + +-- 11.2.0.4 estrella@socxankh.com diff --git a/tpt/exadata/demos/calibrate_cell.txt b/tpt/exadata/demos/calibrate_cell.txt new file mode 100644 index 0000000..8efa49c --- /dev/null +++ b/tpt/exadata/demos/calibrate_cell.txt @@ -0,0 +1,62 @@ +CellCLI> ALTER CELL SHUTDOWN SERVICES CELLSRV; + +Stopping CELLSRV services... +The SHUTDOWN of CELLSRV services was successful. + +CellCLI> + +CellCLI> + +CellCLI> CALIBRATE; +Calibration will take a few minutes... +Aggregate random read throughput across all hard disk LUNs: 1103 MBPS +Aggregate random read throughput across all flash disk LUNs: 3964.55 MBPS +Aggregate random read IOs per second (IOPS) across all hard disk LUNs: 1716 +Aggregate random read IOs per second (IOPS) across all flash disk LUNs: 98216 +Controller read throughput: 1259.65 MBPS +Calibrating hard disks (read only) ... +LUN 0_0 on drive [16:0 ] random read throughput: 94.26 MBPS, and 145 IOPS +LUN 0_1 on drive [16:1 ] random read throughput: 100.10 MBPS, and 142 IOPS +LUN 0_10 on drive [16:10 ] random read throughput: 99.80 MBPS, and 155 IOPS +LUN 0_11 on drive [16:11 ] random read throughput: 96.93 MBPS, and 149 IOPS +LUN 0_2 on drive [16:2 ] random read throughput: 99.18 MBPS, and 146 IOPS +LUN 0_3 on drive [16:3 ] random read throughput: 100.45 MBPS, and 149 IOPS +LUN 0_4 on drive [16:4 ] random read throughput: 98.50 MBPS, and 148 IOPS +LUN 0_5 on drive [16:5 ] random read throughput: 98.20 MBPS, and 147 IOPS +LUN 0_6 on drive [16:6 ] random read throughput: 99.69 MBPS, and 147 IOPS +LUN 0_7 on drive [16:7 ] random read throughput: 102.36 MBPS, and 145 IOPS +LUN 0_8 on drive [16:8 ] random read throughput: 97.97 MBPS, and 147 IOPS +LUN 0_9 on drive [16:9 ] random read throughput: 99.56 MBPS, and 140 IOPS +Calibrating flash disks (read only, note that writes will be significantly slower) ... +LUN 1_0 on drive [FLASH_1_0] random read throughput: 266.07 MBPS, and 18278 IOPS +LUN 1_1 on drive [FLASH_1_1] random read throughput: 262.56 MBPS, and 18235 IOPS +LUN 1_2 on drive [FLASH_1_2] random read throughput: 260.15 MBPS, and 18227 IOPS +LUN 1_3 on drive [FLASH_1_3] random read throughput: 69.84 MBPS, and 17997 IOPS +LUN 2_0 on drive [FLASH_2_0] random read throughput: 186.16 MBPS, and 18737 IOPS +LUN 2_1 on drive [FLASH_2_1] random read throughput: 181.72 MBPS, and 18360 IOPS +LUN 2_2 on drive [FLASH_2_2] random read throughput: 265.29 MBPS, and 19061 IOPS +LUN 2_3 on drive [FLASH_2_3] random read throughput: 265.49 MBPS, and 19221 IOPS +LUN 4_0 on drive [FLASH_4_0] random read throughput: 264.22 MBPS, and 18885 IOPS +LUN 4_1 on drive [FLASH_4_1] random read throughput: 261.84 MBPS, and 18654 IOPS +LUN 4_2 on drive [FLASH_4_2] random read throughput: 264.88 MBPS, and 18800 IOPS +LUN 4_3 on drive [FLASH_4_3] random read throughput: 263.07 MBPS, and 18798 IOPS +LUN 5_0 on drive [FLASH_5_0] random read throughput: 264.07 MBPS, and 19350 IOPS +LUN 5_1 on drive [FLASH_5_1] random read throughput: 261.01 MBPS, and 19313 IOPS +LUN 5_2 on drive [FLASH_5_2] random read throughput: 261.74 MBPS, and 19395 IOPS +LUN 5_3 on drive [FLASH_5_3] random read throughput: 262.30 MBPS, and 19361 IOPS +Found some bad LUNs, running tests sequentially to identify the bad LUNs... +LUN 1_3 on drive [FLASH_1_3] random read throughput: 262.25 MBPS, and 20076 IOPS +LUN 2_0 on drive [FLASH_2_0] random read throughput: 265.61 MBPS, and 20085 IOPS +LUN 2_1 on drive [FLASH_2_1] random read throughput: 262.68 MBPS, and 20174 IOPS +CALIBRATE results are within an acceptable range. + +CALIBRATE stress test is now running... +Calibration has finished. + +CellCLI> + +CellCLI> ALTER CELL STARTUP SERVICES CELLSRV; + +Starting CELLSRV services... +The STARTUP of CELLSRV services was successful. + diff --git a/tpt/exadata/demos/enkcel02_disk_io_issue.txt b/tpt/exadata/demos/enkcel02_disk_io_issue.txt new file mode 100644 index 0000000..982f224 --- /dev/null +++ b/tpt/exadata/demos/enkcel02_disk_io_issue.txt @@ -0,0 +1,34 @@ +SQL> @asm/asm_imbalance + + Percent Minimum + Percent Disk Size Percent Disk Diskgroup +Diskgroup Imbalance Variance Free Count Redundancy +------------------------------ --------- --------- ------- ----- ---------- +DATA 8.2 .0 90.9 32 NORMAL +DBFS_DG 10.9 .0 48.8 28 NORMAL +RECO .5 .0 91.7 33 NORMAL + +SQL> + + +metalink script: + +SYS:+ASM1>@asm_imbalance + + Columns Described in Script Percent Minimum + Percent Disk Size Percent Disk Diskgroup +Diskgroup Name Imbalance Varience Free Count Redundancy +------------------------------ --------- --------- ------- ----- ---------- +DATA 8.2 .0 90.9 32 NORMAL +RECO .5 .0 91.7 33 NORMAL +DBFS_DG 10.9 .0 48.8 28 NORMAL + + + Columns Described in Script Partner Partner Inactive + Count Space % Failgroup Partnership +Diskgroup Name Imbalance Imbalance Count Count +------------------------------ --------- --------- --------- ----------- +DATA 1 12.5 3 0 +DBFS_DG 1 12.5 3 0 +RECO 0 .0 3 0 + diff --git a/tpt/exadata/demos/flash_cache_demos.sql b/tpt/exadata/demos/flash_cache_demos.sql new file mode 100644 index 0000000..1354acb --- /dev/null +++ b/tpt/exadata/demos/flash_cache_demos.sql @@ -0,0 +1,76 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--CREATE BIGFILE TABLESPACE tanel_demo_auto DATAFILE SIZE 100M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO; +--CREATE BIGFILE TABLESPACE tanel_demo_small DATAFILE SIZE 100M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K SEGMENT SPACE MANAGEMENT AUTO; +--CREATE BIGFILE TABLESPACE tanel_demo_medium DATAFILE SIZE 100M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL UNIFORM SIZE 8M SEGMENT SPACE MANAGEMENT AUTO; +--CREATE BIGFILE TABLESPACE tanel_demo_large DATAFILE SIZE 100M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64M SEGMENT SPACE MANAGEMENT AUTO; + +ALTER SESSION SET parallel_force_local = TRUE; + +DROP TABLE t_fc_insert PURGE; +ALTER TABLESPACE tanel_demo_auto RESIZE 100M; + +CREATE TABLE t_fc_insert TABLESPACE tanel_demo_auto STORAGE (CELL_FLASH_CACHE KEEP) AS +SELECT * FROM tanel.sales +WHERE 1=0; + +ALTER SESSION ENABLE PARALLEL DML; -- otherwise the INSERT part will be serial, done by QC + +VAR snapper REFCURSOR +VAR begin_snap_id NUMBER +VAR end_snap_id NUMBER + +EXEC :begin_snap_id := exasnap.begin_snap; +@snapper4 all,begin 1 1 &mysid +INSERT /*+ APPEND MONITOR PARALLEL(8) */ INTO t_fc_insert SELECT * FROM tanel.sales; +COMMIT; +@snapper4 all,end 1 1 &mysid +EXEC :end_snap_id := exasnap.end_snap; + +@xp &mysid +SELECT * FROM TABLE(exasnap.display_snap(:begin_snap_id, :end_snap_id, '%')); + + + +-- different caching options +DROP TABLE t_cached PURGE; +DROP TABLE t_default_cached PURGE; +DROP TABLE t_not_cached PURGE; +DROP TABLE t_small_extents; + +CREATE TABLE t_cached NOPARALLEL TABLESPACE tanel_demo_auto STORAGE (cell_flash_cache KEEP) AS SELECT * FROM sales; +CREATE TABLE t_default_cached NOPARALLEL TABLESPACE tanel_demo_auto STORAGE (cell_flash_cache DEFAULT) AS SELECT * FROM sales; +CREATE TABLE t_not_cached PARALLEL 16 TABLESPACE tanel_demo_auto STORAGE (cell_flash_cache NONE) AS SELECT * FROM sales; + +CREATE TABLE t_small_extents PARALLEL 16 TABLESPACE tanel_demo_small STORAGE (CELL_FLASH_CACHE DEFAULT) AS SELECT * FROM sales; + + + +-- cell commands +-- iostat -xm 5 | egrep -v "sd.[0-9]|^md" +-- lsscsi + +-- DESCRIBE FLASHCACHECONTENT +-- cachedKeepSize +-- cachedSize +-- dbID +-- dbUniqueName +-- hitCount +-- hoursToExpiration +-- missCount +-- objectNumber +-- tableSpaceNumber + +-- LIST FLASHCACHECONTENT ATTRIBUTES ALL; +-- dcli -l root -g ~/x2cells "cellcli -e 'LIST FLASHCACHECONTENT ATTRIBUTES cachedKeepSize,cachedSize,dbID,dbUniqueName,hitCount,missCount,objectNumber,tableSpaceNumber'" | sed 's/:/ /' > fc.xls + +-- cachedKeepSize: 0 +-- cachedSize: 1048576 +-- dbID: 1538629110 +-- dbUniqueName: DEMO +-- hitCount: 103840 +-- missCount: 4 +-- objectNumber: 4294967294 +-- tableSpaceNumber: 0 + diff --git a/tpt/exadata/demos/get_cust_name.sql b/tpt/exadata/demos/get_cust_name.sql new file mode 100644 index 0000000..6a941e5 --- /dev/null +++ b/tpt/exadata/demos/get_cust_name.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE OR REPLACE FUNCTION get_cust_name (id IN NUMBER) RETURN VARCHAR2 + AUTHID CURRENT_USER +AS + n VARCHAR2(1000); +BEGIN + SELECT /*+ FULL(c) */ cust_first_name||' '||cust_last_name INTO n + FROM soe.customers c + WHERE customer_id = id; + RETURN n; +END; +/ + diff --git a/tpt/exadata/demos/part_table.sql b/tpt/exadata/demos/part_table.sql new file mode 100644 index 0000000..9c26694 --- /dev/null +++ b/tpt/exadata/demos/part_table.sql @@ -0,0 +1,68 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE TABLE sales_part +PARTITION BY RANGE (time_id) ( + PARTITION Y1998 VALUES LESS THAN (DATE'1999-01-01') + , PARTITION Y1999 VALUES LESS THAN (DATE'2000-01-01') + , PARTITION Y2000 VALUES LESS THAN (DATE'2001-01-01') + , PARTITION Y2001 VALUES LESS THAN (MAXVALUE) +) +TABLESPACE tanel_large +PARALLEL 32 +AS SELECT * FROM sales_100g +/ + +ALTER TABLE sales_part NOPARALLEL; + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'SALES_PART', degree=>16); + +CREATE TABLE sales_part_query_high +PARTITION BY RANGE (time_id) ( + PARTITION Y1998 VALUES LESS THAN (DATE'1999-01-01') + , PARTITION Y1999 VALUES LESS THAN (DATE'2000-01-01') + , PARTITION Y2000 VALUES LESS THAN (DATE'2001-01-01') + , PARTITION Y2001 VALUES LESS THAN (MAXVALUE) +) +TABLESPACE tanel_large +COMPRESS FOR QUERY HIGH +PARALLEL 32 +AS SELECT * FROM sales_100g +/ + +ALTER TABLE sales_part_query_high NOPARALLEL; +EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'SALES_PART_QUERY_HIGH', degree=>16); + +alter session set "_fix_control"='6941515:ON'; + +CREATE TABLE sales_part_fix_6941515 +PARTITION BY RANGE (time_id) ( + PARTITION Y1998 VALUES LESS THAN (DATE'1999-01-01') + , PARTITION Y1999 VALUES LESS THAN (DATE'2000-01-01') + , PARTITION Y2000 VALUES LESS THAN (DATE'2001-01-01') + , PARTITION Y2001 VALUES LESS THAN (MAXVALUE) +) +TABLESPACE tanel_large +PARALLEL 32 +AS SELECT * FROM sales_100g +/ + +ALTER TABLE sales_part_fix_6941515 NOPARALLEL; + +CREATE TABLE sales_part_query_high_fix +PARTITION BY RANGE (time_id) ( + PARTITION Y1998 VALUES LESS THAN (DATE'1999-01-01') + , PARTITION Y1999 VALUES LESS THAN (DATE'2000-01-01') + , PARTITION Y2000 VALUES LESS THAN (DATE'2001-01-01') + , PARTITION Y2001 VALUES LESS THAN (MAXVALUE) +) +TABLESPACE tanel_large +COMPRESS FOR QUERY HIGH +PARALLEL 32 +AS SELECT * FROM sales_100g +/ + +ALTER TABLE sales_part_query_high_fix NOPARALLEL; +EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'SALES_PART_QUERY_HIGH_FIX', degree=>16); + + diff --git a/tpt/exadata/demos/row_filtering.sql b/tpt/exadata/demos/row_filtering.sql new file mode 100644 index 0000000..927a7aa --- /dev/null +++ b/tpt/exadata/demos/row_filtering.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE TABLE row_filtering_test (id NUMBER, c CHAR(1000), vc VARCHAR2(1000)); + +INSERT /*+ APPEND */ INTO row_filtering_test +SELECT rownum, TO_CHAR(rownum), TO_CHAR(rownum) +FROM + (SELECT 1 FROM dual CONNECT BY LEVEL <= 1000) + , (SELECT 1 FROM dual CONNECT BY LEVEL <= 1000) +/ + +-- CREATE TABLE row_filtering_test AS +-- SELECT rownum r, LPAD('x',1000,'x') c1 +-- FROM +-- (SELECT 1 FROM dual CONNECT BY LEVEL <= 1000) +-- , (SELECT 1 FROM dual CONNECT BY LEVEL <= 1000) +-- / +-- +@gts row_filtering_test + +ALTER SESSION SET "_serial_direct_read"=ALWAYS; + +--VAR snapper REFCURSOR +--@snapper4 stats,begin 1 1 &mysid + +SELECT /*+ MONITOR */ COUNT(*) FROM row_filtering_test WHERE id <= 500000; + +SELECT /*+ MONITOR */ COUNT(*) FROM row_filtering_test WHERE id <= (SELECT 500000 FROM dual); + +--@snapper4 stats,end 1 1 &mysid +@xp &mysid + +CREATE TABLE row_filtering_helper (v NUMBER); +INSERT INTO row_filtering_helper VALUES (500000); +COMMIT; + +SELECT /*+ MONITOR */ COUNT(*) FROM row_filtering_test WHERE r <= (SELECT v FROM row_filtering_helper); + + +SELECT /*+ MONITOR */ COUNT(*) FROM row_filtering_test WHERE id <= 500000 AND c = vc; + + + diff --git a/tpt/exadata/demos/soe_orders.sql b/tpt/exadata/demos/soe_orders.sql new file mode 100644 index 0000000..480b692 --- /dev/null +++ b/tpt/exadata/demos/soe_orders.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT /*+ MONITOR FULL(o) FULL(oi) FULL(c) NO_PARALLEL PX_JOIN_FILTER(oi) t2 */ + c.customer_id + , c.cust_first_name ||' '||c.cust_last_name + , c.credit_limit + , MAX(oi.unit_price * oi.quantity) avg_order_total +FROM + soe.orders o + , soe.order_items oi + , soe.customers c +WHERE +-- join conditions + c.customer_id = o.customer_id +AND o.order_id = oi.order_id +-- constant filter conditions +AND c.nls_territory LIKE 'aaaa%' +AND o.order_mode = 'online' +AND o.order_status = 5 +GROUP BY + c.customer_id + , c.cust_first_name ||' '||c.cust_last_name + , c.credit_limit +HAVING + MAX(oi.unit_price * oi.quantity) > c.credit_limit * 3 +/ + diff --git a/tpt/exadata/demos/soe_orders_bloom_storidx.sql b/tpt/exadata/demos/soe_orders_bloom_storidx.sql new file mode 100644 index 0000000..2008a09 --- /dev/null +++ b/tpt/exadata/demos/soe_orders_bloom_storidx.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- the small_orders table below is a table with one order only (for demo purposes, +-- so that scanning the large orders_table wouldn't affect measurements). The idea +-- is to demonstrate that even without any direct filter predicates against the "fact" +-- table ORDER_ITEMS, the bloom filter min/max values can also be used for avoiding IO +-- with storage indexes. +-- +-- You can create your SMALL_ORDERS table (from SwingBench Order Entry SOE schema): +-- CREATE TABLE soe.small_orders AS SELECT * FROM soe.orders WHERE rownum = 1; +-- + +SELECT /*+ MONITOR LEADING(o) FULL(o) FULL(oi) PARALLEL(4) PX_JOIN_FILTER(oi) */ + o.* + , oi.* +FROM + soe.small_orders o -- one row only + , soe.order_items oi +WHERE +-- join conditions + o.order_id = oi.order_id +/ + diff --git a/tpt/exadata/demos/soe_orders_index.sql b/tpt/exadata/demos/soe_orders_index.sql new file mode 100644 index 0000000..ed5949a --- /dev/null +++ b/tpt/exadata/demos/soe_orders_index.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT /*+ MONITOR LEADING(c,o,oi) FULL(c) INDEX(o) */ + c.customer_id + , c.cust_first_name ||' '||c.cust_last_name + , c.credit_limit + , MAX(oi.unit_price * oi.quantity) avg_order_total +FROM + soe.orders o + , soe.order_items oi + , soe.customers c +WHERE +-- join conditions + c.customer_id = o.customer_id +AND o.order_id = oi.order_id +-- constant filter conditions +AND c.nls_territory LIKE 'a%' +AND o.order_mode = 'online' +AND o.order_status = 5 +GROUP BY + c.customer_id + , c.cust_first_name ||' '||c.cust_last_name + , c.credit_limit +HAVING + MAX(oi.unit_price * oi.quantity) > c.credit_limit * 2 +/ + diff --git a/tpt/exadata/disable_flash_cache_for_user.sql b/tpt/exadata/disable_flash_cache_for_user.sql new file mode 100644 index 0000000..fe2cf8c --- /dev/null +++ b/tpt/exadata/disable_flash_cache_for_user.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DECLARE + cmd VARCHAR2(1000); +BEGIN + FOR i IN (SELECT owner,table_name FROM dba_tables WHERE owner = '&1') LOOP + cmd := 'ALTER TABLE '||i.owner||'.'||i.table_name||' STORAGE (CELL_FLASH_CACHE NONE)'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; + + FOR i IN (SELECT owner,index_name FROM dba_indexes WHERE owner = '&1') LOOP + cmd := 'ALTER INDEX '||i.owner||'.'||i.index_name||' STORAGE (CELL_FLASH_CACHE NONE)'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; +END; +/ + diff --git a/tpt/exadata/enable_flash_cache_for_user.sql b/tpt/exadata/enable_flash_cache_for_user.sql new file mode 100644 index 0000000..0fd7e81 --- /dev/null +++ b/tpt/exadata/enable_flash_cache_for_user.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DECLARE + cmd VARCHAR2(1000); +BEGIN + FOR i IN (SELECT owner,table_name FROM dba_tables WHERE owner = '&1') LOOP + cmd := 'ALTER TABLE '||i.owner||'.'||i.table_name||' STORAGE (CELL_FLASH_CACHE KEEP)'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; + + FOR i IN (SELECT owner,index_name FROM dba_indexes WHERE owner = '&1') LOOP + cmd := 'ALTER INDEX '||i.owner||'.'||i.index_name||' STORAGE (CELL_FLASH_CACHE KEEP)'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; +END; +/ + diff --git a/tpt/exadata/esql.sql b/tpt/exadata/esql.sql new file mode 100644 index 0000000..4eb7228 --- /dev/null +++ b/tpt/exadata/esql.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + child_number chld + , ROUND( physical_read_bytes / 1048576 ) phyrd_mb + , ROUND( physical_write_bytes / 1048576 ) phywr_mb + , ROUND( io_cell_offload_eligible_bytes / 1048576 ) phyrd_offl_elig_mb + , ROUND( io_cell_offload_returned_bytes / 1048576 ) phyrd_offl_ret_mb + , ROUND( io_interconnect_bytes / 1048576 ) ic_total_traffic_mb + , ROUND( io_cell_uncompressed_bytes / 1048576 ) total_uncomp_mb + , optimized_phy_read_requests phyrd_optim_rq +FROM + v$sql +WHERE + sql_id = '&1' +AND child_number LIKE '&2' +@pr + diff --git a/tpt/exadata/exadisktopo.sql b/tpt/exadata/exadisktopo.sql new file mode 100644 index 0000000..12b47f6 --- /dev/null +++ b/tpt/exadata/exadisktopo.sql @@ -0,0 +1,179 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: exadisktopo.sql (v1.0) +-- +-- Purpose: Report Exadata disk topology from ASM Diskgroup all the way to cell LUNs and Physical disks +-- (from top of the stack downwards) +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- +-- Copyright: (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @exadisktopo.sql +-- +------------------------------------------------------------------------------------------------------------------------ + +COL cellname HEAD CELLNAME FOR A20 +COL celldisk_name HEAD CELLDISK FOR A30 +COL physdisk_name HEAD PHYSDISK FOR A30 +COL griddisk_name HEAD GRIDDISK FOR A30 +COL asmdisk_name HEAD ASMDISK FOR A30 + +BREAK ON asm_diskgroup SKIP 1 ON asm_disk + +PROMPT Showing Exadata disk topology from V$ASM_DISK and V$CELL_CONFIG.... +WITH + pd AS ( + SELECT /*+ MATERIALIZE */ + c.cellname + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/name/text()') AS VARCHAR2(100)) name + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/diskType/text()') AS VARCHAR2(100)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/luns/text()') AS VARCHAR2(100)) luns + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/makeModel/text()') AS VARCHAR2(100)) makeModel + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalFirmware/text()') AS VARCHAR2(100)) physicalFirmware + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalInsertTime/text()') AS VARCHAR2(100)) physicalInsertTime + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalSerial/text()') AS VARCHAR2(100)) physicalSerial + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalSize/text()') AS VARCHAR2(100)) physicalSize + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/slotNumber/text()') AS VARCHAR2(100)) slotNumber + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/status/text()') AS VARCHAR2(100)) status + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/id/text()') AS VARCHAR2(100)) id + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/key_500/text()') AS VARCHAR2(100)) key_500 + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/predfailStatus/text()') AS VARCHAR2(100)) predfailStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/poorPerfStatus/text()') AS VARCHAR2(100)) poorPerfStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/wtCachingStatus/text()') AS VARCHAR2(100)) wtCachingStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/peerFailStatus/text()') AS VARCHAR2(100)) peerFailStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/criticalStatus/text()') AS VARCHAR2(100)) criticalStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errCmdTimeoutCount/text()') AS VARCHAR2(100)) errCmdTimeoutCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errHardReadCount/text()') AS VARCHAR2(100)) errHardReadCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errHardWriteCount/text()') AS VARCHAR2(100)) errHardWriteCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errMediaCount/text()') AS VARCHAR2(100)) errMediaCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errOtherCount/text()') AS VARCHAR2(100)) errOtherCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errSeekCount/text()') AS VARCHAR2(100)) errSeekCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/sectorRemapCount/text()') AS VARCHAR2(100)) sectorRemapCount + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/physicaldisk'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'PHYSICALDISKS' +), + cd AS ( + SELECT /*+ MATERIALIZE */ + c.cellname + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/name/text()') AS VARCHAR2(100)) name + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/comment /text()') AS VARCHAR2(100)) disk_comment + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/creationTime /text()') AS VARCHAR2(100)) creationTime + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/deviceName /text()') AS VARCHAR2(100)) deviceName + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/devicePartition/text()') AS VARCHAR2(100)) devicePartition + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/diskType /text()') AS VARCHAR2(100)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/errorCount /text()') AS VARCHAR2(100)) errorCount + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/freeSpace /text()') AS VARCHAR2(100)) freeSpace + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/id /text()') AS VARCHAR2(100)) id + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/interleaving /text()') AS VARCHAR2(100)) interleaving + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/lun /text()') AS VARCHAR2(100)) lun + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/physicalDisk /text()') AS VARCHAR2(100)) physicalDisk + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/size /text()') AS VARCHAR2(100)) disk_size + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/status /text()') AS VARCHAR2(100)) status + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/celldisk'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'CELLDISKS' +), + gd AS ( + SELECT /*+ MATERIALIZE */ + c.cellname + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/name/text()') AS VARCHAR2(100)) name + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/asmDiskgroupName/text()') AS VARCHAR2(100)) asmDiskgroupName + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/asmDiskName /text()') AS VARCHAR2(100)) asmDiskName + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/asmFailGroupName/text()') AS VARCHAR2(100)) asmFailGroupName + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/availableTo /text()') AS VARCHAR2(100)) availableTo + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/cachingPolicy /text()') AS VARCHAR2(100)) cachingPolicy + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/cellDisk /text()') AS VARCHAR2(100)) cellDisk + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/comment /text()') AS VARCHAR2(100)) disk_comment + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/creationTime /text()') AS VARCHAR2(100)) creationTime + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/diskType /text()') AS VARCHAR2(100)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/errorCount /text()') AS VARCHAR2(100)) errorCount + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/id /text()') AS VARCHAR2(100)) id + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/offset /text()') AS VARCHAR2(100)) offset + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/size /text()') AS VARCHAR2(100)) disk_size + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/status /text()') AS VARCHAR2(100)) status + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/griddisk'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'GRIDDISKS' +), + lun AS ( + SELECT /*+ MATERIALIZE */ + c.cellname + , CAST(EXTRACTVALUE(VALUE(v), '/lun/cellDisk /text()') AS VARCHAR2(100)) cellDisk + , CAST(EXTRACTVALUE(VALUE(v), '/lun/deviceName /text()') AS VARCHAR2(100)) deviceName + , CAST(EXTRACTVALUE(VALUE(v), '/lun/diskType /text()') AS VARCHAR2(100)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/lun/id /text()') AS VARCHAR2(100)) id + , CAST(EXTRACTVALUE(VALUE(v), '/lun/isSystemLun /text()') AS VARCHAR2(100)) isSystemLun + , CAST(EXTRACTVALUE(VALUE(v), '/lun/lunAutoCreate /text()') AS VARCHAR2(100)) lunAutoCreate + , CAST(EXTRACTVALUE(VALUE(v), '/lun/lunSize /text()') AS VARCHAR2(100)) lunSize + , CAST(EXTRACTVALUE(VALUE(v), '/lun/physicalDrives /text()') AS VARCHAR2(100)) physicalDrives + , CAST(EXTRACTVALUE(VALUE(v), '/lun/raidLevel /text()') AS VARCHAR2(100)) raidLevel + , CAST(EXTRACTVALUE(VALUE(v), '/lun/lunWriteCacheMode/text()') AS VARCHAR2(100)) lunWriteCacheMode + , CAST(EXTRACTVALUE(VALUE(v), '/lun/status /text()') AS VARCHAR2(100)) status + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/lun'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'LUNS' +) + , ad AS (SELECT /*+ MATERIALIZE */ * FROM v$asm_disk) + , adg AS (SELECT /*+ MATERIALIZE */ * FROM v$asm_diskgroup) +SELECT + adg.name asm_diskgroup + , ad.name asm_disk + , gd.name griddisk_name + , cd.name celldisk_name + , pd.cellname + , SUBSTR(cd.devicepartition,1,20) cd_devicepart + , pd.name physdisk_name + , SUBSTR(pd.status,1,20) physdisk_status + , lun.lunWriteCacheMode +-- , SUBSTR(cd.devicename,1,20) cd_devicename +-- , SUBSTR(lun.devicename,1,20) lun_devicename +-- disktype +FROM + gd + , cd + , pd + , lun + , ad + , adg +WHERE + ad.group_number = adg.group_number (+) +AND gd.asmdiskname = ad.name (+) +AND cd.name = gd.cellDisk (+) +AND pd.id = cd.physicalDisk (+) +AND cd.name = lun.celldisk (+) +--GROUP BY +-- cellname +-- , disktype +-- , status +ORDER BY +-- disktype + asm_diskgroup + , asm_disk + , griddisk_name + , celldisk_name + , physdisk_name + , cellname +/ + + + + + + + diff --git a/tpt/exadata/exadisktopo2.sql b/tpt/exadata/exadisktopo2.sql new file mode 100644 index 0000000..7880c25 --- /dev/null +++ b/tpt/exadata/exadisktopo2.sql @@ -0,0 +1,171 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +------------------------------------------------------------------------------------------------------------------------ +-- +-- File name: exadisktopo2.sql (v1.0) +-- +-- Purpose: Report Exadata disk topology from cell LUNs and Physical disks all the way to ASM diskgroups +-- (from bottom of the IO stack upwards) +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- +-- Copyright: Tanel Poder (c) http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", no warranties nor guarantees are +-- made. Use at your own risk :) +-- +-- Usage: @exadatadisktopo2 +-- +------------------------------------------------------------------------------------------------------------------------ + +COL cellname HEAD CELLNAME FOR A20 +COL celldisk_name HEAD CELLDISK FOR A30 +COL physdisk_name HEAD PHYSDISK FOR A30 +COL griddisk_name HEAD GRIDDISK FOR A30 +COL asmdisk_name HEAD ASMDISK FOR A30 + +BREAK ON cellname SKIP 1 + +PROMPT Showing Exadata disk topology from V$ASM_DISK and V$CELL_CONFIG.... + +WITH + pd AS ( + SELECT /*+ MATERIALIZE */ + c.cellname + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/name/text()') AS VARCHAR2(100)) name + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/diskType/text()') AS VARCHAR2(100)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/luns/text()') AS VARCHAR2(100)) luns + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/makeModel/text()') AS VARCHAR2(100)) makeModel + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalFirmware/text()') AS VARCHAR2(100)) physicalFirmware + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalInsertTime/text()') AS VARCHAR2(100)) physicalInsertTime + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalSerial/text()') AS VARCHAR2(100)) physicalSerial + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/physicalSize/text()') AS VARCHAR2(100)) physicalSize + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/slotNumber/text()') AS VARCHAR2(100)) slotNumber + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/status/text()') AS VARCHAR2(100)) status + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/id/text()') AS VARCHAR2(100)) id + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/key_500/text()') AS VARCHAR2(100)) key_500 + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/predfailStatus/text()') AS VARCHAR2(100)) predfailStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/poorPerfStatus/text()') AS VARCHAR2(100)) poorPerfStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/wtCachingStatus/text()') AS VARCHAR2(100)) wtCachingStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/peerFailStatus/text()') AS VARCHAR2(100)) peerFailStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/criticalStatus/text()') AS VARCHAR2(100)) criticalStatus + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errCmdTimeoutCount/text()') AS VARCHAR2(100)) errCmdTimeoutCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errHardReadCount/text()') AS VARCHAR2(100)) errHardReadCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errHardWriteCount/text()') AS VARCHAR2(100)) errHardWriteCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errMediaCount/text()') AS VARCHAR2(100)) errMediaCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errOtherCount/text()') AS VARCHAR2(100)) errOtherCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/errSeekCount/text()') AS VARCHAR2(100)) errSeekCount + , CAST(EXTRACTVALUE(VALUE(v), '/physicaldisk/sectorRemapCount/text()') AS VARCHAR2(100)) sectorRemapCount + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/physicaldisk'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'PHYSICALDISKS' +), + cd AS ( + SELECT /*+ MATERIALIZE */ + c.cellname + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/name/text()') AS VARCHAR2(100)) name + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/comment /text()') AS VARCHAR2(100)) disk_comment + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/creationTime /text()') AS VARCHAR2(100)) creationTime + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/deviceName /text()') AS VARCHAR2(100)) deviceName + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/devicePartition/text()') AS VARCHAR2(100)) devicePartition + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/diskType /text()') AS VARCHAR2(100)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/errorCount /text()') AS VARCHAR2(100)) errorCount + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/freeSpace /text()') AS VARCHAR2(100)) freeSpace + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/id /text()') AS VARCHAR2(100)) id + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/interleaving /text()') AS VARCHAR2(100)) interleaving + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/lun /text()') AS VARCHAR2(100)) lun + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/physicalDisk /text()') AS VARCHAR2(100)) physicalDisk + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/size /text()') AS VARCHAR2(100)) disk_size + , CAST(EXTRACTVALUE(VALUE(v), '/celldisk/status /text()') AS VARCHAR2(100)) status + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/celldisk'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'CELLDISKS' +), + gd AS ( + SELECT /*+ MATERIALIZE */ + c.cellname + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/name/text()') AS VARCHAR2(100)) name + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/asmDiskgroupName/text()') AS VARCHAR2(100)) asmDiskgroupName + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/asmDiskName /text()') AS VARCHAR2(100)) asmDiskName + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/asmFailGroupName/text()') AS VARCHAR2(100)) asmFailGroupName + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/availableTo /text()') AS VARCHAR2(100)) availableTo + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/cachingPolicy /text()') AS VARCHAR2(100)) cachingPolicy + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/cellDisk /text()') AS VARCHAR2(100)) cellDisk + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/comment /text()') AS VARCHAR2(100)) disk_comment + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/creationTime /text()') AS VARCHAR2(100)) creationTime + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/diskType /text()') AS VARCHAR2(100)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/errorCount /text()') AS VARCHAR2(100)) errorCount + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/id /text()') AS VARCHAR2(100)) id + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/offset /text()') AS VARCHAR2(100)) offset + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/size /text()') AS VARCHAR2(100)) disk_size + , CAST(EXTRACTVALUE(VALUE(v), '/griddisk/status /text()') AS VARCHAR2(100)) status + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/griddisk'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'GRIDDISKS' +), + lun AS ( + SELECT /*+ MATERIALIZE */ + c.cellname + , CAST(EXTRACTVALUE(VALUE(v), '/lun/cellDisk /text()') AS VARCHAR2(100)) cellDisk + , CAST(EXTRACTVALUE(VALUE(v), '/lun/deviceName /text()') AS VARCHAR2(100)) deviceName + , CAST(EXTRACTVALUE(VALUE(v), '/lun/diskType /text()') AS VARCHAR2(100)) diskType + , CAST(EXTRACTVALUE(VALUE(v), '/lun/id /text()') AS VARCHAR2(100)) id + , CAST(EXTRACTVALUE(VALUE(v), '/lun/isSystemLun /text()') AS VARCHAR2(100)) isSystemLun + , CAST(EXTRACTVALUE(VALUE(v), '/lun/lunAutoCreate /text()') AS VARCHAR2(100)) lunAutoCreate + , CAST(EXTRACTVALUE(VALUE(v), '/lun/lunSize /text()') AS VARCHAR2(100)) lunSize + , CAST(EXTRACTVALUE(VALUE(v), '/lun/physicalDrives /text()') AS VARCHAR2(100)) physicalDrives + , CAST(EXTRACTVALUE(VALUE(v), '/lun/raidLevel /text()') AS VARCHAR2(100)) raidLevel + , CAST(EXTRACTVALUE(VALUE(v), '/lun/lunWriteCacheMode/text()') AS VARCHAR2(100)) lunWriteCacheMode + , CAST(EXTRACTVALUE(VALUE(v), '/lun/status /text()') AS VARCHAR2(100)) status + FROM + v$cell_config c + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(c.confval), '/cli-output/lun'))) v -- gv$ isn't needed, all cells should be visible in all instances + WHERE + c.conftype = 'LUNS' +) + , ad AS (SELECT /*+ MATERIALIZE */ * FROM v$asm_disk) + , adg AS (SELECT /*+ MATERIALIZE */ * FROM v$asm_diskgroup) +SELECT + pd.cellname + , SUBSTR(lun.deviceName,1,20) lun_devicename + , pd.name physdisk_name + , SUBSTR(pd.status,1,20) physdisk_status + , cd.name celldisk_name + , SUBSTR(cd.devicepartition,1,20) cd_devicepart + , gd.name griddisk_name + , ad.name asm_disk + , adg.name asm_diskgroup + , lun.lunWriteCacheMode +-- , SUBSTR(cd.devicename,1,20) cd_devicename +-- , SUBSTR(lun.devicename,1,20) lun_devicename +FROM + gd + , cd + , pd + , lun + , ad + , adg +WHERE + ad.group_number = adg.group_number (+) +AND gd.asmdiskname = ad.name (+) +AND cd.name = gd.cellDisk (+) +AND pd.id = cd.physicalDisk (+) +AND cd.name = lun.celldisk (+) +ORDER BY + --disktype + cellname + , celldisk_name + , griddisk_name + , asm_disk + , asm_diskgroup +/ + +CLEAR BREAKS + diff --git a/tpt/exadata/exafriendly.sql b/tpt/exadata/exafriendly.sql new file mode 100644 index 0000000..500e478 --- /dev/null +++ b/tpt/exadata/exafriendly.sql @@ -0,0 +1,342 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- File name: exafriendly.sql (report non-exadata-friendly SQL and their stats) +-- +-- Purpose: This script is a collection of queries against ASH, which will +-- report and drill down into workloads which don't use Exadata smart +-- scanning and are doing buffered full table scans or random single +-- block reads instead. It uses the 11g new ASH columns +-- (SQL_PLAN_OPERATION, SQL_PLAN_OPTIONS) which give SQL plan line +-- level activity breakdown. +-- +-- Note that this script is not a single SQL performance diagnosis tool, +-- for looking into a single SQL, use the SQL Monitoring report. This +-- exafriendly.sql script is aimed for giving you a high-level +-- bird's-eye view of "exadata-friendiness" of your workloads, so you'd +-- detect systemic problems and drill down where needed. +-- +-- Usage: @exafriendly.sql +-- +-- Examples: @exafriendly.sql gv$active_session_history +-- +-- @exafriendly.sql "dba_hist_active_sess_history WHERE snap_time > SYSDATE-1" +-- +-- Author: Tanel Poder ( http://blog.tanelpoder.com | tanel@tanelpoder.com ) +-- +-- Copyright: (c) 2012 All Rights Reserved +-- +-- +-- Other: I strongly recommend you to read through the script to understand +-- what it's doing and how the drilldown happens. You likely need +-- to customize things (or at least adjust filters) when you diagnose +-- stuff in your environment. +-- +-------------------------------------------------------------------------------- + +set timing on tab off verify off linesize 999 pagesize 5000 trimspool on trimout on null "" + +COL wait_class FOR A20 +COL event FOR A40 +COL plan_line FOR A40 +COL command_name FOR A15 +COL pct FOR 999.9 + +define ash=&1 + +SELECT MAX(sample_time) - MIN(sample_time) +FROM &ash +/ + +PROMPT Report the top active SQL statements regardless of their CPU usage/wait event breakdown +SELECT * FROM ( + SELECT + sql_id + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash + WHERE + session_type = 'FOREGROUND' + GROUP BY + sql_id + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report the top session state/wait class breakdown +SELECT * FROM ( + SELECT + session_state,wait_class + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash + GROUP BY + session_state,wait_class + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report the top session state/wait event breakdown (just like TOP-5 Timed Events in AWR) +SELECT * FROM ( + SELECT + session_state,wait_class,event + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash + GROUP BY + session_state,wait_class,event + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report the top SQL waiting for buffered single block reads +SELECT * FROM ( + SELECT + session_state,wait_class,event,sql_id + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash + WHERE + session_state = 'WAITING' + AND event = 'cell single block physical read' + GROUP BY + session_state,wait_class,event,sql_id + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report the top SQL waiting for buffered single block reads the most (with sampled execution count) +SELECT * FROM ( + SELECT + sql_plan_operation||' '||sql_plan_options plan_line,event,sql_id + , COUNT(DISTINCT(sql_exec_id)) noticed_executions + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash + WHERE + session_state = 'WAITING' + AND event = 'cell single block physical read' + GROUP BY + sql_plan_operation||' '||sql_plan_options,event,sql_id + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report what kind of SQL execution plan operations, executed by which user wait for buffered single block reads the most +SELECT * FROM ( + SELECT + sql_plan_operation||' '||sql_plan_options plan_line,u.username,event + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash a + , dba_users u + WHERE + a.user_id = u.user_id + AND session_state = 'WAITING' + AND event = 'cell single block physical read' + GROUP BY + sql_plan_operation||' '||sql_plan_options,event,u.username + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report what kind of execution plan operations wait for buffered single block reads +SELECT * FROM ( + SELECT + sql_plan_operation||' '||sql_plan_options plan_line,event + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash + WHERE + session_state = 'WAITING' + AND event = 'cell single block physical read' + GROUP BY + sql_plan_operation||' '||sql_plan_options,event + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + + +PROMPT Report what kind of execution plan operations wait for buffered single block reads - against which schemas +SELECT * FROM ( + SELECT + sql_plan_operation||' '||sql_plan_options plan_line,p.object_owner,event + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM + v$active_session_history a + , v$sql_plan p + WHERE + a.sql_id = p.sql_id + AND a.sql_child_number = p.child_number + AND a.sql_plan_line_id = p.id + AND session_state = 'WAITING' + AND event = 'cell single block physical read' + GROUP BY + sql_plan_operation||' '||sql_plan_options,p.object_owner,event + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report what kind of execution plan operations wait for buffered single block reads - against which objects +SELECT * FROM ( + SELECT + sql_plan_operation||' '||sql_plan_options plan_line,p.object_owner,p.object_name,event + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM + v$active_session_history a + , v$sql_plan p + WHERE + a.sql_id = p.sql_id + AND a.sql_child_number = p.child_number + AND a.sql_plan_line_id = p.id + AND session_state = 'WAITING' + AND event = 'cell single block physical read' + GROUP BY + sql_plan_operation||' '||sql_plan_options,p.object_owner,p.object_name,event + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report which SQL command type consumes the most time (broken down by wait class) +SELECT * FROM ( + SELECT + command_name,session_state,wait_class + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash, v$sqlcommand + WHERE &ash..sql_opcode = v$sqlcommand.command_type + GROUP BY + command_name,session_state,wait_class + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report what kind of execution plan operations wait for buffered multiblock reads the most +SELECT * FROM ( + SELECT + sql_plan_operation||' '||sql_plan_options plan_line,event + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM + &ash + WHERE + session_state = 'WAITING' + AND event = 'cell multiblock physical read' + GROUP BY + sql_plan_operation||' '||sql_plan_options,event + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report what kind of execution plan operations wait for buffered multiblock reads - against which objects +SELECT * FROM ( + SELECT + sql_plan_operation||' '||sql_plan_options plan_line,p.object_owner,p.object_name,event + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM + v$active_session_history a + , v$sql_plan p + WHERE + a.sql_id = p.sql_id + AND a.sql_child_number = p.child_number + AND a.sql_plan_line_id = p.id + AND session_state = 'WAITING' + AND event = 'cell multiblock physical read' + GROUP BY + sql_plan_operation||' '||sql_plan_options,p.object_owner,p.object_name,event + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + +PROMPT Report any PARALLEL full table scans which use buffered reads (in-memory PX) +SELECT * FROM ( + SELECT + sql_id + , sql_plan_operation||' '||sql_plan_options plan_line + , CASE WHEN qc_session_id IS NULL THEN 'SERIAL' ELSE 'PARALLEL' END is_parallel + -- , px_flags + , session_state + , wait_class + , event + , COUNT(*) + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash + WHERE + sql_plan_operation = 'TABLE ACCESS' + AND sql_plan_options = 'STORAGE FULL' + AND session_state = 'WAITING' + AND event IN ('cell single block physical read', 'cell multiblock physical read', 'cell list of blocks physical read') + AND qc_session_id IS NOT NULL -- is a px session + GROUP BY + sql_id + , sql_plan_operation||' '||sql_plan_options + , CASE WHEN qc_session_id IS NULL THEN 'SERIAL' ELSE 'PARALLEL' END --is_parallel + -- , px_flags + , session_state + , wait_class + , event + ORDER BY COUNT(*) DESC + ) +WHERE rownum <= 20 +/ + +DEF sqlid=4mpjt2rhwd1p4 +PROMPT Report a single SQL_ID &sqlid + +SELECT * FROM ( + SELECT + sql_plan_operation||' '||sql_plan_options plan_line,session_state,event + , SUM(1) seconds + , ROUND(RATIO_TO_REPORT(COUNT(*)) OVER () * 100, 1) pct + FROM &ash + WHERE + sql_id = '&sqlid' + GROUP BY + sql_plan_operation||' '||sql_plan_options,session_state,event + ORDER BY + seconds DESC +) +WHERE + rownum <= 10 +/ + diff --git a/tpt/exadata/exasnap.sql b/tpt/exadata/exasnap.sql new file mode 100644 index 0000000..dd1c0bd --- /dev/null +++ b/tpt/exadata/exasnap.sql @@ -0,0 +1,389 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- File name: exasnap.sql (Exadata Snapper) BETA +-- +-- Purpose: Display various Exadata IO efficiency metrics of a session +-- from V$SESSTAT. +-- +-- Author: Tanel Poder ( http://blog.tanelpoder.com | tanel@tanelpoder.com ) +-- +-- Copyright: (c) 2012 All Rights Reserved +-- +-- Usage: +-- 1) TAKE A SNAPSHOT +-- +-- SELECT exasnap.begin_snap() FROM dual; +-- or +-- SELECT exasnap.begin_snap('[@]') FROM dual; +-- +-- 2) Run the measured query in the session you snapshotted +-- (or just wait for it to run a while) +-- +-- 3) TAKE A 2ND SNAPSHOT +-- +-- SELECT exasnap.begin_snap() FROM dual; +-- or +-- SELECT exasnap.begin_snap('[@]') FROM dual; +-- +-- 4) REPORT SESSION METRICS +-- +-- @exasnap.sql basic +-- or +-- @exasnap.sql % +-- +-- The latter script gives you more output. +-- +-- Other: This is still a pretty raw script in development and will +-- probably change a lot once it reaches v1.0. +-- +-- The PX slaves aggregate their metrics back to the QC session +-- once the query completes, so querying the QC session only is +-- ok if you wait for the query to finish (or cancel it) before +-- taking a snapshot. +-- To measure a query still running, +-- +-------------------------------------------------------------------------------- + +SET LINES 999 PAGES 5000 TRIMOUT ON TRIMSPOOL ON TAB OFF + +COL ioeff_percentage FOR A52 +BREAK ON inst_id SKIP 1 ON SID ON CATEGORY SKIP 1 DUP + +-- keep in capital (MB or GB) +DEF unit=MB + +-- adjust for MB or GB +DEF divisor=1024*1024 + +DEF blocksize=8192 + +DEF asm_mirrors=2 + +DEFINE nothing ="" +PROMPT +PROMPT ---------------------------------------------------------------------------------------------------------------------------------------------¬hing +PROMPT -- Exadata Snapper v0.5 BETA by Tanel Poder @ Enkitec - The Exadata Experts ( http://www.enkitec.com ) +PROMPT ---------------------------------------------------------------------------------------------------------------------------------------------¬hing + +WITH stats AS ( + SELECT + stat_name name + , SUM(delta) value + , AVG(snap_seconds) snap_seconds -- is the same for all records in this snap_id + FROM ( + SELECT + esn1.snap_id + , esn1.snap_time begin_snap_time + , esn2.snap_time end_snap_time + , esn2.snap_time - esn1.snap_time snap_interval + , TO_NUMBER(EXTRACT(second from esn2.snap_time - esn1.snap_time)) + + TO_NUMBER(EXTRACT(minute from esn2.snap_time - esn1.snap_time)) * 60 + + TO_NUMBER(EXTRACT(hour from esn2.snap_time - esn1.snap_time)) * 60 * 60 + + TO_NUMBER(EXTRACT(day from esn2.snap_time - esn1.snap_time)) * 60 * 60 * 24 + + -- TODO this is not needed + TO_NUMBER(TO_CHAR(esn2.snap_time,'xFF')) - + TO_NUMBER(TO_CHAR(esn1.snap_time,'xFF')) snap_seconds -- looks like the last part is buggy but it's too late to figure this out! + , esn1.snap_name begin_snap_name + , esn2.snap_name end_snap_name + , ess1.stat_name + , ess1.value begin_value + , ess2.value end_value + , ess2.value - ess1.value delta + FROM + ex_snapshot esn1 + , ex_session es1 + , ex_sesstat ess1 + , ex_snapshot esn2 + , ex_session es2 + , ex_sesstat ess2 + WHERE + -- snap_id + esn1.snap_id = es1.snap_id + AND ess1.snap_id = esn1.snap_id + AND es1.snap_id = ess1.snap_id + AND es1.inst_id = ess1.inst_id + AND es1.sid = ess1.sid + AND es1.serial# = ess1.serial# + -- + AND esn2.snap_id = es2.snap_id + AND es2.snap_id = ess2.snap_id + AND ess2.snap_id = esn2.snap_id + AND es2.inst_id = ess2.inst_id + AND es2.sid = ess2.sid + AND es2.serial# = ess2.serial# + AND ess1.stat_name = ess2.stat_name + AND ess1.inst_id = ess2.inst_id + AND ess1.sid = ess2.sid + AND ess1.serial# = ess2.serial# + -- + AND esn1.snap_id = &2 + AND esn2.snap_id = &3 + -- + -- AND ess2.value - ess1.value != 0 -- for testing + ) + GROUP BY + stat_name +), +sq AS ( + SELECT + * + FROM ( + SELECT + 0 inst_id + , 0 sid + , CASE WHEN TRIM(name) IN ( + 'cell physical IO bytes sent directly to DB node to balance CPU' + , 'cell physical IO bytes pushed back due to excessive CPU on cell' + , 'cell physical IO bytes sent directly to DB node to balanceCPU u' + ) THEN + 'cell physical IO bytes sent directly to DB node to balance CPU' + ELSE name + END name + , value + FROM + --gv$sesstat NATURAL JOIN v$statname + stats + WHERE + 1=1 + -- AND (name LIKE 'cell%bytes%' OR name LIKE 'physical%bytes%') + AND TRIM(name) IN ( + 'physical read total bytes' + , 'physical write total bytes' + , 'physical read total bytes optimized' + , 'cell physical IO bytes eligible for predicate offload' + , 'cell physical IO interconnect bytes' + , 'cell physical IO interconnect bytes returned by smart scan' + , 'cell physical IO bytes saved by storage index' + , 'cell IO uncompressed bytes' + , 'cell blocks processed by cache layer' + , 'cell blocks processed by txn layer' + , 'cell blocks processed by data layer' + , 'cell blocks processed by index layer' + , 'db block gets from cache' + , 'consistent gets from cache' + , 'db block gets direct' + , 'consistent gets direct' + -- following three stats are the same thing (named differently in different versions) + , 'cell physical IO bytes sent directly to DB node to balance CPU' + , 'cell physical IO bytes pushed back due to excessive CPU on cell' + , 'cell physical IO bytes sent directly to DB node to balanceCPU u' + , 'bytes sent via SQL*Net to client' + , 'bytes received via SQL*Net from client' + , 'table fetch continued row' + , 'chained rows skipped by cell' + , 'chained rows processed by cell' + , 'chained rows rejected by cell' + ) + ) + PIVOT ( + SUM(value) + FOR name IN ( + 'physical read total bytes' AS phyrd_bytes + , 'physical write total bytes' AS phywr_bytes + , 'physical read total bytes optimized' AS phyrd_optim_bytes + , 'cell physical IO bytes eligible for predicate offload' AS pred_offloadable_bytes + , 'cell physical IO interconnect bytes' AS interconnect_bytes + , 'cell physical IO interconnect bytes returned by smart scan' AS smart_scan_ret_bytes + , 'cell physical IO bytes saved by storage index' AS storidx_saved_bytes + , 'cell IO uncompressed bytes' AS uncompressed_bytes + , 'cell blocks processed by cache layer' AS cell_proc_cache_blk + , 'cell blocks processed by txn layer' AS cell_proc_txn_blk + , 'cell blocks processed by data layer' AS cell_proc_data_blk + , 'cell blocks processed by index layer' AS cell_proc_index_blk + , 'db block gets from cache' AS curr_gets_cache_blk + , 'consistent gets from cache' AS cons_gets_cache_blk + , 'db block gets direct' AS curr_gets_direct_blk + , 'consistent gets direct' AS cons_gets_direct_blk + , 'cell physical IO bytes sent directly to DB node to balance CPU' AS cell_bal_cpu_bytes + , 'bytes sent via SQL*Net to client' AS net_to_client_bytes + , 'bytes received via SQL*Net from client' AS net_from_client_bytes + , 'table fetch continued row' AS chain_fetch_cont_row + , 'chained rows skipped by cell' AS chain_rows_skipped + , 'chained rows processed by cell' AS chain_rows_processed + , 'chained rows rejected by cell' AS chain_rows_rejected + ) + ) +), +precalc AS ( + SELECT + inst_id + , sid + , ROUND((phyrd_bytes)/(&divisor)) db_physrd_&unit + , ROUND((phywr_bytes)/(&divisor)) db_physwr_&unit + , ROUND((phyrd_bytes+phywr_bytes)/(&divisor)) db_physio_&unit + , ROUND(pred_offloadable_bytes/(&divisor)) pred_offloadable_&unit + , ROUND(phyrd_optim_bytes/(&divisor)) phyrd_optim_&unit + , ROUND((phyrd_optim_bytes-storidx_saved_bytes)/(&divisor)) phyrd_flash_rd_&unit + , ROUND(storidx_saved_bytes/(&divisor)) phyrd_storidx_saved_&unit + , ROUND((phyrd_bytes-phyrd_optim_bytes)/(&divisor)) spin_disk_rd_&unit + , ROUND((phyrd_bytes-phyrd_optim_bytes+(phywr_bytes*&asm_mirrors))/(&divisor)) spin_disk_io_&unit + , ROUND(uncompressed_bytes/(&divisor)) scanned_uncomp_&unit + , ROUND(interconnect_bytes/(&divisor)) total_ic_&unit + , ROUND(smart_scan_ret_bytes/(&divisor)) smart_scan_ret_&unit + , ROUND((interconnect_bytes-smart_scan_ret_bytes)/(&divisor)) non_smart_scan_&unit + , ROUND(cell_proc_cache_blk * &blocksize / (&divisor)) cell_proc_cache_&unit + , ROUND(cell_proc_txn_blk * &blocksize / (&divisor)) cell_proc_txn_&unit + , ROUND(cell_proc_data_blk * &blocksize / (&divisor)) cell_proc_data_&unit + , ROUND(cell_proc_index_blk * &blocksize / (&divisor)) cell_proc_index_&unit + , ROUND(curr_gets_cache_blk * &blocksize / (&divisor)) curr_gets_cache_&unit + , ROUND(cons_gets_cache_blk * &blocksize / (&divisor)) cons_gets_cache_&unit + , ROUND(curr_gets_direct_blk * &blocksize / (&divisor)) curr_gets_direct_&unit + , ROUND(cons_gets_direct_blk * &blocksize / (&divisor)) cons_gets_direct_&unit + , ROUND(cell_bal_cpu_bytes / (&divisor)) cell_bal_cpu_&unit + , ROUND(net_to_client_bytes / (&divisor)) net_to_client_&unit + , ROUND(net_from_client_bytes / (&divisor)) net_from_client_&unit + , chain_fetch_cont_row + , chain_rows_skipped + , chain_rows_processed + , chain_rows_rejected + FROM sq +), +precalc2 AS ( + SELECT + inst_id + , sid + , db_physio_&unit + , db_physrd_&unit + , db_physwr_&unit + , pred_offloadable_&unit + , phyrd_optim_&unit + , phyrd_flash_rd_&unit + spin_disk_rd_&unit phyrd_disk_and_flash_&unit + , phyrd_flash_rd_&unit + , phyrd_storidx_saved_&unit + , spin_disk_io_&unit + , spin_disk_rd_&unit + , ((spin_disk_io_&unit - spin_disk_rd_&unit)) AS spin_disk_wr_&unit + , scanned_uncomp_&unit + , ROUND((scanned_uncomp_&unit/NULLIF(spin_disk_rd_&unit + phyrd_flash_rd_&unit, 0))*db_physrd_&unit) est_full_uncomp_&unit + , total_ic_&unit + , smart_scan_ret_&unit + , non_smart_scan_&unit + , cell_proc_cache_&unit + , cell_proc_txn_&unit + , cell_proc_data_&unit + , cell_proc_index_&unit + , cell_bal_cpu_&unit + , curr_gets_cache_&unit + , cons_gets_cache_&unit + , curr_gets_direct_&unit + , cons_gets_direct_&unit + , net_to_client_&unit + , net_from_client_&unit + , chain_fetch_cont_row + , chain_rows_skipped + , chain_rows_processed + , chain_rows_rejected + FROM + precalc +), +--SELECT +-- inst_id +-- , SUM(db_physio_&unit) +-- , SUM(db_physrd_&unit) +-- , SUM(db_physwr_&unit) +-- , SUM(pred_offloadable_&unit) +-- , SUM(phyrd_optim_&unit) +-- , SUM(spin_disk_io_&unit) +-- , SUM(spin_disk_rd_&unit) +-- , SUM(spin_disk_io_&unit - spin_disk_rd_&unit) AS spin_disk_wr_&unit +-- , SUM(scanned_uncomp_&unit) +-- , ROUND(SUM((scanned_uncomp_&unit/spin_disk_rd_&unit)*db_physrd_&unit)) AS est_full_uncomp_&unit +-- , SUM(total_ic_&unit) +-- , SUM(smart_scan_ret_&unit) +-- , SUM(non_smart_scan_&unit) +--FROM +-- precalc2 +--GROUP BY ROLLUP +-- (inst_id) +--/ +unpivoted AS ( + SELECT * FROM precalc2 + UNPIVOT ( + &unit + FOR metric + IN ( + phyrd_optim_&unit + , phyrd_disk_and_flash_&unit + , phyrd_flash_rd_&unit + , phyrd_storidx_saved_&unit + , spin_disk_rd_&unit + , spin_disk_wr_&unit + , spin_disk_io_&unit + , db_physrd_&unit + , db_physwr_&unit + , db_physio_&unit + , scanned_uncomp_&unit + , est_full_uncomp_&unit + , non_smart_scan_&unit + , smart_scan_ret_&unit + , total_ic_&unit + , pred_offloadable_&unit + , cell_proc_cache_&unit + , cell_proc_txn_&unit + , cell_proc_data_&unit + , cell_proc_index_&unit + , cell_bal_cpu_&unit + , curr_gets_cache_&unit + , cons_gets_cache_&unit + , curr_gets_direct_&unit + , cons_gets_direct_&unit + , net_to_client_&unit + , net_from_client_&unit + , chain_fetch_cont_row + , chain_rows_skipped + , chain_rows_processed + , chain_rows_rejected + ) + ) +), +metric AS ( + SELECT 'BASIC' type, 'DB_LAYER_IO' category, 'DB_PHYSIO_&unit' name FROM dual UNION ALL + SELECT 'BASIC', 'DB_LAYER_IO', 'DB_PHYSRD_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'DB_LAYER_IO', 'DB_PHYSWR_&unit' FROM dual UNION ALL + SELECT 'ADVANCED', 'AVOID_DISK_IO', 'PHYRD_OPTIM_&unit' FROM dual UNION ALL + SELECT 'ADVANCED', 'AVOID_DISK_IO', 'PHYRD_DISK_AND_FLASH_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'AVOID_DISK_IO', 'PHYRD_FLASH_RD_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'AVOID_DISK_IO', 'PHYRD_STORIDX_SAVED_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'REAL_DISK_IO', 'SPIN_DISK_IO_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'REAL_DISK_IO', 'SPIN_DISK_RD_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'REAL_DISK_IO', 'SPIN_DISK_WR_&unit' FROM dual UNION ALL + SELECT 'ADVANCED', 'COMPRESS', 'SCANNED_UNCOMP_&unit' FROM dual UNION ALL + SELECT 'ADVANCED', 'COMPRESS', 'EST_FULL_UNCOMP_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'REDUCE_INTERCONNECT', 'PRED_OFFLOADABLE_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'REDUCE_INTERCONNECT', 'TOTAL_IC_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'REDUCE_INTERCONNECT', 'SMART_SCAN_RET_&unit' FROM dual UNION ALL + SELECT 'BASIC', 'REDUCE_INTERCONNECT', 'NON_SMART_SCAN_&unit' FROM dual UNION ALL + SELECT 'ADVANCED', 'CELL_PROC_DEPTH', 'CELL_PROC_CACHE_&unit' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'CELL_PROC_DEPTH', 'CELL_PROC_TXN_&unit' FROM DUAL UNION ALL + SELECT 'BASIC', 'CELL_PROC_DEPTH', 'CELL_PROC_DATA_&unit' FROM DUAL UNION ALL + SELECT 'BASIC', 'CELL_PROC_DEPTH', 'CELL_PROC_INDEX_&unit' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'CELL_PROC_DEPTH', 'CELL_BAL_CPU_&unit' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'IN_DB_PROCESSING', 'CURR_GETS_CACHE_&unit' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'IN_DB_PROCESSING', 'CONS_GETS_CACHE_&unit' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'IN_DB_PROCESSING', 'CURR_GETS_DIRECT_&unit' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'IN_DB_PROCESSING', 'CONS_GETS_DIRECT_&unit' FROM DUAL UNION ALL + SELECT 'BASIC', 'CLIENT_COMMUNICATION', 'NET_TO_CLIENT_&unit' FROM DUAL UNION ALL + SELECT 'BASIC', 'CLIENT_COMMUNICATION', 'NET_FROM_CLIENT_&unit' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_FETCH_CONT_ROW' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_ROWS_SKIPPED' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_ROWS_PROCESSED' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_ROWS_REJECTED' FROM DUAL +) +SELECT +-- inst_id +-- , sid + category +-- , type + , metric + , '|'||RPAD(NVL(RPAD('#', ROUND(&unit / NULLIF( (SELECT MAX(&unit) FROM unpivoted u, metric m WHERE u.metric = m.name AND m.type LIKE UPPER('&1')), 0) * 50 ), '#'), ' '), 50, ' ')||'|' ioeff_percentage + , &unit + , TO_CHAR(ROUND(&unit / (SELECT snap_seconds FROM stats WHERE rownum = 1),1), '9999999.9') AS " &unit/sec" +FROM + unpivoted u + , metric m +WHERE + u.metric = m.name +AND m.type LIKE UPPER('&1') +/ diff --git a/tpt/exadata/exasnapper_install_latest.sql b/tpt/exadata/exasnapper_install_latest.sql new file mode 100644 index 0000000..fe35c32 --- /dev/null +++ b/tpt/exadata/exasnapper_install_latest.sql @@ -0,0 +1,730 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- File name: exasnapper_install.sql (Exadata Snapper install) BETA +-- +-- Purpose: Install required objects for the Session Snapper for Exadata tool +-- +-- Author: Tanel Poder ( tanel.poder@enkitec.com | @tanelpoder ) +-- +-- Web: http://www.enkitec.com | http://blog.tanelpoder.com +-- +-- Copyright: (c) 2012-2013 Tanel Poder. All Rights Reserved. +-- +-- Disclaimer: This script is provided "as is", so no warranties or guarantees are +-- made about its correctness, reliability and safety. Use it at your +-- own risk! +-- +-- Install: 1) Make sure that you have SELECT ANY DICTIONARY privileges +-- or direct SELECT grants on the GV$ views referenced in this +-- script +-- +-- 2) Run @exasnapper_install.sql to create the objects +-- +-- Usage: Take a snapshot of a running session (use QC SID if PX): +-- +-- a) Monitor a running query - "DBA mode" +-- +-- SELECT * FROM TABLE(exasnap.display_sid(, [snap_seconds], [detail_level])); +-- +-- The SID argument can be just a number (SID in local instance) or a remote SID with +-- @instance after it (like '123@4') +-- +-- SELECT * FROM TABLE(exasnap.display_sid(123)); +-- SELECT * FROM TABLE(exasnap.display_sid('123@4', p_detail=>'%'); +-- +-- b) Take Before & After snapshots of a query execution - "Developer Mode" +-- +-- 1) SELECT exasnap.begin_snap(123) FROM dual; +-- or +-- EXEC :begin_snap_id := exasnap.begin_snap(123); +-- +-- 2) Run your query, wait until it finishes (or CTRL+C) +-- +-- 3) SELECT exasnap.end_snap(123) FROM dual; +-- or +-- EXEC :end_snap_id := exasnap.end_snap(123); +-- +-- 4) SELECT * FROM TABLE(exasnap.display_snap(:begin_snap_id, :end_snap_id, '%')); +-- +-- +-- Other: This is still a pretty raw script in development and will +-- probably change a lot once it reaches v1.0. +-- +-- Exadata Snapper doesn't currently purge old data from its repository +-- so if you use this version heavily, you may want to truncate the +-- ex_ tables manually (should reporting get slow). I'll add the +-- purging feature in the future. +-- +-------------------------------------------------------------------------------- + +COL snap_name FOR A20 +COL snap_time FOR A30 +COL snap_type FOR A10 +COL taken_by FOR A10 +COL comm FOR A100 + +DROP TABLE ex_snapshot; +DROP TABLE ex_session; +DROP TABLE ex_sesstat; +DROP SEQUENCE ex_snap_seq; +DROP PACKAGE exasnap; +DROP TYPE exastat_result_t; +DROP TYPE exastat_result_r; +DROP TYPE exastat_metrics_t; +DROP TYPE exastat_metrics_r; + +CREATE SEQUENCE ex_snap_seq ORDER NOCACHE; + +CREATE TABLE ex_snapshot ( + snap_id NUMBER NOT NULL + , snap_time TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL + , snap_name VARCHAR2(100) NOT NULL + , snap_type VARCHAR2(100) NOT NULL + , taken_by VARCHAR2(100) DEFAULT user NOT NULL + , comm VARCHAR2(4000) +) +/ + +ALTER TABLE ex_snapshot ADD CONSTRAINT ex_snapshot_pk PRIMARY KEY (snap_id); + +CREATE TABLE ex_session ( + snap_id NUMBER NOT NULL + , snap_time TIMESTAMP NOT NULL + , inst_id NUMBER NOT NULL + , sid NUMBER NOT NULL + , serial# NUMBER NOT NULL + , qc_inst NUMBER + , qc_sid NUMBER + , qc_serial# NUMBER + , username VARCHAR2(100) + , sql_id VARCHAR2(100) + , dfo_tree NUMBER + , server_set NUMBER + , server# NUMBER + , actual_degree NUMBER + , requested_degree NUMBER + , server_name VARCHAR2(100) + , spid VARCHAR2(100) +) +/ + +ALTER TABLE ex_session ADD CONSTRAINT ex_session_pk PRIMARY KEY (snap_id, inst_id, sid, serial#); + + +CREATE TABLE ex_sesstat ( + snap_id NUMBER NOT NULL + , snap_time TIMESTAMP NOT NULL + , inst_id NUMBER NOT NULL + , sid NUMBER NOT NULL + , serial# NUMBER NOT NULL + , stat_name VARCHAR2(100) NOT NULL + , value NUMBER NOT NULL +) +/ + +ALTER TABLE ex_sesstat ADD CONSTRAINT ex_sesstat_pk PRIMARY KEY (snap_id, inst_id, sid, serial#, stat_name); + +CREATE OR REPLACE TYPE exastat_result_r AS OBJECT (name VARCHAR2(1000)); +/ + +CREATE OR REPLACE TYPE exastat_result_t AS TABLE OF exastat_result_r; +/ + +CREATE OR REPLACE TYPE exastat_metrics_r AS OBJECT ( + inst_id NUMBER + , sid NUMBER + , type VARCHAR2(20) + , category VARCHAR2(25) + , name VARCHAR2(30) + , delta_value NUMBER + , delta_value_per_sec NUMBER + , seconds_in_snap NUMBER +); +/ +CREATE OR REPLACE TYPE exastat_metrics_t AS TABLE OF exastat_metrics_r; +/ + +CREATE OR REPLACE PACKAGE exasnap AS + TYPE m_lookuptab_t IS TABLE OF exastat_metrics_r INDEX BY VARCHAR2(100); + + FUNCTION begin_snap(p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user) RETURN NUMBER; + FUNCTION end_snap (p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user) RETURN NUMBER; + FUNCTION take_snap (p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user, p_snap_type IN VARCHAR2 DEFAULT 'SNAP', p_dblink IN VARCHAR2 DEFAULT NULL) RETURN NUMBER; + + PROCEDURE begin_snap(p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user); + PROCEDURE end_snap (p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user); + PROCEDURE take_snap (p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user, p_snap_type IN VARCHAR2 DEFAULT 'SNAP'); + + FUNCTION get_delta_metrics(p_begin_snap IN NUMBER DEFAULT NULL, p_end_snap IN NUMBER DEFAULT NULL) RETURN exastat_metrics_t; + FUNCTION display_snap(p_begin_snap IN NUMBER DEFAULT NULL, p_end_snap IN NUMBER DEFAULT NULL, p_detail IN VARCHAR2 DEFAULT 'BASIC' ) RETURN exastat_result_t PIPELINED; + FUNCTION get_sid(p_sid IN VARCHAR2, p_interval IN NUMBER DEFAULT 5) RETURN exastat_metrics_t; + FUNCTION display_sid(p_sid IN VARCHAR2, p_interval IN NUMBER DEFAULT 5, p_detail IN VARCHAR2 DEFAULT 'BASIC') RETURN exastat_result_t PIPELINED; + FUNCTION monitor_sid(p_sid IN VARCHAR2, p_interval IN NUMBER DEFAULT 5, p_detail IN VARCHAR2 DEFAULT 'BASIC') RETURN exastat_result_t PIPELINED; + +END exasnap; +/ +SHOW ERR; + +-- main +CREATE OR REPLACE PACKAGE BODY exasnap AS + + + FUNCTION begin_snap(p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user) RETURN NUMBER IS + BEGIN + RETURN take_snap(p_sid, p_name, 'BEGIN'); + END begin_snap; + + FUNCTION end_snap(p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user) RETURN NUMBER IS + BEGIN + RETURN take_snap(p_sid, p_name, 'END'); + END end_snap; + + FUNCTION take_snap(p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user, p_snap_type IN VARCHAR2 DEFAULT 'SNAP', p_dblink IN VARCHAR2 DEFAULT NULL) + RETURN NUMBER IS + PRAGMA AUTONOMOUS_TRANSACTION; + seq NUMBER; + ts TIMESTAMP := SYSTIMESTAMP; + lv_sid NUMBER := TO_NUMBER(REGEXP_SUBSTR(p_sid, '^\d+')); + lv_inst_id NUMBER := NVL(REPLACE(REGEXP_SUBSTR(p_sid, '@\d+'), '@', ''),SYS_CONTEXT('USERENV','INSTANCE')); + BEGIN + SELECT ex_snap_seq.NEXTVAL INTO seq FROM dual; + + INSERT INTO ex_snapshot VALUES (seq, ts, p_name, p_snap_type, user, NULL); + + INSERT INTO ex_session + SELECT + seq + , ts + , pxs.inst_id + , pxs.sid + , pxs.serial# + , pxs.qcinst_id qc_inst + , pxs.qcsid qc_sid + , pxs.qcserial# qc_serial# + , s.username username + , s.sql_id + , pxs.server_group dfo_tree + , pxs.server_set + , pxs.server# + , pxs.degree actual_degree + , pxs.req_degree requested_degree + , p.server_name + , p.spid + FROM + gv$px_session pxs + , gv$session s + , gv$px_process p + WHERE + pxs.qcsid = lv_sid + AND pxs.qcinst_id = lv_inst_id + --AND s.sid = pxs.qcsid + AND s.sid = pxs.sid + AND s.serial# = pxs.serial# + --AND s.serial# = pxs.qcserial# -- null + AND p.sid = pxs.sid + AND pxs.inst_id = s.inst_id + AND s.inst_id = p.inst_id + UNION ALL + SELECT + seq + , ts + , s.inst_id + , s.sid + , s.serial# + , null -- qcinst + , null -- qcsid + , null -- qcserial + , s.username + , s.sql_id + , null -- dfo_tree (server_group) + , null -- server_set + , null -- server# + , null -- degree + , null -- req_degree + , s.program -- server_name + , p.spid + FROM + gv$session s + , gv$process p + WHERE + s.inst_id = p.inst_id + AND s.paddr = p.addr + AND s.sid = lv_sid + AND s.inst_id = lv_inst_id; + + INSERT INTO ex_sesstat + SELECT + seq + , ts + , ss.inst_id + , ss.sid + , s.serial# + , sn.name stat_name + , ss.value + FROM + gv$sesstat ss + , gv$statname sn + , gv$session s + WHERE + ss.inst_id = s.inst_id + AND ss.inst_id = sn.inst_id + AND s.inst_id = sn.inst_id + AND s.sid = ss.sid + AND sn.statistic# = ss.statistic# + AND (s.inst_id, s.sid, s.serial#) IN (SELECT inst_id, sid, serial# FROM ex_session WHERE snap_id = seq) + AND (ss.inst_id, ss.sid) IN (SELECT inst_id, sid FROM ex_session WHERE snap_id = seq); + + IF p_snap_type IN ('BEGIN','END') THEN + NULL; + ELSE + NULL; + END IF; + + COMMIT; + + RETURN seq; + END take_snap; + + PROCEDURE begin_snap(p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user) IS + tmp_id NUMBER; + BEGIN + tmp_id := begin_snap(p_sid); + END begin_snap; + + PROCEDURE end_snap(p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user) IS + tmp_id NUMBER; + BEGIN + tmp_id := end_snap(p_sid); + END end_snap; + + PROCEDURE take_snap(p_sid IN VARCHAR2 DEFAULT TO_CHAR(SYS_CONTEXT('userenv','sid')), p_name IN VARCHAR2 DEFAULT user, p_snap_type IN VARCHAR2 DEFAULT 'SNAP') IS + tmp_id NUMBER; + BEGIN + tmp_id := take_snap(p_sid, p_name, 'SNAP'); + END take_snap; + + FUNCTION get_delta_metrics(p_begin_snap IN NUMBER DEFAULT NULL, p_end_snap IN NUMBER DEFAULT NULL) RETURN exastat_metrics_t IS + lv_m exastat_metrics_t; + lv_blocksize NUMBER := 8192; + lv_asm_mirrors NUMBER := 2; + BEGIN + WITH stats AS ( + SELECT + stat_name name + , SUM(delta) value + , AVG(snap_seconds) snap_seconds -- is the same for all records in this snap_id + FROM ( + SELECT + esn1.snap_id + , esn1.snap_time begin_snap_time + , esn2.snap_time end_snap_time + , esn2.snap_time - esn1.snap_time snap_interval + , TO_NUMBER(EXTRACT(second from esn2.snap_time - esn1.snap_time)) + + TO_NUMBER(EXTRACT(minute from esn2.snap_time - esn1.snap_time)) * 60 + + TO_NUMBER(EXTRACT(hour from esn2.snap_time - esn1.snap_time)) * 60 * 60 + + TO_NUMBER(EXTRACT(day from esn2.snap_time - esn1.snap_time)) * 60 * 60 * 24 snap_seconds + , esn1.snap_name begin_snap_name + , esn2.snap_name end_snap_name + , ess1.stat_name + , ess1.value begin_value + , ess2.value end_value + , ess2.value - ess1.value delta + FROM + ex_snapshot esn1 + , ex_session es1 + , ex_sesstat ess1 + , ex_snapshot esn2 + , ex_session es2 + , ex_sesstat ess2 + WHERE + -- snap_id + esn1.snap_id = es1.snap_id + AND ess1.snap_id = esn1.snap_id + AND es1.snap_id = ess1.snap_id + AND es1.inst_id = ess1.inst_id + AND es1.sid = ess1.sid + AND es1.serial# = ess1.serial# + -- + AND esn2.snap_id = es2.snap_id + AND es2.snap_id = ess2.snap_id + AND ess2.snap_id = esn2.snap_id + AND es2.inst_id = ess2.inst_id + AND es2.sid = ess2.sid + AND es2.serial# = ess2.serial# + AND ess1.stat_name = ess2.stat_name + AND ess1.inst_id = ess2.inst_id + AND ess1.sid = ess2.sid + AND ess1.serial# = ess2.serial# + -- + AND esn1.snap_id = p_begin_snap + AND esn2.snap_id = p_end_snap + -- + -- AND ess2.value - ess1.value != 0 -- for testing + ) + GROUP BY + stat_name + ), + sq AS ( + SELECT + * + FROM ( + SELECT + 0 inst_id + , 0 sid + , CASE WHEN TRIM(name) IN ( + 'cell physical IO bytes sent directly to DB node to balance CPU' + , 'cell physical IO bytes pushed back due to excessive CPU on cell' + , 'cell physical IO bytes sent directly to DB node to balanceCPU u' + ) THEN + 'cell physical IO bytes sent directly to DB node to balance CPU' + ELSE name + END name + , value + FROM + --gv$sesstat NATURAL JOIN v$statname + stats + WHERE + 1=1 + -- AND (name LIKE 'cell%bytes%' OR name LIKE 'physical%bytes%') + AND TRIM(name) IN ( + 'physical read total bytes' + , 'physical write total bytes' + , 'physical read total bytes optimized' + , 'cell physical IO bytes eligible for predicate offload' + , 'cell physical IO interconnect bytes' + , 'cell physical IO interconnect bytes returned by smart scan' + , 'cell physical IO bytes saved by storage index' + , 'cell IO uncompressed bytes' + , 'cell blocks processed by cache layer' + , 'cell blocks processed by txn layer' + , 'cell blocks processed by data layer' + , 'cell blocks processed by index layer' + , 'db block gets from cache' + , 'consistent gets from cache' + , 'db block gets direct' + , 'consistent gets direct' + -- following three stats are the same thing (named differently in different versions) + , 'cell physical IO bytes sent directly to DB node to balance CPU' + , 'cell physical IO bytes pushed back due to excessive CPU on cell' + , 'cell physical IO bytes sent directly to DB node to balanceCPU u' + , 'bytes sent via SQL*Net to client' + , 'bytes received via SQL*Net from client' + , 'table fetch continued row' + , 'chained rows skipped by cell' + , 'chained rows processed by cell' + , 'chained rows rejected by cell' + ) + ) + PIVOT ( + SUM(value) + FOR name IN ( + 'physical read total bytes' AS phyrd_bytes + , 'physical write total bytes' AS phywr_bytes + , 'physical read total bytes optimized' AS phyrd_optim_bytes + , 'cell physical IO bytes eligible for predicate offload' AS pred_offloadable_bytes + , 'cell physical IO interconnect bytes' AS interconnect_bytes + , 'cell physical IO interconnect bytes returned by smart scan' AS smart_scan_ret_bytes + , 'cell physical IO bytes saved by storage index' AS storidx_saved_bytes + , 'cell IO uncompressed bytes' AS uncompressed_bytes + , 'cell blocks processed by cache layer' AS cell_proc_cache_blk + , 'cell blocks processed by txn layer' AS cell_proc_txn_blk + , 'cell blocks processed by data layer' AS cell_proc_data_blk + , 'cell blocks processed by index layer' AS cell_proc_index_blk + , 'db block gets from cache' AS curr_gets_cache_blk + , 'consistent gets from cache' AS cons_gets_cache_blk + , 'db block gets direct' AS curr_gets_direct_blk + , 'consistent gets direct' AS cons_gets_direct_blk + , 'cell physical IO bytes sent directly to DB node to balance CPU' AS cell_bal_cpu_bytes + , 'bytes sent via SQL*Net to client' AS net_to_client_bytes + , 'bytes received via SQL*Net from client' AS net_from_client_bytes + , 'table fetch continued row' AS chain_fetch_cont_row + , 'chained rows skipped by cell' AS chain_rows_skipped + , 'chained rows processed by cell' AS chain_rows_processed + , 'chained rows rejected by cell' AS chain_rows_rejected + ) + ) + ), + precalc AS ( + SELECT + inst_id + , sid + , (phyrd_bytes) db_physrd_BYTES + , (phywr_bytes) db_physwr_BYTES + , (phyrd_bytes+phywr_bytes) db_physio_BYTES + , pred_offloadable_bytes pred_offloadable_BYTES + , phyrd_optim_bytes phyrd_optim_BYTES + , (phyrd_optim_bytes-storidx_saved_bytes) phyrd_flash_rd_BYTES + , storidx_saved_bytes phyrd_storidx_saved_BYTES + , (phyrd_bytes-phyrd_optim_bytes) spin_disk_rd_BYTES + , (phyrd_bytes-phyrd_optim_bytes+(phywr_bytes*lv_asm_mirrors)) spin_disk_io_BYTES + , uncompressed_bytes scanned_uncomp_BYTES + , interconnect_bytes total_ic_BYTES + , smart_scan_ret_bytes smart_scan_ret_BYTES + , (interconnect_bytes-smart_scan_ret_bytes) non_smart_scan_BYTES + , (cell_proc_cache_blk * lv_blocksize) cell_proc_cache_BYTES + , (cell_proc_txn_blk * lv_blocksize) cell_proc_txn_BYTES + , (cell_proc_data_blk * lv_blocksize) cell_proc_data_BYTES + , (cell_proc_index_blk * lv_blocksize) cell_proc_index_BYTES + , (curr_gets_cache_blk * lv_blocksize) curr_gets_cache_BYTES + , (cons_gets_cache_blk * lv_blocksize) cons_gets_cache_BYTES + , (curr_gets_direct_blk * lv_blocksize) curr_gets_direct_BYTES + , (cons_gets_direct_blk * lv_blocksize) cons_gets_direct_BYTES + , cell_bal_cpu_bytes cell_bal_cpu_BYTES + , net_to_client_bytes net_to_client_BYTES + , net_from_client_bytes net_from_client_BYTES + , chain_fetch_cont_row + , chain_rows_skipped + , chain_rows_processed + , chain_rows_rejected + , (chain_rows_skipped * lv_blocksize) chain_blocks_skipped + , (chain_rows_processed * lv_blocksize) chain_blocks_processed + , (chain_rows_rejected * lv_blocksize) chain_blocks_rejected + FROM sq + ), + precalc2 AS ( + SELECT + inst_id + , sid + , db_physio_BYTES + , db_physrd_BYTES + , db_physwr_BYTES + , pred_offloadable_BYTES + , phyrd_optim_BYTES + , phyrd_flash_rd_BYTES + spin_disk_rd_BYTES phyrd_disk_and_flash_BYTES + , phyrd_flash_rd_BYTES + , phyrd_storidx_saved_BYTES + , spin_disk_io_BYTES + , spin_disk_rd_BYTES + , ((spin_disk_io_BYTES - spin_disk_rd_BYTES)) AS spin_disk_wr_BYTES + , scanned_uncomp_BYTES + , ROUND((scanned_uncomp_BYTES/NULLIF(phyrd_flash_rd_BYTES+spin_disk_rd_BYTES, 0))*db_physrd_BYTES) est_full_uncomp_BYTES + , total_ic_BYTES + , smart_scan_ret_BYTES + , non_smart_scan_BYTES + , cell_proc_cache_BYTES + , cell_proc_txn_BYTES + , cell_proc_data_BYTES + , cell_proc_index_BYTES + , cell_bal_cpu_BYTES + , curr_gets_cache_BYTES + , cons_gets_cache_BYTES + , curr_gets_direct_BYTES + , cons_gets_direct_BYTES + , net_to_client_BYTES + , net_from_client_BYTES + , chain_fetch_cont_row + , chain_rows_skipped + , chain_rows_processed + , chain_rows_rejected + , chain_blocks_skipped + , chain_blocks_processed + , chain_blocks_rejected + FROM + precalc + ), + unpivoted AS ( + SELECT * FROM precalc2 + UNPIVOT ( + BYTES + FOR metric + IN ( + phyrd_optim_BYTES + , phyrd_disk_and_flash_BYTES + , phyrd_flash_rd_BYTES + , phyrd_storidx_saved_BYTES + , spin_disk_rd_BYTES + , spin_disk_wr_BYTES + , spin_disk_io_BYTES + , db_physrd_BYTES + , db_physwr_BYTES + , db_physio_BYTES + , scanned_uncomp_BYTES + , est_full_uncomp_BYTES + , non_smart_scan_BYTES + , smart_scan_ret_BYTES + , total_ic_BYTES + , pred_offloadable_BYTES + , cell_proc_cache_BYTES + , cell_proc_txn_BYTES + , cell_proc_data_BYTES + , cell_proc_index_BYTES + , cell_bal_cpu_BYTES + , curr_gets_cache_BYTES + , cons_gets_cache_BYTES + , curr_gets_direct_BYTES + , cons_gets_direct_BYTES + , net_to_client_BYTES + , net_from_client_BYTES + , chain_fetch_cont_row + , chain_rows_skipped + , chain_rows_processed + , chain_rows_rejected + , chain_blocks_skipped + , chain_blocks_processed + , chain_blocks_rejected + ) + ) + ), + metric AS ( + SELECT 'BASIC' type, 'DB_LAYER_IO' category, 'DB_PHYSIO_BYTES' name FROM dual UNION ALL + SELECT 'BASIC', 'DB_LAYER_IO', 'DB_PHYSRD_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'DB_LAYER_IO', 'DB_PHYSWR_BYTES' FROM dual UNION ALL + SELECT 'ADVANCED', 'AVOID_DISK_IO', 'PHYRD_OPTIM_BYTES' FROM dual UNION ALL + SELECT 'ADVANCED', 'AVOID_DISK_IO', 'PHYRD_DISK_AND_FLASH_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'AVOID_DISK_IO', 'PHYRD_FLASH_RD_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'AVOID_DISK_IO', 'PHYRD_STORIDX_SAVED_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'REAL_DISK_IO', 'SPIN_DISK_IO_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'REAL_DISK_IO', 'SPIN_DISK_RD_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'REAL_DISK_IO', 'SPIN_DISK_WR_BYTES' FROM dual UNION ALL + SELECT 'ADVANCED', 'COMPRESS', 'SCANNED_UNCOMP_BYTES' FROM dual UNION ALL + SELECT 'ADVANCED', 'COMPRESS', 'EST_FULL_UNCOMP_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'REDUCE_INTERCONNECT', 'PRED_OFFLOADABLE_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'REDUCE_INTERCONNECT', 'TOTAL_IC_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'REDUCE_INTERCONNECT', 'SMART_SCAN_RET_BYTES' FROM dual UNION ALL + SELECT 'BASIC', 'REDUCE_INTERCONNECT', 'NON_SMART_SCAN_BYTES' FROM dual UNION ALL + SELECT 'ADVANCED', 'CELL_PROC_DEPTH', 'CELL_PROC_CACHE_BYTES' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'CELL_PROC_DEPTH', 'CELL_PROC_TXN_BYTES' FROM DUAL UNION ALL + SELECT 'BASIC', 'CELL_PROC_DEPTH', 'CELL_PROC_DATA_BYTES' FROM DUAL UNION ALL + SELECT 'BASIC', 'CELL_PROC_DEPTH', 'CELL_PROC_INDEX_BYTES' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'CELL_PROC_DEPTH', 'CELL_BAL_CPU_BYTES' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'IN_DB_PROCESSING', 'CURR_GETS_CACHE_BYTES' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'IN_DB_PROCESSING', 'CONS_GETS_CACHE_BYTES' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'IN_DB_PROCESSING', 'CURR_GETS_DIRECT_BYTES' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'IN_DB_PROCESSING', 'CONS_GETS_DIRECT_BYTES' FROM DUAL UNION ALL + SELECT 'BASIC', 'CLIENT_COMMUNICATION', 'NET_TO_CLIENT_BYTES' FROM DUAL UNION ALL + SELECT 'BASIC', 'CLIENT_COMMUNICATION', 'NET_FROM_CLIENT_BYTES' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_FETCH_CONT_ROW' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_ROWS_SKIPPED' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_ROWS_PROCESSED' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_ROWS_REJECTED' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_BLOCKS_SKIPPED' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_BLOCKS_PROCESSED' FROM DUAL UNION ALL + SELECT 'ADVANCED', 'FALLBACK_TO_BLOCK_IO', 'CHAIN_BLOCKS_REJECTED' FROM DUAL + ) + SELECT + exastat_metrics_r ( + inst_id + , sid + , type + , category + , metric + , bytes + , bytes_sec + , seconds_in_snap + ) + BULK COLLECT INTO lv_m + FROM ( + SELECT + inst_id + , sid + , type + , category + , metric + , bytes + , BYTES / (SELECT snap_seconds FROM stats WHERE rownum = 1) bytes_sec + , (SELECT snap_seconds FROM stats WHERE rownum = 1) seconds_in_snap + FROM + unpivoted u + , metric m + WHERE + u.metric = m.name + ) + ; + + RETURN lv_m; + + END get_delta_metrics; + + FUNCTION gen_lookuptab(p_metrics IN exastat_metrics_t) RETURN m_lookuptab_t IS + lv_m m_lookuptab_t; + lv_m_id VARCHAR2(100); + BEGIN + FOR i IN 1 .. p_metrics.COUNT LOOP + lv_m_id := TRIM(TO_CHAR(p_metrics(i).inst_id))||',' + || TRIM(TO_CHAR(p_metrics(i).sid ))||',' + || TRIM( p_metrics(i).name ); + lv_m(lv_m_id) := p_metrics(i); + END LOOP; + RETURN lv_m; + END; + + FUNCTION display_snap(p_begin_snap IN NUMBER DEFAULT NULL, p_end_snap IN NUMBER DEFAULT NULL, p_detail IN VARCHAR2 DEFAULT 'BASIC' ) RETURN exastat_result_t PIPELINED IS + ml m_lookuptab_t; + m exastat_metrics_t; + str VARCHAR2(200); + max_bytes NUMBER; + BEGIN + ml := gen_lookuptab(get_delta_metrics(p_begin_snap, p_end_snap)); + m := get_delta_metrics(p_begin_snap, p_end_snap); + + SELECT MAX(delta_value) INTO max_bytes FROM TABLE(CAST(m AS exastat_metrics_t)) WHERE type LIKE p_detail; + + str := '-- ExaSnapper v0.81 BETA by Tanel Poder @ Enkitec - The Exadata Experts ( http://www.enkitec.com )'; + PIPE ROW(exastat_result_r(str)); + str := LPAD('-',153,'-'); + PIPE ROW(exastat_result_r(str)); + + FOR i IN 1..m.COUNT LOOP + IF m(i).type LIKE p_detail THEN + str := RPAD(m(i).category, 30)||' '||RPAD(m(i).name, 30)||'|'|| RPAD(NVL(RPAD('#', ROUND(m(i).delta_value / NULLIF(max_bytes , 0) * 50 ), '#'), ' '), 50, ' ')||'|'; + str := str || LPAD(ROUND(m(i).delta_value/1048576), 15) ||' MB'; + str := str || LPAD(ROUND(m(i).delta_value_per_sec/1048576), 15) ||' MB/sec'; + PIPE ROW(exastat_result_r(str)); + END IF; + END LOOP; + END display_snap; + + FUNCTION get_sid(p_sid IN VARCHAR2, p_interval IN NUMBER DEFAULT 5) RETURN exastat_metrics_t IS + lv_begin NUMBER; + lv_end NUMBER; + BEGIN + lv_begin := BEGIN_SNAP(p_sid); + DBMS_LOCK.SLEEP(p_interval); + lv_end := END_SNAP(p_sid); + RETURN get_delta_metrics(lv_begin, lv_end); + END get_sid; + + FUNCTION display_sid(p_sid IN VARCHAR2, p_interval IN NUMBER DEFAULT 5, p_detail IN VARCHAR2 DEFAULT 'BASIC') RETURN exastat_result_t PIPELINED IS + m exastat_metrics_t; + str VARCHAR2(200); + max_bytes NUMBER; + BEGIN + m := get_sid(p_sid, p_interval); + + SELECT MAX(delta_value) INTO max_bytes FROM TABLE(CAST(m AS exastat_metrics_t)) WHERE type LIKE p_detail; + + str := '-- ExaSnapper v0.81 BETA by Tanel Poder @ Enkitec - The Exadata Experts ( http://www.enkitec.com )'; + PIPE ROW(exastat_result_r(str)); + str := LPAD('-',153,'-'); + PIPE ROW(exastat_result_r(str)); + + FOR i IN 1..m.COUNT LOOP + IF m(i).type LIKE p_detail THEN + str := RPAD(m(i).category, 30)||' '||RPAD(m(i).name, 30)||'|'|| RPAD(NVL(RPAD('#', ROUND(m(i).delta_value / NULLIF(max_bytes , 0) * 50 ), '#'), ' '), 50, ' ')||'|'; + str := str || LPAD(ROUND(m(i).delta_value/1048576), 15) ||' MB'; + str := str || LPAD(ROUND(m(i).delta_value_per_sec/1048576), 15) ||' MB/sec'; + PIPE ROW(exastat_result_r(str)); + END IF; + END LOOP; + END display_sid; + + -- experimental. set arraysize 64. TODO requires in-mem sampling + FUNCTION monitor_sid(p_sid IN VARCHAR2, p_interval IN NUMBER DEFAULT 5, p_detail IN VARCHAR2 DEFAULT 'BASIC') RETURN exastat_result_t PIPELINED IS + BEGIN + WHILE TRUE LOOP + FOR c IN 1..30 LOOP PIPE ROW (exastat_result_r('')); END LOOP; + PIPE ROW (exastat_result_r('INST='||SYS_CONTEXT('userenv', 'instance_name')||' TIME='||TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'))); + FOR r IN (SELECT name FROM TABLE(display_sid(p_sid, p_interval, p_detail))) LOOP + PIPE ROW(exastat_result_r(r.name)); + END LOOP; + END LOOP; + + END monitor_sid; + +END exasnap; +/ + +SHOW ERR; + diff --git a/tpt/exadata/exastat.py b/tpt/exadata/exastat.py new file mode 100644 index 0000000..cb5d106 --- /dev/null +++ b/tpt/exadata/exastat.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python +################################################################################ +## +## File name: exastat.py (v1.0) +## Purpose: Show cumulative exadata metrics from CELLCLI and their deltas +## in multicolumn format +## +## Author: Tanel Poder ( tanel@tanelpoder.com | @tanelpoder | blog.tanelpoder.com ) +## Copyright: Tanel Poder. All Rights Reserved. +## +## Usage: Save LIST METRICHISTORY into a file or pipe directly to exastat +## +## Example: cellcli -e "LIST METRICHISTORY WHERE name LIKE 'FL_.*' AND collectionTime > '"`date --date \ +## '1 day ago' "+%Y-%m-%dT%H:%M:%S%:z"`"'" | ./exastat FL_DISK_FIRST FL_FLASH_FIRST +## +## The above example lists you two metrics FL_DISK_FIRST and FL_FLASH_FIRST in columnar format +## You can list any number of metrics (you're not restricted to only two) +## +## +################################################################################ + +import fileinput, re, datetime, time, sys + +DEBUG=False + +rawmetrics = {} # main metric array +errors = [] # unparsable lines +timestamps = [] + +cell_pattern = re.compile(r"^\s*(?P\w+)\s+(?P\w+)\s+(?P[\w,]+)\s(?P.*)\s+(?P.{25})$") + +def extract_metric_value(s, pattern): + match = pattern.match(s) + + if match: + name = match.group("name").strip() + obj = match.group("obj").strip() + value = int(match.group("value").strip().replace(',','')) + unit = match.group("unit").strip() + timestamp = datetime.datetime.fromtimestamp(time.mktime(time.strptime(match.group("timestamp").strip()[:-6], "%Y-%m-%dT%H:%M:%S"))) + + return {"METRIC_NAME":name, "METRIC_OBJECT":obj, "METRIC_VALUE":value, "METRIC_UNIT":unit, "TIMESTAMP":timestamp} + +def get_timestamps(m): + t = [] + for i in (key for key in sorted(m.keys(), key=lambda x: x[1])): + if not t.__contains__(i[1]): + t.append( i[1] ) + return t + +def get_ordered_metric_values(m, metric_name): + r = [] + for i in (key for key in sorted(m.keys(), key=lambda x: x[1]) if key[0]==metric_name): + if DEBUG: print "key = %s value = %s" % (i, m[i]) + r.append({ "METRIC_NAME":i[0], "TIMESTAMP":i[1], "METRIC_OBJECT":i[2], "METRIC_VALUE":m[i]["METRIC_VALUE"], "METRIC_UNIT":m[i]["METRIC_UNIT"] }) + return r + +def get_delta_metric_values(m, metric_name): + r = {} + prev_metric_value = None + # requires ordered input + for i in (key for key in (get_ordered_metric_values(m, metric_name))): + if prev_metric_value: + if DEBUG: print "%s delta %s = %s (%s - %s)" % ( i["TIMESTAMP"], i["METRIC_NAME"], i["METRIC_VALUE"] - prev_metric_value, i["METRIC_VALUE"], prev_metric_value ) + r[i["TIMESTAMP"]] = ( i["TIMESTAMP"], i["METRIC_NAME"], i["METRIC_VALUE"] - prev_metric_value, i["METRIC_VALUE"], prev_metric_value ) + prev_metric_value = i["METRIC_VALUE"] + else: + prev_metric_value = i["METRIC_VALUE"] + return r + +# main() +metric_list = sys.argv[1:] + +for line in sys.stdin.readlines(): + e = extract_metric_value(line, cell_pattern) + if e: + if e["METRIC_NAME"] in metric_list: + rawmetrics[e["METRIC_NAME"], e["TIMESTAMP"], e["METRIC_OBJECT"]] = { "METRIC_VALUE":e["METRIC_VALUE"], "METRIC_UNIT":e["METRIC_UNIT"] } + else: + errors.append(line) + +if DEBUG: print "len(rawmetrics) = %s len(errors) = %s" % (len(rawmetrics), len(errors)) + + +m = {} +for mn in metric_list: + m[mn] = get_delta_metric_values(rawmetrics, mn) + +timestamps = get_timestamps(rawmetrics) +if DEBUG: print timestamps.pop(0) # 0-th sample doesn't have delta + +output_header = ("%-26s %10s" % ("TIMESTAMP", "SECONDS")) +output_separator = "%-26s %10s" % ("-" * 26, "-" * 10) + +for x in metric_list: + output_header += ("%" + str(len(x)+1) +"s") % x + output_separator += ' ' + '-' * len(x) + +print "" +print output_header +print output_separator + +prev_ts = None +for ts in iter(timestamps): + if prev_ts: + out = "%-26s %10s" % (ts, (ts - prev_ts).seconds) + prev_ts = ts + else: + out = "%-26s %10s" % (ts, "") + prev_ts = ts + + for mn in metric_list: + if ts in m[mn]: + v = m[mn][ts][2] + else: + v = 0 + + out += (" %"+str(len(mn)) +"d") % v + + print out + +print "" + diff --git a/tpt/exadata/exatest.sql b/tpt/exadata/exatest.sql new file mode 100644 index 0000000..2ade84e --- /dev/null +++ b/tpt/exadata/exatest.sql @@ -0,0 +1,68 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TYPE mystats_t; +DROP TYPE mystats_r; +DROP PACKAGE exatest; +DROP TYPE mystats_t; + +CREATE OR REPLACE VIEW mys AS +SELECT sn.name, my.value +FROM v$statname sn, v$mystat my +WHERE sn.statistic# = my.statistic# +/ + +CREATE OR REPLACE TYPE mystats_r AS OBJECT (name VARCHAR2(64), value NUMBER); +/ + +CREATE OR REPLACE TYPE mystats_t AS TABLE OF mystats_r +/ + +-- DROP PACKAGE exatest; +CREATE OR REPLACE PACKAGE exatest AS + PROCEDURE snap; + FUNCTION diff(filter IN VARCHAR2 DEFAULT NULL) RETURN mystats_t PIPELINED; + stats mystats_t; +END; +/ + +CREATE OR REPLACE PACKAGE BODY exatest AS + + prev_stats mystats_t; + + PROCEDURE SNAP AS + BEGIN + prev_stats := exatest.stats; + SELECT mystats_r(name,value) BULK COLLECT INTO exatest.stats FROM mys; + END snap; + + FUNCTION diff(filter IN VARCHAR2 DEFAULT NULL) RETURN mystats_t PIPELINED AS + BEGIN + snap; + FOR i IN (SELECT + now.name + , now.value - prev.value diff + FROM + TABLE(CAST(exatest.stats AS mystats_t)) now + , TABLE(CAST(prev_stats AS mystats_t)) prev + WHERE prev.name = now.name + ) LOOP + IF FILTER IS NULL THEN + IF i.diff != 0 THEN + PIPE ROW (mystats_r(i.name,i.diff)); + END IF; + ELSE + IF REGEXP_LIKE(i.name, filter, 'i') THEN + PIPE ROW (mystats_r(i.name,i.diff)); + END IF; + END IF; -- if filter is null + END LOOP; + END diff; + +BEGIN + snap; +END; +/ +SHOW ERR + + diff --git a/tpt/exadata/hcc_cu_size.sql b/tpt/exadata/hcc_cu_size.sql new file mode 100644 index 0000000..90c0b12 --- /dev/null +++ b/tpt/exadata/hcc_cu_size.sql @@ -0,0 +1,45 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- small tables + +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_query_low'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_query_high'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_archive_low'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_archive_high'; EXCEPTION WHEN OTHERS THEN NULL; +-- +-- CREATE TABLE t_hcc_query_low COMPRESS FOR QUERY LOW AS SELECT * FROM dba_source; +-- CREATE TABLE t_hcc_query_high COMPRESS FOR QUERY HIGH AS SELECT * FROM dba_source; +-- CREATE TABLE t_hcc_archive_low COMPRESS FOR ARCHIVE LOW AS SELECT * FROM dba_source; +-- CREATE TABLE t_hcc_archive_high COMPRESS FOR ARCHIVE HIGH AS SELECT * FROM dba_source; + +-- large tables + +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_query_low'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_query_high'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_archive_low'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_archive_high'; EXCEPTION WHEN OTHERS THEN NULL; +-- +-- CREATE TABLE t_hcc_query_low COMPRESS FOR QUERY LOW AS SELECT * FROM dba_objects, (SELECT 'x' text FROM dual CONNECT BY LEVEL <=10); +-- CREATE TABLE t_hcc_query_high COMPRESS FOR QUERY HIGH AS SELECT * FROM dba_objects, (SELECT 'x' text FROM dual CONNECT BY LEVEL <=10); +-- CREATE TABLE t_hcc_archive_low COMPRESS FOR ARCHIVE LOW AS SELECT * FROM dba_objects, (SELECT 'x' text FROM dual CONNECT BY LEVEL <=10); +-- CREATE TABLE t_hcc_archive_high COMPRESS FOR ARCHIVE HIGH AS SELECT * FROM dba_objects, (SELECT 'x' text FROM dual CONNECT BY LEVEL <=10); + +EXEC exatest.snap + +SELECT SUM(LENGTH(text)) query_low FROM t_hcc_query_low; +SELECT * FROM TABLE(exatest.diff('EHCC.*')); +--SELECT * FROM TABLE(exatest.diff('EHCC CUs Decompressed|EHCC.*Length Decompressed')); + +SELECT SUM(LENGTH(text)) query_high FROM t_hcc_query_high; +SELECT * FROM TABLE(exatest.diff('EHCC.*')); +--SELECT * FROM TABLE(exatest.diff('EHCC CUs Decompressed|EHCC.*Length Decompressed')); + +SELECT SUM(LENGTH(text)) archive_low FROM t_hcc_archive_low; +SELECT * FROM TABLE(exatest.diff('EHCC.*')); +--SELECT * FROM TABLE(exatest.diff('EHCC CUs Decompressed|EHCC.*Length Decompressed')); + +SELECT SUM(LENGTH(text)) archive_high FROM t_hcc_archive_high; +SELECT * FROM TABLE(exatest.diff('EHCC.*')); +--SELECT * FROM TABLE(exatest.diff('EHCC CUs Decompressed|EHCC.*Length Decompressed')); + diff --git a/tpt/exadata/hcc_cu_size_cellstats.sql b/tpt/exadata/hcc_cu_size_cellstats.sql new file mode 100644 index 0000000..f0cad7f --- /dev/null +++ b/tpt/exadata/hcc_cu_size_cellstats.sql @@ -0,0 +1,45 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- small tables + +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_query_low'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_query_high'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_archive_low'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_archive_high'; EXCEPTION WHEN OTHERS THEN NULL; +-- +-- CREATE TABLE t_hcc_query_low COMPRESS FOR QUERY LOW AS SELECT * FROM dba_source; +-- CREATE TABLE t_hcc_query_high COMPRESS FOR QUERY HIGH AS SELECT * FROM dba_source; +-- CREATE TABLE t_hcc_archive_low COMPRESS FOR ARCHIVE LOW AS SELECT * FROM dba_source; +-- CREATE TABLE t_hcc_archive_high COMPRESS FOR ARCHIVE HIGH AS SELECT * FROM dba_source; + +-- large tables + +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_query_low'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_query_high'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_archive_low'; EXCEPTION WHEN OTHERS THEN NULL; +-- EXEC EXECUTE IMMEDIATE 'drop table t_hcc_archive_high'; EXCEPTION WHEN OTHERS THEN NULL; +-- +-- CREATE TABLE t_hcc_query_low COMPRESS FOR QUERY LOW AS SELECT * FROM dba_objects, (SELECT 'x' text FROM dual CONNECT BY LEVEL <=10); +-- CREATE TABLE t_hcc_query_high COMPRESS FOR QUERY HIGH AS SELECT * FROM dba_objects, (SELECT 'x' text FROM dual CONNECT BY LEVEL <=10); +-- CREATE TABLE t_hcc_archive_low COMPRESS FOR ARCHIVE LOW AS SELECT * FROM dba_objects, (SELECT 'x' text FROM dual CONNECT BY LEVEL <=10); +-- CREATE TABLE t_hcc_archive_high COMPRESS FOR ARCHIVE HIGH AS SELECT * FROM dba_objects, (SELECT 'x' text FROM dual CONNECT BY LEVEL <=10); + +EXEC exatest.snap + +SELECT SUM(LENGTH(text)) query_low FROM t_hcc_query_low WHERE owner LIKE '%S%'; +SELECT * FROM TABLE(exatest.diff('cell.*')); +--SELECT * FROM TABLE(exatest.diff('EHCC CUs Decompressed|EHCC.*Length Decompressed')); + +SELECT SUM(LENGTH(text)) query_high FROM t_hcc_query_high WHERE owner LIKE '%S%'; +SELECT * FROM TABLE(exatest.diff('cell.*')); +--SELECT * FROM TABLE(exatest.diff('EHCC CUs Decompressed|EHCC.*Length Decompressed')); + +SELECT SUM(LENGTH(text)) archive_low FROM t_hcc_archive_low WHERE owner LIKE '%S%'; +SELECT * FROM TABLE(exatest.diff('cell.*')); +--SELECT * FROM TABLE(exatest.diff('EHCC CUs Decompressed|EHCC.*Length Decompressed')); + +SELECT SUM(LENGTH(text)) archive_high FROM t_hcc_archive_high WHERE owner LIKE '%S%'; +SELECT * FROM TABLE(exatest.diff('cell.*')); +--SELECT * FROM TABLE(exatest.diff('EHCC CUs Decompressed|EHCC.*Length Decompressed')); + diff --git a/tpt/exadata/in_memory_px_test.sql b/tpt/exadata/in_memory_px_test.sql new file mode 100644 index 0000000..4e16dba --- /dev/null +++ b/tpt/exadata/in_memory_px_test.sql @@ -0,0 +1,38 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE test_impx; +CREATE TABLE test_impx ( + id NUMBER NOT NULL + , owner VARCHAR2(30) + , object_name VARCHAR2(128) + , subobject_name VARCHAR2(30) + , object_id NUMBER + , data_object_id NUMBER + , object_type VARCHAR2(19) + , created DATE + , last_ddl_time DATE + , timestamp VARCHAR2(19) + , status VARCHAR2(7) + , temporary VARCHAR2(1) + , generated VARCHAR2(1) + , secondary VARCHAR2(1) + , namespace NUMBER + , edition_name VARCHAR2(30) +) +PARTITION BY RANGE (id) ( + PARTITION id_05m VALUES LESS THAN (6000000) + , PARTITION id_09m VALUES LESS THAN (MAXVALUE) +) +/ + +INSERT + /*+ APPEND */ INTO test_impx +SELECT + ROWNUM id, t.* +FROM + dba_objects t + , (SELECT 1 FROM dual CONNECT BY LEVEL <= 100) u -- cartesian join for generating lots of rows +/ + +@gts test_impx diff --git a/tpt/exadata/io_optimized_sql.sql b/tpt/exadata/io_optimized_sql.sql new file mode 100644 index 0000000..d21d566 --- /dev/null +++ b/tpt/exadata/io_optimized_sql.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM ( +SELECT + sql_id + , executions + , px_servers_executions px_execs + , physical_read_requests phyrd_rq + , ROUND(physical_read_bytes/1048576) physrd_mb + , ROUND((physical_read_bytes / physical_read_requests) / 1024) avg_read_kb + , optimized_phy_read_requests opt_phyrd_rq + , ROUND(((physical_read_bytes / physical_read_requests) * optimized_phy_read_requests) / 1048576) est_optim_mb + , ROUND(optimized_phy_read_requests / physical_read_requests * 100) opt_rq_pct +FROM + v$sql +WHERE + optimized_phy_read_requests > 0 +ORDER BY + optimized_phy_read_requests DESC +) +WHERE + rownum <= 20 +/ + diff --git a/tpt/exadata/ioeff.sql b/tpt/exadata/ioeff.sql new file mode 100644 index 0000000..eaba4fa --- /dev/null +++ b/tpt/exadata/ioeff.sql @@ -0,0 +1,160 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ioeff.sql +-- Purpose: Display various Exadata IO efficiency metrics +-- from all Exadata RAC cluster nodes +-- +-- Author: Tanel Poder +-- Copyright: (c) 2012 http://blog.tanelpoder.com +-- +-- Usage: Run ioeff.sql +-- +-- Other: This is still a raw experimental script and doesn't do a good +-- job with explaining these metrics well yet +-- +-------------------------------------------------------------------------------- + +SET LINES 999 PAGES 5000 TRIMOUT ON TRIMSPOOL ON TAB OFF + +COL ioeff_percentage FOR A52 +BREAK ON inst_id SKIP 1 + +WITH sq AS ( + SELECT + * + FROM ( + SELECT inst_id, name, value + FROM gv$sysstat + WHERE + name LIKE 'cell%bytes%' + OR name LIKE 'physical%bytes%' + ) + PIVOT ( + SUM(value) + FOR name IN ( + 'physical read total bytes' AS phyrd_bytes + , 'physical write total bytes' AS phywr_bytes + , 'physical read total bytes optimized' AS phyrd_optim_bytes + , 'cell physical IO bytes eligible for predicate offload' AS pred_offload_bytes + , 'cell physical IO interconnect bytes' AS interconnect_bytes + , 'cell physical IO interconnect bytes returned by smart scan' AS smart_scan_ret_bytes + , 'cell physical IO bytes saved by storage index' AS storidx_saved_bytes + , 'cell IO uncompressed bytes' AS uncompressed_bytes + ) + ) +), +precalc AS ( + SELECT + inst_id + , ROUND((phyrd_bytes)/(1024*1024*1024)) db_physrd_gb + , ROUND((phywr_bytes)/(1024*1024*1024)) db_physwr_gb + , ROUND((phyrd_bytes+phywr_bytes)/(1024*1024*1024)) db_physio_gb + , ROUND(pred_offload_bytes/(1024*1024*1024)) pred_offload_gb + , ROUND(phyrd_optim_bytes/(1024*1024*1024)) phyrd_optim_gb + , ROUND((phyrd_optim_bytes-storidx_saved_bytes)/(1024*1024*1024)) phyrd_flash_rd_gb + , ROUND((phyrd_bytes-phyrd_optim_bytes)/(1024*1024*1024)) spin_disk_rd_gb + , ROUND((phyrd_bytes+phywr_bytes-phyrd_optim_bytes)/(1024*1024*1024)) spin_disk_io_gb + , ROUND(uncompressed_bytes/(1024*1024*1024)) scanned_uncomp_gb + , ROUND(interconnect_bytes/(1024*1024*1024)) total_ic_gb + , ROUND(smart_scan_ret_bytes/(1024*1024*1024)) smart_scan_gb + , ROUND((interconnect_bytes-smart_scan_ret_bytes)/(1024*1024*1024)) non_smart_scan_gb + FROM sq +), +precalc2 AS ( + SELECT + inst_id + , db_physio_gb + , db_physrd_gb + , db_physwr_gb + , pred_offload_gb + , phyrd_optim_gb + , phyrd_flash_rd_gb + spin_disk_rd_gb phyrd_disk_and_flash_gb + , phyrd_flash_rd_gb + , spin_disk_io_gb + , spin_disk_rd_gb + , spin_disk_io_gb - spin_disk_rd_gb AS spin_disk_wr_gb + , scanned_uncomp_gb + , ROUND((scanned_uncomp_gb/spin_disk_rd_gb)*db_physrd_gb) est_full_uncomp_gb + , total_ic_gb + , smart_scan_gb + , non_smart_scan_gb + FROM + precalc +), +--SELECT +-- inst_id +-- , SUM(db_physio_gb) +-- , SUM(db_physrd_gb) +-- , SUM(db_physwr_gb) +-- , SUM(pred_offload_gb) +-- , SUM(phyrd_optim_gb) +-- , SUM(spin_disk_io_gb) +-- , SUM(spin_disk_rd_gb) +-- , SUM(spin_disk_io_gb - spin_disk_rd_gb) AS spin_disk_wr_gb +-- , SUM(scanned_uncomp_gb) +-- , ROUND(SUM((scanned_uncomp_gb/spin_disk_rd_gb)*db_physrd_gb)) AS est_full_uncomp_gb +-- , SUM(total_ic_gb) +-- , SUM(smart_scan_gb) +-- , SUM(non_smart_scan_gb) +--FROM +-- precalc2 +--GROUP BY ROLLUP +-- (inst_id) +--/ +unpivoted AS ( + SELECT * FROM precalc2 + UNPIVOT ( + gb + FOR metric + IN ( + phyrd_optim_gb + , phyrd_disk_and_flash_gb + , phyrd_flash_rd_gb + , scanned_uncomp_gb + , est_full_uncomp_gb + , non_smart_scan_gb + , smart_scan_gb + , total_ic_gb + , pred_offload_gb + , spin_disk_rd_gb + , spin_disk_wr_gb + , spin_disk_io_gb + , db_physrd_gb + , db_physwr_gb + , db_physio_gb + ) + ) +), +metric AS ( +SELECT 'ADVANCED' type, 'AVOID_DISK_IO' category, 'PHYRD_OPTIM_GB' name FROM dual UNION ALL +SELECT 'ADVANCED', 'AVOID_DISK_IO', 'PHYRD_DISK_AND_FLASH_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'AVOID_DISK_IO', 'PHYRD_FLASH_RD_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'COMPRESS', 'SCANNED_UNCOMP_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'COMPRESS', 'EST_FULL_UNCOMP_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'REDUCE_INTERCONNECT', 'TOTAL_IC_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'REDUCE_INTERCONNECT', 'NON_SMART_SCAN_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'REDUCE_INTERCONNECT', 'SMART_SCAN_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'REDUCE_INTERCONNECT', 'PRED_OFFLOAD_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'DISK_IO', 'SPIN_DISK_RD_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'DISK_IO', 'SPIN_DISK_WR_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'DISK_IO', 'SPIN_DISK_IO_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'DISK_IO', 'DB_PHYSRD_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'DISK_IO', 'DB_PHYSWR_GB' FROM dual UNION ALL +SELECT 'ADVANCED', 'DISK_IO', 'DB_PHYSIO_GB' FROM dual +) +SELECT + inst_id + , type + , category + , metric + , '|'||RPAD(NVL(RPAD('#', ROUND(gb / (SELECT MAX(GB) FROM unpivoted) * 50 ), '#'), ' '), 50, ' ')||'|' ioeff_percentage + , gb +FROM + unpivoted u + , metric m +WHERE + u.metric = m.name +/ diff --git a/tpt/exadata/make_all_indexes_invisible.sql b/tpt/exadata/make_all_indexes_invisible.sql new file mode 100644 index 0000000..0fe9511 --- /dev/null +++ b/tpt/exadata/make_all_indexes_invisible.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DECLARE + cmd VARCHAR2(1000); +BEGIN + FOR i IN (SELECT owner,index_name FROM dba_indexes WHERE table_owner = '&1' AND table_owner NOT IN('SYS', 'SYSTEM') AND index_type NOT IN ('LOB', 'IOT - TOP')) LOOP + cmd := 'ALTER INDEX '||i.owner||'.'||i.index_name||' INVISIBLE'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; +END; +/ + diff --git a/tpt/exadata/make_all_indexes_visible.sql b/tpt/exadata/make_all_indexes_visible.sql new file mode 100644 index 0000000..61d18cc --- /dev/null +++ b/tpt/exadata/make_all_indexes_visible.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DECLARE + cmd VARCHAR2(1000); +BEGIN + FOR i IN (SELECT owner,index_name FROM dba_indexes WHERE table_owner = '&1' AND table_owner NOT IN('SYS', 'SYSTEM')) LOOP + cmd := 'ALTER INDEX '||i.owner||'.'||i.index_name||' VISIBLE'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; +END; +/ + diff --git a/tpt/exadata/mon_topsql.sql b/tpt/exadata/mon_topsql.sql new file mode 100644 index 0000000..5677397 --- /dev/null +++ b/tpt/exadata/mon_topsql.sql @@ -0,0 +1,152 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- File name: mon_topsql.sql (Daily TOP SQL reporting for Exadata) +-- +-- Purpose: This script can be used for getting an overview of your most +-- time-consuming SQL statements along with important IO and execution +-- count metrics needed for determining whether a query would +-- benefit from Exadata Smart Scanning features. +-- +-- Usage: Run @mon_topsql.sql +-- +-- There's a variable called "days" in the beggining of this script +-- which controls how many days worth of history to show. +-- +-- Author: Tanel Poder ( http://blog.tanelpoder.com | tanel@tanelpoder.com ) +-- +-- Copyright: (c) 2012 All Rights Reserved +-- +-- +-- Other: I recommend you to read through the script to understand what it's +-- doing and how it works. +-- +-------------------------------------------------------------------------------- + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +COL pct FOR A10 JUST RIGHT +COL cpu_pct FOR 999.9 +COL io_pct FOR 999.9 +COL topsql_owner FOR A30 +COL topsql_object_name FOR A30 +COL topsql_procedure_name FOR A30 + +BREAK ON day SKIP 1 + +DEF days=7 + +PROMPT Displaying daily top SQL for last &days days... + +WITH ash AS ( + SELECT + day + , owner + , object_name + , procedure_name + , sql_id + , sql_plan_hash_value + , total_seconds + , io_seconds + , cpu_seconds + , LPAD(TRIM(TO_CHAR(RATIO_TO_REPORT(total_seconds) OVER (PARTITION BY day) * 100, '999.9'))||'%', 10) pct + , RATIO_TO_REPORT(total_seconds) OVER (PARTITION BY day) * 100 pct_num + FROM ( + SELECT + TO_CHAR(sample_time, 'YYYY-MM-DD') day + , sql_id + , sql_plan_hash_value + , p.owner + , p.object_name + , p.procedure_name + , SUM(10) total_seconds + , SUM(CASE WHEN wait_class = 'User I/O' THEN 10 ELSE 0 END) io_seconds + , SUM(CASE WHEN wait_class IS NULL THEN 10 ELSE 0 END) cpu_seconds + FROM + dba_hist_active_sess_history a + , dba_procedures p + WHERE + a.plsql_entry_object_id = p.object_id (+) + AND a.plsql_entry_subprogram_id = p.subprogram_id (+) + AND sample_time > SYSDATE - &days + AND session_type != 'BACKGROUND' -- ignore for now + GROUP BY + sql_id + , sql_plan_hash_value + , p.owner + , p.object_name + , p.procedure_name + , TO_CHAR(sample_time, 'YYYY-MM-DD') + ) +) +, sqlstat AS ( + SELECT /*+ MATERIALIZE */ + TO_CHAR(begin_interval_time, 'YYYY-MM-DD') day + , sql_id + , plan_hash_value + , SUM(executions_delta) executions + , SUM(rows_processed_delta) rows_processed + , SUM(disk_reads_delta) blocks_read + , SUM(disk_reads_delta)*8/1024 mb_read + , SUM(buffer_gets_delta) buffer_gets + , SUM(iowait_delta)/1000000 awr_iowait_seconds + , SUM(cpu_time_delta)/1000000 awr_cpu_seconds + , SUM(elapsed_time_delta)/1000000 awr_elapsed_seconds + FROM + dba_hist_snapshot + NATURAL JOIN + dba_hist_sqlstat + WHERE + begin_interval_time > SYSDATE - &days + GROUP BY + TO_CHAR(begin_interval_time, 'YYYY-MM-DD') + , sql_id + , plan_hash_value +) +SELECT /*+ MONITOR */ + day + , pct + , owner topsql_owner + , object_name topsql_object_name + , procedure_name topsql_procedure_name + , sql_id + , sql_plan_hash_value plan_hash + , ROUND(total_seconds / 3600,1) total_hours + , total_seconds + , executions + , ROUND(total_seconds / NULLIF(executions,0),2) seconds_per_exec + , io_pct + , cpu_pct + , mb_read + , ROUND(mb_read / NULLIF(executions,0),2) mb_per_exec + , buffer_gets + , ROUND(buffer_gets / NULLIF(executions,0),2) bufget_per_exec + , CASE WHEN sql_id IS NOT NULL THEN + 'SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('''||sql_id||''','||CASE WHEN sql_plan_hash_value = 0 THEN 'NULL' ELSE TO_CHAR(sql_plan_hash_value) END||', format=>''ADVANCED''));' + END extract_plan_from_awr +FROM ( + SELECT + day + , pct + , owner + , object_name + , procedure_name + , sql_id + , sql_plan_hash_value + , total_seconds + , io_seconds/total_seconds*100 io_pct + , cpu_seconds/total_seconds*100 cpu_pct + , (SELECT executions FROM sqlstat s WHERE ash.sql_id = s.sql_id AND ash.sql_plan_hash_value = s.plan_hash_value AND ash.day = s.day) executions + , (SELECT mb_read FROM sqlstat s WHERE ash.sql_id = s.sql_id AND ash.sql_plan_hash_value = s.plan_hash_value AND ash.day = s.day) mb_read + , (SELECT buffer_gets FROM sqlstat s WHERE ash.sql_id = s.sql_id AND ash.sql_plan_hash_value = s.plan_hash_value AND ash.day = s.day) buffer_gets + FROM + ash + WHERE + ash.pct_num >= 1 +) +ORDER BY + day DESC + , total_seconds DESC +/ + diff --git a/tpt/exadata/mon_topsql2.sql b/tpt/exadata/mon_topsql2.sql new file mode 100644 index 0000000..c0852e2 --- /dev/null +++ b/tpt/exadata/mon_topsql2.sql @@ -0,0 +1,151 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- mon_topsql.sql ver2 +-- added plan_hash_value support and ordered by descending date +-- script by Tanel Poder ( http://blog.tanelpoder.com ) + +SET LINES 999 PAGES 5000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +COL pct FOR A10 JUST RIGHT +COL cpu_pct FOR 999.9 +COL io_pct FOR 999.9 + +BREAK ON day SKIP 1 + +DEF days=7 +DEF weekdays="mon,tue,wed,thu,fri,sat,sun" +DEF separator="," + +WITH ash AS ( + SELECT + day + , weekday + , owner + , object_name + , procedure_name + , sql_id + , sql_plan_hash_value + , distinct_days + , total_seconds + , io_seconds + , cpu_seconds + , LPAD(TRIM(TO_CHAR(RATIO_TO_REPORT(total_seconds) OVER (PARTITION BY day) * 100, '999.9'))||'%', 10) pct + , RATIO_TO_REPORT(total_seconds) OVER (PARTITION BY day) * 100 pct_num + FROM ( + SELECT + TO_CHAR(sample_time, 'YYYY-MM-DD') day + , TO_CHAR(sample_time, 'Dy') weekday + , COUNT(DISTINCT TO_CHAR(sample_time, 'YYYY-MM-DD')) OVER (PARTITION BY sql_id) distinct_days + , sql_id + , sql_plan_hash_value + , p.owner + , p.object_name + , p.procedure_name + , SUM(10) total_seconds + , SUM(CASE WHEN wait_class = 'User I/O' THEN 10 ELSE 0 END) io_seconds + , SUM(CASE WHEN wait_class IS NULL THEN 10 ELSE 0 END) cpu_seconds + FROM + dba_hist_active_sess_history a + , dba_procedures p + WHERE + a.plsql_entry_object_id = p.object_id (+) + AND a.plsql_entry_subprogram_id = p.subprogram_id (+) + AND sample_time > SYSDATE - &days + AND session_type != 'BACKGROUND' -- ignore for now + AND LOWER(TO_CHAR(sample_time, 'Dy')) IN ( + SELECT + LOWER(REGEXP_REPLACE( + REGEXP_SUBSTR( '&weekdays'||'&separator', '(.*?)&separator', 1, LEVEL ) + , '&separator$' + , '' + )) TOKEN + FROM + DUAL + CONNECT BY + REGEXP_INSTR( '&weekdays'||'&separator', '(.*?)&separator', 1, LEVEL ) > 0 + ) + GROUP BY + sql_id + , sql_plan_hash_value + , p.owner + , p.object_name + , p.procedure_name + , TO_CHAR(sample_time, 'YYYY-MM-DD') + , TO_CHAR(sample_time, 'Dy') + ) +) +, sqlstat AS ( + SELECT + TO_CHAR(begin_interval_time, 'YYYY-MM-DD') day + , sql_id + , plan_hash_value + , SUM(executions_delta) executions + , SUM(rows_processed_delta) rows_processed + , SUM(disk_reads_delta) blocks_read + , SUM(disk_reads_delta)*8/1024 mb_read + , SUM(buffer_gets_delta) buffer_gets + , SUM(iowait_delta)/1000000 awr_iowait_seconds + , SUM(cpu_time_delta)/1000000 awr_cpu_seconds + , SUM(elapsed_time_delta)/1000000 awr_elapsed_seconds + FROM + dba_hist_snapshot + NATURAL JOIN + dba_hist_sqlstat + WHERE + begin_interval_time > SYSDATE - &days + GROUP BY + TO_CHAR(begin_interval_time, 'YYYY-MM-DD') + , sql_id + , plan_hash_value +) +SELECT + day + , weekday + , pct + , owner + , object_name + , procedure_name + , sql_id + , sql_plan_hash_value plan_hash + , distinct_days + , ROUND(total_seconds / 3600,1) total_hours + , total_seconds + , executions + , ROUND(total_seconds / NULLIF(executions,0),2) seconds_per_exec + , io_pct + , cpu_pct + , mb_read + , ROUND(mb_read / NULLIF(executions,0),2) mb_per_exec + , buffer_gets + , ROUND(buffer_gets / NULLIF(executions,0),2) bufget_per_exec + , CASE WHEN sql_id IS NOT NULL THEN + 'SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('''||sql_id||''','||CASE WHEN sql_plan_hash_value = 0 THEN 'NULL' ELSE TO_CHAR(sql_plan_hash_value) END||', format=>''ADVANCED''));' + END extract_plan_from_awr +FROM ( + SELECT + day + , weekday + , pct + , owner + , object_name + , procedure_name + , sql_id + , sql_plan_hash_value + , distinct_days + , total_seconds + , io_seconds/total_seconds*100 io_pct + , cpu_seconds/total_seconds*100 cpu_pct + , (SELECT executions FROM sqlstat s WHERE ash.sql_id = s.sql_id AND ash.sql_plan_hash_value = s.plan_hash_value AND ash.day = s.day) executions + , (SELECT mb_read FROM sqlstat s WHERE ash.sql_id = s.sql_id AND ash.sql_plan_hash_value = s.plan_hash_value AND ash.day = s.day) mb_read + , (SELECT buffer_gets FROM sqlstat s WHERE ash.sql_id = s.sql_id AND ash.sql_plan_hash_value = s.plan_hash_value AND ash.day = s.day) buffer_gets + FROM + ash + WHERE + ash.pct_num >= 1 +) +ORDER BY + day DESC + , total_seconds DESC +/ + diff --git a/tpt/exadata/nls_smart_scan.sql b/tpt/exadata/nls_smart_scan.sql new file mode 100644 index 0000000..17551f1 --- /dev/null +++ b/tpt/exadata/nls_smart_scan.sql @@ -0,0 +1,34 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET ECHO ON + +-- DROP TABLE t; +-- CREATE TABLE t AS SELECT a.* FROM dba_objects a, dba_objects b WHERE rownum <= 10000000; +-- EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'T'); + +SET TIMING ON + +SELECT /* test 1 */ SUM(LENGTH(owner)) FROM t WHERE owner > 'S'; +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); + +ALTER SESSION SET nls_comp = LINGUISTIC; +ALTER SESSION SET nls_sort = BINARY_CI; + +SELECT /* test 2 */ SUM(LENGTH(owner)) FROM t WHERE owner > 'S'; +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); + +-- ALTER SESSION SET "_cursor_plan_hash_version"=2; +-- +-- SELECT /* test 3 */ SUM(LENGTH(owner)) FROM t WHERE owner > 'S'; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); +-- +-- ALTER SESSION SET nls_comp = BINARY; +-- ALTER SESSION SET nls_sort = BINARY; +-- +-- SELECT /* test 4 */ SUM(LENGTH(owner)) FROM t WHERE owner > 'S'; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); + + +SET ECHO OFF + diff --git a/tpt/exadata/osw/oswextract.sh b/tpt/exadata/osw/oswextract.sh new file mode 100644 index 0000000..2cc1e98 --- /dev/null +++ b/tpt/exadata/osw/oswextract.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Name: oswextract.sh +# Purpose: Extract a specific metric from OS Watcher cellsrvstat archives +# +# Usage: +# ./oswetract.sh "cellsrv metric to grep for" osw_archive_files_of_interest*.dat.bz2 +# +# Example: +# ./oswextract.sh "Number of latency threshold warnings for redo log writes" \ +# cell01.example.com_cellsrvstat_11.05.25.*.dat.bz2 +# + +METRIC=$1 +shift +bzcat -q $* | + egrep "Current Time|$METRIC" | + awk ' +cell01.example.com_cellsrvstat_11.05.25.*.dat.bz2 + BEGIN + { printf("%-21s %20s %20s\n", "TIME", "CURRENT_VAL", "CUMULATIVE_VAL") } + /Current/ + { printf("%s %s %s %s", $3, $4, $5, $6, $7) } + /Number of latency threshold warnings for redo log writes/ + { printf("%20d %20d\n", $10, $11) } + ' +# end of script + diff --git a/tpt/exadata/runcellash.sh b/tpt/exadata/runcellash.sh new file mode 100644 index 0000000..c40f1e9 --- /dev/null +++ b/tpt/exadata/runcellash.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +./cellash.sh | cellcli > cellash.txt + diff --git a/tpt/exadata/smx.sql b/tpt/exadata/smx.sql new file mode 100644 index 0000000..dcf2fbd --- /dev/null +++ b/tpt/exadata/smx.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set echo on + +SELECT + ROUND(physical_read_bytes/1048576) phyrd_mb + , ROUND(io_interconnect_bytes/1048576) ret_mb + , (1-(io_interconnect_bytes / NULLIF(physical_read_bytes,0)))*100 "SAVING%" +FROM + v$sql +WHERE + sql_id = '9n2fg7abbcfyx' +AND child_number = 1; + + +SELECT + plan_line_id id + , LPAD(' ',plan_depth) || plan_operation + ||' '||plan_options||' ' + ||plan_object_name operation + , ROUND(SUM(physical_read_bytes) /1048576) phyrd_mb + , ROUND(SUM(io_interconnect_bytes) /1048576) ret_mb + , AVG(1-(io_interconnect_bytes / NULLIF(physical_read_bytes,0)))*100 "SAVING%" +FROM + v$sql_plan_monitor +WHERE + sql_id = '&1' +AND sql_exec_id = &2 +GROUP BY + plan_line_id + , LPAD(' ',plan_depth) || plan_operation + ||' '||plan_options||' ' + ||plan_object_name +ORDER BY + plan_line_id +/ + +set echo off + diff --git a/tpt/exadata/topsql.sql b/tpt/exadata/topsql.sql new file mode 100644 index 0000000..8d45fcc --- /dev/null +++ b/tpt/exadata/topsql.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM ( + SELECT + sql_id, executions, physical_read_bytes --, sql_text + FROM + v$sqlstats + WHERE io_cell_offload_eligible_bytes = 0 + ORDER BY physical_read_bytes DESC +) +WHERE + ROWNUM <= 10 +/ diff --git a/tpt/exadata/workload_index_control/setup_workload_index_control.sql b/tpt/exadata/workload_index_control/setup_workload_index_control.sql new file mode 100644 index 0000000..014f8fc --- /dev/null +++ b/tpt/exadata/workload_index_control/setup_workload_index_control.sql @@ -0,0 +1,96 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +DEF schemaname=SOE1000G + +GRANT SELECT ON sys.v_$session TO &schemaname; + +-- DROP TABLE &schemaname..workload_control; +-- DROP TRIGGER &schemaname..workload_control_trigger; + +CREATE TABLE &schemaname..workload_control ( + username VARCHAR2(100) DEFAULT ('*') NOT NULL + , service_name VARCHAR2(100) DEFAULT '*' NOT NULL + , module VARCHAR2(100) DEFAULT '*' NOT NULL + , action VARCHAR2(100) DEFAULT '*' NOT NULL + , program VARCHAR2(100) DEFAULT '*' NOT NULL + , client_machine VARCHAR2(100) DEFAULT '*' NOT NULL + , client_osuser VARCHAR2(100) DEFAULT '*' NOT NULL + , indexes_visible VARCHAR2(100) DEFAULT 'TRUE' + , force_serial_direct_read VARCHAR2(100) DEFAULT 'FALSE' + , CONSTRAINT pk_workload_control PRIMARY KEY (username, service_name, module, action, program, client_machine, client_osuser) + , CONSTRAINT ck1_workload_control CHECK (indexes_visible IN ('TRUE','FALSE')) + , CONSTRAINT ck2_workload_control CHECK (force_serial_direct_read IN ('TRUE', 'FALSE')) +); + +INSERT INTO &schemaname..workload_control (username, indexes_visible) VALUES ('&schemaname', 'TRUE'); +INSERT INTO &schemaname..workload_control (username, program, indexes_visible, force_serial_direct_read) + VALUES ('&schemaname', 'sqlplus@mac02.local (TNS V1-V3)', 'FALSE', 'TRUE'); +COMMIT; + +CREATE OR REPLACE TRIGGER &schemaname..workload_control_trigger + AFTER LOGON ON &schemaname..SCHEMA +DECLARE + c NUMBER; +BEGIN + -- set optimizer_use_invisible_indexes + FOR s IN (SELECT * FROM v$session WHERE sid = SYS_CONTEXT('userenv', 'sid')) + LOOP -- this loop returns only 1 row + SELECT COUNT(*) INTO c + FROM &schemaname..workload_control ctl + WHERE + (ctl.username = s.username OR ctl.username = '*') + AND (ctl.service_name = s.service_name OR ctl.service_name = '*') + AND (ctl.module = s.module OR ctl.module = '*') + AND (ctl.action = s.action OR ctl.action = '*') + AND (ctl.program = s.program OR ctl.program = '*') + AND (ctl.client_machine = s.machine OR ctl.client_machine = '*') + AND (ctl.client_osuser = s.osuser OR ctl.client_osuser = '*') + AND indexes_visible = 'FALSE'; + + IF c > 0 THEN + EXECUTE IMMEDIATE 'alter session set optimizer_use_invisible_indexes = false'; + ELSE + EXECUTE IMMEDIATE 'alter session set optimizer_use_invisible_indexes = true'; + END IF; + END LOOP; + + -- set _serial_direct_read + FOR s IN (SELECT * FROM v$session WHERE sid = SYS_CONTEXT('userenv', 'sid')) + LOOP -- this loop returns only 1 row + SELECT COUNT(*) INTO c + FROM &schemaname..workload_control ctl + WHERE + (ctl.username = s.username OR ctl.username = '*') + AND (ctl.service_name = s.service_name OR ctl.service_name = '*') + AND (ctl.module = s.module OR ctl.module = '*') + AND (ctl.action = s.action OR ctl.action = '*') + AND (ctl.program = s.program OR ctl.program = '*') + AND (ctl.client_machine = s.machine OR ctl.client_machine = '*') + AND (ctl.client_osuser = s.osuser OR ctl.client_osuser = '*') + AND force_serial_direct_read = 'TRUE'; + + IF c > 0 THEN + EXECUTE IMMEDIATE 'alter session set "_serial_direct_read" = ALWAYS'; + END IF; + END LOOP; +END; +/ + +SHOW ERR + +-- set all indexes invisible in your hybrid-workload schema +ALTER SESSION SET ddl_lock_timeout = 10; +BEGIN + FOR i IN (SELECT index_name FROM user_indexes + WHERE table_name NOT IN 'WORKLOAD_CONTROL' + AND table_owner NOT IN ('SYS', 'SYSTEM') + AND table_owner = '&schemaname' + AND visibility = 'VISIBLE') + LOOP + EXECUTE IMMEDIATE 'ALTER INDEX '||i.index_name||' INVISIBLE'; + END LOOP; +END; +/ + diff --git a/tpt/exadata/workload_index_control/test_workload_index_control.sql b/tpt/exadata/workload_index_control/test_workload_index_control.sql new file mode 100644 index 0000000..a8d15cc --- /dev/null +++ b/tpt/exadata/workload_index_control/test_workload_index_control.sql @@ -0,0 +1,73 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- DROP TABLE test_users; +-- DROP TABLE test_objects; + +CREATE TABLE test_users AS SELECT * FROM all_users; +CREATE TABLE test_objects AS SELECT * FROM all_objects; + +CREATE INDEX i_test_users ON test_users (username); +CREATE INDEX i_test_objects ON test_objects (owner); + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'TEST_USERS'); +EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'TEST_OBJECTS'); + +PROMPT ================================================================================== +PROMPT This plan should use indexes as they are visible and available: +PROMPT ================================================================================== + +SELECT + SUM(u.user_id) + SUM(o.object_id) +FROM + test_users u + , test_objects o +WHERE + u.username = o.owner +AND u.username LIKE 'S%' +AND o.owner LIKE 'S%' +/ + +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); + +PROMPT ================================================================================== +PROMPT Making indexes invisible. The plan should use FULL TABLE scans now: +PROMPT ================================================================================== + +ALTER INDEX i_test_users INVISIBLE; +ALTER INDEX i_test_objects INVISIBLE; +ALTER SESSION SET optimizer_use_invisible_indexes = false; + +SELECT + SUM(u.user_id) + SUM(o.object_id) +FROM + test_users u + , test_objects o +WHERE + u.username = o.owner +AND u.username LIKE 'S%' +AND o.owner LIKE 'S%' +/ + +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); + +PROMPT ================================================================================== +PROMPT Setting optimizer_use_invisible_indexes = TRUE. The plan should use indexes again: +PROMPT ================================================================================== + +ALTER SESSION SET optimizer_use_invisible_indexes = true; + +SELECT + SUM(u.user_id) + SUM(o.object_id) +FROM + test_users u + , test_objects o +WHERE + u.username = o.owner +AND u.username LIKE 'S%' +AND o.owner LIKE 'S%' +/ + +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); + + diff --git a/tpt/expandlast.sql b/tpt/expandlast.sql new file mode 100644 index 0000000..9638110 --- /dev/null +++ b/tpt/expandlast.sql @@ -0,0 +1,18 @@ +. +-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL outsql FOR A100 WORD_WRAP +VAR outsql CLOB + +0 c clob := q'\ +0 declare + +999999 \';; +999999 begin +999999 dbms_utility.expand_sql_text(c, :outsql);; +999999 end;; +/ + +PRINT outsql + diff --git a/tpt/experiments/add_column_default_value.sql b/tpt/experiments/add_column_default_value.sql new file mode 100644 index 0000000..2e36321 --- /dev/null +++ b/tpt/experiments/add_column_default_value.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t; + +CREATE TABLE t (a int) TABLESPACE users; +INSERT /*+ APPEND */ INTO t SELECT rownum FROM dba_source; +COMMIT; +--ALTER TABLE t ADD b INT DEFAULT 123 NOT NULL; + +PAUSE Hit enter to add column +ALTER TABLE t ADD c VARCHAR2(100) DEFAULT 'taneltest' NOT NULL; +PAUSE Hit enter to change default value +ALTER TABLE t MODIFY c VARCHAR2(100) DEFAULT 'not testing anymore'; + + diff --git a/tpt/experiments/bigfile_hwm_brokering.sql b/tpt/experiments/bigfile_hwm_brokering.sql new file mode 100644 index 0000000..8d81b14 --- /dev/null +++ b/tpt/experiments/bigfile_hwm_brokering.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE BIGFILE TABLESPACE big DATAFILE SIZE 100M AUTOEXTEND ON MAXSIZE 10G +EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M SEGMENT SPACE MANAGEMENT AUTO; + +CREATE TABLE system.t_big TABLESPACE big PARALLEL 4 AS SELECT * FROM dba_source; + diff --git a/tpt/experiments/histogram_linear_decay_of_selectivity.sql b/tpt/experiments/histogram_linear_decay_of_selectivity.sql new file mode 100644 index 0000000..437d9bf --- /dev/null +++ b/tpt/experiments/histogram_linear_decay_of_selectivity.sql @@ -0,0 +1,67 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t; + +CREATE TABLE t AS SELECT * FROM dba_objects; + +SELECT + MIN(created) + , MAX(created) + , ROUND(MAX(created)-MIN(created)) range_days + , COUNT(*) num_rows + , COUNT(*) / ROUND(MAX(created)-MIN(created)) rows_per_day + , SUM(NVL2(created,0,1)) nulls +FROM + t +/ + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'T', method_opt=>'FOR TABLE', no_invalidate=>FALSE); + +-- SELECT * FROM t WHERE created > SYSDATE - 1; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); +-- +-- SELECT * FROM t WHERE created > SYSDATE; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); +-- +-- SELECT * FROM t WHERE created > SYSDATE + 1; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); +-- +-- SELECT * FROM t WHERE created > SYSDATE + 10; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); +-- +-- SELECT * FROM t WHERE created > SYSDATE + 100; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); + +-- SELECT * FROM t WHERE created > DATE'2012-09-01'; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); + +SELECT * FROM t WHERE created < DATE'2010-10-01'; +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); + + + +EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'T', method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', no_invalidate=>FALSE); + +-- SELECT * FROM t WHERE created > SYSDATE - 1; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); +-- +-- SELECT * FROM t WHERE created > SYSDATE; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); +-- +-- SELECT * FROM t WHERE created > SYSDATE + 1; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); +-- +-- SELECT * FROM t WHERE created > SYSDATE + 10; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); +-- +-- SELECT * FROM t WHERE created > SYSDATE + 100; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); + +-- SELECT * FROM t WHERE created > DATE'2012-09-01'; +-- SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); + +SELECT * FROM t WHERE created < DATE'2010-10-01'; +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'+PEEKED_BINDS')); + + diff --git a/tpt/experiments/lob_select_for_update.sql b/tpt/experiments/lob_select_for_update.sql new file mode 100644 index 0000000..760ccb7 --- /dev/null +++ b/tpt/experiments/lob_select_for_update.sql @@ -0,0 +1,36 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE tlob; +CREATE TABLE tlob (a INT, b CLOB); + +INSERT INTO tlob VALUES(1, LPAD('x',2048,'x')); +UPDATE tlob SET b = b||b; +UPDATE tlob SET b = b||b; +UPDATE tlob SET b = b||b; +UPDATE tlob SET b = b||b; +UPDATE tlob SET b = b||b; +UPDATE tlob SET b = b||b; +UPDATE tlob SET b = b||b; +UPDATE tlob SET b = b||b; +UPDATE tlob SET b = b||b; + +COMMIT; + +SELECT DBMS_LOB.GETLENGTH(b) FROM tlob; + +DROP TABLE tdummy; +CREATE table tdummy AS SELECT * FROM all_objects; + +DELETE tdummy; + +ALTER SYSTEM CHECKPOINT; +ALTER SYSTEM SWITCH LOGFILE; + +SELECT * FROM tlob WHERE a=1 FOR UPDATE; +COMMIT; + +@log + +ALTER SYSTEM SWITCH LOGFILE; + diff --git a/tpt/extloc.sql b/tpt/extloc.sql new file mode 100644 index 0000000..0665de9 --- /dev/null +++ b/tpt/extloc.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL owner FOR A30 +COL table_name FOR A30 +col driver for a20 +col dirname for a30 +col extloc_location head LOCATION for a50 + +SELECT + owner + , table_name + , directory_name dirname + , location extloc_location +FROM dba_external_locations +WHERE + UPPER(table_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +/ + diff --git a/tpt/exttab.sql b/tpt/exttab.sql new file mode 100644 index 0000000..d6fdd9a --- /dev/null +++ b/tpt/exttab.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL owner FOR A30 +COL table_name FOR A30 +col driver for a20 +col dirname for a30 + +SELECT owner, table_name, type_name driver, default_directory_name dirname, property, reject_limit +FROM dba_external_tables +WHERE + UPPER(table_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +/ + diff --git a/tpt/f.sql b/tpt/f.sql new file mode 100644 index 0000000..fbe5559 --- /dev/null +++ b/tpt/f.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: f.sql +-- Purpose: Search for Fixed view (V$ view) text +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @f +-- @f sql_shared +-- +-------------------------------------------------------------------------------- + +col view_name for a25 wrap +col text for a100 word_wrap + +prompt Search for Fixed view (V$ view) with view name or text containing %&1% + +select view_name, view_definition text from v$fixed_View_definition where upper(view_name) like upper('%&1%') or upper(view_definition) like upper('%&1%'); + diff --git a/tpt/fcha.sql b/tpt/fcha.sql new file mode 100644 index 0000000..9086f2d --- /dev/null +++ b/tpt/fcha.sql @@ -0,0 +1,102 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: fcha.sql (Find CHunk Address) v0.2 +-- Purpose: Find in which heap (UGA, PGA or Shared Pool) a memory address resides +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com | @tanelpoder +-- +-- Usage: @fcha +-- @fcha F6A14448 +-- +-- Other: This would only report an UGA/PGA chunk address if it belongs +-- to *your* process/session (x$ksmup and x$ksmpp do not see other +-- session/process memory) +-- +-- History: Jan 20 2021 Frits Hoogland Added query for fixed sga (x$ksmfsv) +-------------------------------------------------------------------------------- + +prompt Find in which heap (UGA, PGA, fixed SGA or Shared Pool) the memory address &1 resides... +prompt +prompt WARNING!!! This script will query X$KSMSP, which will cause heavy shared pool latch contention +prompt in systems under load and with large shared pool. This may even completely hang +prompt your instance until the query has finished! You probably do not want to run this in production! +prompt +pause Press ENTER to continue, CTRL+C to cancel... + + +select + 'VSGA' LOC, + KSMCHPTR, + KSMCHIDX, + KSMCHDUR, + KSMCHCOM, + KSMCHSIZ, + KSMCHCLS, + KSMCHTYP, + KSMCHPAR +from + x$ksmsp +where + to_number(substr('&1', instr(lower('&1'), 'x')+1) ,'XXXXXXXXXXXXXXXX') + between + to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + and to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + ksmchsiz - 1 +union all +select + 'UGA', + KSMCHPTR, + null, + null, + KSMCHCOM, + KSMCHSIZ, + KSMCHCLS, + KSMCHTYP, + KSMCHPAR +from + x$ksmup +where + to_number(substr('&1', instr(lower('&1'), 'x')+1) ,'XXXXXXXXXXXXXXXX') + between + to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + and to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + ksmchsiz - 1 +union all +select + 'PGA', + KSMCHPTR, + null, + null, + KSMCHCOM, + KSMCHSIZ, + KSMCHCLS, + KSMCHTYP, + KSMCHPAR +from + x$ksmpp +where + to_number(substr('&1', instr(lower('&1'), 'x')+1) ,'XXXXXXXXXXXXXXXX') + between + to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + and to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + ksmchsiz - 1 +union all +select + 'FSGA', + ksmfsadr, + null, + null, + ksmfsnam||' '||ksmfstyp, + ksmfssiz, + null, + null, + null +from + x$ksmfsv +where + to_number(substr('&1', instr(lower('&1'), 'x')+1) ,'XXXXXXXXXXXXXXXX') + between + to_number(ksmfsadr,'XXXXXXXXXXXXXXXX') + and to_number(ksmfsadr,'XXXXXXXXXXXXXXXX') + ksmfssiz - 1 +/ diff --git a/tpt/fcura.sql b/tpt/fcura.sql new file mode 100644 index 0000000..ccb686e --- /dev/null +++ b/tpt/fcura.sql @@ -0,0 +1,82 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col fcura_addrlen new_value _fcura_addrlen + +set termout off +select vsize(addr)*2 fcura_addrlen from x$dual; +set termout on + +col fcura_sql_text heading SQL_TEXT format a156 word_wrap +--break on fcura_sql_text + +--select sql_text fcura_sql_text +--from v$sql +--where lower(child_address) like lower('%&1%') +--or lower(address) like lower('%&1%'); + +--select hash_value, sql_id, address, child_number, child_address, object_status status +--from v$sql +--where lower(child_address) like lower('%&1%') +--or lower(address) like lower('%&1%'); + + +col curheaps_size0 heading SIZE0 for 99999 +col curheaps_size6 heading SIZE6 for 99999 +col fcura_kglnaobj heading OBJECT_NAME for a80 word_wrap + +col MATCHING_HEAP new_value v_matching_heap +col KGLOBHD0 new_value v_curheaps_kglobhd0 +col KGLOBHD6 new_value v_curheaps_kglobhd6 + +select + KGLNAHSH, + KGLHDPAR, + KGLOBT09 CHILD#, + KGLHDADR, + KGLOBHD0, --KGLOBHS0 curheaps_size0, +/* KGLOBHD1, + KGLOBHD2, + KGLOBHD3, + KGLOBHD4, + KGLOBHD5,*/ + KGLOBHD6, --KGLOBHS6 curheaps_size6, +--, +-- KGLOBHD7, +-- KGLOBT00 CTXSTAT, + KGLOBSTA STATUS, + DECODE( hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')), + KGLOBHD0, 'KGLOBHD0: '||KGLOBHD0, + KGLOBHD1, 'KGLOBHD1: '||KGLOBHD1, + KGLOBHD2, 'KGLOBHD2: '||KGLOBHD2, + KGLOBHD3, 'KGLOBHD3: '||KGLOBHD3, + KGLOBHD4, 'KGLOBHD4: '||KGLOBHD4, + KGLOBHD5, 'KGLOBHD5: '||KGLOBHD5, + KGLOBHD6, 'KGLOBHD6: '||KGLOBHD6, + KGLHDPAR, 'KGLHDPAR: '||KGLHDPAR, + KGLHDADR, 'KGLHDADR: '||KGLHDADR, + '00' + ) MATCHING_HEAP, + CASE WHEN TRIM(KGLNAOWN) IS NULL THEN KGLNAOBJ ELSE KGLNAOWN||'.'||KGLNAOBJ END fcura_kglnaobj +from + X$KGLOB +-- X$KGLCURSOR_CHILD +where + KGLHDPAR = hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')) +or KGLHDADR = hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')) +or KGLOBHD0 = hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')) +or KGLOBHD1 = hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')) +or KGLOBHD2 = hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')) +or KGLOBHD3 = hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')) +or KGLOBHD4 = hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')) +or KGLOBHD5 = hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')) +or KGLOBHD6 = hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0')) +/ + +--select 'HEAPx' heap, h.* from x$ksmhp h where KSMCHDS = hextoraw(hextoraw(lpad(upper('&1'), &_fcura_addrlen, '0'))); +select 'HEAP0' heap, h.* from x$ksmhp h where KSMCHDS = hextoraw('&v_curheaps_kglobhd0'); +select 'HEAP6' heap, h.* from x$ksmhp h where KSMCHDS = hextoraw('&v_curheaps_kglobhd6'); + +undef v_matching_heap +undef v_curheaps_kglobhd0 +undef v_curheaps_kglobhd6 diff --git a/tpt/fd.sql b/tpt/fd.sql new file mode 100644 index 0000000..4aa043a --- /dev/null +++ b/tpt/fd.sql @@ -0,0 +1,6 @@ +from dual +. +prompt .....from dual + +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. diff --git a/tpt/fgran.sql b/tpt/fgran.sql new file mode 100644 index 0000000..c3d29ee --- /dev/null +++ b/tpt/fgran.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col fgran_component for a20 + +select + t.component fgran_component + , g.* +from + x$ksmge g + , x$kmgsct t +where + g.grantype = t.grantype +and + to_number(substr('&1', instr(lower('&1'), 'x')+1) ,lpad('X',vsize(g.addr)*2,'X')) + between + to_number(g.baseaddr,lpad('X',vsize(g.addr)*2,'X')) + and to_number(g.baseaddr,lpad('X',vsize(g.addr)*2,'X')) + g.gransize - 1 +/ diff --git a/tpt/find.sql b/tpt/find.sql new file mode 100644 index 0000000..1e07322 --- /dev/null +++ b/tpt/find.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt PARAMETERS + +@pd "&1" + +prompt STATS +select * from v$sysstat where lower(name) like lower('%&1%'); + +prompt EVENTS +select * from v$system_event where lower(event) like lower('%&1%'); + +prompt LATCHES +select name, gets, immediate_gets from v$latch where lower(name) like lower('%&1%'); + +prompt ENQUEUES + +select name, expl descr from x$ksqeqtyp where lower(name) like lower('%&1%') +union +select name, expl from x$ksirestyp where lower(name) like lower('%&1%'); + + +set feed on diff --git a/tpt/fish.sql b/tpt/fish.sql new file mode 100644 index 0000000..e035351 --- /dev/null +++ b/tpt/fish.sql @@ -0,0 +1,45 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +SET LiNeSiZe 10000 PageSize 5000 +SET TrimOut ON Head Off +-- /**/ +-- SELECT +-- LISTAGG +-- (SUBSTR(s, +-- MOD(r2-1,115)+1,1)) WITHIN GROUP(ORDER BY r) +-- FROM(SELECT rownum r,RPAD(RPAD(RPAD(RPAD(LPAD(LPAD +-- ('(',x,'('),20,' '),x+20,')'),40,' '),40+y,' '),50,'W')s FROM( +-- SELECT CEIL(ABS(SIN(rownum/30)*13))x,CEIL(ABS(COS(rownum/9)*5))y +-- FROM dual CONNECT BY LEVEL<=115)), (SELECT rownum r2 FROM (dual) +----~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +-- CONNECT BY LEVEL <= 50) GROUP BY MOD(r2-1, 115) +1; + + + + + + + SELECT + CHR(POWER(3,3)) + ||'[38;5;0m'||LISTAGG(SUBSTR( + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(s ,')', + CHR(POWER(3,3))||'[48;5;'||TRIM(TO_CHAR((POWER(2,4)+CEIL((SIN(r2/5) + + SIN(ROWNUM/150)+1)*3-1)+CEIL((-SIN(ROWNUM/150)+1)*3-1)*6+CEIL((COS(ROWNUM/150)+1)*3-1) *6*6), + '099'))||'m)'),'(',CHR(POWER(3,3))||'[48;5;'||TRIM(TO_CHAR((POWER(2,4)+CEIL((SIN(r2/5)+SIN(ROWNUM/150) +1)*3-1)+ + CEIL((-SIN(ROWNUM /150)+1)*3-1)*6+CEIL((COS(ROWNUM/150)+1)*3-1)*6*6),'099'))||'m('),' ',CHR(POWER(3,3))||'[48;5;'||TRIM (TO_CHAR( + (POWER(2,4)+CEIL(4)+CEIL(4)*6+CEIL(5-(r2/8))*6*6),'099'))||'m '),'.',CHR(POWER(3,3))||'[48;5;'||TRIM(TO_CHAR((POWER(2,4)+CEIL(5)+CEIL(4)*6+CEIL + (3)*6*6),'099'))||'m~'),'W',CHR(POWER(3,3))||'[48;5;'||TRIM(TO_CHAR((POWER(2,4)+CEIL(4+ABS(SIN(r/25)))+CEIL(2-ABS(SIN (r/5))*2) + *6+CEIL(2-ABS(SIN(r/5))*2)*6*6),'099'))||'m '),(MOD(r2-1,115)+1)*12+1,12))WITHIN GROUP(ORDER BY r)||CHR(POWER (3,3)) + ||'[0m' v FROM(SELECT ROWNUM r, RPAD(RPAD(RPAD(RPAD(LPAD(LPAD('(',x,'('),20,' '), x+20,')'),40,' '), 40+y, + '.'),50,'W')s FROM (SELECT CEIL(ABS(SIN(ROWNUM/30)*13))x,CEIL(ABS(COS(ROWNUM * + 1/DBMS_RANDOM.VALUE(7,7.5))*7))y FROM dual CONNECT BY LEVEL<=115)), + (SELECT ROWNUM r2 FROM dual CONNECT BY LEVEL<=50) + GROUP BY MOD(r2-1,115)+1; + + + + + + diff --git a/tpt/fix.sql b/tpt/fix.sql new file mode 100644 index 0000000..f3be50a --- /dev/null +++ b/tpt/fix.sql @@ -0,0 +1,17 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + * +FROM + v$session_fix_control +WHERE + session_id = SYS_CONTEXT('userenv', 'sid') +AND ( + LOWER(description) LIKE LOWER('%&1%') + OR LOWER(sql_feature) LIKE LOWER('%&1%') + OR TO_CHAR(bugno) LIKE LOWER('%&1%') + OR optimizer_feature_enable LIKE LOWER('%&1%') + ) +/ + diff --git a/tpt/ft.sql b/tpt/ft.sql new file mode 100644 index 0000000..ac8cf99 --- /dev/null +++ b/tpt/ft.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + name +, type +from + v$fixed_table +where + lower(name) like lower('%&1%') +order by + 1 +/ + diff --git a/tpt/fusage.sql b/tpt/fusage.sql new file mode 100644 index 0000000..caf121f --- /dev/null +++ b/tpt/fusage.sql @@ -0,0 +1,17 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +PROMPT Did you flush feature usage information to the repository? +PROMPT >>> EXEC dbms_feature_usage_internal.exec_db_usage_sampling(SYSDATE) + +SELECT ul.name, ul.detected_usages +FROM dba_feature_usage_statistics ul +WHERE ul.version = (SELECT MAX(u2.version) + FROM dba_feature_usage_statistics u2 + WHERE ul.name = u2.name + AND UPPER(ul.name) LIKE UPPER('&1') + AND UPPER(u2.name) LIKE UPPER('&1') + ) +/ + diff --git a/tpt/fv.sql b/tpt/fv.sql new file mode 100644 index 0000000..8fe8197 --- /dev/null +++ b/tpt/fv.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@fv2 "%&1%" diff --git a/tpt/fv2.sql b/tpt/fv2.sql new file mode 100644 index 0000000..ca9ba1c --- /dev/null +++ b/tpt/fv2.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column fv_ksmfsnam heading SGAVARNAME for a50 wrap +column fv_ksmfstyp heading DATATYPE for a25 wrap +column fv_ksmmval_dec heading KSMMVAL_DEC for 99999999999999999999 + +prompt Display Fixed SGA Variables matching &1 + +select /*+ LEADING(f) USE_NL(m) */ + f.addr + , f.indx + , f.ksmfsnam fv_ksmfsnam + , to_number(m.ksmmmval, 'XXXXXXXXXXXXXXXX') fv_ksmmval_dec + , NVL(RAWTOHEX(m.ksmmmval), '') ksmmmval + , f.ksmfstyp fv_ksmfstyp + , f.ksmfsadr + , f.ksmfssiz +from + x$ksmfsv f, x$ksmmem m +where + f.ksmfsadr = m.addr(+) +and (lower(ksmfsnam) like lower('&1') or lower(ksmfstyp) like lower('&1')) +order by + ksmfsnam +/ + + + diff --git a/tpt/fva.sql b/tpt/fva.sql new file mode 100644 index 0000000..970f773 --- /dev/null +++ b/tpt/fva.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column fva_ksmfsnam heading SGAVARNAME for a20 +column fva_ksmfstyp heading DATATYPE for a20 +column fva_ksmmval_dec heading KSMMVAL_DEC for 99999999999999999999 + +select /*+ LEADING(f) USE_NL(m) USE_CONCAT */ + f.addr, + f.indx, + f.ksmfsnam fva_ksmfsnam, + f.ksmfstyp fva_ksmfstyp, + f.ksmfsadr, + f.ksmfssiz, + m.ksmmmval, + to_number(m.ksmmmval, 'XXXXXXXXXXXXXXXX') fva_ksmmval_dec +from + x$ksmfsv f, + x$ksmmem m +where + f.ksmfsadr = m.addr +and ( + f.ksmfsadr = hextoraw( lpad(substr(upper('&1'), instr(upper('&1'), 'X')+1), vsize(f.addr)*2, '0') ) + or + m.ksmmmval = hextoraw( lpad(substr(upper('&1'), instr(upper('&1'), 'X')+1), vsize(f.addr)*2, '0') ) + ) +order by + ksmfsnam +/ + diff --git a/tpt/fval.sql b/tpt/fval.sql new file mode 100644 index 0000000..5335fc8 --- /dev/null +++ b/tpt/fval.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@fval2 "%&1%" \ No newline at end of file diff --git a/tpt/fval2.sql b/tpt/fval2.sql new file mode 100644 index 0000000..762168d --- /dev/null +++ b/tpt/fval2.sql @@ -0,0 +1,34 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column fvar_ksmfsnam heading SGAVARNAME for a30 +column fvar_ksmfstyp heading DATATYPE for a30 +column fval_ksmmval_dec heading VALUE_DEC for 999999999999990 + +select /*+ ORDERED USE_NL(m) NO_EXPAND */ + f.addr + , f.indx + , f.ksmfsnam fvar_ksmfsnam + , f.ksmfstyp fvar_ksmfstyp + , f.ksmfsadr + , f.ksmfssiz + , m.ksmmmval + , to_number(rawtohex(m.ksmmmval), 'XXXXXXXXXXXXXXXX') fval_ksmmval_dec +/* , (select ksmmmval from x$ksmmem where addr = hextoraw( + to_char( + to_number( + rawtohex(f.ksmfsadr), + 'XXXXXXXX' + ) + 0, + 'XXXXXXXX') + ) + ) ksmmmval2 */ +from + x$ksmfsv f + , x$ksmmem m +where + f.ksmfsadr = m.addr +and (rawtohex(m.ksmmmval) like upper('&1')) +order by + ksmfsnam +/ diff --git a/tpt/get_trace.sql b/tpt/get_trace.sql new file mode 100644 index 0000000..2c2ff0b --- /dev/null +++ b/tpt/get_trace.sql @@ -0,0 +1,35 @@ +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +/*---------------------------------------------------------------------------------------------------------------------------- +Usage: get_trace +----------------------------------------------------------------------------------------------------------------------------*/ + +DEFINE trc_file = &1 + +COL trace_filename FOR A45 +COL adr_home FOR A45 +SELECT trace_filename, to_char(change_time, 'dd-mm-yyyy hh24:mi:ss') AS change_time, to_char(modify_time, 'dd-mm-yyyy hh24:mi:ss') AS modify_time, adr_home, con_id +FROM gv$diag_trace_file +WHERE lower(trace_filename) LIKE lower('%&trc_file%') +ORDER BY modify_time; + +PROMPT +ACCEPT trc_file PROMPT 'Trace file name: ' +PROMPT Getting trace file ... +SET HEAD OFF +SET FEEDBACK OFF +SET TERM OFF +@get_trace2 &trc_file +SET HEAD ON +SET FEEDBACK ON +SET TERM ON + +--on Mac +host &_start $TMPDIR/&trc_file +--on Windows +--host start %TEMP%/&trc_file +PAUSE +host &_delete $TMPDIR/&trc_file +--on Windows +--host &_delete %TEMP%/&trc_file + diff --git a/tpt/get_trace2.sql b/tpt/get_trace2.sql new file mode 100644 index 0000000..d7ca0d5 --- /dev/null +++ b/tpt/get_trace2.sql @@ -0,0 +1,15 @@ +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +/*---------------------------------------------------------------------------------------------------------------------------- +Usage: get_trace2 +----------------------------------------------------------------------------------------------------------------------------*/ +--on Windows +--SPOOL %TEMP%/&1 +--on Mac +SPOOL $TMPDIR/&1 +SELECT payload +FROM GV$diag_trace_file_contents +WHERE trace_filename = '&1' +ORDER BY line_number; +SPOOL OFF + diff --git a/tpt/getplusparm.sql b/tpt/getplusparm.sql new file mode 100644 index 0000000..af0324f --- /dev/null +++ b/tpt/getplusparm.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: getplusparm.sql +-- Purpose: get sqlplus parameter value (such linesize, pagesize, sqlcode, +-- etc) into a sqlplus define variable +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @getplusparm [full-param-name] [def-variable-name] +-- +-- Example: @getplusparm linesize sqlplus_line_size +-- def sqlplus_line_size +-- +-------------------------------------------------------------------------------- + +@saveset +set termout off + +spool &SQLPATH/tmp/getplusparm.tmp +show &1 +spool off + +spool &SQLPATH/tmp/chgplusparm.tmp +prompt c/&1/def &2/ +prompt c/&2 /&2=/ +spool off + +get &SQLPATH/tmp/getplusparm.tmp nolist +@&SQLPATH/tmp/chgplusparm.tmp +save file &SQLPATH/tmp/setplusparm.tmp replace + +@&SQLPATH/tmp/setplusparm.tmp + +@loadset + +unset _getplusparm_tmpfile diff --git a/tpt/getprev.sql b/tpt/getprev.sql new file mode 100644 index 0000000..364b7ba --- /dev/null +++ b/tpt/getprev.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Author: Tanel Poder (http://tanelpoder.com | @tanelpoder ) +-- Purpose: Get previously executed SQL ID, child number and other details into sqlplus variables for further use + +COL GETLAST_PREV_SQL_ADDR HEAD SQL_ADDR NEW_VALUE prev_sql_addr +COL GETLAST_PREV_HASH_VALUE HEAD HASH_VALUE NEW_VALUE prev_hash_value +COL GETLAST_PREV_SQL_ID HEAD SQL_ID NEW_VALUE prev_sql_id +COL GETLAST_PREV_CHILD_NUMBER HEAD CHILD_NUMBER NEW_VALUE prev_child_number +COL GETLAST_PREV_EXEC_START HEAD EXEC_START NEW_VALUE prev_exec_start +COL GETLAST_PREV_EXEC_ID HEAD EXEC_ID NEW_VALUE prev_exec_id + +SELECT + sysdate + , sid + , serial# + , prev_sql_addr getlast_prev_sql_addr + , prev_hash_value getlast_prev_hash_value + , prev_sql_id getlast_prev_sql_id + , prev_child_number getlast_prev_child_number + , prev_exec_start getlast_prev_exec_start + , prev_exec_id getlast_prev_exec_id +FROM + v$session +WHERE + sid = SYS_CONTEXT('USERENV', 'SID') +/ + diff --git a/tpt/gettracename.sql b/tpt/gettracename.sql new file mode 100644 index 0000000..8d0289d --- /dev/null +++ b/tpt/gettracename.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select value ||'/'||(select lower(instance_name) from v$instance) ||'_ora_'|| + (select spid from v$process where addr = (select paddr from v$session + where sid = (select sid from v$mystat + where rownum = 1 + ) + ) + ) || '.trc' tracefile +from v$parameter where name = 'user_dump_dest'; + diff --git a/tpt/glock.sql b/tpt/glock.sql new file mode 100644 index 0000000..3290335 --- /dev/null +++ b/tpt/glock.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col lock_mode_held head MODE_HELD for a15 +col lock_mode_reqd head MODE_REQUESTED for a15 +col lock_lock_id1 head LOCK_ID1 for a10 +col lock_lock_id2 head LOCK_ID2 for a10 +col lock_sid head SID for 999999 + +select + inst_id, + sid lock_sid, + type, + lmode, +decode(lmode, + 0, 'None', + 1, 'Null', + 2, 'Row-S (SS)', + 3, 'Row-X (SX)', + 4, 'Share', + 5, 'S/Row-X (SSX)', + 6, 'Exclusive', +to_char(lmode)) lock_mode_held, + request, +decode(request, + 0, 'None', + 1, 'Null', + 2, 'Row-S (SS)', + 3, 'Row-X (SX)', + 4, 'Share', + 5, 'S/Row-X (SSX)', + 6, 'Exclusive', +to_char(request)) lock_mode_reqd, +to_char(id1) lock_lock_id1, +to_char(id2) lock_lock_id2, +ctime, +block +from + gv$lock +where &1 +order by + inst_id, + sid +/ diff --git a/tpt/grep.sql b/tpt/grep.sql new file mode 100644 index 0000000..a4d387d --- /dev/null +++ b/tpt/grep.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +host egrep -i -e &1 -e "^\*" &trcfile + diff --git a/tpt/grp.sql b/tpt/grp.sql new file mode 100644 index 0000000..daf4219 --- /dev/null +++ b/tpt/grp.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt count &1 in table &2.... +select &1 , count(*) +from &2 +group by &1 +order by + 1 asc +/ diff --git a/tpt/grpa.sql b/tpt/grpa.sql new file mode 100644 index 0000000..aa42b3a --- /dev/null +++ b/tpt/grpa.sql @@ -0,0 +1,3 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + diff --git a/tpt/grpn.sql b/tpt/grpn.sql new file mode 100644 index 0000000..cad704e --- /dev/null +++ b/tpt/grpn.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: grpn.sql +-- Purpose: Quick group by query for aggregating Numeric columns +-- Calculate sum,min,max,avg,count for simple expressions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @grpn +-- @grpn bytes dba_segments tablespace_name='SYSTEM' owner,segment_type +-- +-- +-------------------------------------------------------------------------------- + + +select + &4, + count(&1), + count(distinct &1) DISTCNT, + sum(&1), + avg(&1), + min(&1), + max(&1) +from + &2 +where + &3 +group by --rollup + ( &4 ) +/ + diff --git a/tpt/grpo.sql b/tpt/grpo.sql new file mode 100644 index 0000000..123829f --- /dev/null +++ b/tpt/grpo.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select &1 , count(*) +from &2 +group by &1 +order by count(*) desc +/ diff --git a/tpt/grps.sql b/tpt/grps.sql new file mode 100644 index 0000000..aa42b3a --- /dev/null +++ b/tpt/grps.sql @@ -0,0 +1,3 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + diff --git a/tpt/gsqlmon.sql b/tpt/gsqlmon.sql new file mode 100644 index 0000000..21b658f --- /dev/null +++ b/tpt/gsqlmon.sql @@ -0,0 +1,305 @@ +-- sqlmon.sql +-- +-- Copyright 2015 Gluent Inc. All rights reserved +-- + +-- Backup sqlplus session settings... +-- ------------------------------------------------------------------------------------------ +set termout off +store set sqlplus_session_settings.sql replace + +-- Sqlmon session settings... +-- ------------------------------------------------------------------------------------------ +set heading off pagesize 0 linesize 32767 trimspool on trimout on long 9999999 verify off longchunksize 9999999 feedback off +set serverout on size unlimited +set timing off autotrace off feedback off +set define on + +-- Parameters section... +-- ------------------------------------------------------------------------------------------ +undefine _sid +undefine _sql_id +undefine _sql_exec_id +undefine _sql_exec_start +undefine _sql_exec_start_format +undefine _get_mode +undefine _sqlmon_call_formats +undefine _report_name +undefine _report_data +undefine _report_warnings + +column 1 new_value 1 +column 2 new_value 2 +column 3 new_value 3 +column 4 new_value 4 +SELECT NULL as "1" +, NULL as "2" +, NULL as "3" +, NULL as "4" +FROM dual +WHERE 1=2; + +set termout on +prompt +prompt ================================================================================ +prompt Gluent Augmented SQL Monitoring Report v2.9.0 +prompt Copyright 2015-2018 Gluent Inc. All rights reserved. +prompt ================================================================================ +set termout off + +column _sid new_value _sid +column _sql_id new_value _sql_id +column _sql_exec_id new_value _sql_exec_id +column _sql_exec_start new_value _sql_exec_start +column _get_mode new_value _get_mode + +SELECT CASE + WHEN sid IS NOT NULL + THEN sid + WHEN arg_one IS NOT NULL AND INSTR(arg_one, '=') = 0 + THEN arg_one + ELSE 'NULL' + END AS "_sid" +, NVL(sql_id, 'NULL') AS "_sql_id" +, NVL(sql_exec_id, 'NULL') AS "_sql_exec_id" +, NVL(sql_exec_start, 'NULL') AS "_sql_exec_start" +, UPPER(NVL(get_mode, 'NULL')) AS "_get_mode" +FROM ( + SELECT REGEXP_SUBSTR(args, '(sid=)([^\|;]+)', 1, 1, 'i', 2) AS sid + , REGEXP_SUBSTR(args, '(sql_id=)([^\|;]+)', 1, 1, 'i', 2) AS sql_id + , REGEXP_SUBSTR(args, '(sql_exec_id=)([^\|;]+)', 1, 1, 'i', 2) AS sql_exec_id + , REGEXP_SUBSTR(args, '(sql_exec_start=)([^\|;]+)', 1, 1, 'i', 2) AS sql_exec_start + , REGEXP_SUBSTR(args, '(get=)([^\|;]+)', 1, 1, 'i', 2) AS get_mode + , REGEXP_SUBSTR(arg_one, '[^;]+') AS arg_one + FROM ( + SELECT q'[&1]' AS arg_one + , q'[&1|&2|&3|&4]' AS args + FROM dual + ) + ); + +define _sql_exec_start_format = "YYYYMMDD_HH24MISS" + +var sid NUMBER +var sql_id VARCHAR2(30) +var sql_exec_id NUMBER +var sql_exec_start VARCHAR2(30) +var get_mode VARCHAR2(10) +var sql_message VARCHAR2(1000) + +DECLARE + v_sid NUMBER; + v_sql_id VARCHAR2(13); + v_sql_exec_id NUMBER; + v_sql_exec_start DATE; + v_get_mode VARCHAR2(10); + v_sqlmon_call_formats VARCHAR2(1000); + e_terminate EXCEPTION; +BEGIN + -- Parameter validations... + BEGIN + v_sid := &_sid; + EXCEPTION + WHEN VALUE_ERROR THEN + :sql_message := q'{SQLMON-01: Invalid value for SID [&_sid]. Use a numeric literal or a USERENV/SYS_CONTEXT expression}'; + RAISE e_terminate; + END; + BEGIN + v_sql_id := NULLIF(TRIM('&_sql_id'),'NULL'); + EXCEPTION + WHEN OTHERS THEN + :sql_message := q'{SQLMON-02: Invalid value for SQL_ID [&_sql_id]}'; + RAISE e_terminate; + END; + BEGIN + v_sql_exec_id := TO_NUMBER(NULLIF('&_sql_exec_id','NULL')); + EXCEPTION + WHEN VALUE_ERROR THEN + :sql_message := q'{SQLMON-03: Invalid value for SQL_EXEC_ID [&_sql_exec_id]. Use a numeric literal}'; + RAISE e_terminate; + END; + BEGIN + v_sql_exec_start := TO_DATE(NULLIF(q'{&_sql_exec_start.}','NULL'), '&_sql_exec_start_format'); + EXCEPTION + WHEN OTHERS THEN + :sql_message := q'{SQLMON-04: Invalid value or format for SQL_EXEC_START [&_sql_exec_start]. Format must be &_sql_exec_start_format.}'; + RAISE e_terminate; + END; + BEGIN + v_get_mode := NULLIF('&_get_mode','NULL'); + IF v_get_mode IS NOT NULL AND v_get_mode NOT IN (offload_tools.gc_latest, offload_tools.gc_longest_running) THEN + RAISE VALUE_ERROR; + END IF; + EXCEPTION + WHEN VALUE_ERROR THEN + :sql_message := q'{SQLMON-09: Invalid value for GET mode. Valid values are LATEST or LONGEST}'; + RAISE e_terminate; + END; + IF (v_sid IS NOT NULL AND (v_sql_id IS NOT NULL OR v_sql_exec_id IS NOT NULL OR v_sql_exec_start IS NOT NULL)) + OR (v_sid IS NOT NULL AND v_get_mode IS NOT NULL) + OR (v_get_mode IS NOT NULL AND (v_sql_id IS NOT NULL OR v_sql_exec_id IS NOT NULL OR v_sql_exec_start IS NOT NULL)) + OR (v_sid IS NULL AND v_sql_id IS NULL AND v_get_mode IS NULL) + THEN + RAISE e_terminate; + END IF; + -- Set parameter binds... + :sid := v_sid; + :sql_id := v_sql_id; + :sql_exec_id := v_sql_exec_id; + :sql_exec_start := TO_CHAR(v_sql_exec_start, '&_sql_exec_start_format'); + :get_mode := v_get_mode; +EXCEPTION + WHEN e_terminate THEN + IF :sql_message IS NULL THEN + v_sqlmon_call_formats := '1. @sqlmon.sql sid=[n]' || CHR(10) || + '2. @sqlmon.sql sid=userenv(''sid'')' || CHR(10) || + '3. @sqlmon.sql sid=sys_context(''userenv'',''sid'')' || CHR(10) || + '4. @sqlmon.sql sql_id=[s]' || CHR(10) || + '5. @sqlmon.sql sql_id=[s] sql_exec_id=[n] sql_exec_start=[&_sql_exec_start_format.]' || CHR(10) || + '6. @sqlmon.sql get=[latest|longest]'; + :sql_message := 'SQLMON-05: Invalid or missing parameters specified. Valid call formats are: ' || CHR(10) || '
    ' || CHR(10) || v_sqlmon_call_formats || CHR(10) || '
    '; + END IF; +END; +/ + + +-- Report generation... +-- ------------------------------------------------------------------------------------------ +set termout on + +prompt +prompt Generating report... + +set termout off + +var report_name VARCHAR2(1000) +var report_data REFCURSOR +var report_warnings VARCHAR2(30) + +DECLARE + v_sid NUMBER := :sid; + v_sql_id VARCHAR2(13) := :sql_id; + v_sql_exec_id NUMBER := :sql_exec_id; + v_sql_exec_start DATE := TO_DATE(:sql_exec_start, '&_sql_exec_start_format'); + v_get_mode VARCHAR2(10) := :get_mode; + v_sql_message VARCHAR2(1000) := :sql_message; + v_rep_warnings VARCHAR2(20) := ' (with warnings)'; + v_rep_invalid VARCHAR2(20) := '%invalid_inputs%'; +BEGIN + IF v_sql_message IS NOT NULL OR (v_sid IS NULL AND v_sql_id IS NULL AND v_get_mode IS NULL) THEN + :report_warnings := v_rep_warnings; + :report_name := offload_tools.sqlmon_report_name( p_sid => NULL ); + OPEN :report_data + FOR + SELECT NVL(v_sql_message, 'SQLMON-06: Unknown error or invalid user-inputs detected') + FROM dual; + ELSIF v_sid IS NOT NULL THEN + :report_name := offload_tools.sqlmon_report_name( p_sid => v_sid ); + IF :report_name NOT LIKE v_rep_invalid THEN + OPEN :report_data + FOR + SELECT report_text + FROM TABLE( offload_tools.sqlmon( p_sid => v_sid )) + ORDER BY + report_id; + ELSE + :report_warnings := v_rep_warnings; + OPEN :report_data + FOR + SELECT 'SQLMON-07: Non-existent SID detected' + FROM dual; + END IF; + ELSIF v_sql_id IS NOT NULL THEN + :report_name := offload_tools.sqlmon_report_name( p_sql_id => v_sql_id, + p_sql_exec_id => v_sql_exec_id, + p_sql_exec_start => v_sql_exec_start ); + IF :report_name NOT LIKE v_rep_invalid THEN + OPEN :report_data + FOR + SELECT report_text + FROM TABLE( offload_tools.sqlmon( p_sql_id => v_sql_id, + p_sql_exec_id => v_sql_exec_id, + p_sql_exec_start => v_sql_exec_start )) + ORDER BY + report_id; + ELSE + :report_warnings := v_rep_warnings; + OPEN :report_data + FOR + SELECT 'SQLMON-08: Non-existent SQL_ID or combination of SQL_ID, SQL_EXEC_ID and SQL_EXEC_START detected' + FROM dual; + END IF; + ELSE + :report_name := offload_tools.sqlmon_report_name( p_mode => v_get_mode ); + IF :report_name NOT LIKE v_rep_invalid THEN + OPEN :report_data + FOR + SELECT report_text + FROM TABLE( offload_tools.sqlmon( p_mode => v_get_mode )) + ORDER BY + report_id; + ELSE + :report_warnings := v_rep_warnings; + OPEN :report_data + FOR + SELECT 'SQLMON-10: No monitored hybrid SQL statements detected for ' || v_get_mode || ' get mode' + FROM dual; + END IF; + END IF; +END; +/ + +column _report_name new_value _report_name +column _report_warnings new_value _report_warnings +SELECT :report_name AS "_report_name" +, :report_warnings AS "_report_warnings" +FROM dual; + +spool &_report_name +print :report_data +spool off + +set termout on +prompt +prompt Report saved to &_report_name. +prompt +prompt ================================================================================ +prompt Gluent Augmented SQL Monitoring Report completed&_report_warnings.. +prompt ================================================================================ +prompt +set termout off + +-- Open the report... +-- ------------------------------------------------------------------------------------------ +host open &_report_name + +-- Restore sqlplus settings... +-- ------------------------------------------------------------------------------------------ +@sqlplus_session_settings.sql + +BEGIN + :report_name := NULL; + :report_data := NULL; + :report_warnings := NULL; + :sid := NULL; + :sql_id := NULL; + :sql_exec_id := NULL; + :sql_exec_start := NULL; + :get_mode := NULL; + :sql_message := NULL; +END; +/ + +set termout on + +undefine 1 2 3 4 +undefine _sid +undefine _sql_id +undefine _sql_exec_id +undefine _sql_exec_start +undefine _sql_exec_start_format +undefine _get_mode +undefine _sqlmon_call_formats +undefine _report_name +undefine _report_data +undefine _report_warnings diff --git a/tpt/gss.sql b/tpt/gss.sql new file mode 100644 index 0000000..e5fd4d3 --- /dev/null +++ b/tpt/gss.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Gather Schema Statistics for schema &1.... +exec dbms_stats.gather_schema_stats(upper('&1'), null, method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE REPEAT', cascade=>true); + diff --git a/tpt/gtrans.sql b/tpt/gtrans.sql new file mode 100644 index 0000000..01615cb --- /dev/null +++ b/tpt/gtrans.sql @@ -0,0 +1,51 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show global transactions from X$K2GTE2... +prompt You can find the remote endpoint's process and session via remote_spid + +COL gtrans_global_tid HEAD GLOBAL_TRANSACTION_ID FOR A45 +COL gtrans_local_sid_serial HEAD LOCAL_SID FOR A15 +COL gtrans_remote_spid HEAD REMOTE_SPID FOR A11 +COL gtrans_remote_machine HEAD REMOTE_MACHINE FOR A30 + +select /*+ leading(gt) */ + gt.k2gtitid_ora gtrans_global_tid + , s.username + , s.sid||','||s.serial# gtrans_local_sid_serial + , s.machine gtrans_remote_machine + , s.process gtrans_remote_spid + , decode (K2GTDFLG, 0, 'ACTIVE', 1, + 'COLLECTING', 2, 'FINALIZED', + 4, 'FAILED', 8, 'RECOVERING', 16, 'UNASSOCIATED', + 32, 'FORGOTTEN', 64, 'READY FOR RECOVERY', + 128, 'NO-READONLY FAILED', 256, 'SIBLING INFO WRITTEN', + 512, '[ORACLE COORDINATED]ACTIVE', + 512+1, '[ORACLE COORDINATED]COLLECTING', + 512+2, '[ORACLE COORDINATED]FINALIZED', + 512+4, '[ORACLE COORDINATED]FAILED', + 512+8, '[ORACLE COORDINATED]RECOVERING', + 512+16, '[ORACLE COORDINATED]UNASSOCIATED', + 512+32, '[ORACLE COORDINATED]FORGOTTEN', + 512+64, '[ORACLE COORDINATED]READY FOR RECOVERY', + 512+128, '[ORACLE COORDINATED]NO-READONLY FAILED', + 1024, '[MULTINODE]ACTIVE', + 1024+1, '[MULTINODE]COLLECTING', + 1024+2, '[MULTINODE]FINALIZED', + 1024+4, '[MULTINODE]FAILED', + 1024+8, '[MULTINODE]RECOVERING', + 1024+16, '[MULTINODE]UNASSOCIATED', + 1024+32, '[MULTINODE]FORGOTTEN', + 1024+64, '[MULTINODE]READY FOR RECOVERY', + 1024+128, '[MULTINODE]NO-READONLY FAILED', + 1024+256, '[MULTINODE]SIBLING INFO WRITTEN', + 'COMBINATION') status + , K2GTDFLG + , decode (K2GTETYP, 0, 'FREE', 1, 'LOOSELY COUPLED', 2, 'TIGHTLY COUPLED') coupling +from + x$k2gte2 gt + , v$session s +where + gt.k2gtdses = s.saddr +/ + diff --git a/tpt/gts.sql b/tpt/gts.sql new file mode 100644 index 0000000..f9f4346 --- /dev/null +++ b/tpt/gts.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Gather Table Statistics for table &1.... +exec dbms_stats.gather_table_stats(null, upper('&1'), null, method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE REPEAT', cascade=>true, no_invalidate=>false); + diff --git a/tpt/gtsh.sql b/tpt/gtsh.sql new file mode 100644 index 0000000..fae5eb5 --- /dev/null +++ b/tpt/gtsh.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Gather Table Statistics with histograms for table &1.... +exec dbms_stats.gather_table_stats(user, upper('&1'), null, method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true); + diff --git a/tpt/h.sql b/tpt/h.sql new file mode 100644 index 0000000..87b2532 --- /dev/null +++ b/tpt/h.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +host " doskey /history /exename=sqlplus.exe | find /i /n "&1" | find /v "]@h " " diff --git a/tpt/h2s.sql b/tpt/h2s.sql new file mode 100644 index 0000000..cf5c202 --- /dev/null +++ b/tpt/h2s.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- uses 11g LISTAGG() function +-- on 10g, comement out LISTAGG or implement this idea properly: +-- http://www.williamrobertson.net/documents/one-row.html + +SELECT LISTAGG(c) WITHIN GROUP (ORDER BY r) str FROM ( + SELECT + ROWNUM r + , CHR(TO_NUMBER(SUBSTR(hex,((level-1)*2)+1,2), 'XX')) c + FROM ( + SELECT + UPPER(REPLACE(TRANSLATE('&1',',',' '), ' ', '')) hex + FROM dual + ) + CONNECT BY + SUBSTR(hex,(level-1)*2,2) IS NOT NULL + -- OR SUBSTR(hex,(level-1)*2,2) != '00' + ORDER BY + TRUNC((ROWNUM-1)/4)*4+4-MOD(ROWNUM-1,4) +) +/ diff --git a/tpt/ha.sql b/tpt/ha.sql new file mode 100644 index 0000000..a0e52ec --- /dev/null +++ b/tpt/ha.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +host " doskey /history /exename=sqlplus.exe | find /v /n "dummy_non_existent_blah_tanel" " diff --git a/tpt/hash.sql b/tpt/hash.sql new file mode 100644 index 0000000..24d7870 --- /dev/null +++ b/tpt/hash.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: hash.sql +-- Purpose: Show the hash value, SQL_ID and child number of previously +-- executed SQL in session +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @hash +-- +-- +-- Other: Doesn't work on 9i for 2 reasons. There appears to be a bug +-- with v$session.prev_hash_value in 9.2.x and also there's no +-- SQL_ID nor CHILD_NUMBER column in V$SESSION in 9i. +-- +-------------------------------------------------------------------------------- + +col hash_hex for a10 + +select + ses.prev_hash_value hash_value + , ses.prev_sql_id sql_id + , ses.prev_child_number child_number + , MOD(ses.prev_hash_value, 131072) kgl_bucket + , (select sql.plan_hash_value + from v$sql sql + where + sql.sql_id = ses.prev_sql_id + and sql.child_number = ses.prev_child_number + and sql.address = ses.prev_sql_addr) plan_hash_value + --, lower(to_char(ses.prev_hash_value, 'XXXXXXXX')) hash_hex + , ses.prev_exec_start sql_exec_start + , ses.prev_exec_id sql_exec_id +from + v$session ses +where + ses.sid = userenv('sid') +/ diff --git a/tpt/heap6.sql b/tpt/heap6.sql new file mode 100644 index 0000000..6e94e43 --- /dev/null +++ b/tpt/heap6.sql @@ -0,0 +1,50 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--select +-- /*+ ordered use_nl(hp) */ +-- hp.* +--from +-- x$ksmsp sp +-- , x$ksmhp hp +--where +-- sp.ksmchptr = hp.ksmchds +--/ +-- +--COL sql_text FOR A80 TRUNCATE +--SELECT * FROM ( +-- SELECT +-- sql_id +-- , sharable_mem +-- , persistent_mem +-- , runtime_mem +-- , sql_text +-- FROM +-- V$SQL +-- ORDER BY +-- sharable_mem DESC +--) +--WHERE rownum <=10 +--/ +-- +--COL sql_text CLEAR + +SELECT + chunk_com, + alloc_class, + sum(chunk_size) totsize, + count(*), + count (distinct chunk_size) diff_sizes, + round(avg(chunk_size)) avgsz, + min(chunk_size) minsz, + max(chunk_size) maxsz +FROM + v$sql_shared_memory +WHERE + sql_id = '&1' +GROUP BY + chunk_com, + alloc_class +ORDER BY + totsize DESC +/ diff --git a/tpt/heapdump_analyzer b/tpt/heapdump_analyzer new file mode 120000 index 0000000..8dd4d83 --- /dev/null +++ b/tpt/heapdump_analyzer @@ -0,0 +1 @@ +tools/unix/heapdump_analyzer \ No newline at end of file diff --git a/tpt/help.sql b/tpt/help.sql new file mode 100644 index 0000000..698048e --- /dev/null +++ b/tpt/help.sql @@ -0,0 +1,176 @@ +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +-------------------------------------------------------------------------------- +-- +-- File name: help.sql +-- Purpose: Help +-- Author: Tomasz Sroka +-- Usage: @help +-- +-------------------------------------------------------------------------------- +--ACCEPT search_string CHAR PROMPT "Search: [%] " + +DEFINE amp=chr(38) +DEFINE nl=chr(10) +DEFINE search_string=&1 + +COLUMN name FORMAT A25 TRUNC +COLUMN description FORMAT A60 WORD_WRAP +COLUMN usage FORMAT A115 + +WITH q AS ( +SELECT name, description, usage +FROM ( + SELECT 'ash_wait_chains.sql' AS name, 'Display ASH wait chains (multi-session wait signature, a session waiting for another session etc.)' AS description, '@ash/ash_wait_chains '||&nl||'@ash/ash_wait_chains username||''-''||program2 "wait_class=''Application''" sysdate-1/24 sysdate' AS usage FROM dual UNION ALL + SELECT 'ash_index_helper.sql' AS name, 'Santa''s Little (Index) Helper BETA' AS description, '@ash/ash_index_helper [.] '||&nl||'@ash/ash_index_helper 8zz6y2yzdqjp0 %.% sysdate-1/24 sysdate'||&nl||'@ash/ash_index_helper % TPCDS.% sysdate-1/24 sysdate' AS usage FROM dual UNION ALL + SELECT 'ashtop.sql' AS name, 'Display top activity by grouping ASH columns' AS description, '@ash/ashtop '||&nl||'@ash/ashtop username,sql_opname,event2 1=1 sysdate-1/24 sysdate'||&nl||'@ash/ashtop sql_opname,event2,sql_plan_operation||chr(32)||sql_plan_options,objt 1=1 sysdate-1/24 sysdate' AS usage FROM dual UNION ALL + SELECT 'asqlmon.sql' AS name, 'Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent (ASH based)' AS description, '@ash/asqlmon '||&nl||'@ash/asqlmon 7q729nhdgtsqq 0 sysdate-1/24 sysdate'||&nl||'@ash/asqlmon 7q729nhdgtsqq % sysdate-1 sysdate' AS usage FROM dual UNION ALL + SELECT 'aw.sql' AS name, 'Display last minute database activity' AS description, '@aw '||&nl||'@aw 1=1' AS usage FROM dual UNION ALL + SELECT 'awr_sqlid.sql' AS name, 'Display SQL text from AWR' AS description, '@awr/awr_sqlid '||&nl||'@awr/awr_sqlid 7q729nhdgtsqq' AS usage FROM dual UNION ALL + SELECT 'awr_sqlstats.sql' AS name, 'Display SQL statistics from AWR' AS description, '@awr/awr_sqlstats '||&nl||'@awr/awr_sqlstats 0sh0fn7r21020 1541789278 sysdate-7 sysdate'||&nl||'@awr/awr_sqlstats 0sh0fn7r21020 % sysdate-7 sysdate' AS usage FROM dual UNION ALL + SELECT 'awr_sqlstats_per_exec.sql' AS name, 'Display SQL statistics per execution from AWR' AS description, '@awr/awr_sqlstats_per_exec '||&nl||'@awr/awr_sqlstats_per_exec 0sh0fn7r21020 1541789278 sysdate-7 sysdate'||&nl||'@awr/awr_sqlstats_per_exec 0sh0fn7r21020 % sysdate-7 sysdate' AS usage FROM dual UNION ALL + SELECT 'awr_sqlstats_unstable.sql' AS name, 'Display unstable SQL execution plans from AWR' AS description, '@awr/awr_sqlstats_unstable '||&nl||'@awr/awr_sqlstats_unstable force_matching_signature plan_hash_value sysdate-7 sysdate' AS usage FROM dual UNION ALL + SELECT 'bg.sql' AS name, 'Display background processes' AS description, '@bg '||&nl||'@bg dbw'||&nl||'@bg writer'||&nl||'@bg %' AS usage FROM dual UNION ALL + SELECT 'bhobjects.sql' AS name, 'Display top objects in buffer cache' AS description, '@bhobjects' AS usage FROM dual UNION ALL + SELECT 'bhobjects2.sql' AS name, 'Display buffer cache statistics' AS description, '@bhobjects2' AS usage FROM dual UNION ALL + SELECT 'cancel.sql' AS name, 'Generate commands for canceling selected SQL' AS description, '@cancel '||&nl||'@cancel sid=150'||&nl||'@cancel username=''SYSTEM'''||&nl||'@cancel "username=''APP'' and program like ''sqlplus%''"' AS usage FROM dual UNION ALL + SELECT 'col.sql' AS name, 'Display column' AS description, '@col '||&nl||'@col open_mode' AS usage FROM dual UNION ALL + SELECT 'colusage.sql' AS name, 'Display column usage' AS description, '@colusage [.]'||&nl||'@colusage soe.orders'||&nl||'@colusage soe.%' AS usage FROM dual UNION ALL + SELECT 'create_sql_baseline.sql' AS name, 'Create SQL Plan Baseline from an existing "good" cursor' AS description, '@create_sql_baseline '||&nl||'@create_sql_baseline g5tuxh82pk3qf 2966233522 d7khnbh6c9qas' AS usage FROM dual UNION ALL + SELECT 'create_sql_patch.sql' AS name, 'Create SQL patch' AS description, '@create_sql_patch '||&nl||'@create_sql_patch g4pkmrqrgxg3b GATHER_PLAN_STATISTICS'||&nl||q'[@create_sql_patch b9dmj0ahu6xgc 'NO_INDEX_SS(@"SEL$26CA4453" "STORE_SALES"@"SEL$1")']' AS usage FROM dual UNION ALL + SELECT 'd.sql' AS name, 'Display data dictionary views and x$ tables' AS description, '@d '||&nl||'@d sql'||&nl||'@d %' AS usage FROM dual UNION ALL + SELECT 'dash_wait_chains.sql' AS name, 'Display ASH (based on DBA_HIST) wait chains (multi-session wait signature, a session waiting for another session etc.)' AS description, '@ash/dash_wait_chains '||&nl||'@ash/dash_wait_chains username||''-''||program2 "wait_class=''Application''" sysdate-1/24 sysdate' AS usage FROM dual UNION ALL + SELECT 'dashtop.sql' AS name, 'Display top activity by grouping ASH columns (based on DBA_HIST)' AS description, '@ash/dashtop '||&nl||'@ash/dashtop username,sql_opname,event2 1=1 sysdate-1/24 sysdate'||&nl||'@ash/dashtop sql_opname,event2,sql_plan_operation||chr(32)||sql_plan_options,objt 1=1 sysdate-1 sysdate' AS usage FROM dual UNION ALL + SELECT 'dasqlmon.sql' AS name, 'Report SQL-monitoring-style drill-down into where in an execution plan the execution time is spent (AWR based)' AS description, '@ash/dasqlmon '||&nl||'@ash/dasqlmon 7q729nhdgtsqq 0 "timestamp''2019-10-07 07:00:00''" "timestamp''2019-10-07 07:00:00''"'||&nl||'@ash/dasqlmon 7q729nhdgtsqq % sysdate-1 sysdate' AS usage FROM dual UNION ALL + SELECT 'date.sql' AS name, 'Display current date' AS description, '@date'||&nl||'@d sql'||&nl||'@d %' AS usage FROM dual UNION ALL + SELECT 'ddl.sql' AS name, 'Extracts DDL statements for specified objects' AS description, '@ddl [.]'||&nl||'@ddl sys.dba_users'||&nl||'@ddl sys.%tab%' AS usage FROM dual UNION ALL + SELECT 'desc.sql' AS name, 'Describe object' AS description, '@desc '||&nl||'@desc dba_tables' AS usage FROM dual UNION ALL + SELECT 'devent_hist.sql' AS name, 'Display a histogram of the number of waits from AWR (milliseconds)' AS description, '@ash/devent_hist.sql '||&nl||'@ash/devent_hist.sql log_file 1=1 sysdate-1/24 sysdate'||&nl||'@ash/devent_hist.sql log.file|db.file "wait_class=''User I/O'' AND session_type=''FOREGROUND''" sysdate-1/24 sysdate' AS usage FROM dual UNION ALL + SELECT 'df.sql' AS name, 'Display tablespace usage (GB)' AS description, '@df' AS usage FROM dual UNION ALL + SELECT 'dfm.sql' AS name, 'Display tablespace usage (MB)' AS description, '@dfm' AS usage FROM dual UNION ALL + SELECT 'dirs.sql' AS name, 'Display database directories' AS description, '@dirs' AS usage FROM dual UNION ALL + SELECT 'drop_sql_patch.sql' AS name, 'Drop SQL patch' AS description, '@drop_sql_patch '||&nl||'@drop_sql_patch SQL_PATCH_g4pkmrqrgxg3b' AS usage FROM dual UNION ALL + SELECT 'drop_sql_baseline.sql' AS name, 'Drop SQL Plan Baseline' AS description, '@drop_sql_baseline (get sql_handle from DBMS_XPLAN notes or DBA_SQL_PLAN_BASELINES)'||&nl||'@drop_sql_baseline SQL_52cb74b7097edbbd' AS usage FROM dual UNION ALL + SELECT 'ev.sql' AS name, 'Set session event' AS description, '@ev '||&nl||'@ev 10046 12' AS usage FROM dual UNION ALL + SELECT 'event_hist.sql' AS name, 'Display a histogram of the number of waits from ASH (milliseconds)' AS description, '@ash/event_hist.sql '||&nl||'@ash/event_hist.sql log.file 1=1 sysdate-1/24 sysdate'||&nl||'@ash/event_hist.sql log.file|db.file "wait_class=''User I/O'' AND session_type=''FOREGROUND''" sysdate-1/24 sysdate' AS usage FROM dual UNION ALL + SELECT 'event_hist_micro.sql' AS name, 'Display a histogram of the number of waits from ASH (microseconds)' AS description, '@ash/event_hist_micro '||&nl||'@ash/event_hist_micro log.file 1=1 sysdate-1/24 sysdate'||&nl||'@ash/event_hist_micro log.file|db.file "wait_class=''User I/O'' AND session_type=''FOREGROUND''" sysdate-1/24 sysdate' AS usage FROM dual UNION ALL + SELECT 'evh.sql' AS name, 'Display a histogram of the number of waits' AS description, '@evh '||&nl||'@evh log.file'||&nl||'@evh log.file|db.file' AS usage FROM dual UNION ALL + SELECT 'evo.sql' AS name, 'Disable session event' AS description, '@evo '||&nl||'@evo 10046' AS usage FROM dual UNION ALL + SELECT 'f.sql' AS name, 'Search for Fixed view (V$ view) text' AS description, '@f '||&nl||'@f sql_shared' AS usage FROM dual UNION ALL + SELECT 'fix.sql' AS name, 'Display fix controls description' AS description, '@fix '||&nl||'@fix 13836796'||&nl||'@fix adaptive' AS usage FROM dual UNION ALL + SELECT 'grp.sql' AS name, 'Group function wrapper' AS description, '@grp '||&nl||'@grp owner dba_tables'||&nl||'@grp owner,object_type dba_objects' AS usage FROM dual UNION ALL + SELECT 'help.sql' AS name, 'Display TPT script help' AS description, '@help '||&nl||'@help explain'||&nl||'@help lock|latch.*hold'||&nl||'@help ^ind.*sql|^tab.*sql' AS usage FROM dual UNION ALL + SELECT 'hash.sql' AS name, 'Display the hash value, sql_id, and child number of the last SQL in session' AS description, '@hash' AS usage FROM dual UNION ALL + SELECT 'hint.sql' AS name, 'Display all available hints' AS description, '@hint '||&nl||'@hint full' AS usage FROM dual UNION ALL + SELECT 'hintclass.sql' AS name, 'Display all available hints with hint class info' AS description, '@hintclass '||&nl||'@hintclass merge' AS usage FROM dual UNION ALL + SELECT 'hintfeature.sql' AS name, 'Display all available hints with SQL feature info' AS description, '@hintfeature '||&nl||'@hintfeature transformation' AS usage FROM dual UNION ALL + SELECT 'hinth.sql' AS name, 'Display hint hierarchy' AS description, '@hinth '||&nl||'@hinth merge' AS usage FROM dual UNION ALL + SELECT 'ind.sql' AS name, 'Display indexes' AS description, '@ind [.]'||&nl||'@ind orders'||&nl||'@ind soe.ord_customer_ix'||&nl||'@ind soe.%' AS usage FROM dual UNION ALL + SELECT 'indf.sql' AS name, 'Display function-based index expressions' AS description, '@indf [.]'||&nl||'@indf orders'||&nl||'@indf soe.ord_customer_ix'||&nl||'@indf soe.%' AS usage FROM dual UNION ALL + SELECT 'kill.sql' AS name, 'Generate command to for killing user session' AS description, '@kill '||&nl||'@kill sid=284'||&nl||'@kill username=''SYSTEM'''||&nl||'@kill "username=''APP'' AND program LIKE ''sqlplus%''"' AS usage FROM dual UNION ALL + SELECT 'latchprof.sql' AS name, 'Profile top latch holders (V$ version)' AS description, '@latchprof '||&nl||'@latchprof name,sqlid 123 % 10000'||&nl||'@latchprof sid,name,sqlid % "shared pool" 10000' AS usage FROM dual UNION ALL + SELECT 'latchprofx.sql' AS name, 'Profile top latch holders eXtended (X$ version)' AS description, '@latchprofx '||&nl||'@latchprofx sid,name 123 % 10000'||&nl||'@latchprofx sid,name,timemodel,hmode,func % "shared pool" 10000' AS usage FROM dual UNION ALL + SELECT 'lock.sql' AS name, 'Display current locks' AS description, '@lock '||&nl||'@lock 1=1'||&nl||'@lock type=''TM''' AS usage FROM dual UNION ALL + SELECT 'log.sql' AS name, 'Display redo log layout' AS description, '@log' AS usage FROM dual UNION ALL + SELECT 'long.sql' AS name, 'Display session long operations' AS description, '@long '||&nl||'@long 1=1'||&nl||'@long username=''SOE''' AS usage FROM dual UNION ALL + SELECT 'ls.sql' AS name, 'Display tablespace' AS description, '@ls '||&nl||'@ls system'||&nl||'@ls %' AS usage FROM dual UNION ALL + SELECT 'lt.sql' AS name, 'Display lock type info' AS description, '@lt '||&nl||'@lt TM' AS usage FROM dual UNION ALL + SELECT 'mem.sql' AS name, 'Display information about the dynamic SGA components' AS description, '@mem' AS usage FROM dual UNION ALL + SELECT 'memres.sql' AS name, 'Display information about the last completed memory resize operations' AS description, '@memres' AS usage FROM dual UNION ALL + SELECT 'nonshared.sql' AS name, 'Display reasons for non-shared child cursors from v$shared_cursor', '@nonshared '||&nl||'@nonshared 7q729nhdgtsqq' AS usage FROM dual UNION ALL + SELECT 'nls.sql' AS name, 'Display NLS parameters at session level', '@nls' AS usage FROM dual UNION ALL + SELECT 'o.sql' AS name, 'Display database object based on object owner and name', '@o [.]'||&nl||'@o sys.dba_users'||&nl||'@o %.%files' AS usage FROM dual UNION ALL + SELECT 'oda.sql' AS name, 'Display oradebug doc event action', '@oda '||&nl||'@oddc latch'||&nl||'@oddc .' AS usage FROM dual UNION ALL + SELECT 'oddc.sql' AS name, 'Display oradebug doc component', '@oddc '||&nl||'@oddc optimizer'||&nl||'@oddc .' AS usage FROM dual UNION ALL + SELECT 'oerr.sql' AS name, 'Display Oracle error decription' AS description, '@oerr '||&nl||'@oerr 7445' AS usage FROM dual UNION ALL + SELECT 'oi.sql' AS name, 'Display invalid objects' AS description, '@oi' AS usage FROM dual UNION ALL + SELECT 'oid.sql' AS name, 'Display database objects based on object id' AS description, '@oid '||&nl||'@oid 10'||&nl||'@oid 10,20' AS usage FROM dual UNION ALL + SELECT 'ostackprofw.sql' AS name, 'Sample Oracle process call stacks and show a profile (Windows sqlplus)' AS description, '@ostackprofw '||&nl||'@ostackprofw 123 0.1 100' AS usage FROM dual UNION ALL + SELECT 'ostackprofu.sql' AS name, 'Sample Oracle process call stacks and show a profile (Unix/Linux/Mac sqlplus)' AS description, '@ostackprofu '||&nl||'@ostackprofu 123 0.1 100' AS usage FROM dual UNION ALL + SELECT 'otherxml.sql' AS name, 'Display outline hints from library cache' AS description, '@otherxml '||&nl||'@otherxml 1fbwxvngasv1f 1' AS usage FROM dual UNION ALL + SELECT 'p.sql' AS name, 'Display parameter name and value' AS description, '@p '||&nl||'@pd optimizer' AS usage FROM dual UNION ALL + SELECT 'partkeys.sql' AS name, 'Display table partition keys' AS description, '@partkeys [.]'||&nl||'@partkeys soe.orders'||&nl||'@partkeys soe.%' AS usage FROM dual UNION ALL + SELECT 'pd.sql' AS name, 'Display parameter name, description and value' AS description, '@pd '||&nl||'@pd optimizer' AS usage FROM dual UNION ALL + SELECT 'pga.sql' AS name, 'Display PGA memory usage statistics' AS description, '@pga' AS usage FROM dual UNION ALL + SELECT 'pmem.sql' AS name, 'Display process memory usage' AS description, '@pmem '||&nl||'@pmem 1000' AS usage FROM dual UNION ALL + SELECT 'proc.sql' AS name, 'Display functions and procedures' AS description, '@proc '||&nl||'@proc dbms_stats table'||&nl||'@proc dbms_stats %' AS usage FROM dual UNION ALL + SELECT 'procid.sql' AS name, 'Display functions and procedures' AS description, '@procid '||&nl||'@procid 13615 84' AS usage FROM dual UNION ALL + SELECT 'pv.sql' AS name, 'Display parameters based on the current value' AS description, '@pv '||&nl||'@pv MANUAL' AS usage FROM dual UNION ALL + SELECT 'pvalid.sql' AS name, 'Display valid parameter values' AS description, '@pvalid '||&nl||'@pvalid optimizer' AS usage FROM dual UNION ALL + SELECT 'rowid.sql' AS name, 'Display file, block, row numbers from rowid' AS description, '@rowid '||&nl||'@rowid AAAR51AAMAAAACGAAB' AS usage FROM dual UNION ALL + SELECT 's.sql' AS name, 'Display current session wait and SQL_ID info (10g+)' AS description, '@s '||&nl||'@s 52,110,225'||&nl||'@s "select sid from v$session where username = ''XYZ''"'||&nl||'@s '||&||'mysid' AS usage FROM dual UNION ALL + SELECT 'sdr.sql' AS name, 'Control direct read in serial (_serial_direct_read)' AS description, '@sdr ' AS usage FROM dual UNION ALL + SELECT 'se.sql' AS name, 'Display session events' AS description, '@se '||&nl||'@se 10' AS usage FROM dual UNION ALL + SELECT 'sed.sql' AS name, 'Display wait events description' AS description, '@sed '||&nl||'@sed log_file'||&nl||'@sed "enq: TX"' AS usage FROM dual UNION ALL + SELECT 'seg.sql' AS name, 'Display segment information' AS description, '@seg [.]'||&nl||'@seg soe.customers'||&nl||'@seg soe.%' AS usage FROM dual UNION ALL + SELECT 'segcached.sql' AS name, 'Display number of buffered blocks of a segment' AS description, '@segcached [.]'||&nl||'@segcached soe.orders'||&nl||'@segcached soe.%' AS usage FROM dual UNION ALL + SELECT 'seq.sql' AS name, 'Display sequence information' AS description, '@seq [.]'||&nl||'@seq sys.jobseq'||&nl||'@seq %.jobseq' AS usage FROM dual UNION ALL + SELECT 'ses.sql' AS name, 'Display session statistics for given sessions, filter by statistic name' AS description, '@ses '||&nl||'@ses 10 %'||&nl||'@ses 10 parse'||&nl||'@ses 10,11,12 redo'||&nl||'@ses "select sid from v$session where username = ''APPS''" parse' AS usage FROM dual UNION ALL + SELECT 'ses2.sql' AS name, 'Display session statistics for given sessions, filter by statistic name and show only stats with value > 0' AS description, '@ses2 '||&nl||'@ses2 10 %'||&nl||'@ses2 10 parse'||&nl||'@ses2 10,11,12 redo'||&nl||'@ses2 "select sid from v$ses2sion where username = ''APPS''" parse' AS usage FROM dual UNION ALL + SELECT 'settings.sql' AS name, 'Display AWR configuration' AS description, '@awr/settings' AS usage FROM dual UNION ALL + SELECT 'sga.sql' AS name, 'Display instance memory usage breakdown from v$memory_dynamic_components' AS description, '@sga' AS usage FROM dual UNION ALL + SELECT 'sgai.sql' AS name, 'Display instance memory usage breakdown from v$sgainfo' AS description, '@sgai' AS usage FROM dual UNION ALL + SELECT 'sgares.sql' AS name, 'Display information about the last completed SGA resize operations from v$sga_resize_ops' AS description, '@sgares' AS usage FROM dual UNION ALL + SELECT 'sgastat.sql' AS name, 'Display detailed information on the SGA from v$sgastat' AS description, '@sgastat '||&nl||'@sgastat %'||&nl||'@sgastat result' AS usage FROM dual UNION ALL + SELECT 'sgastatx.sql' AS name, 'Display shared pool stats by sub-pool from X$KSMSS' AS description, '@sgastatx '||&nl||'@sgastatx "free memory"'||&nl||'@sgastatx cursor' AS usage FROM dual UNION ALL + SELECT 'sqlmem.sql' AS name, 'Display shared pool memory usage of SQL statement' AS description, '@sqlmem '||&nl||'@sqlmem 7q729nhdgtsqq' AS usage FROM dual UNION ALL + SELECT 'sqlmemh.sql' AS name, 'Display shared pool memory usage of SQL statement' AS description, '@sqlmemh '||&nl||'@sqlmemh 900835192' AS usage FROM dual UNION ALL + SELECT 'sys.sql' AS name, 'Display system statistics' AS description, '@sys '||&nl||'@sys redo'||&nl||'@sys ''redo write''' AS usage FROM dual UNION ALL + SELECT 'uu.sql' AS name, 'Display user sessions' AS description, '@uu '||&nl||'@uu %'||&nl||'@uu username'||&nl||'@uu %username%' AS usage FROM dual UNION ALL + SELECT 'us.sql' AS name, 'Display database usernames from dba_users' AS description, '@us '||&nl||'@us username' AS usage FROM dual UNION ALL + SELECT 'usid.sql' AS name, 'Display user sessoin and process information' AS description, '@usid '||&nl||'@us 1234' AS usage FROM dual UNION ALL + SELECT 'sl.sql' AS name, 'Set statistics level' AS description, '@sl '||&nl||'@sl all' AS usage FROM dual UNION ALL + SELECT 'smem.sql' AS name, 'Display process memory usage' AS description, '@smem '||&nl||'@smem 1000' AS usage FROM dual UNION ALL + SELECT 'sqlbinds.sql' AS name, 'Display captured SQL bind variable values' AS description, '@sqlbinds '||&nl||'@sqlbinds 2swu3tn1ujzq7 0 %'||&nl||'@sqlbinds 2swu3tn1ujzq7 % sys_b_.*' AS usage FROM dual UNION ALL + SELECT 'sqlid.sql' AS name, 'Display SQL: text, child cursors and execution statistics' AS description, '@sqlid '||&nl||'@sqlid 7q729nhdgtsqq 0'||&nl||'@sqlid 7q729nhdgtsqq %' AS usage FROM dual UNION ALL + SELECT 'sqlf.sql' AS name, 'Display full sql text from memory' AS description, '@sqlf '||&nl||'@sqlf 7q729nhdgtsqq' AS usage FROM dual UNION ALL + SELECT 'sqlfn.sql' AS name, 'Display SQL functions' AS description, '@sqlfn '||&nl||'@sqlfn date' AS usage FROM dual UNION ALL + SELECT 'sqlmon.sql' AS name, 'Run SQL Monitor report' AS description, '@sqlmon '||&nl||'@sqlmon 1019' AS usage FROM dual UNION ALL + SELECT 'swc.sql' AS name, 'Display current wait chains (multi-session wait signature, a session waiting for another session etc.) from GV$SESSION' AS description, '@swc '||&nl||'@swc program2||event2 1=1' AS usage FROM dual UNION ALL + SELECT 'syn.sql' AS name, 'Display synonym information' AS description, '@syn [.]'||&nl||'@syn system.tab'||&nl||'@syn system.%' AS usage FROM dual UNION ALL + SELECT 't.sql' AS name, 'Display default trace file' AS description, '@t' AS usage FROM dual UNION ALL + SELECT 'tab.sql' AS name, 'Display table information' AS description, '@tab [.]'||&nl||'@tab soe.orders'||&nl||'@tab soe.%' AS usage FROM dual UNION ALL + SELECT 'tabhist.sql' AS name, 'Display column histograms' AS description, '@tabhist [.] '||&nl||'@tabhist soe.orders order_mode'||&nl||'@tabhist soe.orders %' AS usage FROM dual UNION ALL + SELECT 'tabhisthybrid.sql' AS name, 'Display hybrid histogram cardinality estimates for equality filter' AS description, '@tabhisthybrid [.] '||&nl||'@tabhisthybrid soe.customers account_mgr_id' AS usage FROM dual UNION ALL + SELECT 'tabpart.sql' AS name, 'Display table partitions' AS description, '@tabpart [.]'||&nl||'@tabpart soe.orders'||&nl||'@tabpart soe.%' AS usage FROM dual UNION ALL + SELECT 'tabsubpart' AS name, 'Display table subpartitions' AS description, '@tabsubpart [.]'||&nl||'@tabsubpart soe.orders'||&nl||'@tabsubpart soe.%' AS usage FROM dual UNION ALL + SELECT 'ti.sql' AS name, 'Force new trace file' AS description, '@ti' AS usage FROM dual UNION ALL + SELECT 'tlc.sql' AS name, 'Display top-level call names' AS description, '@tlc '||&nl||'@tlc commit' AS usage FROM dual UNION ALL + SELECT 'topseg.sql' AS name, 'Display top space users per tablespace' AS description, '@topseg '||&nl||'@topseg soe'||&nl||'@topseg %' AS usage FROM dual UNION ALL + SELECT 'topsegstat.sql' AS name, 'Display information about top segment-level statistics' AS description, '@topsegstat '||&nl||'@topsegstat reads'||&nl||'@topsegstat %' AS usage FROM dual UNION ALL + SELECT 'trace.sql' AS name, 'Enable tracing' AS description, '@trace '||&nl||'@trace sid=123'||&nl||'@trace username=''SOE''' AS usage FROM dual UNION ALL + SELECT 'traceme.sql' AS name, 'Enable tracing for the current session' AS description, '@traceme' AS usage FROM dual UNION ALL + SELECT 'traceoff.sql' AS name, 'Disable tracing' AS description, '@traceoff '||&nl||'@traceoff sid=123'||&nl||'@traceoff username=''SOE''' AS usage FROM dual UNION ALL + SELECT 'trans.sql' AS name, 'Display active transactions from v$transaction' AS description, '@trans '||&nl||'@trans sid=123'||&nl||'@trans username=''SYS''' AS usage FROM dual UNION ALL + SELECT 'trig.sql' AS name, 'Display trigger information' AS description, '@trig [.]'||&nl||'@trig sys.delete_entries'||&nl||'@trig sys.%' AS usage FROM dual UNION ALL + SELECT 'ts.sql' AS name, 'Display tablespaces' AS description, '@ts '||&nl||'@ts soe'||&nl||'@ts %' AS usage FROM dual UNION ALL + SELECT 'uds.sql' AS name, 'Display undo statistics' AS description, '@uds' AS usage FROM dual UNION ALL + SELECT 'wrka.sql' AS name, 'Display PGA and TEMP usage' AS description, '@wrka '||&nl||'@wrka 1=1'||&nl||'@wrka sid=1000' AS usage FROM dual UNION ALL + SELECT 'wrkasum.sql' AS name, 'Display summary of SQL workareas groupbed by opertion type (PGA and TEMP)' AS description, '@wrkasum '||&nl||'@wrkasum sql_id=''7q729nhdgtsqq''' AS usage FROM dual UNION ALL + SELECT 'x.sql' AS name, 'Display SQL execution plan for the last SQL statement' AS description, '@x' AS usage FROM dual UNION ALL + SELECT 'xa.sql' AS name, 'Display SQL execution plan for the last SQL statement - alias' AS description, '@xa' AS usage FROM dual UNION ALL + SELECT 'xall.sql' AS name, 'Display SQL execution plan for the last SQL statement - advanced' AS description, '@xall' AS usage FROM dual UNION ALL + SELECT 'xawr.sql' AS name, 'Display SQL execution plan from AWR' AS description, '@xawr '||&nl||'@xawr 0sh0fn7r21020 1541789278'||&nl||'@xawr 0sh0fn7r21020 %' AS usage FROM dual UNION ALL + SELECT 'xb.sql' AS name, 'Explain a SQL statements execution plan with execution profile directly from library cache - for the last SQL executed in current session' AS description, '@xb' AS usage FROM dual UNION ALL + SELECT 'xbi.sql' AS name, 'Explain a SQL statements execution plan with execution profile directly from library cache - look up by SQL ID' AS description, '@xbi '||&nl||'@xbi a5ks9fhw2v9s1 0' AS usage FROM dual UNION ALL + SELECT 'xi.sql' AS name, 'Display SQL execution plan from library cache' AS description, '@xi '||&nl||'@xi 7q729nhdgtsqq 0'||&nl||'@xi 7q729nhdgtsqq %' AS usage FROM dual UNION ALL + SELECT 'xia.sql' AS name, 'Display SQL execution plan from library cache: ADVANCED' AS description, '@xia '||&nl||'@xia 7q729nhdgtsqq' AS usage FROM dual UNION ALL + SELECT 'xp.sql' AS name, 'Run DBMS_SQLTUNE.REPORT_SQL_MONITOR (text mode) for session' AS description, '@xp '||&nl||'@xp 47' AS usage FROM dual UNION ALL + SELECT 'xprof.sql' AS name, 'Run DBMS_SQLTUNE.REPORT_SQL_MONITOR for session' AS description, '@xprof ' AS usage FROM dual UNION ALL + SELECT 'xplto.sql' AS name, 'Display execution plan operations' AS description, '@xplto '||&nl||'@xplto full' AS usage FROM dual UNION ALL + SELECT '' AS name, '' AS description, '' AS usage FROM dual UNION ALL + SELECT '' AS name, '' AS description, '' AS usage FROM dual + ) +) +SELECT * FROM q +WHERE + (upper(name) LIKE upper ('%&search_string%') OR regexp_like(name, '&search_string', 'i')) +OR (upper(description) LIKE upper ('%&search_string%') OR regexp_like(description, '&search_string', 'i')) +-- OR (upper(usage) LIKE upper ('%&search_string%') OR regexp_like(usage, '&search_string', 'i')) +ORDER BY + name +/ + +UNDEFINE search_string +CLEAR COLUMNS diff --git a/tpt/hex.sql b/tpt/hex.sql new file mode 100644 index 0000000..48cd4f9 --- /dev/null +++ b/tpt/hex.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@calc 0x&1 + 0 diff --git a/tpt/hexop.sql b/tpt/hexop.sql new file mode 100644 index 0000000..26430cb --- /dev/null +++ b/tpt/hexop.sql @@ -0,0 +1,9 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + to_char( to_number('&1', 'XXXXXXXXXXXXXXXXXX') &2 to_number('&3', 'XXXXXXXXXXXXXXXXXX'), 'XXXXXXXXXXXXXXXXXX') hex, + to_number('&1', 'XXXXXXXXXXXXXXXXXX') &2 to_number('&3', 'XXXXXXXXXXXXXXXXXX') dec +from + dual +/ diff --git a/tpt/hg.sql b/tpt/hg.sql new file mode 100644 index 0000000..a0a4078 --- /dev/null +++ b/tpt/hg.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +host " doskey /history /exename=sqlplus.exe | grep -ni &1 | grep -iv ]@h " diff --git a/tpt/hint.sql b/tpt/hint.sql new file mode 100644 index 0000000..f3b2d9a --- /dev/null +++ b/tpt/hint.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +col name for a35 +col version for a15 +col version_outline for a15 +col inverse for a35 + +col hint_scope for a27 + +select + name, + version, + version_outline, + inverse, + decode(bitand(target_level,1),1,'STATEMENT ') || + decode(bitand(target_level,2),2,'QBLOCK ') || + decode(bitand(target_level,4),4,'OBJECT ') || + decode(bitand(target_level,8),8,'JOIN ') hint_scope +from v$sql_hint +where lower(name) like lower('%&1%') +/ + diff --git a/tpt/hintclass.sql b/tpt/hintclass.sql new file mode 100644 index 0000000..9128a34 --- /dev/null +++ b/tpt/hintclass.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select name,class,version,version_outline from v$sql_hint where lower(class) like lower('%&1%'); diff --git a/tpt/hintfeature.sql b/tpt/hintfeature.sql new file mode 100644 index 0000000..2bb1b02 --- /dev/null +++ b/tpt/hintfeature.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL hintf_name FOR A35 + +select + name hintf_name + , sql_feature + , version + , version_outline + , decode(bitand(target_level,1),1,'STATEMENT ') || + decode(bitand(target_level,2),2,'QBLOCK ') || + decode(bitand(target_level,4),4,'OBJECT ') || + decode(bitand(target_level,8),8,'JOIN ') hint_scope +from + v$sql_hint +where + lower(sql_feature) like lower('%&1%') +/ diff --git a/tpt/hinth.sql b/tpt/hinth.sql new file mode 100644 index 0000000..d6a8a13 --- /dev/null +++ b/tpt/hinth.sql @@ -0,0 +1,57 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: hinth.sql (Hint Hierarchy) +-- +-- Purpose: Display the areas / features in Oracle kernel that a hint affects +-- (displayed as a feature/module hierarchy) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @hinth +-- @hinth MERGE +-- +-- Other: Requires Oracle 11g+ +-- +-------------------------------------------------------------------------------- + +COL sqlfh_feature HEAD SQL_FEATURE FOR A55 +COL hinth_path HEAD PATH FOR A150 +COL hinth_name HEAD NAME FOR A35 + +PROMPT Display Hint feature hierarchy for hints like &1 + +WITH feature_hierarchy AS ( +SELECT + f.sql_feature + , SYS_CONNECT_BY_PATH(REPLACE(f.sql_feature, 'QKSFM_', ''), ' -> ') path +FROM + v$sql_feature f + , v$sql_feature_hierarchy fh +WHERE + f.sql_feature = fh.sql_feature +CONNECT BY fh.parent_id = PRIOR f.sql_Feature +START WITH fh.sql_feature = 'QKSFM_ALL' +) +SELECT + hi.name hinth_name + , REGEXP_REPLACE(fh.path, '^ -> ', '') hinth_path + , DECODE(BITAND(target_level,1),1,'STATEMENT ') || + DECODE(BITAND(target_level,2),2,'QBLOCK ') || + DECODE(BITAND(target_level,4),4,'OBJECT ') || + DECODE(BITAND(target_level,8),8,'JOIN ') hint_scope +FROM + v$sql_hint hi + , feature_hierarchy fh +WHERE + hi.sql_feature = fh.sql_feature +-- hi.sql_feature = REGEXP_REPLACE(fh.sql_feature, '_[[:digit:]]+$') +AND UPPER(hi.name) LIKE UPPER('%&1%') +ORDER BY + path + --name +/ + diff --git a/tpt/hist2.sql b/tpt/hist2.sql new file mode 100644 index 0000000..6dfefcb --- /dev/null +++ b/tpt/hist2.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@hist_generic &1 &2 2 \ No newline at end of file diff --git a/tpt/hist_generic.sql b/tpt/hist_generic.sql new file mode 100644 index 0000000..9d185eb --- /dev/null +++ b/tpt/hist_generic.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@grp "power(&3,trunc(log(&3,&1)))" "&2" diff --git a/tpt/hof.sql b/tpt/hof.sql new file mode 100644 index 0000000..e59315d --- /dev/null +++ b/tpt/hof.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@htmloff diff --git a/tpt/hoff.sql b/tpt/hoff.sql new file mode 100644 index 0000000..46af94c --- /dev/null +++ b/tpt/hoff.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@hof \ No newline at end of file diff --git a/tpt/hon.sql b/tpt/hon.sql new file mode 100644 index 0000000..9be3c32 --- /dev/null +++ b/tpt/hon.sql @@ -0,0 +1,9 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +set markup HTML ON HEAD "SQL*Plus Report" BODY "" TABLE "border='1' align='center' summary='Script output'" SPOOL ON ENTMAP ON PREFORMAT OFF + +spool %SQLPATH%\tmp\output_&_connect_identifier..html + diff --git a/tpt/hp.sql b/tpt/hp.sql new file mode 100644 index 0000000..94796b6 --- /dev/null +++ b/tpt/hp.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col hp_addrlen new_value _hp_addrlen + +set termout off +select vsize(addr)*2 hp_addrlen from x$dual; +set termout on + +select * from x$ksmhp where KSMCHDS = hextoraw(lpad('&1', &_hp_addrlen, '0')); \ No newline at end of file diff --git a/tpt/hr.sql b/tpt/hr.sql new file mode 100644 index 0000000..f81401c --- /dev/null +++ b/tpt/hr.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@htmlrun "&1" \ No newline at end of file diff --git a/tpt/hs.sql b/tpt/hs.sql new file mode 100644 index 0000000..569c84a --- /dev/null +++ b/tpt/hs.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +set markup HTML ON +-- HEAD "&1" BODY "" TABLE "border='1' align='center' summary='Script output'" SPOOL ON ENTMAP OFF PREFORMAT OFF + +define _tptmode=html + +def _hs_spoolfile=&_tpt_tempdir/htmlrun_&_tpt_tempfile..html + +spool &_hs_spoolfile + +@&1 + +spool off +set markup html off spool off +define _tptmode=normal + +host &_start &_hs_spoolfile +set termout on diff --git a/tpt/hsel.sql b/tpt/hsel.sql new file mode 100644 index 0000000..3ac329b --- /dev/null +++ b/tpt/hsel.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@htmlrun "select * from &1" \ No newline at end of file diff --git a/tpt/html.sql b/tpt/html.sql new file mode 100644 index 0000000..8e1c699 --- /dev/null +++ b/tpt/html.sql @@ -0,0 +1,17 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off +set markup html on spool on +def _html_spoolfile=&_tpt_tempdir/html_&_tpt_tempfile..html +spool &_html_spoolfile +list +/ +spool off +set markup html off spool off +set termout on +host &_start &_html_spoolfile + + + diff --git a/tpt/html2.sql b/tpt/html2.sql new file mode 100644 index 0000000..40b1b86 --- /dev/null +++ b/tpt/html2.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +set markup HTML ON HEAD " - + - +SQL*Plus Report" - +BODY "" - +TABLE "border='1' align='center' summary='Script output'" - +SPOOL ON ENTMAP ON PREFORMAT OFF + +def _html_spoolfile=&_tpt_tempdir/html_&_tpt_tempfile..html +spool &_html_spoolfile + +l +/ + +spool off +set markup html off spool off +--host start %SQLPATH%\tmp\output_&_connect_identifier..html +host &_start &_html_spoolfile +set termout on diff --git a/tpt/html3.sql b/tpt/html3.sql new file mode 100644 index 0000000..e92f3aa --- /dev/null +++ b/tpt/html3.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off markup html on spool on +spool output_&_connect_identifier..html + +l +/ +spool off + +set termout on markup html off spool off +host start output_&_connect_identifier..html diff --git a/tpt/html_.sql b/tpt/html_.sql new file mode 100644 index 0000000..dabeec4 --- /dev/null +++ b/tpt/html_.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +set markup HTML ON HEAD " - + - +SQL*Plus Report" - +BODY "" - +TABLE "border='1' align='center' summary='Script output'" - +SPOOL ON ENTMAP ON PREFORMAT OFF + +spool %SQLPATH%\tmp\output_&_connect_identifier..html + +l +/ + +spool off +set markup html off spool off +host start %SQLPATH%\tmp\output_&_connect_identifier..html +set termout on diff --git a/tpt/html_settings.sql b/tpt/html_settings.sql new file mode 100644 index 0000000..b30e379 --- /dev/null +++ b/tpt/html_settings.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +define _htmlset2_cell_wrap=&1 +define _htmlset2_tab_bg=&2 +define _htmlset2_tab_fg=&3 + +set markup HTML "- +HEAD - + SQL*Plus Report" - +BODY "" - +TABLE "border='1' align='center' summary='Script output'" - +SPOOL ON ENTMAP ON PREFORMAT OFF + + +undefine _tpt_htmlon__cell_wrap +undefine _htmlset2_tab_bg +undefine _htmlset2_tab_fg diff --git a/tpt/htmloff.sql b/tpt/htmloff.sql new file mode 100644 index 0000000..27bfc68 --- /dev/null +++ b/tpt/htmloff.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set markup html off spool off diff --git a/tpt/htmlon.sql b/tpt/htmlon.sql new file mode 100644 index 0000000..7594021 --- /dev/null +++ b/tpt/htmlon.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set markup html on spool on diff --git a/tpt/htmlon_.sql b/tpt/htmlon_.sql new file mode 100644 index 0000000..aa42b3a --- /dev/null +++ b/tpt/htmlon_.sql @@ -0,0 +1,3 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + diff --git a/tpt/htmlrun.sql b/tpt/htmlrun.sql new file mode 100644 index 0000000..2b15071 --- /dev/null +++ b/tpt/htmlrun.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off +set markup HTML ON HEAD "&1" BODY "" TABLE "border='1' align='center' summary='Script output'" SPOOL ON ENTMAP ON PREFORMAT OFF + +def _htmlrun_spoolfile=&_tpt_tempdir/htmlrun_&_tpt_tempfile..html + +spool &_htmlrun_spoolfile + +prompt &1 + +clear buffer +1 &1 +/ + + +spool off +set markup html off spool off +host &_start &_htmlrun_spoolfile +set termout on diff --git a/tpt/htmlset.sql b/tpt/htmlset.sql new file mode 100644 index 0000000..74b1c8f --- /dev/null +++ b/tpt/htmlset.sql @@ -0,0 +1,7 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Parameter 1 [wrap|nowrap] +-- Parameter 2 Report title + +@@htmlset2 &1 "&2" #f7f7e7 black diff --git a/tpt/htmlset2.sql b/tpt/htmlset2.sql new file mode 100644 index 0000000..4fc29be --- /dev/null +++ b/tpt/htmlset2.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +define _htmlset2_cell_wrap=&1 +define _htmlset2_title="&2" +define _htmlset2_tab_bg=&3 +define _htmlset2_tab_fg=&4 + +set markup HTML - + HEAD " - + &_htmlset2_title" - +BODY "" - +TABLE "border='1' align='center' summary='Script output'" - +SPOOL ON ENTMAP ON PREFORMAT OFF + + +undefine _htmlset2_cell_wrap +undefine _htmlset2_title +undefine _htmlset2_tab_bg +undefine _htmlset2_tab_fg diff --git a/tpt/i.sql b/tpt/i.sql new file mode 100644 index 0000000..8c4b547 --- /dev/null +++ b/tpt/i.sql @@ -0,0 +1,91 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at https://blog.tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. + +-------------------------------------------------------------------------------- +-- +-- Name: i.sql +-- Purpose: the Who am I script (also sets terminal title) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Other: Some settings client OS specific (search for title) +-- +-------------------------------------------------------------------------------- + +def mysid="NA" +def _i_spid="NA" +def _i_cpid="NA" +def _i_opid="NA" +def _i_serial="NA" +def _i_inst="NA" +def _i_host="NA" +def _i_user="&_user" +def _i_conn="&_connect_identifier" + +col i_username head USERNAME for a20 +col i_sid head SID for a5 new_value mysid +col i_serial head "SERIAL#" for a8 new_value _i_serial +col i_cpid head CPID for a15 new_value _i_cpid +col i_spid head SPID for a10 new_value _i_spid +col i_opid head OPID for a5 new_value _i_opid +col i_host_name head HOST_NAME for a25 new_value _i_host truncate +--col i_instance_name head CON@INST_NAME for a20 new_value _i_inst +col i_instance_name head INST_NAME for a20 new_value _i_inst +col i_ver head VERSION for a10 +col i_startup_day head STARTED for a8 +col _i_user noprint new_value _i_user +col _i_conn noprint new_value _i_conn +col i_myoraver noprint new_value myoraver +col i_inst head I# FOR 99 +col i_db_role head DB_ROLE FOR A25 + +select + s.username i_username, +-- i.instance_name i_instance_name, + (CASE WHEN TO_NUMBER(SUBSTR(i.version, 1, instr(i.version,'.',1)-1)) >= 12 THEN (SELECT SYS_CONTEXT('userenv', 'con_name') FROM dual)||'-'||i.instance_name ELSE i.instance_name END) i_instance_name, + i.host_name i_host_name, + i.instance_number i_inst, + to_char(s.sid) i_sid, + to_char(s.serial#) i_serial, + (select substr(banner, instr(banner, 'Release ')+8,10) from v$version where rownum = 1) i_ver, + (select substr(substr(banner, instr(banner, 'Release ')+8), + 1, + instr(substr(banner, instr(banner, 'Release ')+8),'.')-1) + from v$version + where rownum = 1) i_myoraver, + to_char(startup_time, 'YYYYMMDD') i_startup_day, + trim(p.spid) i_spid, + trim(to_char(p.pid)) i_opid, + s.process i_cpid, + s.saddr saddr, + p.addr paddr, + --sys_context('userenv', 'database_role') i_db_role, + lower(s.username) "_i_user", + upper('&_connect_identifier') "_i_conn" +from + v$session s, + v$instance i, + v$process p +where + s.paddr = p.addr +and + sid = (select sid from v$mystat where rownum = 1); + +-- Windows CMD.exe specific stuff + +--host title &_i_user@&_i_conn [sid=&mysid ser#=&_i_serial spid=&_i_spid inst=&_i_inst host=&_i_host cpid=&_i_cpid opid=&_i_opid] +--host doskey /exename=sqlplus.exe desc=set lines 80 sqlprompt ""$Tdescribe $*$Tset lines 299 sqlprompt "SQL> " + +-- short xterm title +host echo -ne '\033]0;&_i_user@&_i_inst &mysid[&_i_spid]\007' +-- long xterm title +--host echo -ne "\033]0;host=&_i_host inst=&_i_inst sid=&mysid ser#=&_i_serial spid=&_i_spid cpid=&_i_cpid opid=&_i_opid\007" + + +def myopid=&_i_opid +def myspid=&_i_spid +def mycpid=&_i_cpid + +-- undef _i_spid _i_inst _i_host _i_user _i_conn _i_cpid + diff --git a/tpt/i2h.sql b/tpt/i2h.sql new file mode 100644 index 0000000..e1057e9 --- /dev/null +++ b/tpt/i2h.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: i2h.sql (sql Id to Hash value) +-- +-- Purpose: Advanced Oracle Troubleshooting Seminar demo script +-- to show that SQL_ID is just a fancy representation of a hash value +-- of a library cache object name. +-- +-- Converts SQL_ID to HASH_VALUE +-- +-- Usage: @i2h +-- +-- +-- Author: Tanel Poder ( http://www.tanelpoder.com ) +-- +-- Copyright: (c) 2007-2009 Tanel Poder +-- +-------------------------------------------------------------------------------- +select + trunc(mod(sum(( + instr('0123456789abcdfghjkmnpqrstuvwxyz',substr(lower(trim('&1')),level,1))-1)*power(32,length(trim('&1'))-level)),power(2,32))) hash_value + , lower(trim('&1')) sql_id +from + dual +connect by + level <= length(trim('&1')) +/ diff --git a/tpt/id.sql b/tpt/id.sql new file mode 100644 index 0000000..6111a9f --- /dev/null +++ b/tpt/id.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +EXEC DBMS_SESSION.SET_IDENTIFIER('&1'); diff --git a/tpt/ii.sql b/tpt/ii.sql new file mode 100644 index 0000000..7d9117e --- /dev/null +++ b/tpt/ii.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col ii_service_name head SERVICE_NAME for a20 +col ii_module head MODULE for a32 +col ii_action head ACTION for a32 +col ii_client_identifier head CLIENT_IDENTIFIER for a32 +col ii_client_info head CLIENT_INFO for a32 +col ii_program head PROGRAM for a20 truncate + +select + userenv('SID') sid , + userenv('SESSIONID') audsid, + '0x'||trim(to_char(userenv('SID'), 'XXXX')) "0xSID", + '0x'||trim(to_char(userenv('SESSIONID'), 'XXXXXXXX')) "0xAUDSID", + program ii_program, + module ii_module, + action ii_action, + service_name ii_service_name, + client_identifier ii_client_identifier, + client_info ii_client_info +from +-- v$session where audsid = sys_context('USERENV', 'SESSIONID') + v$session where sid = sys_context('USERENV', 'SID') +/ diff --git a/tpt/im/inmemory_cpu_counters.txt b/tpt/im/inmemory_cpu_counters.txt new file mode 100644 index 0000000..5614b4e --- /dev/null +++ b/tpt/im/inmemory_cpu_counters.txt @@ -0,0 +1,669 @@ +------------------------------------------------------------------------------------------- +-- +-- File name: inmemory_cpu_counters.txt +-- Purpose: Experiment log showing different memory access patterns for row-oriented vs. +-- column-oriented memory structures (using Oracle Database 12c In-Memory Option +-- as an example) +-- +-- Author: Tanel Poder +-- Source: http://blog.tanelpoder.com/2015/08/10/ram-is-the-new-disk-and-how-to-measure-its-performance-part-2 +-- +------------------------------------------------------------------------------------------- + +=========================================================================================== +-- INDEX RANGE SCAN BAD CLUSTERING FACTOR: +=========================================================================================== + +SELECT /*+ MONITOR INDEX(c(cust_postal_code)) */ COUNT(cust_valid) FROM customers_nopart c WHERE cust_postal_code > '0' + +Global Information +------------------------------ + Status : DONE (ALL ROWS) + Instance ID : 1 + Session : TANEL (1090:40133) + SQL ID : gk9f8nzq8dvy0 + SQL Execution ID : 16777219 + Execution Started : 11/01/2014 20:47:45 + First Refresh Time : 11/01/2014 20:47:45 + Last Refresh Time : 11/01/2014 20:49:49 + Duration : 124s + Module/Action : SQL*Plus/- + Service : dw + Program : sqlplus@mac01 (TNS V1-V3) + Fetch Calls : 1 + +Global Stats +================================================= +| Elapsed | Cpu | Other | Fetch | Buffer | +| Time(s) | Time(s) | Waits(s) | Calls | Gets | +================================================= +| 124 | 123 | 0.41 | 1 | 70M | +================================================= + +SQL Plan Monitoring Details (Plan Hash Value=562509776) +=============================================================================================================================================================== +| Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Activity | Activity Detail | +| | | | (Estim) | | Active(s) | Active | | (Actual) | (%) | (# samples) | +=============================================================================================================================================================== +| 0 | SELECT STATEMENT | | | | 123 | +2 | 1 | 1 | | | +| 1 | SORT AGGREGATE | | 1 | | 123 | +2 | 1 | 1 | | | +| 2 | TABLE ACCESS BY INDEX ROWID BATCHED | CUSTOMERS_NOPART | 70M | 70M | 123 | +2 | 1 | 70M | | | +| 3 | INDEX RANGE SCAN | CUSTOMERS_NP_POSTALCODE | 70M | 185K | 123 | +2 | 1 | 70M | | | +=============================================================================================================================================================== + +-- Session Snapper v4.15 BETA - by Tanel Poder ( http://blog.tanelpoder.com ) - Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :) + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + SID @INST, USERNAME , TYPE, STATISTIC , DELTA, HDELTA/SEC, %TIME, GRAPH , NUM_WAITS, WAITS/SEC, AVERAGES +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 1090 @1, TANEL , STAT, Requests to/from client , 1, .01, , , , , ~ per execution + 1090 @1, TANEL , STAT, user calls , 1, .01, , , , , ~ per execution + 1090 @1, TANEL , STAT, pinned cursors current , -1, -.01, , , , , ~ per execution + 1090 @1, TANEL , STAT, session logical reads , 64245093, 491.59k, , , , , 128.24M total buffer visits + 1090 @1, TANEL , STAT, CPU used when call started , 12343, 94.45, , , , , ~ per execution + 1090 @1, TANEL , STAT, CPU used by this session , 12343, 94.45, , , , , ~ per execution + 1090 @1, TANEL , STAT, DB time , 12381, 94.74, , , , , ~ per execution + 1090 @1, TANEL , STAT, non-idle wait count , 1, .01, , , , , ~ per execution + 1090 @1, TANEL , STAT, consistent gets , 64243699, 491.58k, , , , , ~ per execution + 1090 @1, TANEL , STAT, consistent gets from cache , 64243681, 491.58k, , , , , ~ per execution + 1090 @1, TANEL , STAT, consistent gets pin , 64243662, 491.58k, , , , , ~ per execution + 1090 @1, TANEL , STAT, consistent gets pin (fastpath) , 64243643, 491.58k, , , , , ~ per execution + 1090 @1, TANEL , STAT, logical read bytes from cache , 526283096064, 4.03G, , , , , ~ per execution + 1090 @1, TANEL , STAT, calls to kcmgcs , 1, .01, , , , , ~ per execution + 1090 @1, TANEL , STAT, no work - consistent read gets , 64227578, 491.46k, , , , , ~ per execution + 1090 @1, TANEL , STAT, Cached Commit SCN referenced , 64055061, 490.14k, , , , , ~ per execution + 1090 @1, TANEL , STAT, table fetch by rowid , 64042000, 490.04k, , , , , ~ per execution + 1090 @1, TANEL , STAT, buffer is pinned count , 63997504, 489.7k, , , , , 49.9 % buffer gets avoided thanks to buffer pin caching + 1090 @1, TANEL , STAT, buffer is not pinned count , 63997201, 489.69k, , , , , ~ per execution + 1090 @1, TANEL , STAT, bytes sent via SQL*Net to client , 346, 2.65, , , , , 173 bytes per roundtrip + 1090 @1, TANEL , STAT, bytes received via SQL*Net from client , 11, .08, , , , , 5.5 bytes per roundtrip + 1090 @1, TANEL , STAT, SQL*Net roundtrips to/from client , 2, .02, , , , , ~ per execution + 1090 @1, TANEL , TIME, DB CPU , 113788701, 870.69ms, 87.1%, [@@@@@@@@@ ], , , + 1090 @1, TANEL , TIME, sql execute elapsed time , 114166251, 873.58ms, 87.4%, [######### ], , , + 1090 @1, TANEL , TIME, DB time , 114166302, 873.58ms, 87.4%, [######### ], , , -.44 % unaccounted time + 1090 @1, TANEL , WAIT, SQL*Net message to client , 3, .02us, .0%, [ ], 1, .01, 3us average wait + 1090 @1, TANEL , WAIT, SQL*Net message from client , 17099937, 130.85ms, 13.1%, [WW ], 1, .01, 17.1s average wait + +-- End of Stats snap 1, end=2014-11-01 20:50:06, seconds=130.7 + + Performance counter stats for process id '34783': + + 123439.521472 task-clock # 0.950 CPUs utilized + 391,579,324,969 cycles # 3.172 GHz [33.33%] + 288,941,288,284 instructions # 0.74 insns per cycle + # 1.01 stalled cycles per insn [39.99%] + 58,376,159,852 branches # 472.913 M/sec [39.98%] + 175,115,325 branch-misses # 0.30% of all branches [39.99%] + 292,420,163,881 stalled-cycles-frontend # 74.68% frontend cycles idle [40.00%] + 203,595,215,084 stalled-cycles-backend # 51.99% backend cycles idle [40.00%] + 1,538,720,017 cache-references # 12.465 M/sec [26.67%] + 1,231,807,162 cache-misses # 80.054 % of all cache refs [26.67%] + 1,314,782,881 LLC-loads # 10.651 M/sec [26.67%] + 1,117,647,753 LLC-load-misses # 85.01% of all LL-cache hits [ 6.67%] + 428,372,373 LLC-stores # 3.470 M/sec [ 6.67%] + 112,819,593 LLC-store-misses # 0.914 M/sec [ 6.67%] + 88,635,191,682 L1-dcache-loads # 718.045 M/sec [13.33%] + 2,381,219,491 L1-dcache-load-misses # 2.69% of all L1-dcache hits [20.00%] + 124,654,979 L1-dcache-prefetches # 1.010 M/sec [26.66%] + + 130.000627586 seconds time elapsed + + + +=========================================================================================== +-- INDEX RANGE SCAN GOOD CLUSTERING FACTOR +=========================================================================================== + +SELECT /*+ MONITOR INDEX(c(cust_id)) */ COUNT(cust_valid) FROM customers_nopart c WHERE cust_id > 0 + +Global Information +------------------------------ + Status : DONE (ALL ROWS) + Instance ID : 1 + Session : TANEL (1090:40133) + SQL ID : 4kx4gus4sb2cu + SQL Execution ID : 16777219 + Execution Started : 11/01/2014 21:05:44 + First Refresh Time : 11/01/2014 21:05:44 + Last Refresh Time : 11/01/2014 21:06:23 + Duration : 39s + Module/Action : SQL*Plus/- + Service : dw + Program : sqlplus@mac01 (TNS V1-V3) + Fetch Calls : 1 + +Global Stats +================================================= +| Elapsed | Cpu | Other | Fetch | Buffer | +| Time(s) | Time(s) | Waits(s) | Calls | Gets | +================================================= +| 39 | 39 | 0.27 | 1 | 10M | +================================================= + +SQL Plan Monitoring Details (Plan Hash Value=740244311) +======================================================================================================================================================== +| Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Activity | Activity Detail | +| | | | (Estim) | | Active(s) | Active | | (Actual) | (%) | (# samples) | +======================================================================================================================================================== +| 0 | SELECT STATEMENT | | | | 38 | +2 | 1 | 1 | | | +| 1 | SORT AGGREGATE | | 1 | | 38 | +2 | 1 | 1 | | | +| 2 | TABLE ACCESS BY INDEX ROWID BATCHED | CUSTOMERS_NOPART | 70M | 10M | 40 | +1 | 1 | 70M | 89.74 | Cpu (35) | +| 3 | INDEX RANGE SCAN | CUSTOMERS_NP_ID | 70M | 169K | 38 | +2 | 1 | 70M | 10.26 | Cpu (4) | +======================================================================================================================================================== + +-- Session Snapper v4.15 BETA - by Tanel Poder ( http://blog.tanelpoder.com ) - Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :) + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + SID @INST, USERNAME , TYPE, STATISTIC , DELTA, HDELTA/SEC, %TIME, GRAPH , NUM_WAITS, WAITS/SEC, AVERAGES +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 1090 @1, TANEL , STAT, Requests to/from client , 2, .04, , , , , 2 per execution + 1090 @1, TANEL , STAT, opened cursors cumulative , 1, .02, , , , , 1 per execution + 1090 @1, TANEL , STAT, user calls , 3, .06, , , , , 3 per execution + 1090 @1, TANEL , STAT, session logical reads , 10224446, 205.83k, , , , , 139.45M total buffer visits + 1090 @1, TANEL , STAT, CPU used when call started , 3884, 78.19, , , , , 3.88k per execution + 1090 @1, TANEL , STAT, CPU used by this session , 3884, 78.19, , , , , 3.88k per execution + 1090 @1, TANEL , STAT, DB time , 3911, 78.73, , , , , 3.91k per execution + 1090 @1, TANEL , STAT, non-idle wait count , 2, .04, , , , , 2 per execution + 1090 @1, TANEL , STAT, consistent gets , 10224446, 205.83k, , , , , 10.22M per execution + 1090 @1, TANEL , STAT, consistent gets from cache , 10224446, 205.83k, , , , , 10.22M per execution + 1090 @1, TANEL , STAT, consistent gets pin , 10224444, 205.83k, , , , , 10.22M per execution + 1090 @1, TANEL , STAT, consistent gets pin (fastpath) , 10224444, 205.83k, , , , , 10.22M per execution + 1090 @1, TANEL , STAT, consistent gets examination , 2, .04, , , , , 2 per execution + 1090 @1, TANEL , STAT, consistent gets examination (fastpath) , 2, .04, , , , , 2 per execution + 1090 @1, TANEL , STAT, logical read bytes from cache , 83758661632, 1.69G, , , , , 83.76G per execution + 1090 @1, TANEL , STAT, calls to kcmgcs , 1, .02, , , , , 1 per execution + 1090 @1, TANEL , STAT, calls to get snapshot scn: kcmgss , 1, .02, , , , , 1 per execution + 1090 @1, TANEL , STAT, no work - consistent read gets , 10224444, 205.83k, , , , , 10.22M per execution + 1090 @1, TANEL , STAT, Cached Commit SCN referenced , 10055979, 202.44k, , , , , 10.06M per execution + 1090 @1, TANEL , STAT, table fetch by rowid , 69642625, 1.4M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, index scans kdiixs1 , 1, .02, , , , , 1 per execution + 1090 @1, TANEL , STAT, session cursor cache hits , 1, .02, , , , , 0 softparses avoided thanks to cursor cache + 1090 @1, TANEL , STAT, session cursor cache count , -1, -.02, , , , , -1 per execution + 1090 @1, TANEL , STAT, buffer is pinned count , 129229109, 2.6M, , , , , 92.67 % buffer gets avoided thanks to buffer pin caching + 1090 @1, TANEL , STAT, buffer is not pinned count , 10056142, 202.45k, , , , , 10.06M per execution + 1090 @1, TANEL , STAT, parse count (total) , 1, .02, , , , , ~ softparses per hardparse + 1090 @1, TANEL , STAT, execute count , 1, .02, , , , , 1 executions per parse + 1090 @1, TANEL , STAT, bytes sent via SQL*Net to client , 347, 6.99, , , , , 173.5 bytes per roundtrip + 1090 @1, TANEL , STAT, bytes received via SQL*Net from client , 234, 4.71, , , , , 117 bytes per roundtrip + 1090 @1, TANEL , STAT, SQL*Net roundtrips to/from client , 2, .04, , , , , 2 per execution + 1090 @1, TANEL , TIME, parse time elapsed , 22, .44us, .0%, [ ], , , + 1090 @1, TANEL , TIME, DB CPU , 38844095, 781.99ms, 78.2%, [@@@@@@@@ ], , , + 1090 @1, TANEL , TIME, sql execute elapsed time , 39112343, 787.4ms, 78.7%, [######## ], , , + 1090 @1, TANEL , TIME, DB time , 39112520, 787.4ms, 78.7%, [######## ], , , 1.07 % unaccounted time + 1090 @1, TANEL , WAIT, SQL*Net message to client , 6, .12us, .0%, [ ], 2, .04, 3us average wait + 1090 @1, TANEL , WAIT, SQL*Net message from client , 10029538, 201.91ms, 20.2%, [WW ], 2, .04, 5.01s average wait + +-- End of Stats snap 1, end=2014-11-01 21:06:33, seconds=49.7 + + + Performance counter stats for process id '34783': + + 38808.299326 task-clock # 0.776 CPUs utilized + 121,801,871,718 cycles # 3.139 GHz [33.33%] + 151,255,447,172 instructions # 1.24 insns per cycle + # 0.49 stalled cycles per insn [40.00%] + 30,293,259,230 branches # 780.587 M/sec [39.97%] + 49,678,230 branch-misses # 0.16% of all branches [39.96%] + 74,585,632,121 stalled-cycles-frontend # 61.24% frontend cycles idle [39.96%] + 44,415,389,634 stalled-cycles-backend # 36.47% backend cycles idle [39.97%] + 328,576,324 cache-references # 8.467 M/sec [26.67%] + 245,481,047 cache-misses # 74.711 % of all cache refs [26.66%] + 284,245,214 LLC-loads # 7.324 M/sec [26.66%] + 241,085,971 LLC-load-misses # 84.82% of all LL-cache hits [ 6.68%] + 33,948,502 LLC-stores # 0.875 M/sec [ 6.67%] + 3,964,463 LLC-store-misses # 0.102 M/sec [ 6.68%] + 43,834,061,296 L1-dcache-loads # 1129.502 M/sec [13.36%] + 515,048,945 L1-dcache-load-misses # 1.17% of all L1-dcache hits [20.03%] + 73,912,228 L1-dcache-prefetches # 1.905 M/sec [26.69%] + + 50.000646188 seconds time elapsed + + + +=========================================================================================== +-- FULL TABLE SCAN BUFFER CACHE (NO INMEMORY) +=========================================================================================== +SELECT /*+ MONITOR FULL(c) NO_INMEMORY */ COUNT(cust_valid) FROM customers_nopart c WHERE cust_id > 0 + +Global Information +------------------------------ + Status : DONE (ALL ROWS) + Instance ID : 1 + Session : TANEL (1090:40133) + SQL ID : avvyqpkjthqwd + SQL Execution ID : 16777224 + Execution Started : 11/01/2014 21:13:37 + First Refresh Time : 11/01/2014 21:13:37 + Last Refresh Time : 11/01/2014 21:14:05 + Duration : 28s + Module/Action : SQL*Plus/- + Service : dw + Program : sqlplus@mac01 (TNS V1-V3) + Fetch Calls : 1 + +Global Stats +================================================= +| Elapsed | Cpu | Other | Fetch | Buffer | +| Time(s) | Time(s) | Waits(s) | Calls | Gets | +================================================= +| 27 | 27 | 0.09 | 1 | 2M | +================================================= + +SQL Plan Monitoring Details (Plan Hash Value=874904094) +=============================================================================================================================================== +| Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Activity | Activity Detail | +| | | | (Estim) | | Active(s) | Active | | (Actual) | (%) | (# samples) | +=============================================================================================================================================== +| 0 | SELECT STATEMENT | | | | 27 | +2 | 1 | 1 | | | +| 1 | SORT AGGREGATE | | 1 | | 27 | +2 | 1 | 1 | | | +| 2 | TABLE ACCESS STORAGE FULL | CUSTOMERS_NOPART | 70M | 25410 | 28 | +1 | 1 | 70M | 100.00 | Cpu (27) | +=============================================================================================================================================== + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + SID @INST, USERNAME , TYPE, STATISTIC , DELTA, HDELTA/SEC, %TIME, GRAPH , NUM_WAITS, WAITS/SEC, AVERAGES +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 1090 @1, TANEL , STAT, Requests to/from client , 2, .07, , , , , 2 per execution + 1090 @1, TANEL , STAT, opened cursors cumulative , 1, .03, , , , , 1 per execution + 1090 @1, TANEL , STAT, user calls , 3, .1, , , , , 3 per execution + 1090 @1, TANEL , STAT, session logical reads , 1611874, 54.55k, , , , , 1.61M total buffer visits + 1090 @1, TANEL , STAT, CPU used when call started , 2737, 92.62, , , , , 2.74k per execution + 1090 @1, TANEL , STAT, CPU used by this session , 2737, 92.62, , , , , 2.74k per execution + 1090 @1, TANEL , STAT, DB time , 2745, 92.89, , , , , 2.75k per execution + 1090 @1, TANEL , STAT, non-idle wait count , 2, .07, , , , , 2 per execution + 1090 @1, TANEL , STAT, consistent gets , 1611874, 54.55k, , , , , 1.61M per execution + 1090 @1, TANEL , STAT, consistent gets from cache , 1611874, 54.55k, , , , , 1.61M per execution + 1090 @1, TANEL , STAT, consistent gets pin , 1611874, 54.55k, , , , , 1.61M per execution + 1090 @1, TANEL , STAT, consistent gets pin (fastpath) , 1611874, 54.55k, , , , , 1.61M per execution + 1090 @1, TANEL , STAT, logical read bytes from cache , 13204471808, 446.85M, , , , , 13.2G per execution + 1090 @1, TANEL , STAT, calls to kcmgcs , 83, 2.81, , , , , 83 per execution + 1090 @1, TANEL , STAT, calls to get snapshot scn: kcmgss , 1, .03, , , , , 1 per execution + 1090 @1, TANEL , STAT, no work - consistent read gets , 1611792, 54.54k, , , , , 1.61M per execution + 1090 @1, TANEL , STAT, Cached Commit SCN referenced , 1609962, 54.48k, , , , , 1.61M per execution + 1090 @1, TANEL , STAT, table scans (cache partitions) , 1, .03, , , , , 1 per execution + 1090 @1, TANEL , STAT, table scan rows gotten , 69642625, 2.36M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, table scan disk non-IMC rows gotten , 69642625, 2.36M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, table scan blocks gotten , 1611792, 54.54k, , , , , 1.61M per execution + 1090 @1, TANEL , STAT, IM scan segments disk , 1, .03, , , , , 1 per execution + 1090 @1, TANEL , STAT, session cursor cache hits , 1, .03, , , , , 0 softparses avoided thanks to cursor cache + 1090 @1, TANEL , STAT, parse count (total) , 1, .03, , , , , ~ softparses per hardparse + 1090 @1, TANEL , STAT, execute count , 1, .03, , , , , 1 executions per parse + 1090 @1, TANEL , STAT, bytes sent via SQL*Net to client , 347, 11.74, , , , , 173.5 bytes per roundtrip + 1090 @1, TANEL , STAT, bytes received via SQL*Net from client , 236, 7.99, , , , , 118 bytes per roundtrip + 1090 @1, TANEL , STAT, SQL*Net roundtrips to/from client , 2, .07, , , , , 2 per execution + 1090 @1, TANEL , TIME, parse time elapsed , 23, .78us, .0%, [ ], , , + 1090 @1, TANEL , TIME, DB CPU , 27370839, 926.25ms, 92.6%, [@@@@@@@@@@], , , + 1090 @1, TANEL , TIME, sql execute elapsed time , 27462662, 929.36ms, 92.9%, [##########], , , + 1090 @1, TANEL , TIME, DB time , 27462864, 929.36ms, 92.9%, [##########], , , -.5 % unaccounted time + 1090 @1, TANEL , WAIT, SQL*Net message to client , 7, .24us, .0%, [ ], 2, .07, 3.5us average wait + 1090 @1, TANEL , WAIT, SQL*Net message from client , 2236160, 75.67ms, 7.6%, [W ], 2, .07, 1.12s average wait + +-- End of Stats snap 1, end=2014-11-01 21:14:06, seconds=29.6 + + Performance counter stats for process id '34783': + + 27373.819908 task-clock # 0.912 CPUs utilized + 86,428,653,040 cycles # 3.157 GHz [33.33%] + 32,115,412,877 instructions # 0.37 insns per cycle + # 2.39 stalled cycles per insn [40.00%] + 7,386,220,210 branches # 269.828 M/sec [39.99%] + 22,056,397 branch-misses # 0.30% of all branches [40.00%] + 76,697,049,420 stalled-cycles-frontend # 88.74% frontend cycles idle [40.00%] + 58,627,393,395 stalled-cycles-backend # 67.83% backend cycles idle [40.00%] + 256,440,384 cache-references # 9.368 M/sec [26.67%] + 222,036,981 cache-misses # 86.584 % of all cache refs [26.66%] + 234,361,189 LLC-loads # 8.562 M/sec [26.66%] + 218,570,294 LLC-load-misses # 93.26% of all LL-cache hits [ 6.67%] + 18,493,582 LLC-stores # 0.676 M/sec [ 6.67%] + 3,233,231 LLC-store-misses # 0.118 M/sec [ 6.67%] + 7,324,946,042 L1-dcache-loads # 267.589 M/sec [13.33%] + 305,276,341 L1-dcache-load-misses # 4.17% of all L1-dcache hits [20.00%] + 36,890,302 L1-dcache-prefetches # 1.348 M/sec [26.66%] + + 30.000601214 seconds time elapsed + + + + +===================================================================== +-- full table scan IN MEMORY with WHERE cust_id > 0 +===================================================================== + +SELECT /*+ MONITOR FULL(c) INMEMORY */ COUNT(cust_valid) FROM customers_nopart c WHERE cust_id > 0 + +Global Information +------------------------------ + Status : DONE (ALL ROWS) + Instance ID : 1 + Session : TANEL (1090:40133) + SQL ID : 3s5ur1b0pg42x + SQL Execution ID : 16777227 + Execution Started : 11/01/2014 21:16:32 + First Refresh Time : 11/01/2014 21:16:32 + Last Refresh Time : 11/01/2014 21:16:33 + Duration : 1s + Module/Action : SQL*Plus/- + Service : dw + Program : sqlplus@mac01 (TNS V1-V3) + Fetch Calls : 1 + +Global Stats +================================================= +| Elapsed | Cpu | Other | Fetch | Buffer | +| Time(s) | Time(s) | Waits(s) | Calls | Gets | +================================================= +| 1.58 | 1.58 | 0.01 | 1 | 4 | +================================================= + +SQL Plan Monitoring Details (Plan Hash Value=874904094) +================================================================================================================================================ +| Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Activity | Activity Detail | +| | | | (Estim) | | Active(s) | Active | | (Actual) | (%) | (# samples) | +================================================================================================================================================ +| 0 | SELECT STATEMENT | | | | 1 | +1 | 1 | 1 | | | +| 1 | SORT AGGREGATE | | 1 | | 1 | +1 | 1 | 1 | | | +| 2 | TABLE ACCESS INMEMORY FULL | CUSTOMERS_NOPART | 70M | 21023 | 1 | +1 | 1 | 70M | 100.00 | in memory (1) | +================================================================================================================================================ + + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + SID @INST, USERNAME , TYPE, STATISTIC , DELTA, HDELTA/SEC, %TIME, GRAPH , NUM_WAITS, WAITS/SEC, AVERAGES +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 1090 @1, TANEL , STAT, Requests to/from client , 2, .44, , , , , 2 per execution + 1090 @1, TANEL , STAT, opened cursors cumulative , 1, .22, , , , , 1 per execution + 1090 @1, TANEL , STAT, user calls , 3, .65, , , , , 3 per execution + 1090 @1, TANEL , STAT, session logical reads , 1611796, 351.88k, , , , , 1.61M total buffer visits + 1090 @1, TANEL , STAT, CPU used when call started , 157, 34.28, , , , , 157 per execution + 1090 @1, TANEL , STAT, CPU used by this session , 157, 34.28, , , , , 157 per execution + 1090 @1, TANEL , STAT, DB time , 159, 34.71, , , , , 159 per execution + 1090 @1, TANEL , STAT, non-idle wait count , 2, .44, , , , , 2 per execution + 1090 @1, TANEL , STAT, consistent gets , 4, .87, , , , , 4 per execution + 1090 @1, TANEL , STAT, consistent gets from cache , 4, .87, , , , , 4 per execution + 1090 @1, TANEL , STAT, consistent gets pin , 4, .87, , , , , 4 per execution + 1090 @1, TANEL , STAT, consistent gets pin (fastpath) , 4, .87, , , , , 4 per execution + 1090 @1, TANEL , STAT, logical read bytes from cache , 32768, 7.15k, , , , , 32.77k per execution + 1090 @1, TANEL , STAT, calls to kcmgcs , 5, 1.09, , , , , 5 per execution + 1090 @1, TANEL , STAT, calls to get snapshot scn: kcmgss , 1, .22, , , , , 1 per execution + 1090 @1, TANEL , STAT, table scans (IM) , 1, .22, , , , , 1 per execution + 1090 @1, TANEL , STAT, table scans (cache partitions) , 1, .22, , , , , 1 per execution + 1090 @1, TANEL , STAT, table scan rows gotten , 69642625, 15.2M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, IM scan CUs memcompress for query low , 132, 28.82, , , , , 132 per execution + 1090 @1, TANEL , STAT, session logical reads - IM , 1611792, 351.88k, , , , , 1.61M per execution + 1090 @1, TANEL , STAT, IM scan bytes in-memory , 6119772418, 1.34G, , , , , 6.12G per execution + 1090 @1, TANEL , STAT, IM scan bytes uncompressed , 12430227889, 2.71G, , , , , 12.43G per execution + 1090 @1, TANEL , STAT, IM scan CUs columns accessed , 264, 57.63, , , , , 264 per execution + 1090 @1, TANEL , STAT, IM scan CUs columns theoretical max , 3036, 662.8, , , , , 3.04k per execution + 1090 @1, TANEL , STAT, IM scan rows , 69642625, 15.2M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, IM scan rows valid , 69642625, 15.2M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, IM scan rows projected , 69642625, 15.2M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, IM scan CUs split pieces , 133, 29.04, , , , , 133 per execution + 1090 @1, TANEL , STAT, IM scan CUs predicates received , 132, 28.82, , , , , 132 per execution + 1090 @1, TANEL , STAT, IM scan CUs predicates applied , 132, 28.82, , , , , 132 per execution + 1090 @1, TANEL , STAT, IM scan CUs predicates optimized , 132, 28.82, , , , , 132 per execution + 1090 @1, TANEL , STAT, IM scan CUs optimized read , 132, 28.82, , , , , 132 per execution + 1090 @1, TANEL , STAT, IM scan segments minmax eligible , 132, 28.82, , , , , 132 per execution + 1090 @1, TANEL , STAT, session cursor cache hits , 1, .22, , , , , 0 softparses avoided thanks to cursor cache + 1090 @1, TANEL , STAT, parse count (total) , 1, .22, , , , , ~ softparses per hardparse + 1090 @1, TANEL , STAT, execute count , 1, .22, , , , , 1 executions per parse + 1090 @1, TANEL , STAT, bytes sent via SQL*Net to client , 347, 75.75, , , , , 173.5 bytes per roundtrip + 1090 @1, TANEL , STAT, bytes received via SQL*Net from client , 233, 50.87, , , , , 116.5 bytes per roundtrip + 1090 @1, TANEL , STAT, SQL*Net roundtrips to/from client , 2, .44, , , , , 2 per execution + 1090 @1, TANEL , TIME, parse time elapsed , 24, 5.24us, .0%, [ ], , , + 1090 @1, TANEL , TIME, DB CPU , 1577759, 344.45ms, 34.4%, [@@@@ ], , , + 1090 @1, TANEL , TIME, sql execute elapsed time , 1582071, 345.39ms, 34.5%, [#### ], , , + 1090 @1, TANEL , TIME, DB time , 1582277, 345.43ms, 34.5%, [#### ], , , -18.05 % unaccounted time + 1090 @1, TANEL , WAIT, SQL*Net message to client , 7, 1.53us, .0%, [ ], 2, .44, 3.5us average wait + 1090 @1, TANEL , WAIT, SQL*Net message from client , 3825232, 835.1ms, 83.5%, [WWWWWWWWW ], 2, .44, 1.91s average wait + +-- End of Stats snap 1, end=2014-11-01 21:16:37, seconds=4.6 + + Performance counter stats for process id '34783': + + 1577.838461 task-clock # 0.316 CPUs utilized + 4,573,793,724 cycles # 2.899 GHz [33.36%] + 7,080,326,242 instructions # 1.55 insns per cycle + # 0.32 stalled cycles per insn [40.06%] + 940,579,984 branches # 596.119 M/sec [40.09%] + 4,637,243 branch-misses # 0.49% of all branches [40.14%] + 2,251,325,295 stalled-cycles-frontend # 49.22% frontend cycles idle [40.17%] + 1,328,333,827 stalled-cycles-backend # 29.04% backend cycles idle [40.21%] + 11,507,915 cache-references # 7.293 M/sec [26.81%] + 7,316,366 cache-misses # 63.577 % of all cache refs [26.77%] + 9,712,269 LLC-loads # 6.155 M/sec [26.71%] + 7,272,805 LLC-load-misses # 74.88% of all LL-cache hits [ 6.64%] + 1,697,666 LLC-stores # 1.076 M/sec [ 6.69%] + 27,797 LLC-store-misses # 0.018 M/sec [ 6.68%] + 1,069,917,316 L1-dcache-loads # 678.091 M/sec [13.35%] + 85,368,159 L1-dcache-load-misses # 7.98% of all L1-dcache hits [20.02%] + 25,169,253 L1-dcache-prefetches # 15.952 M/sec [26.67%] + + 5.000649098 seconds time elapsed + + + + +==================================================================================== +-- full table scan IN MEMORY without WHERE clause +==================================================================================== + +SELECT /*+ MONITOR FULL(c) INMEMORY */ COUNT(cust_valid) FROM customers_nopart c + +Global Information +------------------------------ + Status : DONE (ALL ROWS) + Instance ID : 1 + Session : TANEL (1090:40133) + SQL ID : 8gz633m1gsjk9 + SQL Execution ID : 16777237 + Execution Started : 11/01/2014 21:25:39 + First Refresh Time : 11/01/2014 21:25:39 + Last Refresh Time : 11/01/2014 21:25:39 + Duration : .478062s + Module/Action : SQL*Plus/- + Service : dw + Program : sqlplus@mac01 (TNS V1-V3) + Fetch Calls : 1 + +Global Stats +================================================= +| Elapsed | Cpu | Other | Fetch | Buffer | +| Time(s) | Time(s) | Waits(s) | Calls | Gets | +================================================= +| 0.48 | 0.48 | 0.00 | 1 | 4 | +================================================= + +SQL Plan Monitoring Details (Plan Hash Value=874904094) +================================================================================================================================================ +| Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Activity | Activity Detail | +| | | | (Estim) | | Active(s) | Active | | (Actual) | (%) | (# samples) | +================================================================================================================================================ +| 0 | SELECT STATEMENT | | | | 1 | +0 | 1 | 1 | | | +| 1 | SORT AGGREGATE | | 1 | | 1 | +0 | 1 | 1 | | | +| 2 | TABLE ACCESS INMEMORY FULL | CUSTOMERS_NOPART | 70M | 20615 | 1 | +0 | 1 | 70M | 100.00 | in memory (1) | +================================================================================================================================================ + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + SID @INST, USERNAME , TYPE, STATISTIC , DELTA, HDELTA/SEC, %TIME, GRAPH , NUM_WAITS, WAITS/SEC, AVERAGES +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 1090 @1, TANEL , STAT, Requests to/from client , 2, .42, , , , , 2 per execution + 1090 @1, TANEL , STAT, opened cursors cumulative , 1, .21, , , , , 1 per execution + 1090 @1, TANEL , STAT, user calls , 3, .63, , , , , 3 per execution + 1090 @1, TANEL , STAT, session logical reads , 1611796, 339.65k, , , , , 1.61M total buffer visits + 1090 @1, TANEL , STAT, CPU used when call started , 48, 10.11, , , , , 48 per execution + 1090 @1, TANEL , STAT, CPU used by this session , 48, 10.11, , , , , 48 per execution + 1090 @1, TANEL , STAT, DB time , 48, 10.11, , , , , 48 per execution + 1090 @1, TANEL , STAT, non-idle wait count , 2, .42, , , , , 2 per execution + 1090 @1, TANEL , STAT, consistent gets , 4, .84, , , , , 4 per execution + 1090 @1, TANEL , STAT, consistent gets from cache , 4, .84, , , , , 4 per execution + 1090 @1, TANEL , STAT, consistent gets pin , 4, .84, , , , , 4 per execution + 1090 @1, TANEL , STAT, consistent gets pin (fastpath) , 4, .84, , , , , 4 per execution + 1090 @1, TANEL , STAT, logical read bytes from cache , 32768, 6.91k, , , , , 32.77k per execution + 1090 @1, TANEL , STAT, calls to kcmgcs , 5, 1.05, , , , , 5 per execution + 1090 @1, TANEL , STAT, calls to get snapshot scn: kcmgss , 1, .21, , , , , 1 per execution + 1090 @1, TANEL , STAT, table scans (IM) , 1, .21, , , , , 1 per execution + 1090 @1, TANEL , STAT, table scans (cache partitions) , 1, .21, , , , , 1 per execution + 1090 @1, TANEL , STAT, table scan rows gotten , 69642625, 14.68M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, IM scan CUs memcompress for query low , 132, 27.82, , , , , 132 per execution + 1090 @1, TANEL , STAT, session logical reads - IM , 1611792, 339.65k, , , , , 1.61M per execution + 1090 @1, TANEL , STAT, IM scan bytes in-memory , 6119772418, 1.29G, , , , , 6.12G per execution + 1090 @1, TANEL , STAT, IM scan bytes uncompressed , 12430227889, 2.62G, , , , , 12.43G per execution + 1090 @1, TANEL , STAT, IM scan CUs columns accessed , 132, 27.82, , , , , 132 per execution + 1090 @1, TANEL , STAT, IM scan CUs columns theoretical max , 3036, 639.77, , , , , 3.04k per execution + 1090 @1, TANEL , STAT, IM scan rows , 69642625, 14.68M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, IM scan rows valid , 69642625, 14.68M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, IM scan rows projected , 69642625, 14.68M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, IM scan CUs split pieces , 133, 28.03, , , , , 133 per execution + 1090 @1, TANEL , STAT, session cursor cache hits , 1, .21, , , , , 0 softparses avoided thanks to cursor cache + 1090 @1, TANEL , STAT, parse count (total) , 1, .21, , , , , ~ softparses per hardparse + 1090 @1, TANEL , STAT, execute count , 1, .21, , , , , 1 executions per parse + 1090 @1, TANEL , STAT, bytes sent via SQL*Net to client , 347, 73.12, , , , , 173.5 bytes per roundtrip + 1090 @1, TANEL , STAT, bytes received via SQL*Net from client , 215, 45.31, , , , , 107.5 bytes per roundtrip + 1090 @1, TANEL , STAT, SQL*Net roundtrips to/from client , 2, .42, , , , , 2 per execution + 1090 @1, TANEL , TIME, parse time elapsed , 21, 4.43us, .0%, [ ], , , + 1090 @1, TANEL , TIME, DB CPU , 476928, 100.5ms, 10.1%, [@ ], , , + 1090 @1, TANEL , TIME, sql execute elapsed time , 478095, 100.75ms, 10.1%, [# ], , , + 1090 @1, TANEL , TIME, DB time , 478272, 100.78ms, 10.1%, [# ], , , -18.03 % unaccounted time + 1090 @1, TANEL , WAIT, SQL*Net message to client , 6, 1.26us, .0%, [ ], 2, .42, 3us average wait + 1090 @1, TANEL , WAIT, SQL*Net message from client , 5122919, 1.08s, 108.0%, [WWWWWWWWWW], 2, .42, 2.56s average wait + +-- End of Stats snap 1, end=2014-11-01 21:25:42, seconds=4.7 + + Performance counter stats for process id '34783': + + 476.914715 task-clock # 0.095 CPUs utilized + 1,387,831,994 cycles # 2.910 GHz [33.12%] + 2,999,496,677 instructions # 2.16 insns per cycle + # 0.11 stalled cycles per insn [39.81%] + 416,320,816 branches # 872.946 M/sec [39.80%] + 1,734,734 branch-misses # 0.42% of all branches [39.81%] + 341,458,256 stalled-cycles-frontend # 24.60% frontend cycles idle [39.91%] + 229,309,595 stalled-cycles-backend # 16.52% backend cycles idle [40.76%] + 799,091 cache-references # 1.676 M/sec [27.13%] + 175,382 cache-misses # 21.948 % of all cache refs [27.08%] + 259,840 LLC-loads # 0.545 M/sec [27.02%] + 157,113 LLC-load-misses # 60.47% of all LL-cache hits [ 6.74%] + 413,950 LLC-stores # 0.868 M/sec [ 6.70%] + 6,508 LLC-store-misses # 0.014 M/sec [ 6.71%] + 415,639,079 L1-dcache-loads # 871.517 M/sec [13.39%] + 9,117,936 L1-dcache-load-misses # 2.19% of all L1-dcache hits [19.97%] + 8,209,431 L1-dcache-prefetches # 17.214 M/sec [26.45%] + + 5.000654510 seconds time elapsed + + +============================================================================== +-- full table scan via BUFFER CACHE of HCC QUERY LOW columnar-compressed table +============================================================================== + +SELECT /*+ MONITOR */ COUNT(cust_valid) FROM CUSTOMERS_NOPART_HCC_QL WHERE cust_id > 0 + +Global Information +------------------------------ + Status : DONE (ALL ROWS) + Instance ID : 1 + Session : TANEL (1090:40133) + SQL ID : 4zks7jfwnuvuc + SQL Execution ID : 16777217 + Execution Started : 11/02/2014 00:38:52 + First Refresh Time : 11/02/2014 00:38:52 + Last Refresh Time : 11/02/2014 00:38:57 + Duration : 5s + Module/Action : SQL*Plus/- + Service : dw + Program : sqlplus@mac01 (TNS V1-V3) + Fetch Calls : 1 + +Global Stats +================================================= +| Elapsed | Cpu | Other | Fetch | Buffer | +| Time(s) | Time(s) | Waits(s) | Calls | Gets | +================================================= +| 4.91 | 4.90 | 0.02 | 1 | 1M | +================================================= + +SQL Plan Monitoring Details (Plan Hash Value=1201118828) +====================================================================================================================================================== +| Id | Operation | Name | Rows | Cost | Time | Start | Execs | Rows | Activity | Activity Detail | +| | | | (Estim) | | Active(s) | Active | | (Actual) | (%) | (# samples) | +====================================================================================================================================================== +| 0 | SELECT STATEMENT | | | | 4 | +2 | 1 | 1 | | | +| 1 | SORT AGGREGATE | | 1 | | 4 | +2 | 1 | 1 | | | +| 2 | TABLE ACCESS STORAGE FULL | CUSTOMERS_NOPART_HCC_QL | 70M | 12725 | 5 | +2 | 1 | 70M | 100.00 | Cpu (5) | +====================================================================================================================================================== + + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + SID @INST, USERNAME , TYPE, STATISTIC , DELTA, HDELTA/SEC, %TIME, GRAPH , NUM_WAITS, WAITS/SEC, AVERAGES +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 1090 @1, TANEL , STAT, Requests to/from client , 2, .21, , , , , 2 per execution + 1090 @1, TANEL , STAT, opened cursors cumulative , 1, .11, , , , , 1 per execution + 1090 @1, TANEL , STAT, user calls , 3, .32, , , , , 3 per execution + 1090 @1, TANEL , STAT, session logical reads , 1266446, 133.11k, , , , , 1.27M total buffer visits + 1090 @1, TANEL , STAT, CPU used when call started , 490, 51.5, , , , , 490 per execution + 1090 @1, TANEL , STAT, CPU used by this session , 490, 51.5, , , , , 490 per execution + 1090 @1, TANEL , STAT, DB time , 492, 51.71, , , , , 492 per execution + 1090 @1, TANEL , STAT, non-idle wait count , 2, .21, , , , , 2 per execution + 1090 @1, TANEL , STAT, global enqueue gets sync , 2, .21, , , , , 2 per execution + 1090 @1, TANEL , STAT, global enqueue releases , 2, .21, , , , , 2 per execution + 1090 @1, TANEL , STAT, consistent gets , 1266446, 133.11k, , , , , 1.27M per execution + 1090 @1, TANEL , STAT, consistent gets from cache , 1266446, 133.11k, , , , , 1.27M per execution + 1090 @1, TANEL , STAT, consistent gets pin , 1266446, 133.11k, , , , , 1.27M per execution + 1090 @1, TANEL , STAT, consistent gets pin (fastpath) , 1266446, 133.11k, , , , , 1.27M per execution + 1090 @1, TANEL , STAT, logical read bytes from cache , 10374725632, 1.09G, , , , , 10.37G per execution + 1090 @1, TANEL , STAT, calls to kcmgcs , 45, 4.73, , , , , 45 per execution + 1090 @1, TANEL , STAT, calls to get snapshot scn: kcmgss , 1, .11, , , , , 1 per execution + 1090 @1, TANEL , STAT, no work - consistent read gets , 1266402, 133.1k, , , , , 1.27M per execution + 1090 @1, TANEL , STAT, table scans (cache partitions) , 1, .11, , , , , 1 per execution + 1090 @1, TANEL , STAT, table scan rows gotten , 69642625, 7.32M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, table scan disk non-IMC rows gotten , 69642625, 7.32M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, table scan blocks gotten , 819991, 86.18k, , , , , 819.99k per execution + 1090 @1, TANEL , STAT, table fetch continued row , 238565, 25.07k, , , , , 238.57k per execution + 1090 @1, TANEL , STAT, EHCC CUs Decompressed , 212824, 22.37k, , , , , 212.82k per execution + 1090 @1, TANEL , STAT, EHCC Query Low CUs Decompressed , 212824, 22.37k, , , , , 212.82k per execution + 1090 @1, TANEL , STAT, EHCC Compressed Length Decompressed , 6466648292, 679.67M, , , , , 6.47G per execution + 1090 @1, TANEL , STAT, EHCC Decompressed Length Decompressed , 12430226086, 1.31G, , , , , 12.43G per execution + 1090 @1, TANEL , STAT, EHCC Columns Decompressed , 425648, 44.74k, , , , , 425.65k per execution + 1090 @1, TANEL , STAT, EHCC Total Columns for Decompression , 4894952, 514.48k, , , , , 4.89M per execution + 1090 @1, TANEL , STAT, EHCC Total Rows for Decompression , 69642615, 7.32M, , , , , 69.64M per execution + 1090 @1, TANEL , STAT, EHCC Pieces Buffered for Decompression , 451390, 47.44k, , , , , 451.39k per execution + 1090 @1, TANEL , STAT, EHCC Total Pieces for Decompression , 998343, 104.93k, , , , , 998.34k per execution + 1090 @1, TANEL , STAT, EHCC Turbo Scan CUs Decompressed , 212824, 22.37k, , , , , 212.82k per execution + 1090 @1, TANEL , STAT, cursor authentications , 1, .11, , , , , 1 per execution + 1090 @1, TANEL , STAT, buffer is not pinned count , 238566, 25.07k, , , , , 238.57k per execution + 1090 @1, TANEL , STAT, parse count (total) , 1, .11, , , , , ~ softparses per hardparse + 1090 @1, TANEL , STAT, execute count , 1, .11, , , , , 1 executions per parse + 1090 @1, TANEL , STAT, bytes sent via SQL*Net to client , 347, 36.47, , , , , 173.5 bytes per roundtrip + 1090 @1, TANEL , STAT, bytes received via SQL*Net from client , 221, 23.23, , , , , 110.5 bytes per roundtrip + 1090 @1, TANEL , STAT, SQL*Net roundtrips to/from client , 2, .21, , , , , 2 per execution + 1090 @1, TANEL , TIME, parse time elapsed , 131, 13.77us, .0%, [ ], , , + 1090 @1, TANEL , TIME, DB CPU , 4896255, 514.62ms, 51.5%, [@@@@@@ ], , , + 1090 @1, TANEL , TIME, sql execute elapsed time , 4912118, 516.29ms, 51.6%, [###### ], , , + 1090 @1, TANEL , TIME, DB time , 4912417, 516.32ms, 51.6%, [###### ], , , -1.99 % unaccounted time + 1090 @1, TANEL , WAIT, SQL*Net message to client , 5, .53us, .0%, [ ], 2, .21, 2.5us average wait + 1090 @1, TANEL , WAIT, SQL*Net message from client , 4791196, 503.58ms, 50.4%, [WWWWW ], 2, .21, 2.4s average wait + +-- End of Stats snap 1, end=2014-11-02 00:39:02, seconds=9.5 + + Performance counter stats for process id '34783': + + 4897.166720 task-clock # 0.490 CPUs utilized + 15,001,366,058 cycles # 3.063 GHz [33.32%] + 21,298,907,978 instructions # 1.42 insns per cycle + # 0.31 stalled cycles per insn [39.99%] + 4,354,197,461 branches # 889.126 M/sec [40.00%] + 58,231,834 branch-misses # 1.34% of all branches [40.03%] + 6,700,565,245 stalled-cycles-frontend # 44.67% frontend cycles idle [40.04%] + 4,930,717,330 stalled-cycles-backend # 32.87% backend cycles idle [40.09%] + 48,367,880 cache-references # 9.877 M/sec [26.73%] + 15,253,634 cache-misses # 31.537 % of all cache refs [26.70%] + 22,233,999 LLC-loads # 4.540 M/sec [26.68%] + 13,804,662 LLC-load-misses # 62.09% of all LL-cache hits [ 6.66%] + 14,738,894 LLC-stores # 3.010 M/sec [ 6.67%] + 1,368,665 LLC-store-misses # 0.279 M/sec [ 6.67%] + 4,491,195,871 L1-dcache-loads # 917.101 M/sec [13.33%] + 227,727,782 L1-dcache-load-misses # 5.07% of all L1-dcache hits [19.99%] + 44,843,477 L1-dcache-prefetches # 9.157 M/sec [26.65%] + + + diff --git a/tpt/im/mark_all_tables_inmemory.sql b/tpt/im/mark_all_tables_inmemory.sql new file mode 100644 index 0000000..5f794e7 --- /dev/null +++ b/tpt/im/mark_all_tables_inmemory.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DECLARE + cmd VARCHAR2(1000); +BEGIN + FOR i IN (SELECT owner,table_name FROM dba_tables WHERE owner = '&1') LOOP + cmd := 'ALTER TABLE '||i.owner||'.'||i.table_name||' INMEMORY PRIORITY LOW MEMCOMPRESS FOR QUERY LOW'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; +END; +/ + diff --git a/tpt/im/mark_all_tables_noinmemory.sql b/tpt/im/mark_all_tables_noinmemory.sql new file mode 100644 index 0000000..31a395f --- /dev/null +++ b/tpt/im/mark_all_tables_noinmemory.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DECLARE + cmd VARCHAR2(1000); +BEGIN + FOR i IN (SELECT owner,table_name FROM dba_tables WHERE owner = '&1') LOOP + cmd := 'ALTER TABLE '||i.owner||'.'||i.table_name||' NO INMEMORY'; + DBMS_OUTPUT.PUT_LINE(cmd); + EXECUTE IMMEDIATE cmd; + END LOOP; +END; +/ + diff --git a/tpt/im/populate.sql b/tpt/im/populate.sql new file mode 100644 index 0000000..82c8f3e --- /dev/null +++ b/tpt/im/populate.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +ALTER SESSION SET "_inmemory_populate_wait"=TRUE; +EXEC SYS.DBMS_INMEMORY.POPULATE('&1','&2'); +ALTER SESSION SET "_inmemory_populate_wait"=FALSE; +@imseg &1..&2 + diff --git a/tpt/ima.sql b/tpt/ima.sql new file mode 100644 index 0000000..d73191e --- /dev/null +++ b/tpt/ima.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL "USED%" FOR A7 JUST RIGHT +PROMPT Querying GV$INMEMORY_AREA... + +SELECT + inst_id + , pool + , ROUND(alloc_bytes/1048576) alloc_mb + , ROUND(used_bytes/1048576) used_mb + , LPAD(ROUND(used_bytes/NULLIF(alloc_bytes,0)*100,1)||'%',7) "USED%" + , populate_status + , con_id +FROM + gv$inmemory_area +ORDER BY + pool + , inst_id +/ diff --git a/tpt/imseg.sql b/tpt/imseg.sql new file mode 100644 index 0000000..601fccd --- /dev/null +++ b/tpt/imseg.sql @@ -0,0 +1,68 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL imseg_owner FOR A20 +COL imseg_segment_name FOR A30 +COL imseg_partition_name FOR A30 +COL imseg_pct_done HEAD '%POP' FOR A5 JUST RIGHT +COL tablespace_name FOR A30 + +COMPUTE SUM LABEL 'totseg' OF seg_mb ON seg_mb REPORT +COMPUTE SUM LABEL 'totmem' OF inmem_mb ON inmem_mb REPORT +COMPUTE SUM LABEL 'totnot' OF mb_notpop ON mb_notpop REPORT + +BREAK ON REPORT + +SELECT + ROUND(SUM(bytes)/1048576) seg_MB -- dont want to double count the segment size from gv$ + , ROUND(SUM(inmemory_size)/1048576) inmem_MB + , LPAD(ROUND((1-(SUM(bytes_not_populated)/NULLIF(SUM(bytes),0)))*100)||'%',5) imseg_pct_done +-- , LPAD(ROUND(SUM(inmemory_size)/SUM(bytes)*100)||'%',5) compr_pct + , owner imseg_owner + , segment_name imseg_segment_name +-- , partition_name imseg_partition_name + , segment_type + , COUNT(DISTINCT partition_name) partitions + , tablespace_name + , inst_id + , populate_status pop_status + , inmemory_priority im_priority + , inmemory_distribute im_distribute + , inmemory_compression im_compression + , con_id + , inst_id +FROM + gv$im_segments +WHERE + upper(segment_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +GROUP BY + owner -- imseg_owner + , segment_name -- imseg_segment_name +-- , partition_name -- imseg_partition_name + , segment_type + , tablespace_name + , inst_id + , populate_status + , inmemory_priority + , inmemory_distribute + , inmemory_compression + , con_id + , inst_id +ORDER BY + inmem_mb DESC +/ + +CLEAR BREAKS diff --git a/tpt/imtab.sql b/tpt/imtab.sql new file mode 100644 index 0000000..73a2dac --- /dev/null +++ b/tpt/imtab.sql @@ -0,0 +1,64 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column tab_owner heading OWNER format a20 +column tab_table_name heading TABLE_NAME format a30 +column tab_type heading TYPE format a4 +column tab_num_rows heading NUM_ROWS format 99999999999 +column tab_blocks heading BLOCKS format 999999999999 +column tab_empty_blocks heading EMPTY format 99999999 +column tab_avg_space heading AVGSPC format 99999 +column tab_avg_row_len heading ROWLEN format 99999 +column tab_degree head DEGREE for A10 + +prompt Show tables matching condition "&1" (if schema is not specified then current user's tables only are shown)... + +select + owner tab_owner, + table_name tab_table_name, + case + when cluster_name is not null then 'CLU' + when partitioned = 'NO' and iot_name is not null then 'IOT' + when partitioned = 'YES' and iot_name is not null then 'PIOT' + when partitioned = 'NO' and iot_name is null then 'TAB' + when partitioned = 'YES' and iot_name is null then 'PTAB' + when temporary = 'Y' then 'TEMP' + else 'OTHR' + end tab_type, + num_rows tab_num_rows, + blocks tab_blocks, + empty_blocks tab_empty_blocks, + avg_space tab_avg_space, +-- chain_cnt tab_chain_cnt, + avg_row_len tab_avg_row_len, +-- avg_space_freelist_blocks tab_avg_space_freelist_blocks, +-- num_freelist_blocks tab_num_freelist_blocks, +-- sample_size tab_sample_size, +-- last_analyzed tab_last_analyzed, + LPAD(SUBSTR(TRIM(degree),1,10),10) tab_degree, + compression + , compress_for -- 11.2 + , inmemory im + , inmemory_distribute im_dist + , inmemory_compression im_comp + , inmemory_duplicate im_dupl +from + dba_tables +where + inmemory = 'ENABLED' +AND upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +/ + diff --git a/tpt/imu.sql b/tpt/imu.sql new file mode 100644 index 0000000..9bf8e81 --- /dev/null +++ b/tpt/imu.sql @@ -0,0 +1,37 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: im.sql +-- Purpose: Display In-Memory Undo (IMU) buffer usage +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @im.sql +-- +-- Other: Does only show IMU buffers currently bound to a transaction +-- If you want to see all currently available IMU buffers, +-- remove the WHERE condition +-- +-------------------------------------------------------------------------------- + +prompt Display private in-memory undo (IMU) buffers currently in use in the instance... + +SELECT + KTIFPNO, + KTIFPSTA, + KTIFPXCB XCTADDR, + KTIFPUPB UBADDR, + TO_NUMBER(KTIFPUPE, 'XXXXXXXXXXXXXXXX')-TO_NUMBER(KTIFPUPB, 'XXXXXXXXXXXXXXXX') UBSIZE, + (TO_NUMBER(KTIFPUPB, 'XXXXXXXXXXXXXXXX')-TO_NUMBER(KTIFPUPC, 'XXXXXXXXXXXXXXXX'))*-1 UBUSAGE, + KTIFPRPB RBADDR, + TO_NUMBER(KTIFPRPE, 'XXXXXXXXXXXXXXXX')-TO_NUMBER(KTIFPRPB, 'XXXXXXXXXXXXXXXX') RBSIZE, + (TO_NUMBER(KTIFPRPB, 'XXXXXXXXXXXXXXXX')-TO_NUMBER(KTIFPRPC, 'XXXXXXXXXXXXXXXX'))*-1 RBUSAGE, + KTIFPPSI, + KTIFPRBS, + KTIFPTCN +FROM X$KTIFP +WHERE KTIFPXCB != HEXTORAW('00') +/ diff --git a/tpt/ind.sql b/tpt/ind.sql new file mode 100644 index 0000000..9a3fcc2 --- /dev/null +++ b/tpt/ind.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@ind2 "%&1%" \ No newline at end of file diff --git a/tpt/ind2.sql b/tpt/ind2.sql new file mode 100644 index 0000000..10078f6 --- /dev/null +++ b/tpt/ind2.sql @@ -0,0 +1,136 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set feedback off + +prompt Display indexes where table or index name matches &1.... + +column ind_table_name1 heading TABLE_NAME format a30 +column ind_index_name1 heading INDEX_NAME format a30 +column ind_table_owner1 heading TABLE_OWNER format a20 +column ind_column_name1 heading COLUMN_NAME format a30 +column ind_dsc1 heading DSC format a4 +column ind_column_position1 heading POS# format 999 + +break on ind_table_owner1 skip 1 on ind_table_name1 on ind_index_name1 + + +select + c.table_owner ind_table_owner1, + c.table_name ind_table_name1, + c.index_name ind_index_name1, + c.column_position ind_column_position1, + c.column_name ind_column_name1, + decode(c.descend,'DESC','DESC',null) ind_dsc1 +from + dba_ind_columns c +where ( + UPPER(table_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND UPPER(table_owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +) +OR ( + UPPER(index_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND UPPER(index_owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +) +order by + c.table_owner, + c.table_name, + c.index_name, + c.column_position +; + +column ind_owner heading INDEX_OWNER format a20 +column ind_index_type heading IDXTYPE format a10 +column ind_uniq heading UNIQ format a4 +column ind_degree heading DEGREE format a6 +column ind_part heading PART format a4 +column ind_temp heading TEMP format a4 +column ind_blevel heading H format 9 +column ind_leaf_blocks heading LFBLKS format 999999999 +column ind_distinct_keys heading NDK format 999999999999 + +break on ind_owner on table_name + +select + owner ind_owner, + table_name ind_table_name1, + index_name ind_index_name1, + REPLACE(index_type,'FUNCTION-BASED', 'FBI') ind_index_type, + decode(uniqueness,'UNIQUE', 'YES', 'NONUNIQUE', 'NO', 'N/A') ind_uniq, + status, + partitioned ind_part, + temporary ind_temp, + blevel+1 ind_blevel, + leaf_blocks ind_leaf_blocks, + distinct_keys ind_distinct_keys, + num_rows, + clustering_factor cluf, + last_analyzed, + degree ind_degree + , visibility -- 11g +from + dba_indexes +where ( + UPPER(table_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND UPPER(table_owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +) +OR ( + UPPER(index_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND UPPER(owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +) +order by + owner, + table_name, + index_name, + ind_uniq +; + +set feedback on diff --git a/tpt/indf.sql b/tpt/indf.sql new file mode 100644 index 0000000..f203471 --- /dev/null +++ b/tpt/indf.sql @@ -0,0 +1,57 @@ +prompt Display indexes where table or index name matches &1.... + +column ind_table_name heading TABLE_NAME format a30 +column ind_index_name heading INDEX_NAME format a30 +column ind_table_owner heading TABLE_OWNER format a20 +column ind_column_name heading COLUMN_NAME format a30 +column ind_column_position heading POS format 999 +column ind_column_expression heading COLUMN_EXPRESSION format a100 word_wrap +break on ind_table_owner1 skip 1 on ind_table_name1 on ind_index_name1 + +SELECT + table_owner ind_table_owner + , table_name ind_table_name + , index_name ind_index_name + , column_position ind_column_position + , column_expression ind_column_expression +FROM + dba_ind_expressions +WHERE ( + UPPER(table_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND UPPER(table_owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +) +OR ( + UPPER(index_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND UPPER(index_owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +) +ORDER BY + table_owner + , table_name + , index_name + , column_position +/ + diff --git a/tpt/indroot.sql b/tpt/indroot.sql new file mode 100644 index 0000000..e4d3d70 --- /dev/null +++ b/tpt/indroot.sql @@ -0,0 +1,7 @@ +SELECT + partition_name, header_file, header_block, header_block+1 root_block + ,TO_CHAR(DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS(header_file,header_block+1), '0XXXXXXXXXXXXXXX') root_hex +FROM dba_segments +WHERE owner = '&1' +AND segment_name = '&2' +/ diff --git a/tpt/init.sql b/tpt/init.sql new file mode 100644 index 0000000..253f476 --- /dev/null +++ b/tpt/init.sql @@ -0,0 +1,202 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Name: init.sql +-- Purpose: Initializes sqlplus variables for 156 character terminal width and other settings. +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Other: You need to comment out the right variable definitions for your client platform below. +-- Assumes SQLPATH variable set to point to TPT script directory. +-- +-------------------------------------------------------------------------------- + +-- this must be here to avoid logon problems when SQLPATH env variable is unset +def SQLPATH="" + + +-- set SQLPATH variable to either Unix or Windows format + +def SQLPATH=$SQLPATH -- (Unix/Mac OSX) +--def SQLPATH=%SQLPATH% -- (Windows) + +-- def _start=start -- Windows +-- def _start=xdg-open -- Unix/Linux +def _start=open -- MacOS + +def _delete="rm -f" -- Unix/MacOSX +-- def _delete="del" -- Windows + +def _tpt_tempdir=&SQLPATH/tmp + +-- some internal variables required for TPT scripts + + define _ti_sequence=0 + define _tptmode=normal + define _xt_seq=0 + + define all='"select /*+ no_merge */ sid from v$session"' + define prev="(select /*+ no_unnest */ prev_sql_id from v$session where sid = (select sid from v$mystat where rownum=1))" + + -- geeky shorcuts for producing date ranges for various ASH scripts + define min="sysdate-1/24/60 sysdate" + define 1min="sysdate-1/24/60 sysdate" + define minute="sysdate-1/24/60 sysdate" + define 5min="sysdate-1/24/12 sysdate" + define hour="sysdate-1/24 sysdate" + define 1hour="sysdate-1/24 sysdate" + define 2hours="sysdate-1/12 sysdate" + define 24hours="sysdate-1 sysdate" + define day="sysdate-1 sysdate" + define today="TRUNC(sysdate) sysdate" + +-- you should change linesize to match terminal width - 1 only +-- if you don't have a terminal with horizontal scrolling +-- capability (cmd.exe and Terminator terminal do have horizontal scrolling) + + set linesize 999 + +-- set truncate after linesize on + + -- set truncate on + +-- set pagesize larger to avoid repeting headings + + set pagesize 5000 + +-- fetch 1000000 bytes of long datatypes. good for +-- querying DBA_VIEWS and DBA_TRIGGERS + + set long 1000000 + set longchunksize 1000000 + +-- larger arraysize for faster fetching of data +-- note that arraysize can affect outcome of experiments +-- like buffer gets for select statements etc. +-- +-- setting from 500 to 100 as otherwise snapper/dbms_output starts getting ORA-6502 errors due to 32k fetch limit of dbms_output + + set arraysize 100 + +-- normally I keep this commented out, otherwise +-- a DBMS_OUTPUT.GET_LINES call is made after all +-- PL/SQL executions from sqlplus. this may distort +-- execution statistics for experiments + + --set serveroutput on size unlimited + +-- to have less garbage on screen + + set verify off + +-- to trim trailing spaces from spool files + + set trimspool on + +-- to trim trailing spaces from screen output + + set trimout on + +-- don't use tabs instead of spaces for "wide blanks" +-- this can mess up the vertical column locations in output + + set tab off + +-- this makes describe command better to read and more +-- informative in case of complex datatypes in columns + + set describe depth 1 linenum on indent on + +-- you can make sqlplus run any command as your editor +-- I could use "start notepad" on windows if you want to +-- return control back to sqlplus immediately after launching +-- notepad (so that you can continue typing in sqlplus + + define _editor="vi -c 'set notitle'" +-- define _external_editor="/Applications/Terminator.app/Contents/MacOS/Terminator vi " + +-- assign the tracefile name to trc variable + + def trc=unknown + + column tracefile noprint new_value trc + + -- its nice to have termout off here as otherwise this would be + -- displayed on the screen + set termout off + + select value ||'/'||(select instance_name from v$instance) ||'_ora_'|| + (select spid||case when traceid is not null then '_'||traceid else null end + from v$process where addr = (select paddr from v$session + where sid = (select sid from v$mystat + where rownum = 1 + ) + ) + ) || '.trc' tracefile + from v$parameter where name = 'user_dump_dest'; + + column tracefile print + +-- make default date format nicer + + alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'; + +-- include username and connect identifier in prompt + +-- column pr new_value _pr +-- select initcap('&_user@&_connect_identifier> ') pr from dual; +-- set sqlprompt "&_pr" +-- column _pr clear + + +-- format some more columns for common DBA queries + + col first_change# for 99999999999999999 + col next_change# for 999999999999999999999 + col checkpoint_change# for 99999999999999999 + col resetlogs_change# for 99999999999999999 + col plan_plus_exp for a100 + col value_col_plus_show_param ON HEADING 'VALUE' FORMAT a100 + col name_col_plus_show_param ON HEADING 'PARAMETER_NAME' FORMAT a60 + +-- oracle 12.2+ has too wide OWNER and OBJECT_NAME... + + col owner for a30 wrap + col object_name for a30 wrap + col subobject_name for a30 wrap + col segment_name for a30 wrap + col partition_name for a30 wrap + +-- set html format + +@@htmlset nowrap "&_user@&_connect_identifier report" + +-- set seminar logging file + +DEF _tpt_tempfile=sqlplus_tmpfile + +col seminar_logfile new_value seminar_logfile +col tpt_tempfile new_value _tpt_tempfile + +select + to_char(sysdate, 'YYYYMMDD-HH24MISS') seminar_logfile + , instance_name||'-'||to_char(sysdate, 'YYYYMMDD-HH24MISS') tpt_tempfile +from v$instance; + +def seminar_logfile=&SQLPATH/logs/&_tpt_tempfile..log + +-- spool sqlplus output +spool &seminar_logfile append + +set editfile afiedit.sql + +-- set up a default ref cursor for Snapper V4 begin/end snapshotting +-- var snapper refcursor + +-- reset termout back to normal + + set termout on + diff --git a/tpt/intopt.sql b/tpt/intopt.sql new file mode 100644 index 0000000..a441056 --- /dev/null +++ b/tpt/intopt.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show internal compilation environment parameters which are not related to KSP parameters + +col fid_qkscesyrow head FUNCTION_ID for a20 + +SELECT + pname_qkscesyrow +-- , pnum_qkscesyrow +-- , kspnum_qkscesyrow +-- , fid_qkscesyrow + , pvalue_qkscesyrow system_value + , defpvalue_qkscesyrow default_value +FROM x$qkscesys +WHERE pname_qkscesyrow IN ( + SELECT pname_qkscesyrow + FROM x$qkscesys + MINUS + SELECT ksppinm + FROM x$ksppi +) +ORDER BY pname_qkscesyrow +/ diff --git a/tpt/inv.sql b/tpt/inv.sql new file mode 100644 index 0000000..b89c660 --- /dev/null +++ b/tpt/inv.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show invalid objects, indexes, index partitions and index subpartitions.... + +col ind_owner head OWNER for a20 +col inv_oname head OBJECT_NAME for a30 + +select owner ind_owner, object_name inv_oname, object_type from dba_objects where status != 'VALID'; + +select owner ind_owner, table_name, index_name from dba_indexes where status not in ('VALID', 'N/A'); + +select index_owner ind_owner, index_name, partition_name from dba_ind_partitions where status not in ('N/A', 'USABLE'); + +select indeX_owner ind_owner, index_name, partition_name, subpartition_name from dba_ind_subpartitions where status not in ('USABLE'); + diff --git a/tpt/jf.sql b/tpt/jf.sql new file mode 100644 index 0000000..a19575b --- /dev/null +++ b/tpt/jf.sql @@ -0,0 +1,45 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Display bloom filters used by a PX session from V$SQL_JOIN_FILTER... + +SELECT + QC_SESSION_ID qc_sid + , QC_INSTANCE_ID inst_id + , SQL_PLAN_HASH_VALUE sql_hash_value -- this is sql_hash_value, not plan hash value despite the column name + , active + , 'BF'||TRIM(TO_CHAR(filter_id, '0999')) f_id + , LENGTH * 8 bytes_total -- there seems to be a bug in 12c (or maybe due to bloom folding) + , LENGTH * 8 * 8 bits_total + , BITS_SET bits_set + , TO_CHAR(ROUND((bits_set/(length*8))*100,1),'99999.0')||' %' pct_set + , FILTERED + , PROBED + , TO_CHAR(ROUND(filtered / NULLIF(probed,0) * 100, 2), '999.0')||' %' rejected + , ACTIVE +FROM + GV$SQL_JOIN_FILTER +WHERE + 1=1 +--AND active != 0 +AND qc_session_id LIKE + upper(CASE + WHEN INSTR('&1','@') > 0 THEN + SUBSTR('&1',INSTR('&1','@')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND qc_instance_id LIKE + CASE WHEN INSTR('&1','@') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','@')-1)) + ELSE + USERENV('instance') + END ESCAPE '\' +ORDER BY + qc_instance_id + , qc_session_id + , sql_hash_value + , f_id +/ + diff --git a/tpt/jobdisable.sql b/tpt/jobdisable.sql new file mode 100644 index 0000000..65d6d8d --- /dev/null +++ b/tpt/jobdisable.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select 'exec dbms_scheduler.disable( '''||owner||'.'||job_name||''' );' +from dba_scheduler_jobs where lower(job_name) like lower('&1'); diff --git a/tpt/jobs.sql b/tpt/jobs.sql new file mode 100644 index 0000000..12b7015 --- /dev/null +++ b/tpt/jobs.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col jobs_what head WHAT for a50 +col jobs_interval head INTERVAL for a40 + +col jobs_job_name head JOB_NAME for a40 +col jobs_program_name head PROGRAM_NAME for a40 + +select job, what jobs_what, last_date, next_date, interval jobs_interval, failures, broken from dba_jobs; + +select + job_name jobs_job_name + , program_name jobs_program_name + , state jobs_state + , to_char(start_date, 'YYYY-MM-DD HH24:MI') start_date + , to_char(next_run_date, 'YYYY-MM-DD HH24:MI') next_run_date + , enabled +from + dba_scheduler_jobs +/ + diff --git a/tpt/jobsr.sql b/tpt/jobsr.sql new file mode 100644 index 0000000..24fe025 --- /dev/null +++ b/tpt/jobsr.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col jobs_what head WHAT for a50 +col jobs_interval head INTERVAL for a40 + +col jobs_job_name head JOB_NAME for a40 +col jobs_program_name head PROGRAM_NAME for a40 + +select job, what jobs_what, last_date, next_date, interval jobs_interval, failures, broken from dba_jobs; + +select + job_name jobs_job_name + , program_name jobs_program_name + , state jobs_state + , to_char(start_date, 'YYYY-MM-DD HH24:MI') start_date + , to_char(next_run_date, 'YYYY-MM-DD HH24:MI') next_run_date + , enabled +from + dba_scheduler_jobs +where + state = 'RUNNING' +/ + diff --git a/tpt/kcbbes.sql b/tpt/kcbbes.sql new file mode 100644 index 0000000..5f3bf41 --- /dev/null +++ b/tpt/kcbbes.sql @@ -0,0 +1,49 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT List background I/O write priorities and reasons from X$KCBBES... +PROMPT (X$KCBBES = Kerncel Cache Buffers dB writer Event Statistics) + +SELECT + indx + , CASE indx + WHEN 0 THEN 'Invalid Reason' + WHEN 1 THEN 'Ping Write' + WHEN 2 THEN 'High Prio Thread Ckpt' + WHEN 3 THEN 'Instance Recovery Ckpt' + WHEN 4 THEN 'Med Prio (incr) Ckpt' + WHEN 5 THEN 'Aging Writes' + WHEN 6 THEN 'Media Recovery Ckpt' + WHEN 7 THEN 'Low Prio Thread Ckpt' + WHEN 8 THEN 'Tablespace Ckpt' + WHEN 9 THEN 'Reuse Object Ckpt' + WHEN 10 THEN 'Reuse Block Range Ckpt' + WHEN 11 THEN 'Limit Dirty Buff Ckpt' + WHEN 12 THEN 'Smart Scan Ckpt' + WHEN 14 THEN 'Direct Path Read Ckpt' + END reason_name + , reason reason_buffers + , ROUND(NULLIF(RATIO_TO_REPORT(reason) OVER () * 100,0), 1) "REASON%" + , CASE indx + WHEN 0 THEN 'Invalid Priority' + WHEN 1 THEN 'High Priority' + WHEN 2 THEN 'Medium Priority' + WHEN 3 THEN 'Low Priority' + END priority_name + , priority priority_buffers + , ROUND(NULLIF(RATIO_TO_REPORT(priority) OVER () * 100,0), 1) "PRIO%" + , CASE indx + WHEN 0 THEN 'Queued For Writing' + WHEN 1 THEN 'Deferred (log file sync)' + WHEN 2 THEN 'Already being written' + WHEN 3 THEN 'Buffer not dirty' + WHEN 4 THEN 'Buffer is pinned' + WHEN 5 THEN 'I/O limit reached' + WHEN 6 THEN 'Buffer logically flushed' + WHEN 7 THEN 'No free IO slots' + END io_proc_status + , savecode io_count + , ROUND(NULLIF(RATIO_TO_REPORT(savecode) OVER () * 100,0), 1) "STATUS%" +FROM + x$kcbbes +/ diff --git a/tpt/kcboqh.sql b/tpt/kcboqh.sql new file mode 100644 index 0000000..4b1281c --- /dev/null +++ b/tpt/kcboqh.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT Calling segcached.sql +@@segcached "&1" + diff --git a/tpt/kcbsw.sql b/tpt/kcbsw.sql new file mode 100644 index 0000000..2660be2 --- /dev/null +++ b/tpt/kcbsw.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@kcbsw_&myoraver \ No newline at end of file diff --git a/tpt/kcbsw_10.sql b/tpt/kcbsw_10.sql new file mode 100644 index 0000000..bdac8c1 --- /dev/null +++ b/tpt/kcbsw_10.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM ( + SELECT + dsc.kcbwhdes, + sw.why0, + sw.why1, + sw.why2, + sw.other_wait + FROM + x$kcbwh dsc, + x$kcbsw sw + WHERE + dsc.indx = sw.indx + AND sw.why0 + sw.why1 + sw.why2 + sw.other_wait > 0 + ORDER by + -- dsc.kcbwhdes + sw.why0 + sw.why1 + sw.why2 ASC +) +--WHERE rownum <= 10 +/ diff --git a/tpt/kcbsw_11.sql b/tpt/kcbsw_11.sql new file mode 100644 index 0000000..5a1a603 --- /dev/null +++ b/tpt/kcbsw_11.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM ( + SELECT + dsc.kcbwhdes, + why.why0, + why.why1, + why.why2, + sw.other_wait + FROM + x$kcbuwhy why, + x$kcbwh dsc, + x$kcbsw sw + WHERE + why.indx = dsc.indx + AND why.why0 + why.why1 + why.why2 + sw.other_wait > 0 + AND dsc.indx = sw.indx + AND why.indx = sw.indx + ORDER by + -- dsc.kcbwhdes + why.why0 + why.why1 + why.why2 ASC +) +--WHERE rownum <= 10 +/ diff --git a/tpt/kcbsw_9.sql b/tpt/kcbsw_9.sql new file mode 100644 index 0000000..c819387 --- /dev/null +++ b/tpt/kcbsw_9.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@xkcbsw_10 \ No newline at end of file diff --git a/tpt/kcbwds.sql b/tpt/kcbwds.sql new file mode 100644 index 0000000..545bbda --- /dev/null +++ b/tpt/kcbwds.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + addr + , set_id + , dbwr_num dbwr# + , flag + , blk_size + , proc_group + , CNUM_SET + , CNUM_REPL + , ANUM_REPL + , CKPT_LATCH + , CKPT_LATCH1 + , SET_LATCH + , COLD_HD + , HBMAX + , HBUFS +from + X$KCBWDS +WHERE + CNUM_SET != 0 +/ + + diff --git a/tpt/kcbwh.sql b/tpt/kcbwh.sql new file mode 100644 index 0000000..932ebdd --- /dev/null +++ b/tpt/kcbwh.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + addr + , indx + , '0x'||trim(to_char(indx, 'XXXX')) hexidx + , kcbwhdes +from + x$kcbwh +where + lower(kcbwhdes) like lower('%&1%') +or lower('0x'||trim(to_char(indx, 'XXXX'))) like lower('%&1%') +or to_char(indx) like lower('%&1%') +/ diff --git a/tpt/kghlu.sql b/tpt/kghlu.sql new file mode 100644 index 0000000..99e3fe0 --- /dev/null +++ b/tpt/kghlu.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col kghluidx head "SUB|POOL" +col kghludur head "SSUB|POOL" +col kghlufsh head "FLUSHED|CHUNKS" +col kghluops head "LRU LIST|OPERATIONS" +col kghlurcr head "RECURRENT|CHUNKS" +col kghlutrn head "TRANSIENT|CHUNKS" +col kghlunfu head "FREE UNPIN|UNSUCCESS" +col kghlunfs head "LAST FRUNP|UNSUCC SIZE" +col kghlurcn head "RESERVED|SCANS" +col kghlurmi head "RESERVED|MISSES" +col kghlurmz head "RESERVED|MISS SIZE" +col kghlurmx head "RESERVED|MISS MAX SZ" + + +select + to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') current_time + , kghluidx + , kghludur + , kghlufsh + , kghluops + , kghlurcr + , kghlutrn + , kghlunfu + , kghlunfs + , kghlurcn + , kghlurmi + , kghlurmz + , kghlurmx +-- , kghlumxa +-- , kghlumes +-- , kghlumer +from + x$kghlu +order by + kghluidx + , kghludur +/ diff --git a/tpt/kglbroken.sql b/tpt/kglbroken.sql new file mode 100644 index 0000000..eb8bac4 --- /dev/null +++ b/tpt/kglbroken.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: kglbroken.sql +-- Purpose: +-- Purpose: Report broken kgl locks for an object this can be used for +-- identifying which sessions would get ORA-04068 "existing state +-- of packages has been discarded" errors due a change +-- in some object definition (such pl/sql package recompilation) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @kglbroken +-- +-- +-------------------------------------------------------------------------------- + + +select decode(substr(banner, instr(banner, 'Release ')+8,1), '1', 256, 1) kglbroken_flg +from v$version +where rownum = 1 + +select + sid,serial#,username,program +from + v$session +where + saddr in (select /*+ no_unnest */ kgllkuse + from x$kgllk + where + kglnahsh in (select /*+ no_unnest */ kglnahsh + from x$kglob + where + upper(kglnaown) like upper('&1') + and upper(kglnaobj) like upper('&2') + ) + and bitand(kgllkflg,256)=256 + ) +/ diff --git a/tpt/kgllk.sql b/tpt/kgllk.sql new file mode 100644 index 0000000..c2ae5ab --- /dev/null +++ b/tpt/kgllk.sql @@ -0,0 +1,51 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col hold_mode head HOLD_MODE for a10 +col req_mode head REQ_MODE for a10 +col object_owner head OBJECT_OWNER for a15 +col namespace for a30 word_wrap +col kgllk_state head 0xSTATE for A8 + +SELECT * FROM ( + SELECT + s.sid + , KGLLKSNM rsid + -- , KGLLKADR + -- , KGLLKUSE + -- , KGLLKSES + , decode(l.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', to_char(l.kgllkmod)) hold_mode + , decode(l.kgllkreq, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive', to_char(l.kgllkreq)) req_mode + -- , LPAD('0x'||TRIM(TO_CHAR(l.kgllkflg,'XXXXX')),8) kgllk_state + -- , decode(l.kgllkflg, 0, 1, 'BROKEN', 2, 'BREAKABLE', l.kgllkflg) kgllk_state + -- 11g stuff + -- , kgllkest + -- , kgllkexc + -- , KGLLKFLG + -- , KGLLKSPN + -- , KGLLKHTB + , KGLNAHSH + , KGLLKSQLID + -- , KGLHDPAR + -- , KGLHDNSP + -- , n.kglsttyp + , n.kglstdsc namespace + , USER_NAME object_owner + , KGLNAOBJ object_name + , TO_CHAR(l.kgllkflg,'XXXXX') kgllk_state + , KGLLKHDL + , KGLLKPNC + , KGLLKPNS + , KGLLKCNT + -- , KGLLKCTP -- cursor type + FROM + x$kgllk l + , v$session s + , x$kglst n + WHERE + s.saddr(+) = l.kgllkuse + AND l.kglhdnsp = n.indx + --AND kgllkhdl = hextoraw(upper(lpad('&1',vsize(l.kgllkhdl)*2,'0'))) +) +WHERE &1 +/ diff --git a/tpt/kglob.sql b/tpt/kglob.sql new file mode 100644 index 0000000..2dc8028 --- /dev/null +++ b/tpt/kglob.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col kglob_addrlen new_value kglob_addrlen + +set termout off +select vsize(addr)*2 kglob_addrlen from x$dual; +set termout on + +var printtab2_cursor varchar2(4000) + +exec :printtab2_cursor:='select * from x$kglob where kglhdadr = hextoraw(upper(lpad(''&1'',&kglob_addrlen,''0'')))' + +@@printtab2 diff --git a/tpt/kglpn.sql b/tpt/kglpn.sql new file mode 100644 index 0000000..bb70e1c --- /dev/null +++ b/tpt/kglpn.sql @@ -0,0 +1,55 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- +-- kglpn.sql by Tanel Poder (http://blog.tanelpoder.com) +-- + +col kglpn_object_name head OBJECT_NAME for a40 +col kglpn_pinned_blocks head PINNED_BLOCKS for a13 word_wrap +col kglpn_username HEAD USERNAME for a25 wrap + +-- there's a reason for the use_hash hint, we don't want to hammer libcache with a lot of single object lookups +-- which a nested loops join would cause if lots of objects are returned from x$kglpn (for a handful of rows +-- a nested loop would be better, but hash join is safer with large amount of rows in this case) + +select * from ( + select /*+ merge leading(p,g) use_hash(g) */ + kglhdadr + -- , kglpnuse + -- , kglpnses + , s.sid + , s.username kglpn_username + , nvl2(kglnaown, kglnaown||'.', null)||kglnaobj kglpn_object_name + , SUBSTR(CASE kglpnmod WHEN 0 THEN 'None' WHEN 2 THEN 'Share' WHEN 3 THEN 'Excl' ELSE TO_CHAR(kglpnmod) END, 1,5) pin_mode + , SUBSTR(CASE kglpnreq WHEN 0 THEN 'None' WHEN 2 THEN 'Share' WHEN 3 THEN 'Excl' ELSE TO_CHAR(kglpnreq) END, 1,5) req_mode + , CASE WHEN BITAND(kglpndmk, 1)= 1 THEN '0 ' END + || CASE WHEN BITAND(kglpndmk, 2)= 2 THEN '1 ' END + || CASE WHEN BITAND(kglpndmk, 4)= 4 THEN '2 ' END + || CASE WHEN BITAND(kglpndmk, 8)= 8 THEN '3 ' END + || CASE WHEN BITAND(kglpndmk, 16)= 16 THEN '4 ' END + || CASE WHEN BITAND(kglpndmk, 32)= 32 THEN '5 ' END + || CASE WHEN BITAND(kglpndmk, 64)= 64 THEN '6 ' END + || CASE WHEN BITAND(kglpndmk, 128)= 128 THEN '7 ' END + || CASE WHEN BITAND(kglpndmk, 256)= 256 THEN '8 ' END + || CASE WHEN BITAND(kglpndmk, 512)= 512 THEN '9 ' END + || CASE WHEN BITAND(kglpndmk, 1024)= 1024 THEN '10 ' END + || CASE WHEN BITAND(kglpndmk, 2048)= 2048 THEN '11 ' END + || CASE WHEN BITAND(kglpndmk, 4096)= 4096 THEN '12 ' END + || CASE WHEN BITAND(kglpndmk, 8192)= 8192 THEN '13 ' END + || CASE WHEN BITAND(kglpndmk, 16384)=16384 THEN '14 ' END + || CASE WHEN BITAND(kglpndmk, 32768)=32768 THEN '15' END kglpn_pinned_blocks + --, g.kglnahsh kglnahsh + , g.kglnahsh hash_value + , kglpncnt refcnt + from + x$kglpn p, + x$kglob g, + v$session s + where + p.kglpnhdl = g.kglhdadr + and p.kglpnuse = s.saddr (+) +) +where &1 +/ + diff --git a/tpt/kill.sql b/tpt/kill.sql new file mode 100644 index 0000000..fda250e --- /dev/null +++ b/tpt/kill.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: kill.sql +-- Purpose: Generates commands for killing selected sessions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @kill (example: @kill username='SYSTEM') +-- @kill sid=150 +-- @kill username='SYSTEM' +-- @kill "username='APP' and program like 'sqlplus%'" +-- +-- Other: This script doesnt actually kill any sessions +-- it just generates the ALTER SYSTEM KILL SESSION +-- commands, the user can select and paste in the selected +-- commands manually +-- +-------------------------------------------------------------------------------- + +select 'alter system kill session '''||sid||','||serial#||''' -- ' + ||username||'@'||machine||' ('||program||');' commands_to_verify_and_run +from v$session +where &1 +and sid != (select sid from v$mystat where rownum = 1) +/ diff --git a/tpt/kill_cpu.sql b/tpt/kill_cpu.sql new file mode 100644 index 0000000..1fb2f47 --- /dev/null +++ b/tpt/kill_cpu.sql @@ -0,0 +1,16 @@ +-- prompt Jonathan Lewis'es kill_cpu script +-- +-- create the kill_cpu table first: +-- create table kill_cpu(n primary key) organization index as select rownum from all_objects where rownum <=50; + +-- this is required in 10g+ to get the "kill_cpu effect" +-- however in 10.2 this occasionally ends up crashing your session +-- so this is for hacking environments only + +alter session set "_old_connect_by_enabled"=true; + +select /*+ monitor */ count(*) X +from kill_cpu +connect by n > prior n +start with n = 1 +/ diff --git a/tpt/killi.sql b/tpt/killi.sql new file mode 100644 index 0000000..a8e0dc6 --- /dev/null +++ b/tpt/killi.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: kill.sql +-- Purpose: Generates commands for killing selected sessions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @kill (example: @kill username='SYSTEM') +-- @kill sid=150 +-- @kill username='SYSTEM' +-- @kill "username='APP' and program like 'sqlplus%'" +-- +-- Other: This script doesnt actually kill any sessions +-- it just generates the ALTER SYSTEM KILL SESSION +-- commands, the user can select and paste in the selected +-- commands manually +-- +-------------------------------------------------------------------------------- + +select 'alter system kill session '''||sid||','||serial#||''' immediate -- ' + ||username||'@'||machine||' ('||program||');' commands_to_verify_and_run +from v$session +where &1 +and sid != (select sid from v$mystat where rownum = 1) +/ diff --git a/tpt/ksllw.sql b/tpt/ksllw.sql new file mode 100644 index 0000000..6a3b887 --- /dev/null +++ b/tpt/ksllw.sql @@ -0,0 +1,13 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + indx, + trim(to_char(indx, 'XXXX')) ihex, + ksllwnam, + ksllwlbl +from x$ksllw +where + lower(to_char(indx)) like lower('&1') +or lower(trim(to_char(indx, 'XXXX'))) like lower('&1') +/ \ No newline at end of file diff --git a/tpt/ksmdd.sql b/tpt/ksmdd.sql new file mode 100644 index 0000000..ba35aa3 --- /dev/null +++ b/tpt/ksmdd.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + addr + , indx + , inst_id + , name + , DECODE(BITAND(flags,1),1,'DYN ','') flags + , elements_chunk + , items_pt + , initentries + , numentries + , curentries + , numchunks + , elemsize + , heap + , secondary +FROM + X$KSMDD +WHERE + LOWER(name) LIKE LOWER('%&1%') +ORDER BY + addr +/ diff --git a/tpt/ksminfo.sql b/tpt/ksminfo.sql new file mode 100644 index 0000000..24c16bb --- /dev/null +++ b/tpt/ksminfo.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + "AREA NAME" -- VARCHAR2(32) + , "NUMAPG" -- NUMBER + , "PAGESIZE" / 1024 mempage_kb -- NUMBER + , ROUND("SEGMENT SIZE" / 1048576) segsize_mb -- NUMBER + , ROUND("SIZE" / 1048576) area_size_mb -- NUMBER + , ROUND("REMAINING ALLOC SIZE" / 1048576) remain_mb -- NUMBER + , "SHMID" -- NUMBER + , "SEGMENT DISTRIBUTED" -- VARCHAR2(20) + , "AREA FLAGS" -- NUMBER + , "SEGMENT DEFERRED" -- VARCHAR2(20) + , "SEG_START ADDR" -- RAW(8) + , "START ADDR" -- RAW(8) +FROM + x$ksmssinfo +/ + diff --git a/tpt/ksmlru.sql b/tpt/ksmlru.sql new file mode 100644 index 0000000..7bbbc2a --- /dev/null +++ b/tpt/ksmlru.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col ksmlridx head IDX for 99 +col ksmlrdur head DUR for 99 +col ksmlrshrpool head SP for a2 + + +select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') current_time from dual; + +select + KSMLRIDX + , KSMLRDUR + , KSMLRNUM flushed + , decode(KSMLRSHRPOOL,1,'Y','N') ksmlrshrpool + , KSMLRCOM alloc_comment + , KSMLRSIZ alloc_size + , KSMLRHON ksmlru_object_name + , KSMLROHV hash_value + , KSMLRSES ses_addr +-- , KSMLRADU +-- , KSMLRNID +-- , KSMLRNSD +-- , KSMLRNCD +-- , KSMLRNED +from + x$ksmlru +where + ksmlrnum > 0 +order by + ksmlrnum desc +/ diff --git a/tpt/ksmsp.sql b/tpt/ksmsp.sql new file mode 100644 index 0000000..84a7870 --- /dev/null +++ b/tpt/ksmsp.sql @@ -0,0 +1,63 @@ +-- taken from metalink note 396940.1 +-- customized by Tanel + +prompt +prompt WARNING!!! This script will query X$KSMSP, which will cause heavy shared pool latch contention +prompt in systems under load and with large shared pool. This may even completely hang +prompt your instance until the query has finished! You probably do not want to run this in production! +prompt +pause Press ENTER to continue, CTRL+C to cancel... + + +col sga_heap format a15 +col size format a10 +col chunkcomment for a25 + +break on subpool on duration on sga_heap skip 1 on status skip 1 on chunkcomment + +select + KSMCHIDX subpool, + KSMCHDUR duration, + 'sga heap('||KSMCHIDX||','||KSMCHDUR||')' sga_heap, + ksmchcls Status, + substr(ksmchcom,1,decode(instr(ksmchcom,'^'),0,99,instr(ksmchcom,'^'))) ChunkComment, + decode(trunc(ksmchsiz/1024), + 0,'0-1K', + 1,'1-2K', + 2,'2-3K', + 3,'3-4K', + 4,'4-5K', + 5,'5-6k', + 6,'6-7k', + 7,'7-8k', + 8,'8-9k', + 9,'9-10k', + '> 10K') "SIZE", + count(*), + sum(ksmchsiz) "SUM(BYTES)", + min(ksmchsiz) MinBytes, + max(ksmchsiz) MaxBytes, + trunc(avg(ksmchsiz)) AvgBytes +from + x$ksmsp +where + 1=1 +and lower(KSMCHCOM) like lower('%&1%') +group by + ksmchidx, + ksmchdur, + ksmchcls, +-- 'sga heap('||KSMCHIDX||','||KSMCHDUR'||)', + substr(ksmchcom,1,decode(instr(ksmchcom,'^'),0,99,instr(ksmchcom,'^'))), + decode(trunc(ksmchsiz/1024),0,'0-1K',1,'1-2K', 2,'2-3K', 3,'3-4K',4,'4-5K',5,'5-6k', + 6, '6-7k',7,'7-8k',8,'8-9k', 9,'9-10k','> 10K') +order by + ksmchidx, + ksmchdur, + ksmchcls, + lower(substr(ksmchcom,1,decode(instr(ksmchcom,'^'),0,99,instr(ksmchcom,'^')))), + "SIZE" +/ + + + diff --git a/tpt/ksmsp2.sql b/tpt/ksmsp2.sql new file mode 100644 index 0000000..f5af391 --- /dev/null +++ b/tpt/ksmsp2.sql @@ -0,0 +1,63 @@ +-- taken from metalink note 396940.1 +-- customized by Tanel + +prompt +prompt WARNING!!! This script will query X$KSMSP, which will cause heavy shared pool latch contention +prompt in systems under load and with large shared pool. This may even completely hang +prompt your instance until the query has finished! You probably do not want to run this in production! +prompt +pause Press ENTER to continue, CTRL+C to cancel... + + +col sga_heap format a15 +col size format a10 +col chunkcomment for a25 + +break on subpool on duration on sga_heap skip 1 on status skip 1 on chunkcomment + +select + KSMCHIDX subpool, + KSMCHDUR duration, + 'sga heap('||KSMCHIDX||','||KSMCHDUR||')' sga_heap, + ksmchcls Status, + ksmchcom ChunkComment, + decode(trunc(ksmchsiz/1024), + 0,'0-1K', + 1,'1-2K', + 2,'2-3K', + 3,'3-4K', + 4,'4-5K', + 5,'5-6k', + 6,'6-7k', + 7,'7-8k', + 8,'8-9k', + 9,'9-10k', + '> 10K') "SIZE", + count(*), + sum(ksmchsiz) "SUM(BYTES)", + min(ksmchsiz) MinBytes, + max(ksmchsiz) MaxBytes, + trunc(avg(ksmchsiz)) AvgBytes +from + x$ksmsp +where + 1=1 +and lower(KSMCHCOM) like lower('%&1%') +group by + ksmchidx, + ksmchdur, + ksmchcls, +-- 'sga heap('||KSMCHIDX||','||KSMCHDUR'||)', + ksmchcom, + decode(trunc(ksmchsiz/1024),0,'0-1K',1,'1-2K', 2,'2-3K', 3,'3-4K',4,'4-5K',5,'5-6k', + 6, '6-7k',7,'7-8k',8,'8-9k', 9,'9-10k','> 10K') +order by + ksmchidx, + ksmchdur, + ksmchcls, + lower(ksmchcom), + "SIZE" +/ + + + diff --git a/tpt/ksqeq.sql b/tpt/ksqeq.sql new file mode 100644 index 0000000..4611958 --- /dev/null +++ b/tpt/ksqeq.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from x$ksqeq where addr = hextoraw(upper('&1')); \ No newline at end of file diff --git a/tpt/ksqrs.sql b/tpt/ksqrs.sql new file mode 100644 index 0000000..afcf452 --- /dev/null +++ b/tpt/ksqrs.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col ksqrs_addrlen new_value ksqrs_addrlen + +set termout off +select vsize(addr)*2 ksqrs_addrlen from x$dual; +set termout on + +select * from x$ksqrs where addr = hextoraw(lpad(upper('&1'), &ksqrs_addrlen, '0')); \ No newline at end of file diff --git a/tpt/kstex.sql b/tpt/kstex.sql new file mode 100644 index 0000000..ee03451 --- /dev/null +++ b/tpt/kstex.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col kstex_seqh head SEQH for 99999999999999 + +select + sid, + pid, + op event, + id, + val0, + func, + decode(id,1,'call',2,'return',3,'longjmp') calltype, + nvals, + val2, + val3, + seqh + power(2,32) kstex_seqh, + seql +from + x$kstex +where + sid like '&1' +order by + seqh, seql asc +/ + diff --git a/tpt/ksupr.sql b/tpt/ksupr.sql new file mode 100644 index 0000000..fb1915b --- /dev/null +++ b/tpt/ksupr.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from x$ksupr where addr='&1'; \ No newline at end of file diff --git a/tpt/ksuse.sql b/tpt/ksuse.sql new file mode 100644 index 0000000..4c6e3c3 --- /dev/null +++ b/tpt/ksuse.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + decode(bitand(ksuseflg,19),17,'BACKGROUND',1,'USER',2,'RECURSIVE','?') status1 + , s.* +from + x$ksuse s +where + &1 +/ diff --git a/tpt/ktuxe.sql b/tpt/ktuxe.sql new file mode 100644 index 0000000..fda8c82 --- /dev/null +++ b/tpt/ktuxe.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- KTU Xact Entry table + +SELECT + ktuxeusn usn# -- 65535 = no-undo transaction + , ktuxeslt slot# -- 65535 = invalid slot# + , ktuxesqn seq# + , ktuxesta status + , ktuxecfl flags + , ktuxesiz undo_blks + , ktuxerdbf curfile + , ktuxerdbb curblock + , ktuxescnw * power(2, 32) + ktuxescnb cscn -- commit/prepare commit SCN + , ktuxeuel + -- distributed xacts + --, ktuxeddbf r_rfile + --, ktuxeddbb r_rblock + --, ktuxepusn r_usn# + --, ktuxepslt r_slot# + --, ktuxepsqn r_seq# +FROM + x$ktuxe +WHERE ktuxesta != 'INACTIVE' +ORDER BY + ktuxeusn + , ktuxeslt +/ diff --git a/tpt/l.sql b/tpt/l.sql new file mode 100644 index 0000000..0ee6e84 --- /dev/null +++ b/tpt/l.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Display Latch stats from V$LATCH for latches matching %&1% + +select addr, level#, name, gets, misses, immediate_gets ig, immediate_misses im, spin_gets spingets, wait_time +from v$latch +where lower(name) like lower('%&1%'); diff --git a/tpt/la.sql b/tpt/la.sql new file mode 100644 index 0000000..ebb0090 --- /dev/null +++ b/tpt/la.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: la.sql ( Latch Address ) +-- Purpose: Show which latch occupies a given memory address and its stats +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @la +-- @la 50BE2178 +-- +-------------------------------------------------------------------------------- +column la_name heading NAME format a45 +column la_chld heading CHLD format 99999 + +select + addr, latch#, 0 la_chld, name la_name, gets, immediate_gets igets, + misses, immediate_misses imisses, spin_gets spingets, sleeps, wait_time +from v$latch_parent +where addr = hextoraw(lpad('&1', (select vsize(addr)*2 from v$latch_parent where rownum = 1) ,0)) +union all +select + addr, latch#, child#, name la_name, gets, immediate_gets igets, + misses, immediate_misses imisses, spin_gets spingets, sleeps, wait_time +from v$latch_children +where addr = hextoraw(lpad('&1', (select vsize(addr)*2 from v$latch_children where rownum = 1) ,0)) +/ diff --git a/tpt/last.sql b/tpt/last.sql new file mode 100644 index 0000000..7003fda --- /dev/null +++ b/tpt/last.sql @@ -0,0 +1,9 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from ( + select timestamp, username, os_username, userhost, terminal, action_name + from dba_audit_session + order by timestamp desc +) +where rownum <= 20; diff --git a/tpt/lastchanged.sql b/tpt/lastchanged.sql new file mode 100644 index 0000000..86483b3 --- /dev/null +++ b/tpt/lastchanged.sql @@ -0,0 +1,185 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lastchanged.sql +-- Purpose: Detect when a datablock in table was last changed +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lastchanged +-- +-- @lastchanged obj$ name='MYTABLE' +-- @lastchanged emp empno=100 +-- @lastchanged scott.emp rowid='AAAMlsAAEAAAAAfAAJ' +-- @lastchanged emp salary>100000 +-- @lastchanged trades "trader_id=123 and counterparty_id=456" +-- +-- Other: This script uses the ORA_ROWSCN pseudocolumn which relies on the +-- last change SCN in datablock header if ROWDEPENDENCIES are not +-- enabled. Thus without rowdependencies the last change information +-- is known at BLOCK LEVEL, not row level. +-- +-- If someone has deleted the row, then this script will not find it +-- thus report nothing for that row. In such case you can dump the +-- datablock where this row used to be if you know its address +-- (taken from a backup for example), read the last change SCN from +-- block header and use smon_scn_time or v$loghistory to map it to +-- real time. +-- +-- Some things like delayed block cleanout or ALTER TABLE MOVE +-- or ALTER TABLE SHRINK SPACE will alter the last update SCN so +-- you may get false positives in these cases. +-- +-------------------------------------------------------------------------------- + +COL last_changed FOR A30 + +PROMPT +PROMPT -- LastChanged.sql v1.0 by Tanel Poder ( http://www.tanelpoder.com ) +PROMPT + +PROMPT Running this query: +PROMPT +PROMPT . select MAX(ora_rowscn) +PROMPT . from &1 +PROMPT . where &2;; + +PROMPT + +@@saveset +SET FEEDBACK OFF + +VAR max_date VARCHAR2(50) + +BEGIN + SELECT TO_CHAR(SCN_TO_TIMESTAMP(MAX(ORA_ROWSCN)), 'YYYY-MM-DD HH24:MI:SS') INTO :max_date + + FROM &1 + WHERE &2; +EXCEPTION + WHEN OTHERS THEN NULL; +END; +/ + + +COL runme NOPRINT NEW_VALUE runme + +SELECT + 'scn_to_timestamp ' data_source + , CASE + WHEN :max_date IS NULL THEN 'SCN_TO_TIMESTAMP couldn''t convert SCN to time. See next section below' + ELSE :max_date + END last_changed + , CASE WHEN :max_date IS NULL THEN '--' ELSE '' END runme +FROM dual +/ + +COL runme CLEAR + + +WITH +sq_smon_scn_time AS ( + SELECT * FROM sys.smon_scn_time +), +sq_loghistory AS ( + SELECT * FROM v$log_history +), +sq_maxscn AS ( + SELECT + MAX(ORA_ROWSCN) max_scn + FROM &1 + WHERE &2 +), +sq_smon AS ( + SELECT + 'sys.smon_scn_time' source + , MIN(t1.time_dp) first_known_change_after + , MAX(t2.time_dp) last_known_change_before + FROM + sq_smon_scn_time t1 + , sq_smon_scn_time t2 + WHERE + (t1.scn_wrp * (POWER(2,32)-1) + t1.scn_bas) > (SELECT max_scn FROM sq_maxscn) + AND (t2.scn_wrp * (POWER(2,32)-1) + t2.scn_bas) < (SELECT max_scn FROM sq_maxscn) +), +sq_log AS ( + SELECT + 'v$log_history' source + , MIN(t1.first_time) first_known_change_after + , MAX(t2.first_time) last_known_change_before + FROM + sq_loghistory t1 + , sq_loghistory t2 + WHERE + (t1.first_change#) > (SELECT max_scn FROM sq_maxscn) + AND (t2.first_change#) < (SELECT max_scn FROM sq_maxscn) +) +SELECT + source data_source + , CASE WHEN last_changed IS NULL THEN 'No matching rows found. Adjust your filter condition' ELSE last_changed END last_changed +FROM ( + SELECT + source + , CASE + WHEN sq_smon.first_known_change_after IS NULL OR sq_smon.last_known_change_before IS NULL THEN + CASE WHEN (SELECT sq_maxscn.max_scn FROM sq_maxscn ) < + ( SELECT MIN(scn_wrp * (POWER(2,32)-1) + scn_bas) + FROM sq_smon_scn_time ) + THEN + (SELECT 'Before '||TO_CHAR(MIN(time_dp),'YYYY-MM-DD HH24:MI:SS')|| + ' (earlier than '||ROUND((SYSDATE - MIN(time_dp)))||' days ago)' + FROM sq_smon_scn_time) + WHEN (SELECT sq_maxscn.max_scn FROM sq_maxscn ) > + ( SELECT MAX(scn_wrp * (POWER(2,32)-1) + scn_bas) + FROM sq_smon_scn_time ) + THEN + (SELECT 'After '||TO_CHAR(MAX(time_dp),'YYYY-MM-DD HH24:MI:SS')|| + ' (between '||ROUND(((SYSDATE - MAX(time_dp))*24*60))||' minutes ago and now)' + FROM sq_smon_scn_time) + END + ELSE + 'Between '||TO_CHAR(last_known_change_before, 'YYYY-MM-DD HH24:MI:SS')|| + ' and '||TO_CHAR(first_known_change_after, 'YYYY-MM-DD HH24:MI:SS')|| + ' ('||ROUND((first_known_change_after - last_known_change_before)*24*60) || ' minute range)' + END last_changed + FROM ( + sq_smon + ) + UNION ALL + SELECT + source data_source + , CASE + WHEN sq_log.first_known_change_after IS NULL OR sq_log.last_known_change_before IS NULL THEN + CASE WHEN (SELECT sq_maxscn.max_scn FROM sq_maxscn ) < + ( SELECT MIN(first_change#) FROM sq_loghistory ) + THEN + (SELECT 'Before '||TO_CHAR(MIN(first_time),'YYYY-MM-DD HH24:MI:SS')|| + ' (earlier than '||ROUND((SYSDATE - MIN(first_time)))||' days ago)' + FROM sq_loghistory) + WHEN (SELECT sq_maxscn.max_scn FROM sq_maxscn ) > + ( SELECT MAX(first_change#) FROM sq_loghistory ) + THEN + (SELECT 'After '||TO_CHAR(MAX(first_time),'YYYY-MM-DD HH24:MI:SS')|| + ' (between '||ROUND(((SYSDATE - MAX(first_time))*24*60))||' minutes ago and now)' + FROM sq_loghistory) + END + ELSE + 'Between '||TO_CHAR(last_known_change_before, 'YYYY-MM-DD HH24:MI:SS')|| + ' and '||TO_CHAR(first_known_change_after, 'YYYY-MM-DD HH24:MI:SS')|| + ' ('||ROUND((first_known_change_after - last_known_change_before)*24*60) || ' minute range)' + END last_changed + FROM ( + sq_log + ) +) +&runme WHERE 1=0 +/ + +SET HEADING OFF +SELECT COUNT(*)||' rows analyzed.' FROM &1 WHERE &2; +SET HEADING ON + +@@loadset \ No newline at end of file diff --git a/tpt/lastmon.sql b/tpt/lastmon.sql new file mode 100644 index 0000000..2de79de --- /dev/null +++ b/tpt/lastmon.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + sql_exec_start + , sql_id + , ROUND(elapsed_time) ela_us + , ROUND(cpu_time) cpu_us + , ROUND(elapsed_time/1000) ela_ms + , ROUND(cpu_time/1000) cpu_ms +-- , ROUND(cpu_time * 1000 / 10000000) cpu_ns_row + , buffer_gets lios + , ROUND(physical_read_bytes/1024/1024,2) rd_mb + , ROUND(physical_write_bytes/1024/1024,2) wr_mb +FROM + v$sql_monitor +WHERE + sid = SYS_CONTEXT('USERENV','SID') +AND last_refresh_time = (SELECT MAX(last_refresh_time) + FROM v$sql_monitor + WHERE sid = SYS_CONTEXT('USERENV','SID') + ) +/ + diff --git a/tpt/lastmont.sql b/tpt/lastmont.sql new file mode 100644 index 0000000..28ce21c --- /dev/null +++ b/tpt/lastmont.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL partial_sql_text FOR A40 +SELECT + SUBSTR(sql_text,1,40) partial_sql_text + , sql_exec_start + , sql_id + , ROUND(elapsed_time/1000) ela_ms + , ROUND(cpu_time/1000) cpu_ms + , buffer_gets lios + , ROUND(physical_read_bytes/1024/1024,2) rd_mb + , ROUND(physical_write_bytes/1024/1024,2) wr_mb +FROM + v$sql_monitor +WHERE + sid = SYS_CONTEXT('USERENV','SID') +AND (sql_id, last_refresh_time) IN ( + SELECT sql_id, MAX(last_refresh_time) + FROM v$sql_monitor + WHERE sid = SYS_CONTEXT('USERENV','SID') + AND sql_text LIKE '&1' + GROUP BY sql_id + ) +ORDER BY + sql_exec_start + , sql_exec_id +/ + diff --git a/tpt/latchprof.sql b/tpt/latchprof.sql new file mode 100644 index 0000000..0722507 --- /dev/null +++ b/tpt/latchprof.sql @@ -0,0 +1,121 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: latchprof.sql ( Latch Holder Profiler ) +-- Purpose: Perform high-frequency sampling on V$LATCHHOLDER +-- and present a profile of latches held by sessions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @latchprof <#samples> +-- @latchprof name 350 % 100000 - monitor all latches SID 350 is holding +-- @latchprof sid,name % library 1000000 - monitor which SIDs hold latches with "library" in their name +-- @latchprof sid,name,laddr % 40D993A0 100000 - monitor which SIDs hold child latch with address 0x40D993A0 +-- Other: +-- The sampling relies on NESTED LOOP join method and having +-- V$LATCHHOLDER as the inner (probed) table. Note that on 9i +-- you may need to run this script as SYS as it looks like otherwise +-- the global USE_NL hint is not propagated down to X$ base tables +-- +-- The join in exec plan step 8 MUST be a NESTED LOOPS join, this is how +-- the high speed sampling of changing dataset from V$LATCHHOLDER +-- is done, otherwise you will not see correct results. +-- +-- ----------------------------------------------------------------------------------------------- +-- | Id | Operation | Name | E-Rows | OMem | 1Mem | Used-Mem | +-- ----------------------------------------------------------------------------------------------- +-- | 1 | MERGE JOIN CARTESIAN | | 1 | | | | +-- | 2 | MERGE JOIN CARTESIAN | | 1 | | | | +-- |* 3 | FIXED TABLE FULL | X$KSUTM | 1 | | | | +-- | 4 | BUFFER SORT | | 1 | 9216 | 9216 | 8192 (0)| +-- | 5 | VIEW | | 1 | | | | +-- | 6 | SORT ORDER BY | | 1 | 2048 | 2048 | 2048 (0)| +-- | 7 | SORT GROUP BY | | 1 | 9216 | 9216 | 8192 (0)| +-- | 8 | NESTED LOOPS | | 1 | | | | +-- | 9 | VIEW | | 1 | | | | +-- | 10 | CONNECT BY WITHOUT FILTERING| | | | | | +-- | 11 | FAST DUAL | | 1 | | | | +-- |* 12 | FIXED TABLE FULL | X$KSUPRLAT | 1 | | | | +-- | 13 | BUFFER SORT | | 1 | 9216 | 9216 | 8192 (0)| +-- |* 14 | FIXED TABLE FULL | X$KSUTM | 1 | | | | +-- ----------------------------------------------------------------------------------------------- +-- +-- If you want to drill down to latch child level, include "laddr" in first parameter +-- to latchprof +-- +-- Then you can use la.sql (V$LATCH_PARENT/V$LATCH_CHILDREN) to +-- map the latch address back to latch child# if needed +-- +-------------------------------------------------------------------------------- + +-- what includes what columns to display & aggregate and also options like latch name filtering +DEF _lhp_what="&1" +DEF _lhp_sid="&2" +DEF _lhp_name="&3" +DEF _lhp_samples="&4" + +COL name FOR A40 WRAP +COL latchprof_total_ms HEAD "Held ms" FOR 999999.999 +COL latchprof_pct_total_samples head "Held %" format 999.99 +COL latchprof_avg_ms HEAD "Avg hold ms" FOR 999.999 +COL dist_samples HEAD Gets +COL total_samples HEAD Held + +BREAK ON lhp_name SKIP 1 + +PROMPT +PROMPT -- LatchProf 2.10 by Tanel Poder ( https://blog.tanelpoder.com ) + +SET TERMOUT OFF +SELECT DECODE(SUBSTR(BANNER, INSTR(BANNER, 'Release ')+8,1), 1, '', '--') latchprof_oraversion +FROM v$version WHERE ROWNUM=1; +SET TERMOUT ON + +WITH + t1 AS (SELECT hsecs FROM v$timer), + samples AS ( + SELECT /*+ ORDERED USE_NL(l) USE_NL(s) USE_NL(l.gv$latchholder.x$ksuprlat) NO_TRANSFORM_DISTINCT_AGG */ + &_lhp_what + , COUNT(DISTINCT gets) dist_samples + , COUNT(*) total_samples + , COUNT(*) / &_lhp_samples total_samples_pct + FROM + (SELECT /*+ NO_MERGE */ 1 FROM DUAL CONNECT BY LEVEL <= &_lhp_samples) s, + v$latchholder l, + (SELECT + sid indx + , sql_hash_value sqlhash + , sql_address sqladdr + , sql_child_number sqlchild + , sql_id sqlid + FROM v$session) s + WHERE + l.sid LIKE '&_lhp_sid' + AND (LOWER(l.name) LIKE LOWER('%&_lhp_name%') OR LOWER(RAWTOHEX(l.laddr)) LIKE LOWER('%&_lhp_name%')) + AND l.sid = s.indx + GROUP BY + &_lhp_what + ORDER BY + total_samples DESC + ), + t2 AS (SELECT hsecs FROM v$timer) +SELECT /*+ ORDERED */ + &_lhp_what + , s.total_samples + , s.dist_samples + -- , s.total_samples_pct + , s.total_samples / &_lhp_samples * 100 latchprof_pct_total_samples + , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &_lhp_samples latchprof_total_ms + -- s.dist_events, + , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / dist_samples / &_lhp_samples latchprof_avg_ms +FROM + t1, + samples s, + t2 +WHERE ROWNUM <= 30 +/ + +COL name CLEAR diff --git a/tpt/latchprof_old.sql b/tpt/latchprof_old.sql new file mode 100644 index 0000000..42cae0b --- /dev/null +++ b/tpt/latchprof_old.sql @@ -0,0 +1,88 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lhp.sql ( Latch Holder Profile ) +-- Purpose: Perform high-frequency sampling on V$LATCHHOLDER +-- and present a profile of latches held by sessions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @latchprof <#samples> +-- @latchprof sid,name 350 library 100000 +-- @latchprof name % % 1000000 +-- Other: +-- The sampling relies on NESTED LOOP join method and having +-- V$LATCHHOLDER as the inner (probed) table. Note that on 9i +-- you may need to run this script as SYS as it looks like otherwise +-- the global USE_NL hint is not propagated down to X$ base tables +-- +-- If sampling always reports a single latch event even though +-- many different events (or parameter values) are expected then +-- the execution plan used is not right. +-- +-- If you want to drill down to latch child level, uncomment the +-- l.laddr fields from select and group by list. +-- Then you can use la.sql (V$LATCH_PARENT/V$LATCH_CHILDREN) to +-- map the latch address back to latch child# +-- +-------------------------------------------------------------------------------- + +-- what includes what columns to display & aggregate and also options like latch name filtering +DEF _lhp_what="&1" +DEF _lhp_sid="&2" +DEF _lhp_name="&3" +DEF _lhp_samples="&4" + +COL lhp_name HEAD NAME +COL latchprof_total_ms HEAD "Held ms" FOR 999999.999 +COL latchprof_pct_total_samples head "Held %" format 999.99 +COL latchprof_avg_ms HEAD "Avg hold ms" FOR 999.999 +COL dist_samples HEAD Gets +COL total_samples HEAD Held + +BREAK ON lhp_name SKIP 1 + +WITH + t1 AS (SELECT hsecs FROM v$timer), + samples AS ( + SELECT /*+ ORDERED USE_NL(l.gv$latchholder.x$ksuprlat) */ + &_lhp_what +-- , COUNT(DISTINCT gets) dist_samples + , COUNT(*) total_samples + , COUNT(*) / &_lhp_samples total_samples_pct + FROM +-- (SELECT /*+ NO_MERGE */ 1 FROM DUAL CONNECT BY LEVEL <= &_lhp_samples) s, + ( SELECT /*+ NO_MERGE */ 1 FROM + (SELECT rownum r FROM dual CONNECT BY ROWNUM <= 1000) a, + (SELECT rownum r FROM dual CONNECT BY ROWNUM <= 1000) b, + (SELECT rownum r FROM dual CONNECT BY ROWNUM <= 1000) c + WHERE ROWNUM <= &_lhp_samples + ) s, + v$latchholder l + WHERE + l.sid LIKE '&_lhp_sid' + AND (LOWER(l.name) LIKE LOWER('%&_lhp_name%') OR LOWER(RAWTOHEX(l.laddr)) LIKE LOWER('%&_lhp_name%')) + GROUP BY + &_lhp_what + ORDER BY + total_samples DESC + ), + t2 AS (SELECT hsecs FROM v$timer) +SELECT /*+ ORDERED */ + &_lhp_what + , s.total_samples +-- , s.dist_samples +-- , s.total_samples_pct + , s.total_samples / &_lhp_samples * 100 latchprof_pct_total_samples + , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &_lhp_samples latchprof_total_ms +-- s.dist_events, +-- , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / dist_samples / &_lhp_samples latchprof_avg_ms + FROM + t1, + samples s, + t2 +/ + diff --git a/tpt/latchprofx.sql b/tpt/latchprofx.sql new file mode 100644 index 0000000..915443b --- /dev/null +++ b/tpt/latchprofx.sql @@ -0,0 +1,201 @@ +-- Copyright 2019 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: latchprofx.sql ( Latch Holder Profiler eXtended ) +-- Purpose: Perform high-frequency sampling on V$LATCHHOLDER +-- and present a profile of latches held by sessions +-- including extended statistics about in which kernel +-- function the latch held was taken +-- +-- Author: Tanel Poder +-- https://tanelpoder.com +-- +-- Usage: @latchprofx <#samples> +-- @latchprofx name 350 % 100000 - monitor all latches SID 350 is holding +-- @latchprofx sid,name % library 1000000 - monitor which SIDs hold latches with "library" in their name +-- @latchprofx sid,name,laddr % 40D993A0 100000 - monitor which SIDs hold child latch with address 0x40D993A0 +-- @latchprofx sid,name,func % % 100000 +-- - monitor all sessions and latches and show +-- - latch get Where info (locations in kernel code +-- - where the latch get was done) +-- +-- @latchprofx sid,name,hmode,func 89 "cache buffers chains" 100000 +-- - monitor functions that took latch for SID 89 only +-- - and report only "cache buffers chains" latch holders +-- - also report hold mode HMODE (shared or exclusive) +-- +-- @latchprofx sid,name,hmode,func,object % 40D993A0 100000 +-- - monitor for what object's access the child latch at +-- - particular address was taken. for "cache buffers chains" +-- - latch the object means data block address (DBA) +-- - of the block accessed in buffer cache. +-- - you can translate the 6-byte DBA to rfile#/block# +-- - using dbms_utility or dba.sql script from TPT scripts +-- - for "enqueue hash chains" latch you can look up the locked +-- - resource via V$RESOURCE.ADDR +-- +-- +-- Other: +-- This script is based on X$ tables instead of V$ tables +-- as some info required is not externalized to V$. +-- So you need to run this script either as SYS or +-- need to have relevant X$ proxy views created +-- +-- The sampling relies on NESTED LOOP join method and having +-- X$KSUPRLAT as the inner (probed) table. +-- +-- If sampling always reports a single latch event even though +-- many different events (or parameter values) are expected then +-- the execution plan used is not right. +-- +-- The join in exec plan step 9 MUST be a NESTED LOOPS join, this is how +-- the high speed sampling is done. +-- +-- ----------------------------------------------------------------------------------------------------- +-- | Id | Operation | Name | E-Rows | OMem | 1Mem | Used-Mem | +-- ----------------------------------------------------------------------------------------------------- +-- | 1 | MERGE JOIN CARTESIAN | | 1 | | | | +-- | 2 | MERGE JOIN CARTESIAN | | 1 | | | | +-- |* 3 | FIXED TABLE FULL | X$KSUTM | 1 | | | | +-- | 4 | BUFFER SORT | | 1 | 9216 | 9216 | 8192 (0)| +-- | 5 | VIEW | | 1 | | | | +-- | 6 | SORT ORDER BY | | 1 | 2048 | 2048 | 2048 (0)| +-- | 7 | HASH GROUP BY | | 1 | | | | +-- | 8 | NESTED LOOPS OUTER | | 1 | | | | +-- | 9 | NESTED LOOPS | | 1 | | | | +-- | 10 | VIEW | | 1 | | | | +-- | 11 | CONNECT BY WITHOUT FILTERING| | | | | | +-- | 12 | FAST DUAL | | 1 | | | | +-- |* 13 | FIXED TABLE FULL | X$KSUPRLAT | 1 | | | | +-- |* 14 | FIXED TABLE FIXED INDEX | X$KSLLW (ind:2) | 1 | | | | +-- | 15 | BUFFER SORT | | 1 | 9216 | 9216 | 8192 (0)| +-- |* 16 | FIXED TABLE FULL | X$KSUTM | 1 | | | | +-- ----------------------------------------------------------------------------------------------------- +-- +-- If you want to drill down to latch child level, include "name" in first parameter to latchprof +-- +-- Then you can use la.sql (V$LATCH_PARENT/V$LATCH_CHILDREN) to +-- map the latch address back to latch child# +-- +-------------------------------------------------------------------------------- + +-- what includes what columns to display & aggregate and also options like latch name filtering +DEF _lhp_what="&1" +DEF _lhp_sid="&2" +DEF _lhp_name="&3" +DEF _lhp_samples="&4" + +COL name FOR A40 WRAP +COL latchprof_total_ms HEAD "Held ms" FOR 999999.999 +COL latchprof_pct_total_samples head "Held %" format 999.99 +COL latchprof_avg_ms HEAD "Avg hold ms" FOR 999999.999 +COL dist_samples HEAD Gets +COL total_samples HEAD Held +COL ksllwnam FOR A40 TRUNCATE +COL ksllwlbl FOR A20 TRUNCATE +COL objtype FOR A20 TRUNCATE +COL object FOR A17 WRAP JUST RIGHT +COL hmode FOR A12 TRUNCATE +COL what FOR A17 WRAP +COL func FOR A40 TRUNCATE +COL timemodel FOR A32 WORD_WRAP + +BREAK ON lhp_name SKIP 1 + +DEF _IF_ORA_11_OR_HIGHER="--" + +PROMPT +PROMPT -- LatchProfX 2.11 by Tanel Poder ( https://tanelpoder.com ) + +COL latchprof_ora_11 NEW_VALUE _IF_ORA_11_OR_HIGHER + +SET TERMOUT OFF +SELECT + CASE WHEN SUBSTR(banner, INSTR(banner, 'Release ')+8,2) >= '11' THEN '' ELSE '--' END latchprof_ora_11 +FROM v$version WHERE ROWNUM=1; +SET TERMOUT ON + +WITH + t1 AS (SELECT hsecs FROM v$timer), + samples AS ( + SELECT /*+ ORDERED USE_NL(l.x$ksuprlat) USE_NL(s.x$ksuse) NO_TRANSFORM_DISTINCT_AGG */ + &_lhp_what + , COUNT(DISTINCT gets) dist_samples + , COUNT(*) total_samples + , COUNT(*) / &_lhp_samples total_samples_pct + FROM + (SELECT /*+ NO_MERGE */ 1 FROM DUAL CONNECT BY LEVEL <= &_lhp_samples) s, + (SELECT ksuprpid PID, ksuprsid SID, ksuprlnm NAME, ksuprlat LADDR, ksulawhr, + TO_CHAR(ksulawhy,'XXXXXXXXXXXXXXXX') object + , ksulagts GETS + , lower(ksuprlmd) HMODE + FROM x$ksuprlat) l, + (SELECT + indx + , ksusesqh sqlhash + , ksusesql sqladdr + &_IF_ORA_11_OR_HIGHER , CASE WHEN BITAND(ksusstmbv, POWER(2, 01)) = POWER(2, 01) THEN 'DBTIME ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 02)) = POWER(2, 02) THEN 'BACKGROUND ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 03)) = POWER(2, 03) THEN 'CONNECTION_MGMT ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 04)) = POWER(2, 04) THEN 'PARSE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 05)) = POWER(2, 05) THEN 'FAILED_PARSE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 06)) = POWER(2, 06) THEN 'NOMEM_PARSE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 07)) = POWER(2, 07) THEN 'HARD_PARSE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 08)) = POWER(2, 08) THEN 'NO_SHARERS_PARSE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 09)) = POWER(2, 09) THEN 'BIND_MISMATCH_PARSE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 10)) = POWER(2, 10) THEN 'SQL_EXECUTION ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 11)) = POWER(2, 11) THEN 'PLSQL_EXECUTION ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 12)) = POWER(2, 12) THEN 'PLSQL_RPC ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 13)) = POWER(2, 13) THEN 'PLSQL_COMPILATION ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 14)) = POWER(2, 14) THEN 'JAVA_EXECUTION ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 15)) = POWER(2, 15) THEN 'BIND ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 16)) = POWER(2, 16) THEN 'CURSOR_CLOSE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 17)) = POWER(2, 17) THEN 'SEQUENCE_LOAD ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 18)) = POWER(2, 18) THEN 'INMEMORY_QUERY ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 19)) = POWER(2, 19) THEN 'INMEMORY_POPULATE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 20)) = POWER(2, 20) THEN 'INMEMORY_PREPOPULATE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 21)) = POWER(2, 21) THEN 'INMEMORY_REPOPULATE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 22)) = POWER(2, 22) THEN 'INMEMORY_TREPOPULATE ' END + &_IF_ORA_11_OR_HIGHER ||CASE WHEN BITAND(ksusstmbv, POWER(2, 23)) = POWER(2, 23) THEN 'TABLESPACE_ENCRYPTION ' END timemodel + &_IF_ORA_11_OR_HIGHER , ksusesph planhash + &_IF_ORA_11_OR_HIGHER , ksusesch sqlchild + &_IF_ORA_11_OR_HIGHER , ksusesqi sqlid + FROM x$ksuse) s, + (SELECT indx, + ksllwnam func, ksllwnam, + ksllwlbl objtype, ksllwlbl + FROM x$ksllw) w + WHERE + l.sid LIKE '&_lhp_sid' + AND l.ksulawhr = w.indx (+) + AND l.sid = s.indx + AND (LOWER(l.name) LIKE LOWER('%&_lhp_name%') OR LOWER(RAWTOHEX(l.laddr)) LIKE LOWER('%&_lhp_name%')) + GROUP BY + &_lhp_what + ORDER BY + total_samples DESC + ), + t2 AS (SELECT hsecs FROM v$timer) +SELECT /*+ ORDERED */ + &_lhp_what + , s.total_samples + , s.dist_samples +-- , s.total_samples_pct + , s.total_samples / &_lhp_samples * 100 latchprof_pct_total_samples + , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &_lhp_samples latchprof_total_ms +-- , s.dist_events + , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / dist_samples / &_lhp_samples latchprof_avg_ms + FROM + t1, + samples s, + t2 + WHERE ROWNUM <= 40 +/ + +COL name CLEAR +COL hmode CLEAR +COL what CLEAR +COL func CLEAR +COL objtype CLEAR diff --git a/tpt/lc.sql b/tpt/lc.sql new file mode 100644 index 0000000..a4f3683 --- /dev/null +++ b/tpt/lc.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Display Latch Children stats from V$LATCH for latches matching %&1% + +select addr, child#, name, gets, misses, immediate_gets ig, immediate_misses im, spin_gets spingets +from v$latch_children +where lower(name) like lower('%&1%') +order by name, child# +/ diff --git a/tpt/lco.sql b/tpt/lco.sql new file mode 100644 index 0000000..b599312 --- /dev/null +++ b/tpt/lco.sql @@ -0,0 +1,9 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + * +FROM + v$db_object_cache WHERE hash_value IN (&1) +@pr + diff --git a/tpt/lcoa.sql b/tpt/lcoa.sql new file mode 100644 index 0000000..4f1324f --- /dev/null +++ b/tpt/lcoa.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + * +FROM + v$db_object_cache +WHERE + addr = HEXTORAW(LPAD('&1',16,0)) +@pr + diff --git a/tpt/ld.sql b/tpt/ld.sql new file mode 100644 index 0000000..a8fb93d --- /dev/null +++ b/tpt/ld.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column lt_type heading "TYPE" format a4 +column lt_name heading "LOCK NAME" format a30 +column lt_id1_tag heading "ID1 MEANING" format a25 word_wrap +column lt_id2_tag heading "ID2 MEANING" format a25 word_wrap +column lt_us_user heading "USR" format a3 +column lt_description heading "DESCRIPTION" format a60 word_wrap + + +select + type lt_type, + name lt_name, + id1_tag lt_id1_tag, + id2_tag lt_id2_tag, + is_user lt_is_user, + description lt_description +from + v$lock_type +where + upper(name) like upper('%&1%') +or upper(description) like upper('%&1%') +/ + diff --git a/tpt/len.sql b/tpt/len.sql new file mode 100644 index 0000000..f8e72f9 --- /dev/null +++ b/tpt/len.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@length "&1" \ No newline at end of file diff --git a/tpt/length.sql b/tpt/length.sql new file mode 100644 index 0000000..07a6b17 --- /dev/null +++ b/tpt/length.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col len_hex for a20 + +select + length('&1') len_dec + , '0x'||trim(to_char(length('&1'), 'XXXXXXXXXXXXXXXX')) len_hex +from dual +/ diff --git a/tpt/lh.sql b/tpt/lh.sql new file mode 100644 index 0000000..8abd0b5 --- /dev/null +++ b/tpt/lh.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lh.sql ( Latch Holder ) +-- Purpose: Show latch holding SIDs and latch details from V$LATCHHOLDER +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lh +-- @lh % +-- +-------------------------------------------------------------------------------- +SELECT + * +FROM + V$LATCHHOLDER +WHERE + sid LIKE '&1' +/ + + + diff --git a/tpt/lhp.sql b/tpt/lhp.sql new file mode 100644 index 0000000..8b7ddaa --- /dev/null +++ b/tpt/lhp.sql @@ -0,0 +1,97 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lhp.sql ( Latch Holder Profile ) +-- Purpose: Perform high-frequency sampling on V$LATCHHOLDER +-- and present a profile of latches held by sessions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lhp <#samples> +-- @lhp 350 library 100000 +-- @lhp % % 1000000 +-- Other: +-- The sampling relies on NESTED LOOP join method and having +-- V$LATCHHOLDER as the inner (probed) table. Note that on 9i +-- you may need to run this script as SYS as it looks like otherwise +-- the global USE_NL hint is not propagated down to X$ base tables +-- +-- If sampling always reports a single latch event even though +-- many different events (or parameter values) are expected then +-- the execution plan used is not right. +-- +-- If you want to drill down to latch child level, uncomment the +-- l.laddr fields from select and group by list. +-- Then you can use la.sql (V$LATCH_PARENT/V$LATCH_CHILDREN) to +-- map the latch address back to latch child# +-- +-------------------------------------------------------------------------------- + +DEF _lhp_sid="&1" +DEF _lhp_name="&2" +DEF _lhp_samples="&3" + +COL lhp_name HEAD NAME + +BREAK ON lhp_name SKIP 1 + + +SELECT /*+ ORDERED USE_NL(l.gv$latchholder.x$ksuprlat) */ + l.name lhp_name, + l.laddr, + l.sid, +-- l.pid, + COUNT(*) "COUNT" +FROM + (SELECT /*+ NO_MERGE */ 1 FROM DUAL CONNECT BY LEVEL <= &_lhp_samples) s, + v$latchholder l +WHERE + l.sid LIKE '&_lhp_sid' +AND LOWER(l.name) LIKE LOWER('%&_lhp_name%') +GROUP BY +-- l.pid, + l.sid, + l.laddr, + l.name +ORDER BY + l.name, + "COUNT" DESC +/ + +-- UNDEF _lhp_sid +-- UNDEF _lhp_samples + + + +-- ROW_WAIT_OBJ# +-- ROW_WAIT_FILE# +-- ROW_WAIT_BLOCK# +-- ROW_WAIT_ROW# + +-- SQL_ADDRESS +-- SQL_HASH_VALUE +-- SQL_ID +-- SQL_CHILD_NUMBER +-- SQL_EXEC_START +-- SQL_EXEC_ID +-- PREV_SQL_ADDR +-- PREV_HASH_VALUE +-- PREV_SQL_ID +-- PREV_CHILD_NUMBER +-- PREV_EXEC_START +-- PREV_EXEC_ID +-- PLSQL_ENTRY_OBJECT_ID +-- PLSQL_ENTRY_SUBPROGRAM_ID +-- PLSQL_OBJECT_ID +-- PLSQL_SUBPROGRAM_ID +-- MODULE +-- MODULE_HASH +-- ACTION +-- ACTION_HASH +-- CLIENT_INFO +-- FIXED_TABLE_SEQUENCE +-- +-- @lm diff --git a/tpt/lhpx.sql b/tpt/lhpx.sql new file mode 100644 index 0000000..40e228b --- /dev/null +++ b/tpt/lhpx.sql @@ -0,0 +1,114 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: latchprofx.sql ( Latch Holder Profile eXtended ) +-- Purpose: Perform high-frequency sampling on V$LATCHHOLDER +-- and present a profile of latches held by sessions +-- with information where from Oracle kernel code a +-- latch was held +-- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lhp <#samples> +-- @lhp 350 100000 +-- @lhp % 1000000 +-- Other: +-- The sampling relies on NESTED LOOP join method and having +-- V$LATCHHOLDER as the inner (probed) table. Note that on 9i +-- you may need to run this script as SYS as it looks like otherwise +-- the global USE_NL hint is not propagated down to X$ base tables +-- +-- If sampling always reports a single latch event even though +-- many different events (or parameter values) are expected then +-- the execution plan used is not right. +-- +-- If you want to drill down to latch child level, uncomment the +-- l.laddr fields from select and group by list. +-- Then you can use la.sql (V$LATCH_PARENT/V$LATCH_CHILDREN) to +-- map the latch address back to latch child# +-- +-------------------------------------------------------------------------------- + +COL lhpx_sid HEAD SID FOR 99999 +COL lhpx_held_mode HEAD HELD_MODE FOR A15 +COL latch_name FOR A40 +COL ksllwnam FOR A45 +COL ksllwlbl FOR a30 + +DEF _lhp_sid=&1 +DEF _lhp_latchname=&2 +DEF _lhp_samples=&3 + +SELECT /*+ ORDERED USE_NL(l) */ +-- l.ksuprpid pid, + l.ksuprsid lhpx_sid, +-- l.ksuprlat address, + l.ksuprlnm latch_name, +-- l.ksuprlmd lhpx_held_mode, + w.ksllwnam, + w.ksllwlbl, + COUNT(*) "COUNT" +-- ,COUNT(DISTINCT ksulagts) "DISTGETS" +FROM + (SELECT /*+ NO_MERGE */ 1 FROM DUAL CONNECT BY LEVEL <= &_lhp_samples) s, + x$ksuprlat l, + x$ksllw w +WHERE + l.ksuprsid LIKE '&_lhp_sid' +AND lower(l.ksuprlnm) LIKE lower('&_lhp_latchname') +AND l.ksulawhr = w.indx (+) +GROUP BY +-- l.ksuprpid, + l.ksuprsid, +-- l.ksuprlat, + ksuprlnm, +-- ksuprlmd, + w.ksllwnam, + w.ksllwlbl +ORDER BY + "COUNT" +/ + +UNDEF _lhp_sid +UNDEF _lhp_samples + + + +-- sqlprof +-- row wait prof / rwprof +-- modactprof / maprof + +-- ROW_WAIT_OBJ# +-- ROW_WAIT_FILE# +-- ROW_WAIT_BLOCK# +-- ROW_WAIT_ROW# + +-- SQL_ADDRESS +-- SQL_HASH_VALUE +-- SQL_ID +-- SQL_CHILD_NUMBER +-- SQL_EXEC_START +-- SQL_EXEC_ID +-- PREV_SQL_ADDR +-- PREV_HASH_VALUE +-- PREV_SQL_ID +-- PREV_CHILD_NUMBER +-- PREV_EXEC_START +-- PREV_EXEC_ID +-- PLSQL_ENTRY_OBJECT_ID +-- PLSQL_ENTRY_SUBPROGRAM_ID +-- PLSQL_OBJECT_ID +-- PLSQL_SUBPROGRAM_ID +-- MODULE +-- MODULE_HASH +-- ACTION +-- ACTION_HASH +-- CLIENT_INFO +-- FIXED_TABLE_SEQUENCE +-- +-- @lm + diff --git a/tpt/li.sql b/tpt/li.sql new file mode 100644 index 0000000..9c9e479 --- /dev/null +++ b/tpt/li.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@li2 '%&1%' \ No newline at end of file diff --git a/tpt/li2.sql b/tpt/li2.sql new file mode 100644 index 0000000..2eb23fc --- /dev/null +++ b/tpt/li2.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + lock_id1, + session_id, + lock_Type, + mode_held, + mode_requested +from + dba_lock_internal +where + lower(lock_id1) like lower('&1') +/ diff --git a/tpt/lib.sql b/tpt/lib.sql new file mode 100644 index 0000000..1e0f111 --- /dev/null +++ b/tpt/lib.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@lib2 "%&1%" diff --git a/tpt/lib2.sql b/tpt/lib2.sql new file mode 100644 index 0000000..76ed8d4 --- /dev/null +++ b/tpt/lib2.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col lib_owner head OWNER for a25 +col lib_file_spec head FILE_SPEC for a80 + +select + owner lib_owner, + library_name, + dynamic dyn, + status, + file_spec lib_file_spec +from + dba_libraries +where + lower(library_name) like lower ('&1') +or lower(file_spec) like lower ('&1') +/ diff --git a/tpt/list.sql b/tpt/list.sql new file mode 100644 index 0000000..25a44ee --- /dev/null +++ b/tpt/list.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +--set lines 156 + +column sawr_list_takenby heading "Taken By" format a20 +column sawr_list_snapid heading "Snap ID" format 9999999 +column sawr_list_snaptime heading "Snapshot Time" format a20 +column sawr_session_count heading "Snapped|Sessions" format 9999999 +column sawr_snap_mode heading "Snapshot|Mode" format a40 + +select + snap.snapid sawr_list_snapid, + to_char(snap.snaptime, 'YYYY-MM-DD HH24:MI:SS') sawr_list_snaptime, + snap.takenby sawr_list_takenby, + snap.snap_mode sawr_snap_mode, + count(*) sawr_session_count +from + sawr$snapshots snap, + sawr$sessions sess +where + snap.snapid = sess.snapid +group by + snap.snapid, + to_char(snap.snaptime, 'YYYY-MM-DD HH24:MI:SS'), + snap.snap_mode, + snap.takenby +order by + to_char(snap.snaptime, 'YYYY-MM-DD HH24:MI:SS') +/ diff --git a/tpt/lm.sql b/tpt/lm.sql new file mode 100644 index 0000000..b331a9c --- /dev/null +++ b/tpt/lm.sql @@ -0,0 +1,47 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column lm_parent_name heading LATCH_NAME format a50 +column lm_where heading WHERE format a50 +column lm_label heading LABEL format a30 +column lm_nwfail_count heading NOWAITFAILS format 999999999999 +column lm_sleep_count heading SLEEPS format 999999999999 +column lm_wtr_sleep_count heading WAITER_SLEEPS format 999999999999 + +PROMPT Querying V$LATCH_MISSES.... + +--select +-- t1.ksllasnam lm_parent_name, +-- t2.ksllwnam lm_where, +---- t1.kslnowtf, +---- t1.kslsleep, +---- t1.kslwscwsl, +---- t1.kslwsclthg, +-- t2.ksllwlbl lm_label +--from +-- x$ksllw t2, +-- x$kslwsc t1 +--where +-- t2.indx = t1.indx +--and lower(t1.ksllasnam) like lower('%&1%') +--/ + +select * from ( + select + rownum-1 loc#, + to_char(rownum-1, 'XXXX') hexl#, + parent_name lm_parent_name, + "WHERE" lm_where, + nwfail_count lm_nwfail_count, + sleep_count lm_sleep_count, + wtr_slp_count lm_wtr_sleep_count, + longhold_count + from + v$latch_misses +) +where + lower(lm_parent_name) like lower('%&1%') +or lower(lm_where) like lower('%&1%') +/ + + diff --git a/tpt/ln.sql b/tpt/ln.sql new file mode 100644 index 0000000..2777c62 --- /dev/null +++ b/tpt/ln.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select latch#, name, level# from v$latch where latch# in (&1); diff --git a/tpt/loadset.sql b/tpt/loadset.sql new file mode 100644 index 0000000..5228168 --- /dev/null +++ b/tpt/loadset.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off +@"&_tpt_tempdir/set_&_tpt_tempfile..sql" +set termout on diff --git a/tpt/lob.sql b/tpt/lob.sql new file mode 100644 index 0000000..da619a0 --- /dev/null +++ b/tpt/lob.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col column_name for a30 + +select * from dba_lobs +where +( upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +) +OR +( upper(segment_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +) +/ diff --git a/tpt/lock.sql b/tpt/lock.sql new file mode 100644 index 0000000..2cafa2c --- /dev/null +++ b/tpt/lock.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col lock_mode_held head MODE_HELD for a15 +col lock_mode_reqd head MODE_REQUESTED for a15 +col lock_lock_id1 head LOCK_ID1 for a10 +col lock_lock_id2 head LOCK_ID2 for a10 +col lock_sid head SID for 999999 + +select + sid lock_sid, + type, + lmode, +decode(lmode, + 0, 'None', + 1, 'Null', + 2, 'Row-S (SS)', + 3, 'Row-X (SX)', + 4, 'Share', + 5, 'S/Row-X (SSX)', + 6, 'Exclusive', +to_char(lmode)) lock_mode_held, + request, +decode(request, + 0, 'None', + 1, 'Null', + 2, 'Row-S (SS)', + 3, 'Row-X (SX)', + 4, 'Share', + 5, 'S/Row-X (SSX)', + 6, 'Exclusive', +to_char(request)) lock_mode_reqd, +to_char(id1) lock_lock_id1, +to_char(id2) lock_lock_id2, +ctime, +block +from + v$lock +where &1 +order by + sid +/ diff --git a/tpt/log.sql b/tpt/log.sql new file mode 100644 index 0000000..f2b5d6e --- /dev/null +++ b/tpt/log.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show redo log layout from V$LOG, V$STANDBY_LOG and V$LOGFILE... + +col log_member head MEMBER for a100 + +select * from v$log order by group#; +select * from v$standby_log order by group#; +select group#, status, type, is_recovery_dest_file, member log_member from v$logfile order by group#,member; diff --git a/tpt/logfile.sql b/tpt/logfile.sql new file mode 100644 index 0000000..91e819b --- /dev/null +++ b/tpt/logfile.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col logfile_member head MEMBER for a100 + +select + l.sequence#, + l.group#, + l.thread#, + lf.member logfile_member +from + v$log l, + v$logfile lf +where + l.group# = lf.group# +order by + l.group# +/ diff --git a/tpt/login.sql b/tpt/login.sql new file mode 100644 index 0000000..4521a64 --- /dev/null +++ b/tpt/login.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- calling init.sql which will set up sqlpus variables +@init.sql +-- i.sql is the "who am i" script which shows your session/instance info and +-- also sets command prompt window/xterm title +@i.sql + +-- you can put your own login scripts here + diff --git a/tpt/long.sql b/tpt/long.sql new file mode 100644 index 0000000..f3b627c --- /dev/null +++ b/tpt/long.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col long_opname head OPNAME for a40 +col long_target head TARGET for a40 +col long_units head UNITS for a10 + +prompt Show session long operations from v$session_longops for sid &1 + +select + sid, + serial#, + opname long_opname, + target long_target, + sofar, + totalwork, + units long_units, + time_remaining, + start_time, + elapsed_seconds +/*, target_desc, last_update_time, username, sql_address, sql_hash_value */ +from + v$session_longops +where + sid in (select sid from v$session where &1) +and sofar != totalwork +/ + + diff --git a/tpt/lotscommits.sql b/tpt/lotscommits.sql new file mode 100644 index 0000000..060504d --- /dev/null +++ b/tpt/lotscommits.sql @@ -0,0 +1,18 @@ +-- You need this table: +-- CREATE TABLE lotscommits TABLESPACE users AS SELECT 1 a FROM dual; + +PROMPT This script will issue lots of synchronous commits and will generate undo/redo +PROMPT It will require a "lotscommits" table (see the header of this script) +PROMPT +PROMPT PROMPT Press ENTER start or CTRL+C to cancel... +PAUSE +PROMPT Running... + +BEGIN + LOOP + UPDATE lotscommits SET a = a + 1; + COMMIT WRITE WAIT IMMEDIATE; + END LOOP; +END; +/ + diff --git a/tpt/lotsfailedparses.sql b/tpt/lotsfailedparses.sql new file mode 100644 index 0000000..ca5636b --- /dev/null +++ b/tpt/lotsfailedparses.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +BEGIN + LOOP + BEGIN + EXECUTE IMMEDIATE 'select count(*) from dual where blah = 5'; + EXCEPTION + WHEN others THEN NULL; + END; + END LOOP; +END; +/ + diff --git a/tpt/lotshparses.sql b/tpt/lotshparses.sql new file mode 100644 index 0000000..139cd06 --- /dev/null +++ b/tpt/lotshparses.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lotshparses.sql +-- Purpose: Generate Lots of hard parses and shared pool activity +-- for testing purposes +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lotshparses +-- @lotshparses 100 +-- @lotshparses 1000000 +-- +-- Other: You probably don't want to run this in production as it can +-- fill your shared pool with junk and flush out any useful stuff! +-- +-------------------------------------------------------------------------------- + +-- ALTER SESSION SET optimizer_adaptive_features=false; + +declare + x number; +begin + for i in 1..&1 loop + execute immediate 'select count(*) from dual where rownum = '||to_char(dbms_random.random) into x; + end loop; +end; +/ diff --git a/tpt/lotshparses2.sql b/tpt/lotshparses2.sql new file mode 100644 index 0000000..f1bf089 --- /dev/null +++ b/tpt/lotshparses2.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lotshparses2.sql +-- Purpose: Generate Lots of hard parses and shared pool activity +-- for testing purposes +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lotshparses +-- @lotshparses 100 +-- @lotshparses 1000000 +-- +-- Other: You probably don't want to run this in production as it can +-- fill your shared pool with junk and flush out any useful stuff! +-- +-------------------------------------------------------------------------------- + +alter session set plsql_optimize_level = 0; + +declare + x number; + r varchar2(1000); +begin + for i in 1..&1 loop + r := to_char(dbms_random.random); + execute immediate 'select count(*) from dual where rownum = '||r into x; + execute immediate 'select count(*) from dual where rownum = '||r into x; + execute immediate 'select count(*) from dual where rownum = '||r into x; + end loop; +end; +/ diff --git a/tpt/lotshparses3.sql b/tpt/lotshparses3.sql new file mode 100644 index 0000000..6693deb --- /dev/null +++ b/tpt/lotshparses3.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lotshparses3.sql +-- Purpose: Generate Lots of hard parses and shared pool activity +-- for testing purposes +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lotshparses +-- @lotshparses 100 +-- @lotshparses 1000000 +-- +-- Other: You probably don't want to run this in production as it can +-- fill your shared pool with junk and flush out any useful stuff! +-- +-------------------------------------------------------------------------------- + +alter session set plsql_optimize_level = 0; + +declare + x number; + r varchar2(1000); +begin + for i in 1..&1 loop + r := to_char(mod(dbms_random.random,1000)); + execute immediate 'select count(*) from dba_objects where object_id = '||r into x; + execute immediate 'select count(*) from dba_objects where object_id = '||r into x; + execute immediate 'select count(*) from dba_objects where object_id = '||r into x; + end loop; +end; +/ diff --git a/tpt/lotslios.sql b/tpt/lotslios.sql new file mode 100644 index 0000000..83a623e --- /dev/null +++ b/tpt/lotslios.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lotslios.sql +-- Purpose: Generate Lots of Logical IOs for testing purposes +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lotslios +-- @lotslios 100 +-- @lotslios 1000000 +-- +-- Other: As the script self-joins SYS.OBJ$ to itself the maximum number +-- of rows processed (and LIOs generated) depends on the number +-- of rows in SYS.OBJ$ +-- +-------------------------------------------------------------------------------- + +prompt generate lots of LIOs by repeatedly full scanning through a small table... + +select + /*+ monitor + leading(a b c) + use_nl(b) use_nl(c) use_nl(d) + full(a) full(b) full(c) full(d) */ + count(*) +from + sys.obj$ a, + sys.obj$ b, + sys.obj$ c, + sys.obj$ d +where + a.owner# = b.owner# +and b.owner# = c.owner# +and c.owner# = d.owner# +and rownum <= &1 +/ diff --git a/tpt/lotsparses.sql b/tpt/lotsparses.sql new file mode 100644 index 0000000..d42a966 --- /dev/null +++ b/tpt/lotsparses.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@lotshparses \ No newline at end of file diff --git a/tpt/lotspios.sql b/tpt/lotspios.sql new file mode 100644 index 0000000..e2d4df7 --- /dev/null +++ b/tpt/lotspios.sql @@ -0,0 +1,38 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lotspios.sql +-- Purpose: Generate Lots of Physical IOs for testing purposes +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lotspios +-- @lotspios 100 +-- @lotspios 1000000 +-- +-- Other: This script just does a full table scan on all tables it can +-- see, thus it generates mainly scattered or direct path reads +-- +-------------------------------------------------------------------------------- + +prompt Generate lots of physical IOs by full scanning through all available tables... + +declare + str varchar2(1000); + x number; +begin + + for i in 1..&1 loop + for t in (select owner, table_name from all_tables where (owner,table_name) not in (select owner,table_name from all_external_tables)) loop + begin + execute immediate 'select /*+ FULL(t) */ count(*) from '||t.owner||'.'||t.table_name||' t' into x; + exception + when others then null; + end; + end loop; -- t + end loop; -- i +end; +/ diff --git a/tpt/lotssparses.sql b/tpt/lotssparses.sql new file mode 100644 index 0000000..4c4517b --- /dev/null +++ b/tpt/lotssparses.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lotssparses.sql +-- Purpose: Generate Lots of soft parses and library cache/mutex activity +-- for testing purposes +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lotsparses +-- @lotsparses 100 +-- @lotsparses 1000000 +-- +-- Other: You probably don't want to run this in production as it can +-- fill your shared pool with junk and flush out any useful stuff! +-- +-------------------------------------------------------------------------------- + +declare + x number; +begin + for i in 1..&1 loop + execute immediate 'select count(*) cnt from dual x1 where rownum = 1'; + end loop; +end; +/ diff --git a/tpt/lotssparses2.sql b/tpt/lotssparses2.sql new file mode 100644 index 0000000..1eadf56 --- /dev/null +++ b/tpt/lotssparses2.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lotssparses.sql +-- Purpose: Generate Lots of soft parses and library cache/mutex activity +-- for testing purposes +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @lotsparses +-- @lotsparses 100 +-- @lotsparses 1000000 +-- +-- Other: You probably don't want to run this in production as it can +-- fill your shared pool with junk and flush out any useful stuff! +-- +-------------------------------------------------------------------------------- + +prompt alter session set session_cached_cursors=0; +alter session set session_cached_cursors=0; + +declare + x number; +begin + for i in 1..&1 loop + execute immediate 'select count(*) cnt from dual x1 where rownum = 1'; + end loop; +end; +/ diff --git a/tpt/lotstempios.sql b/tpt/lotstempios.sql new file mode 100644 index 0000000..d62a6c7 --- /dev/null +++ b/tpt/lotstempios.sql @@ -0,0 +1,4 @@ +CREATE GLOBAL TEMPORARY TABLE lotstempios ON COMMIT DELETE ROWS AS SELECT * FROM dual WHERE 1=0; + +EXEC LOOP INSERT /*+ APPEND */ INTO lotstempios SELECT * FROM dual; COMMIT WRITE NOWAIT; END LOOP; + diff --git a/tpt/lpstat.sql b/tpt/lpstat.sql new file mode 100644 index 0000000..1d20e63 --- /dev/null +++ b/tpt/lpstat.sql @@ -0,0 +1,69 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: lpstat.sql +-- Purpose: Show large pool stats by sub-pool from X$KSMLS +-- +-- Author: Tanel Poder +-- Copyright: (c) https://tanelpoder.com +-- +-- Usage: @lpstat +-- @lpstat "free memory" +-- @lpstat cursor +-- +-- Other: The other script for querying V$SGASTAT is called sgastat.sql +-- and shows many more pools of interest (but not break down by subpool) +-- +-- +-------------------------------------------------------------------------------- + +COL lpstat_subpool HEAD SUBPOOL FOR a30 + +PROMPT +PROMPT -- Subpool sizes: + +SELECT + 'large pool ('||NVL(DECODE(TO_CHAR(ksmdsidx),'0','0 - Unused',ksmdsidx), 'Total')||'):' lpstat_subpool + , SUM(ksmsslen) bytes + , ROUND(SUM(ksmsslen)/1048576,2) MB +FROM + x$ksmls +WHERE + ksmsslen > 0 +--AND ksmdsidx > 0 +GROUP BY ROLLUP + ( ksmdsidx ) +ORDER BY + lpstat_subpool ASC +/ + +BREAK ON lpstat_subpool SKIP 1 +PROMPT -- Allocations matching "&1": + +SELECT + subpool lpstat_subpool + , name + , SUM(bytes) + , ROUND(SUM(bytes)/1048576,2) MB +FROM ( + SELECT + 'large pool ('||DECODE(TO_CHAR(ksmdsidx),'0','0 - Unused',ksmdsidx)||'):' subpool + , ksmssnam name + , ksmsslen bytes + FROM + x$ksmls + WHERE + ksmsslen > 0 + AND LOWER(ksmssnam) LIKE LOWER('%&1%') +) +GROUP BY + subpool + , name +ORDER BY + subpool ASC + , SUM(bytes) DESC +/ + +BREAK ON lpstat_subpool DUP diff --git a/tpt/lpx.sql b/tpt/lpx.sql new file mode 100644 index 0000000..ed95d60 --- /dev/null +++ b/tpt/lpx.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt @latchprofx sid,name,func,hmode "&1" "&2" &3 +@@latchprofx sid,name,func,hmode "&1" "&2" &3 diff --git a/tpt/lpxa.sql b/tpt/lpxa.sql new file mode 100644 index 0000000..6bc1c42 --- /dev/null +++ b/tpt/lpxa.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@latchprofx sid,name,func,hmode,objtype,object "&1" "&2" &3 diff --git a/tpt/lr.sql b/tpt/lr.sql new file mode 100644 index 0000000..9a93550 --- /dev/null +++ b/tpt/lr.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + indx, + LPAD('0x'||TRIM(TO_CHAR(indx, 'XXXX')),7) hex, + ksllwnam, + ksllwlbl +FROM + x$ksllw +WHERE + indx like '&1' +OR TRIM(TO_CHAR(indx, 'XXXX')) LIKE UPPER('&1') +OR ksllwnam like '&1' +OR ksllwlbl like '&1' +/ diff --git a/tpt/lrc.sql b/tpt/lrc.sql new file mode 100644 index 0000000..028ff9e --- /dev/null +++ b/tpt/lrc.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + lc.addr child_addr# +-- , lc.child# child_latch# + , kqrstcid cache# + , s.kqrsttxt name + , decode(s.kqrsttyp,1,'PARENT','SUBORDINATE') type + , decode(s.kqrsttyp,2,s.kqrstsno,null) subordinate# + , lc.gets + , lc.misses + , lc.sleeps +--, lc.spin_gets +FROM + x$kqrst s + , v$latch_children lc +WHERE + lc.child# = s.kqrstcln +AND lc.name = 'row cache objects' +AND kqrstcid LIKE '&1' +ORDER BY + cache# + , type + , subordinate# +/ + diff --git a/tpt/lrc2.sql b/tpt/lrc2.sql new file mode 100644 index 0000000..dc07324 --- /dev/null +++ b/tpt/lrc2.sql @@ -0,0 +1,15 @@ +select + la.addr laaddr,dc.kqrstcid CACHE#, dc.kqrsttxt PARAMETER, + decode(dc.kqrsttyp, 1,'PARENT','SUBORDINATE') type, + decode(dc.kqrsttyp, 2, kqrstsno, null) subordinate#, + dc.kqrstgrq rcgets, dc.kqrstgmi rcmisses, dc.kqrstmrq rcmodifications, + dc.kqrstmfl rcflushes, dc.kqrstcln, + la.gets lagets, la.misses lamisses, la.immediate_gets laimge +from + x$kqrst dc + , v$latch_children la +where + dc.inst_id = userenv('instance') + and la.child# = dc.kqrstcln + and la.name = 'row cache objects' + and la.ADDR like '%33A1E7330'; <==== change the latch address to hex value of p1 for latch: row cache objects event diff --git a/tpt/ls.sql b/tpt/ls.sql new file mode 100644 index 0000000..3fcdf01 --- /dev/null +++ b/tpt/ls.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col ls_file_name head FILE_NAME for a110 +col ls_mb head MB +col ls_maxsize head MAXSZ + +select + tablespace_name, + file_id, + autoextensible ext, + round(bytes/1048576,2) ls_mb, + decode(autoextensible, 'YES', round(maxbytes/1048576,2), null) ls_maxsize, + file_name ls_file_name +from + (select tablespace_name, file_id, file_name, autoextensible, bytes, maxbytes from dba_data_files where upper(tablespace_name) like upper('%&1%') + union all + select tablespace_name, file_id, file_name, autoextensible, bytes, maxbytes from dba_temp_files where upper(tablespace_name) like upper('%&1%') + ) +order by + tablespace_name, + file_name +; diff --git a/tpt/lscpu.sql b/tpt/lscpu.sql new file mode 100644 index 0000000..d0681fa --- /dev/null +++ b/tpt/lscpu.sql @@ -0,0 +1,13 @@ +-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. + +SHOW PARAMETER cpu_count + +SELECT * FROM v$osstat +WHERE + stat_name LIKE 'NUM_CPU%' +OR stat_name = 'LOAD' +ORDER BY + stat_name +/ + diff --git a/tpt/lt.sql b/tpt/lt.sql new file mode 100644 index 0000000..5c039af --- /dev/null +++ b/tpt/lt.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column lt_type heading "TYPE" format a4 +column lt_name heading "LOCK NAME" format a32 +column lt_id1_tag heading "ID1 MEANING" format a25 word_wrap +column lt_id2_tag heading "ID2 MEANING" format a25 word_wrap +column lt_us_user heading "USR" format a3 +column lt_description heading "DESCRIPTION" format a60 word_wrap + +prompt Show lock type info from V$LOCK_TYPE for lock &1 + +select + lt.type lt_type, + lt.name lt_name, + lt.id1_tag lt_id1_tag, + lt.id2_tag lt_id2_tag, + lt.is_user lt_is_user, + lt.description lt_description +from + v$lock_type lt +where + upper(type) like upper('&1') +/ + diff --git a/tpt/ltx.sql b/tpt/ltx.sql new file mode 100644 index 0000000..50b1975 --- /dev/null +++ b/tpt/ltx.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column lt_type heading "TYPE" format a4 +column lt_name heading "LOCK_NAME" format a30 +column lt_id1_tag heading "ID1_MEANING" format a25 word_wrap +column lt_id2_tag heading "ID2_MEANING" format a25 word_wrap +column lt_us_user heading "USR" format a3 +column lt_description heading "DESCRIPTION" format a60 word_wrap + + +select + i indx, + to_char(i, 'XXXX') hex, + type lt_type, + name lt_name, + id1_tag lt_id1_tag, + id2_tag lt_id2_tag, + is_user lt_is_user, + description lt_description +from + ( + select + rest.indx i, + rest.resname type, + rest.name name, + rest.id1 id1_tag, + rest.id2 id2_tag, + decode(bitand(eqt.flags,1), 1, 'YES', 'NO') is_user, + rest.expl description + from X$KSIRESTYP rest, X$KSQEQTYP eqt + where (rest.inst_id = eqt.inst_id) + and (rest.indx = eqt.indx) + and (rest.indx > 0) +) +where + upper(type) like upper('&1') +/ + diff --git a/tpt/m.sql b/tpt/m.sql new file mode 100644 index 0000000..aafd3e1 --- /dev/null +++ b/tpt/m.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@xp userenv('sid') diff --git a/tpt/measure_io.sql b/tpt/measure_io.sql new file mode 100644 index 0000000..cd07cdf --- /dev/null +++ b/tpt/measure_io.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: measure_io.sql (v0.1) +-- Purpose: Measure IO reasons and "sizes" from v$iostat_function_detail +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com | @tanelpoder +-- +-- Usage: @measuire_io "SELECT your query here" +-- +-- +-- Other: This script uses the v$iostat_function_detail view that is available +-- from Oracle 11.2 - and it contains instance-wide data. +-- +-- The script adds a COUNT(*) around your query, so this may change +-- your query's execution plan. +-- +-------------------------------------------------------------------------------- + +WITH sq1 AS (SELECT * FROM v$iostat_function_detail) + , sq2 AS (SELECT * FROM v$iostat_function_detail) + , mainq AS (SELECT COUNT(*) FROM (&1)) +SELECT /*+ LEADING(sq1,mainq) */ + sq1.function_name + , sq1.filetype_name + , NULLIF(sq2.small_read_reqs - sq1.small_read_reqs , 0 ) sm_rd_iops + , NULLIF(sq2.large_read_reqs - sq1.large_read_reqs , 0 ) lg_rd_iops + , NULLIF(sq2.small_write_reqs - sq1.small_write_reqs , 0 ) sm_wr_iops + , NULLIF(sq2.large_write_reqs - sq1.large_write_reqs , 0 ) lg_wr_iops + , NULLIF(sq2.small_read_megabytes - sq1.small_read_megabytes , 0 ) sm_rd_mb + , NULLIF(sq2.large_read_megabytes - sq1.large_read_megabytes , 0 ) lg_rd_mb + , NULLIF(sq2.small_write_megabytes - sq1.small_write_megabytes , 0 ) sm_wr_mb + , NULLIF(sq2.large_write_megabytes - sq1.large_write_megabytes , 0 ) lg_wr_mb + , ROUND ((sq2.small_read_megabytes - sq1.small_read_megabytes ) / NULLIF(sq2.small_read_reqs - sq1.small_read_reqs , 0 ) * 1024 , 1 ) avg_sm_rd_rq_kb + , ROUND ((sq2.large_read_megabytes - sq1.large_read_megabytes ) / NULLIF(sq2.large_read_reqs - sq1.large_read_reqs , 0 ) * 1024 , 1 ) avg_lg_rd_rq_kb + , ROUND ((sq2.small_write_megabytes - sq1.small_write_megabytes) / NULLIF(sq2.small_write_reqs - sq1.small_write_reqs , 0 ) * 1024 , 1 ) avg_sm_wr_rq_kb + , ROUND ((sq2.large_write_megabytes - sq1.large_write_megabytes) / NULLIF(sq2.large_write_reqs - sq1.large_write_reqs , 0 ) * 1024 , 1 ) avg_lg_wr_rq_kb +FROM + sq1 + , mainq + , sq2 +WHERE + sq1.function_id=sq2.function_id +AND sq1.filetype_id=sq2.filetype_id +/ diff --git a/tpt/mem.sql b/tpt/mem.sql new file mode 100644 index 0000000..d068745 --- /dev/null +++ b/tpt/mem.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show instance memory usage breakdown from v$memory_dynamic_components +COL mem_component HEAD COMPONENT FOR A35 + +SELECT + component mem_component + , ROUND(current_size/1048576) current_mb + , ROUND(min_size/1048576) min_mb + , ROUND(max_size/1048576) max_mb + , ROUND(user_specified_size/1048576) spec_mb + , oper_count + , last_oper_type last_optype + , last_oper_mode last_opmode + , last_oper_time last_optime + , granule_size/1048576 gran_mb +FROM + v$memory_dynamic_components +/ + + diff --git a/tpt/memres.sql b/tpt/memres.sql new file mode 100644 index 0000000..c14de15 --- /dev/null +++ b/tpt/memres.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sgares_parameter head PARAMETER for a30 +col sgares_component head COMPONENT for a30 + +SELECT + component sgares_component + , oper_type + , oper_mode + , parameter sgares_parameter + , initial_size + , target_size + , final_size + , status + , start_time + , end_time +FROM + v$memory_resize_ops +ORDER BY + start_time +/ diff --git a/tpt/metric.sql b/tpt/metric.sql new file mode 100644 index 0000000..c3deedb --- /dev/null +++ b/tpt/metric.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + g.group_id + , g.name group_name + , n.metric_name + , n.metric_unit +from + v$metricname n + , v$metricgroup g +where + n.group_id = g.group_id +and + lower(n.metric_name) like lower('%&1%') +/ diff --git a/tpt/minelog.sql b/tpt/minelog.sql new file mode 100644 index 0000000..63f56b7 --- /dev/null +++ b/tpt/minelog.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +begin + begin + sys.dbms_logmnr.end_logmnr; + exception + when others then null; + end; + + sys.dbms_logmnr.add_logfile('&1'); + sys.dbms_logmnr.start_logmnr ( options => dbms_logmnr.dict_from_online_catalog ); +end; +/ + diff --git a/tpt/minmax.sql b/tpt/minmax.sql new file mode 100644 index 0000000..2986602 --- /dev/null +++ b/tpt/minmax.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show min/max (low/high) values in column "&1" of table &2.... +select min(&1), max(&1) from &2; diff --git a/tpt/mkdba.sql b/tpt/mkdba.sql new file mode 100644 index 0000000..5590898 --- /dev/null +++ b/tpt/mkdba.sql @@ -0,0 +1,7 @@ +SELECT + -- DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS(&1,&2) dba + TO_CHAR(DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS(&1,&2), 'XXXXXXXXXXXXXXXX') dba_hex +FROM + dual +/ + diff --git a/tpt/mloc.sql b/tpt/mloc.sql new file mode 100644 index 0000000..065833d --- /dev/null +++ b/tpt/mloc.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from x$mutex_sleep where location_id = &1; \ No newline at end of file diff --git a/tpt/mods.sql b/tpt/mods.sql new file mode 100644 index 0000000..d7e8ffd --- /dev/null +++ b/tpt/mods.sql @@ -0,0 +1,46 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL mods_owner FOR A30 +COL mods_table_name FOR A30 +COL mods_object_name FOR A30 + +PROMPT Display table modifcations from DBA_TAB_MODIFICATIONS for tables &1.... +SELECT + t.owner mods_owner + , t.table_name mods_table_name + , SUM(m.inserts ) inserts + , SUM(m.updates ) updates + , SUM(m.deletes ) deletes + , SUM(m.inserts) + SUM(m.updates) + SUM(m.deletes) total_dml + , t.num_rows + , ROUND((SUM(m.inserts) + SUM(m.updates) + SUM(m.deletes)) / NULLIF(t.num_rows,0) * 100, 1) changed_pct +FROM + dba_tables t + , dba_tab_modifications m +WHERE + t.owner = m.table_owner +AND t.table_name = m.table_name +AND upper(t.table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +GROUP BY + t.owner -- mods_owner + , t.table_name -- mods_object_name + , t.num_rows +ORDER BY + mods_owner + , mods_table_name +/ + diff --git a/tpt/modsx.sql b/tpt/modsx.sql new file mode 100644 index 0000000..90ce7ee --- /dev/null +++ b/tpt/modsx.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL mods_owner HEAD OWNER FOR A20 +COL mods_table_name HEAD TABLE_NAME FOR A30 +COL mods_object_name HEAD OBJECT_NAME FOR A30 +COL mods_partition_name HEAD PARTITION_NAME FOR A20 +COL mods_subpartition_name HEAD SUBPARTITION_NAME FOR A20 + +PROMPT Display table modifcations from DBA_TAB_MODIFICATIONS for tables &1.... +SELECT + t.owner mods_owner + , t.table_name mods_table_name + , m.partition_name mods_partition_name + , m.subpartition_name mods_subpartition_name + , m.inserts inserts + , m.updates updates + , m.deletes deletes + , m.inserts + m.updates + m.deletes total_dml +-- , t.num_rows +-- , ROUND(m.inserts + m.updates + m.deletes / NULLIF(t.num_rows,0) * 100, 1) changed_pct +FROM + dba_tables t + , dba_tab_modifications m +WHERE + t.owner = m.table_owner +AND t.table_name = m.table_name +AND upper(t.table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +ORDER BY + mods_owner + , mods_table_name + , partition_name + , subpartition_name +/ + diff --git a/tpt/mp.sql b/tpt/mp.sql new file mode 100644 index 0000000..b7113e5 --- /dev/null +++ b/tpt/mp.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt +prompt @@mutexprof id,loc,req,blk 1=1 +@@mutexprof id,loc,req,blk 1=1 diff --git a/tpt/ms.sql b/tpt/ms.sql new file mode 100644 index 0000000..370598d --- /dev/null +++ b/tpt/ms.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from v$mutex_sleep order by wait_time desc, sleeps desc; diff --git a/tpt/msh.sql b/tpt/msh.sql new file mode 100644 index 0000000..b7113e5 --- /dev/null +++ b/tpt/msh.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt +prompt @@mutexprof id,loc,req,blk 1=1 +@@mutexprof id,loc,req,blk 1=1 diff --git a/tpt/mutexprof.sql b/tpt/mutexprof.sql new file mode 100644 index 0000000..de5f89a --- /dev/null +++ b/tpt/mutexprof.sql @@ -0,0 +1,133 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: mutexprof.sql ( Mutex sleep Profiler ) +-- +-- Purpose: Display KGX mutex sleep history from v$mutex_sleep_history +-- along library cache object names protected by these mutexes. +-- Only top 20 rows are shown by default +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @mutexprof +-- +-- The main grouping (and filtering) columns are: +-- +-- id - mutex ID (which is the object hash value for library +-- cache object mutexes) +-- ts - timestamp of mutex sleep beginning +-- loc - code location where the waiter slept for the mutex +-- val - mutex value (shows whether mutex was held in exclusive or +-- shared mode) +-- req - requesting session SID +-- blk - blocking session SID +-- +-- The filter condition allows filtering mutex sleep rows based on certain +-- criteria, such: +-- +-- 1=1 - show all mutex sleeps (which are still in memory) +-- blk=123 - show only these mutex sleeps where blocking sid was 123 +-- hash=2741853041 - show only these sleeps where mutex ID (KGL object hash value) +-- was 2741853041 +-- +-- +-- Its also possible to have multiple "AND" filter conditions, as long as you keep +-- them in double quotes so that sqlplus would recognize them as one parameter +-- +-- For example: "name like '%DUAL%' and blk in (115,98)" +-- +-- Examples: +-- +-- @mutexprof loc 1=1 +-- @mutexprof id,loc,req,blk "lower(name) like 'select%from dual%'" +-- @mutexprof loc,val blk=98 +-- @mutexprof id,loc,req,blk "blk in (select sid from v$session where username = 'SYS')" +-- +-- Other: When the relevant object is aged out you will see (name not found) +-- as object_name. +-- +-- On 10.2.0.1 the V$mutex_sleep_history does not have mutex_identifier +-- column externalized. In this case use X$mutex_sleep_history instead +-- +-------------------------------------------------------------------------------- + +col msh_obj_name head OBJECT_NAME for a80 word_wrap +col msh_mutex_type head MUTEX_TYPE for a15 truncate +col loc head GET_LOCATION for a33 truncate + +col mutexprof_gets head GETS for 9999999999999 +col mutexprof_sleeps head SLEEPS for 999999 + +col mutexprof_p2 head P2 for a16 wrap +col mutexprof_p3 head P3 for a16 wrap +col mutexprof_p4 head P4 for a16 wrap +col mutexprof_p5 head P5 for a20 wrap + +def MSH_NUMROWS=10 + +prompt +prompt -- MutexProf by Tanel Poder (http://www.tanelpoder.com) +prompt -- Showing profile of top &MSH_NUMROWS sleeps... + +select * from ( + select /*+ ORDERED USE_NL(o) */ + -- TODO the sleep/get counting needs fixing! + MAX(sleeps) sleeps + --count(*) sleeps + , decode(max(sleeps)-min(sleeps),0,to_number(null),max(sleeps)-min(sleeps)) mutexprof_sleeps -- may not be very accurate but give an idea + --, decode(max(gets)-min(gets),0,to_number(null),max(gets)-min(gets)) mutexprof_gets -- may not be very accurate but give an idea + -- avg(sleeps) sleeps + --, avg(gets) gets + , mutex_type msh_mutex_type + , &1 + , nvl(decode(kglnaown, null, kglnaobj, kglnaown||'.'||kglnaobj), '(name not found)') msh_obj_name + --, p1raw + --, CASE WHEN p2 < 536870912 THEN TO_CHAR(p2) ELSE TRIM(TO_CHAR(p2, 'XXXXXXXXXXXXXXXX')) END mutexprof_p2 + --, CASE WHEN p3 < 536870912 THEN TO_CHAR(p3) ELSE TRIM(TO_CHAR(p3, 'XXXXXXXXXXXXXXXX')) END mutexprof_p3 + --, CASE WHEN p4 < 536870912 THEN TO_CHAR(p4) ELSE TRIM(TO_CHAR(p4, 'XXXXXXXXXXXXXXXX')) END mutexprof_p4 + --, p5 mutexprof_p5 + from + (select + mutex_identifier id + , sleep_timestamp ts + , mutex_type + , gets + , sleeps + , requesting_session req + , blocking_session blk + , location loc + , mutex_value val + , p1 + , p1raw + , p2 + , p3 + , p4 + , p5 + from v$mutex_sleep_history) m + , (select kglnahsh, kglnahsh hash_value, kglnahsh hash, + kglhdpar, kglhdadr, kglnaown, kglnaobj, + decode(kglnaown, null, kglnaobj, kglnaown||'.'||kglnaobj) object_name, + decode(kglnaown, null, kglnaobj, kglnaown||'.'||kglnaobj) name + from x$kglob) o + where + m.id = o.kglnahsh (+) + and (o.kglhdadr = o.kglhdpar or (o.kglhdpar is null)) -- only parent KGL objects if still in cache + and &2 + group by + mutex_type + , &1 + , kglnaown + , kglnaobj + , p1raw + , CASE WHEN p2 < 536870912 THEN TO_CHAR(p2) ELSE TRIM(TO_CHAR(p2, 'XXXXXXXXXXXXXXXX')) END + , CASE WHEN p3 < 536870912 THEN TO_CHAR(p3) ELSE TRIM(TO_CHAR(p3, 'XXXXXXXXXXXXXXXX')) END + , CASE WHEN p4 < 536870912 THEN TO_CHAR(p4) ELSE TRIM(TO_CHAR(p4, 'XXXXXXXXXXXXXXXX')) END + --, p5 + order by + sleeps desc +) +where rownum <= &MSH_NUMROWS +/ diff --git a/tpt/mycur.sql b/tpt/mycur.sql new file mode 100644 index 0000000..dfaf59d --- /dev/null +++ b/tpt/mycur.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL mycur_bind_mem_loc HEAD BIND_MEM FOR A8 + +SELECT + curno + , '0x'||TRIM(TO_CHAR(flag, '0XXXXXXX')) flag + , status + , parent_handle par_hd + , parent_lock par_lock + , child_handle ch_hd + , child_lock ch_lock + , child_pin ch_pin + , pers_heap_mem + , work_heap_mem + , bind_vars + , define_vars + , bind_mem_loc mycur_bind_mem_loc +-- , inst_flag +-- , inst_flag2 +FROM + v$sql_cursor +WHERE + status != 'CURNULL' +/ diff --git a/tpt/mys.sql b/tpt/mys.sql new file mode 100644 index 0000000..8162559 --- /dev/null +++ b/tpt/mys.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL mys_value HEAD VALUE FOR 9999999999999999999 + +prompt Show current session's statistics from V$SESSTAT.... + +select + n.statistic# stat#, + n.statistic# * 8 offset, + n.name, + s.value mys_value, + TRIM( + CASE WHEN BITAND(class, 1) = 1 THEN 'USER ' END || + CASE WHEN BITAND(class, 2) = 2 THEN 'REDO ' END || + CASE WHEN BITAND(class, 4) = 4 THEN 'ENQ ' END || + CASE WHEN BITAND(class, 8) = 8 THEN 'CACHE ' END || + CASE WHEN BITAND(class, 16) = 16 THEN 'OSDEP ' END || + CASE WHEN BITAND(class, 32) = 32 THEN 'PX ' END || + CASE WHEN BITAND(class, 64) = 64 THEN 'SQLT ' END || + CASE WHEN BITAND(class,128) = 128 THEN 'DEBUG ' END + ) class_name +from v$mystat s, v$statname n +where s.statistic#=n.statistic# +and lower(n.name) like lower('%&1%') +/ + diff --git a/tpt/mysid.sql b/tpt/mysid.sql new file mode 100644 index 0000000..c379725 --- /dev/null +++ b/tpt/mysid.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@sid &mysid \ No newline at end of file diff --git a/tpt/mysx.sql b/tpt/mysx.sql new file mode 100644 index 0000000..fab7658 --- /dev/null +++ b/tpt/mysx.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + n.statistic# stat#, + n.statistic# * 8 offset, + n.name, + s.value, + to_char(s.value, 'XXXXXXXXXXXXXXXX') value_hex +from v$mystat s, v$statname n +where s.statistic#=n.statistic# +and lower(n.name) like lower('%&1%') +and rownum <= &2 +/ + diff --git a/tpt/netstat.sql b/tpt/netstat.sql new file mode 100644 index 0000000..4abeb78 --- /dev/null +++ b/tpt/netstat.sql @@ -0,0 +1,16 @@ +COL ksugblnetstatname HEAD STAT_NAME FOR A30 +COL ksugblnetstatval HEAD STAT_VALUE +SELECT + ksugblnetstatsid sid + , ksugblnetstatser serial + , ksugblnetstatname + , ksugblnetstatval +FROM + x$ksugblnetstat +WHERE + ksugblnetstatsid IN (&1) +ORDER BY + ksugblnetstatsid + , ksugblnetstatname +/ + diff --git a/tpt/netstat2.sql b/tpt/netstat2.sql new file mode 100644 index 0000000..be26500 --- /dev/null +++ b/tpt/netstat2.sql @@ -0,0 +1,17 @@ +COL ksugblnetstatname HEAD STAT_NAME FOR A30 +COL ksugblnetstatval HEAD STAT_VALUE +SELECT + ksugblnetstatsid sid + , ksugblnetstatser serial + , ksugblnetstatname + , ksugblnetstatval +FROM + x$ksugblnetstat +WHERE + ksugblnetstatsid IN (&1) +AND ksugblnetstatval != 0 +ORDER BY + ksugblnetstatsid + , ksugblnetstatname +/ + diff --git a/tpt/newxpa.sql b/tpt/newxpa.sql new file mode 100644 index 0000000..40398aa --- /dev/null +++ b/tpt/newxpa.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET HEADING OFF LINESIZE 10000 PAGESIZE 0 TRIMSPOOL ON TRIMOUT ON VERIFY OFF LONG 999999 LONGCHU + +ACCEPT sqlid FORMAT A13 PROMPT "Enter sql_id: " + +SET TERMOUT OFF +spool sqlmon_&sqlid..html + +SELECT + DBMS_SQLTUNE.REPORT_SQL_MONITOR( + sql_id=>'&sqlid', + report_level=>'ALL', + type => 'ACTIVE') as report +FROM dual +/ + +SPOOL OFF +SET TERMOUT ON HEADING ON LINESIZE 999 + +PROMPT File spooled into sqlmon_&sqlid..html + diff --git a/tpt/nf.sql b/tpt/nf.sql new file mode 100644 index 0000000..4d7ae08 --- /dev/null +++ b/tpt/nf.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +define _nf_precision=2 +define _nf_base=2 +define _nf_grouplen=10 + +define _nf_v=&1 + +select round ( &_nf_v / power( &_nf_base , trunc(log(&_nf_base,&_nf_v))-trunc(mod(log(&_nf_base,&_nf_v),&_nf_grouplen)) ), &_nf_precision ) + || decode( trunc(log(&_nf_base,&_nf_v))-trunc(mod(log(&_nf_base,&_nf_v),&_nf_grouplen)) + , 0,'', 1,'', &_nf_grouplen*1,'k', &_nf_grouplen*2,'M', &_nf_grouplen*3,'G', &_nf_grouplen*4,'T', &_nf_grouplen*5,'P', &_nf_grouplen*6,'E' + , '*&_nf_base^'||to_char( trunc(log(&_nf_base,&_nf_v))-trunc(mod(log(&_nf_base,&_nf_v),&_nf_grouplen)) ) + ) output +from dual; diff --git a/tpt/nls.sql b/tpt/nls.sql new file mode 100644 index 0000000..1420188 --- /dev/null +++ b/tpt/nls.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col nls_parameter head PARAMETER for a30 +col nls_value head VALUE for a50 + +select + parameter nls_parameter + , value nls_value +from v$nls_parameters -- nls_session_parameters +order by + parameter +/ + diff --git a/tpt/nonshared.sql b/tpt/nonshared.sql new file mode 100644 index 0000000..8bd7938 --- /dev/null +++ b/tpt/nonshared.sql @@ -0,0 +1,60 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: nonshared.sql +-- Purpose: Print reasons for non-shared child cursors from v$sql_shared_cursor +-- in a readable format +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @nonshared +-- @nonshared 7gf6xg9xfv3vb +-- +-- Other: Uses modified version of Tom Kyte's printtab code +-- ( http://asktom.oracle.com ) +-- +-------------------------------------------------------------------------------- + +set serverout on size 1000000 +prompt Show why existing SQL child cursors were not reused (V$SQL_SHARED_CURSOR)... +prompt + +def cmd="select * from v$sql_shared_cursor where sql_id = ''&1''" + + +declare + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_descTbl dbms_sql.desc_tab; + l_colCnt number; + procedure execute_immediate( p_sql in varchar2 ) + is + BEGIN + dbms_sql.parse(l_theCursor,p_sql,dbms_sql.native); + l_status := dbms_sql.execute(l_theCursor); + END; +begin + dbms_sql.parse( l_theCursor, replace( '&cmd', '"', ''''), dbms_sql.native ); + dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl ); + for i in 1 .. l_colCnt loop + dbms_sql.define_column( l_theCursor, i, l_columnValue, 4000 ); + end loop; + l_status := dbms_sql.execute(l_theCursor); + while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop + for i in 1 .. l_colCnt loop + dbms_sql.column_value( l_theCursor, i, l_columnValue ); + if l_columnValue != 'N' then + dbms_output.put_line ( rpad( l_descTbl(i).col_name, 30 ) || ': ' || l_columnValue ); + end if; + end loop; + dbms_output.put_line( '-----------------' ); + end loop; +end; +/ + +set serverout off + diff --git a/tpt/nonshared2.sql b/tpt/nonshared2.sql new file mode 100644 index 0000000..f91992c --- /dev/null +++ b/tpt/nonshared2.sql @@ -0,0 +1,50 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: nonshared2.sql +-- Purpose: Show the reasons why more child cursors were created instead of +-- reusing old ones +-- +-- Author: Tanel Poder +-- Copyright: (c) https://tanelpoder.com +-- +-- Usage: @nonshared2.sql +-- +-- The PRINT or NOPRINT option will control whether the REASON +-- column in XML (can be quite lengthy) will be displayed or not +-- +-- Other: Runs on Oracle 11.2.0.2+ as earlier versions don't have the +-- V$SQL_SHARED_CURSOR.REASON column. Use nonshared.sql on older +-- versions +-- +-------------------------------------------------------------------------------- + + +COL nonshared_sql_id HEAD SQL_ID FOR A13 +COL nonshared_child HEAD CHILD# FOR A10 +COL nonshared_reason_and_details HEAD REASON FOR A60 WORD_WRAP +COL reason_xml FOR A100 WORD_WRAP &1 +BREAK ON nonshared_sql_id + +SELECT + '&2' nonshared_sql_id + , EXTRACTVALUE(VALUE(xs), '/ChildNode/ChildNumber') nonshared_child + , EXTRACTVALUE(VALUE(xs), '/ChildNode/reason') || ': ' || EXTRACTVALUE(VALUE(xs), '/ChildNode/details') nonshared_reason_and_details + , VALUE(xs) reason_xml +FROM TABLE ( + SELECT XMLSEQUENCE(EXTRACT(d, '/Cursor/ChildNode')) val FROM ( + SELECT + --XMLElement("Cursor", XMLAgg(x.extract('/doc/ChildNode'))) + -- the XMLSERIALIZE + XMLTYPE combo is included for avoiding a crash in qxuageag() XML aggregation function + XMLTYPE (XMLSERIALIZE( DOCUMENT XMLElement("Cursor", XMLAgg(x.extract('/doc/ChildNode')))) ) d + FROM + v$sql_shared_cursor c + , TABLE(XMLSEQUENCE(XMLTYPE(''||c.reason||''))) x + WHERE + c.sql_id = '&2' and c.child_number < 5 + ) +) xs +/ + diff --git a/tpt/nonsharedsum.sql b/tpt/nonsharedsum.sql new file mode 100644 index 0000000..8229394 --- /dev/null +++ b/tpt/nonsharedsum.sql @@ -0,0 +1,71 @@ +-- Copyright 2021 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@saveset +set serverout on size 1000000 + +-- This is modified Tom Kyte's printtab code ( http://asktom.oracle.com ) + +declare + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_descTbl dbms_sql.desc_tab; + l_colCnt number; + + l_colQuery varchar2(1000) := 'select * from v$sql_shared_cursor where 1=0'; + l_dynQuery clob := 'SELECT * FROM (SELECT sql_id, COUNT(DISTINCT address) parent_count, COUNT(*) child_count ' || chr(10); + l_versionCount number; + + procedure execute_immediate( p_sql in varchar2 ) + is + begin + dbms_sql.parse(l_theCursor,p_sql,dbms_sql.native); + l_status := dbms_sql.execute(l_theCursor); + end; +begin + -- get list of interesting columns from v$sql_shared_cursor (list differs by DB version) + dbms_sql.parse(l_theCursor, l_colQuery, dbms_sql.native); + dbms_sql.describe_columns(l_theCursor, l_colCnt, l_descTbl); + + -- generate dynamic query + for i in 1 .. l_colCnt loop + if l_descTbl(i).col_type = 1 and l_descTbl(i).col_max_len = 1 then + l_dynQuery := l_dynQuery || chr(10) || ' , SUM(CASE WHEN ' || (l_descTbl(i).col_name) + || ' = ''Y'' THEN 1 ELSE 0 END) AS ' || (l_descTbl(i).col_name); + end if; + end loop; + + if '&1' = '%' then l_versionCount := 10; else l_versionCount := 0; end if; + l_dynQuery := l_dynQuery || chr(10) + || ' FROM v$sql_shared_cursor ' + || ' WHERE sql_id LIKE ''&1'' GROUP BY sql_id HAVING COUNT(*) > ' + || l_versionCount ||') ORDER BY child_count DESC'; + + if l_versionCount != 0 then dbms_output.put_line('Showing statements with version count > '||l_versionCount); end if; + dbms_output.put_line(chr(8)); + -- run dynamic query + dbms_sql.parse(l_theCursor, l_dynQuery, dbms_sql.native); + dbms_sql.describe_columns(l_theCursor, l_colCnt, l_descTbl); + + for i in 1 .. l_colCnt loop + dbms_sql.define_column(l_theCursor, i, l_columnValue, 4000); + end loop; + + l_status := dbms_sql.execute(l_theCursor); + + while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop + for i in 1 .. l_colCnt loop + dbms_sql.column_value( l_theCursor, i, l_columnValue ); + if trim(l_columnValue) != '0' then + dbms_output.put_line ( rpad( l_descTbl(i).col_name, 35 ) || ': ' + || substr(l_columnValue,1,220) + || CASE WHEN LENGTH(l_columnValue) > 220 THEN '...' ELSE '' END ); + end if; + end loop; + dbms_output.put_line( '-----------------' ); + end loop; +end; +/ + +@@loadset diff --git a/tpt/nonsharedsum2.sql b/tpt/nonsharedsum2.sql new file mode 100644 index 0000000..6f05438 --- /dev/null +++ b/tpt/nonsharedsum2.sql @@ -0,0 +1,94 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET LINES 10000 PAGES 5000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +COL nonsharedsum_sqlid HEAD SQL_ID + +BREAK ON nonsharedsum_sqlid SKIP 1 + +DEF _CURSOR_COUNT=2 + +WITH raw_data AS ( + SELECT /*+ MATERIALIZE */ * FROM v$sql_shared_cursor + WHERE sql_id IN ( + SELECT sql_id FROM v$sql GROUP BY sql_id HAVING COUNT(*) > &_CURSOR_COUNT + ) +), +sq AS ( + SELECT sql_id, why, CASE WHEN child_cursors = 'Y' THEN 1 ELSE 0 END child_count + FROM raw_data + UNPIVOT ( + child_cursors FOR why IN ( + UNBOUND_CURSOR + , SQL_TYPE_MISMATCH + , OPTIMIZER_MISMATCH + , OUTLINE_MISMATCH + , STATS_ROW_MISMATCH + , LITERAL_MISMATCH + , FORCE_HARD_PARSE + , EXPLAIN_PLAN_CURSOR + , BUFFERED_DML_MISMATCH + , PDML_ENV_MISMATCH + , INST_DRTLD_MISMATCH + , SLAVE_QC_MISMATCH + , TYPECHECK_MISMATCH + , AUTH_CHECK_MISMATCH + , BIND_MISMATCH + , DESCRIBE_MISMATCH + , LANGUAGE_MISMATCH + , TRANSLATION_MISMATCH + --, ROW_LEVEL_SEC_MISMATCH + , INSUFF_PRIVS + , INSUFF_PRIVS_REM + , REMOTE_TRANS_MISMATCH + , LOGMINER_SESSION_MISMATCH + , INCOMP_LTRL_MISMATCH + , OVERLAP_TIME_MISMATCH + , EDITION_MISMATCH + , MV_QUERY_GEN_MISMATCH + , USER_BIND_PEEK_MISMATCH + , TYPCHK_DEP_MISMATCH + , NO_TRIGGER_MISMATCH + , FLASHBACK_CURSOR + , ANYDATA_TRANSFORMATION + -- , INCOMPLETE_CURSOR + , TOP_LEVEL_RPI_CURSOR + , DIFFERENT_LONG_LENGTH + , LOGICAL_STANDBY_APPLY + , DIFF_CALL_DURN + , BIND_UACS_DIFF + , PLSQL_CMP_SWITCHS_DIFF + , CURSOR_PARTS_MISMATCH + , STB_OBJECT_MISMATCH + , CROSSEDITION_TRIGGER_MISMATCH + , PQ_SLAVE_MISMATCH + , TOP_LEVEL_DDL_MISMATCH + , MULTI_PX_MISMATCH + , BIND_PEEKED_PQ_MISMATCH + , MV_REWRITE_MISMATCH + , ROLL_INVALID_MISMATCH + , OPTIMIZER_MODE_MISMATCH + , PX_MISMATCH + , MV_STALEOBJ_MISMATCH + , FLASHBACK_TABLE_MISMATCH + , LITREP_COMP_MISMATCH + , PLSQL_DEBUG + , LOAD_OPTIMIZER_STATS + , ACL_MISMATCH + , FLASHBACK_ARCHIVE_MISMATCH + , LOCK_USER_SCHEMA_FAILED + , REMOTE_MAPPING_MISMATCH + , LOAD_RUNTIME_HEAP_FAILED + , HASH_MATCH_FAILED + ) + ) +) +SELECT + sql_id nonsharedsum_sqlid + , why + , child_count +FROM sq +WHERE + child_count > 0 +/ diff --git a/tpt/nonsharedsum3.sql b/tpt/nonsharedsum3.sql new file mode 100644 index 0000000..a3dcc60 --- /dev/null +++ b/tpt/nonsharedsum3.sql @@ -0,0 +1,81 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + sql_id + -- , address + --, child_address + --, child_number + , COUNT(*) + , COUNT(DISTINCT ADDRESS) num_parents + , SUM(CASE WHEN UNBOUND_CURSOR = 'Y' THEN 1 ELSE 0 END) UNBOUND_CURSOR + , SUM(CASE WHEN SQL_TYPE_MISMATCH = 'Y' THEN 1 ELSE 0 END) SQL_TYPE_MISMATCH + , SUM(CASE WHEN OPTIMIZER_MISMATCH = 'Y' THEN 1 ELSE 0 END) OPTIMIZER_MISMATCH + , SUM(CASE WHEN OUTLINE_MISMATCH = 'Y' THEN 1 ELSE 0 END) OUTLINE_MISMATCH + , SUM(CASE WHEN STATS_ROW_MISMATCH = 'Y' THEN 1 ELSE 0 END) STATS_ROW_MISMATCH + , SUM(CASE WHEN LITERAL_MISMATCH = 'Y' THEN 1 ELSE 0 END) LITERAL_MISMATCH + , SUM(CASE WHEN FORCE_HARD_PARSE = 'Y' THEN 1 ELSE 0 END) FORCE_HARD_PARSE + , SUM(CASE WHEN EXPLAIN_PLAN_CURSOR = 'Y' THEN 1 ELSE 0 END) EXPLAIN_PLAN_CURSOR + , SUM(CASE WHEN BUFFERED_DML_MISMATCH = 'Y' THEN 1 ELSE 0 END) BUFFERED_DML_MISMATCH + , SUM(CASE WHEN PDML_ENV_MISMATCH = 'Y' THEN 1 ELSE 0 END) PDML_ENV_MISMATCH + , SUM(CASE WHEN INST_DRTLD_MISMATCH = 'Y' THEN 1 ELSE 0 END) INST_DRTLD_MISMATCH + , SUM(CASE WHEN SLAVE_QC_MISMATCH = 'Y' THEN 1 ELSE 0 END) SLAVE_QC_MISMATCH + , SUM(CASE WHEN TYPECHECK_MISMATCH = 'Y' THEN 1 ELSE 0 END) TYPECHECK_MISMATCH + , SUM(CASE WHEN AUTH_CHECK_MISMATCH = 'Y' THEN 1 ELSE 0 END) AUTH_CHECK_MISMATCH + , SUM(CASE WHEN BIND_MISMATCH = 'Y' THEN 1 ELSE 0 END) BIND_MISMATCH + , SUM(CASE WHEN DESCRIBE_MISMATCH = 'Y' THEN 1 ELSE 0 END) DESCRIBE_MISMATCH + , SUM(CASE WHEN LANGUAGE_MISMATCH = 'Y' THEN 1 ELSE 0 END) LANGUAGE_MISMATCH + , SUM(CASE WHEN TRANSLATION_MISMATCH = 'Y' THEN 1 ELSE 0 END) TRANSLATION_MISMATCH + , SUM(CASE WHEN BIND_EQUIV_FAILURE = 'Y' THEN 1 ELSE 0 END) BIND_EQUIV_FAILURE + , SUM(CASE WHEN INSUFF_PRIVS = 'Y' THEN 1 ELSE 0 END) INSUFF_PRIVS + , SUM(CASE WHEN INSUFF_PRIVS_REM = 'Y' THEN 1 ELSE 0 END) INSUFF_PRIVS_REM + , SUM(CASE WHEN REMOTE_TRANS_MISMATCH = 'Y' THEN 1 ELSE 0 END) REMOTE_TRANS_MISMATCH + , SUM(CASE WHEN LOGMINER_SESSION_MISMATCH = 'Y' THEN 1 ELSE 0 END) LOGMINER_SESSION_MISMATCH + , SUM(CASE WHEN INCOMP_LTRL_MISMATCH = 'Y' THEN 1 ELSE 0 END) INCOMP_LTRL_MISMATCH + , SUM(CASE WHEN OVERLAP_TIME_MISMATCH = 'Y' THEN 1 ELSE 0 END) OVERLAP_TIME_MISMATCH + , SUM(CASE WHEN EDITION_MISMATCH = 'Y' THEN 1 ELSE 0 END) EDITION_MISMATCH + , SUM(CASE WHEN MV_QUERY_GEN_MISMATCH = 'Y' THEN 1 ELSE 0 END) MV_QUERY_GEN_MISMATCH + , SUM(CASE WHEN USER_BIND_PEEK_MISMATCH = 'Y' THEN 1 ELSE 0 END) USER_BIND_PEEK_MISMATCH + , SUM(CASE WHEN TYPCHK_DEP_MISMATCH = 'Y' THEN 1 ELSE 0 END) TYPCHK_DEP_MISMATCH + , SUM(CASE WHEN NO_TRIGGER_MISMATCH = 'Y' THEN 1 ELSE 0 END) NO_TRIGGER_MISMATCH + , SUM(CASE WHEN FLASHBACK_CURSOR = 'Y' THEN 1 ELSE 0 END) FLASHBACK_CURSOR + , SUM(CASE WHEN ANYDATA_TRANSFORMATION = 'Y' THEN 1 ELSE 0 END) ANYDATA_TRANSFORMATION + , SUM(CASE WHEN PDDL_ENV_MISMATCH = 'Y' THEN 1 ELSE 0 END) PDDL_ENV_MISMATCH + , SUM(CASE WHEN TOP_LEVEL_RPI_CURSOR = 'Y' THEN 1 ELSE 0 END) TOP_LEVEL_RPI_CURSOR + , SUM(CASE WHEN DIFFERENT_LONG_LENGTH = 'Y' THEN 1 ELSE 0 END) DIFFERENT_LONG_LENGTH + , SUM(CASE WHEN LOGICAL_STANDBY_APPLY = 'Y' THEN 1 ELSE 0 END) LOGICAL_STANDBY_APPLY + , SUM(CASE WHEN DIFF_CALL_DURN = 'Y' THEN 1 ELSE 0 END) DIFF_CALL_DURN + , SUM(CASE WHEN BIND_UACS_DIFF = 'Y' THEN 1 ELSE 0 END) BIND_UACS_DIFF + , SUM(CASE WHEN PLSQL_CMP_SWITCHS_DIFF = 'Y' THEN 1 ELSE 0 END) PLSQL_CMP_SWITCHS_DIFF + , SUM(CASE WHEN CURSOR_PARTS_MISMATCH = 'Y' THEN 1 ELSE 0 END) CURSOR_PARTS_MISMATCH + , SUM(CASE WHEN STB_OBJECT_MISMATCH = 'Y' THEN 1 ELSE 0 END) STB_OBJECT_MISMATCH + , SUM(CASE WHEN CROSSEDITION_TRIGGER_MISMATCH = 'Y' THEN 1 ELSE 0 END) CROSSEDITION_TRIGGER_MISMATCH + , SUM(CASE WHEN PQ_SLAVE_MISMATCH = 'Y' THEN 1 ELSE 0 END) PQ_SLAVE_MISMATCH + , SUM(CASE WHEN TOP_LEVEL_DDL_MISMATCH = 'Y' THEN 1 ELSE 0 END) TOP_LEVEL_DDL_MISMATCH + , SUM(CASE WHEN MULTI_PX_MISMATCH = 'Y' THEN 1 ELSE 0 END) MULTI_PX_MISMATCH + , SUM(CASE WHEN BIND_PEEKED_PQ_MISMATCH = 'Y' THEN 1 ELSE 0 END) BIND_PEEKED_PQ_MISMATCH + , SUM(CASE WHEN MV_REWRITE_MISMATCH = 'Y' THEN 1 ELSE 0 END) MV_REWRITE_MISMATCH + , SUM(CASE WHEN ROLL_INVALID_MISMATCH = 'Y' THEN 1 ELSE 0 END) ROLL_INVALID_MISMATCH + , SUM(CASE WHEN OPTIMIZER_MODE_MISMATCH = 'Y' THEN 1 ELSE 0 END) OPTIMIZER_MODE_MISMATCH + , SUM(CASE WHEN PX_MISMATCH = 'Y' THEN 1 ELSE 0 END) PX_MISMATCH + , SUM(CASE WHEN MV_STALEOBJ_MISMATCH = 'Y' THEN 1 ELSE 0 END) MV_STALEOBJ_MISMATCH + , SUM(CASE WHEN FLASHBACK_TABLE_MISMATCH = 'Y' THEN 1 ELSE 0 END) FLASHBACK_TABLE_MISMATCH + , SUM(CASE WHEN LITREP_COMP_MISMATCH = 'Y' THEN 1 ELSE 0 END) LITREP_COMP_MISMATCH + , SUM(CASE WHEN PLSQL_DEBUG = 'Y' THEN 1 ELSE 0 END) PLSQL_DEBUG + , SUM(CASE WHEN LOAD_OPTIMIZER_STATS = 'Y' THEN 1 ELSE 0 END) LOAD_OPTIMIZER_STATS + , SUM(CASE WHEN ACL_MISMATCH = 'Y' THEN 1 ELSE 0 END) ACL_MISMATCH + , SUM(CASE WHEN FLASHBACK_ARCHIVE_MISMATCH = 'Y' THEN 1 ELSE 0 END) FLASHBACK_ARCHIVE_MISMATCH + , SUM(CASE WHEN LOCK_USER_SCHEMA_FAILED = 'Y' THEN 1 ELSE 0 END) LOCK_USER_SCHEMA_FAILED + , SUM(CASE WHEN REMOTE_MAPPING_MISMATCH = 'Y' THEN 1 ELSE 0 END) REMOTE_MAPPING_MISMATCH + , SUM(CASE WHEN LOAD_RUNTIME_HEAP_FAILED = 'Y' THEN 1 ELSE 0 END) LOAD_RUNTIME_HEAP_FAILED + , SUM(CASE WHEN HASH_MATCH_FAILED = 'Y' THEN 1 ELSE 0 END) HASH_MATCH_FAILED + , SUM(CASE WHEN PURGED_CURSOR = 'Y' THEN 1 ELSE 0 END) PURGED_CURSOR + , SUM(CASE WHEN BIND_LENGTH_UPGRADEABLE = 'Y' THEN 1 ELSE 0 END) BIND_LENGTH_UPGRADEABLE + , SUM(CASE WHEN USE_FEEDBACK_STATS = 'Y' THEN 1 ELSE 0 END) USE_FEEDBACK_STATS +FROM + v$sql_shared_cursor +GROUP BY + sql_id + --, address +HAVING COUNT(*) > 10 +/ diff --git a/tpt/nonsharedsum_html.sql b/tpt/nonsharedsum_html.sql new file mode 100644 index 0000000..e3064e5 --- /dev/null +++ b/tpt/nonsharedsum_html.sql @@ -0,0 +1,109 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: nonsharedsum_html.sql +-- Purpose: Print reasons for non-shared child cursors from v$sql_shared_cursor +-- in a readable format +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @nonsharedsum_html +-- @nonsharedsum_html 100 +-- +-------------------------------------------------------------------------------- + + +DEF _CURSOR_COUNT=&1 + +SET MARKUP HTML ON + +SPOOL nonshared_cursors.html + +SELECT + sql_id + -- , address + --, child_address + --, child_number + , COUNT(*) + , COUNT(DISTINCT ADDRESS) num_parents + , SUM(CASE WHEN UNBOUND_CURSOR = 'Y' THEN 1 ELSE 0 END) UNBOUND_CURSOR + , SUM(CASE WHEN SQL_TYPE_MISMATCH = 'Y' THEN 1 ELSE 0 END) SQL_TYPE_MISMATCH + , SUM(CASE WHEN OPTIMIZER_MISMATCH = 'Y' THEN 1 ELSE 0 END) OPTIMIZER_MISMATCH + , SUM(CASE WHEN OUTLINE_MISMATCH = 'Y' THEN 1 ELSE 0 END) OUTLINE_MISMATCH + , SUM(CASE WHEN STATS_ROW_MISMATCH = 'Y' THEN 1 ELSE 0 END) STATS_ROW_MISMATCH + , SUM(CASE WHEN LITERAL_MISMATCH = 'Y' THEN 1 ELSE 0 END) LITERAL_MISMATCH + , SUM(CASE WHEN FORCE_HARD_PARSE = 'Y' THEN 1 ELSE 0 END) FORCE_HARD_PARSE + , SUM(CASE WHEN EXPLAIN_PLAN_CURSOR = 'Y' THEN 1 ELSE 0 END) EXPLAIN_PLAN_CURSOR + , SUM(CASE WHEN BUFFERED_DML_MISMATCH = 'Y' THEN 1 ELSE 0 END) BUFFERED_DML_MISMATCH + , SUM(CASE WHEN PDML_ENV_MISMATCH = 'Y' THEN 1 ELSE 0 END) PDML_ENV_MISMATCH + , SUM(CASE WHEN INST_DRTLD_MISMATCH = 'Y' THEN 1 ELSE 0 END) INST_DRTLD_MISMATCH + , SUM(CASE WHEN SLAVE_QC_MISMATCH = 'Y' THEN 1 ELSE 0 END) SLAVE_QC_MISMATCH + , SUM(CASE WHEN TYPECHECK_MISMATCH = 'Y' THEN 1 ELSE 0 END) TYPECHECK_MISMATCH + , SUM(CASE WHEN AUTH_CHECK_MISMATCH = 'Y' THEN 1 ELSE 0 END) AUTH_CHECK_MISMATCH + , SUM(CASE WHEN BIND_MISMATCH = 'Y' THEN 1 ELSE 0 END) BIND_MISMATCH + , SUM(CASE WHEN DESCRIBE_MISMATCH = 'Y' THEN 1 ELSE 0 END) DESCRIBE_MISMATCH + , SUM(CASE WHEN LANGUAGE_MISMATCH = 'Y' THEN 1 ELSE 0 END) LANGUAGE_MISMATCH + , SUM(CASE WHEN TRANSLATION_MISMATCH = 'Y' THEN 1 ELSE 0 END) TRANSLATION_MISMATCH + , SUM(CASE WHEN BIND_EQUIV_FAILURE = 'Y' THEN 1 ELSE 0 END) BIND_EQUIV_FAILURE + , SUM(CASE WHEN INSUFF_PRIVS = 'Y' THEN 1 ELSE 0 END) INSUFF_PRIVS + , SUM(CASE WHEN INSUFF_PRIVS_REM = 'Y' THEN 1 ELSE 0 END) INSUFF_PRIVS_REM + , SUM(CASE WHEN REMOTE_TRANS_MISMATCH = 'Y' THEN 1 ELSE 0 END) REMOTE_TRANS_MISMATCH + , SUM(CASE WHEN LOGMINER_SESSION_MISMATCH = 'Y' THEN 1 ELSE 0 END) LOGMINER_SESSION_MISMATCH + , SUM(CASE WHEN INCOMP_LTRL_MISMATCH = 'Y' THEN 1 ELSE 0 END) INCOMP_LTRL_MISMATCH + , SUM(CASE WHEN OVERLAP_TIME_MISMATCH = 'Y' THEN 1 ELSE 0 END) OVERLAP_TIME_MISMATCH + , SUM(CASE WHEN EDITION_MISMATCH = 'Y' THEN 1 ELSE 0 END) EDITION_MISMATCH + , SUM(CASE WHEN MV_QUERY_GEN_MISMATCH = 'Y' THEN 1 ELSE 0 END) MV_QUERY_GEN_MISMATCH + , SUM(CASE WHEN USER_BIND_PEEK_MISMATCH = 'Y' THEN 1 ELSE 0 END) USER_BIND_PEEK_MISMATCH + , SUM(CASE WHEN TYPCHK_DEP_MISMATCH = 'Y' THEN 1 ELSE 0 END) TYPCHK_DEP_MISMATCH + , SUM(CASE WHEN NO_TRIGGER_MISMATCH = 'Y' THEN 1 ELSE 0 END) NO_TRIGGER_MISMATCH + , SUM(CASE WHEN FLASHBACK_CURSOR = 'Y' THEN 1 ELSE 0 END) FLASHBACK_CURSOR + , SUM(CASE WHEN ANYDATA_TRANSFORMATION = 'Y' THEN 1 ELSE 0 END) ANYDATA_TRANSFORMATION + , SUM(CASE WHEN PDDL_ENV_MISMATCH = 'Y' THEN 1 ELSE 0 END) PDDL_ENV_MISMATCH + , SUM(CASE WHEN TOP_LEVEL_RPI_CURSOR = 'Y' THEN 1 ELSE 0 END) TOP_LEVEL_RPI_CURSOR + , SUM(CASE WHEN DIFFERENT_LONG_LENGTH = 'Y' THEN 1 ELSE 0 END) DIFFERENT_LONG_LENGTH + , SUM(CASE WHEN LOGICAL_STANDBY_APPLY = 'Y' THEN 1 ELSE 0 END) LOGICAL_STANDBY_APPLY + , SUM(CASE WHEN DIFF_CALL_DURN = 'Y' THEN 1 ELSE 0 END) DIFF_CALL_DURN + , SUM(CASE WHEN BIND_UACS_DIFF = 'Y' THEN 1 ELSE 0 END) BIND_UACS_DIFF + , SUM(CASE WHEN PLSQL_CMP_SWITCHS_DIFF = 'Y' THEN 1 ELSE 0 END) PLSQL_CMP_SWITCHS_DIFF + , SUM(CASE WHEN CURSOR_PARTS_MISMATCH = 'Y' THEN 1 ELSE 0 END) CURSOR_PARTS_MISMATCH + , SUM(CASE WHEN STB_OBJECT_MISMATCH = 'Y' THEN 1 ELSE 0 END) STB_OBJECT_MISMATCH + , SUM(CASE WHEN CROSSEDITION_TRIGGER_MISMATCH = 'Y' THEN 1 ELSE 0 END) CROSSEDITION_TRIGGER_MISMATCH + , SUM(CASE WHEN PQ_SLAVE_MISMATCH = 'Y' THEN 1 ELSE 0 END) PQ_SLAVE_MISMATCH + , SUM(CASE WHEN TOP_LEVEL_DDL_MISMATCH = 'Y' THEN 1 ELSE 0 END) TOP_LEVEL_DDL_MISMATCH + , SUM(CASE WHEN MULTI_PX_MISMATCH = 'Y' THEN 1 ELSE 0 END) MULTI_PX_MISMATCH + , SUM(CASE WHEN BIND_PEEKED_PQ_MISMATCH = 'Y' THEN 1 ELSE 0 END) BIND_PEEKED_PQ_MISMATCH + , SUM(CASE WHEN MV_REWRITE_MISMATCH = 'Y' THEN 1 ELSE 0 END) MV_REWRITE_MISMATCH + , SUM(CASE WHEN ROLL_INVALID_MISMATCH = 'Y' THEN 1 ELSE 0 END) ROLL_INVALID_MISMATCH + , SUM(CASE WHEN OPTIMIZER_MODE_MISMATCH = 'Y' THEN 1 ELSE 0 END) OPTIMIZER_MODE_MISMATCH + , SUM(CASE WHEN PX_MISMATCH = 'Y' THEN 1 ELSE 0 END) PX_MISMATCH + , SUM(CASE WHEN MV_STALEOBJ_MISMATCH = 'Y' THEN 1 ELSE 0 END) MV_STALEOBJ_MISMATCH + , SUM(CASE WHEN FLASHBACK_TABLE_MISMATCH = 'Y' THEN 1 ELSE 0 END) FLASHBACK_TABLE_MISMATCH + , SUM(CASE WHEN LITREP_COMP_MISMATCH = 'Y' THEN 1 ELSE 0 END) LITREP_COMP_MISMATCH + , SUM(CASE WHEN PLSQL_DEBUG = 'Y' THEN 1 ELSE 0 END) PLSQL_DEBUG + , SUM(CASE WHEN LOAD_OPTIMIZER_STATS = 'Y' THEN 1 ELSE 0 END) LOAD_OPTIMIZER_STATS + , SUM(CASE WHEN ACL_MISMATCH = 'Y' THEN 1 ELSE 0 END) ACL_MISMATCH + , SUM(CASE WHEN FLASHBACK_ARCHIVE_MISMATCH = 'Y' THEN 1 ELSE 0 END) FLASHBACK_ARCHIVE_MISMATCH + , SUM(CASE WHEN LOCK_USER_SCHEMA_FAILED = 'Y' THEN 1 ELSE 0 END) LOCK_USER_SCHEMA_FAILED + , SUM(CASE WHEN REMOTE_MAPPING_MISMATCH = 'Y' THEN 1 ELSE 0 END) REMOTE_MAPPING_MISMATCH + , SUM(CASE WHEN LOAD_RUNTIME_HEAP_FAILED = 'Y' THEN 1 ELSE 0 END) LOAD_RUNTIME_HEAP_FAILED + , SUM(CASE WHEN HASH_MATCH_FAILED = 'Y' THEN 1 ELSE 0 END) HASH_MATCH_FAILED + , SUM(CASE WHEN PURGED_CURSOR = 'Y' THEN 1 ELSE 0 END) PURGED_CURSOR + , SUM(CASE WHEN BIND_LENGTH_UPGRADEABLE = 'Y' THEN 1 ELSE 0 END) BIND_LENGTH_UPGRADEABLE + , SUM(CASE WHEN USE_FEEDBACK_STATS = 'Y' THEN 1 ELSE 0 END) USE_FEEDBACK_STATS +FROM + v$sql_shared_cursor +GROUP BY + sql_id + --, address +HAVING + COUNT(*) >= &_CURSOR_COUNT +ORDER BY + COUNT(*) DESC +/ + +SPOOL OFF +SET MARKUP HTML OFF + diff --git a/tpt/npstat.sql b/tpt/npstat.sql new file mode 100644 index 0000000..74274d4 --- /dev/null +++ b/tpt/npstat.sql @@ -0,0 +1,61 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: sgastatx +-- Purpose: Show shared pool stats by sub-pool from X$KSMSS +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sgastatx +-- @sgastatx "free memory" +-- @sgastatx cursor +-- +-- Other: The other script for querying V$SGASTAT is called sgastat.sql +-- +-- +-- +-------------------------------------------------------------------------------- + +COL sgastatx_subpool HEAD SUBPOOL FOR a30 + +PROMPT +PROMPT -- All allocations: + +SELECT + 'numa pool' pool_name + , ksmnssidx + , ksmnsprocgrp + , ROUND(SUM(CASE WHEN ksmnsnam = 'free memory' THEN 0 ELSE ksmnslen END)/1048576) mb_used + , ROUND(SUM(CASE WHEN ksmnsnam = 'free memory' THEN ksmnslen ELSE 0 END)/1048576) mb_free + , ROUND(SUM(ksmnslen)/1048576) mem_total +from x$ksmns +group by + 'numa pool' + , ksmnssidx + , ksmnsprocgrp +order by + 1,2,3 +/ + +SELECT + 'numa pool' pool_name + , ksmnssidx + , ksmnsprocgrp + , ksmnsnam + , ROUND(sum(ksmnslen)/1048576) mb +from x$ksmns +where lower(ksmnsnam) like lower('%&1%') +group by + 'numa pool' + , ksmnssidx + , ksmnsprocgrp + , ksmnsnam +order by + 1,2,3 +/ + + +BREAK ON sgastatx_subpool DUP diff --git a/tpt/o.sql b/tpt/o.sql new file mode 100644 index 0000000..0e785fe --- /dev/null +++ b/tpt/o.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@o2 "%&1%" \ No newline at end of file diff --git a/tpt/o2.sql b/tpt/o2.sql new file mode 100644 index 0000000..91b2721 --- /dev/null +++ b/tpt/o2.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col o_owner heading owner for a25 +col o_object_name heading object_name for a30 +col o_object_type heading object_type for a20 +col o_status heading status for a9 + +select + owner o_owner, + object_name o_object_name, + object_type o_object_type, + status o_status, + object_id oid, + data_object_id d_oid, + created, + last_ddl_time +from + dba_objects +where + upper(object_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +order by + o_object_name, + o_owner, + o_object_type +/ diff --git a/tpt/oc.sql b/tpt/oc.sql new file mode 100644 index 0000000..739573a --- /dev/null +++ b/tpt/oc.sql @@ -0,0 +1,7 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL user_name FOR A30 +SELECT * FROM v$open_cursor WHERE &1 +/ + diff --git a/tpt/od.sql b/tpt/od.sql new file mode 100644 index 0000000..a335ea9 --- /dev/null +++ b/tpt/od.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt SQL> oradebug setmypid +oradebug setmypid diff --git a/tpt/oda.sql b/tpt/oda.sql new file mode 100644 index 0000000..d7ca9ae --- /dev/null +++ b/tpt/oda.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT ORADEBUG DOC EVENT ACTION | grep -i &1 +PROMPT +set termout off +spool oddc.tmp + +oradebug doc event action +spool off + +host grep -i &1 oddc.tmp +host &_delete oddc.tmp + +set termout on + +prompt +prompt (spool is off) diff --git a/tpt/odc.sql b/tpt/odc.sql new file mode 100644 index 0000000..e84b104 --- /dev/null +++ b/tpt/odc.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +ORADEBUG DOC COMPONENT &1 diff --git a/tpt/oddc.sql b/tpt/oddc.sql new file mode 100644 index 0000000..c99b6c9 --- /dev/null +++ b/tpt/oddc.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT ORADEBUG DOC COMPONENT | grep -i &1 +PROMPT +set termout off +spool oddc.tmp + +oradebug doc component +spool off + +host grep -i &1 oddc.tmp +host &_delete oddc.tmp + +set termout on + +prompt +prompt (spool is off) diff --git a/tpt/odh.sql b/tpt/odh.sql new file mode 100644 index 0000000..9f7286c --- /dev/null +++ b/tpt/odh.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +oradebug help \ No newline at end of file diff --git a/tpt/odl.sql b/tpt/odl.sql new file mode 100644 index 0000000..81cadbb --- /dev/null +++ b/tpt/odl.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- script by Tanel Poder (http://www.tanelpoder.com) + +set termout off +spool odl.tmp + +oradebug dumplist +spool off + +host grep -i &1 odl.tmp | sort +host &_delete odl.tmp + +set termout on + +prompt +prompt (spool is off) diff --git a/tpt/ods.sql b/tpt/ods.sql new file mode 100644 index 0000000..66869e9 --- /dev/null +++ b/tpt/ods.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +pause Run oradebug short_stack? (ENTER to continue, CTRL+C to cancel): +oradebug short_stack diff --git a/tpt/odsid.sql b/tpt/odsid.sql new file mode 100644 index 0000000..266bef3 --- /dev/null +++ b/tpt/odsid.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SET TERMOUT OFF +COL spid NEW_VALUE odsid_spid +SELECT spid FROM v$process WHERE addr = (SELECT /*+ NO_UNNEST */ paddr FROM v$session WHERE sid = &1); +COL spid CLEAR +SET TERMOUT ON + +ORADEBUG SETOSPID &odsid_spid diff --git a/tpt/odt.sql b/tpt/odt.sql new file mode 100644 index 0000000..6450d3a --- /dev/null +++ b/tpt/odt.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +oradebug tracefile_name diff --git a/tpt/oerr.sql b/tpt/oerr.sql new file mode 100644 index 0000000..d3c0fe5 --- /dev/null +++ b/tpt/oerr.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- OERR functionality - list description for and ORA- error code +-- The data comes from $ORACLE_HOME/rdbms/mesg/oraus.msb file +-- which is a binary compiled version of $ORACLE_HOME/rdbms/mesg/oraus.msg file + + +@@saveset +set serverout on size 1000000 feedback off +prompt +exec dbms_output.put_line(sqlerrm(-&1)) +prompt +@@loadset diff --git a/tpt/oerrh.sql b/tpt/oerrh.sql new file mode 100644 index 0000000..0dfd2ed --- /dev/null +++ b/tpt/oerrh.sql @@ -0,0 +1,6 @@ +-- Copyright 2023 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. + +-- The _start variable below is defined in init.sql (Win: start, OSX: open, Linux: xdg-open +PROMPT Opening https://docs.oracle.com/en/error-help/db/ora-&1 +HOST &_start https://docs.oracle.com/en/error-help/db/ora-&1 diff --git a/tpt/oerrign.sql b/tpt/oerrign.sql new file mode 100644 index 0000000..4cca1c4 --- /dev/null +++ b/tpt/oerrign.sql @@ -0,0 +1,23 @@ +COL oerr_command_name HEAD SQL_COMMAND_NAME FOR A35 +COL oerr_error_text HEAD ERROR_TEXT FOR A80 WORD_WRAP + +WITH + FUNCTION errtext(oerr IN NUMBER) + RETURN VARCHAR2 IS + BEGIN + RETURN SQLERRM(-oerr); + END; +SELECT + e.error_number oraerr +-- , c.command_type cmd + , c.command_name oerr_command_name + , errtext(e.error_number) oerr_error_text +FROM + v$app_ignorable_errors e + , v$sqlcommand c +WHERE + e.command_type = c.command_type +ORDER BY + error_number +/ + diff --git a/tpt/ofe.sql b/tpt/ofe.sql new file mode 100644 index 0000000..6a4fba4 --- /dev/null +++ b/tpt/ofe.sql @@ -0,0 +1,2 @@ +PROMPT ALTER SESSION SET optimizer_features_enable = '&1';; +ALTER SESSION SET optimizer_features_enable = '&1'; diff --git a/tpt/oi.sql b/tpt/oi.sql new file mode 100644 index 0000000..6198c16 --- /dev/null +++ b/tpt/oi.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col o_owner heading owner for a25 +col o_object_name heading object_name for a30 +col o_object_type heading object_type for a18 +col o_status heading status for a9 + +select + owner o_owner, + object_name o_object_name, + object_type o_object_type, + created, + last_ddl_time, + status o_status +from + dba_objects +where + status != 'VALID' +order by + o_object_name, + o_owner, + o_object_type +; + diff --git a/tpt/oid.sql b/tpt/oid.sql new file mode 100644 index 0000000..108167f --- /dev/null +++ b/tpt/oid.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Script by Tanel Poder (http://www.tanelpoder.com) +-- +-- Look up object info by object id + +col o_owner heading owner for a25 +col o_object_name heading object_name for a30 +col o_object_type heading object_type for a18 +col o_status heading status for a9 + +select + owner o_owner, + object_name o_object_name, + object_type o_object_type, + subobject_name, + created, + last_ddl_time, + status o_status, + data_object_id +from + dba_objects +where + object_id in (&1) +order by + o_object_name, + o_owner, + o_object_type +/ diff --git a/tpt/ol.sql b/tpt/ol.sql new file mode 100644 index 0000000..1770fab --- /dev/null +++ b/tpt/ol.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col ol_sql_text head SQL_TEXT for a80 word_wrap + +select + owner + , name + , category + , used + , enabled + , sql_text ol_sql_text +from + dba_outlines +where + lower(owner) like lower('&1') +and lower(name) like lower('&2') +/ + diff --git a/tpt/oprivs.sql b/tpt/oprivs.sql new file mode 100644 index 0000000..1dbe341 --- /dev/null +++ b/tpt/oprivs.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@oprivs2 "%&1%" \ No newline at end of file diff --git a/tpt/oprivs2.sql b/tpt/oprivs2.sql new file mode 100644 index 0000000..6364d59 --- /dev/null +++ b/tpt/oprivs2.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col grantee for a25 + +select grantee, owner, table_name, privilege from dba_tab_privs where upper(table_name) like upper('&1'); diff --git a/tpt/ora_hash.sql b/tpt/ora_hash.sql new file mode 100644 index 0000000..ae8c260 --- /dev/null +++ b/tpt/ora_hash.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select to_char(ora_hash('&1'), 'XXXXXXXX') from dual; diff --git a/tpt/osp.sql b/tpt/osp.sql new file mode 100644 index 0000000..40b5ba2 --- /dev/null +++ b/tpt/osp.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@ostackprof &1 0 100 diff --git a/tpt/ostack.sql b/tpt/ostack.sql new file mode 100644 index 0000000..6952e75 --- /dev/null +++ b/tpt/ostack.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@ostackprof &1 0 2 \ No newline at end of file diff --git a/tpt/ostackprof.sql b/tpt/ostackprof.sql new file mode 100644 index 0000000..43dd284 --- /dev/null +++ b/tpt/ostackprof.sql @@ -0,0 +1,4 @@ +PROMPT New usage: +PROMPT Use ostackprofw.sql on Windows clients and ostackprofu.sql on Unix/Linux/Mac clients... +PROMPT + diff --git a/tpt/ostackprofu.sql b/tpt/ostackprofu.sql new file mode 100644 index 0000000..2bad27a --- /dev/null +++ b/tpt/ostackprofu.sql @@ -0,0 +1,104 @@ +------------------------------------------------------------------------------------- +-- +-- File name: oStackProfU.sql ( Oradebug short_Stack Profiler ) +-- Purpose: Take target process stack samples and show an execution profile +-- +-- Author: Tanel Poder +-- Copyright: 2008 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +-- +-- Usage: @ostackprofu <#samples> +-- +-- @ostackprofu 148 0 100 +-- +-- - takes 100 stack samples of server process tied to SID 148 +-- with not waiting between samples +-- +-- @ostackprofu 148 0.1 60 + +-- - takes 60 stack samples of process tied to sid 148 with 0.1 +-- second interval +-- +-- Updates: Version 1.2 - support also Unix/Mac clients via Python based stack_helper +-- +-- Other: WARNING!!! This tool is experimental and not meant for use in +-- production environments. This is due oradebug short_stack +-- being somewhat unstable on some platforms and it has +-- event crashed target processes on Windows platforms (9.2) +-- +-- Use an OS stack sampler instead when need to diagnose +-- production issues (and test even those well in dev) +-- +-- +-- Note that this script uses a stack_helper.py Python script for post +-- processing oradebug short_stack output. Therefore you need to run +-- it on a Unix/Linux/Mac SQLPLUS client with python installed. The +-- server can be on any platforms as long as it supports oradebug +-- short_stack - 10.2 on Solaris x64 doesn't seem to support it though, +-- but you have DTrace there anyway ;) +-- +------------------------------------------------------------------------------------- + +PROMPT +PROMPT -- oStackProf v1.2 - EXPERIMENTAL script by Tanel Poder ( https://tanelpoder.com ) +PROMPT +PROMPT WARNING! This script can crash the target process on Oracle 9.2 on Windows +PROMPT and maybe other versions/platforms as well. Test this script out thorouhgly +PROMPT in your dev environment first! +PAUSE Hit CTRL+C to cancel, ENTER to continue... + +SET TERMOUT OFF FEEDBACK OFF VERIFY OFF + +DEF ostackprof_sid=&1 +DEF ostackprof_interval=&2 +DEF ostackprof_samples=&3 + +COL spid NEW_VALUE ostackprof_spid +SELECT spid FROM v$process WHERE addr = (SELECT /*+ NO_UNNEST */ paddr FROM v$session WHERE sid = &1); +COL spid CLEAR + +ORADEBUG SETOSPID &ostackprof_spid + +SELECT + 'oradebug short_stack'|| + DECODE(TO_NUMBER(&ostackprof_interval), + 0, '', + chr(13)||chr(10)||'exec dbms_lock.sleep('||TO_CHAR(&ostackprof_interval)||')' + ) cmd +FROM + (select 1 from dual CONNECT BY level <= &ostackprof_samples) +. + +SPOOL ostackprof_&ostackprof_spid..tmp +SET HEADING OFF +PROMPT spool ostackprof_&ostackprof_spid..txt +/ +PROMPT spool off +SET HEADING ON +SPOOL OFF + +SET TERMOUT ON +PROMPT Sampling... +SET TERMOUT OFF +@ostackprof_&ostackprof_spid..tmp + +SET TERMOUT ON FEEDBACK ON + +DEF _nothing="" -- a hack +PROMPT +PROMPT Below is the stack prefix common to all samples: +PROMPT ------------------------------------------------------------------------&_nothing +PROMPT Frame->function() +PROMPT ------------------------------------------------------------------------&_nothing + +-- Windows client +--HOST "cscript //nologo %SQLPATH%\stack_helper.vbs -strip < ostackprof_&ostackprof_spid..txt | sort | cscript //nologo %SQLPATH%\stack_helper.vbs -report | sort /r" + +-- Unix/Mac client +HOST $SQLPATH/stack_helper.py prefix < ostackprof_&ostackprof_spid..txt +PROMPT ----------------------------------------------------------------------&_nothing +PROMPT -- # Num additional function samples in call stack +PROMPT ----------------------------------------------------------------------&_nothing +HOST $SQLPATH/stack_helper.py details < ostackprof_&ostackprof_spid..txt | sort | uniq -c | sort -nbr + +HOST &_delete ostackprof_&ostackprof_spid..tmp ostackprof_&ostackprof_spid..txt diff --git a/tpt/ostackprofw.sql b/tpt/ostackprofw.sql new file mode 100644 index 0000000..1e90d89 --- /dev/null +++ b/tpt/ostackprofw.sql @@ -0,0 +1,92 @@ +------------------------------------------------------------------------------------- +-- +-- File name: oStackProf.sql ( Oradebug short_Stack Profiler ) +-- Purpose: Take target process stack samples and show an execution profile +-- +-- Author: Tanel Poder +-- Copyright: 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +-- +-- Usage: @ostackprof <#samples> +-- +-- @stackprof <148> <0> <100> + +-- - takes 100 stack samples of server process tied to SID 148 +-- with not waiting between samples +-- +-- @stackprof <148> <1> <60> + +-- - takes 60 stack samples of process tied to sid 148 with 1 +-- second interval +-- +-- Other: WARNING!!! This tool is experimental and not meant for use in +-- production environments. This is due oradebug short_stack +-- being somewhat unstable on some platforms and it has +-- event crashed target processes on Windows platforms (9.2) +-- +-- Use an OS stack sampler instead when need to diagnose +-- production issues (and test even those well in dev) +-- +-- +-- Note that this script uses a stack_helper.vbs VB script for post +-- processing oradebug short_stack output. Therefore you need to run +-- it on a Windows SQLPLUS client (the server can be on any platforms +-- as long as it supports oradebug short_stack - 10.2 on Solaris x64 +-- doesn't seem to support it though, but you have DTrace there anyway ;) +-- +------------------------------------------------------------------------------------- + +PROMPT +PROMPT -- oStackProf v1.01 - EXPERIMENTAL script by Tanel Poder ( http://www.tanelpoder.com ) +PROMPT +PROMPT WARNING! This script can crash the target process on Oracle 9.2 on Windows +PROMPT and maybe other versions/platforms as well. Test this script out thorouhgly +PROMPT in your dev environment first! +PAUSE Hit CTRL+C to cancel, ENTER to continue... + +SET TERMOUT OFF FEEDBACK OFF VERIFY OFF + +DEF ostackprof_sid=&1 +DEF ostackprof_interval=&2 +DEF ostackprof_samples=&3 + +COL spid NEW_VALUE ostackprof_spid +SELECT spid FROM v$process WHERE addr = (SELECT /*+ NO_UNNEST */ paddr FROM v$session WHERE sid = &1); +COL spid CLEAR + +ORADEBUG SETOSPID &ostackprof_spid + +SELECT + 'oradebug short_stack'|| + DECODE(TO_NUMBER(&ostackprof_interval), + 0, '', + chr(13)||chr(10)||'exec dbms_lock.sleep('||TO_CHAR(&ostackprof_interval)||')' + ) cmd +FROM + (select 1 from dual CONNECT BY level <= &ostackprof_samples) +. + +SPOOL ostackprof_&ostackprof_spid..tmp +SET HEADING OFF +PROMPT spool ostackprof_&ostackprof_spid..txt +/ +PROMPT spool off +SET HEADING ON +SPOOL OFF + +SET TERMOUT ON +PROMPT Sampling... +SET TERMOUT OFF +@ostackprof_&ostackprof_spid..tmp + +SET TERMOUT ON FEEDBACK ON + +DEF _nothing="" -- a hack +PROMPT +PROMPT Below is the stack prefix common to all samples: +PROMPT ------------------------------------------------------------------------&_nothing +PROMPT Frame->function() +PROMPT ------------------------------------------------------------------------&_nothing + +HOST "cscript //nologo %SQLPATH%\stack_helper.vbs -strip < ostackprof_&ostackprof_spid..txt | sort | cscript //nologo %SQLPATH%\stack_helper.vbs -report | sort /r" +HOST del ostackprof_&ostackprof_spid..tmp ostackprof_&ostackprof_spid..txt diff --git a/tpt/otherxml.sql b/tpt/otherxml.sql new file mode 100644 index 0000000..cf06e52 --- /dev/null +++ b/tpt/otherxml.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select +-- sql_id +-- , child_number +-- , plan_hash_value + xmltype(other_xml) +from + v$sql_plan +where + sql_id = '&1' +and child_number = TO_NUMBER('&2') +and other_xml is not null +/ + diff --git a/tpt/otherxmlhints.sql b/tpt/otherxmlhints.sql new file mode 100644 index 0000000..438faa5 --- /dev/null +++ b/tpt/otherxmlhints.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select +-- sql_id +-- , child_number +-- , plan_hash_value + substr(extractvalue(value(d), '/hint'), 1, 100) as outline_hints +from + xmltable('/*/outline_data/hint' + passing ( + select + xmltype(other_xml) as xmlval + from + v$sql_plan + where + sql_id = '&1' + and child_number like '&2' + and other_xml is not null + ) +) d +/ + +--select regexp_substr(other_xml,'') from v$sql_plan where sql_id = '&1' and child_number like '&2'; + +-- SELECT /*+ opt_param('parallel_execution_enabled', 'false') */ +-- SUBSTR(EXTRACTVALUE(VALUE(d), '/hint'), 1, 4000) hint +-- FROM +-- v$sql_plan p +-- , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(p.other_xml), '/*/outline_data/hint'))) d +-- where +-- sql_id = '&1' +-- and child_number like '&2' +-- / + diff --git a/tpt/ou.sql b/tpt/ou.sql new file mode 100644 index 0000000..a2fbf3b --- /dev/null +++ b/tpt/ou.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col o_owner heading OWNER for a25 +col o_object_name heading OBJECT_NAME for a30 +col o_object_type heading OBJECT_TYPE for a18 +col o_status heading STATUS for a9 + +prompt Listing Other Users objects where username matches %&1% and object matches %&2% + +select + owner o_owner, + object_name o_object_name, + object_type o_object_type, + created, + last_ddl_time, + status o_status +from + dba_objects +where + upper(owner) like upper('%&1%') +and upper(object_name) like upper('%&2%') +order by + o_object_name, + o_owner, + o_object_type +; + diff --git a/tpt/p.sql b/tpt/p.sql new file mode 100644 index 0000000..592a7d9 --- /dev/null +++ b/tpt/p.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col p_name head NAME for a40 +col p_value head VALUE for a40 +col p_descr head DESCRIPTION for a80 + +select n.ksppinm p_name, c.ksppstvl p_value +from sys.x$ksppi n, sys.x$ksppcv c +where n.indx=c.indx +and lower(n.ksppinm) like lower('%&1%'); diff --git a/tpt/paddr.sql b/tpt/paddr.sql new file mode 100644 index 0000000..4662278 --- /dev/null +++ b/tpt/paddr.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from v$process where addr = hextoraw(upper('&1')); diff --git a/tpt/partkeys.sql b/tpt/partkeys.sql new file mode 100644 index 0000000..e3a2c3f --- /dev/null +++ b/tpt/partkeys.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col partkeys_column_name head COLUMN_NAME for a30 +col partkeys_object_type HEAD OBJECT_TYPE FOR A11 +col partkeys_owner HEAD OWNER FOR A30 +col partkeys_name HEAD NAME FOR A30 +col partkeys_level HEAD LEVEL FOR A6 + +with sq as (select '1_TOP' lvl, c.* from dba_part_key_columns c union all select '2_SUB', c.* from dba_subpart_key_columns c) +select + object_type partkeys_object_type + , owner partkeys_owner + , name partkeys_name + , lvl partkeys_level + , column_name partkeys_column_name + , column_position +from + sq --dba_part_key_columns +where + upper(name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +ORDER BY + object_type + , owner + , name + , lvl + , column_position +/ + diff --git a/tpt/partmon.sql b/tpt/partmon.sql new file mode 100644 index 0000000..c461af0 --- /dev/null +++ b/tpt/partmon.sql @@ -0,0 +1,132 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- whenever sqlerror exit 1 rollback +-- whenever oserror exit 2 rollback + +set linesize 250 trimspool on serverout on size 1000000 feedback off verify off tab off + +declare + l long; + dmax date; + dbname varchar2(30); + hostname varchar2(255); + generate_droplist number(1,0):=0; + days number(10,0); +begin + + select name into dbname from v$database; + select host_name into hostname from v$instance; + + dbms_output.put_line(chr(0)); + dbms_output.put_line('- REPORT FOR DBNAME: '|| dbname ||' @ '|| hostname|| ' STARTED: ' || to_char(sysdate, 'YYYYMMDD HH24:MI:SS') ); + dbms_output.put_line(chr(0)); + + dbms_output.put_line('- BUFFER TIME: VALUES UP TO FOLLOWING DATES ALLOWED IN NEWEST PARTITIONS:'); + dbms_output.put_line('-----------------------------------------------------------------------------------------------'); + dbms_output.put_line(rpad('- PARTITION ', 65, ' ') ||'|'||' DAYS '||'| PARTITION HIGH VALUE'); + dbms_output.put_line('-----------------------------------------------------------------------------------------------'); + + for c in ( select p.table_owner, p.table_name, p.partition_name, p.high_value + from dba_tab_partitions p + where partition_position = ( + select max(partition_position) + from dba_tab_partitions + where table_name = p.table_name + and table_owner = p.table_owner + ) + and table_owner not in ('SYS','SYSTEM') + order by p.table_owner, p.table_name + ) + loop + execute immediate 'select '||c.high_value||' from dual' into dmax; + days:=trunc(dmax-sysdate); + + -- Print output, snap DATE out of long HIGH_VALUE string + + dbms_output.put_line(rpad(c.table_owner||'.'||c.table_name||':'||c.partition_name,65,' ') ||' '|| lpad(to_char(days),5,' ') ||' '|| + substr( c.high_value,instr(c.high_value,' ')+1, instr( substr(c.high_value,instr(c.high_value,' ')+1),''',')-1 ) ); + + if days > &1 then generate_droplist:=1; end if; + end loop; + + dbms_output.put_line(chr(0)); + dbms_output.put_line('- HISTORY: VALUES UP TO FOLLOWING DATES IN OLDEST PARTITIONS:'); + dbms_output.put_line('-----------------------------------------------------------------------------------------------'); + dbms_output.put_line(rpad('- PARTITION ', 65, ' ') ||'|'||' DAYS '||'| PARTITION HIGH VALUE'); + dbms_output.put_line('-----------------------------------------------------------------------------------------------'); + + for c in ( select p.table_owner, p.table_name, p.partition_name, p.high_value + from dba_tab_partitions p + where partition_position = ( + select min(partition_position) + from dba_tab_partitions + where table_name = p.table_name + and table_owner = p.table_owner + ) + and table_owner not in ('SYS','SYSTEM') + order by p.table_owner, p.table_name + ) + loop + execute immediate 'select '||c.high_value||' from dual' into dmax; + days:=trunc(sysdate-dmax); + + -- Print output, snap DATE out of long HIGH_VALUE string + + dbms_output.put_line(rpad(c.table_owner||'.'||c.table_name||':'||c.partition_name,65,' ') ||' '|| lpad(to_char(days),5,' ') ||' '|| + substr( c.high_value,instr(c.high_value,' ')+1, instr( substr(c.high_value,instr(c.high_value,' ')+1),''',')-1 ) ); + + if days > &1 then generate_droplist:=1; end if; + + end loop; + + if generate_droplist <> 0 then + dbms_output.put_line(chr(0)); + dbms_output.put_line('- SOME PARTITIONS ARE OLDER THAN '||&1||' DAYS - GENERATING DROP COMMANDS'); + dbms_output.put_line('-----------------------------------------------------------------------------------------------'); + dbms_output.put_line('- PARTITION DROP COMMANDS - REVIEW CAREFULLY'); + dbms_output.put_line('-----------------------------------------------------------------------------------------------'); + dbms_output.put_line(chr(0)); + + dbms_output.put_line('whenever sqlerror exit 1 rollback'); + dbms_output.put_line('whenever sqlerror exit 1 rollback'); + dbms_output.put_line('set echo on'); + dbms_output.put_line(chr(0)); + + for c in ( select p.table_owner, p.table_name, p.partition_name, p.high_value + from dba_tab_partitions p + where partition_position = ( + select min(partition_position) + from dba_tab_partitions + where table_name = p.table_name + and table_owner = p.table_owner + ) + and table_owner not in ('SYS','SYSTEM') + order by p.table_owner, p.table_name + ) + loop + execute immediate 'select '||c.high_value||' from dual' into dmax; + days:=trunc(sysdate-dmax); + + -- Print output, snap DATE out of long HIGH_VALUE string + if days > &1 then + -- dbms_output.put_line('prompt ALTER TABLE '|| c.table_owner||'.'||c.table_name||' DROP PARTITION '||c.partition_name||'; -- '||days||' DAYS OLD'); + dbms_output.put_line('ALTER TABLE '|| c.table_owner||'.'||c.table_name||' DROP PARTITION '||c.partition_name||';'); + end if; + + end loop; + + dbms_output.put_line(chr(0)); + dbms_output.put_line('exit'); + dbms_output.put_line(chr(0)); + + end if; + + dbms_output.put_line(chr(0)); + dbms_output.put_line('- REPORT FOR DBNAME: '|| dbname ||' @ '|| hostname|| ' COMPLETED: ' || to_char(sysdate, 'YYYYMMDD HH24:MI:SS') ); + dbms_output.put_line(chr(0)); + +end; +/ + +set feedback on \ No newline at end of file diff --git a/tpt/partpruning.sql b/tpt/partpruning.sql new file mode 100644 index 0000000..f2e7d83 --- /dev/null +++ b/tpt/partpruning.sql @@ -0,0 +1,36 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- create table kkpap_pruning ( +-- operation_id number +-- , it_type varchar(5) +-- CONSTRAINT check_it_type +-- CHECK (it_type in ('RANGE', 'ARRAY')) +-- , it_level varchar(15) +-- CONSTRAINT check_it_level +-- CHECK (it_level in ('PARTITION', 'SUBPARTITION', 'ABSOLUTE')) +-- , it_order varchar(10) +-- CONSTRAINT check_it_order +-- CHECK (it_order in ('ASCENDING', 'DESCENDING')) +-- , it_call_time varchar(10) +-- CONSTRAINT check_it_call_time +-- CHECK (it_call_time in ('COMPILE', 'START', 'RUN')) +-- , pnum number +-- , spnum number +-- , apnum number +-- ); + + +SELECT + OPERATION_ID + , IT_TYPE + , IT_LEVEL + , IT_ORDER + , IT_CALL_TIME + , PNUM + 1 real_partnum + , SPNUM + 1 subpartnum + , APNUM +FROM + kkpap_pruning +/ + diff --git a/tpt/pd.sql b/tpt/pd.sql new file mode 100644 index 0000000..f42f573 --- /dev/null +++ b/tpt/pd.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@pd2 "%&1%" \ No newline at end of file diff --git a/tpt/pd2.sql b/tpt/pd2.sql new file mode 100644 index 0000000..0d8429c --- /dev/null +++ b/tpt/pd2.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col pd_name head NAME for a56 +col pd_value head VALUE for a30 WRAP +column pd_descr heading DESCRIPTION format a99 word_wrap + +Prompt Show all parameters and session values from x$ksppi/x$ksppcv... + +select + n.indx + 1 num + , to_char(n.indx + 1, 'XXXX') n_hex + , n.ksppinm pd_name + , c.ksppstvl pd_value + , n.ksppdesc pd_descr +from sys.x$ksppi n, sys.x$ksppcv c +where n.indx=c.indx +and ( + lower(n.ksppinm) || ' ' || lower(n.ksppdesc) like lower('&1') +-- or lower(n.ksppdesc) like lower('&1') +); diff --git a/tpt/pdbs.sql b/tpt/pdbs.sql new file mode 100644 index 0000000..454bd99 --- /dev/null +++ b/tpt/pdbs.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM v$pdbs; diff --git a/tpt/pdv.sql b/tpt/pdv.sql new file mode 100644 index 0000000..7fbcfbf --- /dev/null +++ b/tpt/pdv.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col pd_name head NAME for a40 +col pd_value head VALUE for a30 +column pd_descr heading DESCRIPTION format a55 word_wrap + +select n.ksppinm pd_name, c.ksppstvl pd_value, n.ksppdesc pd_descr +from x$ksppi n, x$ksppcv c +where n.indx=c.indx +/* +and ( + lower(n.ksppinm) like lower('%&1%') + or lower(n.ksppdesc) like lower('%&1%') +) +*/ +and lower(to_char(c.ksppstvl)) like lower('&1'); + + diff --git a/tpt/peek.sql b/tpt/peek.sql new file mode 100644 index 0000000..c4277db --- /dev/null +++ b/tpt/peek.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--prompt ---> oradebug peek 0x&1 64 +oradebug peek 0x&1 64 \ No newline at end of file diff --git a/tpt/peekloop.sql b/tpt/peekloop.sql new file mode 100644 index 0000000..158dcf1 --- /dev/null +++ b/tpt/peekloop.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--prompt ---> oradebug peek 0x&1 64 +oradebug peek 0x&1 64 +oradebug peek 0x&1 64 +oradebug peek 0x&1 64 +oradebug peek 0x&1 64 +oradebug peek 0x&1 64 +oradebug peek 0x&1 64 +oradebug peek 0x&1 64 +oradebug peek 0x&1 64 +oradebug peek 0x&1 64 +oradebug peek 0x&1 64 diff --git a/tpt/pga.sql b/tpt/pga.sql new file mode 100644 index 0000000..7419ed6 --- /dev/null +++ b/tpt/pga.sql @@ -0,0 +1,14 @@ +-- Copyright 2019 Tanel Poder. All rights reserved. More info at https://blog.tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. + +PROMPT Show PGA manager stats from V$PGASTAT + +SELECT + name + , CASE WHEN unit = 'bytes' THEN ROUND(value/1048576) ELSE value END value + , CASE WHEN unit = 'bytes' THEN 'megabytes' ELSE unit END unit + -- , value + -- , unit +FROM v$pgastat +/ + diff --git a/tpt/pgav.sql b/tpt/pgav.sql new file mode 100644 index 0000000..4fd0329 --- /dev/null +++ b/tpt/pgav.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@dumpvar pga &1 \ No newline at end of file diff --git a/tpt/pinfo.sql b/tpt/pinfo.sql new file mode 100644 index 0000000..965c1f4 --- /dev/null +++ b/tpt/pinfo.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sinfo_username FOR A30 HEAD USERNAME + +SELECT sid, username sinfo_username, program, service_name, module, action, client_identifier, client_info, ecid, machine, port +FROM v$session WHERE paddr IN (SELECT addr FROM v$process WHERE spid IN (&1)); + diff --git a/tpt/pmem.sql b/tpt/pmem.sql new file mode 100644 index 0000000..c231406 --- /dev/null +++ b/tpt/pmem.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: smem.sql +-- Purpose: Show process memory usage breakdown - lookup by process SPID +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @pmem +-- +-- Other: Uses v$process_memory which is available from Oracle 10g onwards +-- +-------------------------------------------------------------------------------- +PROMPT Display process memory usage for SPID &1.... +SELECT + s.sid,p.spid,pm.* +FROM + v$session s + , v$process p + , v$process_memory pm +WHERE + s.paddr = p.addr +AND p.pid = pm.pid +AND p.spid IN (&1) +ORDER BY + sid + , category +/ diff --git a/tpt/pmem_detail.sql b/tpt/pmem_detail.sql new file mode 100644 index 0000000..8b5a4e2 --- /dev/null +++ b/tpt/pmem_detail.sql @@ -0,0 +1,76 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: pmem_detail.sql (EXPERIMENTAL!) +-- Purpose: Show process memory usage breakdown details - lookup by process SPID +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @pmem_detail +-- +-- +-- Other: Uses v$process_memory_detail which is available from Oracle 10g +-- Also, this view is populated with help of an ORADEBUG command +-- so you must run this script with SYSDBA privileges. +-- +-- PROOFREAD AND TEST THIS IN A TEST ENVIRONMENT FIRST! +-- +-------------------------------------------------------------------------------- + +-- identify target session's process +SET TERMOUT OFF +COL pid NEW_VALUE get_pid +SELECT pid FROM v$process WHERE spid = TRIM(&1); +COL pid CLEAR +SET TERMOUT ON + +PROMPT +PROMPT WARNING! About to run an undocumented ORADEBUG command +PROMPT for getting heap details. +PROMPT This script is EXPERIMENTAL, use this at your own risk! +PROMPT +PROMPT Press ENTER to continue, or CTRL+C to cancel +PAUSE + +-- send message to target for memory detail array population +SET TERMOUT OFF +ORADEBUG SETMYPID +ORADEBUG DUMP PGA_DETAIL_GET &get_pid +SET TERMOUT ON + +EXEC DBMS_LOCK.SLEEP(1) + +SELECT status FROM v$process_memory_detail_prog WHERE pid = &get_pid; + +PROMPT If the status above is not COMPLETE then you need to wait +PROMPT for the target process to do some work and re-run the +PROMPT v$process_memory_detail query in this script manually +PROMPT (or just take a heapdump level 29 to get heap breakdown +PROMPT in a tracefile) + +-- +SELECT + s.sid + ,pmd.category + ,pmd.name + ,pmd.heap_name + ,pmd.bytes + ,pmd.allocation_count +-- ,pmd.heap_descriptor +-- ,pmd.parent_heap_descriptor +FROM + v$session s + , v$process p + , v$process_memory_detail pmd +WHERE + s.paddr = p.addr +AND p.pid = pmd.pid +AND p.spid IN (&1) +ORDER BY + sid + , spid + , bytes DESC +/ diff --git a/tpt/pn.sql b/tpt/pn.sql new file mode 100644 index 0000000..1b89324 --- /dev/null +++ b/tpt/pn.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col pd_name head NAME for a54 +col pd_value head VALUE for a30 +column pd_descr heading DESCRIPTION format a70 word_wrap + +Prompt Show all parameters and session values from x$ksppi/x$ksppcv... + +select + n.indx + 1 num + , to_char(n.indx + 1, 'XXXX') n_hex + , n.ksppinm pd_name + , c.ksppstvl pd_value + , n.ksppdesc pd_descr +from sys.x$ksppi n, sys.x$ksppcv c +where n.indx=c.indx +and ( +-- lower(n.ksppinm) || ' ' || lower(n.ksppdesc) like lower('&1') +-- or lower(n.ksppdesc) like lower('&1') + n.indx + 1 in (&1) +); diff --git a/tpt/ppx/avg_order_item_price.sql b/tpt/ppx/avg_order_item_price.sql new file mode 100644 index 0000000..55a14ff --- /dev/null +++ b/tpt/ppx/avg_order_item_price.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT /*+ MONITOR NO_PARALLEL */ + c.customer_id + , c.cust_first_name + , c.cust_last_name + , c.credit_limit + , o.order_mode + , avg(oi.unit_price) +FROM + soe.customers c + , soe.orders o + , soe.order_items oi +WHERE +-- join + c.customer_id = o.customer_id +AND o.order_id = oi.order_id +-- filter +AND o.order_mode = 'direct' +GROUP BY + c.customer_id + , c.cust_first_name + , c.cust_last_name + , c.credit_limit + , o.order_mode +HAVING + sum(oi.unit_price) > c.credit_limit * 100 +/ + diff --git a/tpt/ppx/part_access_path.sql b/tpt/ppx/part_access_path.sql new file mode 100644 index 0000000..0128ae3 --- /dev/null +++ b/tpt/ppx/part_access_path.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DROP TABLE t; + +CREATE TABLE t (a int, b varchar2(100)) +PARTITION BY RANGE (a) ( + PARTITION p1 VALUES LESS THAN (10) + ,PARTITION p2 VALUES LESS THAN (20) +) +/ + +INSERT INTO t SELECT 5, 'axxxxxxxxxxxxxxxxx' FROM dual; +INSERT INTO t SELECT 5, 'bxxxxxxxxxxxxxxxxx' FROM dual; +INSERT INTO t SELECT 5, 'cxxxxxxxxxxxxxxxxx' FROM dual; + +INSERT INTO t SELECT 15, 'axxxxxxxxxxxxxxxxx' FROM dual; +INSERT INTO t SELECT 15, 'bxxxxxxxxxxxxxxxxx' FROM dual; +INSERT INTO t SELECT 15, 'cxxxxxxxxxxxxxxxxx' FROM dual CONNECT BY LEVEL <= 10000; + +CREATE INDEX i1 ON t(a) LOCAL; +CREATE INDEX i2 ON t(b) LOCAL; + +@gts t + diff --git a/tpt/ppx/ppx_setup.sql b/tpt/ppx/ppx_setup.sql new file mode 100644 index 0000000..bbf6207 --- /dev/null +++ b/tpt/ppx/ppx_setup.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DEF ppxuser=SOE +DEF oeuser=SOE +DEF ppxtablespace=SOE + +PROMPT Creating 3 partitioned tables in &ppxuser schema... + +-- Create clone tables +@range_part +@range_hash_subpart +@range_id_part + diff --git a/tpt/ppx/range_hash_subpart.sql b/tpt/ppx/range_hash_subpart.sql new file mode 100644 index 0000000..2546fb0 --- /dev/null +++ b/tpt/ppx/range_hash_subpart.sql @@ -0,0 +1,55 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE TABLE &ppxuser..orders_range_hash ( + order_id NUMBER(12) NOT NULL + , order_date TIMESTAMP(6) NOT NULL + , order_mode VARCHAR2(8) + , customer_id NUMBER(12) NOT NULL + , order_status NUMBER(2) + , order_total NUMBER(8,2) + , sales_rep_id NUMBER(6) + , promotion_id NUMBER(6) + , warehouse_id NUMBER(6) + , delivery_type VARCHAR2(15) + , cost_of_delivery NUMBER(6) + , wait_till_all_available VARCHAR2(15) + , delivery_address_id NUMBER(12) + , customer_class VARCHAR2(30) + , card_id NUMBER(12) + , invoice_address_id NUMBER(12) +) +PARTITION BY RANGE (order_date) +SUBPARTITION BY HASH (customer_id) +SUBPARTITION TEMPLATE( + SUBPARTITION sp1 TABLESPACE &ppxtablespace, + SUBPARTITION sp2 TABLESPACE &ppxtablespace, + SUBPARTITION sp3 TABLESPACE &ppxtablespace, + SUBPARTITION sp4 TABLESPACE &ppxtablespace) +( + PARTITION Y2007_07 VALUES LESS THAN (DATE'2007-08-01') + , PARTITION Y2007_08 VALUES LESS THAN (DATE'2007-09-01') + , PARTITION Y2007_09 VALUES LESS THAN (DATE'2007-10-01') + , PARTITION Y2007_10 VALUES LESS THAN (DATE'2007-11-01') + , PARTITION Y2007_11 VALUES LESS THAN (DATE'2007-12-01') + , PARTITION Y2007_12 VALUES LESS THAN (DATE'2008-01-01') + , PARTITION Y2008_01 VALUES LESS THAN (DATE'2008-02-01') + , PARTITION Y2008_02 VALUES LESS THAN (DATE'2008-03-01') + , PARTITION Y2008_03 VALUES LESS THAN (DATE'2008-04-01') + , PARTITION Y2008_04 VALUES LESS THAN (DATE'2008-05-01') + , PARTITION Y2008_05 VALUES LESS THAN (DATE'2008-06-01') + , PARTITION Y2008_06 VALUES LESS THAN (DATE'2008-07-01') + , PARTITION Y2008_07 VALUES LESS THAN (DATE'2008-08-01') + , PARTITION Y2008_08 VALUES LESS THAN (MAXVALUE) +) +COMPRESS +/ + +INSERT /*+ APPEND */ INTO &ppxuser..orders_range_hash +SELECT * FROM &oeuser..orders +/ + +COMMIT; + +EXEC DBMS_STATS.GATHER_TABLE_STATS('&ppxuser', 'ORDERS_RANGE_HASH'); + diff --git a/tpt/ppx/range_hash_subpart_16.sql b/tpt/ppx/range_hash_subpart_16.sql new file mode 100644 index 0000000..767a341 --- /dev/null +++ b/tpt/ppx/range_hash_subpart_16.sql @@ -0,0 +1,67 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE TABLE &ppxuser..orders_range_hash_16 ( + order_id NUMBER(12) NOT NULL + , order_date TIMESTAMP(6) NOT NULL + , order_mode VARCHAR2(8) + , customer_id NUMBER(12) NOT NULL + , order_status NUMBER(2) + , order_total NUMBER(8,2) + , sales_rep_id NUMBER(6) + , promotion_id NUMBER(6) + , warehouse_id NUMBER(6) + , delivery_type VARCHAR2(15) + , cost_of_delivery NUMBER(6) + , wait_till_all_available VARCHAR2(15) + , delivery_address_id NUMBER(12) + , customer_class VARCHAR2(30) + , card_id NUMBER(12) + , invoice_address_id NUMBER(12) +) +PARTITION BY RANGE (order_date) +SUBPARTITION BY HASH (customer_id) +SUBPARTITION TEMPLATE( + SUBPARTITION sp01 TABLESPACE &ppxtablespace, + SUBPARTITION sp02 TABLESPACE &ppxtablespace, + SUBPARTITION sp03 TABLESPACE &ppxtablespace, + SUBPARTITION sp04 TABLESPACE &ppxtablespace, + SUBPARTITION sp05 TABLESPACE &ppxtablespace, + SUBPARTITION sp06 TABLESPACE &ppxtablespace, + SUBPARTITION sp07 TABLESPACE &ppxtablespace, + SUBPARTITION sp08 TABLESPACE &ppxtablespace, + SUBPARTITION sp09 TABLESPACE &ppxtablespace, + SUBPARTITION sp10 TABLESPACE &ppxtablespace, + SUBPARTITION sp11 TABLESPACE &ppxtablespace, + SUBPARTITION sp12 TABLESPACE &ppxtablespace, + SUBPARTITION sp13 TABLESPACE &ppxtablespace, + SUBPARTITION sp14 TABLESPACE &ppxtablespace, + SUBPARTITION sp15 TABLESPACE &ppxtablespace, + SUBPARTITION sp16 TABLESPACE &ppxtablespace) +( + PARTITION Y2007_07 VALUES LESS THAN (DATE'2007-08-01') + , PARTITION Y2007_08 VALUES LESS THAN (DATE'2007-09-01') + , PARTITION Y2007_09 VALUES LESS THAN (DATE'2007-10-01') + , PARTITION Y2007_10 VALUES LESS THAN (DATE'2007-11-01') + , PARTITION Y2007_11 VALUES LESS THAN (DATE'2007-12-01') + , PARTITION Y2007_12 VALUES LESS THAN (DATE'2008-01-01') + , PARTITION Y2008_01 VALUES LESS THAN (DATE'2008-02-01') + , PARTITION Y2008_02 VALUES LESS THAN (DATE'2008-03-01') + , PARTITION Y2008_03 VALUES LESS THAN (DATE'2008-04-01') + , PARTITION Y2008_04 VALUES LESS THAN (DATE'2008-05-01') + , PARTITION Y2008_05 VALUES LESS THAN (DATE'2008-06-01') + , PARTITION Y2008_06 VALUES LESS THAN (DATE'2008-07-01') + , PARTITION Y2008_07 VALUES LESS THAN (DATE'2008-08-01') + , PARTITION Y2008_08 VALUES LESS THAN (MAXVALUE) +) +COMPRESS +/ + +INSERT /*+ APPEND */ INTO &ppxuser..orders_range_hash_16 +SELECT * FROM &oeuser..orders_range_hash +/ + +COMMIT; + +EXEC DBMS_STATS.GATHER_TABLE_STATS('&ppxuser', 'ORDERS_RANGE_HASH_16'); + diff --git a/tpt/ppx/range_hash_subpart_17.sql b/tpt/ppx/range_hash_subpart_17.sql new file mode 100644 index 0000000..6d35ca9 --- /dev/null +++ b/tpt/ppx/range_hash_subpart_17.sql @@ -0,0 +1,68 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE TABLE &ppxuser..orders_range_hash_17 ( + order_id NUMBER(12) NOT NULL + , order_date TIMESTAMP(6) NOT NULL + , order_mode VARCHAR2(8) + , customer_id NUMBER(12) NOT NULL + , order_status NUMBER(2) + , order_total NUMBER(8,2) + , sales_rep_id NUMBER(6) + , promotion_id NUMBER(6) + , warehouse_id NUMBER(6) + , delivery_type VARCHAR2(15) + , cost_of_delivery NUMBER(6) + , wait_till_all_available VARCHAR2(15) + , delivery_address_id NUMBER(12) + , customer_class VARCHAR2(30) + , card_id NUMBER(12) + , invoice_address_id NUMBER(12) +) +PARTITION BY RANGE (order_date) +SUBPARTITION BY HASH (customer_id) +SUBPARTITION TEMPLATE( + SUBPARTITION sp01 TABLESPACE &ppxtablespace, + SUBPARTITION sp02 TABLESPACE &ppxtablespace, + SUBPARTITION sp03 TABLESPACE &ppxtablespace, + SUBPARTITION sp04 TABLESPACE &ppxtablespace, + SUBPARTITION sp05 TABLESPACE &ppxtablespace, + SUBPARTITION sp06 TABLESPACE &ppxtablespace, + SUBPARTITION sp07 TABLESPACE &ppxtablespace, + SUBPARTITION sp08 TABLESPACE &ppxtablespace, + SUBPARTITION sp09 TABLESPACE &ppxtablespace, + SUBPARTITION sp10 TABLESPACE &ppxtablespace, + SUBPARTITION sp11 TABLESPACE &ppxtablespace, + SUBPARTITION sp12 TABLESPACE &ppxtablespace, + SUBPARTITION sp13 TABLESPACE &ppxtablespace, + SUBPARTITION sp14 TABLESPACE &ppxtablespace, + SUBPARTITION sp15 TABLESPACE &ppxtablespace, + SUBPARTITION sp16 TABLESPACE &ppxtablespace, + SUBPARTITION sp17 TABLESPACE &ppxtablespace) +( + PARTITION Y2007_07 VALUES LESS THAN (DATE'2007-08-01') + , PARTITION Y2007_08 VALUES LESS THAN (DATE'2007-09-01') + , PARTITION Y2007_09 VALUES LESS THAN (DATE'2007-10-01') + , PARTITION Y2007_10 VALUES LESS THAN (DATE'2007-11-01') + , PARTITION Y2007_11 VALUES LESS THAN (DATE'2007-12-01') + , PARTITION Y2007_12 VALUES LESS THAN (DATE'2008-01-01') + , PARTITION Y2008_01 VALUES LESS THAN (DATE'2008-02-01') + , PARTITION Y2008_02 VALUES LESS THAN (DATE'2008-03-01') + , PARTITION Y2008_03 VALUES LESS THAN (DATE'2008-04-01') + , PARTITION Y2008_04 VALUES LESS THAN (DATE'2008-05-01') + , PARTITION Y2008_05 VALUES LESS THAN (DATE'2008-06-01') + , PARTITION Y2008_06 VALUES LESS THAN (DATE'2008-07-01') + , PARTITION Y2008_07 VALUES LESS THAN (DATE'2008-08-01') + , PARTITION Y2008_08 VALUES LESS THAN (MAXVALUE) +) +COMPRESS +/ + +INSERT /*+ APPEND */ INTO &ppxuser..orders_range_hash_17 +SELECT * FROM &oeuser..orders_range_hash +/ + +COMMIT; + +EXEC DBMS_STATS.GATHER_TABLE_STATS('&ppxuser', 'ORDERS_RANGE_HASH_17'); + diff --git a/tpt/ppx/range_id_part.sql b/tpt/ppx/range_id_part.sql new file mode 100644 index 0000000..79ce0ad --- /dev/null +++ b/tpt/ppx/range_id_part.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE TABLE &PPXUSER..orders_id_range ( + order_id NUMBER(12) NOT NULL + , order_date TIMESTAMP(6) NOT NULL + , order_mode VARCHAR2(8) + , customer_id NUMBER(12) NOT NULL + , order_status NUMBER(2) + , order_total NUMBER(8,2) + , sales_rep_id NUMBER(6) + , promotion_id NUMBER(6) + , warehouse_id NUMBER(6) + , delivery_type VARCHAR2(15) + , cost_of_delivery NUMBER(6) + , wait_till_all_available VARCHAR2(15) + , delivery_address_id NUMBER(12) + , customer_class VARCHAR2(30) + , card_id NUMBER(12) + , invoice_address_id NUMBER(12) +) +PARTITION BY RANGE (order_id) ( + PARTITION id_00m VALUES LESS THAN (1000000) + , PARTITION id_01m VALUES LESS THAN (2000000) + , PARTITION id_02m VALUES LESS THAN (3000000) + , PARTITION id_03m VALUES LESS THAN (4000000) + , PARTITION id_04m VALUES LESS THAN (5000000) + , PARTITION id_05m VALUES LESS THAN (6000000) + , PARTITION id_06m VALUES LESS THAN (7000000) + , PARTITION id_07m VALUES LESS THAN (8000000) + , PARTITION id_08m VALUES LESS THAN (9000000) + , PARTITION id_09m VALUES LESS THAN (MAXVALUE) +) +TABLESPACE &ppxtablespace +COMPRESS +/ + +INSERT /*+ APPEND */ INTO &PPXUSER..orders_id_range SELECT * FROM &OEUSER..orders +/ + +COMMIT; + diff --git a/tpt/ppx/range_part.sql b/tpt/ppx/range_part.sql new file mode 100644 index 0000000..24034a0 --- /dev/null +++ b/tpt/ppx/range_part.sql @@ -0,0 +1,48 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE TABLE &ppxuser..orders_range ( + order_id NUMBER(12) NOT NULL + , order_date TIMESTAMP(6) NOT NULL + , order_mode VARCHAR2(8) + , customer_id NUMBER(12) NOT NULL + , order_status NUMBER(2) + , order_total NUMBER(8,2) + , sales_rep_id NUMBER(6) + , promotion_id NUMBER(6) + , warehouse_id NUMBER(6) + , delivery_type VARCHAR2(15) + , cost_of_delivery NUMBER(6) + , wait_till_all_available VARCHAR2(15) + , delivery_address_id NUMBER(12) + , customer_class VARCHAR2(30) + , card_id NUMBER(12) + , invoice_address_id NUMBER(12) +) +PARTITION BY RANGE (order_date) ( + PARTITION Y2007_07 VALUES LESS THAN (DATE'2007-08-01') + , PARTITION Y2007_08 VALUES LESS THAN (DATE'2007-09-01') + , PARTITION Y2007_09 VALUES LESS THAN (DATE'2007-10-01') + , PARTITION Y2007_10 VALUES LESS THAN (DATE'2007-11-01') + , PARTITION Y2007_11 VALUES LESS THAN (DATE'2007-12-01') + , PARTITION Y2007_12 VALUES LESS THAN (DATE'2008-01-01') + , PARTITION Y2008_01 VALUES LESS THAN (DATE'2008-02-01') + , PARTITION Y2008_02 VALUES LESS THAN (DATE'2008-03-01') + , PARTITION Y2008_03 VALUES LESS THAN (DATE'2008-04-01') + , PARTITION Y2008_04 VALUES LESS THAN (DATE'2008-05-01') + , PARTITION Y2008_05 VALUES LESS THAN (DATE'2008-06-01') + , PARTITION Y2008_06 VALUES LESS THAN (DATE'2008-07-01') + , PARTITION Y2008_07 VALUES LESS THAN (DATE'2008-08-01') + , PARTITION Y2008_08 VALUES LESS THAN (MAXVALUE) +) +COMPRESS +/ + +INSERT /*+ APPEND */ INTO &ppxuser..orders_range +SELECT * FROM &oeuser..orders +/ + +COMMIT; + +EXEC DBMS_STATS.GATHER_TABLE_STATS('&ppxuser', 'ORDERS_RANGE'); + diff --git a/tpt/pr.sql b/tpt/pr.sql new file mode 100644 index 0000000..bb2e012 --- /dev/null +++ b/tpt/pr.sql @@ -0,0 +1,51 @@ +. +-- Notes: This script is based on Tom Kyte's original printtbl code ( http://asktom.oracle.com ) +-- For coding simplicity (read: lazyness) I'm using custom quotation marks ( q'\ ) so +-- this script works only from Oracle 10gR2 onwards + +def _pr_tmpfile=&_tpt_tempdir/pr_&_tpt_tempfile..tmp + +@@saveset +set serverout on size 1000000 termout off +save &_pr_tmpfile replace +set termout on + +0 c clob := q'\ +0 declare + +999999 \';; +999999 l_theCursor integer default dbms_sql.open_cursor;; +999999 l_columnValue varchar2(4000);; +999999 l_status integer;; +999999 l_descTbl dbms_sql.desc_tab;; +999999 l_colCnt number;; +999999 begin +999999 dbms_sql.parse( l_theCursor, c, dbms_sql.native );; +999999 dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl );; +999999 for i in 1 .. l_colCnt loop +999999 dbms_sql.define_column( l_theCursor, i, +999999 l_columnValue, 4000 );; +999999 end loop;; +999999 l_status := dbms_sql.execute(l_theCursor);; +999999 while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop +999999 dbms_output.put_line( '==============================' );; +999999 for i in 1 .. l_colCnt loop +999999 dbms_sql.column_value( l_theCursor, i, +999999 l_columnValue );; +999999 dbms_output.put_line +999999 ( rpad( l_descTbl(i).col_name, +999999 30 ) || ': ' || l_columnValue );; +999999 end loop;; +999999 end loop;; +999999 exception +999999 when others then +999999 dbms_output.put_line(dbms_utility.format_error_backtrace);; +999999 raise;; +999999 end;; +/ + +@@loadset + +get &_pr_tmpfile nolist +host &_delete &_pr_tmpfile + diff --git a/tpt/prc.sql b/tpt/prc.sql new file mode 100644 index 0000000..15ee326 --- /dev/null +++ b/tpt/prc.sql @@ -0,0 +1,54 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@saveset +set serverout on size 1000000 + +-- This is modified Tom Kyte's printtab code ( http://asktom.oracle.com ) + +declare + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_descTbl dbms_sql.desc_tab; + l_colCnt number; + procedure execute_immediate( p_sql in varchar2 ) + is + BEGIN + dbms_sql.parse(l_theCursor,p_sql,dbms_sql.native); + l_status := dbms_sql.execute(l_theCursor); + END; +begin + execute_immediate( 'alter session set nls_date_format= + ''dd-mon-yyyy hh24:mi:ss'' '); + dbms_sql.parse( l_theCursor, + replace( :printtab2_cursor, '"', ''''), + dbms_sql.native ); + dbms_sql.describe_columns( l_theCursor, + l_colCnt, l_descTbl ); + for i in 1 .. l_colCnt loop + dbms_sql.define_column( l_theCursor, i, + l_columnValue, 4000 ); + end loop; + l_status := dbms_sql.execute(l_theCursor); + while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop + for i in 1 .. l_colCnt loop + dbms_sql.column_value( l_theCursor, i, + l_columnValue ); + dbms_output.put_line + ( rpad( l_descTbl(i).col_name, + 30 ) || ': ' || l_columnValue ); + end loop; + dbms_output.put_line( '-----------------' ); + end loop; + execute_immediate( 'alter session set nls_date_format= + ''dd-MON-yy'' '); +exception + when others then + execute_immediate( 'alter session set + nls_date_format=''dd-MON-yy'' '); + raise; +end; +/ + +@@loadset diff --git a/tpt/prefetch.sql b/tpt/prefetch.sql new file mode 100644 index 0000000..22a7b22 --- /dev/null +++ b/tpt/prefetch.sql @@ -0,0 +1,38 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: prefetch.sql +-- Purpose: Show KCB layer prefetch +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: +-- +-- +-- Other: +-- +-- +-- +-------------------------------------------------------------------------------- +col "BLOCKS/OP" for 999.9 + +select + p.id + , p.name + , p.block_size + , pf.timestamp + , pf.prefetch_ops ops + , pf.prefetch_blocks blocks + , pf.prefetch_blocks / pf.prefetch_ops "BLOCKS/OP" +from + X$KCBKPFS pf + , v$buffer_pool p +where + pf.BUFFER_POOL_ID = p.id +and pf.prefetch_ops > 0 +order by + pf.timestamp +/ diff --git a/tpt/printtab2.sql b/tpt/printtab2.sql new file mode 100644 index 0000000..18f5e01 --- /dev/null +++ b/tpt/printtab2.sql @@ -0,0 +1,56 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT printtab2.sql: There seems to be an issue on Oracle 12c+ + +@@saveset +set serverout on size 1000000 + +-- This is modified Tom Kyte's printtab code ( http://asktom.oracle.com ) + +declare + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_descTbl dbms_sql.desc_tab; + l_colCnt number; + procedure execute_immediate( p_sql in varchar2 ) + is + BEGIN + dbms_sql.parse(l_theCursor,p_sql,dbms_sql.native); + l_status := dbms_sql.execute(l_theCursor); + END; +begin + execute_immediate( 'alter session set nls_date_format= + ''dd-mon-yyyy hh24:mi:ss'' '); + dbms_sql.parse( l_theCursor, + replace( :printtab2_cursor, '"', ''''), + dbms_sql.native ); + dbms_sql.describe_columns( l_theCursor, + l_colCnt, l_descTbl ); + for i in 1 .. l_colCnt loop + dbms_sql.define_column( l_theCursor, i, + l_columnValue, 4000 ); + end loop; + l_status := dbms_sql.execute(l_theCursor); + while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop + for i in 1 .. l_colCnt loop + dbms_sql.column_value( l_theCursor, i, + l_columnValue ); + dbms_output.put_line + ( rpad( l_descTbl(i).col_name, + 30 ) || ': ' || substr(l_columnValue,1,220)||CASE WHEN LENGTH(l_columnValue) > 220 THEN '...' ELSE '' END ); + end loop; + dbms_output.put_line( '-----------------' ); + end loop; + execute_immediate( 'alter session set nls_date_format= + ''dd-MON-yy'' '); +exception + when others then + execute_immediate( 'alter session set + nls_date_format=''dd-MON-yy'' '); + raise; +end; +/ + +@@loadset diff --git a/tpt/privgrants.sql b/tpt/privgrants.sql new file mode 100644 index 0000000..8a5253c --- /dev/null +++ b/tpt/privgrants.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set head off feedback off +select 'grant '||granted_role||' to '||grantee||decode(admin_option, 'YES', ' WITH ADMIN OPTION;',';') cmd from dba_role_privs where upper(grantee) like upper('%&1%'); +select 'grant '||privilege||' to '||grantee||decode(admin_option, 'YES', ' WITH ADMIN OPTION;',';') cmd from dba_sys_privs where upper(grantee) like upper('%&1%'); +select 'grant '||privilege||' on '||owner||'.'||table_name||' to '||grantee||decode(grantable, 'YES', ' WITH GRANT OPTION;',';') cmd from dba_tab_privs where upper(grantee) like upper('%&1%'); +set head on feedback on diff --git a/tpt/privgrants2.sql b/tpt/privgrants2.sql new file mode 100644 index 0000000..1ab70af --- /dev/null +++ b/tpt/privgrants2.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set head off feedback on +select 'grant '||granted_role||' to '||grantee||decode(admin_option, 'YES', ' WITH ADMIN OPTION;',';') cmd from dba_role_privs where upper(grantee) like upper('&1'); +select 'grant '||privilege||' to '||grantee||decode(admin_option, 'YES', ' WITH ADMIN OPTION;',';') cmd from dba_sys_privs where upper(grantee) like upper('&1'); +select 'grant '||privilege||' on '||owner||'.'||table_name||' to '||grantee||decode(grantable, 'YES', ' WITH GRANT OPTION;',';') cmd from dba_tab_privs where upper(grantee) like upper('&1'); +set head on feedback on diff --git a/tpt/privs.sql b/tpt/privs.sql new file mode 100644 index 0000000..8fcde5b --- /dev/null +++ b/tpt/privs.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@privs2 '%&1%' diff --git a/tpt/privs2.sql b/tpt/privs2.sql new file mode 100644 index 0000000..a30acfd --- /dev/null +++ b/tpt/privs2.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col grantee for a25 +col owner for a25 +col table_name for a30 + +select grantee, granted_role, admin_option, default_role from dba_role_privs where upper(grantee) like upper('&1'); + +select grantee, privilege, admin_option from dba_sys_privs where upper(grantee) like upper('&1'); + +select grantee, owner, table_name, privilege from dba_tab_privs where upper(grantee) like upper('&1'); diff --git a/tpt/proc.sql b/tpt/proc.sql new file mode 100644 index 0000000..592203c --- /dev/null +++ b/tpt/proc.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col proc_owner head OWNER for a25 +col proc_object_name head OBJECT_NAME for a30 +col proc_procedure_name head PROCEDURE_NAME for a30 + +select + owner proc_owner + , object_name proc_object_name + , procedure_name proc_procedure_name +-- , subprogram_id +from + dba_procedures +where + lower(object_name) like lower('%&1%') +and lower(procedure_name) like lower('%&2%') +/ diff --git a/tpt/procid.sql b/tpt/procid.sql new file mode 100644 index 0000000..ceb4cb6 --- /dev/null +++ b/tpt/procid.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col proc_owner head OWNER for a25 +col proc_object_name head OBJECT_NAME for a30 +col proc_procedure_name head PROCEDURE_NAME for a30 + +select + owner proc_owner, + object_name proc_object_name, + procedure_name proc_procedure_name, + subprogram_id +from + dba_procedures +where + object_id like '&1' +and subprogram_id like '&2' +order by + owner, + object_name, + procedure_name +/ + diff --git a/tpt/prq.sql b/tpt/prq.sql new file mode 100644 index 0000000..787cb48 --- /dev/null +++ b/tpt/prq.sql @@ -0,0 +1,55 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@saveset +set serverout on size 1000000 + +-- Tom Kyte's printtbl code ( http://asktom.oracle.com ) + +declare + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_descTbl dbms_sql.desc_tab; + l_colCnt number; + procedure execute_immediate( p_sql in varchar2 ) + is + BEGIN + dbms_sql.parse(l_theCursor,p_sql,dbms_sql.native); + l_status := dbms_sql.execute(l_theCursor); + END; +begin + + execute_immediate( 'alter session set nls_date_format= + ''dd-mon-yyyy hh24:mi:ss'' '); + dbms_sql.parse( l_theCursor, + replace( '&1', '"', ''''), + dbms_sql.native ); + dbms_sql.describe_columns( l_theCursor, + l_colCnt, l_descTbl ); + for i in 1 .. l_colCnt loop + dbms_sql.define_column( l_theCursor, i, + l_columnValue, 4000 ); + end loop; + l_status := dbms_sql.execute(l_theCursor); + while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop + for i in 1 .. l_colCnt loop + dbms_sql.column_value( l_theCursor, i, + l_columnValue ); + dbms_output.put_line + ( rpad( l_descTbl(i).col_name, + 30 ) || ': ' || l_columnValue ); + end loop; + dbms_output.put_line( '-----------------' ); + end loop; + execute_immediate( 'alter session set nls_date_format= + ''dd-MON-yy'' '); +exception + when others then + execute_immediate( 'alter session set + nls_date_format=''dd-MON-yy'' '); + raise; +end; +/ + +@@loadset diff --git a/tpt/prr.sql b/tpt/prr.sql new file mode 100644 index 0000000..bd33a24 --- /dev/null +++ b/tpt/prr.sql @@ -0,0 +1,52 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Notes: This script is based on Tom Kyte's original printtbl code ( http://asktom.oracle.com ) +-- For coding simplicity I'm using custom quotation marks ( q'\ ) so this script works +-- from Oracle 10gR2 onwards + +@@saveset +set serverout on size 1000000 termout off +save pr_&_connect_identifier..tmp replace +set termout on + +0 c clob := q'\ +0 declare + +999999 \';; +999999 l_theCursor integer default dbms_sql.open_cursor;; +999999 l_columnValue varchar2(4000);; +999999 l_status integer;; +999999 l_descTbl dbms_sql.desc_tab;; +999999 l_colCnt number;; +999999 begin +999999 dbms_sql.parse( l_theCursor, c, dbms_sql.native );; +999999 dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl );; +999999 for i in 1 .. l_colCnt loop +999999 dbms_sql.define_column( l_theCursor, i, +999999 l_columnValue, 4000 );; +999999 end loop;; +999999 l_status := dbms_sql.execute(l_theCursor);; +999999 while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop +999999 for i in 1 .. l_colCnt loop +999999 if regexp_like(lower(l_descTbl(i).col_name), lower('&1')) then +999999 dbms_sql.column_value( l_theCursor, i, +999999 l_columnValue );; +999999 dbms_output.put_line +999999 ( rpad( l_descTbl(i).col_name, +999999 30 ) || ': ' || l_columnValue );; +999999 end if;; +999999 end loop;; +999999 dbms_output.put_line( '==============================' );; +999999 end loop;; +999999 exception +999999 when others then +999999 dbms_output.put_line(dbms_utility.format_error_backtrace);; +999999 raise;; +999999 end;; +/ + +@@loadset + +get pr_&_connect_identifier..tmp nolist +host del pr_&_connect_identifier..tmp diff --git a/tpt/prs.sql b/tpt/prs.sql new file mode 100644 index 0000000..69e84d1 --- /dev/null +++ b/tpt/prs.sql @@ -0,0 +1,41 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@saveset +set serverout on size 1000000 + +-- This is modified Tom Kyte's printtab code ( http://asktom.oracle.com ) + +declare + c clob := q'\&1\'; + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_descTbl dbms_sql.desc_tab; + l_colCnt number; + begin + dbms_sql.parse( l_theCursor, c, dbms_sql.native ); + dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl ); + for i in 1 .. l_colCnt loop + dbms_sql.define_column( l_theCursor, i, + l_columnValue, 4000 ); + end loop; + l_status := dbms_sql.execute(l_theCursor); + while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop + for i in 1 .. l_colCnt loop + dbms_sql.column_value( l_theCursor, i, + l_columnValue ); + dbms_output.put_line + ( rpad( l_descTbl(i).col_name, + 30 ) || ': ' || l_columnValue ); + end loop; + dbms_output.put_line( '==============================' ); + end loop; + exception + when others then + dbms_output.put_line(dbms_utility.format_error_backtrace); + raise; +end; +/ + +@@loadset diff --git a/tpt/pv.sql b/tpt/pv.sql new file mode 100644 index 0000000..6865b9a --- /dev/null +++ b/tpt/pv.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col pd_name head NAME for a50 +col pd_value head VALUE for a30 +column pd_descr heading DESCRIPTION format a55 word_wrap + +prompt Show parameter which have value &1 + +select n.ksppinm pd_name, c.ksppstvl pd_value, n.ksppdesc pd_descr +from sys.x$ksppi n, sys.x$ksppcv c +where n.indx=c.indx +and ( + c.ksppstvl like '&1' +); diff --git a/tpt/pvalid.sql b/tpt/pvalid.sql new file mode 100644 index 0000000..5d92bef --- /dev/null +++ b/tpt/pvalid.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: pvalid.sql +-- Purpose: Show valid parameter values from V$PARAMETER_VALID_VALUES +-- underlying X$ table X$KSPVLD_VALUES +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @pvalid +-- +-- @pvalid optimizer +-- +-------------------------------------------------------------------------------- + +COL pvalid_default HEAD DEFAULT FOR A7 +COL pvalid_value HEAD VALUE FOR A30 +COL pvalid_name HEAD PARAMETER FOR A50 +COL pvalid_par# HEAD PAR# FOR 99999 + +BREAK ON pvalid_par# skip 1 + +PROMPT Display valid values for multioption parameters matching "&1"... + +SELECT +-- INST_ID, + PARNO_KSPVLD_VALUES pvalid_par#, + NAME_KSPVLD_VALUES pvalid_name, + ORDINAL_KSPVLD_VALUES ORD, + VALUE_KSPVLD_VALUES pvalid_value, + DECODE(ISDEFAULT_KSPVLD_VALUES, 'FALSE', '', 'DEFAULT' ) pvalid_default +FROM + X$KSPVLD_VALUES +WHERE + LOWER(NAME_KSPVLD_VALUES) LIKE LOWER('%&1%') +ORDER BY + pvalid_par#, + pvalid_default, + ord, + pvalid_Value +/ diff --git a/tpt/px.sql b/tpt/px.sql new file mode 100644 index 0000000..14f50fe --- /dev/null +++ b/tpt/px.sql @@ -0,0 +1,59 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: px.sql +-- Purpose: Report Pararallel Execution SQL globally in a RAC instance +-- +-- Author: Tanel Poder +-- Copyright: (c) http://blog.tanelpoder.com +-- +-- Usage: @px.sql +-- +-------------------------------------------------------------------------------- + +SET LINES 999 PAGES 50000 TRIMSPOOL ON TRIMOUT ON TAB OFF + +COL px_qcsid HEAD QC_SID FOR A13 +COL px_instances FOR A100 +COL px_username HEAD USERNAME FOR A25 WRAP + +PROMPT Show current Parallel Execution sessions in RAC cluster... + +SELECT + pxs.qcsid||','||pxs.qcserial# px_qcsid + , pxs.qcinst_id + , ses.username px_username + , ses.sql_id + , pxs.degree + , pxs.req_degree + , COUNT(*) slaves + , COUNT(DISTINCT pxs.inst_id) inst_cnt + , MIN(pxs.inst_id) min_inst + , MAX(pxs.inst_id) max_inst + --, LISTAGG ( TO_CHAR(pxs.inst_id) , ' ' ) WITHIN GROUP (ORDER BY pxs.inst_id) px_instances +FROM + gv$px_session pxs + , gv$session ses + , gv$px_process p +WHERE + ses.sid = pxs.sid +AND ses.serial# = pxs.serial# +AND p.sid = pxs.sid +AND pxs.inst_id = ses.inst_id +AND ses.inst_id = p.inst_id +-- +AND pxs.req_degree IS NOT NULL -- qc +GROUP BY + pxs.qcsid||','||pxs.qcserial# + , pxs.qcinst_id + , ses.username + , ses.sql_id + , pxs.degree + , pxs.req_degree +ORDER BY + pxs.qcinst_id + , slaves DESC +/ + diff --git a/tpt/px2.sql b/tpt/px2.sql new file mode 100644 index 0000000..9b80404 --- /dev/null +++ b/tpt/px2.sql @@ -0,0 +1,73 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL px_qcsid HEAD QC_SID FOR A13 + +PROMPT Show current Parallel Execution sessions in RAC cluster... + +WITH sq AS ( + SELECT + pxs.qcsid||','||pxs.qcserial# px_qcsid + , pxs.qcinst_id + , ses.username + , ses.sql_id + , pxs.degree + , pxs.req_degree + , COUNT(*) slaves + , COUNT(DISTINCT pxs.inst_id) inst_cnt + , CASE WHEN pxs.inst_id = 1 THEN 1 ELSE NULL END i01 + , CASE WHEN pxs.inst_id = 2 THEN 1 ELSE NULL END i02 + , CASE WHEN pxs.inst_id = 3 THEN 1 ELSE NULL END i03 + , CASE WHEN pxs.inst_id = 4 THEN 1 ELSE NULL END i04 + , CASE WHEN pxs.inst_id = 5 THEN 1 ELSE NULL END i05 + , CASE WHEN pxs.inst_id = 6 THEN 1 ELSE NULL END i06 + , CASE WHEN pxs.inst_id = 7 THEN 1 ELSE NULL END i07 + , CASE WHEN pxs.inst_id = 8 THEN 1 ELSE NULL END i08 + , CASE WHEN pxs.inst_id = 9 THEN 1 ELSE NULL END i09 + , CASE WHEN pxs.inst_id = 10 THEN 1 ELSE NULL END i10 + , CASE WHEN pxs.inst_id = 11 THEN 1 ELSE NULL END i11 + , CASE WHEN pxs.inst_id = 12 THEN 1 ELSE NULL END i12 + , CASE WHEN pxs.inst_id = 13 THEN 1 ELSE NULL END i13 + , CASE WHEN pxs.inst_id = 14 THEN 1 ELSE NULL END i14 + , CASE WHEN pxs.inst_id = 15 THEN 1 ELSE NULL END i15 + , CASE WHEN pxs.inst_id = 16 THEN 1 ELSE NULL END i16 + -- , LISTAGG ( TO_CHAR(pxs.inst_id) , ' ' ) WITHIN GROUP (ORDER BY pxs.inst_id) instances + FROM + gv$px_session pxs + , gv$session ses + , gv$px_process p + WHERE + ses.sid = pxs.sid + AND ses.serial# = pxs.serial# + AND p.sid = pxs.sid + AND pxs.inst_id = ses.inst_id + AND ses.inst_id = p.inst_id + -- + AND pxs.req_degree IS NOT NULL -- qc + GROUP BY + pxs.qcsid||','||pxs.qcserial# + , pxs.qcinst_id + , ses.username + , ses.sql_id + --, pxs.inst_id + , pxs.degree + , pxs.req_degree + , CASE WHEN pxs.inst_id = 1 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 2 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 3 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 4 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 5 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 6 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 7 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 8 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 9 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 10 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 11 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 12 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 13 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 14 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 15 THEN 1 ELSE NULL END + , CASE WHEN pxs.inst_id = 16 THEN 1 ELSE NULL END +) +/ + diff --git a/tpt/pxs.sql b/tpt/pxs.sql new file mode 100644 index 0000000..36142c4 --- /dev/null +++ b/tpt/pxs.sql @@ -0,0 +1,67 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Display Parallel Execution QC and slave sessions for QC &1.... + +col pxs_degr head "Degree (Req)" for a12 +col pxs_username head "USERNAME" for a20 + +select + s.username pxs_username + , s.sql_id + , pxs.qcsid + , pxs.qcinst_id qc_inst + , pxs.server_group dfo_tree + , pxs.server_set + , pxs.server# + , lpad(to_char(pxs.degree)||' ('||to_char(pxs.req_degree)||')',12,' ') pxs_degr + , pxs.inst_id sl_inst + , pxs.sid slave_sid + , p.server_name + , p.spid + , CASE WHEN state != 'WAITING' THEN 'WORKING' + ELSE 'WAITING' + END AS state + , CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' + ELSE event + END AS sw_event +-- , CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' +-- ELSE CASE +-- WHEN event = 'PX Deq: Execution Msg' THEN 'Waiting for consumer: next command' +-- WHEN event = 'PX Deq Credit: send blkd' THEN 'Waiting for consumer: to consume more data' +-- WHEN event = 'PX qref latch' THEN 'Waiting for access to table queue buffer' +-- ELSE null +-- END +-- END AS human_readble_event + , s.blocking_session_status + , s.blocking_instance + , s.blocking_session + , s.seq# + , s.seconds_in_wait + , s.p1text + , s.p1raw + , s.p2text + , s.p2raw + , s.p3text + , s.p3raw +from + gv$px_session pxs + , gv$session s + , gv$px_process p +where + pxs.qcsid in (&1) +--and s.sid = pxs.qcsid +and s.sid = pxs.sid +and s.serial# = pxs.serial# +--and s.serial# = pxs.qcserial# -- null +and p.sid = pxs.sid +and pxs.inst_id = s.inst_id +and s.inst_id = p.inst_id +order by + pxs.qcsid + , pxs.server_group + , pxs.server_set + , pxs.qcinst_id + , pxs.server# +/ + diff --git a/tpt/pxtrace.sql b/tpt/pxtrace.sql new file mode 100644 index 0000000..e6caeb1 --- /dev/null +++ b/tpt/pxtrace.sql @@ -0,0 +1 @@ +SELECT time_stamp,pid,slvid,pname,sid,server_set,comp,filename,line,func,TRANSLATE(trace, CHR(10)||CHR(9), ' ') trace FROM gv$px_process_trace ORDER BY time_stamp ASC; diff --git a/tpt/rac112.sql b/tpt/rac112.sql new file mode 100644 index 0000000..d999fe2 --- /dev/null +++ b/tpt/rac112.sql @@ -0,0 +1,63 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set appinfo OFF +set appinfo "SQL*Plus" +set arraysize 500 +set autocommit OFF +set autoprint OFF +set autorecovery OFF +set autotrace OFF +set blockterminator "." +set cmdsep OFF +set colsep " " +set compatibility NATIVE +set concat "." +set copycommit 0 +set copytypecheck ON +set define "&" +set describe DEPTH 1 LINENUM ON INDENT ON +set echo OFF +set editfile "afiedit.sql" +set embedded OFF +set escape OFF +set escchar OFF +set feedback 6 +set flagger OFF +set flush ON +set heading ON +set headsep "|" +set linesize 299 +set logsource "" +set long 10000000 +set longchunksize 10000000 +set markup HTML OFF HEAD " SYS@rac01/rac112 report" BODY "" TABLE "border='1' align='center' summary='Script output'" SPOOL ON ENTMAP ON PRE OFF +set newpage 1 +set null "" +set numformat "" +set numwidth 10 +set pagesize 5000 +set pause OFF +set recsep WRAP +set recsepchar " " +set serveroutput OFF +set shiftinout invisible +set showmode OFF +set sqlblanklines OFF +set sqlcase MIXED +set sqlcontinue "> " +set sqlnumber ON +set sqlpluscompatibility 10.2.0 +set sqlprefix "#" +set sqlprompt "SQL> " +set sqlterminator ";" +set suffix "sql" +set tab OFF +set termout OFF +set time OFF +set timing OFF +set trimout ON +set trimspool ON +set underline "-" +set verify OFF +set wrap ON diff --git a/tpt/reco.sql b/tpt/reco.sql new file mode 100644 index 0000000..56ecc33 --- /dev/null +++ b/tpt/reco.sql @@ -0,0 +1,4 @@ +show parameter recovery%dest + +SELECT * FROM v$recovery_area_usage; + diff --git a/tpt/reg.sql b/tpt/reg.sql new file mode 100644 index 0000000..1007a7c --- /dev/null +++ b/tpt/reg.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL action_time FOR A30 + +PROMPT Querying DBA_REGISTRY_HISTORY ... +--SELECT action_time, bundle_series, comments FROM dba_registry_history ORDER BY action_time ASC; +SELECT * FROM dba_registry_history ORDER BY action_time ASC; +SELECT + action_time +-- install_id + , patch_id + , patch_uid + , patch_type + , action -- not present in 12c + , status + , description +--, logfile +--, ru_logfile +--, patch_descriptor -- sys.xmltype +--, source_version +--, source_build_description +--, source_build_timestamp +--, target_version +--, target_build_description +--, target_build_timestamp +FROM dba_registry_sqlpatch ORDER BY action_time ASC; diff --git a/tpt/repg.sql b/tpt/repg.sql new file mode 100644 index 0000000..9eea94b --- /dev/null +++ b/tpt/repg.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + SNAME + , MASTER + , STATUS +--, SCHEMA_COMMENT + , GNAME + , FNAME + , RPC_PROCESSING_DISABLED + , OWNER +from + dba_repgroup +/ diff --git a/tpt/repo.sql b/tpt/repo.sql new file mode 100644 index 0000000..bdf5660 --- /dev/null +++ b/tpt/repo.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@repo2 "%&1%" "%&2%" \ No newline at end of file diff --git a/tpt/repo2.sql b/tpt/repo2.sql new file mode 100644 index 0000000..e399663 --- /dev/null +++ b/tpt/repo2.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + SNAME + , ONAME + , TYPE + , STATUS +-- , GENERATION_STATUS + , ID +-- , OBJECT_COMMENT + , GNAME + , MIN_COMMUNICATION + , REPLICATION_TRIGGER_EXISTS + , INTERNAL_PACKAGE_EXISTS + , GROUP_OWNER + , NESTED_TABLE +from + dba_repobject +where + lower(gname) like lower('&1') +and lower(oname) like lower('&2') +/ diff --git a/tpt/res.sql b/tpt/res.sql new file mode 100644 index 0000000..76621d0 --- /dev/null +++ b/tpt/res.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show reserved words matching %&1% from V$RESERVED_WORDS.... +select keyword, reserved, res_type, res_attr, res_semi, duplicate +from v$reserved_words +where lower(keyword) like lower('%&1%') +/ diff --git a/tpt/res2.sql b/tpt/res2.sql new file mode 100644 index 0000000..303a8ea --- /dev/null +++ b/tpt/res2.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show reserved words matching &1 from V$RESERVED_WORDS.... +select keyword, reserved, res_type, res_attr, res_semi, duplicate +from v$reserved_words where lower(keyword) like lower('&1'); diff --git a/tpt/rman_archlogs.sql b/tpt/rman_archlogs.sql new file mode 100644 index 0000000..60c9265 --- /dev/null +++ b/tpt/rman_archlogs.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select al.thread#, al.sequence#, al.first_change#, al.blocks * al.block_size "Size kB", bp.handle backup_piece +from + v$backup_redolog al, + v$backup_set bs, + v$backup_piece bp +where + al.recid = bs.recid +and bs.recid = bp.recid +and al.stamp = bs.stamp +and bs.stamp = bp.stamp +and al.sequence# between 8000 and 8600; \ No newline at end of file diff --git a/tpt/roles.sql b/tpt/roles.sql new file mode 100644 index 0000000..d7500d2 --- /dev/null +++ b/tpt/roles.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from dba_roles where upper(role) like upper('%&1%'); diff --git a/tpt/rowcache.sql b/tpt/rowcache.sql new file mode 100644 index 0000000..5feaf87 --- /dev/null +++ b/tpt/rowcache.sql @@ -0,0 +1,38 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: rowcache.sql +-- Purpose: Show parent rowcache entries mathcing an object name +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @rowcache +-- @rowcache dba_tables +-- +-- Other: Tested on Oracle 10.2 and 11.1, v$rowcache_parent doesnt seem +-- to return all rowcache entries in 9.2 +-- +-------------------------------------------------------------------------------- + +COL rowcache_cache_name HEAD CACHE_NAME FOR A20 +COL rowcache_key HEAD KEY FOR A32 WRAP +COL rowcache_existent HEAD EXIST FOR A5 + +SELECT + INDX, HASH, ADDRESS, + EXISTENT rowcache_existent, + CACHE#, + CACHE_NAME rowcache_cache_name, +-- LOCK_MODE, LOCK_REQUEST, TXN, SADDR, + RAWTOHEX(KEY) rowcache_key +FROM + v$rowcache_parent +WHERE + RAWTOHEX(KEY) LIKE ( + SELECT '%'||UPPER(REPLACE(SUBSTR(DUMP(UPPER('&1'),16),INSTR(DUMP(UPPER('&1'),16),': ')+2), ',', ''))||'%' + FROM DUAL + ) +/ diff --git a/tpt/rowcr.sql b/tpt/rowcr.sql new file mode 100644 index 0000000..d79709a --- /dev/null +++ b/tpt/rowcr.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +UPDATE /*+ INDEX (t1) */ t1 +SET t1.data_object_id = ( + SELECT /*+ INDEX (t2) */ t2.data_object_id + FROM t2 + WHERE + t1.object_id = t2.object_id + --AND t1.data_object_id = t2.data_object_id + AND t1.owner = t2.owner + AND t1.object_name = t2.object_name + AND MOD(t2.object_id,2)=0 +) +WHERE t1.owner = 'SYS' +AND MOD(t1.object_id,2)=0 +/ + diff --git a/tpt/rowid.sql b/tpt/rowid.sql new file mode 100644 index 0000000..a495381 --- /dev/null +++ b/tpt/rowid.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show file, block, row numbers from rowid &1.... + +def rowid=&1 + +select + dbms_rowid.ROWID_RELATIVE_FNO('&rowid') rfile# + , dbms_rowid.ROWID_BLOCK_NUMBER('&rowid') block# + , dbms_rowid.ROWID_ROW_NUMBER('&rowid') row# + , lpad('0x'||trim(to_char(dbms_utility.MAKE_DATA_BLOCK_ADDRESS(dbms_rowid.ROWID_RELATIVE_FNO('&rowid') + , dbms_rowid.ROWID_BLOCK_NUMBER('&rowid')), 'XXXXXXXX')), 10) rowid_dba + , 'alter system dump datafile '||dbms_rowid.ROWID_RELATIVE_FNO('&rowid')||' block '|| + dbms_rowid.ROWID_BLOCK_NUMBER('&rowid')||'; -- @dump '|| + dbms_rowid.ROWID_RELATIVE_FNO('&rowid')||' '|| + dbms_rowid.ROWID_BLOCK_NUMBER('&rowid')||' .' dump_command +from + dual +/ diff --git a/tpt/rowid_scan.sql b/tpt/rowid_scan.sql new file mode 100644 index 0000000..a87434e --- /dev/null +++ b/tpt/rowid_scan.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col rowid_dba head DBA just right for a10 + +select + dbms_rowid.ROWID_RELATIVE_FNO(rowid) rfile# + , dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block# + , dbms_rowid.ROWID_ROW_NUMBER(rowid) row# + , lpad('0x'||trim(to_char(dbms_utility.MAKE_DATA_BLOCK_ADDRESS(dbms_rowid.ROWID_RELATIVE_FNO(rowid) + , dbms_rowid.ROWID_BLOCK_NUMBER(rowid)), 'XXXXXXXX')), 10) rowid_dba + , 'alter system dump datafile '||dbms_rowid.ROWID_RELATIVE_FNO(rowid)||' block '|| + dbms_rowid.ROWID_BLOCK_NUMBER(rowid)||'; -- @dump '|| + dbms_rowid.ROWID_RELATIVE_FNO(rowid)||' '|| + dbms_rowid.ROWID_BLOCK_NUMBER(rowid)||' .' dump_command +from + &1 +where + &2 +/ diff --git a/tpt/rs.sql b/tpt/rs.sql new file mode 100644 index 0000000..0d60b5e --- /dev/null +++ b/tpt/rs.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: rs.sql +-- Purpose: Display available Redo Strands +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @rs +-- +-- Other: Shows both public and private redo strands +-- +-------------------------------------------------------------------------------- + +COL rs_indx HEAD STR# FOR 999 + +prompt Display available redo strands in the instance (both private and public)... + +SELECT + indx rs_indx, + first_buf_kcrfa firstbufadr, + last_buf_kcrfa lastbufadr, + pnext_buf_kcrfa_cln nxtbufadr, + next_buf_num_kcrfa_cln nxtbuf#, + strand_header_bno_kcrfa_cln flushed, + total_bufs_kcrfa totbufs#, + strand_size_kcrfa strsz, + space_kcrf_pvt_strand strspc, + bytes_in_buf_kcrfa_cln "B/buf", + pvt_strand_state_kcrfa_cln state, + strand_num_ordinal_kcrfa_cln strand#, + ptr_kcrf_pvt_strand stradr, + index_kcrf_pvt_strand stridx, + txn_kcrf_pvt_strand txn +FROM + x$kcrfstrand +/ + + diff --git a/tpt/s.sql b/tpt/s.sql new file mode 100644 index 0000000..24e3246 --- /dev/null +++ b/tpt/s.sql @@ -0,0 +1,80 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: s.sql +-- Purpose: Display current Session Wait and SQL_ID info (10g+) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @s +-- @s 52,110,225 +-- @s "select sid from v$session where username = 'XYZ'" +-- @s &mysid +-- +-------------------------------------------------------------------------------- + +col sw_event head EVENT for a40 truncate +col sw_p1transl head P1TRANSL for a42 +col sw_sid head SID for 999999 + +col sw_p1 head P1 for a18 justify left word_wrap +col sw_p2 head P2 for a18 justify left word_wrap +col sw_p3 head P3 for a19 justify left word_wrap + +col sw_blocking_session head BLOCKING_SID for a12 +col sqlid_and_child for a20 +select + sid sw_sid, + sql_id || ' '|| TO_CHAR( sql_child_number ) sqlid_and_child, +-- sql_exec_start, + status, + CASE WHEN state != 'WAITING' THEN 'WORKING' + ELSE 'WAITING' + END AS state, + CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' + ELSE event + END AS sw_event, + seq#, + seconds_in_wait sec_in_wait, + --wait_time_micro / 1000000 sec_in_wait2, + CASE WHEN blocking_session_status = 'VALID' THEN TO_CHAR(blocking_session)||CASE WHEN blocking_instance != USERENV('INSTANCE') THEN ' inst='||blocking_instance ELSE NULL END ELSE blocking_session_status END sw_blocking_session, + CASE state WHEN 'WAITING' THEN NVL2(p1text,p1text||'= ',null)||CASE WHEN P1 < 536870912 THEN to_char(P1) ELSE '0x'||rawtohex(P1RAW) END ELSE null END SW_P1, + CASE state WHEN 'WAITING' THEN NVL2(p2text,p2text||'= ',null)||CASE WHEN P2 < 536870912 THEN to_char(P2) ELSE '0x'||rawtohex(P2RAW) END ELSE null END SW_P2, + CASE state WHEN 'WAITING' THEN NVL2(p3text,p3text||'= ',null)||CASE WHEN P3 < 536870912 THEN to_char(P3) ELSE '0x'||rawtohex(P3RAW) END ELSE null END SW_P3, + CASE state WHEN 'WAITING' THEN + CASE + WHEN event like 'cursor:%' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX')) + WHEN event like 'enq%' AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '|| + chr(bitand(p1, -16777216)/16777215)|| + chr(bitand(p1,16711680)/65535)|| + ' mode '||bitand(p1, power(2,14)-1) + WHEN event like 'latch%' AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '||( + select name||'[par' + from v$latch_parent + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + union all + select name||'[c'||child#||']' + from v$latch_children + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + ) + WHEN event like 'library cache pin' THEN + '0x'||RAWTOHEX(p1raw) + ELSE NULL END + ELSE NULL END AS sw_p1transl +FROM + v$session +WHERE + sid IN (&1) +ORDER BY + state, + sw_event, + p1, + p2, + p3 +/ diff --git a/tpt/saddr.sql b/tpt/saddr.sql new file mode 100644 index 0000000..fd8bd80 --- /dev/null +++ b/tpt/saddr.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_spid head SPID for a12 wrap +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 truncate +col u_machine head MACHINE for a18 truncate +col u_program head PROGRAM for a20 truncate + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.logon_time, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, +-- s.machine u_machine, +-- s.program u_program, + substr(s.program,instr(s.program,'(')) u_program, +-- p.pid, + p.spid u_spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status +from + v$session s, + v$process p +where + s.paddr=p.addr(+) +and s.saddr=hextoraw('&1') +/ + diff --git a/tpt/sample.sql b/tpt/sample.sql new file mode 100644 index 0000000..c49e39f --- /dev/null +++ b/tpt/sample.sql @@ -0,0 +1,80 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: sample.sql (v1.1) +-- Purpose: Sample any V$ view or X$ table and display aggregated results +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sample
    +-- +-- Examples: @sample sql_id v$session sid=142 1000000 +-- @sample sql_id,event v$session "sid=142 and state='WAITING'" 1000000 +-- @sample plsql_object_id,plsql_subprogram_id,sql_id v$session sid=142 1000000 +-- @sample indx,ksllalaq x$ksupr ksllalaq!=hextoraw('00') 10000 +-- +-- Other: This script temporarily disables hash and sort merge join to +-- get NESTED LOOPS join method (this is how the sampling is done) +-- +-- WARNING! Sampling some views like V$SQL, V$OPEN_CURSOR, X$KSMSP in a tight +-- loop may cause some serious latch contention in your instance. +-- +-- Thanks to: Olivier Bernhard for finding and reporting performance issues with +-- the ORDERED hint +-- +-------------------------------------------------------------------------------- + +col sample_msec for 9999999.99 + +-- the alter session commands should be uncommented +-- if running this script on 10.1.x or earlier as the opt_param hints work on 10.2+ + +set termout off +--begin +-- begin execute immediate 'alter session set "_optimizer_sortmerge_join_enabled"=false'; exception when others then null; end; +-- begin execute immediate 'alter session set "hash_join_enabled"=false'; exception when others then null; end; +--end; +--/ + +set termout on + +WITH + t1 AS (SELECT hsecs FROM v$timer), + q AS ( + select /*+ LEADING(r t) USE_NL(t) + opt_param('_optimizer_sortmerge_join_enabled','false') + opt_param('hash_join_enabled','false') + opt_param('_optimizer_use_feedback', 'false') + NO_TRANSFORM_DISTINCT_AGG */ + &1 , count(*) "COUNT", count(distinct r.rn) DISTCOUNT + from + (select /*+ no_unnest */ rownum rn from dual connect by level <= &4) r + , &2 t + where &3 + group by + &1 + order by + "COUNT" desc, &1 + ), + t2 AS (SELECT hsecs FROM v$timer) +SELECT /*+ ORDERED */ + trunc((t2.hsecs - t1.hsecs) * 10 * q.distcount / &4, 2) sample_msec + , (t2.hsecs - t1.hsecs) * 10 total_msec + , ROUND(((t2.hsecs - t1.hsecs) * 10 * q.distcount / &4) / ((t2.hsecs - t1.hsecs) * 10) * 100, 2) percent + , q.* +FROM + t1, + q, + t2 +/ + +--set termout off +--begin +-- begin execute immediate 'alter session set "_optimizer_sortmerge_join_enabled"=true'; exception when others then null; end; +-- begin execute immediate 'alter session set "hash_join_enabled"=true'; exception when others then null; end; +--end; +--/ +set termout on diff --git a/tpt/sampleaddr.sql b/tpt/sampleaddr.sql new file mode 100644 index 0000000..382a38a --- /dev/null +++ b/tpt/sampleaddr.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: sampleaddr.sql +-- Purpose: High-frequency sampling of contents of a SGA memory address +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sampleaddr +-- @sampleaddr +-- +-- Other: Requires the sample.sql script: +-- +-- http://www.tanelpoder.com/files/scripts/sample.sql +-- +-- Also requires access to X$KSMMEM and X$DUAL tables +-- +-------------------------------------------------------------------------------- + +col sampleaddr_addrlen new_value _sampleaddr_addrlen + +set termout off +select vsize(addr)*2 sampleaddr_addrlen from x$dual; +set termout on + +@@sample ksmmmval x$ksmmem "addr=hextoraw(lpad('&1',&_sampleaddr_addrlen,'0'))" &2 diff --git a/tpt/saveset.sql b/tpt/saveset.sql new file mode 100644 index 0000000..c82c788 --- /dev/null +++ b/tpt/saveset.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off +store set "&_tpt_tempdir/set_&_tpt_tempfile..sql" replace +set termout on diff --git a/tpt/schedlat.sql b/tpt/schedlat.sql new file mode 100644 index 0000000..0adb2bd --- /dev/null +++ b/tpt/schedlat.sql @@ -0,0 +1,32 @@ +-- Copyright 2020 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. + +-- Name: schedlat.sql +-- Purpose: List PSP0 process scheduling latency test results (where scheduling latency is not 0) +-- Other: Oracle 12c+ PSP0 process regularly (voluntarily) goes to sleep for 1000 microseconds +-- taking a high resolution system timestamp just before going to sleep and right after +-- getting back onto CPU. Usin these timestamps it checks if it managed to wake up +-- "exactly" 1000 usec later or + +PROMPT Listing recent non-zero scheduling delays from X$KSO_SCHED_DELAY_HISTORY + +SELECT + MIN(sample_start_time) history_begin_time, MAX(sample_end_time) history_end_time + , MAX(sched_delay_micro) max_latency_us + , AVG(sched_delay_micro) avg_latency_us +FROM + sys.x$kso_sched_delay_history +/ + +PROMPT Any noticed scheduling delays during the in-memory history window are listed below: + +SELECT + sample_start_time + , sample_end_time + , sched_delay_micro +FROM + sys.x$kso_sched_delay_history +WHERE + sched_delay_micro != 0 +/ + diff --git a/tpt/sdr.sql b/tpt/sdr.sql new file mode 100644 index 0000000..b563a92 --- /dev/null +++ b/tpt/sdr.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT ALTER SESSION SET "_serial_direct_read"=&1; +ALTER SESSION SET "_serial_direct_read"=&1; diff --git a/tpt/se.sql b/tpt/se.sql new file mode 100644 index 0000000..4868251 --- /dev/null +++ b/tpt/se.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col se_time_waited head TIME_WAITED for 99999999.90 +col se_sid head SID for 999999 +col se_event head EVENT for a40 truncate + +break on se_sid skip 1 + +select * from ( + select sid se_sid, event se_event, time_waited/100 se_time_waited, total_waits, total_timeouts, average_wait/100 average_wait, max_wait/100 max_wait + from v$session_event + where sid in (&1) + union all + select sid, 'CPU Time', value/100, cast(null as number), cast(null as number), cast(null as number), cast(null as number) + from v$sesstat + where sid in (&1) + and statistic# = (select statistic# from v$statname where name =('CPU used by this session')) +) +order by se_sid, se_time_waited desc, total_waits desc; diff --git a/tpt/sed.sql b/tpt/sed.sql new file mode 100644 index 0000000..3bf1248 --- /dev/null +++ b/tpt/sed.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@sed2 "%&1%" \ No newline at end of file diff --git a/tpt/sed2.sql b/tpt/sed2.sql new file mode 100644 index 0000000..4f41105 --- /dev/null +++ b/tpt/sed2.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show wait event descriptions matching &1... + +col sed_name head EVENT_NAME for a55 +col sed_p1 head PARAMETER1 for a25 +col sed_p2 head PARAMETER2 for a25 +col sed_p3 head PARAMETER3 for a25 +col sed_event# head EVENT# for 99999 +col sed_req_description HEAD REQ_DESCRIPTION for a100 WORD_WRAP +col sed_req_reason HEAD REQ_REASON for a32 WRAP +col sed_wait_class HEAD WAIT_CLASS for a20 +col sed_eq_name HEAD ENQUEUE_NAME for a30 + +SELECT + e.event# sed_event# + , e.name sed_name + , e.wait_class sed_wait_class + , e.parameter1 sed_p1 + , e.parameter2 sed_p2 + , e.parameter3 sed_p3 + , s.eq_name sed_eq_name + , s.req_reason sed_req_reason + , s.req_description sed_req_description +-- , e.display_name sed_display_name -- 12c +FROM + v$event_name e + , v$enqueue_statistics s +WHERE + e.event# = s.event# (+) +AND lower(e.name) like lower('&1') +ORDER BY + sed_name +/ diff --git a/tpt/sedn.sql b/tpt/sedn.sql new file mode 100644 index 0000000..c024760 --- /dev/null +++ b/tpt/sedn.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sed_name head EVENT_NAME for a45 +col sed_p1 head PARAMETER1 for a30 +col sed_p2 head PARAMETER2 for a30 +col sed_p3 head PARAMETER3 for a30 +col sed_event# head EVENT# for 99999 + +select + event# sed_event#, + name sed_name, + parameter1 sed_p1, + parameter2 sed_p2, + parameter3 sed_p3 +from + v$event_name +where + event# in (&1) +order by + sed_name +/ diff --git a/tpt/sedx.sql b/tpt/sedx.sql new file mode 100644 index 0000000..4cd21db --- /dev/null +++ b/tpt/sedx.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@sedn to_number(lower('&1'),'xxxx') \ No newline at end of file diff --git a/tpt/seg.sql b/tpt/seg.sql new file mode 100644 index 0000000..65464de --- /dev/null +++ b/tpt/seg.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@seg2 "%&1%" diff --git a/tpt/seg2.sql b/tpt/seg2.sql new file mode 100644 index 0000000..f668dde --- /dev/null +++ b/tpt/seg2.sql @@ -0,0 +1,37 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col seg_owner head OWNER for a20 +col seg_segment_name head SEGMENT_NAME for a30 +col seg_segment_type head SEGMENT_TYPE for a20 +col seg_partition_name head SEG_PART_NAME for a30 + +select + round(bytes/1048576) seg_MB, + owner seg_owner, + segment_name seg_segment_name, + partition_name seg_partition_name, + segment_type seg_segment_type, + tablespace_name seg_tablespace_name, + blocks, + header_file hdrfil, + HEADER_BLOCK hdrblk +from + dba_segments +where + upper(segment_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +/ + diff --git a/tpt/segcached.sql b/tpt/segcached.sql new file mode 100644 index 0000000..7a136b2 --- /dev/null +++ b/tpt/segcached.sql @@ -0,0 +1,76 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col o_owner heading owner for a25 +col o_object_name heading OBJECT_NAME for a30 +col o_subobject_name heading SUBOBJECT_NAME FOR a30 +col o_object_type heading OBJECT_TYPE for a18 +col o_status heading STATUS for a9 + +prompt Display number of buffered blocks of a segment using X$KCBOQH for table &1 + +-- done: currently buggy when data object ID doesn't match object Id (due to truncate or alter table move / rebuild) +-- todo: currently doesn't join properly to undo segment info +select * from ( + select + ROUND(SUM(x.num_buf * ts.blocksize) / 1024 / 1024 , 2) mb_buf, + SUM(x.num_buf) num_buf, + o.owner o_owner, + o.object_name o_object_name, + -- o.subobject_name o_subobject_name, + ts.name tablespace_name, + o.object_type o_object_type, + o.status o_status + -- o.object_id oid, + -- o.data_object_id d_oid, + -- o.created, + -- o.last_ddl_time + from + dba_objects o + , x$kcboqh x + , dba_segments s + -- , sys_objects so + , ts$ ts + where + x.obj# = o.data_object_id + --and o.data_object_id = so.object_id + and o.owner = s.owner + and o.object_name = s.segment_name + and SYS_OP_MAP_NONNULL(o.subobject_name) = SYS_OP_MAP_NONNULL(s.partition_name) + and s.tablespace_name = ts.name + --and x.ts# = ts.ts# + and + upper(object_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) + AND o.owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END + group by + o.owner + , o.object_name + --, o.subobject_name + , ts.name + , o.object_type + , o.status + --, o.object_id + --, data_object_id + --, o.created + --, o.last_ddl_time + order by + mb_buf desc + -- o_object_name, + -- o_owner, + -- o_object_type +) +where + rownum <= 20 +/ diff --git a/tpt/segcachedx.sql b/tpt/segcachedx.sql new file mode 100644 index 0000000..50b3b2c --- /dev/null +++ b/tpt/segcachedx.sql @@ -0,0 +1,76 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col o_owner heading owner for a25 +col o_object_name heading OBJECT_NAME for a30 +col o_subobject_name heading SUBOBJECT_NAME FOR a30 +col o_object_type heading OBJECT_TYPE for a18 +col o_status heading STATUS for a9 + +prompt Display number of buffered blocks of a segment using X$KCBOQH for table &1 + +-- done: currently buggy when data object ID doesn't match object Id (due to truncate or alter table move / rebuild) +-- todo: currently doesn't join properly to undo segment info +select * from ( + select + ROUND(SUM(x.num_buf * ts.blocksize) / 1024 / 1024 , 2) mb_buf, + SUM(x.num_buf) num_buf, + o.owner o_owner, + o.object_name o_object_name, + o.subobject_name o_subobject_name, + ts.name tablespace_name, + o.object_type o_object_type, + o.status o_status, + o.object_id oid, + o.data_object_id d_oid, + o.created, + o.last_ddl_time + from + dba_objects o + , x$kcboqh x + , dba_segments s + -- , sys_objects so + , ts$ ts + where + x.obj# = o.data_object_id + --and o.data_object_id = so.object_id + and o.owner = s.owner + and o.object_name = s.segment_name + and SYS_OP_MAP_NONNULL(o.subobject_name) = SYS_OP_MAP_NONNULL(s.partition_name) + and s.tablespace_name = ts.name + --and x.ts# = ts.ts# + and + upper(object_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) + AND o.owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END + group by + o.owner + , o.object_name + , o.subobject_name + , ts.name + , o.object_type + , o.status + , o.object_id + , data_object_id + , o.created + , o.last_ddl_time + order by + mb_buf desc + -- o_object_name, + -- o_owner, + -- o_object_type +) +where + rownum <= 20 +/ diff --git a/tpt/segeof.sql b/tpt/segeof.sql new file mode 100644 index 0000000..7408f1a --- /dev/null +++ b/tpt/segeof.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column segeof_segment_name heading SEGMENT_NAME format a30 +column segeof_owner heading OWNER format a25 + +--select tablespace_name, file_id, owner segeof_owner, segment_name segeof_segment_name, segment_Type +--from dba_extents +--where (file_id, block_id) in (select file_id, max(block_id) +-- from dba_extents +-- where upper(tablespace_name) like upper('%&1%') +-- group by file_id) +--order by tablespace_name, file_id +--/ + +with d as (select /*+ NO_MERGE MATERIALIZE */ * from dba_extents where upper(tablespace_name) like upper('%&1%')) +select + distinct 'alter '|| + case + when segment_type = 'TABLE PARTITION' then 'TABLE' + when segment_type = 'INDEX PARTITION' then 'INDEX' + else + segment_type + end + ||' '||owner||'.'||segment_name||' '|| + case + when segment_type = 'INDEX' then 'REBUILD' + when segment_type = 'TABLE' then 'MOVE' + when segment_type like 'INDEX%PARTITION' then 'REBUILD PARTITION '||partition_name + when segment_type like 'TABLE%PARTITION' then 'MOVE PARTITION '||partition_name + end + ||' --[file='||file_id||', block='||block_id||', mb='||ROUND(block_id*8/1024)||'];' cmd +-- tablespace_name, file_id, owner segeof_owner, segment_name segeof_segment_name, segment_Type +from d +where (file_id, block_id) in (select file_id, max(block_id) + from dba_extents + where upper(tablespace_name) like upper('%&1%') + group by file_id) +order by cmd +/ diff --git a/tpt/segext.sql b/tpt/segext.sql new file mode 100644 index 0000000..b286668 --- /dev/null +++ b/tpt/segext.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + s.tablespace_name, + s.max_next_extent, + f.max_bytes +from + (select tablespace_name, max(next_extent) max_next_extent from dba_segments group by tablespace_name) s, + (select tablespace_name, max(bytes) max_bytes from dba_free_space group by tablespace_name) f +where + s.tablespace_name = f.tablespace_name +and s.max_next_extent > f.max_bytes; + diff --git a/tpt/segext2.sql b/tpt/segext2.sql new file mode 100644 index 0000000..44d5084 --- /dev/null +++ b/tpt/segext2.sql @@ -0,0 +1,87 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column owner format a15 heading "Owner" +column segment_name format a50 heading "Object" +column tablespace_name format a30 heading "Tablespace" +column next_extent format 9G999G999 heading "Next (K)" +column max_free format 999G999G999 heading "Max Free (K)" + +prompt +select /*+ ordered */ + s.owner, + s.segment_name||decode(s.partition_name,NULL,'','.'||s.partition_name) + segment_name, + s.tablespace_name, s.next_extent/1024 next_extent, + f.max_free/1024 max_free +from ( select /*+ ordered */ + s.owner, s.segment_name, s.partition_name, s.tablespace_name, + decode(t.allocation_type, + 'SYSTEM',decode(sign(s.bytes-1024*1024),-1,64*1024, + decode(sign(s.bytes-64*1024*1024),-1,1024*1024, + decode(sign(s.bytes-1024*1024*1024),-1,8*1024*1024, + 64*1024*1024))), + s.next_extent) next_extent, s.extents, s.max_extents + from dba_segments s, dba_tablespaces t + where t.tablespace_name = s.tablespace_name + and t.contents != 'UNDO' ) s, + ( select /*+ ordered */ + t.tablespace_name, nvl(max(f.bytes),0) max_free + from dba_tablespaces t, dba_free_space f + where f.tablespace_name (+) = t.tablespace_name + group by t.tablespace_name ) f +where f.tablespace_name = s.tablespace_name + and f.max_free < s.next_extent +order by 1, 2, 3 +/ + + +column owner format a15 heading "Owner" +column segment_name format a30 heading "Object" +column tablespace_name format a30 heading "Tablespace" +column extents format 999G999 heading "Extents" +column max_extents format a10 heading "Max Extents" +column next_extent format 9G999G999 heading "Next (K)" +column max_free format 999G999G999 heading "Max Free (K)" +column quota format a10 heading " Quota (K)" +def nolimit = ' Unlimited' + +prompt +select /*+ ordered */ + s.owner, + s.segment_name||decode(s.partition_name,NULL,'','.'||s.partition_name) + segment_name, + s.tablespace_name, s.next_extent/1024 next_extent, + f.max_free/1024 max_free, s.extents, + decode (s.max_extents, 2147483645, '&nolimit', + to_char(s.max_extents, '9G999G999')) max_extents, + decode (p.privilege, NULL, + decode(nvl(q.max_bytes,decode(s.owner,'SYS',-1,0)), + -1, '&nolimit', + to_char(nvl(q.max_bytes,0)/1024,'9G999G999')), + '&nolimit') quota +from ( select /*+ ordered */ + s.owner, s.segment_name, s.partition_name, s.tablespace_name, + decode(t.allocation_type, + 'SYSTEM',decode(sign(s.bytes-1024*1024),-1,64*1024, + decode(sign(s.bytes-64*1024*1024),-1,1024*1024, + decode(sign(s.bytes-1024*1024*1024),-1,8*1024*1024, + 64*1024*1024))), + s.next_extent) next_extent, s.extents, s.max_extents + from dba_segments s, dba_tablespaces t + where t.tablespace_name = s.tablespace_name + and t.contents != 'UNDO' ) s, + ( select /*+ ordered */ + t.tablespace_name, nvl(max(f.bytes),0) max_free + from dba_tablespaces t, dba_free_space f + where f.tablespace_name (+) = t.tablespace_name + group by t.tablespace_name ) f, + dba_sys_privs p, dba_ts_quotas q +where q.username (+) = s.owner + and q.tablespace_name (+) = s.tablespace_name + and p.grantee (+) = s.owner + and p.privilege (+) = 'UNLIMITED TABLESPACE' + and f.tablespace_name = s.tablespace_name + and f.max_free < s.next_extent +order by 1, 2, 3 +/ diff --git a/tpt/segstat.sql b/tpt/segstat.sql new file mode 100644 index 0000000..547efee --- /dev/null +++ b/tpt/segstat.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@segstat2 "%&1%" "%&2%" diff --git a/tpt/segstat2.sql b/tpt/segstat2.sql new file mode 100644 index 0000000..b39bd7b --- /dev/null +++ b/tpt/segstat2.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col segstat_statistic_name head STATISTIC_NAME for a35 +col subobject_name for a20 + +SELECT * FROM ( + SELECT + owner, + object_name, + SUBOBJECT_NAME, + statistic_name segstat_statistic_name, + value + FROM + v$segment_statistics + WHERE + lower(object_name) LIKE lower('&1') + and lower(statistic_name) LIKE lower('&2') + order by value desc +) +--WHERE rownum <= 40 +/ diff --git a/tpt/segstatint.sql b/tpt/segstatint.sql new file mode 100644 index 0000000..42c7d30 --- /dev/null +++ b/tpt/segstatint.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + o1.NAME, + s.fts_statnam, + s.fts_staval, + s.fts_preval +FROM + x$ksolsfts s, + OBJ$ o1, + OBJ$ o2 +WHERE + s.fts_objd = o1.dataobj# +AND s.fts_objd = o2.obj# +AND fts_statnam IN ( + SELECT st_name FROM x$ksolsstat WHERE BITAND(st_flag, 2) = 2 +) +AND (s.fts_staval != 0 OR s.fts_preval != 0) +/ diff --git a/tpt/segsum.sql b/tpt/segsum.sql new file mode 100644 index 0000000..b8cb978 --- /dev/null +++ b/tpt/segsum.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col seg_owner head OWNER for a20 +col seg_segment_name head SEGMENT_NAME for a30 +col seg_segment_type head SEGMENT_TYPE for a20 +col seg_partition_name head SEG_PART_NAME for a30 + +select + round(SUM(bytes)/1048576) seg_MB +, owner seg_owner +, segment_name seg_segment_name +, segment_type seg_segment_type +, tablespace_name seg_tablespace_name +, SUM(blocks) +from + dba_segments +where + upper(segment_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +group by + owner +, segment_name +, segment_type +, tablespace_name +/ + diff --git a/tpt/sel.sql b/tpt/sel.sql new file mode 100644 index 0000000..cfb3214 --- /dev/null +++ b/tpt/sel.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from &1 +/ diff --git a/tpt/select.sql b/tpt/select.sql new file mode 100644 index 0000000..4a152bb --- /dev/null +++ b/tpt/select.sql @@ -0,0 +1,17 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + qcsid,qcserial#,degree,req_degree,count(*) +from + gv$px_session pxs + , gv$session s +where + pxs.inst_id = s.inst_id +and pxs.qcsid = s.sid +and pxs. +group by + qcsid,qcserial#,degree,req_degree +order by count(*) desc + + diff --git a/tpt/seq.sql b/tpt/seq.sql new file mode 100644 index 0000000..81a42f4 --- /dev/null +++ b/tpt/seq.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@seq2 "%&1%" \ No newline at end of file diff --git a/tpt/seq2.sql b/tpt/seq2.sql new file mode 100644 index 0000000..49dc162 --- /dev/null +++ b/tpt/seq2.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sequence_owner FOR A25 +COL sequence_name FOR A30 + +select * from dba_sequences +where + upper(sequence_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND sequence_owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +/ + diff --git a/tpt/ses.sql b/tpt/ses.sql new file mode 100644 index 0000000..9d6a0f6 --- /dev/null +++ b/tpt/ses.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ses.sql (SEssion Statistics) +-- Purpose: Display Session statistics for given sessions, filter by +-- statistic name +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @ses +-- @ses 10 % +-- @ses 10 parse +-- @ses 10,11,12 redo +-- @ses "select sid from v$session where username = 'APPS'" parse +-- +-------------------------------------------------------------------------------- + +select + ses.sid, + sn.name, + ses.value +from + v$sesstat ses, + v$statname sn +where + sn.statistic# = ses.statistic# +and ses.sid in (&1) +and lower(sn.name) like lower('%&2%') +/ diff --git a/tpt/ses2.sql b/tpt/ses2.sql new file mode 100644 index 0000000..d984571 --- /dev/null +++ b/tpt/ses2.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: ses2.sql (SEssion Statistics 2) +-- Purpose: Display Session statistics for given sessions, filter by +-- statistic name and show only stats with value > 0 +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @ses2 +-- @ses2 10 % +-- @ses2 10 parse +-- @ses2 10,11,12 redo +-- @ses2 "select sid from v$session where username = 'APPS'" parse +-- +-------------------------------------------------------------------------------- + +select + ses.sid, + sn.name, + ses.value +from + v$sesstat ses, + v$statname sn +where + sn.statistic# = ses.statistic# +and ses.sid in (&1) +and lower(sn.name) like lower('%&2%') +and ses.value > 0 +/ diff --git a/tpt/sesopt.sql b/tpt/sesopt.sql new file mode 100644 index 0000000..b0741ac --- /dev/null +++ b/tpt/sesopt.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT Show compilation environment of session &1 parameter &2 + +SELECT + sid_qksceserow SID +-- , pnum_qksceserow + , pname_qksceserow parameter + , DECODE(BITAND(flags_qksceserow, 2), 0, 'NO', 'YES') isdefault + , UPPER(pvalue_qksceserow) value +FROM x$qksceses +WHERE + sid_qksceserow IN (&1) +AND LOWER(pname_qksceserow) LIKE LOWER('%&2%') +-- BITAND(flags_qksceserow, 8) = 0 +--AND (BITAND(flags_qksceserow, 4) = 0 OR BITAND(flags_qksceserow, 2) = 0) +--AND DECODE(BITAND(flags_qksceserow, 2), 0, 'NO', 'YES') = 'NO' +/ diff --git a/tpt/sest.sql b/tpt/sest.sql new file mode 100644 index 0000000..9b2a4dc --- /dev/null +++ b/tpt/sest.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from v$sess_time_model where sid in (&1); diff --git a/tpt/set.sql b/tpt/set.sql new file mode 100644 index 0000000..c87ece8 --- /dev/null +++ b/tpt/set.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show SEssion Time model values for SID &1.... +select stat_name, value/1000000 SEC from v$sess_time_model where sid in (&1); diff --git a/tpt/setup/README_rlwrap.txt b/tpt/setup/README_rlwrap.txt new file mode 100644 index 0000000..3426231 --- /dev/null +++ b/tpt/setup/README_rlwrap.txt @@ -0,0 +1,8 @@ +An example alias I use for connecting through rlwrap: + +alias sl='rlwrap -D2 -irc -b'\''"@(){}[],+=&^%#;|\'\'' -f ~/work/oracle/tpt/setup/wordfile_11gR2.txt sqlplus sys/oracle@linux01/lin11g as sysdba' + +You may want to generate your own completion dictionary using wordfile_11gR2.sql example + +"man rlwrap" command is your friend! + diff --git a/tpt/setup/create_xviews.sql b/tpt/setup/create_xviews.sql new file mode 100644 index 0000000..89f6dbf --- /dev/null +++ b/tpt/setup/create_xviews.sql @@ -0,0 +1,77 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Name: create_xviews.sql +-- Purpose: Create views, grants and synonyms for X$ fixed tables +-- to be accessible for all users +-- Usage: Run from sqlplus as SYS: @create_xviews.sql +-- +-- +-- Author: (c) Tanel Poder http://www.tanelpoder.com +-- +-- Other: WARNING!!! You probably don't want to create X$ views for all +-- X$ tables in prodution environments! +-- Some X$ tables may be dangerous for your databases performance +-- and stability. +-- +-- Also you may have issues with dropping those views after a database +-- upgrade (ORA-600s when dropping them etc) +-- So if you have such views, you should drop them before upgrade +-- and recreate afterwards. +-- +-- This script will not overwrite any existing X_$% SYS objects as +-- those may be required by other performance tools +-- +-------------------------------------------------------------------------------- + +@saveset + +set pagesize 0 +set linesize 500 +set trimspool on +set feedback off +set termout off +set echo off + + +PROMPT Have you read the WARNING section in this scripts header?! +PROMPT Press enter to create views for X$ tables or CTRL+C to cancel... + +spool create_xviews.tmp + +select 'create view '||replace(name,'X$','X_$')||' as select * from '||name||';' +from ( + select name from v$fixed_table where name like 'X$%' + minus + select replace(object_name,'X_$','X$') from dba_objects where owner = 'SYS' and object_name like 'X\_$%' escape '\' +); + + +select 'grant select on SYS.'||replace(name,'X$','X_$')||' to public;' +from ( + select name from v$fixed_table where name like 'X$%' + minus + select replace(object_name,'X_$','X$') from dba_objects where owner = 'SYS' and object_name like 'X\_$%' escape '\' +); + +select 'create public synonym '||name||' for SYS.'||replace(name,'X$','X_$')||';' +from ( + select name from v$fixed_table where name like 'X$%' + minus + select replace(object_name,'X_$','X$') from dba_objects where owner = 'SYS' and object_name like 'X\_$%' escape '\' +); + +spool create_xviews.lst + +set termout on echo on feedback on + +@create_xviews.tmp + +host rm create_xviews.tmp +host del create_xviews.tmp + +@loadset + +prompt Done. diff --git a/tpt/setup/drop_xviews.sql b/tpt/setup/drop_xviews.sql new file mode 100644 index 0000000..84eef2c --- /dev/null +++ b/tpt/setup/drop_xviews.sql @@ -0,0 +1,56 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Name: drop_xviews.sql +-- Purpose: Drop custom views, grants and synonyms for X$ fixed tables +-- Usage: Run from sqlplus as SYS: @drop_xviews.sql +-- +-- +-- Author: (c) Tanel Poder http://www.tanelpoder.com +-- +-- Other: Note that this script only generatesd drop commands for manual +-- execution. Make sure that you don't drop any X$ tables required +-- by other software like StatsPack and monitoring tools +-- +-------------------------------------------------------------------------------- + +@saveset + +set pagesize 0 +set linesize 200 +set trimspool on +set feedback off + +Prompt Generating drop script... + +spool drop_xviews.tmp + +set termout off + +select 'drop view '||object_name||';' +from ( + select object_name + from dba_objects + where owner = 'SYS' + and object_name like 'X\_$%' escape '\' +); + +select 'drop public synonym '||synonym_name||';' +from ( + select synonym_name + from dba_synonyms + where owner = 'PUBLIC' + and synonym_name like 'X$%' +); + +spool off + +set termout on + +Prompt Done generating drop script. +Prompt Now review and manually execute the file drop_xviews.tmp using @drop_xviews.tmp +Prompt + +@loadset diff --git a/tpt/setup/grant_snapper_privs.sql b/tpt/setup/grant_snapper_privs.sql new file mode 100644 index 0000000..79524f0 --- /dev/null +++ b/tpt/setup/grant_snapper_privs.sql @@ -0,0 +1,37 @@ +-- generated using this OS command (and manually edited to remove duplicates): +-- for word in $(grep -i 'v\$' snapper.sql) ; do echo $word ; done | sort | fgrep 'v$' | sort | uniq > snapper_privs.txt +-- +-- You have to run this script as SYS! + +DEFINE snapper_role=SNAPPER_ROLE + +CREATE ROLE &snapper_role; + +GRANT SELECT ON sys.gv_$enqueue_stat TO &snapper_role; +GRANT SELECT ON sys.gv_$latch TO &snapper_role; +GRANT SELECT ON sys.gv_$lock_type TO &snapper_role; +GRANT SELECT ON sys.gv_$process TO &snapper_role; +GRANT SELECT ON sys.gv_$px_session TO &snapper_role; +GRANT SELECT ON sys.gv_$sess_time_model TO &snapper_role; +GRANT SELECT ON sys.gv_$session TO &snapper_role; +GRANT SELECT ON sys.gv_$session_event TO &snapper_role; +GRANT SELECT ON sys.gv_$session_wait TO &snapper_role; +GRANT SELECT ON sys.gv_$sesstat TO &snapper_role; +GRANT SELECT ON sys.gv_$sys_time_model TO &snapper_role; +GRANT SELECT ON sys.v_$event_name TO &snapper_role; +GRANT SELECT ON sys.v_$latchname TO &snapper_role; +GRANT SELECT ON sys.v_$mystat TO &snapper_role; +GRANT SELECT ON sys.v_$session TO &snapper_role; +GRANT SELECT ON sys.v_$statname TO &snapper_role; +GRANT SELECT ON sys.v_$version TO &snapper_role; + + +-- On Oracle 18 and higher, Snapper automatically uses DBMS_SESSION.SLEEP which is accessible to PUBLIC by default +-- On Oracle 12.2 and lower, DBMS_LOCK access is needed: +GRANT EXECUTE ON sys.dbms_lock TO &snapper_role; + +-- This optional, if you want Snapepr to log its output into a tracefile instead of DBMS_OUTPUT. +-- Note that in latest Oracle versions, you need to be SYS for DBMS_SYSTEM tracing to work, regardless of the grant +-- GRANT EXECUTE ON sys.dbms_system TO &snapper_role; + +-- If you granted the privileges to a role (SNAPPER_ROLE) now you can grant this role to users that need it diff --git a/tpt/setup/logon_trigger_ospid.sql b/tpt/setup/logon_trigger_ospid.sql new file mode 100644 index 0000000..0420985 --- /dev/null +++ b/tpt/setup/logon_trigger_ospid.sql @@ -0,0 +1,25 @@ +-- GRANT SELECT ON v_$process TO system; +-- GRANT SELECT ON v_$session TO system; + + +-- Put OS PID into v$session.client_identifier so that it'd get recorded in ASH +-- This works with dedicated sessions. With Oracle shared servers (MTS) +-- the OS PID that was used during logon will be recorded (not necessarily the +-- process ID that gets used later) + +-- If you don't want to overwrite the client_identifier, you could just append +-- the ospid= string into the end of current client id. + +CREATE OR REPLACE TRIGGER logon_trigger_ospid + AFTER LOGON ON DATABASE +DECLARE + ospid NUMBER; +BEGIN + SELECT spid INTO ospid + FROM v$process + WHERE addr = (SELECT paddr FROM v$session WHERE sid = USERENV('sid')); + + DBMS_SESSION.SET_IDENTIFIER('ospid='||TRIM(TO_CHAR(ospid))); +END; +/ + diff --git a/tpt/setup/tptcreate.sql b/tpt/setup/tptcreate.sql new file mode 100644 index 0000000..27b029b --- /dev/null +++ b/tpt/setup/tptcreate.sql @@ -0,0 +1,115 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: TPT helper functions (TPT = Tanel Poder's Tuning package) +-- Purpose: Create TPT package +-- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Contents: tpt.sleep function and procedure (implement sleeping via dbms_lock.sleep) +-- tpt.sqlid_to_sqlhash +-- +-------------------------------------------------------------------------------- + +CREATE OR REPLACE PACKAGE tpt AUTHID DEFINER AS +-------------------------------------------------------------------------------- +-- +-- Package: TPT helper functions (TPT = Tanel Poder's Tuning package) +-- Purpose: Helper functions like sleep function, convert sql id to hash value +-- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Contents: tpt.sleep function and procedure (implement sleeping via dbms_lock.sleep) +-- tpt.sqlid_to_sqlhash +-- +-------------------------------------------------------------------------------- + + FUNCTION sleep (seconds IN NUMBER DEFAULT 1) RETURN NUMBER; + PROCEDURE sleep (seconds IN NUMBER DEFAULT 1); + FUNCTION sqlid_to_sqlhash (sqlid IN VARCHAR2) RETURN NUMBER; + FUNCTION get_sql_hash (name IN VARCHAR2) RETURN NUMBER; + +END; -- tpt +/ +SHOW ERRORS + +CREATE OR REPLACE PACKAGE BODY tpt AS +-------------------------------------------------------------------------------- +-- +-- Package: TPT helper functions (TPT = Tanel Poder's Tuning package) +-- Purpose: Helper functions like sleep function, convert sql id to hash value +-- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Contents: tpt.sleep function and procedure (implement sleeping via dbms_lock.sleep) +-- tpt.sqlid_to_sqlhash +-- +-------------------------------------------------------------------------------- + + FUNCTION sleep (seconds IN NUMBER DEFAULT 1) RETURN NUMBER AS + BEGIN + DBMS_LOCK.SLEEP(seconds); + RETURN 1; + END; -- sleep + + ----------------------------------------------------------------------- + + PROCEDURE sleep (seconds IN NUMBER DEFAULT 1) AS + tmp NUMBER; + BEGIN + tmp := sleep(seconds); + END; -- sleep + + ----------------------------------------------------------------------- + + FUNCTION sqlid_to_sqlhash (sqlid IN VARCHAR2) RETURN NUMBER AS + r NUMBER := 0; + j NUMBER := 0; + a NUMBER := 0; + convstr VARCHAR2(32) := '0123456789abcdfghjkmnpqrstuvwxyz'; + base NUMBER := 32; + BEGIN + FOR i IN 1..LENGTH(sqlid) LOOP + j := LENGTH(sqlid) - i + 1; + a := (( POWER(base, j-1) * (INSTR(convstr,SUBSTR(sqlid,i,1))-1) )); + r := r + a; + END LOOP; + + RETURN TRUNC(MOD(r,POWER(2,32))); + END; -- sqlid_to_sqlhash + + ----------------------------------------------------------------------- + + FUNCTION get_sql_hash (name IN VARCHAR2) RETURN NUMBER AS + md5_raw RAW(16); + pre10hash NUMBER; + hash NUMBER; + BEGIN + hash := DBMS_UTILITY.GET_SQL_HASH(name, md5_raw, pre10hash); + --DBMS_OUTPUT.PUT_LINE(rawtohex(hash_raw)); + RETURN hash; + END; + +END; -- tpt +/ +SHOW ERRORS + + +GRANT EXECUTE ON tpt TO PUBLIC; + +BEGIN + EXECUTE IMMEDIATE 'drop public synonym tpt'; +EXCEPTION + WHEN others THEN NULL; +END; +/ + +CREATE PUBLIC SYNONYM tpt FOR tpt; diff --git a/tpt/setup/tptsleep.sql b/tpt/setup/tptsleep.sql new file mode 100644 index 0000000..33634c7 --- /dev/null +++ b/tpt/setup/tptsleep.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: tptsleep + +-- Purpose: Create tpt$sleep function which allows sleeping during SQL +-- execution +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: select a,b,c,tpt$sleep(10) from t + +-- +-- Other: Used for high frequency V$/X$ sampling via plain SQL +-- +-------------------------------------------------------------------------------- + +create or replace function tptsleep (sec in number default 1) return number as +-------------------------------------------------------------------------------- +-- tpt$sleep by Tanel Poder ( http://www.tanelpoder.com ) +-------------------------------------------------------------------------------- +begin + dbms_lock.sleep(sec); + return 1; +end; +/ + +grant execute on tptsleep to public; + +begin + execute immediate 'drop public synonym tptsleep'; +exception + when others then null; +end; +/ + +create public synonym tptsleep for tptsleep; diff --git a/tpt/setup/wordfile_11gR2.sql b/tpt/setup/wordfile_11gR2.sql new file mode 100644 index 0000000..52106b7 --- /dev/null +++ b/tpt/setup/wordfile_11gR2.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set lines 300 trimspool on pages 0 head off feedback off termout off + +SELECT DISTINCT name FROM ( + select lower(keyword) name from v$reserved_words union all + select upper(table_name) from dict union all + select upper(column_name) from dict_columns union all + -- select object_name from dba_objects union all + select upper(object_name||'.'||procedure_name) from dba_procedures union all + -- select '"'||table_name||'".'||column_name from dba_tab_columns union all + select ksppinm from x$ksppi union all + select name from v$sql_hint +) +WHERE length(name) > 2 +ORDER BY 1 +. + +spool wordfile_11gR2.txt +/ +spool off + + +-- you can also add TPT scripts by running this in TPT script dir: +-- find . -type f -name "*.sql" | sed 's/^\.\///' | awk '{ print "@" $1 }' >> ~/work/oracle/wordfile_11gR2.txt +-- or you could just run rlwrap sqlplus being in the directory where the scripts are located!! diff --git a/tpt/setup/wordfile_11gR2.txt b/tpt/setup/wordfile_11gR2.txt new file mode 100644 index 0000000..5b9af13 --- /dev/null +++ b/tpt/setup/wordfile_11gR2.txt @@ -0,0 +1,37155 @@ +ABORTED_REQUESTS +ABORTED_REQUEST_THRESHOLD +ABSOLUTE_FUZZY_CHANGE# +ABSTRACT_LOBS +ABS_FILE# +ACCEPT +ACCEPTED +ACCESSIBILITY +ACCESS_FROM_REMOTE +ACCESS_METHOD +ACCESS_PARAMETERS +ACCESS_PREDICATES +ACCESS_TYPE +ACCOUNT_ACCOUNT_TR. +ACCOUNT_OTHERSERVICEINFO_TR. +ACCOUNT_PASSWORDRESET_TR. +ACCOUNT_STATUS +ACKED_SCN +ACKNOWLEDGEMENT +ACKNOWLEDGEMENT_POSITION +ACKNOWLEGEMENT_POSITION +ACL +ACLID +ACL_FILE +ACL_LOCATION +ACL_MISMATCH +ACQUIRING +ACTION +ACTION# +ACTION_ARGUMENT_1 +ACTION_ARGUMENT_2 +ACTION_ARGUMENT_3 +ACTION_ARGUMENT_4 +ACTION_ARGUMENT_5 +ACTION_ARGUMENT_COUNT +ACTION_DETAILS +ACTION_HASH +ACTION_ID +ACTION_MESSAGE_ID +ACTION_NAME +ACTION_SOURCE +ACTION_THRESHOLD +ACTION_TIME +ACTION_TYPE +ACTION_VAL +ACTIVATION# +ACTIVATION_LEVEL +ACTIVE +ACTIVEBLKS +ACTIVE_AGENTS +ACTIVE_SESSIONS +ACTIVE_SESSIONS_KILLED +ACTIVE_SESSION_LIMIT_HIT +ACTIVE_SESS_KILLED +ACTIVE_SESS_LIMIT_HIT +ACTIVE_SESS_POOL_MTH +ACTIVE_SESS_POOL_P1 +ACTIVE_STATE +ACTIVE_STATUS +ACTIVE_STAT_PERIOD +ACTIVE_TIME +ACTIVITY_COUNTER +ACTIVITY_ID +ACTIVITY_TYPE +ACTUAL +ACTUAL_ANALYSIS +ACTUAL_DURATION +ACTUAL_MEM_USED +ACTUAL_PHYSICAL_READS +ACTUAL_REDO_BLKS +ACTUAL_REPAIR_TIME +ACTUAL_START_DATE +ACT_REPAIR_TIME +ADDED_EXTENTS +ADDITIONAL_INFO +ADDR +ADDRESS +ADD_JOB_HISTORY. +ADMIN_OPT +ADMIN_OPTION +ADM_EXPFIL_SYSTRIG. +ADM_EXPFIL_SYSTRIG.CREATE_SYSTRIG_ALTEREXPTAB +ADM_EXPFIL_SYSTRIG.CREATE_SYSTRIG_DROPOBJ +ADM_EXPFIL_SYSTRIG.CREATE_SYSTRIG_TRUNCRULCLS +ADM_EXPFIL_SYSTRIG.CREATE_SYSTRIG_TYPEEVOLVE +ADM_EXPFIL_SYSTRIG.DISABLE_ALL +ADM_EXPFIL_SYSTRIG.ENABLE_ALL +ADM_RLMGR_SYSTRIG. +ADM_RLMGR_SYSTRIG.PRE_DROPOBJ_MAINT +ADRALERT_VERSION +ADRDIR_VERSION +ADRID +ADRSCHMV_SUMMARY +ADRSCHM_VERSION +ADR_HOME +ADR_PATH_IDX +ADVANCE_ENABLED +ADVANCING +ADVICE +ADVICE_DISABLED +ADVICE_STATUS +ADVISE_ID +ADVISOR +ADVISOR_ID +ADVISOR_METRIC1 +ADVISOR_NAME +ADVISOR_RUN_ID +ADVISOR_RUN_REASON +ADVISOR_RUN_TIME +AFFIRM +AFTER_FAST_REFRESH +AFTER_ROW +AFTER_STATEMENT +AGENT +AGENT_ID +AGENT_NAME +AGENT_TYPE +AGGRCENTROID.ODCIAGGREGATEINITIALIZE +AGGRCENTROID.ODCIAGGREGATEITERATE +AGGRCENTROID.ODCIAGGREGATEMERGE +AGGRCENTROID.ODCIAGGREGATETERMINATE +AGGRCONCAT.ODCIAGGREGATEINITIALIZE +AGGRCONCAT.ODCIAGGREGATEITERATE +AGGRCONCAT.ODCIAGGREGATEMERGE +AGGRCONCAT.ODCIAGGREGATETERMINATE +AGGRCONVEXHULL.ODCIAGGREGATEINITIALIZE +AGGRCONVEXHULL.ODCIAGGREGATEITERATE +AGGRCONVEXHULL.ODCIAGGREGATEMERGE +AGGRCONVEXHULL.ODCIAGGREGATETERMINATE +AGGREGATE +AGGREGATEPRIVILEGE108_TAB$XD. +AGGREGATE_CACHE_HITS +AGGREGATE_CACHE_MISSES +AGGREGATE_PRIVILEGE_NAME +AGGREGATE_PRIVILEGE_TARGET_NS +AGGREGATION_TYPE +AGGRLRSCONCAT.ODCIAGGREGATEINITIALIZE +AGGRLRSCONCAT.ODCIAGGREGATEITERATE +AGGRLRSCONCAT.ODCIAGGREGATEMERGE +AGGRLRSCONCAT.ODCIAGGREGATETERMINATE +AGGRLRSCONCAT3D.ODCIAGGREGATEINITIALIZE +AGGRLRSCONCAT3D.ODCIAGGREGATEITERATE +AGGRLRSCONCAT3D.ODCIAGGREGATEMERGE +AGGRLRSCONCAT3D.ODCIAGGREGATETERMINATE +AGGRMBR.ODCIAGGREGATEINITIALIZE +AGGRMBR.ODCIAGGREGATEITERATE +AGGRMBR.ODCIAGGREGATEMERGE +AGGRMBR.ODCIAGGREGATETERMINATE +AGGRUNION.ODCIAGGREGATEINITIALIZE +AGGRUNION.ODCIAGGREGATEITERATE +AGGRUNION.ODCIAGGREGATEMERGE +AGGRUNION.ODCIAGGREGATETERMINATE +AGGRUNION.SDOAGGREGATEITERATE +AGGR_FUNC_CALCS +AGGR_FUNC_LOGICAL_NA +AGGR_FUNC_PRECOMPUTE +AGGXMLIMP.ODCIAGGREGATEINITIALIZE +AGGXMLIMP.ODCIAGGREGATEITERATE +AGGXMLIMP.ODCIAGGREGATEMERGE +AGGXMLIMP.ODCIAGGREGATETERMINATE +AGGXMLIMP.ODCIAGGREGATEWRAPCONTEXT +AGGXQAVGIMP.ODCIAGGREGATEINITIALIZE +AGGXQAVGIMP.ODCIAGGREGATEITERATE +AGGXQAVGIMP.ODCIAGGREGATEMERGE +AGGXQAVGIMP.ODCIAGGREGATETERMINATE +AGGXQAVGIMP.ODCIAGGREGATEWRAPCONTEXT +AGGXQIMP.ODCIAGGREGATEINITIALIZE +AGGXQIMP.ODCIAGGREGATEITERATE +AGGXQIMP.ODCIAGGREGATEMERGE +AGGXQIMP.ODCIAGGREGATETERMINATE +AGGXQIMP.ODCIAGGREGATEWRAPCONTEXT +AGGXQSUMIMP.ODCIAGGREGATEINITIALIZE +AGGXQSUMIMP.ODCIAGGREGATEITERATE +AGGXQSUMIMP.ODCIAGGREGATEMERGE +AGGXQSUMIMP.ODCIAGGREGATETERMINATE +AGGXQSUMIMP.ODCIAGGREGATEWRAPCONTEXT +AGG_FUNCTION +ALERT_REASON_ID +ALGORITHM +ALGORITHM_COMPATIBILITY +ALGORITHM_DESCRIPTION +ALGORITHM_ID +ALGORITHM_NAME +ALIAS_DIRECTORY +ALIAS_INCARNATION +ALIAS_INDEX +ALIGNMENT +ALL$OLAP2_AWS +ALLOCATED +ALLOCATED_AVG +ALLOCATED_MAX +ALLOCATED_SPACE +ALLOCATED_STDDEV +ALLOCATED_TOTAL +ALLOCATION_COUNT +ALLOCATION_TYPE +ALLOCATION_UNIT_SIZE +ALLOC_CLASS +ALLOWED_AUTOMATED_SWITCHES +ALLOW_RUNS_IN_RESTRICTED_MODE +ALL_ALL_TABLES +ALL_APPLY +ALL_APPLY_CHANGE_HANDLERS +ALL_APPLY_CONFLICT_COLUMNS +ALL_APPLY_DML_CONF_HANDLERS +ALL_APPLY_DML_HANDLERS +ALL_APPLY_ENQUEUE +ALL_APPLY_ERROR +ALL_APPLY_ERROR_MESSAGES +ALL_APPLY_EXECUTE +ALL_APPLY_KEY_COLUMNS +ALL_APPLY_PARAMETERS +ALL_APPLY_PROGRESS +ALL_APPLY_TABLE_COLUMNS +ALL_ARGUMENTS +ALL_ASSEMBLIES +ALL_ASSOCIATIONS +ALL_ATTRIBUTE_TRANSFORMATIONS +ALL_AUDIT_POLICIES +ALL_AUDIT_POLICY_COLUMNS +ALL_AWS +ALL_AW_AC +ALL_AW_AC_10G +ALL_AW_OBJ +ALL_AW_PROP +ALL_AW_PROP_NAME +ALL_AW_PS +ALL_BASE_TABLE_MVIEWS +ALL_CAPTURE +ALL_CAPTURE_EXTRA_ATTRIBUTES +ALL_CAPTURE_PARAMETERS +ALL_CAPTURE_PREPARED_DATABASE +ALL_CAPTURE_PREPARED_SCHEMAS +ALL_CAPTURE_PREPARED_TABLES +ALL_CATALOG +ALL_CHANGE_PROPAGATIONS +ALL_CHANGE_PROPAGATION_SETS +ALL_CHANGE_SETS +ALL_CHANGE_SOURCES +ALL_CHANGE_TABLES +ALL_CLUSTERS +ALL_CLUSTER_HASH_EXPRESSIONS +ALL_COLL_TYPES +ALL_COL_COMMENTS +ALL_COL_PENDING_STATS +ALL_COL_PRIVS +ALL_COL_PRIVS_MADE +ALL_COL_PRIVS_RECD +ALL_CONSTRAINTS +ALL_CONS_COLUMNS +ALL_CONS_OBJ_COLUMNS +ALL_CONTEXT +ALL_CUBES +ALL_CUBE_ATTRIBUTES +ALL_CUBE_ATTR_VISIBILITY +ALL_CUBE_BUILD_PROCESSES +ALL_CUBE_CALCULATED_MEMBERS +ALL_CUBE_DIMENSIONALITY +ALL_CUBE_DIMENSIONS +ALL_CUBE_DIM_LEVELS +ALL_CUBE_DIM_MODELS +ALL_CUBE_DIM_VIEWS +ALL_CUBE_DIM_VIEW_COLUMNS +ALL_CUBE_HIERARCHIES +ALL_CUBE_HIER_LEVELS +ALL_CUBE_HIER_VIEWS +ALL_CUBE_HIER_VIEW_COLUMNS +ALL_CUBE_MEASURES +ALL_CUBE_VIEWS +ALL_CUBE_VIEW_COLUMNS +ALL_DB_LINKS +ALL_DEF_AUDIT_OPTS +ALL_DEPENDENCIES +ALL_DEQUEUE_QUEUES +ALL_DIMENSIONS +ALL_DIM_ATTRIBUTES +ALL_DIM_CHILD_OF +ALL_DIM_HIERARCHIES +ALL_DIM_JOIN_KEY +ALL_DIM_LEVELS +ALL_DIM_LEVEL_KEY +ALL_DIRECTORIES +ALL_EDITIONING_VIEWS +ALL_EDITIONING_VIEWS_AE +ALL_EDITIONING_VIEW_COLS +ALL_EDITIONING_VIEW_COLS_AE +ALL_EDITIONS +ALL_EDITION_COMMENTS +ALL_EMON_SERVERS +ALL_ENCRYPTED_COLUMNS +ALL_ERRORS +ALL_ERRORS_AE +ALL_EVALUATION_CONTEXTS +ALL_EVALUATION_CONTEXT_TABLES +ALL_EVALUATION_CONTEXT_VARS +ALL_EXTERNAL_LOCATIONS +ALL_EXTERNAL_TABLES +ALL_FILE_GROUPS +ALL_FILE_GROUP_EXPORT_INFO +ALL_FILE_GROUP_FILES +ALL_FILE_GROUP_TABLES +ALL_FILE_GROUP_TABLESPACES +ALL_FILE_GROUP_VERSIONS +ALL_HISTOGRAMS +ALL_IDENTIFIERS +ALL_INDEXES +ALL_INDEXTYPES +ALL_INDEXTYPE_ARRAYTYPES +ALL_INDEXTYPE_COMMENTS +ALL_INDEXTYPE_OPERATORS +ALL_IND_COLUMNS +ALL_IND_EXPRESSIONS +ALL_IND_PARTITIONS +ALL_IND_PENDING_STATS +ALL_IND_STATISTICS +ALL_IND_SUBPARTITIONS +ALL_INTERNAL_TRIGGERS +ALL_INT_DEQUEUE_QUEUES +ALL_JAVA_ARGUMENTS +ALL_JAVA_CLASSES +ALL_JAVA_COMPILER_OPTIONS +ALL_JAVA_DERIVATIONS +ALL_JAVA_FIELDS +ALL_JAVA_IMPLEMENTS +ALL_JAVA_INNERS +ALL_JAVA_LAYOUTS +ALL_JAVA_METHODS +ALL_JAVA_NCOMPS +ALL_JAVA_RESOLVERS +ALL_JAVA_THROWS +ALL_JOBS +ALL_JOIN_IND_COLUMNS +ALL_LIBRARIES +ALL_LOBS +ALL_LOB_PARTITIONS +ALL_LOB_SUBPARTITIONS +ALL_LOB_TEMPLATES +ALL_LOG_GROUPS +ALL_LOG_GROUP_COLUMNS +ALL_MEASURE_FOLDERS +ALL_MEASURE_FOLDER_CONTENTS +ALL_METHOD_PARAMS +ALL_METHOD_RESULTS +ALL_MINING_MODELS +ALL_MINING_MODEL_ATTRIBUTES +ALL_MINING_MODEL_SETTINGS +ALL_MVIEWS +ALL_MVIEW_AGGREGATES +ALL_MVIEW_ANALYSIS +ALL_MVIEW_COMMENTS +ALL_MVIEW_DETAIL_PARTITION +ALL_MVIEW_DETAIL_RELATIONS +ALL_MVIEW_DETAIL_SUBPARTITION +ALL_MVIEW_JOINS +ALL_MVIEW_KEYS +ALL_MVIEW_LOGS +ALL_MVIEW_REFRESH_TIMES +ALL_NESTED_TABLES +ALL_NESTED_TABLE_COLS +ALL_OBJECTS +ALL_OBJECTS_AE +ALL_OBJECT_TABLES +ALL_OBJ_COLATTRS +ALL_OLAP2_AWS +ALL_OPANCILLARY +ALL_OPARGUMENTS +ALL_OPBINDINGS +ALL_OPERATORS +ALL_OPERATOR_COMMENTS +ALL_OUTLINES +ALL_OUTLINE_HINTS +ALL_PARTIAL_DROP_TABS +ALL_PART_COL_STATISTICS +ALL_PART_HISTOGRAMS +ALL_PART_INDEXES +ALL_PART_KEY_COLUMNS +ALL_PART_LOBS +ALL_PART_TABLES +ALL_PENDING_CONV_TABLES +ALL_PLSQL_OBJECT_SETTINGS +ALL_POLICIES +ALL_POLICY_CONTEXTS +ALL_POLICY_GROUPS +ALL_PROBE_OBJECTS +ALL_PROCEDURES +ALL_PROPAGATION +ALL_PUBLISHED_COLUMNS +ALL_QUEUES +ALL_QUEUE_PUBLISHERS +ALL_QUEUE_SCHEDULES +ALL_QUEUE_SUBSCRIBERS +ALL_QUEUE_TABLES +ALL_REFRESH +ALL_REFRESH_CHILDREN +ALL_REFRESH_DEPENDENCIES +ALL_REFS +ALL_REGISTERED_MVIEWS +ALL_REGISTERED_SNAPSHOTS +ALL_REGISTRY_BANNERS +ALL_REPAUDIT_ATTRIBUTE +ALL_REPAUDIT_COLUMN +ALL_REPCAT +ALL_REPCATLOG +ALL_REPCOLUMN +ALL_REPCOLUMN_GROUP +ALL_REPCONFLICT +ALL_REPDDL +ALL_REPFLAVORS +ALL_REPFLAVOR_COLUMNS +ALL_REPFLAVOR_OBJECTS +ALL_REPGENERATED +ALL_REPGENOBJECTS +ALL_REPGROUP +ALL_REPGROUPED_COLUMN +ALL_REPGROUP_PRIVILEGES +ALL_REPKEY_COLUMNS +ALL_REPOBJECT +ALL_REPPARAMETER_COLUMN +ALL_REPPRIORITY +ALL_REPPRIORITY_GROUP +ALL_REPPROP +ALL_REPRESOLUTION +ALL_REPRESOLUTION_METHOD +ALL_REPRESOLUTION_STATISTICS +ALL_REPRESOL_STATS_CONTROL +ALL_REPSCHEMA +ALL_REPSITES +ALL_REWRITE_EQUIVALENCES +ALL_ROWS +ALL_RULES +ALL_RULESETS +ALL_RULE_SETS +ALL_RULE_SET_RULES +ALL_SCHEDULER_CHAINS +ALL_SCHEDULER_CHAIN_RULES +ALL_SCHEDULER_CHAIN_STEPS +ALL_SCHEDULER_CREDENTIALS +ALL_SCHEDULER_DB_DESTS +ALL_SCHEDULER_DESTS +ALL_SCHEDULER_EXTERNAL_DESTS +ALL_SCHEDULER_FILE_WATCHERS +ALL_SCHEDULER_GLOBAL_ATTRIBUTE +ALL_SCHEDULER_GROUPS +ALL_SCHEDULER_GROUP_MEMBERS +ALL_SCHEDULER_JOBS +ALL_SCHEDULER_JOB_ARGS +ALL_SCHEDULER_JOB_CLASSES +ALL_SCHEDULER_JOB_DESTS +ALL_SCHEDULER_JOB_LOG +ALL_SCHEDULER_JOB_RUN_DETAILS +ALL_SCHEDULER_NOTIFICATIONS +ALL_SCHEDULER_PROGRAMS +ALL_SCHEDULER_PROGRAM_ARGS +ALL_SCHEDULER_REMOTE_DATABASES +ALL_SCHEDULER_REMOTE_JOBSTATE +ALL_SCHEDULER_RUNNING_CHAINS +ALL_SCHEDULER_SCHEDULES +ALL_SCHEDULER_WINDOWS +ALL_SCHEDULER_WINDOW_DETAILS +ALL_SCHEDULER_WINDOW_GROUPS +ALL_SCHEDULER_WINDOW_LOG +ALL_SCHEDULER_WINGROUP_MEMBERS +ALL_SECONDARY_OBJECTS +ALL_SEC_RELEVANT_COLS +ALL_SEQUENCES +ALL_SERVICES +ALL_SNAPSHOTS +ALL_SNAPSHOT_LOGS +ALL_SNAPSHOT_REFRESH_TIMES +ALL_SOURCE +ALL_SOURCE_AE +ALL_SOURCE_TABLES +ALL_SQLJ_TYPES +ALL_SQLJ_TYPE_ATTRS +ALL_SQLJ_TYPE_METHODS +ALL_SQLSET +ALL_SQLSET_BINDS +ALL_SQLSET_PLANS +ALL_SQLSET_REFERENCES +ALL_SQLSET_STATEMENTS +ALL_STAT_EXTENSIONS +ALL_STORED_SETTINGS +ALL_STREAMS_COLUMNS +ALL_STREAMS_GLOBAL_RULES +ALL_STREAMS_MESSAGE_CONSUMERS +ALL_STREAMS_MESSAGE_RULES +ALL_STREAMS_NEWLY_SUPPORTED +ALL_STREAMS_RULES +ALL_STREAMS_SCHEMA_RULES +ALL_STREAMS_TABLE_RULES +ALL_STREAMS_TRANSFORM_FUNCTION +ALL_STREAMS_UNSUPPORTED +ALL_SUBPARTITION_TEMPLATES +ALL_SUBPART_COL_STATISTICS +ALL_SUBPART_HISTOGRAMS +ALL_SUBPART_KEY_COLUMNS +ALL_SUBSCRIBED_COLUMNS +ALL_SUBSCRIBED_TABLES +ALL_SUBSCRIPTIONS +ALL_SUMDELTA +ALL_SUMMAP +ALL_SUMMARIES +ALL_SYNC_CAPTURE +ALL_SYNC_CAPTURE_PREPARED_TABS +ALL_SYNC_CAPTURE_TABLES +ALL_SYNONYMS +ALL_TABLES +ALL_TAB_COLS +ALL_TAB_COLUMNS +ALL_TAB_COL_STATISTICS +ALL_TAB_COMMENTS +ALL_TAB_HISTGRM_PENDING_STATS +ALL_TAB_HISTOGRAMS +ALL_TAB_MODIFICATIONS +ALL_TAB_PARTITIONS +ALL_TAB_PENDING_STATS +ALL_TAB_PRIVS +ALL_TAB_PRIVS_MADE +ALL_TAB_PRIVS_RECD +ALL_TAB_STATISTICS +ALL_TAB_STATS_HISTORY +ALL_TAB_STAT_PREFS +ALL_TAB_SUBPARTITIONS +ALL_TARGET_PROPS_TR. +ALL_TRANSFORMATIONS +ALL_TRIGGERS +ALL_TRIGGER_COLS +ALL_TRIGGER_ORDERING +ALL_TSTZ_TABLES +ALL_TSTZ_TAB_COLS +ALL_TYPES +ALL_TYPE_ATTRS +ALL_TYPE_METHODS +ALL_TYPE_VERSIONS +ALL_UNUSED_COL_TABS +ALL_UPDATABLE_COLUMNS +ALL_USERS +ALL_USTATS +ALL_VARRAYS +ALL_VIEWS +ALL_VIEWS_AE +ALL_WARNING_SETTINGS +ALL_XDS_ATTRIBUTE_SECS +ALL_XDS_INSTANCE_SETS +ALL_XDS_OBJECTS +ALL_XML_INDEXES +ALL_XML_SCHEMAS +ALL_XML_SCHEMAS2 +ALL_XML_TABLES +ALL_XML_TAB_COLS +ALL_XML_VIEWS +ALL_XML_VIEW_COLS +ALL_XSC_AGGREGATE_PRIVILEGE +ALL_XSC_PRIVILEGE +ALL_XSC_SECURITY_CLASS +ALL_XSC_SECURITY_CLASS_DEP +ALL_XSC_SECURITY_CLASS_STATUS +ALL_XSTREAM_INBOUND +ALL_XSTREAM_OUTBOUND +ALL_XSTREAM_RULES +ALT +ALTERNATE +ALWAYS +ANALYSIS_VERSION +ANALYTIC +AND_EQUAL +ANIMATION3D774_TAB$XD. +ANNOTATION_STATUS +ANTIJOIN +ANYDATA.ACCESSBDOUBLE +ANYDATA.ACCESSBFILE +ANYDATA.ACCESSBFLOAT +ANYDATA.ACCESSBLOB +ANYDATA.ACCESSCHAR +ANYDATA.ACCESSCLOB +ANYDATA.ACCESSDATE +ANYDATA.ACCESSINTERVALDS +ANYDATA.ACCESSINTERVALYM +ANYDATA.ACCESSNCHAR +ANYDATA.ACCESSNCLOB +ANYDATA.ACCESSNUMBER +ANYDATA.ACCESSNVARCHAR2 +ANYDATA.ACCESSRAW +ANYDATA.ACCESSTIMESTAMP +ANYDATA.ACCESSTIMESTAMPLTZ +ANYDATA.ACCESSTIMESTAMPTZ +ANYDATA.ACCESSUROWID +ANYDATA.ACCESSVARCHAR +ANYDATA.ACCESSVARCHAR2 +ANYDATA.BEGINCREATE +ANYDATA.CONVERTBDOUBLE +ANYDATA.CONVERTBFILE +ANYDATA.CONVERTBFLOAT +ANYDATA.CONVERTBLOB +ANYDATA.CONVERTCHAR +ANYDATA.CONVERTCLOB +ANYDATA.CONVERTCOLLECTION +ANYDATA.CONVERTDATE +ANYDATA.CONVERTINTERVALDS +ANYDATA.CONVERTINTERVALYM +ANYDATA.CONVERTNCHAR +ANYDATA.CONVERTNCLOB +ANYDATA.CONVERTNUMBER +ANYDATA.CONVERTNVARCHAR2 +ANYDATA.CONVERTOBJECT +ANYDATA.CONVERTRAW +ANYDATA.CONVERTREF +ANYDATA.CONVERTTIMESTAMP +ANYDATA.CONVERTTIMESTAMPLTZ +ANYDATA.CONVERTTIMESTAMPTZ +ANYDATA.CONVERTUROWID +ANYDATA.CONVERTVARCHAR +ANYDATA.CONVERTVARCHAR2 +ANYDATA.ENDCREATE +ANYDATA.GETBDOUBLE +ANYDATA.GETBFILE +ANYDATA.GETBFLOAT +ANYDATA.GETBLOB +ANYDATA.GETCHAR +ANYDATA.GETCLOB +ANYDATA.GETCOLLECTION +ANYDATA.GETDATE +ANYDATA.GETINTERVALDS +ANYDATA.GETINTERVALYM +ANYDATA.GETNCHAR +ANYDATA.GETNCLOB +ANYDATA.GETNUMBER +ANYDATA.GETNVARCHAR2 +ANYDATA.GETOBJECT +ANYDATA.GETRAW +ANYDATA.GETREF +ANYDATA.GETTIMESTAMP +ANYDATA.GETTIMESTAMPLTZ +ANYDATA.GETTIMESTAMPTZ +ANYDATA.GETTYPE +ANYDATA.GETTYPENAME +ANYDATA.GETVARCHAR +ANYDATA.GETVARCHAR2 +ANYDATA.PIECEWISE +ANYDATA.SETBDOUBLE +ANYDATA.SETBFILE +ANYDATA.SETBFLOAT +ANYDATA.SETBLOB +ANYDATA.SETCHAR +ANYDATA.SETCLOB +ANYDATA.SETCOLLECTION +ANYDATA.SETDATE +ANYDATA.SETINTERVALDS +ANYDATA.SETINTERVALYM +ANYDATA.SETNCHAR +ANYDATA.SETNCLOB +ANYDATA.SETNUMBER +ANYDATA.SETNVARCHAR2 +ANYDATA.SETOBJECT +ANYDATA.SETRAW +ANYDATA.SETREF +ANYDATA.SETTIMESTAMP +ANYDATA.SETTIMESTAMPLTZ +ANYDATA.SETTIMESTAMPTZ +ANYDATA.SETVARCHAR +ANYDATA.SETVARCHAR2 +ANYDATASET.ADDINSTANCE +ANYDATASET.BEGINCREATE +ANYDATASET.ENDCREATE +ANYDATASET.GETBDOUBLE +ANYDATASET.GETBFILE +ANYDATASET.GETBFLOAT +ANYDATASET.GETBLOB +ANYDATASET.GETCHAR +ANYDATASET.GETCLOB +ANYDATASET.GETCOLLECTION +ANYDATASET.GETCOUNT +ANYDATASET.GETDATE +ANYDATASET.GETINSTANCE +ANYDATASET.GETINTERVALDS +ANYDATASET.GETINTERVALYM +ANYDATASET.GETNCHAR +ANYDATASET.GETNCLOB +ANYDATASET.GETNUMBER +ANYDATASET.GETNVARCHAR2 +ANYDATASET.GETOBJECT +ANYDATASET.GETRAW +ANYDATASET.GETREF +ANYDATASET.GETTIMESTAMP +ANYDATASET.GETTIMESTAMPLTZ +ANYDATASET.GETTIMESTAMPTZ +ANYDATASET.GETTYPE +ANYDATASET.GETTYPENAME +ANYDATASET.GETUROWID +ANYDATASET.GETVARCHAR +ANYDATASET.GETVARCHAR2 +ANYDATASET.PIECEWISE +ANYDATASET.SETBDOUBLE +ANYDATASET.SETBFILE +ANYDATASET.SETBFLOAT +ANYDATASET.SETBLOB +ANYDATASET.SETCHAR +ANYDATASET.SETCLOB +ANYDATASET.SETCOLLECTION +ANYDATASET.SETDATE +ANYDATASET.SETINTERVALDS +ANYDATASET.SETINTERVALYM +ANYDATASET.SETNCHAR +ANYDATASET.SETNCLOB +ANYDATASET.SETNUMBER +ANYDATASET.SETNVARCHAR2 +ANYDATASET.SETOBJECT +ANYDATASET.SETRAW +ANYDATASET.SETREF +ANYDATASET.SETTIMESTAMP +ANYDATASET.SETTIMESTAMPLTZ +ANYDATASET.SETTIMESTAMPTZ +ANYDATASET.SETUROWID +ANYDATASET.SETVARCHAR +ANYDATASET.SETVARCHAR2 +ANYDATA_TRANSFORMATION +ANYDATA_VALUE +ANYSCHEMA +ANYTYPE.ADDATTR +ANYTYPE.BEGINCREATE +ANYTYPE.ENDCREATE +ANYTYPE.GETATTRELEMINFO +ANYTYPE.GETINFO +ANYTYPE.GETPERSISTENT +ANYTYPE.SETINFO +ANY_CONTEXT +APEX. +APEXWS. +APEXWS.FOLDER +APEXWS.HOME +APEXWS.PAGE +APEXWS.ROW +APEXWS.SEARCH +APEXWS.SHEET +APEX_ADMIN. +APEX_APPLICATION_GET_PG_TNAME. +APEX_MIG_PROJECTS_UPDATE. +APEX_MIG_PROJECTS_UPDATE.UPD_MIG_REV_FORMS +APEX_MIG_PROJECTS_UPDATE.UPD_MIG_REV_REPORTS +APEX_UI_DEFAULT_UPDATE. +APEX_UI_DEFAULT_UPDATE.UPD_DISPLAY_IN_FORM +APEX_UI_DEFAULT_UPDATE.UPD_DISPLAY_IN_REPORT +APEX_UI_DEFAULT_UPDATE.UPD_FORM_REGION_TITLE +APEX_UI_DEFAULT_UPDATE.UPD_ITEM_DISPLAY_HEIGHT +APEX_UI_DEFAULT_UPDATE.UPD_ITEM_DISPLAY_WIDTH +APEX_UI_DEFAULT_UPDATE.UPD_ITEM_FORMAT_MASK +APEX_UI_DEFAULT_UPDATE.UPD_ITEM_HELP +APEX_UI_DEFAULT_UPDATE.UPD_LABEL +APEX_UI_DEFAULT_UPDATE.UPD_REPORT_ALIGNMENT +APEX_UI_DEFAULT_UPDATE.UPD_REPORT_FORMAT_MASK +APEX_UI_DEFAULT_UPDATE.UPD_REPORT_REGION_TITLE +APPEND +APPEND_VALUES +APPLICATION_WAIT_TIME +APPLIED +APPLIED_HIGH_POSITION +APPLIED_LOW_POSITION +APPLIED_MESSAGE_CREATE_TIME +APPLIED_MESSAGE_NUMBER +APPLIED_SCN +APPLIED_SEQ# +APPLIED_SEQUENCE# +APPLIED_THREAD# +APPLIED_TIME +APPLY# +APPLY_BYTES_SENT +APPLY_CAPTURED +APPLY_CROSSEDITION_TRIGGER +APPLY_DATABASE_LINK +APPLY_DBLINK +APPLY_MESSAGES_SENT +APPLY_NAME +APPLY_REASON +APPLY_SERVER_ONLY +APPLY_STATUS +APPLY_TAG +APPLY_TIME +APPLY_USER +APPLY_VERSION +APS_VALIDATE. +APWAIT_DELTA +APWAIT_TOTAL +AQ$_GET_SUBSCRIBERS. +AQ$_JMS_BYTES_MESSAGE.CLEAN +AQ$_JMS_BYTES_MESSAGE.CLEAN_ALL +AQ$_JMS_BYTES_MESSAGE.CLEAR_BODY +AQ$_JMS_BYTES_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_BYTES_MESSAGE.CONSTRUCT +AQ$_JMS_BYTES_MESSAGE.FLUSH +AQ$_JMS_BYTES_MESSAGE.GET_APPID +AQ$_JMS_BYTES_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_BYTES +AQ$_JMS_BYTES_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_EXCEPTION +AQ$_JMS_BYTES_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_GROUPID +AQ$_JMS_BYTES_MESSAGE.GET_GROUPSEQ +AQ$_JMS_BYTES_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_MODE +AQ$_JMS_BYTES_MESSAGE.GET_REPLYTO +AQ$_JMS_BYTES_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_TYPE +AQ$_JMS_BYTES_MESSAGE.GET_USERID +AQ$_JMS_BYTES_MESSAGE.PREPARE +AQ$_JMS_BYTES_MESSAGE.READ_BOOLEAN +AQ$_JMS_BYTES_MESSAGE.READ_BYTE +AQ$_JMS_BYTES_MESSAGE.READ_BYTES +AQ$_JMS_BYTES_MESSAGE.READ_CHAR +AQ$_JMS_BYTES_MESSAGE.READ_DOUBLE +AQ$_JMS_BYTES_MESSAGE.READ_FLOAT +AQ$_JMS_BYTES_MESSAGE.READ_INT +AQ$_JMS_BYTES_MESSAGE.READ_LONG +AQ$_JMS_BYTES_MESSAGE.READ_SHORT +AQ$_JMS_BYTES_MESSAGE.READ_UNSIGNED_BYTE +AQ$_JMS_BYTES_MESSAGE.READ_UNSIGNED_SHORT +AQ$_JMS_BYTES_MESSAGE.READ_UTF +AQ$_JMS_BYTES_MESSAGE.RESET +AQ$_JMS_BYTES_MESSAGE.SET_APPID +AQ$_JMS_BYTES_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_BYTES +AQ$_JMS_BYTES_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_GROUPID +AQ$_JMS_BYTES_MESSAGE.SET_GROUPSEQ +AQ$_JMS_BYTES_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_REPLYTO +AQ$_JMS_BYTES_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_TYPE +AQ$_JMS_BYTES_MESSAGE.SET_USERID +AQ$_JMS_BYTES_MESSAGE.WRITE_BOOLEAN +AQ$_JMS_BYTES_MESSAGE.WRITE_BYTE +AQ$_JMS_BYTES_MESSAGE.WRITE_BYTES +AQ$_JMS_BYTES_MESSAGE.WRITE_CHAR +AQ$_JMS_BYTES_MESSAGE.WRITE_DOUBLE +AQ$_JMS_BYTES_MESSAGE.WRITE_FLOAT +AQ$_JMS_BYTES_MESSAGE.WRITE_INT +AQ$_JMS_BYTES_MESSAGE.WRITE_LONG +AQ$_JMS_BYTES_MESSAGE.WRITE_SHORT +AQ$_JMS_BYTES_MESSAGE.WRITE_UTF +AQ$_JMS_HEADER.CLEAR_PROPERTIES +AQ$_JMS_HEADER.GET_APPID +AQ$_JMS_HEADER.GET_BOOLEAN_PROPERTY +AQ$_JMS_HEADER.GET_BOOLEAN_PROPERTY_AS_INT +AQ$_JMS_HEADER.GET_BYTE_PROPERTY +AQ$_JMS_HEADER.GET_DOUBLE_PROPERTY +AQ$_JMS_HEADER.GET_FLOAT_PROPERTY +AQ$_JMS_HEADER.GET_GROUPID +AQ$_JMS_HEADER.GET_GROUPSEQ +AQ$_JMS_HEADER.GET_INT_PROPERTY +AQ$_JMS_HEADER.GET_LONG_PROPERTY +AQ$_JMS_HEADER.GET_REPLYTO +AQ$_JMS_HEADER.GET_SHORT_PROPERTY +AQ$_JMS_HEADER.GET_STRING_PROPERTY +AQ$_JMS_HEADER.GET_TYPE +AQ$_JMS_HEADER.GET_USERID +AQ$_JMS_HEADER.LOOKUP_PROPERTY_NAME +AQ$_JMS_HEADER.SET_APPID +AQ$_JMS_HEADER.SET_BOOLEAN_PROPERTY +AQ$_JMS_HEADER.SET_BYTE_PROPERTY +AQ$_JMS_HEADER.SET_DOUBLE_PROPERTY +AQ$_JMS_HEADER.SET_FLOAT_PROPERTY +AQ$_JMS_HEADER.SET_GROUPID +AQ$_JMS_HEADER.SET_GROUPSEQ +AQ$_JMS_HEADER.SET_INT_PROPERTY +AQ$_JMS_HEADER.SET_LONG_PROPERTY +AQ$_JMS_HEADER.SET_REPLYTO +AQ$_JMS_HEADER.SET_SHORT_PROPERTY +AQ$_JMS_HEADER.SET_STRING_PROPERTY +AQ$_JMS_HEADER.SET_TYPE +AQ$_JMS_HEADER.SET_USERID +AQ$_JMS_MAP_MESSAGE.CLEAN +AQ$_JMS_MAP_MESSAGE.CLEAN_ALL +AQ$_JMS_MAP_MESSAGE.CLEAR_BODY +AQ$_JMS_MAP_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_MAP_MESSAGE.CONSTRUCT +AQ$_JMS_MAP_MESSAGE.FLUSH +AQ$_JMS_MAP_MESSAGE.GET_APPID +AQ$_JMS_MAP_MESSAGE.GET_BOOLEAN +AQ$_JMS_MAP_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_BYTE +AQ$_JMS_MAP_MESSAGE.GET_BYTES +AQ$_JMS_MAP_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_CHAR +AQ$_JMS_MAP_MESSAGE.GET_DOUBLE +AQ$_JMS_MAP_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_EXCEPTION +AQ$_JMS_MAP_MESSAGE.GET_FLOAT +AQ$_JMS_MAP_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_GROUPID +AQ$_JMS_MAP_MESSAGE.GET_GROUPSEQ +AQ$_JMS_MAP_MESSAGE.GET_INT +AQ$_JMS_MAP_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_LONG +AQ$_JMS_MAP_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_NAMES +AQ$_JMS_MAP_MESSAGE.GET_OBJECT +AQ$_JMS_MAP_MESSAGE.GET_REPLYTO +AQ$_JMS_MAP_MESSAGE.GET_SHORT +AQ$_JMS_MAP_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_SIZE +AQ$_JMS_MAP_MESSAGE.GET_STRING +AQ$_JMS_MAP_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_TYPE +AQ$_JMS_MAP_MESSAGE.GET_USERID +AQ$_JMS_MAP_MESSAGE.ITEM_EXISTS +AQ$_JMS_MAP_MESSAGE.PREPARE +AQ$_JMS_MAP_MESSAGE.SET_APPID +AQ$_JMS_MAP_MESSAGE.SET_BOOLEAN +AQ$_JMS_MAP_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_BYTE +AQ$_JMS_MAP_MESSAGE.SET_BYTES +AQ$_JMS_MAP_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_CHAR +AQ$_JMS_MAP_MESSAGE.SET_DOUBLE +AQ$_JMS_MAP_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_FLOAT +AQ$_JMS_MAP_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_GROUPID +AQ$_JMS_MAP_MESSAGE.SET_GROUPSEQ +AQ$_JMS_MAP_MESSAGE.SET_INT +AQ$_JMS_MAP_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_LONG +AQ$_JMS_MAP_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_REPLYTO +AQ$_JMS_MAP_MESSAGE.SET_SHORT +AQ$_JMS_MAP_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_STRING +AQ$_JMS_MAP_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_TYPE +AQ$_JMS_MAP_MESSAGE.SET_USERID +AQ$_JMS_MESSAGE.CAST_TO_BYTES_MSG +AQ$_JMS_MESSAGE.CAST_TO_MAP_MSG +AQ$_JMS_MESSAGE.CAST_TO_OBJECT_MSG +AQ$_JMS_MESSAGE.CAST_TO_STREAM_MSG +AQ$_JMS_MESSAGE.CAST_TO_TEXT_MSG +AQ$_JMS_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_MESSAGE.CONSTRUCT +AQ$_JMS_MESSAGE.GET_APPID +AQ$_JMS_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_MESSAGE.GET_BYTES +AQ$_JMS_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_MESSAGE.GET_GROUPID +AQ$_JMS_MESSAGE.GET_GROUPSEQ +AQ$_JMS_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_MESSAGE.GET_REPLYTO +AQ$_JMS_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_MESSAGE.GET_TEXT +AQ$_JMS_MESSAGE.GET_TYPE +AQ$_JMS_MESSAGE.GET_USERID +AQ$_JMS_MESSAGE.SET_APPID +AQ$_JMS_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_MESSAGE.SET_BYTES +AQ$_JMS_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_MESSAGE.SET_GROUPID +AQ$_JMS_MESSAGE.SET_GROUPSEQ +AQ$_JMS_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_MESSAGE.SET_REPLYTO +AQ$_JMS_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_MESSAGE.SET_TEXT +AQ$_JMS_MESSAGE.SET_TYPE +AQ$_JMS_MESSAGE.SET_USERID +AQ$_JMS_STREAM_MESSAGE.CLEAN +AQ$_JMS_STREAM_MESSAGE.CLEAN_ALL +AQ$_JMS_STREAM_MESSAGE.CLEAR_BODY +AQ$_JMS_STREAM_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_STREAM_MESSAGE.CONSTRUCT +AQ$_JMS_STREAM_MESSAGE.FLUSH +AQ$_JMS_STREAM_MESSAGE.GET_APPID +AQ$_JMS_STREAM_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_EXCEPTION +AQ$_JMS_STREAM_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_GROUPID +AQ$_JMS_STREAM_MESSAGE.GET_GROUPSEQ +AQ$_JMS_STREAM_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_MODE +AQ$_JMS_STREAM_MESSAGE.GET_REPLYTO +AQ$_JMS_STREAM_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_TYPE +AQ$_JMS_STREAM_MESSAGE.GET_USERID +AQ$_JMS_STREAM_MESSAGE.PREPARE +AQ$_JMS_STREAM_MESSAGE.READ_BOOLEAN +AQ$_JMS_STREAM_MESSAGE.READ_BYTE +AQ$_JMS_STREAM_MESSAGE.READ_BYTES +AQ$_JMS_STREAM_MESSAGE.READ_CHAR +AQ$_JMS_STREAM_MESSAGE.READ_DOUBLE +AQ$_JMS_STREAM_MESSAGE.READ_FLOAT +AQ$_JMS_STREAM_MESSAGE.READ_INT +AQ$_JMS_STREAM_MESSAGE.READ_LONG +AQ$_JMS_STREAM_MESSAGE.READ_OBJECT +AQ$_JMS_STREAM_MESSAGE.READ_SHORT +AQ$_JMS_STREAM_MESSAGE.READ_STRING +AQ$_JMS_STREAM_MESSAGE.RESET +AQ$_JMS_STREAM_MESSAGE.SET_APPID +AQ$_JMS_STREAM_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_GROUPID +AQ$_JMS_STREAM_MESSAGE.SET_GROUPSEQ +AQ$_JMS_STREAM_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_REPLYTO +AQ$_JMS_STREAM_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_TYPE +AQ$_JMS_STREAM_MESSAGE.SET_USERID +AQ$_JMS_STREAM_MESSAGE.WRITE_BOOLEAN +AQ$_JMS_STREAM_MESSAGE.WRITE_BYTE +AQ$_JMS_STREAM_MESSAGE.WRITE_BYTES +AQ$_JMS_STREAM_MESSAGE.WRITE_CHAR +AQ$_JMS_STREAM_MESSAGE.WRITE_DOUBLE +AQ$_JMS_STREAM_MESSAGE.WRITE_FLOAT +AQ$_JMS_STREAM_MESSAGE.WRITE_INT +AQ$_JMS_STREAM_MESSAGE.WRITE_LONG +AQ$_JMS_STREAM_MESSAGE.WRITE_SHORT +AQ$_JMS_STREAM_MESSAGE.WRITE_STRING +AQ$_JMS_TEXT_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_TEXT_MESSAGE.CONSTRUCT +AQ$_JMS_TEXT_MESSAGE.GET_APPID +AQ$_JMS_TEXT_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_GROUPID +AQ$_JMS_TEXT_MESSAGE.GET_GROUPSEQ +AQ$_JMS_TEXT_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_REPLYTO +AQ$_JMS_TEXT_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_TEXT +AQ$_JMS_TEXT_MESSAGE.GET_TYPE +AQ$_JMS_TEXT_MESSAGE.GET_USERID +AQ$_JMS_TEXT_MESSAGE.SET_APPID +AQ$_JMS_TEXT_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_GROUPID +AQ$_JMS_TEXT_MESSAGE.SET_GROUPSEQ +AQ$_JMS_TEXT_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_REPLYTO +AQ$_JMS_TEXT_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_TEXT +AQ$_JMS_TEXT_MESSAGE.SET_TYPE +AQ$_JMS_TEXT_MESSAGE.SET_USERID +AQ$_REG_INFO.AQ$_REG_INFO +AQ_HA_NOTIFICATION +AQ_HA_NOTIFICATIONS +ARCHIVAL_THREAD# +ARCHIVED +ARCHIVED_SEQ# +ARCHIVED_THREAD# +ARCHIVELOG_CHANGE# +ARCHIVELOG_COMPRESSION +ARCHIVER +ARCHIVE_CHANGE# +ARCHIVE_NAME +ARCHIVE_TABLE_NAME +ARCHIVE_TIME +ARG1 +ARG2 +ARG3 +ARG4 +ARG5 +ARGNUM +ARGUMENTS +ARGUMENT_CLASS +ARGUMENT_NAME +ARGUMENT_POSITION +ARGUMENT_TYPE +ARRAY_DEPTH +ARRAY_DML +ARRAY_LEN +ARRAY_SIZE +ARRAY_TYPE_NAME +ARRAY_TYPE_SCHEMA +ARRHASVALUE. +ARU_PLATFORM_UTIL. +ARU_PLATFORM_UTIL.GET_HOME_ARU_PLATFORM +ASSEMBLE_LOBS +ASSEMBLY_NAME +ASSOCIATION +AST_EVENT0 +ASYNC +ASYNCH_IO +ASYNC_BLOCKS +AS_REPLAY. +AS_REPLAY.END_AS_REPLAY +AS_REPLAY.INITIALIZE_AS_REPLAY +AS_REPLAY.PREPARE_AS_REPLAY +AS_REPLAY.PROCESS_AS_CAPTURE +AS_REPLAY.START_AS_REPLAY +ATTACHED_SESSIONS +ATTACH_ID +ATTACH_MODE +ATTR1 +ATTR10 +ATTR2 +ATTR3 +ATTR4 +ATTR5 +ATTR6 +ATTR7 +ATTR8 +ATTR9 +ATTRB1_NAME +ATTRB1_VAL +ATTRB2_NAME +ATTRB2_VAL +ATTRB3_NAME +ATTRB3_VAL +ATTRB4_NAME +ATTRB4_VAL +ATTRB5_NAME +ATTRB5_VAL +ATTRIBUTE +ATTRIBUTES +ATTRIBUTE_INCARNATION +ATTRIBUTE_INDEX +ATTRIBUTE_NAME +ATTRIBUTE_ROLE +ATTRIBUTE_TRANSFORMATION +ATTRIBUTE_TYPE +ATTR_NAME +ATTR_NO +ATTR_TYPE_MOD +ATTR_TYPE_NAME +ATTR_TYPE_OWNER +AUD +AUDIT_ACTIONS +AUDIT_OPTION +AUDIT_SESSIONID +AUDIT_TRAIL +AUDIT_TYPE +AUDSID +AUTHENTICATION +AUTHENTICATION_TYPE +AUTHID +AUTHORIZATION_CONSTRAINT +AUTH_CHECK_MISMATCH +AUTH_GROUP_PERMISSIONS_TR. +AUTH_GROUP_TR. +AUTH_MESSAGE_TR. +AUTH_PERMISSION_TR. +AUTH_PRIVILEGES +AUTH_USER_GROUPS_TR. +AUTH_USER_TR. +AUTH_USER_USER_PERMISSIONS_TR. +AUTOBACKUP_COUNT +AUTOBACKUP_DONE +AUTOEXTENSIBLE +AUTOPURGE +AUTOTASK_STATUS +AUTO_DROP +AUTO_FILTERED +AUTO_MERGE_THRESHOLD +AUTO_TASKID +AUTO_TXN_BUFFER_SIZE +AUX_COUNT +AUX_NAME +AVAILABLE_COMMITTED_TXN +AVAILABLE_MESSAGE_CREATE_TIME +AVAILABLE_MESSAGE_NUMBER +AVAILABLE_TIME +AVAILABLE_TXN +AVAILABLE_WORK_SIZE +AVEACTIVE +AVERAGE +AVERAGE_CONVERT_TIME +AVERAGE_MSG_AGE +AVERAGE_READ_TIME +AVERAGE_TRANSACTION_CPU_TIME +AVERAGE_TRANSACTION_TIME +AVERAGE_WAIT +AVERAGE_WAITER_COUNT +AVERAGE_WAIT_FG +AVERAGE_WRITE_TIME +AVESHRINK +AVGIOTIM +AVGREADTIME +AVGWRITETIME +AVG_BLOCKS_PER_KEY +AVG_BUF_RATE +AVG_BYTE_PER_BUF +AVG_BYTE_RATE +AVG_CACHED_BLOCKS +AVG_CACHE_HIT_RATIO +AVG_CLT_BUF_RATE +AVG_CLT_BYTE_PER_BUF +AVG_CLT_BYTE_RATE +AVG_COL_LEN +AVG_CPU_UTILIZATION +AVG_DATA_BLOCKS_PER_KEY +AVG_EVENTS_PER_LOOP +AVG_EVENT_RATE +AVG_FREE_SIZE +AVG_HARD_PARSE_TIME +AVG_IN_CONNECT_RATE +AVG_LATENCY +AVG_LEAF_BLOCKS_PER_KEY +AVG_LOOP_RATE +AVG_MSG_AGE +AVG_MSG_RATE +AVG_NUMBER +AVG_OUT_CONNECT_RATE +AVG_RECONNECT_RATE +AVG_ROW_LEN +AVG_RUNNING_SESSIONS +AVG_SIZE +AVG_SPACE +AVG_SPACE_FREELIST_BLOCKS +AVG_SVR_BUF_RATE +AVG_SVR_BYTE_PER_BUF +AVG_SVR_BYTE_RATE +AVG_TIME +AVG_USED_SIZE +AVG_WAITING_SESSIONS +AVG_WAIT_TIME +AWM_CREATEXDSFOLDER. +AWR_BEGIN_SNAP +AWR_DBID +AWR_END_SNAP +AWR_EXPORTED +AWR_FLUSH_BYTES +AWR_FLUSH_COUNT +AWR_FLUSH_ELAPSED_TIME +AWR_FLUSH_EMERGENCY_COUNT +AW_DROP_PROC. +AW_DROP_TRG. +AW_NAME +AW_NUMBER +AW_REN_PROC. +AW_REN_TRG. +AW_TRUNC_PROC. +AW_TRUNC_TRG. +AW_VERSION +BACKEDOUT +BACKED_BY_OSB +BACKED_BY_VSS +BACKED_UP +BACKGROUND +BACKOUT_MODE +BACKOUT_SEQ +BACKOUT_SQL_ID +BACKUPFILENAME +BACKUP_COUNT +BACKUP_FUZZY +BACKUP_TYPE +BAD +BAD_COLUMN +BANNER +BASELINE_ID +BASELINE_NAME +BASELINE_NAME_PREFIX +BASELINE_TYPE +BASE_CONFLICT_TYPE +BASE_OBJECT +BASE_OBJECT_TYPE +BASE_ONAME +BASE_PHYSICAL_READS +BASE_REFERENCE_NAME +BASE_SEQUENCE +BASE_SNAME +BASE_TABLE +BASE_TABLE_NAME +BASE_TABLE_OWNER +BASE_TYPE +BASE_TYPE_NAME +BASE_TYPE_SCHEMA +BCN_STEPGROUP_DELETE_TRIGGER. +BCN_STEPGROUP_INSERT_TRIGGER. +BCN_STEP_DELETE_TRIGGER. +BCN_STEP_INSERT_TRIGGER. +BCN_TXN_DELETE_TRIGGER. +BCN_TXN_INSERT_TRIGGER. +BEFORE_ROW +BEFORE_STATEMENT +BEGIN_DATE +BEGIN_INTERVAL_TIME +BEGIN_SCN +BEGIN_SNAP_ID +BEGIN_TIME +BENEFIT +BENEFIT_MAX +BENEFIT_SOFAR +BENEFIT_TYPE +BFILE +BFILE_STR +BIGFILE +BINARY +BINDING +BINDING# +BINDS +BINDS_CAPTURED +BINDS_XML +BIND_AWARE +BIND_DATA +BIND_EQUIV_FAILURE +BIND_LENGTH_UPGRADEABLE +BIND_MEM_LOC +BIND_MISMATCH +BIND_NAME +BIND_PEEKED_PQ_MISMATCH +BIND_SET_HASH_VALUE +BIND_UACS_DIFF +BIND_VARS +BITMAP +BITMAP_TREE +BITS_SET +BIU_WWV_FLOW_HNT_COL_INFO. +BIU_WWV_FLOW_HNT_LOV_DATA. +BIU_WWV_FLOW_HNT_TABLE_INFO. +BIU_WWV_FLOW_REPORT_LAYOUTS. +BIU_WWV_FLOW_SHARED_QUERIES. +BIU_WWV_FLOW_SQRY_SQL. +BI_WWV_DICTIONARY$_FER. +BLACKOUT_CHANGE. +BLACKOUT_STATUS. +BLACKOUT_WINDOW_INSERT. +BLASTN_ALIGN. +BLASTN_COMPRESS. +BLASTN_MATCH. +BLASTP_ALIGN. +BLASTP_MATCH. +BLAST_CUR. +BLEVEL +BLOCK +BLOCK# +BLOCK1_OFFSET +BLOCKED +BLOCKER +BLOCKER_CHAIN_ID +BLOCKER_INSTANCE +BLOCKER_INSTANCE_ID +BLOCKER_IS_VALID +BLOCKER_OSID +BLOCKER_PID +BLOCKER_SESS_SERIAL# +BLOCKER_SID +BLOCKING_COMPONENT +BLOCKING_HANGCHAIN_INFO +BLOCKING_INSTANCE +BLOCKING_INST_ID +BLOCKING_OTHERS +BLOCKING_SESSION +BLOCKING_SESSION_SERIAL# +BLOCKING_SESSION_STATUS +BLOCKS +BLOCKSIZE +BLOCKS_CACHED +BLOCKS_COALESCED +BLOCKS_DECRYPTED +BLOCKS_ENCRYPTED +BLOCKS_FREE +BLOCKS_READ +BLOCKS_SKIPPED_IN_CELL +BLOCKS_USED +BLOCK_CHANGES +BLOCK_COMMENT +BLOCK_COUNT +BLOCK_GETS +BLOCK_ID +BLOCK_NUM +BLOCK_SIZE +BL_MOVED +BNO +BODY +BOTTLENECK_IDENTIFIED +BPID +BP_COPY# +BP_KEY +BP_PIECE# +BRANCH +BRANCHES +BRANCHID +BRANCH_SCN +BREAKS +BREAK_TRANS_TO_MASTERDEF +BREAK_TRANS_TO_NEW_MASTERS +BROKEN +BROWSED_MSGS +BSLN. +BSLN.ACTIVATE_BASELINE +BSLN.BASELINE_GUID +BSLN.COMPUTE_ALL_STATISTICS +BSLN.COMPUTE_STATISTICS +BSLN.CREATE_BASELINE_STATIC +BSLN.DATASOURCE_GUID +BSLN.DATA_AND_MODEL_OK +BSLN.DEACTIVATE_BASELINE +BSLN.DELETE_BSLN_JOBS +BSLN.DEREGISTER_DATASOURCE +BSLN.DISABLE +BSLN.DROP_BASELINE +BSLN.ENABLE +BSLN.IS_ENABLED +BSLN.METRIC_SIGNAL_QUALITIES +BSLN.METRIC_UID +BSLN.MOVING_WINDOW_BASELINE_GUID +BSLN.REGISTER_DATASOURCE +BSLN.SET_ALL_THRESHOLDS +BSLN.SET_DEFAULT_TIMEGROUPING +BSLN.SET_THRESHOLD_PARAMETERS +BSLN.SUBINTERVAL_CODE +BSLN.TARGET_UID +BSLN.THIS_TARGET_UID +BSLN.TIMEGROUP +BSLN.UNSET_THRESHOLD_PARAMETERS +BSLN.UPDATE_MOVING_WINDOW +BSLN_INTERNAL. +BSLN_INTERNAL.ALLOW_DROP +BSLN_INTERNAL.BASELINE_REC +BSLN_INTERNAL.COMPUTE_LOAD_MAS +BSLN_INTERNAL.COMPUTE_LOAD_MES_TG +BSLN_INTERNAL.COMPUTE_LOAD_MES_XX +BSLN_INTERNAL.COMPUTE_STATISTICS +BSLN_INTERNAL.DEDUCED_TIMEGROUPING +BSLN_INTERNAL.DEDUCE_TIMEGROUPINGS +BSLN_INTERNAL.DELETE_BSLN_JOBS +BSLN_INTERNAL.ELECTED_TIMEGROUPING +BSLN_INTERNAL.HOUR_OF_WEEK +BSLN_INTERNAL.IN_EFFECT_THRESHOLD_REC +BSLN_INTERNAL.LOAD_DAY_OFFSETS +BSLN_INTERNAL.MAINTAIN_STATISTICS +BSLN_INTERNAL.MAINTAIN_THRESHOLDS +BSLN_INTERNAL.MES_TG +BSLN_INTERNAL.MES_XX +BSLN_INTERNAL.METRIC_SIGNAL_QUALITIES +BSLN_INTERNAL.N_FIELD +BSLN_INTERNAL.SET_ALL_THRESHOLDS +BSLN_INTERNAL.SET_BASELINE_METRIC_THRESHOLD +BSLN_INTERNAL.SET_LAST_COMPUTE_DATE +BSLN_INTERNAL.SIGNAL_QUALITY_SCORE +BSLN_INTERNAL.STD7 +BSLN_INTERNAL.THIS_DBID +BSLN_INTERNAL.THIS_INSTANCE_NAME +BSLN_INTERNAL.THRESHOLD_REC +BSLN_INTERNAL.UNSET_ALL_THRESHOLDS +BSLN_INTERNAL.UNSET_THRESHOLD +BSLN_INTERNAL.W_FIELD +BS_BYTES +BS_COMPLETION_TIME +BS_COMPRESSED +BS_COPIES +BS_COUNT +BS_DEVICE_TYPE +BS_INCR_TYPE +BS_KEY +BS_PIECES +BS_STAMP +BS_STATUS +BS_TAG +BS_TYPE +BTYPE +BTYPE_KEY +BUCKET +BUCKET_ID +BUCKET_NO +BUCKET_NUMBER +BUFFER +BUFFERED_DML_MISMATCH +BUFFERS +BUFFERS_FOR_ESTIMATE +BUFFER_BUSY_WAIT +BUFFER_BUSY_WAITS_DELTA +BUFFER_BUSY_WAITS_TOTAL +BUFFER_COUNT +BUFFER_GETS +BUFFER_GETS_DELTA +BUFFER_GETS_TOTAL +BUFFER_POOL +BUFFER_SIZE +BUF_ADDRESS +BUF_FLAG +BUF_GOT +BUF_LENGTH +BUGNO +BUG_NUMBER +BUILDER_WORK_SIZE +BUILD_DURATION +BUILD_MODE +BUILD_PROCESS +BUILD_PROCESS_NAME +BUILD_TIME +BUNDLE_SERIES +BUSY +BUSY_TIME_CUR +BUSY_TIME_TOTAL +BYPASS_RECURSIVE_CHECK +BYPASS_UJVC +BYTES +BYTES_CACHED +BYTES_COALESCED +BYTES_FREE +BYTES_OF_REDO_MINED +BYTES_PROCESSED +BYTES_READ +BYTES_RECEIVED +BYTES_SENT +BYTES_USED +BYTES_WRITTEN +CACHE +CACHE# +CACHED_OBJECTS +CACHEHINT +CACHE_CB +CACHE_CNT +CACHE_FLUSHES +CACHE_ID +CACHE_KEY +CACHE_LOBS +CACHE_NAME +CACHE_REFRESHES +CACHE_SHRINKS +CACHE_SIZE +CACHE_TEMP_TABLE +CACHE_WRITES +CALIBRATION_TIME +CALLBACK +CALLOUT +CALLSPERSEC +CALLS_ENQUEUED +CALL_COUNTER +CALL_ID +CAN_PURGE +CAN_UNDROP +CAN_USE_LOG +CAPTURE# +CAPTURED +CAPTURED_SCN +CAPTURED_VALUES +CAPTURE_BYTES_RECEIVED +CAPTURE_CONN +CAPTURE_DIR +CAPTURE_ENABLED +CAPTURE_ERROR +CAPTURE_FORMAT +CAPTURE_ID +CAPTURE_LOCATOR +CAPTURE_MESSAGE_CREATE_TIME +CAPTURE_MESSAGE_NUMBER +CAPTURE_MODE +CAPTURE_NAME +CAPTURE_OVERHEAD +CAPTURE_QUEUE_NAME +CAPTURE_QUEUE_TABLE_NAME +CAPTURE_SCOPE +CAPTURE_SIZE +CAPTURE_TIME +CAPTURE_TYPE +CAPTURE_USER +CAPTURE_VALUES +CARDINALITY +CARTRIDGE. +CARTRIDGE.CHECK_COMPONENT_STATUS +CARTRIDGE.CHECK_JAVA_STATUS +CARTRIDGE.CLEAR_CARTRIDGE_COMPONENTS +CARTRIDGE.DBMS_FEATURE_DICOM +CARTRIDGE.DBMS_FEATURE_MULTIMEDIA +CAT +CATALOG_TYP.CATEGORY_DESCRIBE +CATALOG_TYP.GETCATALOGNAME +CATEGORY +CATEGORY_TYP.CATEGORY_DESCRIBE +CATINDEXMETHODS.ODCIGETINTERFACES +CATINDEXMETHODS.ODCIINDEXALTER +CATINDEXMETHODS.ODCIINDEXCLOSE +CATINDEXMETHODS.ODCIINDEXCREATE +CATINDEXMETHODS.ODCIINDEXDELETE +CATINDEXMETHODS.ODCIINDEXDROP +CATINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +CATINDEXMETHODS.ODCIINDEXFETCH +CATINDEXMETHODS.ODCIINDEXGETMETADATA +CATINDEXMETHODS.ODCIINDEXINSERT +CATINDEXMETHODS.ODCIINDEXMERGEPARTITION +CATINDEXMETHODS.ODCIINDEXSPLITPARTITION +CATINDEXMETHODS.ODCIINDEXSTART +CATINDEXMETHODS.ODCIINDEXTRUNCATE +CATINDEXMETHODS.ODCIINDEXUPDATE +CATINDEXMETHODS.ODCIINDEXUTILCLEANUP +CATINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +CBR +CBR_FORCED_WRITE +CCLASS_NAME +CCWAIT_DELTA +CCWAIT_TOTAL +CDC_ALTER_CTABLE_BEFORE. +CDC_CREATE_CTABLE_AFTER. +CDC_CREATE_CTABLE_BEFORE. +CDC_DROP_CTABLE_BEFORE. +CELLNAME +CELL_FLASH_CACHE +CELL_HASHVAL +CELL_NAME +CELL_PATH +CELL_UNCOMPRESSED_BYTES_DELTA +CELL_UNCOMPRESSED_BYTES_TOTAL +CERT_ID +CFG_ID +CHAIN_CNT +CHAIN_ID +CHAIN_IS_CYCLE +CHAIN_NAME +CHAIN_OWNER +CHAIN_ROW_EXCESS_DELTA +CHAIN_ROW_EXCESS_TOTAL +CHAIN_SIGNATURE +CHAIN_SIGNATURE_HASH +CHANGE# +CHANGELAG +CHANGESCN_BASE +CHANGESCN_WRAP +CHANGE_DUPKEY_ERROR_INDEX +CHANGE_PROPAGATIONS +CHANGE_PROPAGATION_SETS +CHANGE_SETS +CHANGE_SET_NAME +CHANGE_SET_PUBLISHER +CHANGE_SOURCES +CHANGE_SOURCE_NAME +CHANGE_TABLES +CHANGE_TABLE_NAME +CHANGE_TABLE_OWNER +CHANGE_TABLE_SCHEMA +CHARACTER_SET_NAME +CHARACTER_SID +CHAR_COL_DECL_LENGTH +CHAR_LENGTH +CHAR_USED +CHAR_VALUE +CHECKPOINT_CHANGE# +CHECKPOINT_COUNT +CHECKPOINT_INTERVAL +CHECKPOINT_RETENTION_TIME +CHECKPOINT_SCN +CHECKPOINT_TIME +CHECK_ACL_REWRITE +CHECK_DUPLICATE_TARGETS. +CHECK_ID +CHECK_NAME +CHECK_UPGRADE. +CHILD# +CHILD_ADDR +CHILD_ADDRESS +CHILD_COUNT +CHILD_HANDLE +CHILD_IDX +CHILD_JOIN_COLUMN +CHILD_JOIN_OWNER +CHILD_JOIN_TABLE +CHILD_LATCH +CHILD_LEVEL_NAME +CHILD_LOCK +CHILD_NUMBER +CHILD_PIN +CHK_OPTION +CHK_SDO_DIMNAME. +CHNF$_REG_INFO.CHNF$_REG_INFO +CHOOSE +CHRONOS_REPOSITORY_COLLECTIONS. +CHRONOS_REPOSITORY_COLLECTIONS.CHRONOS_REGION_COLLECTION +CHUNK +CHUNK# +CHUNK_COM +CHUNK_ID +CHUNK_PTR +CHUNK_SIZE +CHUNK_TYPE +CH_ID +CIRCUIT +CKPT_BLOCK_WRITES +CLASS +CLASS# +CLASS_INDEX +CLASS_NAME +CLASS_TARGET_NAMESPACE +CLB_GOAL +CLEANDC +CLEANUP_TIME +CLIENT +CLIENTADDR +CLIENTID +CLIENTIDENTIFIER +CLIENTOPAQUEIDENTIFIER +CLIENT_CHARSET +CLIENT_CONNECTION +CLIENT_DBID +CLIENT_DRIVER +CLIENT_HOST +CLIENT_ID +CLIENT_IDENTIFIER +CLIENT_INFO +CLIENT_IP_ADDRESS. +CLIENT_LOBATTR +CLIENT_NAME +CLIENT_OCI_LIBRARY +CLIENT_OS_USER +CLIENT_PID +CLIENT_PROCESS +CLIENT_REGID +CLIENT_REQ_TIMEOUTS +CLIENT_RESULT_CACHE_STATS$ +CLIENT_TAG +CLIENT_TYPE +CLIENT_VERSION +CLOCK +CLONED_CAPTURE_NAME +CLONED_CAPTURE_STATUS +CLONED_QUEUE_NAME +CLONED_QUEUE_OWNER +CLONED_STREAMS_NAME +CLOSE_REASON +CLOSE_TIME +CLSID +CLSNAME +CLSNAME_ID +CLS_NAME +CLU +CLUSTER +CLUSTERING_FACTOR +CLUSTER_NAME +CLUSTER_OWNER +CLUSTER_TYPE +CLUSTER_WAIT_TIME +CLU_COLUMN_NAME +CLWAIT_DELTA +CLWAIT_TOTAL +CMON_ADDR +CNAME +CNT_500B +CNT_8K +CNUM_MSGS +CNUM_REPL +CNUM_SET +CNUM_WRITE +COALESCE_SQ +CODE_SIZE +COL +COLD_BYTES_READ +COLD_BYTES_WRITTEN +COLD_READS +COLD_USED_MB +COLD_WRITES +COLLECTION_DISABLE_TRIGGER. +COLLECTSTATS. +COLL_ITEMS_INS_TRIG. +COLL_ITEMS_METRICS_INS_TRIG. +COLL_TYPE +COLS +COLUMN_COUNT +COLUMN_EXPRESSION +COLUMN_FUNCTION +COLUMN_ID +COLUMN_LENGTH +COLUMN_LIST +COLUMN_NAME +COLUMN_OPTION +COLUMN_POSITION +COLUMN_PRIVILEGES +COLUMN_STATS +COLUMN_TYPE +COLUMN_USAGE +COLUMN_VALUE +COM +COMMAND +COMMAND_ID +COMMAND_LINE +COMMAND_NAME +COMMAND_TYPE +COMMENT$TEXT +COMMENTS +COMMENT_TEXT +COMMIT# +COMMITSCN +COMMITTED_DATA_ONLY +COMMIT_JTIME +COMMIT_POINT_STRENGTH +COMMIT_POSITION +COMMIT_SCN +COMMIT_SCN_BASED +COMMIT_TIME +COMMIT_TIMESTAMP +COMMIT_WAIT_SCN +COMMIT_WTIME +COMP1_NAME +COMP1_VAL +COMP2_NAME +COMP2_VAL +COMP3_NAME +COMP3_VAL +COMP4_NAME +COMP4_VAL +COMP5_NAME +COMP5_VAL +COMPARE_OLD_ON_DELETE +COMPARE_OLD_ON_UPDATE +COMPARISON_MODE +COMPARISON_NAME +COMPATIBILITY +COMPATIBLE +COMPATIBLE_VERSION +COMPENSATING_TXN_NAME +COMPENSATING_XID +COMPID +COMPILE_STATE +COMPLETED +COMPLETED_ACTIONS +COMPLETION_TIME +COMPONENT +COMPONENT_CHANGED_TIME +COMPONENT_DB +COMPONENT_ID +COMPONENT_NAME +COMPONENT_TYPE +COMPOSITE +COMPOSITE_CATEGORY_TYP.CATEGORY_DESCRIBE +COMPOSITE_TARGET_GUID +COMPOSITE_TARGET_NAME +COMPOSITE_TARGET_TYPE +COMPOUND_INDEX +COMPRESSED +COMPRESSION +COMPRESSION_RATIO +COMPRESS_FOR +COMPUTE_AGENT_SIDE_STATUS. +COMP_ID +COMP_NAME +CONCAT_STEPS. +CONCUR +CONCURRENCY_WAIT_TIME +CONDITION +CONDITIONS_PROCESSED +CONF# +CONFIG_UTIL. +CONFIG_UTIL.CONCAT_FILE_NAME +CONFIRMED +CONFLICT_MOD +CONFLICT_TYPE +CONFTYPE +CONFVAL +CONF_INDX +CONNECTIONS +CONNECTION_ADDR +CONNECTION_MODE +CONNECTION_POOL +CONNECTION_STATUS +CONNECTS +CONNECTS_TOTAL +CONNECT_BY_CB_WHR_ONLY +CONNECT_BY_COMBINE_SW +CONNECT_BY_COST_BASED +CONNECT_BY_ELIM_DUPS +CONNECT_BY_FILTERING +CONNECT_INFO +CONNECT_STRING +CONNECT_TIME_SCALE +CONNECT_USER +CONN_ID +CONSECUTIVE_OCCURRENCES +CONSISTENT_CHANGES +CONSISTENT_GETS +CONSISTENT_SOLVE_SPEC +CONSTRAINT_NAME +CONSTRAINT_TYPE +CONSUMED_CPU_TIME +CONSUMED_SCN +CONSUMER_GROUP +CONSUMER_GROUP_ID +CONSUMER_GROUP_NAME +CONSUMER_NAME +CONS_TYPE_NAME +CONS_TYPE_ONLY +CONS_TYPE_OWNER +CONTAINER_COLUMN +CONTAINER_NAME +CONTAINER_OWNER +CONTAINS_VIEWS +CONTENTS +CONTENTSCHEMAIS. +CONTEXT +CONTEXT_SIZE +CONTEXT_TYPE +CONTROL +CONTROLFILE_CHANGE# +CONTROLFILE_CONVERTED +CONTROLFILE_CREATED +CONTROLFILE_INCLUDED +CONTROLFILE_SEQUENCE# +CONTROLFILE_TIME +CONTROLFILE_TYPE +CONVERTED_FILE +CONVERT_COUNT +CONVERT_OPT_DUBVALUE +CONVERT_OPT_EXPRESS +CONVERT_OPT_GETVALUE +CONVERT_OPT_NODEADLOCKBLOCK +CONVERT_OPT_NODEADLOCKWAIT +CONVERT_OPT_NOQUEUE +CONVERT_OPT_NOVALUE +CONVERT_OPT_PUTVALUE +CONVERT_TYPE +COORD_INSTANCE_ID +COORD_LWM_LAG +COORD_SESSION_ID +COORD_TOTAL_APPLIED +COORD_TOTAL_RECEIVED +COORD_TOTAL_ROLLBACKS +COORD_TOTAL_WAIT_CMTS +COORD_TOTAL_WAIT_DEPS +COPY# +COPY_KEY +COPY_RECID +COPY_STAMP +CORRELATED_ID +CORRELATION_LEVEL +CORRUPT +CORRUPTION_CHANGE# +CORRUPTION_TYPE +CORRUPT_XID +COST +COST_XML_QUERY_REWRITE +COUNT +COUNTER +COUNT_ROWS +COUPLING +CPF_POLICY. +CPF_POLICY.CPF_PAGE_INFO +CPF_POLICY.CPF_PAGE_INFO_FILTER_BY_GROUP +CPF_POLICY.CPF_QUERY +CPF_POLICY.GET_ADV_HOME_COUNT +CPF_POLICY.GET_EXCLUSIVE_LOCK +CPF_POLICY.RELEASE_LOCK +CPF_POLICY.RUN_CPF_POLICY_EVALUATION +CPF_POLICY.RUN_SETUP_CPF_ADV_HOME_PATCH +CPF_POLICY.SETUP_CPF_ADV_HOME_PATCH +CPF_POLICY.SETUP_CPF_FOR_NAMED_HOST +CPF_POLICY.SETUP_CPF_METRIC_SOURCE +CPU +CPUPERCALL +CPUTIME +CPUWAITPERCALL +CPU_CAPABLE +CPU_CONSUMED_TIME +CPU_CORE_COUNT +CPU_CORE_COUNT_CURRENT +CPU_CORE_COUNT_HIGHWATER +CPU_COST +CPU_COSTING +CPU_COUNT +CPU_COUNT_CURRENT +CPU_COUNT_HIGHWATER +CPU_DECISIONS +CPU_DECISIONS_EXCLUSIVE +CPU_DECISIONS_WON +CPU_MANAGED +CPU_METHOD +CPU_P1 +CPU_P2 +CPU_P3 +CPU_P4 +CPU_P5 +CPU_P6 +CPU_P7 +CPU_P8 +CPU_SECS_CUR +CPU_SECS_TOTAL +CPU_SOCKET_COUNT +CPU_SOCKET_COUNT_CURRENT +CPU_SOCKET_COUNT_HIGHWATER +CPU_TIME +CPU_TIME_DELTA +CPU_TIME_TOTAL +CPU_USED +CPU_UTILIZATION_LIMIT +CPU_WAITS +CPU_WAIT_TIME +CQ_TOTALQ +CQ_WAIT +CRE +CREATED +CREATED_BY +CREATED_SCN +CREATETIME +CREATE_BYTES +CREATE_DATE +CREATE_TIME +CREATIONTIME +CREATION_CHANGE# +CREATION_DATE +CREATION_DATE_HASH +CREATION_TIME +CREATION_TIMESTAMP +CREATOR +CREATOR_ADDR +CREATOR_SERIAL# +CREATOR_UID +CREDENTIAL_NAME +CREDENTIAL_OWNER +CRITICAL_FACTOR +CRITICAL_INCIDENTS +CRITICAL_INICDENTS +CRITICAL_OPERATOR +CRITICAL_VALUE +CRMODE +CROSSEDITION +CROSSEDITION_TRIGGER_MISMATCH +CR_2HOP +CR_2HOP_TIME +CR_3HOP +CR_3HOP_TIME +CR_BLOCK +CR_BLOCK_TIME +CR_BUFFER_GETS +CR_BUSY +CR_BUSY_TIME +CR_CHANGE +CR_CONGESTED +CR_CONGESTED_TIME +CR_GET +CR_OPERATIONS +CR_REQUESTS +CR_TRANSFER +CR_TRANSFERS +CSCN +CSF +CSPILL_MSGS +CS_SRS_TRIGGER. +CTIME +CTMHASH +CTX_ADM. +CTX_ADM.DROP_USER_OBJECTS +CTX_ADM.MARK_FAILED +CTX_ADM.RECOVER +CTX_ADM.RESET_AUTO_OPTIMIZE_STATUS +CTX_ADM.SET_PARAMETER +CTX_ADM.SHUTDOWN +CTX_ADM.STOP_OPTIMIZE +CTX_ADM.TEST_EXTPROC +CTX_CATSEARCH. +CTX_CATSEARCH.CATSEARCH +CTX_CLS. +CTX_CLS.CLUSTERING +CTX_CLS.TRAIN +CTX_CONTAINS. +CTX_CONTAINS.TEXTCONTAINS +CTX_DDL. +CTX_DDL.ADD_ATTR_SECTION +CTX_DDL.ADD_AUTO_OPTIMIZE +CTX_DDL.ADD_FIELD_SECTION +CTX_DDL.ADD_INDEX +CTX_DDL.ADD_MDATA +CTX_DDL.ADD_MDATA_COLUMN +CTX_DDL.ADD_MDATA_SECTION +CTX_DDL.ADD_MVDATA_SECTION +CTX_DDL.ADD_NDATA_SECTION +CTX_DDL.ADD_SDATA_COLUMN +CTX_DDL.ADD_SDATA_SECTION +CTX_DDL.ADD_SPECIAL_SECTION +CTX_DDL.ADD_STOPCLASS +CTX_DDL.ADD_STOPTHEME +CTX_DDL.ADD_STOPWORD +CTX_DDL.ADD_STOP_SECTION +CTX_DDL.ADD_SUB_LEXER +CTX_DDL.ADD_ZONE_SECTION +CTX_DDL.ALTER_INDEX +CTX_DDL.COPY_POLICY +CTX_DDL.CREATE_INDEX_SET +CTX_DDL.CREATE_POLICY +CTX_DDL.CREATE_PREFERENCE +CTX_DDL.CREATE_SECTION_GROUP +CTX_DDL.CREATE_SHADOW_INDEX +CTX_DDL.CREATE_STOPLIST +CTX_DDL.DELETE_MVDATA_VALUES +CTX_DDL.DROP_INDEX_SET +CTX_DDL.DROP_POLICY +CTX_DDL.DROP_PREFERENCE +CTX_DDL.DROP_SECTION_GROUP +CTX_DDL.DROP_SHADOW_INDEX +CTX_DDL.DROP_STOPLIST +CTX_DDL.EXCHANGE_SHADOW_INDEX +CTX_DDL.INSERT_MVDATA_VALUES +CTX_DDL.OPTIMIZE_INDEX +CTX_DDL.POPULATE_PENDING +CTX_DDL.RECREATE_INDEX_ONLINE +CTX_DDL.REMOVE_AUTO_OPTIMIZE +CTX_DDL.REMOVE_INDEX +CTX_DDL.REMOVE_MDATA +CTX_DDL.REMOVE_SECTION +CTX_DDL.REMOVE_STOPCLASS +CTX_DDL.REMOVE_STOPTHEME +CTX_DDL.REMOVE_STOPWORD +CTX_DDL.REMOVE_SUB_LEXER +CTX_DDL.REPLACE_INDEX_METADATA +CTX_DDL.SET_ATTRIBUTE +CTX_DDL.SPLIT_DOLLARI +CTX_DDL.SPLIT_ZONE_TOKENS +CTX_DDL.SYNC_INDEX +CTX_DDL.UNSET_ATTRIBUTE +CTX_DDL.UPDATE_MVDATA_SET +CTX_DDL.UPDATE_POLICY +CTX_DDL.UPDATE_SDATA +CTX_DDL.UPDATE_SUB_LEXER +CTX_DDL.ZONE_TO_FIELD +CTX_DOC. +CTX_DOC.FILTER +CTX_DOC.GIST +CTX_DOC.HIGHLIGHT +CTX_DOC.HIGHLIGHT_CLOB_QUERY +CTX_DOC.IFILTER +CTX_DOC.MARKUP +CTX_DOC.MARKUP_CLOB_QUERY +CTX_DOC.PKENCODE +CTX_DOC.POLICY_FILTER +CTX_DOC.POLICY_GIST +CTX_DOC.POLICY_HIGHLIGHT +CTX_DOC.POLICY_HIGHLIGHT_CLOB_QUERY +CTX_DOC.POLICY_LANGUAGES +CTX_DOC.POLICY_MARKUP +CTX_DOC.POLICY_MARKUP_CLOB_QUERY +CTX_DOC.POLICY_NOUN_PHRASES +CTX_DOC.POLICY_PART_OF_SPEECH +CTX_DOC.POLICY_SNIPPET +CTX_DOC.POLICY_SNIPPET_CLOB_QUERY +CTX_DOC.POLICY_STEMS +CTX_DOC.POLICY_THEMES +CTX_DOC.POLICY_TOKENS +CTX_DOC.SET_KEY_TYPE +CTX_DOC.SNIPPET +CTX_DOC.SNIPPET_CLOB_QUERY +CTX_DOC.THEMES +CTX_DOC.TOKENS +CTX_ENTITY. +CTX_ENTITY.ADD_EXTRACT_RULE +CTX_ENTITY.ADD_STOP_ENTITY +CTX_ENTITY.COMPILE +CTX_ENTITY.CREATE_EXTRACT_POLICY +CTX_ENTITY.DROP_EXTRACT_POLICY +CTX_ENTITY.EXTRACT +CTX_ENTITY.REMOVE_EXTRACT_RULE +CTX_ENTITY.REMOVE_STOP_ENTITY +CTX_FEEDBACK_ITEM_TYPE.RANK +CTX_MATCHES. +CTX_MATCHES.MATCHES +CTX_OUTPUT. +CTX_OUTPUT.ADD_EVENT +CTX_OUTPUT.ADD_TRACE +CTX_OUTPUT.DISABLE_QUERY_STATS +CTX_OUTPUT.ENABLE_QUERY_STATS +CTX_OUTPUT.END_LOG +CTX_OUTPUT.END_QUERY_LOG +CTX_OUTPUT.GET_TRACE_VALUE +CTX_OUTPUT.LOGFILENAME +CTX_OUTPUT.LOG_TRACES +CTX_OUTPUT.REMOVE_EVENT +CTX_OUTPUT.REMOVE_TRACE +CTX_OUTPUT.RESET_TRACE +CTX_OUTPUT.START_LOG +CTX_OUTPUT.START_QUERY_LOG +CTX_QUERY. +CTX_QUERY.BROWSE_WORDS +CTX_QUERY.CHK_TXNQRY_DISBL_SWITCH +CTX_QUERY.CHK_XPATH +CTX_QUERY.COUNT_HITS +CTX_QUERY.COUNT_HITS_CLOB_QUERY +CTX_QUERY.EXPLAIN +CTX_QUERY.EXPLAIN_CLOB_QUERY +CTX_QUERY.FCONTAINS +CTX_QUERY.HFEEDBACK +CTX_QUERY.HFEEDBACK_CLOB_QUERY +CTX_QUERY.REMOVE_SQE +CTX_QUERY.RESULT_SET +CTX_QUERY.RESULT_SET_CLOB_QUERY +CTX_QUERY.STORE_SQE +CTX_QUERY.STORE_SQE_CLOB_QUERY +CTX_REPORT. +CTX_REPORT.CREATE_INDEX_SCRIPT +CTX_REPORT.CREATE_POLICY_SCRIPT +CTX_REPORT.DESCRIBE_INDEX +CTX_REPORT.DESCRIBE_POLICY +CTX_REPORT.INDEX_SIZE +CTX_REPORT.INDEX_STATS +CTX_REPORT.QUERY_LOG_SUMMARY +CTX_REPORT.TOKEN_INFO +CTX_REPORT.TOKEN_TYPE +CTX_REPORT.VALIDATE_INDEX +CTX_THES. +CTX_THES.ALTER_PHRASE +CTX_THES.ALTER_THESAURUS +CTX_THES.BT +CTX_THES.BTG +CTX_THES.BTI +CTX_THES.BTP +CTX_THES.CREATE_PHRASE +CTX_THES.CREATE_RELATION +CTX_THES.CREATE_THESAURUS +CTX_THES.CREATE_TRANSLATION +CTX_THES.DROP_PHRASE +CTX_THES.DROP_RELATION +CTX_THES.DROP_THESAURUS +CTX_THES.DROP_TRANSLATION +CTX_THES.HAS_RELATION +CTX_THES.NT +CTX_THES.NTG +CTX_THES.NTI +CTX_THES.NTP +CTX_THES.OUTPUT_STYLE +CTX_THES.PT +CTX_THES.RT +CTX_THES.SN +CTX_THES.SYN +CTX_THES.THES_TT +CTX_THES.TR +CTX_THES.TRSYN +CTX_THES.TT +CTX_THES.UPDATE_TRANSLATION +CTX_TREE. +CTX_TREE.ADD_NODE +CTX_TREE.DROPSEQUENCES +CTX_TREE.GET_CHILDREN +CTX_TREE.GET_NODEID_LIST +CTX_TREE.GET_NODE_ID +CTX_TREE.GET_ROOTS +CTX_TREE.REGINDEX +CTX_TREE.REGISTER_INDEX +CTX_TREE.REMOVE_NODE +CTX_ULEXER. +CTX_XPCONTAINS. +CTX_XPCONTAINS.XPCONTAINS +CTYPE +CTYPE_HASHCODE +CTYPE_MOD +CTYPE_OWNER +CTYPE_TOID +CUBE_GB +CUBE_NAME +CUBE_OWNER +CUBE_TABLE. +CUMULATIVE +CUMULATIVE_MESSAGE_COUNT +CUM_WAIT_TIME +CURBLK +CUREXT +CURNO +CURRENT +CURRENTLY_USED +CURRENT_2HOP +CURRENT_2HOP_TIME +CURRENT_3HOP +CURRENT_3HOP_TIME +CURRENT_ACTIVE_TIME +CURRENT_BLOCK +CURRENT_BLOCK# +CURRENT_BLOCK_TIME +CURRENT_BUSY +CURRENT_BUSY_TIME +CURRENT_CONGESTED +CURRENT_CONGESTED_TIME +CURRENT_CONSUMED_CPU_TIME +CURRENT_CONSUMER_GROUP_ID +CURRENT_CPU_WAITS +CURRENT_CPU_WAIT_TIME +CURRENT_DIF_COUNT +CURRENT_ENQ_SEQ +CURRENT_FILE# +CURRENT_GROUP# +CURRENT_IDLE_TIME +CURRENT_IO_SERVICE_TIME +CURRENT_IO_SERVICE_WAITS +CURRENT_JOB_NAME +CURRENT_LARGE_READ_MEGABYTES +CURRENT_LARGE_READ_REQUESTS +CURRENT_LARGE_WRITE_MEGABYTES +CURRENT_LARGE_WRITE_REQUESTS +CURRENT_MASTER +CURRENT_OBJ# +CURRENT_OBJECTS +CURRENT_PQS_ACTIVE +CURRENT_PQS_QUEUED +CURRENT_PQ_ACTIVE_TIME +CURRENT_PQ_QUEUED_TIME +CURRENT_PQ_SERVERS_ACTIVE +CURRENT_QUEUED_TIME +CURRENT_QUEUE_DURATION +CURRENT_REQUESTS +CURRENT_RESULTS +CURRENT_ROW# +CURRENT_SCN +CURRENT_SIZE +CURRENT_SMALL_READ_MEGABYTES +CURRENT_SMALL_READ_REQUESTS +CURRENT_SMALL_WRITE_MEGABYTES +CURRENT_SMALL_WRITE_REQUESTS +CURRENT_SNAPSHOTS +CURRENT_START_DATE +CURRENT_START_TIME +CURRENT_STATE +CURRENT_TRANSFER +CURRENT_UNDO_CONSUMPTION +CURRENT_USERS +CURRENT_UTILIZATION +CURRENT_VERSION +CURRENT_YIELDS +CURRMVNAME +CURRMVOWNER +CURR_DML_COMMAND +CURSOR_NAME +CURSOR_NUM +CURSOR_PARTS_MISMATCH +CURSOR_SHARING_EXACT +CURSOR_TYPE +CUR_BUF_RATE +CUR_BYTE_PER_BUF +CUR_BYTE_RATE +CUR_CLT_BUF_RATE +CUR_CLT_BYTE_PER_BUF +CUR_CLT_BYTE_RATE +CUR_EVENTS_PER_LOOP +CUR_EVENT_RATE +CUR_IN_CONNECT_RATE +CUR_LOOP_RATE +CUR_MSG_RATE +CUR_OUT_CONNECT_RATE +CUR_RECONNECT_RATE +CUR_SVR_BUF_RATE +CUR_SVR_BYTE_PER_BUF +CUR_SVR_BYTE_RATE +CUR_TRANSFERS +CUSTOM_TYPE +CU_BUFFER_GETS +CU_SIZE +CWM$CLASSIFICATIONENTRYUPD. +CWM$CLASSIFICATIONUPD. +CWM$CLASSIFY. +CWM$CLASSIFY.ADD_CATALOG_ENTITY +CWM$CLASSIFY.ADD_DESCRIPTOR_ENTITY_TYPE +CWM$CLASSIFY.ADD_ENTITY_DESCRIPTOR_USE +CWM$CLASSIFY.CREATE_CATALOG +CWM$CLASSIFY.CREATE_DESCRIPTOR +CWM$CLASSIFY.CREATE_DESCRIPTOR_TYPE +CWM$CLASSIFY.DROP_CATALOG +CWM$CLASSIFY.DROP_DESCRIPTOR +CWM$CLASSIFY.DROP_DESCRIPTOR_TYPE +CWM$CLASSIFY.LOCK_CATALOG +CWM$CLASSIFY.REMOVE_CATALOG_ENTITY +CWM$CLASSIFY.REMOVE_DESCRIPTOR_ENTITY_TYPE +CWM$CLASSIFY.REMOVE_ENTITY_DESCRIPTOR_USE +CWM$CLASSIFY.SET_CATALOG_DESCRIPTION +CWM$CLASSIFY.SET_CATALOG_PARENT +CWM$CUBEDEL. +CWM$DIMENSIONDEL. +CWM$EXCEPTIONS. +CWM$EXPORT. +CWM$EXPORT.EXPORT_ALL +CWM$EXPORT.EXPORT_CATALOG +CWM$LEVELDEL. +CWM$MEASUREDEL. +CWM$OLAP$CUBE. +CWM$OLAP$CUBE.ADD_DIMENSION +CWM$OLAP$CUBE.CREATE_CUBE +CWM$OLAP$CUBE.DROP_CUBE +CWM$OLAP$CUBE.GET_CUBE_ID +CWM$OLAP$CUBE.LOCK_CUBE +CWM$OLAP$CUBE.MAP_CUBE +CWM$OLAP$CUBE.REBUILD +CWM$OLAP$CUBE.REMOVE_DIMENSION +CWM$OLAP$CUBE.SET_DEFAULT_CALC_HIERARCHY +CWM$OLAP$CUBE.SET_DESCRIPTION +CWM$OLAP$CUBE.SET_DIMENSION_DEPENDENCY +CWM$OLAP$CUBE.SET_DISPLAY_NAME +CWM$OLAP$DIM$ATTRIBUTE. +CWM$OLAP$DIM$ATTRIBUTE.ADD_LEVEL_ATTRIBUTE +CWM$OLAP$DIM$ATTRIBUTE.CREATE_DIMENSION_ATTRIBUTE +CWM$OLAP$DIM$ATTRIBUTE.DROP_DIMENSION_ATTRIBUTE +CWM$OLAP$DIM$ATTRIBUTE.GET_DIMENSIONATTRIBUTE_ID +CWM$OLAP$DIM$ATTRIBUTE.LOCK_DIMENSION_ATTRIBUTE +CWM$OLAP$DIM$ATTRIBUTE.REMOVE_LEVEL_ATTRIBUTE +CWM$OLAP$DIM$ATTRIBUTE.SET_DESCRIPTION +CWM$OLAP$DIM$ATTRIBUTE.SET_DISPLAY_NAME +CWM$OLAP$DIMENSION. +CWM$OLAP$DIMENSION.GET_DIMENSION_ID +CWM$OLAP$DIMENSION.LOCK_DIMENSION +CWM$OLAP$DIMENSION.SET_DEFAULT_DISPLAY_HIERARCHY +CWM$OLAP$DIMENSION.SET_DESCRIPTION +CWM$OLAP$DIMENSION.SET_DISPLAY_NAME +CWM$OLAP$DIMENSION.SET_PLURAL_NAME +CWM$OLAP$HIERARCHY. +CWM$OLAP$HIERARCHY.GET_HIERARCHY_ID +CWM$OLAP$HIERARCHY.LOCK_HIERARCHY +CWM$OLAP$HIERARCHY.SET_DESCRIPTION +CWM$OLAP$HIERARCHY.SET_DISPLAY_NAME +CWM$OLAP$LEVEL$ATTRIBUTE. +CWM$OLAP$LEVEL$ATTRIBUTE.GET_ATTRIBUTE_ID +CWM$OLAP$LEVEL$ATTRIBUTE.LOCK_ATTRIBUTE +CWM$OLAP$LEVEL$ATTRIBUTE.SET_DESCRIPTION +CWM$OLAP$LEVEL$ATTRIBUTE.SET_DISPLAY_NAME +CWM$OLAP$LEVEL$ATTRIBUTE.SET_NAME +CWM$OLAP$LEVEL. +CWM$OLAP$LEVEL.GET_LEVEL_ID +CWM$OLAP$LEVEL.LOCK_LEVEL +CWM$OLAP$LEVEL.SET_DESCRIPTION +CWM$OLAP$LEVEL.SET_DISPLAY_NAME +CWM$OLAP$MEASURE. +CWM$OLAP$MEASURE.CREATE_MEASURE +CWM$OLAP$MEASURE.DROP_MEASURE +CWM$OLAP$MEASURE.GET_MEASURE_ID +CWM$OLAP$MEASURE.LOCK_MEASURE +CWM$OLAP$MEASURE.REMOVE_COLUMN_MAP +CWM$OLAP$MEASURE.SET_COLUMN_MAP +CWM$OLAP$MEASURE.SET_DEFAULT_AGGREGATION_METHOD +CWM$OLAP$MEASURE.SET_DESCRIPTION +CWM$OLAP$MEASURE.SET_DISPLAY_NAME +CWM$UTIL. +CWM$UTIL.CHECK_COLUMN_EXISTS +CWM$UTIL.CHECK_CUBE_PRIVILEGES +CWM$UTIL.CHECK_CUBE_VISIBLE +CWM$UTIL.CHECK_DIMENSION_PRIVILEGES +CWM$UTIL.CHECK_DIMENSION_VISIBLE +CWM$UTIL.CHECK_HIERARCHY_EXISTS +CWM$UTIL.CHECK_LEVEL_EXISTS +CWM$UTIL.CHECK_TABLE_VISIBLE +CWM$UTIL.CUBE_INVALID +CWM$UTIL.DIMENSION_TABLES_VISIBLE +CWM$UTIL.DIM_VALID +CWM$UTIL.DUMP_TABLE_INFO +CWM$UTIL.FACT_TABLE_VISIBLE +CWM$UTIL.GET_DIMENSION_ID +CWM$UTIL.GET_FOREIGN_KEY_ID +CWM$UTIL.GET_ID +CWM$UTIL.GET_LITE_LEVEL_ID +CWM$UTIL.GET_PROJECT_ID +CWM$UTIL.GET_TABLE_ID +CWM$UTIL.GET_USER_ID +CWM$UTIL.IS_OLAP_DBA +CWM$UTIL.IS_SYSDBA +CWM$UTIL.RESET_CATALOG +CWM$UTILITY. +CWM$UTILITY.ADD_ARGUMENT +CWM$UTILITY.COLLECT_GARBAGE +CWM$UTILITY.CREATE_FUNCTION_USAGE +CWM$UTILITY.DROP_FUNCTION_USAGE +CWM$UTILITY.DUMP_ERROR +CWM$UTILITY.EMPTY_ALL_METADATA +CWM$UTILITY.EXPORT_ALL +CWM$UTILITY.EXPORT_CATALOG +CWM$UTILITY.GET_FIRST_VALIDATE_ERROR +CWM$UTILITY.GET_FUNCTION_ID +CWM$UTILITY.GET_LAST_ERROR_DESCRIPTION +CWM$UTILITY.GET_NEXT_VALIDATE_ERROR +CWM$UTILITY.GET_OBJECT_IN_ERROR +CWM$UTILITY.GET_VERSION +CWM$UTILITY.IS_OLAP_DBA +CWM$UTILITY.SET_ARGUMENT +CWM$UTILITY.SET_OBJECT_IN_ERROR +CWM$UTILITY.VALIDATE_CUBE +CWM$UTILITY.VALIDATE_DIMENSION +CWM1_OLAP_VALIDATE_METADATA. +CWM1_OLAP_VALIDATE_METADATA.VALIDATE_CUBE +CWM1_OLAP_VALIDATE_METADATA.VALIDATE_DIMENSION +CWM2$AWCOMPOSITESPECUPD. +CWM2$AWCOMPSPECMEMBERSHIPUPD. +CWM2$AWCUBEAGGLEVELUPD. +CWM2$AWCUBEAGGMEASUREUPD. +CWM2$AWCUBEAGGUPD. +CWM2$AWCUBECOMPPLANUPD. +CWM2$AWCUBELOADAGGPLANUPD. +CWM2$AWCUBELOADFILTERUPD. +CWM2$AWCUBELOADMEASUREUPD. +CWM2$AWCUBELOADPARMVALUEUPD. +CWM2$AWCUBELOADUPD. +CWM2$AWDIMLOADFILTERUPD. +CWM2$AWDIMLOADPARMVALUEUPD. +CWM2$AWDIMLOADUPD. +CWM2$AWVIEWCOLSUPD. +CWM2$AWVIEWSUPD. +CWM2$AW_DIMENSIONMAPUPD. +CWM2$AW_MEASUREMAPUPD. +CWM2$CLASSIFICATIONVPUPD. +CWM2$CUBEDEL. +CWM2$CUBEDIMENSIONUSEUPD. +CWM2$CUBEUPD. +CWM2$DIMENSIONATTRIBUTEUPD. +CWM2$DIMENSIONDEL. +CWM2$DIMENSIONUPD. +CWM2$DIMHIERLVLMAPUPD. +CWM2$FACTDIMHIERMAPUPD. +CWM2$FACTDIMHIERTPLSDTLUPD. +CWM2$FACTKEYDIMHIERLVLMAPUPD. +CWM2$FACTKEYDIMHIERMAPUPD. +CWM2$HIERARCHYUPD. +CWM2$HIERCUSTOMSORTUPD. +CWM2$HIERLEVELRELUPD. +CWM2$LEVELATTRIBUTEMAPUPD. +CWM2$LEVELATTRIBUTEUPD. +CWM2$LEVELDEL. +CWM2$LEVELUPD. +CWM2$MEASUREDEL. +CWM2$MEASURETABLEMAPUPD. +CWM2$MEASUREUPD. +CWM2$SECURITY. +CWM2$SECURITY.DIMENSION_TABLES_VISIBLE +CWM2$SECURITY.FACT_TABLE_VISIBLE +CWM2$STOREDDIMLVLTPLSDTLUPD. +CWM2$STOREDDIMLVLTPLSUPD. +CWM2_OLAP_AW_AWUTIL. +CWM2_OLAP_AW_AWUTIL.FETCHASSTR +CWM2_OLAP_AW_AWUTIL.FETCHAWLOG +CWM2_OLAP_CATALOG. +CWM2_OLAP_CATALOG.ADD_CATALOG_ENTITY +CWM2_OLAP_CATALOG.CREATE_CATALOG +CWM2_OLAP_CATALOG.DROP_CATALOG +CWM2_OLAP_CATALOG.LOCK_CATALOG +CWM2_OLAP_CATALOG.REMOVE_CATALOG_ENTITY +CWM2_OLAP_CATALOG.SET_CATALOG_NAME +CWM2_OLAP_CATALOG.SET_DESCRIPTION +CWM2_OLAP_CATALOG.SET_PARENT_CATALOG +CWM2_OLAP_CLASSIFY. +CWM2_OLAP_CLASSIFY.ADD_ENTITY_CARDINALITY_USE +CWM2_OLAP_CLASSIFY.ADD_ENTITY_DEFAULTMEMBER_USE +CWM2_OLAP_CLASSIFY.ADD_ENTITY_DENSEINDICATOR_USE +CWM2_OLAP_CLASSIFY.ADD_ENTITY_DESCRIPTOR_USE +CWM2_OLAP_CLASSIFY.ADD_ENTITY_FACTJOIN_USE +CWM2_OLAP_CLASSIFY.REMOVE_ENTITY_DESCRIPTOR_USE +CWM2_OLAP_CUBE. +CWM2_OLAP_CUBE.ADD_DIMENSION_TO_CUBE +CWM2_OLAP_CUBE.CREATE_CUBE +CWM2_OLAP_CUBE.DROP_CUBE +CWM2_OLAP_CUBE.LOCK_CUBE +CWM2_OLAP_CUBE.REMOVE_DIMENSION_FROM_CUBE +CWM2_OLAP_CUBE.SET_AGGREGATION_OPERATOR +CWM2_OLAP_CUBE.SET_CUBE_NAME +CWM2_OLAP_CUBE.SET_DEFAULT_CUBE_DIM_CALC_HIER +CWM2_OLAP_CUBE.SET_DESCRIPTION +CWM2_OLAP_CUBE.SET_DISPLAY_NAME +CWM2_OLAP_CUBE.SET_MV_SUMMARY_CODE +CWM2_OLAP_CUBE.SET_SHORT_DESCRIPTION +CWM2_OLAP_DELETE. +CWM2_OLAP_DELETE.DELETE_CUBE +CWM2_OLAP_DELETE.DELETE_DIMENSION +CWM2_OLAP_DELETE.DELETE_MEASURE_CATALOG +CWM2_OLAP_DELETE.DELETE_OLAP_CATALOG +CWM2_OLAP_DIMENSION. +CWM2_OLAP_DIMENSION.CREATE_DIMENSION +CWM2_OLAP_DIMENSION.DROP_DIMENSION +CWM2_OLAP_DIMENSION.LOCK_DIMENSION +CWM2_OLAP_DIMENSION.SET_DEFAULT_DISPLAY_HIERARCHY +CWM2_OLAP_DIMENSION.SET_DESCRIPTION +CWM2_OLAP_DIMENSION.SET_DIMENSION_NAME +CWM2_OLAP_DIMENSION.SET_DISPLAY_NAME +CWM2_OLAP_DIMENSION.SET_PLURAL_NAME +CWM2_OLAP_DIMENSION.SET_SHORT_DESCRIPTION +CWM2_OLAP_DIMENSION_ATTRIBUTE. +CWM2_OLAP_DIMENSION_ATTRIBUTE.CREATE_DIMENSION_ATTRIBUTE +CWM2_OLAP_DIMENSION_ATTRIBUTE.CREATE_DIMENSION_ATTRIBUTE_2 +CWM2_OLAP_DIMENSION_ATTRIBUTE.DROP_DIMENSION_ATTRIBUTE +CWM2_OLAP_DIMENSION_ATTRIBUTE.LOCK_DIMENSION_ATTRIBUTE +CWM2_OLAP_DIMENSION_ATTRIBUTE.SET_DESCRIPTION +CWM2_OLAP_DIMENSION_ATTRIBUTE.SET_DIMENSION_ATTRIBUTE_NAME +CWM2_OLAP_DIMENSION_ATTRIBUTE.SET_DISPLAY_NAME +CWM2_OLAP_DIMENSION_ATTRIBUTE.SET_SHORT_DESCRIPTION +CWM2_OLAP_EXCEPTIONS. +CWM2_OLAP_EXPORT. +CWM2_OLAP_EXPORT.EXPORT_CUBE +CWM2_OLAP_EXPORT.EXPORT_DIMENSION +CWM2_OLAP_EXPORT.EXPORT_OLAP_CATALOG +CWM2_OLAP_HIERARCHY. +CWM2_OLAP_HIERARCHY.CREATE_HIERARCHY +CWM2_OLAP_HIERARCHY.DROP_HIERARCHY +CWM2_OLAP_HIERARCHY.LOCK_HIERARCHY +CWM2_OLAP_HIERARCHY.SET_DESCRIPTION +CWM2_OLAP_HIERARCHY.SET_DISPLAY_NAME +CWM2_OLAP_HIERARCHY.SET_HIERARCHY_NAME +CWM2_OLAP_HIERARCHY.SET_SHORT_DESCRIPTION +CWM2_OLAP_HIERARCHY.SET_SOLVED_CODE +CWM2_OLAP_INSTALLER. +CWM2_OLAP_INSTALLER.VALIDATE_CWM2_INSTALL +CWM2_OLAP_LEVEL. +CWM2_OLAP_LEVEL.ADD_LEVEL_TO_HIERARCHY +CWM2_OLAP_LEVEL.CREATE_LEVEL +CWM2_OLAP_LEVEL.DROP_LEVEL +CWM2_OLAP_LEVEL.LOCK_LEVEL +CWM2_OLAP_LEVEL.REMOVE_LEVEL_FROM_HIERARCHY +CWM2_OLAP_LEVEL.SET_DESCRIPTION +CWM2_OLAP_LEVEL.SET_DISPLAY_NAME +CWM2_OLAP_LEVEL.SET_LEVEL_NAME +CWM2_OLAP_LEVEL.SET_PLURAL_NAME +CWM2_OLAP_LEVEL.SET_SHORT_DESCRIPTION +CWM2_OLAP_LEVEL_ATTRIBUTE. +CWM2_OLAP_LEVEL_ATTRIBUTE.CREATE_LEVEL_ATTRIBUTE +CWM2_OLAP_LEVEL_ATTRIBUTE.CREATE_LEVEL_ATTRIBUTE_2 +CWM2_OLAP_LEVEL_ATTRIBUTE.DROP_LEVEL_ATTRIBUTE +CWM2_OLAP_LEVEL_ATTRIBUTE.LOCK_LEVEL_ATTRIBUTE +CWM2_OLAP_LEVEL_ATTRIBUTE.SET_DESCRIPTION +CWM2_OLAP_LEVEL_ATTRIBUTE.SET_DISPLAY_NAME +CWM2_OLAP_LEVEL_ATTRIBUTE.SET_LEVEL_ATTRIBUTE_NAME +CWM2_OLAP_LEVEL_ATTRIBUTE.SET_SHORT_DESCRIPTION +CWM2_OLAP_MANAGER. +CWM2_OLAP_MANAGER.BEGIN_LOG +CWM2_OLAP_MANAGER.END_LOG +CWM2_OLAP_MANAGER.LOG_MESSAGE +CWM2_OLAP_MANAGER.LOG_MESSAGE_FORCED +CWM2_OLAP_MANAGER.LOG_NOTE +CWM2_OLAP_MANAGER.LOG_NOTE_FORCED +CWM2_OLAP_MANAGER.LOG_RAW_MESSAGES +CWM2_OLAP_MANAGER.SET_ECHO_OFF +CWM2_OLAP_MANAGER.SET_ECHO_ON +CWM2_OLAP_MEASURE. +CWM2_OLAP_MEASURE.CREATE_MEASURE +CWM2_OLAP_MEASURE.DROP_MEASURE +CWM2_OLAP_MEASURE.LOCK_MEASURE +CWM2_OLAP_MEASURE.SET_DESCRIPTION +CWM2_OLAP_MEASURE.SET_DISPLAY_NAME +CWM2_OLAP_MEASURE.SET_MEASURE_NAME +CWM2_OLAP_MEASURE.SET_SHORT_DESCRIPTION +CWM2_OLAP_METADATA_REFRESH. +CWM2_OLAP_METADATA_REFRESH.MR_AC_REFRESH +CWM2_OLAP_METADATA_REFRESH.MR_REFRESH +CWM2_OLAP_MR_CHECK_PRIVS. +CWM2_OLAP_MR_CHECK_PRIVS.CHECK_CURRENT_USER_PRIVS +CWM2_OLAP_MR_SECURITY_INIT. +CWM2_OLAP_MR_SECURITY_INIT.INIT_MR_SESSION_OBJECT_TABLE +CWM2_OLAP_MR_SESSION_POP. +CWM2_OLAP_MR_SESSION_POP.POP_MR_SESSION +CWM2_OLAP_OLAPAPI_ENABLE. +CWM2_OLAP_OLAPAPI_ENABLE.AW_CUBE_CREATE_ACCESS +CWM2_OLAP_OLAPAPI_ENABLE.AW_CUBE_DROP_ACCESS +CWM2_OLAP_OLAPAPI_ENABLE.AW_DIMENSION_CREATE_ACCESS +CWM2_OLAP_OLAPAPI_ENABLE.AW_DIMENSION_DROP_ACCESS +CWM2_OLAP_OLAPAPI_ENABLE.UPDATE_ENABLED_CUBE_VIEW +CWM2_OLAP_OLAPAPI_ENABLE.UPDATE_ENABLED_DIM_VIEW +CWM2_OLAP_PC_TRANSFORM. +CWM2_OLAP_PC_TRANSFORM.CREATE_SCRIPT +CWM2_OLAP_TABLE_MAP. +CWM2_OLAP_TABLE_MAP.ADD_AWVIEW +CWM2_OLAP_TABLE_MAP.MAP_AWVIEW_COLUMN +CWM2_OLAP_TABLE_MAP.MAP_DIMTBL_HIERLEVEL +CWM2_OLAP_TABLE_MAP.MAP_DIMTBL_HIERLEVELATTR +CWM2_OLAP_TABLE_MAP.MAP_DIMTBL_HIERSORTKEY +CWM2_OLAP_TABLE_MAP.MAP_DIMTBL_LEVEL +CWM2_OLAP_TABLE_MAP.MAP_DIMTBL_LEVELATTR +CWM2_OLAP_TABLE_MAP.MAP_FACTTBL_LEVELKEY +CWM2_OLAP_TABLE_MAP.MAP_FACTTBL_MEASURE +CWM2_OLAP_TABLE_MAP.REMOVEMAP_DIMTBL_HIERLEVEL +CWM2_OLAP_TABLE_MAP.REMOVEMAP_DIMTBL_HIERLEVELATTR +CWM2_OLAP_TABLE_MAP.REMOVEMAP_DIMTBL_HIERSORTKEY +CWM2_OLAP_TABLE_MAP.REMOVEMAP_DIMTBL_LEVEL +CWM2_OLAP_TABLE_MAP.REMOVEMAP_DIMTBL_LEVELATTR +CWM2_OLAP_TABLE_MAP.REMOVEMAP_FACTTBL_LEVELKEY +CWM2_OLAP_TABLE_MAP.REMOVEMAP_FACTTBL_MEASURE +CWM2_OLAP_TABLE_MAP.REMOVE_AWVIEW +CWM2_OLAP_UTILITY. +CWM2_OLAP_UTILITY.CHECK_NAME_TYPE_PARAMETER +CWM2_OLAP_UTILITY.CHECK_PARAMETER_MAX_LENGTH +CWM2_OLAP_UTILITY.CLEAR_DBMSOUTPUT_BUFFER +CWM2_OLAP_UTILITY.DROP_CLASS +CWM2_OLAP_UTILITY.DROP_CLASS_ENTRY +CWM2_OLAP_UTILITY.DROP_CLASS_ENTRY_CLASS +CWM2_OLAP_UTILITY.DROP_CLASS_ENTRY_ELEMENT +CWM2_OLAP_UTILITY.DROP_CUBE +CWM2_OLAP_UTILITY.DROP_CUBEDIMENSIONUSE +CWM2_OLAP_UTILITY.DROP_CUBEDIMENSIONUSE_C_IRID +CWM2_OLAP_UTILITY.DROP_CUBEDIMENSIONUSE_D_IRID +CWM2_OLAP_UTILITY.DROP_DIMENSION +CWM2_OLAP_UTILITY.DROP_DIMENSIONATTRIBUTE +CWM2_OLAP_UTILITY.DROP_DIMENSIONATTR_D_IRID +CWM2_OLAP_UTILITY.DROP_HIERARCHY +CWM2_OLAP_UTILITY.DROP_HIERARCHY_D_IRID +CWM2_OLAP_UTILITY.DROP_HIERLEVELREL +CWM2_OLAP_UTILITY.DROP_HIERLEVELREL_D_IRID +CWM2_OLAP_UTILITY.DROP_HIERLEVELREL_H_IRID +CWM2_OLAP_UTILITY.DROP_HIERLEVELREL_L_IRID +CWM2_OLAP_UTILITY.DROP_LEVEL +CWM2_OLAP_UTILITY.DROP_LEVELATTRIBUTE +CWM2_OLAP_UTILITY.DROP_LEVELATTRIBUTE_DA_IRID +CWM2_OLAP_UTILITY.DROP_LEVELATTRIBUTE_D_IRID +CWM2_OLAP_UTILITY.DROP_LEVELATTRIBUTE_L_IRID +CWM2_OLAP_UTILITY.DROP_LEVEL_D_IRID +CWM2_OLAP_UTILITY.DROP_MEASURE +CWM2_OLAP_UTILITY.DROP_MEASURE_C_IRID +CWM2_OLAP_UTILITY.DROP_VAL_FACTDIMHIERTPLSDTL +CWM2_OLAP_UTILITY.DUMP_DBMSOUTPUT_BUFFER +CWM2_OLAP_UTILITY.GET_ACCESS_RIGHTS +CWM2_OLAP_UTILITY.GET_CLASS_ENTRY_IRID_EC_IRID +CWM2_OLAP_UTILITY.GET_CLASS_ENTRY_IRID_E_IRID +CWM2_OLAP_UTILITY.GET_CLASS_IRID +CWM2_OLAP_UTILITY.GET_CLASS_NAME +CWM2_OLAP_UTILITY.GET_CLASS_TYPE_IRID +CWM2_OLAP_UTILITY.GET_CUBEDIMENSIONUSE_IRID +CWM2_OLAP_UTILITY.GET_CUBE_IRID +CWM2_OLAP_UTILITY.GET_CUBE_NAME +CWM2_OLAP_UTILITY.GET_DIMENSIONATTRIBUTE_IRID +CWM2_OLAP_UTILITY.GET_DIMENSIONATTRIBUTE_NAME +CWM2_OLAP_UTILITY.GET_DIMENSION_IRID +CWM2_OLAP_UTILITY.GET_DIMENSION_NAME +CWM2_OLAP_UTILITY.GET_HIERARCHY_IRID +CWM2_OLAP_UTILITY.GET_HIERARCHY_NAME +CWM2_OLAP_UTILITY.GET_HIERLEVELREL_C_NAME +CWM2_OLAP_UTILITY.GET_HIERLEVELREL_IRID_C_IRID +CWM2_OLAP_UTILITY.GET_HIERLEVELREL_IRID_P_IRID +CWM2_OLAP_UTILITY.GET_HIERLEVELREL_P_NAME +CWM2_OLAP_UTILITY.GET_LEVELATTRIBUTE_IRID +CWM2_OLAP_UTILITY.GET_LEVELATTRIBUTE_NAME +CWM2_OLAP_UTILITY.GET_LEVEL_IRID +CWM2_OLAP_UTILITY.GET_LEVEL_NAME +CWM2_OLAP_UTILITY.GET_MEASURE_IRID +CWM2_OLAP_UTILITY.GET_MEASURE_NAME +CWM2_OLAP_UTILITY.GET_OBJECT_ID +CWM2_OLAP_UTILITY.GET_PROJECT_IRID +CWM2_OLAP_UTILITY.GET_TABLE_NAME +CWM2_OLAP_UTILITY.GET_USER_NAME +CWM2_OLAP_UTILITY.SET_CUBE_INVALID +CWM2_OLAP_UTILITY.SET_CUBE_INVALID_D_IRID +CWM2_OLAP_UTILITY.SET_CUBE_INVALID_M_IRID +CWM2_OLAP_UTILITY.SET_DEBUG_OFF +CWM2_OLAP_UTILITY.SET_DEBUG_ON +CWM2_OLAP_UTILITY.SET_DIMENSION_INVALID +CWM2_OLAP_UTILITY.SET_DIMENSION_INVALID_H_IRID +CWM2_OLAP_UTILITY.SET_DIMENSION_INVALID_L_IRID +CWM2_OLAP_VALIDATE. +CWM2_OLAP_VALIDATE.VALIDATE_ALL_CUBES +CWM2_OLAP_VALIDATE.VALIDATE_ALL_DIMENSIONS +CWM2_OLAP_VALIDATE.VALIDATE_CUBE +CWM2_OLAP_VALIDATE.VALIDATE_DIMENSION +CWM2_OLAP_VALIDATE.VALIDATE_OLAP_CATALOG +CWM2_OLAP_VALIDATE_METADATA. +CWM2_OLAP_VALIDATE_METADATA.VALIDATE_CUBE +CWM2_OLAP_VALIDATE_METADATA.VALIDATE_DIMENSION +CWM2_OLAP_VALIDATE_UTILITY. +CWM2_OLAP_VALIDATE_UTILITY.INIT_VALIDATE +CWM2_OLAP_VALIDATE_UTILITY.REPORT_VALIDATE +CWM2_OLAP_VALIDATE_UTILITY.SAVE_INVALID_STATUS +CWM2_OLAP_VALIDATE_UTILITY.SAVE_NOTE_STATUS +CWM2_OLAP_VALIDATE_UTILITY.SAVE_NULL_STATUS +CWM2_OLAP_VALIDATE_UTILITY.SAVE_VALID_STATUS +CWM2_OLAP_VERIFY_ACCESS. +CWM2_OLAP_VERIFY_ACCESS.VERIFY_CUBE_ACCESS +CYCLE_FLAG +CYCLE_SECONDS_MDEF +CYCLE_SECONDS_NEW +CYCLIC_INDEX_VALUE +DAD_NAME +DAMAGE_DESCRIPTION +DAMAGE_MSGGRP_ID +DATA +DATABASE +DATABASE_COMPATIBILITY +DATABASE_COMPATIBLE_LEVEL +DATABASE_ID +DATABASE_INCARNATION# +DATABASE_LINK +DATABASE_MODE +DATABASE_NAME +DATABASE_NAME. +DATABASE_ROLE +DATABASE_STATUS +DATABASE_TIME +DATAFILE_BLOCKS +DATAGUARD_BROKER +DATAOBJ# +DATAPUMP_SESSIONS +DATATYPE +DATATYPE_STRING +DATA_BLK# +DATA_DEFAULT +DATA_LENGTH +DATA_LEVEL +DATA_LOSS_TIME +DATA_OBJ# +DATA_OBJD# +DATA_OBJECT_ID +DATA_OBJV# +DATA_PRECISION +DATA_REQUESTS +DATA_SCALE +DATA_SOURCE +DATA_TYPE +DATA_TYPE_MOD +DATA_TYPE_OWNER +DATA_UPGRADED +DATE_VALUE +DATUM_TIME +DAY_OF_WEEK +DB2XML. +DB2XML.GETCPUDETAILS +DB2XML.GETFSMOUNTDETAILS +DB2XML.GETHARDWAREINFO +DB2XML.GETIOCARDDETAILS +DB2XML.GETNICDETAILS +DB2XML.GETOSCOMPONENTS +DB2XML.GETOSPROPERTIES +DB2XML.GETOSSUMMARY +DB2XML.GETSYSTEMSUMMARY +DB2XML.GETVENDORSOFTWARECOMPONENTS +DB2XML.GETVENDORSOFTWARESUMMARY +DBA_2PC_NEIGHBORS +DBA_2PC_PENDING +DBA_ADDM_FDG_BREAKDOWN +DBA_ADDM_FINDINGS +DBA_ADDM_INSTANCES +DBA_ADDM_SYSTEM_DIRECTIVES +DBA_ADDM_TASKS +DBA_ADDM_TASK_DIRECTIVES +DBA_ADVISOR_ACTIONS +DBA_ADVISOR_COMMANDS +DBA_ADVISOR_DEFINITIONS +DBA_ADVISOR_DEF_PARAMETERS +DBA_ADVISOR_DIR_DEFINITIONS +DBA_ADVISOR_DIR_INSTANCES +DBA_ADVISOR_DIR_TASK_INST +DBA_ADVISOR_EXECUTIONS +DBA_ADVISOR_EXECUTION_TYPES +DBA_ADVISOR_EXEC_PARAMETERS +DBA_ADVISOR_FDG_BREAKDOWN +DBA_ADVISOR_FINDINGS +DBA_ADVISOR_FINDING_NAMES +DBA_ADVISOR_JOURNAL +DBA_ADVISOR_LOG +DBA_ADVISOR_OBJECTS +DBA_ADVISOR_OBJECT_TYPES +DBA_ADVISOR_PARAMETERS +DBA_ADVISOR_PARAMETERS_PROJ +DBA_ADVISOR_RATIONALE +DBA_ADVISOR_RECOMMENDATIONS +DBA_ADVISOR_SQLA_COLVOL +DBA_ADVISOR_SQLA_REC_SUM +DBA_ADVISOR_SQLA_TABLES +DBA_ADVISOR_SQLA_TABVOL +DBA_ADVISOR_SQLA_WK_MAP +DBA_ADVISOR_SQLA_WK_STMTS +DBA_ADVISOR_SQLA_WK_SUM +DBA_ADVISOR_SQLPLANS +DBA_ADVISOR_SQLSTATS +DBA_ADVISOR_SQLW_COLVOL +DBA_ADVISOR_SQLW_JOURNAL +DBA_ADVISOR_SQLW_PARAMETERS +DBA_ADVISOR_SQLW_STMTS +DBA_ADVISOR_SQLW_SUM +DBA_ADVISOR_SQLW_TABLES +DBA_ADVISOR_SQLW_TABVOL +DBA_ADVISOR_SQLW_TEMPLATES +DBA_ADVISOR_TASKS +DBA_ADVISOR_TEMPLATES +DBA_ADVISOR_USAGE +DBA_ALERT_ARGUMENTS +DBA_ALERT_HISTORY +DBA_ALL_TABLES +DBA_ANALYZE_OBJECTS +DBA_APPLY +DBA_APPLY_CHANGE_HANDLERS +DBA_APPLY_CONFLICT_COLUMNS +DBA_APPLY_DML_CONF_HANDLERS +DBA_APPLY_DML_HANDLERS +DBA_APPLY_ENQUEUE +DBA_APPLY_ERROR +DBA_APPLY_ERROR_MESSAGES +DBA_APPLY_EXECUTE +DBA_APPLY_INSTANTIATED_GLOBAL +DBA_APPLY_INSTANTIATED_OBJECTS +DBA_APPLY_INSTANTIATED_SCHEMAS +DBA_APPLY_KEY_COLUMNS +DBA_APPLY_OBJECT_DEPENDENCIES +DBA_APPLY_PARAMETERS +DBA_APPLY_PROGRESS +DBA_APPLY_SPILL_TXN +DBA_APPLY_TABLE_COLUMNS +DBA_APPLY_VALUE_DEPENDENCIES +DBA_AQ_AGENTS +DBA_AQ_AGENT_PRIVS +DBA_ARGUMENTS +DBA_ASSEMBLIES +DBA_ASSOCIATIONS +DBA_ATTRIBUTE_TRANSFORMATIONS +DBA_AUDIT_EXISTS +DBA_AUDIT_MGMT_CLEANUP_JOBS +DBA_AUDIT_MGMT_CLEAN_EVENTS +DBA_AUDIT_MGMT_CONFIG_PARAMS +DBA_AUDIT_MGMT_LAST_ARCH_TS +DBA_AUDIT_OBJECT +DBA_AUDIT_POLICIES +DBA_AUDIT_POLICY_COLUMNS +DBA_AUDIT_SESSION +DBA_AUDIT_STATEMENT +DBA_AUDIT_TRAIL +DBA_AUTOTASK_CLIENT +DBA_AUTOTASK_CLIENT_HISTORY +DBA_AUTOTASK_CLIENT_JOB +DBA_AUTOTASK_JOB_HISTORY +DBA_AUTOTASK_OPERATION +DBA_AUTOTASK_SCHEDULE +DBA_AUTOTASK_TASK +DBA_AUTOTASK_WINDOW_CLIENTS +DBA_AUTOTASK_WINDOW_HISTORY +DBA_AWS +DBA_AW_OBJ +DBA_AW_PROP +DBA_AW_PS +DBA_BASE_TABLE_MVIEWS +DBA_BLOCKERS +DBA_CAPTURE +DBA_CAPTURE_EXTRA_ATTRIBUTES +DBA_CAPTURE_PARAMETERS +DBA_CAPTURE_PREPARED_DATABASE +DBA_CAPTURE_PREPARED_SCHEMAS +DBA_CAPTURE_PREPARED_TABLES +DBA_CATALOG +DBA_CHANGE_NOTIFICATION_REGS +DBA_CLUSTERS +DBA_CLUSTER_HASH_EXPRESSIONS +DBA_CLU_COLUMNS +DBA_COLL_TYPES +DBA_COL_COMMENTS +DBA_COL_PENDING_STATS +DBA_COL_PRIVS +DBA_COMMON_AUDIT_TRAIL +DBA_COMPARISON +DBA_COMPARISON_COLUMNS +DBA_COMPARISON_ROW_DIF +DBA_COMPARISON_SCAN +DBA_COMPARISON_SCAN_SUMMARY +DBA_COMPARISON_SCAN_VALUES +DBA_CONNECT_ROLE_GRANTEES +DBA_CONSTRAINTS +DBA_CONS_COLUMNS +DBA_CONS_OBJ_COLUMNS +DBA_CONTEXT +DBA_CPOOL_INFO +DBA_CPU_USAGE_STATISTICS +DBA_CQ_NOTIFICATION_QUERIES +DBA_CUBES +DBA_CUBE_ATTRIBUTES +DBA_CUBE_ATTR_VISIBILITY +DBA_CUBE_BUILD_PROCESSES +DBA_CUBE_CALCULATED_MEMBERS +DBA_CUBE_DIMENSIONALITY +DBA_CUBE_DIMENSIONS +DBA_CUBE_DIM_LEVELS +DBA_CUBE_DIM_MODELS +DBA_CUBE_DIM_VIEWS +DBA_CUBE_DIM_VIEW_COLUMNS +DBA_CUBE_HIERARCHIES +DBA_CUBE_HIER_LEVELS +DBA_CUBE_HIER_VIEWS +DBA_CUBE_HIER_VIEW_COLUMNS +DBA_CUBE_MEASURES +DBA_CUBE_VIEWS +DBA_CUBE_VIEW_COLUMNS +DBA_DATAPUMP_JOBS +DBA_DATAPUMP_SESSIONS +DBA_DATA_FILES +DBA_DBFS_HS +DBA_DBFS_HS_COMMANDS +DBA_DBFS_HS_FIXED_PROPERTIES +DBA_DBFS_HS_PROPERTIES +DBA_DB_LINKS +DBA_DDL_LOCKS +DBA_DEPENDENCIES +DBA_DIMENSIONS +DBA_DIM_ATTRIBUTES +DBA_DIM_CHILD_OF +DBA_DIM_HIERARCHIES +DBA_DIM_JOIN_KEY +DBA_DIM_LEVELS +DBA_DIM_LEVEL_KEY +DBA_DIRECTORIES +DBA_DML_LOCKS +DBA_DMT_FREE_SPACE +DBA_DMT_USED_EXTENTS +DBA_EDITIONING_VIEWS +DBA_EDITIONING_VIEWS_AE +DBA_EDITIONING_VIEW_COLS +DBA_EDITIONING_VIEW_COLS_AE +DBA_EDITIONS +DBA_EDITION_COMMENTS +DBA_ENABLED_AGGREGATIONS +DBA_ENABLED_TRACES +DBA_ENCRYPTED_COLUMNS +DBA_EPG_DAD_AUTHORIZATION +DBA_ERRORS +DBA_ERRORS_AE +DBA_EVALUATION_CONTEXTS +DBA_EVALUATION_CONTEXT_TABLES +DBA_EVALUATION_CONTEXT_VARS +DBA_EXPORT_OBJECTS +DBA_EXPORT_PATHS +DBA_EXP_FILES +DBA_EXP_OBJECTS +DBA_EXP_VERSION +DBA_EXTENTS +DBA_EXTERNAL_LOCATIONS +DBA_EXTERNAL_TABLES +DBA_FEATURE_USAGE_STATISTICS +DBA_FGA_AUDIT_TRAIL +DBA_FILE_GROUPS +DBA_FILE_GROUP_EXPORT_INFO +DBA_FILE_GROUP_FILES +DBA_FILE_GROUP_TABLES +DBA_FILE_GROUP_TABLESPACES +DBA_FILE_GROUP_VERSIONS +DBA_FLASHBACK_ARCHIVE +DBA_FLASHBACK_ARCHIVE_TABLES +DBA_FLASHBACK_ARCHIVE_TS +DBA_FLASHBACK_TXN_REPORT +DBA_FLASHBACK_TXN_STATE +DBA_FREE_SPACE +DBA_FREE_SPACE_COALESCED +DBA_GLOBAL_CONTEXT +DBA_GOLDENGATE_PRIVILEGES +DBA_HIGH_WATER_MARK_STATISTICS +DBA_HISTOGRAMS +DBA_HIST_ACTIVE_SESS_HISTORY +DBA_HIST_ASH_SNAPSHOT +DBA_HIST_BASELINE +DBA_HIST_BASELINE_DETAILS +DBA_HIST_BASELINE_METADATA +DBA_HIST_BASELINE_TEMPLATE +DBA_HIST_BG_EVENT_SUMMARY +DBA_HIST_BUFFERED_QUEUES +DBA_HIST_BUFFERED_SUBSCRIBERS +DBA_HIST_BUFFER_POOL_STAT +DBA_HIST_CLUSTER_INTERCON +DBA_HIST_COLORED_SQL +DBA_HIST_COMP_IOSTAT +DBA_HIST_CR_BLOCK_SERVER +DBA_HIST_CURRENT_BLOCK_SERVER +DBA_HIST_DATABASE_INSTANCE +DBA_HIST_DATAFILE +DBA_HIST_DB_CACHE_ADVICE +DBA_HIST_DISPATCHER +DBA_HIST_DLM_MISC +DBA_HIST_DYN_REMASTER_STATS +DBA_HIST_ENQUEUE_STAT +DBA_HIST_EVENT_HISTOGRAM +DBA_HIST_EVENT_NAME +DBA_HIST_FILEMETRIC_HISTORY +DBA_HIST_FILESTATXS +DBA_HIST_IC_CLIENT_STATS +DBA_HIST_IC_DEVICE_STATS +DBA_HIST_INSTANCE_RECOVERY +DBA_HIST_INST_CACHE_TRANSFER +DBA_HIST_INTERCONNECT_PINGS +DBA_HIST_IOSTAT_DETAIL +DBA_HIST_IOSTAT_FILETYPE +DBA_HIST_IOSTAT_FILETYPE_NAME +DBA_HIST_IOSTAT_FUNCTION +DBA_HIST_IOSTAT_FUNCTION_NAME +DBA_HIST_JAVA_POOL_ADVICE +DBA_HIST_LATCH +DBA_HIST_LATCH_CHILDREN +DBA_HIST_LATCH_MISSES_SUMMARY +DBA_HIST_LATCH_NAME +DBA_HIST_LATCH_PARENT +DBA_HIST_LIBRARYCACHE +DBA_HIST_LOG +DBA_HIST_MEMORY_RESIZE_OPS +DBA_HIST_MEMORY_TARGET_ADVICE +DBA_HIST_MEM_DYNAMIC_COMP +DBA_HIST_METRIC_NAME +DBA_HIST_MTTR_TARGET_ADVICE +DBA_HIST_MUTEX_SLEEP +DBA_HIST_MVPARAMETER +DBA_HIST_OPTIMIZER_ENV +DBA_HIST_OSSTAT +DBA_HIST_OSSTAT_NAME +DBA_HIST_PARAMETER +DBA_HIST_PARAMETER_NAME +DBA_HIST_PERSISTENT_QMN_CACHE +DBA_HIST_PERSISTENT_QUEUES +DBA_HIST_PERSISTENT_SUBS +DBA_HIST_PGASTAT +DBA_HIST_PGA_TARGET_ADVICE +DBA_HIST_PLAN_OPERATION_NAME +DBA_HIST_PLAN_OPTION_NAME +DBA_HIST_PROCESS_MEM_SUMMARY +DBA_HIST_RESOURCE_LIMIT +DBA_HIST_ROWCACHE_SUMMARY +DBA_HIST_RSRC_CONSUMER_GROUP +DBA_HIST_RSRC_PLAN +DBA_HIST_RULE_SET +DBA_HIST_SEG_STAT +DBA_HIST_SEG_STAT_OBJ +DBA_HIST_SERVICE_NAME +DBA_HIST_SERVICE_STAT +DBA_HIST_SERVICE_WAIT_CLASS +DBA_HIST_SESSMETRIC_HISTORY +DBA_HIST_SESS_TIME_STATS +DBA_HIST_SGA +DBA_HIST_SGASTAT +DBA_HIST_SGA_TARGET_ADVICE +DBA_HIST_SHARED_POOL_ADVICE +DBA_HIST_SHARED_SERVER_SUMMARY +DBA_HIST_SNAPSHOT +DBA_HIST_SNAP_ERROR +DBA_HIST_SQLBIND +DBA_HIST_SQLCOMMAND_NAME +DBA_HIST_SQLSTAT +DBA_HIST_SQLTEXT +DBA_HIST_SQL_BIND_METADATA +DBA_HIST_SQL_PLAN +DBA_HIST_SQL_SUMMARY +DBA_HIST_SQL_WORKAREA_HSTGRM +DBA_HIST_STAT_NAME +DBA_HIST_STREAMS_APPLY_SUM +DBA_HIST_STREAMS_CAPTURE +DBA_HIST_STREAMS_POOL_ADVICE +DBA_HIST_SYSMETRIC_HISTORY +DBA_HIST_SYSMETRIC_SUMMARY +DBA_HIST_SYSSTAT +DBA_HIST_SYSTEM_EVENT +DBA_HIST_SYS_TIME_MODEL +DBA_HIST_TABLESPACE +DBA_HIST_TABLESPACE_STAT +DBA_HIST_TBSPC_SPACE_USAGE +DBA_HIST_TEMPFILE +DBA_HIST_TEMPSTATXS +DBA_HIST_THREAD +DBA_HIST_TOPLEVELCALL_NAME +DBA_HIST_UNDOSTAT +DBA_HIST_WAITCLASSMET_HISTORY +DBA_HIST_WAITSTAT +DBA_HIST_WR_CONTROL +DBA_IAS_CONSTRAINT_EXP +DBA_IAS_GEN_STMTS +DBA_IAS_GEN_STMTS_EXP +DBA_IAS_OBJECTS +DBA_IAS_OBJECTS_BASE +DBA_IAS_OBJECTS_EXP +DBA_IAS_POSTGEN_STMTS +DBA_IAS_PREGEN_STMTS +DBA_IAS_SITES +DBA_IAS_TEMPLATES +DBA_IDENTIFIERS +DBA_INDEXES +DBA_INDEXTYPES +DBA_INDEXTYPE_ARRAYTYPES +DBA_INDEXTYPE_COMMENTS +DBA_INDEXTYPE_OPERATORS +DBA_IND_COLUMNS +DBA_IND_EXPRESSIONS +DBA_IND_PARTITIONS +DBA_IND_PENDING_STATS +DBA_IND_STATISTICS +DBA_IND_SUBPARTITIONS +DBA_INTERNAL_TRIGGERS +DBA_INVALID_OBJECTS +DBA_JAVA_ARGUMENTS +DBA_JAVA_CLASSES +DBA_JAVA_COMPILER_OPTIONS +DBA_JAVA_DERIVATIONS +DBA_JAVA_FIELDS +DBA_JAVA_IMPLEMENTS +DBA_JAVA_INNERS +DBA_JAVA_LAYOUTS +DBA_JAVA_METHODS +DBA_JAVA_NCOMPS +DBA_JAVA_POLICY +DBA_JAVA_RESOLVERS +DBA_JAVA_THROWS +DBA_JOBS +DBA_JOBS_RUNNING +DBA_JOIN_IND_COLUMNS +DBA_KEEPSIZES +DBA_KGLLOCK +DBA_LIBRARIES +DBA_LMT_FREE_SPACE +DBA_LMT_USED_EXTENTS +DBA_LOBS +DBA_LOB_PARTITIONS +DBA_LOB_SUBPARTITIONS +DBA_LOB_TEMPLATES +DBA_LOCK +DBA_LOCKS +DBA_LOCK_INTERNAL +DBA_LOGMNR_LOG +DBA_LOGMNR_PURGED_LOG +DBA_LOGMNR_SESSION +DBA_LOGSTDBY_EDS_SUPPORTED +DBA_LOGSTDBY_EDS_TABLES +DBA_LOGSTDBY_EVENTS +DBA_LOGSTDBY_HISTORY +DBA_LOGSTDBY_LOG +DBA_LOGSTDBY_NOT_UNIQUE +DBA_LOGSTDBY_PARAMETERS +DBA_LOGSTDBY_PROGRESS +DBA_LOGSTDBY_SKIP +DBA_LOGSTDBY_SKIP_TRANSACTION +DBA_LOGSTDBY_UNSUPPORTED +DBA_LOGSTDBY_UNSUPPORTED_TABLE +DBA_LOG_GROUPS +DBA_LOG_GROUP_COLUMNS +DBA_MEASURE_FOLDERS +DBA_MEASURE_FOLDER_CONTENTS +DBA_METHOD_PARAMS +DBA_METHOD_RESULTS +DBA_MINING_MODELS +DBA_MINING_MODEL_ATTRIBUTES +DBA_MINING_MODEL_SETTINGS +DBA_MINING_MODEL_TABLES +DBA_MVIEWS +DBA_MVIEW_AGGREGATES +DBA_MVIEW_ANALYSIS +DBA_MVIEW_COMMENTS +DBA_MVIEW_DETAIL_PARTITION +DBA_MVIEW_DETAIL_RELATIONS +DBA_MVIEW_DETAIL_SUBPARTITION +DBA_MVIEW_JOINS +DBA_MVIEW_KEYS +DBA_MVIEW_LOGS +DBA_MVIEW_LOG_FILTER_COLS +DBA_MVIEW_REFRESH_TIMES +DBA_NESTED_TABLES +DBA_NESTED_TABLE_COLS +DBA_NETWORK_ACLS +DBA_NETWORK_ACL_PRIVILEGES +DBA_OBJECTS +DBA_OBJECTS_AE +DBA_OBJECT_SIZE +DBA_OBJECT_TABLES +DBA_OBJ_AUDIT_OPTS +DBA_OBJ_COLATTRS +DBA_OLDIMAGE_COLUMNS +DBA_OPANCILLARY +DBA_OPARGUMENTS +DBA_OPBINDINGS +DBA_OPERATORS +DBA_OPERATOR_COMMENTS +DBA_OPTSTAT_OPERATIONS +DBA_OUTLINES +DBA_OUTLINE_HINTS +DBA_OUTSTANDING_ALERTS +DBA_PARALLEL_EXECUTE_CHUNKS +DBA_PARALLEL_EXECUTE_TASKS +DBA_PARTIAL_DROP_TABS +DBA_PART_COL_STATISTICS +DBA_PART_HISTOGRAMS +DBA_PART_INDEXES +DBA_PART_KEY_COLUMNS +DBA_PART_LOBS +DBA_PART_TABLES +DBA_PENDING_CONV_TABLES +DBA_PENDING_TRANSACTIONS +DBA_PLSQL_OBJECT_SETTINGS +DBA_POLICIES +DBA_POLICY_CONTEXTS +DBA_POLICY_GROUPS +DBA_PRIV_AUDIT_OPTS +DBA_PROCEDURES +DBA_PROFILES +DBA_PROPAGATION +DBA_PROXIES +DBA_PUBLISHED_COLUMNS +DBA_QUEUES +DBA_QUEUE_PUBLISHERS +DBA_QUEUE_SCHEDULES +DBA_QUEUE_SUBSCRIBERS +DBA_QUEUE_TABLES +DBA_RCHILD +DBA_RECOVERABLE_SCRIPT +DBA_RECOVERABLE_SCRIPT_BLOCKS +DBA_RECOVERABLE_SCRIPT_ERRORS +DBA_RECOVERABLE_SCRIPT_HIST +DBA_RECOVERABLE_SCRIPT_PARAMS +DBA_RECYCLEBIN +DBA_REFRESH +DBA_REFRESH_CHILDREN +DBA_REFS +DBA_REGISTERED_ARCHIVED_LOG +DBA_REGISTERED_MVIEWS +DBA_REGISTERED_MVIEW_GROUPS +DBA_REGISTERED_SNAPSHOTS +DBA_REGISTERED_SNAPSHOT_GROUPS +DBA_REGISTRY +DBA_REGISTRY_DATABASE +DBA_REGISTRY_DEPENDENCIES +DBA_REGISTRY_HIERARCHY +DBA_REGISTRY_HISTORY +DBA_REGISTRY_LOG +DBA_REGISTRY_PROGRESS +DBA_REPAUDIT_ATTRIBUTE +DBA_REPAUDIT_COLUMN +DBA_REPCAT +DBA_REPCATLOG +DBA_REPCAT_EXCEPTIONS +DBA_REPCOLUMN +DBA_REPCOLUMN_GROUP +DBA_REPCONFLICT +DBA_REPDDL +DBA_REPEXTENSIONS +DBA_REPFLAVORS +DBA_REPFLAVOR_COLUMNS +DBA_REPFLAVOR_OBJECTS +DBA_REPGENERATED +DBA_REPGENOBJECTS +DBA_REPGROUP +DBA_REPGROUPED_COLUMN +DBA_REPGROUP_PRIVILEGES +DBA_REPKEY_COLUMNS +DBA_REPOBJECT +DBA_REPPARAMETER_COLUMN +DBA_REPPRIORITY +DBA_REPPRIORITY_GROUP +DBA_REPPROP +DBA_REPRESOLUTION +DBA_REPRESOLUTION_METHOD +DBA_REPRESOLUTION_STATISTICS +DBA_REPRESOL_STATS_CONTROL +DBA_REPSCHEMA +DBA_REPSITES +DBA_REPSITES_NEW +DBA_RESOURCE_INCARNATIONS +DBA_RESUMABLE +DBA_REWRITE_EQUIVALENCES +DBA_RGROUP +DBA_ROLES +DBA_ROLE_PRIVS +DBA_ROLLBACK_SEGS +DBA_RSRC_CAPABILITY +DBA_RSRC_CATEGORIES +DBA_RSRC_CONSUMER_GROUPS +DBA_RSRC_CONSUMER_GROUP_PRIVS +DBA_RSRC_GROUP_MAPPINGS +DBA_RSRC_INSTANCE_CAPABILITY +DBA_RSRC_IO_CALIBRATE +DBA_RSRC_MANAGER_SYSTEM_PRIVS +DBA_RSRC_MAPPING_PRIORITY +DBA_RSRC_PLANS +DBA_RSRC_PLAN_DIRECTIVES +DBA_RSRC_STORAGE_POOL_MAPPING +DBA_RULES +DBA_RULESETS +DBA_RULE_SETS +DBA_RULE_SET_RULES +DBA_SCHEDULER_CHAINS +DBA_SCHEDULER_CHAIN_RULES +DBA_SCHEDULER_CHAIN_STEPS +DBA_SCHEDULER_CREDENTIALS +DBA_SCHEDULER_DB_DESTS +DBA_SCHEDULER_DESTS +DBA_SCHEDULER_EXTERNAL_DESTS +DBA_SCHEDULER_FILE_WATCHERS +DBA_SCHEDULER_GLOBAL_ATTRIBUTE +DBA_SCHEDULER_GROUPS +DBA_SCHEDULER_GROUP_MEMBERS +DBA_SCHEDULER_JOBS +DBA_SCHEDULER_JOB_ARGS +DBA_SCHEDULER_JOB_CLASSES +DBA_SCHEDULER_JOB_DESTS +DBA_SCHEDULER_JOB_LOG +DBA_SCHEDULER_JOB_ROLES +DBA_SCHEDULER_JOB_RUN_DETAILS +DBA_SCHEDULER_NOTIFICATIONS +DBA_SCHEDULER_PROGRAMS +DBA_SCHEDULER_PROGRAM_ARGS +DBA_SCHEDULER_REMOTE_DATABASES +DBA_SCHEDULER_REMOTE_JOBSTATE +DBA_SCHEDULER_RUNNING_CHAINS +DBA_SCHEDULER_SCHEDULES +DBA_SCHEDULER_WINDOWS +DBA_SCHEDULER_WINDOW_DETAILS +DBA_SCHEDULER_WINDOW_GROUPS +DBA_SCHEDULER_WINDOW_LOG +DBA_SCHEDULER_WINGROUP_MEMBERS +DBA_SECONDARY_OBJECTS +DBA_SEC_RELEVANT_COLS +DBA_SEGMENTS +DBA_SEGMENTS_OLD +DBA_SEQUENCES +DBA_SERVER_REGISTRY +DBA_SNAPSHOTS +DBA_SNAPSHOT_LOGS +DBA_SNAPSHOT_LOG_FILTER_COLS +DBA_SNAPSHOT_REFRESH_TIMES +DBA_SOURCE +DBA_SOURCE_AE +DBA_SOURCE_TABLES +DBA_SQLJ_TYPES +DBA_SQLJ_TYPE_ATTRS +DBA_SQLJ_TYPE_METHODS +DBA_SQLSET +DBA_SQLSET_BINDS +DBA_SQLSET_DEFINITIONS +DBA_SQLSET_PLANS +DBA_SQLSET_REFERENCES +DBA_SQLSET_STATEMENTS +DBA_SQLTUNE_BINDS +DBA_SQLTUNE_PLANS +DBA_SQLTUNE_RATIONALE_PLAN +DBA_SQLTUNE_STATISTICS +DBA_SQL_MONITOR_USAGE +DBA_SQL_PATCHES +DBA_SQL_PLAN_BASELINES +DBA_SQL_PROFILES +DBA_SSCR_CAPTURE +DBA_SSCR_RESTORE +DBA_STAT_EXTENSIONS +DBA_STMT_AUDIT_OPTS +DBA_STORED_SETTINGS +DBA_STREAMS_ADD_COLUMN +DBA_STREAMS_ADMINISTRATOR +DBA_STREAMS_COLUMNS +DBA_STREAMS_DELETE_COLUMN +DBA_STREAMS_GLOBAL_RULES +DBA_STREAMS_KEEP_COLUMNS +DBA_STREAMS_MESSAGE_CONSUMERS +DBA_STREAMS_MESSAGE_RULES +DBA_STREAMS_NEWLY_SUPPORTED +DBA_STREAMS_RENAME_COLUMN +DBA_STREAMS_RENAME_SCHEMA +DBA_STREAMS_RENAME_TABLE +DBA_STREAMS_RULES +DBA_STREAMS_SCHEMA_RULES +DBA_STREAMS_SPLIT_MERGE +DBA_STREAMS_SPLIT_MERGE_HIST +DBA_STREAMS_TABLE_RULES +DBA_STREAMS_TP_COMPONENT +DBA_STREAMS_TP_COMPONENT_LINK +DBA_STREAMS_TP_COMPONENT_STAT +DBA_STREAMS_TP_DATABASE +DBA_STREAMS_TP_PATH_BOTTLENECK +DBA_STREAMS_TP_PATH_STAT +DBA_STREAMS_TRANSFORMATIONS +DBA_STREAMS_TRANSFORM_FUNCTION +DBA_STREAMS_UNSUPPORTED +DBA_SUBPARTITION_TEMPLATES +DBA_SUBPART_COL_STATISTICS +DBA_SUBPART_HISTOGRAMS +DBA_SUBPART_KEY_COLUMNS +DBA_SUBSCRIBED_COLUMNS +DBA_SUBSCRIBED_TABLES +DBA_SUBSCRIPTIONS +DBA_SUBSCR_REGISTRATIONS +DBA_SUMMARIES +DBA_SYNC_CAPTURE +DBA_SYNC_CAPTURE_PREPARED_TABS +DBA_SYNC_CAPTURE_TABLES +DBA_SYNONYMS +DBA_SYS_PRIVS +DBA_TABLES +DBA_TABLESPACES +DBA_TABLESPACE_GROUPS +DBA_TABLESPACE_THRESHOLDS +DBA_TABLESPACE_USAGE_METRICS +DBA_TAB_COLS +DBA_TAB_COLUMNS +DBA_TAB_COL_STATISTICS +DBA_TAB_COMMENTS +DBA_TAB_HISTGRM_PENDING_STATS +DBA_TAB_HISTOGRAMS +DBA_TAB_MODIFICATIONS +DBA_TAB_PARTITIONS +DBA_TAB_PENDING_STATS +DBA_TAB_PRIVS +DBA_TAB_STATISTICS +DBA_TAB_STATS_HISTORY +DBA_TAB_STAT_PREFS +DBA_TAB_SUBPARTITIONS +DBA_TEMPLATE_REFGROUPS +DBA_TEMPLATE_TARGETS +DBA_TEMP_FILES +DBA_TEMP_FREE_SPACE +DBA_THRESHOLDS +DBA_TRANSFORMATIONS +DBA_TRIGGERS +DBA_TRIGGER_COLS +DBA_TRIGGER_ORDERING +DBA_TSM_DESTINATION +DBA_TSM_HISTORY +DBA_TSM_SOURCE +DBA_TSTZ_TABLES +DBA_TSTZ_TAB_COLS +DBA_TS_QUOTAS +DBA_TUNE_MVIEW +DBA_TYPES +DBA_TYPE_ATTRS +DBA_TYPE_METHODS +DBA_TYPE_VERSIONS +DBA_UNDO_EXTENTS +DBA_UNUSED_COL_TABS +DBA_UPDATABLE_COLUMNS +DBA_USERS +DBA_USERS_WITH_DEFPWD +DBA_USTATS +DBA_VARRAYS +DBA_VIEWS +DBA_VIEWS_AE +DBA_WAITERS +DBA_WALLET_ACLS +DBA_WARNING_SETTINGS +DBA_WORKLOAD_CAPTURES +DBA_WORKLOAD_CONNECTION_MAP +DBA_WORKLOAD_FILTERS +DBA_WORKLOAD_REPLAYS +DBA_WORKLOAD_REPLAY_DIVERGENCE +DBA_WORKLOAD_REPLAY_FILTER_SET +DBA_XDS_ATTRIBUTE_SECS +DBA_XDS_INSTANCE_SETS +DBA_XDS_OBJECTS +DBA_XMLSCHEMA_LEVEL_VIEW +DBA_XMLSCHEMA_LEVEL_VIEW_DUP +DBA_XML_INDEXES +DBA_XML_SCHEMAS +DBA_XML_SCHEMA_DEPENDENCY +DBA_XML_SCHEMA_IMPORTS +DBA_XML_SCHEMA_INCLUDES +DBA_XML_TABLES +DBA_XML_TAB_COLS +DBA_XML_VIEWS +DBA_XML_VIEW_COLS +DBA_XSTREAM_ADMINISTRATOR +DBA_XSTREAM_INBOUND +DBA_XSTREAM_OUTBOUND +DBA_XSTREAM_OUT_SUPPORT_MODE +DBA_XSTREAM_RULES +DBID +DBJ_LONG_NAME. +DBJ_SHORT_NAME. +DBLINK +DBLINK_NAME +DBMSHSXP. +DBMSHSXP.SYSTEM_INFO_EXP +DBMSOBJG. +DBMSOBJG.CHECK_PERMISSIONS +DBMSOBJG.FIND_COL_INFO +DBMSOBJG.FIND_TS_INFO +DBMSOBJG.GENERATE_DDL +DBMSOBJG.GET_NLS_SUBSTR +DBMSOBJG.GET_TAB_SPACE +DBMSOBJG2. +DBMSOBJG2.GENERATE_IND_PART_STORAGE +DBMSOBJG2.GENERATE_IOT_PART_STORAGE +DBMSOBJG2.GENERATE_TABLE_PART_STORAGE +DBMSOBJGWRAPPER. +DBMSOBJGWRAPPER.GENERATE_DDL +DBMSOBJGWRAPPER.ROLLBACK_DDL +DBMSOBJG_DP. +DBMSOBJG_DP.GENERATE_DDL_DP +DBMSZEXP_SYSPKGGRNT. +DBMSZEXP_SYSPKGGRNT.SYSTEM_INFO_EXP +DBMS_ADDM. +DBMS_ADDM.ANALYZE_DB +DBMS_ADDM.ANALYZE_INST +DBMS_ADDM.ANALYZE_PARTIAL +DBMS_ADDM.DELETE +DBMS_ADDM.DELETE_FINDING_DIRECTIVE +DBMS_ADDM.DELETE_PARAMETER_DIRECTIVE +DBMS_ADDM.DELETE_SEGMENT_DIRECTIVE +DBMS_ADDM.DELETE_SQL_DIRECTIVE +DBMS_ADDM.GET_ASH_QUERY +DBMS_ADDM.GET_REPORT +DBMS_ADDM.INSERT_FINDING_DIRECTIVE +DBMS_ADDM.INSERT_PARAMETER_DIRECTIVE +DBMS_ADDM.INSERT_SEGMENT_DIRECTIVE +DBMS_ADDM.INSERT_SQL_DIRECTIVE +DBMS_ADR. +DBMS_ADR.CLEANOUT_SCHEMA +DBMS_ADR.DOWNGRADE_SCHEMA +DBMS_ADR.MIGRATE_SCHEMA +DBMS_ADR.RECOVER_SCHEMA +DBMS_ADVANCED_REWRITE. +DBMS_ADVANCED_REWRITE.ALTER_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.BUILD_SAFE_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.VALIDATE_REWRITE_EQUIVALENCE +DBMS_ADVISOR. +DBMS_ADVISOR.ADD_SQLWKLD_REF +DBMS_ADVISOR.ADD_SQLWKLD_STATEMENT +DBMS_ADVISOR.ADD_STS_REF +DBMS_ADVISOR.CANCEL_TASK +DBMS_ADVISOR.CHECK_PRIVS +DBMS_ADVISOR.CHECK_READ_PRIVS +DBMS_ADVISOR.COPY_SQLWKLD_TO_STS +DBMS_ADVISOR.CREATE_FILE +DBMS_ADVISOR.CREATE_OBJECT +DBMS_ADVISOR.CREATE_SQLWKLD +DBMS_ADVISOR.CREATE_TASK +DBMS_ADVISOR.DELETE_DIRECTIVE +DBMS_ADVISOR.DELETE_SQLWKLD +DBMS_ADVISOR.DELETE_SQLWKLD_REF +DBMS_ADVISOR.DELETE_SQLWKLD_STATEMENT +DBMS_ADVISOR.DELETE_STS_REF +DBMS_ADVISOR.DELETE_TASK +DBMS_ADVISOR.EVALUATE_DIRECTIVE +DBMS_ADVISOR.EXECUTE_TASK +DBMS_ADVISOR.FORMAT_MESSAGE +DBMS_ADVISOR.FORMAT_MESSAGE_GROUP +DBMS_ADVISOR.GET_ACCESS_ADVISOR_DEFAULTS +DBMS_ADVISOR.GET_REC_ATTRIBUTES +DBMS_ADVISOR.GET_TASK_REPORT +DBMS_ADVISOR.GET_TASK_SCRIPT +DBMS_ADVISOR.IMPLEMENT_TASK +DBMS_ADVISOR.IMPORT_SQLWKLD_SCHEMA +DBMS_ADVISOR.IMPORT_SQLWKLD_SQLCACHE +DBMS_ADVISOR.IMPORT_SQLWKLD_STS +DBMS_ADVISOR.IMPORT_SQLWKLD_SUMADV +DBMS_ADVISOR.IMPORT_SQLWKLD_USER +DBMS_ADVISOR.INSERT_DIRECTIVE +DBMS_ADVISOR.INTERRUPT_TASK +DBMS_ADVISOR.MARK_RECOMMENDATION +DBMS_ADVISOR.QUICK_TUNE +DBMS_ADVISOR.RESET_SQLWKLD +DBMS_ADVISOR.RESET_TASK +DBMS_ADVISOR.RESUME_TASK +DBMS_ADVISOR.SETUP_REPOSITORY +DBMS_ADVISOR.SETUP_USER_ENVIRONMENT +DBMS_ADVISOR.SET_DEFAULT_SQLWKLD_PARAMETER +DBMS_ADVISOR.SET_DEFAULT_TASK_PARAMETER +DBMS_ADVISOR.SET_SQLWKLD_PARAMETER +DBMS_ADVISOR.SET_TASK_PARAMETER +DBMS_ADVISOR.TUNE_MVIEW +DBMS_ADVISOR.UPDATE_DIRECTIVE +DBMS_ADVISOR.UPDATE_OBJECT +DBMS_ADVISOR.UPDATE_REC_ATTRIBUTES +DBMS_ADVISOR.UPDATE_SQLWKLD_ATTRIBUTES +DBMS_ADVISOR.UPDATE_SQLWKLD_STATEMENT +DBMS_ADVISOR.UPDATE_TASK_ATTRIBUTES +DBMS_ALERT. +DBMS_ALERT.REGISTER +DBMS_ALERT.REMOVE +DBMS_ALERT.REMOVEALL +DBMS_ALERT.SET_DEFAULTS +DBMS_ALERT.SIGNAL +DBMS_ALERT.WAITANY +DBMS_ALERT.WAITONE +DBMS_ALERT_INFO +DBMS_AMD. +DBMS_AMD.MOVE_OLAP_CATALOG +DBMS_APBACKEND. +DBMS_APBACKEND.CHECK_VALID_TBS +DBMS_APBACKEND.CLEANUPUNUSEDBACKUPFILES +DBMS_APBACKEND.DELETECONTENT +DBMS_APBACKEND.DELETECONTENTAT +DBMS_APBACKEND.DEREGSTORECOMMAND +DBMS_APBACKEND.DROPSTORE +DBMS_APBACKEND.EXISTSFILE +DBMS_APBACKEND.GETARCHIVEREFID +DBMS_APBACKEND.GETCOMPRESSIONLEVEL +DBMS_APBACKEND.GETCONTENT +DBMS_APBACKEND.GETSTAGINGAREALOCATOR +DBMS_APBACKEND.GETSTORECONTENTSIZE +DBMS_APBACKEND.GETSTOREPROPERTY +DBMS_APBACKEND.GETTARBALLID +DBMS_APBACKEND.IMPORTREFERENCE +DBMS_APBACKEND.ISAPDEBUGON +DBMS_APBACKEND.ISREADABLEONLY +DBMS_APBACKEND.REGISTERSTORECOMMAND +DBMS_APBACKEND.REGISTERSTOREOWNER +DBMS_APBACKEND.SENDCOMMAND +DBMS_APBACKEND.SETSTOREPROPERTY +DBMS_APBACKEND.STOREPUSH +DBMS_APBACKEND.WRITECONTENT +DBMS_APPCTX. +DBMS_APPCTX.CLEAR_CONTEXT +DBMS_APPCTX.SET_CONTEXT +DBMS_APPLICATION_INFO. +DBMS_APPLICATION_INFO.READ_CLIENT_INFO +DBMS_APPLICATION_INFO.READ_MODULE +DBMS_APPLICATION_INFO.SET_ACTION +DBMS_APPLICATION_INFO.SET_CLIENT_INFO +DBMS_APPLICATION_INFO.SET_MODULE +DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS +DBMS_APPLY_ADM. +DBMS_APPLY_ADM.ADD_STMT_HANDLER +DBMS_APPLY_ADM.ALTER_APPLY +DBMS_APPLY_ADM.COMPARE_OLD_VALUES +DBMS_APPLY_ADM.CREATE_APPLY +DBMS_APPLY_ADM.CREATE_OBJECT_DEPENDENCY +DBMS_APPLY_ADM.DELETE_ALL_ERRORS +DBMS_APPLY_ADM.DELETE_ERROR +DBMS_APPLY_ADM.DROP_APPLY +DBMS_APPLY_ADM.DROP_OBJECT_DEPENDENCY +DBMS_APPLY_ADM.EXECUTE_ALL_ERRORS +DBMS_APPLY_ADM.EXECUTE_ERROR +DBMS_APPLY_ADM.GET_ERROR_MESSAGE +DBMS_APPLY_ADM.REMOVE_STMT_HANDLER +DBMS_APPLY_ADM.SET_CHANGE_HANDLER +DBMS_APPLY_ADM.SET_DML_HANDLER +DBMS_APPLY_ADM.SET_ENQUEUE_DESTINATION +DBMS_APPLY_ADM.SET_EXECUTE +DBMS_APPLY_ADM.SET_GLOBAL_INSTANTIATION_SCN +DBMS_APPLY_ADM.SET_KEY_COLUMNS +DBMS_APPLY_ADM.SET_PARAMETER +DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN +DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN +DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER +DBMS_APPLY_ADM.SET_VALUE_DEPENDENCY +DBMS_APPLY_ADM.START_APPLY +DBMS_APPLY_ADM.STOP_APPLY +DBMS_APPLY_ADM_INTERNAL. +DBMS_APPLY_ADM_INTERNAL.ADD_OBJECT_CONSTRAINT +DBMS_APPLY_ADM_INTERNAL.ALTER_APPLY +DBMS_APPLY_ADM_INTERNAL.ALTER_OBJECT_ERROR_NOTIFIER +DBMS_APPLY_ADM_INTERNAL.COMPARE_OLD_VALUES_INNER +DBMS_APPLY_ADM_INTERNAL.CREATE_APPLY +DBMS_APPLY_ADM_INTERNAL.CREATE_MONITOR_JOB +DBMS_APPLY_ADM_INTERNAL.DROP_APPLY +DBMS_APPLY_ADM_INTERNAL.DROP_APPLY_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.DROP_MONITOR_JOB +DBMS_APPLY_ADM_INTERNAL.DROP_OBJECT_CONSTRAINT +DBMS_APPLY_ADM_INTERNAL.INVALIDATE_DEST_OBJ +DBMS_APPLY_ADM_INTERNAL.INVALIDATE_TABLE_OBJECT +DBMS_APPLY_ADM_INTERNAL.MONITOR_APPLY_PROGRESS +DBMS_APPLY_ADM_INTERNAL.POPULATE_APPLY_PROGRESS +DBMS_APPLY_ADM_INTERNAL.POPULATE_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.RECALCULATE_MAX_INST_SCN +DBMS_APPLY_ADM_INTERNAL.RECOVER_APPLY_PROGRESS +DBMS_APPLY_ADM_INTERNAL.REGISTER_REMOTE_OBJECT +DBMS_APPLY_ADM_INTERNAL.SET_CHANGE_HANDLER +DBMS_APPLY_ADM_INTERNAL.SET_CONSTRAINT_COLUMNS +DBMS_APPLY_ADM_INTERNAL.SET_DML_CONFLICT_HANDLER +DBMS_APPLY_ADM_INTERNAL.SET_UPDATE_CONFLICT_HANDLER +DBMS_APPLY_ADM_INTERNAL.UNPICKLE_APPLY_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.VALIDATE_REMOTE_COLUMN +DBMS_APPLY_ERROR. +DBMS_APPLY_ERROR.DELETE_ALL_ERRORS +DBMS_APPLY_ERROR.DELETE_ERROR +DBMS_APPLY_ERROR.EXECUTE_ALL_ERRORS +DBMS_APPLY_ERROR.EXECUTE_ERROR +DBMS_APPLY_ERROR.GET_ERROR_MESSAGE +DBMS_APPLY_ERROR.PROCESS_USER_PROPERTIES +DBMS_APPLY_HANDLER_ADM. +DBMS_APPLY_HANDLER_ADM.ADD_STMT_HANDLER +DBMS_APPLY_HANDLER_ADM.REMOVE_STMT_HANDLER +DBMS_APPLY_HANDLER_ADM.SET_STMT_HANDLER +DBMS_APPLY_HANDLER_INTERNAL. +DBMS_APPLY_HANDLER_INTERNAL.ADD_STMT_HANDLER +DBMS_APPLY_HANDLER_INTERNAL.INVALIDATE_DEST_OBJ +DBMS_APPLY_HANDLER_INTERNAL.REMOVE_STMT_HANDLER +DBMS_APPLY_POSITION. +DBMS_APPLY_POSITION.GET_EXTERNAL_POSITION +DBMS_APPLY_POSITION.SET_GLOBAL_INSTANTIATION_SCN +DBMS_APPLY_POSITION.SET_SCHEMA_INSTANTIATION_SCN +DBMS_APPLY_POSITION.SET_TABLE_INSTANTIATION_SCN +DBMS_APPLY_PROCESS. +DBMS_APPLY_PROCESS.GET_APPLY# +DBMS_AQ. +DBMS_AQ.AQ$_DEQUEUE +DBMS_AQ.AQ$_ENQUEUE +DBMS_AQ.BIND_AGENT +DBMS_AQ.DEQUEUE +DBMS_AQ.DEQUEUE_ARRAY +DBMS_AQ.ENQUEUE +DBMS_AQ.ENQUEUE_ARRAY +DBMS_AQ.LISTEN +DBMS_AQ.POST +DBMS_AQ.REGISTER +DBMS_AQ.UNBIND_AGENT +DBMS_AQ.UNREGISTER +DBMS_AQADM. +DBMS_AQADM.ADD_ALIAS_TO_LDAP +DBMS_AQADM.ADD_CONNECTION_TO_LDAP +DBMS_AQADM.ADD_SUBSCRIBER +DBMS_AQADM.ALTER_AQ_AGENT +DBMS_AQADM.ALTER_PROPAGATION_SCHEDULE +DBMS_AQADM.ALTER_QUEUE +DBMS_AQADM.ALTER_QUEUE_TABLE +DBMS_AQADM.ALTER_SUBSCRIBER +DBMS_AQADM.AQ$_PROPAQ +DBMS_AQADM.CREATE_AQ_AGENT +DBMS_AQADM.CREATE_NP_QUEUE +DBMS_AQADM.CREATE_QUEUE +DBMS_AQADM.CREATE_QUEUE_TABLE +DBMS_AQADM.DEL_ALIAS_FROM_LDAP +DBMS_AQADM.DEL_CONNECTION_FROM_LDAP +DBMS_AQADM.DISABLE_DB_ACCESS +DBMS_AQADM.DISABLE_PROPAGATION_SCHEDULE +DBMS_AQADM.DROP_AQ_AGENT +DBMS_AQADM.DROP_QUEUE +DBMS_AQADM.DROP_QUEUE_TABLE +DBMS_AQADM.ENABLE_DB_ACCESS +DBMS_AQADM.ENABLE_JMS_TYPES +DBMS_AQADM.ENABLE_PROPAGATION_SCHEDULE +DBMS_AQADM.GET_PROP_SEQNO +DBMS_AQADM.GET_REPLAY_INFO +DBMS_AQADM.GET_TYPE_INFO +DBMS_AQADM.GET_WATERMARK +DBMS_AQADM.GRANT_QUEUE_PRIVILEGE +DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE +DBMS_AQADM.GRANT_TYPE_ACCESS +DBMS_AQADM.MIGRATE_QUEUE_TABLE +DBMS_AQADM.NONREPUDIATE_RECEIVER +DBMS_AQADM.NONREPUDIATE_SENDER +DBMS_AQADM.PURGE_QUEUE_TABLE +DBMS_AQADM.QUEUE_SUBSCRIBERS +DBMS_AQADM.RECOVER_PROPAGATION +DBMS_AQADM.REMOVE_SUBSCRIBER +DBMS_AQADM.RESET_REPLAY_INFO +DBMS_AQADM.REVOKE_QUEUE_PRIVILEGE +DBMS_AQADM.REVOKE_SYSTEM_PRIVILEGE +DBMS_AQADM.SCHEDULE_PROPAGATION +DBMS_AQADM.SET_WATERMARK +DBMS_AQADM.START_QUEUE +DBMS_AQADM.START_TIME_MANAGER +DBMS_AQADM.STOP_QUEUE +DBMS_AQADM.STOP_TIME_MANAGER +DBMS_AQADM.UNSCHEDULE_PROPAGATION +DBMS_AQADM.VERIFY_QUEUE_TYPES +DBMS_AQADM.VERIFY_QUEUE_TYPES_GET_NRP +DBMS_AQADM.VERIFY_QUEUE_TYPES_NO_QUEUE +DBMS_AQADM_INV. +DBMS_AQADM_INV.EXECUTE_STMT +DBMS_AQADM_INV.EXECUTE_STMT2 +DBMS_AQADM_SYS. +DBMS_AQADM_SYS.ADD_ALIAS_TO_LDAP +DBMS_AQADM_SYS.ADD_BUFFER +DBMS_AQADM_SYS.ADD_BUFFER_INT +DBMS_AQADM_SYS.ADD_BUFFER_TABLES +DBMS_AQADM_SYS.ADD_BUFFER_TABLES_INT +DBMS_AQADM_SYS.ADD_CONNECTION_TO_LDAP +DBMS_AQADM_SYS.ADD_DB_LINK +DBMS_AQADM_SYS.ADD_NONDURABLE_SUBSCRIBER +DBMS_AQADM_SYS.ADD_QTAB_EXPDEP +DBMS_AQADM_SYS.ADD_QUEUE_TAB_TO_LDAP +DBMS_AQADM_SYS.ADD_QUEUE_TO_LDAP +DBMS_AQADM_SYS.ADD_SPILLED_IOT +DBMS_AQADM_SYS.ADD_SPILLED_TABLE +DBMS_AQADM_SYS.ADD_SUBSCRIBER +DBMS_AQADM_SYS.ADD_SUBSCRIBER_TO_LDAP +DBMS_AQADM_SYS.ALTER_AQ_AGENT +DBMS_AQADM_SYS.ALTER_QUEUE +DBMS_AQADM_SYS.ALTER_QUEUE_TABLE +DBMS_AQADM_SYS.ALTER_SUBSCRIBER +DBMS_AQADM_SYS.AQ$_PROPAGATION_PROCEDURE +DBMS_AQADM_SYS.AQ$_PROPAQ +DBMS_AQADM_SYS.BFQ +DBMS_AQADM_SYS.CHK_QT_FLG +DBMS_AQADM_SYS.CLR_QT_FLG +DBMS_AQADM_SYS.CNF +DBMS_AQADM_SYS.COMPATIBLE_100 +DBMS_AQADM_SYS.COMPUTE_NAME +DBMS_AQADM_SYS.CREATE_AQ_AGENT +DBMS_AQADM_SYS.CREATE_BASE_VIEW +DBMS_AQADM_SYS.CREATE_BASE_VIEW10_1_0 +DBMS_AQADM_SYS.CREATE_BUFFER_VIEW +DBMS_AQADM_SYS.CREATE_BUFFER_VIEW101 +DBMS_AQADM_SYS.CREATE_DEQ_VIEW +DBMS_AQADM_SYS.CREATE_DEQ_VIEW_PRE11_2 +DBMS_AQADM_SYS.CREATE_NP_QUEUE +DBMS_AQADM_SYS.CREATE_PLSQL_NOTIF_QUEUE +DBMS_AQADM_SYS.CREATE_PROP_VIEWS +DBMS_AQADM_SYS.CREATE_QT_DICTIONARY +DBMS_AQADM_SYS.CREATE_QUEUE +DBMS_AQADM_SYS.CREATE_QUEUE_TABLE_TZ +DBMS_AQADM_SYS.CREATE_SPILLED_TABLES_IOTS +DBMS_AQADM_SYS.CTQT +DBMS_AQADM_SYS.DBLINK_INFO +DBMS_AQADM_SYS.DELETE_FROM_DEQIOT +DBMS_AQADM_SYS.DELETE_MESSAGES_FOR_REMOVESUB +DBMS_AQADM_SYS.DEL_ALIAS_FROM_LDAP +DBMS_AQADM_SYS.DEL_CONNECTION_FROM_LDAP +DBMS_AQADM_SYS.DEL_QUEUE_FROM_LDAP +DBMS_AQADM_SYS.DEL_SUBSCRIBER_FROM_LDAP +DBMS_AQADM_SYS.DISABLE_DB_ACCESS +DBMS_AQADM_SYS.DISABLE_REGISTRATION +DBMS_AQADM_SYS.DROP_AQ_AGENT +DBMS_AQADM_SYS.DROP_BUFFER +DBMS_AQADM_SYS.DROP_BUFFER_VIEW +DBMS_AQADM_SYS.DROP_QTAB_EXPDEP +DBMS_AQADM_SYS.DROP_QUEUE +DBMS_AQADM_SYS.DROP_QUEUE_TABLE +DBMS_AQADM_SYS.DROP_QUEUE_TAB_FROM_LDAP +DBMS_AQADM_SYS.DROP_SPILLED_IOT +DBMS_AQADM_SYS.DROP_SPILLED_TABLE +DBMS_AQADM_SYS.DUMP_TRACE +DBMS_AQADM_SYS.ENABLE_DB_ACCESS +DBMS_AQADM_SYS.ENABLE_JMS_TYPES +DBMS_AQADM_SYS.ENABLE_REGISTRATION +DBMS_AQADM_SYS.FAILOVER_NOTIF_QUEUE +DBMS_AQADM_SYS.GET_ADT_QTABLE_PAYLOAD_NAME +DBMS_AQADM_SYS.GET_CORR_MSG +DBMS_AQADM_SYS.GET_PROCNAME +DBMS_AQADM_SYS.GET_PROP_SEQNO +DBMS_AQADM_SYS.GET_QUEUE_TABLE_NAME +DBMS_AQADM_SYS.GET_REMOTE_QTYPE_INFO_TTC +DBMS_AQADM_SYS.GET_SCHEMA_OID +DBMS_AQADM_SYS.GET_SEQ_NXTVAL +DBMS_AQADM_SYS.GET_TRANS_INFO +DBMS_AQADM_SYS.GET_TYPE_INFO +DBMS_AQADM_SYS.GRANT_QUEUE_PRIVILEGE +DBMS_AQADM_SYS.GRANT_SYSTEM_PRIVILEGE +DBMS_AQADM_SYS.GRANT_TYPE_ACCESS +DBMS_AQADM_SYS.IMPPEND_FLAG_CLEAR +DBMS_AQADM_SYS.IN_DATAPUMP_IMPORT +DBMS_AQADM_SYS.ISALIVE +DBMS_AQADM_SYS.I_BIND_AGENT +DBMS_AQADM_SYS.I_CREATE_QT +DBMS_AQADM_SYS.I_UNBIND_AGENT +DBMS_AQADM_SYS.KWQAQPDHASLOB +DBMS_AQADM_SYS.MATCH_TDS +DBMS_AQADM_SYS.MCQ +DBMS_AQADM_SYS.MCQ_8_0 +DBMS_AQADM_SYS.MCQ_8_1 +DBMS_AQADM_SYS.MIGRATE_QUEUE_TABLE +DBMS_AQADM_SYS.MOD_QUEUE_IN_LDAP +DBMS_AQADM_SYS.MOD_QUEUE_TAB_IN_LDAP +DBMS_AQADM_SYS.MOD_SUBSCRIBER_IN_LDAP +DBMS_AQADM_SYS.NEWQ_10_1 +DBMS_AQADM_SYS.NEWQ_8_1 +DBMS_AQADM_SYS.OBJECT_EXISTS +DBMS_AQADM_SYS.PARSE_NAME +DBMS_AQADM_SYS.PATCH_DEQUEUE_IOT +DBMS_AQADM_SYS.PATCH_HISTORY_IOT +DBMS_AQADM_SYS.PATCH_QUEUE_TABLE +DBMS_AQADM_SYS.PATCH_TIMEMGR_IOT +DBMS_AQADM_SYS.PRS_CMT +DBMS_AQADM_SYS.PRS_QTYP +DBMS_AQADM_SYS.PRS_RBK +DBMS_AQADM_SYS.PRS_SEQ +DBMS_AQADM_SYS.PURGE_QUEUE_TABLE +DBMS_AQADM_SYS.QT_BUFQ_COUNT +DBMS_AQADM_SYS.QUEUE_SUBSCRIBERS +DBMS_AQADM_SYS.REGISTER_DRIVER +DBMS_AQADM_SYS.REGISTRATION_REPLICATION +DBMS_AQADM_SYS.REMOVE_ALL_NONDURABLESUB +DBMS_AQADM_SYS.REMOVE_DB_LINK +DBMS_AQADM_SYS.REMOVE_NONDURABLESUB_CLIENT +DBMS_AQADM_SYS.REMOVE_NONDURABLE_DBSESSION +DBMS_AQADM_SYS.REMOVE_ORPHMSGS +DBMS_AQADM_SYS.REMOVE_SUBSCRIBER +DBMS_AQADM_SYS.RESET_CORR_MSG +DBMS_AQADM_SYS.REVOKE_QUEUE_PRIVILEGE +DBMS_AQADM_SYS.REVOKE_SYSTEM_PRIVILEGE +DBMS_AQADM_SYS.RULESET_EXISTS +DBMS_AQADM_SYS.SCHEDULE_PROPAGATION +DBMS_AQADM_SYS.SCQ_8_0 +DBMS_AQADM_SYS.SCQ_8_1 +DBMS_AQADM_SYS.SECURE_QT +DBMS_AQADM_SYS.START_QUEUE +DBMS_AQADM_SYS.STOP_QUEUE +DBMS_AQADM_SYS.TGQ +DBMS_AQADM_SYS.THROW_ERROR +DBMS_AQADM_SYS.TRANSFORMATION_EXISTS +DBMS_AQADM_SYS.UNSCHEDULE_PROPAGATION +DBMS_AQADM_SYS.VALIDATE_QTAB_QUEUES +DBMS_AQADM_SYS.VALIDATE_QUEUE +DBMS_AQADM_SYS.VERIFY_AQ_TIMEZONE +DBMS_AQADM_SYS.VERIFY_QUEUE_TYPES +DBMS_AQADM_SYS.WRAPPER_CREATE_DEQUEUE_LOG +DBMS_AQADM_SYS.WRITE_TRACE +DBMS_AQADM_SYSCALLS. +DBMS_AQADM_SYSCALLS.GET_OWNER_INSTANCE +DBMS_AQADM_SYSCALLS.GET_WATERMARK +DBMS_AQADM_SYSCALLS.KWQA_3GL_ADDSUBSCRIBER +DBMS_AQADM_SYSCALLS.KWQA_3GL_ALTERCACHEOBJECT +DBMS_AQADM_SYSCALLS.KWQA_3GL_ALTERQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_ALTERSUBSCRIBER +DBMS_AQADM_SYSCALLS.KWQA_3GL_BEGINTRANS +DBMS_AQADM_SYSCALLS.KWQA_3GL_CHECKQUEPRIV +DBMS_AQADM_SYSCALLS.KWQA_3GL_CHECKSYSPRIV +DBMS_AQADM_SYSCALLS.KWQA_3GL_CREATECACHEOBJECT +DBMS_AQADM_SYSCALLS.KWQA_3GL_CREATEQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_DESTROYCACHEOBJECT +DBMS_AQADM_SYSCALLS.KWQA_3GL_DMPESTACK +DBMS_AQADM_SYSCALLS.KWQA_3GL_DROPQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_DROPREGISTRATIONS +DBMS_AQADM_SYSCALLS.KWQA_3GL_ENDTRANS +DBMS_AQADM_SYSCALLS.KWQA_3GL_EVENTLEVEL +DBMS_AQADM_SYSCALLS.KWQA_3GL_EXECUTESTMT +DBMS_AQADM_SYSCALLS.KWQA_3GL_FIND_DATE +DBMS_AQADM_SYSCALLS.KWQA_3GL_GRANT +DBMS_AQADM_SYSCALLS.KWQA_3GL_INVALIDATEQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_ISSTREAMSCAPTUREOFF +DBMS_AQADM_SYSCALLS.KWQA_3GL_ISTTSIMPORT +DBMS_AQADM_SYSCALLS.KWQA_3GL_LOCKQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_LOCKQUEUETABLE +DBMS_AQADM_SYSCALLS.KWQA_3GL_MARK_INTERNAL_TABLES +DBMS_AQADM_SYSCALLS.KWQA_3GL_NFYNOI +DBMS_AQADM_SYSCALLS.KWQA_3GL_PARSEAQNAME +DBMS_AQADM_SYSCALLS.KWQA_3GL_PRINTREMSUBLIST +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGEREMSUBLIST +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGESCHEMASUBTAB +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGE_QUEUE_TABLE +DBMS_AQADM_SYSCALLS.KWQA_3GL_QT_COMPAT +DBMS_AQADM_SYSCALLS.KWQA_3GL_REMOVESUBSCRIBER +DBMS_AQADM_SYSCALLS.KWQA_3GL_REVOKE +DBMS_AQADM_SYSCALLS.KWQA_3GL_SCHEDULETMSERVICE +DBMS_AQADM_SYSCALLS.KWQA_3GL_SETMSGWAIT +DBMS_AQADM_SYSCALLS.KWQA_3GL_SETREGISTRATIONNAME +DBMS_AQADM_SYSCALLS.KWQA_3GL_SETSTREAMSCAPTUREOFF +DBMS_AQADM_SYSCALLS.KWQA_3GL_SET_TABLE_STATS_LOCK +DBMS_AQADM_SYSCALLS.KWQA_3GL_SET_VIEW_FLAG +DBMS_AQADM_SYSCALLS.KWQA_3GL_STARTQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_STOPQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_UPDKGQM +DBMS_AQADM_SYSCALLS.KWQA_3GL_VALIDATEQUEUE +DBMS_AQADM_SYSCALLS.SET_WATERMARK +DBMS_AQELM. +DBMS_AQELM.GET_MAILHOST +DBMS_AQELM.GET_MAILPORT +DBMS_AQELM.GET_PROXY +DBMS_AQELM.GET_SENDFROM +DBMS_AQELM.HTTP_SEND +DBMS_AQELM.SEND_EMAIL +DBMS_AQELM.SET_MAILHOST +DBMS_AQELM.SET_MAILPORT +DBMS_AQELM.SET_PROXY +DBMS_AQELM.SET_SENDFROM +DBMS_AQIN. +DBMS_AQIN.AQ$_ALTER_QUEUE +DBMS_AQIN.AQ$_CREATE_QUEUE +DBMS_AQIN.AQ$_CREATE_QUEUE_TABLE +DBMS_AQIN.AQ$_DEQUEUE_IN +DBMS_AQIN.AQ$_DEQUEUE_RAW +DBMS_AQIN.AQ$_DROP_QUEUE +DBMS_AQIN.AQ$_DROP_QUEUE_TABLE +DBMS_AQIN.AQ$_ENQUEUE_OBJ +DBMS_AQIN.AQ$_ENQUEUE_OBJ_NO_RECPL +DBMS_AQIN.AQ$_ENQUEUE_RAW +DBMS_AQIN.AQ$_ENQUEUE_RAW_NO_RECPL +DBMS_AQIN.AQ$_GETBLOB_FROM_JMSANYDATA +DBMS_AQIN.AQ$_GETCLOB_FROM_JMSANYDATA +DBMS_AQIN.AQ$_JMS_ENQUEUE_BYTES_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_MAP_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_OBJECT_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_STREAM_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_TEXT_MESSAGE +DBMS_AQIN.AQ$_LISTEN +DBMS_AQIN.AQ$_QUEUE_SUBSCRIBERS +DBMS_AQIN.AQ$_REGISTER_IN +DBMS_AQIN.AQ$_START_QUEUE +DBMS_AQIN.AQ$_STOP_QUEUE +DBMS_AQIN.GET_DEQ_SORT +DBMS_AQIN.GET_MULTI_RETRY +DBMS_AQIN.SET_DEQ_SORT +DBMS_AQIN.SET_MULTI_RETRY +DBMS_AQJMS. +DBMS_AQJMS.AQ$_ADD_NONDURABLE_SUBSCRIBER +DBMS_AQJMS.AQ$_ADD_SUBSCRIBER +DBMS_AQJMS.AQ$_ALTER_SUBSCRIBER +DBMS_AQJMS.AQ$_GET_PROP_STAT +DBMS_AQJMS.AQ$_GET_TRANS_TYPE +DBMS_AQJMS.AQ$_PR +DBMS_AQJMS.AQ$_PURGE_MESSAGE +DBMS_AQJMS.AQ$_REGISTER +DBMS_AQJMS.AQ$_REMOVE_SUBSCRIBER +DBMS_AQJMS.AQ$_REM_NONDURABLE_SUBSCRIBER +DBMS_AQJMS.AQ$_UNREGISTER +DBMS_AQJMS.AQ$_UPDATE_PROP_STAT +DBMS_AQJMS.CLEAR_DBSESSION_GUID +DBMS_AQJMS.CLEAR_GLOBAL_AQCLNTDB_CTX_CLNT +DBMS_AQJMS.CLEAR_GLOBAL_AQCLNTDB_CTX_DB +DBMS_AQJMS.GET_DB_USERNAME_FOR_AGENT +DBMS_AQJMS.GET_NUMVAL +DBMS_AQJMS.GET_PTYPE +DBMS_AQJMS.GET_STRVAL +DBMS_AQJMS.SET_DBSESSION_GUID +DBMS_AQJMS.SET_GLOBAL_AQCLNTDB_CTX +DBMS_AQJMS.SUBSCRIBER_EXISTS +DBMS_AQJMS_INTERNAL. +DBMS_AQJMS_INTERNAL.AQ$_GET_PROP_STAT +DBMS_AQJMS_INTERNAL.AQ$_GET_TRANS_TYPE +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_BYTES_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_MAP_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_OBJ_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_STR_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_TEXT_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_BYTES_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_MAP_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_OBJ_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_STR_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_TEXT_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_PURGE_MESSAGE +DBMS_AQJMS_INTERNAL.AQ$_UPDATE_PROP_STAT +DBMS_AQJMS_INTERNAL.GET_DB_USERNAME_FOR_AGENT +DBMS_AQ_BQVIEW. +DBMS_AQ_BQVIEW.GET_ADT_PAYLOAD +DBMS_AQ_BQVIEW.GET_OPAQUE_PAYLOAD +DBMS_AQ_BQVIEW.GET_RAW_PAYLOAD +DBMS_AQ_EXP_CMT_TIME_TABLES. +DBMS_AQ_EXP_CMT_TIME_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_DEQUEUELOG_TABLES. +DBMS_AQ_EXP_DEQUEUELOG_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_HISTORY_TABLES. +DBMS_AQ_EXP_HISTORY_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_INDEX_TABLES. +DBMS_AQ_EXP_INDEX_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_QUEUES. +DBMS_AQ_EXP_QUEUES.AUDIT_EXP +DBMS_AQ_EXP_QUEUES.AUDIT_SYSPRIVS_EXP +DBMS_AQ_EXP_QUEUES.CREATE_EXP +DBMS_AQ_EXP_QUEUES.DROP_EXP +DBMS_AQ_EXP_QUEUES.GRANT_EXP +DBMS_AQ_EXP_QUEUES.GRANT_SYSPRIVS_EXP +DBMS_AQ_EXP_QUEUE_TABLES. +DBMS_AQ_EXP_QUEUE_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_QUEUE_TABLES.SCHEMA_INFO_EXP +DBMS_AQ_EXP_SIGNATURE_TABLES. +DBMS_AQ_EXP_SIGNATURE_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_SUBSCRIBER_TABLES. +DBMS_AQ_EXP_SUBSCRIBER_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_TIMEMGR_TABLES. +DBMS_AQ_EXP_TIMEMGR_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_ZECURITY. +DBMS_AQ_EXP_ZECURITY.CHECK_EXPORT_PRIV +DBMS_AQ_IMPORT_INTERNAL. +DBMS_AQ_IMPORT_INTERNAL.AQ_DEFN_UPDATE +DBMS_AQ_IMPORT_INTERNAL.AQ_EXPORT_CHECK +DBMS_AQ_IMPORT_INTERNAL.AQ_EXPORT_IOT +DBMS_AQ_IMPORT_INTERNAL.AQ_EXPORT_SUBSCRIBER +DBMS_AQ_IMPORT_INTERNAL.AQ_IMPORT_IOT +DBMS_AQ_IMPORT_INTERNAL.AQ_IMPORT_SUBSCRIBER +DBMS_AQ_IMPORT_INTERNAL.AQ_TABLE_DEFN_UPDATE +DBMS_AQ_IMPORT_INTERNAL.AQ_TABLE_EXPORT_CHECK +DBMS_AQ_IMPORT_INTERNAL.CREATE_EXPACT_ENTRY +DBMS_AQ_IMPORT_INTERNAL.REMOVE_EXPACT_ENTRY +DBMS_AQ_IMP_INTERNAL. +DBMS_AQ_IMP_INTERNAL.BUMP_TID_SEQUENCE +DBMS_AQ_IMP_INTERNAL.CLEANUP_SCHEMA_IMPORT +DBMS_AQ_IMP_INTERNAL.IMPORT_CMT_TIME_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_DEQUEUELOG_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_HISTORY_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_INDEX_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_SIGNATURE_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_SUBSCRIBER_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_TIMEMGR_TABLE +DBMS_AQ_IMP_ZECURITY. +DBMS_AQ_IMP_ZECURITY.CHECK_IMPORT_PRIV +DBMS_AQ_INV. +DBMS_AQ_INV.CREATE_PROC_BUFFERED_MCQ +DBMS_AQ_INV.CREATE_PROC_BUFFERED_SCQ +DBMS_AQ_INV.INTERNAL_PURGE_QUEUE_TABLE +DBMS_AQ_INV.PURGE_BUFFERED_MCQ_TABLE +DBMS_AQ_INV.PURGE_BUFFERED_SCQ_TABLE +DBMS_AQ_INV.PURGE_ELIGIBLE_RCPT_MESSAGES +DBMS_AQ_INV.PURGE_ELIGIBLE_RCPT_MSGS_TXN +DBMS_AQ_INV.PURGE_ELIGIBLE_SUB_MESSAGES +DBMS_AQ_INV.PURGE_ELIGIBLE_SUB_MSGS_TXN +DBMS_AQ_INV.PURGE_PERSISTENT_MCQ_TABLE +DBMS_AQ_INV.PURGE_PERSISTENT_SCQ_TABLE +DBMS_AQ_INV.PURGE_PROCEDURE_NAME +DBMS_AQ_SYS_EXP_ACTIONS. +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_AGENTS +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_TABLE +DBMS_AQ_SYS_EXP_ACTIONS.POST_SCHEMA_CLEANUP +DBMS_AQ_SYS_EXP_INTERNAL. +DBMS_AQ_SYS_EXP_INTERNAL.COUNT_AQ_OBJECTS +DBMS_AQ_SYS_EXP_INTERNAL.DEREGISTER_PROCEDURAL_ACTION +DBMS_AQ_SYS_EXP_INTERNAL.DEREGISTER_PROCEDURAL_OBJECT +DBMS_AQ_SYS_EXP_INTERNAL.DOWNGRADE_EXPORT_ACTIONS +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_QUEUE +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_QUEUE_PRIVILEGE +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_QUEUE_TABLE +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_SYSTEM_PRIVILEGE +DBMS_AQ_SYS_EXP_INTERNAL.REGISTER_PROCEDURAL_ACTION +DBMS_AQ_SYS_EXP_INTERNAL.REGISTER_PROCEDURAL_OBJECT +DBMS_AQ_SYS_EXP_INTERNAL.TO_OWNERID +DBMS_AQ_SYS_EXP_INTERNAL.UPGRADE_EXPORT_ACTIONS +DBMS_AQ_SYS_IMP_INTERNAL. +DBMS_AQ_SYS_IMP_INTERNAL.BUMP_TID_SEQUENCE +DBMS_AQ_SYS_IMP_INTERNAL.CLEANUP_SCHEMA_IMPORT +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_CMT_TIME_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_DEQUEUELOG_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_HISTORY_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_INDEX_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_SIGNATURE_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_SUBSCRIBER_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_TIMEMGR_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.POST_TTS_REBUILD_IDX +DBMS_AQ_SYS_IMP_INTERNAL.POST_TTS_WORK +DBMS_ARCH_PROVIDER_INTL. +DBMS_ARCH_PROVIDER_INTL.APPENDCACHEJOURNAL +DBMS_ARCH_PROVIDER_INTL.APTRACE +DBMS_ARCH_PROVIDER_INTL.CREATEACCESSTBL +DBMS_ARCH_PROVIDER_INTL.CREATECACHESIZETBL +DBMS_ARCH_PROVIDER_INTL.CREATECJRNLTBL +DBMS_ARCH_PROVIDER_INTL.CREATEDELBFTBL +DBMS_ARCH_PROVIDER_INTL.CREATELRUENTRY +DBMS_ARCH_PROVIDER_INTL.CREATESTORETBLS +DBMS_ARCH_PROVIDER_INTL.CREATETARBALLTBL +DBMS_ARCH_PROVIDER_INTL.CREATETRACETBL +DBMS_ARCH_PROVIDER_INTL.DELETELRUENTRY +DBMS_ARCH_PROVIDER_INTL.DROPPROVIDERTABLES +DBMS_ARCH_PROVIDER_INTL.DROPSTORETBL +DBMS_ARCH_PROVIDER_INTL.DROPSTORETBLS +DBMS_ARCH_PROVIDER_INTL.GETLOBCACHEUSAGE +DBMS_ARCH_PROVIDER_INTL.GETSTOREGUID +DBMS_ARCH_PROVIDER_INTL.GETSTOREPROPERTY +DBMS_ARCH_PROVIDER_INTL.GETSTORETBLNAME +DBMS_ARCH_PROVIDER_INTL.GRANTSELECT +DBMS_ARCH_PROVIDER_INTL.REGISTERSTORE +DBMS_ARCH_PROVIDER_INTL.RENAMELRUENTRY +DBMS_ARCH_PROVIDER_INTL.RENAMELRUSUBENTRIES +DBMS_ARCH_PROVIDER_INTL.SETSTOREPROPERTY +DBMS_ARCH_PROVIDER_INTL.UNREGISTERSTORE +DBMS_ARCH_PROVIDER_INTL.UPDATEACCESSFORLRU +DBMS_ASH_INTERNAL. +DBMS_ASH_INTERNAL.ASH_PHASE_EXECUTION +DBMS_ASH_INTERNAL.ASH_ROLLUP_SQL_1D +DBMS_ASH_INTERNAL.ASH_ROLLUP_SQL_2D +DBMS_ASH_INTERNAL.ASH_ROLLUP_SQL_3D +DBMS_ASH_INTERNAL.ASH_ROLLUP_XML_1D +DBMS_ASH_INTERNAL.ASH_ROLLUP_XML_2D +DBMS_ASH_INTERNAL.ASH_VIEW_SQL +DBMS_ASH_INTERNAL.BUILD_ACTION_TAG +DBMS_ASH_INTERNAL.BUILD_DATABASE_HEADER_TAG +DBMS_ASH_INTERNAL.BUILD_EVENT_TAG +DBMS_ASH_INTERNAL.BUILD_SERVICE_MODULE_TAG +DBMS_ASH_INTERNAL.BUILD_SESSION_TAG +DBMS_ASH_INTERNAL.BUILD_SQL_TAG +DBMS_ASH_INTERNAL.FORMAT_PLSQL +DBMS_ASH_INTERNAL.GET_ASH_HEADING +DBMS_ASH_INTERNAL.GET_BLKSID_ACTIVE +DBMS_ASH_INTERNAL.GET_BLKSID_DETAILS +DBMS_ASH_INTERNAL.GET_BLKSID_PROGRAM +DBMS_ASH_INTERNAL.GET_BLKSID_USER +DBMS_ASH_INTERNAL.GET_BLKSID_XIDS +DBMS_ASH_INTERNAL.GET_BLK_STR +DBMS_ASH_INTERNAL.GET_LATCH_NAME +DBMS_ASH_INTERNAL.GET_OBJ_NAME +DBMS_ASH_INTERNAL.GET_PLSQL_NAME +DBMS_ASH_INTERNAL.GET_SID_ACTIVE +DBMS_ASH_INTERNAL.GET_SID_STR +DBMS_ASH_INTERNAL.GET_SLOT_WIDTH +DBMS_ASH_INTERNAL.GET_SQLTEXT +DBMS_ASH_INTERNAL.GET_SQL_PLAN_INFO +DBMS_ASH_INTERNAL.GET_SQL_PLAN_PERC +DBMS_ASH_INTERNAL.GET_USER_NAME +DBMS_ASH_INTERNAL.INITIALIZE +DBMS_ASH_INTERNAL.IN_MEMORY_ASH_VIEW_SQL +DBMS_ASH_INTERNAL.ON_DISK_ASH_VIEW_SQL +DBMS_ASH_INTERNAL.SAMPLE_TIME_TO_ID +DBMS_ASH_INTERNAL.SHRINK_STRING +DBMS_ASH_INTERNAL.SLOT_ID_TO_TIME +DBMS_ASH_INTERNAL.UNIFIED_DBA_FILES +DBMS_ASH_INTERNAL.UNIFIED_DBA_OBJECTS +DBMS_ASH_INTERNAL.UNIFIED_PLSQL_SUBPROGRAMS +DBMS_ASH_INTERNAL.UNIFIED_SERVICE_NAMES +DBMS_ASH_INTERNAL.UNIFIED_SQLSTAT +DBMS_ASSERT. +DBMS_ASSERT.ENQUOTE_LITERAL +DBMS_ASSERT.ENQUOTE_NAME +DBMS_ASSERT.NOOP +DBMS_ASSERT.QUALIFIED_SQL_NAME +DBMS_ASSERT.SCHEMA_NAME +DBMS_ASSERT.SIMPLE_SQL_NAME +DBMS_ASSERT.SQL_OBJECT_NAME +DBMS_ASYNCRPC_PUSH. +DBMS_ASYNCRPC_PUSH.CHECK_DATABASE_CAPABILITY +DBMS_ASYNCRPC_PUSH.ERROR_CALL_POSITION +DBMS_ASYNCRPC_PUSH.GET_CLOCK_TIME +DBMS_ASYNCRPC_PUSH.GET_SCN +DBMS_ASYNCRPC_PUSH.PROPAGATE_PARALLEL +DBMS_ASYNCRPC_PUSH.PROPAGATE_SERIAL +DBMS_ASYNCRPC_PUSH.PURGE_PARALLEL +DBMS_ASYNCRPC_PUSH.PUSH_PENDING_CALLS +DBMS_ASYNCRPC_PUSH.STAMP_QUEUE_BATCH +DBMS_ASYNCRPC_PUSH.UPDATE_PURGE_STATISTICS +DBMS_AUDIT_MGMT. +DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL +DBMS_AUDIT_MGMT.CLEAR_AUDIT_TRAIL_PROPERTY +DBMS_AUDIT_MGMT.CLEAR_LAST_ARCHIVE_TIMESTAMP +DBMS_AUDIT_MGMT.CREATE_PURGE_JOB +DBMS_AUDIT_MGMT.DEINIT_CLEANUP +DBMS_AUDIT_MGMT.DROP_PURGE_JOB +DBMS_AUDIT_MGMT.GET_AUDIT_COMMIT_DELAY +DBMS_AUDIT_MGMT.INIT_CLEANUP +DBMS_AUDIT_MGMT.IS_CLEANUP_INITIALIZED +DBMS_AUDIT_MGMT.MOVE_DBAUDIT_TABLES +DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION +DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY +DBMS_AUDIT_MGMT.SET_DEBUG_LEVEL +DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP +DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL +DBMS_AUDIT_MGMT.SET_PURGE_JOB_STATUS +DBMS_AUTOTASK_PRVT. +DBMS_AUTOTASK_PRVT.ABA +DBMS_AUTOTASK_PRVT.AGE +DBMS_AUTOTASK_PRVT.GET_TASKS +DBMS_AUTOTASK_PRVT.SETUP +DBMS_AUTO_SQLTUNE. +DBMS_AUTO_SQLTUNE.EXECUTE_AUTO_TUNING_TASK +DBMS_AUTO_SQLTUNE.REPORT_AUTO_TUNING_TASK +DBMS_AUTO_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER +DBMS_AUTO_TASK. +DBMS_AUTO_TASK.CHECK_CLIENT_STATUS_OVERRIDE +DBMS_AUTO_TASK.DECODE_ATTRIBUTES +DBMS_AUTO_TASK.GET_CLIENT_STATUS_OVERRIDE +DBMS_AUTO_TASK.GET_SCHEDULE_DATE +DBMS_AUTO_TASK.RECONCILE_ATTRIBUTES +DBMS_AUTO_TASK.WINDOW_CALENDAR +DBMS_AUTO_TASK_ADMIN. +DBMS_AUTO_TASK_ADMIN.DISABLE +DBMS_AUTO_TASK_ADMIN.ENABLE +DBMS_AUTO_TASK_ADMIN.GET_CLIENT_ATTRIBUTES +DBMS_AUTO_TASK_ADMIN.GET_P1_RESOURCES +DBMS_AUTO_TASK_ADMIN.OVERRIDE_PRIORITY +DBMS_AUTO_TASK_ADMIN.SET_ATTRIBUTE +DBMS_AUTO_TASK_ADMIN.SET_CLIENT_SERVICE +DBMS_AUTO_TASK_ADMIN.SET_P1_RESOURCES +DBMS_AUTO_TASK_EXPORT. +DBMS_AUTO_TASK_EXPORT.DOWNGRADE_FROM_11G +DBMS_AUTO_TASK_EXPORT.POST_UPGRADE_FROM_10G +DBMS_AUTO_TASK_EXPORT.SYSTEM_INFO_EXP +DBMS_AUTO_TASK_IMMEDIATE. +DBMS_AUTO_TASK_IMMEDIATE.GATHER_OPTIMIZER_STATS +DBMS_AW. +DBMS_AW.ADD_DIMENSION_SOURCE +DBMS_AW.ADVISE_CUBE +DBMS_AW.ADVISE_DIMENSIONALITY +DBMS_AW.ADVISE_PARTITIONING_DIMENSION +DBMS_AW.ADVISE_PARTITIONING_LEVEL +DBMS_AW.ADVISE_REL +DBMS_AW.ADVISE_SPARSITY +DBMS_AW.AW_ATTACH +DBMS_AW.AW_COPY +DBMS_AW.AW_CREATE +DBMS_AW.AW_DELETE +DBMS_AW.AW_DETACH +DBMS_AW.AW_RENAME +DBMS_AW.AW_TABLESPACE +DBMS_AW.AW_UPDATE +DBMS_AW.CLEAN_ACCESS_TRACKING +DBMS_AW.CONVERT +DBMS_AW.DISABLE_ACCESS_TRACKING +DBMS_AW.EIF_BLOB_IN +DBMS_AW.EIF_BLOB_OUT +DBMS_AW.EIF_DELETE +DBMS_AW.EIF_IN +DBMS_AW.EIF_OUT +DBMS_AW.ENABLE_ACCESS_TRACKING +DBMS_AW.EVAL_NUMBER +DBMS_AW.EVAL_TEXT +DBMS_AW.EXECUTE +DBMS_AW.GATHER_STATS +DBMS_AW.GETLOG +DBMS_AW.GET_OBJ_PROTECT +DBMS_AW.INFILE +DBMS_AW.INITDRIVER +DBMS_AW.INTERP +DBMS_AW.INTERPCLOB +DBMS_AW.INTERP_SILENT +DBMS_AW.MOVE_AWMETA +DBMS_AW.OLAP_ACTIVE +DBMS_AW.OLAP_ON +DBMS_AW.OLAP_RUNNING +DBMS_AW.OLAP_TYPE +DBMS_AW.PRINTLOG +DBMS_AW.PROP_CLOB +DBMS_AW.PROP_LEN +DBMS_AW.PROP_VAL +DBMS_AW.RUN +DBMS_AW.SHUTDOWN +DBMS_AW.SPARSITY_ADVICE_TABLE +DBMS_AW.STARTUP +DBMS_AW.TOGGLEDBCREATE +DBMS_AWM. +DBMS_AWM.ADD_AWCOMP_SPEC_COMP_MEMBER +DBMS_AWM.ADD_AWCOMP_SPEC_MEMBER +DBMS_AWM.ADD_AWCUBEAGG_SPEC_LEVEL +DBMS_AWM.ADD_AWCUBEAGG_SPEC_MEASURE +DBMS_AWM.ADD_AWCUBELOAD_SPEC_COMP +DBMS_AWM.ADD_AWCUBELOAD_SPEC_FILTER +DBMS_AWM.ADD_AWCUBELOAD_SPEC_MEASURE +DBMS_AWM.ADD_AWDIMLOAD_SPEC_FILTER +DBMS_AWM.ADD_MVCUBEAGG_SPEC_LEVEL +DBMS_AWM.ADD_MVCUBEAGG_SPEC_MEASURE +DBMS_AWM.ADD_MVCUBELOAD_SPEC_AGG +DBMS_AWM.AGGREGATE_AWCUBE +DBMS_AWM.CREATE_AWCOMP_SPEC +DBMS_AWM.CREATE_AWCUBE +DBMS_AWM.CREATE_AWCUBEAGG_SPEC +DBMS_AWM.CREATE_AWCUBELOAD_SPEC +DBMS_AWM.CREATE_AWCUBE_ACCESS +DBMS_AWM.CREATE_AWCUBE_ACCESS_FULL +DBMS_AWM.CREATE_AWDIMENSION +DBMS_AWM.CREATE_AWDIMENSION_ACCESS +DBMS_AWM.CREATE_AWDIMENSION_ACCESS_FULL +DBMS_AWM.CREATE_AWDIMLOAD_SPEC +DBMS_AWM.CREATE_DYNAMIC_AW_ACCESS +DBMS_AWM.CREATE_MVCUBEAGG_SPEC +DBMS_AWM.CREATE_SCHEDULE_JOB +DBMS_AWM.DELETE_ALL_AW_ACCESS +DBMS_AWM.DELETE_AWCOMP_SPEC +DBMS_AWM.DELETE_AWCOMP_SPEC_MEMBER +DBMS_AWM.DELETE_AWCUBEAGG_SPEC +DBMS_AWM.DELETE_AWCUBEAGG_SPEC_LEVEL +DBMS_AWM.DELETE_AWCUBEAGG_SPEC_MEASURE +DBMS_AWM.DELETE_AWCUBELOAD_SPEC +DBMS_AWM.DELETE_AWCUBELOAD_SPEC_COMP +DBMS_AWM.DELETE_AWCUBELOAD_SPEC_FILTER +DBMS_AWM.DELETE_AWCUBELOAD_SPEC_MEASURE +DBMS_AWM.DELETE_AWCUBE_ACCESS +DBMS_AWM.DELETE_AWCUBE_ACCESS_ALL +DBMS_AWM.DELETE_AWDIMENSION_ACCESS +DBMS_AWM.DELETE_AWDIMENSION_ACCESS_ALL +DBMS_AWM.DELETE_AWDIMLOAD_SPEC +DBMS_AWM.DELETE_AWDIMLOAD_SPEC_FILTER +DBMS_AWM.DELETE_MVCUBEAGG_SPEC +DBMS_AWM.DELETE_MVCUBEAGG_SPEC_LEVEL +DBMS_AWM.DELETE_MVCUBEAGG_SPEC_MEASURE +DBMS_AWM.DELETE_MVCUBELOAD_SPEC_AGG +DBMS_AWM.REFRESH_AWCUBE +DBMS_AWM.REFRESH_AWCUBE_VIEW_NAME +DBMS_AWM.REFRESH_AWDIMENSION +DBMS_AWM.REFRESH_AWDIMENSION_VIEW_NAME +DBMS_AWM.SET_AWCOMP_SPEC_CUBE +DBMS_AWM.SET_AWCOMP_SPEC_MEMBER_NAME +DBMS_AWM.SET_AWCOMP_SPEC_MEMBER_POS +DBMS_AWM.SET_AWCOMP_SPEC_MEMBER_SEG +DBMS_AWM.SET_AWCOMP_SPEC_NAME +DBMS_AWM.SET_AWCUBEAGG_SPEC_AGGOP +DBMS_AWM.SET_AWCUBELOAD_SPEC_CUBE +DBMS_AWM.SET_AWCUBELOAD_SPEC_LOADTYPE +DBMS_AWM.SET_AWCUBELOAD_SPEC_NAME +DBMS_AWM.SET_AWCUBELOAD_SPEC_PARAMETER +DBMS_AWM.SET_AWCUBE_VIEW_NAME +DBMS_AWM.SET_AWDIMENSION_VIEW_NAME +DBMS_AWM.SET_AWDIMLOAD_SPEC_DIMENSION +DBMS_AWM.SET_AWDIMLOAD_SPEC_LOADTYPE +DBMS_AWM.SET_AWDIMLOAD_SPEC_NAME +DBMS_AWM.SET_AWDIMLOAD_SPEC_PARAMETER +DBMS_AWM.SET_MVCUBEAGG_SPEC_CUBE +DBMS_AWM.SET_MVCUBEAGG_SPEC_NAME +DBMS_AWM.UPGRADE_AW_TO_10_2 +DBMS_AWM_PRV. +DBMS_AWM_PRV.MAINTAIN_AWCOMP +DBMS_AWM_PRV.MAINTAIN_AWCOMPMEMBER +DBMS_AWM_PRV.MAINTAIN_AWCUBEAGG +DBMS_AWM_PRV.MAINTAIN_AWCUBEAGGLEVEL +DBMS_AWM_PRV.MAINTAIN_AWCUBEAGGMEASURE +DBMS_AWM_PRV.MAINTAIN_AWCUBELOAD +DBMS_AWM_PRV.MAINTAIN_AWCUBELOADAGGPLAN +DBMS_AWM_PRV.MAINTAIN_AWCUBELOADCOMPPLAN +DBMS_AWM_PRV.MAINTAIN_AWCUBELOADFILTER +DBMS_AWM_PRV.MAINTAIN_AWCUBELOADMEASURE +DBMS_AWM_PRV.MAINTAIN_AWCUBELOADPARMVALUE +DBMS_AWM_PRV.MAINTAIN_AWDIMLOAD +DBMS_AWM_PRV.MAINTAIN_AWDIMLOADFILTER +DBMS_AWM_PRV.MAINTAIN_AWDIMLOADPARMVALUE +DBMS_AWR_REPORT_LAYOUT. +DBMS_AWR_REPORT_LAYOUT.ASH_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.ASH_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.AWRG_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.AWRG_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.AWR_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.AWR_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DBFUS_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DBFUS_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DIFFG_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DIFFG_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DIFF_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DIFF_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.SQL_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.SQL_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.WCR_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.WCR_BUILD_REPORT_SECTIONS +DBMS_AW_EXP. +DBMS_AW_EXP.ALTER_LOB_SIZE +DBMS_AW_EXP.IMPORT_BEGIN100 +DBMS_AW_EXP.IMPORT_BEGIN112 +DBMS_AW_EXP.IMPORT_BEGIN92 +DBMS_AW_EXP.IMPORT_CALLOUT112 +DBMS_AW_EXP.IMPORT_CHUNK100 +DBMS_AW_EXP.IMPORT_CHUNK112 +DBMS_AW_EXP.IMPORT_CHUNK92 +DBMS_AW_EXP.IMPORT_FINISH100 +DBMS_AW_EXP.IMPORT_FINISH112 +DBMS_AW_EXP.IMPORT_FINISH92 +DBMS_AW_EXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_AW_EXP.LOB_WRITE +DBMS_AW_EXP.LOB_WRITEAPPEND +DBMS_AW_EXP.SCHEMA_CALLOUT +DBMS_AW_EXP.SCHEMA_INFO_EXP +DBMS_AW_EXP.TRANS_BEGIN102 +DBMS_AW_EXP.TRANS_CHUNK102 +DBMS_AW_EXP.TRANS_FINISH102 +DBMS_AW_EXP.TRANS_FINISH112 +DBMS_AW_STATS. +DBMS_AW_STATS.ANALYZE +DBMS_AW_STATS.CLEAR +DBMS_AW_XML. +DBMS_AW_XML.EXECUTE +DBMS_AW_XML.EXECUTEFILE +DBMS_AW_XML.READAWMETADATA +DBMS_AW_XML.READAWMETADATA1 +DBMS_BACKUP_RESTORE. +DBMS_BACKUP_RESTORE.APPLYBACKUPPIECE +DBMS_BACKUP_RESTORE.APPLYDATAFILETO +DBMS_BACKUP_RESTORE.APPLYOFFLINERANGE +DBMS_BACKUP_RESTORE.APPLYSETDATAFILE +DBMS_BACKUP_RESTORE.AUTOBACKUPFLAG +DBMS_BACKUP_RESTORE.BACKUPARCHIVEDLOG +DBMS_BACKUP_RESTORE.BACKUPBACKUPPIECE +DBMS_BACKUP_RESTORE.BACKUPCANCEL +DBMS_BACKUP_RESTORE.BACKUPCONTROLFILE +DBMS_BACKUP_RESTORE.BACKUPDATAFILE +DBMS_BACKUP_RESTORE.BACKUPDATAFILECOPY +DBMS_BACKUP_RESTORE.BACKUPPIECECREATE +DBMS_BACKUP_RESTORE.BACKUPPIECECRTDUPGET +DBMS_BACKUP_RESTORE.BACKUPPIECECRTDUPSET +DBMS_BACKUP_RESTORE.BACKUPPIECERESTORE +DBMS_BACKUP_RESTORE.BACKUPSETARCHIVEDLOG +DBMS_BACKUP_RESTORE.BACKUPSETDATAFILE +DBMS_BACKUP_RESTORE.BACKUPSPFILE +DBMS_BACKUP_RESTORE.BACKUPSTATUS +DBMS_BACKUP_RESTORE.BACKUPVALIDATE +DBMS_BACKUP_RESTORE.BCTSET +DBMS_BACKUP_RESTORE.BCTSWITCH +DBMS_BACKUP_RESTORE.BMRADDBLOCK +DBMS_BACKUP_RESTORE.BMRCANCEL +DBMS_BACKUP_RESTORE.BMRDOMEDIARECOVERY +DBMS_BACKUP_RESTORE.BMRGETFILE +DBMS_BACKUP_RESTORE.BMRINITIALSCAN +DBMS_BACKUP_RESTORE.BMRRESTOREFROMFLASHBACK +DBMS_BACKUP_RESTORE.BMRRESTOREFROMSTANDBY +DBMS_BACKUP_RESTORE.BMRSCANDATAFILECOPY +DBMS_BACKUP_RESTORE.BMRSTART +DBMS_BACKUP_RESTORE.CANKEEPDATAFILES +DBMS_BACKUP_RESTORE.CFILECALCSIZEARRAY +DBMS_BACKUP_RESTORE.CFILECALCSIZELIST +DBMS_BACKUP_RESTORE.CFILEMAKEANDUSESNAPSHOT +DBMS_BACKUP_RESTORE.CFILERESIZESECTION +DBMS_BACKUP_RESTORE.CFILESETSNAPSHOTNAME +DBMS_BACKUP_RESTORE.CFILEUSECOPY +DBMS_BACKUP_RESTORE.CFILEUSECURRENT +DBMS_BACKUP_RESTORE.CFILEUSESNAPSHOT +DBMS_BACKUP_RESTORE.CHANGEARCHIVEDLOG +DBMS_BACKUP_RESTORE.CHANGEBACKUPPIECE +DBMS_BACKUP_RESTORE.CHANGEBACKUPSET +DBMS_BACKUP_RESTORE.CHANGEDATAFILECOPY +DBMS_BACKUP_RESTORE.CHECKCOMPRESSIONALG +DBMS_BACKUP_RESTORE.CHECKFILENAME +DBMS_BACKUP_RESTORE.CLEANUPBACKUPRECORDS +DBMS_BACKUP_RESTORE.CLEANUPFOREIGNARCHIVEDLOGS +DBMS_BACKUP_RESTORE.CLEARCONTROLFILE +DBMS_BACKUP_RESTORE.CLEARONLINELOGNAMES +DBMS_BACKUP_RESTORE.CLEARRECOVERYDESTFLAG +DBMS_BACKUP_RESTORE.COMMITRMANSTATUSROW +DBMS_BACKUP_RESTORE.CONVERTDATAFILECOPY +DBMS_BACKUP_RESTORE.CONVERTFILENAME +DBMS_BACKUP_RESTORE.COPYARCHIVEDLOG +DBMS_BACKUP_RESTORE.COPYCONTROLFILE +DBMS_BACKUP_RESTORE.COPYDATAFILE +DBMS_BACKUP_RESTORE.COPYDATAFILECOPY +DBMS_BACKUP_RESTORE.CREATEDATAFILE +DBMS_BACKUP_RESTORE.CREATERMANOUTPUTROW +DBMS_BACKUP_RESTORE.CREATERMANSTATUSROW +DBMS_BACKUP_RESTORE.CROSSCHECKBACKUPPIECE +DBMS_BACKUP_RESTORE.DBA2RFNO +DBMS_BACKUP_RESTORE.DELETEARCHIVEDLOG +DBMS_BACKUP_RESTORE.DELETEBACKUPPIECE +DBMS_BACKUP_RESTORE.DELETECONFIG +DBMS_BACKUP_RESTORE.DELETEDATAFILECOPY +DBMS_BACKUP_RESTORE.DELETED_GETDBINFO +DBMS_BACKUP_RESTORE.DELETEFILE +DBMS_BACKUP_RESTORE.DEVICEALLOCATE +DBMS_BACKUP_RESTORE.DEVICECOMMAND +DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE +DBMS_BACKUP_RESTORE.DEVICEQUERY +DBMS_BACKUP_RESTORE.DEVICESTATUS +DBMS_BACKUP_RESTORE.DOAUTOBACKUP +DBMS_BACKUP_RESTORE.DUPLICATEFILEEXISTS +DBMS_BACKUP_RESTORE.FAULT_INJECTOR +DBMS_BACKUP_RESTORE.FETCHFILERESTORED +DBMS_BACKUP_RESTORE.FINDAUTSEARCHFILETABLE +DBMS_BACKUP_RESTORE.FLASHBACKADDFILE +DBMS_BACKUP_RESTORE.FLASHBACKCANCEL +DBMS_BACKUP_RESTORE.FLASHBACKCONTROLFILE +DBMS_BACKUP_RESTORE.FLASHBACKFILES +DBMS_BACKUP_RESTORE.FLASHBACKSTART +DBMS_BACKUP_RESTORE.GENPIECENAME +DBMS_BACKUP_RESTORE.GENTRANSPORTSCRIPT +DBMS_BACKUP_RESTORE.GETARCFILENAME +DBMS_BACKUP_RESTORE.GETBLOCKSTAT +DBMS_BACKUP_RESTORE.GETCKPT +DBMS_BACKUP_RESTORE.GETCKPTSCN +DBMS_BACKUP_RESTORE.GETCNCTSTR +DBMS_BACKUP_RESTORE.GETDEFAULTTAG +DBMS_BACKUP_RESTORE.GETDISKGROUPNAME +DBMS_BACKUP_RESTORE.GETDUPLICATEDDATAFILECOPY +DBMS_BACKUP_RESTORE.GETFNO +DBMS_BACKUP_RESTORE.GETLIMIT +DBMS_BACKUP_RESTORE.GETMAXINFO +DBMS_BACKUP_RESTORE.GETOMFFILENAME +DBMS_BACKUP_RESTORE.GETPARM +DBMS_BACKUP_RESTORE.GETTSNAMEFROMDATAFILECOPY +DBMS_BACKUP_RESTORE.GET_CONNECT_IDENTIFIER +DBMS_BACKUP_RESTORE.INCRARCHIVEDLOGBACKUPCOUNT +DBMS_BACKUP_RESTORE.INCREMENTRECORDSTAMP +DBMS_BACKUP_RESTORE.INITMSB +DBMS_BACKUP_RESTORE.INITMSR +DBMS_BACKUP_RESTORE.INITNAMESPACE +DBMS_BACKUP_RESTORE.INSPECTARCHIVEDLOG +DBMS_BACKUP_RESTORE.INSPECTARCHIVEDLOGSEQ +DBMS_BACKUP_RESTORE.INSPECTBACKUPPIECE +DBMS_BACKUP_RESTORE.INSPECTCONTROLFILE +DBMS_BACKUP_RESTORE.INSPECTDATAFILECOPY +DBMS_BACKUP_RESTORE.IR_ICD_FINISH +DBMS_BACKUP_RESTORE.IR_ICD_START +DBMS_BACKUP_RESTORE.ISFILENAMEOMF +DBMS_BACKUP_RESTORE.MANAGEAUXINSTANCE +DBMS_BACKUP_RESTORE.NETWORKFILETRANSFER +DBMS_BACKUP_RESTORE.NIDBEGIN +DBMS_BACKUP_RESTORE.NIDEND +DBMS_BACKUP_RESTORE.NIDGETNEWDBID +DBMS_BACKUP_RESTORE.NIDPROCESSCF +DBMS_BACKUP_RESTORE.NIDPROCESSDF +DBMS_BACKUP_RESTORE.NORMALIZEFILENAME +DBMS_BACKUP_RESTORE.ORACLESBTVERSION +DBMS_BACKUP_RESTORE.PIECECONTEXTGETNUMBER +DBMS_BACKUP_RESTORE.PROCESSSEARCHFILETABLE +DBMS_BACKUP_RESTORE.PROXYBACKUPARCHIVEDLOG +DBMS_BACKUP_RESTORE.PROXYBACKUPCONTROLFILE +DBMS_BACKUP_RESTORE.PROXYBACKUPDATAFILE +DBMS_BACKUP_RESTORE.PROXYBACKUPDATAFILECOPY +DBMS_BACKUP_RESTORE.PROXYBEGINBACKUP +DBMS_BACKUP_RESTORE.PROXYBEGINRESTORE +DBMS_BACKUP_RESTORE.PROXYCANCEL +DBMS_BACKUP_RESTORE.PROXYCHANGE +DBMS_BACKUP_RESTORE.PROXYDELETE +DBMS_BACKUP_RESTORE.PROXYGO +DBMS_BACKUP_RESTORE.PROXYQUERYBACKUP +DBMS_BACKUP_RESTORE.PROXYQUERYRESTORE +DBMS_BACKUP_RESTORE.PROXYRESTOREARCHIVEDLOG +DBMS_BACKUP_RESTORE.PROXYRESTORECONTROLFILE +DBMS_BACKUP_RESTORE.PROXYRESTOREDATAFILE +DBMS_BACKUP_RESTORE.PROXYVALIDATE +DBMS_BACKUP_RESTORE.PROXYVALONLY +DBMS_BACKUP_RESTORE.READARCHIVEDLOGHEADER +DBMS_BACKUP_RESTORE.READFILEHEADER +DBMS_BACKUP_RESTORE.REFRESHAGEDFILES +DBMS_BACKUP_RESTORE.REINIT +DBMS_BACKUP_RESTORE.REMOTESQLEXECUTE +DBMS_BACKUP_RESTORE.REMOVEDUPLICATEFILE +DBMS_BACKUP_RESTORE.RENORMALIZEALLFILENAMES +DBMS_BACKUP_RESTORE.RESDATAFILECOPY +DBMS_BACKUP_RESTORE.RESETCFILESECTION +DBMS_BACKUP_RESTORE.RESETCONFIG +DBMS_BACKUP_RESTORE.RESETDATABASE +DBMS_BACKUP_RESTORE.RESTOREARCHIVEDLOG +DBMS_BACKUP_RESTORE.RESTOREARCHIVEDLOGRANGE +DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE +DBMS_BACKUP_RESTORE.RESTORECANCEL +DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO +DBMS_BACKUP_RESTORE.RESTOREDATAFILETO +DBMS_BACKUP_RESTORE.RESTORESETARCHIVEDLOG +DBMS_BACKUP_RESTORE.RESTORESETDATAFILE +DBMS_BACKUP_RESTORE.RESTORESETPIECE +DBMS_BACKUP_RESTORE.RESTORESPFILETO +DBMS_BACKUP_RESTORE.RESTORESTATUS +DBMS_BACKUP_RESTORE.RESTOREVALIDATE +DBMS_BACKUP_RESTORE.SCANARCHIVEDLOG +DBMS_BACKUP_RESTORE.SCANDATAFILE +DBMS_BACKUP_RESTORE.SCANDATAFILECOPY +DBMS_BACKUP_RESTORE.SEARCHFILES +DBMS_BACKUP_RESTORE.SETCONFIG +DBMS_BACKUP_RESTORE.SETDATAFILEAUX +DBMS_BACKUP_RESTORE.SETDBUNIQNAMETSPITR +DBMS_BACKUP_RESTORE.SETLIMIT +DBMS_BACKUP_RESTORE.SETMSB +DBMS_BACKUP_RESTORE.SETPARMS +DBMS_BACKUP_RESTORE.SETRMANSTATUSROWID +DBMS_BACKUP_RESTORE.SETTABLESPACEATTR +DBMS_BACKUP_RESTORE.SETTABLESPACEEXCLUDE +DBMS_BACKUP_RESTORE.SET_CHARSET +DBMS_BACKUP_RESTORE.SET_CLIENT_INFO +DBMS_BACKUP_RESTORE.SLEEP +DBMS_BACKUP_RESTORE.SWITCHTEMPFILE +DBMS_BACKUP_RESTORE.SWITCHTOCOPY +DBMS_BACKUP_RESTORE.SWITCH_PRIMARY_BCT +DBMS_BACKUP_RESTORE.TRANSPORTDBLOCK +DBMS_BACKUP_RESTORE.TRANSPORTDBUNLOCK +DBMS_BACKUP_RESTORE.UPDATEHEADERS +DBMS_BACKUP_RESTORE.UPDATERMANSTATUSROW +DBMS_BACKUP_RESTORE.VALIDATEARCHIVEDLOG +DBMS_BACKUP_RESTORE.VALIDATEBACKUPPIECE +DBMS_BACKUP_RESTORE.VALIDATEBLOCK +DBMS_BACKUP_RESTORE.VALIDATEDATAFILECOPY +DBMS_BACKUP_RESTORE.VALIDATETABLESPACE +DBMS_BACKUP_RESTORE.VALIDATIONADDPIECE +DBMS_BACKUP_RESTORE.VALIDATIONEND +DBMS_BACKUP_RESTORE.VALIDATIONNEXTRESULT +DBMS_BACKUP_RESTORE.VALIDATIONSTART +DBMS_BACKUP_RESTORE.VALIDATIONVALIDATE +DBMS_BACKUP_RESTORE.VSSBACKEDRECORD +DBMS_BACKUP_RESTORE.WRITEDUPLICATEDDATAFILECOPY +DBMS_BACKUP_RESTORE.ZERODBID +DBMS_CACHEUTIL. +DBMS_CACHEUTIL.DISSOLVE_AFFINITY +DBMS_CACHEUTIL.DISSOLVE_READMOSTLY +DBMS_CACHEUTIL.GRAB_AFFINITY +DBMS_CACHEUTIL.GRAB_READMOSTLY +DBMS_CACHEUTIL.LIST_READMOSTLY +DBMS_CACHEUTIL.OBJECT_DOWNCONVERT +DBMS_CAPTURE_ADM. +DBMS_CAPTURE_ADM.ABORT_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM.ABORT_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM.ABORT_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM.ABORT_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM.ALTER_CAPTURE +DBMS_CAPTURE_ADM.ALTER_SYNC_CAPTURE +DBMS_CAPTURE_ADM.BUILD +DBMS_CAPTURE_ADM.CREATE_CAPTURE +DBMS_CAPTURE_ADM.CREATE_SYNC_CAPTURE +DBMS_CAPTURE_ADM.DROP_CAPTURE +DBMS_CAPTURE_ADM.INCLUDE_EXTRA_ATTRIBUTE +DBMS_CAPTURE_ADM.PREPARE_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM.PREPARE_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM.SET_PARAMETER +DBMS_CAPTURE_ADM.START_CAPTURE +DBMS_CAPTURE_ADM.STOP_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL. +DBMS_CAPTURE_ADM_INTERNAL.ABORT_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ADD_LOGFILE +DBMS_CAPTURE_ADM_INTERNAL.ALTER_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.BUILD +DBMS_CAPTURE_ADM_INTERNAL.CREATE_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.CREATE_SYNC_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.DROP_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.ENFORCE_CHECKPOINT_RETENTION +DBMS_CAPTURE_ADM_INTERNAL.GET_SOURCE_DATABASE +DBMS_CAPTURE_ADM_INTERNAL.INCLUDE_EXTRA_ATTRIBUTE +DBMS_CAPTURE_ADM_INTERNAL.IS_CAPTURE_EXISTS +DBMS_CAPTURE_ADM_INTERNAL.IS_DOWNSTREAM_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.IS_EXISTING_DOWNSTREAM_CAP +DBMS_CAPTURE_ADM_INTERNAL.IS_SYNC_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.IS_USE_DBLINK +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_DDL +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SCHEMA_TABLES +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_TABLE_INST +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.REPLACE_DICTIONARY +DBMS_CAPTURE_ADM_INTERNAL.SET_XOUT_PARAMS +DBMS_CAPTURE_ADM_INTERNAL.STORE_PREPARE_INFO +DBMS_CAPTURE_ADM_INTERNAL.SUSPEND_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.VALIDATE_PREPARE_TABLE +DBMS_CAPTURE_ADM_INTERNAL.WAIT_FOR_INFLIGHT_TXN +DBMS_CAPTURE_PROCESS. +DBMS_CAPTURE_PROCESS.CLONE_LOGMNR_SESSION +DBMS_CAPTURE_PROCESS.CLONE_LOGMNR_SESSION_CKPTFRE +DBMS_CAPTURE_PROCESS.GET_CAPTURE# +DBMS_CAPTURE_PROCESS.IS_DICTIONARY_MINED +DBMS_CAPTURE_PROCESS.WAIT_FOR_DICTIONARY_DUMP +DBMS_CAPTURE_SWITCH_ADM. +DBMS_CAPTURE_SWITCH_ADM.GET_SOURCE_DATABASE_SCNS +DBMS_CAPTURE_SWITCH_ADM.SWITCH_TO_APPLY_STATE_CKPT +DBMS_CAPTURE_SWITCH_ADM.SWITCH_TO_CHECKPOINTS +DBMS_CAPTURE_SWITCH_INTERNAL. +DBMS_CAPTURE_SWITCH_INTERNAL.CAN_SWITCH +DBMS_CAPTURE_SWITCH_INTERNAL.CAPTURE_WAIT_FOR_SCN +DBMS_CAPTURE_SWITCH_INTERNAL.DISPLAY_MESSAGE +DBMS_CAPTURE_SWITCH_INTERNAL.GET_APPLY_NAME_AND_DBLINK +DBMS_CAPTURE_SWITCH_INTERNAL.GET_DATABASE_SCNS +DBMS_CAPTURE_SWITCH_INTERNAL.GET_OLDEST_SCN +DBMS_CAPTURE_SWITCH_INTERNAL.RESTART_PROCESS +DBMS_CAPTURE_SWITCH_INTERNAL.SET_OLDEST_SCN +DBMS_CAPTURE_SWITCH_INTERNAL.WAITFOR_CAPTURE +DBMS_CAPTURE_SWITCH_INTERNAL.WAIT_CAPTURE_MAKE_PROGRESS +DBMS_CDC_DPUTIL. +DBMS_CDC_DPUTIL.CDC_OBJECTS_TO_EXPORT +DBMS_CDC_DPUTIL.ERROR_TEXT +DBMS_CDC_DPUTIL.GET_ERROR_TEXT +DBMS_CDC_DPUTIL.GET_IMPVLDTAB_NAME +DBMS_CDC_DPUTIL.GET_JOB_DESC +DBMS_CDC_DPUTIL.GET_TABVIEW_OBJNO +DBMS_CDC_DPUTIL.IS_FULL_DB_EXPORT +DBMS_CDC_DPUTIL.VALID_TABLE +DBMS_CDC_DPUTIL.WRITE_LOG +DBMS_CDC_DPUTIL.WRITE_TRACE +DBMS_CDC_EXPDP. +DBMS_CDC_EXPDP.DUMP_CHANGE_COLUMN +DBMS_CDC_EXPDP.DUMP_CHANGE_PROPAGATION +DBMS_CDC_EXPDP.DUMP_CHANGE_PROPSET +DBMS_CDC_EXPDP.DUMP_CHANGE_SET +DBMS_CDC_EXPDP.DUMP_CHANGE_SOURCE +DBMS_CDC_EXPDP.DUMP_CHANGE_TABLE +DBMS_CDC_EXPDP.DUMP_SUBSCRIBED_COLUMN +DBMS_CDC_EXPDP.DUMP_SUBSCRIBED_TABLE +DBMS_CDC_EXPDP.DUMP_SUBSCRIBER +DBMS_CDC_EXPDP.SCHEMA_CALLOUT +DBMS_CDC_EXPDP.SCHEMA_INFO_EXP +DBMS_CDC_EXPDP.SYSTEM_INFO_EXP +DBMS_CDC_EXPVDP. +DBMS_CDC_EXPVDP.SCHEMA_INFO_EXP +DBMS_CDC_IMPDP. +DBMS_CDC_IMPDP.CHANGE_SET_EXISTS +DBMS_CDC_IMPDP.DATE_CONVERT +DBMS_CDC_IMPDP.GET_NEW_HANDLE +DBMS_CDC_IMPDP.GET_SUB_HANDLE +DBMS_CDC_IMPDP.HAS_SYNCCDC_TRIGGER +DBMS_CDC_IMPDP.IMPORT_CHANGE_COLUMN +DBMS_CDC_IMPDP.IMPORT_CHANGE_SET +DBMS_CDC_IMPDP.IMPORT_CHANGE_SOURCE +DBMS_CDC_IMPDP.IMPORT_CHANGE_TABLE +DBMS_CDC_IMPDP.IMPORT_PROPAGATION +DBMS_CDC_IMPDP.IMPORT_PROP_SET +DBMS_CDC_IMPDP.IMPORT_SUBSCRIBED_COLUMN +DBMS_CDC_IMPDP.IMPORT_SUBSCRIBED_TABLE +DBMS_CDC_IMPDP.IMPORT_SUBSCRIBER +DBMS_CDC_IMPDP.VALIDATE_CHANGE_SET +DBMS_CDC_IMPDP.VALIDATE_CHANGE_SOURCE +DBMS_CDC_IMPDP.VALIDATE_CHANGE_TABLE +DBMS_CDC_IMPDP.VALIDATE_IMPORT +DBMS_CDC_IMPDP.VALIDATE_SUBSCRIPTION +DBMS_CDC_IMPDPV. +DBMS_CDC_IMPDPV.BUMP_SCN +DBMS_CDC_IMPDPV.BUMP_SEQUENCE +DBMS_CDC_IMPDPV.CREATE_IMPORT_VALIDATION +DBMS_CDC_IPUBLISH. +DBMS_CDC_IPUBLISH.ALTER_HOTLOG_INTERNAL_CSOURCE +DBMS_CDC_IPUBLISH.ALTER_INT_CHANGE_TABLE +DBMS_CDC_IPUBLISH.CHANGE_TABLE_TRIGGER +DBMS_CDC_IPUBLISH.CHECK_10GR2_COMPATIBILITY +DBMS_CDC_IPUBLISH.CHECK_PUBLISHER_REQ +DBMS_CDC_IPUBLISH.CHECK_REMOTE_USER_ROLE_PRIV +DBMS_CDC_IPUBLISH.CHECK_USER_ROLE_PRIV +DBMS_CDC_IPUBLISH.CHGTAB_CACHE +DBMS_CDC_IPUBLISH.CREATE_CHANGE_TABLE +DBMS_CDC_IPUBLISH.CREATE_CHGTAB_STRUCT +DBMS_CDC_IPUBLISH.CREATE_HOTLOG_INTERNAL_CSOURCE +DBMS_CDC_IPUBLISH.CREATE_HOTLOG_INTERNAL_PROP +DBMS_CDC_IPUBLISH.CREATE_INT_CHANGE_TABLE +DBMS_CDC_IPUBLISH.CREATE_MAP_TABLE +DBMS_CDC_IPUBLISH.DROP_CHANGE_TABLE +DBMS_CDC_IPUBLISH.DROP_CHGTAB_STRUCT +DBMS_CDC_IPUBLISH.DROP_HOTLOG_INTERNAL_CSOURCE +DBMS_CDC_IPUBLISH.DROP_HOTLOG_INTERNAL_PROP +DBMS_CDC_IPUBLISH.GET_DATABASE_VERSION +DBMS_CDC_IPUBLISH.INSERT_MESSAGE +DBMS_CDC_IPUBLISH.IS_COLUMN_ENCRYPTED +DBMS_CDC_IPUBLISH.PURGE_LOGICAL_SUB +DBMS_CDC_IPUBLISH.RESOLVE_DBLINK_USER +DBMS_CDC_IPUBLISH.TRACE_DEBUG +DBMS_CDC_IPUBLISH.UPGRADE_METADATA_TO_10GR2 +DBMS_CDC_IPUBLISH.VERIFY_DBLINK +DBMS_CDC_ISUBSCRIBE. +DBMS_CDC_ISUBSCRIBE.CHECK_SUB_PRIV +DBMS_CDC_ISUBSCRIBE.CREATE_SUBSCRIPTION +DBMS_CDC_ISUBSCRIBE.EXTEND_WINDOW_LIST +DBMS_CDC_ISUBSCRIBE.INT_EXTEND_WINDOW +DBMS_CDC_ISUBSCRIBE.INT_PURGE_WINDOW +DBMS_CDC_ISUBSCRIBE.PREPARE_UNBOUNDED_VIEW +DBMS_CDC_ISUBSCRIBE.SUBSCRIBE +DBMS_CDC_ISUBSCRIBE.VALIDATE_SUBNAME +DBMS_CDC_PUBLISH. +DBMS_CDC_PUBLISH.ALTER_AUTOLOG_CHANGE_SOURCE +DBMS_CDC_PUBLISH.ALTER_CHANGE_SET +DBMS_CDC_PUBLISH.ALTER_CHANGE_TABLE +DBMS_CDC_PUBLISH.ALTER_HOTLOG_CHANGE_SOURCE +DBMS_CDC_PUBLISH.CREATE_AUTOLOG_CHANGE_SOURCE +DBMS_CDC_PUBLISH.CREATE_CHANGE_SET +DBMS_CDC_PUBLISH.CREATE_CHANGE_TABLE +DBMS_CDC_PUBLISH.CREATE_HOTLOG_CHANGE_SOURCE +DBMS_CDC_PUBLISH.DROP_CHANGE_SET +DBMS_CDC_PUBLISH.DROP_CHANGE_SOURCE +DBMS_CDC_PUBLISH.DROP_CHANGE_TABLE +DBMS_CDC_PUBLISH.DROP_SUBSCRIBER_VIEW +DBMS_CDC_PUBLISH.DROP_SUBSCRIPTION +DBMS_CDC_PUBLISH.GET_DDLOPER +DBMS_CDC_PUBLISH.PURGE +DBMS_CDC_PUBLISH.PURGE_CHANGE_SET +DBMS_CDC_PUBLISH.PURGE_CHANGE_TABLE +DBMS_CDC_SUBSCRIBE. +DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION +DBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTION +DBMS_CDC_SUBSCRIBE.DROP_SUBSCRIBER_VIEW +DBMS_CDC_SUBSCRIBE.DROP_SUBSCRIPTION +DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW +DBMS_CDC_SUBSCRIBE.GET_SUBSCRIPTION_HANDLE +DBMS_CDC_SUBSCRIBE.PREPARE_SUBSCRIBER_VIEW +DBMS_CDC_SUBSCRIBE.PURGE_WINDOW +DBMS_CDC_SUBSCRIBE.SUBSCRIBE +DBMS_CDC_SYS_IPUBLISH. +DBMS_CDC_SYS_IPUBLISH.COUNT_CHANGE_TABLE +DBMS_CDC_SYS_IPUBLISH.DROP_SUBSCRIBER_VIEW +DBMS_CDC_SYS_IPUBLISH.DROP_SUBSCRIPTION +DBMS_CDC_SYS_IPUBLISH.ENABLE_TABLE_TRIGGER +DBMS_CDC_SYS_IPUBLISH.GET_CHANGE_TABLE +DBMS_CDC_SYS_IPUBLISH.GET_CHGSRC_METADATA +DBMS_CDC_SYS_IPUBLISH.GET_CHGSRC_TYPE +DBMS_CDC_SYS_IPUBLISH.GET_FRESHNESS +DBMS_CDC_SYS_IPUBLISH.INSERT_CHGSRC_DATA +DBMS_CDC_SYS_IPUBLISH.RAISE_SYSTEM_ERROR +DBMS_CDC_SYS_IPUBLISH.REMOVE_CHGSET_PROP +DBMS_CDC_SYS_IPUBLISH.REMOVE_CHGTAB +DBMS_CDC_SYS_IPUBLISH.REMOVE_CHGTAB_METADATA +DBMS_CDC_SYS_IPUBLISH.REMOVE_SUBSCRIPTION_METADATA +DBMS_CDC_SYS_IPUBLISH.REUSE_CHGSET_PROP +DBMS_CDC_SYS_IPUBLISH.UPDATE_CDC_PROP_TABLES +DBMS_CDC_SYS_IPUBLISH.UPDATE_CHGSRC_METADATA +DBMS_CDC_SYS_IPUBLISH.UPDATE_SUBSCRIBED_TAB_STATUS +DBMS_CDC_UTILITY. +DBMS_CDC_UTILITY.CDC_ALLOCATE_LOCK +DBMS_CDC_UTILITY.CHECK_PURGE +DBMS_CDC_UTILITY.CHK_SECURITY +DBMS_CDC_UTILITY.CLEANUP_SYNC_TABLE +DBMS_CDC_UTILITY.COUNT_EXISTING_COL +DBMS_CDC_UTILITY.COUNT_OBJECT_COL +DBMS_CDC_UTILITY.COUNT_PURGE_JOB +DBMS_CDC_UTILITY.COUNT_SUBSCRIBERS +DBMS_CDC_UTILITY.DELETE_EXPORT_ACTION +DBMS_CDC_UTILITY.DROP_USER +DBMS_CDC_UTILITY.EXPORT_CHANGE_TABLE +DBMS_CDC_UTILITY.EXTEND_WINDOW_LIST +DBMS_CDC_UTILITY.FIXUP_SYNC_TABLE +DBMS_CDC_UTILITY.GETSYNCSCN +DBMS_CDC_UTILITY.GET_CURRENT_SCN +DBMS_CDC_UTILITY.GET_EVENT_LEVEL +DBMS_CDC_UTILITY.GET_INSTANCE +DBMS_CDC_UTILITY.GET_ORACLE_EDITION +DBMS_CDC_UTILITY.GET_TABLE_OBJN +DBMS_CDC_UTILITY.IMPORT_CHANGE_TABLE +DBMS_CDC_UTILITY.IS_CONTROL_COLUMN +DBMS_CDC_UTILITY.IS_CONTROL_COLUMNMV +DBMS_CDC_UTILITY.LOCK_CHANGE_SET +DBMS_CDC_UTILITY.NUMTOHEX +DBMS_CDC_UTILITY.PURGEMVLOGLOGICAL +DBMS_CDC_UTILITY.PURGEMVLOGPHYSICAL +DBMS_CDC_UTILITY.QCCGELVL +DBMS_CDC_UTILITY.QCCGETEE +DBMS_CDC_UTILITY.QCCGSCN +DBMS_CDC_UTILITY.QCCSGNBS +DBMS_CDC_UTILITY.SETUP_SYNC_TABLE +DBMS_CDC_UTILITY.SET_PURGEBOUNDARY +DBMS_CDC_UTILITY.SET_WINDOW_START +DBMS_CDC_UTILITY.VERIFY_CDC_NAME +DBMS_CDC_UTILITY.VERIFY_VARCHAR_PARAM +DBMS_CHANGE_NOTIFICATION. +DBMS_CHANGE_NOTIFICATION.CQ_NOTIFICATION_QUERYID +DBMS_CHANGE_NOTIFICATION.DEREGISTER +DBMS_CHANGE_NOTIFICATION.ENABLE_REG +DBMS_CHANGE_NOTIFICATION.NEW_REG_START +DBMS_CHANGE_NOTIFICATION.NEW_REG_START_OC4J +DBMS_CHANGE_NOTIFICATION.REG_END +DBMS_CHANGE_NOTIFICATION.SET_ROWID_THRESHOLD +DBMS_CLIENT_RESULT_CACHE. +DBMS_CLIENT_RESULT_CACHE.CACHE_CLEANUP +DBMS_CMP_INT. +DBMS_CMP_INT.CMP_TRACE +DBMS_CMP_INT.CMP_TRACE_CLOB +DBMS_CMP_INT.DROP_CMP +DBMS_CMP_INT.DROP_CMP_BY_CMPID +DBMS_CMP_INT.GET_CMP_CTX +DBMS_CMP_INT.GET_CMP_SCAN +DBMS_CMP_INT.GET_CMP_SCANS +DBMS_CMP_INT.GET_NEXT_SCAN_SEQ +DBMS_CMP_INT.IS_CMP_TRACING_ON +DBMS_CMP_INT.PURGE_CMP +DBMS_CMP_INT.PUT_CMP_CTX +DBMS_CMP_INT.PUT_CMP_SCAN +DBMS_CMP_INT.PUT_CMP_SCANS +DBMS_CMP_INT.PUT_ROW_DIFS +DBMS_CMP_INT.UPDATE_CMP_SCAN +DBMS_CMP_INT.UPDATE_CMP_SCAN_NUM_ROWS +DBMS_CMP_INT.UPDATE_ROW_DIFS +DBMS_CMP_INT.UPDATE_ROW_DIFS2 +DBMS_CMP_INT.UPDATE_ROW_INSERTED_DIFS +DBMS_COMPARISON. +DBMS_COMPARISON.COMPARE +DBMS_COMPARISON.CONVERGE +DBMS_COMPARISON.CREATE_COMPARISON +DBMS_COMPARISON.DROP_COMPARISON +DBMS_COMPARISON.PURGE_COMPARISON +DBMS_COMPARISON.RECHECK +DBMS_COMPRESSION. +DBMS_COMPRESSION.GET_COMPRESSION_RATIO +DBMS_COMPRESSION.GET_COMPRESSION_TYPE +DBMS_COMPRESSION.INCREMENTAL_COMPRESS +DBMS_CONNECTION_POOL. +DBMS_CONNECTION_POOL.ALTER_PARAM +DBMS_CONNECTION_POOL.CONFIGURE_POOL +DBMS_CONNECTION_POOL.RESTORE_DEFAULTS +DBMS_CONNECTION_POOL.START_POOL +DBMS_CONNECTION_POOL.STOP_POOL +DBMS_CRYPTO. +DBMS_CRYPTO.DECRYPT +DBMS_CRYPTO.ENCRYPT +DBMS_CRYPTO.HASH +DBMS_CRYPTO.MAC +DBMS_CRYPTO.RANDOMBYTES +DBMS_CRYPTO.RANDOMINTEGER +DBMS_CRYPTO.RANDOMNUMBER +DBMS_CRYPTO_FFI. +DBMS_CRYPTO_FFI.COOKIE +DBMS_CRYPTO_FFI.DECRYPT +DBMS_CRYPTO_FFI.ENCRYPT +DBMS_CRYPTO_FFI.HASH +DBMS_CRYPTO_FFI.MAC +DBMS_CRYPTO_FFI.RANDOM +DBMS_CRYPTO_TOOLKIT. +DBMS_CRYPTO_TOOLKIT.ABORTIDENTITY +DBMS_CRYPTO_TOOLKIT.CLOSEPERSONA +DBMS_CRYPTO_TOOLKIT.CLOSEWALLET +DBMS_CRYPTO_TOOLKIT.CREATEIDENTITY +DBMS_CRYPTO_TOOLKIT.CREATEPERSONA +DBMS_CRYPTO_TOOLKIT.CREATEWALLET +DBMS_CRYPTO_TOOLKIT.DECRYPT +DBMS_CRYPTO_TOOLKIT.DEENVELOPE +DBMS_CRYPTO_TOOLKIT.DESTROYWALLET +DBMS_CRYPTO_TOOLKIT.ENCRYPT +DBMS_CRYPTO_TOOLKIT.ENVELOPE +DBMS_CRYPTO_TOOLKIT.HASH +DBMS_CRYPTO_TOOLKIT.INITIALIZE +DBMS_CRYPTO_TOOLKIT.KEYEDHASH +DBMS_CRYPTO_TOOLKIT.OPENPERSONA +DBMS_CRYPTO_TOOLKIT.OPENWALLET +DBMS_CRYPTO_TOOLKIT.PKDECRYPT +DBMS_CRYPTO_TOOLKIT.PKENCRYPT +DBMS_CRYPTO_TOOLKIT.RANDOMBYTES +DBMS_CRYPTO_TOOLKIT.RANDOMNUMBER +DBMS_CRYPTO_TOOLKIT.REMOVEIDENTITY +DBMS_CRYPTO_TOOLKIT.REMOVEPERSONA +DBMS_CRYPTO_TOOLKIT.SEEDRANDOM +DBMS_CRYPTO_TOOLKIT.SIGN +DBMS_CRYPTO_TOOLKIT.SIGNDETACHED +DBMS_CRYPTO_TOOLKIT.STOREPERSONA +DBMS_CRYPTO_TOOLKIT.STORETRUSTEDIDENTITY +DBMS_CRYPTO_TOOLKIT.TERMINATE +DBMS_CRYPTO_TOOLKIT.VALIDATE +DBMS_CRYPTO_TOOLKIT.VERIFY +DBMS_CRYPTO_TOOLKIT.VERIFYDETACHED +DBMS_CRYPTO_TOOLKIT_FFI. +DBMS_CRYPTO_TOOLKIT_FFI.ABORTIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.CLOSEPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.CLOSEWALLET +DBMS_CRYPTO_TOOLKIT_FFI.CREATEIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.CREATEPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.CREATEWALLET +DBMS_CRYPTO_TOOLKIT_FFI.DECRYPT +DBMS_CRYPTO_TOOLKIT_FFI.DEENVELOPE +DBMS_CRYPTO_TOOLKIT_FFI.DESTROYWALLET +DBMS_CRYPTO_TOOLKIT_FFI.ENCRYPT +DBMS_CRYPTO_TOOLKIT_FFI.ENVELOPE +DBMS_CRYPTO_TOOLKIT_FFI.GETPERSONAFROMWALLET +DBMS_CRYPTO_TOOLKIT_FFI.GETPROTECTION +DBMS_CRYPTO_TOOLKIT_FFI.HASH +DBMS_CRYPTO_TOOLKIT_FFI.INITIALIZE +DBMS_CRYPTO_TOOLKIT_FFI.KEYEDHASH +DBMS_CRYPTO_TOOLKIT_FFI.OPENPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.OPENWALLET +DBMS_CRYPTO_TOOLKIT_FFI.PKDECRYPT +DBMS_CRYPTO_TOOLKIT_FFI.PKENCRYPT +DBMS_CRYPTO_TOOLKIT_FFI.RANDOMBYTES +DBMS_CRYPTO_TOOLKIT_FFI.RANDOMNUMBER +DBMS_CRYPTO_TOOLKIT_FFI.REMOVEIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.REMOVEPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.SEEDRANDOM +DBMS_CRYPTO_TOOLKIT_FFI.SETPROTECTION +DBMS_CRYPTO_TOOLKIT_FFI.SIGN +DBMS_CRYPTO_TOOLKIT_FFI.SIGNDETACHED +DBMS_CRYPTO_TOOLKIT_FFI.STOREPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.STORETRUSTEDIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.TERMINATE +DBMS_CRYPTO_TOOLKIT_FFI.VALIDATE +DBMS_CRYPTO_TOOLKIT_FFI.VERIFY +DBMS_CRYPTO_TOOLKIT_FFI.VERIFYDETACHED +DBMS_CRYPTO_TOOLKIT_TYPES. +DBMS_CSX_ADMIN. +DBMS_CSX_ADMIN.COPYDEFAULTTOKENTABLESET +DBMS_CSX_ADMIN.GATHERTOKENTABLESTATS +DBMS_CSX_ADMIN.GETTOKENTABLEINFO +DBMS_CSX_ADMIN.GETTOKENTABLEINFOBYTABLESPACE +DBMS_CSX_ADMIN.INSTANCE_INFO_EXP +DBMS_CSX_ADMIN.NAMESPACEIDTABLE +DBMS_CSX_ADMIN.PATHIDTABLE +DBMS_CSX_ADMIN.QNAMEIDTABLE +DBMS_CSX_ADMIN.REGISTERTOKENTABLESET +DBMS_CSX_INT. +DBMS_CSX_INT.CREATETOKENTABLES +DBMS_CSX_INT.GETCOMPILEDSCHEMA +DBMS_CSX_INT.GETCOMPILEDSCHEMABYID +DBMS_CSX_INT.GETCSXSCHEMA +DBMS_CSX_INT.GETVOCABULARY +DBMS_CSX_INT.GETVOCABULARYFROMTOKEN +DBMS_CSX_INT.GETVOCABULARYFROMTOKENNOTXN +DBMS_CSX_INT.GETVOCABULARYNOTXN +DBMS_CSX_INT.GUIDFROM32 +DBMS_CSX_INT.GUIDTO32 +DBMS_CSX_INT.LOCKTOKENMANAGER +DBMS_CSX_INT.POPULATEKDSOFROMGUID +DBMS_CSX_INT.POPULATETOKENTABLESET +DBMS_CSX_INT.REGISTERTOKEN +DBMS_CSX_INT.TESTDECODEJC +DBMS_CSX_INT.TESTENCODEJC +DBMS_CSX_INT.TOVALIDATE +DBMS_CSX_INT.UPDATEMASTERTABLE +DBMS_CUBE. +DBMS_CUBE.BUILD +DBMS_CUBE.BUILD_SLAVE +DBMS_CUBE.CREATE_EXPORT_OPTIONS +DBMS_CUBE.CREATE_IMPORT_OPTIONS +DBMS_CUBE.CREATE_MVIEW +DBMS_CUBE.DERIVE_FROM_MVIEW +DBMS_CUBE.DROP_MVIEW +DBMS_CUBE.EXPORT_XML +DBMS_CUBE.EXPORT_XML_TO_FILE +DBMS_CUBE.IMPORT_XML +DBMS_CUBE.INITIALIZE_CUBE_UPGRADE +DBMS_CUBE.REFRESH_MVIEW +DBMS_CUBE.UPGRADE_AW +DBMS_CUBE.VALIDATE_XML +DBMS_CUBE_ADVISE. +DBMS_CUBE_ADVISE.GET_ATR_EXPR_RC +DBMS_CUBE_ADVISE.GET_COLDISTINCTCOUNT +DBMS_CUBE_ADVISE.GET_DIMHIERJOIN_DISPOSITION +DBMS_CUBE_ADVISE.GET_DIMLVL_DISPOSITION +DBMS_CUBE_ADVISE.GET_DIM_DISPOSITION +DBMS_CUBE_ADVISE.GET_FK_NAME +DBMS_CUBE_ADVISE.GET_LVL_NAME +DBMS_CUBE_ADVISE.GET_MEAS_COL +DBMS_CUBE_ADVISE.GET_PK_NAME +DBMS_CUBE_ADVISE.IS_MD_CLASS +DBMS_CUBE_ADVISE.LOG +DBMS_CUBE_ADVISE.MV_CUBE_ADVICE +DBMS_CUBE_ADVISE.SET_CNS_EXCEPTION_LOG +DBMS_CUBE_ADVISE.TRACE +DBMS_CUBE_ADVISE_SEC. +DBMS_CUBE_ADVISE_SEC.CHECK_FOR_NESTING +DBMS_CUBE_ADVISE_SEC.CHECK_TABLE_ACCESS +DBMS_CUBE_ADVISE_SEC.COADSEQ_CURRENT +DBMS_CUBE_ADVISE_SEC.COADSEQ_NEXT +DBMS_CUBE_ADVISE_SEC.GET_MVNAME +DBMS_CUBE_ADVISE_SEC.GET_NN_NAME +DBMS_CUBE_EXP. +DBMS_CUBE_EXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_CUBE_EXP.INSTANCE_INFO_IMP_DS_11_2_0_2 +DBMS_CUBE_EXP.SCHEMA_CALLOUT +DBMS_CUBE_EXP.SCHEMA_INFO_EXP +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_11_2 +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_BEG +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_END +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_LOOP +DBMS_CUBE_LOG. +DBMS_CUBE_LOG.COMPLETE_OPLOG +DBMS_CUBE_LOG.DEFAULT_NAME +DBMS_CUBE_LOG.DISABLE +DBMS_CUBE_LOG.ENABLE +DBMS_CUBE_LOG.FLUSH +DBMS_CUBE_LOG.GET_LOG +DBMS_CUBE_LOG.GET_LOG_SPEC +DBMS_CUBE_LOG.GET_PARAMETER +DBMS_CUBE_LOG.LEVEL_HIGH +DBMS_CUBE_LOG.LEVEL_HIGHEST +DBMS_CUBE_LOG.LEVEL_LOW +DBMS_CUBE_LOG.LEVEL_LOWEST +DBMS_CUBE_LOG.LEVEL_MEDIUM +DBMS_CUBE_LOG.SET_LOG_SPEC +DBMS_CUBE_LOG.SET_PARAMETER +DBMS_CUBE_LOG.SET_QUERY_ENV +DBMS_CUBE_LOG.START_OPLOG +DBMS_CUBE_LOG.TABLE_CREATE +DBMS_CUBE_LOG.TARGET_FILE +DBMS_CUBE_LOG.TARGET_LOB +DBMS_CUBE_LOG.TARGET_TABLE +DBMS_CUBE_LOG.TARGET_TRACE +DBMS_CUBE_LOG.TYPE_BUILD +DBMS_CUBE_LOG.TYPE_DIMENSION_COMPILE +DBMS_CUBE_LOG.TYPE_OPERATIONS +DBMS_CUBE_LOG.TYPE_REJECTED_RECORDS +DBMS_CUBE_LOG.VERBOSE_ACTION +DBMS_CUBE_LOG.VERBOSE_DEBUG +DBMS_CUBE_LOG.VERBOSE_INFO +DBMS_CUBE_LOG.VERBOSE_NOTICE +DBMS_CUBE_LOG.VERBOSE_STATS +DBMS_CUBE_LOG.VERSION +DBMS_CUBE_LOG.WRITE_TO_OPLOG +DBMS_CUBE_UTIL. +DBMS_CUBE_UTIL.CREATE_RPT_FILTER +DBMS_CUBE_UTIL.DROP_BRANCH +DBMS_CUBE_UTIL.DROP_RPT_FILTER +DBMS_CUBE_UTIL.GET_DIMENSION_SPECIAL_MEMBER +DBMS_DATAPUMP. +DBMS_DATAPUMP.ADD_DEVICE +DBMS_DATAPUMP.ADD_FILE +DBMS_DATAPUMP.ATTACH +DBMS_DATAPUMP.CLIENT_LOB_APPEND +DBMS_DATAPUMP.CLIENT_LOB_DELETE +DBMS_DATAPUMP.CLIENT_LOB_GET +DBMS_DATAPUMP.CREATE_JOB_VIEW +DBMS_DATAPUMP.DATAPUMP_JOB +DBMS_DATAPUMP.DATA_FILTER +DBMS_DATAPUMP.DATA_REMAP +DBMS_DATAPUMP.DETACH +DBMS_DATAPUMP.ESTABLISH_REMOTE_CONTEXT +DBMS_DATAPUMP.GET_DUMPFILE_INFO +DBMS_DATAPUMP.GET_STATUS +DBMS_DATAPUMP.GET_STATUS_VERSION +DBMS_DATAPUMP.HAS_PRIVS +DBMS_DATAPUMP.LOG_ENTRY +DBMS_DATAPUMP.LOG_ERROR +DBMS_DATAPUMP.METADATA_FILTER +DBMS_DATAPUMP.METADATA_REMAP +DBMS_DATAPUMP.METADATA_TRANSFORM +DBMS_DATAPUMP.OPEN +DBMS_DATAPUMP.SETUP_REMOTE_CONTEXT +DBMS_DATAPUMP.SET_DEBUG +DBMS_DATAPUMP.SET_PARALLEL +DBMS_DATAPUMP.SET_PARAMETER +DBMS_DATAPUMP.SET_REMOTE_WORKER +DBMS_DATAPUMP.START_JOB +DBMS_DATAPUMP.STOP_JOB +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1010 +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1020 +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1120 +DBMS_DATAPUMP.WAIT_FOR_JOB +DBMS_DATAPUMP_UTL. +DBMS_DATAPUMP_UTL.CREATE_DEFAULT_DIR +DBMS_DATAPUMP_UTL.REPLACE_DEFAULT_DIR +DBMS_DATA_MINING. +DBMS_DATA_MINING.ADD_COST_MATRIX +DBMS_DATA_MINING.ALTER_REVERSE_EXPRESSION +DBMS_DATA_MINING.APPLY +DBMS_DATA_MINING.COMPUTE_CONFUSION_MATRIX +DBMS_DATA_MINING.COMPUTE_LIFT +DBMS_DATA_MINING.COMPUTE_ROC +DBMS_DATA_MINING.CREATE_MODEL +DBMS_DATA_MINING.DROP_MODEL +DBMS_DATA_MINING.EXPORT_MODEL +DBMS_DATA_MINING.GET_ASSOCIATION_RULES +DBMS_DATA_MINING.GET_DEFAULT_SETTINGS +DBMS_DATA_MINING.GET_FREQUENT_ITEMSETS +DBMS_DATA_MINING.GET_MODEL_COST_MATRIX +DBMS_DATA_MINING.GET_MODEL_DETAILS_ABN +DBMS_DATA_MINING.GET_MODEL_DETAILS_AI +DBMS_DATA_MINING.GET_MODEL_DETAILS_GLM +DBMS_DATA_MINING.GET_MODEL_DETAILS_GLOBAL +DBMS_DATA_MINING.GET_MODEL_DETAILS_KM +DBMS_DATA_MINING.GET_MODEL_DETAILS_NB +DBMS_DATA_MINING.GET_MODEL_DETAILS_NMF +DBMS_DATA_MINING.GET_MODEL_DETAILS_OC +DBMS_DATA_MINING.GET_MODEL_DETAILS_SVM +DBMS_DATA_MINING.GET_MODEL_DETAILS_XML +DBMS_DATA_MINING.GET_MODEL_SETTINGS +DBMS_DATA_MINING.GET_MODEL_SIGNATURE +DBMS_DATA_MINING.GET_MODEL_TRANSFORMATIONS +DBMS_DATA_MINING.GET_TRANSFORM_LIST +DBMS_DATA_MINING.IMPORT_MODEL +DBMS_DATA_MINING.RANK_APPLY +DBMS_DATA_MINING.REMOVE_COST_MATRIX +DBMS_DATA_MINING.RENAME_MODEL +DBMS_DATA_MINING_INTERNAL. +DBMS_DATA_MINING_INTERNAL.APPLY +DBMS_DATA_MINING_INTERNAL.BUILD +DBMS_DATA_MINING_INTERNAL.CREATE_TEMP_META_TABLE +DBMS_DATA_MINING_INTERNAL.IMPORT_PMML_MODEL +DBMS_DATA_MINING_INTERNAL.XFORM +DBMS_DATA_MINING_TRANSFORM. +DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_CAT +DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_NUM +DBMS_DATA_MINING_TRANSFORM.CREATE_CLIP +DBMS_DATA_MINING_TRANSFORM.CREATE_COL_REM +DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_CAT +DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM +DBMS_DATA_MINING_TRANSFORM.CREATE_NORM_LIN +DBMS_DATA_MINING_TRANSFORM.DESCRIBE_STACK +DBMS_DATA_MINING_TRANSFORM.GET_EXPRESSION +DBMS_DATA_MINING_TRANSFORM.INSERT_AUTOBIN_NUM_EQWIDTH +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_CAT_FREQ +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_NUM_EQWIDTH +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_NUM_QTILE +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_SUPER +DBMS_DATA_MINING_TRANSFORM.INSERT_CLIP_TRIM_TAIL +DBMS_DATA_MINING_TRANSFORM.INSERT_CLIP_WINSOR_TAIL +DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_CAT_MODE +DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_NUM_MEAN +DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_MINMAX +DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_SCALE +DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_ZSCORE +DBMS_DATA_MINING_TRANSFORM.SET_EXPRESSION +DBMS_DATA_MINING_TRANSFORM.SET_TRANSFORM +DBMS_DATA_MINING_TRANSFORM.STACK_BIN_CAT +DBMS_DATA_MINING_TRANSFORM.STACK_BIN_NUM +DBMS_DATA_MINING_TRANSFORM.STACK_CLIP +DBMS_DATA_MINING_TRANSFORM.STACK_COL_REM +DBMS_DATA_MINING_TRANSFORM.STACK_MISS_CAT +DBMS_DATA_MINING_TRANSFORM.STACK_MISS_NUM +DBMS_DATA_MINING_TRANSFORM.STACK_NORM_LIN +DBMS_DATA_MINING_TRANSFORM.XFORM_BIN_CAT +DBMS_DATA_MINING_TRANSFORM.XFORM_BIN_NUM +DBMS_DATA_MINING_TRANSFORM.XFORM_CLIP +DBMS_DATA_MINING_TRANSFORM.XFORM_COL_REM +DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_NUM +DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_STR +DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_CAT +DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_NUM +DBMS_DATA_MINING_TRANSFORM.XFORM_NORM_LIN +DBMS_DATA_MINING_TRANSFORM.XFORM_STACK +DBMS_DBFS_CONTENT. +DBMS_DBFS_CONTENT.CHECKACCESS +DBMS_DBFS_CONTENT.CHECKSPI +DBMS_DBFS_CONTENT.CREATEDIRECTORY +DBMS_DBFS_CONTENT.CREATEFILE +DBMS_DBFS_CONTENT.CREATELINK +DBMS_DBFS_CONTENT.CREATEREFERENCE +DBMS_DBFS_CONTENT.DECODEFEATURES +DBMS_DBFS_CONTENT.DELETECONTENT +DBMS_DBFS_CONTENT.DELETEDIRECTORY +DBMS_DBFS_CONTENT.DELETEFILE +DBMS_DBFS_CONTENT.FEATURENAME +DBMS_DBFS_CONTENT.FLUSHSTATS +DBMS_DBFS_CONTENT.GETATTR_VIEW +DBMS_DBFS_CONTENT.GETDEFAULTACL +DBMS_DBFS_CONTENT.GETDEFAULTASOF +DBMS_DBFS_CONTENT.GETDEFAULTCONTEXT +DBMS_DBFS_CONTENT.GETDEFAULTOWNER +DBMS_DBFS_CONTENT.GETDEFAULTPRINCIPAL +DBMS_DBFS_CONTENT.GETFEATURESBYMOUNT +DBMS_DBFS_CONTENT.GETFEATURESBYNAME +DBMS_DBFS_CONTENT.GETFEATURESBYPATH +DBMS_DBFS_CONTENT.GETPATH +DBMS_DBFS_CONTENT.GETPATHBYMOUNTID +DBMS_DBFS_CONTENT.GETPATHBYSTOREID +DBMS_DBFS_CONTENT.GETPATHNOWAIT +DBMS_DBFS_CONTENT.GETSTATS +DBMS_DBFS_CONTENT.GETSTOREBYMOUNT +DBMS_DBFS_CONTENT.GETSTOREBYNAME +DBMS_DBFS_CONTENT.GETSTOREBYPATH +DBMS_DBFS_CONTENT.GETTRACE +DBMS_DBFS_CONTENT.GETVERSION +DBMS_DBFS_CONTENT.LIST +DBMS_DBFS_CONTENT.LISTALLCONTENT +DBMS_DBFS_CONTENT.LISTALLPROPERTIES +DBMS_DBFS_CONTENT.LISTCURSOR +DBMS_DBFS_CONTENT.LISTMOUNTS +DBMS_DBFS_CONTENT.LISTSTORES +DBMS_DBFS_CONTENT.LOCKPATH +DBMS_DBFS_CONTENT.MOUNTSTORE +DBMS_DBFS_CONTENT.NORMALIZEPATH +DBMS_DBFS_CONTENT.PROPANY +DBMS_DBFS_CONTENT.PROPERTIESH2T +DBMS_DBFS_CONTENT.PROPERTIEST2H +DBMS_DBFS_CONTENT.PROPNUMBER +DBMS_DBFS_CONTENT.PROPRAW +DBMS_DBFS_CONTENT.PROPTIMESTAMP +DBMS_DBFS_CONTENT.PROPVARCHAR2 +DBMS_DBFS_CONTENT.PURGEALL +DBMS_DBFS_CONTENT.PURGEPATH +DBMS_DBFS_CONTENT.PUTPATH +DBMS_DBFS_CONTENT.REGISTERSTORE +DBMS_DBFS_CONTENT.RENAMEPATH +DBMS_DBFS_CONTENT.RESTOREALL +DBMS_DBFS_CONTENT.RESTOREPATH +DBMS_DBFS_CONTENT.SEARCH +DBMS_DBFS_CONTENT.SETDEFAULTACL +DBMS_DBFS_CONTENT.SETDEFAULTASOF +DBMS_DBFS_CONTENT.SETDEFAULTCONTEXT +DBMS_DBFS_CONTENT.SETDEFAULTOWNER +DBMS_DBFS_CONTENT.SETDEFAULTPRINCIPAL +DBMS_DBFS_CONTENT.SETPATH +DBMS_DBFS_CONTENT.SETSTATS +DBMS_DBFS_CONTENT.SETTRACE +DBMS_DBFS_CONTENT.SPACEUSAGE +DBMS_DBFS_CONTENT.TRACE +DBMS_DBFS_CONTENT.TRACEENABLED +DBMS_DBFS_CONTENT.UNLOCKPATH +DBMS_DBFS_CONTENT.UNMOUNTSTORE +DBMS_DBFS_CONTENT.UNREGISTERSTORE +DBMS_DBFS_CONTENT_ADMIN. +DBMS_DBFS_CONTENT_ADMIN.CHECKSPI +DBMS_DBFS_CONTENT_ADMIN.MOUNTSTORE +DBMS_DBFS_CONTENT_ADMIN.REGISTERSTORE +DBMS_DBFS_CONTENT_ADMIN.UNMOUNTSTORE +DBMS_DBFS_CONTENT_ADMIN.UNREGISTERSTORE +DBMS_DBFS_CONTENT_ADMIN.UPDATECTX +DBMS_DBFS_CONTENT_ADMIN.UPDATESTATS +DBMS_DBFS_CONTENT_SPI. +DBMS_DBFS_CONTENT_SPI.CHECKACCESS +DBMS_DBFS_CONTENT_SPI.CREATEDIRECTORY +DBMS_DBFS_CONTENT_SPI.CREATEFILE +DBMS_DBFS_CONTENT_SPI.CREATEGETATTRVIEW +DBMS_DBFS_CONTENT_SPI.CREATELINK +DBMS_DBFS_CONTENT_SPI.CREATEREFERENCE +DBMS_DBFS_CONTENT_SPI.DELETECONTENT +DBMS_DBFS_CONTENT_SPI.DELETEDIRECTORY +DBMS_DBFS_CONTENT_SPI.DELETEFILE +DBMS_DBFS_CONTENT_SPI.DROPGETATTRVIEW +DBMS_DBFS_CONTENT_SPI.GETFEATURES +DBMS_DBFS_CONTENT_SPI.GETPATH +DBMS_DBFS_CONTENT_SPI.GETPATHBYSTOREID +DBMS_DBFS_CONTENT_SPI.GETPATHNOWAIT +DBMS_DBFS_CONTENT_SPI.GETSTOREID +DBMS_DBFS_CONTENT_SPI.GETVERSION +DBMS_DBFS_CONTENT_SPI.LIST +DBMS_DBFS_CONTENT_SPI.LISTCURSOR +DBMS_DBFS_CONTENT_SPI.LOCKPATH +DBMS_DBFS_CONTENT_SPI.PURGEALL +DBMS_DBFS_CONTENT_SPI.PURGEPATH +DBMS_DBFS_CONTENT_SPI.PUTPATH +DBMS_DBFS_CONTENT_SPI.RENAMEPATH +DBMS_DBFS_CONTENT_SPI.RESTOREALL +DBMS_DBFS_CONTENT_SPI.RESTOREPATH +DBMS_DBFS_CONTENT_SPI.SEARCH +DBMS_DBFS_CONTENT_SPI.SETPATH +DBMS_DBFS_CONTENT_SPI.SPACEUSAGE +DBMS_DBFS_CONTENT_SPI.SPACEUSAGEFULL +DBMS_DBFS_CONTENT_SPI.UNLOCKPATH +DBMS_DBFS_HS. +DBMS_DBFS_HS.CHECKACCESS +DBMS_DBFS_HS.CLEANUPUNUSEDBACKUPFILES +DBMS_DBFS_HS.CREATEBUCKET +DBMS_DBFS_HS.CREATEDIRECTORY +DBMS_DBFS_HS.CREATEFILE +DBMS_DBFS_HS.CREATELINK +DBMS_DBFS_HS.CREATEREFERENCE +DBMS_DBFS_HS.CREATESTORE +DBMS_DBFS_HS.DELETECONTENT +DBMS_DBFS_HS.DELETEDIRECTORY +DBMS_DBFS_HS.DELETEFILE +DBMS_DBFS_HS.DEREGSTORECOMMAND +DBMS_DBFS_HS.DROPSTORE +DBMS_DBFS_HS.FLUSHCACHE +DBMS_DBFS_HS.GETFEATURES +DBMS_DBFS_HS.GETPATH +DBMS_DBFS_HS.GETPATHBYSTOREID +DBMS_DBFS_HS.GETPATHNOWAIT +DBMS_DBFS_HS.GETSTOREID +DBMS_DBFS_HS.GETSTOREPROPERTY +DBMS_DBFS_HS.GETVERSION +DBMS_DBFS_HS.LIST +DBMS_DBFS_HS.LISTCONTENTFILENAME +DBMS_DBFS_HS.LOCKPATH +DBMS_DBFS_HS.PURGEALL +DBMS_DBFS_HS.PURGEPATH +DBMS_DBFS_HS.PUTPATH +DBMS_DBFS_HS.RECONFIGCACHE +DBMS_DBFS_HS.REGISTERSTORECOMMAND +DBMS_DBFS_HS.RENAMEPATH +DBMS_DBFS_HS.RESTOREALL +DBMS_DBFS_HS.RESTOREPATH +DBMS_DBFS_HS.SEARCH +DBMS_DBFS_HS.SENDCOMMAND +DBMS_DBFS_HS.SETPATH +DBMS_DBFS_HS.SETSTOREPROPERTY +DBMS_DBFS_HS.SPACEUSAGE +DBMS_DBFS_HS.STOREPUSH +DBMS_DBFS_HS.UNLOCKPATH +DBMS_DBFS_SFS. +DBMS_DBFS_SFS.ADDFSPROPERTIES +DBMS_DBFS_SFS.CHECKACCESS +DBMS_DBFS_SFS.CREATEDIRECTORY +DBMS_DBFS_SFS.CREATEFILE +DBMS_DBFS_SFS.CREATEFILESYSTEM +DBMS_DBFS_SFS.CREATEGETATTRVIEW +DBMS_DBFS_SFS.CREATELINK +DBMS_DBFS_SFS.CREATEREFERENCE +DBMS_DBFS_SFS.CREATESNAPSHOT +DBMS_DBFS_SFS.CREATESTORE +DBMS_DBFS_SFS.DELETECONTENT +DBMS_DBFS_SFS.DELETEDIRECTORY +DBMS_DBFS_SFS.DELETEFILE +DBMS_DBFS_SFS.DELETEFSPROPERTIES +DBMS_DBFS_SFS.DROPFILESYSTEM +DBMS_DBFS_SFS.DROPGETATTRVIEW +DBMS_DBFS_SFS.DROPSNAPSHOT +DBMS_DBFS_SFS.EXPORTFILESYSTEM +DBMS_DBFS_SFS.EXPORTTABLE +DBMS_DBFS_SFS.FS_ACCESS +DBMS_DBFS_SFS.FS_CHMOD +DBMS_DBFS_SFS.FS_CHOWN +DBMS_DBFS_SFS.FS_CREAT +DBMS_DBFS_SFS.FS_DESTROY +DBMS_DBFS_SFS.FS_FGETATTR +DBMS_DBFS_SFS.FS_FLUSH +DBMS_DBFS_SFS.FS_FSYNC +DBMS_DBFS_SFS.FS_FSYNCDIR +DBMS_DBFS_SFS.FS_FTRUNCATE +DBMS_DBFS_SFS.FS_GETATTR +DBMS_DBFS_SFS.FS_GETXATTR +DBMS_DBFS_SFS.FS_INIT +DBMS_DBFS_SFS.FS_LINK +DBMS_DBFS_SFS.FS_LISTXATTR +DBMS_DBFS_SFS.FS_MKDIR +DBMS_DBFS_SFS.FS_MKNOD +DBMS_DBFS_SFS.FS_OPEN +DBMS_DBFS_SFS.FS_OPENDIR +DBMS_DBFS_SFS.FS_READ +DBMS_DBFS_SFS.FS_READDIR +DBMS_DBFS_SFS.FS_READLINK +DBMS_DBFS_SFS.FS_RELEASE +DBMS_DBFS_SFS.FS_RELEASEDIR +DBMS_DBFS_SFS.FS_REMOVEXATTR +DBMS_DBFS_SFS.FS_RENAME +DBMS_DBFS_SFS.FS_RMDIR +DBMS_DBFS_SFS.FS_SETXATTR +DBMS_DBFS_SFS.FS_STATFS +DBMS_DBFS_SFS.FS_SYMLINK +DBMS_DBFS_SFS.FS_TRUNCATE +DBMS_DBFS_SFS.FS_UNLINK +DBMS_DBFS_SFS.FS_UTIME +DBMS_DBFS_SFS.FS_WRITE +DBMS_DBFS_SFS.GETFEATURES +DBMS_DBFS_SFS.GETPATH +DBMS_DBFS_SFS.GETPATHBYSTOREID +DBMS_DBFS_SFS.GETPATHNOWAIT +DBMS_DBFS_SFS.GETSTOREID +DBMS_DBFS_SFS.GETVERSION +DBMS_DBFS_SFS.GET_EPOCH +DBMS_DBFS_SFS.INITFS +DBMS_DBFS_SFS.LIST +DBMS_DBFS_SFS.LISTCURSOR +DBMS_DBFS_SFS.LISTFILESYSTEMS +DBMS_DBFS_SFS.LISTSNAPSHOTS +DBMS_DBFS_SFS.LISTTABLES +DBMS_DBFS_SFS.LISTVOLUMES +DBMS_DBFS_SFS.LOCKPATH +DBMS_DBFS_SFS.NORMALIZEFS +DBMS_DBFS_SFS.PURGEALL +DBMS_DBFS_SFS.PURGEPATH +DBMS_DBFS_SFS.PUTPATH +DBMS_DBFS_SFS.REGISTERFILESYSTEM +DBMS_DBFS_SFS.RENAMEPATH +DBMS_DBFS_SFS.RESTOREALL +DBMS_DBFS_SFS.RESTOREPATH +DBMS_DBFS_SFS.REVERTSNAPSHOT +DBMS_DBFS_SFS.SEARCH +DBMS_DBFS_SFS.SETFSPROPERTIES +DBMS_DBFS_SFS.SETPATH +DBMS_DBFS_SFS.SHRINKFS +DBMS_DBFS_SFS.SPACEUSAGE +DBMS_DBFS_SFS.SPACEUSAGEFULL +DBMS_DBFS_SFS.TO_EPOCH +DBMS_DBFS_SFS.UNLOCKPATH +DBMS_DBFS_SFS.UNREGISTERFILESYSTEM +DBMS_DBFS_SFS_ADMIN. +DBMS_DBFS_SFS_ADMIN.BLESSUSER +DBMS_DBFS_SFS_ADMIN.CREATEFILESYSTEM +DBMS_DBFS_SFS_ADMIN.CREATESNAPSHOT +DBMS_DBFS_SFS_ADMIN.DEFAULTTABLESPACE +DBMS_DBFS_SFS_ADMIN.DELETE_ORPHANS +DBMS_DBFS_SFS_ADMIN.DROPFILESYSTEM +DBMS_DBFS_SFS_ADMIN.DROPSNAPSHOT +DBMS_DBFS_SFS_ADMIN.DROP_ALL_TABLES +DBMS_DBFS_SFS_ADMIN.GETSTOREID +DBMS_DBFS_SFS_ADMIN.INITFILESYSTEM +DBMS_DBFS_SFS_ADMIN.LOBUSAGE +DBMS_DBFS_SFS_ADMIN.PARTITION_SEQUENCE +DBMS_DBFS_SFS_ADMIN.REGISTERFILESYSTEM +DBMS_DBFS_SFS_ADMIN.REVERTSNAPSHOT +DBMS_DBFS_SFS_ADMIN.SETFSPROPERTIES +DBMS_DBFS_SFS_ADMIN.SPACEUSAGE +DBMS_DBFS_SFS_ADMIN.TBSUSAGE +DBMS_DBFS_SFS_ADMIN.UNREGISTERFILESYSTEM +DBMS_DBLINK. +DBMS_DBLINK.UPGRADE +DBMS_DBVERIFY. +DBMS_DBVERIFY.DBV2 +DBMS_DB_VERSION. +DBMS_DDL. +DBMS_DDL.ALTER_COMPILE +DBMS_DDL.ALTER_TABLE_NOT_REFERENCEABLE +DBMS_DDL.ALTER_TABLE_REFERENCEABLE +DBMS_DDL.ANALYZE_OBJECT +DBMS_DDL.CREATE_WRAPPED +DBMS_DDL.IS_TRIGGER_FIRE_ONCE +DBMS_DDL.IS_TRIGGER_FIRE_ONCE_INTERNAL +DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY +DBMS_DDL.WRAP +DBMS_DDL_INTERNAL. +DBMS_DDL_INTERNAL.CHECK_TRIGGER_FIRING_PROPERTY +DBMS_DDL_INTERNAL.COMPAT_OK +DBMS_DDL_INTERNAL.GEN_NEW_OBJECT_ID +DBMS_DDL_INTERNAL.HAS_ALTER_ANY_TRIGGER_PRIV +DBMS_DDL_INTERNAL.HAS_EXP_IMP_PRIV +DBMS_DDL_INTERNAL.IS_DDL_TRIGGER +DBMS_DDL_INTERNAL.SWAP_BOOTSTRAP +DBMS_DEBUG. +DBMS_DEBUG.ABORT +DBMS_DEBUG.ATTACH_SESSION +DBMS_DEBUG.CONTINUE +DBMS_DEBUG.DEBUG_OFF +DBMS_DEBUG.DEBUG_ON +DBMS_DEBUG.DELETE_BREAKPOINT +DBMS_DEBUG.DELETE_OER_BREAKPOINT +DBMS_DEBUG.DETACH_SESSION +DBMS_DEBUG.DISABLE_BREAKPOINT +DBMS_DEBUG.ENABLE_BREAKPOINT +DBMS_DEBUG.EXECUTE +DBMS_DEBUG.GET_ENCODED_PKGVARS_FOR_CLIENT +DBMS_DEBUG.GET_ENCODED_STACK_FOR_CLIENT +DBMS_DEBUG.GET_INDEXES +DBMS_DEBUG.GET_LINE_MAP +DBMS_DEBUG.GET_MORE_SOURCE +DBMS_DEBUG.GET_RUNTIME_INFO +DBMS_DEBUG.GET_TIMEOUT_BEHAVIOUR +DBMS_DEBUG.GET_VALUE +DBMS_DEBUG.INITIALIZE +DBMS_DEBUG.PING +DBMS_DEBUG.PRINT_BACKTRACE +DBMS_DEBUG.PRINT_INSTANTIATIONS +DBMS_DEBUG.PROBE_VERSION +DBMS_DEBUG.SELF_CHECK +DBMS_DEBUG.SET_BREAKPOINT +DBMS_DEBUG.SET_DIAGNOSTIC_LEVEL +DBMS_DEBUG.SET_OER_BREAKPOINT +DBMS_DEBUG.SET_TIMEOUT +DBMS_DEBUG.SET_TIMEOUT_BEHAVIOUR +DBMS_DEBUG.SET_VALUE +DBMS_DEBUG.SHOW_BREAKPOINTS +DBMS_DEBUG.SHOW_FRAME_SOURCE +DBMS_DEBUG.SHOW_SOURCE +DBMS_DEBUG.SYNCHRONIZE +DBMS_DEBUG.TARGET_PROGRAM_RUNNING +DBMS_DEBUG_JDWP. +DBMS_DEBUG_JDWP.CONNECT_TCP +DBMS_DEBUG_JDWP.CURRENT_SESSION_ID +DBMS_DEBUG_JDWP.CURRENT_SESSION_SERIAL +DBMS_DEBUG_JDWP.DISCONNECT +DBMS_DEBUG_JDWP.GET_NLS_PARAMETER +DBMS_DEBUG_JDWP.PROCESS_CONNECT_STRING +DBMS_DEBUG_JDWP.SET_NLS_PARAMETER +DBMS_DEBUG_JDWP_CUSTOM. +DBMS_DEBUG_JDWP_CUSTOM.CONNECT_DEBUGGER +DBMS_DEFER. +DBMS_DEFER.ANYDATA_ARG +DBMS_DEFER.ANY_CHAR_ARG +DBMS_DEFER.ANY_CLOB_ARG +DBMS_DEFER.ANY_VARCHAR2_ARG +DBMS_DEFER.BLOB_ARG +DBMS_DEFER.CALL +DBMS_DEFER.CHAR_ARG +DBMS_DEFER.CLOB_ARG +DBMS_DEFER.COMMIT_WORK +DBMS_DEFER.DATE_ARG +DBMS_DEFER.GET_NEXT_TXN_LOG_RUN +DBMS_DEFER.GET_TXN_LOG_RUNS +DBMS_DEFER.IDS_ARG +DBMS_DEFER.IYM_ARG +DBMS_DEFER.NCHAR_ARG +DBMS_DEFER.NCLOB_ARG +DBMS_DEFER.NUMBER_ARG +DBMS_DEFER.NVARCHAR2_ARG +DBMS_DEFER.PURGE_TRANSACTION_LOG +DBMS_DEFER.RAW_ARG +DBMS_DEFER.RECORD_TRANSACTION +DBMS_DEFER.ROWID_ARG +DBMS_DEFER.TIMESTAMP_ARG +DBMS_DEFER.TIME_ARG +DBMS_DEFER.TRANSACTION +DBMS_DEFER.TSLTZ_ARG +DBMS_DEFER.TSTZ_ARG +DBMS_DEFER.TTZ_ARG +DBMS_DEFER.VARCHAR2_ARG +DBMS_DEFERGEN. +DBMS_DEFERGEN.ALTER_AUDIT_TABLE +DBMS_DEFERGEN.CREATE_AUDIT_TABLE +DBMS_DEFERGEN.GENERATE_AUDIT_PACKAGE +DBMS_DEFERGEN.GENERATE_PACKAGE +DBMS_DEFERGEN.GENERATE_PRIORITY_PACKAGE +DBMS_DEFERGEN.GENERATE_TP_PACKAGE +DBMS_DEFERGEN.GENERATE_TRIGGERS +DBMS_DEFERGEN.GENERATE_WRAPPER_PACKAGE +DBMS_DEFERGEN.GENERATE_WRAPPER_PROCEDURE +DBMS_DEFERGEN.GET_KEY_COLUMN +DBMS_DEFERGEN_AUDIT. +DBMS_DEFERGEN_AUDIT.ALTER_AUDIT_TABLE +DBMS_DEFERGEN_AUDIT.CREATE_AUDIT_TABLE +DBMS_DEFERGEN_AUDIT.MK_ASSIGNMENT +DBMS_DEFERGEN_AUDIT.MK_DELETE_ROLLBACK +DBMS_DEFERGEN_AUDIT.MK_METHOD_ARG +DBMS_DEFERGEN_AUDIT.MK_METHOD_DECL +DBMS_DEFERGEN_AUDIT.MK_NEED_ROLLBACK_DECL +DBMS_DEFERGEN_AUDIT.MK_NEG_IFCLAUSE +DBMS_DEFERGEN_AUDIT.MK_POS_IFCLAUSE +DBMS_DEFERGEN_AUDIT.MK_PROC_ARG +DBMS_DEFERGEN_AUDIT.MK_PROC_DECL +DBMS_DEFERGEN_AUDIT.MK_REP_DELETE +DBMS_DEFERGEN_AUDIT.MK_REP_INSERT +DBMS_DEFERGEN_AUDIT.MK_REP_UPDATE +DBMS_DEFERGEN_AUDIT.MK_ROLLBACK +DBMS_DEFERGEN_AUDIT.MK_SPEC_CONTENT +DBMS_DEFERGEN_AUDIT.MK_TP_BODY_CONTENT_ASYNC +DBMS_DEFERGEN_AUDIT.MK_TP_BODY_CONTENT_SYNC +DBMS_DEFERGEN_AUDIT.MK_TRIGGER_BODY +DBMS_DEFERGEN_AUDIT.MK_TRIGGER_CONTENT +DBMS_DEFERGEN_AUDIT.MK_TRIGGER_DECL +DBMS_DEFERGEN_AUDIT.MK_UPDATE_ROLLBACK +DBMS_DEFERGEN_AUDIT.MK_VAR_DECL +DBMS_DEFERGEN_AUDIT.MK_WHERETEXT +DBMS_DEFERGEN_AUDIT.POPULATE_GLOBAL_RECORDS +DBMS_DEFERGEN_INTERNAL. +DBMS_DEFERGEN_INTERNAL.GET_COLUMN +DBMS_DEFERGEN_INTERNAL.GET_COL_INFO +DBMS_DEFERGEN_INTERNAL.GET_SNAPSHOT_TNAME +DBMS_DEFERGEN_INTERNAL.IP_MK_BODY_CONTENT +DBMS_DEFERGEN_INTERNAL.IS_SNAPSHOT +DBMS_DEFERGEN_INTERNAL.MK_BODY_CONTENT +DBMS_DEFERGEN_INTERNAL.MK_SPEC_CONTENT +DBMS_DEFERGEN_INTERNAL.MK_TP_BODY_CONTENT +DBMS_DEFERGEN_INTERNAL.MK_TP_SPEC_CONTENT +DBMS_DEFERGEN_INTERNAL.MK_TRIGGER_CONTENT +DBMS_DEFERGEN_INTERNAL.WRAP_PACKAGE_BODY +DBMS_DEFERGEN_INTERNAL.WRAP_PACKAGE_SPEC +DBMS_DEFERGEN_INTERNAL.WRAP_TRIGGER_CONTENT +DBMS_DEFERGEN_LOB. +DBMS_DEFERGEN_LOB.GET_LOB_INDICES +DBMS_DEFERGEN_LOB.GET_PKEY_INDICES +DBMS_DEFERGEN_LOB.IP_MK_PACKAGE_BODY +DBMS_DEFERGEN_LOB.MK_PACKAGE_BODY +DBMS_DEFERGEN_LOB.MK_PACKAGE_SPEC +DBMS_DEFERGEN_PRIORITY. +DBMS_DEFERGEN_PRIORITY.MK_BODY_CONTENT +DBMS_DEFERGEN_PRIORITY.MK_SPEC_CONTENT +DBMS_DEFERGEN_RESOLUTION. +DBMS_DEFERGEN_RESOLUTION.MK_BODY_CONTENT +DBMS_DEFERGEN_RESOLUTION.MK_SPEC_CONTENT +DBMS_DEFERGEN_UTIL. +DBMS_DEFERGEN_UTIL.APPEND_CHARS +DBMS_DEFERGEN_UTIL.BASE_TYPE +DBMS_DEFERGEN_UTIL.BINARY_SEARCH +DBMS_DEFERGEN_UTIL.COPY_OUTTAB +DBMS_DEFERGEN_UTIL.COUNT_PLSQL_TABLE +DBMS_DEFERGEN_UTIL.DEFAULT_OUTPUT_TABLE +DBMS_DEFERGEN_UTIL.GET_INITAB +DBMS_DEFERGEN_UTIL.INITIALIZE_OUTTAB +DBMS_DEFERGEN_UTIL.IP_GEN_ARG +DBMS_DEFERGEN_UTIL.IP_GEN_CALL +DBMS_DEFERGEN_UTIL.IS_NULLABLE +DBMS_DEFERGEN_UTIL.MK_NAME +DBMS_DEFERGEN_UTIL.NLS_SUBSTR +DBMS_DEFERGEN_UTIL.OUTPUT +DBMS_DEFERGEN_UTIL.PUT_OUTTAB +DBMS_DEFERGEN_UTIL.PUT_OUTTAB_HEAD +DBMS_DEFERGEN_UTIL.PUT_THREE_OUTTAB_HEAD +DBMS_DEFERGEN_UTIL.QUOTE_MIXED_CASE +DBMS_DEFERGEN_UTIL.RTRIM_CHARS +DBMS_DEFERGEN_WRAP. +DBMS_DEFERGEN_WRAP.ANY_CHAR_INFO +DBMS_DEFERGEN_WRAP.GET_ARGUMENT +DBMS_DEFERGEN_WRAP.MK_WRAPPER_BODY +DBMS_DEFERGEN_WRAP.MK_WRAPPER_PROCEDURE +DBMS_DEFERGEN_WRAP.MK_WRAPPER_SPEC +DBMS_DEFER_ENQ_UTL. +DBMS_DEFER_ENQ_UTL.ANYDATA_ARG +DBMS_DEFER_ENQ_UTL.BLOB_ARG +DBMS_DEFER_ENQ_UTL.CHAR_ARG +DBMS_DEFER_ENQ_UTL.CLOB_ARG +DBMS_DEFER_ENQ_UTL.DATE_ARG +DBMS_DEFER_ENQ_UTL.ENQUE_CALL +DBMS_DEFER_ENQ_UTL.ENQUE_CALL_INTERNAL +DBMS_DEFER_ENQ_UTL.GET_GLOBAL_ID +DBMS_DEFER_ENQ_UTL.GET_LAST_CALL_NO +DBMS_DEFER_ENQ_UTL.IDS_ARG +DBMS_DEFER_ENQ_UTL.IYM_ARG +DBMS_DEFER_ENQ_UTL.NUMBER_ARG +DBMS_DEFER_ENQ_UTL.RAW_ARG +DBMS_DEFER_ENQ_UTL.REQUIRE_A_ROLLBACK +DBMS_DEFER_ENQ_UTL.RESET_TRAN_ID +DBMS_DEFER_ENQ_UTL.ROWID_ARG +DBMS_DEFER_ENQ_UTL.TIMESTAMP_ARG +DBMS_DEFER_ENQ_UTL.TIME_ARG +DBMS_DEFER_ENQ_UTL.TSLTZ_ARG +DBMS_DEFER_ENQ_UTL.TSTZ_ARG +DBMS_DEFER_ENQ_UTL.TTZ_ARG +DBMS_DEFER_ENQ_UTL.VARCHAR2_ARG +DBMS_DEFER_IMPORT_INTERNAL. +DBMS_DEFER_IMPORT_INTERNAL.DROP_PROPAGATOR_CASCADE +DBMS_DEFER_IMPORT_INTERNAL.QUEUE_EXPORT_CHECK +DBMS_DEFER_IMPORT_INTERNAL.QUEUE_IMPORT_CHECK +DBMS_DEFER_INTERNAL_QUERY. +DBMS_DEFER_INTERNAL_QUERY.GET_CALL_ARGS +DBMS_DEFER_INTERNAL_SYS. +DBMS_DEFER_INTERNAL_SYS.DELETE_TRAN_INNER +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_BLOB +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_CHAR +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_CLOB +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_DATE +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_IDS +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_IYM +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_NCHAR +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_NCLOB +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_NUM +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_NVARCHAR2 +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_RAW +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_ROWID +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TIME +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TIMESTAMP +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TSLTZ +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TSTZ +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TTZ +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_VARCHAR2 +DBMS_DEFER_INTERNAL_SYS.ERROR_CALL +DBMS_DEFER_INTERNAL_SYS.ERROR_END_TRAN +DBMS_DEFER_INTERNAL_SYS.ERROR_TRAN +DBMS_DEFER_INTERNAL_SYS.GET_NEXT_TXN_LOG_RUN +DBMS_DEFER_INTERNAL_SYS.GET_TXN_LOG_RUNS +DBMS_DEFER_INTERNAL_SYS.INTERNAL_ERROR_END_TRAN +DBMS_DEFER_INTERNAL_SYS.PARALLEL_PUSH_RECOVERY +DBMS_DEFER_INTERNAL_SYS.PING +DBMS_DEFER_INTERNAL_SYS.PURGE_TRANSACTION_LOG +DBMS_DEFER_INTERNAL_SYS.RECORD_TRANSACTION +DBMS_DEFER_INTERNAL_SYS.REGISTER_PROPAGATOR +DBMS_DEFER_QUERY. +DBMS_DEFER_QUERY.GET_ANYDATA_ARG +DBMS_DEFER_QUERY.GET_ARG_CSETID +DBMS_DEFER_QUERY.GET_ARG_FORM +DBMS_DEFER_QUERY.GET_ARG_TYPE +DBMS_DEFER_QUERY.GET_BLOB_ARG +DBMS_DEFER_QUERY.GET_CALL_ARGS +DBMS_DEFER_QUERY.GET_CHAR_ARG +DBMS_DEFER_QUERY.GET_CLOB_ARG +DBMS_DEFER_QUERY.GET_DATE_ARG +DBMS_DEFER_QUERY.GET_IDS_ARG +DBMS_DEFER_QUERY.GET_IYM_ARG +DBMS_DEFER_QUERY.GET_NCHAR_ARG +DBMS_DEFER_QUERY.GET_NCLOB_ARG +DBMS_DEFER_QUERY.GET_NUMBER_ARG +DBMS_DEFER_QUERY.GET_NVARCHAR2_ARG +DBMS_DEFER_QUERY.GET_OBJECT_NULL_VECTOR_ARG +DBMS_DEFER_QUERY.GET_RAW_ARG +DBMS_DEFER_QUERY.GET_ROWID_ARG +DBMS_DEFER_QUERY.GET_TIMESTAMP_ARG +DBMS_DEFER_QUERY.GET_TIME_ARG +DBMS_DEFER_QUERY.GET_TSLTZ_ARG +DBMS_DEFER_QUERY.GET_TSTZ_ARG +DBMS_DEFER_QUERY.GET_TTZ_ARG +DBMS_DEFER_QUERY.GET_VARCHAR2_ARG +DBMS_DEFER_QUERY_UTL. +DBMS_DEFER_QUERY_UTL.CACHE_ARGUMENTS +DBMS_DEFER_QUERY_UTL.COPY_TO_TEMPORARY_LOB +DBMS_DEFER_QUERY_UTL.CREATE_TEMPORARY_LOB +DBMS_DEFER_QUERY_UTL.DESTROY_TEMPORARY_LOB +DBMS_DEFER_QUERY_UTL.EXTRACT_VARCHAR2 +DBMS_DEFER_QUERY_UTL.GET_ANYDATA_ARG +DBMS_DEFER_QUERY_UTL.GET_ARG_CSETID +DBMS_DEFER_QUERY_UTL.GET_ARG_FORM +DBMS_DEFER_QUERY_UTL.GET_ARG_TYPE +DBMS_DEFER_QUERY_UTL.GET_BLOB_ARG +DBMS_DEFER_QUERY_UTL.GET_CACHE_STATUS +DBMS_DEFER_QUERY_UTL.GET_CHAR_ARG +DBMS_DEFER_QUERY_UTL.GET_CLOB_ARG +DBMS_DEFER_QUERY_UTL.GET_DATE_ARG +DBMS_DEFER_QUERY_UTL.GET_IDS_ARG +DBMS_DEFER_QUERY_UTL.GET_INTERNAL_DISABLED +DBMS_DEFER_QUERY_UTL.GET_IYM_ARG +DBMS_DEFER_QUERY_UTL.GET_NCHAR_ARG +DBMS_DEFER_QUERY_UTL.GET_NCLOB_ARG +DBMS_DEFER_QUERY_UTL.GET_NUMBER_ARG +DBMS_DEFER_QUERY_UTL.GET_NVARCHAR2_ARG +DBMS_DEFER_QUERY_UTL.GET_OBJECT_NULL_VECTOR_ARG +DBMS_DEFER_QUERY_UTL.GET_PROP_WAS_ENABLED +DBMS_DEFER_QUERY_UTL.GET_RAW_ARG +DBMS_DEFER_QUERY_UTL.GET_ROWID_ARG +DBMS_DEFER_QUERY_UTL.GET_TIMESTAMP_ARG +DBMS_DEFER_QUERY_UTL.GET_TIME_ARG +DBMS_DEFER_QUERY_UTL.GET_TSLTZ_ARG +DBMS_DEFER_QUERY_UTL.GET_TSTZ_ARG +DBMS_DEFER_QUERY_UTL.GET_TTZ_ARG +DBMS_DEFER_QUERY_UTL.GET_VARCHAR2_ARG +DBMS_DEFER_QUERY_UTL.KEY_TO_PACKAGE_NAME +DBMS_DEFER_QUERY_UTL.KEY_TO_SCHEMA_NAME +DBMS_DEFER_QUERY_UTL.PACKAGE_NAME +DBMS_DEFER_QUERY_UTL.PROCEDURE_NAME +DBMS_DEFER_QUERY_UTL.SCHEMA_NAME +DBMS_DEFER_QUERY_UTL.SET_DISABLED +DBMS_DEFER_QUERY_UTL.SET_INTERNAL_DISABLED +DBMS_DEFER_QUERY_UTL.SET_PROP_WAS_ENABLED +DBMS_DEFER_QUERY_UTL.WAS_INTERNALLY_DISABLED +DBMS_DEFER_REPCAT. +DBMS_DEFER_REPCAT.CAUGHT_UP +DBMS_DEFER_REPCAT.DISABLE_ALL_MASTER_PROPAGATION +DBMS_DEFER_REPCAT.DISABLE_PURGE +DBMS_DEFER_REPCAT.DROP_WRAPPERS +DBMS_DEFER_REPCAT.ENABLE_PROPAGATION_TO_DBLINK +DBMS_DEFER_REPCAT.GENERATE_EXPORT_SCN +DBMS_DEFER_REPCAT.GET_LOCK +DBMS_DEFER_REPCAT.GET_LOCK_WHEN_CLEAN +DBMS_DEFER_REPCAT.MERGE_DESTINATION +DBMS_DEFER_REPCAT.PURGE_EXTENSION_REQUEST +DBMS_DEFER_REPCAT.QUIESCE +DBMS_DEFER_REPCAT.RELEASE_LOCK +DBMS_DEFER_REPCAT.RESTORE_PURGE +DBMS_DEFER_REPCAT.RESUME +DBMS_DEFER_SYS. +DBMS_DEFER_SYS.ADD_DEFAULT_DEST +DBMS_DEFER_SYS.CLEAR_PROP_STATISTICS +DBMS_DEFER_SYS.DELETE_DEFAULT_DEST +DBMS_DEFER_SYS.DELETE_DEF_DESTINATION +DBMS_DEFER_SYS.DELETE_ERROR +DBMS_DEFER_SYS.DELETE_TRAN +DBMS_DEFER_SYS.DISABLED +DBMS_DEFER_SYS.EXCLUDE_PUSH +DBMS_DEFER_SYS.EXECUTE +DBMS_DEFER_SYS.EXECUTE_ERROR +DBMS_DEFER_SYS.EXECUTE_ERROR_AS_USER +DBMS_DEFER_SYS.EXECUTE_ERROR_CALL +DBMS_DEFER_SYS.EXECUTE_ERROR_CALL_AS_USER +DBMS_DEFER_SYS.NULLIFY_ALL_TRANS +DBMS_DEFER_SYS.NULLIFY_TRANS_TO_DESTINATION +DBMS_DEFER_SYS.PURGE +DBMS_DEFER_SYS.PUSH +DBMS_DEFER_SYS.PUSH_WITH_CATCHUP +DBMS_DEFER_SYS.REGISTER_PROPAGATOR +DBMS_DEFER_SYS.SCHEDULE_EXECUTION +DBMS_DEFER_SYS.SCHEDULE_PURGE +DBMS_DEFER_SYS.SCHEDULE_PUSH +DBMS_DEFER_SYS.SET_DISABLED +DBMS_DEFER_SYS.UNREGISTER_PROPAGATOR +DBMS_DEFER_SYS.UNSCHEDULE_EXECUTION +DBMS_DEFER_SYS.UNSCHEDULE_PURGE +DBMS_DEFER_SYS.UNSCHEDULE_PUSH +DBMS_DEFER_SYS_PART1. +DBMS_DEFER_SYS_PART1.ADD_DESTINATION +DBMS_DEFER_SYS_PART1.CONVERT_TO_D +DBMS_DEFER_SYS_PART1.DELETE_CALL_REC +DBMS_DEFER_SYS_PART1.DISABLED +DBMS_DEFER_SYS_PART1.EXECUTE_ERROR_CALL_INTERNAL +DBMS_DEFER_SYS_PART1.EXECUTE_ERROR_TXN +DBMS_DEFER_SYS_PART1.SET_DISABLED +DBMS_DEFER_SYS_PART1.UPDATE_SCHEDULE +DBMS_DESCRIBE. +DBMS_DESCRIBE.DESCRIBE_PROCEDURE +DBMS_DG. +DBMS_DG.INITIATE_FS_FAILOVER +DBMS_DIMENSION. +DBMS_DIMENSION.DESCRIBE_DIMENSION +DBMS_DIMENSION.VALIDATE_DIMENSION +DBMS_DISTRIBUTED_TRUST_ADMIN. +DBMS_DISTRIBUTED_TRUST_ADMIN.ALLOW_ALL +DBMS_DISTRIBUTED_TRUST_ADMIN.ALLOW_SERVER +DBMS_DISTRIBUTED_TRUST_ADMIN.DENY_ALL +DBMS_DISTRIBUTED_TRUST_ADMIN.DENY_SERVER +DBMS_DM_EXP_INTERNAL. +DBMS_DM_EXP_INTERNAL.DELETE_FROM_TEMP +DBMS_DM_EXP_INTERNAL.DO_TEMP_TABLE +DBMS_DM_EXP_INTERNAL.DUMP_STATUS +DBMS_DM_EXP_INTERNAL.EXP_MODEL +DBMS_DM_EXP_INTERNAL.GET_CUR_JOB_ID +DBMS_DM_EXP_INTERNAL.GET_DM_JOB_INFO +DBMS_DM_EXP_INTERNAL.GET_LIST_MODELS +DBMS_DM_EXP_INTERNAL.GET_TRACE +DBMS_DM_EXP_INTERNAL.IMP_MODEL +DBMS_DM_EXP_INTERNAL.INIT_DM_JOB_ID +DBMS_DM_EXP_INTERNAL.INSERT_LIST_MODELS +DBMS_DM_EXP_INTERNAL.SET_CUR_JOB_ID +DBMS_DM_EXP_INTERNAL.SET_TRACE +DBMS_DM_IMP_INTERNAL. +DBMS_DM_IMP_INTERNAL.REGISTER_TEMP_TABLE +DBMS_DM_IMP_INTERNAL.UNREGIST_TEMP_TABLE +DBMS_DM_MODEL_EXP. +DBMS_DM_MODEL_EXP.INSTANCE_INFO_EXP +DBMS_DM_MODEL_EXP.SCHEMA_CALLOUT +DBMS_DM_MODEL_EXP.SCHEMA_INFO_EXP +DBMS_DM_MODEL_IMP. +DBMS_DM_MODEL_IMP.ADD_TABLE +DBMS_DM_MODEL_IMP.CREATE_MODEL +DBMS_DM_MODEL_IMP.PERSIST_MODEL +DBMS_DM_UTIL. +DBMS_DM_UTIL.ASSERT +DBMS_DM_UTIL.BIC +DBMS_DM_UTIL.BIF +DBMS_DM_UTIL.BIS +DBMS_DM_UTIL.BIT +DBMS_DM_UTIL.DISPLAY_MSG +DBMS_DM_UTIL.DUMP_MSG +DBMS_DM_UTIL.USER_TABLE_EXISTS +DBMS_DM_UTIL_INTERNAL. +DBMS_DM_UTIL_INTERNAL.DUMP_DM_TRACE +DBMS_DNFS. +DBMS_DNFS.CLONEDB_RENAMEFILE +DBMS_DRS. +DBMS_DRS.CANCEL_REQUEST +DBMS_DRS.DELETE_REQUEST +DBMS_DRS.DG_BROKER_INFO +DBMS_DRS.DO_CONTROL +DBMS_DRS.DO_CONTROL_RAW +DBMS_DRS.DUMP_META +DBMS_DRS.FS_FAILOVER_FOR_HC_COND +DBMS_DRS.GET_PROPERTY +DBMS_DRS.GET_PROPERTY_OBJ +DBMS_DRS.GET_RESPONSE +DBMS_DRS.GET_RESPONSE_RAW +DBMS_DRS.INITIATE_FS_FAILOVER +DBMS_DRS.PING +DBMS_DRS.READYTOFAILOVER +DBMS_DRS.SLEEP +DBMS_DRS.STATECHANGERECORDED +DBMS_DST. +DBMS_DST.BEGIN_PREPARE +DBMS_DST.BEGIN_UPGRADE +DBMS_DST.CREATE_AFFECTED_TABLE +DBMS_DST.CREATE_ERROR_TABLE +DBMS_DST.CREATE_TRIGGER_TABLE +DBMS_DST.END_PREPARE +DBMS_DST.END_UPGRADE +DBMS_DST.FIND_AFFECTED_TABLES +DBMS_DST.LOAD_SECONDARY +DBMS_DST.UNLOAD_SECONDARY +DBMS_DST.UPGRADE_DATABASE +DBMS_DST.UPGRADE_SCHEMA +DBMS_DST.UPGRADE_TABLE +DBMS_EDITIONS_UTILITIES. +DBMS_EDITIONS_UTILITIES.SET_EDITIONING_VIEWS_READ_ONLY +DBMS_EPG. +DBMS_EPG.AUTHORIZE_DAD +DBMS_EPG.CREATE_DAD +DBMS_EPG.DEAUTHORIZE_DAD +DBMS_EPG.DELETE_DAD_ATTRIBUTE +DBMS_EPG.DELETE_GLOBAL_ATTRIBUTE +DBMS_EPG.DROP_DAD +DBMS_EPG.GET_ALL_DAD_ATTRIBUTES +DBMS_EPG.GET_ALL_DAD_MAPPINGS +DBMS_EPG.GET_ALL_GLOBAL_ATTRIBUTES +DBMS_EPG.GET_DAD_ATTRIBUTE +DBMS_EPG.GET_DAD_LIST +DBMS_EPG.GET_GLOBAL_ATTRIBUTE +DBMS_EPG.MAP_DAD +DBMS_EPG.SET_DAD_ATTRIBUTE +DBMS_EPG.SET_GLOBAL_ATTRIBUTE +DBMS_EPG.UNMAP_DAD +DBMS_ERRLOG. +DBMS_ERRLOG.CREATE_ERROR_LOG +DBMS_EXPFIL. +DBMS_EXPFIL.ADD_ELEMENTARY_ATTRIBUTE +DBMS_EXPFIL.ADD_FUNCTIONS +DBMS_EXPFIL.ASSIGN_ATTRIBUTE_SET +DBMS_EXPFIL.BUILD_EXCEPTIONS_TABLE +DBMS_EXPFIL.CLEAR_EXPRSET_STATS +DBMS_EXPFIL.COPY_ATTRIBUTE_SET +DBMS_EXPFIL.CREATE_ATTRIBUTE_SET +DBMS_EXPFIL.DEFAULT_INDEX_PARAMETERS +DBMS_EXPFIL.DEFAULT_XPINDEX_PARAMETERS +DBMS_EXPFIL.DEFRAG_INDEX +DBMS_EXPFIL.DROP_ATTRIBUTE_SET +DBMS_EXPFIL.GET_EXPRSET_STATS +DBMS_EXPFIL.GRANT_PRIVILEGE +DBMS_EXPFIL.INDEX_PARAMETERS +DBMS_EXPFIL.MODIFY_OPERATOR_LIST +DBMS_EXPFIL.REVOKE_PRIVILEGE +DBMS_EXPFIL.SYNC_TEXT_INDEXES +DBMS_EXPFIL.UNASSIGN_ATTRIBUTE_SET +DBMS_EXPFIL.VALIDATE_EXPRESSIONS +DBMS_EXPFIL.XPINDEX_PARAMETERS +DBMS_EXPFIL_DEPASEXP. +DBMS_EXPFIL_DEPASEXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_EXPFIL_DEPASEXP.INSTANCE_INFO_EXP +DBMS_EXPFIL_DEPASEXP.SCHEMA_INFO_EXP +DBMS_EXPFIL_DEPASEXP.SYSTEM_INFO_EXP +DBMS_EXPFIL_DR. +DBMS_EXPFIL_DR.ADD_ELEMENTARY_ATTRIBUTE +DBMS_EXPFIL_DR.ADD_FUNCTIONS +DBMS_EXPFIL_DR.ADD_STRDATTR_DEFIPAR +DBMS_EXPFIL_DR.ADD_STRDATTR_ESETIPAR +DBMS_EXPFIL_DR.ADD_XML_TAG +DBMS_EXPFIL_DR.ASSIGN_ATTRIBUTE_SET +DBMS_EXPFIL_DR.ATTRSET_EXISTS +DBMS_EXPFIL_DR.CLEAN_PQUERY_PLAN +DBMS_EXPFIL_DR.CLEAR_EXPRSET_STATS +DBMS_EXPFIL_DR.COPY_ATTRIBUTE_SET +DBMS_EXPFIL_DR.CREATE_ATTRIBUTE_SET +DBMS_EXPFIL_DR.CREATE_INDEX_INSTANCE +DBMS_EXPFIL_DR.CREATE_PRIV_TRIGGER +DBMS_EXPFIL_DR.DELETE_ATTRIBUTE +DBMS_EXPFIL_DR.DELETE_INDEX_INSTANCE +DBMS_EXPFIL_DR.DERIVE_PREDTAB_ATTRIBUTES +DBMS_EXPFIL_DR.DROP_ATTRIBUTE_SET +DBMS_EXPFIL_DR.DROP_STRDATTR_DEFIPAR +DBMS_EXPFIL_DR.DROP_STRDATTR_ESETIPAR +DBMS_EXPFIL_DR.DROP_XMLTAG_DEFIPAR +DBMS_EXPFIL_DR.DROP_XMLTAG_ESETIPAR +DBMS_EXPFIL_DR.FIX_DEFIDXATTR_DATATYPE +DBMS_EXPFIL_DR.GET_ASET_OF_ESET_CQ +DBMS_EXPFIL_DR.GET_DML_CALLER +DBMS_EXPFIL_DR.GET_EFINDEX_NUMBER +DBMS_EXPFIL_DR.GET_ELEM_ATTRLIST +DBMS_EXPFIL_DR.GET_EXFVERSION +DBMS_EXPFIL_DR.GET_EXPRSET_STATS +DBMS_EXPFIL_DR.GET_INDEX_STATUS +DBMS_EXPFIL_DR.GET_PREDTAB_COMPL_ATTRLST +DBMS_EXPFIL_DR.GET_PTAB_STGCLS +DBMS_EXPFIL_DR.GET_SECONDARY_OBJECTS +DBMS_EXPFIL_DR.GET_TEXTPREF_4ATTR +DBMS_EXPFIL_DR.GET_TYPED_TABLE_NAME +DBMS_EXPFIL_DR.GRANT_PRIVILEGE +DBMS_EXPFIL_DR.INSERT_INDEX_ATTRIBUTE +DBMS_EXPFIL_DR.INSERT_NEW_ATTRIBUTE +DBMS_EXPFIL_DR.IS_TEXT_ATTRIBUTE +DBMS_EXPFIL_DR.JAVA_ERROR +DBMS_EXPFIL_DR.MODIFY_FUNCOBJ_TYPE +DBMS_EXPFIL_DR.MODIFY_OPERATOR_LIST +DBMS_EXPFIL_DR.PATCH_ACCESS_FUNCNM +DBMS_EXPFIL_DR.POST_GET_PQPLAN +DBMS_EXPFIL_DR.PRE_GET_PQPLAN +DBMS_EXPFIL_DR.RAISE_ERROR +DBMS_EXPFIL_DR.RECORD_PREDTAB_QUERY +DBMS_EXPFIL_DR.RENAME_INDEX +DBMS_EXPFIL_DR.RENAME_TABLE_MAINT +DBMS_EXPFIL_DR.RESET_ESETIPAR_DEFAULT +DBMS_EXPFIL_DR.REVOKE_PRIVILEGE +DBMS_EXPFIL_DR.SET_EXACT_PREDTAB_ATTRS +DBMS_EXPFIL_DR.SET_INDEX_STATUS +DBMS_EXPFIL_DR.SET_PREDTAB_COMPL_ATTR +DBMS_EXPFIL_DR.SET_TABLE_ALIAS_ATTR +DBMS_EXPFIL_DR.SET_TEXTPREF_4ATTR +DBMS_EXPFIL_DR.SET_TYPED_TABLE_NAME +DBMS_EXPFIL_DR.SET_UNQPREDTAB_NAME +DBMS_EXPFIL_DR.UNASSIGN_ATTRIBUTE_SET +DBMS_EXPFIL_DR.UPDATE_PREDATTR_TYPE +DBMS_EXPFIL_DR.VALIDATEDYNEXPR +DBMS_EXPFIL_DR.VALIDATED_ITEM +DBMS_EXPFIL_EXP. +DBMS_EXPFIL_EXP.DUMP_ASET_IN_STAGES +DBMS_EXPFIL_EXP.EXPORT_ATTRIBUTE_SET +DBMS_EXPFIL_EXP.EXPORT_EFIDX_ASETASSOC +DBMS_EXPFIL_EXP.EXPORT_INDEX_METADATA +DBMS_EXPFIL_EXP.POST_EXPTABLE_DUMP +DBMS_EXPFIL_EXP.POST_SCHEMA_ASETS_DUMP +DBMS_EXPFIL_EXP.PRE_EXPTABLE_DUMP +DBMS_EXPFIL_IR. +DBMS_EXPFIL_IR.ADD_EMBEDADT_FUNCTIONS +DBMS_EXPFIL_IR.CHECK_AMBIGUOUS_ATTRIBUTES +DBMS_EXPFIL_IR.CREATE_ACCESS_FUNCTION +DBMS_EXPFIL_IR.CREATE_AS_TYPEDTABLE +DBMS_EXPFIL_IR.CREATE_ATTRSET_FUNCTIONS +DBMS_EXPFIL_IR.CREATE_BITMAP_INDEXES +DBMS_EXPFIL_IR.CREATE_PREDICATE_TABLE +DBMS_EXPFIL_IR.EVALUATE_GIVEN_EXPRESSION +DBMS_EXPFIL_IR.FIX_NULL_ATTRIBUTE_VALUES +DBMS_EXPFIL_IR.GET_OBJECT_OWNER_N_NAME +DBMS_EXPFIL_IR.GET_PQQUERY_EXECPLAN +DBMS_EXPFIL_IR.INDEX_PARAMS_MAINT +DBMS_EXPFIL_IR.IS_VALID_ATTSET +DBMS_EXPFIL_IR.IS_VALID_COMPLEX_ATTRIBUTE +DBMS_EXPFIL_IR.POPULATE_PREDICATE_TABLE +DBMS_EXPFIL_IR.RENAME_TABLE_MAINT +DBMS_EXPFIL_IR.TRANSFORM_SUBEXP +DBMS_EXPFIL_IR.VALIDATE_IDXSTRDATTRS +DBMS_EXPFIL_IR.VALIDATE_PRED_ATTRIBUTES +DBMS_EXPFIL_IR.VALIDATE_UDFS +DBMS_EXPFIL_IR.XPINDEX_PARAMS_MAINT +DBMS_EXPFIL_UTL. +DBMS_EXPFIL_UTL.ATTRSET_EXISTS_IN_SCH +DBMS_EXPFIL_UTL.CTX_CONTAINS +DBMS_EXPFIL_UTL.ERROR_OUT +DBMS_EXPFIL_UTL.EVALUATE_EXPRESSION +DBMS_EXPFIL_UTL.GET_COLL_TYPE_NAME +DBMS_EXPFIL_UTL.GET_DBVERSION +DBMS_EXPFIL_UTL.GET_EXFVERSION +DBMS_EXPFIL_UTL.IS_TYPEOID_MATCH +DBMS_EXPFIL_UTL.PREDTAB_QUERY_HINT +DBMS_EXPFIL_UTL.SET_PARAMETER +DBMS_EXPFIL_UTL.VALIDATE_DEXPR +DBMS_EXPFIL_UTL.VALIDATE_DITEM +DBMS_EXPFIL_UTL.VALIDATE_EXPR +DBMS_EXPORT_EXTENSION. +DBMS_EXPORT_EXTENSION.BEGIN_IMPORT_DOMAIN_INDEX +DBMS_EXPORT_EXTENSION.CHECK_MATCH_TEMPLATE +DBMS_EXPORT_EXTENSION.FUNC_INDEX_DEFAULT +DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_METADATA +DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES +DBMS_EXPORT_EXTENSION.GET_OBJECT_COMMENT +DBMS_EXPORT_EXTENSION.GET_OBJECT_SOURCE +DBMS_EXPORT_EXTENSION.GET_V2_DOMAIN_INDEX_TABLES +DBMS_EXPORT_EXTENSION.INSERT_SECOBJ +DBMS_EXPORT_EXTENSION.NULLTOCHR0 +DBMS_EXPORT_EXTENSION.POST_TABLES +DBMS_EXPORT_EXTENSION.PRE_TABLE +DBMS_EXPORT_EXTENSION.RESET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION.RESET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION.RESET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION.SET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION.SET_EXP_SORTSIZE +DBMS_EXPORT_EXTENSION.SET_EXP_TIMEZONE +DBMS_EXPORT_EXTENSION.SET_HAKAN_EVENT +DBMS_EXPORT_EXTENSION.SET_IMP_EVENTS +DBMS_EXPORT_EXTENSION.SET_IMP_SKIP_INDEXES_OFF +DBMS_EXPORT_EXTENSION.SET_IMP_SKIP_INDEXES_ON +DBMS_EXPORT_EXTENSION.SET_IMP_TIMEZONE +DBMS_EXPORT_EXTENSION.SET_IOT_EVENT +DBMS_EXPORT_EXTENSION.SET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION.SET_NO_OUTLINES +DBMS_EXPORT_EXTENSION.SET_RESUM +DBMS_EXPORT_EXTENSION.SET_RESUMNAM +DBMS_EXPORT_EXTENSION.SET_RESUMNAMTIM +DBMS_EXPORT_EXTENSION.SET_RESUMTIM +DBMS_EXPORT_EXTENSION.SET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION.SET_STATSON +DBMS_EXTENDED_TTS_CHECKS. +DBMS_EXTENDED_TTS_CHECKS.CHECK_CSX_CLOSURE +DBMS_EXTENDED_TTS_CHECKS.GET_CHILD_NESTED_TABLES +DBMS_EXTENDED_TTS_CHECKS.GET_DOMAIN_INDEX_SECOBJ +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_IND +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_INDPART +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_INDSUBPART +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_TAB +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_TABPART +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_TABSUBPART +DBMS_EXTENDED_TTS_CHECKS.OBJECTLIST_CONTAINED +DBMS_EXTENDED_TTS_CHECKS.VERIFY_EXTENSIBLE +DBMS_EXTENDED_TTS_CHECKS.VERIFY_MV +DBMS_EXTENDED_TTS_CHECKS.VERIFY_NT +DBMS_EXTENDED_TTS_CHECKS.VERIFY_XMLSCHEMA +DBMS_FBT. +DBMS_FBT.FBT_ANALYZE +DBMS_FBT.FBT_DISCARD +DBMS_FBT.FBT_EXECUTE +DBMS_FEATURE_APEX. +DBMS_FEATURE_ASM. +DBMS_FEATURE_AUM. +DBMS_FEATURE_AUTOSTA. +DBMS_FEATURE_AUTO_MEM. +DBMS_FEATURE_AUTO_SGA. +DBMS_FEATURE_AUTO_SSM. +DBMS_FEATURE_AWR. +DBMS_FEATURE_CDC. +DBMS_FEATURE_DATABASE_VAULT. +DBMS_FEATURE_DATA_GUARD. +DBMS_FEATURE_DEFERRED_SEG_CRT. +DBMS_FEATURE_DYN_SGA. +DBMS_FEATURE_EXADATA. +DBMS_FEATURE_EXTENSIBILITY. +DBMS_FEATURE_HCC. +DBMS_FEATURE_JOB_SCHEDULER. +DBMS_FEATURE_LMT. +DBMS_FEATURE_OBJECT. +DBMS_FEATURE_PARTITION_SYSTEM. +DBMS_FEATURE_PARTITION_USER. +DBMS_FEATURE_PLSQL_NATIVE. +DBMS_FEATURE_RAC. +DBMS_FEATURE_REGISTER_ALLFEAT. +DBMS_FEATURE_REGISTER_ALLHWM. +DBMS_FEATURE_RESOURCE_MANAGER. +DBMS_FEATURE_RMAN_BASIC. +DBMS_FEATURE_RMAN_BZIP2. +DBMS_FEATURE_RMAN_HIGH. +DBMS_FEATURE_RMAN_LOW. +DBMS_FEATURE_RMAN_MEDIUM. +DBMS_FEATURE_RMAN_ZLIB. +DBMS_FEATURE_RULESMANAGER. +DBMS_FEATURE_SECUREFILES_SYS. +DBMS_FEATURE_SECUREFILES_USR. +DBMS_FEATURE_SEGADV_USER. +DBMS_FEATURE_SERVICES. +DBMS_FEATURE_SFCOMPRESS_SYS. +DBMS_FEATURE_SFCOMPRESS_USR. +DBMS_FEATURE_SFDEDUP_SYS. +DBMS_FEATURE_SFDEDUP_USR. +DBMS_FEATURE_SFENCRYPT_SYS. +DBMS_FEATURE_SFENCRYPT_USR. +DBMS_FEATURE_TEST_PROC_1. +DBMS_FEATURE_TEST_PROC_2. +DBMS_FEATURE_TEST_PROC_3. +DBMS_FEATURE_TEST_PROC_4. +DBMS_FEATURE_TEST_PROC_5. +DBMS_FEATURE_USAGE. +DBMS_FEATURE_USAGE.REGISTER_DB_FEATURE +DBMS_FEATURE_USAGE.REGISTER_HIGH_WATER_MARK +DBMS_FEATURE_USAGE_INTERNAL. +DBMS_FEATURE_USAGE_INTERNAL.CLEANUP_DATABASE +DBMS_FEATURE_USAGE_INTERNAL.EXEC_DB_USAGE_SAMPLING +DBMS_FEATURE_USAGE_INTERNAL.SAMPLE_ONE_FEATURE +DBMS_FEATURE_USAGE_INTERNAL.SAMPLE_ONE_HWM +DBMS_FEATURE_USAGE_REPORT. +DBMS_FEATURE_USAGE_REPORT.DISPLAY_HTML +DBMS_FEATURE_USAGE_REPORT.DISPLAY_TEXT +DBMS_FEATURE_USER_MVS. +DBMS_FEATURE_UTILITIES1. +DBMS_FEATURE_UTILITIES2. +DBMS_FEATURE_UTILITIES3. +DBMS_FEATURE_UTILITIES4. +DBMS_FEATURE_WCR_CAPTURE. +DBMS_FEATURE_WCR_REPLAY. +DBMS_FEATURE_XDB. +DBMS_FGA. +DBMS_FGA.ADD_POLICY +DBMS_FGA.DISABLE_POLICY +DBMS_FGA.DROP_POLICY +DBMS_FGA.ENABLE_POLICY +DBMS_FILE_GROUP. +DBMS_FILE_GROUP.ADD_FILE +DBMS_FILE_GROUP.ALTER_FILE +DBMS_FILE_GROUP.ALTER_FILE_GROUP +DBMS_FILE_GROUP.ALTER_VERSION +DBMS_FILE_GROUP.CREATE_FILE_GROUP +DBMS_FILE_GROUP.CREATE_VERSION +DBMS_FILE_GROUP.DROP_FILE_GROUP +DBMS_FILE_GROUP.DROP_VERSION +DBMS_FILE_GROUP.GRANT_OBJECT_PRIVILEGE +DBMS_FILE_GROUP.GRANT_SYSTEM_PRIVILEGE +DBMS_FILE_GROUP.PURGE_FILE_GROUP +DBMS_FILE_GROUP.REMOVE_FILE +DBMS_FILE_GROUP.REVOKE_OBJECT_PRIVILEGE +DBMS_FILE_GROUP.REVOKE_SYSTEM_PRIVILEGE +DBMS_FILE_GROUP_DECL. +DBMS_FILE_GROUP_EXP. +DBMS_FILE_GROUP_EXP.AUDIT_EXP +DBMS_FILE_GROUP_EXP.AUDIT_SYSPRIVS_EXP +DBMS_FILE_GROUP_EXP.CREATE_EXP +DBMS_FILE_GROUP_EXP.DROP_EXP +DBMS_FILE_GROUP_EXP.GRANT_EXP +DBMS_FILE_GROUP_EXP.GRANT_SYSPRIVS_EXP +DBMS_FILE_GROUP_EXP.SCHEMA_INFO_EXP +DBMS_FILE_GROUP_EXP_INTERNAL. +DBMS_FILE_GROUP_EXP_INTERNAL.OBJECT_OWNER +DBMS_FILE_GROUP_IMP. +DBMS_FILE_GROUP_IMP.ADD_FILE +DBMS_FILE_GROUP_IMP.CREATE_FILE_GROUP +DBMS_FILE_GROUP_IMP.CREATE_VERSION +DBMS_FILE_GROUP_IMP.GRANT_OBJECT_PRIVILEGE +DBMS_FILE_GROUP_IMP.SET_TABLESPACE_INFO +DBMS_FILE_GROUP_IMP.SET_TABLE_INFO +DBMS_FILE_GROUP_IMP.SET_VERSION_EXPORT_INFO +DBMS_FILE_GROUP_IMP_INTERNAL. +DBMS_FILE_GROUP_IMP_INTERNAL.SET_TABLESPACE_INFO +DBMS_FILE_GROUP_IMP_INTERNAL.SET_TABLE_INFO +DBMS_FILE_GROUP_IMP_INTERNAL.SET_VERSION_EXPORT_INFO +DBMS_FILE_GROUP_INTERNAL_INVOK. +DBMS_FILE_GROUP_INTERNAL_INVOK.ADD_FILE +DBMS_FILE_GROUP_INTERNAL_INVOK.ALTER_FILE_GROUP_3GL +DBMS_FILE_GROUP_INTERNAL_INVOK.CREATE_FILE_GROUP +DBMS_FILE_GROUP_INTERNAL_INVOK.CREATE_FILE_GROUP_3GL +DBMS_FILE_GROUP_INTERNAL_INVOK.CREATE_VERSION +DBMS_FILE_GROUP_INTERNAL_INVOK.DROP_FILE_GROUP_3GL +DBMS_FILE_GROUP_UTL. +DBMS_FILE_GROUP_UTL.AS_POS_INTEGER +DBMS_FILE_GROUP_UTL.AUTO_PURGE_FILE_GROUPS +DBMS_FILE_GROUP_UTL.BOOLEAN_STR +DBMS_FILE_GROUP_UTL.CANONICALIZE +DBMS_FILE_GROUP_UTL.CHECK_FILE_GROUP_FOR_DP_INFO +DBMS_FILE_GROUP_UTL.CHECK_VERSION_FOR_DP_INFO +DBMS_FILE_GROUP_UTL.CREATE_VERSEQ +DBMS_FILE_GROUP_UTL.DELETE_FILE_METADATA +DBMS_FILE_GROUP_UTL.DELETE_VERSION_METADATA +DBMS_FILE_GROUP_UTL.DISABLE_PURGE_JOB +DBMS_FILE_GROUP_UTL.DROP_VERSEQ +DBMS_FILE_GROUP_UTL.ENABLE_PURGE_JOB +DBMS_FILE_GROUP_UTL.GENERATE_NAME +DBMS_FILE_GROUP_UTL.GET_FGV_LOCK +DBMS_FILE_GROUP_UTL.GET_FG_LOCK +DBMS_FILE_GROUP_UTL.GET_FILES_PURGE_CURSOR +DBMS_FILE_GROUP_UTL.GET_FILE_GROUP_METADATA +DBMS_FILE_GROUP_UTL.GET_FILE_METADATA +DBMS_FILE_GROUP_UTL.GET_NEXTSEQVAL +DBMS_FILE_GROUP_UTL.GET_VERSIONS_PURGE_CURSOR +DBMS_FILE_GROUP_UTL.GET_VERSION_METADATA +DBMS_FILE_GROUP_UTL.GET_VERSION_METADATA_CURSOR +DBMS_FILE_GROUP_UTL.INSERT_FILE_METADATA +DBMS_FILE_GROUP_UTL.INSERT_VERSION_METADATA +DBMS_FILE_GROUP_UTL.IS_INTEGER +DBMS_FILE_GROUP_UTL.POPULATE_DATAPUMP_INFO +DBMS_FILE_GROUP_UTL.PURGE_DATAPUMP_INFO +DBMS_FILE_GROUP_UTL.RAISE_DP_ERRORS +DBMS_FILE_GROUP_UTL.RELOAD_VERSION_METADATA +DBMS_FILE_GROUP_UTL.TRACE_ON +DBMS_FILE_GROUP_UTL.UPDATE_FILE_METADATA +DBMS_FILE_GROUP_UTL.UPDATE_VERSION_METADATA +DBMS_FILE_GROUP_UTL.WRITE_TRACE +DBMS_FILE_GROUP_UTL_INVOK. +DBMS_FILE_GROUP_UTL_INVOK.AUTO_PURGE_FILE_GROUP +DBMS_FILE_GROUP_UTL_INVOK.CHECK_PRIVILEGE_ON_FILE_GROUP +DBMS_FILE_GROUP_UTL_INVOK.CHECK_SYSTEM_PRIVILEGE +DBMS_FILE_GROUP_UTL_INVOK.LOAD_DATAPUMP +DBMS_FILE_GROUP_UTL_INVOK.PURGE_FILE_GROUP +DBMS_FILE_GROUP_UTL_INVOK.PURGE_FILE_METADATA +DBMS_FILE_GROUP_UTL_INVOK.PURGE_FILE_ONDISK +DBMS_FILE_GROUP_UTL_INVOK.PURGE_VERSION +DBMS_FILE_GROUP_UTL_INVOK.UNLOAD_DATAPUMP +DBMS_FILE_TRANSFER. +DBMS_FILE_TRANSFER.COPY_FILE +DBMS_FILE_TRANSFER.GET_FILE +DBMS_FILE_TRANSFER.PUT_FILE +DBMS_FLASHBACK. +DBMS_FLASHBACK.DISABLE +DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER +DBMS_FLASHBACK.ENABLE_AT_TIME +DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER +DBMS_FLASHBACK.TRANSACTION_BACKOUT +DBMS_FLASHBACK_ARCHIVE. +DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA +DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA +DBMS_FREQUENT_ITEMSET. +DBMS_FREQUENT_ITEMSET.FI_HORIZONTAL +DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL +DBMS_FUSE. +DBMS_FUSE.FS_ACCESS +DBMS_FUSE.FS_CHMOD +DBMS_FUSE.FS_CHOWN +DBMS_FUSE.FS_CREAT +DBMS_FUSE.FS_DESTROY +DBMS_FUSE.FS_FGETATTR +DBMS_FUSE.FS_FLUSH +DBMS_FUSE.FS_FSYNC +DBMS_FUSE.FS_FSYNCDIR +DBMS_FUSE.FS_FTRUNCATE +DBMS_FUSE.FS_GETATTR +DBMS_FUSE.FS_GETATTR_VIEW +DBMS_FUSE.FS_INIT +DBMS_FUSE.FS_LINK +DBMS_FUSE.FS_MKDIR +DBMS_FUSE.FS_MKNOD +DBMS_FUSE.FS_OPEN +DBMS_FUSE.FS_OPENDIR +DBMS_FUSE.FS_READ +DBMS_FUSE.FS_READDIR +DBMS_FUSE.FS_READLINK +DBMS_FUSE.FS_RELEASE +DBMS_FUSE.FS_RELEASEDIR +DBMS_FUSE.FS_RENAME +DBMS_FUSE.FS_RMDIR +DBMS_FUSE.FS_STATFS +DBMS_FUSE.FS_SYMLINK +DBMS_FUSE.FS_TRUNCATE +DBMS_FUSE.FS_UNLINK +DBMS_FUSE.FS_UTIME +DBMS_FUSE.FS_WRITE +DBMS_GOLDENGATE_AUTH. +DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE +DBMS_GOLDENGATE_AUTH.REVOKE_ADMIN_PRIVILEGE +DBMS_HA_ALERTS. +DBMS_HA_ALERTS.GET_CARDINALITY +DBMS_HA_ALERTS.GET_DB_DOMAIN +DBMS_HA_ALERTS.GET_DB_UNIQUE_NAME +DBMS_HA_ALERTS.GET_EVENT_TIME +DBMS_HA_ALERTS.GET_HOST +DBMS_HA_ALERTS.GET_INCARNATION +DBMS_HA_ALERTS.GET_INSTANCE +DBMS_HA_ALERTS.GET_REASON +DBMS_HA_ALERTS.GET_SERVICE +DBMS_HA_ALERTS.GET_SEVERITY +DBMS_HA_ALERTS.GET_VERSION +DBMS_HA_ALERTS_PRVT. +DBMS_HA_ALERTS_PRVT.CHECK_HA_RESOURCES +DBMS_HA_ALERTS_PRVT.CLEAR_INSTANCE_RESOURCES +DBMS_HA_ALERTS_PRVT.INSTANCE_STARTUP_TIMESTAMP_TZ +DBMS_HA_ALERTS_PRVT.POST_HA_ALERT +DBMS_HA_ALERTS_PRVT.POST_INSTANCE_UP +DBMS_HM. +DBMS_HM.CREATE_OFFLINE_DICTIONARY +DBMS_HM.CREATE_SCHEMA +DBMS_HM.DROP_SCHEMA +DBMS_HM.GET_RUN_REPORT +DBMS_HM.RUN_CHECK +DBMS_HM.RUN_DDE_ACTION +DBMS_HPROF. +DBMS_HPROF.ANALYZE +DBMS_HPROF.START_PROFILING +DBMS_HPROF.STOP_PROFILING +DBMS_HS. +DBMS_HS.ALTER_BASE_CAPS +DBMS_HS.ALTER_BASE_DD +DBMS_HS.ALTER_CLASS_CAPS +DBMS_HS.ALTER_CLASS_DD +DBMS_HS.ALTER_CLASS_INIT +DBMS_HS.ALTER_FDS_CLASS +DBMS_HS.ALTER_FDS_INST +DBMS_HS.ALTER_INST_CAPS +DBMS_HS.ALTER_INST_DD +DBMS_HS.ALTER_INST_INIT +DBMS_HS.COPY_CLASS +DBMS_HS.COPY_INST +DBMS_HS.CREATE_BASE_CAPS +DBMS_HS.CREATE_BASE_DD +DBMS_HS.CREATE_CLASS_CAPS +DBMS_HS.CREATE_CLASS_DD +DBMS_HS.CREATE_CLASS_INIT +DBMS_HS.CREATE_FDS_CLASS +DBMS_HS.CREATE_FDS_INST +DBMS_HS.CREATE_INST_CAPS +DBMS_HS.CREATE_INST_DD +DBMS_HS.CREATE_INST_INIT +DBMS_HS.DROP_BASE_CAPS +DBMS_HS.DROP_BASE_DD +DBMS_HS.DROP_CLASS_CAPS +DBMS_HS.DROP_CLASS_DD +DBMS_HS.DROP_CLASS_INIT +DBMS_HS.DROP_FDS_CLASS +DBMS_HS.DROP_FDS_INST +DBMS_HS.DROP_INST_CAPS +DBMS_HS.DROP_INST_DD +DBMS_HS.DROP_INST_INIT +DBMS_HS.REPLACE_BASE_CAPS +DBMS_HS.REPLACE_BASE_DD +DBMS_HS.REPLACE_CLASS_CAPS +DBMS_HS.REPLACE_CLASS_DD +DBMS_HS.REPLACE_CLASS_INIT +DBMS_HS.REPLACE_FDS_CLASS +DBMS_HS.REPLACE_FDS_INST +DBMS_HS.REPLACE_INST_CAPS +DBMS_HS.REPLACE_INST_DD +DBMS_HS.REPLACE_INST_INIT +DBMS_HS_ALT. +DBMS_HS_ALT.ALTER_BASE_CAPS +DBMS_HS_ALT.ALTER_BASE_DD +DBMS_HS_ALT.ALTER_CLASS_CAPS +DBMS_HS_ALT.ALTER_CLASS_DD +DBMS_HS_ALT.ALTER_CLASS_INIT +DBMS_HS_ALT.ALTER_FDS_CLASS +DBMS_HS_ALT.ALTER_FDS_INST +DBMS_HS_ALT.ALTER_INST_CAPS +DBMS_HS_ALT.ALTER_INST_DD +DBMS_HS_ALT.ALTER_INST_INIT +DBMS_HS_CHK. +DBMS_HS_CHK.CHECK_BASE_CAPS +DBMS_HS_CHK.CHECK_BASE_DD +DBMS_HS_CHK.CHECK_CLASS_CAPS +DBMS_HS_CHK.CHECK_CLASS_DD +DBMS_HS_CHK.CHECK_CLASS_INIT +DBMS_HS_CHK.CHECK_FDS_CLASS +DBMS_HS_CHK.CHECK_FDS_INST +DBMS_HS_CHK.CHECK_INIT_VALUE_TYPE +DBMS_HS_CHK.CHECK_INST_CAPS +DBMS_HS_CHK.CHECK_INST_DD +DBMS_HS_CHK.CHECK_INST_INIT +DBMS_HS_CHK.CHECK_TRANSLATION_TEXT +DBMS_HS_CHK.CHECK_TRANSLATION_TYPE +DBMS_HS_PARALLEL. +DBMS_HS_PARALLEL.CREATE_OR_REPLACE_VIEW +DBMS_HS_PARALLEL.CREATE_TABLE_TEMPLATE +DBMS_HS_PARALLEL.DROP_VIEW +DBMS_HS_PARALLEL.LOAD_TABLE +DBMS_HS_PARALLEL_METADATA. +DBMS_HS_PARALLEL_METADATA.CHECK_CAP +DBMS_HS_PARALLEL_METADATA.DELETE_VIEWOBJ +DBMS_HS_PARALLEL_METADATA.GET_CPU_NUM +DBMS_HS_PARALLEL_METADATA.GET_DOMAIN_NAME +DBMS_HS_PARALLEL_METADATA.INSERT_VIEWOBJ +DBMS_HS_PARALLEL_METADATA.LOADHISINFO +DBMS_HS_PARALLEL_METADATA.LOADINDCOLINFO +DBMS_HS_PARALLEL_METADATA.LOADPATITIONINFO +DBMS_HS_PARALLEL_METADATA.LOAD_SAMPLEDATA +DBMS_HS_PARALLEL_METADATA.PURGEMETADATA +DBMS_HS_PARALLEL_METADATA.RAISE_SYSTEM_ERROR +DBMS_HS_PARALLEL_METADATA.SCHEDULE_SAMPLING +DBMS_HS_PARALLEL_METADATA.TABLE_SAMPLING +DBMS_HS_PARALLEL_METADATA.UPDATE_SAMPLEMETA +DBMS_HS_UTL. +DBMS_HS_UTL.CANONICALIZE +DBMS_HS_UTL.CANON_EXTOBJ +DBMS_HS_UTL.COPY_CLASS +DBMS_HS_UTL.COPY_INST +DBMS_HS_UTL.CREATE_BASE_CAPS +DBMS_HS_UTL.CREATE_BASE_DD +DBMS_HS_UTL.CREATE_CLASS_CAPS +DBMS_HS_UTL.CREATE_CLASS_DD +DBMS_HS_UTL.CREATE_CLASS_INIT +DBMS_HS_UTL.CREATE_FDS_CLASS +DBMS_HS_UTL.CREATE_FDS_INST +DBMS_HS_UTL.CREATE_INST_CAPS +DBMS_HS_UTL.CREATE_INST_DD +DBMS_HS_UTL.CREATE_INST_INIT +DBMS_HS_UTL.DROP_BASE_CAPS +DBMS_HS_UTL.DROP_BASE_DD +DBMS_HS_UTL.DROP_CLASS_CAPS +DBMS_HS_UTL.DROP_CLASS_DD +DBMS_HS_UTL.DROP_CLASS_INIT +DBMS_HS_UTL.DROP_FDS_CLASS +DBMS_HS_UTL.DROP_FDS_INST +DBMS_HS_UTL.DROP_INST_CAPS +DBMS_HS_UTL.DROP_INST_DD +DBMS_HS_UTL.DROP_INST_INIT +DBMS_HS_UTL.GET_TRANS_TYPE +DBMS_HS_UTL.RAISE_SYSTEM_ERROR +DBMS_IJOB. +DBMS_IJOB.BIS +DBMS_IJOB.BIT +DBMS_IJOB.BROKEN +DBMS_IJOB.CHANGE_ENV +DBMS_IJOB.CHECK_DATAPUMP_AUTH +DBMS_IJOB.CHECK_PRIVS +DBMS_IJOB.CHECK_SCHEDULER_CONVERSION +DBMS_IJOB.DB_COMPATIBILITY +DBMS_IJOB.DROP_USER_JOBS +DBMS_IJOB.ENABLED +DBMS_IJOB.EXPORT_MYINST +DBMS_IJOB.FULL_EXPORT +DBMS_IJOB.INSTANCE +DBMS_IJOB.INST_CHECK +DBMS_IJOB.INTERVAL +DBMS_IJOB.IS_DV_ENABLED +DBMS_IJOB.NEXT_DATE +DBMS_IJOB.PUID +DBMS_IJOB.PUSER +DBMS_IJOB.REMOVE +DBMS_IJOB.RUN +DBMS_IJOB.SET_ENABLED +DBMS_IJOB.SUBMIT +DBMS_IJOB.TOGGLE +DBMS_IJOB.UPDATE_METADATA +DBMS_IJOB.WHAT +DBMS_INDEX_UTL. +DBMS_INDEX_UTL.BUILD_INDEXES +DBMS_INDEX_UTL.BUILD_INDEX_COMPONENTS +DBMS_INDEX_UTL.BUILD_SCHEMA_INDEXES +DBMS_INDEX_UTL.BUILD_TABLE_COMPONENT_INDEXES +DBMS_INDEX_UTL.BUILD_TABLE_INDEXES +DBMS_INDEX_UTL.MULTI_LEVEL_BUILD +DBMS_INTERNAL_LOGSTDBY. +DBMS_INTERNAL_LOGSTDBY.APPLY_GET +DBMS_INTERNAL_LOGSTDBY.APPLY_IS_OFF +DBMS_INTERNAL_LOGSTDBY.APPLY_SET +DBMS_INTERNAL_LOGSTDBY.APPLY_STOP_NOWAIT +DBMS_INTERNAL_LOGSTDBY.APPLY_UNSET +DBMS_INTERNAL_LOGSTDBY.AUDDEL +DBMS_INTERNAL_LOGSTDBY.AUDINS +DBMS_INTERNAL_LOGSTDBY.AUDUPD +DBMS_INTERNAL_LOGSTDBY.BUILD +DBMS_INTERNAL_LOGSTDBY.CANCEL_FUTURE +DBMS_INTERNAL_LOGSTDBY.CAPTURE_SCN +DBMS_INTERNAL_LOGSTDBY.CHECK_SKIP_LIKE +DBMS_INTERNAL_LOGSTDBY.CLEAR_LOGICAL_INSTANTIATION +DBMS_INTERNAL_LOGSTDBY.CREATE_FUTURE_SESSION +DBMS_INTERNAL_LOGSTDBY.DESTROY_FUTURE_SESSION +DBMS_INTERNAL_LOGSTDBY.DUMP_XDAT +DBMS_INTERNAL_LOGSTDBY.EDS_ADD_PREREQ +DBMS_INTERNAL_LOGSTDBY.EDS_ADD_TABLE_FINISH +DBMS_INTERNAL_LOGSTDBY.EDS_ADD_TABLE_INT +DBMS_INTERNAL_LOGSTDBY.EDS_CLEANUP_METADATA +DBMS_INTERNAL_LOGSTDBY.EDS_DROP_TRIGGER +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_TABLE_1_FINISH +DBMS_INTERNAL_LOGSTDBY.EDS_GEN_TRIGGERS +DBMS_INTERNAL_LOGSTDBY.EDS_GET_NAMES +DBMS_INTERNAL_LOGSTDBY.EDS_GET_TABLESPACE +DBMS_INTERNAL_LOGSTDBY.EDS_REMOVE_TABLE_FINISH +DBMS_INTERNAL_LOGSTDBY.EDS_REMOVE_TABLE_INT +DBMS_INTERNAL_LOGSTDBY.END_INSTANTIATION +DBMS_INTERNAL_LOGSTDBY.END_STREAM +DBMS_INTERNAL_LOGSTDBY.END_STREAM_SHARED +DBMS_INTERNAL_LOGSTDBY.FGADEL +DBMS_INTERNAL_LOGSTDBY.FGAINS +DBMS_INTERNAL_LOGSTDBY.FGAUPD +DBMS_INTERNAL_LOGSTDBY.FLUSH_SRLS +DBMS_INTERNAL_LOGSTDBY.GET_DB_ROLE +DBMS_INTERNAL_LOGSTDBY.GET_EXPORT_DML_SCN +DBMS_INTERNAL_LOGSTDBY.GET_OBJ_NUM +DBMS_INTERNAL_LOGSTDBY.GET_SAFE_SCN +DBMS_INTERNAL_LOGSTDBY.GUARD_BYPASS_OFF +DBMS_INTERNAL_LOGSTDBY.GUARD_BYPASS_ON +DBMS_INTERNAL_LOGSTDBY.GUARD_CHECK +DBMS_INTERNAL_LOGSTDBY.HIST_READ_RECORD +DBMS_INTERNAL_LOGSTDBY.HIST_SYNCH +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_CANCEL +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_CURRENT +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_FUTURE +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_PREVIOUS +DBMS_INTERNAL_LOGSTDBY.HSTDEL +DBMS_INTERNAL_LOGSTDBY.HSTINS +DBMS_INTERNAL_LOGSTDBY.HSTUPD +DBMS_INTERNAL_LOGSTDBY.INSTANTIATE_FEATURE +DBMS_INTERNAL_LOGSTDBY.INSTANTIATE_TAB_LOG +DBMS_INTERNAL_LOGSTDBY.INSTANTIATE_TAB_PREREQ +DBMS_INTERNAL_LOGSTDBY.JOBDEL +DBMS_INTERNAL_LOGSTDBY.JOBINS +DBMS_INTERNAL_LOGSTDBY.JOBUPD +DBMS_INTERNAL_LOGSTDBY.LOCK_LSBY_CON +DBMS_INTERNAL_LOGSTDBY.LOCK_LSBY_META +DBMS_INTERNAL_LOGSTDBY.LOCK_TABLES +DBMS_INTERNAL_LOGSTDBY.LSBY_LOCK_TABLE +DBMS_INTERNAL_LOGSTDBY.LSBY_UNLOCK_TABLE +DBMS_INTERNAL_LOGSTDBY.MATCHED_PRIMARY +DBMS_INTERNAL_LOGSTDBY.NEED_SCN +DBMS_INTERNAL_LOGSTDBY.PARDEL +DBMS_INTERNAL_LOGSTDBY.PARINS +DBMS_INTERNAL_LOGSTDBY.PARUPD +DBMS_INTERNAL_LOGSTDBY.PREPARE_FOR_NEW_PRIMARY +DBMS_INTERNAL_LOGSTDBY.PREPARE_INSTANTIATION +DBMS_INTERNAL_LOGSTDBY.PRIMARY_DBID +DBMS_INTERNAL_LOGSTDBY.PRINTLOB +DBMS_INTERNAL_LOGSTDBY.PURGE_LOGS +DBMS_INTERNAL_LOGSTDBY.REBUILD +DBMS_INTERNAL_LOGSTDBY.REGISTER_SCHEMA +DBMS_INTERNAL_LOGSTDBY.REPAIR_LSBY +DBMS_INTERNAL_LOGSTDBY.REPLACE_DICTIONARY +DBMS_INTERNAL_LOGSTDBY.REPORT_ERROR +DBMS_INTERNAL_LOGSTDBY.RETRIEVE_STATEMENT +DBMS_INTERNAL_LOGSTDBY.SEQUENCE_UPDATE +DBMS_INTERNAL_LOGSTDBY.SEQUPD +DBMS_INTERNAL_LOGSTDBY.SET_EXPORT_SCN +DBMS_INTERNAL_LOGSTDBY.SET_LOGICAL_INSTANTIATION +DBMS_INTERNAL_LOGSTDBY.SET_TABLESPACE +DBMS_INTERNAL_LOGSTDBY.SKIP_SUPPORT +DBMS_INTERNAL_LOGSTDBY.SKIP_TRANSACTION +DBMS_INTERNAL_LOGSTDBY.UNLOCK_LSBY_CON +DBMS_INTERNAL_LOGSTDBY.UNLOCK_LSBY_META +DBMS_INTERNAL_LOGSTDBY.UNSKIP_TRANSACTION +DBMS_INTERNAL_LOGSTDBY.UNSUPPORTED_DML +DBMS_INTERNAL_LOGSTDBY.UPCASE +DBMS_INTERNAL_LOGSTDBY.UPDATE_DYNAMIC_LSBY_OPTION +DBMS_INTERNAL_LOGSTDBY.VALIDATE_SET +DBMS_INTERNAL_LOGSTDBY.VALIDATE_SKIP_ACTION +DBMS_INTERNAL_LOGSTDBY.VALIDATE_SKIP_AUTHID +DBMS_INTERNAL_LOGSTDBY.VERIFY_NOSESSION +DBMS_INTERNAL_LOGSTDBY.VERIFY_SESSION +DBMS_INTERNAL_LOGSTDBY.VERIFY_SESSION_LOGAUTODELETE +DBMS_INTERNAL_LOGSTDBY.WAIT_FOR_SAFE_SCN +DBMS_INTERNAL_REPCAT. +DBMS_INTERNAL_REPCAT.DISABLE_RECEIVER_TRACE +DBMS_INTERNAL_REPCAT.ENABLE_RECEIVER_TRACE +DBMS_INTERNAL_REPCAT.ORDER_USER_OBJECTS +DBMS_INTERNAL_REPCAT.VALIDATE +DBMS_INTERNAL_SAFE_SCN. +DBMS_INTERNAL_SAFE_SCN.GET_EXPORT_DML_SCN +DBMS_INTERNAL_SAFE_SCN.MATCHED_PRIMARY +DBMS_INTERNAL_SAFE_SCN.NEED_SCN +DBMS_INTERNAL_SAFE_SCN.SET_EXPORT_SCN +DBMS_INTERNAL_SAFE_SCN.SET_SESSION_STATE +DBMS_INTERNAL_SAFE_SCN.WAIT_FOR_SAFE_SCN +DBMS_INTERNAL_TRIGGER. +DBMS_INTERNAL_TRIGGER.DESTROY +DBMS_INTERNAL_TRIGGER.GET_UGAKNT +DBMS_INTERNAL_TRIGGER.INVALIDATE_LIBRARY_CACHE +DBMS_INTERNAL_TRIGGER.IS_NESTED_TABLE +DBMS_INTERNAL_TRIGGER.MAKE +DBMS_INTERNAL_TRIGGER.SET_UGAKNT +DBMS_IR. +DBMS_IR.ADDLINE +DBMS_IR.ADVISECANCEL +DBMS_IR.ADVISEDONE +DBMS_IR.CHANGEPRIORITY +DBMS_IR.CLOSEFAILURES +DBMS_IR.CLOSESCRIPTFILE +DBMS_IR.COMPLETEREPAIROPTION +DBMS_IR.CONSOLIDATEREPAIR +DBMS_IR.CONTROLFILECHECK +DBMS_IR.CREATESCRIPTFILE +DBMS_IR.CREATEWORKINGREPAIRSET +DBMS_IR.EXECSQLSCRIPT +DBMS_IR.GETADVISEID +DBMS_IR.GETERROR +DBMS_IR.GETFEASIBILITYANDIMPACT +DBMS_IR.GETFILE +DBMS_IR.GETLINE +DBMS_IR.OPENSCRIPTFILE +DBMS_IR.REEVALUATEOPENFAILURES +DBMS_IR.STARTREPAIROPTION +DBMS_IR.UPDATEFEASIBILITYANDIMPACT +DBMS_IR.UPDATEREPAIROPTION +DBMS_IR.WRITEFILE +DBMS_IREFRESH. +DBMS_IREFRESH.ADD +DBMS_IREFRESH.CHANGE +DBMS_IREFRESH.CHECK_TAB +DBMS_IREFRESH.CHECK_USER +DBMS_IREFRESH.DESTROY +DBMS_IREFRESH.DROP_USER_GROUPS +DBMS_IREFRESH.FULL_EXPORT +DBMS_IREFRESH.FULL_EXPORT_CHILD +DBMS_IREFRESH.GET_BASENAME +DBMS_IREFRESH.GET_NAME +DBMS_IREFRESH.LOCK_GROUP +DBMS_IREFRESH.MAKE +DBMS_IREFRESH.MAKE_REPAPI +DBMS_IREFRESH.REFRESH +DBMS_IREFRESH.SUBMIT_JOB +DBMS_IREFRESH.SUBTRACT +DBMS_ISCHED. +DBMS_ISCHED.ADD_AGENT_CERT +DBMS_ISCHED.ADD_EVENT_QUEUE_SUBSCRIBER +DBMS_ISCHED.ADD_GROUP_MEMBER +DBMS_ISCHED.ADD_JOB_EMAIL_NOTIFICATION +DBMS_ISCHED.ADD_WINDOW_GROUP_MEMBER +DBMS_ISCHED.ALTER_CHAIN +DBMS_ISCHED.ALTER_CHAIN_STEP +DBMS_ISCHED.ALTER_RUNNING_CHAIN +DBMS_ISCHED.AUDIT_SYS_PRIV +DBMS_ISCHED.BATCH_JOB_OPS +DBMS_ISCHED.CHAIN_END +DBMS_ISCHED.CHAIN_EVAL +DBMS_ISCHED.CHAIN_EVAL_UPDATE_STEP_STATE +DBMS_ISCHED.CHAIN_KILL +DBMS_ISCHED.CHAIN_LOG +DBMS_ISCHED.CHAIN_PARSE_STRING +DBMS_ISCHED.CHAIN_START +DBMS_ISCHED.CHAIN_STOP +DBMS_ISCHED.CHECK_AQ_CBK_PRIVS +DBMS_ISCHED.CHECK_COMPAT +DBMS_ISCHED.CHECK_OBJECT_PRIVS +DBMS_ISCHED.CHECK_REQUEST_PRIVS +DBMS_ISCHED.CLOSE_WINDOW +DBMS_ISCHED.COMPLETE_JOB_RUN +DBMS_ISCHED.CONVERT_DBMS_JOB +DBMS_ISCHED.COPY_JOB +DBMS_ISCHED.CREATE_AGENT_DESTINATION +DBMS_ISCHED.CREATE_CHAIN +DBMS_ISCHED.CREATE_CHAIN_STEP +DBMS_ISCHED.CREATE_CREDENTIAL +DBMS_ISCHED.CREATE_DATABASE_DESTINATION +DBMS_ISCHED.CREATE_FILE_WATCHER +DBMS_ISCHED.CREATE_GROUP +DBMS_ISCHED.CREATE_JOB +DBMS_ISCHED.CREATE_JOBS +DBMS_ISCHED.CREATE_JOB_CLASS +DBMS_ISCHED.CREATE_PROGRAM +DBMS_ISCHED.CREATE_SCHEDULE +DBMS_ISCHED.CREATE_WINDOW +DBMS_ISCHED.CREATE_WINDOW_GROUP +DBMS_ISCHED.DEFINE_CHAIN_RULE +DBMS_ISCHED.DEFINE_CHAIN_STEP +DBMS_ISCHED.DEFINE_METADATA_ARGUMENT +DBMS_ISCHED.DEFINE_PROGRAM_ARGUMENT +DBMS_ISCHED.DISABLE +DBMS_ISCHED.DISABLE1_CALENDAR_CHECK +DBMS_ISCHED.DROP_AGENT_DESTINATION +DBMS_ISCHED.DROP_CHAIN +DBMS_ISCHED.DROP_CHAIN_RULE +DBMS_ISCHED.DROP_CHAIN_STEP +DBMS_ISCHED.DROP_CREDENTIAL +DBMS_ISCHED.DROP_DATABASE_DESTINATION +DBMS_ISCHED.DROP_FILE_WATCHER +DBMS_ISCHED.DROP_GROUP +DBMS_ISCHED.DROP_JOB +DBMS_ISCHED.DROP_JOB_CLASS +DBMS_ISCHED.DROP_PROGRAM +DBMS_ISCHED.DROP_PROGRAM_ARGUMENT +DBMS_ISCHED.DROP_SCHEDULE +DBMS_ISCHED.DROP_SCHEDULER_ATTRIBUTE +DBMS_ISCHED.DROP_SCHEDULER_ATT_INT +DBMS_ISCHED.DROP_WINDOW +DBMS_ISCHED.DROP_WINDOW_GROUP +DBMS_ISCHED.ENABLE +DBMS_ISCHED.ENQ_END_CHAIN_JOB +DBMS_ISCHED.EVALUATE_RULESET +DBMS_ISCHED.EVALUATE_RUNNING_CHAIN +DBMS_ISCHED.EVENT_COND_FILTER +DBMS_ISCHED.FILE_TRANSFER +DBMS_ISCHED.FILE_WATCH_FILTER +DBMS_ISCHED.FILE_WATCH_JOB +DBMS_ISCHED.GENERATE_OBJECT_NAME +DBMS_ISCHED.GET_AGENT_VERSION +DBMS_ISCHED.GET_AGENT_WALLET_LOCATION +DBMS_ISCHED.GET_BOOL_ATTRIBUTE +DBMS_ISCHED.GET_CHAIN_EVAL_LOCK +DBMS_ISCHED.GET_CHAIN_RULESET +DBMS_ISCHED.GET_CHAR_ATTRIBUTE +DBMS_ISCHED.GET_CREDENTIAL_PASSWORD +DBMS_ISCHED.GET_DATE_ATTRIBUTE +DBMS_ISCHED.GET_FILE +DBMS_ISCHED.GET_GLOBAL_DB_NAME +DBMS_ISCHED.GET_INTERVAL_ATTRIBUTE +DBMS_ISCHED.GET_INT_ATTRIBUTE +DBMS_ISCHED.GET_LAST_RUN_TIME +DBMS_ISCHED.GET_NOTIFICATIONS +DBMS_ISCHED.GET_RULE_LINKS +DBMS_ISCHED.GET_SCHEDULER_ATTRIBUTE +DBMS_ISCHED.GET_STEP_STATE +DBMS_ISCHED.GET_STEP_STATE_CF +DBMS_ISCHED.GET_SYS_TIME_ZONE_NAME +DBMS_ISCHED.GET_TNS_NVPAIR +DBMS_ISCHED.NORMALIZE_HOST_NAME +DBMS_ISCHED.OPEN_WINDOW +DBMS_ISCHED.PARSE_EMAIL_ADDRESSES +DBMS_ISCHED.PRE_ALTER_CHAIN +DBMS_ISCHED.PRE_CREATE_CHAIN +DBMS_ISCHED.PRE_DROP_CHAIN +DBMS_ISCHED.PURGE_LOG +DBMS_ISCHED.PUT_FILE +DBMS_ISCHED.RAISE_ORACLE_ERROR +DBMS_ISCHED.RAISE_SCHLIM_EVT +DBMS_ISCHED.RECORD_RESEND_REQUEST +DBMS_ISCHED.REGISTER_CALLBACK +DBMS_ISCHED.REMOTE_KILL +DBMS_ISCHED.REMOVE_EVENT_QUEUE_SUBSCRIBER +DBMS_ISCHED.REMOVE_GROUP_MEMBER +DBMS_ISCHED.REMOVE_JOB_EMAIL_NOTIFICATION +DBMS_ISCHED.REMOVE_WINDOW_GROUP_MEMBER +DBMS_ISCHED.RESET_JOB_ARGUMENT_VALUE +DBMS_ISCHED.RESOLVE3_NAME +DBMS_ISCHED.RESOLVE_IF_NAMED_DEST +DBMS_ISCHED.RESOLVE_NAME +DBMS_ISCHED.RUN_CHAIN +DBMS_ISCHED.RUN_JOB +DBMS_ISCHED.SEND_EVENT_EMAIL +DBMS_ISCHED.SET_AGENT_REGISTRATION_PASS +DBMS_ISCHED.SET_BOOL_ATTRIBUTE +DBMS_ISCHED.SET_CHAR_ATTRIBUTE +DBMS_ISCHED.SET_DATE_ATTRIBUTE +DBMS_ISCHED.SET_EVTMSG_ARG +DBMS_ISCHED.SET_INTERVAL_ATTRIBUTE +DBMS_ISCHED.SET_INT_ATTRIBUTE +DBMS_ISCHED.SET_JOB_ARGUMENT_VALUE +DBMS_ISCHED.SET_JOB_ATTRIBUTES +DBMS_ISCHED.SET_LAST_RUN_TIME +DBMS_ISCHED.SET_LIST_ATTRIBUTE +DBMS_ISCHED.SET_SCHEDULER_ATTRIBUTE +DBMS_ISCHED.SET_SECURITY_HEADERS +DBMS_ISCHED.SHOW_ERRORS +DBMS_ISCHED.STIME +DBMS_ISCHED.STOP_JOB +DBMS_ISCHED.SUBMIT_REMOTE_EXTERNAL_JOB +DBMS_ISCHED.SUBMIT_REMOTE_FILE_WATCH +DBMS_ISCHED.TRACE_EMAIL +DBMS_ISCHED.VALIDATE_DEST +DBMS_ISCHED.VALIDATE_EMAIL_ADDRESSES +DBMS_ISCHED.WATCH_FOR_FILES +DBMS_ISCHED.WRITE_FILE_WATCH_TRACE +DBMS_ISCHED_CHAIN_CONDITION. +DBMS_ISCHED_CHAIN_CONDITION.STEP_TABLE_POPULATED +DBMS_ISCHED_CHAIN_CONDITION.TRANSFORM_CHAIN_CONDITION +DBMS_ISCHED_REMDB_JOB. +DBMS_ISCHED_REMDB_JOB.IS_TRACING_ON +DBMS_ISCHED_REMDB_JOB.TRACE_ENTRY +DBMS_ISCHED_REMDB_JOB.TRACE_EXIT +DBMS_ISCHED_REMDB_JOB.WRITE_TRACE +DBMS_ISNAPSHOT. +DBMS_ISNAPSHOT.CHANGE_GROUP +DBMS_ISNAPSHOT.CHECK_USRPRIV +DBMS_ISNAPSHOT.DROP_GROUP +DBMS_ISNAPSHOT.DROP_USER_SNAPSHOTS +DBMS_ITRIGGER_UTL. +DBMS_ITRIGGER_UTL.IMPORT_SCDC_TRIGGER_STRING +DBMS_ITRIGGER_UTL.SYNC_UP_SCDC +DBMS_I_INDEX_UTL. +DBMS_I_INDEX_UTL.COLLECT_PARAMETERS +DBMS_I_INDEX_UTL.COMPUTE_ORDER +DBMS_I_INDEX_UTL.DROP_IDX_JOB +DBMS_I_INDEX_UTL.FIX_QUOTES +DBMS_I_INDEX_UTL.GET_DOM_IDX_PARAM_STR +DBMS_I_INDEX_UTL.GET_REBUILD_COMMAND +DBMS_I_INDEX_UTL.IS_DOMAIN_INDEX +DBMS_I_INDEX_UTL.I_BUILD_INDEXES +DBMS_I_INDEX_UTL.PACK_PARAMETERS +DBMS_I_INDEX_UTL.REBUILD_INDEX +DBMS_I_INDEX_UTL.REBUILD_INDEX_LIST +DBMS_I_INDEX_UTL.REMOVE_PARAMETER_PIPES +DBMS_I_INDEX_UTL.SUBMIT_IDX_REBUILD_JOB +DBMS_I_INDEX_UTL.UNPACK_PARAMETERS +DBMS_I_INDEX_UTL.VERIFY_IDX_COMP +DBMS_I_INDEX_UTL.VERIFY_INDEX +DBMS_I_INDEX_UTL.VERIFY_OWNER +DBMS_I_INDEX_UTL.VERIFY_TABLE +DBMS_I_INDEX_UTL.VERIFY_TAB_COMP +DBMS_JAVA. +DBMS_JAVA.COMPILE_CLASS +DBMS_JAVA.COMPILE_METHOD +DBMS_JAVA.DBMS_FEATURE_OJVM +DBMS_JAVA.DBMS_FEATURE_SYSTEM_OJVM +DBMS_JAVA.DECODE_NATIVE_COMPILER_OPTION +DBMS_JAVA.DELETE_PERMISSION +DBMS_JAVA.DEPLOY_COPY +DBMS_JAVA.DEPLOY_INVOKE +DBMS_JAVA.DEPLOY_OPEN +DBMS_JAVA.DERIVEDFROM +DBMS_JAVA.DISABLE_OUTPUT_TO_FILE +DBMS_JAVA.DISABLE_OUTPUT_TO_JAVA +DBMS_JAVA.DISABLE_OUTPUT_TO_SQL +DBMS_JAVA.DISABLE_OUTPUT_TO_TRC +DBMS_JAVA.DISABLE_PERMISSION +DBMS_JAVA.DROPJAVA +DBMS_JAVA.DROP_JAR +DBMS_JAVA.DUMP_NATIVE_MACHINE_CODE +DBMS_JAVA.ENABLE_OUTPUT_TO_FILE +DBMS_JAVA.ENABLE_OUTPUT_TO_JAVA +DBMS_JAVA.ENABLE_OUTPUT_TO_SQL +DBMS_JAVA.ENABLE_OUTPUT_TO_TRC +DBMS_JAVA.ENABLE_PERMISSION +DBMS_JAVA.ENDSESSION +DBMS_JAVA.ENDSESSION_AND_RELATED_STATE +DBMS_JAVA.END_EXPORT +DBMS_JAVA.END_IMPORT +DBMS_JAVA.EXPORT_CLASS +DBMS_JAVA.EXPORT_RAW_CHUNK +DBMS_JAVA.EXPORT_RESOURCE +DBMS_JAVA.EXPORT_SOURCE +DBMS_JAVA.EXPORT_TEXT_CHUNK +DBMS_JAVA.FINALIZE_OUTPUT_TO_FILE +DBMS_JAVA.FINISH_LOADING_JAR +DBMS_JAVA.FIXED_IN_INSTANCE +DBMS_JAVA.FULL_NCOMP_ENABLED +DBMS_JAVA.GETSOURCECHUNK +DBMS_JAVA.GETVERSION +DBMS_JAVA.GET_COMPILER_OPTION +DBMS_JAVA.GET_OJVM_PROPERTY +DBMS_JAVA.GET_PROPERTY +DBMS_JAVA.GET_REPLY +DBMS_JAVA.GRANT_PERMISSION +DBMS_JAVA.GRANT_POLICY_PERMISSION +DBMS_JAVA.HANDLEMD5 +DBMS_JAVA.IMPORT_RAW_CHUNK +DBMS_JAVA.IMPORT_TEXT_CHUNK +DBMS_JAVA.INITGETSOURCECHUNKS +DBMS_JAVA.INITIALIZE_OUTPUT_TO_FILE +DBMS_JAVA.INIT_BTL +DBMS_JAVA.JAR_STATUS +DBMS_JAVA.LOADJAVA +DBMS_JAVA.LONGNAME +DBMS_JAVA.NATIVE_COMPILER_OPTIONS +DBMS_JAVA.NCOMP_STATUS_MSG +DBMS_JAVA.OPTION_CONTROLLER +DBMS_JAVA.QUERY_OUTPUT_TO_FILE +DBMS_JAVA.QUERY_OUTPUT_TO_JAVA +DBMS_JAVA.QUERY_OUTPUT_TO_SQL +DBMS_JAVA.QUERY_OUTPUT_TO_TRC +DBMS_JAVA.REMOVE_OUTPUT_TO_FILE +DBMS_JAVA.REMOVE_OUTPUT_TO_JAVA +DBMS_JAVA.REMOVE_OUTPUT_TO_SQL +DBMS_JAVA.REMOVE_PROPERTY +DBMS_JAVA.RESET_COMPILER_OPTION +DBMS_JAVA.RESOLVER +DBMS_JAVA.RESTRICT_PERMISSION +DBMS_JAVA.REVOKE_PERMISSION +DBMS_JAVA.RJBC_DONE +DBMS_JAVA.RJBC_INIT +DBMS_JAVA.RJBC_NORMALIZE +DBMS_JAVA.RJBC_OUTPUT +DBMS_JAVA.RJBC_REQUEST +DBMS_JAVA.RJBC_RESPOND +DBMS_JAVA.RUNJAVA +DBMS_JAVA.RUNJAVA_IN_CURRENT_SESSION +DBMS_JAVA.SEND_COMMAND +DBMS_JAVA.SET_COMPILER_OPTION +DBMS_JAVA.SET_EXECUTE_PRIVILEGE +DBMS_JAVA.SET_FIXED_IN_INSTANCE +DBMS_JAVA.SET_NATIVE_COMPILER_OPTION +DBMS_JAVA.SET_OUTPUT +DBMS_JAVA.SET_OUTPUT_TO_FILE +DBMS_JAVA.SET_OUTPUT_TO_JAVA +DBMS_JAVA.SET_OUTPUT_TO_SQL +DBMS_JAVA.SET_PERMISSION_DEBUG +DBMS_JAVA.SET_PREFERENCE +DBMS_JAVA.SET_PROPERTY +DBMS_JAVA.SET_RUNTIME_EXEC_CREDENTIALS +DBMS_JAVA.SET_SYSTEM_CLASS_LOADING +DBMS_JAVA.SET_VERIFIER +DBMS_JAVA.SHAREDPRIVATECLASSNAME +DBMS_JAVA.SHORTNAME +DBMS_JAVA.SHOW_PROPERTY +DBMS_JAVA.START_BTL +DBMS_JAVA.START_EXPORT +DBMS_JAVA.START_IMPORT +DBMS_JAVA.START_JMX_AGENT +DBMS_JAVA.START_LOADING_JAR +DBMS_JAVA.STOP_BTL +DBMS_JAVA.TERMINATE_BTL +DBMS_JAVA.UNCOMPILE_CLASS +DBMS_JAVA.UNCOMPILE_METHOD +DBMS_JAVA.UNSET_NATIVE_COMPILER_OPTION +DBMS_JAVA_DEFINERS. +DBMS_JAVA_DEFINERS.COMPILE_CLASS_ +DBMS_JAVA_DEFINERS.COMPILE_METHOD_ +DBMS_JAVA_DEFINERS.DECODE_NATIVE_COMPILER_OPTION_ +DBMS_JAVA_DEFINERS.GET_NTH_NATIVE_COMPILER_OPTION +DBMS_JAVA_DEFINERS.SET_NATIVE_COMPILER_OPTION_ +DBMS_JAVA_DEFINERS.UNCOMPILE_CLASS_ +DBMS_JAVA_DEFINERS.UNCOMPILE_METHOD_ +DBMS_JAVA_DEFINERS.UNSET_NATIVE_COMPILER_OPTION_ +DBMS_JAVA_DUMP. +DBMS_JAVA_DUMP.DUMP +DBMS_JAVA_TEST. +DBMS_JAVA_TEST.FUNCALL +DBMS_JDM_INTERNAL. +DBMS_JDM_INTERNAL.APPLY_TASK +DBMS_JDM_INTERNAL.BUILD_TASK +DBMS_JDM_INTERNAL.EXPLAIN_TASK +DBMS_JDM_INTERNAL.EXPORT_TASK +DBMS_JDM_INTERNAL.GET_JDM_ATTR_NAMES +DBMS_JDM_INTERNAL.GET_JDM_NUM_VALS +DBMS_JDM_INTERNAL.GET_JDM_STR_VALS +DBMS_JDM_INTERNAL.IMPORT_TASK +DBMS_JDM_INTERNAL.PREDICT_TASK +DBMS_JDM_INTERNAL.PROFILE_TASK +DBMS_JDM_INTERNAL.SQL_APPLY_TASK +DBMS_JDM_INTERNAL.TEST_TASK +DBMS_JDM_INTERNAL.TO_CHAR_VARRAY +DBMS_JDM_INTERNAL.UNIQUE_OBJECT_NAME +DBMS_JDM_INTERNAL.XFORM_SEQ_TASK +DBMS_JDM_INTERNAL.XFORM_TASK +DBMS_JMS_PLSQL. +DBMS_JMS_PLSQL.BYTES_CLEAN +DBMS_JMS_PLSQL.BYTES_CLEAN_ALL +DBMS_JMS_PLSQL.BYTES_CLEAR_BODY +DBMS_JMS_PLSQL.BYTES_FLUSH +DBMS_JMS_PLSQL.BYTES_GET_MODE +DBMS_JMS_PLSQL.BYTES_PREPARE +DBMS_JMS_PLSQL.BYTES_READ_BYTES +DBMS_JMS_PLSQL.BYTES_READ_CHAR +DBMS_JMS_PLSQL.BYTES_READ_NUMBER +DBMS_JMS_PLSQL.BYTES_READ_UTF +DBMS_JMS_PLSQL.BYTES_RESET +DBMS_JMS_PLSQL.BYTES_WRITE_BYTES +DBMS_JMS_PLSQL.BYTES_WRITE_CHAR +DBMS_JMS_PLSQL.BYTES_WRITE_NUMBER +DBMS_JMS_PLSQL.BYTES_WRITE_UTF +DBMS_JMS_PLSQL.CONVERT_JMS_SELECTOR +DBMS_JMS_PLSQL.GET_EXCEPTION +DBMS_JMS_PLSQL.JAVA_CONVERT_JMS_SELECTOR +DBMS_JMS_PLSQL.MAP_CLEAN +DBMS_JMS_PLSQL.MAP_CLEAN_ALL +DBMS_JMS_PLSQL.MAP_CLEAR_BODY +DBMS_JMS_PLSQL.MAP_FLUSH +DBMS_JMS_PLSQL.MAP_GET_BYTES +DBMS_JMS_PLSQL.MAP_GET_CHAR +DBMS_JMS_PLSQL.MAP_GET_NAMES +DBMS_JMS_PLSQL.MAP_GET_NUMBER +DBMS_JMS_PLSQL.MAP_GET_OBJECT +DBMS_JMS_PLSQL.MAP_GET_SIZE +DBMS_JMS_PLSQL.MAP_GET_STRING +DBMS_JMS_PLSQL.MAP_ITEM_EXISTS +DBMS_JMS_PLSQL.MAP_PREPARE +DBMS_JMS_PLSQL.MAP_SET_BYTES +DBMS_JMS_PLSQL.MAP_SET_CHAR +DBMS_JMS_PLSQL.MAP_SET_NUMBER +DBMS_JMS_PLSQL.MAP_SET_STRING +DBMS_JMS_PLSQL.STREAM_CLEAN +DBMS_JMS_PLSQL.STREAM_CLEAN_ALL +DBMS_JMS_PLSQL.STREAM_CLEAR_BODY +DBMS_JMS_PLSQL.STREAM_FLUSH +DBMS_JMS_PLSQL.STREAM_GET_MODE +DBMS_JMS_PLSQL.STREAM_PREPARE +DBMS_JMS_PLSQL.STREAM_READ_BYTES +DBMS_JMS_PLSQL.STREAM_READ_CHAR +DBMS_JMS_PLSQL.STREAM_READ_NUMBER +DBMS_JMS_PLSQL.STREAM_READ_OBJECT +DBMS_JMS_PLSQL.STREAM_READ_STRING +DBMS_JMS_PLSQL.STREAM_RESET +DBMS_JMS_PLSQL.STREAM_WRITE_BYTES +DBMS_JMS_PLSQL.STREAM_WRITE_CHAR +DBMS_JMS_PLSQL.STREAM_WRITE_NUMBER +DBMS_JMS_PLSQL.STREAM_WRITE_STRING +DBMS_JOB. +DBMS_JOB.BACKGROUND_PROCESS +DBMS_JOB.BROKEN +DBMS_JOB.CHANGE +DBMS_JOB.INSTANCE +DBMS_JOB.INTERVAL +DBMS_JOB.ISUBMIT +DBMS_JOB.IS_JOBQ +DBMS_JOB.NEXT_DATE +DBMS_JOB.REMOVE +DBMS_JOB.RUN +DBMS_JOB.SUBMIT +DBMS_JOB.USER_EXPORT +DBMS_JOB.WHAT +DBMS_JVM_EXP_PERMS. +DBMS_JVM_EXP_PERMS.AUDIT_EXP +DBMS_JVM_EXP_PERMS.AUDIT_SYSPRIVS_EXP +DBMS_JVM_EXP_PERMS.CREATE_EXP +DBMS_JVM_EXP_PERMS.DROP_EXP +DBMS_JVM_EXP_PERMS.EXPORT_PERMS +DBMS_JVM_EXP_PERMS.GRANT_EXP +DBMS_JVM_EXP_PERMS.GRANT_SYSPRIVS_EXP +DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS +DBMS_LCR. +DBMS_LDAP. +DBMS_LDAP.ADD_S +DBMS_LDAP.BER_FREE +DBMS_LDAP.BIND_S +DBMS_LDAP.CHECK_INTERFACE_VERSION +DBMS_LDAP.COMPARE_S +DBMS_LDAP.COUNT_ENTRIES +DBMS_LDAP.COUNT_VALUES +DBMS_LDAP.COUNT_VALUES_BLOB +DBMS_LDAP.COUNT_VALUES_LEN +DBMS_LDAP.CREATE_MOD_ARRAY +DBMS_LDAP.DELETE +DBMS_LDAP.DELETE_S +DBMS_LDAP.ERR2STRING +DBMS_LDAP.EXPLODE_DN +DBMS_LDAP.FIRST_ATTRIBUTE +DBMS_LDAP.FIRST_ENTRY +DBMS_LDAP.FREE_MOD_ARRAY +DBMS_LDAP.GET_DN +DBMS_LDAP.GET_SESSION_INFO +DBMS_LDAP.GET_TRACE_LEVEL +DBMS_LDAP.GET_VALUES +DBMS_LDAP.GET_VALUES_BLOB +DBMS_LDAP.GET_VALUES_LEN +DBMS_LDAP.INIT +DBMS_LDAP.MODIFY_S +DBMS_LDAP.MODRDN2_S +DBMS_LDAP.MSGFREE +DBMS_LDAP.NEXT_ATTRIBUTE +DBMS_LDAP.NEXT_ENTRY +DBMS_LDAP.NLS_CONVERT_FROM_UTF8 +DBMS_LDAP.NLS_CONVERT_TO_UTF8 +DBMS_LDAP.NLS_GET_DBCHARSET_NAME +DBMS_LDAP.OPEN_SSL +DBMS_LDAP.POPULATE_MOD_ARRAY +DBMS_LDAP.RENAME_S +DBMS_LDAP.SEARCH_S +DBMS_LDAP.SEARCH_ST +DBMS_LDAP.SET_TRACE_LEVEL +DBMS_LDAP.SIMPLE_BIND_S +DBMS_LDAP.UNBIND_S +DBMS_LDAP.VALUE_FREE_BLOB +DBMS_LDAP_API_FFI. +DBMS_LDAP_API_FFI.BER_FREE +DBMS_LDAP_API_FFI.CREATE_MOD_ARRAY +DBMS_LDAP_API_FFI.FREE_MOD_ARRAY +DBMS_LDAP_API_FFI.LDAP_ADD_S +DBMS_LDAP_API_FFI.LDAP_BIND_S +DBMS_LDAP_API_FFI.LDAP_COMPARE_S +DBMS_LDAP_API_FFI.LDAP_COUNT_ENTRIES +DBMS_LDAP_API_FFI.LDAP_DELETE_S +DBMS_LDAP_API_FFI.LDAP_ERR2STRING +DBMS_LDAP_API_FFI.LDAP_EXPLODE_DN +DBMS_LDAP_API_FFI.LDAP_FIRST_ATTRIBUTE +DBMS_LDAP_API_FFI.LDAP_FIRST_ENTRY +DBMS_LDAP_API_FFI.LDAP_GET_DBCHARSET_NAME +DBMS_LDAP_API_FFI.LDAP_GET_DN +DBMS_LDAP_API_FFI.LDAP_GET_SESSION_INFO +DBMS_LDAP_API_FFI.LDAP_GET_TRACE_LEVEL +DBMS_LDAP_API_FFI.LDAP_GET_VALUES +DBMS_LDAP_API_FFI.LDAP_GET_VALUES_BLOB +DBMS_LDAP_API_FFI.LDAP_GET_VALUES_LEN +DBMS_LDAP_API_FFI.LDAP_INIT +DBMS_LDAP_API_FFI.LDAP_MEMFREE +DBMS_LDAP_API_FFI.LDAP_MODIFY_S +DBMS_LDAP_API_FFI.LDAP_MODRDN2_S +DBMS_LDAP_API_FFI.LDAP_MSGFREE +DBMS_LDAP_API_FFI.LDAP_NEXT_ATTRIBUTE +DBMS_LDAP_API_FFI.LDAP_NEXT_ENTRY +DBMS_LDAP_API_FFI.LDAP_OPEN_SSL +DBMS_LDAP_API_FFI.LDAP_RENAME_S +DBMS_LDAP_API_FFI.LDAP_SEARCH_S +DBMS_LDAP_API_FFI.LDAP_SEARCH_ST +DBMS_LDAP_API_FFI.LDAP_SET_TRACE_LEVEL +DBMS_LDAP_API_FFI.LDAP_SIMPLE_BIND_S +DBMS_LDAP_API_FFI.LDAP_UNBIND_S +DBMS_LDAP_API_FFI.ORA_LDAP_AUTHENTICATE_USER +DBMS_LDAP_API_FFI.ORA_LDAP_AUTHENTICATE_USER_EXT +DBMS_LDAP_API_FFI.ORA_LDAP_CHECK_GRP_MEMBERSHIP +DBMS_LDAP_API_FFI.ORA_LDAP_CHECK_USER_SCRIPTION +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_GRP_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_MOD_PSET +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_SRV_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_SUB_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_USER_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_FREE_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_FREE_MOD_PSET +DBMS_LDAP_API_FFI.ORA_LDAP_FREE_PSET_COLL +DBMS_LDAP_API_FFI.ORA_LDAP_GET_AVAIL_SRVS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_GRP_DN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_GRP_MEMBERSHIP +DBMS_LDAP_API_FFI.ORA_LDAP_GET_GRP_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_NAMES +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_VALUES +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_VALUES_BLOB +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_VALUES_LEN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SCRIBED_SRVS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SCRIBED_USERS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SUB_DN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SUB_EXT_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SUB_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_DN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_EXT_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_PROPS_AUTH +DBMS_LDAP_API_FFI.ORA_LDAP_LOCATE_SUB_FOR_USER +DBMS_LDAP_API_FFI.ORA_LDAP_NORM_DN_WITH_CASE +DBMS_LDAP_API_FFI.ORA_LDAP_POPULATE_MOD_PSET +DBMS_LDAP_API_FFI.ORA_LDAP_SCRIBE_USER +DBMS_LDAP_API_FFI.ORA_LDAP_SET_GRP_HANDLE_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_SET_USER_HANDLE_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_SET_USER_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_UNSCRIBE_USER +DBMS_LDAP_API_FFI.POPULATE_MOD_ARRAY +DBMS_LDAP_API_FFI.VALUE_FREE_BLOB +DBMS_LDAP_UTL. +DBMS_LDAP_UTL.AUTHENTICATE_USER +DBMS_LDAP_UTL.AUTHENTICATE_USER_EXT +DBMS_LDAP_UTL.CHECK_GROUP_MEMBERSHIP +DBMS_LDAP_UTL.CHECK_INTERFACE_VERSION +DBMS_LDAP_UTL.CHECK_USER_SUBSCRIPTION +DBMS_LDAP_UTL.CREATE_GROUP_HANDLE +DBMS_LDAP_UTL.CREATE_MOD_PROPERTYSET +DBMS_LDAP_UTL.CREATE_SERVICE_HANDLE +DBMS_LDAP_UTL.CREATE_SUBSCRIBER_HANDLE +DBMS_LDAP_UTL.CREATE_USER_HANDLE +DBMS_LDAP_UTL.FREE_HANDLE +DBMS_LDAP_UTL.FREE_MOD_PROPERTYSET +DBMS_LDAP_UTL.FREE_PROPERTYSET_COLLECTION +DBMS_LDAP_UTL.GET_AVAILABLE_SERVICES +DBMS_LDAP_UTL.GET_GROUP_DN +DBMS_LDAP_UTL.GET_GROUP_MEMBERSHIP +DBMS_LDAP_UTL.GET_GROUP_PROPERTIES +DBMS_LDAP_UTL.GET_PROPERTY_NAMES +DBMS_LDAP_UTL.GET_PROPERTY_VALUES +DBMS_LDAP_UTL.GET_PROPERTY_VALUES_BLOB +DBMS_LDAP_UTL.GET_PROPERTY_VALUES_LEN +DBMS_LDAP_UTL.GET_SUBSCRIBED_SERVICES +DBMS_LDAP_UTL.GET_SUBSCRIBED_USERS +DBMS_LDAP_UTL.GET_SUBSCRIBER_DN +DBMS_LDAP_UTL.GET_SUBSCRIBER_EXT_PROPERTIES +DBMS_LDAP_UTL.GET_SUBSCRIBER_PROPERTIES +DBMS_LDAP_UTL.GET_USER_DN +DBMS_LDAP_UTL.GET_USER_EXTENDED_PROPERTIES +DBMS_LDAP_UTL.GET_USER_PROPERTIES +DBMS_LDAP_UTL.GET_USER_PROPS_AND_AUTH +DBMS_LDAP_UTL.LOCATE_SUBSCRIBER_FOR_USER +DBMS_LDAP_UTL.NORMALIZE_DN_WITH_CASE +DBMS_LDAP_UTL.POPULATE_MOD_PROPERTYSET +DBMS_LDAP_UTL.PROPERTY_VALUE_FREE_BLOB +DBMS_LDAP_UTL.SET_GROUP_HANDLE_PROPERTIES +DBMS_LDAP_UTL.SET_USER_HANDLE_PROPERTIES +DBMS_LDAP_UTL.SET_USER_PROPERTIES +DBMS_LDAP_UTL.SUBSCRIBE_USER +DBMS_LDAP_UTL.UNSUBSCRIBE_USER +DBMS_LOB. +DBMS_LOB.APPEND +DBMS_LOB.CLOSE +DBMS_LOB.COMPARE +DBMS_LOB.CONVERTTOBLOB +DBMS_LOB.CONVERTTOCLOB +DBMS_LOB.COPY +DBMS_LOB.COPY_DBFS_LINK +DBMS_LOB.COPY_FROM_DBFS_LINK +DBMS_LOB.CREATETEMPORARY +DBMS_LOB.DBFS_LINK_GENERATE_PATH +DBMS_LOB.ERASE +DBMS_LOB.FILECLOSE +DBMS_LOB.FILECLOSEALL +DBMS_LOB.FILEEXISTS +DBMS_LOB.FILEGETNAME +DBMS_LOB.FILEISOPEN +DBMS_LOB.FILEOPEN +DBMS_LOB.FRAGMENT_DELETE +DBMS_LOB.FRAGMENT_INSERT +DBMS_LOB.FRAGMENT_MOVE +DBMS_LOB.FRAGMENT_REPLACE +DBMS_LOB.FREETEMPORARY +DBMS_LOB.GETCHUNKSIZE +DBMS_LOB.GETCONTENTTYPE +DBMS_LOB.GETLENGTH +DBMS_LOB.GETOPTIONS +DBMS_LOB.GET_DBFS_LINK +DBMS_LOB.GET_DBFS_LINK_STATE +DBMS_LOB.GET_DEDUPLICATE_REGIONS +DBMS_LOB.GET_STORAGE_LIMIT +DBMS_LOB.INSTR +DBMS_LOB.ISOPEN +DBMS_LOB.ISSECUREFILE +DBMS_LOB.ISTEMPORARY +DBMS_LOB.LOADBLOBFROMFILE +DBMS_LOB.LOADCLOBFROMFILE +DBMS_LOB.LOADFROMFILE +DBMS_LOB.MOVE_TO_DBFS_LINK +DBMS_LOB.OPEN +DBMS_LOB.READ +DBMS_LOB.SETCONTENTTYPE +DBMS_LOB.SETOPTIONS +DBMS_LOB.SET_DBFS_LINK +DBMS_LOB.SUBSTR +DBMS_LOB.TRIM +DBMS_LOB.WRITE +DBMS_LOB.WRITEAPPEND +DBMS_LOBUTIL. +DBMS_LOBUTIL.GETEXTENTS +DBMS_LOBUTIL.GETINODE +DBMS_LOBUTIL.GETLOBMAP +DBMS_LOB_AM_PRIVATE. +DBMS_LOB_AM_PRIVATE.CREATEFILE +DBMS_LOB_AM_PRIVATE.DELETEFILE +DBMS_LOB_AM_PRIVATE.GETFILE +DBMS_LOB_AM_PRIVATE.GETLENGTH +DBMS_LOB_AM_PRIVATE.ISSTREAMABLE +DBMS_LOB_AM_PRIVATE.SETCHARSETID +DBMS_LOCK. +DBMS_LOCK.ALLOCATE_UNIQUE +DBMS_LOCK.CONVERT +DBMS_LOCK.RELEASE +DBMS_LOCK.REQUEST +DBMS_LOCK.SLEEP +DBMS_LOCK_ALLOCATED +DBMS_LOGMNR. +DBMS_LOGMNR.ADD_LOGFILE +DBMS_LOGMNR.COLUMN_PRESENT +DBMS_LOGMNR.END_LOGMNR +DBMS_LOGMNR.MINE_VALUE +DBMS_LOGMNR.REMOVE_LOGFILE +DBMS_LOGMNR.START_LOGMNR +DBMS_LOGMNR_D. +DBMS_LOGMNR_D.BUILD +DBMS_LOGMNR_D.SET_TABLESPACE +DBMS_LOGMNR_FFVTOLOGMNRT. +DBMS_LOGMNR_INTERNAL. +DBMS_LOGMNR_INTERNAL.ADDXTENDEDPKLOGGROUP +DBMS_LOGMNR_INTERNAL.ADD_TABLE_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.ADD_USER_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.ADD_XID_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.ADVANCE_READ_SCN +DBMS_LOGMNR_INTERNAL.AGESPILL_101TO102 +DBMS_LOGMNR_INTERNAL.AGESPILL_102TO101 +DBMS_LOGMNR_INTERNAL.AGESPILL_102TO11 +DBMS_LOGMNR_INTERNAL.AGESPILL_11202TO112 +DBMS_LOGMNR_INTERNAL.AGESPILL_112TO11 +DBMS_LOGMNR_INTERNAL.AGESPILL_11TO102 +DBMS_LOGMNR_INTERNAL.AGESPILL_11TO112 +DBMS_LOGMNR_INTERNAL.DELETE_TABLE_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.DELETE_USER_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.DELETE_XID_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.DOWNGRADE_CKPT +DBMS_LOGMNR_INTERNAL.DO_INT_BUILD +DBMS_LOGMNR_INTERNAL.DROPXTENDEDPKLOGGROUP +DBMS_LOGMNR_INTERNAL.DUMP_CKPT_DATA +DBMS_LOGMNR_INTERNAL.DUMP_PAGEOUT_DATA +DBMS_LOGMNR_INTERNAL.DUMP_STREAMS_CKPT_DATA +DBMS_LOGMNR_INTERNAL.GET_BRANCH_INFO +DBMS_LOGMNR_INTERNAL.GET_PROCESS_ROLE# +DBMS_LOGMNR_INTERNAL.GET_SESSION_ACTION_TYPE# +DBMS_LOGMNR_INTERNAL.INJECTCOMMITORROLLBACK +DBMS_LOGMNR_INTERNAL.INSERT_INTO_SESSION_ACTION_TBL +DBMS_LOGMNR_INTERNAL.INT_BUILD +DBMS_LOGMNR_INTERNAL.KRVGDRM2 +DBMS_LOGMNR_INTERNAL.KRVIPLEAD +DBMS_LOGMNR_INTERNAL.KRVIPLENTER +DBMS_LOGMNR_INTERNAL.KRVIPLEXIT +DBMS_LOGMNR_INTERNAL.KRVIPLIAD +DBMS_LOGMNR_INTERNAL.KRVIPLIMM +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVICL +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIFTSI +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIISAC +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVILD +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVILSS +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVILT +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIULD +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIULSS +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIULT +DBMS_LOGMNR_INTERNAL.LOGMNR_SESSION_EVOLVE_DIVERGED +DBMS_LOGMNR_INTERNAL.PRUNE_STREAMS_CKPT +DBMS_LOGMNR_INTERNAL.REPLACE_DICTIONARY_BEGIN +DBMS_LOGMNR_INTERNAL.REPLACE_DICTIONARY_END +DBMS_LOGMNR_INTERNAL.SET_SESSION_ACTION +DBMS_LOGMNR_INTERNAL.SET_SESSION_ACTION_HELPER +DBMS_LOGMNR_INTERNAL.SHARE_PERSISTENT_DICTIONARY +DBMS_LOGMNR_INTERNAL.SKIP_RBA +DBMS_LOGMNR_INTERNAL.TRACEREDOLOGS +DBMS_LOGMNR_INTERNAL.TRACE_FOREIGN_LOG_INFO +DBMS_LOGMNR_INTERNAL.TRACE_LOCAL_LOG_INFO +DBMS_LOGMNR_INTERNAL.TRACE_LOCAL_XID +DBMS_LOGMNR_INTERNAL.TRACE_TABLE_LOCAL_DICT +DBMS_LOGMNR_INTERNAL.UNSET_SESSION_ACTION +DBMS_LOGMNR_INTERNAL.UNSET_SESSION_ACTION_HELPER +DBMS_LOGMNR_INTERNAL.UNSKIP_RBA +DBMS_LOGMNR_INTERNAL.UPGRADE_CKPT +DBMS_LOGMNR_LOGREP_DICT. +DBMS_LOGMNR_LOGREP_DICT.ADD_COL +DBMS_LOGMNR_LOGREP_DICT.ADD_GLOBAL_NAME +DBMS_LOGMNR_LOGREP_DICT.ADD_OBJ +DBMS_LOGMNR_LOGREP_DICT.COMMIT_XID +DBMS_LOGMNR_LOGREP_DICT.DEL_OBJ +DBMS_LOGMNR_LOGREP_DICT.PURGE_GLOBAL_NAME +DBMS_LOGMNR_LOGREP_DICT.PURGE_OBJ +DBMS_LOGMNR_LOGREP_DICT.PURGE_SCN +DBMS_LOGMNR_LOGREP_DICT.ROLLBACK_XID +DBMS_LOGMNR_LOGREP_DICT.SYSTEM_INFO_EXP +DBMS_LOGMNR_SESSION. +DBMS_LOGMNR_SESSION.ADD_LOG_FILE +DBMS_LOGMNR_SESSION.ATTACH_SESSION +DBMS_LOGMNR_SESSION.CLONE_CONTEXT +DBMS_LOGMNR_SESSION.COLUMN_PRESENT +DBMS_LOGMNR_SESSION.CREATE_SESSION +DBMS_LOGMNR_SESSION.DESTROY_SESSION +DBMS_LOGMNR_SESSION.DETACH_SESSION +DBMS_LOGMNR_SESSION.MINE_VALUE +DBMS_LOGMNR_SESSION.PREPARE_SCN_RANGE +DBMS_LOGMNR_SESSION.PURGE_SESSION +DBMS_LOGMNR_SESSION.RELEASE_SCN_RANGE +DBMS_LOGMNR_SESSION.REMOVE_LOG_FILE +DBMS_LOGMNR_SESSION.SET_DICT_ATTR +DBMS_LOGMNR_SESSION.SET_SESSION_PARAMS +DBMS_LOGREP_DEF_PROC_UTL. +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_DROP_TABLE +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_DROP_USER +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_NEW_TABLE +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_NEW_USER +DBMS_LOGREP_EXP. +DBMS_LOGREP_EXP.ANYDATA_IMPORT_STRING +DBMS_LOGREP_EXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_LOGREP_EXP.INTERNAL_TRANSFORM_EXPORT +DBMS_LOGREP_EXP.SCHEMA_INFO_EXP +DBMS_LOGREP_EXP.SYSTEM_INFO_EXP +DBMS_LOGREP_EXP.VERSION_VAR2_2_NUMBER +DBMS_LOGREP_IMP. +DBMS_LOGREP_IMP.APPLY_ERROR +DBMS_LOGREP_IMP.APPLY_ERROR_TXN +DBMS_LOGREP_IMP.APPLY_MILESTONE +DBMS_LOGREP_IMP.APPLY_PROGRESS +DBMS_LOGREP_IMP.BUMP_SCN +DBMS_LOGREP_IMP.CREATE_APPLY +DBMS_LOGREP_IMP.CREATE_CAPTURE +DBMS_LOGREP_IMP.CREATE_PROPAGATION +DBMS_LOGREP_IMP.CREATE_SYNC_CAPTURE +DBMS_LOGREP_IMP.DATE_CONVERT +DBMS_LOGREP_IMP.INCLUDE_EXTRA_ATTRIBUTE +DBMS_LOGREP_IMP.INSTANTIATE +DBMS_LOGREP_IMP.INSTANTIATE_SCHEMA +DBMS_LOGREP_IMP.IS_IMPORT_CONFIGURATION +DBMS_LOGREP_IMP.IS_IMPORT_INSTANTIATION +DBMS_LOGREP_IMP.IS_SWITCH_USER +DBMS_LOGREP_IMP.MESSAGE_CONSUMERS +DBMS_LOGREP_IMP.MESSAGE_RULES +DBMS_LOGREP_IMP.PREPARE_DDL +DBMS_LOGREP_IMP.PREPARE_OBJECT +DBMS_LOGREP_IMP.PREPARE_SYNC_OBJECT +DBMS_LOGREP_IMP.PRIVILEGED_USER +DBMS_LOGREP_IMP.SET_APPLY_PARAM +DBMS_LOGREP_IMP.SET_APPLY_SOURCE_OBJ +DBMS_LOGREP_IMP.SET_APPLY_SOURCE_SCHEMA +DBMS_LOGREP_IMP.SET_CAPTURE_PARAM +DBMS_LOGREP_IMP.SET_DML_HANDLER +DBMS_LOGREP_IMP.SET_IMPORT_MODE +DBMS_LOGREP_IMP.SET_KEY_COLUMNS +DBMS_LOGREP_IMP.SET_UPDATE_CONFLICT_HANDLER +DBMS_LOGREP_IMP.START_APPLY +DBMS_LOGREP_IMP.START_CAPTURE +DBMS_LOGREP_IMP.START_QUEUE +DBMS_LOGREP_IMP.STREAMS_RULES +DBMS_LOGREP_IMP_INTERNAL. +DBMS_LOGREP_IMP_INTERNAL.APPLY_ERROR +DBMS_LOGREP_IMP_INTERNAL.APPLY_ERROR_TXN +DBMS_LOGREP_IMP_INTERNAL.APPLY_MILESTONE +DBMS_LOGREP_IMP_INTERNAL.APPLY_PROGRESS +DBMS_LOGREP_IMP_INTERNAL.INSTANTIATE +DBMS_LOGREP_IMP_INTERNAL.INSTANTIATE_SCHEMA +DBMS_LOGREP_IMP_INTERNAL.PREPARE_DDL +DBMS_LOGREP_IMP_INTERNAL.PRIVILEGED_USER +DBMS_LOGREP_IMP_INTERNAL.STREAMS_RULES +DBMS_LOGREP_IMP_INTERNAL.UPDATE_APPLY_PROCESS +DBMS_LOGREP_UTIL. +DBMS_LOGREP_UTIL.BIC +DBMS_LOGREP_UTIL.BIS +DBMS_LOGREP_UTIL.BIT +DBMS_LOGREP_UTIL.BITOR +DBMS_LOGREP_UTIL.BUMP_SCN +DBMS_LOGREP_UTIL.CANONICALIZE +DBMS_LOGREP_UTIL.CANONICAL_CONCAT +DBMS_LOGREP_UTIL.CANON_DBLINK +DBMS_LOGREP_UTIL.CHECK_DBLINK +DBMS_LOGREP_UTIL.COMPATIBLE_VARCHAR_TO_INT +DBMS_LOGREP_UTIL.CONVERT_INT_TO_EXT_LCR +DBMS_LOGREP_UTIL.DROP_UNUSED_RULE_SETS +DBMS_LOGREP_UTIL.DUMP_TRACE +DBMS_LOGREP_UTIL.ENQUOTE_LITERAL +DBMS_LOGREP_UTIL.ENQUOTE_NAME +DBMS_LOGREP_UTIL.ENSURE_STREAMS +DBMS_LOGREP_UTIL.FORCE_XSTREAM +DBMS_LOGREP_UTIL.GENERIC_CANONICALIZE +DBMS_LOGREP_UTIL.GET_CHECKPOINT_SCNS +DBMS_LOGREP_UTIL.GET_CONSISTENT_SCN +DBMS_LOGREP_UTIL.GET_CONSTRAINT_NAME +DBMS_LOGREP_UTIL.GET_LAST_ENQ_SCN +DBMS_LOGREP_UTIL.GET_LOCK +DBMS_LOGREP_UTIL.GET_OBJECT_LOCK +DBMS_LOGREP_UTIL.GET_OBJECT_NAME +DBMS_LOGREP_UTIL.GET_PROC_USE_CONTEXT +DBMS_LOGREP_UTIL.GET_PROC_USE_CONTEXT_INT +DBMS_LOGREP_UTIL.GET_QUEUE_OID +DBMS_LOGREP_UTIL.GET_REAL_CHECKPOINT_SCNS +DBMS_LOGREP_UTIL.GET_REQ_CKPT_SCN +DBMS_LOGREP_UTIL.GET_RS_LOCKS +DBMS_LOGREP_UTIL.GET_RULE_ACTION_CONTEXT +DBMS_LOGREP_UTIL.GET_STR_COMPAT +DBMS_LOGREP_UTIL.GG_XSTREAM_QTABLE +DBMS_LOGREP_UTIL.IS_BUILT_IN_TYPE +DBMS_LOGREP_UTIL.LCR_CACHE_PURGE +DBMS_LOGREP_UTIL.LOCK_PROCESS +DBMS_LOGREP_UTIL.MESSAGE_TRACKING_PURGE +DBMS_LOGREP_UTIL.MESSAGE_TRACKING_RESIZE +DBMS_LOGREP_UTIL.PRE_11_2_DB +DBMS_LOGREP_UTIL.RAISE_CONFIG_ERROR +DBMS_LOGREP_UTIL.RAISE_SYSTEM_ERROR +DBMS_LOGREP_UTIL.RAISE_SYSTEM_ERROR_3GL +DBMS_LOGREP_UTIL.RAWS +DBMS_LOGREP_UTIL.RELEASE_LOCK +DBMS_LOGREP_UTIL.RELEASE_OBJECT_LOCK +DBMS_LOGREP_UTIL.RELEASE_RS_LOCKS +DBMS_LOGREP_UTIL.SET_ALLOCATED_MEMORY +DBMS_LOGREP_UTIL.SET_CCA_MAX_PERCENTAGE +DBMS_LOGREP_UTIL.SET_PARAMETER +DBMS_LOGREP_UTIL.SET_STREAMS_AUTO_FILTER +DBMS_LOGREP_UTIL.SET_SUPP_LOGGING +DBMS_LOGREP_UTIL.START_PROCESS +DBMS_LOGREP_UTIL.STOP_PROCESS +DBMS_LOGREP_UTIL.STREAMS_TRANSACTION_PURGE +DBMS_LOGREP_UTIL.UNLOCK_PROCESS +DBMS_LOGREP_UTIL.WRAP_DQT +DBMS_LOGREP_UTIL.WRITE_ERROR +DBMS_LOGREP_UTIL.WRITE_TRACE +DBMS_LOGREP_UTIL_INVOK. +DBMS_LOGREP_UTIL_INVOK.CHECK_BECOME_USER_PRIVILEGE +DBMS_LOGREP_UTIL_INVOK.CHECK_DV_STREAMS_ADMIN +DBMS_LOGSTDBY. +DBMS_LOGSTDBY.APPLY_SET +DBMS_LOGSTDBY.APPLY_UNSET +DBMS_LOGSTDBY.BUILD +DBMS_LOGSTDBY.DB_IS_LOGSTDBY +DBMS_LOGSTDBY.EDS_ADD_TABLE +DBMS_LOGSTDBY.EDS_EVOLVE_TABLE +DBMS_LOGSTDBY.EDS_REMOVE_TABLE +DBMS_LOGSTDBY.INSTANTIATE_TABLE +DBMS_LOGSTDBY.IS_APPLY_SERVER +DBMS_LOGSTDBY.MAP_PRIMARY_SCN +DBMS_LOGSTDBY.PREPARE_FOR_NEW_PRIMARY +DBMS_LOGSTDBY.PURGE_SESSION +DBMS_LOGSTDBY.REBUILD +DBMS_LOGSTDBY.SET_TABLESPACE +DBMS_LOGSTDBY.SKIP +DBMS_LOGSTDBY.SKIP_ERROR +DBMS_LOGSTDBY.SKIP_TRANSACTION +DBMS_LOGSTDBY.UNSKIP +DBMS_LOGSTDBY.UNSKIP_ERROR +DBMS_LOGSTDBY.UNSKIP_TRANSACTION +DBMS_LOGSTDBY.VALIDATE_AUTH +DBMS_MAINT_GEN. +DBMS_MAINT_GEN.GENERATE_MAINT_TRIGGER +DBMS_MANAGEMENT_PACKS. +DBMS_MANAGEMENT_PACKS.CHECK_PACK_ENABLED +DBMS_MANAGEMENT_PACKS.MODIFY_AWR_SETTINGS +DBMS_MANAGEMENT_PACKS.PURGE +DBMS_MANAGEMENT_PACKS.PURGE_AWR +DBMS_MANAGEMENT_PACKS.REPORT +DBMS_METADATA. +DBMS_METADATA.ADD_TRANSFORM +DBMS_METADATA.CHECK_MATCH_TEMPLATE +DBMS_METADATA.CHECK_MATCH_TEMPLATE_LOB +DBMS_METADATA.CHECK_MATCH_TEMPLATE_PAR +DBMS_METADATA.CHECK_TYPE +DBMS_METADATA.CLOSE +DBMS_METADATA.CONVERT +DBMS_METADATA.CONVERT_TO_CANONICAL +DBMS_METADATA.FETCH_CLOB +DBMS_METADATA.FETCH_DDL +DBMS_METADATA.FETCH_DDL_TEXT +DBMS_METADATA.FETCH_OBJNUMS +DBMS_METADATA.FETCH_OBJNUMS_NAMES +DBMS_METADATA.FETCH_SORTED_OBJNUMS +DBMS_METADATA.FETCH_XML +DBMS_METADATA.FETCH_XML_CLOB +DBMS_METADATA.FREE_CONTEXT_ENTRY +DBMS_METADATA.GET_ACTION_INSTANCE +DBMS_METADATA.GET_ACTION_SCHEMA +DBMS_METADATA.GET_ACTION_SYS +DBMS_METADATA.GET_CANONICAL_VSN +DBMS_METADATA.GET_CHECK_CONSTRAINT_NAME +DBMS_METADATA.GET_DDL +DBMS_METADATA.GET_DEPENDENT_DDL +DBMS_METADATA.GET_DEPENDENT_SXML +DBMS_METADATA.GET_DEPENDENT_XML +DBMS_METADATA.GET_DOMIDX_METADATA +DBMS_METADATA.GET_DPSTRM_MD +DBMS_METADATA.GET_EDITION +DBMS_METADATA.GET_EDITION_ID +DBMS_METADATA.GET_FK_CONSTRAINT_NAME +DBMS_METADATA.GET_GRANTED_DDL +DBMS_METADATA.GET_GRANTED_XML +DBMS_METADATA.GET_HASHCODE +DBMS_METADATA.GET_INDEX_INTCOL +DBMS_METADATA.GET_JAVA_METADATA +DBMS_METADATA.GET_PLUGTS_BLK +DBMS_METADATA.GET_PREPOST_TABLE_ACT +DBMS_METADATA.GET_PROCOBJ +DBMS_METADATA.GET_PROCOBJ_GRANT +DBMS_METADATA.GET_QUERY +DBMS_METADATA.GET_STAT_COLNAME +DBMS_METADATA.GET_STAT_INDNAME +DBMS_METADATA.GET_SXML +DBMS_METADATA.GET_SXML_DDL +DBMS_METADATA.GET_SYSPRIVS +DBMS_METADATA.GET_VERSION +DBMS_METADATA.GET_XML +DBMS_METADATA.IS_ATTR_VALID_ON_10 +DBMS_METADATA.NETWORK_CALLOUTS +DBMS_METADATA.NETWORK_FETCH_CLOB +DBMS_METADATA.NETWORK_FETCH_ERRORS +DBMS_METADATA.NETWORK_FETCH_PARSE +DBMS_METADATA.NETWORK_OPEN +DBMS_METADATA.NET_SET_DEBUG +DBMS_METADATA.OKTOEXP_2NDARY_TABLE +DBMS_METADATA.OPEN +DBMS_METADATA.OPENW +DBMS_METADATA.OPEN_GET_FK_CONSTRAINT_NAME +DBMS_METADATA.PARSE_CONDITION +DBMS_METADATA.PARSE_DEFAULT +DBMS_METADATA.PARSE_QUERY +DBMS_METADATA.PATCH_TYPEID +DBMS_METADATA.PUT +DBMS_METADATA.SET_COUNT +DBMS_METADATA.SET_DEBUG +DBMS_METADATA.SET_FILTER +DBMS_METADATA.SET_FK_CONSTRAINT_COL_PAIR +DBMS_METADATA.SET_PARAMETER +DBMS_METADATA.SET_PARSE_ITEM +DBMS_METADATA.SET_REMAP_PARAM +DBMS_METADATA.SET_TRANSFORM_PARAM +DBMS_METADATA.SET_XMLFORMAT +DBMS_METADATA_BUILD. +DBMS_METADATA_BUILD.CLOSE +DBMS_METADATA_BUILD.CREATE_FILTER +DBMS_METADATA_BUILD.CREATE_TYPE +DBMS_METADATA_BUILD.DROP_TYPE +DBMS_METADATA_BUILD.SET_DEBUG +DBMS_METADATA_BUILD.SET_DEBUG_PARAM +DBMS_METADATA_BUILD.SET_FILTER_PARAM +DBMS_METADATA_BUILD.SET_TYPE_PARAM +DBMS_METADATA_DIFF. +DBMS_METADATA_DIFF.ADD_DOCUMENT +DBMS_METADATA_DIFF.CLOSE +DBMS_METADATA_DIFF.COMPARE_ALTER +DBMS_METADATA_DIFF.COMPARE_ALTER_XML +DBMS_METADATA_DIFF.COMPARE_SXML +DBMS_METADATA_DIFF.FETCH_CLOB +DBMS_METADATA_DIFF.OPENC +DBMS_METADATA_DPBUILD. +DBMS_METADATA_DPBUILD.CREATE_DATABASE_EXPORT +DBMS_METADATA_DPBUILD.CREATE_SCHEMA_EXPORT +DBMS_METADATA_DPBUILD.CREATE_TABLE_EXPORT +DBMS_METADATA_DPBUILD.CREATE_TRANSPORTABLE_EXPORT +DBMS_METADATA_INT. +DBMS_METADATA_INT.ADD_TRANSFORM +DBMS_METADATA_INT.CLOSE +DBMS_METADATA_INT.COMPARE +DBMS_METADATA_INT.DO_PARSE_TRANSFORM +DBMS_METADATA_INT.DO_TRANSFORM +DBMS_METADATA_INT.GET_PARSE_DELIM +DBMS_METADATA_INT.GET_QUERY +DBMS_METADATA_INT.GET_VIEW_FILTER_INPUTS +DBMS_METADATA_INT.GET_XML_INPUTS +DBMS_METADATA_INT.IS_ATTR_VALID_ON_10 +DBMS_METADATA_INT.NEXT_OBJECT +DBMS_METADATA_INT.OPEN +DBMS_METADATA_INT.OPENC +DBMS_METADATA_INT.OPENW +DBMS_METADATA_INT.PRINT_CTXS +DBMS_METADATA_INT.SET_COUNT +DBMS_METADATA_INT.SET_DEBUG +DBMS_METADATA_INT.SET_FILTER +DBMS_METADATA_INT.SET_OBJECTS_FETCHED +DBMS_METADATA_INT.SET_PARSE_ITEM +DBMS_METADATA_INT.SET_REMAP_PARAM +DBMS_METADATA_INT.SET_TRANSFORM_PARAM +DBMS_METADATA_INT.SET_XMLFORMAT +DBMS_METADATA_UTIL. +DBMS_METADATA_UTIL.ARE_STYLESHEETS_LOADED +DBMS_METADATA_UTIL.BINARY2VARCHAR +DBMS_METADATA_UTIL.CHECK_TYPE +DBMS_METADATA_UTIL.CONVERT_TO_CANONICAL +DBMS_METADATA_UTIL.DELETE_XMLSCHEMA +DBMS_METADATA_UTIL.GET_ANC +DBMS_METADATA_UTIL.GET_ATTRNAME +DBMS_METADATA_UTIL.GET_AUDIT +DBMS_METADATA_UTIL.GET_AUDIT_DEFAULT +DBMS_METADATA_UTIL.GET_BASE_COL_NAME +DBMS_METADATA_UTIL.GET_BASE_COL_TYPE +DBMS_METADATA_UTIL.GET_BASE_INTCOL_NUM +DBMS_METADATA_UTIL.GET_CANONICAL_VSN +DBMS_METADATA_UTIL.GET_COL_PROPERTY +DBMS_METADATA_UTIL.GET_COMPAT_VSN +DBMS_METADATA_UTIL.GET_DB_VSN +DBMS_METADATA_UTIL.GET_EDITIONID +DBMS_METADATA_UTIL.GET_ENDIANNESS +DBMS_METADATA_UTIL.GET_FULLATTRNAME +DBMS_METADATA_UTIL.GET_INDEX_INTCOL +DBMS_METADATA_UTIL.GET_LATEST_VSN +DBMS_METADATA_UTIL.GET_LOB_PROPERTY +DBMS_METADATA_UTIL.GET_OPEN_MODE +DBMS_METADATA_UTIL.GET_PROCOBJ_ERRORS +DBMS_METADATA_UTIL.GET_REFRESH_ADD_DBA +DBMS_METADATA_UTIL.GET_REFRESH_ADD_USER +DBMS_METADATA_UTIL.GET_REFRESH_MAKE_DBA +DBMS_METADATA_UTIL.GET_REFRESH_MAKE_USER +DBMS_METADATA_UTIL.GET_SOURCE_LINES +DBMS_METADATA_UTIL.GET_VERS_DPAPI +DBMS_METADATA_UTIL.GET_XMLCOLSET +DBMS_METADATA_UTIL.GET_XMLTYPE_FMTS +DBMS_METADATA_UTIL.HAS_TSTZ_COLS +DBMS_METADATA_UTIL.HAS_TSTZ_ELEMENTS +DBMS_METADATA_UTIL.ISXML +DBMS_METADATA_UTIL.IS_OMF +DBMS_METADATA_UTIL.LOAD_STYLESHEETS +DBMS_METADATA_UTIL.LOAD_XSD +DBMS_METADATA_UTIL.LONG2CLOB +DBMS_METADATA_UTIL.LONG2VARCHAR +DBMS_METADATA_UTIL.LONG2VCMAX +DBMS_METADATA_UTIL.LONG2VCNT +DBMS_METADATA_UTIL.NULLTOCHR0 +DBMS_METADATA_UTIL.PARSE_CONDITION +DBMS_METADATA_UTIL.PARSE_DEFAULT +DBMS_METADATA_UTIL.PARSE_QUERY +DBMS_METADATA_UTIL.PARSE_TRIGGER_DEFINITION +DBMS_METADATA_UTIL.PATCH_TYPEID +DBMS_METADATA_UTIL.PUT_BOOL +DBMS_METADATA_UTIL.PUT_LINE +DBMS_METADATA_UTIL.REF_PAR_LEVEL +DBMS_METADATA_UTIL.REF_PAR_PARENT +DBMS_METADATA_UTIL.SAVE_PROCOBJ_ERRORS +DBMS_METADATA_UTIL.SET_DEBUG +DBMS_METADATA_UTIL.SET_FORCE_LOB_BE +DBMS_METADATA_UTIL.SET_FORCE_NO_ENCRYPT +DBMS_METADATA_UTIL.SET_VERS_DPAPI +DBMS_METADATA_UTIL.VSN2NUM +DBMS_METADATA_UTIL.WRITE_CLOB +DBMS_MONITOR. +DBMS_MONITOR.CLIENT_ID_STAT_DISABLE +DBMS_MONITOR.CLIENT_ID_STAT_ENABLE +DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE +DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE +DBMS_MONITOR.DATABASE_TRACE_DISABLE +DBMS_MONITOR.DATABASE_TRACE_ENABLE +DBMS_MONITOR.SERV_MOD_ACT_STAT_DISABLE +DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE +DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE +DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE +DBMS_MONITOR.SESSION_TRACE_DISABLE +DBMS_MONITOR.SESSION_TRACE_ENABLE +DBMS_NETWORK_ACL_ADMIN. +DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE +DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL +DBMS_NETWORK_ACL_ADMIN.ASSIGN_WALLET_ACL +DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE +DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID +DBMS_NETWORK_ACL_ADMIN.CREATE_ACL +DBMS_NETWORK_ACL_ADMIN.DELETE_PRIVILEGE +DBMS_NETWORK_ACL_ADMIN.DROP_ACL +DBMS_NETWORK_ACL_ADMIN.HANDLEPREDELETE +DBMS_NETWORK_ACL_ADMIN.UNASSIGN_ACL +DBMS_NETWORK_ACL_ADMIN.UNASSIGN_WALLET_ACL +DBMS_NETWORK_ACL_UTILITY. +DBMS_NETWORK_ACL_UTILITY.CONTAINS_HOST +DBMS_NETWORK_ACL_UTILITY.DOMAINS +DBMS_NETWORK_ACL_UTILITY.DOMAIN_LEVEL +DBMS_NETWORK_ACL_UTILITY.EQUALS_HOST +DBMS_OBFUSCATION_TOOLKIT. +DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT +DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT +DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY +DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT +DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT +DBMS_OBFUSCATION_TOOLKIT.DESGETKEY +DBMS_OBFUSCATION_TOOLKIT.MD5 +DBMS_OBFUSCATION_TOOLKIT_FFI. +DBMS_OBFUSCATION_TOOLKIT_FFI.DES3DECRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.DES3ENCRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.DESDECRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.DESENCRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.GETKEY +DBMS_OBFUSCATION_TOOLKIT_FFI.MD5 +DBMS_OBJECTS_UTILS. +DBMS_OBJECTS_UTILS.UPGRADE_DICT_IMAGE +DBMS_ODCI. +DBMS_ODCI.CLEANUP +DBMS_ODCI.ESTIMATE_CPU_UNITS +DBMS_ODCI.GETMETADATA +DBMS_ODCI.GETTABLENAMES +DBMS_ODCI.RESTOREREFCURSOR +DBMS_ODCI.SAVEREFCURSOR +DBMS_ODCI.UPGRADE_SECOBJ +DBMS_ODM. +DBMS_ODM.CREATECUBELEVELTUPLE +DBMS_ODM.CREATEDIMLEVTUPLE +DBMS_ODM.CREATEDIMMV_GS +DBMS_ODM.CREATEDIMOWB +DBMS_ODM.CREATEFACTMV_GS +DBMS_ODM.CREATEFACTOWB +DBMS_ODM.CREATESTDFACTMV +DBMS_ODM.CREATESTDFACTMVOWB +DBMS_ODM.ODMVERSION +DBMS_ODM.ODM_VERSION +DBMS_OFFLINE_INTERNAL. +DBMS_OFFLINE_INTERNAL.DISABLE_PROP_TO_EXISTING_SITES +DBMS_OFFLINE_INTERNAL.DISABLE_PROP_TO_SITE +DBMS_OFFLINE_INTERNAL.ENABLE_PROP_TO_EXISTING_SITES +DBMS_OFFLINE_INTERNAL.ENABLE_PROP_TO_SITE +DBMS_OFFLINE_INTERNAL.GET_MASTERS +DBMS_OFFLINE_OG. +DBMS_OFFLINE_OG.BEGIN_FLAVOR_CHANGE +DBMS_OFFLINE_OG.BEGIN_INSTANTIATION +DBMS_OFFLINE_OG.BEGIN_LOAD +DBMS_OFFLINE_OG.END_FLAVOR_CHANGE +DBMS_OFFLINE_OG.END_INSTANTIATION +DBMS_OFFLINE_OG.END_LOAD +DBMS_OFFLINE_OG.RESUME_SUBSET_OF_MASTERS +DBMS_OFFLINE_RGT. +DBMS_OFFLINE_RGT.ADD_CONFLICT_OFFLINE +DBMS_OFFLINE_RGT.ADD_FLAVOR_OBJECT_OFFLINE +DBMS_OFFLINE_RGT.ADD_FLAVOR_OFFLINE +DBMS_OFFLINE_RGT.ADD_GROUPED_COLUMN_OFFLINE +DBMS_OFFLINE_RGT.ADD_INTERNAL_PKG +DBMS_OFFLINE_RGT.ADD_MASTER_OFFLINE +DBMS_OFFLINE_RGT.ADD_PARAMETER_COLUMN_OFFLINE +DBMS_OFFLINE_RGT.ADD_PRIORITY_GROUP_OFFLINE +DBMS_OFFLINE_RGT.ADD_PRIORITY_OFFLINE +DBMS_OFFLINE_RGT.ADD_REPCOLUMN_OFFLINE +DBMS_OFFLINE_RGT.ADD_REPOBJECT_OFFLINE +DBMS_OFFLINE_RGT.ADD_RESOLUTION_OFFLINE +DBMS_OFFLINE_RGT.ADD_SNAPMASTER_OFFLINE +DBMS_OFFLINE_RGT.UPDATE_COLUMN_ID_OFFLINE +DBMS_OFFLINE_SNAPSHOT. +DBMS_OFFLINE_SNAPSHOT.BEGIN_LOAD +DBMS_OFFLINE_SNAPSHOT.END_LOAD +DBMS_OFFLINE_UTL. +DBMS_OFFLINE_UTL.DISABLE_TRIGGERS +DBMS_OFFLINE_UTL.ENABLE_TRIGGERS +DBMS_OFFLINE_UTL.LOAD_STRING_FROM_TAB +DBMS_OFFLINE_UTL.PRINT_MASTERS +DBMS_OFFLINE_UTL.PRINT_STRINGS +DBMS_OUTPUT. +DBMS_OUTPUT.DISABLE +DBMS_OUTPUT.ENABLE +DBMS_OUTPUT.GET_LINE +DBMS_OUTPUT.GET_LINES +DBMS_OUTPUT.NEW_LINE +DBMS_OUTPUT.PUT +DBMS_OUTPUT.PUT_LINE +DBMS_OWB. +DBMS_OWB.VALIDATE +DBMS_PARALLEL_EXECUTE. +DBMS_PARALLEL_EXECUTE.ADM_DROP_CHUNKS +DBMS_PARALLEL_EXECUTE.ADM_DROP_TASK +DBMS_PARALLEL_EXECUTE.ADM_STOP_TASK +DBMS_PARALLEL_EXECUTE.ADM_TASK_STATUS +DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_NUMBER_COL +DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_ROWID +DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_SQL +DBMS_PARALLEL_EXECUTE.CREATE_TASK +DBMS_PARALLEL_EXECUTE.DROP_CHUNKS +DBMS_PARALLEL_EXECUTE.DROP_TASK +DBMS_PARALLEL_EXECUTE.GENERATE_TASK_NAME +DBMS_PARALLEL_EXECUTE.GET_NUMBER_COL_CHUNK +DBMS_PARALLEL_EXECUTE.GET_ROWID_CHUNK +DBMS_PARALLEL_EXECUTE.PURGE_PROCESSED_CHUNKS +DBMS_PARALLEL_EXECUTE.RESUME_TASK +DBMS_PARALLEL_EXECUTE.RUN_INTERNAL_WORKER +DBMS_PARALLEL_EXECUTE.RUN_TASK +DBMS_PARALLEL_EXECUTE.SET_CHUNK_STATUS +DBMS_PARALLEL_EXECUTE.STOP_TASK +DBMS_PARALLEL_EXECUTE.TASK_STATUS +DBMS_PARALLEL_EXECUTE_INTERNAL. +DBMS_PARALLEL_EXECUTE_INTERNAL.ASSERT_CHUNK_EXISTS +DBMS_PARALLEL_EXECUTE_INTERNAL.ASSERT_TASK_EXISTS +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_CHUNKS_BY_NUMBER_COL +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_CHUNKS_BY_ROWID +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_CHUNKS_BY_SQL +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.DEFAULT_PARALLELISM +DBMS_PARALLEL_EXECUTE_INTERNAL.DROP_ALL_TASKS +DBMS_PARALLEL_EXECUTE_INTERNAL.DROP_CHUNKS +DBMS_PARALLEL_EXECUTE_INTERNAL.DROP_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.GENERATE_TASK_NAME +DBMS_PARALLEL_EXECUTE_INTERNAL.GET_RANGE +DBMS_PARALLEL_EXECUTE_INTERNAL.OWNER_NAME_TO_NUM +DBMS_PARALLEL_EXECUTE_INTERNAL.PURGE_PROCESSED_CHUNKS +DBMS_PARALLEL_EXECUTE_INTERNAL.READ_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.RUN_INTERNAL_WORKER +DBMS_PARALLEL_EXECUTE_INTERNAL.SEQ_NEXT_VAL +DBMS_PARALLEL_EXECUTE_INTERNAL.SET_CHUNK_STATUS +DBMS_PARALLEL_EXECUTE_INTERNAL.STOP_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.TASK_STATUS +DBMS_PARALLEL_EXECUTE_INTERNAL.UNASSIGN_CHUNKS +DBMS_PARALLEL_EXECUTE_INTERNAL.UPDATE_TASK +DBMS_PCLXUTIL. +DBMS_PCLXUTIL.BUILD_PART_INDEX +DBMS_PICKLER. +DBMS_PICKLER.GET_FORMAT +DBMS_PICKLER.GET_TYPE_SHAPE +DBMS_PICKLER.UPDATE_THROUGH_REF +DBMS_PIPE. +DBMS_PIPE.CREATE_PIPE +DBMS_PIPE.NEXT_ITEM_TYPE +DBMS_PIPE.PACK_MESSAGE +DBMS_PIPE.PACK_MESSAGE_RAW +DBMS_PIPE.PACK_MESSAGE_ROWID +DBMS_PIPE.PURGE +DBMS_PIPE.RECEIVE_MESSAGE +DBMS_PIPE.REMOVE_PIPE +DBMS_PIPE.RESET_BUFFER +DBMS_PIPE.SEND_MESSAGE +DBMS_PIPE.UNIQUE_SESSION_NAME +DBMS_PIPE.UNPACK_MESSAGE +DBMS_PIPE.UNPACK_MESSAGE_RAW +DBMS_PIPE.UNPACK_MESSAGE_ROWID +DBMS_PITR. +DBMS_PITR.ADJUSTCOMPATIBILITY +DBMS_PITR.BEGINEXPORT +DBMS_PITR.BEGINIMPORT +DBMS_PITR.BEGINTABLESPACE +DBMS_PITR.COMMITPITR +DBMS_PITR.DOFILEVERIFY +DBMS_PITR.ENDIMPORT +DBMS_PITR.ENDTABLESPACE +DBMS_PITR.GETLINE +DBMS_PITR.SELECTBLOCK +DBMS_PITR.SELECTTABLESPACE +DBMS_PLUGTS. +DBMS_PLUGTS.BEGINEXPORT +DBMS_PLUGTS.BEGINEXPTABLESPACE +DBMS_PLUGTS.BEGINIMPORT +DBMS_PLUGTS.BEGINIMPTABLESPACE +DBMS_PLUGTS.CHECKCOMPTYPE +DBMS_PLUGTS.CHECKDATAFILE +DBMS_PLUGTS.CHECKPLUGGABLE +DBMS_PLUGTS.CHECKUSER +DBMS_PLUGTS.COMMITPLUGGABLE +DBMS_PLUGTS.ENDIMPORT +DBMS_PLUGTS.ENDIMPTABLESPACE +DBMS_PLUGTS.GETLINE +DBMS_PLUGTS.GET_DB_CHAR_PROPERTIES +DBMS_PLUGTS.INIT +DBMS_PLUGTS.KCP_ACOMP +DBMS_PLUGTS.KCP_ALDFTS +DBMS_PLUGTS.KCP_BEXP +DBMS_PLUGTS.KCP_CHECK_TTS_CHAR_SET_COMPAT +DBMS_PLUGTS.KCP_CHKCHAR +DBMS_PLUGTS.KCP_CHKXPLATFORM +DBMS_PLUGTS.KCP_CMT +DBMS_PLUGTS.KCP_GETCHAR +DBMS_PLUGTS.KCP_GETCOMP +DBMS_PLUGTS.KCP_GETFH +DBMS_PLUGTS.KCP_INIT +DBMS_PLUGTS.KCP_NEWTS +DBMS_PLUGTS.KCP_PLGDF +DBMS_PLUGTS.KCP_PLG_RECLAIM_SEGMENT +DBMS_PLUGTS.KCP_RDFH +DBMS_PLUGTS.MAPTS +DBMS_PLUGTS.MAPUSER +DBMS_PLUGTS.NEWDATAFILE +DBMS_PLUGTS.NEWTABLESPACE +DBMS_PLUGTS.PLUGGABLEUSER +DBMS_PLUGTS.RECLAIMTEMPSEGMENT +DBMS_PLUGTS.SB4_TO_UB4 +DBMS_PLUGTS.SELECTBLOCK +DBMS_PLUGTS.SENDTRACEMSG +DBMS_PLUGTS.SETDEBUG +DBMS_PLUGTSP. +DBMS_PLUGTSP.KCP_PD +DBMS_PLUGTSP.KCP_PTMD +DBMS_PLUGTSP.PATCHDICTIONARY +DBMS_PLUGTSP.PATCHLOBPROP +DBMS_PLUGTSP.PATCHTABLEMETADATA +DBMS_PREDICTIVE_ANALYTICS. +DBMS_PREDICTIVE_ANALYTICS.EXPLAIN +DBMS_PREDICTIVE_ANALYTICS.PREDICT +DBMS_PREDICTIVE_ANALYTICS.PROFILE +DBMS_PREPROCESSOR. +DBMS_PREPROCESSOR.GET_POST_PROCESSED_SOURCE +DBMS_PREPROCESSOR.PRINT_POST_PROCESSED_SOURCE +DBMS_PROFILER. +DBMS_PROFILER.FLUSH_DATA +DBMS_PROFILER.GET_VERSION +DBMS_PROFILER.INTERNAL_VERSION_CHECK +DBMS_PROFILER.PAUSE_PROFILER +DBMS_PROFILER.RESUME_PROFILER +DBMS_PROFILER.ROLLUP_RUN +DBMS_PROFILER.ROLLUP_UNIT +DBMS_PROFILER.START_PROFILER +DBMS_PROFILER.STOP_PROFILER +DBMS_PROPAGATION_ADM. +DBMS_PROPAGATION_ADM.ALTER_PROPAGATION +DBMS_PROPAGATION_ADM.CREATE_PROPAGATION +DBMS_PROPAGATION_ADM.DROP_PROPAGATION +DBMS_PROPAGATION_ADM.START_PROPAGATION +DBMS_PROPAGATION_ADM.STOP_PROPAGATION +DBMS_PROPAGATION_INTERNAL. +DBMS_PROPAGATION_INTERNAL.ALTER_PROPAGATION +DBMS_PROPAGATION_INTERNAL.CLEAR_PROP_ABORT_ALERT +DBMS_PROPAGATION_INTERNAL.CREATE_PROPAGATION +DBMS_PROPAGATION_INTERNAL.DROP_PROPAGATION +DBMS_PROPAGATION_INTERNAL.RAISE_PROP_ABORTED_ALERT_JOBID +DBMS_PROPAGATION_INTERNAL.START_PROPAGATION +DBMS_PROPAGATION_INTERNAL.STOP_PROPAGATION +DBMS_PRVTAQIM. +DBMS_PRVTAQIM.AQ_PATCH_CMT_TIME +DBMS_PRVTAQIM.AQ_PATCH_DEQUEUELOG_TABLE +DBMS_PRVTAQIM.AQ_PATCH_HISTORY +DBMS_PRVTAQIM.AQ_PATCH_IOT +DBMS_PRVTAQIM.AQ_PATCH_SIGNATURE +DBMS_PRVTAQIM.AQ_PATCH_TIMEMGR +DBMS_PRVTAQIM.BUFQ_VIEW_PARAMS +DBMS_PRVTAQIM.COMPRESS_IOT +DBMS_PRVTAQIM.CREATE_BASE_VIEW +DBMS_PRVTAQIM.CREATE_BASE_VIEW10_1_0 +DBMS_PRVTAQIM.CREATE_BASE_VIEW11_1_0 +DBMS_PRVTAQIM.CREATE_COMMIT_TIME_IOT +DBMS_PRVTAQIM.CREATE_DEQUEUE_IOT +DBMS_PRVTAQIM.CREATE_DEQUEUE_LOG +DBMS_PRVTAQIM.CREATE_DEQ_VIEW +DBMS_PRVTAQIM.CREATE_DEQ_VIEW_PRE11_2 +DBMS_PRVTAQIM.CREATE_HISTORY_IOT +DBMS_PRVTAQIM.CREATE_SIGNATURE_IOT +DBMS_PRVTAQIM.CREATE_TIMEMGMT_IOT +DBMS_PRVTAQIM.DOWNGRADE_QUEUE_TABLE +DBMS_PRVTAQIM.DROP_COMMIT_TIME_IOT +DBMS_PRVTAQIM.DROP_DEQUEUE_IOT +DBMS_PRVTAQIM.DROP_DEQUEUE_LOG +DBMS_PRVTAQIM.DROP_HISTORY_IOT +DBMS_PRVTAQIM.DROP_QUEUE +DBMS_PRVTAQIM.DROP_SIGNATURE_IOT +DBMS_PRVTAQIM.DROP_TIMEMGMT_IOT +DBMS_PRVTAQIM.UNCOMPRESS_IOT +DBMS_PRVTAQIM.UPDATE_IOT_MSG_ROWID +DBMS_PRVTAQIM.UPGRADE_QUEUE_TABLE +DBMS_PRVTAQIM.USER_DATA_COL +DBMS_PRVTAQIP. +DBMS_PRVTAQIP.ALTER_PROPAGATION_SCHEDULE +DBMS_PRVTAQIP.CREATE_PROP_TABLE_102 +DBMS_PRVTAQIP.CRT_XMLCMT_REQ +DBMS_PRVTAQIP.CRT_XMLRBK_REQ +DBMS_PRVTAQIP.CRT_XMLSEQ_REQ +DBMS_PRVTAQIP.CRT_XMLTYP_REQ +DBMS_PRVTAQIP.DEQ_NFY_QUEUE_102 +DBMS_PRVTAQIP.DISABLE_PROPAGATION_SCHEDULE +DBMS_PRVTAQIP.ENABLE_PROPAGATION_SCHEDULE +DBMS_PRVTAQIP.ENQ_NFY_QUEUE_102 +DBMS_PRVTAQIP.GET_SCHED_TYPE +DBMS_PRVTAQIP.GET_SEQNO_HTTP +DBMS_PRVTAQIP.HTTP_COMMIT +DBMS_PRVTAQIP.HTTP_PUSH +DBMS_PRVTAQIP.HTTP_ROLLBACK +DBMS_PRVTAQIP.IS_PROTO_SSL +DBMS_PRVTAQIP.I_UNSCHED_PROP +DBMS_PRVTAQIP.KWQP_3GL_MODPSENTRY +DBMS_PRVTAQIP.NEEDS_RECOVERY +DBMS_PRVTAQIP.RECOVER_PROPAGATION +DBMS_PRVTAQIP.RESUBMIT_JOBS_102 +DBMS_PRVTAQIP.SCHEDULE_PROPAGATION +DBMS_PRVTAQIP.TRANS_SCHED_INFO +DBMS_PRVTAQIP.TRUNCATE_PENDING_MESSAGES +DBMS_PRVTAQIP.TYPE_MATCHES +DBMS_PRVTAQIP.UPDATE_AQS_INSTANCE_102 +DBMS_PRVTAQIP.UPDATE_PROPJOB_AFFINITY_102 +DBMS_PRVTAQIP.UPDATE_SCHEDULE +DBMS_PRVTAQIP.UPDATE_SCHEDULE_CLEAR_ERROR +DBMS_PRVTAQIP.WRITE_REQUEST +DBMS_PRVTAQIP.WRITE_TRACE +DBMS_PRVTAQIS. +DBMS_PRVTAQIS.ADD_ADDRESS +DBMS_PRVTAQIS.ADD_PROXY +DBMS_PRVTAQIS.ADD_QUEUE_RULE +DBMS_PRVTAQIS.ADD_RCPT +DBMS_PRVTAQIS.ADD_RS_EXPDEP +DBMS_PRVTAQIS.ADD_SUBSCRIBER +DBMS_PRVTAQIS.ADD_SUBSCRIBER_RULE +DBMS_PRVTAQIS.ADD_TO_EXPDEP +DBMS_PRVTAQIS.AGENTID +DBMS_PRVTAQIS.AGENT_EXISTS +DBMS_PRVTAQIS.ALTER_SUBSCRIBER +DBMS_PRVTAQIS.AQ_PATCH_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.CANON_SUBTAB_RSNAME +DBMS_PRVTAQIS.CHECK_AGENT_NAME +DBMS_PRVTAQIS.CHK_SUB_ADD_BUFFER +DBMS_PRVTAQIS.CREATE_90_RULES_VIEW +DBMS_PRVTAQIS.CREATE_QTAB_EVCTX +DBMS_PRVTAQIS.CREATE_QUEUE_RULE_SET +DBMS_PRVTAQIS.CREATE_RULES_VIEW +DBMS_PRVTAQIS.CREATE_SUBSCRIBER_SEQUENCE +DBMS_PRVTAQIS.CREATE_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.CREATE_SUBSCRIBER_VIEW +DBMS_PRVTAQIS.DELETE_REMOVED_SUBSCRIBERS +DBMS_PRVTAQIS.DOWNGRADE_92_90 +DBMS_PRVTAQIS.DOWNGRADE_QT_RULESUB_MSGS +DBMS_PRVTAQIS.DOWNGRADE_RULESUB_MSGS +DBMS_PRVTAQIS.DOWNGRADE_RULE_FRM10I +DBMS_PRVTAQIS.DOWNGRADE_SUBSCRIBERS +DBMS_PRVTAQIS.DROP_QTAB_EVCTX +DBMS_PRVTAQIS.DROP_QUEUE_DEFAULT_RULESETS +DBMS_PRVTAQIS.DROP_QUEUE_NPRS +DBMS_PRVTAQIS.DROP_QUEUE_RULE +DBMS_PRVTAQIS.DROP_QUEUE_RULE_SET +DBMS_PRVTAQIS.DROP_QUEUE_SUBSCRIBERS +DBMS_PRVTAQIS.DROP_RULES_VIEW +DBMS_PRVTAQIS.DROP_SUBSCRIBER +DBMS_PRVTAQIS.DROP_SUBSCRIBER_SEQUENCE +DBMS_PRVTAQIS.DROP_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.DROP_SUBSCRIBER_VIEW +DBMS_PRVTAQIS.FIX_SUBSCRIBER_TABLES_2424746 +DBMS_PRVTAQIS.PATCH_PRE92_SUBSCRIBERS +DBMS_PRVTAQIS.PATCH_RSUB_EXPDEP +DBMS_PRVTAQIS.PATCH_RULESET_COLUMN +DBMS_PRVTAQIS.PATCH_SUBTAB_COLUMN +DBMS_PRVTAQIS.PATCH_SUBTAB_OPERATIONS +DBMS_PRVTAQIS.POPULATE_SYS_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.QTAB_ADD_BUFFER +DBMS_PRVTAQIS.QUEUE_SUBSCRIBERS +DBMS_PRVTAQIS.RULE_SUBSCRIBERS_EXIST +DBMS_PRVTAQIS.UPDATE_SUBTAB_ADDR +DBMS_PRVTAQIS.UPGRADE_90_92 +DBMS_PRVTAQIS.UPGRADE_QT_RULESUB_MSGS +DBMS_PRVTAQIS.UPGRADE_RULESUB_MSGS +DBMS_PRVTAQIS.UPGRADE_RULE_10I +DBMS_PRVTAQIS.UPGRADE_SUBSCRIBERS +DBMS_PRVTRMIE. +DBMS_PRVTRMIE.CACHE_OBJ_GRANTS +DBMS_PRVTRMIE.CHECK_COMPATIBILITY +DBMS_PRVTRMIE.CLEAR_OBJ_GRANTS +DBMS_PRVTRMIE.GET_CONSUMER_GRP +DBMS_PRVTRMIE.GET_GROUP_MAPPINGS +DBMS_PRVTRMIE.GET_MAPPING_PRIORITY +DBMS_PRVTRMIE.GET_OBJ_GRANTS +DBMS_PRVTRMIE.GET_PLAN_DIRECTIVES +DBMS_PRVTRMIE.GET_RESOURCE_PLAN +DBMS_PRVTRMIE.IS_SYS_MANAGED +DBMS_PRVT_TRACE. +DBMS_PRVT_TRACE.FORCE_VERBOSE +DBMS_PRVT_TRACE.SET_TRACE_EVENT +DBMS_PRVT_TRACE.TRACE +DBMS_PRVT_TRACE.TRACE_ENTER_PROCEDURE +DBMS_PRVT_TRACE.TRACE_EXIT_PROCEDURE +DBMS_PRVT_TRACE.TRACE_EXPRESSION +DBMS_PRVT_TRACE.TRACE_LONG_EXPRESSION +DBMS_PRVT_TRACE.TRACE_PRINT_EXCEPTION +DBMS_PRVT_TRACE.TRACE_RAISE_EXCEPTION +DBMS_PRVT_TRACE.UNFORCE_VERBOSE +DBMS_PSP. +DBMS_PSP.ADD_IN_MEMORY_PAGE +DBMS_PSP.ADD_IN_MEMORY_PAGES +DBMS_PSP.CLEAR_IN_MEMORY_PAGES +DBMS_PSP.COMPILE_PAGE +DBMS_PSP.COMPILE_PAGES +DBMS_PSP.SET_DOCUMENT_TABLE +DBMS_PSWMG_IMPORT. +DBMS_PSWMG_IMPORT.IMPORT_HISTORY +DBMS_PSWMG_IMPORT.IMPORT_PSW_VERIFY_FN +DBMS_RANDOM. +DBMS_RANDOM.INITIALIZE +DBMS_RANDOM.NORMAL +DBMS_RANDOM.RANDOM +DBMS_RANDOM.SEED +DBMS_RANDOM.STRING +DBMS_RANDOM.TERMINATE +DBMS_RANDOM.VALUE +DBMS_RCVMAN. +DBMS_RCVMAN.BMRADDCORRUPTTABLE +DBMS_RCVMAN.CLRSITENAME +DBMS_RCVMAN.COMPUTERECOVERYACTIONS +DBMS_RCVMAN.CREATEFAILURELIST +DBMS_RCVMAN.DBUNIQUENAMEISSTANDBY +DBMS_RCVMAN.DUMPSTATE +DBMS_RCVMAN.FINDARCHIVEDLOGBACKUP +DBMS_RCVMAN.FINDCONTROLFILEBACKUP +DBMS_RCVMAN.FINDOFFLINERANGECOPY +DBMS_RCVMAN.FINDRANGEARCHIVEDLOGBACKUP +DBMS_RCVMAN.FINDSPFILEBACKUP +DBMS_RCVMAN.FINDVALIDBACKUPSET +DBMS_RCVMAN.GETACTUALDBINC +DBMS_RCVMAN.GETALBACKUPHISTORY +DBMS_RCVMAN.GETALLBACKUPSET +DBMS_RCVMAN.GETAPPLIEDAL +DBMS_RCVMAN.GETAPPLIEDSCN +DBMS_RCVMAN.GETARCHIVEDLOG +DBMS_RCVMAN.GETARCHIVEDLOGBACKUP +DBMS_RCVMAN.GETARCHIVEDNEXTSCN +DBMS_RCVMAN.GETBACKEDUPFILES +DBMS_RCVMAN.GETBACKUPHISTORY +DBMS_RCVMAN.GETBACKUPPIECE +DBMS_RCVMAN.GETBSBACKUPHISTORY +DBMS_RCVMAN.GETCHECKPOINT +DBMS_RCVMAN.GETCLONENAME +DBMS_RCVMAN.GETCONFIG +DBMS_RCVMAN.GETCONTROLFILEBACKUP +DBMS_RCVMAN.GETCONTROLFILECOPY +DBMS_RCVMAN.GETCOPYOFDATAFILE +DBMS_RCVMAN.GETCURRENTINCARNATION +DBMS_RCVMAN.GETDATAFILE +DBMS_RCVMAN.GETDATAFILECOPY +DBMS_RCVMAN.GETDBUNIQUENAME +DBMS_RCVMAN.GETDCBACKUPHISTORY +DBMS_RCVMAN.GETDFBACKUPHISTORY +DBMS_RCVMAN.GETDROPOSFILES +DBMS_RCVMAN.GETENCRYPTTSCOUNT +DBMS_RCVMAN.GETFAILURE +DBMS_RCVMAN.GETINCARNATIONKEY +DBMS_RCVMAN.GETINCREMENTALSCN +DBMS_RCVMAN.GETMANUALREPAIR +DBMS_RCVMAN.GETMAXCOPYNO +DBMS_RCVMAN.GETMAXSCN +DBMS_RCVMAN.GETOFFLINERANGECOPY +DBMS_RCVMAN.GETONLINELOG +DBMS_RCVMAN.GETPACKAGEVERSION +DBMS_RCVMAN.GETPARENTINCARNATION +DBMS_RCVMAN.GETPRIMARYDFNAME +DBMS_RCVMAN.GETPROXYCOPY +DBMS_RCVMAN.GETRCVREC +DBMS_RCVMAN.GETRECOVERYACTION +DBMS_RCVMAN.GETREDOLOGDELETIONPOLICY +DBMS_RCVMAN.GETREPAIR +DBMS_RCVMAN.GETREPAIROPTION +DBMS_RCVMAN.GETREPAIRPARMS +DBMS_RCVMAN.GETREPAIRSCRIPTNAME +DBMS_RCVMAN.GETREPAIRSTEP +DBMS_RCVMAN.GETREQUIREDSCN +DBMS_RCVMAN.GETRESTOREPOINT +DBMS_RCVMAN.GETRETENTIONPOLICY +DBMS_RCVMAN.GETSCNFORAPPLIEDPOLICY +DBMS_RCVMAN.GETSITEKEY +DBMS_RCVMAN.GETSITENAME +DBMS_RCVMAN.GETSPACERECL +DBMS_RCVMAN.GETSPFILEBACKUP +DBMS_RCVMAN.GETTEMPFILE +DBMS_RCVMAN.GETUNTILSCN +DBMS_RCVMAN.GETUNTILTIME +DBMS_RCVMAN.GETVALIDBACKUPSET +DBMS_RCVMAN.INITIALIZE +DBMS_RCVMAN.ISARCHIVEDLOGMISSING +DBMS_RCVMAN.ISBACKUPTYPEMATCH +DBMS_RCVMAN.ISBSRECCACHEMATCH +DBMS_RCVMAN.ISDEVICETYPEALLOCATED +DBMS_RCVMAN.ISINFAILURELIST +DBMS_RCVMAN.ISRECLRECID +DBMS_RCVMAN.ISSTATUSMATCH +DBMS_RCVMAN.ISTRANSLATEDDBID +DBMS_RCVMAN.ISTRANSLATEDFNO +DBMS_RCVMAN.LISTBACKUP +DBMS_RCVMAN.LISTGETARCHIVEDLOGBACKUP +DBMS_RCVMAN.LISTGETARCHIVEDLOGCOPY +DBMS_RCVMAN.LISTGETBACKUPSETFILES +DBMS_RCVMAN.LISTGETCONTROLFILEBACKUP +DBMS_RCVMAN.LISTGETCONTROLFILECOPY +DBMS_RCVMAN.LISTGETDATAFILEBACKUP +DBMS_RCVMAN.LISTGETDATAFILECOPY +DBMS_RCVMAN.LISTGETDBINCARNATION +DBMS_RCVMAN.LISTGETDBSITE +DBMS_RCVMAN.LISTGETPROXYARCHIVEDLOG +DBMS_RCVMAN.LISTGETPROXYDATAFILE +DBMS_RCVMAN.LISTGETRESTOREPOINT +DBMS_RCVMAN.LISTGETSPFILEBACKUP +DBMS_RCVMAN.LISTGETTABLESPACE +DBMS_RCVMAN.LISTROLLBACKSEGTABLESPACE +DBMS_RCVMAN.LISTTRANSLATEARCHIVEDLOGBACKUP +DBMS_RCVMAN.LISTTRANSLATEARCHIVEDLOGCOPY +DBMS_RCVMAN.LISTTRANSLATEBACKUPSETFILES +DBMS_RCVMAN.LISTTRANSLATECONTROLFILEBACKUP +DBMS_RCVMAN.LISTTRANSLATECONTROLFILECOPY +DBMS_RCVMAN.LISTTRANSLATEDATAFILEBACKUP +DBMS_RCVMAN.LISTTRANSLATEDATAFILECOPY +DBMS_RCVMAN.LISTTRANSLATEDBINCARNATION +DBMS_RCVMAN.LISTTRANSLATEDBSITE +DBMS_RCVMAN.LISTTRANSLATEPROXYARCHIVEDLOG +DBMS_RCVMAN.LISTTRANSLATEPROXYDATAFILE +DBMS_RCVMAN.LISTTRANSLATEPROXYDFRECID +DBMS_RCVMAN.LISTTRANSLATERESTOREPOINT +DBMS_RCVMAN.LISTTRANSLATESPFILEBACKUP +DBMS_RCVMAN.NUM2DISPLAYSIZE +DBMS_RCVMAN.PRINTRECOVERYACTIONS +DBMS_RCVMAN.REPORTGETDFDEL +DBMS_RCVMAN.REPORTTRANSLATEDFDEL +DBMS_RCVMAN.RESETALL +DBMS_RCVMAN.RESETDEVICETYPE +DBMS_RCVMAN.RESETRECLRECID +DBMS_RCVMAN.RESETTHISBACKUPAGE +DBMS_RCVMAN.RESETUNTIL +DBMS_RCVMAN.SEC2DISPLAYTIME +DBMS_RCVMAN.SETALLFLAG +DBMS_RCVMAN.SETALLINCARNATIONS +DBMS_RCVMAN.SETARCHIVEDLOGRECORD +DBMS_RCVMAN.SETARCHIVEFILESCOPEATTRIBUTES +DBMS_RCVMAN.SETBACKUPFILESCOPEATTRIBUTES +DBMS_RCVMAN.SETCANAPPLYANYREDO +DBMS_RCVMAN.SETCANCONVERTCF +DBMS_RCVMAN.SETCANHANDLETRANSPORTABLETBS +DBMS_RCVMAN.SETCOMPLETEDRANGE +DBMS_RCVMAN.SETCOMPUTERECOVERYACTIONMASKS +DBMS_RCVMAN.SETDATABASE +DBMS_RCVMAN.SETDBIDTRANSCLAUSE +DBMS_RCVMAN.SETDBINCKEY +DBMS_RCVMAN.SETDEBUGOFF +DBMS_RCVMAN.SETDEBUGON +DBMS_RCVMAN.SETDEVICETYPE +DBMS_RCVMAN.SETDEVICETYPEANY +DBMS_RCVMAN.SETFROM +DBMS_RCVMAN.SETGETSINCELASTBACKEDAL +DBMS_RCVMAN.SETLIKEPATTERN +DBMS_RCVMAN.SETNEEDOBSOLETEDATA +DBMS_RCVMAN.SETRAFLAGS +DBMS_RCVMAN.SETRCVRECBACKUPAGE +DBMS_RCVMAN.SETRECLRECID +DBMS_RCVMAN.SETRECOVERYDESTFILE +DBMS_RCVMAN.SETREDOLOGDELETIONPOLICY +DBMS_RCVMAN.SETSITENAME +DBMS_RCVMAN.SETSTANDBY +DBMS_RCVMAN.SETTAG +DBMS_RCVMAN.SETTOLOG +DBMS_RCVMAN.SETUNTILLOG +DBMS_RCVMAN.SETUNTILRESETLOGS +DBMS_RCVMAN.SETUNTILSCN +DBMS_RCVMAN.SETUNTILTIME +DBMS_RCVMAN.SET_PACKAGE_CONSTANTS +DBMS_RCVMAN.SKIPTABLESPACE +DBMS_RCVMAN.STAMP2DATE +DBMS_RCVMAN.SV_GETSESSIONFROMTIMERANGE +DBMS_RCVMAN.SV_GETSESSIONKEY +DBMS_RCVMAN.SV_GETSESSIONUNTILTIMERANGE +DBMS_RCVMAN.SV_SETSESSIONKEY +DBMS_RCVMAN.SV_SETSESSIONTIMERANGE +DBMS_RCVMAN.TRANSLATEALLBACKUPSET +DBMS_RCVMAN.TRANSLATEALLDATAFILE +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGCANCEL +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGKEY +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGNAME +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGPATTERN +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGSCNRANGE +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGSEQRANGE +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGTIMERANGE +DBMS_RCVMAN.TRANSLATEBACKUPFILE +DBMS_RCVMAN.TRANSLATEBACKUPPIECEBSKEY +DBMS_RCVMAN.TRANSLATEBACKUPPIECEHANDLE +DBMS_RCVMAN.TRANSLATEBACKUPPIECEKEY +DBMS_RCVMAN.TRANSLATEBACKUPPIECETAG +DBMS_RCVMAN.TRANSLATEBACKUPSETKEY +DBMS_RCVMAN.TRANSLATEBACKUPSETRECID +DBMS_RCVMAN.TRANSLATEBPBSKEYCANCEL +DBMS_RCVMAN.TRANSLATECONTROLFILECOPYKEY +DBMS_RCVMAN.TRANSLATECONTROLFILECOPYNAME +DBMS_RCVMAN.TRANSLATECONTROLFILECOPYTAG +DBMS_RCVMAN.TRANSLATECORRUPTLIST +DBMS_RCVMAN.TRANSLATEDATABASE +DBMS_RCVMAN.TRANSLATEDATAFILE +DBMS_RCVMAN.TRANSLATEDATAFILECANCEL +DBMS_RCVMAN.TRANSLATEDATAFILECOPY +DBMS_RCVMAN.TRANSLATEDATAFILECOPYFNO +DBMS_RCVMAN.TRANSLATEDATAFILECOPYKEY +DBMS_RCVMAN.TRANSLATEDATAFILECOPYNAME +DBMS_RCVMAN.TRANSLATEDATAFILECOPYTAG +DBMS_RCVMAN.TRANSLATEFAILURE +DBMS_RCVMAN.TRANSLATEMANUALREPAIR +DBMS_RCVMAN.TRANSLATEONLINELOGS +DBMS_RCVMAN.TRANSLATEPROXYCOPYHANDLE +DBMS_RCVMAN.TRANSLATEPROXYCOPYKEY +DBMS_RCVMAN.TRANSLATEPROXYCOPYTAG +DBMS_RCVMAN.TRANSLATEREPAIR +DBMS_RCVMAN.TRANSLATEREPAIROPTION +DBMS_RCVMAN.TRANSLATEREPAIRPARMS +DBMS_RCVMAN.TRANSLATEREPAIRSTEP +DBMS_RCVMAN.TRANSLATESEEKBPBSKEY +DBMS_RCVMAN.TRANSLATETABLESPACE +DBMS_RCVMAN.TRANSLATETEMPFILE +DBMS_RCVMAN.TRIMRECOVERYACTIONS +DBMS_RCVMAN.VALIDATESTANDBYCONFIG +DBMS_RCVMAN.WASFILEOFFLINE +DBMS_RECOVERABLE_SCRIPT. +DBMS_RECOVERABLE_SCRIPT.ADD_FORWARD_BLOCK +DBMS_RECOVERABLE_SCRIPT.CREATE_SCRIPT +DBMS_RECOVERABLE_SCRIPT.DROP_SCRIPT +DBMS_RECOVERABLE_SCRIPT.INSERT_PARAM +DBMS_RECOVERABLE_SCRIPT.MODIFY_FORWARD_BLOCK +DBMS_RECOVERABLE_SCRIPT.MODIFY_UNDO_BLOCK +DBMS_RECOVERABLE_SCRIPT.RUN +DBMS_RECOVERABLE_SCRIPT.UPDATE_COMMENT +DBMS_RECOVERABLE_SCRIPT.UPDATE_STATUS +DBMS_RECO_SCRIPT_INT. +DBMS_RECO_SCRIPT_INT.ADD_FORWARD_BLOCK +DBMS_RECO_SCRIPT_INT.CREATE_SCRIPT +DBMS_RECO_SCRIPT_INT.GET_DBLINKS +DBMS_RECO_SCRIPT_INT.GET_ERROR_BLOCK_NUM +DBMS_RECO_SCRIPT_INT.GET_FORWARD_BLOCK +DBMS_RECO_SCRIPT_INT.GET_FORWARD_BLOCKS +DBMS_RECO_SCRIPT_INT.GET_SCRIPT_OWNER +DBMS_RECO_SCRIPT_INT.GET_UNDO_BLOCK +DBMS_RECO_SCRIPT_INT.GET_UNDO_BLOCKS +DBMS_RECO_SCRIPT_INT.INSERT_PARAM +DBMS_RECO_SCRIPT_INT.MODIFY_FORWARD_BLOCK +DBMS_RECO_SCRIPT_INT.MODIFY_UNDO_BLOCK +DBMS_RECO_SCRIPT_INT.RECORD_ERROR +DBMS_RECO_SCRIPT_INT.SYS_PURGE +DBMS_RECO_SCRIPT_INT.SYS_PURGE_LOCAL +DBMS_RECO_SCRIPT_INT.UPDATE_BLOCK_STATUS +DBMS_RECO_SCRIPT_INT.UPDATE_COMMENT +DBMS_RECO_SCRIPT_INT.UPDATE_DONE_BLOCK_NUM +DBMS_RECO_SCRIPT_INT.UPDATE_STATUS +DBMS_RECO_SCRIPT_INT.USER_PURGE +DBMS_RECO_SCRIPT_INVOK. +DBMS_RECO_SCRIPT_INVOK.CHECK_PRIVILEGES +DBMS_RECO_SCRIPT_INVOK.LOCAL_EXECUTE_BLOCK +DBMS_RECTIFIER_DIFF. +DBMS_RECTIFIER_DIFF.DIFFERENCES +DBMS_RECTIFIER_DIFF.RECTIFY +DBMS_RECTIFIER_DIFF.TURN_REPLICATION_OFF +DBMS_RECTIFIER_DIFF.TURN_REPLICATION_ON +DBMS_RECTIFIER_FRIENDS. +DBMS_RECTIFIER_FRIENDS.SHAPE_EQUIVALENT +DBMS_REDEFINITION. +DBMS_REDEFINITION.ABORT_REDEF_TABLE +DBMS_REDEFINITION.CAN_REDEF_TABLE +DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS +DBMS_REDEFINITION.FINISH_REDEF_TABLE +DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT +DBMS_REDEFINITION.START_REDEF_TABLE +DBMS_REDEFINITION.SYNC_INTERIM_TABLE +DBMS_REDEFINITION.UNREGISTER_DEPENDENT_OBJECT +DBMS_REFRESH. +DBMS_REFRESH.ADD +DBMS_REFRESH.CHANGE +DBMS_REFRESH.DESTROY +DBMS_REFRESH.MAKE +DBMS_REFRESH.MAKE_REPAPI +DBMS_REFRESH.REFRESH +DBMS_REFRESH.SUBTRACT +DBMS_REFRESH.USER_EXPORT +DBMS_REFRESH.USER_EXPORT_CHILD +DBMS_REFRESH_EXP_LWM. +DBMS_REFRESH_EXP_LWM.ADD_LWM +DBMS_REFRESH_EXP_LWM.SCHEMA_INFO_EXP +DBMS_REFRESH_EXP_SITES. +DBMS_REFRESH_EXP_SITES.ADD_SITE +DBMS_REFRESH_EXP_SITES.SCHEMA_INFO_EXP +DBMS_REGISTRY. +DBMS_REGISTRY.CHECK_SERVER_INSTANCE +DBMS_REGISTRY.COMP_NAME +DBMS_REGISTRY.DELETE_PROGRESS_ACTION +DBMS_REGISTRY.DOWNGRADED +DBMS_REGISTRY.DOWNGRADING +DBMS_REGISTRY.GET_DEPENDENT_COMPS +DBMS_REGISTRY.GET_DEPENDENT_COMPS_REC +DBMS_REGISTRY.GET_PROGRESS_STEP +DBMS_REGISTRY.GET_PROGRESS_VALUE +DBMS_REGISTRY.GET_REQUIRED_COMPS +DBMS_REGISTRY.GET_REQUIRED_COMPS_REC +DBMS_REGISTRY.INVALID +DBMS_REGISTRY.IS_COMPONENT +DBMS_REGISTRY.IS_IN_REGISTRY +DBMS_REGISTRY.IS_LOADED +DBMS_REGISTRY.IS_STARTUP_REQUIRED +DBMS_REGISTRY.IS_VALID +DBMS_REGISTRY.LOADED +DBMS_REGISTRY.LOADING +DBMS_REGISTRY.NOTHING_SCRIPT +DBMS_REGISTRY.PREV_VERSION +DBMS_REGISTRY.REMOVED +DBMS_REGISTRY.REMOVING +DBMS_REGISTRY.RESET_VERSION +DBMS_REGISTRY.SCHEMA +DBMS_REGISTRY.SCHEMA_LIST +DBMS_REGISTRY.SCHEMA_LIST_STRING +DBMS_REGISTRY.SCRIPT +DBMS_REGISTRY.SCRIPT_PATH +DBMS_REGISTRY.SCRIPT_PREFIX +DBMS_REGISTRY.SESSION_NAMESPACE +DBMS_REGISTRY.SET_COMP_NAMESPACE +DBMS_REGISTRY.SET_PROGRESS_ACTION +DBMS_REGISTRY.SET_PROGRESS_STEP +DBMS_REGISTRY.SET_PROGRESS_VALUE +DBMS_REGISTRY.SET_REQUIRED_COMPS +DBMS_REGISTRY.SET_SESSION_NAMESPACE +DBMS_REGISTRY.STARTUP_COMPLETE +DBMS_REGISTRY.STARTUP_REQUIRED +DBMS_REGISTRY.STATUS +DBMS_REGISTRY.STATUS_NAME +DBMS_REGISTRY.SUBCOMPONENTS +DBMS_REGISTRY.UPDATE_SCHEMA_LIST +DBMS_REGISTRY.UPGRADED +DBMS_REGISTRY.UPGRADING +DBMS_REGISTRY.VALID +DBMS_REGISTRY.VERSION +DBMS_REGISTRY_SERVER. +DBMS_REGISTRY_SYS. +DBMS_REGISTRY_SYS.CHECK_COMPONENT_DOWNGRADES +DBMS_REGISTRY_SYS.CPU_SCRIPT +DBMS_REGISTRY_SYS.DBDWG_SCRIPT +DBMS_REGISTRY_SYS.DBUPG_SCRIPT +DBMS_REGISTRY_SYS.DIAGNOSTICS +DBMS_REGISTRY_SYS.DROP_USER +DBMS_REGISTRY_SYS.GATHER_STATS +DBMS_REGISTRY_SYS.PATCH_SCRIPT +DBMS_REGISTRY_SYS.POPULATE +DBMS_REGISTRY_SYS.POPULATE_101 +DBMS_REGISTRY_SYS.POPULATE_102 +DBMS_REGISTRY_SYS.POPULATE_92 +DBMS_REGISTRY_SYS.RECORD_ACTION +DBMS_REGISTRY_SYS.RELOD_SCRIPT +DBMS_REGISTRY_SYS.REMOVAL_SCRIPT +DBMS_REGISTRY_SYS.SET_REGISTRY_CONTEXT +DBMS_REGISTRY_SYS.TIME_STAMP +DBMS_REGISTRY_SYS.VALIDATE_CATALOG +DBMS_REGISTRY_SYS.VALIDATE_CATJAVA +DBMS_REGISTRY_SYS.VALIDATE_CATPROC +DBMS_REGISTRY_SYS.VALIDATE_COMPONENTS +DBMS_REGXDB. +DBMS_REGXDB.VALIDATEXDB +DBMS_REGXDB.VALIDATEXDB_OBJS +DBMS_REPAIR. +DBMS_REPAIR.ADMIN_TABLES +DBMS_REPAIR.CHECK_OBJECT +DBMS_REPAIR.DUMP_ORPHAN_KEYS +DBMS_REPAIR.FIX_CORRUPT_BLOCKS +DBMS_REPAIR.ONLINE_INDEX_CLEAN +DBMS_REPAIR.REBUILD_FREELISTS +DBMS_REPAIR.REBUILD_SHC_INDEX +DBMS_REPAIR.SEGMENT_FIX_STATUS +DBMS_REPAIR.SKIP_CORRUPT_BLOCKS +DBMS_REPCAT. +DBMS_REPCAT.ABORT_FLAVOR_DEFINITION +DBMS_REPCAT.ADD_COLUMNS_TO_FLAVOR +DBMS_REPCAT.ADD_COLUMN_GROUP_TO_FLAVOR +DBMS_REPCAT.ADD_DELETE_RESOLUTION +DBMS_REPCAT.ADD_GROUPED_COLUMN +DBMS_REPCAT.ADD_MASTER_DATABASE +DBMS_REPCAT.ADD_NEW_MASTERS +DBMS_REPCAT.ADD_OBJECT_TO_FLAVOR +DBMS_REPCAT.ADD_PRIORITY_CHAR +DBMS_REPCAT.ADD_PRIORITY_DATE +DBMS_REPCAT.ADD_PRIORITY_NCHAR +DBMS_REPCAT.ADD_PRIORITY_NUMBER +DBMS_REPCAT.ADD_PRIORITY_NVARCHAR2 +DBMS_REPCAT.ADD_PRIORITY_RAW +DBMS_REPCAT.ADD_PRIORITY_VARCHAR2 +DBMS_REPCAT.ADD_SITE_PRIORITY_SITE +DBMS_REPCAT.ADD_UNIQUE_RESOLUTION +DBMS_REPCAT.ADD_UPDATE_RESOLUTION +DBMS_REPCAT.ALTER_CATCHUP_PARAMETERS +DBMS_REPCAT.ALTER_MASTER_PROPAGATION +DBMS_REPCAT.ALTER_MASTER_REPOBJECT +DBMS_REPCAT.ALTER_MVIEW_PROPAGATION +DBMS_REPCAT.ALTER_PRIORITY +DBMS_REPCAT.ALTER_PRIORITY_CHAR +DBMS_REPCAT.ALTER_PRIORITY_DATE +DBMS_REPCAT.ALTER_PRIORITY_NCHAR +DBMS_REPCAT.ALTER_PRIORITY_NUMBER +DBMS_REPCAT.ALTER_PRIORITY_NVARCHAR2 +DBMS_REPCAT.ALTER_PRIORITY_RAW +DBMS_REPCAT.ALTER_PRIORITY_VARCHAR2 +DBMS_REPCAT.ALTER_SITE_PRIORITY +DBMS_REPCAT.ALTER_SITE_PRIORITY_SITE +DBMS_REPCAT.ALTER_SNAPSHOT_PROPAGATION +DBMS_REPCAT.BEGIN_FLAVOR_DEFINITION +DBMS_REPCAT.CANCEL_STATISTICS +DBMS_REPCAT.COMMA_TO_TABLE +DBMS_REPCAT.COMMENT_ON_COLUMN_GROUP +DBMS_REPCAT.COMMENT_ON_DELETE_RESOLUTION +DBMS_REPCAT.COMMENT_ON_MVIEW_REPSITES +DBMS_REPCAT.COMMENT_ON_PRIORITY_GROUP +DBMS_REPCAT.COMMENT_ON_REPGROUP +DBMS_REPCAT.COMMENT_ON_REPOBJECT +DBMS_REPCAT.COMMENT_ON_REPSITES +DBMS_REPCAT.COMMENT_ON_SITE_PRIORITY +DBMS_REPCAT.COMMENT_ON_SNAPSHOT_REPSITES +DBMS_REPCAT.COMMENT_ON_UNIQUE_RESOLUTION +DBMS_REPCAT.COMMENT_ON_UPDATE_RESOLUTION +DBMS_REPCAT.COMPARE_OLD_VALUES +DBMS_REPCAT.CREATE_MASTER_REPGROUP +DBMS_REPCAT.CREATE_MASTER_REPOBJECT +DBMS_REPCAT.CREATE_MVIEW_REPGROUP +DBMS_REPCAT.CREATE_MVIEW_REPOBJECT +DBMS_REPCAT.CREATE_SNAPSHOT_REPGROUP +DBMS_REPCAT.CREATE_SNAPSHOT_REPOBJECT +DBMS_REPCAT.DEFINE_COLUMN_GROUP +DBMS_REPCAT.DEFINE_PRIORITY_GROUP +DBMS_REPCAT.DEFINE_SITE_PRIORITY +DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN +DBMS_REPCAT.DROP_COLUMNS_FROM_FLAVOR +DBMS_REPCAT.DROP_COLUMN_GROUP +DBMS_REPCAT.DROP_COLUMN_GROUP_FROM_FLAVOR +DBMS_REPCAT.DROP_DELETE_RESOLUTION +DBMS_REPCAT.DROP_GROUPED_COLUMN +DBMS_REPCAT.DROP_MASTER_REPGROUP +DBMS_REPCAT.DROP_MASTER_REPOBJECT +DBMS_REPCAT.DROP_MVIEW_REPGROUP +DBMS_REPCAT.DROP_MVIEW_REPOBJECT +DBMS_REPCAT.DROP_OBJECT_FROM_FLAVOR +DBMS_REPCAT.DROP_PRIORITY +DBMS_REPCAT.DROP_PRIORITY_CHAR +DBMS_REPCAT.DROP_PRIORITY_DATE +DBMS_REPCAT.DROP_PRIORITY_GROUP +DBMS_REPCAT.DROP_PRIORITY_NCHAR +DBMS_REPCAT.DROP_PRIORITY_NUMBER +DBMS_REPCAT.DROP_PRIORITY_NVARCHAR2 +DBMS_REPCAT.DROP_PRIORITY_RAW +DBMS_REPCAT.DROP_PRIORITY_VARCHAR2 +DBMS_REPCAT.DROP_SITE_PRIORITY +DBMS_REPCAT.DROP_SITE_PRIORITY_SITE +DBMS_REPCAT.DROP_SNAPSHOT_REPGROUP +DBMS_REPCAT.DROP_SNAPSHOT_REPOBJECT +DBMS_REPCAT.DROP_UNIQUE_RESOLUTION +DBMS_REPCAT.DROP_UPDATE_RESOLUTION +DBMS_REPCAT.EXECUTE_DDL +DBMS_REPCAT.GENERATE_FLAVOR_NAME +DBMS_REPCAT.GENERATE_MVIEW_SUPPORT +DBMS_REPCAT.GENERATE_REPLICATION_PACKAGE +DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT +DBMS_REPCAT.GENERATE_REPLICATION_TRIGGER +DBMS_REPCAT.GENERATE_SNAPSHOT_SUPPORT +DBMS_REPCAT.MAKE_COLUMN_GROUP +DBMS_REPCAT.OBSOLETE_FLAVOR_DEFINITION +DBMS_REPCAT.ORDER_USER_OBJECTS +DBMS_REPCAT.PREPARE_INSTANTIATED_MASTER +DBMS_REPCAT.PUBLISH_FLAVOR_DEFINITION +DBMS_REPCAT.PURGE_FLAVOR_DEFINITION +DBMS_REPCAT.PURGE_MASTER_LOG +DBMS_REPCAT.PURGE_STATISTICS +DBMS_REPCAT.REFRESH_MVIEW_REPGROUP +DBMS_REPCAT.REFRESH_SNAPSHOT_REPGROUP +DBMS_REPCAT.REGISTER_MVIEW_REPGROUP +DBMS_REPCAT.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT.REGISTER_STATISTICS +DBMS_REPCAT.RELOCATE_MASTERDEF +DBMS_REPCAT.REMOVE_MASTER_DATABASES +DBMS_REPCAT.RENAME_SHADOW_COLUMN_GROUP +DBMS_REPCAT.REPCAT_IMPORT_CHECK +DBMS_REPCAT.REPCAT_IMPORT_REPSCHEMA +DBMS_REPCAT.REPCAT_IMPORT_REPSCHEMA_STRING +DBMS_REPCAT.RESUME_MASTER_ACTIVITY +DBMS_REPCAT.RESUME_PROPAGATION_TO_MDEF +DBMS_REPCAT.SEND_AND_COMPARE_OLD_VALUES +DBMS_REPCAT.SEND_OLD_VALUES +DBMS_REPCAT.SET_COLUMNS +DBMS_REPCAT.SET_LOCAL_FLAVOR +DBMS_REPCAT.SPECIFY_NEW_MASTERS +DBMS_REPCAT.STREAMS_MIGRATION +DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY +DBMS_REPCAT.SWITCH_MVIEW_MASTER +DBMS_REPCAT.SWITCH_SNAPSHOT_MASTER +DBMS_REPCAT.TICKLE_JOB +DBMS_REPCAT.UNDO_ADD_NEW_MASTERS_REQUEST +DBMS_REPCAT.UNREGISTER_MVIEW_REPGROUP +DBMS_REPCAT.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT.VALIDATE +DBMS_REPCAT.VALIDATE_FLAVOR_DEFINITION +DBMS_REPCAT.VALIDATE_FOR_LOCAL_FLAVOR +DBMS_REPCAT.WAIT_MASTER_LOG +DBMS_REPCAT_ADD_MASTER. +DBMS_REPCAT_ADD_MASTER.ADD_NEW_MASTERS +DBMS_REPCAT_ADD_MASTER.ALTER_CATCHUP_PARAMETERS +DBMS_REPCAT_ADD_MASTER.CHANGE_MASTER_STATUS +DBMS_REPCAT_ADD_MASTER.CONTROL_PROPAGATION +DBMS_REPCAT_ADD_MASTER.PREPARE_FOR_IMP_MASTER +DBMS_REPCAT_ADD_MASTER.PREPARE_INSTANTIATED_MASTER +DBMS_REPCAT_ADD_MASTER.PULL_EXTENSION_REQUEST_MASTER +DBMS_REPCAT_ADD_MASTER.PURGE_REQUEST +DBMS_REPCAT_ADD_MASTER.RESUME_PROPAGATION_TO_MDEF +DBMS_REPCAT_ADD_MASTER.SPECIFY_NEW_MASTERS +DBMS_REPCAT_ADD_MASTER.UNDO_ADD_NEW_MASTERS_REQUEST +DBMS_REPCAT_ADD_MASTER.WAIT_FOR_NEW_MASTERS_TO_PREP +DBMS_REPCAT_ADMIN. +DBMS_REPCAT_ADMIN.BIC +DBMS_REPCAT_ADMIN.BIS +DBMS_REPCAT_ADMIN.DO_SQL +DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_REPGROUP +DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_REPSCHEMA +DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA +DBMS_REPCAT_ADMIN.GRANT_ADMIN_REPGROUP +DBMS_REPCAT_ADMIN.GRANT_ADMIN_REPSCHEMA +DBMS_REPCAT_ADMIN.GRANT_ADMIN_SCHEMA +DBMS_REPCAT_ADMIN.GRANT_PROXY_SNAPADMIN_PRIVS +DBMS_REPCAT_ADMIN.GRANT_SNAPADMIN_PROXY +DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_ANY_REPGROUP +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_ANY_REPSCHEMA +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_ANY_SCHEMA +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_REPGROUP +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_REPSCHEMA +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_SCHEMA +DBMS_REPCAT_ADMIN.REVOKE_SNAPADMIN_PROXY +DBMS_REPCAT_ADMIN.UNREGISTER_USER_REPGROUP +DBMS_REPCAT_AUTH. +DBMS_REPCAT_AUTH.GRANT_SURROGATE_REPCAT +DBMS_REPCAT_AUTH.INTERNAL_SURROGATE_SYSTEM +DBMS_REPCAT_AUTH.REVOKE_SURROGATE_REPCAT +DBMS_REPCAT_CACHE. +DBMS_REPCAT_CACHE.GET_PROPAGATOR_ID +DBMS_REPCAT_CACHE.GET_PROPAGATOR_NAME +DBMS_REPCAT_CACHE.LOCK_OBJECT_GROUP +DBMS_REPCAT_CACHE.LOCK_PROPAGATOR +DBMS_REPCAT_CACHE.PURGE_OBJECT_GROUP +DBMS_REPCAT_CACHE.PURGE_PROPAGATOR +DBMS_REPCAT_CACHE.READ_OBJECT_GROUP +DBMS_REPCAT_COMMON_UTL. +DBMS_REPCAT_COMMON_UTL.COUNT_ASYNC_DESTS +DBMS_REPCAT_COMMON_UTL.ENSURE_DB_COMPATIBLE +DBMS_REPCAT_COMMON_UTL.GET_EXTENSION_ID +DBMS_REPCAT_COMMON_UTL.GET_LEN_BASED_ON_SEMANTICS +DBMS_REPCAT_COMMON_UTL.GET_SEMANTICS_BASED_ON_TYPE +DBMS_REPCAT_COMMON_UTL.IS_MASTER_FULL_INSTANTIATION +DBMS_REPCAT_COMMON_UTL.ORDER_OBJECTS +DBMS_REPCAT_CONF. +DBMS_REPCAT_CONF.ADD_DELETE_RESOLUTION +DBMS_REPCAT_CONF.ADD_GROUPED_COLUMN +DBMS_REPCAT_CONF.ADD_PRIORITY_CHAR +DBMS_REPCAT_CONF.ADD_PRIORITY_DATE +DBMS_REPCAT_CONF.ADD_PRIORITY_NCHAR +DBMS_REPCAT_CONF.ADD_PRIORITY_NUMBER +DBMS_REPCAT_CONF.ADD_PRIORITY_NVARCHAR2 +DBMS_REPCAT_CONF.ADD_PRIORITY_RAW +DBMS_REPCAT_CONF.ADD_PRIORITY_VARCHAR2 +DBMS_REPCAT_CONF.ADD_SITE_PRIORITY_SITE +DBMS_REPCAT_CONF.ADD_UNIQUE_RESOLUTION +DBMS_REPCAT_CONF.ADD_UPDATE_RESOLUTION +DBMS_REPCAT_CONF.ALTER_PRIORITY +DBMS_REPCAT_CONF.ALTER_PRIORITY_CHAR +DBMS_REPCAT_CONF.ALTER_PRIORITY_DATE +DBMS_REPCAT_CONF.ALTER_PRIORITY_NCHAR +DBMS_REPCAT_CONF.ALTER_PRIORITY_NUMBER +DBMS_REPCAT_CONF.ALTER_PRIORITY_NVARCHAR2 +DBMS_REPCAT_CONF.ALTER_PRIORITY_RAW +DBMS_REPCAT_CONF.ALTER_PRIORITY_VARCHAR2 +DBMS_REPCAT_CONF.ALTER_SITE_PRIORITY +DBMS_REPCAT_CONF.ALTER_SITE_PRIORITY_SITE +DBMS_REPCAT_CONF.AUDITING_OFF +DBMS_REPCAT_CONF.AUDITING_ON +DBMS_REPCAT_CONF.CANCEL_STATISTICS +DBMS_REPCAT_CONF.CHECK_GROUP_INFO +DBMS_REPCAT_CONF.CHECK_ONAME_INFO +DBMS_REPCAT_CONF.COMMENT_ON_COLUMN_GROUP +DBMS_REPCAT_CONF.COMMENT_ON_DELETE_RESOLUTION +DBMS_REPCAT_CONF.COMMENT_ON_PRIORITY_GROUP +DBMS_REPCAT_CONF.COMMENT_ON_SITE_PRIORITY +DBMS_REPCAT_CONF.COMMENT_ON_UNIQUE_RESOLUTION +DBMS_REPCAT_CONF.COMMENT_ON_UPDATE_RESOLUTION +DBMS_REPCAT_CONF.DEFINE_COLUMN_GROUP +DBMS_REPCAT_CONF.DEFINE_PRIORITY_GROUP +DBMS_REPCAT_CONF.DEFINE_SITE_PRIORITY +DBMS_REPCAT_CONF.DROP_COLUMN_GROUP +DBMS_REPCAT_CONF.DROP_DELETE_RESOLUTION +DBMS_REPCAT_CONF.DROP_GROUPED_COLUMN +DBMS_REPCAT_CONF.DROP_PRIORITY +DBMS_REPCAT_CONF.DROP_PRIORITY_CHAR +DBMS_REPCAT_CONF.DROP_PRIORITY_DATE +DBMS_REPCAT_CONF.DROP_PRIORITY_GROUP +DBMS_REPCAT_CONF.DROP_PRIORITY_NCHAR +DBMS_REPCAT_CONF.DROP_PRIORITY_NUMBER +DBMS_REPCAT_CONF.DROP_PRIORITY_NVARCHAR2 +DBMS_REPCAT_CONF.DROP_PRIORITY_RAW +DBMS_REPCAT_CONF.DROP_PRIORITY_VARCHAR2 +DBMS_REPCAT_CONF.DROP_SITE_PRIORITY +DBMS_REPCAT_CONF.DROP_SITE_PRIORITY_SITE +DBMS_REPCAT_CONF.DROP_UNIQUE_RESOLUTION +DBMS_REPCAT_CONF.DROP_UPDATE_RESOLUTION +DBMS_REPCAT_CONF.MAKE_COLUMN_GROUP +DBMS_REPCAT_CONF.PURGE_STATISTICS +DBMS_REPCAT_CONF.REGISTER_STATISTICS +DBMS_REPCAT_DECL. +DBMS_REPCAT_DECL.LOCAL_MATCH +DBMS_REPCAT_DECL.LOCAL_NODE +DBMS_REPCAT_DECL.RESET +DBMS_REPCAT_EXP. +DBMS_REPCAT_EXP.SCHEMA_INFO_EXP +DBMS_REPCAT_EXP.SYSTEM_INFO_EXP +DBMS_REPCAT_FLA. +DBMS_REPCAT_FLA.ABORT_DEFINITION +DBMS_REPCAT_FLA.ABORT_FLAVOR_DEFINITION +DBMS_REPCAT_FLA.ADD_OBJECT +DBMS_REPCAT_FLA.ADD_OBJECT_TO_FLAVOR +DBMS_REPCAT_FLA.BEGIN_DEFINITION +DBMS_REPCAT_FLA.BEGIN_FLAVOR_DEFINITION +DBMS_REPCAT_FLA.DROP_OBJECT +DBMS_REPCAT_FLA.DROP_OBJECT_FROM_FLAVOR +DBMS_REPCAT_FLA.ENSURE_COMPATIBILITY +DBMS_REPCAT_FLA.ENSURE_NOT_PUBLISHED +DBMS_REPCAT_FLA.ENSURE_OBJECT_IN_FLAVOR +DBMS_REPCAT_FLA.GENERATE_FLAVOR_NAME +DBMS_REPCAT_FLA.LOCAL_OBJECT_MATCHES +DBMS_REPCAT_FLA.SET_LOCAL_FLAVOR +DBMS_REPCAT_FLA.VALIDATE_DEFINITION +DBMS_REPCAT_FLA.VALIDATE_FLAVOR_DEFINITION +DBMS_REPCAT_FLA.VALIDATE_FOR_LOCAL_FLAVOR +DBMS_REPCAT_FLA.VALIDATE_LOCAL +DBMS_REPCAT_FLA.VALIDATE_LOCAL_COLS +DBMS_REPCAT_FLA.VALIDATE_LOCAL_MAS +DBMS_REPCAT_FLA.VALIDATE_LOCAL_SNAP +DBMS_REPCAT_FLA.VALIDATE_TABLE +DBMS_REPCAT_FLA_MAS. +DBMS_REPCAT_FLA_MAS.ADD_COLUMNS_TO_FLAVOR +DBMS_REPCAT_FLA_MAS.ADD_COLUMN_GROUP_TO_FLAVOR +DBMS_REPCAT_FLA_MAS.DROP_COLUMNS_FROM_FLAVOR +DBMS_REPCAT_FLA_MAS.DROP_COLUMN_GROUP_FROM_FLAVOR +DBMS_REPCAT_FLA_MAS.OBSOLETE_DEFINITION +DBMS_REPCAT_FLA_MAS.OBSOLETE_FLAVOR_DEFINITION +DBMS_REPCAT_FLA_MAS.PUBLISH_DEFINITION +DBMS_REPCAT_FLA_MAS.PUBLISH_FLAVOR_DEFINITION +DBMS_REPCAT_FLA_MAS.PURGE_DEFINITION +DBMS_REPCAT_FLA_MAS.PURGE_FLAVOR_DEFINITION +DBMS_REPCAT_FLA_UTL.BITVEC_CLR +DBMS_REPCAT_FLA_UTL.BITVEC_REMAP +DBMS_REPCAT_FLA_UTL.BITVEC_SET +DBMS_REPCAT_FLA_UTL.BITVEC_TST +DBMS_REPCAT_FLA_UTL.CANONICALIZE_FLAVOR +DBMS_REPCAT_FLA_UTL.CANONICALIZE_OBJECT +DBMS_REPCAT_FLA_UTL.CHECK_MASTER +DBMS_REPCAT_FLA_UTL.CREATE_REPCOLUMN +DBMS_REPCAT_FLA_UTL.FLAVOR_DOMINATES +DBMS_REPCAT_INSTANTIATE. +DBMS_REPCAT_INSTANTIATE.DROP_SITE_INSTANTIATION +DBMS_REPCAT_INSTANTIATE.INSTANTIATE_OFFLINE +DBMS_REPCAT_INSTANTIATE.INSTANTIATE_OFFLINE_REPAPI +DBMS_REPCAT_INSTANTIATE.INSTANTIATE_ONLINE +DBMS_REPCAT_INTERNAL. +DBMS_REPCAT_INTERNAL.CHECK_REPOBJECT_FLAG +DBMS_REPCAT_INTERNAL.CLEAR_REPOBJECT_FLAG +DBMS_REPCAT_INTERNAL.DESTROY_INTERNAL_PKG +DBMS_REPCAT_INTERNAL.GET_NO_DEPENDENCY_TRACKING +DBMS_REPCAT_INTERNAL.GET_NUM_FROM_RAW +DBMS_REPCAT_INTERNAL.INVALIDATE_INTERNAL_PKG +DBMS_REPCAT_INTERNAL.MAKE_INTERNAL_PKG +DBMS_REPCAT_INTERNAL.RAISE_SYSTEM_ERROR +DBMS_REPCAT_INTERNAL.SET_NO_DEPENDENCY_TRACKING +DBMS_REPCAT_INTERNAL.SET_REPOBJECT_FLAG +DBMS_REPCAT_INTERNAL.UPDATE_DEPENDENCY_TRACKING +DBMS_REPCAT_INTERNAL_PACKAGE. +DBMS_REPCAT_INTERNAL_PACKAGE.ANYDATA_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.BLOB_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.CALL +DBMS_REPCAT_INTERNAL_PACKAGE.CHAR_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.CHECK_REPOBJECT_CACHE +DBMS_REPCAT_INTERNAL_PACKAGE.CLOB_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.DATE_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.DESTINATION +DBMS_REPCAT_INTERNAL_PACKAGE.EXECUTE_ERROR_CALL +DBMS_REPCAT_INTERNAL_PACKAGE.NUMBER_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.RAW_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.ROWID_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.SYNC_CALL +DBMS_REPCAT_INTERNAL_PACKAGE.VARCHAR2_ARG +DBMS_REPCAT_MAS. +DBMS_REPCAT_MAS.ADD_MASTER_DATABASE +DBMS_REPCAT_MAS.ALL_MASTERS +DBMS_REPCAT_MAS.ALTER_MASTER_PROPAGATION +DBMS_REPCAT_MAS.ALTER_MASTER_REPOBJECT +DBMS_REPCAT_MAS.CHECK_QUEUE +DBMS_REPCAT_MAS.COMMENT_ON_REPGROUP +DBMS_REPCAT_MAS.COMMENT_ON_REPOBJECT +DBMS_REPCAT_MAS.COMMENT_ON_REPSITES +DBMS_REPCAT_MAS.CREATE_MASTER_REPGROUP +DBMS_REPCAT_MAS.CREATE_MASTER_REPOBJECT +DBMS_REPCAT_MAS.CREATE_REPCOLUMN_SOFT +DBMS_REPCAT_MAS.DO_DEFERRED_REPCAT_ADMIN +DBMS_REPCAT_MAS.DROP_MASTER_REPGROUP +DBMS_REPCAT_MAS.ENSURE_MASTERDEF +DBMS_REPCAT_MAS.EXECUTE_DDL +DBMS_REPCAT_MAS.GENERATE_MASTER_FLAVOR +DBMS_REPCAT_MAS.GENERATE_REPLICATION_PACKAGE +DBMS_REPCAT_MAS.GENERATE_REPLICATION_SUPPORT +DBMS_REPCAT_MAS.GENERATE_REPLICATION_TRIGGER +DBMS_REPCAT_MAS.GEN_REP_PKG_CALLBACK +DBMS_REPCAT_MAS.GEN_TRY_RESET_GEN_INT_STATUS +DBMS_REPCAT_MAS.GEN_TRY_RESET_GEN_STATUS +DBMS_REPCAT_MAS.GET_COMMIT_FREQUENCY +DBMS_REPCAT_MAS.INSERT_REPCAT_DESTINATIONS +DBMS_REPCAT_MAS.IS_IN +DBMS_REPCAT_MAS.IS_REMOTE_MASTER +DBMS_REPCAT_MAS.MASTER_COUNT +DBMS_REPCAT_MAS.PROPAGATE_DDL +DBMS_REPCAT_MAS.PROPAGATE_GEN +DBMS_REPCAT_MAS.PURGE_MASTER_LOG +DBMS_REPCAT_MAS.RELOCATE_MASTERDEF +DBMS_REPCAT_MAS.REMOVE_MASTERS +DBMS_REPCAT_MAS.REMOVE_MASTERS_MASTER +DBMS_REPCAT_MAS.REMOVE_MASTERS_MASTERDEF +DBMS_REPCAT_MAS.REMOVE_MASTER_DATABASES +DBMS_REPCAT_MAS.RENAME_SHADOW_COLUMN_GROUP +DBMS_REPCAT_MAS.REPCAT_IMPORT_REPSCHEMA +DBMS_REPCAT_MAS.RESOLVE_SNAME +DBMS_REPCAT_MAS.RESUME_MASTER_ACTIVITY +DBMS_REPCAT_MAS.SEND_AND_COMPARE_OLD_VALUES +DBMS_REPCAT_MAS.SET_COLUMNS +DBMS_REPCAT_MAS.SUSPEND_MASTER_ACTIVITY +DBMS_REPCAT_MAS.WAIT_MASTER_LOG +DBMS_REPCAT_MIG. +DBMS_REPCAT_MIG.CLEANUP_IMPORT +DBMS_REPCAT_MIG.POST_IMPORT +DBMS_REPCAT_MIG.PRE_IMPORT +DBMS_REPCAT_MIGRATION. +DBMS_REPCAT_MIGRATION.GENERATE_APPLY_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_CAPTURE_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_CMTS_AND_ASMPTNS +DBMS_REPCAT_MIGRATION.GENERATE_CONF_RESOL_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_INST_SCN_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_KEY_COLS_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_LOCAL_VARIABLES +DBMS_REPCAT_MIGRATION.GENERATE_PROPAGATION_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_QUEUE_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_SELECT_STATEMENTS +DBMS_REPCAT_MIGRATION.GENERATE_SITE_VARS +DBMS_REPCAT_MIGRATION.GENERATE_SUPPL_LOG_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_TIMESTAMP_RESOL_CMT +DBMS_REPCAT_MIGRATION.GENERATE_UNSUPP_CONF_NOTE +DBMS_REPCAT_MIGRATION.GENERATE_UNSUPP_METHOD_NOTE +DBMS_REPCAT_MIGRATION.GENERATE_UNSUPP_SEQ_NOTE +DBMS_REPCAT_MIGRATION.GENERATE_UPDATE_CONF_HDLR +DBMS_REPCAT_MIGRATION.GENERATE_VARIABLES +DBMS_REPCAT_MIGRATION.GENERATE_WARNINGS +DBMS_REPCAT_MIGRATION.GET_MASTERS +DBMS_REPCAT_MIGRATION.GET_ONAMES_OWNERS +DBMS_REPCAT_MIGRATION.STREAMS_MIGRATION +DBMS_REPCAT_MIGRATION.SUPPL_LOG_COLUMN_GROUP_COLS +DBMS_REPCAT_MIGRATION.SUPPL_LOG_PRIMARY_KEY_COLS +DBMS_REPCAT_MIGRATION.SUPPL_LOG_SET_COLUMN_COLS +DBMS_REPCAT_MIGRATION.VALIDATE_GNAMES +DBMS_REPCAT_MIGRATION.VERIFY_GNAMES_QUIESCED +DBMS_REPCAT_MIG_INTERNAL. +DBMS_REPCAT_MIG_INTERNAL.ADD_FLAVOR_INFORMATION +DBMS_REPCAT_MIG_INTERNAL.ADD_GOWNER_INFORMATION +DBMS_REPCAT_MIG_INTERNAL.CHECK_CONSTRAINT_STATUS +DBMS_REPCAT_MIG_INTERNAL.DISABLE_ALL_CONSTRAINTS +DBMS_REPCAT_MIG_INTERNAL.DISABLE_CONSTRAINT +DBMS_REPCAT_MIG_INTERNAL.DROP_RECREATE_RLRP +DBMS_REPCAT_MIG_INTERNAL.DROP_RRRV +DBMS_REPCAT_MIG_INTERNAL.DROP_WHAT_AM_I +DBMS_REPCAT_MIG_INTERNAL.ENABLE_ALL_CONSTRAINTS +DBMS_REPCAT_MIG_INTERNAL.ENABLE_CONSTRAINT +DBMS_REPCAT_MIG_INTERNAL.FIX_GROUPED_COLUMN +DBMS_REPCAT_MIG_INTERNAL.FIX_PARAMETER_COLUMN +DBMS_REPCAT_MIG_INTERNAL.FIX_PROPAGATOR +DBMS_REPCAT_MIG_INTERNAL.FIX_REPCOLUMN +DBMS_REPCAT_MIG_INTERNAL.GENERATE_RECIPIENT_KEY +DBMS_REPCAT_MIG_INTERNAL.MISC_CLEANUP +DBMS_REPCAT_MIG_INTERNAL.POPULATE_REPCOLUMN +DBMS_REPCAT_MIG_INTERNAL.POST_IMPORT +DBMS_REPCAT_MIG_INTERNAL.RECOMPILE_PKG_PROCS +DBMS_REPCAT_MIG_INTERNAL.UPDATE_MLOG +DBMS_REPCAT_MIG_INTERNAL.UPDATE_RT_TP_ST +DBMS_REPCAT_MIG_INTERNAL.WRITE_TRACE +DBMS_REPCAT_OBJ_UTL. +DBMS_REPCAT_OBJ_UTL.ADD_KEY_COLUMN +DBMS_REPCAT_OBJ_UTL.COLUMN_EXISTS +DBMS_REPCAT_OBJ_UTL.COMPARE_STORAGE_TABLE_LIST +DBMS_REPCAT_OBJ_UTL.CONTAINS_INHERITANCE +DBMS_REPCAT_OBJ_UTL.CONVERT_CTYPEID_TO_CTYPE +DBMS_REPCAT_OBJ_UTL.ENSURE_DOUBLE_QUOTES +DBMS_REPCAT_OBJ_UTL.ENSURE_NO_ADTS +DBMS_REPCAT_OBJ_UTL.ENSURE_NO_ADTS_INTERNAL +DBMS_REPCAT_OBJ_UTL.ENSURE_TOP_COLUMNS +DBMS_REPCAT_OBJ_UTL.EXPLODE_COLUMNS +DBMS_REPCAT_OBJ_UTL.EXPLODE_COLUMNS_LIST +DBMS_REPCAT_OBJ_UTL.GET_COLL_STORAGE_TABLES +DBMS_REPCAT_OBJ_UTL.GET_COL_TOID +DBMS_REPCAT_OBJ_UTL.GET_HIDDEN_REF_LCNAME +DBMS_REPCAT_OBJ_UTL.GET_INTERNAL_CNAME +DBMS_REPCAT_OBJ_UTL.GET_LCNAME +DBMS_REPCAT_OBJ_UTL.GET_NT_LCNAME +DBMS_REPCAT_OBJ_UTL.GET_SUBCOLUMNS +DBMS_REPCAT_OBJ_UTL.GET_TOP_COLUMN +DBMS_REPCAT_OBJ_UTL.GET_TYPE_INFO +DBMS_REPCAT_OBJ_UTL.GET_UDT_TYPE_INFO +DBMS_REPCAT_OBJ_UTL.IS_ADT +DBMS_REPCAT_OBJ_UTL.IS_DOMAIN_INDEX +DBMS_REPCAT_OBJ_UTL.IS_FUNCTION_BASED_INDEX +DBMS_REPCAT_OBJ_UTL.IS_INDEX_ORGANIZED_TABLE +DBMS_REPCAT_OBJ_UTL.IS_INSTEAD_OF_TRIGGER +DBMS_REPCAT_OBJ_UTL.IS_NESTED_TABLE +DBMS_REPCAT_OBJ_UTL.IS_NESTED_TABLE_COLUMN +DBMS_REPCAT_OBJ_UTL.IS_OBJECT_TABLE +DBMS_REPCAT_OBJ_UTL.IS_OBJECT_VIEW +DBMS_REPCAT_OBJ_UTL.IS_PKREF +DBMS_REPCAT_OBJ_UTL.IS_SOIDREF_FK +DBMS_REPCAT_OBJ_UTL.IS_SOID_OBJECT_TABLE +DBMS_REPCAT_OBJ_UTL.IS_SSETID_NESTED_TABLE_COLUMN +DBMS_REPCAT_OBJ_UTL.LCNAME_TAB_TO_CNAME_TAB +DBMS_REPCAT_OBJ_UTL.NAME_ARRAY_TO_V30TAB +DBMS_REPCAT_OBJ_UTL.NAME_TO_LNAME +DBMS_REPCAT_OBJ_UTL.SYSCOL_PROP_TO_REPCOL_PROP +DBMS_REPCAT_OBJ_UTL.V30TAB_TO_NAME_ARRAY +DBMS_REPCAT_OUTPUT. +DBMS_REPCAT_OUTPUT.DELETE_OUTPUT +DBMS_REPCAT_OUTPUT.GET_OUTPUT_ID +DBMS_REPCAT_OUTPUT.MAKE_LOB_EMPTY +DBMS_REPCAT_OUTPUT.SETUP_OUTPUT +DBMS_REPCAT_OUTPUT.WRITE_OUTPUT +DBMS_REPCAT_OUTPUT.WRITE_OUTPUT_NO_SETUP +DBMS_REPCAT_OUTPUT.WRITE_OUTPUT_NO_SETUP_ARRAY +DBMS_REPCAT_RGT. +DBMS_REPCAT_RGT.ALTER_REFRESH_TEMPLATE +DBMS_REPCAT_RGT.ALTER_TEMPLATE_OBJECT +DBMS_REPCAT_RGT.ALTER_TEMPLATE_PARM +DBMS_REPCAT_RGT.ALTER_USER_AUTHORIZATION +DBMS_REPCAT_RGT.ALTER_USER_PARM_VALUE +DBMS_REPCAT_RGT.CHECK_DDL_TEXT +DBMS_REPCAT_RGT.CLOB_FROM_VC2 +DBMS_REPCAT_RGT.COMPARE_TEMPLATES +DBMS_REPCAT_RGT.COPY_TEMPLATE +DBMS_REPCAT_RGT.CREATE_OBJECT_FROM_EXISTING +DBMS_REPCAT_RGT.CREATE_REFRESH_TEMPLATE +DBMS_REPCAT_RGT.CREATE_TEMPLATE_OBJECT +DBMS_REPCAT_RGT.CREATE_TEMPLATE_PARM +DBMS_REPCAT_RGT.CREATE_USER_AUTHORIZATION +DBMS_REPCAT_RGT.CREATE_USER_PARM_VALUE +DBMS_REPCAT_RGT.DELETE_RUNTIME_PARMS +DBMS_REPCAT_RGT.DROP_ALL_OBJECTS +DBMS_REPCAT_RGT.DROP_ALL_TEMPLATES +DBMS_REPCAT_RGT.DROP_ALL_TEMPLATE_PARMS +DBMS_REPCAT_RGT.DROP_ALL_USER_AUTHORIZATIONS +DBMS_REPCAT_RGT.DROP_ALL_USER_PARM_VALUES +DBMS_REPCAT_RGT.DROP_REFRESH_TEMPLATE +DBMS_REPCAT_RGT.DROP_SITE_INSTANTIATION +DBMS_REPCAT_RGT.DROP_TEMPLATE_OBJECT +DBMS_REPCAT_RGT.DROP_TEMPLATE_PARM +DBMS_REPCAT_RGT.DROP_USER_AUTHORIZATION +DBMS_REPCAT_RGT.DROP_USER_PARM_VALUE +DBMS_REPCAT_RGT.GET_RUNTIME_PARM_ID +DBMS_REPCAT_RGT.INSERT_RUNTIME_PARMS +DBMS_REPCAT_RGT.INSTANTIATE_OFFLINE +DBMS_REPCAT_RGT.INSTANTIATE_OFFLINE_JAVA +DBMS_REPCAT_RGT.INSTANTIATE_OFFLINE_REPAPI +DBMS_REPCAT_RGT.INSTANTIATE_ONLINE +DBMS_REPCAT_RGT.LOCK_TEMPLATE_EXCLUSIVE +DBMS_REPCAT_RGT.LOCK_TEMPLATE_SHARED +DBMS_REPCAT_RGT.READ_CLOB +DBMS_REPCAT_RGT.SUBSTITUTE_PARAMETERS +DBMS_REPCAT_RGT.VC2_FROM_CLOB +DBMS_REPCAT_RGT_ALT. +DBMS_REPCAT_RGT_ALT.ALTER_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_ALT.ALTER_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_ALT.ALTER_TEMPLATE_PARM +DBMS_REPCAT_RGT_ALT.ALTER_USER_AUTHORIZATION +DBMS_REPCAT_RGT_ALT.ALTER_USER_PARM_VALUE +DBMS_REPCAT_RGT_ALT.COPY_TEMPLATE +DBMS_REPCAT_RGT_CHK. +DBMS_REPCAT_RGT_CHK.CHECK_DDL_TEXT +DBMS_REPCAT_RGT_CHK.CHECK_OBJECT_PARMS +DBMS_REPCAT_RGT_CHK.CHECK_OBJECT_TYPE +DBMS_REPCAT_RGT_CHK.CHECK_PARAMETER_NAME +DBMS_REPCAT_RGT_CHK.CHECK_PRIVATE_TEMPLATE +DBMS_REPCAT_RGT_CHK.CHECK_PUBLIC_TEMPLATE +DBMS_REPCAT_RGT_CHK.CHECK_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_CHK.CHECK_STATUS +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_NAME +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_PARM +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_SITE +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_USER +DBMS_REPCAT_RGT_CHK.CHECK_USER_AUTHORIZATION +DBMS_REPCAT_RGT_CHK.CHECK_USER_NAME +DBMS_REPCAT_RGT_CHK.CHECK_USER_PARM_VALUE +DBMS_REPCAT_RGT_CHK.GET_OCT_TYPE +DBMS_REPCAT_RGT_CHK.GET_TEMPLATE_NAME +DBMS_REPCAT_RGT_CHK.GET_TEMPLATE_USER +DBMS_REPCAT_RGT_CUST. +DBMS_REPCAT_RGT_CUST.COMPARE_TEMPLATES +DBMS_REPCAT_RGT_CUST.CREATE_OBJECT_FROM_EXISTING +DBMS_REPCAT_RGT_CUST.CREATE_ONE_REFRESH_GROUP +DBMS_REPCAT_RGT_CUST.DROP_ALL_OBJECTS +DBMS_REPCAT_RGT_CUST.DROP_ALL_TEMPLATES +DBMS_REPCAT_RGT_CUST.DROP_ALL_TEMPLATE_PARMS +DBMS_REPCAT_RGT_CUST.DROP_ALL_TEMPLATE_SITES +DBMS_REPCAT_RGT_CUST.DROP_ALL_USER_AUTHORIZATIONS +DBMS_REPCAT_RGT_CUST.DROP_ALL_USER_PARM_VALUES +DBMS_REPCAT_RGT_CUST.DUPL_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_CUST.DUPL_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_CUST.DUPL_TEMPLATE_PARM +DBMS_REPCAT_RGT_CUST.DUPL_TEMPLATE_SITE +DBMS_REPCAT_RGT_CUST.DUPL_USER_AUTHORIZATION +DBMS_REPCAT_RGT_CUST.DUPL_USER_PARM_VALUE +DBMS_REPCAT_RGT_CUST.GET_OUTPUT_ID +DBMS_REPCAT_RGT_CUST.LOCK_TEMPLATE_EXCLUSIVE +DBMS_REPCAT_RGT_CUST.LOCK_TEMPLATE_SHARED +DBMS_REPCAT_RGT_CUST.OFFLINE_SNAPSHOTS +DBMS_REPCAT_RGT_CUST.ONLINE_SNAPSHOTS +DBMS_REPCAT_RGT_CUST.PROCESS_PARAMETERS +DBMS_REPCAT_RGT_CUST.SUBSTITUTE_BY_TYPE +DBMS_REPCAT_RGT_CUST.SUBSTITUTE_PARMS_NO_VALS +DBMS_REPCAT_RGT_CUST.WRITE_OUTPUT +DBMS_REPCAT_RGT_CUST.WRITE_OUTPUT_NO_SETUP +DBMS_REPCAT_RGT_CUST.WRITE_OUTPUT_NO_SETUP_ARRAY +DBMS_REPCAT_RGT_CUST2. +DBMS_REPCAT_RGT_CUST2.CHECK_TEMPLATE_NAME +DBMS_REPCAT_RGT_CUST2.CREATE_TEMPLATE_SITE +DBMS_REPCAT_RGT_CUST2.DROP_SITE_INSTANTIATION +DBMS_REPCAT_RGT_CUST2.DROP_TEMPLATE_SITE +DBMS_REPCAT_RGT_CUST2.PROCESS_INSERT_STATEMENT +DBMS_REPCAT_RGT_EXP. +DBMS_REPCAT_RGT_EXP.ADD_SITE_INST +DBMS_REPCAT_RGT_EXP.SCHEMA_INFO_EXP +DBMS_REPCAT_RGT_UTL. +DBMS_REPCAT_RGT_UTL.CANONICALIZE +DBMS_REPCAT_RGT_UTL.CHECK_UNIQUE_OBJECT +DBMS_REPCAT_RGT_UTL.CREATE_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_UTL.CREATE_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_UTL.CREATE_TEMPLATE_PARM +DBMS_REPCAT_RGT_UTL.CREATE_TEMPLATE_SITE +DBMS_REPCAT_RGT_UTL.CREATE_USER_AUTHORIZATION +DBMS_REPCAT_RGT_UTL.CREATE_USER_PARM_VALUE +DBMS_REPCAT_RGT_UTL.DROP_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_UTL.DROP_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_UTL.DROP_TEMPLATE_PARM +DBMS_REPCAT_RGT_UTL.DROP_TEMPLATE_SITE +DBMS_REPCAT_RGT_UTL.DROP_USER_AUTHORIZATION +DBMS_REPCAT_RGT_UTL.DROP_USER_PARM_VALUE +DBMS_REPCAT_RGT_UTL.DROP_USER_TEMPLATES +DBMS_REPCAT_RGT_UTL.GET_CONS_NAME +DBMS_REPCAT_RGT_UTL.RAISE_ERROR +DBMS_REPCAT_RPC. +DBMS_REPCAT_RPC.ADD_REPCATLOG +DBMS_REPCAT_RPC.ADD_REPCATLOG_RC +DBMS_REPCAT_RPC.ADD_REPDDL +DBMS_REPCAT_RPC.ADD_REPDDL_RC +DBMS_REPCAT_RPC.ADD_REPGROUP +DBMS_REPCAT_RPC.ADD_REPGROUP_RC +DBMS_REPCAT_RPC.ADD_REPSITE +DBMS_REPCAT_RPC.ADD_REPSITE_RC +DBMS_REPCAT_RPC.CHANGE_EXTENSION_STATUS +DBMS_REPCAT_RPC.CHANGE_EXTENSION_STATUS_RC +DBMS_REPCAT_RPC.COMPARE_STORAGE_TABLE_LIST +DBMS_REPCAT_RPC.COMPARE_STORAGE_TABLE_LIST_RC +DBMS_REPCAT_RPC.COMPARE_TABLE_INFO +DBMS_REPCAT_RPC.COMPARE_TABLE_INFO_COMPAT +DBMS_REPCAT_RPC.COMPARE_TABLE_INFO_COMPAT_RC +DBMS_REPCAT_RPC.COMPARE_TABLE_INFO_RC +DBMS_REPCAT_RPC.COUNT_EARLIER +DBMS_REPCAT_RPC.COUNT_EARLIER_RC +DBMS_REPCAT_RPC.DB_COMPATIBILITY_RC +DBMS_REPCAT_RPC.FINISH_ADD_MASTER +DBMS_REPCAT_RPC.FINISH_ADD_MASTER_RC +DBMS_REPCAT_RPC.GEN_INT_END_CALLBACK +DBMS_REPCAT_RPC.GEN_INT_END_CALLBACK_RC +DBMS_REPCAT_RPC.GEN_REP_ENDPH2_CALLBACK +DBMS_REPCAT_RPC.GEN_REP_ENDPH2_CALLBACK_RC +DBMS_REPCAT_RPC.GEN_REP_PKG_CALLBACK +DBMS_REPCAT_RPC.GEN_REP_PKG_CALLBACK_RC +DBMS_REPCAT_RPC.GET_INDEXTYPE_INFO +DBMS_REPCAT_RPC.GET_INDEXTYPE_INFO_RC +DBMS_REPCAT_RPC.GET_INTERNAL_CNAME +DBMS_REPCAT_RPC.GET_INTERNAL_CNAME_RC +DBMS_REPCAT_RPC.GET_LOCAL_FLAVOR +DBMS_REPCAT_RPC.GET_LOCAL_FLAVOR_RC +DBMS_REPCAT_RPC.GET_OBJECT_SHAPE +DBMS_REPCAT_RPC.GET_OBJECT_SHAPE_RC +DBMS_REPCAT_RPC.GET_OPERATOR_INFO +DBMS_REPCAT_RPC.GET_OPERATOR_INFO_RC +DBMS_REPCAT_RPC.GET_PIECE_SHAPE +DBMS_REPCAT_RPC.GET_PIECE_SHAPE_COMPAT +DBMS_REPCAT_RPC.GET_PIECE_SHAPE_COMPAT_RC +DBMS_REPCAT_RPC.GET_PIECE_SHAPE_RC +DBMS_REPCAT_RPC.GET_STRUCTURAL_TYPE_INFO +DBMS_REPCAT_RPC.GET_STRUCTURAL_TYPE_INFO_RC +DBMS_REPCAT_RPC.GET_TYPE_INFO +DBMS_REPCAT_RPC.GET_TYPE_INFO_RC +DBMS_REPCAT_RPC.INSERT_DESTINATION +DBMS_REPCAT_RPC.INSERT_DESTINATION_RC +DBMS_REPCAT_RPC.IS_TABLESPACE +DBMS_REPCAT_RPC.IS_TABLESPACE_RC +DBMS_REPCAT_RPC.LOCK_REPGROUP +DBMS_REPCAT_RPC.LOCK_REPGROUP_RC +DBMS_REPCAT_RPC.MODIFY_REPCATLOG_INFO +DBMS_REPCAT_RPC.MODIFY_REPCATLOG_INFO_RC +DBMS_REPCAT_RPC.MODIFY_REPGROUP_INFO +DBMS_REPCAT_RPC.MODIFY_REPGROUP_INFO_RC +DBMS_REPCAT_RPC.MODIFY_REPOBJECT_INFO +DBMS_REPCAT_RPC.MODIFY_REPOBJECT_INFO_RC +DBMS_REPCAT_RPC.MODIFY_REPSITE_INFO +DBMS_REPCAT_RPC.MODIFY_REPSITE_INFO_RC +DBMS_REPCAT_RPC.NOTGENERATED_COUNT +DBMS_REPCAT_RPC.NOTGENERATED_COUNT_RC +DBMS_REPCAT_RPC.OK_TO_DROP_OBJECT +DBMS_REPCAT_RPC.OK_TO_DROP_OBJECT_RC +DBMS_REPCAT_RPC.PURGE_EXTENSION_REQUEST +DBMS_REPCAT_RPC.PURGE_EXTENSION_REQUEST_RC +DBMS_REPCAT_RPC.RELOCATE_MASTERDEF +DBMS_REPCAT_RPC.RELOCATE_MASTERDEF_RC +DBMS_REPCAT_RPC.REMOVE_REPCATLOG +DBMS_REPCAT_RPC.REMOVE_REPCATLOG_RC +DBMS_REPCAT_RPC.REMOVE_REPPROP +DBMS_REPCAT_RPC.REMOVE_REPPROP_RC +DBMS_REPCAT_RPC.REMOVE_REPSITE +DBMS_REPCAT_RPC.REMOVE_REPSITE_RC +DBMS_REPCAT_RPC.REPLICATION_VERSION_RC +DBMS_REPCAT_RPC.SET_DISABLED +DBMS_REPCAT_RPC.SET_DISABLED_RC +DBMS_REPCAT_RPC.SET_LOCAL_FLAVOR +DBMS_REPCAT_RPC.SET_LOCAL_FLAVOR_RC +DBMS_REPCAT_RPC.SUSPEND_MASTER_ACT_CALLBACK +DBMS_REPCAT_RPC.SUSPEND_MASTER_ACT_CALLBACK_RC +DBMS_REPCAT_RPC.TICKLE_JOB +DBMS_REPCAT_RPC.TICKLE_JOB_RC +DBMS_REPCAT_RPC.VALIDATE_GET_INFO +DBMS_REPCAT_RPC.VALIDATE_GET_INFO_RC +DBMS_REPCAT_RPC.VALIDATE_GET_NEXT_ERROR +DBMS_REPCAT_RPC.VALIDATE_GET_NEXT_ERROR_ALL +DBMS_REPCAT_RPC.VALIDATE_GET_NEXT_ERROR_ALL_RC +DBMS_REPCAT_RPC.VALIDATE_GET_NEXT_ERROR_RC +DBMS_REPCAT_RPC.VALIDATE_REMOTE +DBMS_REPCAT_RPC.VALIDATE_REMOTE_RC +DBMS_REPCAT_RPC_UTL. +DBMS_REPCAT_RPC_UTL.ADD_REPCATLOG +DBMS_REPCAT_RPC_UTL.ADD_REPDDL +DBMS_REPCAT_RPC_UTL.ADD_REPSITE +DBMS_REPCAT_RPC_UTL.MODIFY_REPSITE_INFO +DBMS_REPCAT_RPC_UTL.REMOVE_REPCATLOG +DBMS_REPCAT_RPC_UTL.REMOVE_REPSITE +DBMS_REPCAT_RQ. +DBMS_REPCAT_RQ.ADD_COLUMN +DBMS_REPCAT_RQ.CLOB_TO_TABLE +DBMS_REPCAT_RQ.PROCESS_AC_REQUEST +DBMS_REPCAT_SNA. +DBMS_REPCAT_SNA.ALTER_SNAPSHOT_PROPAGATION +DBMS_REPCAT_SNA.CREATE_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.CREATE_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA.CREATE_SNAPSHOT_REPSCHEMA +DBMS_REPCAT_SNA.DROP_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.DROP_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA.DROP_SNAPSHOT_REPSCHEMA +DBMS_REPCAT_SNA.GENERATE_SNAPSHOT_SUPPORT +DBMS_REPCAT_SNA.REFRESH_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.REFRESH_SNAPSHOT_REPSCHEMA +DBMS_REPCAT_SNA.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.REPCAT_IMPORT_CHECK +DBMS_REPCAT_SNA.SET_LOCAL_FLAVOR +DBMS_REPCAT_SNA.SWITCH_SNAPSHOT_MASTER +DBMS_REPCAT_SNA.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.VALIDATE_FOR_LOCAL_FLAVOR +DBMS_REPCAT_SNA_UTL. +DBMS_REPCAT_SNA_UTL.ALTER_SNAPSHOT_PROPAGATION +DBMS_REPCAT_SNA_UTL.ARRAY_SUBSTITUTE +DBMS_REPCAT_SNA_UTL.CHECK_MASTER +DBMS_REPCAT_SNA_UTL.CHECK_REGISTRATION_PARAMS +DBMS_REPCAT_SNA_UTL.CHECK_REMOTE_GROUP +DBMS_REPCAT_SNA_UTL.CHECK_REMOTE_OBJECT +DBMS_REPCAT_SNA_UTL.CHECK_REMOTE_OBJECT_EXISTS +DBMS_REPCAT_SNA_UTL.CHECK_REMOTE_SCHEMA +DBMS_REPCAT_SNA_UTL.CONVERT_ID_TO_REASON +DBMS_REPCAT_SNA_UTL.COPY_COLUMN_GROUP +DBMS_REPCAT_SNA_UTL.CREATE_OBJECT +DBMS_REPCAT_SNA_UTL.CREATE_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_UTL.CREATE_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA_UTL.DROP_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_UTL.DROP_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA_UTL.DROP_SNA_COLUMN_GROUP +DBMS_REPCAT_SNA_UTL.ENSURE_MASTER_QUALIFIER +DBMS_REPCAT_SNA_UTL.GENERATE_REPLICATION_SUPPORT +DBMS_REPCAT_SNA_UTL.GENERATE_SNAPSHOT_SUPPORT +DBMS_REPCAT_SNA_UTL.GENERATE_SUPPORT_PROCEDURAL +DBMS_REPCAT_SNA_UTL.GENERATE_SUPPORT_SNAPSHOT +DBMS_REPCAT_SNA_UTL.GET_MASTER +DBMS_REPCAT_SNA_UTL.GET_MASTER_QUALIFIER +DBMS_REPCAT_SNA_UTL.GET_NLS_CHAR +DBMS_REPCAT_SNA_UTL.INSERT_REMOTE_REPSCHEMA +DBMS_REPCAT_SNA_UTL.LOAD_DDL_TAB +DBMS_REPCAT_SNA_UTL.LOCAL_GENERATE_DDL +DBMS_REPCAT_SNA_UTL.PARSE_FOR_KEYWORD +DBMS_REPCAT_SNA_UTL.PARSE_FOR_LINK +DBMS_REPCAT_SNA_UTL.PING +DBMS_REPCAT_SNA_UTL.PROPAGATION_METHOD +DBMS_REPCAT_SNA_UTL.PULL_MASTER_OBJECT +DBMS_REPCAT_SNA_UTL.PUT_LONG_IN_TABLE +DBMS_REPCAT_SNA_UTL.RECORD_SNAPSHOT_REPPROP +DBMS_REPCAT_SNA_UTL.REFRESH_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_UTL.REFRESH_SOURCE +DBMS_REPCAT_SNA_UTL.REGISTER_FLAVOR_CHANGE +DBMS_REPCAT_SNA_UTL.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_UTL.REMOTE_GENERATE_DDL +DBMS_REPCAT_SNA_UTL.REMOVE_GENOBJECT +DBMS_REPCAT_SNA_UTL.REPCAT_IMPORT_CHECK +DBMS_REPCAT_SNA_UTL.REQUEST_GROUP_REFRESH +DBMS_REPCAT_SNA_UTL.SNAPSHOT_IS_UPDATABLE +DBMS_REPCAT_SNA_UTL.SNAPSHOT_MODIFY_DDL +DBMS_REPCAT_SNA_UTL.SWITCH_SNAPSHOT_MASTER +DBMS_REPCAT_SNA_UTL.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SQL_UTL. +DBMS_REPCAT_SQL_UTL.ADD_CLOB_TO_TABLE +DBMS_REPCAT_SQL_UTL.ADD_STMT_TO_MULTISTMT_TABLE +DBMS_REPCAT_SQL_UTL.ADD_VARCHAR2_TO_TABLE +DBMS_REPCAT_SQL_UTL.CHANGE_NLS_LENGTH_SEMANTICS +DBMS_REPCAT_SQL_UTL.DO_ARRAY_DDL +DBMS_REPCAT_SQL_UTL.DO_DDL +DBMS_REPCAT_SQL_UTL.DO_MULTIPLE_DDLS +DBMS_REPCAT_SQL_UTL.DO_SQL +DBMS_REPCAT_SQL_UTL.GET_MAX_BYTES_PER_CHAR +DBMS_REPCAT_SQL_UTL.PARSE_DDL +DBMS_REPCAT_SQL_UTL.RESTORE_NLS_LENGTH_SEMANTICS +DBMS_REPCAT_UNTRUSTED. +DBMS_REPCAT_UNTRUSTED.COMPARE_FLAVORS +DBMS_REPCAT_UNTRUSTED.DB_COMPATIBILITY +DBMS_REPCAT_UNTRUSTED.REGISTER_SNAPSHOT +DBMS_REPCAT_UNTRUSTED.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_UNTRUSTED.REPLICATION_VERSION +DBMS_REPCAT_UNTRUSTED.UNREGISTER_SNAPSHOT +DBMS_REPCAT_UNTRUSTED.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_UTL. +DBMS_REPCAT_UTL.ADD_GENOBJECT +DBMS_REPCAT_UTL.ADD_GROUPED_COLUMN +DBMS_REPCAT_UTL.ADD_OBJECT_TO_TOP_FLAVOR +DBMS_REPCAT_UTL.ADD_PARAMETER_COLUMN +DBMS_REPCAT_UTL.ADD_REPCOLUMN +DBMS_REPCAT_UTL.ADD_REPGROUP +DBMS_REPCAT_UTL.ADD_REPOBJECT +DBMS_REPCAT_UTL.ADD_REPPROP +DBMS_REPCAT_UTL.CANONICALIZE +DBMS_REPCAT_UTL.CANONICALIZE_MASTER +DBMS_REPCAT_UTL.CANONICALIZE_OLD +DBMS_REPCAT_UTL.CAPTURE_ERROR_MESSAGE +DBMS_REPCAT_UTL.CHECK_QUIESCE +DBMS_REPCAT_UTL.CHECK_REPGRP_INFO +DBMS_REPCAT_UTL.CHECK_SEQUENCE_VALUE +DBMS_REPCAT_UTL.COMMENT_ON_REPSITES +DBMS_REPCAT_UTL.CONSTRUCT_LOCAL_TOP_FLAVOR +DBMS_REPCAT_UTL.CONVERT_CONF_TYPE_TO_ID +DBMS_REPCAT_UTL.CONVERT_DATATYPE_TO_ID +DBMS_REPCAT_UTL.CONVERT_FLAVOR_TO_ID +DBMS_REPCAT_UTL.CONVERT_ID_TO_FLAVOR +DBMS_REPCAT_UTL.CONVERT_ID_TO_TYPE +DBMS_REPCAT_UTL.CONVERT_PROPAGATE_TO_ID +DBMS_REPCAT_UTL.CONVERT_REASON_TO_ID +DBMS_REPCAT_UTL.CONVERT_TRANSACTIONS_TO_D +DBMS_REPCAT_UTL.CONVERT_TYPE_TO_ID +DBMS_REPCAT_UTL.CONVERT_USER_TO_ID +DBMS_REPCAT_UTL.COPY_COLUMN_GROUP +DBMS_REPCAT_UTL.COPY_FLAVORS +DBMS_REPCAT_UTL.COPY_GENERATE +DBMS_REPCAT_UTL.COPY_KEY_COLUMNS +DBMS_REPCAT_UTL.COPY_REPFLAVOR_OBJECTS +DBMS_REPCAT_UTL.CREATE_REPCOLUMN +DBMS_REPCAT_UTL.DB_COMPATIBILITY +DBMS_REPCAT_UTL.DEFAULT_FUNCTION_NAME +DBMS_REPCAT_UTL.DELETE_AND_COUNT +DBMS_REPCAT_UTL.DESTROY_INTERNAL_TRIGGER +DBMS_REPCAT_UTL.DONT_NEED_RPRL +DBMS_REPCAT_UTL.DROP_AN_OBJECT +DBMS_REPCAT_UTL.DROP_REPGROUP +DBMS_REPCAT_UTL.DROP_SCHEMA +DBMS_REPCAT_UTL.DROP_USER_REPSCHEMA +DBMS_REPCAT_UTL.DUMP_TRACE +DBMS_REPCAT_UTL.END_OF_CREATE +DBMS_REPCAT_UTL.ENSURE_GROUP +DBMS_REPCAT_UTL.ENSURE_IN_LOCAL_TOP_FLAVOR +DBMS_REPCAT_UTL.ENSURE_LOCAL_FLAVOR +DBMS_REPCAT_UTL.ENSURE_OBJECT_EXISTS +DBMS_REPCAT_UTL.ENSURE_QUIESCED_NO_SNAP +DBMS_REPCAT_UTL.ENSURE_REPGROUP_QUIESCED +DBMS_REPCAT_UTL.ENSURE_USERNAME +DBMS_REPCAT_UTL.FINISH_ADD_MASTER +DBMS_REPCAT_UTL.FLAVOR_CHANGE_DDL +DBMS_REPCAT_UTL.FLAVOR_DOMINATES +DBMS_REPCAT_UTL.FOLLOW_SYNONYM_CHAIN +DBMS_REPCAT_UTL.GENERATE_SYN_WRAP +DBMS_REPCAT_UTL.GENERATE_WHAT_AM_I +DBMS_REPCAT_UTL.GENERATE_WRAP_PKG +DBMS_REPCAT_UTL.GENERATE_WRAP_PROC +DBMS_REPCAT_UTL.GET_CLONE_COMMIT_FREQUENCY +DBMS_REPCAT_UTL.GET_FLAVOR_TRIGGER +DBMS_REPCAT_UTL.GET_GENERATED_OBJECT +DBMS_REPCAT_UTL.GET_GEN_REPLICATION_SUPPORT +DBMS_REPCAT_UTL.GET_GLOBAL_NAME +DBMS_REPCAT_UTL.GET_GROUP_LOCAL_NODE +DBMS_REPCAT_UTL.GET_GROUP_NAME +DBMS_REPCAT_UTL.GET_LOCAL_FLAVOR +DBMS_REPCAT_UTL.GET_LOCAL_FLAVOR_ID +DBMS_REPCAT_UTL.GET_MIN_COMMUNICATION +DBMS_REPCAT_UTL.GET_MIN_COM_VERSION +DBMS_REPCAT_UTL.GET_MV_BASE_SNAME_AND_ONAME +DBMS_REPCAT_UTL.GET_NLS_PREFIX +DBMS_REPCAT_UTL.GET_NLS_SUBSTR +DBMS_REPCAT_UTL.GET_OBJECT_FLAG +DBMS_REPCAT_UTL.GET_OBJECT_STATUS +DBMS_REPCAT_UTL.GET_OBJGEN_TABLE +DBMS_REPCAT_UTL.GET_QUALIFIER +DBMS_REPCAT_UTL.GET_REMOTE_REPGROUP_OWNER +DBMS_REPCAT_UTL.GET_REPCOLUMN_FIX_INFO +DBMS_REPCAT_UTL.GET_REPCOLUMN_FLAG +DBMS_REPCAT_UTL.GET_REPCOLUMN_INFO +DBMS_REPCAT_UTL.GET_REPCOLUMN_INFO_SOFT +DBMS_REPCAT_UTL.GET_SNAPSHOT_BASE_TNAME +DBMS_REPCAT_UTL.GET_TOP_FLAVOR_ID +DBMS_REPCAT_UTL.GET_TRANSPARENT_SYNONYM +DBMS_REPCAT_UTL.GET_UNUSED_NAME +DBMS_REPCAT_UTL.GRANT_EXECUTE_ON_WRAPPER +DBMS_REPCAT_UTL.INITIALIZE_TOP_FLAVOR +DBMS_REPCAT_UTL.INSERT_DESTINATION +DBMS_REPCAT_UTL.INVALIDATE_CACHE +DBMS_REPCAT_UTL.IS_GENERATED_OBJECT +DBMS_REPCAT_UTL.IS_GENERATED_OBJ_PURGABLE +DBMS_REPCAT_UTL.IS_IN_REPCAT +DBMS_REPCAT_UTL.IS_IN_SYNONYM_NAMESPACE +DBMS_REPCAT_UTL.IS_MASTER +DBMS_REPCAT_UTL.IS_MASTERDEF +DBMS_REPCAT_UTL.IS_PUBLIC_SYNONYM +DBMS_REPCAT_UTL.IS_REP_SUPPORT_GENERATED +DBMS_REPCAT_UTL.IS_SCHEMA +DBMS_REPCAT_UTL.IS_SNAPSHOT +DBMS_REPCAT_UTL.IS_TOP_FLAVOR_NAME +DBMS_REPCAT_UTL.IS_TRACE_ON +DBMS_REPCAT_UTL.I_CAN_PING +DBMS_REPCAT_UTL.LOCK_REPGROUP +DBMS_REPCAT_UTL.MIN_REP_VERSION +DBMS_REPCAT_UTL.MIN_UPDATE_VERSION +DBMS_REPCAT_UTL.MODIFY_GENOBJECT_INFO +DBMS_REPCAT_UTL.MODIFY_REPCATLOG_INFO +DBMS_REPCAT_UTL.MODIFY_REPCAT_INFO +DBMS_REPCAT_UTL.MODIFY_REPCOLUMN_INFO +DBMS_REPCAT_UTL.MODIFY_REPGROUP_INFO +DBMS_REPCAT_UTL.MODIFY_REPOBJECT_INFO +DBMS_REPCAT_UTL.MODIFY_REPPROP_INFO +DBMS_REPCAT_UTL.NOTGENERATED_COUNT +DBMS_REPCAT_UTL.OBJECT_EXISTS +DBMS_REPCAT_UTL.OBJECT_IN_FLAVOR +DBMS_REPCAT_UTL.PERMIT_PING +DBMS_REPCAT_UTL.RECORD_GENERATED_OBJECT +DBMS_REPCAT_UTL.REMOTE_IS_SNAPGROUP +DBMS_REPCAT_UTL.REMOVE_CONFLICT_INFO +DBMS_REPCAT_UTL.REMOVE_REPCOLUMN +DBMS_REPCAT_UTL.REMOVE_REPGROUP +DBMS_REPCAT_UTL.REMOVE_REPOBJECT +DBMS_REPCAT_UTL.REPCOLUMN_EXISTS +DBMS_REPCAT_UTL.REPLICATION_VERSION +DBMS_REPCAT_UTL.REPSCHEMA_STATUS +DBMS_REPCAT_UTL.RESOLVE_NAME +DBMS_REPCAT_UTL.SET_CLONE_COMMIT_FREQUENCY +DBMS_REPCAT_UTL.SET_COMMIT_FREQUENCY +DBMS_REPCAT_UTL.SET_DEFERGEN_TABLE +DBMS_REPCAT_UTL.SET_FLAVOR_TRIGGER +DBMS_REPCAT_UTL.SET_GEN_REPLICATION_SUPPORT +DBMS_REPCAT_UTL.SET_LOCAL_FLAVOR +DBMS_REPCAT_UTL.SET_MIN_COMMUNICATION +DBMS_REPCAT_UTL.SET_OBJGEN_TABLE +DBMS_REPCAT_UTL.SET_REPCOLUMN_FLAG +DBMS_REPCAT_UTL.SLOW_DOWN +DBMS_REPCAT_UTL.STRINGS_EQUAL +DBMS_REPCAT_UTL.SUSPEND_MASTER_ACT_CALLBACK +DBMS_REPCAT_UTL.SYNC_UP_GROUPED_COLUMN +DBMS_REPCAT_UTL.SYNC_UP_PARAMETER_COLUMN +DBMS_REPCAT_UTL.TRANSPARENT_SYNONYMS +DBMS_REPCAT_UTL.UNCL_TO_DBLINK +DBMS_REPCAT_UTL.UNCL_TO_NAME +DBMS_REPCAT_UTL.VERIFY_LOCAL_FLAVOR +DBMS_REPCAT_UTL.WRITE_TRACE +DBMS_REPCAT_UTL2.CHECK_OBJECT_SHAPE +DBMS_REPCAT_UTL2.COMMA_TO_TABLE +DBMS_REPCAT_UTL2.COMPARE_TABLE_INFO +DBMS_REPCAT_UTL2.COMPARE_TABLE_INFO_COMPAT +DBMS_REPCAT_UTL2.COMPARE_TABLE_INFO_WORKER +DBMS_REPCAT_UTL2.GET_OBJECT_SHAPE +DBMS_REPCAT_UTL2.GET_PIECE_SHAPE +DBMS_REPCAT_UTL2.GET_PIECE_SHAPE_COMPAT +DBMS_REPCAT_UTL2.GET_PIECE_SHAPE_WORKER +DBMS_REPCAT_UTL2.GET_TABLE_INFO +DBMS_REPCAT_UTL2.GET_TABLE_INFO_COMPAT +DBMS_REPCAT_UTL2.GET_TABLE_INFO_WORKER +DBMS_REPCAT_UTL2.REPLICATION_VERSION +DBMS_REPCAT_UTL2.SET_CHECK_NUMROWS +DBMS_REPCAT_UTL3. +DBMS_REPCAT_UTL3.BAD_REQUEST +DBMS_REPCAT_UTL3.COUNT_ASYNC_DESTS +DBMS_REPCAT_UTL3.COUNT_EARLIER +DBMS_REPCAT_UTL3.CREATE_MASTER_REPOBJECT_MASTER +DBMS_REPCAT_UTL3.DECODE_BOOL +DBMS_REPCAT_UTL3.DELETE_MASTERDEF_LOGREC +DBMS_REPCAT_UTL3.DISABLE_RPC_PROCESSING +DBMS_REPCAT_UTL3.DO_CALLBACK +DBMS_REPCAT_UTL3.DROP_REPOBJECT +DBMS_REPCAT_UTL3.DROP_REPOBJECTS +DBMS_REPCAT_UTL3.ENABLE_RPC_PROCESSING +DBMS_REPCAT_UTL3.END_OF_ALTER +DBMS_REPCAT_UTL3.EXECUTE_DDL_MASTER +DBMS_REPCAT_UTL3.FINISH_ADD_MASTER_MASTERDEF +DBMS_REPCAT_UTL3.GENERATE_SUPPORT_HERE +DBMS_REPCAT_UTL3.GEN_ALL_PH2_OBJS +DBMS_REPCAT_UTL3.GEN_PKG_SUPPORT_TABLE +DBMS_REPCAT_UTL3.GET_FLAVOR_COLUMNS +DBMS_REPCAT_UTL3.GET_GROUP_AND_FLAVOR +DBMS_REPCAT_UTL3.GET_KEY_COLUMNS +DBMS_REPCAT_UTL3.GET_NEXT_ELEM +DBMS_REPCAT_UTL3.IS_FLAVOR_PUBLISHED +DBMS_REPCAT_UTL3.IS_TEMPORARY_TABLE +DBMS_REPCAT_UTL3.IS_TOP_FLAVOR_ID +DBMS_REPCAT_UTL3.LOGREC_DISPATCH +DBMS_REPCAT_UTL3.OK_TO_DROP_OBJECT +DBMS_REPCAT_UTL3.REGENERATE_PH2_OBJS +DBMS_REPCAT_UTL3.REP_SET_GEN_STATUS +DBMS_REPCAT_UTL3.REP_SET_GEN_STATUS_ANY +DBMS_REPCAT_UTL3.REP_SET_GEN_STATUS_ANY_TMP +DBMS_REPCAT_UTL3.REP_SET_GEN_STATUS_TMP +DBMS_REPCAT_UTL3.RESUME_MASTER_ACTIVITY_MASTER +DBMS_REPCAT_UTL3.RETRY_NEEDED +DBMS_REPCAT_UTL3.VARCHAR2S_TO_LNAME_ARRAY +DBMS_REPCAT_UTL4. +DBMS_REPCAT_UTL4.CHECK_SYNONYM_REMOTE +DBMS_REPCAT_UTL4.COMPARE_INDEXTYPES +DBMS_REPCAT_UTL4.COMPARE_OPERATORS +DBMS_REPCAT_UTL4.COMPARE_SOURCE +DBMS_REPCAT_UTL4.COMPARE_TABLES +DBMS_REPCAT_UTL4.COMPARE_TRIGGERS +DBMS_REPCAT_UTL4.COMPARE_TYPES +DBMS_REPCAT_UTL4.COMPARE_TYPE_STRUCTURE +DBMS_REPCAT_UTL4.COMPARE_VIEWS +DBMS_REPCAT_UTL4.COMPATIBLE_OBJECTS +DBMS_REPCAT_UTL4.DBLINK_TO_NAME +DBMS_REPCAT_UTL4.DECODE_STRING +DBMS_REPCAT_UTL4.DELETE_MASTER +DBMS_REPCAT_UTL4.DO_MASTERDEF_ALTER +DBMS_REPCAT_UTL4.DO_MASTERDEF_CREATE +DBMS_REPCAT_UTL4.DO_MASTERDEF_DDL +DBMS_REPCAT_UTL4.DROP_MASTER_REPOBJECT +DBMS_REPCAT_UTL4.DROP_MASTER_REPOBJ_MASTERDEF +DBMS_REPCAT_UTL4.ENCODE_BOOL +DBMS_REPCAT_UTL4.ENCODE_STRINGS +DBMS_REPCAT_UTL4.ENSURE_GROUP_QUALIFIER +DBMS_REPCAT_UTL4.ENSURE_MASTER +DBMS_REPCAT_UTL4.ENSURE_MASTERS +DBMS_REPCAT_UTL4.EXECUTE_REMOTE_INTENTIONS +DBMS_REPCAT_UTL4.EXTENSION_STATUS_NAME +DBMS_REPCAT_UTL4.GEN_INT_END_CALLBACK +DBMS_REPCAT_UTL4.GEN_REP_ENDPH2_CALLBACK +DBMS_REPCAT_UTL4.GEN_REP_PKG_CALLBACK +DBMS_REPCAT_UTL4.GET_ADMIN_LOCK +DBMS_REPCAT_UTL4.GET_DDL +DBMS_REPCAT_UTL4.GET_DDLS +DBMS_REPCAT_UTL4.GET_INDEXTYPE_INFO +DBMS_REPCAT_UTL4.GET_OPERATOR_INFO +DBMS_REPCAT_UTL4.GET_STRUCTURAL_TYPE_INFO +DBMS_REPCAT_UTL4.INCOMPLETE_MASTERDEF_REQUEST +DBMS_REPCAT_UTL4.INCOMPLETE_REQUEST +DBMS_REPCAT_UTL4.IN_COUNT +DBMS_REPCAT_UTL4.IS_IN +DBMS_REPCAT_UTL4.IS_TABLESPACE +DBMS_REPCAT_UTL4.MASTERDEF_PREFIX +DBMS_REPCAT_UTL4.MCAST_INTENTION +DBMS_REPCAT_UTL4.NAME_CONFLICT_EXISTS +DBMS_REPCAT_UTL4.ORDER_USER_OBJECTS +DBMS_REPCAT_UTL4.PARTITION_BY_TWO_VERSIONS +DBMS_REPCAT_UTL4.PARTITION_BY_VERSION +DBMS_REPCAT_UTL4.PROTECT +DBMS_REPCAT_UTL4.RECORD_NONMASTERDEF +DBMS_REPCAT_UTL4.REMOTE_MASTERDEF_CHECK +DBMS_REPCAT_UTL4.REMOVE_REPPROP +DBMS_REPCAT_UTL4.RENAME_SHADOW_GROUP_FROM_MAS +DBMS_REPCAT_UTL4.RENAME_SHADOW_GROUP_MAS +DBMS_REPCAT_UTL4.REPCAT_DO_DEFERRED +DBMS_REPCAT_UTL4.RESUME_MASTER_ACT_MASTERDEF +DBMS_REPCAT_UTL4.STRING_APPEND +DBMS_REPCAT_UTL4.STRIP +DBMS_REPCAT_UTL4.SUPPORTED_VERSION +DBMS_REPCAT_UTL4.SUSPEND_MASTER_ACT_MASTERDEF +DBMS_REPCAT_UTL4.TICKLE_JOB +DBMS_REPCAT_UTL4.UPDATE_MASTERDEF_LOGREC +DBMS_REPCAT_UTL4.VERIFY_COLUMN_TYPES +DBMS_REPCAT_VALIDATE. +DBMS_REPCAT_VALIDATE.VALIDATE +DBMS_REPCAT_VALIDATE.VALIDATE_FLAG_ERROR +DBMS_REPCAT_VALIDATE.VALIDATE_GET_ERROR +DBMS_REPCAT_VALIDATE.VALIDATE_GET_INFO +DBMS_REPCAT_VALIDATE.VALIDATE_GET_NEXT_ERROR +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_GENERATED +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_LINKS +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_LINKS_SCHED +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_OBJECTS +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_OBJECTS_LOCAL +DBMS_REPORT. +DBMS_REPORT.BUILD_GENERIC_TAG +DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT +DBMS_REPORT.BUILD_REPORT_REFERENCE_VARG +DBMS_REPORT.CLEAR_FRAMEWORK +DBMS_REPORT.CREATE_SHARED_DIRECTORY +DBMS_REPORT.DROP_SHARED_DIRECTORY +DBMS_REPORT.FORMAT_REPORT +DBMS_REPORT.GET_REPORT +DBMS_REPORT.PARSE_REPORT_REFERENCE +DBMS_REPORT.REGISTER_COMPONENT +DBMS_REPORT.REGISTER_CUSTOM_FORMAT +DBMS_REPORT.REGISTER_REPORT +DBMS_REPORT.REGISTER_TEXT_FORMAT +DBMS_REPORT.REGISTER_XSLT_FORMAT +DBMS_REPORT.RESTORE_REPORT_ENV +DBMS_REPORT.SETUP_REPORT_ENV +DBMS_REPORT.STORE_FILE +DBMS_REPORT.TRANSFORM_HTML_TO_TEXT +DBMS_REPORT.VALIDATE_REPORT +DBMS_REPUTIL. +DBMS_REPUTIL.ADDITIVE +DBMS_REPUTIL.APPEND_SEQUENCE +DBMS_REPUTIL.APPEND_SEQUENCE_NC +DBMS_REPUTIL.APPEND_SITE_NAME +DBMS_REPUTIL.APPEND_SITE_NAME_NC +DBMS_REPUTIL.AVERAGE +DBMS_REPUTIL.CANONICALIZE +DBMS_REPUTIL.DISCARD +DBMS_REPUTIL.ENSURE_NORMAL_STATUS +DBMS_REPUTIL.ENTER_STATISTICS +DBMS_REPUTIL.FROM_REMOTE +DBMS_REPUTIL.GET_CONSTRAINT_NAME +DBMS_REPUTIL.GLOBAL_NAME +DBMS_REPUTIL.IMPORT_REP_TRIGGER_STRING +DBMS_REPUTIL.MAKE_INTERNAL_PKG +DBMS_REPUTIL.MAXIMUM +DBMS_REPUTIL.MINIMUM +DBMS_REPUTIL.OVERWRITE +DBMS_REPUTIL.RAW_TO_VARCHAR2 +DBMS_REPUTIL.RECURSION_OFF +DBMS_REPUTIL.RECURSION_ON +DBMS_REPUTIL.REPLICATION_IS_ON +DBMS_REPUTIL.REPLICATION_OFF +DBMS_REPUTIL.REPLICATION_ON +DBMS_REPUTIL.REP_BEGIN +DBMS_REPUTIL.REP_END +DBMS_REPUTIL.SET_GLOBAL_NAME +DBMS_REPUTIL.SYNC_UP_REP +DBMS_REPUTIL2. +DBMS_REPUTIL2.BIC +DBMS_REPUTIL2.BIS +DBMS_REPUTIL2.BIT +DBMS_REPUTIL2.CHOOSE_BLOB +DBMS_REPUTIL2.CHOOSE_CHAR +DBMS_REPUTIL2.CHOOSE_CLOB +DBMS_REPUTIL2.CHOOSE_DATE +DBMS_REPUTIL2.CHOOSE_NCHAR +DBMS_REPUTIL2.CHOOSE_NCLOB +DBMS_REPUTIL2.CHOOSE_NUMBER +DBMS_REPUTIL2.CHOOSE_NVARCHAR2 +DBMS_REPUTIL2.CHOOSE_RAW +DBMS_REPUTIL2.CHOOSE_ROWID +DBMS_REPUTIL2.CHOOSE_VARCHAR2 +DBMS_REPUTIL2.GET_FINAL_BLOB +DBMS_REPUTIL2.GET_FINAL_CHAR +DBMS_REPUTIL2.GET_FINAL_CLOB +DBMS_REPUTIL2.GET_FINAL_DATE +DBMS_REPUTIL2.GET_FINAL_LOB +DBMS_REPUTIL2.GET_FINAL_NUMBER +DBMS_REPUTIL2.GET_FINAL_RAW +DBMS_REPUTIL2.GET_FINAL_ROWID +DBMS_REPUTIL2.GET_FINAL_VARCHAR2 +DBMS_REPUTIL2.OLD_BLOB_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_BLOB_EQUALS_NEW +DBMS_REPUTIL2.OLD_BLOB_EQ_CURRENT +DBMS_REPUTIL2.OLD_BLOB_EQ_NEW +DBMS_REPUTIL2.OLD_CHAR_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_CHAR_EQUALS_NEW +DBMS_REPUTIL2.OLD_CHAR_EQ_CURRENT +DBMS_REPUTIL2.OLD_CHAR_EQ_NEW +DBMS_REPUTIL2.OLD_CLOB_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_CLOB_EQUALS_NEW +DBMS_REPUTIL2.OLD_CLOB_EQ_CURRENT +DBMS_REPUTIL2.OLD_CLOB_EQ_NEW +DBMS_REPUTIL2.OLD_DATE_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_DATE_EQUALS_NEW +DBMS_REPUTIL2.OLD_DATE_EQ_CURRENT +DBMS_REPUTIL2.OLD_DATE_EQ_NEW +DBMS_REPUTIL2.OLD_NUMBER_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_NUMBER_EQUALS_NEW +DBMS_REPUTIL2.OLD_NUMBER_EQ_CURRENT +DBMS_REPUTIL2.OLD_NUMBER_EQ_NEW +DBMS_REPUTIL2.OLD_RAW_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_RAW_EQUALS_NEW +DBMS_REPUTIL2.OLD_RAW_EQ_CURRENT +DBMS_REPUTIL2.OLD_RAW_EQ_NEW +DBMS_REPUTIL2.OLD_ROWID_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_ROWID_EQUALS_NEW +DBMS_REPUTIL2.OLD_ROWID_EQ_CURRENT +DBMS_REPUTIL2.OLD_ROWID_EQ_NEW +DBMS_REPUTIL2.OLD_VARCHAR2_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_VARCHAR2_EQUALS_NEW +DBMS_REPUTIL2.OLD_VARCHAR2_EQ_CURRENT +DBMS_REPUTIL2.OLD_VARCHAR2_EQ_NEW +DBMS_RESCONFIG. +DBMS_RESCONFIG.ADDREPOSITORYRESCONFIG +DBMS_RESCONFIG.ADDRESCONFIG +DBMS_RESCONFIG.APPENDRESCONFIG +DBMS_RESCONFIG.DELETEREPOSITORYRESCONFIG +DBMS_RESCONFIG.DELETERESCONFIG +DBMS_RESCONFIG.GETLISTENERS +DBMS_RESCONFIG.GETREPOSITORYRESCONFIG +DBMS_RESCONFIG.GETREPOSITORYRESCONFIGPATHS +DBMS_RESCONFIG.GETRESCONFIG +DBMS_RESCONFIG.GETRESCONFIGPATHS +DBMS_RESOURCE_MANAGER. +DBMS_RESOURCE_MANAGER.BEGIN_SQL_BLOCK +DBMS_RESOURCE_MANAGER.CALIBRATE_IO +DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA +DBMS_RESOURCE_MANAGER.CREATE_CATEGORY +DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA +DBMS_RESOURCE_MANAGER.CREATE_PLAN +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN +DBMS_RESOURCE_MANAGER.DELETE_CATEGORY +DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.DELETE_PLAN +DBMS_RESOURCE_MANAGER.DELETE_PLAN_CASCADE +DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.END_SQL_BLOCK +DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING +DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING_PRI +DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA +DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS +DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_USER +DBMS_RESOURCE_MANAGER.SWITCH_PLAN +DBMS_RESOURCE_MANAGER.UPDATE_CATEGORY +DBMS_RESOURCE_MANAGER.UPDATE_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.UPDATE_PLAN +DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA +DBMS_RESOURCE_MANAGER_PRIVS. +DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE +DBMS_RESOURCE_MANAGER_PRIVS.REVOKE_SWITCH_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER_PRIVS.REVOKE_SYSTEM_PRIVILEGE +DBMS_RESULT_CACHE. +DBMS_RESULT_CACHE.BYPASS +DBMS_RESULT_CACHE.DELETE_DEPENDENCY +DBMS_RESULT_CACHE.FLUSH +DBMS_RESULT_CACHE.INVALIDATE +DBMS_RESULT_CACHE.INVALIDATE_OBJECT +DBMS_RESULT_CACHE.MEMORY_REPORT +DBMS_RESULT_CACHE.STATUS +DBMS_RESULT_CACHE_API. +DBMS_RESULT_CACHE_API.GET +DBMS_RESULT_CACHE_API.GETC +DBMS_RESULT_CACHE_API.SET +DBMS_RESULT_CACHE_API.SETC +DBMS_RESUMABLE. +DBMS_RESUMABLE.ABORT +DBMS_RESUMABLE.GET_SESSION_TIMEOUT +DBMS_RESUMABLE.GET_TIMEOUT +DBMS_RESUMABLE.SET_SESSION_TIMEOUT +DBMS_RESUMABLE.SET_TIMEOUT +DBMS_RESUMABLE.SPACE_ERROR_INFO +DBMS_RLM4J_DICTMAINT. +DBMS_RLM4J_DICTMAINT.ADD_ATTRIBUTE_ALIAS +DBMS_RLM4J_DICTMAINT.ADD_EVENT_STRUCT +DBMS_RLM4J_DICTMAINT.ADD_RULE_CLASS +DBMS_RLM4J_DICTMAINT.DICT_NAME +DBMS_RLM4J_DICTMAINT.VALIDATE_RULECLS_PROPERTIES +DBMS_RLM4J_DICTMAINT.VALIDATE_RULE_CONDITION +DBMS_RLM4J_DICTMAINT_DR. +DBMS_RLM4J_DICTMAINT_DR.ADD_ATTRIBUTE_ALIAS +DBMS_RLM4J_DICTMAINT_DR.ADD_EVENT_STRUCT +DBMS_RLM4J_DICTMAINT_DR.ADD_RULE_SET +DBMS_RLM4J_DICTMAINT_DR.ES_CREATED_BY_UI +DBMS_RLMGR. +DBMS_RLMGR.ADD_ELEMENTARY_ATTRIBUTE +DBMS_RLMGR.ADD_EVENT +DBMS_RLMGR.ADD_FUNCTIONS +DBMS_RLMGR.ADD_RULE +DBMS_RLMGR.CONDITION_REF +DBMS_RLMGR.CONSUME_EVENT +DBMS_RLMGR.CONSUME_PRIM_EVENTS +DBMS_RLMGR.CREATE_CONDITIONS_TABLE +DBMS_RLMGR.CREATE_EVENT_STRUCT +DBMS_RLMGR.CREATE_EXPFIL_INDEXES +DBMS_RLMGR.CREATE_INTERFACE +DBMS_RLMGR.CREATE_RULE_CLASS +DBMS_RLMGR.DELETE_RULE +DBMS_RLMGR.DROP_CONDITIONS_TABLE +DBMS_RLMGR.DROP_EVENT_STRUCT +DBMS_RLMGR.DROP_EXPFIL_INDEXES +DBMS_RLMGR.DROP_INTERFACE +DBMS_RLMGR.DROP_RULE_CLASS +DBMS_RLMGR.EXTEND_EVENT_STRUCT +DBMS_RLMGR.GET_AGGREGATE_VALUE +DBMS_RLMGR.GRANT_PRIVILEGE +DBMS_RLMGR.PROCESS_RULES +DBMS_RLMGR.PURGE_EVENTS +DBMS_RLMGR.RESET_SESSION +DBMS_RLMGR.REVOKE_PRIVILEGE +DBMS_RLMGR.SYNC_TEXT_INDEXES +DBMS_RLMGR_DEPASEXP. +DBMS_RLMGR_DEPASEXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_RLMGR_DEPASEXP.INSTANCE_INFO_EXP +DBMS_RLMGR_DEPASEXP.SCHEMA_INFO_EXP +DBMS_RLMGR_DEPASEXP.SYSTEM_INFO_EXP +DBMS_RLMGR_DR. +DBMS_RLMGR_DR.ADD_PRIMITIVE_TO_COMPOSITE +DBMS_RLMGR_DR.ADD_TALS2EVTSTRUCT +DBMS_RLMGR_DR.CIRTB_EQUAL_COLS +DBMS_RLMGR_DR.CLEANSCHACTIONS +DBMS_RLMGR_DR.CLEANUP_EVENTS +DBMS_RLMGR_DR.COMPILE_RULE_PREDICATES +DBMS_RLMGR_DR.COPY_COMPOSITE_EVENT +DBMS_RLMGR_DR.CREATE_ATTRIBUTE_SET_LW +DBMS_RLMGR_DR.CREATE_EVENT_STRUCT +DBMS_RLMGR_DR.DROP_RULE_SET +DBMS_RLMGR_DR.EQUAL_SPEC_HAS_ALTS +DBMS_RLMGR_DR.ES_CREATED_BY_UI +DBMS_RLMGR_DR.EVENT_CLEANUP_SCHD +DBMS_RLMGR_DR.EVENT_STRUCT_EXISTS +DBMS_RLMGR_DR.EXECASCHACTION +DBMS_RLMGR_DR.EXECSCHDACTIONS +DBMS_RLMGR_DR.FAKE_NO_NOT_ELEM +DBMS_RLMGR_DR.FIND_MATCH_ON_TABALS +DBMS_RLMGR_DR.GET_CALL_PRIM_TYPALS +DBMS_RLMGR_DR.GET_CEST_TALSATTRALS +DBMS_RLMGR_DR.GET_CLLHVNGATTR_REPR +DBMS_RLMGR_DR.GET_CNFEVENT_CONFIG +DBMS_RLMGR_DR.GET_CNFREG_INFO +DBMS_RLMGR_DR.GET_COLLECTAB_CTBCMD +DBMS_RLMGR_DR.GET_COLLECTION_REPR +DBMS_RLMGR_DR.GET_COLLECTION_TABS +DBMS_RLMGR_DR.GET_CTBSTORAGE_CLAUSE +DBMS_RLMGR_DR.GET_DEPDOBJCTS_4DROP +DBMS_RLMGR_DR.GET_DMLEVENT_CONFIG +DBMS_RLMGR_DR.GET_DURATION_MIN +DBMS_RLMGR_DR.GET_EQLCODE2EVTATTR_DECODE +DBMS_RLMGR_DR.GET_EQLDECODE4EVTATTR +DBMS_RLMGR_DR.GET_EQLHSHKEYVL +DBMS_RLMGR_DR.GET_EQLHSHKEY_WHENCLSS +DBMS_RLMGR_DR.GET_EQUAL_KEYIDX +DBMS_RLMGR_DR.GET_EVENTATTR_LIST +DBMS_RLMGR_DR.GET_EVENTSTRUCT_CLLINFO +DBMS_RLMGR_DR.GET_EVTST_N_ALIAS_LIST +DBMS_RLMGR_DR.GET_EVT_EQUAL_ATTR_MAP +DBMS_RLMGR_DR.GET_EXCLUSIVE_PRIM_EVTALS +DBMS_RLMGR_DR.GET_GROUPBY_CLAUSE +DBMS_RLMGR_DR.GET_HAVING_ATTR_ID +DBMS_RLMGR_DR.GET_HAVING_IDENT +DBMS_RLMGR_DR.GET_HAVING_REPR +DBMS_RLMGR_DR.GET_MSGEVTHKEYVL +DBMS_RLMGR_DR.GET_NEGEVT_BITARRAY +DBMS_RLMGR_DR.GET_OBYCLS_ALSLIST +DBMS_RLMGR_DR.GET_OBYCLS_SELLIST +DBMS_RLMGR_DR.GET_OBYCOLS_LIST +DBMS_RLMGR_DR.GET_ORDERBY_CLAUSE +DBMS_RLMGR_DR.GET_PEVENT_COND_TABS +DBMS_RLMGR_DR.GET_PEVTST_ALIAS +DBMS_RLMGR_DR.GET_PRIM_EVENT_TYPE_MAP +DBMS_RLMGR_DR.GET_PRIVILEGE_CODE +DBMS_RLMGR_DR.GET_RSET_EQUAL_ATTRS +DBMS_RLMGR_DR.GET_RSET_EQUAL_SPEC +DBMS_RLMGR_DR.GET_RULECLASS_INFO +DBMS_RLMGR_DR.GET_RULE_SET_PACK +DBMS_RLMGR_DR.GET_SET_DUPL_EVENTS +DBMS_RLMGR_DR.GET_SMPLES_ONLYTA +DBMS_RLMGR_DR.GET_TABALS_LIST +DBMS_RLMGR_DR.GRANT_PRIVILEGE +DBMS_RLMGR_DR.HAS_ALTERNATE_EQUALCLS +DBMS_RLMGR_DR.INSERT_DMLEVENT_TRIGINFO +DBMS_RLMGR_DR.IS_COLLECTION_ENB +DBMS_RLMGR_DR.IS_NOT_DUPLICATE_TYPE +DBMS_RLMGR_DR.MERGE_ASET_UDFS +DBMS_RLMGR_DR.MERGE_EQUAL2GROUPBY_LIST +DBMS_RLMGR_DR.OPTIMIZE_EQUAL_SPEC +DBMS_RLMGR_DR.PARSE_RULESET_PROP +DBMS_RLMGR_DR.PARSE_RULE_CONDITION +DBMS_RLMGR_DR.PARTIAL_EQUAL_CLS_OPT +DBMS_RLMGR_DR.POPULATE_EQLCLS_DTYPES +DBMS_RLMGR_DR.PRINT_EQLHSHKEY_MAPS +DBMS_RLMGR_DR.RAISE_ERROR +DBMS_RLMGR_DR.RESET_ATTSET_ADTDERV +DBMS_RLMGR_DR.RESOLVE_COND_REF +DBMS_RLMGR_DR.RETRACTACTION +DBMS_RLMGR_DR.REVOKE_PRIVILEGE +DBMS_RLMGR_DR.REWRITE_OBYCLS_TABALS +DBMS_RLMGR_DR.SCHEDULEACTION +DBMS_RLMGR_DR.SCH_CLEANUP +DBMS_RLMGR_DR.SETUP_ACTION_SCHEDULERS +DBMS_RLMGR_DR.SET_COLLECTION_TABLE +DBMS_RLMGR_DR.SET_COMPRS_TABLES +DBMS_RLMGR_DR.SET_PRIMCOND_TABLE +DBMS_RLMGR_DR.SET_RSET_INDEXED +DBMS_RLMGR_DR.SET_RSET_STATUS +DBMS_RLMGR_DR.TAA_SYNC_COND_TABS +DBMS_RLMGR_DR.UNFAKE_NO_NOT_ELEM +DBMS_RLMGR_DR.VALIDATE_ACTPRF +DBMS_RLMGR_DR.VALIDATE_DMLEVTS_CLS +DBMS_RLMGR_DR.VALIDATE_STGCLS +DBMS_RLMGR_DR.VLDTE_PRIMEVT_PROP +DBMS_RLMGR_DR.VLDTE_RCLS_ACTPRF +DBMS_RLMGR_DR.VLDTE_RCLS_STGCLS +DBMS_RLMGR_EXP. +DBMS_RLMGR_EXP.DUMP_DROP_DEPOBJS +DBMS_RLMGR_EXP.POST_RULESETTAB_DUMP +DBMS_RLMGR_EXP.PSTSCH_DROP_DEPOBJS +DBMS_RLMGR_EXP.PSTSCH_RULESET_CREATE +DBMS_RLMGR_IR. +DBMS_RLMGR_IR.ASSIGN_ATTRIBUTE_SET_LW +DBMS_RLMGR_IR.CHK_CNF_PRIVILEGE +DBMS_RLMGR_IR.CMPRCLS_CONDTAB_LCKRELD +DBMS_RLMGR_IR.CREATE_ATTRIBUTE_SET_LW +DBMS_RLMGR_IR.CREATE_ATTRSET_FUNCTIONS_LW +DBMS_RLMGR_IR.CREATE_ATTRSET_WCRTTIME +DBMS_RLMGR_IR.CREATE_CNFEVENTS_OBJS +DBMS_RLMGR_IR.CREATE_COMP_EXPRS_TABS +DBMS_RLMGR_IR.CREATE_COMP_RSLTS_OBJS +DBMS_RLMGR_IR.CREATE_COMP_RSVLD_TRIG +DBMS_RLMGR_IR.CREATE_CONDTAB_TRIGGER +DBMS_RLMGR_IR.CREATE_DML_EVENT_TRIGS +DBMS_RLMGR_IR.CREATE_EXPFIL_IDX4COMPRS +DBMS_RLMGR_IR.CREATE_EXPFIL_INDEX +DBMS_RLMGR_IR.CREATE_RULCLS_INTERFACE +DBMS_RLMGR_IR.CREATE_RULCLS_WSINTERFACE +DBMS_RLMGR_IR.CREATE_SMPL_RSLTS_OBJS +DBMS_RLMGR_IR.GET_OBJECT_OWNER_N_NAME +DBMS_RLMGR_IR.GET_RSET_DICT_NMS +DBMS_RLMGR_IR.PLACE_QUOTES_IF_REQ +DBMS_RLMGR_IR.PREPARE_ATTRIBUTE_SET +DBMS_RLMGR_IRPK. +DBMS_RLMGR_IRPK.CREATE_COMP_RULECLS_PACKAGE +DBMS_RLMGR_IRPK.CREATE_SMPL_RULECLS_PACKAGE +DBMS_RLMGR_UTL. +DBMS_RLMGR_UTL.APPEND_ANY_2_JOIN +DBMS_RLMGR_UTL.APPEND_EQUAL_2_JOIN +DBMS_RLMGR_UTL.APPEND_SEQ_2_JOIN +DBMS_RLMGR_UTL.CHECK_RULE_PRIVILEGE +DBMS_RLMGR_UTL.CLEANSCHACTIONS +DBMS_RLMGR_UTL.CLEANUP_EVENTS +DBMS_RLMGR_UTL.COMPILE_RULE_PREDICATES +DBMS_RLMGR_UTL.COMPUTE_AGGR_VAL +DBMS_RLMGR_UTL.COND_TAB_IMPMAINT +DBMS_RLMGR_UTL.CONSTRUCT_NEG_JOIN +DBMS_RLMGR_UTL.CREATE_EXPFIL_INDEXES +DBMS_RLMGR_UTL.CREATE_INTERFACE +DBMS_RLMGR_UTL.CREATE_WSINTERFACE +DBMS_RLMGR_UTL.DICT_NAME +DBMS_RLMGR_UTL.DROP_EXPFIL_INDEXES +DBMS_RLMGR_UTL.DROP_INTERFACE +DBMS_RLMGR_UTL.DROP_WSINTERFACE +DBMS_RLMGR_UTL.EQUAL_CHECK +DBMS_RLMGR_UTL.GET_AND_COUNT +DBMS_RLMGR_UTL.GET_CMTSCN4XID +DBMS_RLMGR_UTL.GET_COLLECTION_REPR +DBMS_RLMGR_UTL.GET_EQLHSHKEYVL +DBMS_RLMGR_UTL.GET_EQLHSHKEYVLE +DBMS_RLMGR_UTL.GET_HAVING_ATTR_ID +DBMS_RLMGR_UTL.GET_HAVING_REPR +DBMS_RLMGR_UTL.GET_MSGEVTHKEYVL +DBMS_RLMGR_UTL.IMPDISRULES_CONDREFS +DBMS_RLMGR_UTL.IS_AGGREGATEPRED_TRUE +DBMS_RLMGR_UTL.LOCK_REATTEMPT +DBMS_RLMGR_UTL.NEXTBITPOSITION +DBMS_RLMGR_UTL.PARSE_RULE_COND +DBMS_RLMGR_UTL.PROCESS_RULES_ATX +DBMS_RLMGR_UTL.RAISE_ERROR +DBMS_RLMGR_UTL.RESOLVE_COND_REF +DBMS_RLMGR_UTL.RETRACTACTION +DBMS_RLMGR_UTL.SCHEDULEACTION +DBMS_RLMGR_UTL.SEQ_CHECK +DBMS_RLMGR_UTL.SET_PARAMETER +DBMS_RLMGR_UTL.STRIP_CONDITION_PRIM +DBMS_RLMGR_UTL.VALIDATE_XMLINPUT +DBMS_RLS. +DBMS_RLS.ADD_GROUPED_POLICY +DBMS_RLS.ADD_POLICY +DBMS_RLS.ADD_POLICY_CONTEXT +DBMS_RLS.CREATE_POLICY_GROUP +DBMS_RLS.DELETE_POLICY_GROUP +DBMS_RLS.DISABLE_GROUPED_POLICY +DBMS_RLS.DROP_GROUPED_POLICY +DBMS_RLS.DROP_POLICY +DBMS_RLS.DROP_POLICY_CONTEXT +DBMS_RLS.ENABLE_GROUPED_POLICY +DBMS_RLS.ENABLE_POLICY +DBMS_RLS.REFRESH_GROUPED_POLICY +DBMS_RLS.REFRESH_POLICY +DBMS_RMGR_GROUP_EXPORT. +DBMS_RMGR_GROUP_EXPORT.AUDIT_EXP +DBMS_RMGR_GROUP_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_RMGR_GROUP_EXPORT.CREATE_EXP +DBMS_RMGR_GROUP_EXPORT.DROP_EXP +DBMS_RMGR_GROUP_EXPORT.GRANT_EXP +DBMS_RMGR_GROUP_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_RMGR_PACT_EXPORT. +DBMS_RMGR_PACT_EXPORT.SYSTEM_INFO_EXP +DBMS_RMGR_PLAN_EXPORT. +DBMS_RMGR_PLAN_EXPORT.AUDIT_EXP +DBMS_RMGR_PLAN_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_RMGR_PLAN_EXPORT.CREATE_EXP +DBMS_RMGR_PLAN_EXPORT.DROP_EXP +DBMS_RMGR_PLAN_EXPORT.GRANT_EXP +DBMS_RMGR_PLAN_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_RMIN. +DBMS_RMIN.INSTALL +DBMS_RMIN.RM$_BGN_SQLBLK +DBMS_RMIN.RM$_CALIBRATE_IO +DBMS_RMIN.RM$_CLRPAREA +DBMS_RMIN.RM$_CONSUMER_GROUP_MAPPING_PRI +DBMS_RMIN.RM$_CRTPAREA +DBMS_RMIN.RM$_CUP_CATEGORY +DBMS_RMIN.RM$_CUP_GROUP +DBMS_RMIN.RM$_CUP_PLAN +DBMS_RMIN.RM$_CUP_PLAN_DIRECTIVE +DBMS_RMIN.RM$_CUP_STORAGE_POOL_MAPPING +DBMS_RMIN.RM$_DRP_CATEGORY +DBMS_RMIN.RM$_DRP_GROUP +DBMS_RMIN.RM$_DRP_PLAN +DBMS_RMIN.RM$_DRP_PLAN_CSD +DBMS_RMIN.RM$_DRP_PLAN_DIRECTIVE +DBMS_RMIN.RM$_END_SQLBLK +DBMS_RMIN.RM$_PROCESS_PRIV +DBMS_RMIN.RM$_SET_CAPABILITY +DBMS_RMIN.RM$_SET_CONSUMER_GROUP_MAPPING +DBMS_RMIN.RM$_SET_INITIAL_GROUP +DBMS_RMIN.RM$_SET_INSTANCE_CAPABILITY +DBMS_RMIN.RM$_SUBPAREA +DBMS_RMIN.RM$_SWTCH_SESSION_GROUP +DBMS_RMIN.RM$_SWTCH_USR_GROUP +DBMS_RMIN.RM$_UP_CONSUMER_GROUP_MAPPINGS +DBMS_RMIN.RM$_VLDPAREA +DBMS_RMIN.UNINSTALL +DBMS_ROWID. +DBMS_ROWID.ROWID_BLOCK_NUMBER +DBMS_ROWID.ROWID_CREATE +DBMS_ROWID.ROWID_INFO +DBMS_ROWID.ROWID_OBJECT +DBMS_ROWID.ROWID_RELATIVE_FNO +DBMS_ROWID.ROWID_ROW_NUMBER +DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO +DBMS_ROWID.ROWID_TO_EXTENDED +DBMS_ROWID.ROWID_TO_RESTRICTED +DBMS_ROWID.ROWID_TYPE +DBMS_ROWID.ROWID_VERIFY +DBMS_RULE. +DBMS_RULE.CLOSE_ITERATOR +DBMS_RULE.EVALUATE +DBMS_RULE.GET_NEXT_HIT +DBMS_RULEADM_INTERNAL. +DBMS_RULEADM_INTERNAL.I_ALTER_RULE +DBMS_RULEADM_INTERNAL.I_CREATE_EVAL_CTX +DBMS_RULEADM_INTERNAL.I_CREATE_RULE +DBMS_RULEADM_INTERNAL.I_CREATE_RULE_SET +DBMS_RULEADM_INTERNAL.I_EVALUATION_CONTEXT_ADD_VAR +DBMS_RULEADM_INTERNAL.PATCH_RULE_PRIV +DBMS_RULEADM_INTERNAL.REGISTER_INTERNAL_ACTX +DBMS_RULEADM_INTERNAL.UNREGISTER_INTERNAL_ACTX +DBMS_RULEADM_INTERNAL.VALIDATE_RE_OBJECT +DBMS_RULE_ADM. +DBMS_RULE_ADM.ADD_RULE +DBMS_RULE_ADM.ALTER_EVALUATION_CONTEXT +DBMS_RULE_ADM.ALTER_RULE +DBMS_RULE_ADM.CREATE_EVALUATION_CONTEXT +DBMS_RULE_ADM.CREATE_RULE +DBMS_RULE_ADM.CREATE_RULE_SET +DBMS_RULE_ADM.DROP_EVALUATION_CONTEXT +DBMS_RULE_ADM.DROP_RULE +DBMS_RULE_ADM.DROP_RULE_SET +DBMS_RULE_ADM.GRANT_OBJECT_PRIVILEGE +DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE +DBMS_RULE_ADM.REMOVE_RULE +DBMS_RULE_ADM.REVOKE_OBJECT_PRIVILEGE +DBMS_RULE_ADM.REVOKE_SYSTEM_PRIVILEGE +DBMS_RULE_COMPATIBLE_90. +DBMS_RULE_COMPATIBLE_90.DOWNGRADE_RULE_OBJECTS +DBMS_RULE_COMPATIBLE_90.INCOMPATIBLE_EVCTXS +DBMS_RULE_COMPATIBLE_90.INCOMPATIBLE_RULES +DBMS_RULE_COMPATIBLE_90.INCOMPATIBLE_RULESETS +DBMS_RULE_COMPATIBLE_90.INCOMPATIBLE_RULES_ENGINE_OBJ +DBMS_RULE_COMPATIBLE_90.UPGRADE_RULE_OBJECTS +DBMS_RULE_EXIMP. +DBMS_RULE_EXIMP.IMPORT_RULE +DBMS_RULE_EXIMP.IMPORT_RULE_SET +DBMS_RULE_EXP_EC_INTERNAL. +DBMS_RULE_EXP_EC_INTERNAL.I_CREATE_EXP +DBMS_RULE_EXP_EC_INTERNAL.I_GRANT_EXP +DBMS_RULE_EXP_EC_INTERNAL.I_GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_EV_CTXS. +DBMS_RULE_EXP_EV_CTXS.AUDIT_EXP +DBMS_RULE_EXP_EV_CTXS.AUDIT_SYSPRIVS_EXP +DBMS_RULE_EXP_EV_CTXS.CREATE_EXP +DBMS_RULE_EXP_EV_CTXS.DROP_EXP +DBMS_RULE_EXP_EV_CTXS.GRANT_EXP +DBMS_RULE_EXP_EV_CTXS.GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RL_INTERNAL. +DBMS_RULE_EXP_RL_INTERNAL.I_CREATE_EXP +DBMS_RULE_EXP_RL_INTERNAL.I_GRANT_EXP +DBMS_RULE_EXP_RL_INTERNAL.I_GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RL_INTERNAL.I_INSTANCE_CALLOUT +DBMS_RULE_EXP_RL_INTERNAL.I_SCHEMA_CALLOUT +DBMS_RULE_EXP_RS_INTERNAL. +DBMS_RULE_EXP_RS_INTERNAL.I_CREATE_EXP +DBMS_RULE_EXP_RS_INTERNAL.I_GRANT_EXP +DBMS_RULE_EXP_RS_INTERNAL.I_GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULES. +DBMS_RULE_EXP_RULES.AUDIT_EXP +DBMS_RULE_EXP_RULES.AUDIT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULES.CREATE_EXP +DBMS_RULE_EXP_RULES.DROP_EXP +DBMS_RULE_EXP_RULES.GRANT_EXP +DBMS_RULE_EXP_RULES.GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULES.INSTANCE_CALLOUT +DBMS_RULE_EXP_RULES.INSTANCE_INFO_EXP +DBMS_RULE_EXP_RULES.SCHEMA_CALLOUT +DBMS_RULE_EXP_RULES.SCHEMA_INFO_EXP +DBMS_RULE_EXP_RULES.SYSTEM_CALLOUT +DBMS_RULE_EXP_RULES.SYSTEM_INFO_EXP +DBMS_RULE_EXP_RULE_SETS. +DBMS_RULE_EXP_RULE_SETS.AUDIT_EXP +DBMS_RULE_EXP_RULE_SETS.AUDIT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULE_SETS.CREATE_EXP +DBMS_RULE_EXP_RULE_SETS.DROP_EXP +DBMS_RULE_EXP_RULE_SETS.GRANT_EXP +DBMS_RULE_EXP_RULE_SETS.GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_UTL. +DBMS_RULE_EXP_UTL.EXPORT_ACTION +DBMS_RULE_EXP_UTL.OBJECT_OWNER +DBMS_RULE_EXP_UTL.PARSE_NAME +DBMS_RULE_EXP_UTLI. +DBMS_RULE_EXP_UTLI.CHECK_PRIV +DBMS_RULE_IMP_OBJ. +DBMS_RULE_IMP_OBJ.IMPORT_ADD_RULE +DBMS_RULE_IMP_OBJ.IMPORT_EVALUATION_CONTEXT +DBMS_RULE_IMP_OBJ.IMPORT_RULE +DBMS_RULE_IMP_OBJ.IMPORT_RULE_SET +DBMS_RULE_INTERNAL. +DBMS_RULE_INTERNAL.I_EVALUATE +DBMS_SCHEDULER. +DBMS_SCHEDULER.ADD_EVENT_QUEUE_SUBSCRIBER +DBMS_SCHEDULER.ADD_GROUP_MEMBER +DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION +DBMS_SCHEDULER.ADD_WINDOW_GROUP_MEMBER +DBMS_SCHEDULER.ALTER_CHAIN +DBMS_SCHEDULER.ALTER_RUNNING_CHAIN +DBMS_SCHEDULER.ANALYZE_CHAIN +DBMS_SCHEDULER.AUTO_PURGE +DBMS_SCHEDULER.CHECK_SYS_PRIVS +DBMS_SCHEDULER.CLOSE_WINDOW +DBMS_SCHEDULER.COPY_JOB +DBMS_SCHEDULER.CREATE_CALENDAR_STRING +DBMS_SCHEDULER.CREATE_CHAIN +DBMS_SCHEDULER.CREATE_CREDENTIAL +DBMS_SCHEDULER.CREATE_DATABASE_DESTINATION +DBMS_SCHEDULER.CREATE_EVENT_SCHEDULE +DBMS_SCHEDULER.CREATE_FILE_WATCHER +DBMS_SCHEDULER.CREATE_GROUP +DBMS_SCHEDULER.CREATE_JOB +DBMS_SCHEDULER.CREATE_JOBS +DBMS_SCHEDULER.CREATE_JOB_CLASS +DBMS_SCHEDULER.CREATE_PROGRAM +DBMS_SCHEDULER.CREATE_SCHEDULE +DBMS_SCHEDULER.CREATE_WINDOW +DBMS_SCHEDULER.CREATE_WINDOW_GROUP +DBMS_SCHEDULER.DEFINE_ANYDATA_ARGUMENT +DBMS_SCHEDULER.DEFINE_CHAIN_EVENT_STEP +DBMS_SCHEDULER.DEFINE_CHAIN_RULE +DBMS_SCHEDULER.DEFINE_CHAIN_STEP +DBMS_SCHEDULER.DEFINE_METADATA_ARGUMENT +DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT +DBMS_SCHEDULER.DISABLE +DBMS_SCHEDULER.DISABLE1_CALENDAR_CHECK +DBMS_SCHEDULER.DROP_AGENT_DESTINATION +DBMS_SCHEDULER.DROP_CHAIN +DBMS_SCHEDULER.DROP_CHAIN_RULE +DBMS_SCHEDULER.DROP_CHAIN_STEP +DBMS_SCHEDULER.DROP_CREDENTIAL +DBMS_SCHEDULER.DROP_DATABASE_DESTINATION +DBMS_SCHEDULER.DROP_FILE_WATCHER +DBMS_SCHEDULER.DROP_GROUP +DBMS_SCHEDULER.DROP_JOB +DBMS_SCHEDULER.DROP_JOB_CLASS +DBMS_SCHEDULER.DROP_PROGRAM +DBMS_SCHEDULER.DROP_PROGRAM_ARGUMENT +DBMS_SCHEDULER.DROP_SCHEDULE +DBMS_SCHEDULER.DROP_WINDOW +DBMS_SCHEDULER.DROP_WINDOW_GROUP +DBMS_SCHEDULER.ENABLE +DBMS_SCHEDULER.END_DETACHED_JOB_RUN +DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING +DBMS_SCHEDULER.EVALUATE_RUNNING_CHAIN +DBMS_SCHEDULER.FILE_WATCH_FILTER +DBMS_SCHEDULER.GENERATE_EVENT_LIST +DBMS_SCHEDULER.GENERATE_JOB_NAME +DBMS_SCHEDULER.GET_AGENT_VERSION +DBMS_SCHEDULER.GET_ATTRIBUTE +DBMS_SCHEDULER.GET_CHAIN_RULE_ACTION +DBMS_SCHEDULER.GET_CHAIN_RULE_CONDITION +DBMS_SCHEDULER.GET_DEFAULT_VALUE +DBMS_SCHEDULER.GET_FILE +DBMS_SCHEDULER.GET_JOB_STEP_CF +DBMS_SCHEDULER.GET_SCHEDULER_ATTRIBUTE +DBMS_SCHEDULER.GET_SYS_TIME_ZONE_NAME +DBMS_SCHEDULER.GET_VARCHAR2_VALUE +DBMS_SCHEDULER.OPEN_WINDOW +DBMS_SCHEDULER.PURGE_LOG +DBMS_SCHEDULER.PUT_FILE +DBMS_SCHEDULER.REMOVE_EVENT_QUEUE_SUBSCRIBER +DBMS_SCHEDULER.REMOVE_GROUP_MEMBER +DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION +DBMS_SCHEDULER.REMOVE_WINDOW_GROUP_MEMBER +DBMS_SCHEDULER.RESET_JOB_ARGUMENT_VALUE +DBMS_SCHEDULER.RESOLVE_CALENDAR_STRING +DBMS_SCHEDULER.RESOLVE_NAME +DBMS_SCHEDULER.RUN_CHAIN +DBMS_SCHEDULER.RUN_JOB +DBMS_SCHEDULER.SET_AGENT_REGISTRATION_PASS +DBMS_SCHEDULER.SET_ATTRIBUTE +DBMS_SCHEDULER.SET_ATTRIBUTE_NULL +DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE +DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE +DBMS_SCHEDULER.SET_JOB_ATTRIBUTES +DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE +DBMS_SCHEDULER.SHOW_ERRORS +DBMS_SCHEDULER.STIME +DBMS_SCHEDULER.STOP_JOB +DBMS_SCHEDULER.SUBMIT_REMOTE_EXTERNAL_JOB +DBMS_SCHED_ATTRIBUTE_EXPORT. +DBMS_SCHED_ATTRIBUTE_EXPORT.AUDIT_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.CREATE_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.DROP_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.GRANT_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CHAIN_EXPORT. +DBMS_SCHED_CHAIN_EXPORT.AUDIT_EXP +DBMS_SCHED_CHAIN_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CHAIN_EXPORT.CREATE_EXP +DBMS_SCHED_CHAIN_EXPORT.DROP_EXP +DBMS_SCHED_CHAIN_EXPORT.GRANT_EXP +DBMS_SCHED_CHAIN_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CLASS_EXPORT. +DBMS_SCHED_CLASS_EXPORT.AUDIT_EXP +DBMS_SCHED_CLASS_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CLASS_EXPORT.CREATE_EXP +DBMS_SCHED_CLASS_EXPORT.DROP_EXP +DBMS_SCHED_CLASS_EXPORT.GRANT_EXP +DBMS_SCHED_CLASS_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CREDENTIAL_EXPORT. +DBMS_SCHED_CREDENTIAL_EXPORT.AUDIT_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.CREATE_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.DROP_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.GRANT_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_EXPORT_CALLOUTS. +DBMS_SCHED_EXPORT_CALLOUTS.SCHEMA_CALLOUT +DBMS_SCHED_EXPORT_CALLOUTS.SCHEMA_INFO_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT. +DBMS_SCHED_FILE_WATCHER_EXPORT.AUDIT_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.CREATE_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.DROP_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.GRANT_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_JOB_EXPORT. +DBMS_SCHED_JOB_EXPORT.AUDIT_EXP +DBMS_SCHED_JOB_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_JOB_EXPORT.CHECK_PRIV +DBMS_SCHED_JOB_EXPORT.CREATE_EXP +DBMS_SCHED_JOB_EXPORT.DROP_EXP +DBMS_SCHED_JOB_EXPORT.GRANT_EXP +DBMS_SCHED_JOB_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_MAIN_EXPORT. +DBMS_SCHED_MAIN_EXPORT.EXPORT_CHAIN +DBMS_SCHED_MAIN_EXPORT.EXPORT_CLASS +DBMS_SCHED_MAIN_EXPORT.EXPORT_CREDENTIAL +DBMS_SCHED_MAIN_EXPORT.EXPORT_FILE_WATCHER +DBMS_SCHED_MAIN_EXPORT.EXPORT_GRANTS +DBMS_SCHED_MAIN_EXPORT.EXPORT_JOB +DBMS_SCHED_MAIN_EXPORT.EXPORT_PROGRAM +DBMS_SCHED_MAIN_EXPORT.EXPORT_SCHEDULE +DBMS_SCHED_MAIN_EXPORT.EXPORT_SCHEDULER_ATTRIBUTE +DBMS_SCHED_MAIN_EXPORT.EXPORT_SYSTEM_WINDOW +DBMS_SCHED_MAIN_EXPORT.EXPORT_WINDOW +DBMS_SCHED_MAIN_EXPORT.EXPORT_WINGRP +DBMS_SCHED_MAIN_EXPORT.GET_OBJECT_OWNER +DBMS_SCHED_MAIN_EXPORT.I_SCHEMA_CALLOUT +DBMS_SCHED_MAIN_EXPORT.I_SCHEMA_INFO_EXP +DBMS_SCHED_MAIN_EXPORT.NEXT_PIECE +DBMS_SCHED_MAIN_EXPORT.TS_TO_CHAR +DBMS_SCHED_PROGRAM_EXPORT. +DBMS_SCHED_PROGRAM_EXPORT.AUDIT_EXP +DBMS_SCHED_PROGRAM_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_PROGRAM_EXPORT.CREATE_EXP +DBMS_SCHED_PROGRAM_EXPORT.DROP_EXP +DBMS_SCHED_PROGRAM_EXPORT.GRANT_EXP +DBMS_SCHED_PROGRAM_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_SCHEDULE_EXPORT. +DBMS_SCHED_SCHEDULE_EXPORT.AUDIT_EXP +DBMS_SCHED_SCHEDULE_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_SCHEDULE_EXPORT.CREATE_EXP +DBMS_SCHED_SCHEDULE_EXPORT.DROP_EXP +DBMS_SCHED_SCHEDULE_EXPORT.GRANT_EXP +DBMS_SCHED_SCHEDULE_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_WINDOW_EXPORT. +DBMS_SCHED_WINDOW_EXPORT.AUDIT_EXP +DBMS_SCHED_WINDOW_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_WINDOW_EXPORT.CREATE_EXP +DBMS_SCHED_WINDOW_EXPORT.DROP_EXP +DBMS_SCHED_WINDOW_EXPORT.GRANT_EXP +DBMS_SCHED_WINDOW_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_WINGRP_EXPORT. +DBMS_SCHED_WINGRP_EXPORT.AUDIT_EXP +DBMS_SCHED_WINGRP_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_WINGRP_EXPORT.CREATE_EXP +DBMS_SCHED_WINGRP_EXPORT.DROP_EXP +DBMS_SCHED_WINGRP_EXPORT.GRANT_EXP +DBMS_SCHED_WINGRP_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SERVER_ALERT. +DBMS_SERVER_ALERT.EXPAND_MESSAGE +DBMS_SERVER_ALERT.GET_THRESHOLD +DBMS_SERVER_ALERT.SET_THRESHOLD +DBMS_SERVER_ALERT.VIEW_THRESHOLDS +DBMS_SERVER_ALERT_EXPORT. +DBMS_SERVER_ALERT_EXPORT.SYSTEM_INFO_EXP +DBMS_SERVER_ALERT_PRVT. +DBMS_SERVER_ALERT_PRVT.POST_ALERT +DBMS_SERVER_ALERT_PRVT.UPDATE_ALERT +DBMS_SERVER_TRACE. +DBMS_SERVER_TRACE.CONVERT_BINARY_TRACE_FILE +DBMS_SERVICE. +DBMS_SERVICE.CREATE_SERVICE +DBMS_SERVICE.DELETE_SERVICE +DBMS_SERVICE.DISCONNECT_SESSION +DBMS_SERVICE.MODIFY_SERVICE +DBMS_SERVICE.START_SERVICE +DBMS_SERVICE.STOP_SERVICE +DBMS_SESSION. +DBMS_SESSION.CLEAR_ALL_CONTEXT +DBMS_SESSION.CLEAR_CONTEXT +DBMS_SESSION.CLEAR_IDENTIFIER +DBMS_SESSION.CLOSE_DATABASE_LINK +DBMS_SESSION.FREE_UNUSED_USER_MEMORY +DBMS_SESSION.GET_PACKAGE_MEMORY_UTILIZATION +DBMS_SESSION.IS_ROLE_ENABLED +DBMS_SESSION.IS_SESSION_ALIVE +DBMS_SESSION.LIST_CONTEXT +DBMS_SESSION.MODIFY_PACKAGE_STATE +DBMS_SESSION.RESET_PACKAGE +DBMS_SESSION.SESSION_TRACE_DISABLE +DBMS_SESSION.SESSION_TRACE_ENABLE +DBMS_SESSION.SET_CLOSE_CACHED_OPEN_CURSORS +DBMS_SESSION.SET_CONTEXT +DBMS_SESSION.SET_EDITION_DEFERRED +DBMS_SESSION.SET_IDENTIFIER +DBMS_SESSION.SET_NLS +DBMS_SESSION.SET_ROLE +DBMS_SESSION.SET_SQL_TRACE +DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP +DBMS_SESSION.UNIQUE_SESSION_ID +DBMS_SESSION_STATE. +DBMS_SESSION_STATE.CAPTURE +DBMS_SESSION_STATE.MARK_CAPTURE +DBMS_SESSION_STATE.RESTORE +DBMS_SESSION_STATE.SS_CAPTURE +DBMS_SESSION_STATE.SS_MARK_CAPTURE +DBMS_SESSION_STATE.SS_RESTORE +DBMS_SESSION_STATE.SS_UNMARK_CAPTURE +DBMS_SESSION_STATE.UNMARK_CAPTURE +DBMS_SHARED_POOL. +DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD +DBMS_SHARED_POOL.KEEP +DBMS_SHARED_POOL.MARKHOT +DBMS_SHARED_POOL.PURGE +DBMS_SHARED_POOL.SIZES +DBMS_SHARED_POOL.UNKEEP +DBMS_SHARED_POOL.UNMARKHOT +DBMS_SMB. +DBMS_SMB.CHECK_SMB_PRIV +DBMS_SMB.CREATE_STGTAB +DBMS_SMB.GET_VSN_STGTAB_SMO +DBMS_SMB.PACK_STGTAB +DBMS_SMB.UNPACK_STGTAB +DBMS_SMB_INTERNAL. +DBMS_SMB_INTERNAL.CURSOR_TO_HINTS_XML +DBMS_SMB_INTERNAL.MAP_ORIGIN_BASE_TO_VIEW +DBMS_SMB_INTERNAL.NORMALIZE_NAME +DBMS_SMB_INTERNAL.OPEN_SMB_OBJ_CURSOR +DBMS_SMB_INTERNAL.VARR_TO_HINTS_XML +DBMS_SNAPSHOT. +DBMS_SNAPSHOT.BEGIN_TABLE_REORGANIZATION +DBMS_SNAPSHOT.DROP_SNAPSHOT +DBMS_SNAPSHOT.END_TABLE_REORGANIZATION +DBMS_SNAPSHOT.ESTIMATE_MVIEW_SIZE +DBMS_SNAPSHOT.EXPLAIN_MVIEW +DBMS_SNAPSHOT.EXPLAIN_REWRITE +DBMS_SNAPSHOT.GET_LOG_AGE +DBMS_SNAPSHOT.GET_MV_DEPENDENCIES +DBMS_SNAPSHOT.I_AM_A_REFRESH +DBMS_SNAPSHOT.PMARKER +DBMS_SNAPSHOT.PURGE_DIRECT_LOAD_LOG +DBMS_SNAPSHOT.PURGE_LOG +DBMS_SNAPSHOT.PURGE_MVIEW_FROM_LOG +DBMS_SNAPSHOT.PURGE_SNAPSHOT_FROM_LOG +DBMS_SNAPSHOT.REFRESH +DBMS_SNAPSHOT.REFRESH_ALL +DBMS_SNAPSHOT.REFRESH_ALL_MVIEWS +DBMS_SNAPSHOT.REFRESH_DEPENDENT +DBMS_SNAPSHOT.REFRESH_MV +DBMS_SNAPSHOT.REGISTER_MVIEW +DBMS_SNAPSHOT.REGISTER_SNAPSHOT +DBMS_SNAPSHOT.SET_I_AM_A_REFRESH +DBMS_SNAPSHOT.SET_UP +DBMS_SNAPSHOT.TESTING +DBMS_SNAPSHOT.UNREGISTER_MVIEW +DBMS_SNAPSHOT.UNREGISTER_SNAPSHOT +DBMS_SNAPSHOT.WRAP_UP +DBMS_SNAPSHOT_UTL. +DBMS_SNAPSHOT_UTL.CHECK_REFERENTIAL_CONSTRAINT +DBMS_SNAPSHOT_UTL.CLEANUP_SNAPSHOT_IMPORT +DBMS_SNAPSHOT_UTL.CLEANUP_SUBSCRIPTION +DBMS_SNAPSHOT_UTL.DROP_SNAPSHOT +DBMS_SNAPSHOT_UTL.GET_EMPTY_SCALARS +DBMS_SNAPSHOT_UTL.GET_FULLY_QUALIFIED_NAME +DBMS_SNAPSHOT_UTL.GET_LOB_COLUMNS_INFO +DBMS_SNAPSHOT_UTL.GET_LOG_AGE +DBMS_SNAPSHOT_UTL.GET_LOG_NAME +DBMS_SNAPSHOT_UTL.GET_LOG_TYPE +DBMS_SNAPSHOT_UTL.GET_MASK_VECTOR +DBMS_SNAPSHOT_UTL.GET_MAX_BYTES_PER_CHAR +DBMS_SNAPSHOT_UTL.GET_MLOG_FLAG +DBMS_SNAPSHOT_UTL.GET_OBJECT_NAME +DBMS_SNAPSHOT_UTL.GET_PK_BY_EOID +DBMS_SNAPSHOT_UTL.GET_PK_CONSTRAINT_INFO +DBMS_SNAPSHOT_UTL.GET_RELATIONAL_COLUMNS +DBMS_SNAPSHOT_UTL.GET_TYPEINFO_BY_TOID +DBMS_SNAPSHOT_UTL.IMPORT_LOG_TRIGGER_STRING +DBMS_SNAPSHOT_UTL.IMPORT_UPD_TRIGGER_STRING +DBMS_SNAPSHOT_UTL.MASTER_LOG_TYPE +DBMS_SNAPSHOT_UTL.REGISTER_SNAPSHOT +DBMS_SNAPSHOT_UTL.SETUP +DBMS_SNAPSHOT_UTL.SET_UP +DBMS_SNAPSHOT_UTL.SUBSCRIBE +DBMS_SNAPSHOT_UTL.SYNC_UP_LOG +DBMS_SNAPSHOT_UTL.SYNC_UP_UPD +DBMS_SNAPSHOT_UTL.UNREGISTER_SNAPSHOT +DBMS_SNAPSHOT_UTL.VALIDATE +DBMS_SNAPSHOT_UTL.VALIDATE_REFRESH +DBMS_SNAPSHOT_UTL.VALIDATE_ROLLBACK_SEGMENT +DBMS_SNAPSHOT_UTL.VECTOR_COMPARE +DBMS_SNAPSHOT_UTL.VERIFY_FC_AGE +DBMS_SNAPSHOT_UTL.VERIFY_LOG +DBMS_SNAPSHOT_UTL.WRAPUP +DBMS_SNAPSHOT_UTL.WRAP_UP +DBMS_SNAP_INTERNAL. +DBMS_SNAP_INTERNAL.ALLOW_UPDATEABLE_MVS +DBMS_SNAP_INTERNAL.BEGIN_TABLE_REORGANIZATION +DBMS_SNAP_INTERNAL.BIC +DBMS_SNAP_INTERNAL.BIS +DBMS_SNAP_INTERNAL.BIT +DBMS_SNAP_INTERNAL.CANONICALIZE_IDENTIFIER +DBMS_SNAP_INTERNAL.CANONICALIZE_MASTER +DBMS_SNAP_INTERNAL.CLEAR_REDIRECTION +DBMS_SNAP_INTERNAL.CONVERT_TO_SELECT_LIST +DBMS_SNAP_INTERNAL.DELETE_REFRESH_OPERATIONS +DBMS_SNAP_INTERNAL.END_TABLE_REORGANIZATION +DBMS_SNAP_INTERNAL.ENSURE_NWAY_MASTER_SITE +DBMS_SNAP_INTERNAL.ENSURE_ONE_WAY_MASTER_SITE +DBMS_SNAP_INTERNAL.ENSURE_SNAPSHOT_SITE +DBMS_SNAP_INTERNAL.GENERATE_REFRESH_OPERATIONS +DBMS_SNAP_INTERNAL.GET_BACK_END_DB +DBMS_SNAP_INTERNAL.GET_INDEX_DDL +DBMS_SNAP_INTERNAL.GET_LOGGING_STATUS +DBMS_SNAP_INTERNAL.GET_TABLE_ID +DBMS_SNAP_INTERNAL.GET_TABLE_XLOCK +DBMS_SNAP_INTERNAL.IAS_CREATE_MV_DDL +DBMS_SNAP_INTERNAL.IAS_XLOCK_EVENT +DBMS_SNAP_INTERNAL.ID_TO_TIMESTAMP +DBMS_SNAP_INTERNAL.INSTANTIATE_OFFLINE +DBMS_SNAP_INTERNAL.IS_IAS +DBMS_SNAP_INTERNAL.I_AM_A_REFRESH +DBMS_SNAP_INTERNAL.LOCAL_NAME_RESOLVE +DBMS_SNAP_INTERNAL.MODIFY_RO_ATTRIBUTE +DBMS_SNAP_INTERNAL.PROHIBIT_UPDATEABLE_MVS +DBMS_SNAP_INTERNAL.REMOVE_BACK_END_DB +DBMS_SNAP_INTERNAL.SET_BACK_END_DB +DBMS_SNAP_INTERNAL.SET_I_AM_AN_ORACLE_REFRESH +DBMS_SNAP_INTERNAL.SET_LOGGING +DBMS_SNAP_INTERNAL.SET_REDIRECTION +DBMS_SNAP_INTERNAL.SYNC_BACK_END_DB +DBMS_SNAP_INTERNAL.SYNC_UP_LOG +DBMS_SNAP_INTERNAL.SYNC_UP_UPD +DBMS_SNAP_INTERNAL.TEST_REDIRECTION +DBMS_SNAP_INTERNAL.TIMESTAMP_TO_ID +DBMS_SNAP_INTERNAL.UPDATEABLE_MVS_ALLOWED +DBMS_SNAP_INTERNAL.VALIDATE_SQL +DBMS_SNAP_INTERNAL.VEC_COLS_IN_TABLE +DBMS_SNAP_REPAPI. +DBMS_SNAP_REPAPI.CONTEXT_GET +DBMS_SNAP_REPAPI.CONTEXT_SET +DBMS_SPACE. +DBMS_SPACE.ASA_RECOMMENDATIONS +DBMS_SPACE.AUTO_SPACE_ADVISOR_JOB_PROC +DBMS_SPACE.CREATE_INDEX_COST +DBMS_SPACE.CREATE_TABLE_COST +DBMS_SPACE.DBFS_DF +DBMS_SPACE.FREE_BLOCKS +DBMS_SPACE.ISDATAFILEDROPPABLE_NAME +DBMS_SPACE.OBJECT_DEPENDENT_SEGMENTS +DBMS_SPACE.OBJECT_GROWTH_TREND +DBMS_SPACE.OBJECT_GROWTH_TREND_CUR +DBMS_SPACE.OBJECT_GROWTH_TREND_CURTAB +DBMS_SPACE.OBJECT_GROWTH_TREND_I_TO_S +DBMS_SPACE.OBJECT_GROWTH_TREND_SWRF +DBMS_SPACE.OBJECT_GROWTH_TREND_S_TO_I +DBMS_SPACE.OBJECT_SPACE_USAGE +DBMS_SPACE.OBJECT_SPACE_USAGE_TBF +DBMS_SPACE.PARSE_SPACE_ADV_INFO +DBMS_SPACE.SPACE_USAGE +DBMS_SPACE.UNUSED_SPACE +DBMS_SPACE.VERIFY_SHRINK_CANDIDATE +DBMS_SPACE.VERIFY_SHRINK_CANDIDATE_TBF +DBMS_SPACE_ADMIN. +DBMS_SPACE_ADMIN.ASSM_SEGMENT_SYNCHWM +DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY +DBMS_SPACE_ADMIN.ASSM_TABLESPACE_VERIFY +DBMS_SPACE_ADMIN.DROP_EMPTY_SEGMENTS +DBMS_SPACE_ADMIN.FLUSH_LOBSEGMENT_STATS +DBMS_SPACE_ADMIN.MATERIALIZE_DEFERRED_SEGMENTS +DBMS_SPACE_ADMIN.MATERIALIZE_DEFERRED_WITH_OPT +DBMS_SPACE_ADMIN.NGLOB_SEGMENT_VERIFY +DBMS_SPACE_ADMIN.PURGE_LOBSEGMENT_STATS +DBMS_SPACE_ADMIN.SEGMENT_CORRUPT +DBMS_SPACE_ADMIN.SEGMENT_DROP_CORRUPT +DBMS_SPACE_ADMIN.SEGMENT_DUMP +DBMS_SPACE_ADMIN.SEGMENT_EXTEND +DBMS_SPACE_ADMIN.SEGMENT_MOVEBLOCKS +DBMS_SPACE_ADMIN.SEGMENT_NUMBER_BLOCKS +DBMS_SPACE_ADMIN.SEGMENT_NUMBER_EXTENTS +DBMS_SPACE_ADMIN.SEGMENT_REPAIR +DBMS_SPACE_ADMIN.SEGMENT_VERIFY +DBMS_SPACE_ADMIN.TABLESPACE_DUMP_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_FIX_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_FIX_SEGMENT_EXTBLKS +DBMS_SPACE_ADMIN.TABLESPACE_FIX_SEGMENT_STATES +DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL +DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL +DBMS_SPACE_ADMIN.TABLESPACE_REBUILD_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_REBUILD_QUOTAS +DBMS_SPACE_ADMIN.TABLESPACE_RELOCATE_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_VERIFY +DBMS_SPM. +DBMS_SPM.ALTER_SQL_PLAN_BASELINE +DBMS_SPM.CONFIGURE +DBMS_SPM.CREATE_STGTAB_BASELINE +DBMS_SPM.DROP_MIGRATED_STORED_OUTLINE +DBMS_SPM.DROP_SQL_PLAN_BASELINE +DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE +DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE +DBMS_SPM.LOAD_PLANS_FROM_SQLSET +DBMS_SPM.MIGRATE_STORED_OUTLINE +DBMS_SPM.PACK_STGTAB_BASELINE +DBMS_SPM.UNPACK_STGTAB_BASELINE +DBMS_SPM_INTERNAL. +DBMS_SPM_INTERNAL.AUTO_PURGE_SQL_PLAN_BASELINE +DBMS_SPM_INTERNAL.CREATE_SQL_PLAN_BASELINE +DBMS_SPM_INTERNAL.FETCH_HANDLE_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_PLAN_INFO +DBMS_SPM_INTERNAL.FETCH_SIG_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_SIG_USING_SQL_HANDLE +DBMS_SPM_INTERNAL.FETCH_TEXT_USING_SQL_HANDLE +DBMS_SPM_INTERNAL.GET_NONACCEPTED_PLANS +DBMS_SPM_INTERNAL.GET_OUTLINE +DBMS_SPM_INTERNAL.GET_PARAM_VALUE +DBMS_SPM_INTERNAL.GET_PLANS_FROM_CC +DBMS_SPM_INTERNAL.GET_PLAN_HASH_2 +DBMS_SPM_INTERNAL.GET_SPM_HINTSET +DBMS_SPM_INTERNAL.GET_SPM_TRACING_VALUE +DBMS_SPM_INTERNAL.GET_SQL_IDS_FROM_CC +DBMS_SPM_INTERNAL.LOAD_PLANS_SET +DBMS_SPM_INTERNAL.UNMIGRATE_STORED_OUTLINE +DBMS_SPM_INTERNAL.UPDATE_CONFIG +DBMS_SQL. +DBMS_SQL.BIND_ARRAY +DBMS_SQL.BIND_VARIABLE +DBMS_SQL.BIND_VARIABLE_CHAR +DBMS_SQL.BIND_VARIABLE_RAW +DBMS_SQL.BIND_VARIABLE_ROWID +DBMS_SQL.CLOSE_CURSOR +DBMS_SQL.COLUMN_VALUE +DBMS_SQL.COLUMN_VALUE_CHAR +DBMS_SQL.COLUMN_VALUE_LONG +DBMS_SQL.COLUMN_VALUE_RAW +DBMS_SQL.COLUMN_VALUE_ROWID +DBMS_SQL.DEFINE_ARRAY +DBMS_SQL.DEFINE_COLUMN +DBMS_SQL.DEFINE_COLUMN_CHAR +DBMS_SQL.DEFINE_COLUMN_LONG +DBMS_SQL.DEFINE_COLUMN_RAW +DBMS_SQL.DEFINE_COLUMN_ROWID +DBMS_SQL.DESCRIBE_COLUMNS +DBMS_SQL.DESCRIBE_COLUMNS2 +DBMS_SQL.DESCRIBE_COLUMNS3 +DBMS_SQL.EXECUTE +DBMS_SQL.EXECUTE_AND_FETCH +DBMS_SQL.FETCH_ROWS +DBMS_SQL.IS_OPEN +DBMS_SQL.LAST_ERROR_POSITION +DBMS_SQL.LAST_ROW_COUNT +DBMS_SQL.LAST_ROW_ID +DBMS_SQL.LAST_SQL_FUNCTION_CODE +DBMS_SQL.OPEN_CURSOR +DBMS_SQL.PARSE +DBMS_SQL.TO_CURSOR_NUMBER +DBMS_SQL.TO_REFCURSOR +DBMS_SQL.VARIABLE_VALUE +DBMS_SQL.VARIABLE_VALUE_CHAR +DBMS_SQL.VARIABLE_VALUE_RAW +DBMS_SQL.VARIABLE_VALUE_ROWID +DBMS_SQLDIAG. +DBMS_SQLDIAG.ACCEPT_SQL_PATCH +DBMS_SQLDIAG.ALTER_SQL_PATCH +DBMS_SQLDIAG.CANCEL_DIAGNOSIS_TASK +DBMS_SQLDIAG.CREATE_DIAGNOSIS_TASK +DBMS_SQLDIAG.CREATE_STGTAB_SQLPATCH +DBMS_SQLDIAG.DROP_DIAGNOSIS_TASK +DBMS_SQLDIAG.DROP_SQL_PATCH +DBMS_SQLDIAG.DUMP_TRACE +DBMS_SQLDIAG.EXECUTE_DIAGNOSIS_TASK +DBMS_SQLDIAG.EXPLAIN_SQL_TESTCASE +DBMS_SQLDIAG.EXPORT_SQL_TESTCASE +DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_INC +DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_TXT +DBMS_SQLDIAG.GETSQL +DBMS_SQLDIAG.GET_FIX_CONTROL +DBMS_SQLDIAG.IMPORT_SQL_TESTCASE +DBMS_SQLDIAG.INCIDENTID_2_SQL +DBMS_SQLDIAG.INTERRUPT_DIAGNOSIS_TASK +DBMS_SQLDIAG.LOAD_SQLSET_FROM_TCB +DBMS_SQLDIAG.PACK_STGTAB_SQLPATCH +DBMS_SQLDIAG.REPORT_DIAGNOSIS_TASK +DBMS_SQLDIAG.RESET_DIAGNOSIS_TASK +DBMS_SQLDIAG.RESUME_DIAGNOSIS_TASK +DBMS_SQLDIAG.SET_DIAGNOSIS_TASK_PARAMETER +DBMS_SQLDIAG.SET_TCB_TRACING +DBMS_SQLDIAG.UNPACK_STGTAB_SQLPATCH +DBMS_SQLDIAG_INTERNAL. +DBMS_SQLDIAG_INTERNAL.I_CREATE_HINTSET +DBMS_SQLDIAG_INTERNAL.I_CREATE_PATCH +DBMS_SQLDIAG_INTERNAL.I_GENERATE_SS_IMPORT +DBMS_SQLDIAG_INTERNAL.I_GET_DBVERSION +DBMS_SQLDIAG_INTERNAL.I_GET_INCIDENTID +DBMS_SQLDIAG_INTERNAL.I_INCIDENTID_2_SQL +DBMS_SQLHASH. +DBMS_SQLHASH.GETHASH +DBMS_SQLJTYPE. +DBMS_SQLJTYPE.VALIDATECLASS +DBMS_SQLJTYPE.VALIDATETYPE +DBMS_SQLPA. +DBMS_SQLPA.CANCEL_ANALYSIS_TASK +DBMS_SQLPA.CREATE_ANALYSIS_TASK +DBMS_SQLPA.DROP_ANALYSIS_TASK +DBMS_SQLPA.EXECUTE_ANALYSIS_TASK +DBMS_SQLPA.GET_SESS_OPTIMIZER_ENV +DBMS_SQLPA.INTERRUPT_ANALYSIS_TASK +DBMS_SQLPA.REMOTE_PROCESS_SQL +DBMS_SQLPA.REPORT_ANALYSIS_TASK +DBMS_SQLPA.RESET_ANALYSIS_TASK +DBMS_SQLPA.RESUME_ANALYSIS_TASK +DBMS_SQLPA.SET_ANALYSIS_DEFAULT_PARAMETER +DBMS_SQLPA.SET_ANALYSIS_TASK_PARAMETER +DBMS_SQLPLUS_SCRIPT. +DBMS_SQLPLUS_SCRIPT.PARSE +DBMS_SQLTCB_INTERNAL.I_CLOB_LOAD +DBMS_SQLTCB_INTERNAL.I_CONVERT_FROM_BOOLEAN +DBMS_SQLTCB_INTERNAL.I_CONVERT_TO_BOOLEAN +DBMS_SQLTCB_INTERNAL.I_EXPLAIN_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_GENERATE_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_IMPORT_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_SET_TRACING +DBMS_SQLTCB_INTERNAL.I_VALIDATE_INCIDENTID +DBMS_SQLTCB_INTERNAL.TEST_EXPORT_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.UPCASE +DBMS_SQLTUNE. +DBMS_SQLTUNE.ACCEPT_SQL_PROFILE +DBMS_SQLTUNE.ADD_SQLSET_REFERENCE +DBMS_SQLTUNE.ALTER_SQL_PROFILE +DBMS_SQLTUNE.BUILD_STASH_XML +DBMS_SQLTUNE.CANCEL_TUNING_TASK +DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSET +DBMS_SQLTUNE.CAP_STS_CBK +DBMS_SQLTUNE.CHECK_SQLSET_PRIVS +DBMS_SQLTUNE.CHECK_SQL_PROFILE_PRIV +DBMS_SQLTUNE.CREATE_SQLSET +DBMS_SQLTUNE.CREATE_SQL_PLAN_BASELINE +DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF +DBMS_SQLTUNE.CREATE_STGTAB_SQLSET +DBMS_SQLTUNE.CREATE_TUNING_TASK +DBMS_SQLTUNE.DELETE_SQLSET +DBMS_SQLTUNE.DROP_SQLSET +DBMS_SQLTUNE.DROP_SQL_PROFILE +DBMS_SQLTUNE.DROP_TUNING_TASK +DBMS_SQLTUNE.EXAMINE_STGTAB +DBMS_SQLTUNE.EXECUTE_TUNING_TASK +DBMS_SQLTUNE.EXTRACT_BIND +DBMS_SQLTUNE.EXTRACT_BINDS +DBMS_SQLTUNE.IMPLEMENT_TUNING_TASK +DBMS_SQLTUNE.IMPORT_SQL_PROFILE +DBMS_SQLTUNE.INTERRUPT_TUNING_TASK +DBMS_SQLTUNE.LOAD_SQLSET +DBMS_SQLTUNE.PACK_STGTAB_SQLPROF +DBMS_SQLTUNE.PACK_STGTAB_SQLSET +DBMS_SQLTUNE.PREPARE_AWR_STATEMENT +DBMS_SQLTUNE.PREPARE_SQLSET_STATEMENT +DBMS_SQLTUNE.REMAP_STGTAB_SQLPROF +DBMS_SQLTUNE.REMAP_STGTAB_SQLSET +DBMS_SQLTUNE.REMOVE_SQLSET_REFERENCE +DBMS_SQLTUNE.REPORT_AUTO_TUNING_TASK +DBMS_SQLTUNE.REPORT_SQL_DETAIL +DBMS_SQLTUNE.REPORT_SQL_DETAIL_XML +DBMS_SQLTUNE.REPORT_SQL_MONITOR +DBMS_SQLTUNE.REPORT_SQL_MONITOR_LIST +DBMS_SQLTUNE.REPORT_SQL_MONITOR_LIST_XML +DBMS_SQLTUNE.REPORT_SQL_MONITOR_XML +DBMS_SQLTUNE.REPORT_TUNING_TASK +DBMS_SQLTUNE.RESET_TUNING_TASK +DBMS_SQLTUNE.RESUME_TUNING_TASK +DBMS_SQLTUNE.SCRIPT_TUNING_TASK +DBMS_SQLTUNE.SELECT_CURSOR_CACHE +DBMS_SQLTUNE.SELECT_SQLPA_TASK +DBMS_SQLTUNE.SELECT_SQLSET +DBMS_SQLTUNE.SELECT_SQL_TRACE +DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY +DBMS_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER +DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER +DBMS_SQLTUNE.SQLSET_PROGRESS_STATS +DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE +DBMS_SQLTUNE.TRANSFORM_SQLSET_CURSOR +DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF +DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET +DBMS_SQLTUNE.UPDATE_SQLSET +DBMS_SQLTUNE_INTERNAL. +DBMS_SQLTUNE_INTERNAL.GATHER_SQL_STATS +DBMS_SQLTUNE_INTERNAL.GET_SQLSET_USERBINDS +DBMS_SQLTUNE_INTERNAL.I_ACCEPT_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_ADD_SQLSET_REFERENCE +DBMS_SQLTUNE_INTERNAL.I_ADD_TASK_SQLSET_REFERENCE +DBMS_SQLTUNE_INTERNAL.I_ALLOW_BIND_FLUSH +DBMS_SQLTUNE_INTERNAL.I_ALTER_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_ASSERT_INPUT +DBMS_SQLTUNE_INTERNAL.I_CHECK_ACTIVE +DBMS_SQLTUNE_INTERNAL.I_CLONE_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_COMBINE_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_CREATE_AUTO_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_CREATE_SQLSET +DBMS_SQLTUNE_INTERNAL.I_CREATE_SQL_PLAN_BASELINE +DBMS_SQLTUNE_INTERNAL.I_CREATE_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_CREATE_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_DECR_REFC_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_DELETE_SQLSET +DBMS_SQLTUNE_INTERNAL.I_DROP_SQLSET +DBMS_SQLTUNE_INTERNAL.I_DROP_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_DROP_USER_SQLSETS +DBMS_SQLTUNE_INTERNAL.I_DUMP_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_GET_PLAN_QUERY_TEXT +DBMS_SQLTUNE_INTERNAL.I_GET_REPORT_EXECSUBQ +DBMS_SQLTUNE_INTERNAL.I_INIT_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_INSERT_SQLSET_SQLTEXT +DBMS_SQLTUNE_INTERNAL.I_INSERT_STS_TOPACK +DBMS_SQLTUNE_INTERNAL.I_LOAD_SQLSET_CURSOR +DBMS_SQLTUNE_INTERNAL.I_LOAD_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_LOCK_SQLSET +DBMS_SQLTUNE_INTERNAL.I_MOVE_DELTA_COLUMNS +DBMS_SQLTUNE_INTERNAL.I_OPEN_IMPL_PROFILE_CURSOR +DBMS_SQLTUNE_INTERNAL.I_PARSE_SCRIPT_REC_TYPES +DBMS_SQLTUNE_INTERNAL.I_PROCESS_SQL +DBMS_SQLTUNE_INTERNAL.I_QUALIFIED_NAME +DBMS_SQLTUNE_INTERNAL.I_REMOVE_SQLSET_REFERENCE +DBMS_SQLTUNE_INTERNAL.I_REPORT_AUTO_SUMMARY_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_COMPARE_PLANS_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_SQLT_SINGLE_SQL_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_SQLT_SUMMARY_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_SQL_TABLE_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_SCRIPT_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_SQL_RECURSIVE +DBMS_SQLTUNE_INTERNAL.I_SUB_DELETE_STSREF +DBMS_SQLTUNE_INTERNAL.I_SUB_EXECUTE +DBMS_SQLTUNE_INTERNAL.I_TRACK_SQLMON_REPT_USAGE +DBMS_SQLTUNE_INTERNAL.I_TRIM_NAME +DBMS_SQLTUNE_INTERNAL.I_TRUNC_STS_TOPACK +DBMS_SQLTUNE_INTERNAL.I_UNLOCK_SQLSET +DBMS_SQLTUNE_INTERNAL.I_UNPACK_SQLSETS_BULK +DBMS_SQLTUNE_INTERNAL.I_UPDATE_AWR_SQLTEXT_REFCOUNT +DBMS_SQLTUNE_INTERNAL.I_UPDATE_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_UPDATE_SQLSET +DBMS_SQLTUNE_INTERNAL.I_UPDATE_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_VALIDATE_LEVEL +DBMS_SQLTUNE_INTERNAL.I_VALIDATE_PROCESS_ACTION +DBMS_SQLTUNE_INTERNAL.I_VALIDATE_TUNING_PARAMETER +DBMS_SQLTUNE_INTERNAL.TEST_COMPARE_QUERY_PLANS +DBMS_SQLTUNE_INTERNAL.TEST_DESCRIBE_SQL +DBMS_SQLTUNE_INTERNAL.TEST_DESCRIBE_SQLSET +DBMS_SQLTUNE_INTERNAL.TEST_DROP_SQL_PROFILES +DBMS_SQLTUNE_INTERNAL.TEST_EXPLAIN_PLAN +DBMS_SQLTUNE_INTERNAL.TEST_GATHER_OBJECT_STATS +DBMS_SQLTUNE_INTERNAL.TEST_GATHER_SQL_STATS +DBMS_SQLTUNE_INTERNAL.TEST_GET_TUNING_PARAMETER +DBMS_SQLTUNE_INTERNAL.TEST_KSD_TRACE +DBMS_SQLTUNE_INTERNAL.TEST_LOAD_WORKSPACE_INPUTS +DBMS_SQLTUNE_INTERNAL.TEST_PROCESS_SQLSET +DBMS_SQLTUNE_INTERNAL.TEST_SET_TUNING_PARAMETER +DBMS_SQLTUNE_INTERNAL.TEST_TUNE_SQL +DBMS_SQLTUNE_INTERNAL.TEST_TUNE_SQLSET +DBMS_SQLTUNE_UTIL0. +DBMS_SQLTUNE_UTIL0.EXTRACT_BIND +DBMS_SQLTUNE_UTIL0.EXTRACT_BINDS +DBMS_SQLTUNE_UTIL0.GET_BINDS_COUNT +DBMS_SQLTUNE_UTIL0.SQLTEXT_TO_SIGNATURE +DBMS_SQLTUNE_UTIL0.SQLTEXT_TO_SQLID +DBMS_SQLTUNE_UTIL0.VALIDATE_SQLID +DBMS_SQLTUNE_UTIL1. +DBMS_SQLTUNE_UTIL1.ALTER_SESSION_PARAMETER +DBMS_SQLTUNE_UTIL1.GET_CURRENT_TIME +DBMS_SQLTUNE_UTIL1.GET_EXECUTION_TYPE +DBMS_SQLTUNE_UTIL1.GET_SQLSET_IDENTIFIER +DBMS_SQLTUNE_UTIL1.GET_SQLSET_NB_STMTS +DBMS_SQLTUNE_UTIL1.GET_VIEW_TEXT +DBMS_SQLTUNE_UTIL1.GET_WKLDTYPE_NAME +DBMS_SQLTUNE_UTIL1.INIT_TASK_SPAOBJ +DBMS_SQLTUNE_UTIL1.INIT_TASK_WKLDOBJ +DBMS_SQLTUNE_UTIL1.RESTORE_SESSION_PARAMETER +DBMS_SQLTUNE_UTIL1.VALIDATE_NAME +DBMS_SQLTUNE_UTIL1.VALIDATE_TASK_STATUS +DBMS_SQLTUNE_UTIL2. +DBMS_SQLTUNE_UTIL2.CHECK_PRIV +DBMS_SQLTUNE_UTIL2.RESOLVE_EXEC_NAME +DBMS_SQLTUNE_UTIL2.RESOLVE_USERNAME +DBMS_SQLTUNE_UTIL2.SQL_BINDS_NTAB_TO_VARRAY +DBMS_SQLTUNE_UTIL2.SQL_BINDS_VARRAY_TO_NTAB +DBMS_SQLTUNE_UTIL2.VALIDATE_SNAPSHOT +DBMS_STANDARD. +DBMS_STANDARD.APPLYING_CROSSEDITION_TRIGGER +DBMS_STANDARD.CLIENT_IP_ADDRESS +DBMS_STANDARD.COMMIT +DBMS_STANDARD.COMMIT_CM +DBMS_STANDARD.DATABASE_NAME +DBMS_STANDARD.DELETING +DBMS_STANDARD.DES_ENCRYPTED_PASSWORD +DBMS_STANDARD.DICTIONARY_OBJ_NAME +DBMS_STANDARD.DICTIONARY_OBJ_NAME_LIST +DBMS_STANDARD.DICTIONARY_OBJ_OWNER +DBMS_STANDARD.DICTIONARY_OBJ_OWNER_LIST +DBMS_STANDARD.DICTIONARY_OBJ_TYPE +DBMS_STANDARD.GRANTEE +DBMS_STANDARD.INSERTING +DBMS_STANDARD.INSTANCE_NUM +DBMS_STANDARD.IS_ALTER_COLUMN +DBMS_STANDARD.IS_CREATING_NESTED_TABLE +DBMS_STANDARD.IS_DROP_COLUMN +DBMS_STANDARD.IS_SERVERERROR +DBMS_STANDARD.LOGIN_USER +DBMS_STANDARD.PARTITION_POS +DBMS_STANDARD.PRIVILEGE_LIST +DBMS_STANDARD.RAISE_APPLICATION_ERROR +DBMS_STANDARD.REVOKEE +DBMS_STANDARD.ROLLBACK_NR +DBMS_STANDARD.ROLLBACK_SV +DBMS_STANDARD.SAVEPOINT +DBMS_STANDARD.SERVER_ERROR +DBMS_STANDARD.SERVER_ERROR_DEPTH +DBMS_STANDARD.SERVER_ERROR_MSG +DBMS_STANDARD.SERVER_ERROR_NUM_PARAMS +DBMS_STANDARD.SERVER_ERROR_PARAM +DBMS_STANDARD.SET_TRANSACTION_USE +DBMS_STANDARD.SQL_TXT +DBMS_STANDARD.SYSEVENT +DBMS_STANDARD.SYS_GETTRIGGERSTATE +DBMS_STANDARD.UPDATING +DBMS_STANDARD.WITH_GRANT_OPTION +DBMS_STATS +DBMS_STATS. +DBMS_STATS.ALTER_DATABASE_TAB_MONITORING +DBMS_STATS.ALTER_SCHEMA_TAB_MONITORING +DBMS_STATS.ALTER_STATS_HISTORY_RETENTION +DBMS_STATS.CLEANUP_STATS_JOB_PROC +DBMS_STATS.CONVERT_RAW_VALUE +DBMS_STATS.CONVERT_RAW_VALUE_NVARCHAR +DBMS_STATS.CONVERT_RAW_VALUE_ROWID +DBMS_STATS.COPY_TABLE_STATS +DBMS_STATS.CREATE_EXTENDED_STATS +DBMS_STATS.CREATE_STAT_TABLE +DBMS_STATS.DELETE_COLUMN_STATS +DBMS_STATS.DELETE_DATABASE_PREFS +DBMS_STATS.DELETE_DATABASE_STATS +DBMS_STATS.DELETE_DICTIONARY_STATS +DBMS_STATS.DELETE_FIXED_OBJECTS_STATS +DBMS_STATS.DELETE_INDEX_STATS +DBMS_STATS.DELETE_PENDING_STATS +DBMS_STATS.DELETE_SCHEMA_PREFS +DBMS_STATS.DELETE_SCHEMA_STATS +DBMS_STATS.DELETE_SYSTEM_STATS +DBMS_STATS.DELETE_TABLE_PREFS +DBMS_STATS.DELETE_TABLE_STATS +DBMS_STATS.DIFF_TABLE_STATS_IN_HISTORY +DBMS_STATS.DIFF_TABLE_STATS_IN_PENDING +DBMS_STATS.DIFF_TABLE_STATS_IN_STATTAB +DBMS_STATS.DROP_EXTENDED_STATS +DBMS_STATS.DROP_STAT_TABLE +DBMS_STATS.EXPORT_COLUMN_STATS +DBMS_STATS.EXPORT_DATABASE_PREFS +DBMS_STATS.EXPORT_DATABASE_STATS +DBMS_STATS.EXPORT_DICTIONARY_STATS +DBMS_STATS.EXPORT_FIXED_OBJECTS_STATS +DBMS_STATS.EXPORT_INDEX_STATS +DBMS_STATS.EXPORT_PENDING_STATS +DBMS_STATS.EXPORT_SCHEMA_PREFS +DBMS_STATS.EXPORT_SCHEMA_STATS +DBMS_STATS.EXPORT_SYSTEM_STATS +DBMS_STATS.EXPORT_TABLE_PREFS +DBMS_STATS.EXPORT_TABLE_STATS +DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO +DBMS_STATS.GATHER_DATABASE_STATS +DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC +DBMS_STATS.GATHER_DICTIONARY_STATS +DBMS_STATS.GATHER_FIXED_OBJECTS_STATS +DBMS_STATS.GATHER_INDEX_STATS +DBMS_STATS.GATHER_SCHEMA_STATS +DBMS_STATS.GATHER_SYSTEM_STATS +DBMS_STATS.GATHER_TABLE_STATS +DBMS_STATS.GENERATE_STATS +DBMS_STATS.GET_COLUMN_STATS +DBMS_STATS.GET_INDEX_STATS +DBMS_STATS.GET_PARAM +DBMS_STATS.GET_PREFS +DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY +DBMS_STATS.GET_STATS_HISTORY_RETENTION +DBMS_STATS.GET_SYSTEM_STATS +DBMS_STATS.GET_TABLE_STATS +DBMS_STATS.IMPORT_COLUMN_STATS +DBMS_STATS.IMPORT_DATABASE_PREFS +DBMS_STATS.IMPORT_DATABASE_STATS +DBMS_STATS.IMPORT_DICTIONARY_STATS +DBMS_STATS.IMPORT_FIXED_OBJECTS_STATS +DBMS_STATS.IMPORT_INDEX_STATS +DBMS_STATS.IMPORT_SCHEMA_PREFS +DBMS_STATS.IMPORT_SCHEMA_STATS +DBMS_STATS.IMPORT_SYSTEM_STATS +DBMS_STATS.IMPORT_TABLE_PREFS +DBMS_STATS.IMPORT_TABLE_STATS +DBMS_STATS.INIT_PACKAGE +DBMS_STATS.LOCK_PARTITION_STATS +DBMS_STATS.LOCK_SCHEMA_STATS +DBMS_STATS.LOCK_TABLE_STATS +DBMS_STATS.MERGE_COL_USAGE +DBMS_STATS.PREPARE_COLUMN_VALUES +DBMS_STATS.PREPARE_COLUMN_VALUES_NVARCHAR +DBMS_STATS.PREPARE_COLUMN_VALUES_ROWID +DBMS_STATS.PUBLISH_PENDING_STATS +DBMS_STATS.PURGE_STATS +DBMS_STATS.REPORT_COL_USAGE +DBMS_STATS.RESET_COL_USAGE +DBMS_STATS.RESET_GLOBAL_PREF_DEFAULTS +DBMS_STATS.RESET_PARAM_DEFAULTS +DBMS_STATS.RESTORE_DATABASE_STATS +DBMS_STATS.RESTORE_DICTIONARY_STATS +DBMS_STATS.RESTORE_FIXED_OBJECTS_STATS +DBMS_STATS.RESTORE_SCHEMA_STATS +DBMS_STATS.RESTORE_SYSTEM_STATS +DBMS_STATS.RESTORE_TABLE_STATS +DBMS_STATS.RESUME_GATHER_STATS +DBMS_STATS.SEED_COL_USAGE +DBMS_STATS.SET_COLUMN_STATS +DBMS_STATS.SET_DATABASE_PREFS +DBMS_STATS.SET_GLOBAL_PREFS +DBMS_STATS.SET_INDEX_STATS +DBMS_STATS.SET_PARAM +DBMS_STATS.SET_SCHEMA_PREFS +DBMS_STATS.SET_SYSTEM_STATS +DBMS_STATS.SET_TABLE_PREFS +DBMS_STATS.SET_TABLE_STATS +DBMS_STATS.SHOW_EXTENDED_STATS_NAME +DBMS_STATS.TO_CASCADE_TYPE +DBMS_STATS.TO_DEGREE_TYPE +DBMS_STATS.TO_ESTIMATE_PERCENT_TYPE +DBMS_STATS.TO_NO_INVALIDATE_TYPE +DBMS_STATS.TO_PUBLISH_TYPE +DBMS_STATS.UNLOCK_PARTITION_STATS +DBMS_STATS.UNLOCK_SCHEMA_STATS +DBMS_STATS.UNLOCK_TABLE_STATS +DBMS_STATS.UPGRADE_STAT_TABLE +DBMS_STATS_INTERNAL.ADD_PARAM +DBMS_STATS_INTERNAL.AGGREGATE_INDSTATS +DBMS_STATS_INTERNAL.AGG_PARTITION_ROWCNT +DBMS_STATS_INTERNAL.ALTER_COL_TRACKING_LEVEL +DBMS_STATS_INTERNAL.CAN_DERIVE_COL_HISTOGRAM +DBMS_STATS_INTERNAL.CCT +DBMS_STATS_INTERNAL.CHECK_ANALYZE_DONE +DBMS_STATS_INTERNAL.CHECK_DOMIDX_PARTS +DBMS_STATS_INTERNAL.CHECK_GRANULARITY +DBMS_STATS_INTERNAL.COLHASBASESTATS +DBMS_STATS_INTERNAL.COLHASHISTOGRAM +DBMS_STATS_INTERNAL.COLUMN_EXISTS +DBMS_STATS_INTERNAL.COMPOSE_HASHVAL_CLOB +DBMS_STATS_INTERNAL.CONTROL_PARALLEL +DBMS_STATS_INTERNAL.CREATE_TEMP +DBMS_STATS_INTERNAL.DECODE_GRANULARITY +DBMS_STATS_INTERNAL.DELETE_CACHE_HISTORY +DBMS_STATS_INTERNAL.DELETE_COL_USAGE +DBMS_STATS_INTERNAL.DELETE_FROM_USTATS +DBMS_STATS_INTERNAL.DELETE_PARTITION_SYNOPSIS +DBMS_STATS_INTERNAL.DELETE_SINGLE_COL_GROUP_USAGE +DBMS_STATS_INTERNAL.DELETE_TABLE_SYNOPSIS +DBMS_STATS_INTERNAL.DERIVE_GLOBAL_HISTOGRAM +DBMS_STATS_INTERNAL.DML_STATTAB_PREFS +DBMS_STATS_INTERNAL.DML_TABLE_PREFS +DBMS_STATS_INTERNAL.DQ +DBMS_STATS_INTERNAL.DROP_OLD_TEMP +DBMS_STATS_INTERNAL.DROP_TEMP +DBMS_STATS_INTERNAL.DUMP_ALERT_TSES +DBMS_STATS_INTERNAL.DUMP_PQ_SESSTAT +DBMS_STATS_INTERNAL.DUMP_QUERY +DBMS_STATS_INTERNAL.DUMP_TRACE +DBMS_STATS_INTERNAL.DUMP_TRACE_TS +DBMS_STATS_INTERNAL.EXPORT_COLSTATS_DIRECT +DBMS_STATS_INTERNAL.EXPORT_FXT_COLSTATS_DIRECT +DBMS_STATS_INTERNAL.EXPORT_SYNOPSIS_HEAD +DBMS_STATS_INTERNAL.FILL_SYNOPSIS +DBMS_STATS_INTERNAL.FLUSH_CACHE_STATS +DBMS_STATS_INTERNAL.FORMAT_CACHE_ROWS +DBMS_STATS_INTERNAL.GATHER_FXT_STATS_OK +DBMS_STATS_INTERNAL.GATHER_INDEX +DBMS_STATS_INTERNAL.GATHER_SQL_STATS +DBMS_STATS_INTERNAL.GENERATE_GROUP_LEVEL_SYNOPSIS +DBMS_STATS_INTERNAL.GET_AGG_COLSTATS +DBMS_STATS_INTERNAL.GET_AGG_NDV +DBMS_STATS_INTERNAL.GET_BLKCNT +DBMS_STATS_INTERNAL.GET_CHTAB +DBMS_STATS_INTERNAL.GET_COLNAME +DBMS_STATS_INTERNAL.GET_COLNUM +DBMS_STATS_INTERNAL.GET_COLTYPE +DBMS_STATS_INTERNAL.GET_COUNT_OF_COLS +DBMS_STATS_INTERNAL.GET_CURRENT_SESSION_ID +DBMS_STATS_INTERNAL.GET_DB_BLOCK_SIZE +DBMS_STATS_INTERNAL.GET_DEFAULT_DOP +DBMS_STATS_INTERNAL.GET_FIRST_PART_COL +DBMS_STATS_INTERNAL.GET_FXT_OBJ +DBMS_STATS_INTERNAL.GET_FXT_TYP +DBMS_STATS_INTERNAL.GET_HIST_DENSITY +DBMS_STATS_INTERNAL.GET_INDEX_BLOCK_COUNT +DBMS_STATS_INTERNAL.GET_INDEX_LOCK_FLAG +DBMS_STATS_INTERNAL.GET_INTCOL +DBMS_STATS_INTERNAL.GET_IOT_MAPPING_TABLE +DBMS_STATS_INTERNAL.GET_MBRC +DBMS_STATS_INTERNAL.GET_OBJNUM +DBMS_STATS_INTERNAL.GET_OLDEST_HISTORY_TIME +DBMS_STATS_INTERNAL.GET_PARAM +DBMS_STATS_INTERNAL.GET_PARAMETER_VAL +DBMS_STATS_INTERNAL.GET_PARAM_PROP +DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG +DBMS_STATS_INTERNAL.GET_PREFS +DBMS_STATS_INTERNAL.GET_SYNOPSIS_BLKCNT +DBMS_STATS_INTERNAL.GET_SYNOPSIS_GROUP_NUM +DBMS_STATS_INTERNAL.GET_TABLE_BLOCK_COUNT +DBMS_STATS_INTERNAL.GET_TABLE_DEGREE +DBMS_STATS_INTERNAL.GET_TABLE_PROPERTY +DBMS_STATS_INTERNAL.GET_TABLE_STATS_SIMPLE +DBMS_STATS_INTERNAL.GET_TAB_PROPERTY +DBMS_STATS_INTERNAL.GET_USER_NUM +DBMS_STATS_INTERNAL.IMPORT_SYNOPSES_STATS +DBMS_STATS_INTERNAL.INDEX_MAX_KEYSIZE_OK +DBMS_STATS_INTERNAL.INDHASGLOBALSTATS +DBMS_STATS_INTERNAL.INDPARTSHAVESTATS +DBMS_STATS_INTERNAL.INSERT_INTO_USTATS +DBMS_STATS_INTERNAL.IS_INDEX_UNIQUE +DBMS_STATS_INTERNAL.IS_MV_TABLE_BUSY +DBMS_STATS_INTERNAL.IS_PARTGRP_ONE_TO_ONE +DBMS_STATS_INTERNAL.IS_PARTITIONED_TAB +DBMS_STATS_INTERNAL.IS_PART_TYP_SAME +DBMS_STATS_INTERNAL.IS_STALE +DBMS_STATS_INTERNAL.IS_TEMP_TAB +DBMS_STATS_INTERNAL.IS_URGENT_ERROR +DBMS_STATS_INTERNAL.MANAGE_COL_TRACKING_LEVEL_JOB +DBMS_STATS_INTERNAL.OBJECT_EXISTS +DBMS_STATS_INTERNAL.OPEN_ALL_EMPTY_OBJS_CUR +DBMS_STATS_INTERNAL.OPEN_ALL_OBJECTS_CUR +DBMS_STATS_INTERNAL.OPEN_ALL_STALE_OBJS_CUR +DBMS_STATS_INTERNAL.OPEN_COLSTATS_DICT_CUR +DBMS_STATS_INTERNAL.OPEN_COLSTATS_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_EXTN_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_FXT_COLSTATS_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_FXT_STATS_DICT_CUR +DBMS_STATS_INTERNAL.OPEN_FXT_STATS_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_GET_IND_PARTS_CUR +DBMS_STATS_INTERNAL.OPEN_GET_IND_SUBPARTS_CUR +DBMS_STATS_INTERNAL.OPEN_GET_TARGET_PARTITIONS_CUR +DBMS_STATS_INTERNAL.OPEN_GET_TARGET_SUBPARTS_CUR +DBMS_STATS_INTERNAL.OPEN_TAB_STATS_DICT_CUR +DBMS_STATS_INTERNAL.OPEN_TAB_STATS_HIST_CUR +DBMS_STATS_INTERNAL.PARSE_HASHVAL +DBMS_STATS_INTERNAL.PART_TYPES +DBMS_STATS_INTERNAL.PENDING_STATS_ENABLED +DBMS_STATS_INTERNAL.POPULATE_SYNOPSIS_PARTGRP +DBMS_STATS_INTERNAL.POPULATE_TEMP_INSERT +DBMS_STATS_INTERNAL.PQFLAGS +DBMS_STATS_INTERNAL.PURGE_PENDING_STATS +DBMS_STATS_INTERNAL.PURGE_STATS_AUX +DBMS_STATS_INTERNAL.PURGE_STAT_TABLE +DBMS_STATS_INTERNAL.RESTORE_STATS_OK +DBMS_STATS_INTERNAL.SAME_COL +DBMS_STATS_INTERNAL.SAME_PART +DBMS_STATS_INTERNAL.SAVE_AS_PENDING_COL_STATS +DBMS_STATS_INTERNAL.SAVE_AS_PENDING_INDEX_STATS +DBMS_STATS_INTERNAL.SAVE_AS_PENDING_TABLE_STATS +DBMS_STATS_INTERNAL.SCHEMA_EXISTS +DBMS_STATS_INTERNAL.SEGMENT_NUMBER_BLOCKS +DBMS_STATS_INTERNAL.SET_PARAM +DBMS_STATS_INTERNAL.SET_TEMP_DOP +DBMS_STATS_INTERNAL.STORE_SYSTEM_STATS +DBMS_STATS_INTERNAL.SYSAUX_OFFLINE +DBMS_STATS_INTERNAL.TABHASGLOBALSTATS +DBMS_STATS_INTERNAL.TABPARTSHAVESTATS +DBMS_STATS_INTERNAL.TO_BOOL_TYPE +DBMS_STATS_INTERNAL.TO_CASCADE_TYPE +DBMS_STATS_INTERNAL.TO_STALE_PERCENT_TYPE +DBMS_STATS_INTERNAL.TRACE_ERROR +DBMS_STATS_INTERNAL.TRANSLATE_EV_COLNAME +DBMS_STATS_INTERNAL.TRANSLATE_EV_TO_TBL +DBMS_STATS_INTERNAL.TRUNCATE_TEMP +DBMS_STATS_INTERNAL.UPDATE_SYNOPSIS_HEAD +DBMS_STATS_INTERNAL.UPDATE_TARGET_LIST +DBMS_STATS_INTERNAL.VIEW_COLUMN_EXISTS +DBMS_STAT_FUNCS. +DBMS_STAT_FUNCS.EXPONENTIAL_DIST_FIT +DBMS_STAT_FUNCS.NORMAL_DIST_FIT +DBMS_STAT_FUNCS.POISSON_DIST_FIT +DBMS_STAT_FUNCS.SUMMARY +DBMS_STAT_FUNCS.UNIFORM_DIST_FIT +DBMS_STAT_FUNCS.WEIBULL_DIST_FIT +DBMS_STAT_FUNCS_AUX. +DBMS_STAT_FUNCS_AUX.CALC_SW_A1 +DBMS_STAT_FUNCS_AUX.CALC_SW_A2 +DBMS_STAT_FUNCS_AUX.CALC_SW_COEF +DBMS_STAT_FUNCS_AUX.CALC_SW_FAC +DBMS_STAT_FUNCS_AUX.CALC_SW_SUMM2 +DBMS_STAT_FUNCS_AUX.CDF_BINOMIAL +DBMS_STAT_FUNCS_AUX.CDF_EXPONENTIAL +DBMS_STAT_FUNCS_AUX.CDF_NORMAL +DBMS_STAT_FUNCS_AUX.CDF_POISSON +DBMS_STAT_FUNCS_AUX.CDF_UNIFORM +DBMS_STAT_FUNCS_AUX.CDF_WEIBULL +DBMS_STAT_FUNCS_AUX.MINX +DBMS_STAT_FUNCS_AUX.POLY +DBMS_STAT_FUNCS_AUX.SIGN +DBMS_STORAGE_MAP. +DBMS_STORAGE_MAP.DROP_ALL +DBMS_STORAGE_MAP.DROP_ELEMENT +DBMS_STORAGE_MAP.DROP_FILE +DBMS_STORAGE_MAP.LOCK_MAP +DBMS_STORAGE_MAP.MAP_ALL +DBMS_STORAGE_MAP.MAP_ELEMENT +DBMS_STORAGE_MAP.MAP_FILE +DBMS_STORAGE_MAP.MAP_OBJECT +DBMS_STORAGE_MAP.RESTORE +DBMS_STORAGE_MAP.SAVE +DBMS_STORAGE_MAP.UNLOCK_MAP +DBMS_STREAMS. +DBMS_STREAMS.COMPATIBLE_10_1 +DBMS_STREAMS.COMPATIBLE_10_2 +DBMS_STREAMS.COMPATIBLE_11_1 +DBMS_STREAMS.COMPATIBLE_11_2 +DBMS_STREAMS.COMPATIBLE_9_2 +DBMS_STREAMS.CONVERT_ANYDATA_TO_LCR_DDL +DBMS_STREAMS.CONVERT_ANYDATA_TO_LCR_ROW +DBMS_STREAMS.CONVERT_LCR_TO_XML +DBMS_STREAMS.CONVERT_XML_TO_LCR +DBMS_STREAMS.GET_INFORMATION +DBMS_STREAMS.GET_STREAMS_NAME +DBMS_STREAMS.GET_STREAMS_TYPE +DBMS_STREAMS.GET_TAG +DBMS_STREAMS.MAX_COMPATIBLE +DBMS_STREAMS.SET_TAG +DBMS_STREAMS_ADM. +DBMS_STREAMS_ADM.ADD_COLUMN +DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_GLOBAL_RULES +DBMS_STREAMS_ADM.ADD_MESSAGE_PROPAGATION_RULE +DBMS_STREAMS_ADM.ADD_MESSAGE_RULE +DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_SCHEMA_RULES +DBMS_STREAMS_ADM.ADD_SUBSET_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_SUBSET_RULES +DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_TABLE_RULES +DBMS_STREAMS_ADM.CLEANUP_INSTANTIATION_SETUP +DBMS_STREAMS_ADM.DELETE_COLUMN +DBMS_STREAMS_ADM.GET_MESSAGE_TRACKING +DBMS_STREAMS_ADM.GET_SCN_MAPPING +DBMS_STREAMS_ADM.GET_TAG +DBMS_STREAMS_ADM.KEEP_COLUMNS +DBMS_STREAMS_ADM.MAINTAIN_CHANGE_TABLE +DBMS_STREAMS_ADM.MAINTAIN_GLOBAL +DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS +DBMS_STREAMS_ADM.MAINTAIN_SIMPLE_TABLESPACE +DBMS_STREAMS_ADM.MAINTAIN_SIMPLE_TTS +DBMS_STREAMS_ADM.MAINTAIN_TABLES +DBMS_STREAMS_ADM.MAINTAIN_TABLESPACES +DBMS_STREAMS_ADM.MAINTAIN_TTS +DBMS_STREAMS_ADM.MERGE_STREAMS +DBMS_STREAMS_ADM.MERGE_STREAMS_JOB +DBMS_STREAMS_ADM.POST_INSTANTIATION_SETUP +DBMS_STREAMS_ADM.PRE_INSTANTIATION_SETUP +DBMS_STREAMS_ADM.PURGE_SOURCE_CATALOG +DBMS_STREAMS_ADM.RECOVER_OPERATION +DBMS_STREAMS_ADM.REMOVE_QUEUE +DBMS_STREAMS_ADM.REMOVE_RULE +DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION +DBMS_STREAMS_ADM.RENAME_COLUMN +DBMS_STREAMS_ADM.RENAME_SCHEMA +DBMS_STREAMS_ADM.RENAME_TABLE +DBMS_STREAMS_ADM.SET_MESSAGE_NOTIFICATION +DBMS_STREAMS_ADM.SET_MESSAGE_TRACKING +DBMS_STREAMS_ADM.SET_RULE_TRANSFORM_FUNCTION +DBMS_STREAMS_ADM.SET_TAG +DBMS_STREAMS_ADM.SET_UP_QUEUE +DBMS_STREAMS_ADM.SPLIT_STREAMS +DBMS_STREAMS_ADM_UTL. +DBMS_STREAMS_ADM_UTL.ADD_PROPAGATION_RULE +DBMS_STREAMS_ADM_UTL.ADD_STREAMS_ADMIN_PRIVILEGE +DBMS_STREAMS_ADM_UTL.CHECK_AGENT_DB_ACCESS +DBMS_STREAMS_ADM_UTL.CHECK_APPLY_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_CAPTURE_INPUTS +DBMS_STREAMS_ADM_UTL.CHECK_DDL_RULE +DBMS_STREAMS_ADM_UTL.CHECK_PROCESS_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_PROPAGATION_PARAM +DBMS_STREAMS_ADM_UTL.CHECK_QUEUE_ENABLED +DBMS_STREAMS_ADM_UTL.CHECK_QUEUE_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_QUEUE_TABLE +DBMS_STREAMS_ADM_UTL.CHECK_STREAMS_TYPE +DBMS_STREAMS_ADM_UTL.CHECK_TABLE_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_USER_ACCESS +DBMS_STREAMS_ADM_UTL.CHECK_USER_EXISTS +DBMS_STREAMS_ADM_UTL.CREATE_DEFAULT_RULE +DBMS_STREAMS_ADM_UTL.CREATE_PROPAGATION_PROCESS +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_GLOBAL +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_SCHEMA +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_TABLE +DBMS_STREAMS_ADM_UTL.DROP_APPLY +DBMS_STREAMS_ADM_UTL.DROP_CAPTURE +DBMS_STREAMS_ADM_UTL.DROP_CONSUMER +DBMS_STREAMS_ADM_UTL.DROP_DEQUEUE +DBMS_STREAMS_ADM_UTL.DROP_PROPAGATION +DBMS_STREAMS_ADM_UTL.ENSURE_STREAMS_TYPE_DEQUEUE +DBMS_STREAMS_ADM_UTL.GENERATE_DUMP_FILE_NAME +DBMS_STREAMS_ADM_UTL.GENERATE_NAME +DBMS_STREAMS_ADM_UTL.GET_APPLY_QUEUE +DBMS_STREAMS_ADM_UTL.GET_DBLINK_NAME +DBMS_STREAMS_ADM_UTL.GET_DP_JOB_MODE +DBMS_STREAMS_ADM_UTL.GET_EVALUATION_CONTEXT +DBMS_STREAMS_ADM_UTL.GET_IGNORE_TXNS +DBMS_STREAMS_ADM_UTL.GET_NOTIFICATION_LOC_HEADER +DBMS_STREAMS_ADM_UTL.GET_STREAMS_NAME +DBMS_STREAMS_ADM_UTL.INSTANTIATION_NUM_TO_CHAR +DBMS_STREAMS_ADM_UTL.IS_DATAPUMP_INSTANTIATION +DBMS_STREAMS_ADM_UTL.IS_NETWORK_INSTANTIATION +DBMS_STREAMS_ADM_UTL.POPULATE_DUMP_FILE_SET +DBMS_STREAMS_ADM_UTL.POPULATE_LOG_FILE_SET +DBMS_STREAMS_ADM_UTL.POPULATE_MESG_CONSUMER_TABLE +DBMS_STREAMS_ADM_UTL.POPULATE_MESSAGE_RULE +DBMS_STREAMS_ADM_UTL.POPULATE_STREAMS_RULE +DBMS_STREAMS_ADM_UTL.PROCESS_DROP_USER_CASCADE +DBMS_STREAMS_ADM_UTL.PURGE_INTERNAL +DBMS_STREAMS_ADM_UTL.REMOVE_EMPTY_HANDLERS +DBMS_STREAMS_ADM_UTL.REMOVE_RULE_INTERNAL +DBMS_STREAMS_ADM_UTL.REMOVE_STREAMS_ADMIN_PRIVILEGE +DBMS_STREAMS_ADM_UTL.REMOVE_STREAMS_RULE +DBMS_STREAMS_ADM_UTL.TRANSFORM_RULE_CONDITION +DBMS_STREAMS_ADM_UTL.UPDATE_MESG_CONSUMER_TABLE +DBMS_STREAMS_ADM_UTL.VERIFY_SUBSET_TABLE +DBMS_STREAMS_ADM_UTL_INT. +DBMS_STREAMS_ADM_UTL_INVOK. +DBMS_STREAMS_ADM_UTL_INVOK.ADD_MESSAGE_RULE +DBMS_STREAMS_ADM_UTL_INVOK.ADD_OBJECT_CONSTRAINT +DBMS_STREAMS_ADM_UTL_INVOK.ADD_STREAMS_RULE +DBMS_STREAMS_ADM_UTL_INVOK.CANON_PROC_NAME +DBMS_STREAMS_ADM_UTL_INVOK.CREATE_STREAMS_PROCESS +DBMS_STREAMS_ADM_UTL_INVOK.DROP_OBJECT_CONSTRAINT +DBMS_STREAMS_ADM_UTL_INVOK.GATHER_PERFORMANCE_STATISTICS +DBMS_STREAMS_ADM_UTL_INVOK.GET_PERFORMANCE_REPORT +DBMS_STREAMS_ADM_UTL_INVOK.HAS_PRIVS_FOR_TAG +DBMS_STREAMS_ADM_UTL_INVOK.SET_CONSTRAINT_COLUMNS +DBMS_STREAMS_ADVISOR_ADM. +DBMS_STREAMS_ADVISOR_ADM.ANALYZE_CURRENT_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL. +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_EVENT +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_LINK +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_PROP +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_STAT +DBMS_STREAMS_ADV_ADM_UTL.ANALYZE_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL.ASSIGN_COMPONENT_IDS +DBMS_STREAMS_ADV_ADM_UTL.CLEAN_IN_TABLES +DBMS_STREAMS_ADV_ADM_UTL.CLEAN_OUT_TABLES +DBMS_STREAMS_ADV_ADM_UTL.CLEAN_TABLES +DBMS_STREAMS_ADV_ADM_UTL.COLLECT_COMPONENT_EVENT_LOCAL +DBMS_STREAMS_ADV_ADM_UTL.COLLECT_DBLINKS +DBMS_STREAMS_ADV_ADM_UTL.DELETE_COMPONENT_PROP +DBMS_STREAMS_ADV_ADM_UTL.DELETE_DATABASE_INFO +DBMS_STREAMS_ADV_ADM_UTL.DISCOVER_STREAM_PATHS +DBMS_STREAMS_ADV_ADM_UTL.GET_ADVISOR_RUN_ID +DBMS_STREAMS_ADV_ADM_UTL.GET_ADVISOR_RUN_TIME +DBMS_STREAMS_ADV_ADM_UTL.GET_DBLINKS +DBMS_STREAMS_ADV_ADM_UTL.GET_DBLINK_INFO_CONVERT +DBMS_STREAMS_ADV_ADM_UTL.GET_DBLINK_INFO_UNIQUE +DBMS_STREAMS_ADV_ADM_UTL.GET_LAST_ADVISOR_RUN_TIME +DBMS_STREAMS_ADV_ADM_UTL.GET_RELEASE_NUMBER +DBMS_STREAMS_ADV_ADM_UTL.GET_VERSION_NUMBER +DBMS_STREAMS_ADV_ADM_UTL.IS_GLOBAL_NAMES +DBMS_STREAMS_ADV_ADM_UTL.IS_STAT_EMPTY +DBMS_STREAMS_ADV_ADM_UTL.IS_TOPOLOGY_CHANGED +DBMS_STREAMS_ADV_ADM_UTL.PREPARE_INPUT +DBMS_STREAMS_ADV_ADM_UTL.SET_STREAM_FLAGS +DBMS_STREAMS_ADV_ADM_UTL.SHIFT_COMPONENT_STATS +DBMS_STREAMS_ADV_ADM_UTL.STORE_COMPONENT_PROPS +DBMS_STREAMS_ADV_ADM_UTL.STORE_DATABASE_INFO +DBMS_STREAMS_ADV_ADM_UTL.STORE_STREAM_PATHS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENTS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENT_EVENTS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENT_LINKS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENT_PROPS +DBMS_STREAMS_ADV_ADM_UTL.UPDATE_DATABASE_INFO +DBMS_STREAMS_ADV_ADM_UTL.UPDATE_DBLINKS +DBMS_STREAMS_ADV_ADM_UTL_INVOK. +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_LOCAL_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_PERFORMANCE_INTERNAL +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_TOPOLOGY +DBMS_STREAMS_ADV_ADM_UTL_INVOK.COLLECT_DATA +DBMS_STREAMS_AUTH. +DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE +DBMS_STREAMS_AUTH.GRANT_REMOTE_ADMIN_ACCESS +DBMS_STREAMS_AUTH.REVOKE_ADMIN_PRIVILEGE +DBMS_STREAMS_AUTH.REVOKE_REMOTE_ADMIN_ACCESS +DBMS_STREAMS_AUTO_INT. +DBMS_STREAMS_AUTO_INT.APPLY_SPLITTABLE_VARCHAR2 +DBMS_STREAMS_AUTO_INT.CLEAN_AUTO_SPLIT_MERGE +DBMS_STREAMS_AUTO_INT.CLEAN_MISSING_ORIGINAL_CAPTURE +DBMS_STREAMS_AUTO_INT.CLEAN_RECOVERABLE_SCRIPT +DBMS_STREAMS_AUTO_INT.ENABLE_AUTO_SPLIT_JOB +DBMS_STREAMS_AUTO_INT.GET_CAPTURE_ID +DBMS_STREAMS_AUTO_INT.GET_NEXT_SMID +DBMS_STREAMS_AUTO_INT.READY_TO_SPLIT_NON_CCAC +DBMS_STREAMS_AUTO_INT.SPLIT_STREAMS +DBMS_STREAMS_AUTO_INT.SPLIT_STREAMS_JOB +DBMS_STREAMS_AUTO_INT.SUBMIT_SPLIT_MERGE_STREAMS_JOB +DBMS_STREAMS_CDC_ADM. +DBMS_STREAMS_CDC_ADM.SET_END_HANDLER +DBMS_STREAMS_CONTROL_ADM. +DBMS_STREAMS_CONTROL_ADM.IS_SKIP_CAPTURE +DBMS_STREAMS_CONTROL_ADM.RESUME_CAPTURE +DBMS_STREAMS_CONTROL_ADM.SKIP_CAPTURE +DBMS_STREAMS_DATAPUMP. +DBMS_STREAMS_DATAPUMP.GET_EXPORT_DML_SCN +DBMS_STREAMS_DATAPUMP.GET_EXPORT_DML_SCN_VALUE +DBMS_STREAMS_DATAPUMP.NEED_SCN +DBMS_STREAMS_DATAPUMP.NEED_SCN_COMMON +DBMS_STREAMS_DATAPUMP.SET_EXPORT_SCN +DBMS_STREAMS_DATAPUMP.SET_SESSION_STATE +DBMS_STREAMS_DATAPUMP_UTIL. +DBMS_STREAMS_DATAPUMP_UTIL.GET_RMAN_INST_SCN +DBMS_STREAMS_DATAPUMP_UTIL.GET_TYPE_NUM +DBMS_STREAMS_DATAPUMP_UTIL.IN_DATAPUMP_JOB +DBMS_STREAMS_DATAPUMP_UTIL.IS_FULL_DB_EXPORT +DBMS_STREAMS_DATAPUMP_UTIL.IS_STREAMS_CONFIGURATION +DBMS_STREAMS_DATAPUMP_UTIL.JOB_MODE +DBMS_STREAMS_DATAPUMP_UTIL.JOB_TYPE +DBMS_STREAMS_DATAPUMP_UTIL.MIN_SUPP_LOGGING_ENABLED +DBMS_STREAMS_DATAPUMP_UTIL.REMOTE_LINK +DBMS_STREAMS_DECL. +DBMS_STREAMS_HANDLER_ADM. +DBMS_STREAMS_HANDLER_ADM.ADD_STMT_TO_HANDLER +DBMS_STREAMS_HANDLER_ADM.CREATE_STMT_HANDLER +DBMS_STREAMS_HANDLER_ADM.DROP_STMT_HANDLER +DBMS_STREAMS_HANDLER_ADM.REMOVE_STMT_FROM_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL. +DBMS_STREAMS_HANDLER_INTERNAL.CHANGE_HANDLER_EXISTS +DBMS_STREAMS_HANDLER_INTERNAL.CREATE_STMT_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.DROP_STMT_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.EXISTS_STMT_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.INVALIDATE_DEST_OBJ +DBMS_STREAMS_HANDLER_INTERNAL.SET_STMT_IN_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.STMT_HANDLER_IN_USE +DBMS_STREAMS_LCR_INT. +DBMS_STREAMS_LCR_INT.CONVERT_LCR_TO_XML +DBMS_STREAMS_LCR_INT.CONVERT_XML_TO_LCR +DBMS_STREAMS_MC. +DBMS_STREAMS_MC.MAINTAIN_CHANGE_TABLE +DBMS_STREAMS_MC_INV. +DBMS_STREAMS_MC_INV.GET_NEXT_SEQNO +DBMS_STREAMS_MESSAGING. +DBMS_STREAMS_MESSAGING.DEQUEUE +DBMS_STREAMS_MESSAGING.ENQUEUE +DBMS_STREAMS_MT. +DBMS_STREAMS_MT.ALTER_APPLY_SETUP +DBMS_STREAMS_MT.ALTER_CAPTURE_SETUP +DBMS_STREAMS_MT.ALTER_PROPAGATION_SETUP +DBMS_STREAMS_MT.APPLY_SETUP +DBMS_STREAMS_MT.BUILD_AND_PREPARE +DBMS_STREAMS_MT.CANONICALIZE_TABLEPACES +DBMS_STREAMS_MT.CAPTURE_SETUP +DBMS_STREAMS_MT.CLEANUP_INSTANTIATION_SETUP +DBMS_STREAMS_MT.CLOSE_SQL_SCRIPT +DBMS_STREAMS_MT.CONSTRUCT_SQL_REC +DBMS_STREAMS_MT.CONVERT_TAB_OBJS_TO_ARRAYS +DBMS_STREAMS_MT.CRASH_TEST +DBMS_STREAMS_MT.CREATE_CAPTURE_SETUP +DBMS_STREAMS_MT.DROP_QUEUE_SETUP +DBMS_STREAMS_MT.DROP_QUEUE_TABLE_SETUP +DBMS_STREAMS_MT.DROP_RULESET_SETUP +DBMS_STREAMS_MT.DROP_RULE_SETUP +DBMS_STREAMS_MT.DROP_TABLESPACE_SETUP +DBMS_STREAMS_MT.ENABLE_PROPAGATION +DBMS_STREAMS_MT.EXECUTING_MAINTAIN_API +DBMS_STREAMS_MT.GENERATE_HEADER_STMT +DBMS_STREAMS_MT.GET_SRC_DB +DBMS_STREAMS_MT.GET_TABLES_IN_TABLESPACES +DBMS_STREAMS_MT.GET_TARGET_DB +DBMS_STREAMS_MT.INSERT_PARAM +DBMS_STREAMS_MT.IS_IN +DBMS_STREAMS_MT.MAINTAIN_STREAMS +DBMS_STREAMS_MT.OPEN_SQL_SCRIPT +DBMS_STREAMS_MT.POST_INSTANTIATION_SETUP +DBMS_STREAMS_MT.PRE_INSTANTIATION_SETUP +DBMS_STREAMS_MT.PROCESS_SQL_REC +DBMS_STREAMS_MT.PROCESS_SQL_SCRIPT +DBMS_STREAMS_MT.PROPAGATION_SETUP +DBMS_STREAMS_MT.QUEUE_SETUP +DBMS_STREAMS_MT.RECOVER_OPERATION +DBMS_STREAMS_MT.REMOTE_STATE_BLOCK +DBMS_STREAMS_MT.REMOVE_RULE_RULESET_SETUP +DBMS_STREAMS_MT.SETUP_REMOTE_SESSION_STATE +DBMS_STREAMS_MT.SET_INSTANTIATION_SCN +DBMS_STREAMS_MT.SET_SRC_DB +DBMS_STREAMS_MT.SET_TARGET_DB +DBMS_STREAMS_MT.START_APPLY +DBMS_STREAMS_MT.START_CAPTURE +DBMS_STREAMS_MT.STOP_QUEUE_SETUP +DBMS_STREAMS_MT.STOP_STREAMS_PROCESS_SETUP +DBMS_STREAMS_PUB_RPC. +DBMS_STREAMS_PUB_RPC.GET_EXPORT_DML_SCN +DBMS_STREAMS_PUB_RPC.MIN_SUPP_LOGGING_ENABLED +DBMS_STREAMS_PUB_RPC.NEED_SCN +DBMS_STREAMS_RPC. +DBMS_STREAMS_RPC.BUILD +DBMS_STREAMS_RPC.BUILD_RC +DBMS_STREAMS_RPC.CONVERT_FILE_AT_SOURCE +DBMS_STREAMS_RPC.CONVERT_FILE_AT_SOURCE_RC +DBMS_STREAMS_RPC.CREATE_VERSION +DBMS_STREAMS_RPC.DROP_SCRIPT +DBMS_STREAMS_RPC.GET_DATABASE_SCNS +DBMS_STREAMS_RPC.GET_DATABASE_SCNS_RC +DBMS_STREAMS_RPC.GET_EXPORT_DML_SCN +DBMS_STREAMS_RPC.GET_FILE_GROUP_FILE_INFO +DBMS_STREAMS_RPC.GET_FILE_GROUP_INFO +DBMS_STREAMS_RPC.GET_FILE_GROUP_VERSION_INFO +DBMS_STREAMS_RPC.GET_OLDEST_SCN +DBMS_STREAMS_RPC.GET_OLDEST_SCN_RC +DBMS_STREAMS_RPC.GET_SYSTEM_CHANGE_NUMBER +DBMS_STREAMS_RPC.GET_SYSTEM_CHANGE_NUMBER_RC +DBMS_STREAMS_RPC.GET_UNDO_BLOCK +DBMS_STREAMS_RPC.LOCAL_EXECUTE_BLOCK +DBMS_STREAMS_RPC.MIN_SUPP_LOGGING_ENABLED +DBMS_STREAMS_RPC.NEED_SCN +DBMS_STREAMS_RPC.PREPARE_GLOBAL_INSTANTIATION +DBMS_STREAMS_RPC.PREPARE_GLOBAL_INSTANTIATION_R +DBMS_STREAMS_RPC.PREPARE_SCHEMA_INSTANTIATION +DBMS_STREAMS_RPC.PREPARE_SCHEMA_INSTANTIATION_R +DBMS_STREAMS_RPC.PREPARE_TABLE_INSTANTIATION +DBMS_STREAMS_RPC.PREPARE_TABLE_INSTANTIATION_RC +DBMS_STREAMS_RPC.PULL_ALTER_TABLESPACE +DBMS_STREAMS_RPC.PULL_PLATFORM +DBMS_STREAMS_RPC.PULL_TABLESPACE_FILE_INFO +DBMS_STREAMS_RPC.PULL_TABLESPACE_INFO +DBMS_STREAMS_RPC.PULL_TBS_FILE_NAME_ID +DBMS_STREAMS_RPC.REMOVE_FILE +DBMS_STREAMS_RPC.REMOVE_FILE_RC +DBMS_STREAMS_RPC.SET_OLDEST_SCN +DBMS_STREAMS_RPC.SET_OLDEST_SCN_RC +DBMS_STREAMS_RPC.TABLESPACES_EXIST_NUM +DBMS_STREAMS_RPC.TABLESPACES_EXIST_NUM_RC +DBMS_STREAMS_RPC.WAIT_FOR_INFLIGHT_TXN +DBMS_STREAMS_RPC.WAIT_FOR_INFLIGHT_TXN_RC +DBMS_STREAMS_RPC_INTERNAL. +DBMS_STREAMS_RPC_INTERNAL.BUILD +DBMS_STREAMS_RPC_INTERNAL.GET_SYSTEM_CHANGE_NUMBER +DBMS_STREAMS_RPC_INTERNAL.WAIT_FOR_INFLIGHT_TXN +DBMS_STREAMS_SM. +DBMS_STREAMS_SM.APPLY_EXISTS +DBMS_STREAMS_SM.CAPTURE_SPLITTABLE +DBMS_STREAMS_SM.MERGE_STREAMS +DBMS_STREAMS_SM.MERGE_STREAMS_JOB +DBMS_STREAMS_SM.OUTPUT_BOOLEAN +DBMS_STREAMS_SM.SET_JOB_NEXT_RUN +DBMS_STREAMS_SM.SPLIT_JOB_INFO +DBMS_STREAMS_SM.SPLIT_STREAMS +DBMS_STREAMS_SM.SPLIT_STREAMS_INTERNAL +DBMS_STREAMS_SM.TRY_DROP_JOB +DBMS_STREAMS_SM.WRITE_ALERT +DBMS_STREAMS_TABLESPACE_ADM. +DBMS_STREAMS_TABLESPACE_ADM.ATTACH_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.ATTACH_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.CLONE_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.CLONE_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.DETACH_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.DETACH_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.PULL_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.PULL_TABLESPACES +DBMS_STREAMS_TBS_INT. +DBMS_STREAMS_TBS_INT.CANON +DBMS_STREAMS_TBS_INT.CHECK_ASM +DBMS_STREAMS_TBS_INT.CHECK_FILE_EXISTS +DBMS_STREAMS_TBS_INT.COMBINE_DIR_AND_FILE +DBMS_STREAMS_TBS_INT.COMPARE_PATH_NAMES +DBMS_STREAMS_TBS_INT.CONVERT_FILE +DBMS_STREAMS_TBS_INT.CONVERT_FILE_AT_SOURCE +DBMS_STREAMS_TBS_INT.CONVERT_PLATFORM_TO_ID +DBMS_STREAMS_TBS_INT.DEFAULT_FILE_NAME +DBMS_STREAMS_TBS_INT.DETERMINE_CALL_TRACING +DBMS_STREAMS_TBS_INT.DUMP_ERROR +DBMS_STREAMS_TBS_INT.ENSURE_NONNULL +DBMS_STREAMS_TBS_INT.GENERATE_FILE_NAME +DBMS_STREAMS_TBS_INT.GET_FILE_COUNT +DBMS_STREAMS_TBS_INT.GET_FILE_GROUP_FILE_INFO +DBMS_STREAMS_TBS_INT.GET_FILE_GROUP_INFO +DBMS_STREAMS_TBS_INT.GET_FILE_GROUP_VERSION_INFO +DBMS_STREAMS_TBS_INT.GET_LOCAL_PLATFORM +DBMS_STREAMS_TBS_INT.GET_LOCAL_PLATFORM_ID +DBMS_STREAMS_TBS_INT.GET_TABLESPACE_INFORMATION +DBMS_STREAMS_TBS_INT.PARSE_FILE_NAME +DBMS_STREAMS_TBS_INT.RAISE_INVALID +DBMS_STREAMS_TBS_INT.REMOVE_FILE +DBMS_STREAMS_TBS_INT.TRACE_COMMON +DBMS_STREAMS_TBS_INT.TRACE_CONVERT_FILE +DBMS_STREAMS_TBS_INT.TRACE_ENTRY +DBMS_STREAMS_TBS_INT.TRACE_EXPRESSION +DBMS_STREAMS_TBS_INT.TRACE_INVOCATION +DBMS_STREAMS_TBS_INT_INVOK. +DBMS_STREAMS_TBS_INT_INVOK.CHECK_PRIVILEGE +DBMS_STREAMS_TBS_INT_INVOK.DQ +DBMS_STREAMS_TBS_INT_INVOK.GET_DATA_FILE +DBMS_STREAMS_TBS_INT_INVOK.GET_FILE_GROUP_VERSION_INFO +DBMS_STREAMS_TBS_INT_INVOK.GET_SINGLE_DATA_FILE +DBMS_STREAMS_TBS_INT_INVOK.GET_SINGLE_FILE +DBMS_STREAMS_TBS_INT_INVOK.GET_TABLESPACE_FILES +DBMS_STREAMS_TBS_INT_INVOK.GET_TABLESPACE_STATUS +DBMS_STREAMS_TBS_INT_INVOK.IS_TABLESPACE_READONLY +DBMS_STREAMS_TBS_INT_INVOK.IS_TABLESPACE_READWRITE +DBMS_STREAMS_TBS_INT_INVOK.MAKE_TABLESPACE_READONLY +DBMS_STREAMS_TBS_INT_INVOK.MAKE_TABLESPACE_READWRITE +DBMS_STREAMS_TBS_INT_INVOK.PARSE +DBMS_STREAMS_TBS_INT_INVOK.PRINT_ANY_ERROR +DBMS_STREAMS_TBS_INT_INVOK.PULL_ALTER_TABLESPACE +DBMS_STREAMS_TBS_INT_INVOK.PULL_PLATFORM +DBMS_STREAMS_TBS_INT_INVOK.PULL_TABLESPACE_FILE_INFO +DBMS_STREAMS_TBS_INT_INVOK.PULL_TABLESPACE_INFO +DBMS_STREAMS_TBS_INT_INVOK.PULL_TBS_FILE_NAME_ID +DBMS_STREAMS_TBS_INT_INVOK.RPC_PULL_TABLESPACE_FILE_INFO +DBMS_STREAMS_TBS_INT_INVOK.RPC_PULL_TABLESPACE_INFO +DBMS_STREAMS_TBS_INT_INVOK.RPC_PULL_TBS_FILE_NAME_ID +DBMS_STREAMS_TBS_INT_INVOK.TABLESPACES_EXIST_NUM +DBMS_STREAMS_TBS_INT_INVOK.WAIT_FOR_TERMINATION +DBMS_SUMMARY. +DBMS_SUMMARY.DISABLE_DEPENDENT +DBMS_SUMMARY.ENABLE_DEPENDENT +DBMS_SUMMARY.ESTIMATE_MVIEW_SIZE +DBMS_SUMMARY.SET_LOGFILE_NAME +DBMS_SUMMARY.VALIDATE_DIMENSION +DBMS_SUMREF_UTIL. +DBMS_SUMREF_UTIL.SET_LOGFILE_NAME +DBMS_SUMREF_UTIL.TRACE +DBMS_SUMREF_UTIL.TRACE_FINISH +DBMS_SUMREF_UTIL.TRACE_INIT +DBMS_SUMREF_UTIL.TRACE_OFF +DBMS_SUMREF_UTIL.TRACE_ON +DBMS_SUMVDM. +DBMS_SUMVDM.VERIFY_DIMENSION +DBMS_SUM_RWEQ_EXPORT. +DBMS_SUM_RWEQ_EXPORT.AUDIT_EXP +DBMS_SUM_RWEQ_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SUM_RWEQ_EXPORT.CREATE_EXP +DBMS_SUM_RWEQ_EXPORT.DROP_EXP +DBMS_SUM_RWEQ_EXPORT.GRANT_EXP +DBMS_SUM_RWEQ_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SUM_RWEQ_EXPORT_INTERNAL. +DBMS_SUM_RWEQ_EXPORT_INTERNAL.I_CREATE_EXP +DBMS_SWRF_INTERNAL. +DBMS_SWRF_INTERNAL.AWR_CLEAN +DBMS_SWRF_INTERNAL.AWR_DECODE_OBJECT_TYPE +DBMS_SWRF_INTERNAL.AWR_EXTRACT +DBMS_SWRF_INTERNAL.AWR_GET_MASTER +DBMS_SWRF_INTERNAL.AWR_GET_OBJECT_INFO +DBMS_SWRF_INTERNAL.AWR_LOAD +DBMS_SWRF_INTERNAL.BASELINE_MIGRATE +DBMS_SWRF_INTERNAL.BLUPDATE_LAST_TIME_COMPUTED +DBMS_SWRF_INTERNAL.CLEANUP_DATABASE +DBMS_SWRF_INTERNAL.CLEAR_AWR_DBID +DBMS_SWRF_INTERNAL.DUMP_COLUMN_STATS +DBMS_SWRF_INTERNAL.GET_AWR_DBID +DBMS_SWRF_INTERNAL.INSERT_BASELINE_DETAILS +DBMS_SWRF_INTERNAL.MASSAGE_COLUMN_STATS +DBMS_SWRF_INTERNAL.MOVE_TO_AWR +DBMS_SWRF_INTERNAL.REGISTER_DATABASE +DBMS_SWRF_INTERNAL.REGISTER_LOCAL_DBID +DBMS_SWRF_INTERNAL.REMOVE_WR_CONTROL +DBMS_SWRF_INTERNAL.RESET_DEFAULT_TZ +DBMS_SWRF_INTERNAL.SET_AWR_DBID +DBMS_SWRF_INTERNAL.UNREGISTER_DATABASE +DBMS_SWRF_INTERNAL.UPDATE_OBJECT_INFO +DBMS_SWRF_REPORT_INTERNAL. +DBMS_SWRF_REPORT_INTERNAL.ASH_GLOBAL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.ASH_INPUT_FILTER +DBMS_SWRF_REPORT_INTERNAL.ASH_REPORT_INIT +DBMS_SWRF_REPORT_INTERNAL.ASH_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.ASH_REPORT_SUMMARY +DBMS_SWRF_REPORT_INTERNAL.AWR_GLOBAL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.AWR_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.BUILD_HEADING_INFO +DBMS_SWRF_REPORT_INTERNAL.DBFUS_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.DIFF_GLOBAL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.DIFF_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.DISPLAY_SQLRPT_SECTIONS +DBMS_SWRF_REPORT_INTERNAL.GET_PCTDIFF +DBMS_SWRF_REPORT_INTERNAL.PRINT_EXECUTION_PLAN +DBMS_SWRF_REPORT_INTERNAL.REPORT_CLEANUP +DBMS_SWRF_REPORT_INTERNAL.SET_REPORT_THRESHOLDS +DBMS_SWRF_REPORT_INTERNAL.SQL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.SQL_REPORT_SUMMARY +DBMS_SWRF_REPORT_INTERNAL.TO_1000S +DBMS_SWRF_REPORT_INTERNAL.TO_1024S +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_CLEANUP +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_GC_XML_SQL +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_INIT +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_SUMMARY +DBMS_SYSTEM. +DBMS_SYSTEM.ADD_PARAMETER_VALUE +DBMS_SYSTEM.DIST_TXN_SYNC +DBMS_SYSTEM.GET_ENV +DBMS_SYSTEM.KCFRMS +DBMS_SYSTEM.KSDDDT +DBMS_SYSTEM.KSDFLS +DBMS_SYSTEM.KSDIND +DBMS_SYSTEM.KSDWRT +DBMS_SYSTEM.READ_EV +DBMS_SYSTEM.REMOVE_PARAMETER_VALUE +DBMS_SYSTEM.SET_BOOL_PARAM_IN_SESSION +DBMS_SYSTEM.SET_EV +DBMS_SYSTEM.SET_INT_PARAM_IN_SESSION +DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION +DBMS_SYSTEM.WAIT_FOR_EVENT +DBMS_SYS_ERROR. +DBMS_SYS_ERROR.RAISE_SYSTEM_ERROR +DBMS_SYS_SQL. +DBMS_SYS_SQL.BIND_ARRAY +DBMS_SYS_SQL.BIND_VARIABLE +DBMS_SYS_SQL.BIND_VARIABLE_CHAR +DBMS_SYS_SQL.BIND_VARIABLE_RAW +DBMS_SYS_SQL.BIND_VARIABLE_ROWID +DBMS_SYS_SQL.CLOSE_CURSOR +DBMS_SYS_SQL.COLUMN_VALUE +DBMS_SYS_SQL.COLUMN_VALUE_CHAR +DBMS_SYS_SQL.COLUMN_VALUE_LONG +DBMS_SYS_SQL.COLUMN_VALUE_RAW +DBMS_SYS_SQL.COLUMN_VALUE_ROWID +DBMS_SYS_SQL.DEFINE_ARRAY +DBMS_SYS_SQL.DEFINE_COLUMN +DBMS_SYS_SQL.DEFINE_COLUMN_CHAR +DBMS_SYS_SQL.DEFINE_COLUMN_LONG +DBMS_SYS_SQL.DEFINE_COLUMN_RAW +DBMS_SYS_SQL.DEFINE_COLUMN_ROWID +DBMS_SYS_SQL.DESCRIBE_COLUMNS +DBMS_SYS_SQL.DESCRIBE_COLUMNS2 +DBMS_SYS_SQL.DESCRIBE_COLUMNS3 +DBMS_SYS_SQL.DUMP_ALL_OPEN_CURSORS +DBMS_SYS_SQL.EXECUTE +DBMS_SYS_SQL.EXECUTE_AND_FETCH +DBMS_SYS_SQL.FETCH_ROWS +DBMS_SYS_SQL.GET_RPI_CURSOR +DBMS_SYS_SQL.INIT +DBMS_SYS_SQL.IS_OPEN +DBMS_SYS_SQL.LAST_ERROR_POSITION +DBMS_SYS_SQL.LAST_ROW_COUNT +DBMS_SYS_SQL.LAST_ROW_ID +DBMS_SYS_SQL.LAST_SQL_FUNCTION_CODE +DBMS_SYS_SQL.OPEN_CURSOR +DBMS_SYS_SQL.PARSE +DBMS_SYS_SQL.PARSE_AS_USER +DBMS_SYS_SQL.TO_CURSOR_NUMBER +DBMS_SYS_SQL.TO_REFCURSOR +DBMS_SYS_SQL.VARIABLE_VALUE +DBMS_SYS_SQL.VARIABLE_VALUE_CHAR +DBMS_SYS_SQL.VARIABLE_VALUE_RAW +DBMS_SYS_SQL.VARIABLE_VALUE_ROWID +DBMS_TDB. +DBMS_TDB.CHECK_DB +DBMS_TDB.CHECK_EXTERNAL +DBMS_TDB.EXIT_TRANSPORT_SCRIPT +DBMS_TDE_TOOLKIT. +DBMS_TDE_TOOLKIT.DATAPUMP_DECRYPT +DBMS_TDE_TOOLKIT.DATAPUMP_ENCRYPT +DBMS_TDE_TOOLKIT_FFI. +DBMS_TDE_TOOLKIT_FFI.DATAPUMP_DECRYPT +DBMS_TDE_TOOLKIT_FFI.DATAPUMP_ENCRYPT +DBMS_TRACE. +DBMS_TRACE.CLEAR_PLSQL_TRACE +DBMS_TRACE.COMMENT_PLSQL_TRACE +DBMS_TRACE.GET_PLSQL_TRACE_LEVEL +DBMS_TRACE.GET_PLSQL_TRACE_RUNNUMBER +DBMS_TRACE.INTERNAL_VERSION_CHECK +DBMS_TRACE.LIMIT_PLSQL_TRACE +DBMS_TRACE.PAUSE_PLSQL_TRACE +DBMS_TRACE.PLSQL_TRACE_VERSION +DBMS_TRACE.RESUME_PLSQL_TRACE +DBMS_TRACE.SET_PLSQL_TRACE +DBMS_TRANSACTION. +DBMS_TRANSACTION.ADVISE_COMMIT +DBMS_TRANSACTION.ADVISE_NOTHING +DBMS_TRANSACTION.ADVISE_ROLLBACK +DBMS_TRANSACTION.BEGIN_DISCRETE_TRANSACTION +DBMS_TRANSACTION.COMMIT +DBMS_TRANSACTION.COMMIT_COMMENT +DBMS_TRANSACTION.COMMIT_FORCE +DBMS_TRANSACTION.LOCAL_TRANSACTION_ID +DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY +DBMS_TRANSACTION.PURGE_MIXED +DBMS_TRANSACTION.READ_ONLY +DBMS_TRANSACTION.READ_WRITE +DBMS_TRANSACTION.ROLLBACK +DBMS_TRANSACTION.ROLLBACK_FORCE +DBMS_TRANSACTION.ROLLBACK_SAVEPOINT +DBMS_TRANSACTION.SAVEPOINT +DBMS_TRANSACTION.STEP_ID +DBMS_TRANSACTION.USE_ROLLBACK_SEGMENT +DBMS_TRANSACTION_INTERNAL_SYS. +DBMS_TRANSACTION_INTERNAL_SYS.GET_CURRENT_SCN +DBMS_TRANSFORM. +DBMS_TRANSFORM.COMPUTE_TRANSFORMATION +DBMS_TRANSFORM.CREATE_TRANSFORMATION +DBMS_TRANSFORM.DROP_TRANSFORMATION +DBMS_TRANSFORM.MODIFY_TRANSFORMATION +DBMS_TRANSFORM_EXIMP. +DBMS_TRANSFORM_EXIMP.IMPORT_TRANSFORMATION +DBMS_TRANSFORM_EXIMP.IMPORT_TRANS_ATTR +DBMS_TRANSFORM_EXIMP.INSTANCE_INFO_EXP +DBMS_TRANSFORM_EXIMP.SCHEMA_INFO_EXP +DBMS_TRANSFORM_EXIMP_INTERNAL. +DBMS_TRANSFORM_EXIMP_INTERNAL.PARSE_NAME +DBMS_TRANSFORM_EXIMP_INTERNAL.PROCESS_TRANS +DBMS_TRANSFORM_EXIMP_INTERNAL.PROCESS_TRANS_ATTRIB +DBMS_TRANSFORM_INTERNAL. +DBMS_TRANSFORM_INTERNAL.I_CREATE_TRANS +DBMS_TRANSFORM_INTERNAL.I_DROP_TRANSFORMATION +DBMS_TRANSFORM_INTERNAL.I_MODIFY_TRANS +DBMS_TTS. +DBMS_TTS.CHECKTABLESPACE +DBMS_TTS.DOWNGRADE +DBMS_TTS.INSERT_ERROR +DBMS_TTS.ISSELFCONTAINED +DBMS_TTS.TRANSPORT_CHAR_SET_CHECK +DBMS_TTS.TRANSPORT_CHAR_SET_CHECK_MSG +DBMS_TTS.TRANSPORT_SET_CHECK +DBMS_TYPES. +DBMS_TYPE_UTILITY. +DBMS_TYPE_UTILITY.COMPILE_ALL_TYPES +DBMS_TYPE_UTILITY.DELETE_CONSTRUCTOR_KEYWORD +DBMS_TYPE_UTILITY.RESET_ALL_TYPES +DBMS_TYPE_UTILITY.UPGRADE_ALL_TABLES +DBMS_UNDO_ADV. +DBMS_UNDO_ADV.BEST_POSSIBLE_RETENTION +DBMS_UNDO_ADV.LONGEST_QUERY +DBMS_UNDO_ADV.RBU_MIGRATION +DBMS_UNDO_ADV.REQUIRED_RETENTION +DBMS_UNDO_ADV.REQUIRED_UNDO_SIZE +DBMS_UNDO_ADV.UNDO_ADVISOR +DBMS_UNDO_ADV.UNDO_AUTOTUNE +DBMS_UNDO_ADV.UNDO_HEALTH +DBMS_UNDO_ADV.UNDO_INFO +DBMS_UTILITY. +DBMS_UTILITY.ACTIVE_INSTANCES +DBMS_UTILITY.ANALYZE_DATABASE +DBMS_UTILITY.ANALYZE_PART_OBJECT +DBMS_UTILITY.ANALYZE_SCHEMA +DBMS_UTILITY.CANONICALIZE +DBMS_UTILITY.COMMA_TO_TABLE +DBMS_UTILITY.COMPILE_SCHEMA +DBMS_UTILITY.CREATE_ALTER_TYPE_ERROR_TABLE +DBMS_UTILITY.CURRENT_INSTANCE +DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK +DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE +DBMS_UTILITY.DB_VERSION +DBMS_UTILITY.EXEC_DDL_STATEMENT +DBMS_UTILITY.FORMAT_CALL_STACK +DBMS_UTILITY.FORMAT_ERROR_BACKTRACE +DBMS_UTILITY.FORMAT_ERROR_STACK +DBMS_UTILITY.GET_CPU_TIME +DBMS_UTILITY.GET_DEPENDENCY +DBMS_UTILITY.GET_ENDIANNESS +DBMS_UTILITY.GET_HASH_VALUE +DBMS_UTILITY.GET_PARAMETER_VALUE +DBMS_UTILITY.GET_SQL_HASH +DBMS_UTILITY.GET_TIME +DBMS_UTILITY.GET_TZ_TRANSITIONS +DBMS_UTILITY.INVALIDATE +DBMS_UTILITY.IS_BIT_SET +DBMS_UTILITY.IS_CLUSTER_DATABASE +DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS +DBMS_UTILITY.NAME_RESOLVE +DBMS_UTILITY.NAME_TOKENIZE +DBMS_UTILITY.OLD_CURRENT_SCHEMA +DBMS_UTILITY.OLD_CURRENT_USER +DBMS_UTILITY.PORT_STRING +DBMS_UTILITY.SQLID_TO_SQLHASH +DBMS_UTILITY.TABLE_TO_COMMA +DBMS_UTILITY.VALIDATE +DBMS_UTILITY.WAIT_ON_PENDING_DML +DBMS_WARNING. +DBMS_WARNING.ADD_WARNING_SETTING_CAT +DBMS_WARNING.ADD_WARNING_SETTING_NUM +DBMS_WARNING.GET_CATEGORY +DBMS_WARNING.GET_WARNING_SETTING_CAT +DBMS_WARNING.GET_WARNING_SETTING_NUM +DBMS_WARNING.GET_WARNING_SETTING_STRING +DBMS_WARNING.SET_WARNING_SETTING_STRING +DBMS_WARNING_INTERNAL. +DBMS_WARNING_INTERNAL.SHOW_WARNING_SETTINGS +DBMS_WLM. +DBMS_WLM.ABORT_WLMPLAN +DBMS_WLM.ADD_WLMCLASSIFIERS +DBMS_WLM.CHECK_RM_PLAN +DBMS_WLM.CHECK_WLMPLAN +DBMS_WLM.CREATE_WLMPLAN +DBMS_WLM.DELETE_WLMPLAN +DBMS_WLM.SUBMIT_WLMPCS +DBMS_WLM.SUBMIT_WLMPLAN +DBMS_WORKLOAD_CAPTURE. +DBMS_WORKLOAD_CAPTURE.ADD_FILTER +DBMS_WORKLOAD_CAPTURE.DELETE_CAPTURE_INFO +DBMS_WORKLOAD_CAPTURE.DELETE_FILTER +DBMS_WORKLOAD_CAPTURE.EXPORT_AWR +DBMS_WORKLOAD_CAPTURE.EXPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_CAPTURE.EXPORT_UC_GRAPH +DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE +DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO +DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_PATH +DBMS_WORKLOAD_CAPTURE.GET_PERF_DATA_EXPORT_STATUS +DBMS_WORKLOAD_CAPTURE.IMPORT_AWR +DBMS_WORKLOAD_CAPTURE.IMPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_CAPTURE.IMPORT_UC_GRAPH +DBMS_WORKLOAD_CAPTURE.REPORT +DBMS_WORKLOAD_CAPTURE.START_CAPTURE +DBMS_WORKLOAD_CAPTURE.USER_CALLS_GRAPH +DBMS_WORKLOAD_REPLAY. +DBMS_WORKLOAD_REPLAY.ADD_FILTER +DBMS_WORKLOAD_REPLAY.CALIBRATE +DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY +DBMS_WORKLOAD_REPLAY.CLIENT_CONNECT +DBMS_WORKLOAD_REPLAY.CLIENT_VITALS +DBMS_WORKLOAD_REPLAY.COMPARE_PERIOD_REPORT +DBMS_WORKLOAD_REPLAY.COMPARE_SQLSET_REPORT +DBMS_WORKLOAD_REPLAY.CREATE_FILTER_SET +DBMS_WORKLOAD_REPLAY.DELETE_ATTRIBUTE +DBMS_WORKLOAD_REPLAY.DELETE_FILTER +DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO +DBMS_WORKLOAD_REPLAY.DIVERGING_STATEMENT_STATUS +DBMS_WORKLOAD_REPLAY.EXPORT_AWR +DBMS_WORKLOAD_REPLAY.EXPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_REPLAY.EXPORT_UC_GRAPH +DBMS_WORKLOAD_REPLAY.GET_ADVANCED_PARAMETER +DBMS_WORKLOAD_REPLAY.GET_ATTRIBUTE +DBMS_WORKLOAD_REPLAY.GET_CAPTURED_TABLES +DBMS_WORKLOAD_REPLAY.GET_DIVERGING_STATEMENT +DBMS_WORKLOAD_REPLAY.GET_PERF_DATA_EXPORT_STATUS +DBMS_WORKLOAD_REPLAY.GET_PROCESSING_PATH +DBMS_WORKLOAD_REPLAY.GET_REPLAY_INFO +DBMS_WORKLOAD_REPLAY.GET_REPLAY_PATH +DBMS_WORKLOAD_REPLAY.GET_REPLAY_TIMEOUT +DBMS_WORKLOAD_REPLAY.IMPORT_AWR +DBMS_WORKLOAD_REPLAY.IMPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_REPLAY.IMPORT_UC_GRAPH +DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY +DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY_INTERNAL +DBMS_WORKLOAD_REPLAY.IS_REPLAY_PAUSED +DBMS_WORKLOAD_REPLAY.PAUSE_REPLAY +DBMS_WORKLOAD_REPLAY.PERSIST_ATTRIBUTES +DBMS_WORKLOAD_REPLAY.POPULATE_DIVERGENCE +DBMS_WORKLOAD_REPLAY.POPULATE_DIVERGENCE_STATUS +DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY +DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE +DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE_COMPLETION +DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE_REMAINING_TIME +DBMS_WORKLOAD_REPLAY.PROCESS_REPLAY_GRAPH +DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION +DBMS_WORKLOAD_REPLAY.REPORT +DBMS_WORKLOAD_REPLAY.RESET_ADVANCED_PARAMETERS +DBMS_WORKLOAD_REPLAY.RESUME_REPLAY +DBMS_WORKLOAD_REPLAY.REUSE_REPLAY_FILTER_SET +DBMS_WORKLOAD_REPLAY.SET_ADVANCED_PARAMETER +DBMS_WORKLOAD_REPLAY.SET_ATTRIBUTE +DBMS_WORKLOAD_REPLAY.SET_REPLAY_TIMEOUT +DBMS_WORKLOAD_REPLAY.START_REPLAY +DBMS_WORKLOAD_REPLAY.STOP_STS_C +DBMS_WORKLOAD_REPLAY.SYNCPOINT_WAIT_TO_POST +DBMS_WORKLOAD_REPLAY.SYNC_ATTRIBUTES_FROM_FILE +DBMS_WORKLOAD_REPLAY.USER_CALLS_GRAPH +DBMS_WORKLOAD_REPLAY.USE_FILTER_SET +DBMS_WORKLOAD_REPOSITORY. +DBMS_WORKLOAD_REPOSITORY.ADD_COLORED_SQL +DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_DIFF_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_DIFF_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_SET_REPORT_THRESHOLDS +DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.CONTROL_RESTRICTED_SNAPSHOT +DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE +DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE +DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT +DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE +DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE +DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE +DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE +DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS +DBMS_WORKLOAD_REPOSITORY.PURGE_SQL_DETAILS +DBMS_WORKLOAD_REPOSITORY.REMOVE_COLORED_SQL +DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE +DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_DETAILS +DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRIC +DBMS_WORKLOAD_REPOSITORY.UPDATE_OBJECT_INFO +DBMS_WRR_INTERNAL. +DBMS_WRR_INTERNAL.ACQUIRE_WRR_LOCK +DBMS_WRR_INTERNAL.ADD_CAPTURE +DBMS_WRR_INTERNAL.ADD_CAPTURE_STATS +DBMS_WRR_INTERNAL.ADD_FILTER +DBMS_WRR_INTERNAL.ADD_REPLAY +DBMS_WRR_INTERNAL.ADD_REPLAY_STATS +DBMS_WRR_INTERNAL.BUILD_CAPTURE_INFO_TAG +DBMS_WRR_INTERNAL.CAPTURE_UPDATE_EXP_STATUS +DBMS_WRR_INTERNAL.COMPARE_STS +DBMS_WRR_INTERNAL.COPY_FILTERS +DBMS_WRR_INTERNAL.COUNT_FILTERS +DBMS_WRR_INTERNAL.CREATE_DIR_OBJ +DBMS_WRR_INTERNAL.CREATE_DIR_OBJ_TMP +DBMS_WRR_INTERNAL.DBG_TRACE +DBMS_WRR_INTERNAL.DB_DATE +DBMS_WRR_INTERNAL.DELETE_CAPTURE +DBMS_WRR_INTERNAL.DELETE_FILE +DBMS_WRR_INTERNAL.DELETE_FILTER +DBMS_WRR_INTERNAL.DELETE_REPLAY +DBMS_WRR_INTERNAL.DROP_DIR_OBJ +DBMS_WRR_INTERNAL.DROP_TABLE +DBMS_WRR_INTERNAL.END_REPLAY_ACTIONS +DBMS_WRR_INTERNAL.EXPORT_STS +DBMS_WRR_INTERNAL.EXPORT_STS_FROM_CAPTURE +DBMS_WRR_INTERNAL.EXPORT_STS_FROM_REPLAY +DBMS_WRR_INTERNAL.EXPORT_UC_GRAPH +DBMS_WRR_INTERNAL.FILE_EXISTS +DBMS_WRR_INTERNAL.FINALIZE_STS_CAPTURE +DBMS_WRR_INTERNAL.FORMAT_BYTES +DBMS_WRR_INTERNAL.FORMAT_INTERVAL +DBMS_WRR_INTERNAL.GENERATE_CAPTURE_WID +DBMS_WRR_INTERNAL.GET_CAPINFO_INTERNAL +DBMS_WRR_INTERNAL.GET_CAPTURE_SIG +DBMS_WRR_INTERNAL.GET_DIR_PATH +DBMS_WRR_INTERNAL.GET_EXPORT_STATUS_I +DBMS_WRR_INTERNAL.GET_FILE +DBMS_WRR_INTERNAL.GET_REPLAY_SIG +DBMS_WRR_INTERNAL.GET_ROW_DIVERGENCE_BCK_HLP +DBMS_WRR_INTERNAL.GET_STS_NAME +DBMS_WRR_INTERNAL.IMPORT_STS +DBMS_WRR_INTERNAL.IMPORT_STS_FROM_CAPTURE +DBMS_WRR_INTERNAL.IMPORT_STS_FROM_REPLAY +DBMS_WRR_INTERNAL.IMPORT_UC_GRAPH +DBMS_WRR_INTERNAL.INVOKE_ACQUIRE_WRR_LOCK +DBMS_WRR_INTERNAL.INVOKE_CHECK_SQLSET_PRIVS +DBMS_WRR_INTERNAL.INVOKE_DIS_RES_SESS +DBMS_WRR_INTERNAL.INVOKE_GET_PATH +DBMS_WRR_INTERNAL.INVOKE_KGHSFSNEWFILE +DBMS_WRR_INTERNAL.INVOKE_READ_WMD +DBMS_WRR_INTERNAL.INVOKE_RELEASE_WRR_LOCK +DBMS_WRR_INTERNAL.INVOKE_UPDATE_WMD +DBMS_WRR_INTERNAL.LOAD_WORKLOAD_ATTRIBUTES +DBMS_WRR_INTERNAL.PUT_FILE +DBMS_WRR_INTERNAL.REPLAY_REPORT_INTERNAL +DBMS_WRR_INTERNAL.REPLAY_SUFFIX +DBMS_WRR_INTERNAL.START_STS_CAPTURE +DBMS_WRR_INTERNAL.STOP_SQL_SET_CAPTURE +DBMS_WRR_INTERNAL.TO_DBTZ +DBMS_WRR_INTERNAL.TRUNCATE_TABLE +DBMS_WRR_INTERNAL.UPDATE_CAPTURE_TOTAL_STATS +DBMS_WRR_INTERNAL.VALID_DEFAULT_ACTION +DBMS_XA. +DBMS_XA.DIST_TXN_SYNC +DBMS_XA.XA_COMMIT +DBMS_XA.XA_END +DBMS_XA.XA_FORGET +DBMS_XA.XA_GETLASTOER +DBMS_XA.XA_PREPARE +DBMS_XA.XA_RECOVER +DBMS_XA.XA_ROLLBACK +DBMS_XA.XA_SETTIMEOUT +DBMS_XA.XA_START +DBMS_XA_XID.DBMS_XA_XID +DBMS_XDB. +DBMS_XDB.ACLCHECKPRIVILEGES +DBMS_XDB.ADDAUTHENTICATIONMAPPING +DBMS_XDB.ADDAUTHENTICATIONMETHOD +DBMS_XDB.ADDDEFAULTTYPEMAPPINGS +DBMS_XDB.ADDHTTPEXPIREMAPPING +DBMS_XDB.ADDMIMEMAPPING +DBMS_XDB.ADDRESOURCE +DBMS_XDB.ADDSCHEMALOCMAPPING +DBMS_XDB.ADDSERVLET +DBMS_XDB.ADDSERVLETMAPPING +DBMS_XDB.ADDSERVLETSECROLE +DBMS_XDB.ADDTOLOCKTOKENLIST +DBMS_XDB.ADDTRUSTMAPPING +DBMS_XDB.ADDTRUSTSCHEME +DBMS_XDB.ADDXMLEXTENSION +DBMS_XDB.APPENDRESOURCEMETADATA +DBMS_XDB.CFG_GET +DBMS_XDB.CFG_REFRESH +DBMS_XDB.CFG_UPDATE +DBMS_XDB.CHANGEOWNER +DBMS_XDB.CHANGEPRIVILEGES +DBMS_XDB.CHECKPRIVILEGES +DBMS_XDB.CREATEFOLDER +DBMS_XDB.CREATEOIDPATH +DBMS_XDB.CREATERESOURCE +DBMS_XDB.DELETEAUTHENTICATIONMAPPING +DBMS_XDB.DELETEAUTHENTICATIONMETHOD +DBMS_XDB.DELETEDEFAULTTYPEMAPPINGS +DBMS_XDB.DELETEFROMLOCKTOKENLIST +DBMS_XDB.DELETEHTTPEXPIREMAPPING +DBMS_XDB.DELETEMIMEMAPPING +DBMS_XDB.DELETERESOURCE +DBMS_XDB.DELETERESOURCEMETADATA +DBMS_XDB.DELETESCHEMALOCMAPPING +DBMS_XDB.DELETESERVLET +DBMS_XDB.DELETESERVLETMAPPING +DBMS_XDB.DELETESERVLETSECROLE +DBMS_XDB.DELETETRUSTMAPPING +DBMS_XDB.DELETETRUSTSCHEME +DBMS_XDB.DELETEXMLEXTENSION +DBMS_XDB.ENABLECUSTOMAUTHENTICATION +DBMS_XDB.ENABLECUSTOMTRUST +DBMS_XDB.EXISTSRESOURCE +DBMS_XDB.GETACLDOCUMENT +DBMS_XDB.GETCONTENTBLOB +DBMS_XDB.GETCONTENTCLOB +DBMS_XDB.GETCONTENTVARCHAR2 +DBMS_XDB.GETCONTENTXMLREF +DBMS_XDB.GETCONTENTXMLTYPE +DBMS_XDB.GETFTPPORT +DBMS_XDB.GETHTTPPORT +DBMS_XDB.GETHTTPREQUESTHEADER +DBMS_XDB.GETLISTENERENDPOINT +DBMS_XDB.GETLOCKTOKEN +DBMS_XDB.GETLOCKTOKENLIST +DBMS_XDB.GETPRIVILEGES +DBMS_XDB.GETRESOID +DBMS_XDB.GETRESOURCE +DBMS_XDB.GETXDB_TABLESPACE +DBMS_XDB.HASBLOBCONTENT +DBMS_XDB.HASCHARCONTENT +DBMS_XDB.HASXMLCONTENT +DBMS_XDB.HASXMLREFERENCE +DBMS_XDB.ISFOLDER +DBMS_XDB.LINK +DBMS_XDB.LOCKDISCOVERY +DBMS_XDB.LOCKRESOURCE +DBMS_XDB.MOVEXDB_TABLESPACE +DBMS_XDB.PROCESSLINKS +DBMS_XDB.PURGERESOURCEMETADATA +DBMS_XDB.REBUILDHIERARCHICALINDEX +DBMS_XDB.REFRESHCONTENTSIZE +DBMS_XDB.REFRESHLOCK +DBMS_XDB.RENAMERESOURCE +DBMS_XDB.SETACL +DBMS_XDB.SETDEFAULTTYPEMAPPINGS +DBMS_XDB.SETDYNAMICGROUPSTORE +DBMS_XDB.SETFTPPORT +DBMS_XDB.SETHTTPPORT +DBMS_XDB.SETLISTENERENDPOINT +DBMS_XDB.SETLISTENERLOCALACCESS +DBMS_XDB.TOUCHRESOURCE +DBMS_XDB.UNLOCKRESOURCE +DBMS_XDB.UPDATERESOURCEMETADATA +DBMS_XDBNFS. +DBMS_XDBNFS.DUMP_NFSSTATS +DBMS_XDBNFS.NFSFH2RESID +DBMS_XDBNFS.RESET_NFSSTATS +DBMS_XDBNFS.SYNCRESOURCE +DBMS_XDBREPOS. +DBMS_XDBREPOS.CREATEREPOSITORY +DBMS_XDBREPOS.DROPREPOSITORY +DBMS_XDBREPOS.DROP_REPOS +DBMS_XDBREPOS.INSTALL_REPOS +DBMS_XDBREPOS.MOUNTREPOSITORY +DBMS_XDBREPOS.SETCURRENTREPOSITORY +DBMS_XDBREPOS.UNMOUNTREPOSITORY +DBMS_XDBRESOURCE. +DBMS_XDBRESOURCE.FREERESOURCE +DBMS_XDBRESOURCE.GETACL +DBMS_XDBRESOURCE.GETACLDOCFROMRES +DBMS_XDBRESOURCE.GETAUTHOR +DBMS_XDBRESOURCE.GETCHARACTERSET +DBMS_XDBRESOURCE.GETCOMMENT +DBMS_XDBRESOURCE.GETCONTENTBLOB +DBMS_XDBRESOURCE.GETCONTENTCLOB +DBMS_XDBRESOURCE.GETCONTENTREF +DBMS_XDBRESOURCE.GETCONTENTTYPE +DBMS_XDBRESOURCE.GETCONTENTVARCHAR2 +DBMS_XDBRESOURCE.GETCONTENTXML +DBMS_XDBRESOURCE.GETCREATIONDATE +DBMS_XDBRESOURCE.GETCREATOR +DBMS_XDBRESOURCE.GETCUSTOMMETADATA +DBMS_XDBRESOURCE.GETDISPLAYNAME +DBMS_XDBRESOURCE.GETLANGUAGE +DBMS_XDBRESOURCE.GETLASTMODIFIER +DBMS_XDBRESOURCE.GETMODIFICATIONDATE +DBMS_XDBRESOURCE.GETOWNER +DBMS_XDBRESOURCE.GETREFCOUNT +DBMS_XDBRESOURCE.GETVERSIONID +DBMS_XDBRESOURCE.HASACLCHANGED +DBMS_XDBRESOURCE.HASAUTHORCHANGED +DBMS_XDBRESOURCE.HASCHANGED +DBMS_XDBRESOURCE.HASCHARACTERSETCHANGED +DBMS_XDBRESOURCE.HASCOMMENTCHANGED +DBMS_XDBRESOURCE.HASCONTENTCHANGED +DBMS_XDBRESOURCE.HASCONTENTTYPECHANGED +DBMS_XDBRESOURCE.HASCREATIONDATECHANGED +DBMS_XDBRESOURCE.HASCREATORCHANGED +DBMS_XDBRESOURCE.HASCUSTOMMETADATACHANGED +DBMS_XDBRESOURCE.HASDISPLAYNAMECHANGED +DBMS_XDBRESOURCE.HASLANGUAGECHANGED +DBMS_XDBRESOURCE.HASLASTMODIFIERCHANGED +DBMS_XDBRESOURCE.HASMODIFICATIONDATECHANGED +DBMS_XDBRESOURCE.HASOWNERCHANGED +DBMS_XDBRESOURCE.HASREFCOUNTCHANGED +DBMS_XDBRESOURCE.HASVERSIONIDCHANGED +DBMS_XDBRESOURCE.ISFOLDER +DBMS_XDBRESOURCE.ISNULL +DBMS_XDBRESOURCE.MAKEDOCUMENT +DBMS_XDBRESOURCE.SAVE +DBMS_XDBRESOURCE.SETACL +DBMS_XDBRESOURCE.SETAUTHOR +DBMS_XDBRESOURCE.SETCHARACTERSET +DBMS_XDBRESOURCE.SETCOMMENT +DBMS_XDBRESOURCE.SETCONTENT +DBMS_XDBRESOURCE.SETCONTENTTYPE +DBMS_XDBRESOURCE.SETCUSTOMMETADATA +DBMS_XDBRESOURCE.SETDISPLAYNAME +DBMS_XDBRESOURCE.SETLANGUAGE +DBMS_XDBRESOURCE.SETOWNER +DBMS_XDBT. +DBMS_XDBT.AUTOSYNCJOBBYCOUNT +DBMS_XDBT.AUTOSYNCJOBBYTIME +DBMS_XDBT.CONFIGUREAUTOSYNC +DBMS_XDBT.CREATEDATASTOREPREF +DBMS_XDBT.CREATEFILTERPREF +DBMS_XDBT.CREATEINDEX +DBMS_XDBT.CREATELEXERPREF +DBMS_XDBT.CREATEPREFERENCES +DBMS_XDBT.CREATESECTIONGROUPPREF +DBMS_XDBT.CREATESTOPLISTPREF +DBMS_XDBT.CREATESTORAGEPREF +DBMS_XDBT.CREATEWORDLISTPREF +DBMS_XDBT.DROPPREFERENCES +DBMS_XDBT.OPTIMIZEINDEX +DBMS_XDBT.SETSYNCTIMEOUT +DBMS_XDBT.SYNCINDEX +DBMS_XDBT.XDB_DATASTORE_PROC +DBMS_XDBUTIL_INT. +DBMS_XDBUTIL_INT.CLEANSGAFORUPGRADE +DBMS_XDBUTIL_INT.CLEANUP_EXPIRED_NFSCLIENTS +DBMS_XDBUTIL_INT.CREATEACL +DBMS_XDBUTIL_INT.CREATESYSTEMVIRTUALFOLDER +DBMS_XDBUTIL_INT.FIXACL +DBMS_XDBUTIL_INT.FIXACL_DOWNGRADE +DBMS_XDBUTIL_INT.FLUSHSESSION +DBMS_XDBUTIL_INT.GETNAMESPACE +DBMS_XDBUTIL_INT.GETNEWOID +DBMS_XDBUTIL_INT.GET_TABLESPACE_TAB +DBMS_XDBUTIL_INT.ISOBJECTGENERATED +DBMS_XDBUTIL_INT.ISTABLEOUTOFLINE +DBMS_XDBUTIL_INT.ISXMLNESTEDTABLE +DBMS_XDBUTIL_INT.LOOKUPSCHEMAOID +DBMS_XDBUTIL_INT.LOOKUPSCHEMAURL +DBMS_XDBUTIL_INT.MIGRATEALLXMLFROM9201 +DBMS_XDBUTIL_INT.NUMTOHEX +DBMS_XDBUTIL_INT.NUMTOHEX2 +DBMS_XDBUTIL_INT.PATCHREPOSITORYRESCONFIGLIST +DBMS_XDBUTIL_INT.RAWTONUM +DBMS_XDBUTIL_INT.RAWTONUM2 +DBMS_XDBUTIL_INT.SETLINKPARENTS +DBMS_XDBUTIL_INT.XMLSCHEMADEPENDENCYLEVEL +DBMS_XDBUTIL_INT.XMLSCHEMAGETDEPENDENCYLIST +DBMS_XDBUTIL_INT.XMLSCHEMASTRIPUSERNAME +DBMS_XDBZ. +DBMS_XDBZ.ADD_APPLICATION_PRINCIPAL +DBMS_XDBZ.CHANGE_APPLICATION_MEMBERSHIP +DBMS_XDBZ.CREATENONCEKEY +DBMS_XDBZ.DELETE_APPLICATION_PRINCIPAL +DBMS_XDBZ.DISABLE_HIERARCHY +DBMS_XDBZ.ENABLE_HIERARCHY +DBMS_XDBZ.GET_ACLOID +DBMS_XDBZ.GET_USERID +DBMS_XDBZ.IS_HIERARCHY_ENABLED +DBMS_XDBZ.PURGEAPPLICATIONCACHE +DBMS_XDBZ.PURGELDAPCACHE +DBMS_XDBZ.RESET_APPLICATION_PRINCIPAL +DBMS_XDBZ.SET_APPLICATION_PRINCIPAL +DBMS_XDBZ.VALIDATEACL +DBMS_XDBZ.VALIDATEFUSIONACL +DBMS_XDBZ0. +DBMS_XDBZ0.CHECKPRIVRLS_DELETEPF +DBMS_XDBZ0.CHECKPRIVRLS_DELETEPROPF +DBMS_XDBZ0.CHECKPRIVRLS_INSERTPF +DBMS_XDBZ0.CHECKPRIVRLS_SELECTPF +DBMS_XDBZ0.CHECKPRIVRLS_SELECTPROPF +DBMS_XDBZ0.CHECKPRIVRLS_UPDATEPF +DBMS_XDBZ0.CHECKPRIVRLS_UPDATEPROPF +DBMS_XDBZ0.CHECKWORKSPACE_PF +DBMS_XDBZ0.DISABLE_HIERARCHY_INTERNAL +DBMS_XDBZ0.ENABLE_HIERARCHY_INTERNAL +DBMS_XDBZ0.GENERATE_TRGNM +DBMS_XDBZ0.GENERATE_TRGNMDL +DBMS_XDBZ0.GET_USERNAME +DBMS_XDBZ0.GET_VALID_ACL +DBMS_XDBZ0.INITXDBRESCONFIG +DBMS_XDBZ0.INITXDBSECURITY +DBMS_XDBZ0.IS_HIERARCHY_ENABLED_INTERNAL +DBMS_XDBZ0.IS_HIERARCHY_ENABLED_TRIG +DBMS_XDBZ0.MIGRATE_PITRIG +DBMS_XDBZ0.SET_DELTA_CALC_INLINE_TRIGFLAG +DBMS_XDBZ0.TRUNCATE_NAME +DBMS_XDBZ0.UPDATE_TABLE_DEPENDANT_FLAGS +DBMS_XDB_ADMIN. +DBMS_XDB_ADMIN.CLEARREPOSITORYXMLINDEX +DBMS_XDB_ADMIN.CREATEREPOSITORYXMLINDEX +DBMS_XDB_ADMIN.DROPREPOSITORYXMLINDEX +DBMS_XDB_ADMIN.XMLINDEXADDPATH +DBMS_XDB_ADMIN.XMLINDEXREMOVEPATH +DBMS_XDB_PRINT. +DBMS_XDB_PRINT.CLEARPRINTMODE +DBMS_XDB_PRINT.SETPRINTMODE +DBMS_XDB_VERSION. +DBMS_XDB_VERSION.CHECKIN +DBMS_XDB_VERSION.CHECKOUT +DBMS_XDB_VERSION.CREATEBRANCH +DBMS_XDB_VERSION.CREATEREALWORKSPACE +DBMS_XDB_VERSION.CREATEVCR +DBMS_XDB_VERSION.CREATEVIRTUALWORKSPACE +DBMS_XDB_VERSION.DELETEVERSION +DBMS_XDB_VERSION.DELETEVERSIONHISTORY +DBMS_XDB_VERSION.DELETEWORKSPACE +DBMS_XDB_VERSION.GETCONTENTSBLOBBYRESID +DBMS_XDB_VERSION.GETCONTENTSCLOBBYRESID +DBMS_XDB_VERSION.GETCONTENTSXMLBYRESID +DBMS_XDB_VERSION.GETPREDECESSORS +DBMS_XDB_VERSION.GETPREDSBYRESID +DBMS_XDB_VERSION.GETRESOURCEBYRESID +DBMS_XDB_VERSION.GETSUCCESSORS +DBMS_XDB_VERSION.GETSUCCSBYRESID +DBMS_XDB_VERSION.GETVERSIONHISTORY +DBMS_XDB_VERSION.GETVERSIONHISTORYID +DBMS_XDB_VERSION.GETVERSIONHISTORYROOT +DBMS_XDB_VERSION.GETWORKSPACE +DBMS_XDB_VERSION.ISCHECKEDOUT +DBMS_XDB_VERSION.MAKESHARED +DBMS_XDB_VERSION.MAKEVERSIONED +DBMS_XDB_VERSION.PUBLISHWORKSPACE +DBMS_XDB_VERSION.SETWORKSPACE +DBMS_XDB_VERSION.UNCHECKOUT +DBMS_XDB_VERSION.UNPUBLISHWORKSPACE +DBMS_XDB_VERSION.UPDATEVCRVERSION +DBMS_XDB_VERSION.UPDATEWORKSPACE +DBMS_XDS. +DBMS_XDS.DISABLE_XDS +DBMS_XDS.DROP_XDS +DBMS_XDS.ENABLE_XDS +DBMS_XDS.REFRESH_DSD +DBMS_XDSUTL. +DBMS_XDSUTL.INVALIDATE_DSD_CACHE +DBMS_XDSUTL.INVALIDATE_DSD_CACHE_BY_ACLID +DBMS_XEVENT. +DBMS_XEVENT.CLEAR +DBMS_XEVENT.GETAPPLICATIONDATA +DBMS_XEVENT.GETCHILDOID +DBMS_XEVENT.GETCURRENTUSER +DBMS_XEVENT.GETDAVOWNER +DBMS_XEVENT.GETDAVTOKEN +DBMS_XEVENT.GETDEPTH +DBMS_XEVENT.GETEVENT +DBMS_XEVENT.GETEXPIRY +DBMS_XEVENT.GETFIRST +DBMS_XEVENT.GETHANDLERLIST +DBMS_XEVENT.GETINTERFACE +DBMS_XEVENT.GETLANGUAGE +DBMS_XEVENT.GETLINK +DBMS_XEVENT.GETLINKNAME +DBMS_XEVENT.GETLOCK +DBMS_XEVENT.GETLOCKMODE +DBMS_XEVENT.GETLOCKTYPE +DBMS_XEVENT.GETNAME +DBMS_XEVENT.GETNEXT +DBMS_XEVENT.GETNFSNODEID +DBMS_XEVENT.GETOLDRESOURCE +DBMS_XEVENT.GETOPENACCESSMODE +DBMS_XEVENT.GETOPENDENYMODE +DBMS_XEVENT.GETOUTPUTSTREAM +DBMS_XEVENT.GETPARAMETER +DBMS_XEVENT.GETPARENT +DBMS_XEVENT.GETPARENTNAME +DBMS_XEVENT.GETPARENTOID +DBMS_XEVENT.GETPARENTPATH +DBMS_XEVENT.GETPATH +DBMS_XEVENT.GETRESOURCE +DBMS_XEVENT.GETSCHEMA +DBMS_XEVENT.GETSOURCE +DBMS_XEVENT.GETUPDATEBYTECOUNT +DBMS_XEVENT.GETUPDATEBYTEOFFSET +DBMS_XEVENT.GETXDBEVENT +DBMS_XEVENT.ISNULL +DBMS_XEVENT.REMOVE +DBMS_XEVENT.SETRENDERPATH +DBMS_XEVENT.SETRENDERSTREAM +DBMS_XMLDOM. +DBMS_XMLDOM.ADOPTNODE +DBMS_XMLDOM.APPENDCHILD +DBMS_XMLDOM.APPENDDATA +DBMS_XMLDOM.BINARYINPUTSTREAMAVAILABLE +DBMS_XMLDOM.CHARACTERINPUTSTREAMAVAILABLE +DBMS_XMLDOM.CLONENODE +DBMS_XMLDOM.CLOSEBINARYINPUTSTREAM +DBMS_XMLDOM.CLOSEBINARYOUTPUTSTREAM +DBMS_XMLDOM.CLOSECHARACTERINPUTSTREAM +DBMS_XMLDOM.CLOSECHARACTEROUTPUTSTREAM +DBMS_XMLDOM.CREATEATTRIBUTE +DBMS_XMLDOM.CREATECDATASECTION +DBMS_XMLDOM.CREATECOMMENT +DBMS_XMLDOM.CREATEDOCUMENT +DBMS_XMLDOM.CREATEDOCUMENTFRAGMENT +DBMS_XMLDOM.CREATEELEMENT +DBMS_XMLDOM.CREATEENTITYREFERENCE +DBMS_XMLDOM.CREATEPROCESSINGINSTRUCTION +DBMS_XMLDOM.CREATETEXTNODE +DBMS_XMLDOM.CREATEXMLBINARYINPUTSTREAM +DBMS_XMLDOM.CREATEXMLBINARYOUTPUTSTREAM +DBMS_XMLDOM.CREATEXMLCHARACTERINPUTSTREAM +DBMS_XMLDOM.CREATEXMLCHARACTEROUTPUTSTREAM +DBMS_XMLDOM.DELETEDATA +DBMS_XMLDOM.FINDENTITY +DBMS_XMLDOM.FINDNOTATION +DBMS_XMLDOM.FLUSHBINARYOUTPUTSTREAM +DBMS_XMLDOM.FLUSHCHARACTEROUTPUTSTREAM +DBMS_XMLDOM.FREEDOCFRAG +DBMS_XMLDOM.FREEDOCTYPE +DBMS_XMLDOM.FREEDOCUMENT +DBMS_XMLDOM.FREEELEMENT +DBMS_XMLDOM.FREENODE +DBMS_XMLDOM.FREENODELIST +DBMS_XMLDOM.GETATTRIBUTE +DBMS_XMLDOM.GETATTRIBUTENODE +DBMS_XMLDOM.GETATTRIBUTES +DBMS_XMLDOM.GETCHARSET +DBMS_XMLDOM.GETCHILDNODES +DBMS_XMLDOM.GETCHILDRENBYTAGNAME +DBMS_XMLDOM.GETDATA +DBMS_XMLDOM.GETDOCTYPE +DBMS_XMLDOM.GETDOCUMENTELEMENT +DBMS_XMLDOM.GETELEMENTSBYTAGNAME +DBMS_XMLDOM.GETENTITIES +DBMS_XMLDOM.GETEXPANDEDNAME +DBMS_XMLDOM.GETFIRSTCHILD +DBMS_XMLDOM.GETIMPLEMENTATION +DBMS_XMLDOM.GETLASTCHILD +DBMS_XMLDOM.GETLENGTH +DBMS_XMLDOM.GETLOCALNAME +DBMS_XMLDOM.GETNAME +DBMS_XMLDOM.GETNAMEDITEM +DBMS_XMLDOM.GETNAMESPACE +DBMS_XMLDOM.GETNEXTSIBLING +DBMS_XMLDOM.GETNODEFROMFRAGMENT +DBMS_XMLDOM.GETNODENAME +DBMS_XMLDOM.GETNODETYPE +DBMS_XMLDOM.GETNODEVALUE +DBMS_XMLDOM.GETNODEVALUEASBINARYSTREAM +DBMS_XMLDOM.GETNODEVALUEASCHARACTERSTREAM +DBMS_XMLDOM.GETNOTATIONNAME +DBMS_XMLDOM.GETNOTATIONS +DBMS_XMLDOM.GETOWNERDOCUMENT +DBMS_XMLDOM.GETOWNERELEMENT +DBMS_XMLDOM.GETPARENTNODE +DBMS_XMLDOM.GETPREFIX +DBMS_XMLDOM.GETPREVIOUSSIBLING +DBMS_XMLDOM.GETPUBLICID +DBMS_XMLDOM.GETQUALIFIEDNAME +DBMS_XMLDOM.GETSCHEMANODE +DBMS_XMLDOM.GETSPECIFIED +DBMS_XMLDOM.GETSTANDALONE +DBMS_XMLDOM.GETSYSTEMID +DBMS_XMLDOM.GETTAGNAME +DBMS_XMLDOM.GETTARGET +DBMS_XMLDOM.GETVALUE +DBMS_XMLDOM.GETVERSION +DBMS_XMLDOM.GETXMLTYPE +DBMS_XMLDOM.HASATTRIBUTE +DBMS_XMLDOM.HASATTRIBUTES +DBMS_XMLDOM.HASCHILDNODES +DBMS_XMLDOM.HASFEATURE +DBMS_XMLDOM.IMPORTNODE +DBMS_XMLDOM.INSERTBEFORE +DBMS_XMLDOM.INSERTDATA +DBMS_XMLDOM.ISNULL +DBMS_XMLDOM.ITEM +DBMS_XMLDOM.MAKEATTR +DBMS_XMLDOM.MAKECDATASECTION +DBMS_XMLDOM.MAKECHARACTERDATA +DBMS_XMLDOM.MAKECOMMENT +DBMS_XMLDOM.MAKEDOCUMENT +DBMS_XMLDOM.MAKEDOCUMENTFRAGMENT +DBMS_XMLDOM.MAKEDOCUMENTTYPE +DBMS_XMLDOM.MAKEELEMENT +DBMS_XMLDOM.MAKEENTITY +DBMS_XMLDOM.MAKEENTITYREFERENCE +DBMS_XMLDOM.MAKENODE +DBMS_XMLDOM.MAKENOTATION +DBMS_XMLDOM.MAKEPROCESSINGINSTRUCTION +DBMS_XMLDOM.MAKETEXT +DBMS_XMLDOM.NEWDOMDOCUMENT +DBMS_XMLDOM.NORMALIZE +DBMS_XMLDOM.READBINARYINPUTSTREAM +DBMS_XMLDOM.READBYTESFROMBIS1 +DBMS_XMLDOM.READCHARACTERINPUTSTREAM +DBMS_XMLDOM.REMOVEATTRIBUTE +DBMS_XMLDOM.REMOVEATTRIBUTENODE +DBMS_XMLDOM.REMOVECHILD +DBMS_XMLDOM.REMOVENAMEDITEM +DBMS_XMLDOM.REPLACECHILD +DBMS_XMLDOM.REPLACEDATA +DBMS_XMLDOM.RESOLVENAMESPACEPREFIX +DBMS_XMLDOM.SETATTRIBUTE +DBMS_XMLDOM.SETATTRIBUTENODE +DBMS_XMLDOM.SETCHARSET +DBMS_XMLDOM.SETDATA +DBMS_XMLDOM.SETDOCTYPE +DBMS_XMLDOM.SETNAMEDITEM +DBMS_XMLDOM.SETNODEVALUE +DBMS_XMLDOM.SETNODEVALUEASBINARYSTREAM +DBMS_XMLDOM.SETNODEVALUEASCHARACTERSTREAM +DBMS_XMLDOM.SETNODEVALUEASDEFERREDBFILE +DBMS_XMLDOM.SETNODEVALUEASDEFERREDBLOB +DBMS_XMLDOM.SETNODEVALUEASDEFERREDCLOB +DBMS_XMLDOM.SETPREFIX +DBMS_XMLDOM.SETSTANDALONE +DBMS_XMLDOM.SETVALUE +DBMS_XMLDOM.SETVERSION +DBMS_XMLDOM.SPLITTEXT +DBMS_XMLDOM.STREAMISNULL +DBMS_XMLDOM.SUBSTRINGDATA +DBMS_XMLDOM.USEBINARYSTREAM +DBMS_XMLDOM.WRITEBINARYOUTPUTSTREAM +DBMS_XMLDOM.WRITECHARACTEROUTPUTSTREAM +DBMS_XMLDOM.WRITEEXTERNALDTDTOBUFFER +DBMS_XMLDOM.WRITEEXTERNALDTDTOCLOB +DBMS_XMLDOM.WRITEEXTERNALDTDTOFILE +DBMS_XMLDOM.WRITETOBUFFER +DBMS_XMLDOM.WRITETOCLOB +DBMS_XMLDOM.WRITETOFILE +DBMS_XMLDOM.XMLD_USEBINSTREAM +DBMS_XMLGEN. +DBMS_XMLGEN.CLEARBINDVALUES +DBMS_XMLGEN.CLOSECONTEXT +DBMS_XMLGEN.CONVERT +DBMS_XMLGEN.GETNUMROWSPROCESSED +DBMS_XMLGEN.GETXML +DBMS_XMLGEN.GETXMLTYPE +DBMS_XMLGEN.NEWCONTEXT +DBMS_XMLGEN.NEWCONTEXTFROMHIERARCHY +DBMS_XMLGEN.REMOVEXSLTPARAM +DBMS_XMLGEN.RESTARTQUERY +DBMS_XMLGEN.SETBINDVALUE +DBMS_XMLGEN.SETCHECKINVALIDCHARS +DBMS_XMLGEN.SETCONVERTSPECIALCHARS +DBMS_XMLGEN.SETINDENTATIONWIDTH +DBMS_XMLGEN.SETMAXROWS +DBMS_XMLGEN.SETNULLHANDLING +DBMS_XMLGEN.SETPRETTYPRINTING +DBMS_XMLGEN.SETROWSETTAG +DBMS_XMLGEN.SETROWTAG +DBMS_XMLGEN.SETSKIPROWS +DBMS_XMLGEN.SETXSLT +DBMS_XMLGEN.SETXSLTPARAM +DBMS_XMLGEN.USEITEMTAGSFORCOLL +DBMS_XMLGEN.USENULLATTRIBUTEINDICATOR +DBMS_XMLINDEX. +DBMS_XMLINDEX.CREATEDATEINDEX +DBMS_XMLINDEX.CREATENUMBERINDEX +DBMS_XMLINDEX.DELETE_TABLE_STATS +DBMS_XMLINDEX.DROPPARAMETER +DBMS_XMLINDEX.GATHER_TABLE_STATS +DBMS_XMLINDEX.GETPARAMETER +DBMS_XMLINDEX.MODIFYPARAMETER +DBMS_XMLINDEX.REGISTERPARAMETER +DBMS_XMLINDEX.SYNCINDEX +DBMS_XMLINDEX0. +DBMS_XMLINDEX0.CREATEDATEINDEX +DBMS_XMLINDEX0.CREATENUMBERINDEX +DBMS_XMLPARSER. +DBMS_XMLPARSER.FREEPARSER +DBMS_XMLPARSER.GETBASEDIR +DBMS_XMLPARSER.GETDOCTYPE +DBMS_XMLPARSER.GETDOCUMENT +DBMS_XMLPARSER.GETERRORLOG +DBMS_XMLPARSER.GETRELEASEVERSION +DBMS_XMLPARSER.GETVALIDATIONMODE +DBMS_XMLPARSER.NEWPARSER +DBMS_XMLPARSER.PARSE +DBMS_XMLPARSER.PARSEBUFFER +DBMS_XMLPARSER.PARSECLOB +DBMS_XMLPARSER.PARSEDTD +DBMS_XMLPARSER.PARSEDTDBUFFER +DBMS_XMLPARSER.PARSEDTDCLOB +DBMS_XMLPARSER.RETAINCDATASECTION +DBMS_XMLPARSER.SETBASEDIR +DBMS_XMLPARSER.SETDOCTYPE +DBMS_XMLPARSER.SETERRORLOG +DBMS_XMLPARSER.SETPRESERVEWHITESPACE +DBMS_XMLPARSER.SETVALIDATIONMODE +DBMS_XMLPARSER.SHOWWARNINGS +DBMS_XMLPARSER.WRITEERRORS +DBMS_XMLQUERY. +DBMS_XMLQUERY.CLEARBINDVALUES +DBMS_XMLQUERY.CLOSECONTEXT +DBMS_XMLQUERY.GETDTD +DBMS_XMLQUERY.GETEXCEPTIONCONTENT +DBMS_XMLQUERY.GETNUMROWSPROCESSED +DBMS_XMLQUERY.GETVERSION +DBMS_XMLQUERY.GETXML +DBMS_XMLQUERY.NEWCONTEXT +DBMS_XMLQUERY.PROPAGATEORIGINALEXCEPTION +DBMS_XMLQUERY.P_GETDTD +DBMS_XMLQUERY.P_GETXML +DBMS_XMLQUERY.P_PROPORIGEXC +DBMS_XMLQUERY.P_SETDATAHEADER +DBMS_XMLQUERY.P_SETENCODINGTAG +DBMS_XMLQUERY.P_SETMETAHEADER +DBMS_XMLQUERY.P_SETRAISEEXCEPTION +DBMS_XMLQUERY.P_SETRAISENOROWSEXC +DBMS_XMLQUERY.P_SETSQLTOXMLNAMEESC +DBMS_XMLQUERY.P_SETSTRICTLEGALXMLCHARCHECK +DBMS_XMLQUERY.P_SETSTYLESHEETHEADER +DBMS_XMLQUERY.P_SETXSLT +DBMS_XMLQUERY.P_USENULLATTRIND +DBMS_XMLQUERY.P_USETYPEFORCOLLELEMTAG +DBMS_XMLQUERY.REMOVEXSLTPARAM +DBMS_XMLQUERY.RESETRESULTSET +DBMS_XMLQUERY.SETBINDVALUE +DBMS_XMLQUERY.SETCOLLIDATTRNAME +DBMS_XMLQUERY.SETDATAHEADER +DBMS_XMLQUERY.SETDATEFORMAT +DBMS_XMLQUERY.SETENCODINGTAG +DBMS_XMLQUERY.SETERRORTAG +DBMS_XMLQUERY.SETMAXROWS +DBMS_XMLQUERY.SETMETAHEADER +DBMS_XMLQUERY.SETRAISEEXCEPTION +DBMS_XMLQUERY.SETRAISENOROWSEXCEPTION +DBMS_XMLQUERY.SETROWIDATTRNAME +DBMS_XMLQUERY.SETROWIDATTRVALUE +DBMS_XMLQUERY.SETROWSETTAG +DBMS_XMLQUERY.SETROWTAG +DBMS_XMLQUERY.SETSKIPROWS +DBMS_XMLQUERY.SETSQLTOXMLNAMEESCAPING +DBMS_XMLQUERY.SETSTRICTLEGALXMLCHARCHECK +DBMS_XMLQUERY.SETSTYLESHEETHEADER +DBMS_XMLQUERY.SETTAGCASE +DBMS_XMLQUERY.SETXSLT +DBMS_XMLQUERY.SETXSLTPARAM +DBMS_XMLQUERY.USENULLATTRIBUTEINDICATOR +DBMS_XMLQUERY.USETYPEFORCOLLELEMTAG +DBMS_XMLSAVE. +DBMS_XMLSAVE.CLEARKEYCOLUMNLIST +DBMS_XMLSAVE.CLEARUPDATECOLUMNLIST +DBMS_XMLSAVE.CLOSECONTEXT +DBMS_XMLSAVE.DELETEXML +DBMS_XMLSAVE.GETEXCEPTIONCONTENT +DBMS_XMLSAVE.INSERTXML +DBMS_XMLSAVE.NEWCONTEXT +DBMS_XMLSAVE.PROPAGATEORIGINALEXCEPTION +DBMS_XMLSAVE.P_PROPAGATEORIGINALEXCEPTION +DBMS_XMLSAVE.P_SETPRESERVEWHITESPACE +DBMS_XMLSAVE.P_SETSQLTOXMLNAMEESC +DBMS_XMLSAVE.P_SETXSLT +DBMS_XMLSAVE.P_USEDBDATES +DBMS_XMLSAVE.REMOVEXSLTPARAM +DBMS_XMLSAVE.SETBATCHSIZE +DBMS_XMLSAVE.SETCOMMITBATCH +DBMS_XMLSAVE.SETDATEFORMAT +DBMS_XMLSAVE.SETIGNORECASE +DBMS_XMLSAVE.SETKEYCOLUMN +DBMS_XMLSAVE.SETPRESERVEWHITESPACE +DBMS_XMLSAVE.SETROWTAG +DBMS_XMLSAVE.SETSQLTOXMLNAMEESCAPING +DBMS_XMLSAVE.SETUPDATECOLUMN +DBMS_XMLSAVE.SETXSLT +DBMS_XMLSAVE.SETXSLTPARAM +DBMS_XMLSAVE.UPDATEXML +DBMS_XMLSAVE.USEDBDATES +DBMS_XMLSCHEMA. +DBMS_XMLSCHEMA.COMPILESCHEMA +DBMS_XMLSCHEMA.CONVERTTODATE +DBMS_XMLSCHEMA.CONVERTTOTS +DBMS_XMLSCHEMA.CONVERTTOTSWITHTZ +DBMS_XMLSCHEMA.COPYEVOLVE +DBMS_XMLSCHEMA.DELETESCHEMA +DBMS_XMLSCHEMA.GENERATEBEAN +DBMS_XMLSCHEMA.GENERATESCHEMA +DBMS_XMLSCHEMA.GENERATESCHEMAS +DBMS_XMLSCHEMA.INPLACEEVOLVE +DBMS_XMLSCHEMA.PURGESCHEMA +DBMS_XMLSCHEMA.REGISTERSCHEMA +DBMS_XMLSCHEMA.REGISTERURI +DBMS_XMLSCHEMA_INT. +DBMS_XMLSCHEMA_INT.ADDDOCID +DBMS_XMLSCHEMA_INT.CHECKUSERDEPENDENTS +DBMS_XMLSCHEMA_INT.COMPILESCHEMA +DBMS_XMLSCHEMA_INT.COPYEVOLVE +DBMS_XMLSCHEMA_INT.CREATENSBXML +DBMS_XMLSCHEMA_INT.DELETESCHEMA +DBMS_XMLSCHEMA_INT.GENERATEBEAN +DBMS_XMLSCHEMA_INT.GENERATESCHEMA +DBMS_XMLSCHEMA_INT.GENERATESCHEMAS +DBMS_XMLSCHEMA_INT.HASDOCID +DBMS_XMLSCHEMA_INT.INPLACEEVOLVE +DBMS_XMLSCHEMA_INT.REGISTERSCHEMA +DBMS_XMLSCHEMA_INT.XDB$OID2INTNAME +DBMS_XMLSTORE. +DBMS_XMLSTORE.CLEARKEYCOLUMNLIST +DBMS_XMLSTORE.CLEARUPDATECOLUMNLIST +DBMS_XMLSTORE.CLOSECONTEXT +DBMS_XMLSTORE.DELETEXML +DBMS_XMLSTORE.INSERTXML +DBMS_XMLSTORE.NEWCONTEXT +DBMS_XMLSTORE.SETKEYCOLUMN +DBMS_XMLSTORE.SETROWTAG +DBMS_XMLSTORE.SETUPDATECOLUMN +DBMS_XMLSTORE.UPDATEXML +DBMS_XMLTRANSLATIONS. +DBMS_XMLTRANSLATIONS.DISABLETRANSLATION +DBMS_XMLTRANSLATIONS.ENABLETRANSLATION +DBMS_XMLTRANSLATIONS.EXTRACTXLIFF +DBMS_XMLTRANSLATIONS.GETBASEDOCUMENT +DBMS_XMLTRANSLATIONS.MERGEXLIFF +DBMS_XMLTRANSLATIONS.SETSOURCELANG +DBMS_XMLTRANSLATIONS.TRANSLATEXML +DBMS_XMLTRANSLATIONS.UPDATETRANSLATION +DBMS_XPLAN. +DBMS_XPLAN.BUILD_PLAN_XML +DBMS_XPLAN.DIFF_PLAN +DBMS_XPLAN.DIFF_PLAN_AWR +DBMS_XPLAN.DIFF_PLAN_CURSOR +DBMS_XPLAN.DIFF_PLAN_OUTLINE +DBMS_XPLAN.DIFF_PLAN_SQL_BASELINE +DBMS_XPLAN.DISPLAY +DBMS_XPLAN.DISPLAY_AWR +DBMS_XPLAN.DISPLAY_CURSOR +DBMS_XPLAN.DISPLAY_PLAN +DBMS_XPLAN.DISPLAY_SQLSET +DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE +DBMS_XPLAN.FORMAT_NUMBER +DBMS_XPLAN.FORMAT_NUMBER2 +DBMS_XPLAN.FORMAT_SIZE +DBMS_XPLAN.FORMAT_SIZE2 +DBMS_XPLAN.FORMAT_TIME_S +DBMS_XPLAN.GET_PLANDIFF_REPORT_XML +DBMS_XPLAN.PREPARE_PLAN_XML_QUERY +DBMS_XPLAN.PREPARE_RECORDS +DBMS_XPLAN.VALIDATE_FORMAT +DBMS_XQUERY. +DBMS_XQUERY.EVAL +DBMS_XQUERYINT. +DBMS_XQUERYINT.BIND +DBMS_XQUERYINT.BINDWITHTYPE +DBMS_XQUERYINT.BINDXML +DBMS_XQUERYINT.CLOSEHDL +DBMS_XQUERYINT.EXEC +DBMS_XQUERYINT.EXECALL +DBMS_XQUERYINT.EXECALLCMN +DBMS_XQUERYINT.EXECALLXCLB +DBMS_XQUERYINT.EXECALLXCLB_EXISTS +DBMS_XQUERYINT.EXECALL_EXISTS +DBMS_XQUERYINT.EXECQUERY +DBMS_XQUERYINT.EXECUTE +DBMS_XQUERYINT.EXECUTECMN +DBMS_XQUERYINT.EXECUTEXCLB +DBMS_XQUERYINT.EXEC_EXISTS +DBMS_XQUERYINT.FETCHALL +DBMS_XQUERYINT.FETCHONE +DBMS_XQUERYINT.GETXQUERYX +DBMS_XQUERYINT.GETXQUERYXXCLB +DBMS_XQUERYINT.PREPARE +DBMS_XQUERYINT.PREPAREXCLB +DBMS_XRWMV. +DBMS_XRWMV.CLEANUP_3GL +DBMS_XRWMV.XPLNMV_3GLA +DBMS_XRWMV.XPLNMV_3GLCA +DBMS_XRWMV.XPLNMV_3GLCT +DBMS_XRWMV.XPLNMV_3GLT +DBMS_XRWMV.XPLNRW_3GLA +DBMS_XRWMV.XPLNRW_3GLCA +DBMS_XRWMV.XPLNRW_3GLCT +DBMS_XRWMV.XPLNRW_3GLT +DBMS_XSLPROCESSOR. +DBMS_XSLPROCESSOR.CLOB2FILE +DBMS_XSLPROCESSOR.CLOB2URL +DBMS_XSLPROCESSOR.FREEPROCESSOR +DBMS_XSLPROCESSOR.FREESTYLESHEET +DBMS_XSLPROCESSOR.NEWPROCESSOR +DBMS_XSLPROCESSOR.NEWSTYLESHEET +DBMS_XSLPROCESSOR.PROCESSXSL +DBMS_XSLPROCESSOR.READ2CLOB +DBMS_XSLPROCESSOR.REMOVEPARAM +DBMS_XSLPROCESSOR.RESETPARAMS +DBMS_XSLPROCESSOR.SELECTNODES +DBMS_XSLPROCESSOR.SELECTSINGLENODE +DBMS_XSLPROCESSOR.SETERRORLOG +DBMS_XSLPROCESSOR.SETPARAM +DBMS_XSLPROCESSOR.SHOWWARNINGS +DBMS_XSLPROCESSOR.TRANSFORMNODE +DBMS_XSLPROCESSOR.URL2CLOB +DBMS_XSLPROCESSOR.VALUEOF +DBMS_XSTREAM_ADM. +DBMS_XSTREAM_ADM.ADD_OUTBOUND +DBMS_XSTREAM_ADM.ADD_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_ADM.ALTER_INBOUND +DBMS_XSTREAM_ADM.ALTER_OUTBOUND +DBMS_XSTREAM_ADM.CREATE_INBOUND +DBMS_XSTREAM_ADM.CREATE_OUTBOUND +DBMS_XSTREAM_ADM.DROP_INBOUND +DBMS_XSTREAM_ADM.DROP_OUTBOUND +DBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM.IS_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM.REMOVE_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_ADM_INTERNAL. +DBMS_XSTREAM_ADM_INTERNAL.GRANT_ADMIN_PRIVILEGE_INT +DBMS_XSTREAM_ADM_INTERNAL.INS_XSERVER +DBMS_XSTREAM_ADM_INTERNAL.REVOKE_ADMIN_PRIVILEGE_INT +DBMS_XSTREAM_ADM_UTL. +DBMS_XSTREAM_ADM_UTL.ADD_XSTREAM_ADMIN_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.APPLY_EXISTS +DBMS_XSTREAM_ADM_UTL.CHECK_SVR_NAME +DBMS_XSTREAM_ADM_UTL.CHECK_SVR_TYPE +DBMS_XSTREAM_ADM_UTL.CLEAN_APPLY_SPILL +DBMS_XSTREAM_ADM_UTL.CONVERT_SCN_TO_POS +DBMS_XSTREAM_ADM_UTL.CREATE_XOUT_CAPTURE +DBMS_XSTREAM_ADM_UTL.DEL_GEN_RULE +DBMS_XSTREAM_ADM_UTL.DEL_SUBSET_RULES +DBMS_XSTREAM_ADM_UTL.DEL_XSERVER +DBMS_XSTREAM_ADM_UTL.DROP_GEN_RULE +DBMS_XSTREAM_ADM_UTL.DROP_OUTBOUND +DBMS_XSTREAM_ADM_UTL.DROP_OUTBOUND_RULES +DBMS_XSTREAM_ADM_UTL.ENABLE_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM_UTL.GET_CAP_N_QUEUE +DBMS_XSTREAM_ADM_UTL.GET_LOCAL_CAPTURE +DBMS_XSTREAM_ADM_UTL.GET_OUTBOUND_SRCDB +DBMS_XSTREAM_ADM_UTL.GET_STREAMS_RULES +DBMS_XSTREAM_ADM_UTL.HAS_TABLE_RULE +DBMS_XSTREAM_ADM_UTL.INS_GEN_OBJ +DBMS_XSTREAM_ADM_UTL.INS_SUBSET_RULES +DBMS_XSTREAM_ADM_UTL.IS_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM_UTL.IS_SYSGEN_OBJ +DBMS_XSTREAM_ADM_UTL.IS_UNCOMMITTED_XOUT +DBMS_XSTREAM_ADM_UTL.NUM_SUBSCRIBERS +DBMS_XSTREAM_ADM_UTL.REMOVE_GEN_RULE +DBMS_XSTREAM_ADM_UTL.REMOVE_XSTREAM_ADMIN_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.SET_APPLY_STARTSCN +DBMS_XSTREAM_ADM_UTL.SET_CAPTURE_STARTSCN +DBMS_XSTREAM_ADM_UTL.SET_OUTBOUND_STARTSCN +DBMS_XSTREAM_ADM_UTL.START_OUTBOUND +DBMS_XSTREAM_ADM_UTL.STOP_OUTBOUND +DBMS_XSTREAM_ADM_UTL.UPD_XSERVER +DBMS_XSTREAM_ADM_UTL.UPD_XSERVER_CAPINFO +DBMS_XSTREAM_ADM_UTL.VALID_SUBSET_RULES +DBMS_XSTREAM_AUTH. +DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH.GRANT_REMOTE_ADMIN_ACCESS +DBMS_XSTREAM_AUTH.REVOKE_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH.REVOKE_REMOTE_ADMIN_ACCESS +DBMS_XSTREAM_GG. +DBMS_XSTREAM_GG.DISABLE_TDUP_WORKSPACE +DBMS_XSTREAM_GG.ENABLE_TDUP_WORKSPACE +DBMS_XSTREAM_GG.IS_FOO_TRIGGER_FIRE_AT_SESSION +DBMS_XSTREAM_GG.IS_TDUP_WORKSPACE_ENABLED +DBMS_XSTREAM_GG.SET_FOO_TRIGGER_SESSION_CONTXT +DBMS_XSTREAM_GG_ADM. +DBMS_XSTREAM_GG_ADM.ADD_OUTBOUND +DBMS_XSTREAM_GG_ADM.CREATE_INBOUND +DBMS_XSTREAM_GG_ADM.CREATE_OUTBOUND +DBMS_XSTREAM_GG_ADM.SET_DML_CONFLICT_HANDLER +DBMS_XSTREAM_GG_ADM.START_OUTBOUND +DBMS_XSTREAM_GG_ADM.STOP_OUTBOUND +DBMS_XSTREAM_UTL_IVK. +DBMS_XSTREAM_UTL_IVK.ADD_OUTBOUND +DBMS_XSTREAM_UTL_IVK.ADD_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_UTL_IVK.ALTER_INBOUND +DBMS_XSTREAM_UTL_IVK.ALTER_OUTBOUND +DBMS_XSTREAM_UTL_IVK.COMMA_TO_TABLE_INT +DBMS_XSTREAM_UTL_IVK.CREATE_INBOUND +DBMS_XSTREAM_UTL_IVK.CREATE_OUTBOUND +DBMS_XSTREAM_UTL_IVK.DROP_INBOUND +DBMS_XS_DATA_SECURITY_EVENTS. +DBMS_XS_DATA_SECURITY_EVENTS.HANDLEPOSTDELETE +DBMS_XS_DATA_SECURITY_EVENTS.HANDLEPOSTUPDATE +DBMS_XS_MTCACHE. +DBMS_XS_MTCACHE.GET_RETENTION_TIME +DBMS_XS_MTCACHE.SECCLS_DELETE +DBMS_XS_MTCACHE.SECCLS_UPDATE +DBMS_XS_MTCACHE.SET_RETENTION_TIME +DBMS_XS_MTCACHE_FFI. +DBMS_XS_MTCACHE_FFI.SECCLS_DELETE +DBMS_XS_MTCACHE_FFI.SECCLS_UPDATE +DBMS_XS_MTCACHE_FFI.SET_RETENTION_TIME +DBMS_XS_PRINCIPALS. +DBMS_XS_PRINCIPALS.CREATE_PASSWORD +DBMS_XS_PRINCIPALS.SET_PASSWORD +DBMS_XS_PRINCIPALS.SET_VERIFIER +DBMS_XS_PRINCIPALS.UPDATE_PASSWORD +DBMS_XS_PRINCIPALS_INT. +DBMS_XS_PRINCIPALS_INT.CHECK_EXISTS_PRINCIPAL +DBMS_XS_PRINCIPALS_INT.CHECK_SECURITY_CREATE +DBMS_XS_PRINCIPALS_INT.CHECK_SECURITY_CREATE_RS +DBMS_XS_PRINCIPALS_INT.CHECK_SECURITY_DELETE +DBMS_XS_PRINCIPALS_INT.CHECK_SECURITY_DELETE_RS +DBMS_XS_PRINCIPALS_INT.CHECK_SECURITY_UPDATE +DBMS_XS_PRINCIPALS_INT.CHECK_SECURITY_UPDATE_RS +DBMS_XS_PRINCIPALS_INT.GENERATE_UID +DBMS_XS_PRINCIPALS_INT.GENERATE_UUID +DBMS_XS_PRINCIPALS_INT.INVALIDATE_PRINCIPAL +DBMS_XS_PRINCIPALS_INT.INVALIDATE_ROLESETS +DBMS_XS_PRINCIPALS_INT.SET_PASSWORD_INTERNAL +DBMS_XS_PRINCIPALS_INT.SET_VERIFIER_INTERNAL +DBMS_XS_PRINCIPAL_EVENTS_INT. +DBMS_XS_PRINCIPAL_EVENTS_INT.HANDLEPOSTCREATE +DBMS_XS_PRINCIPAL_EVENTS_INT.HANDLEPOSTDELETE +DBMS_XS_PRINCIPAL_EVENTS_INT.HANDLEPOSTUPDATE +DBMS_XS_PRINCIPAL_EVENTS_INT.HANDLEPRECREATE +DBMS_XS_PRINCIPAL_EVENTS_INT.HANDLEPREDELETE +DBMS_XS_PRINCIPAL_EVENTS_INT.HANDLEPREUPDATE +DBMS_XS_ROLESET_EVENTS_INT. +DBMS_XS_ROLESET_EVENTS_INT.HANDLEPOSTCREATE +DBMS_XS_ROLESET_EVENTS_INT.HANDLEPRECREATE +DBMS_XS_ROLESET_EVENTS_INT.HANDLEPREDELETE +DBMS_XS_ROLESET_EVENTS_INT.HANDLEPREUPDATE +DBMS_XS_ROLESET_EVENTS_INT.RAISE_ERROR_EVENTS +DBMS_XS_ROLESET_EVENTS_INT.RAISE_ERROR_EXT_EVENTS +DBMS_XS_SECCLASS_EVENTS. +DBMS_XS_SECCLASS_EVENTS.HANDLEPREDELETE +DBMS_XS_SECCLASS_EVENTS.HANDLEPREUPDATE +DBMS_XS_SECCLASS_INT. +DBMS_XS_SECCLASS_INT.DELETE_SEC_CLASS +DBMS_XS_SECCLASS_INT.GET_LEAF_PRIVILEGES +DBMS_XS_SECCLASS_INT_FFI. +DBMS_XS_SECCLASS_INT_FFI.DELETE_SEC_CLASS +DBMS_XS_SECCLASS_INT_FFI.GET_LEAF_PRIVILEGES +DBMS_XS_SESSIONS. +DBMS_XS_SESSIONS.ABORTATTACH_SESSION +DBMS_XS_SESSIONS.ADD_GLOBAL_CALLBACK +DBMS_XS_SESSIONS.ASSIGN_USER +DBMS_XS_SESSIONS.ATTACH_SESSION +DBMS_XS_SESSIONS.CHECK_ROLE +DBMS_XS_SESSIONS.CHECK_SESSION +DBMS_XS_SESSIONS.CREATE_NAMESPACE +DBMS_XS_SESSIONS.CREATE_SESSION +DBMS_XS_SESSIONS.DELETE_ATTRIBUTE +DBMS_XS_SESSIONS.DELETE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS.DELETE_NAMESPACE +DBMS_XS_SESSIONS.DESTROY_SESSION +DBMS_XS_SESSIONS.DETACH_SESSION +DBMS_XS_SESSIONS.DISABLE_ROLE +DBMS_XS_SESSIONS.ENABLE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS.ENABLE_ROLE +DBMS_XS_SESSIONS.GET_ATTRIBUTE +DBMS_XS_SESSIONS.GET_SESSIONID_FROM_COOKIE +DBMS_XS_SESSIONS.GET_SESSION_COOKIE +DBMS_XS_SESSIONS.REAUTH_SESSION +DBMS_XS_SESSIONS.SET_ATTRIBUTE +DBMS_XS_SESSIONS.SET_INACTIVITY_TIMEOUT +DBMS_XS_SESSIONS.SET_NAMESPACE_ACL +DBMS_XS_SESSIONS.SET_NAMESPACE_HANDLER +DBMS_XS_SESSIONS.SET_SESSION_COOKIE +DBMS_XS_SESSIONS.SWITCH_USER +DBMS_XS_SESSIONS_FFI. +DBMS_XS_SESSIONS_FFI.ABORTATTACH_SESSION +DBMS_XS_SESSIONS_FFI.ADD_GLOBAL_CALLBACK +DBMS_XS_SESSIONS_FFI.ASSIGN_USER +DBMS_XS_SESSIONS_FFI.ATTACH_SESSION +DBMS_XS_SESSIONS_FFI.CHECK_ROLE +DBMS_XS_SESSIONS_FFI.CHECK_SESSION +DBMS_XS_SESSIONS_FFI.CREATE_NAMESPACE +DBMS_XS_SESSIONS_FFI.CREATE_SESSION +DBMS_XS_SESSIONS_FFI.DELETE_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.DELETE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS_FFI.DELETE_NAMESPACE +DBMS_XS_SESSIONS_FFI.DESTROY_SESSION +DBMS_XS_SESSIONS_FFI.DETACH_SESSION +DBMS_XS_SESSIONS_FFI.DISABLE_ROLE +DBMS_XS_SESSIONS_FFI.ENABLE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS_FFI.ENABLE_ROLE +DBMS_XS_SESSIONS_FFI.GET_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.GET_SESSIONID_FROM_COOKIE +DBMS_XS_SESSIONS_FFI.GET_SESSION_COOKIE +DBMS_XS_SESSIONS_FFI.REAUTH_SESSION +DBMS_XS_SESSIONS_FFI.SET_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.SET_INACTIVITY_TIMEOUT +DBMS_XS_SESSIONS_FFI.SET_NAMESPACE_ACL +DBMS_XS_SESSIONS_FFI.SET_NAMESPACE_HANDLER +DBMS_XS_SESSIONS_FFI.SET_SESSION_COOKIE +DBMS_XS_SESSIONS_FFI.SWITCH_USER +DBMS_ZHELP. +DBMS_ZHELP.GET_OBJECT_GRANTS +DBMS_ZHELP.GET_SYSPRIV_GRANTS +DBMS_ZHELP_IR. +DBMS_ZHELP_IR.CHECK_SYS_PRIV +DBNAME +DBREPLAY_CALL_COUNTER +DBREPLAY_FILE_ID +DBTIME +DBTIMEPERCALL +DBTIMEPERSEC +DBTIME_IN_WAIT +DBTIME_TOTAL +DBURITYPE.CREATEURI +DBURITYPE.DBURITYPE +DBURITYPE.GETBLOB +DBURITYPE.GETCLOB +DBURITYPE.GETCONTENTTYPE +DBURITYPE.GETEXTERNALURL +DBURITYPE.GETURL +DBURITYPE.GETXML +DBUSER_OWNER +DBVERSION +DB_BLOCK_CHANGE +DB_BLOCK_CHANGES_DELTA +DB_BLOCK_CHANGES_TOTAL +DB_BLOCK_GETS +DB_CHARACTER_SET +DB_CREATED +DB_DATA +DB_DOMAIN +DB_ID +DB_LINK +DB_LINK_OWNER +DB_NAME +DB_PREFERENCES. +DB_PREFERENCES.UPDATEGLOBALPREFS +DB_PREFERENCES.UPDATEPREFS +DB_STATUS +DB_TXN_SCN +DB_UNIQUE_NAME +DB_USER +DB_USERNAME +DB_VERSION +DB_VERSION_TIME +DDL_ATTRIBUTE +DDL_HANDLER +DDL_NUM +DDL_TEXT +DDL_TXT +DEBUGINFO +DECLARATIVE_TYPE +DECRYPT. +DECRYPTBYTES. +DEDUPLICATION +DEF$_PROPAGATOR_TRIG. +DEFAULT +DEFAULTED +DEFAULTSTYLE757_TAB$XD. +DEFAULT_ACTION +DEFAULT_ANYDATA_VALUE +DEFAULT_DIRECTORY +DEFAULT_DIRECTORY_NAME +DEFAULT_DIRECTORY_OWNER +DEFAULT_HIERARCHY_NAME +DEFAULT_LENGTH +DEFAULT_PARM_VALUE +DEFAULT_ROLE +DEFAULT_TABLESPACE +DEFAULT_VALUE +DEFAULT_WEIGHT +DEFERRABLE +DEFERRED +DEFERRED_DROP +DEFERRED_WINDOW_NAME +DEFINE_VARS +DEF_BUFFER_POOL +DEF_CACHE +DEF_CELL_FLASH_CACHE +DEF_CHUNK +DEF_COMPRESS +DEF_COMPRESSION +DEF_COMPRESS_FOR +DEF_CPU_COST +DEF_DEDUPLICATE +DEF_ENCRYPT +DEF_FLASH_CACHE +DEF_FREELISTS +DEF_FREELIST_GROUPS +DEF_INITIAL_EXTENT +DEF_INI_TRANS +DEF_IN_ROW +DEF_IO_COST +DEF_LOGGING +DEF_MAX_EXTENTS +DEF_MAX_SIZE +DEF_MAX_TRANS +DEF_MINRET +DEF_MIN_EXTENTS +DEF_NET_COST +DEF_NEXT_EXTENT +DEF_PARAMETERS +DEF_PCTVERSION +DEF_PCT_FREE +DEF_PCT_INCREASE +DEF_PCT_USED +DEF_RETENTION +DEF_SECUREFILE +DEF_SEGMENT_CREATION +DEF_SELECTIVITY +DEF_SUBPARTITION_COUNT +DEF_TABLESPACE_NAME +DEF_TAB_COMPRESSION +DEGREE +DEL +DELAY_MINS +DELETABLE +DELETED +DELETED_ROWS +DELETES +DELETE_COUNT +DELETE_FREQ +DELETE_RULE +DELIVERED_COMMITTED_TXN +DELIVERED_TXN +DELIVERY_MODE +DELTA +DELTASCN_BASE +DELTASCN_WRAP +DELTAUPD_TIME +DELTA_ALLOC +DELTA_COUNT +DELTA_DEALLOC +DELTA_INTERCONNECT_IO_BYTES +DELTA_READ_IO_BYTES +DELTA_READ_IO_REQUESTS +DELTA_TIME +DELTA_WRITE_IO_BYTES +DELTA_WRITE_IO_REQUESTS +DENSITY +DEPENDENCIES +DEPENDENCY +DEPENDENCY_NAME +DEPENDENCY_TYPE +DEPENDENT_SCN +DEPENDENT_XID +DEPEND_COUNT +DEPEND_ID +DEPEND_ON +DEPTH +DEP_COMMITSCN +DEP_COMMIT_POSITION +DEP_SCHEMA_OID +DEP_SCHEMA_OWNER +DEP_SCHEMA_URL +DEP_TRANSACTION_ID +DEP_TXN_CONF_SQL_ID +DEP_TXN_NAME +DEP_XID +DEP_XIDSLT +DEP_XIDSQN +DEP_XIDUSN +DEQLOG_PROCESSING_CPU_TIME +DEQLOG_PROCESSING_ELAPSED_TIME +DEQLOG_ROWS_PROCESSED +DEQUEUED_MESSAGE_CREATE_TIME +DEQUEUED_MESSAGE_NUMBER +DEQUEUED_MSGS +DEQUEUED_MSG_LATENCY +DEQUEUED_POSITION +DEQUEUE_CPU_TIME +DEQUEUE_DISK_DELETES +DEQUEUE_DISK_LOCKS +DEQUEUE_ENABLED +DEQUEUE_INDEX_BLOCKS_FREED +DEQUEUE_MEMORY_LOCKS +DEQUEUE_TIME +DEQUEUE_TRANSACTIONS +DEREF_NO_REWRITE +DERIVED_FROM_ONAME +DERIVED_FROM_SNAME +DESCEND +DESCR +DESCRIBE_MISMATCH +DESCRIPTION +DESCRIPTION104_TAB$XD. +DESCRIPTION94_TAB$XD. +DESTINATION +DESTINATION_COMPONENT_DB +DESTINATION_COMPONENT_ID +DESTINATION_COMPONENT_NAME +DESTINATION_COMPONENT_TYPE +DESTINATION_DATABASE_NAME +DESTINATION_DBLINK +DESTINATION_END_TIME +DESTINATION_INSTANCE_ID +DESTINATION_INSTANCE_NAME +DESTINATION_INST_START_TIME +DESTINATION_NAME +DESTINATION_OWNER +DESTINATION_QUEUE +DESTINATION_QUEUE_NAME +DESTINATION_QUEUE_OWNER +DESTINATION_QUEUE_PUBLISHER +DESTINATION_SCHEMA_NAME +DESTINATION_SERIAL# +DESTINATION_SID +DESTINATION_START_TIME +DESTINATION_STATE +DESTINATION_STMT +DESTINATION_TYPE +DESTINATION_USER_NAME +DEST_ID +DEST_NAME +DES_ENCRYPTED_PASSWORD. +DETACHED +DETAIL +DETAILED_DESCRIPTION +DETAILED_LOCATION +DETAILOBJ1_COLUMN +DETAILOBJ1_OWNER +DETAILOBJ1_RELATION +DETAILOBJ2_COLUMN +DETAILOBJ2_OWNER +DETAILOBJ2_RELATION +DETAILOBJ_ALIAS +DETAILOBJ_COLUMN +DETAILOBJ_NAME +DETAILOBJ_OWNER +DETAILOBJ_PCT +DETAILOBJ_TYPE +DETAIL_ALIAS +DETAIL_OWNER +DETAIL_PARTITION_NAME +DETAIL_PARTITION_POSITION +DETAIL_RELATION +DETAIL_SUBPARTITION_NAME +DETAIL_SUBPARTITION_POSITION +DETAIL_TYPE +DETECTED_USAGES +DETERMINISTIC +DEVELOPMENT_SERVICE_HOME. +DEVELOPMENT_SERVICE_HOME_LOGIN. +DEVELOPMENT_SERVICE_SIGNUP. +DEVICE_NAME +DEVICE_TYPE +DFLAG +DFO_NUMBER +DF_CHECKPOINT_CHANGE# +DF_CKP_MOD_TIME +DF_COUNT +DF_CREATION_CHANGE# +DF_FILE# +DF_RESETLOGS_CHANGE# +DF_TABLESPACE +DGNAME +DIANA. +DIANA.AS_ALTER +DIANA.AS_ALTERS +DIANA.AS_ALTS +DIANA.AS_ALTTYPS +DIANA.AS_APPLY +DIANA.AS_CHOIC +DIANA.AS_COMP_ +DIANA.AS_DECL1 +DIANA.AS_DECL2 +DIANA.AS_DSCRM +DIANA.AS_DSCRT +DIANA.AS_EXP +DIANA.AS_FROM +DIANA.AS_GROUP +DIANA.AS_HIDDEN +DIANA.AS_ID +DIANA.AS_INTO_ +DIANA.AS_ITEM +DIANA.AS_LIST +DIANA.AS_NAME +DIANA.AS_ORDER +DIANA.AS_PARMS +DIANA.AS_PRAGM +DIANA.AS_P_ +DIANA.AS_P_ASS +DIANA.AS_RELIES_ON +DIANA.AS_RESULTS +DIANA.AS_SET_C +DIANA.AS_STM +DIANA.AS_USING_ +DIANA.A_ACTUAL +DIANA.A_AGENT +DIANA.A_AGENT_INDEX +DIANA.A_AGENT_NAME +DIANA.A_ALIGNM +DIANA.A_ALTERACT +DIANA.A_AUTHID +DIANA.A_BEGCOL +DIANA.A_BEGLIN +DIANA.A_BINARY +DIANA.A_BIND +DIANA.A_BITFLAGS +DIANA.A_BLOCK_ +DIANA.A_CALL +DIANA.A_CHARSET +DIANA.A_CLUSTE +DIANA.A_CONNEC +DIANA.A_CONSTD +DIANA.A_CONSTT +DIANA.A_CONTEX +DIANA.A_CS +DIANA.A_D_ +DIANA.A_D_CHAR +DIANA.A_D_R_ +DIANA.A_D_R_VO +DIANA.A_ENDCOL +DIANA.A_ENDLIN +DIANA.A_EXCEPT +DIANA.A_EXP +DIANA.A_EXP1 +DIANA.A_EXP2 +DIANA.A_EXP_VO +DIANA.A_EXTERNAL +DIANA.A_EXTERNAL_CLASS +DIANA.A_EXT_TY +DIANA.A_FILE +DIANA.A_FLAGS +DIANA.A_FORM_D +DIANA.A_HANDLE +DIANA.A_HAVING +DIANA.A_HEADER +DIANA.A_ID +DIANA.A_IDENTIFIER +DIANA.A_IDENTITY +DIANA.A_INDICA +DIANA.A_ITERAT +DIANA.A_KIND +DIANA.A_LANG +DIANA.A_LIB +DIANA.A_LIBAGENT_NAME +DIANA.A_LIMIT +DIANA.A_MEMBER +DIANA.A_METH_FLAGS +DIANA.A_NAME +DIANA.A_NAME_V +DIANA.A_NOT_NU +DIANA.A_NUM_INH_ATTR +DIANA.A_OBJECT +DIANA.A_OPAQUE_SIZE +DIANA.A_OPAQUE_USELIB +DIANA.A_ORIGINAL +DIANA.A_PACKAG +DIANA.A_PARALLEL_SPEC +DIANA.A_PARTITIONING +DIANA.A_PARTN +DIANA.A_PERCENT +DIANA.A_P_IFC +DIANA.A_RANGE +DIANA.A_REFIN +DIANA.A_RTNING +DIANA.A_SAMPLE +DIANA.A_SCHEMA +DIANA.A_SECURITY +DIANA.A_SPACE +DIANA.A_STM +DIANA.A_STM_STRING +DIANA.A_STREAMING +DIANA.A_STYLE +DIANA.A_SUBPRO +DIANA.A_SUBUNI +DIANA.A_SUPERTYPE +DIANA.A_TFLAG +DIANA.A_TRANS +DIANA.A_TYPE_BODY +DIANA.A_TYPE_R +DIANA.A_TYPE_S +DIANA.A_UNIT_B +DIANA.A_UNUSED +DIANA.A_UP +DIANA.A_WHERE +DIANA.C_ENTRY_ +DIANA.C_ENTRY_PT +DIANA.C_FIXUP +DIANA.C_FRAME_ +DIANA.C_LABEL +DIANA.C_OFFSET +DIANA.C_VAR +DIANA.C_VT_INDEX +DIANA.L_DEFAUL +DIANA.L_INDREP +DIANA.L_NUMREP +DIANA.L_Q_HINT +DIANA.L_RESTRICT_REFERENCES +DIANA.L_SYMREP +DIANA.L_TYPENAME +DIANA.SS_BINDS +DIANA.SS_BUCKE +DIANA.SS_EXLST +DIANA.SS_FUNCTIONS +DIANA.SS_INTO +DIANA.SS_LOCALS +DIANA.SS_PLSCOPE +DIANA.SS_PRAGM_L +DIANA.SS_SQL +DIANA.SS_TABLES +DIANA.SS_VTABLE +DIANA.S_ADDRES +DIANA.S_ADEFN +DIANA.S_BASE_T +DIANA.S_BLKFLG +DIANA.S_BLOCK +DIANA.S_BODY +DIANA.S_CHARSET_EXPR +DIANA.S_CHARSET_FORM +DIANA.S_CHARSET_VALUE +DIANA.S_CMP_TY +DIANA.S_COMP_S +DIANA.S_CONSTR +DIANA.S_CURRENT_OF +DIANA.S_DECL +DIANA.S_DEFN_PRIVATE +DIANA.S_DEP_NUM +DIANA.S_DISCRI +DIANA.S_EXCEPT +DIANA.S_EXP_TY +DIANA.S_FG_POS +DIANA.S_FG_REFS +DIANA.S_FG_SIG +DIANA.S_FIRST +DIANA.S_FLAGS +DIANA.S_FRAME +DIANA.S_INDCOL +DIANA.S_INIT_E +DIANA.S_INTERF +DIANA.S_INTRO_VERSION +DIANA.S_IN_OUT +DIANA.S_ITEMS +DIANA.S_LAYER +DIANA.S_LENGTH_SEMANTICS +DIANA.S_LIB_FLAGS +DIANA.S_LOCATI +DIANA.S_NAME +DIANA.S_NORMARGLIST +DIANA.S_NOT_NU +DIANA.S_OBJN +DIANA.S_OBJ_DE +DIANA.S_OBJ_TY +DIANA.S_OPERAT +DIANA.S_PACKIN +DIANA.S_PLSC_SIG +DIANA.S_POS +DIANA.S_RECORD +DIANA.S_REP +DIANA.S_SCOPE +DIANA.S_SIZE +DIANA.S_SPEC +DIANA.S_STM +DIANA.S_STMT_FLAGS +DIANA.S_STUB +DIANA.S_TYP +DIANA.S_T_SPEC +DIANA.S_T_STRU +DIANA.S_VALUE +DIANA.S_VTFLAGS +DICT +DICTIONARY +DICTIONARY_BEGIN +DICTIONARY_END +DICTIONARY_OBJ_NAME. +DICTIONARY_OBJ_NAME_LIST. +DICTIONARY_OBJ_OWNER. +DICTIONARY_OBJ_OWNER_LIST. +DICTIONARY_OBJ_TYPE. +DICTIONARY_SCN +DICT_BEGIN +DICT_COLUMNS +DICT_END +DIFFERENT_LONG_LENGTH +DIFF_CALL_DURN +DIMENSION_NAME +DIMENSION_TYPE +DIM_KEY_ID +DIRECT +DIRECTIVE_ID +DIRECTIVE_NAME +DIRECTORY +DIRECTORY_NAME +DIRECTORY_OWNER +DIRECTORY_PATH +DIRECT_LOAD_FREQ +DIRECT_LOAD_ROWS +DIRECT_WRITES +DIRECT_WRITES_DELTA +DIRECT_WRITES_TOTAL +DIRNAME +DIRTY +DIRTY_BUFFERS +DIRTY_BUFFERS_INSPECTED +DIRTY_LIMIT +DIR_PATH +DIR_PATH_SHARED +DISABLED_BY_CLASS_NAME +DISABLED_BY_CLASS_TARGET_NS +DISABLE_CHANGE# +DISABLE_TIME +DISCRETE_BYTES_PER_SECOND +DISK_FILTER_RATIO +DISK_NUMBER +DISK_READS +DISK_READS_DELTA +DISK_READS_TOTAL +DISK_READ_RESULTS +DISK_WRITES +DISPATCHER +DISPATCHERS +DISPLAY_VALUE +DISP_TYPE +DISTINCTFLAG +DISTINCT_KEYS +DISTRIBUTED +DISTRIBUTION +DIUTIL. +DIUTIL.ATTRIBUTE_USE_STATISTICS +DIUTIL.BOOL_TO_INT +DIUTIL.GET_D +DIUTIL.GET_DIANA +DIUTIL.INT_TO_BOOL +DIUTIL.NODE_USE_STATISTICS +DIUTIL.SUBPTXT +DIVERGENCE_TYPE +DJANGO_ADMIN_LOG_TR. +DJANGO_CONTENT_TYPE_TR. +DJANGO_SITE_TR. +DLM_CONFLICTS +DLM_INVALIDATIONS +DLM_INVALIDATION_REQUESTS +DLM_LOCK_REQUESTS +DLM_PIN_RELEASES +DLM_PIN_REQUESTS +DLM_RELEASES +DLM_REQUESTS +DMBANIMP.DMBANCLOSESTUB +DMBANIMP.DMBANFETCHSTUB +DMBANIMP.DMBANPREPARESTUB +DMBANIMP.DMBANSTARTSTUB +DMBANIMP.ODCITABLECLOSE +DMBANIMP.ODCITABLEFETCH +DMBANIMP.ODCITABLEPREPARE +DMBANIMP.ODCITABLESTART +DMBAPIMP.DMBAPCLOSESTUB +DMBAPIMP.DMBAPFETCHSTUB +DMBAPIMP.DMBAPPREPARESTUB +DMBAPIMP.DMBAPSTARTSTUB +DMBAPIMP.ODCITABLECLOSE +DMBAPIMP.ODCITABLEFETCH +DMBAPIMP.ODCITABLEPREPARE +DMBAPIMP.ODCITABLESTART +DMBATIMP.DMBATCLOSESTUB +DMBATIMP.DMBATFETCHSTUB +DMBATIMP.DMBATPREPARESTUB +DMBATIMP.DMBATSTARTSTUB +DMBATIMP.ODCITABLECLOSE +DMBATIMP.ODCITABLEFETCH +DMBATIMP.ODCITABLEPREPARE +DMBATIMP.ODCITABLESTART +DMBCNIMP.DMBCNCLOSESTUB +DMBCNIMP.DMBCNFETCHSTUB +DMBCNIMP.DMBCNSTARTSTUB +DMBCNIMP.ODCITABLECLOSE +DMBCNIMP.ODCITABLEFETCH +DMBCNIMP.ODCITABLESTART +DMBMNIMP.DMBMNCLOSESTUB +DMBMNIMP.DMBMNFETCHSTUB +DMBMNIMP.DMBMNPREPARESTUB +DMBMNIMP.DMBMNSTARTSTUB +DMBMNIMP.ODCITABLECLOSE +DMBMNIMP.ODCITABLEFETCH +DMBMNIMP.ODCITABLEPREPARE +DMBMNIMP.ODCITABLESTART +DMBMPIMP.DMBMPCLOSESTUB +DMBMPIMP.DMBMPFETCHSTUB +DMBMPIMP.DMBMPPREPARESTUB +DMBMPIMP.DMBMPSTARTSTUB +DMBMPIMP.ODCITABLECLOSE +DMBMPIMP.ODCITABLEFETCH +DMBMPIMP.ODCITABLEPREPARE +DMBMPIMP.ODCITABLESTART +DMBMTIMP.DMBMTCLOSESTUB +DMBMTIMP.DMBMTFETCHSTUB +DMBMTIMP.DMBMTPREPARESTUB +DMBMTIMP.DMBMTSTARTSTUB +DMBMTIMP.ODCITABLECLOSE +DMBMTIMP.ODCITABLEFETCH +DMBMTIMP.ODCITABLEPREPARE +DMBMTIMP.ODCITABLESTART +DMCLAIMP.DMCLACLOSESTUB +DMCLAIMP.DMCLAFETCHSTUB +DMCLAIMP.DMCLASTARTSTUB +DMCLAIMP.ODCITABLECLOSE +DMCLAIMP.ODCITABLEFETCH +DMCLAIMP.ODCITABLESTART +DMCLBIMP.DMCLBCLOSESTUB +DMCLBIMP.DMCLBFETCHSTUB +DMCLBIMP.DMCLBSTARTSTUB +DMCLBIMP.ODCITABLECLOSE +DMCLBIMP.ODCITABLEFETCH +DMCLBIMP.ODCITABLESTART +DMGLMBIMP.DMGLMBPREPARESTUB +DMGLMBIMP.DMGLMBSTARTSTUB +DMGLMBIMP.ODCITABLECLOSE +DMGLMBIMP.ODCITABLEFETCH +DMGLMBIMP.ODCITABLEPREPARE +DMGLMBIMP.ODCITABLESTART +DMLOPERATION +DML_CONDITION +DML_UPDATE +DMMODBIMP.DMMODBCLOSESTUB +DMMODBIMP.DMMODBFETCHSTUB +DMMODBIMP.DMMODBSTARTSTUB +DMMODBIMP.ODCITABLECLOSE +DMMODBIMP.ODCITABLEFETCH +DMMODBIMP.ODCITABLESTART +DMNMFBIMP.DMNMFBCLOSESTUB +DMNMFBIMP.DMNMFBFETCHSTUB +DMNMFBIMP.DMNMFBSTARTSTUB +DMNMFBIMP.ODCITABLECLOSE +DMNMFBIMP.ODCITABLEFETCH +DMNMFBIMP.ODCITABLESTART +DMP_SEC. +DMP_SEC.ADD_MODEL_TABLE +DMP_SEC.COPY_MODEL_SUBORDINATES +DMP_SEC.CREATE_COST_MATRIX_MODEL_TABLE +DMP_SEC.CREATE_EMPTY_MODEL +DMP_SEC.DROP_MODEL_TABLES +DMP_SEC.DROP_TABLE +DMP_SEC.GET_ALGORITHM_NAME +DMP_SEC.GET_ASSOCIATION_RULES +DMP_SEC.GET_FREQUENT_ITEMSETS +DMP_SEC.GET_FUNCTION_NAME +DMP_SEC.GET_MODEL_COST_MATRIX +DMP_SEC.GET_MODEL_DETAILS_ABN +DMP_SEC.GET_MODEL_DETAILS_AI +DMP_SEC.GET_MODEL_DETAILS_GLM +DMP_SEC.GET_MODEL_DETAILS_GLOBAL +DMP_SEC.GET_MODEL_DETAILS_KM +DMP_SEC.GET_MODEL_DETAILS_NB +DMP_SEC.GET_MODEL_DETAILS_NMF +DMP_SEC.GET_MODEL_DETAILS_OC +DMP_SEC.GET_MODEL_DETAILS_SVM +DMP_SEC.GET_MODEL_DETAILS_TREE_XML +DMP_SEC.GET_MODEL_TABLE +DMP_SEC.GET_MODEL_TABLES +DMP_SEC.GET_MODEL_TRANSFORMATIONS +DMP_SEC.LOAD_MODEL +DMP_SEC.MODEL_EXISTS +DMP_SEC.RECKON_TABLE_SIZE +DMP_SYS. +DMP_SYS.ADD_SETTING +DMP_SYS.ADD_SETTING_TO_NT +DMP_SYS.CALCULATE_MODEL_SIZE +DMP_SYS.CREATE_MODEL_TABLES_LIST +DMP_SYS.CREATE_NEW_MODEL_TABLE_NAME +DMP_SYS.CREATE_NEW_TEMP_MODEL_NAME +DMP_SYS.CREATE_NEW_TEMP_TABLE_NAME +DMP_SYS.DOWNGRADE_MODELS +DMP_SYS.DROP_MODEL +DMP_SYS.DUMP_MODEL_REC +DMP_SYS.DUMP_TRACE +DMP_SYS.DUMP_VARCHAR2A +DMP_SYS.DUMP_VARCHAR2S +DMP_SYS.LOCK_MODEL +DMP_SYS.PERSIST_MODEL +DMP_SYS.PERSIST_XFORM +DMP_SYS.RELEASE_MODEL +DMP_SYS.REM_SETTING +DMP_SYS.UPGRADE_MODELS +DMP_SYS.VALIDATE_MODEL_NAME +DMP_SYS.VERIFY_TABLE_EXISTENCE +DMP_SYS.XFORM_EXP +DMSVMAIMP.DMSVMACLOSESTUB +DMSVMAIMP.DMSVMAFETCHSTUB +DMSVMAIMP.DMSVMASTARTSTUB +DMSVMAIMP.ODCITABLECLOSE +DMSVMAIMP.ODCITABLEFETCH +DMSVMAIMP.ODCITABLESTART +DMSVMBIMP.DMSVMBCLOSESTUB +DMSVMBIMP.DMSVMBFETCHSTUB +DMSVMBIMP.DMSVMBSTARTSTUB +DMSVMBIMP.ODCITABLECLOSE +DMSVMBIMP.ODCITABLEFETCH +DMSVMBIMP.ODCITABLESTART +DM_CL_APPLY. +DM_CL_BUILD. +DM_CL_CUR. +DM_FMTLIB. +DM_FMTLIB.MGMT_DM_GEN_AC +DM_FMTLIB.MGMT_DM_GEN_AC_FH +DM_FMTLIB.MGMT_DM_GEN_AC_FS +DM_FMTLIB.MGMT_DM_GEN_ANYC +DM_FMTLIB.MGMT_DM_GEN_ANYC_FH +DM_FMTLIB.MGMT_DM_GEN_ANYC_FS +DM_FMTLIB.MGMT_DM_GEN_CN_SIN +DM_FMTLIB.MGMT_DM_GEN_CN_SIN_FH +DM_FMTLIB.MGMT_DM_GEN_CN_SIN_FS +DM_FMTLIB.MGMT_DM_GEN_DINC +DM_FMTLIB.MGMT_DM_GEN_DINC_FH +DM_FMTLIB.MGMT_DM_GEN_DINC_FS +DM_FMTLIB.MGMT_DM_GEN_DISC +DM_FMTLIB.MGMT_DM_GEN_DISC_FH +DM_FMTLIB.MGMT_DM_GEN_DISC_FS +DM_FMTLIB.MGMT_DM_GEN_ISBN10 +DM_FMTLIB.MGMT_DM_GEN_ISBN10_FH +DM_FMTLIB.MGMT_DM_GEN_ISBN13 +DM_FMTLIB.MGMT_DM_GEN_ISBN13_FH +DM_FMTLIB.MGMT_DM_GEN_MC +DM_FMTLIB.MGMT_DM_GEN_MC_FH +DM_FMTLIB.MGMT_DM_GEN_MC_FS +DM_FMTLIB.MGMT_DM_GEN_PH_CANADA +DM_FMTLIB.MGMT_DM_GEN_PH_CANADA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_NA +DM_FMTLIB.MGMT_DM_GEN_PH_NA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA +DM_FMTLIB.MGMT_DM_GEN_PH_USA_AL +DM_FMTLIB.MGMT_DM_GEN_PH_USA_AL_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_AR +DM_FMTLIB.MGMT_DM_GEN_PH_USA_AR_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_AZ +DM_FMTLIB.MGMT_DM_GEN_PH_USA_AZ_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_CA +DM_FMTLIB.MGMT_DM_GEN_PH_USA_CA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_CO +DM_FMTLIB.MGMT_DM_GEN_PH_USA_CO_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_CT +DM_FMTLIB.MGMT_DM_GEN_PH_USA_CT_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_DC +DM_FMTLIB.MGMT_DM_GEN_PH_USA_DC_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_DE +DM_FMTLIB.MGMT_DM_GEN_PH_USA_DE_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_FL +DM_FMTLIB.MGMT_DM_GEN_PH_USA_FL_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_GA +DM_FMTLIB.MGMT_DM_GEN_PH_USA_GA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_HI +DM_FMTLIB.MGMT_DM_GEN_PH_USA_HI_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_IA +DM_FMTLIB.MGMT_DM_GEN_PH_USA_IA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_ID +DM_FMTLIB.MGMT_DM_GEN_PH_USA_ID_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_IL +DM_FMTLIB.MGMT_DM_GEN_PH_USA_IL_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_IN +DM_FMTLIB.MGMT_DM_GEN_PH_USA_IN_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_KS +DM_FMTLIB.MGMT_DM_GEN_PH_USA_KS_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_KY +DM_FMTLIB.MGMT_DM_GEN_PH_USA_KY_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_LA +DM_FMTLIB.MGMT_DM_GEN_PH_USA_LA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MA +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MD +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MD_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_ME +DM_FMTLIB.MGMT_DM_GEN_PH_USA_ME_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MI +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MI_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MN +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MN_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MO +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MO_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MS +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MS_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MT +DM_FMTLIB.MGMT_DM_GEN_PH_USA_MT_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NC +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NC_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_ND +DM_FMTLIB.MGMT_DM_GEN_PH_USA_ND_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NE +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NE_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NH_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NJ +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NJ_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NM +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NM_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NV +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NV_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NY +DM_FMTLIB.MGMT_DM_GEN_PH_USA_NY_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_OH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_OH_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_OK +DM_FMTLIB.MGMT_DM_GEN_PH_USA_OK_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_OR +DM_FMTLIB.MGMT_DM_GEN_PH_USA_OR_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_PA +DM_FMTLIB.MGMT_DM_GEN_PH_USA_PA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_RI +DM_FMTLIB.MGMT_DM_GEN_PH_USA_RI_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_SC +DM_FMTLIB.MGMT_DM_GEN_PH_USA_SC_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_SD +DM_FMTLIB.MGMT_DM_GEN_PH_USA_SD_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_TN +DM_FMTLIB.MGMT_DM_GEN_PH_USA_TN_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_TX +DM_FMTLIB.MGMT_DM_GEN_PH_USA_TX_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_UT +DM_FMTLIB.MGMT_DM_GEN_PH_USA_UT_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_VT +DM_FMTLIB.MGMT_DM_GEN_PH_USA_VT_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_WA +DM_FMTLIB.MGMT_DM_GEN_PH_USA_WA_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_WI +DM_FMTLIB.MGMT_DM_GEN_PH_USA_WI_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_WV +DM_FMTLIB.MGMT_DM_GEN_PH_USA_WV_FH +DM_FMTLIB.MGMT_DM_GEN_PH_USA_WY +DM_FMTLIB.MGMT_DM_GEN_PH_USA_WY_FH +DM_FMTLIB.MGMT_DM_GEN_SSN +DM_FMTLIB.MGMT_DM_GEN_SSN_FH +DM_FMTLIB.MGMT_DM_GEN_UK_NIN_FH +DM_FMTLIB.MGMT_DM_GEN_UPC +DM_FMTLIB.MGMT_DM_GEN_UPC_FH +DM_FMTLIB.MGMT_DM_GEN_VC +DM_FMTLIB.MGMT_DM_GEN_VC_FH +DM_FMTLIB.MGMT_DM_GEN_VC_FS +DM_GLM_BUILD. +DM_GLM_CUR. +DM_MODB_CUR. +DM_MOD_BUILD. +DM_NMF_BUILD. +DM_NMF_CUR. +DM_QGEN. +DM_QGEN.CI_GEN +DM_QGEN.CI_GEN_SCHEMA +DM_QGEN.CLOB_LITERAL +DM_QGEN.LS_APPEND +DM_QGEN.LS_DUMP +DM_QGEN.LS_PREPEND +DM_QGEN.TO_LITERAL +DM_SVM_APPLY. +DM_SVM_BUILD. +DM_SVM_CUR. +DM_XFORM. +DM_XFORM.ADAPTOR_AB +DM_XFORM.ADAPTOR_AR +DM_XFORM.ADAPTOR_AR_XNAL +DM_XFORM.ADAPTOR_OC +DM_XFORM.GET_COLUMNS +DOMAIN_INDEX_FILTER +DOMAIN_INDEX_NO_SORT +DOMAIN_INDEX_SORT +DOMAIN_NAME +DOMIDX_MANAGEMENT +DOMIDX_OPSTATUS +DOMIDX_STATUS +DONE_BLOCK_NUM +DOP +DOWNSTREAM_COMP_ID +DQ_TOTALQ +DRIACC. +DRIACC.CAN +DRIACC.CAN_EXECUTE +DRIACC.SPLIT_SPEC +DRIACC.UD_ACCESS +DRIACC.USER_ACCESS +DRIACC.USER_IN_ROLE +DRIACC.VERIFY_COLSPEC +DRIACC.VERIFY_PROCEDURE +DRICON. +DRICON.EXIST_TAB +DRICON.GET_DATA_TYPE +DRICON.GET_PRIMARY_KEY +DRICON.GET_TYPE_DATA_TYPE +DRICON.SET_DATATYPE_OBJ +DRICON.SET_STORE_OBJ +DRICON.VALIDATE_CDI +DRICON.VALIDATE_META_COLUMN +DRICON.VALIDATE_TAB +DRICON.VALIDATE_TEXT_COLUMN +DRIDISP. +DRIDISP.EXECTRUST +DRIDISP.EXECTRUST_RET +DRIDISP.EXECTRUST_RET1 +DRIDML. +DRIDML.CLEANDELETE +DRIDML.CLEARONLINEPENDING +DRIDML.DELETEPENDING +DRIDML.DELETEPENDINGARR +DRIDML.DELETE_DUP_WAITING +DRIDML.DEREGISTER +DRIDML.EXCHANGEPENDING +DRIDML.FETCH_WAITING_CUR +DRIDML.HASPENDING +DRIDML.INSERT_PENDING +DRIDML.LOCK_AUTOSYNC +DRIDML.LOCK_AUTOSYNC_RET +DRIDML.LOCK_DML +DRIDML.LOCK_DML_ALL_PART +DRIDML.LOCK_DML_RET +DRIDML.OPEN_WAITING_CUR +DRIDML.POPULATEPENDINGROWID +DRIDML.SETLOCKFAILED +DRIDML.UNLOCK_AUTOSYNC +DRIDML.UNLOCK_DML +DRIDML.UNLOCK_DML_ALL_PART +DRIDOC. +DRIDOC.HIGHLIGHT_ADD +DRIDOC.TEXT_ADD +DRIDOC.TEXT_END +DRIDOC.TEXT_NEW +DRIDOC.THEME_ADD +DRIDOC.TOKEN_ADD +DRIENT. +DRIENT.CHKEXTPOL +DRIENT.COMPILE +DRIENTL. +DRIENTL.ADD_DICT_ENTRY +DRIENTL.CHKDUPDICT +DRIENTL.CLOSE_DICT +DRIENTL.DROP_DICT +DRIENTL.PREP_DICT +DRIERR. +DRIERR.ADDODCIWARNING +DRIERR.RECORDINDEXERROR +DRIERR.RECORDINDEXERRORID +DRIEXP. +DRIEXP.GET_META_DATA +DRIFEAT. +DRIFEAT.DR$FEATURE_TRACK +DRIFEAT.DR$IDX_TRACK +DRIFEAT.DR$OPR_TRACK +DRIFEAT.DR$PAC_TRACK +DRIG. +DRIIMP. +DRIIMP.ADD_CDICOL +DRIIMP.ADD_PENDING +DRIIMP.CREATE_INDEX +DRIIMP.CREATE_PARTITION +DRIIMP.SET_OBJECT +DRIIMP.SET_SUB_VALUE +DRIIMP.SET_VALUE +DRIIXS. +DRIIXS.ADD_INDEX +DRIIXS.COPY_INDEX_SET +DRIIXS.CREATE_INDEX_SET +DRIIXS.DROP_INDEX_SET +DRIIXS.DROP_USER_INDEX_SETS +DRIIXS.GETINDEXINDEXSET +DRIIXS.GETINDEXIXSCOLUMNS +DRIIXS.REMOVE_INDEX +DRILIST. +DRILOAD. +DRILOAD.RESOLVE_SQE +DRIMLX. +DRIMLX.ADD_SUB_LEXER +DRIMLX.COPY_MULTI_LEXER +DRIMLX.GETINDEXMULTILEXER +DRIMLX.GETSLXALTABBR +DRIMLX.INDEXADDSLX +DRIMLX.INDEXREMOVESLX +DRIMLX.INDEXUPDATESLX +DRIMLX.REMOVE_SUB_LEXER +DRIMLX.UPD_SUB_LEXER +DRIOBJ. +DRIOPT. +DRIOPT.GET_DDL_LOCK_TIMEOUT +DRIOPT.GET_STATE +DRIOPT.GET_TIMER +DRIOPT.LOCK_OPT +DRIOPT.LOCK_OPT_ALL_PART +DRIOPT.LOCK_OPT_MVDATA +DRIOPT.LOCK_OPT_REBUILD +DRIOPT.LOCK_OPT_RET +DRIOPT.SET_DDL_LOCK_TIMEOUT +DRIOPT.SET_STATE +DRIOPT.START_TIMER +DRIOPT.UNLOCK_OPT +DRIOPT.UNLOCK_OPT_ALL_PART +DRIOPT.UNLOCK_OPT_REBUILD +DRIPARSE. +DRIPARSE.INITCREATEREC +DRIPARSE.NORMALIZE_COLUMN_LIST +DRIPARSE.PARSEALTER +DRIPARSE.PARSEALTERCAT +DRIPARSE.PARSEALTERRULE +DRIPARSE.PARSEALTERXPATH +DRIPARSE.PARSECREATE +DRIPARSE.PARSECREATECAT +DRIPARSE.PARSECREATERULE +DRIPARSE.PARSECREATEXPATH +DRIPARSE.PARSEMIGRATE +DRIPARSE.PARSEPARTALTER +DRIPARSE.PARSEPARTCREATE +DRIPARX. +DRIPARX.CLEARCONTEXT +DRIPARX.END_PARALLEL_OP +DRIPARX.GETCONTEXT +DRIPARX.GET_SESSION_STATE +DRIPARX.SETCONTEXT +DRIPARX.SET_SESSION_STATE +DRIPREF. +DRIPREF.ADD_PARTITION_STORAGE +DRIPREF.COPY_PREFERENCES +DRIPREF.CREATE_PREFERENCE +DRIPREF.DROP_PREFERENCE +DRIPREF.DROP_USER_PREFERENCES +DRIPREF.GETOBJDEFAULT +DRIPREF.GETPREFCLAOBJ +DRIPREF.GET_ATTRIBUTE_VALUE +DRIPREF.GET_DEFAULT_FILTER +DRIPREF.GET_INDEX_VALUES +DRIPREF.GET_OAT_ID +DRIPREF.GET_OBJ_INFO +DRIPREF.GET_PREF_INFO +DRIPREF.GET_SUB_INDEX_VALUES +DRIPREF.NEXTPREFVALUE +DRIPREF.OPENPREFVALUE +DRIPREF.REMOVE_PARTITION_STORAGE +DRIPREF.RPL_PREFERENCES +DRIPREF.SET_ATTRIBUTE +DRIPREF.SET_PREFERENCES +DRIPREF.UNSET_ATTRIBUTE +DRIREC. +DRIREC.RECOVER +DRIREC.RECOVER_DICT +DRIREP. +DRIREP.BLANKLN +DRIREP.BYTESTR +DRIREP.ENDREPORT +DRIREP.INITREPORT +DRIREP.LOAD_TTYPE_NAMES +DRIREP.NUMSTR +DRIREP.PCTSTR +DRIREP.TITLE +DRIREP.WL +DRIREPM. +DRIREPM.CREATE_INDEX_SCRIPT +DRIREPM.CREATE_POLICY_SCRIPT +DRIREPM.DESCRIBE_INDEX +DRIREPM.DESCRIBE_POLICY +DRIREPZ. +DRIREPZ.INDEX_SIZE +DRIRIO. +DRIRIO.CREATE_SHADOW +DRIRIO.CREATE_SHADOW_PARTMD +DRIRIO.LOCK_RIO +DRIRIO.LOCK_RIO_ALL_PART +DRIRIO.SHADOW_NAME +DRIRIO.UNLOCK_RIO +DRIRIO.UNLOCK_RIO_ALL_PART +DRISCORE. +DRISCORE.TEXTSCORE +DRISCORR. +DRISCORR.RULESCORE +DRISGP. +DRISGP.ADD_SECTION +DRISGP.CHECKUPDMDATA +DRISGP.COPY_SECTION_GROUP +DRISGP.CREATE_SECTION_GROUP +DRISGP.DROP_SECTION_GROUP +DRISGP.DROP_USER_SECTION_GROUPS +DRISGP.FIELD_TO_MDATA +DRISGP.GETSECTION +DRISGP.GETSECTIONS +DRISGP.GET_DEFAULT_SECTION +DRISGP.HASSECTIONTYPE +DRISGP.INDEXADDSECTION +DRISGP.INDEXREMSECTION +DRISGP.LOADSECTIONMD +DRISGP.REMOVE_SECTION +DRISGP.SECISMDATA +DRISPL. +DRISPL.ADD_STOPOBJ +DRISPL.COPY_STOPLIST +DRISPL.CREATE_STOPLIST +DRISPL.DROP_STOPLIST +DRISPL.DROP_USER_STOPLISTS +DRISPL.GETINDEXSTOPWORDS +DRISPL.GETSPLLANG +DRISPL.INDEXADDSTOPWORD +DRISPL.INDEXREMSTOPWORD +DRISPL.MIGRATETOMULTISTOPLIST +DRISPL.REMOVE_STOPOBJ +DRITHS. +DRITHS.GET_THS +DRITHS.LOOKUP +DRITHS.LOOKUP_SINGLE +DRITHS.PARSE_PHRASE +DRITHSC. +DRITHSC.CHANGE_SN +DRITHSC.CREATE_PHRASE +DRITHSC.CREATE_RELATION +DRITHSC.CREATE_THESAURUS +DRITHSC.CREATE_TR +DRITHSC.DROP_PHRASE +DRITHSC.DROP_RELATION +DRITHSC.DROP_THESAURUS +DRITHSC.DROP_TR +DRITHSC.DROP_USER_THESAURI +DRITHSC.MAKE_PT +DRITHSC.RENAME_PHRASE +DRITHSC.RENAME_THESAURUS +DRITHSC.TRUNC_THESAURUS +DRITHSC.UPDATE_TR +DRITHSD. +DRITHSD.DUMP_THESAURUS +DRITHSD.NEXT_DUMP_LINE +DRITHSL. +DRITHSL.ALLOCATE_IDS +DRITHSL.CREATE_PHRASE +DRITHSL.CREATE_THESAURUS +DRITHSL.DUMP_THESAURUS +DRITHSL.NEXT_DUMP_LINE +DRITHSX. +DRITHSX.EXPAND +DRITHSX.EXPAND0 +DRITHSX.OUTPUT_STYLE +DRITHSX.SN +DRITHSX.TTT +DRIUTL. +DRIUTL.BYTESTR +DRIUTL.CHECKNUMLANGINDSLXSW +DRIUTL.CHECK_LANGUAGE +DRIUTL.GENID +DRIUTL.GET_DBID +DRIUTL.GET_DEFAULT_VALUE +DRIUTL.GET_HASH_AREA_SIZE +DRIUTL.GET_OBJ_ID +DRIUTL.GET_SLAVE_ID +DRIUTL.GET_USER +DRIUTL.GET_USER_ID +DRIUTL.GET_USER_NAME +DRIUTL.IDXMEM_TO_NUMBER +DRIUTL.IS_OPS +DRIUTL.KEYCOMP_OK +DRIUTL.LANG_TO_ABBR +DRIUTL.LOCK_INDEX +DRIUTL.LOCK_PARTITION +DRIUTL.MAKE_PFX +DRIUTL.MEM_TO_NUMBER +DRIUTL.NORMALIZEOBJECTNAME +DRIUTL.NUMSTR +DRIUTL.PARSE_OBJECT_NAME +DRIUTL.PCTSTR +DRIUTL.PKEY_TOOLONG +DRIUTL.SET_HASH_AREA_SIZE +DRIUTL.SPLIT +DRIUTL.SPLIT_LIST +DRIUTL.SYNCMEM_TO_NUMBER +DRIUTL.USER_EXIST +DRIUTL.VALIDATE_STORAGE +DRIUTL.VERIFY_NP_INDEX_TABLES +DRIVAL. +DRIVAL.VALIDATECTXRULEOPTIONS +DRIVAL.VALIDATE_ATTR +DRIVAL.VALIDATE_PREF +DRIVER +DRIVING_INCIDENT +DRIVING_SITE +DRIXMD. +DRIXMD.ADDSTAGEITAB +DRIXMD.ADD_AUTO_OPTIMIZE +DRIXMD.ALLOCATEDOCIDS +DRIXMD.ALLOCATEPARTID +DRIXMD.AUTOOPT_CRE_PIPE +DRIXMD.AUTOOPT_POP_TOKEN +DRIXMD.AUTOOPT_PUSH_TOKEN +DRIXMD.CHANGEINDEXOPTION +DRIXMD.CHECKACCESS +DRIXMD.CHECKINDEXESFOREXCHANGE +DRIXMD.CHECKINDEXFORORACON +DRIXMD.CHECKINDEXQUERYABLE +DRIXMD.CHECK_AUTO_OPTIMIZE +DRIXMD.CHKINDEXOPTION +DRIXMD.COMPAREINDEXOBJECTVALUESPREF +DRIXMD.COPYINDEXMDRIO +DRIXMD.COPYPARTMDRIO +DRIXMD.COPYPOLICY +DRIXMD.CREATEPARTITIONMD +DRIXMD.CREATEPOLICY +DRIXMD.CREATESQE +DRIXMD.DECREMENTDOCCNT +DRIXMD.DROPPARTITIONMD +DRIXMD.DROPPOLICY +DRIXMD.DROPSQE +DRIXMD.DROPUSERPOLICIES +DRIXMD.DROPUSERSQES +DRIXMD.EXCHANGEINDEXMD +DRIXMD.FASTGETINDEXID +DRIXMD.GETALLCDICOLUMNS +DRIXMD.GETALLINDEXOBJECTS +DRIXMD.GETALLPARTITIONIDS +DRIXMD.GETALLPARTITIONNMS +DRIXMD.GETALLPARTITIONOPTS +DRIXMD.GETALLPARTITIONS +DRIXMD.GETBASETABLENAME +DRIXMD.GETDOCIDCOUNT +DRIXMD.GETFIELDFID +DRIXMD.GETINDEXID +DRIXMD.GETINDEXMD +DRIXMD.GETINDEXOBJECT +DRIXMD.GETINDEXPARTITION +DRIXMD.GETINDEXREC +DRIXMD.GETINDEXRECBYID +DRIXMD.GETINDEXSTATS +DRIXMD.GETINDEXSTATUS +DRIXMD.GETINDEXSTORAGE +DRIXMD.GETJOB +DRIXMD.GETMULTIBLOCKREADCOUNT +DRIXMD.GETMVFLAG +DRIXMD.GETNEXTID +DRIXMD.GETPARTITIONID +DRIXMD.GETPARTITIONREC +DRIXMD.GETPARTITIONRECBYID +DRIXMD.GETSLXMDATASECID +DRIXMD.GETSYNCATTR +DRIXMD.GETSYSPARAM +DRIXMD.IMPORTINGINDEX +DRIXMD.INCREMENTDOCCNT +DRIXMD.INCREMENTVERSION +DRIXMD.INCREMENTVERSION_NOTAUTO +DRIXMD.INDEXHASFATABLES +DRIXMD.INDEXHASGTABLE +DRIXMD.INDEXHASMTABLE +DRIXMD.INDEXHASMVDATA +DRIXMD.INDEXHASPENDINGROWS +DRIXMD.INDEXHASPTABLE +DRIXMD.INDEXHASSTABLE +DRIXMD.ISSES +DRIXMD.NEXTINDEXCDI +DRIXMD.NEXTINDEXOBJECT +DRIXMD.NEXTINDEXVALUE +DRIXMD.OPENINDEXMDSCAN +DRIXMD.ORACONREWRITECHK +DRIXMD.PURGEKGL +DRIXMD.RECORDJOB +DRIXMD.REMOVESTAGEITAB +DRIXMD.REMOVE_AUTO_OPTIMIZE +DRIXMD.REMZONEFROMMD +DRIXMD.RENAMEINDEX +DRIXMD.RENAMEINDEXCOL +DRIXMD.RESETINDEXIDS +DRIXMD.RESET_AUTO_OPTIMIZE_STATUS +DRIXMD.RUN_AUTO_OPTIMIZE +DRIXMD.SETACTIVEINDEX +DRIXMD.SETINDEXMD +DRIXMD.SETINDEXSTATUS +DRIXMD.SETSYNCATTR +DRIXMD.START_AUTO_OPTIMIZE +DRIXMD.STOP_AUTO_OPTIMIZE +DRIXMD.TXNALGETKEY +DRIXMD.TXNALSETKEY +DRIXMD.UPDATESDATA +DRI_MOVE_CTXSYS. +DRI_SUBLXV_LANG. +DRI_VERSION. +DRL_FILE_NUMBER +DROPPABLE +DROPPED +DROPSCN +DROPTIME +DROP_IF_EXISTS. +DROP_SEGMENTS +DRUE. +DRUE.CLEAR_STACK +DRUE.ERROR +DRUE.GETMSG +DRUE.GET_ERROR_MESG +DRUE.GET_STACK +DRUE.GET_STACK1 +DRUE.GET_STACK_NOCLEAR +DRUE.POP +DRUE.PUSH +DRUE.PUSH_INTERNAL +DRUE.RAISE +DRUE.TEXT_ON_STACK +DRV0DDL. +DRV0DDL.GENERATE_SUBSTRINGS +DRV0DDL.GENERATE_SUBSTRINGS2 +DRVDDL. +DRVDDL.ADDDOCLEXERMDATATOKENS +DRVDDL.ADD_BIG_IO +DRVDDL.ADD_SEPARATE_OFFSETS +DRVDDL.ADD_STAGE_ITAB +DRVDDL.CDIUPDATE +DRVDDL.CURSORTOBITVECTOR +DRVDDL.FIELD_TO_MDATA +DRVDDL.IDX_ADD_SLX +DRVDDL.IDX_ADD_SW +DRVDDL.IDX_REM_SLX +DRVDDL.IDX_REM_SW +DRVDDL.INDEXCOLRENAME +DRVDDL.INDEXCREATE +DRVDDL.INDEXDROP +DRVDDL.INDEXMAPLANGUAGES +DRVDDL.INDEXMAPLANGUAGESDRIVER +DRVDDL.INDEXOPTIMIZE +DRVDDL.INDEXOPTIMIZEPARFN +DRVDDL.INDEXPARTREPLACE +DRVDDL.INDEXPARTRESUME +DRVDDL.INDEXRENAME +DRVDDL.INDEXREPLACE +DRVDDL.INDEXRESUME +DRVDDL.INDEXSYNC +DRVDDL.INDEXTRANSPORT +DRVDDL.INDEXTRUNCATE +DRVDDL.LOCKBASETABLE +DRVDDL.PARTCLEANUP +DRVDDL.PARTITIONCREATE +DRVDDL.PARTITIONEXCHANGE +DRVDDL.PARTITIONMERGE +DRVDDL.PARTITIONSPLIT +DRVDDL.PROCESSONLINEPENDING +DRVDDL.REMDOCLEXERMDATATOKENS +DRVDDL.REMOVE_BIG_IO +DRVDDL.REMOVE_STAGE_ITAB +DRVDDL.RIOCLEANUP +DRVDDL.SPLITDOLLARI +DRVDDLC. +DRVDDLC.INDEXCOLRENAME +DRVDDLC.INDEXCREATE +DRVDDLC.INDEXDROP +DRVDDLC.INDEXRENAME +DRVDDLC.INDEXREPLACE +DRVDDLC.INDEXTRANSPORT +DRVDDLC.INDEXTRUNCATE +DRVDDLR. +DRVDDLR.INDEXCOLRENAME +DRVDDLR.INDEXCREATE +DRVDDLR.INDEXDROP +DRVDDLR.INDEXOPTIMIZE +DRVDDLR.INDEXRENAME +DRVDDLR.INDEXREPLACE +DRVDDLR.INDEXRESUME +DRVDDLR.INDEXSYNC +DRVDDLR.INDEXTRANSPORT +DRVDDLR.INDEXTRUNCATE +DRVDDLX. +DRVDDLX.INDEXCOLRENAME +DRVDDLX.INDEXCREATE +DRVDDLX.INDEXDROP +DRVDDLX.INDEXRENAME +DRVDDLX.INDEXREPLACE +DRVDDLX.INDEXRESUME +DRVDDLX.INDEXTRANSPORT +DRVDDLX.INDEXTRUNCATE +DRVDDLX.ISBINARYXMLCOLUMN +DRVDISP. +DRVDISP.EXECASOWN +DRVDISP.EXECASOWN_CLOB +DRVDISP.EXECASOWN_IN_CLOB +DRVDISP.EXECASOWN_IN_CLOB_RET +DRVDISP.EXECASOWN_IN_OUT_CLOBS +DRVDISP.EXECASOWN_RET +DRVDISP.EXECASOWN_RET1 +DRVDISP.EXECTRUST +DRVDISP.EXECTRUST_ARRAY +DRVDISP.EXECTRUST_RET +DRVDISP.EXECTRUST_RET1 +DRVDISP.TABLEFUNC +DRVDISP.TABLEFUNC_ASOWN +DRVDML. +DRVDML.ADDREMONEMDATA +DRVDML.ADD_REM_MDATA +DRVDML.AUTO_SYNC_INDEX +DRVDML.CLEANDML +DRVDML.COM_SYNC_INDEX +DRVDML.CTXCAT_DML +DRVDML.DELETEPENDING +DRVDML.IDX_POPULATE_MODE +DRVDML.INS_DEL_MVDATA +DRVDML.LOCK_OPT_MVDATA +DRVDML.LOCK_OPT_REBUILD +DRVDML.MAINTAINKTAB +DRVDML.POPULATEPENDING +DRVDML.PROCESSDML +DRVDML.PROCESSWAITING +DRVDML.SETLOCKFAILED +DRVDML.UNLOCK_OPT_REBUILD +DRVDML.UPDATEMDATA +DRVDML.UPD_SDATA +DRVDOC. +DRVDOC.CONCORDANCE_OPTIONS +DRVDOC.FILTER_OPTIONS +DRVDOC.GET_ROWID +DRVDOC.GIST_OPTIONS +DRVDOC.HIGHLIGHT_OPTIONS +DRVDOC.HIGHLIGHT_REQUEST +DRVDOC.LANGUAGES_REQUEST +DRVDOC.LING_REQUEST +DRVDOC.MARKUP_OPTIONS +DRVDOC.NOUN_PHRASES_REQUEST +DRVDOC.PART_OF_SPEECH_REQUEST +DRVDOC.RESLOB_CHK +DRVDOC.RESTAB_CHK +DRVDOC.STEMS_REQUEST +DRVDOC.THEME_OPTIONS +DRVDOC.TOKEN_REQUEST +DRVIMR. +DRVIMR.ADD_BRW +DRVIMR.ADD_CLUSTER +DRVIMR.ADD_DOCCLS +DRVIMR.ADD_EXPLAIN +DRVIMR.ADD_FEATURE +DRVIMR.ADD_GIST +DRVIMR.ADD_GIST_TXT +DRVIMR.ADD_HIGHLIGHT +DRVIMR.ADD_HQF +DRVIMR.ADD_LANGUAGE +DRVIMR.ADD_NOUN_PHRASE +DRVIMR.ADD_POS +DRVIMR.ADD_QUERY +DRVIMR.ADD_STEM +DRVIMR.ADD_THEME +DRVIMR.ADD_TOKEN +DRVIMR.BLANKLN +DRVIMR.DIRECT_SET +DRVIMR.ENDREPORT +DRVIMR.FEATURE_COUNT +DRVIMR.GET_FEATURE +DRVIMR.GET_KWIC +DRVIMR.INITREPORT +DRVIMR.NEXT_DID +DRVIMR.RESET_FEATURE +DRVIMR.SET_KWIC +DRVIMR.START_DIDSCAN +DRVIMR.TITLE +DRVIMR.W +DRVIMR.WL +DRVODM. +DRVODM.FEATURE_EXPLAIN +DRVODM.FEATURE_PREP +DRVODM.FEATURE_PREP_NC +DRVODM.FI2TTAB +DRVODM.FVSTAB +DRVODM.GET_FEATURES +DRVODM.GET_SUGGESTIONS +DRVODM.ODMKTRAINSET +DRVODM.ODMTRAINSET +DRVODM.ODM_DRPMODEL +DRVODM.ODM_GENMODEL +DRVODM.ODM_READKMEANMODEL +DRVODM.SVM_TRAIN +DRVPARX. +DRVPARX.CREATESUBLEXTOKENS +DRVPARX.INDEXMAPDOCUMENTS +DRVPARX.INDEXOPTIMIZEPARFN +DRVPARX.PARALLELPOPUINDEX +DRVPARX.TRACEGETTRACE +DRVRIO. +DRVRIO.CREATE_SHADOW_INDEX +DRVRIO.CREATE_SHADOW_PART +DRVRIO.CREATE_SHADOW_PARTSMD +DRVRIO.EXCHANGE_SHADOW_INDEX +DRVRIO.EXCHANGE_SHADOW_PART +DRVRIO.SWAP_SHADOW +DRVTMT. +DRVTMT.CLUSTER_TAB +DRVTMT.DOCCLS_TAB +DRVTMT.MODEL_TAB +DRVTMT.NOEX_TABNAME +DRVTMT.VERIFY_MODELTAB +DRVTMT.VERIFY_TRAINCAT +DRVTMT.VERIFY_TRAINDOC +DRVUTL. +DRVUTL.CHECK_BASE_TABLE +DRVUTL.CLEARINVOKER +DRVUTL.CURRENTUSERID +DRVUTL.GETINVOKER +DRVUTL.GETINVOKERID +DRVUTL.GET_ORA_EVENT_LEVEL +DRVUTL.SETINVOKER +DRVUTL.SET_ORA_EVENT_LEVEL +DRVUTL.VALIDATE_IXS_COLLIST +DRVUTL.VALIDATE_IXS_COLUMNS +DRVUTL.WRITE_TO_LOG +DRVXMD. +DRVXMD.ALLOCATEDOCIDS +DRVXMD.AUTOOPT_CLO +DRVXMD.AUTOOPT_PREP +DRVXMD.AUTOOPT_PUSH_TOKEN +DRVXMD.CHECK_FILE_ACCESS_ROLE +DRVXMD.CHKINDEXOPTION +DRVXMD.CTX_SQE_TBL_FUNC +DRVXMD.DECREMENTDOCCNT +DRVXMD.GETBASETABLENAME +DRVXMD.GETDOCIDCOUNT +DRVXMD.GETFIELDSECNAME +DRVXMD.GETINDEXMD +DRVXMD.GETINDEXPARTITION +DRVXMD.GETINDEXSTATS +DRVXMD.GETMVFLAG +DRVXMD.GETNEXTID +DRVXMD.GETOBJDEFAULT +DRVXMD.GETPREFCLAOBJ +DRVXMD.GETSECDATATYPE +DRVXMD.GETSLXMDATASECID +DRVXMD.INCREMENTDOCCNT +DRVXMD.INCREMENTVERSION +DRVXMD.NEXTINDEXCDI +DRVXMD.NEXTINDEXOBJECT +DRVXMD.NEXTINDEXVALUE +DRVXMD.NEXTPREFVALUE +DRVXMD.OPENINDEXMDSCAN +DRVXMD.OPENPREFVALUE +DRVXMD.OPTGETSTATE +DRVXMD.OPTGETTIMER +DRVXMD.OPTGETTYPE +DRVXMD.OPTSETSTATE +DRVXMD.OPTSTARTTIMER +DRVXMD.RECORDINDEXERROR +DRVXMD.SET_REVERSE_DOCID_SWITCH +DRVXMD.TXNALGETKEY +DRVXMD.TXNALSETKEY +DRVXTAB. +DRVXTAB.ADD_OFFSETS_COLUMN +DRVXTAB.ADJUSTTTYPE +DRVXTAB.ALTERDOLLARITTYPE +DRVXTAB.CREATE_A_TABLE +DRVXTAB.CREATE_F_TABLE +DRVXTAB.CREATE_G_TABLE +DRVXTAB.CREATE_INDEX_INDEXES +DRVXTAB.CREATE_INDEX_TABLES +DRVXTAB.CREATE_S_TABLE +DRVXTAB.DROP_FA_TABLES +DRVXTAB.DROP_G_TABLE +DRVXTAB.DROP_INDEX_TABLES +DRVXTAB.EXCHANGE_INDEX_TABLES +DRVXTAB.GET_CREATE_SQL +DRVXTAB.GET_OBJECT_NAME +DRVXTAB.GET_OBJECT_PREFIX +DRVXTAB.PART_CREATE_S_TABLES +DRVXTAB.PART_EVENTS_OFF +DRVXTAB.PART_EVENTS_ON +DRVXTAB.POPULATE_PTABLE +DRVXTAB.RENAME_INDEX_TABLES +DRVXTAB.SWAP_INDEX_TEMP_TABLES +DRVXTAB.TRUNC_INDEX_TABLES +DRVXTABC. +DRVXTABC.CREATE_INDEXES +DRVXTABC.CREATE_TABLES +DRVXTABC.DROP_TABLES +DRVXTABC.POST_TRANSPORT +DRVXTABC.RECREATE_TRIGGER +DRVXTABC.RENAME_TABLES +DRVXTABC.TRUNC_TABLES +DRVXTABR. +DRVXTABR.CREATE_INDEXES +DRVXTABR.CREATE_TABLES +DRVXTABR.DROP_TABLES +DRVXTABR.RENAME_TABLES +DRVXTABR.TRUNC_TABLES +DRVXTABX. +DRVXTABX.CREATE_INDEXES +DRVXTABX.CREATE_TABLES +DRVXTABX.DROP_TABLES +DRVXTABX.RENAME_TABLES +DRVXTABX.TRUNC_TABLES +DR_DEF. +DSCN-B +DSCN-W +DSCN_BASE +DSCN_WRAP +DST_DATABASE_NAME +DST_QUEUE_NAME +DST_QUEUE_SCHEMA +DST_UPGRADE_INSERT_CONV +DTP +DUAL +DUMMY +DUPLICATE +DUP_POSITION +DURATION +DURATION_SECS +DYNAMIC +DYNAMIC_SAMPLING +DYNAMIC_SAMPLING_EST_CDN +EARLIEST_SCN +ECID +ECM_CSA. +ECM_CSA.CLIENT_HOMEPAGE_DATA +ECM_CSA.CLIENT_HW_DETAILS +ECM_CSA.CLIENT_NETWORK_BROWSER_DATA +ECM_CSA.CLIENT_OS_FILESYSTEM_DATA +ECM_CSA.CLIENT_OS_GENERAL_DATA +ECM_CSA.CLIENT_OS_PATCHES_DATA +ECM_CSA.COLLECTOR_DETAILS +ECM_CSA.TARGET_ASSOC_DETAILS +ECM_CT. +ECM_CT.COPY_SNAPSHOT_GEN +ECM_CT.DELETE_HOST_CONFIG_SNAPSHOTS +ECM_CT.DELETE_SNAPSHOT +ECM_CT.DELETE_SNAPSHOTS +ECM_CT.GET_HOST_CONFIG_INFO +ECM_CT.GET_HW_INFO +ECM_CT.HANDLE_ORPHAN_HOST_CONFIGS +ECM_CT.HANDLE_ORPHAN_SNAPSHOTS +ECM_CT.HANDLE_TARGET_DELETION +ECM_CT.HOST_CONFIG_POSTLOAD +ECM_CT.HOST_CONFIG_TARGET_DELETION +ECM_CT.INSERT_COMPONENT +ECM_CT.INSERT_CONTAINER +ECM_CT.INSERT_GEN_SNAPSHOT_INFO +ECM_CT.INSERT_PATCH +ECM_CT.INSERT_PATCHSET +ECM_CT.INSERT_SNAPSHOT_INFO +ECM_CT.POSTLOAD_CALLBACK +ECM_CT.PRELOAD_CALLBACK +ECM_CT.PURGE_HOST_CONFIGS +ECM_CT.SAVE_COMPOSITE_CONFIG +ECM_DEPOT. +ECM_DEPOT.INSERT_PATCH_ZIP +ECM_DEPOT.REGISTER_PATCH +ECM_DRILL. +ECM_DRILL.HW_HOSTS_DRILL +ECM_DRILL.OS_HOSTS_DRILL +ECM_DRILL.OS_NO_PATCH_DRILL +ECM_DRILL.OS_PATCHES_DRILL +ECM_DRILL.OS_WITH_PATCH_DRILL +ECM_DRILL.SW_INSTALLS_DRILL +ECM_DRILL.SW_NO_PATCH_DRILL +ECM_DRILL.SW_PATCHES_DRILL +ECM_DRILL.SW_TARGETS_DRILL +ECM_DRILL.SW_WITH_PATCH_DRILL +ECM_GENDIFF. +ECM_GENDIFF.GET_CHILD_DIFFS +ECM_GENDIFF.GET_CHILD_ROWCOUNTS +ECM_GENDIFF.HAS_DIFFS +ECM_INV. +ECM_INV.GET_INV_HW_INFO +ECM_INV.GET_INV_OS_INFO +ECM_INV.GET_INV_SW_INFO +ECM_MD_COLUMNS_TR. +ECM_MD_TABLES_TR. +ECM_METADATA_TR. +ECM_UTIL. +ECM_UTIL.CONCAT_COL +ECM_UTIL.CONCAT_COMPONENT_VERSION +ECM_UTIL.CONCAT_RESULT_COL +ECM_UTIL.CONFIG_STD_KEYWORD_LIST +ECM_UTIL.CSA_CLIENT_RULE_LIST +ECM_UTIL.CSA_TARGET_LIST +ECM_UTIL.FIXED_BUGS_IN_HOME +ECM_UTIL.FIXED_BUGS_IN_PATCH +ECM_UTIL.GET_CLONE_SOURCE +ECM_UTIL.GET_GENERIC_VALS_DATATYPE +ECM_UTIL.GET_HIST_FOR_GROUP +ECM_UTIL.HOST_HOME_LIST +ECM_UTIL.HOST_HOME_LSNR_LIST +ECM_UTIL.HOST_HOME_SID_LIST +ECM_UTIL.HOST_HOME_TARGET_LIST +ECM_UTIL.INSERT_AVAIL_SEARCHES +ECM_UTIL.INTERIM_PATCHES_IN_HOME +ECM_UTIL.PATCHSETS_IN_HOME +ECM_UTIL.PATCH_ADVISORY_LIST +ECM_UTIL.UPDATE_ECM_METADATA +ECONTEXT_ID +EDITION +EDITIONING_VIEW +EDITIONS_ENABLED +EDITION_MISMATCH +EDITION_NAME +EFFECTIVE_BYTES_PER_SECOND +ELAPSEDPERCALL +ELAPSED_APPLY_TIME +ELAPSED_CAPTURE_TIME +ELAPSED_DEQUEUE_TIME +ELAPSED_ENQUEUE_TIME +ELAPSED_IDLE_TIME +ELAPSED_LCR_TIME +ELAPSED_PAUSE_TIME +ELAPSED_PICKLE_TIME +ELAPSED_PROPAGATION_TIME +ELAPSED_REDO_WAIT_TIME +ELAPSED_RULE_EVALUATION_TIME +ELAPSED_RULE_TIME +ELAPSED_SCHEDULE_TIME +ELAPSED_SECONDS +ELAPSED_SEND_TIME +ELAPSED_SPILL_TIME +ELAPSED_TIME +ELAPSED_TIME_DELTA +ELAPSED_TIME_DIFF +ELAPSED_TIME_TOTAL +ELAPSED_TRANSFORMATION_TIME +ELAPSED_UNPICKLE_TIME +ELEMENT +ELEMENT_NAME +ELEMENT_SUBSTITUTABLE +ELEM_CFGID +ELEM_DESCR +ELEM_IDX +ELEM_NAME +ELEM_NSUBELEM +ELEM_OFFSET +ELEM_SIZE +ELEM_STORAGE +ELEM_TYPE +ELEM_TYPE_MOD +ELEM_TYPE_NAME +ELEM_TYPE_OWNER +ELIMINATE_JOIN +ELIMINATE_OBY +ELOCATIONSETJVMHEAPSIZE. +EMDSYSTEM. +EMDW_LOG. +EMDW_LOG.CREATE_CONTEXT +EMDW_LOG.DEBUG +EMDW_LOG.DELETE_CONTEXT +EMDW_LOG.ERROR +EMDW_LOG.GET_CONTEXT_TYPE +EMDW_LOG.INFO +EMDW_LOG.PURGE +EMDW_LOG.REFRESH_CONTEXT +EMDW_LOG.SET_CONTEXT +EMDW_LOG.SET_SESSION_TRACE_LEVEL +EMDW_LOG.SET_TRACE_LEVEL +EMDW_LOG.WARN +EMD_BCNTXN. +EMD_BCNTXN.EMD_BCN_ASSOCIATE_BEACONS +EMD_BCNTXN.EMD_BCN_ASSOC_TMPL_APPLY +EMD_BCNTXN.EMD_BCN_EDIT_STEPGROUPS +EMD_BCNTXN.EMD_BCN_EDIT_STEPGROUP_THRESH +EMD_BCNTXN.EMD_BCN_EDIT_STEPS +EMD_BCNTXN.EMD_BCN_EDIT_STEP_PROPS +EMD_BCNTXN.EMD_BCN_EDIT_STEP_THRESH +EMD_BCNTXN.EMD_BCN_EDIT_TXN_PROPS +EMD_BCNTXN.EMD_BCN_EDIT_TXN_THRESH +EMD_BCNTXN.EMD_BCN_GET_BCN_HOME_PG_DATA +EMD_BCNTXN.EMD_BCN_GET_BCN_HP_HOME_DATA +EMD_BCNTXN.EMD_BCN_GET_BCN_SYNC_STATUS +EMD_BCNTXN.EMD_BCN_GET_BCN_WEBSITES +EMD_BCNTXN.EMD_BCN_GET_BEACONS +EMD_BCNTXN.EMD_BCN_GET_COLL_NAME +EMD_BCNTXN.EMD_BCN_GET_COMPOSITE_KEY +EMD_BCNTXN.EMD_BCN_GET_COMP_KEY_ELEMENTS +EMD_BCNTXN.EMD_BCN_GET_PERF_DATA +EMD_BCNTXN.EMD_BCN_GET_THRESHOLDS +EMD_BCNTXN.EMD_BCN_GET_TXNS +EMD_BCNTXN.EMD_BCN_GET_TXNS_BY_TYPE +EMD_BCNTXN.EMD_BCN_GET_TXN_CURRENT_DATA +EMD_BCNTXN.EMD_BCN_GET_TXN_DATA +EMD_BCNTXN.EMD_BCN_GET_WEBSITE_HP_DATA +EMD_BCNTXN.EMD_BCN_REMOVE_BEACON_ASSOCS +EMD_BCNTXN.EMD_BCN_REPL_STEP_PROPS +EMD_BCNTXN.EMD_BCN_REPL_TXN_PROPS +EMD_BCNTXN.EMD_BCN_SYNC_SEV_LIST +EMD_BCNTXN.EMD_BCN_TXN_CREATE +EMD_BCNTXN.EMD_BCN_TXN_DELETE +EMD_BCNTXN.EMD_BCN_TXN_MODIFY +EMD_BCNTXN.EMD_BCN_TXN_START_MONITOR +EMD_BCNTXN.EMD_BCN_TXN_STOP_MONITOR +EMD_BCNTXN.EMD_BCN_TXN_SYNC_LIST +EMD_BCNTXN.EMD_BCN_TXN_VIEW +EMD_BCNTXN.GET_METRICS_FOR_KEYVAL +EMD_BCNTXN.HAS_TGT_FUNCTION_PRIV +EMD_BCNTXN.HAS_USE_ANY_BCN_PRIV +EMD_BCNTXN.IS_KEY_VALID_ASSOC +EMD_BCNTXN.SET_TESTS_KEYNESS +EMD_BCN_ADMIN. +EMD_BCN_ADMIN.ADD_TXN_COLL_TGT_LEVEL_PROP +EMD_BCN_ADMIN.ADD_TXN_COLL_TXN_LEVEL_PROP +EMD_BCN_ADMIN.BEACON_DELETE_CALLBACK +EMD_BCN_ADMIN.BEACON_KEY_VALUE_CLEANUP +EMD_BCN_ADMIN.BEACON_PRE_DELETE_CALLBACK +EMD_BCN_ADMIN.DEL_TXN_COLL_ALL_PROPS +EMD_BCN_ADMIN.DEL_TXN_COLL_TGT_LEVEL_PROP +EMD_BCN_ADMIN.DEL_TXN_COLL_TGT_LEVEL_PROPS +EMD_BCN_ADMIN.DEL_TXN_COLL_TXN_LEVEL_PROP +EMD_BCN_ADMIN.DEL_TXN_COLL_TXN_LEVEL_PROPS +EMD_BCN_ADMIN.GEN_BEACON_RESP_METRICS +EMD_CHRONOS_ADMIN. +EMD_CHRONOS_ADMIN.CHRONOS_PURGE_ALL +EMD_CHRONOS_ADMIN.CHRONOS_PURGE_INTERVAL +EMD_CHRONOS_ADMIN.CHRONOS_PURGE_RAW +EMD_CHRONOS_ADMIN.CHRONOS_PURGE_TIME +EMD_CHRONOS_ADMIN.CHRONOS_PURGE_TIME_DATA +EMD_CHRONOS_ADMIN.CHRONOS_SET_TARGET_FILTER +EMD_CHRONOS_ADMIN.DELETE_DAILY_DATA +EMD_CHRONOS_ADMIN.DELETE_DAILY_DIST_DATA +EMD_CHRONOS_ADMIN.DELETE_HOURLY_DATA +EMD_CHRONOS_ADMIN.DELETE_HOURLY_DIST_DATA +EMD_CHRONOS_ADMIN.DELETE_RAW_DATA +EMD_CHRONOS_ADMIN.PURGE_RUN_METRIC_DATES +EMD_CHRONOS_ADMIN.SET_COLLECTION_SCHEDULE +EMD_CHRONOS_ANALYZE. +EMD_CHRONOS_ANALYZE.CHRONOS_GET_ADV_ANALYZE_DATA +EMD_CHRONOS_ANALYZE.CHRONOS_GET_ANALYZE_DATA +EMD_CHRONOS_ANALYZE.GET_ANALYZE_DATA_BY_URL +EMD_CHRONOS_PRMAPPING. +EMD_CHRONOS_PRMAPPING.CHRONOS_GET_EUMJ2EE_DATA +EMD_CHRONOS_PRMAPPING.CHRONOS_GET_PAGE_REQUESTS_DATA +EMD_CHRONOS_PRMAPPING.CHRONOS_GET_REQUESTS_DATA +EMD_CHRONOS_PRMAPPING.CHRONOS_GET_REQUEST_PERF_DATA +EMD_CHRONOS_PRMAPPING.E2E_GET_COMPONENT_VERSIONS +EMD_CHRONOS_PRMAPPING.E2E_GET_SQL_TEXT_DATA +EMD_COLLECTION. +EMD_COLLECTION.ADD_THRESHOLDS +EMD_COLLECTION.DELETE_ALL_THRESHOLDS +EMD_COLLECTION.DELETE_THRESHOLDS +EMD_COLLECTION.DESCRIBE_COLLECTION +EMD_COLLECTION.GET_KEY_VALUES_WITH_THRESHOLDS +EMD_COLLECTION.HAS_COLLECTION +EMD_COLLECTION.MODIFY_COLLECTION +EMD_COLLECTION.RUN_COLLECTIONS +EMD_COLLECTION.START_COLLECTION +EMD_COLLECTION.STOP_COLLECTION +EMD_COLLECTION.STOP_COLLECTIONS +EMD_COLLECTION.SUSPEND_COLLECTION +EMD_COMPOSITE_TARGETS. +EMD_COMPOSITE_TARGETS.EVALUATE_SUMMARY_METRICS +EMD_DATABASE. +EMD_DATABASE.EXTRACT_ALERTLOG_TIMESTAMP +EMD_DATABASE.GETASMTARGETNAME +EMD_DATABASE.GETBACKUPVALUES +EMD_DATABASE.GETCOLLECTIONTIMESTAMP +EMD_DATABASE.GETDBALERTLOGSEVERITY +EMD_DATABASE.GETDBCOUNTVALUES +EMD_DATABASE.GETDBINSTANCEVERSION +EMD_DATABASE.GETDBSEVERITYS +EMD_DATABASE.GETDBSITEMAPCOMMONINFO +EMD_DATABASE.GETDBSITEMAPINFO +EMD_DATABASE.GETDBSIZE +EMD_DATABASE.GETDBSTRINGVALUES +EMD_DATABASE.GETDBVALUES +EMD_DATABASE.GETDGROLE +EMD_DATABASE.GETDUPSQLCOUNTVALUE +EMD_DATABASE.GETFLASHRECOVERYVALUESFROMDB +EMD_DATABASE.GETFLASHRECOVERYVALUESFROMREP +EMD_DATABASE.GETHOSTNAME +EMD_DATABASE.GETKEYPROFILE +EMD_DATABASE.GETLISTENERNAME +EMD_DATABASE.GETLOGMODEANDFLASHBACKFROMDB +EMD_DATABASE.GETLOGMODEANDFLASHBACKFROMREP +EMD_DATABASE.GETMTTR +EMD_DATABASE.GETPRMYDETAILS +EMD_DATABASE.GETSIHAINFO +EMD_DATABASE.GETSTGPERFVALUES +EMD_DATABASE.GETTARGETGUID +EMD_DATABASE.GETTIMEFORMAT +EMD_DATABASE.GET_METRIC_STATE_AT +EMD_DATABASE.GET_TOP_ALERT_INSTANCES +EMD_DATABASE.GET_TOP_WAIT_INSTANCES +EMD_DATABASE.ISARCHIVELOGMODE +EMD_DATABASE.SET_DEFAULT_METRIC_PREFERENCES +EMD_DATABASE.TO_TZ +EMD_E2E_ROLLUP. +EMD_E2E_ROLLUP.DBMSJOB_EXTENDED_SQL_TRACE_ON +EMD_E2E_ROLLUP.EMD_DETAILS_1DAY_CLEANUP +EMD_E2E_ROLLUP.EMD_DETAILS_1DAY_PURGE +EMD_E2E_ROLLUP.EMD_DETAILS_1DAY_ROLLUP +EMD_E2E_ROLLUP.EMD_DETAILS_1HOUR_CLEANUP +EMD_E2E_ROLLUP.EMD_DETAILS_1HOUR_PURGE +EMD_E2E_ROLLUP.EMD_DETAILS_1HOUR_ROLLUP +EMD_E2E_ROLLUP.EMD_GET_TARGET_INFO +EMD_E2E_ROLLUP.EMD_INITIALIZE +EMD_E2E_ROLLUP.EMD_JDBC_1DAY_CLEANUP +EMD_E2E_ROLLUP.EMD_JDBC_1DAY_PURGE +EMD_E2E_ROLLUP.EMD_JDBC_1DAY_ROLLUP +EMD_E2E_ROLLUP.EMD_JDBC_1HOUR_CLEANUP +EMD_E2E_ROLLUP.EMD_JDBC_1HOUR_PURGE +EMD_E2E_ROLLUP.EMD_JDBC_1HOUR_ROLLUP +EMD_E2E_ROLLUP.EMD_RAW_PURGE +EMD_E2E_ROLLUP.EMD_SQL_1DAY_CLEANUP +EMD_E2E_ROLLUP.EMD_SQL_1DAY_PURGE +EMD_E2E_ROLLUP.EMD_SQL_1DAY_ROLLUP +EMD_E2E_ROLLUP.EMD_SQL_1HOUR_CLEANUP +EMD_E2E_ROLLUP.EMD_SQL_1HOUR_PURGE +EMD_E2E_ROLLUP.EMD_SQL_1HOUR_ROLLUP +EMD_E2E_ROLLUP.EMD_SQL_STMT_CONN_PURGE +EMD_E2E_ROLLUP.EMD_SUMMARY_1DAY_CLEANUP +EMD_E2E_ROLLUP.EMD_SUMMARY_1DAY_PURGE +EMD_E2E_ROLLUP.EMD_SUMMARY_1DAY_ROLLUP +EMD_E2E_ROLLUP.EMD_SUMMARY_1HOUR_CLEANUP +EMD_E2E_ROLLUP.EMD_SUMMARY_1HOUR_PURGE +EMD_E2E_ROLLUP.EMD_SUMMARY_1HOUR_ROLLUP +EMD_E2E_ROLLUP.ROLLUP +EMD_LOADER. +EMD_LOADER.ADD_HANDLER_FOR_ROWSET +EMD_LOADER.ADD_HOST_AVAIL_METRIC +EMD_LOADER.ADD_METRIC_DATA +EMD_LOADER.ADD_PLSQL_HANDLER_FOR_ROWSET +EMD_LOADER.ADD_TARGET +EMD_LOADER.ADD_TARGET_ADDITION_CALLBACK +EMD_LOADER.ALLOW_TZRGN_CHANGE +EMD_LOADER.CHANGE_TARGET_EMD_URL +EMD_LOADER.CHECK_CAT_PROP_CHANGES +EMD_LOADER.CHECK_DELETION_ALLOWED +EMD_LOADER.CHECK_METADATA_SETS +EMD_LOADER.CLEANUP_ADMIN_MESSAGES +EMD_LOADER.CLEAR_EMD_URL_CHANGE +EMD_LOADER.CLEAR_TZRGN_CHANGE +EMD_LOADER.DBMSJOB_EXTENDED_SQL_TRACE_ON +EMD_LOADER.DEL_TARGET_ADDITION_CALLBACK +EMD_LOADER.DEQUEUE +EMD_LOADER.DEQUEUE_ADMIN +EMD_LOADER.DEQUEUE_BROWSE +EMD_LOADER.DEQUEUE_CONSUME +EMD_LOADER.DEREGISTER_LOAD_CALLBACK +EMD_LOADER.DEREG_CLUSTER_CRS_EVENT_CBK +EMD_LOADER.EMD_1DAY_CLEANUP +EMD_LOADER.EMD_1DAY_PURGE +EMD_LOADER.EMD_1DAY_ROLLUP +EMD_LOADER.EMD_1HOUR_CLEANUP +EMD_LOADER.EMD_1HOUR_PURGE +EMD_LOADER.EMD_1HOUR_ROLLUP +EMD_LOADER.EMD_CURRENT_METRIC_PURGE +EMD_LOADER.EMD_GET_TARGET_INFO +EMD_LOADER.EMD_INITIALIZE +EMD_LOADER.EMD_PURGE_ERROR_LOG +EMD_LOADER.EMD_PURGE_PERFORMANCE_LOG +EMD_LOADER.EMD_RAW_PURGE +EMD_LOADER.END_CHANGE_AGENT_URL +EMD_LOADER.END_MEMBERSHIPS_ROWSET +EMD_LOADER.END_METADATA_SET +EMD_LOADER.END_MGMT_TARGETS_ROWSET +EMD_LOADER.END_UPLOAD +EMD_LOADER.ENQUEUE +EMD_LOADER.EXECUTE_POST_LOAD_CALLBACK +EMD_LOADER.EXECUTE_PRE_LOAD_CALLBACK +EMD_LOADER.EXEC_TARGET_ADDITION_CALLBACKS +EMD_LOADER.GET_1DAY_RETENTION_WINDOW +EMD_LOADER.GET_1HOUR_RETENTION_WINDOW +EMD_LOADER.GET_CURRENT_EMD_URL +EMD_LOADER.GET_HA_MODE +EMD_LOADER.GET_LOADED_METADATA_SETS +EMD_LOADER.GET_LOAD_DESIGNATORS +EMD_LOADER.GET_NAME_PORT_FROM_EMD_URL +EMD_LOADER.GET_PURGE_BATCHSIZE +EMD_LOADER.GET_RAW_RETENTION_WINDOW +EMD_LOADER.GET_SHAREDFS_BACKLOG +EMD_LOADER.GET_TABLE_OBJECT +EMD_LOADER.INITIALIZE_SHAREDFS +EMD_LOADER.INIT_1DAY_PARTITIONS +EMD_LOADER.INIT_1HOUR_PARTITIONS +EMD_LOADER.INIT_LOADER_PARAMS +EMD_LOADER.INIT_RAW_PARTITIONS +EMD_LOADER.IS_EMD_URL_CHANGE_ALLOWED +EMD_LOADER.IS_FATALLY_BROKEN +EMD_LOADER.IS_MULTI_AGENT_TARGET +EMD_LOADER.LISTEN +EMD_LOADER.LOG_PERFORMANCE +EMD_LOADER.METRIC_ERROR_PURGE +EMD_LOADER.MODIFY_MEMBERSHIP +EMD_LOADER.OBTAIN_LOCK_FOR_DESIGNATOR +EMD_LOADER.OBTAIN_LOCK_FOR_EMD_URL +EMD_LOADER.OBTAIN_METRIC_SETTINGS_LOCK +EMD_LOADER.OMS_FAILOVER +EMD_LOADER.RECEIVE +EMD_LOADER.REGISTER_CLUSTER_CRS_EVENT_CBK +EMD_LOADER.REGISTER_LOAD_CALLBACK +EMD_LOADER.REGISTER_SHAREDFS +EMD_LOADER.RELEASE_LOCK_FOR_DESIGNATOR +EMD_LOADER.RELEASE_LOCK_FOR_EMD_URL +EMD_LOADER.RELEASE_METRIC_SETTINGS_LOCK +EMD_LOADER.REMOVE_HANDLER_FOR_ROWSET +EMD_LOADER.ROLLUP +EMD_LOADER.SET_CURRENT_EMD_URL +EMD_LOADER.SET_EMD_URL_CHANGE +EMD_LOADER.SET_HA_MODE +EMD_LOADER.SET_PURGE_BATCHSIZE +EMD_LOADER.SET_TZRGN_CHANGE +EMD_LOADER.START_MEMBERSHIPS_ROWSET +EMD_LOADER.START_MGMT_TARGETS_ROWSET +EMD_LOADER.START_UPLOAD +EMD_LOADER.STRING_HISTORY_PURGE +EMD_LOADER.SUBMIT_DISCARD_STATE_JOB +EMD_LOADER.UNREGISTER_SHAREDFS +EMD_LOADER.UPDATE_CURRENT_METRICS +EMD_LOADER.UPDATE_CURRENT_METRICS_ROW +EMD_LOADER.UPDATE_LOADER_METRICS +EMD_LOADER.UPDATE_LOADER_PARAMS +EMD_LOADER.UPDATE_MAT_AGENT_LIST +EMD_LOADER.UPDATE_STRING_METRICS_HISTORY +EMD_LOADER.UPDATE_STRING_METRICS_ROW +EMD_LOADER.UPSERT_DUPLICATE_TARGET +EMD_MAINTENANCE. +EMD_MAINTENANCE.ADD_PARTITIONS +EMD_MAINTENANCE.ANALYZE_EMD_SCHEMA +EMD_MAINTENANCE.ANALYZE_OBJECTS_WITHOUT_STATS +EMD_MAINTENANCE.CALC_RESCHD_ON_NEW_JOBTYPE +EMD_MAINTENANCE.CLEAR_RESCHD_ON_NEW_JOBTYPE +EMD_MAINTENANCE.COLLECT_SEGMENT_SIZES +EMD_MAINTENANCE.COMPRESS_INDEX +EMD_MAINTENANCE.CREATE_SDK_SYNONYMS +EMD_MAINTENANCE.DBMSJOB_EXTENDED_SQL_TRACE_ON +EMD_MAINTENANCE.DELETE_ALL_STATS +EMD_MAINTENANCE.DISABLE_DETAILED_LOGGING +EMD_MAINTENANCE.DROP_PARTITIONS +EMD_MAINTENANCE.ENABLE_DETAILED_LOGGING +EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS +EMD_MAINTENANCE.GET_COMP_STATUS +EMD_MAINTENANCE.GET_MODE +EMD_MAINTENANCE.GET_VERSION +EMD_MAINTENANCE.GRANT_CORE_SDK +EMD_MAINTENANCE.IS_CENTRAL_MODE +EMD_MAINTENANCE.IS_DETAILED_LOGGING_ENABLED +EMD_MAINTENANCE.MONITOR_INDEXES +EMD_MAINTENANCE.MOVE_EM_TBLSPC +EMD_MAINTENANCE.PARTITIONS_ENABLED +EMD_MAINTENANCE.PARTITION_MAINTENANCE +EMD_MAINTENANCE.PIN_PLSQL +EMD_MAINTENANCE.REBUILD_INDEXES +EMD_MAINTENANCE.REBUILD_IOT +EMD_MAINTENANCE.REBUILD_TABLE_INDEXES +EMD_MAINTENANCE.REMOVE_EM_DBMS_JOBS +EMD_MAINTENANCE.REPOSITORY_DB_V9 +EMD_MAINTENANCE.SET_COMP_STATUS +EMD_MAINTENANCE.SET_RESCHD_ON_NEW_JOBTYPE +EMD_MAINTENANCE.SET_VERSION +EMD_MAINTENANCE.SHOULD_RESCHD_ON_NEW_JOBTYPE +EMD_MAINTENANCE.SUBMIT_EM_DBMS_JOBS +EMD_MAINTENANCE.TRUNCATE_PARTITIONS +EMD_MAINTENANCE.UPDATE_STALE_STATS +EMD_MAINT_UTIL. +EMD_MAINT_UTIL.GET_1DAY_RETENTION_WINDOW +EMD_MAINT_UTIL.GET_1HOUR_RETENTION_WINDOW +EMD_MAINT_UTIL.GET_RAW_RETENTION_WINDOW +EMD_MAINT_UTIL.IS_CENTRAL_MODE +EMD_MAINT_UTIL.PARTITIONS_ENABLED +EMD_MAINT_UTIL.PARTITION_MAINTENANCE +EMD_MAINT_UTIL.RECOMPILE_INVALID_OBJECTS +EMD_MAINT_UTIL.RECREATE_SYNONYMS +EMD_MNTR. +EMD_MNTR.ADD_METRIC_ANNOTATION +EMD_MNTR.CHECK_FOR_WARN_CRIT_TIP +EMD_MNTR.CHECK_METRIC_PARENT +EMD_MNTR.CLEAR_METRIC_SEVERITY +EMD_MNTR.CREATE_UDM +EMD_MNTR.DELETE_TARGETS +EMD_MNTR.DELETE_UDM +EMD_MNTR.GETMETRICVALUE +EMD_MNTR.GETSTATUSCODE +EMD_MNTR.GET_ADDTNL_FOLDER_DETAILS +EMD_MNTR.GET_ALERT_DETAILS +EMD_MNTR.GET_BCN_TEST_CUR_SUMMARY +EMD_MNTR.GET_CMANAGER_SITEMAP_INFO +EMD_MNTR.GET_COMP_TGT_CHILDREN_DATA +EMD_MNTR.GET_CONSOLE_HOMEPAGE_INFO +EMD_MNTR.GET_CONSOLE_HOMEPAGE_INFO_SIMP +EMD_MNTR.GET_CURRENT_METRIC_DETAILS +EMD_MNTR.GET_EBS_SITEMAP_INFO +EMD_MNTR.GET_FORMS6_SITEMAP_INFO +EMD_MNTR.GET_GROUP_HOMEPAGE_INFO +EMD_MNTR.GET_HAS_TEMPLATE_PRIV +EMD_MNTR.GET_HAS_TEMPLATE_PRIVILEGE +EMD_MNTR.GET_KEY_VALUE_AVG_DETAILS +EMD_MNTR.GET_KEY_VALUE_CURRENT_DETAILS +EMD_MNTR.GET_LSNR_MEMBER_SUMMARY +EMD_MNTR.GET_METRIC_ASSOCIATED_CA +EMD_MNTR.GET_METRIC_COLLECTION_INFO +EMD_MNTR.GET_METRIC_DETAILS +EMD_MNTR.GET_METRIC_DETAILS_TS +EMD_MNTR.GET_METRIC_DETAILS_TS_MK +EMD_MNTR.GET_METRIC_ERRORS +EMD_MNTR.GET_MNTR_SETTINGS_COPY +EMD_MNTR.GET_PENDING_CHANGES +EMD_MNTR.GET_REPORTS6_SITEMAP_INFO +EMD_MNTR.GET_TARGETS_BY_HOST_WITH_PRIV +EMD_MNTR.GET_TARGETS_BY_MEMBERS +EMD_MNTR.GET_TARGETS_BY_MEMBERSHIP +EMD_MNTR.GET_TARGETS_INFO +EMD_MNTR.GET_TARGETS_SUMMARY +EMD_MNTR.GET_TARGET_COLLECTION_INFO +EMD_MNTR.GET_TARGET_INFO +EMD_MNTR.GET_TARGET_LIB_MNTR_SETTINGS +EMD_MNTR.GET_TARGET_MNTR_SETTINGS +EMD_MNTR.GET_TARGET_SETTINGS +EMD_MNTR.GET_TARGET_TIMESTAMP_INFO +EMD_MNTR.GET_TEMPLATE_APPLY_OPERATIONS +EMD_MNTR.GET_TEMPLATE_APPLY_TTYPES +EMD_MNTR.GET_TEMPLATE_COLLECTION_INFO +EMD_MNTR.GET_TEMPLATE_COPY_SETTINGS +EMD_MNTR.GET_TEMPLATE_COPY_TGT_SETTINGS +EMD_MNTR.GET_TEMPLATE_CRT_MNTR_SETTINGS +EMD_MNTR.GET_TEMPLATE_LIB_MNTR_SETTINGS +EMD_MNTR.GET_TEMPLATE_MNTR_SETTINGS +EMD_MNTR.GET_TEMPLATE_SETTINGS +EMD_MNTR.GET_TYPES_IN_TARGET_SELECTION +EMD_MNTR.GET_TYPES_RESOURCE_BUNDLES +EMD_MNTR.IS_SERVER_GNRTD_METRIC +EMD_MNTR.MODIFY_THRESHOLD +EMD_MNTR.SAVE_TARGET_SETTINGS +EMD_MNTR.UPDATE_USER_LICENSE +EMD_MNTR_BASELINE. +EMD_MNTR_BASELINE.COPY_THRESHOLDS +EMD_MNTR_BASELINE.DELETE_BASELINE +EMD_MNTR_BASELINE.DELETE_PAST_CHANGES +EMD_MNTR_BASELINE.EDIT_BASELINE +EMD_MNTR_BASELINE.GET_ADDITIONS_COUNT +EMD_MNTR_BASELINE.GET_BASELINE_DATA +EMD_MNTR_BASELINE.GET_BASELINE_DATA_FOR_DATE +EMD_MNTR_BASELINE.GET_BASELINE_DATA_FOR_THR +EMD_MNTR_BASELINE.GET_DELETIONS_COUNT +EMD_MNTR_BASELINE.GET_EDIT_METRIC_THRESHOLDS +EMD_MNTR_BASELINE.GET_METRIC_INDICES_CHANGES +EMD_MNTR_BASELINE.GET_METRIC_THRESHOLD_DATA +EMD_MNTR_BASELINE.GET_NUMBER_OF_PENDING_CHANGES +EMD_MNTR_BASELINE.GET_PAST_CHANGES +EMD_MNTR_BASELINE.GET_PENDING_JOBS_FROM_TARGET +EMD_MNTR_BASELINE.GET_PENDING_JOBS_TO_TARGET +EMD_MNTR_BASELINE.GET_SRC_DEST_TGT_DIFF_MET +EMD_MNTR_BASELINE.GET_TARGETS_OF_TYPE +EMD_MNTR_BASELINE.GET_TARGET_BASELINES +EMD_MNTR_BASELINE.GET_THRESHOLD_UPDATE_DATA +EMD_MNTR_BASELINE.IS_VALID_TARGET +EMD_MNTR_BASELINE.SAVE_THRESHOLDS +EMD_MNTR_COMPTGT. +EMD_MNTR_COMPTGT.CLEAN_GROUP_ON_MEM_TGT_DEL +EMD_MNTR_COMPTGT.GETAVAILABILITY +EMD_MNTR_COMPTGT.GETDETAILSFORGROUPMAINPAGE +EMD_MNTR_COMPTGT.GET_CMPT_TARGET_AVAILABILITY +EMD_MNTR_FILER. +EMD_MNTR_FILER.CUSTOMIZESUMMARYPAGEMETRICS +EMD_MNTR_FILER.GETFILERALERTSINFO +EMD_MNTR_FILER.GETFILERCOLLTIMESTAMPCURR +EMD_MNTR_FILER.GETFILERCURRENTMETRICSTRVALUE +EMD_MNTR_FILER.GETFILERCURRENTMETRICVALUE +EMD_MNTR_FILER.GETFILERDISKINFO +EMD_MNTR_FILER.GETFILERGROUPCAPACITY +EMD_MNTR_FILER.GETFILERGROUPTARGETS +EMD_MNTR_FILER.GETFILERHEALTHINFO +EMD_MNTR_FILER.GETFILERMETRICGUID +EMD_MNTR_FILER.GETFILERPARTNERLISTINFO +EMD_MNTR_FILER.GETFILERQTREEINFO +EMD_MNTR_FILER.GETFILERSITEMAPINFO +EMD_MNTR_FILER.GETFILERSUMMARYINFO +EMD_MNTR_FILER.GETFILERTARGETGUID +EMD_MNTR_FILER.GETFILERTOTALVALUE +EMD_MNTR_FILER.GETFILERVOLUMEINFO +EMD_MNTR_FILER.GETFILERVOLUMETOTALVALUE +EMD_MNTR_FILER.GETTARGETMETADATAVERSION +EMD_MNTR_FILER.REPORTFILERDISKINFO +EMD_MNTR_FILER.REPORTFILERGROUPCAPACITY +EMD_MNTR_FILER.REPORTFILERGROUPTARGETS +EMD_MNTR_FILER.REPORTFILERHEALTHINFO +EMD_MNTR_FILER.REPORTFILERINFO +EMD_MNTR_FILER.REPORTFILERPARTNERINFO +EMD_MNTR_FILER.REPORTFILERQTREESINFO +EMD_MNTR_FILER.REPORTFILERSUMMARYINFO +EMD_MNTR_FILER.REPORTFILERVOLUMEINFO +EMD_MNTR_HOST. +EMD_MNTR_HOST.GETHOSTPERFINFO +EMD_MNTR_HOST.GETHOSTSITEMAPINFO +EMD_MNTR_HOST.GETHOSTSUMMARYINFO +EMD_MNTR_HOST.GETHOSTTARGETLISTINFO +EMD_MNTR_HOST.GETSUBTABPREFERRENCES +EMD_MNTR_HOST.GETTYPEDGROUPMEMBERSINFO +EMD_MNTR_HOST.GET_TARGET_AVAIL_STATUS +EMD_MNTR_HOST.SAVESUMMARYMETRICSINFO +EMD_MNTR_HOST.SET_DEFAULT_SUBTAB_PREFERENCES +EMD_MNTR_USER. +EMD_MNTR_USER.ADDREGIONENTRY +EMD_MNTR_USER.CHRONOSDATAEXISTS +EMD_MNTR_USER.GETHITDETAILS +EMD_MNTR_USER.GETMETRICSRESPONSETIMESERIES +EMD_MNTR_USER.GETNUMUNPROCESSEDHITS +EMD_MNTR_USER.GETOVERALLWEBFARMPERF +EMD_MNTR_USER.GETRESPONSEDIST +EMD_MNTR_USER.GETRESPONSETIMESERIES +EMD_MNTR_USER.GETRESPONSETIMESERIESFORQURIES +EMD_MNTR_USER.GETROWSBYOBJANDSTAT +EMD_MNTR_USER.GETSTATSOBJ +EMD_MNTR_USER.GETURLSTATSOBJ +EMD_MNTR_USER.GETWATCHLISTSTATS +EMD_MNTR_USER.GETWEBAPPTYPE +EMD_MNTR_USER.IPSTR2NUM +EMD_MNTR_USER.IPSUBNET2NUM +EMD_MNTR_USER.ISFORMSEUM +EMD_MNTR_WEBSITE. +EMD_MNTR_WEBSITE.GETFORMSCONFIGDATA +EMD_MNTR_WEBSITE.GETFORMSTARGETSFOREUM +EMD_MNTR_WEBSITE.GETFORMSTARGETSFORTXN +EMD_MNTR_WEBSITE.GETWEBAPPAVAILTRANSACTIONDATA +EMD_MNTR_WEBSITE.GETWEBAPPCOMPONENTSDATA +EMD_MNTR_WEBSITE.GETWEBAPPCONFIGDATA +EMD_MNTR_WEBSITE.GETWEBAPPENDUSERPERFDATA +EMD_MNTR_WEBSITE.GETWEBAPPGENERALMETRICDATA +EMD_MNTR_WEBSITE.GETWEBAPPOC4JTOPDATA +EMD_MNTR_WEBSITE.GETWEBAPPWATCHLISTDATA +EMD_MNTR_WEBSITE.GETWEBSITEHOMEPAGEDATA +EMD_NOTIFICATION. +EMD_NOTIFICATION.ACKNOWLEDGE_ALERT +EMD_NOTIFICATION.ADD_ADMIN_PROFILE +EMD_NOTIFICATION.ADD_CONFIGURATION_TO_JOB_RULE +EMD_NOTIFICATION.ADD_CONFIGURATION_TO_RULE +EMD_NOTIFICATION.ADD_DEVICE_TO_RULE +EMD_NOTIFICATION.ADD_EMAIL_DEVICE +EMD_NOTIFICATION.ADD_JAVA_DEVICE +EMD_NOTIFICATION.ADD_NOTIFICATION_RULE +EMD_NOTIFICATION.ADD_PLSQL_DEVICE +EMD_NOTIFICATION.ADD_PROGRAM_DEVICE +EMD_NOTIFICATION.ADD_SNMP_DEVICE +EMD_NOTIFICATION.CHECK_FOR_SEVERITIES +EMD_NOTIFICATION.CLEAR_SCHEDULE +EMD_NOTIFICATION.DBMSJOB_EXTENDED_SQL_TRACE_ON +EMD_NOTIFICATION.DELETE_ADMIN_PROFILE +EMD_NOTIFICATION.DELETE_DEVICE +EMD_NOTIFICATION.DELETE_DEVICE_FROM_RULE +EMD_NOTIFICATION.DELETE_ESCALATION_PROFILE +EMD_NOTIFICATION.DELETE_NOTIFICATION_RULE +EMD_NOTIFICATION.DELETE_PROGRAM_DEVICE +EMD_NOTIFICATION.DELETE_RULE_CONFIGURATION +EMD_NOTIFICATION.DELETE_RULE_CONFIGURATIONS +EMD_NOTIFICATION.DEQUEUE +EMD_NOTIFICATION.DEQUEUE_NOTIF_INPUT +EMD_NOTIFICATION.DISABLE_SCHEDULE +EMD_NOTIFICATION.EDIT_EMAIL_DEVICE +EMD_NOTIFICATION.EDIT_JAVA_DEVICE +EMD_NOTIFICATION.EDIT_PLSQL_DEVICE +EMD_NOTIFICATION.EDIT_PROGRAM_DEVICE +EMD_NOTIFICATION.EDIT_SNMP_DEVICE +EMD_NOTIFICATION.GET_DEVICE_OWNER +EMD_NOTIFICATION.GET_GLOBAL_REPEAT_SETTINGS +EMD_NOTIFICATION.GET_JOB_STATE_CHANGE_DETAILS +EMD_NOTIFICATION.GET_QUEUE +EMD_NOTIFICATION.GET_VIOLATION_DETAILS +EMD_NOTIFICATION.HANDLE_METRIC_KEYVAL_DELETION +EMD_NOTIFICATION.HANDLE_TARGET_DELETED +EMD_NOTIFICATION.INITIALIZE_QUEUES +EMD_NOTIFICATION.IS_DEVICE_AVAILABLE +EMD_NOTIFICATION.IS_MAIL_GATEWAY_SETUP +EMD_NOTIFICATION.LOG_DELIVERY_TIME +EMD_NOTIFICATION.LOG_HISTORY +EMD_NOTIFICATION.MAKE_RULE_PUBLIC +EMD_NOTIFICATION.METRIC_SEVERITY_FOR_PLSQL +EMD_NOTIFICATION.OMS_FAILOVER +EMD_NOTIFICATION.PING_DEVICES +EMD_NOTIFICATION.PING_SUCCEEDED +EMD_NOTIFICATION.QUEUE_JOB_NOTIFICATIONS +EMD_NOTIFICATION.QUEUE_METRIC_NOTIFICATIONS +EMD_NOTIFICATION.QUEUE_NOTIF_INPUT +EMD_NOTIFICATION.QUEUE_RCA_TASK +EMD_NOTIFICATION.QUEUE_RCA_UPDATE +EMD_NOTIFICATION.QUEUE_READY +EMD_NOTIFICATION.QUEUE_REPEAT_NOTIF_INPUT +EMD_NOTIFICATION.QUEUE_WITH_DELAY +EMD_NOTIFICATION.REGISTER_OMS +EMD_NOTIFICATION.REQUEUE +EMD_NOTIFICATION.RULE_EXISTS +EMD_NOTIFICATION.SETUP_FOR_RETRY +EMD_NOTIFICATION.SET_DEVICE_SCHEDULE +EMD_NOTIFICATION.SET_EMAIL_GATEWAYS +EMD_NOTIFICATION.SET_ESCALATION_PROFILE +EMD_NOTIFICATION.SET_GLOBAL_REPEAT_SETTINGS +EMD_NOTIFICATION.SET_NUMBER_QUEUES +EMD_NOTIFICATION.SET_RULE_PROPERTIES +EMD_NOTIFICATION.SET_RULE_REPEAT +EMD_NOTIFICATION.SET_SCHEDULE +EMD_NOTIFICATION.STATE_CHANGE_FOR_PLSQL +EMD_NOTIFICATION.TEST_PLSQL_DEVICE +EMD_NOTIFICATION.UNREGISTER_OMS +EMD_NOTIFICATION.UPDATE_AND_ENQUEUE_RCA_SEV +EMD_NOTIFICATION.USER_SCHEDULE_SET +EMD_NOTIFICATION.WHO_UPDATED_SCHEDULE +EMD_OSM. +EMD_OSM.GETCLUSTEREDOFSINFO +EMD_OSM.GETDATABASESFGINFO +EMD_OSM.GETDATABASESINFO +EMD_OSM.GETDISKGROUPUSAGEINFO +EMD_OSM.GETFAILGROUPINFO +EMD_OSM.GETNONEOFSVOLUMESINFO +EMD_OSM.GETOFSSPACEINFO +EMD_OSM.GETOFSSUMMARY +EMD_OSM.GETOSMSITEMAPINFO +EMD_OSM.GETSINGLEINSTANCEOFSSUMMARY +EMD_PREF. +EMD_PREF.GET_FOLDERS_INFO +EMD_PREF.MANAGE_USER_FOLDERS +EMD_PREF.SET_FOLDERS_INFO +EMD_RAC. +EMD_RAC.ADD_RAC_CALLBACK +EMD_RAC.CLS_INTERCONNECTS +EMD_RAC.CLUSTERWARE_STATUS +EMD_RAC.GETALLTARGETSINCLUSTER +EMD_RAC.GETSTORAGEINFO +EMD_RAC.GET_ALERTS_INFO +EMD_RAC.GET_ALERTS_INFO_FOR_SERVICE +EMD_RAC.GET_ALL_ALERTS_IN_CLUSTER +EMD_RAC.GET_CELL_ALERTS_INFO +EMD_RAC.GET_CLUSTER_DB_LIST +EMD_RAC.GET_CLUSTER_RESOURCES +EMD_RAC.GET_CLUSTER_RESOURCES_SUMMARY +EMD_RAC.GET_CLUSTER_RESOURCE_INSTANCES +EMD_RAC.GET_CLUSTER_TOPO_TARGETS +EMD_RAC.GET_DATABASE_TYPE +EMD_RAC.GET_DBNAME +EMD_RAC.GET_DB_CONFIG_TYPE +EMD_RAC.GET_DB_DYN_PROPERTIES +EMD_RAC.GET_DB_OVERVIEW_INFO +EMD_RAC.GET_DB_PROPERTIES +EMD_RAC.GET_HA_TOP5_SERVICES_KEYS +EMD_RAC.GET_IS_HAS_MANAGED +EMD_RAC.GET_IS_LISTENER_SCAN +EMD_RAC.GET_IS_RAC_LISTENER +EMD_RAC.GET_KEY_PROFILE +EMD_RAC.GET_LISTENER_ALERTS_INFO +EMD_RAC.GET_OVERVIEW_INFO +EMD_RAC.GET_PROBLEMSRV_SRVPERF_FOR_DB +EMD_RAC.GET_PROBLEM_SERVICES_FOR_DB +EMD_RAC.GET_RESOURCE_NAME_FOR_TARGET +EMD_RAC.GET_SERVICES_FOR_CLUSTER +EMD_RAC.GET_SERVICES_FOR_DB +EMD_RAC.GET_SERVICE_PERFORMANCE_INFO +EMD_RAC.GET_TARGET_GUID_FROM_RESOURCE +EMD_RAC.GET_TBSP_SEVERITY +EMD_RAC.HOST_ADD_CALLBACK +EMD_RAC.INTERFACE_STATS +EMD_RAC.LOG_INFO +EMD_RAC.PRE_UPDATE_TARGET +EMD_RAC.RACDB_INTERCONNECTS +EMD_RAC.RAC_CRS_CALLBACK_PROC +EMD_RAC.REGISTER_AVAILABILITY +EMD_RAC.ROLLUP_OR_EVAL_PROC +EMD_RAC.STRING_TOKENIZER +EMD_RAC.UPDATE_CONFIG_ACTIVITIES_TABLE +EMD_RAC.UPDATE_MASTER_PROPERTIES +EMD_RAC.UPDATE_ONE_RAC_TARGET +EMD_RAC.UPDATE_RAC_TARGET +EMD_REDUNDANCY_GROUP. +EMD_REDUNDANCY_GROUP.CREATE_REDUNDANCY_GROUP +EMD_REDUNDANCY_GROUP.MODIFY_REDUNDANCY_GROUP +EMD_RT_ROLLUP. +EMD_RT_ROLLUP.BOOTSTRAP_ROLLUP +EMD_RT_ROLLUP.DBMSJOB_EXTENDED_SQL_TRACE_ON +EMD_RT_ROLLUP.EMD_BOOTSTRAP_INITIALIZE +EMD_RT_ROLLUP.EMD_DOM_1DAY_CLEANUP +EMD_RT_ROLLUP.EMD_DOM_1DAY_PURGE +EMD_RT_ROLLUP.EMD_DOM_1DAY_ROLLUP +EMD_RT_ROLLUP.EMD_DOM_1HOUR_CLEANUP +EMD_RT_ROLLUP.EMD_DOM_1HOUR_PURGE +EMD_RT_ROLLUP.EMD_DOM_1HOUR_ROLLUP +EMD_RT_ROLLUP.EMD_DOM_BOOTSTRAP_ROLLUP +EMD_RT_ROLLUP.EMD_DOM_DIST_1DAY_CLEANUP +EMD_RT_ROLLUP.EMD_DOM_DIST_1DAY_PURGE +EMD_RT_ROLLUP.EMD_DOM_DIST_1DAY_ROLLUP +EMD_RT_ROLLUP.EMD_DOM_DIST_1HOUR_CLEANUP +EMD_RT_ROLLUP.EMD_DOM_DIST_1HOUR_PURGE +EMD_RT_ROLLUP.EMD_DOM_DIST_1HOUR_ROLLUP +EMD_RT_ROLLUP.EMD_DOM_DIST_BOOTSTRAP_ROLLUP +EMD_RT_ROLLUP.EMD_GET_TARGET_INFO +EMD_RT_ROLLUP.EMD_INC_LOADS_1DAY_CLEANUP +EMD_RT_ROLLUP.EMD_INC_LOADS_1DAY_PURGE +EMD_RT_ROLLUP.EMD_INC_LOADS_1DAY_ROLLUP +EMD_RT_ROLLUP.EMD_INC_LOADS_1HOUR_CLEANUP +EMD_RT_ROLLUP.EMD_INC_LOADS_1HOUR_PURGE +EMD_RT_ROLLUP.EMD_INC_LOADS_1HOUR_ROLLUP +EMD_RT_ROLLUP.EMD_INITIALIZE +EMD_RT_ROLLUP.EMD_IP_1DAY_CLEANUP +EMD_RT_ROLLUP.EMD_IP_1DAY_PURGE +EMD_RT_ROLLUP.EMD_IP_1DAY_ROLLUP +EMD_RT_ROLLUP.EMD_IP_1HOUR_CLEANUP +EMD_RT_ROLLUP.EMD_IP_1HOUR_PURGE +EMD_RT_ROLLUP.EMD_IP_1HOUR_ROLLUP +EMD_RT_ROLLUP.EMD_IP_BOOTSTRAP_ROLLUP +EMD_RT_ROLLUP.EMD_IP_DIST_1DAY_CLEANUP +EMD_RT_ROLLUP.EMD_IP_DIST_1DAY_PURGE +EMD_RT_ROLLUP.EMD_IP_DIST_1DAY_ROLLUP +EMD_RT_ROLLUP.EMD_IP_DIST_1HOUR_CLEANUP +EMD_RT_ROLLUP.EMD_IP_DIST_1HOUR_PURGE +EMD_RT_ROLLUP.EMD_IP_DIST_1HOUR_ROLLUP +EMD_RT_ROLLUP.EMD_IP_DIST_BOOTSTRAP_ROLLUP +EMD_RT_ROLLUP.EMD_PR_MAPPING_1DAY_CLEANUP +EMD_RT_ROLLUP.EMD_PR_MAPPING_1DAY_PURGE +EMD_RT_ROLLUP.EMD_PR_MAPPING_1DAY_ROLLUP +EMD_RT_ROLLUP.EMD_PR_MAPPING_1HOUR_CLEANUP +EMD_RT_ROLLUP.EMD_PR_MAPPING_1HOUR_PURGE +EMD_RT_ROLLUP.EMD_PR_MAPPING_1HOUR_ROLLUP +EMD_RT_ROLLUP.EMD_RAW_PURGE +EMD_RT_ROLLUP.EMD_URL_1DAY_CLEANUP +EMD_RT_ROLLUP.EMD_URL_1DAY_PURGE +EMD_RT_ROLLUP.EMD_URL_1DAY_ROLLUP +EMD_RT_ROLLUP.EMD_URL_1HOUR_CLEANUP +EMD_RT_ROLLUP.EMD_URL_1HOUR_PURGE +EMD_RT_ROLLUP.EMD_URL_1HOUR_ROLLUP +EMD_RT_ROLLUP.EMD_URL_BOOTSTRAP_ROLLUP +EMD_RT_ROLLUP.EMD_URL_DIST_1DAY_CLEANUP +EMD_RT_ROLLUP.EMD_URL_DIST_1DAY_PURGE +EMD_RT_ROLLUP.EMD_URL_DIST_1DAY_ROLLUP +EMD_RT_ROLLUP.EMD_URL_DIST_1HOUR_CLEANUP +EMD_RT_ROLLUP.EMD_URL_DIST_1HOUR_PURGE +EMD_RT_ROLLUP.EMD_URL_DIST_1HOUR_ROLLUP +EMD_RT_ROLLUP.EMD_URL_DIST_BOOTSTRAP_ROLLUP +EMD_RT_ROLLUP.EMD_WRITE_BOOTSTRAP_LOG +EMD_RT_ROLLUP.EMD_WRITE_LOG +EMD_RT_ROLLUP.ROLLUP +EMD_SCHEMA. +EMD_SCHEMA.ADD_CRITICAL_SEVERITY +EMD_SCHEMA.ADD_METRIC +EMD_SCHEMA.ADD_METRIC_COLUMN_FOR_VERSION +EMD_SCHEMA.ADD_METRIC_DATA +EMD_SCHEMA.ADD_METRIC_FOR_VERSION +EMD_SCHEMA.ADD_SEVERITY +EMD_SCHEMA.ADD_SEVERITY_ANNOTATION +EMD_SCHEMA.ADD_SEVERITY_ANNOTATION_TTZR +EMD_SCHEMA.ADD_SEVERITY_CLEAR +EMD_SCHEMA.ADD_TABLE_METRIC_COLUMN +EMD_SCHEMA.ADD_WARNING_SEVERITY +EMD_SCHEMA.DELETE_METRIC +EMD_SCHEMA.DELETE_METRIC_DATA +EMON# +EMPTY_BLOCKS +EMXCELLSTRINGAGGCOLLECT. +EM_ADAPTIVE_THRESHOLDS_INS. +EM_AGGSVC_UI. +EM_AGGSVC_UI.ADD_AGGSERVICE +EM_AGGSVC_UI.ALLOW_BUSINESS_PROMOTION +EM_AGGSVC_UI.GET_AGGSERVICE +EM_AGGSVC_UI.GET_AVAIL_ALL_ASSOC_TARGETS +EM_AGGSVC_UI.GET_DEFAULT_HOMEPAGE_METRICS +EM_AGGSVC_UI.GET_METRICS_LIST +EM_AGGSVC_UI.GET_NON_PROMOTED_METRICS_LIST +EM_AGGSVC_UI.GET_PROMOTED_METRICS_LIST +EM_AGGSVC_UI.GET_SERVICES_FOR_SYSTEM +EM_AGGSVC_UI.GET_SERVICES_INFO +EM_AGGSVC_UI.GET_SERVICE_ALERTS_INFO +EM_AGGSVC_UI.GET_SERVICE_GENERAL_INFO +EM_AGGSVC_UI.GET_SERVICE_METRICS +EM_AGGSVC_UI.GET_SUBSERVICES_LIST +EM_AGGSVC_UI.HAS_PERF_USAGE_BY_TYPE +EM_AGGSVC_UI.MODIFY_AGGSERVICE +EM_AGGSVC_UI.SAVE_AGGSERVICE +EM_AGGSVC_UI.SET_THRESHOLDS +EM_ASSOC. +EM_ASSOC.ADD_ASSOC_FROM_LOADER +EM_ASSOC.ADD_ASSOC_PROPERTY +EM_ASSOC.ADD_MEMBER_FROM_LOADER +EM_ASSOC.CHANGE_AGENT_GUID +EM_ASSOC.CREATE_TARGET_ASSOC +EM_ASSOC.CREATE_TARGET_ASSOCS +EM_ASSOC.CREATE_TARGET_ASSOC_DEF +EM_ASSOC.DELETE_ASSOCS_IN_SCOPE +EM_ASSOC.DELETE_ASSOC_PROPERTY +EM_ASSOC.DELETE_MEMBERSHIPS +EM_ASSOC.DELETE_TARGET +EM_ASSOC.DELETE_TARGET_ASSOC +EM_ASSOC.DELETE_TARGET_ASSOCS +EM_ASSOC.DELETE_TARGET_ASSOC_DEF +EM_ASSOC.END_ASSOC_ROWSET +EM_ASSOC.GENERATE_ASSOC_DEF_GUID +EM_ASSOC.GET_ASSOCIATED_TARGETS +EM_ASSOC.GET_ASSOC_DEF_GUID +EM_ASSOC.GET_SOURCE_TARGETS +EM_ASSOC.HANDLE_RELOCATED_TARGET +EM_ASSOC.INSERT_MEMBERSHIPS +EM_ASSOC.MODIFY_ASSOC_PROPERTY +EM_ASSOC.RECREATE_FLAT_TARGET_LIST +EM_ASSOC.RECREATE_FULL_FLAT_ASSOC +EM_ASSOC.SET_TARGET_ASSOCS +EM_ASSOC.START_ASSOC_ROWSET +EM_ASSOC.UPDATE_PENDING_ASSOC +EM_BAM_SERVICE. +EM_BAM_SERVICE.DISABLE_BUSINESS_DATA +EM_BAM_SERVICE.ENABLE_BUSINESS_DATA +EM_BAM_SERVICE.ENABLE_BUSINESS_EVENTS +EM_BAM_SERVICE.GET_TARGET_DATASESSIONS +EM_BAM_SERVICE.IS_BUSINESS_DATA_ENABLED +EM_BAM_UTIL. +EM_BAM_UTIL.CREATE_BAM_NOTIF_DEVICE +EM_BAM_UTIL.CREATE_BAM_NOTIF_RULE +EM_CHECK. +EM_CHECK.CHECK_NOT_NULL +EM_CHECK.CHECK_RANGE +EM_CHECK.CHECK_SUPER_USER_PRIV +EM_CHECK.CHECK_TYPE_META_VER +EM_CHECK.ENQUOTE_LITERAL +EM_CHECK.ENQUOTE_NAME +EM_CHECK.IS_RECOVERABLE_ERROR +EM_CHECK.IS_VALID_SIGNATURE +EM_CHECK.LOAD_ERROR_MASTER +EM_CHECK.NOOP +EM_CHECK.QUALIFIED_SQL_NAME +EM_CHECK.SCHEMA_NAME +EM_CHECK.SIMPLE_SQL_NAME +EM_CHECK.SQL_OBJECT_NAME +EM_COLL_UTIL. +EM_COLL_UTIL.ADD_COLLECTION_ENTRY +EM_COLL_UTIL.ADD_COLLECTION_METRIC_TASK +EM_COLL_UTIL.ADD_COLLECTION_REC +EM_COLL_UTIL.ADD_COLL_ITEM_PROPERTY +EM_COLL_UTIL.ADD_MODIFY_METRIC_TASK +EM_COLL_UTIL.ADD_MOD_DEL_COLL_ITEMS +EM_COLL_UTIL.ADD_OBJECT_COLLECTIONS +EM_COLL_UTIL.CLEAR_OPEN_METRIC_ERRORS +EM_COLL_UTIL.COPY_DEFAULT_COLLECTIONS +EM_COLL_UTIL.COPY_OBJECT_COLL +EM_COLL_UTIL.COPY_OBJECT_COLLECTIONS +EM_COLL_UTIL.CREATE_COLL_PROPERTIES +EM_COLL_UTIL.DELETE_COLLECTION_ENTRY +EM_COLL_UTIL.DELETE_COLLECTION_INT +EM_COLL_UTIL.DELETE_COLL_ITEMS +EM_COLL_UTIL.DELETE_COLL_ITEM_PROPERTY +EM_COLL_UTIL.DELETE_COLL_PROPERTIES +EM_COLL_UTIL.DELETE_METRIC_THRESHOLD +EM_COLL_UTIL.GET_COLL_ITEM_PROPERTY +EM_COLL_UTIL.HANDLE_METAVER_CHANGE_DEF_COLL +EM_COLL_UTIL.HANDLE_TARGET_DELETE +EM_COLL_UTIL.INSERT_METRIC_RAW +EM_COLL_UTIL.LOCK_AND_GET_SCHEDULE +EM_COLL_UTIL.LOCK_METRIC +EM_COLL_UTIL.LOG_METRIC_ERRORS +EM_COLL_UTIL.MODIFY_COLLECTION_ENTRY +EM_COLL_UTIL.PROCESS_COLLECTION_ROW +EM_COLL_UTIL.PROCESS_COLL_PROP_ROW +EM_COLL_UTIL.PROCESS_THRESHOLD_ROW +EM_COLL_UTIL.REMOVE_ALL_OBJECT_COLLECTIONS +EM_COLL_UTIL.REMOVE_OBJECT_COLLECTIONS +EM_COLL_UTIL.RUN_COLLECTION +EM_COLL_UTIL.RUN_DISABLE_STEPS +EM_COLL_UTIL.RUN_SNAPSHOT_COLLECTIONS +EM_COLL_UTIL.RUN_SNAPSHOT_DEPENDENT_COLLS +EM_COLL_UTIL.SCHEDULE_REPO_COLLECTION +EM_COLL_UTIL.SET_TASK_NULL +EM_COLL_UTIL.STORE_METRIC_DATA +EM_COLL_UTIL.SUSPEND_RESUME_STOP_COLLECTION +EM_COLL_UTIL.UPDATE_COLL_ITEM_PROPERTY +EM_COLL_UTIL.VALIDATE_SCHEDULE +EM_COLL_UTIL.VALIDATE_TARGET_METRIC +EM_COMPARISON_UI. +EM_COMPARISON_UI.GET_COMPARISON_SUMMARY_DETAILS +EM_COMPARISON_UI.GET_LAST_APPLIED_TARGETS +EM_COMPARISON_UI.SET_COMPARISON_SUMMARY_DETAILS +EM_CONFIG_STD. +EM_CONFIG_STD.ADD_FIXLINK +EM_CONFIG_STD.ADD_KEYWORD +EM_CONFIG_STD.ADD_OVERRIDDEN_PARAMETER +EM_CONFIG_STD.ADD_PARAMETER +EM_CONFIG_STD.ADD_REUSABLE_QUERY +EM_CONFIG_STD.ADD_RULE +EM_CONFIG_STD.ADD_RULEFOLDER +EM_CONFIG_STD.ADD_SIMPLE_TEST +EM_CONFIG_STD.ADD_VIOLATION_CONTEXT +EM_CONFIG_STD.DELETE_CS_DATA +EM_CONFIG_STD.DELETE_CS_EVAL_RESULTS +EM_CONFIG_STD.DELETE_CS_METADATA +EM_CONFIG_STD.DELETE_EVAL_RESULTS_DATA +EM_CONFIG_STD.GET_CS_TREND_DATA +EM_CONFIG_STD.GET_FOLDER_TREND_DATA +EM_CONFIG_STD.GET_MIN_MAX_COLLECTION_TIME +EM_CONFIG_STD.GET_REPOS_TARGET_GUID +EM_CONFIG_STD.GET_RULE_TREND_DATA +EM_CONFIG_STD.GET_TREND_TABLE_TYPE +EM_CONFIG_STD.LOG_CS_EVALUATION_RESULTS +EM_CONFIG_STD.PROCESS_CS +EM_CONFIG_STD.PROCESS_RULE_FOLDERS +EM_CONFIG_STD.REMOVE_COPIED_POLICIES +EM_CONFIG_STD.SET_REPO_TIMING +EM_CONFIG_STD.SUBMIT_DELETE_EVAL_RESULTS_JOB +EM_CREDENTIAL. +EM_CREDENTIAL.ADD_DBCREDSUDM_CREDSET +EM_CREDENTIAL.ADD_HOSTUDMCREDS_CREDSET +EM_CREDENTIAL.ADD_HOST_CREDENTIAL_INFO +EM_CREDENTIAL.HANDLE_DB_ADDITION +EM_CREDENTIAL.HANDLE_DB_METAVER_UPDATE +EM_CREDENTIAL.HANDLE_HOST_ADDITION +EM_CREDENTIAL.HANDLE_HOST_METAVER_UPDATE +EM_CREDENTIAL.HANDLE_TARGET_METAVER_UPDATE +EM_CREDENTIAL.USER_DELETED +EM_CREDENTIAL.USER_REASSIGNED +EM_DASHBOARD_SERVICE. +EM_DASHBOARD_SERVICE.GET_ALERT_DATA +EM_DASHBOARD_SERVICE.GET_AVAIL_DETAILS +EM_DASHBOARD_SERVICE.GET_AVAIL_FOR_CIGAR_CHART +EM_DASHBOARD_SERVICE.GET_AVAIL_FOR_PIE_CHART +EM_DASHBOARD_SERVICE.GET_GUIDS +EM_DASHBOARD_SERVICE.GET_GUIDS_PRIVS +EM_DASHBOARD_SERVICE.GET_KEY_PART_VALUES +EM_DASHBOARD_SERVICE.GET_METRIC_DATA +EM_DASHBOARD_SERVICE.GET_METRIC_DIFF +EM_DASHBOARD_SERVICE.GET_METRIC_LIST +EM_DASHBOARD_SERVICE.GET_SERVICEGUIDS_FROM_NAMES +EM_DASHBOARD_SERVICE.GET_SERVICES_LIST +EM_DASHBOARD_SERVICE.GET_SERVICES_SLA_VALUE +EM_DASHBOARD_SERVICE.GET_SEVERITY_ANNOTATION +EM_DASHBOARD_SERVICE.GET_SEVERITY_DURATION +EM_DASHBOARD_SERVICE.GET_SL_HISTORY +EM_DASHBOARD_SERVICE.GET_STATUSES +EM_DASHBOARD_SERVICE.GET_SYSTEM_DETAILS +EM_DASHBOARD_SERVICE.GET_TOTAL_SEVERITY_DURATION +EM_DASHBOARD_SERVICE.HOURS_WORKED +EM_DASHBOARD_SERVICE.IS_AGGREGATE_SERVICE +EM_DASHBOARD_SERVICE.TRUNCATE_PERFORMANCE_HOURS +EM_DASHBOARD_SERVICE.UPDATE_IP_TARGET_ADD +EM_DASHBOARD_SERVICE.UPDATE_IP_TARGET_DELETE +EM_DASHBOARD_SERVICE.VERIFY_METRIC_TYPE +EM_DEFAULT_HOME. +EM_DEFAULT_HOME.GET_ALERT_DATA +EM_DEFAULT_HOME.GET_GENERAL_DATA +EM_DELETE_COLLECTION. +EM_DELETE_COLL_ITEM_PROPERTY. +EM_DELETE_POLICY_CFG. +EM_DELETE_VIOLATIONS. +EM_GROUP. +EM_GROUP.CREATE_CHARTS +EM_GROUP.CREATE_GROUP +EM_GROUP.CREATE_GROUP_CUSTOM_COLUMNS +EM_GROUP.CREATE_SYSTEM_FROM_GROUP +EM_GROUP.DELETE_CHARTS +EM_GROUP.DELETE_GROUP_CUSTOM_COLUMNS +EM_GROUP.MIGRATE_GROUP_TO_SYSTEM +EM_GROUP.MODIFY_CHARTS +EM_GROUP.MODIFY_GROUP +EM_GROUP.MODIFY_GROUP_CUSTOM_COLUMNS +EM_GROUP.UPSERT_GROUP +EM_GROUPS_UI. +EM_GROUPS_UI.ADD_DEFAULT_CHART +EM_GROUPS_UI.APPLY_DEFAULT_CHARTS +EM_GROUPS_UI.APPLY_TARGET_UI_DEFAULTS +EM_GROUPS_UI.EXPAND_NODE +EM_GROUPS_UI.GET_APPLICABLE_MEMBER_TARGETS +EM_GROUPS_UI.GET_APPLICABLE_MEM_TGT_TYPES +EM_GROUPS_UI.GET_AVAIL_COLUMNS_LIST +EM_GROUPS_UI.GET_AVG_METRIC_LABEL +EM_GROUPS_UI.GET_CHART_DATA +EM_GROUPS_UI.GET_DEFAULT_CHARTS_LIST +EM_GROUPS_UI.GET_GROUP_ALERTS_INFO +EM_GROUPS_UI.GET_GROUP_AVAILABILITY_INFO +EM_GROUPS_UI.GET_GROUP_CHARTS_LIST +EM_GROUPS_UI.GET_GROUP_DEF +EM_GROUPS_UI.GET_GROUP_MEMBERS_INFO +EM_GROUPS_UI.GET_GROUP_MEMBER_TARGET_TYPES +EM_GROUPS_UI.GET_MAX_METRIC_LABEL +EM_GROUPS_UI.GET_MEMBERS_AND_ASSOCIATIONS +EM_GROUPS_UI.GET_MIN_METRIC_LABEL +EM_GROUPS_UI.GET_RED_GROUP_AVAIL_INFO +EM_GROUPS_UI.GET_REMOVED_TYPE +EM_GROUPS_UI.GET_STDEV_METRIC_LABEL +EM_GROUPS_UI.GET_SUMMARY_INFO +EM_GROUPS_UI.GET_SUM_METRIC_LABEL +EM_GROUPS_UI.GET_SYSTEM_DEF +EM_GROUPS_UI.GET_TARGETS +EM_GROUPS_UI.GET_TARGET_LIST_DETAILS +EM_GROUPS_UI.INITIALIZE_GROUP_TYPE +EM_GROUPS_UI.ROLLUP +EM_GROUPS_UI.SETUP_TYPE_UI_METADATA +EM_GROUPS_UI.UPDATE_COLUMNS +EM_GROUPS_UI.UPDATE_GROUP +EM_GROUPS_UI.UPDATE_REDUNDANCY_GROUP +EM_GROUPS_UI.UPDATE_SYSTEM +EM_INSERT_COLLECTION. +EM_INSERT_COLL_ITEM_PROPERTY. +EM_INSERT_POLICY_INFO. +EM_INSERT_VIOLATIONS. +EM_JOB_RECOVERY. +EM_JOB_RECOVERY.ADD_MISSING_LARGE_PARAMS +EM_JOB_RECOVERY.DELETE_ORPHAN_LARGE_PARAMS +EM_JOB_RECOVERY.DELETE_ORPHAN_SCHEDULES +EM_JOB_RECOVERY.FIX_LARGE_PARAMS_REF_COUNT +EM_JOB_RECOVERY.SUBMIT_DBMS_JOB +EM_LICENSE. +EM_LICENSE.ADD_LICENSABLE_TARGET_TYPES +EM_LICENSE.ADD_PACKS +EM_LICENSE.ADD_PACK_DEFINITIONS +EM_LICENSE.APPLY_PACKS_TO_ALL_TARGET +EM_LICENSE.APPLY_PACKS_TO_TARGET +EM_LICENSE.ASM_LICENSE_ASSOC_CREATE +EM_LICENSE.ASM_LICENSE_ASSOC_DELETE +EM_LICENSE.AUTO_LICENSE_TARGET +EM_LICENSE.AUTO_REVOKE_LICENSE_INFO +EM_LICENSE.CHECK_PACKS_FOR_TARGET +EM_LICENSE.DEL_LICENSABLE_TARGET_TYPES +EM_LICENSE.FORMAPP_LICENSE_ASSOC_CREATE +EM_LICENSE.FORMAPP_LICENSE_ASSOC_DELETE +EM_LICENSE.GET_ALL_SETUP_DATA +EM_LICENSE.GET_LICENSES_DATA +EM_LICENSE.GET_LICENSES_FOR_TARGET +EM_LICENSE.GET_LICENSE_SETUP_DATA +EM_LICENSE.GET_MY_TARGET_LICENSES +EM_LICENSE.GET_PACKS_DATA +EM_LICENSE.GET_PACK_DEFINITION_DETAILS +EM_LICENSE.GET_PARENT_TARGET_PACKS +EM_LICENSE.GET_SETUP_DATA +EM_LICENSE.GET_TARGET_PACKS +EM_LICENSE.GRANT_LICENSE +EM_LICENSE.IS_TARGET_PACK_LICENSED +EM_LICENSE.REVOKE_LICENSE +EM_LICENSE.SAVE_SETUP_DATA +EM_LICENSE.WEBAPP_LICENSE_ASSOC_CREATE +EM_LICENSE.WEBAPP_LICENSE_ASSOC_DELETE +EM_LICENSING_REPORT. +EM_LICENSING_REPORT.CONSOLIDATED_REPORT +EM_MASTER_AGENT. +EM_MASTER_AGENT.ADD_MASTER_CHANGED_CALLBACK +EM_MASTER_AGENT.CHANGE_MASTER_AGENT +EM_MASTER_AGENT.CLEAR_BLACKOUT_TARGET_LIST +EM_MASTER_AGENT.DELETE_MASTER_CHANGED_CALLBACK +EM_MASTER_AGENT.HANDLE_AGENT_PORT_CHANGE +EM_MASTER_AGENT.INITIALIZE_MASTER_AGENT +EM_MASTER_AGENT.INSTANCE_PRE_DEL_CALLBACK +EM_MASTER_AGENT.IS_MASTER_AGENT_FOR_TS +EM_MASTER_AGENT.MASTER_AGENT_HIST_PURGE +EM_MASTER_AGENT.PROCESS_AGENT_AVAIL_CHANGE +EM_MASTER_AGENT.PROCESS_AGENT_DELETION +EM_MASTER_AGENT.PROCESS_CLUSTER_INST_CHANGES +EM_MASTER_AGENT.PROCESS_INSTANCE_DELETION +EM_MASTER_AGENT.PROCESS_NEW_MASTER_AGENT +EM_MASTER_AGENT.SELECT_MASTER_AGENT +EM_MASTER_AGENT.SET_BLACKOUT_TARGET_LIST +EM_MASTER_AGENT.SET_NEW_MASTER_AGENT +EM_MASTER_AGENT.SUBMIT_MASTER_AGENT_JOB +EM_MASTER_AGENT.SUBMIT_STANDBY_AGENT_JOB +EM_MASTER_AGENT.UPDATE_AGENT_MON_STATUS +EM_METRIC. +EM_METRIC.ADD_CATEGORIES +EM_METRIC.ADD_CATEGORY +EM_METRIC.ADD_CATEGORY_CLASS +EM_METRIC.ADD_METRIC_KEYVAL_CALLBACK +EM_METRIC.ADD_METRIC_METADATA_REG_CB +EM_METRIC.ADD_METRIC_ROW +EM_METRIC.ADD_METRIC_SNAPSHOT_ASSOC +EM_METRIC.ADD_METRIC_SNAPSHOT_ASSOCS +EM_METRIC.ADD_METRIC_VERSION_ROW +EM_METRIC.ADD_OBJECT_CATEGORIES +EM_METRIC.ADD_OBJECT_CATEGORY +EM_METRIC.COPY_METRIC +EM_METRIC.DELETE_METRIC_DATA +EM_METRIC.DEL_METRIC_KEYVAL_CALLBACK +EM_METRIC.DEL_METRIC_METADATA_REG_CB +EM_METRIC.EXEC_CBK_METRIC_KEYVAL +EM_METRIC.EXEC_METRIC_METADATA_REG_CB +EM_METRIC.GET_METRIC_INFO +EM_METRIC.GET_METRIC_INFO_FOR_TARGET +EM_METRIC.HANDLE_METRIC_KEYVAL_DELETION +EM_METRIC.HANDLE_TGTTYPE_ADDITION +EM_METRIC.IS_SERVER_GEN_ALERT_METRIC +EM_METRIC.REMOVE_CATEGORY +EM_METRIC.REMOVE_CATEGORY_CLASS +EM_METRIC.REMOVE_METRIC_ROW +EM_METRIC.REMOVE_METRIC_SNAPSHOT_ASSOC +EM_METRIC.REMOVE_METRIC_SNAPSHOT_ASSOCS +EM_METRIC.REMOVE_METRIC_VERSION_ROW +EM_METRIC.REMOVE_OBJECT_CATEGORIES +EM_METRIC.REMOVE_OBJECT_CATEGORY +EM_METRIC.SET_REPO_TIMING +EM_METRIC.TASK_EXEC_CBK_METRIC_KEYVAL +EM_METRIC.UPDATE_METRIC_ROW +EM_METRIC.UPDATE_METRIC_VERSION_ROW +EM_METRIC_EVAL. +EM_METRIC_EVAL.CHECK_TARGET_LIST +EM_METRIC_EVAL.CONVERT_RESULTS +EM_METRIC_EVAL.DUMMY_EVAL_PROC +EM_METRIC_EVAL.DUMP_METRIC_RESULTS +EM_METRIC_EVAL.EVALUATE_METRIC +EM_METRIC_EVAL.GET_METRIC_INFO +EM_METRIC_EVAL.IS_VALID_SQL +EM_METRIC_EVAL.STORE_METRIC_DATA +EM_METRIC_EVAL.STORE_METRIC_ERRORS +EM_METRIC_UI. +EM_METRIC_UI.ACKNOWLEDGE_ALERT +EM_METRIC_UI.ACKNOWLEDGE_ALERTS +EM_METRIC_UI.ACKNOWLEDGE_AVAIL_ALERT +EM_METRIC_UI.GET_ACKNOWLEDGE_DETAILS +EM_METRIC_UI.GET_ALL_METRICS +EM_PAGE_CUSTMZN. +EM_PAGE_CUSTMZN.ADD_PAGE_CUSTOMZN_METADATA +EM_PAGE_CUSTMZN.GET_MATCHING_CUSTOMZNS +EM_PAGE_CUSTMZN.GET_MATCHING_PAGE_CUSTOMZNS +EM_PING. +EM_PING.ADD_TARGET +EM_PING.DBMSJOB_EXTENDED_SQL_TRACE_ON +EM_PING.DISABLE_DETAILED_LOGGING +EM_PING.DISABLE_PING_SYSTEM +EM_PING.ENABLE_DETAILED_LOGGING +EM_PING.ENABLE_PING_SYSTEM +EM_PING.INSERT_UNRCH_SEVERITIES +EM_PING.IS_DETAILED_LOGGING_ENABLED +EM_PING.IS_PING_SYSTEM_ENABLED +EM_PING.MARK_NODE_STATUS +EM_PING.RECORD_BATCH_HEARTBEAT +EM_PING.START_PING_SYSTEM +EM_PING.UPDATE_EMD_STATUS +EM_POLICY. +EM_POLICY.ADD_COMPOSITE_KEY_ENTRY +EM_POLICY.ADD_OBJECT_POLICY_ASSOC +EM_POLICY.ADD_POLICY +EM_POLICY.ADD_POLICY_ASSOC +EM_POLICY.ADD_POLICY_ASSOC_CFG +EM_POLICY.ADD_POLICY_ASSOC_CFG_PARAM +EM_POLICY.ADD_POLICY_BIND_VAR +EM_POLICY.ADD_POLICY_PARAMETER +EM_POLICY.ADD_POLICY_TYPE_VERSION +EM_POLICY.ADD_VIOL_CTXT_DEF +EM_POLICY.ASSOC_CFG_DEL_HANDLER +EM_POLICY.ASSOC_CFG_PARAMS_DEL_HANDLER +EM_POLICY.AUTO_ASSOCIATE_POLICIES +EM_POLICY.CLEAR_EXPIRED_SUPPRESSIONS +EM_POLICY.CONFIG_KEY_MATCH +EM_POLICY.COPY_ALL_POLICY_ASSOCS +EM_POLICY.COPY_CA_ID +EM_POLICY.COPY_OBJECT_POLICY_ASSOC +EM_POLICY.COPY_OBJECT_POLICY_ASSOC_CFG +EM_POLICY.CREATE_CS_POLICY +EM_POLICY.DBMSJOB_EXTENDED_SQL_TRACE_ON +EM_POLICY.DECREMENT_CA_IDS +EM_POLICY.DELETE_POLICY_DATA +EM_POLICY.DEL_KEYVAL_POLICY +EM_POLICY.DUMP_ACCESS_LIST +EM_POLICY.DUMP_COLLECTION_LIST +EM_POLICY.DUMP_COLL_METRIC_LIST +EM_POLICY.DUMP_COLL_PROP_LIST +EM_POLICY.DUMP_CRED_LIST +EM_POLICY.DUMP_CRED_ROW_LIST +EM_POLICY.DUMP_KEY_COL_COND_LIST +EM_POLICY.DUMP_KEY_VAL_LIST +EM_POLICY.DUMP_METRIC_LIST +EM_POLICY.DUMP_PARAM_VAL_LIST +EM_POLICY.DUMP_POLICY_LIST +EM_POLICY.GET_CA_ID +EM_POLICY.GET_CA_ID_LIST +EM_POLICY.GET_COMPOSITE_KEY_PARTS +EM_POLICY.GET_CONFIG_KEY_DETAILS +EM_POLICY.GET_KEY_DETAILS +EM_POLICY.GET_POLICY_INFO +EM_POLICY.GET_POLICY_INFO_FOR_TARGET +EM_POLICY.HANDLE_DELETE_CA +EM_POLICY.HANDLE_TARGET_DELETE +EM_POLICY.HANDLE_TGTTYPE_ADDITION +EM_POLICY.HANDLE_TYPE_META_VER_CHANGE +EM_POLICY.REMOVE_OBJECT_POLICY_ASSOC +EM_POLICY.REMOVE_OBJECT_POLICY_ASSOCS +EM_POLICY.REMOVE_POLICY +EM_POLICY.REMOVE_POLICY_ASSOCS +EM_POLICY.REMOVE_POLICY_ASSOC_CAS +EM_POLICY.REMOVE_POLICY_ASSOC_CFGS +EM_POLICY.REMOVE_POLICY_ASSOC_CFG_PARAMS +EM_POLICY.REMOVE_POLICY_BIND_VARS +EM_POLICY.REMOVE_POLICY_EVAL_DETAILS +EM_POLICY.REMOVE_POLICY_EVAL_SUMM +EM_POLICY.REMOVE_POLICY_PARAMETER +EM_POLICY.REMOVE_POLICY_PARAMETERS +EM_POLICY.REMOVE_POLICY_TYPE_VERSION +EM_POLICY.REMOVE_VIOL_CTXT_DEFS +EM_POLICY.SET_REPO_TIMING +EM_POLICY.UPDATE_COMPLIANCE_SCORE +EM_POLICY.UPDATE_POLICY +EM_POLICY.UPDATE_POLICY_ASSOC +EM_POLICY.UPDATE_POLICY_ASSOC_CFG +EM_POLICY.UPDATE_POLICY_ASSOC_CFG_PARAM +EM_POLICY.UPDATE_POLICY_EVAL_DETAIL +EM_POLICY.UPDATE_POLICY_EVAL_SUMM +EM_POLICY.UPDATE_POLICY_PARAMETER +EM_POLICY.UPDATE_VIOL_CTXT_DEF +EM_POLICY_ASSOC_CFG_PARAMS. +EM_POLICY_EVAL. +EM_POLICY_EVAL.EVALUATE_POLICY +EM_POLICY_EVAL.EVALUATE_THRESHOLDS +EM_POLICY_EVAL.EVAL_CONDITION_TEXT +EM_POLICY_EVAL.GET_NEW_VIOLATION_STATUS +EM_POLICY_EVAL.GET_SET_COMPOSITE_KEY +EM_POLICY_EVAL.INITIALIZE_COUNTERS +EM_POLICY_EVAL.IS_VALID_CONDITION +EM_POLICY_EVAL.KEY_MATCH +EM_POLICY_EVAL.LOG_VIOLATION +EM_PURGE. +EM_PURGE.ADD_PURGE_POLICY +EM_PURGE.ADD_PURGE_POLICY_GROUP +EM_PURGE.ADD_TARGET +EM_PURGE.ADD_TARGET_POLICY_DETAILS +EM_PURGE.APPLY_PURGE_POLICIES +EM_PURGE.CONFIGURE_PURGE_POLICY +EM_PURGE.DBMSJOB_EXTENDED_SQL_TRACE_ON +EM_PURGE.DISABLE_DEBUGGING +EM_PURGE.DISABLE_DETAILED_LOGGING +EM_PURGE.DISABLE_PURGE_POLICY +EM_PURGE.DROP_PURGE_POLICY +EM_PURGE.DROP_PURGE_POLICY_GROUP +EM_PURGE.ENABLE_DEBUGGING +EM_PURGE.ENABLE_DETAILED_LOGGING +EM_PURGE.ENABLE_PURGE_POLICY +EM_PURGE.IS_DETAILED_LOGGING_ENABLED +EM_PURGE.MODIFY_PURGE_POLICY +EM_PURGE.MODIFY_PURGE_POLICY_GROUP +EM_PURGE.REMOVE_PURGE_POLICY_JOBS +EM_PURGE.SUBMIT_PURGE_POLICY_JOBS +EM_RAC_LICENSE. +EM_RAC_LICENSE.GET_ASM_DATA +EM_RAC_LICENSE.GET_CLUSTER_GUID +EM_RAC_LICENSE.GRANT_RACDB_LICENSEINFO +EM_RAC_LICENSE.IS_RACMEMBER +EM_RAC_LICENSE.RAC_LICENSE_ASSOC_CREATE +EM_RAC_LICENSE.RAC_LICENSE_ASSOC_DELETE +EM_REP_METRIC. +EM_REP_METRIC.ADD_DUMMY_COLLECTION +EM_REP_METRIC.ADD_METRIC_SEVERITY_DEPS +EM_REP_METRIC.ADD_REPO_METRIC_COLLECTION +EM_REP_METRIC.CLEANUP_MEMBER_ASSOC_DEP +EM_REP_METRIC.CLEANUP_RUNS_ON_ASSOC_DEP +EM_REP_METRIC.COMPUTE_EVAL_ORDER +EM_REP_METRIC.COMPUTE_PARENT_EVAL_ORDER +EM_REP_METRIC.DELETE_DEPENDENCY_TARGET +EM_REP_METRIC.DELETE_DUMMY_COLLECTION +EM_REP_METRIC.DELETE_METRIC_SEVERITY_DEPS +EM_REP_METRIC.DELETE_REPO_METRIC_COLLECTION +EM_REP_METRIC.GET_COLLECTION_NAME +EM_REP_METRIC.GET_REPO_METRIC_EVAL_PROC +EM_REP_METRIC.HANDLE_ADD_TARGET +EM_REP_METRIC.HANDLE_METRIC_KEYVAL_DELETION +EM_REP_METRIC.HANDLE_TGTTYPE_ADDITION +EM_REP_METRIC.INIT_COLLECTION_TIMESTAMP +EM_REP_METRIC.INIT_TGT_COLLECTION_TIMESTAMP +EM_REP_METRIC.IS_REPO_SIDE_AVAILABILITY +EM_REP_METRIC.LOCK_TARGET_DEPS +EM_REP_METRIC.MEMBER_ADDED_CALLBACK +EM_REP_METRIC.MEMBER_DELETED_CALLBACK +EM_REP_METRIC.MODIFY_REPO_METRIC_COLLECTION +EM_REP_METRIC.MODIFY_REPO_METRIC_DEPS +EM_REP_METRIC.REMOVE_BCN_DEPENDENCY +EM_REP_METRIC.RUN_METRIC_EVAL +EM_REP_METRIC.SET_ALL_REPO_COLL_INTERVAL +EM_REP_METRIC.SET_REPO_METRIC_EVAL_PROC +EM_REP_METRIC.SUSPEND_NULL_DEP_DATA_COLL +EM_REP_METRIC.TARGET_DELETED_CALLBACK +EM_REP_METRIC.UPGRADE10R1COLLECTION +EM_SEC. +EM_SEC.DELETE_AGENT_KEY +EM_SEC.GET_AGENT_EWALLET +EM_SEC.GET_AGENT_IPW +EM_SEC.GET_AGENT_KEY +EM_SEC.GET_B64_INTERNET_CA +EM_SEC.GET_B64_LOCAL_CA +EM_SEC.GET_CA +EM_SEC.GET_IPW +EM_SEC.GET_IPW_INFO +EM_SEC.GET_SEC_SLB_PORT +EM_SEC.PROCESS_AUTH +EM_SEC.PROCESS_INIT +EM_SEC.SET_AGENT_IPW +EM_SEC.SET_AGENT_KEY +EM_SEC.SET_CA +EM_SEC.SET_IPW +EM_SEC.UPDATE_AGENT_EWALLET +EM_SEC.UPDATE_B64_INTERNET_CA +EM_SEC.UPDATE_B64_LOCAL_CA +EM_SEC.VERIFY_IPW +EM_SERVICE. +EM_SERVICE.ASSOC_ADDITION_CALLBACK +EM_SERVICE.ASSOC_DELETION_CALLBACK +EM_SERVICE.CHECK_LOOP_CONTAINMENT +EM_SERVICE.INFER_SYSTEM +EM_SERVICE.INITIALIZE_SERVICE_TYPE +EM_SEVERITY. +EM_SEVERITY.ADD_TARGET +EM_SEVERITY.ADD_VIOLATION_CONTEXT +EM_SEVERITY.ADD_VIOLATION_CTXT_ROW +EM_SEVERITY.AVAILABILITY_PURGE +EM_SEVERITY.CLEAR_ALERTS +EM_SEVERITY.CLEAR_ALERTS_FOR_KEY +EM_SEVERITY.CLEAR_EXCEPTED_KEY +EM_SEVERITY.CLEAR_OPEN_ALERTS +EM_SEVERITY.CONVERT_KEYS +EM_SEVERITY.DELETE_CURRENT_SEVERITY +EM_SEVERITY.DELETE_CURRENT_VIOLATION +EM_SEVERITY.DELETE_VIOLATION +EM_SEVERITY.DEL_KEYVAL_CURR_VIOLATION +EM_SEVERITY.DEL_KEYVAL_VIOLATION +EM_SEVERITY.EXEC_CRS_EVENT_CALLBACKS +EM_SEVERITY.EXTEND_AVAIL_MARKER +EM_SEVERITY.GET_AGENT_GUID +EM_SEVERITY.GET_AVAIL_CURSOR +EM_SEVERITY.GET_AVAIL_CURSOR_BETWEEN +EM_SEVERITY.GET_AVAIL_STRING +EM_SEVERITY.GET_SEVERITY_LABELS +EM_SEVERITY.GET_SEVERITY_SEGMENTS +EM_SEVERITY.GET_SEVERITY_STRING +EM_SEVERITY.GET_STATUS_ORDER +EM_SEVERITY.INSERT_VIOLATION +EM_SEVERITY.IS_AGENT_UNREACHABLE +EM_SEVERITY.IS_SEV_IN_BLACKOUT +EM_SEVERITY.IS_SEV_IN_BLACKOUT_WRAP +EM_SEVERITY.LOCK_AVAIL_FOR_AGT +EM_SEVERITY.LOCK_AVAIL_FOR_TGT +EM_SEVERITY.LOG_ERROR +EM_SEVERITY.LOG_EXTERNAL_ALERT +EM_SEVERITY.PROCESS_AGENT_DOWN_SEV +EM_SEVERITY.PROCESS_AGENT_UP_SEV +EM_SEVERITY.PROCESS_SIMPLE_AVAIL +EM_SEVERITY.PROCESS_UNREACHABLE_CLEAR +EM_SEVERITY.PROCESS_UNREACHABLE_START +EM_SEVERITY.PURGE_CYCLE +EM_SEVERITY.PURGE_FOR_VIOLATION_GUIDS +EM_SEVERITY.PURGE_VIOLATIONS +EM_SEVERITY.REMOVE_VIOLATION_CONTEXT +EM_SEVERITY.SEVERITY_PURGE +EM_SEVERITY.STATELESS_SEVERITY_CLEAR +EM_SEVERITY.STATE_MATCHES_PREBLKOUT_STATE +EM_SEVERITY.UPDATE_AVAILABILITY_MARKER +EM_SEVERITY.UPDATE_CURRENT_AVAILABILITY +EM_SEVERITY.UPDATE_CURRENT_SEVERITY +EM_SEVERITY.UPDATE_CURRENT_VIOLATION +EM_SEVERITY.UPDATE_GROUP_AVAILABILITY +EM_SEVERITY.UPDATE_VIOLATION +EM_SEVERITY.VIOL_MATCHES_PRE_STATE +EM_SEVERITY_REPOS. +EM_SEVERITY_REPOS.CALC_DEP_AVAIL_MARKER +EM_SEVERITY_REPOS.DBMSJOB_EXTENDED_SQL_TRACE_ON +EM_SEVERITY_REPOS.EVALUATE_METRIC_SEVERITY +EM_SEVERITY_REPOS.EVALUATE_NON_RS_SEVERITIES +EM_SEVERITY_REPOS.EVALUATE_TARGET_SEVERITIES +EM_SEVERITY_REPOS.EXECUTE_REPOS_SEVERITY_EVAL +EM_SEVERITY_REPOS.GET_DEPENDENCIES +EM_SEVERITY_REPOS.SET_TARGET_STATUS +EM_SEVERITY_REPOS.STATUS_SEV_OUT_OF_SYNC +EM_SEVERITY_REPOS.SYNC_EVAL_PARENT_SEVERITIES +EM_SEVERITY_REPOS.SYNC_EVAL_TARGET_SEVERITIES +EM_SL. +EM_SL.DELETE_SERVICE_LEVEL +EM_SL.DELETE_SL +EM_SL.GET_METRICGUIDS_FROM_NAMES +EM_SL.GET_SERVICE_LEVEL +EM_SL.SET_SERVICE_LEVEL +EM_SL.UPDATE_SL +EM_SL.UPDATE_SL_KEYVAL_DELETE +EM_SYSTEM. +EM_SYSTEM.CREATE_SYSTEM +EM_SYSTEM.DELETE_SYSTEM +EM_SYSTEM.GET_IMPACTED_SERVICES +EM_SYSTEM.IS_SYSTEM +EM_SYSTEM.MEMBER_DELETION_CALLBACK +EM_SYSTEM.MODIFY_SYSTEM +EM_SYSTEM.RUNS_ON_DELETION_CALLBACK +EM_SYSTEM.SYSTEM_PRE_DEL_CALLBACK +EM_SYSTEM.UPSERT_SYSTEM +EM_SYSTEM_DASHBOARD. +EM_SYSTEM_DASHBOARD.GET_ALERT_INFO +EM_SYSTEM_DASHBOARD.GET_AVAILABILITY_STATUS_DESC +EM_SYSTEM_DASHBOARD.GET_DASHBOARD_PREFERENCES +EM_SYSTEM_DASHBOARD.GET_SEVERITY_DESCRIPTION +EM_SYSTEM_DASHBOARD.GET_SYSTEM_DETAILS +EM_SYSTEM_DASHBOARD.GET_TARGET_INFO_FULL +EM_SYSTEM_DASHBOARD.GET_TARGET_INFO_ROLLUP +EM_TARGET. +EM_TARGET.ADD_AGGREGATE_TARGET +EM_TARGET.ADD_TARGET +EM_TARGET.ADD_TARGET_TYPE_VERSION +EM_TARGET.ADD_TGT_POST_DELETION_CALLBACK +EM_TARGET.ADD_TGT_PRE_DELETION_CALLBACK +EM_TARGET.CHECK_IS_DEF_TARGET_FACTORY +EM_TARGET.CHECK_TYPE_VER_GUID +EM_TARGET.COMPARE_TYPE_META_VERS +EM_TARGET.DELETE_AGENT_TARGET +EM_TARGET.DELETE_AGENT_TARGET_INTERNAL +EM_TARGET.DELETE_EMPTY_CLUSTER_TARGET +EM_TARGET.DEL_TGT_POST_DELETION_CALLBACK +EM_TARGET.DEL_TGT_PRE_DELETION_CALLBACK +EM_TARGET.EXEC_METAVER_UPD_CALLBACK +EM_TARGET.EXEC_TGT_POST_DEL_CALLBACKS +EM_TARGET.EXEC_TGT_PRE_DEL_CALLBACKS +EM_TARGET.GENERATE_TARGET_TYPE_GUID +EM_TARGET.GENERATE_TYPE_VER_GUID +EM_TARGET.GET_AGENT_VERSION +EM_TARGET.GET_CLUSTER_TARGET_INFO +EM_TARGET.GET_FACTORY_TYPE +EM_TARGET.GET_REPOSITORY_TIMEZONE +EM_TARGET.GET_RESPONSE_METRIC_GUID +EM_TARGET.GET_TYPE_REGISTRATION_LOCK +EM_TARGET.GET_TYPE_VER_GUID +EM_TARGET.IS_AGENT_MONITORING_TARGET +EM_TARGET.MODIFY_AGGREGATE_TARGET +EM_TARGET.MODIFY_TARGET +EM_TARGET.REMOVE_CLUSTER_MEMBER +EM_TARGET.SET_MASTER_AGENT +EM_TARGET.SET_REPOSITORY_TIMEZONE +EM_TARGET.SET_TARGET_TZRGN +EM_TARGET.TYPE_META_VER_TO_NUM +EM_TARGETS_DELETE. +EM_TARGET_RELOCATE. +EM_TARGET_RELOCATE.ADD_TGT_RELOCATION_CALLBACK +EM_TARGET_RELOCATE.CHECK_IF_DUPLICATE_TARGET +EM_TARGET_RELOCATE.CHECK_PRECONDITIONS +EM_TARGET_RELOCATE.COMPARE_AGENT_VERSIONS +EM_TARGET_RELOCATE.DELETE_TGT_RELOCATION_CALLBACK +EM_TARGET_RELOCATE.EXEC_TGT_RELOCATION_CALLBACKS +EM_TARGET_RELOCATE.FIND_AGENT_MONITORING_FOR_TGT +EM_TARGET_RELOCATE.FIND_EMD_URL_FOR_TARGET +EM_TARGET_RELOCATE.FIND_TARGET_GUID +EM_TARGET_RELOCATE.GET_CLI_BLACKOUTS_FOR_TARGET +EM_TARGET_RELOCATE.GET_RELATED_TARGETS +EM_TARGET_RELOCATE.IS_CLUSTER_TARGET +EM_TARGET_RELOCATE.RELOCATE_MASTER_AGENT +EM_TARGET_RELOCATE.UPDATE_TABLES_FOR_RELOCATION +EM_TARGET_UI. +EM_TARGET_UI.GET_TARGETS_BY_HOST_ASSOC +EM_TARGET_UI.GET_TARGETS_BY_HOST_WITH_PRIV +EM_TARGET_UI.GET_TARGETS_INFO +EM_TARGET_UI.GET_TYPES_IN_TARGET_SELECTION +EM_TARGET_UI.GET_VALUE_STRING +EM_TASK. +EM_TASK.CREATE_TASK +EM_TASK.CREATE_WORKER +EM_TASK.DBMSJOB_EXTENDED_SQL_TRACE_ON +EM_TASK.DEQUEUE_TASK +EM_TASK.ENQUEUE_TASK +EM_TASK.GET_NEXT_EXECUTION_TIME +EM_TASK.GET_NEXT_TIME_UTC +EM_TASK.GET_TASK_INFO +EM_TASK.LOCK_TASK +EM_TASK.REMOVE_TASK +EM_TASK.REMOVE_WORKER +EM_TASK.RESUBMIT_FAILED_TASK +EM_TASK.RUN_TASK +EM_TASK.RUN_TASKS +EM_TASK.SCHEDULE_NEXT_EXECUTION +EM_TASK.SET_MAX_RUN_TIME_WORKER +EM_TASK.SET_MIN_INTERVAL +EM_TASK.STOP_WORKER +EM_TASK.STOP_WORKERS +EM_TASK.UPDATE_TASK +EM_TASK.WORKER +EM_TEMPLATE. +EM_TEMPLATE.APPLY_TEMPLATE +EM_TEMPLATE.CREATE_TEMPLATE +EM_TEMPLATE.GENERATE_TEMPLATE_COPY_GUID +EM_TEMPLATE.GENERATE_TEMPLATE_GUID +EM_TEMPLATE.GET_OBJECT_SETTINGS +EM_TOPOLOGY. +EM_TOPOLOGY.CLEAN_TOPOLOGY_TABLES +EM_TOPOLOGY.GET_BACKGROUND_IMAGE +EM_TOPOLOGY.GET_GRAPH_PROPERTIES +EM_TOPOLOGY.GET_NODE_POSITIONS +EM_TOPOLOGY.UPDATE_BACKGROUND_IMAGE +EM_TOPOLOGY.UPDATE_GRAPH_PROPERTIES +EM_TOPOLOGY.UPDATE_NODE_POSITIONS +EM_TYPE_REGISTRY. +EM_TYPE_REGISTRY.UPSERT_METRIC +EM_TYPE_REGISTRY.UPSERT_TARGET_ASSOC_DEF +EM_UPDATE_COLLECTION. +EM_UPDATE_COLL_ITEM_PROPERTY. +EM_UPDATE_POLICY_CFG. +EM_UPDATE_VIOLATIONS. +EM_VIOLATION_CHECKS. +EM_VIOLATION_DELETE. +EM_VIOLATION_STMT_INS. +EM_VIOLATION_UPDATE. +ENABLE +ENABLED +ENABLED_BY_SCHEDULER +ENABLED_STATUS +ENABLED_THREAD_MAP +ENABLE_CHANGE# +ENABLE_OPTION +ENABLE_TIME +ENCRYPT +ENCRYPT. +ENCRYPTBYTES. +ENCRYPTED +ENCRYPTEDKEY +ENCRYPTEDTS +ENCRYPTIONALG +ENCRYPTION_ALG +ENCRYPT_IN_BACKUP +ENCRYTPEDKEY +ENDIAN_FORMAT +ENDOFFSET +ENDPOINT_ACTUAL_VALUE +ENDPOINT_NUMBER +ENDPOINT_VALUE +END_DATE +END_ID +END_INTERVAL_TIME +END_OF_FETCH_COUNT +END_OF_FETCH_COUNT_DELTA +END_OF_FETCH_COUNT_TOTAL +END_OF_REDO +END_OF_REDO_TYPE +END_ROWID +END_SCN +END_SNAP_ID +END_SNAP_TIME +END_TIME +END_TS +ENQUEUED_DELAY_MSGS +ENQUEUED_EXPIRY_MSGS +ENQUEUED_MSGS +ENQUEUE_CPU_TIME +ENQUEUE_ENABLED +ENQUEUE_MESSAGE_CREATE_TIME +ENQUEUE_MESSAGE_NUMBER +ENQUEUE_TIME +ENQUEUE_TRANSACTIONS +ENTITY_ID +ENTITY_SEQUENCE +ENTRYID +ENTRY_NUMBER +ENV +EQ_NAME +EQ_TYPE +ERRCALLSPERSEC +ERRNUM +ERROR +ERROR# +ERRORS +ERROR_ARG1 +ERROR_ARG10 +ERROR_ARG11 +ERROR_ARG12 +ERROR_ARG2 +ERROR_ARG3 +ERROR_ARG4 +ERROR_ARG5 +ERROR_ARG6 +ERROR_ARG7 +ERROR_ARG8 +ERROR_ARG9 +ERROR_CNT +ERROR_CODE +ERROR_COUNT +ERROR_CREATION +ERROR_CREATION_TIME +ERROR_DATE +ERROR_FACILITY +ERROR_HANDLER +ERROR_INSTANCE_ID +ERROR_INSTANCE_SEQUENCE +ERROR_MESSAGE +ERROR_MSG +ERROR_NUMBER +ERROR_PARAMETER1 +ERROR_PARAMETER2 +ERROR_PARAMETER3 +ERROR_PARAMETER4 +ERROR_PARAMETER5 +ERROR_SIZE +ERROR_TYPE +ERR_NUMBER +ESC +ESCALATED_HANG +ESCAPE_SC. +ESM. +ESM.CREATE_POLICY +ESM.DELETE_POLICY +ESM.DELETE_POLICY_METADATA +ESM.EVAL_POLICY10GR1 +ESM.EVAL_POLICY10GR2 +ESM.GET_CONSOLE_HOMEPAGE_INFO +ESM.GET_REPOSITORY_TARGETS +ESM.MODIFY_POLICY +ESTD_CACHE_WRITES +ESTD_CACHE_WRITE_FACTOR +ESTD_CLUSTER_AVAILABLE_TIME +ESTD_CLUSTER_READS +ESTD_CLUSTER_READ_TIME +ESTD_DB_TIME +ESTD_DB_TIME_FACTOR +ESTD_EXTRA_BYTES_RW +ESTD_LC_LOAD_TIME +ESTD_LC_LOAD_TIME_FACTOR +ESTD_LC_MEMORY_OBJECTS +ESTD_LC_MEMORY_OBJECT_HITS +ESTD_LC_SIZE +ESTD_LC_TIME_SAVED +ESTD_LC_TIME_SAVED_FACTOR +ESTD_MULTIPASSES_EXECUTIONS +ESTD_ONEPASS_EXECUTIONS +ESTD_OPTIMAL_EXECUTIONS +ESTD_OVERALLOC_COUNT +ESTD_PCT_OF_DB_TIME_FOR_READS +ESTD_PGA_CACHE_HIT_PERCENTAGE +ESTD_PHYSICAL_READS +ESTD_PHYSICAL_READ_FACTOR +ESTD_PHYSICAL_READ_TIME +ESTD_SPILL_COUNT +ESTD_SPILL_TIME +ESTD_TIME +ESTD_TOTAL_EXECUTIONS +ESTD_TOTAL_IOS +ESTD_TOTAL_IO_FACTOR +ESTD_TOTAL_WRITES +ESTD_TOTAL_WRITE_FACTOR +ESTD_UNSPILL_COUNT +ESTD_UNSPILL_TIME +ESTIMATE +ESTIMATED_CPU_TIME +ESTIMATED_DATA_LOSS +ESTIMATED_DOP +ESTIMATED_DURATION +ESTIMATED_EXECUTION_LIMIT_HIT +ESTIMATED_EXECUTION_TIME +ESTIMATED_FLASHBACK_SIZE +ESTIMATED_IO_RATE +ESTIMATED_MTTR +ESTIMATED_ONEPASS_SIZE +ESTIMATED_OPTIMAL_SIZE +ESTIMATED_REPAIR_TIME +ESTIMATED_TEMP +ESTIMATED_UNDO_RATE +ESTIMATED_WEIGHT +ESTIMATE_TYPE +EST_MINUTES +EST_RATE +EST_REPAIR_TIME +EST_WORK +ET_ATTR_PREFIX +EVALUATE_CA. +EVALUATE_CV. +EVALUATE_VA. +EVALUATE_VV. +EVALUATIONS +EVALUATION_CONTEXT_COMMENT +EVALUATION_CONTEXT_NAME +EVALUATION_CONTEXT_OBJECT_ID +EVALUATION_CONTEXT_OWNER +EVALUATION_FUNCTION +EVALUATION_FUNCTION_CALLS +EVALUATION_INTERVAL +EVAL_RULE +EVENT +EVENT# +EVENT_CONDITION +EVENT_DATE +EVENT_FLAG +EVENT_ID +EVENT_NAME +EVENT_QUEUE_AGENT +EVENT_QUEUE_NAME +EVENT_QUEUE_OWNER +EVENT_RULE +EVENT_SCHEDULE_NAME +EVENT_SCHEDULE_OWNER +EVENT_TIME +EVENT_TIMESTAMP +EVICTDC +EXACT_MATCHING_SIGNATURE +EXCEPTION_CLASS +EXCEPTION_ID +EXCEPTION_INDEX +EXCLUDE +EXE +EXECPLAN_DELETE_TRIGGER. +EXECPLAN_INSERT_TRIGGER. +EXECUTED +EXECUTE_EVENT +EXECUTIONS +EXECUTIONS_DELTA +EXECUTIONS_TOTAL +EXECUTION_CONTEXT_ID +EXECUTION_CONTEXT_SEQUENCE +EXECUTION_COUNT +EXECUTION_DESCRIPTION +EXECUTION_END +EXECUTION_ID +EXECUTION_LAST_MODIFIED +EXECUTION_NAME +EXECUTION_SEQUENCE +EXECUTION_START +EXECUTION_TYPE +EXECUTION_TYPE# +EXECUTION_WAITERS +EXF$ATTRIBUTE.EXF$ATTRIBUTE +EXF$CHECK_PRIVILEGE. +EXF$CURRUSER. +EXF$DBMS_EXPFIL_SYSPACK. +EXF$DBMS_EXPFIL_SYSPACK.CLR_EXP_DEPACTION +EXF$DBMS_EXPFIL_SYSPACK.CLR_OBJECT_NOEXP +EXF$DBMS_EXPFIL_SYSPACK.CLR_USER_NOEXP +EXF$DBMS_EXPFIL_SYSPACK.DOWNGRADE_COMPILED_SPARSE +EXF$DBMS_EXPFIL_SYSPACK.GET_CMTSCN_FOR_XID +EXF$DBMS_EXPFIL_SYSPACK.GET_EXPRID_4M_TEXTID +EXF$DBMS_EXPFIL_SYSPACK.GET_SPATIAL_MDATAREP +EXF$DBMS_EXPFIL_SYSPACK.GET_TAB_NAME +EXF$DBMS_EXPFIL_SYSPACK.GET_TAB_OWNER +EXF$DBMS_EXPFIL_SYSPACK.GET_TYPELV_STATUS +EXF$DBMS_EXPFIL_SYSPACK.GET_TYPE_OID +EXF$DBMS_EXPFIL_SYSPACK.PARSE_PROC_AS_OWNER +EXF$DBMS_EXPFIL_SYSPACK.PROC_IS_DEFINERS +EXF$DBMS_EXPFIL_SYSPACK.SET_EXP_DEPACTION +EXF$DBMS_EXPFIL_SYSPACK.SET_OBJECT_NOEXP +EXF$DBMS_EXPFIL_SYSPACK.TAB_COLUMN_EXISTS +EXF$EXPCORRCHKOCI. +EXF$EXPFUNCLISTCHK. +EXF$EXPISVALID. +EXF$TEXT2EXPRID. +EXF$VALIDATEDATAITEM. +EXF$XPATH_TAG.EXF$XPATH_TAG +EXF$XPDUMPTAGSINFO. +EXISTENT +EXPAND_GSET_TO_UNION +EXPAND_TABLE +EXPBLKRELCNT +EXPBLKREUCNT +EXPECTED_ERROR# +EXPECTED_ERROR_MESSAGE +EXPECTED_ROW_COUNT +EXPECTED_SIZE +EXPFIL_ALTEREXPTAB_MAINT. +EXPFIL_DROPOBJ_MAINT. +EXPFIL_DROPUSR_MAINT. +EXPFIL_RESTRICT_TYPEEVOLVE. +EXPIRATION +EXPIRED +EXPIREDBLKS +EXPIRED_MSGS +EXPIRY_DATE +EXPLAIN_PLAN_CURSOR +EXPORT_REQUIRED +EXPORT_SCN +EXPORT_TIME +EXPORT_VERSION +EXPRESSION +EXPRESSIONINDEXMETHODS.ODCIGETINTERFACES +EXPRESSIONINDEXMETHODS.ODCIINDEXALTER +EXPRESSIONINDEXMETHODS.ODCIINDEXCLOSE +EXPRESSIONINDEXMETHODS.ODCIINDEXCREATE +EXPRESSIONINDEXMETHODS.ODCIINDEXDELETE +EXPRESSIONINDEXMETHODS.ODCIINDEXDROP +EXPRESSIONINDEXMETHODS.ODCIINDEXFETCH +EXPRESSIONINDEXMETHODS.ODCIINDEXGETMETADATA +EXPRESSIONINDEXMETHODS.ODCIINDEXINSERT +EXPRESSIONINDEXMETHODS.ODCIINDEXSTART +EXPRESSIONINDEXMETHODS.ODCIINDEXTRUNCATE +EXPRESSIONINDEXMETHODS.ODCIINDEXUPDATE +EXPRESSIONINDEXMETHODS.ODCIINDEXUTILCLEANUP +EXPRESSIONINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +EXPRESSIONINDEXMETHODS.PVTCREATE_EXPFIL_INSTANCE +EXPRESSIONINDEXSTATS.ODCIGETINTERFACES +EXPRESSIONINDEXSTATS.ODCISTATSCOLLECT +EXPRESSIONINDEXSTATS.ODCISTATSDELETE +EXPRESSIONINDEXSTATS.ODCISTATSFUNCTIONCOST +EXPRESSIONINDEXSTATS.ODCISTATSINDEXCOST +EXPRESSIONINDEXSTATS.ODCISTATSSELECTIVITY +EXPR_CORR_CHECK +EXPSTEALCNT +EXP_TYPE +EXP_VERSION +EXTENDED_TIMESTAMP +EXTENDS +EXTENSION +EXTENSION_ID +EXTENSION_NAME +EXTENSION_STATUS +EXTENTS +EXTENTS_CACHED +EXTENTS_COALESCED +EXTENTS_USED +EXTENT_HITS +EXTENT_ID +EXTENT_MANAGEMENT +EXTENT_SIZE +EXTERNAL_ATTR_NAME +EXTERNAL_COLUMN_NAME +EXTERNAL_FILE +EXTERNAL_NAME +EXTERNAL_VAR_NAME +EXT_ELEM_OFF +EXT_FILE_OFF +EXT_NAME +EXT_NUM +EXT_SIZE +EXT_TYPE +EX_OR_INCLUDE +FACILITY +FACT +FACTORIZE_JOIN +FAILED_OVER +FAILED_REQ# +FAILGROUP +FAILGROUP_TYPE +FAILOVER_DELAY +FAILOVER_METHOD +FAILOVER_RETRIES +FAILOVER_TYPE +FAILURE +FAILURES +FAILURE_COUNT +FAILURE_ID +FAILURE_REASON +FAIL_BLOCK +FAIL_DATE +FAIL_RESULTS +FAIL_SEQUENCE +FAIL_TIME +FAIRNESS_CLEARS +FAIRNESS_DOWN_CONVERTS +FAL +FALLBACK42_TAB$XD. +FALLBACK43_TAB$XD. +FALLBACK61_TAB$XD. +FALLBACK62_TAB$XD. +FAST_REFRESHABLE +FAST_START_IO_TARGET_REDO_BLKS +FATAL_BACKGROUND +FBK +FBTSCAN +FCOUNT +FDG_ID +FDG_SET_ID +FDS_CLASS_ID +FDS_INST_ID +FEATURE_INFO +FETCHES +FETCHES_DELTA +FETCHES_TOTAL +FIELDS +FIELD_CLASS +FIELD_COUNT +FIELD_INDEX +FIELD_NAME +FILE# +FILEHANDLE +FILEID +FILENAME +FILENUM +FILESIZE +FILESIZE_DISPLAY +FILETYPE +FILETYPE_ID +FILETYPE_KEY +FILETYPE_NAME +FILE_BLOCK_SIZE +FILE_CFGID +FILE_DIRECTORY +FILE_GROUP_NAME +FILE_GROUP_OWNER +FILE_ID +FILE_ID_MD +FILE_INCARNATION +FILE_MAP_IDX +FILE_MAXSIZE +FILE_NAME +FILE_NEXTS +FILE_NO +FILE_NUMBER +FILE_OFFSET +FILE_SIZE +FILE_SIZE_BLKS +FILE_SIZE_COPY +FILE_SIZE_MD +FILE_SPEC +FILE_STATE +FILE_STATUS +FILE_STRUCTURE +FILE_TIMESTAMP +FILE_TIMESTAMP_COPY +FILE_TIMESTAMP_MD +FILE_TYPE +FILE_WATCHER_NAME +FILE_WATCHER_OWNER +FILTERED +FILTERS_USED +FILTER_COLUMNS +FILTER_CONDITION +FILTER_NAME +FILTER_PREDICATES +FILTER_SET_NAME +FINAL +FINAL_BLOCKING_INSTANCE +FINAL_BLOCKING_SESSION +FINAL_BLOCKING_SESSION_STATUS +FINAL_SIZE +FINDINGS +FINDING_ID +FINDING_NAME +FINISH_TIME +FIRE_APPLY_TRIGGER +FIRE_ONCE +FIRSTINC_TIME +FIRST_ACTIVITY_TIME +FIRST_CHANGE# +FIRST_CHANGE_TIME +FIRST_DB_REPORT_TIME +FIRST_EM_REPORT_TIME +FIRST_HIT_EVALUATIONS +FIRST_INCIDENT +FIRST_INDEX +FIRST_LOAD_TIME +FIRST_MESSAGE_CREATE_TIME +FIRST_MESSAGE_NUMBER +FIRST_MESSAGE_POSITION +FIRST_MESSAGE_TIME +FIRST_NONLOGGED_SCN +FIRST_NONLOGGED_TIME +FIRST_POSITION +FIRST_REFRESH_TIME +FIRST_REPORT_TIME +FIRST_ROWS +FIRST_SCN +FIRST_TIME +FIRST_USAGE_DATE +FIXED +FIXED_DATA_LENGTH +FIXED_SIZE +FIXED_TABLE_SEQUENCE +FIXWRITE_TIME +FLAG +FLAGS +FLASHBACK_ARCHIVE# +FLASHBACK_ARCHIVE_MISMATCH +FLASHBACK_ARCHIVE_NAME +FLASHBACK_CURSOR +FLASHBACK_DATA +FLASHBACK_DATABASE_ALLOWED +FLASHBACK_ON +FLASHBACK_SCN +FLASHBACK_SIZE +FLASHBACK_TABLE_MISMATCH +FLASH_CACHE +FLAVOR_ID +FLOOD_CONTROLLED +FLOOD_CONTROL_STR +FLUSH1 +FLUSH10 +FLUSH100 +FLUSH1000 +FLUSH10000 +FLUSHES +FLUSHES_QUEUED +FLUSH_ELAPSED +FLUSH_MAX_TIME +FLUSH_QUEUE_FULL +FNAME +FOLDER36_TAB$XD. +FORCE +FORCED_READS +FORCED_WRITES +FORCE_HARD_PARSE +FORCE_LOGGING +FORCE_MATCHING +FORCE_MATCHING_SIGNATURE +FORCE_TIME +FORCE_XML_QUERY_REWRITE +FOREIGNKEY745_TAB$XD. +FOREIGN_CREATION_CHANGE# +FOREIGN_CREATION_TIME +FOREIGN_DBID +FORMAT +FORMATID +FORWARD_BLOCK +FORWARD_BLOCK_DBLINK +FREE +FREED_EXTENTS +FREELISTS +FREELIST_GROUPS +FREEPOOLS +FREEZE_TIME +FREE_BLOCKS +FREE_BUFFER_INSPECTED +FREE_BUFFER_WAIT +FREE_COUNT +FREE_EXTENTS +FREE_GC_ELEMENTS +FREE_LOCK_ELEMENTS +FREE_MB +FREE_REQUESTS +FREE_SPACE +FREQUENCY +FRESHNESS +FRESHNESS_DATE +FRESHNESS_SCN +FROM_ADDRESS +FROM_COLUMN_NAME +FROM_HASH +FROM_SCHEMA_NAME +FROM_TABLE_NAME +FROM_TYPE +FROM_VAL +FROZEN +FR_OPERATIONS +FS_FAILOVER_CURRENT_TARGET +FS_FAILOVER_OBSERVER_HOST +FS_FAILOVER_OBSERVER_PRESENT +FS_FAILOVER_STATUS +FS_FAILOVER_THRESHOLD +FS_NAME +FTP-LOG21_TAB$XD. +FTPURITYPE.CREATEFTPURI +FTPURITYPE.FTPURITYPE +FTPURITYPE.GETBLOB +FTPURITYPE.GETCLOB +FTPURITYPE.GETCONTENTTYPE +FTPURITYPE.GETEXTERNALURL +FTPURITYPE.GETURL +FTPURITYPE.GETXML +FULL +FULLREFRESHTIM +FULL_INSTANTIATION +FULL_NAME +FULL_PROPERTY_VALUE +FULL_SIZE +FUNCIDX_STATUS +FUNCSTATS.ODCIGETINTERFACES +FUNCSTATS.ODCISTATSCOLLECT +FUNCSTATS.ODCISTATSDELETE +FUNCSTATS.ODCISTATSFUNCTIONCOST +FUNCSTATS.ODCISTATSINDEXCOST +FUNCSTATS.ODCISTATSSELECTIVITY +FUNCTION +FUNCTION_ID +FUNCTION_NAME +FUNC_ID +FUZZY +GAP_STATUS +GATHER_PLAN_STATISTICS +GBY_CONC_ROLLUP +GBY_PUSHDOWN +GCPERCALL +GCWAITPERCALL +GC_BUFFER_BUSY_DELTA +GC_BUFFER_BUSY_TOTAL +GC_CR_BLOCKS_RECEIVED_DELTA +GC_CR_BLOCKS_RECEIVED_TOTAL +GC_CR_BLOCKS_SERVED_DELTA +GC_CR_BLOCKS_SERVED_TOTAL +GC_CU_BLOCKS_RECEIVED_DELTA +GC_CU_BLOCKS_RECEIVED_TOTAL +GC_CU_BLOCKS_SERVED_DELTA +GC_CU_BLOCKS_SERVED_TOTAL +GC_ELEMENT_ADDR +GC_ELEMENT_NAME +GC_MASTERING_POLICY +GENCONNECTIONINTERFACE. +GENCONNECTIONINTERFACE.CLOSE +GENCONNECTIONINTERFACE.EVALUATEBOOLEANEXPRESSION +GENCONNECTIONINTERFACE.EVALUATEDATE2EXPRESSION +GENCONNECTIONINTERFACE.EVALUATEDATEEXPRESSION +GENCONNECTIONINTERFACE.EVALUATEDECIMALEXPRESSION +GENCONNECTIONINTERFACE.EVALUATEINTEGEREXPRESSION +GENCONNECTIONINTERFACE.EVALUATESHORTDECIMALEXPRESSION +GENCONNECTIONINTERFACE.EVALUATESHORTINTEGEREXPRESSION +GENCONNECTIONINTERFACE.EVALUATESTRINGEXPRESSION +GENCONNECTIONINTERFACE.EVALUATESTRINGLISTEXPRESSION +GENCONNECTIONINTERFACE.EXECUTECOMMAND +GENCONNECTIONINTERFACE.GETCONNECTIONSTATISTICS +GENCONNECTIONINTERFACE.GETDEFAULTDATABASE +GENCONNECTIONINTERFACE.OPENDATABASE +GENCURSORMANAGERINTERFACE. +GENCURSORMANAGERINTERFACE.CLOSE +GENCURSORMANAGERINTERFACE.FETCH2BLOCKS +GENCURSORMANAGERINTERFACE.FETCH2INITIALBLOCKS +GENCURSORMANAGERINTERFACE.FETCH3BLOCKS +GENCURSORMANAGERINTERFACE.FETCH3INITIALBLOCKS +GENCURSORMANAGERINTERFACE.FETCHBLOCKS +GENCURSORMANAGERINTERFACE.FETCHINITIALBLOCKS +GENCURSORMANAGERINTERFACE.GENERATESQL +GENCURSORMANAGERINTERFACE.GETGENERATIONINFO +GENCURSORMANAGERINTERFACE.GETINTERNALID +GENCURSORMANAGERINTERFACE.UPDATESPECIFICATION +GENDATABASEINTERFACE. +GENDATAPROVIDERINTERFACE. +GENDATAPROVIDERINTERFACE.CLOSE +GENDATAPROVIDERINTERFACE.CREATEDFNMGRWITHNOARGS +GENDATAPROVIDERINTERFACE.EVALUATEBOOLEANEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEDATE2EXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEDATEEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEDECIMALEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEINTEGEREXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESHORTDECIMALEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESHORTINTEGEREXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESTRINGEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESTRINGLISTEXPRESSION +GENDATAPROVIDERINTERFACE.EXECUTECOMMAND +GENDATAPROVIDERINTERFACE.GENERIC +GENDATAPROVIDERINTERFACE.GETCONNECTIONSTATISTICS +GENDATAPROVIDERINTERFACE.GETDEFAULTDATABASE +GENDATAPROVIDERINTERFACE.OPENDATABASE +GENDATATYPEIDCONSTANTS. +GENDEFINITIONMANAGERINTERFACE. +GENDEFINITIONMANAGERINTERFACE.CLOSE +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS2 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS3 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS4 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS5 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS6 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRWTHINPUTTYPES +GENDEFINITIONMANAGERINTERFACE.GENERIC +GENDEFINITIONMANAGERINTERFACE.GETINTERNALID +GENDEFINITIONMANAGERINTERFACE.MERGESRCINFOTOPARENTDFNMGR +GENDEFINITIONMANAGERINTERFACE.PREPARE2 +GENDEFINITIONMANAGERINTERFACE.ROLLBACK +GENERATED +GENERATION +GENERATIONS +GENERATION_STATUS +GENMDMCLASSCONSTANTS. +GENMDMOBJECTIDCONSTANTS. +GENMDMPROPERTYIDCONSTANTS. +GENMETADATAPROVIDERINTERFACE. +GENMETADATAPROVIDERINTERFACE.GETID +GENMETADATAPROVIDERINTERFACE.GETMETADATACLOB +GENSERVERINTERFACE. +GENSERVERINTERFACE.MAKECONNECTION +GENSVC. +GENSVC.ADD_TEST_BASED_DEF_PROM +GENSVC.ALLOW_BUSINESS_PROMOTION +GENSVC.BCN_TYPE_METAVER_UPD_CALLBACK +GENSVC.CREATE_SERVICE +GENSVC.DELETE_SERVICE_CALLBACK +GENSVC.GET_ASSOC_BEACONS +GENSVC.GET_BUSINESS_SYS_MEMBERS +GENSVC.GET_INFO_FOR_SYS_METRIC_PROM +GENSVC.GET_METRIC_INFO_FOR_PROM_CLI +GENSVC.GET_MNTR_STATES_FOR_TMPL +GENSVC.GET_SVC_AGG_METRIC_DEPS +GENSVC.GET_SVC_AGG_METRIC_THRESHOLDS +GENSVC.GET_SVC_AGG_MET_DTLS_FOR_EDIT +GENSVC.GET_SVC_ASSOC_SYS_COMP_DETAILS +GENSVC.GET_SVC_DTLS_FOR_AVAIL +GENSVC.GET_SVC_DTLS_FOR_RCA_CONFIG +GENSVC.GET_SVC_TESTS_BCNS_DTLS +GENSVC.GET_SYSTEM_COMPS_FOR_AVAIL_SEL +GENSVC.GET_SYSTEM_COMPS_FOR_METR_PROM +GENSVC.GET_TESTS +GENSVC.GET_TEST_DEF_PROPS +GENSVC.GET_TEST_DEF_THRESH +GENSVC.HAS_PROMOTED_METRICS +GENSVC.POST_DELETE_SERVICE_CALLBACK +GENSVC.REMOVE_SYSTEM_AND_SAVE_PROPS +GENSVC.SET_LOCAL_BEACON +GENSVC.SET_SVC_AGG_METRIC_THRESHOLDS +GENSVC.SET_SVC_DTLS_FOR_AVAIL +GENSVC.SET_SYSTEM_AND_PROPS +GENSVC.SET_TEMPLATE_TESTS_MNTR_STATE +GENSVC.SET_TESTS_FOR_SERVICE +GENSVC_VIEW. +GENSVC_VIEW.COMPUTE_DISP_START_END_DATES +GENSVC_VIEW.COMPUTE_START_END_DATES +GENSVC_VIEW.GET_AVAIL_ALL_ASSOC_TARGETS +GENSVC_VIEW.GET_AVAIL_SINGLE_TARGET +GENSVC_VIEW.GET_BCNS_FOR_SVC +GENSVC_VIEW.GET_COMPONENT_SUMMARY +GENSVC_VIEW.GET_CURR_KEY_COMP_SUMMARY +GENSVC_VIEW.GET_CURR_TEST_SUMMARY +GENSVC_VIEW.GET_EMPTY_RECORD +GENSVC_VIEW.GET_GENSVC_ALERTS +GENSVC_VIEW.GET_HIST_KEY_COMP_SUMMARY +GENSVC_VIEW.GET_HIST_TEST_SUMMARY +GENSVC_VIEW.GET_SERVICE_HOME_DATA +GENSVC_VIEW.GET_SERVICE_TOPOLOGY +GENSVC_VIEW.GET_SEVERITIES_FOR_SERVICE +GENSVC_VIEW.GET_SEV_FOR_SERVICE_WITH_RBK +GENSVC_VIEW.GET_SLM_PACK_REPORT_SUMMARY +GENSVC_VIEW.GET_SLM_PACK_TEST_TYPE_LIST +GENSVC_VIEW.GET_SLM_PACK_TGT_TEST_LIST +GENSVC_VIEW.GET_SYSTEM_AND_COMPONENTS +GENSVC_VIEW.GET_TESTS_BCNS_FOR_SVC +GENSVC_VIEW.GET_TESTS_FOR_SVC +GENSVC_VIEW.GET_TEST_BCN_AVAIL +GENSVC_VIEW.GET_TOPO_MEMBER_DETAILS +GENSVC_VIEW.HAS_COMPONENT_ARRAY +GENSVC_VIEW.SINGLE_TST_BCN_AVAIL +GENSVC_VIEW.TEST_BASED_AVAILABLE +GETDUMMYTAGS. +GETEMKEY. +GETHITRATIO +GETHITS +GETMISSES +GETS +GETTAGSARRAY. +GETTAGSARROCI. +GETTVOID. +GETXMLSCHEMADEPENDENCYLIST. +GET_ERROR$. +GET_ERROR$.ERROR_LINES +GET_HOMES_ALL. +GET_HOMES_ALL.CHECK_HOME_PLATFORM +GET_HOMES_ALL.GET_DESTINATION_PLATFORM +GET_HOMES_ALL.GET_HOME_PLATFORM_ID +GET_HOMES_ALL.GET_JOB_STATUS +GET_HOMES_ALL.GET_TARGETS_IN_ORACLE_HOME +GET_HOMES_ALL.GET_TARGET_CREDENTIALS +GET_HOMES_ALL.SUNOS_ARU_ID_EXISTS_FOR_HOME +GET_MAX_CHECKPOINT. +GET_OLDVERSION_HASHCODE. +GET_PHONE_NUMBER_F. +GET_STATS_EXTENSION. +GET_TABLE_NAME. +GET_XDB_TABLESPACE. +GLOBALID +GLOBAL_HANG +GLOBAL_NAME +GLOBAL_STATS +GLOBAL_TRAN_ID +GLOBAL_UID +GNAME +GOAL +GOODNESS +GOWNER +GRA +GRANTABLE +GRANTED_GROUP +GRANTED_ROLE +GRANTEE +GRANTEE. +GRANTEE_NAME +GRANTOR +GRANT_LEVEL +GRANT_OPTION +GRANT_SELECT_PRIVILEGES +GRANULE_SIZE +GRIDFILE735_TAB$XD. +GROUP# +GROUPS +GROUP_COMMENT +GROUP_ID +GROUP_NAME +GROUP_NUMBER +GROUP_OR_SUBPLAN +GROUP_OWNER +GROUP_PATCH_ADVISORIES. +GROUP_PATCH_ADVISORIES.GET_GROUP_ADVISORIES_COUNT +GROUP_PATCH_ADVISORIES.GET_GROUP_AFFECTED_HOMES_COUNT +GROUP_PATCH_ADVISORIES.GET_GROUP_PATCH_ADVISORIES +GROUP_TYPE +GUARANTEE_FLASHBACK_DATABASE +GUARD_STATUS +GV$ACCESS +GV$ACTIVE_INSTANCES +GV$ACTIVE_SERVICES +GV$ACTIVE_SESSION_HISTORY +GV$ACTIVE_SESS_POOL_MTH +GV$ADVISOR_CURRENT_SQLPLAN +GV$ADVISOR_PROGRESS +GV$ALERT_TYPES +GV$AQ +GV$AQ1 +GV$ARCHIVE +GV$ARCHIVED_LOG +GV$ARCHIVE_DEST +GV$ARCHIVE_DEST_STATUS +GV$ARCHIVE_GAP +GV$ARCHIVE_PROCESSES +GV$ASH_INFO +GV$ASM_ACFSSNAPSHOTS +GV$ASM_ACFSVOLUMES +GV$ASM_ACFS_ENCRYPTION_INFO +GV$ASM_ACFS_SECURITY_INFO +GV$ASM_ALIAS +GV$ASM_ATTRIBUTE +GV$ASM_CLIENT +GV$ASM_DISK +GV$ASM_DISKGROUP +GV$ASM_DISKGROUP_STAT +GV$ASM_DISK_IOSTAT +GV$ASM_DISK_STAT +GV$ASM_FILE +GV$ASM_FILESYSTEM +GV$ASM_OPERATION +GV$ASM_TEMPLATE +GV$ASM_USER +GV$ASM_USERGROUP +GV$ASM_USERGROUP_MEMBER +GV$ASM_VOLUME +GV$ASM_VOLUME_STAT +GV$AW_AGGREGATE_OP +GV$AW_ALLOCATE_OP +GV$AW_CALC +GV$AW_LONGOPS +GV$AW_OLAP +GV$AW_SESSION_INFO +GV$BACKUP +GV$BACKUP_ASYNC_IO +GV$BACKUP_CORRUPTION +GV$BACKUP_DATAFILE +GV$BACKUP_DEVICE +GV$BACKUP_PIECE +GV$BACKUP_REDOLOG +GV$BACKUP_SET +GV$BACKUP_SPFILE +GV$BACKUP_SYNC_IO +GV$BGPROCESS +GV$BH +GV$BLOCKING_QUIESCE +GV$BSP +GV$BUFFERED_PUBLISHERS +GV$BUFFERED_QUEUES +GV$BUFFERED_SUBSCRIBERS +GV$BUFFER_POOL +GV$BUFFER_POOL_STATISTICS +GV$CALLTAG +GV$CELL +GV$CELL_CONFIG +GV$CELL_REQUEST_TOTALS +GV$CELL_STATE +GV$CELL_THREAD_HISTORY +GV$CIRCUIT +GV$CLASS_CACHE_TRANSFER +GV$CLASS_PING +GV$CLIENT_STATS +GV$CLUSTER_INTERCONNECTS +GV$CONFIGURED_INTERCONNECTS +GV$CONTEXT +GV$CONTROLFILE +GV$CONTROLFILE_RECORD_SECTION +GV$COPY_CORRUPTION +GV$CORRUPT_XID_LIST +GV$CPOOL_CC_INFO +GV$CPOOL_CC_STATS +GV$CPOOL_CONN_INFO +GV$CPOOL_STATS +GV$CR_BLOCK_SERVER +GV$CURRENT_BLOCK_SERVER +GV$DATABASE +GV$DATABASE_BLOCK_CORRUPTION +GV$DATABASE_INCARNATION +GV$DATABASE_KEY_INFO +GV$DATAFILE +GV$DATAFILE_COPY +GV$DATAFILE_HEADER +GV$DATAGUARD_CONFIG +GV$DATAGUARD_STATS +GV$DATAGUARD_STATUS +GV$DATAPUMP_JOB +GV$DATAPUMP_SESSION +GV$DBFILE +GV$DBLINK +GV$DB_CACHE_ADVICE +GV$DB_OBJECT_CACHE +GV$DB_PIPES +GV$DELETED_OBJECT +GV$DETACHED_SESSION +GV$DIAG_INFO +GV$DISPATCHER +GV$DISPATCHER_CONFIG +GV$DISPATCHER_RATE +GV$DLM_ALL_LOCKS +GV$DLM_CONVERT_LOCAL +GV$DLM_CONVERT_REMOTE +GV$DLM_LATCH +GV$DLM_LOCKS +GV$DLM_MISC +GV$DLM_RESS +GV$DLM_TRAFFIC_CONTROLLER +GV$DNFS_CHANNELS +GV$DNFS_FILES +GV$DNFS_SERVERS +GV$DNFS_STATS +GV$DYNAMIC_REMASTER_STATS +GV$EMON +GV$ENABLEDPRIVS +GV$ENCRYPTED_TABLESPACES +GV$ENCRYPTION_WALLET +GV$ENQUEUE_LOCK +GV$ENQUEUE_STAT +GV$ENQUEUE_STATISTICS +GV$EVENTMETRIC +GV$EVENT_HISTOGRAM +GV$EVENT_NAME +GV$EXECUTION +GV$FAST_START_SERVERS +GV$FAST_START_TRANSACTIONS +GV$FILEMETRIC +GV$FILEMETRIC_HISTORY +GV$FILESPACE_USAGE +GV$FILESTAT +GV$FILE_CACHE_TRANSFER +GV$FILE_HISTOGRAM +GV$FILE_OPTIMIZED_HISTOGRAM +GV$FILE_PING +GV$FIXED_TABLE +GV$FIXED_VIEW_DEFINITION +GV$FLASHBACK_DATABASE_LOG +GV$FLASHBACK_DATABASE_LOGFILE +GV$FLASHBACK_DATABASE_STAT +GV$FOREIGN_ARCHIVED_LOG +GV$FS_FAILOVER_HISTOGRAM +GV$FS_FAILOVER_STATS +GV$GCSHVMASTER_INFO +GV$GCSPFMASTER_INFO +GV$GC_ELEMENT +GV$GC_ELEMENTS_WITH_COLLISIONS +GV$GES_BLOCKING_ENQUEUE +GV$GES_ENQUEUE +GV$GLOBALCONTEXT +GV$GLOBAL_BLOCKED_LOCKS +GV$GLOBAL_TRANSACTION +GV$GOLDENGATE_CAPTURE +GV$GOLDENGATE_MESSAGE_TRACKING +GV$GOLDENGATE_TRANSACTION +GV$HM_CHECK +GV$HM_CHECK_PARAM +GV$HM_FINDING +GV$HM_INFO +GV$HM_RECOMMENDATION +GV$HM_RUN +GV$HS_AGENT +GV$HS_PARAMETER +GV$HS_SESSION +GV$HVMASTER_INFO +GV$INCMETER_CONFIG +GV$INCMETER_INFO +GV$INCMETER_SUMMARY +GV$INDEXED_FIXED_COLUMN +GV$INSTANCE +GV$INSTANCE_CACHE_TRANSFER +GV$INSTANCE_LOG_GROUP +GV$INSTANCE_RECOVERY +GV$IOFUNCMETRIC +GV$IOFUNCMETRIC_HISTORY +GV$IOSTAT_CONSUMER_GROUP +GV$IOSTAT_FILE +GV$IOSTAT_FUNCTION +GV$IOSTAT_FUNCTION_DETAIL +GV$IOSTAT_NETWORK +GV$IO_CALIBRATION_STATUS +GV$IR_FAILURE +GV$IR_FAILURE_SET +GV$IR_MANUAL_CHECKLIST +GV$IR_REPAIR +GV$JAVAPOOL +GV$JAVA_LIBRARY_CACHE_MEMORY +GV$JAVA_POOL_ADVICE +GV$LATCH +GV$LATCHHOLDER +GV$LATCHNAME +GV$LATCH_CHILDREN +GV$LATCH_MISSES +GV$LATCH_PARENT +GV$LIBCACHE_LOCKS +GV$LIBRARYCACHE +GV$LIBRARY_CACHE_MEMORY +GV$LICENSE +GV$LISTENER_NETWORK +GV$LOADISTAT +GV$LOADPSTAT +GV$LOBSTAT +GV$LOCK +GV$LOCKED_OBJECT +GV$LOCKS_WITH_COLLISIONS +GV$LOCK_ACTIVITY +GV$LOCK_ELEMENT +GV$LOCK_TYPE +GV$LOG +GV$LOGFILE +GV$LOGHIST +GV$LOGMNR_CALLBACK +GV$LOGMNR_CONTENTS +GV$LOGMNR_DICTIONARY +GV$LOGMNR_DICTIONARY_LOAD +GV$LOGMNR_LATCH +GV$LOGMNR_LOGFILE +GV$LOGMNR_LOGS +GV$LOGMNR_PARAMETERS +GV$LOGMNR_PROCESS +GV$LOGMNR_REGION +GV$LOGMNR_SESSION +GV$LOGMNR_STATS +GV$LOGMNR_TRANSACTION +GV$LOGSTDBY +GV$LOGSTDBY_PROCESS +GV$LOGSTDBY_PROGRESS +GV$LOGSTDBY_STATE +GV$LOGSTDBY_STATS +GV$LOGSTDBY_TRANSACTION +GV$LOG_HISTORY +GV$MANAGED_STANDBY +GV$MAP_COMP_LIST +GV$MAP_ELEMENT +GV$MAP_EXT_ELEMENT +GV$MAP_FILE +GV$MAP_FILE_EXTENT +GV$MAP_FILE_IO_STACK +GV$MAP_LIBRARY +GV$MAP_SUBELEMENT +GV$MAX_ACTIVE_SESS_TARGET_MTH +GV$MEMORY_CURRENT_RESIZE_OPS +GV$MEMORY_DYNAMIC_COMPONENTS +GV$MEMORY_RESIZE_OPS +GV$MEMORY_TARGET_ADVICE +GV$METRIC +GV$METRICGROUP +GV$METRICNAME +GV$METRIC_HISTORY +GV$MTTR_TARGET_ADVICE +GV$MUTEX_SLEEP +GV$MUTEX_SLEEP_HISTORY +GV$MVREFRESH +GV$MYSTAT +GV$NFS_CLIENTS +GV$NFS_LOCKS +GV$NFS_OPEN_FILES +GV$NLS_PARAMETERS +GV$NLS_VALID_VALUES +GV$OBJECT_DEPENDENCY +GV$OBJECT_DML_FREQUENCIES +GV$OBSOLETE_PARAMETER +GV$OFFLINE_RANGE +GV$OPEN_CURSOR +GV$OPTION +GV$OSSTAT +GV$PARALLEL_DEGREE_LIMIT_MTH +GV$PARAMETER +GV$PARAMETER2 +GV$PARAMETER_VALID_VALUES +GV$PERSISTENT_PUBLISHERS +GV$PERSISTENT_QMN_CACHE +GV$PERSISTENT_QUEUES +GV$PERSISTENT_SUBSCRIBERS +GV$PGASTAT +GV$PGA_TARGET_ADVICE +GV$PGA_TARGET_ADVICE_HISTOGRAM +GV$POLICY_HISTORY +GV$PQ_SESSTAT +GV$PQ_SLAVE +GV$PQ_SYSSTAT +GV$PQ_TQSTAT +GV$PROCESS +GV$PROCESS_GROUP +GV$PROCESS_MEMORY +GV$PROCESS_MEMORY_DETAIL +GV$PROCESS_MEMORY_DETAIL_PROG +GV$PROPAGATION_RECEIVER +GV$PROPAGATION_SENDER +GV$PROXY_ARCHIVEDLOG +GV$PROXY_DATAFILE +GV$PWFILE_USERS +GV$PX_BUFFER_ADVICE +GV$PX_INSTANCE_GROUP +GV$PX_PROCESS +GV$PX_PROCESS_SYSSTAT +GV$PX_SESSION +GV$PX_SESSTAT +GV$QMON_COORDINATOR_STATS +GV$QMON_SERVER_STATS +GV$QMON_TASKS +GV$QMON_TASK_STATS +GV$QUEUE +GV$QUEUEING_MTH +GV$RECOVERY_FILE_STATUS +GV$RECOVERY_LOG +GV$RECOVERY_PROGRESS +GV$RECOVERY_STATUS +GV$RECOVER_FILE +GV$REDO_DEST_RESP_HISTOGRAM +GV$REPLPROP +GV$REPLQUEUE +GV$REQDIST +GV$RESERVED_WORDS +GV$RESOURCE +GV$RESOURCE_LIMIT +GV$RESTORE_POINT +GV$RESULT_CACHE_DEPENDENCY +GV$RESULT_CACHE_MEMORY +GV$RESULT_CACHE_OBJECTS +GV$RESULT_CACHE_STATISTICS +GV$RESUMABLE +GV$RFS_THREAD +GV$RMAN_COMPRESSION_ALGORITHM +GV$RMAN_CONFIGURATION +GV$RMAN_OUTPUT +GV$ROLLSTAT +GV$ROWCACHE +GV$ROWCACHE_PARENT +GV$ROWCACHE_SUBORDINATE +GV$RSRCMGRMETRIC +GV$RSRCMGRMETRIC_HISTORY +GV$RSRC_CONSUMER_GROUP +GV$RSRC_CONSUMER_GROUP_CPU_MTH +GV$RSRC_CONS_GROUP_HISTORY +GV$RSRC_PLAN +GV$RSRC_PLAN_CPU_MTH +GV$RSRC_PLAN_HISTORY +GV$RSRC_SESSION_INFO +GV$RULE +GV$RULE_SET +GV$RULE_SET_AGGREGATE_STATS +GV$SCHEDULER_RUNNING_JOBS +GV$SECUREFILE_TIMER +GV$SEGMENT_STATISTICS +GV$SEGSPACE_USAGE +GV$SEGSTAT +GV$SEGSTAT_NAME +GV$SERVICEMETRIC +GV$SERVICEMETRIC_HISTORY +GV$SERVICES +GV$SERVICE_EVENT +GV$SERVICE_STATS +GV$SERVICE_WAIT_CLASS +GV$SERV_MOD_ACT_STATS +GV$SESSION +GV$SESSION_BLOCKERS +GV$SESSION_CONNECT_INFO +GV$SESSION_CURSOR_CACHE +GV$SESSION_EVENT +GV$SESSION_LONGOPS +GV$SESSION_OBJECT_CACHE +GV$SESSION_WAIT +GV$SESSION_WAIT_CLASS +GV$SESSION_WAIT_HISTORY +GV$SESSMETRIC +GV$SESSTAT +GV$SESS_IO +GV$SESS_TIME_MODEL +GV$SES_OPTIMIZER_ENV +GV$SGA +GV$SGAINFO +GV$SGASTAT +GV$SGA_CURRENT_RESIZE_OPS +GV$SGA_DYNAMIC_COMPONENTS +GV$SGA_DYNAMIC_FREE_MEMORY +GV$SGA_RESIZE_OPS +GV$SGA_TARGET_ADVICE +GV$SHARED_POOL_ADVICE +GV$SHARED_POOL_RESERVED +GV$SHARED_SERVER +GV$SHARED_SERVER_MONITOR +GV$SORT_SEGMENT +GV$SORT_USAGE +GV$SPPARAMETER +GV$SQL +GV$SQLAREA +GV$SQLAREA_PLAN_HASH +GV$SQLCOMMAND +GV$SQLFN_ARG_METADATA +GV$SQLFN_METADATA +GV$SQLPA_METRIC +GV$SQLSTATS +GV$SQLSTATS_PLAN_HASH +GV$SQLTEXT +GV$SQLTEXT_WITH_NEWLINES +GV$SQL_BIND_CAPTURE +GV$SQL_BIND_DATA +GV$SQL_BIND_METADATA +GV$SQL_CS_HISTOGRAM +GV$SQL_CS_SELECTIVITY +GV$SQL_CS_STATISTICS +GV$SQL_CURSOR +GV$SQL_FEATURE +GV$SQL_FEATURE_DEPENDENCY +GV$SQL_FEATURE_HIERARCHY +GV$SQL_HINT +GV$SQL_JOIN_FILTER +GV$SQL_MONITOR +GV$SQL_OPTIMIZER_ENV +GV$SQL_PLAN +GV$SQL_PLAN_MONITOR +GV$SQL_PLAN_STATISTICS +GV$SQL_PLAN_STATISTICS_ALL +GV$SQL_REDIRECTION +GV$SQL_SHARED_CURSOR +GV$SQL_SHARED_MEMORY +GV$SQL_WORKAREA +GV$SQL_WORKAREA_ACTIVE +GV$SQL_WORKAREA_HISTOGRAM +GV$SSCR_SESSIONS +GV$STANDBY_LOG +GV$STATISTICS_LEVEL +GV$STATNAME +GV$STREAMS_APPLY_COORDINATOR +GV$STREAMS_APPLY_READER +GV$STREAMS_APPLY_SERVER +GV$STREAMS_CAPTURE +GV$STREAMS_MESSAGE_TRACKING +GV$STREAMS_POOL_ADVICE +GV$STREAMS_POOL_STATISTICS +GV$STREAMS_TRANSACTION +GV$SUBCACHE +GV$SUBSCR_REGISTRATION_STATS +GV$SYSAUX_OCCUPANTS +GV$SYSMETRIC +GV$SYSMETRIC_HISTORY +GV$SYSMETRIC_SUMMARY +GV$SYSSTAT +GV$SYSTEM_CURSOR_CACHE +GV$SYSTEM_EVENT +GV$SYSTEM_PARAMETER +GV$SYSTEM_PARAMETER2 +GV$SYSTEM_WAIT_CLASS +GV$SYS_OPTIMIZER_ENV +GV$SYS_TIME_MODEL +GV$TABLESPACE +GV$TEMPFILE +GV$TEMPORARY_LOBS +GV$TEMPSEG_USAGE +GV$TEMPSTAT +GV$TEMP_CACHE_TRANSFER +GV$TEMP_EXTENT_MAP +GV$TEMP_EXTENT_POOL +GV$TEMP_PING +GV$TEMP_SPACE_HEADER +GV$THREAD +GV$THRESHOLD_TYPES +GV$TIMER +GV$TIMEZONE_FILE +GV$TIMEZONE_NAMES +GV$TOPLEVELCALL +GV$TRANSACTION +GV$TRANSACTION_ENQUEUE +GV$TSM_SESSIONS +GV$TYPE_SIZE +GV$UNDOSTAT +GV$VERSION +GV$VPD_POLICY +GV$WAITCLASSMETRIC +GV$WAITCLASSMETRIC_HISTORY +GV$WAITSTAT +GV$WALLET +GV$WLM_PCMETRIC +GV$WLM_PCMETRIC_HISTORY +GV$WLM_PC_STATS +GV$WORKLOAD_REPLAY_THREAD +GV$XML_AUDIT_TRAIL +GV$XSTREAM_CAPTURE +GV$XSTREAM_MESSAGE_TRACKING +GV$XSTREAM_OUTBOUND_SERVER +GV$XSTREAM_TRANSACTION +GV$_LOCK +HAEN_TXFM_TEXT. +HANDLE +HANDLER_COMMENT +HANDLER_NAME +HANDLER_TYPE +HANDLE_RELATED_TARGETS. +HANG_CHAIN_SESSIONS +HANG_CREATE_TIME +HANG_ID +HANG_RESOLVE_TIME +HANG_TYPE +HAPAGE_DATABASE. +HAPAGE_DATABASE.DUMP_HA_INFO +HAPAGE_DATABASE.GETDATE +HAPAGE_DATABASE.GETDBSTRINGVALUES +HAPAGE_DATABASE.GET_AVAIL_INFO +HAPAGE_DATABASE.GET_BR_VALUES +HAPAGE_DATABASE.GET_DG_PRMY_VALUES +HAPAGE_DATABASE.GET_DG_STBY_VALUES +HAPAGE_DATABASE.GET_ECM_VALUES +HAPAGE_DATABASE.GET_HA_EVENTS +HAPAGE_DATABASE.GET_HA_EVENTS_GUIDS +HAPAGE_DATABASE.GET_HA_EVENTS_TARGETS +HARD_PARSES +HASH +HASHCODE +HASHKEYS +HASH_AJ +HASH_CODE +HASH_EXPRESSION +HASH_MATCH_FAILED +HASH_SJ +HASH_VALUE +HEADER_BLOCK +HEADER_FILE +HEADER_STATUS +HEALTH_MONITOR +HEAP_ALOC +HEAP_DESC +HEAP_DESCRIPTOR +HEAP_NAME +HEAP_NUM +HEAP_SIZE +HEAP_SZ +HEAP_USED +HETEROGENEOUS +HET_TYPE +HHAND. +HHBYTELEN. +HHCBIT. +HHCELLBNDRY. +HHCELLSIZE. +HHCLDATE. +HHCOLLAPSE. +HHCOMMONCODE. +HHCOMPARE. +HHCOMPOSE. +HHDECODE. +HHDISTANCE. +HHENCODE. +HHENCODE_BYLEVEL. +HHGBIT. +HHGETCID. +HHGROUP. +HHGTBIT. +HHGTYPE. +HHIDLPART. +HHIDPART. +HHINCRLEV. +HHJLDATE. +HHLENGTH. +HHLEVELS. +HHMATCH. +HHMAXCODE. +HHNCOMPARE. +HHNDIM. +HHOR. +HHORDER. +HHPRECISION. +HHSBIT. +HHSETCID. +HHSTBIT. +HHSTYPE. +HHSUBDIVIDE. +HHSUBSTR. +HHXOR. +HIDDEN +HIDDEN_COLUMN +HIERARCHY +HIERARCHY_NAME +HIERARCHY_TYPE +HIER_TYPE +HIGH +HIGHROWID +HIGHWATER +HIGH_BOUND +HIGH_OPTIMAL_SIZE +HIGH_SCN +HIGH_SEQUENCE# +HIGH_TIME +HIGH_VALUE +HIGH_VALUE_LENGTH +HIGH_WATER_MARK +HINT +HISTOGRAM +HISTORIC_MAX +HISTORY_INDEX_BLOCKS_FREED +HITS +HIT_RATIO +HI_BNUM +HI_SETID +HM_SQLTK_INTERNAL. +HM_SQLTK_INTERNAL.COLUMN_CHECK +HM_SQLTK_INTERNAL.REF_CHECK +HM_SQLTK_INTERNAL.ROW_CHECK +HM_SQLTK_INTERNAL.TAB_DESC +HOLDING_SESSION +HOLDING_USER_SESSION +HOP_COUNT +HOST +HOSTING_CLIENT_ID +HOSTNAME +HOST_ADDRESS +HOST_ADMIN. +HOST_ADMIN.CHECKCMDSHELLANDPREFCREDS +HOST_ADMIN.CHECKPREFCREDS +HOST_ADMIN.GETCMDSHELL +HOST_ADMIN.GETCMDSHELLANDPREFCREDS +HOST_ADMIN.GETCREDCOLUMN +HOST_ADMIN.GETCREDENTIALGUID +HOST_ADMIN.GETEXECUTIONID +HOST_ADMIN.GETMEMBERHOSTS +HOST_ADMIN.GETPREFCREDS +HOST_ADMIN.GETTARGETGUID +HOST_ADMIN.GETTARGETHOSTNAME +HOST_ADMIN.GETTARGETTIMEZONE +HOST_ADMIN.SAVEASPREFERREDCREDS +HOST_CONFIG_COMPARISON. +HOST_CONFIG_COMPARISON.COMPARE_HC_AND_SAVE +HOST_CONFIG_COMPARISON.COMPARE_HC_AND_SAVE_JOB +HOST_CONFIG_COMPARISON.COMPARE_TWO_HOSTS_JOB +HOST_CONFIG_COMPARISON.CONVERT_STRINGS_TO_RAW +HOST_CONFIG_COMPARISON.GET_COMPARISON_ERRORS +HOST_CONFIG_COMPARISON.GET_COMPARISON_PROPERTIES +HOST_CONFIG_COMPARISON.GET_COMPARISON_PROPERTY +HOST_CONFIG_COMPARISON.GET_COMPARISON_SUMMARY_RESULT +HOST_CONFIG_COMPARISON.GET_CPU_COMPARISON_DTLS +HOST_CONFIG_COMPARISON.GET_CURR_HOST_OR_FILE_GUID +HOST_CONFIG_COMPARISON.GET_FS_COMPARISON_DTLS +HOST_CONFIG_COMPARISON.GET_HW_MASTER_COMPARISON_DTLS +HOST_CONFIG_COMPARISON.GET_IOCARD_COMPARISON_DTLS +HOST_CONFIG_COMPARISON.GET_MULTI_HOSTS_COMP_SUMMARY +HOST_CONFIG_COMPARISON.GET_NIC_COMPARISON_DTLS +HOST_CONFIG_COMPARISON.GET_ORACLE_COMP_SUMMARY +HOST_CONFIG_COMPARISON.GET_OS_COMPARISON_SUMMARY +HOST_CONFIG_COMPARISON.GET_OS_COMP_COMPARISON_DTLS +HOST_CONFIG_COMPARISON.GET_OS_GENERAL_INFO +HOST_CONFIG_COMPARISON.GET_OS_PATCH_COMPARISON_DTLS +HOST_CONFIG_COMPARISON.GET_OS_PROP_COMPARISON_DTLS +HOST_CONFIG_COMPARISON.GET_OS_REG_SW_COMP_SUMMARY +HOST_ID +HOST_NAME +HOST_NW_ADDR +HOT_BYTES_READ +HOT_BYTES_WRITTEN +HOT_MINE +HOT_READS +HOT_USED_MB +HOT_WRITES +HOUR_IN_DAY +HOW +HOW_CREATED +HS$_DDTF_SQLCOLUMNS. +HS$_DDTF_SQLFOREIGNKEYS. +HS$_DDTF_SQLPRIMARYKEYS. +HS$_DDTF_SQLPROCEDURES. +HS$_DDTF_SQLSTATISTICS. +HS$_DDTF_SQLTABFORKEYS. +HS$_DDTF_SQLTABLES. +HS$_DDTF_SQLTABPRIKEYS. +HS$_DDTF_SQLTABSTATS. +HSECS +HS_SESSION_ID +HTF. +HTF.ADDRESS +HTF.ANCHOR +HTF.ANCHOR2 +HTF.APPLETOPEN +HTF.AREA +HTF.BASE +HTF.BASEFONT +HTF.BGSOUND +HTF.BIG +HTF.BLOCKQUOTEOPEN +HTF.BODYOPEN +HTF.BOLD +HTF.BR +HTF.CENTER +HTF.CITE +HTF.CODE +HTF.COMMENT +HTF.DFN +HTF.DIV +HTF.DLISTDEF +HTF.DLISTOPEN +HTF.DLISTTERM +HTF.EM +HTF.EMPHASIS +HTF.ESCAPE_SC +HTF.ESCAPE_URL +HTF.FONTOPEN +HTF.FORMAT_CELL +HTF.FORMCHECKBOX +HTF.FORMFILE +HTF.FORMHIDDEN +HTF.FORMIMAGE +HTF.FORMOPEN +HTF.FORMPASSWORD +HTF.FORMRADIO +HTF.FORMRESET +HTF.FORMSELECTOPEN +HTF.FORMSELECTOPTION +HTF.FORMSUBMIT +HTF.FORMTEXT +HTF.FORMTEXTAREA +HTF.FORMTEXTAREA2 +HTF.FORMTEXTAREAOPEN +HTF.FORMTEXTAREAOPEN2 +HTF.FRAME +HTF.FRAMESETOPEN +HTF.HEADER +HTF.HR +HTF.HTITLE +HTF.IMG +HTF.IMG2 +HTF.ISINDEX +HTF.ITALIC +HTF.KBD +HTF.KEYBOARD +HTF.LINE +HTF.LINKREL +HTF.LINKREV +HTF.LISTHEADER +HTF.LISTITEM +HTF.MAILTO +HTF.MAPOPEN +HTF.META +HTF.NEXTID +HTF.NL +HTF.NOBR +HTF.OLISTOPEN +HTF.PARAGRAPH +HTF.PARAM +HTF.PLAINTEXT +HTF.PREOPEN +HTF.S +HTF.SAMPLE +HTF.SCRIPT +HTF.SMALL +HTF.STRIKE +HTF.STRONG +HTF.STYLE +HTF.SUB +HTF.SUP +HTF.TABLECAPTION +HTF.TABLEDATA +HTF.TABLEHEADER +HTF.TABLEOPEN +HTF.TABLEROWOPEN +HTF.TELETYPE +HTF.TITLE +HTF.ULISTOPEN +HTF.UNDERLINE +HTF.VARIABLE +HTMLDB. +HTMLDB_ADMIN. +HTMLDB_CUSTOM_AUTH. +HTMLDB_CUSTOM_AUTH.APPLICATION_PAGE_ITEM_EXISTS +HTMLDB_CUSTOM_AUTH.CURRENT_PAGE_IS_PUBLIC +HTMLDB_CUSTOM_AUTH.DEFINE_USER_SESSION +HTMLDB_CUSTOM_AUTH.GET_COOKIE_PROPS +HTMLDB_CUSTOM_AUTH.GET_LDAP_PROPS +HTMLDB_CUSTOM_AUTH.GET_NEXT_SESSION_ID +HTMLDB_CUSTOM_AUTH.GET_SECURITY_GROUP_ID +HTMLDB_CUSTOM_AUTH.GET_SESSION_ID +HTMLDB_CUSTOM_AUTH.GET_SESSION_ID_FROM_COOKIE +HTMLDB_CUSTOM_AUTH.GET_USER +HTMLDB_CUSTOM_AUTH.GET_USERNAME +HTMLDB_CUSTOM_AUTH.IS_SESSION_VALID +HTMLDB_CUSTOM_AUTH.LDAP_AUTHENTICATE +HTMLDB_CUSTOM_AUTH.LDAP_DNPREP +HTMLDB_CUSTOM_AUTH.LOGIN +HTMLDB_CUSTOM_AUTH.LOGOUT +HTMLDB_CUSTOM_AUTH.LOGOUT_THEN_GO_TO_PAGE +HTMLDB_CUSTOM_AUTH.LOGOUT_THEN_GO_TO_URL +HTMLDB_CUSTOM_AUTH.PORTAL_SSO_SENTRY_V1 +HTMLDB_CUSTOM_AUTH.POST_LOGIN +HTMLDB_CUSTOM_AUTH.REMOVE_SESSION +HTMLDB_CUSTOM_AUTH.SESSION_ID_EXISTS +HTMLDB_CUSTOM_AUTH.SET_SESSION_ID +HTMLDB_CUSTOM_AUTH.SET_SESSION_ID_TO_NEXT_VALUE +HTMLDB_CUSTOM_AUTH.SET_USER +HTMLDB_ITEM. +HTMLDB_ITEM.CHECKBOX +HTMLDB_ITEM.DATE_POPUP +HTMLDB_ITEM.DISPLAY_AND_SAVE +HTMLDB_ITEM.HIDDEN +HTMLDB_ITEM.MD5_CHECKSUM +HTMLDB_ITEM.MD5_HIDDEN +HTMLDB_ITEM.MULTI_ROW_UPDATE +HTMLDB_ITEM.POPUPKEY_FROM_LOV +HTMLDB_ITEM.POPUPKEY_FROM_QUERY +HTMLDB_ITEM.POPUP_FROM_LOV +HTMLDB_ITEM.POPUP_FROM_QUERY +HTMLDB_ITEM.RADIOGROUP +HTMLDB_ITEM.SELECT_LIST +HTMLDB_ITEM.SELECT_LIST_FROM_LOV +HTMLDB_ITEM.SELECT_LIST_FROM_LOV_XL +HTMLDB_ITEM.SELECT_LIST_FROM_QUERY +HTMLDB_ITEM.SELECT_LIST_FROM_QUERY_XL +HTMLDB_ITEM.TEXT +HTMLDB_ITEM.TEXTAREA +HTMLDB_ITEM.TEXT_FROM_LOV +HTMLDB_ITEM.TEXT_FROM_LOV_QUERY +HTMLDB_LANG. +HTMLDB_LANG.LANG +HTMLDB_LANG.MESSAGE +HTMLDB_LANG.MESSAGE_P +HTMLDB_LOGIN. +HTMLDB_SITE_ADMIN_PRIVS. +HTMLDB_SITE_ADMIN_PRIVS.CREATE_EXCEPTION +HTMLDB_SITE_ADMIN_PRIVS.REMOVE_EXCEPTION +HTMLDB_SITE_ADMIN_PRIVS.REMOVE_SCHEMA_EXCEPTIONS +HTMLDB_SITE_ADMIN_PRIVS.REMOVE_WORKSPACE_EXCEPTIONS +HTMLDB_SITE_ADMIN_PRIVS.REPORT +HTMLDB_SITE_ADMIN_PRIVS.RESTRICT_SCHEMA +HTMLDB_SITE_ADMIN_PRIVS.UNRESTRICT_SCHEMA +HTMLDB_SYSTEM. +HTMLDB_SYSTEM.VERIFY_USER +HTMLDB_UTIL. +HTMLDB_UTIL.CACHE_GET_DATE_OF_PAGE_CACHE +HTMLDB_UTIL.CACHE_GET_DATE_OF_REGION_CACHE +HTMLDB_UTIL.CACHE_PURGE_BY_APPLICATION +HTMLDB_UTIL.CACHE_PURGE_BY_PAGE +HTMLDB_UTIL.CACHE_PURGE_STALE +HTMLDB_UTIL.CHANGE_CURRENT_USER_PW +HTMLDB_UTIL.CHANGE_PASSWORD_ON_FIRST_USE +HTMLDB_UTIL.CLEAR_APP_CACHE +HTMLDB_UTIL.CLEAR_PAGE_CACHE +HTMLDB_UTIL.CLEAR_USER_CACHE +HTMLDB_UTIL.COUNT_CLICK +HTMLDB_UTIL.CREATE_USER +HTMLDB_UTIL.CREATE_USER_FROM_FILE +HTMLDB_UTIL.CREATE_USER_GROUP +HTMLDB_UTIL.CURRENT_USER_IN_GROUP +HTMLDB_UTIL.DAILY_CALENDAR +HTMLDB_UTIL.DECREMENT_CALENDAR +HTMLDB_UTIL.DOWNLOAD_PRINT_DOCUMENT +HTMLDB_UTIL.EDIT_USER +HTMLDB_UTIL.END_USER_ACCOUNT_DAYS_LEFT +HTMLDB_UTIL.EXPIRE_END_USER_ACCOUNT +HTMLDB_UTIL.EXPIRE_WORKSPACE_ACCOUNT +HTMLDB_UTIL.EXPORT_APPLICATION +HTMLDB_UTIL.EXPORT_APPLICATION_COMPONENT +HTMLDB_UTIL.EXPORT_APPLICATION_PAGE +HTMLDB_UTIL.EXPORT_USERS +HTMLDB_UTIL.FETCH_APP_ITEM +HTMLDB_UTIL.FETCH_USER +HTMLDB_UTIL.FILESIZE_MASK +HTMLDB_UTIL.FIND_SECURITY_GROUP_ID +HTMLDB_UTIL.FIND_WORKSPACE +HTMLDB_UTIL.FLASH +HTMLDB_UTIL.FLASH2 +HTMLDB_UTIL.GET_ACCOUNT_LOCKED_STATUS +HTMLDB_UTIL.GET_APPLICATION_ID_STATUS +HTMLDB_UTIL.GET_APPLICATION_NAME +HTMLDB_UTIL.GET_ATTRIBUTE +HTMLDB_UTIL.GET_AUTHENTICATION_RESULT +HTMLDB_UTIL.GET_BLOB +HTMLDB_UTIL.GET_BLOB_FILE +HTMLDB_UTIL.GET_BLOB_FILE_SRC +HTMLDB_UTIL.GET_CURRENT_USER_ID +HTMLDB_UTIL.GET_DEFAULT_SCHEMA +HTMLDB_UTIL.GET_EMAIL +HTMLDB_UTIL.GET_FILE +HTMLDB_UTIL.GET_FILE_ID +HTMLDB_UTIL.GET_FIRST_NAME +HTMLDB_UTIL.GET_GROUPS_USER_BELONGS_TO +HTMLDB_UTIL.GET_GROUP_ID +HTMLDB_UTIL.GET_GROUP_NAME +HTMLDB_UTIL.GET_LAST_NAME +HTMLDB_UTIL.GET_NUMERIC_SESSION_STATE +HTMLDB_UTIL.GET_PREFERENCE +HTMLDB_UTIL.GET_PRINT_DOCUMENT +HTMLDB_UTIL.GET_SESSION_STATE +HTMLDB_UTIL.GET_SINCE +HTMLDB_UTIL.GET_USERNAME +HTMLDB_UTIL.GET_USER_ID +HTMLDB_UTIL.GET_USER_ROLES +HTMLDB_UTIL.HTML_PCT_GRAPH_MASK +HTMLDB_UTIL.INCREMENT_CALENDAR +HTMLDB_UTIL.IR_CLEAR +HTMLDB_UTIL.IR_FILTER +HTMLDB_UTIL.IR_RESET +HTMLDB_UTIL.IS_LOGIN_PASSWORD_VALID +HTMLDB_UTIL.IS_USERNAME_UNIQUE +HTMLDB_UTIL.JSON_FROM_ARRAY +HTMLDB_UTIL.JSON_FROM_ITEMS +HTMLDB_UTIL.JSON_FROM_SQL +HTMLDB_UTIL.JSON_FROM_STRING +HTMLDB_UTIL.KEYVAL_NUM +HTMLDB_UTIL.KEYVAL_VC2 +HTMLDB_UTIL.LOCK_ACCOUNT +HTMLDB_UTIL.MINIMUM_FREE_APPLICATION_ID +HTMLDB_UTIL.MONTH_CALENDAR +HTMLDB_UTIL.PASSWORD_FIRST_USE_OCCURRED +HTMLDB_UTIL.PAUSE +HTMLDB_UTIL.PREPARE_URL +HTMLDB_UTIL.PUBLIC_CHECK_AUTHORIZATION +HTMLDB_UTIL.PURGE_REGIONS_BY_APP +HTMLDB_UTIL.PURGE_REGIONS_BY_NAME +HTMLDB_UTIL.PURGE_REGIONS_BY_PAGE +HTMLDB_UTIL.REMOVE_PREFERENCE +HTMLDB_UTIL.REMOVE_SORT_PREFERENCES +HTMLDB_UTIL.REMOVE_USER +HTMLDB_UTIL.RESET_AUTHORIZATIONS +HTMLDB_UTIL.RESET_PW +HTMLDB_UTIL.SAVEKEY_NUM +HTMLDB_UTIL.SAVEKEY_VC2 +HTMLDB_UTIL.SET_ATTRIBUTE +HTMLDB_UTIL.SET_AUTHENTICATION_RESULT +HTMLDB_UTIL.SET_CUSTOM_AUTH_STATUS +HTMLDB_UTIL.SET_EMAIL +HTMLDB_UTIL.SET_FIRST_NAME +HTMLDB_UTIL.SET_LAST_NAME +HTMLDB_UTIL.SET_PREFERENCE +HTMLDB_UTIL.SET_SESSION_LIFETIME_SECONDS +HTMLDB_UTIL.SET_SESSION_MAX_IDLE_SECONDS +HTMLDB_UTIL.SET_SESSION_STATE +HTMLDB_UTIL.SET_USERNAME +HTMLDB_UTIL.STRING_TO_TABLE +HTMLDB_UTIL.STRONG_PASSWORD_CHECK +HTMLDB_UTIL.STRONG_PASSWORD_VALIDATION +HTMLDB_UTIL.TABLE_TO_STRING +HTMLDB_UTIL.TODAY_CALENDAR +HTMLDB_UTIL.UNEXPIRE_END_USER_ACCOUNT +HTMLDB_UTIL.UNEXPIRE_WORKSPACE_ACCOUNT +HTMLDB_UTIL.UNLOCK_ACCOUNT +HTMLDB_UTIL.URL_ENCODE +HTMLDB_UTIL.USER_IN_GROUP +HTMLDB_UTIL.WEEKLY_CALENDAR +HTMLDB_UTIL.WORKSPACE_ACCOUNT_DAYS_LEFT +HTP. +HTP.ADDDEFAULTHTMLHDR +HTP.ADDRESS +HTP.ANCHOR +HTP.ANCHOR2 +HTP.APPLETCLOSE +HTP.APPLETOPEN +HTP.AREA +HTP.BASE +HTP.BASEFONT +HTP.BGSOUND +HTP.BIG +HTP.BLOCKQUOTECLOSE +HTP.BLOCKQUOTEOPEN +HTP.BODYCLOSE +HTP.BODYOPEN +HTP.BOLD +HTP.BR +HTP.CENTER +HTP.CENTERCLOSE +HTP.CENTEROPEN +HTP.CITE +HTP.CODE +HTP.COMMENT +HTP.DFN +HTP.DIRLISTCLOSE +HTP.DIRLISTOPEN +HTP.DIV +HTP.DLISTCLOSE +HTP.DLISTDEF +HTP.DLISTOPEN +HTP.DLISTTERM +HTP.DOWNLOAD_FILE +HTP.EM +HTP.EMPHASIS +HTP.ESCAPE_SC +HTP.FLUSH +HTP.FLUSH_CHARSET_CONVERT +HTP.FONTCLOSE +HTP.FONTOPEN +HTP.FORMCHECKBOX +HTP.FORMCLOSE +HTP.FORMFILE +HTP.FORMHIDDEN +HTP.FORMIMAGE +HTP.FORMOPEN +HTP.FORMPASSWORD +HTP.FORMRADIO +HTP.FORMRESET +HTP.FORMSELECTCLOSE +HTP.FORMSELECTOPEN +HTP.FORMSELECTOPTION +HTP.FORMSUBMIT +HTP.FORMTEXT +HTP.FORMTEXTAREA +HTP.FORMTEXTAREA2 +HTP.FORMTEXTAREACLOSE +HTP.FORMTEXTAREAOPEN +HTP.FORMTEXTAREAOPEN2 +HTP.FRAME +HTP.FRAMESETCLOSE +HTP.FRAMESETOPEN +HTP.GET_DOWNLOAD_FILES_LIST +HTP.GET_LINE +HTP.GET_PAGE +HTP.GET_PAGE_CHARSET_CONVERT +HTP.GET_PAGE_RAW +HTP.HEADCLOSE +HTP.HEADER +HTP.HEADOPEN +HTP.HR +HTP.HTITLE +HTP.HTMLCLOSE +HTP.HTMLOPEN +HTP.IMG +HTP.IMG2 +HTP.INIT +HTP.ISINDEX +HTP.ITALIC +HTP.KBD +HTP.KEYBOARD +HTP.LINE +HTP.LINKREL +HTP.LINKREV +HTP.LISTHEADER +HTP.LISTINGCLOSE +HTP.LISTINGOPEN +HTP.LISTITEM +HTP.MAILTO +HTP.MAPCLOSE +HTP.MAPOPEN +HTP.MENULISTCLOSE +HTP.MENULISTOPEN +HTP.META +HTP.NEXTID +HTP.NL +HTP.NOBR +HTP.NOFRAMESCLOSE +HTP.NOFRAMESOPEN +HTP.OLISTCLOSE +HTP.OLISTOPEN +HTP.P +HTP.PARA +HTP.PARAGRAPH +HTP.PARAM +HTP.PLAINTEXT +HTP.PRECLOSE +HTP.PREOPEN +HTP.PRINT +HTP.PRINTS +HTP.PRINT_HEADER +HTP.PRN +HTP.PS +HTP.PUTRAW +HTP.RESET_GET_PAGE +HTP.S +HTP.SAMPLE +HTP.SCRIPT +HTP.SETHTTPCHARSET +HTP.SET_TRANSFER_MODE +HTP.SHOWPAGE +HTP.SMALL +HTP.STRIKE +HTP.STRONG +HTP.STYLE +HTP.SUB +HTP.SUP +HTP.TABLECAPTION +HTP.TABLECLOSE +HTP.TABLEDATA +HTP.TABLEHEADER +HTP.TABLEOPEN +HTP.TABLEROWCLOSE +HTP.TABLEROWOPEN +HTP.TELETYPE +HTP.TITLE +HTP.ULISTCLOSE +HTP.ULISTOPEN +HTP.UNDERLINE +HTP.VARIABLE +HTP.WBR +HTTP-LOG30_TAB$XD. +HTTPURITYPE.CREATEURI +HTTPURITYPE.GETBLOB +HTTPURITYPE.GETCLOB +HTTPURITYPE.GETCONTENTTYPE +HTTPURITYPE.GETEXTERNALURL +HTTPURITYPE.GETURL +HTTPURITYPE.GETXML +HTTPURITYPE.HTTPURITYPE +HTTP_ENABLED +HV_ID +HWMSIZE +HWM_BROKERED +HWM_MESSAGE_CREATE_TIME +HWM_MESSAGE_NUMBER +HWM_POSITION +HWM_TIME +IAS_TEMPLATE_ID +IAS_TEMPLATE_NAME +ID1 +ID1_TAG +ID2 +ID2_TAG +IDENTITY +IDLE +IDLE_BLKR_SESSIONS_KILLED +IDLE_BLKR_SESS_KILLED +IDLE_SESSIONS_KILLED +IDLE_SESS_KILLED +IDLE_TIME_CUR +IDLE_TIME_TOTAL +IDX +IF_NAME +IF_NONDURABLE_SUBSCRIBER +IGNORED_HANG +IGNORED_WORKAREAS_COUNT +IGNORE_DDL +IGNORE_OPTIM_EMBEDDED_HINTS +IGNORE_ROW_ON_DUPKEY_INDEX +IGNORE_SCN +IGNORE_WHERE_CLAUSE +IM. +IM.COMPATIBILITYINIT +IMMEDIATE_GETS +IMMEDIATE_MISSES +IMPACT +IMPACT1 +IMPACT2 +IMPACT3 +IMPACT4 +IMPACTS +IMPACT_DESC +IMPACT_FLAGS +IMPACT_ID +IMPACT_NAME +IMPACT_SCOPE +IMPACT_SEVERITY +IMPACT_STR +IMPACT_STR1 +IMPACT_STR2 +IMPACT_STR3 +IMPACT_STR4 +IMPACT_TYPE +IMPLEMENTATION_NAME +IMPLEMENTATION_SCHEMA +IMPLEMENTATION_TYPE +IMPLEMENTATION_TYPE_SCHEMA +IMPLEMENTATION_VERSION +IMPLICIT_DESTROY +IMPLTYPENAME +IMPLTYPEOWNER +IMPORTANCE +IMPT_NATURE +INACTIVITY_TIMEOUT +INBD_TIMOUT +INCARNATION +INCARNATION# +INCIDENT_CNT +INCIDENT_ID +INCLUDE +INCLUDE47_TAB$XD. +INCLUDE66_TAB$XD. +INCLUDED_IN_DATABASE_BACKUP +INCLUDE_COLUMN +INCLUDE_NEW_VALUES +INCLUDE_TAGGED_LCR +INCLUDE_VERSION +INCOMPLETE +INCOMP_LTRL_MISMATCH +INCREFRESHTIM +INCREMENTAL +INCREMENTAL_CHANGE# +INCREMENTAL_LEVEL +INCREMENTAL_SIZE +INCREMENT_BY +INCRSIZE +INC_COUNT +INC_REFRESHABLE +IND +INDEX +INDEXNAME +INDEXTYPE_NAME +INDEX_ASC +INDEX_CLEANUP_COUNT +INDEX_CLEANUP_CPU_TIME +INDEX_CLEANUP_ELAPSED_TIME +INDEX_COLUMN +INDEX_COMBINE +INDEX_DESC +INDEX_FFS +INDEX_HISTOGRAM +INDEX_JOIN +INDEX_NAME +INDEX_NUMBER +INDEX_OWNER +INDEX_RRS +INDEX_RS_ASC +INDEX_RS_DESC +INDEX_SS +INDEX_SS_ASC +INDEX_SS_DESC +INDEX_STATS +INDEX_TYPE +INDEX_VALUE +INDICATOR +INDX +INFERRED +INFO +INFO_FIELD_1 +INFO_FIELD_2 +INFO_FIELD_3 +INFO_FIELD_4 +INFO_ID +INHERITED +INITIALIZER +INITIAL_ALLOCATION +INITIAL_DIF_COUNT +INITIAL_EXTENT +INITIAL_GROUP +INITIAL_RELEASE +INITIAL_RSRC_CONSUMER_GROUP +INITIAL_SIZE +INITJVMAUX. +INITJVMAUX.ABORT_MESSAGE +INITJVMAUX.CHECK_SIZES_FOR_CJS +INITJVMAUX.CREATE_IF_NOT_PRESENT +INITJVMAUX.CURRENTEXECID +INITJVMAUX.CURRENT_RELEASE_VERSION +INITJVMAUX.DEBUG_OUTPUT +INITJVMAUX.DO_JIS_DROP +INITJVMAUX.DROP_SYS_CLASS +INITJVMAUX.DROP_SYS_RESOURCE +INITJVMAUX.DRP +INITJVMAUX.ENDACTION +INITJVMAUX.ENDACTION_ASLOAD +INITJVMAUX.ENDACTION_OUTARG +INITJVMAUX.ENDSTEP +INITJVMAUX.EXEC +INITJVMAUX.JVMUSCRIPT +INITJVMAUX.JVMVERSION +INITJVMAUX.REGISTRYSTATUS +INITJVMAUX.ROLLBACKCLEANUP +INITJVMAUX.ROLLBACKSET +INITJVMAUX.ROLLBACKSETUP +INITJVMAUX.SETLOADED +INITJVMAUX.SETLOADING +INITJVMAUX.SET_ALT_TABLESPACE_LIMIT +INITJVMAUX.SET_DEBUG_OUTPUT_OFF +INITJVMAUX.SET_DEBUG_OUTPUT_ON +INITJVMAUX.STARTACTION +INITJVMAUX.STARTACTION_OUTARG +INITJVMAUX.STARTSTEP +INITJVMAUX.STARTUP_PENDING_P +INITJVMAUX.VALIDATE_JAVAVM +INI_TRANS +INLINE +INLINE_XMLTYPE_NT +INNER_CLASSES +INNER_INDEX +INNER_TABLE_COLUMN +INNER_TABLE_NAME +INNER_TABLE_OWNER +INPUT_BYTES +INPUT_BYTES_DISPLAY +INPUT_BYTES_PER_SEC +INPUT_BYTES_PER_SEC_DISPLAY +INPUT_FILE_SCAN_ONLY +INPUT_TYPE +INS +INSERTABLE +INSERTED_ROWS +INSERTPREDTAB. +INSERTS +INSERT_FLAT_TARGETS. +INSERT_FREQ +INSERT_ORD_LINE. +INSTANCE +INSTANCES +INSTANCE_CAGING +INSTANCE_ID +INSTANCE_NAME +INSTANCE_NUM +INSTANCE_NUM. +INSTANCE_NUMBER +INSTANCE_ROLE +INSTANCE_SET +INSTANCE_STICKINESS +INSTANTIABLE +INSTANTIATION_DATE +INSTANTIATION_SCN +INSTEAD_OF_ROW +INSTNAME +INST_DRTLD_MISMATCH +INST_FLAG +INST_FLAG2 +INST_ID +INST_LOCK_ID1 +INST_LOCK_ID2 +INST_LOCK_RELEASE +INST_LOCK_REQUEST +INST_LOCK_TYPE +INST_NAME +INST_NUMBER +INSUFF_PRIVS +INSUFF_PRIVS_REM +INTEGRITY_ALG +INTERACTIONEXECUTE. +INTERESTING +INTERFACE +INTERFACES +INTERFACE_INDEX +INTERFACE_NAME +INTERFACE_VERSION +INTERIM_OBJECT_NAME +INTERIM_OBJECT_OWNER +INTERNAL_CHECK +INTERNAL_COLUMN_ID +INTERNAL_METRIC_CATEGORY +INTERNAL_METRIC_NAME +INTERNAL_PACKAGE_EXISTS +INTERNAL_TRIGGER_TYPE +INTERNAL_USE +INTERVAL +INTERVAL_SIZE +INTSIZE +INTSIZE_CSEC +INT_OBJNAME +INVALID +INVALIDATIONS +INVALIDATIONS_DELTA +INVALIDATIONS_TOTAL +INVERSE +INVERT +INVOCATIONS +INVOCATION_ID +INVOCATION_TIME +INVOKING_PACKAGE +INVOKING_PACKAGE_OWNER +INVOKING_PROCEDURE +INVOKING_USER +IN_BIND +IN_CONNECTION_MGMT +IN_CURSOR_CLOSE +IN_CYCLE +IN_HARD_PARSE +IN_JAVA_EXECUTION +IN_NET +IN_OUT +IN_PARSE +IN_PLSQL_COMPILATION +IN_PLSQL_EXECUTION +IN_PLSQL_RPC +IN_ROW +IN_SEQUENCE_LOAD +IN_SQL_EXECUTION +IN_TRANSACTION +IN_WAIT +IN_WAIT_SECS +IOPERCALL +IOT_NAME +IOT_REDUNDANT_PKEY_ELIM +IOT_TYPE +IOWAITPERCALL +IOWAIT_DELTA +IOWAIT_TOTAL +IO_CAPABLE +IO_CELL_OFFLOAD_ELIGIBLE_BYTES +IO_CELL_OFFLOAD_RETURNED_BYTES +IO_CELL_UNCOMPRESSED_BYTES +IO_COST +IO_COUNT +IO_INTERCONNECT_BYTES +IO_INTERCONNECT_BYTES_DELTA +IO_INTERCONNECT_BYTES_TOTAL +IO_MEGABYTES +IO_OFFLOAD_ELIG_BYTES_DELTA +IO_OFFLOAD_ELIG_BYTES_TOTAL +IO_OFFLOAD_RETURN_BYTES_DELTA +IO_OFFLOAD_RETURN_BYTES_TOTAL +IO_REQUESTS +IO_SERVICE_TIME +IO_SERVICE_WAITS +IO_SHARES +IO_TIME_MAX +IO_TIME_TOTAL +IO_TYPE +IP_ADDR +IP_ADDRESS +IP_RCA. +IP_RCA.GET_CAUSE_IMPACTS +IP_RCA.GET_MOST_SIGNIFICANT_IMPACTS +IP_SVCTEST. +IP_SVCTEST.GET_SERVICE_TESTS +IP_SVCTEST.GET_TEST_DATA +IP_SVCTEST.GET_TEST_METRICS +IP_WEBAPP. +IP_WEBAPP.CONCAT_STEPS +IP_WEBAPP.GETRESPONSETIMESERIESFORQURIES +IP_WEBAPP.GETROWSBYOBJANDSTAT +IP_WEBAPP.GETROWSBYOBJANDSTATLOC +IP_WEBAPP.GETWEBAPPWATCHLISTDATA +IP_WEBAPP.GET_ANALYZE_DATA_BY_URL +IP_WEBAPP.GET_AVAIL_FOR_CIGAR_CHART +IP_WEBAPP.GET_AVAIL_FOR_PIE_CHART +IP_WEBAPP.GET_METRIC_DATA +IP_WEBAPP.GET_METRIC_LIST +IP_WEBAPP.GET_METRIC_THRESHOLDS +IP_WEBAPP.GET_SLOWURL_DATA +IP_WEBAPP.GET_STEPGROUP_DATA +IP_WEBAPP.GET_STEP_DATA +IP_WEBAPP.GET_URLPERF_DATA +ISADJUSTED +ISBASIC +ISCURRENT +ISDEFAULT +ISDEPRECATED +ISINSTANCE_MODIFIABLE +ISMODIFIED +ISSES_MODIFIABLE +ISSPECIFIED +ISSUER +ISSYS_MODIFIABLE +ISXMLTYPETABLE. +IS_ABSTRACT +IS_ACTIVE +IS_AGGREGATE +IS_ALTER_COLUMN. +IS_AWR_SAMPLE +IS_BACKUP +IS_BIND_AWARE +IS_BIND_SENSITIVE +IS_CAPTURED +IS_COMPILED +IS_CREATING_NESTED_TABLE. +IS_CUSTOM_AGGREGATE +IS_DEBUG +IS_DEFAULT +IS_DISABLED +IS_DML_DATA_DIVERGENCE +IS_DROP_COLUMN. +IS_ERROR_DIVERGENCE +IS_FINAL +IS_FULL_SQLTEXT +IS_GRANT +IS_INNER +IS_INTERFACE +IS_MODIFIABLE_ANYTIME +IS_NATIVE +IS_NESTED +IS_OBSOLETE +IS_OUTPUT +IS_PUBLIC +IS_QUERY_DATA_DIVERGENCE +IS_RAGGED +IS_RECOVERY_DEST_FILE +IS_REPLAYED +IS_SCOPED +IS_SERVERERROR. +IS_SHAREABLE +IS_SKIP_LEVEL +IS_SPARSE +IS_SQLID_CURRENT +IS_STATIC +IS_STRICT +IS_STS +IS_SYNCHRONIZED +IS_SYSTEM_TASK_ONLY +IS_THREAD_FAILURE +IS_TOP_PLAN +IS_TRANSIENT +IS_USER +IS_VALID +IS_VOLATILE +IS_VPD_ENABLED. +ITEM +ITEM_NAME +ITEM_VALUE +ITL_WAITS_DELTA +ITL_WAITS_TOTAL +ITYP_NAME +ITYP_OWNER +JAVA_EXEC_TIME +JAVA_POOL_SIZE_FACTOR +JAVA_POOL_SIZE_FOR_ESTIMATE +JAVA_XA. +JAVA_XA.XA_COMMIT +JAVA_XA.XA_COMMIT_NEW +JAVA_XA.XA_DOTWOPHASE +JAVA_XA.XA_END +JAVA_XA.XA_END_NEW +JAVA_XA.XA_FORGET +JAVA_XA.XA_FORGET_NEW +JAVA_XA.XA_PREPARE +JAVA_XA.XA_PREPARE_NEW +JAVA_XA.XA_ROLLBACK +JAVA_XA.XA_ROLLBACK_NEW +JAVA_XA.XA_START +JAVA_XA.XA_START_NEW +JAVA_XA.XA_THINTWOPHASE +JAVEXEC_TIME_DELTA +JAVEXEC_TIME_TOTAL +JOB +JOB.JOB +JOBARG.JOBARG +JOBATTR.JOBATTR +JOBS_COMPLETED +JOBS_CREATED +JOBS_STARTED +JOB_ACTION +JOB_CLASS +JOB_CLASS_NAME +JOB_CLEANUP_MAX_VERSIONS. +JOB_CMD_BLK_DELETE_TRIGGER. +JOB_CREATOR +JOB_DEFINITION.JOB_DEFINITION +JOB_DELETE_TRIGGER. +JOB_DESCRIPTION +JOB_DEST_ID +JOB_DURATION +JOB_ERROR +JOB_EXEC_DELETE_TRIGGER. +JOB_EXEC_UPDATE_TRIGGER. +JOB_FREQUENCY +JOB_ID +JOB_INFO +JOB_INSERT_CRED_TYPE_DATA. +JOB_MODE +JOB_NAME +JOB_NEXT_RUN_DATE +JOB_OWNER +JOB_PREFIX +JOB_PRIORITY +JOB_SCHEDULER_STATUS +JOB_SEQ +JOB_SET_MAX_VERSIONS. +JOB_START_TIME +JOB_STATE +JOB_STATE_CHG_INS_TRIGGER. +JOB_STATUS +JOB_STYLE +JOB_SUBNAME +JOB_SUMM_INS_TRIGGER. +JOB_SUMM_INS_TRIGGER2. +JOB_TARGET_DEL_TRIGGER. +JOB_TARGET_INSERT_TRIGGER. +JOB_TYPE +JOB_UPDATE_RECENT_VERSIONS. +JOB_WEIGHT +JOIN_INDEX +JOIN_KEY_ID +JOIN_POS +JOURNAL_ENTRY +JOURNAL_ENTRY_SEQ +JOURNAL_ENTRY_TYPE +JVMFCB. +JVMFCB.EXIT +JVMFCB.INIT +JVMFCB.PUT +JVMRJBC. +JVMRJBC.DONE +JVMRJBC.GETLOB +JVMRJBC.GETPATH +JVMRJBC.INIT +JVMRJBC.PUTLOB +JVMRJBC.PUTPATH +KADDR +KBYTES_READ +KBYTES_WRITTEN +KEEP +KEEP_FILES +KEEP_OPTIONS +KEEP_UNTIL +KEPT +KEPT_VERSIONS +KEY +KEYSIZE +KEYWORD +KEY_LENGTH +KEY_NAME +KEY_POSITION +KEY_SIZE +KEY_VALUE +KGLLKHDL +KGLLKMOD +KGLLKREQ +KGLLKTYPE +KGLLKUSE +KIND +KNOWN_AGENTS +KNOWN_STALE +KUPC$QUEUE. +KUPC$QUEUE.TRANSCEIVE +KUPC$QUEUE_INT. +KUPC$QUEUE_INT.ATTACH_QUEUE +KUPC$QUEUE_INT.ATTACH_QUEUES +KUPC$QUEUE_INT.CREATE_QUEUES +KUPC$QUEUE_INT.DELETE_QUEUES +KUPC$QUEUE_INT.DETACH_QUEUE +KUPC$QUEUE_INT.DETACH_QUEUES +KUPC$QUEUE_INT.GET_STATUS +KUPC$QUEUE_INT.GET_SUBSCRIBER_COUNT +KUPC$QUEUE_INT.ISREMOTE +KUPC$QUEUE_INT.PREPARE_QUEUE_TABLE +KUPC$QUEUE_INT.PUT_STATUS +KUPC$QUEUE_INT.RECEIVE +KUPC$QUEUE_INT.SEND +KUPC$QUEUE_INT.SET_DEBUG +KUPC$QUEUE_INT.TRANSCEIVE +KUPC$QUE_INT. +KUPC$QUE_INT.ATTACH_QUEUE +KUPC$QUE_INT.ATTACH_QUEUES +KUPC$QUE_INT.CREATE_QUEUES +KUPC$QUE_INT.DELETE_QUEUES +KUPC$QUE_INT.DETACH_QUEUE +KUPC$QUE_INT.DETACH_QUEUES +KUPC$QUE_INT.GET_STATUS +KUPC$QUE_INT.GET_SUBSCRIBER_COUNT +KUPC$QUE_INT.PREPARE_QUEUE_TABLE +KUPC$QUE_INT.PUT_STATUS +KUPC$QUE_INT.RECEIVE +KUPC$QUE_INT.SEND +KUPC$QUE_INT.SET_DEBUG +KUPC$QUE_INT.TRANSCEIVE_INT +KUPC$_ADD_DEVICE.KUPC$_ADD_DEVICE +KUPC$_ADD_FILE.KUPC$_ADD_FILE +KUPC$_API_ACK.KUPC$_API_ACK +KUPC$_BAD_FILE.KUPC$_BAD_FILE +KUPC$_DATA_FILTER.KUPC$_DATA_FILTER +KUPC$_DATA_REMAP.KUPC$_DATA_REMAP +KUPC$_DEVICE_IDENT.KUPC$_DEVICE_IDENT +KUPC$_DISK_FILE.KUPC$_DISK_FILE +KUPC$_ENCRYPTED_PWD.KUPC$_ENCRYPTED_PWD +KUPC$_ESTIMATE_JOB.KUPC$_ESTIMATE_JOB +KUPC$_EXIT.KUPC$_EXIT +KUPC$_FILEINFO.KUPC$_FILEINFO +KUPC$_FILE_LIST.KUPC$_FILE_LIST +KUPC$_GET_WORK.KUPC$_GET_WORK +KUPC$_JOBINFO.ADDERROR +KUPC$_JOBINFO.ADDLINE +KUPC$_JOBINFO.ADDLOGENTRY +KUPC$_JOBINFO.CREATEJOBINFO +KUPC$_JOBINFO.FORMAT +KUPC$_JOBINFO.KUPC$_JOBINFO +KUPC$_JOBINFO.PRINTJOBINFO +KUPC$_LOAD_DATA.KUPC$_LOAD_DATA +KUPC$_LOAD_METADATA.KUPC$_LOAD_METADATA +KUPC$_LOG_ENTRY.KUPC$_LOG_ENTRY +KUPC$_LOG_ERROR.KUPC$_LOG_ERROR +KUPC$_MASTERERROR.KUPC$_MASTERERROR +KUPC$_MASTERJOBINFO.KUPC$_MASTERJOBINFO +KUPC$_MDFILEPIECE.KUPC$_MDFILEPIECE +KUPC$_MESSAGE.ISDATAGRAM +KUPC$_MESSAGE.ISREQUEST +KUPC$_MESSAGE.ISRESPONSE +KUPC$_METADATA_FILTER.KUPC$_METADATA_FILTER +KUPC$_METADATA_REMAP.KUPC$_METADATA_REMAP +KUPC$_METADATA_TRANSFORM.KUPC$_METADATA_TRANSFORM +KUPC$_OPEN.KUPC$_OPEN +KUPC$_POST_MT_INIT.KUPC$_POST_MT_INIT +KUPC$_RELEASE_FILES.KUPC$_RELEASE_FILES +KUPC$_RESTART.KUPC$_RESTART +KUPC$_SEQUENTIAL_FILE.KUPC$_SEQUENTIAL_FILE +KUPC$_SET_PARALLEL.KUPC$_SET_PARALLEL +KUPC$_SET_PARAMETER.KUPC$_SET_PARAMETER +KUPC$_SQL_FILE_JOB.KUPC$_SQL_FILE_JOB +KUPC$_START_JOB.KUPC$_START_JOB +KUPC$_STOP_JOB.KUPC$_STOP_JOB +KUPC$_TABLE_DATA_ARRAY.KUPC$_TABLE_DATA_ARRAY +KUPC$_UNLOAD_DATA.KUPC$_UNLOAD_DATA +KUPC$_UNLOAD_METADATA.KUPC$_UNLOAD_METADATA +KUPC$_WORKERERROR.KUPC$_WORKERERROR +KUPC$_WORKER_EXIT.KUPC$_WORKER_EXIT +KUPC$_WORKER_FILE.KUPC$_WORKER_FILE +KUPC$_WORKER_FILE_LIST.KUPC$_WORKER_FILE_LIST +KUPC$_WORKER_GET_PWD.KUPC$_WORKER_GET_PWD +KUPC$_WORKER_LOG_ENTRY.KUPC$_WORKER_LOG_ENTRY +KUPCC. +KUPD$DATA. +KUPD$DATA.ADD_FILE +KUPD$DATA.ET_CREATE_ERROR_TABLE +KUPD$DATA.FETCH_INSERT_STMT +KUPD$DATA.OPEN +KUPD$DATA.SET_DEBUG +KUPD$DATA.SET_PARAMETER +KUPD$DATA.START_JOB +KUPD$DATA_INT. +KUPD$DATA_INT.CONVENTIONAL_LOAD +KUPD$DATA_INT.FETCH_METADATA +KUPD$DATA_INT.LOAD_DATA +KUPD$DATA_INT.SELECT_MODE +KUPD$DATA_INT.SEND_TRACE_MSG +KUPD$DATA_INT.UNLOAD_DATA +KUPF$FILE. +KUPF$FILE.ADD_DEVICE +KUPF$FILE.ADD_FILE +KUPF$FILE.ADD_TDX_ROW_CB +KUPF$FILE.ALLOCATE_DEVICE +KUPF$FILE.CHECK_ACCESS +KUPF$FILE.CHECK_FATAL_ERROR +KUPF$FILE.CLOSE_CONTEXT +KUPF$FILE.DELETE_UNUSED_FILE_REFS +KUPF$FILE.FILE_REQUEST +KUPF$FILE.FILE_REQUEST_NAK +KUPF$FILE.FLUSH_LOB +KUPF$FILE.GET_BLKBUF_SIZES +KUPF$FILE.GET_DEFAULT_FILENAME +KUPF$FILE.GET_DUMPFILE_INFO +KUPF$FILE.GET_FILE_ATTRS +KUPF$FILE.GET_FILE_INFO +KUPF$FILE.GET_FILE_LIST +KUPF$FILE.GET_FORMATTED_TIME +KUPF$FILE.GET_FULL_FILENAME +KUPF$FILE.GET_MAX_CSWIDTH +KUPF$FILE.INIT +KUPF$FILE.INIT_CB +KUPF$FILE.INIT_TDX_STATS +KUPF$FILE.IS_DUMPFILE_SET_CONSISTENT +KUPF$FILE.JOB_MODES +KUPF$FILE.LOCATE_MASTER +KUPF$FILE.LOG_MESSAGES +KUPF$FILE.MARK_FILES_AS_UNUSABLE +KUPF$FILE.MASTER_TABLE_UNLOAD_STARTED +KUPF$FILE.OPEN_CONTEXT +KUPF$FILE.READ_LOB +KUPF$FILE.RELEASE_FILE +KUPF$FILE.RELEASE_FILES +KUPF$FILE.REQUEST_ENCPWD +KUPF$FILE.REQUEST_FILE +KUPF$FILE.RESET_EOF +KUPF$FILE.SET_DEBUG +KUPF$FILE.TERM +KUPF$FILE.TRACE +KUPF$FILE.UPD_FILE_COMP_BYTES +KUPF$FILE.UPD_TDX_FILEINFO_CB +KUPF$FILE.UPD_TDX_STATS_CB +KUPF$FILE.VERIFY_DUMPFILE_SET +KUPF$FILE.WRITE_LOB +KUPF$FILE_INT. +KUPF$FILE_INT.CLOSE_CONTEXT +KUPF$FILE_INT.CREATE_DUMP_FILE +KUPF$FILE_INT.CREATE_KEY_INFO +KUPF$FILE_INT.DELETE_DUMP_FILE +KUPF$FILE_INT.ENCRYPT_PWD +KUPF$FILE_INT.EXAMINE_DUMP_FILE +KUPF$FILE_INT.FLUSH_LOB +KUPF$FILE_INT.GET_BLKBUF_SIZES +KUPF$FILE_INT.GET_DEFAULT_FILENAME +KUPF$FILE_INT.GET_ENCPWD +KUPF$FILE_INT.GET_FORMATTED_TIME +KUPF$FILE_INT.GET_FULL_FILENAME +KUPF$FILE_INT.GET_MAX_CSWIDTH +KUPF$FILE_INT.INIT +KUPF$FILE_INT.OPEN_CONTEXT +KUPF$FILE_INT.PARSE_FILENAME +KUPF$FILE_INT.READ_LOB +KUPF$FILE_INT.RELEASE_FILES +KUPF$FILE_INT.SET_DEBUG +KUPF$FILE_INT.SET_TRANS_PARAMS +KUPF$FILE_INT.TERM +KUPF$FILE_INT.VERIFY_KEY_INFO +KUPF$FILE_INT.WRITE_LOB +KUPM$MCP. +KUPM$MCP.CLOSE_JOB +KUPM$MCP.DISPATCH +KUPM$MCP.FILE_LOG_MESSAGE +KUPM$MCP.FILE_TO_WORKER +KUPM$MCP.GET_ENDIANNESS +KUPM$MCP.MAIN +KUPM$MCP.MAINLOOP +KUPM$MCP.SET_DEBUG +KUPM$MCP.VALIDATE_EXPRESSION +KUPP$PROC. +KUPP$PROC.ANY_DEBUG_TRACE_INFO +KUPP$PROC.APPLY_TRACE_DEBUG_RULES +KUPP$PROC.CHANGE_USER +KUPP$PROC.CHECK_FOR_INTERRUPT +KUPP$PROC.CHECK_WORKER_STATUS +KUPP$PROC.CREATE_MASTER_PROCESS +KUPP$PROC.CREATE_WORKER_PROCESSES +KUPP$PROC.DELETE_WORKER_PROCESSES +KUPP$PROC.DISABLE_MULTIPROCESS +KUPP$PROC.ENABLE_FLASHBACK_DMLS +KUPP$PROC.ENABLE_MULTIPROCESS +KUPP$PROC.GET_NLS_ALTER_SESSION +KUPP$PROC.GET_WORKER_EXCEPTION +KUPP$PROC.INIT_DONE +KUPP$PROC.IS_MULTIPROCESS_ENABLED +KUPP$PROC.JOB_ALIVE +KUPP$PROC.OPTION_ENABLED +KUPP$PROC.SET_DEBUG +KUPP$PROC.SET_PROFILING +KUPP$PROC.SET_REMOTE_WORKER +KUPP$PROC.SET_TRACE_DEBUG +KUPP$PROC.TOTAL_WORKERS_ALIVE +KUPP$PROC.WHATS_MY_ID +KUPP$PROC.WHATS_MY_NAME +KUPP$PROC.WHAT_AM_I +KUPP$PROC.WHAT_ORACLE_PRODUCT +KUPP$PROC.WORKER_PROCESS_INIT +KUPP$PROC.WORKER_SERVICE_INIT +KUPU$UTILITIES. +KUPU$UTILITIES.UPDATEFEATURETABLE +KUPU$UTILITIES_INT. +KUPU$UTILITIES_INT.UPDATEFEATURETABLE +KUPV$FT. +KUPV$FT.ATTACH_JOB +KUPV$FT.BUILD_COL_LIST +KUPV$FT.CREATE_GBL_TEMPORARY_MASTERS +KUPV$FT.ERROR_TEXT +KUPV$FT.FLUSH_TIMINGS +KUPV$FT.HAS_PRIVS +KUPV$FT.MESSAGE_TEXT +KUPV$FT.OPEN_JOB +KUPV$FT.RECORD_DELTA_TIMINGS +KUPV$FT.SET_APPLICATION_ROLE +KUPV$FT.SET_LONGOPS +KUPV$FT.START_TIMINGS +KUPV$FT_INT. +KUPV$FT_INT.ACTIVE_JOB +KUPV$FT_INT.ASSIGN_JOB +KUPV$FT_INT.ATTACH_POSSIBLE +KUPV$FT_INT.ATTACH_TO_JOB +KUPV$FT_INT.CHECK_USER_VALID +KUPV$FT_INT.CREATE_NEW_JOB +KUPV$FT_INT.DELETE_JOB +KUPV$FT_INT.DELETE_MASTER_TABLE +KUPV$FT_INT.DETACH_JOB +KUPV$FT_INT.FATAL_ERROR +KUPV$FT_INT.GET_ERROR_TEXT +KUPV$FT_INT.GET_INSTANCE_ID +KUPV$FT_INT.GET_JOB_GUID +KUPV$FT_INT.GET_JOB_INFO +KUPV$FT_INT.GET_JOB_QUEUES +KUPV$FT_INT.GET_PLATFORM_NAME +KUPV$FT_INT.GET_SESSION_ADDRESS +KUPV$FT_INT.GET_SOLE_JOBNAME +KUPV$FT_INT.MASTER_TBL_LOCK +KUPV$FT_INT.MASTER_TBL_UNLOCK +KUPV$FT_INT.REMOVE_NEW_ATTACH +KUPV$FT_INT.REMOVE_NEW_JOB +KUPV$FT_INT.SET_DEBUG +KUPV$FT_INT.SET_DEBUG_FS +KUPV$FT_INT.SET_EVENT +KUPV$FT_INT.UPDATE_JOB_INFO +KUPV$FT_INT.UPDATE_JOB_SNUM +KUPV$FT_INT.VALID_HANDLE +KUPW$WORKER. +KUPW$WORKER.DISPATCH_WORK_ITEMS +KUPW$WORKER.FETCH_UNLOAD_METHOD +KUPW$WORKER.GET_JOB_VERSION +KUPW$WORKER.MAIN +KUPW$WORKER.SET_DEBUG +KUPW$WORKER.STREAM_MD_REMAP_SCHEMA +LABEL +LADDR +LAG +LANGUAGE_FLAG +LANGUAGE_MISMATCH +LARGE_CHAR_VALUE +LARGE_READ_IOPS +LARGE_READ_MBPS +LARGE_READ_MEGABYTES +LARGE_READ_REQS +LARGE_READ_REQUESTS +LARGE_READ_SERVICETIME +LARGE_WRITE_IOPS +LARGE_WRITE_MBPS +LARGE_WRITE_MEGABYTES +LARGE_WRITE_REQS +LARGE_WRITE_REQUESTS +LARGE_WRITE_SERVICETIME +LASTINC_TIME +LAST_ABORTED_SIZE +LAST_ACTIVE_CHILD_ADDRESS +LAST_ACTIVE_TIME +LAST_ANALYZED +LAST_APPLY_POSITION +LAST_ARCHIVE_TS +LAST_ASH_SAMPLE_ID +LAST_AUTOPRG_TIME +LAST_BASE_SEQUENCE +LAST_BROWSED_NUM +LAST_BROWSED_SEQ +LAST_BROWSE_NUM +LAST_BROWSE_POSITION +LAST_BROWSE_SEQ +LAST_CALL_ET +LAST_CAPTURED +LAST_CHANGE +LAST_CHANGE# +LAST_CHANGE_TIME +LAST_COMPLETE_SEQUENCE +LAST_CONVERT +LAST_CREATED_TASKNUM +LAST_CR_BUFFER_GETS +LAST_CU_BUFFER_GETS +LAST_DATE +LAST_DB_REPORT_TIME +LAST_DDL_TIME +LAST_DEALLOC_CHANGE# +LAST_DEGREE +LAST_DEQLOG_PROCESSING_TIME +LAST_DEQUEUED_NUM +LAST_DEQUEUED_SEQ +LAST_DEQUEUE_TIME +LAST_DEQ_SEQ +LAST_DISK_READS +LAST_DISK_WRITES +LAST_ELAPSED_TIME +LAST_EM_REPORT_TIME +LAST_END_DATE +LAST_ENQUEUED_MSG +LAST_ENQUEUED_SCN +LAST_ENQUEUE_TIME +LAST_ERR +LAST_ERROR_DATE +LAST_ERROR_MSG +LAST_ERROR_TIME +LAST_ERR_TIME +LAST_EXECUTED +LAST_EXECUTION +LAST_EXECUTION_DATE +LAST_EXEC_TIME +LAST_EXTENDED +LAST_FAILOVER_REASON +LAST_FAILOVER_TIME +LAST_FAILURE +LAST_FAILURE_SIZE +LAST_FAILURE_TASK +LAST_FAILURE_TASKNUM +LAST_FAILURE_TIME +LAST_GENERATED +LAST_GOOD_CONCURRENCY +LAST_GOOD_CONTENTION +LAST_GOOD_CPU_TIME +LAST_GOOD_CPU_WAIT +LAST_GOOD_DATE +LAST_GOOD_DOP +LAST_GOOD_DURATION +LAST_GOOD_IO_RATE +LAST_GOOD_IO_WAIT +LAST_GOOD_PRIORITY +LAST_GOOD_TEMP +LAST_GOOD_TEMP_WAIT +LAST_GOOD_UNDO_RATE +LAST_GOOD_UNDO_WAIT +LAST_HOUR_INCIDENTS +LAST_INCIDENT +LAST_INCIDENT_IMPACT +LAST_INDEX +LAST_INDEX_CLEANUP_TIME +LAST_LCR_CREATION_TIME +LAST_LCR_LATENCY +LAST_LCR_PROPAGATION_TIME +LAST_LOADING_TIME +LAST_LOAD_TIME +LAST_MANUPRG_TIME +LAST_MEMORY_USED +LAST_MESSAGE_NUMBER +LAST_MESSAGE_POSITION +LAST_MESSAGE_TIME +LAST_MISS_SIZE +LAST_MODIFIED +LAST_MODIFIED_TIME +LAST_MOD_TIME +LAST_MSG_ENQUEUE_TIME +LAST_MSG_LATENCY +LAST_MSG_PROPAGATION_TIME +LAST_NTFN_SENT_TIME +LAST_NTFN_START_TIME +LAST_NUMBER +LAST_OPEN_INCARNATION# +LAST_OPER_MODE +LAST_OPER_TIME +LAST_OPER_TYPE +LAST_OUTPUT_ROWS +LAST_PING_TIME +LAST_PROCESSED_VERSION +LAST_PURGED +LAST_PURGE_DATE +LAST_PURGE_END_DATE +LAST_PURGE_START_DATE +LAST_PURGE_STATUS +LAST_PURGE_TIME +LAST_QUERIED +LAST_QUERY +LAST_RECEIVED_MSG +LAST_RECEIVED_MSG_POSITION +LAST_RECID +LAST_REDO_BLK# +LAST_REDO_BLOCK +LAST_REDO_CHANGE# +LAST_REDO_SEQ# +LAST_REDO_SEQUENCE# +LAST_REDO_TIME +LAST_REFRESH +LAST_REFRESH_DATE +LAST_REFRESH_SCN +LAST_REFRESH_TIME +LAST_REFRESH_TYPE +LAST_REKEY_TIME +LAST_REPORT_TIME +LAST_RESUME_TIME +LAST_RUN_DATE +LAST_RUN_DURATION +LAST_RUN_TIME +LAST_SAMPLE_DATE +LAST_SAMPLE_PERIOD +LAST_SEC +LAST_SENT_MESSAGE_CREATE_TIME +LAST_SENT_MESSAGE_NUMBER +LAST_SENT_POSITION +LAST_SEQUENCE +LAST_SERVER_PID +LAST_SERVER_START_TIME +LAST_SQL_ACTIVE_TIME +LAST_STARTS +LAST_START_DATE +LAST_TEMPSEG_SIZE +LAST_TIME +LAST_TIME_COMPUTED +LAST_TIME_UPDATED +LAST_TMGR_PROCESSING_TIME +LAST_TM_EXPIRY_TIME +LAST_TM_READY_TIME +LAST_TRY_CONCURRENCY +LAST_TRY_CONTENTION +LAST_TRY_CPU_TIME +LAST_TRY_CPU_WAIT +LAST_TRY_DATE +LAST_TRY_DOP +LAST_TRY_DURATION +LAST_TRY_IO_RATE +LAST_TRY_IO_WAIT +LAST_TRY_PRIORITY +LAST_TRY_RESULT +LAST_TRY_TEMP +LAST_TRY_TEMP_WAIT +LAST_TRY_UNDO_RATE +LAST_TRY_UNDO_WAIT +LAST_UPDATE_TIME +LAST_USAGE_DATE +LAST_VALUE +LAST_VERIFIED +LAST_WAIT_TIME +LATCH +LATCH# +LATCHSPIN +LATCHWAIT +LATCH_HASH +LATCH_NAME +LATENCY +LATEST_INC_CTIME +LATEST_SAMPLE_ID +LATEST_SAMPLE_TIME +LATEST_SCN +LATEST_TIME +LAYER_ID +LAYER_NAME +LCR$_DDL_RECORD.CONSTRUCT +LCR$_DDL_RECORD.EXECUTE +LCR$_DDL_RECORD.GET_BASE_TABLE_NAME +LCR$_DDL_RECORD.GET_BASE_TABLE_OWNER +LCR$_DDL_RECORD.GET_COMMAND_TYPE +LCR$_DDL_RECORD.GET_COMMIT_SCN +LCR$_DDL_RECORD.GET_COMMIT_SCN_FROM_POSITION +LCR$_DDL_RECORD.GET_COMMIT_TIME +LCR$_DDL_RECORD.GET_COMPATIBLE +LCR$_DDL_RECORD.GET_CURRENT_SCHEMA +LCR$_DDL_RECORD.GET_DDL_TEXT +LCR$_DDL_RECORD.GET_EDITION_NAME +LCR$_DDL_RECORD.GET_EXTRA_ATTRIBUTE +LCR$_DDL_RECORD.GET_LOGON_USER +LCR$_DDL_RECORD.GET_OBJECT_NAME +LCR$_DDL_RECORD.GET_OBJECT_OWNER +LCR$_DDL_RECORD.GET_OBJECT_TYPE +LCR$_DDL_RECORD.GET_POSITION +LCR$_DDL_RECORD.GET_SCN +LCR$_DDL_RECORD.GET_SCN_FROM_POSITION +LCR$_DDL_RECORD.GET_SOURCE_DATABASE_NAME +LCR$_DDL_RECORD.GET_SOURCE_TIME +LCR$_DDL_RECORD.GET_TAG +LCR$_DDL_RECORD.GET_THREAD_NUMBER +LCR$_DDL_RECORD.GET_TRANSACTION_ID +LCR$_DDL_RECORD.IS_NULL_TAG +LCR$_DDL_RECORD.MAP_LCR +LCR$_DDL_RECORD.SET_BASE_TABLE_NAME +LCR$_DDL_RECORD.SET_BASE_TABLE_OWNER +LCR$_DDL_RECORD.SET_COMMAND_TYPE +LCR$_DDL_RECORD.SET_CURRENT_SCHEMA +LCR$_DDL_RECORD.SET_DDL_TEXT +LCR$_DDL_RECORD.SET_EDITION_NAME +LCR$_DDL_RECORD.SET_EXTRA_ATTRIBUTE +LCR$_DDL_RECORD.SET_LOGON_USER +LCR$_DDL_RECORD.SET_OBJECT_NAME +LCR$_DDL_RECORD.SET_OBJECT_OWNER +LCR$_DDL_RECORD.SET_OBJECT_TYPE +LCR$_DDL_RECORD.SET_SOURCE_DATABASE_NAME +LCR$_DDL_RECORD.SET_TAG +LCR$_PROCEDURE_RECORD.GET_PACKAGE_NAME +LCR$_PROCEDURE_RECORD.GET_PACKAGE_OWNER +LCR$_PROCEDURE_RECORD.GET_PARAMETERS +LCR$_PROCEDURE_RECORD.GET_PROCEDURE_NAME +LCR$_PROCEDURE_RECORD.GET_PUBLICATION +LCR$_PROCEDURE_RECORD.GET_SCN +LCR$_PROCEDURE_RECORD.GET_SOURCE_DATABASE_NAME +LCR$_PROCEDURE_RECORD.GET_TRANSACTION_ID +LCR$_PROCEDURE_RECORD.MAP_LCR +LCR$_ROW_RECORD.ADD_COLUMN +LCR$_ROW_RECORD.CONSTRUCT +LCR$_ROW_RECORD.CONVERT_LONG_TO_LOB_CHUNK +LCR$_ROW_RECORD.DELETE_COLUMN +LCR$_ROW_RECORD.EXECUTE +LCR$_ROW_RECORD.GET_BASE_OBJECT_ID +LCR$_ROW_RECORD.GET_COMMAND_TYPE +LCR$_ROW_RECORD.GET_COMMIT_SCN +LCR$_ROW_RECORD.GET_COMMIT_SCN_FROM_POSITION +LCR$_ROW_RECORD.GET_COMMIT_TIME +LCR$_ROW_RECORD.GET_COMPATIBLE +LCR$_ROW_RECORD.GET_EXTRA_ATTRIBUTE +LCR$_ROW_RECORD.GET_LOB_INFORMATION +LCR$_ROW_RECORD.GET_LOB_OFFSET +LCR$_ROW_RECORD.GET_LOB_OPERATION_SIZE +LCR$_ROW_RECORD.GET_LONG_INFORMATION +LCR$_ROW_RECORD.GET_OBJECT_ID +LCR$_ROW_RECORD.GET_OBJECT_NAME +LCR$_ROW_RECORD.GET_OBJECT_OWNER +LCR$_ROW_RECORD.GET_POSITION +LCR$_ROW_RECORD.GET_ROW_TEXT +LCR$_ROW_RECORD.GET_SCN +LCR$_ROW_RECORD.GET_SCN_FROM_POSITION +LCR$_ROW_RECORD.GET_SOURCE_DATABASE_NAME +LCR$_ROW_RECORD.GET_SOURCE_TIME +LCR$_ROW_RECORD.GET_TAG +LCR$_ROW_RECORD.GET_THREAD_NUMBER +LCR$_ROW_RECORD.GET_TRANSACTION_ID +LCR$_ROW_RECORD.GET_VALUE +LCR$_ROW_RECORD.GET_VALUES +LCR$_ROW_RECORD.GET_WHERE_CLAUSE +LCR$_ROW_RECORD.GET_XML_INFORMATION +LCR$_ROW_RECORD.IS_NULL_TAG +LCR$_ROW_RECORD.IS_STATEMENT_LCR +LCR$_ROW_RECORD.KEEP_COLUMNS +LCR$_ROW_RECORD.MAP_LCR +LCR$_ROW_RECORD.RENAME_COLUMN +LCR$_ROW_RECORD.SET_COMMAND_TYPE +LCR$_ROW_RECORD.SET_EXTRA_ATTRIBUTE +LCR$_ROW_RECORD.SET_LOB_INFORMATION +LCR$_ROW_RECORD.SET_LOB_OFFSET +LCR$_ROW_RECORD.SET_LOB_OPERATION_SIZE +LCR$_ROW_RECORD.SET_OBJECT_NAME +LCR$_ROW_RECORD.SET_OBJECT_OWNER +LCR$_ROW_RECORD.SET_ROW_TEXT +LCR$_ROW_RECORD.SET_SOURCE_DATABASE_NAME +LCR$_ROW_RECORD.SET_TAG +LCR$_ROW_RECORD.SET_VALUE +LCR$_ROW_RECORD.SET_VALUES +LCR$_ROW_RECORD.SET_XML_INFORMATION +LCR$_ROW_UNIT.LCR$_ROW_UNIT +LCR$_XML_SCHEMA. +LCR_COUNT +LC_FREEABLE_MEMORY_OBJECTS +LC_FREEABLE_MEMORY_SIZE +LC_INUSE_MEMORY_OBJECTS +LC_INUSE_MEMORY_SIZE +LC_NAMESPACE +LEADING +LEAF_BLOCKS +LEAF_CATEGORY_TYP.CATEGORY_DESCRIBE +LEASEEXPIRY +LENGTH +LEVEL +LEVEL# +LEVEL_NAME +LIBRARY +LIBRARYFILE +LIBRARY_NAME +LIB_IDX +LIB_NAME +LIGHTSOURCE3D773_TAB$XD. +LIGHT_WORKS +LIKE_EXPAND +LIMIT +LIMIT_VALUE +LINE +LINENO +LINE_NUMBER +LISTENER +LITERAL_HASH_VALUE +LITERAL_MISMATCH +LITREP_COMP_MISMATCH +LMODE +LOADED +LOADED_VERSIONS +LOADS +LOADS_DELTA +LOADS_TOTAL +LOAD_OPTIMIZER_STATS +LOAD_RUNTIME_HEAP_FAILED +LOAD_UNDO_STAT. +LOBCURRTIME +LOBEXPMQL +LOBID +LOBOBJID +LOBRDBA +LOBSPCANALTIME +LOBSQLMQL +LOBTSN +LOBUNDORETTIME +LOB_COL_NAME +LOB_INDEX_NAME +LOB_INDPART_NAME +LOB_INDSUBPART_NAME +LOB_NAME +LOB_PARTITION_NAME +LOB_READS +LOB_SEGMENT_NAME +LOB_SUBPARTITION_NAME +LOC +LOCAL +LOCALITY +LOCAL_ATTRIBUTES +LOCAL_CONVERGE_TAG +LOCAL_INDEXES +LOCAL_METHODS +LOCAL_NID +LOCAL_PRIVILEGES +LOCAL_ROWID +LOCAL_TASK_ID +LOCAL_TRANSACTION_ID +LOCAL_TRAN_ID +LOCATION +LOCATION_NAME +LOCKED_MODE +LOCKED_TOTAL +LOCKOWNER +LOCKP +LOCKS +LOCKSEQUENCEID +LOCKSTATE +LOCKSTATEID +LOCKTYPE +LOCKWAIT +LOCK_DATE +LOCK_ELEMENT_ADDR +LOCK_ELEMENT_CLASS +LOCK_ELEMENT_NAME +LOCK_HELD +LOCK_ID1 +LOCK_ID2 +LOCK_MODE +LOCK_REQUEST +LOCK_TYPE +LOCK_USER_SCHEMA_FAILED +LOG# +LOGFILE_ASSIGNMENT +LOGFILE_PATTERN +LOGGED_ON +LOGGING +LOGGING_LEVEL +LOGGING_PROPERTY +LOGICALLY_CORRUPT +LOGICAL_FILENAME +LOGICAL_PATH +LOGICAL_READS +LOGICAL_READS_DELTA +LOGICAL_READS_TOTAL +LOGICAL_READ_PCT +LOGICAL_STANDBY_APPLY +LOGINS +LOGIN_USER. +LOGMINER_ID +LOGMINER_SESSION_MISMATCH +LOGMNR_DICT_CACHE. +LOGMNR_DICT_CACHE.ADD_COL +LOGMNR_DICT_CACHE.ADD_OBJ +LOGMNR_DICT_CACHE.ADD_OBJ_AT +LOGMNR_DICT_CACHE.ADD_SBA +LOGMNR_DICT_CACHE.CLEANOUT +LOGMNR_DICT_CACHE.COMMIT_XID +LOGMNR_DICT_CACHE.DEL_BASEOBJ +LOGMNR_DICT_CACHE.DEL_OBJ +LOGMNR_DICT_CACHE.DGTLO +LOGMNR_DICT_CACHE.GETTABLEMCV +LOGMNR_DICT_CACHE.GSII +LOGMNR_DICT_CACHE.GTLO3B +LOGMNR_DICT_CACHE.MID_PROCESS_CTAS +LOGMNR_DICT_CACHE.PURGE_OBJ +LOGMNR_DICT_CACHE.PURGE_SCN +LOGMNR_DICT_CACHE.ROLLBACK_XID +LOGMNR_DICT_CACHE.SAVEDRP_IDX +LOGMNR_DICT_CACHE.SAVEDRP_OBJ +LOGMNR_DICT_CACHE.SAVE_COLSET +LOGMNR_DICT_CACHE.SAVE_COLSET_AT +LOGMNR_DICT_CACHE.SAVE_OBJ +LOGMNR_DICT_CACHE.SAVE_OBJ_SCN +LOGMNR_EM_SUPPORT. +LOGMNR_EM_SUPPORT.ADD_TABLE_INCLUSION_RULE +LOGMNR_EM_SUPPORT.ADD_USER_INCLUSION_RULE +LOGMNR_EM_SUPPORT.ADD_XID_INCLUSION_RULE +LOGMNR_EM_SUPPORT.DELETE_TABLE_INCLUSION_RULE +LOGMNR_EM_SUPPORT.DELETE_USER_INCLUSION_RULE +LOGMNR_EM_SUPPORT.DELETE_XID_INCLUSION_RULE +LOGMNR_EM_SUPPORT.VALIDATE_AUTH +LOGMNR_GTLO3. +LOGMNR_KRVRDA_TEST_APPLY. +LOGMNR_KRVRDLUID3. +LOGMNR_KRVRDREPDICT3. +LOGMNR_SESSION_ID +LOGMNR_UID +LOGOFF_DLOCK +LOGOFF_LREAD +LOGOFF_LWRITE +LOGOFF_PREAD +LOGOFF_TIME +LOGON_TIME +LOGON_USER +LOGSTDBY$TABF. +LOGSTDBY$UTABF. +LOGSTDBY_ID +LOGSTDBY_INTERNAL. +LOGSTDBY_INTERNAL.EDS_ADD_PREREQ_I +LOGSTDBY_INTERNAL.EDS_ADD_TABLE_I +LOGSTDBY_INTERNAL.EDS_EVOLVE_TABLE_1_I +LOGSTDBY_INTERNAL.EDS_EVOLVE_TABLE_I +LOGSTDBY_INTERNAL.EDS_GEN_SHADOWTAB_I +LOGSTDBY_INTERNAL.EDS_REMOVE_TABLE_I +LOGSTDBY_INTERNAL.INSTANTIATE_TABLE_I +LOGSTDBY_UNSUPPORTED_TABLES +LOG_CHKPT_INTERVAL_REDO_BLKS +LOG_CHKPT_TIMEOUT_REDO_BLKS +LOG_DATE +LOG_DIRECTORY +LOG_FILE_SIZE_REDO_BLKS +LOG_GROUP_NAME +LOG_GROUP_TYPE +LOG_HISTORY +LOG_ID +LOG_IO +LOG_MODE +LOG_OWNER +LOG_SEQUENCE +LOG_SWITCH_WAIT +LOG_TABLE +LOG_TRIGGER +LOG_USER +LONGHOLD_COUNT +LONGNAME +LONGP_POLICY +LONG_PREDICATE +LONG_WAITS +LONG_WAIT_TIME_MAX +LONG_WAIT_TIME_TOTAL +LOST +LOST_TIME +LOW +LOWER_PORT +LOWEST_SCN +LOWEST_TIMESTAMP +LOWEST_VERSION +LOWROWID +LOW_GAP_SCN +LOW_GAP_TIME +LOW_MARK_SCN +LOW_OPTIMAL_SIZE +LOW_SCN +LOW_SCNBAS +LOW_SCNWRP +LOW_SEQUENCE# +LOW_TIME +LOW_VALUE +LO_BNUM +LO_SETID +LRU_NUMBER +LSTIOTIM +LT. +LT.ADDASPARENTWORKSPACE +LT.ADDUSERDEFINEDHINT +LT.ADD_TOPO_GEOMETRY_LAYER +LT.ALTERSAVEPOINT +LT.ALTERVERSIONEDTABLE +LT.ALTERWORKSPACE +LT.BEGINBULKLOADING +LT.BEGINDDL +LT.BEGINRESOLVE +LT.CHANGEWORKSPACETYPE +LT.COMMITBULKLOADING +LT.COMMITDDL +LT.COMMITRESOLVE +LT.COMPRESSWORKSPACE +LT.COMPRESSWORKSPACETREE +LT.COPYFORUPDATE +LT.CREATESAVEPOINT +LT.CREATEWORKSPACE +LT.DELETESAVEPOINT +LT.DELETE_TOPO_GEOMETRY_LAYER +LT.DISABLEREPLICATIONSUPPORT +LT.DISABLEVERSIONING +LT.DISABLEVERSIONING_REPLN +LT.DROPREPLICATIONSUPPORT +LT.ENABLEREPLICATIONSUPPORT +LT.ENABLEVERSIONING +LT.ENABLEVERSIONING_REPLN +LT.EXPORT +LT.FINDRICSET +LT.FREEZEWORKSPACE +LT.GENERATEREPLICATIONSUPPORT +LT.GETBULKLOADVERSION +LT.GETCONFLICTWORKSPACE +LT.GETDIFFVERSIONS +LT.GETLOCKMODE +LT.GETLTLOCKSTR +LT.GETMULTIWORKSPACES +LT.GETOPCONTEXT +LT.GETPHYSICALTABLENAME +LT.GETPRIVS +LT.GETSESSIONINFO +LT.GETSYSTEMPARAMETER +LT.GETVALIDFROM +LT.GETVALIDTILL +LT.GETVERSION +LT.GETWMMETADATASPACE +LT.GETWORKSPACE +LT.GOTODATE +LT.GOTOSAVEPOINT +LT.GOTOWORKSPACE +LT.GRANTGRAPHPRIV +LT.GRANTPRIVSONPOLICY +LT.GRANTPRIVSTOREPADMINONSYSPKGS +LT.GRANTSYSTEMPRIV +LT.GRANTWORKSPACEPRIV +LT.IMPORT +LT.ISWORKSPACEOCCUPIED +LT.LOCKROWS +LT.MAX_TIME +LT.MERGETABLE +LT.MERGEWORKSPACE +LT.MIN_TIME +LT.MOVE_PROC +LT.PURGETABLE +LT.RECOVERALLMIGRATINGTABLES +LT.RECOVERFROMDROPPEDUSER +LT.RECOVERMIGRATINGTABLE +LT.REFRESHTABLE +LT.REFRESHWORKSPACE +LT.RELOCATEWRITERSITE +LT.REMOVEASPARENTWORKSPACE +LT.REMOVEUSERDEFINEDHINT +LT.REMOVEWORKSPACE +LT.REMOVEWORKSPACETREE +LT.RENAMESAVEPOINT +LT.RENAMEWORKSPACE +LT.RESOLVECONFLICTS +LT.REVOKEGRAPHPRIV +LT.REVOKESYSTEMPRIV +LT.REVOKEWORKSPACEPRIV +LT.ROLLBACKBULKLOADING +LT.ROLLBACKDDL +LT.ROLLBACKRESOLVE +LT.ROLLBACKTABLE +LT.ROLLBACKTOSP +LT.ROLLBACKWORKSPACE +LT.SETCAPTUREEVENT +LT.SETCOMPRESSWORKSPACE +LT.SETCONFLICTWORKSPACE +LT.SETDIFFVERSIONS +LT.SETLOCKINGOFF +LT.SETLOCKINGON +LT.SETMULTIWORKSPACES +LT.SETSYSTEMPARAMETER +LT.SETTRIGGEREVENTS +LT.SETVALIDTIME +LT.SETVALIDTIMEFILTEROFF +LT.SETVALIDTIMEFILTERON +LT.SETWMVALIDUPDATEMODEOFF +LT.SETWMVALIDUPDATEMODEON +LT.SETWOOVERWRITEOFF +LT.SETWOOVERWRITEON +LT.SETWORKSPACELOCKMODEOFF +LT.SETWORKSPACELOCKMODEON +LT.SYNCHRONIZESITE +LT.UNFREEZEWORKSPACE +LT.UNLOCKROWS +LT.UNTIL_CHANGED +LT.USEDEFAULTVALUESFORNULLS +LTADM. +LTADM.ACQUIRELOCKONRESOURCE +LTADM.ACQUIRELOCKS +LTADM.ADDEVUNDOCODE +LTADM.ADDLOCKROWSINFOENTRY +LTADM.ADDVERSIONEDTABLE +LTADM.ALTERSAVEPOINT +LTADM.ALTERSTATE +LTADM.APPLY_UNIQUE_CONSTRAINTS +LTADM.ARETHERECONFLICTS +LTADM.ARETHEREDIFFS +LTADM.BEGINRESOLVE +LTADM.BUILD_MODIFIED_TABLES_LIST +LTADM.CHECKFORADDITIONALROWS +LTADM.CHECKIFLEAFGRAPH +LTADM.CHECKIFLEAFSTATE +LTADM.CHECKIFWRITERSITE +LTADM.CHECKWHERECLAUSE +LTADM.CHECK_FOR_NVE_CHILD_TABLES +LTADM.CHILD_TABLES_EXIST +LTADM.CLEANUPAUXTABLE +LTADM.CLEANUPMODTABLE +LTADM.CLEANUP_MW_TABLE +LTADM.COMPRESSSTATE +LTADM.COMPRESSSTATE_INTERNAL +LTADM.COMPUTERICWEIGHT +LTADM.CONVERTLOCK +LTADM.COPYTABLE +LTADM.COPYTABLE_VT +LTADM.CREATERLSPOLICY +LTADM.CREATESAVEPOINT +LTADM.CREATESTATE +LTADM.CURRENTUSERSSESSION +LTADM.DELETEINSTEADOFTRIGNAMES +LTADM.DELETETABLE_INTERNAL +LTADM.DELETETABLE_INTERNAL_VT +LTADM.DISABLESYSTEMTRIGGERS +LTADM.DISABLESYSTEMTRIGGERS_EXP +LTADM.DUMPTOLOGINCHUNKS +LTADM.ENABLESYSTEMTRIGGERS +LTADM.ENABLESYSTEMTRIGGERS_EXP +LTADM.ENDRESOLVE +LTADM.EXECSQL +LTADM.EXECSQLAUTO +LTADM.EXECSQLFROMCLOB +LTADM.EXECSQLINTOINT +LTADM.EXECSQLINTOSTR +LTADM.EXECSQLWUNDO +LTADM.EXISTCONFLICTS +LTADM.EXISTNONLIVEWORKSPACES +LTADM.EXISTOPENSHORTTRANSINSTATE +LTADM.EXISTSOPENSHORTTRANS +LTADM.EXISTSOPENSHORTTRANSONTABLE +LTADM.EXISTSSAVEPOINT +LTADM.EXISTSSTATE +LTADM.EXISTVERSIONEDTABS +LTADM.FREEZESTATE +LTADM.GENERATEALLVTROWIDS +LTADM.GETALLRESOLVESTATUS +LTADM.GETALLSTATEATTRIBUTES +LTADM.GETANCESTORWORKSPACE +LTADM.GETCOLALIASES +LTADM.GETEXPORTDOWNGRADESQL +LTADM.GETINSTEADOFDELTRIGNAME +LTADM.GETINSTEADOFINSTRIGNAME +LTADM.GETINSTEADOFUPDTRIGNAME +LTADM.GETLOCK +LTADM.GETLOCKMODE +LTADM.GETLOCKSTATUS +LTADM.GETLOCKWITHSTATUS +LTADM.GETMORESTATEATTRIBUTES +LTADM.GETREPLNADMIN +LTADM.GETRESOLVESTATUS +LTADM.GETSPVERSION +LTADM.GETSTATEATTRIBUTES +LTADM.GETSTATELOCKID +LTADM.GETSYSTEMPARAMETER +LTADM.GETWORKSPACECURVER +LTADM.GETWORKSPACEDEPTH +LTADM.GETWORKSPACESYSTEMMODE +LTADM.GET_LOCK_TABLE +LTADM.GOTODATE +LTADM.GOTOTS +LTADM.GRANTPRIVSTOREPADMINONSYSPKGS +LTADM.GRANTSTATEPRIV +LTADM.GRANTSYSTEMPRIV +LTADM.GRANTWMSYSTABPRIVS +LTADM.INSERT_INTO_MODIFIED_TABLES +LTADM.INSERT_INTO_MW_TABLE +LTADM.ISGLOBALREPLNADMIN +LTADM.ISLOCKINGALIVE +LTADM.ISVERSIONEDTABLE +LTADM.LOGSESSIONINWS +LTADM.NOTIFYCONFLICTS +LTADM.NUMACTIVESESSIONS +LTADM.OPENCURSOR +LTADM.PERFORMIMPORTACTIONS +LTADM.POSTTABLE_RIC +LTADM.RECREATEADTFUNCTIONS +LTADM.REFRESHCURRENTMPLEAFS +LTADM.REFRESHREFRESHEDSTATES +LTADM.REFRESHSTATE_INTERNAL +LTADM.REFRESHSYSTEMPARAMETERS +LTADM.REFRESHTABLE +LTADM.RELEASELOCK +LTADM.RELEASELOCKS +LTADM.REMOVESTATE +LTADM.REMOVEVERSIONEDTABLE +LTADM.RESETPARENTCRSTATUS +LTADM.RESOLVEALLTABLENAMES +LTADM.RESOLVEALLTABLENAMES_DV +LTADM.RESOLVESYNONYMFORMRIC +LTADM.RESOLVETABLENAME +LTADM.RESOLVETABLENVIEWNAME +LTADM.RESOLVEVERSIONEDTABLENAME +LTADM.REVOKESTATEPRIV +LTADM.REVOKESYSTEMPRIV +LTADM.ROLLBACKRESOLVE +LTADM.ROLLBACKTABLE_PARTIAL +LTADM.SETLOGFILENAME +LTADM.SETSTATELOCKMODEOFF +LTADM.SETSTATELOCKMODEON +LTADM.SETSYNCPARVER +LTADM.SETSYSTEMPARAMETER +LTADM.STOREINSTEADOFTRIGNAMES +LTADM.TESTANDLOCKSTATE +LTADM.TURNONPESSIMISTICLOCKING +LTADM.UNFREEZESTATE +LTADM.UNSETLOGFILENAME +LTADM.UPDATEADTREFCOUNT +LTADM.UPDATECRSTATUS +LTADM.UPDATEVERSIONEDTABLE +LTADM.VERSIONROWCOPY +LTAQ. +LTAQ.CAPTUREEVENT +LTDDL. +LTDDL.DISABLEVERSIONING +LTDDL.DISABLEVERSIONING_NONAUTO +LTDDL.ENABLEVERSIONING +LTDDL.ENABLEVERSIONING_NONAUTO +LTDDL.UNDOENABLEVER +LTDTRG. +LTDTRG.CREATETRIGGERS +LTDTRG.DISABLEDMLFORREPLICATION +LTDTRG.ENABLEDMLFORREPLICATION +LTDTRG.TRIGGERSELECTCLAUSE +LTPRIV. +LTPRIV.GETPRIVLIST +LTPRIV.GRANTGRAPHPRIV +LTPRIV.GRANTSTATEPRIV +LTPRIV.GRANTSYSTEMPRIV +LTPRIV.ISUSERALLOWED +LTPRIV.ISUSERALLOWEDOPER +LTPRIV.REVOKEGRAPHPRIV +LTPRIV.REVOKESTATEPRIV +LTPRIV.REVOKESYSTEMPRIV +LTRIC. +LTRIC.ADDTORICLOCKSLIST +LTRIC.APPLY_RIC_COMMIT_TABLE +LTRIC.APPLY_RIC_CONSTRAINTS +LTRIC.APPLY_RIC_RESTRICT +LTRIC.APPLY_RIC_RESTRICT_POST +LTRIC.APPLY_SELF_REF_RIC +LTRIC.BACKUPRICLOCKSLIST +LTRIC.CHECKRICONRFRSHBYFLIPPING +LTRIC.CREATERICLOCKINGTABLES +LTRIC.CREATERICWHERECLAUSE +LTRIC.DO_CR_RIC_CHECK +LTRIC.DROPRICLOCKINGTABLES +LTRIC.FINDRICSET +LTRIC.GENRICVIEWS +LTRIC.GENVTPTNOTEXISTSWC +LTRIC.GETMODVER +LTRIC.GETPTBEFORETRIGSTRS +LTRIC.GETPTVTNONSEQUENCEDCODE +LTRIC.GETRICINSTEADOFTRIGSTRS +LTRIC.GETRICLOCKINGCODE +LTRIC.GETRICLOCKS +LTRIC.GETRICLOCKSFORTABLE +LTRIC.GETRICSESSLOCKSFORTABLE +LTRIC.GETRICSFROMSKELETONTABLES +LTRIC.GETSTARTTIME +LTRIC.GETSTATUS +LTRIC.HASRICLOCKON +LTRIC.INITIALIZERICLOCKINGVARS +LTRIC.ISPARENTTABLE +LTRIC.LOCKRICROWS +LTRIC.NEEDTODECLVTVARS +LTRIC.RECREATEPTUPDDELTRIGGERS +LTRIC.RELRICSESSLOCKSFORTABLE +LTRIC.RESTORERICLOCKSLIST +LTRIC.RIC_DISABLE_VERSNING_INTERNAL +LTRIC.RIC_ENABLE_VERSIONING_INTERNAL +LTUTIL. +LTUTIL.ADDTOVERLIST +LTUTIL.ADDUSERDEFINEDHINT +LTUTIL.ALLOWROWLEVELLOCKING +LTUTIL.BITOR +LTUTIL.CALLSTACKCONTAINSPROC +LTUTIL.CHECKADDTOPOGEOLAYERERRORS +LTUTIL.CHECKDELTOPOGEOLAYERERRORS +LTUTIL.CHECKDOMAININDEXPRIVS +LTUTIL.CHOOSE +LTUTIL.CLEANUPBDDL +LTUTIL.CLEANUPCDDL +LTUTIL.CLEANUPCDDLPROC +LTUTIL.CLEANUPDV +LTUTIL.CLEANUPEV +LTUTIL.CLEANUPMETADATA +LTUTIL.CLEANUPMETADATABYUSER +LTUTIL.CONTRACTWHITESPACE +LTUTIL.CONTRACTWHITESPACECLOB +LTUTIL.COPYRLSPOLICIES +LTUTIL.CREATEINLISTFROMQUERY +LTUTIL.CREATEPKWHERECLAUSE +LTUTIL.DECREMENTREPSITECOUNTER +LTUTIL.DELETEFULLROLLBACKMARKER +LTUTIL.DELETEUNDOCODE +LTUTIL.DELETEUNDOCODECHECKPOINTS +LTUTIL.DELETEUNDOCODERANGE +LTUTIL.DISALLOWIFWITHVT +LTUTIL.DROPRLSPOLICIES +LTUTIL.EXECEVUNDO +LTUTIL.EXECLOG +LTUTIL.EXECUTELOGTABLE +LTUTIL.EXECUTESQLLOG +LTUTIL.EXISTSBIR +LTUTIL.EXISTSBUR +LTUTIL.EXISTSCONSTRAINT +LTUTIL.EXISTSFULLROLLBACKMARKER +LTUTIL.EXISTSTOPOLOGY +LTUTIL.FIXVTAB_COMMIT +LTUTIL.FIXVTAB_COMPRESS +LTUTIL.FIXVTAB_REFRESH +LTUTIL.FIXVTAB_ROLLBACK +LTUTIL.GENFIXCRNONSEQNFRESHINS +LTUTIL.GENWMCOLSUPDATESTMNT +LTUTIL.GETALLDBLINKS +LTUTIL.GETBATCHWHERECLAUSES +LTUTIL.GETCOLINFO +LTUTIL.GETCOLLIST +LTUTIL.GETCOLSTR +LTUTIL.GETCOLUMNDECLARATION +LTUTIL.GETCOLUMNDECLWHERECLAUSE +LTUTIL.GETCONTAINEDVER +LTUTIL.GETCONTAINEDVERINRANGE +LTUTIL.GETCONTAINEDVERSINWORKSPACE +LTUTIL.GETCONTAINEDVERSIONRANGE +LTUTIL.GETCRNEXTVERS +LTUTIL.GETCRSTATUS +LTUTIL.GETCURRENTLOCKINGMODE +LTUTIL.GETCURVER +LTUTIL.GETDESCVERSIONS +LTUTIL.GETDISVER +LTUTIL.GETHIDDENOLSCOLUMNS +LTUTIL.GETHISTOPTION +LTUTIL.GETINDEXTABLE +LTUTIL.GETINDEXTABLESPACE +LTUTIL.GETMINWORKSPACEVERSION +LTUTIL.GETNESTEDCOLUMNVIEW +LTUTIL.GETNESTEDTABLECOLSTR +LTUTIL.GETNESTEDTABLEMETADATACOLUMNS +LTUTIL.GETNESTEDTABLETYPE +LTUTIL.GETNEXTVERSION +LTUTIL.GETNOOFREMAININGSITES +LTUTIL.GETNOOFREPSITES +LTUTIL.GETNTPKEYCOLS +LTUTIL.GETPHYSICALTABLENAME +LTUTIL.GETPKEYCOLS +LTUTIL.GETPKEYINFO +LTUTIL.GETPKEYINFO_VT +LTUTIL.GETPKINDEXINFO +LTUTIL.GETREMAININGDBLINKS +LTUTIL.GETREPADMINNAME +LTUTIL.GETREPGROUP +LTUTIL.GETREPLGROUPSTATUS +LTUTIL.GETRICSTATUS +LTUTIL.GETRLSWHERECLAUSE +LTUTIL.GETSID +LTUTIL.GETSNO +LTUTIL.GETSPACEUSAGE +LTUTIL.GETSTATEFROMVER +LTUTIL.GETTABLETABLESPACE +LTUTIL.GETTOPOFEATURETABINFO +LTUTIL.GETTOPOINFO +LTUTIL.GETTRIGFLAG +LTUTIL.GETTRIGGERS +LTUTIL.GETTRIGTYPES +LTUTIL.GETUDHINT +LTUTIL.GETUNDOCODE +LTUTIL.GETUNDOCODECLOB +LTUTIL.GETVALIDTIMEOPTION +LTUTIL.GETVERINDEXNAME +LTUTIL.GETWHERECLAUSESTR +LTUTIL.GETWORKSPACELOCKMODE +LTUTIL.GET_EXPANDED_NEXTVERS +LTUTIL.GRANTOLSPRIVS +LTUTIL.HASCOMPRESSIONENABLED +LTUTIL.HASCRCHILD +LTUTIL.HASFEATURETABLE +LTUTIL.HASNESTEDTABLECOLUMN +LTUTIL.HASOLSPOLICY +LTUTIL.HASRICCASCADINGCONSTRAINT +LTUTIL.HASRICSETNULLCONSTRAINT +LTUTIL.HASWOOVERWRITEOPTION +LTUTIL.HISTWITHDATETYPE +LTUTIL.HISTWITHDATETYPEEV +LTUTIL.INSERTFULLROLLBACKMARKER +LTUTIL.INSERTNEXTVERS +LTUTIL.INSERTSDOMETADATAATREMOTESITE +LTUTIL.INSERTVERSION +LTUTIL.INVERSIONEDSTATE +LTUTIL.ISIMPLICITSP +LTUTIL.ISMODIFIED +LTUTIL.ISMODIFIEDINSUBTREE +LTUTIL.ISOBJECTTABLE +LTUTIL.ISREPLICATED +LTUTIL.ISSPLITINSUBTREE +LTUTIL.ISTOPOFEATURETABLE +LTUTIL.ISTOPOLOGYINDEXTABLE +LTUTIL.ISTOPOLOGYRELATIONTABLE +LTUTIL.ISVERSIONEDTABLE +LTUTIL.ISWORKSPACEOWNER +LTUTIL.LOCKPARENTTABLESINSHAREDMODE +LTUTIL.MODIFIED_BY +LTUTIL.NEEDTOEXECUTETRIGGERS +LTUTIL.NUMTRIGGERSTOEXECUTE +LTUTIL.PERCENTROWSINVERS +LTUTIL.POPULATEROWIDRANGES +LTUTIL.PREFIXSTR +LTUTIL.PUSHDEFERREDTXNS +LTUTIL.REMOVEUSERDEFINEDHINT +LTUTIL.REQUIRESTRIGGERSONTOPVIEW +LTUTIL.RESETALLSEQUENCES +LTUTIL.RESOLVETYPESYNONYM +LTUTIL.SEPARATECLOBINTO2PARTS +LTUTIL.SETDISVER +LTUTIL.SETREMAININGSITENO +LTUTIL.STRIPVERSION +LTUTIL.STRIPVERSIONRANGE +LTUTIL.STRIPVERSIONRANGEUNSORTED +LTUTIL.STUFFANDFIX +LTUTIL.STUFFANDFIXRANGE +LTUTIL.STUFFVERSION +LTUTIL.STUFFVERSIONRANGE +LTUTIL.SUBSVERSION +LTUTIL.TO_CLOB +LTUTIL.TRANSFORMTOPOTABLE +LTUTIL.UPDATESDOTOPOMETADATADV +LTUTIL.UPDATESDOTOPOMETADATAEV +LTUTIL.VERIFYCALLSTACK +LTUTIL.VT_FIXNVTAB +LTUTIL.WAITTILLDEFERREDTXNSDONE +LTUTIL.WRITETOLOG +LTUTIL.WRITETOLOGTABLE +LTUTIL.WRITEUNDOCODE +LT_CTX_PKG. +LT_CTX_PKG.ADDTORICLOCKSLIST +LT_CTX_PKG.ALLOWDDLOPERATION +LT_CTX_PKG.APPENDNEXTVERS +LT_CTX_PKG.CHECKFREEZESTATUS +LT_CTX_PKG.CHECKNGETLOCK +LT_CTX_PKG.CHVLTL +LT_CTX_PKG.CONVERT +LT_CTX_PKG.EXISTSLTLOCKINFO +LT_CTX_PKG.GETCURLOCKSTR +LT_CTX_PKG.GETCURNEXTVER +LT_CTX_PKG.GETCURRENTLOCKINGMODE +LT_CTX_PKG.GETLTLOCKINFO +LT_CTX_PKG.GETLTTABLENAME +LT_CTX_PKG.GETMAXVTRANGE +LT_CTX_PKG.GETMULTIWORKSPACES +LT_CTX_PKG.GETNEXTVER +LT_CTX_PKG.GETPARWSDELSTATUS +LT_CTX_PKG.GETPARWSVER +LT_CTX_PKG.GETPREVVER +LT_CTX_PKG.GETPURGEOPTION +LT_CTX_PKG.GETSESSIONATTRIBUTES +LT_CTX_PKG.GETSTATEFROMVER +LT_CTX_PKG.GETSTRIPPEDNEXTVER +LT_CTX_PKG.GETVTAUXTABLENAME +LT_CTX_PKG.HASRICLOCKON +LT_CTX_PKG.INITIALIZERICLOCKINGVARS +LT_CTX_PKG.INSERTEXTTABROWSFORNVER +LT_CTX_PKG.MODIFIED_BY +LT_CTX_PKG.MY_SYS_CONTEXT +LT_CTX_PKG.OPTYPE +LT_CTX_PKG.REFRESHVERSINWSPCLIST +LT_CTX_PKG.RELEASE +LT_CTX_PKG.RELEASELOCK +LT_CTX_PKG.REMOVEVERSION +LT_CTX_PKG.REQUEST +LT_CTX_PKG.SETACTIVETIMEFORDML +LT_CTX_PKG.SETCALLSTACKASINVALID +LT_CTX_PKG.SETCALLSTACKASVALID +LT_CTX_PKG.SETCOMMITVARS +LT_CTX_PKG.SETCOMPRESSWORKSPACE +LT_CTX_PKG.SETCONFLICTSTATE +LT_CTX_PKG.SETCRINFO +LT_CTX_PKG.SETDIFFVERS +LT_CTX_PKG.SETEVCHECKPOINT +LT_CTX_PKG.SETFLIPVERSIONONREFRESH +LT_CTX_PKG.SETFREEZESTATUS +LT_CTX_PKG.SETIMPORTVARS +LT_CTX_PKG.SETINSTANT +LT_CTX_PKG.SETLOCKMODE +LT_CTX_PKG.SETLTLOCKINFO +LT_CTX_PKG.SETMPROOT +LT_CTX_PKG.SETMPWORKSPACE +LT_CTX_PKG.SETMULTIWORKSPACES +LT_CTX_PKG.SETNEWMPVARS +LT_CTX_PKG.SETNEWROOTANCVERSION +LT_CTX_PKG.SETOPCONTEXT +LT_CTX_PKG.SETPARENTVER +LT_CTX_PKG.SETPOSTVARS +LT_CTX_PKG.SETPREVVER +LT_CTX_PKG.SETROWLOCKSTATUS +LT_CTX_PKG.SETSAVEPOINT +LT_CTX_PKG.SETSTATE +LT_CTX_PKG.SETSTATEATTRIBUTES +LT_CTX_PKG.SETTABMRGWOREMOVEEVENT +LT_CTX_PKG.SETTABMRGWREMOVEEVENT +LT_CTX_PKG.SETTABREFRESHEVENT +LT_CTX_PKG.SETTRIGGEREVENT +LT_CTX_PKG.SETTSINSTANT +LT_CTX_PKG.SETUSER +LT_CTX_PKG.SETVALIDTIME +LT_CTX_PKG.SETVALIDTIMEFILTEROFF +LT_CTX_PKG.SETVALIDTIMEFILTERON +LT_CTX_PKG.SETVERAFTINSTANT +LT_CTX_PKG.SETVERBEFINSTANT +LT_CTX_PKG.SETVERSION +LT_CTX_PKG.SETVERSIONANDSTATE +LT_CTX_PKG.SETWSPCMRGWOREMOVEEVENT +LT_CTX_PKG.SETWSPCMRGWREMOVEEVENT +LT_CTX_PKG.STUFFANDFIX +LT_CTX_PKG.STUFFANDFIXRANGE +LT_CTX_PKG.TO_TIMESTAMP_TZ_ +LT_CTX_PKG.UNSETCOMMITVARS +LT_CTX_PKG.UNSETIMPORTVARS +LT_CTX_PKG.UNSETPOSTVARS +LT_CTX_PKG.UPDATE_MODIFIED_TABLES +LT_EXPORT_PKG. +LT_EXPORT_PKG.IMPORTEXPORTSUPPORT +LT_EXPORT_PKG.SCHEMA_INFO_EXP +LT_EXPORT_PKG.SYSTEM_CALLOUT +LT_EXPORT_PKG.SYSTEM_INFO_EXP +LVL +LWM_MESSAGE_CREATE_TIME +LWM_MESSAGE_NUMBER +LWM_POSITION +LWM_TIME +M2T. +MACHINE +MACHINE_NAME +MAINTENANCE_TYPE +MAJOR +MANAGEMENT_PACK_ACCESS +MANDATORY +MANUAL_DURATION +MANUAL_OPEN_TIME +MANUAL_REPAIRS_ONLY +MAPPED_CONSUMER_GROUP +MAPPING_ATTRIBUTE +MAP_ELEM +MAP_FILE +MAP_NAME +MAP_SYNC +MARKED_CORRUPT +MASTER +MASTERDEF +MASTERKEYID +MASTER_AGENT_CHANGE_TRIGGER. +MASTER_COMMENT +MASTER_ID +MASTER_LINK +MASTER_NODE +MASTER_OWNER +MASTER_ROLLBACK_SEG +MASTER_ROLLBACK_SEGMENT +MASTER_STATUS +MASTER_VIEW +MATERIALIZE +MAXARGS +MAXBLOCKS +MAXBYTES +MAXCONCURRENCY +MAXCONN_CBROK +MAXIMUM +MAXIMUM_CONNECTIONS +MAXIMUM_SESSIONS +MAXIMUM_SIZE +MAXIORTM +MAXIOWTM +MAXOPENFILES +MAXPAGES +MAXQUERYID +MAXQUERYLEN +MAXQUERYSQLID +MAXSIZE +MAXTIME +MAXVAL +MAX_ALLOCATED +MAX_ALLOCATED_MAX +MAX_APPLIED_MESSAGE_NUMBER +MAX_BLOCKS +MAX_BUF_RATE +MAX_BYTES +MAX_BYTE_PER_BUF +MAX_BYTE_RATE +MAX_CARDINALITY +MAX_CHECKPOINT_CHANGE# +MAX_CHECKPOINT_SCN +MAX_CHECKPOINT_TIME +MAX_CLT_BUF_RATE +MAX_CLT_BYTE_PER_BUF +MAX_CLT_BYTE_RATE +MAX_CONNECTIONS +MAX_DURATION_LAST_30_DAYS +MAX_DURATION_LAST_7_DAYS +MAX_EST_EXEC_TIME +MAX_EVENTS_PER_LOOP +MAX_EVENT_RATE +MAX_EXTENT +MAX_EXTENTS +MAX_FAILURE +MAX_FAILURES +MAX_FREE_SIZE +MAX_IDLE_BLOCKER_TIME +MAX_IDLE_TIME +MAX_INTERVAL +MAX_IN_CONNECT_RATE +MAX_IOPS +MAX_LATENCY +MAX_LENGTH +MAX_LIFETIME_SESSION +MAX_LOOP_RATE +MAX_MBPS +MAX_MEMORY_SIZE +MAX_MEM_USED +MAX_MISS_SIZE +MAX_MODIFICATION_TIME +MAX_MSG_RATE +MAX_NEXT_CHANGE# +MAX_NEXT_TIME +MAX_NUMBER +MAX_NUM_BUCKETS +MAX_NUM_PER_WIN +MAX_OUT_CONNECT_RATE +MAX_PMBPS +MAX_RECONNECT_RATE +MAX_RETRIES +MAX_RUNS +MAX_RUN_DURATION +MAX_SERVERS +MAX_SIZE +MAX_SORT_BLOCKS +MAX_SORT_SIZE +MAX_SVR_BUF_RATE +MAX_SVR_BYTE_PER_BUF +MAX_SVR_BYTE_RATE +MAX_TASK_LATENCY +MAX_TEMPSEG_SIZE +MAX_THINK_TIME +MAX_TRANS +MAX_UNDO_CONSUMPTION +MAX_USED_BLOCKS +MAX_USED_SIZE +MAX_USE_SESSION +MAX_UTILIZATION +MAX_UTILIZATION_LIMIT +MAX_VALUE +MAX_VERSIONS +MAX_WAIT +MAYBE_HITS +MAYBE_RULES +MBYTES_PROCESSED +MD. +MD.HHAND +MD.HHBITS +MD.HHBYTELEN +MD.HHCBIT +MD.HHCELLBNDRY +MD.HHCELLSIZE +MD.HHCKREF +MD.HHCLDATE +MD.HHCOLLAPSE +MD.HHCOMMONCODE +MD.HHCOMPARE +MD.HHCOMPOSE +MD.HHDECODE +MD.HHDISTANCE +MD.HHENCODE +MD.HHENCODE_BYLEVEL +MD.HHGBIT +MD.HHGETCID +MD.HHGROUP +MD.HHGTBIT +MD.HHGTYPE +MD.HHIDLPART +MD.HHIDLROWS +MD.HHIDPART +MD.HHIDROWS +MD.HHINCRLEV +MD.HHJLDATE +MD.HHLENGTH +MD.HHLEVELS +MD.HHMATCH +MD.HHMAXCODE +MD.HHMKCODE +MD.HHMKDIM +MD.HHNCOMPARE +MD.HHNDIM +MD.HHOR +MD.HHORDER +MD.HHPRECISION +MD.HHSBIT +MD.HHSETCID +MD.HHSTBIT +MD.HHSTYPE +MD.HHSUBDIVIDE +MD.HHSUBSTR +MD.HHXOR +MD.SET_CHECK +MD.SIGERR +MD1. +MD1.BVALUETODIM +MD1.COMPARE +MD1.DATETODIM +MD1.DECODE +MD1.ENCODE +MD1.HVALUETODIM +MD1.LATLONTOCODE +MD1.TO_BVALUE +MD1.TO_DATE +MD1.TO_HVALUE +MD1.TO_LAT +MD1.TO_LON +MD2. +MD2.INTERACT +MD2.RELATE +MD2.RELATE_PROCESS +MD2.SDO_CGLNLN +MD2.SDO_CODE_SIZE +MD2.SDO_READ_LAYER_METADATA +MD2.TESSELLATE +MD2.TESSELLATE_FIXED +MD2.TEST_LOADGEOM +MD2.VALIDATE_GEOM +MDERR. +MDERR.RAISE_MD_ERROR +MDPRVT_IDX. +MDPRVT_IDX.EXCHANGE +MDPRVT_IDX.EXECUTE_GUPDATE +MDPRVT_IDX.EXP_DUMP_METADATA +MDPRVT_IDX.INIT_META +MDPRVT_IDX.RESET_TTS_INDEX_METADATA +MDPRVT_IDX.TTS_META +MDPRVT_IDX.UPDATE_INDEX_METEDATA +MD_LRS. +MD_LRS.ADJUST_MEASURE +MD_LRS.ADJUST_MEASURE_3D +MD_LRS.APPEND_TO_GEOM_SEGMENT +MD_LRS.CLEAN_GEOMETRY +MD_LRS.CLEAN_GEOMETRY_FUN +MD_LRS.CLIP_GEOM_SEGMENT_FUN +MD_LRS.CONCATENATE_GEOM_SEGMENTS_FUN +MD_LRS.CONNECTION_TYPE_FUN +MD_LRS.CONSTRUCT_DIM_ARRAY +MD_LRS.CONSTRUCT_LRS_GTYPE +MD_LRS.CONTAINS_UNKNOWN_ELEM +MD_LRS.CONTAIN_MEASURE_DIM +MD_LRS.CONTAIN_MEASURE_DIM_3D +MD_LRS.DEFINE_GEOM_SEGMENT_PROC +MD_LRS.ELEM_END_PT +MD_LRS.GEODETIC_GEOMETRY +MD_LRS.GEODETIC_SRID +MD_LRS.GEOM_SEGMENTS_CON_TYPE +MD_LRS.GEOM_SEGMENTS_CON_TYPE_3D +MD_LRS.GET_LRS_DIM_POS +MD_LRS.GET_M_VALUE +MD_LRS.GTYPE_FILTER +MD_LRS.IS_DEFINED_FUN +MD_LRS.LINESTRING_GEOM +MD_LRS.LOCATE_PT_FUN +MD_LRS.LRS_GEOMETRY +MD_LRS.LRS_GEOM_BY_GTYPE +MD_LRS.LRS_GEOM_LENGTH_3D +MD_LRS.LRS_MULTI_SEGMENTS_GTYPE +MD_LRS.LRS_POLYGON_GTYPE +MD_LRS.LRS_PT_GTYPE +MD_LRS.LRS_SEGMENT_GTYPE +MD_LRS.MAKE_POINT_GEOM +MD_LRS.MONOTONIC_MEASURE +MD_LRS.NEXT_NON_NULL_ORDINATE +MD_LRS.NO_OF_DIMENSIONS +MD_LRS.NO_OF_ELEMENTS +MD_LRS.NO_OF_VERTICES +MD_LRS.OFFSET_GEOM_SEGMENT_FUN +MD_LRS.PROJECTED_GEOMETRY +MD_LRS.PROJECTED_SRID +MD_LRS.PROJECT_PT_FUN +MD_LRS.REVERSE_GEOMETRY_FUN +MD_LRS.REVERSE_M +MD_LRS.SAME_CS +MD_LRS.SAME_SDO_ORDINATE_ARRAY +MD_LRS.SET_LRS_DIM_POS +MD_LRS.SET_M_VALUE +MD_LRS.SNAP_TO_PT +MD_LRS.SNAP_TO_PT_3D +MD_NET. +MD_NET.BUILD_GEOM_NETWORK +MD_NET.BUILD_LINK_TABLE +MD_NET.COLUMN_ERROR_MSG +MD_NET.CONSTRAINT_EXISTS +MD_NET.CREATE_BIDIRECTED_NETWORK +MD_NET.CREATE_DELETE_LINK_TRIGGER +MD_NET.CREATE_DELETE_NODE_TRIGGER +MD_NET.CREATE_DELETE_PATH_TRIGGER +MD_NET.CREATE_DELETE_SUBPATH_TRIGGER +MD_NET.CREATE_LRS_NODE_TABLE +MD_NET.CREATE_SPATIAL_INDEX +MD_NET.CREATE_SPATIAL_NETWORK +MD_NET.CREATE_UNDIRECTED_NETWORK +MD_NET.DELETE_GEOM_METADATA +MD_NET.DELETE_NETWORK_METADATA +MD_NET.DROP_TABLE +MD_NET.FIND_NETWORK_INTERSECTION +MD_NET.GEOM_END_POINT +MD_NET.GEOM_METADATA_EXISTS +MD_NET.GET_GEOMETRY +MD_NET.GET_GEOM_END_POINT +MD_NET.GET_NETWORK_NAME +MD_NET.GET_PERCENTAGE +MD_NET.GET_PT +MD_NET.GET_SCHEMA_NAME +MD_NET.GET_TABLE_NAME +MD_NET.GET_USER +MD_NET.INSERT_GEOM_METADATA +MD_NET.INSERT_NETWORK_METADATA +MD_NET.IS_COLUMN_VALID +MD_NET.IS_LRS_TABLE +MD_NET.MAJOR_VERSION_NO +MD_NET.MAKE_LRS_POINT +MD_NET.MAKE_POINT_GEOMETRY +MD_NET.NETWORK_ERROR_MSG +MD_NET.NET_LOG +MD_NET.NO_OF_END_POINTS +MD_NET.REFERENTIAL_CHECK +MD_NET.RESET_ID_GENERATOR +MD_NET.SPATIAL_INDEX_EXISTS +MD_NET.STR_TRIM_TAIL +MD_NET.TABLE_ERROR_MSG +MD_NET.TABLE_EXISTS +MD_NET.TABLE_TYPE +MD_NET.TRIGGER_EXISTS +MD_NET.VALID_TOPOLOGY_LAYER +MEAN_GOOD_CONCURRENCY +MEAN_GOOD_CONTENTION +MEAN_GOOD_CPU_TIME +MEAN_GOOD_CPU_WAIT +MEAN_GOOD_DOP +MEAN_GOOD_DURATION +MEAN_GOOD_IO +MEAN_GOOD_IO_WAIT +MEAN_GOOD_TEMP +MEAN_GOOD_TEMP_WAIT +MEAN_GOOD_UNDO +MEAN_GOOD_UNDO_WAIT +MEAN_INCOMING_TASKS_30_DAYS +MEAN_INCOMING_TASKS_7_DAYS +MEAN_JOB_ATTEMPTS +MEAN_JOB_CPU +MEAN_JOB_DURATION +MEASURE +MEASURE_FOLDER_NAME +MEASURE_NAME +MEASURE_TYPE +MEDIA +MEDIA_CORRUPT +MEDIA_POOL +MEMBER +MEMBERS +MEMBERSHIPS_INSERT_TRIGGER. +MEMBER_INCARNATION +MEMBER_NAME +MEMBER_NUMBER +MEMBER_TARGET_EMD_URL +MEMBER_TARGET_GUID +MEMBER_TARGET_NAME +MEMBER_TARGET_TYPE +MEMORY_SIZE +MEMORY_SIZE_FACTOR +MEMORY_USAGE +MEMSTATE +MEMUSED +MERGE +MERGE_AJ +MERGE_CHANGE# +MERGE_CONST_ON +MERGE_SJ +MESSAGE +MESSAGE0 +MESSAGE1 +MESSAGE2 +MESSAGE3 +MESSAGES +MESSAGE_ARGUMENTS +MESSAGE_CODE +MESSAGE_COUNT +MESSAGE_CREATION_TIME +MESSAGE_DELIVERY_MODE +MESSAGE_GROUP +MESSAGE_GROUPING +MESSAGE_HANDLER +MESSAGE_ID +MESSAGE_LAG +MESSAGE_LEVEL +MESSAGE_NUM +MESSAGE_NUMBER +MESSAGE_POSITION +MESSAGE_RULE_VARIABLE +MESSAGE_SEQUENCE +MESSAGE_TEXT +MESSAGE_TYPE +MESSAGE_TYPE_NAME +MESSAGE_TYPE_OWNER +METADATA +METADATA_ATTRIBUTE +METER_LEVEL +METHODS +METHOD_INDEX +METHOD_NAME +METHOD_NO +METHOD_TYPE +METRIC1_DESC +METRICS_GROUP_ID +METRICS_ID +METRICS_INSERT_TRIGGER. +METRICS_NAME +METRICS_UPDATE_TRIGGER. +METRIC_ERRORS_CUR_AND_DUPES. +METRIC_ID +METRIC_NAME +METRIC_TYPE +METRIC_UNIT +METRIC_UNITS +METRIC_VALUE +METRIC_VALUE_TYPE +MFLAG +MFLAG2 +MGMT_ADMIN. +MGMT_ADMIN.ADD_TARGET_ADDITION_CALLBACK +MGMT_ADMIN.ADD_TARGET_DELETION_CALLBACK +MGMT_ADMIN.ADD_TARGET_DELETION_EXCEPTIONS +MGMT_ADMIN.CLEANUP_AGENT +MGMT_ADMIN.DELETE_OMS +MGMT_ADMIN.DELETE_TARGET +MGMT_ADMIN.DELETE_TARGET_INTERNAL +MGMT_ADMIN.DELETE_TARGET_METRICS_1DAY +MGMT_ADMIN.DELETE_TARGET_METRICS_1HOUR +MGMT_ADMIN.DELETE_TARGET_METRICS_RAW +MGMT_ADMIN.DELETE_TARGET_SYNC +MGMT_ADMIN.DEL_TARGET_ADDITION_CALLBACK +MGMT_ADMIN.DISABLE_METRIC_DELETION +MGMT_ADMIN.ENABLE_METRIC_DELETION +MGMT_ADMIN.GET_MS_NAME +MGMT_ADMIN.GET_OMS_DATA +MGMT_ADMIN.GET_OMS_STATUS +MGMT_ADMIN.GET_OMS_URLS +MGMT_ADMIN.IS_METRIC_DELETION_ENABLED +MGMT_ADMIN.SET_INACTIVE_TIME +MGMT_ADMIN.SET_LOG_LEVEL +MGMT_ADMIN.SET_LOG_PURGE +MGMT_ADMIN_DATA. +MGMT_ADMIN_DATA.ADD_AGENT_CALLBACK +MGMT_ADMIN_DATA.ADD_EMREP_CALLBACK +MGMT_ADMIN_DATA.ADD_EMREP_COLLECTIONS +MGMT_ADMIN_DATA.EVALUATE_MGMT_METRICS +MGMT_ADMIN_DATA.EVAL_AGENT_METRICS +MGMT_ADMIN_DATA.EVAL_REPO_PERFORMANCE +MGMT_ADMIN_DATA.GETOMSURLS +MGMT_ADMIN_DATA.GET_AGENT_INFO +MGMT_ADMIN_DATA.GET_HOME_DATA +MGMT_ADMIN_DATA.GET_METRIC_AGENT_STATUS +MGMT_ADMIN_DATA.GET_METRIC_CONFIGURATION +MGMT_ADMIN_DATA.GET_METRIC_DBMS +MGMT_ADMIN_DATA.GET_METRIC_DUP_TARGETS +MGMT_ADMIN_DATA.GET_METRIC_JOB_DISPATCHER +MGMT_ADMIN_DATA.GET_METRIC_LOADER_STATUS +MGMT_ADMIN_DATA.GET_METRIC_NOTIFICATION +MGMT_ADMIN_DATA.GET_METRIC_NOTIF_METHODS +MGMT_ADMIN_DATA.GET_METRIC_NO_AGENTS +MGMT_ADMIN_DATA.GET_METRIC_REP_DISPATCHER +MGMT_ADMIN_DATA.GET_METRIC_RESPONSE +MGMT_ADMIN_DATA.GET_METRIC_SERVLET +MGMT_ADMIN_DATA.GET_METRIC_SESSIONS +MGMT_ADMIN_DATA.GET_NODE_LIST_WITH_PRIVILEGE +MGMT_ADMIN_DATA.GET_OMS_DATA +MGMT_ADMIN_DATA.GET_RELATED_ALERTS +MGMT_ADMIN_DATA.GET_RELATED_TARGETS +MGMT_ADMIN_DATA.GET_REPOS_DBMS_JOBS +MGMT_ADMIN_DATA.HANDLE_EMREP_METAVER_UPDATE +MGMT_ASPROV_TS_PKG. +MGMT_ASPROV_TS_PKG.GET_TARGETS +MGMT_ASSOC. +MGMT_ASSOC.ADD_ASSOC_ADDITION_CALLBACK +MGMT_ASSOC.ADD_ASSOC_DELETION_CALLBACK +MGMT_ASSOC.ADD_ASSOC_PROPERTY +MGMT_ASSOC.CREATE_TARGET_ASSOC +MGMT_ASSOC.CREATE_TARGET_ASSOCS +MGMT_ASSOC.CREATE_TARGET_ASSOC_DEF +MGMT_ASSOC.DELETE_ASSOCS_IN_SCOPE +MGMT_ASSOC.DELETE_ASSOC_PROPERTY +MGMT_ASSOC.DELETE_TARGET_ASSOC +MGMT_ASSOC.DELETE_TARGET_ASSOCS +MGMT_ASSOC.DELETE_TARGET_ASSOC_DEF +MGMT_ASSOC.DEL_ASSOC_ADDITION_CALLBACK +MGMT_ASSOC.DEL_ASSOC_DELETION_CALLBACK +MGMT_ASSOC.GENERATE_ASSOC_DEF_GUID +MGMT_ASSOC.GET_ASSOC_DEF_GUID +MGMT_ASSOC.MODIFY_ASSOC_PROPERTY +MGMT_ASSOC.SET_TARGET_ASSOCS +MGMT_ASSOC_DEF_INS_UPD. +MGMT_ASSOC_TARGET_GUID_REC.NEW +MGMT_AUDIT_ADMIN. +MGMT_AUDIT_ADMIN.AUDIT_LEVEL +MGMT_AUDIT_ADMIN.AUDIT_PURGE +MGMT_AUDIT_ADMIN.DEREGISTER_AUDIT_CUSTOM_ATTRIB +MGMT_AUDIT_ADMIN.GEN_USER_SESSION_ID_GUID +MGMT_AUDIT_ADMIN.GET_AUDIT_CUSTOM_ATTRIBS +MGMT_AUDIT_ADMIN.GET_USER_SESSION_ID_GUID +MGMT_AUDIT_ADMIN.REGISTER_AUDIT_CUSTOM_ATTRIB +MGMT_AUDIT_ADMIN.REGISTER_AUDIT_CUSTOM_ATTRIBS +MGMT_AUDIT_ADMIN.REGISTER_OPERATION_CODE +MGMT_AUDIT_ADMIN.SET_AUDIT +MGMT_AUDIT_ADMIN.SET_AUDIT_OFF +MGMT_AUDIT_ADMIN.SET_AUDIT_ON +MGMT_AUDIT_ADMIN.SET_USER_INFO +MGMT_AUDIT_ADMIN.SET_USER_SESSION_ID_GUID +MGMT_AUDIT_ADMIN.UNREGISTER_OPERATION_CODE +MGMT_AUDIT_ADMIN.UPDATE_CA_FOR_USER +MGMT_AUDIT_ADMIN.UPDATE_USER_INFO +MGMT_AUDIT_CUSTOM_ATTRIB_OBJ.MGMT_AUDIT_CUSTOM_ATTRIB_OBJ +MGMT_AUDIT_LOG. +MGMT_AUDIT_LOG.AUDIT_LOG +MGMT_AUDIT_LOG.GET_EM_USER_TYPE +MGMT_AUDIT_LOG.GET_JOB_STEP_INFO +MGMT_AUDIT_LOG.UPDATE_JOB_STEP_INFO +MGMT_AVAIL. +MGMT_AVAIL.ADD_AVAIL_COMMENT +MGMT_AVAIL.GET_AVAILABILITY_SUMMARY +MGMT_AVAIL.GET_AVAIL_CURRENT_STATUS +MGMT_AVAIL.GET_AVAIL_OVERVIEW_DETAILS +MGMT_AVAIL.GET_TARGET_END_MARKER_TIME +MGMT_AVAIL.GET_TARGET_START_MARKER_TIME +MGMT_BCN_TXN_VIEW. +MGMT_BCN_TXN_VIEW.GET_BCN_TXN_AVAIL +MGMT_BCN_TXN_VIEW.GET_BCN_TXN_STATUS +MGMT_BCN_TXN_VIEW.GET_CUR_BEACONS_AGENT_INFO +MGMT_BCN_TXN_VIEW.GET_CUR_BEACONS_STATUS +MGMT_BCN_TXN_VIEW.GET_CUR_TESTS_STATUS +MGMT_BCN_TXN_VIEW.GET_CUR_TEST_STATUS +MGMT_BCN_TXN_VIEW.GET_SING_BCN_TXN_STATUS +MGMT_BCN_TXN_VIEW.GET_SING_TEST_STATUS +MGMT_BCN_TXN_VIEW.GET_TESTS_STATUS_AVAIL +MGMT_BCN_TXN_VIEW.GET_TEST_AVAIL +MGMT_BCN_TXN_VIEW.GET_TEST_END_DATE +MGMT_BCN_TXN_VIEW.GET_TEST_GUID +MGMT_BCN_TXN_VIEW.GET_TEST_START_DATE +MGMT_BCN_TXN_VIEW.GET_TXN_ALERTS +MGMT_BLACKOUT. +MGMT_BLACKOUT.ADD_REASON +MGMT_BLACKOUT.CREATE_BLACKOUT +MGMT_BLACKOUT.DELETE_BLACKOUT +MGMT_BLACKOUT.EDIT_BLACKOUT +MGMT_BLACKOUT.GET_REASON_REQUIRED +MGMT_BLACKOUT.STOP_BLACKOUT +MGMT_BLACKOUT_ENGINE. +MGMT_BLACKOUT_ENGINE.BLACKOUT_PURGE +MGMT_BLACKOUT_ENGINE.BLACKOUT_STATE_PURGE +MGMT_BLACKOUT_ENGINE.CHECK_MODIFY_PRIVS +MGMT_BLACKOUT_ENGINE.CHECK_REASSIGN_USER_BLACKOUTS +MGMT_BLACKOUT_ENGINE.CLEANUP_AFTER_EDIT +MGMT_BLACKOUT_ENGINE.CLEAN_BLK_ON_TGT_DEL +MGMT_BLACKOUT_ENGINE.COMPUTE_BLACKOUT_STATUS +MGMT_BLACKOUT_ENGINE.CREATE_BLACKOUT +MGMT_BLACKOUT_ENGINE.CREATE_IMMEDIATE_BLACKOUT +MGMT_BLACKOUT_ENGINE.DELETE_BLACKOUT +MGMT_BLACKOUT_ENGINE.DROP_USER_BLACKOUTS +MGMT_BLACKOUT_ENGINE.EDIT_BLACKOUT +MGMT_BLACKOUT_ENGINE.END_BLACKOUTS_ON_TARGET +MGMT_BLACKOUT_ENGINE.END_BLACKOUT_WINDOW +MGMT_BLACKOUT_ENGINE.GENERATE_BLACKOUT_GUID +MGMT_BLACKOUT_ENGINE.GET_BLACKOUT_DETAILS +MGMT_BLACKOUT_ENGINE.GET_BLACKOUT_WINDOWS +MGMT_BLACKOUT_ENGINE.GET_USER_BLACKOUTS +MGMT_BLACKOUT_ENGINE.GRANT_PRIV_CALLBACK +MGMT_BLACKOUT_ENGINE.GROUP_CHANGE_CALLBACK +MGMT_BLACKOUT_ENGINE.HANDLE_MEMBERSHIP_CHANGE +MGMT_BLACKOUT_ENGINE.HOST_CHANGE_CALLBACK +MGMT_BLACKOUT_ENGINE.IS_BLACKED_OUT +MGMT_BLACKOUT_ENGINE.LOCK_WINDOWS +MGMT_BLACKOUT_ENGINE.LOG_ERROR +MGMT_BLACKOUT_ENGINE.PROCESS_END_BLACKOUT +MGMT_BLACKOUT_ENGINE.PROCESS_START_BLACKOUT +MGMT_BLACKOUT_ENGINE.PROCESS_STOP_BLACKOUT +MGMT_BLACKOUT_ENGINE.REASSIGN_USER_BLACKOUTS +MGMT_BLACKOUT_ENGINE.REINSERT_BLACKOUT_SEVERITY +MGMT_BLACKOUT_ENGINE.REVOKE_PRIV_CALLBACK +MGMT_BLACKOUT_ENGINE.SET_BLACKOUT_STATUS +MGMT_BLACKOUT_ENGINE.SET_REASON +MGMT_BLACKOUT_ENGINE.START_BLACKOUTS_ON_TARGET +MGMT_BLACKOUT_ENGINE.START_BLACKOUT_WINDOW +MGMT_BLACKOUT_ENGINE.STOP_AGENT_SIDE_BLACKOUT +MGMT_BLACKOUT_ENGINE.STOP_BLACKOUT +MGMT_BLACKOUT_ENGINE.SUBMIT_DISCARD_STATE_JOB +MGMT_BLACKOUT_ENGINE.TO_AGENT_TIME +MGMT_BLACKOUT_ENGINE.TO_BLACKOUT_TIME +MGMT_BLACKOUT_ENGINE.UPDATE_START_JOB_STATUS +MGMT_BLACKOUT_ENGINE.UPDATE_STOP_JOB_STATUS +MGMT_BLACKOUT_UI. +MGMT_BLACKOUT_UI.ADD_BLACKOUT +MGMT_BLACKOUT_UI.CHECK_DELETE_PRIVS +MGMT_BLACKOUT_UI.CHECK_MODIFY_PRIVS +MGMT_BLACKOUT_UI.CHECK_OPERATOR_PRIV +MGMT_BLACKOUT_UI.CHECK_STOP_PRIVS +MGMT_BLACKOUT_UI.COUNT_REASONS_BY_NAME +MGMT_BLACKOUT_UI.CREATE_RETROACTIVE_BLACKOUT +MGMT_BLACKOUT_UI.DELETE_BLACKOUT +MGMT_BLACKOUT_UI.DELETE_BLACKOUT_REASON +MGMT_BLACKOUT_UI.DOES_INCLUDE_MEMBERS +MGMT_BLACKOUT_UI.ENABLE_RETROACTIVE_BLACKOUT +MGMT_BLACKOUT_UI.GET_ASSOC_BLACKOUTS +MGMT_BLACKOUT_UI.GET_BLACKOUTS +MGMT_BLACKOUT_UI.GET_BLACKOUT_BY_FLAT_TARGETS +MGMT_BLACKOUT_UI.GET_BLACKOUT_BY_TARGET +MGMT_BLACKOUT_UI.GET_BLACKOUT_DETAILS +MGMT_BLACKOUT_UI.GET_BLACKOUT_GUID +MGMT_BLACKOUT_UI.GET_BLACKOUT_REASONS +MGMT_BLACKOUT_UI.GET_BLACKOUT_TARGETS +MGMT_BLACKOUT_UI.GET_BLACKOUT_TIMEZONES +MGMT_BLACKOUT_UI.GET_DOWNTIME_TARGET_AVAIL_INFO +MGMT_BLACKOUT_UI.GET_FLATTENED_TARGETS +MGMT_BLACKOUT_UI.GET_FLAT_TARGETS_HOST +MGMT_BLACKOUT_UI.GET_GROUP_BLACKOUTS_INFO +MGMT_BLACKOUT_UI.GET_NO_AVAIL_TARGETS +MGMT_BLACKOUT_UI.GET_OVERLAP_BLK_DETAILS +MGMT_BLACKOUT_UI.GET_OVL_LAST_UNSUP_TARGETS +MGMT_BLACKOUT_UI.GET_PARENT_TARGET_TYPES +MGMT_BLACKOUT_UI.GET_TARGETS_FULL_BLACKOUT +MGMT_BLACKOUT_UI.GET_TARGETS_OPER_PRIV +MGMT_BLACKOUT_UI.GET_TARGETS_UNDER_BLACKOUT +MGMT_BLACKOUT_UI.GET_TARGET_ACTIVE_BLACKOUTS +MGMT_BLACKOUT_UI.GET_TARGET_BLACKOUTS +MGMT_BLACKOUT_UI.GET_TARGET_TYPES +MGMT_BLACKOUT_UI.IS_RETROACTIVE_BLACKOUT_ENABLE +MGMT_BLACKOUT_UI.MODIFY_BLACKOUT +MGMT_BLACKOUT_UI.SEARCH_BLACKOUTS_BY_NAME +MGMT_BLACKOUT_UI.SEARCH_BLACKOUTS_BY_TARGET +MGMT_BLACKOUT_UI.SEARCH_BLACKOUTS_FLAT_TARGETS +MGMT_BLACKOUT_UI.STOP_BLACKOUT +MGMT_BLACKOUT_UI.UPDATE_REASON_REQUIRED +MGMT_BLACKOUT_UI.VALIDATE_RBK_TIME_PERIOD +MGMT_BSLN. +MGMT_BSLN.ACTIVATE_BASELINE +MGMT_BSLN.BASELINE_GUID +MGMT_BSLN.BASELINE_IS_ACTIVE +MGMT_BSLN.BASELINE_REC +MGMT_BSLN.CACHED_SUBINTERVAL_CODE +MGMT_BSLN.COMPUTE_ALL_STATISTICS +MGMT_BSLN.COMPUTE_STATISTICS +MGMT_BSLN.CREATE_BASELINE_ROLLING +MGMT_BSLN.CREATE_BASELINE_STATIC +MGMT_BSLN.DATASOURCE_GUID +MGMT_BSLN.DATASOURCE_REC +MGMT_BSLN.DATA_AND_MODEL_OK +MGMT_BSLN.DEACTIVATE_BASELINE +MGMT_BSLN.DELETE_BSLN_JOBS +MGMT_BSLN.DEREGISTER_DATASOURCE +MGMT_BSLN.DROP_BASELINE +MGMT_BSLN.EXPTAIL_STATS +MGMT_BSLN.EXTRACT_COMPUTE_STATS +MGMT_BSLN.IS_ENABLED +MGMT_BSLN.LOAD_STATISTICS +MGMT_BSLN.METRIC_UID +MGMT_BSLN.NEW_THRESHOLD_VALUE +MGMT_BSLN.REGISTERED_DS_GUID +MGMT_BSLN.REGISTER_DATASOURCE +MGMT_BSLN.SET_ALL_THRESHOLDS +MGMT_BSLN.SET_THRESHOLD_PARAMETERS +MGMT_BSLN.STDHH24 +MGMT_BSLN.SUBINTERVAL_CODE +MGMT_BSLN.SUBMIT_BSLN_JOBS +MGMT_BSLN.TARGET_SOURCE_TYPE +MGMT_BSLN.TARGET_UID +MGMT_BSLN.THIS_TARGET_UID +MGMT_BSLN.UNSET_THRESHOLD_PARAMETERS +MGMT_BSLN.UPDATE_MOVING_WINDOW +MGMT_BSLN.VALID_KEY +MGMT_BSLN_INTERNAL. +MGMT_BSLN_INTERNAL.BEACON_KEYVAL_DEL_CALLBACK +MGMT_BSLN_INTERNAL.COMPUTE_LOAD_STATS +MGMT_BSLN_INTERNAL.DBMSJOB_EXTENDED_SQL_TRACE_ON +MGMT_BSLN_INTERNAL.DELETE_BSLN_JOBS +MGMT_BSLN_INTERNAL.EXTRACT_RAWDATA +MGMT_BSLN_INTERNAL.IS_ENABLED +MGMT_BSLN_INTERNAL.METRIC_GUID_BY_NAME +MGMT_BSLN_INTERNAL.PURGE_EXTRACT_RAWDATA +MGMT_BSLN_INTERNAL.PURGE_RAWDATA +MGMT_BSLN_INTERNAL.RAWDATA_RETENTION +MGMT_BSLN_INTERNAL.SET_ALL_THRESHOLDS +MGMT_BSLN_INTERNAL.SET_METRIC_BSLN_FLAG +MGMT_BSLN_INTERNAL.SET_RAWDATA_RETENTION +MGMT_BSLN_INTERNAL.SET_THRESHOLD_PARAMETERS +MGMT_BSLN_INTERNAL.SUBMIT_BSLN_JOBS +MGMT_BSLN_INTERNAL.TARGET_DELETE_CALLBACK +MGMT_BSLN_INTERNAL.TEST_METRICS_EM +MGMT_BSLN_INTERNAL.TEST_REGISTERED_METRICS_EM +MGMT_BSLN_INTERNAL.UNSET_ALL_THRESHOLDS +MGMT_BSLN_INTERNAL.UNSET_THRESHOLD_PARAMETERS +MGMT_CA. +MGMT_CA.CREATE_POLICY_RULE_DEFAULT_CA +MGMT_CA.CREATE_TARGET_CA +MGMT_CA.CREATE_TEMPLATE_CA +MGMT_CA.CREATE_USER_CA +MGMT_CA.DELETE_TARGET_CA +MGMT_CA.DELETE_TARGET_TYPE_CA +MGMT_CA.DELETE_TEMPLATE_CA +MGMT_CA.DELETE_USER_CA +MGMT_CA.EDIT_POLICY_RULE_DEFAULT_CA +MGMT_CA.EDIT_TARGET_CA +MGMT_CA.EDIT_TEMPLATE_CA +MGMT_CA.EDIT_USER_CA +MGMT_CA.GET_TARGET_SCOPED_JOB_ID +MGMT_CA.GET_TEMPLATE_SCOPED_JOB_ID +MGMT_CA.RESTART_CA_EXECUTION +MGMT_CA.STOP_CA_EXECUTION +MGMT_CATEGORY_DEF_OBJ.NEW +MGMT_CATEGORY_OBJ.NEW +MGMT_CLUSTER_CRED_RECORD.NEW +MGMT_CM. +MGMT_CM.ADD_BASELINE_VERSION +MGMT_CM.ADD_BULK_COMP_OBJ_ANNOTATION +MGMT_CM.ADD_COMPARISON_VERSION +MGMT_CM.ADD_CONS_GRP_TO_BASELINE +MGMT_CM.ADD_DEPENDENCY_TO_BASELINE +MGMT_CM.ADD_DEPENDENT_TO_BASELINE +MGMT_CM.ADD_INIT_PARAM_TO_BASELINE +MGMT_CM.ADD_INIT_PRM_TO_COMP +MGMT_CM.ADD_OBJGRANT_TO_BASELINE +MGMT_CM.ADD_OBJ_TO_BASELINE +MGMT_CM.ADD_OBJ_TO_COMPARISON +MGMT_CM.ADD_OBJ_TO_SYNCH +MGMT_CM.ADD_ONE_COMP_OBJ_ANNOTATION +MGMT_CM.ADD_PROXYGRANT_TO_BASELINE +MGMT_CM.ADD_QUOTAGRANT_TO_BASELINE +MGMT_CM.ADD_ROLEGRANT_TO_BASELINE +MGMT_CM.ADD_SCHEMA_MAP_ENTRY +MGMT_CM.ADD_SCOPE_NAME +MGMT_CM.ADD_SCOPE_NAME_PATTERN +MGMT_CM.ADD_SCOPE_SCHEMA +MGMT_CM.ADD_SYNCHRONIZATION_VERSION +MGMT_CM.ADD_SYNCH_IMPACT_ENTRY +MGMT_CM.ADD_SYNCH_SCRIPT_LINE +MGMT_CM.ADD_SYSGRANT_TO_BASELINE +MGMT_CM.CREATE_BASELINE +MGMT_CM.CREATE_COMPARISON +MGMT_CM.CREATE_SCOPE_SPEC +MGMT_CM.CREATE_SYNCHRONIZATION +MGMT_CM.DROP_BASELINE_VERSION_DDL +MGMT_CM.END_GENERATE_DDL +MGMT_CM.FAIL_GENERATE_DDL +MGMT_CM.GET_BASELINES_ROLLUP +MGMT_CM.GET_BASELINE_ID +MGMT_CM.GET_BASELINE_INFO +MGMT_CM.GET_BASELINE_OBJ_DEFINITION +MGMT_CM.GET_BASELINE_SCOPE_SPEC +MGMT_CM.GET_BASELINE_SOURCE_ID +MGMT_CM.GET_BASELINE_VERSION_CONS_GRPS +MGMT_CM.GET_BASELINE_VERSION_INIT_PRMS +MGMT_CM.GET_BASELINE_VERSION_NSOBJ +MGMT_CM.GET_BASELINE_VERSION_OBJECTS +MGMT_CM.GET_BASELINE_VERSION_OBJGRANT +MGMT_CM.GET_BASELINE_VERSION_PRXYGRNT +MGMT_CM.GET_BASELINE_VERSION_QTAGRNT +MGMT_CM.GET_BASELINE_VERSION_ROLEGRANT +MGMT_CM.GET_BASELINE_VERSION_SYSGRANT +MGMT_CM.GET_COMPARISONS_ROLLUP +MGMT_CM.GET_COMPARISON_ID +MGMT_CM.GET_COMPARISON_INFO +MGMT_CM.GET_COMPARISON_OBJ_DIFFERENCES +MGMT_CM.GET_COMPARISON_OWNER +MGMT_CM.GET_COMPARISON_SCOPE_SPEC +MGMT_CM.GET_COMPARISON_VERSION_OBJECTS +MGMT_CM.GET_COMP_VERSION_INIT_PARAMS +MGMT_CM.GET_CURRENT_BASELINE_VERSION +MGMT_CM.GET_CURRENT_COMPARISON_VERSION +MGMT_CM.GET_DDL_FOR_GENERATE +MGMT_CM.GET_NAME_PATTERN_LIST +MGMT_CM.GET_NONSCHEMA_TYPES_LIST +MGMT_CM.GET_NONSCHEMA_TYPE_NAME +MGMT_CM.GET_OBJECT_HISTORY +MGMT_CM.GET_PREVIOUS_BASELINE_VERSION +MGMT_CM.GET_SCHEMA_LIST +MGMT_CM.GET_SCHEMA_LIST_FROM_MAP +MGMT_CM.GET_SCOPE_NAME_PATTERNS +MGMT_CM.GET_SCOPE_SPEC_FLAGS +MGMT_CM.GET_SCOPE_SPEC_NAMES +MGMT_CM.GET_SCOPE_SPEC_TYPEMASK +MGMT_CM.GET_SYNCHRONIZATIONS_ROLLUP +MGMT_CM.GET_SYNCHRONIZATION_ID +MGMT_CM.GET_SYNCHRONIZATION_SCOPE_SPEC +MGMT_CM.GET_TYPES_LIST +MGMT_CM.GET_TYPE_NAME +MGMT_CM.HAS_CREATE_NEW_VERSION_PRIV +MGMT_CM.HAS_GENERATE_DDL_PRIV +MGMT_CM.HAS_REMOVE_PRIV +MGMT_CM.HAS_VIEW_METADATA_PRIV +MGMT_CM.REMOVE_BASELINE +MGMT_CM.REMOVE_BASELINE_VERSION +MGMT_CM.REMOVE_COMPARISON +MGMT_CM.REMOVE_COMPARISON_VERSION +MGMT_CM.REMOVE_CONS_GRP_FROM_BASELINE +MGMT_CM.REMOVE_DEPCY_FROM_BASELINE +MGMT_CM.REMOVE_DEPENDENT_FROM_BASELINE +MGMT_CM.REMOVE_INIT_PRM_FROM_BASELINE +MGMT_CM.REMOVE_INIT_PRM_FROM_COMP +MGMT_CM.REMOVE_MVLOG_FROM_BASELINE +MGMT_CM.REMOVE_NSOBJ_FROM_BASELINE +MGMT_CM.REMOVE_OBJGRANT_FROM_BASELINE +MGMT_CM.REMOVE_OBJ_FROM_BASELINE +MGMT_CM.REMOVE_OBJ_FROM_COMPARISON +MGMT_CM.REMOVE_OBJ_FROM_SYNCH +MGMT_CM.REMOVE_PRXYGRNT_FROM_BASELINE +MGMT_CM.REMOVE_QTAGRNT_FROM_BASELINE +MGMT_CM.REMOVE_ROLEGRANT_FROM_BASELINE +MGMT_CM.REMOVE_SYNCHRONIZATION +MGMT_CM.REMOVE_SYNCHRONIZATION_VERSION +MGMT_CM.REMOVE_SYSGRANT_FROM_BASELINE +MGMT_CM.SCOPE_SPEC_HAS_NONSCHEMA_TYPES +MGMT_CM.SCOPE_SPEC_HAS_SCHEMA_TYPES +MGMT_CM.SET_BASELINE_DB_VERSION +MGMT_CM.SET_BASELINE_JOB_ID +MGMT_CM.SET_BULK_COMP_OBJ_IGNORED +MGMT_CM.SET_BULK_SYNCH_OBJ_EXCLUDED +MGMT_CM.SET_CAPTURE_DATE +MGMT_CM.SET_COMPARE_DATE +MGMT_CM.SET_COMPARISON_EXECUTION_ID +MGMT_CM.SET_COMPARISON_JOB_ID +MGMT_CM.SET_EXECUTION_ID +MGMT_CM.SET_ONE_COMP_OBJ_IGNORED +MGMT_CM.SET_SYNCH_DATE +MGMT_CM.SET_SYNCH_EXECUTION_ID +MGMT_CM.SET_SYNCH_JOB_ID +MGMT_CM.SET_SYNCH_SCRIPT +MGMT_CM.START_GENERATE_DDL +MGMT_CM_BL_CLEAN_SS. +MGMT_CM_COMP_CLEAN_ANT. +MGMT_CM_COMP_CLEAN_SS_SM. +MGMT_CM_SYNCH_CLEAN_SS_SM_TBL. +MGMT_COLLECTION. +MGMT_COLLECTION.ADD_DEFAULT_COLLECTION +MGMT_COLLECTION.ADD_WORKERS +MGMT_COLLECTION.DEFAULT_OBJECT_GUID +MGMT_COLLECTION.DELETE_COLLECTION +MGMT_COLLECTION.DELETE_DEFAULT_COLLECTION +MGMT_COLLECTION.DISABLE_DEFAULT_COLLECTION +MGMT_COLLECTION.ENABLE_DEFAULT_COLLECTION +MGMT_COLLECTION.GET_BULK_BATCH_SIZE +MGMT_COLLECTION.GET_COLLECTION_NAME +MGMT_COLLECTION.HAS_COLLECTION +MGMT_COLLECTION.MODIFY_COLLECTION +MGMT_COLLECTION.MODIFY_DEFAULT_COLLECTION +MGMT_COLLECTION.REMOVE_ALL_WORKERS +MGMT_COLLECTION.REMOVE_WORKERS +MGMT_COLLECTION.RESUME_COLLECTION +MGMT_COLLECTION.RUN_COLLECTION +MGMT_COLLECTION.RUN_WORKER +MGMT_COLLECTION.SET_BULK_BATCH_SIZE +MGMT_COLLECTION.SET_WORKER_COUNT +MGMT_COLLECTION.START_COLLECTION +MGMT_COLLECTION.START_DEFAULT_COLLECTION +MGMT_COLLECTION.START_WORKERS +MGMT_COLLECTION.STOP_COLLECTION +MGMT_COLLECTION.STOP_DBMS_JOB +MGMT_COLLECTION.STORE_METRIC_DATA +MGMT_COLLECTION.SUSPEND_COLLECTION +MGMT_COLLECTION_CRED_RECORD.NEW +MGMT_COLL_METRIC.NEW +MGMT_COLL_PROP.NEW +MGMT_COLL_QUEUE_OBJ.NEW +MGMT_COLL_SCHEDULE_OBJ.DAILY_SCHEDULE +MGMT_COLL_SCHEDULE_OBJ.DAYS_OF_MONTH +MGMT_COLL_SCHEDULE_OBJ.DAYS_OF_WEEK +MGMT_COLL_SCHEDULE_OBJ.DAYS_OF_YEAR +MGMT_COLL_SCHEDULE_OBJ.INTERVAL_SCHEDULE +MGMT_COLL_SCHEDULE_OBJ.NEW +MGMT_COLL_SCHEDULE_OBJ.ONE_TIME +MGMT_COLL_SCHEDULE_OBJ.ON_DEMAND_SCHEDULE +MGMT_CONFIG. +MGMT_CONFIG.COLLECT_CONFIG +MGMT_CONFIG.COLLECT_STATS +MGMT_CONFIG.PRINT_JOB_DETAILS +MGMT_CONFIG.RUN_NOW +MGMT_CONFIG.STOP_JOB +MGMT_CONFIG.SUBMIT_JOB +MGMT_CONFIG_STD. +MGMT_CONFIG_STD.ADD_INCLUDE_STD +MGMT_CONFIG_STD.ADD_RULE +MGMT_CONFIG_STD.ADD_RULEFOLDER +MGMT_CONFIG_STD.CREATE_CONFIG_STANDARD +MGMT_CONFIG_STD.DELETE_CONFIG_STANDARD +MGMT_CONFIG_STD.DELETE_CS_EVAL_RESULTS +MGMT_CONFIG_STD.DELETE_JOB +MGMT_CONFIG_STD.EDIT_JOB +MGMT_CONFIG_STD.EVALUATE_CONFIG_STD +MGMT_CONFIG_STD.EXPORT_CONFIG_STANDARD +MGMT_CONFIG_STD.EXPORT_CS_HIERARCHY +MGMT_CONFIG_STD.EXPORT_CS_INCLUSIONS +MGMT_CONFIG_STD.EXPORT_CS_RULEFOLDERS +MGMT_CONFIG_STD.EXPORT_CS_RULES +MGMT_CONFIG_STD.GENERATE_CS_GUID +MGMT_CONFIG_STD.GET_CONFIG_STD_GUID +MGMT_CONFIG_STD.GET_JOB_INFO +MGMT_CONFIG_STD.ON_COMP_JOB_DELETE_CALLBACK +MGMT_CONFIG_STD.SUBMIT_JOB +MGMT_CONFIG_UTL. +MGMT_CONFIG_UTL.CREATE_REPLACE_DIR_OBJ +MGMT_CONTAINER_CRED_RECORD.NEW +MGMT_CONT_CREDS_DEL. +MGMT_CREDENTIAL. +MGMT_CREDENTIAL.APPLY_TEMPLATE_COPY_COLL_CREDS +MGMT_CREDENTIAL.CHANGE_CREDENTIAL +MGMT_CREDENTIAL.CHANGE_HOST_PASSWORD +MGMT_CREDENTIAL.COMPUTE_ASSOCIATED_INFO +MGMT_CREDENTIAL.CREATE_CREDENTIAL_SET +MGMT_CREDENTIAL.CREATE_CREDENTIAL_TYPE +MGMT_CREDENTIAL.CREATE_PDP_TYPE +MGMT_CREDENTIAL.DELETE_ARU_CREDENTIALS +MGMT_CREDENTIAL.DELETE_CA_CREDENTIALS +MGMT_CREDENTIAL.DELETE_COLLECTION_CREDENTIALS +MGMT_CREDENTIAL.DELETE_COLL_TEMPLATE_CREDS +MGMT_CREDENTIAL.DELETE_CONTAINER_CREDENTIALS +MGMT_CREDENTIAL.DELETE_CREDENTIAL_SET +MGMT_CREDENTIAL.DELETE_CREDENTIAL_TYPE +MGMT_CREDENTIAL.DELETE_ENTERPRISE_CREDENTIALS +MGMT_CREDENTIAL.DELETE_HOST_CREDENTIALS +MGMT_CREDENTIAL.DELETE_JOB_CREDENTIALS +MGMT_CREDENTIAL.DELETE_TARGET_CREDENTIALS +MGMT_CREDENTIAL.GET_CREDENTIAL_SET_KEY_COLUMN +MGMT_CREDENTIAL.GET_JOB_CREDENTIALS +MGMT_CREDENTIAL.GET_JOB_CREDS_DEFAULT +MGMT_CREDENTIAL.GET_PDP_TYPES +MGMT_CREDENTIAL.GET_TARGET_CREDS_DEFAULT +MGMT_CREDENTIAL.GET_VALUE +MGMT_CREDENTIAL.INSERT_CREDENTIALS +MGMT_CREDENTIAL.INSERT_MONITORING_CREDENTIALS +MGMT_CREDENTIAL.IS_40_STYLE_SET +MGMT_CREDENTIAL.IS_CONSOLE_INSERT +MGMT_CREDENTIAL.IS_NO_RECURSION +MGMT_CREDENTIAL.POST_PROCESS +MGMT_CREDENTIAL.SET_ARU_CREDENTIALS +MGMT_CREDENTIAL.SET_CA_CREDENTIALS +MGMT_CREDENTIAL.SET_COLLECTION_CREDENTIALS +MGMT_CREDENTIAL.SET_COLLECTION_TEMPLATE_CREDS +MGMT_CREDENTIAL.SET_CONTAINER_CREDENTIALS +MGMT_CREDENTIAL.SET_ENTERPRISE_CREDENTIALS +MGMT_CREDENTIAL.SET_HOST_CREDENTIALS +MGMT_CREDENTIAL.SET_JOB_CREDENTIALS +MGMT_CREDENTIAL.SET_MONITORING_CREDENTIALS +MGMT_CREDENTIAL.SET_NESTED_JOB_CRED_INFO +MGMT_CREDENTIAL.SET_TARGET_CREDENTIALS +MGMT_CREDENTIAL.UPD_COLLECTION_TEMPLATE_CREDS +MGMT_CREDENTIALS_UI. +MGMT_CREDENTIALS_UI.APPLY_PDP +MGMT_CREDENTIALS_UI.CREATE_PDP_SETTINGS +MGMT_CREDENTIALS_UI.DELETE_PDP_SETTINGS +MGMT_CREDENTIALS_UI.GET_CREDS_SUMMARY +MGMT_CREDENTIALS_UI.GET_PDP_SETTINGS +MGMT_CREDENTIALS_UI.INSERT_PDP_SETTING +MGMT_CREDENTIALS_UI.REMOVE_PDP_SETTING +MGMT_CREDENTIALS_UI.VLDTE_PDP_STNG_NMES_AND_SUBMIT +MGMT_CREDS_INS_UPD. +MGMT_CREDS_UPD. +MGMT_CRED_RECORD.MGMT_CRED_RECORD +MGMT_CRED_RECORD.NEW +MGMT_CRED_SET_COL_RECORD.MGMT_CRED_SET_COL_RECORD +MGMT_CRITICALPATCH_JOB. +MGMT_CRITICALPATCH_JOB.GET_REFRESHFROMMETALINK_COUNT +MGMT_CRITICALPATCH_JOB.GET_REFRESHFROMMETALINK_EXIST +MGMT_DBNET. +MGMT_DBNET.GETLSNRPERFCHARTDATA +MGMT_DBNET.GETNETADMININFO +MGMT_DBNET.GETNETADMININFOWITHUPDATE +MGMT_DBNET.GETNETADMININFOWITHUPDATEFORSA +MGMT_DBNET.GETPROPERTYVALUE +MGMT_DBNET.GET_DATABASES_INFO +MGMT_DBNET.GET_LSNR_HOMEPAGE_INFO +MGMT_DBNET.GET_LSNR_HOME_PAGE_DATA +MGMT_DBNET.UPDATENETADMININFO +MGMT_DBNET.UPDATETNS_ADMIN +MGMT_DBNET.UPDATETNS_ADMIN_FOR_SA +MGMT_DB_HDM_METRIC_TR. +MGMT_DB_LL_METRICS. +MGMT_DB_LL_METRICS.COLLECT_CONFIG_METRICS +MGMT_DB_LL_METRICS.COLLECT_STATS_METRICS +MGMT_DB_LL_METRICS.GET_VERSION_CATEGORY +MGMT_DB_UPGRADE. +MGMT_DB_UPGRADE.CHANGE_VER_INST +MGMT_DB_UPGRADE.CHANGE_VER_RAC +MGMT_DB_UPGRADE.GET_10G_COLL +MGMT_DB_UPGRADE.GET_9I_COLL +MGMT_DB_UPGRADE.HANDLE_VERSION_CHANGE +MGMT_DELTA. +MGMT_DELTA.ADD_NON_NULL_DELTA_VALUE +MGMT_DELTA.DO_DIFF_QUERIES +MGMT_DELTA.DO_DIFF_QUERIES_AND_SAVE +MGMT_DELTA.DO_HISTORY_DIFFS +MGMT_DELTA.ECM_HISTORY_PURGE +MGMT_DELTA.GET_CURRENT_DELTA_GUID +MGMT_DELTA.GET_DELTA_KEY_DISPLAY_STRING +MGMT_DELTA.GET_DELTA_VALUE_DISPLAY_STRING +MGMT_DELTA.PURGE_HISTORY +MGMT_DELTA.RECORD_DELETE +MGMT_DELTA.RECORD_INSERT +MGMT_DELTA.RECORD_OPERATION +MGMT_DELTA.RECORD_UPDATE +MGMT_DELTA.RETRIEVE_SAVED_COMPARISON +MGMT_DELTA.START_DELTA +MGMT_DELTA.TEST_AND_ADD_DELTA +MGMT_DELTA.UPDATE_DELTA_XACT +MGMT_DELTA_ENTRY_RECORDER.RECORD_DELTA +MGMT_DELTA_ENTRY_RECORDER.RECORD_SUMMARY +MGMT_DELTA_RECORDER.RECORD_DELTA +MGMT_DELTA_RECORDER.RECORD_SUMMARY +MGMT_DM. +MGMT_DM.ADD_INFCONS_COLUMN +MGMT_DM.ADD_MASKING_JOB +MGMT_DM.ADD_RULE_ENTRY +MGMT_DM.ADD_SS_COLUMN +MGMT_DM.CREATE_MASKING_DEFINITION +MGMT_DM.CREATE_MASKING_RULE +MGMT_DM.GET_MASKING_RULE_ARRAYLIST +MGMT_DM.HAS_REMOVE_PRIV +MGMT_DM.REMOVE_MASKING_DEFINITION +MGMT_DM.REMOVE_MASKING_RULE +MGMT_DM.REMOVE_RULE_ENTRIES +MGMT_DM.UPDATE_MASKING_RULE +MGMT_ECM_CSA_PKG. +MGMT_ECM_CSA_PKG.AFTER_LOAD +MGMT_ECM_CSA_PKG.AUTO_PURGE +MGMT_ECM_CSA_PKG.CREATE_TARGET_ASSOCIATION +MGMT_ECM_CSA_PKG.PURGE +MGMT_ECM_CSA_PKG.REMOVE_ASSOC +MGMT_ECM_CSA_PKG.REMOVE_FAILED +MGMT_ECM_HOSTPATCH. +MGMT_ECM_HOSTPATCH.DELETE_GROUP_INFO +MGMT_ECM_HOSTPATCH.DELETE_HOST_INFO +MGMT_ECM_HOSTPATCH.DELETE_REPOS_INFO +MGMT_ECM_HOSTPATCH.GET_HOSTS_PREFCREDS_NOT_SET +MGMT_ECM_HOSTPATCH.GET_HOST_TIMEZONES +MGMT_ECM_HOSTPATCH.GET_NUM_PROBLEMATIC_EXECUTIONS +MGMT_ECM_HOSTPATCH.GET_NUM_SUSPENDED_EXECUTIONS +MGMT_ECM_HOSTPATCH.GROUP_OR_HOST_DELETED +MGMT_ECM_HOSTPATCH.STOP_HP_JOB +MGMT_ECM_HOSTPATCH.UPDATE_GROUP_COMPL_SUMMARY +MGMT_ECM_HOSTPATCH_ULN. +MGMT_ECM_HOSTPATCH_ULN.ADD_CHANNEL +MGMT_ECM_HOSTPATCH_ULN.DELETE_CHANNEL +MGMT_ECM_SNAPSHOT_PKG. +MGMT_ECM_SNAPSHOT_PKG.COMPARE_AND_SAVE +MGMT_ECM_SNAPSHOT_PKG.COMPARE_AND_SAVE_JOB +MGMT_ECM_SNAPSHOT_PKG.COMPARE_GEN_CONF_AND_SAVE +MGMT_ECM_SNAPSHOT_PKG.COMPARE_SNAPSHOTS +MGMT_ECM_SNAPSHOT_PKG.DELETE_SAVED_COMPARISON +MGMT_ECM_SNAPSHOT_PKG.DO_AND_SAVE_HISTORY +MGMT_ECM_SNAPSHOT_PKG.GET_COMPARISON_RESULTS_QUERY +MGMT_ECM_SNAPSHOT_PKG.GET_GENERIC_COMPARISON_RESULTS +MGMT_ECM_SNAPSHOT_PKG.GET_GENERIC_COMP_WITH_KEYS +MGMT_ECM_SNAPSHOT_PKG.GET_KEY_COLUMN_LIST +MGMT_ECM_SNAPSHOT_PKG.GET_MULTI_CONFIGS_COMP_SUMMARY +MGMT_ECM_SNAPSHOT_PKG.GET_NONKEY_COLUMN_LIST +MGMT_ECM_SNAPSHOT_PKG.ON_COMP_JOB_DELETE_CALLBACK +MGMT_ECM_SNAPSHOT_PKG.PREPARE_DELTA_QUERIES +MGMT_ECM_SNAPSHOT_PKG.PURGE_HISTORY +MGMT_ENTERPRISE_CRED_RECORD.NEW +MGMT_ENT_CREDS_DEL. +MGMT_FAILOVER. +MGMT_FAILOVER.CHECK_FAILURE +MGMT_FAILOVER.GET_ACTIVE_MT_COUNT +MGMT_FAILOVER.GET_MIDDLE_TIER_COUNT +MGMT_FAILOVER.HEARTBEAT +MGMT_FAILOVER.REGISTER +MGMT_FAILOVER.REGISTER_CALLBACK +MGMT_GENSVC_AVAIL. +MGMT_GENSVC_AVAIL.ADD_TEST +MGMT_GENSVC_AVAIL.AVAIL_EVENT +MGMT_GENSVC_AVAIL.BEACON_AVAIL_EVENT +MGMT_GENSVC_AVAIL.COMPUTE_SVC_AVAIL +MGMT_GENSVC_AVAIL.COMPUTE_TEST_AVAIL +MGMT_GENSVC_AVAIL.DBMSJOB_EXTENDED_SQL_TRACE_ON +MGMT_GENSVC_AVAIL.DEREGISTER_AVAIL +MGMT_GENSVC_AVAIL.DISABLE_AVAIL +MGMT_GENSVC_AVAIL.ENABLE_AVAIL +MGMT_GENSVC_AVAIL.EXEC_AVAIL_JOB +MGMT_GENSVC_AVAIL.GET_SVC_EVAL_LOGIC +MGMT_GENSVC_AVAIL.IS_AVAIL_BEACON +MGMT_GENSVC_AVAIL.IS_AVAIL_ENABLED +MGMT_GENSVC_AVAIL.IS_BEACON +MGMT_GENSVC_AVAIL.IS_TARGET_AVAIL_VIOL +MGMT_GENSVC_AVAIL.IS_TEST_AVAIL_VIOL +MGMT_GENSVC_AVAIL.METRIC_ERROR_MSG +MGMT_GENSVC_AVAIL.PROCESS_AVAIL_BEACON +MGMT_GENSVC_AVAIL.PROCESS_BLACKOUT_END +MGMT_GENSVC_AVAIL.PROCESS_BLACKOUT_START +MGMT_GENSVC_AVAIL.PROCESS_METRIC_ERROR +MGMT_GENSVC_AVAIL.PROCESS_UNREACHABLE +MGMT_GENSVC_AVAIL.REMOVE_TEST +MGMT_GENSVC_AVAIL.SCHEDULE_TARGET_AVAIL +MGMT_GENSVC_AVAIL.SCHEDULE_TEST_AVAIL +MGMT_GENSVC_AVAIL.SET_BEACONS +MGMT_GENSVC_AVAIL.SET_SVC_EVAL_LOGIC +MGMT_GENSVC_AVAIL.SET_TESTS +MGMT_GENSVC_MONTMPL. +MGMT_GENSVC_MONTMPL.DELETE_TEMPLATE +MGMT_GENSVC_MONTMPL.READ_TEMPLATE +MGMT_GENSVC_MONTMPL.SET_TEMPLATE_BEACONS +MGMT_GENSVC_MONTMPL.WRITE_TEMPLATE +MGMT_GENSVC_UPDBCN. +MGMT_GENSVC_UPDBCN.CLEANUP_HISTORY_AFTER_SYNC +MGMT_GENSVC_UPDBCN.CLEAR_SEV_METRIC_ERRS +MGMT_GENSVC_UPDBCN.SUBMIT_SYNC_JOB +MGMT_GENSVC_UPDBCN.SUBMIT_UPDBCN_JOB +MGMT_GENSVC_UPDBCN.UPDATE_TESTS +MGMT_GLOBAL. +MGMT_GLOBAL.ADJUST_TZ +MGMT_GLOBAL.CHECK_OVERLAP +MGMT_GLOBAL.ELAPSED_TIME_MSEC +MGMT_GLOBAL.FROM_UTC +MGMT_GLOBAL.GET_COMPOSITE_KEY_GUID +MGMT_GLOBAL.IS_EQUIVALENT_TZ +MGMT_GLOBAL.SYSDATE_TZRGN +MGMT_GLOBAL.SYSDATE_UTC +MGMT_GLOBAL.TO_UTC +MGMT_GROUP. +MGMT_GROUP.ADD_DEFAULT_CHART +MGMT_GROUP.APPLY_TARGET_UI_DEFAULTS +MGMT_GROUP.CREATE_GROUP +MGMT_GROUP.CREATE_REDUNDANCY_GROUP +MGMT_GROUP.GET_RGROUP_ELIGIBLE_MTYPES +MGMT_GROUP.IS_GROUP +MGMT_GROUP.IS_REDUNDANCY_GROUP +MGMT_GROUP.MODIFY_GROUP +MGMT_GROUP.MODIFY_REDUNDANCY_GROUP +MGMT_GROUP.SETUP_TYPE_UI_METADATA +MGMT_HA_DG. +MGMT_HA_DG.UPDATE_MGMT_HA_DG_TARGET_SUM +MGMT_HC_DELTA. +MGMT_HC_DELTA.RECORD_HC_DIFFS +MGMT_HISTORY_ENTRY_RECORDER.RECORD_DELTA +MGMT_HISTORY_ENTRY_RECORDER.RECORD_SUMMARY +MGMT_HOST_CREDS_DEL. +MGMT_HOST_CRED_RECORD.NEW +MGMT_HOST_MGMT. +MGMT_HOST_MGMT.GET_COLLECTION_ITEM_INFO +MGMT_HOST_MGMT.SET_COLLECTION_ITEM_INFO +MGMT_HTTP_SESSION. +MGMT_HTTP_SESSION.ASSOCIATE_OBJECT +MGMT_HTTP_SESSION.HANDLE_OMS_DEATH +MGMT_HTTP_SESSION.REGISTER_EXPIRY_CALLBACK +MGMT_HTTP_SESSION.SESSION_EXPIRED +MGMT_IP. +MGMT_IP.ADD_CHART_FROM_SQL_ELEM_DEF +MGMT_IP.ADD_ELEMENT_DEFINITION +MGMT_IP.ADD_ELEMENT_TO_REPORT_DEF +MGMT_IP.ADD_ELEMENT_TO_REPORT_INTERNAL +MGMT_IP.ADD_ELEMENT_TYPE +MGMT_IP.ADD_EM_IMAGE_ELEM_DEF +MGMT_IP.ADD_TABLE_FROM_SQL_ELEM_DEF +MGMT_IP.CREATE_REPORT_DEFINITION +MGMT_IP.CREATE_REPORT_DEF_INTERNAL +MGMT_IP.DELETE_REPORT +MGMT_IP.DELETE_REPORT_BY_TITLE +MGMT_IP.DELETE_REPORT_BY_VERSION +MGMT_IP.DELETE_REPORT_ELEMENT +MGMT_IP.DEREGISTER_SQL_STATEMENT +MGMT_IP.DO_PURGE +MGMT_IP.DROP_USER_REPORT_DEFS +MGMT_IP.GETAVAILALERTSSQL +MGMT_IP.GETELEMENTSFROMREP +MGMT_IP.GETMETRICALERTSSQL +MGMT_IP.GETMETRICERRORALERTSQL +MGMT_IP.GETPARAMSANDTARGETS +MGMT_IP.GETREPORTFROMREP +MGMT_IP.GETTARGETSFROMREP +MGMT_IP.GET_ALERT_DATA +MGMT_IP.GET_REPORT_GRANTS +MGMT_IP.GET_USER_REPORT_DEFS +MGMT_IP.GRANT_REPORT_TO_USER +MGMT_IP.PURGE_BY_KEEP_DAYS +MGMT_IP.PURGE_BY_KEEP_VERSIONS +MGMT_IP.PURGE_OLD_JOBS +MGMT_IP.REASSIGN_USER_REPORT_DEFS +MGMT_IP.REGISTER_SQL_STATEMENT +MGMT_IP.UDM_COMPOSITE_KEYS +MGMT_IP.UPDATE_ELEMENT_TYPE +MGMT_IP.UPDATE_LATE_BINDING_TGT_TYPE +MGMT_IP.USER_HAS_PUBLISH_TO_PUBLIC +MGMT_IP_DERIVED_TARGET_GUID. +MGMT_JOBS. +MGMT_JOBS.ADD_EVENT +MGMT_JOBS.ADD_JOB_PARAMETERS +MGMT_JOBS.ASSOCIATE_EVENT_WITH_EXECUTION +MGMT_JOBS.CREATE_LIBRARY_JOB +MGMT_JOBS.DELETE_ALL_EXECUTIONS +MGMT_JOBS.DELETE_JOB +MGMT_JOBS.DELETE_JOB_EXECUTION +MGMT_JOBS.DELETE_JOB_EXECUTIONS +MGMT_JOBS.DELETE_JOB_RUN +MGMT_JOBS.DEREGISTER_COMMAND_BLOCK_PROC +MGMT_JOBS.DROP_PURGE_POLICY +MGMT_JOBS.EDIT_JOB +MGMT_JOBS.GET_IMMEDIATE_SCHEDULE_RECORD +MGMT_JOBS.GET_JOB_GRANTS +MGMT_JOBS.GET_JOB_GRANTS_FOR_SET +MGMT_JOBS.GET_JOB_SCHEDULE_RECORD +MGMT_JOBS.GET_LARGE_PARAM +MGMT_JOBS.GET_STATUS_BUCKET +MGMT_JOBS.INSERT_STEP_ERROR_MESSAGE +MGMT_JOBS.RAISE_EVENT +MGMT_JOBS.REGISTER_COMMAND +MGMT_JOBS.REGISTER_COMMAND_BLOCK_PROC +MGMT_JOBS.REGISTER_PURGE_POLICY +MGMT_JOBS.RESTART_JOB +MGMT_JOBS.RESTART_JOB_EXECUTION +MGMT_JOBS.RESUBMIT_JOB +MGMT_JOBS.RESUME_JOB +MGMT_JOBS.RESUME_JOB_EXECUTION +MGMT_JOBS.STOP_ALL_EXECUTIONS +MGMT_JOBS.STOP_EXECUTION +MGMT_JOBS.STOP_EXECUTIONS +MGMT_JOBS.STOP_JOB_RUN +MGMT_JOBS.SUBMIT_JOB +MGMT_JOBS.SUBMIT_JOB_FROM_LIBRARY +MGMT_JOBS.SUBMIT_JOB_TO_QUEUE +MGMT_JOBS.SUSPEND_JOB +MGMT_JOBS.SUSPEND_JOB_EXECUTION +MGMT_JOBS.SUSPEND_JOB_EXECUTION_ON_EVENT +MGMT_JOB_CREDS_DEL. +MGMT_JOB_CRED_RECORD.NEW +MGMT_JOB_ENGINE. +MGMT_JOB_ENGINE.ADD_DELETED_JOB_TYPE +MGMT_JOB_ENGINE.ADD_EVENT +MGMT_JOB_ENGINE.ADD_JOB_CALLBACK +MGMT_JOB_ENGINE.APPLY_COMMAND_BLOCK +MGMT_JOB_ENGINE.APPLY_PURGE_POLICIES +MGMT_JOB_ENGINE.ARE_CAS_EQUIVALENT +MGMT_JOB_ENGINE.ASSOCIATE_EVENT_WITH_EXECUTION +MGMT_JOB_ENGINE.BLACKOUT_WINDOW_ENDED +MGMT_JOB_ENGINE.BLACKOUT_WINDOW_STARTED +MGMT_JOB_ENGINE.BOUNCE_AGENT_CALLBACK +MGMT_JOB_ENGINE.CHECK_MODIFY_EXECUTION +MGMT_JOB_ENGINE.CHECK_MODIFY_JOB +MGMT_JOB_ENGINE.CHECK_MODIFY_STEP +MGMT_JOB_ENGINE.CHECK_PRIV +MGMT_JOB_ENGINE.CHECK_REASSIGN_USER_CA +MGMT_JOB_ENGINE.CHECK_REASSIGN_USER_JOBS +MGMT_JOB_ENGINE.CHECK_SECURITY_INFO +MGMT_JOB_ENGINE.CLEANUP_JOB_QUEUE +MGMT_JOB_ENGINE.CLONE_MULTITASK_JOB_TYPE +MGMT_JOB_ENGINE.COMPUTE_CRED_INFO +MGMT_JOB_ENGINE.COMPUTE_EXTENDED_TARGET_LIST +MGMT_JOB_ENGINE.COMPUTE_MTJOB_CRED_INFO +MGMT_JOB_ENGINE.CONTAINER_CREDS_ADDED +MGMT_JOB_ENGINE.CONTAINER_CREDS_DELETED +MGMT_JOB_ENGINE.COPY_LARGE_PARAMS +MGMT_JOB_ENGINE.CREATE_JOB_QUEUE +MGMT_JOB_ENGINE.CREATE_TARGET_CA_FROM_DEFAULT +MGMT_JOB_ENGINE.CREATE_TARGET_CA_FROM_TEMPLATE +MGMT_JOB_ENGINE.CREATE_TEMPLATE_COPY_CA +MGMT_JOB_ENGINE.CREATE_TEMPL_CA_FROM_TARGET_CA +MGMT_JOB_ENGINE.CREATE_TEMP_CP_CA_FROM_TARGET +MGMT_JOB_ENGINE.CREATE_TEMP_CP_CA_FROM_TEMP_CP +MGMT_JOB_ENGINE.DBMSJOB_EXTENDED_SQL_TRACE_ON +MGMT_JOB_ENGINE.DECREMENT_CA_REF_COUNT +MGMT_JOB_ENGINE.DECRYPT_SCALAR +MGMT_JOB_ENGINE.DECRYPT_VECTOR +MGMT_JOB_ENGINE.DECR_LARGE_PARAM_REF_COUNT +MGMT_JOB_ENGINE.DELETE_ALL_EXECUTIONS +MGMT_JOB_ENGINE.DELETE_CA +MGMT_JOB_ENGINE.DELETE_EXT_TARGET +MGMT_JOB_ENGINE.DELETE_JOB +MGMT_JOB_ENGINE.DELETE_JOB_COMPLETE +MGMT_JOB_ENGINE.DELETE_JOB_EXECUTION +MGMT_JOB_ENGINE.DELETE_JOB_EXECUTIONS +MGMT_JOB_ENGINE.DELETE_JOB_QUEUE +MGMT_JOB_ENGINE.DELETE_JOB_RUN +MGMT_JOB_ENGINE.DELETE_NOREF_CAS +MGMT_JOB_ENGINE.DELETE_TEMPLATE_CAS +MGMT_JOB_ENGINE.DROP_PURGE_POLICY +MGMT_JOB_ENGINE.DROP_USER_CA +MGMT_JOB_ENGINE.DROP_USER_JOBS +MGMT_JOB_ENGINE.EDIT_JOB +MGMT_JOB_ENGINE.ENABLE_JOB_QUEUE +MGMT_JOB_ENGINE.ENCRYPT_SCALAR +MGMT_JOB_ENGINE.ENCRYPT_VECTOR +MGMT_JOB_ENGINE.EXECUTE_PARAM_SOURCES +MGMT_JOB_ENGINE.EXTRACT_NESTED_JOB_TARGETS +MGMT_JOB_ENGINE.FIXING_FLATTEN_STEPS +MGMT_JOB_ENGINE.FIX_FLATTEN_STEPS +MGMT_JOB_ENGINE.FORCE_STOP_ALL_EXECUTIONS +MGMT_JOB_ENGINE.GENERATE_LOCK_GUID +MGMT_JOB_ENGINE.GET_CA_ID +MGMT_JOB_ENGINE.GET_CURRENT_SCHEDULE +MGMT_JOB_ENGINE.GET_EMD_URL +MGMT_JOB_ENGINE.GET_ERROR_MESSAGE +MGMT_JOB_ENGINE.GET_IMMEDIATE_SCHEDULE_RECORD +MGMT_JOB_ENGINE.GET_JOB_CREDENTIAL_METADATA +MGMT_JOB_ENGINE.GET_JOB_ID +MGMT_JOB_ENGINE.GET_JOB_SCHEDULE_RECORD +MGMT_JOB_ENGINE.GET_JOB_STEP_PARAMS +MGMT_JOB_ENGINE.GET_JOB_TYPE_ID +MGMT_JOB_ENGINE.GET_JOB_TYPE_METADATA +MGMT_JOB_ENGINE.GET_LARGE_PARAM +MGMT_JOB_ENGINE.GET_MAX_VERSIONS +MGMT_JOB_ENGINE.GET_MULTI_TASK_JOB_INFO +MGMT_JOB_ENGINE.GET_MULTI_TASK_JOB_TYPE_INFO +MGMT_JOB_ENGINE.GET_NESTED_JOB_TARGETS +MGMT_JOB_ENGINE.GET_NEXT_EXECUTION_TIME +MGMT_JOB_ENGINE.GET_OUTPUT +MGMT_JOB_ENGINE.GET_SCHEDULED_STEPS +MGMT_JOB_ENGINE.GET_SINGLE_TARGET_GUID +MGMT_JOB_ENGINE.GET_STATUS_2_FROM_STATUS +MGMT_JOB_ENGINE.GET_STATUS_2_RANGE +MGMT_JOB_ENGINE.GET_STEP_TRUST +MGMT_JOB_ENGINE.GET_TARGET_TYPE_DATA +MGMT_JOB_ENGINE.GET_USER_CA +MGMT_JOB_ENGINE.GET_USER_JOBS +MGMT_JOB_ENGINE.GROUP_CHANGE_CALLBACK +MGMT_JOB_ENGINE.HANDLE_DISPATCHER_DEATH +MGMT_JOB_ENGINE.HANDLE_EMD_STATE_CHANGE +MGMT_JOB_ENGINE.HANDLE_HTTP_SESSION_EXPIRY +MGMT_JOB_ENGINE.HANDLE_MEMBERSHIP_CHANGE +MGMT_JOB_ENGINE.HANDLE_STARTUP_NOTIFICATION +MGMT_JOB_ENGINE.HANDLE_TARGET_POST_DELETE +MGMT_JOB_ENGINE.HANDLE_TARGET_PRE_DELETE +MGMT_JOB_ENGINE.INCREMENT_CA_REF_COUNT +MGMT_JOB_ENGINE.INSERT_CA_EXECUTION +MGMT_JOB_ENGINE.INSERT_CLUSTER_TARGET_TYPES +MGMT_JOB_ENGINE.INSERT_EXECUTION +MGMT_JOB_ENGINE.INSERT_EXT_TARGET +MGMT_JOB_ENGINE.INSERT_HOST_CRED_TARGET_TYPES +MGMT_JOB_ENGINE.INSERT_JOB +MGMT_JOB_ENGINE.INSERT_SINGLE_EXEC_CA_TARGETS +MGMT_JOB_ENGINE.INSERT_TARGET_LIST +MGMT_JOB_ENGINE.IS_EDITABLE +MGMT_JOB_ENGINE.IS_NESTED_FLATTEN_CANDIDATE +MGMT_JOB_ENGINE.IS_RESTARTABLE +MGMT_JOB_ENGINE.IS_SINGLE_TARGET_JOB +MGMT_JOB_ENGINE.IS_SINGLE_TARGET_JOB_TYPE +MGMT_JOB_ENGINE.IS_SINGLE_TARGET_JOB_TYPE_ID +MGMT_JOB_ENGINE.IS_SUSPENDABLE +MGMT_JOB_ENGINE.LOCK_CAS_FOR_OBJECT +MGMT_JOB_ENGINE.OVERRIDE_CREDS_ADDED +MGMT_JOB_ENGINE.OVERRIDE_CREDS_DELETED +MGMT_JOB_ENGINE.PROCESS_EMD_QUEUE_ENTRIES +MGMT_JOB_ENGINE.PROCESS_FLATTEN_TARGETS_STEP +MGMT_JOB_ENGINE.PROCESS_RETRY_CALLBACKS +MGMT_JOB_ENGINE.PROCESS_WAIT_STEP +MGMT_JOB_ENGINE.RAISE_EVENT +MGMT_JOB_ENGINE.REASSIGN_USER_CA +MGMT_JOB_ENGINE.REASSIGN_USER_JOBS +MGMT_JOB_ENGINE.REGISTER_PURGE_POLICY +MGMT_JOB_ENGINE.RELEASE_EXECUTION_LOCKS +MGMT_JOB_ENGINE.RESCHEDULE_ON_NEW_JOBTYPE_VER +MGMT_JOB_ENGINE.RESET_CA_REFCTR +MGMT_JOB_ENGINE.RESET_DISPATCHER_ID +MGMT_JOB_ENGINE.RESET_PARAMS +MGMT_JOB_ENGINE.RESTART_JOB_EXECUTION +MGMT_JOB_ENGINE.RESUME_CRED_EXECS +MGMT_JOB_ENGINE.RESUME_JOB +MGMT_JOB_ENGINE.RESUME_JOB_EXECUTION +MGMT_JOB_ENGINE.SCHEDULE +MGMT_JOB_ENGINE.SCHEDULE_EXECUTION +MGMT_JOB_ENGINE.SET_STEP_TARGETS +MGMT_JOB_ENGINE.SET_STEP_TARGETS_AUTO +MGMT_JOB_ENGINE.SET_TARGET_METRIC_AGENT_FIXIT +MGMT_JOB_ENGINE.SET_TARGET_METRIC_ASSOC_CA +MGMT_JOB_ENGINE.SET_TARGET_POLICY_ASSOC_CA +MGMT_JOB_ENGINE.SET_TEMPLATE_METRIC_ASSOC_CA +MGMT_JOB_ENGINE.SET_TEMPLATE_METRIC_FIXIT +MGMT_JOB_ENGINE.SET_TEMPLATE_POLICY_ASSOC_CA +MGMT_JOB_ENGINE.STOP_ALL_EXECUTIONS +MGMT_JOB_ENGINE.STOP_ALL_EXECUTIONS_WITH_ID +MGMT_JOB_ENGINE.STOP_EXECUTION +MGMT_JOB_ENGINE.STOP_EXECUTIONS +MGMT_JOB_ENGINE.STOP_JOB_RUN +MGMT_JOB_ENGINE.SUBSTITUTE_PARAMS +MGMT_JOB_ENGINE.SUSPEND_CRED_EXECS +MGMT_JOB_ENGINE.SUSPEND_JOB +MGMT_JOB_ENGINE.SUSPEND_JOB_EXECUTION +MGMT_JOB_ENGINE.SUSPEND_JOB_EXECUTION_AUTO +MGMT_JOB_ENGINE.SUSPEND_JOB_EXECUTION_ON_EVENT +MGMT_JOB_ENGINE.SUSPEND_JOB_EXEC_ON_EVENT_AUTO +MGMT_JOB_ENGINE.SYSDATE_TZRGN +MGMT_JOB_ENGINE.SYSDATE_UTC +MGMT_JOB_ENGINE.TARGET_CREDS_ADDED +MGMT_JOB_ENGINE.TARGET_CREDS_DELETED +MGMT_JOB_ENGINE.TRIGGER_CA_FOR_VIOLATION +MGMT_JOB_ENGINE.UPDATE_ASYNC_OP_STATUS +MGMT_JOB_ENGINE.UPDATE_BULK_STEP_STATUS +MGMT_JOB_ENGINE.UPDATE_COMMAND_BLOCK_STATUS +MGMT_JOB_ENGINE.UPDATE_JOB_PARAMETERS +MGMT_JOB_ENGINE.UPDATE_JOB_PARAMETERS_AUTO +MGMT_JOB_ENGINE.UPDATE_JOB_TYPE_NLS_INFO +MGMT_JOB_ENGINE.UPDATE_MAX_VERSIONS +MGMT_JOB_ENGINE.UPDATE_REFCOUNT +MGMT_JOB_ENGINE.UPDATE_SEQUENCE_NUMBER +MGMT_JOB_ENGINE.UPDATE_STEP_STATUS +MGMT_JOB_ENGINE.UPDATE_STEP_STATUS_NOLOCK +MGMT_JOB_ENGINE.UPDATE_UNSCHEDULED_STEPS +MGMT_JOB_ENGINE.UPSERT_JOB_TARGET_LISTS +MGMT_JOB_ENGINE.VALIDATE_JOB_TYPE +MGMT_JOB_ENGINE.VALIDATE_SCHEDULE +MGMT_JOB_ENGINE.WRITE_STEP_ERROR_MESSAGE +MGMT_JOB_ENGINE.WRITE_STEP_OUTPUT +MGMT_JOB_ENGINE.WRITE_STEP_OUTPUT_AUTO +MGMT_JOB_EXEC_INSERT. +MGMT_JOB_EXEC_UPDATE. +MGMT_JOB_PARAM_DELETE. +MGMT_JOB_PARAM_INSERT. +MGMT_JOB_PARAM_UPDATE_LARGE. +MGMT_JOB_UI. +MGMT_JOB_UI.ALLOW_STEP_KILL +MGMT_JOB_UI.CHANGE_MULTITASK_TARGET_TYPE +MGMT_JOB_UI.CHECK_AGGREGATE_MEMBERSHIP +MGMT_JOB_UI.COMPUTE_JOBTYPE_CATEGORIES +MGMT_JOB_UI.CONCAT_STRING_ARRAY +MGMT_JOB_UI.DO_ACTIVE_JOB_VALIDATION +MGMT_JOB_UI.GET_AGGREGATE_JOB_ACTIVITY +MGMT_JOB_UI.GET_CA_LIBRARY_DATA +MGMT_JOB_UI.GET_CA_SELECT_FROM_LIB_DATA +MGMT_JOB_UI.GET_CUSTOM_DATA +MGMT_JOB_UI.GET_DISPLAY_URI +MGMT_JOB_UI.GET_EXECUTION_COUNT +MGMT_JOB_UI.GET_EXECUTION_DETAILS +MGMT_JOB_UI.GET_FLATTENED_AGGR_TARGETS +MGMT_JOB_UI.GET_INITIAL_JOB_TARGET +MGMT_JOB_UI.GET_JOB_DETAILS +MGMT_JOB_UI.GET_JOB_INFO +MGMT_JOB_UI.GET_JOB_NUM +MGMT_JOB_UI.GET_JOB_TYPES_FOR_TARGET_TYPE +MGMT_JOB_UI.GET_LIBRARY_DATA +MGMT_JOB_UI.GET_META_GROUP_CLUSTER_INFO +MGMT_JOB_UI.GET_MULTITASK_JOB_INFO +MGMT_JOB_UI.GET_OUTPUT +MGMT_JOB_UI.GET_PARAM_CREDS_INFO +MGMT_JOB_UI.GET_PREFERRED_CREDS_NOT_SET +MGMT_JOB_UI.GET_RESULTS_SCHEDULE +MGMT_JOB_UI.GET_RUN_DETAILS +MGMT_JOB_UI.GET_RUN_STATUS +MGMT_JOB_UI.GET_SINGLE_EXEC_TASK_INFO +MGMT_JOB_UI.GET_SINGLE_STEP_JOB_DETAILS +MGMT_JOB_UI.GET_STATUS_ROLLUP_COUNTS +MGMT_JOB_UI.GET_STEP_KILL_DETAILS +MGMT_JOB_UI.GET_STEP_TARGETS +MGMT_JOB_UI.GET_STEP_TARGETS_STR +MGMT_JOB_UI.GET_SUBMITTED_TARGETS +MGMT_JOB_UI.GET_TARGETS_PREFCREDS_NOT_SET +MGMT_JOB_UI.GET_TARGET_BROKEN_CREDS +MGMT_JOB_UI.GET_TARGET_GROUP_BROKEN_CREDS +MGMT_JOB_UI.GET_TASKS_METADATA +MGMT_JOB_UI.GET_TASK_BREADCRUMBS +MGMT_JOB_UI.GET_TASK_DETAILS +MGMT_JOB_UI.GET_TGT_TYPES_WITH_HOST_CREDS +MGMT_JOB_UI.GET_VISIBLE_PARAMS +MGMT_JOB_UI.IS_AGGREGATE_TYPE +MGMT_JOB_UI.PREF_CREDS_SET_TARGETS +MGMT_JOB_UI.USES_DEFAULT_CREATE_UI +MGMT_JOB_UI_EXECS. +MGMT_JOB_UI_EXECS.OPEN_JOB_EXECUTIONS +MGMT_JOB_UI_RUNS. +MGMT_JOB_UI_RUNS.COMPUTE_CATEGORY_FROM_TYPE +MGMT_JOB_UI_RUNS.OPEN_JOBRUNS +MGMT_LICENSE. +MGMT_LICENSE.GRANT_LICENSE_NO_VALIDATION +MGMT_LICENSE.GRANT_LICENSE_WITH_VALIDATION +MGMT_LICENSE.REVOKE_LICENSE_NO_VALIDATION +MGMT_LICENSE.REVOKE_LICENSE_WITH_VALIDATION +MGMT_LOADER. +MGMT_LOADER.DEREGISTER_POST_LOAD_CALLBACK +MGMT_LOADER.DEREGISTER_PRE_LOAD_CALLBACK +MGMT_LOADER.DEREG_CLUSTER_CRS_EVENT_CBK +MGMT_LOADER.REGISTER_CLUSTER_CRS_EVENT_CBK +MGMT_LOADER.REGISTER_POST_LOAD_CALLBACK +MGMT_LOADER.REGISTER_PRE_LOAD_CALLBACK +MGMT_LOCK_UTIL. +MGMT_LOCK_UTIL.GET_EXCLUSIVE_LOCK +MGMT_LOCK_UTIL.GET_LOCK +MGMT_LOCK_UTIL.GET_SHARE_LOCK +MGMT_LOCK_UTIL.RELEASE_LOCK +MGMT_LOG. +MGMT_LOG.LOG_ERROR +MGMT_LOG.LOG_PERFORMANCE +MGMT_LOG.REGISTER_LOGGING_MODULE +MGMT_LOGIN_ASSISTANT. +MGMT_LOGIN_ASSISTANT.CONFIGURE_ARU_AUTHENTICATION +MGMT_LOGIN_ASSISTANT.GET_ARU_PARAMETERS +MGMT_LOGIN_ASSISTANT.LOGIN_ASSISTANT_ORDER +MGMT_LOGIN_ASSISTANT.REGISTER_LOGIN_ASSISTANT +MGMT_MEMBER_ASSOC_REC.NEW +MGMT_MESSAGE. +MGMT_MESSAGE.GET_MESSAGE +MGMT_METHOD +MGMT_METRIC. +MGMT_METRIC.CATEGORIZE_METRIC +MGMT_METRIC.CATEGORIZE_POLICY +MGMT_METRIC.CREATE_CATEGORIES +MGMT_METRIC.CREATE_CATEGORY +MGMT_METRIC.CREATE_CATEGORY_CLASS +MGMT_METRIC.CREATE_METRIC +MGMT_METRIC.DELETE_CATEGORY +MGMT_METRIC.DELETE_CATEGORY_CLASS +MGMT_METRIC.DELETE_METRIC +MGMT_METRIC.DELETE_METRIC_METADATA +MGMT_METRIC.GENERATE_METRIC_GUID +MGMT_METRIC.GET_METRIC_GUID +MGMT_METRIC.GET_METRIC_GUID_FOR_PROPS +MGMT_METRIC.GET_METRIC_GUID_FOR_TARGET +MGMT_METRIC.MODIFY_METRIC +MGMT_METRIC.REMOVE_METRIC_CATEGORIES +MGMT_METRIC.REMOVE_POLICY_CATEGORIES +MGMT_METRIC.SET_END_TYPE_META_VER +MGMT_METRIC_COLUMN_OBJ.NEW +MGMT_METRIC_DESC.NEW +MGMT_METRIC_DETAILS.NEW +MGMT_METRIC_EXTERNAL. +MGMT_METRIC_EXTERNAL.CREATE_GENERIC_METRIC +MGMT_METRIC_EXTERNAL.CREATE_METRIC +MGMT_METRIC_EXTERNAL.GET_TARGET_BLACKOUT_WINDOWS +MGMT_METRIC_HELPER. +MGMT_METRIC_HELPER.COPY_VALUE +MGMT_METRIC_HELPER.EVAL_AVG_VALUE +MGMT_METRIC_HELPER.EVAL_MAX_VALUE +MGMT_METRIC_HELPER.EVAL_MIN_VALUE +MGMT_METRIC_HELPER.EVAL_STDDEV_VALUE +MGMT_METRIC_HELPER.EVAL_SUM_VALUE +MGMT_METRIC_HELPER.WRAPPER_EVAL_FUNC +MGMT_METRIC_INSTANCE.NEW +MGMT_METRIC_NAME_OBJ.NEW +MGMT_METRIC_VALUE_OBJ.INDEX_POSITION +MGMT_METRIC_VALUE_OBJ.METRIC_VALUE +MGMT_METRIC_VALUE_OBJ.NEW +MGMT_MNTR_CA.NEW +MGMT_MNTR_COLLECTION.NEW +MGMT_MNTR_METRIC.NEW +MGMT_MNTR_POLICY.NEW +MGMT_MONITORING. +MGMT_MONITORING.CREATE_MNTR_SET_COPY +MGMT_MONITORING.DELETE_MNTR_SET_COPY +MGMT_MONITORING.DELETE_TARGET_METRIC_CONFIG +MGMT_MONITORING.DELETE_TARGET_POLICY_CONFIG +MGMT_MONITORING.GENERATE_MNTR_SET_COPY_GUID +MGMT_MONITORING.GET_MNTR_SET_COPY_GUID +MGMT_MONITORING.GET_MNTR_SET_COPY_SETTINGS +MGMT_MONITORING.GET_TARGET_SETTINGS +MGMT_MONITORING.SAVE_SETTINGS +MGMT_MONITORING.SAVE_TARGET_METRIC_CONFIG +MGMT_MONITORING.SAVE_TARGET_POLICY_CONFIG +MGMT_MONITORING.SET_THRESHOLD +MGMT_MP. +MGMT_MP.AGENT_DELETED +MGMT_MP.DELETE_AGENT_RECORDS +MGMT_MP.GENERATE_MP_GUID +MGMT_MP.HANDLE_AGENT_PORT_CHANGE +MGMT_MP_HOMEPAGE. +MGMT_MP_HOMEPAGE.ADD_REPORT +MGMT_MP_HOMEPAGE.DELETE_ALL_REPORTS +MGMT_MP_HOMEPAGE.DELETE_REPORT +MGMT_MP_HOMEPAGE.GET_REPORTS +MGMT_NAMEVALUE_OBJ.NEW +MGMT_NESTED_JOB_CREDS_DEL. +MGMT_NOTIFICATION. +MGMT_NOTIFICATION.ACKNOWLEDGE_ALERT +MGMT_NOTIFICATION.ADD_DEVICE_TO_RULE +MGMT_NOTIFICATION.ADD_JAVA_DEVICE +MGMT_NOTIFICATION.DELETE_DEVICE +MGMT_NOTIFICATION.DELETE_DEVICE_FROM_RULE +MGMT_NOTIFICATION.EDIT_JAVA_DEVICE +MGMT_NOTIFICATION.GET_GLOBAL_REPEAT_SETTINGS +MGMT_NOTIFICATION.SET_GLOBAL_REPEAT_SETTINGS +MGMT_NOTIFICATION.SET_RULE_REPEAT +MGMT_OH_PATCHING_UTIL. +MGMT_OH_PATCHING_UTIL.FILTER_HOMES_CREDS_ON_HOST +MGMT_OH_PATCHING_UTIL.FILTER_HOME_TARGETS +MGMT_OH_PATCHING_UTIL.FUNCTION_GET_LISTENERS +MGMT_OH_PATCHING_UTIL.FUNCTION_GET_SIDS +MGMT_P1 +MGMT_P2 +MGMT_P3 +MGMT_P4 +MGMT_P5 +MGMT_P6 +MGMT_P7 +MGMT_P8 +MGMT_PAF_AQ. +MGMT_PAF_AQ.DEQUEUE_REQUEST +MGMT_PAF_AQ.DEQUEUE_RESPONSE +MGMT_PAF_AQ.ENQUEUE_REQUEST +MGMT_PAF_AQ.ENQUEUE_RESPONSE +MGMT_PAF_AQ.EXECUTE_SERVER_CMD +MGMT_PAF_INSTANCES_TR. +MGMT_PAF_JOB_UTIL. +MGMT_PAF_JOB_UTIL.UPDATE_PAF_JOB +MGMT_PAF_NOTIF. +MGMT_PAF_NOTIF.JOB_TYPE_REG_WITH_NOTIF +MGMT_PAF_NOTIF.NOTIFY_PAF +MGMT_PAF_NOTIF.NOTIF_RULE_EXISTS +MGMT_PAF_NOTIF.PAF_STATUS_NOTIF_RULE_EXISTS +MGMT_PAF_NOTIF.PLSQL_DEVICE_EXISTS +MGMT_PAF_NOTIF.PLSQL_DEVICE_REG_WITH_NOTIF +MGMT_PAF_NOTIF.REGISTER_PAF_STATUS_NOTIF_RULE +MGMT_PAF_NOTIF.REG_ALL_JOB_TYPES_WITH_NOTIF +MGMT_PAF_NOTIF.REG_ALL_TGT_TYPES_WITH_NOTIF +MGMT_PAF_NOTIF.REG_JOB_TYPE_WITH_NOTIF +MGMT_PAF_NOTIF.REG_NOTIF +MGMT_PAF_NOTIF.REG_NOTIF_RULE +MGMT_PAF_NOTIF.REG_PLSQL_DEVICE +MGMT_PAF_NOTIF.REG_PLSQL_DEVICE_WITH_NOTIF +MGMT_PAF_NOTIF.REG_TGT_JOB_TYPE_WITH_NOTIF +MGMT_PAF_NOTIF.REG_TGT_TYPE_WITH_NOTIF +MGMT_PAF_NOTIF.TGT_JOB_TYPE_REG_WITH_NOTIF +MGMT_PAF_NOTIF.TGT_TYPE_REG_WITH_NOTIF +MGMT_PAF_NOTIF.UNREG_NOTIF +MGMT_PAF_NOTIF.UNREG_NOTIF_RULE +MGMT_PAF_NOTIF.UNREG_PAF_STATUS_NOTIF_RULE +MGMT_PAF_NOTIF.UNREG_PLSQL_DEVICE +MGMT_PAF_NOTIF_TR. +MGMT_PAF_PROCEDURES_TR. +MGMT_PAF_UTL. +MGMT_PAF_UTL.DAEMON_STATUS +MGMT_PAF_UTL.DECRYPT_STRING +MGMT_PAF_UTL.ENCRYPT_STRING +MGMT_PAF_UTL.REGISTER_APPLICATION +MGMT_PAF_UTL.REGISTER_COMP_JOBTYPE_MAPPING +MGMT_PAF_UTL.REGISTER_JOBTYPE +MGMT_PAF_UTL.REGISTER_JOBTYPE_PARAM +MGMT_PAF_UTL.REGISTER_JOBTYPE_PARAM_GROUP +MGMT_PAF_UTL.START_DAEMON +MGMT_PAF_UTL.STOP_DAEMON +MGMT_PAF_UTL.UPDATE_RUNTIME_DATA +MGMT_PAGE_CUSTMZN. +MGMT_PAGE_CUSTMZN.ADD_PAGE_CUSTOMZN_CONDITIONS +MGMT_PAGE_CUSTMZN.REMOVE_PAGE_CUSTOMZN_CONDNS +MGMT_PDP_COLUMN_META.NEW +MGMT_PDP_META.NEW +MGMT_PDP_PARAM_META.NEW +MGMT_PDP_SETTING_META.NEW +MGMT_POLICY. +MGMT_POLICY.ADD_TARGET_POLICY_ASSOC +MGMT_POLICY.ADD_TEMPLATE_POLICY_ASSOC +MGMT_POLICY.AUTO_ENABLE_EXISTING_TARGETS +MGMT_POLICY.CREATE_POLICY +MGMT_POLICY.DELETE_POLICY +MGMT_POLICY.DELETE_POLICY_METADATA +MGMT_POLICY.DISABLE_TARGET_POLICY_ASSOC +MGMT_POLICY.DISABLE_TEMPLATE_POLICY_ASSOC +MGMT_POLICY.ENABLE_TARGET_POLICY_ASSOC +MGMT_POLICY.ENABLE_TEMPLATE_POLICY_ASSOC +MGMT_POLICY.GENERATE_CS_POLICY_NAME +MGMT_POLICY.GENERATE_POLICY_GUID +MGMT_POLICY.GET_POLICY_GUID +MGMT_POLICY.MODIFY_POLICY +MGMT_POLICY.REMOVE_TARGET_POLICY_ASSOC +MGMT_POLICY.REMOVE_TEMPLATE_POLICY_ASSOC +MGMT_POLICY.SET_END_TYPE_META_VER +MGMT_POLICY.SET_TARGET_METRIC_CA +MGMT_POLICY.SET_TARGET_METRIC_FIXIT_JOB +MGMT_POLICY.SET_TARGET_POLICY_CA +MGMT_POLICY.SET_TEMPLATE_METRIC_CA +MGMT_POLICY.SET_TEMPLATE_METRIC_FIXIT_JOB +MGMT_POLICY.SET_TEMPLATE_POLICY_CA +MGMT_POLICY_KEY_COL_COND.NEW +MGMT_POLICY_KEY_VAL.NEW +MGMT_POLICY_PARAM_DEF.NEW +MGMT_POLICY_PARAM_VAL.NEW +MGMT_PREFERENCES. +MGMT_PREFERENCES.ADD_EMAIL_ADDRESSES +MGMT_PREFERENCES.CREATE_NOTIFICATION_RULE +MGMT_PREFERENCES.CREATE_NOTIFICATION_SCHEDULE +MGMT_PREFERENCES.DELETE_NOTIFICATION_RULE +MGMT_PREFERENCES.DELETE_NOTIFICATION_RULE_PRIV +MGMT_PREFERENCES.DELETE_PLSQL_DEVICE_DATA +MGMT_PREFERENCES.DELETE_PROGRAM_DEVICE_DATA +MGMT_PREFERENCES.DELETE_SNMP_DEVICE_DATA +MGMT_PREFERENCES.EDIT_PLSQL_DEVICE +MGMT_PREFERENCES.EDIT_PROGRAM_DEVICE +MGMT_PREFERENCES.EDIT_SNMP_DEVICE +MGMT_PREFERENCES.GET_ALL_KEY_VALUES +MGMT_PREFERENCES.GET_ASSIGN_DEV_TO_RULES_DATA +MGMT_PREFERENCES.GET_JAVA_DEVICE_DATA +MGMT_PREFERENCES.GET_METRICS_FOR_RULE +MGMT_PREFERENCES.GET_NOTIFICATION_RULES +MGMT_PREFERENCES.GET_NOTIFICATION_RULE_DETAILS +MGMT_PREFERENCES.GET_NOTIF_DEVICES_DATA +MGMT_PREFERENCES.GET_PLSQL_DEVICE_DATA +MGMT_PREFERENCES.GET_PROGRAM_DEVICE_DATA +MGMT_PREFERENCES.GET_RULE_CONFIG_DEVICES_DATA +MGMT_PREFERENCES.GET_RULE_DEVICES_DATA +MGMT_PREFERENCES.GET_RULE_TARGET_TYPES +MGMT_PREFERENCES.GET_SCHEDULE_DEFINATION +MGMT_PREFERENCES.GET_SNMP_DEVICE_DATA +MGMT_PREFERENCES.GET_USER_EMAIL +MGMT_PREFERENCES.GET_USER_PREF_EMAIL +MGMT_PREFERENCES.SUBSCRIBE_TO_RULES +MGMT_PREFERENCES.TEST_PLSQL_DEVICE +MGMT_PREFERENCES.TRY_UPDATE_USER_PREF +MGMT_PREFERENCES.UPDATE_ASSIGN_DATA +MGMT_PREFERENCES.UPDATE_MAIL_GATEWAY_DATA +MGMT_PREFERENCES.UPDATE_NOTIFICATION_RULE +MGMT_PREFERENCES.UPDATE_NOTIFICATION_RULE_PRIV +MGMT_PREFERENCES.UPDATE_RULE_DEVICES_DATA +MGMT_PREFERENCES.UPDATE_RULE_OVERVIEW_DATA +MGMT_PREFERENCES.UPDATE_USER_PREF_DATA +MGMT_PROPERTIES. +MGMT_PROPERTIES.ADD_PROPERTY_CHANGE_CALLBACK +MGMT_PROPERTIES.ADD_SYS_TARGET_PROPERTY +MGMT_PROPERTIES.ADD_TARGET_PROPERTY +MGMT_PROPERTIES.ADD_USER_TARGET_PROPERTY +MGMT_PROPERTIES.DEL_PROPERTY_CHANGE_CALLBACK +MGMT_PROPERTIES.EXEC_PROPERTY_CHANGE_CALLBACKS +MGMT_PROPERTIES.HANDLE_MGMT_TGT_PROPS +MGMT_PROPERTIES.PROPAGATE_TARGET_PROPERTIES +MGMT_PROPERTIES.SET_TARGET_PROPERTIES +MGMT_PROPERTIES.SET_TARGET_PROPERTY +MGMT_PROVISION. +MGMT_PROVISION.CALL_PROVISION_JOB +MGMT_PROVISION.INSERT_PROVISION_ASSIGN_TABLE +MGMT_PROVISION.INSERT_PROVISION_CLUSTER_TABLE +MGMT_PROVISION.INSERT_PROVISION_HISTORY_TABLE +MGMT_PROVISION.INSERT_PROVISION_HW_TABLE +MGMT_PROVISION.INSERT_PROVISION_OP_TABLE +MGMT_PROVISION.INSERT_PROVISION_SI_TABLE +MGMT_PROVISION.INSERT_PROV_DEFAULT_IMG_TABLE +MGMT_PROVISION.PRELOAD_CALLBACK +MGMT_PROVISION.PURGE_PROV_COLLECTION +MGMT_PROV_JOB_UTIL. +MGMT_PROV_JOB_UTIL.UPDATE_PROV_JOB +MGMT_RAC. +MGMT_RAC.CLUSTER_10204_UPGR_POST_PROC +MGMT_RAC.HANDLE_CLUSTER_TGTTYPE_ADD +MGMT_RCA. +MGMT_RCA.ADD_RCA_EVENT +MGMT_RCA.ASSOCIATE_EVENT_WITH_SEVERITY +MGMT_RCA.CHECK_KEYS_AVAILABILITY +MGMT_RCA.CHECK_MESSAGE +MGMT_RCA.CHECK_TARGET_PRIVIELGES +MGMT_RCA.CHECK_THRESHOLD_AVAILABILTY +MGMT_RCA.CHECK_USER_PERMISSIONS +MGMT_RCA.CONCAT_KEYS +MGMT_RCA.CREATE_FAULT_TEST +MGMT_RCA.DBMSJOB_EXTENDED_SQL_TRACE_ON +MGMT_RCA.DELETE_FAULT_TEST +MGMT_RCA.DELETE_RCA_FAULT_TEST +MGMT_RCA.DELETE_RCA_FOR_SEVERITY +MGMT_RCA.DELETE_RCA_METRIC +MGMT_RCA.DELETE_SEVERITY_RCA +MGMT_RCA.DELETE_TARGET_ASSOC_RCA +MGMT_RCA.DELETE_TARGET_RCA +MGMT_RCA.GET_AFFECTED_SERVICES_BYMETRIC +MGMT_RCA.GET_AFFECTED_SERVICES_BYNAME +MGMT_RCA.GET_AFFECTED_SERVICES_BYSEV +MGMT_RCA.GET_ALERT_DETAILS +MGMT_RCA.GET_ALERT_SUMMARY +MGMT_RCA.GET_ALL_METRICS +MGMT_RCA.GET_ALL_METRIC_KEYS +MGMT_RCA.GET_AVAILABILITY +MGMT_RCA.GET_COMPOSITE_KEYS +MGMT_RCA.GET_FAILURE_CAUSES +MGMT_RCA.GET_FAULT_TESTS +MGMT_RCA.GET_INTERACTIVE_FLAG +MGMT_RCA.GET_INTERACTIVE_TEST +MGMT_RCA.GET_METRICS_FOR_TYPE +MGMT_RCA.GET_METRIC_DETAIL +MGMT_RCA.GET_METRIC_DETAIL_FOR_EDIT +MGMT_RCA.GET_METRIC_TYPES +MGMT_RCA.GET_POSSIBLE_CAUSES_DETAIL +MGMT_RCA.GET_RCA_DETAILS +MGMT_RCA.GET_RCA_HISTORY +MGMT_RCA.GET_RCA_NOTIF_CONTENT +MGMT_RCA.GET_RCA_RESULT_SET +MGMT_RCA.GET_SCOPE_GUID +MGMT_RCA.GET_SERVICE_AVAILABILITY +MGMT_RCA.GET_SEVERITY +MGMT_RCA.GET_SEV_SUMMARY +MGMT_RCA.GET_SVCS_AFF_COUNT_BYNAME +MGMT_RCA.GET_SVCS_AFF_COUNT_BYSEV +MGMT_RCA.GET_TEST_GUID +MGMT_RCA.GET_THRESHOLD +MGMT_RCA.HANDLE_ASSOC_DELETE +MGMT_RCA.HANDLE_TARGET_DELETE +MGMT_RCA.IS_TEST_BASED_AVAIL +MGMT_RCA.PEEK_MESSAGE +MGMT_RCA.PURGE_RCA_RESULTS +MGMT_RCA.QUEUE_CLEAR_CACHE +MGMT_RCA.QUEUE_RCA_TASK +MGMT_RCA.REMOVE_TASK +MGMT_RCA.REMOVE_TASK_BY_TARGET +MGMT_RCA.SET_INTERACTIVE_TEST +MGMT_RCA.SET_RCA_FAULT_TEST +MGMT_RCA.STORE_RCA_TRACE +MGMT_RCA.VALIDATE_TARGET_AVAIL_METRIC +MGMT_REC. +MGMT_REC.GETSTARTTIMEOFFIRSTINCHAIN +MGMT_REC.RETRY_BACKUP_JOB +MGMT_REC.SUBMIT_OUT_OF_BOX_BACKUP +MGMT_REC.UPDATE_MGMT_HA_BACKUP +MGMT_REC.UPDATE_MGMT_HA_MTTR +MGMT_RESPONSE. +MGMT_RESPONSE.CALC_METRIC +MGMT_RESPONSE.CAPTURE_STATS +MGMT_RESPONSE.CREATE_BASELINE +MGMT_RESPONSE.DELETE_BASELINE +MGMT_RESPONSE.DELETE_SQL_FROM_BASELINE +MGMT_RESPONSE.GETDURATION +MGMT_RESPONSE.GETVERSION +MGMT_RESPONSE.GET_LATEST_CURS +MGMT_RESPONSE.GET_METRIC_CURS +MGMT_RESPONSE.GET_TIME_STATS +MGMT_RESPONSE.PURGE_OLD_HISTORY +MGMT_RESPONSE.PURGE_OLD_STATS +MGMT_RESPONSE.RESET_CAPTURE_STATS +MGMT_RESPONSE.RESET_SNAPSHOT_STATS +MGMT_RESPONSE.SAVE_TO_HISTORY +MGMT_RESPONSE.TAKE_V$SQL_SNAPSHOT +MGMT_RT_METRICS_RAW_TR. +MGMT_RT_REGION_MAPPING_TR. +MGMT_SERVICE. +MGMT_SERVICE.CREATE_AGGREGATE_SERVICE +MGMT_SERVICE.CREATE_SERVICE +MGMT_SERVICE.GET_AGGREGATE_SERVICE_INFO +MGMT_SERVICE.GET_AVAIL_EVAL_FUNC +MGMT_SERVICE.GET_BUSINESS_METRICS +MGMT_SERVICE.GET_HOMEPAGE_PERF_CHART +MGMT_SERVICE.GET_HOMEPAGE_USAGE_CHART +MGMT_SERVICE.GET_PERFORMANCE_METRICS +MGMT_SERVICE.GET_RESPONSE_METRICS +MGMT_SERVICE.GET_SERVICE_GUID +MGMT_SERVICE.GET_SVC_AVAIL_COMP_METHOD +MGMT_SERVICE.GET_SYSTEM +MGMT_SERVICE.GET_USAGE_METRICS +MGMT_SERVICE.IMPLEMENTS_SERVICE_INTERFACE +MGMT_SERVICE.IS_AGGREGATE_SERVICE +MGMT_SERVICE.MODIFY_AGGREGATE_SERVICE +MGMT_SERVICE.REMOVE_SYSTEM +MGMT_SERVICE.REMOVE_SYSTEM_BASED_AVAIL +MGMT_SERVICE.REMOVE_TEST_BASED_AVAIL +MGMT_SERVICE.SETUP_SYSTEM_BASED_AVAIL +MGMT_SERVICE.SETUP_TEST_BASED_AVAIL +MGMT_SERVICE.SET_HOMEPAGE_PERF_CHART +MGMT_SERVICE.SET_HOMEPAGE_USAGE_CHART +MGMT_SERVICE.SET_SERVICE_AVAILABILITY +MGMT_SERVICE.SET_SYSTEM +MGMT_SERVICE_LEVEL. +MGMT_SERVICE_LEVEL.GET_SERVICE_LEVEL_VALUE +MGMT_SEVERITY_HELPER. +MGMT_SEVERITY_HELPER.ANALYZE_SEVERITY_DETAILS +MGMT_SEVERITY_HELPER.ANALYZE_STATUS_DETAILS +MGMT_SEVERITY_HELPER.AND_AVAIL_EVAL_PROC +MGMT_SEVERITY_HELPER.AND_SEVERITY_EVAL_PROC +MGMT_SEVERITY_HELPER.OR_AVAIL_EVAL_PROC +MGMT_SEVERITY_HELPER.OR_SEVERITY_EVAL_PROC +MGMT_SNAPSHOT_OBJ.NEW +MGMT_SQLTRACE. +MGMT_SQLTRACE.EXTENDED_SQL_TRACE +MGMT_SQLTRACE.EXTENDED_SQL_TRACE_ON +MGMT_SQL_METRIC_TR. +MGMT_STARTUP. +MGMT_STEP_PARAM_DELETE. +MGMT_STEP_PARAM_INSERT. +MGMT_SWLIB. +MGMT_SWLIB.DELETE_ENTITY +MGMT_SWLIB.GET_CURRENT_ENTITY_VERSION +MGMT_SWLIB.GET_NEXT_VERSION +MGMT_SWLIB.INSERT_DIRECTORY +MGMT_SWLIB.INSERT_ENTITY +MGMT_SWLIB.INSERT_REFERENCES +MGMT_SWLIB.INSERT_REVISION +MGMT_SWLIB.PURGE +MGMT_SWLIB.TEST_GNV +MGMT_SWLIB.UPDATE_DIRECTORY +MGMT_SWLIB.UPDATE_ENTITY +MGMT_SWLIB.UPDATE_FILEPATHS +MGMT_SYSTEM. +MGMT_SYSTEM.APPLY_TARGET_UI_DEFAULTS +MGMT_SYSTEM.CREATE_SYSTEM +MGMT_SYSTEM.DELETE_SYSTEM +MGMT_SYSTEM.IS_SYSTEM +MGMT_SYSTEM.MODIFY_SYSTEM +MGMT_SYSTEM.SETUP_TYPE_UI_METADATA +MGMT_TARGET. +MGMT_TARGET.ADD_GROUP +MGMT_TARGET.ADD_MASTER_CHANGED_CALLBACK +MGMT_TARGET.ADD_METAVER_CATPROP_CALLBACK +MGMT_TARGET.ADD_METAVER_UPD_CALLBACK +MGMT_TARGET.ADD_METRIC_SEVERITY_DEPS +MGMT_TARGET.ADD_REPO_METRIC_COLLECTION +MGMT_TARGET.ADD_TARGET +MGMT_TARGET.ADD_TARGET_TYPE_PROPERTIES +MGMT_TARGET.ADD_TARGET_TYPE_PROPERTY +MGMT_TARGET.ADD_TGTTYPE_ADDITION_CALLBACK +MGMT_TARGET.ADD_TGT_RELOCATION_CALLBACK +MGMT_TARGET.ADD_TZRGN_UPDATE_CALLBACK +MGMT_TARGET.DELETE_MASTER_CHANGED_CALLBACK +MGMT_TARGET.DELETE_METRIC_SEVERITY_DEPS +MGMT_TARGET.DELETE_REPO_METRIC_COLLECTION +MGMT_TARGET.DELETE_TARGET_PROPERTY_DEF +MGMT_TARGET.DELETE_TARGET_TYPE +MGMT_TARGET.DELETE_TARGET_TYPE_PROPERTY +MGMT_TARGET.DELETE_TGT_RELOCATION_CALLBACK +MGMT_TARGET.DEL_METAVER_CATPROP_CALLBACK +MGMT_TARGET.DEL_METAVER_UPD_CALLBACK +MGMT_TARGET.DEL_TGTTYPE_ADDITION_CALLBACK +MGMT_TARGET.DEL_TZRGN_UPDATE_CALLBACK +MGMT_TARGET.DROP_USER_TARGETS +MGMT_TARGET.EVAL_REPO_TARGET_STATUS +MGMT_TARGET.GENERATE_METRIC_COLUMN_GUID +MGMT_TARGET.GENERATE_METRIC_GUID +MGMT_TARGET.GENERATE_TARGET_GUID +MGMT_TARGET.GET_AGENT_VERSION +MGMT_TARGET.GET_ALL_TARGETS_MNTR_SUMMARY +MGMT_TARGET.GET_AVAIL_CURRENT_STATUS +MGMT_TARGET.GET_AVAIL_PCT_VALUE +MGMT_TARGET.GET_CURRENT_STATUS_TIMESTAMP +MGMT_TARGET.GET_DELETE_TARGET_INFO +MGMT_TARGET.GET_MASTER_AGENT_URL +MGMT_TARGET.GET_MEMBER_MONITORING_SUMMARY +MGMT_TARGET.GET_METRIC_COLUMN_GUIDS +MGMT_TARGET.GET_METRIC_GUID +MGMT_TARGET.GET_REPO_METRIC_EVAL_PROC +MGMT_TARGET.GET_TARGET_GUID +MGMT_TARGET.GET_TARGET_INFO +MGMT_TARGET.GET_TARGET_LIST_VIEW_SUMMARY +MGMT_TARGET.GET_TARGET_MAX_SEVERITY +MGMT_TARGET.GET_TARGET_MONITORING_SUMMARY +MGMT_TARGET.GET_TARGET_NUM_SEVERITY +MGMT_TARGET.GET_TARGET_SUBTAB_SUMMARY +MGMT_TARGET.GET_TIME_DIFFERENCE +MGMT_TARGET.GET_TRAFFIC_LIGHT_INFO +MGMT_TARGET.GET_TYPE_PROPERTY +MGMT_TARGET.GET_TYPE_UDTP +MGMT_TARGET.GET_USER_TARGETS +MGMT_TARGET.IS_AGGREGATE_TYPE +MGMT_TARGET.IS_MULTI_AGENT_TARGET +MGMT_TARGET.MODIFY_GROUP +MGMT_TARGET.MODIFY_REPO_METRIC_COLLECTION +MGMT_TARGET.MODIFY_REPO_METRIC_DEPS +MGMT_TARGET.MODIFY_TARGET +MGMT_TARGET.MOVE_TARGET +MGMT_TARGET.REASSIGN_USER_TARGETS +MGMT_TARGET.REGISTER_TARGET_TYPE +MGMT_TARGET.REMOVE_CLUSTER_MEMBER +MGMT_TARGET.SET_AGENT_TZRGN +MGMT_TARGET.SET_INSTANCE_TARGET_PROPERTY +MGMT_TARGET.SET_MASTER_AGENT +MGMT_TARGET.SET_REPO_METRIC_EVAL_PROC +MGMT_TARGET.SET_TARGET_PROPERTIES +MGMT_TARGET.SET_TARGET_PROPERTY +MGMT_TARGET.SET_TARGET_TZRGN +MGMT_TARGET.SYSDATE_TARGET +MGMT_TARGET.UPSERT_TARGET_PROPERTY_DEF +MGMT_TARGET_ASSOC_REC.NEW +MGMT_TARGET_CREDS_DEL. +MGMT_TARGET_CRED_RECORD.NEW +MGMT_TARGET_META_VER_CBK_OBJ.NEW +MGMT_TARGET_OBJ.NEW +MGMT_TARGET_PROPERTY_CBK_OBJ.NEW +MGMT_TARGET_PROPERTY_CHANGE. +MGMT_TARGET_UPDATE. +MGMT_TARGET_UPDATE.APPLY_TEMPLATE +MGMT_TARGET_UPDATE.CLEAN_ON_TGT_DEL +MGMT_TARGET_UPDATE.COPY_METRIC_THRESHOLDS +MGMT_TARGET_UPDATE.DELETE_EXECUTIONS +MGMT_TARGET_UPDATE.DELETE_OPERATION_DATA +MGMT_TARGET_UPDATE.HAS_RUNNING_UPDATE_EXECUTION +MGMT_TARGET_UPDATE.PURGE +MGMT_TARGET_UPDATE.SAVE_REPO_MNTR_SETTINGS +MGMT_TARGET_UPDATE.STOP_EXECUTIONS +MGMT_TARGET_UPDATE.STOP_PROPAGATION_EXECUTION +MGMT_TARGET_UPDATE.SUBMIT_COLL_CREDENTIAL_DATA +MGMT_TARGET_UPDATE.SUBMIT_CREDENTIAL_DATA +MGMT_TARGET_UPDATE.SUBMIT_MONITORING_SETTINGS +MGMT_TARGET_UPDATE.SUBMIT_PDP_DATA +MGMT_TARGET_UPDATE.SUBMIT_PROPERTIES_DATA +MGMT_TARGET_UPDATE.SUBMIT_TEMPLATE_DATA +MGMT_TARGET_UPDATE.SUBMIT_THRESHOLD_DATA +MGMT_TARGET_UPDATE.SUBMIT_UPDATE_OPERATION +MGMT_TARGET_UPDATE.UPDATE_METRIC_THRESHOLDS +MGMT_TARGET_UPDATE.UPDATE_MONITORING_SETTINGS +MGMT_TEMPLATE. +MGMT_TEMPLATE.APPLY_TEMPLATE +MGMT_TEMPLATE.CREATE_TEMPLATE +MGMT_TEMPLATE.CREATE_TEMPLATE_CLONE +MGMT_TEMPLATE.CREATE_TEMPLATE_COPY +MGMT_TEMPLATE.CREATE_TEMPLATE_COPY_CLONE +MGMT_TEMPLATE.DELETE_TEMPLATE +MGMT_TEMPLATE.DELETE_TEMPLATE_COPY +MGMT_TEMPLATE.DROP_USER_TEMPLATES +MGMT_TEMPLATE.GENERATE_TEMPLATE_COPY_GUID +MGMT_TEMPLATE.GENERATE_TEMPLATE_GUID +MGMT_TEMPLATE.GET_TARGETS_INFO +MGMT_TEMPLATE.GET_TEMPLATE_COPY_GUID +MGMT_TEMPLATE.GET_TEMPLATE_COPY_SETTINGS +MGMT_TEMPLATE.GET_TEMPLATE_GUID +MGMT_TEMPLATE.GET_TEMPLATE_INFO +MGMT_TEMPLATE.GET_TEMPLATE_SETTINGS +MGMT_TEMPLATE.GET_USER_TEMPLATES +MGMT_TEMPLATE.MODIFY_TEMPLATE +MGMT_TEMPLATE.REASSIGN_USER_TEMPLATES +MGMT_TEMPLATE.SAVE_TEMPLATE_COPY_TO_TARGET +MGMT_TEMPLATE_ACCESS.NEW +MGMT_TEMPLATE_UI. +MGMT_TEMPLATE_UI.APPLY_TEMPLATE +MGMT_TEMPLATE_UI.CREATE_TEMPLATE +MGMT_TEMPLATE_UI.DELETE_TEMPLATE +MGMT_TEMPLATE_UI.MODIFY_PURGE_POLICY +MGMT_TEST_METADATA_EDIT. +MGMT_TEST_METADATA_EDIT.ADD_METRIC_PROPERTY +MGMT_TEST_METADATA_EDIT.DELETE_TEST +MGMT_TEST_METADATA_EDIT.DEPRECATE_TEST +MGMT_TEST_METADATA_EDIT.ENABLE_TEST_FOR_TARGET +MGMT_TEST_METADATA_EDIT.GEN_METRIC_PROPERTY_GUID +MGMT_TEST_METADATA_EDIT.INSERT_COMPLETE_TEST +MGMT_TEST_METADATA_EDIT.INSERT_PROPERTIES +MGMT_TEST_METADATA_EDIT.UPGRADE_TEST +MGMT_TEST_METADATA_METRICS. +MGMT_TEST_METADATA_METRICS.COPY_METRIC +MGMT_TEST_METADATA_METRICS.HANDLE_NEW_METRICS +MGMT_TEST_METADATA_METRICS.UPDATE_METRIC +MGMT_TEST_METADATA_READ. +MGMT_TEST_METADATA_READ.GET_AVAIL_METRIC +MGMT_TEST_METADATA_READ.READ_COLLECTION_METADATA +MGMT_TEST_METADATA_READ.READ_DEFAULT_PROMOTIONS +MGMT_TEST_METADATA_READ.READ_DEFAULT_THRESHOLDS +MGMT_TEST_METADATA_READ.READ_TEST_LIST +MGMT_TEST_METADATA_READ.READ_TEST_METADATA +MGMT_TEST_METADATA_READ.READ_TEST_METRIC_COLUMNS +MGMT_TEST_METADATA_READ.READ_TEST_PROPERTIES_ALL +MGMT_TEXT. +MGMT_TEXT.ADDTEXTLOG +MGMT_TEXT.CREATEUNIQUETEXTINDEXRECORD +MGMT_THRESHOLD.NEW +MGMT_TIME_SYNC. +MGMT_TIME_SYNC.GETTIMECOFF +MGMT_TIME_SYNC.INIT_OUT_OF_BOX +MGMT_TIME_SYNC.LOCKTIMECOFF +MGMT_TIME_SYNC.SETTIMECOFF +MGMT_TIME_SYNC.SETTIMECOFFNOCHECK +MGMT_TIME_SYNC.STARTUPSYNC +MGMT_TIME_SYNC.UNLOCKTIMECOFF +MGMT_TIME_SYNC.UPGRADE +MGMT_TOPOLOGY. +MGMT_TOPOLOGY.GET_BACKGROUND_IMAGE +MGMT_TOPOLOGY.UPDATE_BACKGROUND_IMAGE +MGMT_TZRGN_UPDATE_CBK_OBJ.NEW +MGMT_UPDATE_DB_FEATURE_LOG. +MGMT_USER. +MGMT_USER.ADD_CALLBACK +MGMT_USER.CHECK_DROP_USER_CONFLICTS +MGMT_USER.CHECK_REASSIGN_USER_CONFLICTS +MGMT_USER.CHECK_USER_EXISTS +MGMT_USER.CORRECTIVE_ACTION_DELETED +MGMT_USER.CREATE_PRIV +MGMT_USER.CREATE_ROLE +MGMT_USER.CREATE_USER +MGMT_USER.CREATE_USER_DBCONSOLE +MGMT_USER.DROP_PRIV +MGMT_USER.DROP_ROLE +MGMT_USER.DROP_USER +MGMT_USER.DROP_USER_COMPLETE +MGMT_USER.EM4745545052454449434154454A +MGMT_USER.EM47455450524544494341544554 +MGMT_USER.GET_ACCESS_INFO +MGMT_USER.GET_ACCESS_INFO_TEMPLATE +MGMT_USER.GET_CA_PREDICATE +MGMT_USER.GET_CURRENT_EM_USER +MGMT_USER.GET_MAX_PRIV +MGMT_USER.GET_METRIC_PREFS_ALIAS +MGMT_USER.GET_MGMT_PRIVS +MGMT_USER.GET_NODE_LIST_WITH_PRIVILEGE +MGMT_USER.GET_PRIVS +MGMT_USER.GET_READ_LOCK +MGMT_USER.GET_REPORT_DEF_PREDICATE +MGMT_USER.GET_REPORT_GRANTS +MGMT_USER.GET_REPOSITORY_OWNER +MGMT_USER.GET_REPOSITORY_TARGETS +MGMT_USER.GET_ROLES +MGMT_USER.GET_ROLES_FOR_ROLE +MGMT_USER.GET_ROLE_GRANTS +MGMT_USER.GET_ROLE_PRIVS +MGMT_USER.GET_ROLE_USERS +MGMT_USER.GET_STORED_REPORT_PREDICATE +MGMT_USER.GET_SUBTAB_PREFS_ALIAS +MGMT_USER.GET_TARGETS +MGMT_USER.GET_TARGETS_FOR_ROLE +MGMT_USER.GET_TARGETS_FOR_USER +MGMT_USER.GET_TARGET_PRIVS +MGMT_USER.GET_TARGET_TYPES +MGMT_USER.GET_TEMPLATE_PREDICATE +MGMT_USER.GET_USERS +MGMT_USER.GET_USERS_DBCONSOLE +MGMT_USER.GET_USER_JOB_PRIV +MGMT_USER.GET_USER_OBJECTS +MGMT_USER.GET_USER_PRIVS +MGMT_USER.GET_USER_ROLES +MGMT_USER.GET_USER_ROLE_LIST +MGMT_USER.GRANT_CA_PRIVS +MGMT_USER.GRANT_FULL_JOB_TO_OWNER +MGMT_USER.GRANT_PRIV +MGMT_USER.GRANT_PRIVS +MGMT_USER.GRANT_ROLE +MGMT_USER.GRANT_ROLES +MGMT_USER.HANDLE_TARGET_DELETED +MGMT_USER.HAS_PRIV +MGMT_USER.HAS_PRIV_ON_ALL +MGMT_USER.HAS_ROLE +MGMT_USER.INVALIDATE_USERS +MGMT_USER.JOB_DELETED +MGMT_USER.MAKE_EM_USER +MGMT_USER.MAKE_EM_USER_DBCONSOLE +MGMT_USER.MODIFY_DBCONSOLE_USER +MGMT_USER.MODIFY_JOB_GRANTS +MGMT_USER.MODIFY_ROLE +MGMT_USER.MODIFY_USER +MGMT_USER.NESTED_JOB_ADDED +MGMT_USER.NESTED_JOB_DELETED +MGMT_USER.RELEASE_READ_LOCK +MGMT_USER.REMOVE_CALLBACK +MGMT_USER.REPORT_DEFINITION_DELETED +MGMT_USER.REVOKE_PRIV +MGMT_USER.REVOKE_PRIVS +MGMT_USER.REVOKE_ROLE +MGMT_USER.REVOKE_ROLES +MGMT_USER.REVOKE_VIEW_REPORT_ALL +MGMT_USER.SET_EM_USER_CONTEXT +MGMT_USER.TARGET_ASSOC_CHANGED +MGMT_USER.TEMPLATE_DELETED +MGMT_USER.UPDATE_FLAT_ROLE_GRANTS +MGMT_USER.UPDATE_PRIVILEGE +MGMT_USER.UPDATE_PRIVILIGE +MGMT_USER.UPDATE_REVOKE_GRANT_PRIVILEGE +MGMT_USER.UPDATE_USER_PREF_EMAIL +MGMT_USER.VALID_GROUP_MEMBER +MGMT_USER_DEFINED_POLICY. +MGMT_USER_DEFINED_POLICY.ADD_POLICY_TO_TARGET +MGMT_USER_DEFINED_POLICY.CREATE_POLICY +MGMT_USER_DEFINED_POLICY.DELETE_POLICY +MGMT_USER_DEFINED_POLICY.REMOVE_POLICY_FROM_TARGET +MGMT_VALIDIF_OBJ.NEW +MGMT_VIEW_PRIV. +MGMT_VIEW_PRIV.CHANGE_VIEW_USER_PASSWORD +MGMT_VIEW_PRIV.GET_VIEW_USER +MGMT_VIEW_PRIV.GET_VIEW_USER_CREDS +MGMT_VIEW_PRIV.INIT_VIEW_USER_OUT_OF_BOX +MGMT_VIEW_PRIV.RANDOM_PASSWORD +MGMT_VIEW_PRIV.SET_VIEW_USER_CONTEXT +MGMT_VIEW_PRIV.SET_VIEW_USER_CREDS +MGMT_VIEW_UTIL. +MGMT_VIEW_UTIL.ADJUST_TZ +MGMT_VIEW_UTIL.GET_DELTA_KEY_NLS_STRING +MGMT_VIEW_UTIL.GET_DELTA_RESOURCE_NLS_STRING +MGMT_VIEW_UTIL.GET_DELTA_VALUE_NLS_STRING +MGMT_VIEW_UTIL.NV +MGMT_VIOLATION. +MGMT_VIOLATION.ADD_VIOLATION_SUPPRESSION +MGMT_VIOLATION.CLEAR_OPEN_ALERTS +MGMT_VIOLATION.GET_VIOL_GUID_WITH_KEYGUID +MGMT_VIOLATION.GET_VIOL_GUID_WITH_KEYSTRING +MGMT_VIOLATION.LOG_POLICY_VIOLATION +MGMT_VIOLATION.LOG_THRESHOLD_VIOLATION +MGMT_VIOLATION.LOG_VIOLATION +MGMT_VIOLATION.PURGE_ALERTS +MGMT_VIOLATION.PURGE_VIOLATIONS +MGMT_VIOLATION.REMOVE_VIOLATION_SUPPRESSION +MGMT_VIOL_CTXT_DEF.NEW +MGMT_WEBSITE_TARGET. +MGMT_WEBSITE_TARGET.ADDWEBSITE +MGMT_WEBSITE_TARGET.ADD_EUME2E_ASSOCIATIONS +MGMT_WEBSITE_TARGET.APPS_CLUSTER_MEM_ADD_CALLBACK +MGMT_WEBSITE_TARGET.APPS_CLUSTER_MEM_DEL_CALLBACK +MGMT_WEBSITE_TARGET.APPS_KEY_DEL_CALLBACK +MGMT_WEBSITE_TARGET.CLUSTER_MEM_ADD_CALLBACK +MGMT_WEBSITE_TARGET.CLUSTER_MEM_DEL_CALLBACK +MGMT_WEBSITE_TARGET.DEL_KEY_CLUSTER_CALLBACK +MGMT_WEBSITE_TARGET.DEL_OLD_EUME2E_ASSOCS +MGMT_WEBSITE_TARGET.EUME2E_ASSOC_EXISTS +MGMT_WEBSITE_TARGET.GETEMDHOSTANDURLS +MGMT_WEBSITE_TARGET.GETURLBASE +MGMT_WEBSITE_TARGET.GETWEBSITEDATA +MGMT_WEBSITE_TARGET.IS_DIRECT_KEY +MGMT_WEBSITE_TARGET.IS_EUME2E_SUPPORTED +MGMT_WEBSITE_TARGET.IS_GROUP +MGMT_WEBSITE_TARGET.IS_KEY_MEMBER +MGMT_WEBSITE_TARGET.KEY_DEL_CALLBACK +MGMT_WEBSITE_TARGET.OTHER_EUME2E_ASSOC +MGMT_WEBSITE_TARGET.SUPPORTS_EUME2E_ASSOC +MGMT_WEBSITE_TARGET.TESTGETHOSTEMDURL +MGMT_WEBSITE_TARGET.TESTPACK +MGMT_WEBSITE_TARGET.WEBSITE_EMCUSTOM_DEL_CALLBACK +MIGRATABLE +MIGRATED +MIGRATION_ALLOWED +MIGRATION_BOUNDARY +MINARGS +MINIMUM +MINING_FUNCTION +MINING_SCN +MINING_STATUS +MINING_TIME +MINIOTIM +MINOR +MINRETENTION +MINSIZE +MINTIME +MINVAL +MIN_CARDINALITY +MIN_CHECKPOINT_CHANGE# +MIN_CHECKPOINT_TIME +MIN_COMMUNICATION +MIN_EXTENT +MIN_EXTENTS +MIN_EXTLEN +MIN_FILE_SIZE +MIN_FIRST_CHANGE# +MIN_FIRST_TIME +MIN_LATENCY +MIN_LOGON_TIME +MIN_MODIFICATION_TIME +MIN_REQUIRED_CAPTURE_CHANGE# +MIN_ROWS_IN_BUCKET +MIN_SIZE +MIN_TASK_LATENCY +MIN_VALUE +MIN_VERSIONS +MIRROR_REGION +MISC_ENV +MISSES +MIXED +MNTPORT +MODE +MODEL_COMPILE_SUBQUERY +MODEL_DONTVERIFY_UNIQUENESS +MODEL_DYNAMIC_SUBQUERY +MODEL_MIN_ANALYSIS +MODEL_NAME +MODEL_NO_ANALYSIS +MODEL_PUSH_REF +MODEL_SIZE +MODE_HELD +MODE_REQUESTED +MODE_STATUS +MODIFICATIONS +MODIFICATION_DATE +MODIFICATION_TIME +MODIFICATION_TIMESTAMP +MODIFIED +MODIFIED_BY +MODIFIED_TIME +MODIFY_DATE +MODS_PER_LCR +MODULE +MODULE_HASH +MODULE_ID +MONITOR +MONITORING +MORE_INFO +MOUNTID +MOUNTPATH +MOUNT_DATE +MOUNT_STATUS +MOVEXDB_TABLE. +MOVEXDB_TABLE_PART2. +MOVE_PROCEDURE +MOVE_PROCEDURE_DESC +MOVING_WINDOW_SIZE +MSGID +MSGNO +MSGS_MADE_EXPIRED +MSGS_MADE_READY +MSGS_RCVD_CUR +MSGS_RCVD_TOTAL +MSGS_SENT_CUR +MSGS_SENT_TOTAL +MSG_CTRL_QUEUE +MSG_GRPID +MTTR_TARGET_FOR_ESTIMATE +MTU +MULTIPASSES_EXECUTIONS +MULTIPLEX +MULTI_PX_MISMATCH +MULTI_SECTION +MUTABLE +MUTEX_IDENTIFIER +MUTEX_TYPE +MUTEX_VALUE +MVAGGRAWBITOR. +MVAGGRAWBITOR_TYP.ODCIAGGREGATEINITIALIZE +MVAGGRAWBITOR_TYP.ODCIAGGREGATEITERATE +MVAGGRAWBITOR_TYP.ODCIAGGREGATEMERGE +MVAGGRAWBITOR_TYP.ODCIAGGREGATETERMINATE +MVIEW_ID +MVIEW_LAST_REFRESH_TIME +MVIEW_NAME +MVIEW_SITE +MVIEW_TABLE_OWNER +MV_MERGE +MV_QUERY_GEN_MISMATCH +MV_REWRITE_MISMATCH +MV_STALEOBJ_MISMATCH +MY_DBLINK +NAME +NAMED +NAMEFROMLASTDDL. +NAMESPACE +NAME_HASH +NAME_ID +NAME_NLS +NAME_SPACE +NATIVE_FULL_OUTER_JOIN +NATIVE_METHODS +NCHAR_VALUE +NC_COMPONENT +NC_REASON +NEGATIVE_RULE_SET_NAME +NEGATIVE_RULE_SET_OWNER +NESTED +NESTED_TABLE +NESTED_TABLE_FAST_INSERT +NESTED_TABLE_GET_REFS +NESTED_TABLE_SET_SETID +NETWORK +NETWORK_NAME +NETWORK_SERVICE_BANNER +NETWORK_TIME +NET_MASK +NET_TIMEOUT +NEW +NEWEST_BACKUP_TIME +NEWEST_SCN +NEWEST_SEQUENCE# +NEWEST_THREAD# +NEWEST_TIME +NEW_NAME +NEW_OWNER +NEXT +NEXT_CHANGE# +NEXT_CVT_LEVEL +NEXT_DATE +NEXT_EXPIRY_TIME +NEXT_EXTENT +NEXT_READY_TIME +NEXT_RUN_DATE +NEXT_RUN_TIME +NEXT_SCN +NEXT_SCNBAS +NEXT_SCNWRP +NEXT_SEC +NEXT_SERVICE_TIME +NEXT_START_DATE +NEXT_TICKER +NEXT_TIME +NEXT_TRY_DATE +NEXT_WAKEUP_TIME +NFSPORT +NFS_ACCESS +NFS_COMMIT +NFS_CREATE +NFS_FSINFO +NFS_FSSTAT +NFS_GETATTR +NFS_LINK +NFS_LOOKUP +NFS_MKDIR +NFS_MKNOD +NFS_MOUNT +NFS_NULL +NFS_PATHCONF +NFS_READ +NFS_READDIR +NFS_READDIRPLUS +NFS_READLINK +NFS_REMOVE +NFS_RENAME +NFS_RMDIR +NFS_SETATTR +NFS_SYMLINK +NFS_WRITE +NIWAITPERCALL +NLJ_BATCHING +NLJ_PREFETCH +NLS_DATABASE_PARAMETERS +NLS_ENV +NLS_INSTANCE_PARAMETERS +NLS_LENGTH_SEMANTICS +NLS_SESSION_PARAMETERS +NL_AJ +NL_SJ +NOAPPEND +NOCACHE +NOCACHE_LOBS +NODE +NONDURABLE +NONMIGRATABILITY_INFO +NONMIGRATABILITY_REASON +NONSCHEMA +NONTRANSFERABILITY_INFO +NONTRANSFERABILITY_REASON +NON_ZERO_ALLOCS +NOPARALLEL +NORMALIZED_TIMESTAMP +NOSPACEERRCNT +NOTIFICATION_ACTION +NOTIFICATION_CONTEXT +NOTIFICATION_TYPE +NOUNDO +NO_ACCESS +NO_BASETABLE_MULTIMV_REWRITE +NO_BIND_AWARE +NO_BUFFER +NO_CARTESIAN +NO_CHECK_ACL_REWRITE +NO_COALESCE_SQ +NO_CONNECT_BY_CB_WHR_ONLY +NO_CONNECT_BY_COMBINE_SW +NO_CONNECT_BY_COST_BASED +NO_CONNECT_BY_ELIM_DUPS +NO_CONNECT_BY_FILTERING +NO_COST_XML_QUERY_REWRITE +NO_CPU_COSTING +NO_DOMAIN_INDEX_FILTER +NO_DST_UPGRADE_INSERT_CONV +NO_ELIMINATE_JOIN +NO_ELIMINATE_OBY +NO_EXPAND +NO_EXPAND_GSET_TO_UNION +NO_EXPAND_TABLE +NO_FACT +NO_FACTORIZE_JOIN +NO_GBY_PUSHDOWN +NO_INDEX +NO_INDEX_FFS +NO_INDEX_SS +NO_LOAD +NO_MERGE +NO_MODEL_PUSH_REF +NO_MONITOR +NO_MONITORING +NO_MULTIMV_REWRITE +NO_NATIVE_FULL_OUTER_JOIN +NO_NLJ_BATCHING +NO_NLJ_PREFETCH +NO_ORDER_ROLLUPS +NO_OUTER_JOIN_TO_INNER +NO_PARALLEL +NO_PARALLEL_INDEX +NO_PARTIAL_COMMIT +NO_PLACE_DISTINCT +NO_PLACE_GROUP_BY +NO_PRUNE_GSETS +NO_PULL_PRED +NO_PUSH_PRED +NO_PUSH_SUBQ +NO_PX_JOIN_FILTER +NO_QKN_BUFF +NO_QUERY_TRANSFORMATION +NO_REF_CASCADE +NO_RESULT_CACHE +NO_REWRITE +NO_SEMIJOIN +NO_SET_TO_JOIN +NO_SQL_TUNE +NO_STAR_TRANSFORMATION +NO_STATEMENT_QUEUING +NO_STATS_GSETS +NO_SUBQUERY_PRUNING +NO_SUBSTRB_PAD +NO_SWAP_JOIN_INPUTS +NO_TABLE_LOOKUP_BY_NL +NO_TRANSFORM_DISTINCT_AGG +NO_TRIGGER_MISMATCH +NO_UNNEST +NO_USE_HASH +NO_USE_HASH_AGGREGATION +NO_USE_HASH_GBY_FOR_PUSHDOWN +NO_USE_INVISIBLE_INDEXES +NO_USE_MERGE +NO_USE_NL +NO_VM_ALTER_PROC. +NO_VM_CREATE_PROC. +NO_VM_DDL. +NO_VM_DROP_A. +NO_VM_DROP_PROC. +NO_XDB_FASTPATH_INSERT +NO_XMLINDEX_REWRITE +NO_XMLINDEX_REWRITE_IN_SELECT +NO_XML_DML_REWRITE +NO_XML_QUERY_REWRITE +NTFN_GROUPING_CLASS +NTFN_GROUPING_REPEAT_COUNT +NTFN_GROUPING_START_TIME +NTFN_GROUPING_TYPE +NTFN_GROUPING_VALUE +NULLABLE +NULLS_STORED +NULL_2_S +NULL_2_SS +NULL_2_X +NULL_VALUE +NUM +NUMBER_COLUMN +NUMBER_OF_ARGUMENTS +NUMBER_OF_BINDS +NUMBER_OF_DESTINATIONS +NUMBER_OF_FILES +NUMBER_OF_MEMBERS +NUMBER_OF_OPERATORS +NUMBER_OF_RULES +NUMBER_OF_STEPS +NUMBER_OF_WAITS +NUMBER_OF_WINDOWS +NUMBER_PASSES +NUMBER_VALUE +NUM_ANONYMOUS_NTFNS +NUM_AQ_NTFNS +NUM_ATTR1 +NUM_ATTR2 +NUM_ATTR3 +NUM_ATTR4 +NUM_ATTR5 +NUM_ATTRB +NUM_AUTHENTICATIONS +NUM_AUTH_SERVERS +NUM_BACKUPSETS +NUM_BUCKETS +NUM_BUSY_SERVERS +NUM_CBROK +NUM_CLIENTS +NUM_CLIENTS_DONE +NUM_COLUMNS +NUM_COMP +NUM_COPIES +NUM_CPUS +NUM_CU +NUM_DAMAGE_MSG +NUM_DBCHANGE_NTFNS +NUM_DB_REPORTS +NUM_DELETE_STMT +NUM_DISTINCT +NUM_DISTINCT_COPIES +NUM_DISTINCT_FILES_BACKED +NUM_DISTINCT_TS_BACKED +NUM_EMAIL_NTFNS +NUM_EM_REPORTS +NUM_EVENTS_PENDING +NUM_EVENTS_PROCESSED +NUM_EXECS +NUM_FAILURES +NUM_FILES_BACKED +NUM_FREELIST_BLOCKS +NUM_FRESH_PCT_PARTITIONS +NUM_FRESH_PCT_REGIONS +NUM_GROUPING_NTFNS +NUM_HITS +NUM_HTTP_NTFNS +NUM_INCIDENT +NUM_INCIDENTS +NUM_INCIDENTS_LASTHOUR +NUM_INDEX_KEYS +NUM_INSERT_STMT +NUM_INTERVAL +NUM_MERGE_STMT +NUM_MISSES +NUM_MSG +NUM_MSGS +NUM_NTFNS +NUM_NTFNS_ALL_GROUPS +NUM_NTFNS_CURRENT_GROUP +NUM_NULLS +NUM_OCI_NTFNS +NUM_OPEN_SERVERS +NUM_PARAMETERS +NUM_PCT_TABLES +NUM_PENDING_NTFNS +NUM_PHYSICAL_DISKS +NUM_PLAN_DIRECTIVES +NUM_PLSQL_NTFNS +NUM_PREDS +NUM_PROCESS +NUM_PROCESSES +NUM_PURGED +NUM_REQUESTS +NUM_RETRIES +NUM_ROWS +NUM_ROWS_PURGED +NUM_RUNS +NUM_SAMPLES +NUM_SELECT_STMT +NUM_SERVERS +NUM_SESS_WAITING +NUM_STALE_PCT_PARTITIONS +NUM_STALE_PCT_REGIONS +NUM_SUCCS +NUM_TASKS +NUM_UPDATE_STMT +NUM_VOL +NUM_WAITERS +NUM_WAITS +NV. +NVALS +NVARCHAR2_VALUE +NWFAIL_COUNT +O7_DICTIONARY_ACCESSIBILITY +OBJ +OBJ# +OBJD +OBJECT +OBJECT# +OBJECT_ALIAS +OBJECT_COLUMN_NAME +OBJECT_COMMENT +OBJECT_DATA +OBJECT_FLUSHES +OBJECT_HANDLE +OBJECT_ID +OBJECT_ID_TYPE +OBJECT_INSTANCE +OBJECT_NAME +OBJECT_NO +OBJECT_NODE +OBJECT_OWNER +OBJECT_PATH +OBJECT_RECID +OBJECT_REFRESHES +OBJECT_SCHEMA +OBJECT_STAMP +OBJECT_STATUS +OBJECT_TYPE +OBJECT_TYPE_ID +OBJECT_TYPE_NAME +OBJECT_TYPE_WEIGHT +OBJID +OBJ_EDITION_NAME +OBJ_ID +OBJ_NAME +OBJ_PRIVILEGE +OBJ_TYPE +OBSERVATION_PERIOD +OBSERVED_ERROR# +OBSERVED_ERROR_MESSAGE +OBSERVED_ROW_COUNT +OBSOLETE +OCCUPANT_DESC +OCCUPANT_NAME +ODCIANYDATADUMP. +ODCICOLINFODUMP. +ODCICOLINFOFLAGSDUMP. +ODCICONST. +ODCIENVDUMP. +ODCIINDEXALTEROPTIONDUMP. +ODCIINDEXCALLPROPERTYDUMP. +ODCIINDEXINFODUMP. +ODCIINDEXINFOFLAGSDUMP. +ODCIPARTINFODUMP. +ODCIPARTINFOLISTDUMP. +ODCIPREDINFODUMP. +ODCIQUERYINFODUMP. +ODCISTATSOPTIONSDUMP. +ODCITABFUNCINFODUMP. +ODM_ABN_MODEL. +ODM_ABN_MODEL.BUILD +ODM_ABN_MODEL.ESTIMATE_FEATUREBLD_TIME +ODM_ABN_MODEL.GET_MODEL_STATE +ODM_ASSOCIATION_RULE_MODEL. +ODM_ASSOCIATION_RULE_MODEL.BUILD +ODM_CLUSTERING_UTIL. +ODM_CLUSTERING_UTIL.GENERATE_PROBABILISTIC_MODEL +ODM_CLUSTERING_UTIL.GENERATE_RULES +ODM_CLUSTERING_UTIL.IS_DEBUG_ENABLED +ODM_MODEL_UTIL. +ODM_MODEL_UTIL.ANALYZE_TABLE +ODM_MODEL_UTIL.CHOP_UP +ODM_MODEL_UTIL.COLUMN_EXIST +ODM_MODEL_UTIL.COUNT_DISTINCT +ODM_MODEL_UTIL.CREATE_SEQUENCE +ODM_MODEL_UTIL.DEBUG_DUMP +ODM_MODEL_UTIL.DM_ENABLED_CHECK +ODM_MODEL_UTIL.DROP_SEQUENCE +ODM_MODEL_UTIL.DROP_TABLE +ODM_MODEL_UTIL.DROP_VIEW +ODM_MODEL_UTIL.GET_PARTITION_LIST +ODM_MODEL_UTIL.GET_TIME_MILLISECONDS +ODM_MODEL_UTIL.PARTITIONING_AVAILABLE +ODM_MODEL_UTIL.TABLE_EMPTY +ODM_MODEL_UTIL.TABLE_EXIST +ODM_MODEL_UTIL.UNIQUE_SEQUENCE_NAME +ODM_MODEL_UTIL.UNIQUE_TABLE_NAME +ODM_MODEL_UTIL.UPCASE +ODM_MODEL_UTIL.VIRTUAL_NESTED_XFORM +ODM_OC_CLUSTERING_MODEL. +ODM_OC_CLUSTERING_MODEL.BUILD_OCLUSTER +ODM_UTIL. +ODM_UTIL.COMPUTE_LOG_COMBINATIONS +ODM_UTIL.DROP_MODEL +ODM_UTIL.GET_DETAILS_PARSE_INTERVAL +OFFLINE_CAPABLE +OFFLINE_CHANGE# +OFFLINE_DISKS +OFFLOADABLE +OFFSET +OGC_AREA. +OGC_ASBINARY. +OGC_ASTEXT. +OGC_BOUNDARY. +OGC_BUFFER. +OGC_CENTROID. +OGC_CONTAINS. +OGC_CONVEXHULL. +OGC_CROSS. +OGC_DIFFERENCE. +OGC_DIMENSION. +OGC_DISJOINT. +OGC_DISTANCE. +OGC_ENDPOINT. +OGC_ENVELOPE. +OGC_EQUALS. +OGC_EXTERIORRING. +OGC_GEOMETRYN. +OGC_GEOMETRYTYPE. +OGC_INTERIORRINGN. +OGC_INTERSECTION. +OGC_INTERSECTS. +OGC_ISCLOSED. +OGC_ISEMPTY. +OGC_ISRING. +OGC_ISSIMPLE. +OGC_LENGTH. +OGC_LINESTRINGFROMTEXT. +OGC_LINESTRINGFROMWKB. +OGC_MULTILINESTRINGFROMTEXT. +OGC_MULTILINESTRINGFROMWKB. +OGC_MULTIPOLYGONFROMTEXT. +OGC_MULTIPOLYGONFROMWKB. +OGC_NUMGEOMETRIES. +OGC_NUMINTERIORRINGS. +OGC_NUMPOINTS. +OGC_OVERLAP. +OGC_POINTFROMTEXT. +OGC_POINTFROMWKB. +OGC_POINTN. +OGC_POINTONSURFACE. +OGC_POLYGONFROMTEXT. +OGC_POLYGONFROMWKB. +OGC_RELATE. +OGC_SRID. +OGC_STARTPOINT. +OGC_SYMMETRICDIFFERENCE. +OGC_TOUCH. +OGC_UNION. +OGC_WITHIN. +OGC_X. +OGC_Y. +OGIS_CRS_DELETE_TRIGGER. +OGIS_CRS_INSERT_TRIGGER. +OID_TEXT +OID_TEXT_LENGTH +OLAPDIMVIEW. +OLAPDIMVIEW.CREATEDIMTAB +OLAPFACTVIEW. +OLAPFACTVIEW.CREATEFACTTAB +OLAPIBOOTSTRAP2. +OLAPIHANDSHAKE2. +OLAPRANCURIMPL_T.ODCITABLECLOSE +OLAPRANCURIMPL_T.ODCITABLEDESCRIBE +OLAPRANCURIMPL_T.ODCITABLEFETCH +OLAPRANCURIMPL_T.ODCITABLEPREPARE +OLAPRANCURIMPL_T.ODCITABLESTART +OLAPRC_TABLE. +OLAP_BOOL_SRF. +OLAP_CONDITION. +OLAP_DATE_SRF. +OLAP_NUMBER_SRF. +OLAP_TABLE. +OLAP_TEXT_SRF. +OLDEST_BACKUP_TIME +OLDEST_FLASHBACK_SCN +OLDEST_FLASHBACK_TIME +OLDEST_MESSAGE_NUMBER +OLDEST_MSGID +OLDEST_MSG_ENQTM +OLDEST_OFFLINE_RANGE +OLDEST_PERSISTENT_INC_CTIME +OLDEST_POSITION +OLDEST_REFRESH_DATE +OLDEST_REFRESH_SCN +OLDEST_SAMPLE_ID +OLDEST_SAMPLE_TIME +OLDEST_SCN_NUM +OLDEST_TRANSACTION_ID +OLDEST_TRANSIENT_INC_CTIME +OLDEST_XIDSLT +OLDEST_XIDSQN +OLDEST_XIDUSN +OLD_HASH_VALUE +OLD_OBJECT +OLD_PUSH_PRED +OLD_SCHEMA +ONAME +ONEPASS_EXECUTIONS +ONLINE +ONLINE_CHANGE# +ONLINE_FUZZY +ONLINE_STATUS +ONLINE_TIME +ON_CONVERT_Q +ON_GRANT_Q +OPAQUE_TRANSFORM +OPAQUE_XCANONICAL +OPCODE +OPENOWNEROPAQUE +OPENREAD +OPENS +OPENSEQUENCEID +OPENSTATEID +OPENWRITE +OPEN_CURSORS +OPEN_MODE +OPEN_OPT_DEADLOCK +OPEN_OPT_NO_XID +OPEN_OPT_PERSISTENT +OPEN_OPT_PROCESS_OWNED +OPEN_RESETLOGS +OPEN_TIME +OPEN_VERSIONS +OPERATION +OPERATIONS_FILTER +OPERATION_CODE +OPERATION_ID +OPERATION_NAME +OPERATION_TAG +OPERATION_TIME +OPERATION_TYPE +OPERATOR +OPERATOR_MASK +OPERATOR_NAME +OPERATOR_SCHEMA +OPERATOR_TYPE +OPER_COUNT +OPER_MODE +OPER_TYPE +OPNAME +OPTIMAL_EXECUTIONS +OPTIMAL_LOGFILE_SIZE +OPTIMAL_SIZE +OPTIME +OPTIMIZATION +OPTIMIZED +OPTIMIZED_PHYBLKRD +OPTIMIZED_PHYSICAL_READS +OPTIMIZED_PHYSICAL_READS_DELTA +OPTIMIZED_PHYSICAL_READS_TOTAL +OPTIMIZED_PHY_READ_REQUESTS +OPTIMIZED_WEIGHT +OPTIMIZER +OPTIMIZER_COST +OPTIMIZER_ENV +OPTIMIZER_ENV_HASH_VALUE +OPTIMIZER_FEATURES_ENABLE +OPTIMIZER_FEATURE_ENABLE +OPTIMIZER_MISMATCH +OPTIMIZER_MODE +OPTIMIZER_MODE_MISMATCH +OPTIMIZER_STATS +OPTIONS +OPTION_ID +OPTION_NAME +OPTSIZE +OPT_ESTIMATE +OPT_PARAM +OP_2_SS +ORA$GRANT_SYS_SELECT. +ORA$_SYS_REP_AUTH. +ORACLE_DATAPUMP.ODCIEXTTABLECLOSE +ORACLE_DATAPUMP.ODCIEXTTABLEFETCH +ORACLE_DATAPUMP.ODCIEXTTABLEOPEN +ORACLE_DATAPUMP.ODCIEXTTABLEPOPULATE +ORACLE_DATAPUMP.ODCIGETINTERFACES +ORACLE_LOADER.ODCIEXTTABLECLOSE +ORACLE_LOADER.ODCIEXTTABLEFETCH +ORACLE_LOADER.ODCIEXTTABLEOPEN +ORACLE_LOADER.ODCIEXTTABLEPOPULATE +ORACLE_LOADER.ODCIGETINTERFACES +ORACLE_USERNAME +ORA_FI_DECISION_TREE_HORIZ. +ORA_FI_IMP_T.ODCITABLEDESCRIBE +ORA_FI_SUPERVISED_BINNING. +ORA_SI_MKSTILLIMAGE. +ORDAUDIO.APPENDTOCOMMENTS +ORDAUDIO.CHECKPROPERTIES +ORDAUDIO.CLEARLOCAL +ORDAUDIO.CLOSESOURCE +ORDAUDIO.COMPARECOMMENTS +ORDAUDIO.COPYCOMMENTSOUT +ORDAUDIO.DELETECOMMENTS +ORDAUDIO.DELETECONTENT +ORDAUDIO.ERASEFROMCOMMENTS +ORDAUDIO.EXPORT +ORDAUDIO.GETALLATTRIBUTES +ORDAUDIO.GETATTRIBUTE +ORDAUDIO.GETAUDIODURATION +ORDAUDIO.GETBFILE +ORDAUDIO.GETCOMMENTLENGTH +ORDAUDIO.GETCOMPRESSIONTYPE +ORDAUDIO.GETCONTENT +ORDAUDIO.GETCONTENTINLOB +ORDAUDIO.GETCONTENTLENGTH +ORDAUDIO.GETDESCRIPTION +ORDAUDIO.GETENCODING +ORDAUDIO.GETFORMAT +ORDAUDIO.GETMIMETYPE +ORDAUDIO.GETNUMBEROFCHANNELS +ORDAUDIO.GETPROPERTIES +ORDAUDIO.GETSAMPLESIZE +ORDAUDIO.GETSAMPLINGRATE +ORDAUDIO.GETSOURCE +ORDAUDIO.GETSOURCELOCATION +ORDAUDIO.GETSOURCENAME +ORDAUDIO.GETSOURCETYPE +ORDAUDIO.GETUPDATETIME +ORDAUDIO.IMPORT +ORDAUDIO.IMPORTFROM +ORDAUDIO.INIT +ORDAUDIO.ISLOCAL +ORDAUDIO.LOADCOMMENTSFROMFILE +ORDAUDIO.LOCATEINCOMMENTS +ORDAUDIO.OPENSOURCE +ORDAUDIO.ORDAUDIO +ORDAUDIO.PROCESSAUDIOCOMMAND +ORDAUDIO.PROCESSSOURCECOMMAND +ORDAUDIO.READFROMCOMMENTS +ORDAUDIO.READFROMSOURCE +ORDAUDIO.SETAUDIODURATION +ORDAUDIO.SETCOMPRESSIONTYPE +ORDAUDIO.SETDESCRIPTION +ORDAUDIO.SETENCODING +ORDAUDIO.SETFORMAT +ORDAUDIO.SETKNOWNATTRIBUTES +ORDAUDIO.SETLOCAL +ORDAUDIO.SETMIMETYPE +ORDAUDIO.SETNUMBEROFCHANNELS +ORDAUDIO.SETPROPERTIES +ORDAUDIO.SETSAMPLESIZE +ORDAUDIO.SETSAMPLINGRATE +ORDAUDIO.SETSOURCE +ORDAUDIO.SETUPDATETIME +ORDAUDIO.TRIMCOMMENTS +ORDAUDIO.TRIMSOURCE +ORDAUDIO.WRITETOCOMMENTS +ORDAUDIO.WRITETOSOURCE +ORDAUDIOEXCEPTIONS. +ORDAUDIO_PKG. +ORDAUDIO_PKG.CHECKPROPERTIES +ORDAUDIO_PKG.GETALLATTRIBUTES +ORDAUDIO_PKG.GETATTRIBUTE +ORDAUDIO_PKG.GETATTRIBUTES +ORDAUDIO_PKG.GETATTRIBUTESFROMLOCAL +ORDAUDIO_PKG.GETSUPPORTEDMIMETYPE +ORDAUDIO_PKG.PROCESSCOMMAND +ORDAUDIO_PKG.SETOUTPUTTONULL +ORDAUDIO_PKG.SETOUTPUTTOSTATUS +ORDAUDIO_PKG.SETOUTPUTTOTRACE +ORDAUDIO_PKG.SETOUTPUTTOVERBOSE +ORDAUDIO_PKG.SETPROPERTIES +ORDDATASOURCE.EXPORT +ORDDATASOURCE.GETBFILE +ORDDATASOURCE.GETBLOB +ORDDATASOURCE.GETCONTENTLENGTH +ORDDATASOURCE.GETSOURCEINFORMATION +ORDDATASOURCE.GETSOURCELOCATION +ORDDATASOURCE.GETSOURCENAME +ORDDATASOURCE.GETSOURCETYPE +ORDDATASOURCE.GETUPDATETIME +ORDDATASOURCE.IMPORT +ORDDATASOURCE.ISLOCAL +ORDDATASOURCE.ORDDATASOURCE +ORDDATASOURCE.SETSOURCEINFORMATION +ORDDATASOURCE.SETUPDATETIME +ORDDICOM.EXPORT +ORDDICOM.EXTRACTMETADATA +ORDDICOM.GETATTRIBUTEBYNAME +ORDDICOM.GETATTRIBUTEBYTAG +ORDDICOM.GETCONTENT +ORDDICOM.GETCONTENTLENGTH +ORDDICOM.GETSERIESINSTANCEUID +ORDDICOM.GETSOPCLASSUID +ORDDICOM.GETSOPINSTANCEUID +ORDDICOM.GETSOURCEINFORMATION +ORDDICOM.GETSOURCELOCATION +ORDDICOM.GETSOURCENAME +ORDDICOM.GETSOURCETYPE +ORDDICOM.GETSTUDYINSTANCEUID +ORDDICOM.IMPORT +ORDDICOM.ISANONYMOUS +ORDDICOM.ISCONFORMANCEVALID +ORDDICOM.ISLOCAL +ORDDICOM.MAKEANONYMOUS +ORDDICOM.ORDDICOM +ORDDICOM.PROCESSCOPY +ORDDICOM.SETPROPERTIES +ORDDICOM.WRITEMETADATA +ORDDOC.CLEARLOCAL +ORDDOC.CLOSESOURCE +ORDDOC.DELETECONTENT +ORDDOC.EXPORT +ORDDOC.GETBFILE +ORDDOC.GETCONTENT +ORDDOC.GETCONTENTINLOB +ORDDOC.GETCONTENTLENGTH +ORDDOC.GETFORMAT +ORDDOC.GETMIMETYPE +ORDDOC.GETPROPERTIES +ORDDOC.GETSOURCE +ORDDOC.GETSOURCELOCATION +ORDDOC.GETSOURCENAME +ORDDOC.GETSOURCETYPE +ORDDOC.GETUPDATETIME +ORDDOC.IMPORT +ORDDOC.IMPORTFROM +ORDDOC.INIT +ORDDOC.ISLOCAL +ORDDOC.OPENSOURCE +ORDDOC.ORDDOC +ORDDOC.PROCESSSOURCECOMMAND +ORDDOC.READFROMSOURCE +ORDDOC.SETFORMAT +ORDDOC.SETLOCAL +ORDDOC.SETMIMETYPE +ORDDOC.SETPROPERTIES +ORDDOC.SETSOURCE +ORDDOC.SETUPDATETIME +ORDDOC.TRIMSOURCE +ORDDOC.WRITETOSOURCE +ORDDOCEXCEPTIONS. +ORDDOC_PKG. +ORDDOC_PKG.GETPROPERTIES +ORDERED +ORDERED_PREDICATES +ORDERING_TYPE +ORDERROR. +ORDERROR.RAISE +ORDERS_ITEMS_TRG. +ORDERS_TRG. +ORDER_FLAG +ORDER_ID +ORDER_NUM +ORDIMAGE.APPLYWATERMARK +ORDIMAGE.CHECKPROPERTIES +ORDIMAGE.CLEARLOCAL +ORDIMAGE.CLOSESOURCE +ORDIMAGE.COPY +ORDIMAGE.DELETECONTENT +ORDIMAGE.EXPORT +ORDIMAGE.GETBFILE +ORDIMAGE.GETCOMPRESSIONFORMAT +ORDIMAGE.GETCONTENT +ORDIMAGE.GETCONTENTFORMAT +ORDIMAGE.GETCONTENTLENGTH +ORDIMAGE.GETDICOMMETADATA +ORDIMAGE.GETFILEFORMAT +ORDIMAGE.GETHEIGHT +ORDIMAGE.GETMETADATA +ORDIMAGE.GETMIMETYPE +ORDIMAGE.GETPROPERTIES +ORDIMAGE.GETSOURCE +ORDIMAGE.GETSOURCELOCATION +ORDIMAGE.GETSOURCENAME +ORDIMAGE.GETSOURCETYPE +ORDIMAGE.GETUPDATETIME +ORDIMAGE.GETWIDTH +ORDIMAGE.IMPORT +ORDIMAGE.IMPORTFROM +ORDIMAGE.INIT +ORDIMAGE.ISLOCAL +ORDIMAGE.OPENSOURCE +ORDIMAGE.ORDIMAGE +ORDIMAGE.PROCESS +ORDIMAGE.PROCESSCOPY +ORDIMAGE.PROCESSSOURCECOMMAND +ORDIMAGE.PUTMETADATA +ORDIMAGE.READFROMSOURCE +ORDIMAGE.SETLOCAL +ORDIMAGE.SETMIMETYPE +ORDIMAGE.SETPROPERTIES +ORDIMAGE.SETSOURCE +ORDIMAGE.SETUPDATETIME +ORDIMAGE.TRIMSOURCE +ORDIMAGE.WRITETOSOURCE +ORDIMAGECONSTANTS. +ORDIMAGEEXCEPTIONS. +ORDIMAGESIEXCEPTIONS. +ORDIMAGESIGNATURE.EVALUATESCORE +ORDIMAGESIGNATURE.GENERATESIGNATURE +ORDIMAGESIGNATURE.INIT +ORDIMAGESIGNATURE.ISSIMILAR +ORDIMERRORCODES. +ORDIMERRORCODES.RAISEEXCEPTIONWITHMSG +ORDIMERRORCODES.RAISEEXCEPTIONWITHMSG2 +ORDIMGEXTCODEC_PKG. +ORDIMGEXTCODEC_PKG.MMTK_EXT_PROCESS +ORDIMGEXTCODEC_PKG.MMTK_GETPROPERTIES +ORDIMGEXTCODEC_PKG.MMTK_PROCESS +ORDIMGSIG_PKG. +ORDIMGSIG_PKG.GENERATESIGNATUREFUNC +ORDIMGSI_PKG. +ORDIMGSI_PKG.COMPUTESCORE +ORDIMGSI_PKG.EXTRACT_ALLPROPERTIES +ORDIMGSI_PKG.EXTRACT_ALLPROPERTIES_FUNC +ORDIMGSI_PKG.GETSCORE +ORDIMGSI_PKG.SI_DERIVETHUMBNAIL +ORDIMGSI_PKG.SI_ISSUPPORTEDFORMATCONV +ORDIMGSI_PKG.SI_ISVALIDSTR +ORDIMGSI_PKG.SI_SUPPORTEDFORMAT +ORDIMGSI_PKG.SI_SUPPORTEDTHUMBNAIL +ORDIMG_PKG. +ORDIMG_PKG.APPLYWATERMARK +ORDIMG_PKG.BUILDXMLATTRIBUTES +ORDIMG_PKG.BUILDXMLDOC +ORDIMG_PKG.CHECKGETMETAARGS +ORDIMG_PKG.CHECKPROPERTIES +ORDIMG_PKG.CHECKPUTMETAARGS +ORDIMG_PKG.COPY +ORDIMG_PKG.COPYCONTENT +ORDIMG_PKG.FREETEMPLOB +ORDIMG_PKG.GETDICOMMETADATA +ORDIMG_PKG.GETHEADERLESSINFO +ORDIMG_PKG.GETIMAGEPROPERTIES +ORDIMG_PKG.GETMETADATA +ORDIMG_PKG.IMAGECONVERT +ORDIMG_PKG.IMPORT +ORDIMG_PKG.IMPORTFROM +ORDIMG_PKG.LARGEIMAGECONVERT +ORDIMG_PKG.ORDIMGB_APPLYWATERMARK +ORDIMG_PKG.ORDIMGB_PROCESS +ORDIMG_PKG.ORDIMGB_SETPROPERTIES +ORDIMG_PKG.ORDIMGF_APPLYWATERMARK +ORDIMG_PKG.ORDIMGF_PROCESSCOPY +ORDIMG_PKG.ORDIMGF_SETPROPERTIES +ORDIMG_PKG.ORDIMG_HEADERLESSSETPROPERTIES +ORDIMG_PKG.PACKMETADATAVECTOR +ORDIMG_PKG.PROCESS +ORDIMG_PKG.PROCESSCOPY +ORDIMG_PKG.PUTMETADATA +ORDIMG_PKG.SETDEBUGLEVEL +ORDIMG_PKG.SETPROPERTIES +ORDINAL +ORDPLSGWYUTIL. +ORDPLSGWYUTIL.CACHE_IS_VALID +ORDPLSGWYUTIL.RESOURCE_NOT_FOUND +ORDPLSGWYUTIL.SET_LAST_MODIFIED +ORDSOURCE.CLEARLOCAL +ORDSOURCE.CLOSE +ORDSOURCE.DELETELOCALCONTENT +ORDSOURCE.EXPORT +ORDSOURCE.GETBFILE +ORDSOURCE.GETCONTENTINTEMPLOB +ORDSOURCE.GETCONTENTLENGTH +ORDSOURCE.GETLOCALCONTENT +ORDSOURCE.GETSOURCEADDRESS +ORDSOURCE.GETSOURCEINFORMATION +ORDSOURCE.GETSOURCELOCATION +ORDSOURCE.GETSOURCENAME +ORDSOURCE.GETSOURCETYPE +ORDSOURCE.GETUPDATETIME +ORDSOURCE.IMPORT +ORDSOURCE.IMPORTFROM +ORDSOURCE.ISLOCAL +ORDSOURCE.OPEN +ORDSOURCE.PROCESSCOMMAND +ORDSOURCE.READ +ORDSOURCE.SETLOCAL +ORDSOURCE.SETSOURCEINFORMATION +ORDSOURCE.SETUPDATETIME +ORDSOURCE.TRIM +ORDSOURCE.WRITE +ORDSOURCEEXCEPTIONS. +ORDUTIL. +ORDUTIL.GETAUDIOPKGNAME +ORDUTIL.GETDICOMVALIDATION +ORDUTIL.GETDOCPKGNAME +ORDUTIL.GETSOURCEPKGNAME +ORDUTIL.GETVIDEOPKGNAME +ORDUTIL.SETDICOMVALIDATION +ORDUTIL_PRV. +ORDUTIL_PRV.RECORDFEATUREUSAGE +ORDVIDEO.APPENDTOCOMMENTS +ORDVIDEO.CHECKPROPERTIES +ORDVIDEO.CLEARLOCAL +ORDVIDEO.CLOSESOURCE +ORDVIDEO.COMPARECOMMENTS +ORDVIDEO.COPYCOMMENTSOUT +ORDVIDEO.DELETECOMMENTS +ORDVIDEO.DELETECONTENT +ORDVIDEO.ERASEFROMCOMMENTS +ORDVIDEO.EXPORT +ORDVIDEO.GETALLATTRIBUTES +ORDVIDEO.GETATTRIBUTE +ORDVIDEO.GETBFILE +ORDVIDEO.GETBITRATE +ORDVIDEO.GETCOMMENTLENGTH +ORDVIDEO.GETCOMPRESSIONTYPE +ORDVIDEO.GETCONTENT +ORDVIDEO.GETCONTENTINLOB +ORDVIDEO.GETCONTENTLENGTH +ORDVIDEO.GETDESCRIPTION +ORDVIDEO.GETFORMAT +ORDVIDEO.GETFRAMERATE +ORDVIDEO.GETFRAMERESOLUTION +ORDVIDEO.GETFRAMESIZE +ORDVIDEO.GETMIMETYPE +ORDVIDEO.GETNUMBEROFCOLORS +ORDVIDEO.GETNUMBEROFFRAMES +ORDVIDEO.GETPROPERTIES +ORDVIDEO.GETSOURCE +ORDVIDEO.GETSOURCELOCATION +ORDVIDEO.GETSOURCENAME +ORDVIDEO.GETSOURCEOBJECT +ORDVIDEO.GETSOURCETYPE +ORDVIDEO.GETUPDATETIME +ORDVIDEO.GETVIDEODURATION +ORDVIDEO.IMPORT +ORDVIDEO.IMPORTFROM +ORDVIDEO.INIT +ORDVIDEO.ISLOCAL +ORDVIDEO.LOADCOMMENTSFROMFILE +ORDVIDEO.LOCATEINCOMMENTS +ORDVIDEO.OPENSOURCE +ORDVIDEO.ORDVIDEO +ORDVIDEO.PROCESSSOURCECOMMAND +ORDVIDEO.PROCESSVIDEOCOMMAND +ORDVIDEO.READFROMCOMMENTS +ORDVIDEO.READFROMSOURCE +ORDVIDEO.SETBITRATE +ORDVIDEO.SETCOMPRESSIONTYPE +ORDVIDEO.SETDESCRIPTION +ORDVIDEO.SETFORMAT +ORDVIDEO.SETFRAMERATE +ORDVIDEO.SETFRAMERESOLUTION +ORDVIDEO.SETFRAMESIZE +ORDVIDEO.SETKNOWNATTRIBUTES +ORDVIDEO.SETLOCAL +ORDVIDEO.SETMIMETYPE +ORDVIDEO.SETNUMBEROFCOLORS +ORDVIDEO.SETNUMBEROFFRAMES +ORDVIDEO.SETPROPERTIES +ORDVIDEO.SETSOURCE +ORDVIDEO.SETUPDATETIME +ORDVIDEO.SETVIDEODURATION +ORDVIDEO.TRIMCOMMENTS +ORDVIDEO.TRIMSOURCE +ORDVIDEO.WRITETOCOMMENTS +ORDVIDEO.WRITETOSOURCE +ORDVIDEOEXCEPTIONS. +ORDVIDEO_PKG. +ORDVIDEO_PKG.CHECKPROPERTIES +ORDVIDEO_PKG.GETALLATTRIBUTES +ORDVIDEO_PKG.GETATTRIBUTE +ORDVIDEO_PKG.GETATTRIBUTES +ORDVIDEO_PKG.GETATTRIBUTESFROMLOCAL +ORDVIDEO_PKG.GETSUPPORTEDMIMETYPE +ORDVIDEO_PKG.PROCESSCOMMAND +ORDVIDEO_PKG.SETOUTPUTTONULL +ORDVIDEO_PKG.SETOUTPUTTOSTATUS +ORDVIDEO_PKG.SETOUTPUTTOTRACE +ORDVIDEO_PKG.SETOUTPUTTOVERBOSE +ORDVIDEO_PKG.SETPROPERTIES +ORDX_DEFAULT_AUDIO. +ORDX_DEFAULT_AUDIO.CHECKPROPERTIES +ORDX_DEFAULT_AUDIO.GETALLATTRIBUTES +ORDX_DEFAULT_AUDIO.GETATTRIBUTE +ORDX_DEFAULT_AUDIO.PROCESSCOMMAND +ORDX_DEFAULT_AUDIO.SETPROPERTIES +ORDX_DEFAULT_DOC. +ORDX_DEFAULT_DOC.SETPROPERTIES +ORDX_DEFAULT_VIDEO. +ORDX_DEFAULT_VIDEO.CHECKPROPERTIES +ORDX_DEFAULT_VIDEO.GETALLATTRIBUTES +ORDX_DEFAULT_VIDEO.GETATTRIBUTE +ORDX_DEFAULT_VIDEO.PROCESSCOMMAND +ORDX_DEFAULT_VIDEO.SETPROPERTIES +ORDX_FILE_SOURCE. +ORDX_FILE_SOURCE.CLOSE +ORDX_FILE_SOURCE.EXPORT +ORDX_FILE_SOURCE.GETCONTENTLENGTH +ORDX_FILE_SOURCE.GETSOURCEADDRESS +ORDX_FILE_SOURCE.IMPORT +ORDX_FILE_SOURCE.IMPORTFROM +ORDX_FILE_SOURCE.OPEN +ORDX_FILE_SOURCE.PROCESSCOMMAND +ORDX_FILE_SOURCE.READ +ORDX_FILE_SOURCE.TRIM +ORDX_FILE_SOURCE.WRITE +ORDX_HTTP_SOURCE. +ORDX_HTTP_SOURCE.CLOSE +ORDX_HTTP_SOURCE.EXPORT +ORDX_HTTP_SOURCE.GETCONTENTLENGTH +ORDX_HTTP_SOURCE.GETSOURCEADDRESS +ORDX_HTTP_SOURCE.IMPORT +ORDX_HTTP_SOURCE.IMPORTFROM +ORDX_HTTP_SOURCE.OPEN +ORDX_HTTP_SOURCE.PROCESSCOMMAND +ORDX_HTTP_SOURCE.READ +ORDX_HTTP_SOURCE.TRIM +ORDX_HTTP_SOURCE.WRITE +ORD_ADMIN. +ORD_ADMIN.MOVE_ORDIM_TBLSPC +ORD_DATASOURCE_PKG. +ORD_DATASOURCE_PKG.EXPORT +ORD_DATASOURCE_PKG.IMPORTFROM +ORD_DICOM. +ORD_DICOM.CREATEDICOMIMAGE +ORD_DICOM.EXPORT +ORD_DICOM.EXTRACTMETADATA +ORD_DICOM.GETDICTIONARYTAG +ORD_DICOM.GETMAPPINGXPATH +ORD_DICOM.IMPORTFROM +ORD_DICOM.ISANONYMOUS +ORD_DICOM.ISCONFORMANCEVALID +ORD_DICOM.MAKEANONYMOUS +ORD_DICOM.PROCESSCOPY +ORD_DICOM.SETDATAMODEL +ORD_DICOM.WRITEMETADATA +ORD_DICOM_ADMIN. +ORD_DICOM_ADMIN.DELETEDOCUMENT +ORD_DICOM_ADMIN.EDITDATAMODEL +ORD_DICOM_ADMIN.EXPORTDATAMODEL +ORD_DICOM_ADMIN.EXPORTDOCUMENT +ORD_DICOM_ADMIN.GENERATETAGLISTDOCUMENT +ORD_DICOM_ADMIN.GETDOCUMENTCONTENT +ORD_DICOM_ADMIN.IMPORTDATAMODEL +ORD_DICOM_ADMIN.INSERTDOCUMENT +ORD_DICOM_ADMIN.PUBLISHDATAMODEL +ORD_DICOM_ADMIN.ROLLBACKDATAMODEL +ORD_DICOM_ADMIN_PRV. +ORD_DICOM_ADMIN_PRV.DELETEANYDOC +ORD_DICOM_ADMIN_PRV.DELETEDOCUMENT +ORD_DICOM_ADMIN_PRV.EDITDATAMODEL +ORD_DICOM_ADMIN_PRV.GENERATETAGLISTDOCUMENT +ORD_DICOM_ADMIN_PRV.GETDICTIONARYTAG +ORD_DICOM_ADMIN_PRV.GETDOCUMENTCONTENT +ORD_DICOM_ADMIN_PRV.GETMAPPINGXPATH +ORD_DICOM_ADMIN_PRV.GETNEWLOCK +ORD_DICOM_ADMIN_PRV.GETPREFERENCEVALUE +ORD_DICOM_ADMIN_PRV.HASDOCUMENT +ORD_DICOM_ADMIN_PRV.IMPORTDATAMODEL +ORD_DICOM_ADMIN_PRV.INSERTDOCUMENT +ORD_DICOM_ADMIN_PRV.ISCONSTRAINT +ORD_DICOM_ADMIN_PRV.ISCOVEREDBYSTL +ORD_DICOM_ADMIN_PRV.ISDATAMODELLOADED +ORD_DICOM_ADMIN_PRV.ISDOCUMENT +ORD_DICOM_ADMIN_PRV.ISOWNLOCK +ORD_DICOM_ADMIN_PRV.PUBLISHDATAMODEL +ORD_DICOM_ADMIN_PRV.RELEASEDATAMODELLOCK +ORD_DICOM_ADMIN_PRV.ROLLBACKDATAMODEL +ORD_DICOM_ADMIN_PRV.SETDATAMODEL +ORD_DICOM_CT. +ORD_DICOM_CT.DELETECT +ORD_DICOM_CT.INSERTCT +ORD_DICOM_CT.UPDATECT +ORD_DICOM_PKG. +ORD_DICOM_PKG.CHECKFEATUREENABLED +ORD_DICOM_PKG.CREATEDICOMIMAGE +ORD_DICOM_PKG.GETDICOMPROPERTIES +ORD_DICOM_PKG.HASDOCUMENT +ORD_DICOM_PKG.ISANONYMOUS +ORD_DICOM_PKG.ISCONFORMANCEVALID +ORD_DICOM_PKG.ISCONSTRAINT +ORD_DICOM_PKG.ISDOCUMENT +ORD_DICOM_PKG.ISIMAGELOCAL +ORD_DICOM_PKG.MAKEANONYMOUS +ORD_DICOM_PKG.PROCESSCOPY +ORD_DICOM_PKG.WRITEMETADATA +ORGANIZATION_ID +ORIGIN +ORIGINAL +ORIGINAL_CAPTURE_NAME +ORIGINAL_CAPTURE_STATUS +ORIGINAL_INPRATE_BYTES +ORIGINAL_INPRATE_BYTES_DISPLAY +ORIGINAL_INPUT_BYTES +ORIGINAL_INPUT_BYTES_DISPLAY +ORIGINAL_NAME +ORIGINAL_PROPAGATION_NAME +ORIGINAL_QUEUE_NAME +ORIGINAL_QUEUE_OWNER +ORIGINAL_RULE_CONDITION +ORIGINAL_SOURCE_QUEUE_NAME +ORIGINAL_SOURCE_QUEUE_OWNER +ORIGINAL_STREAMS_NAME +ORIGINATING_TIMESTAMP +ORIG_CONSUMER_GROUP_ID +OR_EXPAND +OSB_ALLOCATED +OSID +OSPID +OSSTAT_ID +OSUSER +OS_GRANTED +OS_HOST +OS_ID +OS_MB +OS_NAME +OS_PRIVILEGE +OS_PROCESS +OS_PROCESS_ID +OS_TERMINAL +OS_USER +OS_USERNAME +OS_USER_NAME +OTHER +OTHER_REQUESTS +OTHER_SCHEMAS +OTHER_TAG +OTHER_XML +OUTBD_TIMOUT +OUTER +OUTER_JOIN_TO_INNER +OUTER_TABLE_COLUMN +OUTER_TABLE_NAME +OUTER_TABLE_OWNER +OUTLINE +OUTLINE_CATEGORY +OUTLINE_LEAF +OUTLINE_MISMATCH +OUTLINE_SID +OUTLN_EDIT_PKG. +OUTLN_EDIT_PKG.CHANGE_JOIN_POS +OUTLN_EDIT_PKG.CREATE_EDIT_TABLES +OUTLN_EDIT_PKG.DROP_EDIT_TABLES +OUTLN_EDIT_PKG.GENERATE_SIGNATURE +OUTLN_EDIT_PKG.REFRESH_PRIVATE_OUTLINE +OUTLN_PKG. +OUTLN_PKG.CLEAR_USED +OUTLN_PKG.CREATE_OUTLINE +OUTLN_PKG.DROP_BY_CAT +OUTLN_PKG.DROP_COLLISION +OUTLN_PKG.DROP_COLLISION_EXPACT +OUTLN_PKG.DROP_EXTRAS +OUTLN_PKG.DROP_EXTRAS_EXPACT +OUTLN_PKG.DROP_UNREFD_HINTS +OUTLN_PKG.DROP_UNREFD_HINTS_EXPACT +OUTLN_PKG.DROP_UNUSED +OUTLN_PKG.EXACT_TEXT_SIGNATURES +OUTLN_PKG.REFRESH_OUTLINE_CACHE +OUTLN_PKG.REFRESH_OUTLINE_CACHE_EXPACT +OUTLN_PKG.UPDATE_BY_CAT +OUTLN_PKG.UPDATE_SIGNATURES +OUTPUT +OUTPUT_BYTES +OUTPUT_BYTES_DISPLAY +OUTPUT_BYTES_PER_SEC +OUTPUT_BYTES_PER_SEC_DISPLAY +OUTPUT_DEVICE_TYPE +OUTPUT_RATE_BYTES +OUTPUT_RATE_BYTES_DISPLAY +OUTPUT_ROWS +OUT_ARGUMENT +OUT_NET +OVERFLOW_NOMOVE +OVERHEAD_MICROSEC +OVERLAP_TIME_MISMATCH +OVERLOAD +OVERRIDE_SOLVE_SPEC +OVERRIDING +OVERSPILLED_MSGS +OWA. +OWA.GET_LINE +OWA.GET_PAGE +OWA.GET_PAGE_CHARSET_CONVERT +OWA.GET_PAGE_RAW +OWA.INITIALIZE +OWA.INIT_CGI_ENV +OWA.RESET_GET_PAGE +OWA.SET_PASSWORD +OWA.SET_TRANSFER_MODE +OWA.SET_USER_ID +OWA_CACHE. +OWA_CACHE.DISABLE +OWA_CACHE.GET_ETAG +OWA_CACHE.GET_LEVEL +OWA_CACHE.INIT +OWA_CACHE.SET_CACHE +OWA_CACHE.SET_EXPIRES +OWA_CACHE.SET_NOT_MODIFIED +OWA_CACHE.SET_SURROGATE_CONTROL +OWA_COOKIE. +OWA_COOKIE.GET +OWA_COOKIE.GET_ALL +OWA_COOKIE.INIT +OWA_COOKIE.REMOVE +OWA_COOKIE.SEND +OWA_CUSTOM. +OWA_CUSTOM.AUTHORIZE +OWA_CX. +OWA_IMAGE. +OWA_IMAGE.GET_X +OWA_IMAGE.GET_Y +OWA_MATCH. +OWA_MATCH.MATCH_PATTERN +OWA_OPT_LOCK. +OWA_OPT_LOCK.CHECKSUM +OWA_OPT_LOCK.GET_ROWID +OWA_OPT_LOCK.STORE_VALUES +OWA_OPT_LOCK.VERIFY_VALUES +OWA_PATTERN. +OWA_PATTERN.AMATCH +OWA_PATTERN.CHANGE +OWA_PATTERN.GETPAT +OWA_PATTERN.MATCH +OWA_SEC. +OWA_SEC.GET_CLIENT_HOSTNAME +OWA_SEC.GET_CLIENT_IP +OWA_SEC.GET_PASSWORD +OWA_SEC.GET_USER_ID +OWA_SEC.SET_AUTHORIZATION +OWA_SEC.SET_PROTECTION_REALM +OWA_TEXT. +OWA_TEXT.ADD2MULTI +OWA_TEXT.NEW_MULTI +OWA_TEXT.NEW_ROW_LIST +OWA_TEXT.PRINT_MULTI +OWA_TEXT.PRINT_ROW_LIST +OWA_TEXT.STREAM2MULTI +OWA_UTIL. +OWA_UTIL.BIND_VARIABLES +OWA_UTIL.CALENDARPRINT +OWA_UTIL.CELLSPRINT +OWA_UTIL.CHOOSE_DATE +OWA_UTIL.COMMA_TO_IDENT_ARR +OWA_UTIL.DESCRIBE_COLS +OWA_UTIL.GET_CGI_ENV +OWA_UTIL.GET_OWA_SERVICE_PATH +OWA_UTIL.GET_PROCEDURE +OWA_UTIL.GET_VERSION +OWA_UTIL.HTTP_HEADER_CLOSE +OWA_UTIL.ITE +OWA_UTIL.LISTPRINT +OWA_UTIL.MIME_HEADER +OWA_UTIL.NAME_RESOLVE +OWA_UTIL.PATH_TO_ME +OWA_UTIL.PRINT_CGI_ENV +OWA_UTIL.PRINT_VERSION +OWA_UTIL.REDIRECT_URL +OWA_UTIL.RESOLVE_TABLE +OWA_UTIL.SHOWPAGE +OWA_UTIL.SHOWSOURCE +OWA_UTIL.SHOW_QUERY_COLUMNS +OWA_UTIL.SIGNATURE +OWA_UTIL.STATUS_LINE +OWA_UTIL.TABLECAPTION +OWA_UTIL.TABLECLOSE +OWA_UTIL.TABLEDATA +OWA_UTIL.TABLEHEADER +OWA_UTIL.TABLEHEADERROWCLOSE +OWA_UTIL.TABLEHEADERROWOPEN +OWA_UTIL.TABLENODATA +OWA_UTIL.TABLEOPEN +OWA_UTIL.TABLEPRINT +OWA_UTIL.TABLEROWCLOSE +OWA_UTIL.TABLEROWOPEN +OWA_UTIL.TODATE +OWA_UTIL.WHO_CALLED_ME +OWM_9IP_PKG. +OWM_9IP_PKG.SETACTIVETIMEFORDML +OWM_ASSERT_PKG. +OWM_ASSERT_PKG.ASSERT +OWM_ASSERT_PKG.ASSERT_WS +OWM_ASSERT_PKG.ASSERT_WS_NEQ +OWM_ASSERT_PKG.NOOP +OWM_BULK_LOAD_PKG. +OWM_BULK_LOAD_PKG.BEGINBULKLOADING +OWM_BULK_LOAD_PKG.CHECKFORBULKLOADING +OWM_BULK_LOAD_PKG.ENDBULKLOADING +OWM_BULK_LOAD_PKG.EXISTSTABLE +OWM_BULK_LOAD_PKG.FIXOWMCOLSWHIST +OWM_BULK_LOAD_PKG.GETBULKLOADVERSION +OWM_BULK_LOAD_PKG.ISBEINGBULKLOADED +OWM_BULK_LOAD_PKG.PURGETABLE +OWM_BULK_LOAD_PKG.ROLLBACKBULKLOADING +OWM_BULK_LOAD_PKG.SETLTLOCKINFO +OWM_DDL_PKG. +OWM_DDL_PKG.BEGINDDL +OWM_DDL_PKG.COMMITDDL +OWM_DDL_PKG.COMPAREINDEXPROPERTIES +OWM_DDL_PKG.CREATERICVIEWS +OWM_DDL_PKG.DROPVIEWS +OWM_DDL_PKG.GETORIGINALDDL +OWM_DDL_PKG.GETUCDETAILS +OWM_DDL_PKG.HAVEIDENTICALCOLUMNS +OWM_DDL_PKG.RECREATEINSTOFTRIGS +OWM_DDL_PKG.RECREATEVIEWS +OWM_DDL_PKG.ROLLBACKDDL +OWM_IEXP_PKG. +OWM_IEXP_PKG.EXPORT +OWM_IEXP_PKG.IMPORT +OWM_IEXP_PKG.WMFLAGENCODE +OWM_MIG_PKG. +OWM_MIG_PKG.ALLFIXSENTINELVERSION +OWM_MIG_PKG.ALLLWDISABLEVERSIONING +OWM_MIG_PKG.ALLLWENABLEVERSIONING +OWM_MIG_PKG.ALLROLLBACKFIXSENTINELVERSION +OWM_MIG_PKG.DGHISTORYCOLUMNS_INTERNAL +OWM_MIG_PKG.DGPRIMARYKEYINDEX +OWM_MIG_PKG.DISABLEVERSIONTOPOINDEXTABLES +OWM_MIG_PKG.ENABLEVERSIONTOPOINDEXTABLES +OWM_MIG_PKG.FIXAUXPKCONSTRAINT +OWM_MIG_PKG.FIXCRWORKSPACES +OWM_MIG_PKG.FIXPKCONSTRAINT +OWM_MIG_PKG.LWDISABLEVERSIONING +OWM_MIG_PKG.LWENABLEVERSIONING +OWM_MIG_PKG.MOVEWMMETADATA +OWM_MIG_PKG.RECOMPILEALLOBJECTS +OWM_MIG_PKG.RECOMPILETABLEOBJECTS +OWM_MIG_PKG.RECOVERMIGRATINGTABLE +OWM_MIG_PKG.RENAMESAVEPOINT +OWM_MIG_PKG.RENAMEWORKSPACE +OWM_MIG_PKG.ROLLBACKFIXCRWORKSPACES +OWM_MIG_PKG.UPGRADEHISTORYCOLUMNS +OWM_MP_PKG. +OWM_MP_PKG.ADDASPARENTWORKSPACE +OWM_MP_PKG.CREATEIMPLICITSPINGRAPH +OWM_MP_PKG.EXISTSMPWORKSPACE +OWM_MP_PKG.GETGRAPHNODES +OWM_MP_PKG.GETNCA +OWM_MP_PKG.ISMPWORKSPACE +OWM_MP_PKG.REMOVEASPARENTWORKSPACE +OWM_MP_PKG.SETGRAPHPOSTVERSION +OWM_MP_PKG.SETMPPARAMETER +OWM_REPUTIL. +OWM_REPUTIL.CHECKFORERRORS +OWM_REPUTIL.CHECKVERSIONCOMPATIBILITY +OWM_REPUTIL.CREATEDEFINERSRIGHTSPROCGRP +OWM_REPUTIL.DELETEBASEMETADATAROWS +OWM_REPUTIL.DISABLEREPLICATIONSUPPORT +OWM_REPUTIL.DISABLEVERSIONING +OWM_REPUTIL.DROPDEFINERSRIGHTSPROCGRP +OWM_REPUTIL.DROPREPLICATIONSUPPORT +OWM_REPUTIL.ENABLEREPLICATIONSUPPORT +OWM_REPUTIL.ENABLEVERSIONING +OWM_REPUTIL.GENERATEREPLICATIONSUPPORT +OWM_REPUTIL.GETREPLICATIONDETAILS +OWM_REPUTIL.POPULATEBASEMETADATAROWS +OWM_REPUTIL.REGENERATEREPLICATIONSUPPORT +OWM_REPUTIL.RELOCATEWRITERSITE +OWM_REPUTIL.SYNCHRONIZESITE +OWM_VT_PKG. +OWM_VT_PKG.WM_CONTAINS +OWM_VT_PKG.WM_EQUALS +OWM_VT_PKG.WM_GREATERTHAN +OWM_VT_PKG.WM_INTERSECTION +OWM_VT_PKG.WM_LDIFF +OWM_VT_PKG.WM_LESSTHAN +OWM_VT_PKG.WM_MEETS +OWM_VT_PKG.WM_OVERLAPS +OWM_VT_PKG.WM_RDIFF +OWNED +OWNER +OWNERID +OWNER_ID +OWNER_INCARNATION +OWNER_INSTANCE +OWNER_NAME +OWNER_NODE +OWNER_NUMBER +OWNING_PROCESS +OWNTIME +P1RAW +P1TEXT +P1_TEXT +P2RAW +P2TEXT +P2_TEXT +P3RAW +P3TEXT +P3_TEXT +PACKAGE +PACKAGE_CNT +PACKAGE_ID +PACKAGE_NAME +PACKAGE_PREFIX +PACKETS_RECEIVED +PACKETS_SENT +PADDR +PAGESPACES +PARADDR +PARALLEL +PARALLELISM +PARALLEL_DEGREE_LIMIT_MTH +PARALLEL_DEGREE_LIMIT_P1 +PARALLEL_EXECUTION_MANAGED +PARALLEL_INDEX +PARALLEL_LEVEL +PARALLEL_QUEUE_TIMEOUT +PARALLEL_SERVERS_ACTIVE +PARALLEL_SERVERS_TOTAL +PARALLEL_TARGET_PERCENTAGE +PARAMETER +PARAMETER1 +PARAMETER2 +PARAMETER3 +PARAMETERS +PARAMETER_COLUMN_NAME +PARAMETER_FLAGS +PARAMETER_HASH +PARAMETER_ID +PARAMETER_NAME +PARAMETER_SEQUENCE_NO +PARAMETER_TABLE_NAME +PARAMETER_TYPE +PARAMETER_TYPE# +PARAMETER_VALUE +PARAM_INDEX +PARAM_MODE +PARAM_NAME +PARAM_NO +PARAM_TYPE_MOD +PARAM_TYPE_NAME +PARAM_TYPE_OWNER +PARAM_VALUE +PARENT +PARENTSEQ +PARENTSLT +PARENTUSN +PARENT_CLASS_NAME +PARENT_CLASS_TARGET_NAMESPACE +PARENT_EDITION_NAME +PARENT_HANDLE +PARENT_HEAP_DESCRIPTOR +PARENT_ID +PARENT_IDX +PARENT_INDEX +PARENT_LEVEL_NAME +PARENT_LOCK +PARENT_NAME +PARENT_OBJECT_NAME +PARENT_OBJECT_OWNER +PARENT_OBJECT_TYPE +PARENT_RECID +PARENT_REC_ID +PARENT_REC_IDS +PARENT_RXEC_ID +PARENT_SCAN_ID +PARENT_STAMP +PARENT_TABLE_COLUMN +PARENT_TABLE_NAME +PARENT_TABLE_PARTITION +PARENT_TASK_ID +PARENT_TYPE +PARENT_XID +PARENT_XIDSLT +PARENT_XIDSQN +PARENT_XIDUSN +PARITY_PERIOD +PARITY_POS +PARM_VALUE +PARSED_SIZE +PARSEPARAMS. +PARSE_CALLS +PARSE_CALLS_DELTA +PARSE_CALLS_TOTAL +PARSE_TIME +PARSING_SCHEMA_ID +PARSING_SCHEMA_NAME +PARSING_USER_ID +PARTITION +PARTITIONED +PARTITIONING +PARTITIONING_KEY_COUNT +PARTITIONING_TYPE +PARTITIONOBJ# +PARTITION_COUNT +PARTITION_DIMENSION_NAME +PARTITION_HIERARCHY_NAME +PARTITION_ID +PARTITION_LEVEL_NAME +PARTITION_NAME +PARTITION_POS. +PARTITION_POSITION +PARTITION_START +PARTITION_STOP +PARTITION_TYPE +PARTNAME +PART_NAME +PASSWORD +PASSWORD_REQUIRED +PASSWORD_VERSIONS +PATH +PATH_ID +PATH_NAME +PATH_OF_CONNECT_ROLE_GRANT +PATH_TABLE_NAME +PATTERN +PAUSE +PAUSE_BEFORE +PAUSE_TIME +PAYLOAD_CALLBACK +PBREAK. +PBREAK.CLEAR_DEBUG +PBREAK.DEBUG_MESSAGE +PBREAK.DELETE_BREAKPOINT +PBREAK.DISABLE_BREAKPOINT +PBREAK.ENABLE_BREAKPOINT +PBREAK.GENERATE_TIDL +PBREAK.GET_CURRENT_EVENT +PBREAK.GET_CURRENT_INFO +PBREAK.GET_DEBUG_FLAGS +PBREAK.GET_INDEXES +PBREAK.GET_LINE_MAP +PBREAK.GET_NUMERIC_OPTION +PBREAK.GET_SCALAR +PBREAK.INTERNAL_VERSION_CHECK +PBREAK.IS_EXECUTABLE +PBREAK.PIPE_CUTTER +PBREAK.PRINT_BACKTRACE +PBREAK.PRINT_BREAKPOINTS +PBREAK.PRINT_FRAME_SOURCE +PBREAK.PRINT_SOURCE +PBREAK.READ_INTO_TABLE +PBREAK.READ_PIPE +PBREAK.READ_WORD +PBREAK.SET_BREAK_LINE +PBREAK.SET_DEBUG +PBREAK.SET_DEBUG_FLAGS +PBREAK.SET_NUMERIC_OPTION +PBREAK.SET_OER_BREAKPOINT +PBREAK.SET_VALUE +PBREAK.WRITE_PIPE +PBREAK.WRITE_REQUEST +PBREAK.WRITE_TABLE +PBRPH. +PBRPH.ATTACH +PBRPH.CONTINUE +PBRPH.DISPLAY_FRAME +PBRPH.EXECUTE +PBRPH.GET_CURRENT_INFO +PBRPH.GET_DEBUG_FLAGS +PBRPH.GET_INDEXES +PBRPH.GET_MORE_SOURCE +PBRPH.GET_PENDING_REQUEST +PBRPH.GET_SCALAR +PBRPH.LISTEN +PBRPH.PING +PBRPH.PRINT_BACKTRACE +PBRPH.PRINT_BREAKPOINTS +PBRPH.PRINT_FRAME_SOURCE +PBRPH.PRINT_INTO_TABLE +PBRPH.PRINT_SOURCE +PBRPH.PROCESS_REQUEST +PBRPH.SET_BREAK_LINE +PBRPH.SET_VALUE +PBRPH.SHUTDOWN +PBRPH.TARGET_PROGRAM_RUNNING +PBSDE. +PBSDE.DEBUG_LOOP +PBSDE.INIT +PBSDE.SHUTDOWN +PBUTL. +PCIRCUIT +PCTVERSION +PCT_COMPLETION_TIME +PCT_DIRECT_ACCESS +PCT_FREE +PCT_INCREASE +PCT_THRESHOLD +PCT_TOTAL_TIME +PCT_USED +PC_NAME +PC_NAME_HASH +PC_UNKNOWN +PDDL_ENV_MISMATCH +PDDL_STATUS +PDML_ENABLED +PDML_ENV_MISMATCH +PDML_STATUS +PEEKED +PENDQ +PEND_TABLE_NAME +PERCENTAGE_FOR_CATCHUP_MDEF +PERCENTAGE_FOR_CATCHUP_NEW +PERCENT_BLOCKS_COALESCED +PERCENT_DONE +PERCENT_EXTENTS_COALESCED +PERCENT_SPACE_RECLAIMABLE +PERCENT_SPACE_USED +PERC_ACTIVE_SESS +PERC_ACTIVE_SESSIONS +PERC_IMPACT +PERFORMANCE_CLASS +PERMISSIONS +PERSISTENT_MEM +PERSISTENT_RES +PERS_HEAP_MEM +PFDG_ID +PF_FUNCTION +PF_OWNER +PF_PACKAGE +PF_SCHEMA +PGA_ALLOCATED +PGA_ALLOC_MEM +PGA_FREEABLE_MEM +PGA_MAX_MEM +PGA_MEMORY +PGA_TARGET_FACTOR +PGA_TARGET_FOR_ESTIMATE +PGA_USED_MEM +PG_NAME +PHYBLKRD +PHYBLKREAD +PHYBLKWRITE +PHYBLKWRT +PHYRDS +PHYSICALREAD +PHYSICALWRITE +PHYSICAL_BLOCK_READS +PHYSICAL_BLOCK_WRITES +PHYSICAL_FILE +PHYSICAL_FILENAME +PHYSICAL_PATH +PHYSICAL_READS +PHYSICAL_READS_DELTA +PHYSICAL_READS_DIRECT_DELTA +PHYSICAL_READS_DIRECT_TOTAL +PHYSICAL_READS_TOTAL +PHYSICAL_READ_BYTES +PHYSICAL_READ_BYTES_DELTA +PHYSICAL_READ_BYTES_TOTAL +PHYSICAL_READ_PCT +PHYSICAL_READ_REQUESTS +PHYSICAL_READ_REQUESTS_DELTA +PHYSICAL_READ_REQUESTS_TOTAL +PHYSICAL_WRITES +PHYSICAL_WRITES_DELTA +PHYSICAL_WRITES_DIRECT_DELTA +PHYSICAL_WRITES_DIRECT_TOTAL +PHYSICAL_WRITES_TOTAL +PHYSICAL_WRITE_BYTES +PHYSICAL_WRITE_BYTES_DELTA +PHYSICAL_WRITE_BYTES_TOTAL +PHYSICAL_WRITE_REQUESTS +PHYSICAL_WRITE_REQUESTS_DELTA +PHYSICAL_WRITE_REQUESTS_TOTAL +PHYWRTS +PHY_IO +PID +PIDL. +PIDL.PTATTANM +PIDL.PTATTBTY +PIDL.PTATTCNT +PIDL.PTATTNNM +PIDL.PTATTRTY +PIDL.PTATTTYP +PIDL.PTGEND +PIDL.PTGEPT +PIDL.PTGES2 +PIDL.PTGES4 +PIDL.PTGETX +PIDL.PTGEU1 +PIDL.PTGEU2 +PIDL.PTGEU4 +PIDL.PTGSND +PIDL.PTG_ND +PIDL.PTG_PT +PIDL.PTG_S2 +PIDL.PTG_S4 +PIDL.PTG_TX +PIDL.PTG_U1 +PIDL.PTG_U2 +PIDL.PTG_U4 +PIDL.PTKIN +PIDL.PTP_ND +PIDL.PTP_PT +PIDL.PTP_S2 +PIDL.PTP_S4 +PIDL.PTP_TX +PIDL.PTP_U1 +PIDL.PTP_U2 +PIDL.PTP_U4 +PIDL.PTSLEN +PIECE +PIECE# +PIECES +PIECES_PER_SET +PIN1 +PIN10 +PIN100 +PIN1000 +PIN10000 +PING +PINGS +PINHITRATIO +PINHITS +PINNED_COMMITTED_TXN +PINNED_OBJECTS +PINNED_TOTAL +PINNED_TXN +PINS +PIN_COUNT +PIN_MODE +PIPELINED +PIPE_SIZE +PIV_GB +PIV_SSF +PKEXISTS +PKEY +PLACE_DISTINCT +PLACE_GROUP_BY +PLAN +PLAN_ATTRIBUTE +PLAN_BYTES +PLAN_CARDINALITY +PLAN_COST +PLAN_CPU_COST +PLAN_DEPTH +PLAN_HASH_VALUE +PLAN_ID +PLAN_IO_COST +PLAN_LINE_ID +PLAN_NAME +PLAN_OBJECT_NAME +PLAN_OBJECT_OWNER +PLAN_OBJECT_TYPE +PLAN_OPERATION +PLAN_OPTIONS +PLAN_PARENT_ID +PLAN_PARTITION_START +PLAN_PARTITION_STOP +PLAN_POSITION +PLAN_STATS +PLAN_TEMP_SPACE +PLAN_TIME +PLAN_TIMESTAMP +PLATFORM_ID +PLATFORM_NAME +PLITBLM. +PLITBLM.COUNT +PLITBLM.DELETE +PLITBLM.EXISTS +PLITBLM.EXTEND +PLITBLM.FIRST +PLITBLM.LAST +PLITBLM.LIMIT +PLITBLM.NEXT +PLITBLM.PRIOR +PLITBLM.TRIM +PLSCOPE_SETTINGS +PLSEXEC_TIME_DELTA +PLSEXEC_TIME_TOTAL +PLSQL_CCFLAGS +PLSQL_CMP_SWITCHS_DIFF +PLSQL_CODE_TYPE +PLSQL_DEBUG +PLSQL_ENTRY_OBJECT_ID +PLSQL_ENTRY_SUBPROGRAM_ID +PLSQL_EXEC_TIME +PLSQL_OBJECT_ID +PLSQL_OPTIMIZE_LEVEL +PLSQL_SUBPROGRAM_ID +PLSQL_WARNINGS +PLS_TYPE +PLUGGED_IN +PLUGGED_READONLY +PLUGIN_CHANGE# +PLUGIN_RESETLOGS_CHANGE# +PLUGIN_RESETLOGS_TIME +PNAME +PNUM +POLICY +POLICY_COLUMN +POLICY_COLUMN_OPTIONS +POLICY_EVENT +POLICY_FUNCTION_OWNER +POLICY_GROUP +POLICY_NAME +POLICY_OWNER +POLICY_TEXT +POLICY_TYPE +POOL +POOL_CHANGED_PAGES +POOL_HITS +POOL_MISSES +POOL_NAME +POOL_NEW_PAGES +POOL_RECLAIMED_PAGES +POOL_SIZE +POOL_UNCHANGED_PAGES +POPULATEPREDTAB. +PORT +POS +POSITION +POSITION_IN_SELECT +POSTCOST +POST_COMMIT_SCN +POWER +PQS_COMPLETED +PQS_QUEUED +PQ_ACTIVE +PQ_ACTIVE_TIME +PQ_DISTRIBUTE +PQ_MAP +PQ_NOMAP +PQ_QUEUED +PQ_QUEUED_TIME +PQ_QUEUE_TIME_OUTS +PQ_SERVERS_USED +PQ_SLAVE_MISMATCH +PQ_STATUS +PREBUILT +PRECEDENCE +PRECISION +PRECOMMIT_HANDLER +PRECOMPUTE_CONDITION +PRECOMPUTE_PERCENT +PRECOMPUTE_PERCENT_TOP +PRECOMPUTE_SUBQUERY +PRECOST +PREDEFINED +PREDICATE +PREDICATE_EVALUATION +PREFERENCE_NAME +PREFERENCE_VALUE +PREFERRED_READ +PREFIX_LENGTH +PREPARECOUNT +PREPARED_SCN +PREPARED_STATUS +PREPARED_WORK_SIZE +PREPARE_TIME +PRESENTATION +PRESERVED +PRESERVE_OID +PRESERVE_STATE +PREVIOUS_LOG_NAME +PREVIOUS_LOG_STATUS +PREVIOUS_MASTER +PREVIOUS_TIMESTAMP +PREV_BUFFERS +PREV_CHILD_NUMBER +PREV_DML_COMMAND +PREV_EXEC_ID +PREV_EXEC_START +PREV_HASH_VALUE +PREV_SIZE +PREV_SQL_ADDR +PREV_SQL_ID +PRIMARY_DBID +PRIMARY_DB_UNIQUE_NAME +PRIMARY_ID +PRIMARY_INSTANCE +PRIMARY_KEY +PRIMARY_KEY_VALUE +PRIMARY_PARENT_XID +PRIMARY_PARENT_XIDSLT +PRIMARY_PARENT_XIDSQN +PRIMARY_PARENT_XIDUSN +PRIMARY_REGION +PRIMARY_START_SCN +PRIMARY_START_TIME +PRIMARY_VOL +PRIMARY_XID +PRIMARY_XIDSLT +PRIMARY_XIDSQN +PRIMARY_XIDUSN +PRIMOP_BIND# +PRIMOP_NAME +PRIMOP_OWNER +PRINCIPAL +PRIORITY +PRIORITY_COMMENT +PRIORITY_GROUP +PRIORITY_OVERRIDE +PRIOR_INCARNATION# +PRIOR_RESETLOGS_CHANGE# +PRIOR_RESETLOGS_TIME +PRIVATE_JDBC. +PRIVATE_JDBC.GET_ALL_TYPE_SHAPE_INFO +PRIVATE_JDBC.GET_TYPE_SHAPE_INFO +PRIVATE_MAX_LEN +PRIVATE_RESULTS +PRIVILEGE +PRIVILEGE107_TAB$XD. +PRIVILEGE_ID +PRIVILEGE_LIST. +PRIVILEGE_NAME +PRIVILEGE_TARGET_NAMESPACE +PRIVILEGE_TYPE +PRIV_NUMBER +PRIV_USED +PRIV_USER +PROBED +PROBLEM_ID +PROBLEM_KEY +PROC +PROCEDURE +PROCEDURE_NAME +PROCEDURE_PREFIX +PROCESS +PROCESSED_CHANGE# +PROCESSED_LOW_POSITION +PROCESSED_LOW_TIME +PROCESSED_MESSAGE_NUMBER +PROCESSED_SCN +PROCESSED_TASKID +PROCESS_ID +PROCESS_NAME +PRODUCT +PRODUCT_STARTUP_TIME +PROFILE +PROGRAM +PROGRAM_ACTION +PROGRAM_ID +PROGRAM_LINE# +PROGRAM_NAME +PROGRAM_OWNER +PROGRAM_TYPE +PROGRESS_METRIC +PROJECTION +PROMPT_STRING +PROPAGATE_COMMENT +PROPAGATION_NAME +PROPAGATION_SOURCE_NAME +PROPAGATION_WINDOW +PROPERTY +PROPERTYNAME +PROPERTYVALUE +PROPERTY_NAME +PROPERTY_TYPE +PROPERTY_VALUE +PROPERTY_VALUE_LENGTH +PROP_NAME +PROP_UPDATES +PROP_VALUE +PROTECTION_LEVEL +PROTECTION_MODE +PROTOCOL +PROTOCOL_NUM +PROXY +PROXY_AUTHORITY +PROXY_NAME +PROXY_SERIAL +PROXY_SESSIONID +PROXY_SID +PROXY_SNAPADMIN +PROXY_SPID +PROXY_USER +PRVTPC. +PRVTTNPC. +PRVTTNPC.DROP_DEPENDENCIES +PRVTTNPC.GET_OBJ_ID +PRVTTNPC.INSERT_DEP_TABLE +PRVT_ACCESS_ADVISOR. +PRVT_ACCESS_ADVISOR.CHECK_WK_REF +PRVT_ACCESS_ADVISOR.CLEANUP_TASK +PRVT_ACCESS_ADVISOR.CREATE_TASK +PRVT_ACCESS_ADVISOR.CREATE_TASK_REPORT +PRVT_ACCESS_ADVISOR.DELETE_TASK +PRVT_ACCESS_ADVISOR.EXECUTE_TASK +PRVT_ACCESS_ADVISOR.GET_ACCESS_ADVISOR_DEFAULTS +PRVT_ACCESS_ADVISOR.GET_NEW_NAME +PRVT_ACCESS_ADVISOR.GET_REC_ATTRIBUTES +PRVT_ACCESS_ADVISOR.GET_TASK_SCRIPT +PRVT_ACCESS_ADVISOR.IMPLEMENT_TASK +PRVT_ACCESS_ADVISOR.PARAM_VALIDATE +PRVT_ACCESS_ADVISOR.QUICK_TUNE +PRVT_ACCESS_ADVISOR.RESET_TASK +PRVT_ACCESS_ADVISOR.RESUME_TASK +PRVT_ACCESS_ADVISOR.SETUP_PARAMETERS +PRVT_ACCESS_ADVISOR.SETUP_TEMPLATES +PRVT_ACCESS_ADVISOR.SYNONYM +PRVT_ACCESS_ADVISOR.TEST_API +PRVT_ACCESS_ADVISOR.THROW_ERROR +PRVT_ACCESS_ADVISOR.UPDATE_REC_ATTRIBUTES +PRVT_ADVISOR. +PRVT_ADVISOR.ADJUST_STRING +PRVT_ADVISOR.CANCEL_TASK +PRVT_ADVISOR.CHECK_ADV_ENABLED +PRVT_ADVISOR.CHECK_EXECUTION_STATUS +PRVT_ADVISOR.CHECK_EXPIRATION_COMP +PRVT_ADVISOR.CHECK_INITIAL +PRVT_ADVISOR.CHECK_MODIFY +PRVT_ADVISOR.CHECK_PACK_ENABLED +PRVT_ADVISOR.CHECK_TASK_ENABLED +PRVT_ADVISOR.CHECK_TEMPLATE +PRVT_ADVISOR.COMMON_DELETE_TASK +PRVT_ADVISOR.COMMON_EXECUTE_TASK +PRVT_ADVISOR.COMMON_RESET_TASK +PRVT_ADVISOR.CREATE_FILE +PRVT_ADVISOR.CREATE_OBJECT +PRVT_ADVISOR.CREATE_TASK +PRVT_ADVISOR.DELETE_DIRECTIVE +PRVT_ADVISOR.DELETE_EXPIRED_TASKS +PRVT_ADVISOR.DELETE_MESSAGE +PRVT_ADVISOR.DELETE_TASK +PRVT_ADVISOR.DELETE_USER_TASKS +PRVT_ADVISOR.EDIT +PRVT_ADVISOR.EVAL_DIRECTIVE +PRVT_ADVISOR.FETCH_ADVISOR +PRVT_ADVISOR.FINDING_NAME_EXISTS +PRVT_ADVISOR.FORMAT_MESSAGE +PRVT_ADVISOR.FORMAT_MESSAGE_GROUP +PRVT_ADVISOR.GATHER_STATISTICS +PRVT_ADVISOR.GENERATE_UNIQUE_NAME +PRVT_ADVISOR.GET_DB_VERSION +PRVT_ADVISOR.GET_DIRECTIVE_ID +PRVT_ADVISOR.GET_REC_ATTRIBUTES +PRVT_ADVISOR.GET_TASK_REPORT +PRVT_ADVISOR.GET_TASK_SCRIPT +PRVT_ADVISOR.HANDLE_LOCK +PRVT_ADVISOR.IMPLEMENT_TASK +PRVT_ADVISOR.INSERT_ADV_DEFINITION +PRVT_ADVISOR.INSERT_ADV_DIR_DEF +PRVT_ADVISOR.INSERT_DEF_EXECUTION_TYPE +PRVT_ADVISOR.INSERT_DEF_PARAMETER +PRVT_ADVISOR.INSERT_DIRECTIVE +PRVT_ADVISOR.INSERT_DIRECTIVE_I +PRVT_ADVISOR.INSERT_FINDING +PRVT_ADVISOR.INSERT_MESSAGE +PRVT_ADVISOR.INSERT_REC_ACT +PRVT_ADVISOR.INTERRUPT_TASK +PRVT_ADVISOR.IS_EMPTY +PRVT_ADVISOR.IS_KEYWORD +PRVT_ADVISOR.IS_PACK_ENABLED +PRVT_ADVISOR.IS_WILDCARD +PRVT_ADVISOR.MARK_RECOMMENDATION +PRVT_ADVISOR.PARSE_NAME +PRVT_ADVISOR.QUICK_TUNE +PRVT_ADVISOR.RECORD_ERRORMSG +PRVT_ADVISOR.RECORD_JOURNAL +PRVT_ADVISOR.RECOVER_SINGLE_STALE_TASK +PRVT_ADVISOR.RECOVER_STALE_TASKS +PRVT_ADVISOR.RESET_TASK +PRVT_ADVISOR.SETUP_USER_ENVIRONMENT +PRVT_ADVISOR.SET_DEFAULT_TASK_PARAMETER +PRVT_ADVISOR.SET_TASK_PARAMETER +PRVT_ADVISOR.SIGNAL_INTERRUPT +PRVT_ADVISOR.TEST_EXECUTE_TASK +PRVT_ADVISOR.TRACK_REPORT_USAGE +PRVT_ADVISOR.UPDATE_DIRECTIVE +PRVT_ADVISOR.UPDATE_OBJECT +PRVT_ADVISOR.UPDATE_REC_ATTRIBUTES +PRVT_ADVISOR.UPDATE_TASK +PRVT_ADVISOR.UPDATE_TASK_ATTRIBUTES +PRVT_ADVISOR.VALIDATE_ADVISOR +PRVT_ADVISOR.VALIDATE_COMMAND +PRVT_ADVISOR.VALIDATE_EXECUTION +PRVT_ADVISOR.VALIDATE_EXECUTION_ID +PRVT_ADVISOR.VALIDATE_EXECUTION_OBJECT +PRVT_ADVISOR.VALIDATE_EXECUTION_ORDER +PRVT_ADVISOR.VALIDATE_ITEM_LENGTH +PRVT_ADVISOR.VALIDATE_NEW_TASK +PRVT_ADVISOR.VALIDATE_TASK +PRVT_ADVISOR.VALIDATE_TASK_ID +PRVT_ADVISOR.VALIDATE_USERNAME +PRVT_COMPRESSION. +PRVT_COMPRESSION.ADV_ANALYZE_TABLE +PRVT_COMPRESSION.GET_COMPRESSION_RATIO +PRVT_COMPRESSION.GET_NUM_PARTITIONS +PRVT_COMPRESSION.INIT_TASK_STATE +PRVT_COMPRESSION.OLTP_COMPRESSIBLE +PRVT_COMPRESSION.REPORT +PRVT_DIMENSION_SYS_UTIL. +PRVT_DIMENSION_SYS_UTIL.INSERT_MESSAGE +PRVT_DIMENSION_SYS_UTIL.SET_DEBUG +PRVT_HDM. +PRVT_HDM.ADD_INFO +PRVT_HDM.AGGREGATE_FINDINGS +PRVT_HDM.APPLY_DIRECTIVES +PRVT_HDM.AUTO_EXECUTE +PRVT_HDM.DB_FEATURE_CLOB +PRVT_HDM.DESCRIBE_DIRECTIVE +PRVT_HDM.EVALUATE_METER +PRVT_HDM.EXECUTE +PRVT_HDM.FIND_LOCAL_FDGS +PRVT_HDM.GET_ASH_QUERY +PRVT_HDM.GET_QUERY_PREDICATE +PRVT_HDM.PARAMETER_EXISTS +PRVT_HDM.PRINT_ELEMENT +PRVT_HDM.PRINT_LINE +PRVT_HDM.REPORT +PRVT_HDM.RUN +PRVT_HDM.RUN_LOCALS +PRVT_HDM.VALIDATE_INSTANCE +PRVT_IDX. +PRVT_IDX.ASSERT_FNCOL +PRVT_IDX.CHECK_PARAM +PRVT_IDX.COPYPTNINFO +PRVT_IDX.CRT_DUMMY_IDX +PRVT_IDX.NN +PRVT_IDX.NNDISTANCE +PRVT_IDX.SPLIT_QUALIFIED_SQL_NAME +PRVT_PARTREC_NOPRIV. +PRVT_PARTREC_NOPRIV.GET_TABLE_DEFINITION +PRVT_PC. +PRVT_PC.CLIP_PC +PRVT_PC.CREATE_PC +PRVT_PC.GET_PT_IDS +PRVT_PC.OCI_CREATE_PC +PRVT_PC.TO_GEOMETRY +PRVT_REPORT_REGISTRY. +PRVT_REPORT_REGISTRY.REGISTER_CLIENTS +PRVT_REPORT_TAGS. +PRVT_REPORT_TAGS.BUILD_BINDS_TAG +PRVT_REPORT_TAGS.BUILD_BUCKET_TAG +PRVT_REPORT_TAGS.BUILD_EMPLOYEE_TAG +PRVT_REPORT_TAGS.BUILD_FMWK_TEST_TAG +PRVT_REPORT_TAGS.BUILD_HISTOGRAM_TAG +PRVT_REPORT_TAGS.BUILD_REPORT_REF_TAG +PRVT_REPORT_TAGS.BUILD_REPORT_TAG +PRVT_REPORT_TAGS.BUILD_STAT_GROUP_TAG +PRVT_REPORT_TAGS.BUILD_STAT_TAG +PRVT_REPORT_TAGS.BUILD_XPLAN_TAG +PRVT_REPORT_TAGS.REGISTER_COMMON_TAGS +PRVT_SAM. +PRVT_SAM.BEST_AGGREGATE_LOCATIONS +PRVT_SAM.GEOMETRY_OF_TILE +PRVT_SAM.SIMPLIFY_GEOMETRY +PRVT_SMGUTIL. +PRVT_SMGUTIL.CHECK_PACK_ENABLED +PRVT_SMGUTIL.CHECK_RAT_OPTION +PRVT_SMGUTIL.IS_PACK_ENABLED +PRVT_SMGUTIL.IS_RAT_OPTION_ENABLED +PRVT_SMGUTIL.PRVT_PACK_ENABLED +PRVT_SQLADV_INFRA. +PRVT_SQLADV_INFRA.CREATE_TASK +PRVT_SQLADV_INFRA.REPORT_AUTO_TUNING_TASK +PRVT_SQLPA. +PRVT_SQLPA.I_LEVEL_FLAGS_TO_SQL_FLAGS +PRVT_SQLPA.I_STS_FROM_EXEC +PRVT_SQLPA.REPORT_SQLPA_TASK +PRVT_SQLPROF_INFRA. +PRVT_SQLPROF_INFRA.ACCEPT_SQL_PROFILE +PRVT_SQLPROF_INFRA.ALTER_SQL_PROFILE +PRVT_SQLPROF_INFRA.DROP_ALL_SQL_PROFILES +PRVT_SQLPROF_INFRA.DROP_SQL_PROFILE +PRVT_SQLSET_INFRA. +PRVT_SQLSET_INFRA.CREATE_SQLSET +PRVT_SYS_TUNE_MVIEW. +PRVT_SYS_TUNE_MVIEW.ADVISE_MVIEW_LOG +PRVT_SYS_TUNE_MVIEW.ANALYZE_MVLOGS +PRVT_SYS_TUNE_MVIEW.CHECK_BUFFER_OVERFLOW +PRVT_SYS_TUNE_MVIEW.CHECK_TUNED +PRVT_SYS_TUNE_MVIEW.CREATE_SUB_MV +PRVT_SYS_TUNE_MVIEW.DELETE_REC_ACTIONS +PRVT_SYS_TUNE_MVIEW.DROP_SUB_MV +PRVT_SYS_TUNE_MVIEW.DUMP_MVLOG_DDL +PRVT_SYS_TUNE_MVIEW.FINALIZE_TASK +PRVT_SYS_TUNE_MVIEW.INSERT_MESSAGE +PRVT_SYS_TUNE_MVIEW.INSERT_REC_ACTION +PRVT_SYS_TUNE_MVIEW.INTERNAL_EXPLAIN_MVIEW +PRVT_SYS_TUNE_MVIEW.PROCESS_SINGLE_TOP_MV +PRVT_SYS_TUNE_MVIEW.RECORD_SUB_MV +PRVT_SYS_TUNE_MVIEW.TRACE_DEBUG +PRVT_TIN. +PRVT_TIN.CLIP_TIN +PRVT_TIN.CREATE_TIN +PRVT_TIN.OCI_CREATE_TIN +PRVT_TIN.TO_GEOMETRY +PRVT_TUNE_MVIEW. +PRVT_TUNE_MVIEW.GENERATE_CHECKSUM +PRVT_TUNE_MVIEW.SETUP_PARAMETERS +PRVT_TUNE_MVIEW.TUNE_MVIEW +PRVT_TUNE_MVIEW.VALIDATE_TUNE_MVIEW +PRVT_UADV. +PRVT_UADV.EXECUTE +PRVT_WORKLOAD. +PRVT_WORKLOAD.ADD_STATEMENT +PRVT_WORKLOAD.CHECK_OR_CREATE_REFERENCE +PRVT_WORKLOAD.CREATE_REPORT +PRVT_WORKLOAD.CREATE_WORKLOAD +PRVT_WORKLOAD.DELETE_REFERENCE +PRVT_WORKLOAD.DELETE_STATEMENT +PRVT_WORKLOAD.DELETE_WORKLOAD +PRVT_WORKLOAD.GET_REPORT +PRVT_WORKLOAD.IMPORT_SCHEMA +PRVT_WORKLOAD.IMPORT_SQLCACHE +PRVT_WORKLOAD.IMPORT_STS +PRVT_WORKLOAD.IMPORT_SUMADV +PRVT_WORKLOAD.IMPORT_USER +PRVT_WORKLOAD.I_COPY_TO_LOCAL_STS +PRVT_WORKLOAD.I_OPEN_SQLWKLD_SQLSET_CURSOR +PRVT_WORKLOAD.PARAM_VALIDATE +PRVT_WORKLOAD.RECORD_JNL_ENTRY +PRVT_WORKLOAD.RESET_WORKLOAD +PRVT_WORKLOAD.SETUP_PARAMETERS +PRVT_WORKLOAD.SETUP_TEMPLATES +PRVT_WORKLOAD.SYNONYM +PRVT_WORKLOAD.TEST_API +PRVT_WORKLOAD.UPDATE_STATEMENT +PRVT_WORKLOAD_NOPRIV. +PRVT_WORKLOAD_NOPRIV.DELETE_STATEMENT +PRVT_WORKLOAD_NOPRIV.UPDATE_STATEMENT +PRV_XID +PRV_XIDSLT +PRV_XIDSQN +PRV_XIDUSN +PSERIAL# +PSNUMBER +PTX +PTX_XID +PTX_XIDSLT +PTX_XIDSQN +PTX_XIDUSN +PUBLIC_TEMPLATE +PUBLISHED +PUBLISHER +PUBLISHER_ADDRESS +PUBLISHER_NAME +PUBLISHER_PROTOCOL +PUBLISHER_RULE +PUBLISHER_RULESET +PUBLISHER_RULE_NAME +PUBLISHER_STATE +PUBLISHER_TRANSFORMATION +PUB_ID +PULL_PRED +PURCHASEORDER$XD. +PURGEABLE +PURGED_CURSOR +PURGED_DATE +PURGE_ASYNCHRONOUS +PURGE_DEFERRED +PURGE_INTERVAL +PURGE_OBJECT +PURGE_OPTION +PURGE_START +PURGING +PURITY +PURPOSE +PUSH_DEFERRED_RPC +PUSH_PRED +PUSH_SUBQ +PXID +PXIDSLT +PXIDSQN +PXIDUSN +PX_FLAGS +PX_IS_CROSS_INSTANCE +PX_JOIN_FILTER +PX_MAXDOP +PX_MAXDOP_INSTANCES +PX_MISMATCH +PX_QCINST_ID +PX_QCSID +PX_SERVER# +PX_SERVERS_ALLOCATED +PX_SERVERS_EXECS_DELTA +PX_SERVERS_EXECS_TOTAL +PX_SERVERS_EXECUTIONS +PX_SERVERS_REQUESTED +PX_SERVER_GROUP +PX_SERVER_SET +QBLOCK_NAME +QB_NAME +QCINST_ID +QCSERIAL# +QCSID +QC_INSTANCE_GROUP +QC_INSTANCE_ID +QC_SESSION_ID +QC_SESSION_SERIAL# +QID +QMNC_PID +QNAME +QOSFLAGS +QRY2OPT. +QUALIFIED_COL_NAME +QUALIFIER_ID1 +QUALIFIER_ID2 +QUAL_SCHEMA_URL +QUERY +QUERYID +QUERYTEXT +QUERY_IS_APPROX +QUERY_LEN +QUERY_TXT +QUEUE +QUEUED +QUEUEDC +QUEUED_TIME +QUEUEING_MTH +QUEUEING_P1 +QUEUE_CURR +QUEUE_ID +QUEUE_LENGTH +QUEUE_NAME +QUEUE_OWNER +QUEUE_ROWP +QUEUE_SCHEMA +QUEUE_SIZE +QUEUE_STATE +QUEUE_TABLE +QUEUE_TABLE_ID +QUEUE_TABLE_NAME +QUEUE_TABNUM +QUEUE_TIME_OUTS +QUEUE_TO_QUEUE +QUEUE_TYPE +QUEUING_TIME +QUIESCE_TIME +QUOTA_IN_MB +QUOTA_SIZE +QUOTA_USED +RAC_INSTANCE +RADDR +RADIX +RAISE_EVENTS +RANGE_ID +RANK +RATIONALE_ID +RAW_VALUE +RBABLK +RBABYTE +RBASQN +RBO_OUTLINE +RBR +RBR_FORCED_STALE +RBR_FORCED_WRITE +RCVDC +RCVSERVERS +RCV_SEQ_NO +RE$NV_LIST.ADD_PAIR +RE$NV_LIST.GET_ALL_NAMES +RE$NV_LIST.GET_VALUE +RE$NV_LIST.REMOVE_PAIR +REA +READER_LAG +READER_TOTAL_MESSAGES_DEQUEUED +READS +READS# +READTIM +READY +READ_ERRS +READ_LATENCY +READ_ONLY +READ_SCN +READ_SEQUENCE# +READ_THREAD# +READ_TIME +REALTIME_APPLY +REASON +REASON_ARGUMENT_1 +REASON_ARGUMENT_2 +REASON_ARGUMENT_3 +REASON_ARGUMENT_4 +REASON_ARGUMENT_5 +REASON_ARGUMENT_COUNT +REASON_ID +REASON_MESSAGE_ID +REASON_VALUE +RECEIVER +RECEIVE_BUF_OR +RECEIVE_DROPPED +RECEIVE_ERRORS +RECEIVE_FRAME_ERR +RECID +RECIPIENT +RECIPIENTS +RECIPIENT_ID +RECIPIENT_NAME +RECO +RECOMMENDATIONS +RECOMMENDATIONS_COUNT +RECOMMENDATION_COUNT +RECOMMENDATION_ID +RECORDS_TOTAL +RECORDS_USED +RECORD_ID +RECORD_SIZE +RECOVER +RECOVERABLE_SCRIPT_ID +RECOVERING +RECOVERY_CHECKPOINT +RECOVERY_ESTIMATED_IOS +RECOVERY_FUZZY_CHANGE# +RECOVERY_FUZZY_TIME +RECOVERY_MODE +RECOVERY_TARGET_INCARNATION# +RECURSIVE +RECV +RECVS +RECYCLEBIN +REC_ID +REDO_DATA +REDO_LATENCY +REDO_THREAD +REDO_VALUE +REDUNDANCY +REDUNDANCY_LOWERED +REF +REFCOUNT +REFERENCED_LINK_NAME +REFERENCED_NAME +REFERENCED_OWNER +REFERENCED_TRIGGER_NAME +REFERENCED_TRIGGER_OWNER +REFERENCED_TYPE +REFERENCE_INDEX +REFERENCE_NAME +REFERENCING_NAMES +REFGROUP +REFRESH_AFTER_ERRORS +REFRESH_COUNT +REFRESH_GROUP +REFRESH_GROUP_ID +REFRESH_GROUP_NAME +REFRESH_METHOD +REFRESH_MODE +REFRESH_TEMPLATE_ID +REFRESH_TEMPLATE_NAME +REFS_ENABLED +REF_CASCADE_CURSOR +REF_PTN_CONSTRAINT_NAME +REGFLAGS +REGID +REGISTER +REGISTERED_AS +REGISTRAR +REGISTRATIONS_EXPIRED +REGISTRATIONS_INVALID +REGISTRATIONS_PURGED +REG_ID +REG_TIME +REJECT_LIMIT +RELATED +RELATION_ID +RELATION_NAME +RELATIVE_FNO +RELEASING +RELOADS +RELY +REL_FILE# +REMARK +REMARKS +REMASTERED_OBJECTS +REMASTER_CNT +REMASTER_OPS +REMASTER_TIME +REMOTE +REMOTE_ARCHIVE +REMOTE_CONVERGE_TAG +REMOTE_HOME +REMOTE_INC +REMOTE_INSTANCE# +REMOTE_MAPPED +REMOTE_MAPPING_MISMATCH +REMOTE_NID +REMOTE_OBJECT_NAME +REMOTE_OBJECT_TYPE +REMOTE_RID +REMOTE_ROWID +REMOTE_SCHEMA_NAME +REMOTE_TARGET +REMOTE_TEMPLATE +REMOTE_TRANS_MISMATCH +REN +REOPEN_SECS +REPAIR_ID +REPAIR_SCRIPT +REPAIR_TIMER +REPAPI_SITE_NAME +REPCATLOGTRIG. +REPCATLOG_ID +REPEAT_INTERVAL +REPLAYED_LOCKS_RECEIVED +REPLAYED_LOCKS_SENT +REPLAY_CONN +REPLAY_DIR_NUMBER +REPLAY_ID +REPLAY_OVERHEAD +REPLAY_TIME +REPLICATION_TRIGGER_EXISTS +REPORT_FILE +REPRODUCED +REQUEST +REQUESTED_ANALYSIS +REQUESTING_SESSION +REQUESTS +REQUEST_FAILURES +REQUEST_LEVEL +REQUEST_MISSES +REQUIRED +REQUIRED_CHECKPOINT_SCN +REQUIRED_MIRROR_FREE_MB +REQUIRED_START_DATE +REQUIRED_START_SCN +REQUIRES_ACO +REQ_COMP_ID +REQ_DEGREE +REQ_DESCRIPTION +REQ_NAMESPACE +REQ_REASON +REQ_START_DATE +RESENDS +RESENT +RESERVED +RESETLOGS_CHANGE# +RESETLOGS_ID +RESETLOGS_SCN +RESETLOGS_TIME +RESETLOG_ID +RESET_INPROG_INDEX. +RESET_SCN +RESET_SCNBAS +RESET_SCNWRP +RESET_SCN_TIME +RESET_TIMESTAMP +RESET_UNDO_STAT. +RESIZEABLE +RESIZE_STATE +RESIZE_UNIT_MB +RESOLUTION +RESOLUTION_ATTEMPTED +RESOLUTION_COLUMN +RESOLUTION_COMMENT +RESOLUTION_STATUS +RESOLVED_DATE +RESOURCES_CLEANED +RESOURCE_CONSUMER_GROUP +RESOURCE_COST +RESOURCE_NAME +RESOURCE_NAME1 +RESOURCE_NAME2 +RESOURCE_PERCENTAGE +RESOURCE_PLAN +RESOURCE_TYPE +RESP +RESPONSETIMEPERCALL +RESTARTABLE +RESTARTQ +RESTART_ON_FAILURE +RESTART_ON_RECOVERY +RESTART_SCN +RESTART_TIME +RESTORE_AS_INTERVALS +RESTORE_DIR +RESTORE_FORMAT +RESTORE_LOCATOR +RESTORE_MODE +RESTORE_ONLY +RESTORE_POINT_TIME +RESTORE_SCOPE +RESTORE_TIME +RESTRICTED_SYNTAX +RESTRICT_ALL_REF_CONS +RESULTS +RESULT_CACHE +RESULT_ID +RESULT_TYPE +RESULT_TYPE_MOD +RESULT_TYPE_NAME +RESULT_TYPE_OWNER +RESUME_TIME +RES_ATTR +RES_SEMI +RES_TYPE +RETENTION +RETENTION_DAYS +RETENTION_IN_DAYS +RETENTION_TARGET +RETENTION_TYPE +RETENTION_VALUE +RETRIES_ON_ERROR +RETRY_COUNT +RETRY_DELAY +RETRY_ON_ROW_CHANGE +RETRY_TIME +RETURNCODE +RETURN_CLASS +RETURN_SCHEMA +RETURN_TYPE +REVISION +REVOKEE. +REWRITE +REWRITE_CAPABILITY +REWRITE_ENABLED +REWRITE_MODE +REWRITE_OR_ERROR +RFILE# +RFNO +RLM$COLLPREDS.RLM$COLLPREDS +RLM$CREATE_SCHEDULER_JOBS. +RLM$EQLCHK. +RLM$EQLLSRNONEG. +RLM$OPTIMEQCLS. +RLM$PARSEOBYCLS. +RLM$PROCCLLGRPBY. +RLM$PROCESSCOLLPREDS. +RLM$SEQCHK. +RLM$TIMECENTRAL. +RLM$TIMECENTRAL.PRINT_TIME +RLM$TIMECENTRAL.STARTT +RLM$UNIQUETAG. +RLM$WLNCHK. +RLMGR_TRUNCATE_MAINT. +RL_FIRST_CHANGE# +RL_FIRST_TIME +RL_NEXT_CHANGE# +RL_NEXT_TIME +RL_RESETLOGS_CHANGE# +RL_SEQUENCE# +RL_THREAD# +RMAN_STATUS_RECID +RMAN_STATUS_STAMP +RMJVM. +RMJVM.CHECK_FOR_RMJVM +RMJVM.HEXTOCHAR +RMJVM.RUN +RMJVM.STRIP +RNAME +ROLE +ROLE_ROLE_PRIVS +ROLE_SYS_PRIVS +ROLE_TAB_PRIVS +ROLLBACK +ROLLBACK_SEG +ROLLBACK_SEGMENT_NAME +ROLL_INVALID_MISMATCH +ROOT +ROOT_DIR +ROOT_SCAN_ID +ROUNDTRIPS +ROWID +ROWIDS +ROWNER +ROWS_PROCESSED +ROWS_PROCESSED_DELTA +ROWS_PROCESSED_TOTAL +ROW_ATTRIBUTE +ROW_COUNT +ROW_ID +ROW_LEVEL +ROW_LOCK_WAITS_DELTA +ROW_LOCK_WAITS_TOTAL +ROW_MOVEMENT +ROW_SIZE_AVG +ROW_SIZE_MAX +ROW_SIZE_MIN +ROW_TYPE +ROW_WAIT_BLOCK# +ROW_WAIT_FILE# +ROW_WAIT_OBJ# +ROW_WAIT_ROW# +RPC_PROCESSING_DISABLED +RSSIZE +RS_ID +RTIME +RTMAX +RTREEJOINFUNC. +RTREEJOIN_IMP_T.CLOSESTUB +RTREEJOIN_IMP_T.FETCHSTUB +RTREEJOIN_IMP_T.ODCITABLECLOSE +RTREEJOIN_IMP_T.ODCITABLEFETCH +RTREEJOIN_IMP_T.ODCITABLESTART +RTREEJOIN_IMP_T.STARTSTUB +RTREE_IDX. +RTREE_IDX.INDEX_UPDATE +RTREE_INDEX_METHOD.ODCIGETINTERFACES +RTREE_INDEX_METHOD.ODCIINDEXALTER +RTREE_INDEX_METHOD.ODCIINDEXCLOSE +RTREE_INDEX_METHOD.ODCIINDEXCREATE +RTREE_INDEX_METHOD.ODCIINDEXDELETE +RTREE_INDEX_METHOD.ODCIINDEXDROP +RTREE_INDEX_METHOD.ODCIINDEXFETCH +RTREE_INDEX_METHOD.ODCIINDEXINSERT +RTREE_INDEX_METHOD.ODCIINDEXSTART +RTREE_INDEX_METHOD.ODCIINDEXTRUNCATE +RTREE_INDEX_METHOD.ODCIINDEXUPDATE +RULE +RULEINDEXMETHODS.ODCIGETINTERFACES +RULEINDEXMETHODS.ODCIINDEXALTER +RULEINDEXMETHODS.ODCIINDEXCLOSE +RULEINDEXMETHODS.ODCIINDEXCREATE +RULEINDEXMETHODS.ODCIINDEXDELETE +RULEINDEXMETHODS.ODCIINDEXDROP +RULEINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +RULEINDEXMETHODS.ODCIINDEXFETCH +RULEINDEXMETHODS.ODCIINDEXGETMETADATA +RULEINDEXMETHODS.ODCIINDEXINSERT +RULEINDEXMETHODS.ODCIINDEXMERGEPARTITION +RULEINDEXMETHODS.ODCIINDEXSPLITPARTITION +RULEINDEXMETHODS.ODCIINDEXSTART +RULEINDEXMETHODS.ODCIINDEXTRUNCATE +RULEINDEXMETHODS.ODCIINDEXUPDATE +RULEINDEXMETHODS.ODCIINDEXUTILCLEANUP +RULEINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +RULESET_COMMENT +RULESET_NAME +RULESET_STORAGE_TABLE +RULE_ACTION_CONTEXT +RULE_COMMENT +RULE_CONDITION +RULE_EVALUATION_CONTEXT_NAME +RULE_EVALUATION_CONTEXT_OWNER +RULE_NAME +RULE_OWNER +RULE_SET_COMMENT +RULE_SET_EVAL_CONTEXT_NAME +RULE_SET_EVAL_CONTEXT_OWNER +RULE_SET_NAME +RULE_SET_OBJECT_ID +RULE_SET_OWNER +RULE_SET_RULE_COMMENT +RULE_SET_RULE_ENABLED +RULE_SET_RULE_EVAL_CTX_NAME +RULE_SET_RULE_EVAL_CTX_OWNER +RULE_SET_TYPE +RULE_TYPE +RUNNING_INSTANCE +RUNNING_SESSIONS_LIMIT +RUNTIME_MEM +RUN_COUNT +RUN_DURATION +RUN_ID +RUN_MODE +RUN_NAME +R_CONSTRAINT_NAME +R_OWNER +SADDR +SAFE_PURGE_SCN +SAFE_RESUME_SCN +SALT +SAMCLUST_IMP_T.ODCITABLECLOSE +SAMCLUST_IMP_T.ODCITABLEFETCH +SAMCLUST_IMP_T.ODCITABLESTART +SAMCLUST_IMP_T.STARTSTUB +SAME_ENDIAN +SAME_RULE_CONDITION +SAMPLED +SAMPLED_ACTIVE_CONN +SAMPLED_ACTIVE_DISP +SAMPLED_ACTIVE_SRV +SAMPLED_BYTES +SAMPLED_TOTAL_CONN +SAMPLED_TOTAL_DISP +SAMPLED_TOTAL_SRV +SAMPLER_ELAPSED_TIME +SAMPLE_COUNT +SAMPLE_ID +SAMPLE_INTERVAL +SAMPLE_SIZE +SAMPLE_TIME +SAMPLING_INTERVAL +SAVEPOINT_NUMBER +SAVE_AS_INTERVALS +SAVE_TTS_TS. +SCALE +SCALE_BUF +SCALE_CLT_BUF +SCALE_IN_CONNECT +SCALE_LOOPS +SCALE_MSG +SCALE_OUT_CONNECT +SCALE_RECONNECT +SCALE_SVR_BUF +SCALE_UP_MULTIPLIER +SCANCOMPLETES +SCANMISSES +SCANNED +SCANS +SCAN_COUNT +SCAN_ID +SCAN_MODE +SCAN_NULLS +SCAN_PERCENT +SCENE3D776_TAB$XD. +SCHEDULE +SCHEDULER$_BATCHERR_PIPE. +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLECLOSE +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLEFETCH +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLEPREPARE +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLESTART +SCHEDULER$_EVENT_INFO.SCHEDULER$_EVENT_INFO +SCHEDULER$_JOB_EVENT_HANDLER. +SCHEDULE_DISABLED +SCHEDULE_LIMIT +SCHEDULE_NAME +SCHEDULE_OWNER +SCHEDULE_STATUS +SCHEDULE_TYPE +SCHEMA +SCHEMA# +SCHEMAID +SCHEMANAME +SCHEMA_COMMENT +SCHEMA_ID +SCHEMA_NAME +SCHEMA_OID +SCHEMA_OWNER +SCHEMA_URL +SCHEMA_USER +SCHWAITPERCALL +SCN +SCN_ASCENDING +SCN_NEEDED +SCN_TO_TIMESTAMP. +SCOPE +SCOPE_TABLE_NAME +SCOPE_TABLE_OWNER +SCRIPT_COMMENT +SCRIPT_ID +SCRIPT_STATUS +SCRIPT_TYPE +SDO. +SDO.BVALUETODIM +SDO.COMPARE +SDO.DATETODIM +SDO.DECODE +SDO.ENCODE +SDO.HVALUETODIM +SDO.LATLONTOCODE +SDO.TO_BVALUE +SDO.TO_DATE +SDO.TO_HVALUE +SDO.TO_LAT +SDO.TO_LON +SDOAGGR.ODCIAGGREGATEINITIALIZE +SDOAGGR.ODCIAGGREGATEITERATE +SDOAGGR.ODCIAGGREGATEMERGE +SDOAGGR.ODCIAGGREGATETERMINATE +SDOCURPKG. +SDOTNPC. +SDOTNPC.ASSOCIATE_DEP_TABLES +SDOTNPC.CREATEDMLTRIGGER +SDOTNPC.DEL_BLKTAB_ROWS +SDOTNPC.DROP_DEP_TABLES +SDO_3GL. +SDO_3GL.ALPHA_SHAPE +SDO_3GL.ANYINTERACT +SDO_3GL.ANYINTERACT3D +SDO_3GL.ARC_DENSIFY +SDO_3GL.AREA3D +SDO_3GL.BEARING +SDO_3GL.CENTROID +SDO_3GL.CENTROID3D +SDO_3GL.CHECKSPATIAL +SDO_3GL.CLOSESTPOINTS3D +SDO_3GL.CLOSEST_POINTS +SDO_3GL.CONCAVEHULL +SDO_3GL.CONCAVEHULL_B +SDO_3GL.CONTAINS +SDO_3GL.CONVEXHULL +SDO_3GL.COVEREDBY +SDO_3GL.COVERS +SDO_3GL.DISTANCE +SDO_3GL.DISTANCE3D +SDO_3GL.DIVIDE_RING_BY_POINTS +SDO_3GL.EQUAL +SDO_3GL.EXPANDG3DGEOMS +SDO_3GL.EXTENT_OF_OBJECT +SDO_3GL.FILTER +SDO_3GL.G3DCONV +SDO_3GL.GENERATE_BUFFER +SDO_3GL.GEODEXTENT_OF_OBJECT +SDO_3GL.GEOM_OPERATION +SDO_3GL.INSERT_LOG_FILTER +SDO_3GL.INSIDE +SDO_3GL.INSIDE3D +SDO_3GL.LENGTH3D +SDO_3GL.LENGTH_AREA +SDO_3GL.MAKE_RING_FROM_LINES +SDO_3GL.MBR_GEOMETRY +SDO_3GL.MEMORY_LEAK +SDO_3GL.OVERLAP +SDO_3GL.OVERLAPBDYDISJOINT +SDO_3GL.OVERLAPBDYINTERSECT +SDO_3GL.PCTRCLIP +SDO_3GL.POINTONSURFACE +SDO_3GL.REGISTER_UDT +SDO_3GL.RELATE +SDO_3GL.RELATE_PROCESS +SDO_3GL.REMOVE_DUPLICATE_VERTICES +SDO_3GL.RING_UNION_APPROX +SDO_3GL.SDOON +SDO_3GL.SDO_CENTROID +SDO_3GL.SDO_CONVEXHULL +SDO_3GL.SDO_GEOD_MBR +SDO_3GL.SDO_MBR +SDO_3GL.TOUCH +SDO_3GL.TRIANGULATE +SDO_3GL.VALIDATEGEOM3D +SDO_3GL.VALIDATE_GEOM +SDO_3GL.VALIDATE_GEOM_WITH_CONTEXT +SDO_3GL.VALIDATE_LAYER_WITH_CONTEXT +SDO_3GL.VALIDATE_LAYER_WITH_CONTEXT3D +SDO_3GL.VOLUME3D +SDO_3GL.WITHIN_DISTANCE +SDO_ADMIN. +SDO_ADMIN.CHANGE_INDEX_PARAMETERS +SDO_ADMIN.POPULATE_INDEX +SDO_ADMIN.POPULATE_INDEX_FIXED +SDO_ADMIN.POPULATE_INDEX_FIXED_POINTS +SDO_ADMIN.SDO_CODE_SIZE +SDO_ADMIN.SDO_VERSION +SDO_ADMIN.SET_CODE_NULL +SDO_ADMIN.UPDATE_INDEX +SDO_ADMIN.UPDATE_INDEX_FIXED +SDO_AGGR_CENTROID. +SDO_AGGR_CONCAT_LINES. +SDO_AGGR_CONVEXHULL. +SDO_AGGR_LRS_CONCAT. +SDO_AGGR_LRS_CONCAT_3D. +SDO_AGGR_MBR. +SDO_AGGR_SET_UNION. +SDO_AGGR_UNION. +SDO_ANNOT_TRIG_INS1. +SDO_CATALOG. +SDO_CATALOG.DELETE_CATALOG +SDO_CATALOG.INSERT_CATALOG +SDO_CATALOG.UPDATE_CATALOG +SDO_CONSTRUCT_DIM_ARRAY. +SDO_COORD_OPS_TRIGGER. +SDO_COORD_OP_METHODS_TRIGGER. +SDO_COORD_OP_PARAM_VAL_TRIGG2. +SDO_COORD_OP_PARAM_VAL_TRIGGER. +SDO_COORD_OP_PATHS_TRIGGER. +SDO_CRS_DELETE_TRIGGER. +SDO_CRS_INSERT_TRIGGER. +SDO_CS. +SDO_CS.ADD_PREFERENCE_FOR_OP +SDO_CS.CONVERT_2D_SRID_TO_3D +SDO_CS.CONVERT_2D_TO_3D +SDO_CS.CONVERT_MIXED_AXES_UNITS +SDO_CS.CONVERT_NADCON_TO_XML +SDO_CS.CONVERT_NTV2_TO_XML +SDO_CS.CONVERT_NTV2_TO_XML_TABLE +SDO_CS.CONVERT_XML_TABLE_TO_NTV2 +SDO_CS.CONVERT_XML_TO_NADCON +SDO_CS.CONVERT_XML_TO_NTV2 +SDO_CS.CREATE_CONCATENATED_OP +SDO_CS.CREATE_CRS_USING_LEGACY_PROJ +SDO_CS.CREATE_OBVIOUS_EPSG_RULES +SDO_CS.CREATE_PREF_CONCATENATED_OP +SDO_CS.DELETE_ALL_EPSG_RULES +SDO_CS.DELETE_NTV2_XML_DATA +SDO_CS.DELETE_OP +SDO_CS.DETERMINE_CHAIN +SDO_CS.DETERMINE_DEFAULT_CHAIN +SDO_CS.DETERMINE_NADCON_COVERAGE +SDO_CS.DETERMINE_SRID_UNITS +SDO_CS.DISAMBIGUATE_PROJ_NAME +SDO_CS.FILL_IN_DEFAULT_UNITS +SDO_CS.FIND_EPSG_PARAMS +SDO_CS.FIND_GEOG_CRS +SDO_CS.FIND_PROJ_CRS +SDO_CS.FIND_SRID +SDO_CS.FROM_OGC_SIMPLEFEATURE_SRS +SDO_CS.FROM_USNG +SDO_CS.GENERATE_CRS_FROM_WKT +SDO_CS.GENERATE_EPSG_RULE_FOR_3785 +SDO_CS.GET_3D_WKT +SDO_CS.GET_CRS_DIMENSIONALITY +SDO_CS.GET_EPSG_DATA_VERSION +SDO_CS.GET_SRID_FOR_NAMESPACE +SDO_CS.GET_SRSNAME_FOR_NAMESPACE +SDO_CS.GET_WKT_PATH +SDO_CS.INTERNAL_DENSIFY_PRIOR_TO_TFM +SDO_CS.INTERNAL_DET_CHAIN +SDO_CS.INTERNAL_DET_CHAIN_VARCHAR +SDO_CS.INTERNAL_DET_SRID_WKT +SDO_CS.INTERNAL_EPSG_PARAM_TO_LEGACY +SDO_CS.INTERNAL_GET_DENSIFICATION_RES +SDO_CS.INTERNAL_READ_PROJ_FROM_WKT +SDO_CS.INTL_POPULATE_DATUM_3PARAMS +SDO_CS.INTL_POPULATE_DATUM_7PARAMS +SDO_CS.INTL_VALIDATE_WKT +SDO_CS.IS_WITHIN_TOLERANCE +SDO_CS.LOOKUP_EPSG_PARAM +SDO_CS.MAKE_2D +SDO_CS.MAKE_3D +SDO_CS.MAP_EPSG_SRID_TO_ORACLE +SDO_CS.MAP_ORACLE_SRID_TO_EPSG +SDO_CS.REFORMAT_GTYPE +SDO_CS.REGISTER_SRSNAMESPACE +SDO_CS.REVOKE_PREFERENCE_FOR_OP +SDO_CS.TFM_AXIS_ORIENTATION_TO_WKT +SDO_CS.TO_OGC_SIMPLEFEATURE_SRS +SDO_CS.TO_USNG +SDO_CS.TRANSFORM +SDO_CS.TRANSFORM_ACROSS_DIMS +SDO_CS.TRANSFORM_LAYER +SDO_CS.TRANSFORM_LAYER_ACROSS_DIMS +SDO_CS.TRANSFORM_OGC_CS_WKT_TO_SRS +SDO_CS.TRANSFORM_ORIG +SDO_CS.TRANSFORM_ORIG_USING_RULES +SDO_CS.TRANSFORM_TO_BASE_UNIT +SDO_CS.TRANSFORM_TO_WKT_PARAM_UNIT +SDO_CS.TRANSFORM_USING_CASE_NAME +SDO_CS.TRANSFORM_USING_PLAN +SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS +SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS +SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM +SDO_CS.UPDATE_WKTS_FOR_EPSG_ELLIPS +SDO_CS.UPDATE_WKTS_FOR_EPSG_OP +SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM +SDO_CS.UPDATE_WKTS_FOR_EPSG_PM +SDO_CS.UPDATE_WKTS_WITH_HC_PARAMS +SDO_CS.UPDATE_WKT_WITH_7_PARAMS +SDO_CS.VALIDATE_WKT +SDO_CS.VIEWPORT_TRANSFORM +SDO_CSW_PROCESS. +SDO_CSW_PROCESS.DELETECAPABILITIESINFO +SDO_CSW_PROCESS.DELETEDOMAININFO +SDO_CSW_PROCESS.DELETEPLUGINMAP +SDO_CSW_PROCESS.DELETERECORDVIEWMAP +SDO_CSW_PROCESS.DROP_EXPORT_TABLES +SDO_CSW_PROCESS.ENUMERATEARRPATHS +SDO_CSW_PROCESS.EXPANDPATH +SDO_CSW_PROCESS.EXTRACTID +SDO_CSW_PROCESS.EXTRACTSDO +SDO_CSW_PROCESS.FINDNSURL +SDO_CSW_PROCESS.GENERATEALIASSTRING +SDO_CSW_PROCESS.GENERATEPARSEDSPATIALPATH +SDO_CSW_PROCESS.GENIDVALUE +SDO_CSW_PROCESS.GENRECORDTYPEPROCESSINGLOGIC +SDO_CSW_PROCESS.GENSPATIALARRINFO +SDO_CSW_PROCESS.GENSPATIALPATHELEMCOLINDEX +SDO_CSW_PROCESS.GENUPDATESTR +SDO_CSW_PROCESS.GETALIAS +SDO_CSW_PROCESS.GETCOUNT +SDO_CSW_PROCESS.GETPARSEDPATH +SDO_CSW_PROCESS.GETPATH +SDO_CSW_PROCESS.GETPROCESSEDINDEX +SDO_CSW_PROCESS.GETRECORDTYPEID +SDO_CSW_PROCESS.GETUPDATEMAP +SDO_CSW_PROCESS.GRANTMDACCESSTOADMINUSER +SDO_CSW_PROCESS.GRANTMDACCESSTOUSER +SDO_CSW_PROCESS.GRANTRECORDTYPETOUSER +SDO_CSW_PROCESS.INITIALIZE_AFTER_IMPORT +SDO_CSW_PROCESS.INSERTCAPABILITIESINFO +SDO_CSW_PROCESS.INSERTDOMAININFO +SDO_CSW_PROCESS.INSERTPLUGINMAP +SDO_CSW_PROCESS.INSERTRECORDVIEWMAP +SDO_CSW_PROCESS.INSERTRTDATAUPDATED +SDO_CSW_PROCESS.INSERTRTMDUPDATED +SDO_CSW_PROCESS.ISINLIST +SDO_CSW_PROCESS.ISPKCOLIN +SDO_CSW_PROCESS.ISROWIDIN +SDO_CSW_PROCESS.MERGESYSANDUSERDEFINEDGEOMINFO +SDO_CSW_PROCESS.PARSEPATH +SDO_CSW_PROCESS.PARSEPATHELIMTYPEPREFIX +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_ALL +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_RTS +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_RT_INT +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_RT_M_INT +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_USER +SDO_CSW_PROCESS.PREPROCESSINSERT +SDO_CSW_PROCESS.PREPROCESSUPDATE +SDO_CSW_PROCESS.PROCESSIDPATH +SDO_CSW_PROCESS.PROCESSPATH +SDO_CSW_PROCESS.PUTALIAS +SDO_CSW_PROCESS.REVOKEMDACCESSFROMADMINUSER +SDO_CSW_PROCESS.REVOKEMDACCESSFROMUSER +SDO_CSW_PROCESS.REVOKERECORDTYPEFROMUSER +SDO_CSW_PROCESS.SORTSPCONTENTBYCOLINDEX +SDO_DROP_USER. +SDO_GCDR. +SDO_GCDR.BATCH_GEOCODE +SDO_GCDR.CREATE_PROFILE_TABLES +SDO_GCDR.GEOCODE +SDO_GCDR.GEOCODE_ADDR +SDO_GCDR.GEOCODE_ADDR_ALL +SDO_GCDR.GEOCODE_ALL +SDO_GCDR.GEOCODE_AS_GEOMETRY +SDO_GCDR.REVERSE_GEOCODE +SDO_GCDR.VALIDATECITYROW +SDO_GCDR.VALIDATECOUNTRYROW +SDO_GCDR.VALIDATEINLINESTREETTYPEROW +SDO_GCDR.VALIDATELOCALITYDICTROW +SDO_GCDR.VALIDATEPLACENAMEROW +SDO_GCDR.VALIDATEPOBOXROW +SDO_GCDR.VALIDATEREGIONROW +SDO_GCDR.VALIDATESECONDUNITROW +SDO_GCDR.VALIDATESTREETDICTROW +SDO_GCDR.VALIDATESTREETPREFIXROW +SDO_GCDR.VALIDATESTREETSUFFIXROW +SDO_GCDR.VALIDATESTREETTYPEROW +SDO_GEOM. +SDO_GEOM.CHECK_BOUNDS +SDO_GEOM.GET_DIM_ARRAY +SDO_GEOM.GET_ORDS +SDO_GEOM.INIT_ELEMENT +SDO_GEOM.INTERACT +SDO_GEOM.RELATE +SDO_GEOM.SDO_ALPHA_SHAPE +SDO_GEOM.SDO_ARC_DENSIFY +SDO_GEOM.SDO_AREA +SDO_GEOM.SDO_BUFFER +SDO_GEOM.SDO_CENTROID +SDO_GEOM.SDO_CLOSEST_POINTS +SDO_GEOM.SDO_CONCAVEHULL +SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY +SDO_GEOM.SDO_CONVEXHULL +SDO_GEOM.SDO_DIFFERENCE +SDO_GEOM.SDO_DISTANCE +SDO_GEOM.SDO_G3DCONV +SDO_GEOM.SDO_INSERT_LOG_FILTER +SDO_GEOM.SDO_INTERSECTION +SDO_GEOM.SDO_LENGTH +SDO_GEOM.SDO_MAX_MBR_ORDINATE +SDO_GEOM.SDO_MBR +SDO_GEOM.SDO_MIN_MBR_ORDINATE +SDO_GEOM.SDO_POINTONSURFACE +SDO_GEOM.SDO_POLY_DIFFERENCE +SDO_GEOM.SDO_POLY_INTERSECTION +SDO_GEOM.SDO_POLY_UNION +SDO_GEOM.SDO_POLY_XOR +SDO_GEOM.SDO_TRIANGULATE +SDO_GEOM.SDO_UNION +SDO_GEOM.SDO_VOLUME +SDO_GEOM.SDO_XOR +SDO_GEOM.VALIDATE_GEOMETRY +SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT +SDO_GEOM.VALIDATE_LAYER +SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT +SDO_GEOM.WITHIN_DISTANCE +SDO_GEOMETRY.GET_DIMS +SDO_GEOMETRY.GET_GTYPE +SDO_GEOMETRY.GET_LRS_DIM +SDO_GEOMETRY.GET_WKB +SDO_GEOMETRY.GET_WKT +SDO_GEOMETRY.SDO_GEOMETRY +SDO_GEOMETRY.ST_COORDDIM +SDO_GEOMETRY.ST_ISVALID +SDO_GEOM_TRIG_DEL1. +SDO_GEOM_TRIG_INS1. +SDO_GEOM_TRIG_UPD1. +SDO_GEOR. +SDO_GEOR.ADDNODATA +SDO_GEOR.ADDSOURCEINFO +SDO_GEOR.CALCCOMPRESSIONRATIO +SDO_GEOR.CHANGECELLVALUE +SDO_GEOR.CHANGEFORMAT +SDO_GEOR.CHANGEFORMATCOPY +SDO_GEOR.COPY +SDO_GEOR.CREATEBLANK +SDO_GEOR.CREATETEMPLATE +SDO_GEOR.DELETECONTROLPOINT +SDO_GEOR.DELETENODATA +SDO_GEOR.DELETEPYRAMID +SDO_GEOR.EVALUATEDOUBLE +SDO_GEOR.EXPORTTO +SDO_GEOR.GENERATEBLOCKMBR +SDO_GEOR.GENERATEPYRAMID +SDO_GEOR.GENERATESPATIALEXTENT +SDO_GEOR.GENERATESTATISTICS +SDO_GEOR.GEOREFERENCE +SDO_GEOR.GETBANDDIMSIZE +SDO_GEOR.GETBEGINDATETIME +SDO_GEOR.GETBINFUNCTION +SDO_GEOR.GETBINTABLE +SDO_GEOR.GETBINTYPE +SDO_GEOR.GETBITMAPMASK +SDO_GEOR.GETBITMAPMASKSUBSET +SDO_GEOR.GETBITMAPMASKVALUE +SDO_GEOR.GETBLANKCELLVALUE +SDO_GEOR.GETBLOCKINGTYPE +SDO_GEOR.GETBLOCKSIZE +SDO_GEOR.GETCELLCOORDINATE +SDO_GEOR.GETCELLDEPTH +SDO_GEOR.GETCELLVALUE +SDO_GEOR.GETCOLORMAP +SDO_GEOR.GETCOLORMAPTABLE +SDO_GEOR.GETCOMPRESSIONTYPE +SDO_GEOR.GETCONTROLPOINT +SDO_GEOR.GETDEFAULTBLUE +SDO_GEOR.GETDEFAULTCOLORLAYER +SDO_GEOR.GETDEFAULTGREEN +SDO_GEOR.GETDEFAULTRED +SDO_GEOR.GETENDDATETIME +SDO_GEOR.GETGCPGEOREFMETHOD +SDO_GEOR.GETGCPGEOREFMODEL +SDO_GEOR.GETGEOREFERENCETYPE +SDO_GEOR.GETGRAYSCALE +SDO_GEOR.GETGRAYSCALETABLE +SDO_GEOR.GETHISTOGRAM +SDO_GEOR.GETHISTOGRAMTABLE +SDO_GEOR.GETID +SDO_GEOR.GETINTERLEAVINGTYPE +SDO_GEOR.GETLAYERDIMENSION +SDO_GEOR.GETLAYERID +SDO_GEOR.GETLAYERORDINATE +SDO_GEOR.GETMODELCOORDINATE +SDO_GEOR.GETMODELCOORDLOCATION +SDO_GEOR.GETMODELSRID +SDO_GEOR.GETNODATA +SDO_GEOR.GETPYRAMIDMAXLEVEL +SDO_GEOR.GETPYRAMIDTYPE +SDO_GEOR.GETRASTERBLOCKLOCATOR +SDO_GEOR.GETRASTERBLOCKS +SDO_GEOR.GETRASTERDATA +SDO_GEOR.GETRASTERSUBSET +SDO_GEOR.GETSCALING +SDO_GEOR.GETSOURCEINFO +SDO_GEOR.GETSPATIALDIMNUMBER +SDO_GEOR.GETSPATIALDIMSIZES +SDO_GEOR.GETSPATIALRESOLUTIONS +SDO_GEOR.GETSPECTRALRESOLUTION +SDO_GEOR.GETSPECTRALUNIT +SDO_GEOR.GETSRS +SDO_GEOR.GETSTATISTICS +SDO_GEOR.GETTOTALLAYERNUMBER +SDO_GEOR.GETULTCOORDINATE +SDO_GEOR.GETVAT +SDO_GEOR.GETVERSION +SDO_GEOR.HASBITMAPMASK +SDO_GEOR.HASGRAYSCALE +SDO_GEOR.HASNODATAMASK +SDO_GEOR.HASPSEUDOCOLOR +SDO_GEOR.IMPORTFROM +SDO_GEOR.INIT +SDO_GEOR.ISBLANK +SDO_GEOR.ISLOSSLESS +SDO_GEOR.ISORTHORECTIFIED +SDO_GEOR.ISRECTIFIED +SDO_GEOR.ISSPATIALREFERENCED +SDO_GEOR.MERGELAYERS +SDO_GEOR.MOSAIC +SDO_GEOR.REPROJECT +SDO_GEOR.SCALE +SDO_GEOR.SCALECOPY +SDO_GEOR.SCHEMAVALIDATE +SDO_GEOR.SETBEGINDATETIME +SDO_GEOR.SETBINFUNCTION +SDO_GEOR.SETBINTABLE +SDO_GEOR.SETBITMAPMASK +SDO_GEOR.SETBLANKCELLVALUE +SDO_GEOR.SETCOLORMAP +SDO_GEOR.SETCOLORMAPTABLE +SDO_GEOR.SETCONTROLPOINT +SDO_GEOR.SETDEFAULTBLUE +SDO_GEOR.SETDEFAULTCOLORLAYER +SDO_GEOR.SETDEFAULTGREEN +SDO_GEOR.SETDEFAULTRED +SDO_GEOR.SETENDDATETIME +SDO_GEOR.SETGCPGEOREFMETHOD +SDO_GEOR.SETGCPGEOREFMODEL +SDO_GEOR.SETGRAYSCALE +SDO_GEOR.SETGRAYSCALETABLE +SDO_GEOR.SETHISTOGRAMTABLE +SDO_GEOR.SETID +SDO_GEOR.SETLAYERID +SDO_GEOR.SETLAYERORDINATE +SDO_GEOR.SETMODELCOORDLOCATION +SDO_GEOR.SETMODELSRID +SDO_GEOR.SETORTHORECTIFIED +SDO_GEOR.SETRASTERTYPE +SDO_GEOR.SETRECTIFIED +SDO_GEOR.SETSCALING +SDO_GEOR.SETSOURCEINFO +SDO_GEOR.SETSPATIALREFERENCED +SDO_GEOR.SETSPATIALRESOLUTIONS +SDO_GEOR.SETSPECTRALRESOLUTION +SDO_GEOR.SETSPECTRALUNIT +SDO_GEOR.SETSRS +SDO_GEOR.SETSTATISTICS +SDO_GEOR.SETULTCOORDINATE +SDO_GEOR.SETVAT +SDO_GEOR.SETVERSION +SDO_GEOR.SUBSET +SDO_GEOR.UPDATERASTER +SDO_GEOR.VALIDATEBLOCKMBR +SDO_GEOR.VALIDATEFORMOSAIC +SDO_GEOR.VALIDATEGEORASTER +SDO_GEORX. +SDO_GEORX.ADDNODATA +SDO_GEORX.APPENDSOURCEINFO +SDO_GEORX.CREATEBLANK +SDO_GEORX.DELETEGCP +SDO_GEORX.DELETENODATA +SDO_GEORX.GEOREFERENCE +SDO_GEORX.GETBANDDIMSIZE +SDO_GEORX.GETBEGINDATETIME +SDO_GEORX.GETBINFUNCTION +SDO_GEORX.GETBINTABLE +SDO_GEORX.GETBINTYPE +SDO_GEORX.GETBLANKCELLVALUE +SDO_GEORX.GETBLOCKINGTYPE +SDO_GEORX.GETBLOCKSIZE +SDO_GEORX.GETCELLDEPTH +SDO_GEORX.GETCELLDEPTHTEXT +SDO_GEORX.GETCOLORMAP +SDO_GEORX.GETCOLORMAPTABLE +SDO_GEORX.GETCOMPRESSIONTYPE +SDO_GEORX.GETDEFAULTBLUE +SDO_GEORX.GETDEFAULTCOLORLAYER +SDO_GEORX.GETDEFAULTGREEN +SDO_GEORX.GETDEFAULTRED +SDO_GEORX.GETENDDATETIME +SDO_GEORX.GETGCP +SDO_GEORX.GETGCPGEOREFMODEL +SDO_GEORX.GETGRAYSCALE +SDO_GEORX.GETGRAYSCALETABLE +SDO_GEORX.GETHISTOGRAM +SDO_GEORX.GETHISTOGRAMTABLE +SDO_GEORX.GETID +SDO_GEORX.GETINTERLEAVING +SDO_GEORX.GETLAYERID +SDO_GEORX.GETLAYERORDINATE +SDO_GEORX.GETMAJORVERSION +SDO_GEORX.GETMINORVERSION +SDO_GEORX.GETMODELSRID +SDO_GEORX.GETNODATA +SDO_GEORX.GETPYRAMIDMAXLEVEL +SDO_GEORX.GETPYRAMIDTYPE +SDO_GEORX.GETSCALING +SDO_GEORX.GETSOURCEINFO +SDO_GEORX.GETSPATIALDIMSIZES +SDO_GEORX.GETSPATIALRESOLUTIONS +SDO_GEORX.GETSPECTRALRESOLUTION +SDO_GEORX.GETSPECTRALUNIT +SDO_GEORX.GETSRS +SDO_GEORX.GETSTATISTICS +SDO_GEORX.GETTOTALLAYERNUMBER +SDO_GEORX.GETULTCOORDINATE +SDO_GEORX.GETVAT +SDO_GEORX.HASGRAYSCALE +SDO_GEORX.HASPSEUDOCOLOR +SDO_GEORX.ISBLANK +SDO_GEORX.ISORTHORECTIFIED +SDO_GEORX.ISRECTIFIED +SDO_GEORX.ISSPATIALREFERENCED +SDO_GEORX.SCHEMAVALIDATE +SDO_GEORX.SETBEGINDATETIME +SDO_GEORX.SETBINFUNCTION +SDO_GEORX.SETBINTABLE +SDO_GEORX.SETBLANKCELLVALUE +SDO_GEORX.SETCOLORMAP +SDO_GEORX.SETCOLORMAPTABLE +SDO_GEORX.SETCONTROLPOINT +SDO_GEORX.SETDEFAULTBLUE +SDO_GEORX.SETDEFAULTCOLORLAYER +SDO_GEORX.SETDEFAULTGREEN +SDO_GEORX.SETDEFAULTRED +SDO_GEORX.SETENDDATETIME +SDO_GEORX.SETGCP +SDO_GEORX.SETGCPGEOREFMODEL +SDO_GEORX.SETGRAYSCALE +SDO_GEORX.SETGRAYSCALETABLE +SDO_GEORX.SETHISTOGRAMTABLE +SDO_GEORX.SETID +SDO_GEORX.SETLAYERID +SDO_GEORX.SETLAYERORDINATE +SDO_GEORX.SETMODELCOORDLOCATION +SDO_GEORX.SETMODELSRID +SDO_GEORX.SETORTHORECTIFIED +SDO_GEORX.SETRASTERTYPE +SDO_GEORX.SETRECTIFIED +SDO_GEORX.SETSCALING +SDO_GEORX.SETSOURCEINFO +SDO_GEORX.SETSPATIALREFERENCED +SDO_GEORX.SETSPATIALRESOLUTIONS +SDO_GEORX.SETSPECTRALRESOLUTION +SDO_GEORX.SETSPECTRALUNIT +SDO_GEORX.SETSRS +SDO_GEORX.SETSTATISTICS +SDO_GEORX.SETVAT +SDO_GEORX.SETVERSION +SDO_GEOR_ADDL_TRIGGER. +SDO_GEOR_ADMIN. +SDO_GEOR_ADMIN.CHECKSYSDATAENTRIES +SDO_GEOR_ADMIN.CREATEDMLTRIGGER +SDO_GEOR_ADMIN.GETUNIQUERDTNAME +SDO_GEOR_ADMIN.ISRDTNAMEUNIQUE +SDO_GEOR_ADMIN.ISUPGRADENEEDED +SDO_GEOR_ADMIN.LISTDANGLINGRASTERDATA +SDO_GEOR_ADMIN.LISTGEORASTERCOLUMNS +SDO_GEOR_ADMIN.LISTGEORASTEROBJECTS +SDO_GEOR_ADMIN.LISTGEORASTERTABLES +SDO_GEOR_ADMIN.LISTRDT +SDO_GEOR_ADMIN.LISTREGISTEREDRDT +SDO_GEOR_ADMIN.LISTUNREGISTEREDRDT +SDO_GEOR_ADMIN.MAINTAINSYSDATAENTRIES +SDO_GEOR_ADMIN.REGISTERGEORASTERCOLUMNS +SDO_GEOR_ADMIN.REGISTERGEORASTEROBJECTS +SDO_GEOR_ADMIN.UPGRADEGEORASTER +SDO_GEOR_AUX. +SDO_GEOR_AUX.AFTERDELETE +SDO_GEOR_AUX.AFTERINSERT +SDO_GEOR_AUX.AFTERUPDATE +SDO_GEOR_AUX.COMPRESSDATA +SDO_GEOR_AUX.COMPRESSDATAWITHCRATIO +SDO_GEOR_AUX.DECOMPRESSDATA +SDO_GEOR_AUX.DECOMPRESSDATAWITHCRATIO +SDO_GEOR_AUX.RAISEERROR +SDO_GEOR_AUX.RAISEERRORWITHMSG +SDO_GEOR_BDDL_TRIGGER. +SDO_GEOR_DEF. +SDO_GEOR_DEF.CHECKSYSDATAENTRIES +SDO_GEOR_DEF.DELETEMETAENTRY +SDO_GEOR_DEF.DISABLEFLAG +SDO_GEOR_DEF.DOALTERDROPCOLUMN +SDO_GEOR_DEF.DOALTERRENAMETABLE +SDO_GEOR_DEF.DODROPUSERANDTABLE +SDO_GEOR_DEF.DORENAMETABLE +SDO_GEOR_DEF.DOTRUNCATETABLE +SDO_GEOR_DEF.ENABLEFLAG +SDO_GEOR_DEF.GETSQLTEXT +SDO_GEOR_DEF.GETUNIQUERDTNAME +SDO_GEOR_DEF.INSERTMETAENTRY +SDO_GEOR_DEF.INSERTUSERSYSENTRY +SDO_GEOR_DEF.ISDROPCOLUMN +SDO_GEOR_DEF.ISRDTNAMEUNIQUE +SDO_GEOR_DEF.ISVALIDENTRY +SDO_GEOR_DEF.LISTALLGEORASTERFIELDS +SDO_GEOR_DEF.LISTALLGEORASTERFIELDSSTR +SDO_GEOR_DEF.LISTALLRDT +SDO_GEOR_DEF.MAINTAINSYSDATAENTRIES +SDO_GEOR_ERR_TRIGGER. +SDO_GEOR_GCP.SDO_GEOR_GCP +SDO_GEOR_GCPGEOREFTYPE.SDO_GEOR_GCPGEOREFTYPE +SDO_GEOR_INT. +SDO_GEOR_INT.AFTERDELETE +SDO_GEOR_INT.AFTERINSERT +SDO_GEOR_INT.AFTERUPDATE +SDO_GEOR_INT.CALCCOMPRESSIONRATIO +SDO_GEOR_INT.CALCOPTIMIZEDBLOCKSIZE +SDO_GEOR_INT.CALCRASTERNOMINALSIZE +SDO_GEOR_INT.CALCRASTERSTORAGESIZE +SDO_GEOR_INT.CHANGECELLVALUE +SDO_GEOR_INT.CHANGEFORMAT +SDO_GEOR_INT.CHANGEFORMATCOPY +SDO_GEOR_INT.CHECK_PARAM +SDO_GEOR_INT.CHECK_RDTNAME +SDO_GEOR_INT.COMPRESSDATA +SDO_GEOR_INT.COMPRESSDATAWITHCRATIO +SDO_GEOR_INT.CONVERTCELLCOORDINATE +SDO_GEOR_INT.CREATETEMPLATE +SDO_GEOR_INT.DECOMPRESSDATA +SDO_GEOR_INT.DECOMPRESSDATAWITHCRATIO +SDO_GEOR_INT.DELETEMETAENTRY +SDO_GEOR_INT.DELETEPYRAMID +SDO_GEOR_INT.EVALUATE +SDO_GEOR_INT.EXPORTTO +SDO_GEOR_INT.GENERATEBLOCKMBR +SDO_GEOR_INT.GENERATEPYRAMID +SDO_GEOR_INT.GENERATESPATIALEXTENT +SDO_GEOR_INT.GENERATESTATISTICS +SDO_GEOR_INT.GEOREFERENCE +SDO_GEOR_INT.GETATTRNO +SDO_GEOR_INT.GETBITMAPMASK +SDO_GEOR_INT.GETCELLCOORDINATE +SDO_GEOR_INT.GETCELLCOORDINATE2 +SDO_GEOR_INT.GETCELLVALUE +SDO_GEOR_INT.GETMODELCOORDINATE +SDO_GEOR_INT.GETRASTERSUBSET +SDO_GEOR_INT.HASBITMAPMASK +SDO_GEOR_INT.IMPORTFROM +SDO_GEOR_INT.INSERTUSERSYSENTRY +SDO_GEOR_INT.ISGEORASTERCOLUMN +SDO_GEOR_INT.ISVALIDRDT +SDO_GEOR_INT.MERGELAYERS +SDO_GEOR_INT.MOSAIC +SDO_GEOR_INT.MOSAICK +SDO_GEOR_INT.RASTERDATATABLEEXISTS +SDO_GEOR_INT.RASTERIZEPOLYGON +SDO_GEOR_INT.RASTERIZEPOLYGON0 +SDO_GEOR_INT.REPROJECT +SDO_GEOR_INT.SCALE +SDO_GEOR_INT.SCALECOPY +SDO_GEOR_INT.SETBITMAPMASK +SDO_GEOR_INT.SETULTCOORDINATE +SDO_GEOR_INT.SUBSET +SDO_GEOR_INT.TABLEEXISTS +SDO_GEOR_INT.UPDATERASTER +SDO_GEOR_INT.VALIDATEBLOCKMBR +SDO_GEOR_INT.VALIDATE_GEORASTER +SDO_GEOR_LIZARDTECH. +SDO_GEOR_LIZARDTECH.CHANGEFORMATCOPY +SDO_GEOR_LIZARDTECH.DECOMPRESSDATA +SDO_GEOR_LIZARDTECH.GETCOLORSPACE +SDO_GEOR_LIZARDTECH.SUBSET +SDO_GEOR_LIZARDTECH.VALIDATEDATA +SDO_GEOR_SRS.SDO_GEOR_SRS +SDO_GEOR_TRIG_DEL1. +SDO_GEOR_TRIG_INS1. +SDO_GEOR_TRIG_UPD1. +SDO_GEOR_UTL. +SDO_GEOR_UTL.CALCOPTIMIZEDBLOCKSIZE +SDO_GEOR_UTL.CALCRASTERNOMINALSIZE +SDO_GEOR_UTL.CALCRASTERSTORAGESIZE +SDO_GEOR_UTL.CREATEDMLTRIGGER +SDO_GEOR_UTL.MAKERDTNAMESUNIQUE +SDO_GEOR_UTL.RENAMERDT +SDO_GEO_ADDR.SDO_GEO_ADDR +SDO_IDX. +SDO_IDX.CMT_IDX_CHNGS +SDO_IDX.ENDIANCONVERT +SDO_IDX.IE_CRT_GEOM_METADATA +SDO_IDX.PROCESS_PARAMS +SDO_IDX.TTS_INDEX_INITIALIZE +SDO_INDEX_METHOD_10I.EXECUTE_INDEX_PTN_DROP +SDO_INDEX_METHOD_10I.INDEX_UPDATE +SDO_INDEX_METHOD_10I.INSERT_DELETE +SDO_INDEX_METHOD_10I.ODCIGETINTERFACES +SDO_INDEX_METHOD_10I.ODCIINDEXALTER +SDO_INDEX_METHOD_10I.ODCIINDEXCLOSE +SDO_INDEX_METHOD_10I.ODCIINDEXCOALESCEPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXCREATE +SDO_INDEX_METHOD_10I.ODCIINDEXDELETE +SDO_INDEX_METHOD_10I.ODCIINDEXDROP +SDO_INDEX_METHOD_10I.ODCIINDEXEXCHANGEPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXFETCH +SDO_INDEX_METHOD_10I.ODCIINDEXGETMETADATA +SDO_INDEX_METHOD_10I.ODCIINDEXINSERT +SDO_INDEX_METHOD_10I.ODCIINDEXMERGEPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXREWRITE +SDO_INDEX_METHOD_10I.ODCIINDEXSPLITPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXSTART +SDO_INDEX_METHOD_10I.ODCIINDEXTRUNCATE +SDO_INDEX_METHOD_10I.ODCIINDEXUPDATE +SDO_INDEX_METHOD_10I.ODCIINDEXUTILCLEANUP +SDO_INDEX_METHOD_10I.ODCIINDEXUTILGETTABLENAMES +SDO_JOIN. +SDO_LINK_I.GET_CHILD_LINKS +SDO_LINK_I.GET_CHILD_LINKS_S +SDO_LINK_I.GET_COST +SDO_LINK_I.GET_COST_S +SDO_LINK_I.GET_CO_LINK_IDS +SDO_LINK_I.GET_CO_LINK_IDS_S +SDO_LINK_I.GET_END_MEASURE +SDO_LINK_I.GET_END_MEASURE_S +SDO_LINK_I.GET_END_NODE_ID +SDO_LINK_I.GET_END_NODE_ID_S +SDO_LINK_I.GET_GEOMETRY +SDO_LINK_I.GET_GEOMETRY_S +SDO_LINK_I.GET_GEOM_ID +SDO_LINK_I.GET_GEOM_ID_S +SDO_LINK_I.GET_LEVEL +SDO_LINK_I.GET_LEVEL_S +SDO_LINK_I.GET_NAME +SDO_LINK_I.GET_NAME_S +SDO_LINK_I.GET_PARENT_LINK_ID +SDO_LINK_I.GET_PARENT_LINK_ID_S +SDO_LINK_I.GET_SIBLING_LINK_IDS +SDO_LINK_I.GET_SIBLING_LINK_IDS_S +SDO_LINK_I.GET_START_MEASURE +SDO_LINK_I.GET_START_MEASURE_S +SDO_LINK_I.GET_START_NODE_ID +SDO_LINK_I.GET_START_NODE_ID_S +SDO_LINK_I.GET_STATE +SDO_LINK_I.GET_STATE_S +SDO_LINK_I.GET_TYPE +SDO_LINK_I.GET_TYPE_S +SDO_LINK_I.IS_ACTIVE +SDO_LINK_I.IS_ACTIVE_S +SDO_LINK_I.IS_LOGICAL +SDO_LINK_I.IS_LOGICAL_S +SDO_LINK_I.IS_TEMPORARY +SDO_LINK_I.IS_TEMPORARY_S +SDO_LINK_I.MAKE_TEMPORARY +SDO_LINK_I.MAKE_TEMPORARY_S +SDO_LINK_I.SET_COST +SDO_LINK_I.SET_COST_S +SDO_LINK_I.SET_END_NODE +SDO_LINK_I.SET_END_NODE_S +SDO_LINK_I.SET_GEOMETRY +SDO_LINK_I.SET_GEOMETRY_S +SDO_LINK_I.SET_GEOM_ID +SDO_LINK_I.SET_GEOM_ID_S +SDO_LINK_I.SET_LEVEL +SDO_LINK_I.SET_LEVEL_S +SDO_LINK_I.SET_MEASURE +SDO_LINK_I.SET_MEASURE_S +SDO_LINK_I.SET_NAME +SDO_LINK_I.SET_NAME_S +SDO_LINK_I.SET_PARENT_LINK +SDO_LINK_I.SET_PARENT_LINK_S +SDO_LINK_I.SET_START_NODE +SDO_LINK_I.SET_START_NODE_S +SDO_LINK_I.SET_STATE +SDO_LINK_I.SET_STATE_S +SDO_LINK_I.SET_TYPE +SDO_LINK_I.SET_TYPE_S +SDO_LINK_T.GET_CHILD_LINKS +SDO_LINK_T.GET_COST +SDO_LINK_T.GET_CO_LINK_IDS +SDO_LINK_T.GET_END_MEASURE +SDO_LINK_T.GET_END_NODE_ID +SDO_LINK_T.GET_GEOMETRY +SDO_LINK_T.GET_GEOM_ID +SDO_LINK_T.GET_LEVEL +SDO_LINK_T.GET_NAME +SDO_LINK_T.GET_PARENT_LINK_ID +SDO_LINK_T.GET_SIBLING_LINK_IDS +SDO_LINK_T.GET_START_MEASURE +SDO_LINK_T.GET_START_NODE_ID +SDO_LINK_T.GET_STATE +SDO_LINK_T.GET_TYPE +SDO_LINK_T.IS_ACTIVE +SDO_LINK_T.IS_LOGICAL +SDO_LINK_T.IS_TEMPORARY +SDO_LINK_T.MAKE_TEMPORARY +SDO_LINK_T.SET_COST +SDO_LINK_T.SET_END_NODE +SDO_LINK_T.SET_GEOMETRY +SDO_LINK_T.SET_GEOM_ID +SDO_LINK_T.SET_LEVEL +SDO_LINK_T.SET_MEASURE +SDO_LINK_T.SET_NAME +SDO_LINK_T.SET_PARENT_LINK +SDO_LINK_T.SET_START_NODE +SDO_LINK_T.SET_STATE +SDO_LINK_T.SET_TYPE +SDO_LRS. +SDO_LRS.CLIP_GEOM_SEGMENT +SDO_LRS.CLIP_GEOM_SEGMENT_3D +SDO_LRS.CONCATENATE_GEOM_SEGMENTS +SDO_LRS.CONCATENATE_GEOM_SEGMENTS_3D +SDO_LRS.CONNECTED_GEOM_SEGMENTS +SDO_LRS.CONNECTED_GEOM_SEGMENTS_3D +SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY +SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY_3D +SDO_LRS.CONVERT_TO_LRS_GEOM +SDO_LRS.CONVERT_TO_LRS_GEOM_3D +SDO_LRS.CONVERT_TO_LRS_LAYER +SDO_LRS.CONVERT_TO_LRS_LAYER_3D +SDO_LRS.CONVERT_TO_STD_DIM_ARRAY +SDO_LRS.CONVERT_TO_STD_DIM_ARRAY_3D +SDO_LRS.CONVERT_TO_STD_GEOM +SDO_LRS.CONVERT_TO_STD_GEOM_3D +SDO_LRS.CONVERT_TO_STD_LAYER +SDO_LRS.CONVERT_TO_STD_LAYER_3D +SDO_LRS.DEFINE_GEOM_SEGMENT +SDO_LRS.DEFINE_GEOM_SEGMENT_3D +SDO_LRS.DYNAMIC_SEGMENT +SDO_LRS.DYNAMIC_SEGMENT_3D +SDO_LRS.FIND_LRS_DIM_POS +SDO_LRS.FIND_MEASURE +SDO_LRS.FIND_MEASURE_3D +SDO_LRS.FIND_OFFSET +SDO_LRS.GEOM_SEGMENT_END_MEASURE +SDO_LRS.GEOM_SEGMENT_END_MEASURE_3D +SDO_LRS.GEOM_SEGMENT_END_PT +SDO_LRS.GEOM_SEGMENT_END_PT_3D +SDO_LRS.GEOM_SEGMENT_LENGTH +SDO_LRS.GEOM_SEGMENT_LENGTH_3D +SDO_LRS.GEOM_SEGMENT_START_MEASURE +SDO_LRS.GEOM_SEGMENT_START_MEASURE_3D +SDO_LRS.GEOM_SEGMENT_START_PT +SDO_LRS.GEOM_SEGMENT_START_PT_3D +SDO_LRS.GET_MEASURE +SDO_LRS.GET_MEASURE_3D +SDO_LRS.GET_NEXT_SHAPE_PT +SDO_LRS.GET_NEXT_SHAPE_PT_3D +SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE +SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE_3D +SDO_LRS.GET_PREV_SHAPE_PT +SDO_LRS.GET_PREV_SHAPE_PT_3D +SDO_LRS.GET_PREV_SHAPE_PT_MEASURE +SDO_LRS.GET_PREV_SHAPE_PT_MEASURE_3D +SDO_LRS.IS_GEOM_SEGMENT_DEFINED +SDO_LRS.IS_GEOM_SEGMENT_DEFINED_3D +SDO_LRS.IS_MEASURE_DECREASING +SDO_LRS.IS_MEASURE_DECREASING_3D +SDO_LRS.IS_MEASURE_INCREASING +SDO_LRS.IS_MEASURE_INCREASING_3D +SDO_LRS.IS_SHAPE_PT_MEASURE +SDO_LRS.IS_SHAPE_PT_MEASURE_3D +SDO_LRS.LOCATE_PT +SDO_LRS.LOCATE_PT_3D +SDO_LRS.LRS_INTERSECTION +SDO_LRS.MEASURE_RANGE +SDO_LRS.MEASURE_RANGE_3D +SDO_LRS.MEASURE_TO_PERCENTAGE +SDO_LRS.OFFSET_GEOM_SEGMENT +SDO_LRS.PERCENTAGE_TO_MEASURE +SDO_LRS.PROJECT_PT +SDO_LRS.PROJECT_PT_3D +SDO_LRS.REDEFINE_GEOM_SEGMENT +SDO_LRS.REDEFINE_GEOM_SEGMENT_3D +SDO_LRS.RESET_MEASURE +SDO_LRS.REVERSE_GEOMETRY +SDO_LRS.REVERSE_MEASURE +SDO_LRS.REVERSE_MEASURE_3D +SDO_LRS.SCALE_GEOM_SEGMENT +SDO_LRS.SET_PT_MEASURE +SDO_LRS.SET_PT_MEASURE_3D +SDO_LRS.SPLIT_GEOM_SEGMENT +SDO_LRS.SPLIT_GEOM_SEGMENT_3D +SDO_LRS.TRANSLATE_MEASURE +SDO_LRS.TRANSLATE_MEASURE_3D +SDO_LRS.VALIDATE_LRS_GEOMETRY +SDO_LRS.VALIDATE_LRS_GEOMETRY_3D +SDO_LRS.VALID_GEOM_SEGMENT +SDO_LRS.VALID_GEOM_SEGMENT_3D +SDO_LRS.VALID_LRS_PT +SDO_LRS.VALID_LRS_PT_3D +SDO_LRS.VALID_MEASURE +SDO_LRS.VALID_MEASURE_3D +SDO_LRS_TRIG_DEL. +SDO_LRS_TRIG_INS. +SDO_LRS_TRIG_UPD. +SDO_META. +SDO_META.CHANGE_ALL_SDO_GEOM_METADATA +SDO_MIGRATE. +SDO_MIGRATE.FROM_815_TO_81X +SDO_MIGRATE.OGIS_METADATA_FROM +SDO_MIGRATE.OGIS_METADATA_TO +SDO_MIGRATE.TO_81X +SDO_MIGRATE.TO_CURRENT +SDO_NET. +SDO_NET.COMPUTE_PATH_GEOMETRY +SDO_NET.COPY_NETWORK +SDO_NET.CREATE_COMPONENT_TABLE +SDO_NET.CREATE_DELETE_TRIGGER +SDO_NET.CREATE_LINK_TABLE +SDO_NET.CREATE_LOGICAL_NETWORK +SDO_NET.CREATE_LRS_NETWORK +SDO_NET.CREATE_LRS_TABLE +SDO_NET.CREATE_NETWORK +SDO_NET.CREATE_NODE_TABLE +SDO_NET.CREATE_PARTITION_BLOB_TABLE +SDO_NET.CREATE_PARTITION_TABLE +SDO_NET.CREATE_PATH_LINK_TABLE +SDO_NET.CREATE_PATH_TABLE +SDO_NET.CREATE_REF_CONSTRAINTS +SDO_NET.CREATE_SDO_NETWORK +SDO_NET.CREATE_SUBPATH_TABLE +SDO_NET.CREATE_TOPO_NETWORK +SDO_NET.DB_SYNC_CLEAR +SDO_NET.DB_SYNC_DISABLE +SDO_NET.DB_SYNC_ENABLE +SDO_NET.DB_SYNC_GET_UPDATE +SDO_NET.DELETE_LINK +SDO_NET.DELETE_NODE +SDO_NET.DELETE_PATH +SDO_NET.DELETE_SUBPATH +SDO_NET.DEREGISTER_CONSTRAINT +SDO_NET.DEREGISTER_JAVA_OBJECT +SDO_NET.DISABLE_REF_CONSTRAINTS +SDO_NET.DROP_NETWORK +SDO_NET.DROP_REF_CONSTRAINTS +SDO_NET.ENABLE_REF_CONSTRAINTS +SDO_NET.FIND_CONNECTED_COMPONENTS +SDO_NET.GENERATE_NODE_LEVELS +SDO_NET.GENERATE_PARTITION_BLOB +SDO_NET.GENERATE_PARTITION_BLOBS +SDO_NET.GET_CHILD_LINKS +SDO_NET.GET_CHILD_NODES +SDO_NET.GET_GEOMETRY +SDO_NET.GET_GEOMETRY_TYPE +SDO_NET.GET_INVALID_LINKS +SDO_NET.GET_INVALID_NODES +SDO_NET.GET_INVALID_PATHS +SDO_NET.GET_IN_LINKS +SDO_NET.GET_ISOLATED_NODES +SDO_NET.GET_LINKS_IN_PATH +SDO_NET.GET_LINK_COST_COLUMN +SDO_NET.GET_LINK_DIRECTION +SDO_NET.GET_LINK_GEOMETRY +SDO_NET.GET_LINK_GEOM_COLUMN +SDO_NET.GET_LINK_PARTITION_COLUMN +SDO_NET.GET_LINK_TABLE_NAME +SDO_NET.GET_LRS_GEOM_COLUMN +SDO_NET.GET_LRS_LINK_GEOMETRY +SDO_NET.GET_LRS_NODE_GEOMETRY +SDO_NET.GET_LRS_TABLE_NAME +SDO_NET.GET_NETWORK_CATEGORY +SDO_NET.GET_NETWORK_ID +SDO_NET.GET_NETWORK_NAME +SDO_NET.GET_NETWORK_OWNER +SDO_NET.GET_NETWORK_TYPE +SDO_NET.GET_NODES_IN_PATH +SDO_NET.GET_NODE_COST_COLUMN +SDO_NET.GET_NODE_DEGREE +SDO_NET.GET_NODE_GEOMETRY +SDO_NET.GET_NODE_GEOM_COLUMN +SDO_NET.GET_NODE_HIERARCHY_LEVEL +SDO_NET.GET_NODE_IN_DEGREE +SDO_NET.GET_NODE_OUT_DEGREE +SDO_NET.GET_NODE_PARTITION_COLUMN +SDO_NET.GET_NODE_TABLE_NAME +SDO_NET.GET_NO_OF_HIERARCHY_LEVELS +SDO_NET.GET_NO_OF_LINKS +SDO_NET.GET_NO_OF_LINKS_IN_PATH +SDO_NET.GET_NO_OF_NODES +SDO_NET.GET_NO_OF_NODES_IN_PATH +SDO_NET.GET_NO_OF_PARTITIONS +SDO_NET.GET_OUT_LINKS +SDO_NET.GET_PARTITION_BLOB_TABLE_NAME +SDO_NET.GET_PARTITION_SIZE +SDO_NET.GET_PARTITION_TABLE_NAME +SDO_NET.GET_PATH_GEOM_COLUMN +SDO_NET.GET_PATH_LINK_TABLE_NAME +SDO_NET.GET_PATH_TABLE_NAME +SDO_NET.GET_PERCENTAGE +SDO_NET.GET_PT +SDO_NET.GET_SUBPATH_GEOM_COLUMN +SDO_NET.GET_SUBPATH_TABLE_NAME +SDO_NET.GET_TOPOLOGY +SDO_NET.GET_TOPO_LINK_GEOMETRY +SDO_NET.GET_TOPO_NODE_GEOMETRY +SDO_NET.GET_USER_DEFINED_DATA +SDO_NET.INSERT_GEOM_METADATA +SDO_NET.INSERT_PATH_LINK_INFO +SDO_NET.IS_COMPLEX +SDO_NET.IS_HIERARCHICAL +SDO_NET.IS_LINK_IN_PATH +SDO_NET.IS_LOGICAL +SDO_NET.IS_NODE_IN_PATH +SDO_NET.IS_SIMPLE +SDO_NET.IS_SPATIAL +SDO_NET.LOAD_CONFIG +SDO_NET.LOGICAL_PARTITION +SDO_NET.LOGICAL_POWERLAW_PARTITION +SDO_NET.LRS_GEOMETRY_NETWORK +SDO_NET.NETWORK_EXISTS +SDO_NET.REGISTER_CONSTRAINT +SDO_NET.REGISTER_JAVA_OBJECT +SDO_NET.SDO_GEOMETRY_NETWORK +SDO_NET.SET_LOGGING_LEVEL +SDO_NET.SET_MAX_JAVA_HEAP_SIZE +SDO_NET.SPATIAL_PARTITION +SDO_NET.SWITCH_TO_LOGICAL_NETWORK +SDO_NET.SWITCH_TO_SPATIAL_NETWORK +SDO_NET.TOPO_GEOMETRY_NETWORK +SDO_NET.UPDATE_CONSISTENCY +SDO_NET.VALIDATE_COMPONENT_SCHEMA +SDO_NET.VALIDATE_CONSISTENCY +SDO_NET.VALIDATE_LINK_SCHEMA +SDO_NET.VALIDATE_LRS_SCHEMA +SDO_NET.VALIDATE_NETWORK +SDO_NET.VALIDATE_NODE_SCHEMA +SDO_NET.VALIDATE_PARTITION_BLOB_SCHEMA +SDO_NET.VALIDATE_PARTITION_INFO +SDO_NET.VALIDATE_PARTITION_SCHEMA +SDO_NET.VALIDATE_PATH_SCHEMA +SDO_NET.VALIDATE_SUBPATH_SCHEMA +SDO_NETWORK_CONS_DEL_TRIG. +SDO_NETWORK_CONS_INS_TRIG. +SDO_NETWORK_CONS_UPD_TRIG. +SDO_NETWORK_DROP_USER. +SDO_NETWORK_HIS_DEL_TRIG. +SDO_NETWORK_HIS_INS_TRIG. +SDO_NETWORK_HIS_UPD_TRIG. +SDO_NETWORK_I.ADD_LINK +SDO_NETWORK_I.ADD_LINK_S +SDO_NETWORK_I.ADD_LRS_LINK +SDO_NETWORK_I.ADD_LRS_LINK_S +SDO_NETWORK_I.ADD_LRS_NODE +SDO_NETWORK_I.ADD_LRS_NODE_S +SDO_NETWORK_I.ADD_NODE +SDO_NETWORK_I.ADD_NODE_S +SDO_NETWORK_I.ADD_PATH +SDO_NETWORK_I.ADD_PATH_S +SDO_NETWORK_I.ADD_SDO_LINK +SDO_NETWORK_I.ADD_SDO_LINK_S +SDO_NETWORK_I.ADD_SDO_NODE +SDO_NETWORK_I.ADD_SDO_NODE_S +SDO_NETWORK_I.DELETE_LINK +SDO_NETWORK_I.DELETE_LINK_S +SDO_NETWORK_I.DELETE_NODE +SDO_NETWORK_I.DELETE_NODE_S +SDO_NETWORK_I.DELETE_PATH +SDO_NETWORK_I.DELETE_PATH_S +SDO_NETWORK_I.GET_MAX_LINK_ID +SDO_NETWORK_I.GET_MAX_LINK_ID_S +SDO_NETWORK_I.GET_MAX_NODE_ID +SDO_NETWORK_I.GET_MAX_NODE_ID_S +SDO_NETWORK_I.GET_MAX_PATH_ID +SDO_NETWORK_I.GET_MAX_PATH_ID_S +SDO_NETWORK_I.GET_MAX_SUBPATH_ID +SDO_NETWORK_I.GET_MAX_SUBPATH_ID_S +SDO_NETWORK_JAVA_DEL_TRIG. +SDO_NETWORK_JAVA_INS_TRIG. +SDO_NETWORK_JAVA_UPD_TRIG. +SDO_NETWORK_LOCKS_DEL_TRIG. +SDO_NETWORK_LOCKS_INS_TRIG. +SDO_NETWORK_LOCKS_UPD_TRIG. +SDO_NETWORK_MANAGER_I.ADJUST_LINK_FILTER +SDO_NETWORK_MANAGER_I.ADJUST_NODE_FILTER +SDO_NETWORK_MANAGER_I.ADJUST_PATH_FILTER +SDO_NETWORK_MANAGER_I.ALL_PATHS +SDO_NETWORK_MANAGER_I.ALL_PATHS_S +SDO_NETWORK_MANAGER_I.CREATE_LOGICAL_NETWORK +SDO_NETWORK_MANAGER_I.CREATE_LOGICAL_NETWORK_S +SDO_NETWORK_MANAGER_I.CREATE_LRS_NETWORK +SDO_NETWORK_MANAGER_I.CREATE_LRS_NETWORK_S +SDO_NETWORK_MANAGER_I.CREATE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_I.CREATE_REF_CONSTRAINTS_S +SDO_NETWORK_MANAGER_I.CREATE_SDO_NETWORK +SDO_NETWORK_MANAGER_I.CREATE_SDO_NETWORK_S +SDO_NETWORK_MANAGER_I.DEREGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_I.DEREGISTER_LOCK +SDO_NETWORK_MANAGER_I.DISABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_I.DISABLE_REF_CONSTRAINTS_S +SDO_NETWORK_MANAGER_I.DISABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_I.DROP_NETWORK +SDO_NETWORK_MANAGER_I.DROP_NETWORK_S +SDO_NETWORK_MANAGER_I.ENABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_I.ENABLE_REF_CONSTRAINTS_S +SDO_NETWORK_MANAGER_I.ENABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_I.FIND_CONNECTED_COMPONENTS +SDO_NETWORK_MANAGER_I.FIND_CONNECTED_COMPONENTS_S +SDO_NETWORK_MANAGER_I.FIND_REACHABLE_NODES +SDO_NETWORK_MANAGER_I.FIND_REACHABLE_NODES_S +SDO_NETWORK_MANAGER_I.FIND_REACHING_NODES +SDO_NETWORK_MANAGER_I.FIND_REACHING_NODES_S +SDO_NETWORK_MANAGER_I.GET_DEFAULT_VALUE_S +SDO_NETWORK_MANAGER_I.GET_LOCK_ID +SDO_NETWORK_MANAGER_I.GET_LOCK_INFO +SDO_NETWORK_MANAGER_I.GET_NET_TAB_NAMES +SDO_NETWORK_MANAGER_I.IS_REACHABLE +SDO_NETWORK_MANAGER_I.IS_REACHABLE_S +SDO_NETWORK_MANAGER_I.IS_VERSIONED_S +SDO_NETWORK_MANAGER_I.IS_VERSIONED_TAB +SDO_NETWORK_MANAGER_I.IS_VERSIONED_WM +SDO_NETWORK_MANAGER_I.LIST_NETWORKS +SDO_NETWORK_MANAGER_I.LIST_NETWORKS_S +SDO_NETWORK_MANAGER_I.LOCK_ROWS_WM +SDO_NETWORK_MANAGER_I.MCST_LINK +SDO_NETWORK_MANAGER_I.MCST_LINK_S +SDO_NETWORK_MANAGER_I.NEAREST_NEIGHBORS +SDO_NETWORK_MANAGER_I.NEAREST_NEIGHBORS_S +SDO_NETWORK_MANAGER_I.READ_CONSTRAINT +SDO_NETWORK_MANAGER_I.READ_NETWORK +SDO_NETWORK_MANAGER_I.READ_NETWORK_S +SDO_NETWORK_MANAGER_I.REGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_I.REGISTER_LOCK +SDO_NETWORK_MANAGER_I.SHORTEST_PATH +SDO_NETWORK_MANAGER_I.SHORTEST_PATH_DIJKSTRA +SDO_NETWORK_MANAGER_I.SHORTEST_PATH_DIJKSTRA_S +SDO_NETWORK_MANAGER_I.SHORTEST_PATH_S +SDO_NETWORK_MANAGER_I.TSP_PATH +SDO_NETWORK_MANAGER_I.TSP_PATH_S +SDO_NETWORK_MANAGER_I.UNLOCK_ROWS_WM +SDO_NETWORK_MANAGER_I.VALIDATE_NETWORK_SCHEMA +SDO_NETWORK_MANAGER_I.VALIDATE_NETWORK_SCHEMA_S +SDO_NETWORK_MANAGER_I.WITHIN_COST +SDO_NETWORK_MANAGER_I.WITHIN_COST_S +SDO_NETWORK_MANAGER_I.WRITE_NETWORK +SDO_NETWORK_MANAGER_I.WRITE_NETWORK_S +SDO_NETWORK_MANAGER_T.ALL_PATHS +SDO_NETWORK_MANAGER_T.CREATE_LOGICAL_NETWORK +SDO_NETWORK_MANAGER_T.CREATE_LRS_NETWORK +SDO_NETWORK_MANAGER_T.CREATE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_T.CREATE_SDO_NETWORK +SDO_NETWORK_MANAGER_T.DEREGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_T.DISABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_T.DISABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_T.DROP_NETWORK +SDO_NETWORK_MANAGER_T.ENABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_T.ENABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_T.FIND_CONNECTED_COMPONENTS +SDO_NETWORK_MANAGER_T.FIND_REACHABLE_NODES +SDO_NETWORK_MANAGER_T.FIND_REACHING_NODES +SDO_NETWORK_MANAGER_T.IS_REACHABLE +SDO_NETWORK_MANAGER_T.IS_VERSIONED_WM +SDO_NETWORK_MANAGER_T.LIST_NETWORKS +SDO_NETWORK_MANAGER_T.LOCK_ROWS_WM +SDO_NETWORK_MANAGER_T.MCST_LINK +SDO_NETWORK_MANAGER_T.NEAREST_NEIGHBORS +SDO_NETWORK_MANAGER_T.READ_NETWORK +SDO_NETWORK_MANAGER_T.REGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_T.SHORTEST_PATH +SDO_NETWORK_MANAGER_T.SHORTEST_PATH_DIJKSTRA +SDO_NETWORK_MANAGER_T.TSP_PATH +SDO_NETWORK_MANAGER_T.UNLOCK_ROWS_WM +SDO_NETWORK_MANAGER_T.VALIDATE_NETWORK_SCHEMA +SDO_NETWORK_MANAGER_T.WITHIN_COST +SDO_NETWORK_MANAGER_T.WRITE_NETWORK +SDO_NETWORK_T.ADD_LINK +SDO_NETWORK_T.ADD_LRS_LINK +SDO_NETWORK_T.ADD_LRS_NODE +SDO_NETWORK_T.ADD_NODE +SDO_NETWORK_T.ADD_PATH +SDO_NETWORK_T.ADD_SDO_LINK +SDO_NETWORK_T.ADD_SDO_NODE +SDO_NETWORK_T.DELETE_LINK +SDO_NETWORK_T.DELETE_NODE +SDO_NETWORK_T.DELETE_PATH +SDO_NETWORK_T.GET_MAX_LINK_ID +SDO_NETWORK_T.GET_MAX_NODE_ID +SDO_NETWORK_T.GET_MAX_PATH_ID +SDO_NETWORK_T.GET_MAX_SUBPATH_ID +SDO_NETWORK_TIME_DEL_TRIG. +SDO_NETWORK_TIME_INS_TRIG. +SDO_NETWORK_TIME_UPD_TRIG. +SDO_NETWORK_TRIG_DEL. +SDO_NETWORK_TRIG_INS. +SDO_NETWORK_TRIG_UPD. +SDO_NETWORK_UD_DEL_TRIG. +SDO_NETWORK_UD_INS_TRIG. +SDO_NETWORK_UD_UPD_TRIG. +SDO_NET_MEM. +SDO_NET_MEM.SET_MAX_MEMORY_SIZE +SDO_NET_PARTITION. +SDO_NET_PARTITION.ADJUST_M +SDO_NET_PARTITION.CLEAN_TABLES +SDO_NET_PARTITION.GET_PID +SDO_NET_PARTITION.GRAPH_PARTITION +SDO_NET_PARTITION.LG_POWERLAW_PART +SDO_NET_PARTITION.LOGICAL_PART +SDO_NET_PARTITION.LOG_MESSAGE +SDO_NET_PARTITION.MIN_EIGENVECTOR +SDO_NET_PARTITION.SET_LOG_INFO +SDO_NODE_I.GET_ADJACENT_NODE_IDS +SDO_NODE_I.GET_ADJACENT_NODE_IDS_S +SDO_NODE_I.GET_CHILD_NODE_IDS +SDO_NODE_I.GET_CHILD_NODE_IDS_S +SDO_NODE_I.GET_COMPONENT_NO +SDO_NODE_I.GET_COMPONENT_NO_S +SDO_NODE_I.GET_COST +SDO_NODE_I.GET_COST_S +SDO_NODE_I.GET_DEGREE +SDO_NODE_I.GET_DEGREE_S +SDO_NODE_I.GET_GEOMETRY +SDO_NODE_I.GET_GEOMETRY_S +SDO_NODE_I.GET_GEOM_ID +SDO_NODE_I.GET_GEOM_ID_S +SDO_NODE_I.GET_HIERARCHY_LEVEL +SDO_NODE_I.GET_HIERARCHY_LEVEL_S +SDO_NODE_I.GET_INCIDENT_LINK_IDS +SDO_NODE_I.GET_INCIDENT_LINK_IDS_S +SDO_NODE_I.GET_IN_DEGREE +SDO_NODE_I.GET_IN_DEGREE_S +SDO_NODE_I.GET_IN_LINK_IDS +SDO_NODE_I.GET_IN_LINK_IDS_S +SDO_NODE_I.GET_MEASURE +SDO_NODE_I.GET_MEASURE_S +SDO_NODE_I.GET_NAME +SDO_NODE_I.GET_NAME_S +SDO_NODE_I.GET_OUT_DEGREE +SDO_NODE_I.GET_OUT_DEGREE_S +SDO_NODE_I.GET_OUT_LINK_IDS +SDO_NODE_I.GET_OUT_LINK_IDS_S +SDO_NODE_I.GET_PARENT_NODE_ID +SDO_NODE_I.GET_PARENT_NODE_ID_S +SDO_NODE_I.GET_PARTITION_ID +SDO_NODE_I.GET_PARTITION_ID_S +SDO_NODE_I.GET_SIBLING_NODE_IDS +SDO_NODE_I.GET_SIBLING_NODE_IDS_S +SDO_NODE_I.GET_STATE +SDO_NODE_I.GET_STATE_S +SDO_NODE_I.GET_TYPE +SDO_NODE_I.GET_TYPE_S +SDO_NODE_I.IS_ACTIVE +SDO_NODE_I.IS_ACTIVE_S +SDO_NODE_I.IS_LOGICAL +SDO_NODE_I.IS_LOGICAL_S +SDO_NODE_I.IS_TEMPORARY +SDO_NODE_I.IS_TEMPORARY_S +SDO_NODE_I.LINK_EXISTS +SDO_NODE_I.LINK_EXISTS_S +SDO_NODE_I.MAKE_TEMPORARY +SDO_NODE_I.MAKE_TEMPORARY_S +SDO_NODE_I.SET_COMPONENT_NO +SDO_NODE_I.SET_COMPONENT_NO_S +SDO_NODE_I.SET_COST +SDO_NODE_I.SET_COST_S +SDO_NODE_I.SET_GEOMETRY +SDO_NODE_I.SET_GEOMETRY_S +SDO_NODE_I.SET_GEOM_ID +SDO_NODE_I.SET_GEOM_ID_S +SDO_NODE_I.SET_HIERARCHY_LEVEL +SDO_NODE_I.SET_HIERARCHY_LEVEL_S +SDO_NODE_I.SET_MEASURE +SDO_NODE_I.SET_MEASURE_S +SDO_NODE_I.SET_NAME +SDO_NODE_I.SET_NAME_S +SDO_NODE_I.SET_PARENT_NODE +SDO_NODE_I.SET_PARENT_NODE_S +SDO_NODE_I.SET_STATE +SDO_NODE_I.SET_STATE_S +SDO_NODE_I.SET_TYPE +SDO_NODE_I.SET_TYPE_S +SDO_NODE_T.GET_ADJACENT_NODE_IDS +SDO_NODE_T.GET_CHILD_NODE_IDS +SDO_NODE_T.GET_COMPONENT_NO +SDO_NODE_T.GET_COST +SDO_NODE_T.GET_DEGREE +SDO_NODE_T.GET_GEOMETRY +SDO_NODE_T.GET_GEOM_ID +SDO_NODE_T.GET_HIERARCHY_LEVEL +SDO_NODE_T.GET_INCIDENT_LINK_IDS +SDO_NODE_T.GET_IN_DEGREE +SDO_NODE_T.GET_IN_LINK_IDS +SDO_NODE_T.GET_MEASURE +SDO_NODE_T.GET_NAME +SDO_NODE_T.GET_OUT_DEGREE +SDO_NODE_T.GET_OUT_LINK_IDS +SDO_NODE_T.GET_PARENT_NODE_ID +SDO_NODE_T.GET_PARTITION_ID +SDO_NODE_T.GET_SIBLING_NODE_IDS +SDO_NODE_T.GET_STATE +SDO_NODE_T.GET_TYPE +SDO_NODE_T.IS_ACTIVE +SDO_NODE_T.IS_LOGICAL +SDO_NODE_T.IS_TEMPORARY +SDO_NODE_T.LINK_EXISTS +SDO_NODE_T.MAKE_TEMPORARY +SDO_NODE_T.SET_COMPONENT_NO +SDO_NODE_T.SET_COST +SDO_NODE_T.SET_GEOMETRY +SDO_NODE_T.SET_GEOM_ID +SDO_NODE_T.SET_HIERARCHY_LEVEL +SDO_NODE_T.SET_MEASURE +SDO_NODE_T.SET_NAME +SDO_NODE_T.SET_PARENT_NODE +SDO_NODE_T.SET_STATE +SDO_NODE_T.SET_TYPE +SDO_OLS. +SDO_OLS.DETERMINE_CLASSIFICATION +SDO_OLS.EXTRACT +SDO_OLS.EXTRACTVALUE +SDO_OLS.GENERATE_ERROR +SDO_OLS.GETBASISXML +SDO_OLS.GETNS +SDO_OLS.HANDLE_OPENLS_ERROR +SDO_OLS.MAKEOPENLS10REQUEST +SDO_OLS.MAKEOPENLSCLOBREQUEST +SDO_OLS.MAKEOPENLSREQUEST +SDO_OLS.MAKEOPENLSSOAPREQUEST +SDO_OLS.PARSE_COORD_PAIR +SDO_OLS.POSTCLOB +SDO_OLS.POSTXML +SDO_OLS_DIRECTORY. +SDO_OLS_DIRECTORY.GETOPENLSFORBUSINESS +SDO_OLS_DIRECTORY.GETOPENLSFORCATEGORIES +SDO_OLS_DIRECTORY.GETOPENLSFORCATEGORY +SDO_OLS_DIRECTORY.ISBUSINESSOFCATEGORYID +SDO_OLS_DIRECTORY.ISBUSINESSOFCATEGORYNAME +SDO_OLS_DIRECTORY.MAKEOPENLS10REQUEST +SDO_OLS_LOCUTL. +SDO_OLS_LOCUTL.GEOCODESINGLEADR +SDO_OLS_LOCUTL.MAKEOPENLS10REQUEST +SDO_OLS_PRESENTATION. +SDO_OLS_PRESENTATION.MAKEOPENLS10REQUEST +SDO_OLS_PRESENTATION.SPECIFY_POI_FOR_MAPVIEWER +SDO_OLS_PRESENTATION.SPECIFY_THEME_FOR_MAPVIEWER +SDO_OLS_ROUTE. +SDO_OLS_ROUTE.MAKEOPENLS10REQUEST +SDO_OLS_ROUTE.MANEUVERORACLETOOPENLS +SDO_PATH_I.COMPUTE_GEOMETRY +SDO_PATH_I.COMPUTE_GEOMETRY_S +SDO_PATH_I.GET_COST +SDO_PATH_I.GET_COST_S +SDO_PATH_I.GET_END_NODE_ID +SDO_PATH_I.GET_END_NODE_ID_S +SDO_PATH_I.GET_GEOMETRY +SDO_PATH_I.GET_GEOMETRY_S +SDO_PATH_I.GET_LINK_IDS +SDO_PATH_I.GET_LINK_IDS_S +SDO_PATH_I.GET_NAME +SDO_PATH_I.GET_NAME_S +SDO_PATH_I.GET_NODE_IDS +SDO_PATH_I.GET_NODE_IDS_S +SDO_PATH_I.GET_NO_OF_LINKS +SDO_PATH_I.GET_NO_OF_LINKS_S +SDO_PATH_I.GET_START_NODE_ID +SDO_PATH_I.GET_START_NODE_ID_S +SDO_PATH_I.GET_TYPE +SDO_PATH_I.GET_TYPE_S +SDO_PATH_I.IS_ACTIVE +SDO_PATH_I.IS_ACTIVE_S +SDO_PATH_I.IS_CLOSED +SDO_PATH_I.IS_CLOSED_S +SDO_PATH_I.IS_CONNECTED +SDO_PATH_I.IS_CONNECTED_S +SDO_PATH_I.IS_LOGICAL +SDO_PATH_I.IS_LOGICAL_S +SDO_PATH_I.IS_SIMPLE +SDO_PATH_I.IS_SIMPLE_S +SDO_PATH_I.IS_TEMPORARY +SDO_PATH_I.IS_TEMPORARY_S +SDO_PATH_I.SET_GEOMETRY +SDO_PATH_I.SET_GEOMETRY_S +SDO_PATH_I.SET_NAME +SDO_PATH_I.SET_NAME_S +SDO_PATH_I.SET_PATH_ID +SDO_PATH_I.SET_PATH_ID_S +SDO_PATH_I.SET_TYPE +SDO_PATH_I.SET_TYPE_S +SDO_PATH_T.COMPUTE_GEOMETRY +SDO_PATH_T.GET_COST +SDO_PATH_T.GET_END_NODE_ID +SDO_PATH_T.GET_GEOMETRY +SDO_PATH_T.GET_LINK_IDS +SDO_PATH_T.GET_NAME +SDO_PATH_T.GET_NODE_IDS +SDO_PATH_T.GET_NO_OF_LINKS +SDO_PATH_T.GET_START_NODE_ID +SDO_PATH_T.GET_TYPE +SDO_PATH_T.IS_ACTIVE +SDO_PATH_T.IS_CLOSED +SDO_PATH_T.IS_CONNECTED +SDO_PATH_T.IS_LOGICAL +SDO_PATH_T.IS_SIMPLE +SDO_PATH_T.IS_TEMPORARY +SDO_PATH_T.SET_GEOMETRY +SDO_PATH_T.SET_NAME +SDO_PATH_T.SET_PATH_ID +SDO_PATH_T.SET_TYPE +SDO_PC_PKG. +SDO_PC_PKG.CLIP_PC +SDO_PC_PKG.CREATE_PC +SDO_PC_PKG.DROP_DEPENDENCIES +SDO_PC_PKG.GET_PT_IDS +SDO_PC_PKG.INIT +SDO_PC_PKG.TO_GEOMETRY +SDO_PQRY. +SDO_PREFERRED_OPS_SYSTEM_TRIG. +SDO_PREFERRED_OPS_SYS_TRIGGER. +SDO_PREFERRED_OPS_USER_TRIGGER. +SDO_PRIDX. +SDO_PRIDX.GEN_RID_RANGE +SDO_PRIDX.GEN_RID_RANGE_BY_AREA +SDO_PRIDX.INDEXLOAD +SDO_PRIDX.MDPRCLUSTER +SDO_PRIDX.MDPRTESSELLATE +SDO_PRIDX.MDPRTXFERGM +SDO_PRIDX.RTCLUSTER +SDO_PRIDX.TESSELLATE +SDO_RDF_MIG. +SDO_RDF_MIG.CREATE_RDF_MODEL +SDO_RDF_MIG.DROP_RDF_MODEL +SDO_RELATE_MASK. +SDO_RELATE_MASK.DELETE_MASK +SDO_RELATE_MASK.INSERT_MASK +SDO_RELATE_MASK.UPDATE_MASK +SDO_ROUTER_PARTITION. +SDO_ROUTER_PARTITION.ADJUST_M +SDO_ROUTER_PARTITION.BUILD_TURN_RESTRICTIONS +SDO_ROUTER_PARTITION.CLEANUP_ROUTER +SDO_ROUTER_PARTITION.CREATE_ROUTER_NETWORK +SDO_ROUTER_PARTITION.CREATE_TRUCKING_USER_DATA +SDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORK +SDO_ROUTER_PARTITION.DUMP_PARTITIONS +SDO_ROUTER_PARTITION.ELOCATION_DUMP_PARTITION +SDO_ROUTER_PARTITION.ELOCATION_PARTITION_ROUTER +SDO_ROUTER_PARTITION.ELOCATION_TRUCKING_USER_DATA +SDO_ROUTER_PARTITION.ELOCATION_VALIDATE_PARTITION +SDO_ROUTER_PARTITION.GET_EDGE_INFO +SDO_ROUTER_PARTITION.GET_GEOMETRY_INFO +SDO_ROUTER_PARTITION.GET_PID +SDO_ROUTER_PARTITION.GET_VERSION +SDO_ROUTER_PARTITION.MIN_EIGENVECTOR +SDO_ROUTER_PARTITION.PARTITION_ROUTER +SDO_ROUTER_PARTITION.VALIDATE_PARTITIONS +SDO_RTREE_ADMIN. +SDO_RTREE_ADMIN.DATA_COUNT +SDO_RTREE_ADMIN.FILTER +SDO_RTREE_ADMIN.NN +SDO_RTREE_ADMIN.POPULATE_ROOT_MBRS +SDO_RTREE_ADMIN.RTREE_ANALYZE +SDO_RTREE_ADMIN.SDO_RTREE_CHILDMBRS +SDO_RTREE_ADMIN.SDO_RTREE_CHILDRIDS +SDO_RTREE_ADMIN.SDO_RTREE_DESCRIDS +SDO_RTREE_ADMIN.SDO_RTREE_NDEXTENT +SDO_SAM. +SDO_SAM.AGGREGATES_FOR_GEOMETRY +SDO_SAM.AGGREGATES_FOR_LAYER +SDO_SAM.BIN_GEOMETRY +SDO_SAM.BIN_LAYER +SDO_SAM.COLOCATED_REFERENCE_FEATURES +SDO_SAM.INTERSECTION_RATIO +SDO_SAM.PREDICATED_JOIN +SDO_SAM.SIMPLIFY_GEOMETRY +SDO_SAM.SIMPLIFY_LAYER +SDO_SAM.SPATIAL_CLUSTERS +SDO_SAM.TILED_AGGREGATES +SDO_SAM.TILED_BINS +SDO_SEM_DOWNGRADE. +SDO_SEM_DOWNGRADE.PREPARE_DOWNGRADE_FROM_11 +SDO_SEM_DOWNGRADE_UTL. +SDO_SEM_DOWNGRADE_UTL.CHECK_111_COMPATIBLE +SDO_SEM_DOWNGRADE_UTL.DATA_112_EXISTS +SDO_SEM_DOWNGRADE_UTL.DOWNGRADE_TO_102 +SDO_SEM_DOWNGRADE_UTL.RESTORE_RULEBASES +SDO_SEM_DOWNGRADE_UTL.RESTORE_RULEINDICES +SDO_SIMPLE_FILTER. +SDO_STATISTICS.ODCIGETINTERFACES +SDO_STATISTICS.ODCISTATSCOLLECT +SDO_STATISTICS.ODCISTATSDELETE +SDO_STATISTICS.ODCISTATSFUNCTIONCOST +SDO_STATISTICS.ODCISTATSINDEXCOST +SDO_STATISTICS.ODCISTATSSELECTIVITY +SDO_ST_SYN_CREATE. +SDO_TIN_PKG. +SDO_TIN_PKG.CLIP_TIN +SDO_TIN_PKG.CREATE_TIN +SDO_TIN_PKG.DROP_DEPENDENCIES +SDO_TIN_PKG.INIT +SDO_TIN_PKG.TO_GEOMETRY +SDO_TOPO. +SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER +SDO_TOPO.CREATE_TOPOLOGY +SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER +SDO_TOPO.DROP_TOPOLOGY +SDO_TOPO.GET_FACE_BOUNDARY +SDO_TOPO.GET_INTERACTING_TGIDS +SDO_TOPO.GET_TOPO_OBJECTS +SDO_TOPO.INITIALIZE_AFTER_IMPORT +SDO_TOPO.INITIALIZE_METADATA +SDO_TOPO.INTERNAL_GET_TGIDS +SDO_TOPO.LOCKROW_UNIVERSEFACE +SDO_TOPO.PREPARE_FOR_EXPORT +SDO_TOPO.RELATE +SDO_TOPO.SDO_TOPO_CRT_RLIDS_VIEW +SDO_TOPO.TG_INSERT_RELATION +SDO_TOPO_DROP_FTBL. +SDO_TOPO_GEOMETRY.GET_GEOMETRY +SDO_TOPO_GEOMETRY.GET_TGL_OBJECTS +SDO_TOPO_GEOMETRY.GET_TOPO_ELEMENTS +SDO_TOPO_GEOMETRY.SDO_TOPO_GEOMETRY +SDO_TOPO_GEOMETRY.TO_STRING +SDO_TOPO_MAP. +SDO_TOPO_MAP.ADD_EDGE +SDO_TOPO_MAP.ADD_ISOLATED_NODE +SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY +SDO_TOPO_MAP.ADD_LOOP +SDO_TOPO_MAP.ADD_NODE +SDO_TOPO_MAP.ADD_POINT_GEOMETRY +SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY +SDO_TOPO_MAP.CHANGE_EDGE_COORDS +SDO_TOPO_MAP.CLEAR_TOPO_MAP +SDO_TOPO_MAP.COMMIT_TOPO_MAP +SDO_TOPO_MAP.CREATE_EDGE_INDEX +SDO_TOPO_MAP.CREATE_FACE_INDEX +SDO_TOPO_MAP.CREATE_FEATURE +SDO_TOPO_MAP.CREATE_TOPO_MAP +SDO_TOPO_MAP.DROP_TOPO_MAP +SDO_TOPO_MAP.GET_CONTAINING_FACE +SDO_TOPO_MAP.GET_EDGE_ADDITIONS +SDO_TOPO_MAP.GET_EDGE_CHANGES +SDO_TOPO_MAP.GET_EDGE_COORDS +SDO_TOPO_MAP.GET_EDGE_DELETIONS +SDO_TOPO_MAP.GET_EDGE_NODES +SDO_TOPO_MAP.GET_FACE_ADDITIONS +SDO_TOPO_MAP.GET_FACE_BOUNDARY +SDO_TOPO_MAP.GET_FACE_CHANGES +SDO_TOPO_MAP.GET_FACE_DELETIONS +SDO_TOPO_MAP.GET_NEAREST_EDGE +SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE +SDO_TOPO_MAP.GET_NEAREST_NODE +SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE +SDO_TOPO_MAP.GET_NODE_ADDITIONS +SDO_TOPO_MAP.GET_NODE_CHANGES +SDO_TOPO_MAP.GET_NODE_COORD +SDO_TOPO_MAP.GET_NODE_DELETIONS +SDO_TOPO_MAP.GET_NODE_FACE_STAR +SDO_TOPO_MAP.GET_NODE_STAR +SDO_TOPO_MAP.GET_TOPO_NAME +SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID +SDO_TOPO_MAP.LIST_TOPO_MAPS +SDO_TOPO_MAP.LOAD_TOPO_MAP +SDO_TOPO_MAP.MOVE_EDGE +SDO_TOPO_MAP.MOVE_ISOLATED_NODE +SDO_TOPO_MAP.MOVE_NODE +SDO_TOPO_MAP.REMOVE_EDGE +SDO_TOPO_MAP.REMOVE_NODE +SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES +SDO_TOPO_MAP.ROLLBACK_TOPO_MAP +SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP +SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP +SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE +SDO_TOPO_MAP.UPDATE_TOPO_MAP +SDO_TOPO_MAP.VALIDATE_TOPOLOGY +SDO_TOPO_MAP.VALIDATE_TOPO_MAP +SDO_TOPO_METADATA. +SDO_TOPO_METADATA.CHECK_TOPO_ID +SDO_TOPO_METADATA.CLEARCACHE +SDO_TOPO_METADATA.EXTRACT_TOPO_OWNER +SDO_TOPO_METADATA.LOADWINDOW +SDO_TOPO_METADATA.UPDATETOPOLOGY +SDO_TOPO_METADATA_INT. +SDO_TOPO_METADATA_INT.ADD_ENTRY +SDO_TOPO_METADATA_INT.ADD_GM_ENTRY +SDO_TOPO_METADATA_INT.ADD_TG +SDO_TOPO_METADATA_INT.CHECK_TOPO_ID +SDO_TOPO_METADATA_INT.CLEARCACHE +SDO_TOPO_METADATA_INT.DELETE_TG +SDO_TOPO_METADATA_INT.DROP_ENTRY +SDO_TOPO_METADATA_INT.DROP_GM_ENTRY +SDO_TOPO_METADATA_INT.EXTRACT_TOPO_OWNER +SDO_TOPO_METADATA_INT.LOADWINDOW +SDO_TOPO_METADATA_INT.UPDATETOPOLOGY +SDO_TOPO_TRIG_INS1. +SDO_TPFNS. +SDO_TPFNS.ANYINTERACT +SDO_TPFNS.CONTAINS +SDO_TPFNS.COVEREDBY +SDO_TPFNS.COVERS +SDO_TPFNS.EQUAL +SDO_TPFNS.FILTER +SDO_TPFNS.INSIDE +SDO_TPFNS.OVERLAP +SDO_TPFNS.OVERLAPBDYDISJOINT +SDO_TPFNS.OVERLAPBDYINTERSECT +SDO_TPFNS.SDO_ON +SDO_TPFNS.TOUCH +SDO_TPIDX. +SDO_TPIDX.INDEX_DELETE +SDO_TPIDX.INDEX_INSERT +SDO_TPIDX.INDEX_UPDATE +SDO_TPIDX.ISVERSIONED +SDO_TUNE. +SDO_TUNE.ANALYZE_RTREE +SDO_TUNE.AVERAGE_MBR +SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE +SDO_TUNE.EXTENT_OF +SDO_TUNE.MIX_INFO +SDO_TUNE.QUALITY_DEGRADATION +SDO_TUNE.RTREE_QUALITY +SDO_UNITS_OF_MEASURE_TRIGGER. +SDO_UTIL. +SDO_UTIL.AFFINETRANSFORMS +SDO_UTIL.APPEND +SDO_UTIL.BEARING_TILT_FOR_POINTS +SDO_UTIL.CIRCLE_POLYGON +SDO_UTIL.CONCAT_LINES +SDO_UTIL.CONVERT_DISTANCE +SDO_UTIL.CONVERT_UNIT +SDO_UTIL.DROP_WORK_TABLES +SDO_UTIL.ELLIPSE_POLYGON +SDO_UTIL.EXPAND_GEOM +SDO_UTIL.EXPAND_MULTI_POINT +SDO_UTIL.EXTRACT +SDO_UTIL.EXTRACT3D +SDO_UTIL.EXTRACTVOIDS +SDO_UTIL.EXTRACT_ALL +SDO_UTIL.EXTRUDE +SDO_UTIL.FROM_CLOB +SDO_UTIL.FROM_GML311GEOMETRY +SDO_UTIL.FROM_GMLGEOMETRY +SDO_UTIL.FROM_KMLGEOMETRY +SDO_UTIL.FROM_WKBGEOMETRY +SDO_UTIL.FROM_WKTGEOMETRY +SDO_UTIL.GETLABELBYELEMENT +SDO_UTIL.GETNUMELEM +SDO_UTIL.GETNUMRINGS +SDO_UTIL.GETNUMVERTICES +SDO_UTIL.GETVERTICES +SDO_UTIL.GET_2D_FOOTPRINT +SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS +SDO_UTIL.INTERIOR_POINT +SDO_UTIL.INTERNAL_MAKE_LINE_OUT_OF_ELEM +SDO_UTIL.INTERNAL_MERGE_LINESTRINGS +SDO_UTIL.INTERNAL_ORDINATE_COPY +SDO_UTIL.INTERNAL_REVERSE_LINE_POINTS +SDO_UTIL.NUMBER_OF_COMPONENTS +SDO_UTIL.OUTERLN +SDO_UTIL.PARTITION_TABLE +SDO_UTIL.POINT_AT_BEARING +SDO_UTIL.POINT_TO_LINE +SDO_UTIL.POLYGONTOLINE +SDO_UTIL.PREPARE_FOR_TTS +SDO_UTIL.QUAD_TILES +SDO_UTIL.RECTIFY_GEOMETRY +SDO_UTIL.REFINEMGON +SDO_UTIL.REMOVE_DUPLICATES +SDO_UTIL.REMOVE_DUPLICATE_VERTICES +SDO_UTIL.REMOVE_INNER_RINGS +SDO_UTIL.REVERSE_LINESTRING +SDO_UTIL.SIMPLIFY +SDO_UTIL.TO_CLOB +SDO_UTIL.TO_GML311GEOMETRY +SDO_UTIL.TO_GMLGEOMETRY +SDO_UTIL.TO_KMLGEOMETRY +SDO_UTIL.TO_WKBGEOMETRY +SDO_UTIL.TO_WKTGEOMETRY +SDO_UTIL.TO_WKTGEOMETRY_VARCHAR +SDO_UTIL.TRUNCATE_NUMBER +SDO_UTIL.VALIDATE_WKBGEOMETRY +SDO_UTIL.VALIDATE_WKTGEOMETRY +SDO_VERSION. +SDO_WFS_LOCK. +SDO_WFS_LOCK.DELETETOKENSESSIONMAP +SDO_WFS_LOCK.ENABLEDBTXNS +SDO_WFS_LOCK.GENERATETOKENID +SDO_WFS_LOCK.LOCKROWSBYID +SDO_WFS_LOCK.QUERYTOKENSESSIONMAP +SDO_WFS_LOCK.REGISTERFEATURETABLE +SDO_WFS_LOCK.RESETTOKENEXPIRY +SDO_WFS_LOCK.TRANSFERTOKENBYID +SDO_WFS_LOCK.UNLOCKROWSBYID +SDO_WFS_LOCK.UNREGISTERFEATURETABLE +SDO_WFS_LOCK.UPDATETOKENSESSIONMAP +SDO_WFS_LOCK_GEN. +SDO_WFS_LOCK_GEN.GENERATETOKENID +SDO_WFS_LOCK_UTIL. +SDO_WFS_LOCK_UTIL.CANLOCKROW +SDO_WFS_PROCESS. +SDO_WFS_PROCESS.CONTAINSSDO +SDO_WFS_PROCESS.CONTAINSSDOINTERNAL +SDO_WFS_PROCESS.DELETECAPABILITIESINFO +SDO_WFS_PROCESS.DELETEFEATURETYPEXMLINFO +SDO_WFS_PROCESS.DROPFEATURETYPE +SDO_WFS_PROCESS.DROPFEATURETYPES +SDO_WFS_PROCESS.DROP_EXPORT_TABLES +SDO_WFS_PROCESS.ENUMERATEARRPATHS +SDO_WFS_PROCESS.EXPANDPATH +SDO_WFS_PROCESS.EXTRACTID +SDO_WFS_PROCESS.EXTRACTSDO +SDO_WFS_PROCESS.FINDNSURL +SDO_WFS_PROCESS.GENCOLLECTIONPROCS +SDO_WFS_PROCESS.GENCOLLECTIONPROCSHELPER +SDO_WFS_PROCESS.GENERATEALIASSTRING +SDO_WFS_PROCESS.GENERATEPARSEDSPATIALPATH +SDO_WFS_PROCESS.GENIDVALUE +SDO_WFS_PROCESS.GENRECORDTYPEPROCESSINGLOGIC +SDO_WFS_PROCESS.GENSPATIALARRINFO +SDO_WFS_PROCESS.GENSPATIALPATHELEMCOLINDEX +SDO_WFS_PROCESS.GENTRIGGERS +SDO_WFS_PROCESS.GENUPDATESTR +SDO_WFS_PROCESS.GETALIAS +SDO_WFS_PROCESS.GETCOUNT +SDO_WFS_PROCESS.GETFEATURETYPEID +SDO_WFS_PROCESS.GETPARSEDPATH +SDO_WFS_PROCESS.GETPATH +SDO_WFS_PROCESS.GETUPDATEMAP +SDO_WFS_PROCESS.GETXMLTAGTYPE +SDO_WFS_PROCESS.GRANTFEATURETYPETOUSER +SDO_WFS_PROCESS.GRANTMDACCESSTOADMINUSER +SDO_WFS_PROCESS.GRANTMDACCESSTOUSER +SDO_WFS_PROCESS.INITIALIZE_AFTER_IMPORT +SDO_WFS_PROCESS.INSERTCAPABILITIESINFO +SDO_WFS_PROCESS.INSERTFTDATAUPDATED +SDO_WFS_PROCESS.INSERTFTMDUPDATED +SDO_WFS_PROCESS.ISCOMPLEXOBJECTTYPE +SDO_WFS_PROCESS.ISINLIST +SDO_WFS_PROCESS.ISLISTMEMBER +SDO_WFS_PROCESS.ISPKCOLIN +SDO_WFS_PROCESS.ISROWIDIN +SDO_WFS_PROCESS.NOTINARRAY +SDO_WFS_PROCESS.PARSEPATH +SDO_WFS_PROCESS.POPULATEFEATURETYPEXMLINFO +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_ALL +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_FTS +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_FT_INT +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_FT_M_INT +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_USER +SDO_WFS_PROCESS.PREPROCESSINSERT +SDO_WFS_PROCESS.PREPROCESSUPDATE +SDO_WFS_PROCESS.PROCESSCOMPLEXELEMENT +SDO_WFS_PROCESS.PROCESSIDPATH +SDO_WFS_PROCESS.PROCESSINLINECOMPLEXELEMENT +SDO_WFS_PROCESS.PROCESSPATH +SDO_WFS_PROCESS.PUBLISHFEATURETYPE +SDO_WFS_PROCESS.PUTALIAS +SDO_WFS_PROCESS.REGISTERMTABLEVIEW +SDO_WFS_PROCESS.REGISTEROBJECT +SDO_WFS_PROCESS.REVOKEFEATURETYPEFROMUSER +SDO_WFS_PROCESS.REVOKEMDACCESSFROMADMINUSER +SDO_WFS_PROCESS.REVOKEMDACCESSFROMUSER +SDO_WFS_PROCESS.SORTSPCONTENTBYCOLINDEX +SDO_WFS_PROCESS.UNREGISTERMTABLEVIEW +SDO_WFS_PROCESS.UPDATEOBJECTREF +SDO_WFS_PROCESS_UTIL. +SDO_WFS_PROCESS_UTIL.GENERATEWFS_PROC_SQ +SDO_WFS_PROCESS_UTIL.GENERATEXMLINFO_SQ +SDO_WS_PROCESS. +SDO_WS_PROCESS.CHECKLENGTH +SDO_WS_PROCESS.CONVERTDURATIONEXPR +SDO_WS_PROCESS.EVALUATEDURATIONEXPR +SDO_WS_PROCESS.EVALUATEEXPR +SDO_WS_PROCESS.EVALUATEGDAYEXPR +SDO_WS_PROCESS.EVALUATEGMONTHDAYEXPR +SDO_WS_PROCESS.EVALUATEGMONTHEXPR +SDO_WS_PROCESS.EVALUATEGYEAREXPR +SDO_WS_PROCESS.EVALUATEGYEARMONTHEXPR +SDO_WS_PROCESS.EVALUATENONTSEXPR +SDO_WS_PROCESS.EVALUATENONTSNUMEXPR +SDO_WS_PROCESS.EVALUATETIMEEXPR +SDO_WS_PROCESS.EVALUATETSEXPR +SEARCH_COLUMNS +SEARCH_CONDITION +SECONDARY +SECONDARY_INSTANCE +SECONDARY_OBJDATA_TYPE +SECONDARY_OBJECT_NAME +SECONDARY_OBJECT_OWNER +SECONDS_IN_WAIT +SECTION +SECTION_SIZE +SECTOR_SIZE +SECURE +SECUREFILE +SECURE_DML. +SECURE_EMPLOYEES. +SECURITY_CLASS +SECURITY_LEVEL +SEC_REL_COLUMN +SEGBLK# +SEGFILE# +SEGMENTS_PROCESSED +SEGMENTS_SELECTED +SEGMENT_ADVISOR +SEGMENT_BLOCK +SEGMENT_COLUMN_ID +SEGMENT_CREATED +SEGMENT_FILE +SEGMENT_FILEID +SEGMENT_ID +SEGMENT_NAME +SEGMENT_OWNER +SEGMENT_SPACE_MANAGEMENT +SEGMENT_SUBTYPE +SEGMENT_TYPE +SEGRFNO# +SEGTYPE +SEG_NAME +SEG_OWNER +SEG_TYPE +SEG_TYPE_NAME +SEL +SEMIJOIN +SEMIJOIN_DRIVER +SEM_UPGRADE_TO_11. +SEM_UPGRADE_TO_11.CREATE_ALL_MODELS_IN_11 +SEM_UPGRADE_TO_11.EMPTY_APP_TABS_DROP_RDF_COLS +SEM_UPGRADE_TO_11.LOAD_FROM_ALL_STAGING_TABLES +SEM_UPGRADE_TO_11.RESTORE_10_2_RDF_NETWORK_IN_11 +SEM_UPGRADE_TO_11.SAVE_10_2_RDF_NETWORK_FOR_11 +SEM_UPGRADE_TO_11.SETUP_FOR_LOADING_IN_11 +SEM_UPGRADE_TO_11.UNLOAD_ALL_INTO_STAGING_TABLES +SENDER +SENDER_ADDRESS +SENDER_NAME +SENDER_PROTOCOL +SENDQ +SENDS +SENDS_DROPPED +SEND_BUF_OR +SEND_CARRIER_LOST +SEND_ERRORS +SEND_OLD_ON_DELETE +SEND_OLD_ON_UPDATE +SEND_TIME +SENT +SEQ +SEQ# +SEQH +SEQL +SEQNO +SEQUENCE +SEQUENCE# +SEQUENCENUMBER +SEQUENCE_ID +SEQUENCE_NAME +SEQUENCE_NEEDED +SEQUENCE_NO +SEQUENCE_NUMBER +SEQUENCE_OWNER +SEQ_ID +SEQ_NUMBER +SERIAL +SERIAL# +SERIALIZABLE_ABORTS +SERIALNUM +SERIAL_NUM +SERVER +SERVER# +SERVERS_HIGHWATER +SERVERS_STARTED +SERVERS_TERMINATED +SERVER_ELAPSED_APPLY_TIME +SERVER_ELAPSED_DEQUEUE_TIME +SERVER_ERROR. +SERVER_ERROR_DEPTH. +SERVER_ERROR_MSG. +SERVER_ERROR_NUM_PARAMS. +SERVER_ERROR_PARAM. +SERVER_GROUP +SERVER_ID +SERVER_NAME +SERVER_PID +SERVER_SET +SERVER_START_TIME +SERVER_TOTAL_MESSAGES_APPLIED +SERVER_TYPE +SERVICE +SERVICE_HASH +SERVICE_ID +SERVICE_NAME +SERVICE_NAME_HASH +SERVICE_REQUEST +SERVLET$XD. +SESS# +SESSID +SESSION# +SESSIONID +SESSIONS +SESSIONS_CURRENT +SESSIONS_HIGHWATER +SESSIONS_MAX +SESSIONS_WARNING +SESSION_ADDR +SESSION_CACHED_CURSORS +SESSION_CACHE_HITS +SESSION_CACHE_MISSES +SESSION_CPU +SESSION_EDITION_ID +SESSION_HANDLE +SESSION_ID +SESSION_INFO +SESSION_KEY +SESSION_NAME +SESSION_NUM +SESSION_PRIVS +SESSION_RECID +SESSION_RESTART_SCN +SESSION_ROLES +SESSION_SERIAL# +SESSION_SERIAL_NUM +SESSION_SETTABLE +SESSION_STAMP +SESSION_STATE +SESSION_STATUS +SESSION_STAT_CPU +SESSION_TOTAL +SESSION_TYPE +SESS_SERIAL# +SES_ACTIONS +SES_ADDR +SETEMUSERCONTEXT. +SETEMVIEWUSERCONTEXT. +SETMODFLG. +SETTING +SETTING_NAME +SETTING_TYPE +SETTING_VALUE +SET_BY_USER +SET_COUNT +SET_DESCRIPTION +SET_MSIZE +SET_NAME +SET_STAMP +SET_STATUS +SET_TABLESPACE. +SET_TO_JOIN +SEVERITY +SEVERITY_INDEX +SEV_ANNOTATION_DELETE_TR. +SEV_ANNOTATION_INSERT_TR. +SF_VERSION +SGA_ALLOCATED +SGA_SIZE +SGA_SIZE_FACTOR +SGA_TARGET_VALUE +SGA_USED +SHARABLE_MEM +SHAREACCESS +SHARED +SHAREDENY +SHARED_FLAG +SHARED_FLAG2 +SHARED_MAX_LEN +SHARED_POOL_SIZE_FACTOR +SHARED_POOL_SIZE_FOR_ESTIMATE +SHORTP_POLICY +SHORT_WAITS +SHORT_WAIT_TIME_MAX +SHORT_WAIT_TIME_TOTAL +SHRINKS +SHRINK_PHASE +SHUTDOWN +SHUTDOWN_PENDING +SID +SIGNALLING_COMPONENT +SIGNALLING_SUBCOMPONENT +SIGNATURE +SIMPLE_NAME +SIMPLE_RULES_ONLY_EVALUATIONS +SINGLEBLKRDS +SINGLEBLKRDTIM +SINGLEBLKRDTIM_MICRO +SINGLEBLKRDTIM_MILLI +SINGLE_TABLE +SINGLE_USE_SQL +SINGLE_USE_SQL_MEM +SITE_NAME +SIZE_BYTES_DISPLAY +SIZE_FACTOR +SIZE_FOR_ESTIMATE +SIZE_MB +SI_APPENDCLRHSTGR. +SI_ARRAYCLRHSTGR. +SI_AVERAGECOLOR.SI_AVERAGECOLOR +SI_AVERAGECOLOR.SI_SCORE +SI_CHGCONTENT. +SI_COLOR.SI_RGBCOLOR +SI_COLORHISTOGRAM.SI_APPEND +SI_COLORHISTOGRAM.SI_COLORHISTOGRAM +SI_COLORHISTOGRAM.SI_SCORE +SI_CONVERTFORMAT. +SI_FEATURELIST.SI_AVGCLRFTR +SI_FEATURELIST.SI_AVGCLRFTRWGHT +SI_FEATURELIST.SI_CLRHSTGRFTR +SI_FEATURELIST.SI_CLRHSTGRFTRWGHT +SI_FEATURELIST.SI_FEATURELIST +SI_FEATURELIST.SI_PSTNLCLRFTR +SI_FEATURELIST.SI_PSTNLCLRFTRWGHT +SI_FEATURELIST.SI_SCORE +SI_FEATURELIST.SI_SETFEATURE +SI_FEATURELIST.SI_TEXTUREFTR +SI_FEATURELIST.SI_TEXTUREFTRWGHT +SI_FINDAVGCLR. +SI_FINDCLRHSTGR. +SI_FINDPSTNLCLR. +SI_FINDTEXTURE. +SI_GETAVGCLRFTR. +SI_GETAVGCLRFTRW. +SI_GETCLRHSTGRFTR. +SI_GETCLRHSTGRFTRW. +SI_GETCONTENT. +SI_GETCONTENTLNGTH. +SI_GETFORMAT. +SI_GETHEIGHT. +SI_GETPSTNLCLRFTR. +SI_GETPSTNLCLRFTRW. +SI_GETSIZEDTHMBNL. +SI_GETTEXTUREFTR. +SI_GETTEXTUREFTRW. +SI_GETTHMBNL. +SI_GETWIDTH. +SI_MKAVGCLR. +SI_MKCLRHSTGR. +SI_MKFTRLIST. +SI_MKRGBCLR. +SI_MKSTILLIMAGE1. +SI_MKSTILLIMAGE2. +SI_POSITIONALCOLOR.SI_POSITIONALCOLOR +SI_POSITIONALCOLOR.SI_SCORE +SI_SCOREBYAVGCLR. +SI_SCOREBYCLRHSTGR. +SI_SCOREBYFTRLIST. +SI_SCOREBYPSTNLCLR. +SI_SCOREBYTEXTURE. +SI_SETAVGCLRFTR. +SI_SETCLRHSTGRFTR. +SI_SETPSTNLCLRFTR. +SI_SETTEXTUREFTR. +SI_STILLIMAGE.SI_CHANGEFORMAT +SI_STILLIMAGE.SI_CLEARFEATURES +SI_STILLIMAGE.SI_CONTENT +SI_STILLIMAGE.SI_CONTENTLENGTH +SI_STILLIMAGE.SI_FORMAT +SI_STILLIMAGE.SI_HEIGHT +SI_STILLIMAGE.SI_INITFEATURES +SI_STILLIMAGE.SI_RETAINFEATURES +SI_STILLIMAGE.SI_SETCONTENT +SI_STILLIMAGE.SI_STILLIMAGE +SI_STILLIMAGE.SI_THUMBNAIL +SI_STILLIMAGE.SI_WIDTH +SI_TEXTURE.SI_SCORE +SI_TEXTURE.SI_TEXTURE +SKIP +SKIP_CORRUPT +SKIP_EXT_OPTIMIZER +SKIP_IT +SKIP_UNQ_UNUSABLE_IDX +SKIP_WHEN_NULL +SLAVE_NAME +SLAVE_OS_PROCESS_ID +SLAVE_PID +SLAVE_PROCESS_ID +SLAVE_QC_MISMATCH +SLEEP1 +SLEEP10 +SLEEP11 +SLEEP2 +SLEEP3 +SLEEP4 +SLEEP5 +SLEEP6 +SLEEP7 +SLEEP8 +SLEEP9 +SLEEPS +SLEEP_COUNT +SLEEP_TIMESTAMP +SLOT0 +SLOT1 +SLOT10 +SLOT11 +SLOT12 +SLOT13 +SLOT14 +SLOT15 +SLOT16 +SLOT17 +SLOT18 +SLOT19 +SLOT2 +SLOT20 +SLOT21 +SLOT22 +SLOT23 +SLOT24 +SLOT3 +SLOT4 +SLOT5 +SLOT6 +SLOT7 +SLOT8 +SLOT9 +SLT +SM$VERSION +SMALL_READ_IOPS +SMALL_READ_MBPS +SMALL_READ_MEGABYTES +SMALL_READ_REQS +SMALL_READ_REQUESTS +SMALL_READ_SERVICETIME +SMALL_SYNC_READ_LATENCY +SMALL_SYNC_READ_REQS +SMALL_WRITE_IOPS +SMALL_WRITE_MBPS +SMALL_WRITE_MEGABYTES +SMALL_WRITE_REQS +SMALL_WRITE_REQUESTS +SMALL_WRITE_SERVICETIME +SMTP_ENABLED +SNAME +SNAPID +SNAPMASTER +SNAPSHOT_ID +SNAPSHOT_SITE +SNAPSHOT_TIME +SNAP_FLAG +SNAP_ID +SNAP_INTERVAL +SNAP_LEVEL +SNAP_NAME +SNAP_TIMEZONE +SND_PROXY +SND_Q_LEN +SND_Q_MAX +SND_Q_TM_BASE +SND_Q_TM_WRAP +SND_Q_TOT +SND_SEQ_NO +SOFAR +SOFTWARE_VERSION +SOFT_PARSES +SORTS +SORTS_DELTA +SORTS_TOTAL +SORT_ORDER +SOURCE +SOURCE_COMMIT_POSITION +SOURCE_COMMIT_SCN +SOURCE_COMPONENT_DB +SOURCE_COMPONENT_ID +SOURCE_COMPONENT_NAME +SOURCE_COMPONENT_TYPE +SOURCE_DATABASE +SOURCE_DATABASE_NAME +SOURCE_DB +SOURCE_DBID +SOURCE_DESCRIPTION +SOURCE_ENABLED +SOURCE_END_TIME +SOURCE_GLOBAL_NAME +SOURCE_INSTANCE_ID +SOURCE_INSTANCE_NAME +SOURCE_INSTANCE_START_TIME +SOURCE_NAME +SOURCE_OBJECT_NAME +SOURCE_OBJECT_OWNER +SOURCE_OBJECT_TYPE +SOURCE_QUEUE_NAME +SOURCE_QUEUE_OWNER +SOURCE_RESETLOGS_SCN +SOURCE_RESETLOGS_TIME +SOURCE_SCHEMA +SOURCE_SCHEMA_NAME +SOURCE_SERIAL# +SOURCE_SID +SOURCE_SIZE +SOURCE_START_TIME +SOURCE_STATE +SOURCE_STMT +SOURCE_TABLE_NAME +SOURCE_TABLE_OWNER +SOURCE_TRANSACTION_ID +SOURCE_TYPE +SOURCE_USER_NAME +SPACE +SPACE_ALLOCATED_DELTA +SPACE_ALLOCATED_TOTAL +SPACE_ERROR_INFO. +SPACE_HEADER +SPACE_LIMIT +SPACE_METRICS_PURGE_TRIGGER. +SPACE_OVERHEAD +SPACE_RECLAIMABLE +SPACE_UNUSED +SPACE_USAGE_KBYTES +SPACE_USED +SPACE_USED_DELTA +SPACE_USED_TOTAL +SPARE_UB8 +SPARSE_TYPE +SPCLUSTERS. +SPID +SPILLED_LCR_COUNT +SPILL_CREATION_TIME +SPILL_LWM_POSITION +SPILL_LWM_SCN +SPILL_MESSAGE_NUMBER +SPILL_MSGS +SPILL_POSITION +SPILL_SCN +SPIN_GETS +SQLADDR +SQLHASH +SQLJUTL. +SQLJUTL.BOOL2INT +SQLJUTL.CHAR2IDS +SQLJUTL.CHAR2IYM +SQLJUTL.GET_TYPECODE +SQLJUTL.HAS_DEFAULT +SQLJUTL.IDS2CHAR +SQLJUTL.INT2BOOL +SQLJUTL.IYM2CHAR +SQLJUTL.URI2VCHAR +SQLJUTL2. +SQLJUTL2.EVALUATE +SQLJUTL2.INVOKE +SQLJUTL2.REFLECT +SQLJUTL2.REFLECT2 +SQLLDR +SQLSET_ID +SQLSET_NAME +SQLSET_OWNER +SQLSET_ROW.SQLSET_ROW +SQLTYPE +SQL_ADDRESS +SQL_BIND +SQL_CANCELED +SQL_CHILD_ADDRESS +SQL_CHILD_NUMBER +SQL_EVALUATIONS +SQL_EXECUTIONS +SQL_EXEC_ID +SQL_EXEC_START +SQL_FEATURE +SQL_FREE_EVALUATIONS +SQL_FULLTEXT +SQL_HANDLE +SQL_HASH +SQL_HASH_VALUE +SQL_ID +SQL_OPCODE +SQL_OPNAME +SQL_PATCH +SQL_PLAN_ALLSTAT_ROW_TYPE.SQL_PLAN_ALLSTAT_ROW_TYPE +SQL_PLAN_BASELINE +SQL_PLAN_HASH_VALUE +SQL_PLAN_LINE_ID +SQL_PLAN_OPERATION +SQL_PLAN_OPTIONS +SQL_PROFILE +SQL_REDO +SQL_SEQ +SQL_STMT +SQL_TEXT +SQL_TEXT_PIECE +SQL_TRACE +SQL_TRACE_BINDS +SQL_TRACE_PLAN_STATS +SQL_TRACE_WAITS +SQL_TUNE_ADVISOR +SQL_TXT. +SQL_TYPE_MISMATCH +SQL_UNDO +SRC_DBNAME +SRC_INCIDENT +SRC_INCIDENT_ID +SRC_QUEUE_NAME +SRC_QUEUE_SCHEMA +SRL +SRV_BUSY +SRV_BYTES +SRV_IDLE +SRV_IN_NET +SRV_MESSAGES +SRV_OUT_NET +SSN +SSOLDERRCNT +SSX_2_X +SS_2_NULL +SS_2_RLS +STAGE +STAGING_DATABASE +STALE +STALENESS +STALE_SINCE +STALE_STATS +STAMP +STANDARD. +STANDARD. SYS$DSINTERVALSUBTRACT +STANDARD. SYS$EXTRACT_FROM +STANDARD. SYS$EXTRACT_STRING_FROM +STANDARD. SYS$STANDARD_CHR +STANDARD. SYS$STANDARD_TRANSLATE +STANDARD. SYS$STANDARD_TRIM +STANDARD. SYS$YMINTERVALSUBTRACT +STANDARD.ABS +STANDARD.ACOS +STANDARD.ADD_MONTHS +STANDARD.ASCII +STANDARD.ASCIISTR +STANDARD.ASIN +STANDARD.ATAN +STANDARD.ATAN2 +STANDARD.BFILENAME +STANDARD.BITAND +STANDARD.CARDINALITY +STANDARD.CEIL +STANDARD.CHARTOROWID +STANDARD.CHR +STANDARD.COALESCE +STANDARD.COMMIT +STANDARD.COMMIT_CM +STANDARD.COMPOSE +STANDARD.CONCAT +STANDARD.CONTINUE +STANDARD.CONVERT +STANDARD.COS +STANDARD.COSH +STANDARD.CUBE +STANDARD.CURRENT_DATE +STANDARD.CURRENT_TIME +STANDARD.CURRENT_TIMESTAMP +STANDARD.DBTIMEZONE +STANDARD.DECODE +STANDARD.DECOMPOSE +STANDARD.DEREF +STANDARD.DUMP +STANDARD.EMPTY_BLOB +STANDARD.EMPTY_CLOB +STANDARD.EXISTS +STANDARD.EXP +STANDARD.FLOOR +STANDARD.FROM_TZ +STANDARD.GLB +STANDARD.GREATEST +STANDARD.GREATEST_LB +STANDARD.GROUPING +STANDARD.HEXTORAW +STANDARD.INITCAP +STANDARD.INSTR +STANDARD.INSTR2 +STANDARD.INSTR4 +STANDARD.INSTRB +STANDARD.INSTRC +STANDARD.ISNCHAR +STANDARD.LAST_DAY +STANDARD.LEAST +STANDARD.LEAST_UB +STANDARD.LENGTH +STANDARD.LENGTH2 +STANDARD.LENGTH4 +STANDARD.LENGTHB +STANDARD.LENGTHC +STANDARD.LEVEL +STANDARD.LN +STANDARD.LOCALTIME +STANDARD.LOCALTIMESTAMP +STANDARD.LOG +STANDARD.LOWER +STANDARD.LPAD +STANDARD.LTRIM +STANDARD.LUB +STANDARD.MONTHS_BETWEEN +STANDARD.NANVL +STANDARD.NCHARTOROWID +STANDARD.NCHR +STANDARD.NEW_TIME +STANDARD.NEXT_DAY +STANDARD.NHEXTORAW +STANDARD.NLSSORT +STANDARD.NLS_CHARSET_DECL_LEN +STANDARD.NLS_CHARSET_ID +STANDARD.NLS_CHARSET_NAME +STANDARD.NLS_INITCAP +STANDARD.NLS_LOWER +STANDARD.NLS_UPPER +STANDARD.NULLFN +STANDARD.NULLIF +STANDARD.NUMTODSINTERVAL +STANDARD.NUMTOYMINTERVAL +STANDARD.NVL +STANDARD.POWER +STANDARD.RAWTOHEX +STANDARD.RAWTONHEX +STANDARD.REF +STANDARD.REGEXP_COUNT +STANDARD.REGEXP_INSTR +STANDARD.REGEXP_LIKE +STANDARD.REGEXP_REPLACE +STANDARD.REGEXP_SUBSTR +STANDARD.REMAINDER +STANDARD.REPLACE +STANDARD.ROLLBACK_NR +STANDARD.ROLLBACK_SV +STANDARD.ROLLUP +STANDARD.ROUND +STANDARD.ROWID +STANDARD.ROWIDTOCHAR +STANDARD.ROWIDTONCHAR +STANDARD.ROWLABEL +STANDARD.ROWNUM +STANDARD.RPAD +STANDARD.RTRIM +STANDARD.SAVEPOINT +STANDARD.SESSIONTIMEZONE +STANDARD.SET +STANDARD.SET_TRANSACTION_USE +STANDARD.SIGN +STANDARD.SIN +STANDARD.SINH +STANDARD.SOUNDEX +STANDARD.SQLCODE +STANDARD.SQLERRM +STANDARD.SQRT +STANDARD.SUBSTR +STANDARD.SUBSTR2 +STANDARD.SUBSTR4 +STANDARD.SUBSTRB +STANDARD.SUBSTRC +STANDARD.SYS$LOB_REPLICATION +STANDARD.SYSDATE +STANDARD.SYSTIMESTAMP +STANDARD.SYS_AT_TIME_ZONE +STANDARD.SYS_CONTEXT +STANDARD.SYS_EXTRACT_UTC +STANDARD.SYS_GUID +STANDARD.SYS_LITERALTODATE +STANDARD.SYS_LITERALTODSINTERVAL +STANDARD.SYS_LITERALTOTIME +STANDARD.SYS_LITERALTOTIMESTAMP +STANDARD.SYS_LITERALTOTZTIME +STANDARD.SYS_LITERALTOTZTIMESTAMP +STANDARD.SYS_LITERALTOYMINTERVAL +STANDARD.TAN +STANDARD.TANH +STANDARD.TO_ANYLOB +STANDARD.TO_BINARY_DOUBLE +STANDARD.TO_BINARY_FLOAT +STANDARD.TO_BLOB +STANDARD.TO_CHAR +STANDARD.TO_CLOB +STANDARD.TO_DATE +STANDARD.TO_DSINTERVAL +STANDARD.TO_LABEL +STANDARD.TO_MULTI_BYTE +STANDARD.TO_NCHAR +STANDARD.TO_NCLOB +STANDARD.TO_NUMBER +STANDARD.TO_RAW +STANDARD.TO_SINGLE_BYTE +STANDARD.TO_TIME +STANDARD.TO_TIMESTAMP +STANDARD.TO_TIMESTAMP_TZ +STANDARD.TO_TIME_TZ +STANDARD.TO_YMINTERVAL +STANDARD.TRANSLATE +STANDARD.TRIM +STANDARD.TRUNC +STANDARD.TZ_OFFSET +STANDARD.UID +STANDARD.UNISTR +STANDARD.UPPER +STANDARD.UROWID +STANDARD.USER +STANDARD.USERENV +STANDARD.VALUE +STANDARD.VSIZE +STANDARD.XOR +STANDARD_DEVIATION +STANDBY_BECAME_PRIMARY_SCN +STANDBY_DEST +STANDBY_LOGFILE_ACTIVE +STANDBY_LOGFILE_COUNT +STAR +STARTOFFSET +STARTS +STARTTIME +STARTUP +STARTUP_TIME +START_DATE +START_ID +START_ROWID +START_SCN +START_SCNB +START_SCNW +START_SNAP_ID +START_SNAP_TIME +START_TIME +START_TIMESTAMP +START_TS +START_UBABLK +START_UBAFIL +START_UBAREC +START_UBASQN +START_UEXT +START_WITH +STAR_TRANSFORMATION +STATE +STATELESS +STATEMENT +STATEMENTID +STATEMENT_COUNT +STATEMENT_ID +STATEMENT_OPT +STATEMENT_QUEUING +STATEMENT_SCN +STATEMENT_TYPE +STATE_CHANGED_TIME +STATIC +STATIC_FIELDS +STATIC_METHODS +STATIC_POLICY +STATISTIC +STATISTIC# +STATISTICS +STATISTICS_NAME +STATISTICS_TYPE +STATISTICS_VALUE +STATISTICS_VIEW_NAME +STATISTIC_NAME +STATISTIC_TIME +STATISTIC_UNIT +STATISTIC_VALUE +STATSTYPE_NAME +STATSTYPE_SCHEMA +STATS_ROW_MISMATCH +STATS_UPDATE_TIME +STATTYPE_LOCKED +STATUS +STATUS# +STATUS_CHANGE_TIME +STATUS_CODE +STATUS_MESSAGE +STATUS_QUEUE +STATUS_STR +STATUS_UPDATE_DATE +STATUS_UPDATE_TIME +STATUS_WEIGHT +STAT_ID +STAT_NAME +STAT_PERIOD +STB_OBJECT_MISMATCH +STEADY_STATE_DURATION +STEP +STEP_JOB_LOG_ID +STEP_JOB_SUBNAME +STEP_NAME +STEP_NUMBER +STEP_TYPE +STMT_ID +STOP_ON_DDL +STOP_ON_WINDOW_CLOSE +STORAGE_COMMON_DB_UTILS. +STORAGE_COMMON_DB_UTILS.GET_ORACLE_DB_TARGETS +STORAGE_COMMON_DB_UTILS.GET_OS_ENTITIES_FOR_ORCL_TGTS +STORAGE_ECM_PKG. +STORAGE_ECM_PKG.DB_POST_PROCESSING +STORAGE_ECM_PKG.DIGEST_GLOBAL_UNIQUE_ID +STORAGE_ECM_PKG.LOG_ISSUE +STORAGE_ECM_PKG.NFS_POST_PROCESSING +STORAGE_ECM_PKG.POST_PROCESSING +STORAGE_REP_METRICS_PKG. +STORAGE_REP_METRICS_PKG.CALC_STORAGE_HISTORY +STORAGE_REP_METRICS_PKG.CREATE_STORAGE_REP_HIST_METRIC +STORAGE_REP_METRICS_PKG.TEST_REP_METRICS +STORAGE_SIZE +STORAGE_SPEC +STORAGE_TYPE +STORAGE_UI_COMMON_PKG. +STORAGE_UI_COMMON_PKG.DELETE_MISSING_SNAPSHOT_HOSTS +STORAGE_UI_COMMON_PKG.GET_COLLECTION_TIMESTAMP +STORAGE_UI_COMMON_PKG.GET_HIST_ENABLED_EXISTS_FLAG +STORAGE_UI_COMMON_PKG.GET_REFRESH_JOB_INFO +STORAGE_UI_COMMON_PKG.GET_STORAGE_DATA_AVAIL_INFO +STORAGE_UI_COMMON_PKG.GET_STORAGE_ERRORS +STORAGE_UI_COMMON_PKG.GET_STORAGE_HIST_ASM +STORAGE_UI_COMMON_PKG.GET_STORAGE_HIST_DB +STORAGE_UI_COMMON_PKG.GET_STORAGE_HIST_DISKS +STORAGE_UI_COMMON_PKG.GET_STORAGE_HIST_ENABLED +STORAGE_UI_COMMON_PKG.GET_STORAGE_HIST_LOCALFS +STORAGE_UI_COMMON_PKG.GET_STORAGE_HIST_NFS +STORAGE_UI_COMMON_PKG.GET_STORAGE_HIST_SUMMARY +STORAGE_UI_COMMON_PKG.GET_STORAGE_HIST_VOL +STORAGE_UI_COMMON_PKG.GET_STORAGE_SUMMARY +STORAGE_UI_COMMON_PKG.GET_STORAGE_SUMMARY_VALUES +STORAGE_UI_COMMON_PKG.GET_STORAGE_VENDOR_DISTRIB +STORAGE_UI_COMMON_PKG.GET_STRG_DATA_CFG_AND_ERRORS +STORAGE_UI_COMMON_PKG.GET_TARGET_NAME_TYPE +STORAGE_UI_COMMON_PKG.GET_TARGET_TIMEZONE_REGION +STORAGE_UI_COMMON_PKG.INSERT_TARGETS_FOR_UI_QUERIES +STORAGE_UI_COMMON_PKG.RUN_HIST_COLLECTION +STORAGE_UI_GROUP_PKG. +STORAGE_UI_GROUP_PKG.ENABLE_HIST_AND_RUN_COLL +STORAGE_UI_GROUP_PKG.GET_ALLOC_SUMMARY_BY_HOST +STORAGE_UI_GROUP_PKG.GET_HOST_TARGETS +STORAGE_UI_GROUP_PKG.GET_JOB_EXECUTION_STATUS +STORAGE_UI_GROUP_PKG.GET_STORAGE_HIST_ENABLED +STORAGE_UI_GROUP_PKG.GET_USAGE_SUMMARY_BY_HOST +STORAGE_UI_GROUP_PKG.SET_GROUP_HISTORY_FLAG +STORAGE_UI_HOST_PKG. +STORAGE_UI_HOST_PKG.GET_HOSTS_SHARING_RESOURCE +STORAGE_UI_HOST_PKG.GET_HOST_ASM_STORAGE +STORAGE_UI_HOST_PKG.GET_HOST_DB_STORAGE +STORAGE_UI_HOST_PKG.GET_HOST_DISKS_STORAGE +STORAGE_UI_HOST_PKG.GET_HOST_FS_STORAGE +STORAGE_UI_HOST_PKG.GET_HOST_VOLUMES_STORAGE +STORAGE_UI_HOST_PKG.GET_INFO_FOR_STORAGE_REFRESH +STORAGE_UI_UTIL_PKG. +STORAGE_UI_UTIL_PKG.CONVERT_INTO_STORAGE_UNIT +STORAGE_UI_UTIL_PKG.GET_UI_STORAGE_UNIT +STORAGE_UI_UTIL_PKG.RAISE_ERR_IF_NO_SNAPSHOT +STORAGE_UI_UTIL_PKG.SET_STORAGE_CONTEXT +STORECOMMAND +STOREFLAGS +STORENAME +STOREOWNER +STORE_NAME +STORE_OWNER +STR2NUMTBL. +STR2TBL. +STRAGG. +STREAMS +STREAMS_NAME +STREAMS_POOL_SIZE_FACTOR +STREAMS_POOL_SIZE_FOR_ESTIMATE +STREAMS_RULE_TYPE +STREAMS_TYPE +STREAM_ID +STREAM_SEQUENCE# +STRIDE +STRING_AGG_TYPE.ODCIAGGREGATEINITIALIZE +STRING_AGG_TYPE.ODCIAGGREGATEITERATE +STRING_AGG_TYPE.ODCIAGGREGATEMERGE +STRING_AGG_TYPE.ODCIAGGREGATETERMINATE +STRIPE +STRIPED +STRIPE_COLUMNS +STRIPE_SIZE +STRIPE_WIDTH_K +STRUCTURE +STYLE3D778_TAB$XD. +ST_ANNOTATIONTEXTELEMENT.LEADERLINE +ST_ANNOTATIONTEXTELEMENT.LOCATION +ST_ANNOTATIONTEXTELEMENT.TEXTATTRIBUTES +ST_ANNOTATIONTEXTELEMENT.VALUE +ST_ANNOTATIONTEXTELEMENT_ARRAY.ELEMENTN +ST_ANNOTATION_TEXT.CONCAT +ST_ANNOTATION_TEXT.ELEMENT_ARRAY +ST_ANNOTATION_TEXT.ENVELOPE +ST_ANNOTATION_TEXT.ST_ANNOTATION_TEXT +ST_CIRCULARSTRING.ST_CIRCULARSTRING +ST_CIRCULARSTRING.ST_POINTS +ST_COMPOUNDCURVE.ST_COMPOUNDCURVE +ST_COMPOUNDCURVE.ST_CURVEN +ST_COMPOUNDCURVE.ST_CURVES +ST_COMPOUNDCURVE.ST_NUMCURVES +ST_CURVE.ST_DIMENSION +ST_CURVE.ST_ENDPOINT +ST_CURVE.ST_ISCLOSED +ST_CURVE.ST_ISRING +ST_CURVE.ST_ISSIMPLE +ST_CURVE.ST_LENGTH +ST_CURVE.ST_MIDPOINTREP +ST_CURVE.ST_NUMPOINTS +ST_CURVE.ST_POINTN +ST_CURVE.ST_POINTS +ST_CURVE.ST_STARTPOINT +ST_CURVEPOLYGON.ST_CURVEPOLYGON +ST_CURVEPOLYGON.ST_EXTERIORRING +ST_CURVEPOLYGON.ST_INTERIORRINGN +ST_CURVEPOLYGON.ST_INTERIORRINGS +ST_CURVEPOLYGON.ST_NUMINTERIORRING +ST_GEOMCOLLECTION.ST_DIMENSION +ST_GEOMCOLLECTION.ST_GEOMCOLLECTION +ST_GEOMCOLLECTION.ST_GEOMETRIES +ST_GEOMETRY.FROM_SDO_GEOM +ST_GEOMETRY.FROM_WKB +ST_GEOMETRY.FROM_WKT +ST_GEOMETRY.GET_SDO_GEOM +ST_GEOMETRY.GET_WKB +ST_GEOMETRY.GET_WKT +ST_GEOMETRY.ST_BOUNDARY +ST_GEOMETRY.ST_BUFFER +ST_GEOMETRY.ST_CENTROID +ST_GEOMETRY.ST_CONTAINS +ST_GEOMETRY.ST_CONVEXHULL +ST_GEOMETRY.ST_COORDDIM +ST_GEOMETRY.ST_CROSS +ST_GEOMETRY.ST_CROSSES +ST_GEOMETRY.ST_DIFFERENCE +ST_GEOMETRY.ST_DIMENSION +ST_GEOMETRY.ST_DISJOINT +ST_GEOMETRY.ST_DISTANCE +ST_GEOMETRY.ST_ENVELOPE +ST_GEOMETRY.ST_EQUALS +ST_GEOMETRY.ST_GEOMETRYTYPE +ST_GEOMETRY.ST_GETTOLERANCE +ST_GEOMETRY.ST_INTERSECTION +ST_GEOMETRY.ST_INTERSECTS +ST_GEOMETRY.ST_ISEMPTY +ST_GEOMETRY.ST_ISSIMPLE +ST_GEOMETRY.ST_ISVALID +ST_GEOMETRY.ST_OVERLAP +ST_GEOMETRY.ST_RELATE +ST_GEOMETRY.ST_SRID +ST_GEOMETRY.ST_SYMDIFFERENCE +ST_GEOMETRY.ST_SYMMETRICDIFFERENCE +ST_GEOMETRY.ST_TOUCH +ST_GEOMETRY.ST_TOUCHES +ST_GEOMETRY.ST_UNION +ST_GEOMETRY.ST_WITHIN +ST_LINESTRING.ST_ISSIMPLE +ST_LINESTRING.ST_LINESTRING +ST_LINESTRING.ST_POINTS +ST_MULTICURVE.ST_DIMENSION +ST_MULTICURVE.ST_ISCLOSED +ST_MULTICURVE.ST_ISSIMPLE +ST_MULTICURVE.ST_LENGTH +ST_MULTICURVE.ST_MULTICURVE +ST_MULTILINESTRING.ST_MULTILINESTRING +ST_MULTIPOINT.ST_DIMENSION +ST_MULTIPOINT.ST_ISSIMPLE +ST_MULTIPOINT.ST_MULTIPOINT +ST_MULTIPOLYGON.ST_BDMPOLYFROMTEXT +ST_MULTIPOLYGON.ST_BDMPOLYFROMWKB +ST_MULTIPOLYGON.ST_MULTIPOLYGON +ST_MULTISURFACE.ST_AREA +ST_MULTISURFACE.ST_DIMENSION +ST_MULTISURFACE.ST_MULTISURFACE +ST_MULTISURFACE.ST_POINTONSURFACE +ST_POINT.ST_DIMENSION +ST_POINT.ST_EXPLICITPOINT +ST_POINT.ST_POINT +ST_POINT.ST_X +ST_POINT.ST_Y +ST_POLYGON.ST_BDPOLYFROMTEXT +ST_POLYGON.ST_BDPOLYFROMWKB +ST_POLYGON.ST_EXTERIORRING +ST_POLYGON.ST_INTERIORRINGN +ST_POLYGON.ST_INTERIORRINGSP +ST_POLYGON.ST_POLYGON +ST_SURFACE.ST_AREA +ST_SURFACE.ST_DIMENSION +ST_SURFACE.ST_POINTONSURFACE +SUBCACHE# +SUBCACHE_NAME +SUBHEAP_DESC +SUBJECT +SUBNAME +SUBOBJECT_NAME +SUBORDINATE# +SUBPARTITIONING_KEY_COUNT +SUBPARTITIONING_TYPE +SUBPARTITION_COUNT +SUBPARTITION_NAME +SUBPARTITION_POSITION +SUBPROGRAM_ID +SUBPTXT. +SUBPTXT2. +SUBQUERY_PRUNING +SUBSCRIBER_ADDRESS +SUBSCRIBER_ID +SUBSCRIBER_NAME +SUBSCRIBER_TYPE +SUBSCRIPTION_NAME +SUBSETTING_OPERATION +SUBSTITUTABLE +SUB_COMPONENT_TYPE +SUB_FLAGS +SUB_NUM +SUB_PLAN +SUB_SIZE +SUCCESS +SUCC_REQ# +SUGGESTED_ACTION +SUMMARY +SUMMARY_ID +SUMMARY_NAME +SUM_CPU_TIME +SUM_SCAN +SUM_SQUARES +SUM_SYS_IO_WAIT +SUM_USER_IO_WAIT +SUM_WRITE +SUPER +SUPERTYPE_NAME +SUPERTYPE_OWNER +SUPERVIEW_NAME +SUPPLEMENTAL_ATTRIBUTES +SUPPLEMENTAL_DETAILS +SUPPLEMENTAL_LOG_DATA_ALL +SUPPLEMENTAL_LOG_DATA_FK +SUPPLEMENTAL_LOG_DATA_MIN +SUPPLEMENTAL_LOG_DATA_PK +SUPPLEMENTAL_LOG_DATA_PL +SUPPLEMENTAL_LOG_DATA_UI +SUPPORT_MODE +SUSPECT +SUSPECT_COMPONENT +SUSPECT_SUBCOMPONENT +SUSPEND_TIME +SVRNAME +SVR_ID +SWAP_JOIN_INPUTS +SWEEP_TIME +SWITCHES_IN_CPU_TIME +SWITCHES_IN_IO_MEGABYTES +SWITCHES_IN_IO_REQUESTS +SWITCHES_OUT_CPU_TIME +SWITCHES_OUT_IO_MEGABYTES +SWITCHES_OUT_IO_REQUESTS +SWITCHOVER# +SWITCHOVER_STATUS +SWITCH_CHANGE# +SWITCH_ESTIMATE +SWITCH_FOR_CALL +SWITCH_GROUP +SWITCH_IO_MEGABYTES +SWITCH_IO_REQS +SWITCH_TIME +SWITCH_TIME_IN_CALL +SYN +SYNCHRONIZATION +SYNCHRONIZATION_STATUS +SYNCHRONIZED +SYNCRN. +SYNC_CAPTURE_REASON +SYNC_CAPTURE_VERSION +SYNC_TIME +SYNONYM_NAME +SYS$RAWTOANY. +SYSASM +SYSDBA +SYSEVENT. +SYSOPER +SYSTEM +SYSTEM_CREATED +SYSTEM_STATUS +SYSTEM_TASK +SYST_HIST. +SYST_HIST.GET_SYSTEM_HISTORY_INFO +SYST_HIST.IS_TRACKED_SYSTEM +SYST_HIST.RECORD_CHANGES +SYS_DL_CURSOR +SYS_IXMLAGG. +SYS_IXQAGG. +SYS_IXQAGGAVG. +SYS_IXQAGGSUM. +SYS_NT_COLLECT. +SYS_NT_COLLECT_IMP.ODCIAGGREGATEINITIALIZE +SYS_NT_COLLECT_IMP.ODCIAGGREGATEITERATE +SYS_NT_COLLECT_IMP.ODCIAGGREGATEMERGE +SYS_NT_COLLECT_IMP.ODCIAGGREGATETERMINATE +SYS_PARALLEL_TXN +SYS_PRIVILEGE +SYS_RID_ORDER +SYS_STUB_FOR_PURITY_ANALYSIS. +SYS_STUB_FOR_PURITY_ANALYSIS.PRDS +SYS_STUB_FOR_PURITY_ANALYSIS.PRPS +SYS_STUB_FOR_PURITY_ANALYSIS.PWDS +SYS_STUB_FOR_PURITY_ANALYSIS.PWPS +SYS_XMLAGG. +S_2_NULL +S_2_NULL_FORCED_STALE +S_2_X +T2M. +TABLEOBJ# +TABLESPACE +TABLESPACE_ID +TABLESPACE_MAXSIZE +TABLESPACE_NAME +TABLESPACE_PROCESSED +TABLESPACE_SELECTED +TABLESPACE_SIZE +TABLESPACE_USEDSIZE +TABLE_ALIAS +TABLE_COLUMN_ID +TABLE_COLUMN_NAME +TABLE_LOCK +TABLE_LOOKUP_BY_NL +TABLE_NAME +TABLE_NUM +TABLE_OWNER +TABLE_PRIVILEGES +TABLE_SCANS_DELTA +TABLE_SCANS_TOTAL +TABLE_SCHEMA +TABLE_SPACE +TABLE_STATS +TABLE_TYPE +TABLE_TYPE_NAME +TABLE_TYPE_OWNER +TABNAME +TABS +TAB_COLUMN_NAME +TADDR +TAG +TARBALLID +TARENDOFFSET +TARGET +TARGETINFO_ID +TARGETS_AVAILABILITY_DEFAULT. +TARGETS_INSERT_TRIGGER. +TARGET_BUFFERS +TARGET_COMMENT +TARGET_DATABASE +TARGET_DESC +TARGET_DIMENSION_NAME +TARGET_INSTANCE +TARGET_INSTANCE_NUMBER +TARGET_LEVEL +TARGET_MTTR +TARGET_NAMESPACE +TARGET_PROP_DEFS_TR. +TARGET_REDO_BLKS +TARGET_SIZE +TARGET_TYPE +TARSTARTOFFSET +TASK_COMMENT +TASK_EXEC_NAME +TASK_EXPIRY_TIME +TASK_FND_ID +TASK_ID +TASK_NAME +TASK_NUMBER +TASK_OBJ_ID +TASK_OPERATION +TASK_OWNER +TASK_PRIORITY +TASK_READY_TIME +TASK_REC_ID +TASK_START_TIME +TASK_STATUS +TASK_SUBMIT_TIME +TASK_TARGET_NAME +TASK_TARGET_TYPE +TASK_TYPE +TBLAST_ALIGN. +TBLAST_MATCH. +TBS_ID +TCKT_AVAIL +TCKT_LIMIT +TCKT_RCVD +TCKT_WAIT +TEMP +TEMPLATE_COMMENT +TEMPLATE_ID +TEMPLATE_NAME +TEMPLATE_OWNER +TEMPLATE_TARGET_ID +TEMPLATE_TYPE +TEMPORARY +TEMPORARY_TABLESPACE +TEMPSEG_SIZE +TEMP_SPACE +TEMP_SPACE_ALLOCATED +TEMP_SPACE_PAGES +TEMP_SPACE_READS +TERMINAL +TERMINAL_RELEASE +TERM_INDEX +TESTEXEC_FIRST_EXEC_IGNORED +TESTEXEC_TOTAL_EXECS +TEXT +TEXTINDEXMETHODS.ODCIGETINTERFACES +TEXTINDEXMETHODS.ODCIINDEXALTER +TEXTINDEXMETHODS.ODCIINDEXCLOSE +TEXTINDEXMETHODS.ODCIINDEXCREATE +TEXTINDEXMETHODS.ODCIINDEXDELETE +TEXTINDEXMETHODS.ODCIINDEXDROP +TEXTINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +TEXTINDEXMETHODS.ODCIINDEXFETCH +TEXTINDEXMETHODS.ODCIINDEXGETMETADATA +TEXTINDEXMETHODS.ODCIINDEXINSERT +TEXTINDEXMETHODS.ODCIINDEXMERGEPARTITION +TEXTINDEXMETHODS.ODCIINDEXSPLITPARTITION +TEXTINDEXMETHODS.ODCIINDEXSTART +TEXTINDEXMETHODS.ODCIINDEXTRUNCATE +TEXTINDEXMETHODS.ODCIINDEXUPDATE +TEXTINDEXMETHODS.ODCIINDEXUTILCLEANUP +TEXTINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +TEXTOPTSTATS.ODCIGETINTERFACES +TEXTOPTSTATS.ODCISTATSCOLLECT +TEXTOPTSTATS.ODCISTATSDELETE +TEXTOPTSTATS.ODCISTATSFUNCTIONCOST +TEXTOPTSTATS.ODCISTATSINDEXCOST +TEXTOPTSTATS.ODCISTATSSELECTIVITY +TEXT_LENGTH +TFM_PLAN.ADD_STEP +TFM_PLAN.EXPAND_CHAIN_ELEMENT_CORE +TFM_PLAN.EXPAND_CONCAT_CHAIN_ELEMENT +TFM_PLAN.EXPAND_CONCAT_CHAIN_ELEMENTS +TFM_PLAN.EXPAND_FOR_CHAIN_ELEMENT_CORE +TFM_PLAN.EXPAND_INV_CHAIN_ELEMENT_CORE +TFM_PLAN.GET_NUM_STEPS +TFM_PLAN.GET_STEP +TFM_PLAN.TFM_PLAN +TGT_SYSDATE_WGUID. +TGT_SYSDATE_WTZ. +THEME3D777_TAB$XD. +THINK_TIME +THINK_TIME_AUTO_CORRECT +THINK_TIME_SCALE +THIS_DATE +THIS_SEC +THREAD +THREAD# +THREAD_ID +THREAD_INSTANCE_NUMBER +THREAD_SQN +THRESHOLD_TYPE +THROWS +TICKS +TIME +TIMEOUT +TIMEOUTS +TIMESTAMP +TIMESTAMP_TO_SCN. +TIME_COMPUTED +TIME_DETECTED +TIME_ENTERED +TIME_GAIN +TIME_INDEX_BLOCKS_FREED +TIME_LOSS +TIME_MODEL +TIME_NEEDED +TIME_REMAINING +TIME_REMAINING_MICRO +TIME_REMAINING_SECS +TIME_SINCE_LAST_WAIT_MICRO +TIME_SINCE_LAST_WAIT_SECS +TIME_SUGGESTED +TIME_TAKEN_DISPLAY +TIME_WAITED +TIME_WAITED_FG +TIME_WAITED_MICRO +TIME_WAITED_MICRO_FG +TITLE +TITLE103_TAB$XD. +TITLE93_TAB$XD. +TIV_GB +TIV_SSF +TMGR_CPU_TIME +TMGR_ELAPSED_TIME +TMGR_ROWS_PROCESSED +TM_DELTA_CPU_TIME +TM_DELTA_DB_TIME +TM_DELTA_TIME +TOP +TOPNSQL +TOP_ERROR1 +TOP_ERROR2 +TOP_LEVEL_CALL# +TOP_LEVEL_CALL_NAME +TOP_LEVEL_DDL_MISMATCH +TOP_LEVEL_RPI_CURSOR +TOP_LEVEL_SQL_ID +TOP_LEVEL_SQL_OPCODE +TOP_SESSION_ID +TOP_SESSION_SERIAL# +TOTAL +TOTALQ +TOTALWORK +TOTAL_ACTIONS +TOTAL_ADMIN +TOTAL_ALLOC +TOTAL_ANONYMOUS_NTFN_TIME +TOTAL_APPLIED +TOTAL_AQ_NTFN_TIME +TOTAL_ASSIGNED +TOTAL_BLOCKS +TOTAL_BYTES +TOTAL_CHUNKS +TOTAL_CONSUMERS +TOTAL_CPU_LAST_30_DAYS +TOTAL_CPU_LAST_7_DAYS +TOTAL_CPU_TIME +TOTAL_DBCHANGE_NTFN_TIME +TOTAL_DEALLOC +TOTAL_DEQUEUED_MSG +TOTAL_ELAPSED_TIME +TOTAL_EMAIL_NTFN_TIME +TOTAL_EMON_LATENCY +TOTAL_ERRORS +TOTAL_EXECUTIONS +TOTAL_EXTENTS +TOTAL_FREE +TOTAL_FULL_EVALUATIONS +TOTAL_HTTP_NTFN_TIME +TOTAL_HUNG_SESSIONS +TOTAL_IGNORED +TOTAL_IN_MEMORY_LCRS +TOTAL_LATENCY +TOTAL_LCRS_WITH_DEP +TOTAL_LCRS_WITH_WMDEP +TOTAL_MB +TOTAL_MEMORY_ALLOCATED +TOTAL_MESSAGES_APPLIED +TOTAL_MESSAGES_CAPTURED +TOTAL_MESSAGES_CREATED +TOTAL_MESSAGES_DEQUEUED +TOTAL_MESSAGES_ENQUEUED +TOTAL_MESSAGES_SENT +TOTAL_MESSAGES_SPILLED +TOTAL_MESSAGE_COUNT +TOTAL_MSGS +TOTAL_NUMBER +TOTAL_OCI_NTFN_TIME +TOTAL_PAYLOAD_BYTES_SENT +TOTAL_PENDING_NTFN_BYTES +TOTAL_PLSQL_EXEC_TIME +TOTAL_PLSQL_NTFN_TIME +TOTAL_POSTCOST +TOTAL_PRECOST +TOTAL_PREFILTER_DISCARDED +TOTAL_PREFILTER_EVALUATIONS +TOTAL_PREFILTER_KEPT +TOTAL_RECEIVED +TOTAL_REQ# +TOTAL_ROLLBACKS +TOTAL_RUNS +TOTAL_SAMPLES +TOTAL_SHARABLE_MEM +TOTAL_SIZE +TOTAL_SNAP_SPACE_USAGE +TOTAL_SPILLED_MSG +TOTAL_SQL +TOTAL_SQL_MEM +TOTAL_STMTS +TOTAL_TASKS_EXECUTED +TOTAL_TASK_FAILURES +TOTAL_TASK_LATENCY +TOTAL_TASK_RUNS +TOTAL_TASK_RUN_TIME +TOTAL_TIME +TOTAL_TIMEOUTS +TOTAL_TIMEOUTS_FG +TOTAL_TRANSACTION +TOTAL_TRANSACTIONS_SENT +TOTAL_TRANSACTION_CPU_TIME +TOTAL_TRANSACTION_TIME +TOTAL_USAGE +TOTAL_WAIT +TOTAL_WAIT# +TOTAL_WAITS +TOTAL_WAITS_FG +TOTAL_WAIT_COMMITS +TOTAL_WAIT_DEPS +TOTSIZE +TO_ADDRESS +TO_COLUMN_NAME +TO_HASH +TO_NAME +TO_OWNER +TO_SCHEMA_NAME +TO_TABLE_NAME +TO_TYPE +TO_VAL +TQ_ID +TRACEFILE +TRACEID +TRACE_TYPE +TRACING +TRACKING_ID +TRACKING_LABEL +TRANSACTIONID +TRANSACTIONS +TRANSACTIONS_TOTAL +TRANSACTION_CPU_TIME +TRANSACTION_ID +TRANSACTION_ID0 +TRANSACTION_ID1 +TRANSACTION_MESSAGE_NUMBER +TRANSACTION_TIME +TRANSFERABLE +TRANSFORMATION +TRANSFORMATION_ID +TRANSFORM_DISTINCT_AGG +TRANSFORM_FUNCTION_NAME +TRANSFORM_LHS. +TRANSFORM_MAP. +TRANSFORM_MAP.DATA_DELETE +TRANSFORM_MAP.DATA_INSERT +TRANSFORM_TYPE +TRANSIENT_INCIDENT_LIFETIME +TRANSIENT_INCIDENT_LIFE_TIME +TRANSLATION_MISMATCH +TRANSMIT_MODE +TRAN_COMMENT +TRIGGERING_EVENT +TRIGGER_BODY +TRIGGER_NAME +TRIGGER_OWNER +TRIGGER_TYPE +TRUE_HITS +TRUE_HIT_RATIO +TRUE_RULES +TRUNCATED +TS# +TSN +TSNAME +TS_NAME +TTL_BUF +TTL_CLT_BUF +TTL_IN_CONNECT +TTL_LOOPS +TTL_MSG +TTL_OUT_CONNECT +TTL_RECONNECT +TTL_SVR_BUF +TUNED_UNDORETENTION +TXN +TXNCOUNT +TXNS_ENQUEUED +TXNS_PURGED +TXN_CONF_SQL_ID +TXN_NAME +TX_NAME +TX_REQUESTS +TYPCHK_DEP_MISMATCH +TYPE +TYPE# +TYPECHECK_MEM +TYPECHECK_MISMATCH +TYPECODE +TYPEID +TYPE_CHK_HEAP +TYPE_HASHCODE +TYPE_ID +TYPE_LINK +TYPE_MOD +TYPE_NAME +TYPE_OID +TYPE_OWNER +TYPE_PROPERTIES_TR. +TYPE_SCHEMA +TYPE_SIZE +TYPE_SUBNAME +TYPE_TEXT +TYPE_TEXT_LENGTH +TYPE_TOID +TZABBREV +TZNAME +UBABLK +UBAFIL +UBAREC +UBASQN +UDID +UD_TRIGS. +UD_TRIGS.DROP_ALL_UDTRIG_DISPATCH_PROCS +UD_TRIGS.EXISTSTRIGGER +UD_TRIGS.GENUDTRIGDISPATCHER +UD_TRIGS.GETDISPATCHERINFO +UD_TRIGS.GETPARAMSTRS +UD_TRIGS.HASOWNERNAMEPREFIX +UD_TRIGS.INSERTTABLEOWNERNAME +UD_TRIGS.RECREATETRIGPROCS +UD_TRIGS.REGENUDTRIGDISPATCHER +UD_TRIGS.REGENUDTRIGPROCS +UD_TRIGS.REMOVEDOUBLEQUOTESINUSERNAME +UD_TRIGS.REPLACEOLDNEW +UD_TRIGS.SETGLOBALTRIGGERSETTING +UD_TRIGS.SETTRIGGEREVENTS +UD_TRIGS.SUBSTITUTETABLENAME +UD_TRIGS.TRF_UDTRGS_ON_COMMIT_DDL +UD_TRIGS.TRF_UDTRGS_ON_VER_DISABLE +UD_TRIGS.TRF_UDTRGS_ON_VER_ENABLE +UD_TRIGS.UPDATETRIGEVENTSETTINGS +UNAME +UNASSIGNED_COMPLETE_TXNS +UNBOUND_CURSOR +UNBROWSED_MSGS +UNDER_PATH_FUNC. +UNDOBLKS +UNDOBLOCKSDONE +UNDOBLOCKSTOTAL +UNDOTSN +UNDO_BLOCK +UNDO_BLOCK_DBLINK +UNDO_LIMIT_HIT +UNDO_OPTIMIZED +UNDO_OPT_CURRENT_CHANGE# +UNDO_POOL +UNDO_REQUESTS +UNDO_SQL +UNDO_SQL_SQN +UNDO_SQL_SUB_SQN +UNDO_VALUE +UNEXPIREDBLKS +UNIQUENESS +UNIT +UNITS +UNKNOWN_CONSIDER_FRESH +UNKNOWN_EXTERNAL_TABLE +UNKNOWN_IMPORT +UNKNOWN_PLSQL_FUNC +UNKNOWN_PREBUILT +UNKNOWN_TRUSTED_FD +UNNEST +UNRECOVERABLE_CHANGE# +UNRECOVERABLE_TIME +UNUSABLE +UNXPBLKRELCNT +UNXPBLKREUCNT +UNXPSTEALCNT +UPD +UPDATABLE +UPDATED_ROWS +UPDATES +UPDATE_COMMENT +UPDATE_FREQ +UPDATE_JOB_HISTORY. +UPDATE_LOG +UPDATE_SENT +UPDATE_SOURCE. +UPDATE_TIME +UPDATE_TRIG +UPGRADE_IN_PROGRESS +UPLOAD_TIME +UPPER_BOUND +UPPER_PORT +UPSTREAM_COMP_ID +URIFACTORY. +URIFACTORY.ESCAPEURI +URIFACTORY.GETURI +URIFACTORY.REGISTERURLHANDLER +URIFACTORY.UNESCAPEURI +URIFACTORY.UNREGISTERURLHANDLER +URITYPE.GETBLOB +URITYPE.GETCLOB +URITYPE.GETCONTENTTYPE +URITYPE.GETEXTERNALURL +URITYPE.GETURL +URITYPE.GETXML +URITYPE.MAKEBLOBFROMCLOB +USABLE +USABLE_FILE_MB +USAGE +USAGE_CONTEXT_ID +USAGE_ID +USAGE_TYPE +USED +USED_BLOCKS +USED_CHANGE_TRACKING +USED_COUNT +USED_EXTENTS +USED_MEMORY_SIZE +USED_OPTIMIZATION +USED_PERCENT +USED_SPACE +USED_TOTAL +USED_UBLK +USED_UREC +USER +USER# +USERGROUP_INCARNATION +USERGROUP_NUMBER +USERHOST +USERID +USERNAME +USERS_EXECUTING +USERS_MAX +USERS_OPENING +USER_ADDM_FDG_BREAKDOWN +USER_ADDM_FINDINGS +USER_ADDM_INSTANCES +USER_ADDM_TASKS +USER_ADDM_TASK_DIRECTIVES +USER_ADVISOR_ACTIONS +USER_ADVISOR_DIR_TASK_INST +USER_ADVISOR_EXECUTIONS +USER_ADVISOR_EXEC_PARAMETERS +USER_ADVISOR_FDG_BREAKDOWN +USER_ADVISOR_FINDINGS +USER_ADVISOR_JOURNAL +USER_ADVISOR_LOG +USER_ADVISOR_OBJECTS +USER_ADVISOR_PARAMETERS +USER_ADVISOR_RATIONALE +USER_ADVISOR_RECOMMENDATIONS +USER_ADVISOR_SQLA_COLVOL +USER_ADVISOR_SQLA_REC_SUM +USER_ADVISOR_SQLA_TABLES +USER_ADVISOR_SQLA_TABVOL +USER_ADVISOR_SQLA_WK_MAP +USER_ADVISOR_SQLA_WK_STMTS +USER_ADVISOR_SQLA_WK_SUM +USER_ADVISOR_SQLPLANS +USER_ADVISOR_SQLSTATS +USER_ADVISOR_SQLW_COLVOL +USER_ADVISOR_SQLW_JOURNAL +USER_ADVISOR_SQLW_PARAMETERS +USER_ADVISOR_SQLW_STMTS +USER_ADVISOR_SQLW_SUM +USER_ADVISOR_SQLW_TABLES +USER_ADVISOR_SQLW_TABVOL +USER_ADVISOR_SQLW_TEMPLATES +USER_ADVISOR_TASKS +USER_ADVISOR_TEMPLATES +USER_ALL_TABLES +USER_AQ_AGENT_PRIVS +USER_ARGUMENTS +USER_ASSEMBLIES +USER_ASSOCIATIONS +USER_ATTRIBUTE_TRANSFORMATIONS +USER_AUDIT_OBJECT +USER_AUDIT_POLICIES +USER_AUDIT_POLICY_COLUMNS +USER_AUDIT_SESSION +USER_AUDIT_STATEMENT +USER_AUDIT_TRAIL +USER_AWS +USER_AW_OBJ +USER_AW_PROP +USER_AW_PS +USER_BASE_TABLE_MVIEWS +USER_BIND_PEEK_MISMATCH +USER_BLOCKS +USER_BYTES +USER_CALLS +USER_CALLS_TOTAL +USER_CALLS_UNREPLAYABLE +USER_CATALOG +USER_CHANGE_NOTIFICATION_REGS +USER_CLUSTERS +USER_CLUSTER_HASH_EXPRESSIONS +USER_CLU_COLUMNS +USER_COLL_TYPES +USER_COL_COMMENTS +USER_COL_PENDING_STATS +USER_COL_PRIVS +USER_COL_PRIVS_MADE +USER_COL_PRIVS_RECD +USER_COMMENT +USER_COMPARISON +USER_COMPARISON_COLUMNS +USER_COMPARISON_ROW_DIF +USER_COMPARISON_SCAN +USER_COMPARISON_SCAN_SUMMARY +USER_COMPARISON_SCAN_VALUES +USER_CONSTRAINTS +USER_CONS_COLUMNS +USER_CONS_OBJ_COLUMNS +USER_CONTEXT +USER_CQ_NOTIFICATION_QUERIES +USER_CUBES +USER_CUBE_ATTRIBUTES +USER_CUBE_ATTR_VISIBILITY +USER_CUBE_BUILD_PROCESSES +USER_CUBE_CALCULATED_MEMBERS +USER_CUBE_DIMENSIONALITY +USER_CUBE_DIMENSIONS +USER_CUBE_DIM_LEVELS +USER_CUBE_DIM_MODELS +USER_CUBE_DIM_VIEWS +USER_CUBE_DIM_VIEW_COLUMNS +USER_CUBE_HIERARCHIES +USER_CUBE_HIER_LEVELS +USER_CUBE_HIER_VIEWS +USER_CUBE_HIER_VIEW_COLUMNS +USER_CUBE_MEASURES +USER_CUBE_VIEWS +USER_CUBE_VIEW_COLUMNS +USER_DATAPUMP_JOBS +USER_DBFS_HS +USER_DBFS_HS_COMMANDS +USER_DBFS_HS_FILES +USER_DBFS_HS_FIXED_PROPERTIES +USER_DBFS_HS_PROPERTIES +USER_DB_LINKS +USER_DEPENDENCIES +USER_DIMENSIONS +USER_DIM_ATTRIBUTES +USER_DIM_CHILD_OF +USER_DIM_HIERARCHIES +USER_DIM_JOIN_KEY +USER_DIM_LEVELS +USER_DIM_LEVEL_KEY +USER_EDITIONING_VIEWS +USER_EDITIONING_VIEWS_AE +USER_EDITIONING_VIEW_COLS +USER_EDITIONING_VIEW_COLS_AE +USER_ENCRYPTED_COLUMNS +USER_EPG_DAD_AUTHORIZATION +USER_ERRORS +USER_ERRORS_AE +USER_EVALUATION_CONTEXTS +USER_EVALUATION_CONTEXT_TABLES +USER_EVALUATION_CONTEXT_VARS +USER_EXTENTS +USER_EXTERNAL_LOCATIONS +USER_EXTERNAL_TABLES +USER_FILE_GROUPS +USER_FILE_GROUP_EXPORT_INFO +USER_FILE_GROUP_FILES +USER_FILE_GROUP_TABLES +USER_FILE_GROUP_TABLESPACES +USER_FILE_GROUP_VERSIONS +USER_FLASHBACK_ARCHIVE +USER_FLASHBACK_ARCHIVE_TABLES +USER_FLASHBACK_TXN_REPORT +USER_FLASHBACK_TXN_STATE +USER_FREE_SPACE +USER_FUNCTION_NAME +USER_GOLDENGATE_PRIVILEGES +USER_HISTOGRAMS +USER_ID +USER_IDENTIFIERS +USER_INCARNATION +USER_INDEXES +USER_INDEXTYPES +USER_INDEXTYPE_ARRAYTYPES +USER_INDEXTYPE_COMMENTS +USER_INDEXTYPE_OPERATORS +USER_IND_COLUMNS +USER_IND_EXPRESSIONS +USER_IND_PARTITIONS +USER_IND_PENDING_STATS +USER_IND_STATISTICS +USER_IND_SUBPARTITIONS +USER_INTERNAL_TRIGGERS +USER_IO_TIME +USER_IO_WAIT_TIME +USER_JAVA_ARGUMENTS +USER_JAVA_CLASSES +USER_JAVA_COMPILER_OPTIONS +USER_JAVA_DERIVATIONS +USER_JAVA_FIELDS +USER_JAVA_IMPLEMENTS +USER_JAVA_INNERS +USER_JAVA_LAYOUTS +USER_JAVA_METHODS +USER_JAVA_NCOMPS +USER_JAVA_POLICY +USER_JAVA_RESOLVERS +USER_JAVA_THROWS +USER_JOBS +USER_JOIN_IND_COLUMNS +USER_LIBRARIES +USER_LOBS +USER_LOB_PARTITIONS +USER_LOB_SUBPARTITIONS +USER_LOB_TEMPLATES +USER_LOG_GROUPS +USER_LOG_GROUP_COLUMNS +USER_MEASURE_FOLDERS +USER_MEASURE_FOLDER_CONTENTS +USER_METHOD_PARAMS +USER_METHOD_RESULTS +USER_MINING_MODELS +USER_MINING_MODEL_ATTRIBUTES +USER_MINING_MODEL_SETTINGS +USER_MVIEWS +USER_MVIEW_AGGREGATES +USER_MVIEW_ANALYSIS +USER_MVIEW_COMMENTS +USER_MVIEW_DETAIL_PARTITION +USER_MVIEW_DETAIL_RELATIONS +USER_MVIEW_DETAIL_SUBPARTITION +USER_MVIEW_JOINS +USER_MVIEW_KEYS +USER_MVIEW_LOGS +USER_MVIEW_REFRESH_TIMES +USER_NAME +USER_NESTED_TABLES +USER_NESTED_TABLE_COLS +USER_NETWORK_ACL_PRIVILEGES +USER_NUMBER +USER_OBJECTS +USER_OBJECTS_AE +USER_OBJECT_SIZE +USER_OBJECT_TABLES +USER_OBJ_AUDIT_OPTS +USER_OBJ_COLATTRS +USER_OLDIMAGE_COLUMNS +USER_OPANCILLARY +USER_OPARGUMENTS +USER_OPBINDINGS +USER_OPERATORS +USER_OPERATOR_COMMENTS +USER_OUTLINES +USER_OUTLINE_HINTS +USER_OVERRIDE +USER_PARALLEL_EXECUTE_CHUNKS +USER_PARALLEL_EXECUTE_TASKS +USER_PARTIAL_DROP_TABS +USER_PART_COL_STATISTICS +USER_PART_HISTOGRAMS +USER_PART_INDEXES +USER_PART_KEY_COLUMNS +USER_PART_LOBS +USER_PART_TABLES +USER_PASSWORD_LIMITS +USER_PENDING_CONV_TABLES +USER_PLSQL_OBJECT_SETTINGS +USER_POLICIES +USER_POLICY_CONTEXTS +USER_POLICY_GROUPS +USER_PROCEDURE +USER_PROCEDURES +USER_PROXIES +USER_PUBLISHED_COLUMNS +USER_QUEUES +USER_QUEUE_PUBLISHERS +USER_QUEUE_SCHEDULES +USER_QUEUE_SUBSCRIBERS +USER_QUEUE_TABLES +USER_RECYCLEBIN +USER_REFRESH +USER_REFRESH_CHILDREN +USER_REFS +USER_REGISTERED_MVIEWS +USER_REGISTERED_SNAPSHOTS +USER_REGISTRY +USER_REPAUDIT_ATTRIBUTE +USER_REPAUDIT_COLUMN +USER_REPCAT +USER_REPCATLOG +USER_REPCOLUMN +USER_REPCOLUMN_GROUP +USER_REPCONFLICT +USER_REPDDL +USER_REPFLAVORS +USER_REPFLAVOR_COLUMNS +USER_REPFLAVOR_OBJECTS +USER_REPGENERATED +USER_REPGENOBJECTS +USER_REPGROUP +USER_REPGROUPED_COLUMN +USER_REPGROUP_PRIVILEGES +USER_REPKEY_COLUMNS +USER_REPOBJECT +USER_REPPARAMETER_COLUMN +USER_REPPRIORITY +USER_REPPRIORITY_GROUP +USER_REPPROP +USER_REPRESOLUTION +USER_REPRESOLUTION_METHOD +USER_REPRESOLUTION_STATISTICS +USER_REPRESOL_STATS_CONTROL +USER_REPSCHEMA +USER_REPSITES +USER_RESOURCE_LIMITS +USER_RESUMABLE +USER_REWRITE_EQUIVALENCES +USER_ROLE_PRIVS +USER_RSRC_CONSUMER_GROUP_PRIVS +USER_RSRC_MANAGER_SYSTEM_PRIVS +USER_RULES +USER_RULESETS +USER_RULE_SET +USER_RULE_SETS +USER_RULE_SET_RULES +USER_SCHEDULER_CHAINS +USER_SCHEDULER_CHAIN_RULES +USER_SCHEDULER_CHAIN_STEPS +USER_SCHEDULER_CREDENTIALS +USER_SCHEDULER_DB_DESTS +USER_SCHEDULER_DESTS +USER_SCHEDULER_FILE_WATCHERS +USER_SCHEDULER_GROUPS +USER_SCHEDULER_GROUP_MEMBERS +USER_SCHEDULER_JOBS +USER_SCHEDULER_JOB_ARGS +USER_SCHEDULER_JOB_DESTS +USER_SCHEDULER_JOB_LOG +USER_SCHEDULER_JOB_RUN_DETAILS +USER_SCHEDULER_NOTIFICATIONS +USER_SCHEDULER_PROGRAMS +USER_SCHEDULER_PROGRAM_ARGS +USER_SCHEDULER_REMOTE_JOBSTATE +USER_SCHEDULER_RUNNING_CHAINS +USER_SCHEDULER_SCHEDULES +USER_SECONDARY_OBJECTS +USER_SEC_RELEVANT_COLS +USER_SEGMENTS +USER_SEQUENCES +USER_SNAPSHOTS +USER_SNAPSHOT_LOGS +USER_SNAPSHOT_REFRESH_TIMES +USER_SOURCE +USER_SOURCE_AE +USER_SOURCE_TABLES +USER_SPECIFIED_SIZE +USER_SQLJ_TYPES +USER_SQLJ_TYPE_ATTRS +USER_SQLJ_TYPE_METHODS +USER_SQLSET +USER_SQLSET_BINDS +USER_SQLSET_DEFINITIONS +USER_SQLSET_PLANS +USER_SQLSET_REFERENCES +USER_SQLSET_STATEMENTS +USER_SQLTUNE_BINDS +USER_SQLTUNE_PLANS +USER_SQLTUNE_RATIONALE_PLAN +USER_SQLTUNE_STATISTICS +USER_STATS +USER_STAT_EXTENSIONS +USER_STORED_SETTINGS +USER_SUBPARTITION_TEMPLATES +USER_SUBPART_COL_STATISTICS +USER_SUBPART_HISTOGRAMS +USER_SUBPART_KEY_COLUMNS +USER_SUBSCRIBED_COLUMNS +USER_SUBSCRIBED_TABLES +USER_SUBSCRIPTIONS +USER_SUBSCR_REGISTRATIONS +USER_SUMMARIES +USER_SYNONYMS +USER_SYS_PRIVS +USER_TABLES +USER_TABLESPACES +USER_TAB_COLS +USER_TAB_COLUMNS +USER_TAB_COL_STATISTICS +USER_TAB_COMMENTS +USER_TAB_HISTGRM_PENDING_STATS +USER_TAB_HISTOGRAMS +USER_TAB_MODIFICATIONS +USER_TAB_PARTITIONS +USER_TAB_PENDING_STATS +USER_TAB_PRIVS +USER_TAB_PRIVS_MADE +USER_TAB_PRIVS_RECD +USER_TAB_STATISTICS +USER_TAB_STATS_HISTORY +USER_TAB_STAT_PREFS +USER_TAB_SUBPARTITIONS +USER_TRANSFORMATIONS +USER_TRIGGERS +USER_TRIGGER_COLS +USER_TS +USER_TSTZ_TABLES +USER_TSTZ_TAB_COLS +USER_TS_QUOTAS +USER_TUNE_MVIEW +USER_TYPES +USER_TYPE_ATTRS +USER_TYPE_METHODS +USER_TYPE_VERSIONS +USER_UNUSED_COL_TABS +USER_UPDATABLE_COLUMNS +USER_USERS +USER_USTATS +USER_VARRAYS +USER_VIEWS +USER_VIEWS_AE +USER_WARNING_SETTINGS +USER_XDS_ATTRIBUTE_SECS +USER_XDS_INSTANCE_SETS +USER_XDS_OBJECTS +USER_XML_COLUMN_NAMES +USER_XML_INDEXES +USER_XML_PARTITIONED_TABLE_OK. +USER_XML_SCHEMAS +USER_XML_TABLES +USER_XML_TAB_COLS +USER_XML_VIEWS +USER_XML_VIEW_COLS +USE_ANTI +USE_CONCAT +USE_COUNT +USE_DATABASE_LINK +USE_FEEDBACK_STATS +USE_HASH +USE_HASH_AGGREGATION +USE_HASH_GBY_FOR_PUSHDOWN +USE_INVISIBLE_INDEXES +USE_LIKE +USE_MERGE +USE_MERGE_CARTESIAN +USE_NL +USE_NL_WITH_INDEX +USE_NO_INDEX +USE_RESOURCE_ESTIMATES +USE_SEMI +USE_TTT_FOR_GSETS +USE_WEAK_NAME_RESL +USING +USN +USPSCNBASE +USPSCNWRAP +USPTIME +UTL_BINARYINPUTSTREAM.AVAILABLE +UTL_BINARYINPUTSTREAM.CLOSE +UTL_BINARYINPUTSTREAM.ISNULL +UTL_BINARYINPUTSTREAM.READ +UTL_BINARYOUTPUTSTREAM.CLOSE +UTL_BINARYOUTPUTSTREAM.FLUSH +UTL_BINARYOUTPUTSTREAM.ISNULL +UTL_BINARYOUTPUTSTREAM.WRITE +UTL_CHARACTERINPUTSTREAM.AVAILABLE +UTL_CHARACTERINPUTSTREAM.CLOSE +UTL_CHARACTERINPUTSTREAM.ISNULL +UTL_CHARACTERINPUTSTREAM.READ +UTL_CHARACTEROUTPUTSTREAM.CLOSE +UTL_CHARACTEROUTPUTSTREAM.FLUSH +UTL_CHARACTEROUTPUTSTREAM.ISNULL +UTL_CHARACTEROUTPUTSTREAM.WRITE +UTL_COLL. +UTL_COLL.IS_LOCATOR +UTL_COMPRESS. +UTL_COMPRESS.ISOPEN +UTL_COMPRESS.LZ_COMPRESS +UTL_COMPRESS.LZ_COMPRESS_ADD +UTL_COMPRESS.LZ_COMPRESS_CLOSE +UTL_COMPRESS.LZ_COMPRESS_OPEN +UTL_COMPRESS.LZ_UNCOMPRESS +UTL_COMPRESS.LZ_UNCOMPRESS_CLOSE +UTL_COMPRESS.LZ_UNCOMPRESS_EXTRACT +UTL_COMPRESS.LZ_UNCOMPRESS_OPEN +UTL_ENCODE. +UTL_ENCODE.BASE64_DECODE +UTL_ENCODE.BASE64_ENCODE +UTL_ENCODE.MIMEHEADER_DECODE +UTL_ENCODE.MIMEHEADER_ENCODE +UTL_ENCODE.QUOTED_PRINTABLE_DECODE +UTL_ENCODE.QUOTED_PRINTABLE_ENCODE +UTL_ENCODE.TEXT_DECODE +UTL_ENCODE.TEXT_ENCODE +UTL_ENCODE.UUDECODE +UTL_ENCODE.UUENCODE +UTL_FILE. +UTL_FILE.FCLOSE +UTL_FILE.FCLOSE_ALL +UTL_FILE.FCOPY +UTL_FILE.FFLUSH +UTL_FILE.FGETATTR +UTL_FILE.FGETPOS +UTL_FILE.FOPEN +UTL_FILE.FOPEN_NCHAR +UTL_FILE.FREMOVE +UTL_FILE.FRENAME +UTL_FILE.FSEEK +UTL_FILE.GET_LINE +UTL_FILE.GET_LINE_NCHAR +UTL_FILE.GET_RAW +UTL_FILE.IS_OPEN +UTL_FILE.NEW_LINE +UTL_FILE.PUT +UTL_FILE.PUTF +UTL_FILE.PUTF_NCHAR +UTL_FILE.PUT_LINE +UTL_FILE.PUT_LINE_NCHAR +UTL_FILE.PUT_NCHAR +UTL_FILE.PUT_RAW +UTL_GDK. +UTL_GDK.CHARSET_MAP +UTL_GDK.LANGUAGE_MAP +UTL_GDK.TERRITORY_MAP +UTL_HTTP. +UTL_HTTP.ADD_COOKIES +UTL_HTTP.BEGIN_REQUEST +UTL_HTTP.CLEAR_COOKIES +UTL_HTTP.CLOSE_PERSISTENT_CONN +UTL_HTTP.CLOSE_PERSISTENT_CONNS +UTL_HTTP.CREATE_REQUEST_CONTEXT +UTL_HTTP.DESTROY_REQUEST_CONTEXT +UTL_HTTP.END_REQUEST +UTL_HTTP.END_RESPONSE +UTL_HTTP.GET_AUTHENTICATION +UTL_HTTP.GET_BODY_CHARSET +UTL_HTTP.GET_COOKIES +UTL_HTTP.GET_COOKIE_COUNT +UTL_HTTP.GET_COOKIE_SUPPORT +UTL_HTTP.GET_DETAILED_EXCP_SUPPORT +UTL_HTTP.GET_DETAILED_SQLCODE +UTL_HTTP.GET_DETAILED_SQLERRM +UTL_HTTP.GET_FOLLOW_REDIRECT +UTL_HTTP.GET_HEADER +UTL_HTTP.GET_HEADER_BY_NAME +UTL_HTTP.GET_HEADER_COUNT +UTL_HTTP.GET_PERSISTENT_CONNS +UTL_HTTP.GET_PERSISTENT_CONN_COUNT +UTL_HTTP.GET_PERSISTENT_CONN_SUPPORT +UTL_HTTP.GET_PROXY +UTL_HTTP.GET_RESPONSE +UTL_HTTP.GET_RESPONSE_ERROR_CHECK +UTL_HTTP.GET_TRANSFER_TIMEOUT +UTL_HTTP.READ_LINE +UTL_HTTP.READ_RAW +UTL_HTTP.READ_TEXT +UTL_HTTP.REQUEST +UTL_HTTP.REQUEST_PIECES +UTL_HTTP.SET_AUTHENTICATION +UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET +UTL_HTTP.SET_BODY_CHARSET +UTL_HTTP.SET_COOKIE_SUPPORT +UTL_HTTP.SET_DETAILED_EXCP_SUPPORT +UTL_HTTP.SET_FOLLOW_REDIRECT +UTL_HTTP.SET_HEADER +UTL_HTTP.SET_PERSISTENT_CONN_SUPPORT +UTL_HTTP.SET_PROPERTY +UTL_HTTP.SET_PROXY +UTL_HTTP.SET_RESPONSE_ERROR_CHECK +UTL_HTTP.SET_TRANSFER_TIMEOUT +UTL_HTTP.SET_WALLET +UTL_HTTP.WRITE_LINE +UTL_HTTP.WRITE_RAW +UTL_HTTP.WRITE_TEXT +UTL_I18N. +UTL_I18N.ENCODE_SQL_XML +UTL_I18N.ESCAPE_REFERENCE +UTL_I18N.GET_COMMON_TIME_ZONES +UTL_I18N.GET_DEFAULT_CHARSET +UTL_I18N.GET_DEFAULT_ISO_CURRENCY +UTL_I18N.GET_DEFAULT_LINGUISTIC_SORT +UTL_I18N.GET_LOCAL_LANGUAGES +UTL_I18N.GET_LOCAL_LINGUISTIC_SORTS +UTL_I18N.GET_LOCAL_TERRITORIES +UTL_I18N.GET_LOCAL_TIME_ZONES +UTL_I18N.GET_TRANSLATION +UTL_I18N.MAP_CHARSET +UTL_I18N.MAP_FROM_SHORT_LANGUAGE +UTL_I18N.MAP_LANGUAGE_FROM_ISO +UTL_I18N.MAP_LOCALE_TO_ISO +UTL_I18N.MAP_TERRITORY_FROM_ISO +UTL_I18N.MAP_TO_SHORT_LANGUAGE +UTL_I18N.RAW_TO_CHAR +UTL_I18N.RAW_TO_NCHAR +UTL_I18N.STRING_TO_RAW +UTL_I18N.TRANSLITERATE +UTL_I18N.UNESCAPE_REFERENCE +UTL_I18N.VALIDATE_SQLNAME +UTL_IDENT. +UTL_INADDR. +UTL_INADDR.GET_HOST_ADDRESS +UTL_INADDR.GET_HOST_NAME +UTL_LMS. +UTL_LMS.FORMAT_MESSAGE +UTL_LMS.GET_MESSAGE +UTL_MATCH. +UTL_MATCH.EDIT_DISTANCE +UTL_MATCH.EDIT_DISTANCE_SIMILARITY +UTL_MATCH.JARO_WINKLER +UTL_MATCH.JARO_WINKLER_SIMILARITY +UTL_NLA. +UTL_NLA.BLAS_ASUM +UTL_NLA.BLAS_AXPY +UTL_NLA.BLAS_COPY +UTL_NLA.BLAS_DOT +UTL_NLA.BLAS_GBMV +UTL_NLA.BLAS_GEMM +UTL_NLA.BLAS_GEMV +UTL_NLA.BLAS_GER +UTL_NLA.BLAS_IAMAX +UTL_NLA.BLAS_NRM2 +UTL_NLA.BLAS_ROT +UTL_NLA.BLAS_ROTG +UTL_NLA.BLAS_SBMV +UTL_NLA.BLAS_SCAL +UTL_NLA.BLAS_SPMV +UTL_NLA.BLAS_SPR +UTL_NLA.BLAS_SPR2 +UTL_NLA.BLAS_SWAP +UTL_NLA.BLAS_SYMM +UTL_NLA.BLAS_SYMV +UTL_NLA.BLAS_SYR +UTL_NLA.BLAS_SYR2 +UTL_NLA.BLAS_SYR2K +UTL_NLA.BLAS_SYRK +UTL_NLA.BLAS_TBMV +UTL_NLA.BLAS_TBSV +UTL_NLA.BLAS_TPMV +UTL_NLA.BLAS_TPSV +UTL_NLA.BLAS_TRMM +UTL_NLA.BLAS_TRMV +UTL_NLA.BLAS_TRSM +UTL_NLA.BLAS_TRSV +UTL_NLA.LAPACK_GBSV +UTL_NLA.LAPACK_GEES +UTL_NLA.LAPACK_GEEV +UTL_NLA.LAPACK_GELS +UTL_NLA.LAPACK_GESDD +UTL_NLA.LAPACK_GESV +UTL_NLA.LAPACK_GESVD +UTL_NLA.LAPACK_GTSV +UTL_NLA.LAPACK_PBSV +UTL_NLA.LAPACK_POSV +UTL_NLA.LAPACK_PPSV +UTL_NLA.LAPACK_PTSV +UTL_NLA.LAPACK_SBEV +UTL_NLA.LAPACK_SBEVD +UTL_NLA.LAPACK_SPEV +UTL_NLA.LAPACK_SPEVD +UTL_NLA.LAPACK_SPSV +UTL_NLA.LAPACK_STEV +UTL_NLA.LAPACK_STEVD +UTL_NLA.LAPACK_SYEV +UTL_NLA.LAPACK_SYEVD +UTL_NLA.LAPACK_SYSV +UTL_NLA.UNIT_TEST_BLAS +UTL_NLA.UNIT_TEST_LAPACK +UTL_RAW. +UTL_RAW.BIT_AND +UTL_RAW.BIT_COMPLEMENT +UTL_RAW.BIT_OR +UTL_RAW.BIT_XOR +UTL_RAW.CAST_FROM_BINARY_DOUBLE +UTL_RAW.CAST_FROM_BINARY_FLOAT +UTL_RAW.CAST_FROM_BINARY_INTEGER +UTL_RAW.CAST_FROM_NUMBER +UTL_RAW.CAST_TO_BINARY_DOUBLE +UTL_RAW.CAST_TO_BINARY_FLOAT +UTL_RAW.CAST_TO_BINARY_INTEGER +UTL_RAW.CAST_TO_NUMBER +UTL_RAW.CAST_TO_NVARCHAR2 +UTL_RAW.CAST_TO_RAW +UTL_RAW.CAST_TO_VARCHAR2 +UTL_RAW.COMPARE +UTL_RAW.CONCAT +UTL_RAW.CONVERT +UTL_RAW.COPIES +UTL_RAW.LENGTH +UTL_RAW.OVERLAY +UTL_RAW.REVERSE +UTL_RAW.SUBSTR +UTL_RAW.TRANSLATE +UTL_RAW.TRANSLITERATE +UTL_RAW.XRANGE +UTL_RECOMP. +UTL_RECOMP.PARALLEL_SLAVE +UTL_RECOMP.RECOMP_PARALLEL +UTL_RECOMP.RECOMP_SERIAL +UTL_REF. +UTL_REF.DELETE_OBJECT +UTL_REF.LOCK_OBJECT +UTL_REF.SELECT_OBJECT +UTL_REF.SELECT_OBJECT_WITH_CR +UTL_REF.UPDATE_OBJECT +UTL_SMTP. +UTL_SMTP.AUTH +UTL_SMTP.CLOSE_CONNECTION +UTL_SMTP.CLOSE_DATA +UTL_SMTP.COMMAND +UTL_SMTP.COMMAND_REPLIES +UTL_SMTP.DATA +UTL_SMTP.EHLO +UTL_SMTP.HELO +UTL_SMTP.HELP +UTL_SMTP.MAIL +UTL_SMTP.NOOP +UTL_SMTP.OPEN_CONNECTION +UTL_SMTP.OPEN_DATA +UTL_SMTP.QUIT +UTL_SMTP.RCPT +UTL_SMTP.RSET +UTL_SMTP.STARTTLS +UTL_SMTP.VRFY +UTL_SMTP.WRITE_DATA +UTL_SMTP.WRITE_RAW_DATA +UTL_SYS_COMPRESS. +UTL_SYS_COMPRESS.ISOPEN +UTL_SYS_COMPRESS.LZ_COMPRESS +UTL_SYS_COMPRESS.LZ_COMPRESS_ADD +UTL_SYS_COMPRESS.LZ_COMPRESS_BFILE +UTL_SYS_COMPRESS.LZ_COMPRESS_BLOB +UTL_SYS_COMPRESS.LZ_COMPRESS_CLOSE +UTL_SYS_COMPRESS.LZ_COMPRESS_OPEN +UTL_SYS_COMPRESS.LZ_UNCOMPRESS +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_BFILE +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_BLOB +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_CLOSE +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_EXTRACT +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_OPEN +UTL_TCP. +UTL_TCP.AVAILABLE +UTL_TCP.CLOSE_ALL_CONNECTIONS +UTL_TCP.CLOSE_CONNECTION +UTL_TCP.FLUSH +UTL_TCP.GET_LINE +UTL_TCP.GET_LINE_NCHAR +UTL_TCP.GET_RAW +UTL_TCP.GET_TEXT +UTL_TCP.GET_TEXT_NCHAR +UTL_TCP.OPEN_CONNECTION +UTL_TCP.READ_LINE +UTL_TCP.READ_RAW +UTL_TCP.READ_TEXT +UTL_TCP.SECURE_CONNECTION +UTL_TCP.WRITE_LINE +UTL_TCP.WRITE_RAW +UTL_TCP.WRITE_TEXT +UTL_URL. +UTL_URL.ESCAPE +UTL_URL.UNESCAPE +UTL_XML. +UTL_XML.COMPARE +UTL_XML.GETFDO +UTL_XML.GETHASHCODE +UTL_XML.GETNEXTTYPEID +UTL_XML.HASTSTZ +UTL_XML.ISNAMEOMF +UTL_XML.LONG2CLOB +UTL_XML.PARSEEXPR +UTL_XML.PARSEQUERY +UTL_XML.TYPEHASHCODEEQ +UTL_XML.WINDOWS32 +UTL_XML.XMLCLEAN +UTL_XML.XMLINIT +UTL_XML.XMLPARSE +UTL_XML.XMLSETPARSEFLAG +UTL_XML.XMLTERM +UTL_XML.XSLLOADFROMFILE +UTL_XML.XSLRESETPARAMS +UTL_XML.XSLSETPARAM +UTL_XML.XSLSETSTYLESHEET +UTL_XML.XSLTRANSFORM +UTL_XML.XSLTRANSFORMCTOX +UTL_XML.XSLTRANSFORMXTOC +UTL_XML.XSLTRANSFORMXTOX +V$ACCESS +V$ACTIVE_INSTANCES +V$ACTIVE_SERVICES +V$ACTIVE_SESSION_HISTORY +V$ACTIVE_SESS_POOL_MTH +V$ADVISOR_CURRENT_SQLPLAN +V$ADVISOR_PROGRESS +V$ALERT_TYPES +V$AQ +V$AQ1 +V$ARCHIVE +V$ARCHIVED_LOG +V$ARCHIVE_DEST +V$ARCHIVE_DEST_STATUS +V$ARCHIVE_GAP +V$ARCHIVE_PROCESSES +V$ASH_INFO +V$ASM_ACFSSNAPSHOTS +V$ASM_ACFSVOLUMES +V$ASM_ACFS_ENCRYPTION_INFO +V$ASM_ACFS_SECURITY_INFO +V$ASM_ALIAS +V$ASM_ATTRIBUTE +V$ASM_CLIENT +V$ASM_DISK +V$ASM_DISKGROUP +V$ASM_DISKGROUP_STAT +V$ASM_DISK_IOSTAT +V$ASM_DISK_STAT +V$ASM_FILE +V$ASM_FILESYSTEM +V$ASM_OPERATION +V$ASM_TEMPLATE +V$ASM_USER +V$ASM_USERGROUP +V$ASM_USERGROUP_MEMBER +V$ASM_VOLUME +V$ASM_VOLUME_STAT +V$AW_AGGREGATE_OP +V$AW_ALLOCATE_OP +V$AW_CALC +V$AW_LONGOPS +V$AW_OLAP +V$AW_SESSION_INFO +V$BACKUP +V$BACKUP_ARCHIVELOG_DETAILS +V$BACKUP_ARCHIVELOG_SUMMARY +V$BACKUP_ASYNC_IO +V$BACKUP_CONTROLFILE_DETAILS +V$BACKUP_CONTROLFILE_SUMMARY +V$BACKUP_COPY_DETAILS +V$BACKUP_COPY_SUMMARY +V$BACKUP_CORRUPTION +V$BACKUP_DATAFILE +V$BACKUP_DATAFILE_DETAILS +V$BACKUP_DATAFILE_SUMMARY +V$BACKUP_DEVICE +V$BACKUP_FILES +V$BACKUP_PIECE +V$BACKUP_PIECE_DETAILS +V$BACKUP_REDOLOG +V$BACKUP_SET +V$BACKUP_SET_DETAILS +V$BACKUP_SET_SUMMARY +V$BACKUP_SPFILE +V$BACKUP_SPFILE_DETAILS +V$BACKUP_SPFILE_SUMMARY +V$BACKUP_SYNC_IO +V$BGPROCESS +V$BH +V$BLOCKING_QUIESCE +V$BLOCK_CHANGE_TRACKING +V$BSP +V$BUFFERED_PUBLISHERS +V$BUFFERED_QUEUES +V$BUFFERED_SUBSCRIBERS +V$BUFFER_POOL +V$BUFFER_POOL_STATISTICS +V$CALLTAG +V$CELL +V$CELL_CONFIG +V$CELL_REQUEST_TOTALS +V$CELL_STATE +V$CELL_THREAD_HISTORY +V$CIRCUIT +V$CLASS_CACHE_TRANSFER +V$CLASS_PING +V$CLIENT_STATS +V$CLUSTER_INTERCONNECTS +V$CONFIGURED_INTERCONNECTS +V$CONTEXT +V$CONTROLFILE +V$CONTROLFILE_RECORD_SECTION +V$COPY_CORRUPTION +V$CORRUPT_XID_LIST +V$CPOOL_CC_INFO +V$CPOOL_CC_STATS +V$CPOOL_CONN_INFO +V$CPOOL_STATS +V$CR_BLOCK_SERVER +V$CURRENT_BLOCK_SERVER +V$DATABASE +V$DATABASE_BLOCK_CORRUPTION +V$DATABASE_INCARNATION +V$DATABASE_KEY_INFO +V$DATAFILE +V$DATAFILE_COPY +V$DATAFILE_HEADER +V$DATAGUARD_CONFIG +V$DATAGUARD_STATS +V$DATAGUARD_STATUS +V$DATAPUMP_JOB +V$DATAPUMP_SESSION +V$DBFILE +V$DBLINK +V$DB_CACHE_ADVICE +V$DB_OBJECT_CACHE +V$DB_PIPES +V$DB_TRANSPORTABLE_PLATFORM +V$DELETED_OBJECT +V$DETACHED_SESSION +V$DIAG_ADR_CONTROL +V$DIAG_ADR_INVALIDATION +V$DIAG_ALERT_EXT +V$DIAG_AMS_XACTION +V$DIAG_CRITICAL_ERROR +V$DIAG_DDE_USER_ACTION +V$DIAG_DDE_USER_ACTION_DEF +V$DIAG_DDE_USR_ACT_PARAM +V$DIAG_DDE_USR_ACT_PARAM_DEF +V$DIAG_DDE_USR_INC_ACT_MAP +V$DIAG_DDE_USR_INC_TYPE +V$DIAG_DFW_CONFIG_CAPTURE +V$DIAG_DFW_CONFIG_ITEM +V$DIAG_DIAGV_INCIDENT +V$DIAG_DIR_EXT +V$DIAG_EM_DIAG_JOB +V$DIAG_EM_TARGET_INFO +V$DIAG_EM_USER_ACTIVITY +V$DIAG_HM_FDG_SET +V$DIAG_HM_FINDING +V$DIAG_HM_INFO +V$DIAG_HM_MESSAGE +V$DIAG_HM_RECOMMENDATION +V$DIAG_HM_RUN +V$DIAG_INCCKEY +V$DIAG_INCIDENT +V$DIAG_INCIDENT_FILE +V$DIAG_INC_METER_CONFIG +V$DIAG_INC_METER_IMPT_DEF +V$DIAG_INC_METER_INFO +V$DIAG_INC_METER_PK_IMPTS +V$DIAG_INC_METER_SUMMARY +V$DIAG_INFO +V$DIAG_IPS_CONFIGURATION +V$DIAG_IPS_FILE_COPY_LOG +V$DIAG_IPS_FILE_METADATA +V$DIAG_IPS_PACKAGE +V$DIAG_IPS_PACKAGE_FILE +V$DIAG_IPS_PACKAGE_HISTORY +V$DIAG_IPS_PACKAGE_INCIDENT +V$DIAG_IPS_PKG_UNPACK_HIST +V$DIAG_IPS_PROGRESS_LOG +V$DIAG_IPS_REMOTE_PACKAGE +V$DIAG_PICKLEERR +V$DIAG_PROBLEM +V$DIAG_RELMD_EXT +V$DIAG_SWEEPERR +V$DIAG_VEM_USER_ACTLOG +V$DIAG_VEM_USER_ACTLOG1 +V$DIAG_VHM_RUN +V$DIAG_VIEW +V$DIAG_VIEWCOL +V$DIAG_VINCIDENT +V$DIAG_VINCIDENT_FILE +V$DIAG_VINC_METER_INFO +V$DIAG_VIPS_FILE_COPY_LOG +V$DIAG_VIPS_FILE_METADATA +V$DIAG_VIPS_PACKAGE_FILE +V$DIAG_VIPS_PACKAGE_HISTORY +V$DIAG_VIPS_PACKAGE_MAIN_INT +V$DIAG_VIPS_PACKAGE_SIZE +V$DIAG_VIPS_PKG_FILE +V$DIAG_VIPS_PKG_INC_CAND +V$DIAG_VIPS_PKG_INC_DTL +V$DIAG_VIPS_PKG_INC_DTL1 +V$DIAG_VIPS_PKG_MAIN_PROBLEM +V$DIAG_VNOT_EXIST_INCIDENT +V$DIAG_VPROBLEM +V$DIAG_VPROBLEM1 +V$DIAG_VPROBLEM2 +V$DIAG_VPROBLEM_BUCKET +V$DIAG_VPROBLEM_BUCKET1 +V$DIAG_VPROBLEM_BUCKET_COUNT +V$DIAG_VPROBLEM_INT +V$DIAG_VPROBLEM_LASTINC +V$DIAG_VSHOWCATVIEW +V$DIAG_VSHOWINCB +V$DIAG_VSHOWINCB_I +V$DIAG_VTEST_EXISTS +V$DIAG_V_ACTINC +V$DIAG_V_ACTPROB +V$DIAG_V_INCCOUNT +V$DIAG_V_INCFCOUNT +V$DIAG_V_INC_METER_INFO_PROB +V$DIAG_V_IPSPRBCNT +V$DIAG_V_IPSPRBCNT1 +V$DIAG_V_NFCINC +V$DIAG_V_SWPERRCOUNT +V$DISPATCHER +V$DISPATCHER_CONFIG +V$DISPATCHER_RATE +V$DLM_ALL_LOCKS +V$DLM_CONVERT_LOCAL +V$DLM_CONVERT_REMOTE +V$DLM_LATCH +V$DLM_LOCKS +V$DLM_MISC +V$DLM_RESS +V$DLM_TRAFFIC_CONTROLLER +V$DNFS_CHANNELS +V$DNFS_FILES +V$DNFS_SERVERS +V$DNFS_STATS +V$DYNAMIC_REMASTER_STATS +V$EMON +V$ENABLEDPRIVS +V$ENCRYPTED_TABLESPACES +V$ENCRYPTION_WALLET +V$ENQUEUE_LOCK +V$ENQUEUE_STAT +V$ENQUEUE_STATISTICS +V$EVENTMETRIC +V$EVENT_HISTOGRAM +V$EVENT_NAME +V$EXECUTION +V$FAST_START_SERVERS +V$FAST_START_TRANSACTIONS +V$FILEMETRIC +V$FILEMETRIC_HISTORY +V$FILESPACE_USAGE +V$FILESTAT +V$FILE_CACHE_TRANSFER +V$FILE_HISTOGRAM +V$FILE_OPTIMIZED_HISTOGRAM +V$FILE_PING +V$FIXED_TABLE +V$FIXED_VIEW_DEFINITION +V$FLASHBACK_DATABASE_LOG +V$FLASHBACK_DATABASE_LOGFILE +V$FLASHBACK_DATABASE_STAT +V$FLASHBACK_TXN_GRAPH +V$FLASHBACK_TXN_MODS +V$FLASH_RECOVERY_AREA_USAGE +V$FOREIGN_ARCHIVED_LOG +V$FS_FAILOVER_HISTOGRAM +V$FS_FAILOVER_STATS +V$GCSHVMASTER_INFO +V$GCSPFMASTER_INFO +V$GC_ELEMENT +V$GC_ELEMENTS_WITH_COLLISIONS +V$GES_BLOCKING_ENQUEUE +V$GES_ENQUEUE +V$GLOBALCONTEXT +V$GLOBAL_BLOCKED_LOCKS +V$GLOBAL_TRANSACTION +V$GOLDENGATE_CAPTURE +V$GOLDENGATE_MESSAGE_TRACKING +V$GOLDENGATE_TRANSACTION +V$HANG_INFO +V$HANG_SESSION_INFO +V$HM_CHECK +V$HM_CHECK_PARAM +V$HM_FINDING +V$HM_INFO +V$HM_RECOMMENDATION +V$HM_RUN +V$HS_AGENT +V$HS_PARAMETER +V$HS_SESSION +V$HVMASTER_INFO +V$INCMETER_CONFIG +V$INCMETER_INFO +V$INCMETER_SUMMARY +V$INDEXED_FIXED_COLUMN +V$INSTANCE +V$INSTANCE_CACHE_TRANSFER +V$INSTANCE_LOG_GROUP +V$INSTANCE_RECOVERY +V$IOFUNCMETRIC +V$IOFUNCMETRIC_HISTORY +V$IOSTAT_CONSUMER_GROUP +V$IOSTAT_FILE +V$IOSTAT_FUNCTION +V$IOSTAT_FUNCTION_DETAIL +V$IOSTAT_NETWORK +V$IO_CALIBRATION_STATUS +V$IR_FAILURE +V$IR_FAILURE_SET +V$IR_MANUAL_CHECKLIST +V$IR_REPAIR +V$JAVAPOOL +V$JAVA_LIBRARY_CACHE_MEMORY +V$JAVA_POOL_ADVICE +V$LATCH +V$LATCHHOLDER +V$LATCHNAME +V$LATCH_CHILDREN +V$LATCH_MISSES +V$LATCH_PARENT +V$LIBCACHE_LOCKS +V$LIBRARYCACHE +V$LIBRARY_CACHE_MEMORY +V$LICENSE +V$LISTENER_NETWORK +V$LOADISTAT +V$LOADPSTAT +V$LOBSTAT +V$LOCK +V$LOCKED_OBJECT +V$LOCKS_WITH_COLLISIONS +V$LOCK_ACTIVITY +V$LOCK_ELEMENT +V$LOCK_TYPE +V$LOG +V$LOGFILE +V$LOGHIST +V$LOGMNR_CALLBACK +V$LOGMNR_CONTENTS +V$LOGMNR_DICTIONARY +V$LOGMNR_DICTIONARY_LOAD +V$LOGMNR_LATCH +V$LOGMNR_LOGFILE +V$LOGMNR_LOGS +V$LOGMNR_PARAMETERS +V$LOGMNR_PROCESS +V$LOGMNR_REGION +V$LOGMNR_SESSION +V$LOGMNR_STATS +V$LOGMNR_TRANSACTION +V$LOGSTDBY +V$LOGSTDBY_PROCESS +V$LOGSTDBY_PROGRESS +V$LOGSTDBY_STATE +V$LOGSTDBY_STATS +V$LOGSTDBY_TRANSACTION +V$LOG_HISTORY +V$MANAGED_STANDBY +V$MAP_COMP_LIST +V$MAP_ELEMENT +V$MAP_EXT_ELEMENT +V$MAP_FILE +V$MAP_FILE_EXTENT +V$MAP_FILE_IO_STACK +V$MAP_LIBRARY +V$MAP_SUBELEMENT +V$MAX_ACTIVE_SESS_TARGET_MTH +V$MEMORY_CURRENT_RESIZE_OPS +V$MEMORY_DYNAMIC_COMPONENTS +V$MEMORY_RESIZE_OPS +V$MEMORY_TARGET_ADVICE +V$METRIC +V$METRICGROUP +V$METRICNAME +V$METRIC_HISTORY +V$MTTR_TARGET_ADVICE +V$MUTEX_SLEEP +V$MUTEX_SLEEP_HISTORY +V$MVREFRESH +V$MYSTAT +V$NFS_CLIENTS +V$NFS_LOCKS +V$NFS_OPEN_FILES +V$NLS_PARAMETERS +V$NLS_VALID_VALUES +V$OBJECT_DEPENDENCY +V$OBJECT_DML_FREQUENCIES +V$OBJECT_PRIVILEGE +V$OBSOLETE_PARAMETER +V$OFFLINE_RANGE +V$OPEN_CURSOR +V$OPTION +V$OSSTAT +V$PARALLEL_DEGREE_LIMIT_MTH +V$PARAMETER +V$PARAMETER2 +V$PARAMETER_VALID_VALUES +V$PERSISTENT_PUBLISHERS +V$PERSISTENT_QMN_CACHE +V$PERSISTENT_QUEUES +V$PERSISTENT_SUBSCRIBERS +V$PGASTAT +V$PGA_TARGET_ADVICE +V$PGA_TARGET_ADVICE_HISTOGRAM +V$POLICY_HISTORY +V$PQ_SESSTAT +V$PQ_SLAVE +V$PQ_SYSSTAT +V$PQ_TQSTAT +V$PROCESS +V$PROCESS_GROUP +V$PROCESS_MEMORY +V$PROCESS_MEMORY_DETAIL +V$PROCESS_MEMORY_DETAIL_PROG +V$PROPAGATION_RECEIVER +V$PROPAGATION_SENDER +V$PROXY_ARCHIVEDLOG +V$PROXY_ARCHIVELOG_DETAILS +V$PROXY_ARCHIVELOG_SUMMARY +V$PROXY_COPY_DETAILS +V$PROXY_COPY_SUMMARY +V$PROXY_DATAFILE +V$PWFILE_USERS +V$PX_BUFFER_ADVICE +V$PX_INSTANCE_GROUP +V$PX_PROCESS +V$PX_PROCESS_SYSSTAT +V$PX_SESSION +V$PX_SESSTAT +V$QMON_COORDINATOR_STATS +V$QMON_SERVER_STATS +V$QMON_TASKS +V$QMON_TASK_STATS +V$QUEUE +V$QUEUEING_MTH +V$RECOVERY_AREA_USAGE +V$RECOVERY_FILE_DEST +V$RECOVERY_FILE_STATUS +V$RECOVERY_LOG +V$RECOVERY_PROGRESS +V$RECOVERY_STATUS +V$RECOVER_FILE +V$REDO_DEST_RESP_HISTOGRAM +V$REPLPROP +V$REPLQUEUE +V$REQDIST +V$RESERVED_WORDS +V$RESOURCE +V$RESOURCE_LIMIT +V$RESTORE_POINT +V$RESULT_CACHE_DEPENDENCY +V$RESULT_CACHE_MEMORY +V$RESULT_CACHE_OBJECTS +V$RESULT_CACHE_STATISTICS +V$RESUMABLE +V$RFS_THREAD +V$RMAN_BACKUP_JOB_DETAILS +V$RMAN_BACKUP_SUBJOB_DETAILS +V$RMAN_BACKUP_TYPE +V$RMAN_COMPRESSION_ALGORITHM +V$RMAN_CONFIGURATION +V$RMAN_ENCRYPTION_ALGORITHMS +V$RMAN_OUTPUT +V$RMAN_STATUS +V$ROLLNAME +V$ROLLSTAT +V$ROWCACHE +V$ROWCACHE_PARENT +V$ROWCACHE_SUBORDINATE +V$RSRCMGRMETRIC +V$RSRCMGRMETRIC_HISTORY +V$RSRC_CONSUMER_GROUP +V$RSRC_CONSUMER_GROUP_CPU_MTH +V$RSRC_CONS_GROUP_HISTORY +V$RSRC_PLAN +V$RSRC_PLAN_CPU_MTH +V$RSRC_PLAN_HISTORY +V$RSRC_SESSION_INFO +V$RULE +V$RULE_SET +V$RULE_SET_AGGREGATE_STATS +V$SCHEDULER_RUNNING_JOBS +V$SECUREFILE_TIMER +V$SEGMENT_STATISTICS +V$SEGSPACE_USAGE +V$SEGSTAT +V$SEGSTAT_NAME +V$SERVICEMETRIC +V$SERVICEMETRIC_HISTORY +V$SERVICES +V$SERVICE_EVENT +V$SERVICE_STATS +V$SERVICE_WAIT_CLASS +V$SERV_MOD_ACT_STATS +V$SESSION +V$SESSION_BLOCKERS +V$SESSION_CONNECT_INFO +V$SESSION_CURSOR_CACHE +V$SESSION_EVENT +V$SESSION_FIX_CONTROL +V$SESSION_LONGOPS +V$SESSION_OBJECT_CACHE +V$SESSION_WAIT +V$SESSION_WAIT_CLASS +V$SESSION_WAIT_HISTORY +V$SESSMETRIC +V$SESSTAT +V$SESS_IO +V$SESS_TIME_MODEL +V$SES_OPTIMIZER_ENV +V$SGA +V$SGAINFO +V$SGASTAT +V$SGA_CURRENT_RESIZE_OPS +V$SGA_DYNAMIC_COMPONENTS +V$SGA_DYNAMIC_FREE_MEMORY +V$SGA_RESIZE_OPS +V$SGA_TARGET_ADVICE +V$SHARED_POOL_ADVICE +V$SHARED_POOL_RESERVED +V$SHARED_SERVER +V$SHARED_SERVER_MONITOR +V$SORT_SEGMENT +V$SORT_USAGE +V$SPPARAMETER +V$SQL +V$SQLAREA +V$SQLAREA_PLAN_HASH +V$SQLCOMMAND +V$SQLFN_ARG_METADATA +V$SQLFN_METADATA +V$SQLPA_METRIC +V$SQLSTATS +V$SQLSTATS_PLAN_HASH +V$SQLTEXT +V$SQLTEXT_WITH_NEWLINES +V$SQL_BIND_CAPTURE +V$SQL_BIND_DATA +V$SQL_BIND_METADATA +V$SQL_CS_HISTOGRAM +V$SQL_CS_SELECTIVITY +V$SQL_CS_STATISTICS +V$SQL_CURSOR +V$SQL_FEATURE +V$SQL_FEATURE_DEPENDENCY +V$SQL_FEATURE_HIERARCHY +V$SQL_HINT +V$SQL_JOIN_FILTER +V$SQL_MONITOR +V$SQL_OPTIMIZER_ENV +V$SQL_PLAN +V$SQL_PLAN_MONITOR +V$SQL_PLAN_STATISTICS +V$SQL_PLAN_STATISTICS_ALL +V$SQL_REDIRECTION +V$SQL_SHARED_CURSOR +V$SQL_SHARED_MEMORY +V$SQL_WORKAREA +V$SQL_WORKAREA_ACTIVE +V$SQL_WORKAREA_HISTOGRAM +V$SSCR_SESSIONS +V$STANDBY_EVENT_HISTOGRAM +V$STANDBY_LOG +V$STATISTICS_LEVEL +V$STATNAME +V$STREAMS_APPLY_COORDINATOR +V$STREAMS_APPLY_READER +V$STREAMS_APPLY_SERVER +V$STREAMS_CAPTURE +V$STREAMS_MESSAGE_TRACKING +V$STREAMS_POOL_ADVICE +V$STREAMS_POOL_STATISTICS +V$STREAMS_TRANSACTION +V$SUBCACHE +V$SUBSCR_REGISTRATION_STATS +V$SYSAUX_OCCUPANTS +V$SYSMETRIC +V$SYSMETRIC_HISTORY +V$SYSMETRIC_SUMMARY +V$SYSSTAT +V$SYSTEM_CURSOR_CACHE +V$SYSTEM_EVENT +V$SYSTEM_FIX_CONTROL +V$SYSTEM_PARAMETER +V$SYSTEM_PARAMETER2 +V$SYSTEM_WAIT_CLASS +V$SYS_OPTIMIZER_ENV +V$SYS_TIME_MODEL +V$TABLESPACE +V$TEMPFILE +V$TEMPORARY_LOBS +V$TEMPSEG_USAGE +V$TEMPSTAT +V$TEMP_CACHE_TRANSFER +V$TEMP_EXTENT_MAP +V$TEMP_EXTENT_POOL +V$TEMP_PING +V$TEMP_SPACE_HEADER +V$THREAD +V$THRESHOLD_TYPES +V$TIMER +V$TIMEZONE_FILE +V$TIMEZONE_NAMES +V$TOPLEVELCALL +V$TRANSACTION +V$TRANSACTION_ENQUEUE +V$TRANSPORTABLE_PLATFORM +V$TSM_SESSIONS +V$TYPE_SIZE +V$UNDOSTAT +V$UNUSABLE_BACKUPFILE_DETAILS +V$VERSION +V$VPD_POLICY +V$WAITCLASSMETRIC +V$WAITCLASSMETRIC_HISTORY +V$WAITSTAT +V$WAIT_CHAINS +V$WALLET +V$WLM_PCMETRIC +V$WLM_PCMETRIC_HISTORY +V$WLM_PC_STATS +V$WORKLOAD_REPLAY_THREAD +V$XML_AUDIT_TRAIL +V$XSTREAM_CAPTURE +V$XSTREAM_MESSAGE_TRACKING +V$XSTREAM_OUTBOUND_SERVER +V$XSTREAM_TRANSACTION +V$_LOCK +V02C. +V12C. +V22C. +V32C. +V80_FMT_IMAGE +VAL1 +VAL2 +VALID +VALIDATED +VALIDATE_APEX. +VALIDATE_CONTEXT. +VALIDATE_EXF. +VALIDATE_ORDIM. +VALIDATE_OWM. +VALIDATE_RUL. +VALIDATE_SDO. +VALID_NOW +VALID_ROLE +VALID_TYPE +VALUE +VALUE_ANYDATA +VALUE_BLK +VALUE_BLK_STATE +VALUE_STRING +VALUE_TYPE +VAL_LENGTH +VARCHAR2_VALUE +VARIABLE_METHOD_FUNCTION +VARIABLE_METHOD_FUNCTION_CALLS +VARIABLE_NAME +VARIABLE_TYPE +VARIABLE_VALUE_FUNCTION +VARIABLE_VALUE_FUNCTION_CALLS +VARRAY2STR. +VECTOR_READ +VECTOR_READ_TRACE +VENDOR_NAME +VERIFIER +VERIFY +VERSION +VERSION# +VERSION. +VERSION_COUNT +VERSION_NAME +VERSION_NUM +VERSION_NUMBER +VERSION_OUTLINE +VERSION_TEXT +VERSION_TIME +VICTIM_INSTANCE +VICTIM_OSPID +VICTIM_SERIAL# +VICTIM_SESSION_ID +VIEWFRAME3D775_TAB$XD. +VIEWPOINT3D762_TAB$XD. +VIEW_COLUMN_ID +VIEW_COLUMN_NAME +VIEW_DEFINITION +VIEW_NAME +VIEW_RELATED +VIEW_TYPE +VIEW_TYPE_OWNER +VIRTUAL_COLUMN +VIS3DCONFIG772_TAB$XD. +VISIBILITY +VOLUME_DEVICE +VOLUME_NAME +VOLUME_NUMBER +VOL_DEVICE +VOL_LABEL +VOTING_FILE +VOTING_FILES +VRN. +V_LBRECSETIMPL_T.ODCITABLECLOSE +V_LBRECSETIMPL_T.ODCITABLEFETCH +V_LBRECSETIMPL_T.ODCITABLEPREPARE +V_LBRECSETIMPL_T.ODCITABLESTART +V_LISTBACKUPPIPE. +WAIT +WAITER +WAITERS_WOKEN +WAITING +WAITING_SESSION +WAITS +WAITSQ_500B +WAITSQ_8K +WAITS_HOLDING_LATCH +WAIT_500B +WAIT_8K +WAIT_CLASS +WAIT_CLASS# +WAIT_CLASS_ID +WAIT_COUNT +WAIT_COUNT_FG +WAIT_EVENT +WAIT_EVENT_TEXT +WAIT_FOR_LOG +WAIT_FOR_SCN +WAIT_ID +WAIT_OBJECT_NAME +WAIT_STATE +WAIT_TIME +WAIT_TIME_MICRO +WAIT_TIME_MILLI +WALLET_PATH +WARNING +WARNING_FACTOR +WARNING_INCIDENTS +WARNING_OPERATOR +WARNING_VALUE +WAS_CAPTURED +WAS_FORCED +WEIGHT +WEIGHT_FACTOR +WHAT +WHEN_CLAUSE +WHERE +WHERE_IN_CODE +WHICH_QUEUE +WHY +WINDOWS_DOMAIN +WINDOW_ACTIVE +WINDOW_DURATION +WINDOW_DURATION_LAST_30_DAYS +WINDOW_DURATION_LAST_7_DAYS +WINDOW_END_TIME +WINDOW_GROUP +WINDOW_GROUP_NAME +WINDOW_NAME +WINDOW_NEXT_TIME +WINDOW_PRIORITY +WINDOW_START_TIME +WITH_GRANT_OPTION. +WITH_ROWID +WM$CONVERTDBVERSION. +WM$DISALLOWQNDML. +WM$GETDBVERSIONSTR. +WM_CONCAT. +WM_CONCAT_IMPL.ODCIAGGREGATEINITIALIZE +WM_CONCAT_IMPL.ODCIAGGREGATEITERATE +WM_CONCAT_IMPL.ODCIAGGREGATEMERGE +WM_CONCAT_IMPL.ODCIAGGREGATETERMINATE +WM_DDL_UTIL. +WM_DDL_UTIL.ADDCOLUMNS +WM_DDL_UTIL.ADDUSERCOLUMNS +WM_DDL_UTIL.ADDVALIDTIMESUPPORT +WM_DDL_UTIL.AVTDDL +WM_DDL_UTIL.BASEVIEW_COMMON +WM_DDL_UTIL.CARRYFORWARDPRIVSQL +WM_DDL_UTIL.CHECKFORERRORSEV +WM_DDL_UTIL.CHECKFORFLANDWORKFLOW +WM_DDL_UTIL.CHECKTABLESTATE +WM_DDL_UTIL.CHECK_MRIC_CASCADE +WM_DDL_UTIL.CHOOSE +WM_DDL_UTIL.CONFVIEW_COMMON +WM_DDL_UTIL.CREATEAUXILIARYTABLE +WM_DDL_UTIL.CREATEBASEVIEW +WM_DDL_UTIL.CREATECONFLICTVIEW +WM_DDL_UTIL.CREATECONSVIEW +WM_DDL_UTIL.CREATEDIFFVIEW +WM_DDL_UTIL.CREATEHISTORYVIEW +WM_DDL_UTIL.CREATELCKTABLE +WM_DDL_UTIL.CREATELOCKVIEW +WM_DDL_UTIL.CREATEMWVIEW +WM_DDL_UTIL.CREATENESTEDTABLEBASEVIEW +WM_DDL_UTIL.CREATENESTEDTABLECONSVIEW +WM_DDL_UTIL.CREATETEMPTOPVIEW +WM_DDL_UTIL.CREATETOPVIEW +WM_DDL_UTIL.CREATEUNIONBASEVIEW +WM_DDL_UTIL.CREATEUNIONBASEVIEW_INTERNAL +WM_DDL_UTIL.CREATEVTTABLE +WM_DDL_UTIL.DELETENONLATESTDATAFROMLIVE +WM_DDL_UTIL.DELETENONLIVEDATA +WM_DDL_UTIL.DIFFVIEW_COMMON +WM_DDL_UTIL.DROPCONFLICTSRELATED +WM_DDL_UTIL.DROPDIFFRELATED +WM_DDL_UTIL.DROPMULTIWORKSPACERELATED +WM_DDL_UTIL.DROPWMCOLUMNS +WM_DDL_UTIL.FIXCONSTRAINTSEV +WM_DDL_UTIL.FIXINDEXEV +WM_DDL_UTIL.FIXPRIVSEV +WM_DDL_UTIL.GETASSOCIATEDINDEX +WM_DDL_UTIL.GETCOLSTREV +WM_DDL_UTIL.GETINDEXCLAUSE +WM_DDL_UTIL.GETINDEXCOLUMNS +WM_DDL_UTIL.GETINDEXSUBCLAUSE +WM_DDL_UTIL.GETNULLCOLUMNSSTR +WM_DDL_UTIL.GRANTADTPRIVS +WM_DDL_UTIL.GRANTWMSYSTABPRIVS +WM_DDL_UTIL.INDEXCREATEDBYCONSTRAINT +WM_DDL_UTIL.IS_RIC_CHILD_OF_ENABLED_TABLE +WM_DDL_UTIL.IS_RIC_PARENT +WM_DDL_UTIL.MODIFYNESTEDCOLUMNSDV +WM_DDL_UTIL.MODIFYNESTEDCOLUMNSEV +WM_DDL_UTIL.MODIFYNESTEDCOLUMNS_DDL +WM_DDL_UTIL.NESTEDTABLE_LTSELECT +WM_DDL_UTIL.REBUILDINDEX +WM_DDL_UTIL.RECREATEORIGINALCONSTRAINTS +WM_DDL_UTIL.RECREATEORIGINALINDICES +WM_DDL_UTIL.RECREATEPTAFTERTRIGS +WM_DDL_UTIL.RENAMECONSTRAINT +WM_DDL_UTIL.RENAMEINDEX +WM_DDL_UTIL.RENAMETABDV +WM_DDL_UTIL.RENAMETABEV +WM_DDL_UTIL.REVOKEWMSYSTABPRIVS +WM_DDL_UTIL.SYNCRONIZEVTVIEWS +WM_ERROR. +WM_ERROR.RAISEERROR +WORKAREA_ADDRESS +WORKAREA_MAX_MEM +WORKAREA_MAX_TEMPSEG +WORKAREA_MEM +WORKAREA_TEMPSEG +WORKERS +WORKING +WORKLOAD_ID +WORKLOAD_NAME +WORK_AREA_SIZE +WORK_HEAP_MEM +WORK_MICROSEC +WORK_REQUEST_CLASS +WPG_DOCLOAD. +WPG_DOCLOAD.DOWNLOAD_FILE +WPG_DOCLOAD.GET_CONTENT_LENGTH +WPG_DOCLOAD.GET_DOWNLOAD_BFILE +WPG_DOCLOAD.GET_DOWNLOAD_BLOB +WPG_DOCLOAD.GET_DOWNLOAD_FILE +WPG_DOCLOAD.IS_FILE_DOWNLOAD +WPIUTL. +WPIUTL.SUBPFPARAM +WPIUTL.SUBPPARAM +WRAPS +WRB +WRB_FORCED_WRITE +WRC_ID +WRI +WRI$_ADV_ABSTRACT_T.SUB_CLEANUP +WRI$_ADV_ABSTRACT_T.SUB_CREATE +WRI$_ADV_ABSTRACT_T.SUB_DELETE +WRI$_ADV_ABSTRACT_T.SUB_DELETE_EXECUTION +WRI$_ADV_ABSTRACT_T.SUB_EXECUTE +WRI$_ADV_ABSTRACT_T.SUB_GET_REC_ATTR +WRI$_ADV_ABSTRACT_T.SUB_GET_REPORT +WRI$_ADV_ABSTRACT_T.SUB_GET_SCRIPT +WRI$_ADV_ABSTRACT_T.SUB_IMPLEMENT +WRI$_ADV_ABSTRACT_T.SUB_IMPORT_DIRECTIVES +WRI$_ADV_ABSTRACT_T.SUB_PARAM_VALIDATE +WRI$_ADV_ABSTRACT_T.SUB_QUICK_TUNE +WRI$_ADV_ABSTRACT_T.SUB_RESET +WRI$_ADV_ABSTRACT_T.SUB_RESUME +WRI$_ADV_ABSTRACT_T.SUB_UPDATE_REC_ATTR +WRI$_ADV_ABSTRACT_T.SUB_USER_SETUP +WRI$_ADV_ABSTRACT_T.SUB_VALIDATE_DIRECTIVE +WRI$_ADV_COMPRESSION_T.SUB_EXECUTE +WRI$_ADV_COMPRESSION_T.SUB_GET_REPORT +WRI$_ADV_HDM_T.SUB_DELETE +WRI$_ADV_HDM_T.SUB_EXECUTE +WRI$_ADV_HDM_T.SUB_GET_REPORT +WRI$_ADV_HDM_T.SUB_PARAM_VALIDATE +WRI$_ADV_HDM_T.SUB_RESET +WRI$_ADV_OBJSPACE_TREND_T.SUB_EXECUTE +WRI$_ADV_SQLACCESS_ADV.SUB_CLEANUP +WRI$_ADV_SQLACCESS_ADV.SUB_CREATE +WRI$_ADV_SQLACCESS_ADV.SUB_DELETE +WRI$_ADV_SQLACCESS_ADV.SUB_EXECUTE +WRI$_ADV_SQLACCESS_ADV.SUB_GET_REC_ATTR +WRI$_ADV_SQLACCESS_ADV.SUB_GET_REPORT +WRI$_ADV_SQLACCESS_ADV.SUB_GET_SCRIPT +WRI$_ADV_SQLACCESS_ADV.SUB_IMPLEMENT +WRI$_ADV_SQLACCESS_ADV.SUB_IMPORT_DIRECTIVES +WRI$_ADV_SQLACCESS_ADV.SUB_PARAM_VALIDATE +WRI$_ADV_SQLACCESS_ADV.SUB_QUICK_TUNE +WRI$_ADV_SQLACCESS_ADV.SUB_RESET +WRI$_ADV_SQLACCESS_ADV.SUB_RESUME +WRI$_ADV_SQLACCESS_ADV.SUB_UPDATE_REC_ATTR +WRI$_ADV_SQLACCESS_ADV.SUB_USER_SETUP +WRI$_ADV_SQLACCESS_ADV.SUB_VALIDATE_DIRECTIVE +WRI$_ADV_SQLTUNE.SUB_DELETE +WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION +WRI$_ADV_SQLTUNE.SUB_EXECUTE +WRI$_ADV_SQLTUNE.SUB_GET_REPORT +WRI$_ADV_SQLTUNE.SUB_GET_SCRIPT +WRI$_ADV_SQLTUNE.SUB_PARAM_VALIDATE +WRI$_ADV_SQLTUNE.SUB_RESET +WRI$_ADV_SQLTUNE.SUB_RESUME +WRI$_ADV_TUNEMVIEW_ADV.SUB_CLEANUP +WRI$_ADV_TUNEMVIEW_ADV.SUB_DELETE +WRI$_ADV_TUNEMVIEW_ADV.SUB_EXECUTE +WRI$_ADV_TUNEMVIEW_ADV.SUB_GET_REC_ATTR +WRI$_ADV_TUNEMVIEW_ADV.SUB_GET_SCRIPT +WRI$_ADV_TUNEMVIEW_ADV.SUB_IMPLEMENT +WRI$_ADV_TUNEMVIEW_ADV.SUB_IMPORT_DIRECTIVES +WRI$_ADV_TUNEMVIEW_ADV.SUB_PARAM_VALIDATE +WRI$_ADV_TUNEMVIEW_ADV.SUB_QUICK_TUNE +WRI$_ADV_TUNEMVIEW_ADV.SUB_RESET +WRI$_ADV_TUNEMVIEW_ADV.SUB_RESUME +WRI$_ADV_TUNEMVIEW_ADV.SUB_UPDATE_REC_ATTR +WRI$_ADV_TUNEMVIEW_ADV.SUB_USER_SETUP +WRI$_ADV_TUNEMVIEW_ADV.SUB_VALIDATE_DIRECTIVE +WRI$_ADV_UNDO_ADV.SUB_EXECUTE +WRI$_ADV_WORKLOAD.SUB_CREATE +WRI$_ADV_WORKLOAD.SUB_DELETE +WRI$_ADV_WORKLOAD.SUB_GET_REPORT +WRI$_ADV_WORKLOAD.SUB_PARAM_VALIDATE +WRI$_ADV_WORKLOAD.SUB_RESET +WRI$_ADV_WORKLOAD.SUB_USER_SETUP +WRI$_REPT_ABSTRACT_T.CUSTOM_FORMAT +WRI$_REPT_ABSTRACT_T.GET_REPORT +WRI$_REPT_DBREPLAY.GET_REPORT +WRI$_REPT_PLAN_DIFF.GET_REPORT +WRI$_REPT_SQLMONITOR.GET_REPORT +WRI$_REPT_SQLPI.CUSTOM_FORMAT +WRI$_REPT_SQLPI.GET_REPORT +WRI$_REPT_SQLT.GET_REPORT +WRI$_REPT_XPLAN.GET_REPORT +WRITE1 +WRITE10 +WRITE100 +WRITE1000 +WRITE10000 +WRITEDC +WRITES +WRITES# +WRITES_AUTOTUNE +WRITES_FULL_THREAD_CKPT +WRITES_LOGFILE_SIZE +WRITES_LOG_CHECKPOINT_SETTINGS +WRITES_MTTR +WRITES_OTHER_SETTINGS +WRITETIM +WRITE_COMPLETE_WAIT +WRITE_ERRS +WRITE_LATENCY +WRITE_TIME +WRITING +WRL_PARAMETER +WRL_TYPE +WTMAX +WTR_SLP_COUNT +WWV_AIU_FND_USER. +WWV_BD_FLOWCOMPUTATIONS. +WWV_BD_FLOWICONBAR. +WWV_BD_FLOWITEMS. +WWV_BD_FLOWLISTITEMS. +WWV_BD_FLOWLOVVALUES. +WWV_BD_FLOWMENUOPTIONS. +WWV_BD_FLOWPAGEPLUGS. +WWV_BD_FLOWPROCESSING. +WWV_BD_FLOWSTEPBRANCHES. +WWV_BD_FLOWSTEPBUTTONS. +WWV_BD_FLOWSTEPCOMPUTATIONS. +WWV_BD_FLOWSTEPITEMS. +WWV_BD_FLOWSTEPPROCESSING. +WWV_BD_FLOWSTEPVALIDATIONS. +WWV_BD_FLOWTABS. +WWV_BD_FLOWTOPLEVELTABS. +WWV_BD_LISTS_OF_VALUESD. +WWV_BIU_BUTTON_TEMPLATE. +WWV_BIU_COMPUTATIONS. +WWV_BIU_COMPUTATIONS_AUDIT. +WWV_BIU_ENTRY_POINTS_AUDIT. +WWV_BIU_ENTRY_POINT_ARGS_AUDIT. +WWV_BIU_FLOWFLASHCHARTS. +WWV_BIU_FLOWFLASHCHARTSERIES. +WWV_BIU_FLOWLISTTEMPLATES. +WWV_BIU_FLOWLISTTMPLTS_AUDIT. +WWV_BIU_FLOWPAGEPLUGS. +WWV_BIU_FLOWPAGEPLUGS_AUDIT. +WWV_BIU_FLOWPAGEPLUGTEMP. +WWV_BIU_FLOWPAGEPLUGTEMP_AUDIT. +WWV_BIU_FLOWROWTEMPLATES. +WWV_BIU_FLOWROWTMPLTS_AUDIT. +WWV_BIU_FLOWS. +WWV_BIU_FLOWS_AUDIT. +WWV_BIU_FLOWTHEMES_AUDIT. +WWV_BIU_FLOW_ALTERNATE_CONFIG. +WWV_BIU_FLOW_ALT_CONFIG_DET. +WWV_BIU_FLOW_AUTH_SETUPS. +WWV_BIU_FLOW_AUTH_SETUPS_AUDIT. +WWV_BIU_FLOW_BANNER. +WWV_BIU_FLOW_BUILD_AUDIT_T. +WWV_BIU_FLOW_CHART_SER_ATTR. +WWV_BIU_FLOW_COLLECTION. +WWV_BIU_FLOW_COLL_MEMBERS. +WWV_BIU_FLOW_COMPANIES. +WWV_BIU_FLOW_COMPANY_SCHEMAS. +WWV_BIU_FLOW_COMPOUND_CONDS. +WWV_BIU_FLOW_DATA_LOAD_BAD_LOG. +WWV_BIU_FLOW_DATA_LOAD_UNLOAD. +WWV_BIU_FLOW_DB_AUTH. +WWV_BIU_FLOW_DEVELOPERS. +WWV_BIU_FLOW_DEVELOPERS_AUDIT. +WWV_BIU_FLOW_DYNAMIC_TRANS. +WWV_BIU_FLOW_EFF_USERID_MAP. +WWV_BIU_FLOW_ENTRY_POINTS. +WWV_BIU_FLOW_ENTRY_POINT_ARGS. +WWV_BIU_FLOW_FILE_OBJECTS. +WWV_BIU_FLOW_FLD_TEMPLATES. +WWV_BIU_FLOW_ICON_BAR. +WWV_BIU_FLOW_ICON_BAR_AUDIT. +WWV_BIU_FLOW_IMPORT_EXPORT. +WWV_BIU_FLOW_ITEMS. +WWV_BIU_FLOW_ITEMS_AUDIT. +WWV_BIU_FLOW_LANGUAGES. +WWV_BIU_FLOW_LANG_MAP. +WWV_BIU_FLOW_LISTS. +WWV_BIU_FLOW_LISTS_AUDIT. +WWV_BIU_FLOW_LISTS_OF_VALUES. +WWV_BIU_FLOW_LISTS_OF_VALUESD. +WWV_BIU_FLOW_LIST_ITEMS. +WWV_BIU_FLOW_LIST_ITEMS_AUDIT. +WWV_BIU_FLOW_LOVD_AUDIT. +WWV_BIU_FLOW_LOV_AUDIT. +WWV_BIU_FLOW_LOV_VALUES. +WWV_BIU_FLOW_LOV_VAL_AUDIT. +WWV_BIU_FLOW_MAIL_ATT. +WWV_BIU_FLOW_MAIL_LOG. +WWV_BIU_FLOW_MAIL_QUEUE. +WWV_BIU_FLOW_MENUS. +WWV_BIU_FLOW_MENU_OPTIONS. +WWV_BIU_FLOW_MENU_OPT_AUDIT. +WWV_BIU_FLOW_MENU_TEMPLATES. +WWV_BIU_FLOW_MESSAGES$. +WWV_BIU_FLOW_MESSAGES_AUDIT. +WWV_BIU_FLOW_MODELS. +WWV_BIU_FLOW_MODEL_PAGES. +WWV_BIU_FLOW_MODEL_PAGE_COLS. +WWV_BIU_FLOW_PAGE_CACHE. +WWV_BIU_FLOW_PATCHES. +WWV_BIU_FLOW_PATCHES_AUDIT. +WWV_BIU_FLOW_PG_GENERIC_ATTR. +WWV_BIU_FLOW_PLATFORM_PREF. +WWV_BIU_FLOW_PLATFORM_PREFS. +WWV_BIU_FLOW_POPUP_LOV_TPL. +WWV_BIU_FLOW_PREFERENCES. +WWV_BIU_FLOW_PROV_COMPANY. +WWV_BIU_FLOW_PROV_COMP_SMOD. +WWV_BIU_FLOW_QUERY_COLUMN. +WWV_BIU_FLOW_QUERY_CONDITION. +WWV_BIU_FLOW_QUERY_DEFINITION. +WWV_BIU_FLOW_QUERY_OBJECT. +WWV_BIU_FLOW_ROLES. +WWV_BIU_FLOW_SEC_SCHEMES. +WWV_BIU_FLOW_SESSIONS. +WWV_BIU_FLOW_SHORTCUTS. +WWV_BIU_FLOW_SHORTCUTS_AUDIT. +WWV_BIU_FLOW_SHORTCUT_UM. +WWV_BIU_FLOW_STEPS. +WWV_BIU_FLOW_STEPS_AUDIT. +WWV_BIU_FLOW_STEP_BRANCH_ARGS. +WWV_BIU_FLOW_STEP_ITEM_HELP_A. +WWV_BIU_FLOW_SW_BINDS. +WWV_BIU_FLOW_SW_DETAIL_RESULTS. +WWV_BIU_FLOW_SW_RESULTS. +WWV_BIU_FLOW_SW_SQL_CMDS. +WWV_BIU_FLOW_SW_STMTS. +WWV_BIU_FLOW_TABS. +WWV_BIU_FLOW_TABS_AUDIT. +WWV_BIU_FLOW_TEMPLATES. +WWV_BIU_FLOW_TEMPL_PREFS. +WWV_BIU_FLOW_THEMES. +WWV_BIU_FLOW_TL_TABS. +WWV_BIU_FLOW_TL_TABS_AUDIT. +WWV_BIU_FLOW_TMPLTS_AUDIT. +WWV_BIU_FLOW_TRANSLATABLE_TEXT. +WWV_BIU_FLOW_WEB_SERVICES. +WWV_BIU_FLOW_WS_OPERATIONS. +WWV_BIU_FLOW_WS_PARAMETERS. +WWV_BIU_FLOW_WS_PARMS_MAP. +WWV_BIU_FLW_EFF_UID_MAP_AUDIT. +WWV_BIU_FND_GROUP_USERS. +WWV_BIU_FND_USER. +WWV_BIU_FND_USER_GROUPS. +WWV_BIU_INSTALL. +WWV_BIU_INSTALL_BUILD_OPT. +WWV_BIU_INSTALL_CHECKS. +WWV_BIU_INSTALL_SCRIPTS. +WWV_BIU_MIG_ACCGRPSMBRS. +WWV_BIU_MIG_ACC_COLUMN. +WWV_BIU_MIG_ACC_FRM. +WWV_BIU_MIG_ACC_FRM_CTL. +WWV_BIU_MIG_ACC_FRM_MDL. +WWV_BIU_MIG_ACC_FRM_PERM. +WWV_BIU_MIG_ACC_GROUPS. +WWV_BIU_MIG_ACC_IDX_COL. +WWV_BIU_MIG_ACC_INDEX. +WWV_BIU_MIG_ACC_MAIN. +WWV_BIU_MIG_ACC_MDL_PERM. +WWV_BIU_MIG_ACC_MODULES. +WWV_BIU_MIG_ACC_PAGES. +WWV_BIU_MIG_ACC_PROJECT. +WWV_BIU_MIG_ACC_QUERIES. +WWV_BIU_MIG_ACC_REL. +WWV_BIU_MIG_ACC_REL_COL. +WWV_BIU_MIG_ACC_RPT_CTL. +WWV_BIU_MIG_ACC_RPT_GRP. +WWV_BIU_MIG_ACC_RPT_MDL. +WWV_BIU_MIG_ACC_RPT_PERM. +WWV_BIU_MIG_ACC_TABLE. +WWV_BIU_MIG_ACC_TAB_PERM. +WWV_BIU_MIG_ACC_USERS. +WWV_BIU_MIG_FMB_MNUITEMRL. +WWV_BIU_MIG_FORMS. +WWV_BIU_MIG_FRM_ALERTS. +WWV_BIU_MIG_FRM_ATACHEDLIBRARY. +WWV_BIU_MIG_FRM_BLK_DSA. +WWV_BIU_MIG_FRM_BLK_DSC. +WWV_BIU_MIG_FRM_BLK_ITEMS. +WWV_BIU_MIG_FRM_BLK_ITEM_LIE. +WWV_BIU_MIG_FRM_BLK_ITEM_RADIO. +WWV_BIU_MIG_FRM_BLK_ITEM_TRG. +WWV_BIU_MIG_FRM_BLK_RELATIONS. +WWV_BIU_MIG_FRM_BLK_TRIGGERS. +WWV_BIU_MIG_FRM_BLOCKS. +WWV_BIU_MIG_FRM_CANVAS. +WWV_BIU_MIG_FRM_CNVG_CPDTXT. +WWV_BIU_MIG_FRM_CNVS_GRAPHICS. +WWV_BIU_MIG_FRM_CNVS_TABPAGE. +WWV_BIU_MIG_FRM_COORDINATES. +WWV_BIU_MIG_FRM_CPDTXT_TXTSGMT. +WWV_BIU_MIG_FRM_EDITOR. +WWV_BIU_MIG_FRM_FMB_MENU. +WWV_BIU_MIG_FRM_FMB_MENUITEM. +WWV_BIU_MIG_FRM_FORMMODULES. +WWV_BIU_MIG_FRM_LOV. +WWV_BIU_MIG_FRM_LOVCOLMAPPING. +WWV_BIU_MIG_FRM_MODULES. +WWV_BIU_MIG_FRM_MODULPARAMETER. +WWV_BIU_MIG_FRM_OBJECTGROUP. +WWV_BIU_MIG_FRM_OBJGROUPCHILD. +WWV_BIU_MIG_FRM_PROGRAMUNIT. +WWV_BIU_MIG_FRM_PROPERTYCLASS. +WWV_BIU_MIG_FRM_RECGRPCOLUMN. +WWV_BIU_MIG_FRM_RECORDGROUPS. +WWV_BIU_MIG_FRM_REPORT. +WWV_BIU_MIG_FRM_REV_APEX_APP. +WWV_BIU_MIG_FRM_REV_BLK_ITEMS. +WWV_BIU_MIG_FRM_REV_BLOCKS. +WWV_BIU_MIG_FRM_REV_FORMMODULE. +WWV_BIU_MIG_FRM_REV_LCM. +WWV_BIU_MIG_FRM_REV_LOV. +WWV_BIU_MIG_FRM_TRIGGERS. +WWV_BIU_MIG_FRM_VISUALATTR. +WWV_BIU_MIG_FRM_WINDOWS. +WWV_BIU_MIG_FRM_XMLTAGTABLEMAP. +WWV_BIU_MIG_GEN_APPLICATIONS. +WWV_BIU_MIG_GRP. +WWV_BIU_MIG_GRP_FIELD. +WWV_BIU_MIG_GRP_FILTER. +WWV_BIU_MIG_GRP_FORM. +WWV_BIU_MIG_GRP_ITEM. +WWV_BIU_MIG_GRP_ITEMDESC. +WWV_BIU_MIG_GRP_ITEMPRIV. +WWV_BIU_MIG_GRP_ROW. +WWV_BIU_MIG_GRP_SUM. +WWV_BIU_MIG_MENUS. +WWV_BIU_MIG_MNU. +WWV_BIU_MIG_MNUITEM. +WWV_BIU_MIG_MNUITEMRL. +WWV_BIU_MIG_MNU_MNUMODULES. +WWV_BIU_MIG_MNU_MODROLES. +WWV_BIU_MIG_MNU_MODULES. +WWV_BIU_MIG_MNU_PROGUNIT. +WWV_BIU_MIG_MNU_XMLTAGTABLEMAP. +WWV_BIU_MIG_OLB. +WWV_BIU_MIG_OLB_BI_TRIGGER. +WWV_BIU_MIG_OLB_BLK_DSC. +WWV_BIU_MIG_OLB_BLK_ITEM. +WWV_BIU_MIG_OLB_BLK_ITEM_LIE. +WWV_BIU_MIG_OLB_BLK_TRIGGER. +WWV_BIU_MIG_OLB_BLOCK. +WWV_BIU_MIG_OLB_CANVAS. +WWV_BIU_MIG_OLB_CG_COMPOUNDTXT. +WWV_BIU_MIG_OLB_CG_CT_TXTSGMNT. +WWV_BIU_MIG_OLB_CNVS_GRAPHICS. +WWV_BIU_MIG_OLB_MODULES. +WWV_BIU_MIG_OLB_OBJECTLIBRARY. +WWV_BIU_MIG_OLB_OBJLIBTAB. +WWV_BIU_MIG_OLB_OLT_ALERT. +WWV_BIU_MIG_OLB_OLT_BI_TRIGGER. +WWV_BIU_MIG_OLB_OLT_BLK_ITEM. +WWV_BIU_MIG_OLB_OLT_BLOCK. +WWV_BIU_MIG_OLB_OLT_CANVAS. +WWV_BIU_MIG_OLB_OLT_CNV_GRPHCS. +WWV_BIU_MIG_OLB_OLT_GRAPHICS. +WWV_BIU_MIG_OLB_OLT_ITEM. +WWV_BIU_MIG_OLB_OLT_MENU. +WWV_BIU_MIG_OLB_OLT_M_MENUITEM. +WWV_BIU_MIG_OLB_OLT_OBJGRP. +WWV_BIU_MIG_OLB_OLT_OB_OBCHILD. +WWV_BIU_MIG_OLB_OLT_REPORT. +WWV_BIU_MIG_OLB_OLT_TABPAGE. +WWV_BIU_MIG_OLB_OLT_TP_GRAPHCS. +WWV_BIU_MIG_OLB_OLT_VA. +WWV_BIU_MIG_OLB_OLT_WINDOW. +WWV_BIU_MIG_OLB_PROGRAMUNIT. +WWV_BIU_MIG_OLB_PROPERTYCLASS. +WWV_BIU_MIG_OLB_TTP5GCTTS. +WWV_BIU_MIG_OLB_TTPGGCTTS. +WWV_BIU_MIG_OLB_TTPGGGCTTS. +WWV_BIU_MIG_OLB_TTPGGGGCT. +WWV_BIU_MIG_OLB_TTPGGGGCTTS. +WWV_BIU_MIG_OLB_TTPGGGGGCT. +WWV_BIU_MIG_OLB_T_TP_GGGG. +WWV_BIU_MIG_OLB_T_TP_GGGGG. +WWV_BIU_MIG_OLB_T_TP_GGG_CT. +WWV_BIU_MIG_OLB_T_TP_GG_CT. +WWV_BIU_MIG_OLB_T_TP_GG_GRPHCS. +WWV_BIU_MIG_OLB_T_TP_G_GRAPHCS. +WWV_BIU_MIG_OLB_VISUALATTRBUTE. +WWV_BIU_MIG_OLB_WINDOW. +WWV_BIU_MIG_OLB_XMLTAGTABLEMAP. +WWV_BIU_MIG_PLLS. +WWV_BIU_MIG_PROJ_COMPS. +WWV_BIU_MIG_PROJ_TRIGS. +WWV_BIU_MIG_REPDATA. +WWV_BIU_MIG_REPORT. +WWV_BIU_MIG_REPSRC. +WWV_BIU_MIG_RPTPRIV. +WWV_BIU_MIG_RPTS. +WWV_BIU_MIG_RPT_DATASUM. +WWV_BIU_MIG_RPT_XMLTAGTABLEMAP. +WWV_BIU_MIG_SELECT. +WWV_BIU_ONLINE_HELP. +WWV_BIU_ONLINE_HELP_JA. +WWV_BIU_PROCESSING. +WWV_BIU_PROCESSING_AUDIT. +WWV_BIU_REGION_REPORT_COLUMN. +WWV_BIU_REGION_REPORT_FILTER. +WWV_BIU_STEP_BRANCHES. +WWV_BIU_STEP_BRANCHES_AUDIT. +WWV_BIU_STEP_BRANCH_ARGS_AUDIT. +WWV_BIU_STEP_BUTTONS. +WWV_BIU_STEP_BUTTONS_AUDIT. +WWV_BIU_STEP_COMPUTATIONS. +WWV_BIU_STEP_COMP_AUDIT. +WWV_BIU_STEP_ITEMS. +WWV_BIU_STEP_ITEMS_AUDIT. +WWV_BIU_STEP_ITEM_HELP. +WWV_BIU_STEP_PROCESSING. +WWV_BIU_STEP_PROCESSING_AUDIT. +WWV_BIU_STEP_VALIDATIONS. +WWV_BIU_STEP_VALID_AUDIT. +WWV_BIU_WWV_FLOW_HNT_ARGUMENT. +WWV_BIU_WWV_FLOW_HNT_PROCEDURE. +WWV_BIU_WWV_FLOW_TREES. +WWV_BIU_WWV_MIG_REV_APEX. +WWV_BIU_WWV_MIG_REV_FORMS. +WWV_BIU_WWV_MIG_REV_QUERIES. +WWV_BIU_WWV_MIG_REV_REPORTS. +WWV_BIU_WWV_MIG_REV_TABLES. +WWV_BI_FLOWCALS. +WWV_BI_FLOWCALTEMPLATES. +WWV_BU_FLOW_THEMES. +WWV_CALCULATOR. +WWV_CALCULATOR.DRAW +WWV_CALCULATOR.SHOW +WWV_CRYPT. +WWV_CRYPT.DECRYPTLOB +WWV_CRYPT.DECRYPTRAW +WWV_CRYPT.DECRYPTSTRING +WWV_CRYPT.ENCRYPTLOB +WWV_CRYPT.ENCRYPTRAW +WWV_CRYPT.ENCRYPTSTRING +WWV_CRYPT.MD5LOB +WWV_CRYPT.MD5RAW +WWV_CRYPT.MD5STR +WWV_CRYPT.ONE_WAY_HASH_RAW +WWV_CRYPT.ONE_WAY_HASH_STR +WWV_CRYPT.SETKEY +WWV_DBMS_SQL. +WWV_DBMS_SQL.CHECK_PLSQL +WWV_DBMS_SQL.COUNTEM +WWV_DBMS_SQL.FUNC_RETURNING_CURSOR +WWV_DBMS_SQL.GET_USERID +WWV_DBMS_SQL.PARSE_AS_USER +WWV_DBMS_SQL.RUN_BLOCK +WWV_DBMS_SQL.RUN_BLOCK2 +WWV_DBMS_SQL.RUN_BLOCK3 +WWV_DBMS_SQL.RUN_BLOCK4 +WWV_DBMS_SQL.RUN_DDL +WWV_DBMS_SQL.SELECT_DATE +WWV_DBMS_SQL.SELECT_NUM +WWV_DBMS_SQL.SELECT_VC +WWV_DBMS_SQL.VALUEOF_DATE +WWV_DBMS_SQL.VALUEOF_NUM +WWV_DBMS_SQL.VALUEOF_VC +WWV_FLOW. +WWV_FLOW.ACCEPT +WWV_FLOW.CLEAR_APP_CACHE +WWV_FLOW.CLEAR_FLOW_CACHE +WWV_FLOW.CLEAR_PAGE_CACHE +WWV_FLOW.CLEAR_PAGE_CACHES +WWV_FLOW.CLEAR_USER_CACHE +WWV_FLOW.CONVERT_FLOW_ALIAS_TO_ID +WWV_FLOW.DEBUG +WWV_FLOW.DO_SUBSTITUTIONS +WWV_FLOW.DO_TEMPLATE_SUBSTITUTIONS +WWV_FLOW.DRAW_BODY_CLOSE +WWV_FLOW.DRAW_BODY_OPEN +WWV_FLOW.DRAW_ICON_NAVIGATION_BAR +WWV_FLOW.FETCH_APP_ITEM +WWV_FLOW.FETCH_FLOW_ITEM +WWV_FLOW.FIND_ITEM_ID +WWV_FLOW.FIND_ITEM_NAME +WWV_FLOW.GET_BROWSER_VERSION +WWV_FLOW.GET_COMPANY_NAME +WWV_FLOW.GET_CURRENT_FLOW_SGID +WWV_FLOW.GET_CUSTOM_AUTH_LOGIN_URL +WWV_FLOW.GET_G_BASE_HREF +WWV_FLOW.GET_NEXT_SESSION_ID +WWV_FLOW.GET_NLS_DECIMAL_SEPARATOR +WWV_FLOW.GET_NLS_GROUP_SEPARATOR +WWV_FLOW.GET_PAGE_ALIAS +WWV_FLOW.GET_SGID +WWV_FLOW.GET_TRANSLATED_APP_ID +WWV_FLOW.GET_UNIQUE_ID +WWV_FLOW.HELP +WWV_FLOW.IS_CUSTOM_AUTH_PAGE +WWV_FLOW.NULL_PAGE_CACHE +WWV_FLOW.NULL_PAGE_CACHES +WWV_FLOW.NULL_STEP_CACHE +WWV_FLOW.NULL_STEP_CACHES +WWV_FLOW.PAINT_BUTTONS +WWV_FLOW.PAINT_FORMOPEN +WWV_FLOW.PROCESS_STATE +WWV_FLOW.PUBLIC_ROLE_CHECK +WWV_FLOW.PUBLIC_SECURITY_CHECK +WWV_FLOW.REPLACE_CGI_ENV +WWV_FLOW.RESET_G_BASE_HREF +WWV_FLOW.RESET_G_NLS_DATE_FORMAT +WWV_FLOW.RESET_G_NLS_DECIMAL_SEPARATOR +WWV_FLOW.RESET_PAGE_PROCESS +WWV_FLOW.RESET_PAGE_PROCESSESS +WWV_FLOW.RESET_SECURITY_CHECK +WWV_FLOW.S +WWV_FLOW.SAVE_IN_SUBSTITUTION_CACHE +WWV_FLOW.SET_G_BASE_HREF +WWV_FLOW.SET_G_NLS_DATE_FORMAT +WWV_FLOW.SET_G_NLS_DECIMAL_SEPARATOR +WWV_FLOW.SHOW +WWV_FLOW.SHOW_ERROR_MESSAGE +WWV_FLOW.TAB_TITLE +WWV_FLOW.TRIM_SQL +WWV_FLOW.UPDATE_CACHE_WITH_WRITE +WWV_FLOWS_BIU_CSS_REPO. +WWV_FLOWS_BIU_HTML_REPO. +WWV_FLOWS_BIU_IMAGE_REPO. +WWV_FLOWS_RELEASE. +WWV_FLOWS_VERSION. +WWV_FLOW_ADMIN_API. +WWV_FLOW_ADMIN_API.CREATE_USER +WWV_FLOW_ADMIN_API.DELETE_DEVELOPER_ROLE +WWV_FLOW_ADMIN_API.EDIT_DEVELOPER_ROLE +WWV_FLOW_ADMIN_API.EDIT_DEVELOPER_ROLES +WWV_FLOW_ADMIN_API.EDIT_USER +WWV_FLOW_ADMIN_API.EDIT_USER_AND_GROUP +WWV_FLOW_ADMIN_API.FETCH_USER +WWV_FLOW_ADMIN_API.LOCK_WORKSPACE +WWV_FLOW_ADMIN_API.REMOVE_USER +WWV_FLOW_AJAX. +WWV_FLOW_AJAX.AJAX_COLLECTION +WWV_FLOW_AJAX.JSON_FROM_ARRAY +WWV_FLOW_AJAX.JSON_FROM_ITEMS +WWV_FLOW_AJAX.JSON_FROM_SQL +WWV_FLOW_AJAX.JSON_FROM_STRING +WWV_FLOW_AJAX.JSON_REPLACE +WWV_FLOW_AJAX.PRINT_WIDGET_DEBUG +WWV_FLOW_AJAX.SORT_WIDGET_HTML +WWV_FLOW_AJAX.WIDGET +WWV_FLOW_API. +WWV_FLOW_API.APPEND_TO_INSTALL_SCRIPT +WWV_FLOW_API.CHECK_SGID +WWV_FLOW_API.CHECK_VERSION +WWV_FLOW_API.CREATE_APP_COMMENTS +WWV_FLOW_API.CREATE_APP_FROM_QUERY +WWV_FLOW_API.CREATE_AUTH_SETUP +WWV_FLOW_API.CREATE_BUG +WWV_FLOW_API.CREATE_BUILD_OPTION +WWV_FLOW_API.CREATE_BUTTON_TEMPLATES +WWV_FLOW_API.CREATE_CALENDAR +WWV_FLOW_API.CREATE_CALENDAR_TEMPLATE +WWV_FLOW_API.CREATE_CHART_PAGE +WWV_FLOW_API.CREATE_CHART_SERIES_ATTR +WWV_FLOW_API.CREATE_CONFIGURATION +WWV_FLOW_API.CREATE_CONFIGURATION_ITEM +WWV_FLOW_API.CREATE_DYNAMIC_TRANSLATION +WWV_FLOW_API.CREATE_ENTRY_POINT +WWV_FLOW_API.CREATE_ENTRY_POINT_ARGS +WWV_FLOW_API.CREATE_FIELD_TEMPLATE +WWV_FLOW_API.CREATE_FLASH_CHART +WWV_FLOW_API.CREATE_FLASH_CHART_SERIES +WWV_FLOW_API.CREATE_FLOW +WWV_FLOW_API.CREATE_FLOW_COMPUTATION +WWV_FLOW_API.CREATE_FLOW_ITEM +WWV_FLOW_API.CREATE_FLOW_PROCESS +WWV_FLOW_API.CREATE_GENERIC_ATTR +WWV_FLOW_API.CREATE_ICON_BAR +WWV_FLOW_API.CREATE_ICON_BAR_ITEM +WWV_FLOW_API.CREATE_IMAGE +WWV_FLOW_API.CREATE_INSTALL +WWV_FLOW_API.CREATE_INSTALL_BUILD_OPTION +WWV_FLOW_API.CREATE_INSTALL_CHECK +WWV_FLOW_API.CREATE_INSTALL_SCRIPT +WWV_FLOW_API.CREATE_LANGUAGE_MAP +WWV_FLOW_API.CREATE_LIST +WWV_FLOW_API.CREATE_LIST_ITEM +WWV_FLOW_API.CREATE_LIST_OF_VALUES +WWV_FLOW_API.CREATE_LIST_TEMPLATE +WWV_FLOW_API.CREATE_MENU +WWV_FLOW_API.CREATE_MENU_OPTION +WWV_FLOW_API.CREATE_MENU_TEMPLATE +WWV_FLOW_API.CREATE_MESSAGE +WWV_FLOW_API.CREATE_OR_REMOVE_FILE +WWV_FLOW_API.CREATE_PAGE +WWV_FLOW_API.CREATE_PAGE_BRANCH +WWV_FLOW_API.CREATE_PAGE_BRANCH_ARGS +WWV_FLOW_API.CREATE_PAGE_BUTTON +WWV_FLOW_API.CREATE_PAGE_COMPUTATION +WWV_FLOW_API.CREATE_PAGE_GROUP +WWV_FLOW_API.CREATE_PAGE_HELP +WWV_FLOW_API.CREATE_PAGE_ITEM +WWV_FLOW_API.CREATE_PAGE_ON_TABLE +WWV_FLOW_API.CREATE_PAGE_PLUG +WWV_FLOW_API.CREATE_PAGE_PROCESS +WWV_FLOW_API.CREATE_PAGE_VALIDATION +WWV_FLOW_API.CREATE_PLUG_TEMPLATE +WWV_FLOW_API.CREATE_POPUP_LOV_TEMPLATE +WWV_FLOW_API.CREATE_QUERY_COLUMN +WWV_FLOW_API.CREATE_QUERY_CONDITION +WWV_FLOW_API.CREATE_QUERY_DEFINITION +WWV_FLOW_API.CREATE_QUERY_OBJECT +WWV_FLOW_API.CREATE_REGION_RPT_COLS +WWV_FLOW_API.CREATE_REPORT_COLUMNS +WWV_FLOW_API.CREATE_REPORT_LAYOUT +WWV_FLOW_API.CREATE_REPORT_PAGE +WWV_FLOW_API.CREATE_REPORT_REGION +WWV_FLOW_API.CREATE_ROW_TEMPLATE +WWV_FLOW_API.CREATE_ROW_TEMPLATE_PATCH +WWV_FLOW_API.CREATE_SECURITY_SCHEME +WWV_FLOW_API.CREATE_SHARED_QUERY +WWV_FLOW_API.CREATE_SHARED_QUERY_STMNT +WWV_FLOW_API.CREATE_SHORTCUT +WWV_FLOW_API.CREATE_STATIC_LOV_DATA +WWV_FLOW_API.CREATE_TAB +WWV_FLOW_API.CREATE_TEMPLATE +WWV_FLOW_API.CREATE_THEME +WWV_FLOW_API.CREATE_THEME_IMAGE +WWV_FLOW_API.CREATE_TOPLEVEL_TAB +WWV_FLOW_API.CREATE_TRANSLATION +WWV_FLOW_API.CREATE_TREE +WWV_FLOW_API.CREATE_WEB_SERVICE +WWV_FLOW_API.CREATE_WORKSHEET +WWV_FLOW_API.CREATE_WORKSHEET_COLUMN +WWV_FLOW_API.CREATE_WORKSHEET_COL_GROUP +WWV_FLOW_API.CREATE_WORKSHEET_COMPUTATION +WWV_FLOW_API.CREATE_WORKSHEET_CONDITION +WWV_FLOW_API.CREATE_WORKSHEET_RPT +WWV_FLOW_API.CREATE_WS_OPERATIONS +WWV_FLOW_API.CREATE_WS_PARAMETERS +WWV_FLOW_API.CREATE_WS_PROCESS_PARMS_MAP +WWV_FLOW_API.DELETE_TEMPLATE +WWV_FLOW_API.DELETE_THEME +WWV_FLOW_API.GET_APPLICATION_OWNER +WWV_FLOW_API.GET_SECURITY_GROUP_ID +WWV_FLOW_API.IMPORT_SCRIPT +WWV_FLOW_API.REMOVE_DYANAMIC_TRANSLATION +WWV_FLOW_API.REMOVE_FLOW +WWV_FLOW_API.REMOVE_ICON_BAR_ITEM +WWV_FLOW_API.REMOVE_PAGE +WWV_FLOW_API.REMOVE_TRANSLATION +WWV_FLOW_API.RENAME_TABSET +WWV_FLOW_API.SET_APPLICATION_ALIAS +WWV_FLOW_API.SET_APPLICATION_LOCK +WWV_FLOW_API.SET_APPLICATION_NAME +WWV_FLOW_API.SET_APPLICATION_OWNER +WWV_FLOW_API.SET_AUTHENTICATED_URL_PREFIX +WWV_FLOW_API.SET_BUILD_OPTION +WWV_FLOW_API.SET_BUILD_STATUS_RUN_ONLY +WWV_FLOW_API.SET_ENABLE_APP_DEBUGGING +WWV_FLOW_API.SET_EXACT_SUBS +WWV_FLOW_API.SET_FLOW_AUTHENTICATION +WWV_FLOW_API.SET_FLOW_PROCESS_SQL +WWV_FLOW_API.SET_FLOW_STATUS +WWV_FLOW_API.SET_GLOBAL_NOTIFICATION +WWV_FLOW_API.SET_HOME_LINK +WWV_FLOW_API.SET_HTML_PAGE_HEADER +WWV_FLOW_API.SET_ICON_BAR_ITEM +WWV_FLOW_API.SET_IMAGE_PREFIX +WWV_FLOW_API.SET_LIST_ITEM_LINK_TARGET +WWV_FLOW_API.SET_LIST_ITEM_LINK_TEXT +WWV_FLOW_API.SET_LIST_ITEM_SEQUENCE +WWV_FLOW_API.SET_LOGGING +WWV_FLOW_API.SET_LOGIN_URL +WWV_FLOW_API.SET_LOGOUT_URL +WWV_FLOW_API.SET_LOGO_IMAGE +WWV_FLOW_API.SET_PAGE_HELP_TEXT +WWV_FLOW_API.SET_PAGE_PROT_ENABLED_Y_N +WWV_FLOW_API.SET_PLUG_QUERY_HEADING +WWV_FLOW_API.SET_PLUG_SOURCE +WWV_FLOW_API.SET_PLUG_TEMPLATE_TAB_ATTR +WWV_FLOW_API.SET_PROXY_SERVER +WWV_FLOW_API.SET_PUBLIC_URL_PREFIX +WWV_FLOW_API.SET_REGION_COLUMN_WIDTH +WWV_FLOW_API.SET_SECURITY_GROUP_ID +WWV_FLOW_API.SET_SECURITY_SCHEME +WWV_FLOW_API.SET_STATIC_SUB_STRINGS +WWV_FLOW_API.SET_TEMPLATE +WWV_FLOW_API.SET_THEME_CALENDAR_ICON +WWV_FLOW_API.SET_TOPLEVEL_TAB_TARGET +WWV_FLOW_API.SET_TOPLEVEL_TAB_TEXT +WWV_FLOW_API.SET_VERSION +WWV_FLOW_API.SET_VPD +WWV_FLOW_API.UPDATE_OWNER +WWV_FLOW_API.UPDATE_PAGE +WWV_FLOW_API.UPDATE_PAGE_ITEM +WWV_FLOW_API.UPDATE_TAB_CONDITION +WWV_FLOW_API.UPDATE_TAB_TEXT +WWV_FLOW_API.UPDATE_TOPLEVEL_TAB +WWV_FLOW_APP_COMMENTS_T1. +WWV_FLOW_APP_GROUPS_TRG. +WWV_FLOW_ASFCOOKIE. +WWV_FLOW_ASFCOOKIE.VALIDATE_SESSION +WWV_FLOW_ASSERT. +WWV_FLOW_ASSERT.FUNCTION_BODY_START +WWV_FLOW_ASSERT.GET_FIRST_TOKEN +WWV_FLOW_ASSERT.NOOP +WWV_FLOW_ASSERT.NORMAL_SQL_NAME +WWV_FLOW_ASSERT.NULL_OR_NORMAL_SQL_NAME +WWV_FLOW_ASSERT.NULL_OR_SIMPLE_SQL_NAME +WWV_FLOW_ASSERT.SCHEMA_NAME +WWV_FLOW_ASSERT.SIMPLE_SQL_NAME +WWV_FLOW_ASSERT.SQL_OR_FUNCTION_START +WWV_FLOW_ASSERT.SQL_QUERY_START +WWV_FLOW_ASSERT.VERIFY_PARSING_SCHEMA +WWV_FLOW_ASSERT.WHERE_CLAUSE_START +WWV_FLOW_AUDIT. +WWV_FLOW_AUDIT.AUDIT_ACTION +WWV_FLOW_AUDIT.REMOVE_AUDIT_TRAIL +WWV_FLOW_BIU_LOCK_PAGE. +WWV_FLOW_BIU_LOCK_PG_LOG. +WWV_FLOW_BIU_PG_GROUPS. +WWV_FLOW_BIU_REG_UPD_RPT_COLS. +WWV_FLOW_BIU_STANDARD_CSS. +WWV_FLOW_BIU_STANDARD_ICONS. +WWV_FLOW_BIU_STANDARD_JS. +WWV_FLOW_BIW_APPBLDPREF. +WWV_FLOW_BI_QB_SAVED_COND. +WWV_FLOW_BI_QB_SAVED_JOIN. +WWV_FLOW_BI_QB_SAVED_QRY. +WWV_FLOW_BI_QB_SAVED_TABS. +WWV_FLOW_BUILDER. +WWV_FLOW_BUILDER.GENERATE_HEADER +WWV_FLOW_BUILDER.GET_CURRENT_FLOW_ID_AND_NAME +WWV_FLOW_BUILDER.GET_CURRENT_PAGE_ID_AND_NAME +WWV_FLOW_BUILDER.IS_ITEM_NAME_DUPLICATE +WWV_FLOW_BUILDER.IS_ITEM_NAME_USED +WWV_FLOW_BUILDER.IS_VALID_COLUMN_NAME +WWV_FLOW_BUILDER.IS_VALID_IDENTIFIER +WWV_FLOW_BUILDER.IS_VALID_TABLE_OR_VIEW +WWV_FLOW_BUILDER.LIST_PLSQL_SOURCE +WWV_FLOW_BUILDER.POPULATE_UPDATEABLE_COL +WWV_FLOW_BUILDER.REGION_SOURCE_TYPE_LOV +WWV_FLOW_BUILDER.REPORT_HEADER +WWV_FLOW_BUILDER.SET_UPD_COLUMN_DISPLAY_ATTR +WWV_FLOW_BUILDER.SHOW_PAGE_LIST +WWV_FLOW_BUILDER.SIMPLE_ITEMS_LIST +WWV_FLOW_BUILDER.SIMPLE_PAGE_LIST +WWV_FLOW_BUILDER.SPLIT_URL +WWV_FLOW_BUILDER.UNRESERVE_FLOW_PAGE +WWV_FLOW_CACHE. +WWV_FLOW_CACHE.COMPUTE_STATS +WWV_FLOW_CACHE.PURGE_DUPLICATE_SESSIONS +WWV_FLOW_CACHE.PURGE_N_REBUILD +WWV_FLOW_CACHE.PURGE_OLDEST_SESSIONS +WWV_FLOW_CACHE.PURGE_SESSIONS +WWV_FLOW_CACHE.REBUILD_INDEXES +WWV_FLOW_CACHE.SET_FB_FLOW_PAGE_ID +WWV_FLOW_CACHE.SET_FLOW_BUILDER_STATE +WWV_FLOW_CACHE.SHOW_SESSION_STATE +WWV_FLOW_CALENDAR3. +WWV_FLOW_CALENDAR3.CHECKDATESUB +WWV_FLOW_CALENDAR3.CREATE_WIZARD_ELEMENTS +WWV_FLOW_CALENDAR3.IS_VALID_QUERY +WWV_FLOW_CALENDAR3.LOADCOLS +WWV_FLOW_CALENDAR3.MYSUBSDATES +WWV_FLOW_CALENDAR3.PRINTDAYCAL +WWV_FLOW_CALENDAR3.PRINTMONTHCAL +WWV_FLOW_CALENDAR3.PRINTWEEKCAL +WWV_FLOW_CALENDAR3.PROCESS_CALENDAR_DATE +WWV_FLOW_CALENDAR3.SET_ATTRIBUTES +WWV_FLOW_CALENDAR3.SHOW +WWV_FLOW_CALENDAR_AJAX. +WWV_FLOW_CALENDAR_AJAX.WIDGET +WWV_FLOW_CHECK. +WWV_FLOW_CHECK.CACHE_SQL +WWV_FLOW_CHECK.CHECK_CACHE +WWV_FLOW_CHECK.CHECK_CONDITION +WWV_FLOW_CHECK.CHECK_CONDITION_SQL_EXPRESION +WWV_FLOW_CHECK.CHECK_COND_PLSQL_EXPRESION +WWV_FLOW_COLLECTION. +WWV_FLOW_COLLECTION.ADD_MEMBER +WWV_FLOW_COLLECTION.ADD_MEMBERS +WWV_FLOW_COLLECTION.COLLECTION_EXISTS +WWV_FLOW_COLLECTION.COLLECTION_HAS_CHANGED +WWV_FLOW_COLLECTION.COLLECTION_MEMBER_COUNT +WWV_FLOW_COLLECTION.CREATE_COLLECTION +WWV_FLOW_COLLECTION.CREATE_COLLECTION_FROM_QUERY +WWV_FLOW_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B +WWV_FLOW_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION +WWV_FLOW_COLLECTION.DELETE_ALL_COLLECTIONS +WWV_FLOW_COLLECTION.DELETE_ALL_COLLECTIONS_SESSION +WWV_FLOW_COLLECTION.DELETE_COLLECTION +WWV_FLOW_COLLECTION.DELETE_MEMBER +WWV_FLOW_COLLECTION.DELETE_MEMBERS +WWV_FLOW_COLLECTION.GET_MEMBER_MD5 +WWV_FLOW_COLLECTION.MERGE_MEMBERS +WWV_FLOW_COLLECTION.MOVE_MEMBER_DOWN +WWV_FLOW_COLLECTION.MOVE_MEMBER_UP +WWV_FLOW_COLLECTION.RESEQUENCE_COLLECTION +WWV_FLOW_COLLECTION.RESET_COLLECTION_CHANGED +WWV_FLOW_COLLECTION.RESET_COLLECTION_CHANGED_ALL +WWV_FLOW_COLLECTION.SORT_MEMBERS +WWV_FLOW_COLLECTION.TRUNCATE_COLLECTION +WWV_FLOW_COLLECTION.UPDATE_MEMBER +WWV_FLOW_COLLECTION.UPDATE_MEMBERS +WWV_FLOW_COLLECTION.UPDATE_MEMBER_ATTRIBUTE +WWV_FLOW_COLLECTIONS_SHOWCASE. +WWV_FLOW_COLLECTIONS_SHOWCASE.CREATE_FLOW +WWV_FLOW_CONDITIONS. +WWV_FLOW_CONDITIONS.STANDARD_CONDITION +WWV_FLOW_COPY. +WWV_FLOW_COPY_BUTTON. +WWV_FLOW_COPY_LOV. +WWV_FLOW_COPY_METADATA. +WWV_FLOW_COPY_METADATA.PUSH_AUTH_SETUP +WWV_FLOW_COPY_METADATA.PUSH_BUTTON_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_CALENDAR_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_FIELD_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_ITEM_HELP +WWV_FLOW_COPY_METADATA.PUSH_LIST_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_LOV +WWV_FLOW_COPY_METADATA.PUSH_MENU_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_NAVBAR +WWV_FLOW_COPY_METADATA.PUSH_PAGE_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_POPUPLOV_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_REGION_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_REPORT_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_SECURITY_SCHEME +WWV_FLOW_COPY_METADATA.PUSH_SHORTCUT +WWV_FLOW_COPY_METADATA.REFRESH_AUTH_SETUP +WWV_FLOW_COPY_METADATA.REFRESH_BUTTON_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_CALENDAR_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_FIELD_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_ITEM_HELP +WWV_FLOW_COPY_METADATA.REFRESH_LIST_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_LOV +WWV_FLOW_COPY_METADATA.REFRESH_MENU_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_NAVBAR +WWV_FLOW_COPY_METADATA.REFRESH_PAGE_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_POPUPLOV_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_REGION_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_REPORT_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_SECURITY_SCHEME +WWV_FLOW_COPY_METADATA.REFRESH_SHORTCUT +WWV_FLOW_COPY_METADATA.REMOVE_AUTH_SETUP_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_BUTTON_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_CALENDAR_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_FIELD_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_ITEM_HELP_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_LIST_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_LOV_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_MENU_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_NAVBAR_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_PAGE_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_POPUPLOV_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_REGION_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_REPORT_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_SCHEME_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_SHORTCUT_REFERENCE_ID +WWV_FLOW_COPY_METADATA.SUBSCRIBE_AUTH_SETUP +WWV_FLOW_COPY_METADATA.SUBSCRIBE_BUTTON_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_CALENDAR_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_FIELD_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_ITEM_HELP +WWV_FLOW_COPY_METADATA.SUBSCRIBE_LIST_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_LOV +WWV_FLOW_COPY_METADATA.SUBSCRIBE_MENU_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_NAVBAR +WWV_FLOW_COPY_METADATA.SUBSCRIBE_PAGE_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_POPUPLOV_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_REGION_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_REPORT_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_SECURITY_SCHEME +WWV_FLOW_COPY_METADATA.SUBSCRIBE_SHORTCUT +WWV_FLOW_COPY_PAGE. +WWV_FLOW_COPY_PAGE.A_REGION +WWV_FLOW_COPY_PAGE.CHANGE_ITEM_NAME +WWV_FLOW_COPY_PAGE.CHANGE_PAGE_ID_IN_BRANCH +WWV_FLOW_COPY_PAGE.COPY +WWV_FLOW_COPY_PAGE.COPY_FROM_OTHER_APP +WWV_FLOW_COPY_PAGE.WEB_SERVICES +WWV_FLOW_COPY_PAGE_ITEM. +WWV_FLOW_COPY_UTIL. +WWV_FLOW_COPY_UTIL.COPY_AUTH_SETUP +WWV_FLOW_COPY_UTIL.COPY_NAVBAR +WWV_FLOW_COPY_UTIL.COPY_SECURITY_SCHEME +WWV_FLOW_COPY_UTIL.COPY_SHORTCUT +WWV_FLOW_CREATE_APP_FROM_QUERY. +WWV_FLOW_CREATE_APP_FROM_QUERY.CREATE_MULTI_PAGE_APP +WWV_FLOW_CREATE_APP_FROM_QUERY.CREATE_SINGLE_PAGE_APP +WWV_FLOW_CREATE_MODEL_APP. +WWV_FLOW_CREATE_MODEL_APP.CREATE_MODULES +WWV_FLOW_CSS_API. +WWV_FLOW_CSS_API.NEW_CSS_REPOSITORY_RECORD +WWV_FLOW_CSS_API.REMOVE_CSS +WWV_FLOW_CSS_API_PRIVATE. +WWV_FLOW_CSS_API_PRIVATE.NEW_CSS_REPOSITORY_RECORD +WWV_FLOW_CSS_API_PRIVATE.PROCESS_NEW_CSS +WWV_FLOW_CSS_API_PRIVATE.REMOVE_CSS +WWV_FLOW_CSS_API_PRIVATE.UPDATE_CSS +WWV_FLOW_CUSTOMIZE. +WWV_FLOW_CUSTOMIZE.ACCEPT +WWV_FLOW_CUSTOMIZE.GET_LINK +WWV_FLOW_CUSTOMIZE.SHOW +WWV_FLOW_CUSTOM_AUTH. +WWV_FLOW_CUSTOM_AUTH.CURRENT_PAGE_IS_PUBLIC +WWV_FLOW_CUSTOM_AUTH.DEFINE_USER_SESSION +WWV_FLOW_CUSTOM_AUTH.FLOW_PAGE_ITEM_EXISTS +WWV_FLOW_CUSTOM_AUTH.GET_NEXT_SESSION_ID +WWV_FLOW_CUSTOM_AUTH.GET_SECURITY_GROUP_ID +WWV_FLOW_CUSTOM_AUTH.GET_SESSION_ID +WWV_FLOW_CUSTOM_AUTH.GET_USER +WWV_FLOW_CUSTOM_AUTH.REMEMBER_DEEP_LINK +WWV_FLOW_CUSTOM_AUTH.SESSION_ID_EXISTS +WWV_FLOW_CUSTOM_AUTH.SET_SESSION_ID +WWV_FLOW_CUSTOM_AUTH.SET_SESSION_ID_TO_NEXT_VALUE +WWV_FLOW_CUSTOM_AUTH.SET_USER +WWV_FLOW_CUSTOM_AUTH_LDAP. +WWV_FLOW_CUSTOM_AUTH_LDAP.AUTHENTICATE +WWV_FLOW_CUSTOM_AUTH_STD. +WWV_FLOW_CUSTOM_AUTH_STD.AUTHENTICATION_STATUS +WWV_FLOW_CUSTOM_AUTH_STD.FLOWCHART_LOGIN +WWV_FLOW_CUSTOM_AUTH_STD.FLOWCHART_PERPAGE +WWV_FLOW_CUSTOM_AUTH_STD.GET_COOKIE_PROPS +WWV_FLOW_CUSTOM_AUTH_STD.GET_LDAP_PROPS +WWV_FLOW_CUSTOM_AUTH_STD.GET_SESSION_ID_FROM_COOKIE +WWV_FLOW_CUSTOM_AUTH_STD.GET_USERNAME +WWV_FLOW_CUSTOM_AUTH_STD.IS_SESSION_VALID +WWV_FLOW_CUSTOM_AUTH_STD.LDAP_AUTHENTICATE +WWV_FLOW_CUSTOM_AUTH_STD.LDAP_DNPREP +WWV_FLOW_CUSTOM_AUTH_STD.LOGIN +WWV_FLOW_CUSTOM_AUTH_STD.LOGIN_PAGE +WWV_FLOW_CUSTOM_AUTH_STD.LOGOUT +WWV_FLOW_CUSTOM_AUTH_STD.LOGOUT_THEN_GO_TO_PAGE +WWV_FLOW_CUSTOM_AUTH_STD.LOGOUT_THEN_GO_TO_URL +WWV_FLOW_CUSTOM_AUTH_STD.MOC_LOGOUT_THEN_GO_TO_PAGE_V1 +WWV_FLOW_CUSTOM_AUTH_STD.MOC_LOGOUT_THEN_GO_TO_URL_V1 +WWV_FLOW_CUSTOM_AUTH_STD.MOC_LOGOUT_V1 +WWV_FLOW_CUSTOM_AUTH_STD.MOC_PAGE_SENTRY_V1 +WWV_FLOW_CUSTOM_AUTH_STD.PORTAL_SSO_SENTRY_V0 +WWV_FLOW_CUSTOM_AUTH_STD.PORTAL_SSO_SENTRY_V1 +WWV_FLOW_CUSTOM_AUTH_STD.POST_LOGIN +WWV_FLOW_CUSTOM_AUTH_STD.REMOVE_SESSION +WWV_FLOW_DATALOAD_XML. +WWV_FLOW_DATALOAD_XML.GETQUERYXML +WWV_FLOW_DATALOAD_XML.GETQUERYXMLPAGE +WWV_FLOW_DATALOAD_XML.LOAD_TABLE +WWV_FLOW_DATA_QUICK_FLOW. +WWV_FLOW_DATA_QUICK_FLOW.CREATE_MODULES +WWV_FLOW_DEVELOPER_TOOLBAR. +WWV_FLOW_DEVELOPER_TOOLBAR.SHOW_TOOLBAR +WWV_FLOW_DISP_PAGE_PLUGS. +WWV_FLOW_DISP_PAGE_PLUGS.DISPLAY_PAGE_PLUGS +WWV_FLOW_DISP_PAGE_PLUGS.DISPLAY_PLUG +WWV_FLOW_DISP_PAGE_PLUGS.DISPLAY_REPORT +WWV_FLOW_DISP_PAGE_PLUGS.GET_PAGINATION_DATA +WWV_FLOW_DISP_PAGE_PLUGS.RESET_PAGINATION_BY_PAGE +WWV_FLOW_DISP_PAGE_PLUGS.RESET_REGION_PAGINATION +WWV_FLOW_DISP_PAGE_PLUGS.SET_PAGINATION_DATA +WWV_FLOW_DISP_PAGE_PLUGS.SET_REGION_PAGINATION +WWV_FLOW_DML. +WWV_FLOW_DML.DELETE_ROW +WWV_FLOW_DML.FETCH_ROW +WWV_FLOW_DML.FETCH_ROW_MD5_CHECKSUM +WWV_FLOW_DML.GET_BLOB +WWV_FLOW_DML.GET_BLOB_DOWNLOAD +WWV_FLOW_DML.GET_BLOB_FILE +WWV_FLOW_DML.GET_BLOB_FILE_SRC +WWV_FLOW_DML.GET_BLOB_FILE_SRC_AND_PK +WWV_FLOW_DML.GET_BLOB_RPT_IMG +WWV_FLOW_DML.GET_BLOB_RPT_LINK +WWV_FLOW_DML.GET_COLUMN +WWV_FLOW_DML.GET_PK1_FROM_BLOB_FMT_MASK +WWV_FLOW_DML.GET_PK2_FROM_BLOB_FMT_MASK +WWV_FLOW_DML.INSERT_ROW +WWV_FLOW_DML.PROCESS +WWV_FLOW_DML.UPDATE_ROW +WWV_FLOW_DOWNLOAD. +WWV_FLOW_DOWNLOAD.GET_PAGE_PROCESS_SOURCE +WWV_FLOW_DRAG_LAYOUT. +WWV_FLOW_DRAG_LAYOUT.SHOW_LAYOUT_REGION +WWV_FLOW_EDIT_REPORT. +WWV_FLOW_EDIT_REPORT.ADD_DERIVED_COLUMN +WWV_FLOW_EDIT_REPORT.COLUMN_HEADINGS_JAVASCRIPT +WWV_FLOW_EDIT_REPORT.GET_ALIAS_DISPLAY_NAME +WWV_FLOW_EDIT_REPORT.MOVE_COLS +WWV_FLOW_EDIT_REPORT.REMOVE_DERIVED_COLUMN +WWV_FLOW_EDIT_REPORT.UPDATE_COLUMN_DISPLAY_SEQUENCE +WWV_FLOW_EDIT_REPORT.UPDATE_PRINT_COLUMN_ATTRIBUTES +WWV_FLOW_EDIT_REPORT.UPDATE_REPORT_COLUMNS +WWV_FLOW_EDIT_REPORT.UPDATE_REPORT_COLUMN_SEQUENCE +WWV_FLOW_ELEMENT. +WWV_FLOW_ELEMENT.ADD +WWV_FLOW_EPG_INCLUDE_MODULES. +WWV_FLOW_EPG_INCLUDE_MODULES.AUTHORIZE +WWV_FLOW_EPG_INCLUDE_MOD_LOCAL. +WWV_FLOW_F4000_UTIL. +WWV_FLOW_F4000_UTIL.CHECK_PLSQL +WWV_FLOW_F4000_UTIL.COPY_LIST +WWV_FLOW_F4000_UTIL.COPY_LIST_FROM_APP +WWV_FLOW_F4000_UTIL.COUNTEM +WWV_FLOW_F4000_UTIL.CREATE_AUTH_SETUP +WWV_FLOW_F4000_UTIL.CREATE_LIST_ENTRY_AS_COPY +WWV_FLOW_F4000_UTIL.CREATE_LOGIN_PAGE +WWV_FLOW_F4000_UTIL.CREATE_LOGIN_PAGE2 +WWV_FLOW_F4000_UTIL.DEL_AUTH_SCHEME_CONF +WWV_FLOW_F4000_UTIL.GET_BUILD_OPT_UTIL +WWV_FLOW_F4000_UTIL.GET_NEXT_APP_PAGE +WWV_FLOW_F4000_UTIL.INTERACTIVE_RPT_SRC_CHANGED +WWV_FLOW_F4000_UTIL.IS_VALID_CHART_QUERY +WWV_FLOW_F4000_UTIL.IS_VALID_DIAL_CHART_QUERY +WWV_FLOW_F4000_UTIL.IS_VALID_LOV_QUERY +WWV_FLOW_F4000_UTIL.P327_CREATE_REPORT +WWV_FLOW_F4000_UTIL.POPULATE_LINK_COL +WWV_FLOW_F4000_UTIL.REQUIRE_FLOW_ID +WWV_FLOW_F4000_UTIL.RUN_BLOCK +WWV_FLOW_F4000_UTIL.RUN_DDL +WWV_FLOW_F4000_UTIL.SAVE_INTERACTIVE_RPT_REGION +WWV_FLOW_F4000_UTIL.SELECT_NUM +WWV_FLOW_F4000_UTIL.SET_DEVELOPER_PREFERENCES +WWV_FLOW_F4000_UTIL.SET_FLOW_PAGE +WWV_FLOW_F4000_UTIL.SHOW_APPLICATION_IMAGES +WWV_FLOW_F4000_UTIL.SHOW_HELP_LINK +WWV_FLOW_F4000_UTIL.SHOW_LIST_SOURCE +WWV_FLOW_F4000_UTIL.SHOW_POPUP_IMAGES +WWV_FLOW_F4000_UTIL.SHOW_REGION_TREE_SOURCE +WWV_FLOW_F4000_UTIL.SHOW_STANDARD_IMAGES +WWV_FLOW_F4000_UTIL.SHOW_WORKSPACE_IMAGES +WWV_FLOW_F4000_UTIL.VALIDATE_BLOB_MASK +WWV_FLOW_F4000_UTIL.VALIDATE_FORM_DBSOURCE +WWV_FLOW_FILE_API. +WWV_FLOW_FILE_API.BLOB_TO_VARCHAR2 +WWV_FLOW_FILE_API.CLEAN_DIRNAME +WWV_FLOW_FILE_API.CLEAN_FILENAME +WWV_FLOW_FILE_API.CREATE_FILE +WWV_FLOW_FILE_API.GET_FILE_ID +WWV_FLOW_FILE_API.NEW_FILE_OBJECT$ +WWV_FLOW_FILE_API.REMOVE_FILE +WWV_FLOW_FILE_API.SET_FILE_SECURITY_GROUP_ID +WWV_FLOW_FILE_API.VARCHAR2_TO_BLOB +WWV_FLOW_FILE_MGR. +WWV_FLOW_FILE_MGR.GET_FILE +WWV_FLOW_FILE_MGR.GET_FILE_ID +WWV_FLOW_FILE_MGR.PROCESS_DOWNLOAD +WWV_FLOW_FILE_MGR.SHOW_DOWNLOAD_FORMAT_PAGE +WWV_FLOW_FILE_MGR.SHOW_ITEM_DOWNLOAD_PAGE +WWV_FLOW_FILE_OBJECT_ID. +WWV_FLOW_FLASH_CHART. +WWV_FLOW_FLASH_CHART.CHART +WWV_FLOW_FLASH_CHART.STATIC_XML +WWV_FLOW_FLASH_CHART2. +WWV_FLOW_FLASH_CHART2.CHART +WWV_FLOW_FLASH_CHART_UTIL. +WWV_FLOW_FLASH_CHART_UTIL.FETCH_CHART_ATTR +WWV_FLOW_FLASH_CHART_UTIL.FETCH_CHART_SERIES_ATTR +WWV_FLOW_FLASH_CHART_UTIL.GET_ASYNCH_UPDATE_JS +WWV_FLOW_FLASH_CHART_UTIL.GET_FLASH_FILENAME +WWV_FLOW_FLASH_CHART_UTIL.IS_VALID_FLASH_CHART_QUERY +WWV_FLOW_FLASH_CHART_UTIL.SAVE_CHART_ATTR +WWV_FLOW_FLASH_CHART_UTIL.SAVE_CHART_SERIES_ATTR +WWV_FLOW_FLASH_CHART_UTIL.SHOW_PREVIEW +WWV_FLOW_FND_DEVELOPER_API. +WWV_FLOW_FND_DEVELOPER_API.ADMIN_NOTIFY_CHANGE_REQUEST +WWV_FLOW_FND_DEVELOPER_API.ADMIN_NOTIFY_NEW_REQUEST +WWV_FLOW_FND_DEVELOPER_API.CONVERT_TXT_TO_HTML +WWV_FLOW_FND_DEVELOPER_API.CONVERT_URLS_TO_LINKS +WWV_FLOW_FND_DEVELOPER_API.DELETE_DEVELOPER_ROLE +WWV_FLOW_FND_DEVELOPER_API.EDIT_DEVELOPER_ROLE +WWV_FLOW_FND_DEVELOPER_API.EDIT_DEVELOPER_ROLES +WWV_FLOW_FND_DEVELOPER_API.EDIT_FND_USER +WWV_FLOW_FND_DEVELOPER_API.F4050_55_PROVISION_WORKSPACE +WWV_FLOW_FND_DEVELOPER_API.F4350_73_PROVISION_WORKSPACE +WWV_FLOW_FND_DEVELOPER_API.F4550_RESET_PASSWORD +WWV_FLOW_FND_DEVELOPER_API.F4550_SEND_WORKSPACE +WWV_FLOW_FND_DEVELOPER_API.LOG_USER_AUTHENTICATION +WWV_FLOW_FND_FUNCTION. +WWV_FLOW_FND_FUNCTION.TEST +WWV_FLOW_FND_GLOBAL. +WWV_FLOW_FND_USER_API. +WWV_FLOW_FND_USER_API.CHANGE_CURRENT_USER_PW +WWV_FLOW_FND_USER_API.CHANGE_PASSWORD_ON_FIRST_USE +WWV_FLOW_FND_USER_API.CREATE_COMPANY +WWV_FLOW_FND_USER_API.CREATE_FND_USER +WWV_FLOW_FND_USER_API.CREATE_USER_FROM_FILE +WWV_FLOW_FND_USER_API.CREATE_USER_GROUP +WWV_FLOW_FND_USER_API.EDIT_FND_USER +WWV_FLOW_FND_USER_API.END_USER_ACCOUNT_DAYS_LEFT +WWV_FLOW_FND_USER_API.EXPIRE_END_USER_ACCOUNT +WWV_FLOW_FND_USER_API.EXPIRE_WORKSPACE_ACCOUNT +WWV_FLOW_FND_USER_API.EXPORT_FND_USERS +WWV_FLOW_FND_USER_API.FETCH_FND_USER +WWV_FLOW_FND_USER_API.FIND_COMPANY +WWV_FLOW_FND_USER_API.FIND_SECURITY_GROUP_ID +WWV_FLOW_FND_USER_API.GET_ACCOUNT_LOCKED_STATUS +WWV_FLOW_FND_USER_API.GET_AUTHENTICATION_RESULT +WWV_FLOW_FND_USER_API.GET_USER_ROLES +WWV_FLOW_FND_USER_API.LOCK_ACCOUNT +WWV_FLOW_FND_USER_API.PASSWORD_FIRST_USE_OCCURRED +WWV_FLOW_FND_USER_API.REMOVE_FND_USER +WWV_FLOW_FND_USER_API.RESET_PW +WWV_FLOW_FND_USER_API.SET_AUTHENTICATION_RESULT +WWV_FLOW_FND_USER_API.SET_CUSTOM_AUTH_STATUS +WWV_FLOW_FND_USER_API.UNEXPIRE_END_USER_ACCOUNT +WWV_FLOW_FND_USER_API.UNEXPIRE_WORKSPACE_ACCOUNT +WWV_FLOW_FND_USER_API.UNLOCK_ACCOUNT +WWV_FLOW_FND_USER_API.USER_IN_GROUP +WWV_FLOW_FND_USER_API.WORKSPACE_ACCOUNT_DAYS_LEFT +WWV_FLOW_FND_USER_PW_PREF. +WWV_FLOW_FOLDER_TRIG. +WWV_FLOW_FORMS. +WWV_FLOW_FORMS.DISPLAY_POSITIONAL_FORM +WWV_FLOW_FORMS.DISPLAY_TEMPLATE_FORM +WWV_FLOW_FORMS.INCREMENT_ITEM_SEQUENCE +WWV_FLOW_FORM_CONTROL. +WWV_FLOW_FORM_CONTROL.GET_NEXT_OR_PREV_INFO +WWV_FLOW_GENERATE_DDL. +WWV_FLOW_GENERATE_DDL.EXECUTE_GET_DDL +WWV_FLOW_GENERATE_DDL.EXECUTE_GET_TABLE_DDL +WWV_FLOW_GENERATE_DDL.GET_DDL +WWV_FLOW_GENERATE_TABLE_API. +WWV_FLOW_GENERATE_TABLE_API.CREATE_API +WWV_FLOW_GENERIC_ATTR. +WWV_FLOW_GENERIC_ATTR.FETCH_ATTRIBUTE +WWV_FLOW_GENERIC_ATTR.FETCH_ATTRIBUTES +WWV_FLOW_GENERIC_ATTR.SET_ATTRIBUTE +WWV_FLOW_GENERIC_ATTR.SET_ATTRIBUTES +WWV_FLOW_GEN_API2. +WWV_FLOW_GEN_API2.CREATE_CSS_SCRIPT +WWV_FLOW_GEN_API2.CREATE_CSS_SCRIPT_CLOB +WWV_FLOW_GEN_API2.CREATE_HTML_SCRIPT +WWV_FLOW_GEN_API2.CREATE_HTML_SCRIPT_CLOB +WWV_FLOW_GEN_API2.CREATE_IMAGE_SCRIPT +WWV_FLOW_GEN_API2.CREATE_IMAGE_SCRIPT_CLOB +WWV_FLOW_GEN_API2.EXPORT +WWV_FLOW_GEN_API2.EXPORT_COMP_IMAGE_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_CSS_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_FIELD_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_FLOW_IMAGE_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_HTML_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_IMAGE_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_LIST_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_PAGE_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_PARENT_TABSET +WWV_FLOW_GEN_API2.EXPORT_REGION_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_ROW_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_SCRIPT +WWV_FLOW_GEN_API2.EXPORT_TABSET +WWV_FLOW_GEN_API2.EXPORT_THEME +WWV_FLOW_GEN_HINT. +WWV_FLOW_GEN_HINT.EXPORT +WWV_FLOW_GLOBAL. +WWV_FLOW_HELP. +WWV_FLOW_HELP.CREATE_HELP_INDEX +WWV_FLOW_HELP.DROP_HELP_INDEXES +WWV_FLOW_HELP.GET_RUNTIME_DOC_PATH +WWV_FLOW_HELP.HIT_RESULT +WWV_FLOW_HELP.PARSE_SEARCH_STRING +WWV_FLOW_HELP.SHOW_GET_STARTED +WWV_FLOW_HELP.SHOW_GET_START_NAV +WWV_FLOW_HELP.SHOW_HELP +WWV_FLOW_HELP.SHOW_HELP_CONTENT +WWV_FLOW_HELP.SHOW_NAVIGATION +WWV_FLOW_HINT. +WWV_FLOW_HINT.CHECK_LOV_ISSUES +WWV_FLOW_HINT.CHECK_SCHEMA_PRIVS +WWV_FLOW_HINT.CHECK_TABLE +WWV_FLOW_HINT.COLUMN_HINT_EXISTS +WWV_FLOW_HINT.CREATE_COLUMN_HINT +WWV_FLOW_HINT.CREATE_COLUMN_HINT_PRIV +WWV_FLOW_HINT.CREATE_LOV_DATA +WWV_FLOW_HINT.CREATE_LOV_DATA_PRIV +WWV_FLOW_HINT.CREATE_NORMALIZE_HINT +WWV_FLOW_HINT.CREATE_TABLE_HINT +WWV_FLOW_HINT.CREATE_TABLE_HINT_PRIV +WWV_FLOW_HINT.DISPLAY_CONS_COLUMNS +WWV_FLOW_HINT.GEN_LOV_NAME +WWV_FLOW_HINT.GET_AGGREGATE_BY +WWV_FLOW_HINT.GET_ALIGNMENT +WWV_FLOW_HINT.GET_COL_UI_DEFAULTS +WWV_FLOW_HINT.GET_DEFAULT_VALUE +WWV_FLOW_HINT.GET_DISPLAY_AS_FORM +WWV_FLOW_HINT.GET_DISPLAY_AS_REPORT +WWV_FLOW_HINT.GET_DISPLAY_AS_TAB_FORM +WWV_FLOW_HINT.GET_DISPLAY_IN_FORM +WWV_FLOW_HINT.GET_DISPLAY_IN_REPORT +WWV_FLOW_HINT.GET_DISPLAY_SEQ_FORM +WWV_FLOW_HINT.GET_DISPLAY_SEQ_REPORT +WWV_FLOW_HINT.GET_DISPLAY_WIDTH +WWV_FLOW_HINT.GET_FORM_MASK +WWV_FLOW_HINT.GET_FORM_REGION_TITLE +WWV_FLOW_HINT.GET_GROUP_BY +WWV_FLOW_HINT.GET_HEIGHT +WWV_FLOW_HINT.GET_ITEM_HELP +WWV_FLOW_HINT.GET_LABEL +WWV_FLOW_HINT.GET_LOV +WWV_FLOW_HINT.GET_LOV_QUERY +WWV_FLOW_HINT.GET_MAX_WIDTH +WWV_FLOW_HINT.GET_ORDER_BY_ASC_DESC +WWV_FLOW_HINT.GET_ORDER_BY_SEQ +WWV_FLOW_HINT.GET_REGION_TITLE +WWV_FLOW_HINT.GET_REPORT_MASK +WWV_FLOW_HINT.GET_REPORT_REGION_TITLE +WWV_FLOW_HINT.GET_REQUIRED +WWV_FLOW_HINT.GET_SEARCHABLE +WWV_FLOW_HINT.GET_STATIC_LOV_STRING +WWV_FLOW_HINT.GET_TABLE_UI_DEFAULTS +WWV_FLOW_HINT.REMOVE_COLUMN_HINT +WWV_FLOW_HINT.REMOVE_HINT +WWV_FLOW_HINT.REMOVE_HINT_PRIV +WWV_FLOW_HINT.REMOVE_LOV_DATA +WWV_FLOW_HINT.REMOVE_TABLE_HINT +WWV_FLOW_HINT.SYNCH_HINTS +WWV_FLOW_HINT.TABLE_HINT_EXISTS +WWV_FLOW_HINT.UPDATE_COLUMN_HINT +WWV_FLOW_HINT.UPDATE_LOV_DATA +WWV_FLOW_HINT.UPDATE_TABLE_HINT +WWV_FLOW_HOT_HTTP_LINKS. +WWV_FLOW_HTML_API. +WWV_FLOW_HTML_API.NEW_HTML_REPOSITORY_RECORD +WWV_FLOW_HTML_API.REMOVE_HTML +WWV_FLOW_HTML_API_PRIVATE. +WWV_FLOW_HTML_API_PRIVATE.NEW_HTML +WWV_FLOW_HTML_API_PRIVATE.REMOVE_HTML +WWV_FLOW_HTML_API_PRIVATE.UPDATE_HTML +WWV_FLOW_ID. +WWV_FLOW_ID.CURR_VAL +WWV_FLOW_ID.NEXT_VAL +WWV_FLOW_IMAGE_API. +WWV_FLOW_IMAGE_API.NEW_IMAGE_REPOSITORY_RECORD +WWV_FLOW_IMAGE_API.REMOVE_IMAGE +WWV_FLOW_IMAGE_API_PRIVATE. +WWV_FLOW_IMAGE_API_PRIVATE.GET_IMAGE_DETAILS +WWV_FLOW_IMAGE_API_PRIVATE.PROCESS_NEW_IMAGE +WWV_FLOW_IMAGE_API_PRIVATE.REMOVE_IMAGE +WWV_FLOW_IMAGE_GENERATOR. +WWV_FLOW_IMAGE_GENERATOR.GET_IMAGE +WWV_FLOW_IMAGE_PREFIX. +WWV_FLOW_IMP_PARSER. +WWV_FLOW_IMP_PARSER.FLOW_EXISTS +WWV_FLOW_IMP_PARSER.GET_BUILD_STATUS +WWV_FLOW_IMP_PARSER.GET_COMPONENT_MANIFEST +WWV_FLOW_IMP_PARSER.GET_CSS_NAME +WWV_FLOW_IMP_PARSER.GET_FLOW_ID +WWV_FLOW_IMP_PARSER.GET_IMAGE_NAME +WWV_FLOW_IMP_PARSER.GET_PAGE_ID +WWV_FLOW_IMP_PARSER.GET_PARSE_AS_SCHEMA +WWV_FLOW_IMP_PARSER.GET_SCHEMA_PROVISIONED +WWV_FLOW_IMP_PARSER.GET_SECURITY_GROUP_ID +WWV_FLOW_IMP_PARSER.GET_THEME_ID +WWV_FLOW_IMP_PARSER.GET_THEME_NAME +WWV_FLOW_IMP_PARSER.GET_UI_SCHEMA +WWV_FLOW_IMP_PARSER.GET_VERSION +WWV_FLOW_IMP_PARSER.GET_WORKSPACE_NAME +WWV_FLOW_IMP_PARSER.GET_WORKSPACE_SCHEMAS +WWV_FLOW_IMP_PARSER.IS_COMPANY_EXPORT +WWV_FLOW_IMP_PARSER.IS_COMPONENT_EXPORT +WWV_FLOW_IMP_PARSER.PARSE +WWV_FLOW_INIT_HTP_BUFFER. +WWV_FLOW_INSTALL_WIZARD. +WWV_FLOW_INSTALL_WIZARD.CONFIGURATION_OPTIONS +WWV_FLOW_INSTALL_WIZARD.CREATE_ACL_DDL +WWV_FLOW_INSTALL_WIZARD.DEINSTALL +WWV_FLOW_INSTALL_WIZARD.GET_EXISTING_OBJECTS +WWV_FLOW_INSTALL_WIZARD.GET_FREE_SPACE +WWV_FLOW_INSTALL_WIZARD.GET_MISSING_PRIVS +WWV_FLOW_INSTALL_WIZARD.INSTALL +WWV_FLOW_INSTALL_WIZARD.INSTALL_CONDITION +WWV_FLOW_INSTALL_WIZARD.SET_SUB_STRINGS +WWV_FLOW_INSTALL_WIZARD.UPGRADE +WWV_FLOW_INSTANCE_ADMIN. +WWV_FLOW_INSTANCE_ADMIN.ADD_SCHEMA +WWV_FLOW_INSTANCE_ADMIN.ADD_WORKSPACE +WWV_FLOW_INSTANCE_ADMIN.GET_PARAMETER +WWV_FLOW_INSTANCE_ADMIN.GET_SCHEMAS +WWV_FLOW_INSTANCE_ADMIN.REMOVE_SAVED_REPORTS +WWV_FLOW_INSTANCE_ADMIN.REMOVE_SCHEMA +WWV_FLOW_INSTANCE_ADMIN.REMOVE_WORKSPACE +WWV_FLOW_INSTANCE_ADMIN.SET_PARAMETER +WWV_FLOW_ISC. +WWV_FLOW_ISC.CURRENT_FLOW_RESTRICTED +WWV_FLOW_ISC.DEPLOYMENT_ENVIRONMENT +WWV_FLOW_ISC.VC +WWV_FLOW_ITEM. +WWV_FLOW_ITEM.CHECKBOX +WWV_FLOW_ITEM.DATE_POPUP +WWV_FLOW_ITEM.DISPLAY_AND_SAVE +WWV_FLOW_ITEM.FETCH_G_BUILD_OPTIONS_EXCLUDED +WWV_FLOW_ITEM.FETCH_G_BUILD_OPTIONS_INCLUDED +WWV_FLOW_ITEM.GET_FIRST_ROWNUM +WWV_FLOW_ITEM.HIDDEN +WWV_FLOW_ITEM.MD5 +WWV_FLOW_ITEM.MD5_CHECKSUM +WWV_FLOW_ITEM.MD5_HIDDEN +WWV_FLOW_ITEM.MRU +WWV_FLOW_ITEM.MULTI_ROW_DELETE +WWV_FLOW_ITEM.MULTI_ROW_UPDATE +WWV_FLOW_ITEM.POPUPKEY_FROM_LOV +WWV_FLOW_ITEM.POPUPKEY_FROM_QUERY +WWV_FLOW_ITEM.POPUP_FROM_LOV +WWV_FLOW_ITEM.POPUP_FROM_QUERY +WWV_FLOW_ITEM.RADIOGROUP +WWV_FLOW_ITEM.SELECT_LIST +WWV_FLOW_ITEM.SELECT_LIST_FROM_LOV +WWV_FLOW_ITEM.SELECT_LIST_FROM_LOV_XL +WWV_FLOW_ITEM.SELECT_LIST_FROM_QUERY +WWV_FLOW_ITEM.SELECT_LIST_FROM_QUERY_XL +WWV_FLOW_ITEM.TEXT +WWV_FLOW_ITEM.TEXTAREA +WWV_FLOW_ITEM.TEXT_FROM_LOV +WWV_FLOW_ITEM.TEXT_FROM_LOV_QUERY +WWV_FLOW_ITEM_COMPS. +WWV_FLOW_ITEM_HELP. +WWV_FLOW_ITEM_HELP.SHOW_HELP +WWV_FLOW_JOB. +WWV_FLOW_JOB.CLEANUP_COMPLETED_JOBS +WWV_FLOW_JOB.REMOVE_JOB +WWV_FLOW_JOB.RUN_INTERNAL_JOB +WWV_FLOW_JOB.UPDATE_SYSTEM_STATUS +WWV_FLOW_KEY. +WWV_FLOW_LANG. +WWV_FLOW_LANG.ALTER_SESSION +WWV_FLOW_LANG.FIND_LANGUAGE_PREFERENCE +WWV_FLOW_LANG.GET_CSV_CHARSET +WWV_FLOW_LANG.GET_DB_CHARSET +WWV_FLOW_LANG.GET_NLS_LANGUAGE +WWV_FLOW_LANG.GET_NLS_WINDOWS_CHARSET +WWV_FLOW_LANG.LANG +WWV_FLOW_LANG.MAP_DB_CHARSET +WWV_FLOW_LANG.MAP_IANA_CHARSET +WWV_FLOW_LANG.MAP_LANGUAGE +WWV_FLOW_LANG.MESSAGE +WWV_FLOW_LANG.MESSAGE_P +WWV_FLOW_LANG.PICK_DATE_FROM_LANGUAGE +WWV_FLOW_LANG.REPLACE_PARAM +WWV_FLOW_LANG.REPORT_LANG_TO_BROWSER +WWV_FLOW_LANG.RESET_NLS +WWV_FLOW_LANG.SET_APPLICATION_DATE_FORMAT +WWV_FLOW_LANG.SET_TRANSLATED_FLOW_AND_PAGE +WWV_FLOW_LANG.SYSTEM_MESSAGE +WWV_FLOW_LANG.SYSTEM_MESSAGE_LIT +WWV_FLOW_LANG.SYSTEM_MESSAGE_P +WWV_FLOW_LDAP. +WWV_FLOW_LDAP.AUTHENTICATE +WWV_FLOW_LDAP.GET_ALL_USER_ATTRIBUTES +WWV_FLOW_LDAP.GET_GROUPS +WWV_FLOW_LDAP.GET_GROUPS_STRING +WWV_FLOW_LDAP.GET_USER_ATTRIBUTES +WWV_FLOW_LDAP.IS_MEMBER +WWV_FLOW_LDAP.MEMBER_OF +WWV_FLOW_LDAP.MEMBER_OF2 +WWV_FLOW_LIST. +WWV_FLOW_LIST.RENDER +WWV_FLOW_LOAD_DATA. +WWV_FLOW_LOAD_DATA.BUILD_SQL +WWV_FLOW_LOAD_DATA.CLEANOUT_COLUMN_NAME +WWV_FLOW_LOAD_DATA.CREATE_CSV_COLLECTION +WWV_FLOW_LOAD_DATA.CREATE_TAB_INFO_COLLECTION +WWV_FLOW_LOAD_DATA.DATE_FORMAT +WWV_FLOW_LOAD_DATA.DE_QUOTE +WWV_FLOW_LOAD_DATA.DISPLAY_ETABLE_PROPERTY +WWV_FLOW_LOAD_DATA.DISPLAY_NTABLE_PROPERTY +WWV_FLOW_LOAD_DATA.DUMP_ASCII +WWV_FLOW_LOAD_DATA.IS_DATE +WWV_FLOW_LOAD_DATA.IS_NUMBER +WWV_FLOW_LOAD_DATA.LOAD_CSV_DATA +WWV_FLOW_LOAD_DATA.LOAD_DATA +WWV_FLOW_LOAD_DATA.VALID_FILE_EXTENSION +WWV_FLOW_LOAD_EXCEL_DATA. +WWV_FLOW_LOAD_EXCEL_DATA.CREATE_TABLE +WWV_FLOW_LOAD_EXCEL_DATA.GET_TABLE_INFO +WWV_FLOW_LOAD_EXCEL_DATA.LOAD_EXCEL_DATA +WWV_FLOW_LOAD_EXCEL_DATA.TABLE_EXISTS +WWV_FLOW_LOCK_PAGE_T2. +WWV_FLOW_LOG. +WWV_FLOW_LOG.CURRENT_LOG_NUMBER +WWV_FLOW_LOG.LOG +WWV_FLOW_LOGIN. +WWV_FLOW_LOGIN.ADMINISTRATOR +WWV_FLOW_LOGIN.AUTHENTICATE +WWV_FLOW_LOGIN.BUILDER +WWV_FLOW_LOGIN.USER_IS_DBA +WWV_FLOW_LOV_USED_ON_PAGES. +WWV_FLOW_MAIL. +WWV_FLOW_MAIL.ADD_ATTACHMENT +WWV_FLOW_MAIL.BACKGROUND +WWV_FLOW_MAIL.PUSH_QUEUE +WWV_FLOW_MAIL.PUSH_QUEUE_BACKGROUND +WWV_FLOW_MAIL.SEND +WWV_FLOW_META_DATA. +WWV_FLOW_META_DATA.FETCH_ACCEPT_BRANCH_INFO +WWV_FLOW_META_DATA.FETCH_ACCEPT_PROCESS_INFO +WWV_FLOW_META_DATA.FETCH_BUTTON_INFO +WWV_FLOW_META_DATA.FETCH_COMPUTATIONS +WWV_FLOW_META_DATA.FETCH_FLOW_INFO +WWV_FLOW_META_DATA.FETCH_G_BUILD_OPTIONS_EXCLUDED +WWV_FLOW_META_DATA.FETCH_G_BUILD_OPTIONS_INCLUDED +WWV_FLOW_META_DATA.FETCH_ICON_BAR_INFO +WWV_FLOW_META_DATA.FETCH_ITEMS_ON_NEW_INSTANCE +WWV_FLOW_META_DATA.FETCH_ITEM_INFO +WWV_FLOW_META_DATA.FETCH_PAGE_PLUGS +WWV_FLOW_META_DATA.FETCH_PROTECTED_PAGE_INFO +WWV_FLOW_META_DATA.FETCH_PUBLIC_PAGE_INFO +WWV_FLOW_META_DATA.FETCH_SHOW_BRANCH_INFO +WWV_FLOW_META_DATA.FETCH_SHOW_PROCESS_INFO +WWV_FLOW_META_DATA.FETCH_STEP_INFO +WWV_FLOW_META_DATA.FETCH_TAB_INFO +WWV_FLOW_META_DATA.FETCH_TEMPLATE_PREFERENCE +WWV_FLOW_META_DATA.FETCH_TOPLEVEL_TAB_INFO +WWV_FLOW_MIGRATE_METADATA. +WWV_FLOW_MIGRATE_METADATA.CLEANUP_MISSPELLED_TYPE +WWV_FLOW_MODEL_API. +WWV_FLOW_MODEL_API.ADD_FORM_REPORT_W_ANALYSIS +WWV_FLOW_MODEL_API.ADD_PAGE +WWV_FLOW_MODEL_API.COPY_MODEL_PAGES +WWV_FLOW_MODEL_API.GET_MODEL_ID +WWV_FLOW_MODEL_API.SET_REPORT_TO_REPORT_LINK +WWV_FLOW_MODEL_PAGE_REGIONS. +WWV_FLOW_PAGE_CACHE_API. +WWV_FLOW_PAGE_CACHE_API.CACHE_CHART_REGION +WWV_FLOW_PAGE_CACHE_API.CACHE_PAGE +WWV_FLOW_PAGE_CACHE_API.CHART_REGION_EXISTS +WWV_FLOW_PAGE_CACHE_API.COUNT_STALE_PAGES +WWV_FLOW_PAGE_CACHE_API.COUNT_STALE_REGIONS +WWV_FLOW_PAGE_CACHE_API.DISPLAY_CHART_REGION +WWV_FLOW_PAGE_CACHE_API.DISPLAY_PAGE +WWV_FLOW_PAGE_CACHE_API.DISPLAY_REGION +WWV_FLOW_PAGE_CACHE_API.GET_DATE_CACHED +WWV_FLOW_PAGE_CACHE_API.LOB_REPLACE +WWV_FLOW_PAGE_CACHE_API.PURGE_ALL +WWV_FLOW_PAGE_CACHE_API.PURGE_BY_APPLICATION +WWV_FLOW_PAGE_CACHE_API.PURGE_BY_PAGE +WWV_FLOW_PAGE_CACHE_API.PURGE_CHART_CACHE_BY_APP +WWV_FLOW_PAGE_CACHE_API.PURGE_CHART_CACHE_BY_REGION +WWV_FLOW_PAGE_CACHE_API.PURGE_EXPIRED_REGIONS +WWV_FLOW_PAGE_CACHE_API.PURGE_REGIONS_BY_APP +WWV_FLOW_PAGE_CACHE_API.PURGE_REGIONS_BY_ID +WWV_FLOW_PAGE_CACHE_API.PURGE_REGIONS_BY_NAME +WWV_FLOW_PAGE_CACHE_API.PURGE_REGIONS_BY_PAGE +WWV_FLOW_PAGE_CACHE_API.PURGE_STALE +WWV_FLOW_PAGE_CACHE_API.PURGE_STALE_REGIONS +WWV_FLOW_PAGE_CACHE_API.VERIFY_CACHE_CONDITION +WWV_FLOW_PAGE_MAP. +WWV_FLOW_PAGE_MAP.PAGE_LIST +WWV_FLOW_PAGE_MAP.PAGE_TYPE +WWV_FLOW_PAGE_MAP.SET_CURRENT_APPLICATION +WWV_FLOW_PAGE_MAP.SET_PAGE +WWV_FLOW_PLATFORM. +WWV_FLOW_PLATFORM.GET_PREFERENCE +WWV_FLOW_PLATFORM.SET_PREFERENCE +WWV_FLOW_PLSQL_EDITOR. +WWV_FLOW_PLSQL_EDITOR.COMPILE +WWV_FLOW_PLSQL_EDITOR.GET_LINES +WWV_FLOW_PLSQL_JOB. +WWV_FLOW_PLSQL_JOB.JOBS_ARE_ENABLED +WWV_FLOW_PLSQL_JOB.PURGE_PROCESS +WWV_FLOW_PLSQL_JOB.SUBMIT_PROCESS +WWV_FLOW_PLSQL_JOB.TIME_ELAPSED +WWV_FLOW_PLSQL_JOB.UPDATE_JOB_STATUS +WWV_FLOW_POPUP_LOV. +WWV_FLOW_POPUP_LOV.SHOW +WWV_FLOW_PPR_UTIL. +WWV_FLOW_PPR_UTIL.RUN_PROCESS +WWV_FLOW_PREFERENCES. +WWV_FLOW_PREFERENCES.GET_PREFERENCE +WWV_FLOW_PREFERENCES.REMOVE_FSP_SORT +WWV_FLOW_PREFERENCES.REMOVE_PREFERENCE +WWV_FLOW_PREFERENCES.REMOVE_PREFERENCES +WWV_FLOW_PREFERENCES.RESET_SORT_PREFERENCE +WWV_FLOW_PREFERENCES.SET_PREFERENCE +WWV_FLOW_PREFERENCES.SET_PREFERENCES +WWV_FLOW_PRINT_UTIL. +WWV_FLOW_PRINT_UTIL.CONVERT +WWV_FLOW_PRINT_UTIL.GET_HEADER +WWV_FLOW_PROCESS_UTILITY. +WWV_FLOW_PROCESS_UTILITY.DML_ROW_INFO +WWV_FLOW_PROCESS_UTILITY.DML_ROW_SQL +WWV_FLOW_PROCESS_UTILITY.GET_NEXT_OR_PREV_PK_INFO +WWV_FLOW_PROCESS_UTILITY.GET_NEXT_OR_PREV_PK_SQL +WWV_FLOW_PROCESS_UTILITY.MULTI_ROW_UPDATE_INFO +WWV_FLOW_PROCESS_UTILITY.MULTI_ROW_UPDATE_SQL +WWV_FLOW_PROCESS_UTILITY.SET_PREF_TO_ITEM_INFO +WWV_FLOW_PROCESS_UTILITY.SET_PREF_TO_ITEM_SQL +WWV_FLOW_PROVISION. +WWV_FLOW_PROVISION.CHANGE_PROVISIONED_STORAGE +WWV_FLOW_PROVISION.CREATE_USER +WWV_FLOW_PROVISION.DROP_USER +WWV_FLOW_PROVISION.GET_PROVISIONED_SPACE +WWV_FLOW_PROVISION.GET_RANDOM_PASSWORD +WWV_FLOW_PROVISION.GET_SPACE_CONSUMPTION +WWV_FLOW_PROVISION.GRANT_INITIAL_PRIVS +WWV_FLOW_PROVISION.IS_RESERVED +WWV_FLOW_PROVISION.PROVISION_COMPANY +WWV_FLOW_PROVISION.REMOVE_PROVISIONED_COMPANY +WWV_FLOW_PROVISION.SETUP_COMPANY_TABLESPACE +WWV_FLOW_PROVISION.SET_USER_TABLESPACE +WWV_FLOW_PROVISIONING. +WWV_FLOW_PROVISIONING.ACCEPT_REQUEST +WWV_FLOW_PROVISIONING.ADD_SCHEMA +WWV_FLOW_PROVISIONING.ADD_SCHEMA_BY_REQUEST +WWV_FLOW_PROVISIONING.AUTO_PROVISION_COMPANY +WWV_FLOW_PROVISIONING.CREATE_COOKIE_BASED_USER +WWV_FLOW_PROVISIONING.CREATE_FLOW_SUPER_USER +WWV_FLOW_PROVISIONING.DELETE_ACCEPTED_REQUEST +WWV_FLOW_PROVISIONING.DELETE_MODIFICATION_REQUEST +WWV_FLOW_PROVISIONING.DELETE_PROVISION_REQUEST +WWV_FLOW_PROVISIONING.DENY_REQUEST +WWV_FLOW_PROVISIONING.GET_SCHEMAS_BY_SGID +WWV_FLOW_PROVISIONING.GET_TABLESPACES_BY_SGID +WWV_FLOW_PROVISIONING.INSTALL_DEMO_TABLES +WWV_FLOW_PROVISIONING.MAKE_MODIFICATION_REQUEST +WWV_FLOW_PROVISIONING.MAKE_REQUEST +WWV_FLOW_PROVISIONING.PRE_PROCESS_REQUEST +WWV_FLOW_PROVISIONING.PROVISION_ACCEPT_REQUEST +WWV_FLOW_PROVISIONING.PROVISION_REQUEST +WWV_FLOW_PROVISIONING.PROVISION_STORAGE_BY_REQUEST +WWV_FLOW_PROVISIONING.REJECT_MODIFICATION_REQUEST +WWV_FLOW_PROVISIONING.REMOVE_DEMO_TABLES +WWV_FLOW_PROVISIONING.REMOVE_SCHEMA +WWV_FLOW_PROVISIONING.REMOVE_SCHEMA_BY_REQUEST +WWV_FLOW_PROVISIONING.RESERVED_SCHEMA +WWV_FLOW_PROVISIONING.RESERVED_SCHEMA_I +WWV_FLOW_PROVISIONING.RESET_PASSWORD +WWV_FLOW_PROVISIONING.RESET_SCHEMA_PASSWORD +WWV_FLOW_PROVISIONING.RESTRICTED_SCHEMA +WWV_FLOW_PROVISIONING.RESTRICTED_SCHEMA_I +WWV_FLOW_PROVISIONING.SITE_ADMIN_IS_RESTRICTED +WWV_FLOW_PROVISIONING.SITE_ADMIN_IS_RESTRICTED_I +WWV_FLOW_PROVISIONING.TERMINATE_SERVICE +WWV_FLOW_PROVISIONING.TERMINATE_SERVICE_BY_SGID +WWV_FLOW_PROVISIONING.TOTAL_CHANGE_REQUESTS +WWV_FLOW_PROVISIONING.TOTAL_OPEN_CHANGE_REQUESTS +WWV_FLOW_PROVISIONING.TOTAL_OPEN_SERVICE_REQUESTS +WWV_FLOW_PROVISIONING.TOTAL_SERVICE_REQUESTS +WWV_FLOW_PROVISIONING.VALIDATE_SCHEMA_NAME +WWV_FLOW_PURGED_SESS_BIU. +WWV_FLOW_QUERY_API. +WWV_FLOW_QUERY_API.ADD_COLUMNS +WWV_FLOW_QUERY_API.CREATE_COLLECTION +WWV_FLOW_QUERY_API.CREATE_CONDITIONS +WWV_FLOW_QUERY_API.CREATE_STRUCTURED_QUERY +WWV_FLOW_QUERY_API.DELETE_STRUCTURED_QUERY +WWV_FLOW_QUERY_API.GET_ALIAS +WWV_FLOW_QUERY_API.GET_CONDITIONS +WWV_FLOW_QUERY_API.GET_STRUCTURED_QUERY +WWV_FLOW_QUERY_API.PARSE_CONDITIONS +WWV_FLOW_QUERY_API.REORDER_COLUMNS +WWV_FLOW_QUERY_API.UPDATE_JOINS +WWV_FLOW_QUERY_API.UPDATE_QUERY_SQL +WWV_FLOW_QUERY_API.UPDATE_STRUCTURED_QUERY +WWV_FLOW_QUERY_BUILDER. +WWV_FLOW_QUERY_BUILDER.CHECK_PRIV +WWV_FLOW_QUERY_BUILDER.LOADQUERY +WWV_FLOW_QUERY_BUILDER.RENDERCLONEROW +WWV_FLOW_QUERY_BUILDER.RENDERTABLEV2 +WWV_FLOW_RANDOM. +WWV_FLOW_RANDOM.GET_RAND +WWV_FLOW_RANDOM.GET_RAND_MAX +WWV_FLOW_RANDOM.RAND +WWV_FLOW_RANDOM.RAND_MAX +WWV_FLOW_RANDOM.SRAND +WWV_FLOW_REGEXP. +WWV_FLOW_REGEXP.IS_INSTR +WWV_FLOW_REGEXP.IS_SUPPORTED +WWV_FLOW_REGION_LAYOUT. +WWV_FLOW_REGION_LAYOUT.PAGE_PROCESSING_ICONS +WWV_FLOW_REGION_LAYOUT.PAGE_RENDERING_ICONS +WWV_FLOW_REGION_LAYOUT.PAGE_TEMP_SUBSTITUTION +WWV_FLOW_REGION_LAYOUT.REGION_TEMP_SUBSTITUTION +WWV_FLOW_REGION_LAYOUT.SET_LOCK_STATUS +WWV_FLOW_REGION_LAYOUT.SET_MOST_RECENTLY_EDITED +WWV_FLOW_REGION_LAYOUT.SHARED_COMPONENT_ICONS +WWV_FLOW_REGION_LAYOUT.SHOW_APEX_HOME_PG_ELINK +WWV_FLOW_REGION_LAYOUT.SHOW_ON_ACCEPT_FLOW +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_COMPUTATIONS +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_FLOW +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_PAGE +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_PROCESSES +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_REGIONS +WWV_FLOW_REGION_LAYOUT.SHOW_ON_SUBMIT_BRANCH +WWV_FLOW_REGION_LAYOUT.SHOW_ON_SUBMIT_COMP +WWV_FLOW_REGION_LAYOUT.SHOW_ON_SUBMIT_PROC +WWV_FLOW_REGION_LAYOUT.SHOW_ON_SUBMIT_VAL +WWV_FLOW_REGION_LAYOUT.SHOW_PAGE_BUTTONS +WWV_FLOW_REGION_LAYOUT.SHOW_PAGE_ITEMS +WWV_FLOW_REGION_LAYOUT.SHOW_PAGE_TEMPLATE +WWV_FLOW_REGION_LAYOUT.SHOW_REGION_TEMPLATE +WWV_FLOW_REGION_LAYOUT.SHOW_RELATED_PAGES_REPORT +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_BC +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_LISTS +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_LOV +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_NAVBAR +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_SECURITY +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_TABS +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_TEMPLATES +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_THEME +WWV_FLOW_REGION_LAYOUT.SHOW_TITLE +WWV_FLOW_REGION_TREE. +WWV_FLOW_REGION_TREE.SHOW_TREE +WWV_FLOW_RENDER_QUERY. +WWV_FLOW_RENDER_QUERY.GET_REPORT +WWV_FLOW_RENDER_QUERY.GET_REPORT_QUERY +WWV_FLOW_RENDER_QUERY.PRINT +WWV_FLOW_RENDER_QUERY.PRINT_INTERACTIVE_REPORT +WWV_FLOW_RENDER_QUERY.PRINT_REPORT_QUERY +WWV_FLOW_RENDER_QUERY.PRINT_WITH_BINDS +WWV_FLOW_RENDER_SHORTCUT. +WWV_FLOW_RENDER_SHORTCUT.DO_SORTCUTS_EXIST +WWV_FLOW_RENDER_SHORTCUT.EXPAND_SHORTCUTS +WWV_FLOW_RESTRICTED_SCHEMA_BIU. +WWV_FLOW_RPT_STD_MSG. +WWV_FLOW_RPT_STD_MSG.INIT +WWV_FLOW_RSCHEMA_EXCEPTION_BIU. +WWV_FLOW_SAMPLE_APP. +WWV_FLOW_SAMPLE_APP.CREATE_SAMPLE_APP +WWV_FLOW_SAMPLE_APP.CREATE_TABLES +WWV_FLOW_SAMPLE_APP.LOAD_PRODUCT_INFO +WWV_FLOW_SAMPLE_APP.POPULATE_TABLES +WWV_FLOW_SAMPLE_APP.REMOVE_AND_CREATE_SAMPLE_APP +WWV_FLOW_SAMPLE_APP.REMOVE_SAMPLE_APP +WWV_FLOW_SAMPLE_APP.REMOVE_TABLES +WWV_FLOW_SC_TRANSACTIONS. +WWV_FLOW_SC_TRANSACTIONS.ADD_TRANS +WWV_FLOW_SC_TRANSACTIONS.SC_JOB +WWV_FLOW_SC_TRANSACTIONS.SET_ACTION +WWV_FLOW_SC_TRANSACTIONS.SET_CLIENT +WWV_FLOW_SC_TRANSACTIONS.SET_IDENTIFIER +WWV_FLOW_SC_TRANSACTIONS.SET_MOD +WWV_FLOW_SC_TRANS_BI. +WWV_FLOW_SECURITY. +WWV_FLOW_SECURITY.AUTHENTICATE +WWV_FLOW_SECURITY.AUTHENTICATED_SESSION +WWV_FLOW_SECURITY.CHECK_DB_PASSWORD +WWV_FLOW_SECURITY.CHECK_INSTANCE_OWNER +WWV_FLOW_SECURITY.COOKIE_AUTH_LOGOUT +WWV_FLOW_SECURITY.COOKIE_SESSION +WWV_FLOW_SECURITY.COOKIE_USER +WWV_FLOW_SECURITY.CREATE_FND_USER +WWV_FLOW_SECURITY.CREATE_NEW_SESSION +WWV_FLOW_SECURITY.CRYPTO_MAC_MD5 +WWV_FLOW_SECURITY.CRYPTO_RANDOMBYTES +WWV_FLOW_SECURITY.CRYPTO_RANDOMNUMBER +WWV_FLOW_SECURITY.CURRENT_COMPANY_CAN_BUILD +WWV_FLOW_SECURITY.CURRENT_COMPANY_CAN_PARSE +WWV_FLOW_SECURITY.DECODE_KEY +WWV_FLOW_SECURITY.DECRYPT +WWV_FLOW_SECURITY.DECRYPT_SESSION_VALUE +WWV_FLOW_SECURITY.DECRYTP_WALLET_PWD +WWV_FLOW_SECURITY.DETERMINE_COOKIE_AUTH_USER +WWV_FLOW_SECURITY.DISABLE_ADMIN_LOGIN +WWV_FLOW_SECURITY.DISABLE_WORKSPACE_LOGIN +WWV_FLOW_SECURITY.ENCODE_KEY +WWV_FLOW_SECURITY.ENCRYPT +WWV_FLOW_SECURITY.ENCRYPT_SESSION_VALUE +WWV_FLOW_SECURITY.ENCRYPT_WALLET_PWD +WWV_FLOW_SECURITY.EXEC_CUSTOM2_AUTH +WWV_FLOW_SECURITY.EXEC_CUSTOM_AUTH +WWV_FLOW_SECURITY.EXEC_CUSTOM_AUTH_SETUPS +WWV_FLOW_SECURITY.FIND_COMPANY_NAME +WWV_FLOW_SECURITY.FIND_FIRST_SCHEMA +WWV_FLOW_SECURITY.FIND_SECURITY_GROUP_ID +WWV_FLOW_SECURITY.FLOW_OWNER +WWV_FLOW_SECURITY.GET_ASFCOOKIE +WWV_FLOW_SECURITY.GET_EXPIRED_USER_NAME +WWV_FLOW_SECURITY.GET_EXPIRED_USER_SGID +WWV_FLOW_SECURITY.GET_FLOW_ID +WWV_FLOW_SECURITY.GET_FND_USER_ID +WWV_FLOW_SECURITY.GET_HASHED_SESSION_ID +WWV_FLOW_SECURITY.GET_SECURITY_GROUP_ID +WWV_FLOW_SECURITY.GET_TRANSLATED_FLOW_ID +WWV_FLOW_SECURITY.HASH_SESSION_ID +WWV_FLOW_SECURITY.INTERNAL_PAGE_SENTRY +WWV_FLOW_SECURITY.IP_CHECK +WWV_FLOW_SECURITY.PREP_URL +WWV_FLOW_SECURITY.PURGE_EXPIRED_USER_HEADER +WWV_FLOW_SECURITY.REMOVE_FND_USER +WWV_FLOW_SECURITY.REMOVE_SESSION +WWV_FLOW_SECURITY.RESET_APP_CHECKSUM_SALT +WWV_FLOW_SECURITY.RUN_FLOW +WWV_FLOW_SECURITY.SESSION_COOKIE_INFO_INTERNAL +WWV_FLOW_SECURITY.SET_SESSION_LIFETIME_SECONDS +WWV_FLOW_SECURITY.SET_SESSION_MAX_IDLE_SECONDS +WWV_FLOW_SECURITY.SHOW_COOKIE +WWV_FLOW_SECURITY.STRONG_PASSWORD_CHECK +WWV_FLOW_SECURITY.STRONG_PASSWORD_VALIDATION +WWV_FLOW_SECURITY.UPDATE_FND_USER +WWV_FLOW_SECURITY.USER_BUILDER_SESSION_COMPANY +WWV_FLOW_SECURITY.USER_CAN_DEVELOP_ANY_FLOW +WWV_FLOW_SECURITY.USER_CAN_DEVELOP_CURRENT_FLOW +WWV_FLOW_SECURITY.USER_CAN_DEVELOP_FLOW +WWV_FLOW_SECURITY.USER_IS_INTERNAL +WWV_FLOW_SECURITY.VERIFY_NOTIFY_MSG_CHECKSUM +WWV_FLOW_SECURITY.VERIFY_PRINT_MSG_CHECKSUM +WWV_FLOW_SEED_TRANSLATIONS. +WWV_FLOW_SERIES_ATTR. +WWV_FLOW_SERIES_ATTR.DELETE_ATTRIBUTES +WWV_FLOW_SERIES_ATTR.FETCH_ATTRIBUTE +WWV_FLOW_SERIES_ATTR.FETCH_ATTRIBUTES +WWV_FLOW_SERIES_ATTR.FETCH_ATTRIBUTE_IN_ARRAY +WWV_FLOW_SERIES_ATTR.SET_ATTRIBUTE +WWV_FLOW_SERIES_ATTR.SET_ATTRIBUTES +WWV_FLOW_SESSIONS$_T1. +WWV_FLOW_SESSION_MON. +WWV_FLOW_SESSION_MON.HIGHLIGHT_PLAN_IND_COLS +WWV_FLOW_SESSION_MON.POPULATE_STATS_ARRAY +WWV_FLOW_SESSION_MON.POPULATE_SYS_STATS_ARRAY +WWV_FLOW_SVG. +WWV_FLOW_SVG.CHART +WWV_FLOW_SVG.GET_SHARED_STYLES +WWV_FLOW_SVG.INIT_COLORS +WWV_FLOW_SVG.MIGRATE_SVG_TO_FLASH +WWV_FLOW_SVG.SET_ATTRIBUTES +WWV_FLOW_SW_API. +WWV_FLOW_SW_API.ARRAY_ELEMENT +WWV_FLOW_SW_API.CHECK_PRIV +WWV_FLOW_SW_API.CHECK_PRIV_OBJECT +WWV_FLOW_SW_API.CREATE_PLAN_TABLE +WWV_FLOW_SW_API.CREATE_RECORD +WWV_FLOW_SW_API.CREATE_SW_QBE_COLLECTION +WWV_FLOW_SW_API.DELETE_RECORD +WWV_FLOW_SW_API.DISPLAY_ERROR_MSG +WWV_FLOW_SW_API.EXPLAIN_PLAN +WWV_FLOW_SW_API.FORMAT_COL_VALUE +WWV_FLOW_SW_API.GEN_QUERY +WWV_FLOW_SW_API.GEN_ROW_MD5 +WWV_FLOW_SW_API.GET_BINDS +WWV_FLOW_SW_API.PERFORM_BINDS +WWV_FLOW_SW_API.REGISTER_NLS_LANG +WWV_FLOW_SW_API.RUN_SQL +WWV_FLOW_SW_API.RUN_SQL_ARR +WWV_FLOW_SW_API.SAVE_HISTORY +WWV_FLOW_SW_API.UPDATE_RECORD +WWV_FLOW_SW_API.VALID_WORKSPACE_SCHEMA +WWV_FLOW_SW_OBJECT_FEED. +WWV_FLOW_SW_OBJECT_FEED.GETMOREOBJECTS +WWV_FLOW_SW_PAGE_CALLS. +WWV_FLOW_SW_PAGE_CALLS.DISABLE_INDEX +WWV_FLOW_SW_PAGE_CALLS.DISABLE_TRIGGER +WWV_FLOW_SW_PAGE_CALLS.DO_COMPILE +WWV_FLOW_SW_PAGE_CALLS.EDIT_ROW +WWV_FLOW_SW_PAGE_CALLS.ENABLE_TRIGGER +WWV_FLOW_SW_PAGE_CALLS.PURGE_OBJECT +WWV_FLOW_SW_PAGE_CALLS.PURGE_RECYCLEBIN +WWV_FLOW_SW_PAGE_CALLS.REBUILD_INDEX +WWV_FLOW_SW_PAGE_CALLS.RESTORE_OBJECT +WWV_FLOW_SW_PAGE_CALLS.RUN_DDL +WWV_FLOW_SW_PAGE_CALLS.SQL_RESULTS +WWV_FLOW_SW_PAGE_CALLS.TEST_DBLINK +WWV_FLOW_SW_PAGE_CALLS.UPDATE_COMMENT +WWV_FLOW_SW_PARSER. +WWV_FLOW_SW_PARSER.PARSED +WWV_FLOW_SW_PARSER.PARSE_CLOB +WWV_FLOW_SW_PARSER.PARSE_FILE +WWV_FLOW_SW_SCRIPT. +WWV_FLOW_SW_SCRIPT.ARRAY_ELEMENT +WWV_FLOW_SW_SCRIPT.CANCEL_SCRIPT +WWV_FLOW_SW_SCRIPT.CHUNK_LINES +WWV_FLOW_SW_SCRIPT.CLEAN_OUT_ORPHAN_LONG_OP +WWV_FLOW_SW_SCRIPT.CREATE_SCRIPT_FILE +WWV_FLOW_SW_SCRIPT.CREATE_SCRIPT_FROM_CLOB +WWV_FLOW_SW_SCRIPT.DELETE_FILE +WWV_FLOW_SW_SCRIPT.DISPLAY_INVALID_STMT +WWV_FLOW_SW_SCRIPT.DISPLAY_RUN_CONFIRM +WWV_FLOW_SW_SCRIPT.DRAW_QUOTAMETER +WWV_FLOW_SW_SCRIPT.DRAW_QUOTAMETER2 +WWV_FLOW_SW_SCRIPT.ESCAPE_SC_CLOB +WWV_FLOW_SW_SCRIPT.GETLENGTHB +WWV_FLOW_SW_SCRIPT.GET_FAILURE_CNT +WWV_FLOW_SW_SCRIPT.GET_FREE_SPACE +WWV_FLOW_SW_SCRIPT.GET_SUCCESS_CNT +WWV_FLOW_SW_SCRIPT.INVALID_SCRIPT +WWV_FLOW_SW_SCRIPT.PRINT_CLOB +WWV_FLOW_SW_SCRIPT.PRINT_RESULT +WWV_FLOW_SW_SCRIPT.PRINT_STMT +WWV_FLOW_SW_SCRIPT.RUN_FILE +WWV_FLOW_SW_SCRIPT.SAVE_FILE_ATTRIB +WWV_FLOW_SW_SCRIPT.SCRIPT_W_WARNING +WWV_FLOW_SW_SCRIPT.SUBMIT_TO_RUN +WWV_FLOW_SW_SCRIPT.UPDATE_SCRIPT_FILE +WWV_FLOW_SW_SCRIPT.VALID_SCRIPT_NAME +WWV_FLOW_SW_UPGRADE. +WWV_FLOW_SW_UPGRADE.SW_ARCHIVE_CLEANUP +WWV_FLOW_SW_UPGRADE.SW_CTRL_FILE_CLEANUP +WWV_FLOW_SW_UPGRADE.SW_SCRIPT_NAME_CLEANUP +WWV_FLOW_SW_UTIL. +WWV_FLOW_SW_UTIL.CREATE_PACKAGE +WWV_FLOW_SW_UTIL.GENERATE_PK_NAME +WWV_FLOW_SW_UTIL.GENERATE_SEQ_NAME +WWV_FLOW_SW_UTIL.GET_ALTERTABLE_DDL +WWV_FLOW_SW_UTIL.GET_ANALYZE_DDL +WWV_FLOW_SW_UTIL.GET_CONST_DDL +WWV_FLOW_SW_UTIL.GET_COPYTBL_DDL +WWV_FLOW_SW_UTIL.GET_DBLINK_DDL +WWV_FLOW_SW_UTIL.GET_DDL +WWV_FLOW_SW_UTIL.GET_DROP_DDL +WWV_FLOW_SW_UTIL.GET_FOREIGN_KEY_DDL +WWV_FLOW_SW_UTIL.GET_FUNCTION_DDL +WWV_FLOW_SW_UTIL.GET_INDEX_DDL +WWV_FLOW_SW_UTIL.GET_OBJECT_INFO +WWV_FLOW_SW_UTIL.GET_PACKAGEBODY_DDL +WWV_FLOW_SW_UTIL.GET_PACKAGE_DDL +WWV_FLOW_SW_UTIL.GET_PK_POSITION +WWV_FLOW_SW_UTIL.GET_ROW_CNT +WWV_FLOW_SW_UTIL.GET_SEQUENCE_DDL +WWV_FLOW_SW_UTIL.GET_SYNONYM_DDL +WWV_FLOW_SW_UTIL.GET_TRIGGER2_DDL +WWV_FLOW_SW_UTIL.GET_VIEW_DDL +WWV_FLOW_SW_UTIL.IS_AVAILABLE_NAME +WWV_FLOW_SW_UTIL.IS_AVAILABLE_NAME2 +WWV_FLOW_SW_UTIL.IS_DATABASE_RESERVED_WORD +WWV_FLOW_SW_UTIL.IS_RESERVED +WWV_FLOW_SW_UTIL.IS_VALID_NAME +WWV_FLOW_SW_UTIL.IS_WRAPPED +WWV_FLOW_SW_UTIL.PICK_PK +WWV_FLOW_SW_UTIL.RUN_BLOCK +WWV_FLOW_SW_UTIL.RUN_DDL +WWV_FLOW_SW_UTIL.RUN_OTHER_SQL +WWV_FLOW_SW_UTIL.RUN_SQL +WWV_FLOW_SW_UTIL.SHOW_PLSQL_EDIT +WWV_FLOW_SW_UTIL.TABLE_EXISTS +WWV_FLOW_SYNC_TRANSLATIONS. +WWV_FLOW_TABLE_DRILL. +WWV_FLOW_TABLE_DRILL.BUILD_SQL +WWV_FLOW_TABLE_DRILL.BUILD_VIEW_SQL +WWV_FLOW_TABLE_DRILL.DRAW_DATA_MODEL +WWV_FLOW_TAB_MGR. +WWV_FLOW_TAB_MGR.MOVE_TAB_NEW_PTAB +WWV_FLOW_TAB_MGR.MOVE_TAB_NEW_TABSET +WWV_FLOW_TAB_MGR.TABS +WWV_FLOW_TAB_MGR.UPDATE_TAB_PAGES +WWV_FLOW_TEMP. +WWV_FLOW_TEMP.INIT +WWV_FLOW_TEMPLATES_UTIL. +WWV_FLOW_TEMPLATES_UTIL.BREADCRUMB_TEMPLATE_SUB_STR +WWV_FLOW_TEMPLATES_UTIL.BUTTON_TEMPLATE_SUB_STR +WWV_FLOW_TEMPLATES_UTIL.COPY_BUTTON_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_CALENDAR_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_FIELD_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_LIST_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_MENU_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_PLUG +WWV_FLOW_TEMPLATES_UTIL.COPY_POPUP_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_ROW_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.FETCH_TAB_INFO +WWV_FLOW_TEMPLATES_UTIL.GET_FOOTER +WWV_FLOW_TEMPLATES_UTIL.GET_HEADER +WWV_FLOW_TEMPLATES_UTIL.GET_PAGE_TEMPLATE_NAME +WWV_FLOW_TEMPLATES_UTIL.GET_TEMPLATE_ID +WWV_FLOW_TEMPLATES_UTIL.GET_USER_TEMPLATE_PREFERENCE +WWV_FLOW_TEMPLATES_UTIL.LABEL_TEMPLATE_SUB_STR +WWV_FLOW_TEMPLATES_UTIL.LIST_TEMPLATE_SUB_STR +WWV_FLOW_TEMPLATES_UTIL.PAGE_TEMPLATE_POPUP_PREVIEW +WWV_FLOW_TEMPLATES_UTIL.PAGE_TEMPLATE_UTILIZATION +WWV_FLOW_TEMPLATES_UTIL.REPLACE_BUTTON_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_CALENDAR_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_FIELD_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_LIST_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_MENU_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_POPUP_LOV_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_REGION_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_REPORT_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.SET_PAGE_REGION_NAMES_2_IDS +WWV_FLOW_TEMPLATES_UTIL.SET_PAGE_TEMPLATE_NAMES_2_IDS +WWV_FLOW_TEMPLATES_UTIL.SET_USER_TEMPLATE_PREFERENCE +WWV_FLOW_THEME_1. +WWV_FLOW_THEME_1.CREATE_THEME +WWV_FLOW_THEME_10. +WWV_FLOW_THEME_10.CREATE_THEME +WWV_FLOW_THEME_11. +WWV_FLOW_THEME_11.CREATE_THEME +WWV_FLOW_THEME_12. +WWV_FLOW_THEME_12.CREATE_THEME +WWV_FLOW_THEME_13. +WWV_FLOW_THEME_13.CREATE_THEME +WWV_FLOW_THEME_14. +WWV_FLOW_THEME_14.CREATE_THEME +WWV_FLOW_THEME_15. +WWV_FLOW_THEME_15.CREATE_THEME +WWV_FLOW_THEME_16. +WWV_FLOW_THEME_16.CREATE_THEME +WWV_FLOW_THEME_17. +WWV_FLOW_THEME_17.CREATE_THEME +WWV_FLOW_THEME_18. +WWV_FLOW_THEME_18.CREATE_THEME +WWV_FLOW_THEME_19. +WWV_FLOW_THEME_19.CREATE_THEME +WWV_FLOW_THEME_2. +WWV_FLOW_THEME_2.CREATE_THEME +WWV_FLOW_THEME_20. +WWV_FLOW_THEME_20.CREATE_THEME +WWV_FLOW_THEME_3. +WWV_FLOW_THEME_3.CREATE_THEME +WWV_FLOW_THEME_4. +WWV_FLOW_THEME_4.CREATE_THEME +WWV_FLOW_THEME_5. +WWV_FLOW_THEME_5.CREATE_THEME +WWV_FLOW_THEME_6. +WWV_FLOW_THEME_6.CREATE_THEME +WWV_FLOW_THEME_7. +WWV_FLOW_THEME_7.CREATE_THEME +WWV_FLOW_THEME_8. +WWV_FLOW_THEME_8.CREATE_THEME +WWV_FLOW_THEME_9. +WWV_FLOW_THEME_9.CREATE_THEME +WWV_FLOW_THEME_FILES. +WWV_FLOW_THEME_FILES.FIND_CSS_CLASSES +WWV_FLOW_THEME_FILES.FIND_OBJECT_DEPENDENCIES +WWV_FLOW_THEME_FILES.FIND_SUBSTITUTION_STRINGS +WWV_FLOW_THEME_FILES.FIND_TEMPLATE_FILES +WWV_FLOW_THEME_FILES.GET_THEME_IMAGE_NAME +WWV_FLOW_THEME_GLOBALS. +WWV_FLOW_THEME_MANAGER. +WWV_FLOW_THEME_MANAGER.ADD_THEME_TO_APPLICATION +WWV_FLOW_THEME_MANAGER.CHANGE_PUBLIC_THEME +WWV_FLOW_THEME_MANAGER.CHANGE_WORKSPACE_THEME +WWV_FLOW_THEME_MANAGER.CONSOLIDATE_TEMPLATES +WWV_FLOW_THEME_MANAGER.COPY_THEME +WWV_FLOW_THEME_MANAGER.COUNT_CONSOLIDATION +WWV_FLOW_THEME_MANAGER.CREATE_NEW_PUBLIC_THEME +WWV_FLOW_THEME_MANAGER.CREATE_NEW_WORKSPACE_THEME +WWV_FLOW_THEME_MANAGER.DELETE_PUBLIC_THEME +WWV_FLOW_THEME_MANAGER.DELETE_THEME +WWV_FLOW_THEME_MANAGER.DELETE_WORKSPACE_THEME +WWV_FLOW_THEME_MANAGER.F4000_PROCESS_THEME_IMAGE +WWV_FLOW_THEME_MANAGER.GET_BUTTON_POSTION +WWV_FLOW_THEME_MANAGER.GET_BUTTON_UTIL +WWV_FLOW_THEME_MANAGER.GET_CAL_UTIL +WWV_FLOW_THEME_MANAGER.GET_FIELD_UTIL +WWV_FLOW_THEME_MANAGER.GET_LIST_UTIL +WWV_FLOW_THEME_MANAGER.GET_MENU_UTIL +WWV_FLOW_THEME_MANAGER.GET_NEW_THEME_ID +WWV_FLOW_THEME_MANAGER.GET_PAGE_UTIL +WWV_FLOW_THEME_MANAGER.GET_REGION_UTIL +WWV_FLOW_THEME_MANAGER.GET_REPORT_UTIL +WWV_FLOW_THEME_MANAGER.GET_THEME_IMAGE_ICON +WWV_FLOW_THEME_MANAGER.INITIALIZE_FLOW +WWV_FLOW_THEME_MANAGER.RENUMBER_THEME +WWV_FLOW_THEME_MANAGER.SET_DEFAULTS +WWV_FLOW_THEME_MANAGER.SET_GLOBALS +WWV_FLOW_THEME_MANAGER.SWITCH_THEME +WWV_FLOW_THEME_MANAGER.SWITCH_THEME_DEFAULTS +WWV_FLOW_TRANSLATION_UTILITIES. +WWV_FLOW_TREE. +WWV_FLOW_TREE.BUILD +WWV_FLOW_TREE.CONTRACT +WWV_FLOW_TREE.EXPAND +WWV_FLOW_TREE.RESET +WWV_FLOW_TREE_GLOBAL_VARS. +WWV_FLOW_UPGRADE. +WWV_FLOW_UPGRADE.COPY_FLOW_META_DATA +WWV_FLOW_UPGRADE.COPY_PREFS +WWV_FLOW_UPGRADE.CREATE_JOBS +WWV_FLOW_UPGRADE.CREATE_PRIVATE_SYNONYMS +WWV_FLOW_UPGRADE.CREATE_PUBLIC_SYNONYMS +WWV_FLOW_UPGRADE.DROP_PRIVATE_SYNONYMS +WWV_FLOW_UPGRADE.DROP_PUBLIC_SYNONYMS +WWV_FLOW_UPGRADE.FLOWS_FILES_OBJECTS_CREATE +WWV_FLOW_UPGRADE.FLOWS_FILES_OBJECTS_REMOVE +WWV_FLOW_UPGRADE.GRANT_PUBLIC_SYNONYMS +WWV_FLOW_UPGRADE.INCREMENT_SESSION +WWV_FLOW_UPGRADE.LOG +WWV_FLOW_UPGRADE.META_CLEANUP +WWV_FLOW_UPGRADE.PURGE_LOG +WWV_FLOW_UPGRADE.RECREATE_PUBLIC_SYNONYMS +WWV_FLOW_UPGRADE.REMOVE_JOBS +WWV_FLOW_UPGRADE.REMOVE_META_DATA +WWV_FLOW_UPGRADE.REPORT_COLUMN_CLEANUP +WWV_FLOW_UPGRADE.SWITCH_SCHEMAS +WWV_FLOW_UPGRADE.SW_CLEANUP +WWV_FLOW_UPGRADE.TEMPLATE_NAME_CLEANUP +WWV_FLOW_UPGRADE.TO_TEMPLATE_ID +WWV_FLOW_UPGRADE.UPGRADE_TO_030200 +WWV_FLOW_UPGRADE_REPORT. +WWV_FLOW_UPGRADE_REPORT.COLUMN_DIFS +WWV_FLOW_UPGRADE_REPORT.DEPEND +WWV_FLOW_UPGRADE_REPORT.SHOW_COUNTS +WWV_FLOW_UPGRADE_REPORT.SHOW_LOG +WWV_FLOW_UPGRADE_REPORT.TABLE_DIFS +WWV_FLOW_USER_API. +WWV_FLOW_USER_API.CURRENT_USER_IN_GROUP +WWV_FLOW_USER_API.GET_ATTRIBUTE +WWV_FLOW_USER_API.GET_CURRENT_USER_ID +WWV_FLOW_USER_API.GET_DEFAULT_SCHEMA +WWV_FLOW_USER_API.GET_EMAIL +WWV_FLOW_USER_API.GET_FIRST_NAME +WWV_FLOW_USER_API.GET_GROUPS_USER_BELONGS_TO +WWV_FLOW_USER_API.GET_GROUP_ID +WWV_FLOW_USER_API.GET_GROUP_NAME +WWV_FLOW_USER_API.GET_LAST_NAME +WWV_FLOW_USER_API.GET_USERNAME +WWV_FLOW_USER_API.GET_USER_ID +WWV_FLOW_USER_API.IS_LOGIN_PASSWORD_VALID +WWV_FLOW_USER_API.IS_USERNAME_UNIQUE +WWV_FLOW_USER_API.SET_ATTRIBUTE +WWV_FLOW_USER_API.SET_EMAIL +WWV_FLOW_USER_API.SET_FIRST_NAME +WWV_FLOW_USER_API.SET_LAST_NAME +WWV_FLOW_USER_API.SET_USERNAME +WWV_FLOW_UTILITIES. +WWV_FLOW_UTILITIES.APPEND_TO_LIST +WWV_FLOW_UTILITIES.ARRAY_ELEMENT +WWV_FLOW_UTILITIES.B64_ENCODE +WWV_FLOW_UTILITIES.BLOB_TO_CLOB +WWV_FLOW_UTILITIES.BULK_SAVE_SESSION_STATE +WWV_FLOW_UTILITIES.CACHE_GET_DATE_CACHED +WWV_FLOW_UTILITIES.CACHE_PURGE_BY_APPLICATION +WWV_FLOW_UTILITIES.CACHE_PURGE_BY_PAGE +WWV_FLOW_UTILITIES.CACHE_PURGE_STALE +WWV_FLOW_UTILITIES.CHECKSUM +WWV_FLOW_UTILITIES.CHECK_SGID +WWV_FLOW_UTILITIES.CLOB_TO_BLOB +WWV_FLOW_UTILITIES.CLOB_TO_VARCHAR2 +WWV_FLOW_UTILITIES.CLOSE_JAVASCRIPT +WWV_FLOW_UTILITIES.CLOSE_NOSCRIPT +WWV_FLOW_UTILITIES.COUNT_STALE_REGIONS +WWV_FLOW_UTILITIES.CURRENT_FLOW_CHANGED +WWV_FLOW_UTILITIES.CURRENT_SESSION_CHANGED +WWV_FLOW_UTILITIES.DAILY_CALENDAR +WWV_FLOW_UTILITIES.DB_COMPATIBILITY +WWV_FLOW_UTILITIES.DB_EDITION_IS_XE +WWV_FLOW_UTILITIES.DB_VERSION +WWV_FLOW_UTILITIES.DB_VERSION_IS_AT_LEAST +WWV_FLOW_UTILITIES.DB_VERSION_IS_AT_LEAST_I +WWV_FLOW_UTILITIES.DECREMENT_CALENDAR +WWV_FLOW_UTILITIES.DELETE_FROM_LIST +WWV_FLOW_UTILITIES.DELETE_LIST_ELEMENT +WWV_FLOW_UTILITIES.DOWNLOAD_PRINT_DOCUMENT +WWV_FLOW_UTILITIES.ENCODE_FILENAME +WWV_FLOW_UTILITIES.ESCAPE_URL +WWV_FLOW_UTILITIES.ESC_NON_BASIC_TAGS +WWV_FLOW_UTILITIES.EXPORT_APPLICATION_TO_CLOB +WWV_FLOW_UTILITIES.EXPORT_APPLICATION_TO_DB +WWV_FLOW_UTILITIES.EXPORT_PAGE_TO_CLOB +WWV_FLOW_UTILITIES.EXTRACTHTML +WWV_FLOW_UTILITIES.FAST_REPLACE +WWV_FLOW_UTILITIES.FAST_REPLACE_F +WWV_FLOW_UTILITIES.FAST_REPLACE_MANY +WWV_FLOW_UTILITIES.FAST_REPLACE_MANYF +WWV_FLOW_UTILITIES.FLOW_AUTHENTICATION +WWV_FLOW_UTILITIES.GEN_FILTER_ESCAPE +WWV_FLOW_UTILITIES.GEN_POPUP_COLOR +WWV_FLOW_UTILITIES.GEN_POPUP_LIST +WWV_FLOW_UTILITIES.GET_BINDS +WWV_FLOW_UTILITIES.GET_CGI_QUERY_STRING_DECODED +WWV_FLOW_UTILITIES.GET_CLOB_MD5 +WWV_FLOW_UTILITIES.GET_COLUMN_HEADINGS +WWV_FLOW_UTILITIES.GET_COMPANY_FROM_COOKIE +WWV_FLOW_UTILITIES.GET_COOKIE_USER_NAME +WWV_FLOW_UTILITIES.GET_DATA_TYPE +WWV_FLOW_UTILITIES.GET_DISPLAY_VALUE_GIVEN_LOV +WWV_FLOW_UTILITIES.GET_LOV_DELIMITERS +WWV_FLOW_UTILITIES.GET_PRINT_DOCUMENT +WWV_FLOW_UTILITIES.GET_REGION_NAME +WWV_FLOW_UTILITIES.GET_SUBSTITUTION_VALUE +WWV_FLOW_UTILITIES.GET_THEME_FILE +WWV_FLOW_UTILITIES.GET_UN_FROM_COOKIE +WWV_FLOW_UTILITIES.GET_USING_CLAUSE +WWV_FLOW_UTILITIES.HOST_URL +WWV_FLOW_UTILITIES.HTML_EDITOR_LANGUAGE +WWV_FLOW_UTILITIES.INCREMENT_CALENDAR +WWV_FLOW_UTILITIES.INSTR_FROMSTR +WWV_FLOW_UTILITIES.INSTR_TOSTR +WWV_FLOW_UTILITIES.IN_LIST +WWV_FLOW_UTILITIES.IS_BUILD_OPTION_ENABLED +WWV_FLOW_UTILITIES.IS_DATE +WWV_FLOW_UTILITIES.IS_NUMBER +WWV_FLOW_UTILITIES.IS_NUMERIC +WWV_FLOW_UTILITIES.IS_VALID_ALIAS +WWV_FLOW_UTILITIES.IS_VALID_IDENTIFIER +WWV_FLOW_UTILITIES.ITE +WWV_FLOW_UTILITIES.ITEM_CHANGED +WWV_FLOW_UTILITIES.KEYVAL_NUM +WWV_FLOW_UTILITIES.KEYVAL_VC2 +WWV_FLOW_UTILITIES.LIST_MGR_DISPLAY +WWV_FLOW_UTILITIES.LIST_OF_ITEMS_CHANGED +WWV_FLOW_UTILITIES.LIST_OF_PAGES_CHANGED +WWV_FLOW_UTILITIES.LOB_REPLACE +WWV_FLOW_UTILITIES.LOV_CHECKSUM +WWV_FLOW_UTILITIES.LOV_VALUES +WWV_FLOW_UTILITIES.LOV_VALUE_ARRAY +WWV_FLOW_UTILITIES.MINIMUM_FREE_FLOW +WWV_FLOW_UTILITIES.MINIMUM_FREE_PAGE +WWV_FLOW_UTILITIES.MONTH_CALENDAR +WWV_FLOW_UTILITIES.MY_URL +WWV_FLOW_UTILITIES.OPEN_JAVASCRIPT +WWV_FLOW_UTILITIES.OPEN_NOSCRIPT +WWV_FLOW_UTILITIES.PAGE_CHANGED +WWV_FLOW_UTILITIES.PAGE_CHECKSUM +WWV_FLOW_UTILITIES.PARSE +WWV_FLOW_UTILITIES.PARSE_QUERY_STRING +WWV_FLOW_UTILITIES.PAUSE +WWV_FLOW_UTILITIES.PERFORM_BINDS +WWV_FLOW_UTILITIES.PICK_DATE_FORMAT_MASK +WWV_FLOW_UTILITIES.POPULATE_TEMP_LOV_TABLE +WWV_FLOW_UTILITIES.PREPARE_URL +WWV_FLOW_UTILITIES.PROCESS_CALENDAR_DATE +WWV_FLOW_UTILITIES.PURGE_REGIONS_BY_APP +WWV_FLOW_UTILITIES.PURGE_REGIONS_BY_ID +WWV_FLOW_UTILITIES.PURGE_REGIONS_BY_NAME +WWV_FLOW_UTILITIES.PURGE_REGIONS_BY_PAGE +WWV_FLOW_UTILITIES.PURGE_STALE_REGIONS +WWV_FLOW_UTILITIES.QUICK_LINK +WWV_FLOW_UTILITIES.REDIRECT_URL +WWV_FLOW_UTILITIES.REDIRECT_URL_ARRAY +WWV_FLOW_UTILITIES.REMOVE_SPACES +WWV_FLOW_UTILITIES.REMOVE_TRAILING_WHITESPACE +WWV_FLOW_UTILITIES.REMWS +WWV_FLOW_UTILITIES.SAVEKEY_NUM +WWV_FLOW_UTILITIES.SAVEKEY_VC2 +WWV_FLOW_UTILITIES.SHOW_AS_CHECKBOX +WWV_FLOW_UTILITIES.SHOW_AS_COMBOBOX +WWV_FLOW_UTILITIES.SHOW_AS_DISPLAY_ONLY +WWV_FLOW_UTILITIES.SHOW_AS_MULTIPLE_SELECT +WWV_FLOW_UTILITIES.SHOW_AS_MULTIPLE_SELECT2 +WWV_FLOW_UTILITIES.SHOW_AS_POPUP +WWV_FLOW_UTILITIES.SHOW_AS_POPUP_CALENDAR +WWV_FLOW_UTILITIES.SHOW_AS_POPUP_COLOR +WWV_FLOW_UTILITIES.SHOW_AS_RADIO_GROUP +WWV_FLOW_UTILITIES.SHOW_AS_RADIO_GROUP2 +WWV_FLOW_UTILITIES.SHOW_AS_SHUTTLE +WWV_FLOW_UTILITIES.SHOW_AS_TEXTAREA_HTML_EDITOR +WWV_FLOW_UTILITIES.SHOW_AS_TEXTAREA_WITH_CONTROLS +WWV_FLOW_UTILITIES.SHOW_INVALID_INSTANCE_SCREEN +WWV_FLOW_UTILITIES.SHOW_IR_HELP +WWV_FLOW_UTILITIES.SHOW_LINE_NUMBER +WWV_FLOW_UTILITIES.STATIC_TO_QUERY +WWV_FLOW_UTILITIES.STRING_TO_TABLE +WWV_FLOW_UTILITIES.STRING_TO_TABLE2 +WWV_FLOW_UTILITIES.STRING_TO_TABLE3 +WWV_FLOW_UTILITIES.STRIPHTML +WWV_FLOW_UTILITIES.TABLE_TO_STRING +WWV_FLOW_UTILITIES.TABLE_TO_STRING2 +WWV_FLOW_UTILITIES.TIME_SINCE +WWV_FLOW_UTILITIES.TODAY_CALENDAR +WWV_FLOW_UTILITIES.URLENCODE +WWV_FLOW_UTILITIES.URL_DECODE2 +WWV_FLOW_UTILITIES.URL_ENCODE +WWV_FLOW_UTILITIES.URL_ENCODE2 +WWV_FLOW_UTILITIES.WEEKLY_CALENDAR +WWV_FLOW_VAL. +WWV_FLOW_VAL.VERIFY_USER +WWV_FLOW_VERSION_HIST_TRG. +WWV_FLOW_WEB_PAGES_TRIG. +WWV_FLOW_WEB_PG_LSTENT_TRIG. +WWV_FLOW_WEB_PG_REG_TRIG. +WWV_FLOW_WEB_SERVICES. +WWV_FLOW_WEB_SERVICES.APPEND_ELEMENT +WWV_FLOW_WEB_SERVICES.APPEND_ELEMENT2 +WWV_FLOW_WEB_SERVICES.CREATE_AUTH_PARMS +WWV_FLOW_WEB_SERVICES.CREATE_PROCESS_PARMS +WWV_FLOW_WEB_SERVICES.CREATE_WEB_SERVICE +WWV_FLOW_WEB_SERVICES.FIND_PROXY +WWV_FLOW_WEB_SERVICES.FIND_SERVICES_BY_BUSNAME +WWV_FLOW_WEB_SERVICES.FIND_SERVICES_BY_SERVNAME +WWV_FLOW_WEB_SERVICES.GENERATE_BODY +WWV_FLOW_WEB_SERVICES.GENERATE_ENVELOPE +WWV_FLOW_WEB_SERVICES.GENERATE_HEADER +WWV_FLOW_WEB_SERVICES.GENERATE_QUERY +WWV_FLOW_WEB_SERVICES.GENERATE_QUERY_MANUAL +WWV_FLOW_WEB_SERVICES.GET_LAST_ERROR_MESSAGE +WWV_FLOW_WEB_SERVICES.GET_PARM_VALUE +WWV_FLOW_WEB_SERVICES.GET_PATH +WWV_FLOW_WEB_SERVICES.GET_SERVICE_DETAILS +WWV_FLOW_WEB_SERVICES.MAKE_REQUEST +WWV_FLOW_WEB_SERVICES.PARSE +WWV_FLOW_WEB_SERVICES.PRINT_RENDERED_RESULT +WWV_FLOW_WEB_SERVICES.RENDER_REQUEST +WWV_FLOW_WEB_SERVICES.UDDI_REQUEST +WWV_FLOW_WEB_SERVICES.UPDATE_PROCESS_PARMS +WWV_FLOW_WEB_SERVICES.WSDL_ANALYZE +WWV_FLOW_WIZARD_API. +WWV_FLOW_WIZARD_API.ARRAY_ELEMENT +WWV_FLOW_WIZARD_API.CREATE_ACCESS_CONTROL +WWV_FLOW_WIZARD_API.CREATE_CALENDAR_PAGE +WWV_FLOW_WIZARD_API.CREATE_CHART_PAGE +WWV_FLOW_WIZARD_API.CREATE_DYNAMIC_QUERY +WWV_FLOW_WIZARD_API.CREATE_DYNAMIC_QUERY_REGION +WWV_FLOW_WIZARD_API.CREATE_FLASH_CHART +WWV_FLOW_WIZARD_API.CREATE_FLASH_CHART_REGION +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_EQUIJOIN +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_SP +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_TABLE +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_WS +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_WS_RPT +WWV_FLOW_WIZARD_API.CREATE_IR_REGION_ON_COL_INFO +WWV_FLOW_WIZARD_API.CREATE_MASTER_DETAIL +WWV_FLOW_WIZARD_API.CREATE_NEXT_PREV_PK_PROCESS +WWV_FLOW_WIZARD_API.CREATE_QUERY_AND_UPDATE_PAGE +WWV_FLOW_WIZARD_API.CREATE_QUERY_REGION +WWV_FLOW_WIZARD_API.CREATE_REPORT_ON_WS +WWV_FLOW_WIZARD_API.CREATE_REPORT_PAGE +WWV_FLOW_WIZARD_API.CREATE_REPORT_PAGE_STRUCTURED +WWV_FLOW_WIZARD_API.CREATE_REPORT_QUERY +WWV_FLOW_WIZARD_API.CREATE_SUMMARY_PAGE +WWV_FLOW_WIZARD_API.CREATE_SVG_CHART +WWV_FLOW_WIZARD_API.CREATE_TREE +WWV_FLOW_WIZARD_API.CREATE_UPDATEABLE_REPORT +WWV_FLOW_WIZARD_API.CREATE_WIZARD +WWV_FLOW_WIZARD_API.FLASH_CHART_REGION_SOURCE +WWV_FLOW_WIZARD_API.GENERATE_TREE_QUERY +WWV_FLOW_WIZARD_API.GENERATE_UPDATABLE_RPT_QUERY +WWV_FLOW_WIZARD_API.GET_COLUMN_DATA_TYPE +WWV_FLOW_WIZARD_API.GET_FLOW_OWNER +WWV_FLOW_WIZARD_API.GET_OWNER +WWV_FLOW_WIZARD_API.GET_PK +WWV_FLOW_WIZARD_API.GET_QUERY_COLUMNS +WWV_FLOW_WIZARD_API.GET_VALID_ITEM_NAME +WWV_FLOW_WIZARD_API.GET_VARCHAR_QUERY_COLUMNS +WWV_FLOW_WIZARD_API.IR_REPORT_EXISTS +WWV_FLOW_WIZARD_API.IS_OLD_PPR_TEMPLATE +WWV_FLOW_WIZARD_API.PAGE_EXISTS +WWV_FLOW_WIZARD_API.SHORTCUT_EXIST +WWV_FLOW_WIZARD_API.TABLE_VIEW_EXISTS +WWV_FLOW_WIZARD_API.UPDATEABLE_QUERY_EXISTS +WWV_FLOW_WIZARD_API.UPDATE_HTML_HEADER_W_SHORTCUT +WWV_FLOW_WIZARD_API.UPDATE_REPORT_QUERY_SQL_STMTS +WWV_FLOW_WIZ_CONFIRM. +WWV_FLOW_WIZ_CONFIRM.CHANGE_INTERACTIVE_RPT_REGION +WWV_FLOW_WIZ_CONFIRM.COPY_APPLICATION +WWV_FLOW_WIZ_CONFIRM.COPY_PAGE +WWV_FLOW_WIZ_CONFIRM.COPY_PAGE_OTHER_APP +WWV_FLOW_WIZ_CONFIRM.CREATE_ACL +WWV_FLOW_WIZ_CONFIRM.CREATE_APPLICATION +WWV_FLOW_WIZ_CONFIRM.CREATE_AUTH_SCHEME +WWV_FLOW_WIZ_CONFIRM.CREATE_BREADCRUMB_REGION +WWV_FLOW_WIZ_CONFIRM.CREATE_DEMO_APP +WWV_FLOW_WIZ_CONFIRM.CREATE_DYNAMIC_QUERY +WWV_FLOW_WIZ_CONFIRM.CREATE_FLASH_CHART +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_QUERY +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_SP +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_TABLE +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_WS +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_WS_RPT +WWV_FLOW_WIZ_CONFIRM.CREATE_HTML_CHART +WWV_FLOW_WIZ_CONFIRM.CREATE_MASTER_DETAIL +WWV_FLOW_WIZ_CONFIRM.CREATE_MONTHLY_CALENDAR +WWV_FLOW_WIZ_CONFIRM.CREATE_PAGE +WWV_FLOW_WIZ_CONFIRM.CREATE_PAGE_ZERO +WWV_FLOW_WIZ_CONFIRM.CREATE_QUERY_AND_UPDATE +WWV_FLOW_WIZ_CONFIRM.CREATE_SQL_REPORT +WWV_FLOW_WIZ_CONFIRM.CREATE_STANDARD_TAB +WWV_FLOW_WIZ_CONFIRM.CREATE_STRUCTURED_REPORT +WWV_FLOW_WIZ_CONFIRM.CREATE_SUMMARY_PAGE +WWV_FLOW_WIZ_CONFIRM.CREATE_SVG_CHART +WWV_FLOW_WIZ_CONFIRM.CREATE_TABULAR_FORM +WWV_FLOW_WIZ_CONFIRM.CREATE_TREE +WWV_FLOW_WIZ_CONFIRM.CREATE_WIZARD +WWV_FLOW_WIZ_CONFIRM.DELETE_LIST_REGION_WARNING +WWV_FLOW_WIZ_CONFIRM.MIGRATE_SVG_TO_FLASH +WWV_FLOW_WIZ_CONFIRM.REGULAR_EXP +WWV_FLOW_WIZ_CONFIRM.SELECT_RPT_TEMPLATE +WWV_FLOW_WIZ_CONFIRM.STRUCTURED_QUERY_CONDITION +WWV_FLOW_WORKSHEET. +WWV_FLOW_WORKSHEET.GET_ALL_COLUMN_ATTRIBUTES +WWV_FLOW_WORKSHEET.GET_FILTER_QUERY +WWV_FLOW_WORKSHEET.GET_REPORT_ATTRIBUTES +WWV_FLOW_WORKSHEET.GET_SINGLE_ROW_QUERY +WWV_FLOW_WORKSHEET.GET_WORKSHEET_ATTRIBUTES +WWV_FLOW_WORKSHEET.GET_WORKSHEET_REPORT_QUERY +WWV_FLOW_WORKSHEET.SHOW_FULL_WORKSHEET_REGION +WWV_FLOW_WORKSHEET.SHOW_REGION +WWV_FLOW_WORKSHEET.SHOW_REPORT +WWV_FLOW_WORKSHEETS_AD_TRIG. +WWV_FLOW_WORKSHEETS_BD_TRIG. +WWV_FLOW_WORKSHEETS_TRIG. +WWV_FLOW_WORKSHEET_AJAX. +WWV_FLOW_WORKSHEET_AJAX.SORT_WIDGET +WWV_FLOW_WORKSHEET_AJAX.SORT_WIDGET_HTML +WWV_FLOW_WORKSHEET_AJAX.UVALUES +WWV_FLOW_WORKSHEET_AJAX.WIDGET +WWV_FLOW_WORKSHEET_API. +WWV_FLOW_WORKSHEET_API.ADD_OR_UPDATE_COMPUTATION +WWV_FLOW_WORKSHEET_API.ADD_OR_UPDATE_FILTER +WWV_FLOW_WORKSHEET_API.ADD_OR_UPDATE_HIGHLIGHT +WWV_FLOW_WORKSHEET_API.BREAK_ON_COLUMN +WWV_FLOW_WORKSHEET_API.CLEAR_FILTER +WWV_FLOW_WORKSHEET_API.CLEAR_FILTERS_ON_COLUMN +WWV_FLOW_WORKSHEET_API.CLEAR_FLASHBACK +WWV_FLOW_WORKSHEET_API.CLEAR_HIGHLIGHT +WWV_FLOW_WORKSHEET_API.CLEAR_REPORT_SETTINGS +WWV_FLOW_WORKSHEET_API.CLEAR_WORKSHEET_PREFS +WWV_FLOW_WORKSHEET_API.CREATE_AGGREGATE +WWV_FLOW_WORKSHEET_API.CREATE_CATEGORY +WWV_FLOW_WORKSHEET_API.CREATE_DATAVIEW +WWV_FLOW_WORKSHEET_API.CREATE_WORKSHEET_REPORT +WWV_FLOW_WORKSHEET_API.CREATE_WS_COL_GROUP +WWV_FLOW_WORKSHEET_API.CREATE_WS_REPORT_CONDITION +WWV_FLOW_WORKSHEET_API.DELETE_CATEGORY +WWV_FLOW_WORKSHEET_API.DELETE_CHART +WWV_FLOW_WORKSHEET_API.DELETE_COMPUTATION +WWV_FLOW_WORKSHEET_API.DELETE_REPORT +WWV_FLOW_WORKSHEET_API.DELETE_REPORTS_FOR_APP +WWV_FLOW_WORKSHEET_API.DELETE_REPORTS_FOR_USER +WWV_FLOW_WORKSHEET_API.FETCH_COMPUTATION +WWV_FLOW_WORKSHEET_API.FETCH_HIGHLIGHT +WWV_FLOW_WORKSHEET_API.GET_COLUMN_INFO +WWV_FLOW_WORKSHEET_API.GET_COLUMN_LIST +WWV_FLOW_WORKSHEET_API.GET_FORM_NAVIGATION +WWV_FLOW_WORKSHEET_API.GET_REPORT_NAME +WWV_FLOW_WORKSHEET_API.GET_WORKSHEET_ID +WWV_FLOW_WORKSHEET_API.HIDE_COLUMN +WWV_FLOW_WORKSHEET_API.HIGHLIGHT_EXPR +WWV_FLOW_WORKSHEET_API.IR_CLEAR +WWV_FLOW_WORKSHEET_API.IR_FILTER +WWV_FLOW_WORKSHEET_API.IR_RESET +WWV_FLOW_WORKSHEET_API.IR_RESET_PAGINATION +WWV_FLOW_WORKSHEET_API.REMOVE_AGGREGATE +WWV_FLOW_WORKSHEET_API.REMOVE_BREAK_ON_COLUMN +WWV_FLOW_WORKSHEET_API.RENAME_REPORT +WWV_FLOW_WORKSHEET_API.RESET_PAGINATION +WWV_FLOW_WORKSHEET_API.RESET_REPORT_SETTINGS +WWV_FLOW_WORKSHEET_API.SAVE_CALENDAR +WWV_FLOW_WORKSHEET_API.SAVE_CHART +WWV_FLOW_WORKSHEET_API.SAVE_COLUMN_LIST +WWV_FLOW_WORKSHEET_API.SAVE_DERIVED_REPORT +WWV_FLOW_WORKSHEET_API.SAVE_ORDERING +WWV_FLOW_WORKSHEET_API.SET_CONTROL_BREAKS +WWV_FLOW_WORKSHEET_API.SET_FLASHBACK +WWV_FLOW_WORKSHEET_API.SET_REPORT_TYPE +WWV_FLOW_WORKSHEET_API.SHOW_COLUMN +WWV_FLOW_WORKSHEET_API.SHOW_COLUMN_IN_DEFAULT_REPORT +WWV_FLOW_WORKSHEET_API.SHOW_SINGLE_ROW_VIEW +WWV_FLOW_WORKSHEET_API.SORT_ON_COLUMN +WWV_FLOW_WORKSHEET_API.TOGGLE_BREAK_ON_COLUMN +WWV_FLOW_WORKSHEET_API.TOGGLE_FILTER +WWV_FLOW_WORKSHEET_API.TOGGLE_FLASHBACK +WWV_FLOW_WORKSHEET_API.TOGGLE_HIGHLIGHTING +WWV_FLOW_WORKSHEET_API.UPDATE_CATEGORY +WWV_FLOW_WORKSHEET_ATTACHMENT. +WWV_FLOW_WORKSHEET_ATTACHMENT.ADD_DOC +WWV_FLOW_WORKSHEET_ATTACHMENT.DELETE_DOC +WWV_FLOW_WORKSHEET_ATTACHMENT.DOWNLOAD_DOC +WWV_FLOW_WORKSHEET_CAT_TRIG. +WWV_FLOW_WORKSHEET_COL_TRIG. +WWV_FLOW_WORKSHEET_COND_TRIG. +WWV_FLOW_WORKSHEET_DIALOGUE. +WWV_FLOW_WORKSHEET_DIALOGUE.GET_VALID_SQL_FUNCTIONS +WWV_FLOW_WORKSHEET_DIALOGUE.SAVE_COLUMN_LIST +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_AGGREGATE +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_CALENDAR +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_CHART +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_COLUMN_LIST +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_COMPUTATION +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_CONTROL_BREAK +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_DELETE +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_DOWNLOAD +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_FILTER +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_FLASHBACK +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_FORMAT_MASK +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_HIGHLIGHT +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_ORDERING +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_RESET +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_SAVE +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_SAVE_DEFAULT +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_SELECT_COLUMNS +WWV_FLOW_WORKSHEET_DOC_TRIG. +WWV_FLOW_WORKSHEET_EXPR. +WWV_FLOW_WORKSHEET_EXPR.GET_COMPUTE_SQL +WWV_FLOW_WORKSHEET_EXPR.GET_COMPUTE_SQL2 +WWV_FLOW_WORKSHEET_EXPR.HIGHLIGHT_EXPR +WWV_FLOW_WORKSHEET_EXPR.IN_LIST +WWV_FLOW_WORKSHEET_EXPR.IS_VALID_FORMAT_MASK +WWV_FLOW_WORKSHEET_EXPR.TOKENIZE +WWV_FLOW_WORKSHEET_EXPR.VALIDATE_COMP_EXPRESSION +WWV_FLOW_WORKSHEET_FORM. +WWV_FLOW_WORKSHEET_FORM.FORM_NAVIGATION +WWV_FLOW_WORKSHEET_FORM.GET_LOV_QUERY +WWV_FLOW_WORKSHEET_FORM.SHOW +WWV_FLOW_WORKSHEET_LK_TRIG. +WWV_FLOW_WORKSHEET_PRIV_TRIG. +WWV_FLOW_WORKSHEET_ROW_TRIG. +WWV_FLOW_WORKSHEET_RPTS_TRIG. +WWV_FLOW_WORKSHEET_STANDARD. +WWV_FLOW_WORKSHEET_STANDARD.CHECK_COMPUTATION_EXPR +WWV_FLOW_WORKSHEET_STANDARD.CHECK_FLASHBACK_TIME +WWV_FLOW_WORKSHEET_STANDARD.CHECK_HIGHLIGHT +WWV_FLOW_WORKSHEET_STANDARD.COL_HEADING_CHAR_TO_NUM +WWV_FLOW_WORKSHEET_STANDARD.COL_HEADING_NUM_TO_CHAR +WWV_FLOW_WORKSHEET_STANDARD.DEFAULT_RPT_SETTINGS +WWV_FLOW_WORKSHEET_STANDARD.DELETE_REPORT +WWV_FLOW_WORKSHEET_STANDARD.ESC_IR_COL_HEADER +WWV_FLOW_WORKSHEET_STANDARD.GET_COLUMN_ATTRIBUTES +WWV_FLOW_WORKSHEET_STANDARD.GET_COLUMN_DIFF +WWV_FLOW_WORKSHEET_STANDARD.GET_COLUMN_LABEL +WWV_FLOW_WORKSHEET_STANDARD.GET_COLUMN_TYPE +WWV_FLOW_WORKSHEET_STANDARD.GET_COL_PRIVS +WWV_FLOW_WORKSHEET_STANDARD.GET_COMPUTE_SQL +WWV_FLOW_WORKSHEET_STANDARD.GET_CONDITION_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_DBMS_SQL_CURSOR +WWV_FLOW_WORKSHEET_STANDARD.GET_DB_COLUMN_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_GROUP_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_COMPUTED_COLUMN_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_COMPUTED_IDENTIFIER +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_DB_COLUMN_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_DISPLAY_ORDER_NUMBER +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_IDENTIFIER +WWV_FLOW_WORKSHEET_STANDARD.GET_PSEUDOCOLUMN_ATTRIBUTES +WWV_FLOW_WORKSHEET_STANDARD.GET_REPORT_ID +WWV_FLOW_WORKSHEET_STANDARD.GET_SINGLE_COLUMN_ATTRIBUTES +WWV_FLOW_WORKSHEET_STANDARD.INIT_WORKSHEET_PREFS +WWV_FLOW_WORKSHEET_STANDARD.IS_COLUMN_FILTERED +WWV_FLOW_WORKSHEET_STANDARD.IS_VALID_IR_QUERY +WWV_FLOW_WORKSHEET_STANDARD.SAVE_COL_PRIVS +WWV_FLOW_WORKSHEET_STANDARD.SAVE_DERIVED_REPORT +WWV_FLOW_WORKSHEET_STANDARD.SET_WORKSHEET_PREFS +WWV_FLOW_WORKSHEET_STANDARD.SHOW_TABS +WWV_FLOW_WORKSHEET_STANDARD.SHOW_WORKSHEET_BUTTON +WWV_FLOW_WORKSHEET_STANDARD.SYNCH_REPORT_COLUMNS +WWV_FLOW_WORKSHEET_STANDARD.USER_MAY_EDIT_COL +WWV_FLOW_WORKSHEET_STANDARD.USER_MAY_EDIT_FOLDER +WWV_FLOW_WORKSHEET_STANDARD.USER_MAY_EDIT_WEBPAGE +WWV_FLOW_WORKSHEET_STANDARD.USER_MAY_EDIT_WORKSHEET +WWV_FLOW_WORKSHEET_STANDARD.USER_MAY_VIEW_COL +WWV_FLOW_WORKSHEET_STICKIES. +WWV_FLOW_WORKSHEET_STICKIES.SHOW_STICKIES +WWV_FLOW_WORKSHEET_ST_TRIG. +WWV_FLOW_WORKSHEET_UI. +WWV_FLOW_WORKSHEET_UI.SHOW_BREADCRUMB +WWV_FLOW_WORKSHEET_UI.SHOW_FOLDERS +WWV_FLOW_WS_COL_GRP_TRIG. +WWV_FLOW_WS_COMPUTATION_TRIG. +WWV_FLOW_WS_LOVS_TRIG. +WWV_FLOW_WS_LOV_ENTS_TRIG. +WWV_FLOW_XLIFF. +WWV_FLOW_XLIFF.APPLY_XLIFF_FILE +WWV_FLOW_XLIFF.APPLY_XLIFF_TRANSLATIONS +WWV_FLOW_XLIFF.GENERATE_TRANSLATION_DOCUMENT +WWV_FLOW_XLIFF.GET_TRANSLATION_DOCUMENT +WWV_FLOW_XLIFF.PRINT_TRANSLATION_DOCUMENT +WWV_HTF. +WWV_HTF.ANCHOR +WWV_HTF.ANCHOR2 +WWV_HTF.BODYCLOSE +WWV_HTF.BODYOPEN +WWV_HTF.DIVOPEN +WWV_HTF.FORMBUTTON +WWV_HTF.FORMHIDDEN +WWV_HTF.FORMOPEN +WWV_HTF.FORMPASSWORD +WWV_HTF.FORMSELECTCLOSE +WWV_HTF.FORMSELECTOPEN +WWV_HTF.FORMSELECTOPTION +WWV_HTF.FORMSUBMIT +WWV_HTF.FORMTEXT +WWV_HTF.FORMTEXTAREACLOSE +WWV_HTF.FORMTEXTAREAOPEN2 +WWV_HTF.HTMLCLOSE +WWV_HTF.HTMLOPEN +WWV_HTF.IMG +WWV_HTF.LISTITEMOPEN +WWV_HTF.PARAGRAPHOPEN +WWV_HTF.SCRIPTCLOSE +WWV_HTF.SCRIPTOPEN +WWV_HTF.TABLECLOSE +WWV_HTF.TABLEDATA +WWV_HTF.TABLEDATAOPEN +WWV_HTF.TABLEHEADER +WWV_HTF.TABLEOPEN +WWV_HTF.TABLEROWCLOSE +WWV_HTF.TABLEROWOPEN +WWV_HTF.URL_ENCODE +WWV_HTF.URL_ENCODE2 +WWV_HTF.URL_ENCODE3 +WWV_HTP. +WWV_HTP.ANCHOR +WWV_HTP.ANCHOR2 +WWV_HTP.BODYCLOSE +WWV_HTP.BODYOPEN +WWV_HTP.CENTERCLOSE +WWV_HTP.CENTEROPEN +WWV_HTP.DIVCLOSE +WWV_HTP.DIVOPEN +WWV_HTP.FORMBUTTON +WWV_HTP.FORMHIDDEN +WWV_HTP.FORMOPEN +WWV_HTP.FORMPASSWORD +WWV_HTP.FORMSELECTCLOSE +WWV_HTP.FORMSELECTOPEN +WWV_HTP.FORMSELECTOPTION +WWV_HTP.FORMSUBMIT +WWV_HTP.FORMTEXT +WWV_HTP.HTMLCLOSE +WWV_HTP.HTMLOPEN +WWV_HTP.IMG +WWV_HTP.LISTITEMOPEN +WWV_HTP.PARAGRAPHCLOSE +WWV_HTP.PARAGRAPHOPEN +WWV_HTP.SCRIPTCLOSE +WWV_HTP.SCRIPTOPEN +WWV_HTP.TABLECLOSE +WWV_HTP.TABLEDATA +WWV_HTP.TABLEDATACLOSE +WWV_HTP.TABLEDATAOPEN +WWV_HTP.TABLEHEADER +WWV_HTP.TABLEOPEN +WWV_HTP.TABLEROWCLOSE +WWV_HTP.TABLEROWOPEN +WWV_HTP.URL_ENCODE +WWV_HTP.URL_ENCODE2 +WWV_META_CLEANUP. +WWV_META_CLEANUP.COPY_SVG_SERIES_ATTR +WWV_META_CLEANUP.ENFORCE_PAGE_ALIAS_UNIQUENESS +WWV_META_CLEANUP.FIX_APP_AUTH_LOGOUT_URL +WWV_META_CLEANUP.FIX_FILE_REPOSITORY +WWV_META_CLEANUP.ITEM_ATTRIBUTES +WWV_META_CLEANUP.LOV_DATA_UPDATE +WWV_META_CLEANUP.MENU_OPTIONS_UPDATE +WWV_META_CLEANUP.REPORT_COLUMNS_UPDATE +WWV_META_CLEANUP.ROW_TEMPLATE_CONDITION +WWV_META_CLEANUP.SVG_REGION_SOURCE_UPDATE +WWV_META_CLEANUP.TEMPLATE_HEAD_UPDATE +WWV_MIG_ACC_LOAD. +WWV_MIG_ACC_LOAD.ADD_SUFFIX +WWV_MIG_ACC_LOAD.CHECK_ALLOWED_CHARS +WWV_MIG_ACC_LOAD.CHECK_IDENTIFIER_LENGTH +WWV_MIG_ACC_LOAD.CHECK_RESERVED_WORD +WWV_MIG_ACC_LOAD.DISPLAY_LOAD_CONFIRM +WWV_MIG_ACC_LOAD.DISPLAY_LOAD_INFO +WWV_MIG_ACC_LOAD.ESCAPE_CHAR +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACCESS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_COLUMNS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_CONTROLS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_MODULES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_PERM +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_GROUPS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_GRPSMEMBERS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_IDX_COLS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_INDEXES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_MDL_PERM +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_MODULES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_PAGES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_QUERIES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_RELATIONS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_REL_COL +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_REPORTS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_RPTS_MODULES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_RPT_CTL +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_RPT_PERMS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_TABLES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_TAB_PERM +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_USERS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_REV_QUERIES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_REV_TABLES +WWV_MIG_ACC_LOAD.IS_ACCESS_EXPORT +WWV_MIG_ACC_LOAD.LTRIMNONALPHANUMERIC +WWV_MIG_ACC_LOAD.REMOVEQUOTES +WWV_MIG_ACC_LOAD.SET_MIGRATION_PROJECT_NAME +WWV_MIG_ACC_LOAD.SYS_CHECK +WWV_MIG_ACC_LOAD.TRANSFORM_IDENTIFIER +WWV_MIG_ACC_LOAD.TRUNCATESTRINGBYTESIZE +WWV_MIG_FRMMENU_LOAD_XML. +WWV_MIG_FRMMENU_LOAD_XML.DISPLAY_LOAD_CONFIRM +WWV_MIG_FRMMENU_LOAD_XML.DISPLAY_LOAD_INFO +WWV_MIG_FRMMENU_LOAD_XML.GET_MENUS_COLUMN_NAME +WWV_MIG_FRMMENU_LOAD_XML.IS_VALID_MENU_XML +WWV_MIG_FRMMENU_LOAD_XML.LOAD_ALL_NODES +WWV_MIG_FRM_LOAD_XML. +WWV_MIG_FRM_LOAD_XML.DISPLAY_LOAD_CONFIRM +WWV_MIG_FRM_LOAD_XML.DISPLAY_LOAD_INFO +WWV_MIG_FRM_LOAD_XML.GET_FORMS_COLUMN_NAME +WWV_MIG_FRM_LOAD_XML.IS_VALID_FORMS_XML +WWV_MIG_FRM_LOAD_XML.LOAD_ALL_NODES +WWV_MIG_FRM_OLB_LOAD_XML. +WWV_MIG_FRM_OLB_LOAD_XML.DISPLAY_LOAD_CONFIRM +WWV_MIG_FRM_OLB_LOAD_XML.DISPLAY_LOAD_INFO +WWV_MIG_FRM_OLB_LOAD_XML.GET_OBJLIB_COLUMN_NAME +WWV_MIG_FRM_OLB_LOAD_XML.IS_VALID_OLB_XML +WWV_MIG_FRM_OLB_LOAD_XML.LOAD_ALL_NODES +WWV_MIG_FRM_UPDATE_APX_APP. +WWV_MIG_FRM_UPDATE_APX_APP.SET_APEX_APP_LOGO +WWV_MIG_FRM_UPDATE_APX_APP.UPDATE_FORMS_PAGES +WWV_MIG_FRM_UPDATE_APX_APP.UPDATE_PAGE_PLUG +WWV_MIG_FRM_UTILITIES. +WWV_MIG_FRM_UTILITIES.CREATE_APEX_PAGES +WWV_MIG_FRM_UTILITIES.CREATE_APEX_REPORT_PAGES +WWV_MIG_FRM_UTILITIES.GET_BLOCK_MAPPING +WWV_MIG_FRM_UTILITIES.GET_PARAMETER_NAME +WWV_MIG_FRM_UTILITIES.IS_RELATED_BLOCK +WWV_MIG_FRM_UTILITIES.IS_TABLE_OR_VIEW +WWV_MIG_FRM_UTILITIES.IS_TABLE_RELATED +WWV_MIG_FRM_UTILITIES.IS_VALID_DATASOURCE +WWV_MIG_FRM_UTILITIES.IS_VALID_QUERY +WWV_MIG_FRM_UTILITIES.LOAD_FRM_REVISION_TABLES +WWV_MIG_FRM_UTILITIES.PARSE_LOV_QUERY +WWV_MIG_FRM_UTILITIES.REPLACE_STRING +WWV_MIG_FRM_UTILITIES.SET_BLKTRIG_APPLICABILITY +WWV_MIG_FRM_UTILITIES.SET_BLOCK_INCLUSION +WWV_MIG_FRM_UTILITIES.SET_COMPONENT_APPLICABILITY +WWV_MIG_FRM_UTILITIES.SET_COMPONENT_DEFAULTS +WWV_MIG_FRM_UTILITIES.SET_FORMTRIG_APPLICABILITY +WWV_MIG_FRM_UTILITIES.SET_ITEMTRIG_APPLICABILITY +WWV_MIG_FRM_UTILITIES.SET_TRIGGER_DEFAULTS +WWV_MIG_FRM_UTILITIES.TRIGGER_GET_PRIMARY_KEY +WWV_MIG_FRM_UTILITIES.TRIGGER_PARSE_BLOCK_SQL +WWV_MIG_FRM_UTILITIES.TRIGGER_QUERY_TO_LOV +WWV_MIG_RPT_LOAD_XML. +WWV_MIG_RPT_LOAD_XML.DISPLAY_LOAD_CONFIRM +WWV_MIG_RPT_LOAD_XML.DISPLAY_LOAD_INFO +WWV_MIG_RPT_LOAD_XML.GET_REPORTS_COLUMN_NAME +WWV_MIG_RPT_LOAD_XML.IS_VALID_REPORT_XML +WWV_MIG_RPT_LOAD_XML.LOAD_ALL_NODES +WWV_POPUP_FILTER. +WWV_RENDER_CALENDAR2. +WWV_RENDER_CALENDAR2.SHOW +WWV_RENDER_CHART2. +WWV_RENDER_CHART2.SHOW +WWV_RENDER_CHART2.SHOW_COLORS +WWV_RENDER_REPORT3. +WWV_RENDER_REPORT3.BUILD_PAGINATION_ROW +WWV_RENDER_REPORT3.GET_MRU_INFO +WWV_RENDER_REPORT3.GET_QUERY_HEADINGS +WWV_RENDER_REPORT3.GET_SINCE +WWV_RENDER_REPORT3.HIGHLIGHT_VALUE +WWV_RENDER_REPORT3.IS_VALID_QUERY +WWV_RENDER_REPORT3.SET_LEGACY_COL_ATTRIBUTES +WWV_RENDER_REPORT3.SET_TEMPLATE +WWV_RENDER_REPORT3.SHOW +WWV_RENDER_REPORT3.SHOW_PREVIEW +WWV_RENDER_REPORT3.UPDATE_REPORT_COLUMNS +WWV_RENDER_REPORT3.UPGRADE_REPORT +WWV_SPELING. +WWV_SPELING.ACCEPT_CORRECTIONS +WWV_SPELING.CORRECTION_FRAME +WWV_SPELING.CORRECTION_WINDOW +WWV_SPELING.HIDDEN_FRAME +WWV_SPELING.INIT_FIELD_WITH_IMAGE +WWV_SPELING.INIT_PAGE +WWV_SPELING.PRE_CORRECTION_FRAME +WWV_SPELING.SMALL_CORRECTION_WINDOW +XACTS +XDB$ACL$XD. +XDB$ACL_PKG_INT. +XDB$ACL_PKG_INT.CURRENT_PRINCIPALS +XDB$ACL_PKG_INT.SPECIAL_ACL +XDB$CONFIG$XD. +XDB$DERIVATIONCHOICE.LOOKUPVALUE +XDB$DERIVATIONCHOICE.SETVALUE +XDB$ENUM2_T.LOOKUPVALUE +XDB$ENUM2_T.SETVALUE +XDB$ENUM_T.LOOKUPVALUE +XDB$ENUM_T.SETVALUE +XDB$EXTNAME2INTNAME. +XDB$FORMCHOICE.LOOKUPVALUE +XDB$FORMCHOICE.SETVALUE +XDB$INITXDBSCHEMA. +XDB$JAVATYPE.LOOKUPVALUE +XDB$JAVATYPE.SETVALUE +XDB$PATCHUPDELETESCHEMA. +XDB$PATCHUPSCHEMA. +XDB$PROCESSCHOICE.LOOKUPVALUE +XDB$PROCESSCHOICE.SETVALUE +XDB$RESCONFIG$XD. +XDB$STATS$XD. +XDB$TRANSIENTCHOICE.LOOKUPVALUE +XDB$TRANSIENTCHOICE.SETVALUE +XDB$USECHOICE.LOOKUPVALUE +XDB$USECHOICE.SETVALUE +XDB$WHITESPACECHOICE.LOOKUPVALUE +XDB$WHITESPACECHOICE.SETVALUE +XDB-LOG13_TAB$XD. +XDBCONFIG_VALIDATE. +XDBHI_IM.ODCIGETINTERFACES +XDBHI_IM.ODCIINDEXALTER +XDBHI_IM.ODCIINDEXCLOSE +XDBHI_IM.ODCIINDEXCREATE +XDBHI_IM.ODCIINDEXDELETE +XDBHI_IM.ODCIINDEXDROP +XDBHI_IM.ODCIINDEXFETCH +XDBHI_IM.ODCIINDEXINSERT +XDBHI_IM.ODCIINDEXSTART +XDBHI_IM.ODCIINDEXUPDATE +XDBPI_FUNCIMPL. +XDBPI_FUNCIMPL.NOOP_FUNC +XDBPI_IM.ODCIGETINTERFACES +XDBPI_IM.ODCIINDEXCLOSE +XDBPI_IM.ODCIINDEXCREATE +XDBPI_IM.ODCIINDEXDELETE +XDBPI_IM.ODCIINDEXDROP +XDBPI_IM.ODCIINDEXFETCH +XDBPI_IM.ODCIINDEXINSERT +XDBPI_IM.ODCIINDEXSTART +XDBPI_IM.ODCIINDEXTRUNCATE +XDBPI_IM.ODCIINDEXUPDATE +XDBURITYPE.CREATEURI +XDBURITYPE.GETBLOB +XDBURITYPE.GETCLOB +XDBURITYPE.GETCONTENTTYPE +XDBURITYPE.GETEXTERNALURL +XDBURITYPE.GETRESOURCE +XDBURITYPE.GETURL +XDBURITYPE.GETXML +XDBURITYPE.XDBURITYPE +XDB_ANCOP. +XDB_ANCOP.ABSPATH_FUNC +XDB_ANCOP.ABSPATH_FUNC_INT +XDB_ANCOP.ALLPATH_FUNC +XDB_ANCOP.ALLPATH_FUNC_INT +XDB_ANCOP.DEPTH_FUNC +XDB_ANCOP.DEPTH_FUNC_INT +XDB_ANCOP.PATH_FUNC +XDB_ANCOP.PATH_FUNC_INT +XDB_DATASTORE_PROC. +XDB_DLTRIG_PKG. +XDB_DLTRIG_PKG.DLTRIG_UPD +XDB_FASTPATH_INSERT +XDB_FUNCIMPL. +XDB_FUNCIMPL.EQUAL_PATH_FUNC +XDB_FUNCIMPL.UNDER_PATH_FUNC +XDB_FUNCIMPL.UNDER_PATH_FUNC1 +XDB_PITRIG_PKG. +XDB_PITRIG_PKG.PITRIG_DEL +XDB_PITRIG_PKG.PITRIG_DELMETADATA +XDB_PITRIG_PKG.PITRIG_DROP +XDB_PITRIG_PKG.PITRIG_DROPMETADATA +XDB_PITRIG_PKG.PITRIG_TRUNCATE +XDB_PITRIG_PKG.PITRIG_UPD +XDB_PITRIG_PKG.PITRIG_UPDMETADATA +XDB_PITRIG_PKG_01. +XDB_PITRIG_PKG_01.PITRIG_DEL +XDB_PITRIG_PKG_01.PITRIG_DELMETADATA +XDB_PITRIG_PKG_01.PITRIG_UPD +XDB_PITRIG_PKG_01.PITRIG_UPDMETADATA +XDB_PI_TRIG. +XDB_PVTRIG_PKG. +XDB_PVTRIG_PKG.PVTRIG_DEL +XDB_PVTRIG_PKG.PVTRIG_INS +XDB_PVTRIG_PKG.PVTRIG_UPD +XDB_PV_TRIG. +XDB_RVTRIG_PKG. +XDB_RVTRIG_PKG.RVTRIG_DEL +XDB_RVTRIG_PKG.RVTRIG_INS +XDB_RVTRIG_PKG.RVTRIG_UPD +XDB_RV_TRIG. +XID +XIDSLOT +XIDSLT +XIDSQN +XIDUSN +XID_REPORT +XIMETADATA_PKG. +XIMETADATA_PKG.GETINDEXMETADATA +XIMETADATA_PKG.GETINDEXMETADATACALLBACK +XIMETADATA_PKG.UTLGETTABLENAMES +XMLBINARYINPUTSTREAM.AVAILABLE +XMLBINARYINPUTSTREAM.CLOSE +XMLBINARYINPUTSTREAM.ISNULL +XMLBINARYINPUTSTREAM.READ +XMLBINARYINPUTSTREAM.XMLBINARYINPUTSTREAM +XMLBINARYOUTPUTSTREAM.CLOSE +XMLBINARYOUTPUTSTREAM.FLUSH +XMLBINARYOUTPUTSTREAM.ISNULL +XMLBINARYOUTPUTSTREAM.WRITE +XMLBINARYOUTPUTSTREAM.XMLBINARYOUTPUTSTREAM +XMLCHARACTERINPUTSTREAM.AVAILABLE +XMLCHARACTERINPUTSTREAM.CLOSE +XMLCHARACTERINPUTSTREAM.ISNULL +XMLCHARACTERINPUTSTREAM.READ +XMLCHARACTERINPUTSTREAM.XMLCHARACTERINPUTSTREAM +XMLCHARACTEROUTPUTSTREAM.CLOSE +XMLCHARACTEROUTPUTSTREAM.FLUSH +XMLCHARACTEROUTPUTSTREAM.ISNULL +XMLCHARACTEROUTPUTSTREAM.WRITE +XMLCHARACTEROUTPUTSTREAM.XMLCHARACTEROUTPUTSTREAM +XMLGENFORMATTYPE.CREATEFORMAT +XMLGENFORMATTYPE.CREATEFORMAT2 +XMLGENFORMATTYPE.GENSCHEMA +XMLGENFORMATTYPE.SETDBURLPREFIX +XMLGENFORMATTYPE.SETENCLOSINGELEMENTNAME +XMLGENFORMATTYPE.SETPROCESSINGINS +XMLGENFORMATTYPE.SETSCHEMANAME +XMLGENFORMATTYPE.SETTARGETNAMESPACE +XMLGENFORMATTYPE.XMLGENFORMATTYPE +XMLIDXSTATSMETHODS.ODCIGETINTERFACES +XMLIDXSTATSMETHODS.ODCISTATSCOLLECT +XMLIDXSTATSMETHODS.ODCISTATSDELETE +XMLIDXSTATSMETHODS.ODCISTATSFUNCTIONCOST +XMLIDXSTATSMETHODS.ODCISTATSINDEXCOST +XMLIDXSTATSMETHODS.ODCISTATSSELECTIVITY +XMLIDXSTATSMETHODS.ODCISTATSUPDPARTSTATISTICS +XMLINDEXINSFUNC. +XMLINDEXLOADFUNC. +XMLINDEXLOAD_IMP_T.ODCITABLECLOSE +XMLINDEXLOAD_IMP_T.ODCITABLEFETCH +XMLINDEXLOAD_IMP_T.ODCITABLESTART +XMLINDEXMETHODS.ODCIGETINTERFACES +XMLINDEXMETHODS.ODCIINDEXALTER +XMLINDEXMETHODS.ODCIINDEXCLOSE +XMLINDEXMETHODS.ODCIINDEXCREATE +XMLINDEXMETHODS.ODCIINDEXDELETE +XMLINDEXMETHODS.ODCIINDEXDROP +XMLINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +XMLINDEXMETHODS.ODCIINDEXFETCH +XMLINDEXMETHODS.ODCIINDEXGETMETADATA +XMLINDEXMETHODS.ODCIINDEXINSERT +XMLINDEXMETHODS.ODCIINDEXSTART +XMLINDEXMETHODS.ODCIINDEXTRUNCATE +XMLINDEXMETHODS.ODCIINDEXUPDATE +XMLINDEXMETHODS.ODCIINDEXUPDPARTMETADATA +XMLINDEXMETHODS.ODCIINDEXUTILCLEANUP +XMLINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +XMLINDEX_FUNCIMPL. +XMLINDEX_FUNCIMPL.XMLINDEX_NOOP +XMLINDEX_REWRITE +XMLINDEX_REWRITE_IN_SELECT +XMLINDEX_SEL_IDX_TBL +XMLROOT. +XMLSCHEMA +XMLSEQCUR2_IMP_T.ODCITABLECLOSE +XMLSEQCUR2_IMP_T.ODCITABLEFETCH +XMLSEQCUR2_IMP_T.ODCITABLESTART +XMLSEQCUR_IMP_T.ODCITABLECLOSE +XMLSEQCUR_IMP_T.ODCITABLEFETCH +XMLSEQCUR_IMP_T.ODCITABLESTART +XMLSEQUENCEFROMREFCURSOR. +XMLSEQUENCEFROMREFCURSOR2. +XMLSEQUENCEFROMXMLTYPE. +XMLSEQ_IMP_T.ODCITABLECLOSE +XMLSEQ_IMP_T.ODCITABLEFETCH +XMLSEQ_IMP_T.ODCITABLESTART +XMLTYPE.APPENDCHILDXML +XMLTYPE.CREATENONSCHEMABASEDXML +XMLTYPE.CREATESCHEMABASEDXML +XMLTYPE.CREATEXML +XMLTYPE.CREATEXMLFROMBINARY +XMLTYPE.DELETEXML +XMLTYPE.EXISTSNODE +XMLTYPE.EXTRACT +XMLTYPE.GETBLOBVAL +XMLTYPE.GETCLOBVAL +XMLTYPE.GETNAMESPACE +XMLTYPE.GETNUMBERVAL +XMLTYPE.GETROOTELEMENT +XMLTYPE.GETSCHEMAID +XMLTYPE.GETSCHEMAURL +XMLTYPE.GETSTRINGVAL +XMLTYPE.INSERTXMLBEFORE +XMLTYPE.ISFRAGMENT +XMLTYPE.ISSCHEMABASED +XMLTYPE.ISSCHEMAVALID +XMLTYPE.ISSCHEMAVALIDATED +XMLTYPE.SCHEMAVALIDATE +XMLTYPE.SETSCHEMAVALIDATED +XMLTYPE.TOOBJECT +XMLTYPE.TRANSFORM +XMLTYPE.XMLTYPE +XMLVALIDATE. +XML_DML_RWT_STMT +XML_SCHEMA_NAME_PRESENT. +XML_SCHEMA_NAME_PRESENT.IS_SCHEMA_PRESENT +XNC +XOQ_VALIDATE. +XPATHINDEXMETHODS.ODCIGETINTERFACES +XPATHINDEXMETHODS.ODCIINDEXALTER +XPATHINDEXMETHODS.ODCIINDEXCLOSE +XPATHINDEXMETHODS.ODCIINDEXCREATE +XPATHINDEXMETHODS.ODCIINDEXDELETE +XPATHINDEXMETHODS.ODCIINDEXDROP +XPATHINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +XPATHINDEXMETHODS.ODCIINDEXFETCH +XPATHINDEXMETHODS.ODCIINDEXGETMETADATA +XPATHINDEXMETHODS.ODCIINDEXINSERT +XPATHINDEXMETHODS.ODCIINDEXMERGEPARTITION +XPATHINDEXMETHODS.ODCIINDEXSPLITPARTITION +XPATHINDEXMETHODS.ODCIINDEXSTART +XPATHINDEXMETHODS.ODCIINDEXTRUNCATE +XPATHINDEXMETHODS.ODCIINDEXUPDATE +XPATHINDEXMETHODS.ODCIINDEXUTILCLEANUP +XPATHINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +XQSEQUENCEFROMXMLTYPE. +XQSEQ_IMP_T.ODCITABLECLOSE +XQSEQ_IMP_T.ODCITABLEFETCH +XQSEQ_IMP_T.ODCITABLESTART +XQWINDOWSEQUENCEFROMXMLTYPE. +XQWINDOWSEQ_IMP_T.ODCITABLECLOSE +XQWINDOWSEQ_IMP_T.ODCITABLEFETCH +XQWINDOWSEQ_IMP_T.ODCITABLESTART +XS$CATVIEW_UTIL. +XS$CATVIEW_UTIL.DISABLEBYANCESTOR +XS$DATA_SECURITY$XD. +XS$ROLESETS$XD. +XS$SECURITYCLASS$XD. +X_2_NULL +X_2_NULL_FORCED_STALE +X_2_NULL_FORCED_WRITE +X_2_S +X_2_SSX +X_2_SSX_FORCED_WRITE +X_2_S_FORCED_WRITE +X_DYN_PRUNE +YIELDS +ZERO_RESULTS +_4030_dump_bitvec +_4031_dump_bitvec +_4031_dump_interval +_4031_max_dumps +_4031_sga_dump_interval +_4031_sga_max_dumps +_NUMA_instance_mapping +_NUMA_pool_size +_PX_use_large_pool +__db_cache_size +__dg_broker_service_names +__java_pool_size +__large_pool_size +__oracle_base +__pga_aggregate_target +__sga_target +__shared_io_pool_size +__shared_pool_size +__streams_pool_size +_abort_recovery_on_join +_accept_versions +_active_instance_count +_active_session_idle_limit +_active_session_legacy_behavior +_active_standby_fast_reconfiguration +_adaptive_direct_read +_adaptive_direct_write +_adaptive_fetch_enabled +_adaptive_log_file_sync_high_switch_freq_threshold +_adaptive_log_file_sync_poll_aggressiveness +_adaptive_log_file_sync_sched_delay_window +_adaptive_log_file_sync_use_polling_threshold +_adaptive_log_file_sync_use_postwait_threshold +_add_col_optim_enabled +_add_stale_mv_to_dependency_list +_add_trim_for_nlssort +_addm_auto_enable +_addm_skiprules +_addm_version_check +_adjust_literal_replacement +_adr_migrate_runonce +_affinity_on +_aged_out_cursor_cache_time +_aggregation_optimization_settings +_aiowait_timeouts +_alert_expiration +_alert_message_cleanup +_alert_message_purge +_alert_post_background +_all_shared_dblinks +_allocate_creation_order +_allocation_update_interval +_allow_cell_smart_scan_attr +_allow_commutativity +_allow_compatibility_adv_w_grp +_allow_drop_snapshot_standby_grsp +_allow_error_simulation +_allow_level_without_connect_by +_allow_read_only_corruption +_allow_resetlogs_corruption +_allow_terminal_recovery_corruption +_alternate_iot_leaf_block_split_points +_always_anti_join +_always_semi_join +_always_star_transformation +_and_pruning_enabled +_app_ctx_vers +_appqos_qt +_aq_max_scan_delay +_aq_tm_deqcountinterval +_aq_tm_scanlimit +_aq_tm_statistics_duration +_arch_comp_dbg_scan +_arch_comp_dec_block_check_dump +_arch_compress_checksums +_arch_compression +_arch_io_slaves +_arch_sim_mode +_array_update_vector_read_enabled +_ash_compression_enable +_ash_disk_filter_ratio +_ash_disk_write_enable +_ash_dummy_test_param +_ash_eflush_trigger +_ash_enable +_ash_min_mmnl_dump +_ash_sample_all +_ash_sampling_interval +_ash_size +_asm_acd_chunks +_asm_admin_with_sysdba +_asm_allow_lvm_resilvering +_asm_allow_only_raw_disks +_asm_ausize +_asm_automatic_rezone +_asm_avoid_pst_scans +_asm_blksize +_asm_check_for_misbehaving_cf_clients +_asm_compatibility +_asm_dba_threshold +_asm_dbmsdg_nohdrchk +_asm_diag_dead_clients +_asm_direct_con_expire_time +_asm_disable_amdu_dump +_asm_disable_async_msgs +_asm_disable_multiple_instance_check +_asm_disable_profilediscovery +_asm_disable_smr_creation +_asm_disk_repair_time +_asm_emulate_nfs_disk +_asm_emulmax +_asm_emultimeout +_asm_evenread +_asm_evenread_alpha +_asm_evenread_alpha2 +_asm_evenread_faststart +_asm_fail_random_rx +_asm_fob_tac_frequency +_asm_force_quiesce +_asm_hbeatwaitquantum +_asm_imbalance_tolerance +_asm_instlock_quota +_asm_iostat_latch_count +_asm_kfdpevent +_asm_kfioevent +_asm_kill_unresponsive_clients +_asm_libraries +_asm_log_scale_rebalance +_asm_lsod_bucket_size +_asm_max_cod_strides +_asm_max_redo_buffer_size +_asm_maxio +_asm_partner_target_disk_part +_asm_partner_target_fg_rel +_asm_primary_load +_asm_primary_load_cycles +_asm_random_zone +_asm_rebalance_plan_size +_asm_rebalance_space_errors +_asm_repairquantum +_asm_reserve_slaves +_asm_root_directory +_asm_runtime_capability_volume_support +_asm_secondary_load +_asm_secondary_load_cycles +_asm_serialize_volume_rebalance +_asm_shadow_cycle +_asm_skip_rename_check +_asm_skip_resize_check +_asm_storagemaysplit +_asm_stripesize +_asm_stripewidth +_asm_sync_rebalance +_asm_usd_batch +_asm_wait_time +_asmlib_test +_asmsid +_assm_default +_assm_force_fetchmeta +_assm_high_gsp_threshold +_assm_low_gsp_threshold +_async_recovery_claims +_async_recovery_reads +_async_ts_threshold +_auto_assign_cg_for_sessions +_auto_bmr +_auto_bmr_bg_time +_auto_bmr_fc_time +_auto_bmr_pub_timeout +_auto_bmr_req_timeout +_auto_bmr_sess_threshold +_auto_bmr_sys_threshold +_auto_manage_enable_offline_check +_auto_manage_exadata_disks +_auto_manage_infreq_tout +_auto_manage_ioctl_bufsz +_auto_manage_max_online_tries +_auto_manage_num_pipe_msgs +_auto_manage_num_tries +_auto_manage_online_tries_expire_time +_automatic_maintenance_test +_automemory_broker_interval +_autotask_max_window +_autotask_min_window +_autotune_gtx_idle_time +_autotune_gtx_interval +_autotune_gtx_threshold +_avoid_prepare +_awr_corrupt_mode +_awr_disabled_flush_tables +_awr_flush_threshold_metrics +_awr_flush_workload_metrics +_awr_mmon_cpuusage +_awr_mmon_deep_purge_extent +_awr_mmon_deep_purge_interval +_awr_mmon_deep_purge_numrows +_awr_restrict_mode +_awr_sql_child_limit +_b_tree_bitmap_plans +_backup_align_write_io +_backup_disk_bufcnt +_backup_disk_bufsz +_backup_disk_io_slaves +_backup_dynamic_buffers +_backup_encrypt_opt_mode +_backup_file_bufcnt +_backup_file_bufsz +_backup_io_pool_size +_backup_kgc_blksiz +_backup_kgc_bufsz +_backup_kgc_memlevel +_backup_kgc_niters +_backup_kgc_perflevel +_backup_kgc_scheme +_backup_kgc_type +_backup_kgc_windowbits +_backup_ksfq_bufcnt +_backup_ksfq_bufcnt_max +_backup_ksfq_bufsz +_backup_lzo_size +_backup_max_gap_size +_backup_seq_bufcnt +_backup_seq_bufsz +_bct_bitmaps_per_file +_bct_buffer_allocation_max +_bct_buffer_allocation_min_extents +_bct_buffer_allocation_size +_bct_chunk_size +_bct_crash_reserve_size +_bct_file_block_size +_bct_file_extent_size +_bct_fixtab_file +_bct_health_check_interval +_bct_initial_private_dba_buffer_size +_bct_public_dba_buffer_size +_bitmap_or_improvement_enabled +_block_sample_readahead_prob_threshold +_blocking_sess_graph_cache_size +_blocks_per_cache_server +_bloom_filter_debug +_bloom_filter_enabled +_bloom_folding_density +_bloom_folding_enabled +_bloom_folding_min +_bloom_max_size +_bloom_minmax_enabled +_bloom_predicate_enabled +_bloom_predicate_pushdown_to_storage +_bloom_pruning_enabled +_bloom_pushing_max +_bloom_pushing_total_max +_bloom_vector_elements +_bmr_prefered_standby +_branch_tagging +_broadcast_scn_wait_timeout +_bsln_adaptive_thresholds_enabled +_bt_mmv_query_rewrite_enabled +_buffer_busy_wait_timeout +_buffered_message_spill_age +_buffered_publisher_flow_control_threshold +_bufq_stop_flow_control +_build_deferred_mv_skipping_mvlog_update +_bump_highwater_mark_count +_bwr_for_flushed_pi +_bypass_srl_for_so_eor +_bypass_xplatform_error +_cache_stats_monitor +_capture_buffer_size +_capture_publisher_flow_control_threshold +_case_sensitive_logon +_causal_standby_wait_timeout +_cdmp_diagnostic_level +_cell_fast_file_create +_cell_fast_file_restore +_cell_file_format_chunk_size +_cell_index_scan_enabled +_cell_offload_capabilities_enabled +_cell_offload_hybridcolumnar +_cell_offload_predicate_reordering_enabled +_cell_offload_timezone +_cell_offload_virtual_columns +_cell_range_scan_enabled +_cell_storidx_mode +_cgs_health_check_in_reconfig +_cgs_node_kill_escalation +_cgs_node_kill_escalation_wait +_cgs_reconfig_extra_wait +_cgs_reconfig_timeout +_cgs_send_timeout +_cgs_tickets +_cgs_zombie_member_kill_wait +_check_block_after_checksum +_check_block_new_invariant_for_flashback +_check_column_length +_check_ts_threshold +_cleanup_rollback_entries +_cleanup_timeout +_cleanup_timeout_flags +_clear_buffer_before_reuse +_client_ntfn_cleanup_interval +_client_ntfn_pinginterval +_client_ntfn_pingretries +_client_ntfn_pingtimeout +_client_result_cache_bypass +_client_tstz_error_check +_close_cached_open_cursors +_close_deq_by_cond_curs +_cluster_library +_clusterwide_global_transactions +_collapse_wait_history +_collect_undo_stats +_column_compression_factor +_column_elimination_off +_column_tracking_level +_compilation_call_heap_extent_size +_complex_view_merging +_compression_above_cache +_compression_advisor +_compression_chain +_compression_compatibility +_connect_by_use_union_all +_controlfile_autobackup_delay +_controlfile_backup_copy_check +_controlfile_block_size +_controlfile_enqueue_dump +_controlfile_enqueue_holding_time +_controlfile_enqueue_holding_time_tracking_size +_controlfile_enqueue_timeout +_controlfile_section_init_size +_controlfile_section_max_expand +_controlfile_update_check +_convert_set_to_join +_coord_message_buffer +_corrupted_rollback_segments +_cost_equality_semi_join +_cp_num_hash_latches +_cpu_to_io +_cr_grant_global_role +_cr_grant_local_role +_cr_grant_only +_cr_server_log_flush +_cr_trc_buf_size +_create_table_in_any_cluster +_cursor_bind_capture_area_size +_cursor_bind_capture_interval +_cursor_cache_time +_cursor_db_buffers_pinned +_cursor_features_enabled +_cursor_plan_enabled +_cursor_plan_hash_version +_cursor_plan_unparse_enabled +_cursor_runtimeheap_memlimit +_cursor_stats_enabled +_cvw_enable_weak_checking +_datafile_cow +_datafile_write_errors_crash_instance +_db_16k_flash_cache_file +_db_16k_flash_cache_size +_db_2k_flash_cache_file +_db_2k_flash_cache_size +_db_32k_flash_cache_file +_db_32k_flash_cache_size +_db_4k_flash_cache_file +_db_4k_flash_cache_size +_db_8k_flash_cache_file +_db_8k_flash_cache_size +_db_aging_cool_count +_db_aging_freeze_cr +_db_aging_hot_criteria +_db_aging_stay_count +_db_aging_touch_time +_db_always_check_system_ts +_db_block_adjcheck +_db_block_adjchk_level +_db_block_align_direct_read +_db_block_bad_write_check +_db_block_buffers +_db_block_cache_clone +_db_block_cache_history +_db_block_cache_history_level +_db_block_cache_num_umap +_db_block_cache_protect +_db_block_cache_protect_internal +_db_block_check_for_debug +_db_block_check_objtyp +_db_block_chunkify_ncmbr +_db_block_corruption_recovery_threshold +_db_block_do_full_mbreads +_db_block_hash_buckets +_db_block_hash_latches +_db_block_header_guard_level +_db_block_hi_priority_batch_size +_db_block_known_clean_pct +_db_block_lru_latches +_db_block_max_cr_dba +_db_block_max_scan_pct +_db_block_med_priority_batch_size +_db_block_numa +_db_block_prefetch_fast_longjumps_enabled +_db_block_prefetch_limit +_db_block_prefetch_override +_db_block_prefetch_private_cache_enabled +_db_block_prefetch_quota +_db_block_prefetch_skip_reading_enabled +_db_block_table_scan_buffer_size +_db_block_temp_redo +_db_block_trace_protect +_db_block_vlm_check +_db_block_vlm_leak_threshold +_db_blocks_per_hash_latch +_db_cache_advice_max_size_factor +_db_cache_advice_sample_factor +_db_cache_advice_sanity_check +_db_cache_crx_check +_db_cache_miss_check_les +_db_cache_mman_latch_check +_db_cache_pre_warm +_db_cache_process_cr_pin_max +_db_cache_wait_debug +_db_change_notification_enable +_db_check_cell_hints +_db_disable_temp_encryption +_db_dump_from_disk_noefc +_db_fast_obj_check +_db_fast_obj_ckpt +_db_fast_obj_truncate +_db_file_direct_io_count +_db_file_exec_read_count +_db_file_format_io_buffers +_db_file_noncontig_mblock_read_count +_db_file_optimizer_read_count +_db_flash_cache_keep_limit +_db_flashback_iobuf_size +_db_flashback_log_min_size +_db_flashback_log_min_total_space +_db_flashback_num_iobuf +_db_handles +_db_handles_cached +_db_hot_block_tracking +_db_index_block_checking +_db_l2_tracing +_db_large_dirty_queue +_db_lost_write_checking +_db_lost_write_tracing +_db_mttr_advice +_db_mttr_partitions +_db_mttr_sample_factor +_db_mttr_sim_target +_db_mttr_sim_trace_size +_db_mttr_trace_to_alert +_db_noarch_disble_optim +_db_num_evict_waitevents +_db_obj_enable_ksr +_db_percent_hot_default +_db_percent_hot_keep +_db_percent_hot_recycle +_db_percpu_create_cachesize +_db_prefetch_histogram_statistics +_db_recovery_temporal_file_dest +_db_required_percent_fairshare_usage +_db_row_overlap_checking +_db_todefer_cache_create +_db_writer_chunk_writes +_db_writer_coalesce_area_size +_db_writer_coalesce_write_limit +_db_writer_flush_imu +_db_writer_histogram_statistics +_db_writer_max_writes +_db_writer_nomemcopy_coalesce +_db_writer_verify_writes +_dbg_proc_startup +_dbms_sql_security_level +_dbrm_dynamic_threshold +_dbrm_quantum +_dbrm_readylist_chk +_dbrm_runchk +_dbrm_workload_learn +_dbwr_async_io +_dbwr_scan_interval +_dbwr_tracing +_dde_flood_control_init +_dead_process_scan_interval +_deadlock_diagnostic_level +_deadlock_resolution_incidents_always +_deadlock_resolution_incidents_enabled +_deadlock_resolution_level +_deadlock_resolution_min_wait_timeout_secs +_deadlock_resolution_signal_process_thresh_secs +_dedicated_server_poll_count +_dedicated_server_post_wait +_dedicated_server_post_wait_call +_default_encrypt_alg +_default_non_equality_sel_check +_defer_eor_orl_arch_for_so +_defer_log_boundary_ckpt +_defer_log_count +_defer_rcv_during_sw_to_sby +_deferred_constant_folding_mode +_deferred_log_dest_is_valid +_delay_index_maintain +_delta_push_share_blockers +_deq_execute_reset_time +_deq_ht_child_latches +_deq_ht_max_elements +_deq_large_txn_size +_deq_log_array_size +_deq_max_fetch_count +_deq_maxwait_time +_desired_readmem_rate +_dg_cf_check_timer +_dg_corrupt_redo_log +_diag_adr_auto_purge +_diag_adr_enabled +_diag_adr_test_param +_diag_arb_before_kill +_diag_backward_compat +_diag_cc_enabled +_diag_conf_cap_enabled +_diag_crashdump_level +_diag_daemon +_diag_dde_async_age_limit +_diag_dde_async_cputime_limit +_diag_dde_async_mode +_diag_dde_async_msg_capacity +_diag_dde_async_msgs +_diag_dde_async_process_rate +_diag_dde_async_runtime_limit +_diag_dde_async_slaves +_diag_dde_enabled +_diag_dde_fc_enabled +_diag_dde_fc_implicit_time +_diag_dde_fc_macro_time +_diag_dde_inc_proc_delay +_diag_diagnostics +_diag_dump_request_debug_level +_diag_dump_timeout +_diag_enable_startup_events +_diag_hm_rc_enabled +_diag_hm_tc_enabled +_diag_proc_enabled +_diag_proc_max_time_ms +_diag_proc_stack_capture_type +_diag_uts_control +_diag_verbose_error_on_init +_dimension_skip_null +_direct_io_skip_cur_slot_on_error +_direct_io_slots +_direct_io_wslots +_direct_path_insert_features +_direct_read_decision_statistics_driven +_disable_12751 +_disable_active_influx_move +_disable_adaptive_shrunk_aggregation +_disable_autotune_gtx +_disable_cell_optimized_backups +_disable_cpu_check +_disable_datalayer_sampling +_disable_duplex_link +_disable_fast_aggregation +_disable_fast_validate +_disable_fastopen +_disable_fba_qrw +_disable_fba_wpr +_disable_file_locks +_disable_flashback_archiver +_disable_flashback_wait_callback +_disable_function_based_index +_disable_gvaq_cache +_disable_health_check +_disable_highres_ticks +_disable_image_check +_disable_implicit_row_movement +_disable_incremental_checkpoints +_disable_incremental_recovery_ckpt +_disable_index_block_prefetching +_disable_initial_block_compression +_disable_instance_params_check +_disable_interface_checking +_disable_kcb_flashback_blocknew_opt +_disable_kcbhxor_osd +_disable_kcbl_flashback_blocknew_opt +_disable_latch_free_SCN_writes_via_32cas +_disable_latch_free_SCN_writes_via_64cas +_disable_logging +_disable_metrics_group +_disable_multiple_block_sizes +_disable_odm +_disable_parallel_conventional_load +_disable_primary_bitmap_switch +_disable_read_only_open_dict_check +_disable_rebalance_compact +_disable_rebalance_space_check +_disable_recovery_read_skip +_disable_sample_io_optim +_disable_savepoint_reset +_disable_selftune_checkpointing +_disable_streams_diagnostics +_disable_streams_pool_auto_tuning +_disable_sun_rsm +_disable_system_state +_disable_system_state_wait_samples +_disable_temp_tablespace_alerts +_disable_thread_internal_disable +_disable_thread_snapshot +_disable_txn_alert +_disable_undo_tablespace_alerts +_disable_wait_state +_discrete_transactions_enabled +_disk_sector_size_override +_diskmon_pipe_name +_dispatcher_rate_scale +_dispatcher_rate_ttl +_distinct_view_unnesting +_distributed_recovery_connection_hold_time +_dlmtrace +_dm_max_shared_pool_pct +_dml_batch_error_limit +_dml_frequency_tracking +_dml_frequency_tracking_advance +_dml_frequency_tracking_slot_time +_dml_frequency_tracking_slots +_dml_monitoring_enabled +_domain_index_batch_size +_domain_index_dml_batch_size +_dra_bmr_number_threshold +_dra_bmr_percent_threshold +_dra_enable_offline_dictionary +_drop_flashback_logical_operations_enq +_drop_table_granule +_drop_table_optimization_enabled +_ds_enable_auto_txn +_ds_iocount_iosize +_ds_parse_model +_dsc_feature_level +_dss_cache_flush +_dtree_area_size +_dtree_binning_enabled +_dtree_bintest_id +_dtree_compressbmp_enabled +_dtree_max_surrogates +_dtree_pruning_enabled +_dummy_instance +_dump_common_subexpressions +_dump_connect_by_loop_data +_dump_cursor_heap_sizes +_dump_interval_limit +_dump_max_limit +_dump_qbc_tree +_dump_rcvr_ipc +_dump_system_state_scope +_dump_trace_scope +_dynamic_rls_policies +_dynamic_stats_threshold +_eighteenth_spare_parameter +_eighth_spare_parameter +_eleventh_spare_parameter +_eliminate_common_subexpr +_emon_max_active_connections +_emon_outbound_connect_timeout +_emon_regular_ntfn_slaves +_enable_Front_End_View_Optimization +_enable_LGPG_debug +_enable_NUMA_interleave +_enable_NUMA_optimization +_enable_NUMA_support +_enable_asyncvio +_enable_automatic_maintenance +_enable_automatic_sqltune +_enable_block_level_transaction_recovery +_enable_check_truncate +_enable_cscn_caching +_enable_ddl_wait_lock +_enable_default_affinity +_enable_default_temp_threshold +_enable_default_undo_threshold +_enable_dml_lock_escalation +_enable_editions_for_users +_enable_exchange_validation_using_check +_enable_fast_ref_after_mv_tbs +_enable_ffw +_enable_hash_overflow +_enable_hwm_sync +_enable_kqf_purge +_enable_list_io +_enable_midtier_affinity +_enable_minscn_cr +_enable_nativenet_tcpip +_enable_obj_queues +_enable_online_index_without_s_locking +_enable_query_rewrite_on_remote_objs +_enable_redo_global_post +_enable_refresh_schedule +_enable_reliable_latch_waits +_enable_rename_user +_enable_rlb +_enable_row_shipping +_enable_sb_detection +_enable_schema_synonyms +_enable_scn_wait_interface +_enable_separable_transactions +_enable_shared_pool_durations +_enable_shared_server_vector_io +_enable_space_preallocation +_enable_spacebg +_enable_tablespace_alerts +_enable_type_dep_selectivity +_endprot_chunk_comment +_endprot_heap_comment +_endprot_subheaps +_enqueue_deadlock_scan_secs +_enqueue_deadlock_time_sec +_enqueue_debug_multi_instance +_enqueue_hash +_enqueue_hash_chain_latches +_enqueue_locks +_enqueue_paranoia_mode_enabled +_enqueue_resources +_evolve_plan_baseline_report_level +_evt_system_event_propagation +_expand_aggregates +_explain_rewrite_mode +_extended_pruning_enabled +_fair_remote_cvt +_fairness_threshold +_fast_cursor_reexecute +_fast_dual_enabled +_fast_full_scan_enabled +_fastpin_enable +_fbda_busy_percentage +_fbda_debug_assert +_fbda_debug_mode +_fbda_global_bscn_lag +_fbda_inline_percentage +_fbda_rac_inactive_limit +_fg_iorm_slaves +_fg_log_checksum +_fg_sync_sleep_usecs +_fic_algorithm_set +_fic_area_size +_fic_max_length +_fic_min_bmsize +_fic_outofmem_candidates +_fifteenth_spare_parameter +_fifth_spare_parameter +_file_size_increase_increment +_filemap_dir +_first_k_rows_dynamic_proration +_first_spare_parameter +_fix_control +_flashback_11.1_block_new_opt +_flashback_allow_noarchivelog +_flashback_archiver_partition_size +_flashback_barrier_interval +_flashback_copy_latches +_flashback_database_test_only +_flashback_delete_chunk_MB +_flashback_dynamic_enable +_flashback_dynamic_enable_failure +_flashback_enable_ra +_flashback_format_chunk_mb +_flashback_format_chunk_mb_dwrite +_flashback_fuzzy_barrier +_flashback_generation_buffer_size +_flashback_hint_barrier_percent +_flashback_log_io_error_behavior +_flashback_log_min_size +_flashback_log_rac_balance_factor +_flashback_log_size +_flashback_logfile_enqueue_timeout +_flashback_marker_cache_enabled +_flashback_marker_cache_size +_flashback_max_log_size +_flashback_max_n_log_per_thread +_flashback_max_standby_sync_span +_flashback_n_log_per_thread +_flashback_prepare_log +_flashback_standby_barrier_interval +_flashback_validate_controlfile +_flashback_verbose_info +_flashback_write_max_loop_limit +_flush_plan_in_awr_sql +_flush_redo_to_standby +_flush_undo_after_tx_recovery +_force_arch_compress +_force_datefold_trunc +_force_hash_join_spill +_force_hsc_compress +_force_oltp_compress +_force_rcv_info_ping +_force_rewrite_enable +_force_slave_mapping_intra_part_loads +_force_temptables_for_gsets +_force_tmp_segment_loads +_forwarded_2pc_threshold +_fourteenth_spare_parameter +_fourth_spare_parameter +_frame_cache_time +_full_pwise_join_enabled +_fusion_security +_gby_hash_aggregation_enabled +_gby_onekey_enabled +_gc_affinity_locking +_gc_affinity_locks +_gc_affinity_ratio +_gc_async_memcpy +_gc_bypass_readers +_gc_check_bscn +_gc_coalesce_recovery_reads +_gc_cpu_time +_gc_cr_server_read_wait +_gc_defer_ping_index_only +_gc_defer_time +_gc_delta_push_compression +_gc_delta_push_max_level +_gc_delta_push_objects +_gc_down_convert_after_keep +_gc_element_percent +_gc_escalate_bid +_gc_fg_merge +_gc_flush_during_affinity +_gc_fusion_compression +_gc_global_checkpoint_scn +_gc_global_cpu +_gc_global_lru +_gc_global_lru_touch_count +_gc_global_lru_touch_time +_gc_integrity_checks +_gc_keep_recovery_buffers +_gc_latches +_gc_log_flush +_gc_long_query_threshold +_gc_max_downcvt +_gc_maximum_bids +_gc_no_fairness_for_clones +_gc_override_force_cr +_gc_persistent_read_mostly +_gc_policy_minimum +_gc_policy_time +_gc_read_mostly_flush_check +_gc_read_mostly_locking +_gc_serve_high_pi_as_current +_gc_statistics +_gc_transfer_ratio +_gc_tsn_undo_affinity +_gc_undo_affinity +_gc_undo_block_disk_reads +_gc_use_cr +_gc_vector_read +_gcr_enable_high_cpu_kill +_gcr_enable_high_cpu_rm +_gcr_enable_high_cpu_rt +_gcr_high_cpu_threshold +_gcs_disable_remote_handles +_gcs_fast_reconfig +_gcs_latches +_gcs_pkey_history +_gcs_process_in_recovery +_gcs_res_per_bucket +_gcs_resources +_gcs_shadow_locks +_gcs_testing +_generalized_pruning_enabled +_ges_dd_debug +_ges_designated_master +_ges_diagnostics +_ges_diagnostics_asm_dump_level +_ges_health_check +_ges_num_blockers_to_kill +_global_hang_analysis_interval_secs +_globalindex_pnum_filter_enabled +_groupby_nopushdown_cut_ratio +_groupby_orderby_combine +_gs_anti_semi_join_allowed +_hang_analysis_num_call_stacks +_hang_detection_enabled +_hang_detection_interval +_hang_hiload_promoted_ignored_hang_count +_hang_hiprior_session_attribute_list +_hang_ignored_hang_count +_hang_ignored_hangs_interval +_hang_log_incidents +_hang_long_wait_time_threshold +_hang_lws_file_count +_hang_lws_file_time_limit +_hang_msg_checksum_enabled +_hang_output_suspected_hangs +_hang_resolution_confidence_promotion +_hang_resolution_global_hang_confidence_promotion +_hang_resolution_policy +_hang_resolution_promote_process_termination +_hang_resolution_scope +_hang_signature_list_match_output_frequency +_hang_statistics_collection_interval +_hang_statistics_collection_ma_alpha +_hang_verification_interval +_hard_protection +_hash_join_enabled +_hash_multiblock_io_count +_hb_redo_msg_interval +_heur_deadlock_resolution_secs +_high_priority_processes +_high_server_threshold +_highres_drift_allowed_sec +_highthreshold_undoretention +_hj_bit_filter_threshold +_hm_analysis_oradebug_node_dump_level +_hm_analysis_oradebug_sys_dump_level +_hm_analysis_output_disk +_hwm_sync_threshold +_idl_conventional_index_maintenance +_idle_session_kill_enabled +_idxrb_rowincr +_ignore_desc_in_index +_ignore_edition_enabled_for_EV_creation +_ignore_fg_deps +_immediate_commit_propagation +_improved_outerjoin_card +_improved_row_length_enabled +_imr_active +_imr_avoid_double_voting +_imr_device_type +_imr_disk_voting_interval +_imr_diskvote_implementation +_imr_evicted_member_kill +_imr_evicted_member_kill_wait +_imr_extra_reconfig_wait +_imr_highload_threshold +_imr_max_reconfig_delay +_imr_splitbrain_res_wait +_imr_systemload_check +_imu_pools +_in_memory_tbs_search +_in_memory_undo +_incremental_recovery_ckpt_min_batch +_index_join_enabled +_index_partition_large_extents +_index_prefetch_factor +_index_scan_check_skip_corrupt +_init_granule_interval +_init_sql_file +_inject_startup_fault +_inline_sql_in_plsql +_inplace_update_retry +_inquiry_retry_interval +_insert_enable_hwm_brokered +_inst_locking_period +_interconnect_checksum +_intrapart_pdml_enabled +_intrapart_pdml_randomlocal_enabled +_io_resource_manager_always_on +_io_shared_pool_size +_io_slaves_disabled +_io_statistics +_iocalibrate_init_ios +_iocalibrate_max_ios +_ioq_fanin_multiplier +_ior_serialize_fault +_iorm_tout +_ioslave_batch_count +_ioslave_issue_count +_ipc_fail_network +_ipc_test_failover +_ipc_test_mult_nets +_ipddb_enable +_job_queue_interval +_k2q_latches +_kcfis_block_dump_level +_kcfis_caching_enabled +_kcfis_cell_passthru_enabled +_kcfis_control1 +_kcfis_control2 +_kcfis_control3 +_kcfis_control4 +_kcfis_control5 +_kcfis_control6 +_kcfis_disable_platform_decryption +_kcfis_dump_corrupt_block +_kcfis_fast_response_enabled +_kcfis_fast_response_initiosize +_kcfis_fast_response_iosizemult +_kcfis_fast_response_threshold +_kcfis_fault_control +_kcfis_io_prefetch_size +_kcfis_ioreqs_throttle_enabled +_kcfis_kept_in_cellfc_enabled +_kcfis_large_payload_enabled +_kcfis_max_cached_sessions +_kcfis_max_out_translations +_kcfis_nonkept_in_cellfc_enabled +_kcfis_oss_io_size +_kcfis_rdbms_blockio_enabled +_kcfis_read_buffer_limit +_kcfis_spawn_debugger +_kcfis_stats_level +_kcfis_storageidx_diag_mode +_kcfis_storageidx_disabled +_kcfis_test_control1 +_kcfis_trace_bucket_size +_kcfis_trace_level +_kcfis_work_set_appliances +_kcl_commit +_kcl_conservative_log_flush +_kcl_debug +_kcl_index_split +_kd_symtab_chk +_kdbl_enable_post_allocation +_kdi_avoid_block_checking +_kdic_segarr_sz +_kdis_reject_level +_kdis_reject_limit +_kdis_reject_ops +_kdli_STOP_bsz +_kdli_STOP_dba +_kdli_STOP_fsz +_kdli_STOP_nio +_kdli_STOP_tsn +_kdli_allow_corrupt +_kdli_buffer_inject +_kdli_cache_inode +_kdli_cache_read_threshold +_kdli_cache_size +_kdli_cache_verify +_kdli_cache_write_threshold +_kdli_cacheable_length +_kdli_checkpoint_flush +_kdli_dbc +_kdli_delay_flushes +_kdli_flush_cache_reads +_kdli_flush_injections +_kdli_force_cr +_kdli_force_cr_meta +_kdli_force_storage +_kdli_full_readahead_threshold +_kdli_inject_assert +_kdli_inject_batch +_kdli_inject_crash +_kdli_inline_xfm +_kdli_inode_preference +_kdli_inplace_overwrite +_kdli_itree_entries +_kdli_memory_protect +_kdli_preallocation_mode +_kdli_preallocation_pct +_kdli_rci_lobmap_entries +_kdli_readahead_limit +_kdli_readahead_strategy +_kdli_recent_scn +_kdli_reshape +_kdli_safe_callbacks +_kdli_sio_async +_kdli_sio_backoff +_kdli_sio_bps +_kdli_sio_dop +_kdli_sio_fbwrite_pct +_kdli_sio_fgio +_kdli_sio_fileopen +_kdli_sio_flush +_kdli_sio_free +_kdli_sio_min_read +_kdli_sio_min_write +_kdli_sio_nbufs +_kdli_sio_niods +_kdli_sio_on +_kdli_sio_pga +_kdli_sio_pga_top +_kdli_sio_strategy +_kdli_sio_write_pct +_kdli_small_cache_limit +_kdli_sort_dbas +_kdli_space_cache_limit +_kdli_squeeze +_kdli_timer_dmp +_kdli_timer_trc +_kdli_trace +_kdlu_max_bucket_size +_kdlu_max_bucket_size_mts +_kdlu_trace_layer +_kdlu_trace_session +_kdlu_trace_system +_kdlw_enable_ksi_locking +_kdlw_enable_write_gathering +_kdlwp_flush_threshold +_kdlxp_cmp_subunit_size +_kdlxp_dedup_flush_threshold +_kdlxp_dedup_hash_algo +_kdlxp_dedup_inl_pctfree +_kdlxp_dedup_prefix_threshold +_kdlxp_dedup_wapp_len +_kdlxp_lobcmpadp +_kdlxp_lobcmplevel +_kdlxp_lobcmprciver +_kdlxp_lobcompress +_kdlxp_lobdeduplicate +_kdlxp_lobdedupvalidate +_kdlxp_lobencrypt +_kdlxp_mincmp +_kdlxp_mincmplen +_kdlxp_minxfm_size +_kdlxp_spare1 +_kdlxp_uncmp +_kdlxp_xfmcache +_kdt_buffering +_kdtgsp_retries +_kdu_array_depth +_kdz_hcc_flags +_kdz_hcc_track_upd_rids +_kebm_nstrikes +_kebm_suspension_time +_keep_remote_column_size +_kernel_message_network_driver +_kes_parse_model +_kffmap_hash_size +_kffmop_hash_size +_kfm_disable_set_fence +_kghdsidx_count +_kgl_bucket_count +_kgl_cluster_lock +_kgl_cluster_lock_read_mostly +_kgl_cluster_pin +_kgl_debug +_kgl_fixed_extents +_kgl_hash_collision +_kgl_heap_size +_kgl_hot_object_copies +_kgl_kqr_cap_so_stacks +_kgl_large_heap_warning_threshold +_kgl_latch_count +_kgl_message_locks +_kgl_min_cached_so_count +_kgl_mutex_wait_time +_kgl_time_to_wait_for_locks +_kglsim_maxmem_percent +_kgsb_threshold_size +_kgx_latches +_kgx_spin_count +_kill_controlfile_enqueue_blocker +_kill_diagnostics_timeout +_kill_enqueue_blocker +_kill_java_threads_on_eoc +_kill_session_dump +_kkfi_trace +_kks_free_cursor_stat_pct +_kokli_cache_size +_kokln_current_read +_kolfuseslf +_kql_subheap_trace +_ksb_restart_clean_time +_ksb_restart_policy_times +_ksd_test_param +_ksdx_charset_ratio +_ksdxdocmd_default_timeout_ms +_ksdxdocmd_enabled +_ksdxw_cini_flg +_ksdxw_nbufs +_ksdxw_num_pgw +_ksdxw_num_sgw +_ksdxw_stack_depth +_kse_die_timeout +_kse_pc_table_size +_kse_signature_entries +_kse_signature_limit +_kse_snap_ring_record_stack +_kse_snap_ring_size +_kse_trace_int_msg_clear +_ksfd_verify_write +_ksi_clientlocks_enabled +_ksi_trace +_ksi_trace_bucket +_ksi_trace_bucket_size +_ksm_post_sga_init_notif_delay_secs +_ksm_pre_sga_init_notif_delay_secs +_ksmb_debug +_ksmd_protect_mode +_ksmg_granule_locking_status +_ksmg_granule_size +_ksmg_lock_check_interval +_ksmg_lock_reacquire_count +_kspol_tac_timeout +_ksr_unit_test_processes +_kss_callstack_type +_kss_quiet +_ksu_diag_kill_time +_ksuitm_addon_trccmd +_ksuitm_dont_kill_dumper +_ksv_dynamic_flags1 +_ksv_max_spawn_fail_limit +_ksv_pool_hang_kill_to +_ksv_pool_wait_timeout +_ksv_spawn_control_all +_ksv_static_flags1 +_ksvppktmode +_ksxp_compat_flags +_ksxp_control_flags +_ksxp_diagmode +_ksxp_disable_clss +_ksxp_disable_dynamic_loading +_ksxp_disable_ipc_stats +_ksxp_disable_rolling_migration +_ksxp_dump_timeout +_ksxp_dynamic_skgxp_param +_ksxp_if_config +_ksxp_init_stats_bkts +_ksxp_lwipc_enabled +_ksxp_max_stats_bkts +_ksxp_ping_enable +_ksxp_ping_polling_time +_ksxp_reaping +_ksxp_reporting_process +_ksxp_send_timeout +_ksxp_skgxp_compat_library_path +_ksxp_skgxp_ctx_flags1 +_ksxp_skgxp_ctx_flags1mask +_ksxp_skgxp_dynamic_protocol +_ksxp_skgxp_library_path +_ksxp_skgxp_rgn_ports +_ksxp_skgxp_spare_param1 +_ksxp_skgxp_spare_param2 +_ksxp_skgxp_spare_param3 +_ksxp_skgxp_spare_param4 +_ksxp_skgxp_spare_param5 +_ksxp_skgxpg_last_parameter +_ksxp_stats_mem_lmt +_ksxp_testing +_ksxp_unit_test_byte_transformation +_ksxp_wait_flags +_ktb_debug_flags +_ktc_debug +_ktc_latches +_ktslj_segext_max_mb +_ktslj_segext_retry +_ktslj_segext_warning +_ktslj_segext_warning_mb +_ktspsrch_maxsc +_ktspsrch_maxskip +_kttext_warning +_ktu_latches +_ku_trace +_large_pool_min_alloc +_last_allocation_period +_latch_class_0 +_latch_class_1 +_latch_class_2 +_latch_class_3 +_latch_class_4 +_latch_class_5 +_latch_class_6 +_latch_class_7 +_latch_classes +_latch_miss_stat_sid +_latch_recovery_alignment +_ldr_io_size +_ldr_pga_lim +_left_nested_loops_random +_lgwr_delay_write +_lgwr_io_slaves +_lgwr_max_ns_wt +_lgwr_ns_nl_max +_lgwr_ns_nl_min +_lgwr_ns_sim_err +_lgwr_posts_for_pending_bcasts +_lgwr_ta_sim_err +_library_cache_advice +_lightweight_hdrs +_like_with_bind_as_equality +_limit_itls +_lm_activate_lms_threshold +_lm_asm_enq_hashing +_lm_batch_compression_threshold +_lm_better_ddvictim +_lm_broadcast_res +_lm_broadcast_resname +_lm_cache_allocated_res_ratio +_lm_cache_lvl0_cleanup +_lm_cache_res_cleanup +_lm_cache_res_options +_lm_cache_res_skip_cleanup +_lm_cache_res_type +_lm_checksum_batch_msg +_lm_compression_scheme +_lm_contiguous_res_count +_lm_dd_ignore_nodd +_lm_dd_interval +_lm_dd_max_search_time +_lm_dd_maxdump +_lm_dd_scan_interval +_lm_dd_search_cnt +_lm_deferred_msg_timeout +_lm_drm_disable +_lm_drm_hiload_percentage +_lm_drm_lowload_percentage +_lm_drm_max_requests +_lm_drm_object_scan +_lm_drm_window +_lm_drm_xlatch +_lm_dump_null_lock +_lm_dynamic_lms +_lm_dynamic_load +_lm_enq_lock_freelist +_lm_enq_rcfg +_lm_enqueue_blocker_dump_timeout +_lm_enqueue_blocker_kill_timeout +_lm_enqueue_freelist +_lm_enqueue_timeout +_lm_file_affinity +_lm_file_read_mostly +_lm_free_queue_threshold +_lm_freeze_kill_time +_lm_global_posts +_lm_high_load_sysload_percentage +_lm_high_load_threshold +_lm_idle_connection_check +_lm_idle_connection_check_interval +_lm_idle_connection_instance_check_callout +_lm_idle_connection_kill +_lm_kill_fg_on_timeout +_lm_lhupd_interval +_lm_lmd_waittime +_lm_lmon_nowait_latch +_lm_lms +_lm_lms_spin +_lm_lms_waittime +_lm_local_hp_enq +_lm_locks +_lm_low_load_percentage +_lm_master_weight +_lm_max_lms +_lm_msg_batch_size +_lm_msg_cleanup_interval +_lm_no_lh_check +_lm_no_sync +_lm_node_join_opt +_lm_non_fault_tolerant +_lm_num_pt_buckets +_lm_num_pt_latches +_lm_postevent_buffer_size +_lm_preregister_css_restype +_lm_proc_freeze_timeout +_lm_process_batching +_lm_procs +_lm_psrcfg +_lm_rcfg_timeout +_lm_rcvinst +_lm_rcvr_hang_allow_time +_lm_rcvr_hang_cfio_kill +_lm_rcvr_hang_check_frequency +_lm_rcvr_hang_check_system_load +_lm_rcvr_hang_kill +_lm_rcvr_hang_systemstate_dump_level +_lm_res_hash_bucket +_lm_res_part +_lm_ress +_lm_send_mode +_lm_send_queue_batching +_lm_send_queue_length +_lm_sendproxy_reserve +_lm_share_lock_opt +_lm_spare_threads +_lm_spare_undo +_lm_sq_batch_factor +_lm_sq_batch_type +_lm_sq_batch_waittick +_lm_sync_timeout +_lm_ticket_active_sendback +_lm_tickets +_lm_tx_delta +_lm_use_gcr +_lm_use_new_defmsgtmo_action +_lm_use_tx_tsn +_lm_validate_pbatch +_lm_validate_resource_type +_lm_watchpoint_maximum +_lm_watchpoint_timeout +_lm_xids +_lmn_compression +_load_without_compile +_local_arc_assert_on_wait +_local_communication_costing_enabled +_local_communication_ratio +_local_hang_analysis_interval_secs +_lock_sga_areas +_log_archive_avoid_memcpy +_log_archive_buffers +_log_archive_callout +_log_archive_network_redo_size +_log_archive_prot_auto_demote +_log_archive_security_enabled +_log_archive_strong_auth +_log_archive_trace_pids +_log_blocks_during_backup +_log_buffer_coalesce +_log_buffers_corrupt +_log_buffers_debug +_log_checkpoint_recovery_check +_log_committime_block_cleanout +_log_deletion_policy +_log_event_queues +_log_file_sync_timeout +_log_io_size +_log_max_optimize_threads +_log_parallelism_dynamic +_log_parallelism_max +_log_private_mul +_log_private_parallelism_mul +_log_read_buffer_size +_log_read_buffers +_log_simultaneous_copies +_log_space_errors +_log_switch_timeout +_logout_storm_rate +_logout_storm_retrycnt +_logout_storm_timeout +_long_bcast_ack_warning_threshold +_long_log_write_warning_threshold +_longops_enabled +_low_server_threshold +_lowres_drift_allowed_sec +_ltc_trace +_main_dead_process_scan_interval +_master_direct_sends +_mav_refresh_consistent_read +_mav_refresh_double_count_prevented +_mav_refresh_opt +_mav_refresh_unionall_tables +_max_aq_persistent_queue_memory +_max_async_wait_for_catch_up +_max_cr_rollbacks +_max_exponential_sleep +_max_filestat_tries +_max_fsu_segments +_max_fsu_stale_time +_max_io_size +_max_large_io +_max_lns_shutdown_archival_time +_max_pending_scn_bcasts +_max_protocol_support +_max_reasonable_scn_rate +_max_services +_max_shrink_obj_stats +_max_sleep_holding_latch +_max_small_io +_max_spacebg_slaves +_max_spacebg_tasks +_media_recovery_read_batch +_mem_annotation_pr_lev +_mem_annotation_scale +_mem_annotation_sh_lev +_mem_annotation_store +_mem_std_extent_size +_memory_broker_log_stat_entries +_memory_broker_marginal_utility_bc +_memory_broker_marginal_utility_sp +_memory_broker_shrink_heaps +_memory_broker_shrink_java_heaps +_memory_broker_shrink_streams_pool +_memory_broker_shrink_timeout +_memory_broker_stat_interval +_memory_checkinuse_timeintv +_memory_imm_mode_without_autosga +_memory_initial_sga_split_perc +_memory_management_tracing +_memory_mgmt_fail_immreq +_memory_mgmt_immreq_timeout +_memory_nocancel_defsgareq +_memory_sanity_check +_messages +_mgd_rcv_handle_orphan_datafiles +_midtier_affinity_clusterwait_threshold +_midtier_affinity_goodness_threshold +_minfree_plus +_minimal_stats_aggregation +_minimum_blocks_to_shrink +_minimum_db_flashback_retention +_minimum_extents_to_shrink +_minimum_giga_scn +_mirror_redo_buffers +_mmv_query_rewrite_enabled +_module_action_old_length +_mpmt_enabled +_multi_instance_pmr +_multi_join_key_table_lookup +_multiple_instance_recovery +_mv_generalized_oj_refresh_opt +_mv_refresh_ana +_mv_refresh_costing +_mv_refresh_delta_fraction +_mv_refresh_enhanced_dml_detection +_mv_refresh_eut +_mv_refresh_force_parallel_query +_mv_refresh_new_setup_disabled +_mv_refresh_pkfk_data_units_opt +_mv_refresh_pkfk_relationship_opt +_mv_refresh_rebuild_percentage +_mv_refresh_selections +_mv_refresh_update_analysis +_mv_refresh_use_hash_sj +_mv_refresh_use_no_merge +_mv_refresh_use_stats +_mv_refsched_timeincr +_mv_rolling_inv +_mwin_schedule +_nchar_imp_cnv +_nchar_imp_conv +_ncmb_readahead_enabled +_ncmb_readahead_tracing +_ncomp_shared_objects_dir +_nested_loop_fudge +_nested_mv_fast_oncommit_enabled +_new_initial_join_orders +_new_sort_cost_estimate +_newsort_enabled +_newsort_ordered_pct +_newsort_type +_nineteenth_spare_parameter +_ninth_spare_parameter +_nlj_batching_ae_flag +_nlj_batching_enabled +_nlj_batching_misses_enabled +_nls_parameter_sync_enabled +_no_objects +_no_or_expansion +_no_recovery_through_resetlogs +_noseg_for_unusable_index_enabled +_notify_crs +_ns_max_flush_wt +_ns_max_send_delay +_num_longop_child_latches +_numa_buffer_cache_stats +_numa_trace_level +_number_cached_attributes +_number_cached_group_memberships +_obj_ckpt_tracing +_object_number_cache_size +_object_reuse_bast +_object_statistics +_object_stats_max_entries +_offline_rollback_segments +_ogms_home +_olap_adv_comp_stats_cc_precomp +_olap_adv_comp_stats_max_rows +_olap_aggregate_buffer_size +_olap_aggregate_flags +_olap_aggregate_function_cache_enabled +_olap_aggregate_max_thread_tuples +_olap_aggregate_min_buffer_size +_olap_aggregate_min_thread_status +_olap_aggregate_multipath_hier +_olap_aggregate_statlen_thresh +_olap_aggregate_work_per_thread +_olap_aggregate_worklist_max +_olap_allocate_errorlog_format +_olap_allocate_errorlog_header +_olap_analyze_max +_olap_continuous_trace_file +_olap_dbgoutfile_echo_to_eventlog +_olap_dimension_corehash_force +_olap_dimension_corehash_large +_olap_dimension_corehash_pressure +_olap_dimension_corehash_size +_olap_eif_export_lob_size +_olap_lmgen_dim_size +_olap_lmgen_meas_size +_olap_object_hash_class +_olap_page_pool_expand_rate +_olap_page_pool_hi +_olap_page_pool_hit_target +_olap_page_pool_low +_olap_page_pool_pressure +_olap_page_pool_shrink_rate +_olap_parallel_update_server_num +_olap_parallel_update_small_threshold +_olap_parallel_update_threshold +_olap_sesscache_enabled +_olap_sort_buffer_pct +_olap_sort_buffer_size +_olap_statbool_corebits +_olap_statbool_threshold +_olap_table_function_statistics +_olap_wrap_errors +_olapi_history_retention +_olapi_iface_object_history +_olapi_iface_object_history_retention +_olapi_iface_operation_history_retention +_olapi_interface_operation_history +_olapi_memory_operation_history +_olapi_memory_operation_history_pause_at_seqno +_olapi_memory_operation_history_retention +_olapi_session_history +_olapi_session_history_retention +_old_connect_by_enabled +_ols_cleanup_task +_oltp_compression +_oltp_compression_gain +_omf +_oneside_colstat_for_equijoins +_online_patch_disable_stack_check +_optim_adjust_for_part_skews +_optim_dict_stats_at_db_cr_upg +_optim_enhance_nnull_detection +_optim_new_default_join_sel +_optim_peek_user_binds +_optimizer_adaptive_cursor_sharing +_optimizer_adjust_for_nulls +_optimizer_autostats_job +_optimizer_aw_join_push_enabled +_optimizer_aw_stats_enabled +_optimizer_better_inlist_costing +_optimizer_block_size +_optimizer_cache_stats +_optimizer_cartesian_enabled +_optimizer_cbqt_factor +_optimizer_cbqt_no_size_restriction +_optimizer_ceil_cost +_optimizer_coalesce_subqueries +_optimizer_complex_pred_selectivity +_optimizer_compute_index_stats +_optimizer_connect_by_cb_whr_only +_optimizer_connect_by_combine_sw +_optimizer_connect_by_cost_based +_optimizer_connect_by_elim_dups +_optimizer_correct_sq_selectivity +_optimizer_cost_based_transformation +_optimizer_cost_filter_pred +_optimizer_cost_hjsmj_multimatch +_optimizer_cost_model +_optimizer_degree +_optimizer_dim_subq_join_sel +_optimizer_disable_strans_sanity_checks +_optimizer_distinct_agg_transform +_optimizer_distinct_elimination +_optimizer_distinct_placement +_optimizer_dyn_smp_blks +_optimizer_eliminate_filtering_join +_optimizer_enable_density_improvements +_optimizer_enable_extended_stats +_optimizer_enable_table_lookup_by_nl +_optimizer_enhanced_filter_push +_optimizer_extend_jppd_view_types +_optimizer_extended_cursor_sharing +_optimizer_extended_cursor_sharing_rel +_optimizer_extended_stats_usage_control +_optimizer_false_filter_pred_pullup +_optimizer_fast_access_pred_analysis +_optimizer_fast_pred_transitivity +_optimizer_feedback_control +_optimizer_filter_pred_pullup +_optimizer_fkr_index_cost_bias +_optimizer_force_CBQT +_optimizer_free_transformation_heap +_optimizer_group_by_placement +_optimizer_ignore_hints +_optimizer_improve_selectivity +_optimizer_instance_count +_optimizer_interleave_jppd +_optimizer_invalidation_period +_optimizer_join_elimination_enabled +_optimizer_join_factorization +_optimizer_join_order_control +_optimizer_join_sel_sanity_check +_optimizer_max_permutations +_optimizer_min_cache_blocks +_optimizer_mjc_enabled +_optimizer_mode_force +_optimizer_multi_level_push_pred +_optimizer_multiple_cenv +_optimizer_multiple_cenv_report +_optimizer_multiple_cenv_stmt +_optimizer_native_full_outer_join +_optimizer_nested_rollup_for_gset +_optimizer_new_join_card_computation +_optimizer_null_aware_antijoin +_optimizer_or_expansion +_optimizer_or_expansion_subheap +_optimizer_order_by_elimination_enabled +_optimizer_outer_to_anti_enabled +_optimizer_percent_parallel +_optimizer_purge_stats_iteration_row_count +_optimizer_push_down_distinct +_optimizer_push_pred_cost_based +_optimizer_random_plan +_optimizer_reuse_cost_annotations +_optimizer_rownum_bind_default +_optimizer_rownum_pred_based_fkr +_optimizer_save_stats +_optimizer_search_limit +_optimizer_self_induced_cache_cost +_optimizer_skip_scan_enabled +_optimizer_skip_scan_guess +_optimizer_sortmerge_join_enabled +_optimizer_sortmerge_join_inequality +_optimizer_squ_bottomup +_optimizer_star_tran_in_with_clause +_optimizer_star_trans_min_cost +_optimizer_star_trans_min_ratio +_optimizer_starplan_enabled +_optimizer_system_stats_usage +_optimizer_table_expansion +_optimizer_trace +_optimizer_transitivity_retain +_optimizer_try_st_before_jppd +_optimizer_undo_changes +_optimizer_undo_cost_change +_optimizer_unnest_all_subqueries +_optimizer_unnest_corr_set_subq +_optimizer_unnest_disjunctive_subq +_optimizer_use_cbqt_star_transformation +_optimizer_use_feedback +_optimizer_use_subheap +_or_expand_nvl_predicate +_oradbg_pathname +_oradebug_cmds_at_startup +_oradebug_force +_ordered_nested_loop +_ordered_semijoin +_orph_cln_interval +_os_sched_high_priority +_oss_skgxp_udp_dynamic_credit_mgmt +_other_wait_event_exclusion +_other_wait_threshold +_outline_bitmap_tree +_parallel_adaptive_max_users +_parallel_blackbox_enabled +_parallel_blackbox_size +_parallel_broadcast_enabled +_parallel_cluster_cache_pct +_parallel_cluster_cache_policy +_parallel_conservative_queuing +_parallel_default_max_instances +_parallel_execution_message_align +_parallel_fake_class_pct +_parallel_fixwrite_bucket +_parallel_heartbeat_snapshot_interval +_parallel_heartbeat_snapshot_max +_parallel_load_bal_unit +_parallel_load_balancing +_parallel_load_publish_threshold +_parallel_min_message_pool +_parallel_optimization_phase_for_local +_parallel_queuing_max_waitingtime +_parallel_recovery_stopat +_parallel_replay_msg_limit +_parallel_scalability +_parallel_server_idle_time +_parallel_server_sleep_time +_parallel_slave_acquisition_wait +_parallel_statement_queuing +_parallel_syspls_obey_force +_parallel_time_unit +_parallel_txn_global +_parallelism_cost_fudge_factor +_parameter_table_block_size +_partial_pwise_join_enabled +_partition_large_extents +_partition_view_enabled +_passwordfile_enqueue_timeout +_pct_refresh_double_count_prevented +_pdml_gim_sampling +_pdml_gim_staggered +_pdml_slaves_diff_part +_percent_flashback_buf_partial_full +_pga_large_extent_size +_pga_max_size +_pgactx_cap_stacks +_pivot_implementation_method +_pkt_enable +_pkt_pmon_interval +_pkt_start +_plan_outline_data +_plan_verify_improvement_margin +_plan_verify_local_time_limit +_plsql_anon_block_code_type +_plsql_cache_enable +_plsql_dump_buffer_events +_plsql_max_stack_size +_plsql_minimum_cache_hit_percent +_plsql_native_frame_threshold +_plsql_nvl_optimize +_pmon_dead_blkrs_alive_chk_rate_secs +_pmon_dead_blkrs_max_blkrs +_pmon_dead_blkrs_max_cleanup_attempts +_pmon_dead_blkrs_scan_rate_secs +_pmon_enable_dead_blkrs +_pmon_load_constants +_pmon_max_consec_posts +_post_wait_queues_dynamic_queues +_post_wait_queues_num_per_class +_pqq_debug_txn_act +_pqq_enabled +_pre_rewrite_push_pred +_precompute_gid_values +_pred_move_around +_predicate_elimination_enabled +_prescomm +_print_refresh_schedule +_private_memory_address +_project_view_columns +_projection_pushdown +_projection_pushdown_debug +_prop_old_enabled +_protect_frame_heaps +_ptn_cache_threshold +_push_join_predicate +_push_join_union_view +_push_join_union_view2 +_px_async_getgranule +_px_bind_peek_sharing +_px_broadcast_fudge_factor +_px_buffer_ttl +_px_chunklist_count_ratio +_px_compilation_debug +_px_compilation_trace +_px_dump_12805_source +_px_dynamic_opt +_px_dynamic_sample_size +_px_execution_services_enabled +_px_freelist_latch_divisor +_px_gim_factor +_px_granule_batch_size +_px_granule_randomize +_px_granule_size +_px_index_sampling +_px_index_sampling_objsize +_px_io_process_bandwidth +_px_io_system_bandwidth +_px_kxib_tracing +_px_load_factor +_px_load_publish_interval +_px_loc_msg_cost +_px_max_granules_per_slave +_px_max_map_val +_px_max_message_pool_pct +_px_min_granules_per_slave +_px_minus_intersect +_px_net_msg_cost +_px_no_granule_sort +_px_no_stealing +_px_nss_planb +_px_partition_scan_enabled +_px_partition_scan_threshold +_px_proc_constrain +_px_pwg_enabled +_px_rownum_pd +_px_send_timeout +_px_slaves_share_cursors +_px_trace +_px_ual_serial_input +_px_xtgranule_size +_qa_control +_qa_lrg_type +_query_cost_rewrite +_query_execution_cache_max_size +_query_mmvrewrite_maxcmaps +_query_mmvrewrite_maxdmaps +_query_mmvrewrite_maxinlists +_query_mmvrewrite_maxintervals +_query_mmvrewrite_maxpreds +_query_mmvrewrite_maxqryinlistvals +_query_mmvrewrite_maxregperm +_query_on_physical +_query_rewrite_1 +_query_rewrite_2 +_query_rewrite_drj +_query_rewrite_expression +_query_rewrite_fpc +_query_rewrite_fudge +_query_rewrite_jgmigrate +_query_rewrite_maxdisjunct +_query_rewrite_or_error +_query_rewrite_setopgrw_enable +_query_rewrite_vop_cleanup +_queue_buffer_max_dump_len +_rbr_ckpt_tracing +_rcfg_disable_verify +_rcfg_parallel_fixwrite +_rcfg_parallel_replay +_rcfg_parallel_verify +_rdbms_compatibility +_rdbms_internal_fplib_enabled +_rdbms_internal_fplib_raise_errors +_read_only_violation_dump_to_trace +_read_only_violation_max_count +_read_only_violation_max_count_per_module +_readable_standby_sync_timeout +_real_time_apply_sim +_realfree_heap_max_size +_realfree_heap_mode +_realfree_heap_pagesize_hint +_reasonable_scn_offset_seconds +_recoverable_recovery_batch_percent +_recovery_asserts +_recovery_percentage +_recovery_skip_cfseq_check +_recovery_verify_writes +_recursive_imu_transactions +_recursive_with_max_recursion_level +_redo_compatibility_check +_redo_read_from_memory +_redo_transport_compress_all +_redo_transport_sanity_check +_redo_transport_stall_time +_redo_transport_stall_time_long +_redo_transport_stream_test +_redo_transport_stream_writes +_redo_transport_vio_size_req +_reduce_sby_log_scan +_release_insert_threshold +_reliable_block_sends +_relocation_commit_batch_size +_remove_aggr_subquery +_rep_base_path +_replace_virtual_columns +_reset_maxcap_history +_resource_manager_always_off +_resource_manager_always_on +_resource_manager_plan +_restore_maxopenfiles +_restore_spfile +_result_cache_auto_dml_monitoring_duration +_result_cache_auto_dml_monitoring_slots +_result_cache_auto_dml_threshold +_result_cache_auto_dml_trend_threshold +_result_cache_auto_execution_threshold +_result_cache_auto_size_threshold +_result_cache_auto_time_distance +_result_cache_auto_time_threshold +_result_cache_block_size +_result_cache_copy_block_count +_result_cache_global +_result_cache_timeout +_reuse_index_loop +_right_outer_hash_enable +_rm_cluster_interconnects +_rm_numa_sched_enable +_rm_numa_simulation_cpus +_rm_numa_simulation_pgs +_rman_io_priority +_rman_restore_through_link +_rollback_segment_count +_rollback_segment_initial +_rollback_stopat +_row_cache_cursors +_row_cr +_row_locking +_row_shipping_explain +_row_shipping_threshold +_rowsource_execution_statistics +_rowsource_profiling_statistics +_rowsource_statistics_sampfreq +_rowsrc_trace_level +_rta_sync_wait_timeout +_rtc_infeasible_threshold +_sample_rows_per_block +_scatter_gcs_resources +_scatter_gcs_shadows +_sched_delay_max_samples +_sched_delay_measurement_sleep_us +_sched_delay_os_tick_granularity_us +_sched_delay_sample_collection_thresh_ms +_sched_delay_sample_interval_ms +_scn_wait_interface_max_backoff_time_secs +_scn_wait_interface_max_timeout_secs +_sdiag_crash +_sec_enable_test_rpcs +_second_spare_parameter +_securefile_timers +_securefiles_concurrency_estimate +_select_any_dictionary_security_enabled +_selectivity_for_srf_enabled +_selfjoin_mv_duplicates +_selftune_checkpoint_write_pct +_selftune_checkpointing_lag +_send_ast_to_foreground +_send_close_with_block +_send_requests_to_pi +_serial_direct_read +_serial_recovery +_serializable +_serialize_lgwr_sync_io +_service_cleanup_timeout +_session_allocation_latches +_session_cached_instantiations +_session_context_size +_session_idle_bit_latches +_session_page_extent +_session_wait_history +_set_mgd_recovery_state +_seventeenth_spare_parameter +_seventh_spare_parameter +_sga_clear_dump +_sga_early_trace +_sga_locking +_shared_io_pool_buf_size +_shared_io_pool_debug_trc +_shared_io_pool_size +_shared_io_set_value +_shared_iop_max_size +_shared_pool_max_size +_shared_pool_minsize_on +_shared_pool_reserved_min_alloc +_shared_pool_reserved_pct +_shared_server_load_balance +_shared_server_num_queues +_shmprotect +_short_stack_timeout_ms +_show_mgd_recovery_state +_shrunk_aggs_disable_threshold +_shrunk_aggs_enabled +_shutdown_completion_timeout_mins +_side_channel_batch_size +_side_channel_batch_timeout +_side_channel_batch_timeout_ms +_simple_view_merging +_simulate_disk_sectorsize +_simulate_io_wait +_simulate_mem_transfer +_simulator_bucket_mindelta +_simulator_internal_bound +_simulator_lru_rebalance_sizthr +_simulator_lru_rebalance_thresh +_simulator_lru_scan_count +_simulator_pin_inval_maxcnt +_simulator_reserved_heap_count +_simulator_reserved_obj_count +_simulator_sampling_factor +_simulator_upper_bound_multiple +_single_process +_siop_flashback_scandepth +_siop_perc_of_bc_x100 +_sixteenth_spare_parameter +_sixth_spare_parameter +_skgxp_ctx_flags1 +_skgxp_ctx_flags1mask +_skgxp_dynamic_protocol +_skgxp_gen_ant_off_rpc_timeout_in_sec +_skgxp_gen_ant_ping_misscount +_skgxp_gen_rpc_no_path_check_in_sec +_skgxp_gen_rpc_timeout_in_sec +_skgxp_inets +_skgxp_min_rpc_rcv_zcpy_len +_skgxp_min_zcpy_len +_skgxp_reaping +_skgxp_rgn_ports +_skgxp_spare_param1 +_skgxp_spare_param2 +_skgxp_spare_param3 +_skgxp_spare_param4 +_skgxp_spare_param5 +_skgxp_udp_ach_reaping_time +_skgxp_udp_ack_delay +_skgxp_udp_enable_dynamic_credit_mgmt +_skgxp_udp_hiwat_warn +_skgxp_udp_interface_detection_time_secs +_skgxp_udp_keep_alive_ping_timer_secs +_skgxp_udp_lmp_mtusize +_skgxp_udp_lmp_on +_skgxp_udp_timed_wait_buffering +_skgxp_udp_timed_wait_seconds +_skgxp_udp_use_tcb +_skgxp_zcpy_flags +_skgxpg_last_parameter +_skip_assume_msg +_skip_trstamp_check +_slave_mapping_enabled +_slave_mapping_group_size +_slave_mapping_skew_ratio +_small_table_threshold +_smm_advice_enabled +_smm_advice_log_size +_smm_auto_cost_enabled +_smm_auto_max_io_size +_smm_auto_min_io_size +_smm_bound +_smm_control +_smm_freeable_retain +_smm_isort_cap +_smm_max_size +_smm_min_size +_smm_px_max_size +_smm_retain_size +_smm_trace +_smon_internal_errlimit +_smon_undo_seg_rescan_limit +_smu_debug_mode +_smu_error_simulation_site +_smu_error_simulation_type +_smu_timeouts +_sort_elimination_cost_ratio +_sort_multiblock_read_count +_sort_spill_threshold +_space_align_size +_spare_test_parameter +_spawn_diag_opts +_spawn_diag_thresh_secs +_spin_count +_spr_max_rules +_spr_push_pred_refspr +_spr_use_AW_AS +_spr_use_hash_table +_sql_analyze_enable_auto_txn +_sql_analyze_parse_model +_sql_compatibility +_sql_connect_capability_override +_sql_connect_capability_table +_sql_hash_debug +_sql_model_unfold_forloops +_sql_ncg_mode +_sql_plan_management_control +_sqlexec_progression_cost +_sqlmon_binds_xml_format +_sqlmon_max_plan +_sqlmon_max_planlines +_sqlmon_recycle_time +_sqlmon_threshold +_sqltune_category_parsed +_srvntfn_job_deq_timeout +_srvntfn_jobsubmit_interval +_srvntfn_max_concurrent_jobs +_srvntfn_q_msgcount +_srvntfn_q_msgcount_inc +_sscr_dir +_sscr_osdir +_sta_control +_stack_guard_level +_standby_causal_heartbeat_timeout +_standby_flush_mode +_standby_implicit_rcv_timeout +_standby_switchover_timeout +_static_backgrounds +_statistics_based_srf_enabled +_step_down_limit_in_pct +_streams_pool_max_size +_subquery_pruning_cost_factor +_subquery_pruning_enabled +_subquery_pruning_mv_enabled +_subquery_pruning_reduction +_switchover_to_standby_option +_switchover_to_standby_switch_log +_swrf_metric_frequent_mode +_swrf_mmon_dbfus +_swrf_mmon_flush +_swrf_mmon_metrics +_swrf_on_disk_enabled +_swrf_test_action +_swrf_test_dbfus +_sync_primary_wait_time +_synonym_repoint_tracing +_sysaux_test_param +_system_api_interception_debug +_system_index_caching +_system_trig_enabled +_ta_lns_wait_for_arch_log +_table_lookup_prefetch_size +_table_lookup_prefetch_thresh +_table_scan_cost_plus_one +_tablespaces_per_transaction +_target_rba_max_lag_percentage +_tdb_debug_mode +_temp_tran_block_threshold +_temp_tran_cache +_tenth_spare_parameter +_test_ksusigskip +_test_param_1 +_test_param_2 +_test_param_3 +_test_param_4 +_test_param_5 +_test_param_6 +_third_spare_parameter +_thirteenth_spare_parameter +_threshold_alerts_enable +_timemodel_collection +_timeout_actions_enabled +_timer_precision +_total_large_extent_memory +_tq_dump_period +_trace_buffer_wait_timeouts +_trace_buffers +_trace_dump_all_procs +_trace_dump_client_buckets +_trace_dump_cur_proc_only +_trace_dump_static_only +_trace_events +_trace_files_public +_trace_kqlidp +_trace_navigation_scope +_trace_pin_time +_trace_pool_size +_trace_processes +_trace_virtual_columns +_transaction_auditing +_transaction_recovery_servers +_transient_logical_clear_hold_mrp_bit +_truncate_optimization_enabled +_tsenc_tracing +_tsm_connect_string +_tsm_disable_auto_cleanup +_tstz_localtime_bypass +_tts_allow_charset_mismatch +_twelfth_spare_parameter +_twentieth_spare_parameter +_two_pass +_two_pass_reverse_polish_enabled +_uga_cga_large_extent_size +_ultrafast_latch_statistics +_undo_autotune +_undo_block_compression +_undo_debug_mode +_undo_debug_usage +_union_rewrite_for_gs +_unnest_subquery +_unused_block_compression +_update_datafile_headers_with_space_information +_use_adaptive_log_file_sync +_use_best_fit +_use_column_stats_for_function +_use_hybrid_encryption_mode +_use_ism +_use_ism_for_pga +_use_nosegment_indexes +_use_platform_compression_lib +_use_platform_encryption_lib +_use_realfree_heap +_use_seq_process_cache +_use_vector_post +_use_zero_copy_io +_validate_flashback_database +_validate_readmem_redo +_vendor_lib_loc +_verify_fg_log_checksum +_verify_flashback_redo +_verify_undo_quota +_very_large_object_threshold +_very_large_partitioned_table +_virtual_column_overload_allowed +_vkrm_schedule_interval +_vktm_assert_thresh +_wait_breakup_threshold_csecs +_wait_breakup_time_csecs +_wait_for_sync +_wait_samples_max_sections +_wait_samples_max_time_secs +_wait_tracker_interval_secs +_wait_tracker_num_intervals +_wait_yield_hp_mode +_wait_yield_mode +_wait_yield_sleep_freq +_wait_yield_sleep_time_msecs +_wait_yield_yield_freq +_walk_insert_threshold +_watchpoint_on +_wcr_control +_windowfunc_optimization_settings +_with_subquery +_write_clones +_xengem_devname +_xengem_diagmode +_xengem_enabled +_xpl_peeked_binds_log_size +_xpl_trace +_xsolapi_auto_materialization_bound +_xsolapi_auto_materialization_type +_xsolapi_build_trace +_xsolapi_debug_output +_xsolapi_densify_cubes +_xsolapi_dimension_group_creation +_xsolapi_dml_trace +_xsolapi_fetch_type +_xsolapi_fix_vptrs +_xsolapi_generate_with_clause +_xsolapi_hierarchy_value_type +_xsolapi_load_at_process_start +_xsolapi_materialization_rowcache_min_rows_for_use +_xsolapi_materialize_sources +_xsolapi_metadata_reader_mode +_xsolapi_odbo_mode +_xsolapi_opt_aw_position +_xsolapi_optimize_suppression +_xsolapi_precompute_subquery +_xsolapi_remove_columns_for_materialization +_xsolapi_set_nls +_xsolapi_share_executors +_xsolapi_source_trace +_xsolapi_sql_all_multi_join_non_base_hints +_xsolapi_sql_all_non_base_hints +_xsolapi_sql_auto_dimension_hints +_xsolapi_sql_auto_measure_hints +_xsolapi_sql_dimension_hints +_xsolapi_sql_enable_aw_join +_xsolapi_sql_enable_aw_qdr_merge +_xsolapi_sql_hints +_xsolapi_sql_measure_hints +_xsolapi_sql_minus_threshold +_xsolapi_sql_optimize +_xsolapi_sql_prepare_stmt_cache_size +_xsolapi_sql_remove_columns +_xsolapi_sql_result_set_cache_size +_xsolapi_sql_symmetric_predicate +_xsolapi_sql_top_dimension_hints +_xsolapi_sql_top_measure_hints +_xsolapi_sql_use_bind_variables +_xsolapi_stringify_order_levels +_xsolapi_support_mtm +_xsolapi_suppression_aw_mask_threshold +_xsolapi_suppression_chunk_size +_xsolapi_use_models +_xsolapi_use_olap_dml +_xsolapi_use_olap_dml_for_rank +_xt_coverage +_xt_trace +_xtbuffer_size +_xtts_allow_pre10 +_xtts_set_platform_info +abort +abs +access +accessed +account +acos +activate +active_component +active_function +active_instance_count +active_tag +add +add_column +add_group +add_months +adj_date +admin +administer +administrator +advise +advisor +after +alias +all +all_rows +allocate +allow +alter +always +analyze +ancillary +and +and_equal +antijoin +any +anyschema +append +append_values +appendchildxml +apply +aq_tm_processes +archive +archive_lag_target +archivelog +array +asc +ascii +asciistr +asin +asm_diskgroups +asm_diskstring +asm_power_limit +asm_preferred_read_failure_groups +assembly +associate +async +asynchronous +atan +atan2 +attribute +attributes +audit +audit_file_dest +audit_sys_operations +audit_syslog_level +audit_trail +authenticated +authentication +authid +authorization +auto +autoallocate +autoextend +automatic +availability +avg +background_core_dump +background_dump_dest +backup +backup_tape_io_slaves +basic +basicfile +batch +become +before +begin +begin_outline_data +behalf +between +bfile +bfilename +bigfile +bin_to_num +binary +binary_double +binary_double_infinity +binary_double_nan +binary_float +binary_float_infinity +binary_float_nan +bind_aware +binding +bitand +bitmap +bitmap_merge_area_size +bitmap_tree +bitmaps +bits +blank_trimming +blob +block +block_range +blocks +blocksize +body +both +bound +branch +breadth +broadcast +buffer +buffer_cache +buffer_pool +buffer_pool_keep +buffer_pool_recycle +build +bulk +bypass_recursive_check +bypass_ujvc +byte +cache +cache_cb +cache_instances +cache_temp_table +call +cancel +cardinality +cascade +case +cast +category +ceil +cell_flash_cache +cell_offload_compaction +cell_offload_decryption +cell_offload_parameters +cell_offload_plan_display +cell_offload_processing +certificate +cfile +chained +change +change_dupkey_error_index +char +char_cs +character +chartorowid +check +check_acl_rewrite +checkpoint +child +choose +chr +chunk +circuits +class +clear +client_result_cache_lag +client_result_cache_size +clob +clone +close +close_cached_open_cursors +cluster +cluster_database +cluster_database_instances +cluster_id +cluster_interconnects +cluster_probability +cluster_set +clustering_factor +co_auth_ind +coalesce +coalesce_sq +coarse +cold +collect +column +column_auth_indicator +column_stats +column_value +columnar +columns +comment +commit +commit_logging +commit_point_strength +commit_wait +commit_write +committed +compact +compatibility +compatible +compile +complete +compliance +compose +composite +composite_limit +compound +compress +compute +concat +confirm +conforming +connect +connect_by_cb_whr_only +connect_by_combine_sw +connect_by_cost_based +connect_by_elim_dups +connect_by_filtering +connect_by_iscycle +connect_by_isleaf +connect_by_root +connect_time +consider +consistent +const +constant +constraint +constraints +container +content +contents +context +continue +control_file_record_keep_time +control_files +control_management_pack_access +controlfile +convert +core_dump_dest +corr +corr_k +corr_s +corrupt_xid +corrupt_xid_all +corruption +cos +cosh +cost +cost_xml_query_rewrite +count +covar_pop +covar_samp +cpu_costing +cpu_count +cpu_per_call +cpu_per_session +crash +create +create_bitmap_area_size +create_stored_outlines +creation +cross +crossedition +csconvert +cube +cube_gb +cume_dist +cume_distm +current +current_date +current_schema +current_time +current_timestamp +current_user +currentv +cursor +cursor_bind_capture_destination +cursor_sharing +cursor_sharing_exact +cursor_space_for_time +cursor_specific_segment +cycle +dangling +data +database +datafile +datafiles +dataobj_to_partition +dataobjno +date +date_mode +day +db_16k_cache_size +db_2k_cache_size +db_32k_cache_size +db_4k_cache_size +db_8k_cache_size +db_block_buffers +db_block_checking +db_block_checksum +db_block_size +db_cache_advice +db_cache_size +db_create_file_dest +db_create_online_log_dest_1 +db_create_online_log_dest_2 +db_create_online_log_dest_3 +db_create_online_log_dest_4 +db_create_online_log_dest_5 +db_domain +db_file_multiblock_read_count +db_file_name_convert +db_files +db_flash_cache_file +db_flash_cache_size +db_flashback_retention_target +db_keep_cache_size +db_lost_write_protect +db_name +db_recovery_file_dest +db_recovery_file_dest_size +db_recycle_cache_size +db_role_change +db_securefile +db_ultra_safe +db_unique_name +db_unrecoverable_scn_tracking +db_version +db_writer_processes +dba +dba_recyclebin +dbms_stats +dbtimezone +dbwr_io_slaves +ddl +ddl_lock_timeout +deallocate +debug +debugger +dec +decimal +declare +decode +decompose +decr +decrement +decrypt +deduplicate +default +defaults +deferrable +deferred +deferred_segment_creation +defined +definer +degree +delay +delete +deletexml +demand +dense_rank +dense_rankm +dependent +depth +dequeue +deref +deref_no_rewrite +desc +detached +determines +dg_broker_config_file1 +dg_broker_config_file2 +dg_broker_start +diagnostic_dest +dictionary +dimension +direct_load +direct_path +directory +disable +disable_preset +disable_rpke +disallow +disassociate +disconnect +disk +disk_asynch_io +diskgroup +disks +dismount +dispatchers +distinct +distinguished +distributed +distributed_lock_timeout +dml +dml_locks +dml_update +docfidelity +document +domain_index_filter +domain_index_no_sort +domain_index_sort +double +downgrade +driving_site +drop +drop_column +drop_group +dst_upgrade_insert_conv +dump +dynamic +dynamic_sampling +dynamic_sampling_est_cdn +each +edition +editioning +editions +element +eliminate_join +eliminate_oby +eliminate_outer_join +else +empty +empty_blob +empty_clob +enable +enable_ddl_logging +enable_preset +encoding +encrypt +encryption +end +end_outline_data +enforce +enforced +enqueue +enterprise +entityescaping +entry +error +error_argument +error_on_overlap_time +errors +escape +estimate +evalname +evaluation +event +events +every +except +exceptions +exchange +exclude +excluding +exclusive +execute +exempt +exists +existsnode +exp +expand_gset_to_union +expand_table +expire +explain +explosion +export +expr_corr_check +extends +extent +extents +external +externally +extra +extract +extractvalue +facility +fact +factorize_join +failed +failed_login_attempts +failgroup +fal_client +fal_server +false +fast +fast_start_io_target +fast_start_mttr_target +fast_start_parallel_rollback +fbtscan +feature_id +feature_set +feature_value +file +file_mapping +fileio_network_adapters +filesystem_like_logging +filesystemio_options +filter +final +fine +finish +first +first_rows +first_value +firstm +fixed_date +flagger +flash_cache +flashback +float +flob +floor +flush +folder +following +follows +for +force +force_xml_query_rewrite +foreign +forever +forward +fragment_number +freelist +freelists +freepools +fresh +from +from_tz +full +function +functions +gather_plan_statistics +gby_conc_rollup +gby_pushdown +gcs_server_processes +generated +global +global_context_pool_size +global_name +global_names +global_topic_enabled +global_txn_processes +globally +grant +greatest +group +group_by +group_id +grouping +grouping_id +groups +guarantee +guaranteed +guard +hash +hash_aj +hash_area_size +hash_sj +hashkeys +having +header +heap +help +hextoraw +hextoref +hi_shared_memory_address +hidden +hide +hierarchy +high +hintset_begin +hintset_end +hot +hour +hs_autoregister +hwm_brokered +hybrid +identified +identifier +identity +idgenerators +idle_time +ifile +ignore +ignore_optim_embedded_hints +ignore_row_on_dupkey_index +ignore_where_clause +immediate +impact +import +in_memory_metadata +in_xquery +include +include_version +including +incr +increment +incremental +indent +index +index_asc +index_combine +index_desc +index_ffs +index_filter +index_join +index_rows +index_rrs +index_rs +index_rs_asc +index_rs_desc +index_scan +index_skip_scan +index_ss +index_ss_asc +index_ss_desc +index_stats +indexed +indexes +indextype +indextypes +indicator +infinite +informational +initcap +initial +initialized +initially +initrans +inline +inline_xmltype_nt +inner +insert +insertchildxml +insertchildxmlafter +insertchildxmlbefore +insertxmlafter +insertxmlbefore +instance +instance_groups +instance_name +instance_number +instance_type +instances +instantiable +instantly +instead +instr +instr2 +instr4 +instrb +instrc +int +integer +intermediate +internal_convert +internal_use +interpreted +intersect +interval +into +invalidate +invisible +isolation +isolation_level +iterate +iteration_number +java +java_jit_enabled +java_max_sessionspace_size +java_pool_size +java_soft_sessionspace_limit +job +job_queue_processes +join +keep +keep_duplicates +kerberos +key +key_length +keys +keysize +kill +lag +large_pool_size +last +last_day +last_value +lateral +layer +ldap_directory_access +ldap_directory_sysauth +ldap_reg_sync_interval +ldap_registration +ldap_registration_enabled +lead +leading +least +left +length +length2 +length4 +lengthb +lengthc +less +level +levels +library +license_max_sessions +license_max_users +license_sessions_warning +life +lifetime +like +like2 +like4 +like_expand +likec +limit +link +list +listagg +listener_networks +lnnvl +load +lob +lobnvl +lobs +local +local_indexes +local_listener +localtime +localtimestamp +location +locator +lock +lock_name_space +lock_sga +locked +log +log_archive_config +log_archive_dest +log_archive_dest_1 +log_archive_dest_10 +log_archive_dest_11 +log_archive_dest_12 +log_archive_dest_13 +log_archive_dest_14 +log_archive_dest_15 +log_archive_dest_16 +log_archive_dest_17 +log_archive_dest_18 +log_archive_dest_19 +log_archive_dest_2 +log_archive_dest_20 +log_archive_dest_21 +log_archive_dest_22 +log_archive_dest_23 +log_archive_dest_24 +log_archive_dest_25 +log_archive_dest_26 +log_archive_dest_27 +log_archive_dest_28 +log_archive_dest_29 +log_archive_dest_3 +log_archive_dest_30 +log_archive_dest_31 +log_archive_dest_4 +log_archive_dest_5 +log_archive_dest_6 +log_archive_dest_7 +log_archive_dest_8 +log_archive_dest_9 +log_archive_dest_state_1 +log_archive_dest_state_10 +log_archive_dest_state_11 +log_archive_dest_state_12 +log_archive_dest_state_13 +log_archive_dest_state_14 +log_archive_dest_state_15 +log_archive_dest_state_16 +log_archive_dest_state_17 +log_archive_dest_state_18 +log_archive_dest_state_19 +log_archive_dest_state_2 +log_archive_dest_state_20 +log_archive_dest_state_21 +log_archive_dest_state_22 +log_archive_dest_state_23 +log_archive_dest_state_24 +log_archive_dest_state_25 +log_archive_dest_state_26 +log_archive_dest_state_27 +log_archive_dest_state_28 +log_archive_dest_state_29 +log_archive_dest_state_3 +log_archive_dest_state_30 +log_archive_dest_state_31 +log_archive_dest_state_4 +log_archive_dest_state_5 +log_archive_dest_state_6 +log_archive_dest_state_7 +log_archive_dest_state_8 +log_archive_dest_state_9 +log_archive_duplex_dest +log_archive_format +log_archive_local_first +log_archive_max_processes +log_archive_min_succeed_dest +log_archive_start +log_archive_trace +log_buffer +log_checkpoint_interval +log_checkpoint_timeout +log_checkpoints_to_alert +log_file_name_convert +log_read_only_violations +logfile +logfiles +logging +logical +logical_reads_per_call +logical_reads_per_session +logoff +logon +long +low +lower +lpad +ltrim +main +make_ref +manage +managed +management +manager +manual +mapping +master +matched +materialize +materialized +max +max_dispatchers +max_dump_file_size +max_enabled_roles +max_shared_servers +maxarchlogs +maxdatafiles +maxextents +maximize +maxinstances +maxlogfiles +maxloghistory +maxlogmembers +maxsize +maxtrans +maxvalue +measure +measures +median +medium +member +memory +memory_max_target +memory_target +merge +merge$actions +merge_aj +merge_const_on +merge_sj +method +migrate +migration +min +minextents +minimize +minimum +mining +minus +minus_null +minute +minvalue +mirror +mirrorcold +mirrorhot +mlslabel +mod +mode +model +model_compile_subquery +model_dontverify_uniqueness +model_dynamic_subquery +model_min_analysis +model_no_analysis +model_pby +model_push_ref +modify +monitor +monitoring +month +months_between +mount +mountpath +move +movement +multiset +mv_merge +name +named +namespace +nan +nanvl +national +native +native_full_outer_join +natural +nav +nchar +nchar_cs +nchr +nclob +needed +nested +nested_table_fast_insert +nested_table_get_refs +nested_table_id +nested_table_set_refs +nested_table_set_setid +network +never +new +new_time +next +next_day +nl_aj +nl_sj +nlj_batching +nlj_index_filter +nlj_index_scan +nlj_prefetch +nls_calendar +nls_characterset +nls_charset_decl_len +nls_charset_id +nls_charset_name +nls_comp +nls_currency +nls_date_format +nls_date_language +nls_dual_currency +nls_initcap +nls_iso_currency +nls_lang +nls_language +nls_length_semantics +nls_lower +nls_nchar_conv_excp +nls_numeric_characters +nls_sort +nls_special_chars +nls_territory +nls_time_format +nls_time_tz_format +nls_timestamp_format +nls_timestamp_tz_format +nls_upper +nlssort +no_access +no_basetable_multimv_rewrite +no_bind_aware +no_buffer +no_cartesian +no_check_acl_rewrite +no_coalesce_sq +no_connect_by_cb_whr_only +no_connect_by_combine_sw +no_connect_by_cost_based +no_connect_by_elim_dups +no_connect_by_filtering +no_cost_xml_query_rewrite +no_cpu_costing +no_domain_index_filter +no_dst_upgrade_insert_conv +no_eliminate_join +no_eliminate_oby +no_eliminate_outer_join +no_expand +no_expand_gset_to_union +no_expand_table +no_fact +no_factorize_join +no_filtering +no_gby_pushdown +no_index +no_index_ffs +no_index_ss +no_load +no_merge +no_model_push_ref +no_monitor +no_monitoring +no_multimv_rewrite +no_native_full_outer_join +no_nlj_batching +no_nlj_prefetch +no_order_rollups +no_outer_join_to_inner +no_parallel +no_parallel_index +no_partial_commit +no_place_distinct +no_place_group_by +no_pq_map +no_prune_gsets +no_pull_pred +no_push_pred +no_push_subq +no_px_join_filter +no_qkn_buff +no_query_transformation +no_ref_cascade +no_result_cache +no_rewrite +no_semijoin +no_set_to_join +no_sql_tune +no_star_transformation +no_statement_queuing +no_stats_gsets +no_subquery_pruning +no_substrb_pad +no_swap_join_inputs +no_table_lookup_by_nl +no_temp_table +no_transform_distinct_agg +no_unnest +no_use_hash +no_use_hash_aggregation +no_use_hash_gby_for_pushdown +no_use_invisible_indexes +no_use_merge +no_use_nl +no_xdb_fastpath_insert +no_xml_dml_rewrite +no_xml_query_rewrite +no_xmlindex_rewrite +no_xmlindex_rewrite_in_select +noappend +noarchivelog +noaudit +nocache +nocompress +nocpu_costing +nocycle +nodelay +noentityescaping +noforce +noguarantee +nolocal +nologging +nomapping +nomaxvalue +nominimize +nominvalue +nomonitoring +none +nonschema +noorder +nooverride +noparallel +noparallel_index +norely +norepair +noresetlogs +noreverse +norewrite +normal +norowdependencies +noschemacheck +nosegment +nosort +nostrict +noswitch +not +nothing +notification +novalidate +nowait +nth_value +ntile +null +nullif +nulls +num_index_keys +number +numeric +numtodsinterval +numtoyminterval +nvarchar2 +nvl +nvl2 +object +object_cache_max_size_percent +object_cache_optimal_size +objecttoxml +objno +objno_reuse +occurences +off +offline +oid +oidindex +olap +olap_page_pool_size +old +old_push_pred +oltp +online +only +opaque +opaque_transform +opaque_xcanonical +opcode +open +open_cursors +open_links +open_links_per_instance +operations +operator +opt_estimate +opt_param +optimal +optimizer_capture_sql_plan_baselines +optimizer_dynamic_sampling +optimizer_features_enable +optimizer_goal +optimizer_index_caching +optimizer_index_cost_adj +optimizer_mode +optimizer_secure_view_merging +optimizer_use_invisible_indexes +optimizer_use_pending_statistics +optimizer_use_sql_plan_baselines +option +or_expand +or_predicates +ora_branch +ora_checkacl +ora_dst_affected +ora_dst_convert +ora_dst_error +ora_get_aclids +ora_get_privileges +ora_hash +ora_rowscn +ora_rowscn_raw +ora_rowversion +ora_tabversion +oradebug +order +ordered +ordered_predicates +ordinality +organization +os_authent_prefix +os_roles +other +out_of_line +outer +outer_join_to_inner +outline +outline_leaf +over +overflow +overflow_nomove +overlaps +own +owner +ownership +package +packages +parallel +parallel_adaptive_multi_user +parallel_automatic_tuning +parallel_degree_limit +parallel_degree_policy +parallel_execution_message_size +parallel_force_local +parallel_index +parallel_instance_group +parallel_io_cap_enabled +parallel_max_servers +parallel_min_percent +parallel_min_servers +parallel_min_time_threshold +parallel_server +parallel_server_instances +parallel_servers_target +parallel_threads_per_cpu +param +parameters +parent +parity +part$num$inst +partially +partition +partition_hash +partition_list +partition_range +partitions +passing +password +password_grace_time +password_life_time +password_lock_time +password_reuse_max +password_reuse_time +password_verify_function +path +paths +pbl_hs_begin +pbl_hs_end +pctfree +pctincrease +pctthreshold +pctused +pctversion +pending +percent +percent_rank +percent_rankm +percentile_cont +percentile_disc +performance +permanent +permission +permit_92_wrap_format +pfile +pga_aggregate_target +physical +pikey +piv_gb +piv_ssf +pivot +place_distinct +place_group_by +plan +plscope_settings +plsql_ccflags +plsql_code_type +plsql_debug +plsql_optimize_level +plsql_v2_compatibility +plsql_warnings +point +policy +post_transaction +power +powermultiset +powermultiset_by_cardinality +pq_distribute +pq_map +pq_nomap +pre_page_sga +prebuilt +precedes +preceding +precision +precompute_subquery +predicate_reorders +prediction +prediction_bounds +prediction_cost +prediction_details +prediction_probability +prediction_set +prepare +present +presentnnv +presentv +preserve +preserve_oid +previous +primary +prior +private +private_sga +privilege +privileges +procedural +procedure +process +processes +profile +program +project +propagate +protected +protection +public +pull_pred +purge +push_pred +push_subq +px_granule +px_join_filter +qb_name +query +query_block +query_rewrite_enabled +query_rewrite_integrity +queue +queue_curr +queue_rowp +quiesce +quorum +quota +random +random_local +range +rank +rankm +rapidly +ratio_to_report +raw +rawtohex +rawtonhex +rba +rbo_outline +rdba +rdbms_server_dn +read +read_only_open_delayed +reads +real +rebalance +rebuild +records_per_block +recover +recoverable +recovery +recovery_parallelism +recycle +recyclebin +redo +redo_transport_user +reduced +redundancy +ref +ref_cascade_cursor +reference +referenced +references +referencing +refresh +reftohex +regexp_count +regexp_instr +regexp_like +regexp_replace +regexp_substr +register +regr_avgx +regr_avgy +regr_count +regr_intercept +regr_r2 +regr_slope +regr_sxx +regr_sxy +regr_syy +regular +reject +rekey +relational +rely +remainder +remote_dependencies_mode +remote_listener +remote_login_passwordfile +remote_mapped +remote_os_authent +remote_os_roles +remove +rename +repair +repeat +replace +replication +replication_dependency_tracking +required +reset +resetlogs +resize +resolve +resolver +resource +resource_limit +resource_manager_cpu_allocation +resource_manager_plan +respect +restore +restore_as_intervals +restrict +restrict_all_ref_cons +restricted +result_cache +result_cache_max_result +result_cache_max_size +result_cache_mode +result_cache_remote_expiration +resumable +resumable_timeout +resume +retention +retry_on_row_change +return +returning +reuse +reverse +revoke +rewrite +rewrite_or_error +right +role +roles +rollback +rollback_segments +rolling +rollup +round +row +row_length +row_number +rowdependencies +rowid +rowidtochar +rowidtonchar +rownum +rows +rpad +rtrim +rule +rules +salt +sample +save_as_intervals +savepoint +sb4 +scale +scale_rows +scan +scan_instances +scheduler +schema +schemacheck +scn +scn_ascending +scope +sd_all +sd_inhibit +sd_show +search +sec_case_sensitive_logon +sec_max_failed_login_attempts +sec_protocol_error_further_action +sec_protocol_error_trace_action +sec_return_server_release_banner +second +securefile +securefile_dba +security +seed +seg_block +seg_file +segment +select +selectivity +semijoin +semijoin_driver +sequence +sequenced +sequential +serial_reuse +serializable +servererror +service_names +session +session_cached_cursors +session_max_open_files +sessions +sessions_per_user +sessiontimezone +sessiontzname +set +set_to_join +sets +settings +severe +sga_max_size +sga_target +shadow_core_dump +share +shared +shared_memory_address +shared_pool +shared_pool_reserved_size +shared_pool_size +shared_server_sessions +shared_servers +show +shrink +shutdown +siblings +sid +sign +signal_component +signal_function +simple +sin +single +singletask +sinh +size +skip +skip_ext_optimizer +skip_unq_unusable_idx +skip_unusable_indexes +smallfile +smallint +smtp_out_server +snapshot +some +sort +sort_area_retained_size +sort_area_size +soundex +source +space +specification +spfile +split +spreadsheet +sql +sql92_security +sql_trace +sqlldr +sqltune_category +sqrt +stale +standalone +standby +standby_archive_dest +standby_file_management +standby_max_data_delay +star +star_transformation +star_transformation_enabled +start +startup +statement_id +statement_queuing +statements +static +statistics +statistics_level +stats_binomial_test +stats_crosstab +stats_f_test +stats_ks_test +stats_mode +stats_mw_test +stats_one_way_anova +stats_t_test_indep +stats_t_test_indepu +stats_t_test_one +stats_t_test_paired +stats_wsr_test +stddev +stddev_pop +stddev_samp +stop +storage +store +streams +streams_pool_size +strict +string +strip +stripe_columns +stripe_width +structure +submultiset +subpartition +subpartition_rel +subpartitions +subqueries +subquery_pruning +substitutable +substr +substr2 +substr4 +substrb +substrc +successful +sum +summary +supplemental +suspend +swap_join_inputs +switch +switchover +sync +synchronous +synonym +sys_audit +sys_checkacl +sys_connect_by_path +sys_context +sys_dburigen +sys_dl_cursor +sys_dm_rxform_chr +sys_dm_rxform_num +sys_dom_compare +sys_dst_prim2sec +sys_dst_sec2prim +sys_et_bfile_to_raw +sys_et_blob_to_image +sys_et_image_to_blob +sys_et_raw_to_bfile +sys_extpdtxt +sys_extract_utc +sys_fbt_insdel +sys_filter_acls +sys_get_aclids +sys_get_privileges +sys_gettokenid +sys_getxtival +sys_guid +sys_make_xmlnodeid +sys_makexml +sys_mkxmlattr +sys_op_adt2bin +sys_op_adtcons +sys_op_alscrval +sys_op_atg +sys_op_bin2adt +sys_op_bitvec +sys_op_bl2r +sys_op_bloom_filter +sys_op_bloom_filter_list +sys_op_c2c +sys_op_cast +sys_op_ceg +sys_op_cl2c +sys_op_combined_hash +sys_op_comp +sys_op_convert +sys_op_countchg +sys_op_csconv +sys_op_csconvtest +sys_op_csr +sys_op_csx_patch +sys_op_decomp +sys_op_descend +sys_op_distinct +sys_op_dra +sys_op_dump +sys_op_dv_check +sys_op_enforce_not_null$ +sys_op_extract +sys_op_grouping +sys_op_guid +sys_op_iix +sys_op_itr +sys_op_lbid +sys_op_lobloc2blob +sys_op_lobloc2clob +sys_op_lobloc2id +sys_op_lobloc2nclob +sys_op_lobloc2typ +sys_op_lsvi +sys_op_lvl +sys_op_makeoid +sys_op_map_nonnull +sys_op_msr +sys_op_nicombine +sys_op_niextract +sys_op_nii +sys_op_nix +sys_op_noexpand +sys_op_ntcimg$ +sys_op_numtoraw +sys_op_oidvalue +sys_op_opnsize +sys_op_par +sys_op_par_1 +sys_op_pargid +sys_op_pargid_1 +sys_op_pivot +sys_op_r2o +sys_op_rawtonum +sys_op_rdtm +sys_op_ref +sys_op_rmtd +sys_op_rowidtoobj +sys_op_rpb +sys_op_tosetid +sys_op_tpr +sys_op_trtb +sys_op_undescend +sys_op_vecand +sys_op_vecbit +sys_op_vecor +sys_op_vecxor +sys_op_version +sys_op_vref +sys_op_vvd +sys_op_xmlcons_for_csx +sys_op_xpthatg +sys_op_xpthidx +sys_op_xpthop +sys_op_xtxt2sqlt +sys_optlobprbsc +sys_optxicmp +sys_optxqcastasnq +sys_orderkey_depth +sys_orderkey_maxchild +sys_orderkey_parent +sys_parallel_txn +sys_path_reverse +sys_pathid_is_attr +sys_pathid_is_nmspc +sys_pathid_lastname +sys_pathid_lastnmspc +sys_pxqextract +sys_rid_order +sys_row_delta +sys_sc_2_xmlt +sys_synrciredo +sys_typeid +sys_umakexml +sys_xmlanalyze +sys_xmlcontains +sys_xmlconv +sys_xmlexnsuri +sys_xmlgen +sys_xmli_loc_isnode +sys_xmli_loc_istext +sys_xmlinstr +sys_xmllocator_getsval +sys_xmlnodeid +sys_xmlnodeid_getcid +sys_xmlnodeid_getlocator +sys_xmlnodeid_getokey +sys_xmlnodeid_getpathid +sys_xmlnodeid_getptrid +sys_xmlnodeid_getrid +sys_xmlnodeid_getsval +sys_xmlnodeid_gettid +sys_xmlt_2_sc +sys_xmltranslate +sys_xmltype2sql +sys_xq_asqlcnv +sys_xq_atomcnvchk +sys_xq_nrng +sys_xq_pksql2xml +sys_xq_upkxml2sql +sys_xqbaseuri +sys_xqcastableerrh +sys_xqcodep2str +sys_xqcodepeq +sys_xqcon2seq +sys_xqconcat +sys_xqdelete +sys_xqdfltcolation +sys_xqdoc +sys_xqdocuri +sys_xqdurdiv +sys_xqed4uri +sys_xqendswith +sys_xqerr +sys_xqerrh +sys_xqeshtmluri +sys_xqexlobval +sys_xqexstwrp +sys_xqextract +sys_xqextrref +sys_xqexval +sys_xqfb2str +sys_xqfnbool +sys_xqfncmp +sys_xqfndatim +sys_xqfnlname +sys_xqfnnm +sys_xqfnnsuri +sys_xqfnpredtruth +sys_xqfnqnm +sys_xqfnroot +sys_xqformatnum +sys_xqftcontain +sys_xqfuncr +sys_xqgetcontent +sys_xqindxof +sys_xqinsert +sys_xqinspfx +sys_xqiri2uri +sys_xqlang +sys_xqllnmfrmqnm +sys_xqmknoderef +sys_xqnilled +sys_xqnodename +sys_xqnormspace +sys_xqnormucode +sys_xqnsp4pfx +sys_xqnspfrmqnm +sys_xqpfxfrmqnm +sys_xqpolyabs +sys_xqpolyadd +sys_xqpolycel +sys_xqpolycst +sys_xqpolycstbl +sys_xqpolydiv +sys_xqpolyflr +sys_xqpolymod +sys_xqpolymul +sys_xqpolyrnd +sys_xqpolysqrt +sys_xqpolysub +sys_xqpolyumus +sys_xqpolyupls +sys_xqpolyveq +sys_xqpolyvge +sys_xqpolyvgt +sys_xqpolyvle +sys_xqpolyvlt +sys_xqpolyvne +sys_xqref2val +sys_xqrename +sys_xqreplace +sys_xqresvuri +sys_xqrndhalf2evn +sys_xqrslvqnm +sys_xqryenvpget +sys_xqryvarget +sys_xqrywrp +sys_xqseq2con +sys_xqseq2con4xc +sys_xqseqdeepeq +sys_xqseqinsb +sys_xqseqrm +sys_xqseqrvs +sys_xqseqsub +sys_xqseqtypmatch +sys_xqstartswith +sys_xqstatburi +sys_xqstr2codep +sys_xqstrjoin +sys_xqsubstraft +sys_xqsubstrbef +sys_xqtokenize +sys_xqtreatas +sys_xqxform +sysasm +sysaux +sysdate +sysdba +sysoper +system +system_defined +systimestamp +table +table_lookup_by_nl +table_stats +tables +tablespace +tablespace_no +tabno +tan +tanh +tape_asynch_io +tbl$or$idx$part$num +temp_table +tempfile +template +temporary +test +than +the +then +thread +through +time +time_zone +timed_os_statistics +timed_statistics +timeout +times +timestamp +timezone_abbr +timezone_hour +timezone_minute +timezone_offset +timezone_region +tiv_gb +tiv_ssf +to_binary_double +to_binary_float +to_blob +to_char +to_clob +to_date +to_dsinterval +to_lob +to_multi_byte +to_nchar +to_nclob +to_number +to_single_byte +to_time +to_time_tz +to_timestamp +to_timestamp_tz +to_yminterval +toplevel +trace +trace_enabled +tracefile_identifier +tracing +tracking +trailing +transaction +transactions +transactions_per_rollback_segment +transform_distinct_agg +transition +transitional +translate +treat +trigger +triggers +trim +true +trunc +truncate +trusted +tuning +type +types +tz_offset +ub2 +uba +uid +unarchived +unbound +unbounded +under +undo +undo_management +undo_retention +undo_tablespace +undrop +uniform +union +unique +unistr +unlimited +unload +unlock +unnest +unpacked +unpivot +unprotected +unquiesce +unrecoverable +unrestricted +until +unusable +unused +upd_indexes +upd_joinindex +updatable +update +updated +updatexml +upgrade +upper +upsert +urowid +usage +use +use_anti +use_concat +use_hash +use_hash_aggregation +use_hash_gby_for_pushdown +use_indirect_data_buffers +use_invisible_indexes +use_large_pages +use_merge +use_merge_cartesian +use_nl +use_nl_with_index +use_private_outlines +use_semi +use_stored_outlines +use_ttt_for_gsets +use_weak_name_resl +user +user_defined +user_dump_dest +user_recyclebin +userenv +usergroup +users +using +utl_file_dir +validate +validation +value +values +var_pop +var_samp +varchar +varchar2 +variance +varray +varrays +varying +vector_read +vector_read_trace +verify +version +versioning +versions +versions_endscn +versions_endtime +versions_operation +versions_startscn +versions_starttime +versions_xid +view +virtual +visible +volume +vsize +wait +wallet +wellformed +when +whenever +where +whitespace +width_bucket +with +within +without +work +workarea_size_policy +wrapped +write +x_dyn_prune +xdb_fastpath_insert +xid +xml +xml_db_events +xml_dml_rwt_stmt +xmlattributes +xmlcast +xmlcdata +xmlcolattval +xmlcomment +xmlconcat +xmldiff +xmlelement +xmlexists +xmlexists2 +xmlforest +xmlindex_rewrite +xmlindex_rewrite_in_select +xmlindex_sel_idx_tbl +xmlisnode +xmlisvalid +xmlnamespaces +xmlparse +xmlpatch +xmlpi +xmlquery +xmlroot +xmlschema +xmlserialize +xmltable +xmltoobject +xmltransform +xmltransformblob +xmltype +xpathtable +xs_sys_context +year +yes +zone diff --git a/tpt/setup/wordfile_12cR1.sql b/tpt/setup/wordfile_12cR1.sql new file mode 100644 index 0000000..e5cb882 --- /dev/null +++ b/tpt/setup/wordfile_12cR1.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set lines 300 trimspool on pages 0 head off feedback off termout off + +SELECT DISTINCT name FROM ( + select lower(keyword) name from v$reserved_words union all + select upper(table_name) from dict union all + select upper(column_name) from dict_columns union all + -- select object_name from dba_objects union all + select upper(object_name||'.'||procedure_name) from dba_procedures union all + -- select '"'||table_name||'".'||column_name from dba_tab_columns union all + select ksppinm from x$ksppi union all + select name from v$sql_hint +) +WHERE length(name) > 2 +ORDER BY 1 +. + +spool wordfile_12cR1.txt +/ +spool off + + +-- you can also add TPT scripts by running this in TPT script dir: +-- find . -type f -name "*.sql" | sed 's/^\.\///' | awk '{ print "@" $1 }' >> ~/work/oracle/wordfile_12cR1.txt +-- or you could just run rlwrap sqlplus while being in the directory where the scripts are located!! diff --git a/tpt/setup/wordfile_12cR1.txt b/tpt/setup/wordfile_12cR1.txt new file mode 100644 index 0000000..dcf2056 --- /dev/null +++ b/tpt/setup/wordfile_12cR1.txt @@ -0,0 +1,42044 @@ +ABORTED_REQUESTS +ABORTED_REQUEST_THRESHOLD +ABSOLUTE_FUZZY_CHANGE# +ABSTRACT_LOBS +ABS_FILE# +ACCEPT +ACCEPTED +ACCESSIBILITY +ACCESS_FROM_REMOTE +ACCESS_METHOD +ACCESS_PARAMETERS +ACCESS_PREDICATES +ACCESS_TIME +ACCESS_TYPE +ACCOUNT_STATUS +ACE_ORDER +ACKED_SCN +ACKNOWLEDGEMENT +ACKNOWLEDGEMENT_POSITION +ACKNOWLEGEMENT_POSITION +ACK_LATENCY +ACL +ACLID +ACL_MISMATCH +ACL_MVIEW_NAME +ACL_OWNER +ACL_STATUS +ACQUIRING +ACTION +ACTION# +ACTIONS +ACTION_ARGUMENT_1 +ACTION_ARGUMENT_2 +ACTION_ARGUMENT_3 +ACTION_ARGUMENT_4 +ACTION_ARGUMENT_5 +ACTION_ARGUMENT_COUNT +ACTION_DETAILS +ACTION_HASH +ACTION_ID +ACTION_MESSAGE_ID +ACTION_NAME +ACTION_SOURCE +ACTION_THRESHOLD +ACTION_TIME +ACTION_TYPE +ACTION_VAL +ACTIVATING_DBID +ACTIVATING_DBNAME +ACTIVATING_INSTANCE_NAME +ACTIVATING_INSTANCE_NUMBER +ACTIVATING_INSTANCE_SERIAL +ACTIVATING_PDBGUID +ACTIVATING_PDBID +ACTIVATING_PDBNAME +ACTIVATING_PDBUID +ACTIVATION# +ACTIVATION_LEVEL +ACTIVATION_TIME +ACTIVE +ACTIVEBLKS +ACTIVE_AGENTS +ACTIVE_LISTENER +ACTIVE_SERVER_COUNT +ACTIVE_SESSIONS +ACTIVE_SESSIONS_KILLED +ACTIVE_SESSION_LIMIT_HIT +ACTIVE_SESS_KILLED +ACTIVE_SESS_LIMIT_HIT +ACTIVE_SESS_POOL_MTH +ACTIVE_SESS_POOL_P1 +ACTIVE_SHARDS +ACTIVE_SPEED +ACTIVE_STATE +ACTIVE_STATUS +ACTIVE_STAT_PERIOD +ACTIVE_TIME +ACTIVITY_COUNTER +ACTIVITY_ID +ACTIVITY_TRACKING +ACTIVITY_TYPE +ACTUAL +ACTUAL_ANALYSIS +ACTUAL_DURATION +ACTUAL_MEM_USED +ACTUAL_PHYSICAL_READS +ACTUAL_REDO_BLKS +ACTUAL_REPAIR_TIME +ACTUAL_START_DATE +ACT_REPAIR_TIME +ADAPTIVE +ADAPTIVE_PLAN +ADDED_EXTENTS +ADDITIONAL_IMCU_PIECES +ADDITIONAL_INFO +ADDR +ADDRESS +ADD_JOB_HISTORY. +ADD_UNIQUE_KEY_PREFIX +ADMIN_NAME +ADMIN_OPT +ADMIN_OPTION +ADRALERT_VERSION +ADRDIR_VERSION +ADRID +ADRSCHMV_SUMMARY +ADRSCHM_VERSION +ADR_HOME +ADR_HOME_T.ADR_HOME_T +ADR_INCIDENT_T.ADD_CORRELATION_KEY +ADR_INCIDENT_T.BEGIN_UPDATE +ADR_INCIDENT_T.DUMP_INCFILE +ADR_INCIDENT_T.DUMP_INCFILE_RAW +ADR_INCIDENT_T.DUMP_INCIDENT +ADR_INCIDENT_T.DUMP_INCIDENT_RAW +ADR_INCIDENT_T.END_UPDATE +ADR_INCIDENT_T.GET_ID +ADR_INCIDENT_T.GET_INCIDENT_LOCATION +ADR_INCIDENT_T.REGISTER_FILE +ADR_PATH_IDX +ADVANCE_ENABLED +ADVANCING +ADVICE +ADVICE_DISABLED +ADVICE_STATUS +ADVISE_ID +ADVISOR +ADVISOR_ID +ADVISOR_METRIC1 +ADVISOR_NAME +ADVISOR_RUN_ID +ADVISOR_RUN_REASON +ADVISOR_RUN_TIME +AFFIRM +AFTER_FAST_REFRESH +AFTER_ROW +AFTER_STATEMENT +AGENT +AGENT_ID +AGENT_NAME +AGENT_TYPE +AGGRCENTROID.ODCIAGGREGATEINITIALIZE +AGGRCENTROID.ODCIAGGREGATEITERATE +AGGRCENTROID.ODCIAGGREGATEMERGE +AGGRCENTROID.ODCIAGGREGATETERMINATE +AGGRCONCAT.ODCIAGGREGATEINITIALIZE +AGGRCONCAT.ODCIAGGREGATEITERATE +AGGRCONCAT.ODCIAGGREGATEMERGE +AGGRCONCAT.ODCIAGGREGATETERMINATE +AGGRCONVEXHULL.ODCIAGGREGATEINITIALIZE +AGGRCONVEXHULL.ODCIAGGREGATEITERATE +AGGRCONVEXHULL.ODCIAGGREGATEMERGE +AGGRCONVEXHULL.ODCIAGGREGATETERMINATE +AGGREGATE +AGGREGATE_CACHE_HITS +AGGREGATE_CACHE_MISSES +AGGREGATION_METHOD +AGGREGATION_TYPE +AGGRLRSCONCAT.ODCIAGGREGATEINITIALIZE +AGGRLRSCONCAT.ODCIAGGREGATEITERATE +AGGRLRSCONCAT.ODCIAGGREGATEMERGE +AGGRLRSCONCAT.ODCIAGGREGATETERMINATE +AGGRLRSCONCAT3D.ODCIAGGREGATEINITIALIZE +AGGRLRSCONCAT3D.ODCIAGGREGATEITERATE +AGGRLRSCONCAT3D.ODCIAGGREGATEMERGE +AGGRLRSCONCAT3D.ODCIAGGREGATETERMINATE +AGGRMBR.ODCIAGGREGATEINITIALIZE +AGGRMBR.ODCIAGGREGATEITERATE +AGGRMBR.ODCIAGGREGATEMERGE +AGGRMBR.ODCIAGGREGATETERMINATE +AGGRUNION.ODCIAGGREGATEINITIALIZE +AGGRUNION.ODCIAGGREGATEITERATE +AGGRUNION.ODCIAGGREGATEMERGE +AGGRUNION.ODCIAGGREGATETERMINATE +AGGRUNION.SDOAGGREGATEITERATE +AGGR_FUNC_CALCS +AGGR_FUNC_LOGICAL_NA +AGGR_FUNC_PRECOMPUTE +AGGXMLIMP.ODCIAGGREGATEINITIALIZE +AGGXMLIMP.ODCIAGGREGATEITERATE +AGGXMLIMP.ODCIAGGREGATEMERGE +AGGXMLIMP.ODCIAGGREGATETERMINATE +AGGXMLIMP.ODCIAGGREGATEWRAPCONTEXT +AGGXQAVGIMP.ODCIAGGREGATEINITIALIZE +AGGXQAVGIMP.ODCIAGGREGATEITERATE +AGGXQAVGIMP.ODCIAGGREGATEMERGE +AGGXQAVGIMP.ODCIAGGREGATETERMINATE +AGGXQAVGIMP.ODCIAGGREGATEWRAPCONTEXT +AGGXQIMP.ODCIAGGREGATEINITIALIZE +AGGXQIMP.ODCIAGGREGATEITERATE +AGGXQIMP.ODCIAGGREGATEMERGE +AGGXQIMP.ODCIAGGREGATETERMINATE +AGGXQIMP.ODCIAGGREGATEWRAPCONTEXT +AGGXQSUMIMP.ODCIAGGREGATEINITIALIZE +AGGXQSUMIMP.ODCIAGGREGATEITERATE +AGGXQSUMIMP.ODCIAGGREGATEMERGE +AGGXQSUMIMP.ODCIAGGREGATETERMINATE +AGGXQSUMIMP.ODCIAGGREGATEWRAPCONTEXT +AGG_COLUMN_NAME +AGG_FUNCTION +ALERT_REASON_ID +ALGORITHM +ALGORITHM_COMPATIBILITY +ALGORITHM_DESCRIPTION +ALGORITHM_ID +ALGORITHM_NAME +ALIAS_DIRECTORY +ALIAS_INCARNATION +ALIAS_INDEX +ALIGNMENT +ALL$OLAP2_AWS +ALLOCATED +ALLOCATED_AVG +ALLOCATED_BYTES +ALLOCATED_LEN +ALLOCATED_MAT_MB +ALLOCATED_MAX +ALLOCATED_SPACE +ALLOCATED_STDDEV +ALLOCATED_TOTAL +ALLOCATION_COUNT +ALLOCATION_TYPE +ALLOCATION_UNIT_SIZE +ALLOC_BYTES +ALLOC_CLASS +ALLOWED_AUTOMATED_SWITCHES +ALLOW_RUNS_IN_RESTRICTED_MODE +ALL_ALL_TABLES +ALL_APPLY +ALL_APPLY_CHANGE_HANDLERS +ALL_APPLY_CONFLICT_COLUMNS +ALL_APPLY_DML_CONF_COLUMNS +ALL_APPLY_DML_CONF_HANDLERS +ALL_APPLY_DML_HANDLERS +ALL_APPLY_ENQUEUE +ALL_APPLY_ERROR +ALL_APPLY_ERROR_MESSAGES +ALL_APPLY_EXECUTE +ALL_APPLY_HANDLE_COLLISIONS +ALL_APPLY_INSTANTIATED_GLOBAL +ALL_APPLY_INSTANTIATED_OBJECTS +ALL_APPLY_INSTANTIATED_SCHEMAS +ALL_APPLY_KEY_COLUMNS +ALL_APPLY_PARAMETERS +ALL_APPLY_PROGRESS +ALL_APPLY_REPERROR_HANDLERS +ALL_APPLY_SPILL_TXN +ALL_APPLY_TABLE_COLUMNS +ALL_ARGUMENTS +ALL_ASSEMBLIES +ALL_ASSOCIATIONS +ALL_ATTRIBUTE_TRANSFORMATIONS +ALL_AUDITED_SYSTEM_ACTIONS +ALL_AUDIT_POLICIES +ALL_AUDIT_POLICY_COLUMNS +ALL_AWS +ALL_AW_AC +ALL_AW_AC_10G +ALL_AW_OBJ +ALL_AW_PROP +ALL_AW_PROP_NAME +ALL_AW_PS +ALL_BASE_TABLE_MVIEWS +ALL_CAPTURE +ALL_CAPTURE_EXTRA_ATTRIBUTES +ALL_CAPTURE_PARAMETERS +ALL_CAPTURE_PREPARED_DATABASE +ALL_CAPTURE_PREPARED_SCHEMAS +ALL_CAPTURE_PREPARED_TABLES +ALL_CATALOG +ALL_CHANGE_PROPAGATIONS +ALL_CHANGE_PROPAGATION_SETS +ALL_CHANGE_SETS +ALL_CHANGE_SOURCES +ALL_CHANGE_TABLES +ALL_CLUSTERING_DIMENSIONS +ALL_CLUSTERING_JOINS +ALL_CLUSTERING_KEYS +ALL_CLUSTERING_TABLES +ALL_CLUSTERS +ALL_CLUSTER_HASH_EXPRESSIONS +ALL_CODE_ROLE_PRIVS +ALL_COLL_TYPES +ALL_COLUMN +ALL_COL_COMMENTS +ALL_COL_PENDING_STATS +ALL_COL_PRIVS +ALL_COL_PRIVS_MADE +ALL_COL_PRIVS_RECD +ALL_COMPARISON_SCAN_SUMMARY +ALL_CONSTRAINTS +ALL_CONS_COLUMNS +ALL_CONS_OBJ_COLUMNS +ALL_CONTAINERS +ALL_CONTEXT +ALL_CREDENTIALS +ALL_CUBES +ALL_CUBE_ATTRIBUTES +ALL_CUBE_ATTR_MAPPINGS +ALL_CUBE_ATTR_UNIQUE_KEYS +ALL_CUBE_ATTR_VISIBILITY +ALL_CUBE_BUILD_PROCESSES +ALL_CUBE_CALCULATED_MEMBERS +ALL_CUBE_CLASSIFICATIONS +ALL_CUBE_DEPENDENCIES +ALL_CUBE_DESCRIPTIONS +ALL_CUBE_DIMENSIONALITY +ALL_CUBE_DIMENSIONS +ALL_CUBE_DIMNL_MAPPINGS +ALL_CUBE_DIM_LEVELS +ALL_CUBE_DIM_MAPPINGS +ALL_CUBE_DIM_MODELS +ALL_CUBE_DIM_VIEWS +ALL_CUBE_DIM_VIEW_COLUMNS +ALL_CUBE_HIERARCHIES +ALL_CUBE_HIER_LEVELS +ALL_CUBE_HIER_VIEWS +ALL_CUBE_HIER_VIEW_COLUMNS +ALL_CUBE_MAPPINGS +ALL_CUBE_MEASURES +ALL_CUBE_MEAS_MAPPINGS +ALL_CUBE_NAMED_BUILD_SPECS +ALL_CUBE_VIEWS +ALL_CUBE_VIEW_COLUMNS +ALL_DB_LINKS +ALL_DEF_AUDIT_OPTS +ALL_DEPENDENCIES +ALL_DEQUEUE_QUEUES +ALL_DIMENSIONS +ALL_DIM_ATTRIBUTES +ALL_DIM_CHILD_OF +ALL_DIM_HIERARCHIES +ALL_DIM_JOIN_KEY +ALL_DIM_LEVELS +ALL_DIM_LEVEL_KEY +ALL_DIRECTORIES +ALL_EDITIONING_VIEWS +ALL_EDITIONING_VIEWS_AE +ALL_EDITIONING_VIEW_COLS +ALL_EDITIONING_VIEW_COLS_AE +ALL_EDITIONS +ALL_EDITION_COMMENTS +ALL_EMON_SERVERS +ALL_ENCRYPTED_COLUMNS +ALL_ERRORS +ALL_ERRORS_AE +ALL_ERROR_TRANSLATIONS +ALL_EVALUATION_CONTEXTS +ALL_EVALUATION_CONTEXT_TABLES +ALL_EVALUATION_CONTEXT_VARS +ALL_EXTERNAL_LOCATIONS +ALL_EXTERNAL_TABLES +ALL_FILE_GROUPS +ALL_FILE_GROUP_EXPORT_INFO +ALL_FILE_GROUP_FILES +ALL_FILE_GROUP_TABLES +ALL_FILE_GROUP_TABLESPACES +ALL_FILE_GROUP_VERSIONS +ALL_GOLDENGATE_INBOUND +ALL_GOLDENGATE_PRIVILEGES +ALL_GOLDENGATE_RULES +ALL_HEAT_MAP_SEGMENT +ALL_HEAT_MAP_SEG_HISTOGRAM +ALL_HISTOGRAMS +ALL_IDENTIFIERS +ALL_INDEXES +ALL_INDEXTYPES +ALL_INDEXTYPE_ARRAYTYPES +ALL_INDEXTYPE_COMMENTS +ALL_INDEXTYPE_OPERATORS +ALL_IND_COLUMNS +ALL_IND_EXPRESSIONS +ALL_IND_PARTITIONS +ALL_IND_PENDING_STATS +ALL_IND_STATISTICS +ALL_IND_SUBPARTITIONS +ALL_INTERNAL_TRIGGERS +ALL_INT_DEQUEUE_QUEUES +ALL_JAVA_ARGUMENTS +ALL_JAVA_CLASSES +ALL_JAVA_COMPILER_OPTIONS +ALL_JAVA_DERIVATIONS +ALL_JAVA_FIELDS +ALL_JAVA_IMPLEMENTS +ALL_JAVA_INNERS +ALL_JAVA_LAYOUTS +ALL_JAVA_METHODS +ALL_JAVA_NCOMPS +ALL_JAVA_RESOLVERS +ALL_JAVA_THROWS +ALL_JOBS +ALL_JOIN_IND_COLUMNS +ALL_JSON_COLUMNS +ALL_LIBRARIES +ALL_LOBS +ALL_LOB_PARTITIONS +ALL_LOB_SUBPARTITIONS +ALL_LOB_TEMPLATES +ALL_LOG_GROUPS +ALL_LOG_GROUP_COLUMNS +ALL_MEASURE_FOLDERS +ALL_MEASURE_FOLDER_CONTENTS +ALL_MEASURE_FOLDER_SUBFOLDERS +ALL_METADATA_PROPERTIES +ALL_METHOD_PARAMS +ALL_METHOD_RESULTS +ALL_MINING_MODELS +ALL_MINING_MODEL_ATTRIBUTES +ALL_MINING_MODEL_SETTINGS +ALL_MVIEWS +ALL_MVIEW_AGGREGATES +ALL_MVIEW_ANALYSIS +ALL_MVIEW_COMMENTS +ALL_MVIEW_DETAIL_PARTITION +ALL_MVIEW_DETAIL_RELATIONS +ALL_MVIEW_DETAIL_SUBPARTITION +ALL_MVIEW_JOINS +ALL_MVIEW_KEYS +ALL_MVIEW_LOGS +ALL_MVIEW_REFRESH_TIMES +ALL_NESTED_TABLES +ALL_NESTED_TABLE_COLS +ALL_OBJECTS +ALL_OBJECTS_AE +ALL_OBJECT_TABLES +ALL_OBJ_COLATTRS +ALL_OLAP2_AWS +ALL_OPANCILLARY +ALL_OPARGUMENTS +ALL_OPBINDINGS +ALL_OPERATORS +ALL_OPERATOR_COMMENTS +ALL_OUTLINES +ALL_OUTLINE_HINTS +ALL_PARTIAL_DROP_TABS +ALL_PART_COL_STATISTICS +ALL_PART_HISTOGRAMS +ALL_PART_INDEXES +ALL_PART_KEY_COLUMNS +ALL_PART_LOBS +ALL_PART_TABLES +ALL_PENDING_CONV_TABLES +ALL_PLSQL_COLL_TYPES +ALL_PLSQL_OBJECT_SETTINGS +ALL_PLSQL_TYPES +ALL_PLSQL_TYPE_ATTRS +ALL_POLICIES +ALL_POLICY_ATTRIBUTES +ALL_POLICY_CONTEXTS +ALL_POLICY_GROUPS +ALL_PROBE_OBJECTS +ALL_PROCEDURES +ALL_PROPAGATION +ALL_PUBLISHED_COLUMNS +ALL_QUALIFIERS +ALL_QUEUES +ALL_QUEUE_PUBLISHERS +ALL_QUEUE_SCHEDULES +ALL_QUEUE_SUBSCRIBERS +ALL_QUEUE_TABLES +ALL_REFRESH +ALL_REFRESH_CHILDREN +ALL_REFRESH_DEPENDENCIES +ALL_REFS +ALL_REGISTERED_MVIEWS +ALL_REGISTERED_SNAPSHOTS +ALL_REGISTRY_BANNERS +ALL_REPAUDIT_ATTRIBUTE +ALL_REPAUDIT_COLUMN +ALL_REPCAT +ALL_REPCATLOG +ALL_REPCOLUMN +ALL_REPCOLUMN_GROUP +ALL_REPCONFLICT +ALL_REPDDL +ALL_REPFLAVORS +ALL_REPFLAVOR_COLUMNS +ALL_REPFLAVOR_OBJECTS +ALL_REPGENERATED +ALL_REPGENOBJECTS +ALL_REPGROUP +ALL_REPGROUPED_COLUMN +ALL_REPGROUP_PRIVILEGES +ALL_REPKEY_COLUMNS +ALL_REPL_DBNAME_MAPPING +ALL_REPOBJECT +ALL_REPPARAMETER_COLUMN +ALL_REPPRIORITY +ALL_REPPRIORITY_GROUP +ALL_REPPROP +ALL_REPRESOLUTION +ALL_REPRESOLUTION_METHOD +ALL_REPRESOLUTION_STATISTICS +ALL_REPRESOL_STATS_CONTROL +ALL_REPSCHEMA +ALL_REPSITES +ALL_REWRITE_EQUIVALENCES +ALL_ROWS +ALL_RULES +ALL_RULESETS +ALL_RULE_SETS +ALL_RULE_SET_RULES +ALL_SCHEDULER_CHAINS +ALL_SCHEDULER_CHAIN_RULES +ALL_SCHEDULER_CHAIN_STEPS +ALL_SCHEDULER_CREDENTIALS +ALL_SCHEDULER_DB_DESTS +ALL_SCHEDULER_DESTS +ALL_SCHEDULER_EXTERNAL_DESTS +ALL_SCHEDULER_FILE_WATCHERS +ALL_SCHEDULER_GLOBAL_ATTRIBUTE +ALL_SCHEDULER_GROUPS +ALL_SCHEDULER_GROUP_MEMBERS +ALL_SCHEDULER_JOBS +ALL_SCHEDULER_JOB_ARGS +ALL_SCHEDULER_JOB_CLASSES +ALL_SCHEDULER_JOB_DESTS +ALL_SCHEDULER_JOB_LOG +ALL_SCHEDULER_JOB_RUN_DETAILS +ALL_SCHEDULER_NOTIFICATIONS +ALL_SCHEDULER_PROGRAMS +ALL_SCHEDULER_PROGRAM_ARGS +ALL_SCHEDULER_REMOTE_DATABASES +ALL_SCHEDULER_REMOTE_JOBSTATE +ALL_SCHEDULER_RUNNING_CHAINS +ALL_SCHEDULER_SCHEDULES +ALL_SCHEDULER_WINDOWS +ALL_SCHEDULER_WINDOW_DETAILS +ALL_SCHEDULER_WINDOW_GROUPS +ALL_SCHEDULER_WINDOW_LOG +ALL_SCHEDULER_WINGROUP_MEMBERS +ALL_SECONDARY_OBJECTS +ALL_SEC_RELEVANT_COLS +ALL_SEQUENCES +ALL_SERVICES +ALL_SNAPSHOTS +ALL_SNAPSHOT_LOGS +ALL_SNAPSHOT_REFRESH_TIMES +ALL_SOURCE +ALL_SOURCE_AE +ALL_SOURCE_TABLES +ALL_SQLJ_TYPES +ALL_SQLJ_TYPE_ATTRS +ALL_SQLJ_TYPE_METHODS +ALL_SQLSET +ALL_SQLSET_BINDS +ALL_SQLSET_PLANS +ALL_SQLSET_REFERENCES +ALL_SQLSET_STATEMENTS +ALL_SQL_TRANSLATIONS +ALL_SQL_TRANSLATION_PROFILES +ALL_STAT_EXTENSIONS +ALL_STORED_SETTINGS +ALL_STREAMS_COLUMNS +ALL_STREAMS_GLOBAL_RULES +ALL_STREAMS_KEEP_COLUMNS +ALL_STREAMS_MESSAGE_CONSUMERS +ALL_STREAMS_MESSAGE_RULES +ALL_STREAMS_NEWLY_SUPPORTED +ALL_STREAMS_RULES +ALL_STREAMS_SCHEMA_RULES +ALL_STREAMS_TABLE_RULES +ALL_STREAMS_TRANSFORMATIONS +ALL_STREAMS_TRANSFORM_FUNCTION +ALL_STREAMS_UNSUPPORTED +ALL_SUBPARTITION_TEMPLATES +ALL_SUBPART_COL_STATISTICS +ALL_SUBPART_HISTOGRAMS +ALL_SUBPART_KEY_COLUMNS +ALL_SUBSCRIBED_COLUMNS +ALL_SUBSCRIBED_TABLES +ALL_SUBSCRIPTIONS +ALL_SUMDELTA +ALL_SUMMAP +ALL_SUMMARIES +ALL_SYNC_CAPTURE +ALL_SYNC_CAPTURE_PREPARED_TABS +ALL_SYNC_CAPTURE_TABLES +ALL_SYNONYMS +ALL_TABLES +ALL_TAB_COLS +ALL_TAB_COLS_V$ +ALL_TAB_COLUMNS +ALL_TAB_COL_STATISTICS +ALL_TAB_COMMENTS +ALL_TAB_HISTGRM_PENDING_STATS +ALL_TAB_HISTOGRAMS +ALL_TAB_IDENTITY_COLS +ALL_TAB_MODIFICATIONS +ALL_TAB_PARTITIONS +ALL_TAB_PENDING_STATS +ALL_TAB_PRIVS +ALL_TAB_PRIVS_MADE +ALL_TAB_PRIVS_RECD +ALL_TAB_STATISTICS +ALL_TAB_STATS_HISTORY +ALL_TAB_STAT_PREFS +ALL_TAB_SUBPARTITIONS +ALL_TRANSFORMATIONS +ALL_TRIGGERS +ALL_TRIGGER_COLS +ALL_TRIGGER_ORDERING +ALL_TSTZ_TABLES +ALL_TSTZ_TAB_COLS +ALL_TYPES +ALL_TYPE_ATTRS +ALL_TYPE_METHODS +ALL_TYPE_VERSIONS +ALL_UNUSED_COL_TABS +ALL_UPDATABLE_COLUMNS +ALL_USERS +ALL_USTATS +ALL_VARRAYS +ALL_VIEWS +ALL_VIEWS_AE +ALL_WARNING_SETTINGS +ALL_XDS_ACL_REFRESH +ALL_XDS_ACL_REFSTAT +ALL_XDS_LATEST_ACL_REFSTAT +ALL_XMLTYPE_COLS +ALL_XML_INDEXES +ALL_XML_NESTED_TABLES +ALL_XML_OUT_OF_LINE_TABLES +ALL_XML_SCHEMAS +ALL_XML_SCHEMAS2 +ALL_XML_SCHEMA_ATTRIBUTES +ALL_XML_SCHEMA_COMPLEX_TYPES +ALL_XML_SCHEMA_ELEMENTS +ALL_XML_SCHEMA_NAMESPACES +ALL_XML_SCHEMA_SIMPLE_TYPES +ALL_XML_SCHEMA_SUBSTGRP_HEAD +ALL_XML_SCHEMA_SUBSTGRP_MBRS +ALL_XML_TABLES +ALL_XML_TAB_COLS +ALL_XML_VIEWS +ALL_XML_VIEW_COLS +ALL_XSTREAM_ADMINISTRATOR +ALL_XSTREAM_INBOUND +ALL_XSTREAM_OUTBOUND +ALL_XSTREAM_OUT_SUPPORT_MODE +ALL_XSTREAM_RULES +ALL_XSTREAM_TRANSFORMATIONS +ALL_ZONEMAPS +ALL_ZONEMAP_MEASURES +ALT +ALTERNATE +ALWAYS +AMGT$DATAPUMP. +AMGT$DATAPUMP.INSTANCE_CALLOUT_IMP +ANALYSIS_VERSION +ANALYTIC +AND_EQUAL +ANNOTATION_STATUS +ANSI_REARCH +ANTIJOIN +ANYDATA.ACCESSBDOUBLE +ANYDATA.ACCESSBFILE +ANYDATA.ACCESSBFLOAT +ANYDATA.ACCESSBLOB +ANYDATA.ACCESSCHAR +ANYDATA.ACCESSCLOB +ANYDATA.ACCESSDATE +ANYDATA.ACCESSINTERVALDS +ANYDATA.ACCESSINTERVALYM +ANYDATA.ACCESSNCHAR +ANYDATA.ACCESSNCLOB +ANYDATA.ACCESSNUMBER +ANYDATA.ACCESSNVARCHAR2 +ANYDATA.ACCESSRAW +ANYDATA.ACCESSTIMESTAMP +ANYDATA.ACCESSTIMESTAMPLTZ +ANYDATA.ACCESSTIMESTAMPTZ +ANYDATA.ACCESSUROWID +ANYDATA.ACCESSVARCHAR +ANYDATA.ACCESSVARCHAR2 +ANYDATA.BEGINCREATE +ANYDATA.CONVERTBDOUBLE +ANYDATA.CONVERTBFILE +ANYDATA.CONVERTBFLOAT +ANYDATA.CONVERTBLOB +ANYDATA.CONVERTCHAR +ANYDATA.CONVERTCLOB +ANYDATA.CONVERTCOLLECTION +ANYDATA.CONVERTDATE +ANYDATA.CONVERTINTERVALDS +ANYDATA.CONVERTINTERVALYM +ANYDATA.CONVERTNCHAR +ANYDATA.CONVERTNCLOB +ANYDATA.CONVERTNUMBER +ANYDATA.CONVERTNVARCHAR2 +ANYDATA.CONVERTOBJECT +ANYDATA.CONVERTRAW +ANYDATA.CONVERTREF +ANYDATA.CONVERTTIMESTAMP +ANYDATA.CONVERTTIMESTAMPLTZ +ANYDATA.CONVERTTIMESTAMPTZ +ANYDATA.CONVERTUROWID +ANYDATA.CONVERTVARCHAR +ANYDATA.CONVERTVARCHAR2 +ANYDATA.ENDCREATE +ANYDATA.GETBDOUBLE +ANYDATA.GETBFILE +ANYDATA.GETBFLOAT +ANYDATA.GETBLOB +ANYDATA.GETCHAR +ANYDATA.GETCLOB +ANYDATA.GETCOLLECTION +ANYDATA.GETDATE +ANYDATA.GETINTERVALDS +ANYDATA.GETINTERVALYM +ANYDATA.GETNCHAR +ANYDATA.GETNCLOB +ANYDATA.GETNUMBER +ANYDATA.GETNVARCHAR2 +ANYDATA.GETOBJECT +ANYDATA.GETRAW +ANYDATA.GETREF +ANYDATA.GETTIMESTAMP +ANYDATA.GETTIMESTAMPLTZ +ANYDATA.GETTIMESTAMPTZ +ANYDATA.GETTYPE +ANYDATA.GETTYPENAME +ANYDATA.GETVARCHAR +ANYDATA.GETVARCHAR2 +ANYDATA.PIECEWISE +ANYDATA.SETBDOUBLE +ANYDATA.SETBFILE +ANYDATA.SETBFLOAT +ANYDATA.SETBLOB +ANYDATA.SETCHAR +ANYDATA.SETCLOB +ANYDATA.SETCOLLECTION +ANYDATA.SETDATE +ANYDATA.SETINTERVALDS +ANYDATA.SETINTERVALYM +ANYDATA.SETNCHAR +ANYDATA.SETNCLOB +ANYDATA.SETNUMBER +ANYDATA.SETNVARCHAR2 +ANYDATA.SETOBJECT +ANYDATA.SETRAW +ANYDATA.SETREF +ANYDATA.SETTIMESTAMP +ANYDATA.SETTIMESTAMPLTZ +ANYDATA.SETTIMESTAMPTZ +ANYDATA.SETVARCHAR +ANYDATA.SETVARCHAR2 +ANYDATASET.ADDINSTANCE +ANYDATASET.BEGINCREATE +ANYDATASET.ENDCREATE +ANYDATASET.GETBDOUBLE +ANYDATASET.GETBFILE +ANYDATASET.GETBFLOAT +ANYDATASET.GETBLOB +ANYDATASET.GETCHAR +ANYDATASET.GETCLOB +ANYDATASET.GETCOLLECTION +ANYDATASET.GETCOUNT +ANYDATASET.GETDATE +ANYDATASET.GETINSTANCE +ANYDATASET.GETINTERVALDS +ANYDATASET.GETINTERVALYM +ANYDATASET.GETNCHAR +ANYDATASET.GETNCLOB +ANYDATASET.GETNUMBER +ANYDATASET.GETNVARCHAR2 +ANYDATASET.GETOBJECT +ANYDATASET.GETRAW +ANYDATASET.GETREF +ANYDATASET.GETTIMESTAMP +ANYDATASET.GETTIMESTAMPLTZ +ANYDATASET.GETTIMESTAMPTZ +ANYDATASET.GETTYPE +ANYDATASET.GETTYPENAME +ANYDATASET.GETUROWID +ANYDATASET.GETVARCHAR +ANYDATASET.GETVARCHAR2 +ANYDATASET.PIECEWISE +ANYDATASET.SETBDOUBLE +ANYDATASET.SETBFILE +ANYDATASET.SETBFLOAT +ANYDATASET.SETBLOB +ANYDATASET.SETCHAR +ANYDATASET.SETCLOB +ANYDATASET.SETCOLLECTION +ANYDATASET.SETDATE +ANYDATASET.SETINTERVALDS +ANYDATASET.SETINTERVALYM +ANYDATASET.SETNCHAR +ANYDATASET.SETNCLOB +ANYDATASET.SETNUMBER +ANYDATASET.SETNVARCHAR2 +ANYDATASET.SETOBJECT +ANYDATASET.SETRAW +ANYDATASET.SETREF +ANYDATASET.SETTIMESTAMP +ANYDATASET.SETTIMESTAMPLTZ +ANYDATASET.SETTIMESTAMPTZ +ANYDATASET.SETUROWID +ANYDATASET.SETVARCHAR +ANYDATASET.SETVARCHAR2 +ANYDATA_TRANSFORMATION +ANYDATA_VALUE +ANYSCHEMA +ANYTYPE.ADDATTR +ANYTYPE.BEGINCREATE +ANYTYPE.ENDCREATE +ANYTYPE.GETATTRELEMINFO +ANYTYPE.GETINFO +ANYTYPE.GETPERSISTENT +ANYTYPE.SETINFO +ANY_CONTEXT +APEX$_ACL_T1. +APEX$_WS_FILES_T1. +APEX$_WS_LINKS_T1. +APEX$_WS_NOTES_T1. +APEX$_WS_ROWS_T1. +APEX$_WS_TAGS_T1. +APEX$_WS_WEBPG_SECTIONS_T1. +APEX. +APEXWS. +APEXWS.FOLDER +APEXWS.HOME +APEXWS.PAGE +APEXWS.ROW +APEXWS.SEARCH +APEXWS.SHEET +APEX_ADMIN. +APEX_APPLICATION_GET_PG_TNAME. +APEX_MIG_PROJECTS_UPDATE. +APEX_MIG_PROJECTS_UPDATE.UPD_MIG_REV_FORMS +APEX_MIG_PROJECTS_UPDATE.UPD_MIG_REV_REPORTS +APEX_UI_DEFAULT_UPDATE. +APEX_UI_DEFAULT_UPDATE.ADD_AD_COLUMN +APEX_UI_DEFAULT_UPDATE.ADD_AD_SYNONYM +APEX_UI_DEFAULT_UPDATE.DEL_AD_COLUMN +APEX_UI_DEFAULT_UPDATE.DEL_AD_SYNONYM +APEX_UI_DEFAULT_UPDATE.DEL_COLUMN +APEX_UI_DEFAULT_UPDATE.DEL_GROUP +APEX_UI_DEFAULT_UPDATE.DEL_TABLE +APEX_UI_DEFAULT_UPDATE.SYNCH_TABLE +APEX_UI_DEFAULT_UPDATE.UPD_AD_COLUMN +APEX_UI_DEFAULT_UPDATE.UPD_AD_SYNONYM +APEX_UI_DEFAULT_UPDATE.UPD_COLUMN +APEX_UI_DEFAULT_UPDATE.UPD_DISPLAY_IN_FORM +APEX_UI_DEFAULT_UPDATE.UPD_DISPLAY_IN_REPORT +APEX_UI_DEFAULT_UPDATE.UPD_FORM_REGION_TITLE +APEX_UI_DEFAULT_UPDATE.UPD_GROUP +APEX_UI_DEFAULT_UPDATE.UPD_ITEM_DISPLAY_HEIGHT +APEX_UI_DEFAULT_UPDATE.UPD_ITEM_DISPLAY_WIDTH +APEX_UI_DEFAULT_UPDATE.UPD_ITEM_FORMAT_MASK +APEX_UI_DEFAULT_UPDATE.UPD_ITEM_HELP +APEX_UI_DEFAULT_UPDATE.UPD_LABEL +APEX_UI_DEFAULT_UPDATE.UPD_REPORT_ALIGNMENT +APEX_UI_DEFAULT_UPDATE.UPD_REPORT_FORMAT_MASK +APEX_UI_DEFAULT_UPDATE.UPD_REPORT_REGION_TITLE +APEX_UI_DEFAULT_UPDATE.UPD_TABLE +APPEND +APPEND_VALUES +APPLICATION_CONTEXTS +APPLICATION_WAIT_TIME +APPLIED +APPLIED_HIGH_POSITION +APPLIED_LOW_POSITION +APPLIED_LOW_SCN +APPLIED_MESSAGE_CREATE_TIME +APPLIED_MESSAGE_NUMBER +APPLIED_SCN +APPLIED_SEQ# +APPLIED_SEQUENCE# +APPLIED_THREAD# +APPLIED_TIME +APPLY# +APPLY_BYTES_SENT +APPLY_CAPTURED +APPLY_CROSSEDITION_TRIGGER +APPLY_DATABASE_LINK +APPLY_DBLINK +APPLY_DONE +APPLY_MESSAGES_SENT +APPLY_NAME +APPLY_REASON +APPLY_SEQNO +APPLY_SERVER_ONLY +APPLY_STATUS +APPLY_TAG +APPLY_TIME +APPLY_USER +APPLY_VERSION +APP_IO_BYTES_AVG +APP_IO_BYTES_SUM +APP_IO_BYTES_SUMX2 +APP_IO_LATENCY_AVG +APP_IO_LATENCY_SUM +APP_IO_LATENCY_SUMX2 +APP_IO_REQUESTS_AVG +APP_IO_REQUESTS_SUM +APP_IO_REQUESTS_SUMX2 +APP_NAME +APS_VALIDATE. +APWAIT_DELTA +APWAIT_TOTAL +AQ$_GET_SUBSCRIBERS. +AQ$_JMS_BYTES_MESSAGE.CLEAN +AQ$_JMS_BYTES_MESSAGE.CLEAN_ALL +AQ$_JMS_BYTES_MESSAGE.CLEAR_BODY +AQ$_JMS_BYTES_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_BYTES_MESSAGE.CONSTRUCT +AQ$_JMS_BYTES_MESSAGE.FLUSH +AQ$_JMS_BYTES_MESSAGE.GET_APPID +AQ$_JMS_BYTES_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_BYTES +AQ$_JMS_BYTES_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_EXCEPTION +AQ$_JMS_BYTES_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_GROUPID +AQ$_JMS_BYTES_MESSAGE.GET_GROUPSEQ +AQ$_JMS_BYTES_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_MODE +AQ$_JMS_BYTES_MESSAGE.GET_REPLYTO +AQ$_JMS_BYTES_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_TYPE +AQ$_JMS_BYTES_MESSAGE.GET_USERID +AQ$_JMS_BYTES_MESSAGE.PREPARE +AQ$_JMS_BYTES_MESSAGE.READ_BOOLEAN +AQ$_JMS_BYTES_MESSAGE.READ_BYTE +AQ$_JMS_BYTES_MESSAGE.READ_BYTES +AQ$_JMS_BYTES_MESSAGE.READ_CHAR +AQ$_JMS_BYTES_MESSAGE.READ_DOUBLE +AQ$_JMS_BYTES_MESSAGE.READ_FLOAT +AQ$_JMS_BYTES_MESSAGE.READ_INT +AQ$_JMS_BYTES_MESSAGE.READ_LONG +AQ$_JMS_BYTES_MESSAGE.READ_SHORT +AQ$_JMS_BYTES_MESSAGE.READ_UNSIGNED_BYTE +AQ$_JMS_BYTES_MESSAGE.READ_UNSIGNED_SHORT +AQ$_JMS_BYTES_MESSAGE.READ_UTF +AQ$_JMS_BYTES_MESSAGE.RESET +AQ$_JMS_BYTES_MESSAGE.SET_APPID +AQ$_JMS_BYTES_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_BYTES +AQ$_JMS_BYTES_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_GROUPID +AQ$_JMS_BYTES_MESSAGE.SET_GROUPSEQ +AQ$_JMS_BYTES_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_REPLYTO +AQ$_JMS_BYTES_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_TYPE +AQ$_JMS_BYTES_MESSAGE.SET_USERID +AQ$_JMS_BYTES_MESSAGE.WRITE_BOOLEAN +AQ$_JMS_BYTES_MESSAGE.WRITE_BYTE +AQ$_JMS_BYTES_MESSAGE.WRITE_BYTES +AQ$_JMS_BYTES_MESSAGE.WRITE_CHAR +AQ$_JMS_BYTES_MESSAGE.WRITE_DOUBLE +AQ$_JMS_BYTES_MESSAGE.WRITE_FLOAT +AQ$_JMS_BYTES_MESSAGE.WRITE_INT +AQ$_JMS_BYTES_MESSAGE.WRITE_LONG +AQ$_JMS_BYTES_MESSAGE.WRITE_SHORT +AQ$_JMS_BYTES_MESSAGE.WRITE_UTF +AQ$_JMS_HEADER.CLEAR_PROPERTIES +AQ$_JMS_HEADER.GET_APPID +AQ$_JMS_HEADER.GET_BOOLEAN_PROPERTY +AQ$_JMS_HEADER.GET_BOOLEAN_PROPERTY_AS_INT +AQ$_JMS_HEADER.GET_BYTE_PROPERTY +AQ$_JMS_HEADER.GET_DOUBLE_PROPERTY +AQ$_JMS_HEADER.GET_FLOAT_PROPERTY +AQ$_JMS_HEADER.GET_GROUPID +AQ$_JMS_HEADER.GET_GROUPSEQ +AQ$_JMS_HEADER.GET_INT_PROPERTY +AQ$_JMS_HEADER.GET_LONG_PROPERTY +AQ$_JMS_HEADER.GET_REPLYTO +AQ$_JMS_HEADER.GET_SHORT_PROPERTY +AQ$_JMS_HEADER.GET_STRING_PROPERTY +AQ$_JMS_HEADER.GET_TYPE +AQ$_JMS_HEADER.GET_USERID +AQ$_JMS_HEADER.LOOKUP_PROPERTY_NAME +AQ$_JMS_HEADER.SET_APPID +AQ$_JMS_HEADER.SET_BOOLEAN_PROPERTY +AQ$_JMS_HEADER.SET_BYTE_PROPERTY +AQ$_JMS_HEADER.SET_DOUBLE_PROPERTY +AQ$_JMS_HEADER.SET_FLOAT_PROPERTY +AQ$_JMS_HEADER.SET_GROUPID +AQ$_JMS_HEADER.SET_GROUPSEQ +AQ$_JMS_HEADER.SET_INT_PROPERTY +AQ$_JMS_HEADER.SET_LONG_PROPERTY +AQ$_JMS_HEADER.SET_REPLYTO +AQ$_JMS_HEADER.SET_SHORT_PROPERTY +AQ$_JMS_HEADER.SET_STRING_PROPERTY +AQ$_JMS_HEADER.SET_TYPE +AQ$_JMS_HEADER.SET_USERID +AQ$_JMS_MAP_MESSAGE.CLEAN +AQ$_JMS_MAP_MESSAGE.CLEAN_ALL +AQ$_JMS_MAP_MESSAGE.CLEAR_BODY +AQ$_JMS_MAP_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_MAP_MESSAGE.CONSTRUCT +AQ$_JMS_MAP_MESSAGE.FLUSH +AQ$_JMS_MAP_MESSAGE.GET_APPID +AQ$_JMS_MAP_MESSAGE.GET_BOOLEAN +AQ$_JMS_MAP_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_BYTE +AQ$_JMS_MAP_MESSAGE.GET_BYTES +AQ$_JMS_MAP_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_CHAR +AQ$_JMS_MAP_MESSAGE.GET_DOUBLE +AQ$_JMS_MAP_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_EXCEPTION +AQ$_JMS_MAP_MESSAGE.GET_FLOAT +AQ$_JMS_MAP_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_GROUPID +AQ$_JMS_MAP_MESSAGE.GET_GROUPSEQ +AQ$_JMS_MAP_MESSAGE.GET_INT +AQ$_JMS_MAP_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_LONG +AQ$_JMS_MAP_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_NAMES +AQ$_JMS_MAP_MESSAGE.GET_OBJECT +AQ$_JMS_MAP_MESSAGE.GET_REPLYTO +AQ$_JMS_MAP_MESSAGE.GET_SHORT +AQ$_JMS_MAP_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_SIZE +AQ$_JMS_MAP_MESSAGE.GET_STRING +AQ$_JMS_MAP_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_TYPE +AQ$_JMS_MAP_MESSAGE.GET_USERID +AQ$_JMS_MAP_MESSAGE.ITEM_EXISTS +AQ$_JMS_MAP_MESSAGE.PREPARE +AQ$_JMS_MAP_MESSAGE.SET_APPID +AQ$_JMS_MAP_MESSAGE.SET_BOOLEAN +AQ$_JMS_MAP_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_BYTE +AQ$_JMS_MAP_MESSAGE.SET_BYTES +AQ$_JMS_MAP_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_CHAR +AQ$_JMS_MAP_MESSAGE.SET_DOUBLE +AQ$_JMS_MAP_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_FLOAT +AQ$_JMS_MAP_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_GROUPID +AQ$_JMS_MAP_MESSAGE.SET_GROUPSEQ +AQ$_JMS_MAP_MESSAGE.SET_INT +AQ$_JMS_MAP_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_LONG +AQ$_JMS_MAP_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_REPLYTO +AQ$_JMS_MAP_MESSAGE.SET_SHORT +AQ$_JMS_MAP_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_STRING +AQ$_JMS_MAP_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_TYPE +AQ$_JMS_MAP_MESSAGE.SET_USERID +AQ$_JMS_MESSAGE.CAST_TO_BYTES_MSG +AQ$_JMS_MESSAGE.CAST_TO_MAP_MSG +AQ$_JMS_MESSAGE.CAST_TO_OBJECT_MSG +AQ$_JMS_MESSAGE.CAST_TO_STREAM_MSG +AQ$_JMS_MESSAGE.CAST_TO_TEXT_MSG +AQ$_JMS_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_MESSAGE.CONSTRUCT +AQ$_JMS_MESSAGE.GET_APPID +AQ$_JMS_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_MESSAGE.GET_BYTES +AQ$_JMS_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_MESSAGE.GET_GROUPID +AQ$_JMS_MESSAGE.GET_GROUPSEQ +AQ$_JMS_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_MESSAGE.GET_REPLYTO +AQ$_JMS_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_MESSAGE.GET_TEXT +AQ$_JMS_MESSAGE.GET_TYPE +AQ$_JMS_MESSAGE.GET_USERID +AQ$_JMS_MESSAGE.SET_APPID +AQ$_JMS_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_MESSAGE.SET_BYTES +AQ$_JMS_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_MESSAGE.SET_GROUPID +AQ$_JMS_MESSAGE.SET_GROUPSEQ +AQ$_JMS_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_MESSAGE.SET_REPLYTO +AQ$_JMS_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_MESSAGE.SET_TEXT +AQ$_JMS_MESSAGE.SET_TYPE +AQ$_JMS_MESSAGE.SET_USERID +AQ$_JMS_STREAM_MESSAGE.CLEAN +AQ$_JMS_STREAM_MESSAGE.CLEAN_ALL +AQ$_JMS_STREAM_MESSAGE.CLEAR_BODY +AQ$_JMS_STREAM_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_STREAM_MESSAGE.CONSTRUCT +AQ$_JMS_STREAM_MESSAGE.FLUSH +AQ$_JMS_STREAM_MESSAGE.GET_APPID +AQ$_JMS_STREAM_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_EXCEPTION +AQ$_JMS_STREAM_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_GROUPID +AQ$_JMS_STREAM_MESSAGE.GET_GROUPSEQ +AQ$_JMS_STREAM_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_MODE +AQ$_JMS_STREAM_MESSAGE.GET_REPLYTO +AQ$_JMS_STREAM_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_TYPE +AQ$_JMS_STREAM_MESSAGE.GET_USERID +AQ$_JMS_STREAM_MESSAGE.PREPARE +AQ$_JMS_STREAM_MESSAGE.READ_BOOLEAN +AQ$_JMS_STREAM_MESSAGE.READ_BYTE +AQ$_JMS_STREAM_MESSAGE.READ_BYTES +AQ$_JMS_STREAM_MESSAGE.READ_CHAR +AQ$_JMS_STREAM_MESSAGE.READ_DOUBLE +AQ$_JMS_STREAM_MESSAGE.READ_FLOAT +AQ$_JMS_STREAM_MESSAGE.READ_INT +AQ$_JMS_STREAM_MESSAGE.READ_LONG +AQ$_JMS_STREAM_MESSAGE.READ_OBJECT +AQ$_JMS_STREAM_MESSAGE.READ_SHORT +AQ$_JMS_STREAM_MESSAGE.READ_STRING +AQ$_JMS_STREAM_MESSAGE.RESET +AQ$_JMS_STREAM_MESSAGE.SET_APPID +AQ$_JMS_STREAM_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_GROUPID +AQ$_JMS_STREAM_MESSAGE.SET_GROUPSEQ +AQ$_JMS_STREAM_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_REPLYTO +AQ$_JMS_STREAM_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_TYPE +AQ$_JMS_STREAM_MESSAGE.SET_USERID +AQ$_JMS_STREAM_MESSAGE.WRITE_BOOLEAN +AQ$_JMS_STREAM_MESSAGE.WRITE_BYTE +AQ$_JMS_STREAM_MESSAGE.WRITE_BYTES +AQ$_JMS_STREAM_MESSAGE.WRITE_CHAR +AQ$_JMS_STREAM_MESSAGE.WRITE_DOUBLE +AQ$_JMS_STREAM_MESSAGE.WRITE_FLOAT +AQ$_JMS_STREAM_MESSAGE.WRITE_INT +AQ$_JMS_STREAM_MESSAGE.WRITE_LONG +AQ$_JMS_STREAM_MESSAGE.WRITE_SHORT +AQ$_JMS_STREAM_MESSAGE.WRITE_STRING +AQ$_JMS_TEXT_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_TEXT_MESSAGE.CONSTRUCT +AQ$_JMS_TEXT_MESSAGE.GET_APPID +AQ$_JMS_TEXT_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_GROUPID +AQ$_JMS_TEXT_MESSAGE.GET_GROUPSEQ +AQ$_JMS_TEXT_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_REPLYTO +AQ$_JMS_TEXT_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_TEXT +AQ$_JMS_TEXT_MESSAGE.GET_TYPE +AQ$_JMS_TEXT_MESSAGE.GET_USERID +AQ$_JMS_TEXT_MESSAGE.SET_APPID +AQ$_JMS_TEXT_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_GROUPID +AQ$_JMS_TEXT_MESSAGE.SET_GROUPSEQ +AQ$_JMS_TEXT_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_REPLYTO +AQ$_JMS_TEXT_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_TEXT +AQ$_JMS_TEXT_MESSAGE.SET_TYPE +AQ$_JMS_TEXT_MESSAGE.SET_USERID +AQ$_REG_INFO.AQ$_REG_INFO +AQ_HA_NOTIFICATION +AQ_HA_NOTIFICATIONS +ARCHIVAL_THREAD# +ARCHIVED +ARCHIVED_SEQ# +ARCHIVED_THREAD# +ARCHIVELOG_CHANGE# +ARCHIVELOG_COMPRESSION +ARCHIVER +ARCHIVE_CHANGE# +ARCHIVE_NAME +ARCHIVE_TABLE_NAME +ARCHIVE_TIME +ARG1 +ARG2 +ARG3 +ARG4 +ARG5 +ARGNUM +ARGUMENTS +ARGUMENT_CLASS +ARGUMENT_NAME +ARGUMENT_POSITION +ARGUMENT_TYPE +ARRAY_DEPTH +ARRAY_DML +ARRAY_LEN +ARRAY_SIZE +ARRAY_TYPE_NAME +ARRAY_TYPE_SCHEMA +ASSEMBLE_LOBS +ASSEMBLY_NAME +ASSOCIATION +AST_EVENT0 +ASYNC +ASYNCH_IO +ASYNC_BLOCKS +AS_REPLAY. +AS_REPLAY.END_AS_REPLAY +AS_REPLAY.INITIALIZE_AS_REPLAY +AS_REPLAY.PREPARE_AS_REPLAY +AS_REPLAY.PROCESS_AS_CAPTURE +AS_REPLAY.START_AS_REPLAY +ATTACHED_SESSIONS +ATTACH_ID +ATTACH_MODE +ATTR1 +ATTR10 +ATTR11 +ATTR16 +ATTR17 +ATTR18 +ATTR2 +ATTR3 +ATTR4 +ATTR5 +ATTR6 +ATTR7 +ATTR8 +ATTR9 +ATTRB1_NAME +ATTRB1_VAL +ATTRB2_NAME +ATTRB2_VAL +ATTRB3_NAME +ATTRB3_VAL +ATTRB4_NAME +ATTRB4_VAL +ATTRB5_NAME +ATTRB5_VAL +ATTRIBUTE +ATTRIBUTES +ATTRIBUTE_DEFAULT_VALUE +ATTRIBUTE_EVENTS +ATTRIBUTE_EXPRESSION +ATTRIBUTE_GROUP_NAME +ATTRIBUTE_ID +ATTRIBUTE_INCARNATION +ATTRIBUTE_INDEX +ATTRIBUTE_NAME +ATTRIBUTE_ROLE +ATTRIBUTE_SPEC +ATTRIBUTE_TRANSFORMATION +ATTRIBUTE_TYPE +ATTRIBUTE_VALUE +ATTR_NAME +ATTR_NO +ATTR_TYPE_MOD +ATTR_TYPE_NAME +ATTR_TYPE_OWNER +ATTR_TYPE_PACKAGE +AUD +AUDIT_ACTIONS +AUDIT_CONDITION +AUDIT_OPTION +AUDIT_SESSIONID +AUDIT_TRAIL +AUDIT_TYPE +AUDSID +AUTHENTICATION +AUTHENTICATION_TYPE +AUTHID +AUTHORIZATION_CONSTRAINT +AUTH_CHECK_MISMATCH +AUTH_PRIVILEGES +AUTH_TIME +AUTOBACKUP_COUNT +AUTOBACKUP_DONE +AUTOEXTENSIBLE +AUTOPURGE +AUTOTASK_STATUS +AUTO_DROP +AUTO_FILTERED +AUTO_MERGE_THRESHOLD +AUTO_PARTITION +AUTO_REOPTIMIZE +AUTO_TASKID +AUTO_TXN_BUFFER_SIZE +AUX_COUNT +AUX_NAME +AVAILABLE_COMMITTED_TXN +AVAILABLE_DBTIME +AVAILABLE_MESSAGE_CREATE_TIME +AVAILABLE_MESSAGE_NUMBER +AVAILABLE_TIME +AVAILABLE_TXN +AVAILABLE_WORK_SIZE +AVEACTIVE +AVERAGE +AVERAGE_500B +AVERAGE_8K +AVERAGE_CONVERT_TIME +AVERAGE_MSG_AGE +AVERAGE_READ_TIME +AVERAGE_TRANSACTION_CPU_TIME +AVERAGE_TRANSACTION_TIME +AVERAGE_WAIT +AVERAGE_WAITER_COUNT +AVERAGE_WAIT_FG +AVERAGE_WRITE_TIME +AVESHRINK +AVGIOTIM +AVGREADTIME +AVGWRITETIME +AVG_ACTIVE_PARALLEL_SERVERS +AVG_ACTIVE_PARALLEL_STMTS +AVG_BLOCKS_PER_KEY +AVG_BUF_RATE +AVG_BYTE_PER_BUF +AVG_BYTE_RATE +AVG_CACHED_BLOCKS +AVG_CACHE_HIT_RATIO +AVG_CLT_BUF_RATE +AVG_CLT_BYTE_PER_BUF +AVG_CLT_BYTE_RATE +AVG_COL_LEN +AVG_CPU_TIME +AVG_CPU_UTILIZATION +AVG_DATA_BLOCKS_PER_KEY +AVG_DB_TIME +AVG_EVENTS_PER_LOOP +AVG_EVENT_RATE +AVG_FREE_SIZE +AVG_FTSTIME +AVG_HARD_PARSE_TIME +AVG_IN_CONNECT_RATE +AVG_LATENCY +AVG_LEAF_BLOCKS_PER_KEY +AVG_LOOKUPTIME +AVG_LOOP_RATE +AVG_MSG_AGE +AVG_MSG_RATE +AVG_NUMBER +AVG_OUT_CONNECT_RATE +AVG_QUEUED_PARALLEL_SERVERS +AVG_QUEUED_PARALLEL_STMTS +AVG_READTIME +AVG_RECONNECT_RATE +AVG_ROW_LEN +AVG_RUNNING_SESSIONS +AVG_SIZE +AVG_SPACE +AVG_SPACE_FREELIST_BLOCKS +AVG_SVR_BUF_RATE +AVG_SVR_BYTE_PER_BUF +AVG_SVR_BYTE_RATE +AVG_TIME +AVG_USED_SIZE +AVG_USERIO_TIME +AVG_WAITING_SESSIONS +AVG_WAIT_TIME +AVG_WRITETIME +AWR_BEGIN_SNAP +AWR_DBID +AWR_END_SNAP +AWR_EXPORTED +AWR_FLUSH_BYTES +AWR_FLUSH_COUNT +AWR_FLUSH_ELAPSED_TIME +AWR_FLUSH_EMERGENCY_COUNT +AW_DROP_PROC. +AW_DROP_TRG. +AW_NAME +AW_NUMBER +AW_REN_PROC. +AW_REN_TRG. +AW_TRUNC_PROC. +AW_TRUNC_TRG. +AW_VERSION +BACKEDOUT +BACKED_BY_OSB +BACKED_BY_PDB +BACKED_BY_VSS +BACKED_UP +BACKGROUND +BACKOUT_MODE +BACKOUT_SEQ +BACKOUT_SQL_ID +BACKUPFILENAME +BACKUP_COUNT +BACKUP_FUZZY +BACKUP_TYPE +BAD +BAD_COLUMN +BAD_ROWID +BAND_LENGTH +BAND_START_TIME +BANNER +BASELINE_ID +BASELINE_NAME +BASELINE_NAME_PREFIX +BASELINE_TYPE +BASEOBJ +BASE_CONFLICT_TYPE +BASE_NAME +BASE_OBJECT +BASE_OBJECT_TYPE +BASE_ONAME +BASE_PARTITION_NAME +BASE_PHYSICAL_READS +BASE_REFERENCE_NAME +BASE_SCHEMA_URL +BASE_SEQUENCE +BASE_SNAME +BASE_TABLE +BASE_TABLE_NAME +BASE_TABLE_OWNER +BASE_TARGET_NAMESPACE +BASE_TBLS_REFR_STATUS +BASE_TYPE +BASE_TYPE_NAME +BASE_TYPE_SCHEMA +BATCHID +BATCHING_COEFF +BATCH_TABLE_ACCESS_BY_ROWID +BATCH_XIDSLT +BATCH_XIDSQN +BATCH_XIDUSN +BEFORE_ROW +BEFORE_STATEMENT +BEGIN_DATE +BEGIN_INTERVAL_TIME +BEGIN_RESETLOGS_SCN +BEGIN_RESETLOGS_TIME +BEGIN_SCN +BEGIN_SNAP_ID +BEGIN_TIME +BENEFIT +BENEFIT_MAX +BENEFIT_SOFAR +BENEFIT_TYPE +BEQUEATH +BFILE +BFILE_STR +BIGFILE +BINARY +BINARY_ERRORS +BINARY_OUTPUT +BINDING +BINDING# +BINDS +BINDS_CAPTURED +BINDS_XML +BIND_AWARE +BIND_DATA +BIND_EQUIV_FAILURE +BIND_LENGTH_UPGRADEABLE +BIND_MEM_LOC +BIND_MISMATCH +BIND_NAME +BIND_PEEKED_PQ_MISMATCH +BIND_SET_HASH_VALUE +BIND_UACS_DIFF +BIND_VARS +BITMAP +BITMAP_AND +BITMAP_TREE +BITPOS +BITS_SET +BIU_WWV_FLOW_RT$APPROVALS. +BIU_WWV_FLOW_RT$APPROVAL_PRIVS. +BIU_WWV_FLOW_RT$CLIENTS. +BIU_WWV_FLOW_RT$CLIENT_PRIVS. +BIU_WWV_FLOW_RT$HANDLERS. +BIU_WWV_FLOW_RT$MODULES. +BIU_WWV_FLOW_RT$PARAMETERS. +BIU_WWV_FLOW_RT$PEND_APPROVALS. +BIU_WWV_FLOW_RT$PRIVILEGES. +BIU_WWV_FLOW_RT$PRIV_GROUPS. +BIU_WWV_FLOW_RT$TEMPLATES. +BIU_WWV_FLOW_RT$USER_SESSIONS. +BLEVEL +BLOCK +BLOCK# +BLOCK1_OFFSET +BLOCKED +BLOCKED_RES_NAME +BLOCKER +BLOCKER_CHAIN_ID +BLOCKER_INSTANCE +BLOCKER_INSTANCE_ID +BLOCKER_IS_VALID +BLOCKER_OSID +BLOCKER_PDB_ID +BLOCKER_PDB_NAME +BLOCKER_PID +BLOCKER_RES_NAME +BLOCKER_SERIAL# +BLOCKER_SESS_SERIAL# +BLOCKER_SID +BLOCKING_COMPONENT +BLOCKING_HANGCHAIN_INFO +BLOCKING_INSTANCE +BLOCKING_INST_ID +BLOCKING_OTHERS +BLOCKING_SESSION +BLOCKING_SESSION_SERIAL# +BLOCKING_SESSION_STATUS +BLOCKS +BLOCKSINMEM +BLOCKSIZE +BLOCKS_ALLOCATED +BLOCKS_CACHED +BLOCKS_COALESCED +BLOCKS_DECRYPTED +BLOCKS_ENCRYPTED +BLOCKS_FREE +BLOCKS_READ +BLOCKS_SKIPPED_IN_CELL +BLOCKS_USED +BLOCK_CHANGES +BLOCK_CNT +BLOCK_COMMENT +BLOCK_COUNT +BLOCK_GETS +BLOCK_ID +BLOCK_NUM +BLOCK_SIZE +BL_MOVED +BNO +BODY +BOTTLENECK_IDENTIFIED +BPID +BP_COPY# +BP_KEY +BP_PIECE# +BRANCH +BRANCHES +BRANCHID +BRANCH_SCN +BREAKS +BREAK_TRANS_TO_MASTERDEF +BREAK_TRANS_TO_NEW_MASTERS +BROKEN +BROWSED_MSGS +BSLN. +BSLN.ACTIVATE_BASELINE +BSLN.BASELINE_GUID +BSLN.COMPUTE_ALL_STATISTICS +BSLN.COMPUTE_STATISTICS +BSLN.CREATE_BASELINE_STATIC +BSLN.DATASOURCE_GUID +BSLN.DATA_AND_MODEL_OK +BSLN.DEACTIVATE_BASELINE +BSLN.DELETE_BSLN_JOBS +BSLN.DEREGISTER_DATASOURCE +BSLN.DISABLE +BSLN.DROP_BASELINE +BSLN.ENABLE +BSLN.IS_ENABLED +BSLN.METRIC_SIGNAL_QUALITIES +BSLN.METRIC_UID +BSLN.MOVING_WINDOW_BASELINE_GUID +BSLN.REGISTER_DATASOURCE +BSLN.SET_ALL_THRESHOLDS +BSLN.SET_DEFAULT_TIMEGROUPING +BSLN.SET_THRESHOLD_PARAMETERS +BSLN.SUBINTERVAL_CODE +BSLN.TARGET_UID +BSLN.THIS_TARGET_UID +BSLN.TIMEGROUP +BSLN.UNSET_THRESHOLD_PARAMETERS +BSLN.UPDATE_MOVING_WINDOW +BSLN_INTERNAL. +BSLN_INTERNAL.ALLOW_DROP +BSLN_INTERNAL.BASELINE_REC +BSLN_INTERNAL.COMPUTE_LOAD_MAS +BSLN_INTERNAL.COMPUTE_LOAD_MES_TG +BSLN_INTERNAL.COMPUTE_LOAD_MES_XX +BSLN_INTERNAL.COMPUTE_STATISTICS +BSLN_INTERNAL.DEDUCED_TIMEGROUPING +BSLN_INTERNAL.DEDUCE_TIMEGROUPINGS +BSLN_INTERNAL.DELETE_BSLN_JOBS +BSLN_INTERNAL.ELECTED_TIMEGROUPING +BSLN_INTERNAL.HOUR_OF_WEEK +BSLN_INTERNAL.IN_EFFECT_THRESHOLD_REC +BSLN_INTERNAL.LOAD_DAY_OFFSETS +BSLN_INTERNAL.MAINTAIN_STATISTICS +BSLN_INTERNAL.MAINTAIN_THRESHOLDS +BSLN_INTERNAL.MES_TG +BSLN_INTERNAL.MES_XX +BSLN_INTERNAL.METRIC_SIGNAL_QUALITIES +BSLN_INTERNAL.N_FIELD +BSLN_INTERNAL.SET_ALL_THRESHOLDS +BSLN_INTERNAL.SET_BASELINE_METRIC_THRESHOLD +BSLN_INTERNAL.SET_LAST_COMPUTE_DATE +BSLN_INTERNAL.SIGNAL_QUALITY_SCORE +BSLN_INTERNAL.STD7 +BSLN_INTERNAL.THIS_DBID +BSLN_INTERNAL.THIS_INSTANCE_NAME +BSLN_INTERNAL.THRESHOLD_REC +BSLN_INTERNAL.UNSET_ALL_THRESHOLDS +BSLN_INTERNAL.UNSET_THRESHOLD +BSLN_INTERNAL.W_FIELD +BS_BYTES +BS_COMPLETION_TIME +BS_COMPRESSED +BS_COPIES +BS_COUNT +BS_DEVICE_TYPE +BS_INCR_TYPE +BS_KEY +BS_PIECES +BS_STAMP +BS_STATUS +BS_TAG +BS_TYPE +BTYPE +BTYPE_KEY +BT_CACHE_ALLOC +BT_CACHE_TARGET +BUCKET +BUCKET_ID +BUCKET_NO +BUCKET_NUMBER +BUFFER +BUFFERED_DML_MISMATCH +BUFFERS +BUFFERS_FOR_ESTIMATE +BUFFER_BUSY_WAIT +BUFFER_BUSY_WAITS_DELTA +BUFFER_BUSY_WAITS_TOTAL +BUFFER_COUNT +BUFFER_GETS +BUFFER_GETS_DELTA +BUFFER_GETS_TOTAL +BUFFER_POOL +BUFFER_SIZE +BUF_ADDRESS +BUF_FLAG +BUF_GOT +BUF_LENGTH +BUGNO +BUG_ID +BUG_NUMBER +BUILDER_WORK_SIZE +BUILD_DURATION +BUILD_MODE +BUILD_PROCESS +BUILD_PROCESS_ID +BUILD_PROCESS_NAME +BUILD_TIME +BUNDLE_DATA +BUNDLE_ID +BUNDLE_SERIES +BUSY +BUSY_TIME_CUR +BUSY_TIME_TOTAL +BYPASS_RECURSIVE_CHECK +BYPASS_UJVC +BYTES +BYTES_CACHED +BYTES_COALESCED +BYTES_FREE +BYTES_NOT_POPULATED +BYTES_OF_REDO_MINED +BYTES_PROCESSED +BYTES_READ +BYTES_RECEIVED +BYTES_REDO_MINED +BYTES_SENT +BYTES_USED +BYTES_WRITTEN +CACHE +CACHE# +CACHED_IN_MEM +CACHED_OBJECTS +CACHEHINT +CACHE_CB +CACHE_CNT +CACHE_FLUSHES +CACHE_ID +CACHE_KEY +CACHE_LOBS +CACHE_NAME +CACHE_REFRESHES +CACHE_SHRINKS +CACHE_SIZE +CACHE_TEMP_TABLE +CACHE_WRITES +CALIBRATION_TIME +CALIBRATION_VALUE +CALLBACK +CALLOUT +CALLSPERSEC +CALLS_ENQUEUED +CALL_COUNTER +CALL_ID +CANDIDATE +CAN_PURGE +CAN_UNDROP +CAN_USE_LOG +CAPTURE +CAPTURE# +CAPTURED +CAPTURED_SCN +CAPTURED_VALUES +CAPTURE_BYTES_RECEIVED +CAPTURE_CONN +CAPTURE_DIR +CAPTURE_DIRECTORY +CAPTURE_ENABLED +CAPTURE_ERROR +CAPTURE_FILE_ID +CAPTURE_FORMAT +CAPTURE_ID +CAPTURE_LOCATOR +CAPTURE_MESSAGE_CREATE_TIME +CAPTURE_MESSAGE_NUMBER +CAPTURE_MODE +CAPTURE_NAME +CAPTURE_OVERHEAD +CAPTURE_QUEUE_NAME +CAPTURE_QUEUE_TABLE_NAME +CAPTURE_SCOPE +CAPTURE_SIZE +CAPTURE_STREAM_ID +CAPTURE_TIME +CAPTURE_TYPE +CAPTURE_USER +CAPTURE_VALUES +CARDINALITY +CARTRIDGE. +CARTRIDGE.CHECK_COMPONENT_STATUS +CARTRIDGE.CHECK_JAVA_STATUS +CARTRIDGE.CLEAR_CARTRIDGE_COMPONENTS +CARTRIDGE.DBMS_FEATURE_DICOM +CARTRIDGE.DBMS_FEATURE_MULTIMEDIA +CAT +CATALOG_TYP.CATEGORY_DESCRIBE +CATALOG_TYP.GETCATALOGNAME +CATEGORY +CATEGORY_TYP.CATEGORY_DESCRIBE +CATINDEXMETHODS.ODCIGETINTERFACES +CATINDEXMETHODS.ODCIINDEXALTER +CATINDEXMETHODS.ODCIINDEXCLOSE +CATINDEXMETHODS.ODCIINDEXCREATE +CATINDEXMETHODS.ODCIINDEXDELETE +CATINDEXMETHODS.ODCIINDEXDROP +CATINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +CATINDEXMETHODS.ODCIINDEXFETCH +CATINDEXMETHODS.ODCIINDEXGETMETADATA +CATINDEXMETHODS.ODCIINDEXINSERT +CATINDEXMETHODS.ODCIINDEXMERGEPARTITION +CATINDEXMETHODS.ODCIINDEXSPLITPARTITION +CATINDEXMETHODS.ODCIINDEXSTART +CATINDEXMETHODS.ODCIINDEXTRUNCATE +CATINDEXMETHODS.ODCIINDEXUPDATE +CATINDEXMETHODS.ODCIINDEXUTILCLEANUP +CATINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +CAT_ROLLBACK_TRIGGER. +CBR +CBR_FORCED_WRITE +CCLASS_NAME +CCWAIT_DELTA +CCWAIT_TOTAL +CDB +CDBVIEW. +CDBVIEW.CREATE_CDBVIEW +CDC_ALTER_CTABLE_BEFORE. +CDC_CREATE_CTABLE_AFTER. +CDC_CREATE_CTABLE_BEFORE. +CDC_DROP_CTABLE_BEFORE. +CDR_DELETE_ROW_EXISTS +CDR_DELETE_ROW_MISSING +CDR_FAILED +CDR_FAILED_RESOLUTIONS +CDR_INSERT_ROW_EXISTS +CDR_SUCCESSFUL +CDR_SUCCESSFUL_RESOLUTIONS +CDR_UPDATE_ROW_EXISTS +CDR_UPDATE_ROW_MISSING +CELLHASH +CELLNAME +CELL_ALERT_SUMMARY +CELL_FLASH_CACHE +CELL_HASH +CELL_HASHVAL +CELL_NAME +CELL_PATH +CELL_TYPE +CELL_UNCOMPRESSED_BYTES_DELTA +CELL_UNCOMPRESSED_BYTES_TOTAL +CERT_ID +CFG_ID +CHAIN_CNT +CHAIN_ID +CHAIN_IS_CYCLE +CHAIN_NAME +CHAIN_OWNER +CHAIN_ROW_EXCESS_DELTA +CHAIN_ROW_EXCESS_TOTAL +CHAIN_SIGNATURE +CHAIN_SIGNATURE_HASH +CHANGE# +CHANGELAG +CHANGESCN_BASE +CHANGESCN_WRAP +CHANGE_DUPKEY_ERROR_INDEX +CHANGE_PROPAGATIONS +CHANGE_PROPAGATION_SETS +CHANGE_SETS +CHANGE_SET_NAME +CHANGE_SET_PUBLISHER +CHANGE_SOURCES +CHANGE_SOURCE_NAME +CHANGE_TABLES +CHANGE_TABLE_NAME +CHANGE_TABLE_OWNER +CHANGE_TABLE_SCHEMA +CHANNEL +CHARACTER_SET_NAME +CHARACTER_SID +CHAR_COL_DECL_LENGTH +CHAR_LENGTH +CHAR_USED +CHAR_VALUE +CHECKPOINT_CHANGE# +CHECKPOINT_COUNT +CHECKPOINT_INTERVAL +CHECKPOINT_RETENTION_TIME +CHECKPOINT_SCN +CHECKPOINT_TIME +CHECKSUM +CHECK_ACL_REWRITE +CHECK_FULL_DVAUTH. +CHECK_ID +CHECK_NAME +CHECK_TAB_DVAUTH. +CHECK_TS_DVAUTH. +CHECK_UPGRADE. +CHILD# +CHILD_ADDR +CHILD_ADDRESS +CHILD_COUNT +CHILD_HANDLE +CHILD_IDX +CHILD_JOIN_COLUMN +CHILD_JOIN_OWNER +CHILD_JOIN_TABLE +CHILD_LATCH +CHILD_LEVEL_NAME +CHILD_LOCK +CHILD_NUMBER +CHILD_PIN +CHK_OPTION +CHK_SDO_DIMNAME. +CHNF$_REG_INFO.CHNF$_REG_INFO +CHOOSE +CHUNK +CHUNK# +CHUNKS +CHUNK_ADDRESS +CHUNK_COM +CHUNK_ID +CHUNK_PTR +CHUNK_SIZE +CHUNK_TYPE +CH_ID +CIRCUIT +CKPT_BLOCK_WRITES +CLASS +CLASS# +CLASSIFICATION +CLASS_INDEX +CLASS_NAME +CLB_GOAL +CLEANDC +CLEANUP_ATTEMPTS +CLEANUP_LATENCY +CLEANUP_TIME +CLIENT +CLIENT# +CLIENTADDR +CLIENTID +CLIENTIDENTIFIER +CLIENTOPAQUEIDENTIFIER +CLIENTPORT +CLIENT_CHARSET +CLIENT_CONNECTION +CLIENT_DBID +CLIENT_DRIVER +CLIENT_HOST +CLIENT_ID +CLIENT_IDENTIFIER +CLIENT_INFO +CLIENT_IP_ADDRESS. +CLIENT_LOBATTR +CLIENT_NAME +CLIENT_OCI_LIBRARY +CLIENT_OS_USER +CLIENT_PID +CLIENT_PROCESS +CLIENT_PROGRAM_NAME +CLIENT_REGID +CLIENT_REQ_TIMEOUTS +CLIENT_RESULT_CACHE_STATS$ +CLIENT_STATUS +CLIENT_TAG +CLIENT_TYPE +CLIENT_VERSION +CLOCK +CLONED_CAPTURE_NAME +CLONED_CAPTURE_STATUS +CLONED_FROM_PDB_DBID +CLONED_FROM_PDB_GUID +CLONED_FROM_PDB_NAME +CLONED_QUEUE_NAME +CLONED_QUEUE_OWNER +CLONED_STREAMS_NAME +CLONED_XSTREAM_NAME +CLONEFILENAME +CLONETAG +CLOSE_REASON +CLOSE_TIME +CLSID +CLSNAME +CLSNAME_ID +CLSOID +CLS_NAME +CLU +CLUSTER +CLUSTERING +CLUSTERING_FACTOR +CLUSTERING_TYPE +CLUSTERNAME +CLUSTER_BY_ROWID +CLUSTER_ID +CLUSTER_NAME +CLUSTER_OWNER +CLUSTER_TYPE +CLUSTER_WAIT_TIME +CLU_COLUMN_NAME +CLWAIT_DELTA +CLWAIT_TOTAL +CMD_RULE_NAME +CMON_ADDR +CNAME +CNT_500B +CNT_8K +CNUM_MSGS +CNUM_REPL +CNUM_SET +CNUM_WRITE +COALESCE_SQ +CODE_COVERAGE. +CODE_SIZE +COL +COLD_BYTES_READ +COLD_BYTES_WRITTEN +COLD_READS +COLD_USED_MB +COLD_WRITES +COLL_TYPE +COLS +COLUMN_COUNT +COLUMN_EXPRESSION +COLUMN_FUNCTION +COLUMN_ID +COLUMN_LENGTH +COLUMN_LIST +COLUMN_NAME +COLUMN_NUMBER +COLUMN_OPTION +COLUMN_POSITION +COLUMN_PRIVILEGES +COLUMN_STATS +COLUMN_TYPE +COLUMN_USAGE +COLUMN_VALUE +COL_NAME +COM +COMMAND +COMMAND_ID +COMMAND_LINE +COMMAND_NAME +COMMAND_TYPE +COMMENT$TEXT +COMMENTS +COMMENTS$ +COMMENT_TEXT +COMMIT# +COMMITSCN +COMMITTED_DATA_ONLY +COMMIT_JTIME +COMMIT_OUTCOME +COMMIT_POINT_STRENGTH +COMMIT_POSITION +COMMIT_SCN +COMMIT_SCN_BASED +COMMIT_TIME +COMMIT_TIMESTAMP +COMMIT_WAIT_SCN +COMMIT_WTIME +COMMON +COMP +COMP1_NAME +COMP1_VAL +COMP2_NAME +COMP2_VAL +COMP3_NAME +COMP3_VAL +COMP4_NAME +COMP4_VAL +COMP5_NAME +COMP5_VAL +COMPARE_OLD_ON_DELETE +COMPARE_OLD_ON_UPDATE +COMPARISON_MODE +COMPARISON_NAME +COMPATIBILITY +COMPATIBLE +COMPATIBLE_VERSION +COMPENSATING_TXN_NAME +COMPENSATING_XID +COMPID +COMPILATION_ORIGIN +COMPILE_STATE +COMPLETED +COMPLETED_ACTIONS +COMPLETION_TIME +COMPLEX_TYPE +COMPLEX_TYPE_NAME +COMPONENT +COMPONENT_CHANGED_TIME +COMPONENT_DB +COMPONENT_ID +COMPONENT_NAME +COMPONENT_RULE_TYPE +COMPONENT_TYPE +COMPOSITE +COMPOSITE_CATEGORY_TYP.CATEGORY_DESCRIBE +COMPOSITE_TARGET_GUID +COMPOSITE_TARGET_NAME +COMPOSITE_TARGET_TYPE +COMPOUND_INDEX +COMPRESSED +COMPRESSION +COMPRESSION_LEVEL +COMPRESSION_NUMBER +COMPRESSION_RATIO +COMPRESS_FOR +COMP_ID +COMP_NAME +CONCUR +CONCURRENCY_WAIT_TIME +CONDITION +CONDITIONS_PROCESSED +CONDITION_DAYS +CONDITION_EVAL_OPT +CONDITION_TYPE +CONF# +CONFIGURE_DV. +CONFIGURE_OLS. +CONFIRMED +CONFLICT_HANDLER_NAME +CONFLICT_MOD +CONFLICT_TYPE +CONFTYPE +CONFVAL +CONFVAL_HASH +CONF_INDX +CONNECTIONS +CONNECTION_ADDR +CONNECTION_MODE +CONNECTION_POOL +CONNECTION_STATUS +CONNECTS +CONNECTS_TOTAL +CONNECT_BY_CB_WHR_ONLY +CONNECT_BY_COMBINE_SW +CONNECT_BY_COST_BASED +CONNECT_BY_ELIM_DUPS +CONNECT_BY_FILTERING +CONNECT_CREDENTIAL_NAME +CONNECT_CREDENTIAL_OWNER +CONNECT_IDENTIFIER +CONNECT_INFO +CONNECT_STRING +CONNECT_TIME +CONNECT_TIME_SCALE +CONNECT_USER +CONN_ID +CONSECUTIVE_OCCURRENCES +CONSISTENT_CHANGES +CONSISTENT_GETS +CONSISTENT_SOLVE_SPEC +CONSTRAINT_NAME +CONSTRAINT_TYPE +CONSUMED_CPU_TIME +CONSUMED_SCN +CONSUMER_GROUP +CONSUMER_GROUP_ID +CONSUMER_GROUP_NAME +CONSUMER_NAME +CONS_RID +CONS_RSCN +CONS_SCN +CONS_TYPE_NAME +CONS_TYPE_ONLY +CONS_TYPE_OWNER +CONTAINER_COLUMN +CONTAINER_DATA +CONTAINER_GUID +CONTAINER_NAME +CONTAINER_OWNER +CONTAINS_PLSQL +CONTAINS_VIEWS +CONTENTS +CONTENTSCHEMAIS. +CONTEXT +CONTEXT_ID +CONTEXT_SIZE +CONTEXT_TYPE +CONTROL +CONTROLFILE_CHANGE# +CONTROLFILE_CONVERTED +CONTROLFILE_CREATED +CONTROLFILE_INCLUDED +CONTROLFILE_SEQUENCE# +CONTROLFILE_TIME +CONTROLFILE_TYPE +CONVERTED_FILE +CONVERT_COUNT +CONVERT_OPT_DUBVALUE +CONVERT_OPT_EXPRESS +CONVERT_OPT_GETVALUE +CONVERT_OPT_NODEADLOCKBLOCK +CONVERT_OPT_NODEADLOCKWAIT +CONVERT_OPT_NOQUEUE +CONVERT_OPT_NOVALUE +CONVERT_OPT_PUTVALUE +CONVERT_TYPE +CON_DBID +CON_ID +CON_NAME +CON_UID +COOKIE +COORDINATOR_ID +COORDINATOR_INSTANCE +COORDINATOR_INSTANCE_ID +COORDINATOR_PID +COORD_INSTANCE_ID +COORD_LWM_LAG +COORD_SESSION_ID +COORD_TOTAL_APPLIED +COORD_TOTAL_RECEIVED +COORD_TOTAL_ROLLBACKS +COORD_TOTAL_WAIT_CMTS +COORD_TOTAL_WAIT_DEPS +COPY# +COPY_KEY +COPY_RECID +COPY_STAMP +CORRELATED_ID +CORRELATION_LEVEL +CORRUPT +CORRUPTION_CHANGE# +CORRUPTION_TYPE +CORRUPT_XID +COST +COST_XML_QUERY_REWRITE +COUNT +COUNTER +COUNT_500B +COUNT_8K +COUNT_ROWS +COUPLING +CPU +CPUPERCALL +CPUPERREQUEST +CPUTIME +CPUWAITPERREQUEST +CPU_CAPABLE +CPU_CONSUMED_TIME +CPU_CORE_COUNT +CPU_CORE_COUNT_CURRENT +CPU_CORE_COUNT_HIGHWATER +CPU_COST +CPU_COSTING +CPU_COUNT +CPU_COUNT_CURRENT +CPU_COUNT_HIGHWATER +CPU_DECISIONS +CPU_DECISIONS_EXCLUSIVE +CPU_DECISIONS_WON +CPU_MANAGED +CPU_METHOD +CPU_P1 +CPU_P2 +CPU_P3 +CPU_P4 +CPU_P5 +CPU_P6 +CPU_P7 +CPU_P8 +CPU_SECS_CUR +CPU_SECS_TOTAL +CPU_SOCKET_COUNT +CPU_SOCKET_COUNT_CURRENT +CPU_SOCKET_COUNT_HIGHWATER +CPU_TIME +CPU_TIME_DELTA +CPU_TIME_TOTAL +CPU_USAGE_AVG +CPU_USAGE_SUM +CPU_USAGE_SUMX2 +CPU_USED +CPU_UTILIZATION_LIMIT +CPU_WAITS +CPU_WAIT_TIME +CQ_TOTALQ +CQ_WAIT +CRE +CREATED +CREATED_BY +CREATED_SCN +CREATETIME +CREATE_BYTES +CREATE_DATE +CREATE_INDEX +CREATE_OR_FETCH_ILABEL. +CREATE_SCN +CREATE_TIME +CREATIONTIME +CREATION_CHANGE# +CREATION_DATE +CREATION_DATE_HASH +CREATION_SCN +CREATION_TIME +CREATION_TIMESTAMP +CREATOR +CREATOR_ADDR +CREATOR_DBID +CREATOR_DBNAME +CREATOR_ID +CREATOR_INSTANCE_NAME +CREATOR_INSTANCE_NUMBER +CREATOR_INSTANCE_SERIAL +CREATOR_PDBGUID +CREATOR_PDBID +CREATOR_PDBNAME +CREATOR_PDBUID +CREATOR_SERIAL# +CREATOR_UID +CREDENTIAL_NAME +CREDENTIAL_OWNER +CRITICAL_FACTOR +CRITICAL_INCIDENTS +CRITICAL_INICDENTS +CRITICAL_OPERATOR +CRITICAL_VALUE +CRMODE +CROSSEDITION +CROSSEDITION_TRIGGER_MISMATCH +CRSRUN +CRSTOTAL +CRT_SCN +CRT_TIME +CR_2HOP +CR_2HOP_TIME +CR_3HOP +CR_3HOP_TIME +CR_BLOCK +CR_BLOCK_TIME +CR_BUFFER_GETS +CR_BUSY +CR_BUSY_TIME +CR_CHANGE +CR_CONGESTED +CR_CONGESTED_TIME +CR_GET +CR_OPERATIONS +CR_REQUESTS +CR_TRANSFER +CR_TRANSFERS +CSCN +CSF +CSPILL_MSGS +CS_SRS_TRIGGER. +CTIME +CTMHASH +CTX_ADM. +CTX_ADM.DROP_USER_OBJECTS +CTX_ADM.MARK_FAILED +CTX_ADM.RECOVER +CTX_ADM.RESET_AUTO_OPTIMIZE_STATUS +CTX_ADM.SET_PARAMETER +CTX_ADM.SHUTDOWN +CTX_ADM.STOP_OPTIMIZE +CTX_ADM.TEST_EXTPROC +CTX_ANL. +CTX_ANL.ADD_DICTIONARY +CTX_ANL.DROP_DICTIONARY +CTX_CATSEARCH. +CTX_CATSEARCH.CATSEARCH +CTX_CLS. +CTX_CLS.CLUSTERING +CTX_CLS.TRAIN +CTX_CONTAINS. +CTX_CONTAINS.TEXTCONTAINS +CTX_DDL. +CTX_DDL.ADD_ATTR_SECTION +CTX_DDL.ADD_AUTO_OPTIMIZE +CTX_DDL.ADD_FIELD_SECTION +CTX_DDL.ADD_INDEX +CTX_DDL.ADD_MDATA +CTX_DDL.ADD_MDATA_COLUMN +CTX_DDL.ADD_MDATA_SECTION +CTX_DDL.ADD_MVDATA_SECTION +CTX_DDL.ADD_NDATA_SECTION +CTX_DDL.ADD_SDATA +CTX_DDL.ADD_SDATA_COLUMN +CTX_DDL.ADD_SDATA_SECTION +CTX_DDL.ADD_SEC_GRP_ATTR_VAL +CTX_DDL.ADD_SPECIAL_SECTION +CTX_DDL.ADD_STOPCLASS +CTX_DDL.ADD_STOPTHEME +CTX_DDL.ADD_STOPWORD +CTX_DDL.ADD_STOP_SECTION +CTX_DDL.ADD_SUB_LEXER +CTX_DDL.ADD_ZONE_SECTION +CTX_DDL.ALTER_INDEX +CTX_DDL.COPY_POLICY +CTX_DDL.CREATE_INDEX_SET +CTX_DDL.CREATE_POLICY +CTX_DDL.CREATE_PREFERENCE +CTX_DDL.CREATE_SECTION_GROUP +CTX_DDL.CREATE_SHADOW_INDEX +CTX_DDL.CREATE_STOPLIST +CTX_DDL.DELETE_MVDATA_VALUES +CTX_DDL.DROP_INDEX_SET +CTX_DDL.DROP_POLICY +CTX_DDL.DROP_PREFERENCE +CTX_DDL.DROP_SECTION_GROUP +CTX_DDL.DROP_SHADOW_INDEX +CTX_DDL.DROP_STOPLIST +CTX_DDL.EXCHANGE_SHADOW_INDEX +CTX_DDL.INSERT_MVDATA_VALUES +CTX_DDL.OPTIMIZE_INDEX +CTX_DDL.POPULATE_PENDING +CTX_DDL.RECREATE_INDEX_ONLINE +CTX_DDL.REMOVE_AUTO_OPTIMIZE +CTX_DDL.REMOVE_INDEX +CTX_DDL.REMOVE_MDATA +CTX_DDL.REMOVE_SDATA +CTX_DDL.REMOVE_SECTION +CTX_DDL.REMOVE_STOPCLASS +CTX_DDL.REMOVE_STOPTHEME +CTX_DDL.REMOVE_STOPWORD +CTX_DDL.REMOVE_SUB_LEXER +CTX_DDL.REM_SEC_GRP_ATTR_VAL +CTX_DDL.REPLACE_INDEX_METADATA +CTX_DDL.REPOPULATE_DOLLARN +CTX_DDL.SET_ATTRIBUTE +CTX_DDL.SET_SECTION_ATTRIBUTE +CTX_DDL.SET_SEC_GRP_ATTR +CTX_DDL.SPLIT_DOLLARI +CTX_DDL.SPLIT_ZONE_TOKENS +CTX_DDL.SYNC_INDEX +CTX_DDL.UNSET_ATTRIBUTE +CTX_DDL.UNSET_SECTION_ATTRIBUTE +CTX_DDL.UNSET_SEC_GRP_ATTR +CTX_DDL.UPDATE_MVDATA_SET +CTX_DDL.UPDATE_POLICY +CTX_DDL.UPDATE_SDATA +CTX_DDL.UPDATE_SUB_LEXER +CTX_DDL.ZONE_TO_FIELD +CTX_DOC. +CTX_DOC.FILTER +CTX_DOC.GET_KEY_TYPE +CTX_DOC.GIST +CTX_DOC.HIGHLIGHT +CTX_DOC.HIGHLIGHT_CLOB_QUERY +CTX_DOC.IFILTER +CTX_DOC.MARKUP +CTX_DOC.MARKUP_CLOB_QUERY +CTX_DOC.PKENCODE +CTX_DOC.POLICY_FILTER +CTX_DOC.POLICY_GIST +CTX_DOC.POLICY_HIGHLIGHT +CTX_DOC.POLICY_HIGHLIGHT_CLOB_QUERY +CTX_DOC.POLICY_LANGUAGES +CTX_DOC.POLICY_MARKUP +CTX_DOC.POLICY_MARKUP_CLOB_QUERY +CTX_DOC.POLICY_NOUN_PHRASES +CTX_DOC.POLICY_PART_OF_SPEECH +CTX_DOC.POLICY_SNIPPET +CTX_DOC.POLICY_SNIPPET_CLOB_QUERY +CTX_DOC.POLICY_STEMS +CTX_DOC.POLICY_THEMES +CTX_DOC.POLICY_TOKENS +CTX_DOC.SET_KEY_TYPE +CTX_DOC.SNIPPET +CTX_DOC.SNIPPET_CLOB_QUERY +CTX_DOC.THEMES +CTX_DOC.TOKENS +CTX_ENTITY. +CTX_ENTITY.ADD_EXTRACT_RULE +CTX_ENTITY.ADD_STOP_ENTITY +CTX_ENTITY.COMPILE +CTX_ENTITY.CREATE_EXTRACT_POLICY +CTX_ENTITY.DROP_EXTRACT_POLICY +CTX_ENTITY.EXTRACT +CTX_ENTITY.REMOVE_EXTRACT_RULE +CTX_ENTITY.REMOVE_STOP_ENTITY +CTX_FEEDBACK_ITEM_TYPE.RANK +CTX_MATCHES. +CTX_MATCHES.MATCHES +CTX_OUTPUT. +CTX_OUTPUT.ADD_EVENT +CTX_OUTPUT.ADD_TRACE +CTX_OUTPUT.DISABLE_QUERY_STATS +CTX_OUTPUT.DUMPEDERRORS +CTX_OUTPUT.ENABLE_QUERY_STATS +CTX_OUTPUT.END_LOG +CTX_OUTPUT.END_QUERY_LOG +CTX_OUTPUT.GET_TRACE_VALUE +CTX_OUTPUT.LOGFILENAME +CTX_OUTPUT.LOGFILEOVERWRITE +CTX_OUTPUT.LOGGING +CTX_OUTPUT.LOG_TRACES +CTX_OUTPUT.REMOVE_EVENT +CTX_OUTPUT.REMOVE_TRACE +CTX_OUTPUT.RESET_TRACE +CTX_OUTPUT.START_LOG +CTX_OUTPUT.START_QUERY_LOG +CTX_QUERY. +CTX_QUERY.BROWSE_WORDS +CTX_QUERY.CHK_TXNQRY_DISBL_SWITCH +CTX_QUERY.CHK_XPATH +CTX_QUERY.COUNT_HITS +CTX_QUERY.COUNT_HITS_CLOB_QUERY +CTX_QUERY.EXPLAIN +CTX_QUERY.EXPLAIN_CLOB_QUERY +CTX_QUERY.FCONTAINS +CTX_QUERY.HFEEDBACK +CTX_QUERY.HFEEDBACK_CLOB_QUERY +CTX_QUERY.REMOVE_SQE +CTX_QUERY.RESULT_SET +CTX_QUERY.RESULT_SET_CLOB_QUERY +CTX_QUERY.STORE_SQE +CTX_QUERY.STORE_SQE_CLOB_QUERY +CTX_REPORT. +CTX_REPORT.CREATE_INDEX_SCRIPT +CTX_REPORT.CREATE_POLICY_SCRIPT +CTX_REPORT.DESCRIBE_INDEX +CTX_REPORT.DESCRIBE_POLICY +CTX_REPORT.INDEX_SIZE +CTX_REPORT.INDEX_STATS +CTX_REPORT.OFFSET_INFO +CTX_REPORT.QUERY_LOG_SUMMARY +CTX_REPORT.TOKEN_INFO +CTX_REPORT.TOKEN_TYPE +CTX_REPORT.VALIDATE_INDEX +CTX_REPORT.VALIDATE_MVDATA +CTX_THES. +CTX_THES.ALTER_PHRASE +CTX_THES.ALTER_THESAURUS +CTX_THES.BT +CTX_THES.BTG +CTX_THES.BTI +CTX_THES.BTP +CTX_THES.CREATE_PHRASE +CTX_THES.CREATE_RELATION +CTX_THES.CREATE_THESAURUS +CTX_THES.CREATE_TRANSLATION +CTX_THES.DROP_PHRASE +CTX_THES.DROP_RELATION +CTX_THES.DROP_THESAURUS +CTX_THES.DROP_TRANSLATION +CTX_THES.EXPORT_THESAURUS +CTX_THES.HAS_RELATION +CTX_THES.IMPORT_THESAURUS +CTX_THES.NT +CTX_THES.NTG +CTX_THES.NTI +CTX_THES.NTP +CTX_THES.OUTPUT_STYLE +CTX_THES.PT +CTX_THES.RT +CTX_THES.SN +CTX_THES.SYN +CTX_THES.THES_TT +CTX_THES.TR +CTX_THES.TRSYN +CTX_THES.TT +CTX_THES.UPDATE_TRANSLATION +CTX_TREE. +CTX_TREE.ADD_NODE +CTX_TREE.DROPSEQUENCES +CTX_TREE.GET_CHILDREN +CTX_TREE.GET_NODEID_LIST +CTX_TREE.GET_NODE_ID +CTX_TREE.GET_ROOTS +CTX_TREE.REGINDEX +CTX_TREE.REGISTER_INDEX +CTX_TREE.REMOVE_NODE +CTX_ULEXER. +CTX_XPCONTAINS. +CTX_XPCONTAINS.XPCONTAINS +CTYPE +CTYPE_HASHCODE +CTYPE_MOD +CTYPE_OWNER +CTYPE_TOID +CUBE_AJ +CUBE_GB +CUBE_ID +CUBE_MAP_NAME +CUBE_NAME +CUBE_OWNER +CUBE_SJ +CUBE_STORAGE_TYPE +CUBE_TABLE. +CUMULATIVE +CUMULATIVE_MESSAGE_COUNT +CUM_WAIT_TIME +CURBLK +CUREXT +CURLOG +CURNO +CURRENT +CURRENTLY_USED +CURRENT_2HOP +CURRENT_2HOP_TIME +CURRENT_3HOP +CURRENT_3HOP_TIME +CURRENT_500B +CURRENT_8K +CURRENT_ACTIVE_TIME +CURRENT_BLOCK +CURRENT_BLOCK# +CURRENT_BLOCK_TIME +CURRENT_BUSY +CURRENT_BUSY_TIME +CURRENT_CONGESTED +CURRENT_CONGESTED_TIME +CURRENT_CONSUMED_CPU_TIME +CURRENT_CONSUMER_GROUP +CURRENT_CONSUMER_GROUP_ID +CURRENT_COUNT +CURRENT_CPU_WAITS +CURRENT_CPU_WAIT_TIME +CURRENT_DIF_COUNT +CURRENT_ELAPSED_TIME +CURRENT_ENQ_SEQ +CURRENT_FILE# +CURRENT_FMR +CURRENT_GROUP +CURRENT_GROUP# +CURRENT_IDLE_TIME +CURRENT_IO_SERVICE_TIME +CURRENT_IO_SERVICE_WAITS +CURRENT_JOB_NAME +CURRENT_LARGE_READ_MEGABYTES +CURRENT_LARGE_READ_REQUESTS +CURRENT_LARGE_WRITE_MEGABYTES +CURRENT_LARGE_WRITE_REQUESTS +CURRENT_LOGICAL_IOS +CURRENT_MASTER +CURRENT_OBJ# +CURRENT_OBJECTS +CURRENT_PQS_ACTIVE +CURRENT_PQS_QUEUED +CURRENT_PQ_ACTIVE_TIME +CURRENT_PQ_QUEUED_TIME +CURRENT_PQ_SERVERS_ACTIVE +CURRENT_QUEUED_TIME +CURRENT_QUEUE_DURATION +CURRENT_REQUESTS +CURRENT_RESULTS +CURRENT_ROW# +CURRENT_RUN +CURRENT_SCN +CURRENT_SIZE +CURRENT_SMALL_READ_MEGABYTES +CURRENT_SMALL_READ_REQUESTS +CURRENT_SMALL_WRITE_MEGABYTES +CURRENT_SMALL_WRITE_REQUESTS +CURRENT_SNAPSHOTS +CURRENT_SNAP_ID +CURRENT_START_DATE +CURRENT_START_TIME +CURRENT_STATE +CURRENT_TRANSFER +CURRENT_UNDO_CONSUMPTION +CURRENT_USERS +CURRENT_UTILIZATION +CURRENT_VERSION +CURRENT_YIELDS +CURRMVNAME +CURRMVOWNER +CURR_DML_COMMAND +CURSIZE +CURSOR_NAME +CURSOR_NUM +CURSOR_PARTS_MISMATCH +CURSOR_SHARING_EXACT +CURSOR_TYPE +CURSTATUS_TIME +CURVAL +CUR_BUF_RATE +CUR_BYTE_PER_BUF +CUR_BYTE_RATE +CUR_CLT_BUF_RATE +CUR_CLT_BYTE_PER_BUF +CUR_CLT_BYTE_RATE +CUR_EVENTS_PER_LOOP +CUR_EVENT_RATE +CUR_IN_CONNECT_RATE +CUR_LOOP_RATE +CUR_MSG_RATE +CUR_OUT_CONNECT_RATE +CUR_RECONNECT_RATE +CUR_SVR_BUF_RATE +CUR_SVR_BYTE_PER_BUF +CUR_SVR_BYTE_RATE +CUR_TRANSFERS +CUSTOM_FUNCTION +CUSTOM_ORDER +CUSTOM_TYPE +CU_BUFFER_GETS +CU_SIZE +CYCLES_SINCE_STATS_RESET +CYCLE_FLAG +CYCLE_SECONDS_MDEF +CYCLE_SECONDS_NEW +CYCLIC_INDEX_VALUE +DAD_NAME +DALLOC +DAMAGE_DESCRIPTION +DAMAGE_MSGGRP_ID +DATA +DATABASE +DATABASE_COMPATIBILITY +DATABASE_COMPATIBLE_LEVEL +DATABASE_ID +DATABASE_INCARNATION# +DATABASE_LINK +DATABASE_MODE +DATABASE_NAME +DATABASE_NAME. +DATABASE_ROLE +DATABASE_SESSIONID +DATABASE_STATUS +DATABASE_TIME +DATABLOCKS +DATAFILE_BLOCKS +DATAGUARD_BROKER +DATAGUARD_ROLE +DATAOBJ +DATAOBJ# +DATAPUMP_SESSIONS +DATATYPE +DATATYPE_STRING +DATA_BLK# +DATA_DEFAULT +DATA_LENGTH +DATA_LEVEL +DATA_LOSS_TIME +DATA_OBJ# +DATA_OBJD# +DATA_OBJECT_ID +DATA_OBJV# +DATA_PRECISION +DATA_REQUESTS +DATA_SCALE +DATA_SECURITY_REWRITE_LIMIT +DATA_SOURCE +DATA_TYPE +DATA_TYPE_MOD +DATA_TYPE_OWNER +DATA_UPGRADED +DATE_VALUE +DATUM_TIME +DAY_OF_WEEK +DBA_2PC_NEIGHBORS +DBA_2PC_PENDING +DBA_ACL_NAME_MAP +DBA_ADDM_FDG_BREAKDOWN +DBA_ADDM_FINDINGS +DBA_ADDM_INSTANCES +DBA_ADDM_SYSTEM_DIRECTIVES +DBA_ADDM_TASKS +DBA_ADDM_TASK_DIRECTIVES +DBA_ADVISOR_ACTIONS +DBA_ADVISOR_COMMANDS +DBA_ADVISOR_DEFINITIONS +DBA_ADVISOR_DEF_PARAMETERS +DBA_ADVISOR_DIR_DEFINITIONS +DBA_ADVISOR_DIR_INSTANCES +DBA_ADVISOR_DIR_TASK_INST +DBA_ADVISOR_EXECUTIONS +DBA_ADVISOR_EXECUTION_TYPES +DBA_ADVISOR_EXEC_PARAMETERS +DBA_ADVISOR_FDG_BREAKDOWN +DBA_ADVISOR_FINDINGS +DBA_ADVISOR_FINDING_NAMES +DBA_ADVISOR_JOURNAL +DBA_ADVISOR_LOG +DBA_ADVISOR_OBJECTS +DBA_ADVISOR_OBJECT_TYPES +DBA_ADVISOR_PARAMETERS +DBA_ADVISOR_PARAMETERS_PROJ +DBA_ADVISOR_RATIONALE +DBA_ADVISOR_RECOMMENDATIONS +DBA_ADVISOR_SQLA_COLVOL +DBA_ADVISOR_SQLA_REC_SUM +DBA_ADVISOR_SQLA_TABLES +DBA_ADVISOR_SQLA_TABVOL +DBA_ADVISOR_SQLA_WK_MAP +DBA_ADVISOR_SQLA_WK_STMTS +DBA_ADVISOR_SQLA_WK_SUM +DBA_ADVISOR_SQLPLANS +DBA_ADVISOR_SQLSTATS +DBA_ADVISOR_SQLW_COLVOL +DBA_ADVISOR_SQLW_JOURNAL +DBA_ADVISOR_SQLW_PARAMETERS +DBA_ADVISOR_SQLW_STMTS +DBA_ADVISOR_SQLW_SUM +DBA_ADVISOR_SQLW_TABLES +DBA_ADVISOR_SQLW_TABVOL +DBA_ADVISOR_SQLW_TEMPLATES +DBA_ADVISOR_TASKS +DBA_ADVISOR_TEMPLATES +DBA_ADVISOR_USAGE +DBA_ALERT_ARGUMENTS +DBA_ALERT_HISTORY +DBA_ALERT_HISTORY_DETAIL +DBA_ALL_TABLES +DBA_ANALYZE_OBJECTS +DBA_APPLY +DBA_APPLY_CHANGE_HANDLERS +DBA_APPLY_CONFLICT_COLUMNS +DBA_APPLY_DML_CONF_COLUMNS +DBA_APPLY_DML_CONF_HANDLERS +DBA_APPLY_DML_HANDLERS +DBA_APPLY_ENQUEUE +DBA_APPLY_ERROR +DBA_APPLY_ERROR_MESSAGES +DBA_APPLY_EXECUTE +DBA_APPLY_HANDLE_COLLISIONS +DBA_APPLY_INSTANTIATED_GLOBAL +DBA_APPLY_INSTANTIATED_OBJECTS +DBA_APPLY_INSTANTIATED_SCHEMAS +DBA_APPLY_KEY_COLUMNS +DBA_APPLY_OBJECT_DEPENDENCIES +DBA_APPLY_PARAMETERS +DBA_APPLY_PROGRESS +DBA_APPLY_REPERROR_HANDLERS +DBA_APPLY_SPILL_TXN +DBA_APPLY_TABLE_COLUMNS +DBA_APPLY_VALUE_DEPENDENCIES +DBA_AQ_AGENTS +DBA_AQ_AGENT_PRIVS +DBA_ARGUMENTS +DBA_ASSEMBLIES +DBA_ASSOCIATIONS +DBA_ATTRIBUTE_TRANSFORMATIONS +DBA_AUDIT_EXISTS +DBA_AUDIT_MGMT_CLEANUP_JOBS +DBA_AUDIT_MGMT_CLEAN_EVENTS +DBA_AUDIT_MGMT_CONFIG_PARAMS +DBA_AUDIT_MGMT_LAST_ARCH_TS +DBA_AUDIT_OBJECT +DBA_AUDIT_POLICIES +DBA_AUDIT_POLICY_COLUMNS +DBA_AUDIT_SESSION +DBA_AUDIT_STATEMENT +DBA_AUDIT_TRAIL +DBA_AUTOTASK_CLIENT +DBA_AUTOTASK_CLIENT_HISTORY +DBA_AUTOTASK_CLIENT_JOB +DBA_AUTOTASK_JOB_HISTORY +DBA_AUTOTASK_OPERATION +DBA_AUTOTASK_SCHEDULE +DBA_AUTOTASK_STATUS +DBA_AUTOTASK_TASK +DBA_AUTOTASK_WINDOW_CLIENTS +DBA_AUTOTASK_WINDOW_HISTORY +DBA_AWS +DBA_AW_OBJ +DBA_AW_PROP +DBA_AW_PS +DBA_BASE_TABLE_MVIEWS +DBA_BLOCKERS +DBA_CAPTURE +DBA_CAPTURE_EXTRA_ATTRIBUTES +DBA_CAPTURE_PARAMETERS +DBA_CAPTURE_PREPARED_DATABASE +DBA_CAPTURE_PREPARED_SCHEMAS +DBA_CAPTURE_PREPARED_TABLES +DBA_CATALOG +DBA_CDB_RSRC_PLANS +DBA_CDB_RSRC_PLAN_DIRECTIVES +DBA_CHANGE_NOTIFICATION_REGS +DBA_CLUSTERING_DIMENSIONS +DBA_CLUSTERING_JOINS +DBA_CLUSTERING_KEYS +DBA_CLUSTERING_TABLES +DBA_CLUSTERS +DBA_CLUSTER_HASH_EXPRESSIONS +DBA_CLU_COLUMNS +DBA_CODE_ROLE_PRIVS +DBA_COLL_TYPES +DBA_COL_COMMENTS +DBA_COL_PENDING_STATS +DBA_COL_PRIVS +DBA_COMMON_AUDIT_TRAIL +DBA_COMPARISON +DBA_COMPARISON_COLUMNS +DBA_COMPARISON_ROW_DIF +DBA_COMPARISON_SCAN +DBA_COMPARISON_SCAN_SUMMARY +DBA_COMPARISON_SCAN_VALUES +DBA_CONNECT_ROLE_GRANTEES +DBA_CONSTRAINTS +DBA_CONS_COLUMNS +DBA_CONS_OBJ_COLUMNS +DBA_CONTAINER_DATA +DBA_CONTEXT +DBA_CPOOL_INFO +DBA_CPU_USAGE_STATISTICS +DBA_CQ_NOTIFICATION_QUERIES +DBA_CREDENTIALS +DBA_CUBES +DBA_CUBE_ATTRIBUTES +DBA_CUBE_ATTR_MAPPINGS +DBA_CUBE_ATTR_UNIQUE_KEYS +DBA_CUBE_ATTR_VISIBILITY +DBA_CUBE_BUILD_PROCESSES +DBA_CUBE_CALCULATED_MEMBERS +DBA_CUBE_CLASSIFICATIONS +DBA_CUBE_DEPENDENCIES +DBA_CUBE_DESCRIPTIONS +DBA_CUBE_DIMENSIONALITY +DBA_CUBE_DIMENSIONS +DBA_CUBE_DIMNL_MAPPINGS +DBA_CUBE_DIM_LEVELS +DBA_CUBE_DIM_MAPPINGS +DBA_CUBE_DIM_MODELS +DBA_CUBE_DIM_VIEWS +DBA_CUBE_DIM_VIEW_COLUMNS +DBA_CUBE_HIERARCHIES +DBA_CUBE_HIER_LEVELS +DBA_CUBE_HIER_VIEWS +DBA_CUBE_HIER_VIEW_COLUMNS +DBA_CUBE_MAPPINGS +DBA_CUBE_MEASURES +DBA_CUBE_MEAS_MAPPINGS +DBA_CUBE_NAMED_BUILD_SPECS +DBA_CUBE_SUB_PARTITION_LEVELS +DBA_CUBE_VIEWS +DBA_CUBE_VIEW_COLUMNS +DBA_DATAPUMP_JOBS +DBA_DATAPUMP_SESSIONS +DBA_DATA_FILES +DBA_DBFS_HS +DBA_DBFS_HS_COMMANDS +DBA_DBFS_HS_FIXED_PROPERTIES +DBA_DBFS_HS_PROPERTIES +DBA_DB_LINKS +DBA_DDL_LOCKS +DBA_DEPENDENCIES +DBA_DIGEST_VERIFIERS +DBA_DIMENSIONS +DBA_DIM_ATTRIBUTES +DBA_DIM_CHILD_OF +DBA_DIM_HIERARCHIES +DBA_DIM_JOIN_KEY +DBA_DIM_LEVELS +DBA_DIM_LEVEL_KEY +DBA_DIRECTORIES +DBA_DISCOVERY_SOURCE +DBA_DML_LOCKS +DBA_DMT_FREE_SPACE +DBA_DMT_USED_EXTENTS +DBA_DV_STATUS +DBA_EDITIONING_VIEWS +DBA_EDITIONING_VIEWS_AE +DBA_EDITIONING_VIEW_COLS +DBA_EDITIONING_VIEW_COLS_AE +DBA_EDITIONS +DBA_EDITION_COMMENTS +DBA_ENABLED_AGGREGATIONS +DBA_ENABLED_TRACES +DBA_ENCRYPTED_COLUMNS +DBA_EPG_DAD_AUTHORIZATION +DBA_ERRORS +DBA_ERRORS_AE +DBA_ERROR_TRANSLATIONS +DBA_EVALUATION_CONTEXTS +DBA_EVALUATION_CONTEXT_TABLES +DBA_EVALUATION_CONTEXT_VARS +DBA_EXPORT_OBJECTS +DBA_EXPORT_PATHS +DBA_EXP_FILES +DBA_EXP_OBJECTS +DBA_EXP_VERSION +DBA_EXTENTS +DBA_EXTERNAL_LOCATIONS +DBA_EXTERNAL_TABLES +DBA_FEATURE_USAGE_STATISTICS +DBA_FGA_AUDIT_TRAIL +DBA_FILE_GROUPS +DBA_FILE_GROUP_EXPORT_INFO +DBA_FILE_GROUP_FILES +DBA_FILE_GROUP_TABLES +DBA_FILE_GROUP_TABLESPACES +DBA_FILE_GROUP_VERSIONS +DBA_FLASHBACK_ARCHIVE +DBA_FLASHBACK_ARCHIVE_TABLES +DBA_FLASHBACK_ARCHIVE_TS +DBA_FLASHBACK_TXN_REPORT +DBA_FLASHBACK_TXN_STATE +DBA_FREE_SPACE +DBA_FREE_SPACE_COALESCED +DBA_GLOBAL_CONTEXT +DBA_GOLDENGATE_INBOUND +DBA_GOLDENGATE_PRIVILEGES +DBA_GOLDENGATE_RULES +DBA_GOLDENGATE_SUPPORT_MODE +DBA_HEATMAP_TOP_OBJECTS +DBA_HEATMAP_TOP_TABLESPACES +DBA_HEAT_MAP_SEGMENT +DBA_HEAT_MAP_SEG_HISTOGRAM +DBA_HIGH_WATER_MARK_STATISTICS +DBA_HISTOGRAMS +DBA_HIST_ACTIVE_SESS_HISTORY +DBA_HIST_APPLY_SUMMARY +DBA_HIST_ASH_SNAPSHOT +DBA_HIST_ASM_BAD_DISK +DBA_HIST_ASM_DISKGROUP +DBA_HIST_ASM_DISKGROUP_STAT +DBA_HIST_BASELINE +DBA_HIST_BASELINE_DETAILS +DBA_HIST_BASELINE_METADATA +DBA_HIST_BASELINE_TEMPLATE +DBA_HIST_BG_EVENT_SUMMARY +DBA_HIST_BUFFERED_QUEUES +DBA_HIST_BUFFERED_SUBSCRIBERS +DBA_HIST_BUFFER_POOL_STAT +DBA_HIST_CAPTURE +DBA_HIST_CELL_CONFIG +DBA_HIST_CELL_CONFIG_DETAIL +DBA_HIST_CELL_DB +DBA_HIST_CELL_DISKTYPE +DBA_HIST_CELL_DISK_NAME +DBA_HIST_CELL_DISK_SUMMARY +DBA_HIST_CELL_GLOBAL +DBA_HIST_CELL_GLOBAL_SUMMARY +DBA_HIST_CELL_IOREASON +DBA_HIST_CELL_IOREASON_NAME +DBA_HIST_CELL_METRIC_DESC +DBA_HIST_CELL_NAME +DBA_HIST_CELL_OPEN_ALERTS +DBA_HIST_CLUSTER_INTERCON +DBA_HIST_COLORED_SQL +DBA_HIST_COMP_IOSTAT +DBA_HIST_CR_BLOCK_SERVER +DBA_HIST_CURRENT_BLOCK_SERVER +DBA_HIST_DATABASE_INSTANCE +DBA_HIST_DATAFILE +DBA_HIST_DB_CACHE_ADVICE +DBA_HIST_DISPATCHER +DBA_HIST_DLM_MISC +DBA_HIST_DYN_REMASTER_STATS +DBA_HIST_ENQUEUE_STAT +DBA_HIST_EVENT_HISTOGRAM +DBA_HIST_EVENT_NAME +DBA_HIST_FILEMETRIC_HISTORY +DBA_HIST_FILESTATXS +DBA_HIST_IC_CLIENT_STATS +DBA_HIST_IC_DEVICE_STATS +DBA_HIST_IM_SEG_STAT +DBA_HIST_IM_SEG_STAT_OBJ +DBA_HIST_INSTANCE_RECOVERY +DBA_HIST_INST_CACHE_TRANSFER +DBA_HIST_INTERCONNECT_PINGS +DBA_HIST_IOSTAT_DETAIL +DBA_HIST_IOSTAT_FILETYPE +DBA_HIST_IOSTAT_FILETYPE_NAME +DBA_HIST_IOSTAT_FUNCTION +DBA_HIST_IOSTAT_FUNCTION_NAME +DBA_HIST_JAVA_POOL_ADVICE +DBA_HIST_LATCH +DBA_HIST_LATCH_CHILDREN +DBA_HIST_LATCH_MISSES_SUMMARY +DBA_HIST_LATCH_NAME +DBA_HIST_LATCH_PARENT +DBA_HIST_LIBRARYCACHE +DBA_HIST_LOG +DBA_HIST_MEMORY_RESIZE_OPS +DBA_HIST_MEMORY_TARGET_ADVICE +DBA_HIST_MEM_DYNAMIC_COMP +DBA_HIST_METRIC_NAME +DBA_HIST_MTTR_TARGET_ADVICE +DBA_HIST_MUTEX_SLEEP +DBA_HIST_MVPARAMETER +DBA_HIST_OPTIMIZER_ENV +DBA_HIST_OSSTAT +DBA_HIST_OSSTAT_NAME +DBA_HIST_PARAMETER +DBA_HIST_PARAMETER_NAME +DBA_HIST_PDB_INSTANCE +DBA_HIST_PDB_IN_SNAP +DBA_HIST_PERSISTENT_QMN_CACHE +DBA_HIST_PERSISTENT_QUEUES +DBA_HIST_PERSISTENT_SUBS +DBA_HIST_PGASTAT +DBA_HIST_PGA_TARGET_ADVICE +DBA_HIST_PLAN_OPERATION_NAME +DBA_HIST_PLAN_OPTION_NAME +DBA_HIST_PROCESS_MEM_SUMMARY +DBA_HIST_REPLICATION_TBL_STATS +DBA_HIST_REPLICATION_TXN_STATS +DBA_HIST_REPORTS +DBA_HIST_REPORTS_CONTROL +DBA_HIST_REPORTS_DETAILS +DBA_HIST_REPORTS_TIMEBANDS +DBA_HIST_RESOURCE_LIMIT +DBA_HIST_ROWCACHE_SUMMARY +DBA_HIST_RSRC_CONSUMER_GROUP +DBA_HIST_RSRC_PLAN +DBA_HIST_RULE_SET +DBA_HIST_SEG_STAT +DBA_HIST_SEG_STAT_OBJ +DBA_HIST_SERVICE_NAME +DBA_HIST_SERVICE_STAT +DBA_HIST_SERVICE_WAIT_CLASS +DBA_HIST_SESSMETRIC_HISTORY +DBA_HIST_SESS_SGA_STATS +DBA_HIST_SESS_TIME_STATS +DBA_HIST_SGA +DBA_HIST_SGASTAT +DBA_HIST_SGA_TARGET_ADVICE +DBA_HIST_SHARED_POOL_ADVICE +DBA_HIST_SHARED_SERVER_SUMMARY +DBA_HIST_SNAPSHOT +DBA_HIST_SNAP_ERROR +DBA_HIST_SQLBIND +DBA_HIST_SQLCOMMAND_NAME +DBA_HIST_SQLSTAT +DBA_HIST_SQLTEXT +DBA_HIST_SQL_BIND_METADATA +DBA_HIST_SQL_PLAN +DBA_HIST_SQL_SUMMARY +DBA_HIST_SQL_WORKAREA_HSTGRM +DBA_HIST_STAT_NAME +DBA_HIST_STREAMS_APPLY_SUM +DBA_HIST_STREAMS_CAPTURE +DBA_HIST_STREAMS_POOL_ADVICE +DBA_HIST_SYSMETRIC_HISTORY +DBA_HIST_SYSMETRIC_SUMMARY +DBA_HIST_SYSSTAT +DBA_HIST_SYSTEM_EVENT +DBA_HIST_SYS_TIME_MODEL +DBA_HIST_TABLESPACE +DBA_HIST_TABLESPACE_STAT +DBA_HIST_TBSPC_SPACE_USAGE +DBA_HIST_TEMPFILE +DBA_HIST_TEMPSTATXS +DBA_HIST_THREAD +DBA_HIST_TOPLEVELCALL_NAME +DBA_HIST_UNDOSTAT +DBA_HIST_WAITCLASSMET_HISTORY +DBA_HIST_WAITSTAT +DBA_HIST_WR_CONTROL +DBA_HOST_ACES +DBA_HOST_ACLS +DBA_IAS_CONSTRAINT_EXP +DBA_IAS_GEN_STMTS +DBA_IAS_GEN_STMTS_EXP +DBA_IAS_OBJECTS +DBA_IAS_OBJECTS_BASE +DBA_IAS_OBJECTS_EXP +DBA_IAS_POSTGEN_STMTS +DBA_IAS_PREGEN_STMTS +DBA_IAS_SITES +DBA_IAS_TEMPLATES +DBA_IDENTIFIERS +DBA_ILMDATAMOVEMENTPOLICIES +DBA_ILMEVALUATIONDETAILS +DBA_ILMOBJECTS +DBA_ILMPARAMETERS +DBA_ILMPOLICIES +DBA_ILMRESULTS +DBA_ILMTASKS +DBA_INDEXES +DBA_INDEXTYPES +DBA_INDEXTYPE_ARRAYTYPES +DBA_INDEXTYPE_COMMENTS +DBA_INDEXTYPE_OPERATORS +DBA_IND_COLUMNS +DBA_IND_EXPRESSIONS +DBA_IND_PARTITIONS +DBA_IND_PENDING_STATS +DBA_IND_STATISTICS +DBA_IND_SUBPARTITIONS +DBA_INTERNAL_TRIGGERS +DBA_INVALID_OBJECTS +DBA_JAVA_ARGUMENTS +DBA_JAVA_CLASSES +DBA_JAVA_COMPILER_OPTIONS +DBA_JAVA_DERIVATIONS +DBA_JAVA_FIELDS +DBA_JAVA_IMPLEMENTS +DBA_JAVA_INNERS +DBA_JAVA_LAYOUTS +DBA_JAVA_METHODS +DBA_JAVA_NCOMPS +DBA_JAVA_POLICY +DBA_JAVA_RESOLVERS +DBA_JAVA_THROWS +DBA_JOBS +DBA_JOBS_RUNNING +DBA_JOIN_IND_COLUMNS +DBA_JSON_COLUMNS +DBA_KEEPSIZES +DBA_KGLLOCK +DBA_LIBRARIES +DBA_LMT_FREE_SPACE +DBA_LMT_USED_EXTENTS +DBA_LOBS +DBA_LOB_PARTITIONS +DBA_LOB_SUBPARTITIONS +DBA_LOB_TEMPLATES +DBA_LOCK +DBA_LOCKS +DBA_LOCK_INTERNAL +DBA_LOGMNR_LOG +DBA_LOGMNR_PURGED_LOG +DBA_LOGMNR_SESSION +DBA_LOGSTDBY_EDS_SUPPORTED +DBA_LOGSTDBY_EDS_TABLES +DBA_LOGSTDBY_EVENTS +DBA_LOGSTDBY_HISTORY +DBA_LOGSTDBY_LOG +DBA_LOGSTDBY_NOT_UNIQUE +DBA_LOGSTDBY_PARAMETERS +DBA_LOGSTDBY_PLSQL_MAP +DBA_LOGSTDBY_PLSQL_SUPPORT +DBA_LOGSTDBY_PROGRESS +DBA_LOGSTDBY_SKIP +DBA_LOGSTDBY_SKIP_TRANSACTION +DBA_LOGSTDBY_UNSUPPORTED +DBA_LOGSTDBY_UNSUPPORTED_TABLE +DBA_LOG_GROUPS +DBA_LOG_GROUP_COLUMNS +DBA_MEASURE_FOLDERS +DBA_MEASURE_FOLDER_CONTENTS +DBA_MEASURE_FOLDER_SUBFOLDERS +DBA_METADATA_PROPERTIES +DBA_METHOD_PARAMS +DBA_METHOD_RESULTS +DBA_MINING_MODELS +DBA_MINING_MODEL_ATTRIBUTES +DBA_MINING_MODEL_SETTINGS +DBA_MINING_MODEL_TABLES +DBA_MVIEWS +DBA_MVIEW_AGGREGATES +DBA_MVIEW_ANALYSIS +DBA_MVIEW_COMMENTS +DBA_MVIEW_DETAIL_PARTITION +DBA_MVIEW_DETAIL_RELATIONS +DBA_MVIEW_DETAIL_SUBPARTITION +DBA_MVIEW_JOINS +DBA_MVIEW_KEYS +DBA_MVIEW_LOGS +DBA_MVIEW_LOG_FILTER_COLS +DBA_MVIEW_REFRESH_TIMES +DBA_NESTED_TABLES +DBA_NESTED_TABLE_COLS +DBA_NETWORK_ACLS +DBA_NETWORK_ACL_PRIVILEGES +DBA_OBJECTS +DBA_OBJECTS_AE +DBA_OBJECT_SIZE +DBA_OBJECT_TABLES +DBA_OBJECT_USAGE +DBA_OBJ_AUDIT_OPTS +DBA_OBJ_COLATTRS +DBA_OLDIMAGE_COLUMNS +DBA_OPANCILLARY +DBA_OPARGUMENTS +DBA_OPBINDINGS +DBA_OPERATORS +DBA_OPERATOR_COMMENTS +DBA_OPTSTAT_OPERATIONS +DBA_OPTSTAT_OPERATION_TASKS +DBA_OUTLINES +DBA_OUTLINE_HINTS +DBA_OUTSTANDING_ALERTS +DBA_PARALLEL_EXECUTE_CHUNKS +DBA_PARALLEL_EXECUTE_TASKS +DBA_PARTIAL_DROP_TABS +DBA_PART_COL_STATISTICS +DBA_PART_HISTOGRAMS +DBA_PART_INDEXES +DBA_PART_KEY_COLUMNS +DBA_PART_LOBS +DBA_PART_TABLES +DBA_PDBS +DBA_PDB_HISTORY +DBA_PDB_SAVED_STATES +DBA_PENDING_CONV_TABLES +DBA_PENDING_TRANSACTIONS +DBA_PLSQL_COLL_TYPES +DBA_PLSQL_OBJECT_SETTINGS +DBA_PLSQL_TYPES +DBA_PLSQL_TYPE_ATTRS +DBA_POLICIES +DBA_POLICY_ATTRIBUTES +DBA_POLICY_CONTEXTS +DBA_POLICY_GROUPS +DBA_PRIV_AUDIT_OPTS +DBA_PRIV_CAPTURES +DBA_PROCEDURES +DBA_PROFILES +DBA_PROPAGATION +DBA_PROXIES +DBA_PUBLISHED_COLUMNS +DBA_QUEUES +DBA_QUEUE_PUBLISHERS +DBA_QUEUE_SCHEDULES +DBA_QUEUE_SUBSCRIBERS +DBA_QUEUE_TABLES +DBA_RCHILD +DBA_RECOVERABLE_SCRIPT +DBA_RECOVERABLE_SCRIPT_BLOCKS +DBA_RECOVERABLE_SCRIPT_ERRORS +DBA_RECOVERABLE_SCRIPT_HIST +DBA_RECOVERABLE_SCRIPT_PARAMS +DBA_RECYCLEBIN +DBA_REDO_DB +DBA_REDO_LOG +DBA_REFRESH +DBA_REFRESH_CHILDREN +DBA_REFS +DBA_REGISTERED_ARCHIVED_LOG +DBA_REGISTERED_MVIEWS +DBA_REGISTERED_MVIEW_GROUPS +DBA_REGISTERED_SNAPSHOTS +DBA_REGISTERED_SNAPSHOT_GROUPS +DBA_REGISTRY +DBA_REGISTRY_DATABASE +DBA_REGISTRY_DEPENDENCIES +DBA_REGISTRY_ERROR +DBA_REGISTRY_HIERARCHY +DBA_REGISTRY_HISTORY +DBA_REGISTRY_LOG +DBA_REGISTRY_PROGRESS +DBA_REGISTRY_SQLPATCH +DBA_REPAUDIT_ATTRIBUTE +DBA_REPAUDIT_COLUMN +DBA_REPCAT +DBA_REPCATLOG +DBA_REPCAT_EXCEPTIONS +DBA_REPCOLUMN +DBA_REPCOLUMN_GROUP +DBA_REPCONFLICT +DBA_REPDDL +DBA_REPEXTENSIONS +DBA_REPFLAVORS +DBA_REPFLAVOR_COLUMNS +DBA_REPFLAVOR_OBJECTS +DBA_REPGENERATED +DBA_REPGENOBJECTS +DBA_REPGROUP +DBA_REPGROUPED_COLUMN +DBA_REPGROUP_PRIVILEGES +DBA_REPKEY_COLUMNS +DBA_REPL_DBNAME_MAPPING +DBA_REPOBJECT +DBA_REPPARAMETER_COLUMN +DBA_REPPRIORITY +DBA_REPPRIORITY_GROUP +DBA_REPPROP +DBA_REPRESOLUTION +DBA_REPRESOLUTION_METHOD +DBA_REPRESOLUTION_STATISTICS +DBA_REPRESOL_STATS_CONTROL +DBA_REPSCHEMA +DBA_REPSITES +DBA_REPSITES_NEW +DBA_RESOURCE_INCARNATIONS +DBA_RESUMABLE +DBA_REWRITE_EQUIVALENCES +DBA_RGROUP +DBA_ROLES +DBA_ROLE_PRIVS +DBA_ROLLBACK_SEGS +DBA_ROLLING_DATABASES +DBA_ROLLING_EVENTS +DBA_ROLLING_PARAMETERS +DBA_ROLLING_PLAN +DBA_ROLLING_STATISTICS +DBA_ROLLING_STATUS +DBA_ROLLING_UNSUPPORTED +DBA_RSRC_CAPABILITY +DBA_RSRC_CATEGORIES +DBA_RSRC_CONSUMER_GROUPS +DBA_RSRC_CONSUMER_GROUP_PRIVS +DBA_RSRC_GROUP_MAPPINGS +DBA_RSRC_INSTANCE_CAPABILITY +DBA_RSRC_IO_CALIBRATE +DBA_RSRC_MANAGER_SYSTEM_PRIVS +DBA_RSRC_MAPPING_PRIORITY +DBA_RSRC_PLANS +DBA_RSRC_PLAN_DIRECTIVES +DBA_RSRC_STORAGE_POOL_MAPPING +DBA_RULES +DBA_RULESETS +DBA_RULE_SETS +DBA_RULE_SET_RULES +DBA_SCHEDULER_CHAINS +DBA_SCHEDULER_CHAIN_RULES +DBA_SCHEDULER_CHAIN_STEPS +DBA_SCHEDULER_CREDENTIALS +DBA_SCHEDULER_DB_DESTS +DBA_SCHEDULER_DESTS +DBA_SCHEDULER_EXTERNAL_DESTS +DBA_SCHEDULER_FILE_WATCHERS +DBA_SCHEDULER_GLOBAL_ATTRIBUTE +DBA_SCHEDULER_GROUPS +DBA_SCHEDULER_GROUP_MEMBERS +DBA_SCHEDULER_JOBS +DBA_SCHEDULER_JOB_ARGS +DBA_SCHEDULER_JOB_CLASSES +DBA_SCHEDULER_JOB_DESTS +DBA_SCHEDULER_JOB_LOG +DBA_SCHEDULER_JOB_ROLES +DBA_SCHEDULER_JOB_RUN_DETAILS +DBA_SCHEDULER_NOTIFICATIONS +DBA_SCHEDULER_PROGRAMS +DBA_SCHEDULER_PROGRAM_ARGS +DBA_SCHEDULER_REMOTE_DATABASES +DBA_SCHEDULER_REMOTE_JOBSTATE +DBA_SCHEDULER_RUNNING_CHAINS +DBA_SCHEDULER_SCHEDULES +DBA_SCHEDULER_WINDOWS +DBA_SCHEDULER_WINDOW_DETAILS +DBA_SCHEDULER_WINDOW_GROUPS +DBA_SCHEDULER_WINDOW_LOG +DBA_SCHEDULER_WINGROUP_MEMBERS +DBA_SECONDARY_OBJECTS +DBA_SECUREFILE_LOGS +DBA_SECUREFILE_LOG_INSTANCES +DBA_SECUREFILE_LOG_PARTITIONS +DBA_SECUREFILE_LOG_TABLES +DBA_SEC_RELEVANT_COLS +DBA_SEGMENTS +DBA_SEGMENTS_OLD +DBA_SENSITIVE_COLUMN_TYPES +DBA_SENSITIVE_DATA +DBA_SEQUENCES +DBA_SERVER_REGISTRY +DBA_SNAPSHOTS +DBA_SNAPSHOT_LOGS +DBA_SNAPSHOT_LOG_FILTER_COLS +DBA_SNAPSHOT_REFRESH_TIMES +DBA_SOURCE +DBA_SOURCE_AE +DBA_SOURCE_TABLES +DBA_SQLJ_TYPES +DBA_SQLJ_TYPE_ATTRS +DBA_SQLJ_TYPE_METHODS +DBA_SQLSET +DBA_SQLSET_BINDS +DBA_SQLSET_DEFINITIONS +DBA_SQLSET_PLANS +DBA_SQLSET_REFERENCES +DBA_SQLSET_STATEMENTS +DBA_SQLTUNE_BINDS +DBA_SQLTUNE_PLANS +DBA_SQLTUNE_RATIONALE_PLAN +DBA_SQLTUNE_STATISTICS +DBA_SQL_MONITOR_USAGE +DBA_SQL_PATCHES +DBA_SQL_PLAN_BASELINES +DBA_SQL_PLAN_DIRECTIVES +DBA_SQL_PLAN_DIR_OBJECTS +DBA_SQL_PROFILES +DBA_SQL_TRANSLATIONS +DBA_SQL_TRANSLATION_PROFILES +DBA_SR_GRP_STATUS +DBA_SR_GRP_STATUS_ALL +DBA_SR_OBJ +DBA_SR_OBJ_ALL +DBA_SR_OBJ_STATUS +DBA_SR_OBJ_STATUS_ALL +DBA_SR_PARTN_OPS +DBA_SR_STLOG_STATS +DBA_SSCR_CAPTURE +DBA_SSCR_RESTORE +DBA_STAT_EXTENSIONS +DBA_STMT_AUDIT_OPTS +DBA_STORED_SETTINGS +DBA_STREAMS_ADD_COLUMN +DBA_STREAMS_ADMINISTRATOR +DBA_STREAMS_COLUMNS +DBA_STREAMS_DELETE_COLUMN +DBA_STREAMS_GLOBAL_RULES +DBA_STREAMS_KEEP_COLUMNS +DBA_STREAMS_MESSAGE_CONSUMERS +DBA_STREAMS_MESSAGE_RULES +DBA_STREAMS_NEWLY_SUPPORTED +DBA_STREAMS_RENAME_COLUMN +DBA_STREAMS_RENAME_SCHEMA +DBA_STREAMS_RENAME_TABLE +DBA_STREAMS_RULES +DBA_STREAMS_SCHEMA_RULES +DBA_STREAMS_SPLIT_MERGE +DBA_STREAMS_SPLIT_MERGE_HIST +DBA_STREAMS_TABLE_RULES +DBA_STREAMS_TP_COMPONENT +DBA_STREAMS_TP_COMPONENT_LINK +DBA_STREAMS_TP_COMPONENT_STAT +DBA_STREAMS_TP_DATABASE +DBA_STREAMS_TP_PATH_BOTTLENECK +DBA_STREAMS_TP_PATH_STAT +DBA_STREAMS_TRANSFORMATIONS +DBA_STREAMS_TRANSFORM_FUNCTION +DBA_STREAMS_UNSUPPORTED +DBA_SUBPARTITION_TEMPLATES +DBA_SUBPART_COL_STATISTICS +DBA_SUBPART_HISTOGRAMS +DBA_SUBPART_KEY_COLUMNS +DBA_SUBSCRIBED_COLUMNS +DBA_SUBSCRIBED_TABLES +DBA_SUBSCRIPTIONS +DBA_SUBSCR_REGISTRATIONS +DBA_SUMMARIES +DBA_SUPPLEMENTAL_LOGGING +DBA_SYNC_CAPTURE +DBA_SYNC_CAPTURE_PREPARED_TABS +DBA_SYNC_CAPTURE_TABLES +DBA_SYNONYMS +DBA_SYS_PRIVS +DBA_TABLES +DBA_TABLESPACES +DBA_TABLESPACE_GROUPS +DBA_TABLESPACE_THRESHOLDS +DBA_TABLESPACE_USAGE_METRICS +DBA_TAB_COLS +DBA_TAB_COLS_V$ +DBA_TAB_COLUMNS +DBA_TAB_COL_STATISTICS +DBA_TAB_COMMENTS +DBA_TAB_HISTGRM_PENDING_STATS +DBA_TAB_HISTOGRAMS +DBA_TAB_IDENTITY_COLS +DBA_TAB_MODIFICATIONS +DBA_TAB_PARTITIONS +DBA_TAB_PENDING_STATS +DBA_TAB_PRIVS +DBA_TAB_STATISTICS +DBA_TAB_STATS_HISTORY +DBA_TAB_STAT_PREFS +DBA_TAB_SUBPARTITIONS +DBA_TEMPLATE_REFGROUPS +DBA_TEMPLATE_TARGETS +DBA_TEMP_FILES +DBA_TEMP_FREE_SPACE +DBA_THRESHOLDS +DBA_TRANSFORMATIONS +DBA_TRIGGERS +DBA_TRIGGER_COLS +DBA_TRIGGER_ORDERING +DBA_TSDP_IMPORT_ERRORS +DBA_TSDP_POLICY_CONDITION +DBA_TSDP_POLICY_FEATURE +DBA_TSDP_POLICY_PARAMETER +DBA_TSDP_POLICY_PROTECTION +DBA_TSDP_POLICY_TYPE +DBA_TSM_DESTINATION +DBA_TSM_HISTORY +DBA_TSM_SOURCE +DBA_TSTZ_TABLES +DBA_TSTZ_TAB_COLS +DBA_TS_QUOTAS +DBA_TUNE_MVIEW +DBA_TYPES +DBA_TYPE_ATTRS +DBA_TYPE_METHODS +DBA_TYPE_VERSIONS +DBA_UNDO_EXTENTS +DBA_UNUSED_COL_TABS +DBA_UNUSED_OBJPRIVS +DBA_UNUSED_OBJPRIVS_PATH +DBA_UNUSED_PRIVS +DBA_UNUSED_SYSPRIVS +DBA_UNUSED_SYSPRIVS_PATH +DBA_UNUSED_USERPRIVS +DBA_UNUSED_USERPRIVS_PATH +DBA_UPDATABLE_COLUMNS +DBA_USED_OBJPRIVS +DBA_USED_OBJPRIVS_PATH +DBA_USED_PRIVS +DBA_USED_PUBPRIVS +DBA_USED_SYSPRIVS +DBA_USED_SYSPRIVS_PATH +DBA_USED_USERPRIVS +DBA_USED_USERPRIVS_PATH +DBA_USERS +DBA_USERS_WITH_DEFPWD +DBA_USTATS +DBA_VARRAYS +DBA_VIEWS +DBA_VIEWS_AE +DBA_WAITERS +DBA_WALLET_ACES +DBA_WALLET_ACLS +DBA_WARNING_SETTINGS +DBA_WI_CAPTURE_FILES +DBA_WI_JOBS +DBA_WI_OBJECTS +DBA_WI_PATTERNS +DBA_WI_PATTERN_ITEMS +DBA_WI_STATEMENTS +DBA_WI_TEMPLATES +DBA_WI_TEMPLATE_EXECUTIONS +DBA_WORKLOAD_ACTIVE_USER_MAP +DBA_WORKLOAD_CAPTURES +DBA_WORKLOAD_CONNECTION_MAP +DBA_WORKLOAD_FILTERS +DBA_WORKLOAD_REPLAYS +DBA_WORKLOAD_REPLAY_DIVERGENCE +DBA_WORKLOAD_REPLAY_FILTER_SET +DBA_WORKLOAD_REPLAY_SCHEDULES +DBA_WORKLOAD_SCHEDULE_CAPTURES +DBA_WORKLOAD_SCHEDULE_ORDERING +DBA_WORKLOAD_USER_MAP +DBA_XDS_ACL_REFRESH +DBA_XDS_ACL_REFSTAT +DBA_XDS_LATEST_ACL_REFSTAT +DBA_XMLSCHEMA_LEVEL_VIEW +DBA_XMLSCHEMA_LEVEL_VIEW_DUP +DBA_XMLTYPE_COLS +DBA_XML_INDEXES +DBA_XML_NESTED_TABLES +DBA_XML_OUT_OF_LINE_TABLES +DBA_XML_SCHEMAS +DBA_XML_SCHEMA_ATTRIBUTES +DBA_XML_SCHEMA_COMPLEX_TYPES +DBA_XML_SCHEMA_DEPENDENCY +DBA_XML_SCHEMA_ELEMENTS +DBA_XML_SCHEMA_IMPORTS +DBA_XML_SCHEMA_INCLUDES +DBA_XML_SCHEMA_NAMESPACES +DBA_XML_SCHEMA_SIMPLE_TYPES +DBA_XML_SCHEMA_SUBSTGRP_HEAD +DBA_XML_SCHEMA_SUBSTGRP_MBRS +DBA_XML_TABLES +DBA_XML_TAB_COLS +DBA_XML_VIEWS +DBA_XML_VIEW_COLS +DBA_XSTREAM_ADMINISTRATOR +DBA_XSTREAM_INBOUND +DBA_XSTREAM_OUTBOUND +DBA_XSTREAM_OUT_SUPPORT_MODE +DBA_XSTREAM_RULES +DBA_XSTREAM_SPLIT_MERGE +DBA_XSTREAM_SPLIT_MERGE_HIST +DBA_XSTREAM_TRANSFORMATIONS +DBA_XS_ACES +DBA_XS_ACLS +DBA_XS_ACL_PARAMETERS +DBA_XS_ACTIVE_SESSIONS +DBA_XS_APPLIED_POLICIES +DBA_XS_AUDIT_POLICY_OPTIONS +DBA_XS_AUDIT_TRAIL +DBA_XS_COLUMN_CONSTRAINTS +DBA_XS_DYNAMIC_ROLES +DBA_XS_ENB_AUDIT_POLICIES +DBA_XS_EXTERNAL_PRINCIPALS +DBA_XS_IMPLIED_PRIVILEGES +DBA_XS_INHERITED_REALMS +DBA_XS_MODIFIED_POLICIES +DBA_XS_NS_TEMPLATES +DBA_XS_NS_TEMPLATE_ATTRIBUTES +DBA_XS_OBJECTS +DBA_XS_POLICIES +DBA_XS_PRINCIPALS +DBA_XS_PRIVILEGES +DBA_XS_PROXY_ROLES +DBA_XS_REALM_CONSTRAINTS +DBA_XS_ROLES +DBA_XS_ROLE_GRANTS +DBA_XS_SECURITY_CLASSES +DBA_XS_SECURITY_CLASS_DEP +DBA_XS_SESSIONS +DBA_XS_SESSION_NS_ATTRIBUTES +DBA_XS_SESSION_ROLES +DBA_XS_USERS +DBA_ZONEMAPS +DBA_ZONEMAP_MEASURES +DBFIPS_140 +DBGLVL +DBID +DBJ_LONG_NAME. +DBJ_SHORT_NAME. +DBLINK +DBLINK_INFO +DBLINK_NAME +DBMSHSXP. +DBMSHSXP.SYSTEM_INFO_EXP +DBMSOBJG. +DBMSOBJG.CHECK_PERMISSIONS +DBMSOBJG.FIND_COL_INFO +DBMSOBJG.FIND_TS_INFO +DBMSOBJG.GENERATE_DDL +DBMSOBJG.GET_NLS_SUBSTR +DBMSOBJG.GET_TAB_SPACE +DBMSOBJG2. +DBMSOBJG2.GENERATE_IND_PART_STORAGE +DBMSOBJG2.GENERATE_IOT_PART_STORAGE +DBMSOBJG2.GENERATE_TABLE_PART_STORAGE +DBMSOBJGWRAPPER. +DBMSOBJGWRAPPER.GENERATE_DDL +DBMSOBJGWRAPPER.ROLLBACK_DDL +DBMSOBJG_DP. +DBMSOBJG_DP.GENERATE_DDL_DP +DBMSZEXP_SYSPKGGRNT. +DBMSZEXP_SYSPKGGRNT.SYSTEM_INFO_EXP +DBMS_ADDM. +DBMS_ADDM.ANALYZE_DB +DBMS_ADDM.ANALYZE_INST +DBMS_ADDM.ANALYZE_PARTIAL +DBMS_ADDM.COMPARE_CAPTURE_REPLAY_REPORT +DBMS_ADDM.COMPARE_DATABASES +DBMS_ADDM.COMPARE_INSTANCES +DBMS_ADDM.COMPARE_REPLAY_REPLAY_REPORT +DBMS_ADDM.DELETE +DBMS_ADDM.DELETE_FINDING_DIRECTIVE +DBMS_ADDM.DELETE_PARAMETER_DIRECTIVE +DBMS_ADDM.DELETE_SEGMENT_DIRECTIVE +DBMS_ADDM.DELETE_SQL_DIRECTIVE +DBMS_ADDM.GET_ASH_QUERY +DBMS_ADDM.GET_REPORT +DBMS_ADDM.INSERT_FINDING_DIRECTIVE +DBMS_ADDM.INSERT_PARAMETER_DIRECTIVE +DBMS_ADDM.INSERT_SEGMENT_DIRECTIVE +DBMS_ADDM.INSERT_SQL_DIRECTIVE +DBMS_ADDM.REAL_TIME_ADDM_REPORT +DBMS_ADR. +DBMS_ADR.CLEANOUT_SCHEMA +DBMS_ADR.CREATE_INCIDENT +DBMS_ADR.DOWNGRADE_SCHEMA +DBMS_ADR.GET_LOG_LOCATION +DBMS_ADR.GET_TRACE_LOCATION +DBMS_ADR.MIGRATE_SCHEMA +DBMS_ADR.RECOVER_SCHEMA +DBMS_ADR.SET_EXCEPTION_MODE +DBMS_ADR.SET_LOG_MSG_TEMPLATE +DBMS_ADR.WRITE_LOG +DBMS_ADR.WRITE_TRACE +DBMS_ADR_APP. +DBMS_ADR_APP.CREATE_INCIDENT +DBMS_ADR_APP.GET_CURRENT_PRECEDENCE +DBMS_ADR_APP.GET_LOG_LOCATION +DBMS_ADR_APP.GET_TRACE_LOCATION +DBMS_ADR_APP.SET_ADR_HOME +DBMS_ADR_APP.SET_CURRENT_PRECEDENCE +DBMS_ADR_APP.SET_EXCEPTION_MODE +DBMS_ADR_APP.SET_LOG_MSG_TEMPLATE +DBMS_ADR_APP.WRITE_LOG +DBMS_ADR_APP.WRITE_TRACE +DBMS_ADR_INTERNAL. +DBMS_ADR_INTERNAL.CREATE_ADR_HOME +DBMS_ADR_INTERNAL.CREATE_INCIDENT +DBMS_ADR_INTERNAL.GET_LOCATION +DBMS_ADR_INTERNAL.INCIDENT_ADD_METADATA +DBMS_ADR_INTERNAL.INCIDENT_CREATE +DBMS_ADR_INTERNAL.RESERVE_INCIDS +DBMS_ADR_INTERNAL.TEST_RESERVE_INCIDS +DBMS_ADR_INTERNAL.WRITE_LOG +DBMS_ADR_INTERNAL.WRITE_LOG_HANDLER +DBMS_ADR_INTERNAL.WRITE_TRACE +DBMS_ADVANCED_REWRITE. +DBMS_ADVANCED_REWRITE.ALTER_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.BUILD_SAFE_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.VALIDATE_REWRITE_EQUIVALENCE +DBMS_ADVISOR. +DBMS_ADVISOR.ADD_SQLWKLD_REF +DBMS_ADVISOR.ADD_SQLWKLD_STATEMENT +DBMS_ADVISOR.ADD_STS_REF +DBMS_ADVISOR.CANCEL_TASK +DBMS_ADVISOR.CHECK_PRIVS +DBMS_ADVISOR.CHECK_READ_PRIVS +DBMS_ADVISOR.COPY_SQLWKLD_TO_STS +DBMS_ADVISOR.CREATE_FILE +DBMS_ADVISOR.CREATE_OBJECT +DBMS_ADVISOR.CREATE_SQLWKLD +DBMS_ADVISOR.CREATE_TASK +DBMS_ADVISOR.DELETE_DIRECTIVE +DBMS_ADVISOR.DELETE_SQLWKLD +DBMS_ADVISOR.DELETE_SQLWKLD_REF +DBMS_ADVISOR.DELETE_SQLWKLD_STATEMENT +DBMS_ADVISOR.DELETE_STS_REF +DBMS_ADVISOR.DELETE_TASK +DBMS_ADVISOR.EVALUATE_DIRECTIVE +DBMS_ADVISOR.EXECUTE_TASK +DBMS_ADVISOR.FORMAT_MESSAGE +DBMS_ADVISOR.FORMAT_MESSAGE_GROUP +DBMS_ADVISOR.GET_ACCESS_ADVISOR_DEFAULTS +DBMS_ADVISOR.GET_REC_ATTRIBUTES +DBMS_ADVISOR.GET_TASK_REPORT +DBMS_ADVISOR.GET_TASK_SCRIPT +DBMS_ADVISOR.IMPLEMENT_TASK +DBMS_ADVISOR.IMPORT_SQLWKLD_SCHEMA +DBMS_ADVISOR.IMPORT_SQLWKLD_SQLCACHE +DBMS_ADVISOR.IMPORT_SQLWKLD_STS +DBMS_ADVISOR.IMPORT_SQLWKLD_SUMADV +DBMS_ADVISOR.IMPORT_SQLWKLD_USER +DBMS_ADVISOR.INSERT_DIRECTIVE +DBMS_ADVISOR.INTERRUPT_TASK +DBMS_ADVISOR.MARK_RECOMMENDATION +DBMS_ADVISOR.QUICK_TUNE +DBMS_ADVISOR.RESET_SQLWKLD +DBMS_ADVISOR.RESET_TASK +DBMS_ADVISOR.RESUME_TASK +DBMS_ADVISOR.SETUP_REPOSITORY +DBMS_ADVISOR.SETUP_USER_ENVIRONMENT +DBMS_ADVISOR.SET_DEFAULT_SQLWKLD_PARAMETER +DBMS_ADVISOR.SET_DEFAULT_TASK_PARAMETER +DBMS_ADVISOR.SET_SQLWKLD_PARAMETER +DBMS_ADVISOR.SET_TASK_PARAMETER +DBMS_ADVISOR.TUNE_MVIEW +DBMS_ADVISOR.UPDATE_DIRECTIVE +DBMS_ADVISOR.UPDATE_OBJECT +DBMS_ADVISOR.UPDATE_REC_ATTRIBUTES +DBMS_ADVISOR.UPDATE_SQLWKLD_ATTRIBUTES +DBMS_ADVISOR.UPDATE_SQLWKLD_STATEMENT +DBMS_ADVISOR.UPDATE_TASK_ATTRIBUTES +DBMS_ALERT. +DBMS_ALERT.REGISTER +DBMS_ALERT.REMOVE +DBMS_ALERT.REMOVEALL +DBMS_ALERT.SET_DEFAULTS +DBMS_ALERT.SIGNAL +DBMS_ALERT.WAITANY +DBMS_ALERT.WAITONE +DBMS_ALERT_INFO +DBMS_APBACKEND. +DBMS_APBACKEND.CHECK_VALID_TBS +DBMS_APBACKEND.CLEANUPUNUSEDBACKUPFILES +DBMS_APBACKEND.DELETECONTENT +DBMS_APBACKEND.DELETECONTENTAT +DBMS_APBACKEND.DEREGSTORECOMMAND +DBMS_APBACKEND.DROPSTORE +DBMS_APBACKEND.EXISTSFILE +DBMS_APBACKEND.GETARCHIVEREFID +DBMS_APBACKEND.GETCOMPRESSIONLEVEL +DBMS_APBACKEND.GETCONTENT +DBMS_APBACKEND.GETSTAGINGAREALOCATOR +DBMS_APBACKEND.GETSTORECONTENTSIZE +DBMS_APBACKEND.GETSTOREID +DBMS_APBACKEND.GETSTOREPROPERTY +DBMS_APBACKEND.GETTARBALLID +DBMS_APBACKEND.IMPORTREFERENCE +DBMS_APBACKEND.ISAPDEBUGON +DBMS_APBACKEND.ISREADABLEONLY +DBMS_APBACKEND.REGISTERSTORECOMMAND +DBMS_APBACKEND.REGISTERSTOREOWNER +DBMS_APBACKEND.SENDCOMMAND +DBMS_APBACKEND.SETSTOREPROPERTY +DBMS_APBACKEND.STOREPUSH +DBMS_APBACKEND.WRITECONTENT +DBMS_APPLICATION_INFO. +DBMS_APPLICATION_INFO.READ_CLIENT_INFO +DBMS_APPLICATION_INFO.READ_MODULE +DBMS_APPLICATION_INFO.SET_ACTION +DBMS_APPLICATION_INFO.SET_CLIENT_INFO +DBMS_APPLICATION_INFO.SET_MODULE +DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS +DBMS_APPLY_ADM. +DBMS_APPLY_ADM.ADD_STMT_HANDLER +DBMS_APPLY_ADM.ALTER_APPLY +DBMS_APPLY_ADM.COMPARE_OLD_VALUES +DBMS_APPLY_ADM.CREATE_APPLY +DBMS_APPLY_ADM.CREATE_OBJECT_DEPENDENCY +DBMS_APPLY_ADM.DELETE_ALL_ERRORS +DBMS_APPLY_ADM.DELETE_ERROR +DBMS_APPLY_ADM.DROP_APPLY +DBMS_APPLY_ADM.DROP_OBJECT_DEPENDENCY +DBMS_APPLY_ADM.EXECUTE_ALL_ERRORS +DBMS_APPLY_ADM.EXECUTE_ERROR +DBMS_APPLY_ADM.GET_ERROR_MESSAGE +DBMS_APPLY_ADM.HANDLE_COLLISIONS +DBMS_APPLY_ADM.REMOVE_STMT_HANDLER +DBMS_APPLY_ADM.SET_CHANGE_HANDLER +DBMS_APPLY_ADM.SET_DML_CONFLICT_HANDLER +DBMS_APPLY_ADM.SET_DML_HANDLER +DBMS_APPLY_ADM.SET_ENQUEUE_DESTINATION +DBMS_APPLY_ADM.SET_EXECUTE +DBMS_APPLY_ADM.SET_GLOBAL_INSTANTIATION_SCN +DBMS_APPLY_ADM.SET_KEY_COLUMNS +DBMS_APPLY_ADM.SET_PARAMETER +DBMS_APPLY_ADM.SET_REPERROR_HANDLER +DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN +DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN +DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER +DBMS_APPLY_ADM.SET_VALUE_DEPENDENCY +DBMS_APPLY_ADM.START_APPLY +DBMS_APPLY_ADM.STOP_APPLY +DBMS_APPLY_ADM_INTERNAL. +DBMS_APPLY_ADM_INTERNAL.ADD_OBJECT_CONSTRAINT +DBMS_APPLY_ADM_INTERNAL.ALTER_APPLY +DBMS_APPLY_ADM_INTERNAL.ALTER_MONITOR_JOB +DBMS_APPLY_ADM_INTERNAL.ALTER_OBJECT_ERROR_NOTIFIER +DBMS_APPLY_ADM_INTERNAL.COMPARE_OLD_VALUES_INNER +DBMS_APPLY_ADM_INTERNAL.CREATE_APPLY +DBMS_APPLY_ADM_INTERNAL.DROP_APPLY +DBMS_APPLY_ADM_INTERNAL.DROP_APPLY_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.DROP_OBJECT_CONSTRAINT +DBMS_APPLY_ADM_INTERNAL.GET_APPLY_FROM_TXN_ID +DBMS_APPLY_ADM_INTERNAL.HANDLE_COLLISIONS +DBMS_APPLY_ADM_INTERNAL.INVALIDATE_DEST_OBJ +DBMS_APPLY_ADM_INTERNAL.INVALIDATE_TABLE_OBJECT +DBMS_APPLY_ADM_INTERNAL.MONITOR_APPLY_PROGRESS +DBMS_APPLY_ADM_INTERNAL.POPULATE_APPLY_PROGRESS +DBMS_APPLY_ADM_INTERNAL.POPULATE_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.REGISTER_REMOTE_OBJECT +DBMS_APPLY_ADM_INTERNAL.RESET_CONFIGURATION +DBMS_APPLY_ADM_INTERNAL.SET_CHANGE_HANDLER +DBMS_APPLY_ADM_INTERNAL.SET_CONSTRAINT_COLUMNS +DBMS_APPLY_ADM_INTERNAL.SET_DML_CONFLICT_HANDLER +DBMS_APPLY_ADM_INTERNAL.SET_REPERROR_HANDLER +DBMS_APPLY_ADM_INTERNAL.SET_UPDATE_CONFLICT_HANDLER +DBMS_APPLY_ADM_INTERNAL.SYNC_PDB_PARTITIONS +DBMS_APPLY_ADM_INTERNAL.UNPICKLE_APPLY_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.UNPICKLE_LSBY_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.UNPICKLE_PROGRESS_REDO_META +DBMS_APPLY_ADM_INTERNAL.VALIDATE_REMOTE_COLUMN +DBMS_APPLY_ADM_IVK. +DBMS_APPLY_ADM_IVK.CREATE_APPLY_IVK +DBMS_APPLY_ERROR. +DBMS_APPLY_ERROR.DELETE_ALL_ERRORS +DBMS_APPLY_ERROR.DELETE_ERROR +DBMS_APPLY_ERROR.EXECUTE_ALL_ERRORS +DBMS_APPLY_ERROR.EXECUTE_ERROR +DBMS_APPLY_ERROR.GET_ERROR_MESSAGE +DBMS_APPLY_ERROR.PROCESS_USER_PROPERTIES +DBMS_APPLY_HANDLER_ADM. +DBMS_APPLY_HANDLER_ADM.ADD_STMT_HANDLER +DBMS_APPLY_HANDLER_ADM.REMOVE_STMT_HANDLER +DBMS_APPLY_HANDLER_ADM.SET_STMT_HANDLER +DBMS_APPLY_HANDLER_INTERNAL. +DBMS_APPLY_HANDLER_INTERNAL.ADD_STMT_HANDLER +DBMS_APPLY_HANDLER_INTERNAL.REMOVE_STMT_HANDLER +DBMS_APPLY_POSITION. +DBMS_APPLY_POSITION.GET_EXTERNAL_POSITION +DBMS_APPLY_POSITION.SET_GLOBAL_INSTANTIATION_SCN +DBMS_APPLY_POSITION.SET_SCHEMA_INSTANTIATION_SCN +DBMS_APPLY_POSITION.SET_TABLE_INSTANTIATION_SCN +DBMS_APPLY_PROCESS. +DBMS_APPLY_PROCESS.GET_APPLY# +DBMS_APP_CONT. +DBMS_APP_CONT.GET_LTXID_OUTCOME +DBMS_APP_CONT_PRVT. +DBMS_APP_CONT_PRVT.BEGIN_REPLAY +DBMS_APP_CONT_PRVT.END_REPLAY +DBMS_APP_CONT_PRVT.MONITOR_TXN +DBMS_APP_CONT_PRVT.PARTITION_EXISTS +DBMS_APP_CONT_PRVT.PREPARE_REPLAY +DBMS_AQ. +DBMS_AQ.AQ$_DELETE_DIOT_TAB +DBMS_AQ.AQ$_DELETE_HIST_TAB +DBMS_AQ.AQ$_DEQUEUE +DBMS_AQ.AQ$_ENQUEUE +DBMS_AQ.AQ$_INSERT_DIOT_TAB +DBMS_AQ.AQ$_INSERT_HIST_TAB +DBMS_AQ.AQ$_UPDATE_HIST_TAB +DBMS_AQ.BIND_AGENT +DBMS_AQ.DEQUEUE +DBMS_AQ.DEQUEUE_ARRAY +DBMS_AQ.ENQUEUE +DBMS_AQ.ENQUEUE_ARRAY +DBMS_AQ.LISTEN +DBMS_AQ.POST +DBMS_AQ.REGISTER +DBMS_AQ.UNBIND_AGENT +DBMS_AQ.UNREGISTER +DBMS_AQADM. +DBMS_AQADM.ADD_ALIAS_TO_LDAP +DBMS_AQADM.ADD_CONNECTION_TO_LDAP +DBMS_AQADM.ADD_SUBSCRIBER +DBMS_AQADM.ALTER_AQ_AGENT +DBMS_AQADM.ALTER_PROPAGATION_SCHEDULE +DBMS_AQADM.ALTER_QUEUE +DBMS_AQADM.ALTER_QUEUE_TABLE +DBMS_AQADM.ALTER_SUBSCRIBER +DBMS_AQADM.AQ$_PROPAQ +DBMS_AQADM.CREATE_AQ_AGENT +DBMS_AQADM.CREATE_NP_QUEUE +DBMS_AQADM.CREATE_QUEUE +DBMS_AQADM.CREATE_QUEUE_TABLE +DBMS_AQADM.CREATE_SHARDED_QUEUE +DBMS_AQADM.DEL_ALIAS_FROM_LDAP +DBMS_AQADM.DEL_CONNECTION_FROM_LDAP +DBMS_AQADM.DISABLE_DB_ACCESS +DBMS_AQADM.DISABLE_PROPAGATION_SCHEDULE +DBMS_AQADM.DROP_AQ_AGENT +DBMS_AQADM.DROP_QUEUE +DBMS_AQADM.DROP_QUEUE_TABLE +DBMS_AQADM.DROP_SHARDED_QUEUE +DBMS_AQADM.ENABLE_DB_ACCESS +DBMS_AQADM.ENABLE_JMS_TYPES +DBMS_AQADM.ENABLE_PROPAGATION_SCHEDULE +DBMS_AQADM.GET_MAX_STREAMS_POOL +DBMS_AQADM.GET_MIN_STREAMS_POOL +DBMS_AQADM.GET_PROP_SEQNO +DBMS_AQADM.GET_REPLAY_INFO +DBMS_AQADM.GET_TYPE_INFO +DBMS_AQADM.GET_WATERMARK +DBMS_AQADM.GRANT_QUEUE_PRIVILEGE +DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE +DBMS_AQADM.GRANT_TYPE_ACCESS +DBMS_AQADM.MIGRATE_QUEUE_TABLE +DBMS_AQADM.NONREPUDIATE_RECEIVER +DBMS_AQADM.NONREPUDIATE_SENDER +DBMS_AQADM.PURGE_QUEUE_TABLE +DBMS_AQADM.QUEUE_SUBSCRIBERS +DBMS_AQADM.RECOVER_PROPAGATION +DBMS_AQADM.REMOVE_SUBSCRIBER +DBMS_AQADM.RESET_REPLAY_INFO +DBMS_AQADM.REVOKE_QUEUE_PRIVILEGE +DBMS_AQADM.REVOKE_SYSTEM_PRIVILEGE +DBMS_AQADM.SCHEDULE_PROPAGATION +DBMS_AQADM.SET_MAX_STREAMS_POOL +DBMS_AQADM.SET_MIN_STREAMS_POOL +DBMS_AQADM.SET_WATERMARK +DBMS_AQADM.START_QUEUE +DBMS_AQADM.START_TIME_MANAGER +DBMS_AQADM.STOP_QUEUE +DBMS_AQADM.STOP_TIME_MANAGER +DBMS_AQADM.UNSCHEDULE_PROPAGATION +DBMS_AQADM.VERIFY_QUEUE_TYPES +DBMS_AQADM.VERIFY_QUEUE_TYPES_GET_NRP +DBMS_AQADM.VERIFY_QUEUE_TYPES_NO_QUEUE +DBMS_AQADM_INV. +DBMS_AQADM_INV.EXECUTE_STMT +DBMS_AQADM_INV.EXECUTE_STMT2 +DBMS_AQADM_SYS. +DBMS_AQADM_SYS.ADD_ALIAS_TO_LDAP +DBMS_AQADM_SYS.ADD_BUFFER +DBMS_AQADM_SYS.ADD_BUFFER_INT +DBMS_AQADM_SYS.ADD_BUFFER_TABLES +DBMS_AQADM_SYS.ADD_BUFFER_TABLES_INT +DBMS_AQADM_SYS.ADD_CONNECTION_TO_LDAP +DBMS_AQADM_SYS.ADD_DB_LINK +DBMS_AQADM_SYS.ADD_NONDURABLE_SUBSCRIBER +DBMS_AQADM_SYS.ADD_QTAB_EXPDEP +DBMS_AQADM_SYS.ADD_QUEUE_TAB_TO_LDAP +DBMS_AQADM_SYS.ADD_QUEUE_TO_LDAP +DBMS_AQADM_SYS.ADD_SPILLED_IOT +DBMS_AQADM_SYS.ADD_SPILLED_TABLE +DBMS_AQADM_SYS.ADD_SUBSCRIBER +DBMS_AQADM_SYS.ADD_SUBSCRIBER_11G +DBMS_AQADM_SYS.ADD_SUBSCRIBER_TO_LDAP +DBMS_AQADM_SYS.ALTER_AQ_AGENT +DBMS_AQADM_SYS.ALTER_PROPAGATION_SCHEDULE_INT +DBMS_AQADM_SYS.ALTER_QUEUE +DBMS_AQADM_SYS.ALTER_QUEUE_INT +DBMS_AQADM_SYS.ALTER_QUEUE_TABLE +DBMS_AQADM_SYS.ALTER_QUEUE_TABLE_INT +DBMS_AQADM_SYS.ALTER_SUBSCRIBER +DBMS_AQADM_SYS.ALTER_SUBSCRIBER_11G +DBMS_AQADM_SYS.AQ$_PROPAGATION_PROCEDURE +DBMS_AQADM_SYS.AQ$_PROPAQ +DBMS_AQADM_SYS.BFQ +DBMS_AQADM_SYS.CHK_QT_FLG +DBMS_AQADM_SYS.CLR_QT_FLG +DBMS_AQADM_SYS.CNF +DBMS_AQADM_SYS.COMPATIBLE_100 +DBMS_AQADM_SYS.COMPUTE_NAME +DBMS_AQADM_SYS.CREATE_AQ_AGENT +DBMS_AQADM_SYS.CREATE_BASE_VIEW +DBMS_AQADM_SYS.CREATE_BASE_VIEW10_1_0 +DBMS_AQADM_SYS.CREATE_BUFFER_VIEW +DBMS_AQADM_SYS.CREATE_BUFFER_VIEW101 +DBMS_AQADM_SYS.CREATE_DEQ_VIEW +DBMS_AQADM_SYS.CREATE_DEQ_VIEW_PRE11_2 +DBMS_AQADM_SYS.CREATE_NP_QUEUE +DBMS_AQADM_SYS.CREATE_NP_QUEUE_INT +DBMS_AQADM_SYS.CREATE_PLSQL_NOTIF_QUEUE +DBMS_AQADM_SYS.CREATE_PROP_VIEWS +DBMS_AQADM_SYS.CREATE_QT_DICTIONARY +DBMS_AQADM_SYS.CREATE_QUEUE +DBMS_AQADM_SYS.CREATE_QUEUE_INT +DBMS_AQADM_SYS.CREATE_QUEUE_TABLE_INT +DBMS_AQADM_SYS.CREATE_QUEUE_TABLE_TZ +DBMS_AQADM_SYS.CREATE_SHARDED_QUEUE +DBMS_AQADM_SYS.CREATE_SPILLED_TABLES_IOTS +DBMS_AQADM_SYS.CTQT +DBMS_AQADM_SYS.DELETE_FROM_DEQIOT +DBMS_AQADM_SYS.DELETE_MESSAGES_FOR_REMOVESUB +DBMS_AQADM_SYS.DEL_ALIAS_FROM_LDAP +DBMS_AQADM_SYS.DEL_CONNECTION_FROM_LDAP +DBMS_AQADM_SYS.DEL_QUEUE_FROM_LDAP +DBMS_AQADM_SYS.DEL_SUBSCRIBER_FROM_LDAP +DBMS_AQADM_SYS.DISABLE_DB_ACCESS +DBMS_AQADM_SYS.DISABLE_PROP_SCHEDULE_INT +DBMS_AQADM_SYS.DISABLE_REGISTRATION +DBMS_AQADM_SYS.DROP_AQ_AGENT +DBMS_AQADM_SYS.DROP_BUFFER +DBMS_AQADM_SYS.DROP_BUFFER_VIEW +DBMS_AQADM_SYS.DROP_QTAB_EXPDEP +DBMS_AQADM_SYS.DROP_QUEUE +DBMS_AQADM_SYS.DROP_QUEUE_INT +DBMS_AQADM_SYS.DROP_QUEUE_TABLE +DBMS_AQADM_SYS.DROP_QUEUE_TABLE_INT +DBMS_AQADM_SYS.DROP_QUEUE_TAB_FROM_LDAP +DBMS_AQADM_SYS.DROP_SHARDED_QUEUE +DBMS_AQADM_SYS.DROP_SPILLED_IOT +DBMS_AQADM_SYS.DROP_SPILLED_TABLE +DBMS_AQADM_SYS.DUMP_TRACE +DBMS_AQADM_SYS.ENABLE_DB_ACCESS +DBMS_AQADM_SYS.ENABLE_JMS_TYPES +DBMS_AQADM_SYS.ENABLE_JMS_TYPES_INT +DBMS_AQADM_SYS.ENABLE_PROP_SCHEDULE_INT +DBMS_AQADM_SYS.ENABLE_REGISTRATION +DBMS_AQADM_SYS.FAILOVER_NOTIF_QUEUE +DBMS_AQADM_SYS.GET_ADT_QTABLE_PAYLOAD_NAME +DBMS_AQADM_SYS.GET_CLIENT_SESSION_ID +DBMS_AQADM_SYS.GET_PROCNAME +DBMS_AQADM_SYS.GET_PROP_SEQNO +DBMS_AQADM_SYS.GET_QUEUE_TABLE_NAME +DBMS_AQADM_SYS.GET_REMOTE_QTYPE_INFO_TTC +DBMS_AQADM_SYS.GET_SCHEMA_OID +DBMS_AQADM_SYS.GET_SEQ_NXTVAL +DBMS_AQADM_SYS.GET_TRANS_INFO +DBMS_AQADM_SYS.GET_TYPE_INFO +DBMS_AQADM_SYS.GRANT_QUEUE_PRIVILEGE +DBMS_AQADM_SYS.GRANT_QUEUE_PRIVILEGE_INT +DBMS_AQADM_SYS.GRANT_SYSTEM_PRIVILEGE +DBMS_AQADM_SYS.GRANT_TYPE_ACCESS +DBMS_AQADM_SYS.IMPPEND_FLAG_CLEAR +DBMS_AQADM_SYS.IN_DATAPUMP_IMPORT +DBMS_AQADM_SYS.IS12GJMSQUEUE +DBMS_AQADM_SYS.IS12GSHARDEDQUEUE +DBMS_AQADM_SYS.ISALIVE +DBMS_AQADM_SYS.I_BIND_AGENT +DBMS_AQADM_SYS.I_CREATE_QT +DBMS_AQADM_SYS.I_UNBIND_AGENT +DBMS_AQADM_SYS.KWQAQPDHASLOB +DBMS_AQADM_SYS.MATCH_TDS +DBMS_AQADM_SYS.MCQ +DBMS_AQADM_SYS.MCQ_12G +DBMS_AQADM_SYS.MCQ_12GJMS +DBMS_AQADM_SYS.MCQ_8_0 +DBMS_AQADM_SYS.MCQ_8_1 +DBMS_AQADM_SYS.MIGRATE_QUEUE_TABLE +DBMS_AQADM_SYS.MIGRATE_QUEUE_TABLE_INT +DBMS_AQADM_SYS.MOD_QUEUE_IN_LDAP +DBMS_AQADM_SYS.MOD_QUEUE_TAB_IN_LDAP +DBMS_AQADM_SYS.MOD_SUBSCRIBER_IN_LDAP +DBMS_AQADM_SYS.NEWQ_10_1 +DBMS_AQADM_SYS.NEWQ_12G +DBMS_AQADM_SYS.NEWQ_8_1 +DBMS_AQADM_SYS.OBJECT_EXISTS +DBMS_AQADM_SYS.PARSE_NAME +DBMS_AQADM_SYS.PATCH_DEQUEUE_IOT +DBMS_AQADM_SYS.PATCH_HISTORY_IOT +DBMS_AQADM_SYS.PATCH_QUEUE_TABLE +DBMS_AQADM_SYS.PATCH_TIMEMGR_IOT +DBMS_AQADM_SYS.PRS_CMT +DBMS_AQADM_SYS.PRS_QTYP +DBMS_AQADM_SYS.PRS_RBK +DBMS_AQADM_SYS.PRS_SEQ +DBMS_AQADM_SYS.PURGE_QUEUE_TABLE +DBMS_AQADM_SYS.PURGE_QUEUE_TABLE_INT +DBMS_AQADM_SYS.QT_BUFQ_COUNT +DBMS_AQADM_SYS.QUEUE_SUBSCRIBERS +DBMS_AQADM_SYS.RECOVER_PROPAGATION_INT +DBMS_AQADM_SYS.REGISTER_DRIVER +DBMS_AQADM_SYS.REGISTRATION_REPLICATION +DBMS_AQADM_SYS.REMOVE_ALL_NONDURABLESUB +DBMS_AQADM_SYS.REMOVE_DB_LINK +DBMS_AQADM_SYS.REMOVE_NONDURABLESUB_CLIENT +DBMS_AQADM_SYS.REMOVE_NONDURABLE_DBSESSION +DBMS_AQADM_SYS.REMOVE_ORPHMSGS +DBMS_AQADM_SYS.REMOVE_SUBSCRIBER +DBMS_AQADM_SYS.REMOVE_SUBSCRIBER_11G +DBMS_AQADM_SYS.REVOKE_QUEUE_PRIVILEGE +DBMS_AQADM_SYS.REVOKE_QUEUE_PRIVILEGE_INT +DBMS_AQADM_SYS.REVOKE_SYSTEM_PRIVILEGE +DBMS_AQADM_SYS.RULESET_EXISTS +DBMS_AQADM_SYS.SCHEDULE_PROPAGATION +DBMS_AQADM_SYS.SCHEDULE_PROPAGATION_INT +DBMS_AQADM_SYS.SCQ_8_0 +DBMS_AQADM_SYS.SCQ_8_1 +DBMS_AQADM_SYS.SECURE_QT +DBMS_AQADM_SYS.START_QUEUE +DBMS_AQADM_SYS.START_QUEUE_INT +DBMS_AQADM_SYS.STOP_QUEUE +DBMS_AQADM_SYS.STOP_QUEUE_INT +DBMS_AQADM_SYS.TGQ +DBMS_AQADM_SYS.THROW_ERROR +DBMS_AQADM_SYS.TRANSFORMATION_EXISTS +DBMS_AQADM_SYS.UNSCHEDULE_PROPAGATION +DBMS_AQADM_SYS.UNSCHEDULE_PROPAGATION_INT +DBMS_AQADM_SYS.VALIDATE_QTAB_QUEUES +DBMS_AQADM_SYS.VALIDATE_QUEUE +DBMS_AQADM_SYS.VERIFY_AQ_TIMEZONE +DBMS_AQADM_SYS.VERIFY_QUEUE_TYPES +DBMS_AQADM_SYS.WRAPPER_CREATE_DEQUEUE_LOG +DBMS_AQADM_SYS.WRITE_TRACE +DBMS_AQADM_SYSCALLS. +DBMS_AQADM_SYSCALLS.GET_MAX_STREAMS_POOL +DBMS_AQADM_SYSCALLS.GET_MIN_STREAMS_POOL +DBMS_AQADM_SYSCALLS.GET_OWNER_INSTANCE +DBMS_AQADM_SYSCALLS.GET_WATERMARK +DBMS_AQADM_SYSCALLS.KWQA_3GL_ADDSUBSCRIBER +DBMS_AQADM_SYSCALLS.KWQA_3GL_ALTERCACHEOBJECT +DBMS_AQADM_SYSCALLS.KWQA_3GL_ALTERQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_ALTERSUBSCRIBER +DBMS_AQADM_SYSCALLS.KWQA_3GL_BEGINTRANS +DBMS_AQADM_SYSCALLS.KWQA_3GL_CHECKQUEPRIV +DBMS_AQADM_SYSCALLS.KWQA_3GL_CHECKSYSPRIV +DBMS_AQADM_SYSCALLS.KWQA_3GL_CREATECACHEOBJECT +DBMS_AQADM_SYSCALLS.KWQA_3GL_CREATEQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_CREATEQUEUE_12G +DBMS_AQADM_SYSCALLS.KWQA_3GL_DESTROYCACHEOBJECT +DBMS_AQADM_SYSCALLS.KWQA_3GL_DMPESTACK +DBMS_AQADM_SYSCALLS.KWQA_3GL_DROPQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_DROPREGISTRATIONS +DBMS_AQADM_SYSCALLS.KWQA_3GL_ENDTRANS +DBMS_AQADM_SYSCALLS.KWQA_3GL_EVENTLEVEL +DBMS_AQADM_SYSCALLS.KWQA_3GL_EXECUTESTMT +DBMS_AQADM_SYSCALLS.KWQA_3GL_FIND_DATE +DBMS_AQADM_SYSCALLS.KWQA_3GL_GRANT +DBMS_AQADM_SYSCALLS.KWQA_3GL_INVALIDATEQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_IS12GQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_ISSTREAMSCAPTUREOFF +DBMS_AQADM_SYSCALLS.KWQA_3GL_ISTTSIMPORT +DBMS_AQADM_SYSCALLS.KWQA_3GL_LOCKQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_LOCKQUEUETABLE +DBMS_AQADM_SYSCALLS.KWQA_3GL_MARK_INTERNAL_TABLES +DBMS_AQADM_SYSCALLS.KWQA_3GL_NFYNOI +DBMS_AQADM_SYSCALLS.KWQA_3GL_NTFNTRCCHK +DBMS_AQADM_SYSCALLS.KWQA_3GL_PARSEAQNAME +DBMS_AQADM_SYSCALLS.KWQA_3GL_PRINTREMSUBLIST +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGEREMSUBLIST +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGESCHEMASUBTAB +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGE_CBK_OBJ +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGE_QUEUE_TABLE +DBMS_AQADM_SYSCALLS.KWQA_3GL_QT_COMPAT +DBMS_AQADM_SYSCALLS.KWQA_3GL_REMOVESUBSCRIBER +DBMS_AQADM_SYSCALLS.KWQA_3GL_REVOKE +DBMS_AQADM_SYSCALLS.KWQA_3GL_SCHEDULETMSERVICE +DBMS_AQADM_SYSCALLS.KWQA_3GL_SETMSGWAIT +DBMS_AQADM_SYSCALLS.KWQA_3GL_SETREGISTRATIONNAME +DBMS_AQADM_SYSCALLS.KWQA_3GL_SETSTREAMSCAPTUREOFF +DBMS_AQADM_SYSCALLS.KWQA_3GL_SET_TABLE_STATS_LOCK +DBMS_AQADM_SYSCALLS.KWQA_3GL_SET_VIEW_FLAG +DBMS_AQADM_SYSCALLS.KWQA_3GL_STARTQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_STOPQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_UPDKGQM +DBMS_AQADM_SYSCALLS.KWQA_3GL_VALIDATEQUEUE +DBMS_AQADM_SYSCALLS.SET_MAX_STREAMS_POOL +DBMS_AQADM_SYSCALLS.SET_MIN_STREAMS_POOL +DBMS_AQADM_SYSCALLS.SET_WATERMARK +DBMS_AQELM. +DBMS_AQELM.GET_MAILHOST +DBMS_AQELM.GET_MAILPORT +DBMS_AQELM.GET_PROXY +DBMS_AQELM.GET_SENDFROM +DBMS_AQELM.GET_TXTIMEOUT +DBMS_AQELM.HTTP_SEND +DBMS_AQELM.SEND_EMAIL +DBMS_AQELM.SET_MAILHOST +DBMS_AQELM.SET_MAILPORT +DBMS_AQELM.SET_PROXY +DBMS_AQELM.SET_SENDFROM +DBMS_AQIN. +DBMS_AQIN.AQ$_ALTER_QUEUE +DBMS_AQIN.AQ$_CREATE_QUEUE +DBMS_AQIN.AQ$_CREATE_QUEUE_TABLE +DBMS_AQIN.AQ$_DEQUEUE_IN +DBMS_AQIN.AQ$_DEQUEUE_RAW +DBMS_AQIN.AQ$_DROP_QUEUE +DBMS_AQIN.AQ$_DROP_QUEUE_TABLE +DBMS_AQIN.AQ$_ENQUEUE_OBJ +DBMS_AQIN.AQ$_ENQUEUE_OBJ_NO_RECPL +DBMS_AQIN.AQ$_ENQUEUE_RAW +DBMS_AQIN.AQ$_ENQUEUE_RAW_NO_RECPL +DBMS_AQIN.AQ$_GETBLOB_FROM_JMSANYDATA +DBMS_AQIN.AQ$_GETCLOB_FROM_JMSANYDATA +DBMS_AQIN.AQ$_JMS_ENQUEUE_BYTES_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_MAP_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_OBJECT_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_STREAM_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_TEXT_MESSAGE +DBMS_AQIN.AQ$_LISTEN +DBMS_AQIN.AQ$_QUEUE_SUBSCRIBERS +DBMS_AQIN.AQ$_REGISTER_IN +DBMS_AQIN.AQ$_START_QUEUE +DBMS_AQIN.AQ$_STOP_QUEUE +DBMS_AQIN.GET_DEQ_SORT +DBMS_AQIN.GET_MULTI_RETRY +DBMS_AQIN.SET_DEQ_SORT +DBMS_AQIN.SET_MULTI_RETRY +DBMS_AQJMS. +DBMS_AQJMS.AQ$_ADD_NONDURABLE_SUBSCRIBER +DBMS_AQJMS.AQ$_ADD_NONDURABLE_SUB_SQ +DBMS_AQJMS.AQ$_ADD_SUBSCRIBER +DBMS_AQJMS.AQ$_ALTER_SUBSCRIBER +DBMS_AQJMS.AQ$_DROPNONDURABLE_SUB_SQ +DBMS_AQJMS.AQ$_GET_PROP_STAT +DBMS_AQJMS.AQ$_GET_TRANS_TYPE +DBMS_AQJMS.AQ$_PR +DBMS_AQJMS.AQ$_PURGE_MESSAGE +DBMS_AQJMS.AQ$_REGISTER +DBMS_AQJMS.AQ$_REMOVE_SUBSCRIBER +DBMS_AQJMS.AQ$_REM_NONDURABLE_SUBSCRIBER +DBMS_AQJMS.AQ$_UNREGISTER +DBMS_AQJMS.AQ$_UPDATE_PROP_STAT +DBMS_AQJMS.AQ$_UPDATE_PROP_STAT_QNAME +DBMS_AQJMS.CLEAR_DBSESSION_GUID +DBMS_AQJMS.CLEAR_GLOBAL_AQCLNTDB_CTX_CLNT +DBMS_AQJMS.CLEAR_GLOBAL_AQCLNTDB_CTX_DB +DBMS_AQJMS.DEQUEUE_BYTE +DBMS_AQJMS.DEQUEUE_BYTES +DBMS_AQJMS.DEQUEUE_GENERIC +DBMS_AQJMS.DEQUEUE_MAP +DBMS_AQJMS.DEQUEUE_STREAM +DBMS_AQJMS.DEQUEUE_TEXT +DBMS_AQJMS.ENQUEUE_BYTES +DBMS_AQJMS.ENQUEUE_GENERIC +DBMS_AQJMS.ENQUEUE_MAP +DBMS_AQJMS.ENQUEUE_STREAM +DBMS_AQJMS.ENQUEUE_TEXT +DBMS_AQJMS.FETCHNONPERSDATA_12C_CALLOUT +DBMS_AQJMS.GET_DB_USERNAME_FOR_AGENT +DBMS_AQJMS.GET_NUMVAL +DBMS_AQJMS.GET_PTYPE +DBMS_AQJMS.GET_STRVAL +DBMS_AQJMS.SEARCH_BOOLEAN_PROPERTY +DBMS_AQJMS.SEARCH_DOUBLE_PROPERTY +DBMS_AQJMS.SEARCH_NUMBER_PROPERTY +DBMS_AQJMS.SEARCH_STRING_PROPERTY +DBMS_AQJMS.SET_DBSESSION_GUID +DBMS_AQJMS.SET_GLOBAL_AQCLNTDB_CTX +DBMS_AQJMS.SUBSCRIBER_EXISTS +DBMS_AQJMS_INTERNAL. +DBMS_AQJMS_INTERNAL.AQ$_GET_PROP_STAT +DBMS_AQJMS_INTERNAL.AQ$_GET_TRANS_TYPE +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_BYTES_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_MAP_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_OBJ_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_STR_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_TEXT_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_BYTES_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_MAP_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_OBJ_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_STR_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_TEXT_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_PURGE_MESSAGE +DBMS_AQJMS_INTERNAL.AQ$_UPDATE_PROP_STAT +DBMS_AQJMS_INTERNAL.DEQUEUE_12C_JMS_CALLOUT +DBMS_AQJMS_INTERNAL.ENQUEUE_12C_JMS_CALLOUT +DBMS_AQJMS_INTERNAL.ENQUEUE_JMS +DBMS_AQJMS_INTERNAL.GET_DB_USERNAME_FOR_AGENT +DBMS_AQ_BQVIEW. +DBMS_AQ_BQVIEW.GET_ADT_PAYLOAD +DBMS_AQ_BQVIEW.GET_OPAQUE_PAYLOAD +DBMS_AQ_BQVIEW.GET_RAW_PAYLOAD +DBMS_AQ_EXP_CMT_TIME_TABLES. +DBMS_AQ_EXP_CMT_TIME_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_DEQUEUELOG_TABLES. +DBMS_AQ_EXP_DEQUEUELOG_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_HISTORY_TABLES. +DBMS_AQ_EXP_HISTORY_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_INDEX_TABLES. +DBMS_AQ_EXP_INDEX_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_QUEUES. +DBMS_AQ_EXP_QUEUES.AUDIT_EXP +DBMS_AQ_EXP_QUEUES.AUDIT_SYSPRIVS_EXP +DBMS_AQ_EXP_QUEUES.CREATE_EXP +DBMS_AQ_EXP_QUEUES.DROP_EXP +DBMS_AQ_EXP_QUEUES.GRANT_EXP +DBMS_AQ_EXP_QUEUES.GRANT_SYSPRIVS_EXP +DBMS_AQ_EXP_QUEUE_TABLES. +DBMS_AQ_EXP_QUEUE_TABLES.INSTANCE_CALLOUT +DBMS_AQ_EXP_QUEUE_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_QUEUE_TABLES.SCHEMA_CALLOUT +DBMS_AQ_EXP_QUEUE_TABLES.SCHEMA_INFO_EXP +DBMS_AQ_EXP_SIGNATURE_TABLES. +DBMS_AQ_EXP_SIGNATURE_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_SUBSCRIBER_TABLES. +DBMS_AQ_EXP_SUBSCRIBER_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_TIMEMGR_TABLES. +DBMS_AQ_EXP_TIMEMGR_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_ZECURITY. +DBMS_AQ_EXP_ZECURITY.CHECK_EXPORT_PRIV +DBMS_AQ_IMPORT_INTERNAL. +DBMS_AQ_IMPORT_INTERNAL.AQ_DEFN_UPDATE +DBMS_AQ_IMPORT_INTERNAL.AQ_EXPORT_CHECK +DBMS_AQ_IMPORT_INTERNAL.AQ_EXPORT_IOT +DBMS_AQ_IMPORT_INTERNAL.AQ_EXPORT_SUBSCRIBER +DBMS_AQ_IMPORT_INTERNAL.AQ_IMPORT_IOT +DBMS_AQ_IMPORT_INTERNAL.AQ_IMPORT_SUBSCRIBER +DBMS_AQ_IMPORT_INTERNAL.AQ_TABLE_DEFN_UPDATE +DBMS_AQ_IMPORT_INTERNAL.AQ_TABLE_EXPORT_CHECK +DBMS_AQ_IMPORT_INTERNAL.CREATE_EXPACT_ENTRY +DBMS_AQ_IMPORT_INTERNAL.REMOVE_EXPACT_ENTRY +DBMS_AQ_IMP_INTERNAL. +DBMS_AQ_IMP_INTERNAL.BUMP_TID_SEQUENCE +DBMS_AQ_IMP_INTERNAL.CLEANUP_SCHEMA_IMPORT +DBMS_AQ_IMP_INTERNAL.IMPORT_CMT_TIME_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_DEQUEUELOG_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_HISTORY_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_INDEX_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_DQTMAP +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_META +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_QTMAP +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_SEQ +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_SHARDED_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_SHARDS +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_SUBS +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_SIGNATURE_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_SUBSCRIBER_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_TIMEMGR_TABLE +DBMS_AQ_IMP_ZECURITY. +DBMS_AQ_IMP_ZECURITY.CHECK_IMPORT_PRIV +DBMS_AQ_INV. +DBMS_AQ_INV.CREATE_PROC_BUFFERED_MCQ +DBMS_AQ_INV.CREATE_PROC_BUFFERED_SCQ +DBMS_AQ_INV.INTERNAL_PURGE_QUEUE_TABLE +DBMS_AQ_INV.PURGE_BUFFERED_MCQ_TABLE +DBMS_AQ_INV.PURGE_BUFFERED_SCQ_TABLE +DBMS_AQ_INV.PURGE_ELIGIBLE_RCPT_MESSAGES +DBMS_AQ_INV.PURGE_ELIGIBLE_RCPT_MSGS_TXN +DBMS_AQ_INV.PURGE_ELIGIBLE_SUB_MESSAGES +DBMS_AQ_INV.PURGE_ELIGIBLE_SUB_MSGS_TXN +DBMS_AQ_INV.PURGE_PERSISTENT_MCQ_TABLE +DBMS_AQ_INV.PURGE_PERSISTENT_SCQ_TABLE +DBMS_AQ_INV.PURGE_PROCEDURE_NAME +DBMS_AQ_SYS_EXP_ACTIONS. +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_AGENTS +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_QUEUE_META +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_QUEUE_SEQUENCE +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_QUEUE_SHARDED_TABLE +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_TABLE +DBMS_AQ_SYS_EXP_ACTIONS.POST_SCHEMA_CLEANUP +DBMS_AQ_SYS_EXP_INTERNAL. +DBMS_AQ_SYS_EXP_INTERNAL.APPENDBUF +DBMS_AQ_SYS_EXP_INTERNAL.COUNT_AQ_OBJECTS +DBMS_AQ_SYS_EXP_INTERNAL.DEREGISTER_PROCEDURAL_ACTION +DBMS_AQ_SYS_EXP_INTERNAL.DEREGISTER_PROCEDURAL_OBJECT +DBMS_AQ_SYS_EXP_INTERNAL.DOWNGRADE_EXPORT_ACTIONS +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_QUEUE +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_QUEUE_PRIVILEGE +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_QUEUE_TABLE +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_SYSTEM_PRIVILEGE +DBMS_AQ_SYS_EXP_INTERNAL.POPULATE_TTS_DQMAP +DBMS_AQ_SYS_EXP_INTERNAL.POPULATE_TTS_QTMAP +DBMS_AQ_SYS_EXP_INTERNAL.POPULATE_TTS_SHARDS +DBMS_AQ_SYS_EXP_INTERNAL.POPULATE_TTS_SUB +DBMS_AQ_SYS_EXP_INTERNAL.REGISTER_PROCEDURAL_ACTION +DBMS_AQ_SYS_EXP_INTERNAL.REGISTER_PROCEDURAL_OBJECT +DBMS_AQ_SYS_EXP_INTERNAL.TO_OWNERID +DBMS_AQ_SYS_EXP_INTERNAL.UPGRADE_EXPORT_ACTIONS +DBMS_AQ_SYS_IMP_INTERNAL. +DBMS_AQ_SYS_IMP_INTERNAL.BUMP_TID_SEQUENCE +DBMS_AQ_SYS_IMP_INTERNAL.CLEANUP_SCHEMA_IMPORT +DBMS_AQ_SYS_IMP_INTERNAL.CREATE_PMAP_DICTIONARY +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_CMT_TIME_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_DEQUEUELOG_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_EXP_ENTRY +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_HISTORY_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_INDEX_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QTAB_EXPDEP +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_DQTMAP +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_META +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_QTMAP +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_SEQ +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_SHARDED_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_SHARDS +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_SUBS +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_SIGNATURE_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_SUBSCRIBER_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_TIMEMGR_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IS_TTS_EXPORT +DBMS_AQ_SYS_IMP_INTERNAL.I_SHARDED_CALLOUT +DBMS_AQ_SYS_IMP_INTERNAL.POST_TTS_REBUILD_IDX +DBMS_AQ_SYS_IMP_INTERNAL.POST_TTS_WORK +DBMS_AQ_SYS_IMP_INTERNAL.POST_TTS_WORK_REMAINING +DBMS_ARCH_PROVIDER_INTL. +DBMS_ARCH_PROVIDER_INTL.APPENDCACHEJOURNAL +DBMS_ARCH_PROVIDER_INTL.APTRACE +DBMS_ARCH_PROVIDER_INTL.CREATEACCESSTBL +DBMS_ARCH_PROVIDER_INTL.CREATECACHESIZETBL +DBMS_ARCH_PROVIDER_INTL.CREATECJRNLTBL +DBMS_ARCH_PROVIDER_INTL.CREATEDELBFTBL +DBMS_ARCH_PROVIDER_INTL.CREATELRUENTRY +DBMS_ARCH_PROVIDER_INTL.CREATESTORETBLS +DBMS_ARCH_PROVIDER_INTL.CREATETARBALLTBL +DBMS_ARCH_PROVIDER_INTL.CREATETRACETBL +DBMS_ARCH_PROVIDER_INTL.DELETELRUENTRY +DBMS_ARCH_PROVIDER_INTL.DROPPROVIDERTABLES +DBMS_ARCH_PROVIDER_INTL.DROPSTORETBL +DBMS_ARCH_PROVIDER_INTL.DROPSTORETBLS +DBMS_ARCH_PROVIDER_INTL.GETLOBCACHEUSAGE +DBMS_ARCH_PROVIDER_INTL.GETSTOREGUID +DBMS_ARCH_PROVIDER_INTL.GETSTOREPROPERTY +DBMS_ARCH_PROVIDER_INTL.GETSTORETBLNAME +DBMS_ARCH_PROVIDER_INTL.GRANTSELECT +DBMS_ARCH_PROVIDER_INTL.REGISTERSTORE +DBMS_ARCH_PROVIDER_INTL.RENAMELRUENTRY +DBMS_ARCH_PROVIDER_INTL.RENAMELRUSUBENTRIES +DBMS_ARCH_PROVIDER_INTL.SETSTOREPROPERTY +DBMS_ARCH_PROVIDER_INTL.UNREGISTERSTORE +DBMS_ARCH_PROVIDER_INTL.UPDATEACCESSFORLRU +DBMS_ASH_INTERNAL. +DBMS_ASH_INTERNAL.ASH_PHASE_EXECUTION +DBMS_ASH_INTERNAL.ASH_ROLLUP_SQL_1D +DBMS_ASH_INTERNAL.ASH_ROLLUP_SQL_2D +DBMS_ASH_INTERNAL.ASH_ROLLUP_SQL_3D +DBMS_ASH_INTERNAL.ASH_ROLLUP_XML_1D +DBMS_ASH_INTERNAL.ASH_ROLLUP_XML_2D +DBMS_ASH_INTERNAL.ASH_SQL_FOR_AWR +DBMS_ASH_INTERNAL.ASH_VIEW_SQL +DBMS_ASH_INTERNAL.BUILD_ACTION_TAG +DBMS_ASH_INTERNAL.BUILD_DATABASE_HEADER_TAG +DBMS_ASH_INTERNAL.BUILD_EVENT_TAG +DBMS_ASH_INTERNAL.BUILD_SERVICE_MODULE_TAG +DBMS_ASH_INTERNAL.BUILD_SESSION_TAG +DBMS_ASH_INTERNAL.BUILD_SQL_TAG +DBMS_ASH_INTERNAL.FORMAT_PLSQL +DBMS_ASH_INTERNAL.GETPACKAGEVERSION +DBMS_ASH_INTERNAL.GET_ASH_HEADING +DBMS_ASH_INTERNAL.GET_BLKSID_ACTIVE +DBMS_ASH_INTERNAL.GET_BLKSID_DETAILS +DBMS_ASH_INTERNAL.GET_BLKSID_PROGRAM +DBMS_ASH_INTERNAL.GET_BLKSID_USER +DBMS_ASH_INTERNAL.GET_BLKSID_XIDS +DBMS_ASH_INTERNAL.GET_BLK_STR +DBMS_ASH_INTERNAL.GET_LATCH_NAME +DBMS_ASH_INTERNAL.GET_OBJ_NAME +DBMS_ASH_INTERNAL.GET_PLSQL_NAME +DBMS_ASH_INTERNAL.GET_SID_ACTIVE +DBMS_ASH_INTERNAL.GET_SID_STR +DBMS_ASH_INTERNAL.GET_SLOT_WIDTH +DBMS_ASH_INTERNAL.GET_SQLTEXT +DBMS_ASH_INTERNAL.GET_SQL_PLAN_INFO +DBMS_ASH_INTERNAL.GET_SQL_PLAN_PERC +DBMS_ASH_INTERNAL.GET_USER_NAME +DBMS_ASH_INTERNAL.INITIALIZE +DBMS_ASH_INTERNAL.IN_MEMORY_ASH_VIEW_SQL +DBMS_ASH_INTERNAL.ON_DISK_ASH_VIEW_SQL +DBMS_ASH_INTERNAL.REPORT_ASHVIEWER_XML +DBMS_ASH_INTERNAL.RUNREPORT +DBMS_ASH_INTERNAL.SAMPLE_TIME_TO_ID +DBMS_ASH_INTERNAL.SHRINK_STRING +DBMS_ASH_INTERNAL.SLOT_ID_TO_TIME +DBMS_ASH_INTERNAL.UNIFIED_DBA_FILES +DBMS_ASH_INTERNAL.UNIFIED_DBA_OBJECTS +DBMS_ASH_INTERNAL.UNIFIED_PLSQL_SUBPROGRAMS +DBMS_ASH_INTERNAL.UNIFIED_SERVICE_NAMES +DBMS_ASH_INTERNAL.UNIFIED_SQLSTAT +DBMS_ASSERT. +DBMS_ASSERT.ENQUOTE_LITERAL +DBMS_ASSERT.ENQUOTE_NAME +DBMS_ASSERT.NOOP +DBMS_ASSERT.QUALIFIED_SQL_NAME +DBMS_ASSERT.SCHEMA_NAME +DBMS_ASSERT.SIMPLE_SQL_NAME +DBMS_ASSERT.SQL_OBJECT_NAME +DBMS_ASYNCRPC_PUSH. +DBMS_ASYNCRPC_PUSH.CHECK_DATABASE_CAPABILITY +DBMS_ASYNCRPC_PUSH.ERROR_CALL_POSITION +DBMS_ASYNCRPC_PUSH.GET_CLOCK_TIME +DBMS_ASYNCRPC_PUSH.GET_SCN +DBMS_ASYNCRPC_PUSH.PROPAGATE_PARALLEL +DBMS_ASYNCRPC_PUSH.PROPAGATE_SERIAL +DBMS_ASYNCRPC_PUSH.PURGE_PARALLEL +DBMS_ASYNCRPC_PUSH.PUSH_PENDING_CALLS +DBMS_ASYNCRPC_PUSH.STAMP_QUEUE_BATCH +DBMS_ASYNCRPC_PUSH.UPDATE_PURGE_STATISTICS +DBMS_AUDIT_MGMT. +DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL +DBMS_AUDIT_MGMT.CLEAR_AUDIT_TRAIL_PROPERTY +DBMS_AUDIT_MGMT.CLEAR_LAST_ARCHIVE_TIMESTAMP +DBMS_AUDIT_MGMT.CREATE_PURGE_JOB +DBMS_AUDIT_MGMT.DEINIT_CLEANUP +DBMS_AUDIT_MGMT.DROP_OLD_UNIFIED_AUDIT_TABLES +DBMS_AUDIT_MGMT.DROP_PURGE_JOB +DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL +DBMS_AUDIT_MGMT.GET_AUDIT_COMMIT_DELAY +DBMS_AUDIT_MGMT.GET_AUDIT_TRAIL_PROPERTY_VALUE +DBMS_AUDIT_MGMT.GET_LAST_ARCHIVE_TIMESTAMP +DBMS_AUDIT_MGMT.INIT_CLEANUP +DBMS_AUDIT_MGMT.IS_CLEANUP_INITIALIZED +DBMS_AUDIT_MGMT.IS_CLEANUP_INITIALIZED2 +DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES +DBMS_AUDIT_MGMT.MOVE_DBAUDIT_TABLES +DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION +DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY +DBMS_AUDIT_MGMT.SET_DEBUG_LEVEL +DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP +DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL +DBMS_AUDIT_MGMT.SET_PURGE_JOB_STATUS +DBMS_AUTOTASK_PRVT. +DBMS_AUTOTASK_PRVT.ABA +DBMS_AUTOTASK_PRVT.AGE +DBMS_AUTOTASK_PRVT.GET_TASKS +DBMS_AUTOTASK_PRVT.SETUP +DBMS_AUTO_REPORT. +DBMS_AUTO_REPORT.FINISH_REPORT_CAPTURE +DBMS_AUTO_REPORT.FINISH_REPORT_CAPTURE_HELPER +DBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAIL +DBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAIL_XML +DBMS_AUTO_REPORT.REPORT_REPOSITORY_LIST_XML +DBMS_AUTO_REPORT.START_REPORT_CAPTURE +DBMS_AUTO_REPORT.START_REPORT_CAPTURE_HELPER +DBMS_AUTO_REPORT_INTERNAL. +DBMS_AUTO_REPORT_INTERNAL.I_SAVE_REPORT +DBMS_AUTO_REPORT_INTERNAL.I_UNCOMPRESS_REPORT +DBMS_AUTO_SQLTUNE. +DBMS_AUTO_SQLTUNE.EXECUTE_AUTO_TUNING_TASK +DBMS_AUTO_SQLTUNE.REPORT_AUTO_TUNING_TASK +DBMS_AUTO_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER +DBMS_AUTO_TASK. +DBMS_AUTO_TASK.CHECK_CLIENT_STATUS_OVERRIDE +DBMS_AUTO_TASK.DECODE_ATTRIBUTES +DBMS_AUTO_TASK.GET_CLIENT_STATUS_OVERRIDE +DBMS_AUTO_TASK.GET_SCHEDULE_DATE +DBMS_AUTO_TASK.RECONCILE_ATTRIBUTES +DBMS_AUTO_TASK.WINDOW_CALENDAR +DBMS_AUTO_TASK_ADMIN. +DBMS_AUTO_TASK_ADMIN.DEFAULT_RESET +DBMS_AUTO_TASK_ADMIN.DISABLE +DBMS_AUTO_TASK_ADMIN.ENABLE +DBMS_AUTO_TASK_ADMIN.GET_CLIENT_ATTRIBUTES +DBMS_AUTO_TASK_ADMIN.GET_P1_RESOURCES +DBMS_AUTO_TASK_ADMIN.OVERRIDE_PRIORITY +DBMS_AUTO_TASK_ADMIN.SET_ATTRIBUTE +DBMS_AUTO_TASK_ADMIN.SET_CLIENT_SERVICE +DBMS_AUTO_TASK_ADMIN.SET_P1_RESOURCES +DBMS_AUTO_TASK_EXPORT. +DBMS_AUTO_TASK_EXPORT.DOWNGRADE_FROM_11G +DBMS_AUTO_TASK_EXPORT.POST_UPGRADE_FROM_10G +DBMS_AUTO_TASK_EXPORT.SYSTEM_INFO_EXP +DBMS_AUTO_TASK_IMMEDIATE. +DBMS_AUTO_TASK_IMMEDIATE.GATHER_OPTIMIZER_STATS +DBMS_AW. +DBMS_AW.ADD_DIMENSION_SOURCE +DBMS_AW.ADVISE_CUBE +DBMS_AW.ADVISE_DIMENSIONALITY +DBMS_AW.ADVISE_PARTITIONING_DIMENSION +DBMS_AW.ADVISE_PARTITIONING_LEVEL +DBMS_AW.ADVISE_REL +DBMS_AW.ADVISE_SPARSITY +DBMS_AW.AW_ATTACH +DBMS_AW.AW_COPY +DBMS_AW.AW_CREATE +DBMS_AW.AW_DELETE +DBMS_AW.AW_DETACH +DBMS_AW.AW_IS_SYSTEM +DBMS_AW.AW_RENAME +DBMS_AW.AW_TABLESPACE +DBMS_AW.AW_UPDATE +DBMS_AW.CLEAN_ACCESS_TRACKING +DBMS_AW.CONVERT +DBMS_AW.DISABLE_ACCESS_TRACKING +DBMS_AW.EIF_BLOB_IN +DBMS_AW.EIF_BLOB_OUT +DBMS_AW.EIF_DELETE +DBMS_AW.EIF_IN +DBMS_AW.EIF_OUT +DBMS_AW.ENABLE_ACCESS_TRACKING +DBMS_AW.EVAL_NUMBER +DBMS_AW.EVAL_TEXT +DBMS_AW.EXECUTE +DBMS_AW.GATHER_STATS +DBMS_AW.GETLOG +DBMS_AW.GET_OBJ_PROTECT +DBMS_AW.INFILE +DBMS_AW.INITDRIVER +DBMS_AW.INTERP +DBMS_AW.INTERPCLOB +DBMS_AW.INTERP_SILENT +DBMS_AW.IN_AW_CLEANUP +DBMS_AW.MOVE_AWMETA +DBMS_AW.OLAP_ACTIVE +DBMS_AW.OLAP_ON +DBMS_AW.OLAP_RUNNING +DBMS_AW.OLAP_TYPE +DBMS_AW.PRINTLOG +DBMS_AW.PROP_CLOB +DBMS_AW.PROP_LEN +DBMS_AW.PROP_VAL +DBMS_AW.RUN +DBMS_AW.SHUTDOWN +DBMS_AW.SPARSITY_ADVICE_TABLE +DBMS_AW.STARTUP +DBMS_AW.TOGGLEDBCREATE +DBMS_AWR_REPORT_LAYOUT. +DBMS_AWR_REPORT_LAYOUT.ASH_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.ASH_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.AWRG_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.AWRG_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.AWR_BUILD_ASH_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.AWR_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.AWR_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DBFUS_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DBFUS_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DIFFG_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DIFFG_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DIFF_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DIFF_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.EXADATA_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.EXADATA_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.SQL_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.SQL_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.WCR_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.WCR_BUILD_REPORT_SECTIONS +DBMS_AW_EXP. +DBMS_AW_EXP.ALTER_LOB_SIZE +DBMS_AW_EXP.IMPORT_BEGIN100 +DBMS_AW_EXP.IMPORT_BEGIN112 +DBMS_AW_EXP.IMPORT_BEGIN120 +DBMS_AW_EXP.IMPORT_BEGIN92 +DBMS_AW_EXP.IMPORT_CALLOUT112 +DBMS_AW_EXP.IMPORT_CALLOUT120 +DBMS_AW_EXP.IMPORT_CHUNK100 +DBMS_AW_EXP.IMPORT_CHUNK112 +DBMS_AW_EXP.IMPORT_CHUNK120 +DBMS_AW_EXP.IMPORT_CHUNK92 +DBMS_AW_EXP.IMPORT_FINISH100 +DBMS_AW_EXP.IMPORT_FINISH112 +DBMS_AW_EXP.IMPORT_FINISH120 +DBMS_AW_EXP.IMPORT_FINISH92 +DBMS_AW_EXP.IMPORT_TABLE_CALLOUT120 +DBMS_AW_EXP.INSTANCE_CALLOUT_IMP +DBMS_AW_EXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_AW_EXP.LOB_WRITE +DBMS_AW_EXP.LOB_WRITEAPPEND +DBMS_AW_EXP.SCHEMA_CALLOUT +DBMS_AW_EXP.SCHEMA_INFO_EXP +DBMS_AW_EXP.TRANSPORTING +DBMS_AW_EXP.TRANS_BEGIN102 +DBMS_AW_EXP.TRANS_CHUNK102 +DBMS_AW_EXP.TRANS_FINISH102 +DBMS_AW_EXP.TRANS_FINISH112 +DBMS_AW_STATS. +DBMS_AW_STATS.ANALYZE +DBMS_AW_STATS.CLEAR +DBMS_AW_XML. +DBMS_AW_XML.EXECUTE +DBMS_AW_XML.EXECUTEFILE +DBMS_AW_XML.READAWMETADATA +DBMS_AW_XML.READAWMETADATA1 +DBMS_BACKUP_RESTORE. +DBMS_BACKUP_RESTORE.APPLYBACKUPPIECE +DBMS_BACKUP_RESTORE.APPLYDATAFILETO +DBMS_BACKUP_RESTORE.APPLYOFFLINERANGE +DBMS_BACKUP_RESTORE.APPLYSETDATAFILE +DBMS_BACKUP_RESTORE.AUTOBACKUPFLAG +DBMS_BACKUP_RESTORE.BACKUPARCHIVEDLOG +DBMS_BACKUP_RESTORE.BACKUPBACKUPPIECE +DBMS_BACKUP_RESTORE.BACKUPCANCEL +DBMS_BACKUP_RESTORE.BACKUPCONTROLFILE +DBMS_BACKUP_RESTORE.BACKUPDATAFILE +DBMS_BACKUP_RESTORE.BACKUPDATAFILECOPY +DBMS_BACKUP_RESTORE.BACKUPDMPFILE +DBMS_BACKUP_RESTORE.BACKUPPIECECREATE +DBMS_BACKUP_RESTORE.BACKUPPIECECRTDUPGET +DBMS_BACKUP_RESTORE.BACKUPPIECECRTDUPSET +DBMS_BACKUP_RESTORE.BACKUPPIECERESTORE +DBMS_BACKUP_RESTORE.BACKUPSETARCHIVEDLOG +DBMS_BACKUP_RESTORE.BACKUPSETDATAFILE +DBMS_BACKUP_RESTORE.BACKUPSPFILE +DBMS_BACKUP_RESTORE.BACKUPSTATUS +DBMS_BACKUP_RESTORE.BACKUPVALIDATE +DBMS_BACKUP_RESTORE.BCTSET +DBMS_BACKUP_RESTORE.BCTSWITCH +DBMS_BACKUP_RESTORE.BMRADDBLOCK +DBMS_BACKUP_RESTORE.BMRCANCEL +DBMS_BACKUP_RESTORE.BMRDOMEDIARECOVERY +DBMS_BACKUP_RESTORE.BMRGETFILE +DBMS_BACKUP_RESTORE.BMRINITIALSCAN +DBMS_BACKUP_RESTORE.BMRRESTOREFROMFLASHBACK +DBMS_BACKUP_RESTORE.BMRRESTOREFROMSTANDBY +DBMS_BACKUP_RESTORE.BMRSCANDATAFILECOPY +DBMS_BACKUP_RESTORE.BMRSTART +DBMS_BACKUP_RESTORE.CANKEEPDATAFILES +DBMS_BACKUP_RESTORE.CFILECALCSIZEARRAY +DBMS_BACKUP_RESTORE.CFILECALCSIZELIST +DBMS_BACKUP_RESTORE.CFILEMAKEANDUSESNAPSHOT +DBMS_BACKUP_RESTORE.CFILERESIZESECTION +DBMS_BACKUP_RESTORE.CFILESETSNAPSHOTNAME +DBMS_BACKUP_RESTORE.CFILEUSECOPY +DBMS_BACKUP_RESTORE.CFILEUSECURRENT +DBMS_BACKUP_RESTORE.CFILEUSESNAPSHOT +DBMS_BACKUP_RESTORE.CHANGEARCHIVEDLOG +DBMS_BACKUP_RESTORE.CHANGEBACKUPPIECE +DBMS_BACKUP_RESTORE.CHANGEBACKUPSET +DBMS_BACKUP_RESTORE.CHANGEDATAFILECOPY +DBMS_BACKUP_RESTORE.CHECKCOMPRESSIONALG +DBMS_BACKUP_RESTORE.CHECKFILENAME +DBMS_BACKUP_RESTORE.CLEANUPBACKUPRECORDS +DBMS_BACKUP_RESTORE.CLEANUPFOREIGNARCHIVEDLOGS +DBMS_BACKUP_RESTORE.CLEANUPPGACONTEXT +DBMS_BACKUP_RESTORE.CLEARCONTROLFILE +DBMS_BACKUP_RESTORE.CLEARONLINELOGNAMES +DBMS_BACKUP_RESTORE.CLEARRECOVERYDESTFLAG +DBMS_BACKUP_RESTORE.CLEARUNARCHIVEDLOGS +DBMS_BACKUP_RESTORE.COMMITRMANSTATUSROW +DBMS_BACKUP_RESTORE.CONVERTDATAFILECOPY +DBMS_BACKUP_RESTORE.CONVERTFILENAME +DBMS_BACKUP_RESTORE.COPYARCHIVEDLOG +DBMS_BACKUP_RESTORE.COPYCONTROLFILE +DBMS_BACKUP_RESTORE.COPYDATAFILE +DBMS_BACKUP_RESTORE.COPYDATAFILECOPY +DBMS_BACKUP_RESTORE.CREATEDATAFILE +DBMS_BACKUP_RESTORE.CREATEFRAAUXCFCOPY +DBMS_BACKUP_RESTORE.CREATEFRAAUXDFCOPY +DBMS_BACKUP_RESTORE.CREATERESTOREPOINT +DBMS_BACKUP_RESTORE.CREATERMANOUTPUTROW +DBMS_BACKUP_RESTORE.CREATERMANSTATUSROW +DBMS_BACKUP_RESTORE.CROSSCHECKBACKUPPIECE +DBMS_BACKUP_RESTORE.DBA2RFNO +DBMS_BACKUP_RESTORE.DELETEARCHIVEDLOG +DBMS_BACKUP_RESTORE.DELETEBACKUPPIECE +DBMS_BACKUP_RESTORE.DELETECONFIG +DBMS_BACKUP_RESTORE.DELETEDATAFILECOPY +DBMS_BACKUP_RESTORE.DELETED_GETDBINFO +DBMS_BACKUP_RESTORE.DELETEFILE +DBMS_BACKUP_RESTORE.DEVICEALLOCATE +DBMS_BACKUP_RESTORE.DEVICECOMMAND +DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE +DBMS_BACKUP_RESTORE.DEVICEQUERY +DBMS_BACKUP_RESTORE.DEVICESTATUS +DBMS_BACKUP_RESTORE.DOAUTOBACKUP +DBMS_BACKUP_RESTORE.DUPLICATEFILEEXISTS +DBMS_BACKUP_RESTORE.FAULT_INJECTOR +DBMS_BACKUP_RESTORE.FETCHFILERESTORED +DBMS_BACKUP_RESTORE.FINDAUTSEARCHFILETABLE +DBMS_BACKUP_RESTORE.FLASHBACKADDFILE +DBMS_BACKUP_RESTORE.FLASHBACKCANCEL +DBMS_BACKUP_RESTORE.FLASHBACKCONTROLFILE +DBMS_BACKUP_RESTORE.FLASHBACKFILES +DBMS_BACKUP_RESTORE.FLASHBACKSTART +DBMS_BACKUP_RESTORE.GENPIECENAME +DBMS_BACKUP_RESTORE.GENTRANSPORTSCRIPT +DBMS_BACKUP_RESTORE.GETARCFILENAME +DBMS_BACKUP_RESTORE.GETBLOCKSTAT +DBMS_BACKUP_RESTORE.GETCKPT +DBMS_BACKUP_RESTORE.GETCKPTSCN +DBMS_BACKUP_RESTORE.GETCNCTSTR +DBMS_BACKUP_RESTORE.GETDEFAULTTAG +DBMS_BACKUP_RESTORE.GETDISKGROUPNAME +DBMS_BACKUP_RESTORE.GETDUPLICATEDDATAFILECOPY +DBMS_BACKUP_RESTORE.GETFNO +DBMS_BACKUP_RESTORE.GETLIMIT +DBMS_BACKUP_RESTORE.GETMAXINFO +DBMS_BACKUP_RESTORE.GETOMFFILENAME +DBMS_BACKUP_RESTORE.GETPARM +DBMS_BACKUP_RESTORE.GETPRIMARYCONSTR +DBMS_BACKUP_RESTORE.GETSTANDBYCONSTR +DBMS_BACKUP_RESTORE.GETTSNAMEFROMDATAFILECOPY +DBMS_BACKUP_RESTORE.GETXTTSNAME +DBMS_BACKUP_RESTORE.GET_CONNECT_IDENTIFIER +DBMS_BACKUP_RESTORE.INCRARCHIVEDLOGBACKUPCOUNT +DBMS_BACKUP_RESTORE.INCREMENTRECORDSTAMP +DBMS_BACKUP_RESTORE.INITFRAMETADATA +DBMS_BACKUP_RESTORE.INITMSB +DBMS_BACKUP_RESTORE.INITMSC +DBMS_BACKUP_RESTORE.INITMSR +DBMS_BACKUP_RESTORE.INITNAMESPACE +DBMS_BACKUP_RESTORE.INSPECTARCHIVEDLOG +DBMS_BACKUP_RESTORE.INSPECTARCHIVEDLOGSEQ +DBMS_BACKUP_RESTORE.INSPECTBACKUPPIECE +DBMS_BACKUP_RESTORE.INSPECTCONTROLFILE +DBMS_BACKUP_RESTORE.INSPECTDATAFILECOPY +DBMS_BACKUP_RESTORE.IR_ICD_FINISH +DBMS_BACKUP_RESTORE.IR_ICD_START +DBMS_BACKUP_RESTORE.ISFILENAMEOMF +DBMS_BACKUP_RESTORE.MANAGEAUXINSTANCE +DBMS_BACKUP_RESTORE.NETWORKBACKUPARCHIVEDLOG +DBMS_BACKUP_RESTORE.NETWORKBACKUPDATAFILE +DBMS_BACKUP_RESTORE.NETWORKBACKUPSPFILE +DBMS_BACKUP_RESTORE.NETWORKFILETRANSFER +DBMS_BACKUP_RESTORE.NETWORKREADFILEHEADER +DBMS_BACKUP_RESTORE.NETWORKSETMSB +DBMS_BACKUP_RESTORE.NIDBEGIN +DBMS_BACKUP_RESTORE.NIDEND +DBMS_BACKUP_RESTORE.NIDGETNEWDBID +DBMS_BACKUP_RESTORE.NIDPROCESSCF +DBMS_BACKUP_RESTORE.NIDPROCESSDF +DBMS_BACKUP_RESTORE.NORMALIZEFILENAME +DBMS_BACKUP_RESTORE.OAMPOLLEDRECORD +DBMS_BACKUP_RESTORE.ORACLESBTVERSION +DBMS_BACKUP_RESTORE.PIECECONTEXTGETNUMBER +DBMS_BACKUP_RESTORE.PROCESSSEARCHFILETABLE +DBMS_BACKUP_RESTORE.PROXYBACKUPARCHIVEDLOG +DBMS_BACKUP_RESTORE.PROXYBACKUPCONTROLFILE +DBMS_BACKUP_RESTORE.PROXYBACKUPDATAFILE +DBMS_BACKUP_RESTORE.PROXYBACKUPDATAFILECOPY +DBMS_BACKUP_RESTORE.PROXYBEGINBACKUP +DBMS_BACKUP_RESTORE.PROXYBEGINRESTORE +DBMS_BACKUP_RESTORE.PROXYCANCEL +DBMS_BACKUP_RESTORE.PROXYCHANGE +DBMS_BACKUP_RESTORE.PROXYDELETE +DBMS_BACKUP_RESTORE.PROXYGO +DBMS_BACKUP_RESTORE.PROXYQUERYBACKUP +DBMS_BACKUP_RESTORE.PROXYQUERYRESTORE +DBMS_BACKUP_RESTORE.PROXYRESTOREARCHIVEDLOG +DBMS_BACKUP_RESTORE.PROXYRESTORECONTROLFILE +DBMS_BACKUP_RESTORE.PROXYRESTOREDATAFILE +DBMS_BACKUP_RESTORE.PROXYVALIDATE +DBMS_BACKUP_RESTORE.PROXYVALONLY +DBMS_BACKUP_RESTORE.READARCHIVEDLOGHEADER +DBMS_BACKUP_RESTORE.READFILEHEADER +DBMS_BACKUP_RESTORE.REFRESHAGEDFILES +DBMS_BACKUP_RESTORE.REGISTERAUXDFCOPY +DBMS_BACKUP_RESTORE.REINIT +DBMS_BACKUP_RESTORE.REMOTESQLEXECUTE +DBMS_BACKUP_RESTORE.REMOVEDUPLICATEFILE +DBMS_BACKUP_RESTORE.RENORMALIZEALLFILENAMES +DBMS_BACKUP_RESTORE.RESDATAFILECOPY +DBMS_BACKUP_RESTORE.RESETCFILESECTION +DBMS_BACKUP_RESTORE.RESETCONFIG +DBMS_BACKUP_RESTORE.RESETDATABASE +DBMS_BACKUP_RESTORE.RESTOREARCHIVEDLOG +DBMS_BACKUP_RESTORE.RESTOREARCHIVEDLOGRANGE +DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE +DBMS_BACKUP_RESTORE.RESTORECANCEL +DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO +DBMS_BACKUP_RESTORE.RESTOREDATAFILETO +DBMS_BACKUP_RESTORE.RESTOREDMPFILE +DBMS_BACKUP_RESTORE.RESTORESETARCHIVEDLOG +DBMS_BACKUP_RESTORE.RESTORESETDATAFILE +DBMS_BACKUP_RESTORE.RESTORESETPIECE +DBMS_BACKUP_RESTORE.RESTORESETXTTFILE +DBMS_BACKUP_RESTORE.RESTORESPFILETO +DBMS_BACKUP_RESTORE.RESTORESTATUS +DBMS_BACKUP_RESTORE.RESTOREVALIDATE +DBMS_BACKUP_RESTORE.RESTOREXTTFILETO +DBMS_BACKUP_RESTORE.RMAN_USAGE +DBMS_BACKUP_RESTORE.SCANARCHIVEDLOG +DBMS_BACKUP_RESTORE.SCANDATAFILE +DBMS_BACKUP_RESTORE.SCANDATAFILECOPY +DBMS_BACKUP_RESTORE.SEARCHFILES +DBMS_BACKUP_RESTORE.SETCONFIG +DBMS_BACKUP_RESTORE.SETDATAFILEAUX +DBMS_BACKUP_RESTORE.SETDBUNIQNAMETSPITR +DBMS_BACKUP_RESTORE.SETLIMIT +DBMS_BACKUP_RESTORE.SETMSB +DBMS_BACKUP_RESTORE.SETMSC +DBMS_BACKUP_RESTORE.SETPARMS +DBMS_BACKUP_RESTORE.SETRMANSTATUSROWID +DBMS_BACKUP_RESTORE.SETTABLESPACEATTR +DBMS_BACKUP_RESTORE.SETTABLESPACEEXCLUDE +DBMS_BACKUP_RESTORE.SET_CHARSET +DBMS_BACKUP_RESTORE.SET_CLIENT_INFO +DBMS_BACKUP_RESTORE.SLEEP +DBMS_BACKUP_RESTORE.SWITCHTEMPFILE +DBMS_BACKUP_RESTORE.SWITCHTOCOPY +DBMS_BACKUP_RESTORE.SWITCH_PRIMARY_BCT +DBMS_BACKUP_RESTORE.TRANSPORTDBLOCK +DBMS_BACKUP_RESTORE.TRANSPORTDBUNLOCK +DBMS_BACKUP_RESTORE.UPDATEHEADERS +DBMS_BACKUP_RESTORE.UPDATERMANSTATUSROW +DBMS_BACKUP_RESTORE.VALIDATEARCHIVEDLOG +DBMS_BACKUP_RESTORE.VALIDATEBACKUPPIECE +DBMS_BACKUP_RESTORE.VALIDATEBLOCK +DBMS_BACKUP_RESTORE.VALIDATEDATAFILECOPY +DBMS_BACKUP_RESTORE.VALIDATETABLESPACE +DBMS_BACKUP_RESTORE.VALIDATIONADDPIECE +DBMS_BACKUP_RESTORE.VALIDATIONEND +DBMS_BACKUP_RESTORE.VALIDATIONNEXTRESULT +DBMS_BACKUP_RESTORE.VALIDATIONSTART +DBMS_BACKUP_RESTORE.VALIDATIONVALIDATE +DBMS_BACKUP_RESTORE.VSSBACKEDRECORD +DBMS_BACKUP_RESTORE.WRITEDUPLICATEDDATAFILECOPY +DBMS_BACKUP_RESTORE.WRITETRACE +DBMS_BACKUP_RESTORE.XTTRESTORE +DBMS_BACKUP_RESTORE.ZERODBID +DBMS_CACHEUTIL. +DBMS_CACHEUTIL.DISSOLVE_AFFINITY +DBMS_CACHEUTIL.DISSOLVE_READMOSTLY +DBMS_CACHEUTIL.GRAB_AFFINITY +DBMS_CACHEUTIL.GRAB_READMOSTLY +DBMS_CACHEUTIL.LIST_READMOSTLY +DBMS_CACHEUTIL.OBJECT_DOWNCONVERT +DBMS_CAPTURE_ADM. +DBMS_CAPTURE_ADM.ABORT_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM.ABORT_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM.ABORT_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM.ABORT_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM.ALTER_CAPTURE +DBMS_CAPTURE_ADM.ALTER_SYNC_CAPTURE +DBMS_CAPTURE_ADM.BUILD +DBMS_CAPTURE_ADM.CREATE_CAPTURE +DBMS_CAPTURE_ADM.CREATE_SYNC_CAPTURE +DBMS_CAPTURE_ADM.DROP_CAPTURE +DBMS_CAPTURE_ADM.INCLUDE_EXTRA_ATTRIBUTE +DBMS_CAPTURE_ADM.PREPARE_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM.PREPARE_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM.SET_PARAMETER +DBMS_CAPTURE_ADM.START_CAPTURE +DBMS_CAPTURE_ADM.STOP_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL. +DBMS_CAPTURE_ADM_INTERNAL.ABORT_GLOBAL_INST +DBMS_CAPTURE_ADM_INTERNAL.ABORT_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_GLOBAL_INST_ONE_PDB +DBMS_CAPTURE_ADM_INTERNAL.ABORT_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_SCHEMA_INST_CDB +DBMS_CAPTURE_ADM_INTERNAL.ABORT_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_TABLE_INST_CDB +DBMS_CAPTURE_ADM_INTERNAL.ADD_LOGFILE +DBMS_CAPTURE_ADM_INTERNAL.ALTER_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.BUILD +DBMS_CAPTURE_ADM_INTERNAL.CREATE_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.CREATE_SYNC_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.DROP_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.ENFORCE_CHECKPOINT_RETENTION +DBMS_CAPTURE_ADM_INTERNAL.GET_SOURCE_DATABASE +DBMS_CAPTURE_ADM_INTERNAL.GET_SOURCE_ROOT +DBMS_CAPTURE_ADM_INTERNAL.INCLUDE_EXTRA_ATTRIBUTE +DBMS_CAPTURE_ADM_INTERNAL.IS_CAPTURE_EXISTS +DBMS_CAPTURE_ADM_INTERNAL.IS_DOWNSTREAM_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.IS_EXISTING_DOWNSTREAM_CAP +DBMS_CAPTURE_ADM_INTERNAL.IS_GOLDENGATE_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.IS_SYNC_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.IS_USE_DBLINK +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_DDL +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_GLOBAL_INST +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_GLOBAL_INST_ONE_PDB +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SCHEMA_INST_CDB +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SCHEMA_TABLES +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_TABLE_INST +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_TABLE_INST_CDB +DBMS_CAPTURE_ADM_INTERNAL.REPLACE_DICTIONARY +DBMS_CAPTURE_ADM_INTERNAL.SET_XOUT_PARAMS +DBMS_CAPTURE_ADM_INTERNAL.STORE_PREPARE_INFO +DBMS_CAPTURE_ADM_INTERNAL.SUSPEND_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.UPDATE_PREPARE_DDL +DBMS_CAPTURE_ADM_INTERNAL.VALIDATE_PREPARE_TABLE +DBMS_CAPTURE_ADM_INTERNAL.WAIT_FOR_INFLIGHT_TXN +DBMS_CAPTURE_ADM_IVK. +DBMS_CAPTURE_ADM_IVK.ABORT_GLOBAL_INST_IVK +DBMS_CAPTURE_ADM_IVK.ABORT_SCHEMA_INST_IVK +DBMS_CAPTURE_ADM_IVK.ABORT_TABLE_INST_IVK +DBMS_CAPTURE_ADM_IVK.CREATE_CAPTURE_IVK +DBMS_CAPTURE_ADM_IVK.PREPARE_GLOBAL_INST_IVK +DBMS_CAPTURE_ADM_IVK.PREPARE_SCHEMA_INST_IVK +DBMS_CAPTURE_ADM_IVK.PREPARE_TABLE_INST_IVK +DBMS_CAPTURE_ADM_IVK.SET_PARAMETER +DBMS_CAPTURE_ADM_IVK.SUPP_LOG_LEVEL_CHECK +DBMS_CAPTURE_PROCESS. +DBMS_CAPTURE_PROCESS.CLONE_LOGMNR_SESSION +DBMS_CAPTURE_PROCESS.CLONE_LOGMNR_SESSION_CKPTFRE +DBMS_CAPTURE_PROCESS.GET_CAPTURE# +DBMS_CAPTURE_PROCESS.IS_DICTIONARY_MINED +DBMS_CAPTURE_PROCESS.WAIT_FOR_DICTIONARY_DUMP +DBMS_CAPTURE_SWITCH_ADM. +DBMS_CAPTURE_SWITCH_ADM.GET_SOURCE_DATABASE_SCNS +DBMS_CAPTURE_SWITCH_ADM.SWITCH_TO_APPLY_STATE_CKPT +DBMS_CAPTURE_SWITCH_ADM.SWITCH_TO_CHECKPOINTS +DBMS_CAPTURE_SWITCH_INTERNAL. +DBMS_CAPTURE_SWITCH_INTERNAL.CAN_SWITCH +DBMS_CAPTURE_SWITCH_INTERNAL.CAPTURE_WAIT_FOR_SCN +DBMS_CAPTURE_SWITCH_INTERNAL.DISPLAY_MESSAGE +DBMS_CAPTURE_SWITCH_INTERNAL.GET_APPLY_NAME_AND_DBLINK +DBMS_CAPTURE_SWITCH_INTERNAL.GET_DATABASE_SCNS +DBMS_CAPTURE_SWITCH_INTERNAL.GET_OLDEST_SCN +DBMS_CAPTURE_SWITCH_INTERNAL.RESTART_PROCESS +DBMS_CAPTURE_SWITCH_INTERNAL.SET_OLDEST_SCN +DBMS_CAPTURE_SWITCH_INTERNAL.WAITFOR_CAPTURE +DBMS_CAPTURE_SWITCH_INTERNAL.WAIT_CAPTURE_MAKE_PROGRESS +DBMS_CDC_DPUTIL. +DBMS_CDC_DPUTIL.CDC_OBJECTS_TO_EXPORT +DBMS_CDC_DPUTIL.ERROR_TEXT +DBMS_CDC_DPUTIL.GET_ERROR_TEXT +DBMS_CDC_DPUTIL.GET_IMPVLDTAB_NAME +DBMS_CDC_DPUTIL.GET_JOB_DESC +DBMS_CDC_DPUTIL.GET_TABVIEW_OBJNO +DBMS_CDC_DPUTIL.IS_FULL_DB_EXPORT +DBMS_CDC_DPUTIL.VALID_TABLE +DBMS_CDC_DPUTIL.WRITE_LOG +DBMS_CDC_DPUTIL.WRITE_TRACE +DBMS_CDC_EXPDP. +DBMS_CDC_EXPDP.DUMP_CHANGE_COLUMN +DBMS_CDC_EXPDP.DUMP_CHANGE_PROPAGATION +DBMS_CDC_EXPDP.DUMP_CHANGE_PROPSET +DBMS_CDC_EXPDP.DUMP_CHANGE_SET +DBMS_CDC_EXPDP.DUMP_CHANGE_SOURCE +DBMS_CDC_EXPDP.DUMP_CHANGE_TABLE +DBMS_CDC_EXPDP.DUMP_SUBSCRIBED_COLUMN +DBMS_CDC_EXPDP.DUMP_SUBSCRIBED_TABLE +DBMS_CDC_EXPDP.DUMP_SUBSCRIBER +DBMS_CDC_EXPDP.SCHEMA_CALLOUT +DBMS_CDC_EXPDP.SCHEMA_INFO_EXP +DBMS_CDC_EXPDP.SYSTEM_INFO_EXP +DBMS_CDC_EXPVDP. +DBMS_CDC_EXPVDP.SCHEMA_INFO_EXP +DBMS_CDC_IMPDP. +DBMS_CDC_IMPDP.CHANGE_SET_EXISTS +DBMS_CDC_IMPDP.DATE_CONVERT +DBMS_CDC_IMPDP.GET_NEW_HANDLE +DBMS_CDC_IMPDP.GET_SUB_HANDLE +DBMS_CDC_IMPDP.HAS_SYNCCDC_TRIGGER +DBMS_CDC_IMPDP.IMPORT_CHANGE_COLUMN +DBMS_CDC_IMPDP.IMPORT_CHANGE_SET +DBMS_CDC_IMPDP.IMPORT_CHANGE_SOURCE +DBMS_CDC_IMPDP.IMPORT_CHANGE_TABLE +DBMS_CDC_IMPDP.IMPORT_PROPAGATION +DBMS_CDC_IMPDP.IMPORT_PROP_SET +DBMS_CDC_IMPDP.IMPORT_SUBSCRIBED_COLUMN +DBMS_CDC_IMPDP.IMPORT_SUBSCRIBED_TABLE +DBMS_CDC_IMPDP.IMPORT_SUBSCRIBER +DBMS_CDC_IMPDP.VALIDATE_CHANGE_SET +DBMS_CDC_IMPDP.VALIDATE_CHANGE_SOURCE +DBMS_CDC_IMPDP.VALIDATE_CHANGE_TABLE +DBMS_CDC_IMPDP.VALIDATE_IMPORT +DBMS_CDC_IMPDP.VALIDATE_SUBSCRIPTION +DBMS_CDC_IMPDPV. +DBMS_CDC_IMPDPV.BUMP_SCN +DBMS_CDC_IMPDPV.BUMP_SEQUENCE +DBMS_CDC_IMPDPV.CREATE_IMPORT_VALIDATION +DBMS_CDC_IPUBLISH. +DBMS_CDC_IPUBLISH.ALTER_HOTLOG_INTERNAL_CSOURCE +DBMS_CDC_IPUBLISH.ALTER_INT_CHANGE_TABLE +DBMS_CDC_IPUBLISH.CHANGE_TABLE_TRIGGER +DBMS_CDC_IPUBLISH.CHECK_10GR2_COMPATIBILITY +DBMS_CDC_IPUBLISH.CHECK_PUBLISHER_REQ +DBMS_CDC_IPUBLISH.CHECK_REMOTE_USER_ROLE_PRIV +DBMS_CDC_IPUBLISH.CHECK_USER_ROLE_PRIV +DBMS_CDC_IPUBLISH.CHGTAB_CACHE +DBMS_CDC_IPUBLISH.CREATE_CHANGE_TABLE +DBMS_CDC_IPUBLISH.CREATE_CHGTAB_STRUCT +DBMS_CDC_IPUBLISH.CREATE_HOTLOG_INTERNAL_CSOURCE +DBMS_CDC_IPUBLISH.CREATE_HOTLOG_INTERNAL_PROP +DBMS_CDC_IPUBLISH.CREATE_INT_CHANGE_TABLE +DBMS_CDC_IPUBLISH.CREATE_MAP_TABLE +DBMS_CDC_IPUBLISH.DROP_CHANGE_TABLE +DBMS_CDC_IPUBLISH.DROP_CHGTAB_STRUCT +DBMS_CDC_IPUBLISH.DROP_HOTLOG_INTERNAL_CSOURCE +DBMS_CDC_IPUBLISH.DROP_HOTLOG_INTERNAL_PROP +DBMS_CDC_IPUBLISH.GET_DATABASE_VERSION +DBMS_CDC_IPUBLISH.INSERT_MESSAGE +DBMS_CDC_IPUBLISH.IS_COLUMN_ENCRYPTED +DBMS_CDC_IPUBLISH.PURGE_LOGICAL_SUB +DBMS_CDC_IPUBLISH.RESOLVE_DBLINK_USER +DBMS_CDC_IPUBLISH.TRACE_DEBUG +DBMS_CDC_IPUBLISH.UPGRADE_METADATA_TO_10GR2 +DBMS_CDC_IPUBLISH.VERIFY_DBLINK +DBMS_CDC_ISUBSCRIBE. +DBMS_CDC_ISUBSCRIBE.CHECK_SUB_PRIV +DBMS_CDC_ISUBSCRIBE.CREATE_SUBSCRIPTION +DBMS_CDC_ISUBSCRIBE.EXTEND_WINDOW_LIST +DBMS_CDC_ISUBSCRIBE.GET_CSO_NAME +DBMS_CDC_ISUBSCRIBE.INT_EXTEND_WINDOW +DBMS_CDC_ISUBSCRIBE.INT_PURGE_WINDOW +DBMS_CDC_ISUBSCRIBE.PREPARE_UNBOUNDED_VIEW +DBMS_CDC_ISUBSCRIBE.SUBSCRIBE +DBMS_CDC_ISUBSCRIBE.VALIDATE_SUBNAME +DBMS_CDC_PUBLISH. +DBMS_CDC_PUBLISH.ALTER_AUTOLOG_CHANGE_SOURCE +DBMS_CDC_PUBLISH.ALTER_CHANGE_SET +DBMS_CDC_PUBLISH.ALTER_CHANGE_TABLE +DBMS_CDC_PUBLISH.ALTER_HOTLOG_CHANGE_SOURCE +DBMS_CDC_PUBLISH.CREATE_AUTOLOG_CHANGE_SOURCE +DBMS_CDC_PUBLISH.CREATE_CHANGE_SET +DBMS_CDC_PUBLISH.CREATE_CHANGE_TABLE +DBMS_CDC_PUBLISH.CREATE_HOTLOG_CHANGE_SOURCE +DBMS_CDC_PUBLISH.DROP_CHANGE_SET +DBMS_CDC_PUBLISH.DROP_CHANGE_SOURCE +DBMS_CDC_PUBLISH.DROP_CHANGE_TABLE +DBMS_CDC_PUBLISH.DROP_SUBSCRIBER_VIEW +DBMS_CDC_PUBLISH.DROP_SUBSCRIPTION +DBMS_CDC_PUBLISH.GET_DDLOPER +DBMS_CDC_PUBLISH.PURGE +DBMS_CDC_PUBLISH.PURGE_CHANGE_SET +DBMS_CDC_PUBLISH.PURGE_CHANGE_TABLE +DBMS_CDC_SUBSCRIBE. +DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION +DBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTION +DBMS_CDC_SUBSCRIBE.DROP_SUBSCRIBER_VIEW +DBMS_CDC_SUBSCRIBE.DROP_SUBSCRIPTION +DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW +DBMS_CDC_SUBSCRIBE.GET_SUBSCRIPTION_HANDLE +DBMS_CDC_SUBSCRIBE.PREPARE_SUBSCRIBER_VIEW +DBMS_CDC_SUBSCRIBE.PURGE_WINDOW +DBMS_CDC_SUBSCRIBE.SUBSCRIBE +DBMS_CDC_SYS_IPUBLISH. +DBMS_CDC_SYS_IPUBLISH.COUNT_CHANGE_TABLE +DBMS_CDC_SYS_IPUBLISH.DROP_SUBSCRIBER_VIEW +DBMS_CDC_SYS_IPUBLISH.DROP_SUBSCRIPTION +DBMS_CDC_SYS_IPUBLISH.ENABLE_TABLE_TRIGGER +DBMS_CDC_SYS_IPUBLISH.GET_CHANGE_TABLE +DBMS_CDC_SYS_IPUBLISH.GET_CHGSRC_METADATA +DBMS_CDC_SYS_IPUBLISH.GET_CHGSRC_TYPE +DBMS_CDC_SYS_IPUBLISH.GET_FRESHNESS +DBMS_CDC_SYS_IPUBLISH.INSERT_CHGSRC_DATA +DBMS_CDC_SYS_IPUBLISH.RAISE_SYSTEM_ERROR +DBMS_CDC_SYS_IPUBLISH.REMOVE_CHGSET_PROP +DBMS_CDC_SYS_IPUBLISH.REMOVE_CHGTAB +DBMS_CDC_SYS_IPUBLISH.REMOVE_CHGTAB_METADATA +DBMS_CDC_SYS_IPUBLISH.REMOVE_SUBSCRIPTION_METADATA +DBMS_CDC_SYS_IPUBLISH.REUSE_CHGSET_PROP +DBMS_CDC_SYS_IPUBLISH.UPDATE_CDC_PROP_TABLES +DBMS_CDC_SYS_IPUBLISH.UPDATE_CHGSRC_METADATA +DBMS_CDC_SYS_IPUBLISH.UPDATE_SUBSCRIBED_TAB_STATUS +DBMS_CDC_UTILITY. +DBMS_CDC_UTILITY.CDC_ALLOCATE_LOCK +DBMS_CDC_UTILITY.CHECK_PURGE +DBMS_CDC_UTILITY.CHK_SECURITY +DBMS_CDC_UTILITY.CLEANUP_SYNC_TABLE +DBMS_CDC_UTILITY.COUNT_EXISTING_COL +DBMS_CDC_UTILITY.COUNT_OBJECT_COL +DBMS_CDC_UTILITY.COUNT_PURGE_JOB +DBMS_CDC_UTILITY.COUNT_SUBSCRIBERS +DBMS_CDC_UTILITY.DELETE_EXPORT_ACTION +DBMS_CDC_UTILITY.DROP_USER +DBMS_CDC_UTILITY.EXPORT_CHANGE_TABLE +DBMS_CDC_UTILITY.EXTEND_WINDOW_LIST +DBMS_CDC_UTILITY.FIXUP_SYNC_TABLE +DBMS_CDC_UTILITY.GETSYNCSCN +DBMS_CDC_UTILITY.GET_CURRENT_SCN +DBMS_CDC_UTILITY.GET_EVENT_LEVEL +DBMS_CDC_UTILITY.GET_INSTANCE +DBMS_CDC_UTILITY.GET_ORACLE_EDITION +DBMS_CDC_UTILITY.GET_TABLE_OBJN +DBMS_CDC_UTILITY.IMPORT_CHANGE_TABLE +DBMS_CDC_UTILITY.IS_CONTROL_COLUMN +DBMS_CDC_UTILITY.IS_CONTROL_COLUMNMV +DBMS_CDC_UTILITY.LOCK_CHANGE_SET +DBMS_CDC_UTILITY.NUMTOHEX +DBMS_CDC_UTILITY.PURGEMVLOGLOGICAL +DBMS_CDC_UTILITY.PURGEMVLOGPHYSICAL +DBMS_CDC_UTILITY.QCCGELVL +DBMS_CDC_UTILITY.QCCGETEE +DBMS_CDC_UTILITY.QCCGSCN +DBMS_CDC_UTILITY.QCCSGNBS +DBMS_CDC_UTILITY.SETUP_SYNC_TABLE +DBMS_CDC_UTILITY.SET_PURGEBOUNDARY +DBMS_CDC_UTILITY.SET_WINDOW_START +DBMS_CDC_UTILITY.VERIFY_CDC_NAME +DBMS_CDC_UTILITY.VERIFY_VARCHAR_PARAM +DBMS_CHANGE_NOTIFICATION. +DBMS_CHANGE_NOTIFICATION.CQ_NOTIFICATION_QUERYID +DBMS_CHANGE_NOTIFICATION.DEREGISTER +DBMS_CHANGE_NOTIFICATION.ENABLE_REG +DBMS_CHANGE_NOTIFICATION.NEW_REG_START +DBMS_CHANGE_NOTIFICATION.NEW_REG_START_OC4J +DBMS_CHANGE_NOTIFICATION.REG_END +DBMS_CHANGE_NOTIFICATION.SET_ROWID_THRESHOLD +DBMS_CLIENT_RESULT_CACHE. +DBMS_CLIENT_RESULT_CACHE.CACHE_CLEANUP +DBMS_CLOBUTIL. +DBMS_CLOBUTIL.CLOB2URL +DBMS_CLOBUTIL.FP2BLOB +DBMS_CLOBUTIL.GETBOMOFFSET +DBMS_CLOBUTIL.URL2CLOB +DBMS_CLUSTDB. +DBMS_CLUSTDB.VALIDATE +DBMS_CMP_INT. +DBMS_CMP_INT.CMP_TRACE +DBMS_CMP_INT.CMP_TRACE_CLOB +DBMS_CMP_INT.DROP_CMP +DBMS_CMP_INT.DROP_CMP_BY_CMPID +DBMS_CMP_INT.GET_CMP_CTX +DBMS_CMP_INT.GET_CMP_SCAN +DBMS_CMP_INT.GET_CMP_SCANS +DBMS_CMP_INT.GET_NEXT_SCAN_SEQ +DBMS_CMP_INT.IS_CMP_TRACING_ON +DBMS_CMP_INT.PURGE_CMP +DBMS_CMP_INT.PUT_CMP_CTX +DBMS_CMP_INT.PUT_CMP_SCAN +DBMS_CMP_INT.PUT_CMP_SCANS +DBMS_CMP_INT.PUT_ROW_DIFS +DBMS_CMP_INT.UPDATE_CMP_SCAN +DBMS_CMP_INT.UPDATE_CMP_SCAN_NUM_ROWS +DBMS_CMP_INT.UPDATE_ROW_DIFS +DBMS_CMP_INT.UPDATE_ROW_DIFS2 +DBMS_CMP_INT.UPDATE_ROW_INSERTED_DIFS +DBMS_COMPARISON. +DBMS_COMPARISON.COMPARE +DBMS_COMPARISON.CONVERGE +DBMS_COMPARISON.CREATE_COMPARISON +DBMS_COMPARISON.DROP_COMPARISON +DBMS_COMPARISON.PURGE_COMPARISON +DBMS_COMPARISON.RECHECK +DBMS_COMPRESSION. +DBMS_COMPRESSION.DUMP_COMPRESSION_MAP +DBMS_COMPRESSION.GET_COMPRESSION_RATIO +DBMS_COMPRESSION.GET_COMPRESSION_TYPE +DBMS_COMPRESSION.INCREMENTAL_COMPRESS +DBMS_CONNECTION_POOL. +DBMS_CONNECTION_POOL.ALTER_PARAM +DBMS_CONNECTION_POOL.CONFIGURE_POOL +DBMS_CONNECTION_POOL.RESTORE_DEFAULTS +DBMS_CONNECTION_POOL.START_POOL +DBMS_CONNECTION_POOL.STOP_POOL +DBMS_CREDENTIAL. +DBMS_CREDENTIAL.CREATE_CREDENTIAL +DBMS_CREDENTIAL.DISABLE_CREDENTIAL +DBMS_CREDENTIAL.DROP_CREDENTIAL +DBMS_CREDENTIAL.ENABLE_CREDENTIAL +DBMS_CREDENTIAL.UPDATE_CREDENTIAL +DBMS_CRYPTO. +DBMS_CRYPTO.DECRYPT +DBMS_CRYPTO.ENCRYPT +DBMS_CRYPTO.HASH +DBMS_CRYPTO.MAC +DBMS_CRYPTO.RANDOMBYTES +DBMS_CRYPTO.RANDOMINTEGER +DBMS_CRYPTO.RANDOMNUMBER +DBMS_CRYPTO_FFI. +DBMS_CRYPTO_FFI.COOKIE +DBMS_CRYPTO_FFI.DECRYPT +DBMS_CRYPTO_FFI.ENCRYPT +DBMS_CRYPTO_FFI.HASH +DBMS_CRYPTO_FFI.MAC +DBMS_CRYPTO_FFI.RANDOM +DBMS_CRYPTO_TOOLKIT. +DBMS_CRYPTO_TOOLKIT.ABORTIDENTITY +DBMS_CRYPTO_TOOLKIT.CLOSEPERSONA +DBMS_CRYPTO_TOOLKIT.CLOSEWALLET +DBMS_CRYPTO_TOOLKIT.CREATEIDENTITY +DBMS_CRYPTO_TOOLKIT.CREATEPERSONA +DBMS_CRYPTO_TOOLKIT.CREATEWALLET +DBMS_CRYPTO_TOOLKIT.DECRYPT +DBMS_CRYPTO_TOOLKIT.DEENVELOPE +DBMS_CRYPTO_TOOLKIT.DESTROYWALLET +DBMS_CRYPTO_TOOLKIT.ENCRYPT +DBMS_CRYPTO_TOOLKIT.ENVELOPE +DBMS_CRYPTO_TOOLKIT.HASH +DBMS_CRYPTO_TOOLKIT.INITIALIZE +DBMS_CRYPTO_TOOLKIT.KEYEDHASH +DBMS_CRYPTO_TOOLKIT.OPENPERSONA +DBMS_CRYPTO_TOOLKIT.OPENWALLET +DBMS_CRYPTO_TOOLKIT.PKDECRYPT +DBMS_CRYPTO_TOOLKIT.PKENCRYPT +DBMS_CRYPTO_TOOLKIT.RANDOMBYTES +DBMS_CRYPTO_TOOLKIT.RANDOMNUMBER +DBMS_CRYPTO_TOOLKIT.REMOVEIDENTITY +DBMS_CRYPTO_TOOLKIT.REMOVEPERSONA +DBMS_CRYPTO_TOOLKIT.SEEDRANDOM +DBMS_CRYPTO_TOOLKIT.SIGN +DBMS_CRYPTO_TOOLKIT.SIGNDETACHED +DBMS_CRYPTO_TOOLKIT.STOREPERSONA +DBMS_CRYPTO_TOOLKIT.STORETRUSTEDIDENTITY +DBMS_CRYPTO_TOOLKIT.TERMINATE +DBMS_CRYPTO_TOOLKIT.VALIDATE +DBMS_CRYPTO_TOOLKIT.VERIFY +DBMS_CRYPTO_TOOLKIT.VERIFYDETACHED +DBMS_CRYPTO_TOOLKIT_FFI. +DBMS_CRYPTO_TOOLKIT_FFI.ABORTIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.CLOSEPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.CLOSEWALLET +DBMS_CRYPTO_TOOLKIT_FFI.CREATEIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.CREATEPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.CREATEWALLET +DBMS_CRYPTO_TOOLKIT_FFI.DECRYPT +DBMS_CRYPTO_TOOLKIT_FFI.DEENVELOPE +DBMS_CRYPTO_TOOLKIT_FFI.DESTROYWALLET +DBMS_CRYPTO_TOOLKIT_FFI.ENCRYPT +DBMS_CRYPTO_TOOLKIT_FFI.ENVELOPE +DBMS_CRYPTO_TOOLKIT_FFI.GETPERSONAFROMWALLET +DBMS_CRYPTO_TOOLKIT_FFI.GETPROTECTION +DBMS_CRYPTO_TOOLKIT_FFI.HASH +DBMS_CRYPTO_TOOLKIT_FFI.INITIALIZE +DBMS_CRYPTO_TOOLKIT_FFI.KEYEDHASH +DBMS_CRYPTO_TOOLKIT_FFI.OPENPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.OPENWALLET +DBMS_CRYPTO_TOOLKIT_FFI.PKDECRYPT +DBMS_CRYPTO_TOOLKIT_FFI.PKENCRYPT +DBMS_CRYPTO_TOOLKIT_FFI.RANDOMBYTES +DBMS_CRYPTO_TOOLKIT_FFI.RANDOMNUMBER +DBMS_CRYPTO_TOOLKIT_FFI.REMOVEIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.REMOVEPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.SEEDRANDOM +DBMS_CRYPTO_TOOLKIT_FFI.SETPROTECTION +DBMS_CRYPTO_TOOLKIT_FFI.SIGN +DBMS_CRYPTO_TOOLKIT_FFI.SIGNDETACHED +DBMS_CRYPTO_TOOLKIT_FFI.STOREPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.STORETRUSTEDIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.TERMINATE +DBMS_CRYPTO_TOOLKIT_FFI.VALIDATE +DBMS_CRYPTO_TOOLKIT_FFI.VERIFY +DBMS_CRYPTO_TOOLKIT_FFI.VERIFYDETACHED +DBMS_CRYPTO_TOOLKIT_TYPES. +DBMS_CSX_ADMIN. +DBMS_CSX_ADMIN.COPYDEFAULTTOKENTABLESET +DBMS_CSX_ADMIN.GATHERTOKENTABLESTATS +DBMS_CSX_ADMIN.GETTOKENTABLEINFO +DBMS_CSX_ADMIN.GETTOKENTABLEINFOBYTABLESPACE +DBMS_CSX_ADMIN.INSTANCE_INFO_EXP +DBMS_CSX_ADMIN.NAMESPACEIDTABLE +DBMS_CSX_ADMIN.PATHIDTABLE +DBMS_CSX_ADMIN.QNAMEIDTABLE +DBMS_CSX_ADMIN.REGISTERTOKENTABLESET +DBMS_CSX_INT. +DBMS_CSX_INT.CREATETOKENTABLES +DBMS_CSX_INT.GETCOMPILEDSCHEMA +DBMS_CSX_INT.GETCOMPILEDSCHEMABYID +DBMS_CSX_INT.GETCSXSCHEMA +DBMS_CSX_INT.GETVOCABULARY +DBMS_CSX_INT.GETVOCABULARYFROMTOKEN +DBMS_CSX_INT.GETVOCABULARYFROMTOKENNOTXN +DBMS_CSX_INT.GETVOCABULARYNOTXN +DBMS_CSX_INT.GUIDFROM32 +DBMS_CSX_INT.GUIDTO32 +DBMS_CSX_INT.IMPORTMERGETOKENTABLES +DBMS_CSX_INT.LOCKTOKENMANAGER +DBMS_CSX_INT.MERGEIMPORTEDTOKENS +DBMS_CSX_INT.POPULATEKDSOFROMGUID +DBMS_CSX_INT.POPULATETOKENTABLESET +DBMS_CSX_INT.REGISTERTOKEN +DBMS_CSX_INT.TESTDECODEJC +DBMS_CSX_INT.TESTENCODEJC +DBMS_CSX_INT.TOVALIDATE +DBMS_CSX_INT.UPDATEMASTERTABLE +DBMS_CUBE. +DBMS_CUBE.BUILD +DBMS_CUBE.BUILD_SLAVE +DBMS_CUBE.CREATE_CUBE_DIM_REFRESH_MVIEWS +DBMS_CUBE.CREATE_CUBE_REFRESH_MVIEW +DBMS_CUBE.CREATE_CUBE_REWRITE_MVIEW +DBMS_CUBE.CREATE_EXPORT_OPTIONS +DBMS_CUBE.CREATE_IMPORT_OPTIONS +DBMS_CUBE.CREATE_MVIEW +DBMS_CUBE.DERIVE_FROM_MVIEW +DBMS_CUBE.DRILL_THROUGH +DBMS_CUBE.DROP_MVIEW +DBMS_CUBE.EXPORT_XML +DBMS_CUBE.EXPORT_XML_TO_FILE +DBMS_CUBE.GET_BREAKOUT_DIMENSIONS +DBMS_CUBE.IMPORT_XML +DBMS_CUBE.INITIALIZE_CUBE_UPGRADE +DBMS_CUBE.IS_DRILL_THROUGH_ALLOWED +DBMS_CUBE.REFRESH_MVIEW +DBMS_CUBE.UPGRADE_AW +DBMS_CUBE.VALIDATE_XML +DBMS_CUBE_ADVISE. +DBMS_CUBE_ADVISE.GET_ATR_EXPR_RC +DBMS_CUBE_ADVISE.GET_COLDISTINCTCOUNT +DBMS_CUBE_ADVISE.GET_DIMHIERJOIN_DISPOSITION +DBMS_CUBE_ADVISE.GET_DIMLVL_DISPOSITION +DBMS_CUBE_ADVISE.GET_DIM_DISPOSITION +DBMS_CUBE_ADVISE.GET_FK_NAME +DBMS_CUBE_ADVISE.GET_LVL_NAME +DBMS_CUBE_ADVISE.GET_MEAS_COL +DBMS_CUBE_ADVISE.GET_PK_NAME +DBMS_CUBE_ADVISE.IS_MD_CLASS +DBMS_CUBE_ADVISE.LOG +DBMS_CUBE_ADVISE.MV_CUBE_ADVICE +DBMS_CUBE_ADVISE.SET_CNS_EXCEPTION_LOG +DBMS_CUBE_ADVISE.TRACE +DBMS_CUBE_ADVISE_SEC. +DBMS_CUBE_ADVISE_SEC.CHECK_FOR_NESTING +DBMS_CUBE_ADVISE_SEC.CHECK_TABLE_ACCESS +DBMS_CUBE_ADVISE_SEC.COADSEQ_CURRENT +DBMS_CUBE_ADVISE_SEC.COADSEQ_NEXT +DBMS_CUBE_ADVISE_SEC.GET_MVNAME +DBMS_CUBE_ADVISE_SEC.GET_NN_NAME +DBMS_CUBE_EXP. +DBMS_CUBE_EXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_CUBE_EXP.INSTANCE_INFO_IMP_DS_11_2_0_2 +DBMS_CUBE_EXP.SCHEMA_CALLOUT +DBMS_CUBE_EXP.SCHEMA_INFO_EXP +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_11_2 +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_BEG +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_END +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_LOOP +DBMS_CUBE_LOG. +DBMS_CUBE_LOG.COMPLETE_OPLOG +DBMS_CUBE_LOG.CREATE_REJECT_SQL +DBMS_CUBE_LOG.DEFAULT_NAME +DBMS_CUBE_LOG.DISABLE +DBMS_CUBE_LOG.ENABLE +DBMS_CUBE_LOG.FLUSH +DBMS_CUBE_LOG.GET_LOG +DBMS_CUBE_LOG.GET_LOG_SPEC +DBMS_CUBE_LOG.GET_PARAMETER +DBMS_CUBE_LOG.LEVEL_HIGH +DBMS_CUBE_LOG.LEVEL_HIGHEST +DBMS_CUBE_LOG.LEVEL_LOW +DBMS_CUBE_LOG.LEVEL_LOWEST +DBMS_CUBE_LOG.LEVEL_MEDIUM +DBMS_CUBE_LOG.SET_LOG_SPEC +DBMS_CUBE_LOG.SET_PARAMETER +DBMS_CUBE_LOG.SET_QUERY_ENV +DBMS_CUBE_LOG.START_OPLOG +DBMS_CUBE_LOG.TABLE_CREATE +DBMS_CUBE_LOG.TARGET_FILE +DBMS_CUBE_LOG.TARGET_LOB +DBMS_CUBE_LOG.TARGET_TABLE +DBMS_CUBE_LOG.TARGET_TRACE +DBMS_CUBE_LOG.TYPE_BUILD +DBMS_CUBE_LOG.TYPE_DIMENSION_COMPILE +DBMS_CUBE_LOG.TYPE_OPERATIONS +DBMS_CUBE_LOG.TYPE_REJECTED_RECORDS +DBMS_CUBE_LOG.VERBOSE_ACTION +DBMS_CUBE_LOG.VERBOSE_DEBUG +DBMS_CUBE_LOG.VERBOSE_INFO +DBMS_CUBE_LOG.VERBOSE_NOTICE +DBMS_CUBE_LOG.VERBOSE_STATS +DBMS_CUBE_LOG.VERSION +DBMS_CUBE_LOG.WRITE_TO_OPLOG +DBMS_CUBE_UTIL. +DBMS_CUBE_UTIL.CREATE_RPT_FILTER +DBMS_CUBE_UTIL.DROP_BRANCH +DBMS_CUBE_UTIL.DROP_RPT_FILTER +DBMS_CUBE_UTIL.GET_DEFAULT_MEASURE +DBMS_CUBE_UTIL.GET_DIMENSION_SPECIAL_MEMBER +DBMS_CUBE_UTIL.GET_EXT_METADATA +DBMS_DATAPUMP. +DBMS_DATAPUMP.ADD_DEVICE +DBMS_DATAPUMP.ADD_FILE +DBMS_DATAPUMP.ATTACH +DBMS_DATAPUMP.CLIENT_LOB_APPEND +DBMS_DATAPUMP.CLIENT_LOB_DELETE +DBMS_DATAPUMP.CLIENT_LOB_GET +DBMS_DATAPUMP.CREATE_JOB_VIEW +DBMS_DATAPUMP.DATAPUMP_JOB +DBMS_DATAPUMP.DATA_FILTER +DBMS_DATAPUMP.DATA_REMAP +DBMS_DATAPUMP.DETACH +DBMS_DATAPUMP.DH_KEY_EXCHANGE +DBMS_DATAPUMP.ESTABLISH_REMOTE_CONTEXT +DBMS_DATAPUMP.GET_DUMPFILE_INFO +DBMS_DATAPUMP.GET_STATUS +DBMS_DATAPUMP.GET_STATUS_VERSION +DBMS_DATAPUMP.HAS_PRIVS +DBMS_DATAPUMP.LOG_ENTRY +DBMS_DATAPUMP.LOG_ERROR +DBMS_DATAPUMP.METADATA_FILTER +DBMS_DATAPUMP.METADATA_REMAP +DBMS_DATAPUMP.METADATA_TRANSFORM +DBMS_DATAPUMP.OPEN +DBMS_DATAPUMP.SETUP_REMOTE_CONTEXT +DBMS_DATAPUMP.SET_DEBUG +DBMS_DATAPUMP.SET_PARALLEL +DBMS_DATAPUMP.SET_PARAMETER +DBMS_DATAPUMP.SET_REMOTE_WORKER +DBMS_DATAPUMP.START_JOB +DBMS_DATAPUMP.STOP_JOB +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1010 +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1020 +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1120 +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1210 +DBMS_DATAPUMP.TRACE_ENTRY +DBMS_DATAPUMP.WAIT_FOR_JOB +DBMS_DATAPUMP_UTL. +DBMS_DATAPUMP_UTL.CREATE_DEFAULT_DIR +DBMS_DATAPUMP_UTL.EXTRACT_ELEMENT +DBMS_DATAPUMP_UTL.INSTANCE_CALLOUT_IMP +DBMS_DATAPUMP_UTL.INSTANCE_EXPORT_ACTION +DBMS_DATAPUMP_UTL.REPLACE_DEFAULT_DIR +DBMS_DATAPUMP_UTL.SYSTEM_CALLOUT_IMP +DBMS_DATA_MINING. +DBMS_DATA_MINING.ADD_COST_MATRIX +DBMS_DATA_MINING.ALTER_REVERSE_EXPRESSION +DBMS_DATA_MINING.APPLY +DBMS_DATA_MINING.COMPUTE_CONFUSION_MATRIX +DBMS_DATA_MINING.COMPUTE_LIFT +DBMS_DATA_MINING.COMPUTE_ROC +DBMS_DATA_MINING.CREATE_MODEL +DBMS_DATA_MINING.DROP_MODEL +DBMS_DATA_MINING.EXPORT_MODEL +DBMS_DATA_MINING.GET_ASSOCIATION_RULES +DBMS_DATA_MINING.GET_DEFAULT_SETTINGS +DBMS_DATA_MINING.GET_FREQUENT_ITEMSETS +DBMS_DATA_MINING.GET_MODEL_COST_MATRIX +DBMS_DATA_MINING.GET_MODEL_DETAILS_AI +DBMS_DATA_MINING.GET_MODEL_DETAILS_EM +DBMS_DATA_MINING.GET_MODEL_DETAILS_EM_COMP +DBMS_DATA_MINING.GET_MODEL_DETAILS_EM_PROJ +DBMS_DATA_MINING.GET_MODEL_DETAILS_GLM +DBMS_DATA_MINING.GET_MODEL_DETAILS_GLOBAL +DBMS_DATA_MINING.GET_MODEL_DETAILS_KM +DBMS_DATA_MINING.GET_MODEL_DETAILS_NB +DBMS_DATA_MINING.GET_MODEL_DETAILS_NMF +DBMS_DATA_MINING.GET_MODEL_DETAILS_OC +DBMS_DATA_MINING.GET_MODEL_DETAILS_SVD +DBMS_DATA_MINING.GET_MODEL_DETAILS_SVM +DBMS_DATA_MINING.GET_MODEL_DETAILS_XML +DBMS_DATA_MINING.GET_MODEL_SETTINGS +DBMS_DATA_MINING.GET_MODEL_SIGNATURE +DBMS_DATA_MINING.GET_MODEL_TRANSFORMATIONS +DBMS_DATA_MINING.GET_TRANSFORM_LIST +DBMS_DATA_MINING.IMPORT_MODEL +DBMS_DATA_MINING.RANK_APPLY +DBMS_DATA_MINING.REMOVE_COST_MATRIX +DBMS_DATA_MINING.RENAME_MODEL +DBMS_DATA_MINING_INTERNAL. +DBMS_DATA_MINING_INTERNAL.APPLY +DBMS_DATA_MINING_INTERNAL.BUILD +DBMS_DATA_MINING_INTERNAL.IMPORT_PMML_MODEL +DBMS_DATA_MINING_INTERNAL.PROCESS_ADP_BINNING_EXT +DBMS_DATA_MINING_INTERNAL.PROCESS_ADP_MVR_NORM +DBMS_DATA_MINING_INTERNAL.TEXT_XFORM +DBMS_DATA_MINING_INTERNAL.XFORM +DBMS_DATA_MINING_TRANSFORM. +DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_CAT +DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_NUM +DBMS_DATA_MINING_TRANSFORM.CREATE_CLIP +DBMS_DATA_MINING_TRANSFORM.CREATE_COL_REM +DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_CAT +DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM +DBMS_DATA_MINING_TRANSFORM.CREATE_NORM_LIN +DBMS_DATA_MINING_TRANSFORM.DESCRIBE_STACK +DBMS_DATA_MINING_TRANSFORM.GET_EXPRESSION +DBMS_DATA_MINING_TRANSFORM.INSERT_AUTOBIN_NUM_EQWIDTH +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_CAT_FREQ +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_NUM_EQWIDTH +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_NUM_QTILE +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_SUPER +DBMS_DATA_MINING_TRANSFORM.INSERT_CLIP_TRIM_TAIL +DBMS_DATA_MINING_TRANSFORM.INSERT_CLIP_WINSOR_TAIL +DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_CAT_MODE +DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_NUM_MEAN +DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_MINMAX +DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_SCALE +DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_ZSCORE +DBMS_DATA_MINING_TRANSFORM.SET_EXPRESSION +DBMS_DATA_MINING_TRANSFORM.SET_TRANSFORM +DBMS_DATA_MINING_TRANSFORM.STACK_BIN_CAT +DBMS_DATA_MINING_TRANSFORM.STACK_BIN_NUM +DBMS_DATA_MINING_TRANSFORM.STACK_CLIP +DBMS_DATA_MINING_TRANSFORM.STACK_COL_REM +DBMS_DATA_MINING_TRANSFORM.STACK_MISS_CAT +DBMS_DATA_MINING_TRANSFORM.STACK_MISS_NUM +DBMS_DATA_MINING_TRANSFORM.STACK_NORM_LIN +DBMS_DATA_MINING_TRANSFORM.XFORM_BIN_CAT +DBMS_DATA_MINING_TRANSFORM.XFORM_BIN_NUM +DBMS_DATA_MINING_TRANSFORM.XFORM_CLIP +DBMS_DATA_MINING_TRANSFORM.XFORM_COL_REM +DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_NUM +DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_STR +DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_CAT +DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_NUM +DBMS_DATA_MINING_TRANSFORM.XFORM_NORM_LIN +DBMS_DATA_MINING_TRANSFORM.XFORM_STACK +DBMS_DBFS_CONTENT. +DBMS_DBFS_CONTENT.CHECKACCESS +DBMS_DBFS_CONTENT.CHECKSPI +DBMS_DBFS_CONTENT.CREATEDIRECTORY +DBMS_DBFS_CONTENT.CREATEFILE +DBMS_DBFS_CONTENT.CREATELINK +DBMS_DBFS_CONTENT.CREATEREFERENCE +DBMS_DBFS_CONTENT.DECODEFEATURES +DBMS_DBFS_CONTENT.DELETECONTENT +DBMS_DBFS_CONTENT.DELETEDIRECTORY +DBMS_DBFS_CONTENT.DELETEFILE +DBMS_DBFS_CONTENT.FEATURENAME +DBMS_DBFS_CONTENT.FLUSHSTATS +DBMS_DBFS_CONTENT.GETATTR_VIEW +DBMS_DBFS_CONTENT.GETDEFAULTACL +DBMS_DBFS_CONTENT.GETDEFAULTASOF +DBMS_DBFS_CONTENT.GETDEFAULTCONTEXT +DBMS_DBFS_CONTENT.GETDEFAULTOWNER +DBMS_DBFS_CONTENT.GETDEFAULTPRINCIPAL +DBMS_DBFS_CONTENT.GETFEATURESBYMOUNT +DBMS_DBFS_CONTENT.GETFEATURESBYNAME +DBMS_DBFS_CONTENT.GETFEATURESBYPATH +DBMS_DBFS_CONTENT.GETPATH +DBMS_DBFS_CONTENT.GETPATHBYMOUNTID +DBMS_DBFS_CONTENT.GETPATHBYSTOREID +DBMS_DBFS_CONTENT.GETPATHNOWAIT +DBMS_DBFS_CONTENT.GETSTATS +DBMS_DBFS_CONTENT.GETSTOREBYMOUNT +DBMS_DBFS_CONTENT.GETSTOREBYNAME +DBMS_DBFS_CONTENT.GETSTOREBYPATH +DBMS_DBFS_CONTENT.GETTRACE +DBMS_DBFS_CONTENT.GETVERSION +DBMS_DBFS_CONTENT.LIST +DBMS_DBFS_CONTENT.LISTALLCONTENT +DBMS_DBFS_CONTENT.LISTALLPROPERTIES +DBMS_DBFS_CONTENT.LISTCURSOR +DBMS_DBFS_CONTENT.LISTMOUNTS +DBMS_DBFS_CONTENT.LISTSTORES +DBMS_DBFS_CONTENT.LOCKPATH +DBMS_DBFS_CONTENT.MOUNTSTORE +DBMS_DBFS_CONTENT.MOVEPATH +DBMS_DBFS_CONTENT.NORMALIZEPATH +DBMS_DBFS_CONTENT.PROPANY +DBMS_DBFS_CONTENT.PROPERTIESH2T +DBMS_DBFS_CONTENT.PROPERTIEST2H +DBMS_DBFS_CONTENT.PROPNUMBER +DBMS_DBFS_CONTENT.PROPRAW +DBMS_DBFS_CONTENT.PROPTIMESTAMP +DBMS_DBFS_CONTENT.PROPVARCHAR2 +DBMS_DBFS_CONTENT.PURGEALL +DBMS_DBFS_CONTENT.PURGEPATH +DBMS_DBFS_CONTENT.PUTPATH +DBMS_DBFS_CONTENT.REGISTERSTORE +DBMS_DBFS_CONTENT.REMOUNTALL +DBMS_DBFS_CONTENT.REMOUNTSTORE +DBMS_DBFS_CONTENT.RENAMEPATH +DBMS_DBFS_CONTENT.RESTOREALL +DBMS_DBFS_CONTENT.RESTOREPATH +DBMS_DBFS_CONTENT.SEARCH +DBMS_DBFS_CONTENT.SETDEFAULTACL +DBMS_DBFS_CONTENT.SETDEFAULTASOF +DBMS_DBFS_CONTENT.SETDEFAULTCONTEXT +DBMS_DBFS_CONTENT.SETDEFAULTOWNER +DBMS_DBFS_CONTENT.SETDEFAULTPRINCIPAL +DBMS_DBFS_CONTENT.SETPATH +DBMS_DBFS_CONTENT.SETSTATS +DBMS_DBFS_CONTENT.SETTRACE +DBMS_DBFS_CONTENT.SPACEUSAGE +DBMS_DBFS_CONTENT.TRACE +DBMS_DBFS_CONTENT.TRACEENABLED +DBMS_DBFS_CONTENT.UNLOCKPATH +DBMS_DBFS_CONTENT.UNMOUNTALL +DBMS_DBFS_CONTENT.UNMOUNTSTORE +DBMS_DBFS_CONTENT.UNREGISTERSTORE +DBMS_DBFS_CONTENT_ADMIN. +DBMS_DBFS_CONTENT_ADMIN.CHECKSPI +DBMS_DBFS_CONTENT_ADMIN.EXIMREGISTERALL +DBMS_DBFS_CONTENT_ADMIN.EXIM_MOUNT +DBMS_DBFS_CONTENT_ADMIN.EXIM_MOUNTP +DBMS_DBFS_CONTENT_ADMIN.EXIM_STORE +DBMS_DBFS_CONTENT_ADMIN.INSTANCE_INFO_EXP +DBMS_DBFS_CONTENT_ADMIN.MOUNTSTORE +DBMS_DBFS_CONTENT_ADMIN.MOUNTSTORE_LOG +DBMS_DBFS_CONTENT_ADMIN.REGISTERSTORE +DBMS_DBFS_CONTENT_ADMIN.REGISTERSTORE_LOG +DBMS_DBFS_CONTENT_ADMIN.SCHEMA_INFO_EXP +DBMS_DBFS_CONTENT_ADMIN.SYSTEM_INFO_EXP +DBMS_DBFS_CONTENT_ADMIN.UNMOUNTSTORE +DBMS_DBFS_CONTENT_ADMIN.UNMOUNTSTORE_LOG +DBMS_DBFS_CONTENT_ADMIN.UNREGISTERSTORE +DBMS_DBFS_CONTENT_ADMIN.UNREGISTERSTORE_LOG +DBMS_DBFS_CONTENT_ADMIN.UPDATECTX +DBMS_DBFS_CONTENT_ADMIN.UPDATESTATS +DBMS_DBFS_CONTENT_SPI. +DBMS_DBFS_CONTENT_SPI.CHECKACCESS +DBMS_DBFS_CONTENT_SPI.CREATEDIRECTORY +DBMS_DBFS_CONTENT_SPI.CREATEFILE +DBMS_DBFS_CONTENT_SPI.CREATEGETATTRVIEW +DBMS_DBFS_CONTENT_SPI.CREATELINK +DBMS_DBFS_CONTENT_SPI.CREATEREFERENCE +DBMS_DBFS_CONTENT_SPI.DELETECONTENT +DBMS_DBFS_CONTENT_SPI.DELETEDIRECTORY +DBMS_DBFS_CONTENT_SPI.DELETEFILE +DBMS_DBFS_CONTENT_SPI.DROPGETATTRVIEW +DBMS_DBFS_CONTENT_SPI.GETFEATURES +DBMS_DBFS_CONTENT_SPI.GETPATH +DBMS_DBFS_CONTENT_SPI.GETPATHBYSTOREID +DBMS_DBFS_CONTENT_SPI.GETPATHNOWAIT +DBMS_DBFS_CONTENT_SPI.GETSTOREID +DBMS_DBFS_CONTENT_SPI.GETVERSION +DBMS_DBFS_CONTENT_SPI.LIST +DBMS_DBFS_CONTENT_SPI.LISTCURSOR +DBMS_DBFS_CONTENT_SPI.LOCKPATH +DBMS_DBFS_CONTENT_SPI.MOVEPATH +DBMS_DBFS_CONTENT_SPI.PURGEALL +DBMS_DBFS_CONTENT_SPI.PURGEPATH +DBMS_DBFS_CONTENT_SPI.PUTPATH +DBMS_DBFS_CONTENT_SPI.RENAMEPATH +DBMS_DBFS_CONTENT_SPI.RESTOREALL +DBMS_DBFS_CONTENT_SPI.RESTOREPATH +DBMS_DBFS_CONTENT_SPI.SEARCH +DBMS_DBFS_CONTENT_SPI.SETPATH +DBMS_DBFS_CONTENT_SPI.SPACEUSAGE +DBMS_DBFS_CONTENT_SPI.SPACEUSAGEFULL +DBMS_DBFS_CONTENT_SPI.UNLOCKPATH +DBMS_DBFS_HS. +DBMS_DBFS_HS.CHECKACCESS +DBMS_DBFS_HS.CLEANUPUNUSEDBACKUPFILES +DBMS_DBFS_HS.CREATEBUCKET +DBMS_DBFS_HS.CREATEDIRECTORY +DBMS_DBFS_HS.CREATEFILE +DBMS_DBFS_HS.CREATELINK +DBMS_DBFS_HS.CREATEREFERENCE +DBMS_DBFS_HS.CREATESTORE +DBMS_DBFS_HS.DELETECONTENT +DBMS_DBFS_HS.DELETEDIRECTORY +DBMS_DBFS_HS.DELETEFILE +DBMS_DBFS_HS.DEREGSTORECOMMAND +DBMS_DBFS_HS.DROPSTORE +DBMS_DBFS_HS.FLUSHCACHE +DBMS_DBFS_HS.GETFEATURES +DBMS_DBFS_HS.GETPATH +DBMS_DBFS_HS.GETPATHBYSTOREID +DBMS_DBFS_HS.GETPATHNOWAIT +DBMS_DBFS_HS.GETSTOREID +DBMS_DBFS_HS.GETSTOREPROPERTY +DBMS_DBFS_HS.GETVERSION +DBMS_DBFS_HS.LIST +DBMS_DBFS_HS.LISTCONTENTFILENAME +DBMS_DBFS_HS.LOCKPATH +DBMS_DBFS_HS.PURGEALL +DBMS_DBFS_HS.PURGEPATH +DBMS_DBFS_HS.PUTPATH +DBMS_DBFS_HS.RECONFIGCACHE +DBMS_DBFS_HS.REGISTERSTORECOMMAND +DBMS_DBFS_HS.RENAMEPATH +DBMS_DBFS_HS.RESTOREALL +DBMS_DBFS_HS.RESTOREPATH +DBMS_DBFS_HS.SEARCH +DBMS_DBFS_HS.SENDCOMMAND +DBMS_DBFS_HS.SETPATH +DBMS_DBFS_HS.SETSTOREPROPERTY +DBMS_DBFS_HS.SPACEUSAGE +DBMS_DBFS_HS.STOREPUSH +DBMS_DBFS_HS.UNLOCKPATH +DBMS_DBFS_SFS. +DBMS_DBFS_SFS.ADDFSPROPERTIES +DBMS_DBFS_SFS.CHECKACCESS +DBMS_DBFS_SFS.CLEANUPORPHANS +DBMS_DBFS_SFS.CREATEDIRECTORY +DBMS_DBFS_SFS.CREATEFILE +DBMS_DBFS_SFS.CREATEFILESYSTEM +DBMS_DBFS_SFS.CREATEGETATTRVIEW +DBMS_DBFS_SFS.CREATELINK +DBMS_DBFS_SFS.CREATEREFERENCE +DBMS_DBFS_SFS.CREATESNAPSHOT +DBMS_DBFS_SFS.CREATESTORE +DBMS_DBFS_SFS.DELETECONTENT +DBMS_DBFS_SFS.DELETEDIRECTORY +DBMS_DBFS_SFS.DELETEFILE +DBMS_DBFS_SFS.DELETEFSPROPERTIES +DBMS_DBFS_SFS.DROPFILESYSTEM +DBMS_DBFS_SFS.DROPGETATTRVIEW +DBMS_DBFS_SFS.DROPSNAPSHOT +DBMS_DBFS_SFS.EXPORTFILESYSTEM +DBMS_DBFS_SFS.EXPORTTABLE +DBMS_DBFS_SFS.FS_ACCESS +DBMS_DBFS_SFS.FS_CHMOD +DBMS_DBFS_SFS.FS_CHOWN +DBMS_DBFS_SFS.FS_CREAT +DBMS_DBFS_SFS.FS_DESTROY +DBMS_DBFS_SFS.FS_FGETATTR +DBMS_DBFS_SFS.FS_FLUSH +DBMS_DBFS_SFS.FS_FSYNC +DBMS_DBFS_SFS.FS_FSYNCDIR +DBMS_DBFS_SFS.FS_FTRUNCATE +DBMS_DBFS_SFS.FS_GETATTR +DBMS_DBFS_SFS.FS_GETXATTR +DBMS_DBFS_SFS.FS_INIT +DBMS_DBFS_SFS.FS_LINK +DBMS_DBFS_SFS.FS_LISTXATTR +DBMS_DBFS_SFS.FS_MKDIR +DBMS_DBFS_SFS.FS_MKNOD +DBMS_DBFS_SFS.FS_OPEN +DBMS_DBFS_SFS.FS_OPENDIR +DBMS_DBFS_SFS.FS_READ +DBMS_DBFS_SFS.FS_READDIR +DBMS_DBFS_SFS.FS_READLINK +DBMS_DBFS_SFS.FS_RELEASE +DBMS_DBFS_SFS.FS_RELEASEDIR +DBMS_DBFS_SFS.FS_REMOVEXATTR +DBMS_DBFS_SFS.FS_RENAME +DBMS_DBFS_SFS.FS_RMDIR +DBMS_DBFS_SFS.FS_SETXATTR +DBMS_DBFS_SFS.FS_STATFS +DBMS_DBFS_SFS.FS_SYMLINK +DBMS_DBFS_SFS.FS_TRUNCATE +DBMS_DBFS_SFS.FS_UNLINK +DBMS_DBFS_SFS.FS_UTIME +DBMS_DBFS_SFS.FS_WRITE +DBMS_DBFS_SFS.GETFEATURES +DBMS_DBFS_SFS.GETPATH +DBMS_DBFS_SFS.GETPATHBYSTOREID +DBMS_DBFS_SFS.GETPATHNOWAIT +DBMS_DBFS_SFS.GETSTOREID +DBMS_DBFS_SFS.GETVERSION +DBMS_DBFS_SFS.GET_EPOCH +DBMS_DBFS_SFS.INITFS +DBMS_DBFS_SFS.LIST +DBMS_DBFS_SFS.LISTCURSOR +DBMS_DBFS_SFS.LISTFILESYSTEMS +DBMS_DBFS_SFS.LISTSNAPSHOTS +DBMS_DBFS_SFS.LISTTABLES +DBMS_DBFS_SFS.LISTVOLUMES +DBMS_DBFS_SFS.LOCKPATH +DBMS_DBFS_SFS.MOVEPATH +DBMS_DBFS_SFS.NORMALIZEFS +DBMS_DBFS_SFS.PURGEALL +DBMS_DBFS_SFS.PURGEPATH +DBMS_DBFS_SFS.PUTPATH +DBMS_DBFS_SFS.RECREATEGETATTRVIEW +DBMS_DBFS_SFS.REGISTERFILESYSTEM +DBMS_DBFS_SFS.RENAMEPATH +DBMS_DBFS_SFS.REORGANIZEFS +DBMS_DBFS_SFS.RESTOREALL +DBMS_DBFS_SFS.RESTOREPATH +DBMS_DBFS_SFS.REVERTSNAPSHOT +DBMS_DBFS_SFS.SEARCH +DBMS_DBFS_SFS.SETFSPROPERTIES +DBMS_DBFS_SFS.SETPATH +DBMS_DBFS_SFS.SHRINKFS +DBMS_DBFS_SFS.SPACEUSAGE +DBMS_DBFS_SFS.SPACEUSAGEFULL +DBMS_DBFS_SFS.TO_EPOCH +DBMS_DBFS_SFS.UNLOCKPATH +DBMS_DBFS_SFS.UNREGISTERFILESYSTEM +DBMS_DBFS_SFS_ADMIN. +DBMS_DBFS_SFS_ADMIN.BLESSUSER +DBMS_DBFS_SFS_ADMIN.CREATEFILESYSTEM +DBMS_DBFS_SFS_ADMIN.CREATEFILESYSTEM_LOG +DBMS_DBFS_SFS_ADMIN.CREATESNAPSHOT +DBMS_DBFS_SFS_ADMIN.DEFAULTTABLESPACE +DBMS_DBFS_SFS_ADMIN.DELETE_ORPHANS +DBMS_DBFS_SFS_ADMIN.DELETE_ORPHANS_LOG +DBMS_DBFS_SFS_ADMIN.DROPFILESYSTEM +DBMS_DBFS_SFS_ADMIN.DROPFILESYSTEM_LOG +DBMS_DBFS_SFS_ADMIN.DROPSNAPSHOT +DBMS_DBFS_SFS_ADMIN.DROP_ALL_TABLES +DBMS_DBFS_SFS_ADMIN.EXIMREGISTERALL +DBMS_DBFS_SFS_ADMIN.EXIM_ATTRV +DBMS_DBFS_SFS_ADMIN.EXIM_FS +DBMS_DBFS_SFS_ADMIN.EXIM_GRANTS +DBMS_DBFS_SFS_ADMIN.EXIM_SEQ +DBMS_DBFS_SFS_ADMIN.EXIM_SNAP +DBMS_DBFS_SFS_ADMIN.EXIM_TAB +DBMS_DBFS_SFS_ADMIN.EXIM_TABP +DBMS_DBFS_SFS_ADMIN.EXIM_TAB_LOG +DBMS_DBFS_SFS_ADMIN.EXIM_VOL +DBMS_DBFS_SFS_ADMIN.GETSTOREID +DBMS_DBFS_SFS_ADMIN.INITFILESYSTEM +DBMS_DBFS_SFS_ADMIN.INITFILESYSTEM_LOG +DBMS_DBFS_SFS_ADMIN.INSTANCE_INFO_EXP +DBMS_DBFS_SFS_ADMIN.LOBUSAGE +DBMS_DBFS_SFS_ADMIN.PARTITION_SEQUENCE +DBMS_DBFS_SFS_ADMIN.PARTITION_SEQUENCE_LOG +DBMS_DBFS_SFS_ADMIN.RECACHE_SEQUENCE +DBMS_DBFS_SFS_ADMIN.RECACHE_SEQUENCE_LOG +DBMS_DBFS_SFS_ADMIN.REGISTERFILESYSTEM +DBMS_DBFS_SFS_ADMIN.REGISTERFILESYSTEM_LOG +DBMS_DBFS_SFS_ADMIN.REVERTSNAPSHOT +DBMS_DBFS_SFS_ADMIN.SCHEMA_INFO_EXP +DBMS_DBFS_SFS_ADMIN.SETFSPROPERTIES +DBMS_DBFS_SFS_ADMIN.SETFSPROPERTIES_LOG +DBMS_DBFS_SFS_ADMIN.SPACEDEPENDENTS +DBMS_DBFS_SFS_ADMIN.SPACEUSAGE +DBMS_DBFS_SFS_ADMIN.SYSTEM_INFO_EXP +DBMS_DBFS_SFS_ADMIN.TBSUSAGE +DBMS_DBFS_SFS_ADMIN.UNREGISTERFILESYSTEM +DBMS_DBFS_SFS_ADMIN.UNREGISTERFILESYSTEM_LOG +DBMS_DBVERIFY. +DBMS_DBVERIFY.DBV2 +DBMS_DB_VERSION. +DBMS_DDL. +DBMS_DDL.ALTER_COMPILE +DBMS_DDL.ALTER_TABLE_NOT_REFERENCEABLE +DBMS_DDL.ALTER_TABLE_REFERENCEABLE +DBMS_DDL.ANALYZE_OBJECT +DBMS_DDL.CREATE_WRAPPED +DBMS_DDL.IS_TRIGGER_FIRE_ONCE +DBMS_DDL.IS_TRIGGER_FIRE_ONCE_INTERNAL +DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY +DBMS_DDL.WRAP +DBMS_DDL_INTERNAL. +DBMS_DDL_INTERNAL.CHECK_TRIGGER_FIRING_PROPERTY +DBMS_DDL_INTERNAL.COMPAT_OK +DBMS_DDL_INTERNAL.GEN_NEW_OBJECT_ID +DBMS_DDL_INTERNAL.HAS_ALTER_ANY_TRIGGER_PRIV +DBMS_DDL_INTERNAL.HAS_EXP_IMP_PRIV +DBMS_DDL_INTERNAL.IS_DDL_TRIGGER +DBMS_DDL_INTERNAL.SWAP_BOOTSTRAP +DBMS_DEBUG. +DBMS_DEBUG.ABORT +DBMS_DEBUG.ATTACH_SESSION +DBMS_DEBUG.CONTINUE +DBMS_DEBUG.DEBUG_OFF +DBMS_DEBUG.DEBUG_ON +DBMS_DEBUG.DELETE_BREAKPOINT +DBMS_DEBUG.DELETE_OER_BREAKPOINT +DBMS_DEBUG.DETACH_SESSION +DBMS_DEBUG.DISABLE_BREAKPOINT +DBMS_DEBUG.ENABLE_BREAKPOINT +DBMS_DEBUG.EXECUTE +DBMS_DEBUG.GET_ENCODED_PKGVARS_FOR_CLIENT +DBMS_DEBUG.GET_ENCODED_STACK_FOR_CLIENT +DBMS_DEBUG.GET_INDEXES +DBMS_DEBUG.GET_LINE_MAP +DBMS_DEBUG.GET_MORE_SOURCE +DBMS_DEBUG.GET_RUNTIME_INFO +DBMS_DEBUG.GET_TIMEOUT_BEHAVIOUR +DBMS_DEBUG.GET_VALUE +DBMS_DEBUG.INITIALIZE +DBMS_DEBUG.PING +DBMS_DEBUG.PRINT_BACKTRACE +DBMS_DEBUG.PRINT_INSTANTIATIONS +DBMS_DEBUG.PROBE_VERSION +DBMS_DEBUG.SELF_CHECK +DBMS_DEBUG.SET_BREAKPOINT +DBMS_DEBUG.SET_DIAGNOSTIC_LEVEL +DBMS_DEBUG.SET_OER_BREAKPOINT +DBMS_DEBUG.SET_TIMEOUT +DBMS_DEBUG.SET_TIMEOUT_BEHAVIOUR +DBMS_DEBUG.SET_VALUE +DBMS_DEBUG.SHOW_BREAKPOINTS +DBMS_DEBUG.SHOW_FRAME_SOURCE +DBMS_DEBUG.SHOW_SOURCE +DBMS_DEBUG.SYNCHRONIZE +DBMS_DEBUG.TARGET_PROGRAM_RUNNING +DBMS_DEBUG_JDWP. +DBMS_DEBUG_JDWP.CONNECT_TCP +DBMS_DEBUG_JDWP.CURRENT_SESSION_ID +DBMS_DEBUG_JDWP.CURRENT_SESSION_SERIAL +DBMS_DEBUG_JDWP.DISCONNECT +DBMS_DEBUG_JDWP.GET_NLS_PARAMETER +DBMS_DEBUG_JDWP.PROCESS_CONNECT_STRING +DBMS_DEBUG_JDWP.SET_NLS_PARAMETER +DBMS_DEBUG_JDWP_CUSTOM. +DBMS_DEBUG_JDWP_CUSTOM.CONNECT_DEBUGGER +DBMS_DEFER. +DBMS_DEFER.ANYDATA_ARG +DBMS_DEFER.ANY_CHAR_ARG +DBMS_DEFER.ANY_CLOB_ARG +DBMS_DEFER.ANY_VARCHAR2_ARG +DBMS_DEFER.BLOB_ARG +DBMS_DEFER.CALL +DBMS_DEFER.CHAR_ARG +DBMS_DEFER.CLOB_ARG +DBMS_DEFER.COMMIT_WORK +DBMS_DEFER.DATE_ARG +DBMS_DEFER.GET_NEXT_TXN_LOG_RUN +DBMS_DEFER.GET_TXN_LOG_RUNS +DBMS_DEFER.IDS_ARG +DBMS_DEFER.IYM_ARG +DBMS_DEFER.NCHAR_ARG +DBMS_DEFER.NCLOB_ARG +DBMS_DEFER.NUMBER_ARG +DBMS_DEFER.NVARCHAR2_ARG +DBMS_DEFER.PURGE_TRANSACTION_LOG +DBMS_DEFER.RAW_ARG +DBMS_DEFER.RECORD_TRANSACTION +DBMS_DEFER.ROWID_ARG +DBMS_DEFER.TIMESTAMP_ARG +DBMS_DEFER.TIME_ARG +DBMS_DEFER.TRANSACTION +DBMS_DEFER.TSLTZ_ARG +DBMS_DEFER.TSTZ_ARG +DBMS_DEFER.TTZ_ARG +DBMS_DEFER.VARCHAR2_ARG +DBMS_DEFERGEN. +DBMS_DEFERGEN.ALTER_AUDIT_TABLE +DBMS_DEFERGEN.CREATE_AUDIT_TABLE +DBMS_DEFERGEN.GENERATE_AUDIT_PACKAGE +DBMS_DEFERGEN.GENERATE_PACKAGE +DBMS_DEFERGEN.GENERATE_PRIORITY_PACKAGE +DBMS_DEFERGEN.GENERATE_TP_PACKAGE +DBMS_DEFERGEN.GENERATE_TRIGGERS +DBMS_DEFERGEN.GENERATE_WRAPPER_PACKAGE +DBMS_DEFERGEN.GENERATE_WRAPPER_PROCEDURE +DBMS_DEFERGEN.GET_KEY_COLUMN +DBMS_DEFERGEN_AUDIT. +DBMS_DEFERGEN_AUDIT.ALTER_AUDIT_TABLE +DBMS_DEFERGEN_AUDIT.CREATE_AUDIT_TABLE +DBMS_DEFERGEN_AUDIT.MK_ASSIGNMENT +DBMS_DEFERGEN_AUDIT.MK_DELETE_ROLLBACK +DBMS_DEFERGEN_AUDIT.MK_METHOD_ARG +DBMS_DEFERGEN_AUDIT.MK_METHOD_DECL +DBMS_DEFERGEN_AUDIT.MK_NEED_ROLLBACK_DECL +DBMS_DEFERGEN_AUDIT.MK_NEG_IFCLAUSE +DBMS_DEFERGEN_AUDIT.MK_POS_IFCLAUSE +DBMS_DEFERGEN_AUDIT.MK_PROC_ARG +DBMS_DEFERGEN_AUDIT.MK_PROC_DECL +DBMS_DEFERGEN_AUDIT.MK_REP_DELETE +DBMS_DEFERGEN_AUDIT.MK_REP_INSERT +DBMS_DEFERGEN_AUDIT.MK_REP_UPDATE +DBMS_DEFERGEN_AUDIT.MK_ROLLBACK +DBMS_DEFERGEN_AUDIT.MK_SPEC_CONTENT +DBMS_DEFERGEN_AUDIT.MK_TP_BODY_CONTENT_ASYNC +DBMS_DEFERGEN_AUDIT.MK_TP_BODY_CONTENT_SYNC +DBMS_DEFERGEN_AUDIT.MK_TRIGGER_BODY +DBMS_DEFERGEN_AUDIT.MK_TRIGGER_CONTENT +DBMS_DEFERGEN_AUDIT.MK_TRIGGER_DECL +DBMS_DEFERGEN_AUDIT.MK_UPDATE_ROLLBACK +DBMS_DEFERGEN_AUDIT.MK_VAR_DECL +DBMS_DEFERGEN_AUDIT.MK_WHERETEXT +DBMS_DEFERGEN_AUDIT.POPULATE_GLOBAL_RECORDS +DBMS_DEFERGEN_INTERNAL. +DBMS_DEFERGEN_INTERNAL.GET_COLUMN +DBMS_DEFERGEN_INTERNAL.GET_COL_INFO +DBMS_DEFERGEN_INTERNAL.GET_SNAPSHOT_TNAME +DBMS_DEFERGEN_INTERNAL.IP_MK_BODY_CONTENT +DBMS_DEFERGEN_INTERNAL.IS_SNAPSHOT +DBMS_DEFERGEN_INTERNAL.MK_BODY_CONTENT +DBMS_DEFERGEN_INTERNAL.MK_SPEC_CONTENT +DBMS_DEFERGEN_INTERNAL.MK_TP_BODY_CONTENT +DBMS_DEFERGEN_INTERNAL.MK_TP_SPEC_CONTENT +DBMS_DEFERGEN_INTERNAL.MK_TRIGGER_CONTENT +DBMS_DEFERGEN_INTERNAL.WRAP_PACKAGE_BODY +DBMS_DEFERGEN_INTERNAL.WRAP_PACKAGE_SPEC +DBMS_DEFERGEN_INTERNAL.WRAP_TRIGGER_CONTENT +DBMS_DEFERGEN_LOB. +DBMS_DEFERGEN_LOB.GET_LOB_INDICES +DBMS_DEFERGEN_LOB.GET_PKEY_INDICES +DBMS_DEFERGEN_LOB.IP_MK_PACKAGE_BODY +DBMS_DEFERGEN_LOB.MK_PACKAGE_BODY +DBMS_DEFERGEN_LOB.MK_PACKAGE_SPEC +DBMS_DEFERGEN_PRIORITY. +DBMS_DEFERGEN_PRIORITY.MK_BODY_CONTENT +DBMS_DEFERGEN_PRIORITY.MK_SPEC_CONTENT +DBMS_DEFERGEN_RESOLUTION. +DBMS_DEFERGEN_RESOLUTION.MK_BODY_CONTENT +DBMS_DEFERGEN_RESOLUTION.MK_SPEC_CONTENT +DBMS_DEFERGEN_UTIL. +DBMS_DEFERGEN_UTIL.APPEND_CHARS +DBMS_DEFERGEN_UTIL.BASE_TYPE +DBMS_DEFERGEN_UTIL.BINARY_SEARCH +DBMS_DEFERGEN_UTIL.COPY_OUTTAB +DBMS_DEFERGEN_UTIL.COUNT_PLSQL_TABLE +DBMS_DEFERGEN_UTIL.DEFAULT_OUTPUT_TABLE +DBMS_DEFERGEN_UTIL.GET_INITAB +DBMS_DEFERGEN_UTIL.INITIALIZE_OUTTAB +DBMS_DEFERGEN_UTIL.IP_GEN_ARG +DBMS_DEFERGEN_UTIL.IP_GEN_CALL +DBMS_DEFERGEN_UTIL.IS_NULLABLE +DBMS_DEFERGEN_UTIL.MK_NAME +DBMS_DEFERGEN_UTIL.NLS_SUBSTR +DBMS_DEFERGEN_UTIL.OUTPUT +DBMS_DEFERGEN_UTIL.PUT_OUTTAB +DBMS_DEFERGEN_UTIL.PUT_OUTTAB_HEAD +DBMS_DEFERGEN_UTIL.PUT_THREE_OUTTAB_HEAD +DBMS_DEFERGEN_UTIL.QUOTE_MIXED_CASE +DBMS_DEFERGEN_UTIL.RTRIM_CHARS +DBMS_DEFERGEN_WRAP. +DBMS_DEFERGEN_WRAP.ANY_CHAR_INFO +DBMS_DEFERGEN_WRAP.GET_ARGUMENT +DBMS_DEFERGEN_WRAP.MK_WRAPPER_BODY +DBMS_DEFERGEN_WRAP.MK_WRAPPER_PROCEDURE +DBMS_DEFERGEN_WRAP.MK_WRAPPER_SPEC +DBMS_DEFER_DEFINER. +DBMS_DEFER_DEFINER.ANYDATA_ARG +DBMS_DEFER_DEFINER.ANY_CHAR_ARG +DBMS_DEFER_DEFINER.ANY_CLOB_ARG +DBMS_DEFER_DEFINER.ANY_VARCHAR2_ARG +DBMS_DEFER_DEFINER.BLOB_ARG +DBMS_DEFER_DEFINER.CALL +DBMS_DEFER_DEFINER.CHAR_ARG +DBMS_DEFER_DEFINER.CLOB_ARG +DBMS_DEFER_DEFINER.COMMIT_WORK +DBMS_DEFER_DEFINER.DATE_ARG +DBMS_DEFER_DEFINER.GET_NEXT_TXN_LOG_RUN +DBMS_DEFER_DEFINER.GET_TXN_LOG_RUNS +DBMS_DEFER_DEFINER.IDS_ARG +DBMS_DEFER_DEFINER.IYM_ARG +DBMS_DEFER_DEFINER.NCHAR_ARG +DBMS_DEFER_DEFINER.NCLOB_ARG +DBMS_DEFER_DEFINER.NUMBER_ARG +DBMS_DEFER_DEFINER.NVARCHAR2_ARG +DBMS_DEFER_DEFINER.PURGE_TRANSACTION_LOG +DBMS_DEFER_DEFINER.RAW_ARG +DBMS_DEFER_DEFINER.RECORD_TRANSACTION +DBMS_DEFER_DEFINER.ROWID_ARG +DBMS_DEFER_DEFINER.TIMESTAMP_ARG +DBMS_DEFER_DEFINER.TIME_ARG +DBMS_DEFER_DEFINER.TRANSACTION +DBMS_DEFER_DEFINER.TSLTZ_ARG +DBMS_DEFER_DEFINER.TSTZ_ARG +DBMS_DEFER_DEFINER.TTZ_ARG +DBMS_DEFER_DEFINER.VARCHAR2_ARG +DBMS_DEFER_ENQ_UTL. +DBMS_DEFER_ENQ_UTL.ANYDATA_ARG +DBMS_DEFER_ENQ_UTL.BLOB_ARG +DBMS_DEFER_ENQ_UTL.CHAR_ARG +DBMS_DEFER_ENQ_UTL.CLOB_ARG +DBMS_DEFER_ENQ_UTL.DATE_ARG +DBMS_DEFER_ENQ_UTL.ENQUE_CALL +DBMS_DEFER_ENQ_UTL.ENQUE_CALL_INTERNAL +DBMS_DEFER_ENQ_UTL.GET_GLOBAL_ID +DBMS_DEFER_ENQ_UTL.GET_LAST_CALL_NO +DBMS_DEFER_ENQ_UTL.IDS_ARG +DBMS_DEFER_ENQ_UTL.IYM_ARG +DBMS_DEFER_ENQ_UTL.NUMBER_ARG +DBMS_DEFER_ENQ_UTL.RAW_ARG +DBMS_DEFER_ENQ_UTL.REQUIRE_A_ROLLBACK +DBMS_DEFER_ENQ_UTL.RESET_TRAN_ID +DBMS_DEFER_ENQ_UTL.ROWID_ARG +DBMS_DEFER_ENQ_UTL.TIMESTAMP_ARG +DBMS_DEFER_ENQ_UTL.TIME_ARG +DBMS_DEFER_ENQ_UTL.TSLTZ_ARG +DBMS_DEFER_ENQ_UTL.TSTZ_ARG +DBMS_DEFER_ENQ_UTL.TTZ_ARG +DBMS_DEFER_ENQ_UTL.VARCHAR2_ARG +DBMS_DEFER_IMPORT_INTERNAL. +DBMS_DEFER_IMPORT_INTERNAL.DROP_PROPAGATOR_CASCADE +DBMS_DEFER_IMPORT_INTERNAL.QUEUE_EXPORT_CHECK +DBMS_DEFER_IMPORT_INTERNAL.QUEUE_IMPORT_CHECK +DBMS_DEFER_INTERNAL_QUERY. +DBMS_DEFER_INTERNAL_QUERY.GET_CALL_ARGS +DBMS_DEFER_INTERNAL_SYS. +DBMS_DEFER_INTERNAL_SYS.DELETE_TRAN_INNER +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_BLOB +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_CHAR +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_CLOB +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_DATE +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_IDS +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_IYM +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_NCHAR +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_NCLOB +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_NUM +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_NVARCHAR2 +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_RAW +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_ROWID +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TIME +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TIMESTAMP +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TSLTZ +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TSTZ +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_TTZ +DBMS_DEFER_INTERNAL_SYS.ERROR_ARG_VARCHAR2 +DBMS_DEFER_INTERNAL_SYS.ERROR_CALL +DBMS_DEFER_INTERNAL_SYS.ERROR_END_TRAN +DBMS_DEFER_INTERNAL_SYS.ERROR_TRAN +DBMS_DEFER_INTERNAL_SYS.GET_NEXT_TXN_LOG_RUN +DBMS_DEFER_INTERNAL_SYS.GET_TXN_LOG_RUNS +DBMS_DEFER_INTERNAL_SYS.INTERNAL_ERROR_END_TRAN +DBMS_DEFER_INTERNAL_SYS.PARALLEL_PUSH_RECOVERY +DBMS_DEFER_INTERNAL_SYS.PING +DBMS_DEFER_INTERNAL_SYS.PURGE_TRANSACTION_LOG +DBMS_DEFER_INTERNAL_SYS.RECORD_TRANSACTION +DBMS_DEFER_INTERNAL_SYS.REGISTER_PROPAGATOR +DBMS_DEFER_QUERY. +DBMS_DEFER_QUERY.GET_ANYDATA_ARG +DBMS_DEFER_QUERY.GET_ARG_CSETID +DBMS_DEFER_QUERY.GET_ARG_FORM +DBMS_DEFER_QUERY.GET_ARG_TYPE +DBMS_DEFER_QUERY.GET_BLOB_ARG +DBMS_DEFER_QUERY.GET_CALL_ARGS +DBMS_DEFER_QUERY.GET_CHAR_ARG +DBMS_DEFER_QUERY.GET_CLOB_ARG +DBMS_DEFER_QUERY.GET_DATE_ARG +DBMS_DEFER_QUERY.GET_IDS_ARG +DBMS_DEFER_QUERY.GET_IYM_ARG +DBMS_DEFER_QUERY.GET_NCHAR_ARG +DBMS_DEFER_QUERY.GET_NCLOB_ARG +DBMS_DEFER_QUERY.GET_NUMBER_ARG +DBMS_DEFER_QUERY.GET_NVARCHAR2_ARG +DBMS_DEFER_QUERY.GET_OBJECT_NULL_VECTOR_ARG +DBMS_DEFER_QUERY.GET_RAW_ARG +DBMS_DEFER_QUERY.GET_ROWID_ARG +DBMS_DEFER_QUERY.GET_TIMESTAMP_ARG +DBMS_DEFER_QUERY.GET_TIME_ARG +DBMS_DEFER_QUERY.GET_TSLTZ_ARG +DBMS_DEFER_QUERY.GET_TSTZ_ARG +DBMS_DEFER_QUERY.GET_TTZ_ARG +DBMS_DEFER_QUERY.GET_VARCHAR2_ARG +DBMS_DEFER_QUERY_DEFINER. +DBMS_DEFER_QUERY_DEFINER.GET_ANYDATA_ARG +DBMS_DEFER_QUERY_DEFINER.GET_ARG_CSETID +DBMS_DEFER_QUERY_DEFINER.GET_ARG_FORM +DBMS_DEFER_QUERY_DEFINER.GET_ARG_TYPE +DBMS_DEFER_QUERY_DEFINER.GET_BLOB_ARG +DBMS_DEFER_QUERY_DEFINER.GET_CALL_ARGS +DBMS_DEFER_QUERY_DEFINER.GET_CHAR_ARG +DBMS_DEFER_QUERY_DEFINER.GET_CLOB_ARG +DBMS_DEFER_QUERY_DEFINER.GET_DATE_ARG +DBMS_DEFER_QUERY_DEFINER.GET_IDS_ARG +DBMS_DEFER_QUERY_DEFINER.GET_IYM_ARG +DBMS_DEFER_QUERY_DEFINER.GET_NCHAR_ARG +DBMS_DEFER_QUERY_DEFINER.GET_NCLOB_ARG +DBMS_DEFER_QUERY_DEFINER.GET_NUMBER_ARG +DBMS_DEFER_QUERY_DEFINER.GET_NVARCHAR2_ARG +DBMS_DEFER_QUERY_DEFINER.GET_OBJECT_NULL_VECTOR_ARG +DBMS_DEFER_QUERY_DEFINER.GET_RAW_ARG +DBMS_DEFER_QUERY_DEFINER.GET_ROWID_ARG +DBMS_DEFER_QUERY_DEFINER.GET_TIMESTAMP_ARG +DBMS_DEFER_QUERY_DEFINER.GET_TIME_ARG +DBMS_DEFER_QUERY_DEFINER.GET_TSLTZ_ARG +DBMS_DEFER_QUERY_DEFINER.GET_TSTZ_ARG +DBMS_DEFER_QUERY_DEFINER.GET_TTZ_ARG +DBMS_DEFER_QUERY_DEFINER.GET_VARCHAR2_ARG +DBMS_DEFER_QUERY_UTL. +DBMS_DEFER_QUERY_UTL.CACHE_ARGUMENTS +DBMS_DEFER_QUERY_UTL.COPY_TO_TEMPORARY_LOB +DBMS_DEFER_QUERY_UTL.CREATE_TEMPORARY_LOB +DBMS_DEFER_QUERY_UTL.DESTROY_TEMPORARY_LOB +DBMS_DEFER_QUERY_UTL.EXTRACT_VARCHAR2 +DBMS_DEFER_QUERY_UTL.GET_ANYDATA_ARG +DBMS_DEFER_QUERY_UTL.GET_ARG_CSETID +DBMS_DEFER_QUERY_UTL.GET_ARG_FORM +DBMS_DEFER_QUERY_UTL.GET_ARG_TYPE +DBMS_DEFER_QUERY_UTL.GET_BLOB_ARG +DBMS_DEFER_QUERY_UTL.GET_CACHE_STATUS +DBMS_DEFER_QUERY_UTL.GET_CHAR_ARG +DBMS_DEFER_QUERY_UTL.GET_CLOB_ARG +DBMS_DEFER_QUERY_UTL.GET_DATE_ARG +DBMS_DEFER_QUERY_UTL.GET_IDS_ARG +DBMS_DEFER_QUERY_UTL.GET_INTERNAL_DISABLED +DBMS_DEFER_QUERY_UTL.GET_IYM_ARG +DBMS_DEFER_QUERY_UTL.GET_NCHAR_ARG +DBMS_DEFER_QUERY_UTL.GET_NCLOB_ARG +DBMS_DEFER_QUERY_UTL.GET_NUMBER_ARG +DBMS_DEFER_QUERY_UTL.GET_NVARCHAR2_ARG +DBMS_DEFER_QUERY_UTL.GET_OBJECT_NULL_VECTOR_ARG +DBMS_DEFER_QUERY_UTL.GET_PROP_WAS_ENABLED +DBMS_DEFER_QUERY_UTL.GET_RAW_ARG +DBMS_DEFER_QUERY_UTL.GET_ROWID_ARG +DBMS_DEFER_QUERY_UTL.GET_TIMESTAMP_ARG +DBMS_DEFER_QUERY_UTL.GET_TIME_ARG +DBMS_DEFER_QUERY_UTL.GET_TSLTZ_ARG +DBMS_DEFER_QUERY_UTL.GET_TSTZ_ARG +DBMS_DEFER_QUERY_UTL.GET_TTZ_ARG +DBMS_DEFER_QUERY_UTL.GET_VARCHAR2_ARG +DBMS_DEFER_QUERY_UTL.KEY_TO_PACKAGE_NAME +DBMS_DEFER_QUERY_UTL.KEY_TO_SCHEMA_NAME +DBMS_DEFER_QUERY_UTL.PACKAGE_NAME +DBMS_DEFER_QUERY_UTL.PROCEDURE_NAME +DBMS_DEFER_QUERY_UTL.SCHEMA_NAME +DBMS_DEFER_QUERY_UTL.SET_DISABLED +DBMS_DEFER_QUERY_UTL.SET_INTERNAL_DISABLED +DBMS_DEFER_QUERY_UTL.SET_PROP_WAS_ENABLED +DBMS_DEFER_QUERY_UTL.WAS_INTERNALLY_DISABLED +DBMS_DEFER_REPCAT. +DBMS_DEFER_REPCAT.CAUGHT_UP +DBMS_DEFER_REPCAT.DISABLE_ALL_MASTER_PROPAGATION +DBMS_DEFER_REPCAT.DISABLE_PURGE +DBMS_DEFER_REPCAT.DROP_WRAPPERS +DBMS_DEFER_REPCAT.ENABLE_PROPAGATION_TO_DBLINK +DBMS_DEFER_REPCAT.GENERATE_EXPORT_SCN +DBMS_DEFER_REPCAT.GET_LOCK +DBMS_DEFER_REPCAT.GET_LOCK_WHEN_CLEAN +DBMS_DEFER_REPCAT.MERGE_DESTINATION +DBMS_DEFER_REPCAT.PURGE_EXTENSION_REQUEST +DBMS_DEFER_REPCAT.QUIESCE +DBMS_DEFER_REPCAT.RELEASE_LOCK +DBMS_DEFER_REPCAT.RESTORE_PURGE +DBMS_DEFER_REPCAT.RESUME +DBMS_DEFER_SYS. +DBMS_DEFER_SYS.ADD_DEFAULT_DEST +DBMS_DEFER_SYS.CLEAR_PROP_STATISTICS +DBMS_DEFER_SYS.DELETE_DEFAULT_DEST +DBMS_DEFER_SYS.DELETE_DEF_DESTINATION +DBMS_DEFER_SYS.DELETE_ERROR +DBMS_DEFER_SYS.DELETE_TRAN +DBMS_DEFER_SYS.DISABLED +DBMS_DEFER_SYS.EXCLUDE_PUSH +DBMS_DEFER_SYS.EXECUTE +DBMS_DEFER_SYS.EXECUTE_ERROR +DBMS_DEFER_SYS.EXECUTE_ERROR_AS_USER +DBMS_DEFER_SYS.EXECUTE_ERROR_CALL +DBMS_DEFER_SYS.EXECUTE_ERROR_CALL_AS_USER +DBMS_DEFER_SYS.NULLIFY_ALL_TRANS +DBMS_DEFER_SYS.NULLIFY_TRANS_TO_DESTINATION +DBMS_DEFER_SYS.PURGE +DBMS_DEFER_SYS.PUSH +DBMS_DEFER_SYS.PUSH_WITH_CATCHUP +DBMS_DEFER_SYS.REGISTER_PROPAGATOR +DBMS_DEFER_SYS.SCHEDULE_EXECUTION +DBMS_DEFER_SYS.SCHEDULE_PURGE +DBMS_DEFER_SYS.SCHEDULE_PUSH +DBMS_DEFER_SYS.SET_DISABLED +DBMS_DEFER_SYS.UNREGISTER_PROPAGATOR +DBMS_DEFER_SYS.UNSCHEDULE_EXECUTION +DBMS_DEFER_SYS.UNSCHEDULE_PURGE +DBMS_DEFER_SYS.UNSCHEDULE_PUSH +DBMS_DEFER_SYS_DEFINER. +DBMS_DEFER_SYS_DEFINER.ADD_DEFAULT_DEST +DBMS_DEFER_SYS_DEFINER.CLEAR_PROP_STATISTICS +DBMS_DEFER_SYS_DEFINER.DELETE_DEFAULT_DEST +DBMS_DEFER_SYS_DEFINER.DELETE_DEF_DESTINATION +DBMS_DEFER_SYS_DEFINER.DELETE_ERROR +DBMS_DEFER_SYS_DEFINER.DELETE_TRAN +DBMS_DEFER_SYS_DEFINER.DISABLED +DBMS_DEFER_SYS_DEFINER.EXCLUDE_PUSH +DBMS_DEFER_SYS_DEFINER.EXECUTE +DBMS_DEFER_SYS_DEFINER.EXECUTE_ERROR +DBMS_DEFER_SYS_DEFINER.EXECUTE_ERROR_AS_USER +DBMS_DEFER_SYS_DEFINER.EXECUTE_ERROR_CALL +DBMS_DEFER_SYS_DEFINER.EXECUTE_ERROR_CALL_AS_USER +DBMS_DEFER_SYS_DEFINER.NULLIFY_ALL_TRANS +DBMS_DEFER_SYS_DEFINER.NULLIFY_TRANS_TO_DESTINATION +DBMS_DEFER_SYS_DEFINER.PURGE +DBMS_DEFER_SYS_DEFINER.PUSH +DBMS_DEFER_SYS_DEFINER.PUSH_WITH_CATCHUP +DBMS_DEFER_SYS_DEFINER.REGISTER_PROPAGATOR +DBMS_DEFER_SYS_DEFINER.SCHEDULE_EXECUTION +DBMS_DEFER_SYS_DEFINER.SCHEDULE_PURGE +DBMS_DEFER_SYS_DEFINER.SCHEDULE_PUSH +DBMS_DEFER_SYS_DEFINER.SET_DISABLED +DBMS_DEFER_SYS_DEFINER.UNREGISTER_PROPAGATOR +DBMS_DEFER_SYS_DEFINER.UNSCHEDULE_EXECUTION +DBMS_DEFER_SYS_DEFINER.UNSCHEDULE_PURGE +DBMS_DEFER_SYS_DEFINER.UNSCHEDULE_PUSH +DBMS_DEFER_SYS_PART1. +DBMS_DEFER_SYS_PART1.ADD_DESTINATION +DBMS_DEFER_SYS_PART1.CONVERT_TO_D +DBMS_DEFER_SYS_PART1.DELETE_CALL_REC +DBMS_DEFER_SYS_PART1.DISABLED +DBMS_DEFER_SYS_PART1.EXECUTE_ERROR_CALL_INTERNAL +DBMS_DEFER_SYS_PART1.EXECUTE_ERROR_TXN +DBMS_DEFER_SYS_PART1.SET_DISABLED +DBMS_DEFER_SYS_PART1.UPDATE_SCHEDULE +DBMS_DESCRIBE. +DBMS_DESCRIBE.DESCRIBE_PROCEDURE +DBMS_DG. +DBMS_DG.INITIATE_FS_FAILOVER +DBMS_DIMENSION. +DBMS_DIMENSION.DESCRIBE_DIMENSION +DBMS_DIMENSION.VALIDATE_DIMENSION +DBMS_DISTRIBUTED_TRUST_ADMIN. +DBMS_DISTRIBUTED_TRUST_ADMIN.ALLOW_ALL +DBMS_DISTRIBUTED_TRUST_ADMIN.ALLOW_SERVER +DBMS_DISTRIBUTED_TRUST_ADMIN.DENY_ALL +DBMS_DISTRIBUTED_TRUST_ADMIN.DENY_SERVER +DBMS_DM_EXP_INTERNAL. +DBMS_DM_EXP_INTERNAL.EXP_MODEL +DBMS_DM_EXP_INTERNAL.GET_CUR_JOB_ID +DBMS_DM_EXP_INTERNAL.GET_DM_JOB_INFO +DBMS_DM_EXP_INTERNAL.IMP_MODEL +DBMS_DM_EXP_INTERNAL.INIT_DM_JOB_ID +DBMS_DM_EXP_INTERNAL.SET_CUR_JOB_ID +DBMS_DM_MODEL_EXP. +DBMS_DM_MODEL_EXP.AUDIT_EXP +DBMS_DM_MODEL_EXP.AUDIT_SYSPRIVS_EXP +DBMS_DM_MODEL_EXP.CREATE_EXP +DBMS_DM_MODEL_EXP.GRANT_EXP +DBMS_DM_MODEL_EXP.GRANT_SYSPRIVS_EXP +DBMS_DM_MODEL_IMP. +DBMS_DM_MODEL_IMP.ADD_TABLE +DBMS_DM_MODEL_IMP.CREATE_MODEL +DBMS_DM_MODEL_IMP.PERSIST_MODEL +DBMS_DM_UTIL. +DBMS_DM_UTIL.ASSERT +DBMS_DM_UTIL.BIC +DBMS_DM_UTIL.BIF +DBMS_DM_UTIL.BIS +DBMS_DM_UTIL.BIT +DBMS_DM_UTIL.NUMVAL +DBMS_DM_UTIL.USER_TABLE_EXISTS +DBMS_DNFS. +DBMS_DNFS.CLONEDB_RENAMEFILE +DBMS_DRS. +DBMS_DRS.CANCEL_REQUEST +DBMS_DRS.DELETE_REQUEST +DBMS_DRS.DG_BROKER_INFO +DBMS_DRS.DO_CONTROL +DBMS_DRS.DO_CONTROL_RAW +DBMS_DRS.DUMP_META +DBMS_DRS.FS_FAILOVER_FOR_HC_COND +DBMS_DRS.GET_PROPERTY +DBMS_DRS.GET_PROPERTY_OBJ +DBMS_DRS.GET_RESPONSE +DBMS_DRS.GET_RESPONSE_RAW +DBMS_DRS.INITIATE_FS_FAILOVER +DBMS_DRS.PING +DBMS_DRS.READYTOFAILOVER +DBMS_DRS.SLEEP +DBMS_DRS.STATECHANGERECORDED +DBMS_DST. +DBMS_DST.BEGIN_PREPARE +DBMS_DST.BEGIN_UPGRADE +DBMS_DST.CREATE_AFFECTED_TABLE +DBMS_DST.CREATE_ERROR_TABLE +DBMS_DST.CREATE_TRIGGER_TABLE +DBMS_DST.END_PREPARE +DBMS_DST.END_UPGRADE +DBMS_DST.FIND_AFFECTED_TABLES +DBMS_DST.LOAD_SECONDARY +DBMS_DST.UNLOAD_SECONDARY +DBMS_DST.UPGRADE_DATABASE +DBMS_DST.UPGRADE_SCHEMA +DBMS_DST.UPGRADE_TABLE +DBMS_EDITIONS_UTILITIES. +DBMS_EDITIONS_UTILITIES.COMPARE_EDITION +DBMS_EDITIONS_UTILITIES.SET_EDITIONING_VIEWS_READ_ONLY +DBMS_EDITIONS_UTILITIES.SET_NULL_COLUMN_VALUES_TO_EXPR +DBMS_EPG. +DBMS_EPG.AUTHORIZE_DAD +DBMS_EPG.CREATE_DAD +DBMS_EPG.DEAUTHORIZE_DAD +DBMS_EPG.DELETE_DAD_ATTRIBUTE +DBMS_EPG.DELETE_GLOBAL_ATTRIBUTE +DBMS_EPG.DROP_DAD +DBMS_EPG.GET_ALL_DAD_ATTRIBUTES +DBMS_EPG.GET_ALL_DAD_MAPPINGS +DBMS_EPG.GET_ALL_GLOBAL_ATTRIBUTES +DBMS_EPG.GET_DAD_ATTRIBUTE +DBMS_EPG.GET_DAD_LIST +DBMS_EPG.GET_GLOBAL_ATTRIBUTE +DBMS_EPG.MAP_DAD +DBMS_EPG.SET_DAD_ATTRIBUTE +DBMS_EPG.SET_GLOBAL_ATTRIBUTE +DBMS_EPG.UNMAP_DAD +DBMS_ERRLOG. +DBMS_ERRLOG.CREATE_ERROR_LOG +DBMS_EXPORT_EXTENSION. +DBMS_EXPORT_EXTENSION.BEGIN_IMPORT_DOMAIN_INDEX +DBMS_EXPORT_EXTENSION.CHECK_MATCH_TEMPLATE +DBMS_EXPORT_EXTENSION.FUNC_INDEX_DEFAULT +DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_METADATA +DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES +DBMS_EXPORT_EXTENSION.GET_OBJECT_COMMENT +DBMS_EXPORT_EXTENSION.GET_OBJECT_SOURCE +DBMS_EXPORT_EXTENSION.GET_V2_DOMAIN_INDEX_TABLES +DBMS_EXPORT_EXTENSION.INSERT_SECOBJ +DBMS_EXPORT_EXTENSION.NULLTOCHR0 +DBMS_EXPORT_EXTENSION.POST_TABLES +DBMS_EXPORT_EXTENSION.PRE_TABLE +DBMS_EXPORT_EXTENSION.RESET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION.RESET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION.RESET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION.SET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION.SET_EXP_SORTSIZE +DBMS_EXPORT_EXTENSION.SET_EXP_TIMEZONE +DBMS_EXPORT_EXTENSION.SET_HAKAN_EVENT +DBMS_EXPORT_EXTENSION.SET_IMP_EVENTS +DBMS_EXPORT_EXTENSION.SET_IMP_SKIP_INDEXES_OFF +DBMS_EXPORT_EXTENSION.SET_IMP_SKIP_INDEXES_ON +DBMS_EXPORT_EXTENSION.SET_IMP_TIMEZONE +DBMS_EXPORT_EXTENSION.SET_IOT_EVENT +DBMS_EXPORT_EXTENSION.SET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION.SET_NO_OUTLINES +DBMS_EXPORT_EXTENSION.SET_RESUM +DBMS_EXPORT_EXTENSION.SET_RESUMNAM +DBMS_EXPORT_EXTENSION.SET_RESUMNAMTIM +DBMS_EXPORT_EXTENSION.SET_RESUMTIM +DBMS_EXPORT_EXTENSION.SET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION.SET_STATSON +DBMS_EXPORT_EXTENSION_I. +DBMS_EXPORT_EXTENSION_I.CHECK_MATCH_TEMPLATE +DBMS_EXPORT_EXTENSION_I.FUNC_INDEX_DEFAULT +DBMS_EXPORT_EXTENSION_I.GET_LOBCOLCNT +DBMS_EXPORT_EXTENSION_I.GET_OBJECT_COMMENT +DBMS_EXPORT_EXTENSION_I.GET_TABACT +DBMS_EXPORT_EXTENSION_I.INSERT_SECOBJ +DBMS_EXPORT_EXTENSION_I.NULLTOCHR0 +DBMS_EXPORT_EXTENSION_I.RESET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION_I.RESET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION_I.RESET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION_I.SET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION_I.SET_EXP_SORTSIZE +DBMS_EXPORT_EXTENSION_I.SET_EXP_TIMEZONE +DBMS_EXPORT_EXTENSION_I.SET_HAKAN_EVENT +DBMS_EXPORT_EXTENSION_I.SET_IMP_EVENTS +DBMS_EXPORT_EXTENSION_I.SET_IMP_SKIP_INDEXES_OFF +DBMS_EXPORT_EXTENSION_I.SET_IMP_SKIP_INDEXES_ON +DBMS_EXPORT_EXTENSION_I.SET_IMP_TIMEZONE +DBMS_EXPORT_EXTENSION_I.SET_IOT_EVENT +DBMS_EXPORT_EXTENSION_I.SET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION_I.SET_NO_OUTLINES +DBMS_EXPORT_EXTENSION_I.SET_RESUM +DBMS_EXPORT_EXTENSION_I.SET_RESUMNAM +DBMS_EXPORT_EXTENSION_I.SET_RESUMNAMTIM +DBMS_EXPORT_EXTENSION_I.SET_RESUMTIM +DBMS_EXPORT_EXTENSION_I.SET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION_I.SET_STATSON +DBMS_EXPORT_EXTENSION_I.TRUNCATE_SECOBJ +DBMS_EXTENDED_TTS_CHECKS. +DBMS_EXTENDED_TTS_CHECKS.CHECK_CSX_CLOSURE +DBMS_EXTENDED_TTS_CHECKS.GET_CHILD_NESTED_TABLES +DBMS_EXTENDED_TTS_CHECKS.GET_DOMAIN_INDEX_SECOBJ +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_IND +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_INDPART +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_INDSUBPART +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_TAB +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_TABPART +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_TABSUBPART +DBMS_EXTENDED_TTS_CHECKS.OBJECTLIST_CONTAINED +DBMS_EXTENDED_TTS_CHECKS.VERIFY_EXTENSIBLE +DBMS_EXTENDED_TTS_CHECKS.VERIFY_MV +DBMS_EXTENDED_TTS_CHECKS.VERIFY_NT +DBMS_EXTENDED_TTS_CHECKS.VERIFY_XMLSCHEMA +DBMS_FBT. +DBMS_FBT.FBT_ANALYZE +DBMS_FBT.FBT_DISCARD +DBMS_FBT.FBT_EXECUTE +DBMS_FEATURE_ACTIVE_DATA_GUARD. +DBMS_FEATURE_ADAPTIVE_PLANS. +DBMS_FEATURE_ADV_IDXCMP. +DBMS_FEATURE_ADV_TABCMP. +DBMS_FEATURE_APEX. +DBMS_FEATURE_ASM. +DBMS_FEATURE_AUDIT_OPTIONS. +DBMS_FEATURE_AUM. +DBMS_FEATURE_AUTOSTA. +DBMS_FEATURE_AUTO_MEM. +DBMS_FEATURE_AUTO_REOPT. +DBMS_FEATURE_AUTO_SGA. +DBMS_FEATURE_AUTO_SSM. +DBMS_FEATURE_AWR. +DBMS_FEATURE_BACKUP_ENCRYPTION. +DBMS_FEATURE_BA_OWNER. +DBMS_FEATURE_CDC. +DBMS_FEATURE_CONCURRENT_STATS. +DBMS_FEATURE_DATABASE_ODM. +DBMS_FEATURE_DATABASE_VAULT. +DBMS_FEATURE_DATA_GUARD. +DBMS_FEATURE_DATA_REDACTION. +DBMS_FEATURE_DBFS_CONTENT. +DBMS_FEATURE_DBFS_HS. +DBMS_FEATURE_DBFS_SFS. +DBMS_FEATURE_DEFERRED_SEG_CRT. +DBMS_FEATURE_DMU. +DBMS_FEATURE_DYN_SGA. +DBMS_FEATURE_EMX. +DBMS_FEATURE_EXADATA. +DBMS_FEATURE_EXTENSIBILITY. +DBMS_FEATURE_FGA_AUDIT. +DBMS_FEATURE_GATEWAYS. +DBMS_FEATURE_GOLDENGATE. +DBMS_FEATURE_HCC. +DBMS_FEATURE_HCCRLL. +DBMS_FEATURE_HEATMAP. +DBMS_FEATURE_IDH. +DBMS_FEATURE_ILM. +DBMS_FEATURE_IMA. +DBMS_FEATURE_IMC. +DBMS_FEATURE_IOT. +DBMS_FEATURE_JOB_SCHEDULER. +DBMS_FEATURE_JSON. +DBMS_FEATURE_LABEL_SECURITY. +DBMS_FEATURE_LMT. +DBMS_FEATURE_MOVE_DATAFILE. +DBMS_FEATURE_OBJECT. +DBMS_FEATURE_ONLINE_REDEF. +DBMS_FEATURE_PARTITION_SYSTEM. +DBMS_FEATURE_PARTITION_USER. +DBMS_FEATURE_PILLAR_EHCC. +DBMS_FEATURE_PILLAR_STORAGE. +DBMS_FEATURE_PLSQL_NATIVE. +DBMS_FEATURE_PRIV_CAPTURE. +DBMS_FEATURE_QOSM. +DBMS_FEATURE_RAC. +DBMS_FEATURE_RAS. +DBMS_FEATURE_REGISTER_ALLFEAT. +DBMS_FEATURE_REGISTER_ALLHWM. +DBMS_FEATURE_RESOURCE_MANAGER. +DBMS_FEATURE_RMAN_BACKUP. +DBMS_FEATURE_RMAN_BASIC. +DBMS_FEATURE_RMAN_BZIP2. +DBMS_FEATURE_RMAN_DISK_BACKUP. +DBMS_FEATURE_RMAN_HIGH. +DBMS_FEATURE_RMAN_LOW. +DBMS_FEATURE_RMAN_MEDIUM. +DBMS_FEATURE_RMAN_TAPE_BACKUP. +DBMS_FEATURE_RMAN_ZLIB. +DBMS_FEATURE_ROND. +DBMS_FEATURE_RULESMANAGER. +DBMS_FEATURE_SECUREFILES_SYS. +DBMS_FEATURE_SECUREFILES_USR. +DBMS_FEATURE_SEGADV_USER. +DBMS_FEATURE_SEG_MAIN_ONL_COMP. +DBMS_FEATURE_SERVICES. +DBMS_FEATURE_SFCOMPRESS_SYS. +DBMS_FEATURE_SFCOMPRESS_USR. +DBMS_FEATURE_SFDEDUP_SYS. +DBMS_FEATURE_SFDEDUP_USR. +DBMS_FEATURE_SFENCRYPT_SYS. +DBMS_FEATURE_SFENCRYPT_USR. +DBMS_FEATURE_SPD. +DBMS_FEATURE_STATS_INCREMENTAL. +DBMS_FEATURE_STREAMS. +DBMS_FEATURE_TEST_PROC_1. +DBMS_FEATURE_TEST_PROC_2. +DBMS_FEATURE_TEST_PROC_3. +DBMS_FEATURE_TEST_PROC_4. +DBMS_FEATURE_TEST_PROC_5. +DBMS_FEATURE_TSDP. +DBMS_FEATURE_UNIFIED_AUDIT. +DBMS_FEATURE_USAGE. +DBMS_FEATURE_USAGE.REGISTER_DB_FEATURE +DBMS_FEATURE_USAGE.REGISTER_HIGH_WATER_MARK +DBMS_FEATURE_USAGE_INTERNAL. +DBMS_FEATURE_USAGE_INTERNAL.CLEANUP_DATABASE +DBMS_FEATURE_USAGE_INTERNAL.EXEC_DB_USAGE_SAMPLING +DBMS_FEATURE_USAGE_INTERNAL.SAMPLE_ONE_FEATURE +DBMS_FEATURE_USAGE_INTERNAL.SAMPLE_ONE_HWM +DBMS_FEATURE_USAGE_REPORT. +DBMS_FEATURE_USAGE_REPORT.DISPLAY_HTML +DBMS_FEATURE_USAGE_REPORT.DISPLAY_TEXT +DBMS_FEATURE_USER_MVS. +DBMS_FEATURE_UTILITIES1. +DBMS_FEATURE_UTILITIES2. +DBMS_FEATURE_UTILITIES3. +DBMS_FEATURE_UTILITIES4. +DBMS_FEATURE_WCR_CAPTURE. +DBMS_FEATURE_WCR_REPLAY. +DBMS_FEATURE_XDB. +DBMS_FEATURE_XSTREAM_IN. +DBMS_FEATURE_XSTREAM_OUT. +DBMS_FEATURE_XSTREAM_STREAMS. +DBMS_FEATURE_ZFS_EHCC. +DBMS_FEATURE_ZFS_STORAGE. +DBMS_FEATURE_ZMAP. +DBMS_FGA. +DBMS_FGA.ADD_POLICY +DBMS_FGA.DISABLE_POLICY +DBMS_FGA.DROP_POLICY +DBMS_FGA.ENABLE_POLICY +DBMS_FILE_GROUP. +DBMS_FILE_GROUP.ADD_FILE +DBMS_FILE_GROUP.ALTER_FILE +DBMS_FILE_GROUP.ALTER_FILE_GROUP +DBMS_FILE_GROUP.ALTER_VERSION +DBMS_FILE_GROUP.CREATE_FILE_GROUP +DBMS_FILE_GROUP.CREATE_VERSION +DBMS_FILE_GROUP.DROP_FILE_GROUP +DBMS_FILE_GROUP.DROP_VERSION +DBMS_FILE_GROUP.GRANT_OBJECT_PRIVILEGE +DBMS_FILE_GROUP.GRANT_SYSTEM_PRIVILEGE +DBMS_FILE_GROUP.PURGE_FILE_GROUP +DBMS_FILE_GROUP.REMOVE_FILE +DBMS_FILE_GROUP.REVOKE_OBJECT_PRIVILEGE +DBMS_FILE_GROUP.REVOKE_SYSTEM_PRIVILEGE +DBMS_FILE_GROUP_DECL. +DBMS_FILE_GROUP_EXP. +DBMS_FILE_GROUP_EXP.AUDIT_EXP +DBMS_FILE_GROUP_EXP.AUDIT_SYSPRIVS_EXP +DBMS_FILE_GROUP_EXP.CREATE_EXP +DBMS_FILE_GROUP_EXP.DROP_EXP +DBMS_FILE_GROUP_EXP.GRANT_EXP +DBMS_FILE_GROUP_EXP.GRANT_SYSPRIVS_EXP +DBMS_FILE_GROUP_EXP.SCHEMA_INFO_EXP +DBMS_FILE_GROUP_EXP_INTERNAL. +DBMS_FILE_GROUP_EXP_INTERNAL.OBJECT_OWNER +DBMS_FILE_GROUP_IMP. +DBMS_FILE_GROUP_IMP.ADD_FILE +DBMS_FILE_GROUP_IMP.CREATE_FILE_GROUP +DBMS_FILE_GROUP_IMP.CREATE_VERSION +DBMS_FILE_GROUP_IMP.GRANT_OBJECT_PRIVILEGE +DBMS_FILE_GROUP_IMP.SET_TABLESPACE_INFO +DBMS_FILE_GROUP_IMP.SET_TABLE_INFO +DBMS_FILE_GROUP_IMP.SET_VERSION_EXPORT_INFO +DBMS_FILE_GROUP_IMP_INTERNAL. +DBMS_FILE_GROUP_IMP_INTERNAL.SET_TABLESPACE_INFO +DBMS_FILE_GROUP_IMP_INTERNAL.SET_TABLE_INFO +DBMS_FILE_GROUP_IMP_INTERNAL.SET_VERSION_EXPORT_INFO +DBMS_FILE_GROUP_INTERNAL_INVOK. +DBMS_FILE_GROUP_INTERNAL_INVOK.ADD_FILE +DBMS_FILE_GROUP_INTERNAL_INVOK.ALTER_FILE_GROUP_3GL +DBMS_FILE_GROUP_INTERNAL_INVOK.CREATE_FILE_GROUP +DBMS_FILE_GROUP_INTERNAL_INVOK.CREATE_FILE_GROUP_3GL +DBMS_FILE_GROUP_INTERNAL_INVOK.CREATE_VERSION +DBMS_FILE_GROUP_INTERNAL_INVOK.DROP_FILE_GROUP_3GL +DBMS_FILE_GROUP_UTL. +DBMS_FILE_GROUP_UTL.AS_POS_INTEGER +DBMS_FILE_GROUP_UTL.AUTO_PURGE_FILE_GROUPS +DBMS_FILE_GROUP_UTL.BOOLEAN_STR +DBMS_FILE_GROUP_UTL.CANONICALIZE +DBMS_FILE_GROUP_UTL.CHECK_FILE_GROUP_FOR_DP_INFO +DBMS_FILE_GROUP_UTL.CHECK_VERSION_FOR_DP_INFO +DBMS_FILE_GROUP_UTL.CREATE_VERSEQ +DBMS_FILE_GROUP_UTL.DELETE_FILE_METADATA +DBMS_FILE_GROUP_UTL.DELETE_VERSION_METADATA +DBMS_FILE_GROUP_UTL.DISABLE_PURGE_JOB +DBMS_FILE_GROUP_UTL.DROP_VERSEQ +DBMS_FILE_GROUP_UTL.ENABLE_PURGE_JOB +DBMS_FILE_GROUP_UTL.GENERATE_NAME +DBMS_FILE_GROUP_UTL.GET_FGV_LOCK +DBMS_FILE_GROUP_UTL.GET_FG_LOCK +DBMS_FILE_GROUP_UTL.GET_FILES_PURGE_CURSOR +DBMS_FILE_GROUP_UTL.GET_FILE_GROUP_METADATA +DBMS_FILE_GROUP_UTL.GET_FILE_METADATA +DBMS_FILE_GROUP_UTL.GET_NEXTSEQVAL +DBMS_FILE_GROUP_UTL.GET_VERSIONS_PURGE_CURSOR +DBMS_FILE_GROUP_UTL.GET_VERSION_METADATA +DBMS_FILE_GROUP_UTL.GET_VERSION_METADATA_CURSOR +DBMS_FILE_GROUP_UTL.INSERT_FILE_METADATA +DBMS_FILE_GROUP_UTL.INSERT_VERSION_METADATA +DBMS_FILE_GROUP_UTL.IS_INTEGER +DBMS_FILE_GROUP_UTL.POPULATE_DATAPUMP_INFO +DBMS_FILE_GROUP_UTL.PURGE_DATAPUMP_INFO +DBMS_FILE_GROUP_UTL.RAISE_DP_ERRORS +DBMS_FILE_GROUP_UTL.RELOAD_VERSION_METADATA +DBMS_FILE_GROUP_UTL.TRACE_ON +DBMS_FILE_GROUP_UTL.UPDATE_FILE_METADATA +DBMS_FILE_GROUP_UTL.UPDATE_VERSION_METADATA +DBMS_FILE_GROUP_UTL.WRITE_TRACE +DBMS_FILE_GROUP_UTL_INVOK. +DBMS_FILE_GROUP_UTL_INVOK.AUTO_PURGE_FILE_GROUP +DBMS_FILE_GROUP_UTL_INVOK.CHECK_PRIVILEGE_ON_FILE_GROUP +DBMS_FILE_GROUP_UTL_INVOK.CHECK_SYSTEM_PRIVILEGE +DBMS_FILE_GROUP_UTL_INVOK.LOAD_DATAPUMP +DBMS_FILE_GROUP_UTL_INVOK.PURGE_FILE_GROUP +DBMS_FILE_GROUP_UTL_INVOK.PURGE_FILE_METADATA +DBMS_FILE_GROUP_UTL_INVOK.PURGE_FILE_ONDISK +DBMS_FILE_GROUP_UTL_INVOK.PURGE_VERSION +DBMS_FILE_GROUP_UTL_INVOK.UNLOAD_DATAPUMP +DBMS_FILE_TRANSFER. +DBMS_FILE_TRANSFER.COPY_FILE +DBMS_FILE_TRANSFER.GET_FILE +DBMS_FILE_TRANSFER.PUT_FILE +DBMS_FLASHBACK. +DBMS_FLASHBACK.DISABLE +DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER +DBMS_FLASHBACK.ENABLE_AT_TIME +DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER +DBMS_FLASHBACK.TRANSACTION_BACKOUT +DBMS_FLASHBACK_ARCHIVE. +DBMS_FLASHBACK_ARCHIVE.ADD_TABLE_TO_APPLICATION +DBMS_FLASHBACK_ARCHIVE.CREATE_TEMP_HISTORY_TABLE +DBMS_FLASHBACK_ARCHIVE.DISABLE_APPLICATION +DBMS_FLASHBACK_ARCHIVE.DISABLE_ASOF_VALID_TIME +DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA +DBMS_FLASHBACK_ARCHIVE.DROP_APPLICATION +DBMS_FLASHBACK_ARCHIVE.ENABLE_APPLICATION +DBMS_FLASHBACK_ARCHIVE.ENABLE_AT_VALID_TIME +DBMS_FLASHBACK_ARCHIVE.EXTEND_MAPPINGS +DBMS_FLASHBACK_ARCHIVE.GET_SYS_CONTEXT +DBMS_FLASHBACK_ARCHIVE.IMPORT_HISTORY +DBMS_FLASHBACK_ARCHIVE.LOCK_DOWN_APPLICATION +DBMS_FLASHBACK_ARCHIVE.PURGE_CONTEXT +DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA +DBMS_FLASHBACK_ARCHIVE.REGISTER_APPLICATION +DBMS_FLASHBACK_ARCHIVE.REMOVE_TABLE_FROM_APPLICATION +DBMS_FLASHBACK_ARCHIVE.SET_CONTEXT_LEVEL +DBMS_FLASHBACK_ARCHIVE.UNLOCK_APPLICATION +DBMS_FREQUENT_ITEMSET. +DBMS_FREQUENT_ITEMSET.FI_HORIZONTAL +DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL +DBMS_FS. +DBMS_FS.MAKE_ORACLE_FS +DBMS_FS.MOUNT_ORACLE_FS +DBMS_FS.UNMOUNT_ORACLE_FS +DBMS_FUSE. +DBMS_FUSE.FS_ACCESS +DBMS_FUSE.FS_CHMOD +DBMS_FUSE.FS_CHOWN +DBMS_FUSE.FS_CREAT +DBMS_FUSE.FS_DESTROY +DBMS_FUSE.FS_FGETATTR +DBMS_FUSE.FS_FLUSH +DBMS_FUSE.FS_FSYNC +DBMS_FUSE.FS_FSYNCDIR +DBMS_FUSE.FS_FTRUNCATE +DBMS_FUSE.FS_GETATTR +DBMS_FUSE.FS_GETATTR_VIEW +DBMS_FUSE.FS_GETXATTR +DBMS_FUSE.FS_INIT +DBMS_FUSE.FS_LINK +DBMS_FUSE.FS_LISTXATTR +DBMS_FUSE.FS_MKDIR +DBMS_FUSE.FS_MKNOD +DBMS_FUSE.FS_MOVE +DBMS_FUSE.FS_OPEN +DBMS_FUSE.FS_OPENDIR +DBMS_FUSE.FS_READ +DBMS_FUSE.FS_READDIR +DBMS_FUSE.FS_READLINK +DBMS_FUSE.FS_RELEASE +DBMS_FUSE.FS_RELEASEDIR +DBMS_FUSE.FS_REMOVEXATTR +DBMS_FUSE.FS_RENAME +DBMS_FUSE.FS_RMDIR +DBMS_FUSE.FS_SETXATTR +DBMS_FUSE.FS_STATFS +DBMS_FUSE.FS_SYMLINK +DBMS_FUSE.FS_TRUNCATE +DBMS_FUSE.FS_UNLINK +DBMS_FUSE.FS_UTIME +DBMS_FUSE.FS_WRITE +DBMS_GOLDENGATE_AUTH. +DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE +DBMS_GOLDENGATE_AUTH.REVOKE_ADMIN_PRIVILEGE +DBMS_GSM_ALERTS. +DBMS_GSM_ALERTS.GET_CURRENT_CARDINALITY +DBMS_GSM_ALERTS.GET_DATABASE_NAME +DBMS_GSM_ALERTS.GET_EXPECTED_CARDINALITY +DBMS_GSM_ALERTS.GET_GDSPOOL_NAME +DBMS_GSM_ALERTS.GET_GSM_NAME +DBMS_GSM_ALERTS.GET_INSTANCE_NAME +DBMS_GSM_ALERTS.GET_REGION_NAME +DBMS_GSM_ALERTS.GET_RESOURCE_NAME +DBMS_GSM_ALERTS.GET_SERVICE_NAME +DBMS_GSM_ALERTS.GET_THRESH_LEVEL +DBMS_GSM_ALERTS.POST_ALERT +DBMS_GSM_ALERTS.POST_CARD_OFF +DBMS_GSM_ALERTS.POST_CATALOG_DOWN +DBMS_GSM_ALERTS.POST_DATABASE_DOWN +DBMS_GSM_ALERTS.POST_DATABASE_LAGGING +DBMS_GSM_ALERTS.POST_GSM_DOWN +DBMS_GSM_ALERTS.POST_INSTANCE_DOWN +DBMS_GSM_ALERTS.POST_THRESHOLD_HIT +DBMS_GSM_CLOUDADMIN. +DBMS_GSM_CLOUDADMIN.ADDDATABASEPOOL +DBMS_GSM_CLOUDADMIN.ADDDATABASEPOOLADMIN +DBMS_GSM_CLOUDADMIN.ADDGSM +DBMS_GSM_CLOUDADMIN.ADDREGION +DBMS_GSM_CLOUDADMIN.ADDVNCR +DBMS_GSM_CLOUDADMIN.CANCELALLCHANGES +DBMS_GSM_CLOUDADMIN.CHECKGSMDOWN +DBMS_GSM_CLOUDADMIN.CREATECATALOG +DBMS_GSM_CLOUDADMIN.CREATECLOUD +DBMS_GSM_CLOUDADMIN.CREATESUBSCRIBER +DBMS_GSM_CLOUDADMIN.DISCONNECTGSM +DBMS_GSM_CLOUDADMIN.DOENCRYPTGSMPWD +DBMS_GSM_CLOUDADMIN.GETMASTERLOCK +DBMS_GSM_CLOUDADMIN.IMPORTBEGIN +DBMS_GSM_CLOUDADMIN.IMPORTEND +DBMS_GSM_CLOUDADMIN.MASKPOLICY +DBMS_GSM_CLOUDADMIN.MODIFYCATALOG +DBMS_GSM_CLOUDADMIN.MODIFYGSM +DBMS_GSM_CLOUDADMIN.MODIFYREGION +DBMS_GSM_CLOUDADMIN.POOLVPDPREDICATE +DBMS_GSM_CLOUDADMIN.RELEASEMASTERLOCK +DBMS_GSM_CLOUDADMIN.REMOVECATALOG +DBMS_GSM_CLOUDADMIN.REMOVECLOUD +DBMS_GSM_CLOUDADMIN.REMOVEDATABASEPOOL +DBMS_GSM_CLOUDADMIN.REMOVEDATABASEPOOLADMIN +DBMS_GSM_CLOUDADMIN.REMOVEGSM +DBMS_GSM_CLOUDADMIN.REMOVEREGION +DBMS_GSM_CLOUDADMIN.REMOVESUBSCRIBER +DBMS_GSM_CLOUDADMIN.REMOVEVNCR +DBMS_GSM_CLOUDADMIN.SETENCRYPTEDGSMPWD +DBMS_GSM_CLOUDADMIN.SYNCPARAMETERS +DBMS_GSM_CLOUDADMIN.VERIFYCATALOG +DBMS_GSM_COMMON. +DBMS_GSM_COMMON.CHECKDBCOMPAT +DBMS_GSM_COMMON.DBISDOWNGRADEABLE +DBMS_GSM_COMMON.EXISTGSM +DBMS_GSM_COMMON.GETMSG +DBMS_GSM_COMMON.GSM_LIST_TO_GSM_PARAMS +DBMS_GSM_COMMON.GSM_PARAMS_TO_GSM_LIST +DBMS_GSM_COMMON.GWMFACTOR +DBMS_GSM_COMMON.GWMSUBNET +DBMS_GSM_COMMON.INST_LIST_TO_INST_STRING +DBMS_GSM_COMMON.ISCDB +DBMS_GSM_COMMON.ISGWMTRACING +DBMS_GSM_COMMON.PARAMS_TO_DBPARAM_LIST +DBMS_GSM_COMMON.REGION_PARAMS_TO_REGION_LIST +DBMS_GSM_COMMON.REREGISTERDB +DBMS_GSM_COMMON.RESETDBPARAMETER +DBMS_GSM_COMMON.SERVICECHANGE +DBMS_GSM_COMMON.SETDBPARAMETER +DBMS_GSM_COMMON.SETGSMPARAMETER +DBMS_GSM_COMMON.SETREGIONLISTPARAMETER +DBMS_GSM_COMMON.WRITETOGWMTRACING +DBMS_GSM_DBADMIN. +DBMS_GSM_DBADMIN.ADDDATABASE +DBMS_GSM_DBADMIN.ADDGSM +DBMS_GSM_DBADMIN.ADDREGION +DBMS_GSM_DBADMIN.ADDSERVICE +DBMS_GSM_DBADMIN.GETCRSINFO +DBMS_GSM_DBADMIN.GETGSMINFO +DBMS_GSM_DBADMIN.GETHOSTINFO +DBMS_GSM_DBADMIN.MODIFYDATABASE +DBMS_GSM_DBADMIN.MODIFYGSM +DBMS_GSM_DBADMIN.MODIFYREGION +DBMS_GSM_DBADMIN.MODIFYSERVICE +DBMS_GSM_DBADMIN.MODIFYSERVICEGLOBALPARAMETERS +DBMS_GSM_DBADMIN.MODIFYSERVICELOCALPARAMETERS +DBMS_GSM_DBADMIN.REMOVEALLSERVICES +DBMS_GSM_DBADMIN.REMOVEDATABASE +DBMS_GSM_DBADMIN.REMOVEGSM +DBMS_GSM_DBADMIN.REMOVEREGION +DBMS_GSM_DBADMIN.REMOVESERVICE +DBMS_GSM_DBADMIN.STARTSERVICE +DBMS_GSM_DBADMIN.STOPSERVICE +DBMS_GSM_DBADMIN.SYNC +DBMS_GSM_DBADMIN.VALIDATEDATABASE +DBMS_GSM_NOPRIV. +DBMS_GSM_NOPRIV.GETCATALOGLOCK +DBMS_GSM_NOPRIV.RELEASECATALOGLOCK +DBMS_GSM_POOLADMIN. +DBMS_GSM_POOLADMIN.ADDBROKERCONFIG +DBMS_GSM_POOLADMIN.ADDDATABASE +DBMS_GSM_POOLADMIN.ADDDATABASEDONE +DBMS_GSM_POOLADMIN.ADDDATABASEINTERNAL +DBMS_GSM_POOLADMIN.ADDSERVICE +DBMS_GSM_POOLADMIN.ADDSERVICETODBS +DBMS_GSM_POOLADMIN.CATROLLBACK +DBMS_GSM_POOLADMIN.CHANGESERVICESTATE +DBMS_GSM_POOLADMIN.DISABLESERVICE +DBMS_GSM_POOLADMIN.ENABLESERVICE +DBMS_GSM_POOLADMIN.GETINSTANCESTRING +DBMS_GSM_POOLADMIN.GETSERVICEDBPARAMS +DBMS_GSM_POOLADMIN.GETSERVICELOCALPARAMS +DBMS_GSM_POOLADMIN.GET_KEY +DBMS_GSM_POOLADMIN.MAKEDBSPREFERRED +DBMS_GSM_POOLADMIN.MODIFYDATABASE +DBMS_GSM_POOLADMIN.MODIFYSERVICE +DBMS_GSM_POOLADMIN.MODIFYSERVICECONFIG +DBMS_GSM_POOLADMIN.MODIFYSERVICEONDB +DBMS_GSM_POOLADMIN.MOVESERVICETODB +DBMS_GSM_POOLADMIN.RELOCATESERVICE +DBMS_GSM_POOLADMIN.REMOVEBROKERCONFIG +DBMS_GSM_POOLADMIN.REMOVEDATABASE +DBMS_GSM_POOLADMIN.REMOVESERVICE +DBMS_GSM_POOLADMIN.REMOVESERVICEINTERNAL +DBMS_GSM_POOLADMIN.REQUESTDONE +DBMS_GSM_POOLADMIN.SET_KEY +DBMS_GSM_POOLADMIN.STARTSERVICE +DBMS_GSM_POOLADMIN.STOPSERVICE +DBMS_GSM_POOLADMIN.STRTOLIST +DBMS_GSM_POOLADMIN.SYNCBROKERCONFIG +DBMS_GSM_POOLADMIN.SYNCDATABASE +DBMS_GSM_POOLADMIN.UPDATEDATABASESTATUS +DBMS_GSM_UTILITY. +DBMS_GSM_UTILITY.COMPATIBLEVERSION +DBMS_GSM_UTILITY.DATABASEPOOLEXISTS +DBMS_GSM_UTILITY.DBVERSREVLOOKUP +DBMS_GSM_UTILITY.GDSCTLVERSLOOKUP +DBMS_GSM_UTILITY.GENERATECHANGELOGENTRY +DBMS_GSM_UTILITY.GETCATALOGLOCK +DBMS_GSM_UTILITY.GETCATALOGVERSION +DBMS_GSM_UTILITY.GETDBVERSION +DBMS_GSM_UTILITY.GETFIELDSIZE +DBMS_GSM_UTILITY.GSMVERSLOOKUP +DBMS_GSM_UTILITY.ISLOCKEDBYMASTER +DBMS_GSM_UTILITY.MAXDBINSTANCES +DBMS_GSM_UTILITY.PREPAREDBPOOLNAME +DBMS_GSM_UTILITY.PREPARENAME +DBMS_GSM_UTILITY.PREPAREREGIONNAME +DBMS_GSM_UTILITY.RAISE_GSM_WARNING +DBMS_GSM_UTILITY.REGIONEXISTS +DBMS_GSM_UTILITY.RELEASECATALOGLOCK +DBMS_GSM_UTILITY.REMOVESTALEREQUESTS +DBMS_GSM_UTILITY.RESERVEINSTNUMS +DBMS_GSM_UTILITY.RESERVENEXTDBNUM +DBMS_GSM_UTILITY.RSAENCODER +DBMS_HA_ALERTS. +DBMS_HA_ALERTS.GET_CARDINALITY +DBMS_HA_ALERTS.GET_DB_DOMAIN +DBMS_HA_ALERTS.GET_DB_UNIQUE_NAME +DBMS_HA_ALERTS.GET_EVENT_TIME +DBMS_HA_ALERTS.GET_HOST +DBMS_HA_ALERTS.GET_INCARNATION +DBMS_HA_ALERTS.GET_INSTANCE +DBMS_HA_ALERTS.GET_REASON +DBMS_HA_ALERTS.GET_SERVICE +DBMS_HA_ALERTS.GET_SEVERITY +DBMS_HA_ALERTS.GET_VERSION +DBMS_HA_ALERTS_PRVT. +DBMS_HA_ALERTS_PRVT.CHECK_HA_RESOURCES +DBMS_HA_ALERTS_PRVT.CLEAR_INSTANCE_RESOURCES +DBMS_HA_ALERTS_PRVT.INSTANCE_STARTUP_TIMESTAMP_TZ +DBMS_HA_ALERTS_PRVT.POST_HA_ALERT +DBMS_HA_ALERTS_PRVT.POST_INSTANCE_UP +DBMS_HEAT_MAP. +DBMS_HEAT_MAP.AUTO_ADVISOR_HEATMAP_JOB +DBMS_HEAT_MAP.BLOCK_HEAT_MAP +DBMS_HEAT_MAP.EXTENT_HEAT_MAP +DBMS_HEAT_MAP.OBJECT_HEAT_MAP +DBMS_HEAT_MAP.SEGMENT_HEAT_MAP +DBMS_HEAT_MAP.TABLESPACE_HEAT_MAP +DBMS_HM. +DBMS_HM.CREATE_OFFLINE_DICTIONARY +DBMS_HM.CREATE_SCHEMA +DBMS_HM.DROP_SCHEMA +DBMS_HM.GET_RUN_REPORT +DBMS_HM.RUN_CHECK +DBMS_HM.RUN_DDE_ACTION +DBMS_HPROF. +DBMS_HPROF.ANALYZE +DBMS_HPROF.START_PROFILING +DBMS_HPROF.STOP_PROFILING +DBMS_HS. +DBMS_HS.ALTER_BASE_CAPS +DBMS_HS.ALTER_BASE_DD +DBMS_HS.ALTER_CLASS_CAPS +DBMS_HS.ALTER_CLASS_DD +DBMS_HS.ALTER_CLASS_INIT +DBMS_HS.ALTER_FDS_CLASS +DBMS_HS.ALTER_FDS_INST +DBMS_HS.ALTER_INST_CAPS +DBMS_HS.ALTER_INST_DD +DBMS_HS.ALTER_INST_INIT +DBMS_HS.COPY_CLASS +DBMS_HS.COPY_INST +DBMS_HS.CREATE_BASE_CAPS +DBMS_HS.CREATE_BASE_DD +DBMS_HS.CREATE_CLASS_CAPS +DBMS_HS.CREATE_CLASS_DD +DBMS_HS.CREATE_CLASS_INIT +DBMS_HS.CREATE_FDS_CLASS +DBMS_HS.CREATE_FDS_INST +DBMS_HS.CREATE_INST_CAPS +DBMS_HS.CREATE_INST_DD +DBMS_HS.CREATE_INST_INIT +DBMS_HS.DROP_BASE_CAPS +DBMS_HS.DROP_BASE_DD +DBMS_HS.DROP_CLASS_CAPS +DBMS_HS.DROP_CLASS_DD +DBMS_HS.DROP_CLASS_INIT +DBMS_HS.DROP_FDS_CLASS +DBMS_HS.DROP_FDS_INST +DBMS_HS.DROP_INST_CAPS +DBMS_HS.DROP_INST_DD +DBMS_HS.DROP_INST_INIT +DBMS_HS.REPLACE_BASE_CAPS +DBMS_HS.REPLACE_BASE_DD +DBMS_HS.REPLACE_CLASS_CAPS +DBMS_HS.REPLACE_CLASS_DD +DBMS_HS.REPLACE_CLASS_INIT +DBMS_HS.REPLACE_FDS_CLASS +DBMS_HS.REPLACE_FDS_INST +DBMS_HS.REPLACE_INST_CAPS +DBMS_HS.REPLACE_INST_DD +DBMS_HS.REPLACE_INST_INIT +DBMS_HS_ALT. +DBMS_HS_ALT.ALTER_BASE_CAPS +DBMS_HS_ALT.ALTER_BASE_DD +DBMS_HS_ALT.ALTER_CLASS_CAPS +DBMS_HS_ALT.ALTER_CLASS_DD +DBMS_HS_ALT.ALTER_CLASS_INIT +DBMS_HS_ALT.ALTER_FDS_CLASS +DBMS_HS_ALT.ALTER_FDS_INST +DBMS_HS_ALT.ALTER_INST_CAPS +DBMS_HS_ALT.ALTER_INST_DD +DBMS_HS_ALT.ALTER_INST_INIT +DBMS_HS_CHK. +DBMS_HS_CHK.CHECK_BASE_CAPS +DBMS_HS_CHK.CHECK_BASE_DD +DBMS_HS_CHK.CHECK_CLASS_CAPS +DBMS_HS_CHK.CHECK_CLASS_DD +DBMS_HS_CHK.CHECK_CLASS_INIT +DBMS_HS_CHK.CHECK_FDS_CLASS +DBMS_HS_CHK.CHECK_FDS_INST +DBMS_HS_CHK.CHECK_INIT_VALUE_TYPE +DBMS_HS_CHK.CHECK_INST_CAPS +DBMS_HS_CHK.CHECK_INST_DD +DBMS_HS_CHK.CHECK_INST_INIT +DBMS_HS_CHK.CHECK_TRANSLATION_TEXT +DBMS_HS_CHK.CHECK_TRANSLATION_TYPE +DBMS_HS_PARALLEL. +DBMS_HS_PARALLEL.CREATE_OR_REPLACE_VIEW +DBMS_HS_PARALLEL.CREATE_TABLE_TEMPLATE +DBMS_HS_PARALLEL.DROP_VIEW +DBMS_HS_PARALLEL.LOAD_TABLE +DBMS_HS_PARALLEL_METADATA. +DBMS_HS_PARALLEL_METADATA.CHECK_CAP +DBMS_HS_PARALLEL_METADATA.DELETE_VIEWOBJ +DBMS_HS_PARALLEL_METADATA.GET_CPU_NUM +DBMS_HS_PARALLEL_METADATA.GET_DOMAIN_NAME +DBMS_HS_PARALLEL_METADATA.INSERT_VIEWOBJ +DBMS_HS_PARALLEL_METADATA.LOADHISINFO +DBMS_HS_PARALLEL_METADATA.LOADINDCOLINFO +DBMS_HS_PARALLEL_METADATA.LOADPATITIONINFO +DBMS_HS_PARALLEL_METADATA.LOAD_SAMPLEDATA +DBMS_HS_PARALLEL_METADATA.PURGEMETADATA +DBMS_HS_PARALLEL_METADATA.RAISE_SYSTEM_ERROR +DBMS_HS_PARALLEL_METADATA.SCHEDULE_SAMPLING +DBMS_HS_PARALLEL_METADATA.TABLE_SAMPLING +DBMS_HS_PARALLEL_METADATA.UPDATE_SAMPLEMETA +DBMS_HS_UTL. +DBMS_HS_UTL.CANONICALIZE +DBMS_HS_UTL.CANON_EXTOBJ +DBMS_HS_UTL.COPY_CLASS +DBMS_HS_UTL.COPY_INST +DBMS_HS_UTL.CREATE_BASE_CAPS +DBMS_HS_UTL.CREATE_BASE_DD +DBMS_HS_UTL.CREATE_CLASS_CAPS +DBMS_HS_UTL.CREATE_CLASS_DD +DBMS_HS_UTL.CREATE_CLASS_INIT +DBMS_HS_UTL.CREATE_FDS_CLASS +DBMS_HS_UTL.CREATE_FDS_INST +DBMS_HS_UTL.CREATE_INST_CAPS +DBMS_HS_UTL.CREATE_INST_DD +DBMS_HS_UTL.CREATE_INST_INIT +DBMS_HS_UTL.DROP_BASE_CAPS +DBMS_HS_UTL.DROP_BASE_DD +DBMS_HS_UTL.DROP_CLASS_CAPS +DBMS_HS_UTL.DROP_CLASS_DD +DBMS_HS_UTL.DROP_CLASS_INIT +DBMS_HS_UTL.DROP_FDS_CLASS +DBMS_HS_UTL.DROP_FDS_INST +DBMS_HS_UTL.DROP_INST_CAPS +DBMS_HS_UTL.DROP_INST_DD +DBMS_HS_UTL.DROP_INST_INIT +DBMS_HS_UTL.GET_TRANS_TYPE +DBMS_HS_UTL.RAISE_SYSTEM_ERROR +DBMS_IJOB. +DBMS_IJOB.BIS +DBMS_IJOB.BIT +DBMS_IJOB.BROKEN +DBMS_IJOB.CDROLE +DBMS_IJOB.CHANGE_ENV +DBMS_IJOB.CHECK_DATAPUMP_AUTH +DBMS_IJOB.CHECK_PRIVS +DBMS_IJOB.CHECK_SCHEDULER_CONVERSION +DBMS_IJOB.CLUSER +DBMS_IJOB.DB_COMPATIBILITY +DBMS_IJOB.DROP_USER_JOBS +DBMS_IJOB.ENABLED +DBMS_IJOB.EXPORT_MYINST +DBMS_IJOB.FULL_EXPORT +DBMS_IJOB.GET_INSTANCE_MATCH_COUNT +DBMS_IJOB.GET_JOB_INSTANCE +DBMS_IJOB.INSTANCE +DBMS_IJOB.INST_CHECK +DBMS_IJOB.INTERVAL +DBMS_IJOB.IS_DV_ENABLED +DBMS_IJOB.NEXTVALS +DBMS_IJOB.NEXTVALSBY +DBMS_IJOB.NEXT_DATE +DBMS_IJOB.PUID +DBMS_IJOB.PUSER +DBMS_IJOB.REMOVE +DBMS_IJOB.RUN +DBMS_IJOB.SET_ENABLED +DBMS_IJOB.SET_JOB_AFFINITY +DBMS_IJOB.SET_JOB_FOR_ISUBMIT +DBMS_IJOB.SUBMIT +DBMS_IJOB.TOGGLE +DBMS_IJOB.UPDATE_METADATA +DBMS_IJOB.USER_EXPORT +DBMS_IJOB.WHAT +DBMS_ILM. +DBMS_ILM.ADD_TO_ILM +DBMS_ILM.ARCHIVESTATENAME +DBMS_ILM.EXECUTE_ILM +DBMS_ILM.EXECUTE_ILM_TASK +DBMS_ILM.FLUSH_ALL_SEGMENTS +DBMS_ILM.FLUSH_ROWMAPS +DBMS_ILM.FLUSH_SEGMENT_ACCESS +DBMS_ILM.FLUSH_SEGMENT_ROWMAP +DBMS_ILM.PREVIEW_ILM +DBMS_ILM.REMOVE_FROM_ILM +DBMS_ILM.STOP_ILM +DBMS_ILM_ADMIN. +DBMS_ILM_ADMIN.CLEAR_HEAT_MAP_ALL +DBMS_ILM_ADMIN.CLEAR_HEAT_MAP_TABLE +DBMS_ILM_ADMIN.CUSTOMIZE_ILM +DBMS_ILM_ADMIN.DISABLE_ILM +DBMS_ILM_ADMIN.ENABLE_ILM +DBMS_ILM_ADMIN.SET_HEAT_MAP_ALL +DBMS_ILM_ADMIN.SET_HEAT_MAP_START +DBMS_ILM_ADMIN.SET_HEAT_MAP_TABLE +DBMS_INDEX_UTL. +DBMS_INDEX_UTL.BUILD_INDEXES +DBMS_INDEX_UTL.BUILD_INDEX_COMPONENTS +DBMS_INDEX_UTL.BUILD_SCHEMA_INDEXES +DBMS_INDEX_UTL.BUILD_TABLE_COMPONENT_INDEXES +DBMS_INDEX_UTL.BUILD_TABLE_INDEXES +DBMS_INDEX_UTL.MULTI_LEVEL_BUILD +DBMS_INMEMORY. +DBMS_INMEMORY.DISABLEFASTSTART +DBMS_INMEMORY.ENABLEFASTSTART +DBMS_INMEMORY.POPULATE +DBMS_INMEMORY.REPOPULATE +DBMS_INTERNAL_LOGSTDBY. +DBMS_INTERNAL_LOGSTDBY.APPLY_GET +DBMS_INTERNAL_LOGSTDBY.APPLY_IS_OFF +DBMS_INTERNAL_LOGSTDBY.APPLY_SET +DBMS_INTERNAL_LOGSTDBY.APPLY_STOP_NOWAIT +DBMS_INTERNAL_LOGSTDBY.APPLY_UNSET +DBMS_INTERNAL_LOGSTDBY.AUDDEL +DBMS_INTERNAL_LOGSTDBY.AUDINS +DBMS_INTERNAL_LOGSTDBY.AUDUPD +DBMS_INTERNAL_LOGSTDBY.BUILD +DBMS_INTERNAL_LOGSTDBY.CANCEL_FUTURE +DBMS_INTERNAL_LOGSTDBY.CAPTURE_SCN +DBMS_INTERNAL_LOGSTDBY.CHECK_SKIP_LIKE +DBMS_INTERNAL_LOGSTDBY.CLEAR_LOGICAL_INSTANTIATION +DBMS_INTERNAL_LOGSTDBY.CREATE_FUTURE_SESSION +DBMS_INTERNAL_LOGSTDBY.DATA_ONLY_PREREQ +DBMS_INTERNAL_LOGSTDBY.DESTROY_FUTURE_SESSION +DBMS_INTERNAL_LOGSTDBY.DUMP_XDAT +DBMS_INTERNAL_LOGSTDBY.EDS_ADD_PREREQ +DBMS_INTERNAL_LOGSTDBY.EDS_ADD_TABLE_FINISH +DBMS_INTERNAL_LOGSTDBY.EDS_ADD_TABLE_INT +DBMS_INTERNAL_LOGSTDBY.EDS_CHECK_EVOLVE_STARTED +DBMS_INTERNAL_LOGSTDBY.EDS_CLEANUP_METADATA +DBMS_INTERNAL_LOGSTDBY.EDS_DROP_MVIEW +DBMS_INTERNAL_LOGSTDBY.EDS_DROP_TRIGGER +DBMS_INTERNAL_LOGSTDBY.EDS_EVAL_CHANGE_VECTOR +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_DISABLE +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_ENABLE +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_TABLE_CANCEL +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_TABLE_END +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_TABLE_START +DBMS_INTERNAL_LOGSTDBY.EDS_GEN_MV +DBMS_INTERNAL_LOGSTDBY.EDS_GEN_TRIGGERS +DBMS_INTERNAL_LOGSTDBY.EDS_GET_NAMES +DBMS_INTERNAL_LOGSTDBY.EDS_GET_TABLESPACE +DBMS_INTERNAL_LOGSTDBY.EDS_REMOVE_TABLE_FINISH +DBMS_INTERNAL_LOGSTDBY.EDS_REMOVE_TABLE_INT +DBMS_INTERNAL_LOGSTDBY.EDS_USER_CURSOR +DBMS_INTERNAL_LOGSTDBY.END_STREAM +DBMS_INTERNAL_LOGSTDBY.END_STREAM_SHARED +DBMS_INTERNAL_LOGSTDBY.FGADEL +DBMS_INTERNAL_LOGSTDBY.FGAINS +DBMS_INTERNAL_LOGSTDBY.FGAUPD +DBMS_INTERNAL_LOGSTDBY.FLUSH_SRLS +DBMS_INTERNAL_LOGSTDBY.GET_DB_ROLE +DBMS_INTERNAL_LOGSTDBY.GET_EXPORT_DML_SCN +DBMS_INTERNAL_LOGSTDBY.GET_OBJ_NUM +DBMS_INTERNAL_LOGSTDBY.GET_SAFE_SCN +DBMS_INTERNAL_LOGSTDBY.GUARD_BYPASS_CHK +DBMS_INTERNAL_LOGSTDBY.GUARD_BYPASS_OFF +DBMS_INTERNAL_LOGSTDBY.GUARD_BYPASS_ON +DBMS_INTERNAL_LOGSTDBY.GUARD_CHECK +DBMS_INTERNAL_LOGSTDBY.HIST_READ_RECORD +DBMS_INTERNAL_LOGSTDBY.HIST_SYNCH +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_CANCEL +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_CURRENT +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_FUTURE +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_PREVIOUS +DBMS_INTERNAL_LOGSTDBY.HSTDEL +DBMS_INTERNAL_LOGSTDBY.HSTINS +DBMS_INTERNAL_LOGSTDBY.HSTUPD +DBMS_INTERNAL_LOGSTDBY.INSTANTIATE_TAB_LOG +DBMS_INTERNAL_LOGSTDBY.INSTANTIATE_TAB_PREREQ +DBMS_INTERNAL_LOGSTDBY.IS_EDS_SUPPORTABLE +DBMS_INTERNAL_LOGSTDBY.IS_LSBY_SUPPORTABLE +DBMS_INTERNAL_LOGSTDBY.IS_PDB_ROOT +DBMS_INTERNAL_LOGSTDBY.JOBDEL +DBMS_INTERNAL_LOGSTDBY.JOBINS +DBMS_INTERNAL_LOGSTDBY.JOBUPD +DBMS_INTERNAL_LOGSTDBY.LOCK_LSBY_CON +DBMS_INTERNAL_LOGSTDBY.LOCK_LSBY_META +DBMS_INTERNAL_LOGSTDBY.LSBY_LOCK_TABLE +DBMS_INTERNAL_LOGSTDBY.LSBY_UNLOCK_TABLE +DBMS_INTERNAL_LOGSTDBY.MATCHED_PRIMARY +DBMS_INTERNAL_LOGSTDBY.NEED_SCN +DBMS_INTERNAL_LOGSTDBY.PARDEL +DBMS_INTERNAL_LOGSTDBY.PARINS +DBMS_INTERNAL_LOGSTDBY.PARUPD +DBMS_INTERNAL_LOGSTDBY.PREPARE_FOR_NEW_PRIMARY +DBMS_INTERNAL_LOGSTDBY.PRIMARY_DBID +DBMS_INTERNAL_LOGSTDBY.PRINTLOB +DBMS_INTERNAL_LOGSTDBY.PURGE_LOGS +DBMS_INTERNAL_LOGSTDBY.REBUILD +DBMS_INTERNAL_LOGSTDBY.REPAIR_LSBY +DBMS_INTERNAL_LOGSTDBY.REPLACE_DICTIONARY +DBMS_INTERNAL_LOGSTDBY.REPORT_ERROR +DBMS_INTERNAL_LOGSTDBY.RETRIEVE_STATEMENT +DBMS_INTERNAL_LOGSTDBY.SEQUENCE_UPDATE +DBMS_INTERNAL_LOGSTDBY.SEQUPD +DBMS_INTERNAL_LOGSTDBY.SET_EXPORT_SCN +DBMS_INTERNAL_LOGSTDBY.SET_LOGICAL_INSTANTIATION +DBMS_INTERNAL_LOGSTDBY.SET_TABLESPACE +DBMS_INTERNAL_LOGSTDBY.SET_TABLE_SCN +DBMS_INTERNAL_LOGSTDBY.SKIP_SUPPORT +DBMS_INTERNAL_LOGSTDBY.SKIP_TRANSACTION +DBMS_INTERNAL_LOGSTDBY.UNLOCK_LSBY_CON +DBMS_INTERNAL_LOGSTDBY.UNLOCK_LSBY_META +DBMS_INTERNAL_LOGSTDBY.UNSKIP_TRANSACTION +DBMS_INTERNAL_LOGSTDBY.UPCASE +DBMS_INTERNAL_LOGSTDBY.UPDATE_DYNAMIC_LSBY_OPTION +DBMS_INTERNAL_LOGSTDBY.VALIDATE_SET +DBMS_INTERNAL_LOGSTDBY.VALIDATE_SKIP_ACTION +DBMS_INTERNAL_LOGSTDBY.VALIDATE_SKIP_AUTHID +DBMS_INTERNAL_LOGSTDBY.VERIFY_NOSESSION +DBMS_INTERNAL_LOGSTDBY.VERIFY_SESSION +DBMS_INTERNAL_LOGSTDBY.VERIFY_SESSION_LOGAUTODELETE +DBMS_INTERNAL_LOGSTDBY.WAIT_FOR_SAFE_SCN +DBMS_INTERNAL_REPCAT. +DBMS_INTERNAL_REPCAT.DISABLE_RECEIVER_TRACE +DBMS_INTERNAL_REPCAT.ENABLE_RECEIVER_TRACE +DBMS_INTERNAL_REPCAT.ORDER_USER_OBJECTS +DBMS_INTERNAL_REPCAT.VALIDATE +DBMS_INTERNAL_ROLLING. +DBMS_INTERNAL_ROLLING.DESTROY_META +DBMS_INTERNAL_ROLLING.INSERT_DGLRDDIR +DBMS_INTERNAL_ROLLING.INSERT_DGLRDEVT +DBMS_INTERNAL_ROLLING.SET_UPGRADE_FLAGS +DBMS_INTERNAL_ROLLING.UPDATE_DGLRDINS_PROGRESS +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDCON +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDDAT +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDINS +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDPAR +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDSTA +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDSTS +DBMS_INTERNAL_SAFE_SCN. +DBMS_INTERNAL_SAFE_SCN.GET_EXPORT_DML_SCN +DBMS_INTERNAL_SAFE_SCN.MATCHED_PRIMARY +DBMS_INTERNAL_SAFE_SCN.NEED_SCN +DBMS_INTERNAL_SAFE_SCN.SET_EXPORT_SCN +DBMS_INTERNAL_SAFE_SCN.SET_SESSION_STATE +DBMS_INTERNAL_SAFE_SCN.WAIT_FOR_SAFE_SCN +DBMS_INTERNAL_TRIGGER. +DBMS_INTERNAL_TRIGGER.DESTROY +DBMS_INTERNAL_TRIGGER.GET_UGAKNT +DBMS_INTERNAL_TRIGGER.INVALIDATE_LIBRARY_CACHE +DBMS_INTERNAL_TRIGGER.IS_NESTED_TABLE +DBMS_INTERNAL_TRIGGER.MAKE +DBMS_INTERNAL_TRIGGER.SET_UGAKNT +DBMS_IR. +DBMS_IR.ADDLINE +DBMS_IR.ADVISECANCEL +DBMS_IR.ADVISEDONE +DBMS_IR.CHANGEPRIORITY +DBMS_IR.CLOSEFAILURES +DBMS_IR.CLOSESCRIPTFILE +DBMS_IR.COMPLETEREPAIROPTION +DBMS_IR.CONSOLIDATEREPAIR +DBMS_IR.CONTROLFILECHECK +DBMS_IR.CREATESCRIPTFILE +DBMS_IR.CREATEWORKINGREPAIRSET +DBMS_IR.EXECSQLSCRIPT +DBMS_IR.GETADVISEID +DBMS_IR.GETERROR +DBMS_IR.GETFEASIBILITYANDIMPACT +DBMS_IR.GETFILE +DBMS_IR.GETLINE +DBMS_IR.OPENSCRIPTFILE +DBMS_IR.REEVALUATEOPENFAILURES +DBMS_IR.STARTREPAIROPTION +DBMS_IR.UPDATEFEASIBILITYANDIMPACT +DBMS_IR.UPDATEREPAIROPTION +DBMS_IR.WRITEFILE +DBMS_IREFRESH. +DBMS_IREFRESH.ADD +DBMS_IREFRESH.CHANGE +DBMS_IREFRESH.CHECK_TAB +DBMS_IREFRESH.CHECK_USER +DBMS_IREFRESH.DESTROY +DBMS_IREFRESH.DROP_USER_GROUPS +DBMS_IREFRESH.ENQUOTE_LITERAL +DBMS_IREFRESH.FULL_EXPORT +DBMS_IREFRESH.FULL_EXPORT_CHILD +DBMS_IREFRESH.GET_BASENAME +DBMS_IREFRESH.GET_NAME +DBMS_IREFRESH.LOCK_GROUP +DBMS_IREFRESH.MAKE +DBMS_IREFRESH.MAKE_REPAPI +DBMS_IREFRESH.REFRESH +DBMS_IREFRESH.SUBMIT_JOB +DBMS_IREFRESH.SUBTRACT +DBMS_ISCHED. +DBMS_ISCHED.ADD_AGENT_CERT +DBMS_ISCHED.ADD_EVENT_QUEUE_SUBSCRIBER +DBMS_ISCHED.ADD_GROUP_MEMBER +DBMS_ISCHED.ADD_JOB_EMAIL_NOTIFICATION +DBMS_ISCHED.ADD_OUTPUT_BLOB +DBMS_ISCHED.ADD_WINDOW_GROUP_MEMBER +DBMS_ISCHED.ALTER_CHAIN +DBMS_ISCHED.ALTER_CHAIN_STEP +DBMS_ISCHED.ALTER_RUNNING_CHAIN +DBMS_ISCHED.AUDIT_SYS_PRIV +DBMS_ISCHED.BATCH_JOB_OPS +DBMS_ISCHED.CHAIN_END +DBMS_ISCHED.CHAIN_EVAL +DBMS_ISCHED.CHAIN_EVAL_UPDATE_STEP_STATE +DBMS_ISCHED.CHAIN_KILL +DBMS_ISCHED.CHAIN_LOG +DBMS_ISCHED.CHAIN_PARSE_STRING +DBMS_ISCHED.CHAIN_START +DBMS_ISCHED.CHAIN_STOP +DBMS_ISCHED.CHECK_AQ_CBK_PRIVS +DBMS_ISCHED.CHECK_COMPAT +DBMS_ISCHED.CHECK_CREDENTIAL +DBMS_ISCHED.CHECK_LOCAL_CREDENTIAL +DBMS_ISCHED.CHECK_OBJECT_PRIVS +DBMS_ISCHED.CHECK_REQUEST_PRIVS +DBMS_ISCHED.CLOSE_WINDOW +DBMS_ISCHED.COMPLETE_JOB_RUN +DBMS_ISCHED.CONVERT_DBMS_JOB +DBMS_ISCHED.COPY_JOB +DBMS_ISCHED.CREATE_AGENT_DESTINATION +DBMS_ISCHED.CREATE_CHAIN +DBMS_ISCHED.CREATE_CHAIN_STEP +DBMS_ISCHED.CREATE_CREDENTIAL +DBMS_ISCHED.CREATE_DATABASE_DESTINATION +DBMS_ISCHED.CREATE_FILE_WATCHER +DBMS_ISCHED.CREATE_GROUP +DBMS_ISCHED.CREATE_JOB +DBMS_ISCHED.CREATE_JOBS +DBMS_ISCHED.CREATE_JOB_CLASS +DBMS_ISCHED.CREATE_LOG_DIR +DBMS_ISCHED.CREATE_PROGRAM +DBMS_ISCHED.CREATE_SCHEDULE +DBMS_ISCHED.CREATE_WINDOW +DBMS_ISCHED.CREATE_WINDOW_GROUP +DBMS_ISCHED.DEFINE_CHAIN_RULE +DBMS_ISCHED.DEFINE_CHAIN_STEP +DBMS_ISCHED.DEFINE_METADATA_ARGUMENT +DBMS_ISCHED.DEFINE_PROGRAM_ARGUMENT +DBMS_ISCHED.DISABLE +DBMS_ISCHED.DISABLE1_CALENDAR_CHECK +DBMS_ISCHED.DROP_AGENT_DESTINATION +DBMS_ISCHED.DROP_CHAIN +DBMS_ISCHED.DROP_CHAIN_RULE +DBMS_ISCHED.DROP_CHAIN_STEP +DBMS_ISCHED.DROP_CREDENTIAL +DBMS_ISCHED.DROP_DATABASE_DESTINATION +DBMS_ISCHED.DROP_FILE_WATCHER +DBMS_ISCHED.DROP_GROUP +DBMS_ISCHED.DROP_JOB +DBMS_ISCHED.DROP_JOB_CLASS +DBMS_ISCHED.DROP_PROGRAM +DBMS_ISCHED.DROP_PROGRAM_ARGUMENT +DBMS_ISCHED.DROP_SCHEDULE +DBMS_ISCHED.DROP_SCHEDULER_ATTRIBUTE +DBMS_ISCHED.DROP_SCHEDULER_ATT_INT +DBMS_ISCHED.DROP_WINDOW +DBMS_ISCHED.DROP_WINDOW_GROUP +DBMS_ISCHED.ENABLE +DBMS_ISCHED.ENQ_END_CHAIN_JOB +DBMS_ISCHED.EVALUATE_RULESET +DBMS_ISCHED.EVALUATE_RUNNING_CHAIN +DBMS_ISCHED.EVENT_COND_FILTER +DBMS_ISCHED.EXEC_JOB_RUN_LSA +DBMS_ISCHED.EXPAND_FILENAME +DBMS_ISCHED.FILE_TRANSFER +DBMS_ISCHED.FILE_WATCH_FILTER +DBMS_ISCHED.FILE_WATCH_JOB +DBMS_ISCHED.GENERATE_OBJECT_NAME +DBMS_ISCHED.GET_AGENT_INFO +DBMS_ISCHED.GET_AGENT_PASS_VERIFIER +DBMS_ISCHED.GET_AGENT_VERSION +DBMS_ISCHED.GET_AGENT_WALLET_LOCATION +DBMS_ISCHED.GET_BOOL_ATTRIBUTE +DBMS_ISCHED.GET_CHAIN_EVAL_LOCK +DBMS_ISCHED.GET_CHAIN_RULESET +DBMS_ISCHED.GET_CHAR_ATTRIBUTE +DBMS_ISCHED.GET_DATE_ATTRIBUTE +DBMS_ISCHED.GET_FILE +DBMS_ISCHED.GET_GLOBAL_DB_NAME +DBMS_ISCHED.GET_INTERVAL_ATTRIBUTE +DBMS_ISCHED.GET_INT_ATTRIBUTE +DBMS_ISCHED.GET_LAST_RUN_TIME +DBMS_ISCHED.GET_NOTIFICATIONS +DBMS_ISCHED.GET_RULE_LINKS +DBMS_ISCHED.GET_SCHEDULER_ATTRIBUTE +DBMS_ISCHED.GET_STEP_STATE +DBMS_ISCHED.GET_STEP_STATE_CF +DBMS_ISCHED.GET_SYS_TIME_ZONE_NAME +DBMS_ISCHED.GET_TNS_NVPAIR +DBMS_ISCHED.IS_SCHEDULER_CREATED_AGENT +DBMS_ISCHED.LOG_DBMS_OUTPUT +DBMS_ISCHED.LOG_LOCAL_EXTERNAL_OUTPUT +DBMS_ISCHED.NEW_LOG_ID +DBMS_ISCHED.NORMALIZE_HOST_NAME +DBMS_ISCHED.OBFUSCATE_CREDENTIAL_PASSWORD +DBMS_ISCHED.OPEN_WINDOW +DBMS_ISCHED.PARSE_EMAIL_ADDRESSES +DBMS_ISCHED.PRE_ALTER_CHAIN +DBMS_ISCHED.PRE_CREATE_CHAIN +DBMS_ISCHED.PRE_DROP_CHAIN +DBMS_ISCHED.PURGE_LOG +DBMS_ISCHED.PUT_FILE +DBMS_ISCHED.RAISE_ORACLE_ERROR +DBMS_ISCHED.RAISE_SCHLIM_EVT +DBMS_ISCHED.RECORD_RESEND_REQUEST +DBMS_ISCHED.REGISTER_CALLBACK +DBMS_ISCHED.REMOTE_KILL +DBMS_ISCHED.REMOVE_EVENT_QUEUE_SUBSCRIBER +DBMS_ISCHED.REMOVE_GROUP_MEMBER +DBMS_ISCHED.REMOVE_JOB_EMAIL_NOTIFICATION +DBMS_ISCHED.REMOVE_WINDOW_GROUP_MEMBER +DBMS_ISCHED.RESET_JOB_ARGUMENT_VALUE +DBMS_ISCHED.RESOLVE3_NAME +DBMS_ISCHED.RESOLVE_IF_NAMED_DEST +DBMS_ISCHED.RESOLVE_NAME +DBMS_ISCHED.RETRIEVE_JOB_OUTPUT +DBMS_ISCHED.RUN_CHAIN +DBMS_ISCHED.RUN_JOB +DBMS_ISCHED.SEND_EVENT_EMAIL +DBMS_ISCHED.SET_AGENT_REGISTRATION_PASS +DBMS_ISCHED.SET_BOOL_ATTRIBUTE +DBMS_ISCHED.SET_CHAR_ATTRIBUTE +DBMS_ISCHED.SET_DATE_ATTRIBUTE +DBMS_ISCHED.SET_EVTMSG_ARG +DBMS_ISCHED.SET_INTERVAL_ATTRIBUTE +DBMS_ISCHED.SET_INT_ATTRIBUTE +DBMS_ISCHED.SET_JOB_ARGUMENT_VALUE +DBMS_ISCHED.SET_JOB_ATTRIBUTES +DBMS_ISCHED.SET_LAST_RUN_TIME +DBMS_ISCHED.SET_LIST_ATTRIBUTE +DBMS_ISCHED.SET_SCHEDULER_ATTRIBUTE +DBMS_ISCHED.SET_SECURITY_HEADERS +DBMS_ISCHED.SHOW_ERRORS +DBMS_ISCHED.STIME +DBMS_ISCHED.STOP_JOB +DBMS_ISCHED.SUBMIT_REMOTE_EXTERNAL_JOB +DBMS_ISCHED.SUBMIT_REMOTE_FILE_WATCH +DBMS_ISCHED.TRACE_EMAIL +DBMS_ISCHED.VALIDATE_DEST +DBMS_ISCHED.VALIDATE_EMAIL_ADDRESSES +DBMS_ISCHED.WATCH_FOR_FILES +DBMS_ISCHED.WRITE_FILE_WATCH_TRACE +DBMS_ISCHED_CHAIN_CONDITION. +DBMS_ISCHED_CHAIN_CONDITION.STEP_TABLE_POPULATED +DBMS_ISCHED_CHAIN_CONDITION.TRANSFORM_CHAIN_CONDITION +DBMS_ISCHED_REMDB_JOB. +DBMS_ISCHED_REMDB_JOB.IS_TRACING_ON +DBMS_ISCHED_REMDB_JOB.TRACE_ENTRY +DBMS_ISCHED_REMDB_JOB.TRACE_EXIT +DBMS_ISCHED_REMDB_JOB.WRITE_TRACE +DBMS_ISNAPSHOT. +DBMS_ISNAPSHOT.CHANGE_GROUP +DBMS_ISNAPSHOT.CHECK_USRPRIV +DBMS_ISNAPSHOT.DROP_GROUP +DBMS_ISNAPSHOT.DROP_USER_SNAPSHOTS +DBMS_ISNAPSHOT.FIND_DBLINKS +DBMS_ISNAPSHOT.PURGE_LOG_XID +DBMS_ISYNCREF. +DBMS_ISYNCREF.CREATE_INDEX +DBMS_ISYNCREF.CREATE_TABLE +DBMS_ISYNCREF.LOCKING_PRIMITIVE +DBMS_ITRIGGER_UTL. +DBMS_ITRIGGER_UTL.IMPORT_SCDC_TRIGGER_STRING +DBMS_ITRIGGER_UTL.SYNC_UP_SCDC +DBMS_I_INDEX_UTL. +DBMS_I_INDEX_UTL.COLLECT_PARAMETERS +DBMS_I_INDEX_UTL.COMPUTE_ORDER +DBMS_I_INDEX_UTL.DROP_IDX_JOB +DBMS_I_INDEX_UTL.FIX_QUOTES +DBMS_I_INDEX_UTL.GET_DOM_IDX_PARAM_STR +DBMS_I_INDEX_UTL.GET_REBUILD_COMMAND +DBMS_I_INDEX_UTL.IS_DOMAIN_INDEX +DBMS_I_INDEX_UTL.I_BUILD_INDEXES +DBMS_I_INDEX_UTL.PACK_PARAMETERS +DBMS_I_INDEX_UTL.REBUILD_INDEX +DBMS_I_INDEX_UTL.REBUILD_INDEX_LIST +DBMS_I_INDEX_UTL.REMOVE_PARAMETER_PIPES +DBMS_I_INDEX_UTL.SUBMIT_IDX_REBUILD_JOB +DBMS_I_INDEX_UTL.UNPACK_PARAMETERS +DBMS_I_INDEX_UTL.VERIFY_IDX_COMP +DBMS_I_INDEX_UTL.VERIFY_INDEX +DBMS_I_INDEX_UTL.VERIFY_OWNER +DBMS_I_INDEX_UTL.VERIFY_TABLE +DBMS_I_INDEX_UTL.VERIFY_TAB_COMP +DBMS_JAVA. +DBMS_JAVA.COMPILE_CLASS +DBMS_JAVA.COMPILE_METHOD +DBMS_JAVA.DBMS_FEATURE_OJVM +DBMS_JAVA.DBMS_FEATURE_SYSTEM_OJVM +DBMS_JAVA.DECODE_NATIVE_COMPILER_OPTION +DBMS_JAVA.DELETE_PERMISSION +DBMS_JAVA.DERIVEDFROM +DBMS_JAVA.DISABLE_OUTPUT_TO_FILE +DBMS_JAVA.DISABLE_OUTPUT_TO_JAVA +DBMS_JAVA.DISABLE_OUTPUT_TO_SQL +DBMS_JAVA.DISABLE_OUTPUT_TO_TRC +DBMS_JAVA.DISABLE_PERMISSION +DBMS_JAVA.DROPJAVA +DBMS_JAVA.DUMP_NATIVE_MACHINE_CODE +DBMS_JAVA.ENABLE_OUTPUT_TO_FILE +DBMS_JAVA.ENABLE_OUTPUT_TO_JAVA +DBMS_JAVA.ENABLE_OUTPUT_TO_SQL +DBMS_JAVA.ENABLE_OUTPUT_TO_TRC +DBMS_JAVA.ENABLE_PERMISSION +DBMS_JAVA.ENDSESSION +DBMS_JAVA.ENDSESSION_AND_RELATED_STATE +DBMS_JAVA.END_EXPORT +DBMS_JAVA.END_IMPORT +DBMS_JAVA.EXPORT_CLASS +DBMS_JAVA.EXPORT_RAW_CHUNK +DBMS_JAVA.EXPORT_RESOURCE +DBMS_JAVA.EXPORT_SOURCE +DBMS_JAVA.EXPORT_TEXT_CHUNK +DBMS_JAVA.FINALIZE_OUTPUT_TO_FILE +DBMS_JAVA.FIXED_IN_INSTANCE +DBMS_JAVA.FULL_NCOMP_ENABLED +DBMS_JAVA.GETVERSION +DBMS_JAVA.GET_COMPILER_OPTION +DBMS_JAVA.GET_JDK_VERSION +DBMS_JAVA.GET_OJVM_PROPERTY +DBMS_JAVA.GET_PROPERTY +DBMS_JAVA.GET_REPLY +DBMS_JAVA.GRANT_PERMISSION +DBMS_JAVA.GRANT_POLICY_PERMISSION +DBMS_JAVA.IMPORT_RAW_CHUNK +DBMS_JAVA.IMPORT_TEXT_CHUNK +DBMS_JAVA.INITIALIZE_OUTPUT_TO_FILE +DBMS_JAVA.INIT_BTL +DBMS_JAVA.LOADJAVA +DBMS_JAVA.LONGNAME +DBMS_JAVA.NATIVE_COMPILER_OPTIONS +DBMS_JAVA.NCOMP_STATUS_MSG +DBMS_JAVA.OPTION_CONTROLLER +DBMS_JAVA.QUERY_OUTPUT_TO_FILE +DBMS_JAVA.QUERY_OUTPUT_TO_JAVA +DBMS_JAVA.QUERY_OUTPUT_TO_SQL +DBMS_JAVA.QUERY_OUTPUT_TO_TRC +DBMS_JAVA.REMOVE_OUTPUT_TO_FILE +DBMS_JAVA.REMOVE_OUTPUT_TO_JAVA +DBMS_JAVA.REMOVE_OUTPUT_TO_SQL +DBMS_JAVA.REMOVE_PROPERTY +DBMS_JAVA.RESET_COMPILER_OPTION +DBMS_JAVA.RESET_PROPERTY_DEFS_TABLE_FLAG +DBMS_JAVA.RESOLVER +DBMS_JAVA.RESTRICT_PERMISSION +DBMS_JAVA.REVOKE_PERMISSION +DBMS_JAVA.RUNJAVA +DBMS_JAVA.RUNJAVA_IN_CURRENT_SESSION +DBMS_JAVA.SEND_COMMAND +DBMS_JAVA.SET_COMPILER_OPTION +DBMS_JAVA.SET_EXECUTE_PRIVILEGE +DBMS_JAVA.SET_FIXED_IN_INSTANCE +DBMS_JAVA.SET_NATIVE_COMPILER_OPTION +DBMS_JAVA.SET_OUTPUT +DBMS_JAVA.SET_OUTPUT_TO_FILE +DBMS_JAVA.SET_OUTPUT_TO_JAVA +DBMS_JAVA.SET_OUTPUT_TO_SQL +DBMS_JAVA.SET_PERMISSION_DEBUG +DBMS_JAVA.SET_PREFERENCE +DBMS_JAVA.SET_PROPERTY +DBMS_JAVA.SET_RUNTIME_EXEC_CREDENTIALS +DBMS_JAVA.SET_SYSTEM_CLASS_LOADING +DBMS_JAVA.SET_VERIFIER +DBMS_JAVA.SHAREDPRIVATECLASSNAME +DBMS_JAVA.SHORTNAME +DBMS_JAVA.SHOW_PROPERTY +DBMS_JAVA.START_BTL +DBMS_JAVA.START_EXPORT +DBMS_JAVA.START_IMPORT +DBMS_JAVA.START_JMX_AGENT +DBMS_JAVA.STOP_BTL +DBMS_JAVA.TERMINATE_BTL +DBMS_JAVA.UNCOMPILE_CLASS +DBMS_JAVA.UNCOMPILE_METHOD +DBMS_JAVA.UNSET_NATIVE_COMPILER_OPTION +DBMS_JAVA_DEFINERS. +DBMS_JAVA_DEFINERS.COMPILE_CLASS_ +DBMS_JAVA_DEFINERS.COMPILE_METHOD_ +DBMS_JAVA_DEFINERS.DECODE_NATIVE_COMPILER_OPTION_ +DBMS_JAVA_DEFINERS.GET_NTH_NATIVE_COMPILER_OPTION +DBMS_JAVA_DEFINERS.SET_NATIVE_COMPILER_OPTION_ +DBMS_JAVA_DEFINERS.UNCOMPILE_CLASS_ +DBMS_JAVA_DEFINERS.UNCOMPILE_METHOD_ +DBMS_JAVA_DEFINERS.UNSET_NATIVE_COMPILER_OPTION_ +DBMS_JAVA_DUMP. +DBMS_JAVA_DUMP.DUMP +DBMS_JAVA_MISC. +DBMS_JAVA_MISC.RUNJAVA +DBMS_JAVA_MISC.RUNJAVA_IN_CURRENT_SESSION +DBMS_JAVA_TEST. +DBMS_JAVA_TEST.FUNCALL +DBMS_JMS_PLSQL. +DBMS_JMS_PLSQL.BYTES_CLEAN +DBMS_JMS_PLSQL.BYTES_CLEAN_ALL +DBMS_JMS_PLSQL.BYTES_CLEAR_BODY +DBMS_JMS_PLSQL.BYTES_FLUSH +DBMS_JMS_PLSQL.BYTES_GET_MODE +DBMS_JMS_PLSQL.BYTES_PREPARE +DBMS_JMS_PLSQL.BYTES_READ_BYTES +DBMS_JMS_PLSQL.BYTES_READ_CHAR +DBMS_JMS_PLSQL.BYTES_READ_NUMBER +DBMS_JMS_PLSQL.BYTES_READ_UTF +DBMS_JMS_PLSQL.BYTES_RESET +DBMS_JMS_PLSQL.BYTES_WRITE_BYTES +DBMS_JMS_PLSQL.BYTES_WRITE_CHAR +DBMS_JMS_PLSQL.BYTES_WRITE_NUMBER +DBMS_JMS_PLSQL.BYTES_WRITE_UTF +DBMS_JMS_PLSQL.CONVERT_JMS_SELECTOR +DBMS_JMS_PLSQL.GET_EXCEPTION +DBMS_JMS_PLSQL.JAVA_CONVERT_JMS_SELECTOR +DBMS_JMS_PLSQL.MAP_CLEAN +DBMS_JMS_PLSQL.MAP_CLEAN_ALL +DBMS_JMS_PLSQL.MAP_CLEAR_BODY +DBMS_JMS_PLSQL.MAP_FLUSH +DBMS_JMS_PLSQL.MAP_GET_BYTES +DBMS_JMS_PLSQL.MAP_GET_CHAR +DBMS_JMS_PLSQL.MAP_GET_NAMES +DBMS_JMS_PLSQL.MAP_GET_NUMBER +DBMS_JMS_PLSQL.MAP_GET_OBJECT +DBMS_JMS_PLSQL.MAP_GET_SIZE +DBMS_JMS_PLSQL.MAP_GET_STRING +DBMS_JMS_PLSQL.MAP_ITEM_EXISTS +DBMS_JMS_PLSQL.MAP_PREPARE +DBMS_JMS_PLSQL.MAP_SET_BYTES +DBMS_JMS_PLSQL.MAP_SET_CHAR +DBMS_JMS_PLSQL.MAP_SET_NUMBER +DBMS_JMS_PLSQL.MAP_SET_STRING +DBMS_JMS_PLSQL.STREAM_CLEAN +DBMS_JMS_PLSQL.STREAM_CLEAN_ALL +DBMS_JMS_PLSQL.STREAM_CLEAR_BODY +DBMS_JMS_PLSQL.STREAM_FLUSH +DBMS_JMS_PLSQL.STREAM_GET_MODE +DBMS_JMS_PLSQL.STREAM_PREPARE +DBMS_JMS_PLSQL.STREAM_READ_BYTES +DBMS_JMS_PLSQL.STREAM_READ_CHAR +DBMS_JMS_PLSQL.STREAM_READ_NUMBER +DBMS_JMS_PLSQL.STREAM_READ_OBJECT +DBMS_JMS_PLSQL.STREAM_READ_STRING +DBMS_JMS_PLSQL.STREAM_RESET +DBMS_JMS_PLSQL.STREAM_WRITE_BYTES +DBMS_JMS_PLSQL.STREAM_WRITE_CHAR +DBMS_JMS_PLSQL.STREAM_WRITE_NUMBER +DBMS_JMS_PLSQL.STREAM_WRITE_STRING +DBMS_JOB. +DBMS_JOB.BACKGROUND_PROCESS +DBMS_JOB.BROKEN +DBMS_JOB.CHANGE +DBMS_JOB.INSTANCE +DBMS_JOB.INTERVAL +DBMS_JOB.ISUBMIT +DBMS_JOB.IS_JOBQ +DBMS_JOB.NEXT_DATE +DBMS_JOB.REMOVE +DBMS_JOB.RUN +DBMS_JOB.SUBMIT +DBMS_JOB.USER_EXPORT +DBMS_JOB.WHAT +DBMS_JVM_EXP_PERMS. +DBMS_JVM_EXP_PERMS.AUDIT_EXP +DBMS_JVM_EXP_PERMS.AUDIT_SYSPRIVS_EXP +DBMS_JVM_EXP_PERMS.CREATE_EXP +DBMS_JVM_EXP_PERMS.DROP_EXP +DBMS_JVM_EXP_PERMS.EXPORT_PERMS +DBMS_JVM_EXP_PERMS.GRANT_EXP +DBMS_JVM_EXP_PERMS.GRANT_SYSPRIVS_EXP +DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS +DBMS_LCR. +DBMS_LDAP. +DBMS_LDAP.ADD_S +DBMS_LDAP.BER_FREE +DBMS_LDAP.BIND_S +DBMS_LDAP.CHECK_INTERFACE_VERSION +DBMS_LDAP.COMPARE_S +DBMS_LDAP.COUNT_ENTRIES +DBMS_LDAP.COUNT_VALUES +DBMS_LDAP.COUNT_VALUES_BLOB +DBMS_LDAP.COUNT_VALUES_LEN +DBMS_LDAP.CREATE_MOD_ARRAY +DBMS_LDAP.DELETE +DBMS_LDAP.DELETE_S +DBMS_LDAP.ERR2STRING +DBMS_LDAP.EXPLODE_DN +DBMS_LDAP.FIRST_ATTRIBUTE +DBMS_LDAP.FIRST_ENTRY +DBMS_LDAP.FREE_MOD_ARRAY +DBMS_LDAP.GET_DN +DBMS_LDAP.GET_SESSION_INFO +DBMS_LDAP.GET_TRACE_LEVEL +DBMS_LDAP.GET_VALUES +DBMS_LDAP.GET_VALUES_BLOB +DBMS_LDAP.GET_VALUES_LEN +DBMS_LDAP.INIT +DBMS_LDAP.MODIFY_S +DBMS_LDAP.MODRDN2_S +DBMS_LDAP.MSGFREE +DBMS_LDAP.NEXT_ATTRIBUTE +DBMS_LDAP.NEXT_ENTRY +DBMS_LDAP.NLS_CONVERT_FROM_UTF8 +DBMS_LDAP.NLS_CONVERT_TO_UTF8 +DBMS_LDAP.NLS_GET_DBCHARSET_NAME +DBMS_LDAP.OPEN_SSL +DBMS_LDAP.POPULATE_MOD_ARRAY +DBMS_LDAP.RENAME_S +DBMS_LDAP.SEARCH_S +DBMS_LDAP.SEARCH_ST +DBMS_LDAP.SET_TRACE_LEVEL +DBMS_LDAP.SIMPLE_BIND_S +DBMS_LDAP.UNBIND_S +DBMS_LDAP.VALUE_FREE_BLOB +DBMS_LDAP_API_FFI. +DBMS_LDAP_API_FFI.BER_FREE +DBMS_LDAP_API_FFI.CREATE_MOD_ARRAY +DBMS_LDAP_API_FFI.FREE_MOD_ARRAY +DBMS_LDAP_API_FFI.LDAP_ADD_S +DBMS_LDAP_API_FFI.LDAP_BIND_S +DBMS_LDAP_API_FFI.LDAP_COMPARE_S +DBMS_LDAP_API_FFI.LDAP_COUNT_ENTRIES +DBMS_LDAP_API_FFI.LDAP_DELETE_S +DBMS_LDAP_API_FFI.LDAP_ERR2STRING +DBMS_LDAP_API_FFI.LDAP_EXPLODE_DN +DBMS_LDAP_API_FFI.LDAP_FIRST_ATTRIBUTE +DBMS_LDAP_API_FFI.LDAP_FIRST_ENTRY +DBMS_LDAP_API_FFI.LDAP_GET_DBCHARSET_NAME +DBMS_LDAP_API_FFI.LDAP_GET_DN +DBMS_LDAP_API_FFI.LDAP_GET_SESSION_INFO +DBMS_LDAP_API_FFI.LDAP_GET_TRACE_LEVEL +DBMS_LDAP_API_FFI.LDAP_GET_VALUES +DBMS_LDAP_API_FFI.LDAP_GET_VALUES_BLOB +DBMS_LDAP_API_FFI.LDAP_GET_VALUES_LEN +DBMS_LDAP_API_FFI.LDAP_INIT +DBMS_LDAP_API_FFI.LDAP_MEMFREE +DBMS_LDAP_API_FFI.LDAP_MODIFY_S +DBMS_LDAP_API_FFI.LDAP_MODRDN2_S +DBMS_LDAP_API_FFI.LDAP_MSGFREE +DBMS_LDAP_API_FFI.LDAP_NEXT_ATTRIBUTE +DBMS_LDAP_API_FFI.LDAP_NEXT_ENTRY +DBMS_LDAP_API_FFI.LDAP_OPEN_SSL +DBMS_LDAP_API_FFI.LDAP_RENAME_S +DBMS_LDAP_API_FFI.LDAP_SEARCH_S +DBMS_LDAP_API_FFI.LDAP_SEARCH_ST +DBMS_LDAP_API_FFI.LDAP_SET_TRACE_LEVEL +DBMS_LDAP_API_FFI.LDAP_SIMPLE_BIND_S +DBMS_LDAP_API_FFI.LDAP_UNBIND_S +DBMS_LDAP_API_FFI.ORA_LDAP_AUTHENTICATE_USER +DBMS_LDAP_API_FFI.ORA_LDAP_AUTHENTICATE_USER_EXT +DBMS_LDAP_API_FFI.ORA_LDAP_CHECK_GRP_MEMBERSHIP +DBMS_LDAP_API_FFI.ORA_LDAP_CHECK_USER_SCRIPTION +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_GRP_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_MOD_PSET +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_SRV_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_SUB_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_USER_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_FREE_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_FREE_MOD_PSET +DBMS_LDAP_API_FFI.ORA_LDAP_FREE_PSET_COLL +DBMS_LDAP_API_FFI.ORA_LDAP_GET_AVAIL_SRVS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_GRP_DN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_GRP_MEMBERSHIP +DBMS_LDAP_API_FFI.ORA_LDAP_GET_GRP_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_NAMES +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_VALUES +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_VALUES_BLOB +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_VALUES_LEN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SCRIBED_SRVS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SCRIBED_USERS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SUB_DN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SUB_EXT_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SUB_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_DN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_EXT_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_PROPS_AUTH +DBMS_LDAP_API_FFI.ORA_LDAP_LOCATE_SUB_FOR_USER +DBMS_LDAP_API_FFI.ORA_LDAP_NORM_DN_WITH_CASE +DBMS_LDAP_API_FFI.ORA_LDAP_POPULATE_MOD_PSET +DBMS_LDAP_API_FFI.ORA_LDAP_SCRIBE_USER +DBMS_LDAP_API_FFI.ORA_LDAP_SET_GRP_HANDLE_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_SET_USER_HANDLE_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_SET_USER_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_UNSCRIBE_USER +DBMS_LDAP_API_FFI.POPULATE_MOD_ARRAY +DBMS_LDAP_API_FFI.VALUE_FREE_BLOB +DBMS_LDAP_UTL. +DBMS_LDAP_UTL.AUTHENTICATE_USER +DBMS_LDAP_UTL.AUTHENTICATE_USER_EXT +DBMS_LDAP_UTL.CHECK_GROUP_MEMBERSHIP +DBMS_LDAP_UTL.CHECK_INTERFACE_VERSION +DBMS_LDAP_UTL.CHECK_USER_SUBSCRIPTION +DBMS_LDAP_UTL.CREATE_GROUP_HANDLE +DBMS_LDAP_UTL.CREATE_MOD_PROPERTYSET +DBMS_LDAP_UTL.CREATE_SERVICE_HANDLE +DBMS_LDAP_UTL.CREATE_SUBSCRIBER_HANDLE +DBMS_LDAP_UTL.CREATE_USER_HANDLE +DBMS_LDAP_UTL.FREE_HANDLE +DBMS_LDAP_UTL.FREE_MOD_PROPERTYSET +DBMS_LDAP_UTL.FREE_PROPERTYSET_COLLECTION +DBMS_LDAP_UTL.GET_AVAILABLE_SERVICES +DBMS_LDAP_UTL.GET_GROUP_DN +DBMS_LDAP_UTL.GET_GROUP_MEMBERSHIP +DBMS_LDAP_UTL.GET_GROUP_PROPERTIES +DBMS_LDAP_UTL.GET_PROPERTY_NAMES +DBMS_LDAP_UTL.GET_PROPERTY_VALUES +DBMS_LDAP_UTL.GET_PROPERTY_VALUES_BLOB +DBMS_LDAP_UTL.GET_PROPERTY_VALUES_LEN +DBMS_LDAP_UTL.GET_SUBSCRIBED_SERVICES +DBMS_LDAP_UTL.GET_SUBSCRIBED_USERS +DBMS_LDAP_UTL.GET_SUBSCRIBER_DN +DBMS_LDAP_UTL.GET_SUBSCRIBER_EXT_PROPERTIES +DBMS_LDAP_UTL.GET_SUBSCRIBER_PROPERTIES +DBMS_LDAP_UTL.GET_USER_DN +DBMS_LDAP_UTL.GET_USER_EXTENDED_PROPERTIES +DBMS_LDAP_UTL.GET_USER_PROPERTIES +DBMS_LDAP_UTL.GET_USER_PROPS_AND_AUTH +DBMS_LDAP_UTL.LOCATE_SUBSCRIBER_FOR_USER +DBMS_LDAP_UTL.NORMALIZE_DN_WITH_CASE +DBMS_LDAP_UTL.POPULATE_MOD_PROPERTYSET +DBMS_LDAP_UTL.PROPERTY_VALUE_FREE_BLOB +DBMS_LDAP_UTL.SET_GROUP_HANDLE_PROPERTIES +DBMS_LDAP_UTL.SET_USER_HANDLE_PROPERTIES +DBMS_LDAP_UTL.SET_USER_PROPERTIES +DBMS_LDAP_UTL.SUBSCRIBE_USER +DBMS_LDAP_UTL.UNSUBSCRIBE_USER +DBMS_LOB. +DBMS_LOB.APPEND +DBMS_LOB.CLOSE +DBMS_LOB.COMPARE +DBMS_LOB.CONVERTTOBLOB +DBMS_LOB.CONVERTTOCLOB +DBMS_LOB.COPY +DBMS_LOB.COPY_DBFS_LINK +DBMS_LOB.COPY_FROM_DBFS_LINK +DBMS_LOB.CREATETEMPORARY +DBMS_LOB.DBFS_LINK_GENERATE_PATH +DBMS_LOB.ERASE +DBMS_LOB.FILECLOSE +DBMS_LOB.FILECLOSEALL +DBMS_LOB.FILEEXISTS +DBMS_LOB.FILEGETNAME +DBMS_LOB.FILEISOPEN +DBMS_LOB.FILEOPEN +DBMS_LOB.FRAGMENT_DELETE +DBMS_LOB.FRAGMENT_INSERT +DBMS_LOB.FRAGMENT_MOVE +DBMS_LOB.FRAGMENT_REPLACE +DBMS_LOB.FREETEMPORARY +DBMS_LOB.GETCHUNKSIZE +DBMS_LOB.GETCONTENTTYPE +DBMS_LOB.GETLENGTH +DBMS_LOB.GETOPTIONS +DBMS_LOB.GET_DBFS_LINK +DBMS_LOB.GET_DBFS_LINK_STATE +DBMS_LOB.GET_DEDUPLICATE_REGIONS +DBMS_LOB.GET_STORAGE_LIMIT +DBMS_LOB.INSTR +DBMS_LOB.ISOPEN +DBMS_LOB.ISSECUREFILE +DBMS_LOB.ISTEMPORARY +DBMS_LOB.LOADBLOBFROMFILE +DBMS_LOB.LOADCLOBFROMFILE +DBMS_LOB.LOADFROMFILE +DBMS_LOB.MOVE_TO_DBFS_LINK +DBMS_LOB.OPEN +DBMS_LOB.READ +DBMS_LOB.SETCONTENTTYPE +DBMS_LOB.SETOPTIONS +DBMS_LOB.SET_DBFS_LINK +DBMS_LOB.SUBSTR +DBMS_LOB.TRIM +DBMS_LOB.WRITE +DBMS_LOB.WRITEAPPEND +DBMS_LOBUTIL. +DBMS_LOBUTIL.COPY_PRIMARY_DEDUP +DBMS_LOBUTIL.GETDEDUPSET +DBMS_LOBUTIL.GETEXTENTS +DBMS_LOBUTIL.GETINODE +DBMS_LOBUTIL.GETLOBMAP +DBMS_LOB_AM_PRIVATE. +DBMS_LOB_AM_PRIVATE.CREATEFILE +DBMS_LOB_AM_PRIVATE.DELETEFILE +DBMS_LOB_AM_PRIVATE.GETFILE +DBMS_LOB_AM_PRIVATE.GETLENGTH +DBMS_LOB_AM_PRIVATE.ISSTREAMABLE +DBMS_LOB_AM_PRIVATE.SETCHARSETID +DBMS_LOCK. +DBMS_LOCK.ALLOCATE_UNIQUE +DBMS_LOCK.ALLOCATE_UNIQUE_AUTONOMOUS +DBMS_LOCK.CONVERT +DBMS_LOCK.RELEASE +DBMS_LOCK.REQUEST +DBMS_LOCK.SLEEP +DBMS_LOCK_ALLOCATED +DBMS_LOG. +DBMS_LOG.KSDDDT +DBMS_LOG.KSDFLS +DBMS_LOG.KSDIND +DBMS_LOG.KSDWRT +DBMS_LOGMNR. +DBMS_LOGMNR.ADD_LOGFILE +DBMS_LOGMNR.COLUMN_PRESENT +DBMS_LOGMNR.END_LOGMNR +DBMS_LOGMNR.MINE_VALUE +DBMS_LOGMNR.REMOVE_LOGFILE +DBMS_LOGMNR.START_LOGMNR +DBMS_LOGMNR_D. +DBMS_LOGMNR_D.BUILD +DBMS_LOGMNR_D.SET_TABLESPACE +DBMS_LOGMNR_FFVTOLOGMNRT. +DBMS_LOGMNR_INTERNAL. +DBMS_LOGMNR_INTERNAL.ADD_TABLE_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.ADD_USER_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.ADD_XID_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.ADVANCE_READ_SCN +DBMS_LOGMNR_INTERNAL.AGESPILL_101TO102 +DBMS_LOGMNR_INTERNAL.AGESPILL_102TO101 +DBMS_LOGMNR_INTERNAL.AGESPILL_102TO11 +DBMS_LOGMNR_INTERNAL.AGESPILL_11202TO112 +DBMS_LOGMNR_INTERNAL.AGESPILL_112TO11 +DBMS_LOGMNR_INTERNAL.AGESPILL_11TO102 +DBMS_LOGMNR_INTERNAL.AGESPILL_11TO112 +DBMS_LOGMNR_INTERNAL.DELETE_TABLE_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.DELETE_USER_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.DELETE_XID_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.DICTIONARY_S_LOCK +DBMS_LOGMNR_INTERNAL.DICTIONARY_UNLOCK +DBMS_LOGMNR_INTERNAL.DICTIONARY_X_LOCK +DBMS_LOGMNR_INTERNAL.DOWNGRADE_CKPT +DBMS_LOGMNR_INTERNAL.DO_INT_BUILD +DBMS_LOGMNR_INTERNAL.DUMP_CKPT_DATA +DBMS_LOGMNR_INTERNAL.DUMP_PAGEOUT_DATA +DBMS_LOGMNR_INTERNAL.DUMP_STREAMS_CKPT_DATA +DBMS_LOGMNR_INTERNAL.GET_BRANCH_INFO +DBMS_LOGMNR_INTERNAL.GET_MDH +DBMS_LOGMNR_INTERNAL.GET_MDH_FOR_PDBNAME_SCN +DBMS_LOGMNR_INTERNAL.GET_PDBNAME_FOR_MDH +DBMS_LOGMNR_INTERNAL.GET_PROCESS_ROLE# +DBMS_LOGMNR_INTERNAL.GET_SESSION_ACTION_TYPE# +DBMS_LOGMNR_INTERNAL.INJECTCOMMITORROLLBACK +DBMS_LOGMNR_INTERNAL.INSERT_INTO_SESSION_ACTION_TBL +DBMS_LOGMNR_INTERNAL.INT_BUILD +DBMS_LOGMNR_INTERNAL.INT_BUILD_N +DBMS_LOGMNR_INTERNAL.KRVIPLEAD +DBMS_LOGMNR_INTERNAL.KRVIPLENTER +DBMS_LOGMNR_INTERNAL.KRVIPLEXIT +DBMS_LOGMNR_INTERNAL.KRVIPLIAD +DBMS_LOGMNR_INTERNAL.KRVIPLIMM +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVICL +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIFTSI +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIISAC +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVILSS +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVILT +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIULSS +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIULT +DBMS_LOGMNR_INTERNAL.LOGMNR_SESSION_EVOLVE_DIVERGED +DBMS_LOGMNR_INTERNAL.PRUNE_STREAMS_CKPT +DBMS_LOGMNR_INTERNAL.REPLACE_DICTIONARY_BEGIN +DBMS_LOGMNR_INTERNAL.REPLACE_DICTIONARY_END +DBMS_LOGMNR_INTERNAL.RESOLVE_TABLE_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.SET_SESSION_ACTION +DBMS_LOGMNR_INTERNAL.SET_SESSION_ACTION_HELPER +DBMS_LOGMNR_INTERNAL.SHARE_PERSISTENT_DICTIONARY +DBMS_LOGMNR_INTERNAL.SKIP_RBA +DBMS_LOGMNR_INTERNAL.TRACEREDOLOGS +DBMS_LOGMNR_INTERNAL.TRACE_FOREIGN_LOG_INFO +DBMS_LOGMNR_INTERNAL.TRACE_LOCAL_LOG_INFO +DBMS_LOGMNR_INTERNAL.TRACE_LOCAL_XID +DBMS_LOGMNR_INTERNAL.TRACE_TABLE_LOCAL_DICT +DBMS_LOGMNR_INTERNAL.UNSET_SESSION_ACTION +DBMS_LOGMNR_INTERNAL.UNSET_SESSION_ACTION_HELPER +DBMS_LOGMNR_INTERNAL.UNSKIP_RBA +DBMS_LOGMNR_INTERNAL.UPGRADE_CKPT +DBMS_LOGMNR_LOGREP_DICT. +DBMS_LOGMNR_LOGREP_DICT.ADD_COL +DBMS_LOGMNR_LOGREP_DICT.ADD_GLOBAL_NAME +DBMS_LOGMNR_LOGREP_DICT.ADD_OBJ +DBMS_LOGMNR_LOGREP_DICT.COMMIT_XID +DBMS_LOGMNR_LOGREP_DICT.DEL_OBJ +DBMS_LOGMNR_LOGREP_DICT.PURGE_GLOBAL_NAME +DBMS_LOGMNR_LOGREP_DICT.PURGE_OBJ +DBMS_LOGMNR_LOGREP_DICT.PURGE_SCN +DBMS_LOGMNR_LOGREP_DICT.ROLLBACK_XID +DBMS_LOGMNR_LOGREP_DICT.SYSTEM_INFO_EXP +DBMS_LOGMNR_SESSION. +DBMS_LOGMNR_SESSION.ADD_LOG_FILE +DBMS_LOGMNR_SESSION.ATTACH_SESSION +DBMS_LOGMNR_SESSION.CLONE_CONTEXT +DBMS_LOGMNR_SESSION.COLUMN_PRESENT +DBMS_LOGMNR_SESSION.CREATE_SESSION +DBMS_LOGMNR_SESSION.DESTROY_SESSION +DBMS_LOGMNR_SESSION.DETACH_SESSION +DBMS_LOGMNR_SESSION.MINE_VALUE +DBMS_LOGMNR_SESSION.PREPARE_SCN_RANGE +DBMS_LOGMNR_SESSION.PURGE_SESSION +DBMS_LOGMNR_SESSION.RELEASE_SCN_RANGE +DBMS_LOGMNR_SESSION.REMOVE_LOG_FILE +DBMS_LOGMNR_SESSION.SET_DICT_ATTR +DBMS_LOGMNR_SESSION.SET_SESSION_PARAMS +DBMS_LOGREP_DEF_PROC_UTL. +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_DROP_TABLE +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_DROP_USER +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_NEW_TABLE +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_NEW_USER +DBMS_LOGREP_EXP. +DBMS_LOGREP_EXP.ANYDATA_IMPORT_STRING +DBMS_LOGREP_EXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_LOGREP_EXP.INTERNAL_TRANSFORM_EXPORT +DBMS_LOGREP_EXP.SCHEMA_INFO_EXP +DBMS_LOGREP_EXP.SYSTEM_INFO_EXP +DBMS_LOGREP_EXP.VERSION_VAR2_2_NUMBER +DBMS_LOGREP_IMP. +DBMS_LOGREP_IMP.APPLY_ERROR +DBMS_LOGREP_IMP.APPLY_ERROR_TXN +DBMS_LOGREP_IMP.APPLY_MILESTONE +DBMS_LOGREP_IMP.APPLY_PROGRESS +DBMS_LOGREP_IMP.BUMP_SCN +DBMS_LOGREP_IMP.CREATE_APPLY +DBMS_LOGREP_IMP.CREATE_CAPTURE +DBMS_LOGREP_IMP.CREATE_PROPAGATION +DBMS_LOGREP_IMP.CREATE_SYNC_CAPTURE +DBMS_LOGREP_IMP.DATE_CONVERT +DBMS_LOGREP_IMP.INCLUDE_EXTRA_ATTRIBUTE +DBMS_LOGREP_IMP.INSTANTIATE +DBMS_LOGREP_IMP.INSTANTIATE_SCHEMA +DBMS_LOGREP_IMP.IS_IMPORT_CONFIGURATION +DBMS_LOGREP_IMP.IS_IMPORT_INSTANTIATION +DBMS_LOGREP_IMP.IS_SWITCH_USER +DBMS_LOGREP_IMP.MESSAGE_CONSUMERS +DBMS_LOGREP_IMP.MESSAGE_RULES +DBMS_LOGREP_IMP.PREPARE_DDL +DBMS_LOGREP_IMP.PREPARE_OBJECT +DBMS_LOGREP_IMP.PREPARE_SYNC_OBJECT +DBMS_LOGREP_IMP.PRIVILEGED_USER +DBMS_LOGREP_IMP.SET_APPLY_PARAM +DBMS_LOGREP_IMP.SET_APPLY_SOURCE_OBJ +DBMS_LOGREP_IMP.SET_APPLY_SOURCE_SCHEMA +DBMS_LOGREP_IMP.SET_CAPTURE_PARAM +DBMS_LOGREP_IMP.SET_DML_HANDLER +DBMS_LOGREP_IMP.SET_IMPORT_MODE +DBMS_LOGREP_IMP.SET_KEY_COLUMNS +DBMS_LOGREP_IMP.SET_UPDATE_CONFLICT_HANDLER +DBMS_LOGREP_IMP.START_APPLY +DBMS_LOGREP_IMP.START_CAPTURE +DBMS_LOGREP_IMP.START_QUEUE +DBMS_LOGREP_IMP.STREAMS_RULES +DBMS_LOGREP_IMP_INTERNAL. +DBMS_LOGREP_IMP_INTERNAL.APPLY_ERROR +DBMS_LOGREP_IMP_INTERNAL.APPLY_ERROR_TXN +DBMS_LOGREP_IMP_INTERNAL.APPLY_MILESTONE +DBMS_LOGREP_IMP_INTERNAL.APPLY_PROGRESS +DBMS_LOGREP_IMP_INTERNAL.INSTANTIATE +DBMS_LOGREP_IMP_INTERNAL.INSTANTIATE_SCHEMA +DBMS_LOGREP_IMP_INTERNAL.PREPARE_DDL +DBMS_LOGREP_IMP_INTERNAL.PRIVILEGED_USER +DBMS_LOGREP_IMP_INTERNAL.STREAMS_RULES +DBMS_LOGREP_IMP_INTERNAL.UPDATE_APPLY_PROCESS +DBMS_LOGREP_UTIL. +DBMS_LOGREP_UTIL.BIC +DBMS_LOGREP_UTIL.BIS +DBMS_LOGREP_UTIL.BIT +DBMS_LOGREP_UTIL.BITOR +DBMS_LOGREP_UTIL.BOOLEAN_TO_VARCHAR2 +DBMS_LOGREP_UTIL.BUMP_SCN +DBMS_LOGREP_UTIL.CANONICALIZE +DBMS_LOGREP_UTIL.CANONICAL_CONCAT +DBMS_LOGREP_UTIL.CANON_DBLINK +DBMS_LOGREP_UTIL.CHECK_2LEVEL_PRIVILEGE +DBMS_LOGREP_UTIL.CHECK_DBLINK +DBMS_LOGREP_UTIL.CHECK_PROCESS_PRIVILEGES +DBMS_LOGREP_UTIL.CHECK_SOURCE_ROOT +DBMS_LOGREP_UTIL.COMPATIBLE_VARCHAR_TO_INT +DBMS_LOGREP_UTIL.CONVERT_INT_TO_EXT_LCR +DBMS_LOGREP_UTIL.DB_VERSION +DBMS_LOGREP_UTIL.DDL_ANNOTATE +DBMS_LOGREP_UTIL.DROP_UNUSED_RULE_SETS +DBMS_LOGREP_UTIL.DUMP_TRACE +DBMS_LOGREP_UTIL.ENQUOTE_LITERAL +DBMS_LOGREP_UTIL.ENQUOTE_NAME +DBMS_LOGREP_UTIL.ENSURE_NONNULL +DBMS_LOGREP_UTIL.ENSURE_STREAMS +DBMS_LOGREP_UTIL.FETCH_CAPTURE_USER +DBMS_LOGREP_UTIL.FETCH_DBA_XOUT_CAPTURE_USER +DBMS_LOGREP_UTIL.FORCE_XSTREAM +DBMS_LOGREP_UTIL.GENERIC_CANONICALIZE +DBMS_LOGREP_UTIL.GET_CHECKPOINT_SCNS +DBMS_LOGREP_UTIL.GET_CONSISTENT_SCN +DBMS_LOGREP_UTIL.GET_CONSTRAINT_NAME +DBMS_LOGREP_UTIL.GET_CURRENT_PDB_NAME +DBMS_LOGREP_UTIL.GET_LAST_ENQ_SCN +DBMS_LOGREP_UTIL.GET_LOCK +DBMS_LOGREP_UTIL.GET_OBJECT_LOCK +DBMS_LOGREP_UTIL.GET_OBJECT_NAME +DBMS_LOGREP_UTIL.GET_PDB_SHORT_NAME +DBMS_LOGREP_UTIL.GET_PROC_USE_CONTEXT +DBMS_LOGREP_UTIL.GET_PROC_USE_CONTEXT_INT +DBMS_LOGREP_UTIL.GET_QUEUE_OID +DBMS_LOGREP_UTIL.GET_REAL_CHECKPOINT_SCNS +DBMS_LOGREP_UTIL.GET_REQ_CKPT_SCN +DBMS_LOGREP_UTIL.GET_RS_LOCKS +DBMS_LOGREP_UTIL.GET_RULE_ACTION_CONTEXT +DBMS_LOGREP_UTIL.GET_STR_COMPAT +DBMS_LOGREP_UTIL.GG_XSTREAM_QTABLE +DBMS_LOGREP_UTIL.IS_BUILT_IN_TYPE +DBMS_LOGREP_UTIL.IS_INVOKER_VALID_OGG_USER +DBMS_LOGREP_UTIL.IS_MAX_PRIV_USER +DBMS_LOGREP_UTIL.IS_PDB_ENABLED +DBMS_LOGREP_UTIL.IS_ROOT_PDB +DBMS_LOGREP_UTIL.IS_VALID_ROLE +DBMS_LOGREP_UTIL.IS_VALID_SYSTEM_PRIV +DBMS_LOGREP_UTIL.LCR_CACHE_PURGE +DBMS_LOGREP_UTIL.LOCK_PROCESS +DBMS_LOGREP_UTIL.MESSAGE_TRACKING_PURGE +DBMS_LOGREP_UTIL.MESSAGE_TRACKING_RESIZE +DBMS_LOGREP_UTIL.PRE_11_2_DB +DBMS_LOGREP_UTIL.QUERY_DBA_APPLY +DBMS_LOGREP_UTIL.QUERY_DBA_CAPTURE +DBMS_LOGREP_UTIL.QUERY_DBA_CAPTURE2 +DBMS_LOGREP_UTIL.QUERY_DBA_QUEUES +DBMS_LOGREP_UTIL.QUERY_DBA_XOUT_ATTACHED_SVR +DBMS_LOGREP_UTIL.QUERY_DIFF_APPLY_USER +DBMS_LOGREP_UTIL.RAISE_CONFIG_ERROR +DBMS_LOGREP_UTIL.RAISE_SYSTEM_ERROR +DBMS_LOGREP_UTIL.RAISE_SYSTEM_ERROR_3GL +DBMS_LOGREP_UTIL.RAWS +DBMS_LOGREP_UTIL.RELEASE_LOCK +DBMS_LOGREP_UTIL.RELEASE_OBJECT_LOCK +DBMS_LOGREP_UTIL.RELEASE_RS_LOCKS +DBMS_LOGREP_UTIL.SET_ALLOCATED_MEMORY +DBMS_LOGREP_UTIL.SET_CCA_MAX_PERCENTAGE +DBMS_LOGREP_UTIL.SET_PARAMETER +DBMS_LOGREP_UTIL.SET_STREAMS_AUTO_FILTER +DBMS_LOGREP_UTIL.SET_SUPP_LOGGING +DBMS_LOGREP_UTIL.START_PROCESS +DBMS_LOGREP_UTIL.STOP_PROCESS +DBMS_LOGREP_UTIL.STREAMS_TRANSACTION_PURGE +DBMS_LOGREP_UTIL.UNLOCK_PROCESS +DBMS_LOGREP_UTIL.UPDATE_DBNAME_MAPPING +DBMS_LOGREP_UTIL.WRAP_DQT +DBMS_LOGREP_UTIL.WRITE_ERROR +DBMS_LOGREP_UTIL.WRITE_TRACE +DBMS_LOGREP_UTIL.WRITE_TRACE_APT +DBMS_LOGREP_UTIL_INVOK. +DBMS_LOGREP_UTIL_INVOK.CHECK_BECOME_USER_PRIVILEGE +DBMS_LOGREP_UTIL_INVOK.CHECK_DV_STREAMS_ADMIN +DBMS_LOGSTDBY. +DBMS_LOGSTDBY.APPLY_SET +DBMS_LOGSTDBY.APPLY_UNSET +DBMS_LOGSTDBY.BUILD +DBMS_LOGSTDBY.DB_IS_LOGSTDBY +DBMS_LOGSTDBY.EDS_ADD_TABLE +DBMS_LOGSTDBY.EDS_EVOLVE_AUTOMATIC +DBMS_LOGSTDBY.EDS_EVOLVE_MANUAL +DBMS_LOGSTDBY.EDS_REMOVE_TABLE +DBMS_LOGSTDBY.INSTANTIATE_TABLE +DBMS_LOGSTDBY.IS_APPLY_SERVER +DBMS_LOGSTDBY.MAP_PRIMARY_SCN +DBMS_LOGSTDBY.PREPARE_FOR_NEW_PRIMARY +DBMS_LOGSTDBY.PURGE_SESSION +DBMS_LOGSTDBY.REBUILD +DBMS_LOGSTDBY.SET_TABLESPACE +DBMS_LOGSTDBY.SKIP +DBMS_LOGSTDBY.SKIP_ERROR +DBMS_LOGSTDBY.SKIP_TRANSACTION +DBMS_LOGSTDBY.UNSKIP +DBMS_LOGSTDBY.UNSKIP_ERROR +DBMS_LOGSTDBY.UNSKIP_TRANSACTION +DBMS_LOGSTDBY_CONTEXT. +DBMS_LOGSTDBY_CONTEXT.CLEAR_ALL_CONTEXT +DBMS_LOGSTDBY_CONTEXT.CLEAR_CONTEXT +DBMS_LOGSTDBY_CONTEXT.GET_CONTEXT +DBMS_LOGSTDBY_CONTEXT.SET_CONTEXT +DBMS_MACADM. +DBMS_MACADM.ADD_AUTH_TO_REALM +DBMS_MACADM.ADD_FACTOR_LINK +DBMS_MACADM.ADD_NLS_DATA +DBMS_MACADM.ADD_OBJECT_TO_REALM +DBMS_MACADM.ADD_POLICY_FACTOR +DBMS_MACADM.ADD_RULE_TO_RULE_SET +DBMS_MACADM.AUTHORIZE_DATAPUMP_USER +DBMS_MACADM.AUTHORIZE_DDL +DBMS_MACADM.AUTHORIZE_PROXY_USER +DBMS_MACADM.AUTHORIZE_SCHEDULER_USER +DBMS_MACADM.AUTHORIZE_TTS_USER +DBMS_MACADM.CHANGE_IDENTITY_FACTOR +DBMS_MACADM.CHANGE_IDENTITY_VALUE +DBMS_MACADM.CHECK_BACKUP_PARM_VARCHAR +DBMS_MACADM.CHECK_DB_FILE_PARM_VARCHAR +DBMS_MACADM.CHECK_DUMP_DEST_PARM_VARCHAR +DBMS_MACADM.CHECK_DYNRLS_PARM_VARCHAR +DBMS_MACADM.CHECK_O7_PARM_VARCHAR +DBMS_MACADM.CHECK_OPTIMIZER_PARM_VARCHAR +DBMS_MACADM.CHECK_PLSQL_PARM_VARCHAR +DBMS_MACADM.CHECK_SECURITY_PARM_VARCHAR +DBMS_MACADM.CHECK_SYS_SEC_PARM_VARCHAR +DBMS_MACADM.CHECK_TRIG_PARM_VARCHAR +DBMS_MACADM.CREATE_COMMAND_RULE +DBMS_MACADM.CREATE_DOMAIN_IDENTITY +DBMS_MACADM.CREATE_FACTOR +DBMS_MACADM.CREATE_FACTOR_TYPE +DBMS_MACADM.CREATE_IDENTITY +DBMS_MACADM.CREATE_IDENTITY_MAP +DBMS_MACADM.CREATE_MAC_POLICY +DBMS_MACADM.CREATE_POLICY_LABEL +DBMS_MACADM.CREATE_REALM +DBMS_MACADM.CREATE_ROLE +DBMS_MACADM.CREATE_RULE +DBMS_MACADM.CREATE_RULE_SET +DBMS_MACADM.DELETE_AUTH_FROM_REALM +DBMS_MACADM.DELETE_COMMAND_RULE +DBMS_MACADM.DELETE_FACTOR +DBMS_MACADM.DELETE_FACTOR_LINK +DBMS_MACADM.DELETE_FACTOR_TYPE +DBMS_MACADM.DELETE_IDENTITY +DBMS_MACADM.DELETE_IDENTITY_MAP +DBMS_MACADM.DELETE_MAC_POLICY_CASCADE +DBMS_MACADM.DELETE_OBJECT_FROM_REALM +DBMS_MACADM.DELETE_POLICY_FACTOR +DBMS_MACADM.DELETE_POLICY_LABEL +DBMS_MACADM.DELETE_REALM +DBMS_MACADM.DELETE_REALM_CASCADE +DBMS_MACADM.DELETE_ROLE +DBMS_MACADM.DELETE_RULE +DBMS_MACADM.DELETE_RULE_FROM_RULE_SET +DBMS_MACADM.DELETE_RULE_SET +DBMS_MACADM.DISABLE_DV +DBMS_MACADM.DISABLE_DV_DICTIONARY_ACCTS +DBMS_MACADM.DISABLE_DV_PATCH_ADMIN_AUDIT +DBMS_MACADM.DISABLE_EVENT +DBMS_MACADM.DISABLE_ORADEBUG +DBMS_MACADM.DROP_DOMAIN_IDENTITY +DBMS_MACADM.DV_SANITY_CHECK +DBMS_MACADM.ENABLE_DV +DBMS_MACADM.ENABLE_DV_DICTIONARY_ACCTS +DBMS_MACADM.ENABLE_DV_PATCH_ADMIN_AUDIT +DBMS_MACADM.ENABLE_EVENT +DBMS_MACADM.ENABLE_ORADEBUG +DBMS_MACADM.GET_DB_CHARSET +DBMS_MACADM.GET_INSTANCE_INFO +DBMS_MACADM.GET_ORA_LANG +DBMS_MACADM.GET_SESSION_INFO +DBMS_MACADM.IS_ALTER_USER_ALLOW_VARCHAR +DBMS_MACADM.IS_DROP_USER_ALLOW_VARCHAR +DBMS_MACADM.RENAME_FACTOR +DBMS_MACADM.RENAME_FACTOR_TYPE +DBMS_MACADM.RENAME_REALM +DBMS_MACADM.RENAME_ROLE +DBMS_MACADM.RENAME_RULE +DBMS_MACADM.RENAME_RULE_SET +DBMS_MACADM.SET_ORA_LANG_FROM_JAVA +DBMS_MACADM.SET_PRESERVE_CASE +DBMS_MACADM.UNAUTHORIZE_DATAPUMP_USER +DBMS_MACADM.UNAUTHORIZE_DDL +DBMS_MACADM.UNAUTHORIZE_PROXY_USER +DBMS_MACADM.UNAUTHORIZE_SCHEDULER_USER +DBMS_MACADM.UNAUTHORIZE_TTS_USER +DBMS_MACADM.UPDATE_COMMAND_RULE +DBMS_MACADM.UPDATE_FACTOR +DBMS_MACADM.UPDATE_FACTOR_TYPE +DBMS_MACADM.UPDATE_IDENTITY +DBMS_MACADM.UPDATE_MAC_POLICY +DBMS_MACADM.UPDATE_REALM +DBMS_MACADM.UPDATE_REALM_AUTH +DBMS_MACADM.UPDATE_ROLE +DBMS_MACADM.UPDATE_RULE +DBMS_MACADM.UPDATE_RULE_SET +DBMS_MACAUD. +DBMS_MACAUD.CREATE_ADMIN_AUDIT +DBMS_MACOLS. +DBMS_MACOLS.CREATE_MACOLS_CONTEXTS +DBMS_MACOLS.DROP_MACOLS_CONTEXTS +DBMS_MACOLS.INIT_SESSION +DBMS_MACOLS.LABEL_OF +DBMS_MACOLS.MIN_POLICY_LABEL_OF +DBMS_MACOLS.UPDATE_POLICY_LABEL_CONTEXT +DBMS_MACOLS_SESSION. +DBMS_MACOLS_SESSION.CAN_SET_LABEL +DBMS_MACOLS_SESSION.IS_MAC_LABEL_SET +DBMS_MACOLS_SESSION.IS_MAC_POLICY +DBMS_MACOLS_SESSION.LABEL_AUDIT_RAISE +DBMS_MACOLS_SESSION.RESTORE_DEFAULT_LABELS +DBMS_MACOLS_SESSION.SET_ACCESS_PROFILE +DBMS_MACOLS_SESSION.SET_POLICY_LABEL_CONTEXT +DBMS_MACOUT. +DBMS_MACOUT.DISABLE +DBMS_MACOUT.ENABLE +DBMS_MACOUT.GET_LINE +DBMS_MACOUT.GET_LINE_COUNT +DBMS_MACOUT.IS_ENABLED +DBMS_MACOUT.PL +DBMS_MACOUT.PUT_LINE +DBMS_MACSEC. +DBMS_MACSEC.GET_FACTOR +DBMS_MACSEC.GET_FACTOR_LABEL +DBMS_MACSEC.GET_TRUST_LEVEL +DBMS_MACSEC.IS_SECURE_APPLICATION_ROLE +DBMS_MACSEC.ROLE_IS_ENABLED +DBMS_MACSEC.SET_FACTOR +DBMS_MACSEC_FUNCTION. +DBMS_MACSEC_FUNCTION.CREATE_FACTOR_FUNCTION +DBMS_MACSEC_FUNCTION.DROP_FACTOR_FUNCTION +DBMS_MACSEC_FUNCTION.TO_ORACLE_IDENTIFIER +DBMS_MACSEC_ROLES. +DBMS_MACSEC_ROLES.CAN_SET_ROLE +DBMS_MACSEC_ROLES.SET_ROLE +DBMS_MACSEC_ROLE_ADMIN. +DBMS_MACSEC_ROLE_ADMIN.CREATE_ROLE +DBMS_MACSEC_ROLE_ADMIN.DROP_ROLE +DBMS_MACSEC_RULES. +DBMS_MACSEC_RULES.EVALUATE +DBMS_MACSEC_RULES.EVALUATE_TR +DBMS_MACSEC_RULES.EVALUATE_WR +DBMS_MACUTL. +DBMS_MACUTL.CHECK_DVSYS_DML_ALLOWED +DBMS_MACUTL.CHECK_FULL_DVAUTH +DBMS_MACUTL.CHECK_GOLDENGATE_ADMIN +DBMS_MACUTL.CHECK_GOLDENGATE_REDO_ACCESS +DBMS_MACUTL.CHECK_STREAMS_ADMIN +DBMS_MACUTL.CHECK_TAB_DVAUTH +DBMS_MACUTL.CHECK_TS_DVAUTH +DBMS_MACUTL.CHECK_XSTREAM_ADMIN +DBMS_MACUTL.DECODE_AUDIT_OPTIONS +DBMS_MACUTL.GET_CODE_ID +DBMS_MACUTL.GET_CODE_VALUE +DBMS_MACUTL.GET_DAY +DBMS_MACUTL.GET_EVENT_STATUS +DBMS_MACUTL.GET_FACTOR_CONTEXT +DBMS_MACUTL.GET_HOUR +DBMS_MACUTL.GET_MESSAGE_LABEL +DBMS_MACUTL.GET_MINUTE +DBMS_MACUTL.GET_MONTH +DBMS_MACUTL.GET_SECOND +DBMS_MACUTL.GET_SQL_TEXT +DBMS_MACUTL.GET_YEAR +DBMS_MACUTL.IN_CALL_STACK +DBMS_MACUTL.IS_ALPHA +DBMS_MACUTL.IS_DIGIT +DBMS_MACUTL.IS_DVSYS_OWNER +DBMS_MACUTL.IS_DV_ENABLED +DBMS_MACUTL.IS_DV_ENABLED_VARCHAR +DBMS_MACUTL.IS_OID_ENABLED_OLS +DBMS_MACUTL.IS_OLS_INSTALLED +DBMS_MACUTL.IS_OLS_INSTALLED_VARCHAR +DBMS_MACUTL.OLS_LDAP_USER +DBMS_MACUTL.RAISE_ERROR +DBMS_MACUTL.RAISE_UNAUTHORIZED_OPERATION +DBMS_MACUTL.TO_ORACLE_IDENTIFIER +DBMS_MACUTL.UNIQUE_USER +DBMS_MACUTL.USER_HAS_OBJECT_PRIVILEGE +DBMS_MACUTL.USER_HAS_ROLE +DBMS_MACUTL.USER_HAS_ROLE_VARCHAR +DBMS_MACUTL.USER_HAS_SYSTEM_PRIVILEGE +DBMS_MACUTL.USER_HAS_SYSTEM_PRIV_VARCHAR +DBMS_MAINT_GEN. +DBMS_MAINT_GEN.GENERATE_MAINT_TRIGGER +DBMS_MANAGEMENT_PACKS. +DBMS_MANAGEMENT_PACKS.CHECK_PACK_ENABLED +DBMS_MANAGEMENT_PACKS.MODIFY_AWR_SETTINGS +DBMS_MANAGEMENT_PACKS.PURGE +DBMS_MANAGEMENT_PACKS.PURGE_AWR +DBMS_MANAGEMENT_PACKS.REPORT +DBMS_METADATA. +DBMS_METADATA.ADD_TRANSFORM +DBMS_METADATA.CHECK_MATCH_TEMPLATE +DBMS_METADATA.CHECK_MATCH_TEMPLATE_LOB +DBMS_METADATA.CHECK_MATCH_TEMPLATE_PAR +DBMS_METADATA.CHECK_TYPE +DBMS_METADATA.CLOSE +DBMS_METADATA.CONVERT +DBMS_METADATA.CONVERT_TO_CANONICAL +DBMS_METADATA.FETCH_CLOB +DBMS_METADATA.FETCH_DDL +DBMS_METADATA.FETCH_DDL_TEXT +DBMS_METADATA.FETCH_OBJNUMS +DBMS_METADATA.FETCH_OBJNUMS_NAMES +DBMS_METADATA.FETCH_SORTED_OBJNUMS +DBMS_METADATA.FETCH_VAT_OBJNUMS +DBMS_METADATA.FETCH_XML +DBMS_METADATA.FETCH_XML_CLOB +DBMS_METADATA.FREE_CONTEXT_ENTRY +DBMS_METADATA.GET_ACTION_INSTANCE +DBMS_METADATA.GET_ACTION_SCHEMA +DBMS_METADATA.GET_ACTION_SYS +DBMS_METADATA.GET_CANONICAL_VSN +DBMS_METADATA.GET_CHECK_CONSTRAINT_NAME +DBMS_METADATA.GET_DDL +DBMS_METADATA.GET_DEPENDENT_DDL +DBMS_METADATA.GET_DEPENDENT_SXML +DBMS_METADATA.GET_DEPENDENT_XML +DBMS_METADATA.GET_DOMIDX_METADATA +DBMS_METADATA.GET_DPSTRM_MD +DBMS_METADATA.GET_EDITION +DBMS_METADATA.GET_EDITION_ID +DBMS_METADATA.GET_FK_CONSTRAINT_NAME +DBMS_METADATA.GET_GRANTED_DDL +DBMS_METADATA.GET_GRANTED_XML +DBMS_METADATA.GET_HASHCODE +DBMS_METADATA.GET_INDEX_INTCOL +DBMS_METADATA.GET_INDPART_TS +DBMS_METADATA.GET_JAVA_METADATA +DBMS_METADATA.GET_PARTN +DBMS_METADATA.GET_PLUGTS_BLK +DBMS_METADATA.GET_PREPOST_TABLE_ACT +DBMS_METADATA.GET_PROCOBJ +DBMS_METADATA.GET_PROCOBJ_GRANT +DBMS_METADATA.GET_QUERY +DBMS_METADATA.GET_STAT_COLNAME +DBMS_METADATA.GET_STAT_INDNAME +DBMS_METADATA.GET_SXML +DBMS_METADATA.GET_SXML_DDL +DBMS_METADATA.GET_SYSPRIVS +DBMS_METADATA.GET_VAT_TABLE_NAME +DBMS_METADATA.GET_VERSION +DBMS_METADATA.GET_XML +DBMS_METADATA.IN_TSNUM +DBMS_METADATA.IN_TSNUM_2 +DBMS_METADATA.IS_ATTR_VALID_ON_10 +DBMS_METADATA.IS_XDB_TRANS +DBMS_METADATA.NETWORK_CALLOUTS +DBMS_METADATA.NETWORK_FETCH_CLOB +DBMS_METADATA.NETWORK_FETCH_ERRORS +DBMS_METADATA.NETWORK_FETCH_PARSE +DBMS_METADATA.NETWORK_OPEN +DBMS_METADATA.NET_SET_DEBUG +DBMS_METADATA.OKTOEXP_2NDARY_TABLE +DBMS_METADATA.OPEN +DBMS_METADATA.OPENW +DBMS_METADATA.OPEN_GET_FK_CONSTRAINT_NAME +DBMS_METADATA.PARSE_CONDITION +DBMS_METADATA.PARSE_DEFAULT +DBMS_METADATA.PARSE_QUERY +DBMS_METADATA.PATCH_TYPEID +DBMS_METADATA.PUT +DBMS_METADATA.SET_COUNT +DBMS_METADATA.SET_DEBUG +DBMS_METADATA.SET_FILTER +DBMS_METADATA.SET_FK_CONSTRAINT_COL_PAIR +DBMS_METADATA.SET_PARAMETER +DBMS_METADATA.SET_PARSE_ITEM +DBMS_METADATA.SET_REMAP_PARAM +DBMS_METADATA.SET_TRANSFORM_PARAM +DBMS_METADATA.SET_VAT_TABLE_NAME +DBMS_METADATA.SET_XMLFORMAT +DBMS_METADATA.TRANSFORM_STRM +DBMS_METADATA_BUILD. +DBMS_METADATA_BUILD.CLOSE +DBMS_METADATA_BUILD.CREATE_FILTER +DBMS_METADATA_BUILD.CREATE_TYPE +DBMS_METADATA_BUILD.DROP_TYPE +DBMS_METADATA_BUILD.SET_DEBUG +DBMS_METADATA_BUILD.SET_DEBUG_PARAM +DBMS_METADATA_BUILD.SET_FILTER_PARAM +DBMS_METADATA_BUILD.SET_TYPE_PARAM +DBMS_METADATA_DIFF. +DBMS_METADATA_DIFF.ADD_DOCUMENT +DBMS_METADATA_DIFF.CLOSE +DBMS_METADATA_DIFF.COMPARE_ALTER +DBMS_METADATA_DIFF.COMPARE_ALTER_XML +DBMS_METADATA_DIFF.COMPARE_SXML +DBMS_METADATA_DIFF.FETCH_CLOB +DBMS_METADATA_DIFF.OPENC +DBMS_METADATA_DPBUILD. +DBMS_METADATA_DPBUILD.CREATE_DATABASE_EXPORT +DBMS_METADATA_DPBUILD.CREATE_SCHEMA_EXPORT +DBMS_METADATA_DPBUILD.CREATE_TABLE_EXPORT +DBMS_METADATA_DPBUILD.CREATE_TRANSPORTABLE_EXPORT +DBMS_METADATA_HACK. +DBMS_METADATA_HACK.CRE_DIR +DBMS_METADATA_HACK.CRE_XML_DIR +DBMS_METADATA_HACK.DELETESCHEMA +DBMS_METADATA_HACK.DROP_DIR +DBMS_METADATA_HACK.DROP_XML_DIR +DBMS_METADATA_HACK.GET_BFILE +DBMS_METADATA_HACK.GET_XML_BFILE +DBMS_METADATA_HACK.GET_XML_DIRNAME +DBMS_METADATA_HACK.LOAD_XSD +DBMS_METADATA_INT. +DBMS_METADATA_INT.ADD_TRANSFORM +DBMS_METADATA_INT.CLOSE +DBMS_METADATA_INT.COMPARE +DBMS_METADATA_INT.DO_PARSE_TRANSFORM +DBMS_METADATA_INT.DO_TRANSFORM +DBMS_METADATA_INT.GET_OBJECT_TYPE_INFO +DBMS_METADATA_INT.GET_PARSE_DELIM +DBMS_METADATA_INT.GET_QUERY +DBMS_METADATA_INT.GET_VIEW_FILTER_INPUTS +DBMS_METADATA_INT.GET_XML_INPUTS +DBMS_METADATA_INT.IS_ATTR_VALID_ON_10 +DBMS_METADATA_INT.MODIFY_VAT +DBMS_METADATA_INT.NEXT_OBJECT +DBMS_METADATA_INT.OPEN +DBMS_METADATA_INT.OPENC +DBMS_METADATA_INT.OPENW +DBMS_METADATA_INT.PRINT_CTXS +DBMS_METADATA_INT.SET_COUNT +DBMS_METADATA_INT.SET_DEBUG +DBMS_METADATA_INT.SET_FILTER +DBMS_METADATA_INT.SET_OBJECTS_FETCHED +DBMS_METADATA_INT.SET_PARSE_ITEM +DBMS_METADATA_INT.SET_REMAP_PARAM +DBMS_METADATA_INT.SET_TRANSFORM_PARAM +DBMS_METADATA_INT.SET_XMLFORMAT +DBMS_METADATA_UTIL. +DBMS_METADATA_UTIL.ARE_STYLESHEETS_LOADED +DBMS_METADATA_UTIL.BLOB2CLOB +DBMS_METADATA_UTIL.BLOCK_ESTIMATE +DBMS_METADATA_UTIL.BYTES_ALLOC +DBMS_METADATA_UTIL.CHECK_TYPE +DBMS_METADATA_UTIL.CONVERT_TO_CANONICAL +DBMS_METADATA_UTIL.DELETE_XMLSCHEMA +DBMS_METADATA_UTIL.FETCH_STAT +DBMS_METADATA_UTIL.FUNC_INDEX_DEFAULT +DBMS_METADATA_UTIL.FUNC_INDEX_DEFAULTC +DBMS_METADATA_UTIL.GET_ANC +DBMS_METADATA_UTIL.GET_ANYDATA_COLSET +DBMS_METADATA_UTIL.GET_ATTRNAME +DBMS_METADATA_UTIL.GET_ATTRNAME2 +DBMS_METADATA_UTIL.GET_AUDIT +DBMS_METADATA_UTIL.GET_AUDIT_DEFAULT +DBMS_METADATA_UTIL.GET_BASE_COL_NAME +DBMS_METADATA_UTIL.GET_BASE_COL_TYPE +DBMS_METADATA_UTIL.GET_BASE_INTCOL_NUM +DBMS_METADATA_UTIL.GET_CANONICAL_VSN +DBMS_METADATA_UTIL.GET_COL_PROPERTY +DBMS_METADATA_UTIL.GET_COMPAT_VSN +DBMS_METADATA_UTIL.GET_DB_VSN +DBMS_METADATA_UTIL.GET_EDITIONID +DBMS_METADATA_UTIL.GET_ENDIANNESS +DBMS_METADATA_UTIL.GET_FULLATTRNAME +DBMS_METADATA_UTIL.GET_INDEX_INTCOL +DBMS_METADATA_UTIL.GET_INDEX_INTCOL_PARSE +DBMS_METADATA_UTIL.GET_INDPART_TS +DBMS_METADATA_UTIL.GET_LATEST_VSN +DBMS_METADATA_UTIL.GET_LOB_PROPERTY +DBMS_METADATA_UTIL.GET_MARKER +DBMS_METADATA_UTIL.GET_OPEN_MODE +DBMS_METADATA_UTIL.GET_PART_LIST +DBMS_METADATA_UTIL.GET_PROCOBJ_ERRORS +DBMS_METADATA_UTIL.GET_REFRESH_ADD_DBA +DBMS_METADATA_UTIL.GET_REFRESH_ADD_USER +DBMS_METADATA_UTIL.GET_REFRESH_MAKE_DBA +DBMS_METADATA_UTIL.GET_REFRESH_MAKE_USER +DBMS_METADATA_UTIL.GET_SOURCE_LINES +DBMS_METADATA_UTIL.GET_STRM_MINVER +DBMS_METADATA_UTIL.GET_TABPART_TS +DBMS_METADATA_UTIL.GET_VERS_DPAPI +DBMS_METADATA_UTIL.GET_XMLCOLSET +DBMS_METADATA_UTIL.GET_XMLHIERARCHY +DBMS_METADATA_UTIL.GET_XMLTYPE_FMTS +DBMS_METADATA_UTIL.GLO +DBMS_METADATA_UTIL.HAS_TSTZ_COLS +DBMS_METADATA_UTIL.HAS_TSTZ_ELEMENTS +DBMS_METADATA_UTIL.ISXML +DBMS_METADATA_UTIL.IS_OMF +DBMS_METADATA_UTIL.IS_SCHEMANAME_EXISTS +DBMS_METADATA_UTIL.LOAD_STYLESHEETS +DBMS_METADATA_UTIL.LOAD_TEMP_TABLE +DBMS_METADATA_UTIL.LOAD_XSD +DBMS_METADATA_UTIL.LONG2CLOB +DBMS_METADATA_UTIL.LONG2VARCHAR +DBMS_METADATA_UTIL.LONG2VCMAX +DBMS_METADATA_UTIL.LONG2VCNT +DBMS_METADATA_UTIL.NULLTOCHR0 +DBMS_METADATA_UTIL.PARSE_CONDITION +DBMS_METADATA_UTIL.PARSE_DEFAULT +DBMS_METADATA_UTIL.PARSE_QUERY +DBMS_METADATA_UTIL.PARSE_TRIGGER_DEFINITION +DBMS_METADATA_UTIL.PATCH_TYPEID +DBMS_METADATA_UTIL.PUT_BOOL +DBMS_METADATA_UTIL.PUT_LINE +DBMS_METADATA_UTIL.REF_PAR_LEVEL +DBMS_METADATA_UTIL.REF_PAR_PARENT +DBMS_METADATA_UTIL.SAVE_PROCOBJ_ERRORS +DBMS_METADATA_UTIL.SET_BLOCK_ESTIMATE +DBMS_METADATA_UTIL.SET_DEBUG +DBMS_METADATA_UTIL.SET_FORCE_LOB_BE +DBMS_METADATA_UTIL.SET_FORCE_NO_ENCRYPT +DBMS_METADATA_UTIL.SET_VERS_DPAPI +DBMS_METADATA_UTIL.TABLE_TSNUM +DBMS_METADATA_UTIL.VSN2NUM +DBMS_METADATA_UTIL.WRITE_CLOB +DBMS_MONITOR. +DBMS_MONITOR.CLIENT_ID_STAT_DISABLE +DBMS_MONITOR.CLIENT_ID_STAT_ENABLE +DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE +DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE +DBMS_MONITOR.DATABASE_TRACE_DISABLE +DBMS_MONITOR.DATABASE_TRACE_ENABLE +DBMS_MONITOR.SERV_MOD_ACT_STAT_DISABLE +DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE +DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE +DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE +DBMS_MONITOR.SESSION_TRACE_DISABLE +DBMS_MONITOR.SESSION_TRACE_ENABLE +DBMS_NETWORK_ACL_ADMIN. +DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE +DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE +DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACL +DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE +DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACL +DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL +DBMS_NETWORK_ACL_ADMIN.ASSIGN_WALLET_ACL +DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE +DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID +DBMS_NETWORK_ACL_ADMIN.CREATE_ACL +DBMS_NETWORK_ACL_ADMIN.DELETE_PRIVILEGE +DBMS_NETWORK_ACL_ADMIN.DROP_ACL +DBMS_NETWORK_ACL_ADMIN.GET_HOST_ACLIDS +DBMS_NETWORK_ACL_ADMIN.GET_WALLET_ACLID +DBMS_NETWORK_ACL_ADMIN.INSTANCE_CALLOUT_IMP +DBMS_NETWORK_ACL_ADMIN.INSTANCE_EXPORT_ACTION +DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE +DBMS_NETWORK_ACL_ADMIN.REMOVE_WALLET_ACE +DBMS_NETWORK_ACL_ADMIN.SET_HOST_ACL +DBMS_NETWORK_ACL_ADMIN.SET_WALLET_ACL +DBMS_NETWORK_ACL_ADMIN.UNASSIGN_ACL +DBMS_NETWORK_ACL_ADMIN.UNASSIGN_WALLET_ACL +DBMS_NETWORK_ACL_UTILITY. +DBMS_NETWORK_ACL_UTILITY.CONTAINS_HOST +DBMS_NETWORK_ACL_UTILITY.DOMAINS +DBMS_NETWORK_ACL_UTILITY.DOMAIN_LEVEL +DBMS_NETWORK_ACL_UTILITY.EQUALS_HOST +DBMS_OBFUSCATION_TOOLKIT. +DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT +DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT +DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY +DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT +DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT +DBMS_OBFUSCATION_TOOLKIT.DESGETKEY +DBMS_OBFUSCATION_TOOLKIT.MD5 +DBMS_OBFUSCATION_TOOLKIT_FFI. +DBMS_OBFUSCATION_TOOLKIT_FFI.DES3DECRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.DES3ENCRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.DESDECRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.DESENCRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.GETKEY +DBMS_OBFUSCATION_TOOLKIT_FFI.MD5 +DBMS_OBJECTS_APPS_UTILS. +DBMS_OBJECTS_APPS_UTILS.OWNER_MIGRATE_UPDATE_HASHCODE +DBMS_OBJECTS_APPS_UTILS.OWNER_MIGRATE_UPDATE_TDO +DBMS_OBJECTS_APPS_UTILS.RECOMPILE_TYPES +DBMS_OBJECTS_APPS_UTILS.SPLIT_SOURCE +DBMS_OBJECTS_APPS_UTILS.UPDATE_TYPES +DBMS_OBJECTS_UTILS. +DBMS_OBJECTS_UTILS.DELETE_ORPHAN_TYPEIDCOLS +DBMS_OBJECTS_UTILS.FIX_KOTTD_IMAGES +DBMS_OBJECTS_UTILS.UPGRADE_DICT_IMAGE +DBMS_ODCI. +DBMS_ODCI.CLEANUP +DBMS_ODCI.ESTIMATE_CPU_UNITS +DBMS_ODCI.GETMETADATA +DBMS_ODCI.GETTABLENAMES +DBMS_ODCI.RESTOREREFCURSOR +DBMS_ODCI.SAVEREFCURSOR +DBMS_ODCI.UPGRADE_SECOBJ +DBMS_OFFLINE_INTERNAL. +DBMS_OFFLINE_INTERNAL.DISABLE_PROP_TO_EXISTING_SITES +DBMS_OFFLINE_INTERNAL.DISABLE_PROP_TO_SITE +DBMS_OFFLINE_INTERNAL.ENABLE_PROP_TO_EXISTING_SITES +DBMS_OFFLINE_INTERNAL.ENABLE_PROP_TO_SITE +DBMS_OFFLINE_INTERNAL.GET_MASTERS +DBMS_OFFLINE_OG. +DBMS_OFFLINE_OG.BEGIN_FLAVOR_CHANGE +DBMS_OFFLINE_OG.BEGIN_INSTANTIATION +DBMS_OFFLINE_OG.BEGIN_LOAD +DBMS_OFFLINE_OG.END_FLAVOR_CHANGE +DBMS_OFFLINE_OG.END_INSTANTIATION +DBMS_OFFLINE_OG.END_LOAD +DBMS_OFFLINE_OG.RESUME_SUBSET_OF_MASTERS +DBMS_OFFLINE_OG_INTERNAL. +DBMS_OFFLINE_OG_INTERNAL.BEGIN_FLAVOR_CHANGE +DBMS_OFFLINE_OG_INTERNAL.BEGIN_INSTANTIATION +DBMS_OFFLINE_OG_INTERNAL.BEGIN_LOAD +DBMS_OFFLINE_OG_INTERNAL.END_FLAVOR_CHANGE +DBMS_OFFLINE_OG_INTERNAL.END_INSTANTIATION +DBMS_OFFLINE_OG_INTERNAL.END_LOAD +DBMS_OFFLINE_OG_INTERNAL.RESUME_SUBSET_OF_MASTERS +DBMS_OFFLINE_RGT. +DBMS_OFFLINE_RGT.ADD_CONFLICT_OFFLINE +DBMS_OFFLINE_RGT.ADD_FLAVOR_OBJECT_OFFLINE +DBMS_OFFLINE_RGT.ADD_FLAVOR_OFFLINE +DBMS_OFFLINE_RGT.ADD_GROUPED_COLUMN_OFFLINE +DBMS_OFFLINE_RGT.ADD_INTERNAL_PKG +DBMS_OFFLINE_RGT.ADD_MASTER_OFFLINE +DBMS_OFFLINE_RGT.ADD_PARAMETER_COLUMN_OFFLINE +DBMS_OFFLINE_RGT.ADD_PRIORITY_GROUP_OFFLINE +DBMS_OFFLINE_RGT.ADD_PRIORITY_OFFLINE +DBMS_OFFLINE_RGT.ADD_REPCOLUMN_OFFLINE +DBMS_OFFLINE_RGT.ADD_REPOBJECT_OFFLINE +DBMS_OFFLINE_RGT.ADD_RESOLUTION_OFFLINE +DBMS_OFFLINE_RGT.ADD_SNAPMASTER_OFFLINE +DBMS_OFFLINE_RGT.UPDATE_COLUMN_ID_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL. +DBMS_OFFLINE_RGT_INTERNAL.ADD_CONFLICT_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_FLAVOR_OBJECT_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_FLAVOR_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_GROUPED_COLUMN_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_INTERNAL_PKG +DBMS_OFFLINE_RGT_INTERNAL.ADD_MASTER_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_PARAMETER_COLUMN_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_PRIORITY_GROUP_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_PRIORITY_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_REPCOLUMN_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_REPOBJECT_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_RESOLUTION_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.ADD_SNAPMASTER_OFFLINE +DBMS_OFFLINE_RGT_INTERNAL.UPDATE_COLUMN_ID_OFFLINE +DBMS_OFFLINE_SNAPSHOT. +DBMS_OFFLINE_SNAPSHOT.BEGIN_LOAD +DBMS_OFFLINE_SNAPSHOT.END_LOAD +DBMS_OFFLINE_SNAPSHOT_INTERNAL. +DBMS_OFFLINE_SNAPSHOT_INTERNAL.BEGIN_LOAD +DBMS_OFFLINE_SNAPSHOT_INTERNAL.END_LOAD +DBMS_OFFLINE_UTL. +DBMS_OFFLINE_UTL.DISABLE_TRIGGERS +DBMS_OFFLINE_UTL.ENABLE_TRIGGERS +DBMS_OFFLINE_UTL.LOAD_STRING_FROM_TAB +DBMS_OFFLINE_UTL.PRINT_MASTERS +DBMS_OFFLINE_UTL.PRINT_STRINGS +DBMS_OUTPUT. +DBMS_OUTPUT.DISABLE +DBMS_OUTPUT.ENABLE +DBMS_OUTPUT.GET_LINE +DBMS_OUTPUT.GET_LINES +DBMS_OUTPUT.NEW_LINE +DBMS_OUTPUT.PUT +DBMS_OUTPUT.PUT_LINE +DBMS_PARALLEL_EXECUTE. +DBMS_PARALLEL_EXECUTE.ADM_DROP_CHUNKS +DBMS_PARALLEL_EXECUTE.ADM_DROP_TASK +DBMS_PARALLEL_EXECUTE.ADM_STOP_TASK +DBMS_PARALLEL_EXECUTE.ADM_TASK_STATUS +DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_NUMBER_COL +DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_ROWID +DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_SQL +DBMS_PARALLEL_EXECUTE.CREATE_TASK +DBMS_PARALLEL_EXECUTE.DROP_CHUNKS +DBMS_PARALLEL_EXECUTE.DROP_TASK +DBMS_PARALLEL_EXECUTE.GENERATE_TASK_NAME +DBMS_PARALLEL_EXECUTE.GET_NUMBER_COL_CHUNK +DBMS_PARALLEL_EXECUTE.GET_ROWID_CHUNK +DBMS_PARALLEL_EXECUTE.PURGE_PROCESSED_CHUNKS +DBMS_PARALLEL_EXECUTE.RESUME_TASK +DBMS_PARALLEL_EXECUTE.RUN_INTERNAL_WORKER +DBMS_PARALLEL_EXECUTE.RUN_TASK +DBMS_PARALLEL_EXECUTE.SET_CHUNK_STATUS +DBMS_PARALLEL_EXECUTE.STOP_TASK +DBMS_PARALLEL_EXECUTE.TASK_STATUS +DBMS_PARALLEL_EXECUTE_INTERNAL. +DBMS_PARALLEL_EXECUTE_INTERNAL.ASSERT_CHUNK_EXISTS +DBMS_PARALLEL_EXECUTE_INTERNAL.ASSERT_TASK_EXISTS +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_CHUNKS_BY_NUMBER_COL +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_CHUNKS_BY_ROWID +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_CHUNKS_BY_SQL +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.DEFAULT_PARALLELISM +DBMS_PARALLEL_EXECUTE_INTERNAL.DROP_ALL_TASKS +DBMS_PARALLEL_EXECUTE_INTERNAL.DROP_CHUNKS +DBMS_PARALLEL_EXECUTE_INTERNAL.DROP_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.GENERATE_TASK_NAME +DBMS_PARALLEL_EXECUTE_INTERNAL.GET_RANGE +DBMS_PARALLEL_EXECUTE_INTERNAL.OWNER_NAME_TO_NUM +DBMS_PARALLEL_EXECUTE_INTERNAL.PURGE_PROCESSED_CHUNKS +DBMS_PARALLEL_EXECUTE_INTERNAL.READ_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.RUN_INTERNAL_WORKER +DBMS_PARALLEL_EXECUTE_INTERNAL.SEQ_NEXT_VAL +DBMS_PARALLEL_EXECUTE_INTERNAL.SET_CHUNK_STATUS +DBMS_PARALLEL_EXECUTE_INTERNAL.STOP_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.TASK_STATUS +DBMS_PARALLEL_EXECUTE_INTERNAL.UNASSIGN_CHUNKS +DBMS_PARALLEL_EXECUTE_INTERNAL.UPDATE_TASK +DBMS_PART. +DBMS_PART.CLEANUP_GIDX +DBMS_PART.CLEANUP_GIDX_INTERNAL +DBMS_PART.CLEANUP_ONLINE_OP +DBMS_PCLXUTIL. +DBMS_PCLXUTIL.BUILD_PART_INDEX +DBMS_PDB. +DBMS_PDB.CHECK_PLUG_COMPATIBILITY +DBMS_PDB.CLEANUP_TASK +DBMS_PDB.CREATEX$PERMANENTTABLES +DBMS_PDB.DESCRIBE +DBMS_PDB.DROPX$PERMANENTTABLES +DBMS_PDB.EXEC_AS_ORACLE_SCRIPT +DBMS_PDB.NONCDB_TO_PDB +DBMS_PDB.POPULATESYNCTABLE +DBMS_PDB.RECOVER +DBMS_PDB.SYNC_PDB +DBMS_PDB.UPDATE_CDBVW_STATS +DBMS_PDB.UPDATE_COMDATA_STATS +DBMS_PDB.UPDATE_OBJLINK_STATS +DBMS_PDB.UPDATE_VERSION +DBMS_PDB_EXEC_SQL. +DBMS_PDB_NUM. +DBMS_PERF. +DBMS_PERF.REPORT_ADDM_WATCHDOG_XML +DBMS_PERF.REPORT_PERFHUB +DBMS_PERF.REPORT_PERFHUB_XML +DBMS_PERF.REPORT_SESSION +DBMS_PERF.REPORT_SESSION_XML +DBMS_PERF.REPORT_SQL +DBMS_PERF.REPORT_SQL_XML +DBMS_PICKLER. +DBMS_PICKLER.GET_FORMAT +DBMS_PICKLER.GET_TYPE_SHAPE +DBMS_PICKLER.UPDATE_THROUGH_REF +DBMS_PIPE. +DBMS_PIPE.CREATE_PIPE +DBMS_PIPE.NEXT_ITEM_TYPE +DBMS_PIPE.PACK_MESSAGE +DBMS_PIPE.PACK_MESSAGE_RAW +DBMS_PIPE.PACK_MESSAGE_ROWID +DBMS_PIPE.PURGE +DBMS_PIPE.RECEIVE_MESSAGE +DBMS_PIPE.REMOVE_PIPE +DBMS_PIPE.RESET_BUFFER +DBMS_PIPE.SEND_MESSAGE +DBMS_PIPE.UNIQUE_SESSION_NAME +DBMS_PIPE.UNPACK_MESSAGE +DBMS_PIPE.UNPACK_MESSAGE_RAW +DBMS_PIPE.UNPACK_MESSAGE_ROWID +DBMS_PITR. +DBMS_PITR.ADJUSTCOMPATIBILITY +DBMS_PITR.BEGINEXPORT +DBMS_PITR.BEGINIMPORT +DBMS_PITR.BEGINTABLESPACE +DBMS_PITR.COMMITPITR +DBMS_PITR.DOFILEVERIFY +DBMS_PITR.ENDIMPORT +DBMS_PITR.ENDTABLESPACE +DBMS_PITR.GETLINE +DBMS_PITR.SELECTBLOCK +DBMS_PITR.SELECTTABLESPACE +DBMS_PLUGTS. +DBMS_PLUGTS.BEGINEXPORT +DBMS_PLUGTS.BEGINEXPTABLESPACE +DBMS_PLUGTS.BEGINIMPORT +DBMS_PLUGTS.BEGINIMPTABLESPACE +DBMS_PLUGTS.CHECKCOMPTYPE +DBMS_PLUGTS.CHECKDATAFILE +DBMS_PLUGTS.CHECKPLUGGABLE +DBMS_PLUGTS.CHECKUSER +DBMS_PLUGTS.COMMITPLUGGABLE +DBMS_PLUGTS.DPMODE +DBMS_PLUGTS.ENDIMPORT +DBMS_PLUGTS.ENDIMPTABLESPACE +DBMS_PLUGTS.GETLINE +DBMS_PLUGTS.GET_DB_CHAR_PROPERTIES +DBMS_PLUGTS.INIT +DBMS_PLUGTS.KCP_ACOMP +DBMS_PLUGTS.KCP_BEXP +DBMS_PLUGTS.KCP_CHECK_TTS_CHAR_SET_COMPAT +DBMS_PLUGTS.KCP_CHKCHAR +DBMS_PLUGTS.KCP_CHKXPLATFORM +DBMS_PLUGTS.KCP_CMT +DBMS_PLUGTS.KCP_GETCHAR +DBMS_PLUGTS.KCP_GETCOMP +DBMS_PLUGTS.KCP_GETFH +DBMS_PLUGTS.KCP_INIT +DBMS_PLUGTS.KCP_NEWTS +DBMS_PLUGTS.KCP_PLGDF +DBMS_PLUGTS.KCP_PLG_RECLAIM_SEGMENT +DBMS_PLUGTS.KCP_RDFH +DBMS_PLUGTS.MAPTS +DBMS_PLUGTS.MAPUSER +DBMS_PLUGTS.NEWDATAFILE +DBMS_PLUGTS.NEWTABLESPACE +DBMS_PLUGTS.PLUGGABLEUSER +DBMS_PLUGTS.RECLAIMTEMPSEGMENT +DBMS_PLUGTS.SB4_TO_UB4 +DBMS_PLUGTS.SELECTBLOCK +DBMS_PLUGTS.SENDTRACEMSG +DBMS_PLUGTS.SETDEBUG +DBMS_PLUGTS.TAB_FUNC +DBMS_PLUGTSP. +DBMS_PLUGTSP.KCP_PD +DBMS_PLUGTSP.KCP_PTMD +DBMS_PLUGTSP.PATCHDICTIONARY +DBMS_PLUGTSP.PATCHLOBPROP +DBMS_PLUGTSP.PATCHTABLEMETADATA +DBMS_PREDICTIVE_ANALYTICS. +DBMS_PREDICTIVE_ANALYTICS.EXPLAIN +DBMS_PREDICTIVE_ANALYTICS.PREDICT +DBMS_PREDICTIVE_ANALYTICS.PROFILE +DBMS_PREPROCESSOR. +DBMS_PREPROCESSOR.GET_POST_PROCESSED_SOURCE +DBMS_PREPROCESSOR.PRINT_POST_PROCESSED_SOURCE +DBMS_PREUP. +DBMS_PREUP.AAR_PRESENT_CHECK +DBMS_PREUP.AAR_PRESENT_FIXUP +DBMS_PREUP.AAR_PRESENT_GETHELP +DBMS_PREUP.AMD_EXISTS_CHECK +DBMS_PREUP.AMD_EXISTS_FIXUP +DBMS_PREUP.AMD_EXISTS_GETHELP +DBMS_PREUP.APEX_UPGRADE_MSG_CHECK +DBMS_PREUP.APEX_UPGRADE_MSG_FIXUP +DBMS_PREUP.APEX_UPGRADE_MSG_GETHELP +DBMS_PREUP.APPQOSSYS_USER_PRESENT_CHECK +DBMS_PREUP.APPQOSSYS_USER_PRESENT_FIXUP +DBMS_PREUP.APPQOSSYS_USER_PRESENT_GETHELP +DBMS_PREUP.AUDIT_RECORDS_RECOMMEND +DBMS_PREUP.AUDIT_VIEWER_CHECK +DBMS_PREUP.AUDIT_VIEWER_FIXUP +DBMS_PREUP.AUDIT_VIEWER_GETHELP +DBMS_PREUP.AUDSYS_USER_PRESENT_CHECK +DBMS_PREUP.AUDSYS_USER_PRESENT_FIXUP +DBMS_PREUP.AUDSYS_USER_PRESENT_GETHELP +DBMS_PREUP.AWR_DBIDS_PRESENT_CHECK +DBMS_PREUP.AWR_DBIDS_PRESENT_FIXUP +DBMS_PREUP.AWR_DBIDS_PRESENT_GETHELP +DBMS_PREUP.BEGIN_LOG_PREUPG_ACTION +DBMS_PREUP.CAPT_ADM_ROLE_PRESENT_CHECK +DBMS_PREUP.CAPT_ADM_ROLE_PRESENT_FIXUP +DBMS_PREUP.CAPT_ADM_ROLE_PRESENT_GETHELP +DBMS_PREUP.CLEAR_RUN_FLAG +DBMS_PREUP.CLOSE_FILE +DBMS_PREUP.COMPATIBLE_PARAMETER_CHECK +DBMS_PREUP.COMPATIBLE_PARAMETER_FIXUP +DBMS_PREUP.COMPATIBLE_PARAMETER_GETHELP +DBMS_PREUP.CONCAT_PDB_FILE +DBMS_PREUP.CONDITION_EXISTS +DBMS_PREUP.DBG_ALL_CHECKS +DBMS_PREUP.DBG_ALL_RESOURCES +DBMS_PREUP.DBG_CHECK +DBMS_PREUP.DBG_SPACE_RESOURCES +DBMS_PREUP.DBMS_LDAP_DEP_EXIST_CHECK +DBMS_PREUP.DBMS_LDAP_DEP_EXIST_FIXUP +DBMS_PREUP.DBMS_LDAP_DEP_EXIST_GETHELP +DBMS_PREUP.DEFAULT_PROCESS_COUNT_CHECK +DBMS_PREUP.DEFAULT_PROCESS_COUNT_FIXUP +DBMS_PREUP.DEFAULT_PROCESS_COUNT_GETHELP +DBMS_PREUP.DEFAULT_RESOURCE_LIMIT_CHECK +DBMS_PREUP.DEFAULT_RESOURCE_LIMIT_FIXUP +DBMS_PREUP.DEFAULT_RESOURCE_LIMIT_GETHELP +DBMS_PREUP.DICTIONARY_STATS_RECOMMEND +DBMS_PREUP.DISPLAYDIAGLINE +DBMS_PREUP.DISPLAYLINE +DBMS_PREUP.DISPLAY_CHECK_TEXT +DBMS_PREUP.DUMP_CHECK_REC +DBMS_PREUP.DV_ENABLED_CHECK +DBMS_PREUP.DV_ENABLED_FIXUP +DBMS_PREUP.DV_ENABLED_GETHELP +DBMS_PREUP.EMX_ALL_ROLE_PRESENT_CHECK +DBMS_PREUP.EMX_ALL_ROLE_PRESENT_FIXUP +DBMS_PREUP.EMX_ALL_ROLE_PRESENT_GETHELP +DBMS_PREUP.EMX_BASIC_ROLE_PRESENT_CHECK +DBMS_PREUP.EMX_BASIC_ROLE_PRESENT_FIXUP +DBMS_PREUP.EMX_BASIC_ROLE_PRESENT_GETHELP +DBMS_PREUP.EM_PRESENT_CHECK +DBMS_PREUP.EM_PRESENT_FIXUP +DBMS_PREUP.EM_PRESENT_GETHELP +DBMS_PREUP.ENABLED_INDEXES_TBL_CHECK +DBMS_PREUP.ENABLED_INDEXES_TBL_FIXUP +DBMS_PREUP.ENABLED_INDEXES_TBL_GETHELP +DBMS_PREUP.END_LOG_PREUPG_ACTION +DBMS_PREUP.END_PREUPGRD +DBMS_PREUP.END_XML_DOCUMENT +DBMS_PREUP.EXF_RUL_EXISTS_CHECK +DBMS_PREUP.EXF_RUL_EXISTS_FIXUP +DBMS_PREUP.EXF_RUL_EXISTS_GETHELP +DBMS_PREUP.FILES_BACKUP_MODE_CHECK +DBMS_PREUP.FILES_BACKUP_MODE_FIXUP +DBMS_PREUP.FILES_BACKUP_MODE_GETHELP +DBMS_PREUP.FILES_NEED_RECOVERY_CHECK +DBMS_PREUP.FILES_NEED_RECOVERY_FIXUP +DBMS_PREUP.FILES_NEED_RECOVERY_GETHELP +DBMS_PREUP.FIXED_OBJECTS_RECOMMEND +DBMS_PREUP.FIXUP_SUMMARY +DBMS_PREUP.GDS_CT_ROLE_PRESENT_CHECK +DBMS_PREUP.GDS_CT_ROLE_PRESENT_FIXUP +DBMS_PREUP.GDS_CT_ROLE_PRESENT_GETHELP +DBMS_PREUP.GET_CON_ID +DBMS_PREUP.GET_CON_NAME +DBMS_PREUP.GET_OUTPUT_PATH +DBMS_PREUP.GET_VERSION +DBMS_PREUP.GSMADMIN_ROLE_PRESENT_CHECK +DBMS_PREUP.GSMADMIN_ROLE_PRESENT_FIXUP +DBMS_PREUP.GSMADMIN_ROLE_PRESENT_GETHELP +DBMS_PREUP.GSMADM_INT_PRESENT_CHECK +DBMS_PREUP.GSMADM_INT_PRESENT_FIXUP +DBMS_PREUP.GSMADM_INT_PRESENT_GETHELP +DBMS_PREUP.GSMCATUSER_PRESENT_CHECK +DBMS_PREUP.GSMCATUSER_PRESENT_FIXUP +DBMS_PREUP.GSMCATUSER_PRESENT_GETHELP +DBMS_PREUP.GSMUSER_ROLE_PRESENT_CHECK +DBMS_PREUP.GSMUSER_ROLE_PRESENT_FIXUP +DBMS_PREUP.GSMUSER_ROLE_PRESENT_GETHELP +DBMS_PREUP.GSMUSER_USER_PRESENT_CHECK +DBMS_PREUP.GSMUSER_USER_PRESENT_FIXUP +DBMS_PREUP.GSMUSER_USER_PRESENT_GETHELP +DBMS_PREUP.GSM_PAD_ROLE_PRESENT_CHECK +DBMS_PREUP.GSM_PAD_ROLE_PRESENT_FIXUP +DBMS_PREUP.GSM_PAD_ROLE_PRESENT_GETHELP +DBMS_PREUP.HIDDEN_PARAMS_RECOMMEND +DBMS_PREUP.INVALID_LAF_CHECK +DBMS_PREUP.INVALID_LAF_FIXUP +DBMS_PREUP.INVALID_LAF_GETHELP +DBMS_PREUP.INVALID_OBJ_EXCLUDE +DBMS_PREUP.INVALID_OBJ_EXIST_CHECK +DBMS_PREUP.INVALID_OBJ_EXIST_FIXUP +DBMS_PREUP.INVALID_OBJ_EXIST_GETHELP +DBMS_PREUP.INVALID_SYS_TABLEDATA_CHECK +DBMS_PREUP.INVALID_SYS_TABLEDATA_FIXUP +DBMS_PREUP.INVALID_SYS_TABLEDATA_GETHELP +DBMS_PREUP.INVALID_USR_TABLEDATA_CHECK +DBMS_PREUP.INVALID_USR_TABLEDATA_FIXUP +DBMS_PREUP.INVALID_USR_TABLEDATA_GETHELP +DBMS_PREUP.IS_CON_ROOT +DBMS_PREUP.IS_DB_NONCDB +DBMS_PREUP.IS_DB_READONLY +DBMS_PREUP.JOB_QUEUE_PROCESS_CHECK +DBMS_PREUP.JOB_QUEUE_PROCESS_FIXUP +DBMS_PREUP.JOB_QUEUE_PROCESS_GETHELP +DBMS_PREUP.NACL_OBJECTS_EXIST_CHECK +DBMS_PREUP.NACL_OBJECTS_EXIST_FIXUP +DBMS_PREUP.NACL_OBJECTS_EXIST_GETHELP +DBMS_PREUP.NEW_TIME_ZONES_EXIST_CHECK +DBMS_PREUP.NEW_TIME_ZONES_EXIST_FIXUP +DBMS_PREUP.NEW_TIME_ZONES_EXIST_GETHELP +DBMS_PREUP.NOT_UPG_BY_STD_UPGRD_CHECK +DBMS_PREUP.NOT_UPG_BY_STD_UPGRD_FIXUP +DBMS_PREUP.NOT_UPG_BY_STD_UPGRD_GETHELP +DBMS_PREUP.OCM_USER_PRESENT_CHECK +DBMS_PREUP.OCM_USER_PRESENT_FIXUP +DBMS_PREUP.OCM_USER_PRESENT_GETHELP +DBMS_PREUP.OLD_TIME_ZONES_EXIST_CHECK +DBMS_PREUP.OLD_TIME_ZONES_EXIST_FIXUP +DBMS_PREUP.OLD_TIME_ZONES_EXIST_GETHELP +DBMS_PREUP.OLS_SYS_MOVE_CHECK +DBMS_PREUP.OLS_SYS_MOVE_FIXUP +DBMS_PREUP.OLS_SYS_MOVE_GETHELP +DBMS_PREUP.OPEN_CURSORS_CHECK +DBMS_PREUP.OPEN_CURSORS_FIXUP +DBMS_PREUP.OPEN_CURSORS_GETHELP +DBMS_PREUP.ORDIMAGEINDEX_CHECK +DBMS_PREUP.ORDIMAGEINDEX_FIXUP +DBMS_PREUP.ORDIMAGEINDEX_GETHELP +DBMS_PREUP.OUTPUT_CHECK_SUMMARY +DBMS_PREUP.OUTPUT_COMPONENTS +DBMS_PREUP.OUTPUT_FLASHBACK +DBMS_PREUP.OUTPUT_INITPARAMS +DBMS_PREUP.OUTPUT_PREUP_CHECKS +DBMS_PREUP.OUTPUT_PROLOG +DBMS_PREUP.OUTPUT_RECOMMENDATIONS +DBMS_PREUP.OUTPUT_RESOURCES +DBMS_PREUP.OUTPUT_RESULTS_LOCATION +DBMS_PREUP.OUTPUT_ROLLBACK_SEGS +DBMS_PREUP.OUTPUT_SUMMARY +DBMS_PREUP.OUTPUT_TABLESPACES +DBMS_PREUP.PARAMETERS_DISPLAY +DBMS_PREUP.PENDING_2PC_TXN_CHECK +DBMS_PREUP.PENDING_2PC_TXN_FIXUP +DBMS_PREUP.PENDING_2PC_TXN_GETHELP +DBMS_PREUP.PROVISIONER_PRESENT_CHECK +DBMS_PREUP.PROVISIONER_PRESENT_FIXUP +DBMS_PREUP.PROVISIONER_PRESENT_GETHELP +DBMS_PREUP.PURGE_RECYCLEBIN_CHECK +DBMS_PREUP.PURGE_RECYCLEBIN_FIXUP +DBMS_PREUP.PURGE_RECYCLEBIN_GETHELP +DBMS_PREUP.REMOTE_REDO_CHECK +DBMS_PREUP.REMOTE_REDO_FIXUP +DBMS_PREUP.REMOTE_REDO_GETHELP +DBMS_PREUP.REMOVE_DMSYS_CHECK +DBMS_PREUP.REMOVE_DMSYS_FIXUP +DBMS_PREUP.REMOVE_DMSYS_GETHELP +DBMS_PREUP.RUN_ALL_CHECKS +DBMS_PREUP.RUN_ALL_RECOMMEND +DBMS_PREUP.RUN_CHECK +DBMS_PREUP.RUN_CHECK_SIMPLE +DBMS_PREUP.RUN_FIXUP +DBMS_PREUP.RUN_FIXUP_AND_REPORT +DBMS_PREUP.RUN_FIXUP_INFO +DBMS_PREUP.RUN_RECOMMEND +DBMS_PREUP.SET_FIXUP_SCRIPTS +DBMS_PREUP.SET_OUTPUT_FILE +DBMS_PREUP.SET_OUTPUT_TYPE +DBMS_PREUP.START_XML_DOCUMENT +DBMS_PREUP.SYNC_STANDBY_DB_CHECK +DBMS_PREUP.SYNC_STANDBY_DB_FIXUP +DBMS_PREUP.SYNC_STANDBY_DB_GETHELP +DBMS_PREUP.SYSBACKUP_USER_PRESENT_CHECK +DBMS_PREUP.SYSBACKUP_USER_PRESENT_FIXUP +DBMS_PREUP.SYSBACKUP_USER_PRESENT_GETHELP +DBMS_PREUP.SYSDG_USER_PRESENT_CHECK +DBMS_PREUP.SYSDG_USER_PRESENT_FIXUP +DBMS_PREUP.SYSDG_USER_PRESENT_GETHELP +DBMS_PREUP.SYSKM_USER_PRESENT_CHECK +DBMS_PREUP.SYSKM_USER_PRESENT_FIXUP +DBMS_PREUP.SYSKM_USER_PRESENT_GETHELP +DBMS_PREUP.SYS_DEF_TABLESPACE_CHECK +DBMS_PREUP.SYS_DEF_TABLESPACE_FIXUP +DBMS_PREUP.SYS_DEF_TABLESPACE_GETHELP +DBMS_PREUP.TIME_ZONE_CHECK +DBMS_PREUP.TZ_FIXUP +DBMS_PREUP.ULTRASEARCH_DATA_CHECK +DBMS_PREUP.ULTRASEARCH_DATA_FIXUP +DBMS_PREUP.ULTRASEARCH_DATA_GETHELP +DBMS_PREUP.UNDERSCORE_EVENTS_RECOMMEND +DBMS_PREUP.UNSUPPORTED_VERSION_CHECK +DBMS_PREUP.UNSUPPORTED_VERSION_FIXUP +DBMS_PREUP.UNSUPPORTED_VERSION_GETHELP +DBMS_PREUP.WRITE_PDB_FILE +DBMS_PREUP.XBRL_VERSION_CHECK +DBMS_PREUP.XBRL_VERSION_FIXUP +DBMS_PREUP.XBRL_VERSION_GETHELP +DBMS_PREUP.XS_CACHE_ADMIN_CHECK +DBMS_PREUP.XS_CACHE_ADMIN_FIXUP +DBMS_PREUP.XS_CACHE_ADMIN_GETHELP +DBMS_PREUP.XS_NAMESPACE_ADMIN_CHECK +DBMS_PREUP.XS_NAMESPACE_ADMIN_FIXUP +DBMS_PREUP.XS_NAMESPACE_ADMIN_GETHELP +DBMS_PREUP.XS_RESOURCE_PRESENT_CHECK +DBMS_PREUP.XS_RESOURCE_PRESENT_FIXUP +DBMS_PREUP.XS_RESOURCE_PRESENT_GETHELP +DBMS_PREUP.XS_SESSION_ADMIN_CHECK +DBMS_PREUP.XS_SESSION_ADMIN_FIXUP +DBMS_PREUP.XS_SESSION_ADMIN_GETHELP +DBMS_PRIVILEGE_CAPTURE. +DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE +DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE +DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE +DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE +DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT +DBMS_PRIV_CAPTURE. +DBMS_PRIV_CAPTURE.CAPTURE_PRIVILEGE_USE +DBMS_PRIV_CAPTURE.HAS_OBJ_PRIV +DBMS_PRIV_CAPTURE.HAS_OBJ_PRIV_DIRECT +DBMS_PRIV_CAPTURE.HAS_OBJ_PRIV_DIRECT_ID +DBMS_PRIV_CAPTURE.HAS_OBJ_PRIV_ID +DBMS_PRIV_CAPTURE.HAS_ROLE_PRIV +DBMS_PRIV_CAPTURE.HAS_ROLE_PRIV_DIRECT +DBMS_PRIV_CAPTURE.HAS_ROLE_PRIV_DIRECT_ID +DBMS_PRIV_CAPTURE.HAS_ROLE_PRIV_ID +DBMS_PRIV_CAPTURE.HAS_SYS_PRIV +DBMS_PRIV_CAPTURE.HAS_SYS_PRIV_DIRECT +DBMS_PRIV_CAPTURE.HAS_SYS_PRIV_DIRECT_ID +DBMS_PRIV_CAPTURE.HAS_SYS_PRIV_ID +DBMS_PRIV_CAPTURE.SES_HAS_ROLE_PRIV +DBMS_PRIV_CAPTURE.SES_HAS_SYS_PRIV +DBMS_PROFILER. +DBMS_PROFILER.FLUSH_DATA +DBMS_PROFILER.GET_VERSION +DBMS_PROFILER.INTERNAL_VERSION_CHECK +DBMS_PROFILER.PAUSE_PROFILER +DBMS_PROFILER.RESUME_PROFILER +DBMS_PROFILER.ROLLUP_RUN +DBMS_PROFILER.ROLLUP_UNIT +DBMS_PROFILER.START_PROFILER +DBMS_PROFILER.STOP_PROFILER +DBMS_PROPAGATION_ADM. +DBMS_PROPAGATION_ADM.ALTER_PROPAGATION +DBMS_PROPAGATION_ADM.CREATE_PROPAGATION +DBMS_PROPAGATION_ADM.DROP_PROPAGATION +DBMS_PROPAGATION_ADM.START_PROPAGATION +DBMS_PROPAGATION_ADM.STOP_PROPAGATION +DBMS_PROPAGATION_INTERNAL. +DBMS_PROPAGATION_INTERNAL.ALTER_PROPAGATION +DBMS_PROPAGATION_INTERNAL.CLEAR_PROP_ABORT_ALERT +DBMS_PROPAGATION_INTERNAL.CREATE_PROPAGATION +DBMS_PROPAGATION_INTERNAL.DROP_PROPAGATION +DBMS_PROPAGATION_INTERNAL.RAISE_PROP_ABORTED_ALERT_JOBID +DBMS_PROPAGATION_INTERNAL.START_PROPAGATION +DBMS_PROPAGATION_INTERNAL.STOP_PROPAGATION +DBMS_PRVTAQIM. +DBMS_PRVTAQIM.AQ_PATCH_CMT_TIME +DBMS_PRVTAQIM.AQ_PATCH_DEQUEUELOG_TABLE +DBMS_PRVTAQIM.AQ_PATCH_HISTORY +DBMS_PRVTAQIM.AQ_PATCH_IOT +DBMS_PRVTAQIM.AQ_PATCH_SIGNATURE +DBMS_PRVTAQIM.AQ_PATCH_TIMEMGR +DBMS_PRVTAQIM.BUFQ_VIEW_PARAMS +DBMS_PRVTAQIM.COMPRESS_IOT +DBMS_PRVTAQIM.CREATE_BASE_VIEW +DBMS_PRVTAQIM.CREATE_BASE_VIEW10_1_0 +DBMS_PRVTAQIM.CREATE_BASE_VIEW11_1_0 +DBMS_PRVTAQIM.CREATE_BASE_VIEW11_2_0 +DBMS_PRVTAQIM.CREATE_BASE_VIEW_12C +DBMS_PRVTAQIM.CREATE_COMMIT_TIME_IOT +DBMS_PRVTAQIM.CREATE_DEQUEUE_IOT +DBMS_PRVTAQIM.CREATE_DEQUEUE_LOG +DBMS_PRVTAQIM.CREATE_DEQ_VIEW +DBMS_PRVTAQIM.CREATE_DEQ_VIEW_PRE11_2 +DBMS_PRVTAQIM.CREATE_HISTORY_IOT +DBMS_PRVTAQIM.CREATE_SIGNATURE_IOT +DBMS_PRVTAQIM.CREATE_TIMEMGMT_IOT +DBMS_PRVTAQIM.DOWNGRADE_QUEUE_TABLE +DBMS_PRVTAQIM.DROP_COMMIT_TIME_IOT +DBMS_PRVTAQIM.DROP_DEQUEUE_IOT +DBMS_PRVTAQIM.DROP_DEQUEUE_LOG +DBMS_PRVTAQIM.DROP_HISTORY_IOT +DBMS_PRVTAQIM.DROP_QUEUE +DBMS_PRVTAQIM.DROP_SIGNATURE_IOT +DBMS_PRVTAQIM.DROP_TIMEMGMT_IOT +DBMS_PRVTAQIM.UNCOMPRESS_IOT +DBMS_PRVTAQIM.UPDATE_IOT_MSG_ROWID +DBMS_PRVTAQIM.UPGRADE_QUEUE_TABLE +DBMS_PRVTAQIM.USER_DATA_COL +DBMS_PRVTAQIP. +DBMS_PRVTAQIP.ALTER_PROPAGATION_SCHEDULE +DBMS_PRVTAQIP.CREATE_PROP_TABLE_102 +DBMS_PRVTAQIP.CRT_XMLCMT_REQ +DBMS_PRVTAQIP.CRT_XMLRBK_REQ +DBMS_PRVTAQIP.CRT_XMLSEQ_REQ +DBMS_PRVTAQIP.CRT_XMLTYP_REQ +DBMS_PRVTAQIP.DEQ_NFY_QUEUE_102 +DBMS_PRVTAQIP.DISABLE_PROPAGATION_SCHEDULE +DBMS_PRVTAQIP.ENABLE_PROPAGATION_SCHEDULE +DBMS_PRVTAQIP.ENQ_NFY_QUEUE_102 +DBMS_PRVTAQIP.GET_SCHED_TYPE +DBMS_PRVTAQIP.GET_SEQNO_HTTP +DBMS_PRVTAQIP.HTTP_COMMIT +DBMS_PRVTAQIP.HTTP_PUSH +DBMS_PRVTAQIP.HTTP_ROLLBACK +DBMS_PRVTAQIP.IS_PROTO_SSL +DBMS_PRVTAQIP.I_UNSCHED_PROP +DBMS_PRVTAQIP.KWQP_3GL_MODPSENTRY +DBMS_PRVTAQIP.NEEDS_RECOVERY +DBMS_PRVTAQIP.RECOVER_PROPAGATION +DBMS_PRVTAQIP.RESUBMIT_JOBS_102 +DBMS_PRVTAQIP.SCHEDULE_PROPAGATION +DBMS_PRVTAQIP.TRANS_SCHED_INFO +DBMS_PRVTAQIP.TRUNCATE_PENDING_MESSAGES +DBMS_PRVTAQIP.TYPE_MATCHES +DBMS_PRVTAQIP.UPDATE_AQS_INSTANCE_102 +DBMS_PRVTAQIP.UPDATE_PROPJOB_AFFINITY_102 +DBMS_PRVTAQIP.UPDATE_SCHEDULE +DBMS_PRVTAQIP.UPDATE_SCHEDULE_CLEAR_ERROR +DBMS_PRVTAQIP.WRITE_REQUEST +DBMS_PRVTAQIP.WRITE_TRACE +DBMS_PRVTAQIS. +DBMS_PRVTAQIS.ADD_ADDRESS +DBMS_PRVTAQIS.ADD_PROXY +DBMS_PRVTAQIS.ADD_QUEUE_RULE +DBMS_PRVTAQIS.ADD_RCPT +DBMS_PRVTAQIS.ADD_RS_EXPDEP +DBMS_PRVTAQIS.ADD_SUBSCRIBER +DBMS_PRVTAQIS.ADD_SUBSCRIBER_RULE +DBMS_PRVTAQIS.ADD_TO_EXPDEP +DBMS_PRVTAQIS.AGENTID +DBMS_PRVTAQIS.AGENT_EXISTS +DBMS_PRVTAQIS.ALTER_SUBSCRIBER +DBMS_PRVTAQIS.AQ_PATCH_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.CANON_SUBTAB_RSNAME +DBMS_PRVTAQIS.CHECK_AGENT_NAME +DBMS_PRVTAQIS.CHK_SUB_ADD_BUFFER +DBMS_PRVTAQIS.CREATE_90_RULES_VIEW +DBMS_PRVTAQIS.CREATE_QTAB_EVCTX +DBMS_PRVTAQIS.CREATE_QUEUE_RULE_SET +DBMS_PRVTAQIS.CREATE_RULES_VIEW +DBMS_PRVTAQIS.CREATE_SUBSCRIBER_SEQUENCE +DBMS_PRVTAQIS.CREATE_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.CREATE_SUBSCRIBER_VIEW +DBMS_PRVTAQIS.DELETE_REMOVED_SUBSCRIBERS +DBMS_PRVTAQIS.DOWNGRADE_92_90 +DBMS_PRVTAQIS.DOWNGRADE_QT_RULESUB_MSGS +DBMS_PRVTAQIS.DOWNGRADE_RULESUB_MSGS +DBMS_PRVTAQIS.DOWNGRADE_RULE_FRM10I +DBMS_PRVTAQIS.DOWNGRADE_SUBSCRIBERS +DBMS_PRVTAQIS.DROP_QTAB_EVCTX +DBMS_PRVTAQIS.DROP_QUEUE_DEFAULT_RULESETS +DBMS_PRVTAQIS.DROP_QUEUE_NPRS +DBMS_PRVTAQIS.DROP_QUEUE_RULE +DBMS_PRVTAQIS.DROP_QUEUE_RULE_SET +DBMS_PRVTAQIS.DROP_QUEUE_SUBSCRIBERS +DBMS_PRVTAQIS.DROP_RULES_VIEW +DBMS_PRVTAQIS.DROP_SUBSCRIBER +DBMS_PRVTAQIS.DROP_SUBSCRIBER_SEQUENCE +DBMS_PRVTAQIS.DROP_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.DROP_SUBSCRIBER_VIEW +DBMS_PRVTAQIS.FIX_SUBSCRIBER_TABLES_2424746 +DBMS_PRVTAQIS.PATCH_PRE92_SUBSCRIBERS +DBMS_PRVTAQIS.PATCH_RSUB_EXPDEP +DBMS_PRVTAQIS.PATCH_RULESET_COLUMN +DBMS_PRVTAQIS.PATCH_SUBTAB_COLUMN +DBMS_PRVTAQIS.PATCH_SUBTAB_OPERATIONS +DBMS_PRVTAQIS.POPULATE_SYS_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.QTAB_ADD_BUFFER +DBMS_PRVTAQIS.QUEUE_SUBSCRIBERS +DBMS_PRVTAQIS.RULE_SUBSCRIBERS_EXIST +DBMS_PRVTAQIS.SUBID_REPLICATE +DBMS_PRVTAQIS.UPDATE_SUBTAB_ADDR +DBMS_PRVTAQIS.UPGRADE_90_92 +DBMS_PRVTAQIS.UPGRADE_QT_RULESUB_MSGS +DBMS_PRVTAQIS.UPGRADE_RULESUB_MSGS +DBMS_PRVTAQIS.UPGRADE_RULE_10I +DBMS_PRVTAQIS.UPGRADE_SUBSCRIBERS +DBMS_PRVTRMIE. +DBMS_PRVTRMIE.APPEND_BOOLEAN_ARG +DBMS_PRVTRMIE.APPEND_NUMBER_ARG +DBMS_PRVTRMIE.APPEND_STRING_ARG +DBMS_PRVTRMIE.BEGIN_PROCEDURE_EXPORT +DBMS_PRVTRMIE.CACHE_OBJ_GRANTS +DBMS_PRVTRMIE.CHECK_COMPATIBILITY +DBMS_PRVTRMIE.CLEAR_OBJ_GRANTS +DBMS_PRVTRMIE.END_PROCEDURE_EXPORT +DBMS_PRVTRMIE.GET_CONSUMER_GRP +DBMS_PRVTRMIE.GET_GROUP_MAPPINGS +DBMS_PRVTRMIE.GET_MAPPING_PRIORITY +DBMS_PRVTRMIE.GET_OBJ_GRANTS +DBMS_PRVTRMIE.GET_PLAN_DIRECTIVES +DBMS_PRVTRMIE.GET_RESOURCE_PLAN +DBMS_PRVTRMIE.IS_SYS_MANAGED +DBMS_PRVTRMIE.WRAP_WITH_ERROR_HANDLING +DBMS_PRVTRMIE.WRAP_WITH_EXECUTE_IMMEDIATE +DBMS_PRVTSQDS. +DBMS_PRVTSQDS.ADDQUERULE +DBMS_PRVTSQDS.ALTERSUBRULE +DBMS_PRVTSQDS.CHECKANDDROPRULE +DBMS_PRVTSQDS.CHECKDUPLRULECOND +DBMS_PRVTSQDS.CREATEEXPIMPDEP +DBMS_PRVTSQDS.CREATESQRULESET +DBMS_PRVTSQDS.CREATETMT +DBMS_PRVTSQDS.CREATE_RULE_SEQUENCE +DBMS_PRVTSQDS.DROPQUERULE +DBMS_PRVTSQDS.DROPTMT +DBMS_PRVTSQDS.DROP_RULE_SEQUENCE +DBMS_PRVTSQDS.GETNUMQUESAMERULE +DBMS_PRVTSQDS.GETOBJNUMBER +DBMS_PRVTSQDS.GETQUEUERULESET +DBMS_PRVTSQIS. +DBMS_PRVTSQIS.ADD_DURABLE_SUB +DBMS_PRVTSQIS.ADD_NON_DURABLE_SUB +DBMS_PRVTSQIS.ADD_SUBSCRIBER_12G +DBMS_PRVTSQIS.AGENT_EXISTS +DBMS_PRVTSQIS.ALTER_SUBSCRIBER_12G +DBMS_PRVTSQIS.CREATE_SUBSCRIBER_VIEW +DBMS_PRVTSQIS.DROP_SUBSCRIBER_VIEW +DBMS_PRVTSQIS.DURABLE_SUB_EXISTS +DBMS_PRVTSQIS.GETDURSUBMETADATA +DBMS_PRVTSQIS.NON_DURABLE_SUB_EXISTS +DBMS_PRVTSQIS.REMOVE_SUBSCRIBER_12G +DBMS_PRVTSQIS.SUBMATCH +DBMS_PRVTSQIS.SUBSCRIPTION_EXISTS +DBMS_PRVT_TRACE. +DBMS_PRVT_TRACE.FORCE_VERBOSE +DBMS_PRVT_TRACE.SET_TRACE_EVENT +DBMS_PRVT_TRACE.TRACE +DBMS_PRVT_TRACE.TRACE_ENTER_PROCEDURE +DBMS_PRVT_TRACE.TRACE_EXIT_PROCEDURE +DBMS_PRVT_TRACE.TRACE_EXPRESSION +DBMS_PRVT_TRACE.TRACE_LONG_EXPRESSION +DBMS_PRVT_TRACE.TRACE_PRINT_EXCEPTION +DBMS_PRVT_TRACE.TRACE_RAISE_EXCEPTION +DBMS_PRVT_TRACE.UNFORCE_VERBOSE +DBMS_PSP. +DBMS_PSP.ADD_IN_MEMORY_PAGE +DBMS_PSP.ADD_IN_MEMORY_PAGES +DBMS_PSP.CLEAR_IN_MEMORY_PAGES +DBMS_PSP.COMPILE_PAGE +DBMS_PSP.COMPILE_PAGES +DBMS_PSP.SET_DOCUMENT_TABLE +DBMS_PSWMG_IMPORT. +DBMS_PSWMG_IMPORT.IMPORT_HISTORY +DBMS_PSWMG_IMPORT.IMPORT_PSW_VERIFY_FN +DBMS_PSWMG_IMPORT.PURGE_HISTORY +DBMS_QOPATCH. +DBMS_QOPATCH.ADD_OINV_JOB +DBMS_QOPATCH.CONFIG_OINV_JOBS +DBMS_QOPATCH.DROP_OINV_JOB +DBMS_QOPATCH.GET_OPATCH_BUGS +DBMS_QOPATCH.GET_OPATCH_COUNT +DBMS_QOPATCH.GET_OPATCH_DATA +DBMS_QOPATCH.GET_OPATCH_FILES +DBMS_QOPATCH.GET_OPATCH_INSTALL_INFO +DBMS_QOPATCH.GET_OPATCH_LIST +DBMS_QOPATCH.GET_OPATCH_LSINVENTORY +DBMS_QOPATCH.GET_OPATCH_OLAYS +DBMS_QOPATCH.GET_OPATCH_PREQS +DBMS_QOPATCH.GET_OPATCH_XSLT +DBMS_QOPATCH.GET_PENDING_ACTIVITY +DBMS_QOPATCH.GET_SQLPATCH_STATUS +DBMS_QOPATCH.IS_PATCH_INSTALLED +DBMS_QOPATCH.OPATCH_INV_REFRESH_JOB +DBMS_QOPATCH.OPATCH_RUN_JOB +DBMS_QOPATCH.PATCH_CONFLICT_DETECTION +DBMS_QOPATCH.REFRESH_OPATCH_DATA +DBMS_QOPATCH.REPLACE_DIRS_INT +DBMS_QOPATCH.REPLACE_LOGSCRPT_DIRS +DBMS_QOPATCH.SET_CURRENT_OPINST +DBMS_QOPATCH.SET_DEBUG +DBMS_QOPATCH.SKIP_SANITY_CHECK +DBMS_RANDOM. +DBMS_RANDOM.INITIALIZE +DBMS_RANDOM.NORMAL +DBMS_RANDOM.RANDOM +DBMS_RANDOM.RECORD_RANDOM_NUMBER +DBMS_RANDOM.REPLAY_RANDOM_NUMBER +DBMS_RANDOM.SEED +DBMS_RANDOM.STRING +DBMS_RANDOM.TERMINATE +DBMS_RANDOM.VALUE +DBMS_RAT_MASK. +DBMS_RAT_MASK.AWR_PURGE_BINDS +DBMS_RAT_MASK.CLEANUP_MASKING +DBMS_RAT_MASK.DBR_EXTRACT_DATA +DBMS_RAT_MASK.DBR_MASK_DATA +DBMS_RAT_MASK.GET_RAT_VERSION +DBMS_RAT_MASK.INITIALIZE_MASKING +DBMS_RAT_MASK.REMOVE_SPA_PEEKED_BINDS +DBMS_RAT_MASK.SPA_EXTRACT_DATA +DBMS_RAT_MASK.SPA_MASK_DATA +DBMS_RCVMAN. +DBMS_RCVMAN.BMRADDCORRUPTTABLE +DBMS_RCVMAN.CLRSITENAME +DBMS_RCVMAN.COMPUTERECOVERYACTIONS +DBMS_RCVMAN.CREATEFAILURELIST +DBMS_RCVMAN.DBUNIQUENAMEISSTANDBY +DBMS_RCVMAN.DUMPPKGSTATE +DBMS_RCVMAN.DUMPSTATE +DBMS_RCVMAN.FINDARCHIVEDLOGBACKUP +DBMS_RCVMAN.FINDCONTROLFILEBACKUP +DBMS_RCVMAN.FINDLOGBREAKPOINT +DBMS_RCVMAN.FINDOFFLINERANGECOPY +DBMS_RCVMAN.FINDRANGEARCHIVEDLOGBACKUP +DBMS_RCVMAN.FINDSPFILEBACKUP +DBMS_RCVMAN.FINDVALIDBACKUPSET +DBMS_RCVMAN.GETACTUALDBINC +DBMS_RCVMAN.GETALBACKUPHISTORY +DBMS_RCVMAN.GETALLBACKUPSET +DBMS_RCVMAN.GETAPPLIEDAL +DBMS_RCVMAN.GETAPPLIEDSCN +DBMS_RCVMAN.GETARCHIVEDLOG +DBMS_RCVMAN.GETARCHIVEDLOGBACKUP +DBMS_RCVMAN.GETARCHIVEDNEXTSCN +DBMS_RCVMAN.GETBACKEDUPFILES +DBMS_RCVMAN.GETBACKUPHISTORY +DBMS_RCVMAN.GETBACKUPPIECE +DBMS_RCVMAN.GETBSBACKUPHISTORY +DBMS_RCVMAN.GETCHECKPOINT +DBMS_RCVMAN.GETCLONENAME +DBMS_RCVMAN.GETCONFIG +DBMS_RCVMAN.GETCONTROLFILEBACKUP +DBMS_RCVMAN.GETCONTROLFILECOPY +DBMS_RCVMAN.GETCOPYOFDATAFILE +DBMS_RCVMAN.GETCURRENTINCARNATION +DBMS_RCVMAN.GETDATAFILE +DBMS_RCVMAN.GETDATAFILECOPY +DBMS_RCVMAN.GETDBKEY +DBMS_RCVMAN.GETDBUNIQUENAME +DBMS_RCVMAN.GETDCBACKUPHISTORY +DBMS_RCVMAN.GETDFBACKUPHISTORY +DBMS_RCVMAN.GETDROPOSFILES +DBMS_RCVMAN.GETDROPSCN +DBMS_RCVMAN.GETENCRYPTTSCOUNT +DBMS_RCVMAN.GETFAILURE +DBMS_RCVMAN.GETINCARNATIONKEY +DBMS_RCVMAN.GETINCREMENTALSCN +DBMS_RCVMAN.GETMANUALREPAIR +DBMS_RCVMAN.GETMAXCOPYNO +DBMS_RCVMAN.GETMAXREDOSCN +DBMS_RCVMAN.GETMAXSCN +DBMS_RCVMAN.GETNEXTAVAILABLESCN +DBMS_RCVMAN.GETOFFLINERANGECOPY +DBMS_RCVMAN.GETONLINELOG +DBMS_RCVMAN.GETPACKAGEVERSION +DBMS_RCVMAN.GETPARENTINCARNATION +DBMS_RCVMAN.GETPRIMARYDFNAME +DBMS_RCVMAN.GETPROXYCOPY +DBMS_RCVMAN.GETRCVREC +DBMS_RCVMAN.GETRECOVERYACTION +DBMS_RCVMAN.GETREDOLOGDELETIONPOLICY +DBMS_RCVMAN.GETREPAIR +DBMS_RCVMAN.GETREPAIROPTION +DBMS_RCVMAN.GETREPAIRPARMS +DBMS_RCVMAN.GETREPAIRSCRIPTNAME +DBMS_RCVMAN.GETREPAIRSTEP +DBMS_RCVMAN.GETREQUIREDSCN +DBMS_RCVMAN.GETRESTOREPOINT +DBMS_RCVMAN.GETRESTORERANGESET +DBMS_RCVMAN.GETRETENTIONPOLICY +DBMS_RCVMAN.GETSCNFORAPPLIEDPOLICY +DBMS_RCVMAN.GETSITEKEY +DBMS_RCVMAN.GETSITENAME +DBMS_RCVMAN.GETSPACERECL +DBMS_RCVMAN.GETSPFILEBACKUP +DBMS_RCVMAN.GETTEMPFILE +DBMS_RCVMAN.GETUNTILSCN +DBMS_RCVMAN.GETUNTILTIME +DBMS_RCVMAN.GETVALIDBACKUPSET +DBMS_RCVMAN.INITIALIZE +DBMS_RCVMAN.ISARCHIVEDLOGMISSING +DBMS_RCVMAN.ISBACKUPTYPEMATCH +DBMS_RCVMAN.ISBSRECCACHEMATCH +DBMS_RCVMAN.ISDEVICETYPEALLOCATED +DBMS_RCVMAN.ISINFAILURELIST +DBMS_RCVMAN.ISPDBSCNORPHAN +DBMS_RCVMAN.ISRECLRECID +DBMS_RCVMAN.ISSTATUSMATCH +DBMS_RCVMAN.ISTRANSLATEDDBID +DBMS_RCVMAN.ISTRANSLATEDFNO +DBMS_RCVMAN.ISTRANSLATEDPDBID +DBMS_RCVMAN.LISTBACKUP +DBMS_RCVMAN.LISTGETARCHIVEDLOGBACKUP +DBMS_RCVMAN.LISTGETARCHIVEDLOGCOPY +DBMS_RCVMAN.LISTGETBACKUPSETFILES +DBMS_RCVMAN.LISTGETCONTROLFILEBACKUP +DBMS_RCVMAN.LISTGETCONTROLFILECOPY +DBMS_RCVMAN.LISTGETDATAFILEBACKUP +DBMS_RCVMAN.LISTGETDATAFILECOPY +DBMS_RCVMAN.LISTGETDBINCARNATION +DBMS_RCVMAN.LISTGETDBSITE +DBMS_RCVMAN.LISTGETPROXYARCHIVEDLOG +DBMS_RCVMAN.LISTGETPROXYDATAFILE +DBMS_RCVMAN.LISTGETRESTOREPOINT +DBMS_RCVMAN.LISTGETSPFILEBACKUP +DBMS_RCVMAN.LISTGETTABLESPACE +DBMS_RCVMAN.LISTROLLBACKSEGTABLESPACE +DBMS_RCVMAN.LISTTRANSLATEARCHIVEDLOGBACKUP +DBMS_RCVMAN.LISTTRANSLATEARCHIVEDLOGCOPY +DBMS_RCVMAN.LISTTRANSLATEBACKUPSETFILES +DBMS_RCVMAN.LISTTRANSLATECONTROLFILEBACKUP +DBMS_RCVMAN.LISTTRANSLATECONTROLFILECOPY +DBMS_RCVMAN.LISTTRANSLATEDATAFILEBACKUP +DBMS_RCVMAN.LISTTRANSLATEDATAFILECOPY +DBMS_RCVMAN.LISTTRANSLATEDBINCARNATION +DBMS_RCVMAN.LISTTRANSLATEDBSITE +DBMS_RCVMAN.LISTTRANSLATEPROXYARCHIVEDLOG +DBMS_RCVMAN.LISTTRANSLATEPROXYDATAFILE +DBMS_RCVMAN.LISTTRANSLATEPROXYDFRECID +DBMS_RCVMAN.LISTTRANSLATERESTOREPOINT +DBMS_RCVMAN.LISTTRANSLATESPFILEBACKUP +DBMS_RCVMAN.NUM2DISPLAYSIZE +DBMS_RCVMAN.PRINTRECOVERYACTIONS +DBMS_RCVMAN.REPORTGETDFDEL +DBMS_RCVMAN.REPORTTRANSLATEDFDEL +DBMS_RCVMAN.RESETALL +DBMS_RCVMAN.RESETDBKEY +DBMS_RCVMAN.RESETDEVICETYPE +DBMS_RCVMAN.RESETPDBIDLIST +DBMS_RCVMAN.RESETRECLRECID +DBMS_RCVMAN.RESETRESTORERANGEDEVTYP +DBMS_RCVMAN.RESETTHISBACKUPAGE +DBMS_RCVMAN.RESETUNTIL +DBMS_RCVMAN.SEC2DISPLAYTIME +DBMS_RCVMAN.SETALLFLAG +DBMS_RCVMAN.SETALLINCARNATIONS +DBMS_RCVMAN.SETARCHIVEDLOGRECORD +DBMS_RCVMAN.SETARCHIVEFILESCOPEATTRIBUTES +DBMS_RCVMAN.SETBACKUPFILESCOPEATTRIBUTES +DBMS_RCVMAN.SETCANAPPLYANYREDO +DBMS_RCVMAN.SETCANCONVERTCF +DBMS_RCVMAN.SETCANHANDLETRANSPORTABLETBS +DBMS_RCVMAN.SETCOMPLETEDRANGE +DBMS_RCVMAN.SETCOMPUTERECOVERYACTIONMASKS +DBMS_RCVMAN.SETDATABASE +DBMS_RCVMAN.SETDBIDTRANSCLAUSE +DBMS_RCVMAN.SETDBINCKEY +DBMS_RCVMAN.SETDEBUGOFF +DBMS_RCVMAN.SETDEBUGON +DBMS_RCVMAN.SETDEVICETYPE +DBMS_RCVMAN.SETDEVICETYPEANY +DBMS_RCVMAN.SETFROM +DBMS_RCVMAN.SETGETSINCELASTBACKEDAL +DBMS_RCVMAN.SETLIKEPATTERN +DBMS_RCVMAN.SETNEEDOBSOLETEDATA +DBMS_RCVMAN.SETORSFILE +DBMS_RCVMAN.SETPDBID +DBMS_RCVMAN.SETRAFLAGS +DBMS_RCVMAN.SETRCVRECBACKUPAGE +DBMS_RCVMAN.SETRECLRECID +DBMS_RCVMAN.SETRECOVERYDESTFILE +DBMS_RCVMAN.SETREDOLOGDELETIONPOLICY +DBMS_RCVMAN.SETRESTORERANGEDEVTYP +DBMS_RCVMAN.SETSITENAME +DBMS_RCVMAN.SETSTANDBY +DBMS_RCVMAN.SETTAG +DBMS_RCVMAN.SETTOLOG +DBMS_RCVMAN.SETUNTILLOG +DBMS_RCVMAN.SETUNTILRESETLOGS +DBMS_RCVMAN.SETUNTILSCN +DBMS_RCVMAN.SETUNTILTIME +DBMS_RCVMAN.SET_PACKAGE_CONSTANTS +DBMS_RCVMAN.SKIPTABLESPACE +DBMS_RCVMAN.STAMP2DATE +DBMS_RCVMAN.SV_GETSESSIONFROMTIMERANGE +DBMS_RCVMAN.SV_GETSESSIONKEY +DBMS_RCVMAN.SV_GETSESSIONUNTILTIMERANGE +DBMS_RCVMAN.SV_SETSESSIONKEY +DBMS_RCVMAN.SV_SETSESSIONTIMERANGE +DBMS_RCVMAN.TRANSLATEALLBACKUPSET +DBMS_RCVMAN.TRANSLATEALLDATAFILE +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGCANCEL +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGKEY +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGNAME +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGPATTERN +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGSCNRANGE +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGSEQRANGE +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGTIMERANGE +DBMS_RCVMAN.TRANSLATEBACKUPFILE +DBMS_RCVMAN.TRANSLATEBACKUPPIECEBSKEY +DBMS_RCVMAN.TRANSLATEBACKUPPIECEHANDLE +DBMS_RCVMAN.TRANSLATEBACKUPPIECEKEY +DBMS_RCVMAN.TRANSLATEBACKUPPIECETAG +DBMS_RCVMAN.TRANSLATEBACKUPSETKEY +DBMS_RCVMAN.TRANSLATEBACKUPSETRECID +DBMS_RCVMAN.TRANSLATEBPBSKEYCANCEL +DBMS_RCVMAN.TRANSLATECONTROLFILECOPYKEY +DBMS_RCVMAN.TRANSLATECONTROLFILECOPYNAME +DBMS_RCVMAN.TRANSLATECONTROLFILECOPYTAG +DBMS_RCVMAN.TRANSLATECORRUPTLIST +DBMS_RCVMAN.TRANSLATEDATABASE +DBMS_RCVMAN.TRANSLATEDATAFILE +DBMS_RCVMAN.TRANSLATEDATAFILECANCEL +DBMS_RCVMAN.TRANSLATEDATAFILECOPY +DBMS_RCVMAN.TRANSLATEDATAFILECOPYFNO +DBMS_RCVMAN.TRANSLATEDATAFILECOPYKEY +DBMS_RCVMAN.TRANSLATEDATAFILECOPYNAME +DBMS_RCVMAN.TRANSLATEDATAFILECOPYTAG +DBMS_RCVMAN.TRANSLATEFAILURE +DBMS_RCVMAN.TRANSLATEMANUALREPAIR +DBMS_RCVMAN.TRANSLATEONLINELOGS +DBMS_RCVMAN.TRANSLATEPDB2NAME +DBMS_RCVMAN.TRANSLATEPDBNAME +DBMS_RCVMAN.TRANSLATEPROXYCOPYHANDLE +DBMS_RCVMAN.TRANSLATEPROXYCOPYKEY +DBMS_RCVMAN.TRANSLATEPROXYCOPYTAG +DBMS_RCVMAN.TRANSLATEREPAIR +DBMS_RCVMAN.TRANSLATEREPAIROPTION +DBMS_RCVMAN.TRANSLATEREPAIRPARMS +DBMS_RCVMAN.TRANSLATEREPAIRSTEP +DBMS_RCVMAN.TRANSLATESEEKBPBSKEY +DBMS_RCVMAN.TRANSLATETABLESPACE +DBMS_RCVMAN.TRANSLATETEMPFILE +DBMS_RCVMAN.TRIMRECOVERYACTIONS +DBMS_RCVMAN.VALIDATESTANDBYCONFIG +DBMS_RCVMAN.WASFILEOFFLINE +DBMS_RECOVERABLE_SCRIPT. +DBMS_RECOVERABLE_SCRIPT.ADD_FORWARD_BLOCK +DBMS_RECOVERABLE_SCRIPT.CREATE_SCRIPT +DBMS_RECOVERABLE_SCRIPT.DROP_SCRIPT +DBMS_RECOVERABLE_SCRIPT.INSERT_PARAM +DBMS_RECOVERABLE_SCRIPT.MODIFY_FORWARD_BLOCK +DBMS_RECOVERABLE_SCRIPT.MODIFY_UNDO_BLOCK +DBMS_RECOVERABLE_SCRIPT.RUN +DBMS_RECOVERABLE_SCRIPT.UPDATE_COMMENT +DBMS_RECOVERABLE_SCRIPT.UPDATE_STATUS +DBMS_RECO_SCRIPT_INT. +DBMS_RECO_SCRIPT_INT.ADD_FORWARD_BLOCK +DBMS_RECO_SCRIPT_INT.CREATE_SCRIPT +DBMS_RECO_SCRIPT_INT.GET_DBLINKS +DBMS_RECO_SCRIPT_INT.GET_ERROR_BLOCK_NUM +DBMS_RECO_SCRIPT_INT.GET_FORWARD_BLOCK +DBMS_RECO_SCRIPT_INT.GET_FORWARD_BLOCKS +DBMS_RECO_SCRIPT_INT.GET_SCRIPT_OWNER +DBMS_RECO_SCRIPT_INT.GET_UNDO_BLOCK +DBMS_RECO_SCRIPT_INT.GET_UNDO_BLOCKS +DBMS_RECO_SCRIPT_INT.INSERT_PARAM +DBMS_RECO_SCRIPT_INT.MODIFY_FORWARD_BLOCK +DBMS_RECO_SCRIPT_INT.MODIFY_UNDO_BLOCK +DBMS_RECO_SCRIPT_INT.RECORD_ERROR +DBMS_RECO_SCRIPT_INT.SYS_PURGE +DBMS_RECO_SCRIPT_INT.SYS_PURGE_LOCAL +DBMS_RECO_SCRIPT_INT.UPDATE_BLOCK_STATUS +DBMS_RECO_SCRIPT_INT.UPDATE_COMMENT +DBMS_RECO_SCRIPT_INT.UPDATE_DONE_BLOCK_NUM +DBMS_RECO_SCRIPT_INT.UPDATE_STATUS +DBMS_RECO_SCRIPT_INT.USER_PURGE +DBMS_RECO_SCRIPT_INVOK. +DBMS_RECO_SCRIPT_INVOK.CHECK_PRIVILEGES +DBMS_RECO_SCRIPT_INVOK.LOCAL_EXECUTE_BLOCK +DBMS_RECTIFIER_DIFF. +DBMS_RECTIFIER_DIFF.DIFFERENCES +DBMS_RECTIFIER_DIFF.RECTIFY +DBMS_RECTIFIER_DIFF.TURN_REPLICATION_OFF +DBMS_RECTIFIER_DIFF.TURN_REPLICATION_ON +DBMS_RECTIFIER_DIFF_INTERNAL. +DBMS_RECTIFIER_DIFF_INTERNAL.DIFFERENCES +DBMS_RECTIFIER_DIFF_INTERNAL.RECTIFY +DBMS_RECTIFIER_DIFF_INTERNAL.TURN_REPLICATION_OFF +DBMS_RECTIFIER_DIFF_INTERNAL.TURN_REPLICATION_ON +DBMS_RECTIFIER_FRIENDS. +DBMS_RECTIFIER_FRIENDS.SHAPE_EQUIVALENT +DBMS_REDACT. +DBMS_REDACT.ADD_POLICY +DBMS_REDACT.ALTER_POLICY +DBMS_REDACT.DISABLE_POLICY +DBMS_REDACT.DROP_POLICY +DBMS_REDACT.ENABLE_POLICY +DBMS_REDACT.FPM_MASK +DBMS_REDACT.FPM_UNMASK +DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES +DBMS_REDACT_INT. +DBMS_REDACT_INT.ADD_POLICY +DBMS_REDACT_INT.ALTER_POLICY +DBMS_REDACT_INT.CLEAR_POLICY_DESCRIPTIONS +DBMS_REDACT_INT.DISABLE_POLICY +DBMS_REDACT_INT.DROP_POLICY +DBMS_REDACT_INT.ENABLE_POLICY +DBMS_REDACT_INT.FPM_MASK +DBMS_REDACT_INT.FPM_UNMASK +DBMS_REDACT_INT.SET_POLICY_COLUMN_DESCRIPTION +DBMS_REDACT_INT.SET_POLICY_DESCRIPTION +DBMS_REDACT_INT.UPDATE_FULL_REDACTION_VALUES +DBMS_REDEFINITION. +DBMS_REDEFINITION.ABORT_REDEF_TABLE +DBMS_REDEFINITION.CAN_REDEF_TABLE +DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS +DBMS_REDEFINITION.FINISH_REDEF_TABLE +DBMS_REDEFINITION.REDEF_TABLE +DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT +DBMS_REDEFINITION.START_REDEF_TABLE +DBMS_REDEFINITION.SYNC_INTERIM_TABLE +DBMS_REDEFINITION.UNREGISTER_DEPENDENT_OBJECT +DBMS_REDEFINITION_INTERNAL.ADD_DEP_ERRMSG +DBMS_REDEFINITION_INTERNAL.ADD_DEP_ERROR +DBMS_REDEFINITION_INTERNAL.CHECK_TRACE_EVENT +DBMS_REDEFINITION_INTERNAL.DELETE_DEP_ERROR +DBMS_REDEFINITION_INTERNAL.FETCH_DDL +DBMS_REDEFINITION_INTERNAL.GET_IDX_SPARE4 +DBMS_REDEFINITION_INTERNAL.GET_MVLOG_NAME +DBMS_REDEFINITION_INTERNAL.GET_PARTITION_CNT +DBMS_REDEFINITION_INTERNAL.GET_REDEF_ID +DBMS_REDEFINITION_INTERNAL.GET_SUPPLEMENTAL_LOG_GRP_NAME +DBMS_REDEFINITION_INTERNAL.GET_SUPPLEMENTAL_LOG_TYPE +DBMS_REDEFINITION_INTERNAL.GET_TABLESPACE +DBMS_REDEFINITION_INTERNAL.GET_TABLE_OBJID +DBMS_REDEFINITION_INTERNAL.GET_USER_ID +DBMS_REDEFINITION_INTERNAL.IS_CONTRAINT_ON_NTAB +DBMS_REDEFINITION_INTERNAL.IS_IDX_ANALYZED +DBMS_REDEFINITION_INTERNAL.IS_IDX_FROM_CONSTRAINT +DBMS_REDEFINITION_INTERNAL.IS_INDEX_ON_NESTED_TAB +DBMS_REDEFINITION_INTERNAL.IS_INDEX_XML +DBMS_REDEFINITION_INTERNAL.IS_NOTNULL_CONSTRAINT +DBMS_REDEFINITION_INTERNAL.IS_PK_IOT +DBMS_REDEFINITION_INTERNAL.IS_REG_DEP_OBJ +DBMS_REDEFINITION_INTERNAL.IS_TABLE_COMPOSITE_PARTITIONED +DBMS_REDEFINITION_INTERNAL.IS_TABLE_NAME_TAKEN +DBMS_REDEFINITION_INTERNAL.IS_TABLE_PARTITIONED +DBMS_REDEFINITION_INTERNAL.IS_TAB_ANALYZED +DBMS_REDEFINITION_INTERNAL.META_GET_XML +DBMS_REDEFINITION_INTERNAL.META_PUT +DBMS_REDEFINITION_INTERNAL.NEST_TAB_NAME_EXIST +DBMS_REDEFINITION_INTERNAL.PART_LOB +DBMS_REDEFINITION_INTERNAL.PK_ON_IOT +DBMS_REDEFINITION_INTERNAL.REGISTER_DEP_OBJ +DBMS_REDEFINITION_INTERNAL.SKIP_ABORT_EVENT +DBMS_REDEFINITION_INTERNAL.TAB_BEING_REDEFED +DBMS_REDEFINITION_INTERNAL.TAB_EXIST +DBMS_REDEFINITION_INTERNAL.TAB_HAS_LOB +DBMS_REDEFINITION_INTERNAL.TAB_HAS_NESTAB +DBMS_REDEFINITION_INTERNAL.TAB_IS_LOGGING +DBMS_REDEFINITION_INTERNAL.TEST_DML_REF_TRIGGER +DBMS_REDEFINITION_INTERNAL.VALIDATE_TABLESPACE +DBMS_REFRESH. +DBMS_REFRESH.ADD +DBMS_REFRESH.CHANGE +DBMS_REFRESH.DESTROY +DBMS_REFRESH.MAKE +DBMS_REFRESH.MAKE_REPAPI +DBMS_REFRESH.REFRESH +DBMS_REFRESH.SUBTRACT +DBMS_REFRESH.USER_EXPORT +DBMS_REFRESH.USER_EXPORT_CHILD +DBMS_REFRESH_EXP_LWM. +DBMS_REFRESH_EXP_LWM.ADD_LWM +DBMS_REFRESH_EXP_LWM.SCHEMA_INFO_EXP +DBMS_REFRESH_EXP_SITES. +DBMS_REFRESH_EXP_SITES.ADD_SITE +DBMS_REFRESH_EXP_SITES.SCHEMA_INFO_EXP +DBMS_REGISTRY. +DBMS_REGISTRY.CHECK_SERVER_INSTANCE +DBMS_REGISTRY.COMP_NAME +DBMS_REGISTRY.COUNT_ERRORS_IN_REGISTRY +DBMS_REGISTRY.DELETE_PROGRESS_ACTION +DBMS_REGISTRY.DOWNGRADED +DBMS_REGISTRY.DOWNGRADING +DBMS_REGISTRY.EDITION +DBMS_REGISTRY.GET_CONTAINER_NAME +DBMS_REGISTRY.GET_CON_ID +DBMS_REGISTRY.GET_DEPENDENT_COMPS +DBMS_REGISTRY.GET_DEPENDENT_COMPS_REC +DBMS_REGISTRY.GET_PROGRESS_STEP +DBMS_REGISTRY.GET_PROGRESS_VALUE +DBMS_REGISTRY.GET_REQUIRED_COMPS +DBMS_REGISTRY.GET_REQUIRED_COMPS_REC +DBMS_REGISTRY.INVALID +DBMS_REGISTRY.IS_COMPONENT +DBMS_REGISTRY.IS_DB_CONSOLIDATED +DBMS_REGISTRY.IS_DB_PDB +DBMS_REGISTRY.IS_DB_PDB_SEED +DBMS_REGISTRY.IS_DB_ROOT +DBMS_REGISTRY.IS_IN_REGISTRY +DBMS_REGISTRY.IS_IN_UPGRADE_MODE +DBMS_REGISTRY.IS_LOADED +DBMS_REGISTRY.IS_STARTUP_REQUIRED +DBMS_REGISTRY.IS_TRACE_EVENT_SET +DBMS_REGISTRY.IS_VALID +DBMS_REGISTRY.LOADED +DBMS_REGISTRY.LOADING +DBMS_REGISTRY.NOTHING_SCRIPT +DBMS_REGISTRY.NUM_OF_EXADATA_CELLS +DBMS_REGISTRY.OPTION_OFF +DBMS_REGISTRY.PREV_VERSION +DBMS_REGISTRY.REMOVED +DBMS_REGISTRY.REMOVING +DBMS_REGISTRY.RESET_VERSION +DBMS_REGISTRY.SCHEMA +DBMS_REGISTRY.SCHEMA_LIST +DBMS_REGISTRY.SCHEMA_LIST_STRING +DBMS_REGISTRY.SCRIPT +DBMS_REGISTRY.SCRIPT_PATH +DBMS_REGISTRY.SCRIPT_PREFIX +DBMS_REGISTRY.SESSION_NAMESPACE +DBMS_REGISTRY.SET_COMP_NAMESPACE +DBMS_REGISTRY.SET_EDITION +DBMS_REGISTRY.SET_PROGRESS_ACTION +DBMS_REGISTRY.SET_PROGRESS_STEP +DBMS_REGISTRY.SET_PROGRESS_VALUE +DBMS_REGISTRY.SET_RDBMS_STATUS +DBMS_REGISTRY.SET_RDBMS_UPGRADED_STATUS +DBMS_REGISTRY.SET_REQUIRED_COMPS +DBMS_REGISTRY.SET_SESSION_CONTAINER +DBMS_REGISTRY.SET_SESSION_NAMESPACE +DBMS_REGISTRY.SET_SESSION_TO_CONTAINER_NAME +DBMS_REGISTRY.STARTUP_COMPLETE +DBMS_REGISTRY.STARTUP_REQUIRED +DBMS_REGISTRY.STATUS +DBMS_REGISTRY.STATUS_NAME +DBMS_REGISTRY.SUBCOMPONENTS +DBMS_REGISTRY.UPDATE_SCHEMA_LIST +DBMS_REGISTRY.UPGRADED +DBMS_REGISTRY.UPGRADING +DBMS_REGISTRY.VALID +DBMS_REGISTRY.VERSION +DBMS_REGISTRY_SERVER. +DBMS_REGISTRY_SIMPLE. +DBMS_REGISTRY_SIMPLE.IS_DB_CONSOLIDATED +DBMS_REGISTRY_SIMPLE.IS_DB_PDB +DBMS_REGISTRY_SIMPLE.IS_DB_PDB_SEED +DBMS_REGISTRY_SIMPLE.IS_DB_ROOT +DBMS_REGISTRY_SYS. +DBMS_REGISTRY_SYS.CHECK_COMPONENT_DOWNGRADES +DBMS_REGISTRY_SYS.CPU_SCRIPT +DBMS_REGISTRY_SYS.DBDWG_SCRIPT +DBMS_REGISTRY_SYS.DBUPG_SCRIPT +DBMS_REGISTRY_SYS.DELETE_PROPS_DATA +DBMS_REGISTRY_SYS.DIAGNOSTICS +DBMS_REGISTRY_SYS.DIR_EXISTS_AND_IS_WRITABLE +DBMS_REGISTRY_SYS.DROP_USER +DBMS_REGISTRY_SYS.GATHER_STATS +DBMS_REGISTRY_SYS.GEN_PFILE_FROM_MEMORY +DBMS_REGISTRY_SYS.GET_PFILE_PATH +DBMS_REGISTRY_SYS.INSERT_PROPS_DATA +DBMS_REGISTRY_SYS.PATCH_SCRIPT +DBMS_REGISTRY_SYS.POPULATE +DBMS_REGISTRY_SYS.POPULATE_101 +DBMS_REGISTRY_SYS.POPULATE_102 +DBMS_REGISTRY_SYS.POPULATE_92 +DBMS_REGISTRY_SYS.RECORD_ACTION +DBMS_REGISTRY_SYS.RELOD_SCRIPT +DBMS_REGISTRY_SYS.REMOVAL_SCRIPT +DBMS_REGISTRY_SYS.RESOLVE_CATJAVA +DBMS_REGISTRY_SYS.SELECT_PROPS_DATA +DBMS_REGISTRY_SYS.SET_REGISTRY_CONTEXT +DBMS_REGISTRY_SYS.TIME_STAMP +DBMS_REGISTRY_SYS.TIME_STAMP_COMP_DISPLAY +DBMS_REGISTRY_SYS.TIME_STAMP_DISPLAY +DBMS_REGISTRY_SYS.UPDATE_PROPS_DATA +DBMS_REGISTRY_SYS.UTLMMIG_SCRIPT_NAME +DBMS_REGISTRY_SYS.VALIDATE_CATALOG +DBMS_REGISTRY_SYS.VALIDATE_CATJAVA +DBMS_REGISTRY_SYS.VALIDATE_CATPROC +DBMS_REGISTRY_SYS.VALIDATE_COMPONENTS +DBMS_REGISTRY_SYS.VALIDATE_RDBMS_IN_NORMAL_MODE +DBMS_REGISTRY_SYS.VALIDATE_RDBMS_IN_UPGRADE_MODE +DBMS_REGXDB. +DBMS_REGXDB.VALIDATEXDB +DBMS_REGXDB.VALIDATEXDB_OBJS +DBMS_REPAIR. +DBMS_REPAIR.ADMIN_TABLES +DBMS_REPAIR.CHECK_OBJECT +DBMS_REPAIR.DUMP_ORPHAN_KEYS +DBMS_REPAIR.FIX_CORRUPT_BLOCKS +DBMS_REPAIR.ONLINE_INDEX_CLEAN +DBMS_REPAIR.REBUILD_FREELISTS +DBMS_REPAIR.REBUILD_SHC_INDEX +DBMS_REPAIR.REPAIR_CLUSTER_INDEX_KEYCOUNT +DBMS_REPAIR.SEGMENT_FIX_STATUS +DBMS_REPAIR.SKIP_CORRUPT_BLOCKS +DBMS_REPCAT. +DBMS_REPCAT.ABORT_FLAVOR_DEFINITION +DBMS_REPCAT.ADD_COLUMNS_TO_FLAVOR +DBMS_REPCAT.ADD_COLUMN_GROUP_TO_FLAVOR +DBMS_REPCAT.ADD_DELETE_RESOLUTION +DBMS_REPCAT.ADD_GROUPED_COLUMN +DBMS_REPCAT.ADD_MASTER_DATABASE +DBMS_REPCAT.ADD_NEW_MASTERS +DBMS_REPCAT.ADD_OBJECT_TO_FLAVOR +DBMS_REPCAT.ADD_PRIORITY_CHAR +DBMS_REPCAT.ADD_PRIORITY_DATE +DBMS_REPCAT.ADD_PRIORITY_NCHAR +DBMS_REPCAT.ADD_PRIORITY_NUMBER +DBMS_REPCAT.ADD_PRIORITY_NVARCHAR2 +DBMS_REPCAT.ADD_PRIORITY_RAW +DBMS_REPCAT.ADD_PRIORITY_VARCHAR2 +DBMS_REPCAT.ADD_SITE_PRIORITY_SITE +DBMS_REPCAT.ADD_UNIQUE_RESOLUTION +DBMS_REPCAT.ADD_UPDATE_RESOLUTION +DBMS_REPCAT.ALTER_CATCHUP_PARAMETERS +DBMS_REPCAT.ALTER_MASTER_PROPAGATION +DBMS_REPCAT.ALTER_MASTER_REPOBJECT +DBMS_REPCAT.ALTER_MVIEW_PROPAGATION +DBMS_REPCAT.ALTER_PRIORITY +DBMS_REPCAT.ALTER_PRIORITY_CHAR +DBMS_REPCAT.ALTER_PRIORITY_DATE +DBMS_REPCAT.ALTER_PRIORITY_NCHAR +DBMS_REPCAT.ALTER_PRIORITY_NUMBER +DBMS_REPCAT.ALTER_PRIORITY_NVARCHAR2 +DBMS_REPCAT.ALTER_PRIORITY_RAW +DBMS_REPCAT.ALTER_PRIORITY_VARCHAR2 +DBMS_REPCAT.ALTER_SITE_PRIORITY +DBMS_REPCAT.ALTER_SITE_PRIORITY_SITE +DBMS_REPCAT.ALTER_SNAPSHOT_PROPAGATION +DBMS_REPCAT.BEGIN_FLAVOR_DEFINITION +DBMS_REPCAT.CANCEL_STATISTICS +DBMS_REPCAT.COMMA_TO_TABLE +DBMS_REPCAT.COMMENT_ON_COLUMN_GROUP +DBMS_REPCAT.COMMENT_ON_DELETE_RESOLUTION +DBMS_REPCAT.COMMENT_ON_MVIEW_REPSITES +DBMS_REPCAT.COMMENT_ON_PRIORITY_GROUP +DBMS_REPCAT.COMMENT_ON_REPGROUP +DBMS_REPCAT.COMMENT_ON_REPOBJECT +DBMS_REPCAT.COMMENT_ON_REPSITES +DBMS_REPCAT.COMMENT_ON_SITE_PRIORITY +DBMS_REPCAT.COMMENT_ON_SNAPSHOT_REPSITES +DBMS_REPCAT.COMMENT_ON_UNIQUE_RESOLUTION +DBMS_REPCAT.COMMENT_ON_UPDATE_RESOLUTION +DBMS_REPCAT.COMPARE_OLD_VALUES +DBMS_REPCAT.CREATE_MASTER_REPGROUP +DBMS_REPCAT.CREATE_MASTER_REPOBJECT +DBMS_REPCAT.CREATE_MVIEW_REPGROUP +DBMS_REPCAT.CREATE_MVIEW_REPOBJECT +DBMS_REPCAT.CREATE_SNAPSHOT_REPGROUP +DBMS_REPCAT.CREATE_SNAPSHOT_REPOBJECT +DBMS_REPCAT.DEFINE_COLUMN_GROUP +DBMS_REPCAT.DEFINE_PRIORITY_GROUP +DBMS_REPCAT.DEFINE_SITE_PRIORITY +DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN +DBMS_REPCAT.DROP_COLUMNS_FROM_FLAVOR +DBMS_REPCAT.DROP_COLUMN_GROUP +DBMS_REPCAT.DROP_COLUMN_GROUP_FROM_FLAVOR +DBMS_REPCAT.DROP_DELETE_RESOLUTION +DBMS_REPCAT.DROP_GROUPED_COLUMN +DBMS_REPCAT.DROP_MASTER_REPGROUP +DBMS_REPCAT.DROP_MASTER_REPOBJECT +DBMS_REPCAT.DROP_MVIEW_REPGROUP +DBMS_REPCAT.DROP_MVIEW_REPOBJECT +DBMS_REPCAT.DROP_OBJECT_FROM_FLAVOR +DBMS_REPCAT.DROP_PRIORITY +DBMS_REPCAT.DROP_PRIORITY_CHAR +DBMS_REPCAT.DROP_PRIORITY_DATE +DBMS_REPCAT.DROP_PRIORITY_GROUP +DBMS_REPCAT.DROP_PRIORITY_NCHAR +DBMS_REPCAT.DROP_PRIORITY_NUMBER +DBMS_REPCAT.DROP_PRIORITY_NVARCHAR2 +DBMS_REPCAT.DROP_PRIORITY_RAW +DBMS_REPCAT.DROP_PRIORITY_VARCHAR2 +DBMS_REPCAT.DROP_SITE_PRIORITY +DBMS_REPCAT.DROP_SITE_PRIORITY_SITE +DBMS_REPCAT.DROP_SNAPSHOT_REPGROUP +DBMS_REPCAT.DROP_SNAPSHOT_REPOBJECT +DBMS_REPCAT.DROP_UNIQUE_RESOLUTION +DBMS_REPCAT.DROP_UPDATE_RESOLUTION +DBMS_REPCAT.EXECUTE_DDL +DBMS_REPCAT.GENERATE_FLAVOR_NAME +DBMS_REPCAT.GENERATE_MVIEW_SUPPORT +DBMS_REPCAT.GENERATE_REPLICATION_PACKAGE +DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT +DBMS_REPCAT.GENERATE_REPLICATION_TRIGGER +DBMS_REPCAT.GENERATE_SNAPSHOT_SUPPORT +DBMS_REPCAT.MAKE_COLUMN_GROUP +DBMS_REPCAT.OBSOLETE_FLAVOR_DEFINITION +DBMS_REPCAT.ORDER_USER_OBJECTS +DBMS_REPCAT.PREPARE_INSTANTIATED_MASTER +DBMS_REPCAT.PUBLISH_FLAVOR_DEFINITION +DBMS_REPCAT.PURGE_FLAVOR_DEFINITION +DBMS_REPCAT.PURGE_MASTER_LOG +DBMS_REPCAT.PURGE_STATISTICS +DBMS_REPCAT.REFRESH_MVIEW_REPGROUP +DBMS_REPCAT.REFRESH_SNAPSHOT_REPGROUP +DBMS_REPCAT.REGISTER_MVIEW_REPGROUP +DBMS_REPCAT.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT.REGISTER_STATISTICS +DBMS_REPCAT.RELOCATE_MASTERDEF +DBMS_REPCAT.REMOVE_MASTER_DATABASES +DBMS_REPCAT.RENAME_SHADOW_COLUMN_GROUP +DBMS_REPCAT.REPCAT_IMPORT_CHECK +DBMS_REPCAT.REPCAT_IMPORT_REPSCHEMA +DBMS_REPCAT.REPCAT_IMPORT_REPSCHEMA_STRING +DBMS_REPCAT.RESUME_MASTER_ACTIVITY +DBMS_REPCAT.RESUME_PROPAGATION_TO_MDEF +DBMS_REPCAT.SEND_AND_COMPARE_OLD_VALUES +DBMS_REPCAT.SEND_OLD_VALUES +DBMS_REPCAT.SET_COLUMNS +DBMS_REPCAT.SET_LOCAL_FLAVOR +DBMS_REPCAT.SPECIFY_NEW_MASTERS +DBMS_REPCAT.STREAMS_MIGRATION +DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY +DBMS_REPCAT.SWITCH_MVIEW_MASTER +DBMS_REPCAT.SWITCH_SNAPSHOT_MASTER +DBMS_REPCAT.TICKLE_JOB +DBMS_REPCAT.UNDO_ADD_NEW_MASTERS_REQUEST +DBMS_REPCAT.UNREGISTER_MVIEW_REPGROUP +DBMS_REPCAT.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT.VALIDATE +DBMS_REPCAT.VALIDATE_FLAVOR_DEFINITION +DBMS_REPCAT.VALIDATE_FOR_LOCAL_FLAVOR +DBMS_REPCAT.WAIT_MASTER_LOG +DBMS_REPCAT_ADD_MASTER. +DBMS_REPCAT_ADD_MASTER.ADD_NEW_MASTERS +DBMS_REPCAT_ADD_MASTER.ALTER_CATCHUP_PARAMETERS +DBMS_REPCAT_ADD_MASTER.CHANGE_MASTER_STATUS +DBMS_REPCAT_ADD_MASTER.CONTROL_PROPAGATION +DBMS_REPCAT_ADD_MASTER.PREPARE_FOR_IMP_MASTER +DBMS_REPCAT_ADD_MASTER.PREPARE_INSTANTIATED_MASTER +DBMS_REPCAT_ADD_MASTER.PULL_EXTENSION_REQUEST_MASTER +DBMS_REPCAT_ADD_MASTER.PURGE_REQUEST +DBMS_REPCAT_ADD_MASTER.RESUME_PROPAGATION_TO_MDEF +DBMS_REPCAT_ADD_MASTER.SPECIFY_NEW_MASTERS +DBMS_REPCAT_ADD_MASTER.UNDO_ADD_NEW_MASTERS_REQUEST +DBMS_REPCAT_ADD_MASTER.WAIT_FOR_NEW_MASTERS_TO_PREP +DBMS_REPCAT_ADMIN. +DBMS_REPCAT_ADMIN.BIC +DBMS_REPCAT_ADMIN.BIS +DBMS_REPCAT_ADMIN.CHECK_REPCAT_PRIVS +DBMS_REPCAT_ADMIN.DO_SQL +DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_REPGROUP +DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_REPSCHEMA +DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA +DBMS_REPCAT_ADMIN.GRANT_ADMIN_REPGROUP +DBMS_REPCAT_ADMIN.GRANT_ADMIN_REPSCHEMA +DBMS_REPCAT_ADMIN.GRANT_ADMIN_SCHEMA +DBMS_REPCAT_ADMIN.GRANT_PROXY_SNAPADMIN_PRIVS +DBMS_REPCAT_ADMIN.GRANT_SNAPADMIN_PROXY +DBMS_REPCAT_ADMIN.REGISTER_REPCAT_PRIVS +DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP +DBMS_REPCAT_ADMIN.REPCAT_ISDBA +DBMS_REPCAT_ADMIN.REPGROUP_PRIVS_FUN +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_ANY_REPGROUP +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_ANY_REPSCHEMA +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_ANY_SCHEMA +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_REPGROUP +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_REPSCHEMA +DBMS_REPCAT_ADMIN.REVOKE_ADMIN_SCHEMA +DBMS_REPCAT_ADMIN.REVOKE_SNAPADMIN_PROXY +DBMS_REPCAT_ADMIN.UNREGISTER_USER_REPGROUP +DBMS_REPCAT_AUTH. +DBMS_REPCAT_AUTH.GRANT_SURROGATE_REPCAT +DBMS_REPCAT_AUTH.INTERNAL_SURROGATE_SYSTEM +DBMS_REPCAT_AUTH.REVOKE_SURROGATE_REPCAT +DBMS_REPCAT_CACHE. +DBMS_REPCAT_CACHE.GET_PROPAGATOR_ID +DBMS_REPCAT_CACHE.GET_PROPAGATOR_NAME +DBMS_REPCAT_CACHE.LOCK_OBJECT_GROUP +DBMS_REPCAT_CACHE.LOCK_PROPAGATOR +DBMS_REPCAT_CACHE.PURGE_OBJECT_GROUP +DBMS_REPCAT_CACHE.PURGE_PROPAGATOR +DBMS_REPCAT_CACHE.READ_OBJECT_GROUP +DBMS_REPCAT_COMMON_UTL. +DBMS_REPCAT_COMMON_UTL.COUNT_ASYNC_DESTS +DBMS_REPCAT_COMMON_UTL.ENSURE_DB_COMPATIBLE +DBMS_REPCAT_COMMON_UTL.GET_EXTENSION_ID +DBMS_REPCAT_COMMON_UTL.GET_LEN_BASED_ON_SEMANTICS +DBMS_REPCAT_COMMON_UTL.GET_SEMANTICS_BASED_ON_TYPE +DBMS_REPCAT_COMMON_UTL.IS_MASTER_FULL_INSTANTIATION +DBMS_REPCAT_COMMON_UTL.ORDER_OBJECTS +DBMS_REPCAT_CONF. +DBMS_REPCAT_CONF.ADD_DELETE_RESOLUTION +DBMS_REPCAT_CONF.ADD_GROUPED_COLUMN +DBMS_REPCAT_CONF.ADD_PRIORITY_CHAR +DBMS_REPCAT_CONF.ADD_PRIORITY_DATE +DBMS_REPCAT_CONF.ADD_PRIORITY_NCHAR +DBMS_REPCAT_CONF.ADD_PRIORITY_NUMBER +DBMS_REPCAT_CONF.ADD_PRIORITY_NVARCHAR2 +DBMS_REPCAT_CONF.ADD_PRIORITY_RAW +DBMS_REPCAT_CONF.ADD_PRIORITY_VARCHAR2 +DBMS_REPCAT_CONF.ADD_SITE_PRIORITY_SITE +DBMS_REPCAT_CONF.ADD_UNIQUE_RESOLUTION +DBMS_REPCAT_CONF.ADD_UPDATE_RESOLUTION +DBMS_REPCAT_CONF.ALTER_PRIORITY +DBMS_REPCAT_CONF.ALTER_PRIORITY_CHAR +DBMS_REPCAT_CONF.ALTER_PRIORITY_DATE +DBMS_REPCAT_CONF.ALTER_PRIORITY_NCHAR +DBMS_REPCAT_CONF.ALTER_PRIORITY_NUMBER +DBMS_REPCAT_CONF.ALTER_PRIORITY_NVARCHAR2 +DBMS_REPCAT_CONF.ALTER_PRIORITY_RAW +DBMS_REPCAT_CONF.ALTER_PRIORITY_VARCHAR2 +DBMS_REPCAT_CONF.ALTER_SITE_PRIORITY +DBMS_REPCAT_CONF.ALTER_SITE_PRIORITY_SITE +DBMS_REPCAT_CONF.AUDITING_OFF +DBMS_REPCAT_CONF.AUDITING_ON +DBMS_REPCAT_CONF.CANCEL_STATISTICS +DBMS_REPCAT_CONF.CHECK_GROUP_INFO +DBMS_REPCAT_CONF.CHECK_ONAME_INFO +DBMS_REPCAT_CONF.COMMENT_ON_COLUMN_GROUP +DBMS_REPCAT_CONF.COMMENT_ON_DELETE_RESOLUTION +DBMS_REPCAT_CONF.COMMENT_ON_PRIORITY_GROUP +DBMS_REPCAT_CONF.COMMENT_ON_SITE_PRIORITY +DBMS_REPCAT_CONF.COMMENT_ON_UNIQUE_RESOLUTION +DBMS_REPCAT_CONF.COMMENT_ON_UPDATE_RESOLUTION +DBMS_REPCAT_CONF.DEFINE_COLUMN_GROUP +DBMS_REPCAT_CONF.DEFINE_PRIORITY_GROUP +DBMS_REPCAT_CONF.DEFINE_SITE_PRIORITY +DBMS_REPCAT_CONF.DROP_COLUMN_GROUP +DBMS_REPCAT_CONF.DROP_DELETE_RESOLUTION +DBMS_REPCAT_CONF.DROP_GROUPED_COLUMN +DBMS_REPCAT_CONF.DROP_PRIORITY +DBMS_REPCAT_CONF.DROP_PRIORITY_CHAR +DBMS_REPCAT_CONF.DROP_PRIORITY_DATE +DBMS_REPCAT_CONF.DROP_PRIORITY_GROUP +DBMS_REPCAT_CONF.DROP_PRIORITY_NCHAR +DBMS_REPCAT_CONF.DROP_PRIORITY_NUMBER +DBMS_REPCAT_CONF.DROP_PRIORITY_NVARCHAR2 +DBMS_REPCAT_CONF.DROP_PRIORITY_RAW +DBMS_REPCAT_CONF.DROP_PRIORITY_VARCHAR2 +DBMS_REPCAT_CONF.DROP_SITE_PRIORITY +DBMS_REPCAT_CONF.DROP_SITE_PRIORITY_SITE +DBMS_REPCAT_CONF.DROP_UNIQUE_RESOLUTION +DBMS_REPCAT_CONF.DROP_UPDATE_RESOLUTION +DBMS_REPCAT_CONF.MAKE_COLUMN_GROUP +DBMS_REPCAT_CONF.PURGE_STATISTICS +DBMS_REPCAT_CONF.REGISTER_STATISTICS +DBMS_REPCAT_DECL. +DBMS_REPCAT_DECL.LOCAL_MATCH +DBMS_REPCAT_DECL.LOCAL_NODE +DBMS_REPCAT_DECL.RESET +DBMS_REPCAT_DEFINER. +DBMS_REPCAT_DEFINER.ABORT_FLAVOR_DEFINITION +DBMS_REPCAT_DEFINER.ADD_COLUMNS_TO_FLAVOR +DBMS_REPCAT_DEFINER.ADD_COLUMN_GROUP_TO_FLAVOR +DBMS_REPCAT_DEFINER.ADD_DELETE_RESOLUTION +DBMS_REPCAT_DEFINER.ADD_GROUPED_COLUMN +DBMS_REPCAT_DEFINER.ADD_MASTER_DATABASE +DBMS_REPCAT_DEFINER.ADD_NEW_MASTERS +DBMS_REPCAT_DEFINER.ADD_OBJECT_TO_FLAVOR +DBMS_REPCAT_DEFINER.ADD_PRIORITY_CHAR +DBMS_REPCAT_DEFINER.ADD_PRIORITY_DATE +DBMS_REPCAT_DEFINER.ADD_PRIORITY_NCHAR +DBMS_REPCAT_DEFINER.ADD_PRIORITY_NUMBER +DBMS_REPCAT_DEFINER.ADD_PRIORITY_NVARCHAR2 +DBMS_REPCAT_DEFINER.ADD_PRIORITY_RAW +DBMS_REPCAT_DEFINER.ADD_PRIORITY_VARCHAR2 +DBMS_REPCAT_DEFINER.ADD_SITE_PRIORITY_SITE +DBMS_REPCAT_DEFINER.ADD_UNIQUE_RESOLUTION +DBMS_REPCAT_DEFINER.ADD_UPDATE_RESOLUTION +DBMS_REPCAT_DEFINER.ALTER_CATCHUP_PARAMETERS +DBMS_REPCAT_DEFINER.ALTER_MASTER_PROPAGATION +DBMS_REPCAT_DEFINER.ALTER_MASTER_REPOBJECT +DBMS_REPCAT_DEFINER.ALTER_MVIEW_PROPAGATION +DBMS_REPCAT_DEFINER.ALTER_PRIORITY +DBMS_REPCAT_DEFINER.ALTER_PRIORITY_CHAR +DBMS_REPCAT_DEFINER.ALTER_PRIORITY_DATE +DBMS_REPCAT_DEFINER.ALTER_PRIORITY_NCHAR +DBMS_REPCAT_DEFINER.ALTER_PRIORITY_NUMBER +DBMS_REPCAT_DEFINER.ALTER_PRIORITY_NVARCHAR2 +DBMS_REPCAT_DEFINER.ALTER_PRIORITY_RAW +DBMS_REPCAT_DEFINER.ALTER_PRIORITY_VARCHAR2 +DBMS_REPCAT_DEFINER.ALTER_SITE_PRIORITY +DBMS_REPCAT_DEFINER.ALTER_SITE_PRIORITY_SITE +DBMS_REPCAT_DEFINER.ALTER_SNAPSHOT_PROPAGATION +DBMS_REPCAT_DEFINER.BEGIN_FLAVOR_DEFINITION +DBMS_REPCAT_DEFINER.CANCEL_STATISTICS +DBMS_REPCAT_DEFINER.COMMA_TO_TABLE +DBMS_REPCAT_DEFINER.COMMENT_ON_COLUMN_GROUP +DBMS_REPCAT_DEFINER.COMMENT_ON_DELETE_RESOLUTION +DBMS_REPCAT_DEFINER.COMMENT_ON_MVIEW_REPSITES +DBMS_REPCAT_DEFINER.COMMENT_ON_PRIORITY_GROUP +DBMS_REPCAT_DEFINER.COMMENT_ON_REPGROUP +DBMS_REPCAT_DEFINER.COMMENT_ON_REPOBJECT +DBMS_REPCAT_DEFINER.COMMENT_ON_REPSITES +DBMS_REPCAT_DEFINER.COMMENT_ON_SITE_PRIORITY +DBMS_REPCAT_DEFINER.COMMENT_ON_SNAPSHOT_REPSITES +DBMS_REPCAT_DEFINER.COMMENT_ON_UNIQUE_RESOLUTION +DBMS_REPCAT_DEFINER.COMMENT_ON_UPDATE_RESOLUTION +DBMS_REPCAT_DEFINER.COMPARE_OLD_VALUES +DBMS_REPCAT_DEFINER.CREATE_MASTER_REPGROUP +DBMS_REPCAT_DEFINER.CREATE_MASTER_REPOBJECT +DBMS_REPCAT_DEFINER.CREATE_MVIEW_REPGROUP +DBMS_REPCAT_DEFINER.CREATE_MVIEW_REPOBJECT +DBMS_REPCAT_DEFINER.CREATE_SNAPSHOT_REPGROUP +DBMS_REPCAT_DEFINER.CREATE_SNAPSHOT_REPOBJECT +DBMS_REPCAT_DEFINER.DEFINE_COLUMN_GROUP +DBMS_REPCAT_DEFINER.DEFINE_PRIORITY_GROUP +DBMS_REPCAT_DEFINER.DEFINE_SITE_PRIORITY +DBMS_REPCAT_DEFINER.DO_DEFERRED_REPCAT_ADMIN +DBMS_REPCAT_DEFINER.DROP_COLUMNS_FROM_FLAVOR +DBMS_REPCAT_DEFINER.DROP_COLUMN_GROUP +DBMS_REPCAT_DEFINER.DROP_COLUMN_GROUP_FROM_FLAVOR +DBMS_REPCAT_DEFINER.DROP_DELETE_RESOLUTION +DBMS_REPCAT_DEFINER.DROP_GROUPED_COLUMN +DBMS_REPCAT_DEFINER.DROP_MASTER_REPGROUP +DBMS_REPCAT_DEFINER.DROP_MASTER_REPOBJECT +DBMS_REPCAT_DEFINER.DROP_MVIEW_REPGROUP +DBMS_REPCAT_DEFINER.DROP_MVIEW_REPOBJECT +DBMS_REPCAT_DEFINER.DROP_OBJECT_FROM_FLAVOR +DBMS_REPCAT_DEFINER.DROP_PRIORITY +DBMS_REPCAT_DEFINER.DROP_PRIORITY_CHAR +DBMS_REPCAT_DEFINER.DROP_PRIORITY_DATE +DBMS_REPCAT_DEFINER.DROP_PRIORITY_GROUP +DBMS_REPCAT_DEFINER.DROP_PRIORITY_NCHAR +DBMS_REPCAT_DEFINER.DROP_PRIORITY_NUMBER +DBMS_REPCAT_DEFINER.DROP_PRIORITY_NVARCHAR2 +DBMS_REPCAT_DEFINER.DROP_PRIORITY_RAW +DBMS_REPCAT_DEFINER.DROP_PRIORITY_VARCHAR2 +DBMS_REPCAT_DEFINER.DROP_SITE_PRIORITY +DBMS_REPCAT_DEFINER.DROP_SITE_PRIORITY_SITE +DBMS_REPCAT_DEFINER.DROP_SNAPSHOT_REPGROUP +DBMS_REPCAT_DEFINER.DROP_SNAPSHOT_REPOBJECT +DBMS_REPCAT_DEFINER.DROP_UNIQUE_RESOLUTION +DBMS_REPCAT_DEFINER.DROP_UPDATE_RESOLUTION +DBMS_REPCAT_DEFINER.EXECUTE_DDL +DBMS_REPCAT_DEFINER.GENERATE_FLAVOR_NAME +DBMS_REPCAT_DEFINER.GENERATE_MVIEW_SUPPORT +DBMS_REPCAT_DEFINER.GENERATE_REPLICATION_PACKAGE +DBMS_REPCAT_DEFINER.GENERATE_REPLICATION_SUPPORT +DBMS_REPCAT_DEFINER.GENERATE_REPLICATION_TRIGGER +DBMS_REPCAT_DEFINER.GENERATE_SNAPSHOT_SUPPORT +DBMS_REPCAT_DEFINER.MAKE_COLUMN_GROUP +DBMS_REPCAT_DEFINER.OBSOLETE_FLAVOR_DEFINITION +DBMS_REPCAT_DEFINER.ORDER_USER_OBJECTS +DBMS_REPCAT_DEFINER.PREPARE_INSTANTIATED_MASTER +DBMS_REPCAT_DEFINER.PUBLISH_FLAVOR_DEFINITION +DBMS_REPCAT_DEFINER.PURGE_FLAVOR_DEFINITION +DBMS_REPCAT_DEFINER.PURGE_MASTER_LOG +DBMS_REPCAT_DEFINER.PURGE_STATISTICS +DBMS_REPCAT_DEFINER.REFRESH_MVIEW_REPGROUP +DBMS_REPCAT_DEFINER.REFRESH_SNAPSHOT_REPGROUP +DBMS_REPCAT_DEFINER.REGISTER_MVIEW_REPGROUP +DBMS_REPCAT_DEFINER.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_DEFINER.REGISTER_STATISTICS +DBMS_REPCAT_DEFINER.RELOCATE_MASTERDEF +DBMS_REPCAT_DEFINER.REMOVE_MASTER_DATABASES +DBMS_REPCAT_DEFINER.RENAME_SHADOW_COLUMN_GROUP +DBMS_REPCAT_DEFINER.REPCAT_IMPORT_CHECK +DBMS_REPCAT_DEFINER.REPCAT_IMPORT_REPSCHEMA +DBMS_REPCAT_DEFINER.REPCAT_IMPORT_REPSCHEMA_STRING +DBMS_REPCAT_DEFINER.RESUME_MASTER_ACTIVITY +DBMS_REPCAT_DEFINER.RESUME_PROPAGATION_TO_MDEF +DBMS_REPCAT_DEFINER.SEND_AND_COMPARE_OLD_VALUES +DBMS_REPCAT_DEFINER.SEND_OLD_VALUES +DBMS_REPCAT_DEFINER.SET_COLUMNS +DBMS_REPCAT_DEFINER.SET_LOCAL_FLAVOR +DBMS_REPCAT_DEFINER.SPECIFY_NEW_MASTERS +DBMS_REPCAT_DEFINER.STREAMS_MIGRATION +DBMS_REPCAT_DEFINER.SUSPEND_MASTER_ACTIVITY +DBMS_REPCAT_DEFINER.SWITCH_MVIEW_MASTER +DBMS_REPCAT_DEFINER.SWITCH_SNAPSHOT_MASTER +DBMS_REPCAT_DEFINER.TICKLE_JOB +DBMS_REPCAT_DEFINER.UNDO_ADD_NEW_MASTERS_REQUEST +DBMS_REPCAT_DEFINER.UNREGISTER_MVIEW_REPGROUP +DBMS_REPCAT_DEFINER.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_DEFINER.VALIDATE +DBMS_REPCAT_DEFINER.VALIDATE_FLAVOR_DEFINITION +DBMS_REPCAT_DEFINER.VALIDATE_FOR_LOCAL_FLAVOR +DBMS_REPCAT_DEFINER.WAIT_MASTER_LOG +DBMS_REPCAT_EXP. +DBMS_REPCAT_EXP.SCHEMA_INFO_EXP +DBMS_REPCAT_EXP.SYSTEM_INFO_EXP +DBMS_REPCAT_FLA. +DBMS_REPCAT_FLA.ABORT_DEFINITION +DBMS_REPCAT_FLA.ABORT_FLAVOR_DEFINITION +DBMS_REPCAT_FLA.ADD_OBJECT +DBMS_REPCAT_FLA.ADD_OBJECT_TO_FLAVOR +DBMS_REPCAT_FLA.BEGIN_DEFINITION +DBMS_REPCAT_FLA.BEGIN_FLAVOR_DEFINITION +DBMS_REPCAT_FLA.DROP_OBJECT +DBMS_REPCAT_FLA.DROP_OBJECT_FROM_FLAVOR +DBMS_REPCAT_FLA.ENSURE_COMPATIBILITY +DBMS_REPCAT_FLA.ENSURE_NOT_PUBLISHED +DBMS_REPCAT_FLA.ENSURE_OBJECT_IN_FLAVOR +DBMS_REPCAT_FLA.GENERATE_FLAVOR_NAME +DBMS_REPCAT_FLA.LOCAL_OBJECT_MATCHES +DBMS_REPCAT_FLA.SET_LOCAL_FLAVOR +DBMS_REPCAT_FLA.VALIDATE_DEFINITION +DBMS_REPCAT_FLA.VALIDATE_FLAVOR_DEFINITION +DBMS_REPCAT_FLA.VALIDATE_FOR_LOCAL_FLAVOR +DBMS_REPCAT_FLA.VALIDATE_LOCAL +DBMS_REPCAT_FLA.VALIDATE_LOCAL_COLS +DBMS_REPCAT_FLA.VALIDATE_LOCAL_MAS +DBMS_REPCAT_FLA.VALIDATE_LOCAL_SNAP +DBMS_REPCAT_FLA.VALIDATE_TABLE +DBMS_REPCAT_FLA_MAS. +DBMS_REPCAT_FLA_MAS.ADD_COLUMNS_TO_FLAVOR +DBMS_REPCAT_FLA_MAS.ADD_COLUMN_GROUP_TO_FLAVOR +DBMS_REPCAT_FLA_MAS.DROP_COLUMNS_FROM_FLAVOR +DBMS_REPCAT_FLA_MAS.DROP_COLUMN_GROUP_FROM_FLAVOR +DBMS_REPCAT_FLA_MAS.OBSOLETE_DEFINITION +DBMS_REPCAT_FLA_MAS.OBSOLETE_FLAVOR_DEFINITION +DBMS_REPCAT_FLA_MAS.PUBLISH_DEFINITION +DBMS_REPCAT_FLA_MAS.PUBLISH_FLAVOR_DEFINITION +DBMS_REPCAT_FLA_MAS.PURGE_DEFINITION +DBMS_REPCAT_FLA_MAS.PURGE_FLAVOR_DEFINITION +DBMS_REPCAT_FLA_UTL.BITVEC_CLR +DBMS_REPCAT_FLA_UTL.BITVEC_REMAP +DBMS_REPCAT_FLA_UTL.BITVEC_SET +DBMS_REPCAT_FLA_UTL.BITVEC_TST +DBMS_REPCAT_FLA_UTL.CANONICALIZE_FLAVOR +DBMS_REPCAT_FLA_UTL.CANONICALIZE_OBJECT +DBMS_REPCAT_FLA_UTL.CHECK_MASTER +DBMS_REPCAT_FLA_UTL.CREATE_REPCOLUMN +DBMS_REPCAT_FLA_UTL.FLAVOR_DOMINATES +DBMS_REPCAT_INSTANTIATE. +DBMS_REPCAT_INSTANTIATE.DROP_SITE_INSTANTIATION +DBMS_REPCAT_INSTANTIATE.INSTANTIATE_OFFLINE +DBMS_REPCAT_INSTANTIATE.INSTANTIATE_OFFLINE_REPAPI +DBMS_REPCAT_INSTANTIATE.INSTANTIATE_ONLINE +DBMS_REPCAT_INTERNAL. +DBMS_REPCAT_INTERNAL.CHECK_REPOBJECT_FLAG +DBMS_REPCAT_INTERNAL.CLEAR_REPOBJECT_FLAG +DBMS_REPCAT_INTERNAL.DESTROY_INTERNAL_PKG +DBMS_REPCAT_INTERNAL.GET_NO_DEPENDENCY_TRACKING +DBMS_REPCAT_INTERNAL.GET_NUM_FROM_RAW +DBMS_REPCAT_INTERNAL.INVALIDATE_INTERNAL_PKG +DBMS_REPCAT_INTERNAL.MAKE_INTERNAL_PKG +DBMS_REPCAT_INTERNAL.RAISE_SYSTEM_ERROR +DBMS_REPCAT_INTERNAL.SET_NO_DEPENDENCY_TRACKING +DBMS_REPCAT_INTERNAL.SET_REPOBJECT_FLAG +DBMS_REPCAT_INTERNAL.UPDATE_DEPENDENCY_TRACKING +DBMS_REPCAT_INTERNAL_PACKAGE. +DBMS_REPCAT_INTERNAL_PACKAGE.ANYDATA_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.BLOB_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.CALL +DBMS_REPCAT_INTERNAL_PACKAGE.CHAR_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.CHECK_REPOBJECT_CACHE +DBMS_REPCAT_INTERNAL_PACKAGE.CLOB_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.DATE_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.DESTINATION +DBMS_REPCAT_INTERNAL_PACKAGE.EXECUTE_ERROR_CALL +DBMS_REPCAT_INTERNAL_PACKAGE.NUMBER_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.RAW_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.ROWID_ARG +DBMS_REPCAT_INTERNAL_PACKAGE.SYNC_CALL +DBMS_REPCAT_INTERNAL_PACKAGE.VARCHAR2_ARG +DBMS_REPCAT_MAS. +DBMS_REPCAT_MAS.ADD_MASTER_DATABASE +DBMS_REPCAT_MAS.ALL_MASTERS +DBMS_REPCAT_MAS.ALTER_MASTER_PROPAGATION +DBMS_REPCAT_MAS.ALTER_MASTER_REPOBJECT +DBMS_REPCAT_MAS.CHECK_QUEUE +DBMS_REPCAT_MAS.COMMENT_ON_REPGROUP +DBMS_REPCAT_MAS.COMMENT_ON_REPOBJECT +DBMS_REPCAT_MAS.COMMENT_ON_REPSITES +DBMS_REPCAT_MAS.CREATE_MASTER_REPGROUP +DBMS_REPCAT_MAS.CREATE_MASTER_REPOBJECT +DBMS_REPCAT_MAS.CREATE_REPCOLUMN_SOFT +DBMS_REPCAT_MAS.DO_DEFERRED_REPCAT_ADMIN +DBMS_REPCAT_MAS.DROP_MASTER_REPGROUP +DBMS_REPCAT_MAS.ENSURE_MASTERDEF +DBMS_REPCAT_MAS.EXECUTE_DDL +DBMS_REPCAT_MAS.GENERATE_MASTER_FLAVOR +DBMS_REPCAT_MAS.GENERATE_REPLICATION_PACKAGE +DBMS_REPCAT_MAS.GENERATE_REPLICATION_SUPPORT +DBMS_REPCAT_MAS.GENERATE_REPLICATION_TRIGGER +DBMS_REPCAT_MAS.GEN_REP_PKG_CALLBACK +DBMS_REPCAT_MAS.GEN_TRY_RESET_GEN_INT_STATUS +DBMS_REPCAT_MAS.GEN_TRY_RESET_GEN_STATUS +DBMS_REPCAT_MAS.GET_COMMIT_FREQUENCY +DBMS_REPCAT_MAS.INSERT_REPCAT_DESTINATIONS +DBMS_REPCAT_MAS.IS_IN +DBMS_REPCAT_MAS.IS_REMOTE_MASTER +DBMS_REPCAT_MAS.MASTER_COUNT +DBMS_REPCAT_MAS.PROPAGATE_DDL +DBMS_REPCAT_MAS.PROPAGATE_GEN +DBMS_REPCAT_MAS.PURGE_MASTER_LOG +DBMS_REPCAT_MAS.RELOCATE_MASTERDEF +DBMS_REPCAT_MAS.REMOVE_MASTERS +DBMS_REPCAT_MAS.REMOVE_MASTERS_MASTER +DBMS_REPCAT_MAS.REMOVE_MASTERS_MASTERDEF +DBMS_REPCAT_MAS.REMOVE_MASTER_DATABASES +DBMS_REPCAT_MAS.RENAME_SHADOW_COLUMN_GROUP +DBMS_REPCAT_MAS.REPCAT_IMPORT_REPSCHEMA +DBMS_REPCAT_MAS.RESOLVE_SNAME +DBMS_REPCAT_MAS.RESUME_MASTER_ACTIVITY +DBMS_REPCAT_MAS.SEND_AND_COMPARE_OLD_VALUES +DBMS_REPCAT_MAS.SET_COLUMNS +DBMS_REPCAT_MAS.SUSPEND_MASTER_ACTIVITY +DBMS_REPCAT_MAS.WAIT_MASTER_LOG +DBMS_REPCAT_MIG. +DBMS_REPCAT_MIG.CLEANUP_IMPORT +DBMS_REPCAT_MIG.POST_IMPORT +DBMS_REPCAT_MIG.PRE_IMPORT +DBMS_REPCAT_MIGRATION. +DBMS_REPCAT_MIGRATION.GENERATE_APPLY_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_CAPTURE_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_CMTS_AND_ASMPTNS +DBMS_REPCAT_MIGRATION.GENERATE_CONF_RESOL_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_INST_SCN_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_KEY_COLS_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_LOCAL_VARIABLES +DBMS_REPCAT_MIGRATION.GENERATE_PROPAGATION_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_QUEUE_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_SELECT_STATEMENTS +DBMS_REPCAT_MIGRATION.GENERATE_SITE_VARS +DBMS_REPCAT_MIGRATION.GENERATE_SUPPL_LOG_SETUP +DBMS_REPCAT_MIGRATION.GENERATE_TIMESTAMP_RESOL_CMT +DBMS_REPCAT_MIGRATION.GENERATE_UNSUPP_CONF_NOTE +DBMS_REPCAT_MIGRATION.GENERATE_UNSUPP_METHOD_NOTE +DBMS_REPCAT_MIGRATION.GENERATE_UNSUPP_SEQ_NOTE +DBMS_REPCAT_MIGRATION.GENERATE_UPDATE_CONF_HDLR +DBMS_REPCAT_MIGRATION.GENERATE_VARIABLES +DBMS_REPCAT_MIGRATION.GENERATE_WARNINGS +DBMS_REPCAT_MIGRATION.GET_MASTERS +DBMS_REPCAT_MIGRATION.GET_ONAMES_OWNERS +DBMS_REPCAT_MIGRATION.STREAMS_MIGRATION +DBMS_REPCAT_MIGRATION.SUPPL_LOG_COLUMN_GROUP_COLS +DBMS_REPCAT_MIGRATION.SUPPL_LOG_PRIMARY_KEY_COLS +DBMS_REPCAT_MIGRATION.SUPPL_LOG_SET_COLUMN_COLS +DBMS_REPCAT_MIGRATION.VALIDATE_GNAMES +DBMS_REPCAT_MIGRATION.VERIFY_GNAMES_QUIESCED +DBMS_REPCAT_MIG_INTERNAL. +DBMS_REPCAT_MIG_INTERNAL.ADD_FLAVOR_INFORMATION +DBMS_REPCAT_MIG_INTERNAL.ADD_GOWNER_INFORMATION +DBMS_REPCAT_MIG_INTERNAL.CHECK_CONSTRAINT_STATUS +DBMS_REPCAT_MIG_INTERNAL.DISABLE_ALL_CONSTRAINTS +DBMS_REPCAT_MIG_INTERNAL.DISABLE_CONSTRAINT +DBMS_REPCAT_MIG_INTERNAL.DROP_RECREATE_RLRP +DBMS_REPCAT_MIG_INTERNAL.DROP_RRRV +DBMS_REPCAT_MIG_INTERNAL.DROP_WHAT_AM_I +DBMS_REPCAT_MIG_INTERNAL.ENABLE_ALL_CONSTRAINTS +DBMS_REPCAT_MIG_INTERNAL.ENABLE_CONSTRAINT +DBMS_REPCAT_MIG_INTERNAL.FIX_GROUPED_COLUMN +DBMS_REPCAT_MIG_INTERNAL.FIX_PARAMETER_COLUMN +DBMS_REPCAT_MIG_INTERNAL.FIX_PROPAGATOR +DBMS_REPCAT_MIG_INTERNAL.FIX_REPCOLUMN +DBMS_REPCAT_MIG_INTERNAL.GENERATE_RECIPIENT_KEY +DBMS_REPCAT_MIG_INTERNAL.MISC_CLEANUP +DBMS_REPCAT_MIG_INTERNAL.POPULATE_REPCOLUMN +DBMS_REPCAT_MIG_INTERNAL.POST_IMPORT +DBMS_REPCAT_MIG_INTERNAL.RECOMPILE_PKG_PROCS +DBMS_REPCAT_MIG_INTERNAL.UPDATE_MLOG +DBMS_REPCAT_MIG_INTERNAL.UPDATE_RT_TP_ST +DBMS_REPCAT_MIG_INTERNAL.WRITE_TRACE +DBMS_REPCAT_OBJ_UTL. +DBMS_REPCAT_OBJ_UTL.ADD_KEY_COLUMN +DBMS_REPCAT_OBJ_UTL.COLUMN_EXISTS +DBMS_REPCAT_OBJ_UTL.COMPARE_STORAGE_TABLE_LIST +DBMS_REPCAT_OBJ_UTL.CONTAINS_INHERITANCE +DBMS_REPCAT_OBJ_UTL.CONVERT_CTYPEID_TO_CTYPE +DBMS_REPCAT_OBJ_UTL.ENSURE_DOUBLE_QUOTES +DBMS_REPCAT_OBJ_UTL.ENSURE_NO_ADTS +DBMS_REPCAT_OBJ_UTL.ENSURE_NO_ADTS_INTERNAL +DBMS_REPCAT_OBJ_UTL.ENSURE_TOP_COLUMNS +DBMS_REPCAT_OBJ_UTL.EXPLODE_COLUMNS +DBMS_REPCAT_OBJ_UTL.EXPLODE_COLUMNS_LIST +DBMS_REPCAT_OBJ_UTL.GET_COLL_STORAGE_TABLES +DBMS_REPCAT_OBJ_UTL.GET_COL_TOID +DBMS_REPCAT_OBJ_UTL.GET_HIDDEN_REF_LCNAME +DBMS_REPCAT_OBJ_UTL.GET_INTERNAL_CNAME +DBMS_REPCAT_OBJ_UTL.GET_LCNAME +DBMS_REPCAT_OBJ_UTL.GET_NT_LCNAME +DBMS_REPCAT_OBJ_UTL.GET_SUBCOLUMNS +DBMS_REPCAT_OBJ_UTL.GET_TOP_COLUMN +DBMS_REPCAT_OBJ_UTL.GET_TYPE_INFO +DBMS_REPCAT_OBJ_UTL.GET_UDT_TYPE_INFO +DBMS_REPCAT_OBJ_UTL.IS_ADT +DBMS_REPCAT_OBJ_UTL.IS_DOMAIN_INDEX +DBMS_REPCAT_OBJ_UTL.IS_FUNCTION_BASED_INDEX +DBMS_REPCAT_OBJ_UTL.IS_INDEX_ORGANIZED_TABLE +DBMS_REPCAT_OBJ_UTL.IS_INSTEAD_OF_TRIGGER +DBMS_REPCAT_OBJ_UTL.IS_NESTED_TABLE +DBMS_REPCAT_OBJ_UTL.IS_NESTED_TABLE_COLUMN +DBMS_REPCAT_OBJ_UTL.IS_OBJECT_TABLE +DBMS_REPCAT_OBJ_UTL.IS_OBJECT_VIEW +DBMS_REPCAT_OBJ_UTL.IS_PKREF +DBMS_REPCAT_OBJ_UTL.IS_SOIDREF_FK +DBMS_REPCAT_OBJ_UTL.IS_SOID_OBJECT_TABLE +DBMS_REPCAT_OBJ_UTL.IS_SSETID_NESTED_TABLE_COLUMN +DBMS_REPCAT_OBJ_UTL.LCNAME_TAB_TO_CNAME_TAB +DBMS_REPCAT_OBJ_UTL.NAME_ARRAY_TO_V30TAB +DBMS_REPCAT_OBJ_UTL.NAME_TO_LNAME +DBMS_REPCAT_OBJ_UTL.SYSCOL_PROP_TO_REPCOL_PROP +DBMS_REPCAT_OBJ_UTL.V30TAB_TO_NAME_ARRAY +DBMS_REPCAT_OUTPUT. +DBMS_REPCAT_OUTPUT.DELETE_OUTPUT +DBMS_REPCAT_OUTPUT.GET_OUTPUT_ID +DBMS_REPCAT_OUTPUT.MAKE_LOB_EMPTY +DBMS_REPCAT_OUTPUT.SETUP_OUTPUT +DBMS_REPCAT_OUTPUT.WRITE_OUTPUT +DBMS_REPCAT_OUTPUT.WRITE_OUTPUT_NO_SETUP +DBMS_REPCAT_OUTPUT.WRITE_OUTPUT_NO_SETUP_ARRAY +DBMS_REPCAT_RGT. +DBMS_REPCAT_RGT.ALTER_REFRESH_TEMPLATE +DBMS_REPCAT_RGT.ALTER_TEMPLATE_OBJECT +DBMS_REPCAT_RGT.ALTER_TEMPLATE_PARM +DBMS_REPCAT_RGT.ALTER_USER_AUTHORIZATION +DBMS_REPCAT_RGT.ALTER_USER_PARM_VALUE +DBMS_REPCAT_RGT.CHECK_DDL_TEXT +DBMS_REPCAT_RGT.CLOB_FROM_VC2 +DBMS_REPCAT_RGT.COMPARE_TEMPLATES +DBMS_REPCAT_RGT.COPY_TEMPLATE +DBMS_REPCAT_RGT.CREATE_OBJECT_FROM_EXISTING +DBMS_REPCAT_RGT.CREATE_REFRESH_TEMPLATE +DBMS_REPCAT_RGT.CREATE_TEMPLATE_OBJECT +DBMS_REPCAT_RGT.CREATE_TEMPLATE_PARM +DBMS_REPCAT_RGT.CREATE_USER_AUTHORIZATION +DBMS_REPCAT_RGT.CREATE_USER_PARM_VALUE +DBMS_REPCAT_RGT.DELETE_RUNTIME_PARMS +DBMS_REPCAT_RGT.DROP_ALL_OBJECTS +DBMS_REPCAT_RGT.DROP_ALL_TEMPLATES +DBMS_REPCAT_RGT.DROP_ALL_TEMPLATE_PARMS +DBMS_REPCAT_RGT.DROP_ALL_USER_AUTHORIZATIONS +DBMS_REPCAT_RGT.DROP_ALL_USER_PARM_VALUES +DBMS_REPCAT_RGT.DROP_REFRESH_TEMPLATE +DBMS_REPCAT_RGT.DROP_SITE_INSTANTIATION +DBMS_REPCAT_RGT.DROP_TEMPLATE_OBJECT +DBMS_REPCAT_RGT.DROP_TEMPLATE_PARM +DBMS_REPCAT_RGT.DROP_USER_AUTHORIZATION +DBMS_REPCAT_RGT.DROP_USER_PARM_VALUE +DBMS_REPCAT_RGT.GET_RUNTIME_PARM_ID +DBMS_REPCAT_RGT.INSERT_RUNTIME_PARMS +DBMS_REPCAT_RGT.INSTANTIATE_OFFLINE +DBMS_REPCAT_RGT.INSTANTIATE_OFFLINE_JAVA +DBMS_REPCAT_RGT.INSTANTIATE_OFFLINE_REPAPI +DBMS_REPCAT_RGT.INSTANTIATE_ONLINE +DBMS_REPCAT_RGT.LOCK_TEMPLATE_EXCLUSIVE +DBMS_REPCAT_RGT.LOCK_TEMPLATE_SHARED +DBMS_REPCAT_RGT.READ_CLOB +DBMS_REPCAT_RGT.SUBSTITUTE_PARAMETERS +DBMS_REPCAT_RGT.VC2_FROM_CLOB +DBMS_REPCAT_RGT_ALT. +DBMS_REPCAT_RGT_ALT.ALTER_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_ALT.ALTER_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_ALT.ALTER_TEMPLATE_PARM +DBMS_REPCAT_RGT_ALT.ALTER_USER_AUTHORIZATION +DBMS_REPCAT_RGT_ALT.ALTER_USER_PARM_VALUE +DBMS_REPCAT_RGT_ALT.COPY_TEMPLATE +DBMS_REPCAT_RGT_CHK. +DBMS_REPCAT_RGT_CHK.CHECK_DDL_TEXT +DBMS_REPCAT_RGT_CHK.CHECK_OBJECT_PARMS +DBMS_REPCAT_RGT_CHK.CHECK_OBJECT_TYPE +DBMS_REPCAT_RGT_CHK.CHECK_PARAMETER_NAME +DBMS_REPCAT_RGT_CHK.CHECK_PRIVATE_TEMPLATE +DBMS_REPCAT_RGT_CHK.CHECK_PUBLIC_TEMPLATE +DBMS_REPCAT_RGT_CHK.CHECK_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_CHK.CHECK_STATUS +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_NAME +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_PARM +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_SITE +DBMS_REPCAT_RGT_CHK.CHECK_TEMPLATE_USER +DBMS_REPCAT_RGT_CHK.CHECK_USER_AUTHORIZATION +DBMS_REPCAT_RGT_CHK.CHECK_USER_NAME +DBMS_REPCAT_RGT_CHK.CHECK_USER_PARM_VALUE +DBMS_REPCAT_RGT_CHK.GET_OCT_TYPE +DBMS_REPCAT_RGT_CHK.GET_TEMPLATE_NAME +DBMS_REPCAT_RGT_CHK.GET_TEMPLATE_USER +DBMS_REPCAT_RGT_CUST. +DBMS_REPCAT_RGT_CUST.COMPARE_TEMPLATES +DBMS_REPCAT_RGT_CUST.CREATE_OBJECT_FROM_EXISTING +DBMS_REPCAT_RGT_CUST.CREATE_ONE_REFRESH_GROUP +DBMS_REPCAT_RGT_CUST.DROP_ALL_OBJECTS +DBMS_REPCAT_RGT_CUST.DROP_ALL_TEMPLATES +DBMS_REPCAT_RGT_CUST.DROP_ALL_TEMPLATE_PARMS +DBMS_REPCAT_RGT_CUST.DROP_ALL_TEMPLATE_SITES +DBMS_REPCAT_RGT_CUST.DROP_ALL_USER_AUTHORIZATIONS +DBMS_REPCAT_RGT_CUST.DROP_ALL_USER_PARM_VALUES +DBMS_REPCAT_RGT_CUST.DUPL_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_CUST.DUPL_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_CUST.DUPL_TEMPLATE_PARM +DBMS_REPCAT_RGT_CUST.DUPL_TEMPLATE_SITE +DBMS_REPCAT_RGT_CUST.DUPL_USER_AUTHORIZATION +DBMS_REPCAT_RGT_CUST.DUPL_USER_PARM_VALUE +DBMS_REPCAT_RGT_CUST.GET_OUTPUT_ID +DBMS_REPCAT_RGT_CUST.LOCK_TEMPLATE_EXCLUSIVE +DBMS_REPCAT_RGT_CUST.LOCK_TEMPLATE_SHARED +DBMS_REPCAT_RGT_CUST.OFFLINE_SNAPSHOTS +DBMS_REPCAT_RGT_CUST.ONLINE_SNAPSHOTS +DBMS_REPCAT_RGT_CUST.PROCESS_PARAMETERS +DBMS_REPCAT_RGT_CUST.SUBSTITUTE_BY_TYPE +DBMS_REPCAT_RGT_CUST.SUBSTITUTE_PARMS_NO_VALS +DBMS_REPCAT_RGT_CUST.WRITE_OUTPUT +DBMS_REPCAT_RGT_CUST.WRITE_OUTPUT_NO_SETUP +DBMS_REPCAT_RGT_CUST.WRITE_OUTPUT_NO_SETUP_ARRAY +DBMS_REPCAT_RGT_CUST2. +DBMS_REPCAT_RGT_CUST2.CHECK_TEMPLATE_NAME +DBMS_REPCAT_RGT_CUST2.CREATE_TEMPLATE_SITE +DBMS_REPCAT_RGT_CUST2.DROP_SITE_INSTANTIATION +DBMS_REPCAT_RGT_CUST2.DROP_TEMPLATE_SITE +DBMS_REPCAT_RGT_CUST2.PROCESS_INSERT_STATEMENT +DBMS_REPCAT_RGT_EXP. +DBMS_REPCAT_RGT_EXP.ADD_SITE_INST +DBMS_REPCAT_RGT_EXP.SCHEMA_INFO_EXP +DBMS_REPCAT_RGT_UTL. +DBMS_REPCAT_RGT_UTL.CANONICALIZE +DBMS_REPCAT_RGT_UTL.CHECK_UNIQUE_OBJECT +DBMS_REPCAT_RGT_UTL.CREATE_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_UTL.CREATE_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_UTL.CREATE_TEMPLATE_PARM +DBMS_REPCAT_RGT_UTL.CREATE_TEMPLATE_SITE +DBMS_REPCAT_RGT_UTL.CREATE_USER_AUTHORIZATION +DBMS_REPCAT_RGT_UTL.CREATE_USER_PARM_VALUE +DBMS_REPCAT_RGT_UTL.DROP_REFRESH_TEMPLATE +DBMS_REPCAT_RGT_UTL.DROP_TEMPLATE_OBJECT +DBMS_REPCAT_RGT_UTL.DROP_TEMPLATE_PARM +DBMS_REPCAT_RGT_UTL.DROP_TEMPLATE_SITE +DBMS_REPCAT_RGT_UTL.DROP_USER_AUTHORIZATION +DBMS_REPCAT_RGT_UTL.DROP_USER_PARM_VALUE +DBMS_REPCAT_RGT_UTL.DROP_USER_TEMPLATES +DBMS_REPCAT_RGT_UTL.GET_CONS_NAME +DBMS_REPCAT_RGT_UTL.RAISE_ERROR +DBMS_REPCAT_RPC. +DBMS_REPCAT_RPC.ADD_REPCATLOG +DBMS_REPCAT_RPC.ADD_REPCATLOG_RC +DBMS_REPCAT_RPC.ADD_REPDDL +DBMS_REPCAT_RPC.ADD_REPDDL_RC +DBMS_REPCAT_RPC.ADD_REPGROUP +DBMS_REPCAT_RPC.ADD_REPGROUP_RC +DBMS_REPCAT_RPC.ADD_REPSITE +DBMS_REPCAT_RPC.ADD_REPSITE_RC +DBMS_REPCAT_RPC.CHANGE_EXTENSION_STATUS +DBMS_REPCAT_RPC.CHANGE_EXTENSION_STATUS_RC +DBMS_REPCAT_RPC.COMPARE_STORAGE_TABLE_LIST +DBMS_REPCAT_RPC.COMPARE_STORAGE_TABLE_LIST_RC +DBMS_REPCAT_RPC.COMPARE_TABLE_INFO +DBMS_REPCAT_RPC.COMPARE_TABLE_INFO_COMPAT +DBMS_REPCAT_RPC.COMPARE_TABLE_INFO_COMPAT_RC +DBMS_REPCAT_RPC.COMPARE_TABLE_INFO_RC +DBMS_REPCAT_RPC.COUNT_EARLIER +DBMS_REPCAT_RPC.COUNT_EARLIER_RC +DBMS_REPCAT_RPC.DB_COMPATIBILITY_RC +DBMS_REPCAT_RPC.FINISH_ADD_MASTER +DBMS_REPCAT_RPC.FINISH_ADD_MASTER_RC +DBMS_REPCAT_RPC.GEN_INT_END_CALLBACK +DBMS_REPCAT_RPC.GEN_INT_END_CALLBACK_RC +DBMS_REPCAT_RPC.GEN_REP_ENDPH2_CALLBACK +DBMS_REPCAT_RPC.GEN_REP_ENDPH2_CALLBACK_RC +DBMS_REPCAT_RPC.GEN_REP_PKG_CALLBACK +DBMS_REPCAT_RPC.GEN_REP_PKG_CALLBACK_RC +DBMS_REPCAT_RPC.GET_INDEXTYPE_INFO +DBMS_REPCAT_RPC.GET_INDEXTYPE_INFO_RC +DBMS_REPCAT_RPC.GET_INTERNAL_CNAME +DBMS_REPCAT_RPC.GET_INTERNAL_CNAME_RC +DBMS_REPCAT_RPC.GET_LOCAL_FLAVOR +DBMS_REPCAT_RPC.GET_LOCAL_FLAVOR_RC +DBMS_REPCAT_RPC.GET_OBJECT_SHAPE +DBMS_REPCAT_RPC.GET_OBJECT_SHAPE_RC +DBMS_REPCAT_RPC.GET_OPERATOR_INFO +DBMS_REPCAT_RPC.GET_OPERATOR_INFO_RC +DBMS_REPCAT_RPC.GET_PIECE_SHAPE +DBMS_REPCAT_RPC.GET_PIECE_SHAPE_COMPAT +DBMS_REPCAT_RPC.GET_PIECE_SHAPE_COMPAT_RC +DBMS_REPCAT_RPC.GET_PIECE_SHAPE_RC +DBMS_REPCAT_RPC.GET_STRUCTURAL_TYPE_INFO +DBMS_REPCAT_RPC.GET_STRUCTURAL_TYPE_INFO_RC +DBMS_REPCAT_RPC.GET_TYPE_INFO +DBMS_REPCAT_RPC.GET_TYPE_INFO_RC +DBMS_REPCAT_RPC.INSERT_DESTINATION +DBMS_REPCAT_RPC.INSERT_DESTINATION_RC +DBMS_REPCAT_RPC.IS_TABLESPACE +DBMS_REPCAT_RPC.IS_TABLESPACE_RC +DBMS_REPCAT_RPC.LOCK_REPGROUP +DBMS_REPCAT_RPC.LOCK_REPGROUP_RC +DBMS_REPCAT_RPC.MODIFY_REPCATLOG_INFO +DBMS_REPCAT_RPC.MODIFY_REPCATLOG_INFO_RC +DBMS_REPCAT_RPC.MODIFY_REPGROUP_INFO +DBMS_REPCAT_RPC.MODIFY_REPGROUP_INFO_RC +DBMS_REPCAT_RPC.MODIFY_REPOBJECT_INFO +DBMS_REPCAT_RPC.MODIFY_REPOBJECT_INFO_RC +DBMS_REPCAT_RPC.MODIFY_REPSITE_INFO +DBMS_REPCAT_RPC.MODIFY_REPSITE_INFO_RC +DBMS_REPCAT_RPC.NOTGENERATED_COUNT +DBMS_REPCAT_RPC.NOTGENERATED_COUNT_RC +DBMS_REPCAT_RPC.OK_TO_DROP_OBJECT +DBMS_REPCAT_RPC.OK_TO_DROP_OBJECT_RC +DBMS_REPCAT_RPC.PURGE_EXTENSION_REQUEST +DBMS_REPCAT_RPC.PURGE_EXTENSION_REQUEST_RC +DBMS_REPCAT_RPC.RELOCATE_MASTERDEF +DBMS_REPCAT_RPC.RELOCATE_MASTERDEF_RC +DBMS_REPCAT_RPC.REMOVE_REPCATLOG +DBMS_REPCAT_RPC.REMOVE_REPCATLOG_RC +DBMS_REPCAT_RPC.REMOVE_REPPROP +DBMS_REPCAT_RPC.REMOVE_REPPROP_RC +DBMS_REPCAT_RPC.REMOVE_REPSITE +DBMS_REPCAT_RPC.REMOVE_REPSITE_RC +DBMS_REPCAT_RPC.REPLICATION_VERSION_RC +DBMS_REPCAT_RPC.SET_DISABLED +DBMS_REPCAT_RPC.SET_DISABLED_RC +DBMS_REPCAT_RPC.SET_LOCAL_FLAVOR +DBMS_REPCAT_RPC.SET_LOCAL_FLAVOR_RC +DBMS_REPCAT_RPC.SUSPEND_MASTER_ACT_CALLBACK +DBMS_REPCAT_RPC.SUSPEND_MASTER_ACT_CALLBACK_RC +DBMS_REPCAT_RPC.TICKLE_JOB +DBMS_REPCAT_RPC.TICKLE_JOB_RC +DBMS_REPCAT_RPC.VALIDATE_GET_INFO +DBMS_REPCAT_RPC.VALIDATE_GET_INFO_RC +DBMS_REPCAT_RPC.VALIDATE_GET_NEXT_ERROR +DBMS_REPCAT_RPC.VALIDATE_GET_NEXT_ERROR_ALL +DBMS_REPCAT_RPC.VALIDATE_GET_NEXT_ERROR_ALL_RC +DBMS_REPCAT_RPC.VALIDATE_GET_NEXT_ERROR_RC +DBMS_REPCAT_RPC.VALIDATE_REMOTE +DBMS_REPCAT_RPC.VALIDATE_REMOTE_RC +DBMS_REPCAT_RPC_UTL. +DBMS_REPCAT_RPC_UTL.ADD_REPCATLOG +DBMS_REPCAT_RPC_UTL.ADD_REPDDL +DBMS_REPCAT_RPC_UTL.ADD_REPSITE +DBMS_REPCAT_RPC_UTL.MODIFY_REPSITE_INFO +DBMS_REPCAT_RPC_UTL.REMOVE_REPCATLOG +DBMS_REPCAT_RPC_UTL.REMOVE_REPSITE +DBMS_REPCAT_RQ. +DBMS_REPCAT_RQ.ADD_COLUMN +DBMS_REPCAT_RQ.CLOB_TO_TABLE +DBMS_REPCAT_RQ.PROCESS_AC_REQUEST +DBMS_REPCAT_SNA. +DBMS_REPCAT_SNA.ALTER_SNAPSHOT_PROPAGATION +DBMS_REPCAT_SNA.CREATE_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.CREATE_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA.CREATE_SNAPSHOT_REPSCHEMA +DBMS_REPCAT_SNA.DROP_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.DROP_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA.DROP_SNAPSHOT_REPSCHEMA +DBMS_REPCAT_SNA.GENERATE_SNAPSHOT_SUPPORT +DBMS_REPCAT_SNA.REFRESH_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.REFRESH_SNAPSHOT_REPSCHEMA +DBMS_REPCAT_SNA.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.REPCAT_IMPORT_CHECK +DBMS_REPCAT_SNA.SET_LOCAL_FLAVOR +DBMS_REPCAT_SNA.SWITCH_SNAPSHOT_MASTER +DBMS_REPCAT_SNA.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA.VALIDATE_FOR_LOCAL_FLAVOR +DBMS_REPCAT_SNA_INTERNAL. +DBMS_REPCAT_SNA_INTERNAL.ALTER_SNAPSHOT_PROPAGATION +DBMS_REPCAT_SNA_INTERNAL.CREATE_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_INTERNAL.CREATE_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA_INTERNAL.CREATE_SNAPSHOT_REPSCHEMA +DBMS_REPCAT_SNA_INTERNAL.DROP_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_INTERNAL.DROP_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA_INTERNAL.DROP_SNAPSHOT_REPSCHEMA +DBMS_REPCAT_SNA_INTERNAL.GENERATE_SNAPSHOT_SUPPORT +DBMS_REPCAT_SNA_INTERNAL.REFRESH_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_INTERNAL.REFRESH_SNAPSHOT_REPSCHEMA +DBMS_REPCAT_SNA_INTERNAL.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_INTERNAL.REPCAT_IMPORT_CHECK +DBMS_REPCAT_SNA_INTERNAL.SET_LOCAL_FLAVOR +DBMS_REPCAT_SNA_INTERNAL.SWITCH_SNAPSHOT_MASTER +DBMS_REPCAT_SNA_INTERNAL.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_INTERNAL.VALIDATE_FOR_LOCAL_FLAVOR +DBMS_REPCAT_SNA_UTL. +DBMS_REPCAT_SNA_UTL.ALTER_SNAPSHOT_PROPAGATION +DBMS_REPCAT_SNA_UTL.ARRAY_SUBSTITUTE +DBMS_REPCAT_SNA_UTL.CHECK_MASTER +DBMS_REPCAT_SNA_UTL.CHECK_REGISTRATION_PARAMS +DBMS_REPCAT_SNA_UTL.CHECK_REMOTE_GROUP +DBMS_REPCAT_SNA_UTL.CHECK_REMOTE_OBJECT +DBMS_REPCAT_SNA_UTL.CHECK_REMOTE_OBJECT_EXISTS +DBMS_REPCAT_SNA_UTL.CHECK_REMOTE_SCHEMA +DBMS_REPCAT_SNA_UTL.CONVERT_ID_TO_REASON +DBMS_REPCAT_SNA_UTL.COPY_COLUMN_GROUP +DBMS_REPCAT_SNA_UTL.CREATE_OBJECT +DBMS_REPCAT_SNA_UTL.CREATE_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_UTL.CREATE_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA_UTL.DROP_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_UTL.DROP_SNAPSHOT_REPOBJECT +DBMS_REPCAT_SNA_UTL.DROP_SNA_COLUMN_GROUP +DBMS_REPCAT_SNA_UTL.ENSURE_MASTER_QUALIFIER +DBMS_REPCAT_SNA_UTL.GENERATE_REPLICATION_SUPPORT +DBMS_REPCAT_SNA_UTL.GENERATE_SNAPSHOT_SUPPORT +DBMS_REPCAT_SNA_UTL.GENERATE_SUPPORT_PROCEDURAL +DBMS_REPCAT_SNA_UTL.GENERATE_SUPPORT_SNAPSHOT +DBMS_REPCAT_SNA_UTL.GET_MASTER +DBMS_REPCAT_SNA_UTL.GET_MASTER_QUALIFIER +DBMS_REPCAT_SNA_UTL.GET_NLS_CHAR +DBMS_REPCAT_SNA_UTL.INSERT_REMOTE_REPSCHEMA +DBMS_REPCAT_SNA_UTL.LOAD_DDL_TAB +DBMS_REPCAT_SNA_UTL.LOCAL_GENERATE_DDL +DBMS_REPCAT_SNA_UTL.PARSE_FOR_KEYWORD +DBMS_REPCAT_SNA_UTL.PARSE_FOR_LINK +DBMS_REPCAT_SNA_UTL.PING +DBMS_REPCAT_SNA_UTL.PROPAGATION_METHOD +DBMS_REPCAT_SNA_UTL.PULL_MASTER_OBJECT +DBMS_REPCAT_SNA_UTL.PUT_LONG_IN_TABLE +DBMS_REPCAT_SNA_UTL.RECORD_SNAPSHOT_REPPROP +DBMS_REPCAT_SNA_UTL.REFRESH_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_UTL.REFRESH_SOURCE +DBMS_REPCAT_SNA_UTL.REGISTER_FLAVOR_CHANGE +DBMS_REPCAT_SNA_UTL.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SNA_UTL.REMOTE_GENERATE_DDL +DBMS_REPCAT_SNA_UTL.REMOVE_GENOBJECT +DBMS_REPCAT_SNA_UTL.REPCAT_IMPORT_CHECK +DBMS_REPCAT_SNA_UTL.REQUEST_GROUP_REFRESH +DBMS_REPCAT_SNA_UTL.SNAPSHOT_IS_UPDATABLE +DBMS_REPCAT_SNA_UTL.SNAPSHOT_MODIFY_DDL +DBMS_REPCAT_SNA_UTL.SWITCH_SNAPSHOT_MASTER +DBMS_REPCAT_SNA_UTL.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_SQL_UTL. +DBMS_REPCAT_SQL_UTL.ADD_CLOB_TO_TABLE +DBMS_REPCAT_SQL_UTL.ADD_STMT_TO_MULTISTMT_TABLE +DBMS_REPCAT_SQL_UTL.ADD_VARCHAR2_TO_TABLE +DBMS_REPCAT_SQL_UTL.CHANGE_NLS_LENGTH_SEMANTICS +DBMS_REPCAT_SQL_UTL.DO_ARRAY_DDL +DBMS_REPCAT_SQL_UTL.DO_DDL +DBMS_REPCAT_SQL_UTL.DO_MULTIPLE_DDLS +DBMS_REPCAT_SQL_UTL.DO_SQL +DBMS_REPCAT_SQL_UTL.GET_MAX_BYTES_PER_CHAR +DBMS_REPCAT_SQL_UTL.PARSE_DDL +DBMS_REPCAT_SQL_UTL.RESTORE_NLS_LENGTH_SEMANTICS +DBMS_REPCAT_UNTRUSTED. +DBMS_REPCAT_UNTRUSTED.COMPARE_FLAVORS +DBMS_REPCAT_UNTRUSTED.DB_COMPATIBILITY +DBMS_REPCAT_UNTRUSTED.REGISTER_SNAPSHOT +DBMS_REPCAT_UNTRUSTED.REGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_UNTRUSTED.REPLICATION_VERSION +DBMS_REPCAT_UNTRUSTED.UNREGISTER_SNAPSHOT +DBMS_REPCAT_UNTRUSTED.UNREGISTER_SNAPSHOT_REPGROUP +DBMS_REPCAT_UTL. +DBMS_REPCAT_UTL.ADD_GENOBJECT +DBMS_REPCAT_UTL.ADD_GROUPED_COLUMN +DBMS_REPCAT_UTL.ADD_OBJECT_TO_TOP_FLAVOR +DBMS_REPCAT_UTL.ADD_PARAMETER_COLUMN +DBMS_REPCAT_UTL.ADD_REPCOLUMN +DBMS_REPCAT_UTL.ADD_REPGROUP +DBMS_REPCAT_UTL.ADD_REPOBJECT +DBMS_REPCAT_UTL.ADD_REPPROP +DBMS_REPCAT_UTL.CANONICALIZE +DBMS_REPCAT_UTL.CANONICALIZE_MASTER +DBMS_REPCAT_UTL.CANONICALIZE_OLD +DBMS_REPCAT_UTL.CAPTURE_ERROR_MESSAGE +DBMS_REPCAT_UTL.CHECK_QUIESCE +DBMS_REPCAT_UTL.CHECK_REPGRP_INFO +DBMS_REPCAT_UTL.CHECK_SEQUENCE_VALUE +DBMS_REPCAT_UTL.COMMENT_ON_REPSITES +DBMS_REPCAT_UTL.CONSTRUCT_LOCAL_TOP_FLAVOR +DBMS_REPCAT_UTL.CONVERT_CONF_TYPE_TO_ID +DBMS_REPCAT_UTL.CONVERT_DATATYPE_TO_ID +DBMS_REPCAT_UTL.CONVERT_FLAVOR_TO_ID +DBMS_REPCAT_UTL.CONVERT_ID_TO_FLAVOR +DBMS_REPCAT_UTL.CONVERT_ID_TO_TYPE +DBMS_REPCAT_UTL.CONVERT_PROPAGATE_TO_ID +DBMS_REPCAT_UTL.CONVERT_REASON_TO_ID +DBMS_REPCAT_UTL.CONVERT_TRANSACTIONS_TO_D +DBMS_REPCAT_UTL.CONVERT_TYPE_TO_ID +DBMS_REPCAT_UTL.CONVERT_USER_TO_ID +DBMS_REPCAT_UTL.COPY_COLUMN_GROUP +DBMS_REPCAT_UTL.COPY_FLAVORS +DBMS_REPCAT_UTL.COPY_GENERATE +DBMS_REPCAT_UTL.COPY_KEY_COLUMNS +DBMS_REPCAT_UTL.COPY_REPFLAVOR_OBJECTS +DBMS_REPCAT_UTL.CREATE_REPCOLUMN +DBMS_REPCAT_UTL.DB_COMPATIBILITY +DBMS_REPCAT_UTL.DEFAULT_FUNCTION_NAME +DBMS_REPCAT_UTL.DELETE_AND_COUNT +DBMS_REPCAT_UTL.DESTROY_INTERNAL_TRIGGER +DBMS_REPCAT_UTL.DONT_NEED_RPRL +DBMS_REPCAT_UTL.DROP_AN_OBJECT +DBMS_REPCAT_UTL.DROP_REPGROUP +DBMS_REPCAT_UTL.DROP_SCHEMA +DBMS_REPCAT_UTL.DROP_USER_REPSCHEMA +DBMS_REPCAT_UTL.DUMP_TRACE +DBMS_REPCAT_UTL.END_OF_CREATE +DBMS_REPCAT_UTL.ENSURE_GROUP +DBMS_REPCAT_UTL.ENSURE_IN_LOCAL_TOP_FLAVOR +DBMS_REPCAT_UTL.ENSURE_LOCAL_FLAVOR +DBMS_REPCAT_UTL.ENSURE_OBJECT_EXISTS +DBMS_REPCAT_UTL.ENSURE_QUIESCED_NO_SNAP +DBMS_REPCAT_UTL.ENSURE_REPGROUP_QUIESCED +DBMS_REPCAT_UTL.ENSURE_USERNAME +DBMS_REPCAT_UTL.FINISH_ADD_MASTER +DBMS_REPCAT_UTL.FLAVOR_CHANGE_DDL +DBMS_REPCAT_UTL.FLAVOR_DOMINATES +DBMS_REPCAT_UTL.FOLLOW_SYNONYM_CHAIN +DBMS_REPCAT_UTL.GENERATE_SYN_WRAP +DBMS_REPCAT_UTL.GENERATE_WHAT_AM_I +DBMS_REPCAT_UTL.GENERATE_WRAP_PKG +DBMS_REPCAT_UTL.GENERATE_WRAP_PROC +DBMS_REPCAT_UTL.GET_CLONE_COMMIT_FREQUENCY +DBMS_REPCAT_UTL.GET_FLAVOR_TRIGGER +DBMS_REPCAT_UTL.GET_GENERATED_OBJECT +DBMS_REPCAT_UTL.GET_GEN_REPLICATION_SUPPORT +DBMS_REPCAT_UTL.GET_GLOBAL_NAME +DBMS_REPCAT_UTL.GET_GROUP_LOCAL_NODE +DBMS_REPCAT_UTL.GET_GROUP_NAME +DBMS_REPCAT_UTL.GET_LOCAL_FLAVOR +DBMS_REPCAT_UTL.GET_LOCAL_FLAVOR_ID +DBMS_REPCAT_UTL.GET_MIN_COMMUNICATION +DBMS_REPCAT_UTL.GET_MIN_COM_VERSION +DBMS_REPCAT_UTL.GET_MV_BASE_SNAME_AND_ONAME +DBMS_REPCAT_UTL.GET_NLS_PREFIX +DBMS_REPCAT_UTL.GET_NLS_SUBSTR +DBMS_REPCAT_UTL.GET_OBJECT_FLAG +DBMS_REPCAT_UTL.GET_OBJECT_STATUS +DBMS_REPCAT_UTL.GET_OBJGEN_TABLE +DBMS_REPCAT_UTL.GET_QUALIFIER +DBMS_REPCAT_UTL.GET_REMOTE_REPGROUP_OWNER +DBMS_REPCAT_UTL.GET_REPCOLUMN_FIX_INFO +DBMS_REPCAT_UTL.GET_REPCOLUMN_FLAG +DBMS_REPCAT_UTL.GET_REPCOLUMN_INFO +DBMS_REPCAT_UTL.GET_REPCOLUMN_INFO_SOFT +DBMS_REPCAT_UTL.GET_SNAPSHOT_BASE_TNAME +DBMS_REPCAT_UTL.GET_TOP_FLAVOR_ID +DBMS_REPCAT_UTL.GET_TRANSPARENT_SYNONYM +DBMS_REPCAT_UTL.GET_UNUSED_NAME +DBMS_REPCAT_UTL.GRANT_EXECUTE_ON_WRAPPER +DBMS_REPCAT_UTL.INITIALIZE_TOP_FLAVOR +DBMS_REPCAT_UTL.INSERT_DESTINATION +DBMS_REPCAT_UTL.INVALIDATE_CACHE +DBMS_REPCAT_UTL.IS_ENTERPRISE_EDITION +DBMS_REPCAT_UTL.IS_GENERATED_OBJECT +DBMS_REPCAT_UTL.IS_GENERATED_OBJ_PURGABLE +DBMS_REPCAT_UTL.IS_IN_REPCAT +DBMS_REPCAT_UTL.IS_IN_SYNONYM_NAMESPACE +DBMS_REPCAT_UTL.IS_MASTER +DBMS_REPCAT_UTL.IS_MASTERDEF +DBMS_REPCAT_UTL.IS_PUBLIC_SYNONYM +DBMS_REPCAT_UTL.IS_REP_SUPPORT_GENERATED +DBMS_REPCAT_UTL.IS_SCHEMA +DBMS_REPCAT_UTL.IS_SNAPSHOT +DBMS_REPCAT_UTL.IS_TOP_FLAVOR_NAME +DBMS_REPCAT_UTL.IS_TRACE_ON +DBMS_REPCAT_UTL.I_CAN_PING +DBMS_REPCAT_UTL.LOCK_REPGROUP +DBMS_REPCAT_UTL.MIN_REP_VERSION +DBMS_REPCAT_UTL.MIN_UPDATE_VERSION +DBMS_REPCAT_UTL.MODIFY_GENOBJECT_INFO +DBMS_REPCAT_UTL.MODIFY_REPCATLOG_INFO +DBMS_REPCAT_UTL.MODIFY_REPCAT_INFO +DBMS_REPCAT_UTL.MODIFY_REPCOLUMN_INFO +DBMS_REPCAT_UTL.MODIFY_REPGROUP_INFO +DBMS_REPCAT_UTL.MODIFY_REPOBJECT_INFO +DBMS_REPCAT_UTL.MODIFY_REPPROP_INFO +DBMS_REPCAT_UTL.NOTGENERATED_COUNT +DBMS_REPCAT_UTL.OBJECT_EXISTS +DBMS_REPCAT_UTL.OBJECT_IN_FLAVOR +DBMS_REPCAT_UTL.PERMIT_PING +DBMS_REPCAT_UTL.RECORD_GENERATED_OBJECT +DBMS_REPCAT_UTL.REMOTE_IS_SNAPGROUP +DBMS_REPCAT_UTL.REMOVE_CONFLICT_INFO +DBMS_REPCAT_UTL.REMOVE_REPCOLUMN +DBMS_REPCAT_UTL.REMOVE_REPGROUP +DBMS_REPCAT_UTL.REMOVE_REPOBJECT +DBMS_REPCAT_UTL.REPCOLUMN_EXISTS +DBMS_REPCAT_UTL.REPLICATION_VERSION +DBMS_REPCAT_UTL.REPSCHEMA_STATUS +DBMS_REPCAT_UTL.RESOLVE_NAME +DBMS_REPCAT_UTL.SET_CLONE_COMMIT_FREQUENCY +DBMS_REPCAT_UTL.SET_COMMIT_FREQUENCY +DBMS_REPCAT_UTL.SET_DEFERGEN_TABLE +DBMS_REPCAT_UTL.SET_FLAVOR_TRIGGER +DBMS_REPCAT_UTL.SET_GEN_REPLICATION_SUPPORT +DBMS_REPCAT_UTL.SET_LOCAL_FLAVOR +DBMS_REPCAT_UTL.SET_MIN_COMMUNICATION +DBMS_REPCAT_UTL.SET_OBJGEN_TABLE +DBMS_REPCAT_UTL.SET_REPCOLUMN_FLAG +DBMS_REPCAT_UTL.SLOW_DOWN +DBMS_REPCAT_UTL.STRINGS_EQUAL +DBMS_REPCAT_UTL.SUSPEND_MASTER_ACT_CALLBACK +DBMS_REPCAT_UTL.SYNC_UP_GROUPED_COLUMN +DBMS_REPCAT_UTL.SYNC_UP_PARAMETER_COLUMN +DBMS_REPCAT_UTL.TRANSPARENT_SYNONYMS +DBMS_REPCAT_UTL.UNCL_TO_DBLINK +DBMS_REPCAT_UTL.UNCL_TO_NAME +DBMS_REPCAT_UTL.VERIFY_LOCAL_FLAVOR +DBMS_REPCAT_UTL.WRITE_TRACE +DBMS_REPCAT_UTL2.CHECK_OBJECT_SHAPE +DBMS_REPCAT_UTL2.COMMA_TO_TABLE +DBMS_REPCAT_UTL2.COMPARE_TABLE_INFO +DBMS_REPCAT_UTL2.COMPARE_TABLE_INFO_COMPAT +DBMS_REPCAT_UTL2.COMPARE_TABLE_INFO_WORKER +DBMS_REPCAT_UTL2.GET_OBJECT_SHAPE +DBMS_REPCAT_UTL2.GET_PIECE_SHAPE +DBMS_REPCAT_UTL2.GET_PIECE_SHAPE_COMPAT +DBMS_REPCAT_UTL2.GET_PIECE_SHAPE_WORKER +DBMS_REPCAT_UTL2.GET_TABLE_INFO +DBMS_REPCAT_UTL2.GET_TABLE_INFO_COMPAT +DBMS_REPCAT_UTL2.GET_TABLE_INFO_WORKER +DBMS_REPCAT_UTL2.REPLICATION_VERSION +DBMS_REPCAT_UTL2.SET_CHECK_NUMROWS +DBMS_REPCAT_UTL3. +DBMS_REPCAT_UTL3.BAD_REQUEST +DBMS_REPCAT_UTL3.COUNT_ASYNC_DESTS +DBMS_REPCAT_UTL3.COUNT_EARLIER +DBMS_REPCAT_UTL3.CREATE_MASTER_REPOBJECT_MASTER +DBMS_REPCAT_UTL3.DECODE_BOOL +DBMS_REPCAT_UTL3.DELETE_MASTERDEF_LOGREC +DBMS_REPCAT_UTL3.DISABLE_RPC_PROCESSING +DBMS_REPCAT_UTL3.DO_CALLBACK +DBMS_REPCAT_UTL3.DROP_REPOBJECT +DBMS_REPCAT_UTL3.DROP_REPOBJECTS +DBMS_REPCAT_UTL3.ENABLE_RPC_PROCESSING +DBMS_REPCAT_UTL3.END_OF_ALTER +DBMS_REPCAT_UTL3.EXECUTE_DDL_MASTER +DBMS_REPCAT_UTL3.FINISH_ADD_MASTER_MASTERDEF +DBMS_REPCAT_UTL3.GENERATE_SUPPORT_HERE +DBMS_REPCAT_UTL3.GEN_ALL_PH2_OBJS +DBMS_REPCAT_UTL3.GEN_PKG_SUPPORT_TABLE +DBMS_REPCAT_UTL3.GET_FLAVOR_COLUMNS +DBMS_REPCAT_UTL3.GET_GROUP_AND_FLAVOR +DBMS_REPCAT_UTL3.GET_KEY_COLUMNS +DBMS_REPCAT_UTL3.GET_NEXT_ELEM +DBMS_REPCAT_UTL3.IS_FLAVOR_PUBLISHED +DBMS_REPCAT_UTL3.IS_TEMPORARY_TABLE +DBMS_REPCAT_UTL3.IS_TOP_FLAVOR_ID +DBMS_REPCAT_UTL3.LOGREC_DISPATCH +DBMS_REPCAT_UTL3.OK_TO_DROP_OBJECT +DBMS_REPCAT_UTL3.REGENERATE_PH2_OBJS +DBMS_REPCAT_UTL3.REP_SET_GEN_STATUS +DBMS_REPCAT_UTL3.REP_SET_GEN_STATUS_ANY +DBMS_REPCAT_UTL3.REP_SET_GEN_STATUS_ANY_TMP +DBMS_REPCAT_UTL3.REP_SET_GEN_STATUS_TMP +DBMS_REPCAT_UTL3.RESUME_MASTER_ACTIVITY_MASTER +DBMS_REPCAT_UTL3.RETRY_NEEDED +DBMS_REPCAT_UTL3.VARCHAR2S_TO_LNAME_ARRAY +DBMS_REPCAT_UTL4. +DBMS_REPCAT_UTL4.CHECK_SYNONYM_REMOTE +DBMS_REPCAT_UTL4.COMPARE_INDEXTYPES +DBMS_REPCAT_UTL4.COMPARE_OPERATORS +DBMS_REPCAT_UTL4.COMPARE_SOURCE +DBMS_REPCAT_UTL4.COMPARE_TABLES +DBMS_REPCAT_UTL4.COMPARE_TRIGGERS +DBMS_REPCAT_UTL4.COMPARE_TYPES +DBMS_REPCAT_UTL4.COMPARE_TYPE_STRUCTURE +DBMS_REPCAT_UTL4.COMPARE_VIEWS +DBMS_REPCAT_UTL4.COMPATIBLE_OBJECTS +DBMS_REPCAT_UTL4.DBLINK_TO_NAME +DBMS_REPCAT_UTL4.DECODE_STRING +DBMS_REPCAT_UTL4.DELETE_MASTER +DBMS_REPCAT_UTL4.DO_MASTERDEF_ALTER +DBMS_REPCAT_UTL4.DO_MASTERDEF_CREATE +DBMS_REPCAT_UTL4.DO_MASTERDEF_DDL +DBMS_REPCAT_UTL4.DROP_MASTER_REPOBJECT +DBMS_REPCAT_UTL4.DROP_MASTER_REPOBJ_MASTERDEF +DBMS_REPCAT_UTL4.ENCODE_BOOL +DBMS_REPCAT_UTL4.ENCODE_STRINGS +DBMS_REPCAT_UTL4.ENSURE_GROUP_QUALIFIER +DBMS_REPCAT_UTL4.ENSURE_MASTER +DBMS_REPCAT_UTL4.ENSURE_MASTERS +DBMS_REPCAT_UTL4.EXECUTE_REMOTE_INTENTIONS +DBMS_REPCAT_UTL4.EXTENSION_STATUS_NAME +DBMS_REPCAT_UTL4.GEN_INT_END_CALLBACK +DBMS_REPCAT_UTL4.GEN_REP_ENDPH2_CALLBACK +DBMS_REPCAT_UTL4.GEN_REP_PKG_CALLBACK +DBMS_REPCAT_UTL4.GET_ADMIN_LOCK +DBMS_REPCAT_UTL4.GET_DDL +DBMS_REPCAT_UTL4.GET_DDLS +DBMS_REPCAT_UTL4.GET_INDEXTYPE_INFO +DBMS_REPCAT_UTL4.GET_OPERATOR_INFO +DBMS_REPCAT_UTL4.GET_STRUCTURAL_TYPE_INFO +DBMS_REPCAT_UTL4.INCOMPLETE_MASTERDEF_REQUEST +DBMS_REPCAT_UTL4.INCOMPLETE_REQUEST +DBMS_REPCAT_UTL4.IN_COUNT +DBMS_REPCAT_UTL4.IS_IN +DBMS_REPCAT_UTL4.IS_TABLESPACE +DBMS_REPCAT_UTL4.MASTERDEF_PREFIX +DBMS_REPCAT_UTL4.MCAST_INTENTION +DBMS_REPCAT_UTL4.NAME_CONFLICT_EXISTS +DBMS_REPCAT_UTL4.ORDER_USER_OBJECTS +DBMS_REPCAT_UTL4.PARTITION_BY_TWO_VERSIONS +DBMS_REPCAT_UTL4.PARTITION_BY_VERSION +DBMS_REPCAT_UTL4.PROTECT +DBMS_REPCAT_UTL4.RECORD_NONMASTERDEF +DBMS_REPCAT_UTL4.REMOTE_MASTERDEF_CHECK +DBMS_REPCAT_UTL4.REMOVE_REPPROP +DBMS_REPCAT_UTL4.RENAME_SHADOW_GROUP_FROM_MAS +DBMS_REPCAT_UTL4.RENAME_SHADOW_GROUP_MAS +DBMS_REPCAT_UTL4.REPCAT_DO_DEFERRED +DBMS_REPCAT_UTL4.RESUME_MASTER_ACT_MASTERDEF +DBMS_REPCAT_UTL4.STRING_APPEND +DBMS_REPCAT_UTL4.STRIP +DBMS_REPCAT_UTL4.SUPPORTED_VERSION +DBMS_REPCAT_UTL4.SUSPEND_MASTER_ACT_MASTERDEF +DBMS_REPCAT_UTL4.TICKLE_JOB +DBMS_REPCAT_UTL4.UPDATE_MASTERDEF_LOGREC +DBMS_REPCAT_UTL4.VERIFY_COLUMN_TYPES +DBMS_REPCAT_VALIDATE. +DBMS_REPCAT_VALIDATE.VALIDATE +DBMS_REPCAT_VALIDATE.VALIDATE_FLAG_ERROR +DBMS_REPCAT_VALIDATE.VALIDATE_GET_ERROR +DBMS_REPCAT_VALIDATE.VALIDATE_GET_INFO +DBMS_REPCAT_VALIDATE.VALIDATE_GET_NEXT_ERROR +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_GENERATED +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_LINKS +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_LINKS_SCHED +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_OBJECTS +DBMS_REPCAT_VALIDATE.VALIDATE_GRP_OBJECTS_LOCAL +DBMS_REPORT. +DBMS_REPORT.BUILD_GENERIC_TAG +DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT +DBMS_REPORT.BUILD_REPORT_REFERENCE_VARG +DBMS_REPORT.CLEAR_FRAMEWORK +DBMS_REPORT.FORMAT_MESSAGE +DBMS_REPORT.FORMAT_REPORT +DBMS_REPORT.GET_AWR_CONTEXT +DBMS_REPORT.GET_IMPORTED_REPORT_ATTRS +DBMS_REPORT.GET_PARAM +DBMS_REPORT.GET_REPORT +DBMS_REPORT.GET_REPORT_WITH_SUMMARY +DBMS_REPORT.GET_SNAP_ID +DBMS_REPORT.GET_TIMING_INFO +DBMS_REPORT.GZIP_REPORT_XML +DBMS_REPORT.LOOKUP_COMPONENT_ID +DBMS_REPORT.LOOKUP_REPORT_ID +DBMS_REPORT.PARSE_REPORT_REFERENCE +DBMS_REPORT.REGISTER_COMPONENT +DBMS_REPORT.REGISTER_CUSTOM_FORMAT +DBMS_REPORT.REGISTER_REPORT +DBMS_REPORT.REGISTER_SWF +DBMS_REPORT.REGISTER_TEXT_FORMAT +DBMS_REPORT.REGISTER_XSLT_FORMAT +DBMS_REPORT.RESTORE_REPORT_ENV +DBMS_REPORT.SETUP_REPORT_ENV +DBMS_REPORT.TRANSFORM_HTML_TO_TEXT +DBMS_REPORT.TRANSFORM_REPORT_XML +DBMS_REPORT.VALIDATE_REPORT +DBMS_REPORT.ZLIB2BASE64_CLOB +DBMS_REPORT.ZLIB2BASE64_REPORT_XML +DBMS_REPUTIL. +DBMS_REPUTIL.ADDITIVE +DBMS_REPUTIL.APPEND_SEQUENCE +DBMS_REPUTIL.APPEND_SEQUENCE_NC +DBMS_REPUTIL.APPEND_SITE_NAME +DBMS_REPUTIL.APPEND_SITE_NAME_NC +DBMS_REPUTIL.AVERAGE +DBMS_REPUTIL.CANONICALIZE +DBMS_REPUTIL.DISCARD +DBMS_REPUTIL.ENSURE_NORMAL_STATUS +DBMS_REPUTIL.ENTER_STATISTICS +DBMS_REPUTIL.FROM_REMOTE +DBMS_REPUTIL.GET_CONSTRAINT_NAME +DBMS_REPUTIL.GLOBAL_NAME +DBMS_REPUTIL.IMPORT_REP_TRIGGER_STRING +DBMS_REPUTIL.MAKE_INTERNAL_PKG +DBMS_REPUTIL.MAXIMUM +DBMS_REPUTIL.MINIMUM +DBMS_REPUTIL.OVERWRITE +DBMS_REPUTIL.RAW_TO_VARCHAR2 +DBMS_REPUTIL.RECURSION_OFF +DBMS_REPUTIL.RECURSION_ON +DBMS_REPUTIL.REPLICATION_IS_ON +DBMS_REPUTIL.REPLICATION_OFF +DBMS_REPUTIL.REPLICATION_ON +DBMS_REPUTIL.REP_BEGIN +DBMS_REPUTIL.REP_END +DBMS_REPUTIL.SET_GLOBAL_NAME +DBMS_REPUTIL.SYNC_UP_REP +DBMS_REPUTIL2. +DBMS_REPUTIL2.BIC +DBMS_REPUTIL2.BIS +DBMS_REPUTIL2.BIT +DBMS_REPUTIL2.CHOOSE_BLOB +DBMS_REPUTIL2.CHOOSE_CHAR +DBMS_REPUTIL2.CHOOSE_CLOB +DBMS_REPUTIL2.CHOOSE_DATE +DBMS_REPUTIL2.CHOOSE_NCHAR +DBMS_REPUTIL2.CHOOSE_NCLOB +DBMS_REPUTIL2.CHOOSE_NUMBER +DBMS_REPUTIL2.CHOOSE_NVARCHAR2 +DBMS_REPUTIL2.CHOOSE_RAW +DBMS_REPUTIL2.CHOOSE_ROWID +DBMS_REPUTIL2.CHOOSE_VARCHAR2 +DBMS_REPUTIL2.GET_FINAL_BLOB +DBMS_REPUTIL2.GET_FINAL_CHAR +DBMS_REPUTIL2.GET_FINAL_CLOB +DBMS_REPUTIL2.GET_FINAL_DATE +DBMS_REPUTIL2.GET_FINAL_LOB +DBMS_REPUTIL2.GET_FINAL_NUMBER +DBMS_REPUTIL2.GET_FINAL_RAW +DBMS_REPUTIL2.GET_FINAL_ROWID +DBMS_REPUTIL2.GET_FINAL_VARCHAR2 +DBMS_REPUTIL2.OLD_BLOB_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_BLOB_EQUALS_NEW +DBMS_REPUTIL2.OLD_BLOB_EQ_CURRENT +DBMS_REPUTIL2.OLD_BLOB_EQ_NEW +DBMS_REPUTIL2.OLD_CHAR_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_CHAR_EQUALS_NEW +DBMS_REPUTIL2.OLD_CHAR_EQ_CURRENT +DBMS_REPUTIL2.OLD_CHAR_EQ_NEW +DBMS_REPUTIL2.OLD_CLOB_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_CLOB_EQUALS_NEW +DBMS_REPUTIL2.OLD_CLOB_EQ_CURRENT +DBMS_REPUTIL2.OLD_CLOB_EQ_NEW +DBMS_REPUTIL2.OLD_DATE_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_DATE_EQUALS_NEW +DBMS_REPUTIL2.OLD_DATE_EQ_CURRENT +DBMS_REPUTIL2.OLD_DATE_EQ_NEW +DBMS_REPUTIL2.OLD_NUMBER_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_NUMBER_EQUALS_NEW +DBMS_REPUTIL2.OLD_NUMBER_EQ_CURRENT +DBMS_REPUTIL2.OLD_NUMBER_EQ_NEW +DBMS_REPUTIL2.OLD_RAW_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_RAW_EQUALS_NEW +DBMS_REPUTIL2.OLD_RAW_EQ_CURRENT +DBMS_REPUTIL2.OLD_RAW_EQ_NEW +DBMS_REPUTIL2.OLD_ROWID_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_ROWID_EQUALS_NEW +DBMS_REPUTIL2.OLD_ROWID_EQ_CURRENT +DBMS_REPUTIL2.OLD_ROWID_EQ_NEW +DBMS_REPUTIL2.OLD_VARCHAR2_EQUALS_CURRENT +DBMS_REPUTIL2.OLD_VARCHAR2_EQUALS_NEW +DBMS_REPUTIL2.OLD_VARCHAR2_EQ_CURRENT +DBMS_REPUTIL2.OLD_VARCHAR2_EQ_NEW +DBMS_RESCONFIG. +DBMS_RESCONFIG.ADDREPOSITORYRESCONFIG +DBMS_RESCONFIG.ADDRESCONFIG +DBMS_RESCONFIG.APPENDRESCONFIG +DBMS_RESCONFIG.DELETEREPOSITORYRESCONFIG +DBMS_RESCONFIG.DELETERESCONFIG +DBMS_RESCONFIG.GETLISTENERS +DBMS_RESCONFIG.GETREPOSITORYRESCONFIG +DBMS_RESCONFIG.GETREPOSITORYRESCONFIGPATHS +DBMS_RESCONFIG.GETRESCONFIG +DBMS_RESCONFIG.GETRESCONFIGPATHS +DBMS_RESOURCE_MANAGER. +DBMS_RESOURCE_MANAGER.BEGIN_SQL_BLOCK +DBMS_RESOURCE_MANAGER.CALIBRATE_IO +DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA +DBMS_RESOURCE_MANAGER.CREATE_CATEGORY +DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN +DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE +DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA +DBMS_RESOURCE_MANAGER.CREATE_PLAN +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN +DBMS_RESOURCE_MANAGER.DELETE_CATEGORY +DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN +DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.DELETE_CDB_PROFILE_DIRECTIVE +DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.DELETE_PLAN +DBMS_RESOURCE_MANAGER.DELETE_PLAN_CASCADE +DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.END_SQL_BLOCK +DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING +DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING_PRI +DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA +DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS +DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_USER +DBMS_RESOURCE_MANAGER.SWITCH_PLAN +DBMS_RESOURCE_MANAGER.UPDATE_CATEGORY +DBMS_RESOURCE_MANAGER.UPDATE_CDB_AUTOTASK_DIRECTIVE +DBMS_RESOURCE_MANAGER.UPDATE_CDB_DEFAULT_DIRECTIVE +DBMS_RESOURCE_MANAGER.UPDATE_CDB_PLAN +DBMS_RESOURCE_MANAGER.UPDATE_CDB_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE +DBMS_RESOURCE_MANAGER.UPDATE_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.UPDATE_PLAN +DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA +DBMS_RESOURCE_MANAGER_PRIVS. +DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE +DBMS_RESOURCE_MANAGER_PRIVS.REVOKE_SWITCH_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER_PRIVS.REVOKE_SYSTEM_PRIVILEGE +DBMS_RESULT_CACHE. +DBMS_RESULT_CACHE.BYPASS +DBMS_RESULT_CACHE.DELETE_DEPENDENCY +DBMS_RESULT_CACHE.FLUSH +DBMS_RESULT_CACHE.INVALIDATE +DBMS_RESULT_CACHE.INVALIDATE_OBJECT +DBMS_RESULT_CACHE.MEMORY_REPORT +DBMS_RESULT_CACHE.STATUS +DBMS_RESULT_CACHE_API. +DBMS_RESULT_CACHE_API.GET +DBMS_RESULT_CACHE_API.GETC +DBMS_RESULT_CACHE_API.SET +DBMS_RESULT_CACHE_API.SETC +DBMS_RESULT_CACHE_INTERNAL. +DBMS_RESULT_CACHE_INTERNAL.RELIES_ON +DBMS_RESUMABLE. +DBMS_RESUMABLE.ABORT +DBMS_RESUMABLE.GET_SESSION_TIMEOUT +DBMS_RESUMABLE.GET_TIMEOUT +DBMS_RESUMABLE.SET_SESSION_TIMEOUT +DBMS_RESUMABLE.SET_TIMEOUT +DBMS_RESUMABLE.SPACE_ERROR_INFO +DBMS_RLS. +DBMS_RLS.ADD_GROUPED_POLICY +DBMS_RLS.ADD_POLICY +DBMS_RLS.ADD_POLICY_CONTEXT +DBMS_RLS.ALTER_GROUPED_POLICY +DBMS_RLS.ALTER_POLICY +DBMS_RLS.CREATE_POLICY_GROUP +DBMS_RLS.DELETE_POLICY_GROUP +DBMS_RLS.DISABLE_GROUPED_POLICY +DBMS_RLS.DROP_GROUPED_POLICY +DBMS_RLS.DROP_POLICY +DBMS_RLS.DROP_POLICY_CONTEXT +DBMS_RLS.ENABLE_GROUPED_POLICY +DBMS_RLS.ENABLE_POLICY +DBMS_RLS.REFRESH_GROUPED_POLICY +DBMS_RLS.REFRESH_POLICY +DBMS_RMGR_GROUP_EXPORT. +DBMS_RMGR_GROUP_EXPORT.AUDIT_EXP +DBMS_RMGR_GROUP_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_RMGR_GROUP_EXPORT.CREATE_EXP +DBMS_RMGR_GROUP_EXPORT.DROP_EXP +DBMS_RMGR_GROUP_EXPORT.GRANT_EXP +DBMS_RMGR_GROUP_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_RMGR_PACT_EXPORT. +DBMS_RMGR_PACT_EXPORT.SYSTEM_INFO_EXP +DBMS_RMGR_PLAN_EXPORT. +DBMS_RMGR_PLAN_EXPORT.AUDIT_EXP +DBMS_RMGR_PLAN_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_RMGR_PLAN_EXPORT.CREATE_EXP +DBMS_RMGR_PLAN_EXPORT.DROP_EXP +DBMS_RMGR_PLAN_EXPORT.GRANT_EXP +DBMS_RMGR_PLAN_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_RMIN. +DBMS_RMIN.RM$_BGN_SQLBLK +DBMS_RMIN.RM$_END_SQLBLK +DBMS_RMIN.RM$_NONCDB_TO_PDB +DBMS_RMIN.RM$_PROCESS_PRIV +DBMS_RMIN.RM$_RUN_QUEUED_PARALLEL_STMT +DBMS_RMIN.RM$_SET_INITIAL_GROUP +DBMS_RMIN.RM$_UP_CONSUMER_GROUP_MAPPINGS +DBMS_RMIN.RM$_VERIFY_PRIVILEGES +DBMS_RMIN_SYS. +DBMS_RMIN_SYS.BEGIN_IMPORT_EXPORT +DBMS_RMIN_SYS.DOWNGRADE_PREP +DBMS_RMIN_SYS.INSTALL +DBMS_RMIN_SYS.RM$_CALIBRATE_IO +DBMS_RMIN_SYS.RM$_CLRPAREA +DBMS_RMIN_SYS.RM$_CONSUMER_GROUP_MAPPING_PRI +DBMS_RMIN_SYS.RM$_CRTPAREA +DBMS_RMIN_SYS.RM$_CRT_CATEGORY +DBMS_RMIN_SYS.RM$_CRT_CDB_DIRECTIVE +DBMS_RMIN_SYS.RM$_CRT_CDB_PLAN +DBMS_RMIN_SYS.RM$_CRT_GROUP +DBMS_RMIN_SYS.RM$_CRT_PLAN +DBMS_RMIN_SYS.RM$_CRT_PLAN_DIRECTIVE +DBMS_RMIN_SYS.RM$_DRP_CATEGORY +DBMS_RMIN_SYS.RM$_DRP_CDB_DIRECTIVE +DBMS_RMIN_SYS.RM$_DRP_CDB_PLAN +DBMS_RMIN_SYS.RM$_DRP_GROUP +DBMS_RMIN_SYS.RM$_DRP_PLAN +DBMS_RMIN_SYS.RM$_DRP_PLAN_CSD +DBMS_RMIN_SYS.RM$_DRP_PLAN_DIRECTIVE +DBMS_RMIN_SYS.RM$_FLATTEN_PLANS +DBMS_RMIN_SYS.RM$_GET_MAINTENANCE_PLAN +DBMS_RMIN_SYS.RM$_GET_PLAN_TOTAL_SHARES +DBMS_RMIN_SYS.RM$_IS_OTHER_GROUPS_SPECD +DBMS_RMIN_SYS.RM$_IS_PDB_ENABLED +DBMS_RMIN_SYS.RM$_IS_SYS_GROUP_SPECD +DBMS_RMIN_SYS.RM$_NONCDB_TO_PDB +DBMS_RMIN_SYS.RM$_SET_CONSUMER_GROUP_MAPPING +DBMS_RMIN_SYS.RM$_SUBPAREA +DBMS_RMIN_SYS.RM$_SWTCH_SESSION_GROUP +DBMS_RMIN_SYS.RM$_SWTCH_USR_GROUP +DBMS_RMIN_SYS.RM$_UPD_CATEGORY +DBMS_RMIN_SYS.RM$_UPD_CDB_DIRECTIVE +DBMS_RMIN_SYS.RM$_UPD_CDB_PLAN +DBMS_RMIN_SYS.RM$_UPD_GROUP +DBMS_RMIN_SYS.RM$_UPD_PLAN +DBMS_RMIN_SYS.RM$_UPD_PLAN_DIRECTIVE +DBMS_RMIN_SYS.RM$_VLDPAREA +DBMS_RMIN_SYS.UNINSTALL +DBMS_ROLLING. +DBMS_ROLLING.BUILD_PLAN +DBMS_ROLLING.DESTROY_PLAN +DBMS_ROLLING.FINISH_PLAN +DBMS_ROLLING.INIT_PLAN +DBMS_ROLLING.ROLLBACK_PLAN +DBMS_ROLLING.SET_PARAMETER +DBMS_ROLLING.START_PLAN +DBMS_ROLLING.SWITCHOVER +DBMS_ROWID. +DBMS_ROWID.ROWID_BLOCK_NUMBER +DBMS_ROWID.ROWID_CREATE +DBMS_ROWID.ROWID_INFO +DBMS_ROWID.ROWID_OBJECT +DBMS_ROWID.ROWID_RELATIVE_FNO +DBMS_ROWID.ROWID_ROW_NUMBER +DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO +DBMS_ROWID.ROWID_TO_EXTENDED +DBMS_ROWID.ROWID_TO_RESTRICTED +DBMS_ROWID.ROWID_TYPE +DBMS_ROWID.ROWID_VERIFY +DBMS_RULE. +DBMS_RULE.CLOSE_ITERATOR +DBMS_RULE.EVALUATE +DBMS_RULE.EVALUATE_EXPRESSION +DBMS_RULE.GET_NEXT_HIT +DBMS_RULE.IS_FAST +DBMS_RULEADM_INTERNAL. +DBMS_RULEADM_INTERNAL.I_ALTER_RULE +DBMS_RULEADM_INTERNAL.I_CREATE_EVAL_CTX +DBMS_RULEADM_INTERNAL.I_CREATE_RULE +DBMS_RULEADM_INTERNAL.I_CREATE_RULE_SET +DBMS_RULEADM_INTERNAL.I_EVALUATION_CONTEXT_ADD_VAR +DBMS_RULEADM_INTERNAL.PATCH_RULE_PRIV +DBMS_RULEADM_INTERNAL.REGISTER_INTERNAL_ACTX +DBMS_RULEADM_INTERNAL.UNREGISTER_INTERNAL_ACTX +DBMS_RULEADM_INTERNAL.VALIDATE_RE_OBJECT +DBMS_RULE_ADM. +DBMS_RULE_ADM.ADD_RULE +DBMS_RULE_ADM.ADD_RULE_INT +DBMS_RULE_ADM.ALTER_EVALUATION_CONTEXT +DBMS_RULE_ADM.ALTER_EVALUATION_CONTEXT_INT +DBMS_RULE_ADM.ALTER_RULE +DBMS_RULE_ADM.ALTER_RULE_INT +DBMS_RULE_ADM.CREATE_EVALUATION_CONTEXT +DBMS_RULE_ADM.CREATE_EVALUATION_CONTEXT_INT +DBMS_RULE_ADM.CREATE_RULE +DBMS_RULE_ADM.CREATE_RULE_INT +DBMS_RULE_ADM.CREATE_RULE_SET +DBMS_RULE_ADM.CREATE_RULE_SET_INT +DBMS_RULE_ADM.DROP_EVALUATION_CONTEXT +DBMS_RULE_ADM.DROP_EVALUATION_CONTEXT_INT +DBMS_RULE_ADM.DROP_RULE +DBMS_RULE_ADM.DROP_RULE_INT +DBMS_RULE_ADM.DROP_RULE_SET +DBMS_RULE_ADM.DROP_RULE_SET_INT +DBMS_RULE_ADM.GRANT_OBJECT_PRIVILEGE +DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE +DBMS_RULE_ADM.REMOVE_RULE +DBMS_RULE_ADM.REMOVE_RULE_INT +DBMS_RULE_ADM.REVOKE_OBJECT_PRIVILEGE +DBMS_RULE_ADM.REVOKE_SYSTEM_PRIVILEGE +DBMS_RULE_EXIMP. +DBMS_RULE_EXIMP.IMPORT_RULE +DBMS_RULE_EXIMP.IMPORT_RULE_SET +DBMS_RULE_EXP_EC_INTERNAL. +DBMS_RULE_EXP_EC_INTERNAL.I_CREATE_EXP +DBMS_RULE_EXP_EC_INTERNAL.I_GRANT_EXP +DBMS_RULE_EXP_EC_INTERNAL.I_GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_EV_CTXS. +DBMS_RULE_EXP_EV_CTXS.AUDIT_EXP +DBMS_RULE_EXP_EV_CTXS.AUDIT_SYSPRIVS_EXP +DBMS_RULE_EXP_EV_CTXS.CREATE_EXP +DBMS_RULE_EXP_EV_CTXS.DROP_EXP +DBMS_RULE_EXP_EV_CTXS.GRANT_EXP +DBMS_RULE_EXP_EV_CTXS.GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RL_INTERNAL. +DBMS_RULE_EXP_RL_INTERNAL.I_CREATE_EXP +DBMS_RULE_EXP_RL_INTERNAL.I_GRANT_EXP +DBMS_RULE_EXP_RL_INTERNAL.I_GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RL_INTERNAL.I_INSTANCE_CALLOUT +DBMS_RULE_EXP_RL_INTERNAL.I_SCHEMA_CALLOUT +DBMS_RULE_EXP_RS_INTERNAL. +DBMS_RULE_EXP_RS_INTERNAL.I_CREATE_EXP +DBMS_RULE_EXP_RS_INTERNAL.I_GRANT_EXP +DBMS_RULE_EXP_RS_INTERNAL.I_GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULES. +DBMS_RULE_EXP_RULES.AUDIT_EXP +DBMS_RULE_EXP_RULES.AUDIT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULES.CREATE_EXP +DBMS_RULE_EXP_RULES.DROP_EXP +DBMS_RULE_EXP_RULES.GRANT_EXP +DBMS_RULE_EXP_RULES.GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULES.INSTANCE_CALLOUT +DBMS_RULE_EXP_RULES.INSTANCE_INFO_EXP +DBMS_RULE_EXP_RULES.SCHEMA_CALLOUT +DBMS_RULE_EXP_RULES.SCHEMA_INFO_EXP +DBMS_RULE_EXP_RULES.SYSTEM_CALLOUT +DBMS_RULE_EXP_RULES.SYSTEM_INFO_EXP +DBMS_RULE_EXP_RULE_SETS. +DBMS_RULE_EXP_RULE_SETS.AUDIT_EXP +DBMS_RULE_EXP_RULE_SETS.AUDIT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULE_SETS.CREATE_EXP +DBMS_RULE_EXP_RULE_SETS.DROP_EXP +DBMS_RULE_EXP_RULE_SETS.GRANT_EXP +DBMS_RULE_EXP_RULE_SETS.GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_UTL. +DBMS_RULE_EXP_UTL.ENQUOTE_NAME +DBMS_RULE_EXP_UTL.EXPORT_ACTION +DBMS_RULE_EXP_UTL.IS_SYSTEM_EXPORT +DBMS_RULE_EXP_UTL.OBJECT_OWNER +DBMS_RULE_EXP_UTL.PARSE_NAME +DBMS_RULE_EXP_UTLI. +DBMS_RULE_EXP_UTLI.CHECK_PRIV +DBMS_RULE_IMP_OBJ. +DBMS_RULE_IMP_OBJ.IMPORT_ADD_RULE +DBMS_RULE_IMP_OBJ.IMPORT_EVALUATION_CONTEXT +DBMS_RULE_IMP_OBJ.IMPORT_RULE +DBMS_RULE_IMP_OBJ.IMPORT_RULE_SET +DBMS_RULE_INTERNAL. +DBMS_RULE_INTERNAL.I_EVALUATE +DBMS_SCHEDULER. +DBMS_SCHEDULER.ADD_EVENT_QUEUE_SUBSCRIBER +DBMS_SCHEDULER.ADD_GROUP_MEMBER +DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION +DBMS_SCHEDULER.ADD_WINDOW_GROUP_MEMBER +DBMS_SCHEDULER.ALTER_CHAIN +DBMS_SCHEDULER.ALTER_RUNNING_CHAIN +DBMS_SCHEDULER.ANALYZE_CHAIN +DBMS_SCHEDULER.AUTO_PURGE +DBMS_SCHEDULER.CHECK_CREDENTIAL +DBMS_SCHEDULER.CHECK_SYS_PRIVS +DBMS_SCHEDULER.CLOSE_WINDOW +DBMS_SCHEDULER.COPY_JOB +DBMS_SCHEDULER.CREATE_CALENDAR_STRING +DBMS_SCHEDULER.CREATE_CHAIN +DBMS_SCHEDULER.CREATE_CREDENTIAL +DBMS_SCHEDULER.CREATE_DATABASE_DESTINATION +DBMS_SCHEDULER.CREATE_EVENT_SCHEDULE +DBMS_SCHEDULER.CREATE_FILE_WATCHER +DBMS_SCHEDULER.CREATE_GROUP +DBMS_SCHEDULER.CREATE_JOB +DBMS_SCHEDULER.CREATE_JOBS +DBMS_SCHEDULER.CREATE_JOB_CLASS +DBMS_SCHEDULER.CREATE_PROGRAM +DBMS_SCHEDULER.CREATE_SCHEDULE +DBMS_SCHEDULER.CREATE_WINDOW +DBMS_SCHEDULER.CREATE_WINDOW_GROUP +DBMS_SCHEDULER.DEFINE_ANYDATA_ARGUMENT +DBMS_SCHEDULER.DEFINE_CHAIN_EVENT_STEP +DBMS_SCHEDULER.DEFINE_CHAIN_RULE +DBMS_SCHEDULER.DEFINE_CHAIN_STEP +DBMS_SCHEDULER.DEFINE_METADATA_ARGUMENT +DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT +DBMS_SCHEDULER.DISABLE +DBMS_SCHEDULER.DISABLE1_CALENDAR_CHECK +DBMS_SCHEDULER.DROP_AGENT_DESTINATION +DBMS_SCHEDULER.DROP_CHAIN +DBMS_SCHEDULER.DROP_CHAIN_RULE +DBMS_SCHEDULER.DROP_CHAIN_STEP +DBMS_SCHEDULER.DROP_CREDENTIAL +DBMS_SCHEDULER.DROP_DATABASE_DESTINATION +DBMS_SCHEDULER.DROP_FILE_WATCHER +DBMS_SCHEDULER.DROP_GROUP +DBMS_SCHEDULER.DROP_JOB +DBMS_SCHEDULER.DROP_JOB_CLASS +DBMS_SCHEDULER.DROP_PROGRAM +DBMS_SCHEDULER.DROP_PROGRAM_ARGUMENT +DBMS_SCHEDULER.DROP_SCHEDULE +DBMS_SCHEDULER.DROP_WINDOW +DBMS_SCHEDULER.DROP_WINDOW_GROUP +DBMS_SCHEDULER.ENABLE +DBMS_SCHEDULER.END_DETACHED_JOB_RUN +DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING +DBMS_SCHEDULER.EVALUATE_RUNNING_CHAIN +DBMS_SCHEDULER.FILE_WATCH_FILTER +DBMS_SCHEDULER.GENERATE_EVENT_LIST +DBMS_SCHEDULER.GENERATE_JOB_NAME +DBMS_SCHEDULER.GET_AGENT_INFO +DBMS_SCHEDULER.GET_AGENT_VERSION +DBMS_SCHEDULER.GET_ATTRIBUTE +DBMS_SCHEDULER.GET_CHAIN_RULE_ACTION +DBMS_SCHEDULER.GET_CHAIN_RULE_CONDITION +DBMS_SCHEDULER.GET_DEFAULT_VALUE +DBMS_SCHEDULER.GET_FILE +DBMS_SCHEDULER.GET_JOB_STEP_CF +DBMS_SCHEDULER.GET_SCHEDULER_ATTRIBUTE +DBMS_SCHEDULER.GET_SYS_TIME_ZONE_NAME +DBMS_SCHEDULER.GET_VARCHAR2_VALUE +DBMS_SCHEDULER.IS_SCHEDULER_CREATED_AGENT +DBMS_SCHEDULER.OPEN_WINDOW +DBMS_SCHEDULER.PURGE_LOG +DBMS_SCHEDULER.PUT_FILE +DBMS_SCHEDULER.REMOVE_EVENT_QUEUE_SUBSCRIBER +DBMS_SCHEDULER.REMOVE_GROUP_MEMBER +DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION +DBMS_SCHEDULER.REMOVE_WINDOW_GROUP_MEMBER +DBMS_SCHEDULER.RESET_JOB_ARGUMENT_VALUE +DBMS_SCHEDULER.RESOLVE_CALENDAR_STRING +DBMS_SCHEDULER.RESOLVE_NAME +DBMS_SCHEDULER.RUN_CHAIN +DBMS_SCHEDULER.RUN_JOB +DBMS_SCHEDULER.SET_AGENT_REGISTRATION_PASS +DBMS_SCHEDULER.SET_ATTRIBUTE +DBMS_SCHEDULER.SET_ATTRIBUTE_NULL +DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE +DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE +DBMS_SCHEDULER.SET_JOB_ATTRIBUTES +DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE +DBMS_SCHEDULER.SHOW_ERRORS +DBMS_SCHEDULER.STIME +DBMS_SCHEDULER.STOP_JOB +DBMS_SCHEDULER.SUBMIT_REMOTE_EXTERNAL_JOB +DBMS_SCHED_ARGUMENT_IMPORT. +DBMS_SCHED_ARGUMENT_IMPORT.CHECK_PRIV +DBMS_SCHED_ARGUMENT_IMPORT.INSTANCE_CALLOUT_IMP +DBMS_SCHED_ARGUMENT_IMPORT.SYSTEM_CALLOUT_IMP +DBMS_SCHED_ATTRIBUTE_EXPORT. +DBMS_SCHED_ATTRIBUTE_EXPORT.AUDIT_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.CREATE_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.DROP_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.GRANT_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CHAIN_EXPORT. +DBMS_SCHED_CHAIN_EXPORT.AUDIT_EXP +DBMS_SCHED_CHAIN_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CHAIN_EXPORT.CREATE_EXP +DBMS_SCHED_CHAIN_EXPORT.DROP_EXP +DBMS_SCHED_CHAIN_EXPORT.GRANT_EXP +DBMS_SCHED_CHAIN_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CLASS_EXPORT. +DBMS_SCHED_CLASS_EXPORT.AUDIT_EXP +DBMS_SCHED_CLASS_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CLASS_EXPORT.CREATE_EXP +DBMS_SCHED_CLASS_EXPORT.DROP_EXP +DBMS_SCHED_CLASS_EXPORT.GRANT_EXP +DBMS_SCHED_CLASS_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CREDENTIAL_EXPORT. +DBMS_SCHED_CREDENTIAL_EXPORT.AUDIT_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.CREATE_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.DROP_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.GRANT_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_EXPORT_CALLOUTS. +DBMS_SCHED_EXPORT_CALLOUTS.SCHEMA_CALLOUT +DBMS_SCHED_EXPORT_CALLOUTS.SCHEMA_INFO_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT. +DBMS_SCHED_FILE_WATCHER_EXPORT.AUDIT_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.CREATE_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.DROP_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.GRANT_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_JOB_EXPORT. +DBMS_SCHED_JOB_EXPORT.AUDIT_EXP +DBMS_SCHED_JOB_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_JOB_EXPORT.CHECK_PRIV +DBMS_SCHED_JOB_EXPORT.CREATE_EXP +DBMS_SCHED_JOB_EXPORT.DROP_EXP +DBMS_SCHED_JOB_EXPORT.GRANT_EXP +DBMS_SCHED_JOB_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_MAIN_EXPORT. +DBMS_SCHED_MAIN_EXPORT.EXPORT_CHAIN +DBMS_SCHED_MAIN_EXPORT.EXPORT_CLASS +DBMS_SCHED_MAIN_EXPORT.EXPORT_CREDENTIAL +DBMS_SCHED_MAIN_EXPORT.EXPORT_FILE_WATCHER +DBMS_SCHED_MAIN_EXPORT.EXPORT_GRANTS +DBMS_SCHED_MAIN_EXPORT.EXPORT_JOB +DBMS_SCHED_MAIN_EXPORT.EXPORT_PROGRAM +DBMS_SCHED_MAIN_EXPORT.EXPORT_SCHEDULE +DBMS_SCHED_MAIN_EXPORT.EXPORT_SCHEDULER_ATTRIBUTE +DBMS_SCHED_MAIN_EXPORT.EXPORT_SYSTEM_WINDOW +DBMS_SCHED_MAIN_EXPORT.EXPORT_WINDOW +DBMS_SCHED_MAIN_EXPORT.EXPORT_WINGRP +DBMS_SCHED_MAIN_EXPORT.GET_OBJECT_OWNER +DBMS_SCHED_MAIN_EXPORT.I_INSTANCE_CALLOUT_IMP +DBMS_SCHED_MAIN_EXPORT.I_SCHEMA_CALLOUT +DBMS_SCHED_MAIN_EXPORT.I_SCHEMA_INFO_EXP +DBMS_SCHED_MAIN_EXPORT.I_SYSTEM_CALLOUT_IMP +DBMS_SCHED_MAIN_EXPORT.NEXT_PIECE +DBMS_SCHED_MAIN_EXPORT.TS_TO_CHAR +DBMS_SCHED_PROGRAM_EXPORT. +DBMS_SCHED_PROGRAM_EXPORT.AUDIT_EXP +DBMS_SCHED_PROGRAM_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_PROGRAM_EXPORT.CREATE_EXP +DBMS_SCHED_PROGRAM_EXPORT.DROP_EXP +DBMS_SCHED_PROGRAM_EXPORT.GRANT_EXP +DBMS_SCHED_PROGRAM_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_SCHEDULE_EXPORT. +DBMS_SCHED_SCHEDULE_EXPORT.AUDIT_EXP +DBMS_SCHED_SCHEDULE_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_SCHEDULE_EXPORT.CREATE_EXP +DBMS_SCHED_SCHEDULE_EXPORT.DROP_EXP +DBMS_SCHED_SCHEDULE_EXPORT.GRANT_EXP +DBMS_SCHED_SCHEDULE_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_WINDOW_EXPORT. +DBMS_SCHED_WINDOW_EXPORT.AUDIT_EXP +DBMS_SCHED_WINDOW_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_WINDOW_EXPORT.CREATE_EXP +DBMS_SCHED_WINDOW_EXPORT.DROP_EXP +DBMS_SCHED_WINDOW_EXPORT.GRANT_EXP +DBMS_SCHED_WINDOW_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_WINGRP_EXPORT. +DBMS_SCHED_WINGRP_EXPORT.AUDIT_EXP +DBMS_SCHED_WINGRP_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_WINGRP_EXPORT.CREATE_EXP +DBMS_SCHED_WINGRP_EXPORT.DROP_EXP +DBMS_SCHED_WINGRP_EXPORT.GRANT_EXP +DBMS_SCHED_WINGRP_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCN. +DBMS_SCN.DISABLEAUTOROLLOVER +DBMS_SCN.ENABLEAUTOROLLOVER +DBMS_SCN.GETCURRENTSCNPARAMS +DBMS_SCN.GETSCNAUTOROLLOVERPARAMS +DBMS_SCN.GETSCNPARAMSBYCOMPAT +DBMS_SECUREFILE_LOG_ADMIN. +DBMS_SECUREFILE_LOG_ADMIN.DESTROY_ALL_LOGS +DBMS_SECUREFILE_LOG_ADMIN.UPGRADE_INST_ALL_LOGS +DBMS_SERVER_ALERT. +DBMS_SERVER_ALERT.EXPAND_MESSAGE +DBMS_SERVER_ALERT.GET_THRESHOLD +DBMS_SERVER_ALERT.SET_THRESHOLD +DBMS_SERVER_ALERT.VIEW_THRESHOLDS +DBMS_SERVER_ALERT_EXPORT. +DBMS_SERVER_ALERT_EXPORT.SYSTEM_INFO_EXP +DBMS_SERVER_ALERT_PRVT. +DBMS_SERVER_ALERT_PRVT.POST_ALERT +DBMS_SERVER_ALERT_PRVT.UPDATE_ALERT +DBMS_SERVER_TRACE. +DBMS_SERVER_TRACE.CONVERT_BINARY_TRACE_FILE +DBMS_SERVICE. +DBMS_SERVICE.CREATE_SERVICE +DBMS_SERVICE.DELETE_SERVICE +DBMS_SERVICE.DISCONNECT_SESSION +DBMS_SERVICE.MODIFY_SERVICE +DBMS_SERVICE.START_SERVICE +DBMS_SERVICE.STOP_SERVICE +DBMS_SERVICE_CONST. +DBMS_SERVICE_ERR. +DBMS_SERVICE_ERR.FOLD_KSWS_ERROR +DBMS_SERVICE_ERR.HANDLE_ERROR +DBMS_SERVICE_PRVT. +DBMS_SERVICE_PRVT.CREATE_SERVICE +DBMS_SERVICE_PRVT.DELETE_SERVICE +DBMS_SERVICE_PRVT.MODIFY_SERVICE +DBMS_SERVICE_PRVT.RENAME_PDB_ATTRIBUTE +DBMS_SERVICE_PRVT.START_SERVICE +DBMS_SERVICE_PRVT.STOP_SERVICE +DBMS_SESSION. +DBMS_SESSION.CLEAR_ALL_CONTEXT +DBMS_SESSION.CLEAR_CONTEXT +DBMS_SESSION.CLEAR_IDENTIFIER +DBMS_SESSION.CLOSE_DATABASE_LINK +DBMS_SESSION.FREE_UNUSED_USER_MEMORY +DBMS_SESSION.GET_PACKAGE_MEMORY_UTILIZATION +DBMS_SESSION.IS_ROLE_ENABLED +DBMS_SESSION.IS_SESSION_ALIVE +DBMS_SESSION.LIST_CONTEXT +DBMS_SESSION.MODIFY_PACKAGE_STATE +DBMS_SESSION.RESET_PACKAGE +DBMS_SESSION.SESSION_TRACE_DISABLE +DBMS_SESSION.SESSION_TRACE_ENABLE +DBMS_SESSION.SET_CLOSE_CACHED_OPEN_CURSORS +DBMS_SESSION.SET_CONTEXT +DBMS_SESSION.SET_EDITION_DEFERRED +DBMS_SESSION.SET_IDENTIFIER +DBMS_SESSION.SET_NLS +DBMS_SESSION.SET_ROLE +DBMS_SESSION.SET_SQL_TRACE +DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP +DBMS_SESSION.UNIQUE_SESSION_ID +DBMS_SESSION.USE_DEFAULT_EDITION_DEFERRED +DBMS_SESSION_STATE. +DBMS_SESSION_STATE.CAPTURE +DBMS_SESSION_STATE.MARK_CAPTURE +DBMS_SESSION_STATE.RESTORE +DBMS_SESSION_STATE.SS_CAPTURE +DBMS_SESSION_STATE.SS_MARK_CAPTURE +DBMS_SESSION_STATE.SS_RESTORE +DBMS_SESSION_STATE.SS_UNMARK_CAPTURE +DBMS_SESSION_STATE.UNMARK_CAPTURE +DBMS_SHARED_POOL. +DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD +DBMS_SHARED_POOL.KEEP +DBMS_SHARED_POOL.MARKHOT +DBMS_SHARED_POOL.PURGE +DBMS_SHARED_POOL.SIZES +DBMS_SHARED_POOL.UNKEEP +DBMS_SHARED_POOL.UNMARKHOT +DBMS_SMB. +DBMS_SMB.CHECK_SMB_PRIV +DBMS_SMB.CREATE_STGTAB +DBMS_SMB.GET_VSN_STGTAB_SMO +DBMS_SMB.PACK_STGTAB +DBMS_SMB.UNPACK_STGTAB +DBMS_SMB.UPGRADE_STGTAB +DBMS_SMB_INTERNAL. +DBMS_SMB_INTERNAL.CHECK_SMO_PROPS +DBMS_SMB_INTERNAL.CURSOR_TO_HINTS_XML +DBMS_SMB_INTERNAL.GET_PLAN_FROM_STGTAB +DBMS_SMB_INTERNAL.MAP_ORIGIN_BASE_TO_VIEW +DBMS_SMB_INTERNAL.NORMALIZE_NAME +DBMS_SMB_INTERNAL.OPEN_SMB_OBJ_CURSOR +DBMS_SMB_INTERNAL.VARR_TO_HINTS_XML +DBMS_SMB_INTERNAL.VERIFY_QUALIFIED_STGTAB +DBMS_SNAPSHOT. +DBMS_SNAPSHOT.BEGIN_TABLE_REORGANIZATION +DBMS_SNAPSHOT.DROP_SNAPSHOT +DBMS_SNAPSHOT.END_TABLE_REORGANIZATION +DBMS_SNAPSHOT.ESTIMATE_MVIEW_SIZE +DBMS_SNAPSHOT.EXPLAIN_MVIEW +DBMS_SNAPSHOT.EXPLAIN_REWRITE +DBMS_SNAPSHOT.EXPLAIN_REWRITE_SQLID +DBMS_SNAPSHOT.GET_LOG_AGE +DBMS_SNAPSHOT.GET_MV_DEPENDENCIES +DBMS_SNAPSHOT.I_AM_A_REFRESH +DBMS_SNAPSHOT.PMARKER +DBMS_SNAPSHOT.PURGE_DIRECT_LOAD_LOG +DBMS_SNAPSHOT.PURGE_LOG +DBMS_SNAPSHOT.PURGE_MVIEW_FROM_LOG +DBMS_SNAPSHOT.PURGE_SNAPSHOT_FROM_LOG +DBMS_SNAPSHOT.REFRESH +DBMS_SNAPSHOT.REFRESH_ALL +DBMS_SNAPSHOT.REFRESH_ALL_MVIEWS +DBMS_SNAPSHOT.REFRESH_DEPENDENT +DBMS_SNAPSHOT.REFRESH_MV +DBMS_SNAPSHOT.REGISTER_MVIEW +DBMS_SNAPSHOT.REGISTER_SNAPSHOT +DBMS_SNAPSHOT.SET_I_AM_A_REFRESH +DBMS_SNAPSHOT.SET_UP +DBMS_SNAPSHOT.TESTING +DBMS_SNAPSHOT.UNREGISTER_MVIEW +DBMS_SNAPSHOT.UNREGISTER_SNAPSHOT +DBMS_SNAPSHOT.WRAP_UP +DBMS_SNAPSHOT_UTL. +DBMS_SNAPSHOT_UTL.CHECK_REFERENTIAL_CONSTRAINT +DBMS_SNAPSHOT_UTL.CLEANUP_SNAPSHOT_IMPORT +DBMS_SNAPSHOT_UTL.CLEANUP_SUBSCRIPTION +DBMS_SNAPSHOT_UTL.DROP_SNAPSHOT +DBMS_SNAPSHOT_UTL.GET_EMPTY_SCALARS +DBMS_SNAPSHOT_UTL.GET_FULLY_QUALIFIED_NAME +DBMS_SNAPSHOT_UTL.GET_LOB_COLUMNS_INFO +DBMS_SNAPSHOT_UTL.GET_LOG_AGE +DBMS_SNAPSHOT_UTL.GET_LOG_NAME +DBMS_SNAPSHOT_UTL.GET_LOG_TYPE +DBMS_SNAPSHOT_UTL.GET_MASK_VECTOR +DBMS_SNAPSHOT_UTL.GET_MAX_BYTES_PER_CHAR +DBMS_SNAPSHOT_UTL.GET_MLOG_FLAG +DBMS_SNAPSHOT_UTL.GET_OBJECT_NAME +DBMS_SNAPSHOT_UTL.GET_PK_BY_EOID +DBMS_SNAPSHOT_UTL.GET_PK_CONSTRAINT_INFO +DBMS_SNAPSHOT_UTL.GET_RELATIONAL_COLUMNS +DBMS_SNAPSHOT_UTL.GET_TYPEINFO_BY_TOID +DBMS_SNAPSHOT_UTL.IMPORT_LOG_TRIGGER_STRING +DBMS_SNAPSHOT_UTL.IMPORT_UPD_TRIGGER_STRING +DBMS_SNAPSHOT_UTL.MASTER_LOG_TYPE +DBMS_SNAPSHOT_UTL.REGISTER_SNAPSHOT +DBMS_SNAPSHOT_UTL.SETUP +DBMS_SNAPSHOT_UTL.SET_UP +DBMS_SNAPSHOT_UTL.SUBSCRIBE +DBMS_SNAPSHOT_UTL.SYNC_UP_LOG +DBMS_SNAPSHOT_UTL.SYNC_UP_UPD +DBMS_SNAPSHOT_UTL.UNREGISTER_SNAPSHOT +DBMS_SNAPSHOT_UTL.UPDATE_LOG_PLACEHOLDER +DBMS_SNAPSHOT_UTL.VALIDATE +DBMS_SNAPSHOT_UTL.VALIDATE_REFRESH +DBMS_SNAPSHOT_UTL.VALIDATE_ROLLBACK_SEGMENT +DBMS_SNAPSHOT_UTL.VECTOR_COMPARE +DBMS_SNAPSHOT_UTL.VERIFY_FC_AGE +DBMS_SNAPSHOT_UTL.VERIFY_LOG +DBMS_SNAPSHOT_UTL.WRAPUP +DBMS_SNAPSHOT_UTL.WRAP_UP +DBMS_SNAP_INTERNAL. +DBMS_SNAP_INTERNAL.ALLOW_UPDATEABLE_MVS +DBMS_SNAP_INTERNAL.BEGIN_TABLE_REORGANIZATION +DBMS_SNAP_INTERNAL.BIC +DBMS_SNAP_INTERNAL.BIS +DBMS_SNAP_INTERNAL.BIT +DBMS_SNAP_INTERNAL.CANONICALIZE_IDENTIFIER +DBMS_SNAP_INTERNAL.CANONICALIZE_MASTER +DBMS_SNAP_INTERNAL.CLEAR_REDIRECTION +DBMS_SNAP_INTERNAL.CONVERT_TO_SELECT_LIST +DBMS_SNAP_INTERNAL.DELETE_REFRESH_OPERATIONS +DBMS_SNAP_INTERNAL.END_TABLE_REORGANIZATION +DBMS_SNAP_INTERNAL.ENSURE_NWAY_MASTER_SITE +DBMS_SNAP_INTERNAL.ENSURE_ONE_WAY_MASTER_SITE +DBMS_SNAP_INTERNAL.ENSURE_SNAPSHOT_SITE +DBMS_SNAP_INTERNAL.GENERATE_REFRESH_OPERATIONS +DBMS_SNAP_INTERNAL.GET_BACK_END_DB +DBMS_SNAP_INTERNAL.GET_INDEX_DDL +DBMS_SNAP_INTERNAL.GET_LOGGING_STATUS +DBMS_SNAP_INTERNAL.GET_TABLE_ID +DBMS_SNAP_INTERNAL.GET_TABLE_XLOCK +DBMS_SNAP_INTERNAL.IAS_CREATE_MV_DDL +DBMS_SNAP_INTERNAL.IAS_XLOCK_EVENT +DBMS_SNAP_INTERNAL.ID_TO_TIMESTAMP +DBMS_SNAP_INTERNAL.INSTANTIATE_OFFLINE +DBMS_SNAP_INTERNAL.IS_IAS +DBMS_SNAP_INTERNAL.I_AM_A_REFRESH +DBMS_SNAP_INTERNAL.LOCAL_NAME_RESOLVE +DBMS_SNAP_INTERNAL.MODIFY_RO_ATTRIBUTE +DBMS_SNAP_INTERNAL.PROHIBIT_UPDATEABLE_MVS +DBMS_SNAP_INTERNAL.REMOVE_BACK_END_DB +DBMS_SNAP_INTERNAL.SET_BACK_END_DB +DBMS_SNAP_INTERNAL.SET_I_AM_AN_ACLMV +DBMS_SNAP_INTERNAL.SET_I_AM_AN_ORACLE_REFRESH +DBMS_SNAP_INTERNAL.SET_LOGGING +DBMS_SNAP_INTERNAL.SET_REDIRECTION +DBMS_SNAP_INTERNAL.SYNC_BACK_END_DB +DBMS_SNAP_INTERNAL.SYNC_UP_LOG +DBMS_SNAP_INTERNAL.SYNC_UP_UPD +DBMS_SNAP_INTERNAL.TEST_REDIRECTION +DBMS_SNAP_INTERNAL.TIMESTAMP_TO_ID +DBMS_SNAP_INTERNAL.TRANSFORM_DDL +DBMS_SNAP_INTERNAL.UPDATEABLE_MVS_ALLOWED +DBMS_SNAP_INTERNAL.VALIDATE_SQL +DBMS_SNAP_INTERNAL.VEC_COLS_IN_TABLE +DBMS_SNAP_REPAPI. +DBMS_SNAP_REPAPI.CONTEXT_GET +DBMS_SNAP_REPAPI.CONTEXT_SET +DBMS_SPACE. +DBMS_SPACE.ASA_RECOMMENDATIONS +DBMS_SPACE.AUTO_SPACE_ADVISOR_JOB_PROC +DBMS_SPACE.CREATE_INDEX_COST +DBMS_SPACE.CREATE_TABLE_COST +DBMS_SPACE.DBFS_DF +DBMS_SPACE.FREE_BLOCKS +DBMS_SPACE.ISDATAFILEDROPPABLE_NAME +DBMS_SPACE.OBJECT_DEPENDENT_SEGMENTS +DBMS_SPACE.OBJECT_GROWTH_TREND +DBMS_SPACE.OBJECT_GROWTH_TREND_CUR +DBMS_SPACE.OBJECT_GROWTH_TREND_CURTAB +DBMS_SPACE.OBJECT_GROWTH_TREND_I_TO_S +DBMS_SPACE.OBJECT_GROWTH_TREND_SWRF +DBMS_SPACE.OBJECT_GROWTH_TREND_S_TO_I +DBMS_SPACE.OBJECT_SPACE_USAGE +DBMS_SPACE.OBJECT_SPACE_USAGE_TBF +DBMS_SPACE.PARSE_SPACE_ADV_INFO +DBMS_SPACE.SPACE_USAGE +DBMS_SPACE.UNUSED_SPACE +DBMS_SPACE.VERIFY_SHRINK_CANDIDATE +DBMS_SPACE.VERIFY_SHRINK_CANDIDATE_TBF +DBMS_SPACE_ADMIN. +DBMS_SPACE_ADMIN.ASSM_SEGMENT_SYNCHWM +DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY +DBMS_SPACE_ADMIN.ASSM_TABLESPACE_VERIFY +DBMS_SPACE_ADMIN.DROP_EMPTY_SEGMENTS +DBMS_SPACE_ADMIN.FLUSH_LOBSEGMENT_STATS +DBMS_SPACE_ADMIN.HEAT_MAP_SEGMENT_DROP +DBMS_SPACE_ADMIN.HEAT_MAP_SEGMENT_SETMAXSIZE +DBMS_SPACE_ADMIN.IMC_AREA_DUMP +DBMS_SPACE_ADMIN.IMC_SEGMENT_CREATE +DBMS_SPACE_ADMIN.IMC_SEGMENT_DROP +DBMS_SPACE_ADMIN.IMC_SEGMENT_LOAD +DBMS_SPACE_ADMIN.IMC_TABLESPACE_CREATE +DBMS_SPACE_ADMIN.IMC_TABLESPACE_DROP +DBMS_SPACE_ADMIN.IMC_TREE_DUMP +DBMS_SPACE_ADMIN.MATERIALIZE_DEFERRED_SEGMENTS +DBMS_SPACE_ADMIN.MATERIALIZE_DEFERRED_WITH_OPT +DBMS_SPACE_ADMIN.NGLOB_SEGMENT_VERIFY +DBMS_SPACE_ADMIN.PURGE_LOBSEGMENT_STATS +DBMS_SPACE_ADMIN.SEGMENT_CORRUPT +DBMS_SPACE_ADMIN.SEGMENT_DROP_CORRUPT +DBMS_SPACE_ADMIN.SEGMENT_DUMP +DBMS_SPACE_ADMIN.SEGMENT_EXTEND +DBMS_SPACE_ADMIN.SEGMENT_MOVEBLOCKS +DBMS_SPACE_ADMIN.SEGMENT_NUMBER_BLOCKS +DBMS_SPACE_ADMIN.SEGMENT_NUMBER_EXTENTS +DBMS_SPACE_ADMIN.SEGMENT_REPAIR +DBMS_SPACE_ADMIN.SEGMENT_VERIFY +DBMS_SPACE_ADMIN.TABLESPACE_DUMP_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_FIX_AFFINITY +DBMS_SPACE_ADMIN.TABLESPACE_FIX_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_FIX_SEGMENT_EXTBLKS +DBMS_SPACE_ADMIN.TABLESPACE_FIX_SEGMENT_STATES +DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL +DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL +DBMS_SPACE_ADMIN.TABLESPACE_REBUILD_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_REBUILD_QUOTAS +DBMS_SPACE_ADMIN.TABLESPACE_RELOCATE_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_VERIFY +DBMS_SPD. +DBMS_SPD.ALTER_SQL_PLAN_DIRECTIVE +DBMS_SPD.CREATE_STGTAB_DIRECTIVE +DBMS_SPD.DROP_SQL_PLAN_DIRECTIVE +DBMS_SPD.FLUSH_SQL_PLAN_DIRECTIVE +DBMS_SPD.GET_PREFS +DBMS_SPD.PACK_STGTAB_DIRECTIVE +DBMS_SPD.SET_PREFS +DBMS_SPD.TRANSFER_SPD_FOR_DP +DBMS_SPD.UNPACK_STGTAB_DIRECTIVE +DBMS_SPD_INTERNAL.ALTER_SPD +DBMS_SPD_INTERNAL.FLUSH_SPD_CALLOUT +DBMS_SPD_INTERNAL.GET_SPD_TEXT +DBMS_SPD_INTERNAL.GET_VEC_SET_IDS +DBMS_SPD_INTERNAL.IMPORT_DIRECTIVE +DBMS_SPD_INTERNAL.INIT_SCRATCH_TAB +DBMS_SPD_INTERNAL.INSERT_OBJECT +DBMS_SPD_INTERNAL.INSERT_OBJECT_FOR_DP +DBMS_SPD_INTERNAL.REMAP_SPD +DBMS_SPD_INTERNAL.VERIFY_STGTAB +DBMS_SPM. +DBMS_SPM.ACCEPT_SQL_PLAN_BASELINE +DBMS_SPM.ALTER_SQL_PLAN_BASELINE +DBMS_SPM.CANCEL_EVOLVE_TASK +DBMS_SPM.CONFIGURE +DBMS_SPM.CREATE_EVOLVE_TASK +DBMS_SPM.CREATE_STGTAB_BASELINE +DBMS_SPM.DROP_EVOLVE_TASK +DBMS_SPM.DROP_MIGRATED_STORED_OUTLINE +DBMS_SPM.DROP_SQL_PLAN_BASELINE +DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE +DBMS_SPM.EXECUTE_EVOLVE_TASK +DBMS_SPM.IMPLEMENT_EVOLVE_TASK +DBMS_SPM.INTERRUPT_EVOLVE_TASK +DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE +DBMS_SPM.LOAD_PLANS_FROM_SQLSET +DBMS_SPM.MIGRATE_STORED_OUTLINE +DBMS_SPM.PACK_STGTAB_BASELINE +DBMS_SPM.REPORT_AUTO_EVOLVE_TASK +DBMS_SPM.REPORT_EVOLVE_TASK +DBMS_SPM.RESET_EVOLVE_TASK +DBMS_SPM.RESUME_EVOLVE_TASK +DBMS_SPM.SET_EVOLVE_TASK_PARAMETER +DBMS_SPM.UNPACK_STGTAB_BASELINE +DBMS_SPM_INTERNAL. +DBMS_SPM_INTERNAL.AUTO_PURGE_SQL_PLAN_BASELINE +DBMS_SPM_INTERNAL.CREATE_SQL_PLAN_BASELINE +DBMS_SPM_INTERNAL.FETCH_FLAGS_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_HANDLE_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_NAME_USING_SIG_CAT_PID +DBMS_SPM_INTERNAL.FETCH_PLAN_ID_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_PLAN_SIGN_ID_AND_FLAGS +DBMS_SPM_INTERNAL.FETCH_SIG_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_SIG_USING_SQL_HANDLE +DBMS_SPM_INTERNAL.FETCH_TEXT_USING_SQL_HANDLE +DBMS_SPM_INTERNAL.GET_NONACCEPTED_PLANS +DBMS_SPM_INTERNAL.GET_OUTLINE +DBMS_SPM_INTERNAL.GET_PARAM_VALUE +DBMS_SPM_INTERNAL.GET_PLANS_FROM_CC +DBMS_SPM_INTERNAL.GET_PLAN_HASH_2 +DBMS_SPM_INTERNAL.GET_PLAN_OUTLINE +DBMS_SPM_INTERNAL.GET_PLAN_ROWS_FROM_SMB +DBMS_SPM_INTERNAL.GET_SPM_TRACING_VALUE +DBMS_SPM_INTERNAL.GET_SQL_IDS_FROM_CC +DBMS_SPM_INTERNAL.I_ACCEPT_SQL_PLAN_BASELINE +DBMS_SPM_INTERNAL.I_CREATE_AUTO_EVOLVE_TASK +DBMS_SPM_INTERNAL.I_EVOLVE_CHECK_TIME_LIMIT +DBMS_SPM_INTERNAL.I_GET_PLAN +DBMS_SPM_INTERNAL.I_REPORT_EVOLVE_TASK +DBMS_SPM_INTERNAL.I_SPM_TRC +DBMS_SPM_INTERNAL.LOAD_PLANS_SET +DBMS_SPM_INTERNAL.UNMIGRATE_STORED_OUTLINE +DBMS_SPM_INTERNAL.UPDATE_CONFIG +DBMS_SQADM_SYSCALLS. +DBMS_SQADM_SYSCALLS.KWSA_3GL_ADDDSUB +DBMS_SQADM_SYSCALLS.KWSA_3GL_ALTERDSUB +DBMS_SQADM_SYSCALLS.KWSA_3GL_DRPDSUB +DBMS_SQADM_SYSCALLS.KWSA_3GL_LOCKDSUB +DBMS_SQL. +DBMS_SQL.BIND_ARRAY +DBMS_SQL.BIND_VARIABLE +DBMS_SQL.BIND_VARIABLE_CHAR +DBMS_SQL.BIND_VARIABLE_RAW +DBMS_SQL.BIND_VARIABLE_ROWID +DBMS_SQL.CLOSE_CURSOR +DBMS_SQL.COLUMN_VALUE +DBMS_SQL.COLUMN_VALUE_CHAR +DBMS_SQL.COLUMN_VALUE_LONG +DBMS_SQL.COLUMN_VALUE_RAW +DBMS_SQL.COLUMN_VALUE_ROWID +DBMS_SQL.DEFINE_ARRAY +DBMS_SQL.DEFINE_COLUMN +DBMS_SQL.DEFINE_COLUMN_CHAR +DBMS_SQL.DEFINE_COLUMN_LONG +DBMS_SQL.DEFINE_COLUMN_RAW +DBMS_SQL.DEFINE_COLUMN_ROWID +DBMS_SQL.DESCRIBE_COLUMNS +DBMS_SQL.DESCRIBE_COLUMNS2 +DBMS_SQL.DESCRIBE_COLUMNS3 +DBMS_SQL.EXECUTE +DBMS_SQL.EXECUTE_AND_FETCH +DBMS_SQL.FETCH_ROWS +DBMS_SQL.GET_NEXT_RESULT +DBMS_SQL.IS_OPEN +DBMS_SQL.LAST_ERROR_POSITION +DBMS_SQL.LAST_ROW_COUNT +DBMS_SQL.LAST_ROW_ID +DBMS_SQL.LAST_SQL_FUNCTION_CODE +DBMS_SQL.OPEN_CURSOR +DBMS_SQL.PARSE +DBMS_SQL.RETURN_RESULT +DBMS_SQL.TO_CURSOR_NUMBER +DBMS_SQL.TO_REFCURSOR +DBMS_SQL.VARIABLE_VALUE +DBMS_SQL.VARIABLE_VALUE_CHAR +DBMS_SQL.VARIABLE_VALUE_RAW +DBMS_SQL.VARIABLE_VALUE_ROWID +DBMS_SQLDIAG. +DBMS_SQLDIAG.ACCEPT_SQL_PATCH +DBMS_SQLDIAG.ALTER_SQL_PATCH +DBMS_SQLDIAG.CANCEL_DIAGNOSIS_TASK +DBMS_SQLDIAG.CREATE_DIAGNOSIS_TASK +DBMS_SQLDIAG.CREATE_STGTAB_SQLPATCH +DBMS_SQLDIAG.DROP_DIAGNOSIS_TASK +DBMS_SQLDIAG.DROP_SQL_PATCH +DBMS_SQLDIAG.DUMP_TRACE +DBMS_SQLDIAG.EXECUTE_DIAGNOSIS_TASK +DBMS_SQLDIAG.EXPLAIN_SQL_TESTCASE +DBMS_SQLDIAG.EXPORT_SQL_TESTCASE +DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_INC +DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_TXT +DBMS_SQLDIAG.GETSQL +DBMS_SQLDIAG.GET_FIX_CONTROL +DBMS_SQLDIAG.IMPORT_SQL_TESTCASE +DBMS_SQLDIAG.INCIDENTID_2_SQL +DBMS_SQLDIAG.INTERRUPT_DIAGNOSIS_TASK +DBMS_SQLDIAG.LOAD_SQLSET_FROM_TCB +DBMS_SQLDIAG.PACK_STGTAB_SQLPATCH +DBMS_SQLDIAG.REPLAY_SQL_TESTCASE +DBMS_SQLDIAG.REPORT_DIAGNOSIS_TASK +DBMS_SQLDIAG.RESET_DIAGNOSIS_TASK +DBMS_SQLDIAG.RESUME_DIAGNOSIS_TASK +DBMS_SQLDIAG.SET_DIAGNOSIS_TASK_PARAMETER +DBMS_SQLDIAG.SET_TCB_TRACING +DBMS_SQLDIAG.UNPACK_STGTAB_SQLPATCH +DBMS_SQLDIAG_INTERNAL. +DBMS_SQLDIAG_INTERNAL.I_CREATE_HINTSET +DBMS_SQLDIAG_INTERNAL.I_CREATE_PATCH +DBMS_SQLDIAG_INTERNAL.I_GENERATE_PARAM_IMPORT +DBMS_SQLDIAG_INTERNAL.I_GENERATE_SS_IMPORT +DBMS_SQLDIAG_INTERNAL.I_GET_DBVERSION +DBMS_SQLDIAG_INTERNAL.I_GET_INCIDENTID +DBMS_SQLDIAG_INTERNAL.I_INCIDENTID_2_SQL +DBMS_SQLHASH. +DBMS_SQLHASH.GETHASH +DBMS_SQLJTYPE. +DBMS_SQLJTYPE.VALIDATECLASS +DBMS_SQLJTYPE.VALIDATETYPE +DBMS_SQLPA. +DBMS_SQLPA.CANCEL_ANALYSIS_TASK +DBMS_SQLPA.CREATE_ANALYSIS_TASK +DBMS_SQLPA.DROP_ANALYSIS_TASK +DBMS_SQLPA.EXECUTE_ANALYSIS_TASK +DBMS_SQLPA.GET_SESS_OPTIMIZER_ENV +DBMS_SQLPA.INTERRUPT_ANALYSIS_TASK +DBMS_SQLPA.REMOTE_PROCESS_SQL +DBMS_SQLPA.REPORT_ANALYSIS_TASK +DBMS_SQLPA.RESET_ANALYSIS_TASK +DBMS_SQLPA.RESUME_ANALYSIS_TASK +DBMS_SQLPA.SET_ANALYSIS_DEFAULT_PARAMETER +DBMS_SQLPA.SET_ANALYSIS_TASK_PARAMETER +DBMS_SQLPATCH. +DBMS_SQLPATCH.INSTALL_FILE +DBMS_SQLPATCH.PATCH_FINALIZE +DBMS_SQLPATCH.PATCH_INITIALIZE +DBMS_SQLPATCH.SESSION_INITIALIZE +DBMS_SQLPATCH.SQL_REGISTRY_STATE +DBMS_SQLPATCH.VERIFY_QUERYABLE_INVENTORY +DBMS_SQLPLUS_SCRIPT. +DBMS_SQLPLUS_SCRIPT.PARSE +DBMS_SQLTCB_INTERNAL.I_CAPTURE_BIND_LIST +DBMS_SQLTCB_INTERNAL.I_CLOB_LOAD +DBMS_SQLTCB_INTERNAL.I_CONVERT_FROM_BOOLEAN +DBMS_SQLTCB_INTERNAL.I_CONVERT_TO_BOOLEAN +DBMS_SQLTCB_INTERNAL.I_EXPLAIN_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_GENERATE_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_GET_FILE_NAME +DBMS_SQLTCB_INTERNAL.I_IMPORT_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_REPLAY_BIND_LIST +DBMS_SQLTCB_INTERNAL.I_REPLAY_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_SET_TRACING +DBMS_SQLTCB_INTERNAL.I_TCB_CHECK_REPLAY_PARAMETERS +DBMS_SQLTCB_INTERNAL.I_TCB_HAS_DYN_STS +DBMS_SQLTCB_INTERNAL.I_TCB_INIT_SCRIPT_PREFIX +DBMS_SQLTCB_INTERNAL.I_TCB_IS_CDB +DBMS_SQLTCB_INTERNAL.I_VALIDATE_INCIDENTID +DBMS_SQLTCB_INTERNAL.TEST_EXPORT_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.UPCASE +DBMS_SQLTUNE. +DBMS_SQLTUNE.ACCEPT_ALL_SQL_PROFILES +DBMS_SQLTUNE.ACCEPT_SQL_PROFILE +DBMS_SQLTUNE.ADD_SQLSET_REFERENCE +DBMS_SQLTUNE.ALTER_SQL_PROFILE +DBMS_SQLTUNE.ALTER_TUNING_TASK_XML +DBMS_SQLTUNE.BUILD_STASH_XML +DBMS_SQLTUNE.CANCEL_TUNING_TASK +DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSET +DBMS_SQLTUNE.CAP_STS_CBK +DBMS_SQLTUNE.CHECK_SQLSET_PRIVS +DBMS_SQLTUNE.CHECK_SQL_PROFILE_PRIV +DBMS_SQLTUNE.CHECK_TUNING_TASK_STATUS +DBMS_SQLTUNE.CONFIGURE_TUNING_TASK_XML +DBMS_SQLTUNE.CREATE_SQLSET +DBMS_SQLTUNE.CREATE_SQL_PLAN_BASELINE +DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF +DBMS_SQLTUNE.CREATE_STGTAB_SQLSET +DBMS_SQLTUNE.CREATE_TUNING_TASK +DBMS_SQLTUNE.DELETE_SQLSET +DBMS_SQLTUNE.DROP_SQLSET +DBMS_SQLTUNE.DROP_SQL_PROFILE +DBMS_SQLTUNE.DROP_TUNING_TASK +DBMS_SQLTUNE.EXAMINE_STGTAB +DBMS_SQLTUNE.EXECUTE_TUNING_TASK +DBMS_SQLTUNE.EXTRACT_BIND +DBMS_SQLTUNE.EXTRACT_BINDS +DBMS_SQLTUNE.IMPLEMENT_TUNING_TASK +DBMS_SQLTUNE.IMPLEMENT_TUNING_TASK_XML +DBMS_SQLTUNE.IMPORT_SQL_PROFILE +DBMS_SQLTUNE.INTERRUPT_TUNING_TASK +DBMS_SQLTUNE.LOAD_SQLSET +DBMS_SQLTUNE.PACK_STGTAB_SQLPROF +DBMS_SQLTUNE.PACK_STGTAB_SQLSET +DBMS_SQLTUNE.PREPARE_AWR_STATEMENT +DBMS_SQLTUNE.PREPARE_SQLSET_STATEMENT +DBMS_SQLTUNE.REMAP_STGTAB_SQLPROF +DBMS_SQLTUNE.REMAP_STGTAB_SQLSET +DBMS_SQLTUNE.REMOVE_SQLSET_REFERENCE +DBMS_SQLTUNE.REPORT_AUTO_TUNING_TASK +DBMS_SQLTUNE.REPORT_SQL_DETAIL +DBMS_SQLTUNE.REPORT_SQL_DETAIL_XML +DBMS_SQLTUNE.REPORT_SQL_MONITOR +DBMS_SQLTUNE.REPORT_SQL_MONITOR_LIST +DBMS_SQLTUNE.REPORT_SQL_MONITOR_LIST_XML +DBMS_SQLTUNE.REPORT_SQL_MONITOR_XML +DBMS_SQLTUNE.REPORT_TUNING_TASK +DBMS_SQLTUNE.REPORT_TUNING_TASK_LIST_XML +DBMS_SQLTUNE.REPORT_TUNING_TASK_XML +DBMS_SQLTUNE.RESET_TUNING_TASK +DBMS_SQLTUNE.RESUME_TUNING_TASK +DBMS_SQLTUNE.SCHEDULE_TUNING_TASK +DBMS_SQLTUNE.SCRIPT_TUNING_TASK +DBMS_SQLTUNE.SELECT_CURSOR_CACHE +DBMS_SQLTUNE.SELECT_SQLPA_TASK +DBMS_SQLTUNE.SELECT_SQLSET +DBMS_SQLTUNE.SELECT_SQL_TRACE +DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY +DBMS_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER +DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER +DBMS_SQLTUNE.SQLSET_PROGRESS_STATS +DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE +DBMS_SQLTUNE.TRANSFORM_SQLSET_CURSOR +DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF +DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET +DBMS_SQLTUNE.UPDATE_SQLSET +DBMS_SQLTUNE_INTERNAL. +DBMS_SQLTUNE_INTERNAL.ACCEPT_ALL_SQL_PROFILES +DBMS_SQLTUNE_INTERNAL.GATHER_SQL_STATS +DBMS_SQLTUNE_INTERNAL.GET_BEGIN_EXECUTION +DBMS_SQLTUNE_INTERNAL.GET_SQLSET_USERBINDS +DBMS_SQLTUNE_INTERNAL.IMPLEMENT_TUNING_TASK_XML +DBMS_SQLTUNE_INTERNAL.I_ACCEPT_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_ADD_SQLSET_REFERENCE +DBMS_SQLTUNE_INTERNAL.I_ADD_TASK_SQLSET_REFERENCE +DBMS_SQLTUNE_INTERNAL.I_ALLOW_BIND_FLUSH +DBMS_SQLTUNE_INTERNAL.I_ALTER_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_ASSERT_INPUT +DBMS_SQLTUNE_INTERNAL.I_CHECK_ACTIVE +DBMS_SQLTUNE_INTERNAL.I_CLONE_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_COMBINE_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_CREATE_AUTO_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_CREATE_SQLSET +DBMS_SQLTUNE_INTERNAL.I_CREATE_SQL_PLAN_BASELINE +DBMS_SQLTUNE_INTERNAL.I_CREATE_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_CREATE_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_DECR_REFC_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_DELETE_SQLSET +DBMS_SQLTUNE_INTERNAL.I_DROP_SQLSET +DBMS_SQLTUNE_INTERNAL.I_DROP_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_DROP_USER_SQLSETS +DBMS_SQLTUNE_INTERNAL.I_DUMP_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_GET_PLAN_QUERY_TEXT +DBMS_SQLTUNE_INTERNAL.I_GET_REPORT_EXECSUBQ +DBMS_SQLTUNE_INTERNAL.I_INIT_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_INSERT_SQLSET_SQLTEXT +DBMS_SQLTUNE_INTERNAL.I_INSERT_STS_TOPACK +DBMS_SQLTUNE_INTERNAL.I_LOAD_SQLSET_CURSOR +DBMS_SQLTUNE_INTERNAL.I_LOAD_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_LOCK_SQLSET +DBMS_SQLTUNE_INTERNAL.I_MOVE_DELTA_COLUMNS +DBMS_SQLTUNE_INTERNAL.I_OPEN_IMPL_PROFILE_CURSOR +DBMS_SQLTUNE_INTERNAL.I_OPEN_SCRIPT_CURSOR +DBMS_SQLTUNE_INTERNAL.I_PARSE_SCRIPT_REC_TYPES +DBMS_SQLTUNE_INTERNAL.I_PROCESS_SQL +DBMS_SQLTUNE_INTERNAL.I_QUALIFIED_NAME +DBMS_SQLTUNE_INTERNAL.I_REMOVE_SQLSET_REFERENCE +DBMS_SQLTUNE_INTERNAL.I_REPORT_AUTO_SUMMARY_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_COMPARE_PLANS_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_SQLT_SINGLE_SQL_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_SQLT_SUMMARY_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_SQL_TABLE_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_SCRIPT_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_SQL_RECURSIVE +DBMS_SQLTUNE_INTERNAL.I_SUB_DELETE_STSREF +DBMS_SQLTUNE_INTERNAL.I_SUB_EXECUTE +DBMS_SQLTUNE_INTERNAL.I_TRACK_SQLMON_REPT_USAGE +DBMS_SQLTUNE_INTERNAL.I_TRIM_NAME +DBMS_SQLTUNE_INTERNAL.I_TRUNC_STS_TOPACK +DBMS_SQLTUNE_INTERNAL.I_UNLOCK_SQLSET +DBMS_SQLTUNE_INTERNAL.I_UNPACK_SQLSETS_BULK +DBMS_SQLTUNE_INTERNAL.I_UPDATE_AWR_SQLTEXT_REFCOUNT +DBMS_SQLTUNE_INTERNAL.I_UPDATE_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_UPDATE_SQLSET +DBMS_SQLTUNE_INTERNAL.I_UPDATE_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_VALIDATE_LEVEL +DBMS_SQLTUNE_INTERNAL.I_VALIDATE_PROCESS_ACTION +DBMS_SQLTUNE_INTERNAL.I_VALIDATE_TUNING_PARAMETER +DBMS_SQLTUNE_INTERNAL.RETRIEVE_AUTOTUNE_INFO_XML +DBMS_SQLTUNE_INTERNAL.SQLDET_FINDSQL_XML +DBMS_SQLTUNE_INTERNAL.SQLMON_PARSE_REPORT_REF +DBMS_SQLTUNE_INTERNAL.TEST_COMPARE_QUERY_PLANS +DBMS_SQLTUNE_INTERNAL.TEST_DESCRIBE_SQL +DBMS_SQLTUNE_INTERNAL.TEST_DESCRIBE_SQLSET +DBMS_SQLTUNE_INTERNAL.TEST_DROP_SQL_PROFILES +DBMS_SQLTUNE_INTERNAL.TEST_EXPLAIN_PLAN +DBMS_SQLTUNE_INTERNAL.TEST_GATHER_OBJECT_STATS +DBMS_SQLTUNE_INTERNAL.TEST_GATHER_SQL_STATS +DBMS_SQLTUNE_INTERNAL.TEST_GET_TUNING_PARAMETER +DBMS_SQLTUNE_INTERNAL.TEST_KSD_TRACE +DBMS_SQLTUNE_INTERNAL.TEST_LOAD_WORKSPACE_INPUTS +DBMS_SQLTUNE_INTERNAL.TEST_PROCESS_SQLSET +DBMS_SQLTUNE_INTERNAL.TEST_SET_TUNING_PARAMETER +DBMS_SQLTUNE_INTERNAL.TEST_TUNE_SQL +DBMS_SQLTUNE_INTERNAL.TEST_TUNE_SQLSET +DBMS_SQLTUNE_UTIL0. +DBMS_SQLTUNE_UTIL0.CDBCON_DBID_TO_NAME +DBMS_SQLTUNE_UTIL0.CDBCON_ID_TO_DBID +DBMS_SQLTUNE_UTIL0.CDBCON_NAME2IDS +DBMS_SQLTUNE_UTIL0.CDB_IS_PDB +DBMS_SQLTUNE_UTIL0.CDB_IS_ROOT +DBMS_SQLTUNE_UTIL0.EXTRACT_BIND +DBMS_SQLTUNE_UTIL0.EXTRACT_BINDS +DBMS_SQLTUNE_UTIL0.GET_BINDS_COUNT +DBMS_SQLTUNE_UTIL0.IS_BIND_MASKED +DBMS_SQLTUNE_UTIL0.SQLTEXT_TO_SIGNATURE +DBMS_SQLTUNE_UTIL0.SQLTEXT_TO_SQLID +DBMS_SQLTUNE_UTIL0.VALIDATE_SQLID +DBMS_SQLTUNE_UTIL1. +DBMS_SQLTUNE_UTIL1.ALTER_SESSION_PARAMETER +DBMS_SQLTUNE_UTIL1.GET_CURRENT_TIME +DBMS_SQLTUNE_UTIL1.GET_DBID_FROM_CONID +DBMS_SQLTUNE_UTIL1.GET_EXECUTION_TYPE +DBMS_SQLTUNE_UTIL1.GET_SQLSET_CON_DBID +DBMS_SQLTUNE_UTIL1.GET_SQLSET_IDENTIFIER +DBMS_SQLTUNE_UTIL1.GET_SQLSET_NB_STMTS +DBMS_SQLTUNE_UTIL1.GET_VIEW_TEXT +DBMS_SQLTUNE_UTIL1.GET_WKLDTYPE_NAME +DBMS_SQLTUNE_UTIL1.INIT_TASK_SPAOBJ +DBMS_SQLTUNE_UTIL1.INIT_TASK_WKLDOBJ +DBMS_SQLTUNE_UTIL1.IS_RUNNING_FAKE_CC_TEST +DBMS_SQLTUNE_UTIL1.RESTORE_SESSION_PARAMETER +DBMS_SQLTUNE_UTIL1.VALIDATE_NAME +DBMS_SQLTUNE_UTIL1.VALIDATE_TASK_STATUS +DBMS_SQLTUNE_UTIL2. +DBMS_SQLTUNE_UTIL2.CHECK_PRIV +DBMS_SQLTUNE_UTIL2.GET_TIMING_INFO +DBMS_SQLTUNE_UTIL2.RESOLVE_EXEC_NAME +DBMS_SQLTUNE_UTIL2.RESOLVE_USERNAME +DBMS_SQLTUNE_UTIL2.SQL_BINDS_NTAB_TO_VARRAY +DBMS_SQLTUNE_UTIL2.SQL_BINDS_VARRAY_TO_NTAB +DBMS_SQLTUNE_UTIL2.VALIDATE_SNAPSHOT +DBMS_SQL_MONITOR. +DBMS_SQL_MONITOR.BEGIN_OPERATION +DBMS_SQL_MONITOR.END_OPERATION +DBMS_SQL_MONITOR.REPORT_SQL_MONITOR +DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_LIST +DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_LIST_XML +DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_XML +DBMS_SQL_TRANSLATOR. +DBMS_SQL_TRANSLATOR.CREATE_PROFILE +DBMS_SQL_TRANSLATOR.DEREGISTER_ERROR_TRANSLATION +DBMS_SQL_TRANSLATOR.DEREGISTER_SQL_TRANSLATION +DBMS_SQL_TRANSLATOR.DROP_PROFILE +DBMS_SQL_TRANSLATOR.ENABLE_ERROR_TRANSLATION +DBMS_SQL_TRANSLATOR.ENABLE_SQL_TRANSLATION +DBMS_SQL_TRANSLATOR.EXPORT_PROFILE +DBMS_SQL_TRANSLATOR.IMPORT_PROFILE +DBMS_SQL_TRANSLATOR.REGISTER_ERROR_TRANSLATION +DBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION +DBMS_SQL_TRANSLATOR.SET_ATTRIBUTE +DBMS_SQL_TRANSLATOR.SET_ERROR_TRANSLATION_COMMENT +DBMS_SQL_TRANSLATOR.SET_SQL_TRANSLATION_COMMENT +DBMS_SQL_TRANSLATOR.SET_SQL_TRANSLATION_MODULE +DBMS_SQL_TRANSLATOR.SQL_HASH +DBMS_SQL_TRANSLATOR.SQL_ID +DBMS_SQL_TRANSLATOR.TRANSLATE_ERROR +DBMS_SQL_TRANSLATOR.TRANSLATE_SQL +DBMS_SQL_TRANSLATOR_EXPORT. +DBMS_SQL_TRANSLATOR_EXPORT.AUDIT_EXP +DBMS_SQL_TRANSLATOR_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SQL_TRANSLATOR_EXPORT.CREATE_EXP +DBMS_SQL_TRANSLATOR_EXPORT.DROP_EXP +DBMS_SQL_TRANSLATOR_EXPORT.GRANT_EXP +DBMS_SQL_TRANSLATOR_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_STANDARD. +DBMS_STANDARD.APPLYING_CROSSEDITION_TRIGGER +DBMS_STANDARD.CLIENT_IP_ADDRESS +DBMS_STANDARD.COMMIT +DBMS_STANDARD.COMMIT_CM +DBMS_STANDARD.DATABASE_NAME +DBMS_STANDARD.DELETING +DBMS_STANDARD.DES_ENCRYPTED_PASSWORD +DBMS_STANDARD.DICTIONARY_OBJ_NAME +DBMS_STANDARD.DICTIONARY_OBJ_NAME_LIST +DBMS_STANDARD.DICTIONARY_OBJ_OWNER +DBMS_STANDARD.DICTIONARY_OBJ_OWNER_LIST +DBMS_STANDARD.DICTIONARY_OBJ_TYPE +DBMS_STANDARD.GRANTEE +DBMS_STANDARD.INSERTING +DBMS_STANDARD.INSTANCE_NUM +DBMS_STANDARD.IS_ALTER_COLUMN +DBMS_STANDARD.IS_CREATING_NESTED_TABLE +DBMS_STANDARD.IS_DROP_COLUMN +DBMS_STANDARD.IS_SERVERERROR +DBMS_STANDARD.LOGIN_USER +DBMS_STANDARD.ORIGINAL_SQL_TXT +DBMS_STANDARD.PARTITION_POS +DBMS_STANDARD.PRIVILEGE_LIST +DBMS_STANDARD.RAISE_APPLICATION_ERROR +DBMS_STANDARD.REVOKEE +DBMS_STANDARD.ROLLBACK_NR +DBMS_STANDARD.ROLLBACK_SV +DBMS_STANDARD.SAVEPOINT +DBMS_STANDARD.SERVER_ERROR +DBMS_STANDARD.SERVER_ERROR_DEPTH +DBMS_STANDARD.SERVER_ERROR_MSG +DBMS_STANDARD.SERVER_ERROR_NUM_PARAMS +DBMS_STANDARD.SERVER_ERROR_PARAM +DBMS_STANDARD.SET_TRANSACTION_USE +DBMS_STANDARD.SQL_TXT +DBMS_STANDARD.SYSEVENT +DBMS_STANDARD.SYS_GETTRIGGERSTATE +DBMS_STANDARD.UPDATING +DBMS_STANDARD.WITH_GRANT_OPTION +DBMS_STATS +DBMS_STATS. +DBMS_STATS.ALTER_DATABASE_TAB_MONITORING +DBMS_STATS.ALTER_SCHEMA_TAB_MONITORING +DBMS_STATS.ALTER_STATS_HISTORY_RETENTION +DBMS_STATS.CLEANUP_STATS_JOB_PROC +DBMS_STATS.CLOB_TO_VARRAY +DBMS_STATS.CONVERT_RAW_VALUE +DBMS_STATS.CONVERT_RAW_VALUE_NVARCHAR +DBMS_STATS.CONVERT_RAW_VALUE_ROWID +DBMS_STATS.CONV_RAW +DBMS_STATS.COPY_TABLE_STATS +DBMS_STATS.CREATE_EXTENDED_STATS +DBMS_STATS.CREATE_STAT_TABLE +DBMS_STATS.DELETE_COLUMN_STATS +DBMS_STATS.DELETE_DATABASE_PREFS +DBMS_STATS.DELETE_DATABASE_STATS +DBMS_STATS.DELETE_DICTIONARY_STATS +DBMS_STATS.DELETE_FIXED_OBJECTS_STATS +DBMS_STATS.DELETE_INDEX_STATS +DBMS_STATS.DELETE_PENDING_STATS +DBMS_STATS.DELETE_PENDING_SYSTEM_STATS +DBMS_STATS.DELETE_PROCESSING_RATE +DBMS_STATS.DELETE_SCHEMA_PREFS +DBMS_STATS.DELETE_SCHEMA_STATS +DBMS_STATS.DELETE_SYSTEM_STATS +DBMS_STATS.DELETE_TABLE_PREFS +DBMS_STATS.DELETE_TABLE_STATS +DBMS_STATS.DIFF_TABLE_STATS_IN_HISTORY +DBMS_STATS.DIFF_TABLE_STATS_IN_PENDING +DBMS_STATS.DIFF_TABLE_STATS_IN_STATTAB +DBMS_STATS.DROP_EXTENDED_STATS +DBMS_STATS.DROP_STAT_TABLE +DBMS_STATS.EXPORT_COLUMN_STATS +DBMS_STATS.EXPORT_DATABASE_PREFS +DBMS_STATS.EXPORT_DATABASE_STATS +DBMS_STATS.EXPORT_DICTIONARY_STATS +DBMS_STATS.EXPORT_FIXED_OBJECTS_STATS +DBMS_STATS.EXPORT_INDEX_STATS +DBMS_STATS.EXPORT_PENDING_STATS +DBMS_STATS.EXPORT_PENDING_SYSTEM_STATS +DBMS_STATS.EXPORT_SCHEMA_PREFS +DBMS_STATS.EXPORT_SCHEMA_STATS +DBMS_STATS.EXPORT_STATS_FOR_DP +DBMS_STATS.EXPORT_SYSTEM_STATS +DBMS_STATS.EXPORT_TABLE_PREFS +DBMS_STATS.EXPORT_TABLE_STATS +DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO +DBMS_STATS.GATHER_DATABASE_STATS +DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC +DBMS_STATS.GATHER_DICTIONARY_STATS +DBMS_STATS.GATHER_FIXED_OBJECTS_STATS +DBMS_STATS.GATHER_INDEX_STATS +DBMS_STATS.GATHER_PROCESSING_RATE +DBMS_STATS.GATHER_SCHEMA_STATS +DBMS_STATS.GATHER_SYSTEM_STATS +DBMS_STATS.GATHER_TABLE_STATS +DBMS_STATS.GENERATE_STATS +DBMS_STATS.GEN_SELMAP +DBMS_STATS.GET_COLUMN_STATS +DBMS_STATS.GET_COMPATIBLE +DBMS_STATS.GET_INDEX_STATS +DBMS_STATS.GET_PARAM +DBMS_STATS.GET_PREFS +DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY +DBMS_STATS.GET_STATS_HISTORY_RETENTION +DBMS_STATS.GET_STAT_TAB_VERSION +DBMS_STATS.GET_SYSTEM_STATS +DBMS_STATS.GET_TABLE_STATS +DBMS_STATS.IMPORT_COLUMN_STATS +DBMS_STATS.IMPORT_DATABASE_PREFS +DBMS_STATS.IMPORT_DATABASE_STATS +DBMS_STATS.IMPORT_DICTIONARY_STATS +DBMS_STATS.IMPORT_FIXED_OBJECTS_STATS +DBMS_STATS.IMPORT_INDEX_STATS +DBMS_STATS.IMPORT_SCHEMA_PREFS +DBMS_STATS.IMPORT_SCHEMA_STATS +DBMS_STATS.IMPORT_STATS_FOR_DP +DBMS_STATS.IMPORT_SYSTEM_STATS +DBMS_STATS.IMPORT_TABLE_PREFS +DBMS_STATS.IMPORT_TABLE_STATS +DBMS_STATS.INIT_PACKAGE +DBMS_STATS.LOCK_PARTITION_STATS +DBMS_STATS.LOCK_SCHEMA_STATS +DBMS_STATS.LOCK_TABLE_STATS +DBMS_STATS.MERGE_COL_USAGE +DBMS_STATS.POSTPROCESS_STATS +DBMS_STATS.PREPARE_COLUMN_VALUES +DBMS_STATS.PREPARE_COLUMN_VALUES_NVARCHAR +DBMS_STATS.PREPARE_COLUMN_VALUES_ROWID +DBMS_STATS.PUBLISH_PENDING_STATS +DBMS_STATS.PUBLISH_PENDING_SYSTEM_STATS +DBMS_STATS.PURGE_STATS +DBMS_STATS.REMAP_STAT_TABLE +DBMS_STATS.REPORT_COL_USAGE +DBMS_STATS.REPORT_GATHER_AUTO_STATS +DBMS_STATS.REPORT_GATHER_DATABASE_STATS +DBMS_STATS.REPORT_GATHER_DICTIONARY_STATS +DBMS_STATS.REPORT_GATHER_FIXED_OBJ_STATS +DBMS_STATS.REPORT_GATHER_SCHEMA_STATS +DBMS_STATS.REPORT_GATHER_TABLE_STATS +DBMS_STATS.REPORT_SINGLE_STATS_OPERATION +DBMS_STATS.REPORT_STATS_OPERATIONS +DBMS_STATS.RESET_COL_USAGE +DBMS_STATS.RESET_GLOBAL_PREF_DEFAULTS +DBMS_STATS.RESET_PARAM_DEFAULTS +DBMS_STATS.RESTORE_DATABASE_STATS +DBMS_STATS.RESTORE_DICTIONARY_STATS +DBMS_STATS.RESTORE_FIXED_OBJECTS_STATS +DBMS_STATS.RESTORE_SCHEMA_STATS +DBMS_STATS.RESTORE_SYSTEM_STATS +DBMS_STATS.RESTORE_TABLE_STATS +DBMS_STATS.RESUME_GATHER_STATS +DBMS_STATS.SEED_COL_USAGE +DBMS_STATS.SET_COLUMN_STATS +DBMS_STATS.SET_DATABASE_PREFS +DBMS_STATS.SET_GLOBAL_PREFS +DBMS_STATS.SET_INDEX_STATS +DBMS_STATS.SET_PARAM +DBMS_STATS.SET_PROCESSING_RATE +DBMS_STATS.SET_SCHEMA_PREFS +DBMS_STATS.SET_SYSTEM_STATS +DBMS_STATS.SET_TABLE_PREFS +DBMS_STATS.SET_TABLE_STATS +DBMS_STATS.SHOW_EXTENDED_STATS_NAME +DBMS_STATS.TO_NO_INVALIDATE_TYPE +DBMS_STATS.TRANSFER_STATS +DBMS_STATS.UNLOCK_PARTITION_STATS +DBMS_STATS.UNLOCK_SCHEMA_STATS +DBMS_STATS.UNLOCK_TABLE_STATS +DBMS_STATS.UPGRADE_STAT_TABLE +DBMS_STATS.VARRAY_TO_CLOB +DBMS_STATS_INTERNAL.ADD_PARAM +DBMS_STATS_INTERNAL.AGGREGATE_INDSTATS +DBMS_STATS_INTERNAL.AGG_PARTITION_ROWCNT +DBMS_STATS_INTERNAL.ALTER_COL_TRACKING_LEVEL +DBMS_STATS_INTERNAL.CAN_DERIVE_COL_HISTOGRAM +DBMS_STATS_INTERNAL.CCT +DBMS_STATS_INTERNAL.CHECK_ANALYZE_DONE +DBMS_STATS_INTERNAL.CHECK_DOMIDX_PARTS +DBMS_STATS_INTERNAL.CHECK_GRANULARITY +DBMS_STATS_INTERNAL.COLHASBASESTATS +DBMS_STATS_INTERNAL.COLHASHISTOGRAM +DBMS_STATS_INTERNAL.COLUMN_EXISTS +DBMS_STATS_INTERNAL.COL_STATS_FROM_LOAD +DBMS_STATS_INTERNAL.COMPOSE_HASHVAL_CLOB_REC +DBMS_STATS_INTERNAL.COMPUTE_DOP +DBMS_STATS_INTERNAL.CONTROL_PARALLEL +DBMS_STATS_INTERNAL.CREATE_TEMP +DBMS_STATS_INTERNAL.DECODE_GRANULARITY +DBMS_STATS_INTERNAL.DELETE_CACHE_HISTORY +DBMS_STATS_INTERNAL.DELETE_COL_USAGE +DBMS_STATS_INTERNAL.DELETE_FROM_USTATS +DBMS_STATS_INTERNAL.DELETE_PARTITION_SYNOPSIS +DBMS_STATS_INTERNAL.DELETE_PROC_RATE_CALLOUT +DBMS_STATS_INTERNAL.DELETE_SINGLE_COL_GROUP_USAGE +DBMS_STATS_INTERNAL.DELETE_STATS_OPERATION +DBMS_STATS_INTERNAL.DEL_SESSION_COL_STATS +DBMS_STATS_INTERNAL.DERIVE_GLOBAL_HISTOGRAM +DBMS_STATS_INTERNAL.DML_STATTAB_PREFS +DBMS_STATS_INTERNAL.DML_TABLE_PREFS +DBMS_STATS_INTERNAL.DQ +DBMS_STATS_INTERNAL.DROP_OLD_TEMP +DBMS_STATS_INTERNAL.DROP_TEMP +DBMS_STATS_INTERNAL.DUMP_ALERT_TSES +DBMS_STATS_INTERNAL.DUMP_PQ_SESSTAT +DBMS_STATS_INTERNAL.DUMP_QUERY +DBMS_STATS_INTERNAL.DUMP_TRACE +DBMS_STATS_INTERNAL.DUMP_TRACE_TS +DBMS_STATS_INTERNAL.EST_SYNOPSIS_SIZE +DBMS_STATS_INTERNAL.EXPORT_COLSTATS_DIRECT +DBMS_STATS_INTERNAL.EXPORT_FXT_COLSTATS_DIRECT +DBMS_STATS_INTERNAL.EXTRACT_STR +DBMS_STATS_INTERNAL.FILL_SYNOPSIS +DBMS_STATS_INTERNAL.FIXQ +DBMS_STATS_INTERNAL.FIX_IND_NAMES +DBMS_STATS_INTERNAL.FIX_TAB_NAMES +DBMS_STATS_INTERNAL.FLUSH_CACHE_STATS +DBMS_STATS_INTERNAL.FORMAT_CACHE_ROWS +DBMS_STATS_INTERNAL.GATHER_FXT_STATS_OK +DBMS_STATS_INTERNAL.GATHER_INDEX +DBMS_STATS_INTERNAL.GATHER_PROCESSING_RATE_AUX +DBMS_STATS_INTERNAL.GATHER_PROCESSING_RATE_JOB +DBMS_STATS_INTERNAL.GATHER_SQL_STATS +DBMS_STATS_INTERNAL.GENERATE_GROUP_LEVEL_SYNOPSIS +DBMS_STATS_INTERNAL.GENERATE_OP_ID +DBMS_STATS_INTERNAL.GET_AGG_COLSTATS +DBMS_STATS_INTERNAL.GET_AGG_NDV +DBMS_STATS_INTERNAL.GET_BLKCNT +DBMS_STATS_INTERNAL.GET_CALIB_OPID_CALLOUT +DBMS_STATS_INTERNAL.GET_COLNAME +DBMS_STATS_INTERNAL.GET_COLNUM +DBMS_STATS_INTERNAL.GET_COLTYPE +DBMS_STATS_INTERNAL.GET_COL_EXPR +DBMS_STATS_INTERNAL.GET_COUNT_OF_COLS +DBMS_STATS_INTERNAL.GET_CURRENT_JOB_NAME +DBMS_STATS_INTERNAL.GET_CURRENT_SESSION_ID +DBMS_STATS_INTERNAL.GET_DB_BLOCK_SIZE +DBMS_STATS_INTERNAL.GET_DEFAULT$ +DBMS_STATS_INTERNAL.GET_DEFAULT_DOP +DBMS_STATS_INTERNAL.GET_FIRST_PART_COL +DBMS_STATS_INTERNAL.GET_FXT_OBJ +DBMS_STATS_INTERNAL.GET_FXT_TYP +DBMS_STATS_INTERNAL.GET_HIST_DENSITY +DBMS_STATS_INTERNAL.GET_IDX_TABPART +DBMS_STATS_INTERNAL.GET_INDEX_BLOCK_COUNT +DBMS_STATS_INTERNAL.GET_INDEX_LOCK_FLAG +DBMS_STATS_INTERNAL.GET_INDEX_PART_NAME +DBMS_STATS_INTERNAL.GET_INDSTATS_DICT +DBMS_STATS_INTERNAL.GET_IND_COLS +DBMS_STATS_INTERNAL.GET_INTCOL +DBMS_STATS_INTERNAL.GET_IOT_MAPPING_TABLE +DBMS_STATS_INTERNAL.GET_MBRC +DBMS_STATS_INTERNAL.GET_MV_ENQUE +DBMS_STATS_INTERNAL.GET_OBJLIST_TEXT +DBMS_STATS_INTERNAL.GET_OBJNUM +DBMS_STATS_INTERNAL.GET_OLDEST_HISTORY_TIME +DBMS_STATS_INTERNAL.GET_PARAM +DBMS_STATS_INTERNAL.GET_PARAMETER_VAL +DBMS_STATS_INTERNAL.GET_PARAM_NUMVAL +DBMS_STATS_INTERNAL.GET_PARAM_PROP +DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG +DBMS_STATS_INTERNAL.GET_PART_COLS +DBMS_STATS_INTERNAL.GET_PREFS +DBMS_STATS_INTERNAL.GET_PREV_PART +DBMS_STATS_INTERNAL.GET_PROCRATE_ID +DBMS_STATS_INTERNAL.GET_STAT_EXTENSION +DBMS_STATS_INTERNAL.GET_SYNOPSIS_DEGREE +DBMS_STATS_INTERNAL.GET_SYNOPSIS_GROUP_NUM +DBMS_STATS_INTERNAL.GET_TABLE_BLOCK_COUNT +DBMS_STATS_INTERNAL.GET_TABLE_DEGREE +DBMS_STATS_INTERNAL.GET_TABLE_PREFS +DBMS_STATS_INTERNAL.GET_TABLE_PROPERTY +DBMS_STATS_INTERNAL.GET_TABLE_STATS_SIMPLE +DBMS_STATS_INTERNAL.GET_TAB_PROPERTY +DBMS_STATS_INTERNAL.GET_USER_NUM +DBMS_STATS_INTERNAL.GRANT_CONC_PRIV_TO_USER +DBMS_STATS_INTERNAL.HYBRID_HIST_ENABLED +DBMS_STATS_INTERNAL.IMPORT_MON_INFO +DBMS_STATS_INTERNAL.IMPORT_STATS_HISTORY +DBMS_STATS_INTERNAL.IMPORT_SYNOPSES_STATS +DBMS_STATS_INTERNAL.INDEX_MAX_KEYSIZE_OK +DBMS_STATS_INTERNAL.INDHASGLOBALSTATS +DBMS_STATS_INTERNAL.INDPARTSHAVESTATS +DBMS_STATS_INTERNAL.INIT_ID_MAP_TAB +DBMS_STATS_INTERNAL.INIT_OBJ_LIST_TAB +DBMS_STATS_INTERNAL.INSERT_INTO_USTATS +DBMS_STATS_INTERNAL.INSERT_ONLY +DBMS_STATS_INTERNAL.INS_SESSION_HG_STATS +DBMS_STATS_INTERNAL.INT_ASSERT +DBMS_STATS_INTERNAL.IS_INDEX_UNIQUE +DBMS_STATS_INTERNAL.IS_MV_TABLE_BUSY +DBMS_STATS_INTERNAL.IS_PARTGRP_ONE_TO_ONE +DBMS_STATS_INTERNAL.IS_PARTITIONED_TAB +DBMS_STATS_INTERNAL.IS_PART_DEFAULT +DBMS_STATS_INTERNAL.IS_PART_TYP_SAME +DBMS_STATS_INTERNAL.IS_RES_MAN_ON +DBMS_STATS_INTERNAL.IS_STALE +DBMS_STATS_INTERNAL.IS_TABLE_EMPTY +DBMS_STATS_INTERNAL.IS_TEMP_TAB +DBMS_STATS_INTERNAL.IS_URGENT_ERROR +DBMS_STATS_INTERNAL.JOB_CLASS_EXISTS +DBMS_STATS_INTERNAL.MANAGE_COL_TRACKING_LEVEL_JOB +DBMS_STATS_INTERNAL.MIN_NUM +DBMS_STATS_INTERNAL.MONITORING_MAN_SIGNAL_SAFEMODE +DBMS_STATS_INTERNAL.OBJECT_EXISTS +DBMS_STATS_INTERNAL.OPEN_ALL_EMPTY_OBJS_CUR +DBMS_STATS_INTERNAL.OPEN_ALL_OBJECTS_CUR +DBMS_STATS_INTERNAL.OPEN_ALL_STALE_OBJS_CUR +DBMS_STATS_INTERNAL.OPEN_COLSTATS_DICT_CUR +DBMS_STATS_INTERNAL.OPEN_COLSTATS_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_CUR_ALL_LOCAL_INDEX_PARTS +DBMS_STATS_INTERNAL.OPEN_EXTN_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_FXT_COLSTATS_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_FXT_STATS_DICT_CUR +DBMS_STATS_INTERNAL.OPEN_FXT_STATS_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_GET_IND_PARTS_CUR +DBMS_STATS_INTERNAL.OPEN_GET_IND_SUBPARTS_CUR +DBMS_STATS_INTERNAL.OPEN_GET_TARGET_PARTITIONS_CUR +DBMS_STATS_INTERNAL.OPEN_GET_TARGET_SUBPARTS_CUR +DBMS_STATS_INTERNAL.OPEN_OPERATIONS_CUR +DBMS_STATS_INTERNAL.OPEN_TAB_STATS_DICT_CUR +DBMS_STATS_INTERNAL.OPEN_TAB_STATS_HIST_CUR +DBMS_STATS_INTERNAL.PARSE_HASHVAL +DBMS_STATS_INTERNAL.PART_TYPES +DBMS_STATS_INTERNAL.PENDING_STATS_ENABLED +DBMS_STATS_INTERNAL.POPULATE_OBJ_LIST_TAB +DBMS_STATS_INTERNAL.POPULATE_SYNOPSIS_PARTGRP +DBMS_STATS_INTERNAL.POPULATE_TEMP_INSERT +DBMS_STATS_INTERNAL.PQFLAGS +DBMS_STATS_INTERNAL.PREP_INSERT_SYNOPSIS_ONLINE +DBMS_STATS_INTERNAL.PURGE_PENDING_STATS +DBMS_STATS_INTERNAL.PURGE_STATS_AUX +DBMS_STATS_INTERNAL.PURGE_STAT_TABLE +DBMS_STATS_INTERNAL.PURGE_SYNOPSIS +DBMS_STATS_INTERNAL.RECLAIM_SYNOPSIS_SPACE +DBMS_STATS_INTERNAL.REC_EXTN_CREATED +DBMS_STATS_INTERNAL.REMAP_INDEX_NAMES +DBMS_STATS_INTERNAL.RESTORE_STATS_OK +DBMS_STATS_INTERNAL.REVOKE_CONC_PRIV_FROM_USER +DBMS_STATS_INTERNAL.SAME_COL +DBMS_STATS_INTERNAL.SAME_PART +DBMS_STATS_INTERNAL.SAME_TAB_COLS +DBMS_STATS_INTERNAL.SAVE_AS_PENDING_COL_STATS +DBMS_STATS_INTERNAL.SAVE_AS_PENDING_INDEX_STATS +DBMS_STATS_INTERNAL.SAVE_AS_PENDING_TABLE_STATS +DBMS_STATS_INTERNAL.SCHEMA_EXISTS +DBMS_STATS_INTERNAL.SEGMENT_NUMBER_BLOCKS +DBMS_STATS_INTERNAL.SET_PARAM +DBMS_STATS_INTERNAL.SET_PROCESSING_RATE_AUX +DBMS_STATS_INTERNAL.SET_PROCESSING_RATE_CALLOUT +DBMS_STATS_INTERNAL.SET_TEMP_DOP +DBMS_STATS_INTERNAL.STORE_SYSTEM_STATS +DBMS_STATS_INTERNAL.SYSAUX_OFFLINE +DBMS_STATS_INTERNAL.TABHASGLOBALSTATS +DBMS_STATS_INTERNAL.TABLE_PREFS_EXISTS +DBMS_STATS_INTERNAL.TABPARTSHAVESTATS +DBMS_STATS_INTERNAL.TAB_STATS_STALE +DBMS_STATS_INTERNAL.TOP_FREQ_HIST_ENABLED +DBMS_STATS_INTERNAL.TO_BOOL_TYPE +DBMS_STATS_INTERNAL.TO_CASCADE_TYPE +DBMS_STATS_INTERNAL.TO_STALE_PERCENT_TYPE +DBMS_STATS_INTERNAL.TRACE_ERROR +DBMS_STATS_INTERNAL.TRANSLATE_EV_COLNAME +DBMS_STATS_INTERNAL.TRANSLATE_EV_TO_TBL +DBMS_STATS_INTERNAL.TRUNCATE_TABLE +DBMS_STATS_INTERNAL.TRUNCATE_TEMP +DBMS_STATS_INTERNAL.UPDATE_OP_TERMINATION_STATUS +DBMS_STATS_INTERNAL.UPDATE_SYNOPSIS_HEAD +DBMS_STATS_INTERNAL.UPDATE_TARGET_LIST +DBMS_STATS_INTERNAL.UPDATE_TASK_TERMINATION_STATUS +DBMS_STATS_INTERNAL.VIEW_COLUMN_EXISTS +DBMS_STAT_FUNCS. +DBMS_STAT_FUNCS.EXPONENTIAL_DIST_FIT +DBMS_STAT_FUNCS.NORMAL_DIST_FIT +DBMS_STAT_FUNCS.POISSON_DIST_FIT +DBMS_STAT_FUNCS.SUMMARY +DBMS_STAT_FUNCS.UNIFORM_DIST_FIT +DBMS_STAT_FUNCS.WEIBULL_DIST_FIT +DBMS_STAT_FUNCS_AUX. +DBMS_STAT_FUNCS_AUX.CALC_SW_A1 +DBMS_STAT_FUNCS_AUX.CALC_SW_A2 +DBMS_STAT_FUNCS_AUX.CALC_SW_COEF +DBMS_STAT_FUNCS_AUX.CALC_SW_FAC +DBMS_STAT_FUNCS_AUX.CALC_SW_SUMM2 +DBMS_STAT_FUNCS_AUX.CDF_BINOMIAL +DBMS_STAT_FUNCS_AUX.CDF_EXPONENTIAL +DBMS_STAT_FUNCS_AUX.CDF_NORMAL +DBMS_STAT_FUNCS_AUX.CDF_POISSON +DBMS_STAT_FUNCS_AUX.CDF_UNIFORM +DBMS_STAT_FUNCS_AUX.CDF_WEIBULL +DBMS_STAT_FUNCS_AUX.MINX +DBMS_STAT_FUNCS_AUX.POLY +DBMS_STAT_FUNCS_AUX.SIGN +DBMS_STORAGE_MAP. +DBMS_STORAGE_MAP.DROP_ALL +DBMS_STORAGE_MAP.DROP_ELEMENT +DBMS_STORAGE_MAP.DROP_FILE +DBMS_STORAGE_MAP.LOCK_MAP +DBMS_STORAGE_MAP.MAP_ALL +DBMS_STORAGE_MAP.MAP_ELEMENT +DBMS_STORAGE_MAP.MAP_FILE +DBMS_STORAGE_MAP.MAP_OBJECT +DBMS_STORAGE_MAP.RESTORE +DBMS_STORAGE_MAP.SAVE +DBMS_STORAGE_MAP.UNLOCK_MAP +DBMS_STREAMS. +DBMS_STREAMS.COMPATIBLE_10_1 +DBMS_STREAMS.COMPATIBLE_10_2 +DBMS_STREAMS.COMPATIBLE_11_1 +DBMS_STREAMS.COMPATIBLE_11_2 +DBMS_STREAMS.COMPATIBLE_12_1 +DBMS_STREAMS.COMPATIBLE_9_2 +DBMS_STREAMS.CONVERT_ANYDATA_TO_LCR_DDL +DBMS_STREAMS.CONVERT_ANYDATA_TO_LCR_ROW +DBMS_STREAMS.CONVERT_LCR_TO_XML +DBMS_STREAMS.CONVERT_XML_TO_LCR +DBMS_STREAMS.GET_INFORMATION +DBMS_STREAMS.GET_STREAMS_NAME +DBMS_STREAMS.GET_STREAMS_TYPE +DBMS_STREAMS.GET_TAG +DBMS_STREAMS.MAX_COMPATIBLE +DBMS_STREAMS.SET_TAG +DBMS_STREAMS_ADM. +DBMS_STREAMS_ADM.ADD_COLUMN +DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_GLOBAL_RULES +DBMS_STREAMS_ADM.ADD_MESSAGE_PROPAGATION_RULE +DBMS_STREAMS_ADM.ADD_MESSAGE_RULE +DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_SCHEMA_RULES +DBMS_STREAMS_ADM.ADD_SUBSET_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_SUBSET_RULES +DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_TABLE_RULES +DBMS_STREAMS_ADM.CLEANUP_INSTANTIATION_SETUP +DBMS_STREAMS_ADM.DELETE_COLUMN +DBMS_STREAMS_ADM.GET_MESSAGE_TRACKING +DBMS_STREAMS_ADM.GET_SCN_MAPPING +DBMS_STREAMS_ADM.GET_TAG +DBMS_STREAMS_ADM.KEEP_COLUMNS +DBMS_STREAMS_ADM.MAINTAIN_CHANGE_TABLE +DBMS_STREAMS_ADM.MAINTAIN_GLOBAL +DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS +DBMS_STREAMS_ADM.MAINTAIN_SIMPLE_TABLESPACE +DBMS_STREAMS_ADM.MAINTAIN_SIMPLE_TTS +DBMS_STREAMS_ADM.MAINTAIN_TABLES +DBMS_STREAMS_ADM.MAINTAIN_TABLESPACES +DBMS_STREAMS_ADM.MAINTAIN_TTS +DBMS_STREAMS_ADM.MERGE_STREAMS +DBMS_STREAMS_ADM.MERGE_STREAMS_JOB +DBMS_STREAMS_ADM.POST_INSTANTIATION_SETUP +DBMS_STREAMS_ADM.PRE_INSTANTIATION_SETUP +DBMS_STREAMS_ADM.PURGE_SOURCE_CATALOG +DBMS_STREAMS_ADM.RECOVER_OPERATION +DBMS_STREAMS_ADM.REMOVE_QUEUE +DBMS_STREAMS_ADM.REMOVE_RULE +DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION +DBMS_STREAMS_ADM.RENAME_COLUMN +DBMS_STREAMS_ADM.RENAME_SCHEMA +DBMS_STREAMS_ADM.RENAME_TABLE +DBMS_STREAMS_ADM.SET_MESSAGE_NOTIFICATION +DBMS_STREAMS_ADM.SET_MESSAGE_TRACKING +DBMS_STREAMS_ADM.SET_RULE_TRANSFORM_FUNCTION +DBMS_STREAMS_ADM.SET_TAG +DBMS_STREAMS_ADM.SET_UP_QUEUE +DBMS_STREAMS_ADM.SPLIT_STREAMS +DBMS_STREAMS_ADM_IVK. +DBMS_STREAMS_ADM_IVK.ADD_COLUMN +DBMS_STREAMS_ADM_IVK.ADD_GLOBAL_PROPAGATION_RULES +DBMS_STREAMS_ADM_IVK.ADD_GLOBAL_RULES +DBMS_STREAMS_ADM_IVK.ADD_MESSAGE_PROPAGATION_RULE +DBMS_STREAMS_ADM_IVK.ADD_MESSAGE_RULE +DBMS_STREAMS_ADM_IVK.ADD_SCHEMA_PROPAGATION_RULES +DBMS_STREAMS_ADM_IVK.ADD_SCHEMA_RULES +DBMS_STREAMS_ADM_IVK.ADD_SUBSET_PROPAGATION_RULES +DBMS_STREAMS_ADM_IVK.ADD_SUBSET_RULES +DBMS_STREAMS_ADM_IVK.ADD_TABLE_PROPAGATION_RULES +DBMS_STREAMS_ADM_IVK.ADD_TABLE_RULES +DBMS_STREAMS_ADM_IVK.CLEANUP_INSTANTIATION_SETUP +DBMS_STREAMS_ADM_IVK.DELETE_COLUMN +DBMS_STREAMS_ADM_IVK.GET_MESSAGE_TRACKING +DBMS_STREAMS_ADM_IVK.GET_SCN_MAPPING +DBMS_STREAMS_ADM_IVK.GET_TAG +DBMS_STREAMS_ADM_IVK.KEEP_COLUMNS +DBMS_STREAMS_ADM_IVK.MAINTAIN_CHANGE_TABLE +DBMS_STREAMS_ADM_IVK.MAINTAIN_GLOBAL +DBMS_STREAMS_ADM_IVK.MAINTAIN_SCHEMAS +DBMS_STREAMS_ADM_IVK.MAINTAIN_SIMPLE_TABLESPACE +DBMS_STREAMS_ADM_IVK.MAINTAIN_SIMPLE_TTS +DBMS_STREAMS_ADM_IVK.MAINTAIN_TABLES +DBMS_STREAMS_ADM_IVK.MAINTAIN_TABLESPACES +DBMS_STREAMS_ADM_IVK.MAINTAIN_TTS +DBMS_STREAMS_ADM_IVK.MERGE_STREAMS +DBMS_STREAMS_ADM_IVK.MERGE_STREAMS_JOB +DBMS_STREAMS_ADM_IVK.POST_INSTANTIATION_SETUP +DBMS_STREAMS_ADM_IVK.PRE_INSTANTIATION_SETUP +DBMS_STREAMS_ADM_IVK.PURGE_SOURCE_CATALOG +DBMS_STREAMS_ADM_IVK.RECOVER_OPERATION +DBMS_STREAMS_ADM_IVK.REMOVE_QUEUE +DBMS_STREAMS_ADM_IVK.REMOVE_RULE +DBMS_STREAMS_ADM_IVK.REMOVE_STREAMS_CONFIGURATION +DBMS_STREAMS_ADM_IVK.RENAME_COLUMN +DBMS_STREAMS_ADM_IVK.RENAME_SCHEMA +DBMS_STREAMS_ADM_IVK.RENAME_TABLE +DBMS_STREAMS_ADM_IVK.SET_MESSAGE_NOTIFICATION +DBMS_STREAMS_ADM_IVK.SET_MESSAGE_TRACKING +DBMS_STREAMS_ADM_IVK.SET_RULE_TRANSFORM_FUNCTION +DBMS_STREAMS_ADM_IVK.SET_TAG +DBMS_STREAMS_ADM_IVK.SET_UP_QUEUE +DBMS_STREAMS_ADM_IVK.SPLIT_STREAMS +DBMS_STREAMS_ADM_UTL. +DBMS_STREAMS_ADM_UTL.ADD_PROPAGATION_RULE +DBMS_STREAMS_ADM_UTL.ADD_STREAMS_ADMIN_PRIVILEGE +DBMS_STREAMS_ADM_UTL.CHECK_AGENT_DB_ACCESS +DBMS_STREAMS_ADM_UTL.CHECK_APPLY_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_CAPTURE_INPUTS +DBMS_STREAMS_ADM_UTL.CHECK_DDL_RULE +DBMS_STREAMS_ADM_UTL.CHECK_PROCESS_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_PROPAGATION_PARAM +DBMS_STREAMS_ADM_UTL.CHECK_QUEUE_ENABLED +DBMS_STREAMS_ADM_UTL.CHECK_QUEUE_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_QUEUE_TABLE +DBMS_STREAMS_ADM_UTL.CHECK_STREAMS_TYPE +DBMS_STREAMS_ADM_UTL.CHECK_TABLE_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_USER_ACCESS +DBMS_STREAMS_ADM_UTL.CHECK_USER_EXISTS +DBMS_STREAMS_ADM_UTL.CREATE_DEFAULT_RULE +DBMS_STREAMS_ADM_UTL.CREATE_PROPAGATION_PROCESS +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_GLOBAL +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_PROCEDURE +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_SCHEMA +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_TABLE +DBMS_STREAMS_ADM_UTL.DROP_APPLY +DBMS_STREAMS_ADM_UTL.DROP_CAPTURE +DBMS_STREAMS_ADM_UTL.DROP_CONSUMER +DBMS_STREAMS_ADM_UTL.DROP_DEQUEUE +DBMS_STREAMS_ADM_UTL.DROP_PROPAGATION +DBMS_STREAMS_ADM_UTL.ENSURE_STREAMS_TYPE_DEQUEUE +DBMS_STREAMS_ADM_UTL.GENERATE_DUMP_FILE_NAME +DBMS_STREAMS_ADM_UTL.GENERATE_NAME +DBMS_STREAMS_ADM_UTL.GET_APPLY_QUEUE +DBMS_STREAMS_ADM_UTL.GET_DBLINK_NAME +DBMS_STREAMS_ADM_UTL.GET_DP_JOB_MODE +DBMS_STREAMS_ADM_UTL.GET_EVALUATION_CONTEXT +DBMS_STREAMS_ADM_UTL.GET_IGNORE_TXNS +DBMS_STREAMS_ADM_UTL.GET_NOTIFICATION_LOC_HEADER +DBMS_STREAMS_ADM_UTL.GET_STREAMS_NAME +DBMS_STREAMS_ADM_UTL.INSTANTIATION_NUM_TO_CHAR +DBMS_STREAMS_ADM_UTL.IS_DATAPUMP_INSTANTIATION +DBMS_STREAMS_ADM_UTL.IS_NETWORK_INSTANTIATION +DBMS_STREAMS_ADM_UTL.POPULATE_DUMP_FILE_SET +DBMS_STREAMS_ADM_UTL.POPULATE_LOG_FILE_SET +DBMS_STREAMS_ADM_UTL.POPULATE_MESG_CONSUMER_TABLE +DBMS_STREAMS_ADM_UTL.POPULATE_MESSAGE_RULE +DBMS_STREAMS_ADM_UTL.POPULATE_STREAMS_RULE +DBMS_STREAMS_ADM_UTL.PROCESS_DROP_USER_CASCADE +DBMS_STREAMS_ADM_UTL.PURGE_INTERNAL +DBMS_STREAMS_ADM_UTL.REMOVE_DEST_OBJ_INFO +DBMS_STREAMS_ADM_UTL.REMOVE_EMPTY_HANDLERS +DBMS_STREAMS_ADM_UTL.REMOVE_RULE_INTERNAL +DBMS_STREAMS_ADM_UTL.REMOVE_STREAMS_ADMIN_PRIVILEGE +DBMS_STREAMS_ADM_UTL.REMOVE_STREAMS_RULE +DBMS_STREAMS_ADM_UTL.TRANSFORM_RULE_CONDITION +DBMS_STREAMS_ADM_UTL.UPDATE_MESG_CONSUMER_TABLE +DBMS_STREAMS_ADM_UTL.VERIFY_SUBSET_TABLE +DBMS_STREAMS_ADM_UTL_INT. +DBMS_STREAMS_ADM_UTL_INVOK. +DBMS_STREAMS_ADM_UTL_INVOK.ADD_MESSAGE_RULE +DBMS_STREAMS_ADM_UTL_INVOK.ADD_OBJECT_CONSTRAINT +DBMS_STREAMS_ADM_UTL_INVOK.ADD_STREAMS_RULE +DBMS_STREAMS_ADM_UTL_INVOK.CANON_PROC_NAME +DBMS_STREAMS_ADM_UTL_INVOK.CREATE_STREAMS_PROCESS +DBMS_STREAMS_ADM_UTL_INVOK.DROP_OBJECT_CONSTRAINT +DBMS_STREAMS_ADM_UTL_INVOK.GATHER_PERFORMANCE_STATISTICS +DBMS_STREAMS_ADM_UTL_INVOK.GET_PERFORMANCE_REPORT +DBMS_STREAMS_ADM_UTL_INVOK.HAS_PRIVS_FOR_TAG +DBMS_STREAMS_ADM_UTL_INVOK.SET_CONSTRAINT_COLUMNS +DBMS_STREAMS_ADVISOR_ADM. +DBMS_STREAMS_ADVISOR_ADM.ANALYZE_CURRENT_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL. +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_EVENT +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_LINK +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_PROP +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_STAT +DBMS_STREAMS_ADV_ADM_UTL.ANALYZE_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL.ASSIGN_COMPONENT_IDS +DBMS_STREAMS_ADV_ADM_UTL.CLEAN_IN_TABLES +DBMS_STREAMS_ADV_ADM_UTL.CLEAN_OUT_TABLES +DBMS_STREAMS_ADV_ADM_UTL.CLEAN_TABLES +DBMS_STREAMS_ADV_ADM_UTL.COLLECT_COMPONENT_EVENT_LOCAL +DBMS_STREAMS_ADV_ADM_UTL.COLLECT_DBLINKS +DBMS_STREAMS_ADV_ADM_UTL.DELETE_COMPONENT_PROP +DBMS_STREAMS_ADV_ADM_UTL.DELETE_DATABASE_INFO +DBMS_STREAMS_ADV_ADM_UTL.DISCOVER_STREAM_PATHS +DBMS_STREAMS_ADV_ADM_UTL.GET_ADVISOR_RUN_ID +DBMS_STREAMS_ADV_ADM_UTL.GET_ADVISOR_RUN_TIME +DBMS_STREAMS_ADV_ADM_UTL.GET_DBLINKS +DBMS_STREAMS_ADV_ADM_UTL.GET_DBLINK_INFO_CONVERT +DBMS_STREAMS_ADV_ADM_UTL.GET_DBLINK_INFO_UNIQUE +DBMS_STREAMS_ADV_ADM_UTL.GET_LAST_ADVISOR_RUN_TIME +DBMS_STREAMS_ADV_ADM_UTL.GET_RELEASE_NUMBER +DBMS_STREAMS_ADV_ADM_UTL.GET_VERSION_NUMBER +DBMS_STREAMS_ADV_ADM_UTL.IS_GLOBAL_NAMES +DBMS_STREAMS_ADV_ADM_UTL.IS_STAT_EMPTY +DBMS_STREAMS_ADV_ADM_UTL.IS_TOPOLOGY_CHANGED +DBMS_STREAMS_ADV_ADM_UTL.PREPARE_INPUT +DBMS_STREAMS_ADV_ADM_UTL.SET_STREAM_FLAGS +DBMS_STREAMS_ADV_ADM_UTL.SHIFT_COMPONENT_STATS +DBMS_STREAMS_ADV_ADM_UTL.STORE_COMPONENT_PROPS +DBMS_STREAMS_ADV_ADM_UTL.STORE_DATABASE_INFO +DBMS_STREAMS_ADV_ADM_UTL.STORE_STREAM_PATHS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENTS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENT_EVENTS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENT_LINKS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENT_PROPS +DBMS_STREAMS_ADV_ADM_UTL.UPDATE_APPLY_PARALLELISM +DBMS_STREAMS_ADV_ADM_UTL.UPDATE_DATABASE_INFO +DBMS_STREAMS_ADV_ADM_UTL.UPDATE_DBLINKS +DBMS_STREAMS_ADV_ADM_UTL_INVOK. +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_LOCAL_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_PERFORMANCE_INTERNAL +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_TOPOLOGY +DBMS_STREAMS_ADV_ADM_UTL_INVOK.COLLECT_DATA +DBMS_STREAMS_AUTH. +DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE +DBMS_STREAMS_AUTH.GRANT_REMOTE_ADMIN_ACCESS +DBMS_STREAMS_AUTH.REVOKE_ADMIN_PRIVILEGE +DBMS_STREAMS_AUTH.REVOKE_REMOTE_ADMIN_ACCESS +DBMS_STREAMS_AUTO_INT. +DBMS_STREAMS_AUTO_INT.APPLY_SPLITTABLE_VARCHAR2 +DBMS_STREAMS_AUTO_INT.CLEAN_AUTO_SPLIT_MERGE +DBMS_STREAMS_AUTO_INT.CLEAN_MISSING_ORIGINAL_CAPTURE +DBMS_STREAMS_AUTO_INT.CLEAN_RECOVERABLE_SCRIPT +DBMS_STREAMS_AUTO_INT.ENABLE_AUTO_SPLIT_JOB +DBMS_STREAMS_AUTO_INT.GET_CAPTURE_ID +DBMS_STREAMS_AUTO_INT.GET_NEXT_SMID +DBMS_STREAMS_AUTO_INT.READY_TO_SPLIT_NON_CCAC +DBMS_STREAMS_AUTO_INT.SPLIT_STREAMS +DBMS_STREAMS_AUTO_INT.SPLIT_STREAMS_JOB +DBMS_STREAMS_AUTO_INT.SUBMIT_SPLIT_MERGE_STREAMS_JOB +DBMS_STREAMS_CDC_ADM. +DBMS_STREAMS_CDC_ADM.SET_END_HANDLER +DBMS_STREAMS_CONTROL_ADM. +DBMS_STREAMS_CONTROL_ADM.IS_SKIP_CAPTURE +DBMS_STREAMS_CONTROL_ADM.RESUME_CAPTURE +DBMS_STREAMS_CONTROL_ADM.SKIP_CAPTURE +DBMS_STREAMS_DATAPUMP. +DBMS_STREAMS_DATAPUMP.GET_EXPORT_DML_SCN +DBMS_STREAMS_DATAPUMP.GET_EXPORT_DML_SCN_VALUE +DBMS_STREAMS_DATAPUMP.NEED_SCN +DBMS_STREAMS_DATAPUMP.NEED_SCN_COMMON +DBMS_STREAMS_DATAPUMP.SET_EXPORT_SCN +DBMS_STREAMS_DATAPUMP.SET_SESSION_STATE +DBMS_STREAMS_DATAPUMP_UTIL. +DBMS_STREAMS_DATAPUMP_UTIL.GET_RMAN_INST_SCN +DBMS_STREAMS_DATAPUMP_UTIL.GET_TYPE_NUM +DBMS_STREAMS_DATAPUMP_UTIL.IN_DATAPUMP_JOB +DBMS_STREAMS_DATAPUMP_UTIL.IS_FULL_DB_EXPORT +DBMS_STREAMS_DATAPUMP_UTIL.IS_MAINTAIN_DATAPUMP +DBMS_STREAMS_DATAPUMP_UTIL.IS_STREAMS_CONFIGURATION +DBMS_STREAMS_DATAPUMP_UTIL.JOB_MODE +DBMS_STREAMS_DATAPUMP_UTIL.JOB_TYPE +DBMS_STREAMS_DATAPUMP_UTIL.MIN_SUPP_LOGGING_ENABLED +DBMS_STREAMS_DATAPUMP_UTIL.REMOTE_LINK +DBMS_STREAMS_DECL. +DBMS_STREAMS_HANDLER_ADM. +DBMS_STREAMS_HANDLER_ADM.ADD_STMT_TO_HANDLER +DBMS_STREAMS_HANDLER_ADM.CREATE_STMT_HANDLER +DBMS_STREAMS_HANDLER_ADM.DROP_STMT_HANDLER +DBMS_STREAMS_HANDLER_ADM.REMOVE_STMT_FROM_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL. +DBMS_STREAMS_HANDLER_INTERNAL.CHANGE_HANDLER_EXISTS +DBMS_STREAMS_HANDLER_INTERNAL.CREATE_STMT_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.DROP_STMT_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.EXISTS_STMT_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.SET_STMT_IN_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.STMT_HANDLER_IN_USE +DBMS_STREAMS_LCR_INT. +DBMS_STREAMS_LCR_INT.CONVERT_LCR_TO_XML +DBMS_STREAMS_LCR_INT.CONVERT_XML_TO_LCR +DBMS_STREAMS_LCR_INT.GET_LCR_CONTENT +DBMS_STREAMS_MC. +DBMS_STREAMS_MC.MAINTAIN_CHANGE_TABLE +DBMS_STREAMS_MC_INV. +DBMS_STREAMS_MC_INV.GET_NEXT_SEQNO +DBMS_STREAMS_MESSAGING. +DBMS_STREAMS_MESSAGING.DEQUEUE +DBMS_STREAMS_MESSAGING.ENQUEUE +DBMS_STREAMS_MT. +DBMS_STREAMS_MT.ALTER_APPLY_SETUP +DBMS_STREAMS_MT.ALTER_CAPTURE_SETUP +DBMS_STREAMS_MT.ALTER_PROPAGATION_SETUP +DBMS_STREAMS_MT.APPLY_SETUP +DBMS_STREAMS_MT.BUILD_AND_PREPARE +DBMS_STREAMS_MT.CANONICALIZE_TABLEPACES +DBMS_STREAMS_MT.CAPTURE_SETUP +DBMS_STREAMS_MT.CLEANUP_INSTANTIATION_SETUP +DBMS_STREAMS_MT.CLOSE_SQL_SCRIPT +DBMS_STREAMS_MT.CONSTRUCT_SQL_REC +DBMS_STREAMS_MT.CONVERT_TAB_OBJS_TO_ARRAYS +DBMS_STREAMS_MT.CRASH_TEST +DBMS_STREAMS_MT.CREATE_CAPTURE_SETUP +DBMS_STREAMS_MT.DROP_QUEUE_SETUP +DBMS_STREAMS_MT.DROP_QUEUE_TABLE_SETUP +DBMS_STREAMS_MT.DROP_RULESET_SETUP +DBMS_STREAMS_MT.DROP_RULE_SETUP +DBMS_STREAMS_MT.DROP_TABLESPACE_SETUP +DBMS_STREAMS_MT.ENABLE_PROPAGATION +DBMS_STREAMS_MT.EXECUTING_MAINTAIN_API +DBMS_STREAMS_MT.GENERATE_HEADER_STMT +DBMS_STREAMS_MT.GET_SRC_DB +DBMS_STREAMS_MT.GET_TABLES_IN_TABLESPACES +DBMS_STREAMS_MT.GET_TARGET_DB +DBMS_STREAMS_MT.INSERT_PARAM +DBMS_STREAMS_MT.IS_IN +DBMS_STREAMS_MT.MAINTAIN_STREAMS +DBMS_STREAMS_MT.OPEN_SQL_SCRIPT +DBMS_STREAMS_MT.POST_INSTANTIATION_SETUP +DBMS_STREAMS_MT.PRE_INSTANTIATION_SETUP +DBMS_STREAMS_MT.PROCESS_SQL_REC +DBMS_STREAMS_MT.PROCESS_SQL_SCRIPT +DBMS_STREAMS_MT.PROPAGATION_SETUP +DBMS_STREAMS_MT.QUEUE_SETUP +DBMS_STREAMS_MT.RECOVER_OPERATION +DBMS_STREAMS_MT.REMOTE_STATE_BLOCK +DBMS_STREAMS_MT.REMOVE_RULE_RULESET_SETUP +DBMS_STREAMS_MT.SETUP_REMOTE_SESSION_STATE +DBMS_STREAMS_MT.SET_INSTANTIATION_SCN +DBMS_STREAMS_MT.SET_SRC_DB +DBMS_STREAMS_MT.SET_TARGET_DB +DBMS_STREAMS_MT.START_APPLY +DBMS_STREAMS_MT.START_CAPTURE +DBMS_STREAMS_MT.STOP_QUEUE_SETUP +DBMS_STREAMS_MT.STOP_STREAMS_PROCESS_SETUP +DBMS_STREAMS_PUB_RPC. +DBMS_STREAMS_PUB_RPC.GET_EXPORT_DML_SCN +DBMS_STREAMS_PUB_RPC.MIN_SUPP_LOGGING_ENABLED +DBMS_STREAMS_PUB_RPC.NEED_SCN +DBMS_STREAMS_RPC. +DBMS_STREAMS_RPC.BUILD +DBMS_STREAMS_RPC.BUILD_RC +DBMS_STREAMS_RPC.CONVERT_FILE_AT_SOURCE +DBMS_STREAMS_RPC.CONVERT_FILE_AT_SOURCE_RC +DBMS_STREAMS_RPC.CREATE_VERSION +DBMS_STREAMS_RPC.DROP_SCRIPT +DBMS_STREAMS_RPC.GET_DATABASE_SCNS +DBMS_STREAMS_RPC.GET_DATABASE_SCNS_RC +DBMS_STREAMS_RPC.GET_EXPORT_DML_SCN +DBMS_STREAMS_RPC.GET_FILE_GROUP_FILE_INFO +DBMS_STREAMS_RPC.GET_FILE_GROUP_INFO +DBMS_STREAMS_RPC.GET_FILE_GROUP_VERSION_INFO +DBMS_STREAMS_RPC.GET_OLDEST_SCN +DBMS_STREAMS_RPC.GET_OLDEST_SCN_RC +DBMS_STREAMS_RPC.GET_SYSTEM_CHANGE_NUMBER +DBMS_STREAMS_RPC.GET_SYSTEM_CHANGE_NUMBER_RC +DBMS_STREAMS_RPC.GET_UNDO_BLOCK +DBMS_STREAMS_RPC.LOCAL_EXECUTE_BLOCK +DBMS_STREAMS_RPC.MIN_SUPP_LOGGING_ENABLED +DBMS_STREAMS_RPC.NEED_SCN +DBMS_STREAMS_RPC.PREPARE_GLOBAL_INSTANTIATION +DBMS_STREAMS_RPC.PREPARE_GLOBAL_INSTANTIATION_R +DBMS_STREAMS_RPC.PREPARE_SCHEMA_INSTANTIATION +DBMS_STREAMS_RPC.PREPARE_SCHEMA_INSTANTIATION_R +DBMS_STREAMS_RPC.PREPARE_TABLE_INSTANTIATION +DBMS_STREAMS_RPC.PREPARE_TABLE_INSTANTIATION_RC +DBMS_STREAMS_RPC.PULL_ALTER_TABLESPACE +DBMS_STREAMS_RPC.PULL_PLATFORM +DBMS_STREAMS_RPC.PULL_TABLESPACE_FILE_INFO +DBMS_STREAMS_RPC.PULL_TABLESPACE_INFO +DBMS_STREAMS_RPC.PULL_TBS_FILE_NAME_ID +DBMS_STREAMS_RPC.REMOVE_FILE +DBMS_STREAMS_RPC.REMOVE_FILE_RC +DBMS_STREAMS_RPC.SET_OLDEST_SCN +DBMS_STREAMS_RPC.SET_OLDEST_SCN_RC +DBMS_STREAMS_RPC.TABLESPACES_EXIST_NUM +DBMS_STREAMS_RPC.TABLESPACES_EXIST_NUM_RC +DBMS_STREAMS_RPC.WAIT_FOR_INFLIGHT_TXN +DBMS_STREAMS_RPC.WAIT_FOR_INFLIGHT_TXN_RC +DBMS_STREAMS_RPC_INTERNAL. +DBMS_STREAMS_RPC_INTERNAL.BUILD +DBMS_STREAMS_RPC_INTERNAL.GET_SYSTEM_CHANGE_NUMBER +DBMS_STREAMS_RPC_INTERNAL.WAIT_FOR_INFLIGHT_TXN +DBMS_STREAMS_SM. +DBMS_STREAMS_SM.APPLY_EXISTS +DBMS_STREAMS_SM.CAPTURE_SPLITTABLE +DBMS_STREAMS_SM.IS_UNCOMMITTED_XOUT +DBMS_STREAMS_SM.MERGE_STREAMS +DBMS_STREAMS_SM.MERGE_STREAMS_JOB +DBMS_STREAMS_SM.OUTPUT_BOOLEAN +DBMS_STREAMS_SM.SET_JOB_NEXT_RUN +DBMS_STREAMS_SM.SPLIT_JOB_INFO +DBMS_STREAMS_SM.SPLIT_STREAMS +DBMS_STREAMS_SM.SPLIT_STREAMS_INTERNAL +DBMS_STREAMS_SM.TRY_DROP_JOB +DBMS_STREAMS_SM.WRITE_ALERT +DBMS_STREAMS_TABLESPACE_ADM. +DBMS_STREAMS_TABLESPACE_ADM.ATTACH_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.ATTACH_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.CLONE_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.CLONE_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.DETACH_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.DETACH_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.PULL_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.PULL_TABLESPACES +DBMS_STREAMS_TBS_INT. +DBMS_STREAMS_TBS_INT.CANON +DBMS_STREAMS_TBS_INT.CHECK_ASM +DBMS_STREAMS_TBS_INT.CHECK_FILE_EXISTS +DBMS_STREAMS_TBS_INT.COMBINE_DIR_AND_FILE +DBMS_STREAMS_TBS_INT.COMPARE_PATH_NAMES +DBMS_STREAMS_TBS_INT.CONVERT_FILE +DBMS_STREAMS_TBS_INT.CONVERT_FILE_AT_SOURCE +DBMS_STREAMS_TBS_INT.CONVERT_PLATFORM_TO_ID +DBMS_STREAMS_TBS_INT.DEFAULT_FILE_NAME +DBMS_STREAMS_TBS_INT.DETERMINE_CALL_TRACING +DBMS_STREAMS_TBS_INT.DUMP_ERROR +DBMS_STREAMS_TBS_INT.ENSURE_NONNULL +DBMS_STREAMS_TBS_INT.GENERATE_FILE_NAME +DBMS_STREAMS_TBS_INT.GET_FILE_COUNT +DBMS_STREAMS_TBS_INT.GET_FILE_GROUP_FILE_INFO +DBMS_STREAMS_TBS_INT.GET_FILE_GROUP_INFO +DBMS_STREAMS_TBS_INT.GET_FILE_GROUP_VERSION_INFO +DBMS_STREAMS_TBS_INT.GET_LOCAL_PLATFORM +DBMS_STREAMS_TBS_INT.GET_LOCAL_PLATFORM_ID +DBMS_STREAMS_TBS_INT.GET_TABLESPACE_INFORMATION +DBMS_STREAMS_TBS_INT.PARSE_FILE_NAME +DBMS_STREAMS_TBS_INT.RAISE_INVALID +DBMS_STREAMS_TBS_INT.REMOVE_FILE +DBMS_STREAMS_TBS_INT.TRACE_COMMON +DBMS_STREAMS_TBS_INT.TRACE_CONVERT_FILE +DBMS_STREAMS_TBS_INT.TRACE_ENTRY +DBMS_STREAMS_TBS_INT.TRACE_EXPRESSION +DBMS_STREAMS_TBS_INT.TRACE_INVOCATION +DBMS_STREAMS_TBS_INT_INVOK. +DBMS_STREAMS_TBS_INT_INVOK.CHECK_PRIVILEGE +DBMS_STREAMS_TBS_INT_INVOK.DQ +DBMS_STREAMS_TBS_INT_INVOK.GET_DATA_FILE +DBMS_STREAMS_TBS_INT_INVOK.GET_FILE_GROUP_VERSION_INFO +DBMS_STREAMS_TBS_INT_INVOK.GET_SINGLE_DATA_FILE +DBMS_STREAMS_TBS_INT_INVOK.GET_SINGLE_FILE +DBMS_STREAMS_TBS_INT_INVOK.GET_TABLESPACE_FILES +DBMS_STREAMS_TBS_INT_INVOK.GET_TABLESPACE_STATUS +DBMS_STREAMS_TBS_INT_INVOK.IS_TABLESPACE_READONLY +DBMS_STREAMS_TBS_INT_INVOK.IS_TABLESPACE_READWRITE +DBMS_STREAMS_TBS_INT_INVOK.MAKE_TABLESPACE_READONLY +DBMS_STREAMS_TBS_INT_INVOK.MAKE_TABLESPACE_READWRITE +DBMS_STREAMS_TBS_INT_INVOK.PARSE +DBMS_STREAMS_TBS_INT_INVOK.PRINT_ANY_ERROR +DBMS_STREAMS_TBS_INT_INVOK.PULL_ALTER_TABLESPACE +DBMS_STREAMS_TBS_INT_INVOK.PULL_PLATFORM +DBMS_STREAMS_TBS_INT_INVOK.PULL_TABLESPACE_FILE_INFO +DBMS_STREAMS_TBS_INT_INVOK.PULL_TABLESPACE_INFO +DBMS_STREAMS_TBS_INT_INVOK.PULL_TBS_FILE_NAME_ID +DBMS_STREAMS_TBS_INT_INVOK.RPC_PULL_TABLESPACE_FILE_INFO +DBMS_STREAMS_TBS_INT_INVOK.RPC_PULL_TABLESPACE_INFO +DBMS_STREAMS_TBS_INT_INVOK.RPC_PULL_TBS_FILE_NAME_ID +DBMS_STREAMS_TBS_INT_INVOK.TABLESPACES_EXIST_NUM +DBMS_STREAMS_TBS_INT_INVOK.WAIT_FOR_TERMINATION +DBMS_SUMMARY. +DBMS_SUMMARY.DISABLE_DEPENDENT +DBMS_SUMMARY.ENABLE_DEPENDENT +DBMS_SUMMARY.ESTIMATE_MVIEW_SIZE +DBMS_SUMMARY.SET_LOGFILE_NAME +DBMS_SUMMARY.VALIDATE_DIMENSION +DBMS_SUMREF_UTIL. +DBMS_SUMREF_UTIL.SET_LOGFILE_NAME +DBMS_SUMREF_UTIL.TRACE +DBMS_SUMREF_UTIL.TRACE_FINISH +DBMS_SUMREF_UTIL.TRACE_INIT +DBMS_SUMREF_UTIL.TRACE_OFF +DBMS_SUMREF_UTIL.TRACE_ON +DBMS_SUMVDM. +DBMS_SUMVDM.VERIFY_DIMENSION +DBMS_SUM_RWEQ_EXPORT. +DBMS_SUM_RWEQ_EXPORT.AUDIT_EXP +DBMS_SUM_RWEQ_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SUM_RWEQ_EXPORT.CREATE_EXP +DBMS_SUM_RWEQ_EXPORT.DROP_EXP +DBMS_SUM_RWEQ_EXPORT.GRANT_EXP +DBMS_SUM_RWEQ_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SUM_RWEQ_EXPORT_INTERNAL. +DBMS_SUM_RWEQ_EXPORT_INTERNAL.I_CREATE_EXP +DBMS_SWRF_INTERNAL. +DBMS_SWRF_INTERNAL.AWR_CLEAN +DBMS_SWRF_INTERNAL.AWR_DECODE_OBJECT_TYPE +DBMS_SWRF_INTERNAL.AWR_EXTRACT +DBMS_SWRF_INTERNAL.AWR_FLUSH_T2SS_SNAP +DBMS_SWRF_INTERNAL.AWR_GET_DDL +DBMS_SWRF_INTERNAL.AWR_GET_MASTER +DBMS_SWRF_INTERNAL.AWR_GET_OBJECT_INFO +DBMS_SWRF_INTERNAL.AWR_LOAD +DBMS_SWRF_INTERNAL.AWR_LOAD2 +DBMS_SWRF_INTERNAL.BASELINE_MIGRATE +DBMS_SWRF_INTERNAL.BLUPDATE_LAST_TIME_COMPUTED +DBMS_SWRF_INTERNAL.CLEANUP_DATABASE +DBMS_SWRF_INTERNAL.CLEAR_AWR_DBID +DBMS_SWRF_INTERNAL.CREATE_IMPORT_PARTITIONS +DBMS_SWRF_INTERNAL.CREATE_STAGING_SCHEMA +DBMS_SWRF_INTERNAL.CREATE_SYSAWR_USER +DBMS_SWRF_INTERNAL.DUMP_COLUMN_STATS +DBMS_SWRF_INTERNAL.GET_AWR_DBID +DBMS_SWRF_INTERNAL.GET_DUMP_INFO +DBMS_SWRF_INTERNAL.GET_SOURCE_NAME +DBMS_SWRF_INTERNAL.GRANT_PRIV_STAGING_SCHEMA +DBMS_SWRF_INTERNAL.INSERT_BASELINE_DETAILS +DBMS_SWRF_INTERNAL.MASSAGE_COLUMN_STATS +DBMS_SWRF_INTERNAL.MODIFY_AUTOPURGE_SETTINGS +DBMS_SWRF_INTERNAL.MOVE_TO_AWR +DBMS_SWRF_INTERNAL.REGISTER_DATABASE +DBMS_SWRF_INTERNAL.REGISTER_LOCAL_DBID +DBMS_SWRF_INTERNAL.REGISTER_REMOTE_DATABASE +DBMS_SWRF_INTERNAL.REMOVE_STAGING_SCHEMA +DBMS_SWRF_INTERNAL.REMOVE_WR_CONTROL +DBMS_SWRF_INTERNAL.RESERVE_SNAPSHOT_RANGE +DBMS_SWRF_INTERNAL.RESET_DEFAULT_TZ +DBMS_SWRF_INTERNAL.SET_AWR_DBID +DBMS_SWRF_INTERNAL.SET_SOURCE_NAME +DBMS_SWRF_INTERNAL.T2S_REGISTER_NFY +DBMS_SWRF_INTERNAL.T2S_SNAP_INTENT_NFY +DBMS_SWRF_INTERNAL.UNREGISTER_DATABASE +DBMS_SWRF_INTERNAL.UNREGISTER_REMOTE_DATABASE +DBMS_SWRF_INTERNAL.UNRESERVE_SNAPSHOT_RANGE +DBMS_SWRF_INTERNAL.UPDATE_DATAFILE_INFO +DBMS_SWRF_INTERNAL.UPDATE_OBJECT_INFO +DBMS_SWRF_INTERNAL.UPGRADE_SCHEMA +DBMS_SWRF_REPORT_INTERNAL. +DBMS_SWRF_REPORT_INTERNAL.ASH_GLOBAL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.ASH_INPUT_FILTER +DBMS_SWRF_REPORT_INTERNAL.ASH_REPORT_INIT +DBMS_SWRF_REPORT_INTERNAL.ASH_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.ASH_REPORT_SUMMARY +DBMS_SWRF_REPORT_INTERNAL.AWR_GLOBAL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.AWR_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.BUILD_HEADING_INFO +DBMS_SWRF_REPORT_INTERNAL.DBFUS_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.DIFF_GLOBAL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.DIFF_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.DISPLAY_SQLRPT_SECTIONS +DBMS_SWRF_REPORT_INTERNAL.GET_PCTDIFF +DBMS_SWRF_REPORT_INTERNAL.PRINT_EXECUTION_PLAN +DBMS_SWRF_REPORT_INTERNAL.REPORT_CLEANUP +DBMS_SWRF_REPORT_INTERNAL.SET_REPORT_THRESHOLDS +DBMS_SWRF_REPORT_INTERNAL.SQL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.SQL_REPORT_SUMMARY +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_CLEANUP +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_GC_XML_SQL +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_INIT +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_SUMMARY +DBMS_SYNC_REFRESH. +DBMS_SYNC_REFRESH.ABORT_REFRESH +DBMS_SYNC_REFRESH.ALTER_REFRESH_STATS_RETENTION +DBMS_SYNC_REFRESH.CAN_SYNCREF_TABLE +DBMS_SYNC_REFRESH.EXECUTE_REFRESH +DBMS_SYNC_REFRESH.GET_ALL_GROUP_IDS +DBMS_SYNC_REFRESH.GET_GROUP_ID +DBMS_SYNC_REFRESH.GET_GROUP_ID_LIST +DBMS_SYNC_REFRESH.PREPARE_REFRESH +DBMS_SYNC_REFRESH.PREPARE_STAGING_LOG +DBMS_SYNC_REFRESH.PURGE_REFRESH_STATS +DBMS_SYNC_REFRESH.REGISTER_MVIEWS +DBMS_SYNC_REFRESH.REGISTER_PARTITION_OPERATION +DBMS_SYNC_REFRESH.UNREGISTER_MVIEWS +DBMS_SYNC_REFRESH.UNREGISTER_PARTITION_OPERATION +DBMS_SYSTEM. +DBMS_SYSTEM.ADD_PARAMETER_VALUE +DBMS_SYSTEM.DIST_TXN_SYNC +DBMS_SYSTEM.GET_ENV +DBMS_SYSTEM.KCFRMS +DBMS_SYSTEM.KSDDDT +DBMS_SYSTEM.KSDFLS +DBMS_SYSTEM.KSDIND +DBMS_SYSTEM.KSDWRT +DBMS_SYSTEM.READ_EV +DBMS_SYSTEM.REMOVE_PARAMETER_VALUE +DBMS_SYSTEM.SET_BOOL_PARAM_IN_SESSION +DBMS_SYSTEM.SET_EV +DBMS_SYSTEM.SET_INT_PARAM_IN_SESSION +DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION +DBMS_SYSTEM.WAIT_FOR_EVENT +DBMS_SYS_ERROR. +DBMS_SYS_ERROR.RAISE_SYSTEM_ERROR +DBMS_SYS_SQL. +DBMS_SYS_SQL.BIND_ARRAY +DBMS_SYS_SQL.BIND_VARIABLE +DBMS_SYS_SQL.BIND_VARIABLE_CHAR +DBMS_SYS_SQL.BIND_VARIABLE_RAW +DBMS_SYS_SQL.BIND_VARIABLE_ROWID +DBMS_SYS_SQL.CLOSE_CURSOR +DBMS_SYS_SQL.COLUMN_VALUE +DBMS_SYS_SQL.COLUMN_VALUE_CHAR +DBMS_SYS_SQL.COLUMN_VALUE_LONG +DBMS_SYS_SQL.COLUMN_VALUE_RAW +DBMS_SYS_SQL.COLUMN_VALUE_ROWID +DBMS_SYS_SQL.DEFINE_ARRAY +DBMS_SYS_SQL.DEFINE_COLUMN +DBMS_SYS_SQL.DEFINE_COLUMN_CHAR +DBMS_SYS_SQL.DEFINE_COLUMN_LONG +DBMS_SYS_SQL.DEFINE_COLUMN_RAW +DBMS_SYS_SQL.DEFINE_COLUMN_ROWID +DBMS_SYS_SQL.DESCRIBE_COLUMNS +DBMS_SYS_SQL.DESCRIBE_COLUMNS2 +DBMS_SYS_SQL.DESCRIBE_COLUMNS3 +DBMS_SYS_SQL.DUMP_ALL_OPEN_CURSORS +DBMS_SYS_SQL.EXECUTE +DBMS_SYS_SQL.EXECUTE_AND_FETCH +DBMS_SYS_SQL.FETCH_ROWS +DBMS_SYS_SQL.GET_NEXT_RESULT +DBMS_SYS_SQL.GET_RPI_CURSOR +DBMS_SYS_SQL.INIT +DBMS_SYS_SQL.IS_OPEN +DBMS_SYS_SQL.LAST_ERROR_POSITION +DBMS_SYS_SQL.LAST_ROW_COUNT +DBMS_SYS_SQL.LAST_ROW_ID +DBMS_SYS_SQL.LAST_SQL_FUNCTION_CODE +DBMS_SYS_SQL.OPEN_CURSOR +DBMS_SYS_SQL.PARSE +DBMS_SYS_SQL.PARSE_AS_USER +DBMS_SYS_SQL.RETURN_RESULT +DBMS_SYS_SQL.TO_CURSOR_NUMBER +DBMS_SYS_SQL.TO_REFCURSOR +DBMS_SYS_SQL.VARIABLE_VALUE +DBMS_SYS_SQL.VARIABLE_VALUE_CHAR +DBMS_SYS_SQL.VARIABLE_VALUE_RAW +DBMS_SYS_SQL.VARIABLE_VALUE_ROWID +DBMS_TDB. +DBMS_TDB.CHECK_DB +DBMS_TDB.CHECK_EXTERNAL +DBMS_TDB.EXIT_TRANSPORT_SCRIPT +DBMS_TDE_TOOLKIT. +DBMS_TDE_TOOLKIT.DATAPUMP_DECRYPT +DBMS_TDE_TOOLKIT.DATAPUMP_ENCRYPT +DBMS_TDE_TOOLKIT_FFI. +DBMS_TDE_TOOLKIT_FFI.DATAPUMP_DECRYPT +DBMS_TDE_TOOLKIT_FFI.DATAPUMP_ENCRYPT +DBMS_TRACE. +DBMS_TRACE.CLEAR_PLSQL_TRACE +DBMS_TRACE.COMMENT_PLSQL_TRACE +DBMS_TRACE.GET_PLSQL_TRACE_LEVEL +DBMS_TRACE.GET_PLSQL_TRACE_RUNNUMBER +DBMS_TRACE.INTERNAL_VERSION_CHECK +DBMS_TRACE.LIMIT_PLSQL_TRACE +DBMS_TRACE.PAUSE_PLSQL_TRACE +DBMS_TRACE.PLSQL_TRACE_VERSION +DBMS_TRACE.RESUME_PLSQL_TRACE +DBMS_TRACE.SET_PLSQL_TRACE +DBMS_TRANSACTION. +DBMS_TRANSACTION.ADVISE_COMMIT +DBMS_TRANSACTION.ADVISE_NOTHING +DBMS_TRANSACTION.ADVISE_ROLLBACK +DBMS_TRANSACTION.BEGIN_DISCRETE_TRANSACTION +DBMS_TRANSACTION.COMMIT +DBMS_TRANSACTION.COMMIT_COMMENT +DBMS_TRANSACTION.COMMIT_FORCE +DBMS_TRANSACTION.LOCAL_TRANSACTION_ID +DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY +DBMS_TRANSACTION.PURGE_MIXED +DBMS_TRANSACTION.READ_ONLY +DBMS_TRANSACTION.READ_WRITE +DBMS_TRANSACTION.ROLLBACK +DBMS_TRANSACTION.ROLLBACK_FORCE +DBMS_TRANSACTION.ROLLBACK_SAVEPOINT +DBMS_TRANSACTION.SAVEPOINT +DBMS_TRANSACTION.STEP_ID +DBMS_TRANSACTION.USE_ROLLBACK_SEGMENT +DBMS_TRANSACTION_INTERNAL_SYS. +DBMS_TRANSACTION_INTERNAL_SYS.GET_CURRENT_SCN +DBMS_TRANSFORM. +DBMS_TRANSFORM.COMPUTE_TRANSFORMATION +DBMS_TRANSFORM.CREATE_TRANSFORMATION +DBMS_TRANSFORM.DROP_TRANSFORMATION +DBMS_TRANSFORM.MODIFY_TRANSFORMATION +DBMS_TRANSFORM_EXIMP. +DBMS_TRANSFORM_EXIMP.IMPORT_TRANSFORMATION +DBMS_TRANSFORM_EXIMP.IMPORT_TRANS_ATTR +DBMS_TRANSFORM_EXIMP.INSTANCE_INFO_EXP +DBMS_TRANSFORM_EXIMP.SCHEMA_INFO_EXP +DBMS_TRANSFORM_EXIMP_INTERNAL. +DBMS_TRANSFORM_EXIMP_INTERNAL.PARSE_NAME +DBMS_TRANSFORM_EXIMP_INTERNAL.PROCESS_TRANS +DBMS_TRANSFORM_EXIMP_INTERNAL.PROCESS_TRANS_ATTRIB +DBMS_TRANSFORM_INTERNAL. +DBMS_TRANSFORM_INTERNAL.I_CREATE_TRANS +DBMS_TRANSFORM_INTERNAL.I_DROP_TRANSFORMATION +DBMS_TRANSFORM_INTERNAL.I_MODIFY_TRANS +DBMS_TSDP_MANAGE. +DBMS_TSDP_MANAGE.ADD_SENSITIVE_COLUMN +DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE +DBMS_TSDP_MANAGE.ALTER_SENSITIVE_COLUMN +DBMS_TSDP_MANAGE.DROP_SENSITIVE_COLUMN +DBMS_TSDP_MANAGE.DROP_SENSITIVE_TYPE +DBMS_TSDP_MANAGE.DROP_SENSITIVE_TYPE_SOURCE +DBMS_TSDP_MANAGE.IMPORT_DISCOVERY_RESULT +DBMS_TSDP_MANAGE.IMPORT_SENSITIVE_TYPES +DBMS_TSDP_MANAGE.REMOVE_DISCOVERY_RESULT +DBMS_TSDP_PROTECT. +DBMS_TSDP_PROTECT.ADD_POLICY +DBMS_TSDP_PROTECT.ALTER_POLICY +DBMS_TSDP_PROTECT.ASSOCIATE_POLICY +DBMS_TSDP_PROTECT.DISABLE_PROTECTION_COLUMN +DBMS_TSDP_PROTECT.DISABLE_PROTECTION_SOURCE +DBMS_TSDP_PROTECT.DISABLE_PROTECTION_TYPE +DBMS_TSDP_PROTECT.DROP_POLICY +DBMS_TSDP_PROTECT.ENABLE_PROTECTION_COLUMN +DBMS_TSDP_PROTECT.ENABLE_PROTECTION_SOURCE +DBMS_TSDP_PROTECT.ENABLE_PROTECTION_TYPE +DBMS_TTS. +DBMS_TTS.ADD_PROTECTED_CE_TAB_KEY +DBMS_TTS.CHECKTABLESPACE +DBMS_TTS.DH_KEY_EXCHANGE +DBMS_TTS.DOWNGRADE +DBMS_TTS.GET_AFN_DBID +DBMS_TTS.GET_PROTECTED_CE_TAB_KEY +DBMS_TTS.GET_PROTECTED_TSE_KEY +DBMS_TTS.INSERT_ERROR +DBMS_TTS.ISSELFCONTAINED +DBMS_TTS.PUT_PROTECTED_TSE_KEY +DBMS_TTS.SET_PASSPHRASE +DBMS_TTS.TAB_FUNC_ERROR +DBMS_TTS.TRANSPORT_CHAR_SET_CHECK +DBMS_TTS.TRANSPORT_CHAR_SET_CHECK_MSG +DBMS_TTS.TRANSPORT_SET_CHECK +DBMS_TYPES. +DBMS_TYPE_UTILITY. +DBMS_TYPE_UTILITY.COMPILE_ALL_TYPES +DBMS_TYPE_UTILITY.DELETE_CONSTRUCTOR_KEYWORD +DBMS_TYPE_UTILITY.RESET_ALL_TYPES +DBMS_TYPE_UTILITY.UPGRADE_ALL_TABLES +DBMS_UNDO_ADV. +DBMS_UNDO_ADV.BEST_POSSIBLE_RETENTION +DBMS_UNDO_ADV.LONGEST_QUERY +DBMS_UNDO_ADV.RBU_MIGRATION +DBMS_UNDO_ADV.REQUIRED_RETENTION +DBMS_UNDO_ADV.REQUIRED_UNDO_SIZE +DBMS_UNDO_ADV.UNDO_ADVISOR +DBMS_UNDO_ADV.UNDO_AUTOTUNE +DBMS_UNDO_ADV.UNDO_HEALTH +DBMS_UNDO_ADV.UNDO_INFO +DBMS_UTILITY. +DBMS_UTILITY.ACTIVE_INSTANCES +DBMS_UTILITY.ANALYZE_DATABASE +DBMS_UTILITY.ANALYZE_PART_OBJECT +DBMS_UTILITY.ANALYZE_SCHEMA +DBMS_UTILITY.CANONICALIZE +DBMS_UTILITY.COMMA_TO_TABLE +DBMS_UTILITY.COMPILE_SCHEMA +DBMS_UTILITY.CREATE_ALTER_TYPE_ERROR_TABLE +DBMS_UTILITY.CURRENT_INSTANCE +DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK +DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE +DBMS_UTILITY.DB_VERSION +DBMS_UTILITY.EXEC_DDL_STATEMENT +DBMS_UTILITY.EXPAND_SQL_TEXT +DBMS_UTILITY.FORMAT_CALL_STACK +DBMS_UTILITY.FORMAT_ERROR_BACKTRACE +DBMS_UTILITY.FORMAT_ERROR_STACK +DBMS_UTILITY.GET_CPU_TIME +DBMS_UTILITY.GET_DEPENDENCY +DBMS_UTILITY.GET_ENDIANNESS +DBMS_UTILITY.GET_HASH_VALUE +DBMS_UTILITY.GET_PARAMETER_VALUE +DBMS_UTILITY.GET_SQL_HASH +DBMS_UTILITY.GET_TIME +DBMS_UTILITY.GET_TZ_TRANSITIONS +DBMS_UTILITY.INVALIDATE +DBMS_UTILITY.IS_BIT_SET +DBMS_UTILITY.IS_CLUSTER_DATABASE +DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS +DBMS_UTILITY.NAME_RESOLVE +DBMS_UTILITY.NAME_TOKENIZE +DBMS_UTILITY.OLD_CURRENT_SCHEMA +DBMS_UTILITY.OLD_CURRENT_USER +DBMS_UTILITY.PORT_STRING +DBMS_UTILITY.SQLID_TO_SQLHASH +DBMS_UTILITY.TABLE_TO_COMMA +DBMS_UTILITY.VALIDATE +DBMS_UTILITY.WAIT_ON_PENDING_DML +DBMS_WARNING. +DBMS_WARNING.ADD_WARNING_SETTING_CAT +DBMS_WARNING.ADD_WARNING_SETTING_NUM +DBMS_WARNING.GET_CATEGORY +DBMS_WARNING.GET_WARNING_SETTING_CAT +DBMS_WARNING.GET_WARNING_SETTING_NUM +DBMS_WARNING.GET_WARNING_SETTING_STRING +DBMS_WARNING.SET_WARNING_SETTING_STRING +DBMS_WARNING_INTERNAL. +DBMS_WARNING_INTERNAL.SHOW_WARNING_SETTINGS +DBMS_WLM. +DBMS_WLM.ABORT_WLMPLAN +DBMS_WLM.ADD_WLMCLASSIFIERS +DBMS_WLM.CHECK_RM_ENABLE +DBMS_WLM.CHECK_RM_PLAN +DBMS_WLM.CHECK_WLMPLAN +DBMS_WLM.CREATE_WLMPLAN +DBMS_WLM.DELETE_CG_MAPPINGS +DBMS_WLM.DELETE_WLMPLAN +DBMS_WLM.GET_CAPABILITIES +DBMS_WLM.GET_CDB_SETTING +DBMS_WLM.GET_CPU_COUNT +DBMS_WLM.GET_PDB_INFO +DBMS_WLM.GET_PO_MULTIPLIER +DBMS_WLM.SET_CDB_SETTING +DBMS_WLM.SET_CPU_COUNT +DBMS_WLM.SET_DBI_RM_PLAN +DBMS_WLM.SET_PDB_RM_PLAN +DBMS_WLM.SET_PO_MULTIPLIER +DBMS_WLM.SET_RM_PLAN +DBMS_WLM.SUBMIT_WLMPCINFO +DBMS_WLM.SUBMIT_WLMPCS +DBMS_WLM.SUBMIT_WLMPLAN +DBMS_WLM.UPDATE_CG_MAPPINGS +DBMS_WLM.UP_CG_MAPS +DBMS_WORKLOAD_CAPTURE. +DBMS_WORKLOAD_CAPTURE.ADD_FILTER +DBMS_WORKLOAD_CAPTURE.DELETE_CAPTURE_INFO +DBMS_WORKLOAD_CAPTURE.DELETE_FILTER +DBMS_WORKLOAD_CAPTURE.EXPORT_AWR +DBMS_WORKLOAD_CAPTURE.EXPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_CAPTURE.EXPORT_UC_GRAPH +DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE +DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO +DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_PATH +DBMS_WORKLOAD_CAPTURE.GET_PERF_DATA_EXPORT_STATUS +DBMS_WORKLOAD_CAPTURE.IMPORT_AWR +DBMS_WORKLOAD_CAPTURE.IMPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_CAPTURE.IMPORT_UC_GRAPH +DBMS_WORKLOAD_CAPTURE.REPORT +DBMS_WORKLOAD_CAPTURE.START_CAPTURE +DBMS_WORKLOAD_CAPTURE.USER_CALLS_GRAPH +DBMS_WORKLOAD_REPLAY. +DBMS_WORKLOAD_REPLAY.ADD_CAPTURE +DBMS_WORKLOAD_REPLAY.ADD_FILTER +DBMS_WORKLOAD_REPLAY.ADD_SCHEDULE_ORDERING +DBMS_WORKLOAD_REPLAY.ADJUST_TIMES_TO_SNAP_TIMEZONE +DBMS_WORKLOAD_REPLAY.BEGIN_REPLAY_SCHEDULE +DBMS_WORKLOAD_REPLAY.CALIBRATE +DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY +DBMS_WORKLOAD_REPLAY.CLIENT_CONNECT +DBMS_WORKLOAD_REPLAY.CLIENT_GET_REPLAY_SUBDIR +DBMS_WORKLOAD_REPLAY.CLIENT_VITALS +DBMS_WORKLOAD_REPLAY.COMPARE_PERIOD_REPORT +DBMS_WORKLOAD_REPLAY.COMPARE_SQLSET_REPORT +DBMS_WORKLOAD_REPLAY.CREATE_FILTER_SET +DBMS_WORKLOAD_REPLAY.DELETE_ATTRIBUTE +DBMS_WORKLOAD_REPLAY.DELETE_FILTER +DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO +DBMS_WORKLOAD_REPLAY.DIVERGING_STATEMENT_STATUS +DBMS_WORKLOAD_REPLAY.END_REPLAY_SCHEDULE +DBMS_WORKLOAD_REPLAY.EXPORT_AWR +DBMS_WORKLOAD_REPLAY.EXPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_REPLAY.EXPORT_UC_GRAPH +DBMS_WORKLOAD_REPLAY.GENERATE_CAPTURE_SUBSET +DBMS_WORKLOAD_REPLAY.GET_ADVANCED_PARAMETER +DBMS_WORKLOAD_REPLAY.GET_ATTRIBUTE +DBMS_WORKLOAD_REPLAY.GET_CAPTURED_TABLES +DBMS_WORKLOAD_REPLAY.GET_CLOCK +DBMS_WORKLOAD_REPLAY.GET_DIVERGING_STATEMENT +DBMS_WORKLOAD_REPLAY.GET_PERF_DATA_EXPORT_STATUS +DBMS_WORKLOAD_REPLAY.GET_PROCESSING_PATH +DBMS_WORKLOAD_REPLAY.GET_REPLAY_DIRECTORY +DBMS_WORKLOAD_REPLAY.GET_REPLAY_INFO +DBMS_WORKLOAD_REPLAY.GET_REPLAY_PATH +DBMS_WORKLOAD_REPLAY.GET_REPLAY_TIMEOUT +DBMS_WORKLOAD_REPLAY.IMPORT_AWR +DBMS_WORKLOAD_REPLAY.IMPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_REPLAY.IMPORT_UC_GRAPH +DBMS_WORKLOAD_REPLAY.INITIALIZE_CONSOLIDATED_REPLAY +DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY +DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY_INTERNAL +DBMS_WORKLOAD_REPLAY.IS_REPLAY_PAUSED +DBMS_WORKLOAD_REPLAY.LOAD_DIVERGENCE +DBMS_WORKLOAD_REPLAY.PAUSE_REPLAY +DBMS_WORKLOAD_REPLAY.PERSIST_ATTRIBUTES +DBMS_WORKLOAD_REPLAY.POPULATE_DIVERGENCE +DBMS_WORKLOAD_REPLAY.POPULATE_DIVERGENCE_STATUS +DBMS_WORKLOAD_REPLAY.PREPARE_CONSOLIDATED_REPLAY +DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY +DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE +DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE_COMPLETION +DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE_REMAINING_TIME +DBMS_WORKLOAD_REPLAY.PROCESS_REPLAY_GRAPH +DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION +DBMS_WORKLOAD_REPLAY.REMOVE_CAPTURE +DBMS_WORKLOAD_REPLAY.REMOVE_REPLAY_SCHEDULE +DBMS_WORKLOAD_REPLAY.REMOVE_SCHEDULE_ORDERING +DBMS_WORKLOAD_REPLAY.REPORT +DBMS_WORKLOAD_REPLAY.RESET_ADVANCED_PARAMETERS +DBMS_WORKLOAD_REPLAY.RESUME_REPLAY +DBMS_WORKLOAD_REPLAY.REUSE_REPLAY_FILTER_SET +DBMS_WORKLOAD_REPLAY.SET_ADVANCED_PARAMETER +DBMS_WORKLOAD_REPLAY.SET_ATTRIBUTE +DBMS_WORKLOAD_REPLAY.SET_CONSOLIDATED_DIRECTORY +DBMS_WORKLOAD_REPLAY.SET_REPLAY_DIRECTORY +DBMS_WORKLOAD_REPLAY.SET_REPLAY_TIMEOUT +DBMS_WORKLOAD_REPLAY.SET_USER_MAPPING +DBMS_WORKLOAD_REPLAY.START_CONSOLIDATED_REPLAY +DBMS_WORKLOAD_REPLAY.START_REPLAY +DBMS_WORKLOAD_REPLAY.STOP_STS_C +DBMS_WORKLOAD_REPLAY.SYNC_ATTRIBUTES_FROM_FILE +DBMS_WORKLOAD_REPLAY.USER_CALLS_GRAPH +DBMS_WORKLOAD_REPLAY.USE_FILTER_SET +DBMS_WORKLOAD_REPLAY.WORKLOAD_INTELLIGENCE_REPORT +DBMS_WORKLOAD_REPOSITORY. +DBMS_WORKLOAD_REPOSITORY.ADD_COLORED_SQL +DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_ANALYTICS +DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_DIFF_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_DIFF_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_SET_REPORT_THRESHOLDS +DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.CONTROL_RESTRICTED_SNAPSHOT +DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE +DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE +DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT +DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE +DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE +DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE +DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE +DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS +DBMS_WORKLOAD_REPOSITORY.PURGE_SQL_DETAILS +DBMS_WORKLOAD_REPOSITORY.REMOVE_COLORED_SQL +DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE +DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_DETAILS +DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRIC +DBMS_WORKLOAD_REPOSITORY.UPDATE_DATAFILE_INFO +DBMS_WORKLOAD_REPOSITORY.UPDATE_OBJECT_INFO +DBMS_WRR_INTERNAL. +DBMS_WRR_INTERNAL.ACQUIRE_WRR_LOCK +DBMS_WRR_INTERNAL.ADD_CAPTURE +DBMS_WRR_INTERNAL.ADD_CAPTURE_STATS +DBMS_WRR_INTERNAL.ADD_FILTER +DBMS_WRR_INTERNAL.ADD_REPLAY +DBMS_WRR_INTERNAL.ADD_REPLAY_STATS +DBMS_WRR_INTERNAL.ADJUST_TIMES_TO_SNAP_TIMEZONE +DBMS_WRR_INTERNAL.BUILD_CAPTURE_INFO_TAG +DBMS_WRR_INTERNAL.CAPTURE_EXPORT_AWR +DBMS_WRR_INTERNAL.CAPTURE_UPDATE_EXP_STATUS +DBMS_WRR_INTERNAL.CHECK_RAT_EXEC_OPTION +DBMS_WRR_INTERNAL.COMPARE_STS +DBMS_WRR_INTERNAL.COPY_FILTERS +DBMS_WRR_INTERNAL.COUNT_FILTERS +DBMS_WRR_INTERNAL.CREATE_DIR_OBJ +DBMS_WRR_INTERNAL.CREATE_DIR_OBJ_TMP +DBMS_WRR_INTERNAL.CREATE_SNAPSHOT +DBMS_WRR_INTERNAL.DBG_TRACE +DBMS_WRR_INTERNAL.DB_DATE +DBMS_WRR_INTERNAL.DELETE_CAPTURE +DBMS_WRR_INTERNAL.DELETE_FILE +DBMS_WRR_INTERNAL.DELETE_FILTER +DBMS_WRR_INTERNAL.DELETE_REPLAY +DBMS_WRR_INTERNAL.DROP_DIR_OBJ +DBMS_WRR_INTERNAL.DROP_TABLE +DBMS_WRR_INTERNAL.END_REPLAY_ACTIONS +DBMS_WRR_INTERNAL.EXPORT_STS +DBMS_WRR_INTERNAL.EXPORT_STS_FROM_CAPTURE +DBMS_WRR_INTERNAL.EXPORT_STS_FROM_REPLAY +DBMS_WRR_INTERNAL.EXPORT_UC_GRAPH +DBMS_WRR_INTERNAL.FILE_EXISTS +DBMS_WRR_INTERNAL.FINALIZE_STS_CAPTURE +DBMS_WRR_INTERNAL.FORMAT_BYTES +DBMS_WRR_INTERNAL.FORMAT_INTERVAL +DBMS_WRR_INTERNAL.GENERATE_CAPTURE_WID +DBMS_WRR_INTERNAL.GET_ASH_REPORT_REFERENCE +DBMS_WRR_INTERNAL.GET_BOOLEAN_VALUE +DBMS_WRR_INTERNAL.GET_CAPINFO_INTERNAL +DBMS_WRR_INTERNAL.GET_CAPTURE_SIG +DBMS_WRR_INTERNAL.GET_DIR_PATH +DBMS_WRR_INTERNAL.GET_EXPORT_STATUS_I +DBMS_WRR_INTERNAL.GET_FILE +DBMS_WRR_INTERNAL.GET_REPLAY_SIG +DBMS_WRR_INTERNAL.GET_ROW_DIVERGENCE_BCK_HLP +DBMS_WRR_INTERNAL.GET_STS_NAME +DBMS_WRR_INTERNAL.GET_UNIQUE_DBID +DBMS_WRR_INTERNAL.IMPORT_STS +DBMS_WRR_INTERNAL.IMPORT_STS_FROM_CAPTURE +DBMS_WRR_INTERNAL.IMPORT_STS_FROM_REPLAY +DBMS_WRR_INTERNAL.IMPORT_UC_GRAPH +DBMS_WRR_INTERNAL.INVOKE_ACQUIRE_WRR_LOCK +DBMS_WRR_INTERNAL.INVOKE_CHECK_SQLSET_PRIVS +DBMS_WRR_INTERNAL.INVOKE_DIS_RES_SESS +DBMS_WRR_INTERNAL.INVOKE_GET_PATH +DBMS_WRR_INTERNAL.INVOKE_KGHSFSNEWFILE +DBMS_WRR_INTERNAL.INVOKE_READ_WMD +DBMS_WRR_INTERNAL.INVOKE_RELEASE_WRR_LOCK +DBMS_WRR_INTERNAL.INVOKE_UPDATE_WMD +DBMS_WRR_INTERNAL.IS_CONSOLIDATED_DATABASE +DBMS_WRR_INTERNAL.IS_CONTAINER_CDBROOT +DBMS_WRR_INTERNAL.IS_CONTAINER_PDB +DBMS_WRR_INTERNAL.LOAD_WORKLOAD_ATTRIBUTES +DBMS_WRR_INTERNAL.OS_SECONDS +DBMS_WRR_INTERNAL.PUT_FILE +DBMS_WRR_INTERNAL.REPLAY_EXPORT_AWR +DBMS_WRR_INTERNAL.REPLAY_REPORT_INTERNAL +DBMS_WRR_INTERNAL.REPLAY_SUFFIX +DBMS_WRR_INTERNAL.START_STS_CAPTURE +DBMS_WRR_INTERNAL.STOP_SQL_SET_CAPTURE +DBMS_WRR_INTERNAL.TO_DBTZ +DBMS_WRR_INTERNAL.TRUNCATE_TABLE +DBMS_WRR_INTERNAL.UPDATE_CAPTURE_TOTAL_STATS +DBMS_WRR_INTERNAL.VALID_DEFAULT_ACTION +DBMS_WRR_INTERNAL.WI_TRANSFORM_ID_TO_STR +DBMS_XA. +DBMS_XA.DIST_TXN_SYNC +DBMS_XA.XA_COMMIT +DBMS_XA.XA_END +DBMS_XA.XA_FORGET +DBMS_XA.XA_GETLASTOER +DBMS_XA.XA_PREPARE +DBMS_XA.XA_RECOVER +DBMS_XA.XA_ROLLBACK +DBMS_XA.XA_SETTIMEOUT +DBMS_XA.XA_START +DBMS_XA_XID.DBMS_XA_XID +DBMS_XDB. +DBMS_XDB.ACLCHECKPRIVILEGES +DBMS_XDB.ADDHTTPEXPIREMAPPING +DBMS_XDB.ADDMIMEMAPPING +DBMS_XDB.ADDRESOURCE +DBMS_XDB.ADDSCHEMALOCMAPPING +DBMS_XDB.ADDSERVLET +DBMS_XDB.ADDSERVLETMAPPING +DBMS_XDB.ADDSERVLETSECROLE +DBMS_XDB.ADDTOLOCKTOKENLIST +DBMS_XDB.ADDXMLEXTENSION +DBMS_XDB.APPENDRESOURCEMETADATA +DBMS_XDB.CFG_GET +DBMS_XDB.CFG_REFRESH +DBMS_XDB.CFG_UPDATE +DBMS_XDB.CHANGEOWNER +DBMS_XDB.CHANGEPRIVILEGES +DBMS_XDB.CHECKPRIVILEGES +DBMS_XDB.CREATEFOLDER +DBMS_XDB.CREATEOIDPATH +DBMS_XDB.CREATERESOURCE +DBMS_XDB.DELETEFROMLOCKTOKENLIST +DBMS_XDB.DELETEHTTPEXPIREMAPPING +DBMS_XDB.DELETEMIMEMAPPING +DBMS_XDB.DELETERESOURCE +DBMS_XDB.DELETERESOURCEMETADATA +DBMS_XDB.DELETESCHEMALOCMAPPING +DBMS_XDB.DELETESERVLET +DBMS_XDB.DELETESERVLETMAPPING +DBMS_XDB.DELETESERVLETSECROLE +DBMS_XDB.DELETEXMLEXTENSION +DBMS_XDB.EXISTSRESOURCE +DBMS_XDB.GETACLDOCUMENT +DBMS_XDB.GETCONTENTBLOB +DBMS_XDB.GETCONTENTCLOB +DBMS_XDB.GETCONTENTVARCHAR2 +DBMS_XDB.GETCONTENTXMLREF +DBMS_XDB.GETCONTENTXMLTYPE +DBMS_XDB.GETFTPPORT +DBMS_XDB.GETHTTPPORT +DBMS_XDB.GETHTTPREQUESTHEADER +DBMS_XDB.GETLISTENERENDPOINT +DBMS_XDB.GETLOCKTOKEN +DBMS_XDB.GETLOCKTOKENLIST +DBMS_XDB.GETPRIVILEGES +DBMS_XDB.GETRESOID +DBMS_XDB.GETRESOURCE +DBMS_XDB.GETXDB_TABLESPACE +DBMS_XDB.HASBLOBCONTENT +DBMS_XDB.HASCHARCONTENT +DBMS_XDB.HASXMLCONTENT +DBMS_XDB.HASXMLREFERENCE +DBMS_XDB.ISFOLDER +DBMS_XDB.LINK +DBMS_XDB.LOCKDISCOVERY +DBMS_XDB.LOCKRESOURCE +DBMS_XDB.PROCESSLINKS +DBMS_XDB.PURGERESOURCEMETADATA +DBMS_XDB.REFRESHCONTENTSIZE +DBMS_XDB.REFRESHLOCK +DBMS_XDB.RENAMERESOURCE +DBMS_XDB.SETACL +DBMS_XDB.SETFTPPORT +DBMS_XDB.SETHTTPPORT +DBMS_XDB.SETLISTENERENDPOINT +DBMS_XDB.SETLISTENERLOCALACCESS +DBMS_XDB.TOUCHRESOURCE +DBMS_XDB.UNLOCKRESOURCE +DBMS_XDB.UPDATERESOURCEMETADATA +DBMS_XDBNFS. +DBMS_XDBNFS.DUMP_NFSSTATS +DBMS_XDBNFS.NFSFH2RESID +DBMS_XDBNFS.RESET_NFSSTATS +DBMS_XDBNFS.SYNCRESOURCE +DBMS_XDBREPOS. +DBMS_XDBREPOS.CREATEREPOSITORY +DBMS_XDBREPOS.DROPREPOSITORY +DBMS_XDBREPOS.DROP_REPOS +DBMS_XDBREPOS.INSTALL_REPOS +DBMS_XDBREPOS.MOUNTREPOSITORY +DBMS_XDBREPOS.SETCURRENTREPOSITORY +DBMS_XDBREPOS.UNMOUNTREPOSITORY +DBMS_XDBRESOURCE. +DBMS_XDBRESOURCE.FREERESOURCE +DBMS_XDBRESOURCE.GETACL +DBMS_XDBRESOURCE.GETACLDOCFROMRES +DBMS_XDBRESOURCE.GETAUTHOR +DBMS_XDBRESOURCE.GETCHARACTERSET +DBMS_XDBRESOURCE.GETCOMMENT +DBMS_XDBRESOURCE.GETCONTENTBLOB +DBMS_XDBRESOURCE.GETCONTENTCLOB +DBMS_XDBRESOURCE.GETCONTENTREF +DBMS_XDBRESOURCE.GETCONTENTTYPE +DBMS_XDBRESOURCE.GETCONTENTVARCHAR2 +DBMS_XDBRESOURCE.GETCONTENTXML +DBMS_XDBRESOURCE.GETCREATIONDATE +DBMS_XDBRESOURCE.GETCREATOR +DBMS_XDBRESOURCE.GETCUSTOMMETADATA +DBMS_XDBRESOURCE.GETDISPLAYNAME +DBMS_XDBRESOURCE.GETLANGUAGE +DBMS_XDBRESOURCE.GETLASTMODIFIER +DBMS_XDBRESOURCE.GETMODIFICATIONDATE +DBMS_XDBRESOURCE.GETOWNER +DBMS_XDBRESOURCE.GETREFCOUNT +DBMS_XDBRESOURCE.GETVERSIONID +DBMS_XDBRESOURCE.HASACLCHANGED +DBMS_XDBRESOURCE.HASAUTHORCHANGED +DBMS_XDBRESOURCE.HASCHANGED +DBMS_XDBRESOURCE.HASCHARACTERSETCHANGED +DBMS_XDBRESOURCE.HASCOMMENTCHANGED +DBMS_XDBRESOURCE.HASCONTENTCHANGED +DBMS_XDBRESOURCE.HASCONTENTTYPECHANGED +DBMS_XDBRESOURCE.HASCREATIONDATECHANGED +DBMS_XDBRESOURCE.HASCREATORCHANGED +DBMS_XDBRESOURCE.HASCUSTOMMETADATACHANGED +DBMS_XDBRESOURCE.HASDISPLAYNAMECHANGED +DBMS_XDBRESOURCE.HASLANGUAGECHANGED +DBMS_XDBRESOURCE.HASLASTMODIFIERCHANGED +DBMS_XDBRESOURCE.HASMODIFICATIONDATECHANGED +DBMS_XDBRESOURCE.HASOWNERCHANGED +DBMS_XDBRESOURCE.HASREFCOUNTCHANGED +DBMS_XDBRESOURCE.HASVERSIONIDCHANGED +DBMS_XDBRESOURCE.ISFOLDER +DBMS_XDBRESOURCE.ISNULL +DBMS_XDBRESOURCE.MAKEDOCUMENT +DBMS_XDBRESOURCE.SAVE +DBMS_XDBRESOURCE.SETACL +DBMS_XDBRESOURCE.SETAUTHOR +DBMS_XDBRESOURCE.SETCHARACTERSET +DBMS_XDBRESOURCE.SETCOMMENT +DBMS_XDBRESOURCE.SETCONTENT +DBMS_XDBRESOURCE.SETCONTENTTYPE +DBMS_XDBRESOURCE.SETCUSTOMMETADATA +DBMS_XDBRESOURCE.SETDISPLAYNAME +DBMS_XDBRESOURCE.SETLANGUAGE +DBMS_XDBRESOURCE.SETOWNER +DBMS_XDBT. +DBMS_XDBT.AUTOSYNCJOBBYCOUNT +DBMS_XDBT.AUTOSYNCJOBBYTIME +DBMS_XDBT.CONFIGUREAUTOSYNC +DBMS_XDBT.CREATEDATASTOREPREF +DBMS_XDBT.CREATEFILTERPREF +DBMS_XDBT.CREATEINDEX +DBMS_XDBT.CREATELEXERPREF +DBMS_XDBT.CREATEPREFERENCES +DBMS_XDBT.CREATESECTIONGROUPPREF +DBMS_XDBT.CREATESTOPLISTPREF +DBMS_XDBT.CREATESTORAGEPREF +DBMS_XDBT.CREATEWORDLISTPREF +DBMS_XDBT.DROPPREFERENCES +DBMS_XDBT.OPTIMIZEINDEX +DBMS_XDBT.SETSYNCTIMEOUT +DBMS_XDBT.SYNCINDEX +DBMS_XDBT.XDB_DATASTORE_PROC +DBMS_XDBUTIL_INT. +DBMS_XDBUTIL_INT.CLEANSGAFORUPGRADE +DBMS_XDBUTIL_INT.CLEANUP_EXPIRED_NFSCLIENTS +DBMS_XDBUTIL_INT.CREATEACL +DBMS_XDBUTIL_INT.CREATECROSSCONFOLDER +DBMS_XDBUTIL_INT.CREATESYSTEMVIRTUALFOLDER +DBMS_XDBUTIL_INT.FIXACL +DBMS_XDBUTIL_INT.FIXACL_DOWNGRADE +DBMS_XDBUTIL_INT.FLUSHSESSION +DBMS_XDBUTIL_INT.GETNAMESPACE +DBMS_XDBUTIL_INT.GETNEWOID +DBMS_XDBUTIL_INT.GET_TABLESPACE_TAB +DBMS_XDBUTIL_INT.IMPORTSEQUENCE +DBMS_XDBUTIL_INT.INSTANCE_CALLOUT_IMP +DBMS_XDBUTIL_INT.INSTANCE_EXPORT_ACTION +DBMS_XDBUTIL_INT.ISOBJECTGENERATED +DBMS_XDBUTIL_INT.ISTABLEOUTOFLINE +DBMS_XDBUTIL_INT.ISXMLNESTEDTABLE +DBMS_XDBUTIL_INT.LOOKUPSCHEMAOID +DBMS_XDBUTIL_INT.LOOKUPSCHEMAURL +DBMS_XDBUTIL_INT.MIGRATEALLXMLFROM9201 +DBMS_XDBUTIL_INT.NUMTOHEX +DBMS_XDBUTIL_INT.NUMTOHEX2 +DBMS_XDBUTIL_INT.PATCHREPOSITORYRESCONFIGLIST +DBMS_XDBUTIL_INT.RAWTONUM +DBMS_XDBUTIL_INT.RAWTONUM2 +DBMS_XDBUTIL_INT.SETLINKPARENTS +DBMS_XDBUTIL_INT.SETLINKPARENTSNEW +DBMS_XDBUTIL_INT.SYSTEM_INFO_EXP +DBMS_XDBUTIL_INT.USESETLINKPARENTSNEW +DBMS_XDBUTIL_INT.XMLSCHEMADEPENDENCYLEVEL +DBMS_XDBUTIL_INT.XMLSCHEMAGETDEPENDENCYLIST +DBMS_XDBUTIL_INT.XMLSCHEMASTRIPUSERNAME +DBMS_XDBZ. +DBMS_XDBZ.ADD_APPLICATION_PRINCIPAL +DBMS_XDBZ.CHANGE_APPLICATION_MEMBERSHIP +DBMS_XDBZ.DELETE_APPLICATION_PRINCIPAL +DBMS_XDBZ.DISABLE_HIERARCHY +DBMS_XDBZ.ENABLE_HIERARCHY +DBMS_XDBZ.GET_ACLOID +DBMS_XDBZ.GET_USERID +DBMS_XDBZ.IS_HIERARCHY_ENABLED +DBMS_XDBZ.PURGEAPPLICATIONCACHE +DBMS_XDBZ.PURGELDAPCACHE +DBMS_XDBZ.RESET_APPLICATION_PRINCIPAL +DBMS_XDBZ.SET_APPLICATION_PRINCIPAL +DBMS_XDBZ.VALIDATEACL +DBMS_XDBZ.VALIDATEFUSIONACL +DBMS_XDBZ0. +DBMS_XDBZ0.CHECKPRIVRLS_DELETEPF +DBMS_XDBZ0.CHECKPRIVRLS_DELETEPROPF +DBMS_XDBZ0.CHECKPRIVRLS_INSERTPF +DBMS_XDBZ0.CHECKPRIVRLS_SELECTPF +DBMS_XDBZ0.CHECKPRIVRLS_SELECTPROPF +DBMS_XDBZ0.CHECKPRIVRLS_UPDATEPF +DBMS_XDBZ0.CHECKPRIVRLS_UPDATEPROPF +DBMS_XDBZ0.CHECKWORKSPACE_PF +DBMS_XDBZ0.DISABLE_HIERARCHY_INTERNAL +DBMS_XDBZ0.ENABLE_HIERARCHY_INTERNAL +DBMS_XDBZ0.GENERATE_TRGNM +DBMS_XDBZ0.GENERATE_TRGNMDL +DBMS_XDBZ0.GET_USERNAME +DBMS_XDBZ0.GET_VALID_ACL +DBMS_XDBZ0.INITXDBRESCONFIG +DBMS_XDBZ0.INITXDBSECURITY +DBMS_XDBZ0.IS_HIERARCHY_ENABLED_INTERNAL +DBMS_XDBZ0.IS_HIERARCHY_ENABLED_TRIG +DBMS_XDBZ0.MIGRATE_PITRIG +DBMS_XDBZ0.SET_DELTA_CALC_INLINE_TRIGFLAG +DBMS_XDBZ0.TRUNCATE_NAME +DBMS_XDBZ0.UPDATE_TABLE_DEPENDANT_FLAGS +DBMS_XDB_ADMIN. +DBMS_XDB_ADMIN.CLEARREPOSITORYXMLINDEX +DBMS_XDB_ADMIN.CREATENONCEKEY +DBMS_XDB_ADMIN.CREATEREPOSITORYXMLINDEX +DBMS_XDB_ADMIN.DROPREPOSITORYXMLINDEX +DBMS_XDB_ADMIN.INSTALLDEFAULTWALLET +DBMS_XDB_ADMIN.MOVEXDB_TABLESPACE +DBMS_XDB_ADMIN.REBUILDHIERARCHICALINDEX +DBMS_XDB_ADMIN.XMLINDEXADDPATH +DBMS_XDB_ADMIN.XMLINDEXREMOVEPATH +DBMS_XDB_CONFIG. +DBMS_XDB_CONFIG.ADDAUTHENTICATIONMAPPING +DBMS_XDB_CONFIG.ADDAUTHENTICATIONMETHOD +DBMS_XDB_CONFIG.ADDDEFAULTTYPEMAPPINGS +DBMS_XDB_CONFIG.ADDHTTPEXPIREMAPPING +DBMS_XDB_CONFIG.ADDMIMEMAPPING +DBMS_XDB_CONFIG.ADDSCHEMALOCMAPPING +DBMS_XDB_CONFIG.ADDSERVLET +DBMS_XDB_CONFIG.ADDSERVLETMAPPING +DBMS_XDB_CONFIG.ADDSERVLETSECROLE +DBMS_XDB_CONFIG.ADDTRUSTMAPPING +DBMS_XDB_CONFIG.ADDTRUSTSCHEME +DBMS_XDB_CONFIG.ADDXMLEXTENSION +DBMS_XDB_CONFIG.CFG_GET +DBMS_XDB_CONFIG.CFG_REFRESH +DBMS_XDB_CONFIG.CFG_UPDATE +DBMS_XDB_CONFIG.DELETEAUTHENTICATIONMAPPING +DBMS_XDB_CONFIG.DELETEAUTHENTICATIONMETHOD +DBMS_XDB_CONFIG.DELETEDEFAULTTYPEMAPPINGS +DBMS_XDB_CONFIG.DELETEHTTPEXPIREMAPPING +DBMS_XDB_CONFIG.DELETEMIMEMAPPING +DBMS_XDB_CONFIG.DELETESCHEMALOCMAPPING +DBMS_XDB_CONFIG.DELETESERVLET +DBMS_XDB_CONFIG.DELETESERVLETMAPPING +DBMS_XDB_CONFIG.DELETESERVLETSECROLE +DBMS_XDB_CONFIG.DELETETRUSTMAPPING +DBMS_XDB_CONFIG.DELETETRUSTSCHEME +DBMS_XDB_CONFIG.DELETEXMLEXTENSION +DBMS_XDB_CONFIG.ENABLECUSTOMAUTHENTICATION +DBMS_XDB_CONFIG.ENABLECUSTOMTRUST +DBMS_XDB_CONFIG.ENABLEDIGESTAUTHENTICATION +DBMS_XDB_CONFIG.GETFTPPORT +DBMS_XDB_CONFIG.GETHTTPCONFIGREALM +DBMS_XDB_CONFIG.GETHTTPPORT +DBMS_XDB_CONFIG.GETHTTPREQUESTHEADER +DBMS_XDB_CONFIG.GETHTTPSPORT +DBMS_XDB_CONFIG.GETLISTENERENDPOINT +DBMS_XDB_CONFIG.SETDEFAULTTYPEMAPPINGS +DBMS_XDB_CONFIG.SETDYNAMICGROUPSTORE +DBMS_XDB_CONFIG.SETFTPPORT +DBMS_XDB_CONFIG.SETHTTPCONFIGREALM +DBMS_XDB_CONFIG.SETHTTPPORT +DBMS_XDB_CONFIG.SETHTTPSPORT +DBMS_XDB_CONFIG.SETLISTENERENDPOINT +DBMS_XDB_CONFIG.SETLISTENERLOCALACCESS +DBMS_XDB_CONFIG.USEDPORT +DBMS_XDB_CONSTANTS. +DBMS_XDB_CONSTANTS.ENCODING_DEFAULT +DBMS_XDB_CONSTANTS.ENCODING_ISOLATIN1 +DBMS_XDB_CONSTANTS.ENCODING_UTF8 +DBMS_XDB_CONSTANTS.ENCODING_WIN1252 +DBMS_XDB_CONSTANTS.NAMESPACE_ACL +DBMS_XDB_CONSTANTS.NAMESPACE_ORACLE +DBMS_XDB_CONSTANTS.NAMESPACE_ORACLE_XDB +DBMS_XDB_CONSTANTS.NAMESPACE_RESOURCE +DBMS_XDB_CONSTANTS.NAMESPACE_RESOURCE_CONFIG +DBMS_XDB_CONSTANTS.NAMESPACE_XDBCONFIG +DBMS_XDB_CONSTANTS.NAMESPACE_XDBSCHEMA +DBMS_XDB_CONSTANTS.NAMESPACE_XMLDIFF +DBMS_XDB_CONSTANTS.NAMESPACE_XMLINSTANCE +DBMS_XDB_CONSTANTS.NAMESPACE_XMLSCHEMA +DBMS_XDB_CONSTANTS.NSPREFIX_ACL_ACL +DBMS_XDB_CONSTANTS.NSPREFIX_RESCONFIG_RC +DBMS_XDB_CONSTANTS.NSPREFIX_RESOURCE_R +DBMS_XDB_CONSTANTS.NSPREFIX_XDBCONFIG_CFG +DBMS_XDB_CONSTANTS.NSPREFIX_XDB_XDB +DBMS_XDB_CONSTANTS.NSPREFIX_XMLDIFF_XD +DBMS_XDB_CONSTANTS.NSPREFIX_XMLINSTANCE_XSI +DBMS_XDB_CONSTANTS.NSPREFIX_XMLSCHEMA_XSD +DBMS_XDB_CONSTANTS.SCHEMAELEM_RESCONTENT_BINARY +DBMS_XDB_CONSTANTS.SCHEMAELEM_RESCONTENT_TEXT +DBMS_XDB_CONSTANTS.SCHEMAELEM_RES_ACL +DBMS_XDB_CONSTANTS.SCHEMAURL_ACL +DBMS_XDB_CONSTANTS.SCHEMAURL_RESOURCE +DBMS_XDB_CONSTANTS.SCHEMAURL_XDBCONFIG +DBMS_XDB_CONSTANTS.SCHEMAURL_XDBSCHEMA +DBMS_XDB_CONSTANTS.XDBSCHEMA_PREFIXES +DBMS_XDB_CONSTANTS.XSD_ATTRIBUTE +DBMS_XDB_CONSTANTS.XSD_COMPLEX_TYPE +DBMS_XDB_CONSTANTS.XSD_ELEMENT +DBMS_XDB_CONSTANTS.XSD_GROUP +DBMS_XDB_CONTENT. +DBMS_XDB_CONTENT.CREATEDIR +DBMS_XDB_CONTENT.CREATEFILE +DBMS_XDB_CONTENT.CREATEFILE2 +DBMS_XDB_CONTENT.CREATEFILE3 +DBMS_XDB_CONTENT.DELETEDIR +DBMS_XDB_CONTENT.DELETEFILE +DBMS_XDB_CONTENT.DELETENODE +DBMS_XDB_CONTENT.GETALLPROPERTIES +DBMS_XDB_CONTENT.GETCONTENTBYPATH +DBMS_XDB_CONTENT.GETEVERYTHING +DBMS_XDB_CONTENT.GETPATH +DBMS_XDB_CONTENT.GETPROPERTY +DBMS_XDB_CONTENT.GETTYPE +DBMS_XDB_CONTENT.LIST +DBMS_XDB_CONTENT.RENAMEPATH +DBMS_XDB_PRINT. +DBMS_XDB_PRINT.CLEARPRINTMODE +DBMS_XDB_PRINT.SETPRINTMODE +DBMS_XDB_REPOS. +DBMS_XDB_REPOS.ACLCHECKPRIVILEGES +DBMS_XDB_REPOS.ADDRESOURCE +DBMS_XDB_REPOS.ADDTOLOCKTOKENLIST +DBMS_XDB_REPOS.APPENDRESOURCEMETADATA +DBMS_XDB_REPOS.CHANGEOWNER +DBMS_XDB_REPOS.CHANGEPRIVILEGES +DBMS_XDB_REPOS.CHECKPRIVILEGES +DBMS_XDB_REPOS.CREATEFOLDER +DBMS_XDB_REPOS.CREATEOIDPATH +DBMS_XDB_REPOS.CREATERESOURCE +DBMS_XDB_REPOS.DELETEFROMLOCKTOKENLIST +DBMS_XDB_REPOS.DELETERESOURCE +DBMS_XDB_REPOS.DELETERESOURCEMETADATA +DBMS_XDB_REPOS.EXISTSRESOURCE +DBMS_XDB_REPOS.GETACLDOCUMENT +DBMS_XDB_REPOS.GETCONTENTBLOB +DBMS_XDB_REPOS.GETCONTENTCLOB +DBMS_XDB_REPOS.GETCONTENTVARCHAR2 +DBMS_XDB_REPOS.GETCONTENTXMLREF +DBMS_XDB_REPOS.GETCONTENTXMLTYPE +DBMS_XDB_REPOS.GETLOCKTOKEN +DBMS_XDB_REPOS.GETLOCKTOKENLIST +DBMS_XDB_REPOS.GETPRIVILEGES +DBMS_XDB_REPOS.GETRESOID +DBMS_XDB_REPOS.GETRESOURCE +DBMS_XDB_REPOS.GETXDB_TABLESPACE +DBMS_XDB_REPOS.HASBLOBCONTENT +DBMS_XDB_REPOS.HASCHARCONTENT +DBMS_XDB_REPOS.HASXMLCONTENT +DBMS_XDB_REPOS.HASXMLREFERENCE +DBMS_XDB_REPOS.ISFOLDER +DBMS_XDB_REPOS.LINK +DBMS_XDB_REPOS.LOCKDISCOVERY +DBMS_XDB_REPOS.LOCKRESOURCE +DBMS_XDB_REPOS.PROCESSLINKS +DBMS_XDB_REPOS.PURGERESOURCEMETADATA +DBMS_XDB_REPOS.REFRESHCONTENTSIZE +DBMS_XDB_REPOS.REFRESHLOCK +DBMS_XDB_REPOS.RENAMERESOURCE +DBMS_XDB_REPOS.SETACL +DBMS_XDB_REPOS.TOUCHRESOURCE +DBMS_XDB_REPOS.UNLOCKRESOURCE +DBMS_XDB_REPOS.UPDATERESOURCEMETADATA +DBMS_XDB_VERSION. +DBMS_XDB_VERSION.CHECKIN +DBMS_XDB_VERSION.CHECKIN_INT +DBMS_XDB_VERSION.CHECKOUT +DBMS_XDB_VERSION.GETCONTENTSBLOBBYRESID +DBMS_XDB_VERSION.GETCONTENTSCLOBBYRESID +DBMS_XDB_VERSION.GETCONTENTSXMLBYRESID +DBMS_XDB_VERSION.GETPREDECESSORS +DBMS_XDB_VERSION.GETPREDSBYRESID +DBMS_XDB_VERSION.GETRESOURCEBYRESID +DBMS_XDB_VERSION.GETSUCCESSORS +DBMS_XDB_VERSION.GETSUCCSBYRESID +DBMS_XDB_VERSION.ISCHECKEDOUT +DBMS_XDB_VERSION.MAKEVERSIONED +DBMS_XDB_VERSION.MAKEVERSIONED_INT +DBMS_XDB_VERSION.UNCHECKOUT +DBMS_XDB_VERSION.UNCHECKOUT_INT +DBMS_XDS. +DBMS_XDS.ALTER_STATIC_ACL_REFRESH +DBMS_XDS.DISABLE_OLAP_POLICY +DBMS_XDS.DISABLE_XDS +DBMS_XDS.DROP_OLAP_POLICY +DBMS_XDS.DROP_XDS +DBMS_XDS.ENABLE_OLAP_POLICY +DBMS_XDS.ENABLE_XDS +DBMS_XDS.PURGE_ACL_REFRESH_HISTORY +DBMS_XDS.SCHEDULE_STATIC_ACL_REFRESH +DBMS_XDS.SET_TRACE_LEVEL +DBMS_XDS.XDS$REFRESH_STATIC_ACL +DBMS_XEVENT. +DBMS_XEVENT.CLEAR +DBMS_XEVENT.GETAPPLICATIONDATA +DBMS_XEVENT.GETCHILDOID +DBMS_XEVENT.GETCURRENTUSER +DBMS_XEVENT.GETDAVOWNER +DBMS_XEVENT.GETDAVTOKEN +DBMS_XEVENT.GETDEPTH +DBMS_XEVENT.GETEVENT +DBMS_XEVENT.GETEXPIRY +DBMS_XEVENT.GETFIRST +DBMS_XEVENT.GETHANDLERLIST +DBMS_XEVENT.GETINTERFACE +DBMS_XEVENT.GETLANGUAGE +DBMS_XEVENT.GETLINK +DBMS_XEVENT.GETLINKNAME +DBMS_XEVENT.GETLOCK +DBMS_XEVENT.GETLOCKMODE +DBMS_XEVENT.GETLOCKTYPE +DBMS_XEVENT.GETNAME +DBMS_XEVENT.GETNEXT +DBMS_XEVENT.GETNFSNODEID +DBMS_XEVENT.GETOLDRESOURCE +DBMS_XEVENT.GETOPENACCESSMODE +DBMS_XEVENT.GETOPENDENYMODE +DBMS_XEVENT.GETOUTPUTSTREAM +DBMS_XEVENT.GETPARAMETER +DBMS_XEVENT.GETPARENT +DBMS_XEVENT.GETPARENTNAME +DBMS_XEVENT.GETPARENTOID +DBMS_XEVENT.GETPARENTPATH +DBMS_XEVENT.GETPATH +DBMS_XEVENT.GETRESOURCE +DBMS_XEVENT.GETSCHEMA +DBMS_XEVENT.GETSOURCE +DBMS_XEVENT.GETUPDATEBYTECOUNT +DBMS_XEVENT.GETUPDATEBYTEOFFSET +DBMS_XEVENT.GETXDBEVENT +DBMS_XEVENT.ISNULL +DBMS_XEVENT.REMOVE +DBMS_XEVENT.SETRENDERPATH +DBMS_XEVENT.SETRENDERSTREAM +DBMS_XLSB. +DBMS_XLSB.DELETERESOURCE +DBMS_XLSB.DELNAMELOCKS +DBMS_XLSB.INSERTRESOURCE +DBMS_XLSB.INSERTRESOURCENXOB +DBMS_XLSB.INSERTRESOURCENXOBCLOB +DBMS_XLSB.INSERTRESOURCEREF +DBMS_XLSB.INSERTTOHTABLE +DBMS_XLSB.INSERTTOUSERHTAB +DBMS_XLSB.LINKRESOURCE +DBMS_XLSB.SAVEACL +DBMS_XLSB.SETREFCOUNT +DBMS_XLSB.TOUCHOID +DBMS_XLSB.UNLINKRESOURCE +DBMS_XLSB.UPDATECONTENTXOB +DBMS_XLSB.UPDATELOCKS +DBMS_XLSB.UPDATENAMELOCKS +DBMS_XLSB.UPDATERESOURCE +DBMS_XLSB.UPDATERESOURCEREF +DBMS_XLSB.UPDATEROOTINFO +DBMS_XMLDOM. +DBMS_XMLDOM.ADOPTNODE +DBMS_XMLDOM.APPENDCHILD +DBMS_XMLDOM.APPENDDATA +DBMS_XMLDOM.BINARYINPUTSTREAMAVAILABLE +DBMS_XMLDOM.CHARACTERINPUTSTREAMAVAILABLE +DBMS_XMLDOM.CLONENODE +DBMS_XMLDOM.CLOSEBINARYINPUTSTREAM +DBMS_XMLDOM.CLOSEBINARYOUTPUTSTREAM +DBMS_XMLDOM.CLOSECHARACTERINPUTSTREAM +DBMS_XMLDOM.CLOSECHARACTEROUTPUTSTREAM +DBMS_XMLDOM.CREATEATTRIBUTE +DBMS_XMLDOM.CREATECDATASECTION +DBMS_XMLDOM.CREATECOMMENT +DBMS_XMLDOM.CREATEDOCUMENT +DBMS_XMLDOM.CREATEDOCUMENTFRAGMENT +DBMS_XMLDOM.CREATEELEMENT +DBMS_XMLDOM.CREATEENTITYREFERENCE +DBMS_XMLDOM.CREATEPROCESSINGINSTRUCTION +DBMS_XMLDOM.CREATETEXTNODE +DBMS_XMLDOM.CREATEXMLBINARYINPUTSTREAM +DBMS_XMLDOM.CREATEXMLBINARYOUTPUTSTREAM +DBMS_XMLDOM.CREATEXMLCHARACTERINPUTSTREAM +DBMS_XMLDOM.CREATEXMLCHARACTEROUTPUTSTREAM +DBMS_XMLDOM.DELETEDATA +DBMS_XMLDOM.FINDENTITY +DBMS_XMLDOM.FINDNOTATION +DBMS_XMLDOM.FLUSHBINARYOUTPUTSTREAM +DBMS_XMLDOM.FLUSHCHARACTEROUTPUTSTREAM +DBMS_XMLDOM.FREEDOCFRAG +DBMS_XMLDOM.FREEDOCTYPE +DBMS_XMLDOM.FREEDOCUMENT +DBMS_XMLDOM.FREEELEMENT +DBMS_XMLDOM.FREENODE +DBMS_XMLDOM.FREENODELIST +DBMS_XMLDOM.GETATTRIBUTE +DBMS_XMLDOM.GETATTRIBUTENODE +DBMS_XMLDOM.GETATTRIBUTES +DBMS_XMLDOM.GETCHARSET +DBMS_XMLDOM.GETCHILDNODES +DBMS_XMLDOM.GETCHILDRENBYTAGNAME +DBMS_XMLDOM.GETDATA +DBMS_XMLDOM.GETDOCTYPE +DBMS_XMLDOM.GETDOCUMENTELEMENT +DBMS_XMLDOM.GETELEMENTSBYTAGNAME +DBMS_XMLDOM.GETENTITIES +DBMS_XMLDOM.GETEXPANDEDNAME +DBMS_XMLDOM.GETFIRSTCHILD +DBMS_XMLDOM.GETIMPLEMENTATION +DBMS_XMLDOM.GETLASTCHILD +DBMS_XMLDOM.GETLENGTH +DBMS_XMLDOM.GETLOCALNAME +DBMS_XMLDOM.GETNAME +DBMS_XMLDOM.GETNAMEDITEM +DBMS_XMLDOM.GETNAMESPACE +DBMS_XMLDOM.GETNEXTSIBLING +DBMS_XMLDOM.GETNODEFROMFRAGMENT +DBMS_XMLDOM.GETNODENAME +DBMS_XMLDOM.GETNODETYPE +DBMS_XMLDOM.GETNODEVALUE +DBMS_XMLDOM.GETNODEVALUEASBINARYSTREAM +DBMS_XMLDOM.GETNODEVALUEASCHARACTERSTREAM +DBMS_XMLDOM.GETNOTATIONNAME +DBMS_XMLDOM.GETNOTATIONS +DBMS_XMLDOM.GETOWNERDOCUMENT +DBMS_XMLDOM.GETOWNERELEMENT +DBMS_XMLDOM.GETPARENTNODE +DBMS_XMLDOM.GETPREFIX +DBMS_XMLDOM.GETPREVIOUSSIBLING +DBMS_XMLDOM.GETPUBLICID +DBMS_XMLDOM.GETQUALIFIEDNAME +DBMS_XMLDOM.GETSCHEMANODE +DBMS_XMLDOM.GETSPECIFIED +DBMS_XMLDOM.GETSTANDALONE +DBMS_XMLDOM.GETSYSTEMID +DBMS_XMLDOM.GETTAGNAME +DBMS_XMLDOM.GETTARGET +DBMS_XMLDOM.GETVALUE +DBMS_XMLDOM.GETVERSION +DBMS_XMLDOM.GETXMLTYPE +DBMS_XMLDOM.HASATTRIBUTE +DBMS_XMLDOM.HASATTRIBUTES +DBMS_XMLDOM.HASCHILDNODES +DBMS_XMLDOM.HASFEATURE +DBMS_XMLDOM.IMPORTNODE +DBMS_XMLDOM.INSERTBEFORE +DBMS_XMLDOM.INSERTDATA +DBMS_XMLDOM.ISNULL +DBMS_XMLDOM.ITEM +DBMS_XMLDOM.MAKEATTR +DBMS_XMLDOM.MAKECDATASECTION +DBMS_XMLDOM.MAKECHARACTERDATA +DBMS_XMLDOM.MAKECOMMENT +DBMS_XMLDOM.MAKEDOCUMENT +DBMS_XMLDOM.MAKEDOCUMENTFRAGMENT +DBMS_XMLDOM.MAKEDOCUMENTTYPE +DBMS_XMLDOM.MAKEELEMENT +DBMS_XMLDOM.MAKEENTITY +DBMS_XMLDOM.MAKEENTITYREFERENCE +DBMS_XMLDOM.MAKENODE +DBMS_XMLDOM.MAKENOTATION +DBMS_XMLDOM.MAKEPROCESSINGINSTRUCTION +DBMS_XMLDOM.MAKETEXT +DBMS_XMLDOM.NEWDOMDOCUMENT +DBMS_XMLDOM.NORMALIZE +DBMS_XMLDOM.READBINARYINPUTSTREAM +DBMS_XMLDOM.READBYTESFROMBIS1 +DBMS_XMLDOM.READCHARACTERINPUTSTREAM +DBMS_XMLDOM.REMOVEATTRIBUTE +DBMS_XMLDOM.REMOVEATTRIBUTENODE +DBMS_XMLDOM.REMOVECHILD +DBMS_XMLDOM.REMOVENAMEDITEM +DBMS_XMLDOM.REPLACECHILD +DBMS_XMLDOM.REPLACEDATA +DBMS_XMLDOM.RESOLVENAMESPACEPREFIX +DBMS_XMLDOM.SETATTRIBUTE +DBMS_XMLDOM.SETATTRIBUTENODE +DBMS_XMLDOM.SETCHARSET +DBMS_XMLDOM.SETDATA +DBMS_XMLDOM.SETDOCTYPE +DBMS_XMLDOM.SETNAMEDITEM +DBMS_XMLDOM.SETNODEVALUE +DBMS_XMLDOM.SETNODEVALUEASBINARYSTREAM +DBMS_XMLDOM.SETNODEVALUEASCHARACTERSTREAM +DBMS_XMLDOM.SETNODEVALUEASDEFERREDBFILE +DBMS_XMLDOM.SETNODEVALUEASDEFERREDBLOB +DBMS_XMLDOM.SETNODEVALUEASDEFERREDCLOB +DBMS_XMLDOM.SETPREFIX +DBMS_XMLDOM.SETSTANDALONE +DBMS_XMLDOM.SETVALUE +DBMS_XMLDOM.SETVERSION +DBMS_XMLDOM.SPLITTEXT +DBMS_XMLDOM.STREAMISNULL +DBMS_XMLDOM.SUBSTRINGDATA +DBMS_XMLDOM.USEBINARYSTREAM +DBMS_XMLDOM.WRITEBINARYOUTPUTSTREAM +DBMS_XMLDOM.WRITECHARACTEROUTPUTSTREAM +DBMS_XMLDOM.WRITEEXTERNALDTDTOBUFFER +DBMS_XMLDOM.WRITEEXTERNALDTDTOCLOB +DBMS_XMLDOM.WRITEEXTERNALDTDTOFILE +DBMS_XMLDOM.WRITETOBUFFER +DBMS_XMLDOM.WRITETOCLOB +DBMS_XMLDOM.WRITETOFILE +DBMS_XMLDOM.XMLD_USEBINSTREAM +DBMS_XMLDOM_ICD. +DBMS_XMLDOM_ICD.GETCHILDNODES +DBMS_XMLDOM_ICD.GETFIRSTCHILD +DBMS_XMLDOM_ICD.GETNODEVALUE +DBMS_XMLDOM_ICD.GETTAGNAME +DBMS_XMLDOM_ICD.ITEM +DBMS_XMLDOM_ICD.MAKEELEMENT +DBMS_XMLGEN. +DBMS_XMLGEN.CLEARBINDVALUES +DBMS_XMLGEN.CLOSECONTEXT +DBMS_XMLGEN.CONVERT +DBMS_XMLGEN.GETNUMROWSPROCESSED +DBMS_XMLGEN.GETXML +DBMS_XMLGEN.GETXMLTYPE +DBMS_XMLGEN.NEWCONTEXT +DBMS_XMLGEN.NEWCONTEXTFROMHIERARCHY +DBMS_XMLGEN.REMOVEXSLTPARAM +DBMS_XMLGEN.RESTARTQUERY +DBMS_XMLGEN.SETBINDVALUE +DBMS_XMLGEN.SETCHECKINVALIDCHARS +DBMS_XMLGEN.SETCONVERTSPECIALCHARS +DBMS_XMLGEN.SETINDENTATIONWIDTH +DBMS_XMLGEN.SETMAXROWS +DBMS_XMLGEN.SETNULLHANDLING +DBMS_XMLGEN.SETPRETTYPRINTING +DBMS_XMLGEN.SETROWSETTAG +DBMS_XMLGEN.SETROWTAG +DBMS_XMLGEN.SETSKIPROWS +DBMS_XMLGEN.SETXSLT +DBMS_XMLGEN.SETXSLTPARAM +DBMS_XMLGEN.USEITEMTAGSFORCOLL +DBMS_XMLGEN.USENULLATTRIBUTEINDICATOR +DBMS_XMLINDEX. +DBMS_XMLINDEX.CREATEDATEINDEX +DBMS_XMLINDEX.CREATENUMBERINDEX +DBMS_XMLINDEX.DROPPARAMETER +DBMS_XMLINDEX.GETPARAMETER +DBMS_XMLINDEX.MODIFYPARAMETER +DBMS_XMLINDEX.PROCESS_PENDING +DBMS_XMLINDEX.REGISTERPARAMETER +DBMS_XMLINDEX.SYNCINDEX +DBMS_XMLINDEX0. +DBMS_XMLINDEX0.CREATEDATEINDEX +DBMS_XMLINDEX0.CREATENUMBERINDEX +DBMS_XMLINDEX0.GETPARAMETERNAME +DBMS_XMLINDEX0.RELOAD_SXI_LEAF +DBMS_XMLPARSER. +DBMS_XMLPARSER.FREEPARSER +DBMS_XMLPARSER.GETBASEDIR +DBMS_XMLPARSER.GETDOCTYPE +DBMS_XMLPARSER.GETDOCUMENT +DBMS_XMLPARSER.GETERRORLOG +DBMS_XMLPARSER.GETRELEASEVERSION +DBMS_XMLPARSER.GETVALIDATIONMODE +DBMS_XMLPARSER.NEWPARSER +DBMS_XMLPARSER.PARSE +DBMS_XMLPARSER.PARSEBUFFER +DBMS_XMLPARSER.PARSECLOB +DBMS_XMLPARSER.PARSEDTD +DBMS_XMLPARSER.PARSEDTDBUFFER +DBMS_XMLPARSER.PARSEDTDCLOB +DBMS_XMLPARSER.RETAINCDATASECTION +DBMS_XMLPARSER.SETBASEDIR +DBMS_XMLPARSER.SETDOCTYPE +DBMS_XMLPARSER.SETERRORLOG +DBMS_XMLPARSER.SETPRESERVEWHITESPACE +DBMS_XMLPARSER.SETVALIDATIONMODE +DBMS_XMLPARSER.SHOWWARNINGS +DBMS_XMLPARSER.WRITEERRORS +DBMS_XMLQUERY. +DBMS_XMLQUERY.CLEARBINDVALUES +DBMS_XMLQUERY.CLOSECONTEXT +DBMS_XMLQUERY.GETDTD +DBMS_XMLQUERY.GETEXCEPTIONCONTENT +DBMS_XMLQUERY.GETNUMROWSPROCESSED +DBMS_XMLQUERY.GETVERSION +DBMS_XMLQUERY.GETXML +DBMS_XMLQUERY.NEWCONTEXT +DBMS_XMLQUERY.PROPAGATEORIGINALEXCEPTION +DBMS_XMLQUERY.P_GETDTD +DBMS_XMLQUERY.P_GETXML +DBMS_XMLQUERY.P_PROPORIGEXC +DBMS_XMLQUERY.P_SETDATAHEADER +DBMS_XMLQUERY.P_SETENCODINGTAG +DBMS_XMLQUERY.P_SETMETAHEADER +DBMS_XMLQUERY.P_SETRAISEEXCEPTION +DBMS_XMLQUERY.P_SETRAISENOROWSEXC +DBMS_XMLQUERY.P_SETSQLTOXMLNAMEESC +DBMS_XMLQUERY.P_SETSTRICTLEGALXMLCHARCHECK +DBMS_XMLQUERY.P_SETSTYLESHEETHEADER +DBMS_XMLQUERY.P_SETXSLT +DBMS_XMLQUERY.P_USENULLATTRIND +DBMS_XMLQUERY.P_USETYPEFORCOLLELEMTAG +DBMS_XMLQUERY.REMOVEXSLTPARAM +DBMS_XMLQUERY.RESETRESULTSET +DBMS_XMLQUERY.SETBINDVALUE +DBMS_XMLQUERY.SETCOLLIDATTRNAME +DBMS_XMLQUERY.SETDATAHEADER +DBMS_XMLQUERY.SETDATEFORMAT +DBMS_XMLQUERY.SETENCODINGTAG +DBMS_XMLQUERY.SETERRORTAG +DBMS_XMLQUERY.SETMAXROWS +DBMS_XMLQUERY.SETMETAHEADER +DBMS_XMLQUERY.SETRAISEEXCEPTION +DBMS_XMLQUERY.SETRAISENOROWSEXCEPTION +DBMS_XMLQUERY.SETROWIDATTRNAME +DBMS_XMLQUERY.SETROWIDATTRVALUE +DBMS_XMLQUERY.SETROWSETTAG +DBMS_XMLQUERY.SETROWTAG +DBMS_XMLQUERY.SETSKIPROWS +DBMS_XMLQUERY.SETSQLTOXMLNAMEESCAPING +DBMS_XMLQUERY.SETSTRICTLEGALXMLCHARCHECK +DBMS_XMLQUERY.SETSTYLESHEETHEADER +DBMS_XMLQUERY.SETTAGCASE +DBMS_XMLQUERY.SETXSLT +DBMS_XMLQUERY.SETXSLTPARAM +DBMS_XMLQUERY.USENULLATTRIBUTEINDICATOR +DBMS_XMLQUERY.USETYPEFORCOLLELEMTAG +DBMS_XMLSAVE. +DBMS_XMLSAVE.CLEARKEYCOLUMNLIST +DBMS_XMLSAVE.CLEARUPDATECOLUMNLIST +DBMS_XMLSAVE.CLOSECONTEXT +DBMS_XMLSAVE.DELETEXML +DBMS_XMLSAVE.GETEXCEPTIONCONTENT +DBMS_XMLSAVE.INSERTXML +DBMS_XMLSAVE.NEWCONTEXT +DBMS_XMLSAVE.PROPAGATEORIGINALEXCEPTION +DBMS_XMLSAVE.P_PROPAGATEORIGINALEXCEPTION +DBMS_XMLSAVE.P_SETPRESERVEWHITESPACE +DBMS_XMLSAVE.P_SETSQLTOXMLNAMEESC +DBMS_XMLSAVE.P_SETXSLT +DBMS_XMLSAVE.P_USEDBDATES +DBMS_XMLSAVE.REMOVEXSLTPARAM +DBMS_XMLSAVE.SETBATCHSIZE +DBMS_XMLSAVE.SETCOMMITBATCH +DBMS_XMLSAVE.SETDATEFORMAT +DBMS_XMLSAVE.SETIGNORECASE +DBMS_XMLSAVE.SETKEYCOLUMN +DBMS_XMLSAVE.SETPRESERVEWHITESPACE +DBMS_XMLSAVE.SETROWTAG +DBMS_XMLSAVE.SETSQLTOXMLNAMEESCAPING +DBMS_XMLSAVE.SETUPDATECOLUMN +DBMS_XMLSAVE.SETXSLT +DBMS_XMLSAVE.SETXSLTPARAM +DBMS_XMLSAVE.UPDATEXML +DBMS_XMLSAVE.USEDBDATES +DBMS_XMLSCHEMA. +DBMS_XMLSCHEMA.COMPILESCHEMA +DBMS_XMLSCHEMA.CONVERTTODATE +DBMS_XMLSCHEMA.CONVERTTOTS +DBMS_XMLSCHEMA.CONVERTTOTSWITHTZ +DBMS_XMLSCHEMA.COPYEVOLVE +DBMS_XMLSCHEMA.DELETESCHEMA +DBMS_XMLSCHEMA.GENERATEBEAN +DBMS_XMLSCHEMA.GENERATESCHEMA +DBMS_XMLSCHEMA.GENERATESCHEMAS +DBMS_XMLSCHEMA.INPLACEEVOLVE +DBMS_XMLSCHEMA.PURGESCHEMA +DBMS_XMLSCHEMA.REGISTERSCHEMA +DBMS_XMLSCHEMA.REGISTERURI +DBMS_XMLSCHEMA_ANNOTATE. +DBMS_XMLSCHEMA_ANNOTATE.ADDXDBNAMESPACE +DBMS_XMLSCHEMA_ANNOTATE.DISABLEDEFAULTTABLECREATION +DBMS_XMLSCHEMA_ANNOTATE.DISABLEMAINTAINDOM +DBMS_XMLSCHEMA_ANNOTATE.ENABLEDEFAULTTABLECREATION +DBMS_XMLSCHEMA_ANNOTATE.ENABLEMAINTAINDOM +DBMS_XMLSCHEMA_ANNOTATE.GETSCHEMAANNOTATIONS +DBMS_XMLSCHEMA_ANNOTATE.PRINTWARNINGS +DBMS_XMLSCHEMA_ANNOTATE.REMOVEANYSTORAGE +DBMS_XMLSCHEMA_ANNOTATE.REMOVEDEFAULTTABLE +DBMS_XMLSCHEMA_ANNOTATE.REMOVEMAINTAINDOM +DBMS_XMLSCHEMA_ANNOTATE.REMOVEOUTOFLINE +DBMS_XMLSCHEMA_ANNOTATE.REMOVESQLCOLLTYPE +DBMS_XMLSCHEMA_ANNOTATE.REMOVESQLNAME +DBMS_XMLSCHEMA_ANNOTATE.REMOVESQLTYPE +DBMS_XMLSCHEMA_ANNOTATE.REMOVESQLTYPEMAPPING +DBMS_XMLSCHEMA_ANNOTATE.REMOVETABLEPROPS +DBMS_XMLSCHEMA_ANNOTATE.REMOVETIMESTAMPWITHTIMEZONE +DBMS_XMLSCHEMA_ANNOTATE.SETANYSTORAGE +DBMS_XMLSCHEMA_ANNOTATE.SETDEFAULTTABLE +DBMS_XMLSCHEMA_ANNOTATE.SETOUTOFLINE +DBMS_XMLSCHEMA_ANNOTATE.SETSCHEMAANNOTATIONS +DBMS_XMLSCHEMA_ANNOTATE.SETSQLCOLLTYPE +DBMS_XMLSCHEMA_ANNOTATE.SETSQLNAME +DBMS_XMLSCHEMA_ANNOTATE.SETSQLTYPE +DBMS_XMLSCHEMA_ANNOTATE.SETSQLTYPEMAPPING +DBMS_XMLSCHEMA_ANNOTATE.SETTABLEPROPS +DBMS_XMLSCHEMA_ANNOTATE.SETTIMESTAMPWITHTIMEZONE +DBMS_XMLSCHEMA_INT. +DBMS_XMLSCHEMA_INT.ADDDOCID +DBMS_XMLSCHEMA_INT.CHECKUSERDEPENDENTS +DBMS_XMLSCHEMA_INT.COMPILESCHEMA +DBMS_XMLSCHEMA_INT.COPYEVOLVE +DBMS_XMLSCHEMA_INT.CREATENSBXML +DBMS_XMLSCHEMA_INT.DELETESCHEMA +DBMS_XMLSCHEMA_INT.GENERATEBEAN +DBMS_XMLSCHEMA_INT.GENERATESCHEMA +DBMS_XMLSCHEMA_INT.GENERATESCHEMAS +DBMS_XMLSCHEMA_INT.HASDOCID +DBMS_XMLSCHEMA_INT.INPLACEEVOLVE +DBMS_XMLSCHEMA_INT.REGISTERSCHEMA +DBMS_XMLSCHEMA_INT.XDB$OID2INTNAME +DBMS_XMLSCHEMA_LSB. +DBMS_XMLSCHEMA_LSB.COMPILESCHEMA +DBMS_XMLSCHEMA_LSB.COPYEVOLVE +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_BLOB +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_CLOB +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_OID +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_STR +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_XML +DBMS_XMLSTORAGE_MANAGE. +DBMS_XMLSTORAGE_MANAGE.DISABLEINDEXESANDCONSTRAINTS +DBMS_XMLSTORAGE_MANAGE.ENABLEINDEXESANDCONSTRAINTS +DBMS_XMLSTORAGE_MANAGE.EXCHANGEPOSTPROC +DBMS_XMLSTORAGE_MANAGE.EXCHANGEPREPROC +DBMS_XMLSTORAGE_MANAGE.GETSIDXDEFFROMVIEW +DBMS_XMLSTORAGE_MANAGE.GETTYPEDDL +DBMS_XMLSTORAGE_MANAGE.INDEXXMLREFERENCES +DBMS_XMLSTORAGE_MANAGE.RENAMECOLLECTIONTABLE +DBMS_XMLSTORAGE_MANAGE.SCOPEXMLREFERENCES +DBMS_XMLSTORAGE_MANAGE.XPATH2TABCOLMAPPING +DBMS_XMLSTORE. +DBMS_XMLSTORE.CLEARKEYCOLUMNLIST +DBMS_XMLSTORE.CLEARUPDATECOLUMNLIST +DBMS_XMLSTORE.CLOSECONTEXT +DBMS_XMLSTORE.DELETEXML +DBMS_XMLSTORE.INSERTXML +DBMS_XMLSTORE.NEWCONTEXT +DBMS_XMLSTORE.SETKEYCOLUMN +DBMS_XMLSTORE.SETPRESERVEWHITESPACE +DBMS_XMLSTORE.SETROWTAG +DBMS_XMLSTORE.SETUPDATECOLUMN +DBMS_XMLSTORE.UPDATEXML +DBMS_XMLTRANSLATIONS. +DBMS_XMLTRANSLATIONS.DISABLETRANSLATION +DBMS_XMLTRANSLATIONS.ENABLETRANSLATION +DBMS_XMLTRANSLATIONS.EXTRACTXLIFF +DBMS_XMLTRANSLATIONS.GETBASEDOCUMENT +DBMS_XMLTRANSLATIONS.MERGEXLIFF +DBMS_XMLTRANSLATIONS.SETSOURCELANG +DBMS_XMLTRANSLATIONS.TRANSLATEXML +DBMS_XMLTRANSLATIONS.UPDATETRANSLATION +DBMS_XPLAN. +DBMS_XPLAN.BUILD_PLAN_XML +DBMS_XPLAN.DIFF_PLAN +DBMS_XPLAN.DIFF_PLAN_AWR +DBMS_XPLAN.DIFF_PLAN_CURSOR +DBMS_XPLAN.DIFF_PLAN_OUTLINE +DBMS_XPLAN.DIFF_PLAN_SQL_BASELINE +DBMS_XPLAN.DISPLAY +DBMS_XPLAN.DISPLAY_AWR +DBMS_XPLAN.DISPLAY_CURSOR +DBMS_XPLAN.DISPLAY_PLAN +DBMS_XPLAN.DISPLAY_SQLSET +DBMS_XPLAN.DISPLAY_SQL_PATCH_PLAN +DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE +DBMS_XPLAN.DISPLAY_SQL_PROFILE_PLAN +DBMS_XPLAN.FORMAT_NUMBER +DBMS_XPLAN.FORMAT_NUMBER2 +DBMS_XPLAN.FORMAT_SIZE +DBMS_XPLAN.FORMAT_SIZE2 +DBMS_XPLAN.FORMAT_TIME_S +DBMS_XPLAN.GET_CURSOR_ROWS +DBMS_XPLAN.GET_PLANDIFF_REPORT_XML +DBMS_XPLAN.GET_PLAN_ROWS +DBMS_XPLAN.I_DISPLAY_SMB_PLAN +DBMS_XPLAN.PREPARE_PLAN_XML_QUERY +DBMS_XPLAN.PREPARE_RECORDS +DBMS_XPLAN.VALIDATE_FORMAT +DBMS_XQUERY. +DBMS_XQUERY.EVAL +DBMS_XQUERYINT. +DBMS_XQUERYINT.BIND +DBMS_XQUERYINT.BINDWITHTYPE +DBMS_XQUERYINT.BINDXML +DBMS_XQUERYINT.CLOSEHDL +DBMS_XQUERYINT.EXEC +DBMS_XQUERYINT.EXECALL +DBMS_XQUERYINT.EXECALLCMN +DBMS_XQUERYINT.EXECALLXCLB +DBMS_XQUERYINT.EXECALLXCLB_EXISTS +DBMS_XQUERYINT.EXECALL_EXISTS +DBMS_XQUERYINT.EXECQUERY +DBMS_XQUERYINT.EXECUTE +DBMS_XQUERYINT.EXECUTECMN +DBMS_XQUERYINT.EXECUTEXCLB +DBMS_XQUERYINT.EXEC_EXISTS +DBMS_XQUERYINT.FETCHALL +DBMS_XQUERYINT.FETCHONE +DBMS_XQUERYINT.GETXQUERYX +DBMS_XQUERYINT.GETXQUERYXXCLB +DBMS_XQUERYINT.PREPARE +DBMS_XQUERYINT.PREPAREXCLB +DBMS_XRWMV. +DBMS_XRWMV.CLEANUP_3GL +DBMS_XRWMV.XPLNMV_3GLA +DBMS_XRWMV.XPLNMV_3GLCA +DBMS_XRWMV.XPLNMV_3GLCT +DBMS_XRWMV.XPLNMV_3GLT +DBMS_XRWMV.XPLNRW_3GLA +DBMS_XRWMV.XPLNRW_3GLCA +DBMS_XRWMV.XPLNRW_3GLCT +DBMS_XRWMV.XPLNRW_3GLT +DBMS_XRWMV.XPLNRW_EM_3GLT +DBMS_XSLPROCESSOR. +DBMS_XSLPROCESSOR.CLOB2FILE +DBMS_XSLPROCESSOR.FREEPROCESSOR +DBMS_XSLPROCESSOR.FREESTYLESHEET +DBMS_XSLPROCESSOR.NEWPROCESSOR +DBMS_XSLPROCESSOR.NEWSTYLESHEET +DBMS_XSLPROCESSOR.PROCESSXSL +DBMS_XSLPROCESSOR.READ2CLOB +DBMS_XSLPROCESSOR.REMOVEPARAM +DBMS_XSLPROCESSOR.RESETPARAMS +DBMS_XSLPROCESSOR.SELECTNODES +DBMS_XSLPROCESSOR.SELECTSINGLENODE +DBMS_XSLPROCESSOR.SETERRORLOG +DBMS_XSLPROCESSOR.SETPARAM +DBMS_XSLPROCESSOR.SHOWWARNINGS +DBMS_XSLPROCESSOR.TRANSFORMNODE +DBMS_XSLPROCESSOR.VALUEOF +DBMS_XSTREAM_ADM. +DBMS_XSTREAM_ADM.ADD_COLUMN +DBMS_XSTREAM_ADM.ADD_GLOBAL_PROPAGATION_RULES +DBMS_XSTREAM_ADM.ADD_GLOBAL_RULES +DBMS_XSTREAM_ADM.ADD_OUTBOUND +DBMS_XSTREAM_ADM.ADD_SCHEMA_PROPAGATION_RULES +DBMS_XSTREAM_ADM.ADD_SCHEMA_RULES +DBMS_XSTREAM_ADM.ADD_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_ADM.ADD_SUBSET_PROPAGATION_RULES +DBMS_XSTREAM_ADM.ADD_SUBSET_RULES +DBMS_XSTREAM_ADM.ADD_TABLE_PROPAGATION_RULES +DBMS_XSTREAM_ADM.ADD_TABLE_RULES +DBMS_XSTREAM_ADM.ALTER_INBOUND +DBMS_XSTREAM_ADM.ALTER_OUTBOUND +DBMS_XSTREAM_ADM.CREATE_INBOUND +DBMS_XSTREAM_ADM.CREATE_OUTBOUND +DBMS_XSTREAM_ADM.DELETE_COLUMN +DBMS_XSTREAM_ADM.DROP_INBOUND +DBMS_XSTREAM_ADM.DROP_OUTBOUND +DBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM.GET_MESSAGE_TRACKING +DBMS_XSTREAM_ADM.GET_TAG +DBMS_XSTREAM_ADM.IS_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM.KEEP_COLUMNS +DBMS_XSTREAM_ADM.MERGE_STREAMS +DBMS_XSTREAM_ADM.MERGE_STREAMS_JOB +DBMS_XSTREAM_ADM.PURGE_SOURCE_CATALOG +DBMS_XSTREAM_ADM.RECOVER_OPERATION +DBMS_XSTREAM_ADM.REMOVE_QUEUE +DBMS_XSTREAM_ADM.REMOVE_RULE +DBMS_XSTREAM_ADM.REMOVE_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_ADM.REMOVE_XSTREAM_CONFIGURATION +DBMS_XSTREAM_ADM.RENAME_COLUMN +DBMS_XSTREAM_ADM.RENAME_SCHEMA +DBMS_XSTREAM_ADM.RENAME_TABLE +DBMS_XSTREAM_ADM.SET_MESSAGE_TRACKING +DBMS_XSTREAM_ADM.SET_PARAMETER +DBMS_XSTREAM_ADM.SET_TAG +DBMS_XSTREAM_ADM.SET_UP_QUEUE +DBMS_XSTREAM_ADM.SPLIT_STREAMS +DBMS_XSTREAM_ADM.START_OUTBOUND +DBMS_XSTREAM_ADM.STOP_OUTBOUND +DBMS_XSTREAM_ADM_INTERNAL. +DBMS_XSTREAM_ADM_INTERNAL.GET_OPTIONAL_PRIVILEGES +DBMS_XSTREAM_ADM_INTERNAL.GRANT_ADMIN_PRIVILEGE_INT +DBMS_XSTREAM_ADM_INTERNAL.INS_XSERVER +DBMS_XSTREAM_ADM_INTERNAL.REVOKE_ADMIN_PRIVILEGE_INT +DBMS_XSTREAM_ADM_INTERNAL.UPDATE_GOLDENGATE_PRIVILEGE +DBMS_XSTREAM_ADM_INTERNAL.UPDATE_XSERVER_CONNECT_USER +DBMS_XSTREAM_ADM_UTL. +DBMS_XSTREAM_ADM_UTL.ADD_XSTREAM_ADMIN_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.ALTER_OUTBOUND +DBMS_XSTREAM_ADM_UTL.APPLY_EXISTS +DBMS_XSTREAM_ADM_UTL.CHECK_SVR_NAME +DBMS_XSTREAM_ADM_UTL.CHECK_SVR_TYPE +DBMS_XSTREAM_ADM_UTL.CLEAN_APPLY_SPILL +DBMS_XSTREAM_ADM_UTL.CONVERT_SCN_TO_POS +DBMS_XSTREAM_ADM_UTL.CREATE_XOUT_CAPTURE +DBMS_XSTREAM_ADM_UTL.DEL_GEN_RULE +DBMS_XSTREAM_ADM_UTL.DEL_SUBSET_RULES +DBMS_XSTREAM_ADM_UTL.DEL_XSERVER +DBMS_XSTREAM_ADM_UTL.DROP_GEN_RULE +DBMS_XSTREAM_ADM_UTL.DROP_OUTBOUND +DBMS_XSTREAM_ADM_UTL.DROP_OUTBOUND_RULES +DBMS_XSTREAM_ADM_UTL.ENABLE_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM_UTL.GET_CAP_N_QUEUE +DBMS_XSTREAM_ADM_UTL.GET_LCR_CONTENT +DBMS_XSTREAM_ADM_UTL.GET_LOCAL_CAPTURE +DBMS_XSTREAM_ADM_UTL.GET_OUTBOUND_SRCDB +DBMS_XSTREAM_ADM_UTL.GET_OUTBOUND_SRCROOT +DBMS_XSTREAM_ADM_UTL.GET_PROCEDURE_RULES +DBMS_XSTREAM_ADM_UTL.GET_STREAMS_RULES +DBMS_XSTREAM_ADM_UTL.GRANT_CONNECT_USER_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.HAS_TABLE_RULE +DBMS_XSTREAM_ADM_UTL.INS_GEN_OBJ +DBMS_XSTREAM_ADM_UTL.INS_SUBSET_RULES +DBMS_XSTREAM_ADM_UTL.IS_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM_UTL.IS_SYSGEN_OBJ +DBMS_XSTREAM_ADM_UTL.IS_UNCOMMITTED_XOUT +DBMS_XSTREAM_ADM_UTL.NUM_SUBSCRIBERS +DBMS_XSTREAM_ADM_UTL.REMOVE_GEN_RULE +DBMS_XSTREAM_ADM_UTL.REMOVE_XSTREAM_ADMIN_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.SET_APPLY_STARTSCN +DBMS_XSTREAM_ADM_UTL.SET_CAPTURE_STARTSCN +DBMS_XSTREAM_ADM_UTL.SET_CHECKPOINT_SCNS +DBMS_XSTREAM_ADM_UTL.SET_OUTBOUND_STARTSCN +DBMS_XSTREAM_ADM_UTL.START_OUTBOUND +DBMS_XSTREAM_ADM_UTL.STOP_OUTBOUND +DBMS_XSTREAM_ADM_UTL.UPDATE_XSTREAM_ADMIN_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.UPD_XSERVER +DBMS_XSTREAM_ADM_UTL.UPD_XSERVER_CAPINFO +DBMS_XSTREAM_ADM_UTL.VALID_SUBSET_RULES +DBMS_XSTREAM_AUTH. +DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH.GRANT_REMOTE_ADMIN_ACCESS +DBMS_XSTREAM_AUTH.REVOKE_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH.REVOKE_REMOTE_ADMIN_ACCESS +DBMS_XSTREAM_AUTH_IVK. +DBMS_XSTREAM_AUTH_IVK.GRANT_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH_IVK.GRANT_ADMIN_PRIVILEGE_PDBS +DBMS_XSTREAM_AUTH_IVK.REVOKE_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH_IVK.REVOKE_ADMIN_PRIVILEGE_PDBS +DBMS_XSTREAM_GG. +DBMS_XSTREAM_GG.DISABLE_TDUP_WORKSPACE +DBMS_XSTREAM_GG.ENABLE_TDUP_WORKSPACE +DBMS_XSTREAM_GG.GET_GG_NO_STMT_BUF +DBMS_XSTREAM_GG.GET_GG_NO_WS_FOR_DEF_CONS +DBMS_XSTREAM_GG.GET_GG_SESSION +DBMS_XSTREAM_GG.GET_GG_SESSION_FLAGS +DBMS_XSTREAM_GG.GET_GG_XML_SCHEMA +DBMS_XSTREAM_GG.IS_CTAS_NO_DML_AT_SESSION +DBMS_XSTREAM_GG.IS_FOO_TRIGGER_FIRE_AT_SESSION +DBMS_XSTREAM_GG.IS_TDUP_WORKSPACE_ENABLED +DBMS_XSTREAM_GG.SET_CTAS_SESSION_CONTEXT +DBMS_XSTREAM_GG.SET_FOO_TRIGGER_SESSION_CONTXT +DBMS_XSTREAM_GG.SET_GG_NO_STMT_BUF +DBMS_XSTREAM_GG.SET_GG_NO_WS_FOR_DEF_CONS +DBMS_XSTREAM_GG.SET_GG_SESSION +DBMS_XSTREAM_GG.SET_GG_SESSION_FLAGS +DBMS_XSTREAM_GG.SET_GG_XML_SCHEMA +DBMS_XSTREAM_GG_ADM. +DBMS_XSTREAM_GG_ADM.ADD_COLUMN +DBMS_XSTREAM_GG_ADM.ADD_GLOBAL_PROPAGATION_RULES +DBMS_XSTREAM_GG_ADM.ADD_GLOBAL_RULES +DBMS_XSTREAM_GG_ADM.ADD_OUTBOUND +DBMS_XSTREAM_GG_ADM.ADD_PROCEDURE_RULE +DBMS_XSTREAM_GG_ADM.ADD_SCHEMA_PROPAGATION_RULES +DBMS_XSTREAM_GG_ADM.ADD_SCHEMA_RULES +DBMS_XSTREAM_GG_ADM.ADD_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_GG_ADM.ADD_SUBSET_PROPAGATION_RULES +DBMS_XSTREAM_GG_ADM.ADD_SUBSET_RULES +DBMS_XSTREAM_GG_ADM.ADD_TABLE_PROPAGATION_RULES +DBMS_XSTREAM_GG_ADM.ADD_TABLE_RULES +DBMS_XSTREAM_GG_ADM.ALTER_INBOUND +DBMS_XSTREAM_GG_ADM.ALTER_OUTBOUND +DBMS_XSTREAM_GG_ADM.BUILD_PDBSET_DICTIONARY +DBMS_XSTREAM_GG_ADM.CREATE_CAPTURE +DBMS_XSTREAM_GG_ADM.CREATE_INBOUND +DBMS_XSTREAM_GG_ADM.CREATE_OUTBOUND +DBMS_XSTREAM_GG_ADM.DELETE_COLUMN +DBMS_XSTREAM_GG_ADM.DROP_INBOUND +DBMS_XSTREAM_GG_ADM.DROP_OUTBOUND +DBMS_XSTREAM_GG_ADM.GET_LCR_CONTENT +DBMS_XSTREAM_GG_ADM.GET_MDH_FOR_PDBNAME_SCN +DBMS_XSTREAM_GG_ADM.GET_MESSAGE_TRACKING +DBMS_XSTREAM_GG_ADM.GET_PDBNAME_FOR_MDH +DBMS_XSTREAM_GG_ADM.GET_PDB_INFO +DBMS_XSTREAM_GG_ADM.GET_TAG +DBMS_XSTREAM_GG_ADM.HANDLE_COLLISIONS +DBMS_XSTREAM_GG_ADM.KEEP_COLUMNS +DBMS_XSTREAM_GG_ADM.MERGE_STREAMS +DBMS_XSTREAM_GG_ADM.MERGE_STREAMS_JOB +DBMS_XSTREAM_GG_ADM.POPULATE_APPLY_PROGRESS +DBMS_XSTREAM_GG_ADM.PURGE_CDR_INFO +DBMS_XSTREAM_GG_ADM.PURGE_SOURCE_CATALOG +DBMS_XSTREAM_GG_ADM.RECOVER_OPERATION +DBMS_XSTREAM_GG_ADM.REMOVE_DBNAME_MAPPING +DBMS_XSTREAM_GG_ADM.REMOVE_QUEUE +DBMS_XSTREAM_GG_ADM.REMOVE_RULE +DBMS_XSTREAM_GG_ADM.REMOVE_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_GG_ADM.REMOVE_XSTREAM_CONFIGURATION +DBMS_XSTREAM_GG_ADM.RENAME_COLUMN +DBMS_XSTREAM_GG_ADM.RENAME_SCHEMA +DBMS_XSTREAM_GG_ADM.RENAME_TABLE +DBMS_XSTREAM_GG_ADM.RESET_CONFIGURATION +DBMS_XSTREAM_GG_ADM.SET_CHECKPOINT_SCNS +DBMS_XSTREAM_GG_ADM.SET_DML_CONFLICT_HANDLER +DBMS_XSTREAM_GG_ADM.SET_MESSAGE_TRACKING +DBMS_XSTREAM_GG_ADM.SET_PARAMETER +DBMS_XSTREAM_GG_ADM.SET_REPERROR_HANDLER +DBMS_XSTREAM_GG_ADM.SET_TAG +DBMS_XSTREAM_GG_ADM.SET_UP_QUEUE +DBMS_XSTREAM_GG_ADM.SPLIT_STREAMS +DBMS_XSTREAM_GG_ADM.START_OUTBOUND +DBMS_XSTREAM_GG_ADM.STOP_OUTBOUND +DBMS_XSTREAM_GG_ADM.UPDATE_ERROR_TXN +DBMS_XSTREAM_GG_INTERNAL. +DBMS_XSTREAM_GG_INTERNAL.BUILD_PDBSET_DICTIONARY +DBMS_XSTREAM_GG_INTERNAL.DISABLE_TDUP_WRKSPC_INT +DBMS_XSTREAM_GG_INTERNAL.ENABLE_TDUP_WORKSPACE_INT +DBMS_XSTREAM_GG_INTERNAL.GET_GG_SESS_FLAGS_INT +DBMS_XSTREAM_GG_INTERNAL.GET_MDH_FOR_PDBNAME_SCN +DBMS_XSTREAM_GG_INTERNAL.GET_PDBNAME_FOR_MDH +DBMS_XSTREAM_GG_INTERNAL.GET_PDB_INFO +DBMS_XSTREAM_GG_INTERNAL.INIT_WFIT_N_SYNCH_VARS +DBMS_XSTREAM_GG_INTERNAL.IS_CTAS_NO_DML_SESS_INT +DBMS_XSTREAM_GG_INTERNAL.IS_FOO_TRIG_FIRE_AT_SESS_INT +DBMS_XSTREAM_GG_INTERNAL.IS_TDUP_WRKSPC_ENABLED_INT +DBMS_XSTREAM_GG_INTERNAL.PURGE_CDR_INFO_INTERNAL +DBMS_XSTREAM_GG_INTERNAL.RESTORE_VARIABLES +DBMS_XSTREAM_GG_INTERNAL.SET_CTAS_SESS_CTX_INT +DBMS_XSTREAM_GG_INTERNAL.SET_FOO_TRIGGER_CONTXT_INT +DBMS_XSTREAM_GG_INTERNAL.SET_GG_SESS_FLAGS_INT +DBMS_XSTREAM_GG_INTERNAL.UPDATE_ERROR_TXN +DBMS_XSTREAM_UTL_IVK. +DBMS_XSTREAM_UTL_IVK.ADD_OUTBOUND +DBMS_XSTREAM_UTL_IVK.ADD_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_UTL_IVK.ALTER_INBOUND +DBMS_XSTREAM_UTL_IVK.ALTER_OUTBOUND +DBMS_XSTREAM_UTL_IVK.COMMA_TO_TABLE_INT +DBMS_XSTREAM_UTL_IVK.CREATE_INBOUND +DBMS_XSTREAM_UTL_IVK.CREATE_OUTBOUND +DBMS_XSTREAM_UTL_IVK.DROP_INBOUND +DBMS_XSTREAM_UTL_IVK.STR_LENGTH_CK +DBMS_XSTREAM_UTL_IVK.VALIDATE_SRCDB_INPUT +DBMS_XS_FIDM. +DBMS_XS_FIDM.DBMS_XS_FIDM_DELETE +DBMS_XS_FIDM.DBMS_XS_FIDM_INSERT +DBMS_XS_FIDM.DBMS_XS_FIDM_UPDATE +DBMS_XS_MTCACHE. +DBMS_XS_MTCACHE.GET_RETENTION_TIME +DBMS_XS_MTCACHE.SET_RETENTION_TIME +DBMS_XS_NSATTR.DBMS_XS_NSATTR +DBMS_XS_PRINCIPALS. +DBMS_XS_PRINCIPALS.ADD_PROXY_TO_SCHEMA +DBMS_XS_PRINCIPALS.REMOVE_PROXY_FROM_SCHEMA +DBMS_XS_PRINCIPALS.SET_PASSWORD +DBMS_XS_PRINCIPALS.SET_VERIFIER +DBMS_XS_SESSIONS. +DBMS_XS_SESSIONS.ADD_GLOBAL_CALLBACK +DBMS_XS_SESSIONS.ASSIGN_USER +DBMS_XS_SESSIONS.ATTACH_SESSION +DBMS_XS_SESSIONS.CREATE_ATTRIBUTE +DBMS_XS_SESSIONS.CREATE_NAMESPACE +DBMS_XS_SESSIONS.CREATE_SESSION +DBMS_XS_SESSIONS.DELETE_ATTRIBUTE +DBMS_XS_SESSIONS.DELETE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS.DELETE_NAMESPACE +DBMS_XS_SESSIONS.DESTROY_SESSION +DBMS_XS_SESSIONS.DETACH_SESSION +DBMS_XS_SESSIONS.DISABLE_ROLE +DBMS_XS_SESSIONS.ENABLE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS.ENABLE_ROLE +DBMS_XS_SESSIONS.GET_ATTRIBUTE +DBMS_XS_SESSIONS.GET_SESSIONID_FROM_COOKIE +DBMS_XS_SESSIONS.REAUTH_SESSION +DBMS_XS_SESSIONS.RESET_ATTRIBUTE +DBMS_XS_SESSIONS.SAVE_SESSION +DBMS_XS_SESSIONS.SET_ATTRIBUTE +DBMS_XS_SESSIONS.SET_INACTIVITY_TIMEOUT +DBMS_XS_SESSIONS.SET_SESSION_COOKIE +DBMS_XS_SESSIONS.SWITCH_USER +DBMS_XS_SESSIONS_FFI. +DBMS_XS_SESSIONS_FFI.ADD_GLOBAL_CALLBACK +DBMS_XS_SESSIONS_FFI.ASSIGN_USER +DBMS_XS_SESSIONS_FFI.ATTACH_SESSION +DBMS_XS_SESSIONS_FFI.CREATE_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.CREATE_NAMESPACE +DBMS_XS_SESSIONS_FFI.CREATE_SESSION +DBMS_XS_SESSIONS_FFI.DELETE_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.DELETE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS_FFI.DELETE_NAMESPACE +DBMS_XS_SESSIONS_FFI.DESTROY_SESSION +DBMS_XS_SESSIONS_FFI.DETACH_SESSION +DBMS_XS_SESSIONS_FFI.DISABLE_ROLE +DBMS_XS_SESSIONS_FFI.ENABLE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS_FFI.ENABLE_ROLE +DBMS_XS_SESSIONS_FFI.GET_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.GET_SESSIONID_FROM_COOKIE +DBMS_XS_SESSIONS_FFI.REAUTH_SESSION +DBMS_XS_SESSIONS_FFI.RESET_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.SAVE_SESSION +DBMS_XS_SESSIONS_FFI.SET_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.SET_INACTIVITY_TIMEOUT +DBMS_XS_SESSIONS_FFI.SET_SESSION_COOKIE +DBMS_XS_SESSIONS_FFI.SWITCH_USER +DBMS_XS_SIDP. +DBMS_XS_SIDP.DODHEXCHANGE +DBMS_XS_SIDP.FIXDHKEYSIZE +DBMS_XS_SYSTEM. +DBMS_XS_SYSTEM.BLOCK_PRINCIPAL_CHANGES +DBMS_XS_SYSTEM.CHECK_XSCALLBACK +DBMS_XS_SYSTEM.CHECK_XSPROVISION +DBMS_XS_SYSTEM.SET_XS_ACL_RESULT_SIZE +DBMS_XS_SYSTEM_FFI. +DBMS_XS_SYSTEM_FFI.BLOCK_PRINCIPAL_CHANGES +DBMS_XS_SYSTEM_FFI.CHECK_XSCALLBACK +DBMS_XS_SYSTEM_FFI.CHECK_XSPROVISION +DBMS_XS_SYSTEM_FFI.SET_XS_ACL_RESULT_SIZE +DBMS_ZHELP. +DBMS_ZHELP.GET_OBJECT_GRANTS +DBMS_ZHELP.GET_SYSPRIV_GRANTS +DBMS_ZHELP_IR. +DBMS_ZHELP_IR.CHECK_SYS_PRIV +DBNAME +DBOP_EXEC_ID +DBOP_NAME +DBREPLAY_CALL_COUNTER +DBREPLAY_FILE_ID +DBTIME +DBTIMEPERCALL +DBTIMEPERSEC +DBTIME_IN_WAIT +DBTIME_TOTAL +DBUN +DBUNAME +DBURITYPE.CREATEURI +DBURITYPE.DBURITYPE +DBURITYPE.GETBLOB +DBURITYPE.GETCLOB +DBURITYPE.GETCONTENTTYPE +DBURITYPE.GETEXTERNALURL +DBURITYPE.GETURL +DBURITYPE.GETXML +DBUSER_OWNER +DBVERSION +DB_BLOCK_CHANGE +DB_BLOCK_CHANGES +DB_BLOCK_CHANGES_DELTA +DB_BLOCK_CHANGES_TOTAL +DB_BLOCK_GETS +DB_CHARACTER_SET +DB_CREATED +DB_DATA +DB_DBID +DB_DOMAIN +DB_ID +DB_INCARNATION# +DB_LINK +DB_LINK_OWNER +DB_NAME +DB_SESSION_ID +DB_SID +DB_STATUS +DB_TIME +DB_TXN_SCN +DB_UNIQUE_NAME +DB_USER +DB_USERNAME +DB_VERSION +DB_VERSION_TIME +DDL_ATTRIBUTE +DDL_HANDLER +DDL_NUM +DDL_TEXT +DDL_TXT +DD_TIME +DEAD_TIME +DEBUGINFO +DECLARATIVE_TYPE +DECORRELATE +DEDUPLICATION +DEF$_PROPAGATOR_TRIG. +DEFAULT +DEFAULTED +DEFAULT_ACTION +DEFAULT_ANYDATA_VALUE +DEFAULT_ATTR +DEFAULT_BUILD_SPEC +DEFAULT_DIRECTORY +DEFAULT_DIRECTORY_NAME +DEFAULT_DIRECTORY_OWNER +DEFAULT_ENABLED +DEFAULT_HIERARCHY_NAME +DEFAULT_LENGTH +DEFAULT_ON_NULL +DEFAULT_OPTION +DEFAULT_PARM_VALUE +DEFAULT_ROLE +DEFAULT_TABLE +DEFAULT_TABLESPACE +DEFAULT_VALUE +DEFAULT_WEIGHT +DEFERRABLE +DEFERRED +DEFERRED_DROP +DEFERRED_WINDOW_NAME +DEFINE_VARS +DEFVAL +DEF_BUFFER_POOL +DEF_CACHE +DEF_CELL_FLASH_CACHE +DEF_CHUNK +DEF_COMPRESS +DEF_COMPRESSION +DEF_COMPRESS_FOR +DEF_CPU_COST +DEF_DEDUPLICATE +DEF_ENCRYPT +DEF_FLASH_CACHE +DEF_FREELISTS +DEF_FREELIST_GROUPS +DEF_INDEXING +DEF_INITIAL_EXTENT +DEF_INI_TRANS +DEF_INMEMORY +DEF_INMEMORY_COMPRESSION +DEF_INMEMORY_DISTRIBUTE +DEF_INMEMORY_DUPLICATE +DEF_INMEMORY_PRIORITY +DEF_IN_ROW +DEF_IO_COST +DEF_LOGGING +DEF_MAX_EXTENTS +DEF_MAX_SIZE +DEF_MAX_TRANS +DEF_MINRET +DEF_MIN_EXTENTS +DEF_NET_COST +DEF_NEXT_EXTENT +DEF_PARAMETERS +DEF_PCTVERSION +DEF_PCT_FREE +DEF_PCT_INCREASE +DEF_PCT_USED +DEF_RETENTION +DEF_SECUREFILE +DEF_SEGMENT_CREATION +DEF_SELECTIVITY +DEF_SUBPARTITION_COUNT +DEF_TABLESPACE_NAME +DEF_TAB_COMPRESSION +DEGREE +DEL +DELAY_CSECS +DELAY_MINS +DELEGATE_OPTION +DELETABLE +DELETED +DELETED_ROWS +DELETES +DELETE_COLLISIONS +DELETE_COUNT +DELETE_FREQ +DELETE_RULE +DELIVERED_COMMITTED_TXN +DELIVERED_TXN +DELIVERY_MODE +DELTA +DELTASCN_BASE +DELTASCN_WRAP +DELTAUPD_TIME +DELTA_ALLOC +DELTA_APPLICATION_WAIT_TIME +DELTA_BUFFER_GETS +DELTA_CELL_OFFLOAD_ELIG_BYTES +DELTA_CELL_UNCOMPRESSED_BYTES +DELTA_CLUSTER_WAIT_TIME +DELTA_CONCURRENCY_TIME +DELTA_COUNT +DELTA_CPU_TIME +DELTA_DEALLOC +DELTA_DIRECT_WRITES +DELTA_DISK_READS +DELTA_ELAPSED_TIME +DELTA_END_OF_FETCH_COUNT +DELTA_EXECUTION_COUNT +DELTA_FETCH_COUNT +DELTA_INTERCONNECT_IO_BYTES +DELTA_INVALIDATIONS +DELTA_IO_INTERCONNECT_BYTES +DELTA_JAVA_EXEC_TIME +DELTA_LOADS +DELTA_PARSE_CALLS +DELTA_PHYSICAL_READ_BYTES +DELTA_PHYSICAL_READ_REQUESTS +DELTA_PHYSICAL_WRITE_BYTES +DELTA_PHYSICAL_WRITE_REQUESTS +DELTA_PLSQL_EXEC_TIME +DELTA_PX_SERVERS_EXECUTIONS +DELTA_READ_IO_BYTES +DELTA_READ_IO_REQUESTS +DELTA_READ_MEM_BYTES +DELTA_ROWS_PROCESSED +DELTA_SORTS +DELTA_TIME +DELTA_USER_IO_WAIT_TIME +DELTA_WRITE_IO_BYTES +DELTA_WRITE_IO_REQUESTS +DENSITY +DEPENDENCIES +DEPENDENCY +DEPENDENCY_NAME +DEPENDENCY_TYPE +DEPENDENT_SCN +DEPENDENT_XID +DEPEND_COUNT +DEPEND_ID +DEPEND_ON +DEPTH +DEP_COMMITSCN +DEP_COMMIT_POSITION +DEP_SCHEMA_OID +DEP_SCHEMA_OWNER +DEP_SCHEMA_URL +DEP_TRANSACTION_ID +DEP_TXN_CONF_SQL_ID +DEP_TXN_NAME +DEP_XID +DEP_XIDSLT +DEP_XIDSQN +DEP_XIDUSN +DEQLOG_PROCESSING_CPU_TIME +DEQLOG_PROCESSING_ELAPSED_TIME +DEQLOG_ROWS_PROCESSED +DEQUEUED_MESSAGE_CREATE_TIME +DEQUEUED_MESSAGE_NUMBER +DEQUEUED_MSGS +DEQUEUED_MSG_LATENCY +DEQUEUED_POSITION +DEQUEUE_CPU_TIME +DEQUEUE_DISK_DELETES +DEQUEUE_DISK_LOCKS +DEQUEUE_ENABLED +DEQUEUE_INDEX_BLOCKS_FREED +DEQUEUE_MEMORY_LOCKS +DEQUEUE_REQUESTS +DEQUEUE_TIME +DEQUEUE_TRANSACTIONS +DEREF_NO_REWRITE +DERIVED_FROM_ONAME +DERIVED_FROM_SNAME +DESCEND +DESCR +DESCRIBE_MISMATCH +DESCRIPTION +DESCRIPTION_TYPE +DESCRIPTION_VALUE +DESTINATION +DESTINATION_COMPONENT_DB +DESTINATION_COMPONENT_ID +DESTINATION_COMPONENT_NAME +DESTINATION_COMPONENT_TYPE +DESTINATION_DATABASE_NAME +DESTINATION_DBLINK +DESTINATION_END_TIME +DESTINATION_INSTANCE_ID +DESTINATION_INSTANCE_NAME +DESTINATION_INST_START_TIME +DESTINATION_NAME +DESTINATION_OWNER +DESTINATION_QUEUE +DESTINATION_QUEUE_NAME +DESTINATION_QUEUE_OWNER +DESTINATION_QUEUE_PUBLISHER +DESTINATION_SCHEMA_NAME +DESTINATION_SERIAL# +DESTINATION_SID +DESTINATION_START_TIME +DESTINATION_STATE +DESTINATION_STMT +DESTINATION_TABLE_NAME +DESTINATION_TABLE_OWNER +DESTINATION_TYPE +DESTINATION_USER_NAME +DEST_ID +DEST_NAME +DEST_ROLE +DEST_SERVER_PROCESS_ID +DES_ENCRYPTED_PASSWORD. +DETACHED +DETAIL +DETAILED_DESCRIPTION +DETAILED_LOCATION +DETAILOBJ1_COLUMN +DETAILOBJ1_OWNER +DETAILOBJ1_RELATION +DETAILOBJ2_COLUMN +DETAILOBJ2_OWNER +DETAILOBJ2_RELATION +DETAILOBJ_ALIAS +DETAILOBJ_COLUMN +DETAILOBJ_NAME +DETAILOBJ_OWNER +DETAILOBJ_PCT +DETAILOBJ_TYPE +DETAIL_ALIAS +DETAIL_COLUMN +DETAIL_NAME +DETAIL_OWNER +DETAIL_PARTITION_NAME +DETAIL_PARTITION_POSITION +DETAIL_RELATION +DETAIL_SUBPARTITION_NAME +DETAIL_SUBPARTITION_POSITION +DETAIL_TYPE +DETECTED_USAGES +DETERMINISTIC +DEVELOPMENT_SERVICE_HOME. +DEVELOPMENT_SERVICE_HOME_LOGIN. +DEVELOPMENT_SERVICE_SIGNUP. +DEVICE_NAME +DEVICE_TYPE +DFLAG +DFO_NUMBER +DFREE +DF_CHECKPOINT_CHANGE# +DF_CKP_MOD_TIME +DF_COUNT +DF_CREATION_CHANGE# +DF_FILE# +DF_RESETLOGS_CHANGE# +DF_TABLESPACE +DGNAME +DIANA. +DIANA.AS_ALTER +DIANA.AS_ALTERS +DIANA.AS_ALTS +DIANA.AS_ALTTYPS +DIANA.AS_APPLY +DIANA.AS_CHOIC +DIANA.AS_COMP_ +DIANA.AS_DECL1 +DIANA.AS_DECL2 +DIANA.AS_DSCRM +DIANA.AS_DSCRT +DIANA.AS_EXP +DIANA.AS_FROM +DIANA.AS_GROUP +DIANA.AS_HIDDEN +DIANA.AS_ID +DIANA.AS_INTO_ +DIANA.AS_ITEM +DIANA.AS_LIST +DIANA.AS_NAME +DIANA.AS_OIDTYPS +DIANA.AS_ORDER +DIANA.AS_PARMS +DIANA.AS_PRAGM +DIANA.AS_P_ +DIANA.AS_P_ASS +DIANA.AS_RELIES_ON +DIANA.AS_RESULTS +DIANA.AS_SET_C +DIANA.AS_STM +DIANA.AS_USING_ +DIANA.AS_WHTLST +DIANA.A_ACTUAL +DIANA.A_AGENT +DIANA.A_AGENT_INDEX +DIANA.A_AGENT_NAME +DIANA.A_ALIGNM +DIANA.A_ALTERACT +DIANA.A_AUTHID +DIANA.A_BEGCOL +DIANA.A_BEGLIN +DIANA.A_BINARY +DIANA.A_BIND +DIANA.A_BITFLAGS +DIANA.A_BLOCK_ +DIANA.A_CALL +DIANA.A_CHARSET +DIANA.A_CLUSTE +DIANA.A_CONNEC +DIANA.A_CONSTD +DIANA.A_CONSTT +DIANA.A_CONTEX +DIANA.A_CRED +DIANA.A_CS +DIANA.A_DIR +DIANA.A_D_ +DIANA.A_D_CHAR +DIANA.A_D_R_ +DIANA.A_D_R_VO +DIANA.A_ENDCOL +DIANA.A_ENDLIN +DIANA.A_EXCEPT +DIANA.A_EXP +DIANA.A_EXP1 +DIANA.A_EXP2 +DIANA.A_EXP_VO +DIANA.A_EXTERNAL +DIANA.A_EXTERNAL_CLASS +DIANA.A_EXT_TY +DIANA.A_FILE +DIANA.A_FLAGS +DIANA.A_FORM_D +DIANA.A_HANDLE +DIANA.A_HAVING +DIANA.A_HEADER +DIANA.A_ID +DIANA.A_IDENTIFIER +DIANA.A_IDENTITY +DIANA.A_INDICA +DIANA.A_ITERAT +DIANA.A_KIND +DIANA.A_LANG +DIANA.A_LIB +DIANA.A_LIBAGENT_NAME +DIANA.A_LIMIT +DIANA.A_MEMBER +DIANA.A_METH_FLAGS +DIANA.A_NAME +DIANA.A_NAME_V +DIANA.A_NOT_NU +DIANA.A_NUM_INH_ATTR +DIANA.A_OBJECT +DIANA.A_OPAQUE_SIZE +DIANA.A_OPAQUE_USELIB +DIANA.A_ORIGINAL +DIANA.A_PACKAG +DIANA.A_PARALLEL_SPEC +DIANA.A_PARTITIONING +DIANA.A_PARTN +DIANA.A_PERCENT +DIANA.A_P_IFC +DIANA.A_RANGE +DIANA.A_REFIN +DIANA.A_RTNING +DIANA.A_SAMPLE +DIANA.A_SCHEMA +DIANA.A_SECURITY +DIANA.A_SPACE +DIANA.A_STM +DIANA.A_STM_STRING +DIANA.A_STREAMING +DIANA.A_STYLE +DIANA.A_SUBPRO +DIANA.A_SUBUNI +DIANA.A_SUPERTYPE +DIANA.A_TFLAG +DIANA.A_TRANS +DIANA.A_TYPE_BODY +DIANA.A_TYPE_R +DIANA.A_TYPE_S +DIANA.A_UNIT_B +DIANA.A_UNUSED +DIANA.A_UP +DIANA.A_WHERE +DIANA.C_ENTRY_ +DIANA.C_ENTRY_PT +DIANA.C_FIXUP +DIANA.C_FRAME_ +DIANA.C_LABEL +DIANA.C_OFFSET +DIANA.C_VAR +DIANA.C_VT_INDEX +DIANA.D_WHTLST_KIND +DIANA.D_WHTLST_NAME +DIANA.D_WHTLST_SCHEMA +DIANA.L_DEFAUL +DIANA.L_INDREP +DIANA.L_NUMREP +DIANA.L_Q_HINT +DIANA.L_RESTRICT_REFERENCES +DIANA.L_SYMREP +DIANA.L_TYPENAME +DIANA.SS_BINDS +DIANA.SS_BUCKE +DIANA.SS_EXLST +DIANA.SS_FUNCTIONS +DIANA.SS_INTO +DIANA.SS_LOCALS +DIANA.SS_PLSCOPE +DIANA.SS_PRAGM_L +DIANA.SS_SQL +DIANA.SS_TABLES +DIANA.SS_VTABLE +DIANA.S_ADDRES +DIANA.S_ADEFN +DIANA.S_ALS +DIANA.S_BASE_T +DIANA.S_BLKFLG +DIANA.S_BLOCK +DIANA.S_BODY +DIANA.S_CHARSET_EXPR +DIANA.S_CHARSET_FORM +DIANA.S_CHARSET_VALUE +DIANA.S_CMP_TY +DIANA.S_COMP_S +DIANA.S_CONSTR +DIANA.S_CURRENT_OF +DIANA.S_DECL +DIANA.S_DEFN_PRIVATE +DIANA.S_DEP_NUM +DIANA.S_DISCRI +DIANA.S_EXCEPT +DIANA.S_EXP_TY +DIANA.S_FG_POS +DIANA.S_FG_REFS +DIANA.S_FG_SIG +DIANA.S_FIRST +DIANA.S_FLAGS +DIANA.S_FRAME +DIANA.S_INDCOL +DIANA.S_INIT_E +DIANA.S_INTERF +DIANA.S_INTRO_VERSION +DIANA.S_IN_OUT +DIANA.S_ITEMS +DIANA.S_LAYER +DIANA.S_LENGTH_SEMANTICS +DIANA.S_LIB_FLAGS +DIANA.S_LOCATI +DIANA.S_NAME +DIANA.S_NORMARGLIST +DIANA.S_NOT_NU +DIANA.S_OBJN +DIANA.S_OBJ_DE +DIANA.S_OBJ_TY +DIANA.S_OPERAT +DIANA.S_PACKIN +DIANA.S_PLSC_SIG +DIANA.S_POS +DIANA.S_RECORD +DIANA.S_REP +DIANA.S_SCOPE +DIANA.S_SIZE +DIANA.S_SPEC +DIANA.S_STM +DIANA.S_STMT_FLAGS +DIANA.S_STUB +DIANA.S_TOID +DIANA.S_TYP +DIANA.S_T_SPEC +DIANA.S_T_STRU +DIANA.S_VALUE +DIANA.S_VTFLAGS +DICT +DICTIONARY +DICTIONARY_BEGIN +DICTIONARY_END +DICTIONARY_ENTRIES +DICTIONARY_OBJ_NAME. +DICTIONARY_OBJ_NAME_LIST. +DICTIONARY_OBJ_OWNER. +DICTIONARY_OBJ_OWNER_LIST. +DICTIONARY_OBJ_TYPE. +DICTIONARY_SCN +DICT_BEGIN +DICT_COLUMNS +DICT_END +DID +DIFFERENT_LONG_LENGTH +DIFF_CALL_DURN +DIGEST_TYPE +DIMENSIONALITY_EXPRESSION +DIMENSIONALITY_ID +DIMENSIONALITY_NAME +DIMENSION_ID +DIMENSION_NAME +DIMENSION_OWNER +DIMENSION_TYPE +DIM_KEY_ID +DIRECT +DIRECTIVE_ID +DIRECTIVE_NAME +DIRECTIVE_TYPE +DIRECTORY +DIRECTORY_NAME +DIRECTORY_OWNER +DIRECTORY_PATH +DIRECT_LOAD_FREQ +DIRECT_LOAD_ROWS +DIRECT_LOGON_USER +DIRECT_PATH_NUM_COLUMNS_LOADED +DIRECT_WRITES +DIRECT_WRITES_DELTA +DIRECT_WRITES_TOTAL +DIRNAME +DIRSSCAN +DIRTY +DIRTY_BUFFERS +DIRTY_BUFFERS_INSPECTED +DIRTY_LIMIT +DIR_PATH +DIR_PATH_SHARED +DISABLED +DISABLE_CHANGE# +DISABLE_PARALLEL_DML +DISABLE_TIME +DISCONNECT_TIME +DISCRETE_BYTES_PER_SECOND +DISK +DISK1_LATENCY +DISK1_NAME +DISK2_LATENCY +DISK2_NAME +DISK3_LATENCY +DISK3_NAME +DISK_BYTES +DISK_FILTER_RATIO +DISK_ID +DISK_NAME +DISK_NUMBER +DISK_READS +DISK_READS_DELTA +DISK_READS_TOTAL +DISK_READ_RESULTS +DISK_REQUESTS +DISK_UTILIZATION_AVG +DISK_UTILIZATION_SUM +DISK_UTILIZATION_SUMX2 +DISK_WRITES +DISPATCHER +DISPATCHERS +DISPLAY_NAME +DISPLAY_RAW. +DISPLAY_VALUE +DISP_TYPE +DISTDIM +DISTINCTFLAG +DISTINCT_KEYS +DISTRIBUTED +DISTRIBUTION +DIUTIL. +DIUTIL.ATTRIBUTE_USE_STATISTICS +DIUTIL.BOOL_TO_INT +DIUTIL.GET_D +DIUTIL.GET_DIANA +DIUTIL.INT_TO_BOOL +DIUTIL.NODE_USE_STATISTICS +DIUTIL.SUBPTXT +DIVERGENCE_LOAD_STATUS +DIVERGENCE_TYPE +DLM_CONFLICTS +DLM_INVALIDATIONS +DLM_INVALIDATION_REQUESTS +DLM_LOCK_REQUESTS +DLM_PIN_RELEASES +DLM_PIN_REQUESTS +DLM_RELEASES +DLM_REQUESTS +DMCLAIMP.DMCLACLOSESTUB +DMCLAIMP.DMCLAFETCHSTUB +DMCLAIMP.DMCLASTARTSTUB +DMCLAIMP.ODCITABLECLOSE +DMCLAIMP.ODCITABLEFETCH +DMCLAIMP.ODCITABLESTART +DMCLBIMP.DMCLBCLOSESTUB +DMCLBIMP.DMCLBFETCHSTUB +DMCLBIMP.DMCLBSTARTSTUB +DMCLBIMP.ODCITABLECLOSE +DMCLBIMP.ODCITABLEFETCH +DMCLBIMP.ODCITABLESTART +DMFEBIMP.DMFEBPREPARESTUB +DMFEBIMP.DMFEBSTARTSTUB +DMFEBIMP.ODCITABLECLOSE +DMFEBIMP.ODCITABLEFETCH +DMFEBIMP.ODCITABLEPREPARE +DMFEBIMP.ODCITABLESTART +DMGLMBIMP.DMGLMBPREPARESTUB +DMGLMBIMP.DMGLMBSTARTSTUB +DMGLMBIMP.ODCITABLECLOSE +DMGLMBIMP.ODCITABLEFETCH +DMGLMBIMP.ODCITABLEPREPARE +DMGLMBIMP.ODCITABLESTART +DMLOPERATION +DML_CONDITION +DML_TIMESTAMP +DML_UPDATE +DMMODBIMP.DMMODBCLOSESTUB +DMMODBIMP.DMMODBFETCHSTUB +DMMODBIMP.DMMODBSTARTSTUB +DMMODBIMP.ODCITABLECLOSE +DMMODBIMP.ODCITABLEFETCH +DMMODBIMP.ODCITABLESTART +DMNMFBIMP.DMNMFBCLOSESTUB +DMNMFBIMP.DMNMFBFETCHSTUB +DMNMFBIMP.DMNMFBSTARTSTUB +DMNMFBIMP.ODCITABLECLOSE +DMNMFBIMP.ODCITABLEFETCH +DMNMFBIMP.ODCITABLESTART +DMP_SEC.ADD_MODEL_TABLE +DMP_SEC.COPY_MODEL_SUBORDINATES +DMP_SEC.CREATE_COST_MATRIX_MODEL_TABLE +DMP_SEC.CREATE_EMPTY_MODEL +DMP_SEC.DROP_MODEL_TABLES +DMP_SEC.DROP_TABLE +DMP_SEC.GET_ALGORITHM_NAME +DMP_SEC.GET_ASSOCIATION_RULES +DMP_SEC.GET_FREQUENT_ITEMSETS +DMP_SEC.GET_FUNCTION_NAME +DMP_SEC.GET_MODEL_COST_MATRIX +DMP_SEC.GET_MODEL_DETAILS_AI +DMP_SEC.GET_MODEL_DETAILS_EM +DMP_SEC.GET_MODEL_DETAILS_EM_COMP +DMP_SEC.GET_MODEL_DETAILS_EM_PROJ +DMP_SEC.GET_MODEL_DETAILS_GLM +DMP_SEC.GET_MODEL_DETAILS_GLOBAL +DMP_SEC.GET_MODEL_DETAILS_KM +DMP_SEC.GET_MODEL_DETAILS_NB +DMP_SEC.GET_MODEL_DETAILS_NMF +DMP_SEC.GET_MODEL_DETAILS_OC +DMP_SEC.GET_MODEL_DETAILS_SVD +DMP_SEC.GET_MODEL_DETAILS_SVM +DMP_SEC.GET_MODEL_DETAILS_TREE_XML +DMP_SEC.GET_MODEL_TABLE +DMP_SEC.GET_MODEL_TABLES +DMP_SEC.GET_MODEL_TRANSFORMATIONS +DMP_SEC.LOAD_MODEL +DMP_SEC.MODEL_EXISTS +DMP_SEC.RECKON_TABLE_SIZE +DMP_SYS. +DMP_SYS.ADD_SETTING +DMP_SYS.ADD_SETTING_TO_NT +DMP_SYS.CALCULATE_MODEL_SIZE +DMP_SYS.CREATE_MODEL_TABLES_LIST +DMP_SYS.CREATE_NEW_MODEL_TABLE_NAME +DMP_SYS.CREATE_NEW_TEMP_MODEL_NAME +DMP_SYS.CREATE_NEW_TEMP_TABLE_NAME +DMP_SYS.DOWNGRADE_MODELS +DMP_SYS.DROP_MODEL +DMP_SYS.LOCK_MODEL +DMP_SYS.PERSIST_MODEL +DMP_SYS.PERSIST_XFORM +DMP_SYS.RELEASE_MODEL +DMP_SYS.REM_SETTING +DMP_SYS.UPGRADE_MODELS +DMP_SYS.VALIDATE_MODEL_NAME +DMP_SYS.VERIFY_TABLE_EXISTENCE +DMP_SYS.XFORM_EXP +DMSVMAIMP.DMSVMACLOSESTUB +DMSVMAIMP.DMSVMAFETCHSTUB +DMSVMAIMP.DMSVMASTARTSTUB +DMSVMAIMP.ODCITABLECLOSE +DMSVMAIMP.ODCITABLEFETCH +DMSVMAIMP.ODCITABLESTART +DMSVMBIMP.DMSVMBCLOSESTUB +DMSVMBIMP.DMSVMBFETCHSTUB +DMSVMBIMP.DMSVMBSTARTSTUB +DMSVMBIMP.ODCITABLECLOSE +DMSVMBIMP.ODCITABLEFETCH +DMSVMBIMP.ODCITABLESTART +DM_CL_APPLY. +DM_CL_BUILD. +DM_CL_CUR. +DM_FE_BUILD. +DM_FE_CUR. +DM_GLM_BUILD. +DM_GLM_CUR. +DM_MODB_CUR. +DM_MOD_BUILD. +DM_NMF_BUILD. +DM_NMF_CUR. +DM_QGEN. +DM_QGEN.CI_GEN +DM_QGEN.CI_GEN_SCHEMA +DM_QGEN.CLOB_LITERAL +DM_QGEN.LS_APPEND +DM_QGEN.LS_PREPEND +DM_QGEN.TO_LITERAL +DM_SVM_APPLY. +DM_SVM_BUILD. +DM_SVM_CUR. +DM_XFORM. +DM_XFORM.ADAPTOR_AB +DM_XFORM.ADAPTOR_AR +DM_XFORM.ADAPTOR_AR_XNAL +DM_XFORM.ADAPTOR_OC +DM_XFORM.GET_COLUMNS +DOMAIN_INDEX_FILTER +DOMAIN_INDEX_NO_SORT +DOMAIN_INDEX_SORT +DOMAIN_NAME +DOMIDX_MANAGEMENT +DOMIDX_OPSTATUS +DOMIDX_STATUS +DONE_BLOCK_NUM +DONE_TIME +DONE_TRIGGER. +DOP +DOWNSTREAM_COMP_ID +DPRECO +DP_ADD_RLS_POLICY. +DP_BOOLEAN_PARAMETERS1 +DP_DROP_RLS_POLICY. +DP_TEXT_PARAMETERS1 +DQ_TOTALQ +DRIACC. +DRIACC.CAN +DRIACC.CAN_EXECUTE +DRIACC.SPLIT_SPEC +DRIACC.UD_ACCESS +DRIACC.USER_ACCESS +DRIACC.USER_IN_ROLE +DRIACC.VERIFY_COLSPEC +DRIACC.VERIFY_PROCEDURE +DRICON. +DRICON.EXIST_TAB +DRICON.GET_DATA_TYPE +DRICON.GET_PRIMARY_KEY +DRICON.GET_TYPE_DATA_TYPE +DRICON.SET_DATATYPE_OBJ +DRICON.SET_STORE_OBJ +DRICON.VALIDATE_CDI +DRICON.VALIDATE_META_COLUMN +DRICON.VALIDATE_TAB +DRICON.VALIDATE_TEXT_COLUMN +DRIDISP. +DRIDISP.EXECTRUST +DRIDISP.EXECTRUST_RET +DRIDISP.EXECTRUST_RET1 +DRIDML. +DRIDML.CLEANDELETE +DRIDML.CLEARONLINEPENDING +DRIDML.DELETEPENDING +DRIDML.DELETEPENDINGARR +DRIDML.DELETE_DUP_WAITING +DRIDML.DEREGISTER +DRIDML.EXCHANGEPENDING +DRIDML.FETCH_WAITING_CUR +DRIDML.HASPENDING +DRIDML.INSERT_PENDING +DRIDML.LOCK_AUTOSYNC +DRIDML.LOCK_AUTOSYNC_RET +DRIDML.LOCK_DML +DRIDML.LOCK_DML_ALL_PART +DRIDML.LOCK_DML_RET +DRIDML.OPEN_WAITING_CUR +DRIDML.POPULATEPENDINGROWID +DRIDML.SETLOCKFAILED +DRIDML.UNLOCK_AUTOSYNC +DRIDML.UNLOCK_DML +DRIDML.UNLOCK_DML_ALL_PART +DRIDOC. +DRIDOC.HIGHLIGHT_ADD +DRIDOC.TEXT_ADD +DRIDOC.TEXT_END +DRIDOC.TEXT_NEW +DRIDOC.THEME_ADD +DRIDOC.TOKEN_ADD +DRIENT. +DRIENT.ADD_EXTRACT_RULE +DRIENT.CHKEXTPOL +DRIENT.COMPILE +DRIENT.REMOVE_EXTRACT_RULE +DRIENTL. +DRIENTL.ADD_DICT_ENTRY +DRIENTL.CHKDUPDICT +DRIENTL.CLOSE_DICT +DRIENTL.DROP_DICT +DRIENTL.PREP_DICT +DRIERR. +DRIERR.ADDODCIWARNING +DRIERR.RECORDINDEXERROR +DRIERR.RECORDINDEXERRORID +DRIEXP. +DRIEXP.GET_META_DATA +DRIFEAT. +DRIFEAT.DR$FEATURE_TRACK +DRIFEAT.DR$IDX_TRACK +DRIFEAT.DR$OPR_TRACK +DRIFEAT.DR$PAC_TRACK +DRIG. +DRIIMP. +DRIIMP.ADD_CDICOL +DRIIMP.ADD_PENDING +DRIIMP.ADD_USER_EXTRACT_RULE +DRIIMP.CREATE_INDEX +DRIIMP.CREATE_PARTITION +DRIIMP.SET_OBJECT +DRIIMP.SET_SUB_VALUE +DRIIMP.SET_VALUE +DRIIXS. +DRIIXS.ADD_INDEX +DRIIXS.COPY_INDEX_SET +DRIIXS.CREATE_INDEX_SET +DRIIXS.DROP_INDEX_SET +DRIIXS.DROP_USER_INDEX_SETS +DRIIXS.GETINDEXINDEXSET +DRIIXS.GETINDEXIXSCOLUMNS +DRIIXS.REMOVE_INDEX +DRILIST. +DRILOAD. +DRILOAD.RESOLVE_SQE +DRIMLX. +DRIMLX.ADD_SUB_LEXER +DRIMLX.COPY_MULTI_LEXER +DRIMLX.GETINDEXMULTILEXER +DRIMLX.GETSLXALTABBR +DRIMLX.INDEXADDSLX +DRIMLX.INDEXREMOVESLX +DRIMLX.INDEXUPDATESLX +DRIMLX.REMOVE_SUB_LEXER +DRIMLX.UPD_SUB_LEXER +DRIOBJ. +DRIOPT. +DRIOPT.GETSEGMENTINFO +DRIOPT.GET_DDL_LOCK_TIMEOUT +DRIOPT.GET_STATE +DRIOPT.GET_TIMER +DRIOPT.INDEXOPTIMIZEREBUILD_VERIFY +DRIOPT.LOCK_OPT +DRIOPT.LOCK_OPT_AF +DRIOPT.LOCK_OPT_ALL_PART +DRIOPT.LOCK_OPT_MVDATA +DRIOPT.LOCK_OPT_REBUILD +DRIOPT.LOCK_OPT_RET +DRIOPT.SET_DDL_LOCK_TIMEOUT +DRIOPT.SET_STATE +DRIOPT.START_TIMER +DRIOPT.UNLOCK_OPT +DRIOPT.UNLOCK_OPT_AF +DRIOPT.UNLOCK_OPT_ALL_PART +DRIOPT.UNLOCK_OPT_REBUILD +DRIPARSE. +DRIPARSE.INITCREATEREC +DRIPARSE.NORMALIZE_COLUMN_LIST +DRIPARSE.PARSEALTER +DRIPARSE.PARSEALTERCAT +DRIPARSE.PARSEALTERRULE +DRIPARSE.PARSEALTERXPATH +DRIPARSE.PARSECREATE +DRIPARSE.PARSECREATECAT +DRIPARSE.PARSECREATERULE +DRIPARSE.PARSECREATEXPATH +DRIPARSE.PARSEMIGRATE +DRIPARSE.PARSEPARTALTER +DRIPARSE.PARSEPARTCREATE +DRIPARX. +DRIPARX.CLEARCONTEXT +DRIPARX.END_PARALLEL_OP +DRIPARX.GETCONTEXT +DRIPARX.GET_SESSION_STATE +DRIPARX.SETCONTEXT +DRIPARX.SET_SESSION_STATE +DRIPREF. +DRIPREF.ADD_PARTITION_STORAGE +DRIPREF.COPY_PREFERENCES +DRIPREF.CREATE_PREFERENCE +DRIPREF.DROP_PREFERENCE +DRIPREF.DROP_USER_PREFERENCES +DRIPREF.GETOBJDEFAULT +DRIPREF.GETPREFCLAOBJ +DRIPREF.GET_ATTRIBUTE_VALUE +DRIPREF.GET_DEFAULT_FILTER +DRIPREF.GET_INDEX_VALUES +DRIPREF.GET_OAT_ID +DRIPREF.GET_OBJ_INFO +DRIPREF.GET_PREF_INFO +DRIPREF.GET_SUB_INDEX_VALUES +DRIPREF.NEXTPREFVALUE +DRIPREF.OPENPREFVALUE +DRIPREF.REMOVE_PARTITION_STORAGE +DRIPREF.RPL_PREFERENCES +DRIPREF.SET_ATTRIBUTE +DRIPREF.SET_PREFERENCES +DRIPREF.UNSET_ATTRIBUTE +DRIREC. +DRIREC.RECOVER +DRIREC.RECOVER_DICT +DRIREP. +DRIREP.BLANKLN +DRIREP.BYTESTR +DRIREP.ENDREPORT +DRIREP.INITREPORT +DRIREP.LOAD_TTYPE_NAMES +DRIREP.NUMSTR +DRIREP.PCTSTR +DRIREP.TITLE +DRIREP.WL +DRIREPM. +DRIREPM.CREATE_INDEX_SCRIPT +DRIREPM.CREATE_POLICY_SCRIPT +DRIREPM.DESCRIBE_INDEX +DRIREPM.DESCRIBE_POLICY +DRIREPZ. +DRIREPZ.GET_GTAB_SIZE +DRIREPZ.INDEX_SIZE +DRIRIO. +DRIRIO.CREATE_SHADOW +DRIRIO.CREATE_SHADOW_PARTMD +DRIRIO.LOCK_RIO +DRIRIO.LOCK_RIO_ALL_PART +DRIRIO.SHADOW_NAME +DRIRIO.UNLOCK_RIO +DRIRIO.UNLOCK_RIO_ALL_PART +DRISCORE. +DRISCORE.TEXTSCORE +DRISCORR. +DRISCORR.RULESCORE +DRISGP. +DRISGP.ADD_SECTION +DRISGP.ADD_SEC_GRP_ATTR_VAL +DRISGP.CHECKUPDMDATA +DRISGP.COPY_SECTION_GROUP +DRISGP.CREATE_SECTION_GROUP +DRISGP.CSV_TO_SECTION_ATTR +DRISGP.DROP_SECTION_GROUP +DRISGP.DROP_USER_SECTION_GROUPS +DRISGP.FIELD_TO_MDATA +DRISGP.GETSECTION +DRISGP.GETSECTIONS +DRISGP.GETTKTYPMVDATA +DRISGP.GET_DEFAULT_SECTION +DRISGP.GET_SG_INFO +DRISGP.HASSECTIONTYPE +DRISGP.INDEXADDSECTION +DRISGP.INDEXGETSECTIONATTRIBUTE +DRISGP.INDEXGETSECTIONID +DRISGP.INDEXREMSECTION +DRISGP.INDEXSETSECTIONATTRIBUTE +DRISGP.INDEXUNSETSECTIONATTRIBUTE +DRISGP.INDEXUPDATESECTIONATTRIBUTE +DRISGP.INS_SEC_GRP_ATTR_BY_ID +DRISGP.LOADSECTIONMD +DRISGP.REMOVE_SECTION +DRISGP.REM_SEC_GRP_ATTR_VAL +DRISGP.SECISMDATA +DRISGP.SET_SECTION_ATTRIBUTE +DRISGP.SET_SECTION_ATTRIBUTE_BY_ID +DRISGP.SET_SEC_GRP_ATTR +DRISGP.UNSET_SECTION_ATTRIBUTE +DRISGP.UNSET_SEC_GRP_ATTR +DRISPL. +DRISPL.ADD_STOPOBJ +DRISPL.COPY_STOPLIST +DRISPL.CREATE_STOPLIST +DRISPL.DROP_STOPLIST +DRISPL.DROP_USER_STOPLISTS +DRISPL.GETINDEXSTOPWORDS +DRISPL.GETSPLLANG +DRISPL.INDEXADDSTOPWORD +DRISPL.INDEXREMSTOPWORD +DRISPL.MIGRATETOMULTISTOPLIST +DRISPL.REMOVE_STOPOBJ +DRITHS. +DRITHS.GET_THS +DRITHS.LOOKUP +DRITHS.LOOKUP_SINGLE +DRITHS.PARSE_PHRASE +DRITHSC. +DRITHSC.CHANGE_SN +DRITHSC.CHECK_THESAURUS_EXISTS +DRITHSC.CREATE_PHRASE +DRITHSC.CREATE_PHRASE_LSB +DRITHSC.CREATE_RELATION +DRITHSC.CREATE_THESAURUS +DRITHSC.CREATE_THESAURUS_LSB +DRITHSC.CREATE_TR +DRITHSC.DROP_PHRASE +DRITHSC.DROP_RELATION +DRITHSC.DROP_THESAURUS +DRITHSC.DROP_TR +DRITHSC.DROP_USER_THESAURI +DRITHSC.MAKE_PT +DRITHSC.RENAME_PHRASE +DRITHSC.RENAME_THESAURUS +DRITHSC.TRUNC_THESAURUS +DRITHSC.UPDATE_TR +DRITHSD. +DRITHSD.DUMP_THESAURUS +DRITHSD.NEXT_DUMP_LINE +DRITHSL. +DRITHSL.ALLOCATE_IDS +DRITHSL.CREATE_PHRASE +DRITHSL.CREATE_THESAURUS +DRITHSL.DUMP_THESAURUS +DRITHSL.GET_THSID_BYNAME +DRITHSL.INSERT_BT +DRITHSL.INSERT_FPHRASE +DRITHSL.INSERT_PHRASE +DRITHSL.NEXT_DUMP_LINE +DRITHSL.UPDATE_PHRASE +DRITHSX. +DRITHSX.EXPAND +DRITHSX.EXPAND0 +DRITHSX.OUTPUT_STYLE +DRITHSX.SN +DRITHSX.TTT +DRIUTL. +DRIUTL.BYTESTR +DRIUTL.CHECKNUMLANGINDSLXSW +DRIUTL.CHECK_LANGUAGE +DRIUTL.GENID +DRIUTL.GET_CTX_DOC_POLSTEMS +DRIUTL.GET_DBID +DRIUTL.GET_DEFAULT_VALUE +DRIUTL.GET_HASH_AREA_SIZE +DRIUTL.GET_OBJ_ID +DRIUTL.GET_SHADOW_INDEX +DRIUTL.GET_SLAVE_ID +DRIUTL.GET_USER +DRIUTL.GET_USER_ID +DRIUTL.GET_USER_NAME +DRIUTL.IDXMEM_TO_NUMBER +DRIUTL.IS_DECIMAL_VALUE +DRIUTL.IS_OPS +DRIUTL.IS_SHADOW_INDEX +DRIUTL.KEYCOMP_OK +DRIUTL.LANG_TO_ABBR +DRIUTL.LOCK_INDEX +DRIUTL.LOCK_PARTITION +DRIUTL.MAKE_PFX +DRIUTL.MEM_TO_NUMBER +DRIUTL.NORMALIZEOBJECTNAME +DRIUTL.NUMSTR +DRIUTL.PARSE_OBJECT_NAME +DRIUTL.PARSE_SHADOW_INDEX +DRIUTL.PCTSTR +DRIUTL.PKEY_TOOLONG +DRIUTL.SET_HASH_AREA_SIZE +DRIUTL.SPLIT +DRIUTL.SPLIT_LIST +DRIUTL.SYNCMEM_TO_NUMBER +DRIUTL.VALIDATE_STORAGE +DRIUTL.VERIFY_NP_INDEX_TABLES +DRIVAL. +DRIVAL.VALIDATECTXRULEOPTIONS +DRIVAL.VALIDATE_ATTR +DRIVAL.VALIDATE_PREF +DRIVER +DRIVING_INCIDENT +DRIVING_SITE +DRIXMD. +DRIXMD.ADDSTAGEITAB +DRIXMD.ADD_AUTO_OPTIMIZE +DRIXMD.ALLOCATEDOCIDS +DRIXMD.ALLOCATEPARTID +DRIXMD.AUTOOPT_CRE_PIPE +DRIXMD.AUTOOPT_POP_TOKEN +DRIXMD.AUTOOPT_PUSH_TOKEN +DRIXMD.CHANGEINDEXOPTION +DRIXMD.CHECKACCESS +DRIXMD.CHECKINDEXESFOREXCHANGE +DRIXMD.CHECKINDEXFORORACON +DRIXMD.CHECKINDEXQUERYABLE +DRIXMD.CHECK_AUTO_OPTIMIZE +DRIXMD.CHKINDEXOPTION +DRIXMD.COMPAREINDEXOBJECTVALUESPREF +DRIXMD.COPYINDEXMDRIO +DRIXMD.COPYPARTMDRIO +DRIXMD.COPYPOLICY +DRIXMD.CREATEPARTITIONMD +DRIXMD.CREATEPOLICY +DRIXMD.CREATESQE +DRIXMD.DECREMENTDOCCNT +DRIXMD.DROPPARTITIONMD +DRIXMD.DROPPOLICY +DRIXMD.DROPSQE +DRIXMD.DROPUSERPOLICIES +DRIXMD.DROPUSERSQES +DRIXMD.EXCHANGEINDEXMD +DRIXMD.FASTGETINDEXID +DRIXMD.GETALLCDICOLUMNS +DRIXMD.GETALLINDEXOBJECTS +DRIXMD.GETALLPARTITIONIDS +DRIXMD.GETALLPARTITIONINFO +DRIXMD.GETALLPARTITIONNMS +DRIXMD.GETALLPARTITIONOPTS +DRIXMD.GETALLPARTITIONS +DRIXMD.GETALLSDATASECS +DRIXMD.GETBASETABLENAME +DRIXMD.GETDOCIDCOUNT +DRIXMD.GETFIELDFID +DRIXMD.GETINDEXID +DRIXMD.GETINDEXMD +DRIXMD.GETINDEXOBJECT +DRIXMD.GETINDEXPARTITION +DRIXMD.GETINDEXREC +DRIXMD.GETINDEXRECBYID +DRIXMD.GETINDEXSTATS +DRIXMD.GETINDEXSTATUS +DRIXMD.GETINDEXSTORAGE +DRIXMD.GETJOB +DRIXMD.GETMULTIBLOCKREADCOUNT +DRIXMD.GETMVFLAG +DRIXMD.GETNEXTID +DRIXMD.GETPARTITIONID +DRIXMD.GETPARTITIONREC +DRIXMD.GETPARTITIONRECBYID +DRIXMD.GETSLXMDATASECID +DRIXMD.GETSYNCATTR +DRIXMD.GETSYSPARAM +DRIXMD.IMPORTINGINDEX +DRIXMD.INCREMENTDOCCNT +DRIXMD.INDEXHASDTABLE +DRIXMD.INDEXHASETABLE +DRIXMD.INDEXHASFATABLES +DRIXMD.INDEXHASGTABLE +DRIXMD.INDEXHASMTABLE +DRIXMD.INDEXHASMVDATA +DRIXMD.INDEXHASOTABLE +DRIXMD.INDEXHASPENDINGROWS +DRIXMD.INDEXHASPTABLE +DRIXMD.INDEXHASSTABLE +DRIXMD.ISINDEXREADABLE +DRIXMD.ISSES +DRIXMD.NEXTINDEXCDI +DRIXMD.NEXTINDEXOBJECT +DRIXMD.NEXTINDEXVALUE +DRIXMD.OPENINDEXMDSCAN +DRIXMD.ORACONREWRITECHK +DRIXMD.PARTID_TO_PARTNAME +DRIXMD.PURGEKGL +DRIXMD.RECORDJOB +DRIXMD.REMOVESTAGEITAB +DRIXMD.REMOVE_AUTO_OPTIMIZE +DRIXMD.REMZONEFROMMD +DRIXMD.RENAMEINDEX +DRIXMD.RENAMEINDEXCOL +DRIXMD.RESETINDEXIDS +DRIXMD.RESET_AUTO_OPTIMIZE_STATUS +DRIXMD.RUN_AUTO_OPTIMIZE +DRIXMD.SELECTUSERANLDICTLOB +DRIXMD.SETACTIVEINDEX +DRIXMD.SETINDEXMD +DRIXMD.SETINDEXSTATUS +DRIXMD.SETSYNCATTR +DRIXMD.START_AUTO_OPTIMIZE +DRIXMD.STOP_AUTO_OPTIMIZE +DRIXMD.SUBSTRINGENABLED +DRIXMD.TXNALGETKEY +DRIXMD.TXNALSETKEY +DRIXMD.UPDATESDATA +DRI_MOVE_CTXSYS. +DRI_SUBLXV_LANG. +DRI_VERSION. +DRL_FILE_NUMBER +DRM_BENEFIT_ACCESS +DRM_BENEFIT_CR_ACCESS +DROPPABLE +DROPPED +DROPPED_SAMPLE_COUNT +DROPSCN +DROPTIME +DROP_SEGMENTS +DRUE. +DRUE.CLEAR_STACK +DRUE.ERROR +DRUE.GETMSG +DRUE.GET_ERROR_MESG +DRUE.GET_STACK +DRUE.GET_STACK1 +DRUE.GET_STACK_NOCLEAR +DRUE.POP +DRUE.PUSH +DRUE.PUSH_INTERNAL +DRUE.RAISE +DRUE.TEXT_ON_STACK +DRV0DDL. +DRV0DDL.GENERATE_SUBSTRINGS +DRV0DDL.GENERATE_SUBSTRINGS2 +DRVANL. +DRVANL.ADD_DICTIONARY +DRVANL.COPY_USER_ANL_DICT +DRVANL.DROP_DICTIONARY +DRVANL.REM_USER_ANL_DICT +DRVDDL. +DRVDDL.ADDDOCLEXERMDATATOKENS +DRVDDL.ADD_BIG_IO +DRVDDL.ADD_SEPARATE_OFFSETS +DRVDDL.ADD_STAGE_ITAB +DRVDDL.CDIUPDATE +DRVDDL.CURSORTOBITVECTOR +DRVDDL.FIELD_TO_MDATA +DRVDDL.IDX_ADD_SLX +DRVDDL.IDX_ADD_SW +DRVDDL.IDX_REM_SLX +DRVDDL.IDX_REM_SW +DRVDDL.INDEXCOLRENAME +DRVDDL.INDEXCREATE +DRVDDL.INDEXDROP +DRVDDL.INDEXMAPLANGUAGES +DRVDDL.INDEXMAPLANGUAGESDRIVER +DRVDDL.INDEXOPTIMIZE +DRVDDL.INDEXOPTIMIZEPARFN +DRVDDL.INDEXPARTREPLACE +DRVDDL.INDEXPARTRESUME +DRVDDL.INDEXRENAME +DRVDDL.INDEXREPLACE +DRVDDL.INDEXRESUME +DRVDDL.INDEXSYNC +DRVDDL.INDEXTRANSPORT +DRVDDL.INDEXTRUNCATE +DRVDDL.LOCKBASETABLE +DRVDDL.PARTCLEANUP +DRVDDL.PARTITIONCREATE +DRVDDL.PARTITIONEXCHANGE +DRVDDL.PARTITIONMERGE +DRVDDL.PARTITIONSPLIT +DRVDDL.PROCESSONLINEPENDING +DRVDDL.REMDOCLEXERMDATATOKENS +DRVDDL.REMOVE_BIG_IO +DRVDDL.REMOVE_STAGE_ITAB +DRVDDL.REPOPULATE_DOLLARN +DRVDDL.RIOCLEANUP +DRVDDL.SET_READ_MODE +DRVDDL.SPLITDOLLARI +DRVDDLC. +DRVDDLC.INDEXCOLRENAME +DRVDDLC.INDEXCREATE +DRVDDLC.INDEXDROP +DRVDDLC.INDEXRENAME +DRVDDLC.INDEXREPLACE +DRVDDLC.INDEXTRANSPORT +DRVDDLC.INDEXTRUNCATE +DRVDDLR. +DRVDDLR.INDEXCOLRENAME +DRVDDLR.INDEXCREATE +DRVDDLR.INDEXDROP +DRVDDLR.INDEXOPTIMIZE +DRVDDLR.INDEXRENAME +DRVDDLR.INDEXREPLACE +DRVDDLR.INDEXRESUME +DRVDDLR.INDEXSYNC +DRVDDLR.INDEXTRANSPORT +DRVDDLR.INDEXTRUNCATE +DRVDDLX. +DRVDDLX.INDEXCOLRENAME +DRVDDLX.INDEXCREATE +DRVDDLX.INDEXDROP +DRVDDLX.INDEXRENAME +DRVDDLX.INDEXREPLACE +DRVDDLX.INDEXRESUME +DRVDDLX.INDEXTRANSPORT +DRVDDLX.INDEXTRUNCATE +DRVDDLX.ISBINARYXMLCOLUMN +DRVDISP. +DRVDISP.EXECASOWN +DRVDISP.EXECASOWN_CLOB +DRVDISP.EXECASOWN_IN_CLOB +DRVDISP.EXECASOWN_IN_CLOB_RET +DRVDISP.EXECASOWN_IN_OUT_CLOBS +DRVDISP.EXECASOWN_RET +DRVDISP.EXECASOWN_RET1 +DRVDISP.EXECTRUST +DRVDISP.EXECTRUST_ARRAY +DRVDISP.EXECTRUST_RET +DRVDISP.EXECTRUST_RET1 +DRVDISP.TABLEFUNC +DRVDISP.TABLEFUNC_ASOWN +DRVDML. +DRVDML.ADDREMONEMDATA +DRVDML.ADDREMONESDATA +DRVDML.ADD_REM_MDATA +DRVDML.ADD_REM_SDATA +DRVDML.AUTO_SYNC_INDEX +DRVDML.CLEANDML +DRVDML.COM_SYNC_INDEX +DRVDML.CTXCAT_DML +DRVDML.DELETEPENDING +DRVDML.IDX_POPULATE_MODE +DRVDML.INS_DEL_MVDATA +DRVDML.LOCK_OPT_MVDATA +DRVDML.LOCK_OPT_REBUILD +DRVDML.MAINTAINKTAB +DRVDML.POPULATEPENDING +DRVDML.PROCESSDML +DRVDML.PROCESSWAITING +DRVDML.SETLOCKFAILED +DRVDML.UNLOCK_OPT_REBUILD +DRVDML.UPDATEMDATA +DRVDML.UPD_SDATA +DRVDOC. +DRVDOC.CONCORDANCE_OPTIONS +DRVDOC.FILTER_OPTIONS +DRVDOC.GET_ROWID +DRVDOC.GIST_OPTIONS +DRVDOC.HIGHLIGHT_OPTIONS +DRVDOC.HIGHLIGHT_REQUEST +DRVDOC.LANGUAGES_REQUEST +DRVDOC.LING_REQUEST +DRVDOC.MARKUP_OPTIONS +DRVDOC.NOUN_PHRASES_REQUEST +DRVDOC.PARTNAME_TO_PARTPOSITION +DRVDOC.PARTPOSITION_TO_PARTNAME +DRVDOC.PART_OF_SPEECH_REQUEST +DRVDOC.RESLOB_CHK +DRVDOC.RESTAB_CHK +DRVDOC.RID_TO_PARTNAME +DRVDOC.RID_TO_PARTPOSITION +DRVDOC.STEMS_REQUEST +DRVDOC.THEME_OPTIONS +DRVDOC.TOKEN_REQUEST +DRVIMR. +DRVIMR.ADD_BRW +DRVIMR.ADD_CLUSTER +DRVIMR.ADD_DOCCLS +DRVIMR.ADD_EXPLAIN +DRVIMR.ADD_FEATURE +DRVIMR.ADD_GIST +DRVIMR.ADD_GIST_TXT +DRVIMR.ADD_HIGHLIGHT +DRVIMR.ADD_HQF +DRVIMR.ADD_LANGUAGE +DRVIMR.ADD_NOUN_PHRASE +DRVIMR.ADD_POS +DRVIMR.ADD_QUERY +DRVIMR.ADD_STEM +DRVIMR.ADD_THEME +DRVIMR.ADD_TOKEN +DRVIMR.BLANKLN +DRVIMR.DIRECT_SET +DRVIMR.ENDREPORT +DRVIMR.FEATURE_COUNT +DRVIMR.GET_FEATURE +DRVIMR.GET_KWIC +DRVIMR.INITREPORT +DRVIMR.NEXT_DID +DRVIMR.RESET_FEATURE +DRVIMR.SET_KWIC +DRVIMR.START_DIDSCAN +DRVIMR.TITLE +DRVIMR.W +DRVIMR.WL +DRVLSB. +DRVLSB.ADD_ATTR_SECTION_C +DRVLSB.ADD_ATTR_SECTION_NC +DRVLSB.ADD_DICTIONARY_C +DRVLSB.ADD_DICTIONARY_NC +DRVLSB.ADD_FIELD_SECTION_C +DRVLSB.ADD_FIELD_SECTION_NC +DRVLSB.ADD_INDEX_C +DRVLSB.ADD_INDEX_NC +DRVLSB.ADD_MDATA +DRVLSB.ADD_MDATA_COLUMN_C +DRVLSB.ADD_MDATA_COLUMN_NC +DRVLSB.ADD_MDATA_SECTION_C +DRVLSB.ADD_MDATA_SECTION_NC +DRVLSB.ADD_MVDATA_SECTION_C +DRVLSB.ADD_MVDATA_SECTION_NC +DRVLSB.ADD_NDATA_SECTION_C +DRVLSB.ADD_NDATA_SECTION_NC +DRVLSB.ADD_SDATA +DRVLSB.ADD_SDATA_COLUMN_C +DRVLSB.ADD_SDATA_COLUMN_NC +DRVLSB.ADD_SDATA_SECTION_C +DRVLSB.ADD_SDATA_SECTION_NC +DRVLSB.ADD_SEC_GRP_ATTR_VAL_C +DRVLSB.ADD_SEC_GRP_ATTR_VAL_NC +DRVLSB.ADD_SPECIAL_SECTION_C +DRVLSB.ADD_SPECIAL_SECTION_NC +DRVLSB.ADD_STOPCLASS_C +DRVLSB.ADD_STOPCLASS_NC +DRVLSB.ADD_STOPTHEME_C +DRVLSB.ADD_STOPTHEME_NC +DRVLSB.ADD_STOPWORD_C +DRVLSB.ADD_STOPWORD_NC +DRVLSB.ADD_STOP_SECTION_C +DRVLSB.ADD_STOP_SECTION_NC +DRVLSB.ADD_SUB_LEXER_C +DRVLSB.ADD_SUB_LEXER_NC +DRVLSB.ADD_XML_SECTION_C +DRVLSB.ADD_XML_SECTION_NC +DRVLSB.ADD_ZONE_SECTION_C +DRVLSB.ADD_ZONE_SECTION_NC +DRVLSB.CREATE_INDEX_SET_C +DRVLSB.CREATE_INDEX_SET_NC +DRVLSB.CREATE_PREFERENCE_C +DRVLSB.CREATE_PREFERENCE_NC +DRVLSB.CREATE_SECTION_GROUP_C +DRVLSB.CREATE_SECTION_GROUP_NC +DRVLSB.CREATE_SHADOW_INDEX +DRVLSB.CREATE_STOPLIST_C +DRVLSB.CREATE_STOPLIST_NC +DRVLSB.DELETE_MVDATA_VALUES +DRVLSB.DROP_DICTIONARY_C +DRVLSB.DROP_DICTIONARY_NC +DRVLSB.DROP_PREFERENCE_C +DRVLSB.DROP_PREFERENCE_NC +DRVLSB.DROP_SECTION_GROUP_C +DRVLSB.DROP_SECTION_GROUP_NC +DRVLSB.DROP_SHADOW_INDEX +DRVLSB.DROP_STOPLIST_C +DRVLSB.DROP_STOPLIST_NC +DRVLSB.EXCHANGE_SHADOW_INDEX +DRVLSB.FILTER +DRVLSB.GET_PKENCODE +DRVLSB.GIST +DRVLSB.HIGHLIGHT +DRVLSB.HIGHLIGHT_CLOB_QUERY +DRVLSB.INSERT_MVDATA_VALUES +DRVLSB.MARKUP +DRVLSB.MARKUP_CLOB_QUERY +DRVLSB.OPTIMIZE_INDEX +DRVLSB.PK_EXISTS +DRVLSB.POPULATE_PENDING +DRVLSB.RECREATE_INDEX_ONLINE +DRVLSB.REMOVE_INDEX_C +DRVLSB.REMOVE_INDEX_NC +DRVLSB.REMOVE_MDATA +DRVLSB.REMOVE_SDATA +DRVLSB.REMOVE_SECTION_C +DRVLSB.REMOVE_SECTION_NC +DRVLSB.REMOVE_SUB_LEXER_C +DRVLSB.REMOVE_SUB_LEXER_NC +DRVLSB.SET_ATTRIBUTE_C +DRVLSB.SET_ATTRIBUTE_NC +DRVLSB.SET_SECTION_ATTRIBUTE_C +DRVLSB.SET_SECTION_ATTRIBUTE_NC +DRVLSB.SET_SEC_GRP_ATTR_C +DRVLSB.SET_SEC_GRP_ATTR_NC +DRVLSB.SYNC_INDEX +DRVLSB.THEMES +DRVLSB.TOKENS +DRVLSB.UNSET_ATTRIBUTE_C +DRVLSB.UNSET_ATTRIBUTE_NC +DRVLSB.UNSET_SECTION_ATTRIBUTE_C +DRVLSB.UNSET_SECTION_ATTRIBUTE_NC +DRVLSB.UPDATE_MVDATA_SET +DRVLSB.UPDATE_SDATA +DRVLSB.UPDATE_SUB_LEXER_C +DRVLSB.UPDATE_SUB_LEXER_NC +DRVODM. +DRVODM.FEATURE_EXPLAIN +DRVODM.FEATURE_PREP +DRVODM.FEATURE_PREP_NC +DRVODM.FI2TTAB +DRVODM.FVSTAB +DRVODM.GET_FEATURES +DRVODM.GET_SUGGESTIONS +DRVODM.ODMKTRAINSET +DRVODM.ODMTRAINSET +DRVODM.ODM_DRPMODEL +DRVODM.ODM_GENMODEL +DRVODM.ODM_READKMEANMODEL +DRVODM.SVM_TRAIN +DRVPARX. +DRVPARX.CREATESUBLEXTOKENS +DRVPARX.FILTERCACHEGETSTATS +DRVPARX.GETFILTERCACHEENTRIES +DRVPARX.GETFILTERCACHEHITS +DRVPARX.GETFILTERCACHEREQUESTS +DRVPARX.GETFILTERCACHESIZE +DRVPARX.INDEXMAPDOCUMENTS +DRVPARX.INDEXOPTIMIZEPARFN +DRVPARX.PARALLELPOPUINDEX +DRVPARX.SETFILTERCACHEENTRIES +DRVPARX.SETFILTERCACHEHITS +DRVPARX.SETFILTERCACHEREQUESTS +DRVPARX.SETFILTERCACHESIZE +DRVPARX.TRACEGETTRACE +DRVRIO. +DRVRIO.CREATE_SHADOW_INDEX +DRVRIO.CREATE_SHADOW_PART +DRVRIO.CREATE_SHADOW_PARTSMD +DRVRIO.EXCHANGE_SHADOW_INDEX +DRVRIO.EXCHANGE_SHADOW_PART +DRVRIO.SWAP_SHADOW +DRVTMT. +DRVTMT.CLUSTER_TAB +DRVTMT.DOCCLS_TAB +DRVTMT.MODEL_TAB +DRVTMT.NOEX_TABNAME +DRVTMT.VERIFY_MODELTAB +DRVTMT.VERIFY_TRAINCAT +DRVTMT.VERIFY_TRAINDOC +DRVUTL. +DRVUTL.CHECK_BASE_TABLE +DRVUTL.CLEARINVOKER +DRVUTL.CURRENTUSERID +DRVUTL.GETINVOKER +DRVUTL.GETINVOKERID +DRVUTL.GET_ORA_EVENT_LEVEL +DRVUTL.ISDGROLLINGUPGRADE +DRVUTL.PROCEDURALLOGLEVEL +DRVUTL.SETINVOKER +DRVUTL.SET_ORA_EVENT_LEVEL +DRVUTL.VALIDATE_IXS_COLLIST +DRVUTL.VALIDATE_IXS_COLUMNS +DRVUTL.WRITE_TO_LOG +DRVXMD. +DRVXMD.ALLOCATEDOCIDS +DRVXMD.AUTOOPT_CLO +DRVXMD.AUTOOPT_PREP +DRVXMD.AUTOOPT_PUSH_TOKEN +DRVXMD.CHECK_FILE_ACCESS_ROLE +DRVXMD.CHKINDEXOPTION +DRVXMD.CTX_SQE_TBL_FUNC +DRVXMD.DECREMENTDOCCNT +DRVXMD.GETBASETABLENAME +DRVXMD.GETDOCIDCOUNT +DRVXMD.GETFIELDSECNAME +DRVXMD.GETINDEXMD +DRVXMD.GETINDEXPARTITION +DRVXMD.GETINDEXSTATS +DRVXMD.GETMVFLAG +DRVXMD.GETNEXTID +DRVXMD.GETOBJDEFAULT +DRVXMD.GETPREFCLAOBJ +DRVXMD.GETSECDATATYPE +DRVXMD.GETSLXMDATASECID +DRVXMD.GET_FUNCTIONAL_CACHE_SIZE +DRVXMD.INCREMENTDOCCNT +DRVXMD.INDEXHASGTABLE +DRVXMD.NEXTINDEXCDI +DRVXMD.NEXTINDEXOBJECT +DRVXMD.NEXTINDEXVALUE +DRVXMD.NEXTPREFVALUE +DRVXMD.OPENINDEXMDSCAN +DRVXMD.OPENPREFVALUE +DRVXMD.OPTGETSTATE +DRVXMD.OPTGETTIMER +DRVXMD.OPTGETTYPE +DRVXMD.OPTSETSTATE +DRVXMD.OPTSTARTTIMER +DRVXMD.PROCESSN +DRVXMD.RECORDINDEXERROR +DRVXMD.RECORDOPTTOKENERROR +DRVXMD.SELECTUSERANLDICTLOB +DRVXMD.SET_REVERSE_DOCID_SWITCH +DRVXMD.SUBSTRINGENABLED +DRVXMD.TXNALGETKEY +DRVXMD.TXNALSETKEY +DRVXTAB. +DRVXTAB.ADD_OFFSETS_COLUMN +DRVXTAB.ADJUSTTTYPE +DRVXTAB.ALTERDOLLARITTYPE +DRVXTAB.CREATE_A_TABLE +DRVXTAB.CREATE_F_TABLE +DRVXTAB.CREATE_G_TABLE +DRVXTAB.CREATE_INDEX_INDEXES +DRVXTAB.CREATE_INDEX_TABLES +DRVXTAB.CREATE_S_TABLE +DRVXTAB.DROP_FA_TABLES +DRVXTAB.DROP_G_TABLE +DRVXTAB.DROP_INDEX_TABLES +DRVXTAB.EXCHANGE_INDEX_TABLES +DRVXTAB.GET_CONSTRAINT_NAME +DRVXTAB.GET_CREATE_SNIDX_SQL +DRVXTAB.GET_CREATE_SN_SQL +DRVXTAB.GET_CREATE_SQL +DRVXTAB.GET_OBJECT_NAME +DRVXTAB.GET_OBJECT_PREFIX +DRVXTAB.PART_CREATE_S_TABLES +DRVXTAB.PART_EVENTS_OFF +DRVXTAB.PART_EVENTS_ON +DRVXTAB.POPULATE_PTABLE +DRVXTAB.RENAME_INDEX_TABLES +DRVXTAB.SWAP_INDEX_TEMP_TABLES +DRVXTAB.TRUNC_INDEX_TABLES +DRVXTABC. +DRVXTABC.CREATE_INDEXES +DRVXTABC.CREATE_TABLES +DRVXTABC.DROP_TABLES +DRVXTABC.POST_TRANSPORT +DRVXTABC.RECREATE_TRIGGER +DRVXTABC.RENAME_TABLES +DRVXTABC.TRUNC_TABLES +DRVXTABR. +DRVXTABR.CREATE_INDEXES +DRVXTABR.CREATE_TABLES +DRVXTABR.DROP_TABLES +DRVXTABR.RENAME_TABLES +DRVXTABR.TRUNC_TABLES +DRVXTABX. +DRVXTABX.CREATE_INDEXES +DRVXTABX.CREATE_TABLES +DRVXTABX.DROP_TABLES +DRVXTABX.RENAME_TABLES +DRVXTABX.TRUNC_TABLES +DR_DEF. +DSCN-B +DSCN-W +DSCN_BASE +DSCN_WRAP +DST_DATABASE_NAME +DST_QUEUE_NAME +DST_QUEUE_SCHEMA +DST_UPGRADE_INSERT_CONV +DTIME +DTP +DUAL +DUMMY +DUPID +DUPLICATE +DUP_JOIN_KEY_COUNT +DUP_POSITION +DURATION +DURATION_SECS +DVLANG. +DV_ACTION_CODE +DV_ACTION_NAME +DV_ACTION_OBJECT_NAME +DV_COMMENT +DV_DATABASE_NAME. +DV_DICT_OBJ_NAME. +DV_DICT_OBJ_OWNER. +DV_DICT_OBJ_TYPE. +DV_EXTENDED_ACTION_CODE +DV_FACTOR_CONTEXT +DV_GRANTEE +DV_INSTANCE_NUM. +DV_JOB_INVOKER. +DV_JOB_OWNER. +DV_LOGIN_USER. +DV_OBJECT_STATUS +DV_RETURN_CODE +DV_RULE_SET_NAME +DV_SQL_TEXT. +DV_SYSEVENT. +DYNAMIC +DYNAMIC_SAMPLING +DYNAMIC_SAMPLING_EST_CDN +D_OBJ_TYPE +D_SUB_OBJ_NAME1 +D_SUB_OBJ_NAME2 +D_SUB_OBJ_NAME3 +D_SUB_OBJ_NAME4 +D_TOP_OBJ_NAME +EARLIEST_SCN +ECID +ECONTEXT_ID +EDITION +EDITIONABLE +EDITIONABLE_TYPE +EDITIONING_VIEW +EDITIONS_ENABLED +EDITION_ID +EDITION_MISMATCH +EDITION_NAME +EFFECTIVE_BYTES_PER_SECOND +ELAPSEDPERCALL +ELAPSED_APPLY_TIME +ELAPSED_CAPTURE_TIME +ELAPSED_DEQUEUE_TIME +ELAPSED_ENQUEUE_TIME +ELAPSED_IDLE_TIME +ELAPSED_LCR_TIME +ELAPSED_PAUSE_TIME +ELAPSED_PICKLE_TIME +ELAPSED_PROPAGATION_TIME +ELAPSED_REDO_WAIT_TIME +ELAPSED_RULE_EVALUATION_TIME +ELAPSED_RULE_TIME +ELAPSED_SCHEDULE_TIME +ELAPSED_SECONDS +ELAPSED_SEND_TIME +ELAPSED_SPILL_TIME +ELAPSED_TIME +ELAPSED_TIME_DELTA +ELAPSED_TIME_DIFF +ELAPSED_TIME_TOTAL +ELAPSED_TRANSFORMATION_TIME +ELAPSED_UNPICKLE_TIME +ELEMENT +ELEMENT_ID +ELEMENT_NAME +ELEMENT_SUBSTITUTABLE +ELEM_CFGID +ELEM_DESCR +ELEM_IDX +ELEM_NAME +ELEM_NSUBELEM +ELEM_OFFSET +ELEM_SIZE +ELEM_STORAGE +ELEM_TYPE +ELEM_TYPE_MOD +ELEM_TYPE_NAME +ELEM_TYPE_OWNER +ELEM_TYPE_PACKAGE +ELIMINATE_JOIN +ELIMINATE_OBY +ELIM_GROUPBY +ELOCATIONSETJVMHEAPSIZE. +ELOCATION_EDGE_LINK_LEVEL. +EMON# +EMON_ID +EMPTY_BLOCKS +ENABLE +ENABLED +ENABLED_BY_SCHEDULER +ENABLED_OPT +ENABLED_STATUS +ENABLED_THREAD_MAP +ENABLEGEORASTER. +ENABLE_CHANGE# +ENABLE_PARALLEL_DML +ENABLE_TIME +ENCRYPT +ENCRYPTED +ENCRYPTEDKEY +ENCRYPTEDTS +ENCRYPTION +ENCRYPTIONALG +ENCRYPTION_ALG +ENCRYPT_IN_BACKUP +ENCRYTPEDKEY +ENDIAN +ENDIANNESS +ENDIAN_FORMAT +ENDOFFSET +ENDPOINT_ACTUAL_VALUE +ENDPOINT_ACTUAL_VALUE_RAW +ENDPOINT_NUMBER +ENDPOINT_REPEAT_COUNT +ENDPOINT_VALUE +END_DATE +END_DBA +END_ID +END_INTERVAL_TIME +END_MONITORING +END_OF_FETCH_COUNT +END_OF_FETCH_COUNT_DELTA +END_OF_FETCH_COUNT_TOTAL +END_OF_REDO +END_OF_REDO_TYPE +END_RESETLOGS_SCN +END_RESETLOGS_TIME +END_ROWID +END_SCN +END_SNAP_ID +END_SNAP_TIME +END_TIME +END_TS +ENGINE_STATUS +ENQIDX +ENQUEUED_DELAY_MSGS +ENQUEUED_EXPIRY_MSGS +ENQUEUED_MSGS +ENQUEUE_CPU_TIME +ENQUEUE_ENABLED +ENQUEUE_MESSAGE_CREATE_TIME +ENQUEUE_MESSAGE_NUMBER +ENQUEUE_TIME +ENQUEUE_TRANSACTIONS +ENTITY_ID +ENTITY_SEQUENCE +ENTRYID +ENTRY_ID +ENTRY_NUMBER +ENV +ENV_HASH +EQ_NAME +EQ_TYPE +ERRNUM +ERROR +ERROR# +ERROR1 +ERROR2 +ERRORS +ERROR_ARG1 +ERROR_ARG10 +ERROR_ARG11 +ERROR_ARG12 +ERROR_ARG2 +ERROR_ARG3 +ERROR_ARG4 +ERROR_ARG5 +ERROR_ARG6 +ERROR_ARG7 +ERROR_ARG8 +ERROR_ARG9 +ERROR_CNT +ERROR_CODE +ERROR_COUNT +ERROR_CREATION +ERROR_CREATION_TIME +ERROR_DATE +ERROR_FACILITY +ERROR_HANDLER +ERROR_INSTANCE_ID +ERROR_INSTANCE_SEQUENCE +ERROR_MESSAGE +ERROR_MSG +ERROR_NUMBER +ERROR_PARAMETER1 +ERROR_PARAMETER2 +ERROR_PARAMETER3 +ERROR_PARAMETER4 +ERROR_PARAMETER5 +ERROR_POSITION +ERROR_SIZE +ERROR_TYPE +ERRREQUESTSPERSEC +ERR_NO +ERR_NUMBER +ERR_TXT +ESC +ESCALATED_HANG +ESTD_BUFFER_CACHE_SIZE +ESTD_CACHE_WRITES +ESTD_CACHE_WRITE_FACTOR +ESTD_CLUSTER_AVAILABLE_TIME +ESTD_CLUSTER_READS +ESTD_CLUSTER_READ_TIME +ESTD_DB_TIME +ESTD_DB_TIME_FACTOR +ESTD_EXTRA_BYTES_RW +ESTD_LC_LOAD_TIME +ESTD_LC_LOAD_TIME_FACTOR +ESTD_LC_MEMORY_OBJECTS +ESTD_LC_MEMORY_OBJECT_HITS +ESTD_LC_SIZE +ESTD_LC_TIME_SAVED +ESTD_LC_TIME_SAVED_FACTOR +ESTD_MULTIPASSES_EXECUTIONS +ESTD_ONEPASS_EXECUTIONS +ESTD_OPTIMAL_EXECUTIONS +ESTD_OVERALLOC_COUNT +ESTD_PCT_OF_DB_TIME_FOR_READS +ESTD_PGA_CACHE_HIT_PERCENTAGE +ESTD_PHYSICAL_READS +ESTD_PHYSICAL_READ_FACTOR +ESTD_PHYSICAL_READ_TIME +ESTD_SHARED_POOL_SIZE +ESTD_SPILL_COUNT +ESTD_SPILL_TIME +ESTD_TIME +ESTD_TOTAL_EXECUTIONS +ESTD_TOTAL_IOS +ESTD_TOTAL_IO_FACTOR +ESTD_TOTAL_WRITES +ESTD_TOTAL_WRITE_FACTOR +ESTD_UNSPILL_COUNT +ESTD_UNSPILL_TIME +ESTIMATE +ESTIMATED_COST +ESTIMATED_CPU_TIME +ESTIMATED_DATA_LOSS +ESTIMATED_DOP +ESTIMATED_DURATION +ESTIMATED_EXECUTION_LIMIT_HIT +ESTIMATED_EXECUTION_TIME +ESTIMATED_FLASHBACK_SIZE +ESTIMATED_IO_RATE +ESTIMATED_MTTR +ESTIMATED_ONEPASS_SIZE +ESTIMATED_OPTIMAL_SIZE +ESTIMATED_REPAIR_TIME +ESTIMATED_TEMP +ESTIMATED_UNDO_RATE +ESTIMATED_WEIGHT +ESTIMATE_TYPE +EST_MINUTES +EST_RATE +EST_REPAIR_TIME +EST_WORK +ET_ATTR_PREFIX +EVALUATE_RULE_SET. +EVALUATIONS +EVALUATION_CONTEXT_COMMENT +EVALUATION_CONTEXT_NAME +EVALUATION_CONTEXT_OBJECT_ID +EVALUATION_CONTEXT_OWNER +EVALUATION_EDITION +EVALUATION_FUNCTION +EVALUATION_FUNCTION_CALLS +EVALUATION_INTERVAL +EVENT +EVENT# +EVENT. +EVENT.SET +EVENT.SETDEFAULT +EVENT.SET_C +EVENTID +EVENT_CONDITION +EVENT_DATE +EVENT_FLAG +EVENT_ID +EVENT_NAME +EVENT_QUEUE_AGENT +EVENT_QUEUE_NAME +EVENT_QUEUE_OWNER +EVENT_RULE +EVENT_SCHEDULE_NAME +EVENT_SCHEDULE_OWNER +EVENT_TIME +EVENT_TIMESTAMP +EVICTDC +EXACT_MATCHING_SIGNATURE +EXCEPTION_CLASS +EXCEPTION_ID +EXCEPTION_INDEX +EXCLUDE +EXCLUDED_OBJECT +EXCLUDED_SCHEMA +EXCLUDED_USER +EXE +EXECUTED +EXECUTE_END_TIME +EXECUTE_EVENT +EXECUTE_START_TIME +EXECUTIONS +EXECUTIONS_DELTA +EXECUTIONS_TOTAL +EXECUTION_CONTEXT_ID +EXECUTION_CONTEXT_SEQUENCE +EXECUTION_COUNT +EXECUTION_DESCRIPTION +EXECUTION_END +EXECUTION_ID +EXECUTION_LAST_MODIFIED +EXECUTION_MODE +EXECUTION_NAME +EXECUTION_ORIGIN +EXECUTION_SEQUENCE +EXECUTION_START +EXECUTION_TYPE +EXECUTION_TYPE# +EXECUTION_WAITERS +EXEC_INFO +EXEC_STATUS +EXEC_TIME +EXISTENT +EXPAND_GSET_TO_UNION +EXPAND_TABLE +EXPBLKRELCNT +EXPBLKREUCNT +EXPECTED_ERROR# +EXPECTED_ERROR_MESSAGE +EXPECTED_ROW_COUNT +EXPECTED_SIZE +EXPIRATION +EXPIRATION_AFTER_GRACE +EXPIRED +EXPIREDBLKS +EXPIRED_MSGS +EXPIRY_DATE +EXPLAIN_PLAN_CURSOR +EXPORT_REQUIRED +EXPORT_SCN +EXPORT_TIME +EXPORT_VERSION +EXPRESSION +EXPR_CORR_CHECK +EXPSTEALCNT +EXP_TYPE +EXP_VERSION +EXTCNT +EXTENDED_TIMESTAMP +EXTENDS +EXTENSION +EXTENSION_ID +EXTENSION_NAME +EXTENSION_STATUS +EXTENTS +EXTENTS_CACHED +EXTENTS_COALESCED +EXTENTS_USED +EXTENT_CNT +EXTENT_HITS +EXTENT_ID +EXTENT_MANAGEMENT +EXTENT_SIZE +EXTERNAL_ATTR_NAME +EXTERNAL_COLUMN_NAME +EXTERNAL_FILE +EXTERNAL_NAME +EXTERNAL_SOURCE +EXTERNAL_USERID +EXTERNAL_VAR_NAME +EXTRACT_NAME +EXT_ADDR +EXT_ELEM_OFF +EXT_FILE_OFF +EXT_LEN +EXT_NAME +EXT_NUM +EXT_SIZE +EXT_TO_OBJ +EXT_TYPE +EX_OR_INCLUDE +F$AUTHENTICATION_METHOD. +F$CLIENT_IP. +F$DATABASE_DOMAIN. +F$DATABASE_HOSTNAME. +F$DATABASE_INSTANCE. +F$DATABASE_IP. +F$DATABASE_NAME. +F$DOMAIN. +F$ENTERPRISE_IDENTITY. +F$IDENTIFICATION_TYPE. +F$LANG. +F$LANGUAGE. +F$MACHINE. +F$NETWORK_PROTOCOL. +F$PROXY_ENTERPRISE_IDENTITY. +F$PROXY_USER. +F$SESSION_USER. +FACILITY +FACT +FACTORIZE_JOIN +FACTOR_LINK$_PRIV. +FACTOR_LINK$_PRIV.CREATE_ROW +FACTOR_LINK$_PRIV.DELETE_BY_CHILD_FACTOR_ID#_ +FACTOR_LINK$_PRIV.DELETE_BY_PARENT_FACTOR_ID#_ +FACTOR_LINK$_PRIV.DELETE_ROW +FACTOR_LINK$_PRIV.READ_BY_CHILD_FACTOR_ID#_ +FACTOR_LINK$_PRIV.READ_BY_PARENT_FACTOR_ID#_ +FACTOR_LINK$_PRIV.READ_ROW +FACTOR_LINK$_PRIV.UPDATE_ROW +FACTOR_TYPE$_PRIV. +FACTOR_TYPE$_PRIV.CREATE_ROW +FACTOR_TYPE$_PRIV.DELETE_ROW +FACTOR_TYPE$_PRIV.READ_ROW +FACTOR_TYPE$_PRIV.UPDATE_ROW +FACT_NAME +FACT_OWNER +FACT_TABLE +FAILED_LOGINS +FAILED_OVER +FAILED_REQ# +FAILGROUP +FAILGROUP_TYPE +FAILOVER_DELAY +FAILOVER_METHOD +FAILOVER_RETRIES +FAILOVER_TYPE +FAILURE +FAILURES +FAILURE_COUNT +FAILURE_ID +FAILURE_REASON +FAIL_BLOCK +FAIL_DATE +FAIL_RESULTS +FAIL_SEQUENCE +FAIL_TIME +FAIRNESS_CLEARS +FAIRNESS_DOWN_CONVERTS +FAL +FAMILY +FASTGETS +FAST_REFRESHABLE +FAST_START_IO_TARGET_REDO_BLKS +FATAL_BACKGROUND +FBK +FBTSCAN +FCOUNT +FDG_COUNT +FDG_ID +FDG_SET_ID +FDS_CLASS_ID +FDS_INST_ID +FEATURE +FEATURE_INFO +FEATURE_NAME +FEATURE_USAGE. +FETCHES +FETCHES_DELTA +FETCHES_TOTAL +FETCH_ILABEL. +FGA_POLICY_NAME +FIELDS +FIELD_CLASS +FIELD_COUNT +FIELD_INDEX +FIELD_LENGTH +FIELD_NAME +FIELD_SEQ# +FIELD_TYPE +FILE# +FILEHANDLE +FILEID +FILENAME +FILENUM +FILENUMBER +FILESIZE +FILESIZE_DISPLAY +FILETYPE +FILETYPE_ID +FILETYPE_KEY +FILETYPE_NAME +FILE_BLOCK_SIZE +FILE_CFGID +FILE_DIRECTORY +FILE_GROUP_NAME +FILE_GROUP_OWNER +FILE_ID +FILE_ID_MD +FILE_INCARNATION +FILE_MAP_IDX +FILE_MAXSIZE +FILE_NAME +FILE_NEXTS +FILE_NO +FILE_NUMBER +FILE_OFFSET +FILE_PATH +FILE_SIZE +FILE_SIZE_BLKS +FILE_SIZE_COPY +FILE_SIZE_MD +FILE_SPEC +FILE_STATE +FILE_STATUS +FILE_STRUCTURE +FILE_TIMESTAMP +FILE_TIMESTAMP_COPY +FILE_TIMESTAMP_MD +FILE_TYPE +FILE_WATCHER_NAME +FILE_WATCHER_OWNER +FILTERED +FILTERED_SCN +FILTERS_USED +FILTER_COLUMNS +FILTER_CONDITION +FILTER_ID +FILTER_NAME +FILTER_PREDICATES +FILTER_SET_NAME +FINAL +FINAL_BLOCKING_INSTANCE +FINAL_BLOCKING_SESSION +FINAL_BLOCKING_SESSION_STATUS +FINAL_SIZE +FINDINGS +FINDING_ID +FINDING_NAME +FINISH_TIME +FIRE_APPLY_TRIGGER +FIRE_ONCE +FIRSTINC_TIME +FIRSTREAD_EVENT +FIRST_ACTIVITY_TIME +FIRST_CHANGE# +FIRST_CHANGE_TIME +FIRST_DB_REPORT_TIME +FIRST_EM_REPORT_TIME +FIRST_HIT_EVALUATIONS +FIRST_INCIDENT +FIRST_INDEX +FIRST_LCR_TIME +FIRST_LOAD_TIME +FIRST_LOG_UPDATE_ENTRY +FIRST_MESSAGE_CREATE_TIME +FIRST_MESSAGE_NUMBER +FIRST_MESSAGE_POSITION +FIRST_MESSAGE_TIME +FIRST_NONLOGGED_SCN +FIRST_NONLOGGED_TIME +FIRST_POSITION +FIRST_REFRESH_TIME +FIRST_REPORT_TIME +FIRST_ROWS +FIRST_SCN +FIRST_TIME +FIRST_UPDATE_LOG_SCN +FIRST_USAGE_DATE +FIXED +FIXED_DATA_LENGTH +FIXED_SIZE +FIXED_TABLE_SEQUENCE +FIXED_TIME +FIXWRITE_TIME +FLAG +FLAGS +FLASHBACK_ARCHIVE# +FLASHBACK_ARCHIVE_MISMATCH +FLASHBACK_ARCHIVE_NAME +FLASHBACK_CURSOR +FLASHBACK_DATA +FLASHBACK_DATABASE_ALLOWED +FLASHBACK_ON +FLASHBACK_SCN +FLASHBACK_SIZE +FLASHBACK_TABLE_MISMATCH +FLASHFILE# +FLASH_BYTES +FLASH_CACHE +FLASH_DISK_TYPE +FLASH_REQUESTS +FLAVOR_ID +FLOOD_CONTROLLED +FLOOD_CONTROL_STR +FLOW_CONTROL +FLUSH +FLUSH1 +FLUSH10 +FLUSH100 +FLUSH1000 +FLUSH10000 +FLUSHES +FLUSHES_QUEUED +FLUSH_ELAPSED +FLUSH_MAX_TIME +FLUSH_QUEUE_FULL +FMRREG_COUNT +FNAME +FOLDER7_TAB$XD. +FORCE +FORCED_READS +FORCED_WRITES +FORCE_FULL_DB_CACHING +FORCE_HARD_PARSE +FORCE_LOGGING +FORCE_MATCHING +FORCE_MATCHING_SIGNATURE +FORCE_NOLOGGING +FORCE_TIME +FORCE_XML_QUERY_REWRITE +FOREIGN_CREATION_CHANGE# +FOREIGN_CREATION_TIME +FOREIGN_DBID +FOREIGN_KEY +FOREIGN_KEY_TYPE +FOREIGN_SQL_SYNTAX +FORMAT +FORMATID +FORWARD_BLOCK +FORWARD_BLOCK_DBLINK +FOR_XTTS +FREE +FREED_EXTENTS +FREELISTS +FREELIST_GROUPS +FREENESS +FREEPOOLS +FREEZE_TIME +FREE_BLOCKS +FREE_BUFFER_INSPECTED +FREE_BUFFER_WAIT +FREE_COUNT +FREE_EXTENTS +FREE_GC_ELEMENTS +FREE_LOCK_ELEMENTS +FREE_MB +FREE_REQUESTS +FREE_SPACE +FREQUENCY +FRESHNESS +FRESHNESS_DATE +FRESHNESS_SCN +FROM_ADDRESS +FROM_CLAUSE +FROM_COLUMN_NAME +FROM_HASH +FROM_SCHEMA_NAME +FROM_TABLE_NAME +FROM_TYPE +FROM_VAL +FROZEN +FR_OPERATIONS +FSNAME +FS_FAILOVER_CURRENT_TARGET +FS_FAILOVER_OBSERVER_HOST +FS_FAILOVER_OBSERVER_PRESENT +FS_FAILOVER_STATUS +FS_FAILOVER_THRESHOLD +FS_NAME +FTPURITYPE.CREATEFTPURI +FTPURITYPE.FTPURITYPE +FTPURITYPE.GETBLOB +FTPURITYPE.GETCLOB +FTPURITYPE.GETCONTENTTYPE +FTPURITYPE.GETEXTERNALURL +FTPURITYPE.GETURL +FTPURITYPE.GETXML +FULL +FULLREFRESHTIM +FULLY_BACKED_UP +FULL_HASH_VALUE +FULL_INSTANTIATION +FULL_NAME +FULL_OUTER_JOIN_TO_OUTER +FULL_PLAN_HASH_VALUE +FULL_PROPERTY_VALUE +FULL_SCAN +FULL_SIZE +FUNC +FUNCIDX_STATUS +FUNCSTATS.ODCIGETINTERFACES +FUNCSTATS.ODCISTATSCOLLECT +FUNCSTATS.ODCISTATSDELETE +FUNCSTATS.ODCISTATSFUNCTIONCOST +FUNCSTATS.ODCISTATSINDEXCOST +FUNCSTATS.ODCISTATSSELECTIVITY +FUNCTION +FUNCTIONALITY +FUNCTION_ID +FUNCTION_NAME +FUNC_ID +FUTURE_PRIMARY +FUZZY +GAP_DONE +GAP_NEXT_SCN +GAP_NEXT_TIME +GAP_RET +GAP_RET2 +GAP_SEQNO +GAP_STATUS +GATHER_OPTIMIZER_STATISTICS +GATHER_PLAN_STATISTICS +GBY_CONC_ROLLUP +GBY_PUSHDOWN +GCPERREQUEST +GCWAITPERREQUEST +GC_BUFFER_BUSY_DELTA +GC_BUFFER_BUSY_TOTAL +GC_CR_BLOCKS_RECEIVED_DELTA +GC_CR_BLOCKS_RECEIVED_TOTAL +GC_CR_BLOCKS_SERVED_DELTA +GC_CR_BLOCKS_SERVED_TOTAL +GC_CU_BLOCKS_RECEIVED_DELTA +GC_CU_BLOCKS_RECEIVED_TOTAL +GC_CU_BLOCKS_SERVED_DELTA +GC_CU_BLOCKS_SERVED_TOTAL +GC_ELEMENT_ADDR +GC_ELEMENT_NAME +GC_MASTERING_POLICY +GENCONNECTIONINTERFACE. +GENCONNECTIONINTERFACE.CLOSE +GENCONNECTIONINTERFACE.EVALUATEBOOLEANEXPRESSION +GENCONNECTIONINTERFACE.EVALUATEDATE2EXPRESSION +GENCONNECTIONINTERFACE.EVALUATEDATEEXPRESSION +GENCONNECTIONINTERFACE.EVALUATEDECIMALEXPRESSION +GENCONNECTIONINTERFACE.EVALUATEINTEGEREXPRESSION +GENCONNECTIONINTERFACE.EVALUATESHORTDECIMALEXPRESSION +GENCONNECTIONINTERFACE.EVALUATESHORTINTEGEREXPRESSION +GENCONNECTIONINTERFACE.EVALUATESTRINGEXPRESSION +GENCONNECTIONINTERFACE.EVALUATESTRINGLISTEXPRESSION +GENCONNECTIONINTERFACE.EXECUTECOMMAND +GENCONNECTIONINTERFACE.GETCONNECTIONSTATISTICS +GENCONNECTIONINTERFACE.GETDEFAULTDATABASE +GENCONNECTIONINTERFACE.OPENDATABASE +GENCURSORMANAGERINTERFACE. +GENCURSORMANAGERINTERFACE.CLOSE +GENCURSORMANAGERINTERFACE.FETCH2BLOCKS +GENCURSORMANAGERINTERFACE.FETCH2INITIALBLOCKS +GENCURSORMANAGERINTERFACE.FETCH3BLOCKS +GENCURSORMANAGERINTERFACE.FETCH3INITIALBLOCKS +GENCURSORMANAGERINTERFACE.FETCHBLOCKS +GENCURSORMANAGERINTERFACE.FETCHINITIALBLOCKS +GENCURSORMANAGERINTERFACE.GENERATESQL +GENCURSORMANAGERINTERFACE.GETGENERATIONINFO +GENCURSORMANAGERINTERFACE.GETINTERNALID +GENCURSORMANAGERINTERFACE.UPDATESPECIFICATION +GENDATABASEINTERFACE. +GENDATAPROVIDERINTERFACE. +GENDATAPROVIDERINTERFACE.CLOSE +GENDATAPROVIDERINTERFACE.CREATEDFNMGRWITHNOARGS +GENDATAPROVIDERINTERFACE.EVALUATEBOOLEANEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEDATE2EXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEDATEEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEDECIMALEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEINTEGEREXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESHORTDECIMALEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESHORTINTEGEREXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESTRINGEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESTRINGLISTEXPRESSION +GENDATAPROVIDERINTERFACE.EXECUTECOMMAND +GENDATAPROVIDERINTERFACE.GENERIC +GENDATAPROVIDERINTERFACE.GETCONNECTIONSTATISTICS +GENDATAPROVIDERINTERFACE.GETDEFAULTDATABASE +GENDATAPROVIDERINTERFACE.OPENDATABASE +GENDATATYPEIDCONSTANTS. +GENDEFINITIONMANAGERINTERFACE. +GENDEFINITIONMANAGERINTERFACE.CLOSE +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS2 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS3 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS4 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS5 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS6 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRWTHINPUTTYPES +GENDEFINITIONMANAGERINTERFACE.GENERIC +GENDEFINITIONMANAGERINTERFACE.GETINTERNALID +GENDEFINITIONMANAGERINTERFACE.MERGESRCINFOTOPARENTDFNMGR +GENDEFINITIONMANAGERINTERFACE.PREPARE2 +GENDEFINITIONMANAGERINTERFACE.ROLLBACK +GENERATED +GENERATION +GENERATIONS +GENERATION_COST_SECONDS +GENERATION_STATUS +GENERATION_TIME +GENERATION_TYPE +GENMDMCLASSCONSTANTS. +GENMDMOBJECTIDCONSTANTS. +GENMDMPROPERTYIDCONSTANTS. +GENMETADATAPROVIDERINTERFACE. +GENMETADATAPROVIDERINTERFACE.GETID +GENMETADATAPROVIDERINTERFACE.GETMETADATACLOB +GENSERVERINTERFACE. +GENSERVERINTERFACE.MAKECONNECTION +GETHITRATIO +GETHITS +GETLONG. +GETMDSYSEVENT. +GETMISSES +GETS +GETTVOID. +GETXMLSCHEMADEPENDENCYLIST. +GET_ERROR$. +GET_ERROR$.ERROR_LINES +GET_FACTOR. +GET_FACTOR_LABEL. +GET_LITE_ORDERS_URI. +GET_LITE_ORDERS_UTL. +GET_LITE_ORDERS_UTL2. +GET_MAX_CHECKPOINT. +GET_OLDVERSION_HASHCODE. +GET_OLDVERSION_HASHCODE2. +GET_PHONE_NUMBER_F. +GET_REALM_PARAMETERS. +GET_STATS_EXTENSION. +GET_TABLE_NAME. +GET_TOPO_GEOMETRY_LAYER_ARRAY. +GET_TOPO_GEOMETRY_LAYER_TABLE. +GET_TRUST_LEVEL. +GET_TRUST_LEVEL_FOR_IDENTITY. +GET_XDB_TABLESPACE. +GLOBAL +GLOBALID +GLOBAL_DBNAME +GLOBAL_HANG +GLOBAL_NAME +GLOBAL_SERVICE +GLOBAL_STATS +GLOBAL_TRAN_ID +GLOBAL_UID +GLOBAL_USERID +GNAME +GOAL +GOODNESS +GOWNER +GRA +GRANTABLE +GRANTED_GROUP +GRANTED_ROLE +GRANTED_ROLE_TYPE +GRANTEE +GRANTEE. +GRANTEE_NAME +GRANTOR +GRANTPATH_TO_STRING. +GRANT_LEVEL +GRANT_OPTION +GRANT_SELECT_PRIVILEGES +GRANT_TYPE +GRANULE_SIZE +GRIDFILE602_TAB$XD. +GROUP# +GROUPID +GROUPS +GROUP_COMMENT +GROUP_ID +GROUP_KEY_COUNT +GROUP_NAME +GROUP_NUMBER +GROUP_OR_SUBPLAN +GROUP_OWNER +GROUP_TYPE +GSMLOGOFF. +GSM_FLAGS +GUARANTEE_FLASHBACK_DATABASE +GUARD_STATUS +GUID +GV$ACCESS +GV$ACTIVE_INSTANCES +GV$ACTIVE_SERVICES +GV$ACTIVE_SESSION_HISTORY +GV$ACTIVE_SESS_POOL_MTH +GV$ADVISOR_CURRENT_SQLPLAN +GV$ADVISOR_PROGRESS +GV$ALERT_TYPES +GV$AQ +GV$AQ1 +GV$AQ_BACKGROUND_COORDINATOR +GV$AQ_BMAP_NONDUR_SUBSCRIBERS +GV$AQ_CROSS_INSTANCE_JOBS +GV$AQ_JOB_COORDINATOR +GV$AQ_MESSAGE_CACHE +GV$AQ_MSGBM +GV$AQ_NONDUR_REGISTRATIONS +GV$AQ_NONDUR_SUBSCRIBER +GV$AQ_NONDUR_SUBSCRIBER_LWM +GV$AQ_NOTIFICATION_CLIENTS +GV$AQ_SERVER_POOL +GV$AQ_SUBSCRIBER_LOAD +GV$ARCHIVE +GV$ARCHIVED_LOG +GV$ARCHIVE_DEST +GV$ARCHIVE_DEST_STATUS +GV$ARCHIVE_GAP +GV$ARCHIVE_PROCESSES +GV$ASH_INFO +GV$ASM_ACFSREPL +GV$ASM_ACFSREPLTAG +GV$ASM_ACFSSNAPSHOTS +GV$ASM_ACFSTAG +GV$ASM_ACFSVOLUMES +GV$ASM_ACFS_ENCRYPTION_INFO +GV$ASM_ACFS_SECURITY_INFO +GV$ASM_ACFS_SEC_ADMIN +GV$ASM_ACFS_SEC_CMDRULE +GV$ASM_ACFS_SEC_REALM +GV$ASM_ACFS_SEC_REALM_FILTER +GV$ASM_ACFS_SEC_REALM_GROUP +GV$ASM_ACFS_SEC_REALM_USER +GV$ASM_ACFS_SEC_RULE +GV$ASM_ACFS_SEC_RULESET +GV$ASM_ACFS_SEC_RULESET_RULE +GV$ASM_ALIAS +GV$ASM_ATTRIBUTE +GV$ASM_AUDIT_CLEANUP_JOBS +GV$ASM_AUDIT_CLEAN_EVENTS +GV$ASM_AUDIT_CONFIG_PARAMS +GV$ASM_AUDIT_LAST_ARCH_TS +GV$ASM_CLIENT +GV$ASM_DISK +GV$ASM_DISKGROUP +GV$ASM_DISKGROUP_SPARSE +GV$ASM_DISKGROUP_STAT +GV$ASM_DISK_IOSTAT +GV$ASM_DISK_IOSTAT_SPARSE +GV$ASM_DISK_SPARSE +GV$ASM_DISK_SPARSE_STAT +GV$ASM_DISK_STAT +GV$ASM_ESTIMATE +GV$ASM_FILE +GV$ASM_FILESYSTEM +GV$ASM_OPERATION +GV$ASM_TEMPLATE +GV$ASM_USER +GV$ASM_USERGROUP +GV$ASM_USERGROUP_MEMBER +GV$ASM_VOLUME +GV$ASM_VOLUME_STAT +GV$AUTO_BMR_STATISTICS +GV$AW_AGGREGATE_OP +GV$AW_ALLOCATE_OP +GV$AW_CALC +GV$AW_LONGOPS +GV$AW_OLAP +GV$AW_SESSION_INFO +GV$BACKUP +GV$BACKUP_ASYNC_IO +GV$BACKUP_CORRUPTION +GV$BACKUP_DATAFILE +GV$BACKUP_DEVICE +GV$BACKUP_NONLOGGED +GV$BACKUP_PIECE +GV$BACKUP_REDOLOG +GV$BACKUP_SET +GV$BACKUP_SPFILE +GV$BACKUP_SYNC_IO +GV$BGPROCESS +GV$BH +GV$BLOCKING_QUIESCE +GV$BSP +GV$BTS_STAT +GV$BT_SCAN_CACHE +GV$BT_SCAN_OBJ_TEMPS +GV$BUFFERED_PUBLISHERS +GV$BUFFERED_QUEUES +GV$BUFFERED_SUBSCRIBERS +GV$BUFFER_POOL +GV$BUFFER_POOL_STATISTICS +GV$CACHE +GV$CACHE_LOCK +GV$CACHE_TRANSFER +GV$CALLTAG +GV$CELL +GV$CELL_CONFIG +GV$CELL_CONFIG_INFO +GV$CELL_DB +GV$CELL_DB_HISTORY +GV$CELL_DISK +GV$CELL_DISK_HISTORY +GV$CELL_GLOBAL +GV$CELL_GLOBAL_HISTORY +GV$CELL_IOREASON +GV$CELL_IOREASON_NAME +GV$CELL_METRIC_DESC +GV$CELL_OFL_THREAD_HISTORY +GV$CELL_OPEN_ALERTS +GV$CELL_REQUEST_TOTALS +GV$CELL_STATE +GV$CELL_THREAD_HISTORY +GV$CHANNEL_WAITS +GV$CIRCUIT +GV$CLASS_CACHE_TRANSFER +GV$CLASS_PING +GV$CLIENT_SECRETS +GV$CLIENT_STATS +GV$CLONEDFILE +GV$CLUSTER_INTERCONNECTS +GV$CONFIGURED_INTERCONNECTS +GV$CONTAINERS +GV$CONTEXT +GV$CONTROLFILE +GV$CONTROLFILE_RECORD_SECTION +GV$CON_SYSSTAT +GV$CON_SYSTEM_EVENT +GV$CON_SYSTEM_WAIT_CLASS +GV$CON_SYS_TIME_MODEL +GV$COPY_CORRUPTION +GV$COPY_NONLOGGED +GV$CORRUPT_XID_LIST +GV$CPOOL_CC_INFO +GV$CPOOL_CC_STATS +GV$CPOOL_CONN_INFO +GV$CPOOL_STATS +GV$CR_BLOCK_SERVER +GV$CURRENT_BLOCK_SERVER +GV$DATABASE +GV$DATABASE_BLOCK_CORRUPTION +GV$DATABASE_INCARNATION +GV$DATABASE_KEY_INFO +GV$DATAFILE +GV$DATAFILE_COPY +GV$DATAFILE_HEADER +GV$DATAGUARD_CONFIG +GV$DATAGUARD_STATS +GV$DATAGUARD_STATUS +GV$DATAPUMP_JOB +GV$DATAPUMP_SESSION +GV$DBFILE +GV$DBLINK +GV$DB_CACHE_ADVICE +GV$DB_OBJECT_CACHE +GV$DB_PIPES +GV$DB_TRANSPORTABLE_PLATFORM +GV$DEAD_CLEANUP +GV$DELETED_OBJECT +GV$DETACHED_SESSION +GV$DG_BROKER_CONFIG +GV$DIAG_INFO +GV$DISPATCHER +GV$DISPATCHER_CONFIG +GV$DISPATCHER_RATE +GV$DLM_ALL_LOCKS +GV$DLM_CONVERT_LOCAL +GV$DLM_CONVERT_REMOTE +GV$DLM_LATCH +GV$DLM_LOCKS +GV$DLM_MISC +GV$DLM_RESS +GV$DLM_TRAFFIC_CONTROLLER +GV$DNFS_CHANNELS +GV$DNFS_FILES +GV$DNFS_SERVERS +GV$DNFS_STATS +GV$DYNAMIC_REMASTER_STATS +GV$EDITIONABLE_TYPES +GV$EMON +GV$EMX_USAGE_STATS +GV$ENABLEDPRIVS +GV$ENCRYPTED_TABLESPACES +GV$ENCRYPTION_KEYS +GV$ENCRYPTION_WALLET +GV$ENQUEUE_LOCK +GV$ENQUEUE_STAT +GV$ENQUEUE_STATISTICS +GV$EVENTMETRIC +GV$EVENT_HISTOGRAM +GV$EVENT_HISTOGRAM_MICRO +GV$EVENT_NAME +GV$EXECUTION +GV$FALSE_PING +GV$FAST_START_SERVERS +GV$FAST_START_TRANSACTIONS +GV$FILEMETRIC +GV$FILEMETRIC_HISTORY +GV$FILESPACE_USAGE +GV$FILESTAT +GV$FILE_CACHE_TRANSFER +GV$FILE_HISTOGRAM +GV$FILE_OPTIMIZED_HISTOGRAM +GV$FILE_PING +GV$FIXED_TABLE +GV$FIXED_VIEW_DEFINITION +GV$FLASHBACK_DATABASE_LOG +GV$FLASHBACK_DATABASE_LOGFILE +GV$FLASHBACK_DATABASE_STAT +GV$FLASHFILESTAT +GV$FOREIGN_ARCHIVED_LOG +GV$FS_FAILOVER_HISTOGRAM +GV$FS_FAILOVER_STATS +GV$FS_OBSERVER_HISTOGRAM +GV$GCSHVMASTER_INFO +GV$GCSPFMASTER_INFO +GV$GC_ELEMENT +GV$GC_ELEMENTS_WITH_COLLISIONS +GV$GES_BLOCKING_ENQUEUE +GV$GES_CONVERT_LOCAL +GV$GES_CONVERT_REMOTE +GV$GES_DEADLOCKS +GV$GES_DEADLOCK_SESSIONS +GV$GES_ENQUEUE +GV$GES_LATCH +GV$GES_RESOURCE +GV$GES_STATISTICS +GV$GES_TRAFFIC_CONTROLLER +GV$GG_APPLY_COORDINATOR +GV$GG_APPLY_READER +GV$GG_APPLY_RECEIVER +GV$GG_APPLY_SERVER +GV$GLOBALCONTEXT +GV$GLOBAL_BLOCKED_LOCKS +GV$GLOBAL_TRANSACTION +GV$GOLDENGATE_CAPABILITIES +GV$GOLDENGATE_CAPTURE +GV$GOLDENGATE_MESSAGE_TRACKING +GV$GOLDENGATE_TABLE_STATS +GV$GOLDENGATE_TRANSACTION +GV$HANG_STATISTICS +GV$HEAT_MAP_SEGMENT +GV$HM_CHECK +GV$HM_CHECK_PARAM +GV$HM_FINDING +GV$HM_INFO +GV$HM_RECOMMENDATION +GV$HM_RUN +GV$HS_AGENT +GV$HS_PARAMETER +GV$HS_SESSION +GV$HVMASTER_INFO +GV$IM_COLUMN_LEVEL +GV$IM_COL_CU +GV$IM_HEADER +GV$IM_SEGMENTS +GV$IM_SEGMENTS_DETAIL +GV$IM_SEG_EXT_MAP +GV$IM_SMU_CHUNK +GV$IM_SMU_HEAD +GV$IM_TBS_EXT_MAP +GV$IM_USER_SEGMENTS +GV$INCMETER_CONFIG +GV$INCMETER_INFO +GV$INCMETER_SUMMARY +GV$INDEXED_FIXED_COLUMN +GV$INMEMORY_AREA +GV$INSTANCE +GV$INSTANCE_CACHE_TRANSFER +GV$INSTANCE_LOG_GROUP +GV$INSTANCE_PING +GV$INSTANCE_RECOVERY +GV$IOFUNCMETRIC +GV$IOFUNCMETRIC_HISTORY +GV$IOSTAT_CONSUMER_GROUP +GV$IOSTAT_FILE +GV$IOSTAT_FUNCTION +GV$IOSTAT_FUNCTION_DETAIL +GV$IOSTAT_NETWORK +GV$IOS_CLIENT +GV$IO_CALIBRATION_STATUS +GV$IO_OUTLIER +GV$IR_FAILURE +GV$IR_FAILURE_SET +GV$IR_MANUAL_CHECKLIST +GV$IR_REPAIR +GV$JAVAPOOL +GV$JAVA_LIBRARY_CACHE_MEMORY +GV$JAVA_POOL_ADVICE +GV$KERNEL_IO_OUTLIER +GV$KEY_VECTOR +GV$LATCH +GV$LATCHHOLDER +GV$LATCHNAME +GV$LATCH_CHILDREN +GV$LATCH_MISSES +GV$LATCH_PARENT +GV$LGWRIO_OUTLIER +GV$LIBCACHE_LOCKS +GV$LIBRARYCACHE +GV$LIBRARY_CACHE_MEMORY +GV$LICENSE +GV$LISTENER_NETWORK +GV$LOADISTAT +GV$LOADPSTAT +GV$LOBSTAT +GV$LOCK +GV$LOCKED_OBJECT +GV$LOCKS_WITH_COLLISIONS +GV$LOCK_ACTIVITY +GV$LOCK_ELEMENT +GV$LOCK_TYPE +GV$LOG +GV$LOGFILE +GV$LOGHIST +GV$LOGMNR_CONTENTS +GV$LOGMNR_DICTIONARY +GV$LOGMNR_DICTIONARY_LOAD +GV$LOGMNR_LATCH +GV$LOGMNR_LOGFILE +GV$LOGMNR_LOGS +GV$LOGMNR_PARAMETERS +GV$LOGMNR_PROCESS +GV$LOGMNR_SESSION +GV$LOGMNR_STATS +GV$LOGMNR_TRANSACTION +GV$LOGSTDBY +GV$LOGSTDBY_PROCESS +GV$LOGSTDBY_PROGRESS +GV$LOGSTDBY_STATE +GV$LOGSTDBY_STATS +GV$LOGSTDBY_TRANSACTION +GV$LOG_HISTORY +GV$MANAGED_STANDBY +GV$MAPPED_SQL +GV$MAP_COMP_LIST +GV$MAP_ELEMENT +GV$MAP_EXT_ELEMENT +GV$MAP_FILE +GV$MAP_FILE_EXTENT +GV$MAP_FILE_IO_STACK +GV$MAP_LIBRARY +GV$MAP_SUBELEMENT +GV$MAX_ACTIVE_SESS_TARGET_MTH +GV$MEMORY_CURRENT_RESIZE_OPS +GV$MEMORY_DYNAMIC_COMPONENTS +GV$MEMORY_RESIZE_OPS +GV$MEMORY_TARGET_ADVICE +GV$METRIC +GV$METRICGROUP +GV$METRICNAME +GV$METRIC_HISTORY +GV$MTTR_TARGET_ADVICE +GV$MUTEX_SLEEP +GV$MUTEX_SLEEP_HISTORY +GV$MVREFRESH +GV$MYSTAT +GV$NFS_CLIENTS +GV$NFS_LOCKS +GV$NFS_OPEN_FILES +GV$NLS_PARAMETERS +GV$NLS_VALID_VALUES +GV$NONLOGGED_BLOCK +GV$OBJECT_DEPENDENCY +GV$OBJECT_DML_FREQUENCIES +GV$OBSOLETE_PARAMETER +GV$OFFLINE_RANGE +GV$OFSMOUNT +GV$OFS_STATS +GV$OPEN_CURSOR +GV$OPTIMIZER_PROCESSING_RATE +GV$OPTION +GV$OSSTAT +GV$PARALLEL_DEGREE_LIMIT_MTH +GV$PARAMETER +GV$PARAMETER2 +GV$PARAMETER_VALID_VALUES +GV$PATCHES +GV$PDBS +GV$PDB_INCARNATION +GV$PERSISTENT_PUBLISHERS +GV$PERSISTENT_QMN_CACHE +GV$PERSISTENT_QUEUES +GV$PERSISTENT_SUBSCRIBERS +GV$PGASTAT +GV$PGA_TARGET_ADVICE +GV$PGA_TARGET_ADVICE_HISTOGRAM +GV$PING +GV$POLICY_HISTORY +GV$PQ_SESSTAT +GV$PQ_SLAVE +GV$PQ_SYSSTAT +GV$PQ_TQSTAT +GV$PROCESS +GV$PROCESS_GROUP +GV$PROCESS_MEMORY +GV$PROCESS_MEMORY_DETAIL +GV$PROCESS_MEMORY_DETAIL_PROG +GV$PROPAGATION_RECEIVER +GV$PROPAGATION_SENDER +GV$PROXY_ARCHIVEDLOG +GV$PROXY_DATAFILE +GV$PWFILE_USERS +GV$PX_BUFFER_ADVICE +GV$PX_INSTANCE_GROUP +GV$PX_PROCESS +GV$PX_PROCESS_SYSSTAT +GV$PX_PROCESS_TRACE +GV$PX_SESSION +GV$PX_SESSTAT +GV$QMON_COORDINATOR_STATS +GV$QMON_SERVER_STATS +GV$QMON_TASKS +GV$QMON_TASK_STATS +GV$QUEUE +GV$QUEUEING_MTH +GV$RECOVERY_FILE_STATUS +GV$RECOVERY_LOG +GV$RECOVERY_PROGRESS +GV$RECOVERY_STATUS +GV$RECOVER_FILE +GV$REDO_DEST_RESP_HISTOGRAM +GV$REPLAY_CONTEXT +GV$REPLAY_CONTEXT_LOB +GV$REPLAY_CONTEXT_SEQUENCE +GV$REPLAY_CONTEXT_SYSDATE +GV$REPLAY_CONTEXT_SYSGUID +GV$REPLPROP +GV$REPLQUEUE +GV$REQDIST +GV$RESERVED_WORDS +GV$RESOURCE +GV$RESOURCE_LIMIT +GV$RESTORE_POINT +GV$RESULT_CACHE_DEPENDENCY +GV$RESULT_CACHE_MEMORY +GV$RESULT_CACHE_OBJECTS +GV$RESULT_CACHE_STATISTICS +GV$RESUMABLE +GV$RFS_THREAD +GV$RMAN_COMPRESSION_ALGORITHM +GV$RMAN_CONFIGURATION +GV$RMAN_OUTPUT +GV$ROLLSTAT +GV$ROWCACHE +GV$ROWCACHE_PARENT +GV$ROWCACHE_SUBORDINATE +GV$RO_USER_ACCOUNT +GV$RSRCMGRMETRIC +GV$RSRCMGRMETRIC_HISTORY +GV$RSRC_CONSUMER_GROUP +GV$RSRC_CONSUMER_GROUP_CPU_MTH +GV$RSRC_CONS_GROUP_HISTORY +GV$RSRC_PLAN +GV$RSRC_PLAN_CPU_MTH +GV$RSRC_PLAN_HISTORY +GV$RSRC_SESSION_INFO +GV$RT_ADDM_CONTROL +GV$RULE +GV$RULE_SET +GV$RULE_SET_AGGREGATE_STATS +GV$SCHEDULER_INMEM_MDINFO +GV$SCHEDULER_INMEM_RTINFO +GV$SCHEDULER_RUNNING_JOBS +GV$SECUREFILE_TIMER +GV$SEGMENT_STATISTICS +GV$SEGSPACE_USAGE +GV$SEGSTAT +GV$SEGSTAT_NAME +GV$SERVICEMETRIC +GV$SERVICEMETRIC_HISTORY +GV$SERVICES +GV$SERVICE_EVENT +GV$SERVICE_STATS +GV$SERVICE_WAIT_CLASS +GV$SERV_MOD_ACT_STATS +GV$SESSION +GV$SESSIONS_COUNT +GV$SESSION_BLOCKERS +GV$SESSION_CONNECT_INFO +GV$SESSION_CURSOR_CACHE +GV$SESSION_EVENT +GV$SESSION_FIX_CONTROL +GV$SESSION_LONGOPS +GV$SESSION_OBJECT_CACHE +GV$SESSION_WAIT +GV$SESSION_WAIT_CLASS +GV$SESSION_WAIT_HISTORY +GV$SESSMETRIC +GV$SESSTAT +GV$SESS_IO +GV$SESS_TIME_MODEL +GV$SES_OPTIMIZER_ENV +GV$SGA +GV$SGAINFO +GV$SGASTAT +GV$SGA_CURRENT_RESIZE_OPS +GV$SGA_DYNAMIC_COMPONENTS +GV$SGA_DYNAMIC_FREE_MEMORY +GV$SGA_RESIZE_OPS +GV$SGA_TARGET_ADVICE +GV$SHARED_POOL_ADVICE +GV$SHARED_POOL_RESERVED +GV$SHARED_SERVER +GV$SHARED_SERVER_MONITOR +GV$SORT_SEGMENT +GV$SORT_USAGE +GV$SPPARAMETER +GV$SQL +GV$SQLAREA +GV$SQLAREA_PLAN_HASH +GV$SQLCOMMAND +GV$SQLFN_ARG_METADATA +GV$SQLFN_METADATA +GV$SQLPA_METRIC +GV$SQLSTATS +GV$SQLSTATS_PLAN_HASH +GV$SQLTEXT +GV$SQLTEXT_WITH_NEWLINES +GV$SQL_BIND_CAPTURE +GV$SQL_BIND_DATA +GV$SQL_BIND_METADATA +GV$SQL_CS_HISTOGRAM +GV$SQL_CS_SELECTIVITY +GV$SQL_CS_STATISTICS +GV$SQL_CURSOR +GV$SQL_DIAG_REPOSITORY +GV$SQL_DIAG_REPOSITORY_REASON +GV$SQL_FEATURE +GV$SQL_FEATURE_DEPENDENCY +GV$SQL_FEATURE_HIERARCHY +GV$SQL_HINT +GV$SQL_JOIN_FILTER +GV$SQL_MONITOR +GV$SQL_MONITOR_SESSTAT +GV$SQL_MONITOR_STATNAME +GV$SQL_OPTIMIZER_ENV +GV$SQL_PLAN +GV$SQL_PLAN_MONITOR +GV$SQL_PLAN_STATISTICS +GV$SQL_PLAN_STATISTICS_ALL +GV$SQL_REDIRECTION +GV$SQL_REOPTIMIZATION_HINTS +GV$SQL_SHARED_CURSOR +GV$SQL_SHARED_MEMORY +GV$SQL_WORKAREA +GV$SQL_WORKAREA_ACTIVE +GV$SQL_WORKAREA_HISTOGRAM +GV$SSCR_SESSIONS +GV$STANDBY_LOG +GV$STATISTICS_LEVEL +GV$STATNAME +GV$STREAMS_APPLY_COORDINATOR +GV$STREAMS_APPLY_READER +GV$STREAMS_APPLY_SERVER +GV$STREAMS_CAPTURE +GV$STREAMS_MESSAGE_TRACKING +GV$STREAMS_POOL_ADVICE +GV$STREAMS_POOL_STATISTICS +GV$STREAMS_TRANSACTION +GV$SUBCACHE +GV$SUBSCR_REGISTRATION_STATS +GV$SYSAUX_OCCUPANTS +GV$SYSMETRIC +GV$SYSMETRIC_HISTORY +GV$SYSMETRIC_SUMMARY +GV$SYSSTAT +GV$SYSTEM_CURSOR_CACHE +GV$SYSTEM_EVENT +GV$SYSTEM_FIX_CONTROL +GV$SYSTEM_PARAMETER +GV$SYSTEM_PARAMETER2 +GV$SYSTEM_WAIT_CLASS +GV$SYS_OPTIMIZER_ENV +GV$SYS_REPORT_REQUESTS +GV$SYS_REPORT_STATS +GV$SYS_TIME_MODEL +GV$TABLESPACE +GV$TEMPFILE +GV$TEMPORARY_LOBS +GV$TEMPSEG_USAGE +GV$TEMPSTAT +GV$TEMPUNDOSTAT +GV$TEMP_CACHE_TRANSFER +GV$TEMP_EXTENT_MAP +GV$TEMP_EXTENT_POOL +GV$TEMP_PING +GV$TEMP_SPACE_HEADER +GV$THREAD +GV$THRESHOLD_TYPES +GV$TIMER +GV$TIMEZONE_FILE +GV$TIMEZONE_NAMES +GV$TOPLEVELCALL +GV$TRANSACTION +GV$TRANSACTION_ENQUEUE +GV$TRANSPORTABLE_PLATFORM +GV$TSDP_SUPPORTED_FEATURE +GV$TSM_SESSIONS +GV$TYPE_SIZE +GV$UNDOSTAT +GV$UNIFIED_AUDIT_TRAIL +GV$VERSION +GV$VPD_POLICY +GV$WAITCLASSMETRIC +GV$WAITCLASSMETRIC_HISTORY +GV$WAITSTAT +GV$WALLET +GV$WLM_PCMETRIC +GV$WLM_PCMETRIC_HISTORY +GV$WLM_PC_STATS +GV$WORKLOAD_REPLAY_THREAD +GV$XML_AUDIT_TRAIL +GV$XSTREAM_APPLY_COORDINATOR +GV$XSTREAM_APPLY_READER +GV$XSTREAM_APPLY_RECEIVER +GV$XSTREAM_APPLY_SERVER +GV$XSTREAM_CAPTURE +GV$XSTREAM_MESSAGE_TRACKING +GV$XSTREAM_OUTBOUND_SERVER +GV$XSTREAM_TABLE_STATS +GV$XSTREAM_TRANSACTION +GV$XS_SESSIONS +GV$XS_SESSION_NS_ATTRIBUTE +GV$XS_SESSION_NS_ATTRIBUTES +GV$XS_SESSION_ROLE +GV$XS_SESSION_ROLES +GV$_LOCK +HAEN_TXFM_TEXT. +HANDLE +HANDLER_COMMENT +HANDLER_FUNCTION +HANDLER_NAME +HANDLER_PACKAGE +HANDLER_SCHEMA +HANDLER_STATUS +HANDLER_TYPE +HANDLE_COLLISIONS +HANG_CHAIN_SESSIONS +HANG_CREATE_TIME +HANG_ID +HANG_RESOLVE_TIME +HANG_TYPE +HARD_DISK_TYPE +HARD_PARSES +HASH +HASHCODE +HASHKEYS +HASH_AJ +HASH_CODE +HASH_EXPRESSION +HASH_MATCH_FAILED +HASH_SJ +HASH_VALUE +HAS_CHILD +HAS_DIGEST_VERIFIERS +HAS_IDENTITY +HAS_VARARGS +HEADER_BLOCK +HEADER_FILE +HEADER_SIZE +HEADER_STATUS +HEAD_ELEMENT +HEAD_ELEMENT_NAME +HEAD_OWNER +HEAD_PIECE_ADDRESS +HEAD_SCHEMA_URL +HEAD_TARGET_NAMESPACE +HEALTH_MONITOR +HEAP_ALOC +HEAP_DESC +HEAP_DESCRIPTOR +HEAP_NAME +HEAP_NUM +HEAP_SIZE +HEAP_SZ +HEAP_USED +HETEROGENEOUS +HET_TYPE +HHAND. +HHBYTELEN. +HHCBIT. +HHCELLBNDRY. +HHCELLSIZE. +HHCLDATE. +HHCOLLAPSE. +HHCOMMONCODE. +HHCOMPARE. +HHCOMPOSE. +HHDECODE. +HHDISTANCE. +HHENCODE. +HHENCODE_BYLEVEL. +HHGBIT. +HHGETCID. +HHGROUP. +HHGTBIT. +HHGTYPE. +HHIDLPART. +HHIDPART. +HHINCRLEV. +HHJLDATE. +HHLENGTH. +HHLEVELS. +HHMATCH. +HHMAXCODE. +HHNCOMPARE. +HHNDIM. +HHOR. +HHORDER. +HHPRECISION. +HHSBIT. +HHSETCID. +HHSTBIT. +HHSTYPE. +HHSUBDIVIDE. +HHSUBSTR. +HHXOR. +HIDDEN +HIDDEN_COLUMN +HIERARCHICAL +HIERARCHY +HIERARCHY_CONSISTENCY_RULE +HIERARCHY_ID +HIERARCHY_LEVEL_ID +HIERARCHY_NAME +HIERARCHY_TYPE +HIER_TYPE +HIGH +HIGHB +HIGHROWID +HIGHWATER +HIGH_BOUND +HIGH_CHANGE# +HIGH_OPTIMAL_SIZE +HIGH_PART_NO +HIGH_RESETLOGS_CHANGE# +HIGH_RESETLOGS_TIME +HIGH_SCN +HIGH_SEQUENCE# +HIGH_TAB# +HIGH_TIME +HIGH_TSNAME +HIGH_VALUE +HIGH_VALUE_LENGTH +HIGH_WATER_MARK +HINT +HINT_ID +HINT_TEXT +HISTOGRAM +HISTORIC_MAX +HISTORY_INDEX_BLOCKS_FREED +HITS +HIT_RATIO +HI_BNUM +HI_SETID +HM_SQLTK_INTERNAL. +HM_SQLTK_INTERNAL.COLUMN_CHECK +HM_SQLTK_INTERNAL.REF_CHECK +HM_SQLTK_INTERNAL.ROW_CHECK +HM_SQLTK_INTERNAL.TAB_DESC +HM_SQLTK_INTERNAL.TAB_INIT +HOLDING_CON_ID +HOLDING_SESSION +HOLDING_USER_SESSION +HOP_COUNT +HOST +HOSTING_CLIENT_ID +HOSTNAME +HOST_ADDRESS +HOST_ID +HOST_NAME +HOST_NW_ADDR +HOT_BYTES_READ +HOT_BYTES_WRITTEN +HOT_MINE +HOT_READS +HOT_USED_MB +HOT_WRITES +HOUR_IN_DAY +HOW +HOW_CREATED +HS$_DDTF_OPTCOLUMNS. +HS$_DDTF_OPTFOREIGNKEYS. +HS$_DDTF_OPTPROCEDURES. +HS$_DDTF_OPTSTATISTICS. +HS$_DDTF_OPTTABFORKEYS. +HS$_DDTF_OPTTABPRIKEYS. +HS$_DDTF_OPTTABSTATS. +HS$_DDTF_SQLCOLUMNS. +HS$_DDTF_SQLFOREIGNKEYS. +HS$_DDTF_SQLPRIMARYKEYS. +HS$_DDTF_SQLPROCEDURES. +HS$_DDTF_SQLSTATISTICS. +HS$_DDTF_SQLTABFORKEYS. +HS$_DDTF_SQLTABLES. +HS$_DDTF_SQLTABPRIKEYS. +HS$_DDTF_SQLTABSTATS. +HSECS +HS_SESSION_ID +HTF. +HTF.ADDRESS +HTF.ANCHOR +HTF.ANCHOR2 +HTF.APPLETOPEN +HTF.AREA +HTF.BASE +HTF.BASEFONT +HTF.BGSOUND +HTF.BIG +HTF.BLOCKQUOTEOPEN +HTF.BODYOPEN +HTF.BOLD +HTF.BR +HTF.CENTER +HTF.CITE +HTF.CODE +HTF.COMMENT +HTF.DFN +HTF.DIV +HTF.DLISTDEF +HTF.DLISTOPEN +HTF.DLISTTERM +HTF.EM +HTF.EMPHASIS +HTF.ESCAPE_SC +HTF.ESCAPE_URL +HTF.FONTOPEN +HTF.FORMAT_CELL +HTF.FORMCHECKBOX +HTF.FORMFILE +HTF.FORMHIDDEN +HTF.FORMIMAGE +HTF.FORMOPEN +HTF.FORMPASSWORD +HTF.FORMRADIO +HTF.FORMRESET +HTF.FORMSELECTOPEN +HTF.FORMSELECTOPTION +HTF.FORMSUBMIT +HTF.FORMTEXT +HTF.FORMTEXTAREA +HTF.FORMTEXTAREA2 +HTF.FORMTEXTAREAOPEN +HTF.FORMTEXTAREAOPEN2 +HTF.FRAME +HTF.FRAMESETOPEN +HTF.HEADER +HTF.HR +HTF.HTITLE +HTF.IMG +HTF.IMG2 +HTF.ISINDEX +HTF.ITALIC +HTF.KBD +HTF.KEYBOARD +HTF.LINE +HTF.LINKREL +HTF.LINKREV +HTF.LISTHEADER +HTF.LISTITEM +HTF.MAILTO +HTF.MAPOPEN +HTF.META +HTF.NEXTID +HTF.NL +HTF.NOBR +HTF.OLISTOPEN +HTF.PARAGRAPH +HTF.PARAM +HTF.PLAINTEXT +HTF.PREOPEN +HTF.S +HTF.SAMPLE +HTF.SCRIPT +HTF.SMALL +HTF.STRIKE +HTF.STRONG +HTF.STYLE +HTF.SUB +HTF.SUP +HTF.TABLECAPTION +HTF.TABLEDATA +HTF.TABLEHEADER +HTF.TABLEOPEN +HTF.TABLEROWOPEN +HTF.TELETYPE +HTF.TITLE +HTF.ULISTOPEN +HTF.UNDERLINE +HTF.VARIABLE +HTMLDB. +HTMLDB_ADMIN. +HTMLDB_CUSTOM_AUTH. +HTMLDB_CUSTOM_AUTH.APPLICATION_PAGE_ITEM_EXISTS +HTMLDB_CUSTOM_AUTH.CURRENT_PAGE_IS_PUBLIC +HTMLDB_CUSTOM_AUTH.DEFINE_USER_SESSION +HTMLDB_CUSTOM_AUTH.GET_COOKIE_PROPS +HTMLDB_CUSTOM_AUTH.GET_LDAP_PROPS +HTMLDB_CUSTOM_AUTH.GET_NEXT_SESSION_ID +HTMLDB_CUSTOM_AUTH.GET_SECURITY_GROUP_ID +HTMLDB_CUSTOM_AUTH.GET_SESSION_ID +HTMLDB_CUSTOM_AUTH.GET_SESSION_ID_FROM_COOKIE +HTMLDB_CUSTOM_AUTH.GET_USER +HTMLDB_CUSTOM_AUTH.GET_USERNAME +HTMLDB_CUSTOM_AUTH.IS_SESSION_VALID +HTMLDB_CUSTOM_AUTH.LDAP_AUTHENTICATE +HTMLDB_CUSTOM_AUTH.LDAP_DNPREP +HTMLDB_CUSTOM_AUTH.LOGIN +HTMLDB_CUSTOM_AUTH.LOGOUT +HTMLDB_CUSTOM_AUTH.LOGOUT_THEN_GO_TO_PAGE +HTMLDB_CUSTOM_AUTH.LOGOUT_THEN_GO_TO_URL +HTMLDB_CUSTOM_AUTH.PORTAL_SSO_SENTRY_V1 +HTMLDB_CUSTOM_AUTH.POST_LOGIN +HTMLDB_CUSTOM_AUTH.REMOVE_SESSION +HTMLDB_CUSTOM_AUTH.SESSION_ID_EXISTS +HTMLDB_CUSTOM_AUTH.SET_SESSION_ID +HTMLDB_CUSTOM_AUTH.SET_SESSION_ID_TO_NEXT_VALUE +HTMLDB_CUSTOM_AUTH.SET_USER +HTMLDB_ITEM. +HTMLDB_ITEM.CHECKBOX +HTMLDB_ITEM.CHECKBOX2 +HTMLDB_ITEM.DATE_POPUP +HTMLDB_ITEM.DATE_POPUP2 +HTMLDB_ITEM.DISPLAY_AND_SAVE +HTMLDB_ITEM.HIDDEN +HTMLDB_ITEM.MD5_CHECKSUM +HTMLDB_ITEM.MD5_HIDDEN +HTMLDB_ITEM.MULTI_ROW_UPDATE +HTMLDB_ITEM.POPUPKEY_FROM_LOV +HTMLDB_ITEM.POPUPKEY_FROM_QUERY +HTMLDB_ITEM.POPUP_FROM_LOV +HTMLDB_ITEM.POPUP_FROM_QUERY +HTMLDB_ITEM.RADIOGROUP +HTMLDB_ITEM.SELECT_LIST +HTMLDB_ITEM.SELECT_LIST_FROM_LOV +HTMLDB_ITEM.SELECT_LIST_FROM_LOV_XL +HTMLDB_ITEM.SELECT_LIST_FROM_QUERY +HTMLDB_ITEM.SELECT_LIST_FROM_QUERY_XL +HTMLDB_ITEM.TEXT +HTMLDB_ITEM.TEXTAREA +HTMLDB_ITEM.TEXT_FROM_LOV +HTMLDB_ITEM.TEXT_FROM_LOV_QUERY +HTMLDB_LANG. +HTMLDB_LANG.CREATE_LANGUAGE_MAPPING +HTMLDB_LANG.CREATE_MESSAGE +HTMLDB_LANG.DELETE_LANGUAGE_MAPPING +HTMLDB_LANG.DELETE_MESSAGE +HTMLDB_LANG.LANG +HTMLDB_LANG.MESSAGE +HTMLDB_LANG.MESSAGE_P +HTMLDB_LANG.PUBLISH_APPLICATION +HTMLDB_LANG.SEED_TRANSLATIONS +HTMLDB_LANG.UPDATE_LANGUAGE_MAPPING +HTMLDB_LANG.UPDATE_MESSAGE +HTMLDB_LANG.UPDATE_TRANSLATED_STRING +HTMLDB_LOGIN. +HTMLDB_SITE_ADMIN_PRIVS. +HTMLDB_SITE_ADMIN_PRIVS.CREATE_EXCEPTION +HTMLDB_SITE_ADMIN_PRIVS.REMOVE_EXCEPTION +HTMLDB_SITE_ADMIN_PRIVS.REMOVE_SCHEMA_EXCEPTIONS +HTMLDB_SITE_ADMIN_PRIVS.REMOVE_WORKSPACE_EXCEPTIONS +HTMLDB_SITE_ADMIN_PRIVS.REPORT +HTMLDB_SITE_ADMIN_PRIVS.RESTRICT_SCHEMA +HTMLDB_SITE_ADMIN_PRIVS.UNRESTRICT_SCHEMA +HTMLDB_UTIL. +HTMLDB_UTIL.AGENDA_CALENDAR +HTMLDB_UTIL.CACHE_GET_DATE_OF_PAGE_CACHE +HTMLDB_UTIL.CACHE_GET_DATE_OF_REGION_CACHE +HTMLDB_UTIL.CACHE_PURGE_BY_APPLICATION +HTMLDB_UTIL.CACHE_PURGE_BY_PAGE +HTMLDB_UTIL.CACHE_PURGE_STALE +HTMLDB_UTIL.CHANGE_CURRENT_USER_PW +HTMLDB_UTIL.CHANGE_PASSWORD_ON_FIRST_USE +HTMLDB_UTIL.CLEAR_APP_CACHE +HTMLDB_UTIL.CLEAR_PAGE_CACHE +HTMLDB_UTIL.CLEAR_USER_CACHE +HTMLDB_UTIL.CLOSE_OPEN_DB_LINKS +HTMLDB_UTIL.COMPRESS_INT +HTMLDB_UTIL.COUNT_CLICK +HTMLDB_UTIL.CREATE_USER +HTMLDB_UTIL.CREATE_USER_FROM_FILE +HTMLDB_UTIL.CREATE_USER_GROUP +HTMLDB_UTIL.CURRENT_USER_IN_GROUP +HTMLDB_UTIL.CUSTOM_CALENDAR +HTMLDB_UTIL.DAILY_CALENDAR +HTMLDB_UTIL.DECREMENT_CALENDAR +HTMLDB_UTIL.DELETE_USER_GROUP +HTMLDB_UTIL.DOWNLOAD_PRINT_DOCUMENT +HTMLDB_UTIL.EDIT_USER +HTMLDB_UTIL.END_USER_ACCOUNT_DAYS_LEFT +HTMLDB_UTIL.EXPIRE_END_USER_ACCOUNT +HTMLDB_UTIL.EXPIRE_WORKSPACE_ACCOUNT +HTMLDB_UTIL.EXPORT_APPLICATION +HTMLDB_UTIL.EXPORT_APPLICATION_COMPONENT +HTMLDB_UTIL.EXPORT_APPLICATION_PAGE +HTMLDB_UTIL.EXPORT_USERS +HTMLDB_UTIL.FETCH_APP_ITEM +HTMLDB_UTIL.FETCH_USER +HTMLDB_UTIL.FILESIZE_MASK +HTMLDB_UTIL.FIND_SECURITY_GROUP_ID +HTMLDB_UTIL.FIND_WORKSPACE +HTMLDB_UTIL.FLASH2 +HTMLDB_UTIL.GET_ACCOUNT_LOCKED_STATUS +HTMLDB_UTIL.GET_APEX_CHAR_ID +HTMLDB_UTIL.GET_APEX_ID +HTMLDB_UTIL.GET_APPLICATION_ID_STATUS +HTMLDB_UTIL.GET_APPLICATION_NAME +HTMLDB_UTIL.GET_ATTRIBUTE +HTMLDB_UTIL.GET_AUTHENTICATION_RESULT +HTMLDB_UTIL.GET_BLOB +HTMLDB_UTIL.GET_BLOB_FILE +HTMLDB_UTIL.GET_BLOB_FILE_SRC +HTMLDB_UTIL.GET_BUILD_OPTION_STATUS +HTMLDB_UTIL.GET_CURRENT_USER_ID +HTMLDB_UTIL.GET_DEFAULT_SCHEMA +HTMLDB_UTIL.GET_EDITION +HTMLDB_UTIL.GET_EMAIL +HTMLDB_UTIL.GET_FEEDBACK_FOLLOW_UP +HTMLDB_UTIL.GET_FILE +HTMLDB_UTIL.GET_FILE_ID +HTMLDB_UTIL.GET_FIRST_NAME +HTMLDB_UTIL.GET_GROUPS_USER_BELONGS_TO +HTMLDB_UTIL.GET_GROUP_ID +HTMLDB_UTIL.GET_GROUP_NAME +HTMLDB_UTIL.GET_HIGH_CONTRAST_MODE_TOGGLE +HTMLDB_UTIL.GET_LANGUAGE_SELECTOR_LIST +HTMLDB_UTIL.GET_LANGUAGE_SELECTOR_UL +HTMLDB_UTIL.GET_LANGUAGE_SELECTOR_UL2 +HTMLDB_UTIL.GET_LAST_NAME +HTMLDB_UTIL.GET_NUMERIC_SESSION_STATE +HTMLDB_UTIL.GET_PREFERENCE +HTMLDB_UTIL.GET_PRINT_DOCUMENT +HTMLDB_UTIL.GET_SCREEN_READER_MODE_TOGGLE +HTMLDB_UTIL.GET_SESSION_LANG +HTMLDB_UTIL.GET_SESSION_STATE +HTMLDB_UTIL.GET_SESSION_TERRITORY +HTMLDB_UTIL.GET_SESSION_TIME_ZONE +HTMLDB_UTIL.GET_SINCE +HTMLDB_UTIL.GET_SINCE_TSWLTZ +HTMLDB_UTIL.GET_SINCE_TSWTZ +HTMLDB_UTIL.GET_TIMEFRAME +HTMLDB_UTIL.GET_USERNAME +HTMLDB_UTIL.GET_USER_ID +HTMLDB_UTIL.GET_USER_ROLES +HTMLDB_UTIL.GET_UUID +HTMLDB_UTIL.HAS_RESTRICTED_CHARS +HTMLDB_UTIL.HOST_URL +HTMLDB_UTIL.HTML_PCT_GRAPH_MASK +HTMLDB_UTIL.INCREMENT_CALENDAR +HTMLDB_UTIL.IR_CLEAR +HTMLDB_UTIL.IR_DELETE_REPORT +HTMLDB_UTIL.IR_DELETE_SUBSCRIPTION +HTMLDB_UTIL.IR_FILTER +HTMLDB_UTIL.IR_RESET +HTMLDB_UTIL.IS_HIGH_CONTRAST_SESSION +HTMLDB_UTIL.IS_HIGH_CONTRAST_SESSION_YN +HTMLDB_UTIL.IS_LOGIN_PASSWORD_VALID +HTMLDB_UTIL.IS_SCREEN_READER_SESSION +HTMLDB_UTIL.IS_SCREEN_READER_SESSION_YN +HTMLDB_UTIL.IS_USERNAME_UNIQUE +HTMLDB_UTIL.JSON_FROM_ARRAY +HTMLDB_UTIL.JSON_FROM_ITEMS +HTMLDB_UTIL.JSON_FROM_SQL +HTMLDB_UTIL.JSON_FROM_STRING +HTMLDB_UTIL.KEYVAL_NUM +HTMLDB_UTIL.KEYVAL_VC2 +HTMLDB_UTIL.LOCK_ACCOUNT +HTMLDB_UTIL.MINIMUM_FREE_APPLICATION_ID +HTMLDB_UTIL.MONTH_CALENDAR +HTMLDB_UTIL.PASSWORD_FIRST_USE_OCCURRED +HTMLDB_UTIL.PAUSE +HTMLDB_UTIL.PREPARE_URL +HTMLDB_UTIL.PUBLIC_CHECK_AUTHORIZATION +HTMLDB_UTIL.PURGE_REGIONS_BY_APP +HTMLDB_UTIL.PURGE_REGIONS_BY_NAME +HTMLDB_UTIL.PURGE_REGIONS_BY_PAGE +HTMLDB_UTIL.REDIRECT_URL +HTMLDB_UTIL.REMOVE_PREFERENCE +HTMLDB_UTIL.REMOVE_SORT_PREFERENCES +HTMLDB_UTIL.REMOVE_USER +HTMLDB_UTIL.RESET_AUTHORIZATIONS +HTMLDB_UTIL.RESET_PW +HTMLDB_UTIL.RESET_SESSION_LANG +HTMLDB_UTIL.RESET_SESSION_TERRITORY +HTMLDB_UTIL.RESET_SESSION_TIME_ZONE +HTMLDB_UTIL.SAVEKEY_NUM +HTMLDB_UTIL.SAVEKEY_VC2 +HTMLDB_UTIL.SET_ATTRIBUTE +HTMLDB_UTIL.SET_AUTHENTICATION_RESULT +HTMLDB_UTIL.SET_BLOB +HTMLDB_UTIL.SET_BUILD_OPTION_STATUS +HTMLDB_UTIL.SET_COMPATIBILITY_MODE +HTMLDB_UTIL.SET_CUSTOM_AUTH_STATUS +HTMLDB_UTIL.SET_EDITION +HTMLDB_UTIL.SET_EMAIL +HTMLDB_UTIL.SET_FIRST_NAME +HTMLDB_UTIL.SET_LAST_NAME +HTMLDB_UTIL.SET_PREFERENCE +HTMLDB_UTIL.SET_REPORT_COLUMN_FORMAT +HTMLDB_UTIL.SET_SECURITY_GROUP_ID +HTMLDB_UTIL.SET_SESSION_HIGH_CONTRAST_OFF +HTMLDB_UTIL.SET_SESSION_HIGH_CONTRAST_ON +HTMLDB_UTIL.SET_SESSION_LANG +HTMLDB_UTIL.SET_SESSION_LIFETIME_SECONDS +HTMLDB_UTIL.SET_SESSION_MAX_IDLE_SECONDS +HTMLDB_UTIL.SET_SESSION_SCREEN_READER_OFF +HTMLDB_UTIL.SET_SESSION_SCREEN_READER_ON +HTMLDB_UTIL.SET_SESSION_STATE +HTMLDB_UTIL.SET_SESSION_TERRITORY +HTMLDB_UTIL.SET_SESSION_TIME_ZONE +HTMLDB_UTIL.SET_USERNAME +HTMLDB_UTIL.SHOW_HIGH_CONTRAST_MODE_TOGGLE +HTMLDB_UTIL.SHOW_SCREEN_READER_MODE_TOGGLE +HTMLDB_UTIL.STRING_TO_TABLE +HTMLDB_UTIL.STRONG_PASSWORD_CHECK +HTMLDB_UTIL.STRONG_PASSWORD_VALIDATION +HTMLDB_UTIL.SUBMIT_FEEDBACK +HTMLDB_UTIL.SUBMIT_FEEDBACK_FOLLOWUP +HTMLDB_UTIL.TABLE_TO_STRING +HTMLDB_UTIL.TODAY_CALENDAR +HTMLDB_UTIL.UNEXPIRE_END_USER_ACCOUNT +HTMLDB_UTIL.UNEXPIRE_WORKSPACE_ACCOUNT +HTMLDB_UTIL.UNLOCK_ACCOUNT +HTMLDB_UTIL.URL_ENCODE +HTMLDB_UTIL.USER_IN_GROUP +HTMLDB_UTIL.WEEKLY_CALENDAR +HTMLDB_UTIL.WORKSPACE_ACCOUNT_DAYS_LEFT +HTP. +HTP.ADDDEFAULTHTMLHDR +HTP.ADDRESS +HTP.ANCHOR +HTP.ANCHOR2 +HTP.APPLETCLOSE +HTP.APPLETOPEN +HTP.AREA +HTP.BASE +HTP.BASEFONT +HTP.BGSOUND +HTP.BIG +HTP.BLOCKQUOTECLOSE +HTP.BLOCKQUOTEOPEN +HTP.BODYCLOSE +HTP.BODYOPEN +HTP.BOLD +HTP.BR +HTP.CENTER +HTP.CENTERCLOSE +HTP.CENTEROPEN +HTP.CITE +HTP.CODE +HTP.COMMENT +HTP.DFN +HTP.DIRLISTCLOSE +HTP.DIRLISTOPEN +HTP.DIV +HTP.DLISTCLOSE +HTP.DLISTDEF +HTP.DLISTOPEN +HTP.DLISTTERM +HTP.DOWNLOAD_FILE +HTP.EM +HTP.EMPHASIS +HTP.ESCAPE_SC +HTP.FLUSH +HTP.FLUSH_CHARSET_CONVERT +HTP.FONTCLOSE +HTP.FONTOPEN +HTP.FORMCHECKBOX +HTP.FORMCLOSE +HTP.FORMFILE +HTP.FORMHIDDEN +HTP.FORMIMAGE +HTP.FORMOPEN +HTP.FORMPASSWORD +HTP.FORMRADIO +HTP.FORMRESET +HTP.FORMSELECTCLOSE +HTP.FORMSELECTOPEN +HTP.FORMSELECTOPTION +HTP.FORMSUBMIT +HTP.FORMTEXT +HTP.FORMTEXTAREA +HTP.FORMTEXTAREA2 +HTP.FORMTEXTAREACLOSE +HTP.FORMTEXTAREAOPEN +HTP.FORMTEXTAREAOPEN2 +HTP.FRAME +HTP.FRAMESETCLOSE +HTP.FRAMESETOPEN +HTP.GET_DOWNLOAD_FILES_LIST +HTP.GET_LINE +HTP.GET_PAGE +HTP.GET_PAGE_CHARSET_CONVERT +HTP.GET_PAGE_RAW +HTP.HEADCLOSE +HTP.HEADER +HTP.HEADOPEN +HTP.HR +HTP.HTITLE +HTP.HTMLCLOSE +HTP.HTMLOPEN +HTP.IMG +HTP.IMG2 +HTP.INIT +HTP.ISINDEX +HTP.ITALIC +HTP.KBD +HTP.KEYBOARD +HTP.LINE +HTP.LINKREL +HTP.LINKREV +HTP.LISTHEADER +HTP.LISTINGCLOSE +HTP.LISTINGOPEN +HTP.LISTITEM +HTP.MAILTO +HTP.MAPCLOSE +HTP.MAPOPEN +HTP.MENULISTCLOSE +HTP.MENULISTOPEN +HTP.META +HTP.NEXTID +HTP.NL +HTP.NOBR +HTP.NOFRAMESCLOSE +HTP.NOFRAMESOPEN +HTP.OLISTCLOSE +HTP.OLISTOPEN +HTP.P +HTP.PARA +HTP.PARAGRAPH +HTP.PARAM +HTP.PLAINTEXT +HTP.PRECLOSE +HTP.PREOPEN +HTP.PRINT +HTP.PRINTS +HTP.PRINT_HEADER +HTP.PRN +HTP.PS +HTP.PUTRAW +HTP.RESET_GET_PAGE +HTP.S +HTP.SAMPLE +HTP.SCRIPT +HTP.SETHTTPCHARSET +HTP.SET_TRANSFER_MODE +HTP.SHOWPAGE +HTP.SMALL +HTP.STRIKE +HTP.STRONG +HTP.STYLE +HTP.SUB +HTP.SUP +HTP.TABLECAPTION +HTP.TABLECLOSE +HTP.TABLEDATA +HTP.TABLEHEADER +HTP.TABLEOPEN +HTP.TABLEROWCLOSE +HTP.TABLEROWOPEN +HTP.TELETYPE +HTP.TITLE +HTP.ULISTCLOSE +HTP.ULISTOPEN +HTP.UNDERLINE +HTP.VARIABLE +HTP.WBR +HTTPURITYPE.CREATEURI +HTTPURITYPE.GETBLOB +HTTPURITYPE.GETCLOB +HTTPURITYPE.GETCONTENTTYPE +HTTPURITYPE.GETEXTERNALURL +HTTPURITYPE.GETURL +HTTPURITYPE.GETXML +HTTPURITYPE.HTTPURITYPE +HTTP_ENABLED +HV_ID +HWMSIZE +HWM_BROKERED +HWM_MESSAGE_CREATE_TIME +HWM_MESSAGE_NUMBER +HWM_POSITION +HWM_TIME +IAS_TEMPLATE_ID +IAS_TEMPLATE_NAME +ID1 +ID1_TAG +ID2 +ID2_TAG +IDENTIFIER +IDENTITY +IDENTITY$_PRIV. +IDENTITY$_PRIV.CREATE_ROW +IDENTITY$_PRIV.DELETE_BY_FACTOR_ID#_ +IDENTITY$_PRIV.DELETE_ROW +IDENTITY$_PRIV.READ_BY_FACTOR_ID#_ +IDENTITY$_PRIV.READ_ROW +IDENTITY$_PRIV.UPDATE_ROW +IDENTITY_COLUMN +IDENTITY_MAP$_PRIV. +IDENTITY_MAP$_PRIV.CREATE_ROW +IDENTITY_MAP$_PRIV.DELETE_BY_FACTOR_LINK_ID#_ +IDENTITY_MAP$_PRIV.DELETE_BY_IDENTITY_ID#_ +IDENTITY_MAP$_PRIV.DELETE_BY_OPERATION_CODE_ID#_ +IDENTITY_MAP$_PRIV.DELETE_ROW +IDENTITY_MAP$_PRIV.READ_BY_FACTOR_LINK_ID#_ +IDENTITY_MAP$_PRIV.READ_BY_IDENTITY_ID#_ +IDENTITY_MAP$_PRIV.READ_BY_OPERATION_CODE_ID#_ +IDENTITY_MAP$_PRIV.READ_ROW +IDENTITY_MAP$_PRIV.UPDATE_ROW +IDENTITY_OPTIONS +IDLE +IDLE_BLKR_SESSIONS_KILLED +IDLE_BLKR_SESS_KILLED +IDLE_SESSIONS_KILLED +IDLE_SESS_KILLED +IDLE_TIME_CUR +IDLE_TIME_TOTAL +IDX +ID_TYPE +IF_NAME +IF_NONDURABLE_SUBSCRIBER +IGNORED_HANG +IGNORED_WORKAREAS_COUNT +IGNORE_DDL +IGNORE_OPTIM_EMBEDDED_HINTS +IGNORE_ROW_ON_DUPKEY_INDEX +IGNORE_SCN +IGNORE_WHERE_CLAUSE +IM. +IM.COMPATIBILITYINIT +IMCU_ADDR +IMMEDIATE_GETS +IMMEDIATE_MISSES +IMPACT +IMPACT1 +IMPACT2 +IMPACT3 +IMPACT4 +IMPACTS +IMPACT_DESC +IMPACT_FLAGS +IMPACT_ID +IMPACT_NAME +IMPACT_SCOPE +IMPACT_SEVERITY +IMPACT_STR +IMPACT_STR1 +IMPACT_STR2 +IMPACT_STR3 +IMPACT_STR4 +IMPACT_TYPE +IMPLEMENTATION_NAME +IMPLEMENTATION_SCHEMA +IMPLEMENTATION_TYPE +IMPLEMENTATION_TYPE_SCHEMA +IMPLEMENTATION_VERSION +IMPLICIT_DESTROY +IMPLIED_PRIVILEGE +IMPLTYPENAME +IMPLTYPEOWNER +IMPORTANCE +IMPT_NATURE +IM_SCANS +IM_SCAN_BYTES_INMEMORY +IM_SCAN_BYTES_UNCOMPRESSED +INACTIVE_TIMEOUT +INACTIVITY_TIMEOUT +INC +INC# +INCARNATION +INCARNATION# +INCARNATION_NUM +INCARNATION_SCN +INCARNATION_TIME +INCIDENT_CNT +INCIDENT_ID +INCLUDE +INCLUDED_IN_DATABASE_BACKUP +INCLUDE_COLUMN +INCLUDE_NEW_VALUES +INCLUDE_TAGGED_LCR +INCLUDE_VERSION +INCOMPLETE +INCOMP_LTRL_MISMATCH +INCREFRESHTIM +INCREMENTAL +INCREMENTAL_CHANGE# +INCREMENTAL_LEVEL +INCREMENTAL_SIZE +INCREMENT_BY +INCRSIZE +INC_COUNT +INC_DMPFILE +INC_REFRESHABLE +INC_SCN +INC_TIME +IND +INDEX +INDEXING +INDEXNAME +INDEXTYPE_NAME +INDEX_ASC +INDEX_BY +INDEX_CLEANUP_COUNT +INDEX_CLEANUP_CPU_TIME +INDEX_CLEANUP_ELAPSED_TIME +INDEX_COLUMN +INDEX_COMBINE +INDEX_DESC +INDEX_FFS +INDEX_HISTOGRAM +INDEX_JOIN +INDEX_NAME +INDEX_NUMBER +INDEX_OWNER +INDEX_RRS +INDEX_RS_ASC +INDEX_RS_DESC +INDEX_SS +INDEX_SS_ASC +INDEX_SS_DESC +INDEX_STATS +INDEX_TYPE +INDEX_VALUE +INDICATOR +INDX +INFERRED +INFO +INFO_FIELD_1 +INFO_FIELD_2 +INFO_FIELD_3 +INFO_FIELD_4 +INFO_ID +INHERITANCE_TYPE +INHERITED +INHERITED_FROM +INITIALIZER +INITIAL_ALLOCATION +INITIAL_DIF_COUNT +INITIAL_EXTENT +INITIAL_GROUP +INITIAL_RELEASE +INITIAL_RSRC_CONSUMER_GROUP +INITIAL_SIZE +INITJVMAUX. +INITJVMAUX.ABORT_MESSAGE +INITJVMAUX.ALTER_IF_NOT_PRESENT +INITJVMAUX.CHECK_SIZES_FOR_CJS +INITJVMAUX.COMPARE_RELEASES +INITJVMAUX.CREATE_IF_NOT_PRESENT +INITJVMAUX.CREATE_PROPERTY_DEFS_TABLE +INITJVMAUX.CURRENTEXECID +INITJVMAUX.CURRENT_RELEASE_VERSION +INITJVMAUX.DEBUG_OUTPUT +INITJVMAUX.DROP_SROS +INITJVMAUX.DROP_SYS_CLASS +INITJVMAUX.DROP_SYS_RESOURCE +INITJVMAUX.DRP +INITJVMAUX.ENDACTION +INITJVMAUX.ENDACTION_ASLOAD +INITJVMAUX.ENDACTION_OUTARG +INITJVMAUX.ENDSTEP +INITJVMAUX.EXEC +INITJVMAUX.JVMUSCRIPT +INITJVMAUX.JVMVERSION +INITJVMAUX.REGISTRYSTATUS +INITJVMAUX.ROLLBACKCLEANUP +INITJVMAUX.ROLLBACKSET +INITJVMAUX.ROLLBACKSETUP +INITJVMAUX.SETLOADED +INITJVMAUX.SETLOADING +INITJVMAUX.SET_ALT_TABLESPACE_LIMIT +INITJVMAUX.SET_DEBUG_OUTPUT_OFF +INITJVMAUX.SET_DEBUG_OUTPUT_ON +INITJVMAUX.STARTACTION +INITJVMAUX.STARTACTION_OUTARG +INITJVMAUX.STARTSTEP +INITJVMAUX.STARTUP_PENDING_P +INITJVMAUX.VALIDATE_JAVAVM +INITREQ_ELAPSED_TIME +INITSTATUS +INIT_TIME +INI_TRANS +INLINE +INLINE_XMLTYPE_NT +INMEMORY +INMEMORY_COMPRESSION +INMEMORY_DISTRIBUTE +INMEMORY_DUPLICATE +INMEMORY_PRIORITY +INMEMORY_PRUNING +INMEMORY_SIZE +INNER_CLASSES +INNER_INDEX +INNER_TABLE_COLUMN +INNER_TABLE_NAME +INNER_TABLE_OWNER +INPUT_BYTES +INPUT_BYTES_DISPLAY +INPUT_BYTES_PER_SEC +INPUT_BYTES_PER_SEC_DISPLAY +INPUT_FILE_SCAN_ONLY +INPUT_TYPE +INS +INSERTABLE +INSERTED_ROWS +INSERTS +INSERT_COLLISIONS +INSERT_FREQ +INSERT_ORD_LINE. +INST +INSTANCE +INSTANCES +INSTANCE_CAGING +INSTANCE_ID +INSTANCE_MODE +INSTANCE_NAME +INSTANCE_NUM +INSTANCE_NUM. +INSTANCE_NUMBER +INSTANCE_ROLE +INSTANCE_STICKINESS +INSTANTIABLE +INSTANTIATION_DATE +INSTANTIATION_SCN +INSTEAD_OF_ROW +INSTID +INSTNAME +INST_DRTLD_MISMATCH +INST_FLAG +INST_FLAG2 +INST_ID +INST_LOCK_ID1 +INST_LOCK_ID2 +INST_LOCK_RELEASE +INST_LOCK_REQUEST +INST_LOCK_TYPE +INST_NAME +INST_NUMBER +INSUFF_PRIVS +INSUFF_PRIVS_REM +INTEGRITY_ALG +INTERACTIONEXECUTE. +INTERESTING +INTERFACE +INTERFACES +INTERFACE_INDEX +INTERFACE_NAME +INTERFACE_VERSION +INTERIM_OBJECT_NAME +INTERIM_OBJECT_OWNER +INTERNAL_CHECK +INTERNAL_COLUMN_ID +INTERNAL_METRIC_CATEGORY +INTERNAL_METRIC_NAME +INTERNAL_PACKAGE_EXISTS +INTERNAL_PKG_NAME +INTERNAL_PROC_NAME +INTERNAL_TRIGGER_TYPE +INTERNAL_USE +INTERVAL +INTERVAL_SIZE +INTSIZE +INTSIZE_CSEC +INT_OBJNAME +INVALID +INVALIDATIONS +INVALIDATIONS_DELTA +INVALIDATIONS_TOTAL +INVALID_BLOCKS +INVALID_ROWS +INVERSE +INVERT +INVERTED_PRINCIPAL +INVOCATIONS +INVOCATION_ID +INVOCATION_TIME +INVOKING_PACKAGE +INVOKING_PACKAGE_OWNER +INVOKING_PROCEDURE +INVOKING_USER +IN_BIND +IN_CONNECTION_MGMT +IN_CURSOR_CLOSE +IN_CYCLE +IN_HARD_PARSE +IN_INMEMORY_POPULATE +IN_INMEMORY_PREPOPULATE +IN_INMEMORY_QUERY +IN_INMEMORY_REPOPULATE +IN_INMEMORY_TREPOPULATE +IN_JAVA_EXECUTION +IN_NET +IN_OUT +IN_PARSE +IN_PLSQL_COMPILATION +IN_PLSQL_EXECUTION +IN_PLSQL_RPC +IN_ROW +IN_SEQUENCE_LOAD +IN_SQL_EXECUTION +IN_TRANSACTION +IN_WAIT +IN_WAIT_SECS +IOPERREQUEST +IOT_NAME +IOT_REDUNDANT_PKEY_ELIM +IOT_TYPE +IOWAITPERREQUEST +IOWAIT_DELTA +IOWAIT_TOTAL +IO_CAPABLE +IO_CELL_OFFLOAD_ELIGIBLE_BYTES +IO_CELL_OFFLOAD_RETURNED_BYTES +IO_CELL_UNCOMPRESSED_BYTES +IO_COMPONENT_ID +IO_COST +IO_COUNT +IO_INTERCONNECT_BYTES +IO_INTERCONNECT_BYTES_DELTA +IO_INTERCONNECT_BYTES_TOTAL +IO_LATENCY +IO_MB_AVG +IO_MB_SUM +IO_MB_SUMX2 +IO_MEGABYTES +IO_OFFLOAD_ELIG_BYTES_DELTA +IO_OFFLOAD_ELIG_BYTES_TOTAL +IO_OFFLOAD_RETURN_BYTES_DELTA +IO_OFFLOAD_RETURN_BYTES_TOTAL +IO_OFFSET +IO_REQUESTS +IO_REQUESTS_AVG +IO_REQUESTS_SUM +IO_REQUESTS_SUMX2 +IO_SERVICE_TIME +IO_SERVICE_WAITS +IO_SHARES +IO_SIZE +IO_TIME_MAX +IO_TIME_TOTAL +IO_TYPE +IP_ADDR +IP_ADDRESS +ISADJUSTED +ISBASIC +ISCURRENT +ISDEFAULT +ISDEPRECATED +ISINSTANCE_MODIFIABLE +ISMODIFIED +ISPDB_MODIFIABLE +ISSES_MODIFIABLE +ISSPECIFIED +ISSUER +ISSYS_MODIFIABLE +ISXMLTYPETABLE. +IS_ABSTRACT +IS_ACTIVE +IS_ADAPTIVE_PLAN +IS_AGGREGATE +IS_ALTER_COLUMN. +IS_ANNOTATION +IS_AWR_SAMPLE +IS_BACKUP +IS_BIND_AWARE +IS_BIND_SENSITIVE +IS_CAPTURED +IS_COMPILED +IS_CREATING_NESTED_TABLE. +IS_CUSTOM_AGGREGATE +IS_DATA_MASKED +IS_DEBUG +IS_DEFAULT +IS_DISABLED +IS_DML_DATA_DIVERGENCE +IS_DROP_COLUMN. +IS_ENUM +IS_ERROR_DIVERGENCE +IS_FINAL +IS_FINAL_PLAN +IS_FIRST_IN_LOOP +IS_FULL_SQLTEXT +IS_GRANT +IS_GV +IS_HEAD_PIECE +IS_INNER +IS_INTERFACE +IS_LAST_IN_LOOP +IS_MODIFIABLE_ANYTIME +IS_MULTI_LINGUAL +IS_NATIVE +IS_NESTED +IS_OBSOLETE +IS_OUTPUT +IS_PUBLIC +IS_QUERY_DATA_DIVERGENCE +IS_RAGGED +IS_RECOVERY_DEST_FILE +IS_RECYCLE +IS_REF +IS_REOPTIMIZABLE +IS_REPLAYED +IS_RESOLVED_ADAPTIVE_PLAN +IS_RESULT_CACHE +IS_SCOPED +IS_SECURE_APPLICATION_ROLE. +IS_SERVERERROR. +IS_SHAREABLE +IS_SKIP_LEVEL +IS_SOLVED +IS_SPARSE +IS_SQLID_CURRENT +IS_STATIC +IS_STRICTFP +IS_STS +IS_SYNCHRONIZED +IS_SYNTHETIC +IS_SYSTEM_TASK_ONLY +IS_THREAD_FAILURE +IS_TOP_PLAN +IS_TRANSACTION +IS_TRANSIENT +IS_USER +IS_VALID +IS_VOLATILE +IS_VPD_ENABLED. +ITEM +ITEM_NAME +ITEM_VALUE +ITL_CNT +ITL_WAITS_DELTA +ITL_WAITS_TOTAL +ITYP_NAME +ITYP_OWNER +JAVASLEEP. +JAVAVM_SYS. +JAVAVM_SYS.REHOTLOAD +JAVAVM_SYS.UNINSTALL_DBHADOOP +JAVA_EXEC_TIME +JAVA_POOL_SIZE_FACTOR +JAVA_POOL_SIZE_FOR_ESTIMATE +JAVA_XA. +JAVA_XA.XA_COMMIT +JAVA_XA.XA_COMMIT_NEW +JAVA_XA.XA_DOTWOPHASE +JAVA_XA.XA_END +JAVA_XA.XA_END_NEW +JAVA_XA.XA_FORGET +JAVA_XA.XA_FORGET_NEW +JAVA_XA.XA_PREPARE +JAVA_XA.XA_PREPARE_NEW +JAVA_XA.XA_ROLLBACK +JAVA_XA.XA_ROLLBACK_NEW +JAVA_XA.XA_START +JAVA_XA.XA_START_NEW +JAVA_XA.XA_THINTWOPHASE +JAVEXEC_TIME_DELTA +JAVEXEC_TIME_TOTAL +JOB +JOB.JOB +JOBARG.JOBARG +JOBATTR.JOBATTR +JOBS_COMPLETED +JOBS_CREATED +JOBS_STARTED +JOB_ACTION +JOB_CLASS +JOB_CLASS_NAME +JOB_CONTAINER +JOB_CREATOR +JOB_DEFINITION.JOB_DEFINITION +JOB_DESCRIPTION +JOB_DEST_ID +JOB_DURATION +JOB_END_TIME +JOB_ERROR +JOB_FREQUENCY +JOB_ID +JOB_INFO +JOB_LATENCY +JOB_MODE +JOB_NAME +JOB_NEXT_RUN_DATE +JOB_OWNER +JOB_PREFIX +JOB_PRIORITY +JOB_SCHEDULER_STATUS +JOB_SEQ +JOB_START_TIME +JOB_STATE +JOB_STATUS +JOB_STYLE +JOB_SUBNAME +JOB_TYPE +JOB_WEIGHT +JOIN_COLUMN_COUNT +JOIN_CONDITION +JOIN_INDEX +JOIN_KEY_COUNT +JOIN_KEY_ID +JOIN_POS +JOIN_STRUCTURE_SIZE +JOURNAL_ENTRY +JOURNAL_ENTRY_SEQ +JOURNAL_ENTRY_TYPE +JVMFCB. +JVMFCB.EXIT +JVMFCB.INIT +JVMFCB.PUT +JVMRJBC. +JVMRJBC.DONE +JVMRJBC.GETLOB +JVMRJBC.GETPATH +JVMRJBC.INIT +JVMRJBC.PUTLOB +JVMRJBC.PUTPATH +JVMRJBCINV. +JVMRJBCINV.DEPLOY_COPY +JVMRJBCINV.DEPLOY_INVOKE +JVMRJBCINV.DEPLOY_OPEN +JVMRJBCINV.DROP_JAR +JVMRJBCINV.FINISH_LOADING_JAR +JVMRJBCINV.HANDLEMD5 +JVMRJBCINV.JAR_STATUS +JVMRJBCINV.RJBC_DONE +JVMRJBCINV.RJBC_FLAGS +JVMRJBCINV.RJBC_INIT +JVMRJBCINV.RJBC_NORMALIZE +JVMRJBCINV.RJBC_OUTPUT +JVMRJBCINV.RJBC_REQUEST +JVMRJBCINV.RJBC_RESPOND +JVMRJBCINV.RJBC_SESSID +JVMRJBCINV.START_LOADING_JAR +KADDR +KBYTES_READ +KBYTES_WRITTEN +KDZSTORAGETYPE. +KEEP +KEEP_FILES +KEEP_OPTIONS +KEEP_UNTIL +KEEP_VALUE +KEPT +KEPT_VERSIONS +KEY +KEY1 +KEY2 +KEY3 +KEY4 +KEYSIZE +KEYSTORE_TYPE +KEYWORD +KEY_DATA_TYPE +KEY_EXPRESSION +KEY_ID +KEY_LENGTH +KEY_NAME +KEY_POSITION +KEY_SIZE +KEY_USE +KEY_VALUE +KGLLKHDL +KGLLKMOD +KGLLKREQ +KGLLKTYPE +KGLLKUSE +KIND +KNOWN_AGENTS +KNOWN_STALE +KUBSAGT. +KUBSAGT.DESCRIBE_CLOSE +KUBSAGT.DESCRIBE_GETINFO +KUBSAGT.DESCRIBE_OPEN +KUBSAGT.FETCH_CLOSE +KUBSAGT.FETCH_DATA +KUBSAGT.FETCH_INIT +KUBSAGT.FETCH_OPEN +KUPC$QUEUE. +KUPC$QUEUE.TRANSCEIVE +KUPC$QUEUE_INT. +KUPC$QUEUE_INT.ATTACH_QUEUE +KUPC$QUEUE_INT.ATTACH_QUEUES +KUPC$QUEUE_INT.CREATE_QUEUES +KUPC$QUEUE_INT.DELETE_QUEUES +KUPC$QUEUE_INT.DETACH_QUEUE +KUPC$QUEUE_INT.DETACH_QUEUES +KUPC$QUEUE_INT.GET_STATUS +KUPC$QUEUE_INT.GET_STATUS_MSG_COUNT +KUPC$QUEUE_INT.GET_SUBSCRIBER_COUNT +KUPC$QUEUE_INT.ISREMOTE +KUPC$QUEUE_INT.PREPARE_QUEUE_TABLE +KUPC$QUEUE_INT.PUT_STATUS +KUPC$QUEUE_INT.RECEIVE +KUPC$QUEUE_INT.SEND +KUPC$QUEUE_INT.SET_DEBUG +KUPC$QUEUE_INT.TRANSCEIVE +KUPC$QUE_INT. +KUPC$QUE_INT.ATTACH_QUEUE +KUPC$QUE_INT.ATTACH_QUEUES +KUPC$QUE_INT.CREATE_QUEUES +KUPC$QUE_INT.DELETE_QUEUES +KUPC$QUE_INT.DETACH_QUEUE +KUPC$QUE_INT.DETACH_QUEUES +KUPC$QUE_INT.GET_STATUS +KUPC$QUE_INT.GET_STATUS_MSG_COUNT +KUPC$QUE_INT.GET_SUBSCRIBER_COUNT +KUPC$QUE_INT.PREPARE_QUEUE_TABLE +KUPC$QUE_INT.PUT_STATUS +KUPC$QUE_INT.RECEIVE +KUPC$QUE_INT.SEND +KUPC$QUE_INT.SET_DEBUG +KUPC$QUE_INT.TRANSCEIVE_INT +KUPC$_ADD_DEVICE.KUPC$_ADD_DEVICE +KUPC$_ADD_FILE.KUPC$_ADD_FILE +KUPC$_API_ACK.KUPC$_API_ACK +KUPC$_BAD_FILE.KUPC$_BAD_FILE +KUPC$_DATA_FILTER.KUPC$_DATA_FILTER +KUPC$_DATA_REMAP.KUPC$_DATA_REMAP +KUPC$_DEVICE_IDENT.KUPC$_DEVICE_IDENT +KUPC$_DISK_FILE.KUPC$_DISK_FILE +KUPC$_ENCODED_PWD.KUPC$_ENCODED_PWD +KUPC$_ESTIMATE_JOB.KUPC$_ESTIMATE_JOB +KUPC$_EXIT.KUPC$_EXIT +KUPC$_FILEINFO.KUPC$_FILEINFO +KUPC$_FILE_LIST.KUPC$_FILE_LIST +KUPC$_FIXUP_VIRTUAL_COLUMN.KUPC$_FIXUP_VIRTUAL_COLUMN +KUPC$_GET_WORK.KUPC$_GET_WORK +KUPC$_JOBINFO.ADDERROR +KUPC$_JOBINFO.ADDLINE +KUPC$_JOBINFO.ADDLOGENTRY +KUPC$_JOBINFO.ADDTIMESTAMP +KUPC$_JOBINFO.CREATEJOBINFO +KUPC$_JOBINFO.FORMAT +KUPC$_JOBINFO.KUPC$_JOBINFO +KUPC$_JOBINFO.PRINTJOBINFO +KUPC$_LOAD_DATA.KUPC$_LOAD_DATA +KUPC$_LOAD_METADATA.KUPC$_LOAD_METADATA +KUPC$_LOG_ENTRY.KUPC$_LOG_ENTRY +KUPC$_LOG_ERROR.KUPC$_LOG_ERROR +KUPC$_MASTERERROR.KUPC$_MASTERERROR +KUPC$_MASTERJOBINFO.KUPC$_MASTERJOBINFO +KUPC$_MASTER_KEY_EXCHANGE.KUPC$_MASTER_KEY_EXCHANGE +KUPC$_MDFILEPIECE.KUPC$_MDFILEPIECE +KUPC$_MESSAGE.ISDATAGRAM +KUPC$_MESSAGE.ISREQUEST +KUPC$_MESSAGE.ISRESPONSE +KUPC$_METADATA_FILTER.KUPC$_METADATA_FILTER +KUPC$_METADATA_REMAP.KUPC$_METADATA_REMAP +KUPC$_METADATA_TRANSFORM.KUPC$_METADATA_TRANSFORM +KUPC$_OPEN.KUPC$_OPEN +KUPC$_POST_MT_INIT.KUPC$_POST_MT_INIT +KUPC$_PREPARE_DATA.KUPC$_PREPARE_DATA +KUPC$_RECOMP.KUPC$_RECOMP +KUPC$_RELEASE_FILES.KUPC$_RELEASE_FILES +KUPC$_RESTART.KUPC$_RESTART +KUPC$_RESTORE_LOGGING.KUPC$_RESTORE_LOGGING +KUPC$_SEQUENTIAL_FILE.KUPC$_SEQUENTIAL_FILE +KUPC$_SET_PARALLEL.KUPC$_SET_PARALLEL +KUPC$_SET_PARAMETER.KUPC$_SET_PARAMETER +KUPC$_SHADOW_KEY_EXCHANGE.KUPC$_SHADOW_KEY_EXCHANGE +KUPC$_SQL_FILE_JOB.KUPC$_SQL_FILE_JOB +KUPC$_START_JOB.KUPC$_START_JOB +KUPC$_STOP_JOB.KUPC$_STOP_JOB +KUPC$_TABLE_DATA_ARRAY.KUPC$_TABLE_DATA_ARRAY +KUPC$_TAB_MT_COLS. +KUPC$_UNLOAD_DATA.KUPC$_UNLOAD_DATA +KUPC$_UNLOAD_METADATA.KUPC$_UNLOAD_METADATA +KUPC$_WORKERERROR.KUPC$_WORKERERROR +KUPC$_WORKER_EXIT.KUPC$_WORKER_EXIT +KUPC$_WORKER_FILE.KUPC$_WORKER_FILE +KUPC$_WORKER_FILE_LIST.KUPC$_WORKER_FILE_LIST +KUPC$_WORKER_GET_PWD.KUPC$_WORKER_GET_PWD +KUPC$_WORKER_LOG_ENTRY.KUPC$_WORKER_LOG_ENTRY +KUPCC. +KUPD$DATA. +KUPD$DATA.ADD_FILE +KUPD$DATA.ET_CREATE_ERROR_TABLE +KUPD$DATA.FETCH_INSERT_STMT +KUPD$DATA.OPEN +KUPD$DATA.SET_DEBUG +KUPD$DATA.SET_PARAMETER +KUPD$DATA.START_JOB +KUPD$DATA_INT. +KUPD$DATA_INT.FETCH_METADATA +KUPD$DATA_INT.GET_TAB_INFO +KUPD$DATA_INT.LOAD_DATA +KUPD$DATA_INT.SELECT_MODE +KUPD$DATA_INT.SEND_TRACE_MSG +KUPD$DATA_INT.UNLOAD_DATA +KUPF$FILE. +KUPF$FILE.ADD_DEVICE +KUPF$FILE.ADD_FILE +KUPF$FILE.ADD_TDX_ROW_CB +KUPF$FILE.ALLOCATE_DEVICE +KUPF$FILE.CHECK_ACCESS +KUPF$FILE.CHECK_FATAL_ERROR +KUPF$FILE.CLOSE_CONTEXT +KUPF$FILE.DELETE_UNUSED_FILE_REFS +KUPF$FILE.FILE_REQUEST +KUPF$FILE.FILE_REQUEST_NAK +KUPF$FILE.FLUSH_LOB +KUPF$FILE.GET_BLKBUF_SIZES +KUPF$FILE.GET_DEFAULT_FILENAME +KUPF$FILE.GET_DUMPFILE_INFO +KUPF$FILE.GET_FILE_ATTRS +KUPF$FILE.GET_FILE_INFO +KUPF$FILE.GET_FILE_LIST +KUPF$FILE.GET_FORMATTED_TIME +KUPF$FILE.GET_FULL_FILENAME +KUPF$FILE.GET_MAX_CSWIDTH +KUPF$FILE.INIT +KUPF$FILE.INIT_CB +KUPF$FILE.INIT_TDX_STATS +KUPF$FILE.IS_DUMPFILE_SET_CONSISTENT +KUPF$FILE.JOB_MODES +KUPF$FILE.LOCATE_MASTER +KUPF$FILE.LOG_MESSAGES +KUPF$FILE.MARK_FILES_AS_UNUSABLE +KUPF$FILE.MASTER_TABLE_UNLOAD_STARTED +KUPF$FILE.OPEN_CONTEXT +KUPF$FILE.READ_LOB +KUPF$FILE.RELEASE_FILE +KUPF$FILE.RELEASE_FILES +KUPF$FILE.REQUEST_ENCPWD +KUPF$FILE.REQUEST_FILE +KUPF$FILE.RESET_EOF +KUPF$FILE.SET_DEBUG +KUPF$FILE.TERM +KUPF$FILE.TRACE +KUPF$FILE.UPD_FILE_COMP_BYTES +KUPF$FILE.UPD_TDX_FILEINFO_CB +KUPF$FILE.UPD_TDX_STATS_CB +KUPF$FILE.VERIFY_DUMPFILE_SET +KUPF$FILE.WRITE_LOB +KUPF$FILE_INT. +KUPF$FILE_INT.CLOSE_CONTEXT +KUPF$FILE_INT.CREATE_DUMP_FILE +KUPF$FILE_INT.CREATE_KEY_INFO +KUPF$FILE_INT.DELETE_DUMP_FILE +KUPF$FILE_INT.ENCODE_PWD +KUPF$FILE_INT.EXAMINE_DUMP_FILE +KUPF$FILE_INT.FLUSH_LOB +KUPF$FILE_INT.GET_BLKBUF_SIZES +KUPF$FILE_INT.GET_DEBUG_EVENT +KUPF$FILE_INT.GET_DEFAULT_FILENAME +KUPF$FILE_INT.GET_ENCODED_PWD +KUPF$FILE_INT.GET_FORMATTED_TIME +KUPF$FILE_INT.GET_FULL_FILENAME +KUPF$FILE_INT.GET_MAX_CSWIDTH +KUPF$FILE_INT.GTOP +KUPF$FILE_INT.INIT +KUPF$FILE_INT.OPEN_CONTEXT +KUPF$FILE_INT.PARSE_FILENAME +KUPF$FILE_INT.READ_LOB +KUPF$FILE_INT.RELEASE_FILES +KUPF$FILE_INT.SET_DEBUG +KUPF$FILE_INT.SET_TRANS_PARAMS +KUPF$FILE_INT.TERM +KUPF$FILE_INT.VERIFY_KEY_INFO +KUPF$FILE_INT.WRITE_LOB +KUPM$MCP. +KUPM$MCP.CLOSE_JOB +KUPM$MCP.DISPATCH +KUPM$MCP.FILE_LOG_MESSAGE +KUPM$MCP.FILE_TO_WORKER +KUPM$MCP.GET_ENDIANNESS +KUPM$MCP.MAIN +KUPM$MCP.MAINLOOP +KUPM$MCP.SET_DEBUG +KUPM$MCP.VALIDATE_EXPRESSION +KUPP$PROC. +KUPP$PROC.ANY_DEBUG_TRACE_INFO +KUPP$PROC.APPLY_TRACE_DEBUG_RULES +KUPP$PROC.CHANGE_USER +KUPP$PROC.CHECK_FOR_INTERRUPT +KUPP$PROC.CHECK_WORKER_STATUS +KUPP$PROC.CREATE_MASTER_PROCESS +KUPP$PROC.CREATE_WORKER_PROCESSES +KUPP$PROC.DELETE_WORKER_PROCESSES +KUPP$PROC.DISABLE_MULTIPROCESS +KUPP$PROC.ENABLE_FLASHBACK_DMLS +KUPP$PROC.ENABLE_MULTIPROCESS +KUPP$PROC.GET_NLS_ALTER_SESSION +KUPP$PROC.GET_WORKER_EXCEPTION +KUPP$PROC.INIT_DONE +KUPP$PROC.IS_MULTIPROCESS_ENABLED +KUPP$PROC.JOB_ALIVE +KUPP$PROC.OPTION_ENABLED +KUPP$PROC.SET_DEBUG +KUPP$PROC.SET_PROFILING +KUPP$PROC.SET_REMOTE_WORKER +KUPP$PROC.SET_TRACE_DEBUG +KUPP$PROC.TOTAL_WORKERS_ALIVE +KUPP$PROC.WHATS_MY_ID +KUPP$PROC.WHATS_MY_NAME +KUPP$PROC.WHAT_AM_I +KUPP$PROC.WHAT_ORACLE_PRODUCT +KUPP$PROC.WORKER_PROCESS_INIT +KUPP$PROC.WORKER_SERVICE_INIT +KUPU$UTILITIES. +KUPU$UTILITIES.UPDATEFEATURETABLE +KUPU$UTILITIES.WRITEAUDITRECORD +KUPU$UTILITIES_INT. +KUPU$UTILITIES_INT.CHECK_ENCRYPTION_WALLET +KUPU$UTILITIES_INT.DECODE +KUPU$UTILITIES_INT.DH_CHECK_DIGESTS +KUPU$UTILITIES_INT.DH_DECRYPT +KUPU$UTILITIES_INT.DH_ENCRYPT +KUPU$UTILITIES_INT.DH_FREE_HANDLE +KUPU$UTILITIES_INT.DH_GEN_SHARED_KEY +KUPU$UTILITIES_INT.DH_GET_PUBLIC_KEY +KUPU$UTILITIES_INT.DH_NEW_HANDLE +KUPU$UTILITIES_INT.ENCODE +KUPU$UTILITIES_INT.GET_REMOTE_DBLINK_USER +KUPU$UTILITIES_INT.GET_SESSION_STAT +KUPU$UTILITIES_INT.INTALGCONV +KUPU$UTILITIES_INT.IS_SUPERSET +KUPU$UTILITIES_INT.UPDATEFEATURETABLE +KUPU$UTILITIES_INT.WRITEAUDITRECORD +KUPV$FT. +KUPV$FT.ATTACH_JOB +KUPV$FT.BUILD_COL_LIST +KUPV$FT.CREATE_GBL_TEMPORARY_MASTERS +KUPV$FT.ERROR_TEXT +KUPV$FT.FLUSH_TIMINGS +KUPV$FT.GET_FORMATTED_TIME +KUPV$FT.HAS_PRIVS +KUPV$FT.MESSAGE_TEXT +KUPV$FT.OPEN_JOB +KUPV$FT.RECORD_DELTA_TIMINGS +KUPV$FT.SET_APPLICATION_ROLE +KUPV$FT.SET_LONGOPS +KUPV$FT.START_TIMINGS +KUPV$FT_INT. +KUPV$FT_INT.ACTIVE_JOB +KUPV$FT_INT.ASSIGN_JOB +KUPV$FT_INT.ATTACH_POSSIBLE +KUPV$FT_INT.ATTACH_TO_JOB +KUPV$FT_INT.CHECK_USER_VALID +KUPV$FT_INT.CREATE_NEW_JOB +KUPV$FT_INT.DELETE_JOB +KUPV$FT_INT.DELETE_MASTER_TABLE +KUPV$FT_INT.DETACH_JOB +KUPV$FT_INT.FATAL_ERROR +KUPV$FT_INT.GET_ERROR_TEXT +KUPV$FT_INT.GET_INSTANCE_ID +KUPV$FT_INT.GET_JOB_GUID +KUPV$FT_INT.GET_JOB_INFO +KUPV$FT_INT.GET_JOB_QUEUES +KUPV$FT_INT.GET_PLATFORM_NAME +KUPV$FT_INT.GET_SESSION_ADDRESS +KUPV$FT_INT.GET_SOLE_JOBNAME +KUPV$FT_INT.MASTER_TBL_LOCK +KUPV$FT_INT.MASTER_TBL_UNLOCK +KUPV$FT_INT.REMOVE_NEW_ATTACH +KUPV$FT_INT.REMOVE_NEW_JOB +KUPV$FT_INT.SET_DEBUG +KUPV$FT_INT.SET_DEBUG_FS +KUPV$FT_INT.SET_EVENT +KUPV$FT_INT.UPDATE_JOB_INFO +KUPV$FT_INT.UPDATE_JOB_SNUM +KUPV$FT_INT.VALID_HANDLE +KUPW$WORKER. +KUPW$WORKER.DISPATCH_WORK_ITEMS +KUPW$WORKER.FETCH_UNLOAD_METHOD +KUPW$WORKER.GET_CONTAINER_ID +KUPW$WORKER.GET_JOB_VERSION +KUPW$WORKER.IS_IMPORT_TRANSPORTABLE +KUPW$WORKER.MAIN +KUPW$WORKER.MARK_BAD_OBJECT_CALLBACK +KUPW$WORKER.REPORT_ERROR_CALLBACK +KUPW$WORKER.SET_DEBUG +KUPW$WORKER.SET_OPTION_TRANSFORM_CALLBACK +KUPW$WORKER.STREAM_MD_REMAP_SCHEMA +KXFTERRCODE +KXFTINSTID +KXFTITASKID +KXFTOUT1 +KXFTOUT2 +KXFTOUT3 +KXFTOUT4 +KXFTOUT5 +KXFTOUT6 +KXFTOUT7 +KXFTOUT8 +KXFTSLAVEID +KXFTTASKID +KXFTTIME +KXFTTXNID1 +KXFTTXNID2 +KXFTTXNID3 +LABEL +LADDR +LAG +LANGUAGE +LANGUAGE_FLAG +LANGUAGE_MISMATCH +LARGE_CHAR_VALUE +LARGE_READS_AVG +LARGE_READS_SUM +LARGE_READS_SUMX2 +LARGE_READ_BYTES_AVG +LARGE_READ_BYTES_SUM +LARGE_READ_BYTES_SUMX2 +LARGE_READ_IOPS +LARGE_READ_LATENCY_AVG +LARGE_READ_LATENCY_SUM +LARGE_READ_LATENCY_SUMX2 +LARGE_READ_MBPS +LARGE_READ_MEGABYTES +LARGE_READ_REQS +LARGE_READ_REQUESTS +LARGE_READ_SERVICETIME +LARGE_WRITES_AVG +LARGE_WRITES_SUM +LARGE_WRITES_SUMX2 +LARGE_WRITE_BYTES_AVG +LARGE_WRITE_BYTES_SUM +LARGE_WRITE_BYTES_SUMX2 +LARGE_WRITE_IOPS +LARGE_WRITE_LATENCY_AVG +LARGE_WRITE_LATENCY_SUM +LARGE_WRITE_LATENCY_SUMX2 +LARGE_WRITE_MBPS +LARGE_WRITE_MEGABYTES +LARGE_WRITE_REQS +LARGE_WRITE_REQUESTS +LARGE_WRITE_SERVICETIME +LASTINC_TIME +LASTSYNC +LASTTIME +LAST_ABORTED_SIZE +LAST_ACTION +LAST_ACTION_REASON +LAST_ACTION_TIME +LAST_ACTIVE_CHILD_ADDRESS +LAST_ACTIVE_TIME +LAST_ANALYZED +LAST_APPLY_POSITION +LAST_ARCHIVE_TS +LAST_ASH_SAMPLE_ID +LAST_ATTEMPT +LAST_AUTOPRG_TIME +LAST_BASE_SEQUENCE +LAST_BROWSED_NUM +LAST_BROWSED_SEQ +LAST_BROWSE_NUM +LAST_BROWSE_POSITION +LAST_BROWSE_SEQ +LAST_CALL_ET +LAST_CAPTURED +LAST_CHANGE +LAST_CHANGE# +LAST_CHANGE_TIME +LAST_COMPLETE_SEQUENCE +LAST_CONVERT +LAST_CREATED_TASKNUM +LAST_CR_BUFFER_GETS +LAST_CU_BUFFER_GETS +LAST_CYCLE_TIME +LAST_DATAMOVE_CLST +LAST_DATE +LAST_DB_REPORT_TIME +LAST_DDL_TIME +LAST_DEALLOC_CHANGE# +LAST_DEGREE +LAST_DEQLOG_PROCESSING_TIME +LAST_DEQUEUED_NUM +LAST_DEQUEUED_SEQ +LAST_DEQUEUE_TIME +LAST_DEQ_SEQ +LAST_DISK_READS +LAST_DISK_WRITES +LAST_ELAPSED_TIME +LAST_EM_REPORT_TIME +LAST_ENABLED_TIME +LAST_END_DATE +LAST_ENQUEUED_MSG +LAST_ENQUEUED_SCN +LAST_ENQUEUE_TIME +LAST_ERR +LAST_ERROR +LAST_ERROR_DATE +LAST_ERROR_MSG +LAST_ERROR_TIME +LAST_ERR_TIME +LAST_EXECUTED +LAST_EXECUTION +LAST_EXECUTION_DATE +LAST_EXEC_TIME +LAST_EXTENDED +LAST_FAILED_CYCLE_TIME +LAST_FAILOVER_REASON +LAST_FAILOVER_TIME +LAST_FAILURE +LAST_FAILURE_SIZE +LAST_FAILURE_TASK +LAST_FAILURE_TASKNUM +LAST_FAILURE_TIME +LAST_GENERATED +LAST_GOOD_CONCURRENCY +LAST_GOOD_CONTENTION +LAST_GOOD_CPU_TIME +LAST_GOOD_CPU_WAIT +LAST_GOOD_DATE +LAST_GOOD_DOP +LAST_GOOD_DURATION +LAST_GOOD_IO_RATE +LAST_GOOD_IO_WAIT +LAST_GOOD_PRIORITY +LAST_GOOD_TEMP +LAST_GOOD_TEMP_WAIT +LAST_GOOD_UNDO_RATE +LAST_GOOD_UNDO_WAIT +LAST_HOUR_INCIDENTS +LAST_INCIDENT +LAST_INCIDENT_IMPACT +LAST_INDEX +LAST_INDEX_CLEANUP_TIME +LAST_LCR_CREATION_TIME +LAST_LCR_LATENCY +LAST_LCR_PROPAGATION_TIME +LAST_LOADING_TIME +LAST_LOAD_CLST +LAST_LOAD_TIME +LAST_LOGIN +LAST_MANUPRG_TIME +LAST_MEMORY_USED +LAST_MESSAGE_NUMBER +LAST_MESSAGE_POSITION +LAST_MESSAGE_TIME +LAST_MISS_SIZE +LAST_MODIFIED +LAST_MODIFIED_TIME +LAST_MOD_TIME +LAST_MSG_ENQUEUE_TIME +LAST_MSG_LATENCY +LAST_MSG_PROPAGATION_TIME +LAST_NTFN_SENT_TIME +LAST_NTFN_START_TIME +LAST_NUMBER +LAST_OPEN_INCARNATION# +LAST_OPER_MODE +LAST_OPER_TIME +LAST_OPER_TYPE +LAST_OUTPUT_ROWS +LAST_PING_TIME +LAST_PROCESSED_VERSION +LAST_PURGED +LAST_PURGE_DATE +LAST_PURGE_END_DATE +LAST_PURGE_START_DATE +LAST_PURGE_STATUS +LAST_PURGE_TIME +LAST_QUERIED +LAST_QUERY +LAST_RECEIVED_MSG +LAST_RECEIVED_MSG_POSITION +LAST_RECEIVE_TIME +LAST_RECID +LAST_REDO_BLK# +LAST_REDO_BLOCK +LAST_REDO_CHANGE# +LAST_REDO_SEQ# +LAST_REDO_SEQUENCE# +LAST_REDO_TIME +LAST_REFRESH +LAST_REFRESH_DATE +LAST_REFRESH_END_TIME +LAST_REFRESH_METHOD +LAST_REFRESH_SCN +LAST_REFRESH_TIME +LAST_REFRESH_TYPE +LAST_REKEY_TIME +LAST_REPORT_TIME +LAST_REQ_TIME +LAST_RESUME_TIME +LAST_RUN_DATE +LAST_RUN_DURATION +LAST_RUN_TIME +LAST_SAMPLE_DATE +LAST_SAMPLE_PERIOD +LAST_SEC +LAST_SEND_TIME +LAST_SENT_MESSAGE_CREATE_TIME +LAST_SENT_MESSAGE_NUMBER +LAST_SENT_POSITION +LAST_SEQUENCE +LAST_SERVER_PID +LAST_SERVER_START_TIME +LAST_SQL_ACTIVE_TIME +LAST_STARTS +LAST_START_DATE +LAST_STATS_RESET_TIME +LAST_TEMPSEG_SIZE +LAST_TIME +LAST_TIME_COMPUTED +LAST_TIME_UPDATED +LAST_TMGR_PROCESSING_TIME +LAST_TM_EXPIRY_TIME +LAST_TM_READY_TIME +LAST_TRY_CONCURRENCY +LAST_TRY_CONTENTION +LAST_TRY_CPU_TIME +LAST_TRY_CPU_WAIT +LAST_TRY_DATE +LAST_TRY_DOP +LAST_TRY_DURATION +LAST_TRY_IO_RATE +LAST_TRY_IO_WAIT +LAST_TRY_PRIORITY +LAST_TRY_RESULT +LAST_TRY_TEMP +LAST_TRY_TEMP_WAIT +LAST_TRY_UNDO_RATE +LAST_TRY_UNDO_WAIT +LAST_UPDATE +LAST_UPDATE_TIME +LAST_USAGE_DATE +LAST_USED +LAST_VALUE +LAST_VERIFIED +LAST_WAIT_TIME +LATCH +LATCH# +LATCHSPIN +LATCHWAIT +LATCH_HASH +LATCH_NAME +LATENCY +LATENCY_STATE +LATEST_INC_CTIME +LATEST_SAMPLE_ID +LATEST_SAMPLE_TIME +LATEST_SCN +LATEST_TIME +LAYER_ID +LAYER_NAME +LBAC$AFTER_CREATE. +LBAC$AFTER_DROP. +LBAC$BEFORE_ALTER. +LBAC$SA. +LBAC$SA.CREATE_POLICY +LBAC$SA.DDL_CHECK +LBAC$SA.ENFORCE_DELETE +LBAC$SA.ENFORCE_INSERT +LBAC$SA.ENFORCE_LABEL_INSERT +LBAC$SA.ENFORCE_LABEL_UPDATE +LBAC$SA.ENFORCE_READ +LBAC$SA.ENFORCE_UPDATE +LBAC$SA.ENFORCE_WRITE +LBAC$SA.GET_CACHED_BYPASS +LBAC$SA.GET_CACHED_PRIVILEGES +LBAC$SA.GET_ROW_NLABEL +LBAC$SA.IS_POLICY_CACHED +LBAC$SA.LABEL_NAMES +LBAC$SA.PRIV_NAMES +LBAC$SA.SET_ROW_LABEL +LBAC$SA.STARTUP +LBAC$SA.STORE_UNION_PRIVS +LBAC$SA.VALIDATE_FORMAT +LBAC$SA.VALIDATE_PRIV +LBAC$SA_LABELS. +LBAC$SA_LABELS.COMPUTE_WRITE_LABEL +LBAC$SA_LABELS.FROM_LABEL +LBAC$SA_LABELS.INSERT_READ_LABEL +LBAC$SA_LABELS.INSERT_WRITE_LABEL +LBAC$SA_LABELS.LABEL_LEVEL_ONLY +LBAC$SA_LABELS.MERGE_LABEL +LBAC$SA_LABELS.SET_INVERSE_POLICY_BIT +LBAC$SA_LABELS.STARTUP +LBAC$SA_LABELS.STORE_USER +LBAC$SA_LABELS.STORE_USER_LABEL_LIST +LBAC$SA_LABELS.SUBSET_GROUPS +LBAC$SA_LABELS.TO_LABEL +LBAC$SA_LABELS.UPDATE_DEFAULT_LABEL +LBAC$SA_LABELS.UPDATE_ROW_LABEL +LBAC_BIN_LABEL.BIN_SIZE +LBAC_BIN_LABEL.EQ +LBAC_BIN_LABEL.EQ_SQL +LBAC_BIN_LABEL.NEW_LBAC_BIN_LABEL +LBAC_BIN_LABEL.POLICY_ID +LBAC_BIN_LABEL.SET_INT +LBAC_BIN_LABEL.SET_RAW +LBAC_BIN_LABEL.TO_INT +LBAC_BIN_LABEL.TO_RAW +LBAC_CACHE. +LBAC_CACHE.BYPASSALL +LBAC_CACHE.BYPASSREAD +LBAC_CACHE.CACHE_TAGS +LBAC_CACHE.CACHE_TAGS_INV +LBAC_CACHE.CHECK_POLICYADMIN +LBAC_CACHE.CHECK_POLICYROLE +LBAC_CACHE.CHECK_POLICYSUBSCRIBED +LBAC_CACHE.COLUMN_NAME +LBAC_CACHE.FAILEDSTARTUP +LBAC_CACHE.GET_UNIQUE_ID +LBAC_CACHE.INVERSE_GROUP +LBAC_CACHE.IS_DIP_SET +LBAC_CACHE.IS_FAILOVER +LBAC_CACHE.IS_OID_CONFIGURED +LBAC_CACHE.IS_OLS_ENABLED +LBAC_CACHE.IS_RAC_ENABLED +LBAC_CACHE.MAX_SES_POLICY_ID +LBAC_CACHE.OID_ENABLED +LBAC_CACHE.OID_SUBSCRIBE +LBAC_CACHE.OID_UNSUBSCRIBE +LBAC_CACHE.OPTION_NUMBER +LBAC_CACHE.OPTION_STRING +LBAC_CACHE.OPTION_STRING_IMP +LBAC_CACHE.PACKAGE +LBAC_CACHE.POLICYEXISTS +LBAC_CACHE.POLICY_NAME +LBAC_CACHE.POL_NUMBER +LBAC_CACHE.SET_ALTER_ALLOW +LBAC_CACHE.SET_DIP_FLAG +LBAC_CACHE.STORE_DEFAULT_OPTIONS +LBAC_CACHE.UPDATE_PROPS_TABLE +LBAC_ERRORS. +LBAC_EVENTS. +LBAC_EVENTS.AFTER_CREATE +LBAC_EVENTS.AFTER_DROP +LBAC_EVENTS.BEFORE_ALTER +LBAC_EVENTS.BEFORE_DDL +LBAC_EVENTS.COMP_INSTALL +LBAC_EVENTS.PROG_INVOCATION +LBAC_EVENTS.PROG_TERMINATION +LBAC_FRAME_GRANT. +LBAC_LABEL.EQ +LBAC_LABEL.EQ_SQL +LBAC_LABEL.LBAC_LABEL_MAP +LBAC_LABEL.NEW_LBAC_LABEL +LBAC_LABEL.TO_TAG +LBAC_LABEL_LIST.COUNT +LBAC_LABEL_LIST.GET +LBAC_LABEL_LIST.NEW_LBAC_LABEL_LIST +LBAC_LABEL_LIST.POLICY_ID +LBAC_LABEL_LIST.PUT +LBAC_LABEL_TO_CHAR. +LBAC_LABEL_TO_NUMERIC. +LBAC_POLICY_ADMIN. +LBAC_POLICY_ADMIN.ALTER_SCHEMA_POLICY +LBAC_POLICY_ADMIN.APPLY_SCHEMA_POLICY +LBAC_POLICY_ADMIN.APPLY_TABLE_POLICY +LBAC_POLICY_ADMIN.DISABLE_SCHEMA_POLICY +LBAC_POLICY_ADMIN.DISABLE_TABLE_POLICY +LBAC_POLICY_ADMIN.ENABLE_SCHEMA_POLICY +LBAC_POLICY_ADMIN.ENABLE_TABLE_POLICY +LBAC_POLICY_ADMIN.LABEL_NAMES +LBAC_POLICY_ADMIN.POLICY_SUBSCRIBE +LBAC_POLICY_ADMIN.POLICY_UNSUBSCRIBE +LBAC_POLICY_ADMIN.PRIV_NAMES +LBAC_POLICY_ADMIN.REMOVE_SCHEMA_POLICY +LBAC_POLICY_ADMIN.REMOVE_TABLE_POLICY +LBAC_PRIVS.CLEAR_PRIV +LBAC_PRIVS.DIFF_PRIVS +LBAC_PRIVS.NEW_LBAC_PRIVS +LBAC_PRIVS.NONE +LBAC_PRIVS.POLICY_ID +LBAC_PRIVS.SET_PRIV +LBAC_PRIVS.TEST_PRIV +LBAC_PRIVS.UNION_PRIVS +LBAC_RLS. +LBAC_RLS.CHECK_FILTER +LBAC_RLS.CLEARHT +LBAC_RLS.INVKZSCO +LBAC_RLS.READCHECK_FILTER +LBAC_RLS.READCHECK_FILTER2 +LBAC_RLS.READ_FILTER +LBAC_SERVICES. +LBAC_SERVICES.AUDIT_ACTION +LBAC_SERVICES.AUDIT_PRIVILEGE +LBAC_SERVICES.CHECK_AUDIT +LBAC_SERVICES.SET_UGA +LBAC_SESSION. +LBAC_SESSION.BYPASSALL +LBAC_SESSION.BYPASSREAD +LBAC_SESSION.POLICY_DISABLED +LBAC_STANDARD. +LBAC_STANDARD.RAISE_FACILITY_ERROR +LBAC_STANDARD.RESET_TRUSTED_PROG +LBAC_STANDARD.SET_TRUSTED_PROG +LBAC_SYSDBA. +LBAC_SYSDBA.ALTER_POLICY +LBAC_SYSDBA.CREATE_POLICY +LBAC_SYSDBA.DISABLE_POLICY +LBAC_SYSDBA.DROP_POLICY +LBAC_SYSDBA.ENABLE_POLICY +LBAC_UTL. +LBAC_UTL.DATA_LABEL +LBAC_UTL.EXECUTE_SYS_ACTION +LBAC_UTL.INSTANCE_INFO_EXP +LBAC_UTL.LABEL_FLAGS +LBAC_UTL.NLS_SUBSTRB +LBAC_UTL.NLS_VALIDNAME +LBAC_UTL.NUMBER_POLICY_COLUMN +LBAC_UTL.SCHEMA_INFO_EXP +LBAC_UTL.SYSTEM_INFO_EXP +LBAC_UTL.USER_DATA_LABEL +LCR$_DDL_RECORD.CONSTRUCT +LCR$_DDL_RECORD.EXECUTE +LCR$_DDL_RECORD.GET_BASE_TABLE_NAME +LCR$_DDL_RECORD.GET_BASE_TABLE_OWNER +LCR$_DDL_RECORD.GET_COMMAND_TYPE +LCR$_DDL_RECORD.GET_COMMIT_SCN +LCR$_DDL_RECORD.GET_COMMIT_SCN_FROM_POSITION +LCR$_DDL_RECORD.GET_COMMIT_TIME +LCR$_DDL_RECORD.GET_COMPATIBLE +LCR$_DDL_RECORD.GET_CURRENT_SCHEMA +LCR$_DDL_RECORD.GET_CURRENT_USER +LCR$_DDL_RECORD.GET_DDL_TEXT +LCR$_DDL_RECORD.GET_EDITION_NAME +LCR$_DDL_RECORD.GET_EXTRA_ATTRIBUTE +LCR$_DDL_RECORD.GET_LOGON_USER +LCR$_DDL_RECORD.GET_OBJECT_NAME +LCR$_DDL_RECORD.GET_OBJECT_OWNER +LCR$_DDL_RECORD.GET_OBJECT_TYPE +LCR$_DDL_RECORD.GET_POSITION +LCR$_DDL_RECORD.GET_ROOT_NAME +LCR$_DDL_RECORD.GET_SCN +LCR$_DDL_RECORD.GET_SCN_FROM_POSITION +LCR$_DDL_RECORD.GET_SOURCE_DATABASE_NAME +LCR$_DDL_RECORD.GET_SOURCE_TIME +LCR$_DDL_RECORD.GET_TAG +LCR$_DDL_RECORD.GET_THREAD_NUMBER +LCR$_DDL_RECORD.GET_TRANSACTION_ID +LCR$_DDL_RECORD.IS_NULL_TAG +LCR$_DDL_RECORD.MAP_LCR +LCR$_DDL_RECORD.SET_BASE_TABLE_NAME +LCR$_DDL_RECORD.SET_BASE_TABLE_OWNER +LCR$_DDL_RECORD.SET_COMMAND_TYPE +LCR$_DDL_RECORD.SET_CURRENT_SCHEMA +LCR$_DDL_RECORD.SET_CURRENT_USER +LCR$_DDL_RECORD.SET_DDL_TEXT +LCR$_DDL_RECORD.SET_EDITION_NAME +LCR$_DDL_RECORD.SET_EXTRA_ATTRIBUTE +LCR$_DDL_RECORD.SET_LOGON_USER +LCR$_DDL_RECORD.SET_OBJECT_NAME +LCR$_DDL_RECORD.SET_OBJECT_OWNER +LCR$_DDL_RECORD.SET_OBJECT_TYPE +LCR$_DDL_RECORD.SET_ROOT_NAME +LCR$_DDL_RECORD.SET_SOURCE_DATABASE_NAME +LCR$_DDL_RECORD.SET_TAG +LCR$_PROCEDURE_RECORD.GET_COMPATIBLE +LCR$_PROCEDURE_RECORD.GET_CURRENT_USER +LCR$_PROCEDURE_RECORD.GET_DEFAULT_USER +LCR$_PROCEDURE_RECORD.GET_LOGON_USER +LCR$_PROCEDURE_RECORD.GET_PACKAGE_NAME +LCR$_PROCEDURE_RECORD.GET_PACKAGE_OWNER +LCR$_PROCEDURE_RECORD.GET_PARAMETERS +LCR$_PROCEDURE_RECORD.GET_POSITION +LCR$_PROCEDURE_RECORD.GET_PROCEDURE_NAME +LCR$_PROCEDURE_RECORD.GET_PUBLICATION +LCR$_PROCEDURE_RECORD.GET_ROOT_NAME +LCR$_PROCEDURE_RECORD.GET_SCN +LCR$_PROCEDURE_RECORD.GET_SOURCE_DATABASE_NAME +LCR$_PROCEDURE_RECORD.GET_SOURCE_TIME +LCR$_PROCEDURE_RECORD.GET_TAG +LCR$_PROCEDURE_RECORD.GET_THREAD_NUMBER +LCR$_PROCEDURE_RECORD.GET_TRANSACTION_ID +LCR$_PROCEDURE_RECORD.IS_NULL_TAG +LCR$_PROCEDURE_RECORD.MAP_LCR +LCR$_ROW_RECORD.ADD_COLUMN +LCR$_ROW_RECORD.CONSTRUCT +LCR$_ROW_RECORD.CONVERT_LONG_TO_LOB_CHUNK +LCR$_ROW_RECORD.DELETE_COLUMN +LCR$_ROW_RECORD.EXECUTE +LCR$_ROW_RECORD.GET_BASE_OBJECT_ID +LCR$_ROW_RECORD.GET_COMMAND_TYPE +LCR$_ROW_RECORD.GET_COMMIT_SCN +LCR$_ROW_RECORD.GET_COMMIT_SCN_FROM_POSITION +LCR$_ROW_RECORD.GET_COMMIT_TIME +LCR$_ROW_RECORD.GET_COMPATIBLE +LCR$_ROW_RECORD.GET_EXTRA_ATTRIBUTE +LCR$_ROW_RECORD.GET_LOB_INFORMATION +LCR$_ROW_RECORD.GET_LOB_OFFSET +LCR$_ROW_RECORD.GET_LOB_OPERATION_SIZE +LCR$_ROW_RECORD.GET_LONG_INFORMATION +LCR$_ROW_RECORD.GET_OBJECT_ID +LCR$_ROW_RECORD.GET_OBJECT_NAME +LCR$_ROW_RECORD.GET_OBJECT_OWNER +LCR$_ROW_RECORD.GET_POSITION +LCR$_ROW_RECORD.GET_ROOT_NAME +LCR$_ROW_RECORD.GET_ROW_TEXT +LCR$_ROW_RECORD.GET_SCN +LCR$_ROW_RECORD.GET_SCN_FROM_POSITION +LCR$_ROW_RECORD.GET_SOURCE_DATABASE_NAME +LCR$_ROW_RECORD.GET_SOURCE_TIME +LCR$_ROW_RECORD.GET_TAG +LCR$_ROW_RECORD.GET_THREAD_NUMBER +LCR$_ROW_RECORD.GET_TRANSACTION_ID +LCR$_ROW_RECORD.GET_VALUE +LCR$_ROW_RECORD.GET_VALUES +LCR$_ROW_RECORD.GET_WHERE_CLAUSE +LCR$_ROW_RECORD.GET_XML_INFORMATION +LCR$_ROW_RECORD.IS_NULL_TAG +LCR$_ROW_RECORD.IS_STATEMENT_LCR +LCR$_ROW_RECORD.KEEP_COLUMNS +LCR$_ROW_RECORD.MAP_LCR +LCR$_ROW_RECORD.RENAME_COLUMN +LCR$_ROW_RECORD.SET_COMMAND_TYPE +LCR$_ROW_RECORD.SET_EXTRA_ATTRIBUTE +LCR$_ROW_RECORD.SET_LOB_INFORMATION +LCR$_ROW_RECORD.SET_LOB_OFFSET +LCR$_ROW_RECORD.SET_LOB_OPERATION_SIZE +LCR$_ROW_RECORD.SET_OBJECT_NAME +LCR$_ROW_RECORD.SET_OBJECT_OWNER +LCR$_ROW_RECORD.SET_ROOT_NAME +LCR$_ROW_RECORD.SET_ROW_TEXT +LCR$_ROW_RECORD.SET_SOURCE_DATABASE_NAME +LCR$_ROW_RECORD.SET_TAG +LCR$_ROW_RECORD.SET_VALUE +LCR$_ROW_RECORD.SET_VALUES +LCR$_ROW_RECORD.SET_XML_INFORMATION +LCR$_ROW_UNIT.LCR$_ROW_UNIT +LCR$_XML_SCHEMA. +LCR_COUNT +LCR_RETRY_ITERATION +LC_FREEABLE_MEMORY_OBJECTS +LC_FREEABLE_MEMORY_SIZE +LC_INUSE_MEMORY_OBJECTS +LC_INUSE_MEMORY_SIZE +LC_NAMESPACE +LEADING +LEAF_BLOCKS +LEAF_CATEGORY_TYP.CATEGORY_DESCRIBE +LEAF_FILENAME +LEASEEXPIRY +LEN +LENGTH +LEVEL +LEVEL# +LEVEL_EXPRESSION +LEVEL_ID +LEVEL_ID_EXPRESSION +LEVEL_NAME +LIBRARY +LIBRARYFILE +LIBRARY_NAME +LIB_IDX +LIB_NAME +LIGHT_WORKS +LIKE_EXPAND +LIMIT +LIMIT_VALUE +LINE +LINENO +LINE_NUMBER +LISTENER +LITERAL_HASH_VALUE +LITERAL_MISMATCH +LITREP_COMP_MISMATCH +LMODE +LOADED +LOADED_VERSIONS +LOADS +LOADS_DELTA +LOADS_TOTAL +LOAD_OPTIMIZER_STATS +LOAD_RUNTIME_HEAP_FAILED +LOAD_SCN +LOAD_UNDO_STAT. +LOBCURRTIME +LOBEXPMQL +LOBID +LOBOBJID +LOBRDBA +LOBSPCANALTIME +LOBSQLMQL +LOBS_CAPTURED +LOBS_REPLAYED +LOBTSN +LOBUNDORETTIME +LOB_COL_NAME +LOB_ID +LOB_INDEX_NAME +LOB_INDPART_NAME +LOB_INDSUBPART_NAME +LOB_NAME +LOB_OPERATIONS +LOB_PARTITION_NAME +LOB_READS +LOB_SEGMENT_NAME +LOB_SUBPARTITION_NAME +LOB_VERSION_BASE +LOB_VERSION_WRAP +LOC +LOCAL +LOCALITY +LOCAL_ATTRIBUTES +LOCAL_CONVERGE_TAG +LOCAL_INDEXES +LOCAL_METHODS +LOCAL_NID +LOCAL_PRIVILEGES +LOCAL_ROWID +LOCAL_TASK_ID +LOCAL_TRANSACTION_ID +LOCAL_TRAN_ID +LOCATION +LOCATION_NAME +LOCKED_MODE +LOCKED_TOTAL +LOCKOWNER +LOCKP +LOCKS +LOCKSEQUENCEID +LOCKSTATE +LOCKSTATEID +LOCKTYPE +LOCKWAIT +LOCK_DATE +LOCK_ELEMENT_ADDR +LOCK_ELEMENT_CLASS +LOCK_ELEMENT_NAME +LOCK_HELD +LOCK_ID1 +LOCK_ID2 +LOCK_MODE +LOCK_REQUEST +LOCK_TYPE +LOCK_USER_SCHEMA_FAILED +LOG# +LOGBSN +LOGFILE +LOGFILE_ASSIGNMENT +LOGFILE_PATTERN +LOGGED_ON +LOGGING +LOGGING_LEVEL +LOGGING_PROPERTY +LOGICALLY_CORRUPT +LOGICAL_FILENAME +LOGICAL_IOS +LOGICAL_PATH +LOGICAL_READS +LOGICAL_READS_DELTA +LOGICAL_READS_TOTAL +LOGICAL_READ_PCT +LOGICAL_STANDBY_APPLY +LOGINS +LOGIN_ELAPSED_TIME +LOGIN_USER. +LOGMINER_ID +LOGMINER_SESSION_MISMATCH +LOGMNR$ALWAYSSUPLOG_PROC. +LOGMNR$ALWSUPLOG_TABF_PUBLIC. +LOGMNR$COL_GG_TABF_PUBLIC. +LOGMNR$KEY_GG_TABF_PUBLIC. +LOGMNR$SEQ_GG_TABF_PUBLIC. +LOGMNR$TAB_GG_TABF_PUBLIC. +LOGMNRGGC_TRIGGER. +LOGMNR_DDL_TRIGGER_PROC. +LOGMNR_DICT_CACHE. +LOGMNR_DICT_CACHE.ADD_COL +LOGMNR_DICT_CACHE.ADD_OBJ +LOGMNR_DICT_CACHE.ADD_OBJ_AT +LOGMNR_DICT_CACHE.ADD_SBA +LOGMNR_DICT_CACHE.CLEANOUT +LOGMNR_DICT_CACHE.COLTYPE_NAME +LOGMNR_DICT_CACHE.COMMIT_XID +LOGMNR_DICT_CACHE.DEL_BASEOBJ +LOGMNR_DICT_CACHE.DEL_OBJ +LOGMNR_DICT_CACHE.DGTLO +LOGMNR_DICT_CACHE.GETLOGMNRUID +LOGMNR_DICT_CACHE.GETTABLEMCV +LOGMNR_DICT_CACHE.GSII +LOGMNR_DICT_CACHE.GTLO3B +LOGMNR_DICT_CACHE.MID_PROCESS_CTAS +LOGMNR_DICT_CACHE.OBJTYPE_NAME +LOGMNR_DICT_CACHE.PURGE_OBJ +LOGMNR_DICT_CACHE.PURGE_SCN_DID +LOGMNR_DICT_CACHE.PURGE_SCN_UID +LOGMNR_DICT_CACHE.REMOTE_SAVE_COLSET +LOGMNR_DICT_CACHE.ROLLBACK_XID +LOGMNR_DICT_CACHE.SAVEDRP_IDX +LOGMNR_DICT_CACHE.SAVEDRP_OBJ +LOGMNR_DICT_CACHE.SAVE_COLSET +LOGMNR_DICT_CACHE.SAVE_COLSET_AT +LOGMNR_DICT_CACHE.SAVE_KEYS +LOGMNR_DICT_CACHE.SAVE_OBJ +LOGMNR_DICT_CACHE.SAVE_OBJ_AT +LOGMNR_DICT_CACHE.SAVE_OBJ_SCN +LOGMNR_DICT_CACHE.SAVE_SEQ +LOGMNR_DICT_CACHE.WRITE_TRACE_GG +LOGMNR_EM_SUPPORT. +LOGMNR_EM_SUPPORT.ADD_TABLE_INCLUSION_RULE +LOGMNR_EM_SUPPORT.ADD_USER_INCLUSION_RULE +LOGMNR_EM_SUPPORT.ADD_XID_INCLUSION_RULE +LOGMNR_EM_SUPPORT.DELETE_TABLE_INCLUSION_RULE +LOGMNR_EM_SUPPORT.DELETE_USER_INCLUSION_RULE +LOGMNR_EM_SUPPORT.DELETE_XID_INCLUSION_RULE +LOGMNR_EM_SUPPORT.VALIDATE_AUTH +LOGMNR_GET_GT_PROTOCOL. +LOGMNR_GTLO3. +LOGMNR_KRVRDA_TEST_APPLY. +LOGMNR_KRVRDLUID3. +LOGMNR_KRVRDREPDICT3. +LOGMNR_RMT_BLD. +LOGMNR_SESSION_ID +LOGMNR_UID +LOGOFF_DLOCK +LOGOFF_LREAD +LOGOFF_LWRITE +LOGOFF_PREAD +LOGOFF_TIME +LOGON_TIME +LOGON_USER +LOGSTDBY$TABF. +LOGSTDBY$UTABF. +LOGSTDBY_ID +LOGSTDBY_INTERNAL. +LOGSTDBY_INTERNAL.EDS_ADD_PREREQ_I +LOGSTDBY_INTERNAL.EDS_ADD_TABLE_I +LOGSTDBY_INTERNAL.EDS_EVOLVE_TABLE_FINISH_I +LOGSTDBY_INTERNAL.EDS_EVOLVE_TABLE_I +LOGSTDBY_INTERNAL.EDS_GEN_SHADOWTAB_I +LOGSTDBY_INTERNAL.EDS_REMOVE_TABLE_I +LOGSTDBY_INTERNAL.INSTANTIATE_TABLE_I +LOGSTDBY_INTERNAL.VALIDATE_AUTH_I +LOGSTDBY_UNSUPPORTED_TABLES +LOG_CHKPT_INTERVAL_REDO_BLKS +LOG_CHKPT_TIMEOUT_REDO_BLKS +LOG_DATE +LOG_DIRECTORY +LOG_FILE_SIZE_REDO_BLKS +LOG_GROUP_NAME +LOG_GROUP_TYPE +LOG_HISTORY +LOG_ID +LOG_IO +LOG_MODE +LOG_NAME +LOG_OWNER +LOG_SEQUENCE +LOG_STATE +LOG_SWITCH_WAIT +LOG_TABLE +LOG_TRANSLATION_ERROR +LOG_TRIGGER +LOG_TYPE +LOG_USER +LONGHOLD_COUNT +LONGNAME +LONGP_POLICY +LONG_PREDICATE +LONG_WAITS +LONG_WAIT_TIME_MAX +LONG_WAIT_TIME_TOTAL +LOOKUP_SCAN +LOOP_DENSE_OVERRIDE +LOOP_TYPE +LOOP_VAR_OVERRIDE +LOST +LOST_TIME +LOW +LOWB +LOWER_PORT +LOWEST_SCN +LOWEST_TIMESTAMP +LOWEST_VERSION +LOWROWID +LOW_CHANGE# +LOW_GAP_SCN +LOW_GAP_TIME +LOW_MARK_SCN +LOW_OPTIMAL_SIZE +LOW_RESETLOGS_CHANGE# +LOW_RESETLOGS_TIME +LOW_SCN +LOW_SCNBAS +LOW_SCNWRP +LOW_SEQUENCE# +LOW_TIME +LOW_VALUE +LO_BNUM +LO_SETID +LRU_NUMBER +LSTIOTIM +LSTVAL +LT. +LT.ADDASPARENTWORKSPACE +LT.ADDUSERDEFINEDHINT +LT.ADD_TOPO_GEOMETRY_LAYER +LT.ALTERSAVEPOINT +LT.ALTERVERSIONEDTABLE +LT.ALTERWORKSPACE +LT.BEGINBULKLOADING +LT.BEGINDDL +LT.BEGINRESOLVE +LT.CHANGEWORKSPACETYPE +LT.COMMITBULKLOADING +LT.COMMITDDL +LT.COMMITRESOLVE +LT.COMPRESSWORKSPACE +LT.COMPRESSWORKSPACETREE +LT.COPYFORUPDATE +LT.CREATESAVEPOINT +LT.CREATEWORKSPACE +LT.DELETESAVEPOINT +LT.DELETE_TOPO_GEOMETRY_LAYER +LT.DISABLEVERSIONING +LT.DISABLEVERSIONING_REPLN +LT.DML_ +LT.DROPREPLICATIONSUPPORT +LT.ENABLEVERSIONING +LT.ENABLEVERSIONING_REPLN +LT.EXPORT +LT.EXPORT_SCHEMAS +LT.FINDRICSET +LT.FREEZEWORKSPACE +LT.GENERATEREPLICATIONSUPPORT +LT.GETBULKLOADVERSION +LT.GETCONFLICTWORKSPACE +LT.GETDIFFVERSIONS +LT.GETLOCKMODE +LT.GETLTLOCKSTR +LT.GETMULTIWORKSPACES +LT.GETOPCONTEXT +LT.GETORIGINALDDL +LT.GETPHYSICALTABLENAME +LT.GETPRIVS +LT.GETSESSIONINFO +LT.GETSYSTEMPARAMETER +LT.GETVALIDFROM +LT.GETVALIDTILL +LT.GETVERSION +LT.GETWMMETADATASPACE +LT.GETWORKSPACE +LT.GOTODATE +LT.GOTOSAVEPOINT +LT.GOTOWORKSPACE +LT.GRANTGRAPHPRIV +LT.GRANTPRIVSONPOLICY +LT.GRANTPRIVSTOREPADMIN +LT.GRANTSYSTEMPRIV +LT.GRANTWORKSPACEPRIV +LT.IMPORT +LT.IMPORT_SCHEMAS +LT.ISWORKSPACEOCCUPIED +LT.LOCKROWS +LT.MAX_TIME +LT.MERGETABLE +LT.MERGEWORKSPACE +LT.MIN_TIME +LT.MOVE_PROC +LT.PURGETABLE +LT.RECOVERALLMIGRATINGTABLES +LT.RECOVERFROMDROPPEDUSER +LT.RECOVERMIGRATINGTABLE +LT.REFRESHTABLE +LT.REFRESHWORKSPACE +LT.RELOCATEWRITERSITE +LT.REMOVEASPARENTWORKSPACE +LT.REMOVEUSERDEFINEDHINT +LT.REMOVEWORKSPACE +LT.REMOVEWORKSPACETREE +LT.RENAMESAVEPOINT +LT.RENAMEWORKSPACE +LT.RESOLVECONFLICTS +LT.REVOKEGRAPHPRIV +LT.REVOKESYSTEMPRIV +LT.REVOKEWORKSPACEPRIV +LT.ROLLBACKBULKLOADING +LT.ROLLBACKDDL +LT.ROLLBACKRESOLVE +LT.ROLLBACKTABLE +LT.ROLLBACKTOSP +LT.ROLLBACKWORKSPACE +LT.SETCAPTUREEVENT +LT.SETCOMPRESSWORKSPACE +LT.SETCONFLICTWORKSPACE +LT.SETDIFFVERSIONS +LT.SETLOCKINGOFF +LT.SETLOCKINGON +LT.SETMULTIWORKSPACES +LT.SETSYSTEMPARAMETER +LT.SETTRIGGEREVENTS +LT.SETVALIDTIME +LT.SETVALIDTIMEFILTEROFF +LT.SETVALIDTIMEFILTERON +LT.SETWMVALIDUPDATEMODEOFF +LT.SETWMVALIDUPDATEMODEON +LT.SETWOOVERWRITEOFF +LT.SETWOOVERWRITEON +LT.SETWORKSPACELOCKMODEOFF +LT.SETWORKSPACELOCKMODEON +LT.SYNCHRONIZESITE +LT.UNFREEZEWORKSPACE +LT.UNLOCKROWS +LT.UNTIL_CHANGED +LT.USEDEFAULTVALUESFORNULLS +LTADM. +LTADM.ACQUIRELOCKONRESOURCE +LTADM.ACQUIRELOCKS +LTADM.ADDEVUNDOCODE +LTADM.ADDLOCKROWSINFOENTRY +LTADM.ADDVERSIONEDTABLE +LTADM.ALTERSAVEPOINT +LTADM.ALTERSTATE +LTADM.APPLY_UNIQUE_CONSTRAINTS +LTADM.ARETHERECONFLICTS +LTADM.ARETHEREDIFFS +LTADM.BEGINRESOLVE +LTADM.BUILD_MODIFIED_TABLES_LIST +LTADM.CHECKFORADDITIONALROWS +LTADM.CHECKIFWRITERSITE +LTADM.CHECKWHERECLAUSE +LTADM.CHECK_FOR_NVE_CHILD_TABLES +LTADM.CHILD_TABLES_EXIST +LTADM.CLEANUPAUXTABLE +LTADM.CLEANUPMODTABLE +LTADM.CLEANUP_MW_TABLE +LTADM.COMPRESSSTATE +LTADM.COMPRESSSTATE_INTERNAL +LTADM.COMPUTERICWEIGHT +LTADM.COPYTABLE +LTADM.COPYTABLE_VT +LTADM.CREATESAVEPOINT +LTADM.CREATESTATE +LTADM.CURRENTUSERSSESSION +LTADM.DELETETABLE_INTERNAL +LTADM.DELETETABLE_INTERNAL_VT +LTADM.DISABLESYSTEMTRIGGERS +LTADM.DISABLESYSTEMTRIGGERS_EXP +LTADM.ENABLESYSTEMTRIGGERS +LTADM.ENABLESYSTEMTRIGGERS_EXP +LTADM.ENDRESOLVE +LTADM.EXECSQL +LTADM.EXECSQLAUTO +LTADM.EXECSQLFROMCLOB +LTADM.EXECSQLINTOINT +LTADM.EXECSQLINTOSTR +LTADM.EXECSQLWUNDO +LTADM.EXISTCONFLICTS +LTADM.EXISTNONLIVEWORKSPACES +LTADM.EXISTOPENSHORTTRANSINSTATE +LTADM.EXISTSOPENSHORTTRANS +LTADM.EXISTSOPENSHORTTRANSONTABLE +LTADM.EXISTSSAVEPOINT +LTADM.EXISTSSTATE +LTADM.EXISTVERSIONEDTABS +LTADM.FREEZESTATE +LTADM.GETALLRESOLVESTATUS +LTADM.GETALLSTATEATTRIBUTES +LTADM.GETANCESTORWORKSPACE +LTADM.GETCOLALIASES +LTADM.GETINSTEADOFDELTRIGNAME +LTADM.GETINSTEADOFINSTRIGNAME +LTADM.GETINSTEADOFUPDTRIGNAME +LTADM.GETLOCK +LTADM.GETLOCKWITHSTATUS +LTADM.GETRESOLVESTATUS +LTADM.GETSPVERSION +LTADM.GETSTATEATTRIBUTES +LTADM.GETSTATELOCKID +LTADM.GETSYSTEMPARAMETER +LTADM.GETWORKSPACECURVER +LTADM.GETWORKSPACEDEPTH +LTADM.GETWORKSPACESYSTEMMODE +LTADM.GET_LOCK_TABLE +LTADM.GOTODATE +LTADM.GOTOTS +LTADM.GRANTPRIVSTOREPADMIN +LTADM.GRANTSTATEPRIV +LTADM.GRANTSYSTEMPRIV +LTADM.INSERT_INTO_MODIFIED_TABLES +LTADM.INSERT_INTO_MW_TABLE +LTADM.ISGLOBALREPLNADMIN +LTADM.ISLOCKINGALIVE +LTADM.ISVERSIONEDTABLE +LTADM.LOGSESSIONINWS +LTADM.NO_VM_ALTER_PROC +LTADM.NO_VM_CREATE_PROC +LTADM.NO_VM_DROP_PROC +LTADM.NULL_TABLE_FUNC +LTADM.NUMACTIVESESSIONS +LTADM.OPENCURSOR +LTADM.PERFORMIMPORTACTIONS +LTADM.POSTTABLE_RIC +LTADM.REFRESHCURRENTMPLEAFS +LTADM.REFRESHREFRESHEDSTATES +LTADM.REFRESHSTATE_INTERNAL +LTADM.REFRESHSYSTEMPARAMETERS +LTADM.REFRESHTABLE +LTADM.RELEASELOCK +LTADM.RELEASELOCKS +LTADM.REMOVESTATE +LTADM.RESETCRSTATUS +LTADM.RESOLVEALLTABLENAMES +LTADM.RESOLVEALLTABLENAMES_DV +LTADM.RESOLVETABLENAME +LTADM.REVOKESTATEPRIV +LTADM.REVOKESYSTEMPRIV +LTADM.ROLLBACKRESOLVE +LTADM.ROLLBACKTABLE_PARTIAL +LTADM.SETSTATELOCKMODEOFF +LTADM.SETSTATELOCKMODEON +LTADM.SETSYNCPARVER +LTADM.SETSYSTEMPARAMETER +LTADM.TURNONPESSIMISTICLOCKING +LTADM.UNFREEZESTATE +LTADM.UPDATECRSTATUS +LTADM.UPDATEVERSIONEDTABLE +LTADM.VERSIONROWCOPY +LTAQ. +LTAQ.CAPTUREEVENT +LTDDL. +LTDDL.DISABLEVERSIONING +LTDDL.DISABLEVERSIONING_NONAUTO +LTDDL.ENABLEVERSIONING +LTDDL.ENABLEVERSIONING_NONAUTO +LTDDL.UNDOENABLEVER +LTDTRG. +LTDTRG.CREATETRIGGERS +LTDTRG.DISABLEDMLFORREPLICATION +LTDTRG.ENABLEDMLFORREPLICATION +LTDTRG.TRIGGERSELECTCLAUSE +LTPRIV. +LTPRIV.GETPRIVLIST +LTPRIV.GRANTGRAPHPRIV +LTPRIV.GRANTSTATEPRIV +LTPRIV.GRANTSYSTEMPRIV +LTPRIV.ISUSERALLOWED +LTPRIV.ISUSERALLOWEDOPER +LTPRIV.REVOKEGRAPHPRIV +LTPRIV.REVOKESTATEPRIV +LTPRIV.REVOKESYSTEMPRIV +LTPRIV.SETUSER +LTRIC. +LTRIC.APPLY_RIC_COMMIT_TABLE +LTRIC.APPLY_RIC_CONSTRAINTS +LTRIC.APPLY_RIC_RESTRICT +LTRIC.APPLY_RIC_RESTRICT_POST +LTRIC.APPLY_SELF_REF_RIC +LTRIC.BACKUPRICLOCKSLIST +LTRIC.CHECKRICONRFRSHBYFLIPPING +LTRIC.CREATERICLOCKINGTABLES +LTRIC.CREATERICWHERECLAUSE +LTRIC.DO_CR_RIC_CHECK +LTRIC.DROPRICLOCKINGTABLES +LTRIC.FINDRICSET +LTRIC.GENRICVIEWS +LTRIC.GENVTPTNOTEXISTSWC +LTRIC.GETMODVER +LTRIC.GETPTBEFORETRIGSTRS +LTRIC.GETPTVTNONSEQUENCEDCODE +LTRIC.GETRICINSTEADOFTRIGSTRS +LTRIC.GETRICLOCKNOS +LTRIC.GETRICLOCKS +LTRIC.GETRICLOCKSFORTABLE +LTRIC.GETRICSESSLOCKSFORTABLE +LTRIC.GETRICSFROMSKELETONTABLES +LTRIC.GETSTATUS +LTRIC.INITIALIZERICLOCKINGVARS +LTRIC.ISPARENTTABLE +LTRIC.LOCKRICROWS +LTRIC.NEEDTODECLVTVARS +LTRIC.RECREATEPTUPDDELTRIGGERS +LTRIC.RELRICSESSLOCKSFORTABLE +LTRIC.RESTORERICLOCKSLIST +LTRIC.RIC_DISABLE_VERSNING_INTERNAL +LTRIC.RIC_ENABLE_VERSIONING_INTERNAL +LTRIC.UPDATERICWEIGHTS +LTUTIL. +LTUTIL.ADDTOVERLIST +LTUTIL.ADDUSERDEFINEDHINT +LTUTIL.ADDWCP +LTUTIL.ALLOWROWLEVELLOCKING +LTUTIL.BITOR +LTUTIL.CALLSTACKCONTAINSPROC +LTUTIL.CHECKADDTOPOGEOLAYERERRORS +LTUTIL.CHECKDELTOPOGEOLAYERERRORS +LTUTIL.CHECKDOMAININDEXPRIVS +LTUTIL.CHOOSE +LTUTIL.CLEANUPBDDL +LTUTIL.CLEANUPCDDL +LTUTIL.CLEANUPCDDLPROC +LTUTIL.CLEANUPDV +LTUTIL.CLEANUPEV +LTUTIL.CLEANUPMETADATA +LTUTIL.CLEANUPMETADATABYUSER +LTUTIL.CLEANUPSTALEMETADATA +LTUTIL.CONTRACTWHITESPACE +LTUTIL.CONTRACTWHITESPACECLOB +LTUTIL.COPYRLSPOLICIES +LTUTIL.CREATEINLISTFROMQUERY +LTUTIL.CREATEPKWHERECLAUSE +LTUTIL.DECREMENTREPSITECOUNTER +LTUTIL.DELETEFULLROLLBACKMARKER +LTUTIL.DELETEUNDOCODE +LTUTIL.DELETEUNDOCODECHECKPOINTS +LTUTIL.DELETEUNDOCODERANGE +LTUTIL.DISALLOWIFWITHVT +LTUTIL.DROPRLSPOLICIES +LTUTIL.DROPUNUSEDCOLUMNS +LTUTIL.EXECEVUNDO +LTUTIL.EXECLOG +LTUTIL.EXECUTESQLLOG +LTUTIL.EXISTSBIR +LTUTIL.EXISTSBUR +LTUTIL.EXISTSCONSTRAINT +LTUTIL.EXISTSFULLROLLBACKMARKER +LTUTIL.EXISTSTOPOLOGY +LTUTIL.FIXVTAB_COMPRESS +LTUTIL.FIXVTAB_REFRESH +LTUTIL.FIXVTAB_ROLLBACK +LTUTIL.GENFIXCRNONSEQNFRESHINS +LTUTIL.GENWMCOLSUPDATESTMNT +LTUTIL.GETALLDBLINKS +LTUTIL.GETBATCHWHERECLAUSES +LTUTIL.GETCOLINFO +LTUTIL.GETCOLLIST +LTUTIL.GETCOLSTR +LTUTIL.GETCOLUMNDECLARATION +LTUTIL.GETCONTAINEDVER +LTUTIL.GETCONTAINEDVERINRANGE +LTUTIL.GETCONTAINEDVERSINWORKSPACE +LTUTIL.GETCONTAINEDVERSIONRANGE +LTUTIL.GETCRNEXTVERS +LTUTIL.GETCRSTATUS +LTUTIL.GETCURRENTLOCKINGMODE +LTUTIL.GETCURVER +LTUTIL.GETDESCVERSIONS +LTUTIL.GETDISTINCTOBJECT +LTUTIL.GETDISVER +LTUTIL.GETHIDDENOLSCOLUMNS +LTUTIL.GETHISTOPTION +LTUTIL.GETINDEXTABLE +LTUTIL.GETINDEXTABLESPACE +LTUTIL.GETMINWORKSPACEVERSION +LTUTIL.GETNESTEDCOLUMNVIEW +LTUTIL.GETNESTEDTABLECOLSTR +LTUTIL.GETNESTEDTABLEMETADATACOLUMNS +LTUTIL.GETNESTEDTABLETYPE +LTUTIL.GETNEXTVERSION +LTUTIL.GETNOOFREMAININGSITES +LTUTIL.GETNOOFREPSITES +LTUTIL.GETNTPKEYCOLS +LTUTIL.GETPDBSTATUS +LTUTIL.GETPKEYCOLS +LTUTIL.GETPKEYINFO +LTUTIL.GETPKEYINFO_VT +LTUTIL.GETPKINDEXINFO +LTUTIL.GETREMAININGDBLINKS +LTUTIL.GETREPADMINNAME +LTUTIL.GETREPGROUP +LTUTIL.GETREPLGROUPSTATUS +LTUTIL.GETRICSTATUS +LTUTIL.GETRLSWHERECLAUSE +LTUTIL.GETSID +LTUTIL.GETSNO +LTUTIL.GETSPACEUSAGE +LTUTIL.GETSTATEFROMVER +LTUTIL.GETTABLETABLESPACE +LTUTIL.GETTOPOFEATURETABINFO +LTUTIL.GETTOPOINFO +LTUTIL.GETTRIGFLAG +LTUTIL.GETTRIGGERS +LTUTIL.GETTRIGTYPES +LTUTIL.GETUDHINT +LTUTIL.GETUNDOCODE +LTUTIL.GETUNDOCODECLOB +LTUTIL.GETVALIDTIMEOPTION +LTUTIL.GETVERINDEXNAME +LTUTIL.GETVN +LTUTIL.GETVTID +LTUTIL.GETWHERECLAUSESTR +LTUTIL.GETWORKSPACELOCKID +LTUTIL.GETWORKSPACELOCKMODE +LTUTIL.GET_EXPANDED_NEXTVERS +LTUTIL.GET_EXPANDED_NEXTVERS_NP +LTUTIL.GRANTOLSPRIVS +LTUTIL.HASCRCHILD +LTUTIL.HASFEATURETABLE +LTUTIL.HASNESTEDTABLECOLUMN +LTUTIL.HASOLSPOLICY +LTUTIL.HASRICCASCADINGCONSTRAINT +LTUTIL.HASRICSETNULLCONSTRAINT +LTUTIL.HASWOOVERWRITEOPTION +LTUTIL.HISTWITHDATETYPE +LTUTIL.HISTWITHDATETYPEEV +LTUTIL.INSERTFULLROLLBACKMARKER +LTUTIL.INSERTNEXTVERS +LTUTIL.INSERTSDOMETADATAATREMOTESITE +LTUTIL.INSERTVERSION +LTUTIL.INVERSIONEDSTATE +LTUTIL.ISIMPLICITSP +LTUTIL.ISLEAFSTATE +LTUTIL.ISMODIFIED +LTUTIL.ISMODIFIEDINSUBTREE +LTUTIL.ISOBJECTTABLE +LTUTIL.ISREPLICATED +LTUTIL.ISSPATIALINSTALLED +LTUTIL.ISSPLITINSUBTREE +LTUTIL.ISTOPOFEATURETABLE +LTUTIL.ISTOPOLOGYINDEXTABLE +LTUTIL.ISTOPOLOGYRELATIONTABLE +LTUTIL.ISVERSIONEDTABLE +LTUTIL.ISVERSIONENABLEDTOPOLOGY +LTUTIL.ISWORKSPACEOWNER +LTUTIL.NEEDTOEXECUTETRIGGERS +LTUTIL.NUMTRIGGERSTOEXECUTE +LTUTIL.PARSESTRINGLIST +LTUTIL.PERCENTROWSINVERS +LTUTIL.PIPED_ROWID_FUNC +LTUTIL.POPULATEROWIDRANGES +LTUTIL.PREFIXSTR +LTUTIL.PUSHDEFERREDTXNS +LTUTIL.REMOVEUSERDEFINEDHINT +LTUTIL.REQUIRESTRIGGERSONTOPVIEW +LTUTIL.RESETALLSEQUENCES +LTUTIL.RESOLVESYNONYM +LTUTIL.RESTARTSEQUENCE +LTUTIL.SEPARATECLOBINTO2PARTS +LTUTIL.SERVEROUTPUT +LTUTIL.SETDISVER +LTUTIL.SETREMAININGSITENO +LTUTIL.STRIPVERSION +LTUTIL.STRIPVERSIONRANGE +LTUTIL.STUFFVERSION +LTUTIL.STUFFVERSIONRANGE +LTUTIL.SUBSVERSION +LTUTIL.TO_CLOB +LTUTIL.TRANSFORMTOPOTABLE +LTUTIL.UPDATESDOTOPOMETADATADV +LTUTIL.UPDATESDOTOPOMETADATAEV +LTUTIL.VT_FIXNVTAB +LTUTIL.WAITTILLDEFERREDTXNSDONE +LTUTIL.WM$CONCAT +LTUTIL.WM$CONVERTVERSIONSTR +LTUTIL.WM$GETDBCOMPATIBLESTR +LTUTIL.WM$GETDBVERSIONSTR +LTUTIL.WM$SORTSTRING +LTUTIL.WRITETOLOG +LTUTIL.WRITEUNDOCODE +LT_CTX_PKG. +LT_CTX_PKG.ALLOWDDLOPERATION +LT_CTX_PKG.APPENDNEXTVERS +LT_CTX_PKG.CHECKFREEZESTATUS +LT_CTX_PKG.CHECKNGETLOCK +LT_CTX_PKG.CHVLTL +LT_CTX_PKG.EXISTSLTLOCKINFO +LT_CTX_PKG.GETCURLOCKSTR +LT_CTX_PKG.GETCURNEXTVER +LT_CTX_PKG.GETCURRENTLOCKINGMODE +LT_CTX_PKG.GETLTLOCKINFO +LT_CTX_PKG.GETLTTABLENAME +LT_CTX_PKG.GETMAXVTRANGE +LT_CTX_PKG.GETMULTIWORKSPACES +LT_CTX_PKG.GETNEXTVER +LT_CTX_PKG.GETPARWSDELSTATUS +LT_CTX_PKG.GETPARWSVER +LT_CTX_PKG.GETPREVVER +LT_CTX_PKG.GETPURGEOPTION +LT_CTX_PKG.GETSESSIONATTRIBUTES +LT_CTX_PKG.GETSTATEFROMVER +LT_CTX_PKG.GETSTRIPPEDNEXTVER +LT_CTX_PKG.GETVTAUXTABLENAME +LT_CTX_PKG.INSERTEXTTABROWSFORNVER +LT_CTX_PKG.MY_SYS_CONTEXT +LT_CTX_PKG.REFRESHVERSINWSPCLIST +LT_CTX_PKG.SETACTIVETIMEFORDML +LT_CTX_PKG.SETCALLSTACKASINVALID +LT_CTX_PKG.SETCALLSTACKASVALID +LT_CTX_PKG.SETCOMMITVARS +LT_CTX_PKG.SETCOMPRESSWORKSPACE +LT_CTX_PKG.SETCONFLICTSTATE +LT_CTX_PKG.SETCRINFO +LT_CTX_PKG.SETDIFFVERS +LT_CTX_PKG.SETEVCHECKPOINT +LT_CTX_PKG.SETFLIPVERSIONONREFRESH +LT_CTX_PKG.SETFREEZESTATUS +LT_CTX_PKG.SETIMPORTVARS +LT_CTX_PKG.SETINSTANT +LT_CTX_PKG.SETLOCKMODE +LT_CTX_PKG.SETLTLOCKINFO +LT_CTX_PKG.SETMPROOT +LT_CTX_PKG.SETMPWORKSPACE +LT_CTX_PKG.SETMULTIWORKSPACES +LT_CTX_PKG.SETNEWMPVARS +LT_CTX_PKG.SETNEWROOTANCVERSION +LT_CTX_PKG.SETOPCONTEXT +LT_CTX_PKG.SETPARENTVER +LT_CTX_PKG.SETPOSTVARS +LT_CTX_PKG.SETPREVVER +LT_CTX_PKG.SETROWLOCKSTATUS +LT_CTX_PKG.SETSAVEPOINT +LT_CTX_PKG.SETSTATE +LT_CTX_PKG.SETSTATEATTRIBUTES +LT_CTX_PKG.SETTABMRGWOREMOVEEVENT +LT_CTX_PKG.SETTABMRGWREMOVEEVENT +LT_CTX_PKG.SETTABREFRESHEVENT +LT_CTX_PKG.SETTRIGGEREVENT +LT_CTX_PKG.SETTSINSTANT +LT_CTX_PKG.SETUSER +LT_CTX_PKG.SETVALIDTIME +LT_CTX_PKG.SETVALIDTIMEFILTEROFF +LT_CTX_PKG.SETVALIDTIMEFILTERON +LT_CTX_PKG.SETVERAFTINSTANT +LT_CTX_PKG.SETVERBEFINSTANT +LT_CTX_PKG.SETVERSION +LT_CTX_PKG.SETVERSIONANDSTATE +LT_CTX_PKG.SETWSPCMRGWOREMOVEEVENT +LT_CTX_PKG.SETWSPCMRGWREMOVEEVENT +LT_CTX_PKG.TO_TIMESTAMP_TZ_ +LT_CTX_PKG.UNSETCOMMITVARS +LT_CTX_PKG.UNSETIMPORTVARS +LT_CTX_PKG.UNSETPOSTVARS +LT_CTX_PKG.UPDATE_MODIFIED_TABLES +LT_CTX_PKG.WM$DISALLOWQNDML +LT_EXPORT_PKG. +LT_EXPORT_PKG.ADDENTRY +LT_EXPORT_PKG.EXPORT_MAPPING_VIEW_FUNC +LT_EXPORT_PKG.EXPORT_SCHEMAS +LT_EXPORT_PKG.GET_DATAPUMP_ID +LT_EXPORT_PKG.IMPORT_SCHEMAS +LT_EXPORT_PKG.INITIALIZE +LT_EXPORT_PKG.INSTANCE_CALLOUT_IMP +LT_EXPORT_PKG.INSTANCE_EXPORT_ACTION +LT_EXPORT_PKG.PRINT_STATUS +LT_EXPORT_PKG.SCHEMA_INFO_EXP +LT_EXPORT_PKG.SYSTEM_CALLOUT +LT_EXPORT_PKG.SYSTEM_CALLOUT_IMP +LT_EXPORT_PKG.SYSTEM_INFO_EXP +LVL +LWM +LWM_MESSAGE_CREATE_TIME +LWM_MESSAGE_NUMBER +LWM_POSITION +LWM_TIME +MACHINE +MACHINE_NAME +MACOLS_INIT_SESSION. +MAC_POLICY$_PRIV. +MAC_POLICY$_PRIV.CREATE_ROW +MAC_POLICY$_PRIV.DELETE_BY_ALGORITHM_CODE_ID#_ +MAC_POLICY$_PRIV.DELETE_ROW +MAC_POLICY$_PRIV.READ_BY_ALGORITHM_CODE_ID#_ +MAC_POLICY$_PRIV.READ_ROW +MAC_POLICY$_PRIV.UPDATE_ROW +MAC_POLICY_FACTOR$_PRIV. +MAC_POLICY_FACTOR$_PRIV.CREATE_ROW +MAC_POLICY_FACTOR$_PRIV.DELETE_BY_FACTOR_ID#_ +MAC_POLICY_FACTOR$_PRIV.DELETE_BY_MAC_POLICY_ID#_ +MAC_POLICY_FACTOR$_PRIV.DELETE_ROW +MAC_POLICY_FACTOR$_PRIV.READ_BY_FACTOR_ID#_ +MAC_POLICY_FACTOR$_PRIV.READ_BY_MAC_POLICY_ID#_ +MAC_POLICY_FACTOR$_PRIV.READ_ROW +MAC_POLICY_FACTOR$_PRIV.UPDATE_ROW +MAINTAIN_DOM +MAINTAIN_ORDER +MAINTENANCE_TYPE +MAJOR +MANAGEMENT_PACK_ACCESS +MANDATORY +MANUAL_DURATION +MANUAL_OPEN_TIME +MANUAL_REPAIRS_ONLY +MANUAL_VALUE +MAPPED_CONSUMER_GROUP +MAPPED_DIMENSION_NAME +MAPPED_DIMENSION_TYPE +MAPPED_HASH_VALUE +MAPPED_HIERARCHY_NAME +MAPPED_HIERARCHY_TYPE +MAPPED_LEVEL_NAME +MAPPED_SQL_FULLTEXT +MAPPED_SQL_ID +MAPPED_SQL_TEXT +MAPPING_ATTRIBUTE +MAP_ELEM +MAP_FILE +MAP_ID +MAP_NAME +MAP_SYNC +MARKED_CORRUPT +MASTER +MASTERDEF +MASTERKEYID +MASTER_COMMENT +MASTER_ID +MASTER_INSTANCE +MASTER_LINK +MASTER_NODE +MASTER_OWNER +MASTER_ROLLBACK_SEG +MASTER_ROLLBACK_SEGMENT +MASTER_STATUS +MASTER_VIEW +MATCHED +MATERIALIZE +MAXARGS +MAXBLOCKS +MAXBYTES +MAXCONCURRENCY +MAXCONN_CBROK +MAXIMUM +MAXIMUM_CONNECTIONS +MAXIMUM_SESSIONS +MAXIMUM_SIZE +MAXIMUM_VALUE +MAXIORTM +MAXIOWTM +MAXOPENFILES +MAXPAGES +MAXQUERYID +MAXQUERYLEN +MAXQUERYSQLID +MAXSIZE +MAXTIME +MAXVAL +MAX_500B +MAX_8K +MAX_ALLOCATED +MAX_ALLOCATED_MAX +MAX_APPLIED_MESSAGE_NUMBER +MAX_BLOCKS +MAX_BUCKET_NO +MAX_BUF_RATE +MAX_BYTES +MAX_BYTE_PER_BUF +MAX_BYTE_RATE +MAX_CARDINALITY +MAX_CELL_DISK_IOPS +MAX_CELL_DISK_MBPS +MAX_CELL_FLASH_IOPS +MAX_CELL_FLASH_MBPS +MAX_CHECKPOINT_CHANGE# +MAX_CHECKPOINT_SCN +MAX_CHECKPOINT_TIME +MAX_CLT_BUF_RATE +MAX_CLT_BYTE_PER_BUF +MAX_CLT_BYTE_RATE +MAX_CONCURRENT_SESSIONS +MAX_CONNECTIONS +MAX_DISK_IOPS +MAX_DISK_MBPS +MAX_DURATION_LAST_30_DAYS +MAX_DURATION_LAST_7_DAYS +MAX_EST_EXEC_TIME +MAX_EVENTS_PER_LOOP +MAX_EVENT_RATE +MAX_EXTENT +MAX_EXTENTS +MAX_FAILURE +MAX_FAILURES +MAX_FLASH_IOPS +MAX_FLASH_MBPS +MAX_FREE_SIZE +MAX_FTSTIME +MAX_IDLE_BLOCKER_TIME +MAX_IDLE_TIME +MAX_INTERVAL +MAX_IN_CONNECT_RATE +MAX_IOPS +MAX_JOIN_KEY +MAX_LAG_TIME +MAX_LATENCY +MAX_LENGTH +MAX_LIFETIME_SESSION +MAX_LOOKUPTIME +MAX_LOOP_RATE +MAX_MBPS +MAX_MEMORY_SIZE +MAX_MEM_USED +MAX_MISS_SIZE +MAX_MODIFICATION_TIME +MAX_MSGS +MAX_MSG_RATE +MAX_NEXT_CHANGE# +MAX_NEXT_TIME +MAX_NUMBER +MAX_NUM_BUCKETS +MAX_NUM_PER_WIN +MAX_OUT_CONNECT_RATE +MAX_PMBPS +MAX_READTIME +MAX_RECONNECT_RATE +MAX_RETRIES +MAX_RUNS +MAX_RUN_DURATION +MAX_SERVERS +MAX_SERVER_COUNT +MAX_SIZE +MAX_SORT_BLOCKS +MAX_SORT_SIZE +MAX_SVR_BUF_RATE +MAX_SVR_BYTE_PER_BUF +MAX_SVR_BYTE_RATE +MAX_TASK_LATENCY +MAX_TEMPSEG_SIZE +MAX_THINK_TIME +MAX_TRANS +MAX_UNDO_CONSUMPTION +MAX_USED_BLOCKS +MAX_USED_SIZE +MAX_USE_SESSION +MAX_UTILIZATION +MAX_UTILIZATION_LIMIT +MAX_VALUE +MAX_VERSIONS +MAX_WAIT +MAX_WRITETIME +MAYBE_HITS +MAYBE_RULES +MBYTES_PROCESSED +MD. +MD.HHAND +MD.HHBITS +MD.HHBYTELEN +MD.HHCBIT +MD.HHCELLBNDRY +MD.HHCELLSIZE +MD.HHCKREF +MD.HHCLDATE +MD.HHCOLLAPSE +MD.HHCOMMONCODE +MD.HHCOMPARE +MD.HHCOMPOSE +MD.HHDECODE +MD.HHDISTANCE +MD.HHENCODE +MD.HHENCODE_BYLEVEL +MD.HHGBIT +MD.HHGETCID +MD.HHGROUP +MD.HHGTBIT +MD.HHGTYPE +MD.HHIDLPART +MD.HHIDLROWS +MD.HHIDPART +MD.HHIDROWS +MD.HHINCRLEV +MD.HHJLDATE +MD.HHLENGTH +MD.HHLEVELS +MD.HHMATCH +MD.HHMAXCODE +MD.HHMKCODE +MD.HHMKDIM +MD.HHNCOMPARE +MD.HHNDIM +MD.HHOR +MD.HHORDER +MD.HHPRECISION +MD.HHSBIT +MD.HHSETCID +MD.HHSTBIT +MD.HHSTYPE +MD.HHSUBDIVIDE +MD.HHSUBSTR +MD.HHXOR +MD.SET_CHECK +MD.SIGERR +MD1. +MD1.BVALUETODIM +MD1.COMPARE +MD1.DATETODIM +MD1.DECODE +MD1.ENCODE +MD1.HVALUETODIM +MD1.LATLONTOCODE +MD1.TO_BVALUE +MD1.TO_DATE +MD1.TO_HVALUE +MD1.TO_LAT +MD1.TO_LON +MD2. +MD2.INTERACT +MD2.RELATE +MD2.RELATE_PROCESS +MD2.SDO_CGLNLN +MD2.SDO_CODE_SIZE +MD2.SDO_READ_LAYER_METADATA +MD2.TESSELLATE +MD2.TESSELLATE_FIXED +MD2.TEST_LOADGEOM +MD2.VALIDATE_GEOM +MDERR. +MDERR.RAISE_MD_ERROR +MDPRVT_FEATURE. +MDPRVT_FEATURE.SDO_INVALIDATE_FEATURE +MDPRVT_FEATURE.SDO_REGISTER_FEATURE +MDPRVT_GMD. +MDPRVT_GMD.GET_GEOM_METADATA +MDPRVT_GMD.INVALIDATE_GEOM_METADATA +MDPRVT_GMD.SDO_GEOM_METADATA_EXISTS +MDPRVT_IDX. +MDPRVT_IDX.EXCHANGE +MDPRVT_IDX.EXECUTE_GUPDATE +MDPRVT_IDX.EXP_DUMP_METADATA +MDPRVT_IDX.GET_INDEX_METADATA +MDPRVT_IDX.INIT_META +MDPRVT_IDX.INVALIDATE_CACHE +MDPRVT_IDX.MD_TRACE +MDPRVT_IDX.RESET_TTS_INDEX_METADATA +MDPRVT_IDX.TTS_META +MDPRVT_IDX.UPDATE_INDEX_METEDATA +MDPRVT_SRID. +MDPRVT_SRID.GET_DIMS +MDPRVT_SRID.GET_REF_KIND +MDPRVT_SRID.GET_UNIT +MDPRVT_SRID.IS_GEODETIC +MDPRVT_SRID.SDO_INVALIDATE_SRID_METADATA +MD_LRS. +MD_LRS.ADJUST_MEASURE +MD_LRS.ADJUST_MEASURE_3D +MD_LRS.APPEND_TO_GEOM_SEGMENT +MD_LRS.CLEAN_GEOMETRY +MD_LRS.CLEAN_GEOMETRY_FUN +MD_LRS.CLIP_GEOM_SEGMENT_FUN +MD_LRS.CONCATENATE_GEOM_SEGMENTS_FUN +MD_LRS.CONNECTION_TYPE_FUN +MD_LRS.CONSTRUCT_DIM_ARRAY +MD_LRS.CONSTRUCT_LRS_GTYPE +MD_LRS.CONTAINS_UNKNOWN_ELEM +MD_LRS.CONTAIN_MEASURE_DIM +MD_LRS.CONTAIN_MEASURE_DIM_3D +MD_LRS.CONVERT_NULLS +MD_LRS.CROSS_PRODUCT_2D +MD_LRS.DEFINE_GEOM_SEGMENT_GEO3D +MD_LRS.DEFINE_GEOM_SEGMENT_PROC +MD_LRS.ELEM_END_PT +MD_LRS.GEODETIC_3D_GEOM +MD_LRS.GEODETIC_GEOMETRY +MD_LRS.GEODETIC_SRID +MD_LRS.GEOM_SEGMENTS_CON_TYPE +MD_LRS.GEOM_SEGMENTS_CON_TYPE_3D +MD_LRS.GET_GEODETIC_3D_PARAMS +MD_LRS.GET_LRS_DIM_POS +MD_LRS.GET_M_VALUE +MD_LRS.GTYPE_FILTER +MD_LRS.IS_DEFINED_FUN +MD_LRS.LINESTRING_GEOM +MD_LRS.LOCATE_PT_FUN +MD_LRS.LRS_GEOMETRY +MD_LRS.LRS_GEOM_BY_GTYPE +MD_LRS.LRS_GEOM_LENGTH_3D +MD_LRS.LRS_MULTI_SEGMENTS_GTYPE +MD_LRS.LRS_POLYGON_GTYPE +MD_LRS.LRS_PT_GTYPE +MD_LRS.LRS_SEGMENT_GTYPE +MD_LRS.MAKE_POINT_GEOM +MD_LRS.MONOTONIC_MEASURE +MD_LRS.NEXT_NON_NULL_ORDINATE +MD_LRS.NO_OF_DIMENSIONS +MD_LRS.NO_OF_ELEMENTS +MD_LRS.NO_OF_VERTICES +MD_LRS.OFFSET_GEOM_SEGMENT_FUN +MD_LRS.PROJECTED_GEOMETRY +MD_LRS.PROJECTED_SRID +MD_LRS.PROJECT_PT_FUN +MD_LRS.RESTORE_NULLS +MD_LRS.REVERSE_GEOMETRY_FUN +MD_LRS.REVERSE_M +MD_LRS.SAME_CS +MD_LRS.SAME_SDO_ORDINATE_ARRAY +MD_LRS.SET_LRS_DIM_POS +MD_LRS.SET_M_VALUE +MD_LRS.SNAP_TO_PT +MD_LRS.SNAP_TO_PT_3D +MD_NET. +MD_NET.BUILD_GEOM_NETWORK +MD_NET.BUILD_LINK_TABLE +MD_NET.COLUMN_ERROR_MSG +MD_NET.CONSTRAINT_EXISTS +MD_NET.CREATE_BIDIRECTED_NETWORK +MD_NET.CREATE_DELETE_LINK_TRIGGER +MD_NET.CREATE_DELETE_NODE_TRIGGER +MD_NET.CREATE_DELETE_PATH_TRIGGER +MD_NET.CREATE_DELETE_SUBPATH_TRIGGER +MD_NET.CREATE_LRS_NODE_TABLE +MD_NET.CREATE_SPATIAL_INDEX +MD_NET.CREATE_SPATIAL_NETWORK +MD_NET.CREATE_UNDIRECTED_NETWORK +MD_NET.DELETE_GEOM_METADATA +MD_NET.DELETE_NETWORK_METADATA +MD_NET.DROP_TABLE +MD_NET.FIND_NETWORK_INTERSECTION +MD_NET.GEOM_END_POINT +MD_NET.GEOM_METADATA_EXISTS +MD_NET.GET_GEOMETRY +MD_NET.GET_GEOM_END_POINT +MD_NET.GET_LOGGING_LEVEL +MD_NET.GET_NETWORK_NAME +MD_NET.GET_PERCENTAGE +MD_NET.GET_PT +MD_NET.GET_SCHEMA_NAME +MD_NET.GET_TABLE_NAME +MD_NET.GET_USER +MD_NET.INDEX_ON_COL_EXISTS +MD_NET.INSERT_GEOM_METADATA +MD_NET.INSERT_NETWORK_METADATA +MD_NET.IS_COLUMN_VALID +MD_NET.IS_LRS_TABLE +MD_NET.LOG +MD_NET.MAJOR_VERSION_NO +MD_NET.MAKE_LRS_POINT +MD_NET.MAKE_POINT_GEOMETRY +MD_NET.NETWORK_ERROR_MSG +MD_NET.NET_LOG +MD_NET.NO_OF_END_POINTS +MD_NET.REFERENTIAL_CHECK +MD_NET.RESET_ID_GENERATOR +MD_NET.SET_LOGGING_LEVEL +MD_NET.SPATIAL_INDEX_EXISTS +MD_NET.STR_TRIM_TAIL +MD_NET.TABLE_ERROR_MSG +MD_NET.TABLE_EXISTS +MD_NET.TABLE_TYPE +MD_NET.TRIGGER_EXISTS +MD_NET.VALID_TOPOLOGY_LAYER +MEAN_GOOD_CONCURRENCY +MEAN_GOOD_CONTENTION +MEAN_GOOD_CPU_TIME +MEAN_GOOD_CPU_WAIT +MEAN_GOOD_DOP +MEAN_GOOD_DURATION +MEAN_GOOD_IO +MEAN_GOOD_IO_WAIT +MEAN_GOOD_TEMP +MEAN_GOOD_TEMP_WAIT +MEAN_GOOD_UNDO +MEAN_GOOD_UNDO_WAIT +MEAN_INCOMING_TASKS_30_DAYS +MEAN_INCOMING_TASKS_7_DAYS +MEAN_JOB_ATTEMPTS +MEAN_JOB_CPU +MEAN_JOB_DURATION +MEASURE +MEASURE_EXPRESSION +MEASURE_FOLDER_ID +MEASURE_FOLDER_NAME +MEASURE_ID +MEASURE_NAME +MEASURE_STORAGE +MEASURE_SUBFOLDER_NAME +MEASURE_SUBFOLDER_OWNER +MEASURE_TYPE +MEDIA +MEDIA_CORRUPT +MEDIA_POOL +MEMADDR +MEMBER +MEMBERS +MEMBER_INCARNATION +MEMBER_NAME +MEMBER_NUMBER +MEMBER_TARGET_EMD_URL +MEMBER_TARGET_GUID +MEMBER_TARGET_NAME +MEMBER_TARGET_TYPE +MEMBYTES +MEMEXTENTS +MEMORY_ALLOCATED +MEMORY_BUF_ALLOC +MEMORY_LIMIT +MEMORY_MIN +MEMORY_SIZE +MEMORY_SIZE_FACTOR +MEMORY_USAGE +MEMUSED +MEM_READ +MERGE +MERGE_AJ +MERGE_CHANGE# +MERGE_CONST_ON +MERGE_SJ +MESSAGE +MESSAGE0 +MESSAGE1 +MESSAGE2 +MESSAGE3 +MESSAGES +MESSAGES_PUBLISHED +MESSAGE_ARGUMENTS +MESSAGE_CODE +MESSAGE_COUNT +MESSAGE_CREATION_TIME +MESSAGE_DELIVERY_MODE +MESSAGE_GROUP +MESSAGE_GROUPING +MESSAGE_HANDLER +MESSAGE_ID +MESSAGE_LAG +MESSAGE_LEVEL +MESSAGE_NUM +MESSAGE_NUMBER +MESSAGE_POSITION +MESSAGE_RULE_VARIABLE +MESSAGE_SEQUENCE +MESSAGE_TEXT +MESSAGE_TYPE +MESSAGE_TYPE_NAME +MESSAGE_TYPE_OWNER +METADATA +METADATA_ATTRIBUTE +METER_LEVEL +METHOD +METHODS +METHOD_INDEX +METHOD_NAME +METHOD_NO +METHOD_TYPE +METRIC1_DESC +METRICS_GROUP_ID +METRICS_ID +METRICS_NAME +METRIC_ID +METRIC_NAME +METRIC_TIMESTAMP +METRIC_TYPE +METRIC_UNIT +METRIC_UNITS +METRIC_VALUE +METRIC_VALUE_TYPE +MFLAG +MFLAG2 +MGMT_CONFIG. +MGMT_CONFIG.COLLECT_CONFIG +MGMT_CONFIG.COLLECT_STATS +MGMT_CONFIG.PRINT_JOB_DETAILS +MGMT_CONFIG.RUN_NOW +MGMT_CONFIG.STOP_JOB +MGMT_CONFIG.SUBMIT_JOB +MGMT_CONFIG_UTL. +MGMT_CONFIG_UTL.CREATE_REPLACE_DIR_OBJ +MGMT_DB_LL_METRICS. +MGMT_DB_LL_METRICS.COLLECT_CONFIG_METRICS +MGMT_DB_LL_METRICS.COLLECT_STATS_METRICS +MGMT_DB_LL_METRICS.GET_VERSION_CATEGORY +MGMT_DB_LL_METRICS.WRITE_DB_CCR_FILE +MGMT_METHOD +MGMT_P1 +MGMT_P2 +MGMT_P3 +MGMT_P4 +MGMT_P5 +MGMT_P6 +MGMT_P7 +MGMT_P8 +MGMT_RESPONSE. +MGMT_RESPONSE.CALC_METRIC +MGMT_RESPONSE.CAPTURE_STATS +MGMT_RESPONSE.CREATE_BASELINE +MGMT_RESPONSE.DELETE_BASELINE +MGMT_RESPONSE.DELETE_SQL_FROM_BASELINE +MGMT_RESPONSE.GETDURATION +MGMT_RESPONSE.GETVERSION +MGMT_RESPONSE.GET_LATEST_CURS +MGMT_RESPONSE.GET_METRIC_CURS +MGMT_RESPONSE.GET_TIME_STATS +MGMT_RESPONSE.PURGE_OLD_HISTORY +MGMT_RESPONSE.PURGE_OLD_STATS +MGMT_RESPONSE.RESET_CAPTURE_STATS +MGMT_RESPONSE.RESET_SNAPSHOT_STATS +MGMT_RESPONSE.SAVE_TO_HISTORY +MGMT_RESPONSE.TAKE_V$SQL_SNAPSHOT +MGMT_UPDATE_DB_FEATURE_LOG. +MIGRATABLE +MIGRATED +MIGRATION_ALLOWED +MIGRATION_BOUNDARY +MINARGS +MINIMAL +MINIMUM +MINIMUM_VALUE +MINING_FUNCTION +MINING_SCN +MINING_STATUS +MINING_TIME +MINIOTIM +MINOR +MINRETENTION +MINSIZE +MINTIME +MINVAL +MIN_CACHED_TEMP +MIN_CARDINALITY +MIN_CHECKPOINT_CHANGE# +MIN_CHECKPOINT_TIME +MIN_COMMUNICATION +MIN_EXTENT +MIN_EXTENTS +MIN_EXTLEN +MIN_FILE_SIZE +MIN_FIRST_CHANGE# +MIN_FIRST_TIME +MIN_FTSTIME +MIN_JOIN_KEY +MIN_LATENCY +MIN_LOGON_TIME +MIN_LOOKUPTIME +MIN_MODIFICATION_TIME +MIN_READTIME +MIN_RECORD_SCN +MIN_RECORD_TIME +MIN_REQUIRED_CAPTURE_CHANGE# +MIN_ROWS_IN_BUCKET +MIN_SIZE +MIN_TASK_LATENCY +MIN_VALUE +MIN_VERSIONS +MIN_WRITETIME +MIRROR_REGION +MISC_ENV +MISSES +MIXED +MNTPORT +MODE +MODEL_COMPILE_SUBQUERY +MODEL_DONTVERIFY_UNIQUENESS +MODEL_DYNAMIC_SUBQUERY +MODEL_ID +MODEL_MIN_ANALYSIS +MODEL_NAME +MODEL_NO_ANALYSIS +MODEL_ORDER +MODEL_PUSH_REF +MODEL_SIZE +MODE_HELD +MODE_REQUESTED +MODE_STATUS +MODIFICATIONS +MODIFICATION_DATE +MODIFICATION_TIME +MODIFICATION_TIMESTAMP +MODIFIED +MODIFIED_BY +MODIFIED_TIME +MODIFY_DATE +MODIFY_EVENT +MODIFY_TIME +MODS_PER_LCR +MODULE +MODULE_HASH +MODULE_ID +MONITOR +MONITORING +MORE_INFO +MOUNTID +MOUNTPATH +MOUNT_DATE +MOUNT_STATUS +MOVE_PROCEDURE +MOVE_PROCEDURE_DESC +MOVING_WINDOW_SIZE +MSGID +MSGNO +MSGS_MADE_EXPIRED +MSGS_MADE_READY +MSGS_RCVD_CUR +MSGS_RCVD_TOTAL +MSGS_SENT +MSGS_SENT_CUR +MSGS_SENT_TOTAL +MSG_CTRL_QUEUE +MSG_GRPID +MTTR_TARGET_FOR_ESTIMATE +MTU +MULTIPASSES_EXECUTIONS +MULTIPLEX +MULTI_PX_MISMATCH +MULTI_SECTION +MUTEX_IDENTIFIER +MUTEX_TYPE +MUTEX_VALUE +MVAGGRAWBITOR. +MVAGGRAWBITOR_TYP.ODCIAGGREGATEINITIALIZE +MVAGGRAWBITOR_TYP.ODCIAGGREGATEITERATE +MVAGGRAWBITOR_TYP.ODCIAGGREGATEMERGE +MVAGGRAWBITOR_TYP.ODCIAGGREGATETERMINATE +MVIEW_ID +MVIEW_LAST_REFRESH_TIME +MVIEW_NAME +MVIEW_SITE +MVIEW_TABLE_OWNER +MV_MERGE +MV_QUERY_GEN_MISMATCH +MV_REWRITE_MISMATCH +MV_STALEOBJ_MISMATCH +MY_DBLINK +NALLOC +NAME +NAMED +NAMED_BUILD_SPEC +NAMEFROMLASTDDL. +NAMESPACE +NAMESPACE_NAME +NAME_HASH +NAME_ID +NAME_NLS +NAME_SPACE +NATIVE_FULL_OUTER_JOIN +NATIVE_METHODS +NCHAR_VALUE +NC_COMPONENT +NC_REASON +NEGATIVE_RULE_SET_NAME +NEGATIVE_RULE_SET_OWNER +NESTED +NESTED_TABLE +NESTED_TABLE_FAST_INSERT +NESTED_TABLE_GET_REFS +NESTED_TABLE_NAME +NESTED_TABLE_SET_SETID +NETWORK +NETWORK_BYTES_RECD_AVG +NETWORK_BYTES_RECD_SUM +NETWORK_BYTES_RECD_SUMX2 +NETWORK_BYTES_SENT_AVG +NETWORK_BYTES_SENT_SUM +NETWORK_BYTES_SENT_SUMX2 +NETWORK_NAME +NETWORK_SERVICE_BANNER +NETWORK_TIME +NET_MASK +NET_TIMEOUT +NEW +NEWEST_BACKUP_TIME +NEWEST_SCN +NEWEST_SEQUENCE# +NEWEST_THREAD# +NEWEST_TIME +NEW_NAME +NEW_OWNER +NEXT +NEXT_CHANGE# +NEXT_CVT_LEVEL +NEXT_DATE +NEXT_EXPIRY_TIME +NEXT_EXTENT +NEXT_INSTRUCTION +NEXT_PIECE_ADDRESS +NEXT_READY_TIME +NEXT_RUN_DATE +NEXT_RUN_TIME +NEXT_SCN +NEXT_SCNBAS +NEXT_SCNWRP +NEXT_SEC +NEXT_SERVICE_TIME +NEXT_START_DATE +NEXT_TICKER +NEXT_TIME +NEXT_TRY_DATE +NEXT_WAKEUP_TIME +NFREE +NFSPORT +NFSVERSION +NFS_ACCESS +NFS_COMMIT +NFS_CREATE +NFS_FSINFO +NFS_FSSTAT +NFS_GETATTR +NFS_LINK +NFS_LOOKUP +NFS_MKDIR +NFS_MKNOD +NFS_MOUNT +NFS_NULL +NFS_PATHCONF +NFS_READ +NFS_READBYTES +NFS_READDIR +NFS_READDIRPLUS +NFS_READLINK +NFS_REMOVE +NFS_RENAME +NFS_RMDIR +NFS_SETATTR +NFS_SYMLINK +NFS_WRITE +NFS_WRITEBYTES +NIWAITPERREQUEST +NLJ_BATCHING +NLJ_PREFETCH +NLS_DATABASE_PARAMETERS +NLS_ENV +NLS_INSTANCE_PARAMETERS +NLS_LENGTH_SEMANTICS +NLS_SESSION_PARAMETERS +NL_AJ +NL_SJ +NOAPPEND +NOCACHE +NOCACHE_LOBS +NODE +NONDURABLE +NONLOGGED_CHANGE# +NONLOGGED_END_CHANGE# +NONLOGGED_END_TIME +NONLOGGED_START_CHANGE# +NONLOGGED_START_TIME +NONLOGGED_TIME +NONMIGRATABILITY_INFO +NONMIGRATABILITY_REASON +NONSCHEMA +NONTRANSFERABILITY_INFO +NONTRANSFERABILITY_REASON +NON_ZERO_ALLOCS +NOPARALLEL +NORMALIZED_TIMESTAMP +NOSPACEERRCNT +NOTES +NOTIFICATION_ACTION +NOTIFICATION_CONTEXT +NOTIFICATION_STATE +NOTIFICATION_TYPE +NOUNDO +NO_ACCESS +NO_ADAPTIVE_PLAN +NO_ANSI_REARCH +NO_AUTO_REOPTIMIZE +NO_BASETABLE_MULTIMV_REWRITE +NO_BATCH_TABLE_ACCESS_BY_ROWID +NO_BIND_AWARE +NO_BUFFER +NO_CARTESIAN +NO_CHECK_ACL_REWRITE +NO_CLUSTERING +NO_CLUSTER_BY_ROWID +NO_COALESCE_SQ +NO_CONNECT_BY_CB_WHR_ONLY +NO_CONNECT_BY_COMBINE_SW +NO_CONNECT_BY_COST_BASED +NO_CONNECT_BY_ELIM_DUPS +NO_CONNECT_BY_FILTERING +NO_COST_XML_QUERY_REWRITE +NO_CPU_COSTING +NO_DATA_SECURITY_REWRITE +NO_DECORRELATE +NO_DOMAIN_INDEX_FILTER +NO_DST_UPGRADE_INSERT_CONV +NO_ELIMINATE_JOIN +NO_ELIMINATE_OBY +NO_ELIM_GROUPBY +NO_EXPAND +NO_EXPAND_GSET_TO_UNION +NO_EXPAND_TABLE +NO_FACT +NO_FACTORIZE_JOIN +NO_FULL_OUTER_JOIN_TO_OUTER +NO_GATHER_OPTIMIZER_STATISTICS +NO_GBY_PUSHDOWN +NO_INDEX +NO_INDEX_FFS +NO_INDEX_SS +NO_INMEMORY +NO_INMEMORY_PRUNING +NO_LOAD +NO_MERGE +NO_MODEL_PUSH_REF +NO_MONITOR +NO_MONITORING +NO_MULTIMV_REWRITE +NO_NATIVE_FULL_OUTER_JOIN +NO_NLJ_BATCHING +NO_NLJ_PREFETCH +NO_ORDER_ROLLUPS +NO_OUTER_JOIN_TO_ANTI +NO_OUTER_JOIN_TO_INNER +NO_PARALLEL +NO_PARALLEL_INDEX +NO_PARTIAL_COMMIT +NO_PARTIAL_JOIN +NO_PARTIAL_ROLLUP_PUSHDOWN +NO_PLACE_DISTINCT +NO_PLACE_GROUP_BY +NO_PQ_CONCURRENT_UNION +NO_PQ_REPLICATE +NO_PQ_SKEW +NO_PRUNE_GSETS +NO_PULL_PRED +NO_PUSH_PRED +NO_PUSH_SUBQ +NO_PX_FAULT_TOLERANCE +NO_PX_JOIN_FILTER +NO_QKN_BUFF +NO_QUERY_TRANSFORMATION +NO_REF_CASCADE +NO_RESULT_CACHE +NO_REWRITE +NO_SEMIJOIN +NO_SEMI_TO_INNER +NO_SET_TO_JOIN +NO_SQL_TUNE +NO_STAR_TRANSFORMATION +NO_STATEMENT_QUEUING +NO_STATS_GSETS +NO_SUBQUERY_PRUNING +NO_SUBSTRB_PAD +NO_SWAP_JOIN_INPUTS +NO_TABLE_LOOKUP_BY_NL +NO_TRANSFORM_DISTINCT_AGG +NO_TRIGGER_MISMATCH +NO_UNNEST +NO_USE_CUBE +NO_USE_HASH +NO_USE_HASH_AGGREGATION +NO_USE_HASH_GBY_FOR_PUSHDOWN +NO_USE_INVISIBLE_INDEXES +NO_USE_MERGE +NO_USE_NL +NO_USE_VECTOR_AGGREGATION +NO_VECTOR_TRANSFORM +NO_VECTOR_TRANSFORM_DIMS +NO_VECTOR_TRANSFORM_FACT +NO_VM_DDL. +NO_VM_DROP_A. +NO_XDB_FASTPATH_INSERT +NO_XMLINDEX_REWRITE +NO_XMLINDEX_REWRITE_IN_SELECT +NO_XML_DML_REWRITE +NO_XML_QUERY_REWRITE +NO_ZONEMAP +NTFN_GROUPING_CLASS +NTFN_GROUPING_REPEAT_COUNT +NTFN_GROUPING_START_TIME +NTFN_GROUPING_TYPE +NTFN_GROUPING_VALUE +NULLABLE +NULLS_STORED +NULL_2_S +NULL_2_SS +NULL_2_X +NULL_VALUE +NUM +NUMA_ID +NUMBER_COLUMN +NUMBER_OF_ARGUMENTS +NUMBER_OF_BINDS +NUMBER_OF_DESTINATIONS +NUMBER_OF_EXECUTIONS +NUMBER_OF_FILES +NUMBER_OF_MEMBERS +NUMBER_OF_OPERATORS +NUMBER_OF_RULES +NUMBER_OF_SESSIONS +NUMBER_OF_STEPS +NUMBER_OF_WAITS +NUMBER_OF_WINDOWS +NUMBER_PASSES +NUMBER_VALUE +NUMERIC_DOMINATED_BY. +NUMERIC_DOMINATES. +NUMERIC_GREATEST_LBOUND. +NUMERIC_LABEL_TO_CHAR. +NUMERIC_LABEL_TO_LBAC. +NUMERIC_LEAST_UBOUND. +NUMERIC_MERGE_LABEL. +NUMERIC_STRICTLY_DOMINATED_BY. +NUMERIC_STRICTLY_DOMINATES. +NUM_ANONYMOUS_NTFNS +NUM_AQ_NTFNS +NUM_ATTR1 +NUM_ATTR2 +NUM_ATTR3 +NUM_ATTR4 +NUM_ATTR5 +NUM_ATTRB +NUM_AUTHENTICATIONS +NUM_AUTH_SERVERS +NUM_BACKUPSETS +NUM_BLOCKED +NUM_BLOCKS +NUM_BUCKETS +NUM_BUSY_SERVERS +NUM_BYTES_SENT +NUM_CBROK +NUM_CELL_DISKS +NUM_CHUNKS +NUM_CLIENTS +NUM_CLIENTS_ASSIGNED +NUM_CLIENTS_DONE +NUM_COLS +NUM_COLUMNS +NUM_COMP +NUM_COORDINATORS +NUM_COPIES +NUM_CPUS +NUM_CU +NUM_DAMAGE_MSG +NUM_DBCHANGE_NTFNS +NUM_DB_REPORTS +NUM_DELETES +NUM_DELETE_STMT +NUM_DISK +NUM_DISK_EXTENTS +NUM_DISTINCT +NUM_DISTINCT_COPIES +NUM_DISTINCT_FILES_BACKED +NUM_DISTINCT_TS_BACKED +NUM_EMAIL_NTFNS +NUM_EM_REPORTS +NUM_EVENTS_PENDING +NUM_EVENTS_PROCESSED +NUM_EXECS +NUM_FAILED_CYCLES +NUM_FAILED_REQUESTS +NUM_FAILURES +NUM_FILES_BACKED +NUM_FLASH_DISKS +NUM_FREELIST_BLOCKS +NUM_FREE_CHUNKS +NUM_FRESH_PCT_PARTITIONS +NUM_FRESH_PCT_REGIONS +NUM_GRID_DISKS +NUM_GROUPING_NTFNS +NUM_HARD_DISKS +NUM_HITS +NUM_HTTP_NTFNS +NUM_INCIDENT +NUM_INCIDENTS +NUM_INCIDENTS_LASTHOUR +NUM_INDEX_KEYS +NUM_INSERTS +NUM_INSERT_STMT +NUM_INTERVAL +NUM_JOBS +NUM_MERGE_STMT +NUM_MESSAGE_RECEIVED +NUM_MESSAGE_SENT +NUM_MISSES +NUM_MSG +NUM_MSGS +NUM_MVS +NUM_MVS_ABORTED +NUM_MVS_COMPLETED +NUM_NTFNS +NUM_NTFNS_ALL_GROUPS +NUM_NTFNS_CURRENT_GROUP +NUM_NULLS +NUM_OCI_NTFNS +NUM_OPEN_SERVERS +NUM_PARAMETERS +NUM_PARTS +NUM_PCT_TABLES +NUM_PENDING_NTFNS +NUM_PHYSICAL_DISKS +NUM_PLAN_DIRECTIVES +NUM_PLSQL_NTFNS +NUM_PREDS +NUM_PROCESS +NUM_PROCESSES +NUM_PURGED +NUM_QUEUED_REQUESTS +NUM_REQUESTS +NUM_RETRIES +NUM_ROWS +NUM_ROWS_PURGED +NUM_RUNS +NUM_SAMPLES +NUM_SELECT_STMT +NUM_SERVERS +NUM_SESS_WAITING +NUM_STALE_PCT_PARTITIONS +NUM_STALE_PCT_REGIONS +NUM_SUCCS +NUM_TARGET_BLOCKS +NUM_TARGET_ROWS +NUM_TASKS +NUM_TBLS +NUM_UPDATES +NUM_UPDATE_STMT +NUM_VOL +NUM_WAITERS +NUM_WAITS +NV. +NVALS +NVARCHAR2_VALUE +NWFAIL_COUNT +O7_DICTIONARY_ACCESSIBILITY +OBJ +OBJ# +OBJD +OBJECT +OBJECT# +OBJECT_ALIAS +OBJECT_COLUMN_NAME +OBJECT_COMMENT +OBJECT_COUNT +OBJECT_DATA +OBJECT_EDITION +OBJECT_FLUSHES +OBJECT_HANDLE +OBJECT_ID +OBJECT_ID_TYPE +OBJECT_INSTANCE +OBJECT_NAME +OBJECT_NO +OBJECT_NODE +OBJECT_OWNER +OBJECT_PATH +OBJECT_PRIVILEGES +OBJECT_RECID +OBJECT_REFRESHES +OBJECT_SCHEMA +OBJECT_SIZE +OBJECT_STAMP +OBJECT_STATUS +OBJECT_TYPE +OBJECT_TYPE_ID +OBJECT_TYPE_NAME +OBJECT_TYPE_WEIGHT +OBJID +OBJN +OBJ_EDITION_NAME +OBJ_ID +OBJ_NAME +OBJ_NUM +OBJ_OWNER +OBJ_PRIV +OBJ_PRIVILEGE +OBJ_TYPE +OBSERVATION_PERIOD +OBSERVED_ERROR# +OBSERVED_ERROR_MESSAGE +OBSERVED_ROW_COUNT +OBSOLETE +OBSOLETE_COUNT +OCCUPANT_DESC +OCCUPANT_NAME +ODCIANYDATADUMP. +ODCICOLINFODUMP. +ODCICOLINFOFLAGSDUMP. +ODCICONST. +ODCIENVDUMP. +ODCIINDEXALTEROPTIONDUMP. +ODCIINDEXCALLPROPERTYDUMP. +ODCIINDEXINFODUMP. +ODCIINDEXINFOFLAGSDUMP. +ODCIPARTINFODUMP. +ODCIPARTINFOLISTDUMP. +ODCIPREDINFODUMP. +ODCIQUERYINFODUMP. +ODCISTATSOPTIONSDUMP. +ODCITABFUNCINFODUMP. +ODM_ASSOCIATION_RULE_MODEL. +ODM_ASSOCIATION_RULE_MODEL.BUILD +ODM_CLUSTERING_UTIL. +ODM_CLUSTERING_UTIL.GENERATE_PROBABILISTIC_MODEL +ODM_CLUSTERING_UTIL.GENERATE_RULES +ODM_MODEL_UTIL. +ODM_MODEL_UTIL.ANALYZE_TABLE +ODM_MODEL_UTIL.CHOP_UP +ODM_MODEL_UTIL.CLOB_TO_EXPRESSION_REC +ODM_MODEL_UTIL.COLUMN_EXIST +ODM_MODEL_UTIL.COUNT_DISTINCT +ODM_MODEL_UTIL.DM_ENABLED_CHECK +ODM_MODEL_UTIL.DROP_TABLE +ODM_MODEL_UTIL.DROP_VIEW +ODM_MODEL_UTIL.EQUAL_OR_BOTH_NULL +ODM_MODEL_UTIL.EXPRESSION_REC_TO_CLOB +ODM_MODEL_UTIL.GET_ATTRSPEC_TEXTVAL +ODM_MODEL_UTIL.GET_PARTITION_LIST +ODM_MODEL_UTIL.IS_TEXT_ATTR +ODM_MODEL_UTIL.PARTITIONING_AVAILABLE +ODM_MODEL_UTIL.TABLE_EMPTY +ODM_MODEL_UTIL.TABLE_EXIST +ODM_MODEL_UTIL.UNIQUE_TABLE_NAME +ODM_MODEL_UTIL.UPCASE +ODM_MODEL_UTIL.VIRTUAL_NESTED_XFORM +ODM_OC_CLUSTERING_MODEL. +ODM_OC_CLUSTERING_MODEL.BUILD_OCLUSTER +ODM_UTIL. +ODM_UTIL.DM_TEXT_TOKENS +ODM_UTIL.DROP_MODEL +ODM_UTIL.GET_DETAILS_PARSE_INTERVAL +ODM_UTIL.SYS_DM_TEXT +ODM_UTIL.SYS_DM_TEXT_DF +OFFLINE_CAPABLE +OFFLINE_CHANGE# +OFFLINE_DISKS +OFFLOAD. +OFFLOAD.GET_PART_KEY_VAL +OFFLOAD.RET_CHAR +OFFLOAD.RET_DATE +OFFLOAD.RET_NUMBER +OFFLOAD.RET_TIMESTAMP +OFFLOAD.RET_VC2 +OFFLOAD.SPLIT_CLOB +OFFLOAD.VIEW_MAGIC +OFFLOADABLE +OFFSET +OFS_ACCESS +OFS_BMAP +OFS_BYTES_READ +OFS_BYTES_WRITTEN +OFS_CREATE +OFS_DESTROY +OFS_FLUSH +OFS_FORGET +OFS_FSPATH +OFS_FSYNC +OFS_FSYNCDIR +OFS_GETATTR +OFS_GETLK +OFS_GETXATTR +OFS_INIT +OFS_INTERRUPT +OFS_LINK +OFS_LISTXATTR +OFS_LOOKUP +OFS_MKDIR +OFS_MKNOD +OFS_MNTFLAGS +OFS_MNTFLGS +OFS_MNTOPTS +OFS_MNTPATH +OFS_MNTPNT +OFS_OPEN +OFS_OPENDIR +OFS_READ +OFS_READDIR +OFS_READLINK +OFS_RELEASE +OFS_RELEASEDIR +OFS_REMOVEXATTR +OFS_RENAME +OFS_RMDIR +OFS_SETATTR +OFS_SETLK +OFS_SETLKW +OFS_SETXATTR +OFS_STATFS +OFS_SYMLINK +OFS_UNLINK +OFS_WRITE +OGC_AREA. +OGC_ASBINARY. +OGC_ASTEXT. +OGC_BOUNDARY. +OGC_BUFFER. +OGC_CENTROID. +OGC_CONTAINS. +OGC_CONVEXHULL. +OGC_CROSS. +OGC_DIFFERENCE. +OGC_DIMENSION. +OGC_DISJOINT. +OGC_DISTANCE. +OGC_ENDPOINT. +OGC_ENVELOPE. +OGC_EQUALS. +OGC_EXTERIORRING. +OGC_GEOMETRYN. +OGC_GEOMETRYTYPE. +OGC_INTERIORRINGN. +OGC_INTERSECTION. +OGC_INTERSECTS. +OGC_ISCLOSED. +OGC_ISEMPTY. +OGC_ISRING. +OGC_ISSIMPLE. +OGC_LENGTH. +OGC_LINESTRINGFROMTEXT. +OGC_LINESTRINGFROMWKB. +OGC_MULTILINESTRINGFROMTEXT. +OGC_MULTILINESTRINGFROMWKB. +OGC_MULTIPOLYGONFROMTEXT. +OGC_MULTIPOLYGONFROMWKB. +OGC_NUMGEOMETRIES. +OGC_NUMINTERIORRINGS. +OGC_NUMPOINTS. +OGC_OVERLAP. +OGC_POINTFROMTEXT. +OGC_POINTFROMWKB. +OGC_POINTN. +OGC_POINTONSURFACE. +OGC_POLYGONFROMTEXT. +OGC_POLYGONFROMWKB. +OGC_RELATE. +OGC_SRID. +OGC_STARTPOINT. +OGC_SYMMETRICDIFFERENCE. +OGC_TOUCH. +OGC_UNION. +OGC_WITHIN. +OGC_X. +OGC_Y. +OGIS_CRS_DELETE_TRIGGER. +OGIS_CRS_INSERT_TRIGGER. +OID_ENABLED. +OID_TEXT +OID_TEXT_LENGTH +OJDS$ROLE_TRIGGER$. +OJDS_CONTEXT. +OJDS_CONTEXT.ADDPERM +OJDS_CONTEXT.DROP_ALL_CHILD_LINKS +OJDS_CONTEXT.DROP_INODE_NODE +OJDS_CONTEXT.DROP_INODE_S +OJDS_CONTEXT.DROP_INODE_SLOW +OJDS_CONTEXT.DROP_PERMISSION_S +OJDS_CONTEXT.IS_THIS_A_CONTEXT +OJDS_CONTEXT.LINK +OJDS_CONTEXT.MKCONTEXT +OJDS_CONTEXT.MKREFERENCE +OJDS_CONTEXT.RELINK +OJDS_CONTEXT.RMEMPTYCTX +OJDS_CONTEXT.RMUNREFNODES +OJDS_CONTEXT.ROLE_DROPPED +OJDS_CONTEXT.UNLINK +OJDS_CONTEXT.USER_DROPPED +OJDS_NAMESPACE. +OJDS_NAMESPACE.EXECUTE +OJDS_NAMESPACE.READ +OJDS_NAMESPACE.WRITE +OLAPIBOOTSTRAP2. +OLAPIHANDSHAKE2. +OLAPRANCURIMPL_T.ODCITABLECLOSE +OLAPRANCURIMPL_T.ODCITABLEDESCRIBE +OLAPRANCURIMPL_T.ODCITABLEFETCH +OLAPRANCURIMPL_T.ODCITABLEPREPARE +OLAPRANCURIMPL_T.ODCITABLESTART +OLAPRC_TABLE. +OLAP_BOOL_SRF. +OLAP_CONDITION. +OLAP_DATE_SRF. +OLAP_NUMBER_SRF. +OLAP_TABLE. +OLAP_TEXT_SRF. +OLDEST_BACKUP_TIME +OLDEST_FLASHBACK_SCN +OLDEST_FLASHBACK_TIME +OLDEST_MESSAGE_NUMBER +OLDEST_MSGID +OLDEST_MSG_ENQTM +OLDEST_OFFLINE_RANGE +OLDEST_PERSISTENT_INC_CTIME +OLDEST_POSITION +OLDEST_REFRESH_DATE +OLDEST_REFRESH_SCN +OLDEST_SAMPLE_ID +OLDEST_SAMPLE_TIME +OLDEST_SCN +OLDEST_SCN_NUM +OLDEST_TRANSACTION_ID +OLDEST_TRANSIENT_INC_CTIME +OLDEST_XIDSLT +OLDEST_XIDSQN +OLDEST_XIDUSN +OLD_BLOCKS +OLD_FILENAME +OLD_HASH_VALUE +OLD_LOG_STATE +OLD_LOG_TYPE +OLD_PUSH_PRED +OLS$DATAPUMP. +OLS$DATAPUMP.INSTANCE_CALLOUT_IMP +OLS$DATAPUMP.SYSTEM_CALLOUT_IMP +OLS_DIP_NTFY. +OLS_DIP_NTFY.GETAPPEVENT +OLS_DIP_NTFY.PUTAPPEVENTSTATUS +OLS_DIP_NTFY.PUTOIDEVENT +OLS_ENFORCEMENT. +OLS_ENFORCEMENT.DISABLE_OLS +OLS_ENFORCEMENT.ENABLE_OLS +OLS_GRANTEE +OLS_INIT_SESSION. +OLS_LABEL_COMPONENT_NAME +OLS_LABEL_COMPONENT_TYPE +OLS_LABEL_DOMINATES. +OLS_MAX_READ_LABEL +OLS_MAX_WRITE_LABEL +OLS_MIN_WRITE_LABEL +OLS_NEW_VALUE +OLS_OLD_VALUE +OLS_PARENT_GROUP_NAME +OLS_POLICY_NAME +OLS_PRIVILEGES_GRANTED +OLS_PRIVILEGES_USED +OLS_PROGRAM_UNIT_NAME +OLS_STRING_LABEL +OLS_UTIL_WRAPPER. +OLS_UTIL_WRAPPER.CREATE_TEMP_TABLE +OLS_UTIL_WRAPPER.DROP_ROLE +OLS_UTIL_WRAPPER.GET_STATUS +ONAME +ONEPASS_EXECUTIONS +ONLINE +ONLINE_CHANGE# +ONLINE_FUZZY +ONLINE_STATUS +ONLINE_TIME +ONUSER +ON_CONVERT_Q +ON_DATAMOVEMENT +ON_GRANT_Q +ON_LOAD +OPAQUE_TRANSFORM +OPAQUE_XCANONICAL +OPCODE +OPENOWNEROPAQUE +OPENREAD +OPENS +OPENSEQUENCEID +OPENSTATEID +OPENWRITE +OPEN_CURSORS +OPEN_MODE +OPEN_OPT_DEADLOCK +OPEN_OPT_NO_XID +OPEN_OPT_PERSISTENT +OPEN_OPT_PROCESS_OWNED +OPEN_RESETLOGS +OPEN_TIME +OPEN_VERSIONS +OPERATION +OPERATIONS_FILTER +OPERATION_CODE +OPERATION_ID +OPERATION_NAME +OPERATION_TAG +OPERATION_TIME +OPERATION_TYPE +OPERATOR +OPERATOR_MASK +OPERATOR_NAME +OPERATOR_SCHEMA +OPERATOR_TYPE +OPER_COUNT +OPER_MODE +OPER_TYPE +OPID +OPNAME +OPTIMAL_EXECUTIONS +OPTIMAL_LOGFILE_SIZE +OPTIMAL_SIZE +OPTIME +OPTIMIZATION +OPTIMIZED +OPTIMIZED_PHYBLKRD +OPTIMIZED_PHYSICAL_READS +OPTIMIZED_PHYSICAL_READS_DELTA +OPTIMIZED_PHYSICAL_READS_TOTAL +OPTIMIZED_PHY_READ_REQUESTS +OPTIMIZED_WEIGHT +OPTIMIZER +OPTIMIZER_COST +OPTIMIZER_ENV +OPTIMIZER_ENV_HASH_VALUE +OPTIMIZER_FEATURES_ENABLE +OPTIMIZER_FEATURE_ENABLE +OPTIMIZER_MISMATCH +OPTIMIZER_MODE +OPTIMIZER_MODE_MISMATCH +OPTIMIZER_STATS +OPTION$ +OPTIONS +OPTION_ID +OPTION_NAME +OPTSIZE +OPT_ESTIMATE +OPT_PARAM +OP_2_SS +OP_SCNBAS +OP_SCNWRP +OP_TIMESTAMP +ORA$GRANT_SYS_SELECT. +ORA$_SYS_REP_AUTH. +ORA12C_STRONG_VERIFY_FUNCTION. +ORACLE_BIGDATA.ODCIEXTTABLECLOSE +ORACLE_BIGDATA.ODCIEXTTABLEFETCH +ORACLE_BIGDATA.ODCIEXTTABLEOPEN +ORACLE_BIGDATA.ODCIEXTTABLEPOPULATE +ORACLE_BIGDATA.ODCIGETINTERFACES +ORACLE_DATAPUMP.ODCIEXTTABLECLOSE +ORACLE_DATAPUMP.ODCIEXTTABLEFETCH +ORACLE_DATAPUMP.ODCIEXTTABLEOPEN +ORACLE_DATAPUMP.ODCIEXTTABLEPOPULATE +ORACLE_DATAPUMP.ODCIGETINTERFACES +ORACLE_HDFS.ODCIEXTTABLECLOSE +ORACLE_HDFS.ODCIEXTTABLEFETCH +ORACLE_HDFS.ODCIEXTTABLEOPEN +ORACLE_HDFS.ODCIEXTTABLEPOPULATE +ORACLE_HDFS.ODCIGETINTERFACES +ORACLE_HIVE.ODCIEXTTABLECLOSE +ORACLE_HIVE.ODCIEXTTABLEFETCH +ORACLE_HIVE.ODCIEXTTABLEOPEN +ORACLE_HIVE.ODCIEXTTABLEPOPULATE +ORACLE_HIVE.ODCIGETINTERFACES +ORACLE_LOADER.ODCIEXTTABLECLOSE +ORACLE_LOADER.ODCIEXTTABLEFETCH +ORACLE_LOADER.ODCIEXTTABLEOPEN +ORACLE_LOADER.ODCIEXTTABLEPOPULATE +ORACLE_LOADER.ODCIGETINTERFACES +ORACLE_MAINTAINED +ORACLE_USERNAME +ORA_COMPLEXITY_CHECK. +ORA_FI_DECISION_TREE_HORIZ. +ORA_FI_EXP_MAX. +ORA_FI_IMP_T.ODCITABLEDESCRIBE +ORA_FI_SUPERVISED_BINNING. +ORA_GET_AUDITED_LABEL. +ORA_SI_MKSTILLIMAGE. +ORA_STRING_DISTANCE. +ORDAUDIO.APPENDTOCOMMENTS +ORDAUDIO.CHECKPROPERTIES +ORDAUDIO.CLEARLOCAL +ORDAUDIO.CLOSESOURCE +ORDAUDIO.COMPARECOMMENTS +ORDAUDIO.COPYCOMMENTSOUT +ORDAUDIO.DELETECOMMENTS +ORDAUDIO.DELETECONTENT +ORDAUDIO.ERASEFROMCOMMENTS +ORDAUDIO.EXPORT +ORDAUDIO.GETALLATTRIBUTES +ORDAUDIO.GETATTRIBUTE +ORDAUDIO.GETAUDIODURATION +ORDAUDIO.GETBFILE +ORDAUDIO.GETCOMMENTLENGTH +ORDAUDIO.GETCOMPRESSIONTYPE +ORDAUDIO.GETCONTENT +ORDAUDIO.GETCONTENTINLOB +ORDAUDIO.GETCONTENTLENGTH +ORDAUDIO.GETDESCRIPTION +ORDAUDIO.GETENCODING +ORDAUDIO.GETFORMAT +ORDAUDIO.GETMIMETYPE +ORDAUDIO.GETNUMBEROFCHANNELS +ORDAUDIO.GETPROPERTIES +ORDAUDIO.GETSAMPLESIZE +ORDAUDIO.GETSAMPLINGRATE +ORDAUDIO.GETSOURCE +ORDAUDIO.GETSOURCELOCATION +ORDAUDIO.GETSOURCENAME +ORDAUDIO.GETSOURCETYPE +ORDAUDIO.GETUPDATETIME +ORDAUDIO.IMPORT +ORDAUDIO.IMPORTFROM +ORDAUDIO.INIT +ORDAUDIO.ISLOCAL +ORDAUDIO.LOADCOMMENTSFROMFILE +ORDAUDIO.LOCATEINCOMMENTS +ORDAUDIO.OPENSOURCE +ORDAUDIO.ORDAUDIO +ORDAUDIO.PROCESSAUDIOCOMMAND +ORDAUDIO.PROCESSSOURCECOMMAND +ORDAUDIO.READFROMCOMMENTS +ORDAUDIO.READFROMSOURCE +ORDAUDIO.SETAUDIODURATION +ORDAUDIO.SETCOMPRESSIONTYPE +ORDAUDIO.SETDESCRIPTION +ORDAUDIO.SETENCODING +ORDAUDIO.SETFORMAT +ORDAUDIO.SETKNOWNATTRIBUTES +ORDAUDIO.SETLOCAL +ORDAUDIO.SETMIMETYPE +ORDAUDIO.SETNUMBEROFCHANNELS +ORDAUDIO.SETPROPERTIES +ORDAUDIO.SETSAMPLESIZE +ORDAUDIO.SETSAMPLINGRATE +ORDAUDIO.SETSOURCE +ORDAUDIO.SETUPDATETIME +ORDAUDIO.TRIMCOMMENTS +ORDAUDIO.TRIMSOURCE +ORDAUDIO.WRITETOCOMMENTS +ORDAUDIO.WRITETOSOURCE +ORDAUDIOEXCEPTIONS. +ORDAUDIO_PKG. +ORDAUDIO_PKG.CHECKPROPERTIES +ORDAUDIO_PKG.GETALLATTRIBUTES +ORDAUDIO_PKG.GETATTRIBUTE +ORDAUDIO_PKG.GETATTRIBUTES +ORDAUDIO_PKG.GETATTRIBUTESFROMLOCAL +ORDAUDIO_PKG.GETSUPPORTEDMIMETYPE +ORDAUDIO_PKG.PROCESSCOMMAND +ORDAUDIO_PKG.SETOUTPUTTONULL +ORDAUDIO_PKG.SETOUTPUTTOSTATUS +ORDAUDIO_PKG.SETOUTPUTTOTRACE +ORDAUDIO_PKG.SETOUTPUTTOVERBOSE +ORDAUDIO_PKG.SETPROPERTIES +ORDDATASOURCE.EXPORT +ORDDATASOURCE.GETBFILE +ORDDATASOURCE.GETBLOB +ORDDATASOURCE.GETCONTENTLENGTH +ORDDATASOURCE.GETSOURCEINFORMATION +ORDDATASOURCE.GETSOURCELOCATION +ORDDATASOURCE.GETSOURCENAME +ORDDATASOURCE.GETSOURCETYPE +ORDDATASOURCE.GETUPDATETIME +ORDDATASOURCE.IMPORT +ORDDATASOURCE.ISLOCAL +ORDDATASOURCE.ORDDATASOURCE +ORDDATASOURCE.SETSOURCEINFORMATION +ORDDATASOURCE.SETUPDATETIME +ORDDICOM.EXPORT +ORDDICOM.EXTRACTMETADATA +ORDDICOM.GETATTRIBUTEBYNAME +ORDDICOM.GETATTRIBUTEBYTAG +ORDDICOM.GETCONTENT +ORDDICOM.GETCONTENTLENGTH +ORDDICOM.GETSERIESINSTANCEUID +ORDDICOM.GETSOPCLASSUID +ORDDICOM.GETSOPINSTANCEUID +ORDDICOM.GETSOURCEINFORMATION +ORDDICOM.GETSOURCELOCATION +ORDDICOM.GETSOURCENAME +ORDDICOM.GETSOURCETYPE +ORDDICOM.GETSTUDYINSTANCEUID +ORDDICOM.IMPORT +ORDDICOM.ISANONYMOUS +ORDDICOM.ISCONFORMANCEVALID +ORDDICOM.ISLOCAL +ORDDICOM.MAKEANONYMOUS +ORDDICOM.ORDDICOM +ORDDICOM.PROCESSCOPY +ORDDICOM.SETPROPERTIES +ORDDICOM.WRITEMETADATA +ORDDOC.CLEARLOCAL +ORDDOC.CLOSESOURCE +ORDDOC.DELETECONTENT +ORDDOC.EXPORT +ORDDOC.GETBFILE +ORDDOC.GETCONTENT +ORDDOC.GETCONTENTINLOB +ORDDOC.GETCONTENTLENGTH +ORDDOC.GETFORMAT +ORDDOC.GETMIMETYPE +ORDDOC.GETPROPERTIES +ORDDOC.GETSOURCE +ORDDOC.GETSOURCELOCATION +ORDDOC.GETSOURCENAME +ORDDOC.GETSOURCETYPE +ORDDOC.GETUPDATETIME +ORDDOC.IMPORT +ORDDOC.IMPORTFROM +ORDDOC.INIT +ORDDOC.ISLOCAL +ORDDOC.OPENSOURCE +ORDDOC.ORDDOC +ORDDOC.PROCESSSOURCECOMMAND +ORDDOC.READFROMSOURCE +ORDDOC.SETFORMAT +ORDDOC.SETLOCAL +ORDDOC.SETMIMETYPE +ORDDOC.SETPROPERTIES +ORDDOC.SETSOURCE +ORDDOC.SETUPDATETIME +ORDDOC.TRIMSOURCE +ORDDOC.WRITETOSOURCE +ORDDOCEXCEPTIONS. +ORDDOC_PKG. +ORDDOC_PKG.GETPROPERTIES +ORDERED +ORDERED_PREDICATES +ORDERENTRY. +ORDERENTRY.BROWSEANDUPDATEORDERS +ORDERENTRY.BROWSEPRODUCTS +ORDERENTRY.NEWCUSTOMER +ORDERENTRY.NEWORDER +ORDERENTRY.PROCESSORDERS +ORDERENTRY.SALESREPSQUERY +ORDERENTRY.SETPLSQLCOMMIT +ORDERENTRY.UPDATECUSTOMERDETAILS +ORDERENTRY.WAREHOUSEACTIVITYQUERY +ORDERENTRY.WAREHOUSEORDERSQUERY +ORDERING_TYPE +ORDERROR. +ORDERROR.PRINTSTACKTRACE +ORDERROR.RAISE +ORDERS_GET_CHAR. +ORDERS_GET_ROWS. +ORDERS_ITEMS_TRG. +ORDERS_PART_OFV_INSERT. +ORDERS_TRG. +ORDER_FLAG +ORDER_ID +ORDER_NUM +ORDIMAGE.APPLYWATERMARK +ORDIMAGE.CHECKPROPERTIES +ORDIMAGE.CLEARLOCAL +ORDIMAGE.CLOSESOURCE +ORDIMAGE.COPY +ORDIMAGE.DELETECONTENT +ORDIMAGE.EXPORT +ORDIMAGE.GETBFILE +ORDIMAGE.GETCOMPRESSIONFORMAT +ORDIMAGE.GETCONTENT +ORDIMAGE.GETCONTENTFORMAT +ORDIMAGE.GETCONTENTLENGTH +ORDIMAGE.GETDICOMMETADATA +ORDIMAGE.GETFILEFORMAT +ORDIMAGE.GETHEIGHT +ORDIMAGE.GETMETADATA +ORDIMAGE.GETMIMETYPE +ORDIMAGE.GETPROPERTIES +ORDIMAGE.GETSOURCE +ORDIMAGE.GETSOURCELOCATION +ORDIMAGE.GETSOURCENAME +ORDIMAGE.GETSOURCETYPE +ORDIMAGE.GETUPDATETIME +ORDIMAGE.GETWIDTH +ORDIMAGE.IMPORT +ORDIMAGE.IMPORTFROM +ORDIMAGE.INIT +ORDIMAGE.ISLOCAL +ORDIMAGE.OPENSOURCE +ORDIMAGE.ORDIMAGE +ORDIMAGE.PROCESS +ORDIMAGE.PROCESSCOPY +ORDIMAGE.PROCESSSOURCECOMMAND +ORDIMAGE.PUTMETADATA +ORDIMAGE.READFROMSOURCE +ORDIMAGE.SETLOCAL +ORDIMAGE.SETMIMETYPE +ORDIMAGE.SETPROPERTIES +ORDIMAGE.SETSOURCE +ORDIMAGE.SETUPDATETIME +ORDIMAGE.TRIMSOURCE +ORDIMAGE.WRITETOSOURCE +ORDIMAGECONSTANTS. +ORDIMAGEEXCEPTIONS. +ORDIMAGESIEXCEPTIONS. +ORDIMAGESIGNATURE.EVALUATESCORE +ORDIMAGESIGNATURE.GENERATESIGNATURE +ORDIMAGESIGNATURE.INIT +ORDIMAGESIGNATURE.ISSIMILAR +ORDIMDPCALLOUTS. +ORDIMDPCALLOUTS.INSTANCE_CALLOUT_IMP +ORDIMERRORCODES. +ORDIMERRORCODES.RAISEEXCEPTIONWITHMSG +ORDIMERRORCODES.RAISEEXCEPTIONWITHMSG2 +ORDIMGEXTCODEC_PKG. +ORDIMGEXTCODEC_PKG.MMTK_EXT_PROCESS +ORDIMGEXTCODEC_PKG.MMTK_GETPROPERTIES +ORDIMGEXTCODEC_PKG.MMTK_PROCESS +ORDIMGSIG_PKG. +ORDIMGSIG_PKG.GENERATESIGNATUREFUNC +ORDIMGSI_PKG. +ORDIMGSI_PKG.COMPUTESCORE +ORDIMGSI_PKG.EXTRACT_ALLPROPERTIES +ORDIMGSI_PKG.EXTRACT_ALLPROPERTIES_FUNC +ORDIMGSI_PKG.GETSCORE +ORDIMGSI_PKG.SI_DERIVETHUMBNAIL +ORDIMGSI_PKG.SI_ISSUPPORTEDFORMATCONV +ORDIMGSI_PKG.SI_ISVALIDSTR +ORDIMGSI_PKG.SI_SUPPORTEDFORMAT +ORDIMGSI_PKG.SI_SUPPORTEDTHUMBNAIL +ORDIMG_PKG. +ORDIMG_PKG.APPLYWATERMARK +ORDIMG_PKG.BUILDXMLATTRIBUTES +ORDIMG_PKG.BUILDXMLDOC +ORDIMG_PKG.CHECKGETMETAARGS +ORDIMG_PKG.CHECKPROPERTIES +ORDIMG_PKG.CHECKPUTMETAARGS +ORDIMG_PKG.COPY +ORDIMG_PKG.COPYCONTENT +ORDIMG_PKG.FREETEMPLOB +ORDIMG_PKG.GETDICOMMETADATA +ORDIMG_PKG.GETHEADERLESSINFO +ORDIMG_PKG.GETIMAGEPROPERTIES +ORDIMG_PKG.GETMETADATA +ORDIMG_PKG.IMAGECONVERT +ORDIMG_PKG.IMPORT +ORDIMG_PKG.IMPORTFROM +ORDIMG_PKG.LARGEIMAGECONVERT +ORDIMG_PKG.ORDIMGB_APPLYWATERMARK +ORDIMG_PKG.ORDIMGB_PROCESS +ORDIMG_PKG.ORDIMGB_SETPROPERTIES +ORDIMG_PKG.ORDIMGF_APPLYWATERMARK +ORDIMG_PKG.ORDIMGF_PROCESSCOPY +ORDIMG_PKG.ORDIMGF_SETPROPERTIES +ORDIMG_PKG.ORDIMG_HEADERLESSSETPROPERTIES +ORDIMG_PKG.PACKMETADATAVECTOR +ORDIMG_PKG.PROCESS +ORDIMG_PKG.PROCESSCOPY +ORDIMG_PKG.PUTMETADATA +ORDIMG_PKG.SETDEBUGLEVEL +ORDIMG_PKG.SETPROPERTIES +ORDINAL +ORDPLSGWYUTIL. +ORDPLSGWYUTIL.CACHE_IS_VALID +ORDPLSGWYUTIL.RESOURCE_NOT_FOUND +ORDPLSGWYUTIL.SET_LAST_MODIFIED +ORDSOURCE.CLEARLOCAL +ORDSOURCE.CLOSE +ORDSOURCE.DELETELOCALCONTENT +ORDSOURCE.EXPORT +ORDSOURCE.GETBFILE +ORDSOURCE.GETCONTENTINTEMPLOB +ORDSOURCE.GETCONTENTLENGTH +ORDSOURCE.GETLOCALCONTENT +ORDSOURCE.GETSOURCEADDRESS +ORDSOURCE.GETSOURCEINFORMATION +ORDSOURCE.GETSOURCELOCATION +ORDSOURCE.GETSOURCENAME +ORDSOURCE.GETSOURCETYPE +ORDSOURCE.GETUPDATETIME +ORDSOURCE.IMPORT +ORDSOURCE.IMPORTFROM +ORDSOURCE.ISLOCAL +ORDSOURCE.OPEN +ORDSOURCE.PROCESSCOMMAND +ORDSOURCE.READ +ORDSOURCE.SETLOCAL +ORDSOURCE.SETSOURCEINFORMATION +ORDSOURCE.SETUPDATETIME +ORDSOURCE.TRIM +ORDSOURCE.WRITE +ORDSOURCEEXCEPTIONS. +ORDUTIL. +ORDUTIL.GETAUDIOPKGNAME +ORDUTIL.GETDICOMVALIDATION +ORDUTIL.GETDOCPKGNAME +ORDUTIL.GETSOURCEPKGNAME +ORDUTIL.GETVIDEOPKGNAME +ORDUTIL.SETDICOMVALIDATION +ORDUTIL_PRV. +ORDUTIL_PRV.RECORDFEATUREUSAGE +ORDVIDEO.APPENDTOCOMMENTS +ORDVIDEO.CHECKPROPERTIES +ORDVIDEO.CLEARLOCAL +ORDVIDEO.CLOSESOURCE +ORDVIDEO.COMPARECOMMENTS +ORDVIDEO.COPYCOMMENTSOUT +ORDVIDEO.DELETECOMMENTS +ORDVIDEO.DELETECONTENT +ORDVIDEO.ERASEFROMCOMMENTS +ORDVIDEO.EXPORT +ORDVIDEO.GETALLATTRIBUTES +ORDVIDEO.GETATTRIBUTE +ORDVIDEO.GETBFILE +ORDVIDEO.GETBITRATE +ORDVIDEO.GETCOMMENTLENGTH +ORDVIDEO.GETCOMPRESSIONTYPE +ORDVIDEO.GETCONTENT +ORDVIDEO.GETCONTENTINLOB +ORDVIDEO.GETCONTENTLENGTH +ORDVIDEO.GETDESCRIPTION +ORDVIDEO.GETFORMAT +ORDVIDEO.GETFRAMERATE +ORDVIDEO.GETFRAMERESOLUTION +ORDVIDEO.GETFRAMESIZE +ORDVIDEO.GETMIMETYPE +ORDVIDEO.GETNUMBEROFCOLORS +ORDVIDEO.GETNUMBEROFFRAMES +ORDVIDEO.GETPROPERTIES +ORDVIDEO.GETSOURCE +ORDVIDEO.GETSOURCELOCATION +ORDVIDEO.GETSOURCENAME +ORDVIDEO.GETSOURCEOBJECT +ORDVIDEO.GETSOURCETYPE +ORDVIDEO.GETUPDATETIME +ORDVIDEO.GETVIDEODURATION +ORDVIDEO.IMPORT +ORDVIDEO.IMPORTFROM +ORDVIDEO.INIT +ORDVIDEO.ISLOCAL +ORDVIDEO.LOADCOMMENTSFROMFILE +ORDVIDEO.LOCATEINCOMMENTS +ORDVIDEO.OPENSOURCE +ORDVIDEO.ORDVIDEO +ORDVIDEO.PROCESSSOURCECOMMAND +ORDVIDEO.PROCESSVIDEOCOMMAND +ORDVIDEO.READFROMCOMMENTS +ORDVIDEO.READFROMSOURCE +ORDVIDEO.SETBITRATE +ORDVIDEO.SETCOMPRESSIONTYPE +ORDVIDEO.SETDESCRIPTION +ORDVIDEO.SETFORMAT +ORDVIDEO.SETFRAMERATE +ORDVIDEO.SETFRAMERESOLUTION +ORDVIDEO.SETFRAMESIZE +ORDVIDEO.SETKNOWNATTRIBUTES +ORDVIDEO.SETLOCAL +ORDVIDEO.SETMIMETYPE +ORDVIDEO.SETNUMBEROFCOLORS +ORDVIDEO.SETNUMBEROFFRAMES +ORDVIDEO.SETPROPERTIES +ORDVIDEO.SETSOURCE +ORDVIDEO.SETUPDATETIME +ORDVIDEO.SETVIDEODURATION +ORDVIDEO.TRIMCOMMENTS +ORDVIDEO.TRIMSOURCE +ORDVIDEO.WRITETOCOMMENTS +ORDVIDEO.WRITETOSOURCE +ORDVIDEOEXCEPTIONS. +ORDVIDEO_PKG. +ORDVIDEO_PKG.CHECKPROPERTIES +ORDVIDEO_PKG.GETALLATTRIBUTES +ORDVIDEO_PKG.GETATTRIBUTE +ORDVIDEO_PKG.GETATTRIBUTES +ORDVIDEO_PKG.GETATTRIBUTESFROMLOCAL +ORDVIDEO_PKG.GETSUPPORTEDMIMETYPE +ORDVIDEO_PKG.PROCESSCOMMAND +ORDVIDEO_PKG.SETOUTPUTTONULL +ORDVIDEO_PKG.SETOUTPUTTOSTATUS +ORDVIDEO_PKG.SETOUTPUTTOTRACE +ORDVIDEO_PKG.SETOUTPUTTOVERBOSE +ORDVIDEO_PKG.SETPROPERTIES +ORDX_DEFAULT_AUDIO. +ORDX_DEFAULT_AUDIO.CHECKPROPERTIES +ORDX_DEFAULT_AUDIO.GETALLATTRIBUTES +ORDX_DEFAULT_AUDIO.GETATTRIBUTE +ORDX_DEFAULT_AUDIO.PROCESSCOMMAND +ORDX_DEFAULT_AUDIO.SETPROPERTIES +ORDX_DEFAULT_DOC. +ORDX_DEFAULT_DOC.SETPROPERTIES +ORDX_DEFAULT_VIDEO. +ORDX_DEFAULT_VIDEO.CHECKPROPERTIES +ORDX_DEFAULT_VIDEO.GETALLATTRIBUTES +ORDX_DEFAULT_VIDEO.GETATTRIBUTE +ORDX_DEFAULT_VIDEO.PROCESSCOMMAND +ORDX_DEFAULT_VIDEO.SETPROPERTIES +ORDX_FILE_SOURCE. +ORDX_FILE_SOURCE.CLOSE +ORDX_FILE_SOURCE.EXPORT +ORDX_FILE_SOURCE.GETCONTENTLENGTH +ORDX_FILE_SOURCE.GETSOURCEADDRESS +ORDX_FILE_SOURCE.IMPORT +ORDX_FILE_SOURCE.IMPORTFROM +ORDX_FILE_SOURCE.OPEN +ORDX_FILE_SOURCE.PROCESSCOMMAND +ORDX_FILE_SOURCE.READ +ORDX_FILE_SOURCE.TRIM +ORDX_FILE_SOURCE.WRITE +ORDX_HTTP_SOURCE. +ORDX_HTTP_SOURCE.CLOSE +ORDX_HTTP_SOURCE.EXPORT +ORDX_HTTP_SOURCE.GETCONTENTLENGTH +ORDX_HTTP_SOURCE.GETSOURCEADDRESS +ORDX_HTTP_SOURCE.IMPORT +ORDX_HTTP_SOURCE.IMPORTFROM +ORDX_HTTP_SOURCE.OPEN +ORDX_HTTP_SOURCE.PROCESSCOMMAND +ORDX_HTTP_SOURCE.READ +ORDX_HTTP_SOURCE.TRIM +ORDX_HTTP_SOURCE.WRITE +ORD_ADMIN. +ORD_ADMIN.MOVE_ORDIM_TBLSPC +ORD_DATASOURCE_PKG. +ORD_DATASOURCE_PKG.EXPORT +ORD_DATASOURCE_PKG.IMPORTFROM +ORD_DICOM. +ORD_DICOM.CREATEDICOMIMAGE +ORD_DICOM.EXPORT +ORD_DICOM.EXTRACTMETADATA +ORD_DICOM.GETDICTIONARYTAG +ORD_DICOM.GETMAPPINGXPATH +ORD_DICOM.IMPORTFROM +ORD_DICOM.ISANONYMOUS +ORD_DICOM.ISCONFORMANCEVALID +ORD_DICOM.MAKEANONYMOUS +ORD_DICOM.PROCESSCOPY +ORD_DICOM.SETDATAMODEL +ORD_DICOM.WRITEMETADATA +ORD_DICOM_ADMIN. +ORD_DICOM_ADMIN.DELETEDOCUMENT +ORD_DICOM_ADMIN.EDITDATAMODEL +ORD_DICOM_ADMIN.EXPORTDATAMODEL +ORD_DICOM_ADMIN.EXPORTDOCUMENT +ORD_DICOM_ADMIN.GENERATETAGLISTDOCUMENT +ORD_DICOM_ADMIN.GETDOCUMENTCONTENT +ORD_DICOM_ADMIN.IMPORTDATAMODEL +ORD_DICOM_ADMIN.INSERTDOCUMENT +ORD_DICOM_ADMIN.PUBLISHDATAMODEL +ORD_DICOM_ADMIN.ROLLBACKDATAMODEL +ORD_DICOM_ADMIN_PRV. +ORD_DICOM_ADMIN_PRV.CANONICALCOLUMNNAME +ORD_DICOM_ADMIN_PRV.DELETEANYDOC +ORD_DICOM_ADMIN_PRV.DELETEDOCUMENT +ORD_DICOM_ADMIN_PRV.EDITDATAMODEL +ORD_DICOM_ADMIN_PRV.GENERATETAGLISTDOCUMENT +ORD_DICOM_ADMIN_PRV.GETDICTIONARYTAG +ORD_DICOM_ADMIN_PRV.GETDOCUMENTCONTENT +ORD_DICOM_ADMIN_PRV.GETMAPPINGXPATH +ORD_DICOM_ADMIN_PRV.GETNEWLOCK +ORD_DICOM_ADMIN_PRV.GETNEXTDICOMVERSIONNUMBER +ORD_DICOM_ADMIN_PRV.GETPREFERENCEVALUE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLADMINDOCSTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLATTRIBUTETABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLDICOMTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLMETADATATABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLPREVIEWTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLSPECIALTAGTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLVERSIONTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLWADOTABLE +ORD_DICOM_ADMIN_PRV.HASDOCUMENT +ORD_DICOM_ADMIN_PRV.IMPORTDATAMODEL +ORD_DICOM_ADMIN_PRV.INSERTDOCUMENT +ORD_DICOM_ADMIN_PRV.ISCONSTRAINT +ORD_DICOM_ADMIN_PRV.ISCOVEREDBYSTL +ORD_DICOM_ADMIN_PRV.ISDATAMODELLOADED +ORD_DICOM_ADMIN_PRV.ISDOCUMENT +ORD_DICOM_ADMIN_PRV.ISOWNLOCK +ORD_DICOM_ADMIN_PRV.PUBLISHDATAMODEL +ORD_DICOM_ADMIN_PRV.RELEASEDATAMODELLOCK +ORD_DICOM_ADMIN_PRV.ROLLBACKDATAMODEL +ORD_DICOM_ADMIN_PRV.SETDATAMODEL +ORD_DICOM_CT. +ORD_DICOM_CT.DELETECT +ORD_DICOM_CT.INSERTCT +ORD_DICOM_CT.UPDATECT +ORD_DICOM_PKG. +ORD_DICOM_PKG.CHECKFEATUREENABLED +ORD_DICOM_PKG.CREATEDICOMIMAGE +ORD_DICOM_PKG.GETDICOMPROPERTIES +ORD_DICOM_PKG.HASDOCUMENT +ORD_DICOM_PKG.ISANONYMOUS +ORD_DICOM_PKG.ISCONFORMANCEVALID +ORD_DICOM_PKG.ISCONSTRAINT +ORD_DICOM_PKG.ISDOCUMENT +ORD_DICOM_PKG.ISIMAGELOCAL +ORD_DICOM_PKG.MAKEANONYMOUS +ORD_DICOM_PKG.PROCESSCOPY +ORD_DICOM_PKG.WRITEMETADATA +ORD_DICOM_PROTOCOL. +ORD_DICOM_PROTOCOL.CONFIG +ORD_DICOM_PROTOCOL.EXISTSINREPOS +ORD_DICOM_PROTOCOL.EXTRACTMETADATA +ORD_DICOM_PROTOCOL.FINDDICOM +ORD_DICOM_PROTOCOL.GENERATEPREVIEW +ORD_DICOM_PROTOCOL.GETALLATTRIBUTESTYPE +ORD_DICOM_PROTOCOL.GETALLUNPROCESSED +ORD_DICOM_PROTOCOL.GETATTRIBUTE +ORD_DICOM_PROTOCOL.GETDICOM +ORD_DICOM_PROTOCOL.GETDISTINCTVALUESFORTAGS +ORD_DICOM_PROTOCOL.GETEMPTYDICOM +ORD_DICOM_PROTOCOL.GETINSTANCEAVAILABILITY +ORD_DICOM_PROTOCOL.GETPROTOCOLDOCNAME +ORD_DICOM_PROTOCOL.GETSTUDYATTRIBUTE +ORD_DICOM_PROTOCOL.GETWADOLINK +ORD_DICOM_PROTOCOL.ISDICOMRETAINED +ORD_DICOM_PROTOCOL.ISPREVIEWDEFINED +ORD_DICOM_PROTOCOL.ISVERSIONINGENABLED +ORD_DICOM_PROTOCOL.ISWADOLINKDEFINED +ORD_DICOM_PROTOCOL.PROCESSDICOM +ORD_DICOM_PROTOCOL.SETATTRIBUTE +ORD_DICOM_PROTOCOL.SETWADOLINK +ORGANIZATION_ID +ORIGIN +ORIGINAL +ORIGINAL_CAPTURE_NAME +ORIGINAL_CAPTURE_STATUS +ORIGINAL_INPRATE_BYTES +ORIGINAL_INPRATE_BYTES_DISPLAY +ORIGINAL_INPUT_BYTES +ORIGINAL_INPUT_BYTES_DISPLAY +ORIGINAL_NAME +ORIGINAL_PRIMARY +ORIGINAL_PROPAGATION_NAME +ORIGINAL_QUEUE_NAME +ORIGINAL_QUEUE_OWNER +ORIGINAL_RULE_CONDITION +ORIGINAL_SOURCE_QUEUE_NAME +ORIGINAL_SOURCE_QUEUE_OWNER +ORIGINAL_SQL_TXT. +ORIGINAL_STREAMS_NAME +ORIGINAL_XSTREAM_NAME +ORIGINATING_TIMESTAMP +ORIGIN_CON_ID +ORIG_CONSUMER_GROUP_ID +ORPHANED_ENTRIES +OR_EXPAND +OSB_ALLOCATED +OSID +OSPID +OSSTAT_ID +OSUSER +OS_GRANTED +OS_HOST +OS_ID +OS_MB +OS_NAME +OS_PRIVILEGE +OS_PROCESS +OS_PROCESS_ID +OS_SUBDIR +OS_TERMINAL +OS_USER +OS_USERNAME +OS_USER_NAME +OTHER +OTHERSTAT_10_ID +OTHERSTAT_10_TYPE +OTHERSTAT_10_VALUE +OTHERSTAT_1_ID +OTHERSTAT_1_TYPE +OTHERSTAT_1_VALUE +OTHERSTAT_2_ID +OTHERSTAT_2_TYPE +OTHERSTAT_2_VALUE +OTHERSTAT_3_ID +OTHERSTAT_3_TYPE +OTHERSTAT_3_VALUE +OTHERSTAT_4_ID +OTHERSTAT_4_TYPE +OTHERSTAT_4_VALUE +OTHERSTAT_5_ID +OTHERSTAT_5_TYPE +OTHERSTAT_5_VALUE +OTHERSTAT_6_ID +OTHERSTAT_6_TYPE +OTHERSTAT_6_VALUE +OTHERSTAT_7_ID +OTHERSTAT_7_TYPE +OTHERSTAT_7_VALUE +OTHERSTAT_8_ID +OTHERSTAT_8_TYPE +OTHERSTAT_8_VALUE +OTHERSTAT_9_ID +OTHERSTAT_9_TYPE +OTHERSTAT_9_VALUE +OTHERSTAT_GROUP_ID +OTHER_REQUESTS +OTHER_SCHEMAS +OTHER_TAG +OTHER_XML +OUTER +OUTER_JOIN_TO_ANTI +OUTER_JOIN_TO_INNER +OUTER_TABLE_COLUMN +OUTER_TABLE_NAME +OUTER_TABLE_OWNER +OUTLINE +OUTLINE_CATEGORY +OUTLINE_LEAF +OUTLINE_MISMATCH +OUTLINE_SID +OUTLN_EDIT_PKG. +OUTLN_EDIT_PKG.CHANGE_JOIN_POS +OUTLN_EDIT_PKG.CREATE_EDIT_TABLES +OUTLN_EDIT_PKG.DROP_EDIT_TABLES +OUTLN_EDIT_PKG.GENERATE_SIGNATURE +OUTLN_EDIT_PKG.REFRESH_PRIVATE_OUTLINE +OUTLN_PKG. +OUTLN_PKG.CLEAR_USED +OUTLN_PKG.CREATE_OUTLINE +OUTLN_PKG.DROP_BY_CAT +OUTLN_PKG.DROP_COLLISION +OUTLN_PKG.DROP_COLLISION_EXPACT +OUTLN_PKG.DROP_EXTRAS +OUTLN_PKG.DROP_EXTRAS_EXPACT +OUTLN_PKG.DROP_UNREFD_HINTS +OUTLN_PKG.DROP_UNREFD_HINTS_EXPACT +OUTLN_PKG.DROP_UNUSED +OUTLN_PKG.EXACT_TEXT_SIGNATURES +OUTLN_PKG.REFRESH_OUTLINE_CACHE +OUTLN_PKG.REFRESH_OUTLINE_CACHE_EXPACT +OUTLN_PKG.UPDATE_BY_CAT +OUTLN_PKG.UPDATE_SIGNATURES +OUTPUT +OUTPUT_BYTES +OUTPUT_BYTES_DISPLAY +OUTPUT_BYTES_PER_SEC +OUTPUT_BYTES_PER_SEC_DISPLAY +OUTPUT_DEVICE_TYPE +OUTPUT_RATE_BYTES +OUTPUT_RATE_BYTES_DISPLAY +OUTPUT_ROWS +OUTSIDE_TABLE_NAME +OUTSIDE_TABLE_SCHEMA +OUT_ARGUMENT +OUT_NET +OVERFLOW_NOMOVE +OVERHEAD_MICROSEC +OVERLAP_TIME_MISMATCH +OVERLOAD +OVERRIDE_SOLVE_SPEC +OVERRIDING +OVERSPILLED_MSGS +OWA. +OWA.GET_LINE +OWA.GET_PAGE +OWA.GET_PAGE_CHARSET_CONVERT +OWA.GET_PAGE_RAW +OWA.INITIALIZE +OWA.INIT_CGI_ENV +OWA.RESET_GET_PAGE +OWA.SET_PASSWORD +OWA.SET_TRANSFER_MODE +OWA.SET_USER_ID +OWA_CACHE. +OWA_CACHE.DISABLE +OWA_CACHE.GET_ETAG +OWA_CACHE.GET_LEVEL +OWA_CACHE.INIT +OWA_CACHE.SET_CACHE +OWA_CACHE.SET_EXPIRES +OWA_CACHE.SET_NOT_MODIFIED +OWA_CACHE.SET_SURROGATE_CONTROL +OWA_COOKIE. +OWA_COOKIE.GET +OWA_COOKIE.GET_ALL +OWA_COOKIE.INIT +OWA_COOKIE.REMOVE +OWA_COOKIE.SEND +OWA_CUSTOM. +OWA_CUSTOM.AUTHORIZE +OWA_CX. +OWA_IMAGE. +OWA_IMAGE.GET_X +OWA_IMAGE.GET_Y +OWA_MATCH. +OWA_MATCH.MATCH_PATTERN +OWA_OPT_LOCK. +OWA_OPT_LOCK.CHECKSUM +OWA_OPT_LOCK.GET_ROWID +OWA_OPT_LOCK.STORE_VALUES +OWA_OPT_LOCK.VERIFY_VALUES +OWA_PATTERN. +OWA_PATTERN.AMATCH +OWA_PATTERN.CHANGE +OWA_PATTERN.GETPAT +OWA_PATTERN.MATCH +OWA_SEC. +OWA_SEC.GET_CLIENT_HOSTNAME +OWA_SEC.GET_CLIENT_IP +OWA_SEC.GET_PASSWORD +OWA_SEC.GET_USER_ID +OWA_SEC.SET_AUTHORIZATION +OWA_SEC.SET_PROTECTION_REALM +OWA_TEXT. +OWA_TEXT.ADD2MULTI +OWA_TEXT.NEW_MULTI +OWA_TEXT.NEW_ROW_LIST +OWA_TEXT.PRINT_MULTI +OWA_TEXT.PRINT_ROW_LIST +OWA_TEXT.STREAM2MULTI +OWA_UTIL. +OWA_UTIL.BIND_VARIABLES +OWA_UTIL.CALENDARPRINT +OWA_UTIL.CELLSPRINT +OWA_UTIL.CHOOSE_DATE +OWA_UTIL.COMMA_TO_IDENT_ARR +OWA_UTIL.DESCRIBE_COLS +OWA_UTIL.GET_CGI_ENV +OWA_UTIL.GET_OWA_SERVICE_PATH +OWA_UTIL.GET_PROCEDURE +OWA_UTIL.GET_VERSION +OWA_UTIL.HTTP_HEADER_CLOSE +OWA_UTIL.ITE +OWA_UTIL.LISTPRINT +OWA_UTIL.MIME_HEADER +OWA_UTIL.NAME_RESOLVE +OWA_UTIL.PATH_TO_ME +OWA_UTIL.PRINT_CGI_ENV +OWA_UTIL.PRINT_VERSION +OWA_UTIL.REDIRECT_URL +OWA_UTIL.RESOLVE_TABLE +OWA_UTIL.SHOWPAGE +OWA_UTIL.SHOWSOURCE +OWA_UTIL.SHOW_QUERY_COLUMNS +OWA_UTIL.SIGNATURE +OWA_UTIL.STATUS_LINE +OWA_UTIL.TABLECAPTION +OWA_UTIL.TABLECLOSE +OWA_UTIL.TABLEDATA +OWA_UTIL.TABLEHEADER +OWA_UTIL.TABLEHEADERROWCLOSE +OWA_UTIL.TABLEHEADERROWOPEN +OWA_UTIL.TABLENODATA +OWA_UTIL.TABLEOPEN +OWA_UTIL.TABLEPRINT +OWA_UTIL.TABLEROWCLOSE +OWA_UTIL.TABLEROWOPEN +OWA_UTIL.TODATE +OWA_UTIL.VALIDATE_ARG +OWA_UTIL.WHO_CALLED_ME +OWM_ASSERT_PKG. +OWM_ASSERT_PKG.ASSERT +OWM_ASSERT_PKG.ASSERT_WS +OWM_ASSERT_PKG.ASSERT_WS_NEQ +OWM_ASSERT_PKG.NOOP +OWM_ASSERT_PKG.VERIFYCALLSTACK +OWM_BULK_LOAD_PKG. +OWM_BULK_LOAD_PKG.BEGINBULKLOADING +OWM_BULK_LOAD_PKG.CHECKFORBULKLOADING +OWM_BULK_LOAD_PKG.ENDBULKLOADING +OWM_BULK_LOAD_PKG.EXISTSTABLE +OWM_BULK_LOAD_PKG.FIXOWMCOLSWHIST +OWM_BULK_LOAD_PKG.ISBEINGBULKLOADED +OWM_BULK_LOAD_PKG.PURGETABLE +OWM_BULK_LOAD_PKG.ROLLBACKBULKLOADING +OWM_BULK_LOAD_PKG.SETLTLOCKINFO +OWM_DDL_PKG. +OWM_DDL_PKG.BEGINDDL +OWM_DDL_PKG.COMMITDDL +OWM_DDL_PKG.COMPAREINDEXPROPERTIES +OWM_DDL_PKG.CREATERICVIEWS +OWM_DDL_PKG.DROPVIEWS +OWM_DDL_PKG.GETORIGINALDDL +OWM_DDL_PKG.GETUCDETAILS +OWM_DDL_PKG.HAVEIDENTICALCOLUMNS +OWM_DDL_PKG.RECREATEINSTOFTRIGS +OWM_DDL_PKG.RECREATEVIEWS +OWM_DDL_PKG.ROLLBACKDDL +OWM_DML_PKG. +OWM_DML_PKG.WM$CONSTRAINTS_TABLE$F +OWM_DML_PKG.WM$ENV_VARS$F +OWM_DML_PKG.WM$EVENTS_INFO$F +OWM_DML_PKG.WM$HINT_TABLE$F +OWM_DML_PKG.WM$MP_GRAPH_WORKSPACES_TABLE$F +OWM_DML_PKG.WM$MP_PARENT_WORKSPACES_T$F +OWM_DML_PKG.WM$REMOVED_WORKSPACES_TABLE$F +OWM_DML_PKG.WM$RESOLVE_WORKSPACES_TABLE$F +OWM_DML_PKG.WM$RIC_TABLE$F +OWM_DML_PKG.WM$SYSPARAM_ALL_VALUES$F +OWM_DML_PKG.WM$UDTRIG_DISPATCH_PROCS$F +OWM_DML_PKG.WM$UDTRIG_INFO$F +OWM_DML_PKG.WM$VERSIONED_TABLES$F +OWM_DML_PKG.WM$VT_ERRORS_TABLE$F +OWM_DML_PKG.WM$WORKSPACES_TABLE$F +OWM_DML_PKG.WM$WORKSPACE_PRIV_TABLE$F +OWM_DML_PKG.WM$WORKSPACE_SAVEPOINTS_T$F +OWM_IEXP_PKG. +OWM_IEXP_PKG.EXPORT +OWM_IEXP_PKG.IMPORT +OWM_IEXP_PKG.WMFLAGENCODE +OWM_MIG_PKG. +OWM_MIG_PKG.ALLFIXSENTINELVERSION +OWM_MIG_PKG.ALLLWDISABLEVERSIONING +OWM_MIG_PKG.ALLLWENABLEVERSIONING +OWM_MIG_PKG.ALLROLLBACKFIXSENTINELVERSION +OWM_MIG_PKG.DGHISTORYCOLUMNS_INTERNAL +OWM_MIG_PKG.DGPRIMARYKEYINDEX +OWM_MIG_PKG.DISABLEVERSIONTOPOINDEXTABLES +OWM_MIG_PKG.ENABLEVERSIONTOPOINDEXTABLES +OWM_MIG_PKG.FIXAUXPKCONSTRAINT +OWM_MIG_PKG.FIXCRWORKSPACES +OWM_MIG_PKG.FIXPKCONSTRAINT +OWM_MIG_PKG.MOVEWMMETADATA +OWM_MIG_PKG.RECOMPILEALLOBJECTS +OWM_MIG_PKG.RECOMPILETABLEOBJECTS +OWM_MIG_PKG.RECOVERMIGRATINGTABLE +OWM_MIG_PKG.RENAMESAVEPOINT +OWM_MIG_PKG.RENAMEWORKSPACE +OWM_MIG_PKG.ROLLBACKFIXCRWORKSPACES +OWM_MIG_PKG.UPGRADEHISTORYCOLUMNS +OWM_MP_PKG. +OWM_MP_PKG.ADDASPARENTWORKSPACE +OWM_MP_PKG.CREATEIMPLICITSPINGRAPH +OWM_MP_PKG.EXISTSMPWORKSPACE +OWM_MP_PKG.GETGRAPHNODES +OWM_MP_PKG.GETNCA +OWM_MP_PKG.ISMPWORKSPACE +OWM_MP_PKG.REMOVEASPARENTWORKSPACE +OWM_MP_PKG.SETGRAPHPOSTVERSION +OWM_MP_PKG.SETMPPARAMETER +OWM_REPUTIL. +OWM_REPUTIL.CHECKFORERRORS +OWM_REPUTIL.CHECKVERSIONCOMPATIBILITY +OWM_REPUTIL.CREATEDEFINERSRIGHTSPROCGRP +OWM_REPUTIL.DELETEBASEMETADATAROWS +OWM_REPUTIL.DISABLEVERSIONING +OWM_REPUTIL.DROPDEFINERSRIGHTSPROCGRP +OWM_REPUTIL.DROPREPLICATIONSUPPORT +OWM_REPUTIL.ENABLEVERSIONING +OWM_REPUTIL.GENERATEREPLICATIONSUPPORT +OWM_REPUTIL.GETREPLICATIONDETAILS +OWM_REPUTIL.POPULATEBASEMETADATAROWS +OWM_REPUTIL.REGENERATEREPLICATIONSUPPORT +OWM_REPUTIL.RELOCATEWRITERSITE +OWM_REPUTIL.SYNCHRONIZESITE +OWM_VSCRIPT_PKG. +OWM_VSCRIPT_PKG.STARTQUEUE +OWM_VSCRIPT_PKG.STOPQUEUE +OWM_VSCRIPT_PKG.UPGRADEOWM +OWM_VSCRIPT_PKG.WM$CONVERTVERSIONSTR +OWM_VSCRIPT_PKG.WM$EXECSQL +OWM_VSCRIPT_PKG.WM$GETDBPARAMETER +OWM_VSCRIPT_PKG.WM$GETEXPANDEDNEXTVERS +OWM_VSCRIPT_PKG.WM$GETVERSION +OWM_VSCRIPT_PKG.WM$HASCOLUMN +OWM_VSCRIPT_PKG.WM$INSTALLPATCH +OWM_VSCRIPT_PKG.WM$OBJECTEXISTS +OWM_VSCRIPT_PKG.WM$UTLRP +OWM_VT_PKG. +OWM_VT_PKG.WM_CONTAINS +OWM_VT_PKG.WM_EQUALS +OWM_VT_PKG.WM_GREATERTHAN +OWM_VT_PKG.WM_INTERSECTION +OWM_VT_PKG.WM_LDIFF +OWM_VT_PKG.WM_LESSTHAN +OWM_VT_PKG.WM_MEETS +OWM_VT_PKG.WM_OVERLAPS +OWM_VT_PKG.WM_RDIFF +OWNED +OWNER +OWNER# +OWNERID +OWNER_BYPASS +OWNER_DBID +OWNER_DBNAME +OWNER_ID +OWNER_INCARNATION +OWNER_INSTANCE +OWNER_INSTANCE_NAME +OWNER_INSTANCE_NUMBER +OWNER_INSTANCE_SERIAL +OWNER_MAP_DIMENSION_TYPE +OWNER_MAP_HIERARCHY_NAME +OWNER_MAP_LEVEL_NAME +OWNER_MAP_NAME +OWNER_NAME +OWNER_NODE +OWNER_NUMBER +OWNER_PDBGUID +OWNER_PDBID +OWNER_PDBNAME +OWNER_PDBUID +OWNING_OBJECT_ID +OWNING_TYPE +OWNTIME +P.GETX +P.ROWVALID +P1. +P1RAW +P1TEXT +P1_TEXT +P2RAW +P2TEXT +P2_TEXT +P3RAW +P3TEXT +P3_TEXT +PACKAGE +PACKAGE_CNT +PACKAGE_ID +PACKAGE_NAME +PACKAGE_PREFIX +PACKETS_RECEIVED +PACKETS_SENT +PADDR +PAGESPACES +PARADDR +PARALLEL +PARALLELISM +PARALLEL_DEGREE_LIMIT_MTH +PARALLEL_DEGREE_LIMIT_P1 +PARALLEL_EXECUTION_MANAGED +PARALLEL_INDEX +PARALLEL_LEVEL +PARALLEL_QUEUE_TIMEOUT +PARALLEL_SERVERS_ACTIVE +PARALLEL_SERVERS_LIMIT +PARALLEL_SERVERS_TOTAL +PARALLEL_SERVER_LIMIT +PARALLEL_STMT_CRITICAL +PARALLEL_TARGET_PERCENTAGE +PARAMETER +PARAMETER1 +PARAMETER2 +PARAMETER3 +PARAMETERS +PARAMETER_COLUMN_NAME +PARAMETER_FLAGS +PARAMETER_HASH +PARAMETER_ID +PARAMETER_NAME +PARAMETER_SEQUENCE_NO +PARAMETER_TABLE_NAME +PARAMETER_TYPE +PARAMETER_TYPE# +PARAMETER_VALUE +PARAM_INDEX +PARAM_MODE +PARAM_NAME +PARAM_NO +PARAM_TYPE_MOD +PARAM_TYPE_NAME +PARAM_TYPE_OWNER +PARAM_VALUE +PARENT +PARENTSEQ +PARENTSLT +PARENTUSN +PARENT_ACL +PARENT_ACL_OWNER +PARENT_DBUN +PARENT_EDITION_NAME +PARENT_ELEMENT_ID +PARENT_EXPRESSION +PARENT_HANDLE +PARENT_HEAP_DESCRIPTOR +PARENT_ID +PARENT_IDX +PARENT_INDEX +PARENT_LEVEL_ID_EXPRESSION +PARENT_LEVEL_NAME +PARENT_LOCK +PARENT_NAME +PARENT_OBJECT +PARENT_OBJECT_NAME +PARENT_OBJECT_OWNER +PARENT_OBJECT_TYPE +PARENT_OWNER +PARENT_RECID +PARENT_REC_ID +PARENT_REC_IDS +PARENT_RXEC_ID +PARENT_SCAN_ID +PARENT_SCHEMA +PARENT_STAMP +PARENT_TABLE_COLUMN +PARENT_TABLE_NAME +PARENT_TABLE_PARTITION +PARENT_TASK_ID +PARENT_TYPE +PARENT_XID +PARENT_XIDSLT +PARENT_XIDSQN +PARENT_XIDUSN +PARITY_PERIOD +PARITY_POS +PARM_VALUE +PARSED_SIZE +PARSE_CALLS +PARSE_CALLS_DELTA +PARSE_CALLS_TOTAL +PARSE_TIME +PARSING_SCHEMA_ID +PARSING_SCHEMA_NAME +PARSING_USER_ID +PARTIAL_JOIN +PARTIAL_ROLLUP_PUSHDOWN +PARTICIPANT +PARTICIPATING_DATABASES +PARTITION +PARTITIONED +PARTITIONING +PARTITIONING_KEY_COUNT +PARTITIONING_TYPE +PARTITIONOBJ# +PARTITION_COUNT +PARTITION_DIMENSION_NAME +PARTITION_HIERARCHY_NAME +PARTITION_ID +PARTITION_LEVEL_NAME +PARTITION_NAME +PARTITION_OP +PARTITION_POS. +PARTITION_POSITION +PARTITION_SIZE +PARTITION_START +PARTITION_STOP +PARTITION_TYPE +PARTNAME +PART_MIN_SCN +PART_MIN_TIME +PART_NAME +PART_NO +PART_SCN +PART_TIME +PASS +PASSWORD +PASSWORD_REQUIRED +PASSWORD_VERSIONS +PASSW_EXPIRED +PASSW_IN_GRACE +PASSW_LOCKED +PASSW_LOCK_TIME +PASSW_LOCK_UNLIM +PATCH_ID +PATCH_UID +PATH +PATH_ID +PATH_NAME +PATH_OF_CONNECT_ROLE_GRANT +PATH_TABLE_NAME +PATTERN +PATTERN_ID +PAUSE +PAUSE_BEFORE +PAUSE_TIME +PAYLOAD_CALLBACK +PBREAK. +PBREAK.CLEAR_DEBUG +PBREAK.DEBUG_MESSAGE +PBREAK.DELETE_BREAKPOINT +PBREAK.DISABLE_BREAKPOINT +PBREAK.ENABLE_BREAKPOINT +PBREAK.GENERATE_TIDL +PBREAK.GET_CURRENT_EVENT +PBREAK.GET_CURRENT_INFO +PBREAK.GET_DEBUG_FLAGS +PBREAK.GET_INDEXES +PBREAK.GET_LINE_MAP +PBREAK.GET_NUMERIC_OPTION +PBREAK.GET_SCALAR +PBREAK.INTERNAL_VERSION_CHECK +PBREAK.IS_EXECUTABLE +PBREAK.PIPE_CUTTER +PBREAK.PRINT_BACKTRACE +PBREAK.PRINT_BREAKPOINTS +PBREAK.PRINT_FRAME_SOURCE +PBREAK.PRINT_SOURCE +PBREAK.READ_INTO_TABLE +PBREAK.READ_PIPE +PBREAK.READ_WORD +PBREAK.SET_BREAK_LINE +PBREAK.SET_DEBUG +PBREAK.SET_DEBUG_FLAGS +PBREAK.SET_NUMERIC_OPTION +PBREAK.SET_OER_BREAKPOINT +PBREAK.SET_VALUE +PBREAK.WRITE_PIPE +PBREAK.WRITE_REQUEST +PBREAK.WRITE_TABLE +PBRPH. +PBRPH.ATTACH +PBRPH.CONTINUE +PBRPH.DISPLAY_FRAME +PBRPH.EXECUTE +PBRPH.GET_CURRENT_INFO +PBRPH.GET_DEBUG_FLAGS +PBRPH.GET_INDEXES +PBRPH.GET_MORE_SOURCE +PBRPH.GET_PENDING_REQUEST +PBRPH.GET_SCALAR +PBRPH.LISTEN +PBRPH.PING +PBRPH.PRINT_BACKTRACE +PBRPH.PRINT_BREAKPOINTS +PBRPH.PRINT_FRAME_SOURCE +PBRPH.PRINT_INTO_TABLE +PBRPH.PRINT_SOURCE +PBRPH.PROCESS_REQUEST +PBRPH.SET_BREAK_LINE +PBRPH.SET_VALUE +PBRPH.SHUTDOWN +PBRPH.TARGET_PROGRAM_RUNNING +PBSDE. +PBSDE.DEBUG_LOOP +PBSDE.INIT +PBSDE.SHUTDOWN +PBUTL. +PCIRCUIT +PCTVERSION +PCT_COMPLETION_TIME +PCT_DIRECT_ACCESS +PCT_FREE +PCT_INCREASE +PCT_THRESHOLD +PCT_TOTAL_TIME +PCT_USED +PC_NAME +PC_NAME_HASH +PC_UNKNOWN +PDB +PDB_DBID +PDB_GUID +PDB_ID +PDB_INCARNATION# +PDB_NAME +PDDL_ENV_MISMATCH +PDDL_STATUS +PDML_ENABLED +PDML_ENV_MISMATCH +PDML_STATUS +PEAK_FMR +PEEKED +PENDING_ROLE_CHANGE_TASKS +PENDQ +PEND_TABLE_NAME +PERCENT +PERCENTAGE_FOR_CATCHUP_MDEF +PERCENTAGE_FOR_CATCHUP_NEW +PERCENT_BLOCKS_COALESCED +PERCENT_DONE +PERCENT_EXTENTS_COALESCED +PERCENT_SPACE_RECLAIMABLE +PERCENT_SPACE_USED +PERC_ACTIVE_SESS +PERC_ACTIVE_SESSIONS +PERC_IMPACT +PERFORMANCE_CLASS +PERIOD_END_TIME +PERIOD_START_TIME +PERMISSIONS +PERSIST +PERSISTENT_MEM +PERSISTENT_RES +PERS_HEAP_MEM +PFDG_ID +PF_FUNCTION +PF_OWNER +PF_PACKAGE +PF_SCHEMA +PGA_ALLOCATED +PGA_ALLOC_MEM +PGA_FREEABLE_MEM +PGA_MAX_MEM +PGA_MEMORY +PGA_TARGET_FACTOR +PGA_TARGET_FOR_ESTIMATE +PGA_TUNABLE_MEM +PGA_USED_MEM +PG_NAME +PHASE +PHOST +PHYBLKRD +PHYBLKREAD +PHYBLKWRITE +PHYBLKWRT +PHYRDS +PHYSICALREAD +PHYSICALWRITE +PHYSICAL_BLOCK_READS +PHYSICAL_BLOCK_WRITES +PHYSICAL_FILE +PHYSICAL_FILENAME +PHYSICAL_PATH +PHYSICAL_READS +PHYSICAL_READS_DELTA +PHYSICAL_READS_DIRECT_DELTA +PHYSICAL_READS_DIRECT_TOTAL +PHYSICAL_READS_TOTAL +PHYSICAL_READ_BYTES +PHYSICAL_READ_BYTES_DELTA +PHYSICAL_READ_BYTES_TOTAL +PHYSICAL_READ_PCT +PHYSICAL_READ_REQUESTS +PHYSICAL_READ_REQUESTS_DELTA +PHYSICAL_READ_REQUESTS_TOTAL +PHYSICAL_WRITES +PHYSICAL_WRITES_DELTA +PHYSICAL_WRITES_DIRECT_DELTA +PHYSICAL_WRITES_DIRECT_TOTAL +PHYSICAL_WRITES_TOTAL +PHYSICAL_WRITE_BYTES +PHYSICAL_WRITE_BYTES_DELTA +PHYSICAL_WRITE_BYTES_TOTAL +PHYSICAL_WRITE_REQUESTS +PHYSICAL_WRITE_REQUESTS_DELTA +PHYSICAL_WRITE_REQUESTS_TOTAL +PHYWRTS +PHY_IO +PID +PIDL. +PIDL.PTATTANM +PIDL.PTATTBTY +PIDL.PTATTCNT +PIDL.PTATTNNM +PIDL.PTATTRTY +PIDL.PTATTTYP +PIDL.PTGEND +PIDL.PTGEPT +PIDL.PTGES2 +PIDL.PTGES4 +PIDL.PTGETX +PIDL.PTGEU1 +PIDL.PTGEU2 +PIDL.PTGEU4 +PIDL.PTGSND +PIDL.PTG_ND +PIDL.PTG_PT +PIDL.PTG_S2 +PIDL.PTG_S4 +PIDL.PTG_TX +PIDL.PTG_U1 +PIDL.PTG_U2 +PIDL.PTG_U4 +PIDL.PTKIN +PIDL.PTP_ND +PIDL.PTP_PT +PIDL.PTP_S2 +PIDL.PTP_S4 +PIDL.PTP_TX +PIDL.PTP_U1 +PIDL.PTP_U2 +PIDL.PTP_U4 +PIDL.PTSLEN +PIECE +PIECE# +PIECES +PIECES_PER_SET +PIN1 +PIN10 +PIN100 +PIN1000 +PIN10000 +PING +PINGS +PINHITRATIO +PINHITS +PINNED_COMMITTED_TXN +PINNED_OBJECTS +PINNED_TOTAL +PINNED_TXN +PINS +PIN_COUNT +PIN_MODE +PIPELINED +PIPE_SIZE +PIV_GB +PIV_SSF +PKEXISTS +PKEY +PKG_NAME +PLACE_DISTINCT +PLACE_GROUP_BY +PLAN +PLAN_ATTRIBUTE +PLAN_BYTES +PLAN_CARDINALITY +PLAN_COST +PLAN_CPU_COST +PLAN_DEPTH +PLAN_HASH_VALUE +PLAN_ID +PLAN_IO_COST +PLAN_LINE_ID +PLAN_NAME +PLAN_OBJECT_NAME +PLAN_OBJECT_OWNER +PLAN_OBJECT_TYPE +PLAN_OPERATION +PLAN_OPERATION_INACTIVE +PLAN_OPTIONS +PLAN_PARENT_ID +PLAN_PARTITION_START +PLAN_PARTITION_STOP +PLAN_POSITION +PLAN_STATS +PLAN_TEMP_SPACE +PLAN_TIME +PLAN_TIMESTAMP +PLATFORM_ID +PLATFORM_NAME +PLITBLM. +PLITBLM.COUNT +PLITBLM.DELETE +PLITBLM.EXISTS +PLITBLM.EXTEND +PLITBLM.FIRST +PLITBLM.LAST +PLITBLM.LIMIT +PLITBLM.NEXT +PLITBLM.PRIOR +PLITBLM.TRIM +PLSCOPE_SETTINGS +PLSEXEC_TIME_DELTA +PLSEXEC_TIME_TOTAL +PLSQL_CCFLAGS +PLSQL_CMP_SWITCHS_DIFF +PLSQL_CODE_TYPE +PLSQL_DEBUG +PLSQL_ENTRY_OBJECT_ID +PLSQL_ENTRY_SUBPROGRAM_ID +PLSQL_EXEC_TIME +PLSQL_OBJECT_ID +PLSQL_OPTIMIZE_LEVEL +PLSQL_SUBPROGRAM_ID +PLSQL_WARNINGS +PLS_TYPE +PLUGGABLE_DATABASE +PLUGGED_IN +PLUGGED_READONLY +PLUGIN_CHANGE# +PLUGIN_RESETLOGS_CHANGE# +PLUGIN_RESETLOGS_TIME +PMNTPT +PNAME +PNUM +POINTINPOLYGON_IMP_T.ODCITABLECLOSE +POINTINPOLYGON_IMP_T.ODCITABLEDESCRIBE +POINTINPOLYGON_IMP_T.ODCITABLEDESCRIBESTUB +POINTINPOLYGON_IMP_T.ODCITABLEFETCH +POINTINPOLYGON_IMP_T.ODCITABLEFETCHSTUB +POINTINPOLYGON_IMP_T.ODCITABLEPREPARE +POINTINPOLYGON_IMP_T.ODCITABLEPREPARESTUB +POINTINPOLYGON_IMP_T.ODCITABLESTART +POINTINPOLYGON_IMP_T.ODCITABLESTARTSTUB +POLICY +POLICY_COLUMN +POLICY_COLUMN_OPTIONS +POLICY_EVENT +POLICY_FUNCTION_OWNER +POLICY_GROUP +POLICY_LABEL$_PRIV. +POLICY_LABEL$_PRIV.CREATE_ROW +POLICY_LABEL$_PRIV.DELETE_BY_IDENTITY_ID#_ +POLICY_LABEL$_PRIV.DELETE_ROW +POLICY_LABEL$_PRIV.READ_BY_IDENTITY_ID#_ +POLICY_LABEL$_PRIV.READ_ROW +POLICY_LABEL$_PRIV.UPDATE_ROW +POLICY_NAME +POLICY_OWNER +POLICY_TEXT +POLICY_TYPE +POOL +POOL_CHANGED_PAGES +POOL_HITS +POOL_ID +POOL_MISSES +POOL_NAME +POOL_NEW_PAGES +POOL_RECLAIMED_PAGES +POOL_SIZE +POOL_STATE +POOL_UNCHANGED_PAGES +POPULATE_CUS +POPULATE_CUS_DELTA +POPULATE_STATUS +PORT +POS +POSITION +POSITION_IN_SELECT +POSTCOST +POST_COMMIT_SCN +POS_BITMAP +POWER +PQS_COMPLETED +PQS_QUEUED +PQ_ACTIVE +PQ_ACTIVE_TIME +PQ_CONCURRENT_UNION +PQ_DISTRIBUTE +PQ_DISTRIBUTE_WINDOW +PQ_FILTER +PQ_MAP +PQ_NOMAP +PQ_QUEUED +PQ_QUEUED_TIME +PQ_QUEUE_TIME_OUTS +PQ_REPLICATE +PQ_SERVERS +PQ_SERVERS_USED +PQ_SKEW +PQ_SLAVE_MISMATCH +PQ_STATUS +PREBUILT +PRECEDENCE +PRECISION +PRECOMMIT_HANDLER +PRECOMPUTE_CONDITION +PRECOMPUTE_PERCENT +PRECOMPUTE_PERCENT_TOP +PRECOMPUTE_SUBQUERY +PRECOST +PREDEFINED +PREDICATE +PREDICATE_EVALUATION +PREDICATE_TRUE. +PREFERENCE_NAME +PREFERENCE_VALUE +PREFERRED_READ +PREFIX_LENGTH +PREPARECOUNT +PREPARED_SCN +PREPARED_STATUS +PREPARED_WORK_SIZE +PREPARE_END_TIME +PREPARE_START_TIME +PREPARE_TIME +PREPOPULATED +PRESENTATION +PRESERVED +PRESERVE_OID +PRESERVE_STATE +PRESETLOGS_SCN +PRESETLOGS_TIME +PREVIOUS_LOG_NAME +PREVIOUS_LOG_STATUS +PREVIOUS_MASTER +PREVIOUS_TIMESTAMP +PREV_BUFFERS +PREV_CHILD_NUMBER +PREV_DML_COMMAND +PREV_EXEC_ID +PREV_EXEC_START +PREV_HASH_VALUE +PREV_SIZE +PREV_SQL_ADDR +PREV_SQL_ID +PRGOID +PRIMARY_CON_DBID +PRIMARY_DBID +PRIMARY_DB_UNIQUE_NAME +PRIMARY_ID +PRIMARY_INSTANCE +PRIMARY_KEY +PRIMARY_KEY_VALUE +PRIMARY_PARENT_XID +PRIMARY_PARENT_XIDSLT +PRIMARY_PARENT_XIDSQN +PRIMARY_PARENT_XIDUSN +PRIMARY_REGION +PRIMARY_START_SCN +PRIMARY_START_TIME +PRIMARY_VOL +PRIMARY_XID +PRIMARY_XIDSLT +PRIMARY_XIDSQN +PRIMARY_XIDUSN +PRIMOP_BIND# +PRIMOP_NAME +PRIMOP_OWNER +PRINCIPAL +PRINCIPAL_TYPE +PRIORITY +PRIORITY_COMMENT +PRIORITY_GROUP +PRIORITY_OVERRIDE +PRIOR_DB_INCARNATION# +PRIOR_INCARNATION# +PRIOR_PDB_INCARNATION# +PRIOR_RESETLOGS_CHANGE# +PRIOR_RESETLOGS_TIME +PRIVATE_JDBC. +PRIVATE_JDBC.GET_ALL_TYPE_SHAPE_INFO +PRIVATE_JDBC.GET_TYPE_SHAPE_INFO +PRIVATE_MAX_LEN +PRIVATE_RESULTS +PRIVILEGE +PRIVILEGE_ID +PRIVILEGE_LIST. +PRIVILEGE_NAME +PRIVILEGE_TYPE +PRIVS_TO_CHAR. +PRIV_NUMBER +PRIV_USED +PRIV_USER +PROBED +PROBLEM_ID +PROBLEM_KEY +PROC +PROCEDURAL +PROCEDURE +PROCEDURE_NAME +PROCEDURE_PREFIX +PROCESS +PROCESSED_CHANGE# +PROCESSED_LOW_POSITION +PROCESSED_LOW_SCN +PROCESSED_LOW_TIME +PROCESSED_MESSAGE_NUMBER +PROCESSED_SCN +PROCESSED_TASKID +PROCESSED_TIME +PROCESS_ID +PROCESS_NAME +PROC_NAME +PRODUCT +PRODUCT_STARTUP_TIME +PROD_RID +PROD_RSCN +PROD_SCN +PROFILE +PROFILE_NAME +PROGRAM +PROGRAM_ACTION +PROGRAM_ID +PROGRAM_LINE# +PROGRAM_NAME +PROGRAM_OWNER +PROGRAM_TYPE +PROGRESS +PROGRESS_METRIC +PROJECTION +PROMPT_STRING +PROPAGATE_COMMENT +PROPAGATION_NAME +PROPAGATION_SOURCE_NAME +PROPAGATION_WINDOW +PROPERTY +PROPERTYNAME +PROPERTYVALUE +PROPERTY_ID +PROPERTY_KEY +PROPERTY_NAME +PROPERTY_ORDER +PROPERTY_TYPE +PROPERTY_VALUE +PROPERTY_VALUE_LENGTH +PROP_NAME +PROP_UPDATES +PROP_VALUE +PROTECTION_LEVEL +PROTECTION_MODE +PROTOCOL +PROTOCOL_NUM +PROTOCOL_VERSION +PROXY +PROXY_AUTHORITY +PROXY_NAME +PROXY_ONLY_CONNECT +PROXY_SERIAL +PROXY_SESSIONID +PROXY_SID +PROXY_SNAPADMIN +PROXY_SPID +PROXY_USER +PROXY_USERID +PROXY_USER_TYPE +PRUNING +PRVTEMX_ADMIN. +PRVTEMX_ADMIN.ADD_REDOLOG_GROUP_MEMBER_XML +PRVTEMX_ADMIN.BACKUP_CONTROL_FILE_XML +PRVTEMX_ADMIN.CLEAR_REDO_LOGFILE_XML +PRVTEMX_ADMIN.CREATE_REDOLOG_GROUP_XML +PRVTEMX_ADMIN.DROP_REDOLOG_GROUP_XML +PRVTEMX_ADMIN.FORCE_CHECKPOINT_XML +PRVTEMX_ADMIN.GET_REMOTE_UNDO_INFO +PRVTEMX_ADMIN.REPORT_ADD_DATAFILE_XML +PRVTEMX_ADMIN.REPORT_ALTER_PROFILE_XML +PRVTEMX_ADMIN.REPORT_ALTER_USER +PRVTEMX_ADMIN.REPORT_CHANGE_DF_STATUS_XML +PRVTEMX_ADMIN.REPORT_CHANGE_TBS_STATUS_XML +PRVTEMX_ADMIN.REPORT_CREATE_PROFILE_XML +PRVTEMX_ADMIN.REPORT_CREATE_ROLE_XML +PRVTEMX_ADMIN.REPORT_CREATE_TABLESPACE_XML +PRVTEMX_ADMIN.REPORT_CREATE_USER_XML +PRVTEMX_ADMIN.REPORT_DF_AUTO_EXTEND_XML +PRVTEMX_ADMIN.REPORT_DROP_DATAFILE_XML +PRVTEMX_ADMIN.REPORT_DROP_PROFILE_XML +PRVTEMX_ADMIN.REPORT_DROP_ROLE +PRVTEMX_ADMIN.REPORT_DROP_TABLESPACE_XML +PRVTEMX_ADMIN.REPORT_DROP_USER +PRVTEMX_ADMIN.REPORT_GRANT_PRIV_XML +PRVTEMX_ADMIN.REPORT_RESIZE_DATAFILE_XML +PRVTEMX_ADMIN.REPORT_RESIZE_TABLESPACE_XML +PRVTEMX_ADMIN.REPORT_SERVER_INFO_XML +PRVTEMX_ADMIN.REPORT_SET_DEFAULT_TBS_XML +PRVTEMX_ADMIN.REPORT_SET_PARAM_XML +PRVTEMX_ADMIN.REPORT_SET_TBS_GROUP_XML +PRVTEMX_ADMIN.REPORT_SHOW_ARCHLOG_FILES_XML +PRVTEMX_ADMIN.REPORT_SHOW_CONTROL_FILES_XML +PRVTEMX_ADMIN.REPORT_SHOW_DB_PROPS_XML +PRVTEMX_ADMIN.REPORT_SHOW_FEATURE_USAGE_XML +PRVTEMX_ADMIN.REPORT_SHOW_OBJECTS_XML +PRVTEMX_ADMIN.REPORT_SHOW_OBJFILTERS_XML +PRVTEMX_ADMIN.REPORT_SHOW_OBJ_PRIVS_XML +PRVTEMX_ADMIN.REPORT_SHOW_PARAMS_XML +PRVTEMX_ADMIN.REPORT_SHOW_PRIVS_XML +PRVTEMX_ADMIN.REPORT_SHOW_PROFILEDETAIL_XML +PRVTEMX_ADMIN.REPORT_SHOW_PROFILES_XML +PRVTEMX_ADMIN.REPORT_SHOW_REDOLOG_FILES_XML +PRVTEMX_ADMIN.REPORT_SHOW_ROLEDETAIL_XML +PRVTEMX_ADMIN.REPORT_SHOW_ROLES_XML +PRVTEMX_ADMIN.REPORT_SHOW_TABLESPACES_XML +PRVTEMX_ADMIN.REPORT_SHOW_TBLSPCNAMES_XML +PRVTEMX_ADMIN.REPORT_SHOW_UNDO_DETAILS_XML +PRVTEMX_ADMIN.REPORT_SHOW_UNDO_SUMMARY_XML +PRVTEMX_ADMIN.REPORT_SHOW_UNUSED_UNDOTBS_XML +PRVTEMX_ADMIN.REPORT_SHOW_USERDETAIL_XML +PRVTEMX_ADMIN.REPORT_SHOW_USERS_XML +PRVTEMX_ADMIN.REPORT_TBS_AUTO_EXTEND_XML +PRVTEMX_ADMIN.SWITCH_REDO_LOGFILE_XML +PRVTEMX_ADMIN.SWITCH_UNDOTBS_XML +PRVTEMX_CELL. +PRVTEMX_CELL.REPORT_CELL +PRVTEMX_CELL.REPORT_CELL_XML +PRVTEMX_DBHOME. +PRVTEMX_DBHOME.ALTER_PDB_XML +PRVTEMX_DBHOME.CLONE_PDB_XML +PRVTEMX_DBHOME.CONVERT_NONCDB2PDB_XML +PRVTEMX_DBHOME.CREATE_PDB_XML +PRVTEMX_DBHOME.DROP_PDB_XML +PRVTEMX_DBHOME.I_APPLY_RESOURCE_PLAN +PRVTEMX_DBHOME.I_UPDATE_RESOURCE_PLAN +PRVTEMX_DBHOME.PLUG_PDB_XML +PRVTEMX_DBHOME.REPORT_CDB_RESOURCE_PLANS_XML +PRVTEMX_DBHOME.REPORT_CONTAINERS_XML +PRVTEMX_DBHOME.REPORT_DBHOME_XML +PRVTEMX_DBHOME.REPORT_INCIDENTS_XML +PRVTEMX_DBHOME.REPORT_INSTANCE_DETAILS_XML +PRVTEMX_DBHOME.REPORT_JOBS_XML +PRVTEMX_DBHOME.REPORT_PDB_STORAGE_LIMITS_XML +PRVTEMX_DBHOME.REPORT_PDB_VIOLATIONS_XML +PRVTEMX_DBHOME.REPORT_PERFORMANCE_XML +PRVTEMX_DBHOME.REPORT_RESOURCES_XML +PRVTEMX_DBHOME.REPORT_SHOW_DBLINKS_XML +PRVTEMX_DBHOME.REPORT_SQLMONITOR_XML +PRVTEMX_DBHOME.REPORT_STATUS_XML +PRVTEMX_DBHOME.SET_CDB_RESOURCE_PLAN_XML +PRVTEMX_DBHOME.UNPLUG_PDB_XML +PRVTEMX_MEMORY. +PRVTEMX_MEMORY.REPORT_MEMORY_XML +PRVTEMX_PERF. +PRVTEMX_PERF.ACTION_KILL_SESSION_XML +PRVTEMX_PERF.REPORT_SESSION_DETAILS_XML +PRVTPARENTCHILD. +PRVTPARENTCHILD.GETPARENTID +PRVTPARENTCHILD.SIZEARRAY +PRVTPC. +PRVTTNPC. +PRVTTNPC.DROP_DEPENDENCIES +PRVTTNPC.GET_OBJ_ID +PRVTTNPC.INSERT_DEP_TABLE +PRVT_ACCESS_ADVISOR. +PRVT_ACCESS_ADVISOR.CHECK_WK_REF +PRVT_ACCESS_ADVISOR.CLEANUP_TASK +PRVT_ACCESS_ADVISOR.CREATE_TASK +PRVT_ACCESS_ADVISOR.CREATE_TASK_REPORT +PRVT_ACCESS_ADVISOR.DELETE_TASK +PRVT_ACCESS_ADVISOR.EXECUTE_TASK +PRVT_ACCESS_ADVISOR.GET_ACCESS_ADVISOR_DEFAULTS +PRVT_ACCESS_ADVISOR.GET_NEW_NAME +PRVT_ACCESS_ADVISOR.GET_REC_ATTRIBUTES +PRVT_ACCESS_ADVISOR.GET_TASK_SCRIPT +PRVT_ACCESS_ADVISOR.IMPLEMENT_TASK +PRVT_ACCESS_ADVISOR.PARAM_VALIDATE +PRVT_ACCESS_ADVISOR.QUICK_TUNE +PRVT_ACCESS_ADVISOR.RESET_TASK +PRVT_ACCESS_ADVISOR.RESUME_TASK +PRVT_ACCESS_ADVISOR.SETUP_PARAMETERS +PRVT_ACCESS_ADVISOR.SETUP_TEMPLATES +PRVT_ACCESS_ADVISOR.SYNONYM +PRVT_ACCESS_ADVISOR.TEST_API +PRVT_ACCESS_ADVISOR.THROW_ERROR +PRVT_ACCESS_ADVISOR.UPDATE_REC_ATTRIBUTES +PRVT_ADVISOR. +PRVT_ADVISOR.ADJUST_STRING +PRVT_ADVISOR.CANCEL_TASK +PRVT_ADVISOR.CHECK_ADV_ENABLED +PRVT_ADVISOR.CHECK_EXECUTION_STATUS +PRVT_ADVISOR.CHECK_EXPIRATION_COMP +PRVT_ADVISOR.CHECK_INITIAL +PRVT_ADVISOR.CHECK_MODIFY +PRVT_ADVISOR.CHECK_PACK_ENABLED +PRVT_ADVISOR.CHECK_TASK_ENABLED +PRVT_ADVISOR.CHECK_TEMPLATE +PRVT_ADVISOR.COMMON_DELETE_TASK +PRVT_ADVISOR.COMMON_EXECUTE_TASK +PRVT_ADVISOR.COMMON_RESET_TASK +PRVT_ADVISOR.CREATE_FILE +PRVT_ADVISOR.CREATE_OBJECT +PRVT_ADVISOR.CREATE_TASK +PRVT_ADVISOR.DELETE_DIRECTIVE +PRVT_ADVISOR.DELETE_EXPIRED_TASKS +PRVT_ADVISOR.DELETE_MESSAGE +PRVT_ADVISOR.DELETE_TASK +PRVT_ADVISOR.DELETE_USER_TASKS +PRVT_ADVISOR.EDIT +PRVT_ADVISOR.EVAL_DIRECTIVE +PRVT_ADVISOR.FETCH_ADVISOR +PRVT_ADVISOR.FINDING_NAME_EXISTS +PRVT_ADVISOR.FORMAT_MESSAGE +PRVT_ADVISOR.FORMAT_MESSAGE_GROUP +PRVT_ADVISOR.GATHER_STATISTICS +PRVT_ADVISOR.GENERATE_UNIQUE_NAME +PRVT_ADVISOR.GET_DB_VERSION +PRVT_ADVISOR.GET_DIRECTIVE_ID +PRVT_ADVISOR.GET_REC_ATTRIBUTES +PRVT_ADVISOR.GET_TASK_REPORT +PRVT_ADVISOR.GET_TASK_SCRIPT +PRVT_ADVISOR.HANDLE_LOCK +PRVT_ADVISOR.IMPLEMENT_TASK +PRVT_ADVISOR.INSERT_ADV_DEFINITION +PRVT_ADVISOR.INSERT_ADV_DIR_DEF +PRVT_ADVISOR.INSERT_DEF_EXECUTION_TYPE +PRVT_ADVISOR.INSERT_DEF_PARAMETER +PRVT_ADVISOR.INSERT_DIRECTIVE +PRVT_ADVISOR.INSERT_DIRECTIVE_I +PRVT_ADVISOR.INSERT_FINDING +PRVT_ADVISOR.INSERT_MESSAGE +PRVT_ADVISOR.INSERT_REC_ACT +PRVT_ADVISOR.INTERRUPT_TASK +PRVT_ADVISOR.IS_EMPTY +PRVT_ADVISOR.IS_KEYWORD +PRVT_ADVISOR.IS_PACK_ENABLED +PRVT_ADVISOR.IS_WILDCARD +PRVT_ADVISOR.MARK_RECOMMENDATION +PRVT_ADVISOR.PARSE_NAME +PRVT_ADVISOR.QUICK_TUNE +PRVT_ADVISOR.RECORD_ERRORMSG +PRVT_ADVISOR.RECORD_JOURNAL +PRVT_ADVISOR.RECOVER_SINGLE_STALE_TASK +PRVT_ADVISOR.RECOVER_STALE_TASKS +PRVT_ADVISOR.RESET_TASK +PRVT_ADVISOR.RESTORE_NLS_NUMBER_ENV +PRVT_ADVISOR.SETUP_NLS_NUMBER_ENV +PRVT_ADVISOR.SETUP_USER_ENVIRONMENT +PRVT_ADVISOR.SET_DEFAULT_TASK_PARAMETER +PRVT_ADVISOR.SET_TASK_PARAMETER +PRVT_ADVISOR.SIGNAL_INTERRUPT +PRVT_ADVISOR.TEST_EXECUTE_TASK +PRVT_ADVISOR.TRACK_REPORT_USAGE +PRVT_ADVISOR.UPDATE_DIRECTIVE +PRVT_ADVISOR.UPDATE_OBJECT +PRVT_ADVISOR.UPDATE_REC_ATTRIBUTES +PRVT_ADVISOR.UPDATE_TASK +PRVT_ADVISOR.UPDATE_TASK_ATTRIBUTES +PRVT_ADVISOR.VALIDATE_ADVISOR +PRVT_ADVISOR.VALIDATE_COMMAND +PRVT_ADVISOR.VALIDATE_EXECUTION +PRVT_ADVISOR.VALIDATE_EXECUTION_ID +PRVT_ADVISOR.VALIDATE_EXECUTION_OBJECT +PRVT_ADVISOR.VALIDATE_EXECUTION_ORDER +PRVT_ADVISOR.VALIDATE_ITEM_LENGTH +PRVT_ADVISOR.VALIDATE_NEW_TASK +PRVT_ADVISOR.VALIDATE_TASK +PRVT_ADVISOR.VALIDATE_TASK_ID +PRVT_ADVISOR.VALIDATE_USERNAME +PRVT_AWRV_METADATA.CLEAR_MEMBER +PRVT_AWRV_METADATA.GET_INST_CLAUSE +PRVT_AWRV_METADATA.ISDBLOCAL +PRVT_AWRV_METADATA.PRVT_AWRV_METADATA +PRVT_AWRV_METADATA.RESET_MEMBER +PRVT_AWRV_METADATA.SET_MEMBER +PRVT_AWRV_METADATA.TO_XML +PRVT_AWR_DATA. +PRVT_AWR_DATA.GET_BASIC_ASH_STATS +PRVT_AWR_DATA.GET_BC_ADVICE +PRVT_AWR_DATA.GET_CURSOR_INV +PRVT_AWR_DATA.GET_HOST_STATS +PRVT_AWR_DATA.GET_ICDEV_STATS +PRVT_AWR_DATA.GET_IC_TRAFFIC +PRVT_AWR_DATA.GET_IC_TRANSFER_DETAILS +PRVT_AWR_DATA.GET_IO_STATS +PRVT_AWR_DATA.GET_LITERAL_USAGE_STATS +PRVT_AWR_DATA.GET_MEMORY_COMPONENTS +PRVT_AWR_DATA.GET_MEM_ADVICE +PRVT_AWR_DATA.GET_OBJDETAILS +PRVT_AWR_DATA.GET_PARAMETERS +PRVT_AWR_DATA.GET_PGASTAT +PRVT_AWR_DATA.GET_PGA_ADVICE +PRVT_AWR_DATA.GET_PING_STATS +PRVT_AWR_DATA.GET_SESS_STAT +PRVT_AWR_DATA.GET_SGASTAT +PRVT_AWR_DATA.GET_SGA_ADVICE +PRVT_AWR_DATA.GET_SHARED_POOL_ADVICE +PRVT_AWR_DATA.GET_SQLSTAT +PRVT_AWR_DATA.GET_STREAMS_ADVICE +PRVT_AWR_DATA.GET_SYSSTAT +PRVT_AWR_DATA.GET_TIME_MODEL +PRVT_AWR_DATA.GET_TOP_SQL_DETAILS +PRVT_AWR_DATA.GET_WAITCLASS_CHART +PRVT_AWR_DATA.GET_WAIT_EVENTS +PRVT_AWR_DATA_CP. +PRVT_AWR_DATA_CP.GET_COMPATIBILITY +PRVT_AWR_DATA_CP.GET_ECLS_HOTOBJ +PRVT_AWR_DATA_CP.GET_EVTS_HOTOBJ +PRVT_AWR_DATA_CP.GET_EVT_HOTOBJ +PRVT_AWR_INST_META.TO_XML +PRVT_AWR_PERIOD.GET_INST_CLAUSE +PRVT_AWR_PERIOD.GET_ROW_CNT +PRVT_AWR_PERIOD.GET_TIME_PER_ROW +PRVT_AWR_PERIOD.PRVT_AWR_PERIOD +PRVT_AWR_PERIOD.TO_XML +PRVT_AWR_VIEWER. +PRVT_AWR_VIEWER.GET_BUCKET_MAP +PRVT_AWR_VIEWER.GET_MAPPING_TYPE +PRVT_AWR_VIEWER.GET_VERSION +PRVT_AWR_VIEWER.INTERVAL_TO_SECOND +PRVT_AWR_VIEWER.REPORT_ADDM_XML +PRVT_AWR_VIEWER.REPORT_AWRREP_XML +PRVT_AWR_VIEWER.REPORT_AWR_XML +PRVT_AWR_VIEWER.REPORT_METRICS_XML +PRVT_AWR_VIEWER.REPORT_RAC_XML +PRVT_AWR_VIEWER.REPORT_TIMEPICKER_XML +PRVT_AWR_VIEWER.REPORT_TOPSQL_XML +PRVT_AWR_VIEWER.SET_MAPPING_TYPE +PRVT_COMPRESS. +PRVT_COMPRESS.GET_ARCH_COMP +PRVT_COMPRESS.GET_COMPATIBLE +PRVT_COMPRESS.GET_TS_NUM +PRVT_COMPRESS.LOAD_TAB_INMEMORY +PRVT_COMPRESSION. +PRVT_COMPRESSION.ADV_ANALYZE_TABLE +PRVT_COMPRESSION.GET_ALLINDEX_COMPRESSION_RATIO +PRVT_COMPRESSION.GET_COMPRESSION_RATIO +PRVT_COMPRESSION.GET_INDEX_COMPRESSION_RATIO +PRVT_COMPRESSION.GET_LOB_COMPRESSION_RATIO +PRVT_COMPRESSION.GET_NUM_PARTITIONS +PRVT_COMPRESSION.GET_TABLE_COMPRESSION_RATIO +PRVT_COMPRESSION.INIT_TASK_STATE +PRVT_COMPRESSION.OLTP_COMPRESSIBLE +PRVT_COMPRESSION.REPORT +PRVT_CPADDM. +PRVT_CPADDM.COMPARE_CAPTURE_REPLAY +PRVT_CPADDM.COMPARE_DATABASES +PRVT_CPADDM.COMPARE_INSTANCES +PRVT_CPADDM.COMPARE_REPLAY_REPLAY +PRVT_CPADDM.COMPARE_WCR_REPORT_XML +PRVT_CPADDM.CPADDM_REPORT_XML +PRVT_CPADDM.GET_SNAPSHOTS +PRVT_CPADDM.ONE_TIME_PERIOD +PRVT_DBMS_MANAGE_XMLSTORAGE. +PRVT_DBMS_MANAGE_XMLSTORAGE.GETCOMPLEXTYPEELEMENTLIST +PRVT_DIMENSION_SYS_UTIL. +PRVT_DIMENSION_SYS_UTIL.INSERT_MESSAGE +PRVT_DIMENSION_SYS_UTIL.SET_DEBUG +PRVT_EMX. +PRVT_EMX.CLEAR_EMEXPRESS_FILES +PRVT_EMX.CLEAR_FILES +PRVT_EMX.CLEAR_REPORT_FILES +PRVT_EMX.CREATE_SHARED_DIRECTORY +PRVT_EMX.DROP_SHARED_DIRECTORY +PRVT_EMX.GET_EXPANDED_OSD_PATH +PRVT_EMX.GET_FILE_BINARY +PRVT_EMX.GET_FILE_ID +PRVT_EMX.GET_FILE_NON_BINARY +PRVT_EMX.GET_FILE_PROPERTY +PRVT_EMX.GET_ORACLE_HOME +PRVT_EMX.GET_SWF +PRVT_EMX.INJECT_EM_MODE +PRVT_EMX.IS_BINARY +PRVT_EMX.IS_BINARY_WRAPPER +PRVT_EMX.IS_FILE_PUBLIC +PRVT_EMX.IS_RAC +PRVT_EMX.REGISTER_FILES +PRVT_EMX.STORE_FILE +PRVT_EMX.VALIDATE_SIZE_CLAUSE +PRVT_HDM. +PRVT_HDM.ADDM_REPORTS +PRVT_HDM.ADDM_REPORT_XML +PRVT_HDM.ADDM_TASK_LIST_XML +PRVT_HDM.ADDM_TASK_REPORT_LINES +PRVT_HDM.ADDM_TASK_REPORT_XML +PRVT_HDM.ADD_INFO +PRVT_HDM.AGGREGATE_FINDINGS +PRVT_HDM.APPLY_DIRECTIVES +PRVT_HDM.AUTO_EXECUTE +PRVT_HDM.DB_FEATURE_CLOB +PRVT_HDM.DESCRIBE_DIRECTIVE +PRVT_HDM.EVALUATE_METER +PRVT_HDM.EXECUTE +PRVT_HDM.FINDING_NAME_10G +PRVT_HDM.FIND_LOCAL_FDGS +PRVT_HDM.GET_ASH_QUERY +PRVT_HDM.GET_QUERY_PREDICATE +PRVT_HDM.PARAMETER_EXISTS +PRVT_HDM.PRINT_ELEMENT +PRVT_HDM.PRINT_LINE +PRVT_HDM.REPORT +PRVT_HDM.RUN +PRVT_HDM.RUN_LOCALS +PRVT_HDM.TOP_ADDM_TASKS +PRVT_HDM.TRANSLATE_CLOB +PRVT_HDM.UPDATE_FDG_COUNT +PRVT_HDM.VALIDATE_INSTANCE +PRVT_IDX. +PRVT_IDX.ASSERT_FNCOL +PRVT_IDX.CHECK_PARAM +PRVT_IDX.COPYPTNINFO +PRVT_IDX.CRT_DUMMY_IDX +PRVT_IDX.NN +PRVT_IDX.NNDISTANCE +PRVT_IDX.SPLIT_QUALIFIED_SQL_NAME +PRVT_ILM. +PRVT_ILM.CREATE_JOBS_REBUILD_DEP +PRVT_ILM.CREATE_JOB_DEP +PRVT_ILM.CREATE_TAB_ILMJOB +PRVT_ILM.DEPOBJ_STATE +PRVT_ILM.EVALUATE_ILM_POLICIES +PRVT_ILM.EXECUTE_ILM_POLICIES +PRVT_ILM.EXECUTE_ILM_SCH +PRVT_ILM.EXECUTE_TASK +PRVT_ILM.FILTER_BY_WEIGHT +PRVT_ILM.FILTER_FOR_MOVE +PRVT_ILM.GEN_EXECUTION_ID +PRVT_ILM.GEN_RID_RANGE +PRVT_ILM.GETSECTICK +PRVT_ILM.GET_EVALUATEDTASK_JOB_INFO +PRVT_ILM.GET_EVAL_INFO +PRVT_ILM.GET_JOB_INFO +PRVT_ILM.GET_NEXTN_OBJ +PRVT_ILM.GET_NEXTN_OBJPOL +PRVT_ILM.GET_OBJPOLICY_STAT +PRVT_ILM.GET_OBJ_STAT +PRVT_ILM.GET_POLICY_INFO +PRVT_ILM.GET_STAT_TIME +PRVT_ILM.GET_WEIGHT +PRVT_ILM.HEAT_MAP_ON +PRVT_ILM.ILMJOBEXISTS +PRVT_ILM.ILM_AUTHORIZE +PRVT_ILM.ILM_CALLBACK +PRVT_ILM.ILM_CLEANUP +PRVT_ILM.ILM_CONSISTENCY +PRVT_ILM.ILM_JOBCOMPLETION +PRVT_ILM.ILM_RESOLVETASKS +PRVT_ILM.ILM_TASKCOMPLETE +PRVT_ILM.INSERT_TAB_ILMJOB +PRVT_ILM.INSERT_TAB_ILMTASKINFO_DDL +PRVT_ILM.ISSUPLOGENABLED +PRVT_ILM.IS_FILTER_CANDIDATE +PRVT_ILM.LOCK_ILM_DICT +PRVT_ILM.POPULATE_GRP_DEP +PRVT_ILM.POPULATE_TBS_STAT +PRVT_ILM.PREVIEW_ILM +PRVT_ILM.PRINT_OBJPOLICY_INFO +PRVT_ILM.PRINT_TAB_ADOJOB +PRVT_ILM.PRINT_TAB_NUMBERS +PRVT_ILM.PRINT_TAB_OBJPOLICY_INFO +PRVT_ILM.PRINT_TAB_OBJPOLICY_STAT +PRVT_ILM.PRINT_TAB_RID +PRVT_ILM.PURGE_ILM +PRVT_ILM.REMOVE_FROM_ILM +PRVT_ILM.SCHEDULE_ROWMAPS_FLUSH +PRVT_ILM.SCHEDULE_SEGMENTS_FLUSH +PRVT_ILM.SETDEBUG +PRVT_ILM.STOPJOBS +PRVT_ILM.STOPJOBS1 +PRVT_ILM.STORE_VALID_INDEXES +PRVT_ILM.TRACE +PRVT_ILM.UPDATE_ILMEXECUTION +PRVT_ILM.UPDATE_JOB_STATUS +PRVT_ILM.UPDATE_TAB_ILMJOB +PRVT_ILM.VALIDATE_EXECID +PRVT_ILM.VERIFY_PRECONDITION_POLICIES +PRVT_ILM.VERIFY_SUCCESS_POLICY +PRVT_PARTREC_NOPRIV. +PRVT_PARTREC_NOPRIV.GET_TABLE_DEFINITION +PRVT_PC. +PRVT_PC.CHECK_PC_BLOCK +PRVT_PC.CLIP_PC +PRVT_PC.CREATE_PC +PRVT_PC.GET_PT_IDS +PRVT_PC.OCI_CREATE_PC +PRVT_PC.TO_GEOMETRY +PRVT_REPORT_REGISTRY. +PRVT_REPORT_REGISTRY.REGISTER_CLIENTS +PRVT_REPORT_TAGS. +PRVT_REPORT_TAGS.BUILD_BINDS_TAG +PRVT_REPORT_TAGS.BUILD_BUCKET_TAG +PRVT_REPORT_TAGS.BUILD_EMPLOYEE_TAG +PRVT_REPORT_TAGS.BUILD_FMWK_TEST_TAG +PRVT_REPORT_TAGS.BUILD_HISTOGRAM_TAG +PRVT_REPORT_TAGS.BUILD_REPORT_REF_TAG +PRVT_REPORT_TAGS.BUILD_REPORT_TAG +PRVT_REPORT_TAGS.BUILD_STAT_GROUP_TAG +PRVT_REPORT_TAGS.BUILD_STAT_TAG +PRVT_REPORT_TAGS.BUILD_XPLAN_TAG +PRVT_REPORT_TAGS.REGISTER_COMMON_TAGS +PRVT_RTADDM. +PRVT_RTADDM.DESCRIBETRIGGER +PRVT_RTADDM.GETDATA +PRVT_RTADDM.GETSECTIONS +PRVT_RTADDM.GETTRIGGERREASONXML +PRVT_RTADDM.RAC_FLOOD_CONTROL +PRVT_SAM. +PRVT_SAM.BEST_AGGREGATE_LOCATIONS +PRVT_SAM.GEOMETRY_OF_TILE +PRVT_SAM.SIMPLIFY_GEOMETRY +PRVT_SMGUTIL. +PRVT_SMGUTIL.CHECK_PACK_ENABLED +PRVT_SMGUTIL.CHECK_RAT_OPTION +PRVT_SMGUTIL.IS_PACK_ENABLED +PRVT_SMGUTIL.IS_RAT_OPTION_ENABLED +PRVT_SMGUTIL.PRVT_PACK_ENABLED +PRVT_SQLADV_INFRA. +PRVT_SQLADV_INFRA.CREATE_TASK +PRVT_SQLADV_INFRA.REPORT_AUTO_TUNING_TASK +PRVT_SQLPA. +PRVT_SQLPA.I_LEVEL_FLAGS_TO_SQL_FLAGS +PRVT_SQLPA.I_STS_FROM_EXEC +PRVT_SQLPA.REPORT_SQLPA_TASK +PRVT_SQLPROF_INFRA. +PRVT_SQLPROF_INFRA.ACCEPT_SQL_PROFILE +PRVT_SQLPROF_INFRA.ALTER_SQL_PROFILE +PRVT_SQLPROF_INFRA.DROP_ALL_SQL_PROFILES +PRVT_SQLPROF_INFRA.DROP_SQL_PROFILE +PRVT_SQLSET_INFRA. +PRVT_SQLSET_INFRA.CREATE_SQLSET +PRVT_SYS_TUNE_MVIEW. +PRVT_SYS_TUNE_MVIEW.ADVISE_MVIEW_LOG +PRVT_SYS_TUNE_MVIEW.ANALYZE_MVLOGS +PRVT_SYS_TUNE_MVIEW.CHECK_BUFFER_OVERFLOW +PRVT_SYS_TUNE_MVIEW.CHECK_TUNED +PRVT_SYS_TUNE_MVIEW.CREATE_SUB_MV +PRVT_SYS_TUNE_MVIEW.DELETE_REC_ACTIONS +PRVT_SYS_TUNE_MVIEW.DROP_SUB_MV +PRVT_SYS_TUNE_MVIEW.DUMP_MVLOG_DDL +PRVT_SYS_TUNE_MVIEW.FINALIZE_TASK +PRVT_SYS_TUNE_MVIEW.INSERT_MESSAGE +PRVT_SYS_TUNE_MVIEW.INSERT_REC_ACTION +PRVT_SYS_TUNE_MVIEW.INTERNAL_EXPLAIN_MVIEW +PRVT_SYS_TUNE_MVIEW.PROCESS_SINGLE_TOP_MV +PRVT_SYS_TUNE_MVIEW.RECORD_SUB_MV +PRVT_SYS_TUNE_MVIEW.TRACE_DEBUG +PRVT_TIN. +PRVT_TIN.CHECK_TIN_BLOCK +PRVT_TIN.CLIP_TIN +PRVT_TIN.CREATE_TIN +PRVT_TIN.OCI_CREATE_TIN +PRVT_TIN.TO_GEOMETRY +PRVT_TUNE_MVIEW. +PRVT_TUNE_MVIEW.GENERATE_CHECKSUM +PRVT_TUNE_MVIEW.SETUP_PARAMETERS +PRVT_TUNE_MVIEW.TUNE_MVIEW +PRVT_TUNE_MVIEW.VALIDATE_TUNE_MVIEW +PRVT_UADV. +PRVT_UADV.EXECUTE +PRVT_WORKLOAD. +PRVT_WORKLOAD.ADD_STATEMENT +PRVT_WORKLOAD.CHECK_OR_CREATE_REFERENCE +PRVT_WORKLOAD.CREATE_REPORT +PRVT_WORKLOAD.CREATE_WORKLOAD +PRVT_WORKLOAD.DELETE_REFERENCE +PRVT_WORKLOAD.DELETE_STATEMENT +PRVT_WORKLOAD.DELETE_WORKLOAD +PRVT_WORKLOAD.GET_REPORT +PRVT_WORKLOAD.IMPORT_SCHEMA +PRVT_WORKLOAD.IMPORT_SQLCACHE +PRVT_WORKLOAD.IMPORT_STS +PRVT_WORKLOAD.IMPORT_SUMADV +PRVT_WORKLOAD.IMPORT_USER +PRVT_WORKLOAD.I_COPY_TO_LOCAL_STS +PRVT_WORKLOAD.I_OPEN_SQLWKLD_SQLSET_CURSOR +PRVT_WORKLOAD.PARAM_VALIDATE +PRVT_WORKLOAD.RECORD_JNL_ENTRY +PRVT_WORKLOAD.RESET_WORKLOAD +PRVT_WORKLOAD.SETUP_PARAMETERS +PRVT_WORKLOAD.SETUP_TEMPLATES +PRVT_WORKLOAD.SYNONYM +PRVT_WORKLOAD.TEST_API +PRVT_WORKLOAD.UPDATE_STATEMENT +PRVT_WORKLOAD_NOPRIV. +PRVT_WORKLOAD_NOPRIV.DELETE_STATEMENT +PRVT_WORKLOAD_NOPRIV.UPDATE_STATEMENT +PRV_XID +PRV_XIDSLT +PRV_XIDSQN +PRV_XIDUSN +PSERIAL# +PSL_MODE +PSNUMBER +PSTDY_DATAPUMP_SUPPORT. +PSTDY_DATAPUMP_SUPPORT.INSTANCE_CALLOUT_IMP +PSTDY_DATAPUMP_SUPPORT.INSTANCE_EXPORT_ACTION +PSVCNAME +PTX +PTX_XID +PTX_XIDSLT +PTX_XIDSQN +PTX_XIDUSN +PUBLIC_TEMPLATE +PUBLISHED +PUBLISHER +PUBLISHER_ADDRESS +PUBLISHER_NAME +PUBLISHER_PROTOCOL +PUBLISHER_RULE +PUBLISHER_RULESET +PUBLISHER_RULE_NAME +PUBLISHER_STATE +PUBLISHER_TRANSFORMATION +PUB_ID +PULL_PRED +PURCHASEORDER$XD. +PURGEABLE +PURGED_CURSOR +PURGED_DATE +PURGE_ASYNCHRONOUS +PURGE_DEFERRED +PURGE_DONE +PURGE_INTERVAL +PURGE_OBJECT +PURGE_OPTION +PURGE_START +PURGING +PURITY +PURPOSE +PUSH_DEFERRED_RPC +PUSH_PRED +PUSH_SUBQ +PXID +PXIDSLT +PXIDSQN +PXIDUSN +PX_FAULT_TOLERANCE +PX_FLAGS +PX_IS_CROSS_INSTANCE +PX_JOIN_FILTER +PX_MAXDOP +PX_MAXDOP_INSTANCES +PX_MISMATCH +PX_QCINST_ID +PX_QCSID +PX_SERVER# +PX_SERVERS_ALLOCATED +PX_SERVERS_EXECS_DELTA +PX_SERVERS_EXECS_TOTAL +PX_SERVERS_EXECUTIONS +PX_SERVERS_REQUESTED +PX_SERVER_GROUP +PX_SERVER_SET +P_OBJ_OWNER +P_OBJ_TYPE +P_SUB_OBJ_NAME1 +P_SUB_OBJ_NAME2 +P_SUB_OBJ_NAME3 +P_SUB_OBJ_NAME4 +P_TOP_OBJ_NAME +QBLOCK_NAME +QB_NAME +QCINST_ID +QCSERIAL# +QCSID +QC_INSTANCE_GROUP +QC_INSTANCE_ID +QC_INST_ID +QC_SESSION_ID +QC_SESSION_SERIAL# +QID +QMNC_PID +QNAME +QOS +QOSFLAGS +QOS_PC_ITT +QOS_PC_KEY +QOS_PC_RANK +QOS_PC_RTT +QRY2OPT. +QUALIFIED_COL_NAME +QUALIFIER_ID1 +QUALIFIER_ID2 +QUAL_SCHEMA_URL +QUERY +QUERYID +QUERYTEXT +QUERY_IS_APPROX +QUERY_LEN +QUERY_ONLY +QUERY_TXT +QUEUE +QUEUED +QUEUEDC +QUEUED_TIME +QUEUEING_MTH +QUEUEING_P1 +QUEUE_CURR +QUEUE_ID +QUEUE_LENGTH +QUEUE_NAME +QUEUE_OWNER +QUEUE_ROWP +QUEUE_SCHEMA +QUEUE_SIZE +QUEUE_STATE +QUEUE_TABLE +QUEUE_TABLE_ID +QUEUE_TABLE_NAME +QUEUE_TABNUM +QUEUE_TIME_OUTS +QUEUE_TO_HBA_LATENCY +QUEUE_TO_QUEUE +QUEUE_TYPE +QUEUING_TIME +QUIESCE_TIME +QUOTA_IN_MB +QUOTA_SIZE +QUOTA_USED +RAC +RAC_INSTANCE +RADDR +RADIX +RAISE_EVENTS +RAISE_TRANSLATION_ERROR +RANGE_ID +RANK +RATIONALE_ID +RAW_VALUE +RBABLK +RBABYTE +RBASQN +RBO_OUTLINE +RBR +RBR_FORCED_STALE +RBR_FORCED_WRITE +RCVDC +RCVSERVERS +RCV_SEQ_NO +RDBID +RDMA +RDMAENABLE +RDMAPORT +RDMA_CREDITS +RE$NV_LIST.ADD_PAIR +RE$NV_LIST.GET_ALL_NAMES +RE$NV_LIST.GET_VALUE +RE$NV_LIST.REMOVE_PAIR +REA +READER_LAG +READER_TOTAL_MESSAGES_DEQUEUED +READS +READS# +READS_AVG +READS_SUM +READS_SUMX2 +READTIM +READY +READ_ERRS +READ_LATENCY +READ_MB_AVG +READ_MB_SUM +READ_MB_SUMX2 +READ_ONLY +READ_SCN +READ_SEQUENCE# +READ_THREAD# +READ_TIME +READ_TIMEOUT +REALM +REALM_DESC +REALM_DESCRIPTION +REALM_ENCR_ALGO +REALM_ENCR_KEYLEN +REALM_ENCR_STATUS +REALM_NAME +REALM_ORDER +REALM_STATUS +REALM_TYPE +REALTIME_APPLY +REASON +REASON_ARGUMENT_1 +REASON_ARGUMENT_2 +REASON_ARGUMENT_3 +REASON_ARGUMENT_4 +REASON_ARGUMENT_5 +REASON_ARGUMENT_COUNT +REASON_ID +REASON_MESSAGE_ID +REASON_NAME +REASON_VALUE +RECEIVER +RECEIVE_BUF_OR +RECEIVE_DROPPED +RECEIVE_ERRORS +RECEIVE_FRAME_ERR +RECID +RECIPIENT +RECIPIENTS +RECIPIENT_ID +RECIPIENT_NAME +RECOMMENDATIONS +RECOMMENDATIONS_COUNT +RECOMMENDATION_COUNT +RECOMMENDATION_ID +RECORDS_TOTAL +RECORDS_USED +RECORD_ID +RECORD_SIZE +RECOVER +RECOVERABLE_SCRIPT_ID +RECOVERING +RECOVERY_CHECKPOINT +RECOVERY_ESTIMATED_IOS +RECOVERY_FUZZY_CHANGE# +RECOVERY_FUZZY_TIME +RECOVERY_MODE +RECOVERY_STATUS +RECOVERY_TARGET_INCARNATION# +RECURSIVE +RECV +RECVS +RECYCLEBIN +REC_ID +REDEFINITION_ID +REDO_DATA +REDO_LATENCY +REDO_SOURCE +REDO_THREAD +REDO_VALUE +REDUNDANCY +REDUNDANCY_LOWERED +REF +REFCOUNT +REFERENCED_LINK_NAME +REFERENCED_NAME +REFERENCED_OWNER +REFERENCED_TRIGGER_NAME +REFERENCED_TRIGGER_OWNER +REFERENCED_TYPE +REFERENCE_INDEX +REFERENCE_NAME +REFERENCING_NAMES +REFGROUP +REFRESH_ABILITY +REFRESH_AFTER_ERRORS +REFRESH_COUNT +REFRESH_GROUP +REFRESH_GROUP_ID +REFRESH_GROUP_NAME +REFRESH_METHOD +REFRESH_MODE +REFRESH_MVIEW_NAME +REFRESH_TEMPLATE_ID +REFRESH_TEMPLATE_NAME +REFS_ENABLED +REF_CASCADE_CURSOR +REF_LEN +REF_PTN_CONSTRAINT_NAME +REGFLAGS +REGID +REGISTER +REGISTERED_AS +REGISTRAR +REGISTRATIONS_EXPIRED +REGISTRATIONS_INVALID +REGISTRATIONS_PURGED +REGISTRATION_TIME +REG_ID +REG_TIME +REJECT_LIMIT +RELATED +RELATION_ID +RELATION_NAME +RELATIVE_FNO +RELEASING +RELFILE +RELOADS +RELY +REL_FILE# +REMAINING_INSTRUCTIONS +REMALIAS +REMARK +REMARKS +REMASTERED_OBJECTS +REMASTER_CNT +REMASTER_OPS +REMASTER_TIME +REMASTER_TYPE +REMOTE +REMOTE_ACCESS +REMOTE_ARCHIVE +REMOTE_CONVERGE_TAG +REMOTE_COST +REMOTE_CR_ACCESS +REMOTE_CR_COST +REMOTE_HOME +REMOTE_INC +REMOTE_INSTANCE# +REMOTE_MAPPED +REMOTE_MAPPING_MISMATCH +REMOTE_NID +REMOTE_OBJECT_NAME +REMOTE_OBJECT_TYPE +REMOTE_RID +REMOTE_ROWID +REMOTE_SCHEMA_NAME +REMOTE_TARGET +REMOTE_TEMPLATE +REMOTE_TRANS_MISMATCH +REN +REOPEN_SECS +REPAIR_ID +REPAIR_SCRIPT +REPAIR_TIMER +REPAPI_SITE_NAME +REPARSE +REPCATLOGTRIG. +REPCATLOG_ID +REPEAT_INTERVAL +REPERROR_IGNORES +REPERROR_RECORDS +REPERR_CNT +REPLAYED +REPLAYED_LOCKS_RECEIVED +REPLAYED_LOCKS_SENT +REPLAY_CONN +REPLAY_DIR_NUMBER +REPLAY_ID +REPLAY_INITIATION_TIMEOUT +REPLAY_OVERHEAD +REPLAY_TIME +REPLAY_USER +REPLICATION_TRIGGER_EXISTS +REPLICAT_NAME +REPLSTATE +REPOPULATED +REPOPULATE_CUS +REPOPULATE_CUS_DELTA +REPORT +REPORT_CLASS +REPORT_COMPRESSED +REPORT_FILE +REPORT_GENERATION_TIME +REPORT_ID +REPORT_NAME +REPORT_PARAMETERS +REPORT_REF +REPORT_SUMMARY +REPRODUCED +REQUEST +REQUESTED_ANALYSIS +REQUESTING_SESSION +REQUESTS +REQUESTSPERSEC +REQUEST_DELETE_TRIGGER. +REQUEST_FAILURES +REQUEST_LEVEL +REQUEST_MISSES +REQUIRED +REQUIRED_CHECKPOINT_SCN +REQUIRED_MIRROR_FREE_MB +REQUIRED_START_DATE +REQUIRED_START_SCN +REQUIRES_ACO +REQ_COMP_ID +REQ_DEGREE +REQ_DESCRIPTION +REQ_NAMESPACE +REQ_REASON +REQ_START_DATE +RESENDS +RESENT +RESERVED +RESETLOGS_CHANGE# +RESETLOGS_ID +RESETLOGS_SCN +RESETLOGS_TIME +RESETLOG_ID +RESET_INPROG_INDEX. +RESET_LOG_COUNTER +RESET_LOG_SCN +RESET_SCN +RESET_SCNBAS +RESET_SCNWRP +RESET_SCN_TIME +RESET_TIME +RESET_TIMESTAMP +RESET_UNDO_STAT. +RESIZEABLE +RESIZE_STATE +RESIZE_UNIT_MB +RESOLUTION +RESOLUTION_ATTEMPTED +RESOLUTION_COLUMN +RESOLUTION_COMMENT +RESOLUTION_STATUS +RESOLVED_DATE +RESOURCES_CLEANED +RESOURCE_CONSUMER_GROUP +RESOURCE_COST +RESOURCE_NAME +RESOURCE_NAME1 +RESOURCE_NAME2 +RESOURCE_PERCENTAGE +RESOURCE_PLAN +RESOURCE_TYPE +RESP +RESPONSETIMEPERREQUEST +RESTARTABLE +RESTARTQ +RESTART_ON_FAILURE +RESTART_ON_RECOVERY +RESTART_SCN +RESTART_TIME +RESTORE_AS_INTERVALS +RESTORE_DIR +RESTORE_FORMAT +RESTORE_LOCATOR +RESTORE_MODE +RESTORE_ONLY +RESTORE_POINT_TIME +RESTORE_SCOPE +RESTORE_TIME +RESTRICTED +RESTRICTED_SYNTAX +RESTRICT_ALL_REF_CONS +RESULTS +RESULT_CACHE +RESULT_CACHE_ELEMENTS +RESULT_CACHE_HITS +RESULT_ID +RESULT_TYPE +RESULT_TYPE_MOD +RESULT_TYPE_NAME +RESULT_TYPE_OWNER +RESUME_TIME +RES_ATTR +RES_SEMI +RES_TYPE +RETENTION +RETENTION_DAYS +RETENTION_IN_DAYS +RETENTION_TARGET +RETENTION_TIME +RETENTION_TIMEOUT +RETENTION_TYPE +RETENTION_VALUE +RETRIES_ON_ERROR +RETRY_COUNT +RETRY_DELAY +RETRY_ON_ROW_CHANGE +RETRY_TIME +RETURNCODE +RETURN_CLASS +RETURN_CODE +RETURN_SCHEMA +RETURN_TYPE +REVISION +REVOKEE. +REWRITE +REWRITE_CAPABILITY +REWRITE_ENABLED +REWRITE_MODE +REWRITE_MVIEW_NAME +REWRITE_OR_ERROR +RFILE# +RFNO +RL_FIRST_CHANGE# +RL_FIRST_TIME +RL_NEXT_CHANGE# +RL_NEXT_TIME +RL_RESETLOGS_CHANGE# +RL_SEQUENCE# +RL_THREAD# +RMAN_DEVICE_TYPE +RMAN_OBJECT_TYPE +RMAN_OPERATION +RMAN_SESSION_RECID +RMAN_SESSION_STAMP +RMAN_STATUS_RECID +RMAN_STATUS_STAMP +RMJVM. +RMJVM.CHECK_FOR_RMJVM +RMJVM.HEXTOCHAR +RMJVM.RUN +RMJVM.STRIP +RM_CONSUMER_GROUP +RM_LAST_ACTION +RM_LAST_ACTION_REASON +RM_LAST_ACTION_TIME +RNAME +ROLE +ROLE$_PRIV. +ROLE$_PRIV.CREATE_ROW +ROLE$_PRIV.DELETE_BY_RULE_SET_ID#_ +ROLE$_PRIV.DELETE_ROW +ROLE$_PRIV.READ_BY_RULE_SET_ID#_ +ROLE$_PRIV.READ_ROW +ROLE$_PRIV.UPDATE_ROW +ROLENAME +ROLES +ROLES_DEFAULT_ENABLED +ROLE_IS_ENABLED. +ROLE_NAME +ROLE_ROLE_PRIVS +ROLE_SYS_PRIVS +ROLE_TAB_PRIVS +ROLE_WSPACE +ROLLBACK +ROLLBACK_SEG +ROLLBACK_SEGMENT_NAME +ROLL_INVALID_MISMATCH +ROOT +ROOT_DIR +ROOT_SCAN_ID +ROUNDTRIPS +ROWID +ROWIDS +ROWNER +ROWS_PROCESSED +ROWS_PROCESSED_DELTA +ROWS_PROCESSED_TOTAL +ROW_ACL +ROW_ATTRIBUTE +ROW_COUNT +ROW_ID +ROW_LEN +ROW_LEVEL +ROW_LOCK_WAITS_DELTA +ROW_LOCK_WAITS_TOTAL +ROW_MOVEMENT +ROW_SIZE_AVG +ROW_SIZE_MAX +ROW_SIZE_MIN +ROW_TYPE +ROW_UPDATE_COUNT +ROW_WAIT_BLOCK# +ROW_WAIT_FILE# +ROW_WAIT_OBJ# +ROW_WAIT_ROW# +RPC_PROCESSING_DISABLED +RSSIZE +RS_ID +RTIME +RTMAX +RTREEJOINFUNC. +RTREEJOIN_IMP_T.CLOSESTUB +RTREEJOIN_IMP_T.FETCHSTUB +RTREEJOIN_IMP_T.ODCITABLECLOSE +RTREEJOIN_IMP_T.ODCITABLEFETCH +RTREEJOIN_IMP_T.ODCITABLESTART +RTREEJOIN_IMP_T.STARTSTUB +RTREE_IDX. +RTREE_IDX.INDEX_UPDATE +RTREE_INDEX_METHOD.ODCIGETINTERFACES +RTREE_INDEX_METHOD.ODCIINDEXALTER +RTREE_INDEX_METHOD.ODCIINDEXCLOSE +RTREE_INDEX_METHOD.ODCIINDEXCREATE +RTREE_INDEX_METHOD.ODCIINDEXDELETE +RTREE_INDEX_METHOD.ODCIINDEXDROP +RTREE_INDEX_METHOD.ODCIINDEXFETCH +RTREE_INDEX_METHOD.ODCIINDEXINSERT +RTREE_INDEX_METHOD.ODCIINDEXSTART +RTREE_INDEX_METHOD.ODCIINDEXTRUNCATE +RTREE_INDEX_METHOD.ODCIINDEXUPDATE +RULE +RULEINDEXMETHODS.ODCIGETINTERFACES +RULEINDEXMETHODS.ODCIINDEXALTER +RULEINDEXMETHODS.ODCIINDEXCLOSE +RULEINDEXMETHODS.ODCIINDEXCREATE +RULEINDEXMETHODS.ODCIINDEXDELETE +RULEINDEXMETHODS.ODCIINDEXDROP +RULEINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +RULEINDEXMETHODS.ODCIINDEXFETCH +RULEINDEXMETHODS.ODCIINDEXGETMETADATA +RULEINDEXMETHODS.ODCIINDEXINSERT +RULEINDEXMETHODS.ODCIINDEXMERGEPARTITION +RULEINDEXMETHODS.ODCIINDEXSPLITPARTITION +RULEINDEXMETHODS.ODCIINDEXSTART +RULEINDEXMETHODS.ODCIINDEXTRUNCATE +RULEINDEXMETHODS.ODCIINDEXUPDATE +RULEINDEXMETHODS.ODCIINDEXUTILCLEANUP +RULEINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +RULESET_COMMENT +RULESET_NAME +RULESET_OPTION +RULESET_STORAGE_TABLE +RULE_ACTION_CONTEXT +RULE_COMMENT +RULE_CONDITION +RULE_EVALUATION_CONTEXT_NAME +RULE_EVALUATION_CONTEXT_OWNER +RULE_NAME +RULE_OPTION +RULE_OWNER +RULE_SET_COMMENT +RULE_SET_EVAL_CONTEXT_NAME +RULE_SET_EVAL_CONTEXT_OWNER +RULE_SET_NAME +RULE_SET_OBJECT_ID +RULE_SET_OWNER +RULE_SET_RULE_COMMENT +RULE_SET_RULE_ENABLED +RULE_SET_RULE_EVAL_CTX_NAME +RULE_SET_RULE_EVAL_CTX_OWNER +RULE_SET_TYPE +RULE_TYPE +RULE_VALUE +RULE_VALUE2 +RUNNING_INSTANCE +RUNNING_SESSIONS_LIMIT +RUNNING_SLAVE +RUNTIME_MEM +RUN_COUNT +RUN_DURATION +RUN_ID +RUN_MODE +RUN_NAME +R_CONSTRAINT_NAME +R_OWNER +SADDR +SAFE_PURGE_SCN +SAFE_RESUME_SCN +SALT +SAMCLUST_IMP_T.FETCHSTUB +SAMCLUST_IMP_T.ODCITABLECLOSE +SAMCLUST_IMP_T.ODCITABLEFETCH +SAMCLUST_IMP_T.ODCITABLESTART +SAMCLUST_IMP_T.STARTSTUB +SAME_ENDIAN +SAME_RULE_CONDITION +SAMPLED +SAMPLED_ACTIVE_CONN +SAMPLED_ACTIVE_DISP +SAMPLED_ACTIVE_SRV +SAMPLED_BYTES +SAMPLED_TOTAL_CONN +SAMPLED_TOTAL_DISP +SAMPLED_TOTAL_SRV +SAMPLER_ELAPSED_TIME +SAMPLE_COUNT +SAMPLE_ID +SAMPLE_INTERVAL +SAMPLE_SIZE +SAMPLE_TIME +SAMPLING_INTERVAL +SAVEPOINT_NUMBER +SAVE_AS_INTERVALS +SA_AUDIT_ADMIN. +SA_AUDIT_ADMIN.AUDIT +SA_AUDIT_ADMIN.AUDIT_LABEL +SA_AUDIT_ADMIN.AUDIT_LABEL_ENABLED +SA_AUDIT_ADMIN.AUDIT_LABEL_ENABLED_SQL +SA_AUDIT_ADMIN.CREATE_VIEW +SA_AUDIT_ADMIN.DROP_VIEW +SA_AUDIT_ADMIN.NOAUDIT +SA_AUDIT_ADMIN.NOAUDIT_LABEL +SA_COMPONENTS. +SA_COMPONENTS.ALTER_COMPARTMENT +SA_COMPONENTS.ALTER_GROUP +SA_COMPONENTS.ALTER_GROUP_PARENT +SA_COMPONENTS.ALTER_LEVEL +SA_COMPONENTS.CREATE_COMPARTMENT +SA_COMPONENTS.CREATE_GROUP +SA_COMPONENTS.CREATE_LEVEL +SA_COMPONENTS.DROP_COMPARTMENT +SA_COMPONENTS.DROP_GROUP +SA_COMPONENTS.DROP_LEVEL +SA_LABEL_ADMIN. +SA_LABEL_ADMIN.ALTER_LABEL +SA_LABEL_ADMIN.CREATE_LABEL +SA_LABEL_ADMIN.DROP_LABEL +SA_POLICY_GRANT. +SA_SESSION. +SA_SESSION.COMP_READ +SA_SESSION.COMP_WRITE +SA_SESSION.GROUP_READ +SA_SESSION.GROUP_WRITE +SA_SESSION.LABEL +SA_SESSION.MAX_LEVEL +SA_SESSION.MAX_READ_LABEL +SA_SESSION.MAX_WRITE_LABEL +SA_SESSION.MIN_LEVEL +SA_SESSION.PRIVILEGES +SA_SESSION.PRIVS +SA_SESSION.READ_LABEL +SA_SESSION.RESTORE_DEFAULT_LABELS +SA_SESSION.ROW_LABEL +SA_SESSION.SAVE_DEFAULT_LABELS +SA_SESSION.SA_USER_NAME +SA_SESSION.SET_ACCESS_PROFILE +SA_SESSION.SET_LABEL +SA_SESSION.SET_ROW_LABEL +SA_SESSION.WRITE_LABEL +SA_SYSDBA. +SA_SYSDBA.ALTER_POLICY +SA_SYSDBA.CREATE_POLICY +SA_SYSDBA.DISABLE_POLICY +SA_SYSDBA.DROP_POLICY +SA_SYSDBA.ENABLE_POLICY +SA_SYSDBA.SET_DIP_DEBUGLEVEL +SA_USER_ADMIN. +SA_USER_ADMIN.ADD_COMPARTMENTS +SA_USER_ADMIN.ADD_GROUPS +SA_USER_ADMIN.ALTER_COMPARTMENTS +SA_USER_ADMIN.ALTER_GROUPS +SA_USER_ADMIN.DEFAULT_READ_LABEL +SA_USER_ADMIN.DEFAULT_ROW_LABEL +SA_USER_ADMIN.DEFAULT_WRITE_LABEL +SA_USER_ADMIN.DROP_ALL_COMPARTMENTS +SA_USER_ADMIN.DROP_ALL_GROUPS +SA_USER_ADMIN.DROP_COMPARTMENTS +SA_USER_ADMIN.DROP_GROUPS +SA_USER_ADMIN.DROP_LABELS +SA_USER_ADMIN.DROP_USER_ACCESS +SA_USER_ADMIN.MAX_READ_LABEL +SA_USER_ADMIN.MAX_WRITE_LABEL +SA_USER_ADMIN.MIN_WRITE_LABEL +SA_USER_ADMIN.PRIVS_TO_CHAR +SA_USER_ADMIN.SET_COMPARTMENTS +SA_USER_ADMIN.SET_DEFAULT_LABEL +SA_USER_ADMIN.SET_GROUPS +SA_USER_ADMIN.SET_LEVELS +SA_USER_ADMIN.SET_PROG_PRIVS +SA_USER_ADMIN.SET_ROW_LABEL +SA_USER_ADMIN.SET_USER_LABELS +SA_USER_ADMIN.SET_USER_PRIVS +SA_UTL. +SA_UTL.CHECK_LABEL_CHANGE +SA_UTL.CHECK_READ +SA_UTL.CHECK_WRITE +SA_UTL.DATA_LABEL +SA_UTL.DOMINATED_BY +SA_UTL.DOMINATES +SA_UTL.GREATEST_LBOUND +SA_UTL.LABEL +SA_UTL.LBAC_READ_LABEL +SA_UTL.LBAC_ROW_LABEL +SA_UTL.LBAC_WRITE_LABEL +SA_UTL.LEAST_UBOUND +SA_UTL.MERGE_LABEL +SA_UTL.NUMERIC_LABEL +SA_UTL.NUMERIC_READ_LABEL +SA_UTL.NUMERIC_ROW_LABEL +SA_UTL.NUMERIC_WRITE_LABEL +SA_UTL.SET_LABEL +SA_UTL.SET_ROW_LABEL +SA_UTL.STRICTLY_DOMINATED_BY +SA_UTL.STRICTLY_DOMINATES +SCALE +SCALE_BUF +SCALE_CLT_BUF +SCALE_IN_CONNECT +SCALE_LOOPS +SCALE_MSG +SCALE_OUT_CONNECT +SCALE_RECONNECT +SCALE_SVR_BUF +SCALE_UP_MULTIPLIER +SCANCOMPLETES +SCANMISSES +SCANNED +SCANS +SCANS_DELTA +SCAN_COUNT +SCAN_ID +SCAN_MODE +SCAN_NULLS +SCAN_PERCENT +SCHEDULE +SCHEDULER$_BATCHERR_PIPE. +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLECLOSE +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLEFETCH +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLEPREPARE +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLESTART +SCHEDULER$_EVENT_INFO.SCHEDULER$_EVENT_INFO +SCHEDULER$_JOB_EVENT_HANDLER. +SCHEDULE_CAP_ID +SCHEDULE_DISABLED +SCHEDULE_LIMIT +SCHEDULE_NAME +SCHEDULE_OWNER +SCHEDULE_STATUS +SCHEDULE_TYPE +SCHEMA +SCHEMA# +SCHEMAID +SCHEMANAME +SCHEMA_COMMENT +SCHEMA_ID +SCHEMA_NAME +SCHEMA_OID +SCHEMA_OWNER +SCHEMA_URL +SCHEMA_USER +SCHWAITPERREQUEST +SCN +SCN_ASCENDING +SCN_NEEDED +SCN_TO_TIMESTAMP. +SCOPE +SCOPE_TABLE_NAME +SCOPE_TABLE_OWNER +SCRIPT +SCRIPT_COMMENT +SCRIPT_ID +SCRIPT_STATUS +SCRIPT_TYPE +SDO. +SDO.BVALUETODIM +SDO.COMPARE +SDO.DATETODIM +SDO.DECODE +SDO.ENCODE +SDO.HVALUETODIM +SDO.LATLONTOCODE +SDO.TO_BVALUE +SDO.TO_DATE +SDO.TO_HVALUE +SDO.TO_LAT +SDO.TO_LON +SDOAGGR.ODCIAGGREGATEINITIALIZE +SDOAGGR.ODCIAGGREGATEITERATE +SDOAGGR.ODCIAGGREGATEMERGE +SDOAGGR.ODCIAGGREGATETERMINATE +SDOCURPKG. +SDOTNPC. +SDOTNPC.ASSOCIATE_DEP_TABLES +SDOTNPC.CREATEDMLTRIGGER +SDOTNPC.DEL_BLKTAB_ROWS +SDOTNPC.DROP_DEP_TABLES +SDO_3GL. +SDO_3GL.ALPHA_SHAPE +SDO_3GL.ANYINTERACT +SDO_3GL.ANYINTERACT3D +SDO_3GL.ARC_DENSIFY +SDO_3GL.AREA3D +SDO_3GL.BEARING +SDO_3GL.CENTROID +SDO_3GL.CENTROID3D +SDO_3GL.CHECKSPATIAL +SDO_3GL.CLOSESTPOINTS3D +SDO_3GL.CLOSEST_POINTS +SDO_3GL.CONCAVEHULL +SDO_3GL.CONCAVEHULL_B +SDO_3GL.CONTAINS +SDO_3GL.CONVEXHULL +SDO_3GL.COVEREDBY +SDO_3GL.COVERS +SDO_3GL.DIAMETER +SDO_3GL.DISTANCE +SDO_3GL.DISTANCE3D +SDO_3GL.DIVIDE_RING_BY_POINTS +SDO_3GL.EQUAL +SDO_3GL.EXPANDG3DGEOMS +SDO_3GL.EXTENT_OF_OBJECT +SDO_3GL.FILTER +SDO_3GL.G3DCONV +SDO_3GL.GENERATE_BUFFER +SDO_3GL.GEODEXTENT_OF_OBJECT +SDO_3GL.GEOM_OPERATION +SDO_3GL.INSERT_LOG_FILTER +SDO_3GL.INSIDE +SDO_3GL.INSIDE3D +SDO_3GL.LENGTH3D +SDO_3GL.LENGTH_AREA +SDO_3GL.MAKE_RING_FROM_LINES +SDO_3GL.MAXDISTANCE +SDO_3GL.MBR_GEOMETRY +SDO_3GL.MEMORY_LEAK +SDO_3GL.MINBNDCIRCLE +SDO_3GL.OVERLAP +SDO_3GL.OVERLAPBDYDISJOINT +SDO_3GL.OVERLAPBDYINTERSECT +SDO_3GL.PCTRCLIP +SDO_3GL.POINTONSURFACE +SDO_3GL.REGISTER_UDT +SDO_3GL.RELATE +SDO_3GL.RELATE_PROCESS +SDO_3GL.REMOVE_DUPLICATE_VERTICES +SDO_3GL.RING_UNION_APPROX +SDO_3GL.SDOON +SDO_3GL.SDO_CENTROID +SDO_3GL.SDO_CONVEXHULL +SDO_3GL.SDO_GEOD_MBR +SDO_3GL.SDO_MBR +SDO_3GL.TOUCH +SDO_3GL.TRIANGULATE +SDO_3GL.VALIDATEGEOM3D +SDO_3GL.VALIDATE_GEOM +SDO_3GL.VALIDATE_GEOM_WITH_CONTEXT +SDO_3GL.VALIDATE_LAYER_WITH_CONTEXT +SDO_3GL.VALIDATE_LAYER_WITH_CONTEXT3D +SDO_3GL.VOLUME3D +SDO_3GL.WIDTH +SDO_3GL.WITHIN_DISTANCE +SDO_ADMIN. +SDO_ADMIN.CHANGE_INDEX_PARAMETERS +SDO_ADMIN.POPULATE_INDEX +SDO_ADMIN.POPULATE_INDEX_FIXED +SDO_ADMIN.POPULATE_INDEX_FIXED_POINTS +SDO_ADMIN.SDO_CODE_SIZE +SDO_ADMIN.SDO_VERSION +SDO_ADMIN.SET_CODE_NULL +SDO_ADMIN.UPDATE_INDEX +SDO_ADMIN.UPDATE_INDEX_FIXED +SDO_AGGR. +SDO_AGGR.SDO_AGGR_SET_UNION +SDO_AGGR_CENTROID. +SDO_AGGR_CONCAT_LINES. +SDO_AGGR_CONVEXHULL. +SDO_AGGR_LRS_CONCAT. +SDO_AGGR_LRS_CONCAT_3D. +SDO_AGGR_MBR. +SDO_AGGR_SET_UNION. +SDO_AGGR_UNION. +SDO_ANNOT_TRIG_INS1. +SDO_CATALOG. +SDO_CATALOG.DELETE_CATALOG +SDO_CATALOG.INSERT_CATALOG +SDO_CATALOG.UPDATE_CATALOG +SDO_CONSTRUCT_DIM_ARRAY. +SDO_COORD_OPS_TRIGGER. +SDO_COORD_OP_METHODS_TRIGGER. +SDO_COORD_OP_PARAM_VAL_TRIGG2. +SDO_COORD_OP_PARAM_VAL_TRIGGER. +SDO_COORD_OP_PATHS_TRIGGER. +SDO_COORD_REF_SRID_INSERT. +SDO_COORD_REF_SRID_UPDATE. +SDO_CRS_DELETE_TRIGGER. +SDO_CRS_GEOG_SRID_UPDATE. +SDO_CRS_INSERT_TRIGGER. +SDO_CS. +SDO_CS.ADD_PREFERENCE_FOR_OP +SDO_CS.CONVERT_2D_SRID_TO_3D +SDO_CS.CONVERT_2D_TO_3D +SDO_CS.CONVERT_3D_SRID_TO_2D +SDO_CS.CONVERT_MIXED_AXES_UNITS +SDO_CS.CONVERT_NADCON_TO_XML +SDO_CS.CONVERT_NTV2_TO_XML +SDO_CS.CONVERT_NTV2_TO_XML_TABLE +SDO_CS.CONVERT_XML_TABLE_TO_NTV2 +SDO_CS.CONVERT_XML_TO_NADCON +SDO_CS.CONVERT_XML_TO_NTV2 +SDO_CS.CREATE_CONCATENATED_OP +SDO_CS.CREATE_CRS_USING_LEGACY_PROJ +SDO_CS.CREATE_OBVIOUS_EPSG_RULES +SDO_CS.CREATE_PREF_CONCATENATED_OP +SDO_CS.DECIMAL_DEGREES_TO_DMS +SDO_CS.DELETE_ALL_EPSG_RULES +SDO_CS.DELETE_NTV2_XML_DATA +SDO_CS.DELETE_OP +SDO_CS.DETERMINE_CHAIN +SDO_CS.DETERMINE_DEFAULT_CHAIN +SDO_CS.DETERMINE_NADCON_COVERAGE +SDO_CS.DETERMINE_SRID_UNITS +SDO_CS.DISAMBIGUATE_PROJ_NAME +SDO_CS.DMS_TO_DECIMAL_DEGREE +SDO_CS.FILL_IN_DEFAULT_UNITS +SDO_CS.FIND_EPSG_PARAMS +SDO_CS.FIND_GEOG_CRS +SDO_CS.FIND_PROJ_CRS +SDO_CS.FIND_SRID +SDO_CS.FROM_OGC_SIMPLEFEATURE_SRS +SDO_CS.FROM_USNG +SDO_CS.GENERATE_CRS_FROM_WKT +SDO_CS.GENERATE_EPSG_RULE_FOR_3785 +SDO_CS.GENERATE_SCRIPT_FROM_CS_ID +SDO_CS.GENERATE_SCRIPT_FROM_DATUM_ID +SDO_CS.GENERATE_SCRIPT_FROM_ELLIPS_ID +SDO_CS.GENERATE_SCRIPT_FROM_OP_ID +SDO_CS.GENERATE_SCRIPT_FROM_PM_ID +SDO_CS.GENERATE_SCRIPT_FROM_SRID +SDO_CS.GENERATE_SCRIPT_FROM_UOM_ID +SDO_CS.GET_3D_WKT +SDO_CS.GET_AXIS_ORDER +SDO_CS.GET_EPSG_DATA_VERSION +SDO_CS.GET_SRID_FOR_NAMESPACE +SDO_CS.GET_SRSNAME_FOR_NAMESPACE +SDO_CS.GET_WKT_PATH +SDO_CS.INTERNAL_DENSIFY_PRIOR_TO_TFM +SDO_CS.INTERNAL_DET_CHAIN +SDO_CS.INTERNAL_DET_CHAIN_VARCHAR +SDO_CS.INTERNAL_DET_SRID_WKT +SDO_CS.INTERNAL_EPSG_PARAM_TO_LEGACY +SDO_CS.INTERNAL_GET_DENSIFICATION_RES +SDO_CS.INTERNAL_READ_PROJ_FROM_WKT +SDO_CS.INTL_POPULATE_DATUM_3PARAMS +SDO_CS.INTL_POPULATE_DATUM_7PARAMS +SDO_CS.INTL_VALIDATE_WKT +SDO_CS.IS_WITHIN_TOLERANCE +SDO_CS.LOAD_EPSG_MATRIX +SDO_CS.LOOKUP_EPSG_PARAM +SDO_CS.MAKE_2D +SDO_CS.MAKE_3D +SDO_CS.MAP_EPSG_SRID_TO_ORACLE +SDO_CS.MAP_ORACLE_SRID_TO_EPSG +SDO_CS.REFORMAT_GTYPE +SDO_CS.REGISTER_SRSNAMESPACE +SDO_CS.REVERSE_AXIS_ORDER +SDO_CS.REVOKE_PREFERENCE_FOR_OP +SDO_CS.SDO_CS_CONTEXT_INVALIDATE +SDO_CS.TFM_AXIS_ORIENTATION_TO_WKT +SDO_CS.TO_OGC_SIMPLEFEATURE_SRS +SDO_CS.TO_USNG +SDO_CS.TRANSFORM +SDO_CS.TRANSFORM_ACROSS_DIMS +SDO_CS.TRANSFORM_ACROSS_DIMS_WA +SDO_CS.TRANSFORM_LAYER +SDO_CS.TRANSFORM_LAYER_ACROSS_DIMS +SDO_CS.TRANSFORM_LAYER_WITH_ARCS +SDO_CS.TRANSFORM_OGC_CS_WKT_TO_SRS +SDO_CS.TRANSFORM_ORIG +SDO_CS.TRANSFORM_ORIG_USING_RULES +SDO_CS.TRANSFORM_ORIG_WITH_ARCS +SDO_CS.TRANSFORM_TO_BASE_UNIT +SDO_CS.TRANSFORM_TO_WKT_PARAM_UNIT +SDO_CS.TRANSFORM_USING_CASE_NAME +SDO_CS.TRANSFORM_USING_PLAN +SDO_CS.TRANSFORM_WITH_ARCS +SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS +SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS +SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM +SDO_CS.UPDATE_WKTS_FOR_EPSG_ELLIPS +SDO_CS.UPDATE_WKTS_FOR_EPSG_OP +SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM +SDO_CS.UPDATE_WKTS_FOR_EPSG_PM +SDO_CS.UPDATE_WKTS_WITH_HC_PARAMS +SDO_CS.UPDATE_WKT_WITH_7_PARAMS +SDO_CS.VALIDATE_EPSG_MATRIX +SDO_CS.VALIDATE_OP +SDO_CS.VALIDATE_WKT +SDO_CS.VIEWPORT_TRANSFORM +SDO_CSW_PROCESS. +SDO_CSW_PROCESS.DELETECAPABILITIESINFO +SDO_CSW_PROCESS.DELETEDOMAININFO +SDO_CSW_PROCESS.DELETEPLUGINMAP +SDO_CSW_PROCESS.DELETERECORDVIEWMAP +SDO_CSW_PROCESS.DROP_EXPORT_TABLES +SDO_CSW_PROCESS.ENUMERATEARRPATHS +SDO_CSW_PROCESS.EXPANDPATH +SDO_CSW_PROCESS.EXTRACTID +SDO_CSW_PROCESS.EXTRACTSDO +SDO_CSW_PROCESS.FINDNSURL +SDO_CSW_PROCESS.GENERATEALIASSTRING +SDO_CSW_PROCESS.GENERATEPARSEDSPATIALPATH +SDO_CSW_PROCESS.GENIDVALUE +SDO_CSW_PROCESS.GENRECORDTYPEPROCESSINGLOGIC +SDO_CSW_PROCESS.GENSPATIALARRINFO +SDO_CSW_PROCESS.GENSPATIALPATHELEMCOLINDEX +SDO_CSW_PROCESS.GENUPDATESTR +SDO_CSW_PROCESS.GETALIAS +SDO_CSW_PROCESS.GETCOUNT +SDO_CSW_PROCESS.GETPARSEDPATH +SDO_CSW_PROCESS.GETPATH +SDO_CSW_PROCESS.GETPROCESSEDINDEX +SDO_CSW_PROCESS.GETRECORDTYPEID +SDO_CSW_PROCESS.GETUPDATEMAP +SDO_CSW_PROCESS.GRANTMDACCESSTOADMINUSER +SDO_CSW_PROCESS.GRANTMDACCESSTOUSER +SDO_CSW_PROCESS.GRANTRECORDTYPETOUSER +SDO_CSW_PROCESS.INITIALIZE_AFTER_IMPORT +SDO_CSW_PROCESS.INSERTCAPABILITIESINFO +SDO_CSW_PROCESS.INSERTDOMAININFO +SDO_CSW_PROCESS.INSERTPLUGINMAP +SDO_CSW_PROCESS.INSERTRECORDVIEWMAP +SDO_CSW_PROCESS.INSERTRTDATAUPDATED +SDO_CSW_PROCESS.INSERTRTMDUPDATED +SDO_CSW_PROCESS.ISINLIST +SDO_CSW_PROCESS.ISPKCOLIN +SDO_CSW_PROCESS.ISROWIDIN +SDO_CSW_PROCESS.MERGESYSANDUSERDEFINEDGEOMINFO +SDO_CSW_PROCESS.PARSEPATH +SDO_CSW_PROCESS.PARSEPATHELIMTYPEPREFIX +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_ALL +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_RTS +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_RT_INT +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_RT_M_INT +SDO_CSW_PROCESS.PREPARE_FOR_EXPORT_USER +SDO_CSW_PROCESS.PREPROCESSINSERT +SDO_CSW_PROCESS.PREPROCESSUPDATE +SDO_CSW_PROCESS.PROCESSIDPATH +SDO_CSW_PROCESS.PROCESSPATH +SDO_CSW_PROCESS.PUTALIAS +SDO_CSW_PROCESS.REVOKEMDACCESSFROMADMINUSER +SDO_CSW_PROCESS.REVOKEMDACCESSFROMUSER +SDO_CSW_PROCESS.REVOKERECORDTYPEFROMUSER +SDO_CSW_PROCESS.SORTSPCONTENTBYCOLINDEX +SDO_CS_SRS_SRID_INSERT. +SDO_CS_SRS_SRID_UPDATE. +SDO_DROP_USER. +SDO_FEATURE_USAGE_UPDATE. +SDO_GCDR. +SDO_GCDR.BATCH_GEOCODE +SDO_GCDR.CREATE_PROFILE_TABLES +SDO_GCDR.DATA_VERSION +SDO_GCDR.GEOCODE +SDO_GCDR.GEOCODE_ADDR +SDO_GCDR.GEOCODE_ADDR_ALL +SDO_GCDR.GEOCODE_ALL +SDO_GCDR.GEOCODE_AS_GEOMETRY +SDO_GCDR.LIST_COUNTRIES +SDO_GCDR.REVERSE_GEOCODE +SDO_GCDR.VALIDATECITYROW +SDO_GCDR.VALIDATECOUNTRYROW +SDO_GCDR.VALIDATEINLINESTREETTYPEROW +SDO_GCDR.VALIDATELOCALITYDICTROW +SDO_GCDR.VALIDATEPLACENAMEROW +SDO_GCDR.VALIDATEPOBOXROW +SDO_GCDR.VALIDATEREGIONROW +SDO_GCDR.VALIDATESECONDUNITROW +SDO_GCDR.VALIDATESTREETDICTROW +SDO_GCDR.VALIDATESTREETPREFIXROW +SDO_GCDR.VALIDATESTREETSUFFIXROW +SDO_GCDR.VALIDATESTREETTYPEROW +SDO_GEOM. +SDO_GEOM.CHECK_BOUNDS +SDO_GEOM.G3D_PARAMETERS +SDO_GEOM.GET_DIM_ARRAY +SDO_GEOM.GET_ORDS +SDO_GEOM.INIT_ELEMENT +SDO_GEOM.INTERACT +SDO_GEOM.RELATE +SDO_GEOM.SDO_ALPHA_SHAPE +SDO_GEOM.SDO_ARC_DENSIFY +SDO_GEOM.SDO_AREA +SDO_GEOM.SDO_BUFFER +SDO_GEOM.SDO_CENTROID +SDO_GEOM.SDO_CLOSEST_POINTS +SDO_GEOM.SDO_CONCAVEHULL +SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY +SDO_GEOM.SDO_CONVEXHULL +SDO_GEOM.SDO_DIAMETER +SDO_GEOM.SDO_DIAMETER_LINE +SDO_GEOM.SDO_DIFFERENCE +SDO_GEOM.SDO_DISTANCE +SDO_GEOM.SDO_G3DCONV +SDO_GEOM.SDO_INSERT_LOG_FILTER +SDO_GEOM.SDO_INTERSECTION +SDO_GEOM.SDO_IS_NURBSCURVE +SDO_GEOM.SDO_LENGTH +SDO_GEOM.SDO_MAXDISTANCE +SDO_GEOM.SDO_MAXDISTANCE_LINE +SDO_GEOM.SDO_MAX_MBR_ORDINATE +SDO_GEOM.SDO_MBC +SDO_GEOM.SDO_MBC_CENTER +SDO_GEOM.SDO_MBC_RADIUS +SDO_GEOM.SDO_MBR +SDO_GEOM.SDO_MIN_MBR_ORDINATE +SDO_GEOM.SDO_POINTONSURFACE +SDO_GEOM.SDO_POLY_DIFFERENCE +SDO_GEOM.SDO_POLY_INTERSECTION +SDO_GEOM.SDO_POLY_UNION +SDO_GEOM.SDO_POLY_XOR +SDO_GEOM.SDO_SELF_UNION +SDO_GEOM.SDO_TRIANGULATE +SDO_GEOM.SDO_UNION +SDO_GEOM.SDO_VOLUME +SDO_GEOM.SDO_WIDTH +SDO_GEOM.SDO_WIDTH_LINE +SDO_GEOM.SDO_XOR +SDO_GEOM.VALIDATE_GEOMETRY +SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT +SDO_GEOM.VALIDATE_GEOMETRY_WITH_SRID +SDO_GEOM.VALIDATE_LAYER +SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT +SDO_GEOM.VALLAYER_WITH_CONTEXT_LRS +SDO_GEOM.WITHIN_DISTANCE +SDO_GEOMETRY.GET_DIMS +SDO_GEOMETRY.GET_GTYPE +SDO_GEOMETRY.GET_LRS_DIM +SDO_GEOMETRY.GET_WKB +SDO_GEOMETRY.GET_WKT +SDO_GEOMETRY.SDO_GEOMETRY +SDO_GEOMETRY.ST_COORDDIM +SDO_GEOMETRY.ST_ISVALID +SDO_GEOM_METADATA_UPDATE. +SDO_GEOM_TRIG_DEL1. +SDO_GEOM_TRIG_INS1. +SDO_GEOM_TRIG_UPD1. +SDO_GEOR. +SDO_GEOR.ADDNODATA +SDO_GEOR.ADDSOURCEINFO +SDO_GEOR.CALCCOMPRESSIONRATIO +SDO_GEOR.CHANGECELLVALUE +SDO_GEOR.CHANGEFORMAT +SDO_GEOR.CHANGEFORMATCOPY +SDO_GEOR.COPY +SDO_GEOR.CREATEBLANK +SDO_GEOR.CREATETEMPLATE +SDO_GEOR.DELETECONTROLPOINT +SDO_GEOR.DELETENODATA +SDO_GEOR.DELETEPYRAMID +SDO_GEOR.EVALUATEDOUBLE +SDO_GEOR.EXPORTTO +SDO_GEOR.GENERATEBLOCKMBR +SDO_GEOR.GENERATEPYRAMID +SDO_GEOR.GENERATESPATIALEXTENT +SDO_GEOR.GENERATESPATIALRESOLUTIONS +SDO_GEOR.GENERATESTATISTICS +SDO_GEOR.GENERATESTATISTICSMAX +SDO_GEOR.GENERATESTATISTICSMEAN +SDO_GEOR.GENERATESTATISTICSMEDIAN +SDO_GEOR.GENERATESTATISTICSMIN +SDO_GEOR.GENERATESTATISTICSMODE +SDO_GEOR.GENERATESTATISTICSSTD +SDO_GEOR.GEOREFERENCE +SDO_GEOR.GETBANDDIMSIZE +SDO_GEOR.GETBEGINDATETIME +SDO_GEOR.GETBINFUNCTION +SDO_GEOR.GETBINTABLE +SDO_GEOR.GETBINTYPE +SDO_GEOR.GETBITMAPMASK +SDO_GEOR.GETBITMAPMASKSUBSET +SDO_GEOR.GETBITMAPMASKVALUE +SDO_GEOR.GETBLANKCELLVALUE +SDO_GEOR.GETBLOCKINGTYPE +SDO_GEOR.GETBLOCKSIZE +SDO_GEOR.GETCELLCOORDINATE +SDO_GEOR.GETCELLDEPTH +SDO_GEOR.GETCELLVALUE +SDO_GEOR.GETCOLORMAP +SDO_GEOR.GETCOLORMAPTABLE +SDO_GEOR.GETCOMPRESSIONTYPE +SDO_GEOR.GETCONTROLPOINT +SDO_GEOR.GETDEFAULTALPHA +SDO_GEOR.GETDEFAULTBLUE +SDO_GEOR.GETDEFAULTCOLORLAYER +SDO_GEOR.GETDEFAULTGREEN +SDO_GEOR.GETDEFAULTPYRAMIDLEVEL +SDO_GEOR.GETDEFAULTRED +SDO_GEOR.GETENDDATETIME +SDO_GEOR.GETGCPGEOREFMETHOD +SDO_GEOR.GETGCPGEOREFMODEL +SDO_GEOR.GETGEOREFERENCETYPE +SDO_GEOR.GETGRAYSCALE +SDO_GEOR.GETGRAYSCALETABLE +SDO_GEOR.GETHISTOGRAM +SDO_GEOR.GETHISTOGRAMTABLE +SDO_GEOR.GETID +SDO_GEOR.GETINTERLEAVINGTYPE +SDO_GEOR.GETLAYERDIMENSION +SDO_GEOR.GETLAYERID +SDO_GEOR.GETLAYERORDINATE +SDO_GEOR.GETMODELCOORDINATE +SDO_GEOR.GETMODELCOORDLOCATION +SDO_GEOR.GETMODELSRID +SDO_GEOR.GETNODATA +SDO_GEOR.GETPYRAMIDMAXLEVEL +SDO_GEOR.GETPYRAMIDTYPE +SDO_GEOR.GETRASTERBLOCKLOCATOR +SDO_GEOR.GETRASTERBLOCKS +SDO_GEOR.GETRASTERDATA +SDO_GEOR.GETRASTERRANGE +SDO_GEOR.GETRASTERSUBSET +SDO_GEOR.GETSCALING +SDO_GEOR.GETSOURCEINFO +SDO_GEOR.GETSPATIALDIMNUMBER +SDO_GEOR.GETSPATIALDIMSIZES +SDO_GEOR.GETSPATIALRESOLUTIONS +SDO_GEOR.GETSPECTRALRESOLUTION +SDO_GEOR.GETSPECTRALUNIT +SDO_GEOR.GETSRS +SDO_GEOR.GETSTATISTICS +SDO_GEOR.GETTOTALLAYERNUMBER +SDO_GEOR.GETULTCOORDINATE +SDO_GEOR.GETVAT +SDO_GEOR.GETVERSION +SDO_GEOR.HASBITMAPMASK +SDO_GEOR.HASGRAYSCALE +SDO_GEOR.HASNODATAMASK +SDO_GEOR.HASPSEUDOCOLOR +SDO_GEOR.IMPORTFROM +SDO_GEOR.INIT +SDO_GEOR.ISBLANK +SDO_GEOR.ISLOSSLESS +SDO_GEOR.ISORTHORECTIFIED +SDO_GEOR.ISRECTIFIED +SDO_GEOR.ISSPATIALREFERENCED +SDO_GEOR.MASK +SDO_GEOR.MERGELAYERS +SDO_GEOR.MOSAIC +SDO_GEOR.RECTIFY +SDO_GEOR.REPROJECT +SDO_GEOR.SCALE +SDO_GEOR.SCALECOPY +SDO_GEOR.SCHEMAVALIDATE +SDO_GEOR.SETBEGINDATETIME +SDO_GEOR.SETBINFUNCTION +SDO_GEOR.SETBINTABLE +SDO_GEOR.SETBITMAPMASK +SDO_GEOR.SETBLANKCELLVALUE +SDO_GEOR.SETCOLORMAP +SDO_GEOR.SETCOLORMAPTABLE +SDO_GEOR.SETCONTROLPOINT +SDO_GEOR.SETDEFAULTALPHA +SDO_GEOR.SETDEFAULTBLUE +SDO_GEOR.SETDEFAULTCOLORLAYER +SDO_GEOR.SETDEFAULTGREEN +SDO_GEOR.SETDEFAULTPYRAMIDLEVEL +SDO_GEOR.SETDEFAULTRED +SDO_GEOR.SETENDDATETIME +SDO_GEOR.SETGCPGEOREFMETHOD +SDO_GEOR.SETGCPGEOREFMODEL +SDO_GEOR.SETGRAYSCALE +SDO_GEOR.SETGRAYSCALETABLE +SDO_GEOR.SETHISTOGRAMTABLE +SDO_GEOR.SETID +SDO_GEOR.SETLAYERID +SDO_GEOR.SETLAYERORDINATE +SDO_GEOR.SETMODELCOORDLOCATION +SDO_GEOR.SETMODELSRID +SDO_GEOR.SETNODATAMASK +SDO_GEOR.SETORTHORECTIFIED +SDO_GEOR.SETRASTERTYPE +SDO_GEOR.SETRECTIFIED +SDO_GEOR.SETSCALING +SDO_GEOR.SETSOURCEINFO +SDO_GEOR.SETSPATIALREFERENCED +SDO_GEOR.SETSPATIALRESOLUTIONS +SDO_GEOR.SETSPECTRALRESOLUTION +SDO_GEOR.SETSPECTRALUNIT +SDO_GEOR.SETSRS +SDO_GEOR.SETSTATISTICS +SDO_GEOR.SETULTCOORDINATE +SDO_GEOR.SETVAT +SDO_GEOR.SETVERSION +SDO_GEOR.SUBSET +SDO_GEOR.UPDATERASTER +SDO_GEOR.VALIDATEBLOCKMBR +SDO_GEOR.VALIDATEFORMOSAIC +SDO_GEOR.VALIDATEGEORASTER +SDO_GEORX. +SDO_GEORX.ADDNODATA +SDO_GEORX.APPENDSOURCEINFO +SDO_GEORX.CREATEBLANK +SDO_GEORX.DELETEGCP +SDO_GEORX.DELETENODATA +SDO_GEORX.GENERATESPATIALRES +SDO_GEORX.GEOREFERENCE +SDO_GEORX.GETBANDDIMSIZE +SDO_GEORX.GETBEGINDATETIME +SDO_GEORX.GETBINFUNCTION +SDO_GEORX.GETBINTABLE +SDO_GEORX.GETBINTYPE +SDO_GEORX.GETBLANKCELLVALUE +SDO_GEORX.GETBLOCKINGTYPE +SDO_GEORX.GETBLOCKSIZE +SDO_GEORX.GETCELLDEPTH +SDO_GEORX.GETCELLDEPTHTEXT +SDO_GEORX.GETCOLORMAP +SDO_GEORX.GETCOLORMAPTABLE +SDO_GEORX.GETCOMPRESSIONTYPE +SDO_GEORX.GETDEFAULTALPHA +SDO_GEORX.GETDEFAULTBLUE +SDO_GEORX.GETDEFAULTCOLORLAYER +SDO_GEORX.GETDEFAULTGREEN +SDO_GEORX.GETDEFAULTPYRAMIDLEVEL +SDO_GEORX.GETDEFAULTRED +SDO_GEORX.GETENDDATETIME +SDO_GEORX.GETGCP +SDO_GEORX.GETGCPGEOREFMODEL +SDO_GEORX.GETGRAYSCALE +SDO_GEORX.GETGRAYSCALETABLE +SDO_GEORX.GETHISTOGRAM +SDO_GEORX.GETHISTOGRAMTABLE +SDO_GEORX.GETID +SDO_GEORX.GETINTERLEAVING +SDO_GEORX.GETLAYERID +SDO_GEORX.GETLAYERORDINATE +SDO_GEORX.GETMAJORVERSION +SDO_GEORX.GETMINORVERSION +SDO_GEORX.GETMODELSRID +SDO_GEORX.GETNODATA +SDO_GEORX.GETPYRAMIDMAXLEVEL +SDO_GEORX.GETPYRAMIDTYPE +SDO_GEORX.GETSCALING +SDO_GEORX.GETSOURCEINFO +SDO_GEORX.GETSPATIALDIMSIZES +SDO_GEORX.GETSPATIALRESOLUTIONS +SDO_GEORX.GETSPECTRALRESOLUTION +SDO_GEORX.GETSPECTRALUNIT +SDO_GEORX.GETSRS +SDO_GEORX.GETSTATISTICS +SDO_GEORX.GETTOTALLAYERNUMBER +SDO_GEORX.GETULTCOORDINATE +SDO_GEORX.GETVAT +SDO_GEORX.HASGRAYSCALE +SDO_GEORX.HASPSEUDOCOLOR +SDO_GEORX.ISBLANK +SDO_GEORX.ISORTHORECTIFIED +SDO_GEORX.ISRECTIFIED +SDO_GEORX.ISSPATIALREFERENCED +SDO_GEORX.SCHEMAVALIDATE +SDO_GEORX.SETBEGINDATETIME +SDO_GEORX.SETBINFUNCTION +SDO_GEORX.SETBINTABLE +SDO_GEORX.SETBLANKCELLVALUE +SDO_GEORX.SETCOLORMAP +SDO_GEORX.SETCOLORMAPTABLE +SDO_GEORX.SETCONTROLPOINT +SDO_GEORX.SETDEFAULTALPHA +SDO_GEORX.SETDEFAULTBLUE +SDO_GEORX.SETDEFAULTCOLORLAYER +SDO_GEORX.SETDEFAULTGREEN +SDO_GEORX.SETDEFAULTPYRAMIDLEVEL +SDO_GEORX.SETDEFAULTRED +SDO_GEORX.SETENDDATETIME +SDO_GEORX.SETGCP +SDO_GEORX.SETGCPGEOREFMODEL +SDO_GEORX.SETGRAYSCALE +SDO_GEORX.SETGRAYSCALETABLE +SDO_GEORX.SETHISTOGRAMTABLE +SDO_GEORX.SETID +SDO_GEORX.SETLAYERID +SDO_GEORX.SETLAYERORDINATE +SDO_GEORX.SETMODELCOORDLOCATION +SDO_GEORX.SETMODELSRID +SDO_GEORX.SETNODATAMASK +SDO_GEORX.SETORTHORECTIFIED +SDO_GEORX.SETRASTERTYPE +SDO_GEORX.SETRECTIFIED +SDO_GEORX.SETSCALING +SDO_GEORX.SETSOURCEINFO +SDO_GEORX.SETSPATIALREFERENCED +SDO_GEORX.SETSPATIALRESOLUTIONS +SDO_GEORX.SETSPECTRALRESOLUTION +SDO_GEORX.SETSPECTRALUNIT +SDO_GEORX.SETSRS +SDO_GEORX.SETSTATISTICS +SDO_GEORX.SETVAT +SDO_GEORX.SETVERSION +SDO_GEOR_ADDL_TRIGGER. +SDO_GEOR_ADMIN. +SDO_GEOR_ADMIN.CHECKSYSDATAENTRIES +SDO_GEOR_ADMIN.CREATEDMLTRIGGER +SDO_GEOR_ADMIN.GETUNIQUERDTNAME +SDO_GEOR_ADMIN.ISRDTNAMEUNIQUE +SDO_GEOR_ADMIN.ISUPGRADENEEDED +SDO_GEOR_ADMIN.LISTDANGLINGRASTERDATA +SDO_GEOR_ADMIN.LISTGEORASTERCOLUMNS +SDO_GEOR_ADMIN.LISTGEORASTEROBJECTS +SDO_GEOR_ADMIN.LISTGEORASTERTABLES +SDO_GEOR_ADMIN.LISTRDT +SDO_GEOR_ADMIN.LISTREGISTEREDRDT +SDO_GEOR_ADMIN.LISTUNREGISTEREDRDT +SDO_GEOR_ADMIN.MAINTAINSYSDATAENTRIES +SDO_GEOR_ADMIN.REGISTERGEORASTERCOLUMNS +SDO_GEOR_ADMIN.REGISTERGEORASTEROBJECTS +SDO_GEOR_ADMIN.UPGRADEGEORASTER +SDO_GEOR_AGGR. +SDO_GEOR_AGGR.APPEND +SDO_GEOR_AGGR.GETMOSAICEXTENT +SDO_GEOR_AGGR.GETMOSAICRESOLUTIONS +SDO_GEOR_AGGR.GETMOSAICSUBSET +SDO_GEOR_AGGR.MOSAICSUBSET +SDO_GEOR_AGGR.VALIDATEFORMOSAICSUBSET +SDO_GEOR_AUX. +SDO_GEOR_AUX.AFTERDELETE +SDO_GEOR_AUX.AFTERINSERT +SDO_GEOR_AUX.AFTERUPDATE +SDO_GEOR_AUX.CLASSIFYP +SDO_GEOR_AUX.COMPRESSDATA +SDO_GEOR_AUX.COMPRESSDATAWITHCRATIO +SDO_GEOR_AUX.DECOMPRESSDATA +SDO_GEOR_AUX.DECOMPRESSDATAWITHCRATIO +SDO_GEOR_AUX.FINDCELLSP +SDO_GEOR_AUX.GENERATEPYRAMIDP +SDO_GEOR_AUX.MATHOPP +SDO_GEOR_AUX.MOSAICSUBSETP1 +SDO_GEOR_AUX.MOSAICSUBSETP2 +SDO_GEOR_AUX.RAISEERROR +SDO_GEOR_AUX.RAISEERRORWITHMSG +SDO_GEOR_AUX.RASTERMATHOPP +SDO_GEOR_AUX.RASTERUPDATEP +SDO_GEOR_AUX.SETSTATUS +SDO_GEOR_BDDL_TRIGGER. +SDO_GEOR_DEF. +SDO_GEOR_DEF.CHECKSYSDATAENTRIES +SDO_GEOR_DEF.DELETEGRTMETAENTRY +SDO_GEOR_DEF.DELETEMETAENTRY +SDO_GEOR_DEF.DELETERDTMETAENTRY +SDO_GEOR_DEF.DELETETINPCMETAENTRY +SDO_GEOR_DEF.DELETETINSEQMETAENTRY +SDO_GEOR_DEF.DELETEUSERDATA +SDO_GEOR_DEF.DISABLEFLAG +SDO_GEOR_DEF.DOALTERDROPCOLUMN +SDO_GEOR_DEF.DOALTERRENAMETABLE +SDO_GEOR_DEF.DODROPUSERANDTABLE +SDO_GEOR_DEF.DORENAMETABLE +SDO_GEOR_DEF.DOTRUNCATETABLE +SDO_GEOR_DEF.ENABLEFLAG +SDO_GEOR_DEF.GETSQLTEXT +SDO_GEOR_DEF.GETUNIQUERDTNAME +SDO_GEOR_DEF.INSERTMETAENTRY +SDO_GEOR_DEF.INSERTUSERSYSENTRY +SDO_GEOR_DEF.ISDROPCOLUMN +SDO_GEOR_DEF.ISRDTNAMEUNIQUE +SDO_GEOR_DEF.ISVALIDENTRY +SDO_GEOR_DEF.LISTALLGEORASTERFIELDS +SDO_GEOR_DEF.LISTALLGEORASTERFIELDSSTR +SDO_GEOR_DEF.LISTALLRDT +SDO_GEOR_DEF.MAINTAINSYSDATAENTRIES +SDO_GEOR_GCP.SDO_GEOR_GCP +SDO_GEOR_GCPGEOREFTYPE.SDO_GEOR_GCPGEOREFTYPE +SDO_GEOR_INT. +SDO_GEOR_INT.AFTERDELETE +SDO_GEOR_INT.AFTERINSERT +SDO_GEOR_INT.AFTERUPDATE +SDO_GEOR_INT.APPEND +SDO_GEOR_INT.CALCCOMPRESSIONRATIO +SDO_GEOR_INT.CALCOPTIMIZEDBLOCKSIZE +SDO_GEOR_INT.CALCRASTERNOMINALSIZE +SDO_GEOR_INT.CALCRASTERSTORAGESIZE +SDO_GEOR_INT.CALMOSAICEXTENT +SDO_GEOR_INT.CHANGECELLVALUE +SDO_GEOR_INT.CHANGEFORMAT +SDO_GEOR_INT.CHANGEFORMATCOPY +SDO_GEOR_INT.CHECK_PARAM +SDO_GEOR_INT.CHECK_RDTNAME +SDO_GEOR_INT.CLASSIFY +SDO_GEOR_INT.CLASSIFYP +SDO_GEOR_INT.COMPRESSDATA +SDO_GEOR_INT.COMPRESSDATAWITHCRATIO +SDO_GEOR_INT.CONVERTCELLCOORDINATE +SDO_GEOR_INT.CREATETEMPLATE +SDO_GEOR_INT.DECOMPRESSDATA +SDO_GEOR_INT.DECOMPRESSDATAWITHCRATIO +SDO_GEOR_INT.DELETEMETAENTRY +SDO_GEOR_INT.DELETEPYRAMID +SDO_GEOR_INT.EMPTYBLOCKS +SDO_GEOR_INT.EVALUATE +SDO_GEOR_INT.EXPORTTO +SDO_GEOR_INT.FINDCELLS +SDO_GEOR_INT.FINDCELLSP +SDO_GEOR_INT.FINDCELLSPUNIT +SDO_GEOR_INT.GENERATEBLOCKMBR +SDO_GEOR_INT.GENERATEPYRAMID +SDO_GEOR_INT.GENERATEPYRAMIDP0 +SDO_GEOR_INT.GENERATEQUERIES +SDO_GEOR_INT.GENERATESPATIALEXTENT +SDO_GEOR_INT.GENERATESTATISTICS +SDO_GEOR_INT.GENERATESTATISTICSMAX +SDO_GEOR_INT.GENERATESTATISTICSMEDIAN +SDO_GEOR_INT.GEOREFERENCE +SDO_GEOR_INT.GETATTRNO +SDO_GEOR_INT.GETBITMAPMASK +SDO_GEOR_INT.GETCELLCOORDINATE +SDO_GEOR_INT.GETCELLCOORDINATE2 +SDO_GEOR_INT.GETCELLVALUE +SDO_GEOR_INT.GETENQUOTEDSQLNAME +SDO_GEOR_INT.GETMODELCOORDINATE +SDO_GEOR_INT.GETMOSAICRESOLUTIONS +SDO_GEOR_INT.GETMOSAICSUBSET +SDO_GEOR_INT.GETPARALLELDEGREE +SDO_GEOR_INT.GETRASTERBLOCKLOCATOR +SDO_GEOR_INT.GETRASTERRANGE +SDO_GEOR_INT.GETRASTERSUBSET +SDO_GEOR_INT.HASBITMAPMASK +SDO_GEOR_INT.IMPORTFROM +SDO_GEOR_INT.INSERTUSERSYSENTRY +SDO_GEOR_INT.ISGEORASTERCOLUMN +SDO_GEOR_INT.ISOVERLAP +SDO_GEOR_INT.ISVALIDRDT +SDO_GEOR_INT.MASK +SDO_GEOR_INT.MATHOP +SDO_GEOR_INT.MATHOPP +SDO_GEOR_INT.MERGELAYERS +SDO_GEOR_INT.MOSAIC +SDO_GEOR_INT.MOSAICK +SDO_GEOR_INT.MOSAICSUBSET +SDO_GEOR_INT.MOSAICSUBSETP0 +SDO_GEOR_INT.PREPARERDT +SDO_GEOR_INT.PREPARERDT1 +SDO_GEOR_INT.RASTERDATATABLEEXISTS +SDO_GEOR_INT.RASTERIZEPOLYGON +SDO_GEOR_INT.RASTERIZEPOLYGON0 +SDO_GEOR_INT.RASTERMATHOP +SDO_GEOR_INT.RASTERMATHOPP +SDO_GEOR_INT.RASTERUPDATE +SDO_GEOR_INT.RASTERUPDATEP +SDO_GEOR_INT.RECTIFY +SDO_GEOR_INT.REMOVEQUOTE0 +SDO_GEOR_INT.REPROJECT +SDO_GEOR_INT.SCALE +SDO_GEOR_INT.SCALECOPY +SDO_GEOR_INT.SETBITMAPMASK +SDO_GEOR_INT.SETSTATUS +SDO_GEOR_INT.SETULTCOORDINATE +SDO_GEOR_INT.SUBSET +SDO_GEOR_INT.TABLEEXISTS +SDO_GEOR_INT.TOAUXTABLE +SDO_GEOR_INT.TOGEORASTERARRAY +SDO_GEOR_INT.UPDATERASTER +SDO_GEOR_INT.VALIDATEBLOCKMBR +SDO_GEOR_INT.VALIDATEFORMOSAICSUBSET +SDO_GEOR_INT.VALIDATE_GEORASTER +SDO_GEOR_RA. +SDO_GEOR_RA.CLASSIFY +SDO_GEOR_RA.FINDCELLS +SDO_GEOR_RA.ISOVERLAP +SDO_GEOR_RA.RASTERMATHOP +SDO_GEOR_RA.RASTERUPDATE +SDO_GEOR_SRS.SDO_GEOR_SRS +SDO_GEOR_TRIG_DEL1. +SDO_GEOR_TRIG_INS1. +SDO_GEOR_TRIG_UPD1. +SDO_GEOR_UTL. +SDO_GEOR_UTL.CALCOPTIMIZEDBLOCKSIZE +SDO_GEOR_UTL.CALCRASTERNOMINALSIZE +SDO_GEOR_UTL.CALCRASTERSTORAGESIZE +SDO_GEOR_UTL.CLEARREPORTTABLE +SDO_GEOR_UTL.CREATEDMLTRIGGER +SDO_GEOR_UTL.CREATEREPORTTABLE +SDO_GEOR_UTL.DISABLEREPORT +SDO_GEOR_UTL.DROPREPORTTABLE +SDO_GEOR_UTL.EMPTYBLOCKS +SDO_GEOR_UTL.ENABLEREPORT +SDO_GEOR_UTL.FILLEMPTYBLOCKS +SDO_GEOR_UTL.GETALLSTATUSREPORT +SDO_GEOR_UTL.GETPROGRESS +SDO_GEOR_UTL.GETSTATUSREPORT +SDO_GEOR_UTL.ISREPORTING +SDO_GEOR_UTL.MAKERDTNAMESUNIQUE +SDO_GEOR_UTL.RECREATEDMLTRIGGERS +SDO_GEOR_UTL.RENAMERDT +SDO_GEOR_UTL.SETCLIENTID +SDO_GEOR_UTL.SETSEQID +SDO_GEO_ADDR.SDO_GEO_ADDR +SDO_GET_ITYP_NAME. +SDO_GET_TAB_PART. +SDO_IDX. +SDO_IDX.CMT_IDX_CHNGS +SDO_IDX.ENDIANCONVERT +SDO_IDX.IE_CRT_GEOM_METADATA +SDO_IDX.PROCESS_PARAMS +SDO_IDX.TTS_INDEX_INITIALIZE +SDO_INDEX_METADATA_UPDATE. +SDO_INDEX_METHOD_10I.EXECUTE_INDEX_PTN_DROP +SDO_INDEX_METHOD_10I.INDEX_UPDATE +SDO_INDEX_METHOD_10I.INSERT_DELETE +SDO_INDEX_METHOD_10I.ODCIGETINTERFACES +SDO_INDEX_METHOD_10I.ODCIINDEXALTER +SDO_INDEX_METHOD_10I.ODCIINDEXCLOSE +SDO_INDEX_METHOD_10I.ODCIINDEXCOALESCEPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXCREATE +SDO_INDEX_METHOD_10I.ODCIINDEXDELETE +SDO_INDEX_METHOD_10I.ODCIINDEXDROP +SDO_INDEX_METHOD_10I.ODCIINDEXEXCHANGEPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXFETCH +SDO_INDEX_METHOD_10I.ODCIINDEXGETMETADATA +SDO_INDEX_METHOD_10I.ODCIINDEXINSERT +SDO_INDEX_METHOD_10I.ODCIINDEXMERGEPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXREWRITE +SDO_INDEX_METHOD_10I.ODCIINDEXSPLITPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXSTART +SDO_INDEX_METHOD_10I.ODCIINDEXTRUNCATE +SDO_INDEX_METHOD_10I.ODCIINDEXUPDATE +SDO_INDEX_METHOD_10I.ODCIINDEXUTILCLEANUP +SDO_INDEX_METHOD_10I.ODCIINDEXUTILGETTABLENAMES +SDO_JAVA_STP. +SDO_JAVA_STP.AFFINETRANSFORMS +SDO_JAVA_STP.ANYINTERACT3D +SDO_JAVA_STP.AREA3D +SDO_JAVA_STP.CENTROID3D +SDO_JAVA_STP.CLIP_GEOM_SEGMENT_GEO3D +SDO_JAVA_STP.CLOSESTPOINTS3D +SDO_JAVA_STP.DISTANCE3D +SDO_JAVA_STP.EXPANDG3DGEOMS +SDO_JAVA_STP.EXTRACT3D +SDO_JAVA_STP.FIND_CONNECTED_COMPONENTS_JAVA +SDO_JAVA_STP.FIND_CONN_COMP_PART_JAVA +SDO_JAVA_STP.FROM_GML311GEOMETRY +SDO_JAVA_STP.FROM_GMLGEOMETRY +SDO_JAVA_STP.FROM_KMLGEOMETRY +SDO_JAVA_STP.FROM_WKBGEOMETRY +SDO_JAVA_STP.FROM_WKTGEOMETRY +SDO_JAVA_STP.GENERATE_BUFFER +SDO_JAVA_STP.GENERATE_PARTITION_BLOBS_JAVA +SDO_JAVA_STP.GENERATE_PARTITION_BLOBS_JAVA2 +SDO_JAVA_STP.GENERATE_PARTITION_BLOB_JAVA +SDO_JAVA_STP.GETLABELBYELEMENT +SDO_JAVA_STP.GET_PARTITION_SIZE_JAVA +SDO_JAVA_STP.INSIDE3D +SDO_JAVA_STP.INTERNAL_GETNURBSAPPROX +SDO_JAVA_STP.INTERNAL_SIMPLIFYVW +SDO_JAVA_STP.INTL_EXTRUDE +SDO_JAVA_STP.INTL_TO_WKBGEOMETRY +SDO_JAVA_STP.INTL_TO_WKTGEOMETRY +SDO_JAVA_STP.INTL_TO_WKTGEOMETRY_VARCHAR +SDO_JAVA_STP.LENGTH3D +SDO_JAVA_STP.LENGTH_GEO3D +SDO_JAVA_STP.LOAD_CONFIG_JAVA +SDO_JAVA_STP.LOCATE_PT_GEO3D +SDO_JAVA_STP.PCTRCLIP +SDO_JAVA_STP.POPULATE_MEASURE_GEO3D +SDO_JAVA_STP.PROJECT_PT_GEO3D +SDO_JAVA_STP.RING_UNION_APPROX +SDO_JAVA_STP.SET_LOGGING_LEVEL_JAVA +SDO_JAVA_STP.SET_MAX_JAVA_HEAP_SIZE +SDO_JAVA_STP.TO_GML311GEOMETRY +SDO_JAVA_STP.TO_GML321GEOMETRY +SDO_JAVA_STP.TO_GMLGEOMETRY +SDO_JAVA_STP.TO_KMLGEOMETRY +SDO_JAVA_STP.VALIDATEGEOM3D +SDO_JAVA_STP.VALIDATE_LAYER_WITH_CONTEXT3D +SDO_JAVA_STP.VALIDATE_WKBGEOMETRY +SDO_JAVA_STP.VALIDATE_WKTGEOMETRY +SDO_JAVA_STP.VOLUME3D +SDO_JOIN. +SDO_LINK_I.GET_CHILD_LINKS +SDO_LINK_I.GET_CHILD_LINKS_S +SDO_LINK_I.GET_COST +SDO_LINK_I.GET_COST_S +SDO_LINK_I.GET_CO_LINK_IDS +SDO_LINK_I.GET_CO_LINK_IDS_S +SDO_LINK_I.GET_END_MEASURE +SDO_LINK_I.GET_END_MEASURE_S +SDO_LINK_I.GET_END_NODE_ID +SDO_LINK_I.GET_END_NODE_ID_S +SDO_LINK_I.GET_GEOMETRY +SDO_LINK_I.GET_GEOMETRY_S +SDO_LINK_I.GET_GEOM_ID +SDO_LINK_I.GET_GEOM_ID_S +SDO_LINK_I.GET_LEVEL +SDO_LINK_I.GET_LEVEL_S +SDO_LINK_I.GET_NAME +SDO_LINK_I.GET_NAME_S +SDO_LINK_I.GET_PARENT_LINK_ID +SDO_LINK_I.GET_PARENT_LINK_ID_S +SDO_LINK_I.GET_SIBLING_LINK_IDS +SDO_LINK_I.GET_SIBLING_LINK_IDS_S +SDO_LINK_I.GET_START_MEASURE +SDO_LINK_I.GET_START_MEASURE_S +SDO_LINK_I.GET_START_NODE_ID +SDO_LINK_I.GET_START_NODE_ID_S +SDO_LINK_I.GET_STATE +SDO_LINK_I.GET_STATE_S +SDO_LINK_I.GET_TYPE +SDO_LINK_I.GET_TYPE_S +SDO_LINK_I.IS_ACTIVE +SDO_LINK_I.IS_ACTIVE_S +SDO_LINK_I.IS_LOGICAL +SDO_LINK_I.IS_LOGICAL_S +SDO_LINK_I.IS_TEMPORARY +SDO_LINK_I.IS_TEMPORARY_S +SDO_LINK_I.MAKE_TEMPORARY +SDO_LINK_I.MAKE_TEMPORARY_S +SDO_LINK_I.SET_COST +SDO_LINK_I.SET_COST_S +SDO_LINK_I.SET_END_NODE +SDO_LINK_I.SET_END_NODE_S +SDO_LINK_I.SET_GEOMETRY +SDO_LINK_I.SET_GEOMETRY_S +SDO_LINK_I.SET_GEOM_ID +SDO_LINK_I.SET_GEOM_ID_S +SDO_LINK_I.SET_LEVEL +SDO_LINK_I.SET_LEVEL_S +SDO_LINK_I.SET_MEASURE +SDO_LINK_I.SET_MEASURE_S +SDO_LINK_I.SET_NAME +SDO_LINK_I.SET_NAME_S +SDO_LINK_I.SET_PARENT_LINK +SDO_LINK_I.SET_PARENT_LINK_S +SDO_LINK_I.SET_START_NODE +SDO_LINK_I.SET_START_NODE_S +SDO_LINK_I.SET_STATE +SDO_LINK_I.SET_STATE_S +SDO_LINK_I.SET_TYPE +SDO_LINK_I.SET_TYPE_S +SDO_LINK_T.GET_CHILD_LINKS +SDO_LINK_T.GET_COST +SDO_LINK_T.GET_CO_LINK_IDS +SDO_LINK_T.GET_END_MEASURE +SDO_LINK_T.GET_END_NODE_ID +SDO_LINK_T.GET_GEOMETRY +SDO_LINK_T.GET_GEOM_ID +SDO_LINK_T.GET_LEVEL +SDO_LINK_T.GET_NAME +SDO_LINK_T.GET_PARENT_LINK_ID +SDO_LINK_T.GET_SIBLING_LINK_IDS +SDO_LINK_T.GET_START_MEASURE +SDO_LINK_T.GET_START_NODE_ID +SDO_LINK_T.GET_STATE +SDO_LINK_T.GET_TYPE +SDO_LINK_T.IS_ACTIVE +SDO_LINK_T.IS_LOGICAL +SDO_LINK_T.IS_TEMPORARY +SDO_LINK_T.MAKE_TEMPORARY +SDO_LINK_T.SET_COST +SDO_LINK_T.SET_END_NODE +SDO_LINK_T.SET_GEOMETRY +SDO_LINK_T.SET_GEOM_ID +SDO_LINK_T.SET_LEVEL +SDO_LINK_T.SET_MEASURE +SDO_LINK_T.SET_NAME +SDO_LINK_T.SET_PARENT_LINK +SDO_LINK_T.SET_START_NODE +SDO_LINK_T.SET_STATE +SDO_LINK_T.SET_TYPE +SDO_LRS. +SDO_LRS.CLIP_GEOM_SEGMENT +SDO_LRS.CLIP_GEOM_SEGMENT_3D +SDO_LRS.CONCATENATE_GEOM_SEGMENTS +SDO_LRS.CONCATENATE_GEOM_SEGMENTS_3D +SDO_LRS.CONNECTED_GEOM_SEGMENTS +SDO_LRS.CONNECTED_GEOM_SEGMENTS_3D +SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY +SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY_3D +SDO_LRS.CONVERT_TO_LRS_GEOM +SDO_LRS.CONVERT_TO_LRS_GEOM_3D +SDO_LRS.CONVERT_TO_LRS_LAYER +SDO_LRS.CONVERT_TO_LRS_LAYER_3D +SDO_LRS.CONVERT_TO_STD_DIM_ARRAY +SDO_LRS.CONVERT_TO_STD_DIM_ARRAY_3D +SDO_LRS.CONVERT_TO_STD_GEOM +SDO_LRS.CONVERT_TO_STD_GEOM_3D +SDO_LRS.CONVERT_TO_STD_LAYER +SDO_LRS.CONVERT_TO_STD_LAYER_3D +SDO_LRS.DEFINE_GEOM_SEGMENT +SDO_LRS.DEFINE_GEOM_SEGMENT_3D +SDO_LRS.DYNAMIC_SEGMENT +SDO_LRS.DYNAMIC_SEGMENT_3D +SDO_LRS.FIND_LRS_DIM_POS +SDO_LRS.FIND_MEASURE +SDO_LRS.FIND_MEASURE_3D +SDO_LRS.FIND_OFFSET +SDO_LRS.GEOM_SEGMENT_END_MEASURE +SDO_LRS.GEOM_SEGMENT_END_MEASURE_3D +SDO_LRS.GEOM_SEGMENT_END_PT +SDO_LRS.GEOM_SEGMENT_END_PT_3D +SDO_LRS.GEOM_SEGMENT_LENGTH +SDO_LRS.GEOM_SEGMENT_LENGTH_3D +SDO_LRS.GEOM_SEGMENT_START_MEASURE +SDO_LRS.GEOM_SEGMENT_START_MEASURE_3D +SDO_LRS.GEOM_SEGMENT_START_PT +SDO_LRS.GEOM_SEGMENT_START_PT_3D +SDO_LRS.GET_MEASURE +SDO_LRS.GET_MEASURE_3D +SDO_LRS.GET_NEXT_SHAPE_PT +SDO_LRS.GET_NEXT_SHAPE_PT_3D +SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE +SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE_3D +SDO_LRS.GET_PREV_SHAPE_PT +SDO_LRS.GET_PREV_SHAPE_PT_3D +SDO_LRS.GET_PREV_SHAPE_PT_MEASURE +SDO_LRS.GET_PREV_SHAPE_PT_MEASURE_3D +SDO_LRS.IS_GEOM_SEGMENT_DEFINED +SDO_LRS.IS_GEOM_SEGMENT_DEFINED_3D +SDO_LRS.IS_MEASURE_DECREASING +SDO_LRS.IS_MEASURE_DECREASING_3D +SDO_LRS.IS_MEASURE_INCREASING +SDO_LRS.IS_MEASURE_INCREASING_3D +SDO_LRS.IS_SHAPE_PT_MEASURE +SDO_LRS.IS_SHAPE_PT_MEASURE_3D +SDO_LRS.LOCATE_PT +SDO_LRS.LOCATE_PT_3D +SDO_LRS.LRS_INTERSECTION +SDO_LRS.MEASURE_RANGE +SDO_LRS.MEASURE_RANGE_3D +SDO_LRS.MEASURE_TO_PERCENTAGE +SDO_LRS.OFFSET_GEOM_SEGMENT +SDO_LRS.PERCENTAGE_TO_MEASURE +SDO_LRS.PROJECT_PT +SDO_LRS.PROJECT_PT_3D +SDO_LRS.REDEFINE_GEOM_SEGMENT +SDO_LRS.REDEFINE_GEOM_SEGMENT_3D +SDO_LRS.RESET_MEASURE +SDO_LRS.REVERSE_GEOMETRY +SDO_LRS.REVERSE_MEASURE +SDO_LRS.REVERSE_MEASURE_3D +SDO_LRS.SCALE_GEOM_SEGMENT +SDO_LRS.SET_PT_MEASURE +SDO_LRS.SET_PT_MEASURE_3D +SDO_LRS.SPLIT_GEOM_SEGMENT +SDO_LRS.SPLIT_GEOM_SEGMENT_3D +SDO_LRS.TRANSLATE_MEASURE +SDO_LRS.TRANSLATE_MEASURE_3D +SDO_LRS.VALIDATE_LRS_GEOMETRY +SDO_LRS.VALIDATE_LRS_GEOMETRY_3D +SDO_LRS.VALID_GEOM_SEGMENT +SDO_LRS.VALID_GEOM_SEGMENT_3D +SDO_LRS.VALID_LRS_PT +SDO_LRS.VALID_LRS_PT_3D +SDO_LRS.VALID_MEASURE +SDO_LRS.VALID_MEASURE_3D +SDO_LRS_TRIG_DEL. +SDO_LRS_TRIG_INS. +SDO_LRS_TRIG_UPD. +SDO_META. +SDO_META.CHANGE_ALL_SDO_GEOM_METADATA +SDO_META.DELETE_ALL_SDO_GEOM_METADATA +SDO_META.INSERT_ALL_SDO_GEOM_METADATA +SDO_MIGRATE. +SDO_MIGRATE.FROM_815_TO_81X +SDO_MIGRATE.OGIS_METADATA_FROM +SDO_MIGRATE.OGIS_METADATA_TO +SDO_MIGRATE.TO_81X +SDO_MIGRATE.TO_CURRENT +SDO_NET. +SDO_NET.ADD_CHILD_FEATURE +SDO_NET.ADD_CHILD_FEATURES +SDO_NET.ADD_FEATURE +SDO_NET.ADD_FEATURE_ELEMENT +SDO_NET.ADD_FEATURE_ELEMENTS +SDO_NET.ADD_FEATURE_LAYER +SDO_NET.COMPUTE_PATH_GEOMETRY +SDO_NET.COPY_NETWORK +SDO_NET.CREATE_COMPONENT_TABLE +SDO_NET.CREATE_DELETE_TRIGGER +SDO_NET.CREATE_LINK_TABLE +SDO_NET.CREATE_LOGICAL_NETWORK +SDO_NET.CREATE_LRS_NETWORK +SDO_NET.CREATE_LRS_TABLE +SDO_NET.CREATE_NETWORK +SDO_NET.CREATE_NODE_TABLE +SDO_NET.CREATE_PARTITION_BLOB_TABLE +SDO_NET.CREATE_PARTITION_TABLE +SDO_NET.CREATE_PATH_LINK_TABLE +SDO_NET.CREATE_PATH_TABLE +SDO_NET.CREATE_REF_CONSTRAINTS +SDO_NET.CREATE_SDO_NETWORK +SDO_NET.CREATE_SUBPATH_TABLE +SDO_NET.CREATE_TOPO_NETWORK +SDO_NET.DB_SYNC_CLEAR +SDO_NET.DB_SYNC_DISABLE +SDO_NET.DB_SYNC_ENABLE +SDO_NET.DB_SYNC_GET_UPDATE +SDO_NET.DELETE_CHILD_FEATURES +SDO_NET.DELETE_CHILD_FEATURES_AT +SDO_NET.DELETE_DANGLING_FEATURES +SDO_NET.DELETE_DANGLING_LINKS +SDO_NET.DELETE_DANGLING_NODES +SDO_NET.DELETE_FEATURES +SDO_NET.DELETE_FEATURE_ELEMENTS +SDO_NET.DELETE_FEATURE_ELEMENTS_AT +SDO_NET.DELETE_LINK +SDO_NET.DELETE_NODE +SDO_NET.DELETE_PATH +SDO_NET.DELETE_PHANTOM_FEATURES +SDO_NET.DELETE_SUBPATH +SDO_NET.DEREGISTER_CONSTRAINT +SDO_NET.DEREGISTER_JAVA_OBJECT +SDO_NET.DISABLE_REF_CONSTRAINTS +SDO_NET.DROP_FEATURE_LAYER +SDO_NET.DROP_NETWORK +SDO_NET.DROP_REF_CONSTRAINTS +SDO_NET.ENABLE_REF_CONSTRAINTS +SDO_NET.FIND_CONNECTED_COMPONENTS +SDO_NET.GENERATE_NODE_LEVELS +SDO_NET.GENERATE_PARENT_LINK_TABLE +SDO_NET.GENERATE_PARTITION_BLOB +SDO_NET.GENERATE_PARTITION_BLOBS +SDO_NET.GET_BUFFER_COST +SDO_NET.GET_CHILD_FEATURE_IDS +SDO_NET.GET_CHILD_LINKS +SDO_NET.GET_CHILD_NODES +SDO_NET.GET_DANGLING_FEATURES +SDO_NET.GET_DANGLING_LINKS +SDO_NET.GET_DANGLING_NODES +SDO_NET.GET_FEATURES_ON_LINKS +SDO_NET.GET_FEATURES_ON_NODES +SDO_NET.GET_FEATURE_ELEMENTS +SDO_NET.GET_FEATURE_LAYER_ID +SDO_NET.GET_GEOMETRY +SDO_NET.GET_GEOMETRY_TYPE +SDO_NET.GET_INVALID_LINKS +SDO_NET.GET_INVALID_NODES +SDO_NET.GET_INVALID_PATHS +SDO_NET.GET_IN_LINKS +SDO_NET.GET_ISOLATED_NODES +SDO_NET.GET_LINKS_IN_CHILD_NETWORK +SDO_NET.GET_LINKS_IN_PATH +SDO_NET.GET_LINK_COST_COLUMN +SDO_NET.GET_LINK_DIRECTION +SDO_NET.GET_LINK_GEOMETRY +SDO_NET.GET_LINK_GEOM_COLUMN +SDO_NET.GET_LINK_PARTITION_COLUMN +SDO_NET.GET_LINK_TABLE_NAME +SDO_NET.GET_LOGGING_LEVEL +SDO_NET.GET_LRS_GEOM_COLUMN +SDO_NET.GET_LRS_LINK_GEOMETRY +SDO_NET.GET_LRS_NODE_GEOMETRY +SDO_NET.GET_LRS_TABLE_NAME +SDO_NET.GET_NETWORK_CATEGORY +SDO_NET.GET_NETWORK_ID +SDO_NET.GET_NETWORK_NAME +SDO_NET.GET_NETWORK_OWNER +SDO_NET.GET_NETWORK_TYPE +SDO_NET.GET_NODES_IN_CHILD_NETWORK +SDO_NET.GET_NODES_IN_PATH +SDO_NET.GET_NODE_COST_COLUMN +SDO_NET.GET_NODE_DEGREE +SDO_NET.GET_NODE_GEOMETRY +SDO_NET.GET_NODE_GEOM_COLUMN +SDO_NET.GET_NODE_HIERARCHY_LEVEL +SDO_NET.GET_NODE_IN_DEGREE +SDO_NET.GET_NODE_OUT_DEGREE +SDO_NET.GET_NODE_PARTITION_COLUMN +SDO_NET.GET_NODE_TABLE_NAME +SDO_NET.GET_NO_OF_HIERARCHY_LEVELS +SDO_NET.GET_NO_OF_LINKS +SDO_NET.GET_NO_OF_LINKS_IN_PATH +SDO_NET.GET_NO_OF_NODES +SDO_NET.GET_NO_OF_NODES_IN_PATH +SDO_NET.GET_NO_OF_PARTITIONS +SDO_NET.GET_OUT_LINKS +SDO_NET.GET_PARENT_FEATURE_IDS +SDO_NET.GET_PARTITION_BLOB_TABLE_NAME +SDO_NET.GET_PARTITION_SIZE +SDO_NET.GET_PARTITION_TABLE_NAME +SDO_NET.GET_PATH_GEOM_COLUMN +SDO_NET.GET_PATH_LINK_TABLE_NAME +SDO_NET.GET_PATH_TABLE_NAME +SDO_NET.GET_PERCENTAGE +SDO_NET.GET_PHANTOM_FEATURES +SDO_NET.GET_PT +SDO_NET.GET_PT_GEOM_ORD +SDO_NET.GET_SUBPATH_GEOM_COLUMN +SDO_NET.GET_SUBPATH_TABLE_NAME +SDO_NET.GET_TOPOLOGY +SDO_NET.GET_TOPO_LINK_GEOMETRY +SDO_NET.GET_TOPO_NODE_GEOMETRY +SDO_NET.GET_USER_DEFINED_DATA +SDO_NET.INSERT_GEOM_METADATA +SDO_NET.INSERT_PATH_LINK_INFO +SDO_NET.IS_COMPLEX +SDO_NET.IS_COVERED_BY_LINK_INTERVAL +SDO_NET.IS_GEODETIC +SDO_NET.IS_HIERARCHICAL +SDO_NET.IS_LINK_IN_PATH +SDO_NET.IS_LOGICAL +SDO_NET.IS_NODE_IN_PATH +SDO_NET.IS_SIMPLE +SDO_NET.IS_SPATIAL +SDO_NET.LOAD_CONFIG +SDO_NET.LOGICAL_PARTITION +SDO_NET.LOGICAL_POWERLAW_PARTITION +SDO_NET.LRS_GEOMETRY_NETWORK +SDO_NET.NETWORK_EXISTS +SDO_NET.POST_XML +SDO_NET.REGISTER_CONSTRAINT +SDO_NET.REGISTER_JAVA_OBJECT +SDO_NET.SDO_GEOMETRY_NETWORK +SDO_NET.SET_LOGGING_LEVEL +SDO_NET.SET_MAX_JAVA_HEAP_SIZE +SDO_NET.SPATIAL_PARTITION +SDO_NET.SWITCH_TO_LOGICAL_NETWORK +SDO_NET.SWITCH_TO_SPATIAL_NETWORK +SDO_NET.TOPO_GEOMETRY_NETWORK +SDO_NET.UPDATE_CONSISTENCY +SDO_NET.UPDATE_FEATURE +SDO_NET.UPDATE_FEATURE_ELEMENT +SDO_NET.VALIDATE_COMPONENT_SCHEMA +SDO_NET.VALIDATE_CONSISTENCY +SDO_NET.VALIDATE_LINK_SCHEMA +SDO_NET.VALIDATE_LRS_SCHEMA +SDO_NET.VALIDATE_NETWORK +SDO_NET.VALIDATE_NODE_SCHEMA +SDO_NET.VALIDATE_PARTITION_BLOB_SCHEMA +SDO_NET.VALIDATE_PARTITION_INFO +SDO_NET.VALIDATE_PARTITION_SCHEMA +SDO_NET.VALIDATE_PATH_SCHEMA +SDO_NET.VALIDATE_SUBPATH_SCHEMA +SDO_NETWORK_CONS_DEL_TRIG. +SDO_NETWORK_CONS_INS_TRIG. +SDO_NETWORK_CONS_UPD_TRIG. +SDO_NETWORK_DROP_USER. +SDO_NETWORK_HIS_DEL_TRIG. +SDO_NETWORK_HIS_INS_TRIG. +SDO_NETWORK_HIS_UPD_TRIG. +SDO_NETWORK_I.ADD_LINK +SDO_NETWORK_I.ADD_LINK_S +SDO_NETWORK_I.ADD_LRS_LINK +SDO_NETWORK_I.ADD_LRS_LINK_S +SDO_NETWORK_I.ADD_LRS_NODE +SDO_NETWORK_I.ADD_LRS_NODE_S +SDO_NETWORK_I.ADD_NODE +SDO_NETWORK_I.ADD_NODE_S +SDO_NETWORK_I.ADD_PATH +SDO_NETWORK_I.ADD_PATH_S +SDO_NETWORK_I.ADD_SDO_LINK +SDO_NETWORK_I.ADD_SDO_LINK_S +SDO_NETWORK_I.ADD_SDO_NODE +SDO_NETWORK_I.ADD_SDO_NODE_S +SDO_NETWORK_I.DELETE_LINK +SDO_NETWORK_I.DELETE_LINK_S +SDO_NETWORK_I.DELETE_NODE +SDO_NETWORK_I.DELETE_NODE_S +SDO_NETWORK_I.DELETE_PATH +SDO_NETWORK_I.DELETE_PATH_S +SDO_NETWORK_I.GET_MAX_LINK_ID +SDO_NETWORK_I.GET_MAX_LINK_ID_S +SDO_NETWORK_I.GET_MAX_NODE_ID +SDO_NETWORK_I.GET_MAX_NODE_ID_S +SDO_NETWORK_I.GET_MAX_PATH_ID +SDO_NETWORK_I.GET_MAX_PATH_ID_S +SDO_NETWORK_I.GET_MAX_SUBPATH_ID +SDO_NETWORK_I.GET_MAX_SUBPATH_ID_S +SDO_NETWORK_JAVA_DEL_TRIG. +SDO_NETWORK_JAVA_INS_TRIG. +SDO_NETWORK_JAVA_UPD_TRIG. +SDO_NETWORK_LOCKS_DEL_TRIG. +SDO_NETWORK_LOCKS_INS_TRIG. +SDO_NETWORK_LOCKS_UPD_TRIG. +SDO_NETWORK_MANAGER_I.ADJUST_LINK_FILTER +SDO_NETWORK_MANAGER_I.ADJUST_NODE_FILTER +SDO_NETWORK_MANAGER_I.ADJUST_PATH_FILTER +SDO_NETWORK_MANAGER_I.ALL_PATHS +SDO_NETWORK_MANAGER_I.ALL_PATHS_S +SDO_NETWORK_MANAGER_I.CREATE_LOGICAL_NETWORK +SDO_NETWORK_MANAGER_I.CREATE_LOGICAL_NETWORK_S +SDO_NETWORK_MANAGER_I.CREATE_LRS_NETWORK +SDO_NETWORK_MANAGER_I.CREATE_LRS_NETWORK_S +SDO_NETWORK_MANAGER_I.CREATE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_I.CREATE_REF_CONSTRAINTS_S +SDO_NETWORK_MANAGER_I.CREATE_SDO_NETWORK +SDO_NETWORK_MANAGER_I.CREATE_SDO_NETWORK_S +SDO_NETWORK_MANAGER_I.DEREGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_I.DEREGISTER_LOCK +SDO_NETWORK_MANAGER_I.DISABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_I.DISABLE_REF_CONSTRAINTS_S +SDO_NETWORK_MANAGER_I.DISABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_I.DROP_NETWORK +SDO_NETWORK_MANAGER_I.DROP_NETWORK_S +SDO_NETWORK_MANAGER_I.ENABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_I.ENABLE_REF_CONSTRAINTS_S +SDO_NETWORK_MANAGER_I.ENABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_I.FIND_CONNECTED_COMPONENTS +SDO_NETWORK_MANAGER_I.FIND_CONNECTED_COMPONENTS_S +SDO_NETWORK_MANAGER_I.FIND_REACHABLE_NODES +SDO_NETWORK_MANAGER_I.FIND_REACHABLE_NODES_S +SDO_NETWORK_MANAGER_I.FIND_REACHING_NODES +SDO_NETWORK_MANAGER_I.FIND_REACHING_NODES_S +SDO_NETWORK_MANAGER_I.GET_DEFAULT_VALUE_S +SDO_NETWORK_MANAGER_I.GET_LOCK_ID +SDO_NETWORK_MANAGER_I.GET_LOCK_INFO +SDO_NETWORK_MANAGER_I.GET_NET_TAB_NAMES +SDO_NETWORK_MANAGER_I.IS_REACHABLE +SDO_NETWORK_MANAGER_I.IS_REACHABLE_S +SDO_NETWORK_MANAGER_I.IS_VERSIONED_S +SDO_NETWORK_MANAGER_I.IS_VERSIONED_TAB +SDO_NETWORK_MANAGER_I.IS_VERSIONED_WM +SDO_NETWORK_MANAGER_I.LIST_NETWORKS +SDO_NETWORK_MANAGER_I.LIST_NETWORKS_S +SDO_NETWORK_MANAGER_I.LOCK_ROWS_WM +SDO_NETWORK_MANAGER_I.MCST_LINK +SDO_NETWORK_MANAGER_I.MCST_LINK_S +SDO_NETWORK_MANAGER_I.NEAREST_NEIGHBORS +SDO_NETWORK_MANAGER_I.NEAREST_NEIGHBORS_S +SDO_NETWORK_MANAGER_I.READ_CONSTRAINT +SDO_NETWORK_MANAGER_I.READ_NETWORK +SDO_NETWORK_MANAGER_I.READ_NETWORK_S +SDO_NETWORK_MANAGER_I.REGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_I.REGISTER_LOCK +SDO_NETWORK_MANAGER_I.SHORTEST_PATH +SDO_NETWORK_MANAGER_I.SHORTEST_PATH_DIJKSTRA +SDO_NETWORK_MANAGER_I.SHORTEST_PATH_DIJKSTRA_S +SDO_NETWORK_MANAGER_I.SHORTEST_PATH_S +SDO_NETWORK_MANAGER_I.TSP_PATH +SDO_NETWORK_MANAGER_I.TSP_PATH_S +SDO_NETWORK_MANAGER_I.UNLOCK_ROWS_WM +SDO_NETWORK_MANAGER_I.VALIDATE_NETWORK_SCHEMA +SDO_NETWORK_MANAGER_I.VALIDATE_NETWORK_SCHEMA_S +SDO_NETWORK_MANAGER_I.WITHIN_COST +SDO_NETWORK_MANAGER_I.WITHIN_COST_S +SDO_NETWORK_MANAGER_I.WRITE_NETWORK +SDO_NETWORK_MANAGER_I.WRITE_NETWORK_S +SDO_NETWORK_MANAGER_T.ALL_PATHS +SDO_NETWORK_MANAGER_T.CREATE_LOGICAL_NETWORK +SDO_NETWORK_MANAGER_T.CREATE_LRS_NETWORK +SDO_NETWORK_MANAGER_T.CREATE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_T.CREATE_SDO_NETWORK +SDO_NETWORK_MANAGER_T.DEREGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_T.DISABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_T.DISABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_T.DROP_NETWORK +SDO_NETWORK_MANAGER_T.ENABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_T.ENABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_T.FIND_CONNECTED_COMPONENTS +SDO_NETWORK_MANAGER_T.FIND_REACHABLE_NODES +SDO_NETWORK_MANAGER_T.FIND_REACHING_NODES +SDO_NETWORK_MANAGER_T.IS_REACHABLE +SDO_NETWORK_MANAGER_T.IS_VERSIONED_WM +SDO_NETWORK_MANAGER_T.LIST_NETWORKS +SDO_NETWORK_MANAGER_T.LOCK_ROWS_WM +SDO_NETWORK_MANAGER_T.MCST_LINK +SDO_NETWORK_MANAGER_T.NEAREST_NEIGHBORS +SDO_NETWORK_MANAGER_T.READ_NETWORK +SDO_NETWORK_MANAGER_T.REGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_T.SHORTEST_PATH +SDO_NETWORK_MANAGER_T.SHORTEST_PATH_DIJKSTRA +SDO_NETWORK_MANAGER_T.TSP_PATH +SDO_NETWORK_MANAGER_T.UNLOCK_ROWS_WM +SDO_NETWORK_MANAGER_T.VALIDATE_NETWORK_SCHEMA +SDO_NETWORK_MANAGER_T.WITHIN_COST +SDO_NETWORK_MANAGER_T.WRITE_NETWORK +SDO_NETWORK_T.ADD_LINK +SDO_NETWORK_T.ADD_LRS_LINK +SDO_NETWORK_T.ADD_LRS_NODE +SDO_NETWORK_T.ADD_NODE +SDO_NETWORK_T.ADD_PATH +SDO_NETWORK_T.ADD_SDO_LINK +SDO_NETWORK_T.ADD_SDO_NODE +SDO_NETWORK_T.DELETE_LINK +SDO_NETWORK_T.DELETE_NODE +SDO_NETWORK_T.DELETE_PATH +SDO_NETWORK_T.GET_MAX_LINK_ID +SDO_NETWORK_T.GET_MAX_NODE_ID +SDO_NETWORK_T.GET_MAX_PATH_ID +SDO_NETWORK_T.GET_MAX_SUBPATH_ID +SDO_NETWORK_TIME_DEL_TRIG. +SDO_NETWORK_TIME_INS_TRIG. +SDO_NETWORK_TIME_UPD_TRIG. +SDO_NETWORK_TRIG_DEL. +SDO_NETWORK_TRIG_INS. +SDO_NETWORK_TRIG_UPD. +SDO_NETWORK_UD_DEL_TRIG. +SDO_NETWORK_UD_INS_TRIG. +SDO_NETWORK_UD_UPD_TRIG. +SDO_NET_MEM. +SDO_NET_MEM.SET_MAX_MEMORY_SIZE +SDO_NET_PARTITION. +SDO_NET_PARTITION.ADJUST_M +SDO_NET_PARTITION.BINARY_SEARCH_MAXWT_ROW +SDO_NET_PARTITION.CLEAN_TABLES +SDO_NET_PARTITION.COMPUTE_CUTS_FOR_PARTITION +SDO_NET_PARTITION.GET_PID +SDO_NET_PARTITION.GRAPH_PARTITION +SDO_NET_PARTITION.INDEX_EXISTS +SDO_NET_PARTITION.LG_POWERLAW_PART +SDO_NET_PARTITION.LOGICAL_PART +SDO_NET_PARTITION.LOG_MESSAGE +SDO_NET_PARTITION.MIN_EIGENVECTOR +SDO_NET_PARTITION.SET_LOG_INFO +SDO_NET_PARTITION.TABLE_EXISTS +SDO_NODE_I.GET_ADJACENT_NODE_IDS +SDO_NODE_I.GET_ADJACENT_NODE_IDS_S +SDO_NODE_I.GET_CHILD_NODE_IDS +SDO_NODE_I.GET_CHILD_NODE_IDS_S +SDO_NODE_I.GET_COMPONENT_NO +SDO_NODE_I.GET_COMPONENT_NO_S +SDO_NODE_I.GET_COST +SDO_NODE_I.GET_COST_S +SDO_NODE_I.GET_DEGREE +SDO_NODE_I.GET_DEGREE_S +SDO_NODE_I.GET_GEOMETRY +SDO_NODE_I.GET_GEOMETRY_S +SDO_NODE_I.GET_GEOM_ID +SDO_NODE_I.GET_GEOM_ID_S +SDO_NODE_I.GET_HIERARCHY_LEVEL +SDO_NODE_I.GET_HIERARCHY_LEVEL_S +SDO_NODE_I.GET_INCIDENT_LINK_IDS +SDO_NODE_I.GET_INCIDENT_LINK_IDS_S +SDO_NODE_I.GET_IN_DEGREE +SDO_NODE_I.GET_IN_DEGREE_S +SDO_NODE_I.GET_IN_LINK_IDS +SDO_NODE_I.GET_IN_LINK_IDS_S +SDO_NODE_I.GET_MEASURE +SDO_NODE_I.GET_MEASURE_S +SDO_NODE_I.GET_NAME +SDO_NODE_I.GET_NAME_S +SDO_NODE_I.GET_OUT_DEGREE +SDO_NODE_I.GET_OUT_DEGREE_S +SDO_NODE_I.GET_OUT_LINK_IDS +SDO_NODE_I.GET_OUT_LINK_IDS_S +SDO_NODE_I.GET_PARENT_NODE_ID +SDO_NODE_I.GET_PARENT_NODE_ID_S +SDO_NODE_I.GET_PARTITION_ID +SDO_NODE_I.GET_PARTITION_ID_S +SDO_NODE_I.GET_SIBLING_NODE_IDS +SDO_NODE_I.GET_SIBLING_NODE_IDS_S +SDO_NODE_I.GET_STATE +SDO_NODE_I.GET_STATE_S +SDO_NODE_I.GET_TYPE +SDO_NODE_I.GET_TYPE_S +SDO_NODE_I.IS_ACTIVE +SDO_NODE_I.IS_ACTIVE_S +SDO_NODE_I.IS_LOGICAL +SDO_NODE_I.IS_LOGICAL_S +SDO_NODE_I.IS_TEMPORARY +SDO_NODE_I.IS_TEMPORARY_S +SDO_NODE_I.LINK_EXISTS +SDO_NODE_I.LINK_EXISTS_S +SDO_NODE_I.MAKE_TEMPORARY +SDO_NODE_I.MAKE_TEMPORARY_S +SDO_NODE_I.SET_COMPONENT_NO +SDO_NODE_I.SET_COMPONENT_NO_S +SDO_NODE_I.SET_COST +SDO_NODE_I.SET_COST_S +SDO_NODE_I.SET_GEOMETRY +SDO_NODE_I.SET_GEOMETRY_S +SDO_NODE_I.SET_GEOM_ID +SDO_NODE_I.SET_GEOM_ID_S +SDO_NODE_I.SET_HIERARCHY_LEVEL +SDO_NODE_I.SET_HIERARCHY_LEVEL_S +SDO_NODE_I.SET_MEASURE +SDO_NODE_I.SET_MEASURE_S +SDO_NODE_I.SET_NAME +SDO_NODE_I.SET_NAME_S +SDO_NODE_I.SET_PARENT_NODE +SDO_NODE_I.SET_PARENT_NODE_S +SDO_NODE_I.SET_STATE +SDO_NODE_I.SET_STATE_S +SDO_NODE_I.SET_TYPE +SDO_NODE_I.SET_TYPE_S +SDO_NODE_T.GET_ADJACENT_NODE_IDS +SDO_NODE_T.GET_CHILD_NODE_IDS +SDO_NODE_T.GET_COMPONENT_NO +SDO_NODE_T.GET_COST +SDO_NODE_T.GET_DEGREE +SDO_NODE_T.GET_GEOMETRY +SDO_NODE_T.GET_GEOM_ID +SDO_NODE_T.GET_HIERARCHY_LEVEL +SDO_NODE_T.GET_INCIDENT_LINK_IDS +SDO_NODE_T.GET_IN_DEGREE +SDO_NODE_T.GET_IN_LINK_IDS +SDO_NODE_T.GET_MEASURE +SDO_NODE_T.GET_NAME +SDO_NODE_T.GET_OUT_DEGREE +SDO_NODE_T.GET_OUT_LINK_IDS +SDO_NODE_T.GET_PARENT_NODE_ID +SDO_NODE_T.GET_PARTITION_ID +SDO_NODE_T.GET_SIBLING_NODE_IDS +SDO_NODE_T.GET_STATE +SDO_NODE_T.GET_TYPE +SDO_NODE_T.IS_ACTIVE +SDO_NODE_T.IS_LOGICAL +SDO_NODE_T.IS_TEMPORARY +SDO_NODE_T.LINK_EXISTS +SDO_NODE_T.MAKE_TEMPORARY +SDO_NODE_T.SET_COMPONENT_NO +SDO_NODE_T.SET_COST +SDO_NODE_T.SET_GEOMETRY +SDO_NODE_T.SET_GEOM_ID +SDO_NODE_T.SET_HIERARCHY_LEVEL +SDO_NODE_T.SET_MEASURE +SDO_NODE_T.SET_NAME +SDO_NODE_T.SET_PARENT_NODE +SDO_NODE_T.SET_STATE +SDO_NODE_T.SET_TYPE +SDO_OLS. +SDO_OLS.DETERMINE_CLASSIFICATION +SDO_OLS.EXTRACT +SDO_OLS.EXTRACTVALUE +SDO_OLS.GENERATE_ERROR +SDO_OLS.GETBASISXML +SDO_OLS.GETNS +SDO_OLS.HANDLE_OPENLS_ERROR +SDO_OLS.MAKEOPENLS10REQUEST +SDO_OLS.MAKEOPENLSCLOBREQUEST +SDO_OLS.MAKEOPENLSREQUEST +SDO_OLS.MAKEOPENLSSOAPREQUEST +SDO_OLS.PARSE_COORD_PAIR +SDO_OLS.POSTCLOB +SDO_OLS.POSTXML +SDO_OLS_DIRECTORY. +SDO_OLS_DIRECTORY.GETOPENLSFORBUSINESS +SDO_OLS_DIRECTORY.GETOPENLSFORCATEGORIES +SDO_OLS_DIRECTORY.GETOPENLSFORCATEGORY +SDO_OLS_DIRECTORY.ISBUSINESSOFCATEGORYID +SDO_OLS_DIRECTORY.ISBUSINESSOFCATEGORYNAME +SDO_OLS_DIRECTORY.MAKEOPENLS10REQUEST +SDO_OLS_LOCUTL. +SDO_OLS_LOCUTL.GEOCODESINGLEADR +SDO_OLS_LOCUTL.MAKEOPENLS10REQUEST +SDO_OLS_PRESENTATION. +SDO_OLS_PRESENTATION.MAKEOPENLS10REQUEST +SDO_OLS_PRESENTATION.SPECIFY_POI_FOR_MAPVIEWER +SDO_OLS_PRESENTATION.SPECIFY_THEME_FOR_MAPVIEWER +SDO_OLS_ROUTE. +SDO_OLS_ROUTE.MAKEOPENLS10REQUEST +SDO_OLS_ROUTE.MANEUVERORACLETOOPENLS +SDO_OWM_INSTALLED. +SDO_PATH_I.COMPUTE_GEOMETRY +SDO_PATH_I.COMPUTE_GEOMETRY_S +SDO_PATH_I.GET_COST +SDO_PATH_I.GET_COST_S +SDO_PATH_I.GET_END_NODE_ID +SDO_PATH_I.GET_END_NODE_ID_S +SDO_PATH_I.GET_GEOMETRY +SDO_PATH_I.GET_GEOMETRY_S +SDO_PATH_I.GET_LINK_IDS +SDO_PATH_I.GET_LINK_IDS_S +SDO_PATH_I.GET_NAME +SDO_PATH_I.GET_NAME_S +SDO_PATH_I.GET_NODE_IDS +SDO_PATH_I.GET_NODE_IDS_S +SDO_PATH_I.GET_NO_OF_LINKS +SDO_PATH_I.GET_NO_OF_LINKS_S +SDO_PATH_I.GET_START_NODE_ID +SDO_PATH_I.GET_START_NODE_ID_S +SDO_PATH_I.GET_TYPE +SDO_PATH_I.GET_TYPE_S +SDO_PATH_I.IS_ACTIVE +SDO_PATH_I.IS_ACTIVE_S +SDO_PATH_I.IS_CLOSED +SDO_PATH_I.IS_CLOSED_S +SDO_PATH_I.IS_CONNECTED +SDO_PATH_I.IS_CONNECTED_S +SDO_PATH_I.IS_LOGICAL +SDO_PATH_I.IS_LOGICAL_S +SDO_PATH_I.IS_SIMPLE +SDO_PATH_I.IS_SIMPLE_S +SDO_PATH_I.IS_TEMPORARY +SDO_PATH_I.IS_TEMPORARY_S +SDO_PATH_I.SET_GEOMETRY +SDO_PATH_I.SET_GEOMETRY_S +SDO_PATH_I.SET_NAME +SDO_PATH_I.SET_NAME_S +SDO_PATH_I.SET_PATH_ID +SDO_PATH_I.SET_PATH_ID_S +SDO_PATH_I.SET_TYPE +SDO_PATH_I.SET_TYPE_S +SDO_PATH_T.COMPUTE_GEOMETRY +SDO_PATH_T.GET_COST +SDO_PATH_T.GET_END_NODE_ID +SDO_PATH_T.GET_GEOMETRY +SDO_PATH_T.GET_LINK_IDS +SDO_PATH_T.GET_NAME +SDO_PATH_T.GET_NODE_IDS +SDO_PATH_T.GET_NO_OF_LINKS +SDO_PATH_T.GET_START_NODE_ID +SDO_PATH_T.GET_TYPE +SDO_PATH_T.IS_ACTIVE +SDO_PATH_T.IS_CLOSED +SDO_PATH_T.IS_CONNECTED +SDO_PATH_T.IS_LOGICAL +SDO_PATH_T.IS_SIMPLE +SDO_PATH_T.IS_TEMPORARY +SDO_PATH_T.SET_GEOMETRY +SDO_PATH_T.SET_NAME +SDO_PATH_T.SET_PATH_ID +SDO_PATH_T.SET_TYPE +SDO_PC_PKG. +SDO_PC_PKG.ADD_TO_PC +SDO_PC_PKG.CLIP_PC +SDO_PC_PKG.CLIP_PC_FLAT +SDO_PC_PKG.CLIP_PC_FLAT_STRING +SDO_PC_PKG.CLIP_PC_INTO_TIN +SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES +SDO_PC_PKG.CREATE_LIBLAS_PYRAMID +SDO_PC_PKG.CREATE_PC +SDO_PC_PKG.DROP_DEPENDENCIES +SDO_PC_PKG.GETNTHHILBERTVALUE +SDO_PC_PKG.GET_BLOCKING_METHOD +SDO_PC_PKG.GET_PT_IDS +SDO_PC_PKG.GET_TILE_SQL +SDO_PC_PKG.HAS_PYRAMID +SDO_PC_PKG.HILBERT_XY2D +SDO_PC_PKG.IMPORT_LAS +SDO_PC_PKG.INIT +SDO_PC_PKG.PRESERVES_LEVEL1 +SDO_PC_PKG.TIN_TO_PC +SDO_PC_PKG.TO_GEOMETRY +SDO_POINTINPOLYGON. +SDO_PQRY. +SDO_PREFERRED_OPS_SYSTEM_TRIG. +SDO_PREFERRED_OPS_SYS_TRIGGER. +SDO_PREFERRED_OPS_USER_TRIGGER. +SDO_PRIDX. +SDO_PRIDX.GEN_RID_RANGE +SDO_PRIDX.GEN_RID_RANGE_BY_AREA +SDO_PRIDX.INDEXLOAD +SDO_PRIDX.MDPRCLUSTER +SDO_PRIDX.MDPRTESSELLATE +SDO_PRIDX.MDPRTXFERGM +SDO_PRIDX.RTCLUSTER +SDO_PRIDX.TESSELLATE +SDO_RDF_MIG. +SDO_RDF_MIG.CREATE_RDF_MODEL +SDO_RDF_MIG.DROP_RDF_MODEL +SDO_RELATE_MASK. +SDO_RELATE_MASK.DELETE_MASK +SDO_RELATE_MASK.INSERT_MASK +SDO_RELATE_MASK.UPDATE_MASK +SDO_ROUTER_PARTITION. +SDO_ROUTER_PARTITION.ADJUST_M +SDO_ROUTER_PARTITION.BUILD_TURN_RESTRICTIONS +SDO_ROUTER_PARTITION.CLEANUP_ROUTER +SDO_ROUTER_PARTITION.CREATE_ROUTER_NETWORK +SDO_ROUTER_PARTITION.CREATE_SDO_ROUTER_LOG_DIR +SDO_ROUTER_PARTITION.CREATE_TRUCKING_DATA +SDO_ROUTER_PARTITION.CREATE_TURN_RESTRICTION_DATA +SDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORK +SDO_ROUTER_PARTITION.DUMP_PARTITIONS +SDO_ROUTER_PARTITION.DUMP_TRUCKING_DATA +SDO_ROUTER_PARTITION.DUMP_TURN_RESTRICTION_DATA +SDO_ROUTER_PARTITION.ELOCATION_DUMP_PARTITION +SDO_ROUTER_PARTITION.ELOCATION_DUMP_TRUCKING_DATA +SDO_ROUTER_PARTITION.ELOCATION_DUMP_TURN_RESTRICT +SDO_ROUTER_PARTITION.ELOCATION_PARTITION_ROUTER +SDO_ROUTER_PARTITION.ELOCATION_TRUCKING_DATA +SDO_ROUTER_PARTITION.ELOCATION_TURN_RESTRICT_DATA +SDO_ROUTER_PARTITION.ELOCATION_VALIDATE_LOGFILE +SDO_ROUTER_PARTITION.ELOCATION_VALIDATE_PARTITION +SDO_ROUTER_PARTITION.GATHER_TABLE_STATS +SDO_ROUTER_PARTITION.GET_EDGE_INFO +SDO_ROUTER_PARTITION.GET_GEOMETRY_INFO +SDO_ROUTER_PARTITION.GET_PID +SDO_ROUTER_PARTITION.GET_VERSION +SDO_ROUTER_PARTITION.MIN_EIGENVECTOR +SDO_ROUTER_PARTITION.PARTITION_ROUTER +SDO_ROUTER_PARTITION.VALIDATE_PARTITIONS +SDO_ROUTER_PARTITION.VALIDATE_SDO_ROUTER_LOG_DIR +SDO_RTREE_ADMIN. +SDO_RTREE_ADMIN.DATA_COUNT +SDO_RTREE_ADMIN.FILTER +SDO_RTREE_ADMIN.NN +SDO_RTREE_ADMIN.POPULATE_ROOT_MBRS +SDO_RTREE_ADMIN.RTREE_ANALYZE +SDO_RTREE_ADMIN.SDO_RTREE_CHILDMBRS +SDO_RTREE_ADMIN.SDO_RTREE_CHILDRIDS +SDO_RTREE_ADMIN.SDO_RTREE_DESCRIDS +SDO_RTREE_ADMIN.SDO_RTREE_NDEXTENT +SDO_SAM. +SDO_SAM.AGGREGATES_FOR_GEOMETRY +SDO_SAM.AGGREGATES_FOR_LAYER +SDO_SAM.BIN_GEOMETRY +SDO_SAM.BIN_LAYER +SDO_SAM.COLOCATED_REFERENCE_FEATURES +SDO_SAM.INTERSECTION_RATIO +SDO_SAM.PREDICATED_JOIN +SDO_SAM.SIMPLIFY_GEOMETRY +SDO_SAM.SIMPLIFY_LAYER +SDO_SAM.SPATIAL_CLUSTERS +SDO_SAM.TILED_AGGREGATES +SDO_SAM.TILED_BINS +SDO_SEM_DOWNGRADE. +SDO_SEM_DOWNGRADE.PREPARE_DOWNGRADE_FROM_11 +SDO_SEM_DOWNGRADE_UTL. +SDO_SEM_DOWNGRADE_UTL.CHECK_111_COMPATIBLE +SDO_SEM_DOWNGRADE_UTL.CHECK_112_COMPATIBLE +SDO_SEM_DOWNGRADE_UTL.DATA_112NG_EXISTS +SDO_SEM_DOWNGRADE_UTL.DATA_112_EXISTS +SDO_SEM_DOWNGRADE_UTL.DOWNGRADE_TO_102 +SDO_SEM_DOWNGRADE_UTL.RESTORE_RULEBASES +SDO_SEM_DOWNGRADE_UTL.RESTORE_RULEINDICES +SDO_SIMPLE_FILTER. +SDO_STATISTICS.ODCIGETINTERFACES +SDO_STATISTICS.ODCISTATSCOLLECT +SDO_STATISTICS.ODCISTATSDELETE +SDO_STATISTICS.ODCISTATSFUNCTIONCOST +SDO_STATISTICS.ODCISTATSINDEXCOST +SDO_STATISTICS.ODCISTATSSELECTIVITY +SDO_ST_SYN_CREATE. +SDO_TIN_PKG. +SDO_TIN_PKG.CLIP_TIN +SDO_TIN_PKG.CLIP_TIN_INTO_PC +SDO_TIN_PKG.CREATE_TIN +SDO_TIN_PKG.DROP_DEPENDENCIES +SDO_TIN_PKG.GET_SURFACE_OF_TIN +SDO_TIN_PKG.GET_SURFACE_OF_TIN_FOOTPRINT +SDO_TIN_PKG.GET_VOLUME_UNDER_TIN +SDO_TIN_PKG.INIT +SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN +SDO_TIN_PKG.TO_DEM +SDO_TIN_PKG.TO_GEOMETRY +SDO_TOPO. +SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER +SDO_TOPO.ALIGN_EDGE_GEOMETRY +SDO_TOPO.ALIGN_LINEAR_GEOMETRY +SDO_TOPO.ALIGN_POINT_GEOMETRY +SDO_TOPO.CREATE_TOPOLOGY +SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER +SDO_TOPO.DROP_TOPOLOGY +SDO_TOPO.GET_FACE_BOUNDARY +SDO_TOPO.GET_INTERACTING_TGIDS +SDO_TOPO.GET_INTERNAL_GEOMETRY +SDO_TOPO.GET_TOPO_OBJECTS +SDO_TOPO.INITIALIZE_AFTER_IMPORT +SDO_TOPO.INITIALIZE_METADATA +SDO_TOPO.INTERNAL_GET_TGIDS +SDO_TOPO.LOCKROW_UNIVERSEFACE +SDO_TOPO.PREPARE_FOR_EXPORT +SDO_TOPO.RELATE +SDO_TOPO.SDO_TOPO_CRT_RLIDS_VIEW +SDO_TOPO.TG_INSERT_RELATION +SDO_TOPO_DROP_FTBL. +SDO_TOPO_GEOMETRY.GET_GEOMETRY +SDO_TOPO_GEOMETRY.GET_TGL_OBJECTS +SDO_TOPO_GEOMETRY.GET_TOPO_ELEMENTS +SDO_TOPO_GEOMETRY.SDO_TOPO_GEOMETRY +SDO_TOPO_GEOMETRY.TO_STRING +SDO_TOPO_MAP. +SDO_TOPO_MAP.ADD_EDGE +SDO_TOPO_MAP.ADD_ISOLATED_NODE +SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY +SDO_TOPO_MAP.ADD_LOOP +SDO_TOPO_MAP.ADD_NODE +SDO_TOPO_MAP.ADD_POINT_GEOMETRY +SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY +SDO_TOPO_MAP.CHANGE_EDGE_COORDS +SDO_TOPO_MAP.CLEAR_TOPO_MAP +SDO_TOPO_MAP.COMMIT_TOPO_MAP +SDO_TOPO_MAP.CREATE_EDGE_INDEX +SDO_TOPO_MAP.CREATE_FACE_INDEX +SDO_TOPO_MAP.CREATE_FEATURE +SDO_TOPO_MAP.CREATE_TOPO_MAP +SDO_TOPO_MAP.DROP_TOPO_MAP +SDO_TOPO_MAP.GET_CONTAINING_FACE +SDO_TOPO_MAP.GET_EDGE_ADDITIONS +SDO_TOPO_MAP.GET_EDGE_CHANGES +SDO_TOPO_MAP.GET_EDGE_COORDS +SDO_TOPO_MAP.GET_EDGE_DELETIONS +SDO_TOPO_MAP.GET_EDGE_NODES +SDO_TOPO_MAP.GET_FACE_ADDITIONS +SDO_TOPO_MAP.GET_FACE_BOUNDARY +SDO_TOPO_MAP.GET_FACE_CHANGES +SDO_TOPO_MAP.GET_FACE_DELETIONS +SDO_TOPO_MAP.GET_NEAREST_EDGE +SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE +SDO_TOPO_MAP.GET_NEAREST_NODE +SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE +SDO_TOPO_MAP.GET_NODE_ADDITIONS +SDO_TOPO_MAP.GET_NODE_CHANGES +SDO_TOPO_MAP.GET_NODE_COORD +SDO_TOPO_MAP.GET_NODE_DELETIONS +SDO_TOPO_MAP.GET_NODE_FACE_STAR +SDO_TOPO_MAP.GET_NODE_STAR +SDO_TOPO_MAP.GET_TOPO_NAME +SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID +SDO_TOPO_MAP.LIST_TOPO_MAPS +SDO_TOPO_MAP.LOAD_TOPO_MAP +SDO_TOPO_MAP.MOVE_EDGE +SDO_TOPO_MAP.MOVE_ISOLATED_NODE +SDO_TOPO_MAP.MOVE_NODE +SDO_TOPO_MAP.REMOVE_EDGE +SDO_TOPO_MAP.REMOVE_NODE +SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES +SDO_TOPO_MAP.ROLLBACK_TOPO_MAP +SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP +SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP +SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE +SDO_TOPO_MAP.UPDATE_TOPO_MAP +SDO_TOPO_MAP.VALIDATE_TOPOLOGY +SDO_TOPO_MAP.VALIDATE_TOPO_MAP +SDO_TOPO_METADATA. +SDO_TOPO_METADATA.CHECK_TOPO_ID +SDO_TOPO_METADATA.CLEARCACHE +SDO_TOPO_METADATA.EXTRACT_TOPO_OWNER +SDO_TOPO_METADATA.LOADWINDOW +SDO_TOPO_METADATA.UPDATETOPOLOGY +SDO_TOPO_METADATA_INT. +SDO_TOPO_METADATA_INT.ADD_ENTRY +SDO_TOPO_METADATA_INT.ADD_GM_ENTRY +SDO_TOPO_METADATA_INT.ADD_TG +SDO_TOPO_METADATA_INT.CHANGEFTNAME +SDO_TOPO_METADATA_INT.CHECK_TOPO_ID +SDO_TOPO_METADATA_INT.CLEARCACHE +SDO_TOPO_METADATA_INT.DELETE_TG +SDO_TOPO_METADATA_INT.DROP_ENTRY +SDO_TOPO_METADATA_INT.DROP_GM_ENTRY +SDO_TOPO_METADATA_INT.ENABLE_DDL_TRIGGER +SDO_TOPO_METADATA_INT.EXTRACT_TOPO_OWNER +SDO_TOPO_METADATA_INT.LOADWINDOW +SDO_TOPO_METADATA_INT.UPDATETOPOLOGY +SDO_TOPO_TRIG_INS1. +SDO_TPFNS. +SDO_TPFNS.ANYINTERACT +SDO_TPFNS.CONTAINS +SDO_TPFNS.COVEREDBY +SDO_TPFNS.COVERS +SDO_TPFNS.EQUAL +SDO_TPFNS.FILTER +SDO_TPFNS.INSIDE +SDO_TPFNS.OVERLAP +SDO_TPFNS.OVERLAPBDYDISJOINT +SDO_TPFNS.OVERLAPBDYINTERSECT +SDO_TPFNS.SDO_ON +SDO_TPFNS.TOUCH +SDO_TPIDX. +SDO_TPIDX.INDEX_DELETE +SDO_TPIDX.INDEX_INSERT +SDO_TPIDX.INDEX_UPDATE +SDO_TPIDX.ISVERSIONED +SDO_TUNE. +SDO_TUNE.ANALYZE_RTREE +SDO_TUNE.AVERAGE_MBR +SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE +SDO_TUNE.EXTENT_OF +SDO_TUNE.MIX_INFO +SDO_TUNE.QUALITY_DEGRADATION +SDO_TUNE.RTREE_QUALITY +SDO_UNITS_OF_MEASURE_TRIGGER. +SDO_UTIL. +SDO_UTIL.AFFINETRANSFORMS +SDO_UTIL.APPEND +SDO_UTIL.BEARING_TILT_FOR_POINTS +SDO_UTIL.CIRCLE_POLYGON +SDO_UTIL.CONCAT_LINES +SDO_UTIL.CONVERT3007TO3008 +SDO_UTIL.CONVERT_DISTANCE +SDO_UTIL.CONVERT_UNIT +SDO_UTIL.DROP_WORK_TABLES +SDO_UTIL.ELLIPSE_POLYGON +SDO_UTIL.EXPAND_GEOM +SDO_UTIL.EXPAND_MULTI_POINT +SDO_UTIL.EXTRACT +SDO_UTIL.EXTRACT3D +SDO_UTIL.EXTRACTVOIDS +SDO_UTIL.EXTRACT_ALL +SDO_UTIL.EXTRUDE +SDO_UTIL.FROM_CLOB +SDO_UTIL.FROM_GML311GEOMETRY +SDO_UTIL.FROM_GMLGEOMETRY +SDO_UTIL.FROM_KMLGEOMETRY +SDO_UTIL.FROM_WKBGEOMETRY +SDO_UTIL.FROM_WKTGEOMETRY +SDO_UTIL.GETLABELBYELEMENT +SDO_UTIL.GETNUMELEM +SDO_UTIL.GETNUMRINGS +SDO_UTIL.GETNUMVERTICES +SDO_UTIL.GETNURBSAPPROX +SDO_UTIL.GETVERTICES +SDO_UTIL.GET_2D_FOOTPRINT +SDO_UTIL.GET_BOUNDARY +SDO_UTIL.HYBRID_TILES +SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS +SDO_UTIL.INSERT_SDO_GEOM_METADATA +SDO_UTIL.INTERIOR_POINT +SDO_UTIL.INTERNAL_MAKE_LINE_OUT_OF_ELEM +SDO_UTIL.INTERNAL_MERGE_LINESTRINGS +SDO_UTIL.INTERNAL_ORDINATE_COPY +SDO_UTIL.INTERNAL_REVERSE_LINE_POINTS +SDO_UTIL.JSPH_GETNURBSAPPROX +SDO_UTIL.LINEAR_KEY +SDO_UTIL.MDUTL_IS_NUMERIC +SDO_UTIL.NUMBER_OF_COMPONENTS +SDO_UTIL.NUMBER_TO_CHAR +SDO_UTIL.OUTERLN +SDO_UTIL.PARTITION_TABLE +SDO_UTIL.POINT_AT_BEARING +SDO_UTIL.POINT_TO_LINE +SDO_UTIL.POLYGONTOLINE +SDO_UTIL.PREPARE_FOR_TTS +SDO_UTIL.QUAD_TILES +SDO_UTIL.RECTIFY_GEOMETRY +SDO_UTIL.REFINEMGON +SDO_UTIL.REMOVE_DUPLICATES +SDO_UTIL.REMOVE_DUPLICATE_VERTICES +SDO_UTIL.REMOVE_INNER_RINGS +SDO_UTIL.REVERSE_LINESTRING +SDO_UTIL.SIMPLIFY +SDO_UTIL.SIMPLIFYVW +SDO_UTIL.THEME3D_GET_BLOCK_TABLE +SDO_UTIL.THEME3D_HAS_LOD +SDO_UTIL.THEME3D_HAS_TEXTURE +SDO_UTIL.TOGNOMONIC +SDO_UTIL.TO_CLOB +SDO_UTIL.TO_GML311GEOMETRY +SDO_UTIL.TO_GML321GEOMETRY +SDO_UTIL.TO_GMLGEOMETRY +SDO_UTIL.TO_KMLGEOMETRY +SDO_UTIL.TO_WKBGEOMETRY +SDO_UTIL.TO_WKTGEOMETRY +SDO_UTIL.TO_WKTGEOMETRY_VARCHAR +SDO_UTIL.TRUNCATE_NUMBER +SDO_UTIL.VALIDATE_3DTHEME +SDO_UTIL.VALIDATE_SCENE +SDO_UTIL.VALIDATE_VIEWFRAME +SDO_UTIL.VALIDATE_WKBGEOMETRY +SDO_UTIL.VALIDATE_WKTGEOMETRY +SDO_VERS. +SDO_VERSION. +SDO_WFS_LOCK. +SDO_WFS_LOCK.DELETETOKENSESSIONMAP +SDO_WFS_LOCK.ENABLEDBTXNS +SDO_WFS_LOCK.GENERATETOKENID +SDO_WFS_LOCK.LOCKROWSBYID +SDO_WFS_LOCK.QUERYTOKENSESSIONMAP +SDO_WFS_LOCK.REGISTERFEATURETABLE +SDO_WFS_LOCK.RESETTOKENEXPIRY +SDO_WFS_LOCK.TRANSFERTOKENBYID +SDO_WFS_LOCK.UNLOCKROWSBYID +SDO_WFS_LOCK.UNREGISTERFEATURETABLE +SDO_WFS_LOCK.UPDATETOKENSESSIONMAP +SDO_WFS_LOCK_GEN. +SDO_WFS_LOCK_GEN.GENERATETOKENID +SDO_WFS_LOCK_UTIL. +SDO_WFS_LOCK_UTIL.ALLOWUPDATEDELETEROW +SDO_WFS_LOCK_UTIL.CANLOCKROW +SDO_WFS_PROCESS. +SDO_WFS_PROCESS.CONTAINSSDO +SDO_WFS_PROCESS.CONTAINSSDOINTERNAL +SDO_WFS_PROCESS.DELETECAPABILITIESINFO +SDO_WFS_PROCESS.DELETEFEATURETYPEXMLINFO +SDO_WFS_PROCESS.DROPFEATURETYPE +SDO_WFS_PROCESS.DROPFEATURETYPES +SDO_WFS_PROCESS.DROP_EXPORT_TABLES +SDO_WFS_PROCESS.ENUMERATEARRPATHS +SDO_WFS_PROCESS.EXPANDPATH +SDO_WFS_PROCESS.EXTRACTID +SDO_WFS_PROCESS.EXTRACTSDO +SDO_WFS_PROCESS.FINDNSURL +SDO_WFS_PROCESS.GENCOLLECTIONPROCS +SDO_WFS_PROCESS.GENCOLLECTIONPROCSHELPER +SDO_WFS_PROCESS.GENERATEALIASSTRING +SDO_WFS_PROCESS.GENERATEPARSEDSPATIALPATH +SDO_WFS_PROCESS.GENIDVALUE +SDO_WFS_PROCESS.GENRECORDTYPEPROCESSINGLOGIC +SDO_WFS_PROCESS.GENSPATIALARRINFO +SDO_WFS_PROCESS.GENSPATIALPATHELEMCOLINDEX +SDO_WFS_PROCESS.GENTRIGGERS +SDO_WFS_PROCESS.GENUPDATESTR +SDO_WFS_PROCESS.GETALIAS +SDO_WFS_PROCESS.GETCOUNT +SDO_WFS_PROCESS.GETFEATURETYPEID +SDO_WFS_PROCESS.GETPARSEDPATH +SDO_WFS_PROCESS.GETPATH +SDO_WFS_PROCESS.GETUPDATEMAP +SDO_WFS_PROCESS.GETXMLTAGTYPE +SDO_WFS_PROCESS.GRANTFEATURETYPETOUSER +SDO_WFS_PROCESS.GRANTMDACCESSTOADMINUSER +SDO_WFS_PROCESS.GRANTMDACCESSTOUSER +SDO_WFS_PROCESS.INITIALIZE_AFTER_IMPORT +SDO_WFS_PROCESS.INSERTCAPABILITIESINFO +SDO_WFS_PROCESS.INSERTFTDATAUPDATED +SDO_WFS_PROCESS.INSERTFTMDUPDATED +SDO_WFS_PROCESS.ISCOMPLEXOBJECTTYPE +SDO_WFS_PROCESS.ISINLIST +SDO_WFS_PROCESS.ISLISTMEMBER +SDO_WFS_PROCESS.ISPKCOLIN +SDO_WFS_PROCESS.ISROWIDIN +SDO_WFS_PROCESS.NOTINARRAY +SDO_WFS_PROCESS.ORDERINLIST +SDO_WFS_PROCESS.PARSEPATH +SDO_WFS_PROCESS.POPULATEFEATURETYPEXMLINFO +SDO_WFS_PROCESS.POPULATEVARYINGALIASES +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_ALL +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_FTS +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_FT_INT +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_FT_M_INT +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_USER +SDO_WFS_PROCESS.PREPROCESSINSERT +SDO_WFS_PROCESS.PREPROCESSUPDATE +SDO_WFS_PROCESS.PROCESSCOMPLEXELEMENT +SDO_WFS_PROCESS.PROCESSIDPATH +SDO_WFS_PROCESS.PROCESSINLINECOMPLEXELEMENT +SDO_WFS_PROCESS.PROCESSPATH +SDO_WFS_PROCESS.PUBLISHFEATURETYPE +SDO_WFS_PROCESS.PUBLISH_FEATURETYPES_IN_SCHEMA +SDO_WFS_PROCESS.PUTALIAS +SDO_WFS_PROCESS.REGISTERMTABLEVIEW +SDO_WFS_PROCESS.REGISTEROBJECT +SDO_WFS_PROCESS.REVOKEFEATURETYPEFROMUSER +SDO_WFS_PROCESS.REVOKEMDACCESSFROMADMINUSER +SDO_WFS_PROCESS.REVOKEMDACCESSFROMUSER +SDO_WFS_PROCESS.SORTSPCONTENTBYCOLINDEX +SDO_WFS_PROCESS.STRIP_SPECIAL_CHARS +SDO_WFS_PROCESS.UNREGISTERMTABLEVIEW +SDO_WFS_PROCESS.UPDATEOBJECTREF +SDO_WFS_PROCESS_UTIL. +SDO_WFS_PROCESS_UTIL.GENERATEWFS_PROC_SQ +SDO_WFS_PROCESS_UTIL.GENERATEXMLINFO_SQ +SDO_WS_PROCESS. +SDO_WS_PROCESS.CHECKLENGTH +SDO_WS_PROCESS.CONVERTDURATIONEXPR +SDO_WS_PROCESS.EVALUATEDURATIONEXPR +SDO_WS_PROCESS.EVALUATEEXPR +SDO_WS_PROCESS.EVALUATEGDAYEXPR +SDO_WS_PROCESS.EVALUATEGMONTHDAYEXPR +SDO_WS_PROCESS.EVALUATEGMONTHEXPR +SDO_WS_PROCESS.EVALUATEGYEAREXPR +SDO_WS_PROCESS.EVALUATEGYEARMONTHEXPR +SDO_WS_PROCESS.EVALUATENONTSEXPR +SDO_WS_PROCESS.EVALUATENONTSNUMEXPR +SDO_WS_PROCESS.EVALUATETIMEEXPR +SDO_WS_PROCESS.EVALUATETSEXPR +SEARCH_COLUMNS +SEARCH_CONDITION +SEARCH_CONDITION_VC +SECONDARY +SECONDARY_INSTANCE +SECONDARY_OBJDATA_TYPE +SECONDARY_OBJECT_NAME +SECONDARY_OBJECT_OWNER +SECONDS_IN_WAIT +SECRET_TAG +SECTION +SECTION_SIZE +SECTOR_SIZE +SECURE +SECUREFILE +SECURE_DML. +SECURE_EMPLOYEES. +SECURITY_CLASS +SECURITY_CLASS_OWNER +SECURITY_FEATURE +SECURITY_FEATURE_POLICY +SECURITY_LEVEL +SEC_REL_COLUMN +SEGBLK# +SEGFILE# +SEGMENTS_PROCESSED +SEGMENTS_SELECTED +SEGMENT_ADVISOR +SEGMENT_BLOCK +SEGMENT_COLUMN_ID +SEGMENT_COUNT +SEGMENT_CREATED +SEGMENT_FILE +SEGMENT_FILEID +SEGMENT_ID +SEGMENT_NAME +SEGMENT_OWNER +SEGMENT_READ +SEGMENT_READ_TIME +SEGMENT_SPACE_MANAGEMENT +SEGMENT_SUBTYPE +SEGMENT_TYPE +SEGMENT_WRITE +SEGMENT_WRITE_TIME +SEGRFNO# +SEGTYPE +SEG_NAME +SEG_OWNER +SEG_TYPE +SEG_TYPE_NAME +SEL +SELECTED_FOR_EXECUTION +SEMIJOIN +SEMIJOIN_DRIVER +SEMI_TO_INNER +SEM_UPGRADE_TO_11. +SEM_UPGRADE_TO_11.CREATE_ALL_MODELS_IN_11 +SEM_UPGRADE_TO_11.EMPTY_APP_TABS_DROP_RDF_COLS +SEM_UPGRADE_TO_11.LOAD_FROM_ALL_STAGING_TABLES +SEM_UPGRADE_TO_11.RESTORE_10_2_RDF_NETWORK_IN_11 +SEM_UPGRADE_TO_11.SAVE_10_2_RDF_NETWORK_FOR_11 +SEM_UPGRADE_TO_11.SETUP_FOR_LOADING_IN_11 +SEM_UPGRADE_TO_11.UNLOAD_ALL_INTO_STAGING_TABLES +SENDER +SENDER_ADDRESS +SENDER_NAME +SENDER_PROTOCOL +SENDQ +SENDS +SENDS_DROPPED +SEND_BUF_OR +SEND_CARRIER_LOST +SEND_ELAPSED_TIME +SEND_ERRORS +SEND_OLD_ON_DELETE +SEND_OLD_ON_UPDATE +SEND_TIME +SENSITIVE# +SENSITIVE_COLUMN +SENSITIVE_TYPE +SENT +SEQ +SEQ# +SEQH +SEQL +SEQNO +SEQNO_DONE_CUR +SEQNO_DONE_HI +SEQNO_DONE_LO +SEQNO_RCV_CUR +SEQNO_RCV_HI +SEQNO_RCV_LO +SEQUENCE +SEQUENCE# +SEQUENCENUMBER +SEQUENCE_HASH +SEQUENCE_ID +SEQUENCE_NAME +SEQUENCE_NEEDED +SEQUENCE_NO +SEQUENCE_NUMBER +SEQUENCE_OWNER +SEQUENCE_START_VALUE +SEQUENCE_VALUES_CAPTURED +SEQUENCE_VALUES_REPLAYED +SEQ_ID +SEQ_NO +SEQ_NUMBER +SERIAL +SERIAL# +SERIALIZABLE_ABORTS +SERIALNUM +SERIAL_NUM +SERVER +SERVER# +SERVERS_HIGHWATER +SERVERS_STARTED +SERVERS_TERMINATED +SERVER_COUNT +SERVER_ELAPSED_APPLY_TIME +SERVER_ELAPSED_DEQUEUE_TIME +SERVER_ERROR. +SERVER_ERROR_DEPTH. +SERVER_ERROR_MSG. +SERVER_ERROR_NUM_PARAMS. +SERVER_ERROR_PARAM. +SERVER_GROUP +SERVER_ID +SERVER_NAME +SERVER_PID +SERVER_SERIAL# +SERVER_SET +SERVER_SID +SERVER_SPID +SERVER_START_TIME +SERVER_TOTAL_MESSAGES_APPLIED +SERVER_TYPE +SERVICE +SERVICE_HASH +SERVICE_ID +SERVICE_NAME +SERVICE_NAME_HASH +SERVICE_REQUEST +SERVICE_TIME_AVG +SERVICE_TIME_SUM +SERVICE_TIME_SUMX2 +SESS# +SESSID +SESSINFO_CLEANUP. +SESSION# +SESSIONID +SESSIONS +SESSIONS_CURRENT +SESSIONS_HIGHWATER +SESSIONS_MAX +SESSIONS_WARNING +SESSION_ADDR +SESSION_CACHED_CURSORS +SESSION_CACHE_HITS +SESSION_CACHE_MISSES +SESSION_CPU +SESSION_EDITION_ID +SESSION_FLAG +SESSION_HANDLE +SESSION_ID +SESSION_INFO +SESSION_KEY +SESSION_MODULE +SESSION_NAME +SESSION_NUM +SESSION_PRIVS +SESSION_RECID +SESSION_RESTART_SCN +SESSION_ROLES +SESSION_SERIAL# +SESSION_SERIAL_NUM +SESSION_SETTABLE +SESSION_STAMP +SESSION_STATE +SESSION_STATE_CONSISTENCY +SESSION_STATUS +SESSION_STAT_CPU +SESSION_TOTAL +SESSION_TYPE +SESS_SERIAL# +SES_ACTIONS +SES_ADDR +SETMODFLG. +SETTING +SETTING_NAME +SETTING_TYPE +SETTING_VALUE +SETUP_LATENCY +SET_BY +SET_BY_USER +SET_COUNT +SET_DESCRIPTION +SET_FACTOR. +SET_MSIZE +SET_NAME +SET_STAMP +SET_STATUS +SET_TO_JOIN +SEVERITY +SEVERITY_INDEX +SFILE_CACHE +SFILE_COMPRESS +SFILE_DEDUPLICATE +SFILE_LOG +SF_VERSION +SGA_ALLOCATED +SGA_SIZE +SGA_SIZE_FACTOR +SGA_TARGET_VALUE +SGA_USED +SH$DEQ_PMAP.SH$DEQ_PMAP +SH$QTAB_PMAP.SH$QTAB_PMAP +SHARABLE_MEM +SHARDED +SHARD_ID +SHAREACCESS +SHARED +SHAREDENY +SHARED_FLAG +SHARED_FLAG2 +SHARED_MAX_LEN +SHARED_POOL_SIZE_FACTOR +SHARED_POOL_SIZE_FOR_ESTIMATE +SHARES +SHARING +SHORTP_POLICY +SHORT_WAITS +SHORT_WAIT_TIME_MAX +SHORT_WAIT_TIME_TOTAL +SHOST +SHRINKS +SHRINK_PHASE +SHUTDOWN +SHUTDOWN_PENDING +SID +SIGNALLING_COMPONENT +SIGNALLING_SUBCOMPONENT +SIGNATURE +SIMPLE_NAME +SIMPLE_RULES_ONLY_EVALUATIONS +SIMPLE_TYPE +SIMPLE_TYPE_NAME +SINGLEBLKRDS +SINGLEBLKRDTIM +SINGLEBLKRDTIM_MICRO +SINGLEBLKRDTIM_MILLI +SINGLE_TABLE +SINGLE_USE_SQL +SINGLE_USE_SQL_MEM +SITE +SITE_NAME +SIZE_BYTES_DISPLAY +SIZE_FACTOR +SIZE_FOR_ESTIMATE +SIZE_IN_BLKS +SIZE_MB +SI_APPENDCLRHSTGR. +SI_ARRAYCLRHSTGR. +SI_AVERAGECOLOR.SI_AVERAGECOLOR +SI_AVERAGECOLOR.SI_SCORE +SI_CHGCONTENT. +SI_COLOR.SI_RGBCOLOR +SI_COLORHISTOGRAM.SI_APPEND +SI_COLORHISTOGRAM.SI_COLORHISTOGRAM +SI_COLORHISTOGRAM.SI_SCORE +SI_CONVERTFORMAT. +SI_FEATURELIST.SI_AVGCLRFTR +SI_FEATURELIST.SI_AVGCLRFTRWGHT +SI_FEATURELIST.SI_CLRHSTGRFTR +SI_FEATURELIST.SI_CLRHSTGRFTRWGHT +SI_FEATURELIST.SI_FEATURELIST +SI_FEATURELIST.SI_PSTNLCLRFTR +SI_FEATURELIST.SI_PSTNLCLRFTRWGHT +SI_FEATURELIST.SI_SCORE +SI_FEATURELIST.SI_SETFEATURE +SI_FEATURELIST.SI_TEXTUREFTR +SI_FEATURELIST.SI_TEXTUREFTRWGHT +SI_FINDAVGCLR. +SI_FINDCLRHSTGR. +SI_FINDPSTNLCLR. +SI_FINDTEXTURE. +SI_GETAVGCLRFTR. +SI_GETAVGCLRFTRW. +SI_GETCLRHSTGRFTR. +SI_GETCLRHSTGRFTRW. +SI_GETCONTENT. +SI_GETCONTENTLNGTH. +SI_GETFORMAT. +SI_GETHEIGHT. +SI_GETPSTNLCLRFTR. +SI_GETPSTNLCLRFTRW. +SI_GETSIZEDTHMBNL. +SI_GETTEXTUREFTR. +SI_GETTEXTUREFTRW. +SI_GETTHMBNL. +SI_GETWIDTH. +SI_MKAVGCLR. +SI_MKCLRHSTGR. +SI_MKFTRLIST. +SI_MKRGBCLR. +SI_MKSTILLIMAGE1. +SI_MKSTILLIMAGE2. +SI_POSITIONALCOLOR.SI_POSITIONALCOLOR +SI_POSITIONALCOLOR.SI_SCORE +SI_SCOREBYAVGCLR. +SI_SCOREBYCLRHSTGR. +SI_SCOREBYFTRLIST. +SI_SCOREBYPSTNLCLR. +SI_SCOREBYTEXTURE. +SI_SETAVGCLRFTR. +SI_SETCLRHSTGRFTR. +SI_SETPSTNLCLRFTR. +SI_SETTEXTUREFTR. +SI_STILLIMAGE.SI_CHANGEFORMAT +SI_STILLIMAGE.SI_CLEARFEATURES +SI_STILLIMAGE.SI_CONTENT +SI_STILLIMAGE.SI_CONTENTLENGTH +SI_STILLIMAGE.SI_FORMAT +SI_STILLIMAGE.SI_HEIGHT +SI_STILLIMAGE.SI_INITFEATURES +SI_STILLIMAGE.SI_RETAINFEATURES +SI_STILLIMAGE.SI_SETCONTENT +SI_STILLIMAGE.SI_STILLIMAGE +SI_STILLIMAGE.SI_THUMBNAIL +SI_STILLIMAGE.SI_WIDTH +SI_TEXTURE.SI_SCORE +SI_TEXTURE.SI_TEXTURE +SKIP +SKIP_CORRUPT +SKIP_EXT_OPTIMIZER +SKIP_IT +SKIP_UNQ_UNUSABLE_IDX +SKIP_WHEN_NULL +SLAVE_NAME +SLAVE_ORIGIN +SLAVE_OS_PROCESS_ID +SLAVE_PID +SLAVE_PROCESS_ID +SLAVE_QC_MISMATCH +SLEEP1 +SLEEP10 +SLEEP11 +SLEEP2 +SLEEP3 +SLEEP4 +SLEEP5 +SLEEP6 +SLEEP7 +SLEEP8 +SLEEP9 +SLEEPS +SLEEP_COUNT +SLEEP_TIMESTAMP +SLEN +SLOT0 +SLOT1 +SLOT10 +SLOT11 +SLOT12 +SLOT13 +SLOT14 +SLOT15 +SLOT16 +SLOT17 +SLOT18 +SLOT19 +SLOT2 +SLOT20 +SLOT21 +SLOT22 +SLOT23 +SLOT24 +SLOT3 +SLOT4 +SLOT5 +SLOT6 +SLOT7 +SLOT8 +SLOT9 +SLT +SLVID +SM$VERSION +SMALL_READS_AVG +SMALL_READS_SUM +SMALL_READS_SUMX2 +SMALL_READ_BYTES_AVG +SMALL_READ_BYTES_SUM +SMALL_READ_BYTES_SUMX2 +SMALL_READ_IOPS +SMALL_READ_LATENCY_AVG +SMALL_READ_LATENCY_SUM +SMALL_READ_LATENCY_SUMX2 +SMALL_READ_MBPS +SMALL_READ_MEGABYTES +SMALL_READ_REQS +SMALL_READ_REQUESTS +SMALL_READ_SERVICETIME +SMALL_SYNC_READ_LATENCY +SMALL_SYNC_READ_REQS +SMALL_WRITES_AVG +SMALL_WRITES_SUM +SMALL_WRITES_SUMX2 +SMALL_WRITE_BYTES_AVG +SMALL_WRITE_BYTES_SUM +SMALL_WRITE_BYTES_SUMX2 +SMALL_WRITE_IOPS +SMALL_WRITE_LATENCY_AVG +SMALL_WRITE_LATENCY_SUM +SMALL_WRITE_LATENCY_SUMX2 +SMALL_WRITE_MBPS +SMALL_WRITE_MEGABYTES +SMALL_WRITE_REQS +SMALL_WRITE_REQUESTS +SMALL_WRITE_SERVICETIME +SMNTPT +SMTP_ENABLED +SMU_ADDR +SNAME +SNAPID +SNAPMASTER +SNAPSHOTBLKREAD +SNAPSHOTFILENAME +SNAPSHOTREQUEST +SNAPSHOT_ID +SNAPSHOT_PARENT_CON_ID +SNAPSHOT_SITE +SNAPSHOT_TIME +SNAP_FLAG +SNAP_ID +SNAP_INTERVAL +SNAP_LEVEL +SNAP_NAME +SNAP_TIMEZONE +SND_PROXY +SND_Q_LEN +SND_Q_MAX +SND_Q_TM_BASE +SND_Q_TM_WRAP +SND_Q_TOT +SND_SEQ_NO +SOFAR +SOFTWARE_VERSION +SOFT_PARSES +SORTS +SORTS_DELTA +SORTS_TOTAL +SORT_ORDER +SOSID +SOURCE +SOURCE_COMMIT_POSITION +SOURCE_COMMIT_SCN +SOURCE_COMPONENT_DB +SOURCE_COMPONENT_ID +SOURCE_COMPONENT_NAME +SOURCE_COMPONENT_TYPE +SOURCE_CONTAINER_NAME +SOURCE_DATABASE +SOURCE_DATABASE_NAME +SOURCE_DB +SOURCE_DBID +SOURCE_DB_UNIQUE_NAME +SOURCE_DESCRIPTION +SOURCE_ENABLED +SOURCE_END_TIME +SOURCE_GLOBAL_NAME +SOURCE_INSTANCE_ID +SOURCE_INSTANCE_NAME +SOURCE_INSTANCE_START_TIME +SOURCE_NAME +SOURCE_OBJECT_NAME +SOURCE_OBJECT_OWNER +SOURCE_OBJECT_TYPE +SOURCE_QUEUE_NAME +SOURCE_QUEUE_OWNER +SOURCE_RESETLOGS_SCN +SOURCE_RESETLOGS_TIME +SOURCE_ROOT_NAME +SOURCE_SCHEMA +SOURCE_SCHEMA_NAME +SOURCE_SERIAL# +SOURCE_SID +SOURCE_SIZE +SOURCE_START_TIME +SOURCE_STATE +SOURCE_STMT +SOURCE_TABLE_NAME +SOURCE_TABLE_OWNER +SOURCE_TRANSACTION_ID +SOURCE_TXN_ID +SOURCE_TYPE +SOURCE_USER_NAME +SPACE +SPACE_ALLOCATED_DELTA +SPACE_ALLOCATED_TOTAL +SPACE_ERROR_INFO. +SPACE_HEADER +SPACE_LIMIT +SPACE_OVERHEAD +SPACE_RECLAIMABLE +SPACE_TOOLS. +SPACE_TOOLS.GET_SPACE_USAGE +SPACE_UNUSED +SPACE_USAGE_KBYTES +SPACE_USED +SPACE_USED_DELTA +SPACE_USED_TOTAL +SPARE_ID +SPARE_UB8 +SPARSE_BYTES_READ +SPARSE_READS +SPARSE_READ_TIME +SPARSE_TYPE +SPCLUSTERS. +SPID +SPILLED_LCR_COUNT +SPILL_CREATION_TIME +SPILL_LWM_POSITION +SPILL_LWM_SCN +SPILL_MESSAGE_NUMBER +SPILL_MSGS +SPILL_POSITION +SPILL_SCN +SPIN_GETS +SPLIT +SPRECO +SQLADDR +SQLHASH +SQLJUTL. +SQLJUTL.BOOL2INT +SQLJUTL.CHAR2IDS +SQLJUTL.CHAR2IYM +SQLJUTL.GET_TYPECODE +SQLJUTL.HAS_DEFAULT +SQLJUTL.IDS2CHAR +SQLJUTL.INT2BOOL +SQLJUTL.IYM2CHAR +SQLJUTL.URI2VCHAR +SQLLDR +SQLSET_ID +SQLSET_NAME +SQLSET_OWNER +SQLSET_ROW.SQLSET_ROW +SQLTYPE +SQL_ADAPTIVE_PLAN_RESOLVED +SQL_ADDRESS +SQL_BIND +SQL_BINDS +SQL_CANCELED +SQL_CHILD_ADDRESS +SQL_CHILD_NUMBER +SQL_COL_TYPE +SQL_CUBE_STORAGE_TYPE +SQL_DIAG_REPO_ID +SQL_ELAPSED_TIME +SQL_EVALUATIONS +SQL_EXECUTIONS +SQL_EXEC_ID +SQL_EXEC_START +SQL_FEATURE +SQL_FREE_EVALUATIONS +SQL_FULLTEXT +SQL_FULL_PLAN_HASH_VALUE +SQL_HANDLE +SQL_HASH +SQL_HASH_VALUE +SQL_ID +SQL_ID_TEMPSEG +SQL_INLINE +SQL_NAME +SQL_OPCODE +SQL_OPNAME +SQL_PATCH +SQL_PLAN_ALLSTAT_ROW_TYPE.SQL_PLAN_ALLSTAT_ROW_TYPE +SQL_PLAN_BASELINE +SQL_PLAN_HASH_VALUE +SQL_PLAN_LINE_ID +SQL_PLAN_OPERATION +SQL_PLAN_OPTIONS +SQL_PROFILE +SQL_REDO +SQL_SCHEMA +SQL_SEQ +SQL_STMT +SQL_TEXT +SQL_TEXT_PIECE +SQL_TRACE +SQL_TRACE_BINDS +SQL_TRACE_PLAN_STATS +SQL_TRACE_WAITS +SQL_TRANSLATION_PROFILE +SQL_TRANSLATION_PROFILE_ID +SQL_TUNE_ADVISOR +SQL_TXT. +SQL_TYPE +SQL_TYPE_MISMATCH +SQL_UNDO +SRC_CON_DBID +SRC_CON_GUID +SRC_CON_ID +SRC_CON_NAME +SRC_CON_UID +SRC_DBID +SRC_DBNAME +SRC_INCIDENT +SRC_INCIDENT_ID +SRC_QUEUE_NAME +SRC_QUEUE_SCHEMA +SRL +SRV_BUSY +SRV_BYTES +SRV_IDLE +SRV_IN_NET +SRV_MESSAGES +SRV_OUT_NET +SSN +SSOLDERRCNT +SSVCNAME +SSX_2_X +SS_2_NULL +SS_2_RLS +STAGE +STAGING_DATABASE +STAGING_LOG +STAGING_LOG_NAME +STALE +STALENESS +STALE_SINCE +STALE_STATS +STAMP +STANDARD. +STANDARD. SYS$DSINTERVALSUBTRACT +STANDARD. SYS$EXTRACT_FROM +STANDARD. SYS$EXTRACT_STRING_FROM +STANDARD. SYS$STANDARD_CHR +STANDARD. SYS$STANDARD_TRANSLATE +STANDARD. SYS$STANDARD_TRIM +STANDARD. SYS$YMINTERVALSUBTRACT +STANDARD.ABS +STANDARD.ACOS +STANDARD.ADD_MONTHS +STANDARD.ASCII +STANDARD.ASCIISTR +STANDARD.ASIN +STANDARD.ATAN +STANDARD.ATAN2 +STANDARD.BFILENAME +STANDARD.BITAND +STANDARD.CARDINALITY +STANDARD.CEIL +STANDARD.CHARTOROWID +STANDARD.CHR +STANDARD.COALESCE +STANDARD.COMMIT +STANDARD.COMMIT_CM +STANDARD.COMPOSE +STANDARD.CONCAT +STANDARD.CONTINUE +STANDARD.CONVERT +STANDARD.COS +STANDARD.COSH +STANDARD.CUBE +STANDARD.CURRENT_DATE +STANDARD.CURRENT_TIME +STANDARD.CURRENT_TIMESTAMP +STANDARD.DBTIMEZONE +STANDARD.DECODE +STANDARD.DECOMPOSE +STANDARD.DEREF +STANDARD.DUMP +STANDARD.EMPTY_BLOB +STANDARD.EMPTY_CLOB +STANDARD.EXISTS +STANDARD.EXP +STANDARD.FLOOR +STANDARD.FROM_TZ +STANDARD.GLB +STANDARD.GREATEST +STANDARD.GREATEST_LB +STANDARD.GROUPING +STANDARD.HEXTORAW +STANDARD.INITCAP +STANDARD.INSTR +STANDARD.INSTR2 +STANDARD.INSTR4 +STANDARD.INSTRB +STANDARD.INSTRC +STANDARD.ISNCHAR +STANDARD.LAST_DAY +STANDARD.LEAST +STANDARD.LEAST_UB +STANDARD.LENGTH +STANDARD.LENGTH2 +STANDARD.LENGTH4 +STANDARD.LENGTHB +STANDARD.LENGTHC +STANDARD.LEVEL +STANDARD.LN +STANDARD.LOCALTIME +STANDARD.LOCALTIMESTAMP +STANDARD.LOG +STANDARD.LOWER +STANDARD.LPAD +STANDARD.LTRIM +STANDARD.LUB +STANDARD.MONTHS_BETWEEN +STANDARD.NANVL +STANDARD.NCHARTOROWID +STANDARD.NCHR +STANDARD.NEW_TIME +STANDARD.NEXT_DAY +STANDARD.NHEXTORAW +STANDARD.NLSSORT +STANDARD.NLS_CHARSET_DECL_LEN +STANDARD.NLS_CHARSET_ID +STANDARD.NLS_CHARSET_NAME +STANDARD.NLS_INITCAP +STANDARD.NLS_LOWER +STANDARD.NLS_UPPER +STANDARD.NULLFN +STANDARD.NULLIF +STANDARD.NUMTODSINTERVAL +STANDARD.NUMTOYMINTERVAL +STANDARD.NVL +STANDARD.POWER +STANDARD.RAWTOHEX +STANDARD.RAWTONHEX +STANDARD.REF +STANDARD.REGEXP_COUNT +STANDARD.REGEXP_INSTR +STANDARD.REGEXP_LIKE +STANDARD.REGEXP_REPLACE +STANDARD.REGEXP_SUBSTR +STANDARD.REMAINDER +STANDARD.REPLACE +STANDARD.ROLLBACK_NR +STANDARD.ROLLBACK_SV +STANDARD.ROLLUP +STANDARD.ROUND +STANDARD.ROWID +STANDARD.ROWIDTOCHAR +STANDARD.ROWIDTONCHAR +STANDARD.ROWLABEL +STANDARD.ROWNUM +STANDARD.RPAD +STANDARD.RTRIM +STANDARD.SAVEPOINT +STANDARD.SESSIONTIMEZONE +STANDARD.SET +STANDARD.SET_TRANSACTION_USE +STANDARD.SIGN +STANDARD.SIN +STANDARD.SINH +STANDARD.SOUNDEX +STANDARD.SQLCODE +STANDARD.SQLERRM +STANDARD.SQRT +STANDARD.SUBSTR +STANDARD.SUBSTR2 +STANDARD.SUBSTR4 +STANDARD.SUBSTRB +STANDARD.SUBSTRC +STANDARD.SYS$LOB_REPLICATION +STANDARD.SYSDATE +STANDARD.SYSTIMESTAMP +STANDARD.SYS_AT_TIME_ZONE +STANDARD.SYS_CONTEXT +STANDARD.SYS_EXTRACT_UTC +STANDARD.SYS_GUID +STANDARD.SYS_LITERALTODATE +STANDARD.SYS_LITERALTODSINTERVAL +STANDARD.SYS_LITERALTOTIME +STANDARD.SYS_LITERALTOTIMESTAMP +STANDARD.SYS_LITERALTOTZTIME +STANDARD.SYS_LITERALTOTZTIMESTAMP +STANDARD.SYS_LITERALTOYMINTERVAL +STANDARD.TAN +STANDARD.TANH +STANDARD.TO_ANYLOB +STANDARD.TO_BINARY_DOUBLE +STANDARD.TO_BINARY_FLOAT +STANDARD.TO_BLOB +STANDARD.TO_CHAR +STANDARD.TO_CLOB +STANDARD.TO_DATE +STANDARD.TO_DSINTERVAL +STANDARD.TO_LABEL +STANDARD.TO_MULTI_BYTE +STANDARD.TO_NCHAR +STANDARD.TO_NCLOB +STANDARD.TO_NUMBER +STANDARD.TO_RAW +STANDARD.TO_SINGLE_BYTE +STANDARD.TO_TIME +STANDARD.TO_TIMESTAMP +STANDARD.TO_TIMESTAMP_TZ +STANDARD.TO_TIME_TZ +STANDARD.TO_YMINTERVAL +STANDARD.TRANSLATE +STANDARD.TRIM +STANDARD.TRUNC +STANDARD.TZ_OFFSET +STANDARD.UID +STANDARD.UNISTR +STANDARD.UPPER +STANDARD.UROWID +STANDARD.USER +STANDARD.USERENV +STANDARD.VALUE +STANDARD.VSIZE +STANDARD.XOR +STANDARD_DEVIATION +STANDBY_BECAME_PRIMARY_SCN +STANDBY_DEST +STANDBY_LOGFILE_ACTIVE +STANDBY_LOGFILE_COUNT +STAR +STARTDBA +STARTOFFSET +STARTS +STARTTIME +STARTUP +STARTUP_TIME +START_DATE +START_DBA +START_DELAY_SECS +START_ID +START_MONITORING +START_ROWID +START_SCN +START_SCNB +START_SCNW +START_SNAP_ID +START_SNAP_TIME +START_SUBSHARD_ID +START_TIME +START_TIMESTAMP +START_TS +START_UBABLK +START_UBAFIL +START_UBAREC +START_UBASQN +START_UEXT +START_WITH +STAR_TRANSFORMATION +STATE +STATEFUL +STATELESS +STATEMENT +STATEMENTID +STATEMENT_COUNT +STATEMENT_ID +STATEMENT_OPT +STATEMENT_QUEUING +STATEMENT_SCN +STATEMENT_TYPE +STATE_CHANGED_TIME +STATE_TRANSITION_NUMBER +STATIC +STATIC_FIELDS +STATIC_METHODS +STATIC_POLICY +STATISTIC +STATISTIC# +STATISTICS +STATISTICS_NAME +STATISTICS_TYPE +STATISTICS_VALUE +STATISTICS_VIEW_NAME +STATISTIC_NAME +STATISTIC_TIME +STATISTIC_UNIT +STATISTIC_VALUE +STATSTYPE_NAME +STATSTYPE_SCHEMA +STATS_ROW_MISMATCH +STATS_UPDATE_TIME +STATTYPE_LOCKED +STATUS +STATUS# +STATUS_CHANGE_TIME +STATUS_CODE +STATUS_MESSAGE +STATUS_QUEUE +STATUS_STR +STATUS_UPDATE_DATE +STATUS_UPDATE_TIME +STATUS_WEIGHT +STAT_ID +STAT_NAME +STAT_PERIOD +STB_OBJECT_MISMATCH +STEADY_STATE_DURATION +STEP +STEP_JOB_LOG_ID +STEP_JOB_SUBNAME +STEP_NAME +STEP_NUMBER +STEP_TYPE +STID +STMT_ID +STOP_ON_DDL +STOP_ON_WINDOW_CLOSE +STOP_REPLAY +STORAGE_SIZE +STORAGE_SPEC +STORAGE_TYPE +STORECOMMAND +STOREFLAGS +STORENAME +STOREOWNER +STORE_NAME +STORE_OUTPUT +STORE_OWNER +STRAGG. +STREAMS +STREAMS_NAME +STREAMS_POOL_SIZE_FACTOR +STREAMS_POOL_SIZE_FOR_ESTIMATE +STREAMS_RULE_TYPE +STREAMS_TYPE +STREAM_ID +STREAM_SEQUENCE# +STRIDE +STRING_AGG_TYPE.ODCIAGGREGATEINITIALIZE +STRING_AGG_TYPE.ODCIAGGREGATEITERATE +STRING_AGG_TYPE.ODCIAGGREGATEMERGE +STRING_AGG_TYPE.ODCIAGGREGATETERMINATE +STRING_TO_GRANTPATH. +STRIPE +STRIPED +STRIPE_COLUMNS +STRIPE_SIZE +STRIPE_WIDTH_K +STRP_BLK_ID +STRP_CTRL_ID +STRUCTURE +ST_ANNOTATIONTEXTELEMENT.LEADERLINE +ST_ANNOTATIONTEXTELEMENT.LOCATION +ST_ANNOTATIONTEXTELEMENT.TEXTATTRIBUTES +ST_ANNOTATIONTEXTELEMENT.VALUE +ST_ANNOTATIONTEXTELEMENT_ARRAY.ELEMENTN +ST_ANNOTATION_TEXT.CONCAT +ST_ANNOTATION_TEXT.ELEMENT_ARRAY +ST_ANNOTATION_TEXT.ENVELOPE +ST_ANNOTATION_TEXT.ST_ANNOTATION_TEXT +ST_CIRCULARSTRING.ST_CIRCULARSTRING +ST_CIRCULARSTRING.ST_POINTS +ST_COMPOUNDCURVE.ST_COMPOUNDCURVE +ST_COMPOUNDCURVE.ST_CURVEN +ST_COMPOUNDCURVE.ST_CURVES +ST_COMPOUNDCURVE.ST_NUMCURVES +ST_CURVE.ST_DIMENSION +ST_CURVE.ST_ENDPOINT +ST_CURVE.ST_ISCLOSED +ST_CURVE.ST_ISRING +ST_CURVE.ST_ISSIMPLE +ST_CURVE.ST_LENGTH +ST_CURVE.ST_MIDPOINTREP +ST_CURVE.ST_NUMPOINTS +ST_CURVE.ST_POINTN +ST_CURVE.ST_POINTS +ST_CURVE.ST_STARTPOINT +ST_CURVEPOLYGON.ST_CURVEPOLYGON +ST_CURVEPOLYGON.ST_EXTERIORRING +ST_CURVEPOLYGON.ST_INTERIORRINGN +ST_CURVEPOLYGON.ST_INTERIORRINGS +ST_CURVEPOLYGON.ST_NUMINTERIORRING +ST_GEOMCOLLECTION.ST_DIMENSION +ST_GEOMCOLLECTION.ST_GEOMCOLLECTION +ST_GEOMCOLLECTION.ST_GEOMETRIES +ST_GEOMETRY.FROM_SDO_GEOM +ST_GEOMETRY.FROM_WKB +ST_GEOMETRY.FROM_WKT +ST_GEOMETRY.GET_SDO_GEOM +ST_GEOMETRY.GET_WKB +ST_GEOMETRY.GET_WKT +ST_GEOMETRY.ST_ASBINARY +ST_GEOMETRY.ST_ASTEXT +ST_GEOMETRY.ST_BOUNDARY +ST_GEOMETRY.ST_BUFFER +ST_GEOMETRY.ST_CENTROID +ST_GEOMETRY.ST_CONTAINS +ST_GEOMETRY.ST_CONVEXHULL +ST_GEOMETRY.ST_COORDDIM +ST_GEOMETRY.ST_CROSS +ST_GEOMETRY.ST_CROSSES +ST_GEOMETRY.ST_DIFFERENCE +ST_GEOMETRY.ST_DIMENSION +ST_GEOMETRY.ST_DISJOINT +ST_GEOMETRY.ST_DISTANCE +ST_GEOMETRY.ST_ENVELOPE +ST_GEOMETRY.ST_EQUALS +ST_GEOMETRY.ST_GEOMETRYTYPE +ST_GEOMETRY.ST_GEOMFROMTEXT +ST_GEOMETRY.ST_GEOMFROMWKB +ST_GEOMETRY.ST_GETTOLERANCE +ST_GEOMETRY.ST_INTERSECTION +ST_GEOMETRY.ST_INTERSECTS +ST_GEOMETRY.ST_ISEMPTY +ST_GEOMETRY.ST_ISSIMPLE +ST_GEOMETRY.ST_ISVALID +ST_GEOMETRY.ST_OVERLAP +ST_GEOMETRY.ST_RELATE +ST_GEOMETRY.ST_SRID +ST_GEOMETRY.ST_SYMDIFFERENCE +ST_GEOMETRY.ST_SYMMETRICDIFFERENCE +ST_GEOMETRY.ST_TOUCH +ST_GEOMETRY.ST_TOUCHES +ST_GEOMETRY.ST_UNION +ST_GEOMETRY.ST_WITHIN +ST_LINESTRING.ST_ISSIMPLE +ST_LINESTRING.ST_LINESTRING +ST_LINESTRING.ST_POINTS +ST_MULTICURVE.ST_DIMENSION +ST_MULTICURVE.ST_ISCLOSED +ST_MULTICURVE.ST_ISSIMPLE +ST_MULTICURVE.ST_LENGTH +ST_MULTICURVE.ST_MULTICURVE +ST_MULTILINESTRING.ST_MULTILINESTRING +ST_MULTIPOINT.ST_DIMENSION +ST_MULTIPOINT.ST_ISSIMPLE +ST_MULTIPOINT.ST_MULTIPOINT +ST_MULTIPOLYGON.ST_BDMPOLYFROMTEXT +ST_MULTIPOLYGON.ST_BDMPOLYFROMWKB +ST_MULTIPOLYGON.ST_MULTIPOLYGON +ST_MULTISURFACE.ST_AREA +ST_MULTISURFACE.ST_DIMENSION +ST_MULTISURFACE.ST_MULTISURFACE +ST_MULTISURFACE.ST_POINTONSURFACE +ST_POINT.ST_DIMENSION +ST_POINT.ST_EXPLICITPOINT +ST_POINT.ST_POINT +ST_POINT.ST_X +ST_POINT.ST_Y +ST_POLYGON.ST_BDPOLYFROMTEXT +ST_POLYGON.ST_BDPOLYFROMWKB +ST_POLYGON.ST_EXTERIORRING +ST_POLYGON.ST_INTERIORRINGN +ST_POLYGON.ST_INTERIORRINGSP +ST_POLYGON.ST_POLYGON +ST_SURFACE.ST_AREA +ST_SURFACE.ST_DIMENSION +ST_SURFACE.ST_POINTONSURFACE +SUBCACHE# +SUBCACHE_NAME +SUBHEAP_DESC +SUBJECT +SUBNAME +SUBOBJECT_NAME +SUBORDINATE# +SUBPARTITIONING_KEY_COUNT +SUBPARTITIONING_TYPE +SUBPARTITION_COUNT +SUBPARTITION_NAME +SUBPARTITION_POSITION +SUBPOLICY# +SUBPROGRAM_ID +SUBPTXT. +SUBPTXT2. +SUBQUERY_PRUNING +SUBSCRIBER_ADDRESS +SUBSCRIBER_ID +SUBSCRIBER_NAME +SUBSCRIBER_TYPE +SUBSCRIPTION +SUBSCRIPTION_NAME +SUBSETTING_OPERATION +SUBSHARD_ID +SUBSTITUTABLE +SUB_COMPONENT_TYPE +SUB_FLAGS +SUB_NUM +SUB_PARTITION_LEVEL_NAME +SUB_PARTITION_LEVEL_ORDER +SUB_PLAN +SUB_POLICY +SUB_SIZE +SUCCESS +SUCC_REQ# +SUGGESTED_ACTION +SUMMARY +SUMMARY_ID +SUMMARY_NAME +SUM_CPU_TIME +SUM_SCAN +SUM_SQUARES +SUM_SYS_IO_WAIT +SUM_USER_IO_WAIT +SUM_WRITE +SUPER +SUPERTYPE_NAME +SUPERTYPE_OWNER +SUPERVIEW_NAME +SUPPLEMENTAL_ATTRIBUTES +SUPPLEMENTAL_DETAILS +SUPPLEMENTAL_LOG_DATA_ALL +SUPPLEMENTAL_LOG_DATA_FK +SUPPLEMENTAL_LOG_DATA_MIN +SUPPLEMENTAL_LOG_DATA_PK +SUPPLEMENTAL_LOG_DATA_PL +SUPPLEMENTAL_LOG_DATA_UI +SUPPORT_LEVEL +SUPPORT_MODE +SUSPECT +SUSPECT_COMPONENT +SUSPECT_SUBCOMPONENT +SUSPEND_TIME +SVRNAME +SVR_ID +SWAP_JOIN_INPUTS +SWEEP_TIME +SWITCHES_IN_CPU_TIME +SWITCHES_IN_ELAPSED_TIME +SWITCHES_IN_IO_LOGICAL +SWITCHES_IN_IO_MEGABYTES +SWITCHES_IN_IO_REQUESTS +SWITCHES_OUT_CPU_TIME +SWITCHES_OUT_ELAPSED_TIME +SWITCHES_OUT_IO_LOGICAL +SWITCHES_OUT_IO_MEGABYTES +SWITCHES_OUT_IO_REQUESTS +SWITCHOVER# +SWITCHOVER_STATUS +SWITCH_CHANGE# +SWITCH_ELAPSED_TIME +SWITCH_ESTIMATE +SWITCH_FOR_CALL +SWITCH_GROUP +SWITCH_IO_LOGICAL +SWITCH_IO_MEGABYTES +SWITCH_IO_REQS +SWITCH_TIME +SWITCH_TIME_IN_CALL +SYN +SYNCHRONIZATION +SYNCHRONIZATION_STATUS +SYNCHRONIZED +SYNCRN. +SYNC_CAPTURE_REASON +SYNC_CAPTURE_VERSION +SYNC_TIME +SYNONYM_NAME +SYS$RAWTOANY. +SYSASM +SYSBACKUP +SYSDATE_VALUE +SYSDATE_VALUES_CAPTURED +SYSDATE_VALUES_REPLAYED +SYSDBA +SYSDG +SYSEVENT. +SYSGUID_VALUE +SYSGUID_VALUES_CAPTURED +SYSGUID_VALUES_REPLAYED +SYSKM +SYSLSBY_EDS_DDL_TRIG. +SYSOPER +SYSTEM +SYSTEM_CREATED +SYSTEM_DEFINED +SYSTEM_PRIVILEGE +SYSTEM_PRIVILEGE_USED +SYSTEM_STATUS +SYSTEM_TASK +SYSTIMESTAMP_VALUE +SYSTIMESTAMP_VALUES_CAPTURED +SYSTIMESTAMP_VALUES_REPLAYED +SYS_DL_CURSOR +SYS_IXMLAGG. +SYS_IXQAGG. +SYS_IXQAGGAVG. +SYS_IXQAGGSUM. +SYS_NT_COLLECT. +SYS_NT_COLLECT_IMP.ODCIAGGREGATEINITIALIZE +SYS_NT_COLLECT_IMP.ODCIAGGREGATEITERATE +SYS_NT_COLLECT_IMP.ODCIAGGREGATEMERGE +SYS_NT_COLLECT_IMP.ODCIAGGREGATETERMINATE +SYS_PARALLEL_TXN +SYS_PRIV +SYS_PRIVILEGE +SYS_RID_ORDER +SYS_STUB_FOR_PURITY_ANALYSIS. +SYS_STUB_FOR_PURITY_ANALYSIS.PRDS +SYS_STUB_FOR_PURITY_ANALYSIS.PRPS +SYS_STUB_FOR_PURITY_ANALYSIS.PWDS +SYS_STUB_FOR_PURITY_ANALYSIS.PWPS +SYS_USAGE_AVG +SYS_USAGE_SUM +SYS_USAGE_SUMX2 +SYS_XMLAGG. +S_2_NULL +S_2_NULL_FORCED_STALE +S_2_X +TAB1_COLUMN +TAB1_NAME +TAB1_OWNER +TAB2_COLUMN +TAB2_NAME +TAB2_OWNER +TABLEOBJ# +TABLESPACE +TABLESPACE_ID +TABLESPACE_MAXSIZE +TABLESPACE_NAME +TABLESPACE_PROCESSED +TABLESPACE_SELECTED +TABLESPACE_SIZE +TABLESPACE_USEDSIZE +TABLE_ALIAS +TABLE_COLUMN_ID +TABLE_COLUMN_NAME +TABLE_CRT_SCN +TABLE_CRT_TIME +TABLE_LOCK +TABLE_LOOKUP_BY_NL +TABLE_NAME +TABLE_NUM +TABLE_OWNER +TABLE_PRIVILEGES +TABLE_SCANS_DELTA +TABLE_SCANS_TOTAL +TABLE_SCHEMA +TABLE_SEQUENCE +TABLE_SPACE +TABLE_STATS +TABLE_TYPE +TABLE_TYPE_NAME +TABLE_TYPE_OWNER +TABLE_VERSION +TABNAME +TABS +TAB_COLUMN_NAME +TAB_NAME +TADDR +TAG +TAGS +TAG_NAME +TAKE_BEGIN_SNAPSHOT +TAKE_END_SNAPSHOT +TALLOC +TARBALLID +TARENDOFFSET +TARGET +TARGETINFO_ID +TARGET_BUFFERS +TARGET_COMMENT +TARGET_DATABASE +TARGET_DESC +TARGET_DIMENSION_NAME +TARGET_INSTANCE +TARGET_INSTANCE_NUMBER +TARGET_LEVEL +TARGET_MTTR +TARGET_NAMESPACE +TARGET_OBJN +TARGET_REDO_BLKS +TARGET_ROLE +TARGET_SIZE +TARGET_TYPE +TARGET_USER +TARGET_USER_TYPE +TARSTARTOFFSET +TASK_COMMENT +TASK_CON_DBID +TASK_EXEC_NAME +TASK_EXPIRY_TIME +TASK_FND_ID +TASK_ID +TASK_NAME +TASK_NUMBER +TASK_OBJ_ID +TASK_OPERATION +TASK_OWNER +TASK_PRIORITY +TASK_READY_TIME +TASK_REC_ID +TASK_START_TIME +TASK_STATUS +TASK_SUBMIT_TIME +TASK_TARGET_NAME +TASK_TARGET_TYPE +TASK_TYPE +TBLCONTAINSADT. +TBS_ID +TCKT_AVAIL +TCKT_LIMIT +TCKT_RCVD +TCKT_WAIT +TEMP +TEMPERATURE +TEMPLATE_COMMENT +TEMPLATE_ID +TEMPLATE_NAME +TEMPLATE_OWNER +TEMPLATE_TARGET_ID +TEMPLATE_TYPE +TEMPORARY +TEMPORARY_TABLESPACE +TEMPSEG_SIZE +TEMP_SPACE +TEMP_SPACE_ALLOCATED +TEMP_SPACE_PAGES +TEMP_SPACE_READS +TERMINAL +TERMINAL_RELEASE +TERM_INDEX +TEST. +TEST.P +TESTEXEC_FIRST_EXEC_IGNORED +TESTEXEC_TOTAL_EXECS +TEXT +TEXTINDEXMETHODS.ODCIGETINTERFACES +TEXTINDEXMETHODS.ODCIINDEXALTER +TEXTINDEXMETHODS.ODCIINDEXCLOSE +TEXTINDEXMETHODS.ODCIINDEXCREATE +TEXTINDEXMETHODS.ODCIINDEXDELETE +TEXTINDEXMETHODS.ODCIINDEXDROP +TEXTINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +TEXTINDEXMETHODS.ODCIINDEXFETCH +TEXTINDEXMETHODS.ODCIINDEXGETMETADATA +TEXTINDEXMETHODS.ODCIINDEXINSERT +TEXTINDEXMETHODS.ODCIINDEXMERGEPARTITION +TEXTINDEXMETHODS.ODCIINDEXSPLITPARTITION +TEXTINDEXMETHODS.ODCIINDEXSTART +TEXTINDEXMETHODS.ODCIINDEXTRUNCATE +TEXTINDEXMETHODS.ODCIINDEXUPDATE +TEXTINDEXMETHODS.ODCIINDEXUTILCLEANUP +TEXTINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +TEXTOPTSTATS.ODCIGETINTERFACES +TEXTOPTSTATS.ODCISTATSCOLLECT +TEXTOPTSTATS.ODCISTATSDELETE +TEXTOPTSTATS.ODCISTATSFUNCTIONCOST +TEXTOPTSTATS.ODCISTATSINDEXCOST +TEXTOPTSTATS.ODCISTATSSELECTIVITY +TEXT_LENGTH +TEXT_VC +TFM_PLAN.ADD_STEP +TFM_PLAN.EXPAND_CHAIN_ELEMENT_CORE +TFM_PLAN.EXPAND_CONCAT_CHAIN_ELEMENT +TFM_PLAN.EXPAND_CONCAT_CHAIN_ELEMENTS +TFM_PLAN.EXPAND_FOR_CHAIN_ELEMENT_CORE +TFM_PLAN.EXPAND_INV_CHAIN_ELEMENT_CORE +TFM_PLAN.GET_NUM_STEPS +TFM_PLAN.GET_STEP +TFM_PLAN.TFM_PLAN +TFREE +THINK_TIME +THINK_TIME_AUTO_CORRECT +THINK_TIME_SCALE +THIS_DATE +THIS_SEC +THREAD +THREAD# +THREADED +THREAD_ID +THREAD_INSTANCE_NUMBER +THREAD_SQN +THRESHOLD +THRESHOLD_TYPE +THROWS +TIER_STATUS +TIER_TABLESPACE +TIME +TIMEOUT +TIMEOUTS +TIMESTAMP +TIMESTAMP_TO_SCN. +TIMEZONE +TIME_COMPUTED +TIME_DETECTED +TIME_ENTERED +TIME_GAIN +TIME_INDEX_BLOCKS_FREED +TIME_LOSS +TIME_MODEL +TIME_NEEDED +TIME_REMAINING +TIME_REMAINING_MICRO +TIME_REMAINING_SECS +TIME_SINCE_LAST_WAIT_MICRO +TIME_SINCE_LAST_WAIT_SECS +TIME_STAMP +TIME_SUGGESTED +TIME_TAKEN_DISPLAY +TIME_TO_POPULATE +TIME_WAITED +TIME_WAITED_FG +TIME_WAITED_MICRO +TIME_WAITED_MICRO_FG +TIV_GB +TIV_SSF +TMGR_CPU_TIME +TMGR_ELAPSED_TIME +TMGR_ROWS_PROCESSED +TM_DELTA_CPU_TIME +TM_DELTA_DB_TIME +TM_DELTA_TIME +TOP +TOPNSQL +TOP_ERROR1 +TOP_ERROR2 +TOP_LEVEL_CALL# +TOP_LEVEL_CALL_NAME +TOP_LEVEL_DDL_MISMATCH +TOP_LEVEL_RPI_CURSOR +TOP_LEVEL_SQL_ID +TOP_LEVEL_SQL_OPCODE +TOP_SESSION_ID +TOP_SESSION_SERIAL# +TOTAL +TOTALQ +TOTALWORK +TOTAL_ACCESS +TOTAL_ACTIONS +TOTAL_ADMIN +TOTAL_ALLOC +TOTAL_ANONYMOUS_NTFN_TIME +TOTAL_APPLIED +TOTAL_AQ_NTFN_TIME +TOTAL_ASSIGNED +TOTAL_AVAILABLE_MESSAGES +TOTAL_BLOCKS +TOTAL_BYTES +TOTAL_CHUNKS +TOTAL_CONSUMERS +TOTAL_CPU_LAST_30_DAYS +TOTAL_CPU_LAST_7_DAYS +TOTAL_CPU_TIME +TOTAL_CR_ACCESS +TOTAL_DATABASES +TOTAL_DBCHANGE_NTFN_TIME +TOTAL_DEALLOC +TOTAL_DELETES +TOTAL_DEQUEUED_MSG +TOTAL_ELAPSED_TIME +TOTAL_EMAIL_NTFN_TIME +TOTAL_EMON_LATENCY +TOTAL_ERRORS +TOTAL_EXECUTIONS +TOTAL_EXEC_TIME +TOTAL_EXTENTS +TOTAL_FREE +TOTAL_FULL_EVALUATIONS +TOTAL_HTTP_NTFN_TIME +TOTAL_HUNG_SESSIONS +TOTAL_IGNORED +TOTAL_INSERTS +TOTAL_IN_MEMORY_LCRS +TOTAL_LATENCY +TOTAL_LCRS_COUNT +TOTAL_LCRS_RETRIED +TOTAL_LCRS_WITH_DEP +TOTAL_LCRS_WITH_WMDEP +TOTAL_MAT_MB +TOTAL_MB +TOTAL_MEMORY_ALLOCATED +TOTAL_MESSAGES_APPLIED +TOTAL_MESSAGES_CAPTURED +TOTAL_MESSAGES_CREATED +TOTAL_MESSAGES_DEQUEUED +TOTAL_MESSAGES_ENQUEUED +TOTAL_MESSAGES_RECEIVED +TOTAL_MESSAGES_SENT +TOTAL_MESSAGES_SPILLED +TOTAL_MESSAGE_COUNT +TOTAL_MSGS +TOTAL_NUMBER +TOTAL_OCI_NTFN_TIME +TOTAL_PAYLOAD_BYTES_SENT +TOTAL_PENDING_NTFN_BYTES +TOTAL_PLSQL_EXEC_TIME +TOTAL_PLSQL_NTFN_TIME +TOTAL_POSTCOST +TOTAL_PRECOST +TOTAL_PREFILTER_DISCARDED +TOTAL_PREFILTER_EVALUATIONS +TOTAL_PREFILTER_KEPT +TOTAL_RECEIVED +TOTAL_REQ# +TOTAL_ROLLBACKS +TOTAL_ROWS +TOTAL_RUNS +TOTAL_SAMPLES +TOTAL_SHARABLE_MEM +TOTAL_SIZE +TOTAL_SNAP_SPACE_USAGE +TOTAL_SPILLED_MSG +TOTAL_SQL +TOTAL_SQL_MEM +TOTAL_STMTS +TOTAL_TASKS_EXECUTED +TOTAL_TASK_FAILURES +TOTAL_TASK_LATENCY +TOTAL_TASK_RUNS +TOTAL_TASK_RUN_TIME +TOTAL_TIME +TOTAL_TIMEOUTS +TOTAL_TIMEOUTS_FG +TOTAL_TRANSACTION +TOTAL_TRANSACTIONS_RETRIED +TOTAL_TRANSACTIONS_SENT +TOTAL_TRANSACTION_CPU_TIME +TOTAL_TRANSACTION_TIME +TOTAL_TXNS_RECORDED +TOTAL_TXNS_RETRIED +TOTAL_UPDATES +TOTAL_USAGE +TOTAL_WAIT +TOTAL_WAIT# +TOTAL_WAITS +TOTAL_WAITS_FG +TOTAL_WAIT_COMMITS +TOTAL_WAIT_DEPS +TOTSIZE +TO_ADDRESS +TO_COLUMN_NAME +TO_HASH +TO_LABEL_LIST. +TO_LABEL_LIST.FROM_LABEL +TO_LBAC_DATA_LABEL. +TO_LBAC_DATA_LABEL_INTERNAL. +TO_LBAC_LABEL. +TO_LBAC_LABEL_INTERNAL. +TO_NAME +TO_NUMERIC_DATA_LABEL. +TO_NUMERIC_LABEL. +TO_NUMERIC_LABEL_INTERNAL. +TO_OWNER +TO_SCHEMA_NAME +TO_TABLE_NAME +TO_TYPE +TO_VAL +TPT. +TPT.GET_SQL_HASH +TPT.SLEEP +TPT.SQLID_TO_SQLHASH +TQ_ID +TRACE +TRACEFILE +TRACEID +TRACE_TRANSLATION +TRACE_TYPE +TRACING +TRACKING_ID +TRACKING_LABEL +TRACK_TIME +TRANSACTIONID +TRANSACTIONS +TRANSACTIONS_TOTAL +TRANSACTION_CPU_TIME +TRANSACTION_ID +TRANSACTION_ID0 +TRANSACTION_ID1 +TRANSACTION_MESSAGE_NUMBER +TRANSACTION_TIME +TRANSFERABLE +TRANSFER_LATENCY +TRANSFORMATION +TRANSFORMATION_ID +TRANSFORMATION_NAME +TRANSFORMATION_OWNER +TRANSFORMED_LEN +TRANSFORM_DISTINCT_AGG +TRANSFORM_FUNCTION_NAME +TRANSFORM_MAP. +TRANSFORM_MAP.DATA_DELETE +TRANSFORM_MAP.DATA_INSERT +TRANSFORM_TYPE +TRANSIENT_INCIDENT_LIFETIME +TRANSIENT_INCIDENT_LIFE_TIME +TRANSLATED_CODE +TRANSLATED_SQLSTATE +TRANSLATED_TEXT +TRANSLATE_ID +TRANSLATE_NEW_SQL +TRANSLATION_MISMATCH +TRANSLATOR +TRANSMIT_MODE +TRAN_COMMENT +TRICKLE_REPOPULATED +TRIGGERING_EVENT +TRIGGER_BODY +TRIGGER_NAME +TRIGGER_OWNER +TRIGGER_TYPE +TRUE_HITS +TRUE_HIT_RATIO +TRUE_RULES +TRUNCATED +TS# +TS1 +TS2 +TS3 +TSDP$DATAPUMP. +TSDP$DATAPUMP.INSTANCE_CALLOUT_IMP +TSDP$VALIDATION_CHECK. +TSDP_POLICY +TSN +TSNAME +TSV +TS_NAME +TTIME +TTL_BUF +TTL_CLT_BUF +TTL_IN_CONNECT +TTL_LOOPS +TTL_MSG +TTL_OUT_CONNECT +TTL_RECONNECT +TTL_SVR_BUF +TUNED_UNDORETENTION +TXN +TXNCOUNT +TXNS_ENQUEUED +TXNS_PURGED +TXN_CONF_SQL_ID +TXN_NAME +TXN_RETRY_ITERATION +TX_NAME +TX_REQUESTS +TYPCHK_DEP_MISMATCH +TYPE +TYPE# +TYPECHECK_MEM +TYPECHECK_MISMATCH +TYPECODE +TYPEID +TYPE_CHK_HEAP +TYPE_HASHCODE +TYPE_ID +TYPE_LINK +TYPE_MOD +TYPE_NAME +TYPE_OID +TYPE_OWNER +TYPE_SCHEMA +TYPE_SIZE +TYPE_SUBNAME +TYPE_TEXT +TYPE_TEXT_LENGTH +TYPE_TOID +TZABBREV +TZNAME +UBABLK +UBAFIL +UBAREC +UBASQN +UDID +UD_TRIGS. +UD_TRIGS.DROP_ALL_UDTRIG_DISPATCH_PROCS +UD_TRIGS.EXISTSTRIGGER +UD_TRIGS.GENUDTRIGDISPATCHER +UD_TRIGS.GETDISPATCHERINFO +UD_TRIGS.GETPARAMSTRS +UD_TRIGS.HASOWNERNAMEPREFIX +UD_TRIGS.INSERTTABLEOWNERNAME +UD_TRIGS.RECREATETRIGPROCSDG +UD_TRIGS.REGENUDTRIGDISPATCHER +UD_TRIGS.REGENUDTRIGPROCS +UD_TRIGS.REMOVEDOUBLEQUOTESINUSERNAME +UD_TRIGS.REPLACEOLDNEW +UD_TRIGS.SETGLOBALTRIGGERSETTING +UD_TRIGS.SETTRIGGEREVENTS +UD_TRIGS.SUBSTITUTETABLENAME +UD_TRIGS.TRF_UDTRGS_ON_COMMIT_DDL +UD_TRIGS.TRF_UDTRGS_ON_VER_DISABLE +UD_TRIGS.TRF_UDTRGS_ON_VER_ENABLE +ULE_COUNT +UNAME +UNASSIGNED_COMPLETE_TXN +UNASSIGNED_COMPLETE_TXNS +UNBOUND_CURSOR +UNBROWSED_MSGS +UNDER_PATH_FUNC. +UNDOBLKCNT +UNDOBLKS +UNDOBLOCKSDONE +UNDOBLOCKSTOTAL +UNDOTSN +UNDO_BLOCK +UNDO_BLOCK_DBLINK +UNDO_LIMIT_HIT +UNDO_OPTIMIZED +UNDO_OPT_CURRENT_CHANGE# +UNDO_POOL +UNDO_REQUESTS +UNDO_SQL +UNDO_SQL_SQN +UNDO_SQL_SUB_SQN +UNDO_VALUE +UNEXPIREDBLKS +UNIFIED_AUDIT_POLICIES +UNIQUENESS +UNIQUE_INDEX +UNIQUE_KEY_LEVEL_NAME +UNIQUE_SEQUENCES_CAPTURED +UNIT +UNITS +UNKNOWN_CONSIDER_FRESH +UNKNOWN_EXTERNAL_TABLE +UNKNOWN_IMPORT +UNKNOWN_PLSQL_FUNC +UNKNOWN_PREBUILT +UNKNOWN_TRUSTED_FD +UNNEST +UNRECOVERABLE_CHANGE# +UNRECOVERABLE_TIME +UNUSABLE +UNUSABLE_BEFORE +UNUSABLE_BEGINNING +UNXPBLKRELCNT +UNXPBLKREUCNT +UNXPSTEALCNT +UPD +UPDATABLE +UPDATED_ROWS +UPDATES +UPDATE_COLLISIONS +UPDATE_COMMENT +UPDATE_FREQ +UPDATE_JOB_HISTORY. +UPDATE_LOG +UPDATE_PROGRESS +UPDATE_SENT +UPDATE_TIME +UPDATE_TRIG +UPGRADE_IN_PROGRESS +UPLOAD_TIME +UPPER_BOUND +UPPER_PORT +UPSTREAM_COMP_ID +URIFACTORY. +URIFACTORY.ESCAPEURI +URIFACTORY.GETURI +URIFACTORY.REGISTERURLHANDLER +URIFACTORY.UNESCAPEURI +URIFACTORY.UNREGISTERURLHANDLER +URITYPE.GETBLOB +URITYPE.GETCLOB +URITYPE.GETCONTENTTYPE +URITYPE.GETEXTERNALURL +URITYPE.GETURL +URITYPE.GETXML +URITYPE.MAKEBLOBFROMCLOB +USABLE +USABLE_FILE_MB +USAGE +USAGE_CONTEXT_ID +USAGE_ID +USAGE_TYPE +USCOUNT +USED +USED_BLOCKS +USED_BYTES +USED_CHANGE_TRACKING +USED_COUNT +USED_EXTENTS +USED_LEN +USED_MEMORY_SIZE +USED_OPTIMIZATION +USED_PERCENT +USED_POS +USED_ROLE +USED_SPACE +USED_TOTAL +USED_UBLK +USED_UREC +USER +USER# +USERGROUP_INCARNATION +USERGROUP_NUMBER +USERHOST +USERID +USERIO_TIME +USERNAME +USERS_EXECUTING +USERS_MAX +USERS_OPENING +USER_ADDM_FDG_BREAKDOWN +USER_ADDM_FINDINGS +USER_ADDM_INSTANCES +USER_ADDM_TASKS +USER_ADDM_TASK_DIRECTIVES +USER_ADVISOR_ACTIONS +USER_ADVISOR_DIR_TASK_INST +USER_ADVISOR_EXECUTIONS +USER_ADVISOR_EXEC_PARAMETERS +USER_ADVISOR_FDG_BREAKDOWN +USER_ADVISOR_FINDINGS +USER_ADVISOR_JOURNAL +USER_ADVISOR_LOG +USER_ADVISOR_OBJECTS +USER_ADVISOR_PARAMETERS +USER_ADVISOR_RATIONALE +USER_ADVISOR_RECOMMENDATIONS +USER_ADVISOR_SQLA_COLVOL +USER_ADVISOR_SQLA_REC_SUM +USER_ADVISOR_SQLA_TABLES +USER_ADVISOR_SQLA_TABVOL +USER_ADVISOR_SQLA_WK_MAP +USER_ADVISOR_SQLA_WK_STMTS +USER_ADVISOR_SQLA_WK_SUM +USER_ADVISOR_SQLPLANS +USER_ADVISOR_SQLSTATS +USER_ADVISOR_SQLW_COLVOL +USER_ADVISOR_SQLW_JOURNAL +USER_ADVISOR_SQLW_PARAMETERS +USER_ADVISOR_SQLW_STMTS +USER_ADVISOR_SQLW_SUM +USER_ADVISOR_SQLW_TABLES +USER_ADVISOR_SQLW_TABVOL +USER_ADVISOR_SQLW_TEMPLATES +USER_ADVISOR_TASKS +USER_ADVISOR_TEMPLATES +USER_ALL_TABLES +USER_APPLY_ERROR +USER_AQ_AGENT_PRIVS +USER_ARGUMENTS +USER_ASSEMBLIES +USER_ASSOCIATIONS +USER_ATTRIBUTE_TRANSFORMATIONS +USER_AUDIT_OBJECT +USER_AUDIT_POLICIES +USER_AUDIT_POLICY_COLUMNS +USER_AUDIT_SESSION +USER_AUDIT_STATEMENT +USER_AUDIT_TRAIL +USER_AWS +USER_AW_OBJ +USER_AW_PROP +USER_AW_PS +USER_BASE_TABLE_MVIEWS +USER_BIND_PEEK_MISMATCH +USER_BLOCKS +USER_BYTES +USER_CALLS +USER_CALLS_TOTAL +USER_CALLS_UNREPLAYABLE +USER_CATALOG +USER_CHANGE_NOTIFICATION_REGS +USER_CLUSTERING_DIMENSIONS +USER_CLUSTERING_JOINS +USER_CLUSTERING_KEYS +USER_CLUSTERING_TABLES +USER_CLUSTERS +USER_CLUSTER_HASH_EXPRESSIONS +USER_CLU_COLUMNS +USER_CODE_ROLE_PRIVS +USER_COLL_TYPES +USER_COL_COMMENTS +USER_COL_PENDING_STATS +USER_COL_PRIVS +USER_COL_PRIVS_MADE +USER_COL_PRIVS_RECD +USER_COMMENT +USER_COMPARISON +USER_COMPARISON_COLUMNS +USER_COMPARISON_ROW_DIF +USER_COMPARISON_SCAN +USER_COMPARISON_SCAN_SUMMARY +USER_COMPARISON_SCAN_VALUES +USER_CONSTRAINTS +USER_CONS_COLUMNS +USER_CONS_OBJ_COLUMNS +USER_CONTEXT +USER_CQ_NOTIFICATION_QUERIES +USER_CREDENTIALS +USER_CUBES +USER_CUBE_ATTRIBUTES +USER_CUBE_ATTR_MAPPINGS +USER_CUBE_ATTR_UNIQUE_KEYS +USER_CUBE_ATTR_VISIBILITY +USER_CUBE_BUILD_PROCESSES +USER_CUBE_CALCULATED_MEMBERS +USER_CUBE_CLASSIFICATIONS +USER_CUBE_DEPENDENCIES +USER_CUBE_DESCRIPTIONS +USER_CUBE_DIMENSIONALITY +USER_CUBE_DIMENSIONS +USER_CUBE_DIMNL_MAPPINGS +USER_CUBE_DIM_LEVELS +USER_CUBE_DIM_MAPPINGS +USER_CUBE_DIM_MODELS +USER_CUBE_DIM_VIEWS +USER_CUBE_DIM_VIEW_COLUMNS +USER_CUBE_HIERARCHIES +USER_CUBE_HIER_LEVELS +USER_CUBE_HIER_VIEWS +USER_CUBE_HIER_VIEW_COLUMNS +USER_CUBE_MAPPINGS +USER_CUBE_MEASURES +USER_CUBE_MEAS_MAPPINGS +USER_CUBE_NAMED_BUILD_SPECS +USER_CUBE_VIEWS +USER_CUBE_VIEW_COLUMNS +USER_DATAPUMP_JOBS +USER_DBFS_HS +USER_DBFS_HS_COMMANDS +USER_DBFS_HS_FILES +USER_DBFS_HS_FIXED_PROPERTIES +USER_DBFS_HS_PROPERTIES +USER_DB_LINKS +USER_DEPENDENCIES +USER_DIMENSIONS +USER_DIM_ATTRIBUTES +USER_DIM_CHILD_OF +USER_DIM_HIERARCHIES +USER_DIM_JOIN_KEY +USER_DIM_LEVELS +USER_DIM_LEVEL_KEY +USER_EDITIONING_VIEWS +USER_EDITIONING_VIEWS_AE +USER_EDITIONING_VIEW_COLS +USER_EDITIONING_VIEW_COLS_AE +USER_ENCRYPTED_COLUMNS +USER_EPG_DAD_AUTHORIZATION +USER_ERRORS +USER_ERRORS_AE +USER_ERROR_TRANSLATIONS +USER_EVALUATION_CONTEXTS +USER_EVALUATION_CONTEXT_TABLES +USER_EVALUATION_CONTEXT_VARS +USER_EXTENTS +USER_EXTERNAL_LOCATIONS +USER_EXTERNAL_TABLES +USER_FILE_GROUPS +USER_FILE_GROUP_EXPORT_INFO +USER_FILE_GROUP_FILES +USER_FILE_GROUP_TABLES +USER_FILE_GROUP_TABLESPACES +USER_FILE_GROUP_VERSIONS +USER_FLASHBACK_ARCHIVE +USER_FLASHBACK_ARCHIVE_TABLES +USER_FLASHBACK_TXN_REPORT +USER_FLASHBACK_TXN_STATE +USER_FREE_SPACE +USER_FUNCTION_NAME +USER_GENERATED +USER_GOLDENGATE_PRIVILEGES +USER_HEAT_MAP_SEGMENT +USER_HEAT_MAP_SEG_HISTOGRAM +USER_HISTOGRAMS +USER_HOST_ACES +USER_ID +USER_IDENTIFIERS +USER_ILMDATAMOVEMENTPOLICIES +USER_ILMEVALUATIONDETAILS +USER_ILMOBJECTS +USER_ILMPOLICIES +USER_ILMRESULTS +USER_ILMTASKS +USER_INCARNATION +USER_INDEXES +USER_INDEXTYPES +USER_INDEXTYPE_ARRAYTYPES +USER_INDEXTYPE_COMMENTS +USER_INDEXTYPE_OPERATORS +USER_IND_COLUMNS +USER_IND_EXPRESSIONS +USER_IND_PARTITIONS +USER_IND_PENDING_STATS +USER_IND_STATISTICS +USER_IND_SUBPARTITIONS +USER_INTERNAL_TRIGGERS +USER_IO_TIME +USER_IO_WAIT_TIME +USER_JAVA_ARGUMENTS +USER_JAVA_CLASSES +USER_JAVA_COMPILER_OPTIONS +USER_JAVA_DERIVATIONS +USER_JAVA_FIELDS +USER_JAVA_IMPLEMENTS +USER_JAVA_INNERS +USER_JAVA_LAYOUTS +USER_JAVA_METHODS +USER_JAVA_NCOMPS +USER_JAVA_POLICY +USER_JAVA_RESOLVERS +USER_JAVA_THROWS +USER_JOBS +USER_JOIN_IND_COLUMNS +USER_JSON_COLUMNS +USER_LIBRARIES +USER_LOBS +USER_LOB_PARTITIONS +USER_LOB_SUBPARTITIONS +USER_LOB_TEMPLATES +USER_LOG_GROUPS +USER_LOG_GROUP_COLUMNS +USER_MEASURE_FOLDERS +USER_MEASURE_FOLDER_CONTENTS +USER_MEASURE_FOLDER_SUBFOLDERS +USER_METADATA_PROPERTIES +USER_METHOD_PARAMS +USER_METHOD_RESULTS +USER_MINING_MODELS +USER_MINING_MODEL_ATTRIBUTES +USER_MINING_MODEL_SETTINGS +USER_MVIEWS +USER_MVIEW_AGGREGATES +USER_MVIEW_ANALYSIS +USER_MVIEW_COMMENTS +USER_MVIEW_DETAIL_PARTITION +USER_MVIEW_DETAIL_RELATIONS +USER_MVIEW_DETAIL_SUBPARTITION +USER_MVIEW_JOINS +USER_MVIEW_KEYS +USER_MVIEW_LOGS +USER_MVIEW_REFRESH_TIMES +USER_NAME +USER_NESTED_TABLES +USER_NESTED_TABLE_COLS +USER_NETWORK_ACL_PRIVILEGES +USER_NUMBER +USER_OBJECTS +USER_OBJECTS_AE +USER_OBJECT_SIZE +USER_OBJECT_TABLES +USER_OBJECT_USAGE +USER_OBJ_AUDIT_OPTS +USER_OBJ_COLATTRS +USER_OLDIMAGE_COLUMNS +USER_OPANCILLARY +USER_OPARGUMENTS +USER_OPBINDINGS +USER_OPERATORS +USER_OPERATOR_COMMENTS +USER_OUTLINES +USER_OUTLINE_HINTS +USER_OVERRIDE +USER_PARALLEL_EXECUTE_CHUNKS +USER_PARALLEL_EXECUTE_TASKS +USER_PARTIAL_DROP_TABS +USER_PART_COL_STATISTICS +USER_PART_HISTOGRAMS +USER_PART_INDEXES +USER_PART_KEY_COLUMNS +USER_PART_LOBS +USER_PART_TABLES +USER_PASSWORD_LIMITS +USER_PENDING_CONV_TABLES +USER_PLSQL_COLL_TYPES +USER_PLSQL_OBJECT_SETTINGS +USER_PLSQL_TYPES +USER_PLSQL_TYPE_ATTRS +USER_POLICIES +USER_POLICY_ATTRIBUTES +USER_POLICY_CONTEXTS +USER_POLICY_GROUPS +USER_PRIV +USER_PROCEDURE +USER_PROCEDURES +USER_PROXIES +USER_PUBLISHED_COLUMNS +USER_QUEUES +USER_QUEUE_PUBLISHERS +USER_QUEUE_SCHEDULES +USER_QUEUE_SUBSCRIBERS +USER_QUEUE_TABLES +USER_RECYCLEBIN +USER_REFRESH +USER_REFRESH_CHILDREN +USER_REFS +USER_REGISTERED_MVIEWS +USER_REGISTERED_SNAPSHOTS +USER_REGISTRY +USER_REPAUDIT_ATTRIBUTE +USER_REPAUDIT_COLUMN +USER_REPCAT +USER_REPCATLOG +USER_REPCOLUMN +USER_REPCOLUMN_GROUP +USER_REPCONFLICT +USER_REPDDL +USER_REPFLAVORS +USER_REPFLAVOR_COLUMNS +USER_REPFLAVOR_OBJECTS +USER_REPGENERATED +USER_REPGENOBJECTS +USER_REPGROUP +USER_REPGROUPED_COLUMN +USER_REPGROUP_PRIVILEGES +USER_REPKEY_COLUMNS +USER_REPOBJECT +USER_REPPARAMETER_COLUMN +USER_REPPRIORITY +USER_REPPRIORITY_GROUP +USER_REPPROP +USER_REPRESOLUTION +USER_REPRESOLUTION_METHOD +USER_REPRESOLUTION_STATISTICS +USER_REPRESOL_STATS_CONTROL +USER_REPSCHEMA +USER_REPSITES +USER_RESOURCE_LIMITS +USER_RESUMABLE +USER_REWRITE_EQUIVALENCES +USER_ROLE_PRIVS +USER_RSRC_CONSUMER_GROUP_PRIVS +USER_RSRC_MANAGER_SYSTEM_PRIVS +USER_RULES +USER_RULESETS +USER_RULE_SET +USER_RULE_SETS +USER_RULE_SET_RULES +USER_SCHEDULER_CHAINS +USER_SCHEDULER_CHAIN_RULES +USER_SCHEDULER_CHAIN_STEPS +USER_SCHEDULER_CREDENTIALS +USER_SCHEDULER_DB_DESTS +USER_SCHEDULER_DESTS +USER_SCHEDULER_FILE_WATCHERS +USER_SCHEDULER_GROUPS +USER_SCHEDULER_GROUP_MEMBERS +USER_SCHEDULER_JOBS +USER_SCHEDULER_JOB_ARGS +USER_SCHEDULER_JOB_DESTS +USER_SCHEDULER_JOB_LOG +USER_SCHEDULER_JOB_RUN_DETAILS +USER_SCHEDULER_NOTIFICATIONS +USER_SCHEDULER_PROGRAMS +USER_SCHEDULER_PROGRAM_ARGS +USER_SCHEDULER_REMOTE_JOBSTATE +USER_SCHEDULER_RUNNING_CHAINS +USER_SCHEDULER_SCHEDULES +USER_SECONDARY_OBJECTS +USER_SEC_RELEVANT_COLS +USER_SEGMENTS +USER_SEQUENCES +USER_SNAPSHOTS +USER_SNAPSHOT_LOGS +USER_SNAPSHOT_REFRESH_TIMES +USER_SOURCE +USER_SOURCE_AE +USER_SOURCE_TABLES +USER_SPECIFIED_SIZE +USER_SQLJ_TYPES +USER_SQLJ_TYPE_ATTRS +USER_SQLJ_TYPE_METHODS +USER_SQLSET +USER_SQLSET_BINDS +USER_SQLSET_DEFINITIONS +USER_SQLSET_PLANS +USER_SQLSET_REFERENCES +USER_SQLSET_STATEMENTS +USER_SQLTUNE_BINDS +USER_SQLTUNE_PLANS +USER_SQLTUNE_RATIONALE_PLAN +USER_SQLTUNE_STATISTICS +USER_SQL_TRANSLATIONS +USER_SQL_TRANSLATION_PROFILES +USER_SR_GRP_STATUS +USER_SR_GRP_STATUS_ALL +USER_SR_OBJ +USER_SR_OBJ_ALL +USER_SR_OBJ_STATUS +USER_SR_OBJ_STATUS_ALL +USER_SR_PARTN_OPS +USER_SR_STLOG_STATS +USER_STATS +USER_STAT_EXTENSIONS +USER_STORED_SETTINGS +USER_SUBPARTITION_TEMPLATES +USER_SUBPART_COL_STATISTICS +USER_SUBPART_HISTOGRAMS +USER_SUBPART_KEY_COLUMNS +USER_SUBSCRIBED_COLUMNS +USER_SUBSCRIBED_TABLES +USER_SUBSCRIPTIONS +USER_SUBSCR_REGISTRATIONS +USER_SUMMARIES +USER_SUPPLIED_MV +USER_SYNONYMS +USER_SYS_PRIVS +USER_TABLES +USER_TABLESPACES +USER_TAB_COLS +USER_TAB_COLS_V$ +USER_TAB_COLUMNS +USER_TAB_COL_STATISTICS +USER_TAB_COMMENTS +USER_TAB_HISTGRM_PENDING_STATS +USER_TAB_HISTOGRAMS +USER_TAB_IDENTITY_COLS +USER_TAB_MODIFICATIONS +USER_TAB_PARTITIONS +USER_TAB_PENDING_STATS +USER_TAB_PRIVS +USER_TAB_PRIVS_MADE +USER_TAB_PRIVS_RECD +USER_TAB_STATISTICS +USER_TAB_STATS_HISTORY +USER_TAB_STAT_PREFS +USER_TAB_SUBPARTITIONS +USER_TRANSFORMATIONS +USER_TRIGGERS +USER_TRIGGER_COLS +USER_TS +USER_TSTZ_TABLES +USER_TSTZ_TAB_COLS +USER_TS_QUOTAS +USER_TUNE_MVIEW +USER_TYPES +USER_TYPE_ATTRS +USER_TYPE_METHODS +USER_TYPE_VERSIONS +USER_UNUSED_COL_TABS +USER_UPDATABLE_COLUMNS +USER_USAGE_AVG +USER_USAGE_SUM +USER_USAGE_SUMX2 +USER_USERS +USER_USTATS +USER_VARRAYS +USER_VIEWS +USER_VIEWS_AE +USER_WALLET_ACES +USER_WARNING_SETTINGS +USER_XDS_ACL_REFRESH +USER_XDS_ACL_REFSTAT +USER_XDS_LATEST_ACL_REFSTAT +USER_XMLTYPE_COLS +USER_XML_COLUMN_NAMES +USER_XML_INDEXES +USER_XML_NESTED_TABLES +USER_XML_OUT_OF_LINE_TABLES +USER_XML_PARTITIONED_TABLE_OK. +USER_XML_SCHEMAS +USER_XML_SCHEMA_ATTRIBUTES +USER_XML_SCHEMA_COMPLEX_TYPES +USER_XML_SCHEMA_ELEMENTS +USER_XML_SCHEMA_NAMESPACES +USER_XML_SCHEMA_SIMPLE_TYPES +USER_XML_SCHEMA_SUBSTGRP_HEAD +USER_XML_SCHEMA_SUBSTGRP_MBRS +USER_XML_TABLES +USER_XML_TAB_COLS +USER_XML_VIEWS +USER_XML_VIEW_COLS +USER_XS_ACES +USER_XS_ACLS +USER_XS_ACL_PARAMETERS +USER_XS_COLUMN_CONSTRAINTS +USER_XS_IMPLIED_PRIVILEGES +USER_XS_INHERITED_REALMS +USER_XS_PASSWORD_LIMITS +USER_XS_POLICIES +USER_XS_PRIVILEGES +USER_XS_REALM_CONSTRAINTS +USER_XS_SECURITY_CLASSES +USER_XS_SECURITY_CLASS_DEP +USER_XS_USERS +USER_ZONEMAPS +USER_ZONEMAP_MEASURES +USE_ANTI +USE_CONCAT +USE_COUNT +USE_CUBE +USE_DATABASE_LINK +USE_FEEDBACK_STATS +USE_HASH +USE_HASH_AGGREGATION +USE_HASH_GBY_FOR_PUSHDOWN +USE_HIDDEN_PARTITIONS +USE_INVISIBLE_INDEXES +USE_LAST_ARCHIVE_TIMESTAMP +USE_LIKE +USE_MERGE +USE_MERGE_CARTESIAN +USE_NL +USE_NL_WITH_INDEX +USE_NO_INDEX +USE_RESOURCE_ESTIMATES +USE_SECUREFILE +USE_SEMI +USE_TTT_FOR_GSETS +USE_VECTOR_AGGREGATION +USE_WEAK_NAME_RESL +USING +USN +USPSCNBASE +USPSCNWRAP +USPTIME +UTILIZATION_LIMIT +UTIME +UTL_BINARYINPUTSTREAM.AVAILABLE +UTL_BINARYINPUTSTREAM.CLOSE +UTL_BINARYINPUTSTREAM.ISNULL +UTL_BINARYINPUTSTREAM.READ +UTL_BINARYOUTPUTSTREAM.CLOSE +UTL_BINARYOUTPUTSTREAM.FLUSH +UTL_BINARYOUTPUTSTREAM.ISNULL +UTL_BINARYOUTPUTSTREAM.WRITE +UTL_CALL_STACK. +UTL_CALL_STACK.BACKTRACE_DEPTH +UTL_CALL_STACK.BACKTRACE_LINE +UTL_CALL_STACK.BACKTRACE_UNIT +UTL_CALL_STACK.CONCATENATE_SUBPROGRAM +UTL_CALL_STACK.CURRENT_EDITION +UTL_CALL_STACK.DYNAMIC_DEPTH +UTL_CALL_STACK.ERROR_DEPTH +UTL_CALL_STACK.ERROR_MSG +UTL_CALL_STACK.ERROR_NUMBER +UTL_CALL_STACK.LEXICAL_DEPTH +UTL_CALL_STACK.OWNER +UTL_CALL_STACK.SUBPROGRAM +UTL_CALL_STACK.UNIT_LINE +UTL_CHARACTERINPUTSTREAM.AVAILABLE +UTL_CHARACTERINPUTSTREAM.CLOSE +UTL_CHARACTERINPUTSTREAM.ISNULL +UTL_CHARACTERINPUTSTREAM.READ +UTL_CHARACTEROUTPUTSTREAM.CLOSE +UTL_CHARACTEROUTPUTSTREAM.FLUSH +UTL_CHARACTEROUTPUTSTREAM.ISNULL +UTL_CHARACTEROUTPUTSTREAM.WRITE +UTL_COLL. +UTL_COLL.IS_LOCATOR +UTL_COMPRESS. +UTL_COMPRESS.ISOPEN +UTL_COMPRESS.LZ_COMPRESS +UTL_COMPRESS.LZ_COMPRESS_ADD +UTL_COMPRESS.LZ_COMPRESS_CLOSE +UTL_COMPRESS.LZ_COMPRESS_OPEN +UTL_COMPRESS.LZ_UNCOMPRESS +UTL_COMPRESS.LZ_UNCOMPRESS_CLOSE +UTL_COMPRESS.LZ_UNCOMPRESS_EXTRACT +UTL_COMPRESS.LZ_UNCOMPRESS_OPEN +UTL_ENCODE. +UTL_ENCODE.BASE64_DECODE +UTL_ENCODE.BASE64_ENCODE +UTL_ENCODE.MIMEHEADER_DECODE +UTL_ENCODE.MIMEHEADER_ENCODE +UTL_ENCODE.QUOTED_PRINTABLE_DECODE +UTL_ENCODE.QUOTED_PRINTABLE_ENCODE +UTL_ENCODE.TEXT_DECODE +UTL_ENCODE.TEXT_ENCODE +UTL_ENCODE.UUDECODE +UTL_ENCODE.UUENCODE +UTL_FILE. +UTL_FILE.FCLOSE +UTL_FILE.FCLOSE_ALL +UTL_FILE.FCOPY +UTL_FILE.FFLUSH +UTL_FILE.FGETATTR +UTL_FILE.FGETPOS +UTL_FILE.FOPEN +UTL_FILE.FOPEN_NCHAR +UTL_FILE.FREMOVE +UTL_FILE.FRENAME +UTL_FILE.FSEEK +UTL_FILE.GET_LINE +UTL_FILE.GET_LINE_NCHAR +UTL_FILE.GET_RAW +UTL_FILE.IS_OPEN +UTL_FILE.NEW_LINE +UTL_FILE.PUT +UTL_FILE.PUTF +UTL_FILE.PUTF_NCHAR +UTL_FILE.PUT_LINE +UTL_FILE.PUT_LINE_NCHAR +UTL_FILE.PUT_NCHAR +UTL_FILE.PUT_RAW +UTL_GDK. +UTL_GDK.CHARSET_MAP +UTL_GDK.LANGUAGE_MAP +UTL_GDK.TERRITORY_MAP +UTL_HTTP. +UTL_HTTP.ADD_COOKIES +UTL_HTTP.BEGIN_REQUEST +UTL_HTTP.CLEAR_COOKIES +UTL_HTTP.CLOSE_PERSISTENT_CONN +UTL_HTTP.CLOSE_PERSISTENT_CONNS +UTL_HTTP.CREATE_REQUEST_CONTEXT +UTL_HTTP.DESTROY_REQUEST_CONTEXT +UTL_HTTP.END_REQUEST +UTL_HTTP.END_RESPONSE +UTL_HTTP.GET_AUTHENTICATION +UTL_HTTP.GET_BODY_CHARSET +UTL_HTTP.GET_CONTENT_ENCODING_SUPPORT +UTL_HTTP.GET_COOKIES +UTL_HTTP.GET_COOKIE_COUNT +UTL_HTTP.GET_COOKIE_SUPPORT +UTL_HTTP.GET_DETAILED_EXCP_SUPPORT +UTL_HTTP.GET_DETAILED_SQLCODE +UTL_HTTP.GET_DETAILED_SQLERRM +UTL_HTTP.GET_FOLLOW_REDIRECT +UTL_HTTP.GET_HEADER +UTL_HTTP.GET_HEADER_BY_NAME +UTL_HTTP.GET_HEADER_COUNT +UTL_HTTP.GET_PERSISTENT_CONNS +UTL_HTTP.GET_PERSISTENT_CONN_COUNT +UTL_HTTP.GET_PERSISTENT_CONN_SUPPORT +UTL_HTTP.GET_PROXY +UTL_HTTP.GET_RESPONSE +UTL_HTTP.GET_RESPONSE_ERROR_CHECK +UTL_HTTP.GET_TRANSFER_TIMEOUT +UTL_HTTP.READ_LINE +UTL_HTTP.READ_RAW +UTL_HTTP.READ_TEXT +UTL_HTTP.REQUEST +UTL_HTTP.REQUEST_PIECES +UTL_HTTP.SET_AUTHENTICATION +UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET +UTL_HTTP.SET_BODY_CHARSET +UTL_HTTP.SET_CONTENT_ENCODING_SUPPORT +UTL_HTTP.SET_COOKIE_SUPPORT +UTL_HTTP.SET_DETAILED_EXCP_SUPPORT +UTL_HTTP.SET_FOLLOW_REDIRECT +UTL_HTTP.SET_HEADER +UTL_HTTP.SET_PERSISTENT_CONN_SUPPORT +UTL_HTTP.SET_PROPERTY +UTL_HTTP.SET_PROXY +UTL_HTTP.SET_RESPONSE_ERROR_CHECK +UTL_HTTP.SET_TRANSFER_TIMEOUT +UTL_HTTP.SET_WALLET +UTL_HTTP.WRITE_LINE +UTL_HTTP.WRITE_RAW +UTL_HTTP.WRITE_TEXT +UTL_I18N. +UTL_I18N.ENCODE_SQL_XML +UTL_I18N.ESCAPE_REFERENCE +UTL_I18N.GET_COMMON_TIME_ZONES +UTL_I18N.GET_DEFAULT_CHARSET +UTL_I18N.GET_DEFAULT_ISO_CURRENCY +UTL_I18N.GET_DEFAULT_LINGUISTIC_SORT +UTL_I18N.GET_LOCAL_LANGUAGES +UTL_I18N.GET_LOCAL_LINGUISTIC_SORTS +UTL_I18N.GET_LOCAL_TERRITORIES +UTL_I18N.GET_LOCAL_TIME_ZONES +UTL_I18N.GET_MAX_CHARACTER_SIZE +UTL_I18N.GET_TRANSLATION +UTL_I18N.MAP_CHARSET +UTL_I18N.MAP_FROM_SHORT_LANGUAGE +UTL_I18N.MAP_LANGUAGE_FROM_ISO +UTL_I18N.MAP_LOCALE_TO_ISO +UTL_I18N.MAP_TERRITORY_FROM_ISO +UTL_I18N.MAP_TO_SHORT_LANGUAGE +UTL_I18N.RAW_TO_CHAR +UTL_I18N.RAW_TO_NCHAR +UTL_I18N.STRING_TO_RAW +UTL_I18N.TRANSLITERATE +UTL_I18N.UNESCAPE_REFERENCE +UTL_I18N.VALIDATE_SQLNAME +UTL_IDENT. +UTL_INADDR. +UTL_INADDR.GET_HOST_ADDRESS +UTL_INADDR.GET_HOST_NAME +UTL_LMS. +UTL_LMS.FORMAT_MESSAGE +UTL_LMS.GET_MESSAGE +UTL_MATCH. +UTL_MATCH.EDIT_DISTANCE +UTL_MATCH.EDIT_DISTANCE_SIMILARITY +UTL_MATCH.JARO_WINKLER +UTL_MATCH.JARO_WINKLER_SIMILARITY +UTL_NLA. +UTL_NLA.BLAS_ASUM +UTL_NLA.BLAS_AXPY +UTL_NLA.BLAS_COPY +UTL_NLA.BLAS_DOT +UTL_NLA.BLAS_GBMV +UTL_NLA.BLAS_GEMM +UTL_NLA.BLAS_GEMV +UTL_NLA.BLAS_GER +UTL_NLA.BLAS_IAMAX +UTL_NLA.BLAS_NRM2 +UTL_NLA.BLAS_ROT +UTL_NLA.BLAS_ROTG +UTL_NLA.BLAS_SBMV +UTL_NLA.BLAS_SCAL +UTL_NLA.BLAS_SPMV +UTL_NLA.BLAS_SPR +UTL_NLA.BLAS_SPR2 +UTL_NLA.BLAS_SWAP +UTL_NLA.BLAS_SYMM +UTL_NLA.BLAS_SYMV +UTL_NLA.BLAS_SYR +UTL_NLA.BLAS_SYR2 +UTL_NLA.BLAS_SYR2K +UTL_NLA.BLAS_SYRK +UTL_NLA.BLAS_TBMV +UTL_NLA.BLAS_TBSV +UTL_NLA.BLAS_TPMV +UTL_NLA.BLAS_TPSV +UTL_NLA.BLAS_TRMM +UTL_NLA.BLAS_TRMV +UTL_NLA.BLAS_TRSM +UTL_NLA.BLAS_TRSV +UTL_NLA.LAPACK_GBSV +UTL_NLA.LAPACK_GEES +UTL_NLA.LAPACK_GEEV +UTL_NLA.LAPACK_GELS +UTL_NLA.LAPACK_GESDD +UTL_NLA.LAPACK_GESV +UTL_NLA.LAPACK_GESVD +UTL_NLA.LAPACK_GTSV +UTL_NLA.LAPACK_PBSV +UTL_NLA.LAPACK_POSV +UTL_NLA.LAPACK_PPSV +UTL_NLA.LAPACK_PTSV +UTL_NLA.LAPACK_SBEV +UTL_NLA.LAPACK_SBEVD +UTL_NLA.LAPACK_SPEV +UTL_NLA.LAPACK_SPEVD +UTL_NLA.LAPACK_SPSV +UTL_NLA.LAPACK_STEV +UTL_NLA.LAPACK_STEVD +UTL_NLA.LAPACK_SYEV +UTL_NLA.LAPACK_SYEVD +UTL_NLA.LAPACK_SYSV +UTL_NLA.UNIT_TEST_BLAS +UTL_NLA.UNIT_TEST_LAPACK +UTL_RAW. +UTL_RAW.BIT_AND +UTL_RAW.BIT_COMPLEMENT +UTL_RAW.BIT_OR +UTL_RAW.BIT_XOR +UTL_RAW.CAST_FROM_BINARY_DOUBLE +UTL_RAW.CAST_FROM_BINARY_FLOAT +UTL_RAW.CAST_FROM_BINARY_INTEGER +UTL_RAW.CAST_FROM_NUMBER +UTL_RAW.CAST_TO_BINARY_DOUBLE +UTL_RAW.CAST_TO_BINARY_FLOAT +UTL_RAW.CAST_TO_BINARY_INTEGER +UTL_RAW.CAST_TO_NUMBER +UTL_RAW.CAST_TO_NVARCHAR2 +UTL_RAW.CAST_TO_RAW +UTL_RAW.CAST_TO_VARCHAR2 +UTL_RAW.COMPARE +UTL_RAW.CONCAT +UTL_RAW.CONVERT +UTL_RAW.COPIES +UTL_RAW.LENGTH +UTL_RAW.OVERLAY +UTL_RAW.REVERSE +UTL_RAW.SUBSTR +UTL_RAW.TRANSLATE +UTL_RAW.TRANSLITERATE +UTL_RAW.XRANGE +UTL_RECOMP. +UTL_RECOMP.PARALLEL_SLAVE +UTL_RECOMP.RECOMP_PARALLEL +UTL_RECOMP.RECOMP_SERIAL +UTL_REF. +UTL_REF.DELETE_OBJECT +UTL_REF.LOCK_OBJECT +UTL_REF.SELECT_OBJECT +UTL_REF.SELECT_OBJECT_WITH_CR +UTL_REF.UPDATE_OBJECT +UTL_SMTP. +UTL_SMTP.AUTH +UTL_SMTP.CLOSE_CONNECTION +UTL_SMTP.CLOSE_DATA +UTL_SMTP.COMMAND +UTL_SMTP.COMMAND_REPLIES +UTL_SMTP.DATA +UTL_SMTP.EHLO +UTL_SMTP.HELO +UTL_SMTP.HELP +UTL_SMTP.MAIL +UTL_SMTP.NOOP +UTL_SMTP.OPEN_CONNECTION +UTL_SMTP.OPEN_DATA +UTL_SMTP.QUIT +UTL_SMTP.RCPT +UTL_SMTP.RSET +UTL_SMTP.STARTTLS +UTL_SMTP.VRFY +UTL_SMTP.WRITE_DATA +UTL_SMTP.WRITE_RAW_DATA +UTL_SYS_COMPRESS. +UTL_SYS_COMPRESS.ISOPEN +UTL_SYS_COMPRESS.LZ_COMPRESS +UTL_SYS_COMPRESS.LZ_COMPRESS_ADD +UTL_SYS_COMPRESS.LZ_COMPRESS_BFILE +UTL_SYS_COMPRESS.LZ_COMPRESS_BLOB +UTL_SYS_COMPRESS.LZ_COMPRESS_CLOSE +UTL_SYS_COMPRESS.LZ_COMPRESS_OPEN +UTL_SYS_COMPRESS.LZ_UNCOMPRESS +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_BFILE +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_BLOB +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_CLOSE +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_EXTRACT +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_OPEN +UTL_TCP. +UTL_TCP.AVAILABLE +UTL_TCP.CLOSE_ALL_CONNECTIONS +UTL_TCP.CLOSE_CONNECTION +UTL_TCP.FLUSH +UTL_TCP.GET_LINE +UTL_TCP.GET_LINE_NCHAR +UTL_TCP.GET_RAW +UTL_TCP.GET_TEXT +UTL_TCP.GET_TEXT_NCHAR +UTL_TCP.OPEN_CONNECTION +UTL_TCP.READ_LINE +UTL_TCP.READ_RAW +UTL_TCP.READ_TEXT +UTL_TCP.SECURE_CONNECTION +UTL_TCP.WRITE_LINE +UTL_TCP.WRITE_RAW +UTL_TCP.WRITE_TEXT +UTL_URL. +UTL_URL.ESCAPE +UTL_URL.UNESCAPE +UTL_XML. +UTL_XML.COMPARE +UTL_XML.GETDDLSRCFROMXML +UTL_XML.GETFDO +UTL_XML.GETHASHCODE +UTL_XML.GETNEXTTYPEID +UTL_XML.HASTSTZ +UTL_XML.ISNAMEOMF +UTL_XML.LONG2CLOB +UTL_XML.PARSEEXPR +UTL_XML.PARSEQUERY +UTL_XML.SSCFIND +UTL_XML.SSCGETCTX +UTL_XML.SSCMINIMIZECACHE +UTL_XML.SSCPARSE +UTL_XML.SSCPURGE +UTL_XML.SSCSETDEBUG +UTL_XML.TYPEHASHCODEEQ +UTL_XML.WINDOWS32 +UTL_XML.XMLCLEAN +UTL_XML.XMLDUMPCTXS +UTL_XML.XMLINIT +UTL_XML.XMLPARSE +UTL_XML.XMLSETMEMDEBUG +UTL_XML.XMLSETPARSEFLAG +UTL_XML.XSLLOADFROMFILE +UTL_XML.XSLRESETPARAMS +UTL_XML.XSLSETPARAM +UTL_XML.XSLTRANSFORM +UTL_XML.XSLTRANSFORMCTOX +UTL_XML.XSLTRANSFORMXTOC +UTL_XML.XSLTRANSFORMXTOX +V$ACCESS +V$ACTIVE_INSTANCES +V$ACTIVE_SERVICES +V$ACTIVE_SESSION_HISTORY +V$ACTIVE_SESS_POOL_MTH +V$ADVISOR_CURRENT_SQLPLAN +V$ADVISOR_PROGRESS +V$ALERT_TYPES +V$AQ +V$AQ1 +V$AQ_BACKGROUND_COORDINATOR +V$AQ_BMAP_NONDUR_SUBSCRIBERS +V$AQ_CROSS_INSTANCE_JOBS +V$AQ_JOB_COORDINATOR +V$AQ_MESSAGE_CACHE +V$AQ_MSGBM +V$AQ_NONDUR_REGISTRATIONS +V$AQ_NONDUR_SUBSCRIBER +V$AQ_NONDUR_SUBSCRIBER_LWM +V$AQ_NOTIFICATION_CLIENTS +V$AQ_SERVER_POOL +V$AQ_SUBSCRIBER_LOAD +V$ARCHIVE +V$ARCHIVED_LOG +V$ARCHIVE_DEST +V$ARCHIVE_DEST_STATUS +V$ARCHIVE_GAP +V$ARCHIVE_PROCESSES +V$ASH_INFO +V$ASM_ACFSREPL +V$ASM_ACFSREPLTAG +V$ASM_ACFSSNAPSHOTS +V$ASM_ACFSTAG +V$ASM_ACFSVOLUMES +V$ASM_ACFS_ENCRYPTION_INFO +V$ASM_ACFS_SECURITY_INFO +V$ASM_ACFS_SEC_ADMIN +V$ASM_ACFS_SEC_CMDRULE +V$ASM_ACFS_SEC_REALM +V$ASM_ACFS_SEC_REALM_FILTER +V$ASM_ACFS_SEC_REALM_GROUP +V$ASM_ACFS_SEC_REALM_USER +V$ASM_ACFS_SEC_RULE +V$ASM_ACFS_SEC_RULESET +V$ASM_ACFS_SEC_RULESET_RULE +V$ASM_ALIAS +V$ASM_ATTRIBUTE +V$ASM_AUDIT_CLEANUP_JOBS +V$ASM_AUDIT_CLEAN_EVENTS +V$ASM_AUDIT_CONFIG_PARAMS +V$ASM_AUDIT_LAST_ARCH_TS +V$ASM_CLIENT +V$ASM_DISK +V$ASM_DISKGROUP +V$ASM_DISKGROUP_SPARSE +V$ASM_DISKGROUP_STAT +V$ASM_DISK_IOSTAT +V$ASM_DISK_IOSTAT_SPARSE +V$ASM_DISK_SPARSE +V$ASM_DISK_SPARSE_STAT +V$ASM_DISK_STAT +V$ASM_ESTIMATE +V$ASM_FILE +V$ASM_FILESYSTEM +V$ASM_OPERATION +V$ASM_TEMPLATE +V$ASM_USER +V$ASM_USERGROUP +V$ASM_USERGROUP_MEMBER +V$ASM_VOLUME +V$ASM_VOLUME_STAT +V$AW_AGGREGATE_OP +V$AW_ALLOCATE_OP +V$AW_CALC +V$AW_LONGOPS +V$AW_OLAP +V$AW_SESSION_INFO +V$BACKUP +V$BACKUP_ARCHIVELOG_DETAILS +V$BACKUP_ARCHIVELOG_SUMMARY +V$BACKUP_ASYNC_IO +V$BACKUP_CONTROLFILE_DETAILS +V$BACKUP_CONTROLFILE_SUMMARY +V$BACKUP_COPY_DETAILS +V$BACKUP_COPY_SUMMARY +V$BACKUP_CORRUPTION +V$BACKUP_DATAFILE +V$BACKUP_DATAFILE_DETAILS +V$BACKUP_DATAFILE_SUMMARY +V$BACKUP_DEVICE +V$BACKUP_FILES +V$BACKUP_NONLOGGED +V$BACKUP_PIECE +V$BACKUP_PIECE_DETAILS +V$BACKUP_REDOLOG +V$BACKUP_SET +V$BACKUP_SET_DETAILS +V$BACKUP_SET_SUMMARY +V$BACKUP_SPFILE +V$BACKUP_SPFILE_DETAILS +V$BACKUP_SPFILE_SUMMARY +V$BACKUP_SYNC_IO +V$BGPROCESS +V$BH +V$BLOCKING_QUIESCE +V$BLOCK_CHANGE_TRACKING +V$BSP +V$BTS_STAT +V$BT_SCAN_CACHE +V$BT_SCAN_OBJ_TEMPS +V$BUFFERED_PUBLISHERS +V$BUFFERED_QUEUES +V$BUFFERED_SUBSCRIBERS +V$BUFFER_POOL +V$BUFFER_POOL_STATISTICS +V$CACHE +V$CACHE_LOCK +V$CACHE_TRANSFER +V$CALLTAG +V$CELL +V$CELL_CONFIG +V$CELL_CONFIG_INFO +V$CELL_DB +V$CELL_DB_HISTORY +V$CELL_DISK +V$CELL_DISK_HISTORY +V$CELL_GLOBAL +V$CELL_GLOBAL_HISTORY +V$CELL_IOREASON +V$CELL_IOREASON_NAME +V$CELL_METRIC_DESC +V$CELL_OFL_THREAD_HISTORY +V$CELL_OPEN_ALERTS +V$CELL_REQUEST_TOTALS +V$CELL_STATE +V$CELL_THREAD_HISTORY +V$CHANNEL_WAITS +V$CIRCUIT +V$CLASS_CACHE_TRANSFER +V$CLASS_PING +V$CLIENT_SECRETS +V$CLIENT_STATS +V$CLONEDFILE +V$CLUSTER_INTERCONNECTS +V$CONFIGURED_INTERCONNECTS +V$CONTAINERS +V$CONTEXT +V$CONTROLFILE +V$CONTROLFILE_RECORD_SECTION +V$CON_SYSSTAT +V$CON_SYSTEM_EVENT +V$CON_SYSTEM_WAIT_CLASS +V$CON_SYS_TIME_MODEL +V$COPY_CORRUPTION +V$COPY_NONLOGGED +V$CORRUPT_XID_LIST +V$CPOOL_CC_INFO +V$CPOOL_CC_STATS +V$CPOOL_CONN_INFO +V$CPOOL_STATS +V$CR_BLOCK_SERVER +V$CURRENT_BLOCK_SERVER +V$DATABASE +V$DATABASE_BLOCK_CORRUPTION +V$DATABASE_INCARNATION +V$DATABASE_KEY_INFO +V$DATAFILE +V$DATAFILE_COPY +V$DATAFILE_HEADER +V$DATAGUARD_CONFIG +V$DATAGUARD_STATS +V$DATAGUARD_STATUS +V$DATAPUMP_JOB +V$DATAPUMP_SESSION +V$DBFILE +V$DBLINK +V$DB_CACHE_ADVICE +V$DB_OBJECT_CACHE +V$DB_PIPES +V$DB_TRANSPORTABLE_PLATFORM +V$DEAD_CLEANUP +V$DELETED_OBJECT +V$DETACHED_SESSION +V$DG_BROKER_CONFIG +V$DIAG_ADR_CONTROL +V$DIAG_ADR_INVALIDATION +V$DIAG_ALERT_EXT +V$DIAG_AMS_XACTION +V$DIAG_CRITICAL_ERROR +V$DIAG_DDE_USER_ACTION +V$DIAG_DDE_USER_ACTION_DEF +V$DIAG_DDE_USR_ACT_PARAM +V$DIAG_DDE_USR_ACT_PARAM_DEF +V$DIAG_DDE_USR_INC_ACT_MAP +V$DIAG_DDE_USR_INC_TYPE +V$DIAG_DFW_CONFIG_CAPTURE +V$DIAG_DFW_CONFIG_ITEM +V$DIAG_DFW_PATCH_CAPTURE +V$DIAG_DFW_PATCH_ITEM +V$DIAG_DIAGV_INCIDENT +V$DIAG_DIR_EXT +V$DIAG_EM_DIAG_JOB +V$DIAG_EM_TARGET_INFO +V$DIAG_EM_USER_ACTIVITY +V$DIAG_HM_FDG_SET +V$DIAG_HM_FINDING +V$DIAG_HM_INFO +V$DIAG_HM_MESSAGE +V$DIAG_HM_RECOMMENDATION +V$DIAG_HM_RUN +V$DIAG_INCCKEY +V$DIAG_INCIDENT +V$DIAG_INCIDENT_FILE +V$DIAG_INC_METER_CONFIG +V$DIAG_INC_METER_IMPT_DEF +V$DIAG_INC_METER_INFO +V$DIAG_INC_METER_PK_IMPTS +V$DIAG_INC_METER_SUMMARY +V$DIAG_INFO +V$DIAG_IPS_CONFIGURATION +V$DIAG_IPS_FILE_COPY_LOG +V$DIAG_IPS_FILE_METADATA +V$DIAG_IPS_PACKAGE +V$DIAG_IPS_PACKAGE_FILE +V$DIAG_IPS_PACKAGE_HISTORY +V$DIAG_IPS_PACKAGE_INCIDENT +V$DIAG_IPS_PKG_UNPACK_HIST +V$DIAG_IPS_PROGRESS_LOG +V$DIAG_IPS_REMOTE_PACKAGE +V$DIAG_LOG_EXT +V$DIAG_PICKLEERR +V$DIAG_PROBLEM +V$DIAG_RELMD_EXT +V$DIAG_SWEEPERR +V$DIAG_VEM_USER_ACTLOG +V$DIAG_VEM_USER_ACTLOG1 +V$DIAG_VHM_RUN +V$DIAG_VIEW +V$DIAG_VIEWCOL +V$DIAG_VINCIDENT +V$DIAG_VINCIDENT_FILE +V$DIAG_VINC_METER_INFO +V$DIAG_VIPS_FILE_COPY_LOG +V$DIAG_VIPS_FILE_METADATA +V$DIAG_VIPS_PACKAGE_FILE +V$DIAG_VIPS_PACKAGE_HISTORY +V$DIAG_VIPS_PACKAGE_MAIN_INT +V$DIAG_VIPS_PACKAGE_SIZE +V$DIAG_VIPS_PKG_FILE +V$DIAG_VIPS_PKG_INC_CAND +V$DIAG_VIPS_PKG_INC_DTL +V$DIAG_VIPS_PKG_INC_DTL1 +V$DIAG_VIPS_PKG_MAIN_PROBLEM +V$DIAG_VNOT_EXIST_INCIDENT +V$DIAG_VPROBLEM +V$DIAG_VPROBLEM1 +V$DIAG_VPROBLEM2 +V$DIAG_VPROBLEM_BUCKET +V$DIAG_VPROBLEM_BUCKET1 +V$DIAG_VPROBLEM_BUCKET_COUNT +V$DIAG_VPROBLEM_INT +V$DIAG_VPROBLEM_LASTINC +V$DIAG_VSHOWCATVIEW +V$DIAG_VSHOWINCB +V$DIAG_VSHOWINCB_I +V$DIAG_VTEST_EXISTS +V$DIAG_V_ACTINC +V$DIAG_V_ACTPROB +V$DIAG_V_INCCOUNT +V$DIAG_V_INCFCOUNT +V$DIAG_V_INC_METER_INFO_PROB +V$DIAG_V_IPSPRBCNT +V$DIAG_V_IPSPRBCNT1 +V$DIAG_V_NFCINC +V$DIAG_V_SWPERRCOUNT +V$DISK_RESTORE_RANGE +V$DISPATCHER +V$DISPATCHER_CONFIG +V$DISPATCHER_RATE +V$DLM_ALL_LOCKS +V$DLM_CONVERT_LOCAL +V$DLM_CONVERT_REMOTE +V$DLM_LATCH +V$DLM_LOCKS +V$DLM_MISC +V$DLM_RESS +V$DLM_TRAFFIC_CONTROLLER +V$DNFS_CHANNELS +V$DNFS_FILES +V$DNFS_SERVERS +V$DNFS_STATS +V$DYNAMIC_REMASTER_STATS +V$EDITIONABLE_TYPES +V$EMON +V$EMX_USAGE_STATS +V$ENABLEDPRIVS +V$ENCRYPTED_TABLESPACES +V$ENCRYPTION_KEYS +V$ENCRYPTION_WALLET +V$ENQUEUE_LOCK +V$ENQUEUE_STAT +V$ENQUEUE_STATISTICS +V$EVENTMETRIC +V$EVENT_HISTOGRAM +V$EVENT_HISTOGRAM_MICRO +V$EVENT_NAME +V$EXECUTION +V$FALSE_PING +V$FAST_START_SERVERS +V$FAST_START_TRANSACTIONS +V$FILEMETRIC +V$FILEMETRIC_HISTORY +V$FILESPACE_USAGE +V$FILESTAT +V$FILE_CACHE_TRANSFER +V$FILE_HISTOGRAM +V$FILE_OPTIMIZED_HISTOGRAM +V$FILE_PING +V$FIXED_TABLE +V$FIXED_VIEW_DEFINITION +V$FLASHBACK_DATABASE_LOG +V$FLASHBACK_DATABASE_LOGFILE +V$FLASHBACK_DATABASE_STAT +V$FLASHBACK_TXN_GRAPH +V$FLASHBACK_TXN_MODS +V$FLASHFILESTAT +V$FLASH_RECOVERY_AREA_USAGE +V$FOREIGN_ARCHIVED_LOG +V$FS_FAILOVER_HISTOGRAM +V$FS_FAILOVER_STATS +V$FS_OBSERVER_HISTOGRAM +V$GCSHVMASTER_INFO +V$GCSPFMASTER_INFO +V$GC_ELEMENT +V$GC_ELEMENTS_WITH_COLLISIONS +V$GES_BLOCKING_ENQUEUE +V$GES_CONVERT_LOCAL +V$GES_CONVERT_REMOTE +V$GES_DEADLOCKS +V$GES_DEADLOCK_SESSIONS +V$GES_ENQUEUE +V$GES_LATCH +V$GES_RESOURCE +V$GES_STATISTICS +V$GES_TRAFFIC_CONTROLLER +V$GG_APPLY_COORDINATOR +V$GG_APPLY_READER +V$GG_APPLY_RECEIVER +V$GG_APPLY_SERVER +V$GLOBALCONTEXT +V$GLOBAL_BLOCKED_LOCKS +V$GLOBAL_TRANSACTION +V$GOLDENGATE_CAPABILITIES +V$GOLDENGATE_CAPTURE +V$GOLDENGATE_MESSAGE_TRACKING +V$GOLDENGATE_TABLE_STATS +V$GOLDENGATE_TRANSACTION +V$HANG_INFO +V$HANG_SESSION_INFO +V$HANG_STATISTICS +V$HEAT_MAP_SEGMENT +V$HM_CHECK +V$HM_CHECK_PARAM +V$HM_FINDING +V$HM_INFO +V$HM_RECOMMENDATION +V$HM_RUN +V$HS_AGENT +V$HS_PARAMETER +V$HS_SESSION +V$HVMASTER_INFO +V$IM_COLUMN_LEVEL +V$IM_COL_CU +V$IM_HEADER +V$IM_SEGMENTS +V$IM_SEGMENTS_DETAIL +V$IM_SEG_EXT_MAP +V$IM_SMU_CHUNK +V$IM_SMU_HEAD +V$IM_TBS_EXT_MAP +V$IM_USER_SEGMENTS +V$INCMETER_CONFIG +V$INCMETER_INFO +V$INCMETER_SUMMARY +V$INDEXED_FIXED_COLUMN +V$INMEMORY_AREA +V$INSTANCE +V$INSTANCE_CACHE_TRANSFER +V$INSTANCE_LOG_GROUP +V$INSTANCE_PING +V$INSTANCE_RECOVERY +V$IOFUNCMETRIC +V$IOFUNCMETRIC_HISTORY +V$IOSTAT_CONSUMER_GROUP +V$IOSTAT_FILE +V$IOSTAT_FUNCTION +V$IOSTAT_FUNCTION_DETAIL +V$IOSTAT_NETWORK +V$IOS_CLIENT +V$IO_CALIBRATION_STATUS +V$IO_OUTLIER +V$IR_FAILURE +V$IR_FAILURE_SET +V$IR_MANUAL_CHECKLIST +V$IR_REPAIR +V$JAVAPOOL +V$JAVA_LIBRARY_CACHE_MEMORY +V$JAVA_POOL_ADVICE +V$KERNEL_IO_OUTLIER +V$KEY_VECTOR +V$LATCH +V$LATCHHOLDER +V$LATCHNAME +V$LATCH_CHILDREN +V$LATCH_MISSES +V$LATCH_PARENT +V$LGWRIO_OUTLIER +V$LIBCACHE_LOCKS +V$LIBRARYCACHE +V$LIBRARY_CACHE_MEMORY +V$LICENSE +V$LISTENER_NETWORK +V$LOADISTAT +V$LOADPSTAT +V$LOBSTAT +V$LOCK +V$LOCKED_OBJECT +V$LOCKS_WITH_COLLISIONS +V$LOCK_ACTIVITY +V$LOCK_ELEMENT +V$LOCK_TYPE +V$LOG +V$LOGFILE +V$LOGHIST +V$LOGMNR_CONTENTS +V$LOGMNR_DICTIONARY +V$LOGMNR_DICTIONARY_LOAD +V$LOGMNR_LATCH +V$LOGMNR_LOGFILE +V$LOGMNR_LOGS +V$LOGMNR_PARAMETERS +V$LOGMNR_PROCESS +V$LOGMNR_SESSION +V$LOGMNR_STATS +V$LOGMNR_TRANSACTION +V$LOGSTDBY +V$LOGSTDBY_PROCESS +V$LOGSTDBY_PROGRESS +V$LOGSTDBY_STATE +V$LOGSTDBY_STATS +V$LOGSTDBY_TRANSACTION +V$LOG_HISTORY +V$MANAGED_STANDBY +V$MAPPED_SQL +V$MAP_COMP_LIST +V$MAP_ELEMENT +V$MAP_EXT_ELEMENT +V$MAP_FILE +V$MAP_FILE_EXTENT +V$MAP_FILE_IO_STACK +V$MAP_LIBRARY +V$MAP_SUBELEMENT +V$MAX_ACTIVE_SESS_TARGET_MTH +V$MEMORY_CURRENT_RESIZE_OPS +V$MEMORY_DYNAMIC_COMPONENTS +V$MEMORY_RESIZE_OPS +V$MEMORY_TARGET_ADVICE +V$METRIC +V$METRICGROUP +V$METRICNAME +V$METRIC_HISTORY +V$MTTR_TARGET_ADVICE +V$MUTEX_SLEEP +V$MUTEX_SLEEP_HISTORY +V$MVREFRESH +V$MYSTAT +V$NFS_CLIENTS +V$NFS_LOCKS +V$NFS_OPEN_FILES +V$NLS_PARAMETERS +V$NLS_VALID_VALUES +V$NONLOGGED_BLOCK +V$OBJECT_DEPENDENCY +V$OBJECT_DML_FREQUENCIES +V$OBJECT_PRIVILEGE +V$OBJECT_USAGE +V$OBSOLETE_PARAMETER +V$OFFLINE_RANGE +V$OFSMOUNT +V$OFS_STATS +V$OPEN_CURSOR +V$OPTIMIZER_PROCESSING_RATE +V$OPTION +V$OSSTAT +V$PARALLEL_DEGREE_LIMIT_MTH +V$PARAMETER +V$PARAMETER2 +V$PARAMETER_VALID_VALUES +V$PATCHES +V$PDBS +V$PDB_INCARNATION +V$PERSISTENT_PUBLISHERS +V$PERSISTENT_QMN_CACHE +V$PERSISTENT_QUEUES +V$PERSISTENT_SUBSCRIBERS +V$PGASTAT +V$PGA_TARGET_ADVICE +V$PGA_TARGET_ADVICE_HISTOGRAM +V$PING +V$POLICY_HISTORY +V$PQ_SESSTAT +V$PQ_SLAVE +V$PQ_SYSSTAT +V$PQ_TQSTAT +V$PROCESS +V$PROCESS_GROUP +V$PROCESS_MEMORY +V$PROCESS_MEMORY_DETAIL +V$PROCESS_MEMORY_DETAIL_PROG +V$PROPAGATION_RECEIVER +V$PROPAGATION_SENDER +V$PROXY_ARCHIVEDLOG +V$PROXY_ARCHIVELOG_DETAILS +V$PROXY_ARCHIVELOG_SUMMARY +V$PROXY_COPY_DETAILS +V$PROXY_COPY_SUMMARY +V$PROXY_DATAFILE +V$PWFILE_USERS +V$PX_BUFFER_ADVICE +V$PX_INSTANCE_GROUP +V$PX_PROCESS +V$PX_PROCESS_SYSSTAT +V$PX_PROCESS_TRACE +V$PX_SESSION +V$PX_SESSTAT +V$QMON_COORDINATOR_STATS +V$QMON_SERVER_STATS +V$QMON_TASKS +V$QMON_TASK_STATS +V$QUEUE +V$QUEUEING_MTH +V$RECOVERY_AREA_USAGE +V$RECOVERY_FILE_DEST +V$RECOVERY_FILE_STATUS +V$RECOVERY_LOG +V$RECOVERY_PROGRESS +V$RECOVERY_STATUS +V$RECOVER_FILE +V$REDO_DEST_RESP_HISTOGRAM +V$REPLAY_CONTEXT +V$REPLAY_CONTEXT_LOB +V$REPLAY_CONTEXT_SEQUENCE +V$REPLAY_CONTEXT_SYSDATE +V$REPLAY_CONTEXT_SYSGUID +V$REPLAY_CONTEXT_SYSTIMESTAMP +V$REPLPROP +V$REPLQUEUE +V$REQDIST +V$RESERVED_WORDS +V$RESOURCE +V$RESOURCE_LIMIT +V$RESTORE_POINT +V$RESTORE_RANGE +V$RESULT_CACHE_DEPENDENCY +V$RESULT_CACHE_MEMORY +V$RESULT_CACHE_OBJECTS +V$RESULT_CACHE_STATISTICS +V$RESUMABLE +V$RFS_THREAD +V$RMAN_BACKUP_JOB_DETAILS +V$RMAN_BACKUP_SUBJOB_DETAILS +V$RMAN_BACKUP_TYPE +V$RMAN_COMPRESSION_ALGORITHM +V$RMAN_CONFIGURATION +V$RMAN_ENCRYPTION_ALGORITHMS +V$RMAN_OUTPUT +V$RMAN_STATUS +V$ROLLNAME +V$ROLLSTAT +V$ROWCACHE +V$ROWCACHE_PARENT +V$ROWCACHE_SUBORDINATE +V$RO_USER_ACCOUNT +V$RSRCMGRMETRIC +V$RSRCMGRMETRIC_HISTORY +V$RSRC_CONSUMER_GROUP +V$RSRC_CONSUMER_GROUP_CPU_MTH +V$RSRC_CONS_GROUP_HISTORY +V$RSRC_PLAN +V$RSRC_PLAN_CPU_MTH +V$RSRC_PLAN_HISTORY +V$RSRC_SESSION_INFO +V$RT_ADDM_CONTROL +V$RULE +V$RULE_SET +V$RULE_SET_AGGREGATE_STATS +V$SBT_RESTORE_RANGE +V$SCHEDULER_INMEM_MDINFO +V$SCHEDULER_INMEM_RTINFO +V$SCHEDULER_RUNNING_JOBS +V$SECUREFILE_TIMER +V$SEGMENT_STATISTICS +V$SEGSPACE_USAGE +V$SEGSTAT +V$SEGSTAT_NAME +V$SERVICEMETRIC +V$SERVICEMETRIC_HISTORY +V$SERVICES +V$SERVICE_EVENT +V$SERVICE_STATS +V$SERVICE_WAIT_CLASS +V$SERV_MOD_ACT_STATS +V$SESSION +V$SESSIONS_COUNT +V$SESSION_BLOCKERS +V$SESSION_CONNECT_INFO +V$SESSION_CURSOR_CACHE +V$SESSION_EVENT +V$SESSION_FIX_CONTROL +V$SESSION_LONGOPS +V$SESSION_OBJECT_CACHE +V$SESSION_WAIT +V$SESSION_WAIT_CLASS +V$SESSION_WAIT_HISTORY +V$SESSMETRIC +V$SESSTAT +V$SESS_IO +V$SESS_TIME_MODEL +V$SES_OPTIMIZER_ENV +V$SGA +V$SGAINFO +V$SGASTAT +V$SGA_CURRENT_RESIZE_OPS +V$SGA_DYNAMIC_COMPONENTS +V$SGA_DYNAMIC_FREE_MEMORY +V$SGA_RESIZE_OPS +V$SGA_TARGET_ADVICE +V$SHARED_POOL_ADVICE +V$SHARED_POOL_RESERVED +V$SHARED_SERVER +V$SHARED_SERVER_MONITOR +V$SORT_SEGMENT +V$SORT_USAGE +V$SPPARAMETER +V$SQL +V$SQLAREA +V$SQLAREA_PLAN_HASH +V$SQLCOMMAND +V$SQLFN_ARG_METADATA +V$SQLFN_METADATA +V$SQLPA_METRIC +V$SQLSTATS +V$SQLSTATS_PLAN_HASH +V$SQLTEXT +V$SQLTEXT_WITH_NEWLINES +V$SQL_BIND_CAPTURE +V$SQL_BIND_DATA +V$SQL_BIND_METADATA +V$SQL_CS_HISTOGRAM +V$SQL_CS_SELECTIVITY +V$SQL_CS_STATISTICS +V$SQL_CURSOR +V$SQL_DIAG_REPOSITORY +V$SQL_DIAG_REPOSITORY_REASON +V$SQL_FEATURE +V$SQL_FEATURE_DEPENDENCY +V$SQL_FEATURE_HIERARCHY +V$SQL_HINT +V$SQL_JOIN_FILTER +V$SQL_MONITOR +V$SQL_MONITOR_SESSTAT +V$SQL_MONITOR_STATNAME +V$SQL_OPTIMIZER_ENV +V$SQL_PLAN +V$SQL_PLAN_MONITOR +V$SQL_PLAN_STATISTICS +V$SQL_PLAN_STATISTICS_ALL +V$SQL_REDIRECTION +V$SQL_REOPTIMIZATION_HINTS +V$SQL_SHARED_CURSOR +V$SQL_SHARED_MEMORY +V$SQL_WORKAREA +V$SQL_WORKAREA_ACTIVE +V$SQL_WORKAREA_HISTOGRAM +V$SSCR_SESSIONS +V$STANDBY_EVENT_HISTOGRAM +V$STANDBY_LOG +V$STATISTICS_LEVEL +V$STATNAME +V$STREAMS_APPLY_COORDINATOR +V$STREAMS_APPLY_READER +V$STREAMS_APPLY_SERVER +V$STREAMS_CAPTURE +V$STREAMS_MESSAGE_TRACKING +V$STREAMS_POOL_ADVICE +V$STREAMS_POOL_STATISTICS +V$STREAMS_TRANSACTION +V$SUBCACHE +V$SUBSCR_REGISTRATION_STATS +V$SYSAUX_OCCUPANTS +V$SYSMETRIC +V$SYSMETRIC_HISTORY +V$SYSMETRIC_SUMMARY +V$SYSSTAT +V$SYSTEM_CURSOR_CACHE +V$SYSTEM_EVENT +V$SYSTEM_FIX_CONTROL +V$SYSTEM_PARAMETER +V$SYSTEM_PARAMETER2 +V$SYSTEM_WAIT_CLASS +V$SYS_OPTIMIZER_ENV +V$SYS_REPORT_REQUESTS +V$SYS_REPORT_STATS +V$SYS_TIME_MODEL +V$TABLESPACE +V$TEMPFILE +V$TEMPORARY_LOBS +V$TEMPSEG_USAGE +V$TEMPSTAT +V$TEMPUNDOSTAT +V$TEMP_CACHE_TRANSFER +V$TEMP_EXTENT_MAP +V$TEMP_EXTENT_POOL +V$TEMP_PING +V$TEMP_SPACE_HEADER +V$THREAD +V$THRESHOLD_TYPES +V$TIMER +V$TIMEZONE_FILE +V$TIMEZONE_NAMES +V$TOPLEVELCALL +V$TRANSACTION +V$TRANSACTION_ENQUEUE +V$TRANSPORTABLE_PLATFORM +V$TSDP_SUPPORTED_FEATURE +V$TSM_SESSIONS +V$TYPE_SIZE +V$UNDOSTAT +V$UNIFIED_AUDIT_RECORD_FORMAT +V$UNIFIED_AUDIT_TRAIL +V$UNUSABLE_BACKUPFILE_DETAILS +V$VERSION +V$VPD_POLICY +V$WAITCLASSMETRIC +V$WAITCLASSMETRIC_HISTORY +V$WAITSTAT +V$WAIT_CHAINS +V$WALLET +V$WLM_PCMETRIC +V$WLM_PCMETRIC_HISTORY +V$WLM_PC_STATS +V$WORKLOAD_REPLAY_THREAD +V$XML_AUDIT_TRAIL +V$XSTREAM_APPLY_COORDINATOR +V$XSTREAM_APPLY_READER +V$XSTREAM_APPLY_RECEIVER +V$XSTREAM_APPLY_SERVER +V$XSTREAM_CAPTURE +V$XSTREAM_MESSAGE_TRACKING +V$XSTREAM_OUTBOUND_SERVER +V$XSTREAM_TABLE_STATS +V$XSTREAM_TRANSACTION +V$XS_SESSIONS +V$XS_SESSION_NS_ATTRIBUTE +V$XS_SESSION_NS_ATTRIBUTES +V$XS_SESSION_ROLES +V$_LOCK +V80_FMT_IMAGE +VAL1 +VAL2 +VALID +VALIDATED +VALIDATE_APEX. +VALIDATE_CONTEXT. +VALIDATE_DV. +VALIDATE_OLS. +VALIDATE_ORDIM. +VALIDATE_OWM. +VALIDATE_SDO. +VALID_NOW +VALID_ROLE +VALID_TYPE +VALUE +VALUES_CAPTURED +VALUES_REPLAYED +VALUE_ANYDATA +VALUE_BLK +VALUE_BLK_STATE +VALUE_STRING +VALUE_TYPE +VAL_LENGTH +VARCHAR2_VALUE +VARIABLE_METHOD_FUNCTION +VARIABLE_METHOD_FUNCTION_CALLS +VARIABLE_NAME +VARIABLE_TYPE +VARIABLE_VALUE_FUNCTION +VARIABLE_VALUE_FUNCTION_CALLS +VECTOR_READ +VECTOR_READ_TRACE +VECTOR_TRANSFORM +VECTOR_TRANSFORM_DIMS +VECTOR_TRANSFORM_FACT +VENDOR_NAME +VERIFIER +VERIFIER_TYPE +VERIFY +VERSION +VERSION# +VERSION_ADDED +VERSION_COUNT +VERSION_NAME +VERSION_NUM +VERSION_NUMBER +VERSION_OUTLINE +VERSION_REMOVED +VERSION_TEXT +VERSION_TIME +VERTEX_TYPE.VERTEX_TYPE +VICTIM_INSTANCE +VICTIM_OSPID +VICTIM_PID +VICTIM_QOS_PC_ITT +VICTIM_QOS_PC_KEY +VICTIM_QOS_PC_RANK +VICTIM_QOS_PC_RTT +VICTIM_REQ_LEVEL +VICTIM_RESNM +VICTIM_SERIAL# +VICTIM_SESSION_ID +VICTIM_SID +VIEW_COLUMN_ID +VIEW_COLUMN_NAME +VIEW_DEFINITION +VIEW_NAME +VIEW_RELATED +VIEW_TYPE +VIEW_TYPE_OWNER +VIRTUAL_COLUMN +VISIBILITY +VOLDEV +VOLUME_DEVICE +VOLUME_NAME +VOLUME_NUMBER +VOL_DEVICE +VOL_LABEL +VOTING_FILE +VOTING_FILES +VRN. +VSN +V_LBRECSETIMPL_T.ODCITABLECLOSE +V_LBRECSETIMPL_T.ODCITABLEFETCH +V_LBRECSETIMPL_T.ODCITABLEPREPARE +V_LBRECSETIMPL_T.ODCITABLESTART +V_LISTBACKUPPIPE. +V_LISTRSRANGEPIPE. +V_RANGERECSETIMPL_T.ODCITABLECLOSE +V_RANGERECSETIMPL_T.ODCITABLEFETCH +V_RANGERECSETIMPL_T.ODCITABLESTART +WAIT +WAITER +WAITERS_WOKEN +WAITFOR_CAP_ID +WAITING +WAITING_CON_ID +WAITING_SESSION +WAITS +WAITSQ_500B +WAITSQ_8K +WAITS_HOLDING_LATCH +WAIT_500B +WAIT_8K +WAIT_CLASS +WAIT_CLASS# +WAIT_CLASS_ID +WAIT_COUNT +WAIT_COUNT_FG +WAIT_DEPENDENCIES +WAIT_EVENT +WAIT_EVENT_TEXT +WAIT_FOR_LOG +WAIT_FOR_SCN +WAIT_ID +WAIT_OBJECT_NAME +WAIT_STATE +WAIT_TIME +WAIT_TIME_500B +WAIT_TIME_8K +WAIT_TIME_FORMAT +WAIT_TIME_MICRO +WAIT_TIME_MILLI +WAIT_TIME_SQUARED_500B +WAIT_TIME_SQUARED_8K +WAIT_TIME_SUM +WAIT_TIME_SUMX2 +WAIT_TIME_USEC +WALLET_ORDER +WALLET_PATH +WALLET_TYPE +WARNING +WARNING_FACTOR +WARNING_INCIDENTS +WARNING_OPERATOR +WARNING_VALUE +WAS_CAPTURED +WAS_FORCED +WEIGHT +WEIGHT_FACTOR +WHAT +WHEN_CLAUSE +WHERE +WHERE_CLAUSE +WHERE_IN_CODE +WHICH_QUEUE +WHY +WIDTH +WINDOWS_DOMAIN +WINDOW_ACTIVE +WINDOW_DURATION +WINDOW_DURATION_LAST_30_DAYS +WINDOW_DURATION_LAST_7_DAYS +WINDOW_END_TIME +WINDOW_GROUP +WINDOW_GROUP_NAME +WINDOW_NAME +WINDOW_NEXT_TIME +WINDOW_PRIORITY +WINDOW_START_TIME +WITH_CLUSTERING +WITH_GRANT_OPTION. +WITH_PLSQL +WITH_ROWID +WITH_ZONEMAP +WM$BCT_I_TRIG. +WM$CC_I_TRIG. +WM$CT_I_TRIG. +WM$CT_U_TRIG. +WM$EI_I_TRIG. +WM$EI_U_TRIG. +WM$EV_I_TRIG. +WM$HT_I_TRIG. +WM$LI_I_TRIG. +WM$MGWT_I_TRIG. +WM$MPWT_I_TRIG. +WM$MT_I_TRIG. +WM$MW_I_TRIG. +WM$NCT_I_TRIG. +WM$NT_I_TRIG. +WM$REPT_I_TRIG. +WM$RLT_I_TRIG. +WM$RTT_I_TRIG. +WM$RT_I_TRIG. +WM$RT_U_TRIG. +WM$RWST_I_TRIG. +WM$RWT_I_TRIG. +WM$SAV_I_TRIG. +WM$UDP_I_TRIG. +WM$UD_U_TRIG. +WM$UI_I_TRIG. +WM$VET_I_TRIG. +WM$VET_U_TRIG. +WM$VHT_I_TRIG. +WM$VTH_D_TRIG. +WM$VTH_I_TRIG. +WM$VTH_NT_D_TRIG. +WM$VTH_NT_I_TRIG. +WM$VTH_NT_U_TRIG. +WM$VTH_U_TRIG. +WM$VT_I_TRIG. +WM$WPT_D_TRIG. +WM$WPT_I_TRIG. +WM$WPT_U_TRIG. +WM$WST_I_TRIG. +WM$WT_D_TRIG. +WM$WT_I_TRIG. +WM$WT_U_TRIG. +WM_DDL_UTIL. +WM_DDL_UTIL.ADDCOLUMNS +WM_DDL_UTIL.ADDUSERCOLUMNS +WM_DDL_UTIL.ADDVALIDTIMESUPPORT +WM_DDL_UTIL.AVTDDL +WM_DDL_UTIL.BASEVIEW_COMMON +WM_DDL_UTIL.CARRYFORWARDPRIVSQL +WM_DDL_UTIL.CHECKFORERRORSEV +WM_DDL_UTIL.CHECKTABLESTATE +WM_DDL_UTIL.CHECK_MRIC_CASCADE +WM_DDL_UTIL.CONFVIEW_COMMON +WM_DDL_UTIL.CREATEAUXILIARYTABLE +WM_DDL_UTIL.CREATEBASEVIEW +WM_DDL_UTIL.CREATECONFLICTVIEW +WM_DDL_UTIL.CREATECONSVIEW +WM_DDL_UTIL.CREATEDIFFVIEW +WM_DDL_UTIL.CREATEHISTORYVIEW +WM_DDL_UTIL.CREATELCKTABLE +WM_DDL_UTIL.CREATELOCKVIEW +WM_DDL_UTIL.CREATEMWVIEW +WM_DDL_UTIL.CREATENESTEDTABLEBASEVIEW +WM_DDL_UTIL.CREATENESTEDTABLECONSVIEW +WM_DDL_UTIL.CREATETEMPTOPVIEW +WM_DDL_UTIL.CREATETOPVIEW +WM_DDL_UTIL.CREATEUNIONBASEVIEW +WM_DDL_UTIL.CREATEUSERVIEWS +WM_DDL_UTIL.CREATEVTTABLE +WM_DDL_UTIL.DELETENONLATESTDATAFROMLIVE +WM_DDL_UTIL.DELETENONLIVEDATA +WM_DDL_UTIL.DIFFVIEW_COMMON +WM_DDL_UTIL.DROPCONFLICTSRELATED +WM_DDL_UTIL.DROPDIFFRELATED +WM_DDL_UTIL.DROPWMCOLUMNS +WM_DDL_UTIL.FIXCONSTRAINTSEV +WM_DDL_UTIL.FIXINDEXEV +WM_DDL_UTIL.FIXPRIVSEV +WM_DDL_UTIL.GETASSOCIATEDINDEX +WM_DDL_UTIL.GETCOLSTREV +WM_DDL_UTIL.GETINDEXCLAUSE +WM_DDL_UTIL.GETINDEXCOLUMNS +WM_DDL_UTIL.GETINDEXSUBCLAUSE +WM_DDL_UTIL.GRANTWMSYSPRIVS +WM_DDL_UTIL.INDEXCREATEDBYCONSTRAINT +WM_DDL_UTIL.IS_RIC_CHILD_OF_ENABLED_TABLE +WM_DDL_UTIL.IS_RIC_PARENT +WM_DDL_UTIL.MODIFYNESTEDCOLUMNSDV +WM_DDL_UTIL.MODIFYNESTEDCOLUMNSEV +WM_DDL_UTIL.MODIFYNESTEDCOLUMNS_DDL +WM_DDL_UTIL.NESTEDTABLE_LTSELECT +WM_DDL_UTIL.REBUILDINDEX +WM_DDL_UTIL.RECREATEORIGINALCONSTRAINTS +WM_DDL_UTIL.RECREATEORIGINALINDICES +WM_DDL_UTIL.RECREATEPTAFTERTRIGS +WM_DDL_UTIL.RENAMECONSTRAINT +WM_DDL_UTIL.RENAMEINDEX +WM_DDL_UTIL.RENAMETABDV +WM_DDL_UTIL.RENAMETABEV +WM_DDL_UTIL.REVOKEWMSYSPRIVS +WM_DDL_UTIL.SYNCRONIZEVTVIEWS +WM_ERROR. +WM_ERROR.RAISEERROR +WM_PERIOD.WM_PERIOD_MAP +WORKAREA_ADDRESS +WORKAREA_MAX_MEM +WORKAREA_MAX_TEMPSEG +WORKAREA_MEM +WORKAREA_TEMPSEG +WORKERS +WORKING +WORKLOAD_ID +WORKLOAD_NAME +WORKSPACE_NAME +WORK_AREA_SIZE +WORK_HEAP_MEM +WORK_MICROSEC +WORK_REQUEST_CLASS +WPG_DOCLOAD. +WPG_DOCLOAD.DOWNLOAD_FILE +WPG_DOCLOAD.GET_CONTENT_LENGTH +WPG_DOCLOAD.GET_DOWNLOAD_BFILE +WPG_DOCLOAD.GET_DOWNLOAD_BLOB +WPG_DOCLOAD.GET_DOWNLOAD_FILE +WPG_DOCLOAD.GET_DOWNLOAD_FILE_RAW +WPG_DOCLOAD.IS_FILE_DOWNLOAD +WPIUTL. +WPIUTL.SUBPFPARAM +WPIUTL.SUBPPARAM +WRAPS +WRB +WRB_FORCED_WRITE +WRC_ID +WRI +WRI$_ADV_ABSTRACT_T.SUB_CLEANUP +WRI$_ADV_ABSTRACT_T.SUB_CREATE +WRI$_ADV_ABSTRACT_T.SUB_DELETE +WRI$_ADV_ABSTRACT_T.SUB_DELETE_EXECUTION +WRI$_ADV_ABSTRACT_T.SUB_EXECUTE +WRI$_ADV_ABSTRACT_T.SUB_GET_REC_ATTR +WRI$_ADV_ABSTRACT_T.SUB_GET_REPORT +WRI$_ADV_ABSTRACT_T.SUB_GET_SCRIPT +WRI$_ADV_ABSTRACT_T.SUB_IMPLEMENT +WRI$_ADV_ABSTRACT_T.SUB_IMPORT_DIRECTIVES +WRI$_ADV_ABSTRACT_T.SUB_PARAM_VALIDATE +WRI$_ADV_ABSTRACT_T.SUB_QUICK_TUNE +WRI$_ADV_ABSTRACT_T.SUB_RESET +WRI$_ADV_ABSTRACT_T.SUB_RESUME +WRI$_ADV_ABSTRACT_T.SUB_UPDATE_REC_ATTR +WRI$_ADV_ABSTRACT_T.SUB_USER_SETUP +WRI$_ADV_ABSTRACT_T.SUB_VALIDATE_DIRECTIVE +WRI$_ADV_COMPRESSION_T.SUB_EXECUTE +WRI$_ADV_COMPRESSION_T.SUB_GET_REPORT +WRI$_ADV_HDM_T.SUB_DELETE +WRI$_ADV_HDM_T.SUB_EXECUTE +WRI$_ADV_HDM_T.SUB_GET_REPORT +WRI$_ADV_HDM_T.SUB_PARAM_VALIDATE +WRI$_ADV_HDM_T.SUB_RESET +WRI$_ADV_OBJSPACE_TREND_T.SUB_EXECUTE +WRI$_ADV_SPM_EVOLVE.SUB_DELETE +WRI$_ADV_SPM_EVOLVE.SUB_DELETE_EXECUTION +WRI$_ADV_SPM_EVOLVE.SUB_EXECUTE +WRI$_ADV_SPM_EVOLVE.SUB_GET_REPORT +WRI$_ADV_SPM_EVOLVE.SUB_GET_SCRIPT +WRI$_ADV_SPM_EVOLVE.SUB_PARAM_VALIDATE +WRI$_ADV_SPM_EVOLVE.SUB_RESET +WRI$_ADV_SPM_EVOLVE.SUB_RESUME +WRI$_ADV_SQLACCESS_ADV.SUB_CLEANUP +WRI$_ADV_SQLACCESS_ADV.SUB_CREATE +WRI$_ADV_SQLACCESS_ADV.SUB_DELETE +WRI$_ADV_SQLACCESS_ADV.SUB_EXECUTE +WRI$_ADV_SQLACCESS_ADV.SUB_GET_REC_ATTR +WRI$_ADV_SQLACCESS_ADV.SUB_GET_REPORT +WRI$_ADV_SQLACCESS_ADV.SUB_GET_SCRIPT +WRI$_ADV_SQLACCESS_ADV.SUB_IMPLEMENT +WRI$_ADV_SQLACCESS_ADV.SUB_IMPORT_DIRECTIVES +WRI$_ADV_SQLACCESS_ADV.SUB_PARAM_VALIDATE +WRI$_ADV_SQLACCESS_ADV.SUB_QUICK_TUNE +WRI$_ADV_SQLACCESS_ADV.SUB_RESET +WRI$_ADV_SQLACCESS_ADV.SUB_RESUME +WRI$_ADV_SQLACCESS_ADV.SUB_UPDATE_REC_ATTR +WRI$_ADV_SQLACCESS_ADV.SUB_USER_SETUP +WRI$_ADV_SQLACCESS_ADV.SUB_VALIDATE_DIRECTIVE +WRI$_ADV_SQLTUNE.SUB_DELETE +WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION +WRI$_ADV_SQLTUNE.SUB_EXECUTE +WRI$_ADV_SQLTUNE.SUB_GET_REPORT +WRI$_ADV_SQLTUNE.SUB_GET_SCRIPT +WRI$_ADV_SQLTUNE.SUB_PARAM_VALIDATE +WRI$_ADV_SQLTUNE.SUB_RESET +WRI$_ADV_SQLTUNE.SUB_RESUME +WRI$_ADV_TUNEMVIEW_ADV.SUB_CLEANUP +WRI$_ADV_TUNEMVIEW_ADV.SUB_DELETE +WRI$_ADV_TUNEMVIEW_ADV.SUB_EXECUTE +WRI$_ADV_TUNEMVIEW_ADV.SUB_GET_REC_ATTR +WRI$_ADV_TUNEMVIEW_ADV.SUB_GET_SCRIPT +WRI$_ADV_TUNEMVIEW_ADV.SUB_IMPLEMENT +WRI$_ADV_TUNEMVIEW_ADV.SUB_IMPORT_DIRECTIVES +WRI$_ADV_TUNEMVIEW_ADV.SUB_PARAM_VALIDATE +WRI$_ADV_TUNEMVIEW_ADV.SUB_QUICK_TUNE +WRI$_ADV_TUNEMVIEW_ADV.SUB_RESET +WRI$_ADV_TUNEMVIEW_ADV.SUB_RESUME +WRI$_ADV_TUNEMVIEW_ADV.SUB_UPDATE_REC_ATTR +WRI$_ADV_TUNEMVIEW_ADV.SUB_USER_SETUP +WRI$_ADV_TUNEMVIEW_ADV.SUB_VALIDATE_DIRECTIVE +WRI$_ADV_UNDO_ADV.SUB_EXECUTE +WRI$_ADV_WORKLOAD.SUB_CREATE +WRI$_ADV_WORKLOAD.SUB_DELETE +WRI$_ADV_WORKLOAD.SUB_GET_REPORT +WRI$_ADV_WORKLOAD.SUB_PARAM_VALIDATE +WRI$_ADV_WORKLOAD.SUB_RESET +WRI$_ADV_WORKLOAD.SUB_USER_SETUP +WRI$_REPT_ABSTRACT_T.CUSTOM_FORMAT +WRI$_REPT_ABSTRACT_T.GET_REPORT +WRI$_REPT_ABSTRACT_T.GET_REPORT_WITH_SUMMARY +WRI$_REPT_ADDM.GET_REPORT +WRI$_REPT_ARC.GET_REPORT +WRI$_REPT_ASH.GET_REPORT +WRI$_REPT_AWRV.GET_REPORT +WRI$_REPT_CELL.GET_REPORT +WRI$_REPT_CONFIG.GET_REPORT +WRI$_REPT_CPADDM.GET_REPORT +WRI$_REPT_DBHOME.GET_REPORT +WRI$_REPT_DBREPLAY.GET_REPORT +WRI$_REPT_EMX_PERF.GET_REPORT +WRI$_REPT_MEMORY.GET_REPORT +WRI$_REPT_OPTSTATS.GET_REPORT +WRI$_REPT_PERF.GET_REPORT +WRI$_REPT_PLAN_DIFF.GET_REPORT +WRI$_REPT_RTADDM.GET_REPORT +WRI$_REPT_SECURITY.GET_REPORT +WRI$_REPT_SESSION.GET_REPORT +WRI$_REPT_SPMEVOLVE.GET_REPORT +WRI$_REPT_SQLDETAIL.GET_REPORT +WRI$_REPT_SQLMONITOR.GET_REPORT +WRI$_REPT_SQLMONITOR.GET_REPORT_WITH_SUMMARY +WRI$_REPT_SQLPI.CUSTOM_FORMAT +WRI$_REPT_SQLPI.GET_REPORT +WRI$_REPT_SQLT.GET_REPORT +WRI$_REPT_STORAGE.GET_REPORT +WRI$_REPT_TCB.GET_REPORT +WRI$_REPT_XPLAN.GET_REPORT +WRITE1 +WRITE10 +WRITE100 +WRITE1000 +WRITE10000 +WRITEDC +WRITES +WRITES# +WRITES_AUTOTUNE +WRITES_AVG +WRITES_FULL_THREAD_CKPT +WRITES_LOGFILE_SIZE +WRITES_LOG_CHECKPOINT_SETTINGS +WRITES_MTTR +WRITES_OTHER_SETTINGS +WRITES_SUM +WRITES_SUMX2 +WRITETIM +WRITE_COMPLETE_WAIT +WRITE_ERRS +WRITE_LATENCY +WRITE_MB_AVG +WRITE_MB_SUM +WRITE_MB_SUMX2 +WRITE_TIME +WRITE_TIMEOUT +WRITING +WRL_PARAMETER +WRL_TYPE +WRR$_ASH_TIME_PERIOD.WRR$_ASH_TIME_PERIOD +WS. +WTMAX +WTR_SLP_COUNT +WWV_BIU_COMPUTATIONS_AUDIT. +WWV_BIU_ENTRY_POINTS_AUDIT. +WWV_BIU_ENTRY_POINT_ARGS_AUDIT. +WWV_BIU_FLOWLISTTMPLTS_AUDIT. +WWV_BIU_FLOWPAGEPLUGS_AUDIT. +WWV_BIU_FLOWPAGEPLUGTEMP_AUDIT. +WWV_BIU_FLOWROWTMPLTS_AUDIT. +WWV_BIU_FLOWS_AUDIT. +WWV_BIU_FLOWTHEMES_AUDIT. +WWV_BIU_FLOW_AUTHENT_AUDIT. +WWV_BIU_FLOW_BUILD_AUDIT_T. +WWV_BIU_FLOW_DATA_LOAD_BAD_LOG. +WWV_BIU_FLOW_DATA_LOAD_UNLOAD. +WWV_BIU_FLOW_DEVELOPERS_AUDIT. +WWV_BIU_FLOW_FILE_OBJECTS. +WWV_BIU_FLOW_ICON_BAR_AUDIT. +WWV_BIU_FLOW_ITEMS_AUDIT. +WWV_BIU_FLOW_LISTS_AUDIT. +WWV_BIU_FLOW_LIST_ITEMS_AUDIT. +WWV_BIU_FLOW_LOVD_AUDIT. +WWV_BIU_FLOW_LOV_AUDIT. +WWV_BIU_FLOW_LOV_VAL_AUDIT. +WWV_BIU_FLOW_MENU_OPT_AUDIT. +WWV_BIU_FLOW_MESSAGES_AUDIT. +WWV_BIU_FLOW_PAGE_DA_A_AUDIT. +WWV_BIU_FLOW_PAGE_DA_E_AUDIT. +WWV_BIU_FLOW_PATCHES_AUDIT. +WWV_BIU_FLOW_PLUGIN_ATTRV_AUDI. +WWV_BIU_FLOW_PLUGIN_ATTR_AUDIT. +WWV_BIU_FLOW_PLUGIN_AUDIT. +WWV_BIU_FLOW_PLUGIN_EVNT_AUDIT. +WWV_BIU_FLOW_PLUGIN_FILE_AUDIT. +WWV_BIU_FLOW_PLUGIN__SET_AUDIT. +WWV_BIU_FLOW_PROV_COMPANY. +WWV_BIU_FLOW_PROV_COMP_SMOD. +WWV_BIU_FLOW_RPT_LAYOUTS_AUDIT. +WWV_BIU_FLOW_SEC_SCHEMES_AUDIT. +WWV_BIU_FLOW_SHARED_WS_AUDIT. +WWV_BIU_FLOW_SHORTCUTS_AUDIT. +WWV_BIU_FLOW_SHRD_QRY_AUDIT. +WWV_BIU_FLOW_STEPS_AUDIT. +WWV_BIU_FLOW_STEP_ITEM_HELP_A. +WWV_BIU_FLOW_TABS_AUDIT. +WWV_BIU_FLOW_THEME_STYLE_AUDIT. +WWV_BIU_FLOW_TL_TABS_AUDIT. +WWV_BIU_FLOW_TMPLTS_AUDIT. +WWV_BIU_FLOW_TREES_AUDIT. +WWV_BIU_FLOW_UI_TYPE_AUDIT. +WWV_BIU_FLOW_USER_INT_AUDIT. +WWV_BIU_FLOW_VAL_AUDIT. +WWV_BIU_FLW_EFF_UID_MAP_AUDIT. +WWV_BIU_MIG_ACCGRPSMBRS. +WWV_BIU_MIG_ACC_COLUMN. +WWV_BIU_MIG_ACC_FRM. +WWV_BIU_MIG_ACC_FRM_CTL. +WWV_BIU_MIG_ACC_FRM_MDL. +WWV_BIU_MIG_ACC_FRM_PERM. +WWV_BIU_MIG_ACC_GROUPS. +WWV_BIU_MIG_ACC_IDX_COL. +WWV_BIU_MIG_ACC_INDEX. +WWV_BIU_MIG_ACC_MAIN. +WWV_BIU_MIG_ACC_MDL_PERM. +WWV_BIU_MIG_ACC_MODULES. +WWV_BIU_MIG_ACC_PAGES. +WWV_BIU_MIG_ACC_PROJECT. +WWV_BIU_MIG_ACC_QUERIES. +WWV_BIU_MIG_ACC_REL. +WWV_BIU_MIG_ACC_REL_COL. +WWV_BIU_MIG_ACC_RPT_CTL. +WWV_BIU_MIG_ACC_RPT_GRP. +WWV_BIU_MIG_ACC_RPT_MDL. +WWV_BIU_MIG_ACC_RPT_PERM. +WWV_BIU_MIG_ACC_TABLE. +WWV_BIU_MIG_ACC_TAB_PERM. +WWV_BIU_MIG_ACC_USERS. +WWV_BIU_MIG_FMB_MNUITEMRL. +WWV_BIU_MIG_FORMS. +WWV_BIU_MIG_FRM_ALERTS. +WWV_BIU_MIG_FRM_ATACHEDLIBRARY. +WWV_BIU_MIG_FRM_BLK_DSA. +WWV_BIU_MIG_FRM_BLK_DSC. +WWV_BIU_MIG_FRM_BLK_ITEMS. +WWV_BIU_MIG_FRM_BLK_ITEM_LIE. +WWV_BIU_MIG_FRM_BLK_ITEM_RADIO. +WWV_BIU_MIG_FRM_BLK_ITEM_TRG. +WWV_BIU_MIG_FRM_BLK_RELATIONS. +WWV_BIU_MIG_FRM_BLK_TRIGGERS. +WWV_BIU_MIG_FRM_BLOCKS. +WWV_BIU_MIG_FRM_CANVAS. +WWV_BIU_MIG_FRM_CNVG_CPDTXT. +WWV_BIU_MIG_FRM_CNVS_GRAPHICS. +WWV_BIU_MIG_FRM_CNVS_TABPAGE. +WWV_BIU_MIG_FRM_COORDINATES. +WWV_BIU_MIG_FRM_CPDTXT_TXTSGMT. +WWV_BIU_MIG_FRM_EDITOR. +WWV_BIU_MIG_FRM_FMB_MENU. +WWV_BIU_MIG_FRM_FMB_MENUITEM. +WWV_BIU_MIG_FRM_FORMMODULES. +WWV_BIU_MIG_FRM_LOV. +WWV_BIU_MIG_FRM_LOVCOLMAPPING. +WWV_BIU_MIG_FRM_MODULES. +WWV_BIU_MIG_FRM_MODULPARAMETER. +WWV_BIU_MIG_FRM_OBJECTGROUP. +WWV_BIU_MIG_FRM_OBJGROUPCHILD. +WWV_BIU_MIG_FRM_PROGRAMUNIT. +WWV_BIU_MIG_FRM_PROPERTYCLASS. +WWV_BIU_MIG_FRM_RECGRPCOLUMN. +WWV_BIU_MIG_FRM_RECORDGROUPS. +WWV_BIU_MIG_FRM_REPORT. +WWV_BIU_MIG_FRM_REV_APEX_APP. +WWV_BIU_MIG_FRM_REV_BLK_ITEMS. +WWV_BIU_MIG_FRM_REV_BLOCKS. +WWV_BIU_MIG_FRM_REV_FORMMODULE. +WWV_BIU_MIG_FRM_REV_LCM. +WWV_BIU_MIG_FRM_REV_LOV. +WWV_BIU_MIG_FRM_TRIGGERS. +WWV_BIU_MIG_FRM_VISUALATTR. +WWV_BIU_MIG_FRM_WINDOWS. +WWV_BIU_MIG_FRM_XMLTAGTABLEMAP. +WWV_BIU_MIG_GEN_APPLICATIONS. +WWV_BIU_MIG_GRP. +WWV_BIU_MIG_GRP_FIELD. +WWV_BIU_MIG_GRP_FILTER. +WWV_BIU_MIG_GRP_FORM. +WWV_BIU_MIG_GRP_ITEM. +WWV_BIU_MIG_GRP_ITEMDESC. +WWV_BIU_MIG_GRP_ITEMPRIV. +WWV_BIU_MIG_GRP_ROW. +WWV_BIU_MIG_GRP_SUM. +WWV_BIU_MIG_MENUS. +WWV_BIU_MIG_MNU. +WWV_BIU_MIG_MNUITEM. +WWV_BIU_MIG_MNUITEMRL. +WWV_BIU_MIG_MNU_MNUMODULES. +WWV_BIU_MIG_MNU_MODROLES. +WWV_BIU_MIG_MNU_MODULES. +WWV_BIU_MIG_MNU_PROGUNIT. +WWV_BIU_MIG_MNU_XMLTAGTABLEMAP. +WWV_BIU_MIG_OLB. +WWV_BIU_MIG_OLB_BI_TRIGGER. +WWV_BIU_MIG_OLB_BLK_DSC. +WWV_BIU_MIG_OLB_BLK_ITEM. +WWV_BIU_MIG_OLB_BLK_ITEM_LIE. +WWV_BIU_MIG_OLB_BLK_TRIGGER. +WWV_BIU_MIG_OLB_BLOCK. +WWV_BIU_MIG_OLB_CANVAS. +WWV_BIU_MIG_OLB_CG_COMPOUNDTXT. +WWV_BIU_MIG_OLB_CG_CT_TXTSGMNT. +WWV_BIU_MIG_OLB_CNVS_GRAPHICS. +WWV_BIU_MIG_OLB_MODULES. +WWV_BIU_MIG_OLB_OBJECTLIBRARY. +WWV_BIU_MIG_OLB_OBJLIBTAB. +WWV_BIU_MIG_OLB_OLT_ALERT. +WWV_BIU_MIG_OLB_OLT_BI_TRIGGER. +WWV_BIU_MIG_OLB_OLT_BLK_ITEM. +WWV_BIU_MIG_OLB_OLT_BLOCK. +WWV_BIU_MIG_OLB_OLT_CANVAS. +WWV_BIU_MIG_OLB_OLT_CNV_GRPHCS. +WWV_BIU_MIG_OLB_OLT_GRAPHICS. +WWV_BIU_MIG_OLB_OLT_ITEM. +WWV_BIU_MIG_OLB_OLT_MENU. +WWV_BIU_MIG_OLB_OLT_M_MENUITEM. +WWV_BIU_MIG_OLB_OLT_OBJGRP. +WWV_BIU_MIG_OLB_OLT_OB_OBCHILD. +WWV_BIU_MIG_OLB_OLT_REPORT. +WWV_BIU_MIG_OLB_OLT_TABPAGE. +WWV_BIU_MIG_OLB_OLT_TP_GRAPHCS. +WWV_BIU_MIG_OLB_OLT_VA. +WWV_BIU_MIG_OLB_OLT_WINDOW. +WWV_BIU_MIG_OLB_PROGRAMUNIT. +WWV_BIU_MIG_OLB_PROPERTYCLASS. +WWV_BIU_MIG_OLB_TTP5GCTTS. +WWV_BIU_MIG_OLB_TTPGGCTTS. +WWV_BIU_MIG_OLB_TTPGGGCTTS. +WWV_BIU_MIG_OLB_TTPGGGGCT. +WWV_BIU_MIG_OLB_TTPGGGGCTTS. +WWV_BIU_MIG_OLB_TTPGGGGGCT. +WWV_BIU_MIG_OLB_T_TP_GGGG. +WWV_BIU_MIG_OLB_T_TP_GGGGG. +WWV_BIU_MIG_OLB_T_TP_GGG_CT. +WWV_BIU_MIG_OLB_T_TP_GG_CT. +WWV_BIU_MIG_OLB_T_TP_GG_GRPHCS. +WWV_BIU_MIG_OLB_T_TP_G_GRAPHCS. +WWV_BIU_MIG_OLB_VISUALATTRBUTE. +WWV_BIU_MIG_OLB_WINDOW. +WWV_BIU_MIG_OLB_XMLTAGTABLEMAP. +WWV_BIU_MIG_PLLS. +WWV_BIU_MIG_PROJ_COMPS. +WWV_BIU_MIG_PROJ_TRIGS. +WWV_BIU_MIG_REPDATA. +WWV_BIU_MIG_REPORT. +WWV_BIU_MIG_REPSRC. +WWV_BIU_MIG_RPTPRIV. +WWV_BIU_MIG_RPTS. +WWV_BIU_MIG_RPT_DATASUM. +WWV_BIU_MIG_RPT_XMLTAGTABLEMAP. +WWV_BIU_MIG_SELECT. +WWV_BIU_PROCESSING_AUDIT. +WWV_BIU_STEP_BRANCHES_AUDIT. +WWV_BIU_STEP_BRANCH_ARGS_AUDIT. +WWV_BIU_STEP_BUTTONS_AUDIT. +WWV_BIU_STEP_COMP_AUDIT. +WWV_BIU_STEP_ITEMS_AUDIT. +WWV_BIU_STEP_PROCESSING_AUDIT. +WWV_BIU_STEP_VALID_AUDIT. +WWV_BIU_WWV_MIG_REV_APEX. +WWV_BIU_WWV_MIG_REV_FORMS. +WWV_BIU_WWV_MIG_REV_QUERIES. +WWV_BIU_WWV_MIG_REV_REPORTS. +WWV_BIU_WWV_MIG_REV_TABLES. +WWV_CALCULATOR. +WWV_CALCULATOR.DRAW +WWV_CALCULATOR.SHOW +WWV_DBMS_SQL. +WWV_DBMS_SQL.CHECK_PLSQL +WWV_DBMS_SQL.CLEAR_ERROR_BACKTRACE +WWV_DBMS_SQL.COUNTEM +WWV_DBMS_SQL.FUNC_RETURNING_CURSOR +WWV_DBMS_SQL.GET_ERROR_BACKTRACE +WWV_DBMS_SQL.GET_PARALLEL_REQUESTS +WWV_DBMS_SQL.GET_USERID +WWV_DBMS_SQL.KILL_SESSION +WWV_DBMS_SQL.PARSE_AS_USER +WWV_DBMS_SQL.RUN_BLOCK +WWV_DBMS_SQL.RUN_BLOCK2 +WWV_DBMS_SQL.RUN_BLOCK3 +WWV_DBMS_SQL.RUN_BLOCK4 +WWV_DBMS_SQL.RUN_BLOCK5 +WWV_DBMS_SQL.RUN_DDL +WWV_DBMS_SQL.SELECT_DATE +WWV_DBMS_SQL.SELECT_NUM +WWV_DBMS_SQL.SELECT_VC +WWV_DBMS_SQL.VALUEOF_DATE +WWV_DBMS_SQL.VALUEOF_NUM +WWV_DBMS_SQL.VALUEOF_VC +WWV_FLOW. +WWV_FLOW.ACCEPT +WWV_FLOW.CLEAR_APP_CACHE +WWV_FLOW.CLEAR_COMPONENT +WWV_FLOW.CLEAR_FLOW_CACHE +WWV_FLOW.CLEAR_PAGE_CACHE +WWV_FLOW.CLEAR_PAGE_CACHES +WWV_FLOW.CLEAR_USER_CACHE +WWV_FLOW.DEBUG +WWV_FLOW.DO_SUBSTITUTIONS +WWV_FLOW.FETCH_APP_ITEM +WWV_FLOW.FETCH_FLOW_ITEM +WWV_FLOW.FIND_ITEM_ID +WWV_FLOW.FIND_ITEM_NAME +WWV_FLOW.GET_APPLICATION_ID +WWV_FLOW.GET_BROWSER_VERSION +WWV_FLOW.GET_COMPANY_NAME +WWV_FLOW.GET_COMPONENT +WWV_FLOW.GET_CUSTOM_AUTH_LOGIN_URL +WWV_FLOW.GET_ELAPSED_TIME +WWV_FLOW.GET_FORM_CLOSE_TAG +WWV_FLOW.GET_G_BASE_HREF +WWV_FLOW.GET_HOME_LINK_URL +WWV_FLOW.GET_NEXT_SESSION_ID +WWV_FLOW.GET_NLS_DECIMAL_SEPARATOR +WWV_FLOW.GET_NLS_GROUP_SEPARATOR +WWV_FLOW.GET_PAGE_ALIAS +WWV_FLOW.GET_PAGE_ID +WWV_FLOW.GET_SECURITY_GROUP_ID +WWV_FLOW.GET_SESSION_ID +WWV_FLOW.GET_SGID +WWV_FLOW.GET_TRANSLATED_APP_ID +WWV_FLOW.GET_UNIQUE_ID +WWV_FLOW.G_INLINE_VALIDATION_ERROR_CNT +WWV_FLOW.HELP +WWV_FLOW.IS_CUSTOM_AUTH_PAGE +WWV_FLOW.IS_PRESSED_BUTTON +WWV_FLOW.NULL_PAGE_CACHE +WWV_FLOW.NULL_PAGE_CACHES +WWV_FLOW.NULL_STEP_CACHE +WWV_FLOW.NULL_STEP_CACHES +WWV_FLOW.PAINT_BUTTONS +WWV_FLOW.PAINT_FORMOPEN +WWV_FLOW.PROCESS_STATE +WWV_FLOW.PUBLIC_ROLE_CHECK +WWV_FLOW.PUBLIC_SECURITY_CHECK +WWV_FLOW.REPLACE_CGI_ENV +WWV_FLOW.RESET_G_BASE_HREF +WWV_FLOW.RESET_G_NLS_DATE_FORMAT +WWV_FLOW.RESET_G_NLS_DECIMAL_SEPARATOR +WWV_FLOW.RESET_PAGE_PROCESS +WWV_FLOW.RESET_PAGE_PROCESSESS +WWV_FLOW.RESET_SECURITY_CHECK +WWV_FLOW.S +WWV_FLOW.SET_COMPONENT +WWV_FLOW.SET_G_BASE_HREF +WWV_FLOW.SET_G_NLS_DATE_FORMAT +WWV_FLOW.SET_G_NLS_DECIMAL_SEPARATOR +WWV_FLOW.SET_PPR_QUERY_SESSION_STATE +WWV_FLOW.SHOW +WWV_FLOW.SHOW_ERROR_MESSAGE +WWV_FLOW.STOP_APEX_ENGINE +WWV_FLOW.TRIM_NL_SP_TAB +WWV_FLOW.TRIM_SQL +WWV_FLOW.UPDATE_CACHE_WITH_WRITE +WWV_FLOWS_RELEASE. +WWV_FLOWS_T1. +WWV_FLOWS_VERSION. +WWV_FLOW_4000_UI. +WWV_FLOW_4000_UI.GET_TIMEFRAME +WWV_FLOW_4000_UI.GET_VALIDATION +WWV_FLOW_4000_UI.LOG_EVENT +WWV_FLOW_4000_UI.NEWS +WWV_FLOW_4000_UI.P320_CREATE_COLLECTION +WWV_FLOW_4000_UI.PRINT_APEX_ONLINE_INFO +WWV_FLOW_4000_UI.PRINT_CGI_ENV +WWV_FLOW_4000_UI.PRINT_LOV_EXAMPLES +WWV_FLOW_4000_UI.REPOSITORY +WWV_FLOW_4000_UI.SHOW_HISTORY +WWV_FLOW_4000_UI.SHOW_NEWS +WWV_FLOW_4000_UI.SHOW_PAGE_EVENT_LINK +WWV_FLOW_4000_UI.SHOW_SENT_STATISTICS +WWV_FLOW_4000_UI.SHOW_TABS +WWV_FLOW_4000_UI.SHOW_WORKSPACE_NOTIFICATION +WWV_FLOW_4000_UI.STATISTICS +WWV_FLOW_4000_UI.TOP_APPLICATIONS +WWV_FLOW_4000_UI.TOP_APPLICATIONS_COMBO2 +WWV_FLOW_4000_UI.TOP_USERS2 +WWV_FLOW_4000_UI.TOP_WEBSHEETS +WWV_FLOW_4000_UI.UPDATES +WWV_FLOW_4000_UI.WORKSPACE_NOTIFICATION_EXISTS +WWV_FLOW_4050_UI. +WWV_FLOW_4050_UI.SHOW_EDIT_SYSTEM_MESSAGE +WWV_FLOW_4050_UI.SHOW_SYSTEM_MESSAGE +WWV_FLOW_4050_UI.SHOW_WORKSPACE_ADMINS +WWV_FLOW_4050_UI.SYSTEM_MESSAGE_EXISTS +WWV_FLOW_4050_UI.TOP_APPLICATIONS +WWV_FLOW_4050_UI.TOP_USERS +WWV_FLOW_4050_UI.TOP_WORKSPACES +WWV_FLOW_4050_UI.TOP_WORKSPACE_APPLICATIONS +WWV_FLOW_4050_UI.TOP_WORKSPACE_USERS +WWV_FLOW_ADMIN_API. +WWV_FLOW_ADMIN_API.ARCHIVE_ACTIVITY_LOG +WWV_FLOW_ADMIN_API.CREATE_USER +WWV_FLOW_ADMIN_API.DELETE_DEVELOPER_ROLE +WWV_FLOW_ADMIN_API.EDIT_DEVELOPER_ROLE +WWV_FLOW_ADMIN_API.EDIT_DEVELOPER_ROLES +WWV_FLOW_ADMIN_API.EDIT_USER +WWV_FLOW_ADMIN_API.EDIT_USER_AND_GROUP +WWV_FLOW_ADMIN_API.FETCH_USER +WWV_FLOW_ADMIN_API.GET_LAST_ARCHIVED_DATE +WWV_FLOW_ADMIN_API.LOCK_WORKSPACE +WWV_FLOW_ADMIN_API.REMOVE_USER +WWV_FLOW_ADVISOR_CHECKS_API. +WWV_FLOW_ADVISOR_CHECKS_API.AJAX_ITEMS_WITH_SSP +WWV_FLOW_ADVISOR_DEV. +WWV_FLOW_ADVISOR_DEV.CHECK_APPLICATION +WWV_FLOW_ADVISOR_DEV.CHECK_TARGET_PAGE_AUTH +WWV_FLOW_ADVISOR_DEV.GET_TYPE +WWV_FLOW_ADVISOR_DEV.VERIFY_CLOB_PROPERTY +WWV_FLOW_ADVISOR_DEV.VERIFY_NUMBER_PROPERTY +WWV_FLOW_ADVISOR_DEV.VERIFY_VARCHAR2_PROPERTY +WWV_FLOW_ADV_CAT_T1. +WWV_FLOW_ADV_CHK_T1. +WWV_FLOW_ADV_CHK__MSG_T1. +WWV_FLOW_AJAX. +WWV_FLOW_AJAX.AJAX_COLLECTION +WWV_FLOW_AJAX.JSON_FROM_ARRAY +WWV_FLOW_AJAX.JSON_FROM_ITEMS +WWV_FLOW_AJAX.JSON_FROM_SQL +WWV_FLOW_AJAX.JSON_FROM_STRING +WWV_FLOW_AJAX.JSON_REPLACE +WWV_FLOW_AJAX.WIDGET +WWV_FLOW_API. +WWV_FLOW_API.APPEND_TO_INSTALL_SCRIPT +WWV_FLOW_API.CHECK_FOR_VALID_FLOW_RANGE +WWV_FLOW_API.CHECK_SGID +WWV_FLOW_API.CHECK_SGID_FOR_APP_ID +WWV_FLOW_API.CHECK_SGID_FOR_WS_APP_ID +WWV_FLOW_API.CHECK_VERSION +WWV_FLOW_API.CREATE_APP_BUILD_PREF +WWV_FLOW_API.CREATE_APP_COMMENTS +WWV_FLOW_API.CREATE_APP_FROM_QUERY +WWV_FLOW_API.CREATE_AUTHENTICATION +WWV_FLOW_API.CREATE_AUTH_SETUP +WWV_FLOW_API.CREATE_BUG +WWV_FLOW_API.CREATE_BUILD_OPTION +WWV_FLOW_API.CREATE_BUTTON_TEMPLATES +WWV_FLOW_API.CREATE_CALENDAR +WWV_FLOW_API.CREATE_CALENDAR_TEMPLATE +WWV_FLOW_API.CREATE_CHART_SERIES_ATTR +WWV_FLOW_API.CREATE_CLICKTHRU_LOG$ +WWV_FLOW_API.CREATE_CLICKTHRU_LOG2$ +WWV_FLOW_API.CREATE_DATA_LOAD_BAD_LOG +WWV_FLOW_API.CREATE_DATA_LOAD_UNLOAD +WWV_FLOW_API.CREATE_DYNAMIC_TRANSLATION +WWV_FLOW_API.CREATE_ENTRY_POINT +WWV_FLOW_API.CREATE_ENTRY_POINT_ARGS +WWV_FLOW_API.CREATE_FIELD_TEMPLATE +WWV_FLOW_API.CREATE_FLASH_CHART +WWV_FLOW_API.CREATE_FLASH_CHART5 +WWV_FLOW_API.CREATE_FLASH_CHART5_SERIES +WWV_FLOW_API.CREATE_FLASH_CHART_SERIES +WWV_FLOW_API.CREATE_FLOW +WWV_FLOW_API.CREATE_FLOW_COMPUTATION +WWV_FLOW_API.CREATE_FLOW_ITEM +WWV_FLOW_API.CREATE_FLOW_PROCESS +WWV_FLOW_API.CREATE_GENERIC_ATTR +WWV_FLOW_API.CREATE_ICON_BAR +WWV_FLOW_API.CREATE_ICON_BAR_ITEM +WWV_FLOW_API.CREATE_IMAGE +WWV_FLOW_API.CREATE_INSTALL +WWV_FLOW_API.CREATE_INSTALL_BUILD_OPTION +WWV_FLOW_API.CREATE_INSTALL_CHECK +WWV_FLOW_API.CREATE_INSTALL_SCRIPT +WWV_FLOW_API.CREATE_JSTREE +WWV_FLOW_API.CREATE_LANGUAGE_MAP +WWV_FLOW_API.CREATE_LIST +WWV_FLOW_API.CREATE_LIST_ITEM +WWV_FLOW_API.CREATE_LIST_OF_VALUES +WWV_FLOW_API.CREATE_LIST_TEMPLATE +WWV_FLOW_API.CREATE_LOAD_TABLE +WWV_FLOW_API.CREATE_LOAD_TABLE_LOOKUP +WWV_FLOW_API.CREATE_LOAD_TABLE_RULE +WWV_FLOW_API.CREATE_MAIL_ATTACHMENTS +WWV_FLOW_API.CREATE_MAIL_LOG +WWV_FLOW_API.CREATE_MAIL_QUEUE +WWV_FLOW_API.CREATE_MENU +WWV_FLOW_API.CREATE_MENU_OPTION +WWV_FLOW_API.CREATE_MENU_TEMPLATE +WWV_FLOW_API.CREATE_MESSAGE +WWV_FLOW_API.CREATE_MODELS +WWV_FLOW_API.CREATE_MODEL_PAGES +WWV_FLOW_API.CREATE_MODEL_PAGE_COLS +WWV_FLOW_API.CREATE_MODEL_PAGE_REGIONS +WWV_FLOW_API.CREATE_OR_REMOVE_FILE +WWV_FLOW_API.CREATE_PAGE +WWV_FLOW_API.CREATE_PAGE_BRANCH +WWV_FLOW_API.CREATE_PAGE_BRANCH_ARGS +WWV_FLOW_API.CREATE_PAGE_BUTTON +WWV_FLOW_API.CREATE_PAGE_COMPUTATION +WWV_FLOW_API.CREATE_PAGE_DA_ACTION +WWV_FLOW_API.CREATE_PAGE_DA_EVENT +WWV_FLOW_API.CREATE_PAGE_GROUP +WWV_FLOW_API.CREATE_PAGE_HELP +WWV_FLOW_API.CREATE_PAGE_ITEM +WWV_FLOW_API.CREATE_PAGE_PLUG +WWV_FLOW_API.CREATE_PAGE_PROCESS +WWV_FLOW_API.CREATE_PAGE_TMPL_DISPLAY_POINT +WWV_FLOW_API.CREATE_PAGE_VALIDATION +WWV_FLOW_API.CREATE_PASSWORD_HISTORY +WWV_FLOW_API.CREATE_PKG_APP_MAP +WWV_FLOW_API.CREATE_PLUGIN +WWV_FLOW_API.CREATE_PLUGIN_ATTRIBUTE +WWV_FLOW_API.CREATE_PLUGIN_ATTR_VALUE +WWV_FLOW_API.CREATE_PLUGIN_EVENT +WWV_FLOW_API.CREATE_PLUGIN_FILE +WWV_FLOW_API.CREATE_PLUGIN_SETTING +WWV_FLOW_API.CREATE_PLUG_TEMPLATE +WWV_FLOW_API.CREATE_PLUG_TMPL_DISPLAY_POINT +WWV_FLOW_API.CREATE_POPUP_LOV_TEMPLATE +WWV_FLOW_API.CREATE_PREFERENCES$ +WWV_FLOW_API.CREATE_PROVISION_SERICE_MOD +WWV_FLOW_API.CREATE_QB_SAVED_COND +WWV_FLOW_API.CREATE_QB_SAVED_JOIN +WWV_FLOW_API.CREATE_QB_SAVED_QUERY +WWV_FLOW_API.CREATE_QB_SAVED_TABS +WWV_FLOW_API.CREATE_QUERY_COLUMN +WWV_FLOW_API.CREATE_QUERY_CONDITION +WWV_FLOW_API.CREATE_QUERY_DEFINITION +WWV_FLOW_API.CREATE_QUERY_OBJECT +WWV_FLOW_API.CREATE_REGION_RPT_COLS +WWV_FLOW_API.CREATE_REPORT_COLUMNS +WWV_FLOW_API.CREATE_REPORT_LAYOUT +WWV_FLOW_API.CREATE_REPORT_REGION +WWV_FLOW_API.CREATE_RESTFUL_HANDLER +WWV_FLOW_API.CREATE_RESTFUL_MODULE +WWV_FLOW_API.CREATE_RESTFUL_PARAM +WWV_FLOW_API.CREATE_RESTFUL_PRIV +WWV_FLOW_API.CREATE_RESTFUL_TEMPLATE +WWV_FLOW_API.CREATE_ROW_TEMPLATE +WWV_FLOW_API.CREATE_ROW_TEMPLATE_PATCH +WWV_FLOW_API.CREATE_RS_PRIV_GRP +WWV_FLOW_API.CREATE_RT$APPROVALS +WWV_FLOW_API.CREATE_RT$APPROVAL_PRIVS +WWV_FLOW_API.CREATE_RT$CLIENTS +WWV_FLOW_API.CREATE_RT$CLIENT_PRIVILEGES +WWV_FLOW_API.CREATE_RT$ERRORS +WWV_FLOW_API.CREATE_RT$PENDING_APPROVALS +WWV_FLOW_API.CREATE_RT$USER_SESSIONS +WWV_FLOW_API.CREATE_SCRIPT +WWV_FLOW_API.CREATE_SECURITY_SCHEME +WWV_FLOW_API.CREATE_SHARED_QUERY +WWV_FLOW_API.CREATE_SHARED_QUERY_STMNT +WWV_FLOW_API.CREATE_SHORTCUT +WWV_FLOW_API.CREATE_STATIC_LOV_DATA +WWV_FLOW_API.CREATE_SW_DETAIL_RESULTS +WWV_FLOW_API.CREATE_SW_RESULTS +WWV_FLOW_API.CREATE_SW_SQL_CMDS +WWV_FLOW_API.CREATE_SW_STMTS +WWV_FLOW_API.CREATE_TAB +WWV_FLOW_API.CREATE_TEMPLATE +WWV_FLOW_API.CREATE_THEME +WWV_FLOW_API.CREATE_THEME_DISPLAY_POINT +WWV_FLOW_API.CREATE_THEME_IMAGE +WWV_FLOW_API.CREATE_THEME_STYLE +WWV_FLOW_API.CREATE_TOPLEVEL_TAB +WWV_FLOW_API.CREATE_TRANSLATION +WWV_FLOW_API.CREATE_TREE +WWV_FLOW_API.CREATE_UI_TYPE +WWV_FLOW_API.CREATE_UI_TYPE_FEATURE +WWV_FLOW_API.CREATE_USER_ACCESS_LOG1$ +WWV_FLOW_API.CREATE_USER_ACCESS_LOG2$ +WWV_FLOW_API.CREATE_USER_GROUPS +WWV_FLOW_API.CREATE_USER_INTERFACE +WWV_FLOW_API.CREATE_WEB_SERVICE +WWV_FLOW_API.CREATE_WORKSHEET +WWV_FLOW_API.CREATE_WORKSHEET_CATEGORY +WWV_FLOW_API.CREATE_WORKSHEET_COLUMN +WWV_FLOW_API.CREATE_WORKSHEET_COL_GROUP +WWV_FLOW_API.CREATE_WORKSHEET_COMPUTATION +WWV_FLOW_API.CREATE_WORKSHEET_CONDITION +WWV_FLOW_API.CREATE_WORKSHEET_GROUP_BY +WWV_FLOW_API.CREATE_WORKSHEET_NOTIFY +WWV_FLOW_API.CREATE_WORKSHEET_RPT +WWV_FLOW_API.CREATE_WS_APP +WWV_FLOW_API.CREATE_WS_APP_SUG_OBJECTS +WWV_FLOW_API.CREATE_WS_AUTH_SETUP +WWV_FLOW_API.CREATE_WS_COLUMN +WWV_FLOW_API.CREATE_WS_COL_GROUP +WWV_FLOW_API.CREATE_WS_COL_VALIDATION +WWV_FLOW_API.CREATE_WS_COMPUTATION +WWV_FLOW_API.CREATE_WS_CONDITION +WWV_FLOW_API.CREATE_WS_DATA_GRID +WWV_FLOW_API.CREATE_WS_GROUP_BY +WWV_FLOW_API.CREATE_WS_LOV +WWV_FLOW_API.CREATE_WS_LOV_ENTRIES +WWV_FLOW_API.CREATE_WS_NOTIFY +WWV_FLOW_API.CREATE_WS_OPERATIONS +WWV_FLOW_API.CREATE_WS_PAGE +WWV_FLOW_API.CREATE_WS_PARAMETERS +WWV_FLOW_API.CREATE_WS_PROCESS_PARMS_MAP +WWV_FLOW_API.CREATE_WS_RPT +WWV_FLOW_API.CREATE_WS_WORKSHEET +WWV_FLOW_API.DELETE_TEMPLATE +WWV_FLOW_API.DELETE_THEME +WWV_FLOW_API.GET_APPLICATION_OWNER +WWV_FLOW_API.GET_BUILD_OPTION_STATUS +WWV_FLOW_API.GET_DEFAULT_LDAP_ESCAPING +WWV_FLOW_API.GET_SECURITY_GROUP_ID +WWV_FLOW_API.IMPORT_FEEDBACK +WWV_FLOW_API.IMPORT_FEEDBACK_FOLLOWUP +WWV_FLOW_API.IMPORT_SCRIPT +WWV_FLOW_API.PARSE_FILE_SOURCE +WWV_FLOW_API.POST_IMPORT_PROCESS +WWV_FLOW_API.REMOVE_APPLICATION +WWV_FLOW_API.REMOVE_DYANAMIC_TRANSLATION +WWV_FLOW_API.REMOVE_FLOW +WWV_FLOW_API.REMOVE_ICON_BAR_ITEM +WWV_FLOW_API.REMOVE_PAGE +WWV_FLOW_API.REMOVE_PLUGIN +WWV_FLOW_API.REMOVE_RESTFUL_SERVICE +WWV_FLOW_API.REMOVE_TRANSLATION +WWV_FLOW_API.REMOVE_WS_APP +WWV_FLOW_API.RENAME_TABSET +WWV_FLOW_API.SET_APPLICATION_ALIAS +WWV_FLOW_API.SET_APPLICATION_LOCK +WWV_FLOW_API.SET_APPLICATION_NAME +WWV_FLOW_API.SET_APPLICATION_OWNER +WWV_FLOW_API.SET_AUTHENTICATED_URL_PREFIX +WWV_FLOW_API.SET_BUILD_OPTION +WWV_FLOW_API.SET_BUILD_OPTION_STATUS +WWV_FLOW_API.SET_BUILD_STATUS_RUN_ONLY +WWV_FLOW_API.SET_ENABLE_APP_DEBUGGING +WWV_FLOW_API.SET_EXACT_SUBS +WWV_FLOW_API.SET_FEEDBACK_ORIGIN +WWV_FLOW_API.SET_FLOW_AUTHENTICATION +WWV_FLOW_API.SET_FLOW_PROCESS_SQL +WWV_FLOW_API.SET_FLOW_STATUS +WWV_FLOW_API.SET_GLOBAL_NOTIFICATION +WWV_FLOW_API.SET_HTML_PAGE_HEADER +WWV_FLOW_API.SET_ICON_BAR_ITEM +WWV_FLOW_API.SET_IMAGE_PREFIX +WWV_FLOW_API.SET_LIST_ITEM_LINK_TARGET +WWV_FLOW_API.SET_LIST_ITEM_LINK_TEXT +WWV_FLOW_API.SET_LIST_ITEM_SEQUENCE +WWV_FLOW_API.SET_LOGGING +WWV_FLOW_API.SET_LOGOUT_URL +WWV_FLOW_API.SET_LOGO_IMAGE +WWV_FLOW_API.SET_PAGE_HELP_TEXT +WWV_FLOW_API.SET_PAGE_PROCESS_SOURCE +WWV_FLOW_API.SET_PAGE_PROT_ENABLED_Y_N +WWV_FLOW_API.SET_PLUG_QUERY_HEADING +WWV_FLOW_API.SET_PLUG_SOURCE +WWV_FLOW_API.SET_PLUG_TEMPLATE_TAB_ATTR +WWV_FLOW_API.SET_PROXY_SERVER +WWV_FLOW_API.SET_PUBLIC_URL_PREFIX +WWV_FLOW_API.SET_REGION_COLUMN_WIDTH +WWV_FLOW_API.SET_SECURITY_GROUP_ID +WWV_FLOW_API.SET_SECURITY_SCHEME +WWV_FLOW_API.SET_STATIC_SUB_STRINGS +WWV_FLOW_API.SET_THEME_CALENDAR_ICON +WWV_FLOW_API.SET_TOPLEVEL_TAB_TARGET +WWV_FLOW_API.SET_TOPLEVEL_TAB_TEXT +WWV_FLOW_API.SET_VERSION +WWV_FLOW_API.SET_VPD +WWV_FLOW_API.UPDATE_OWNER +WWV_FLOW_API.UPDATE_PAGE +WWV_FLOW_API.UPDATE_PAGE_ITEM +WWV_FLOW_API.UPDATE_TAB_CONDITION +WWV_FLOW_API.UPDATE_TAB_TEXT +WWV_FLOW_API.UPDATE_TOPLEVEL_TAB +WWV_FLOW_APPLICATION_INSTALL. +WWV_FLOW_APPLICATION_INSTALL.CLEAR_ALL +WWV_FLOW_APPLICATION_INSTALL.GENERATE_APPLICATION_ID +WWV_FLOW_APPLICATION_INSTALL.GENERATE_OFFSET +WWV_FLOW_APPLICATION_INSTALL.GET_APPLICATION_ALIAS +WWV_FLOW_APPLICATION_INSTALL.GET_APPLICATION_ID +WWV_FLOW_APPLICATION_INSTALL.GET_APPLICATION_NAME +WWV_FLOW_APPLICATION_INSTALL.GET_IMAGE_PREFIX +WWV_FLOW_APPLICATION_INSTALL.GET_OFFSET +WWV_FLOW_APPLICATION_INSTALL.GET_PROXY +WWV_FLOW_APPLICATION_INSTALL.GET_SCHEMA +WWV_FLOW_APPLICATION_INSTALL.GET_WORKSPACE_ID +WWV_FLOW_APPLICATION_INSTALL.PUBLISH_APPLICATION +WWV_FLOW_APPLICATION_INSTALL.SET_APPLICATION_ALIAS +WWV_FLOW_APPLICATION_INSTALL.SET_APPLICATION_ID +WWV_FLOW_APPLICATION_INSTALL.SET_APPLICATION_NAME +WWV_FLOW_APPLICATION_INSTALL.SET_IMAGE_PREFIX +WWV_FLOW_APPLICATION_INSTALL.SET_OFFSET +WWV_FLOW_APPLICATION_INSTALL.SET_PROXY +WWV_FLOW_APPLICATION_INSTALL.SET_SCHEMA +WWV_FLOW_APPLICATION_INSTALL.SET_WORKSPACE_ID +WWV_FLOW_APP_BUILDER_API. +WWV_FLOW_APP_BUILDER_API.CREATE_IR_PAGE +WWV_FLOW_APP_BUILDER_API.CREATE_PAGE_BRANCH +WWV_FLOW_APP_BUILDER_API.CREATE_PAGE_BUTTON +WWV_FLOW_APP_BUILDER_API.CREATE_PAGE_COMPUTATION +WWV_FLOW_APP_BUILDER_API.CREATE_PAGE_PROCESS +WWV_FLOW_APP_BUILDER_API.DELETE_PAGE +WWV_FLOW_APP_BUILDER_API.EDIT_CR_COLUMN +WWV_FLOW_APP_BUILDER_API.EDIT_IR_COLUMN +WWV_FLOW_APP_BUILDER_API.EDIT_IR_DEFAULT_RPT +WWV_FLOW_APP_BUILDER_API.EDIT_IR_QUERY +WWV_FLOW_APP_BUILDER_API.EDIT_PAGE_ITEM +WWV_FLOW_APP_BUILDER_API.GET_IR_COLUMN_DIFF +WWV_FLOW_APP_BUILDER_API.IR_QUERY_CHANGED +WWV_FLOW_APP_BUILDER_API.MINIMUM_FREE_PAGE +WWV_FLOW_APP_BUILDER_API.SET_APPLICATION_ID +WWV_FLOW_APP_COMMENTS_T1. +WWV_FLOW_APP_GROUPS_T1. +WWV_FLOW_ASFCOOKIE. +WWV_FLOW_ASFCOOKIE.VALIDATE_SESSION +WWV_FLOW_ASSERT. +WWV_FLOW_ASSERT.DESUPPORTED_API +WWV_FLOW_ASSERT.DML_RESULT +WWV_FLOW_ASSERT.ENQUOTE_LITERAL +WWV_FLOW_ASSERT.ENQUOTE_NAME +WWV_FLOW_ASSERT.FUNCTION_BODY_START +WWV_FLOW_ASSERT.NOOP +WWV_FLOW_ASSERT.NORMAL_SQL_NAME +WWV_FLOW_ASSERT.NO_DYNAMIC_SQL +WWV_FLOW_ASSERT.NULL_OR_NORMAL_SQL_NAME +WWV_FLOW_ASSERT.NULL_OR_SIMPLE_SQL_NAME +WWV_FLOW_ASSERT.SCHEMA_NAME +WWV_FLOW_ASSERT.SIMPLE_SQL_NAME +WWV_FLOW_ASSERT.SQL_OR_FUNCTION_START +WWV_FLOW_ASSERT.SQL_QUERY_START +WWV_FLOW_ASSERT.VERIFY_PARSING_SCHEMA +WWV_FLOW_ASSERT.WHERE_CLAUSE_START +WWV_FLOW_AUDIT. +WWV_FLOW_AUDIT.AUDIT_ACTION +WWV_FLOW_AUDIT.REMOVE_AUDIT_TRAIL +WWV_FLOW_AUTHENTICATION. +WWV_FLOW_AUTHENTICATION.ADD_LOGIN_THROTTLE_ONLOAD_CODE +WWV_FLOW_AUTHENTICATION.APPLY_LOGIN_THROTTLE +WWV_FLOW_AUTHENTICATION.AUTHENTICATE_AND_INIT_SESSION +WWV_FLOW_AUTHENTICATION.CREATE_LOGIN_THROTTLE +WWV_FLOW_AUTHENTICATION.EXECUTE_LOGIN +WWV_FLOW_AUTHENTICATION.EXECUTE_LOGOUT +WWV_FLOW_AUTHENTICATION.GET_BUILTIN_LOGIN_URL +WWV_FLOW_AUTHENTICATION.GET_COOKIE_PROPERTIES +WWV_FLOW_AUTHENTICATION.GET_SESSION_ID_IF_PUBLIC +WWV_FLOW_AUTHENTICATION.IS_INVALID_SESSION_PAGE +WWV_FLOW_AUTHENTICATION.IS_PUBLIC_PAGE +WWV_FLOW_AUTHENTICATION.LOG_LOGIN +WWV_FLOW_AUTHENTICATIONS_T1. +WWV_FLOW_AUTHENTICATION_API. +WWV_FLOW_AUTHENTICATION_API.CALLBACK +WWV_FLOW_AUTHENTICATION_API.GET_CALLBACK_URL +WWV_FLOW_AUTHENTICATION_API.GET_LOGIN_USERNAME_COOKIE +WWV_FLOW_AUTHENTICATION_API.IS_AUTHENTICATED +WWV_FLOW_AUTHENTICATION_API.IS_PUBLIC_USER +WWV_FLOW_AUTHENTICATION_API.LOGIN +WWV_FLOW_AUTHENTICATION_API.LOGOUT +WWV_FLOW_AUTHENTICATION_API.POST_LOGIN +WWV_FLOW_AUTHENTICATION_API.SEND_LOGIN_USERNAME_COOKIE +WWV_FLOW_AUTHENTICATION_DEV. +WWV_FLOW_AUTHENTICATION_DEV.ACTIVATE_IN_APP +WWV_FLOW_AUTHENTICATION_DEV.GET_LOGIN_HELP_FOR_APP +WWV_FLOW_AUTHENTICATION_DEV.GET_TRANSLATED_AUTHENT_NAME +WWV_FLOW_AUTHENTICATION_F4155. +WWV_FLOW_AUTHENTICATION_F4155.SESSION_SENTRY +WWV_FLOW_AUTHENTICATION_NATIVE. +WWV_FLOW_AUTHENTICATION_NATIVE.EXECUTE_AJAX_CALLBACK +WWV_FLOW_AUTHENTICATION_NATIVE.EXECUTE_AUTHENTICATION +WWV_FLOW_AUTHENTICATION_NATIVE.EXECUTE_INVALID_SESSION +WWV_FLOW_AUTHENTICATION_NATIVE.EXECUTE_POST_LOGOUT +WWV_FLOW_AUTHENTICATION_NATIVE.EXECUTE_SESSION_SENTRY +WWV_FLOW_AUTHENTICATION_NATIVE.GET_ABSOLUTE_LOGOUT_URL +WWV_FLOW_AUTHENTICATION_NATIVE.GET_CUSTOM_ATTRIBUTES +WWV_FLOW_AUTHENTICATION_NATIVE.GET_HEADER_CGI_USERNAME +WWV_FLOW_AUTHENTICATION_NATIVE.IAS_SSO_INVALID_SESSION +WWV_FLOW_AUTHENTICATION_NATIVE.LDAP_AUTHENTICATION_IMPL +WWV_FLOW_AUTHORIZATION. +WWV_FLOW_AUTHORIZATION.CHECK_NATIVE_AUTHORIZATION +WWV_FLOW_AUTHORIZATION.INIT_CACHE +WWV_FLOW_AUTHORIZATION.IS_AUTHORIZED +WWV_FLOW_AUTHORIZATION.IS_AUTHORIZED_BY_NAME +WWV_FLOW_AUTHORIZATION.IS_AUTHORIZED_DEVELOPER +WWV_FLOW_AUTHORIZATION.RESET_CACHE +WWV_FLOW_AUTHORIZATION_API. +WWV_FLOW_AUTHORIZATION_API.IS_AUTHORIZED +WWV_FLOW_AUTHORIZATION_API.RESET_CACHE +WWV_FLOW_AUTHORIZATION_DEV. +WWV_FLOW_AUTHORIZATION_DEV.COPY +WWV_FLOW_AUTHORIZATION_DEV.GET_AUTHORIZATION_IN_OTHER_APP +WWV_FLOW_AUTHORIZED_URLS_T1. +WWV_FLOW_AUTO_FILE_DEL_LOG_T1. +WWV_FLOW_BANNER_T1. +WWV_FLOW_BIW_APPBLDPREF. +WWV_FLOW_BUGS_T1. +WWV_FLOW_BUGS_T2. +WWV_FLOW_BUILDER. +WWV_FLOW_BUILDER.GENERATE_HEADER +WWV_FLOW_BUILDER.GET_CURRENT_FLOW_ID_AND_NAME +WWV_FLOW_BUILDER.GET_CURRENT_FLOW_LANGUAGE +WWV_FLOW_BUILDER.GET_CURRENT_PAGE_ID_AND_NAME +WWV_FLOW_BUILDER.GET_VALID_BUTTON_NAME +WWV_FLOW_BUILDER.GET_VALID_ITEM_NAME +WWV_FLOW_BUILDER.IS_ITEM_NAME_DUPLICATE +WWV_FLOW_BUILDER.IS_ITEM_NAME_USED +WWV_FLOW_BUILDER.IS_VALID_BUTTON_NAME +WWV_FLOW_BUILDER.IS_VALID_COLUMN_NAME +WWV_FLOW_BUILDER.IS_VALID_DBLINK_NAME +WWV_FLOW_BUILDER.IS_VALID_IDENTIFIER +WWV_FLOW_BUILDER.IS_VALID_ITEM_NAME +WWV_FLOW_BUILDER.IS_VALID_TABLE_OR_VIEW +WWV_FLOW_BUILDER.LIST_PLSQL_SOURCE +WWV_FLOW_BUILDER.POPULATE_UPDATEABLE_COL +WWV_FLOW_BUILDER.REGION_SOURCE_TYPE_LOV +WWV_FLOW_BUILDER.REPORT_HEADER +WWV_FLOW_BUILDER.SET_UPD_COLUMN_DISPLAY_ATTR +WWV_FLOW_BUILDER.SHOW_PAGE_LIST +WWV_FLOW_BUILDER.SIMPLE_ITEMS_LIST +WWV_FLOW_BUILDER.SIMPLE_PAGE_LIST +WWV_FLOW_BUILDER.SPLIT_URL +WWV_FLOW_BUILDER.UNRESERVE_FLOW_PAGE +WWV_FLOW_BUILDER_SEARCH_DEV. +WWV_FLOW_BUILDER_SEARCH_DEV.SEARCH_APPLICATION +WWV_FLOW_BUTTON. +WWV_FLOW_BUTTON.GET_BUTTON_REDIRECT_URL +WWV_FLOW_BUTTON.RENDER_NATIVE_BUTTON +WWV_FLOW_BUTTON_TEMPLATES_T1. +WWV_FLOW_CACHE. +WWV_FLOW_CACHE.COMPUTE_STATS +WWV_FLOW_CACHE.PURGE_DUPLICATE_SESSIONS +WWV_FLOW_CACHE.PURGE_N_REBUILD +WWV_FLOW_CACHE.PURGE_OLDEST_SESSIONS +WWV_FLOW_CACHE.PURGE_SESSIONS +WWV_FLOW_CACHE.REBUILD_INDEXES +WWV_FLOW_CACHE.SET_FB_FLOW_PAGE_ID +WWV_FLOW_CACHE.SET_FLOW_BUILDER_STATE +WWV_FLOW_CACHE.SHOW_SESSION_STATE +WWV_FLOW_CALENDAR. +WWV_FLOW_CALENDAR.SHOW +WWV_FLOW_CALENDAR.WIDGET +WWV_FLOW_CALENDAR_DEV. +WWV_FLOW_CALENDAR_DEV.CREATE_CALENDAR_PAGE +WWV_FLOW_CALENDAR_DEV.CREATE_CALENDAR_REGION +WWV_FLOW_CALENDAR_DEV.CREATE_ON_DEMAND_PROCESS +WWV_FLOW_CALENDAR_DEV.CREATE_WIZARD_ELEMENTS +WWV_FLOW_CALENDAR_DEV.IS_PROCESS_NAME_USED +WWV_FLOW_CALENDAR_DEV.IS_VALID_QUERY +WWV_FLOW_CALENDAR_DEV.LOADCOLS +WWV_FLOW_CALENDAR_DEV.SET_ATTRIBUTES +WWV_FLOW_CALS_T1. +WWV_FLOW_CAL_TEMPLATES_T1. +WWV_FLOW_CDN. +WWV_FLOW_CDN.GET_URL +WWV_FLOW_CGI. +WWV_FLOW_CGI.CREATE_SESSION_COOKIE_VALUE +WWV_FLOW_CGI.DOES_COOKIE_EXIST_FOR_VALUE +WWV_FLOW_CGI.GET_APEX_LISTENER_VERSION +WWV_FLOW_CGI.GET_BUILDER_LOGIN_COOKIE_NAME +WWV_FLOW_CGI.GET_BUILDER_LOGIN_COOKIE_VALUE +WWV_FLOW_CGI.GET_COOKIE +WWV_FLOW_CGI.GET_DAD_NAME +WWV_FLOW_CGI.GET_HTTP_ACCEPT +WWV_FLOW_CGI.GET_HTTP_ACCEPT_LANGUAGE +WWV_FLOW_CGI.GET_HTTP_HOST +WWV_FLOW_CGI.GET_HTTP_IF_MODIFIED_SINCE +WWV_FLOW_CGI.GET_HTTP_IF_NONE_MATCH +WWV_FLOW_CGI.GET_HTTP_REFERER +WWV_FLOW_CGI.GET_HTTP_USER_AGENT +WWV_FLOW_CGI.GET_PATH_INFO +WWV_FLOW_CGI.GET_QUERY_STRING +WWV_FLOW_CGI.GET_REMOTE_ADDR +WWV_FLOW_CGI.GET_REMOTE_USER +WWV_FLOW_CGI.GET_REQUEST_IANA_CHARSET +WWV_FLOW_CGI.GET_REQUEST_METHOD +WWV_FLOW_CGI.GET_REQUEST_PROTOCOL +WWV_FLOW_CGI.GET_SCRIPT_NAME +WWV_FLOW_CGI.GET_SCRIPT_PREFIX +WWV_FLOW_CGI.GET_SERVER_NAME +WWV_FLOW_CGI.GET_SERVER_PORT +WWV_FLOW_CGI.GET_SERVER_SOFTWARE +WWV_FLOW_CGI.GET_SESSION_COOKIE_VALUE +WWV_FLOW_CGI.GET_X_FORWARDED_FOR +WWV_FLOW_CGI.INIT +WWV_FLOW_CHART_SER_ATTR_T1. +WWV_FLOW_CHAR_READER. +WWV_FLOW_CHAR_READER.READ +WWV_FLOW_CHAR_READER.READ_PRINTABLE +WWV_FLOW_CHAR_READER.UNREAD +WWV_FLOW_CHECK. +WWV_FLOW_CHECK.CHECK_CONDITION_SQL_EXPRESION +WWV_FLOW_CHECK.CHECK_COND_PLSQL_EXPRESION +WWV_FLOW_CLOUD_ARCHIVE. +WWV_FLOW_CLOUD_ARCHIVE.ARCHIVE_APPLICATIONS +WWV_FLOW_CLOUD_ARCHIVE.ARCHIVE_FILE +WWV_FLOW_CLOUD_ARCHIVE.ARCHIVE_FILES +WWV_FLOW_CLOUD_ARCHIVE.ARCHIVE_REST +WWV_FLOW_CLOUD_ARCHIVE.ARCHIVE_WORKSPACE +WWV_FLOW_CLOUD_ARCHIVE.CREATE_HEADER +WWV_FLOW_CLOUD_ARCHIVE.INCREMENTAL_ARCHIVE +WWV_FLOW_CLOUD_ARCHIVE.PURGE_ARCHIVES +WWV_FLOW_CLOUD_ARCHIVE.PURGE_VERSIONS +WWV_FLOW_CLOUD_ARCHIVE_OBJ. +WWV_FLOW_CLOUD_ARCHIVE_OBJ.CREATE_ARCHIVE_OBJECTS +WWV_FLOW_CLOUD_ARCHIVE_OBJ.CREATE_ARCHIVE_TABLES +WWV_FLOW_CLOUD_ARCHIVE_OBJ.CREATE_ARCHIVE_TRIGGERS +WWV_FLOW_CLOUD_ARCHIVE_OBJ.REMOVE_ARCHIVE_OBJECTS +WWV_FLOW_CLOUD_DB_SERVICES. +WWV_FLOW_CLOUD_DB_SERVICES.ADD_USER +WWV_FLOW_CLOUD_DB_SERVICES.ADD_WORKSPACE_ADMIN +WWV_FLOW_CLOUD_DB_SERVICES.CREATE_WORKSPACE +WWV_FLOW_CLOUD_DB_SERVICES.GET_WORKSPACE_APPLICATIONS +WWV_FLOW_CLOUD_DB_SERVICES.GET_WORKSPACE_STATISTICS +WWV_FLOW_CLOUD_DB_SERVICES.GET_WORKSPACE_STATS +WWV_FLOW_CLOUD_DB_SERVICES.REMOVE_USER +WWV_FLOW_CLOUD_DB_SERVICES.REMOVE_WORKSPACE +WWV_FLOW_CLOUD_DB_SERVICES.SET_WORKSPACE_DISPLAY_NAME +WWV_FLOW_CLOUD_DB_SERVICES.SET_WORKSPACE_STATUS +WWV_FLOW_CLOUD_DB_SERVICES.UPDATE_USER +WWV_FLOW_CLOUD_DB_SERVICES.UPDATE_WORKSPACE_SIZE +WWV_FLOW_CLOUD_IDM. +WWV_FLOW_CLOUD_IDM.BUILDER_AJAX +WWV_FLOW_CLOUD_IDM.BUILDER_INVALID_SESSION +WWV_FLOW_CLOUD_IDM.BUILDER_POST_LOGOUT +WWV_FLOW_CLOUD_IDM.BUILDER_SESSION_SENTRY +WWV_FLOW_CLOUD_IDM.CHECK_USERGROUPS +WWV_FLOW_CLOUD_IDM.GET_WORKSPACE_PRIVILEGE +WWV_FLOW_CLOUD_IDM.NATIVE_AJAX +WWV_FLOW_CLOUD_IDM.NATIVE_INVALID_SESSION +WWV_FLOW_CLOUD_IDM.NATIVE_POST_LOGOUT +WWV_FLOW_CLOUD_IDM.NATIVE_SESSION_SENTRY +WWV_FLOW_CLOUD_IDM.WS_AJAX +WWV_FLOW_CLOUD_IDM.WS_INVALID_SESSION +WWV_FLOW_CLOUD_IDM.WS_SESSION_SENTRY +WWV_FLOW_COLLECTION. +WWV_FLOW_COLLECTION.ADD_MEMBER +WWV_FLOW_COLLECTION.ADD_MEMBERS +WWV_FLOW_COLLECTION.COLLECTION_EXISTS +WWV_FLOW_COLLECTION.COLLECTION_HAS_CHANGED +WWV_FLOW_COLLECTION.COLLECTION_MEMBER_COUNT +WWV_FLOW_COLLECTION.CREATE_COLLECTION +WWV_FLOW_COLLECTION.CREATE_COLLECTION_FROM_QUERY +WWV_FLOW_COLLECTION.CREATE_COLLECTION_FROM_QUERY2 +WWV_FLOW_COLLECTION.CREATE_COLLECTION_FROM_QUERYB2 +WWV_FLOW_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B +WWV_FLOW_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION +WWV_FLOW_COLLECTION.DELETE_ALL_APP_COLLECTIONS +WWV_FLOW_COLLECTION.DELETE_ALL_COLLECTIONS +WWV_FLOW_COLLECTION.DELETE_ALL_COLLECTIONS_SESSION +WWV_FLOW_COLLECTION.DELETE_COLLECTION +WWV_FLOW_COLLECTION.DELETE_MEMBER +WWV_FLOW_COLLECTION.DELETE_MEMBERS +WWV_FLOW_COLLECTION.GET_MEMBER_MD5 +WWV_FLOW_COLLECTION.MERGE_MEMBERS +WWV_FLOW_COLLECTION.MOVE_MEMBER_DOWN +WWV_FLOW_COLLECTION.MOVE_MEMBER_UP +WWV_FLOW_COLLECTION.RESEQUENCE_COLLECTION +WWV_FLOW_COLLECTION.RESET_COLLECTION_CHANGED +WWV_FLOW_COLLECTION.RESET_COLLECTION_CHANGED_ALL +WWV_FLOW_COLLECTION.SORT_MEMBERS +WWV_FLOW_COLLECTION.TRUNCATE_COLLECTION +WWV_FLOW_COLLECTION.UPDATE_MEMBER +WWV_FLOW_COLLECTION.UPDATE_MEMBERS +WWV_FLOW_COLLECTION.UPDATE_MEMBER_ATTRIBUTE +WWV_FLOW_COLLECTION_INT. +WWV_FLOW_COLLECTION_INT.ENABLE_FILE_UPLOAD +WWV_FLOW_COLLECTION_INT.GET_COLLECTION_ID +WWV_FLOW_COLLECTION_INT.GET_SECURITY_GROUP_ID +WWV_FLOW_COLLECTION_MEMBERS_T1. +WWV_FLOW_COLLECTION_T1. +WWV_FLOW_COMPANIES_T1. +WWV_FLOW_COMPANIES_T2. +WWV_FLOW_COMPANIES_T3. +WWV_FLOW_COMPANY_SCHEMAS_T1. +WWV_FLOW_COMPUTATION. +WWV_FLOW_COMPUTATION.PERFORM +WWV_FLOW_COMPUTATIONS_T1. +WWV_FLOW_CONDITIONS. +WWV_FLOW_CONDITIONS.IS_READ_ONLY +WWV_FLOW_CONDITIONS.STANDARD_CONDITION +WWV_FLOW_COPY. +WWV_FLOW_COPY_METADATA. +WWV_FLOW_COPY_METADATA.PUSH_AUTHENTICATION +WWV_FLOW_COPY_METADATA.PUSH_BUTTON_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_CALENDAR_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_FIELD_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_ITEM_HELP +WWV_FLOW_COPY_METADATA.PUSH_LIST_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_LOV +WWV_FLOW_COPY_METADATA.PUSH_MENU_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_NAVBAR +WWV_FLOW_COPY_METADATA.PUSH_PAGE_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_POPUPLOV_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_REGION_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_REPORT_TEMPLATE +WWV_FLOW_COPY_METADATA.PUSH_SECURITY_SCHEME +WWV_FLOW_COPY_METADATA.PUSH_SHORTCUT +WWV_FLOW_COPY_METADATA.PUSH_THEME_STYLE +WWV_FLOW_COPY_METADATA.REFRESH_AUTHENTICATION +WWV_FLOW_COPY_METADATA.REFRESH_BUTTON_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_CALENDAR_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_FIELD_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_ITEM_HELP +WWV_FLOW_COPY_METADATA.REFRESH_LIST_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_LOV +WWV_FLOW_COPY_METADATA.REFRESH_MENU_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_NAVBAR +WWV_FLOW_COPY_METADATA.REFRESH_PAGE_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_POPUPLOV_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_REGION_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_REPORT_TEMPLATE +WWV_FLOW_COPY_METADATA.REFRESH_SECURITY_SCHEME +WWV_FLOW_COPY_METADATA.REFRESH_SHORTCUT +WWV_FLOW_COPY_METADATA.REFRESH_THEME_STYLE +WWV_FLOW_COPY_METADATA.REMOVE_AUTHENTICATION_REF_ID +WWV_FLOW_COPY_METADATA.REMOVE_BUTTON_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_CALENDAR_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_FIELD_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_ITEM_HELP_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_LIST_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_LOV_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_MENU_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_NAVBAR_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_PAGE_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_POPUPLOV_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_REGION_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_REPORT_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_SCHEME_REFERENCE_ID +WWV_FLOW_COPY_METADATA.REMOVE_SHORTCUT_REFERENCE_ID +WWV_FLOW_COPY_METADATA.SUBSCRIBE_AUTHENTICATION +WWV_FLOW_COPY_METADATA.SUBSCRIBE_BUTTON_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_CALENDAR_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_FIELD_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_ITEM_HELP +WWV_FLOW_COPY_METADATA.SUBSCRIBE_LIST_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_LOV +WWV_FLOW_COPY_METADATA.SUBSCRIBE_MENU_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_NAVBAR +WWV_FLOW_COPY_METADATA.SUBSCRIBE_PAGE_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_POPUPLOV_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_REGION_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_REPORT_TEMPLATE +WWV_FLOW_COPY_METADATA.SUBSCRIBE_SECURITY_SCHEME +WWV_FLOW_COPY_METADATA.SUBSCRIBE_SHORTCUT +WWV_FLOW_COPY_METADATA.SUBSCRIBE_THEME_STYLE +WWV_FLOW_COPY_PAGE. +WWV_FLOW_COPY_PAGE.A_REGION +WWV_FLOW_COPY_PAGE.CHANGE_ITEM_NAME +WWV_FLOW_COPY_PAGE.CHANGE_PAGE_ID_IN_BRANCH +WWV_FLOW_COPY_PAGE.COPY +WWV_FLOW_COPY_PAGE.COPY_FROM_OTHER_APP +WWV_FLOW_COPY_PAGE.WEB_SERVICES +WWV_FLOW_COPY_UTIL. +WWV_FLOW_COPY_UTIL.COPY_AUTHENTICATION +WWV_FLOW_COPY_UTIL.COPY_NAVBAR +WWV_FLOW_COPY_UTIL.COPY_SECURITY_SCHEME +WWV_FLOW_COPY_UTIL.COPY_SHORTCUT +WWV_FLOW_CREATE_APP_FROM_QUERY. +WWV_FLOW_CREATE_APP_FROM_QUERY.CREATE_MULTI_PAGE_APP +WWV_FLOW_CREATE_APP_FROM_QUERY.CREATE_SINGLE_PAGE_APP +WWV_FLOW_CREATE_MODEL_APP. +WWV_FLOW_CREATE_MODEL_APP.CREATE_MODULES +WWV_FLOW_CRYPTO. +WWV_FLOW_CRYPTO.AES_DECRYPT_HEX +WWV_FLOW_CRYPTO.AES_ENCRYPT_HEX +WWV_FLOW_CRYPTO.MAC_MD5_HEX +WWV_FLOW_CRYPTO.MD5LOB +WWV_FLOW_CRYPTO.MD5RAW +WWV_FLOW_CRYPTO.MD5STR +WWV_FLOW_CRYPTO.ONE_WAY_HASH_RAW +WWV_FLOW_CRYPTO.ONE_WAY_HASH_STR +WWV_FLOW_CRYPTO.RANDOMBYTES +WWV_FLOW_CRYPTO.RANDOMNUMBER +WWV_FLOW_CSS. +WWV_FLOW_CSS.ADD +WWV_FLOW_CSS.ADD_3RD_PARTY_LIBRARY_FILE +WWV_FLOW_CSS.ADD_FILE +WWV_FLOW_CSS.ADD_FILE_URLS +WWV_FLOW_CSS.EMIT +WWV_FLOW_CSS.GET_STANDARD_FILES +WWV_FLOW_CSS.RESET +WWV_FLOW_CSS.SAVE_IN_CACHE +WWV_FLOW_CSS_API. +WWV_FLOW_CSS_API.ADD +WWV_FLOW_CSS_API.ADD_3RD_PARTY_LIBRARY_FILE +WWV_FLOW_CSS_API.ADD_FILE +WWV_FLOW_CSS_API.NEW_CSS_REPOSITORY_RECORD +WWV_FLOW_CSS_API.REMOVE_CSS +WWV_FLOW_CSS_API_PRIVATE. +WWV_FLOW_CSS_API_PRIVATE.NEW_CSS_REPOSITORY_RECORD +WWV_FLOW_CSS_API_PRIVATE.PROCESS_NEW_CSS +WWV_FLOW_CSS_API_PRIVATE.REMOVE_CSS +WWV_FLOW_CSS_API_PRIVATE.UPDATE_CSS +WWV_FLOW_CSS_REPOSITORY_T1. +WWV_FLOW_CUSTOMIZE. +WWV_FLOW_CUSTOMIZE.ACCEPT +WWV_FLOW_CUSTOMIZE.GET_LINK +WWV_FLOW_CUSTOMIZE.SHOW +WWV_FLOW_CUSTOM_AUTH. +WWV_FLOW_CUSTOM_AUTH.CURRENT_PAGE_IS_PUBLIC +WWV_FLOW_CUSTOM_AUTH.DEFINE_USER_SESSION +WWV_FLOW_CUSTOM_AUTH.FLOW_PAGE_ITEM_EXISTS +WWV_FLOW_CUSTOM_AUTH.GET_NEXT_SESSION_ID +WWV_FLOW_CUSTOM_AUTH.GET_SECURITY_GROUP_ID +WWV_FLOW_CUSTOM_AUTH.GET_SESSION_ID +WWV_FLOW_CUSTOM_AUTH.GET_USER +WWV_FLOW_CUSTOM_AUTH.REMEMBER_DEEP_LINK +WWV_FLOW_CUSTOM_AUTH.SESSION_ID_EXISTS +WWV_FLOW_CUSTOM_AUTH.SET_SESSION_ID +WWV_FLOW_CUSTOM_AUTH.SET_SESSION_ID_TO_NEXT_VALUE +WWV_FLOW_CUSTOM_AUTH.SET_USER +WWV_FLOW_CUSTOM_AUTH_LDAP. +WWV_FLOW_CUSTOM_AUTH_LDAP.AUTHENTICATE +WWV_FLOW_CUSTOM_AUTH_STD. +WWV_FLOW_CUSTOM_AUTH_STD.GET_COOKIE_PROPS +WWV_FLOW_CUSTOM_AUTH_STD.GET_LDAP_PROPS +WWV_FLOW_CUSTOM_AUTH_STD.GET_SESSION_ID_FROM_COOKIE +WWV_FLOW_CUSTOM_AUTH_STD.GET_USERNAME +WWV_FLOW_CUSTOM_AUTH_STD.IS_SESSION_VALID +WWV_FLOW_CUSTOM_AUTH_STD.LDAP_AUTHENTICATE +WWV_FLOW_CUSTOM_AUTH_STD.LDAP_DNPREP +WWV_FLOW_CUSTOM_AUTH_STD.LOGIN +WWV_FLOW_CUSTOM_AUTH_STD.LOGIN_PAGE +WWV_FLOW_CUSTOM_AUTH_STD.LOGOUT +WWV_FLOW_CUSTOM_AUTH_STD.LOGOUT_THEN_GO_TO_PAGE +WWV_FLOW_CUSTOM_AUTH_STD.LOGOUT_THEN_GO_TO_URL +WWV_FLOW_CUSTOM_AUTH_STD.PORTAL_SSO_SENTRY_V0 +WWV_FLOW_CUSTOM_AUTH_STD.PORTAL_SSO_SENTRY_V1 +WWV_FLOW_CUSTOM_AUTH_STD.POST_LOGIN +WWV_FLOW_CUSTOM_AUTH_STD.REMOVE_SESSION +WWV_FLOW_CUSTOM_AUTH_STD.WS_LOGIN +WWV_FLOW_CUSTOM_AUTH_STD.WS_LOGOUT +WWV_FLOW_CUSTOM_AUTH_STD.WS_POST_LOGIN +WWV_FLOW_DATALOAD_XML. +WWV_FLOW_DATALOAD_XML.DOWNLOAD_XML +WWV_FLOW_DATA_QUICK_FLOW. +WWV_FLOW_DATA_QUICK_FLOW.CREATE_MODULES +WWV_FLOW_DATA_UPLOAD. +WWV_FLOW_DATA_UPLOAD.CREATE_COLLECTIONS_FROM_DATA +WWV_FLOW_DATA_UPLOAD.CREATE_LOAD_COLLECTION +WWV_FLOW_DATA_UPLOAD.CREATE_VERIFY_COLLECTION +WWV_FLOW_DATA_UPLOAD.DISPLAY_TABLE_MAPPING +WWV_FLOW_DATA_UPLOAD.FIX_PRE42 +WWV_FLOW_DATA_UPLOAD.GET_OWNER_NAME +WWV_FLOW_DATA_UPLOAD.LOAD_DATA +WWV_FLOW_DATA_UPLOAD.SAVE_COLUMN_MAPPING +WWV_FLOW_DA_STND_EVENTS_T1. +WWV_FLOW_DB_VERSION. +WWV_FLOW_DEBUG. +WWV_FLOW_DEBUG.DEPRECATED +WWV_FLOW_DEBUG.DISABLE +WWV_FLOW_DEBUG.ENABLE +WWV_FLOW_DEBUG.ENABLE_CACHE +WWV_FLOW_DEBUG.ENTER +WWV_FLOW_DEBUG.ERROR +WWV_FLOW_DEBUG.FLUSH_CACHE +WWV_FLOW_DEBUG.GET_CALL_STACK +WWV_FLOW_DEBUG.GET_PAGE_VIEW_ID +WWV_FLOW_DEBUG.INFO +WWV_FLOW_DEBUG.IS_SYSTEM_DEBUG_TRACE_ENABLED +WWV_FLOW_DEBUG.LOG_DBMS_OUTPUT +WWV_FLOW_DEBUG.LOG_EXCEPTION +WWV_FLOW_DEBUG.LOG_LONG_MESSAGE +WWV_FLOW_DEBUG.LOG_MESSAGE +WWV_FLOW_DEBUG.LOG_MESSAGE_INTERNAL +WWV_FLOW_DEBUG.LOG_PAGE_SESSION_STATE +WWV_FLOW_DEBUG.MESSAGE +WWV_FLOW_DEBUG.REMOVE_DEBUG_BY_AGE +WWV_FLOW_DEBUG.REMOVE_DEBUG_BY_APP +WWV_FLOW_DEBUG.REMOVE_DEBUG_BY_VIEW +WWV_FLOW_DEBUG.REMOVE_SESSION_MESSAGES +WWV_FLOW_DEBUG.TOCHAR +WWV_FLOW_DEBUG.TRACE +WWV_FLOW_DEBUG.WARN +WWV_FLOW_DEBUG_API. +WWV_FLOW_DEBUG_API.DISABLE +WWV_FLOW_DEBUG_API.DISABLE_DEBUG_MESSAGES +WWV_FLOW_DEBUG_API.ENABLE +WWV_FLOW_DEBUG_API.ENABLE_DEBUG_MESSAGES +WWV_FLOW_DEBUG_API.ENTER +WWV_FLOW_DEBUG_API.ERROR +WWV_FLOW_DEBUG_API.INFO +WWV_FLOW_DEBUG_API.LOG_DBMS_OUTPUT +WWV_FLOW_DEBUG_API.LOG_LONG_MESSAGE +WWV_FLOW_DEBUG_API.LOG_MESSAGE +WWV_FLOW_DEBUG_API.LOG_PAGE_SESSION_STATE +WWV_FLOW_DEBUG_API.MESSAGE +WWV_FLOW_DEBUG_API.REMOVE_DEBUG_BY_AGE +WWV_FLOW_DEBUG_API.REMOVE_DEBUG_BY_APP +WWV_FLOW_DEBUG_API.REMOVE_DEBUG_BY_VIEW +WWV_FLOW_DEBUG_API.REMOVE_SESSION_MESSAGES +WWV_FLOW_DEBUG_API.TOCHAR +WWV_FLOW_DEBUG_API.TRACE +WWV_FLOW_DEBUG_API.WARN +WWV_FLOW_DEV. +WWV_FLOW_DEV.GET_RUN_URL +WWV_FLOW_DEVELOPERS_T1. +WWV_FLOW_DEVELOPER_LOG_T1. +WWV_FLOW_DEVELOPER_TOOLBAR. +WWV_FLOW_DEVELOPER_TOOLBAR.GET_INLINE_EDIT +WWV_FLOW_DEVELOPER_TOOLBAR.SHOW_INLINE_EDIT +WWV_FLOW_DEVELOPER_TOOLBAR.SHOW_TOOLBAR +WWV_FLOW_DICTIONARY_DEV. +WWV_FLOW_DICTIONARY_DEV.ADD_TO_RESULT +WWV_FLOW_DICTIONARY_DEV.GET_PRIMARY_KEY_COLUMN +WWV_FLOW_DICT_VIEWS_T1. +WWV_FLOW_DISP_PAGE_PLUGS. +WWV_FLOW_DISP_PAGE_PLUGS.DISPLAY_PAGE_PLUGS +WWV_FLOW_DISP_PAGE_PLUGS.DISPLAY_REPORT +WWV_FLOW_DISP_PAGE_PLUGS.GET_PAGINATION_DATA +WWV_FLOW_DISP_PAGE_PLUGS.RESET_PAGINATION_BY_PAGE +WWV_FLOW_DISP_PAGE_PLUGS.RESET_REGION_PAGINATION +WWV_FLOW_DISP_PAGE_PLUGS.SET_PAGINATION_DATA +WWV_FLOW_DISP_PAGE_PLUGS.SET_REGION_PAGINATION +WWV_FLOW_DML. +WWV_FLOW_DML.DELETE_ROW +WWV_FLOW_DML.FETCH_ROW +WWV_FLOW_DML.FETCH_ROW_MD5_CHECKSUM +WWV_FLOW_DML.GET_BLOB +WWV_FLOW_DML.GET_BLOB_FILE +WWV_FLOW_DML.GET_BLOB_FILE_SRC +WWV_FLOW_DML.GET_BLOB_RPT_IMG +WWV_FLOW_DML.GET_BLOB_RPT_LINK +WWV_FLOW_DML.GET_COLUMN +WWV_FLOW_DML.GET_PK1_FROM_BLOB_FMT_MASK +WWV_FLOW_DML.GET_PK2_FROM_BLOB_FMT_MASK +WWV_FLOW_DML.INSERT_ROW +WWV_FLOW_DML.PARSE_DML_PROCESS_SOURCE +WWV_FLOW_DML.PROCESS +WWV_FLOW_DML.READ_BLOB_AND_DOWNLOAD +WWV_FLOW_DML.UPDATE_ROW +WWV_FLOW_DOWNLOAD. +WWV_FLOW_DOWNLOAD.GET_PAGE_PROCESS_SOURCE +WWV_FLOW_DRAG_LAYOUT. +WWV_FLOW_DRAG_LAYOUT.SHOW_LAYOUT_REGION +WWV_FLOW_DYNAMIC_ACTION. +WWV_FLOW_DYNAMIC_ACTION.RENDER +WWV_FLOW_DYNAMIC_ACTION_DEV. +WWV_FLOW_DYNAMIC_ACTION_DEV.REQUIRES_AFFECTED_ELEMENT +WWV_FLOW_DYNAMIC_ACTION_NATIVE. +WWV_FLOW_DYNAMIC_ACTION_NATIVE.AJAX +WWV_FLOW_DYNAMIC_ACTION_NATIVE.RENDER +WWV_FLOW_DYNAMIC_EXEC. +WWV_FLOW_DYNAMIC_EXEC.DO_ROWS_EXIST +WWV_FLOW_DYNAMIC_EXEC.EXECUTE +WWV_FLOW_DYNAMIC_EXEC.EXECUTE_PLSQL_CODE +WWV_FLOW_DYNAMIC_EXEC.FETCH_ROWS +WWV_FLOW_DYNAMIC_EXEC.GET_DEPENDENCY_OBJECTS +WWV_FLOW_DYNAMIC_EXEC.GET_FIRST_ROW_RESULT_NUMBER +WWV_FLOW_DYNAMIC_EXEC.GET_FIRST_ROW_RESULT_VARCHAR2 +WWV_FLOW_DYNAMIC_EXEC.GET_PLSQL_EXPR_RESULT_BOOLEAN +WWV_FLOW_DYNAMIC_EXEC.GET_PLSQL_EXPR_RESULT_VARCHAR2 +WWV_FLOW_DYNAMIC_EXEC.GET_PLSQL_FUNC_RESULT_BOOLEAN +WWV_FLOW_DYNAMIC_EXEC.GET_PLSQL_FUNC_RESULT_CLOB +WWV_FLOW_DYNAMIC_EXEC.GET_PLSQL_FUNC_RESULT_VARCHAR2 +WWV_FLOW_DYNAMIC_EXEC.GET_SQL_EXPR_RESULT_BOOLEAN +WWV_FLOW_DYNAMIC_EXEC.PARSE_SQL_STATEMENT +WWV_FLOW_DYNAMIC_EXEC.PREPARE_STATEMENT +WWV_FLOW_DYNAMIC_EXEC.RESET_NLS_ENVIRONMENT +WWV_FLOW_DYNAMIC_TRANS_T1. +WWV_FLOW_EDIT_REPORT. +WWV_FLOW_EDIT_REPORT.ADD_DERIVED_COLUMN +WWV_FLOW_EDIT_REPORT.COLUMN_HEADINGS_JAVASCRIPT +WWV_FLOW_EDIT_REPORT.GET_ALIAS_DISPLAY_NAME +WWV_FLOW_EDIT_REPORT.MOVE_COLS +WWV_FLOW_EDIT_REPORT.REMOVE_DERIVED_COLUMN +WWV_FLOW_EDIT_REPORT.UPDATE_COLUMN_DISPLAY_SEQUENCE +WWV_FLOW_EDIT_REPORT.UPDATE_PRINT_COLUMN_ATTRIBUTES +WWV_FLOW_EDIT_REPORT.UPDATE_REPORT_COLUMNS +WWV_FLOW_EDIT_REPORT.UPDATE_REPORT_COLUMN_SEQUENCE +WWV_FLOW_EFF_USERID_MAP_T1. +WWV_FLOW_ELEMENT. +WWV_FLOW_ELEMENT.ADD +WWV_FLOW_ENTRY_POINTS_T1. +WWV_FLOW_ENTRY_POINT_ARGS_T1. +WWV_FLOW_EPG_INCLUDE_MODULES. +WWV_FLOW_EPG_INCLUDE_MODULES.AUTHORIZE +WWV_FLOW_EPG_INCLUDE_MOD_LOCAL. +WWV_FLOW_ERROR. +WWV_FLOW_ERROR.ADD_ERROR +WWV_FLOW_ERROR.DEBUG_ERROR +WWV_FLOW_ERROR.GET_ARIA_ERROR_ATTRIBUTES +WWV_FLOW_ERROR.GET_ERROR_COUNT +WWV_FLOW_ERROR.GET_INTERNAL_ERROR +WWV_FLOW_ERROR.HAS_PAGE_ITEM_ERRORS +WWV_FLOW_ERROR.HAS_TABULAR_FORM_COLUMN_ERRORS +WWV_FLOW_ERROR.HAS_TABULAR_FORM_ROW_ERRORS +WWV_FLOW_ERROR.HAVE_ERRORS_OCCURRED +WWV_FLOW_ERROR.IS_INTERNAL_ERROR_ON_STACK +WWV_FLOW_ERROR.IS_STOP_APEX_ENGINE_ON_STACK +WWV_FLOW_ERROR.PREPARE_INLINE_ERROR_OUTPUT +WWV_FLOW_ERROR.RAISE_INTERNAL_ERROR +WWV_FLOW_ERROR_API. +WWV_FLOW_ERROR_API.ADD_ERROR +WWV_FLOW_ERROR_API.AUTO_SET_ASSOCIATED_ITEM +WWV_FLOW_ERROR_API.DEBUG_ERROR +WWV_FLOW_ERROR_API.EXTRACT_CONSTRAINT_NAME +WWV_FLOW_ERROR_API.GET_ARIA_ERROR_ATTRIBUTES +WWV_FLOW_ERROR_API.GET_ERROR_COUNT +WWV_FLOW_ERROR_API.GET_FIRST_ORA_ERROR_TEXT +WWV_FLOW_ERROR_API.HAVE_ERRORS_OCCURRED +WWV_FLOW_ERROR_API.INIT_ERROR_RESULT +WWV_FLOW_ESCAPE. +WWV_FLOW_ESCAPE.HTML +WWV_FLOW_ESCAPE.HTML_ATTRIBUTE +WWV_FLOW_ESCAPE.HTML_TRUNC +WWV_FLOW_ESCAPE.HTML_WHITELIST +WWV_FLOW_ESCAPE.INIT +WWV_FLOW_ESCAPE.JS_LITERAL +WWV_FLOW_ESCAPE.LDAP_DN +WWV_FLOW_ESCAPE.LDAP_SEARCH_FILTER +WWV_FLOW_ESCAPE.NOOP +WWV_FLOW_ESCAPE.SET_HTML_ESCAPING_MODE +WWV_FLOW_EVENTS_T1. +WWV_FLOW_EVENTS_T2. +WWV_FLOW_F4000_P4150. +WWV_FLOW_F4000_P4150.EXECUTE_TREE_OPERATION +WWV_FLOW_F4000_P4150.GET_TREE_DATA +WWV_FLOW_F4000_P4150.INIT +WWV_FLOW_F4000_P4150.SHOW_PROCESSING_TREE +WWV_FLOW_F4000_P4150.SHOW_RENDERING_TREE +WWV_FLOW_F4000_P4150.SHOW_SHARED_TREE +WWV_FLOW_F4000_PLUGINS. +WWV_FLOW_F4000_PLUGINS.AJAX_ADVANCED_AUTO_COMPLETE +WWV_FLOW_F4000_PLUGINS.AJAX_CLOB_TEXTAREA +WWV_FLOW_F4000_PLUGINS.AJAX_PLUGIN_ATTRIBUTE +WWV_FLOW_F4000_PLUGINS.INTERNAL_AUTHENTICATE +WWV_FLOW_F4000_PLUGINS.INTERNAL_INVALID_SESSION +WWV_FLOW_F4000_PLUGINS.INTERNAL_POST_LOGOUT +WWV_FLOW_F4000_PLUGINS.INTERNAL_SESSION_CALLBACK +WWV_FLOW_F4000_PLUGINS.INTERNAL_SESSION_SENTRY +WWV_FLOW_F4000_PLUGINS.INTERNAL_WS_INVALID_SESSION +WWV_FLOW_F4000_PLUGINS.INTERNAL_WS_POST_LOGOUT +WWV_FLOW_F4000_PLUGINS.INTERNAL_WS_SESSION_CALLBACK +WWV_FLOW_F4000_PLUGINS.INTERNAL_WS_SESSION_SENTRY +WWV_FLOW_F4000_PLUGINS.RENDER_ADVANCED_AUTO_COMPLETE +WWV_FLOW_F4000_PLUGINS.RENDER_ANCHORS +WWV_FLOW_F4000_PLUGINS.RENDER_CLOB_TEXTAREA +WWV_FLOW_F4000_PLUGINS.RENDER_CONDITION_TYPE +WWV_FLOW_F4000_PLUGINS.RENDER_HIDE_REQUIRED +WWV_FLOW_F4000_PLUGINS.RENDER_HIERARCHICAL_CHECKBOX +WWV_FLOW_F4000_PLUGINS.RENDER_PLUGIN_ATTRIBUTE +WWV_FLOW_F4000_PLUGINS.RENDER_SEARCHBOX +WWV_FLOW_F4000_PLUGINS.RENDER_SHOW_REQUIRED +WWV_FLOW_F4000_PLUGINS.RENDER_SUBSCRIPTIONS +WWV_FLOW_F4000_PLUGINS.RENDER_UI_COMPONENT_SELECTLIST +WWV_FLOW_F4000_PLUGINS.VALIDATE_ADVANCED_AUTO_COMPL +WWV_FLOW_F4000_PLUGINS.VALIDATE_CONDITION_TYPE +WWV_FLOW_F4000_UTIL. +WWV_FLOW_F4000_UTIL.CHECK_PLSQL +WWV_FLOW_F4000_UTIL.CHECK_SQL +WWV_FLOW_F4000_UTIL.COPY_LIST +WWV_FLOW_F4000_UTIL.COPY_LIST_FROM_APP +WWV_FLOW_F4000_UTIL.COUNTEM +WWV_FLOW_F4000_UTIL.CREATE_FEEDBACK_PAGE +WWV_FLOW_F4000_UTIL.CREATE_LIST_ENTRY_AS_COPY +WWV_FLOW_F4000_UTIL.CREATE_LOGIN_PAGE2 +WWV_FLOW_F4000_UTIL.GET_BUILD_OPT_UTIL +WWV_FLOW_F4000_UTIL.GET_NEXT_APP_PAGE +WWV_FLOW_F4000_UTIL.GET_SHOW_TABLES_01 +WWV_FLOW_F4000_UTIL.INTERACTIVE_RPT_SRC_CHANGED +WWV_FLOW_F4000_UTIL.IS_QUERY_WITH_ORDER_BY +WWV_FLOW_F4000_UTIL.IS_VALID_CHART_QUERY +WWV_FLOW_F4000_UTIL.IS_VALID_DIAL_CHART_QUERY +WWV_FLOW_F4000_UTIL.IS_VALID_LIST_QUERY +WWV_FLOW_F4000_UTIL.IS_VALID_LOV_QUERY +WWV_FLOW_F4000_UTIL.P327_CREATE_REPORT +WWV_FLOW_F4000_UTIL.POPULATE_LINK_COL +WWV_FLOW_F4000_UTIL.REQUIRE_FLOW_ID +WWV_FLOW_F4000_UTIL.RUN_BLOCK +WWV_FLOW_F4000_UTIL.RUN_DDL +WWV_FLOW_F4000_UTIL.SAVE_INTERACTIVE_RPT_REGION +WWV_FLOW_F4000_UTIL.SELECT_NUM +WWV_FLOW_F4000_UTIL.SET_DEVELOPER_PREFERENCES +WWV_FLOW_F4000_UTIL.SET_FLOW_PAGE +WWV_FLOW_F4000_UTIL.SHOW_APPLICATION_IMAGES +WWV_FLOW_F4000_UTIL.SHOW_HELP_LINK +WWV_FLOW_F4000_UTIL.SHOW_LIST_SOURCE +WWV_FLOW_F4000_UTIL.SHOW_POPUP_IMAGES +WWV_FLOW_F4000_UTIL.SHOW_REGION_TREE_SOURCE +WWV_FLOW_F4000_UTIL.SHOW_STANDARD_IMAGES +WWV_FLOW_F4000_UTIL.SHOW_WORKSPACE_IMAGES +WWV_FLOW_F4000_UTIL.VALIDATE_BLOB_MASK +WWV_FLOW_F4000_UTIL.VALIDATE_BUTTON_ACTION +WWV_FLOW_F4000_UTIL.VALIDATE_BUTTON_STYLE +WWV_FLOW_F4000_UTIL.VALIDATE_DA_COMPATIBLE_BUTTON +WWV_FLOW_F4000_UTIL.VALIDATE_DB_COLUMN +WWV_FLOW_FEATURES_HIST_T1. +WWV_FLOW_FEATURES_T1. +WWV_FLOW_FEATURES_T2. +WWV_FLOW_FEATURE_PROG_T1. +WWV_FLOW_FEEDBACK_FUP_T1. +WWV_FLOW_FEEDBACK_T1. +WWV_FLOW_FEEDBACK_T2. +WWV_FLOW_FIELD_TEMPLATES_T1. +WWV_FLOW_FILE_API. +WWV_FLOW_FILE_API.BLOB_TO_VARCHAR2 +WWV_FLOW_FILE_API.CLEAN_DIRNAME +WWV_FLOW_FILE_API.CLEAN_FILENAME +WWV_FLOW_FILE_API.CREATE_FILE +WWV_FLOW_FILE_API.GET_FILE_ID +WWV_FLOW_FILE_API.NEW_FILE_OBJECT$ +WWV_FLOW_FILE_API.REMOVE_FILE +WWV_FLOW_FILE_API.SET_FILE_SECURITY_GROUP_ID +WWV_FLOW_FILE_API.VARCHAR2_TO_BLOB +WWV_FLOW_FILE_MGR. +WWV_FLOW_FILE_MGR.DOWNLOAD_FILE +WWV_FLOW_FILE_MGR.GET_FILE +WWV_FLOW_FILE_MGR.GET_FILE_ID +WWV_FLOW_FILE_MGR.GET_TEAM_FILE +WWV_FLOW_FILE_MGR.GET_WS_FILE +WWV_FLOW_FILE_MGR.PROCESS_DOWNLOAD +WWV_FLOW_FILE_MGR.SHOW_DOWNLOAD_FORMAT_PAGE +WWV_FLOW_FILE_OBJECT_ID. +WWV_FLOW_FLASH_5_SERIES_T1. +WWV_FLOW_FLASH_CHART. +WWV_FLOW_FLASH_CHART.AJAX +WWV_FLOW_FLASH_CHART.CHART +WWV_FLOW_FLASH_CHART.SHOW +WWV_FLOW_FLASH_CHART.STATIC_XML +WWV_FLOW_FLASH_CHART2. +WWV_FLOW_FLASH_CHART2.CHART +WWV_FLOW_FLASH_CHART5. +WWV_FLOW_FLASH_CHART5.AJAX +WWV_FLOW_FLASH_CHART5.CHART +WWV_FLOW_FLASH_CHART5.GET_ACCESSIBLE_REPORT +WWV_FLOW_FLASH_CHART5.SHOW +WWV_FLOW_FLASH_CHART5.STATIC_XML +WWV_FLOW_FLASH_CHART5_UTIL. +WWV_FLOW_FLASH_CHART5_UTIL.FETCH_CHART_ATTR +WWV_FLOW_FLASH_CHART5_UTIL.FETCH_CHART_SERIES_ATTR +WWV_FLOW_FLASH_CHART5_UTIL.FETCH_MAP_ATTR +WWV_FLOW_FLASH_CHART5_UTIL.GET_FILES +WWV_FLOW_FLASH_CHART5_UTIL.GET_FLASH_FILENAME +WWV_FLOW_FLASH_CHART5_UTIL.IS_VALID_FLASH_CHART_QUERY +WWV_FLOW_FLASH_CHART5_UTIL.SAVE_CHART_ATTR +WWV_FLOW_FLASH_CHART5_UTIL.SAVE_CHART_SERIES_ATTR +WWV_FLOW_FLASH_CHART5_UTIL.SAVE_MAP_ATTR +WWV_FLOW_FLASH_CHART5_UTIL.SHOW_MAP_TREE +WWV_FLOW_FLASH_CHART5_UTIL.SHOW_MAP_TREE2 +WWV_FLOW_FLASH_CHARTS_5_T1. +WWV_FLOW_FLASH_CHARTS_T1. +WWV_FLOW_FLASH_CHART_SERIES_T1. +WWV_FLOW_FLASH_CHART_UTIL. +WWV_FLOW_FLASH_CHART_UTIL.FETCH_CHART_ATTR +WWV_FLOW_FLASH_CHART_UTIL.FETCH_CHART_SERIES_ATTR +WWV_FLOW_FLASH_CHART_UTIL.GET_FLASH_FILENAME +WWV_FLOW_FLASH_CHART_UTIL.IS_VALID_FLASH_CHART_QUERY +WWV_FLOW_FLASH_CHART_UTIL.SAVE_CHART_ATTR +WWV_FLOW_FLASH_CHART_UTIL.SAVE_CHART_SERIES_ATTR +WWV_FLOW_FND_DEVELOPER_API. +WWV_FLOW_FND_DEVELOPER_API.ADMIN_NOTIFY_CHANGE_REQUEST +WWV_FLOW_FND_DEVELOPER_API.ADMIN_NOTIFY_NEW_REQUEST +WWV_FLOW_FND_DEVELOPER_API.DELETE_DEVELOPER_ROLE +WWV_FLOW_FND_DEVELOPER_API.EDIT_DEVELOPER_ROLE +WWV_FLOW_FND_DEVELOPER_API.EDIT_DEVELOPER_ROLES +WWV_FLOW_FND_DEVELOPER_API.EDIT_FND_USER +WWV_FLOW_FND_DEVELOPER_API.F4050_55_PROVISION_WORKSPACE +WWV_FLOW_FND_DEVELOPER_API.F4550_RESET_PASSWORD +WWV_FLOW_FND_DEVELOPER_API.F4550_SEND_WORKSPACE +WWV_FLOW_FND_DEVELOPER_API.F4700_73_PROVISION_WORKSPACE +WWV_FLOW_FND_DEVELOPER_API.F4900_RESET_PASSWORD +WWV_FLOW_FND_DEVELOPER_API.SET_COMPONENT_PRIVS +WWV_FLOW_FND_FUNCTION. +WWV_FLOW_FND_FUNCTION.TEST +WWV_FLOW_FND_GLOBAL. +WWV_FLOW_FND_GROUP_USERS_T1. +WWV_FLOW_FND_USER_API. +WWV_FLOW_FND_USER_API.CHANGE_CURRENT_USER_PW +WWV_FLOW_FND_USER_API.CHANGE_PASSWORD_ON_FIRST_USE +WWV_FLOW_FND_USER_API.CREATE_COMPANY +WWV_FLOW_FND_USER_API.CREATE_FND_USER +WWV_FLOW_FND_USER_API.CREATE_USER_COLL_FROM_CSV +WWV_FLOW_FND_USER_API.CREATE_USER_FROM_COLLECTION +WWV_FLOW_FND_USER_API.CREATE_USER_FROM_FILE +WWV_FLOW_FND_USER_API.CREATE_USER_GROUP +WWV_FLOW_FND_USER_API.DELETE_USER_GROUP +WWV_FLOW_FND_USER_API.EDIT_FND_USER +WWV_FLOW_FND_USER_API.END_USER_ACCOUNT_DAYS_LEFT +WWV_FLOW_FND_USER_API.EXPIRE_END_USER_ACCOUNT +WWV_FLOW_FND_USER_API.EXPIRE_WORKSPACE_ACCOUNT +WWV_FLOW_FND_USER_API.EXPORT_FND_USERS +WWV_FLOW_FND_USER_API.FETCH_FND_USER +WWV_FLOW_FND_USER_API.FIND_COMPANY +WWV_FLOW_FND_USER_API.FIND_SECURITY_GROUP_ID +WWV_FLOW_FND_USER_API.GET_ACCOUNT_LOCKED_STATUS +WWV_FLOW_FND_USER_API.GET_AUTHENTICATION_RESULT +WWV_FLOW_FND_USER_API.GET_USER_ROLES +WWV_FLOW_FND_USER_API.LOCK_ACCOUNT +WWV_FLOW_FND_USER_API.PASSWORD_FIRST_USE_OCCURRED +WWV_FLOW_FND_USER_API.REMOVE_FND_USER +WWV_FLOW_FND_USER_API.RESET_PASSWORD +WWV_FLOW_FND_USER_API.RESET_PW +WWV_FLOW_FND_USER_API.SET_AUTHENTICATION_RESULT +WWV_FLOW_FND_USER_API.SET_CUSTOM_AUTH_STATUS +WWV_FLOW_FND_USER_API.UNEXPIRE_END_USER_ACCOUNT +WWV_FLOW_FND_USER_API.UNEXPIRE_WORKSPACE_ACCOUNT +WWV_FLOW_FND_USER_API.UNLOCK_ACCOUNT +WWV_FLOW_FND_USER_API.USER_IN_GROUP +WWV_FLOW_FND_USER_API.WORKSPACE_ACCOUNT_DAYS_LEFT +WWV_FLOW_FND_USER_GROUPS_T1. +WWV_FLOW_FND_USER_PW_PREF. +WWV_FLOW_FND_USER_T1. +WWV_FLOW_FND_USER_T2. +WWV_FLOW_FORMS. +WWV_FLOW_FORMS.CURRENT_SUBS +WWV_FLOW_FORMS.EMIT_FORM +WWV_FLOW_FORMS.GET_DISPLAY_VALUE +WWV_FLOW_FORMS.GET_HTML_PAGE_ITEM_NAME +WWV_FLOW_FORMS.INIT_FORM +WWV_FLOW_FORM_CONTROL. +WWV_FLOW_FORM_CONTROL.GET_NEXT_OR_PREV_INFO +WWV_FLOW_GENERATE_DDL. +WWV_FLOW_GENERATE_DDL.EXECUTE_GET_DDL +WWV_FLOW_GENERATE_DDL.EXECUTE_GET_TABLE_DDL +WWV_FLOW_GENERATE_DDL.GET_DDL +WWV_FLOW_GENERATE_TABLE_API. +WWV_FLOW_GENERATE_TABLE_API.CREATE_API +WWV_FLOW_GENERIC_ATTR. +WWV_FLOW_GENERIC_ATTR.FETCH_ATTRIBUTE +WWV_FLOW_GENERIC_ATTR.FETCH_ATTRIBUTES +WWV_FLOW_GENERIC_ATTR.SET_ATTRIBUTE +WWV_FLOW_GENERIC_ATTR.SET_ATTRIBUTES +WWV_FLOW_GEN_API2. +WWV_FLOW_GEN_API2.CREATE_CSS_SCRIPT +WWV_FLOW_GEN_API2.CREATE_CSS_SCRIPT_CLOB +WWV_FLOW_GEN_API2.CREATE_HTML_SCRIPT +WWV_FLOW_GEN_API2.CREATE_HTML_SCRIPT_CLOB +WWV_FLOW_GEN_API2.CREATE_IMAGE_SCRIPT +WWV_FLOW_GEN_API2.CREATE_IMAGE_SCRIPT_CLOB +WWV_FLOW_GEN_API2.EXPORT +WWV_FLOW_GEN_API2.EXPORT_COMP_IMAGE_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_CSS_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_FEEDBACK_TO_DEPLOYMENT +WWV_FLOW_GEN_API2.EXPORT_FEEDBACK_TO_DEVELOPMENT +WWV_FLOW_GEN_API2.EXPORT_FIELD_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_FLOW_IMAGE_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_HTML_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_IMAGE_REPOSITORY +WWV_FLOW_GEN_API2.EXPORT_LIST_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_PAGE_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_PARENT_TABSET +WWV_FLOW_GEN_API2.EXPORT_PLUGIN +WWV_FLOW_GEN_API2.EXPORT_REGION_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_RESTFUL_SERVICE +WWV_FLOW_GEN_API2.EXPORT_RESTFUL_SERVICES +WWV_FLOW_GEN_API2.EXPORT_ROW_TEMPLATE +WWV_FLOW_GEN_API2.EXPORT_SCRIPT +WWV_FLOW_GEN_API2.EXPORT_TABSET +WWV_FLOW_GEN_API2.EXPORT_THEME +WWV_FLOW_GEN_API2.FILE_CLOSE +WWV_FLOW_GEN_API2.FILE_OPEN +WWV_FLOW_GEN_HINT. +WWV_FLOW_GEN_HINT.EXPORT +WWV_FLOW_GEN_HINT.EXPORT_ATTR_DICT +WWV_FLOW_GLOBAL. +WWV_FLOW_GRID_LAYOUT. +WWV_FLOW_GRID_LAYOUT.EMIT_OPEN +WWV_FLOW_GRID_LAYOUT.INIT +WWV_FLOW_GRID_LAYOUT.NEXT_AND_EMIT_CLOSE +WWV_FLOW_GRID_LAYOUT_DEV. +WWV_FLOW_GRID_LAYOUT_DEV.CLEANUP_GRID_ITEMS +WWV_FLOW_GRID_LAYOUT_DEV.GET +WWV_FLOW_GRID_LAYOUT_DEV.SET_HELPER_ITEMS +WWV_FLOW_HINT. +WWV_FLOW_HINT.AD_COL_HINT_EXISTS +WWV_FLOW_HINT.CHECK_LOV_ISSUES +WWV_FLOW_HINT.CHECK_SCHEMA_PRIVS +WWV_FLOW_HINT.CHECK_TABLE +WWV_FLOW_HINT.COLUMN_HINT_EXISTS +WWV_FLOW_HINT.CREATE_COLUMN_HINT +WWV_FLOW_HINT.CREATE_COLUMN_HINT_PRIV +WWV_FLOW_HINT.CREATE_COL_ATTRIBUTE +WWV_FLOW_HINT.CREATE_COL_SYNONYM +WWV_FLOW_HINT.CREATE_GROUP +WWV_FLOW_HINT.CREATE_GROUP_PRIV +WWV_FLOW_HINT.CREATE_LOV_DATA +WWV_FLOW_HINT.CREATE_LOV_DATA_PRIV +WWV_FLOW_HINT.CREATE_NORMALIZE_HINT +WWV_FLOW_HINT.CREATE_TABLE_HINT +WWV_FLOW_HINT.CREATE_TABLE_HINT_PRIV +WWV_FLOW_HINT.GEN_LOV_NAME +WWV_FLOW_HINT.GET_AD_UI_DEFAULTS +WWV_FLOW_HINT.GET_AGGREGATE_BY +WWV_FLOW_HINT.GET_ALIGNMENT +WWV_FLOW_HINT.GET_COL_UI_DEFAULTS +WWV_FLOW_HINT.GET_DEFAULT_VALUE +WWV_FLOW_HINT.GET_DISPLAY_AS_FORM +WWV_FLOW_HINT.GET_DISPLAY_AS_REPORT +WWV_FLOW_HINT.GET_DISPLAY_AS_TAB_FORM +WWV_FLOW_HINT.GET_DISPLAY_IN_FORM +WWV_FLOW_HINT.GET_DISPLAY_IN_REPORT +WWV_FLOW_HINT.GET_DISPLAY_SEQ_FORM +WWV_FLOW_HINT.GET_DISPLAY_SEQ_REPORT +WWV_FLOW_HINT.GET_DISPLAY_WIDTH +WWV_FLOW_HINT.GET_FORM_MASK +WWV_FLOW_HINT.GET_FORM_REGION_TITLE +WWV_FLOW_HINT.GET_GROUP_BY +WWV_FLOW_HINT.GET_HEIGHT +WWV_FLOW_HINT.GET_ITEM_HELP +WWV_FLOW_HINT.GET_LABEL +WWV_FLOW_HINT.GET_LOV +WWV_FLOW_HINT.GET_LOV_QUERY +WWV_FLOW_HINT.GET_MAX_WIDTH +WWV_FLOW_HINT.GET_ORDER_BY_ASC_DESC +WWV_FLOW_HINT.GET_ORDER_BY_SEQ +WWV_FLOW_HINT.GET_REGION_TITLE +WWV_FLOW_HINT.GET_REPORT_MASK +WWV_FLOW_HINT.GET_REPORT_REGION_TITLE +WWV_FLOW_HINT.GET_REQUIRED +WWV_FLOW_HINT.GET_SEARCHABLE +WWV_FLOW_HINT.GET_STATIC_LOV_STRING +WWV_FLOW_HINT.GET_TABLE_UI_DEFAULTS +WWV_FLOW_HINT.INSERT_AD_FROM_CR +WWV_FLOW_HINT.INSERT_AD_FROM_IR +WWV_FLOW_HINT.INSERT_AD_FROM_ITEMS +WWV_FLOW_HINT.MIGRATE +WWV_FLOW_HINT.REMOVE_COLUMN_HINT +WWV_FLOW_HINT.REMOVE_COL_ATTRIBUTE +WWV_FLOW_HINT.REMOVE_COL_ATTR_BY_NAME +WWV_FLOW_HINT.REMOVE_COL_SYNONYM +WWV_FLOW_HINT.REMOVE_COL_SYN_BY_NAME +WWV_FLOW_HINT.REMOVE_GROUP +WWV_FLOW_HINT.REMOVE_HINT +WWV_FLOW_HINT.REMOVE_HINT_PRIV +WWV_FLOW_HINT.REMOVE_LOV_DATA +WWV_FLOW_HINT.REMOVE_TABLE_HINT +WWV_FLOW_HINT.SYNCH_DEFAULTS_FROM_APP +WWV_FLOW_HINT.SYNCH_HINTS +WWV_FLOW_HINT.TABLE_HINT_EXISTS +WWV_FLOW_HINT.UPDATE_AD_FROM_CR +WWV_FLOW_HINT.UPDATE_AD_FROM_IR +WWV_FLOW_HINT.UPDATE_AD_FROM_ITEMS +WWV_FLOW_HINT.UPDATE_COLUMN_HINT +WWV_FLOW_HINT.UPDATE_COL_ATTRIBUTE +WWV_FLOW_HINT.UPDATE_COL_SYNONYM +WWV_FLOW_HINT.UPDATE_CR_FROM_AD +WWV_FLOW_HINT.UPDATE_CR_HT_FROM_AD +WWV_FLOW_HINT.UPDATE_GROUP +WWV_FLOW_HINT.UPDATE_IR_FROM_AD +WWV_FLOW_HINT.UPDATE_ITEMS_FROM_AD +WWV_FLOW_HINT.UPDATE_LOV_DATA +WWV_FLOW_HINT.UPDATE_TABLE_HINT +WWV_FLOW_HNT_ARGUMENT_INFO_T1. +WWV_FLOW_HNT_COLUMN_DICT_T1. +WWV_FLOW_HNT_COLUMN_DICT_T2. +WWV_FLOW_HNT_COL_DICT_SYN_T1. +WWV_FLOW_HNT_COL_INFO_T1. +WWV_FLOW_HNT_GROUPS_T1. +WWV_FLOW_HNT_LOV_DATA_T1. +WWV_FLOW_HNT_PROCEDURE_INFO_T1. +WWV_FLOW_HNT_TABLE_INFO_T1. +WWV_FLOW_HOT_HTTP_LINKS. +WWV_FLOW_HTML_API. +WWV_FLOW_HTML_API.NEW_HTML_REPOSITORY_RECORD +WWV_FLOW_HTML_API.REMOVE_HTML +WWV_FLOW_HTML_API_PRIVATE. +WWV_FLOW_HTML_API_PRIVATE.NEW_HTML +WWV_FLOW_HTML_API_PRIVATE.REMOVE_HTML +WWV_FLOW_HTML_API_PRIVATE.UPDATE_HTML +WWV_FLOW_HTML_REPOSITORY_T1. +WWV_FLOW_ICON_BAR_T1. +WWV_FLOW_ID. +WWV_FLOW_ID.CURR_VAL +WWV_FLOW_ID.NEXT_VAL +WWV_FLOW_IMAGE_API. +WWV_FLOW_IMAGE_API.NEW_IMAGE_REPOSITORY_RECORD +WWV_FLOW_IMAGE_API.REMOVE_IMAGE +WWV_FLOW_IMAGE_API_PRIVATE. +WWV_FLOW_IMAGE_API_PRIVATE.GET_IMAGE_DETAILS +WWV_FLOW_IMAGE_API_PRIVATE.PROCESS_NEW_IMAGE +WWV_FLOW_IMAGE_API_PRIVATE.REMOVE_IMAGE +WWV_FLOW_IMAGE_GENERATOR. +WWV_FLOW_IMAGE_GENERATOR.GET_IMAGE +WWV_FLOW_IMAGE_PREFIX. +WWV_FLOW_IMAGE_REPOSITORY_T1. +WWV_FLOW_IMPORT_EXPORT_T1. +WWV_FLOW_IMP_PARSER. +WWV_FLOW_IMP_PARSER.FLOW_EXISTS +WWV_FLOW_IMP_PARSER.GET_ATTR_DICT_WORKSPACE +WWV_FLOW_IMP_PARSER.GET_BUILD_STATUS +WWV_FLOW_IMP_PARSER.GET_COMPONENT_MANIFEST +WWV_FLOW_IMP_PARSER.GET_CSS_NAME +WWV_FLOW_IMP_PARSER.GET_FEEDBACK_ORIGIN +WWV_FLOW_IMP_PARSER.GET_FLOW_ID +WWV_FLOW_IMP_PARSER.GET_IMAGE_NAME +WWV_FLOW_IMP_PARSER.GET_PAGE_ID +WWV_FLOW_IMP_PARSER.GET_PARSE_AS_SCHEMA +WWV_FLOW_IMP_PARSER.GET_PLUGIN_DISPLAY_NAME +WWV_FLOW_IMP_PARSER.GET_PLUGIN_NAME +WWV_FLOW_IMP_PARSER.GET_PLUGIN_TYPE +WWV_FLOW_IMP_PARSER.GET_SCHEMA_PROVISIONED +WWV_FLOW_IMP_PARSER.GET_SECURITY_GROUP_ID +WWV_FLOW_IMP_PARSER.GET_THEME_ID +WWV_FLOW_IMP_PARSER.GET_THEME_NAME +WWV_FLOW_IMP_PARSER.GET_UI_SCHEMA +WWV_FLOW_IMP_PARSER.GET_VERSION +WWV_FLOW_IMP_PARSER.GET_WEBSHEET_SCHEMA +WWV_FLOW_IMP_PARSER.GET_WORKSPACE_NAME +WWV_FLOW_IMP_PARSER.GET_WORKSPACE_SCHEMAS +WWV_FLOW_IMP_PARSER.GET_WS_APP_ID +WWV_FLOW_IMP_PARSER.IS_COMPANY_EXPORT +WWV_FLOW_IMP_PARSER.IS_COMPONENT_EXPORT +WWV_FLOW_IMP_PARSER.IS_WEBSHEET_EXPORT +WWV_FLOW_IMP_PARSER.PARSE +WWV_FLOW_IMP_PARSER.WEBSHEET_PARSE +WWV_FLOW_INIT_HTP_BUFFER. +WWV_FLOW_INSTALL_BUILD_OPT_T1. +WWV_FLOW_INSTALL_CHECKS_T1. +WWV_FLOW_INSTALL_SCRIPTS_T1. +WWV_FLOW_INSTALL_T1. +WWV_FLOW_INSTALL_WIZARD. +WWV_FLOW_INSTALL_WIZARD.CONFIGURATION_OPTIONS +WWV_FLOW_INSTALL_WIZARD.CREATE_ACL_DDL +WWV_FLOW_INSTALL_WIZARD.DEINSTALL +WWV_FLOW_INSTALL_WIZARD.GET_EXISTING_OBJECTS +WWV_FLOW_INSTALL_WIZARD.GET_FREE_SPACE +WWV_FLOW_INSTALL_WIZARD.GET_MISSING_PRIVS +WWV_FLOW_INSTALL_WIZARD.INSTALL +WWV_FLOW_INSTALL_WIZARD.INSTALL_CONDITION +WWV_FLOW_INSTALL_WIZARD.SET_SUB_STRINGS +WWV_FLOW_INSTALL_WIZARD.UPGRADE +WWV_FLOW_INSTANCE_ADMIN. +WWV_FLOW_INSTANCE_ADMIN.ADD_AUTHORIZED_URL +WWV_FLOW_INSTANCE_ADMIN.ADD_SCHEMA +WWV_FLOW_INSTANCE_ADMIN.ADD_WORKSPACE +WWV_FLOW_INSTANCE_ADMIN.ARCHIVE_WORKSPACE +WWV_FLOW_INSTANCE_ADMIN.DISABLE_WORKSPACE +WWV_FLOW_INSTANCE_ADMIN.ENABLE_WORKSPACE +WWV_FLOW_INSTANCE_ADMIN.FREE_WORKSPACE_APP_IDS +WWV_FLOW_INSTANCE_ADMIN.GET_AUTHORIZED_URLS +WWV_FLOW_INSTANCE_ADMIN.GET_PARAMETER +WWV_FLOW_INSTANCE_ADMIN.GET_SCHEMAS +WWV_FLOW_INSTANCE_ADMIN.PURGE_ARCHIVES +WWV_FLOW_INSTANCE_ADMIN.PURGE_ARCHIVE_VERSIONS +WWV_FLOW_INSTANCE_ADMIN.REMOVE_APPLICATION +WWV_FLOW_INSTANCE_ADMIN.REMOVE_AUTHORIZED_URL +WWV_FLOW_INSTANCE_ADMIN.REMOVE_SAVED_REPORT +WWV_FLOW_INSTANCE_ADMIN.REMOVE_SAVED_REPORTS +WWV_FLOW_INSTANCE_ADMIN.REMOVE_SCHEMA +WWV_FLOW_INSTANCE_ADMIN.REMOVE_SUBSCRIPTION +WWV_FLOW_INSTANCE_ADMIN.REMOVE_WORKSPACE +WWV_FLOW_INSTANCE_ADMIN.RESERVE_WORKSPACE_APP_IDS +WWV_FLOW_INSTANCE_ADMIN.SET_LOG_SWITCH_INTERVAL +WWV_FLOW_INSTANCE_ADMIN.SET_PARAMETER +WWV_FLOW_INSTANCE_ADMIN.SET_WORKSPACE_CONSUMER_GROUP +WWV_FLOW_INSTANCE_ADMIN.SET_WORKSPACE_PARAMETER +WWV_FLOW_INSTANCE_ADMIN.TRUNCATE_LOG +WWV_FLOW_ISC. +WWV_FLOW_ISC.CURRENT_FLOW_RESTRICTED +WWV_FLOW_ISC.DEPLOYMENT_ENVIRONMENT +WWV_FLOW_ISC.VC +WWV_FLOW_ITEM. +WWV_FLOW_ITEM.CHECKBOX +WWV_FLOW_ITEM.DATE_POPUP +WWV_FLOW_ITEM.DATE_POPUP2 +WWV_FLOW_ITEM.DISPLAY_AND_SAVE +WWV_FLOW_ITEM.FETCH_G_BUILD_OPTIONS_EXCLUDED +WWV_FLOW_ITEM.FETCH_G_BUILD_OPTIONS_INCLUDED +WWV_FLOW_ITEM.GET_FIRST_ROWNUM +WWV_FLOW_ITEM.HIDDEN +WWV_FLOW_ITEM.MD5 +WWV_FLOW_ITEM.MD5_CHECKSUM +WWV_FLOW_ITEM.MD5_HIDDEN +WWV_FLOW_ITEM.MRU +WWV_FLOW_ITEM.MULTI_ROW_DELETE +WWV_FLOW_ITEM.MULTI_ROW_UPDATE +WWV_FLOW_ITEM.POPUPKEY_FROM_LOV +WWV_FLOW_ITEM.POPUPKEY_FROM_QUERY +WWV_FLOW_ITEM.POPUP_FROM_LOV +WWV_FLOW_ITEM.POPUP_FROM_QUERY +WWV_FLOW_ITEM.RADIOGROUP +WWV_FLOW_ITEM.RADIO_GROUP_FROM_LOV +WWV_FLOW_ITEM.RADIO_GROUP_FROM_QUERY +WWV_FLOW_ITEM.RADIO_GROUP_FROM_STATIC_LOV +WWV_FLOW_ITEM.SELECT_LIST +WWV_FLOW_ITEM.SELECT_LIST_FROM_LOV +WWV_FLOW_ITEM.SELECT_LIST_FROM_LOV_XL +WWV_FLOW_ITEM.SELECT_LIST_FROM_QUERY +WWV_FLOW_ITEM.SELECT_LIST_FROM_QUERY_XL +WWV_FLOW_ITEM.SIMPLE_CHECKBOX +WWV_FLOW_ITEM.TEXT +WWV_FLOW_ITEM.TEXTAREA +WWV_FLOW_ITEM.TEXT_FROM_LOV +WWV_FLOW_ITEM.TEXT_FROM_LOV_QUERY +WWV_FLOW_ITEMS_T1. +WWV_FLOW_ITEMS_T2. +WWV_FLOW_ITEM_COMPS. +WWV_FLOW_ITEM_HELP. +WWV_FLOW_ITEM_HELP.GET_HELP_TEXT +WWV_FLOW_ITEM_HELP.SHOW_HELP +WWV_FLOW_ITEM_HELP.SHOW_PLUGIN_ATTRIBUTE_HELP +WWV_FLOW_JAVASCRIPT. +WWV_FLOW_JAVASCRIPT.ADD_3RD_PARTY_LIBRARY_FILE +WWV_FLOW_JAVASCRIPT.ADD_APEX_LIBRARY +WWV_FLOW_JAVASCRIPT.ADD_ATTRIBUTE +WWV_FLOW_JAVASCRIPT.ADD_CODE +WWV_FLOW_JAVASCRIPT.ADD_INLINE_CODE +WWV_FLOW_JAVASCRIPT.ADD_LIBRARY +WWV_FLOW_JAVASCRIPT.ADD_LIBRARY_URLS +WWV_FLOW_JAVASCRIPT.ADD_ONLOAD_CODE +WWV_FLOW_JAVASCRIPT.ADD_VALUE +WWV_FLOW_JAVASCRIPT.EMIT_CODE +WWV_FLOW_JAVASCRIPT.ESCAPE +WWV_FLOW_JAVASCRIPT.HAS_CODE_BUFFERED +WWV_FLOW_JAVASCRIPT.RESET +WWV_FLOW_JAVASCRIPT.SAVE_IN_CACHE +WWV_FLOW_JAVASCRIPT.STANDARD_JAVASCRIPT +WWV_FLOW_JAVASCRIPT_API. +WWV_FLOW_JAVASCRIPT_API.ADD_3RD_PARTY_LIBRARY_FILE +WWV_FLOW_JAVASCRIPT_API.ADD_ATTRIBUTE +WWV_FLOW_JAVASCRIPT_API.ADD_INLINE_CODE +WWV_FLOW_JAVASCRIPT_API.ADD_LIBRARY +WWV_FLOW_JAVASCRIPT_API.ADD_ONLOAD_CODE +WWV_FLOW_JAVASCRIPT_API.ADD_VALUE +WWV_FLOW_JAVASCRIPT_API.ESCAPE +WWV_FLOW_JOB. +WWV_FLOW_JOB.CLEANUP_COMPLETED_JOBS +WWV_FLOW_JOB.REMOVE_JOB +WWV_FLOW_JOB.RUN_INTERNAL_JOB +WWV_FLOW_JOB.UPDATE_SYSTEM_STATUS +WWV_FLOW_KEY. +WWV_FLOW_LANG. +WWV_FLOW_LANG.ALTER_SESSION +WWV_FLOW_LANG.AUTO_DETECT_TIME_ZONE +WWV_FLOW_LANG.CREATE_LANGUAGE_MAPPING +WWV_FLOW_LANG.CREATE_MESSAGE +WWV_FLOW_LANG.CUSTOM_RUNTIME_MESSAGE +WWV_FLOW_LANG.DELETE_LANGUAGE_MAPPING +WWV_FLOW_LANG.DELETE_MESSAGE +WWV_FLOW_LANG.FIND_LANGUAGE_PREFERENCE +WWV_FLOW_LANG.GET_CSV_CHARSET +WWV_FLOW_LANG.GET_DB_CHARSET +WWV_FLOW_LANG.GET_G_SESSION_LANG +WWV_FLOW_LANG.GET_G_SESSION_TERRITORY +WWV_FLOW_LANG.GET_G_SESSION_TIME_ZONE +WWV_FLOW_LANG.GET_NLS_LANGUAGE +WWV_FLOW_LANG.GET_NLS_TERRITORY_FROM_LANG +WWV_FLOW_LANG.GET_NLS_TIME_FORMAT +WWV_FLOW_LANG.GET_NLS_WINDOWS_CHARSET +WWV_FLOW_LANG.GET_SESSION_LANG_FROM_COOKIE +WWV_FLOW_LANG.GET_TRANSLATED_APPLICATION_ID +WWV_FLOW_LANG.GET_WS_LANG_FROM_COOKIE +WWV_FLOW_LANG.GET_WS_TERRITORY_FROM_COOKIE +WWV_FLOW_LANG.LANG +WWV_FLOW_LANG.MAP_DB_CHARSET +WWV_FLOW_LANG.MAP_IANA_CHARSET +WWV_FLOW_LANG.MAP_LANGUAGE +WWV_FLOW_LANG.MESSAGE +WWV_FLOW_LANG.MESSAGE_P +WWV_FLOW_LANG.REPLACE_PARAM +WWV_FLOW_LANG.REPORT_LANG_TO_BROWSER +WWV_FLOW_LANG.RESET_NLS +WWV_FLOW_LANG.RESET_SESSION_LANG +WWV_FLOW_LANG.RESET_SESSION_TERRITORY +WWV_FLOW_LANG.RESET_SESSION_TIME_ZONE +WWV_FLOW_LANG.SEED_TRANSLATIONS +WWV_FLOW_LANG.SET_APPLICATION_DT_TZ_FORMATS +WWV_FLOW_LANG.SET_G_SESSION_LANG +WWV_FLOW_LANG.SET_G_SESSION_TERRITORY +WWV_FLOW_LANG.SET_G_SESSION_TIME_ZONE +WWV_FLOW_LANG.SET_SESSION_LANG +WWV_FLOW_LANG.SET_SESSION_LANG_COOKIE +WWV_FLOW_LANG.SET_SESSION_TERRITORY +WWV_FLOW_LANG.SET_SESSION_TIME_ZONE +WWV_FLOW_LANG.SET_TRANSLATED_FLOW_AND_PAGE +WWV_FLOW_LANG.SET_WS_LANG_TERR_COOKIE +WWV_FLOW_LANG.SYSTEM_MESSAGE +WWV_FLOW_LANG.SYSTEM_MESSAGE_LIT +WWV_FLOW_LANG.SYSTEM_MESSAGE_P +WWV_FLOW_LANG.UPDATE_LANGUAGE_MAPPING +WWV_FLOW_LANG.UPDATE_MESSAGE +WWV_FLOW_LANG.UPDATE_TRANSLATED_STRING +WWV_FLOW_LANGUAGES_T1. +WWV_FLOW_LANGUAGE_MAP_T1. +WWV_FLOW_LDAP. +WWV_FLOW_LDAP.AUTHENTICATE +WWV_FLOW_LDAP.GET_ALL_USER_ATTRIBUTES +WWV_FLOW_LDAP.GET_GROUPS +WWV_FLOW_LDAP.GET_GROUPS_STRING +WWV_FLOW_LDAP.GET_USER_ATTRIBUTES +WWV_FLOW_LDAP.IS_MEMBER +WWV_FLOW_LDAP.MEMBER_OF +WWV_FLOW_LDAP.MEMBER_OF2 +WWV_FLOW_LD_TAB_LOOKUPS_AUDIT. +WWV_FLOW_LD_TAB_RULES_AUDIT. +WWV_FLOW_LEGACY_PLUGINS. +WWV_FLOW_LEGACY_PLUGINS.RENDER_HTML_CHART +WWV_FLOW_LEGACY_PLUGINS.SHOW_HTML_CHART +WWV_FLOW_LINKS_T1. +WWV_FLOW_LINKS_T2. +WWV_FLOW_LIST. +WWV_FLOW_LIST.RENDER +WWV_FLOW_LISTENER. +WWV_FLOW_LISTENER.AUTHENTICATE +WWV_FLOW_LISTENER.GET_SESSION_USERNAME +WWV_FLOW_LISTENER.GET_WORKSPACE_USER_GROUPS +WWV_FLOW_LISTENER.GET_WORKSPACE_USER_GROUP_ID +WWV_FLOW_LISTENER.GET_WORKSPACE_USER_GROUP_NAME +WWV_FLOW_LISTENER.GET_WORKSPACE_USER_TYPE +WWV_FLOW_LISTENER.INSTALL_PREREQ_DATA +WWV_FLOW_LISTENER.INSTALL_SEED_DATA +WWV_FLOW_LISTENER.IS_REQUIRED_VERSION +WWV_FLOW_LISTENER.IS_VALID_TEMPLATE +WWV_FLOW_LISTENER.RESET_SAMPLE_DATA +WWV_FLOW_LISTS_OF_VALUESD_T1. +WWV_FLOW_LISTS_OF_VALUES_T1. +WWV_FLOW_LISTS_T1. +WWV_FLOW_LIST_ITEMS_T1. +WWV_FLOW_LIST_TEMPLATES_T1. +WWV_FLOW_LOADTAB_LOOKUPS_T1. +WWV_FLOW_LOADTAB_RULES_T1. +WWV_FLOW_LOAD_DATA. +WWV_FLOW_LOAD_DATA.BUILD_SQL +WWV_FLOW_LOAD_DATA.CLEANOUT_COLUMN_NAME +WWV_FLOW_LOAD_DATA.CREATE_CSV_COLLECTION +WWV_FLOW_LOAD_DATA.CREATE_TAB_INFO_COLLECTION +WWV_FLOW_LOAD_DATA.DATE_FORMAT +WWV_FLOW_LOAD_DATA.DE_QUOTE +WWV_FLOW_LOAD_DATA.DISPLAY_ETABLE_PROPERTY +WWV_FLOW_LOAD_DATA.DISPLAY_NTABLE_PROPERTY +WWV_FLOW_LOAD_DATA.DUMP_ASCII +WWV_FLOW_LOAD_DATA.IS_DATE +WWV_FLOW_LOAD_DATA.IS_NUMBER +WWV_FLOW_LOAD_DATA.LOAD_CSV_DATA +WWV_FLOW_LOAD_DATA.LOAD_DATA +WWV_FLOW_LOAD_DATA.VALID_FILE_EXTENSION +WWV_FLOW_LOAD_EXCEL_DATA. +WWV_FLOW_LOAD_EXCEL_DATA.CREATE_TABLE +WWV_FLOW_LOAD_EXCEL_DATA.GET_TABLE_INFO +WWV_FLOW_LOAD_EXCEL_DATA.LOAD_EXCEL_DATA +WWV_FLOW_LOAD_EXCEL_DATA.TABLE_EXISTS +WWV_FLOW_LOAD_TABLES_AUDIT. +WWV_FLOW_LOAD_TABLES_T1. +WWV_FLOW_LOCK_PAGE_LOG_T1. +WWV_FLOW_LOCK_PAGE_T1. +WWV_FLOW_LOCK_PAGE_T2. +WWV_FLOW_LOG. +WWV_FLOW_LOG.EVALUATE_CURRENT_LOG_NUMBER +WWV_FLOW_LOG.INITIALIZE_LOG +WWV_FLOW_LOG.LOG +WWV_FLOW_LOGIN. +WWV_FLOW_LOGIN.ADMINISTRATOR +WWV_FLOW_LOGIN.BUILDER +WWV_FLOW_LOGIN.GET_WORKSPACE_NAME +WWV_FLOW_LOV_USED_ON_PAGES. +WWV_FLOW_LOV_VALUES_T1. +WWV_FLOW_MAIL. +WWV_FLOW_MAIL.ADD_ATTACHMENT +WWV_FLOW_MAIL.BACKGROUND +WWV_FLOW_MAIL.CONVERT_TXT_TO_HTML +WWV_FLOW_MAIL.CONVERT_URLS_TO_LINKS +WWV_FLOW_MAIL.GET_IMAGES_URL +WWV_FLOW_MAIL.GET_INSTANCE_URL +WWV_FLOW_MAIL.PUSH_QUEUE +WWV_FLOW_MAIL.PUSH_QUEUE_BACKGROUND +WWV_FLOW_MAIL.PUSH_QUEUE_IMMEDIATE +WWV_FLOW_MAIL.SEND +WWV_FLOW_MAIL_API. +WWV_FLOW_MAIL_API.ADD_ATTACHMENT +WWV_FLOW_MAIL_API.GET_IMAGES_URL +WWV_FLOW_MAIL_API.GET_INSTANCE_URL +WWV_FLOW_MAIL_API.PUSH_QUEUE +WWV_FLOW_MAIL_API.SEND +WWV_FLOW_MAIL_ATTACHMENTS_T1. +WWV_FLOW_MAIL_LOG_T1. +WWV_FLOW_MAIL_QUEUE_T1. +WWV_FLOW_MAINT. +WWV_FLOW_MAINT.ARCHIVE_ACTIVITY_SUMMARY +WWV_FLOW_MAINT.DAILY_MAINTENANCE +WWV_FLOW_MENUS_T1. +WWV_FLOW_MENU_OPTIONS_T1. +WWV_FLOW_MENU_TEMPLATES_T1. +WWV_FLOW_MESSAGES_T1. +WWV_FLOW_META_DATA. +WWV_FLOW_META_DATA.DO_STATIC_SUBSTITUTIONS +WWV_FLOW_META_DATA.FETCH_ACCEPT_BRANCH_INFO +WWV_FLOW_META_DATA.FETCH_ACCEPT_PROCESS_INFO +WWV_FLOW_META_DATA.FETCH_BUTTON_INFO +WWV_FLOW_META_DATA.FETCH_COMPUTATIONS +WWV_FLOW_META_DATA.FETCH_FLOW_INFO +WWV_FLOW_META_DATA.FETCH_G_BUILD_OPTIONS_EXCLUDED +WWV_FLOW_META_DATA.FETCH_G_BUILD_OPTIONS_INCLUDED +WWV_FLOW_META_DATA.FETCH_ICON_BAR_INFO +WWV_FLOW_META_DATA.FETCH_ITEM_INFO +WWV_FLOW_META_DATA.FETCH_ITEM_TYPE_SETTINGS +WWV_FLOW_META_DATA.FETCH_PAGE_PLUGS +WWV_FLOW_META_DATA.FETCH_PROTECTED_PAGE_INFO +WWV_FLOW_META_DATA.FETCH_PUBLIC_PAGE_INFO +WWV_FLOW_META_DATA.FETCH_SHOW_BRANCH_INFO +WWV_FLOW_META_DATA.FETCH_SHOW_PROCESS_INFO +WWV_FLOW_META_DATA.FETCH_STEP_INFO +WWV_FLOW_META_DATA.FETCH_TAB_INFO +WWV_FLOW_META_DATA.FETCH_TOPLEVEL_TAB_INFO +WWV_FLOW_META_DATA.FIND_ITEM_BY_ID +WWV_FLOW_META_DATA.FIND_ITEM_BY_NAME +WWV_FLOW_META_DATA.FIND_STATIC_SUBSTITUTION +WWV_FLOW_META_UTIL. +WWV_FLOW_META_UTIL.FORMAT_LOV_QUERY +WWV_FLOW_META_UTIL.IS_OK_TO_DISPLAY +WWV_FLOW_META_UTIL.IS_VALID_BUILD_OPTION +WWV_FLOW_MIGRATE_METADATA. +WWV_FLOW_MIGRATE_METADATA.CLEANUP_MISSPELLED_TYPE +WWV_FLOW_MODELS_T1. +WWV_FLOW_MODEL_API. +WWV_FLOW_MODEL_API.ADD_FORM_REPORT_W_ANALYSIS +WWV_FLOW_MODEL_API.ADD_PAGE +WWV_FLOW_MODEL_API.COPY_MODEL_PAGES +WWV_FLOW_MODEL_API.GET_MODEL_ID +WWV_FLOW_MODEL_API.SET_REPORT_TO_REPORT_LINK +WWV_FLOW_MODEL_PAGES_T1. +WWV_FLOW_MODEL_PAGE_COLS_T1. +WWV_FLOW_MODEL_PAGE_REGIONS_T1. +WWV_FLOW_NATIVE_ITEM. +WWV_FLOW_NATIVE_ITEM.ADD_CKEDITOR_JAVASCRIPT +WWV_FLOW_NATIVE_ITEM.AJAX +WWV_FLOW_NATIVE_ITEM.RENDER +WWV_FLOW_NATIVE_ITEM.RENDER_POPUP_LOV_DIALOG +WWV_FLOW_NATIVE_ITEM.VALIDATE +WWV_FLOW_NEWS_T1. +WWV_FLOW_ONLINE_HELP_JA_T1. +WWV_FLOW_ONLINE_HELP_T1. +WWV_FLOW_PAGE. +WWV_FLOW_PAGE.GET_PAGE_ID +WWV_FLOW_PAGE.GET_PAGE_TEMPLATE_ID +WWV_FLOW_PAGE.GET_THEME_ID +WWV_FLOW_PAGE.GET_UI_TYPE +WWV_FLOW_PAGE.IS_DESKTOP_UI +WWV_FLOW_PAGE.IS_JQM_SMARTPHONE_UI +WWV_FLOW_PAGE.IS_JQM_TABLET_UI +WWV_FLOW_PAGE.IS_JQM_UI +WWV_FLOW_PAGE.IS_READ_ONLY +WWV_FLOW_PAGE.PURGE_CACHE +WWV_FLOW_PAGE.RENDER +WWV_FLOW_PAGE.RENDER_ERROR_PAGE +WWV_FLOW_PAGE.RESET +WWV_FLOW_PAGE_API. +WWV_FLOW_PAGE_API.GET_UI_TYPE +WWV_FLOW_PAGE_API.IS_DESKTOP_UI +WWV_FLOW_PAGE_API.IS_JQM_SMARTPHONE_UI +WWV_FLOW_PAGE_API.IS_JQM_TABLET_UI +WWV_FLOW_PAGE_API.IS_READ_ONLY +WWV_FLOW_PAGE_API.PURGE_CACHE +WWV_FLOW_PAGE_CACHE_API. +WWV_FLOW_PAGE_CACHE_API.CACHE_CHART_REGION +WWV_FLOW_PAGE_CACHE_API.CACHE_PAGE +WWV_FLOW_PAGE_CACHE_API.CHART_REGION_EXISTS +WWV_FLOW_PAGE_CACHE_API.COUNT_STALE_PAGES +WWV_FLOW_PAGE_CACHE_API.COUNT_STALE_REGIONS +WWV_FLOW_PAGE_CACHE_API.DISPLAY_CHART_REGION +WWV_FLOW_PAGE_CACHE_API.DISPLAY_PAGE +WWV_FLOW_PAGE_CACHE_API.DISPLAY_REGION +WWV_FLOW_PAGE_CACHE_API.GET_DATE_CACHED +WWV_FLOW_PAGE_CACHE_API.LOB_REPLACE +WWV_FLOW_PAGE_CACHE_API.PURGE_ALL +WWV_FLOW_PAGE_CACHE_API.PURGE_BY_APPLICATION +WWV_FLOW_PAGE_CACHE_API.PURGE_BY_PAGE +WWV_FLOW_PAGE_CACHE_API.PURGE_CHART_CACHE_BY_APP +WWV_FLOW_PAGE_CACHE_API.PURGE_CHART_CACHE_BY_REGION +WWV_FLOW_PAGE_CACHE_API.PURGE_EXPIRED_REGIONS +WWV_FLOW_PAGE_CACHE_API.PURGE_REGIONS_BY_APP +WWV_FLOW_PAGE_CACHE_API.PURGE_REGIONS_BY_ID +WWV_FLOW_PAGE_CACHE_API.PURGE_REGIONS_BY_NAME +WWV_FLOW_PAGE_CACHE_API.PURGE_REGIONS_BY_PAGE +WWV_FLOW_PAGE_CACHE_API.PURGE_STALE +WWV_FLOW_PAGE_CACHE_API.PURGE_STALE_REGIONS +WWV_FLOW_PAGE_CACHE_API.VERIFY_CACHE_CONDITION +WWV_FLOW_PAGE_CACHE_T1. +WWV_FLOW_PAGE_CODE_CACHE_T1. +WWV_FLOW_PAGE_DA_ACTIONS_T1. +WWV_FLOW_PAGE_DA_EVENTS_T1. +WWV_FLOW_PAGE_DEV. +WWV_FLOW_PAGE_DEV.GET_TEMPLATE_ID +WWV_FLOW_PAGE_DEV.GET_THEME_ID +WWV_FLOW_PAGE_DEV.GET_UI_TYPE +WWV_FLOW_PAGE_DEV.GET_USER_INTERFACE_ID +WWV_FLOW_PAGE_DEV.IS_DESKTOP_UI +WWV_FLOW_PAGE_DEV.IS_GLOBAL_PAGE +WWV_FLOW_PAGE_DEV.IS_JQM_SMARTPHONE_UI +WWV_FLOW_PAGE_DEV.IS_JQM_TABLET_UI +WWV_FLOW_PAGE_DEV.IS_JQM_UI +WWV_FLOW_PAGE_GROUPS_T1. +WWV_FLOW_PAGE_MAP. +WWV_FLOW_PAGE_MAP.PAGE_LIST +WWV_FLOW_PAGE_MAP.PAGE_TYPE +WWV_FLOW_PAGE_MAP.SET_CURRENT_APPLICATION +WWV_FLOW_PAGE_MAP.SET_PAGE +WWV_FLOW_PAGE_PLUGS_T1. +WWV_FLOW_PAGE_PLUG_TEMPL_T1. +WWV_FLOW_PAGE_TMPL_DP_AUDIT. +WWV_FLOW_PAGE_TMPL_DP_T1. +WWV_FLOW_PATCHES_T1. +WWV_FLOW_PG_GENERIC_ATTR_T1. +WWV_FLOW_PKG_APP_API. +WWV_FLOW_PKG_APP_API.EXPORT +WWV_FLOW_PKG_APP_API.EXPORT_SCRIPT +WWV_FLOW_PKG_APP_BIU. +WWV_FLOW_PKG_APP_CATS_BIU. +WWV_FLOW_PKG_APP_IMAGES_BIU. +WWV_FLOW_PKG_APP_INSTALL. +WWV_FLOW_PKG_APP_INSTALL.APP_LOCKING +WWV_FLOW_PKG_APP_INSTALL.CREATE_USER +WWV_FLOW_PKG_APP_INSTALL.DEINSTALL_DB_APP +WWV_FLOW_PKG_APP_INSTALL.DEINSTALL_WEBSHEET +WWV_FLOW_PKG_APP_INSTALL.INSTALL +WWV_FLOW_PKG_APP_INSTALL.INSTALL_DB_APP +WWV_FLOW_PKG_APP_INSTALL.INSTALL_WEBSHEET +WWV_FLOW_PKG_APP_INSTALL.UNLOCK_DB_APP +WWV_FLOW_PKG_APP_INSTALL.UPDATE_DB_APP +WWV_FLOW_PKG_APP_INST_LOG_T1. +WWV_FLOW_PKG_APP_LOG. +WWV_FLOW_PKG_APP_LOG.END_LOG +WWV_FLOW_PKG_APP_LOG.START_LOG +WWV_FLOW_PKG_APP_MAP_BIU. +WWV_FLOW_PKG_APP_UI. +WWV_FLOW_PKG_APP_UI.GET_DATA +WWV_FLOW_PKG_APP_UI.P50_APPLICATIONS +WWV_FLOW_PKG_APP_UI.P81_APP_DETAIL +WWV_FLOW_PLATFORM. +WWV_FLOW_PLATFORM.GET_PREFERENCE +WWV_FLOW_PLATFORM.SET_PREFERENCE +WWV_FLOW_PLATFORM_PREFS_T1. +WWV_FLOW_PLSQL_EDITOR. +WWV_FLOW_PLSQL_EDITOR.COMPILE +WWV_FLOW_PLSQL_EDITOR.GET_LINES +WWV_FLOW_PLSQL_JOB. +WWV_FLOW_PLSQL_JOB.JOBS_ARE_ENABLED +WWV_FLOW_PLSQL_JOB.PURGE_PROCESS +WWV_FLOW_PLSQL_JOB.SUBMIT_PROCESS +WWV_FLOW_PLSQL_JOB.TIME_ELAPSED +WWV_FLOW_PLSQL_JOB.UPDATE_JOB_STATUS +WWV_FLOW_PLSQL_LEXER. +WWV_FLOW_PLSQL_LEXER.GET +WWV_FLOW_PLSQL_LEXER.INIT +WWV_FLOW_PLSQL_LEXER.IS_IDENTIFIER +WWV_FLOW_PLUGIN. +WWV_FLOW_PLUGIN.AJAX_CALLBACK +WWV_FLOW_PLUGIN.DECODE_AJAX_REQUEST +WWV_FLOW_PLUGIN.EXECUTE_AUTHENTICATION +WWV_FLOW_PLUGIN.EXECUTE_AUTHORIZATION +WWV_FLOW_PLUGIN.EXECUTE_INVALID_SESSION +WWV_FLOW_PLUGIN.EXECUTE_POST_LOGOUT +WWV_FLOW_PLUGIN.EXECUTE_PROCESS +WWV_FLOW_PLUGIN.EXECUTE_SESSION_SENTRY +WWV_FLOW_PLUGIN.GET_AJAX_IDENTIFIER +WWV_FLOW_PLUGIN.GET_INPUT_NAME_FOR_PAGE_ITEM +WWV_FLOW_PLUGIN.RENDER_DYNAMIC_ACTION +WWV_FLOW_PLUGIN.RENDER_PAGE_ITEM +WWV_FLOW_PLUGIN.RENDER_REGION +WWV_FLOW_PLUGIN.VALIDATE_PAGE_ITEM +WWV_FLOW_PLUGINS_T1. +WWV_FLOW_PLUGIN_API. +WWV_FLOW_PLUGIN_API.GET_AJAX_IDENTIFIER +WWV_FLOW_PLUGIN_API.GET_INPUT_NAME_FOR_PAGE_ITEM +WWV_FLOW_PLUGIN_ATTRIBUTES_T1. +WWV_FLOW_PLUGIN_ATTR_VALUES_T1. +WWV_FLOW_PLUGIN_DEV. +WWV_FLOW_PLUGIN_DEV.ADD_ONLOAD_CODE +WWV_FLOW_PLUGIN_DEV.COPY_PLUGIN +WWV_FLOW_PLUGIN_DEV.COPY_PLUGIN_DETAILS +WWV_FLOW_PLUGIN_DEV.DELETE_PLUGIN_SETTINGS +WWV_FLOW_PLUGIN_DEV.GET_MAX_CUSTOM_ATTRIBUTES +WWV_FLOW_PLUGIN_DEV.GET_NUMBER_FIELD_FOR_DISPLAY +WWV_FLOW_PLUGIN_DEV.GET_SQL_EXAMPLES +WWV_FLOW_PLUGIN_DEV.GET_STANDARD_ATTRIBUTES +WWV_FLOW_PLUGIN_DEV.HAS_AFFECTED_ELEMENT_TYPE +WWV_FLOW_PLUGIN_DEV.HAS_APPLICATION_ATTRIBUTES +WWV_FLOW_PLUGIN_DEV.HAS_STANDARD_ATTRIBUTE +WWV_FLOW_PLUGIN_DEV.IS_ATTRIBUTE_TRANSLATABLE +WWV_FLOW_PLUGIN_DEV.IS_COLUMN_TRANSLATABLE +WWV_FLOW_PLUGIN_DEV.IS_IN_USE +WWV_FLOW_PLUGIN_DEV.NUMBER_FIELD_FOR_STORAGE +WWV_FLOW_PLUGIN_DEV.PUSH_PLUGIN +WWV_FLOW_PLUGIN_DEV.REFRESH_PLUGIN +WWV_FLOW_PLUGIN_DEV.SET_DEFAULTS +WWV_FLOW_PLUGIN_DEV.SUBSCRIBE_PLUGIN +WWV_FLOW_PLUGIN_DEV.SYNCHRONIZE_ATTRIBUTE_COLUMNS +WWV_FLOW_PLUGIN_DEV.VALIDATE_AFFECTED_ELEMENTS +WWV_FLOW_PLUGIN_DEV.VALIDATE_ATTRIBUTE_ITEMS +WWV_FLOW_PLUGIN_DEV.VALIDATE_LOV +WWV_FLOW_PLUGIN_DEV.VALIDATE_REGION_SOURCE +WWV_FLOW_PLUGIN_DEV.VALIDATE_TRIGGERING +WWV_FLOW_PLUGIN_DEV.WRITE_PLUGIN_META_DATA_ARRAY +WWV_FLOW_PLUGIN_EVENTS_T1. +WWV_FLOW_PLUGIN_FILES_T1. +WWV_FLOW_PLUGIN_SETTINGS_T1. +WWV_FLOW_PLUGIN_UTIL. +WWV_FLOW_PLUGIN_UTIL.CLEANUP_PAGE_ITEM_NAMES +WWV_FLOW_PLUGIN_UTIL.CLEAR_COMPONENT_VALUES +WWV_FLOW_PLUGIN_UTIL.DEBUG_AUTHENTICATION +WWV_FLOW_PLUGIN_UTIL.DEBUG_AUTHORIZATION +WWV_FLOW_PLUGIN_UTIL.DEBUG_DYNAMIC_ACTION +WWV_FLOW_PLUGIN_UTIL.DEBUG_PAGE_ITEM +WWV_FLOW_PLUGIN_UTIL.DEBUG_PROCESS +WWV_FLOW_PLUGIN_UTIL.DEBUG_REGION +WWV_FLOW_PLUGIN_UTIL.ESCAPE +WWV_FLOW_PLUGIN_UTIL.EXECUTE_PLSQL_CODE +WWV_FLOW_PLUGIN_UTIL.FREE_SQL_HANDLER +WWV_FLOW_PLUGIN_UTIL.GET_COLUMN_NO +WWV_FLOW_PLUGIN_UTIL.GET_DATA +WWV_FLOW_PLUGIN_UTIL.GET_DATA2 +WWV_FLOW_PLUGIN_UTIL.GET_DATA_TYPE +WWV_FLOW_PLUGIN_UTIL.GET_DISPLAY_DATA +WWV_FLOW_PLUGIN_UTIL.GET_ELEMENT_ATTRIBUTES +WWV_FLOW_PLUGIN_UTIL.GET_PLSQL_EXPRESSION_RESULT +WWV_FLOW_PLUGIN_UTIL.GET_PLSQL_EXPR_RESULT_BOOLEAN +WWV_FLOW_PLUGIN_UTIL.GET_PLSQL_FUNCTION_RESULT +WWV_FLOW_PLUGIN_UTIL.GET_PLSQL_FUNC_RESULT_BOOLEAN +WWV_FLOW_PLUGIN_UTIL.GET_PLSQL_FUNC_RESULT_CLOB +WWV_FLOW_PLUGIN_UTIL.GET_POSITION_IN_LIST +WWV_FLOW_PLUGIN_UTIL.GET_SEARCH_STRING +WWV_FLOW_PLUGIN_UTIL.GET_SQL_HANDLER +WWV_FLOW_PLUGIN_UTIL.GET_VALUE_AS_VARCHAR2 +WWV_FLOW_PLUGIN_UTIL.IS_COMPONENT_USED +WWV_FLOW_PLUGIN_UTIL.IS_EQUAL +WWV_FLOW_PLUGIN_UTIL.PAGE_ITEM_NAMES_TO_JQUERY +WWV_FLOW_PLUGIN_UTIL.PREPARE_QUERY +WWV_FLOW_PLUGIN_UTIL.PRINT_DISPLAY_ONLY +WWV_FLOW_PLUGIN_UTIL.PRINT_ESCAPED_VALUE +WWV_FLOW_PLUGIN_UTIL.PRINT_HIDDEN +WWV_FLOW_PLUGIN_UTIL.PRINT_HIDDEN_IF_READONLY +WWV_FLOW_PLUGIN_UTIL.PRINT_HIDDEN_PROTECTED +WWV_FLOW_PLUGIN_UTIL.PRINT_JSON_HTTP_HEADER +WWV_FLOW_PLUGIN_UTIL.PRINT_LOV_AS_JSON +WWV_FLOW_PLUGIN_UTIL.PRINT_OPTION +WWV_FLOW_PLUGIN_UTIL.PRINT_PAGE_ITEM_LOV_AS_JSON +WWV_FLOW_PLUGIN_UTIL.PRINT_PROTECTED +WWV_FLOW_PLUGIN_UTIL.REPLACE_SUBSTITUTIONS +WWV_FLOW_PLUGIN_UTIL.SET_COMPONENT_VALUES +WWV_FLOW_PLUG_TMPL_DP_AUDIT. +WWV_FLOW_PLUG_TMPL_DP_T1. +WWV_FLOW_POPUP_LOV. +WWV_FLOW_POPUP_LOV.SHOW +WWV_FLOW_POPUP_LOV_TEMPLATE_T1. +WWV_FLOW_PPR_UTIL. +WWV_FLOW_PPR_UTIL.RUN_PROCESS +WWV_FLOW_PREFERENCES. +WWV_FLOW_PREFERENCES.GET_PREFERENCE +WWV_FLOW_PREFERENCES.REMOVE_FSP_SORT +WWV_FLOW_PREFERENCES.REMOVE_PREFERENCE +WWV_FLOW_PREFERENCES.REMOVE_PREFERENCES +WWV_FLOW_PREFERENCES.RESET_SORT_PREFERENCE +WWV_FLOW_PREFERENCES.SET_PREFERENCE +WWV_FLOW_PREFERENCES.SET_PREFERENCES +WWV_FLOW_PREFERENCES_T1. +WWV_FLOW_PRINT_UTIL. +WWV_FLOW_PRINT_UTIL.CONVERT +WWV_FLOW_PRINT_UTIL.GET_HEADER +WWV_FLOW_PROCESS. +WWV_FLOW_PROCESS.ADD_ERROR_MESSAGE +WWV_FLOW_PROCESS.PERFORM +WWV_FLOW_PROCESSING_T1. +WWV_FLOW_PROCESS_NATIVE. +WWV_FLOW_PROCESS_NATIVE.EXECUTE_PROCESS +WWV_FLOW_PROCESS_UTILITY. +WWV_FLOW_PROCESS_UTILITY.DML_ROW_INFO +WWV_FLOW_PROCESS_UTILITY.DML_ROW_SQL +WWV_FLOW_PROCESS_UTILITY.GET_NEXT_OR_PREV_PK_INFO +WWV_FLOW_PROCESS_UTILITY.GET_NEXT_OR_PREV_PK_SQL +WWV_FLOW_PROCESS_UTILITY.MULTI_ROW_UPDATE_INFO +WWV_FLOW_PROCESS_UTILITY.MULTI_ROW_UPDATE_SQL +WWV_FLOW_PROCESS_UTILITY.SET_PREF_TO_ITEM_INFO +WWV_FLOW_PROCESS_UTILITY.SET_PREF_TO_ITEM_SQL +WWV_FLOW_PROVISION. +WWV_FLOW_PROVISION.CHANGE_PROVISIONED_STORAGE +WWV_FLOW_PROVISION.CREATE_USER +WWV_FLOW_PROVISION.DROP_USER +WWV_FLOW_PROVISION.GET_PROVISIONED_SPACE +WWV_FLOW_PROVISION.GET_RANDOM_PASSWORD +WWV_FLOW_PROVISION.GET_SPACE_CONSUMPTION +WWV_FLOW_PROVISION.GRANT_INITIAL_PRIVS +WWV_FLOW_PROVISION.IS_RESERVED +WWV_FLOW_PROVISION.PROVISION_COMPANY +WWV_FLOW_PROVISION.REMOVE_PROVISIONED_COMPANY +WWV_FLOW_PROVISION.SCHEMA_NAME_VALID +WWV_FLOW_PROVISION.SETUP_COMPANY_TABLESPACE +WWV_FLOW_PROVISION.SET_USER_TABLESPACE +WWV_FLOW_PROVISIONING. +WWV_FLOW_PROVISIONING.ACCEPT_REQUEST +WWV_FLOW_PROVISIONING.ADD_SCHEMA +WWV_FLOW_PROVISIONING.ADD_SCHEMA_BY_REQUEST +WWV_FLOW_PROVISIONING.AUTO_PROVISION_COMPANY +WWV_FLOW_PROVISIONING.CREATE_COOKIE_BASED_USER +WWV_FLOW_PROVISIONING.CREATE_FLOW_SUPER_USER +WWV_FLOW_PROVISIONING.DELETE_ACCEPTED_REQUEST +WWV_FLOW_PROVISIONING.DELETE_MODIFICATION_REQUEST +WWV_FLOW_PROVISIONING.DELETE_PROVISION_REQUEST +WWV_FLOW_PROVISIONING.DENY_REQUEST +WWV_FLOW_PROVISIONING.GET_SCHEMAS_BY_SGID +WWV_FLOW_PROVISIONING.GET_TABLESPACES_BY_SGID +WWV_FLOW_PROVISIONING.INSTALL_DEMO_RESTFUL_SERVICE +WWV_FLOW_PROVISIONING.INSTALL_DEMO_TABLES +WWV_FLOW_PROVISIONING.MAKE_MODIFICATION_REQUEST +WWV_FLOW_PROVISIONING.MAKE_REQUEST +WWV_FLOW_PROVISIONING.PRE_PROCESS_REQUEST +WWV_FLOW_PROVISIONING.PROVISION_ACCEPT_REQUEST +WWV_FLOW_PROVISIONING.PROVISION_REQUEST +WWV_FLOW_PROVISIONING.PROVISION_STORAGE_BY_REQUEST +WWV_FLOW_PROVISIONING.REJECT_MODIFICATION_REQUEST +WWV_FLOW_PROVISIONING.REMOVE_DEMO_TABLES +WWV_FLOW_PROVISIONING.REMOVE_SCHEMA +WWV_FLOW_PROVISIONING.REMOVE_SCHEMA_BY_REQUEST +WWV_FLOW_PROVISIONING.RESERVED_SCHEMA +WWV_FLOW_PROVISIONING.RESERVED_SCHEMA_I +WWV_FLOW_PROVISIONING.RESET_PASSWORD +WWV_FLOW_PROVISIONING.RESTRICTED_SCHEMA +WWV_FLOW_PROVISIONING.RESTRICTED_SCHEMA_I +WWV_FLOW_PROVISIONING.SET_COMMIT +WWV_FLOW_PROVISIONING.SITE_ADMIN_IS_RESTRICTED +WWV_FLOW_PROVISIONING.SITE_ADMIN_IS_RESTRICTED_I +WWV_FLOW_PROVISIONING.TERMINATE_SERVICE +WWV_FLOW_PROVISIONING.TERMINATE_SERVICE_BY_SGID +WWV_FLOW_PROVISIONING.TOTAL_CHANGE_REQUESTS +WWV_FLOW_PROVISIONING.TOTAL_OPEN_CHANGE_REQUESTS +WWV_FLOW_PROVISIONING.TOTAL_OPEN_SERVICE_REQUESTS +WWV_FLOW_PROVISIONING.TOTAL_SERVICE_REQUESTS +WWV_FLOW_PROVISIONING.UPDATE_USER_DEFAULT_SCHEMA +WWV_FLOW_PROVISIONING.VALIDATE_SCHEMA_NAME +WWV_FLOW_PROV_AGREE_TRIG. +WWV_FLOW_PROV_SIGNUP_Q_TRIG. +WWV_FLOW_QB_SAVED_COND_T1. +WWV_FLOW_QB_SAVED_JOIN_T1. +WWV_FLOW_QB_SAVED_QRY_T1. +WWV_FLOW_QB_SAVED_TABS_T1. +WWV_FLOW_QUERY_API. +WWV_FLOW_QUERY_API.ADD_COLUMNS +WWV_FLOW_QUERY_API.CREATE_COLLECTION +WWV_FLOW_QUERY_API.CREATE_CONDITIONS +WWV_FLOW_QUERY_API.CREATE_STRUCTURED_QUERY +WWV_FLOW_QUERY_API.DELETE_STRUCTURED_QUERY +WWV_FLOW_QUERY_API.GET_ALIAS +WWV_FLOW_QUERY_API.GET_CONDITIONS +WWV_FLOW_QUERY_API.GET_STRUCTURED_QUERY +WWV_FLOW_QUERY_API.PARSE_CONDITIONS +WWV_FLOW_QUERY_API.REORDER_COLUMNS +WWV_FLOW_QUERY_API.UPDATE_JOINS +WWV_FLOW_QUERY_API.UPDATE_QUERY_SQL +WWV_FLOW_QUERY_API.UPDATE_STRUCTURED_QUERY +WWV_FLOW_QUERY_BUILDER. +WWV_FLOW_QUERY_BUILDER.CHECK_PRIV +WWV_FLOW_QUERY_BUILDER.LOADQUERY +WWV_FLOW_QUERY_BUILDER.RENDERCLONEROW +WWV_FLOW_QUERY_BUILDER.RENDERTABLEV2 +WWV_FLOW_QUERY_COLUMN_T1. +WWV_FLOW_QUERY_CONDITION_T1. +WWV_FLOW_QUERY_DEFINITION_T1. +WWV_FLOW_QUERY_OBJECT_T1. +WWV_FLOW_RANDOM. +WWV_FLOW_RANDOM.GET_RAND +WWV_FLOW_RANDOM.GET_RAND_MAX +WWV_FLOW_RANDOM.RAND +WWV_FLOW_RANDOM.RAND_MAX +WWV_FLOW_RANDOM.SRAND +WWV_FLOW_REGION. +WWV_FLOW_REGION.IS_READ_ONLY +WWV_FLOW_REGION.PURGE_CACHE +WWV_FLOW_REGION.RESET +WWV_FLOW_REGION_API. +WWV_FLOW_REGION_API.IS_READ_ONLY +WWV_FLOW_REGION_API.PURGE_CACHE +WWV_FLOW_REGION_LAYOUT. +WWV_FLOW_REGION_LAYOUT.GET_AUTHORIZATION_SCHEME_DESC +WWV_FLOW_REGION_LAYOUT.GET_BUILD_OPTION_DESC +WWV_FLOW_REGION_LAYOUT.GET_COMPUTATION_TYPE_DESC +WWV_FLOW_REGION_LAYOUT.GET_CONDITION_TYPE_DESC +WWV_FLOW_REGION_LAYOUT.GET_DYN_ACTION_COND_TYPE_DESC +WWV_FLOW_REGION_LAYOUT.GET_IR_COLUMN_TYPE_DESC +WWV_FLOW_REGION_LAYOUT.GET_PAGE_ITEM_TYPE_DESC +WWV_FLOW_REGION_LAYOUT.GET_PROCESS_TYPE_DESC +WWV_FLOW_REGION_LAYOUT.GET_TABFORM_COLUMN_TYPE_DESC +WWV_FLOW_REGION_LAYOUT.GET_VALIDATION_TYPE_DESC +WWV_FLOW_REGION_LAYOUT.PAGE_PROCESSING_ICONS +WWV_FLOW_REGION_LAYOUT.PAGE_RENDERING_ICONS +WWV_FLOW_REGION_LAYOUT.PAGE_TEMP_SUBSTITUTION +WWV_FLOW_REGION_LAYOUT.REGION_TEMP_SUBSTITUTION +WWV_FLOW_REGION_LAYOUT.SET_LOCK_STATUS +WWV_FLOW_REGION_LAYOUT.SET_MOST_RECENTLY_EDITED +WWV_FLOW_REGION_LAYOUT.SHARED_COMPONENT_ICONS +WWV_FLOW_REGION_LAYOUT.SHOW_APEX_HOME_PG_ELINK +WWV_FLOW_REGION_LAYOUT.SHOW_GLOBAL_PAGE_APP_COMP +WWV_FLOW_REGION_LAYOUT.SHOW_GLOBAL_PAGE_APP_ITEMS +WWV_FLOW_REGION_LAYOUT.SHOW_GLOBAL_PAGE_APP_PROC +WWV_FLOW_REGION_LAYOUT.SHOW_ON_ACCEPT_FLOW +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_COMPUTATIONS +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_DYNACT +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_FLOW +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_PAGE +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_PROCESSES +WWV_FLOW_REGION_LAYOUT.SHOW_ON_LOAD_REGIONS +WWV_FLOW_REGION_LAYOUT.SHOW_ON_SUBMIT_BRANCH +WWV_FLOW_REGION_LAYOUT.SHOW_ON_SUBMIT_COMP +WWV_FLOW_REGION_LAYOUT.SHOW_ON_SUBMIT_PROC +WWV_FLOW_REGION_LAYOUT.SHOW_ON_SUBMIT_VAL +WWV_FLOW_REGION_LAYOUT.SHOW_PAGE_BUTTONS +WWV_FLOW_REGION_LAYOUT.SHOW_PAGE_ITEMS +WWV_FLOW_REGION_LAYOUT.SHOW_PAGE_TEMPLATE +WWV_FLOW_REGION_LAYOUT.SHOW_REGION_TEMPLATE +WWV_FLOW_REGION_LAYOUT.SHOW_RELATED_PAGES_REPORT +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_BC +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_LISTS +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_LOV +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_NAVBAR +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_SECURITY +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_STANDARD_TABS +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_TABS +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_TEMPLATES +WWV_FLOW_REGION_LAYOUT.SHOW_SHARED_THEME +WWV_FLOW_REGION_LAYOUT.SHOW_TITLE +WWV_FLOW_REGION_NATIVE. +WWV_FLOW_REGION_NATIVE.AJAX_REGION +WWV_FLOW_REGION_NATIVE.RENDER_REGION +WWV_FLOW_REGION_NATIVE.VALIDATE_BUILDER_REGION +WWV_FLOW_REGION_TREE. +WWV_FLOW_REGION_TREE.SHOW_TREE +WWV_FLOW_REGREPORT_FILTER_T1. +WWV_FLOW_REG_REPORT_COLUMN_T1. +WWV_FLOW_REG_UPD_RPT_COLS_T1. +WWV_FLOW_RENDER_QUERY. +WWV_FLOW_RENDER_QUERY.GET_REPORT +WWV_FLOW_RENDER_QUERY.GET_REPORT_QUERY +WWV_FLOW_RENDER_QUERY.PRINT +WWV_FLOW_RENDER_QUERY.PRINT_INTERACTIVE_REPORT +WWV_FLOW_RENDER_QUERY.PRINT_REPORT_QUERY +WWV_FLOW_RENDER_QUERY.PRINT_WITH_BINDS +WWV_FLOW_RENDER_SHORTCUT. +WWV_FLOW_RENDER_SHORTCUT.DO_SHORTCUTS_EXIST +WWV_FLOW_RENDER_SHORTCUT.EXPAND_SHORTCUTS +WWV_FLOW_REPORT_LAYOUTS_T1. +WWV_FLOW_REQUIRED_ROLES_T1. +WWV_FLOW_REST. +WWV_FLOW_REST.GETREPORT +WWV_FLOW_REST.GETSERVICEDESCRIPTION +WWV_FLOW_RESTRICTED_SCHEMA_T1. +WWV_FLOW_ROW_TEMPLATES_T1. +WWV_FLOW_RPT_STD_MSG. +WWV_FLOW_RPT_STD_MSG.INIT +WWV_FLOW_RSCHEMA_EXCEPTION_T1. +WWV_FLOW_SAMPLE_APP. +WWV_FLOW_SAMPLE_APP.DEINSTALL_DB_APP +WWV_FLOW_SAMPLE_APP.DEINSTALL_WEBSHEET +WWV_FLOW_SAMPLE_APP.INSTALL_DB_APP +WWV_FLOW_SAMPLE_APP.INSTALL_WEBSHEET +WWV_FLOW_SC_TRANSACTIONS. +WWV_FLOW_SC_TRANSACTIONS.ADD_TRANS +WWV_FLOW_SC_TRANSACTIONS.SC_CREATE_JOB +WWV_FLOW_SC_TRANSACTIONS.SC_JOB +WWV_FLOW_SC_TRANSACTIONS.SET_ACTION +WWV_FLOW_SC_TRANSACTIONS.SET_CLIENT +WWV_FLOW_SC_TRANSACTIONS.SET_IDENTIFIER +WWV_FLOW_SC_TRANSACTIONS.SET_MOD +WWV_FLOW_SC_TRANS_T1. +WWV_FLOW_SECURITY. +WWV_FLOW_SECURITY.APEX_BUILDER_AUTHENTICATION +WWV_FLOW_SECURITY.AUTHENTICATE +WWV_FLOW_SECURITY.AUTHENTICATED_SESSION +WWV_FLOW_SECURITY.AUTHORIZED_URL +WWV_FLOW_SECURITY.CHECK_REQUEST_CAN_BE_PROCESSED +WWV_FLOW_SECURITY.CLEAR_PAGE_CHECKSUM +WWV_FLOW_SECURITY.CONFIGURE_TRACE_AND_DEBUG +WWV_FLOW_SECURITY.COOKIE_USER +WWV_FLOW_SECURITY.COOKIE_USER_CAN_DEV_CURR_FLOW +WWV_FLOW_SECURITY.CURRENT_COMPANY_CAN_BUILD +WWV_FLOW_SECURITY.CURRENT_COMPANY_CAN_PARSE +WWV_FLOW_SECURITY.DB_SESSION_INIT +WWV_FLOW_SECURITY.DECRYPT_SESSION_VALUE +WWV_FLOW_SECURITY.DISABLE_ADMIN_LOGIN +WWV_FLOW_SECURITY.DISABLE_WORKSPACE_LOGIN +WWV_FLOW_SECURITY.DOES_HOST_PREFIX_MATCH +WWV_FLOW_SECURITY.ENCRYPT_SESSION_VALUE +WWV_FLOW_SECURITY.FINAL_EXCEPTION_HANDLER +WWV_FLOW_SECURITY.FIND_COMPANY_NAME +WWV_FLOW_SECURITY.FIND_FIRST_SCHEMA +WWV_FLOW_SECURITY.FIND_SECURITY_GROUP_ID +WWV_FLOW_SECURITY.FLOW_OWNER +WWV_FLOW_SECURITY.GET_BUILDER_SESSION_ID +WWV_FLOW_SECURITY.GET_CLIENT_IP_ADDRESS +WWV_FLOW_SECURITY.GET_DEFAULT_COOKIE_NAME +WWV_FLOW_SECURITY.GET_EXPIRED_USER_NAME +WWV_FLOW_SECURITY.GET_EXPIRED_USER_SGID +WWV_FLOW_SECURITY.GET_FLOW_ID +WWV_FLOW_SECURITY.GET_PAGE_CHECKSUM +WWV_FLOW_SECURITY.GET_PAGE_ITEM_VALUE_CHECKSUM +WWV_FLOW_SECURITY.GET_PROTECTED_PAGE_ITEMS_COUNT +WWV_FLOW_SECURITY.GET_SECURITY_GROUP_ID +WWV_FLOW_SECURITY.GET_TRACE_MODE +WWV_FLOW_SECURITY.GET_TRANSLATED_FLOW_ID +WWV_FLOW_SECURITY.GET_TRANSLATED_ID +WWV_FLOW_SECURITY.GET_WALLET +WWV_FLOW_SECURITY.GET_WORKSPACE_GROUP_PREFIX +WWV_FLOW_SECURITY.GET_WORKSPACE_SEC_SETTINGS +WWV_FLOW_SECURITY.GRANT_RESTFUL_CONNECT +WWV_FLOW_SECURITY.HAS_APEX_ADMINISTRATOR_ROLE +WWV_FLOW_SECURITY.HAS_APEX_ADMINISTRATOR_ROLE_YN +WWV_FLOW_SECURITY.IP_CHECK +WWV_FLOW_SECURITY.IS_DEBUG_ENABLED +WWV_FLOW_SECURITY.IS_REMOTE_DEBUG_ENABLED +WWV_FLOW_SECURITY.IS_WORKSPACE_PASSWORD_VALID +WWV_FLOW_SECURITY.PREP_URL +WWV_FLOW_SECURITY.PURGE_EXPIRED_USER_HEADER +WWV_FLOW_SECURITY.RESET_APP_CHECKSUM_SALT +WWV_FLOW_SECURITY.SESSION_COOKIE_INFO_INTERNAL +WWV_FLOW_SECURITY.SETUP_SESSION_VIA_SHOW +WWV_FLOW_SECURITY.SET_DB_SESSION_INFO +WWV_FLOW_SECURITY.SET_G_SECURITY_GROUP_ID +WWV_FLOW_SECURITY.SET_INTERNAL_COOKIE_NAME +WWV_FLOW_SECURITY.SET_RM_CONSUMER_GROUP +WWV_FLOW_SECURITY.SET_WALLET +WWV_FLOW_SECURITY.STRONG_PASSWORD_CHECK +WWV_FLOW_SECURITY.STRONG_PASSWORD_VALIDATION +WWV_FLOW_SECURITY.TEARDOWN +WWV_FLOW_SECURITY.TEARDOWN_FSP_SHOW_POPUPLOV +WWV_FLOW_SECURITY.USER_BUILDER_SESSION_COMPANY +WWV_FLOW_SECURITY.USER_CAN_DEVELOP_ANY_FLOW +WWV_FLOW_SECURITY.USER_CAN_DEVELOP_FLOW +WWV_FLOW_SECURITY.USER_IS_DBA +WWV_FLOW_SECURITY.USER_IS_INTERNAL +WWV_FLOW_SECURITY.VERIFY_NOTIFY_MSG_CHECKSUM +WWV_FLOW_SECURITY.VERIFY_PRINT_MSG_CHECKSUM +WWV_FLOW_SECURITY.WHO_CALLED_ME +WWV_FLOW_SECURITY_SCHEMES_T1. +WWV_FLOW_SEED_TRANSLATIONS. +WWV_FLOW_SERIES_ATTR. +WWV_FLOW_SERIES_ATTR.DELETE_ATTRIBUTES +WWV_FLOW_SERIES_ATTR.FETCH_ATTRIBUTE +WWV_FLOW_SERIES_ATTR.FETCH_ATTRIBUTES +WWV_FLOW_SERIES_ATTR.FETCH_ATTRIBUTE_IN_ARRAY +WWV_FLOW_SERIES_ATTR.SET_ATTRIBUTE +WWV_FLOW_SERIES_ATTR.SET_ATTRIBUTES +WWV_FLOW_SESSION. +WWV_FLOW_SESSION.BUILTIN_COOKIE_SENTRY +WWV_FLOW_SESSION.CHECK_SESSION_TIMEOUT_ACCEPT +WWV_FLOW_SESSION.CHECK_SESSION_TIMEOUT_SHOW +WWV_FLOW_SESSION.CREATE_NEW +WWV_FLOW_SESSION.CREATE_OR_REUSE_SESSION +WWV_FLOW_SESSION.DELETE_SESSION +WWV_FLOW_SESSION.GENERATE_UNIQUE_HASHED_ID +WWV_FLOW_SESSION.GENERATE_UNIQUE_SESSION_ID +WWV_FLOW_SESSION.GET_BUILDER_COOKIE_NAME +WWV_FLOW_SESSION.GET_BUILDER_SESSION_ID +WWV_FLOW_SESSION.GET_BY_COOKIE_NAME +WWV_FLOW_SESSION.GET_CURRENT +WWV_FLOW_SESSION.GET_HASHED_ID +WWV_FLOW_SESSION.IS_EXISTING +WWV_FLOW_SESSION.REUSE_FOR_DIFFERENT_WORKSPACE +WWV_FLOW_SESSION.SET_SESSION_FIRED_FOR_FLOW +WWV_FLOW_SESSION.SET_SESSION_LIFETIME_SECONDS +WWV_FLOW_SESSION.SET_SESSION_MAX_IDLE_SECONDS +WWV_FLOW_SESSION.UNSET_SESSION_FIRED_FOR_FLOW +WWV_FLOW_SESSION.UPDATE_HASHED_ID +WWV_FLOW_SESSION.UPDATE_SECURITY_GROUP_ID +WWV_FLOW_SESSION.UPDATE_USER +WWV_FLOW_SESSIONS_T1. +WWV_FLOW_SESSIONS_T2. +WWV_FLOW_SESSION_MON. +WWV_FLOW_SESSION_MON.HIGHLIGHT_PLAN_IND_COLS +WWV_FLOW_SESSION_MON.POPULATE_STATS_ARRAY +WWV_FLOW_SESSION_MON.POPULATE_SYS_STATS_ARRAY +WWV_FLOW_SESSION_STATE. +WWV_FLOW_SESSION_STATE.CLEAR_ALL_STATE_FOR_ID +WWV_FLOW_SESSION_STATE.CLEAR_ALL_STATE_FOR_NAME +WWV_FLOW_SESSION_STATE.CLEAR_COMPONENT_VALUES +WWV_FLOW_SESSION_STATE.CLEAR_STATE_FOR_APPLICATION +WWV_FLOW_SESSION_STATE.CLEAR_STATE_FOR_ID +WWV_FLOW_SESSION_STATE.CLEAR_STATE_FOR_PAGE +WWV_FLOW_SESSION_STATE.CLEAR_STATE_FOR_USER +WWV_FLOW_SESSION_STATE.DO_CACHE_SUBSTITUTIONS +WWV_FLOW_SESSION_STATE.DO_HASH_SUBSTITUTIONS +WWV_FLOW_SESSION_STATE.FETCH_INTO_SUBSTITUTION_CACHE +WWV_FLOW_SESSION_STATE.FETCH_NUM_VALUE_BY_ID +WWV_FLOW_SESSION_STATE.FETCH_VALUE_BY_ID +WWV_FLOW_SESSION_STATE.GET_BUILTIN_GLOBAL_ITEM_VALUE +WWV_FLOW_SESSION_STATE.GET_COMPONENT_VALUES +WWV_FLOW_SESSION_STATE.GET_DEFERRED_SESSION_VAL_ID +WWV_FLOW_SESSION_STATE.GET_GLOBAL_ITEM_ID +WWV_FLOW_SESSION_STATE.GET_ITEM_VALUE +WWV_FLOW_SESSION_STATE.GET_STATUS +WWV_FLOW_SESSION_STATE.HAS_COMPONENT_VALUE +WWV_FLOW_SESSION_STATE.INITIALIZE_ALL_PAGE_ITEMS +WWV_FLOW_SESSION_STATE.IS_BUILTIN_GLOBAL_ITEM_NAME +WWV_FLOW_SESSION_STATE.IS_STATUS_CHANGED +WWV_FLOW_SESSION_STATE.SAVE +WWV_FLOW_SESSION_STATE.SAVE_BY_ID +WWV_FLOW_SESSION_STATE.SAVE_BY_NAME +WWV_FLOW_SESSION_STATE.SAVE_DEFERRED_SESSION_VALS +WWV_FLOW_SESSION_STATE.SAVE_NOCACHE +WWV_FLOW_SESSION_STATE.SET_BUILTIN_GLOBAL_ITEM_VALUE +WWV_FLOW_SESSION_STATE.SET_COMPONENT_VALUES +WWV_FLOW_SESSION_STATE.SET_SUBSTITUTION_CACHE +WWV_FLOW_SESSION_STATE.SET_SUBSTITUTION_CACHE_BYNAME +WWV_FLOW_SESSION_STATE.V +WWV_FLOW_SHARED_QUERIES_T1. +WWV_FLOW_SHORTCUTS_T1. +WWV_FLOW_SHORTCUT_UM_T1. +WWV_FLOW_SPATIAL_API. +WWV_FLOW_SPATIAL_API.CHANGE_GEOM_METADATA +WWV_FLOW_SPATIAL_API.CIRCLE_POLYGON +WWV_FLOW_SPATIAL_API.DELETE_GEOM_METADATA +WWV_FLOW_SPATIAL_API.INSERT_GEOM_METADATA +WWV_FLOW_SPATIAL_API.INSERT_GEOM_METADATA_LONLAT +WWV_FLOW_SPATIAL_API.POINT +WWV_FLOW_SPATIAL_API.RECTANGLE +WWV_FLOW_SPATIAL_INT. +WWV_FLOW_SPATIAL_INT.CHANGE_GEOM_METADATA +WWV_FLOW_SPATIAL_INT.DELETE_GEOM_METADATA +WWV_FLOW_SPATIAL_INT.INSERT_GEOM_METADATA +WWV_FLOW_SQRY_SQL_STMTS_T1. +WWV_FLOW_STANDARD_ICONS_T1. +WWV_FLOW_STD_ITEM_TYPES_T1. +WWV_FLOW_STEPS_T1. +WWV_FLOW_STEP_BRANCHES_T1. +WWV_FLOW_STEP_BRANCH_ARGS_T1. +WWV_FLOW_STEP_BUTTONS_T1. +WWV_FLOW_STEP_COMPUTATIONS_T1. +WWV_FLOW_STEP_ITEMS_T1. +WWV_FLOW_STEP_ITEMS_T2. +WWV_FLOW_STEP_ITEM_HELP_T1. +WWV_FLOW_STEP_PROCESSING_T1. +WWV_FLOW_STEP_VALIDATIONS_T1. +WWV_FLOW_SVG. +WWV_FLOW_SVG.CHART +WWV_FLOW_SVG.GET_SHARED_STYLES +WWV_FLOW_SVG.INIT_COLORS +WWV_FLOW_SVG.SET_ATTRIBUTES +WWV_FLOW_SW_API. +WWV_FLOW_SW_API.ARRAY_ELEMENT +WWV_FLOW_SW_API.CHECK_PRIV +WWV_FLOW_SW_API.CHECK_PRIV_OBJECT +WWV_FLOW_SW_API.CREATE_PLAN_TABLE +WWV_FLOW_SW_API.CREATE_RECORD +WWV_FLOW_SW_API.CREATE_SW_QBE_COLLECTION +WWV_FLOW_SW_API.DELETE_RECORD +WWV_FLOW_SW_API.DISPLAY_ERROR_MSG +WWV_FLOW_SW_API.EXPLAIN_PLAN +WWV_FLOW_SW_API.GEN_ROW_MD5 +WWV_FLOW_SW_API.GET_BINDS +WWV_FLOW_SW_API.PERFORM_BINDS +WWV_FLOW_SW_API.RUN_SQL +WWV_FLOW_SW_API.RUN_SQL_ARR +WWV_FLOW_SW_API.SAVE_HISTORY +WWV_FLOW_SW_API.UPDATE_RECORD +WWV_FLOW_SW_API.VALID_WORKSPACE_SCHEMA +WWV_FLOW_SW_BINDS_T1. +WWV_FLOW_SW_DETAIL_RESULTS_T1. +WWV_FLOW_SW_OBJECT_FEED. +WWV_FLOW_SW_OBJECT_FEED.GETMOREOBJECTS +WWV_FLOW_SW_PAGE_CALLS. +WWV_FLOW_SW_PAGE_CALLS.DISABLE_INDEX +WWV_FLOW_SW_PAGE_CALLS.DISABLE_TRIGGER +WWV_FLOW_SW_PAGE_CALLS.DO_COMPILE +WWV_FLOW_SW_PAGE_CALLS.EDIT_ROW +WWV_FLOW_SW_PAGE_CALLS.ENABLE_TRIGGER +WWV_FLOW_SW_PAGE_CALLS.PURGE_OBJECT +WWV_FLOW_SW_PAGE_CALLS.PURGE_RECYCLEBIN +WWV_FLOW_SW_PAGE_CALLS.REBUILD_INDEX +WWV_FLOW_SW_PAGE_CALLS.RESTORE_OBJECT +WWV_FLOW_SW_PAGE_CALLS.RUN_DDL +WWV_FLOW_SW_PAGE_CALLS.SQL_RESULTS +WWV_FLOW_SW_PAGE_CALLS.TEST_DBLINK +WWV_FLOW_SW_PAGE_CALLS.UPDATE_COMMENT +WWV_FLOW_SW_PARSER. +WWV_FLOW_SW_PARSER.PARSED +WWV_FLOW_SW_PARSER.PARSE_CLOB +WWV_FLOW_SW_PARSER.PARSE_FILE +WWV_FLOW_SW_RESULTS_T1. +WWV_FLOW_SW_SCRIPT. +WWV_FLOW_SW_SCRIPT.ARRAY_ELEMENT +WWV_FLOW_SW_SCRIPT.CANCEL_SCRIPT +WWV_FLOW_SW_SCRIPT.CHUNK_LINES +WWV_FLOW_SW_SCRIPT.CLEAN_OUT_ORPHAN_LONG_OP +WWV_FLOW_SW_SCRIPT.CREATE_SCRIPT_FILE +WWV_FLOW_SW_SCRIPT.CREATE_SCRIPT_FROM_CLOB +WWV_FLOW_SW_SCRIPT.DELETE_FILE +WWV_FLOW_SW_SCRIPT.DISPLAY_INVALID_STMT +WWV_FLOW_SW_SCRIPT.DISPLAY_RUN_CONFIRM +WWV_FLOW_SW_SCRIPT.DRAW_QUOTAMETER +WWV_FLOW_SW_SCRIPT.DRAW_QUOTAMETER2 +WWV_FLOW_SW_SCRIPT.ESCAPE_SC_CLOB +WWV_FLOW_SW_SCRIPT.GETLENGTHB +WWV_FLOW_SW_SCRIPT.GET_FAILURE_CNT +WWV_FLOW_SW_SCRIPT.GET_FREE_SPACE +WWV_FLOW_SW_SCRIPT.GET_SUCCESS_CNT +WWV_FLOW_SW_SCRIPT.INVALID_SCRIPT +WWV_FLOW_SW_SCRIPT.PRINT_CLOB +WWV_FLOW_SW_SCRIPT.PRINT_RESULT +WWV_FLOW_SW_SCRIPT.PRINT_STMT +WWV_FLOW_SW_SCRIPT.RUN_FILE +WWV_FLOW_SW_SCRIPT.SAVE_FILE_ATTRIB +WWV_FLOW_SW_SCRIPT.SCRIPT_W_WARNING +WWV_FLOW_SW_SCRIPT.SUBMIT_TO_RUN +WWV_FLOW_SW_SCRIPT.UPDATE_SCRIPT_FILE +WWV_FLOW_SW_SCRIPT.VALID_SCRIPT_NAME +WWV_FLOW_SW_SQL_CMDS_T1. +WWV_FLOW_SW_STMTS_T1. +WWV_FLOW_SW_UPGRADE. +WWV_FLOW_SW_UPGRADE.SW_ARCHIVE_CLEANUP +WWV_FLOW_SW_UPGRADE.SW_CTRL_FILE_CLEANUP +WWV_FLOW_SW_UPGRADE.SW_SCRIPT_NAME_CLEANUP +WWV_FLOW_SW_UTIL. +WWV_FLOW_SW_UTIL.CREATE_PACKAGE +WWV_FLOW_SW_UTIL.GENERATE_PK_NAME +WWV_FLOW_SW_UTIL.GENERATE_SEQ_NAME +WWV_FLOW_SW_UTIL.GET_ALTERTABLE_COLUMN_DDL +WWV_FLOW_SW_UTIL.GET_ALTERTABLE_DDL +WWV_FLOW_SW_UTIL.GET_ANALYZE_DDL +WWV_FLOW_SW_UTIL.GET_CONST_DDL +WWV_FLOW_SW_UTIL.GET_COPYTBL_DDL +WWV_FLOW_SW_UTIL.GET_DBLINK_DDL +WWV_FLOW_SW_UTIL.GET_DDL +WWV_FLOW_SW_UTIL.GET_DROP_DDL +WWV_FLOW_SW_UTIL.GET_FOREIGN_KEY_DDL +WWV_FLOW_SW_UTIL.GET_FUNCTION_DDL +WWV_FLOW_SW_UTIL.GET_INDEX_DDL +WWV_FLOW_SW_UTIL.GET_OBJECT_INFO +WWV_FLOW_SW_UTIL.GET_PACKAGEBODY_DDL +WWV_FLOW_SW_UTIL.GET_PACKAGE_DDL +WWV_FLOW_SW_UTIL.GET_PK_POSITION +WWV_FLOW_SW_UTIL.GET_ROW_CNT +WWV_FLOW_SW_UTIL.GET_SEQUENCE_DDL +WWV_FLOW_SW_UTIL.GET_SYNONYM_DDL +WWV_FLOW_SW_UTIL.GET_TRIGGER2_DDL +WWV_FLOW_SW_UTIL.GET_VIEW_DDL +WWV_FLOW_SW_UTIL.IS_AVAILABLE_NAME +WWV_FLOW_SW_UTIL.IS_AVAILABLE_NAME2 +WWV_FLOW_SW_UTIL.IS_DATABASE_RESERVED_WORD +WWV_FLOW_SW_UTIL.IS_RESERVED +WWV_FLOW_SW_UTIL.IS_VALID_NAME +WWV_FLOW_SW_UTIL.IS_WRAPPED +WWV_FLOW_SW_UTIL.PICK_PK +WWV_FLOW_SW_UTIL.RUN_BLOCK +WWV_FLOW_SW_UTIL.RUN_DDL +WWV_FLOW_SW_UTIL.RUN_OTHER_SQL +WWV_FLOW_SW_UTIL.RUN_SQL +WWV_FLOW_SW_UTIL.SHOW_PLSQL_EDIT +WWV_FLOW_SW_UTIL.TABLE_EXISTS +WWV_FLOW_SYNC_TRANSLATIONS. +WWV_FLOW_TABLE_DRILL. +WWV_FLOW_TABLE_DRILL.BUILD_SQL +WWV_FLOW_TABLE_DRILL.BUILD_VIEW_SQL +WWV_FLOW_TABLE_DRILL.DRAW_DATA_MODEL +WWV_FLOW_TABS_T1. +WWV_FLOW_TABULAR_FORM. +WWV_FLOW_TABULAR_FORM.GET_COLUMN_HEADING +WWV_FLOW_TABULAR_FORM.GET_HTML_ELEMENT_ID +WWV_FLOW_TABULAR_FORM.GET_ROW_COUNT +WWV_FLOW_TABULAR_FORM.GET_ROW_STATUS +WWV_FLOW_TABULAR_FORM.GET_ROW_VALUES +WWV_FLOW_TABULAR_FORM.HAS_ROW_CHANGED +WWV_FLOW_TABULAR_FORM.HAS_TABULAR_FORM +WWV_FLOW_TABULAR_FORM.IS_ROW_SELECTOR_CHECKED +WWV_FLOW_TABULAR_FORM.SET_ROW_VALUES +WWV_FLOW_TAB_MGR. +WWV_FLOW_TAB_MGR.MOVE_TAB_NEW_PTAB +WWV_FLOW_TAB_MGR.MOVE_TAB_NEW_TABSET +WWV_FLOW_TAB_MGR.TABS +WWV_FLOW_TAB_MGR.UPDATE_TAB_PAGES +WWV_FLOW_TASKS_T1. +WWV_FLOW_TASKS_T2. +WWV_FLOW_TASK_DEFAULTS_T1. +WWV_FLOW_TASK_PROGRESS_T1. +WWV_FLOW_TEAM. +WWV_FLOW_TEAM.FEEDBACK_DASH_1 +WWV_FLOW_TEAM.GET_DEFAULT_RELEASE +WWV_FLOW_TEAM.GET_EMAIL +WWV_FLOW_TEAM.LOG_FEEDBACK_AS_BUG +WWV_FLOW_TEAM.LOG_FEEDBACK_AS_TODO +WWV_FLOW_TEAM.SEND_DEVELOPER_SUMMARY +WWV_FLOW_TEAM.SHOW_BREADCRUMBS +WWV_FLOW_TEAM.SHOW_BUG_DASHBOARD1 +WWV_FLOW_TEAM.SHOW_DEVELOPER_SUMMARY +WWV_FLOW_TEAM.SHOW_FEATURE_DASH_1 +WWV_FLOW_TEAM.SHOW_MILESTONE_DASHBOARD1 +WWV_FLOW_TEAM.SHOW_TODO_DASH_1 +WWV_FLOW_TEAM.TEAM_DASH_1 +WWV_FLOW_TEAM.WWV_FLOW_RENDER_TAG_CLOUD +WWV_FLOW_TEAM.WWV_FLOW_TEAM_TAG_SYNC +WWV_FLOW_TEAMDEV_TC_T1. +WWV_FLOW_TEAM_API. +WWV_FLOW_TEAM_API.CHECK_VERSION +WWV_FLOW_TEAM_API.CREATE_BUG +WWV_FLOW_TEAM_API.CREATE_EVENT +WWV_FLOW_TEAM_API.CREATE_FEATURE +WWV_FLOW_TEAM_API.CREATE_FEATURE_HISTORY +WWV_FLOW_TEAM_API.CREATE_FEATURE_PROGRESS +WWV_FLOW_TEAM_API.CREATE_FEEDBACK +WWV_FLOW_TEAM_API.CREATE_FEEDBACK_FOLLOWUP +WWV_FLOW_TEAM_API.CREATE_LINK +WWV_FLOW_TEAM_API.CREATE_NEWS +WWV_FLOW_TEAM_API.CREATE_TASK +WWV_FLOW_TEAM_API.CREATE_TASK_DEFAULTS +WWV_FLOW_TEAM_API.CREATE_TASK_PROGRESS +WWV_FLOW_TEAM_API.CREATE_TEAM_TAGS +WWV_FLOW_TEAM_API.CREATE_TODO +WWV_FLOW_TEAM_API.DELETE_BUG +WWV_FLOW_TEAM_API.DELETE_FEATURE +WWV_FLOW_TEAM_API.DELETE_TODO +WWV_FLOW_TEAM_FILE. +WWV_FLOW_TEAM_FILE.ADD_FILE +WWV_FLOW_TEAM_FILE.CREATE_FILE_COLLECTION +WWV_FLOW_TEAM_FILE.DELETE_FILE +WWV_FLOW_TEAM_FILE.FETCH_FILE +WWV_FLOW_TEAM_FILE.GET_FILE +WWV_FLOW_TEAM_FILE.GET_FILE_SRC +WWV_FLOW_TEAM_FILE.INSTALL +WWV_FLOW_TEAM_FILE.SAVE_FILE_COMMENT +WWV_FLOW_TEAM_FILE.TEAM_DEV_FILE_ENABLED +WWV_FLOW_TEAM_FILES_T1. +WWV_FLOW_TEAM_GEN_API. +WWV_FLOW_TEAM_GEN_API.EXPORT +WWV_FLOW_TEAM_GEN_API.EXPORT_SCRIPT +WWV_FLOW_TEAM_TAGS_T1. +WWV_FLOW_TEMPLATE. +WWV_FLOW_TEMPLATE.GET_GRID_TEMPLATE +WWV_FLOW_TEMPLATE.SPLIT +WWV_FLOW_TEMPLATE.TOKENIZE +WWV_FLOW_TEMPLATE.TOKENIZE_AND_EMIT +WWV_FLOW_TEMPLATES_T1. +WWV_FLOW_TEMPLATES_UTIL. +WWV_FLOW_TEMPLATES_UTIL.BREADCRUMB_TEMPLATE_SUB_STR +WWV_FLOW_TEMPLATES_UTIL.BUTTON_TEMPLATE_SUB_STR +WWV_FLOW_TEMPLATES_UTIL.COPY_BUTTON_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_CALENDAR_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_FIELD_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_LIST_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_MENU_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_PLUG +WWV_FLOW_TEMPLATES_UTIL.COPY_POPUP_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_ROW_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.COPY_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.FETCH_TAB_INFO +WWV_FLOW_TEMPLATES_UTIL.GET_PAGE_TEMPLATE_NAME +WWV_FLOW_TEMPLATES_UTIL.GET_TEMPLATE_ID +WWV_FLOW_TEMPLATES_UTIL.GET_USER_TEMPLATE_PREFERENCE +WWV_FLOW_TEMPLATES_UTIL.LABEL_TEMPLATE_SUB_STR +WWV_FLOW_TEMPLATES_UTIL.LIST_TEMPLATE_SUB_STR +WWV_FLOW_TEMPLATES_UTIL.PAGE_TEMPLATE_POPUP_PREVIEW +WWV_FLOW_TEMPLATES_UTIL.PAGE_TEMPLATE_UTILIZATION +WWV_FLOW_TEMPLATES_UTIL.REPLACE_BUTTON_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_CALENDAR_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_FIELD_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_LIST_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_MENU_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_POPUP_LOV_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_REGION_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_REPORT_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.REPLACE_TEMPLATE +WWV_FLOW_TEMPLATES_UTIL.SET_PAGE_REGION_NAMES_2_IDS +WWV_FLOW_TEMPLATES_UTIL.SET_PAGE_TEMPLATE_NAMES_2_IDS +WWV_FLOW_TEMPLATES_UTIL.SET_USER_TEMPLATE_PREFERENCE +WWV_FLOW_TEMPLATE_DEV. +WWV_FLOW_TEMPLATE_DEV.GET_BREADCRUMB_DISPLAY_POINT +WWV_FLOW_TEMPLATE_PREFS_T1. +WWV_FLOW_THEME. +WWV_FLOW_THEME.GET_CALENDAR +WWV_FLOW_THEME.GET_DISPLAY_POINT +WWV_FLOW_THEME.GET_ERROR_PAGE_TEMPLATE_ID +WWV_FLOW_THEME.GET_PAGE_TEMPLATE_ID +WWV_FLOW_THEME.GET_PAGE_TRANSITION +WWV_FLOW_THEME.GET_POPUP_TRANSITION +WWV_FLOW_THEME.GET_PRINTER_FRIENDLY_TEMPL_ID +WWV_FLOW_THEMES_T1. +WWV_FLOW_THEME_DEV. +WWV_FLOW_THEME_DEV.GET_BREADCRUMB_TEMPLATE_ID +WWV_FLOW_THEME_DEV.GET_CALENDAR_TEMPLATE_ID +WWV_FLOW_THEME_DEV.GET_PAGE_TEMPLATE_ID +WWV_FLOW_THEME_DEV.GET_REGION_TEMPLATE_ID +WWV_FLOW_THEME_DEV.GET_REPORT_TEMPLATE_ID +WWV_FLOW_THEME_DEV.PUSH_THEME_DISPLAY_POINT +WWV_FLOW_THEME_DEV.REFRESH_THEME_DISPLAY_POINT +WWV_FLOW_THEME_DEV.SUBSCRIBE_THEME_DISPLAY_POINT +WWV_FLOW_THEME_DISP_POINTS_T1. +WWV_FLOW_THEME_DISP_POIN_AUDIT. +WWV_FLOW_THEME_FILES. +WWV_FLOW_THEME_FILES.FIND_CSS_CLASSES +WWV_FLOW_THEME_FILES.FIND_OBJECT_DEPENDENCIES +WWV_FLOW_THEME_FILES.FIND_SUBSTITUTION_STRINGS +WWV_FLOW_THEME_FILES.FIND_TEMPLATE_FILES +WWV_FLOW_THEME_FILES.GET_THEME_IMAGE_NAME +WWV_FLOW_THEME_GLOBALS. +WWV_FLOW_THEME_MANAGER. +WWV_FLOW_THEME_MANAGER.ADD_THEME_TO_APPLICATION +WWV_FLOW_THEME_MANAGER.CHANGE_PUBLIC_THEME +WWV_FLOW_THEME_MANAGER.CHANGE_WORKSPACE_THEME +WWV_FLOW_THEME_MANAGER.CONSOLIDATE_TEMPLATES +WWV_FLOW_THEME_MANAGER.COPY_THEME +WWV_FLOW_THEME_MANAGER.COUNT_CONSOLIDATION +WWV_FLOW_THEME_MANAGER.CREATE_NEW_PUBLIC_THEME +WWV_FLOW_THEME_MANAGER.CREATE_NEW_WORKSPACE_THEME +WWV_FLOW_THEME_MANAGER.DELETE_PUBLIC_THEME +WWV_FLOW_THEME_MANAGER.DELETE_THEME +WWV_FLOW_THEME_MANAGER.DELETE_WORKSPACE_THEME +WWV_FLOW_THEME_MANAGER.F4000_PROCESS_THEME_IMAGE +WWV_FLOW_THEME_MANAGER.GET_BUTTON_POSTION +WWV_FLOW_THEME_MANAGER.GET_BUTTON_UTIL +WWV_FLOW_THEME_MANAGER.GET_CAL_UTIL +WWV_FLOW_THEME_MANAGER.GET_FIELD_UTIL +WWV_FLOW_THEME_MANAGER.GET_LIST_UTIL +WWV_FLOW_THEME_MANAGER.GET_MENU_UTIL +WWV_FLOW_THEME_MANAGER.GET_NEW_THEME_ID +WWV_FLOW_THEME_MANAGER.GET_PAGE_UTIL +WWV_FLOW_THEME_MANAGER.GET_REGION_UTIL +WWV_FLOW_THEME_MANAGER.GET_REPORT_UTIL +WWV_FLOW_THEME_MANAGER.GET_THEME_IMAGE_ICON +WWV_FLOW_THEME_MANAGER.RENUMBER_THEME +WWV_FLOW_THEME_MANAGER.SET_GLOBALS +WWV_FLOW_THEME_MANAGER.SWITCH_THEME +WWV_FLOW_THEME_STYLES_T1. +WWV_FLOW_TOPLEVEL_TABS_T1. +WWV_FLOW_TRANSLATABLE_TEXT_T1. +WWV_FLOW_TRANSLATION_UTILITIES. +WWV_FLOW_TRANSLATION_UTILITIES.FLOW_COPY +WWV_FLOW_TRANSLATION_UTILITIES.PUBLISH_APPLICATION +WWV_FLOW_TRANSLATION_UTILITIES.REUSE_TRANSLATIONS +WWV_FLOW_TRANSLATION_UTILITIES.SEED_AND_PUBLISH +WWV_FLOW_TRANSLATION_UTILITIES.SEED_TRANSLATIONS +WWV_FLOW_TRANSLATION_UTILITIES.SYNC_TRANSLATIONS +WWV_FLOW_TRANSLATION_UTIL_API. +WWV_FLOW_TRANSLATION_UTIL_API.FLOW_COPY +WWV_FLOW_TRANSLATION_UTIL_API.PUBLISH_APPLICATION +WWV_FLOW_TRANSLATION_UTIL_API.SET_TRANSLATION_MAPPING +WWV_FLOW_TRANSLATION_UTIL_API.SYNC_TRANSLATIONS +WWV_FLOW_TREE. +WWV_FLOW_TREE.BUILD +WWV_FLOW_TREE.CONTRACT +WWV_FLOW_TREE.EXPAND +WWV_FLOW_TREE.RESET +WWV_FLOW_TREEREGION_T1. +WWV_FLOW_TREES_T1. +WWV_FLOW_TREE_GLOBAL_VARS. +WWV_FLOW_TREE_REGION. +WWV_FLOW_TREE_REGION.FETCH_JSTREE_ATTR +WWV_FLOW_TREE_REGION.GET_TREE_DATA +WWV_FLOW_TREE_REGION.INIT +WWV_FLOW_TREE_REGION.IS_VALID_START_QUERY +WWV_FLOW_TREE_REGION.SAVE_JSTREE_ATTR +WWV_FLOW_TREE_REGION.SET_HINTS +WWV_FLOW_TREE_REGION.SET_HINTS_TEXT +WWV_FLOW_TREE_REGION.SET_TREE +WWV_FLOW_TREE_REGION.SET_TREE_ACTION +WWV_FLOW_TREE_REGION.SET_TREE_HAS_FOCUS +WWV_FLOW_TREE_REGION.SET_TREE_ID +WWV_FLOW_TREE_REGION.SET_TREE_TEMPLATE +WWV_FLOW_TREE_REGION.SHOW_TREE +WWV_FLOW_UI_TYPE. +WWV_FLOW_UI_TYPE.DETECT +WWV_FLOW_UI_TYPES_T1. +WWV_FLOW_UI_TYPE_DEV. +WWV_FLOW_UI_TYPE_DEV.SUPPORTS_FEATURE +WWV_FLOW_UI_TYPE_FEATURES_T1. +WWV_FLOW_UPGRADE. +WWV_FLOW_UPGRADE.COPY_FLOW_META_DATA +WWV_FLOW_UPGRADE.COPY_PREFS +WWV_FLOW_UPGRADE.CREATE_JOBS +WWV_FLOW_UPGRADE.CREATE_PUBLIC_SYNONYMS +WWV_FLOW_UPGRADE.DROP_PUBLIC_SYNONYMS +WWV_FLOW_UPGRADE.ENABLE_WS_CONSTRAINTS +WWV_FLOW_UPGRADE.FLOWS_FILES_OBJECTS_CREATE +WWV_FLOW_UPGRADE.FLOWS_FILES_OBJECTS_REMOVE +WWV_FLOW_UPGRADE.GRANT_PUBLIC_SYNONYMS +WWV_FLOW_UPGRADE.INCREMENT_SESSION +WWV_FLOW_UPGRADE.LOG +WWV_FLOW_UPGRADE.META_CLEANUP +WWV_FLOW_UPGRADE.PURGE_LOG +WWV_FLOW_UPGRADE.RECREATE_PUBLIC_SYNONYMS +WWV_FLOW_UPGRADE.REMOVE_JOBS +WWV_FLOW_UPGRADE.REMOVE_META_DATA +WWV_FLOW_UPGRADE.REPORT_COLUMN_CLEANUP +WWV_FLOW_UPGRADE.SET_ENVIRONMENT +WWV_FLOW_UPGRADE.SWITCH_SCHEMAS +WWV_FLOW_UPGRADE.SW_CLEANUP +WWV_FLOW_UPGRADE.TEMPLATE_NAME_CLEANUP +WWV_FLOW_UPGRADE.TO_TEMPLATE_ID +WWV_FLOW_UPGRADE.UPGRADE_TO_040200 +WWV_FLOW_UPGRADE.UPGRADE_WS_TO_040200 +WWV_FLOW_UPGRADE_APP. +WWV_FLOW_UPGRADE_APP.CREATE_ADV_REPORT_COLLECTION +WWV_FLOW_UPGRADE_APP.CREATE_REPORT_COLLECTION +WWV_FLOW_UPGRADE_APP.UPDATE_ADVANCED +WWV_FLOW_UPGRADE_APP.UPDATE_DATEPICKER +WWV_FLOW_UPGRADE_APP.UPDATE_FLASH_CHART +WWV_FLOW_UPGRADE_APP.UPDATE_HTML_CHART +WWV_FLOW_UPGRADE_APP.UPDATE_INTERACTIVE_REPORT +WWV_FLOW_UPGRADE_APP.UPDATE_LOV_NULL_RETURN_VALUE +WWV_FLOW_UPGRADE_APP.UPDATE_SVG_CHART +WWV_FLOW_UPGRADE_APP.UPDATE_TO_CKEDITOR +WWV_FLOW_UPGRADE_APP.UPDATE_TO_NUMERIC +WWV_FLOW_UPGRADE_APP.UPDATE_TO_REQUIRED +WWV_FLOW_USER_API. +WWV_FLOW_USER_API.CURRENT_USER_IN_GROUP +WWV_FLOW_USER_API.GET_ATTRIBUTE +WWV_FLOW_USER_API.GET_CURRENT_USER_ID +WWV_FLOW_USER_API.GET_DEFAULT_SCHEMA +WWV_FLOW_USER_API.GET_EMAIL +WWV_FLOW_USER_API.GET_FIRST_NAME +WWV_FLOW_USER_API.GET_GROUPS_USER_BELONGS_TO +WWV_FLOW_USER_API.GET_GROUP_ID +WWV_FLOW_USER_API.GET_GROUP_NAME +WWV_FLOW_USER_API.GET_LAST_NAME +WWV_FLOW_USER_API.GET_USERNAME +WWV_FLOW_USER_API.GET_USER_ID +WWV_FLOW_USER_API.IS_LOGIN_PASSWORD_VALID +WWV_FLOW_USER_API.IS_USERNAME_UNIQUE +WWV_FLOW_USER_API.SET_ATTRIBUTE +WWV_FLOW_USER_API.SET_EMAIL +WWV_FLOW_USER_API.SET_FIRST_NAME +WWV_FLOW_USER_API.SET_LAST_NAME +WWV_FLOW_USER_API.SET_USERNAME +WWV_FLOW_USER_INTERFACE. +WWV_FLOW_USER_INTERFACE.DETECT_USER_INTERFACE +WWV_FLOW_USER_INTERFACE.GET_GLOBAL_PAGE_ID +WWV_FLOW_USER_INTERFACE.GET_HOME_URL +WWV_FLOW_USER_INTERFACE.GET_LOGIN_URL +WWV_FLOW_USER_INTERFACE.GET_THEME_ID +WWV_FLOW_USER_INTERFACE.GET_UI_TYPE +WWV_FLOW_USER_INTERFACE.IS_DESKTOP_UI +WWV_FLOW_USER_INTERFACE.IS_JQM_SMARTPHONE_UI +WWV_FLOW_USER_INTERFACE.IS_JQM_TABLET_UI +WWV_FLOW_USER_INTERFACE.IS_JQM_UI +WWV_FLOW_USER_INTERFACE_DEV. +WWV_FLOW_USER_INTERFACE_DEV.GET_CURRENT_THEME_ID +WWV_FLOW_USER_INTERFACE_DEV.GET_GLOBAL_PAGE_ID +WWV_FLOW_USER_INTERFACE_DEV.GET_UI_TYPE +WWV_FLOW_USER_INTERFACE_DEV.IS_DESKTOP_UI +WWV_FLOW_USER_INTERFACE_DEV.IS_JQM_SMARTPHONE_UI +WWV_FLOW_USER_INTERFACE_DEV.IS_JQM_TABLET_UI +WWV_FLOW_USER_INTERFACE_DEV.IS_JQM_UI +WWV_FLOW_USER_INTERFACE_DEV.SUPPORTS_BREADCRUMBS +WWV_FLOW_USER_INTERFACE_DEV.SUPPORTS_FEATURE +WWV_FLOW_USER_INTERFACE_T1. +WWV_FLOW_UTILITIES. +WWV_FLOW_UTILITIES.ADD_NULL_VALUE_ENTRY +WWV_FLOW_UTILITIES.AGENDA_CALENDAR +WWV_FLOW_UTILITIES.APPEND_TO_LIST +WWV_FLOW_UTILITIES.ARRAY_ELEMENT +WWV_FLOW_UTILITIES.B64_ENCODE +WWV_FLOW_UTILITIES.BLOB_TO_CLOB +WWV_FLOW_UTILITIES.BULK_SAVE_SESSION_STATE +WWV_FLOW_UTILITIES.CACHE_GET_DATE_CACHED +WWV_FLOW_UTILITIES.CACHE_PURGE_BY_APPLICATION +WWV_FLOW_UTILITIES.CACHE_PURGE_BY_PAGE +WWV_FLOW_UTILITIES.CACHE_PURGE_STALE +WWV_FLOW_UTILITIES.CHECKSUM +WWV_FLOW_UTILITIES.CHECK_SGID +WWV_FLOW_UTILITIES.CLOB_TO_BLOB +WWV_FLOW_UTILITIES.CLOB_TO_VARCHAR2 +WWV_FLOW_UTILITIES.CLOSE_JAVASCRIPT +WWV_FLOW_UTILITIES.CLOSE_NOSCRIPT +WWV_FLOW_UTILITIES.COUNT_STALE_REGIONS +WWV_FLOW_UTILITIES.CURRENT_FLOW_CHANGED +WWV_FLOW_UTILITIES.CURRENT_SESSION_CHANGED +WWV_FLOW_UTILITIES.CUSTOM_CALENDAR +WWV_FLOW_UTILITIES.DAILY_CALENDAR +WWV_FLOW_UTILITIES.DB_COMPATIBILITY +WWV_FLOW_UTILITIES.DB_EDITION_IS_XE +WWV_FLOW_UTILITIES.DB_VERSION +WWV_FLOW_UTILITIES.DB_VERSION_IS_AT_LEAST +WWV_FLOW_UTILITIES.DB_VERSION_IS_AT_LEAST_I +WWV_FLOW_UTILITIES.DECREMENT_CALENDAR +WWV_FLOW_UTILITIES.DELETE_FROM_LIST +WWV_FLOW_UTILITIES.DELETE_LIST_ELEMENT +WWV_FLOW_UTILITIES.DOWNLOAD_PRINT_DOCUMENT +WWV_FLOW_UTILITIES.EMIT_POPUP_LOV_HEADER +WWV_FLOW_UTILITIES.ENCODE_FILENAME +WWV_FLOW_UTILITIES.ESCAPE_URL +WWV_FLOW_UTILITIES.ESC_NON_BASIC_TAGS +WWV_FLOW_UTILITIES.EXPORT_APPLICATION_TO_CLOB +WWV_FLOW_UTILITIES.EXPORT_APPLICATION_TO_DB +WWV_FLOW_UTILITIES.EXPORT_FEEDBACK_TO_DEPLOYMENT +WWV_FLOW_UTILITIES.EXPORT_FEEDBACK_TO_DEVELOPMENT +WWV_FLOW_UTILITIES.EXPORT_FILES_TO_CLOB +WWV_FLOW_UTILITIES.EXPORT_PAGE_TO_CLOB +WWV_FLOW_UTILITIES.EXPORT_RESTFUL_TO_CLOB +WWV_FLOW_UTILITIES.EXPORT_WORKSPACE +WWV_FLOW_UTILITIES.EXPORT_WORKSPACE_TO_CLOB +WWV_FLOW_UTILITIES.EXPORT_WS_APP_TO_CLOB +WWV_FLOW_UTILITIES.EXTRACTHTML +WWV_FLOW_UTILITIES.FAST_REPLACE +WWV_FLOW_UTILITIES.FAST_REPLACE_F +WWV_FLOW_UTILITIES.FAST_REPLACE_MANY +WWV_FLOW_UTILITIES.FAST_REPLACE_MANYF +WWV_FLOW_UTILITIES.FLOW_AUTHENTICATION +WWV_FLOW_UTILITIES.FORMAT +WWV_FLOW_UTILITIES.GEN_FILTER_ESCAPE +WWV_FLOW_UTILITIES.GEN_POPUP_LIST +WWV_FLOW_UTILITIES.GET_APP_ID_RESERVED_REASON +WWV_FLOW_UTILITIES.GET_BINDS +WWV_FLOW_UTILITIES.GET_CGI_QUERY_STRING_DECODED +WWV_FLOW_UTILITIES.GET_CLOB_MD5 +WWV_FLOW_UTILITIES.GET_CLOB_TEXTAREA_VALUE +WWV_FLOW_UTILITIES.GET_COLUMN_HEADINGS +WWV_FLOW_UTILITIES.GET_COMPANY_FROM_COOKIE +WWV_FLOW_UTILITIES.GET_COOKIE_USER_NAME +WWV_FLOW_UTILITIES.GET_DATA_TYPE +WWV_FLOW_UTILITIES.GET_DATE_PICKER +WWV_FLOW_UTILITIES.GET_DEPENDENCY_OBJECTS +WWV_FLOW_UTILITIES.GET_DISPLAY_VALUE_GIVEN_LOV +WWV_FLOW_UTILITIES.GET_EXCEL_MIME_TYPE +WWV_FLOW_UTILITIES.GET_JAVASCRIPT_DATE_FORMAT +WWV_FLOW_UTILITIES.GET_LAYOUT_TABLE_ATTRIBUTES +WWV_FLOW_UTILITIES.GET_LOV_DELIMITERS +WWV_FLOW_UTILITIES.GET_ORACLE_DATE +WWV_FLOW_UTILITIES.GET_PRINT_DOCUMENT +WWV_FLOW_UTILITIES.GET_PROTOCOL +WWV_FLOW_UTILITIES.GET_REGION_NAME +WWV_FLOW_UTILITIES.GET_SUBSTITUTION_VALUE +WWV_FLOW_UTILITIES.GET_TEMP_LOV_DATA +WWV_FLOW_UTILITIES.GET_TEMP_LOV_INDEX +WWV_FLOW_UTILITIES.GET_TEMP_LOV_QUERY +WWV_FLOW_UTILITIES.GET_THEME_FILE +WWV_FLOW_UTILITIES.GET_TIME_FORMAT +WWV_FLOW_UTILITIES.GET_UN_FROM_COOKIE +WWV_FLOW_UTILITIES.GET_USING_CLAUSE +WWV_FLOW_UTILITIES.HOST_URL +WWV_FLOW_UTILITIES.HTML_EDITOR_LANGUAGE +WWV_FLOW_UTILITIES.INCREMENT_CALENDAR +WWV_FLOW_UTILITIES.INSTR_FROMSTR +WWV_FLOW_UTILITIES.INSTR_TOSTR +WWV_FLOW_UTILITIES.IN_LIST +WWV_FLOW_UTILITIES.IS_AVAILABLE_APPLICATION_ID +WWV_FLOW_UTILITIES.IS_BUILD_OPTION_ENABLED +WWV_FLOW_UTILITIES.IS_DATE +WWV_FLOW_UTILITIES.IS_NUMBER +WWV_FLOW_UTILITIES.IS_NUMERIC +WWV_FLOW_UTILITIES.IS_PUBLIC_USER +WWV_FLOW_UTILITIES.IS_VALID_ALIAS +WWV_FLOW_UTILITIES.IS_VALID_APPLICATION_NAME +WWV_FLOW_UTILITIES.IS_VALID_IDENTIFIER +WWV_FLOW_UTILITIES.ITE +WWV_FLOW_UTILITIES.ITEM_CHANGED +WWV_FLOW_UTILITIES.KEYVAL_NUM +WWV_FLOW_UTILITIES.KEYVAL_VC2 +WWV_FLOW_UTILITIES.LIST_MGR_DISPLAY +WWV_FLOW_UTILITIES.LIST_OF_ITEMS_CHANGED +WWV_FLOW_UTILITIES.LIST_OF_PAGES_CHANGED +WWV_FLOW_UTILITIES.LOAD_APEX_ARCHIVE_FILE +WWV_FLOW_UTILITIES.LOB_REPLACE +WWV_FLOW_UTILITIES.LOV_CHECKSUM +WWV_FLOW_UTILITIES.LOV_VALUES +WWV_FLOW_UTILITIES.LOV_VALUE_ARRAY +WWV_FLOW_UTILITIES.MINIMUM_FREE_FLOW +WWV_FLOW_UTILITIES.MINIMUM_FREE_PAGE +WWV_FLOW_UTILITIES.MONTH_CALENDAR +WWV_FLOW_UTILITIES.MY_URL +WWV_FLOW_UTILITIES.OPEN_JAVASCRIPT +WWV_FLOW_UTILITIES.OPEN_NOSCRIPT +WWV_FLOW_UTILITIES.PAGE_CHANGED +WWV_FLOW_UTILITIES.PAGE_CHECKSUM +WWV_FLOW_UTILITIES.PARSE +WWV_FLOW_UTILITIES.PARSE_QUERY_STRING +WWV_FLOW_UTILITIES.PAUSE +WWV_FLOW_UTILITIES.PERFORM_BINDS +WWV_FLOW_UTILITIES.PICK_DATE_CLASSIC_FORMAT_MASK +WWV_FLOW_UTILITIES.PICK_DATE_FORMAT_MASK +WWV_FLOW_UTILITIES.PREPARE_URL +WWV_FLOW_UTILITIES.PRINT_DOWNLOAD_HEADER +WWV_FLOW_UTILITIES.PROCESS_CALENDAR_DATE +WWV_FLOW_UTILITIES.PURGE_REGIONS_BY_APP +WWV_FLOW_UTILITIES.PURGE_REGIONS_BY_ID +WWV_FLOW_UTILITIES.PURGE_REGIONS_BY_NAME +WWV_FLOW_UTILITIES.PURGE_REGIONS_BY_PAGE +WWV_FLOW_UTILITIES.PURGE_STALE_REGIONS +WWV_FLOW_UTILITIES.QUICK_LINK +WWV_FLOW_UTILITIES.REDIRECT_URL +WWV_FLOW_UTILITIES.REDIRECT_URL_ARRAY +WWV_FLOW_UTILITIES.REMOVE_SPACES +WWV_FLOW_UTILITIES.REMOVE_TRAILING_WHITESPACE +WWV_FLOW_UTILITIES.REMWS +WWV_FLOW_UTILITIES.REWRITE_QUERY_STRING +WWV_FLOW_UTILITIES.SAVEKEY_NUM +WWV_FLOW_UTILITIES.SAVEKEY_VC2 +WWV_FLOW_UTILITIES.SHOW_AS_CHECKBOX +WWV_FLOW_UTILITIES.SHOW_AS_COMBOBOX +WWV_FLOW_UTILITIES.SHOW_AS_DISPLAY_ONLY +WWV_FLOW_UTILITIES.SHOW_AS_MULTIPLE_SELECT +WWV_FLOW_UTILITIES.SHOW_AS_MULTIPLE_SELECT2 +WWV_FLOW_UTILITIES.SHOW_AS_POPUP +WWV_FLOW_UTILITIES.SHOW_AS_POPUP_CALENDAR +WWV_FLOW_UTILITIES.SHOW_AS_POPUP_COLOR +WWV_FLOW_UTILITIES.SHOW_AS_RADIO_GROUP +WWV_FLOW_UTILITIES.SHOW_AS_RADIO_GROUP2 +WWV_FLOW_UTILITIES.SHOW_AS_SHUTTLE +WWV_FLOW_UTILITIES.SHOW_AS_TEXTAREA_HTML_EDITOR +WWV_FLOW_UTILITIES.SHOW_AS_TEXTAREA_WITH_CONTROLS +WWV_FLOW_UTILITIES.SHOW_ICON +WWV_FLOW_UTILITIES.SHOW_INVALID_INSTANCE_SCREEN +WWV_FLOW_UTILITIES.SHOW_IR_HELP +WWV_FLOW_UTILITIES.SHOW_LINE_NUMBER +WWV_FLOW_UTILITIES.STATIC_TO_QUERY +WWV_FLOW_UTILITIES.STRING_TO_TABLE +WWV_FLOW_UTILITIES.STRING_TO_TABLE2 +WWV_FLOW_UTILITIES.STRING_TO_TABLE3 +WWV_FLOW_UTILITIES.STRING_TO_TABLE4 +WWV_FLOW_UTILITIES.STRIPHTML +WWV_FLOW_UTILITIES.TABLE_TO_STRING +WWV_FLOW_UTILITIES.TABLE_TO_STRING2 +WWV_FLOW_UTILITIES.TABLE_TO_STRING3 +WWV_FLOW_UTILITIES.TIME_SINCE +WWV_FLOW_UTILITIES.TODAY_CALENDAR +WWV_FLOW_UTILITIES.UNESCAPE_URL +WWV_FLOW_UTILITIES.URLENCODE +WWV_FLOW_UTILITIES.URL_DECODE2 +WWV_FLOW_UTILITIES.URL_ENCODE +WWV_FLOW_UTILITIES.URL_ENCODE2 +WWV_FLOW_UTILITIES.WEEKLY_CALENDAR +WWV_FLOW_UTILITIES.WWV_FLOW_TEAM_TAG_SYNC +WWV_FLOW_VAL. +WWV_FLOW_VAL.VERIFY_USER +WWV_FLOW_VALIDATION. +WWV_FLOW_VALIDATION.PERFORM +WWV_FLOW_VALIDATIONS_T1. +WWV_FLOW_VERSION_T1. +WWV_FLOW_WEBSERVICES_API. +WWV_FLOW_WEBSERVICES_API.BLOB2CLOBBASE64 +WWV_FLOW_WEBSERVICES_API.CLOBBASE642BLOB +WWV_FLOW_WEBSERVICES_API.MAKE_REQUEST +WWV_FLOW_WEBSERVICES_API.MAKE_REST_REQUEST +WWV_FLOW_WEBSERVICES_API.PARSE_RESPONSE +WWV_FLOW_WEBSERVICES_API.PARSE_RESPONSE_CLOB +WWV_FLOW_WEBSERVICES_API.PARSE_XML +WWV_FLOW_WEBSERVICES_API.PARSE_XML_CLOB +WWV_FLOW_WEB_SERVICES. +WWV_FLOW_WEB_SERVICES.APPEND_ELEMENT +WWV_FLOW_WEB_SERVICES.APPEND_ELEMENT2 +WWV_FLOW_WEB_SERVICES.CREATE_AUTH_PARMS +WWV_FLOW_WEB_SERVICES.CREATE_PROCESS_PARMS +WWV_FLOW_WEB_SERVICES.CREATE_REST_WEB_REFERENCE +WWV_FLOW_WEB_SERVICES.CREATE_WEB_SERVICE +WWV_FLOW_WEB_SERVICES.FIND_PROXY +WWV_FLOW_WEB_SERVICES.FIND_SERVICES_BY_BUSNAME +WWV_FLOW_WEB_SERVICES.FIND_SERVICES_BY_SERVNAME +WWV_FLOW_WEB_SERVICES.GENERATE_BODY +WWV_FLOW_WEB_SERVICES.GENERATE_ENVELOPE +WWV_FLOW_WEB_SERVICES.GENERATE_HEADER +WWV_FLOW_WEB_SERVICES.GENERATE_QUERY +WWV_FLOW_WEB_SERVICES.GENERATE_QUERY_MANUAL +WWV_FLOW_WEB_SERVICES.GET_LAST_ERROR_MESSAGE +WWV_FLOW_WEB_SERVICES.GET_PARM_VALUE +WWV_FLOW_WEB_SERVICES.GET_PATH +WWV_FLOW_WEB_SERVICES.GET_SERVICE_DETAILS +WWV_FLOW_WEB_SERVICES.MAKE_REQUEST +WWV_FLOW_WEB_SERVICES.MAKE_REST_REQUEST +WWV_FLOW_WEB_SERVICES.MAKE_SOAP_REQUEST +WWV_FLOW_WEB_SERVICES.PARSE +WWV_FLOW_WEB_SERVICES.PRINT_RENDERED_RESULT +WWV_FLOW_WEB_SERVICES.RENDER_REQUEST +WWV_FLOW_WEB_SERVICES.UDDI_REQUEST +WWV_FLOW_WEB_SERVICES.UPDATE_PROCESS_PARMS +WWV_FLOW_WEB_SERVICES.UPDATE_REST_WEB_REFERENCE +WWV_FLOW_WEB_SERVICES.WSDL_ANALYZE +WWV_FLOW_WEB_SERVICES_T1. +WWV_FLOW_WIZARD_API. +WWV_FLOW_WIZARD_API.ARRAY_ELEMENT +WWV_FLOW_WIZARD_API.COPY_BUTTON +WWV_FLOW_WIZARD_API.COPY_NAMED_LOV +WWV_FLOW_WIZARD_API.COPY_PAGE_ITEM +WWV_FLOW_WIZARD_API.CREATE_ACCESS_CONTROL +WWV_FLOW_WIZARD_API.CREATE_ACL_TAB_PRIV +WWV_FLOW_WIZARD_API.CREATE_BREADCRUMB_REGION +WWV_FLOW_WIZARD_API.CREATE_BUTTON +WWV_FLOW_WIZARD_API.CREATE_CALENDAR_PAGE +WWV_FLOW_WIZARD_API.CREATE_CHART_PAGE +WWV_FLOW_WIZARD_API.CREATE_DATA_LOAD_WIZARD +WWV_FLOW_WIZARD_API.CREATE_DYNAMIC_QUERY +WWV_FLOW_WIZARD_API.CREATE_DYNAMIC_QUERY_REGION +WWV_FLOW_WIZARD_API.CREATE_FLASH_CHART +WWV_FLOW_WIZARD_API.CREATE_FLASH_CHART5 +WWV_FLOW_WIZARD_API.CREATE_FLASH_CHART5_REGION +WWV_FLOW_WIZARD_API.CREATE_FLASH_CHART_REGION +WWV_FLOW_WIZARD_API.CREATE_FORM_AND_LIST_VIEW_PAGE +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_EQUIJOIN +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_SP +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_TABLE +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_WS +WWV_FLOW_WIZARD_API.CREATE_FORM_ON_WS_RPT +WWV_FLOW_WIZARD_API.CREATE_GLOBAL_PAGE +WWV_FLOW_WIZARD_API.CREATE_HOME_PAGE +WWV_FLOW_WIZARD_API.CREATE_IR_REGION_ON_COL_INFO +WWV_FLOW_WIZARD_API.CREATE_JQM_LIST_VIEW_REGION +WWV_FLOW_WIZARD_API.CREATE_JSTREE +WWV_FLOW_WIZARD_API.CREATE_JSTREE_REGION +WWV_FLOW_WIZARD_API.CREATE_LOGIN_PAGE +WWV_FLOW_WIZARD_API.CREATE_MASTER_DETAIL +WWV_FLOW_WIZARD_API.CREATE_NAMED_LOV +WWV_FLOW_WIZARD_API.CREATE_NEXT_PREV_PK_PROCESS +WWV_FLOW_WIZARD_API.CREATE_PAGE +WWV_FLOW_WIZARD_API.CREATE_PAGE_DYNAMIC_ACTION +WWV_FLOW_WIZARD_API.CREATE_QUERY_AND_UPDATE_PAGE +WWV_FLOW_WIZARD_API.CREATE_QUERY_REGION +WWV_FLOW_WIZARD_API.CREATE_REGION_PLUGIN_PAGE +WWV_FLOW_WIZARD_API.CREATE_REPORT_ON_WS +WWV_FLOW_WIZARD_API.CREATE_REPORT_PAGE +WWV_FLOW_WIZARD_API.CREATE_REPORT_PAGE_STRUCTURED +WWV_FLOW_WIZARD_API.CREATE_REPORT_QUERY +WWV_FLOW_WIZARD_API.CREATE_SUMMARY_PAGE +WWV_FLOW_WIZARD_API.CREATE_SVG_CHART +WWV_FLOW_WIZARD_API.CREATE_TREE +WWV_FLOW_WIZARD_API.CREATE_UPDATEABLE_REPORT +WWV_FLOW_WIZARD_API.CREATE_USER_INTERFACE +WWV_FLOW_WIZARD_API.CREATE_WIZARD +WWV_FLOW_WIZARD_API.DELETE_REGION +WWV_FLOW_WIZARD_API.FLASH_CHART_EXISTS +WWV_FLOW_WIZARD_API.GENERATE_TREE_QUERY +WWV_FLOW_WIZARD_API.GENERATE_TREE_REGION_QUERY +WWV_FLOW_WIZARD_API.GENERATE_UPDATABLE_RPT_QUERY +WWV_FLOW_WIZARD_API.GET_COLUMN_DATA_TYPE +WWV_FLOW_WIZARD_API.GET_FLOW_OWNER +WWV_FLOW_WIZARD_API.GET_FOOTER_DEFAULT_TEMPLATE_ID +WWV_FLOW_WIZARD_API.GET_FOOTER_TOOLBAR_REGION_ID +WWV_FLOW_WIZARD_API.GET_GROUP_REGION_ID +WWV_FLOW_WIZARD_API.GET_HEADER_DEFAULT_TEMPLATE_ID +WWV_FLOW_WIZARD_API.GET_HEADER_TOOLBAR_REGION_ID +WWV_FLOW_WIZARD_API.GET_ITEM_BIND_VARIABLE +WWV_FLOW_WIZARD_API.GET_ITEM_SUBSTITUTION_VALUE +WWV_FLOW_WIZARD_API.GET_OWNER +WWV_FLOW_WIZARD_API.GET_PK +WWV_FLOW_WIZARD_API.GET_QUERY_COLUMNS +WWV_FLOW_WIZARD_API.GET_SHORTCUT_NAME +WWV_FLOW_WIZARD_API.GET_VALID_ITEM_NAME +WWV_FLOW_WIZARD_API.GET_VARCHAR_QUERY_COLUMNS +WWV_FLOW_WIZARD_API.HAS_REGION_BUTTONS +WWV_FLOW_WIZARD_API.HAS_REGION_DELETABLE_LISTS +WWV_FLOW_WIZARD_API.HAS_REGION_DYNAMIC_ACTIONS +WWV_FLOW_WIZARD_API.HAS_REGION_ITEMS +WWV_FLOW_WIZARD_API.HAS_REGION_PROCESSES +WWV_FLOW_WIZARD_API.HAS_REGION_SUB_REGIONS +WWV_FLOW_WIZARD_API.HAS_REGION_VALIDATIONS +WWV_FLOW_WIZARD_API.IR_COL_GROUP_EXISTS +WWV_FLOW_WIZARD_API.IR_REPORT_EXISTS +WWV_FLOW_WIZARD_API.IS_OLD_PPR_TEMPLATE +WWV_FLOW_WIZARD_API.JSTREE_EXISTS +WWV_FLOW_WIZARD_API.MAP_EXISTS +WWV_FLOW_WIZARD_API.PAGE_EXISTS +WWV_FLOW_WIZARD_API.SHORTCUT_EXIST +WWV_FLOW_WIZARD_API.SHORTCUT_NAME_EXIST +WWV_FLOW_WIZARD_API.TABLE_VIEW_EXISTS +WWV_FLOW_WIZARD_API.TABULAR_FORM_EXISTS +WWV_FLOW_WIZARD_API.UI_DEF_GROUPS_EXIST +WWV_FLOW_WIZARD_API.UPDATEABLE_QUERY_EXISTS +WWV_FLOW_WIZARD_API.UPDATE_JS_CODE_W_SHORTCUT +WWV_FLOW_WIZARD_API.UPDATE_REPORT_QUERY_SQL_STMTS +WWV_FLOW_WIZ_CONFIRM. +WWV_FLOW_WIZ_CONFIRM.CHANGE_INTERACTIVE_RPT_REGION +WWV_FLOW_WIZ_CONFIRM.COPY_APPLICATION +WWV_FLOW_WIZ_CONFIRM.COPY_PAGE +WWV_FLOW_WIZ_CONFIRM.COPY_PAGE_OTHER_APP +WWV_FLOW_WIZ_CONFIRM.CREATE_ACL +WWV_FLOW_WIZ_CONFIRM.CREATE_APPLICATION +WWV_FLOW_WIZ_CONFIRM.CREATE_APP_FROM_TEMPLATE +WWV_FLOW_WIZ_CONFIRM.CREATE_AUTH_SCHEME +WWV_FLOW_WIZ_CONFIRM.CREATE_BREADCRUMB_REGION +WWV_FLOW_WIZ_CONFIRM.CREATE_DATA_LOAD_WIZARD +WWV_FLOW_WIZ_CONFIRM.CREATE_DEMO_APP +WWV_FLOW_WIZ_CONFIRM.CREATE_DYNAMIC_QUERY +WWV_FLOW_WIZ_CONFIRM.CREATE_FLASH_CHART +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_QUERY +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_SP +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_TABLE +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_WS +WWV_FLOW_WIZ_CONFIRM.CREATE_FORM_ON_WS_RPT +WWV_FLOW_WIZ_CONFIRM.CREATE_GLOBAL_PAGE +WWV_FLOW_WIZ_CONFIRM.CREATE_HTML_CHART +WWV_FLOW_WIZ_CONFIRM.CREATE_INSTANT_APPLICATION +WWV_FLOW_WIZ_CONFIRM.CREATE_MASTER_DETAIL +WWV_FLOW_WIZ_CONFIRM.CREATE_MONTHLY_CALENDAR +WWV_FLOW_WIZ_CONFIRM.CREATE_PAGE +WWV_FLOW_WIZ_CONFIRM.CREATE_QUERY_AND_UPDATE +WWV_FLOW_WIZ_CONFIRM.CREATE_REGION_PLUGIN_PAGE +WWV_FLOW_WIZ_CONFIRM.CREATE_SQL_REPORT +WWV_FLOW_WIZ_CONFIRM.CREATE_STANDARD_TAB +WWV_FLOW_WIZ_CONFIRM.CREATE_STRUCTURED_REPORT +WWV_FLOW_WIZ_CONFIRM.CREATE_SUCCESS_PAGE +WWV_FLOW_WIZ_CONFIRM.CREATE_SUMMARY_PAGE +WWV_FLOW_WIZ_CONFIRM.CREATE_SVG_CHART +WWV_FLOW_WIZ_CONFIRM.CREATE_TABULAR_FORM +WWV_FLOW_WIZ_CONFIRM.CREATE_TREE +WWV_FLOW_WIZ_CONFIRM.CREATE_WARNING_PAGE +WWV_FLOW_WIZ_CONFIRM.CREATE_WIZARD +WWV_FLOW_WIZ_CONFIRM.DELETE_LIST_REGION_WARNING +WWV_FLOW_WIZ_CONFIRM.MIGRATE_FLASH_CHART +WWV_FLOW_WIZ_CONFIRM.MIGRATE_HTML_TO_HTML5 +WWV_FLOW_WIZ_CONFIRM.MIGRATE_SVG_TO_HTML5 +WWV_FLOW_WIZ_CONFIRM.REGULAR_EXP +WWV_FLOW_WIZ_CONFIRM.SELECT_RPT_TEMPLATE +WWV_FLOW_WIZ_CONFIRM.STRUCTURED_QUERY_CONDITION +WWV_FLOW_WORKSHEET. +WWV_FLOW_WORKSHEET.GET_ALL_COLUMN_ATTRIBUTES +WWV_FLOW_WORKSHEET.GET_FILTER_QUERY +WWV_FLOW_WORKSHEET.GET_REPORT_ATTRIBUTES +WWV_FLOW_WORKSHEET.GET_REPORT_SUMMARY_TEXT +WWV_FLOW_WORKSHEET.GET_SINGLE_ROW_QUERY +WWV_FLOW_WORKSHEET.GET_WORKSHEET_ATTRIBUTES +WWV_FLOW_WORKSHEET.GET_WORKSHEET_REPORT_QUERY +WWV_FLOW_WORKSHEET.RESET_GLOBALS +WWV_FLOW_WORKSHEET.SHOW_FULL_WORKSHEET_REGION +WWV_FLOW_WORKSHEET.SHOW_REGION +WWV_FLOW_WORKSHEET.SHOW_REPORT +WWV_FLOW_WORKSHEET.SHOW_REPORT_AND_WORKSHEET_BAR +WWV_FLOW_WORKSHEETS_T1. +WWV_FLOW_WORKSHEETS_T2. +WWV_FLOW_WORKSHEETS_T3. +WWV_FLOW_WORKSHEET_AJAX. +WWV_FLOW_WORKSHEET_AJAX.SORT_WIDGET +WWV_FLOW_WORKSHEET_AJAX.SORT_WIDGET_HTML +WWV_FLOW_WORKSHEET_AJAX.UVALUES +WWV_FLOW_WORKSHEET_AJAX.WIDGET +WWV_FLOW_WORKSHEET_API. +WWV_FLOW_WORKSHEET_API.ADD_FILTER_USING_ALIAS +WWV_FLOW_WORKSHEET_API.ADD_OR_UPDATE_COMPUTATION +WWV_FLOW_WORKSHEET_API.ADD_OR_UPDATE_FILTER +WWV_FLOW_WORKSHEET_API.ADD_OR_UPDATE_HIGHLIGHT +WWV_FLOW_WORKSHEET_API.BREAK_ON_COLUMN +WWV_FLOW_WORKSHEET_API.CLEAR_FILTER +WWV_FLOW_WORKSHEET_API.CLEAR_FILTERS_ON_COLUMN +WWV_FLOW_WORKSHEET_API.CLEAR_FLASHBACK +WWV_FLOW_WORKSHEET_API.CLEAR_HIGHLIGHT +WWV_FLOW_WORKSHEET_API.CLEAR_REPORT_SETTINGS +WWV_FLOW_WORKSHEET_API.CLEAR_REPORT_USING_ALIAS +WWV_FLOW_WORKSHEET_API.CLEAR_WORKSHEET_PREFS +WWV_FLOW_WORKSHEET_API.CREATE_AGGREGATE +WWV_FLOW_WORKSHEET_API.CREATE_CATEGORY +WWV_FLOW_WORKSHEET_API.CREATE_DATAVIEW +WWV_FLOW_WORKSHEET_API.CREATE_WORKSHEET_REPORT +WWV_FLOW_WORKSHEET_API.CREATE_WS_COL_GROUP +WWV_FLOW_WORKSHEET_API.CREATE_WS_REPORT_CONDITION +WWV_FLOW_WORKSHEET_API.DELETE_CATEGORY +WWV_FLOW_WORKSHEET_API.DELETE_CHART +WWV_FLOW_WORKSHEET_API.DELETE_COMPUTATION +WWV_FLOW_WORKSHEET_API.DELETE_GROUP_BY +WWV_FLOW_WORKSHEET_API.DELETE_NOTIFY +WWV_FLOW_WORKSHEET_API.DELETE_REPORT +WWV_FLOW_WORKSHEET_API.DELETE_REPORTS_FOR_APP +WWV_FLOW_WORKSHEET_API.DELETE_REPORTS_FOR_USER +WWV_FLOW_WORKSHEET_API.DELETE_SAVED_REPORT +WWV_FLOW_WORKSHEET_API.DELETE_SUBSCRIPTION +WWV_FLOW_WORKSHEET_API.DO_APP_SUBSTITUTIONS +WWV_FLOW_WORKSHEET_API.DO_NOTIFY +WWV_FLOW_WORKSHEET_API.EDIT_REPORT_ALIAS +WWV_FLOW_WORKSHEET_API.FETCH_COMPUTATION +WWV_FLOW_WORKSHEET_API.FETCH_HIGHLIGHT +WWV_FLOW_WORKSHEET_API.GET_COLUMN_INFO +WWV_FLOW_WORKSHEET_API.GET_COLUMN_LIST +WWV_FLOW_WORKSHEET_API.GET_CONDITION_SQL +WWV_FLOW_WORKSHEET_API.GET_FILTER_OPTERATOR +WWV_FLOW_WORKSHEET_API.GET_FORM_NAVIGATION +WWV_FLOW_WORKSHEET_API.GET_PRIMARY_REPORT_ID +WWV_FLOW_WORKSHEET_API.GET_REPORT_ID_USING_ALIAS +WWV_FLOW_WORKSHEET_API.GET_REPORT_NAME +WWV_FLOW_WORKSHEET_API.GET_WORKSHEET_ID +WWV_FLOW_WORKSHEET_API.GET_WORKSHEET_ID_TO_USE +WWV_FLOW_WORKSHEET_API.HIDE_COLUMN +WWV_FLOW_WORKSHEET_API.HIGHLIGHT_EXPR +WWV_FLOW_WORKSHEET_API.IR_ACTIONS_MENU_SETTINGS +WWV_FLOW_WORKSHEET_API.IR_RESET_PAGINATION +WWV_FLOW_WORKSHEET_API.REMOVE_AGGREGATE +WWV_FLOW_WORKSHEET_API.REMOVE_BREAK_ON_COLUMN +WWV_FLOW_WORKSHEET_API.RENAME_REPORT +WWV_FLOW_WORKSHEET_API.RESET_PAGINATION +WWV_FLOW_WORKSHEET_API.RESET_REPORT_SETTINGS +WWV_FLOW_WORKSHEET_API.RESET_REPORT_USING_ALIAS +WWV_FLOW_WORKSHEET_API.SAVED_REPORT_EXISTS +WWV_FLOW_WORKSHEET_API.SAVE_CALENDAR +WWV_FLOW_WORKSHEET_API.SAVE_CHART +WWV_FLOW_WORKSHEET_API.SAVE_COLUMN_LIST +WWV_FLOW_WORKSHEET_API.SAVE_DERIVED_REPORT +WWV_FLOW_WORKSHEET_API.SAVE_GROUP_BY +WWV_FLOW_WORKSHEET_API.SAVE_GROUP_BY_SORT +WWV_FLOW_WORKSHEET_API.SAVE_NOTIFY +WWV_FLOW_WORKSHEET_API.SAVE_ORDERING +WWV_FLOW_WORKSHEET_API.SEND_EMAIL +WWV_FLOW_WORKSHEET_API.SET_CONTROL_BREAKS +WWV_FLOW_WORKSHEET_API.SET_FLASHBACK +WWV_FLOW_WORKSHEET_API.SET_REPORT_TYPE +WWV_FLOW_WORKSHEET_API.SHOW_COLUMN +WWV_FLOW_WORKSHEET_API.SHOW_COLUMN_IN_DEFAULT_REPORT +WWV_FLOW_WORKSHEET_API.SHOW_SINGLE_ROW_VIEW +WWV_FLOW_WORKSHEET_API.SORT_ON_COLUMN +WWV_FLOW_WORKSHEET_API.SORT_ON_GROUP_BY_COLUMN +WWV_FLOW_WORKSHEET_API.TOGGLE_BREAK_ON_COLUMN +WWV_FLOW_WORKSHEET_API.TOGGLE_FILTER +WWV_FLOW_WORKSHEET_API.TOGGLE_FLASHBACK +WWV_FLOW_WORKSHEET_API.TOGGLE_HIGHLIGHTING +WWV_FLOW_WORKSHEET_API.UPDATE_CATEGORY +WWV_FLOW_WORKSHEET_DIALOGUE. +WWV_FLOW_WORKSHEET_DIALOGUE.GET_COLUMN_LIST +WWV_FLOW_WORKSHEET_DIALOGUE.GET_PSEUDO_COLUMN_LABEL +WWV_FLOW_WORKSHEET_DIALOGUE.GET_ROW_FILTER_OPERATORS +WWV_FLOW_WORKSHEET_DIALOGUE.GET_SQL_FUNCTIONS +WWV_FLOW_WORKSHEET_DIALOGUE.PRINT_BUTTON +WWV_FLOW_WORKSHEET_DIALOGUE.PRINT_BUTTON2 +WWV_FLOW_WORKSHEET_DIALOGUE.PRINT_COLUMN_LOV +WWV_FLOW_WORKSHEET_DIALOGUE.SAVE_COLUMN_LIST +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_AGGREGATE +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_CALENDAR +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_CHART +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_COLUMN_LIST +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_COMPUTATION +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_CONTROL_BREAK +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_DELETE +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_DOWNLOAD +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_FILTER +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_FLASHBACK +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_FORMAT_MASK +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_GROUP_BY +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_GROUP_BY_SORT +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_HIGHLIGHT +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_NOTIFY +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_ORDERING +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_RESET +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_SAVE +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_SAVE_DEFAULT +WWV_FLOW_WORKSHEET_DIALOGUE.SHOW_SELECT_COLUMNS +WWV_FLOW_WORKSHEET_EXPR. +WWV_FLOW_WORKSHEET_EXPR.GET_COMPUTE_SQL +WWV_FLOW_WORKSHEET_EXPR.GET_COMPUTE_SQL2 +WWV_FLOW_WORKSHEET_EXPR.GET_ROW_FILTER_SQL +WWV_FLOW_WORKSHEET_EXPR.HIGHLIGHT_EXPR +WWV_FLOW_WORKSHEET_EXPR.IN_LIST +WWV_FLOW_WORKSHEET_EXPR.IS_VALID_FORMAT_MASK +WWV_FLOW_WORKSHEET_EXPR.TOKENIZE +WWV_FLOW_WORKSHEET_EXPR.VALIDATE_COMP_EXPRESSION +WWV_FLOW_WORKSHEET_FORM. +WWV_FLOW_WORKSHEET_FORM.FORM_NAVIGATION +WWV_FLOW_WORKSHEET_FORM.GET_COLUMN_VALUE +WWV_FLOW_WORKSHEET_FORM.GET_LOV_QUERY +WWV_FLOW_WORKSHEET_FORM.SHOW +WWV_FLOW_WORKSHEET_NOTIFY_T1. +WWV_FLOW_WORKSHEET_STANDARD. +WWV_FLOW_WORKSHEET_STANDARD.ALL_COLUMN_FUNCTION_DISABLED +WWV_FLOW_WORKSHEET_STANDARD.CHECK_COMPUTATION_EXPR +WWV_FLOW_WORKSHEET_STANDARD.CHECK_FILTER_EXPR +WWV_FLOW_WORKSHEET_STANDARD.CHECK_FLASHBACK_TIME +WWV_FLOW_WORKSHEET_STANDARD.CHECK_HIGHLIGHT +WWV_FLOW_WORKSHEET_STANDARD.COL_HEADING_CHAR_TO_NUM +WWV_FLOW_WORKSHEET_STANDARD.COL_HEADING_NUM_TO_CHAR +WWV_FLOW_WORKSHEET_STANDARD.DELETE_REPORT +WWV_FLOW_WORKSHEET_STANDARD.ESC_IR_COL_HEADER +WWV_FLOW_WORKSHEET_STANDARD.GET_COLUMN_ATTRIBUTES +WWV_FLOW_WORKSHEET_STANDARD.GET_COLUMN_DIFF +WWV_FLOW_WORKSHEET_STANDARD.GET_COLUMN_LABEL +WWV_FLOW_WORKSHEET_STANDARD.GET_COLUMN_TYPE +WWV_FLOW_WORKSHEET_STANDARD.GET_COL_PRIVS +WWV_FLOW_WORKSHEET_STANDARD.GET_COMPUTE_SQL +WWV_FLOW_WORKSHEET_STANDARD.GET_CONDITION_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_DBMS_SQL_CURSOR +WWV_FLOW_WORKSHEET_STANDARD.GET_DB_COLUMN_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_GROUP_BY_FUNCTION_LABEL +WWV_FLOW_WORKSHEET_STANDARD.GET_GROUP_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_IR_SECURITY_GROUP_ID +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_COMPUTED_COLUMN_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_COMPUTED_IDENTIFIER +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_DB_COLUMN_NAME +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_DISPLAY_ORDER_NUMBER +WWV_FLOW_WORKSHEET_STANDARD.GET_NEXT_IDENTIFIER +WWV_FLOW_WORKSHEET_STANDARD.GET_PSEUDOCOLUMN_ATTRIBUTES +WWV_FLOW_WORKSHEET_STANDARD.GET_REPORT_ID +WWV_FLOW_WORKSHEET_STANDARD.GET_REQUESTED_REPORT_ID +WWV_FLOW_WORKSHEET_STANDARD.GET_ROW_FILTER_SQL +WWV_FLOW_WORKSHEET_STANDARD.GET_SINGLE_COLUMN_ATTRIBUTES +WWV_FLOW_WORKSHEET_STANDARD.INIT_WORKSHEET_PREFS +WWV_FLOW_WORKSHEET_STANDARD.IS_COLUMN_FILTERED +WWV_FLOW_WORKSHEET_STANDARD.IS_VALID_IR_QUERY +WWV_FLOW_WORKSHEET_STANDARD.SAVE_COL_PRIVS +WWV_FLOW_WORKSHEET_STANDARD.SAVE_DERIVED_REPORT +WWV_FLOW_WORKSHEET_STANDARD.SET_WORKSHEET_PREFS +WWV_FLOW_WORKSHEET_STANDARD.SET_WS_APP_DATE_FORMAT +WWV_FLOW_WORKSHEET_STANDARD.SHOW_WORKSHEET_BUTTON +WWV_FLOW_WORKSHEET_STANDARD.SYNCH_REPORT_COLUMNS +WWV_FLOW_WORKSHEET_STANDARD.USER_MAY_EDIT_COL +WWV_FLOW_WORKSHEET_STANDARD.USER_MAY_EDIT_WORKSHEET +WWV_FLOW_WORKSHEET_STANDARD.USER_MAY_VIEW_COL +WWV_FLOW_WORKSHEET_UTIL. +WWV_FLOW_WORKSHEET_UTIL.ADD_FILTER +WWV_FLOW_WORKSHEET_UTIL.CHANGE_REPORT_OWNER +WWV_FLOW_WORKSHEET_UTIL.CHANGE_SUBSCRIPTION_LANG +WWV_FLOW_WORKSHEET_UTIL.CLEAR_REPORT +WWV_FLOW_WORKSHEET_UTIL.DELETE_REPORT +WWV_FLOW_WORKSHEET_UTIL.DELETE_SUBSCRIPTION +WWV_FLOW_WORKSHEET_UTIL.GET_LAST_VIEWED_REPORT_ID +WWV_FLOW_WORKSHEET_UTIL.GET_REPORT +WWV_FLOW_WORKSHEET_UTIL.RESET_REPORT +WWV_FLOW_WORKSPACE_REPORTS. +WWV_FLOW_WORKSPACE_REPORTS.GET_PENDING_EMAIL +WWV_FLOW_WORKSPACE_REPORTS.GET_PENDING_REQUESTS +WWV_FLOW_WORKSPACE_REPORTS.GET_PURGE_SUMMARY +WWV_FLOW_WORKSPACE_REPORTS.GET_PURGE_SUMMARY2 +WWV_FLOW_WORKSPACE_REPORTS.GET_REQUESTS +WWV_FLOW_WORKSPACE_REPORTS.GET_WORKSPACE_USAGE_OUTPUT +WWV_FLOW_WORKSPACE_REPORTS.REPORT_WORKSPACE_USAGE +WWV_FLOW_WORKSPACE_SUMMARY_T1. +WWV_FLOW_WS_API. +WWV_FLOW_WS_API.ADD_ACL_ENTRY +WWV_FLOW_WS_API.ADD_COLUMN +WWV_FLOW_WS_API.ADD_LINK +WWV_FLOW_WS_API.ADD_NOTE +WWV_FLOW_WS_API.ADD_TAGS +WWV_FLOW_WS_API.ADD_WS_PAGE +WWV_FLOW_WS_API.ADMIN_EXISTS +WWV_FLOW_WS_API.ALIAS_EXISTS +WWV_FLOW_WS_API.ANNOTATION_EXISTS +WWV_FLOW_WS_API.BUILD_WS_RPT_LINK_URL +WWV_FLOW_WS_API.CHANGE_COLUMN_TYPE +WWV_FLOW_WS_API.CHANGE_WS_RPT_QUERY +WWV_FLOW_WS_API.CHECK_PLSQL +WWV_FLOW_WS_API.CHECK_SECTION_LOST_UPDATE +WWV_FLOW_WS_API.COPY_PAGE +WWV_FLOW_WS_API.COPY_WEBSHEET +WWV_FLOW_WS_API.CREATE_ACL_COLLECTION +WWV_FLOW_WS_API.CREATE_ACL_USER +WWV_FLOW_WS_API.CREATE_ATTACHMENT_COLLECTION +WWV_FLOW_WS_API.CREATE_CLOUD_WEBSHEET +WWV_FLOW_WS_API.CREATE_DATA_GRID_FROM_CP_PASTE +WWV_FLOW_WS_API.CREATE_DATA_GRID_FROM_SCRATCH +WWV_FLOW_WS_API.CREATE_HISTORY_COLLECTION +WWV_FLOW_WS_API.CREATE_LINK_COLLECTION +WWV_FLOW_WS_API.CREATE_NOTE_COLLECTION +WWV_FLOW_WS_API.CREATE_PG_SEC_COLLECTION +WWV_FLOW_WS_API.CREATE_SEARCH_COLLECTION +WWV_FLOW_WS_API.CREATE_SECTION_COLLECTION +WWV_FLOW_WS_API.CREATE_SEC_HISTORY_COLLECTION +WWV_FLOW_WS_API.CREATE_TAG_COLLECTION +WWV_FLOW_WS_API.CREATE_WEBPAGE +WWV_FLOW_WS_API.CREATE_WS_APP +WWV_FLOW_WS_API.CREATE_WS_REPORT +WWV_FLOW_WS_API.DELETE_ACL_ENTRY +WWV_FLOW_WS_API.DELETE_COLUMN_GROUP +WWV_FLOW_WS_API.DELETE_COLUMN_VALIDATION +WWV_FLOW_WS_API.DELETE_LINK +WWV_FLOW_WS_API.DELETE_LOV +WWV_FLOW_WS_API.DELETE_NOTE +WWV_FLOW_WS_API.DELETE_ROW +WWV_FLOW_WS_API.DELETE_ROWS +WWV_FLOW_WS_API.DELETE_TAG +WWV_FLOW_WS_API.DELETE_WEBPAGE +WWV_FLOW_WS_API.DELETE_WEBPAGE_SECTION +WWV_FLOW_WS_API.DELETE_WEBSHEET +WWV_FLOW_WS_API.DELETE_WS_APP +WWV_FLOW_WS_API.DISPLAY_CREATE_WS_APP_CONFIRM +WWV_FLOW_WS_API.DUPLICATE_FOUND_IN_ARRAY +WWV_FLOW_WS_API.EDIT_WS_REPORT_ATTR +WWV_FLOW_WS_API.EDIT_WS_RPT_COLUMN_ATTR +WWV_FLOW_WS_API.FETCH_CHART_SECTION +WWV_FLOW_WS_API.FETCH_DATA_SECTION +WWV_FLOW_WS_API.FETCH_NAV_SECTION +WWV_FLOW_WS_API.FETCH_NOTE +WWV_FLOW_WS_API.FETCH_SECTION_CONTENT +WWV_FLOW_WS_API.FETCH_SECTION_INFO +WWV_FLOW_WS_API.FETCH_TAG +WWV_FLOW_WS_API.FILL_COLUMN_VALUE +WWV_FLOW_WS_API.GET_ACL_TABLE +WWV_FLOW_WS_API.GET_ATTACHMENT_INFO +WWV_FLOW_WS_API.GET_CONDITION_DISPLAY +WWV_FLOW_WS_API.GET_DATAGRID_COUNT +WWV_FLOW_WS_API.GET_DATAGRID_ROW_COUNT +WWV_FLOW_WS_API.GET_DATA_GRID_ALIAS +WWV_FLOW_WS_API.GET_DATA_GRID_ID +WWV_FLOW_WS_API.GET_DBMS_SQL_CURSOR +WWV_FLOW_WS_API.GET_FILE_COUNT +WWV_FLOW_WS_API.GET_FILE_SIZE +WWV_FLOW_WS_API.GET_HOME_PAGE_ID +WWV_FLOW_WS_API.GET_ITEM_HELP +WWV_FLOW_WS_API.GET_ITEM_VALUE +WWV_FLOW_WS_API.GET_LINK_INFO +WWV_FLOW_WS_API.GET_LOGO +WWV_FLOW_WS_API.GET_NEXT_WEBPG_SECTION_SEQ +WWV_FLOW_WS_API.GET_NOTE_COUNT +WWV_FLOW_WS_API.GET_NOTE_INFO +WWV_FLOW_WS_API.GET_PAGE_ALIAS +WWV_FLOW_WS_API.GET_PAGE_COUNT +WWV_FLOW_WS_API.GET_REPORT_COUNT +WWV_FLOW_WS_API.GET_SECTION_CLOB +WWV_FLOW_WS_API.GET_SECTION_COUNT +WWV_FLOW_WS_API.GET_SECTION_NAME +WWV_FLOW_WS_API.GET_TAG_COUNT +WWV_FLOW_WS_API.GET_TAG_INFO +WWV_FLOW_WS_API.GET_UTILIZATION_NUM +WWV_FLOW_WS_API.GET_WEBSHEET_ATTR +WWV_FLOW_WS_API.GET_WEBSHEET_NAME +WWV_FLOW_WS_API.GET_WS_APP_ID +WWV_FLOW_WS_API.GET_WS_REPORT_ATTR +WWV_FLOW_WS_API.INLINE_DATE_PICKER_OPTIONS +WWV_FLOW_WS_API.IS_ALPHANUMERIC +WWV_FLOW_WS_API.IS_APP_HOME_PAGE +WWV_FLOW_WS_API.MAX_COL_LIMIT_REACHED +WWV_FLOW_WS_API.MOVE_SECTION_TO_EXISTING_PAGE +WWV_FLOW_WS_API.MOVE_SECTION_TO_NEW_PAGE +WWV_FLOW_WS_API.P33_FETCH_BLOB_FORMAT +WWV_FLOW_WS_API.PAGE_ANNOTATION_EXISTS +WWV_FLOW_WS_API.PROCESS_ROW +WWV_FLOW_WS_API.REMOVE_COLUMN +WWV_FLOW_WS_API.REPLACE_COLUMN_VALUE +WWV_FLOW_WS_API.RUN_BLOCK +WWV_FLOW_WS_API.RUN_QUERY +WWV_FLOW_WS_API.SAVE_CHECKED +WWV_FLOW_WS_API.SAVE_COLUMN_GROUP +WWV_FLOW_WS_API.SAVE_COLUMN_PROPERTIES +WWV_FLOW_WS_API.SAVE_COLUMN_VALIDATION +WWV_FLOW_WS_API.SAVE_LOV +WWV_FLOW_WS_API.SAVE_SECTION_SEQ_TITLE +WWV_FLOW_WS_API.SAVE_WEBPAGE_SECTION +WWV_FLOW_WS_API.SAVE_WEBSHEET_PROPERTIES +WWV_FLOW_WS_API.SAVE_WS_RPT_QUERY +WWV_FLOW_WS_API.SEND_PAGE_EMAIL +WWV_FLOW_WS_API.SET_COLUMN_VALUE +WWV_FLOW_WS_API.SHARE_WS_WITH_INDIVIDUALS +WWV_FLOW_WS_API.SHOW_RESET_PASSWORD +WWV_FLOW_WS_API.SPLIT_WS_RPT_LINK_URL +WWV_FLOW_WS_API.UPDATE_CELL +WWV_FLOW_WS_API.UPDATE_PAGE_TIMESTAMP +WWV_FLOW_WS_API.WEBSHEET_NAME_EXISTS +WWV_FLOW_WS_API.WS_ERROR_HANDLING +WWV_FLOW_WS_API.WS_RPT_SRC_CHANGED +WWV_FLOW_WS_APPLICATIONS_T1. +WWV_FLOW_WS_APP_AND_AUTH_TRG. +WWV_FLOW_WS_APP_SO_T1. +WWV_FLOW_WS_ATTACHMENT. +WWV_FLOW_WS_ATTACHMENT.ADD_DOC +WWV_FLOW_WS_ATTACHMENT.CHANGE_IMAGE_ATTR +WWV_FLOW_WS_ATTACHMENT.DELETE_DOC +WWV_FLOW_WS_ATTACHMENT.GET_WS_FILE +WWV_FLOW_WS_ATTACHMENT.GET_WS_FILE_SRC +WWV_FLOW_WS_AUTH. +WWV_FLOW_WS_AUTH.GUID +WWV_FLOW_WS_AUTH.INIT_SCHEMA +WWV_FLOW_WS_AUTH_SETUPS_T1. +WWV_FLOW_WS_CATEGORIES_T1. +WWV_FLOW_WS_COLUMNS_T1. +WWV_FLOW_WS_COL_GROUPS_T1. +WWV_FLOW_WS_COL_VAL_T1. +WWV_FLOW_WS_COMPUTATION_T1. +WWV_FLOW_WS_CONDITIONS_T1. +WWV_FLOW_WS_DATA_GRID_Q_T1. +WWV_FLOW_WS_DIALOG. +WWV_FLOW_WS_DIALOG.ADD_ATTACHMENT +WWV_FLOW_WS_DIALOG.ADD_COLUMN +WWV_FLOW_WS_DIALOG.ADD_COLUMN_VALIDATION +WWV_FLOW_WS_DIALOG.ADD_LINKS +WWV_FLOW_WS_DIALOG.ADD_NOTES +WWV_FLOW_WS_DIALOG.ADD_TAGS +WWV_FLOW_WS_DIALOG.COLUMN_EXPRESSION +WWV_FLOW_WS_DIALOG.COLUMN_GROUPS +WWV_FLOW_WS_DIALOG.COLUMN_PROPERTIES +WWV_FLOW_WS_DIALOG.COPY +WWV_FLOW_WS_DIALOG.DELETE_ROWS +WWV_FLOW_WS_DIALOG.DELETE_WEBSHEET +WWV_FLOW_WS_DIALOG.EXPORT +WWV_FLOW_WS_DIALOG.FILL +WWV_FLOW_WS_DIALOG.GEOCODE +WWV_FLOW_WS_DIALOG.LIST_OF_VALUES +WWV_FLOW_WS_DIALOG.LIST_OF_VALUES_TEXT +WWV_FLOW_WS_DIALOG.MOVE_COLUMNS +WWV_FLOW_WS_DIALOG.ONDEMAND_DIALOG +WWV_FLOW_WS_DIALOG.REMOVE_COLUMNS +WWV_FLOW_WS_DIALOG.REPLACE_VALUE +WWV_FLOW_WS_DIALOG.RESET_GEOCODE +WWV_FLOW_WS_DIALOG.SET_COLUMN_VALUE +WWV_FLOW_WS_DIALOG.WEBSHEET_PROPERTIES +WWV_FLOW_WS_EXPORT. +WWV_FLOW_WS_EXPORT.EXPORT +WWV_FLOW_WS_FLASH_CHART. +WWV_FLOW_WS_FLASH_CHART.CHART +WWV_FLOW_WS_FORM. +WWV_FLOW_WS_FORM.SHOW +WWV_FLOW_WS_FORM.SHOW_ACTIONS +WWV_FLOW_WS_FORM.SHOW_COLUMN_POPUP +WWV_FLOW_WS_GEOCODE. +WWV_FLOW_WS_GEOCODE.CACHE_GEOCODE +WWV_FLOW_WS_GEOCODE.GET_GEOCODE +WWV_FLOW_WS_GEOCODE.RESET_GEOCODES +WWV_FLOW_WS_GEOCODE.SAVE_GEOCODES +WWV_FLOW_WS_GROUP_BY_T1. +WWV_FLOW_WS_IMPORT. +WWV_FLOW_WS_IMPORT.IMPORT_CSV +WWV_FLOW_WS_IMPORT.IMPORT_TEXT_SECTIONS +WWV_FLOW_WS_IMPORT.IS_DATE +WWV_FLOW_WS_IMPORT_API. +WWV_FLOW_WS_IMPORT_API.COPY_DATA_GRID +WWV_FLOW_WS_IMPORT_API.COPY_PAGE_SECTIONS +WWV_FLOW_WS_IMPORT_API.CREATE_ACL +WWV_FLOW_WS_IMPORT_API.CREATE_FILE +WWV_FLOW_WS_IMPORT_API.CREATE_LINK +WWV_FLOW_WS_IMPORT_API.CREATE_NOTE +WWV_FLOW_WS_IMPORT_API.CREATE_ROW +WWV_FLOW_WS_IMPORT_API.CREATE_SECTION +WWV_FLOW_WS_IMPORT_API.CREATE_TAG +WWV_FLOW_WS_IMPORT_API.EXPORT_ACL +WWV_FLOW_WS_IMPORT_API.EXPORT_ANNOTATIONS +WWV_FLOW_WS_IMPORT_API.EXPORT_ROWS +WWV_FLOW_WS_IMPORT_API.EXPORT_SECTIONS +WWV_FLOW_WS_IMPORT_API.REMOVE_WS_COMPONENTS +WWV_FLOW_WS_LOVS_T1. +WWV_FLOW_WS_LOV_ENTRIES_T1. +WWV_FLOW_WS_OPERATIONS_T1. +WWV_FLOW_WS_PARAMETERS_T1. +WWV_FLOW_WS_PARMS_MAP_T1. +WWV_FLOW_WS_RPTS_T1. +WWV_FLOW_WS_SECURITY. +WWV_FLOW_WS_SECURITY.ADMIN_EXISTS +WWV_FLOW_WS_SECURITY.CURRENT_USER_IS_ADMIN +WWV_FLOW_WS_SECURITY.CURRENT_USER_IS_NOT_READER +WWV_FLOW_WS_SECURITY.CURRENT_USER_IS_READER +WWV_FLOW_WS_SECURITY.EXEC_WEBSHEET_AUTH +WWV_FLOW_WS_SECURITY.GET_AUTHENTICATION +WWV_FLOW_WS_SECURITY.GET_CURRENT_USER_ROLE +WWV_FLOW_WS_SECURITY.IS_VALID_SQL +WWV_FLOW_WS_SECURITY.IS_VALID_WS_QUERY +WWV_FLOW_WS_SECURITY.SET_ROLE +WWV_FLOW_WS_SECURITY.SQL_ENABLED +WWV_FLOW_WS_SECURITY.SQL_ENABLED_INST +WWV_FLOW_WS_SECURITY.SQL_ENABLED_INST_YN +WWV_FLOW_WS_SECURITY.SQL_ENABLED_YN +WWV_FLOW_WS_SECURITY.STR_CONTAINS_VALID_SQL +WWV_FLOW_WS_SECURITY.UPDATE_WS_PROPERTIES +WWV_FLOW_WS_SECURITY.WS_ACL_TYPE +WWV_FLOW_WS_SECURITY.WS_ALLOW_PUBLIC +WWV_FLOW_WS_SECURITY.WS_AUTH_TYPE +WWV_FLOW_WS_SETUP. +WWV_FLOW_WS_SETUP.ALL_OBJECT_VALID +WWV_FLOW_WS_SETUP.ALL_OBJECT_VALID2 +WWV_FLOW_WS_SETUP.DISPLAY_INVALID_OBJ_DDL +WWV_FLOW_WS_SETUP.DISPLAY_RECREATE_CONFIRM +WWV_FLOW_WS_SETUP.DISPLAY_REMOVE_CONFIRM +WWV_FLOW_WS_SETUP.DISPLAY_SETUP_CONFIRM +WWV_FLOW_WS_SETUP.DISPLAY_SETUP_INFO +WWV_FLOW_WS_SETUP.DISPLAY_SETUP_MULTI_SCHEMAS +WWV_FLOW_WS_SETUP.ENOUGH_SPACE_AVAILABLE +WWV_FLOW_WS_SETUP.GET_APEX$_SCHEMA +WWV_FLOW_WS_SETUP.GET_INVALID_OBJ_DDL +WWV_FLOW_WS_SETUP.GET_OBJECT_STATUS +WWV_FLOW_WS_SETUP.INSTALL +WWV_FLOW_WS_SETUP.ONE_WORKSPACE_SCHEMA_EXISTS +WWV_FLOW_WS_SETUP.RECREATE_INVALID_OBJECTS +WWV_FLOW_WS_SETUP.REMOVE +WWV_FLOW_WS_SETUP.SETUP_EXISTS +WWV_FLOW_WS_STICKIES. +WWV_FLOW_WS_STICKIES.SHOW_STICKIES +WWV_FLOW_WS_UI. +WWV_FLOW_WS_UI.CONTROL_PANEL +WWV_FLOW_WS_UI.DATA_GRID_SQL_HELP +WWV_FLOW_WS_UI.P22_DATA_GRID_COLUMNS +WWV_FLOW_WS_UI.P22_DATA_GRID_LIST +WWV_FLOW_WS_UI.P22_DATA_GRID_QUERY +WWV_FLOW_WS_UI.P900_FOOTER +WWV_FLOW_WS_UI.PAGE_HEADER +WWV_FLOW_WS_UI.PLSQL_EXAMPLE +WWV_FLOW_WS_UI.PRINT_CUSTOM_CSS +WWV_FLOW_WS_UI.SHOW_ATTACHMENTS +WWV_FLOW_WS_UI.SHOW_BREADCRUMBS +WWV_FLOW_WS_UI.SHOW_DATA_GRID_MENU +WWV_FLOW_WS_UI.SHOW_NOTES +WWV_FLOW_WS_UI.SHOW_REPORT_MENU +WWV_FLOW_WS_UI.SHOW_SLIDE_BREADCRUMBS +WWV_FLOW_WS_UI.SHOW_TAGS +WWV_FLOW_WS_WEBPAGE. +WWV_FLOW_WS_WEBPAGE.CLEAN_OUT_EDITOR_TAG +WWV_FLOW_WS_WEBPAGE.GET_ANCHOR +WWV_FLOW_WS_WEBPAGE.GET_LOGIN_URL +WWV_FLOW_WS_WEBPAGE.GET_URL +WWV_FLOW_WS_WEBPAGE.SHOW +WWV_FLOW_WS_WEBPAGE.SHOW_TAG_CLOUDS +WWV_FLOW_WS_WEBPAGE.VALIDATE_STRING +WWV_FLOW_WS_WEBPAGES_T1. +WWV_FLOW_WS_WEBSHEET_ATTR_T1. +WWV_FLOW_XLIFF. +WWV_FLOW_XLIFF.APPLY_XLIFF_FILE +WWV_FLOW_XLIFF.APPLY_XLIFF_TRANSLATIONS +WWV_FLOW_XLIFF.GENERATE_TRANSLATION_DOCUMENT +WWV_FLOW_XLIFF.GET_TRANSLATION_DOCUMENT +WWV_FLOW_XLIFF.PRINT_TRANSLATION_DOCUMENT +WWV_HTF. +WWV_HTF.ANCHOR +WWV_HTF.ANCHOR2 +WWV_HTF.BODYCLOSE +WWV_HTF.BODYOPEN +WWV_HTF.DIVOPEN +WWV_HTF.ESCAPE_SC +WWV_HTF.ESCAPE_SC_SQL +WWV_HTF.FIELDSETCLOSE +WWV_HTF.FIELDSETOPEN +WWV_HTF.FORMBUTTON +WWV_HTF.FORMHIDDEN +WWV_HTF.FORMOPEN +WWV_HTF.FORMPASSWORD +WWV_HTF.FORMSELECTCLOSE +WWV_HTF.FORMSELECTOPEN +WWV_HTF.FORMSELECTOPTION +WWV_HTF.FORMSUBMIT +WWV_HTF.FORMTEXT +WWV_HTF.FORMTEXTAREACLOSE +WWV_HTF.FORMTEXTAREAOPEN2 +WWV_HTF.HTMLCLOSE +WWV_HTF.HTMLOPEN +WWV_HTF.IMG +WWV_HTF.LISTITEMOPEN +WWV_HTF.PARAGRAPHOPEN +WWV_HTF.SCRIPTCLOSE +WWV_HTF.SCRIPTOPEN +WWV_HTF.TABLECLOSE +WWV_HTF.TABLEDATA +WWV_HTF.TABLEDATAOPEN +WWV_HTF.TABLEHEADER +WWV_HTF.TABLEOPEN +WWV_HTF.TABLEROWCLOSE +WWV_HTF.TABLEROWOPEN +WWV_HTF.URL_ENCODE +WWV_HTF.URL_ENCODE2 +WWV_HTF.URL_ENCODE3 +WWV_HTP. +WWV_HTP.ANCHOR +WWV_HTP.ANCHOR2 +WWV_HTP.BODYCLOSE +WWV_HTP.BODYOPEN +WWV_HTP.CENTERCLOSE +WWV_HTP.CENTEROPEN +WWV_HTP.DIVCLOSE +WWV_HTP.DIVOPEN +WWV_HTP.FORMBUTTON +WWV_HTP.FORMHIDDEN +WWV_HTP.FORMOPEN +WWV_HTP.FORMPASSWORD +WWV_HTP.FORMSELECTCLOSE +WWV_HTP.FORMSELECTOPEN +WWV_HTP.FORMSELECTOPTION +WWV_HTP.FORMSUBMIT +WWV_HTP.FORMTEXT +WWV_HTP.HTMLCLOSE +WWV_HTP.HTMLOPEN +WWV_HTP.IMG +WWV_HTP.LISTITEMOPEN +WWV_HTP.PARAGRAPHCLOSE +WWV_HTP.PARAGRAPHOPEN +WWV_HTP.PRINT_CLOB +WWV_HTP.SCRIPTCLOSE +WWV_HTP.SCRIPTOPEN +WWV_HTP.TABLECLOSE +WWV_HTP.TABLEDATA +WWV_HTP.TABLEDATACLOSE +WWV_HTP.TABLEDATAOPEN +WWV_HTP.TABLEHEADER +WWV_HTP.TABLEOPEN +WWV_HTP.TABLEROWCLOSE +WWV_HTP.TABLEROWOPEN +WWV_HTP.URL_ENCODE +WWV_HTP.URL_ENCODE2 +WWV_META_CLEANUP. +WWV_META_CLEANUP.COPY_SVG_SERIES_ATTR +WWV_META_CLEANUP.ENFORCE_PAGE_ALIAS_UNIQUENESS +WWV_META_CLEANUP.FIX_APP_AUTH_LOGOUT_URL +WWV_META_CLEANUP.FIX_FILE_REPOSITORY +WWV_META_CLEANUP.ITEM_ATTRIBUTES +WWV_META_CLEANUP.LOV_DATA_UPDATE +WWV_META_CLEANUP.MENU_OPTIONS_UPDATE +WWV_META_CLEANUP.REPORT_COLUMNS_UPDATE +WWV_META_CLEANUP.ROW_TEMPLATE_CONDITION +WWV_META_CLEANUP.SVG_REGION_SOURCE_UPDATE +WWV_META_CLEANUP.TEMPLATE_HEAD_UPDATE +WWV_MIG_ACC_LOAD. +WWV_MIG_ACC_LOAD.ADD_SUFFIX +WWV_MIG_ACC_LOAD.CHECK_ALLOWED_CHARS +WWV_MIG_ACC_LOAD.CHECK_IDENTIFIER_LENGTH +WWV_MIG_ACC_LOAD.CHECK_RESERVED_WORD +WWV_MIG_ACC_LOAD.DISPLAY_LOAD_CONFIRM +WWV_MIG_ACC_LOAD.DISPLAY_LOAD_INFO +WWV_MIG_ACC_LOAD.ESCAPE_CHAR +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACCESS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_COLUMNS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_CONTROLS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_MODULES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_FORMS_PERM +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_GROUPS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_GRPSMEMBERS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_IDX_COLS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_INDEXES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_MDL_PERM +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_MODULES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_PAGES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_QUERIES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_RELATIONS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_REL_COL +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_REPORTS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_RPTS_MODULES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_RPT_CTL +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_RPT_PERMS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_TABLES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_TAB_PERM +WWV_MIG_ACC_LOAD.INS_WWV_MIG_ACC_USERS +WWV_MIG_ACC_LOAD.INS_WWV_MIG_REV_QUERIES +WWV_MIG_ACC_LOAD.INS_WWV_MIG_REV_TABLES +WWV_MIG_ACC_LOAD.LTRIMNONALPHANUMERIC +WWV_MIG_ACC_LOAD.REMOVEQUOTES +WWV_MIG_ACC_LOAD.SET_MIGRATION_PROJECT_NAME +WWV_MIG_ACC_LOAD.SYS_CHECK +WWV_MIG_ACC_LOAD.TRANSFORM_IDENTIFIER +WWV_MIG_ACC_LOAD.TRUNCATESTRINGBYTESIZE +WWV_MIG_FRMMENU_LOAD_XML. +WWV_MIG_FRMMENU_LOAD_XML.DISPLAY_LOAD_CONFIRM +WWV_MIG_FRMMENU_LOAD_XML.DISPLAY_LOAD_INFO +WWV_MIG_FRMMENU_LOAD_XML.GET_MENUS_COLUMN_NAME +WWV_MIG_FRMMENU_LOAD_XML.IS_VALID_MENU_XML +WWV_MIG_FRMMENU_LOAD_XML.LOAD_ALL_NODES +WWV_MIG_FRM_LOAD_XML. +WWV_MIG_FRM_LOAD_XML.DISPLAY_LOAD_CONFIRM +WWV_MIG_FRM_LOAD_XML.DISPLAY_LOAD_INFO +WWV_MIG_FRM_LOAD_XML.GET_FORMS_COLUMN_NAME +WWV_MIG_FRM_LOAD_XML.IS_VALID_FORMS_XML +WWV_MIG_FRM_LOAD_XML.LOAD_ALL_NODES +WWV_MIG_FRM_OLB_LOAD_XML. +WWV_MIG_FRM_OLB_LOAD_XML.DISPLAY_LOAD_CONFIRM +WWV_MIG_FRM_OLB_LOAD_XML.DISPLAY_LOAD_INFO +WWV_MIG_FRM_OLB_LOAD_XML.GET_OBJLIB_COLUMN_NAME +WWV_MIG_FRM_OLB_LOAD_XML.IS_VALID_OLB_XML +WWV_MIG_FRM_OLB_LOAD_XML.LOAD_ALL_NODES +WWV_MIG_FRM_UPDATE_APX_APP. +WWV_MIG_FRM_UPDATE_APX_APP.SET_APEX_APP_LOGO +WWV_MIG_FRM_UPDATE_APX_APP.UPDATE_FORMS_PAGES +WWV_MIG_FRM_UPDATE_APX_APP.UPDATE_PAGE_PLUG +WWV_MIG_FRM_UTILITIES. +WWV_MIG_FRM_UTILITIES.CREATE_APEX_PAGES +WWV_MIG_FRM_UTILITIES.CREATE_APEX_REPORT_PAGES +WWV_MIG_FRM_UTILITIES.GET_BLOCK_MAPPING +WWV_MIG_FRM_UTILITIES.GET_PARAMETER_NAME +WWV_MIG_FRM_UTILITIES.IS_RELATED_BLOCK +WWV_MIG_FRM_UTILITIES.IS_TABLE_OR_VIEW +WWV_MIG_FRM_UTILITIES.IS_TABLE_RELATED +WWV_MIG_FRM_UTILITIES.IS_VALID_DATASOURCE +WWV_MIG_FRM_UTILITIES.IS_VALID_QUERY +WWV_MIG_FRM_UTILITIES.LOAD_FRM_REVISION_TABLES +WWV_MIG_FRM_UTILITIES.PARSE_LOV_QUERY +WWV_MIG_FRM_UTILITIES.REPLACE_STRING +WWV_MIG_FRM_UTILITIES.SET_BLKTRIG_APPLICABILITY +WWV_MIG_FRM_UTILITIES.SET_BLOCK_INCLUSION +WWV_MIG_FRM_UTILITIES.SET_COMPONENT_APPLICABILITY +WWV_MIG_FRM_UTILITIES.SET_COMPONENT_DEFAULTS +WWV_MIG_FRM_UTILITIES.SET_FORMTRIG_APPLICABILITY +WWV_MIG_FRM_UTILITIES.SET_ITEMTRIG_APPLICABILITY +WWV_MIG_FRM_UTILITIES.SET_TRIGGER_DEFAULTS +WWV_MIG_FRM_UTILITIES.TRIGGER_GET_PRIMARY_KEY +WWV_MIG_FRM_UTILITIES.TRIGGER_PARSE_BLOCK_SQL +WWV_MIG_FRM_UTILITIES.TRIGGER_QUERY_TO_LOV +WWV_MIG_FRM_UTILITIES.UPDATE_MODEL_PAGES +WWV_MIG_RPT_LOAD_XML. +WWV_MIG_RPT_LOAD_XML.DISPLAY_LOAD_CONFIRM +WWV_MIG_RPT_LOAD_XML.DISPLAY_LOAD_INFO +WWV_MIG_RPT_LOAD_XML.GET_REPORTS_COLUMN_NAME +WWV_MIG_RPT_LOAD_XML.IS_VALID_REPORT_XML +WWV_MIG_RPT_LOAD_XML.LOAD_ALL_NODES +WWV_OWA_COOKIE. +WWV_OWA_COOKIE.SEND +WWV_POPUP_FILTER. +WWV_PURGE. +WWV_PURGE.COMPUTE_INACTIVE +WWV_PURGE.DAILY_PURGE_PROCESS +WWV_PURGE.SAVE_RESPONSE +WWV_PURGE.SEND_SUMMARY_EMAIL +WWV_PURGE_DATAFILES_TRG1. +WWV_PURGE_EMAILS_TRG1. +WWV_PURGE_LOG_TRG1. +WWV_PURGE_SCHEMAS_TRG1. +WWV_PURGE_WORKSPACES_TRG1. +WWV_PURGE_WORKSPACE_RESP_TRG1. +WWV_RENDER_CHART2. +WWV_RENDER_CHART2.SHOW +WWV_RENDER_CHART2.SHOW_COLORS +WWV_RENDER_REPORT3. +WWV_RENDER_REPORT3.AJAX +WWV_RENDER_REPORT3.BUILD_PAGINATION_ROW +WWV_RENDER_REPORT3.GET_QUERY_HEADINGS +WWV_RENDER_REPORT3.GET_SINCE +WWV_RENDER_REPORT3.GET_SINCE_TSWLTZ +WWV_RENDER_REPORT3.GET_SINCE_TSWTZ +WWV_RENDER_REPORT3.HIGHLIGHT_VALUE +WWV_RENDER_REPORT3.IS_VALID_QUERY +WWV_RENDER_REPORT3.SET_LEGACY_COL_ATTRIBUTES +WWV_RENDER_REPORT3.SET_TEMPLATE +WWV_RENDER_REPORT3.SHOW +WWV_RENDER_REPORT3.UPDATE_REPORT_COLUMNS +WWV_RENDER_REPORT3.UPGRADE_REPORT +X$KXFTASK +XACTS +XDB$ACL$XD. +XDB$CONFIG$XD. +XDB$DERIVATIONCHOICE.LOOKUPVALUE +XDB$DERIVATIONCHOICE.SETVALUE +XDB$ENUM2_T.LOOKUPVALUE +XDB$ENUM2_T.SETVALUE +XDB$ENUM_T.LOOKUPVALUE +XDB$ENUM_T.SETVALUE +XDB$EXTNAME2INTNAME. +XDB$FORMCHOICE.LOOKUPVALUE +XDB$FORMCHOICE.SETVALUE +XDB$INITXDBSCHEMA. +XDB$JAVATYPE.LOOKUPVALUE +XDB$JAVATYPE.SETVALUE +XDB$PATCHUPDELETESCHEMA. +XDB$PATCHUPSCHEMA. +XDB$PROCESSCHOICE.LOOKUPVALUE +XDB$PROCESSCHOICE.SETVALUE +XDB$RESCONFIG$XD. +XDB$STATS$XD. +XDB$TRANSIENTCHOICE.LOOKUPVALUE +XDB$TRANSIENTCHOICE.SETVALUE +XDB$USECHOICE.LOOKUPVALUE +XDB$USECHOICE.SETVALUE +XDB$WHITESPACECHOICE.LOOKUPVALUE +XDB$WHITESPACECHOICE.SETVALUE +XDBCONFIG_VALIDATE. +XDBHI_IM.ODCIGETINTERFACES +XDBHI_IM.ODCIINDEXALTER +XDBHI_IM.ODCIINDEXCLOSE +XDBHI_IM.ODCIINDEXCREATE +XDBHI_IM.ODCIINDEXDELETE +XDBHI_IM.ODCIINDEXDROP +XDBHI_IM.ODCIINDEXFETCH +XDBHI_IM.ODCIINDEXINSERT +XDBHI_IM.ODCIINDEXSTART +XDBHI_IM.ODCIINDEXUPDATE +XDBPI_FUNCIMPL. +XDBPI_FUNCIMPL.NOOP_FUNC +XDBPI_IM.ODCIGETINTERFACES +XDBPI_IM.ODCIINDEXCLOSE +XDBPI_IM.ODCIINDEXCREATE +XDBPI_IM.ODCIINDEXDELETE +XDBPI_IM.ODCIINDEXDROP +XDBPI_IM.ODCIINDEXFETCH +XDBPI_IM.ODCIINDEXINSERT +XDBPI_IM.ODCIINDEXSTART +XDBPI_IM.ODCIINDEXTRUNCATE +XDBPI_IM.ODCIINDEXUPDATE +XDBURITYPE.CREATEURI +XDBURITYPE.GETBLOB +XDBURITYPE.GETCLOB +XDBURITYPE.GETCONTENTTYPE +XDBURITYPE.GETEXTERNALURL +XDBURITYPE.GETRESOURCE +XDBURITYPE.GETURL +XDBURITYPE.GETXML +XDBURITYPE.XDBURITYPE +XDB_ANCOP. +XDB_ANCOP.ABSPATH_FUNC +XDB_ANCOP.ABSPATH_FUNC_INT +XDB_ANCOP.ALLPATH_FUNC +XDB_ANCOP.ALLPATH_FUNC_INT +XDB_ANCOP.DEPTH_FUNC +XDB_ANCOP.DEPTH_FUNC_INT +XDB_ANCOP.PATH_FUNC +XDB_ANCOP.PATH_FUNC_INT +XDB_DATASTORE_PROC. +XDB_DLTRIG_PKG. +XDB_DLTRIG_PKG.DLTRIG_UPD +XDB_FASTPATH_INSERT +XDB_FUNCIMPL. +XDB_FUNCIMPL.EQUAL_PATH_FUNC +XDB_FUNCIMPL.UNDER_PATH_FUNC +XDB_FUNCIMPL.UNDER_PATH_FUNC1 +XDB_NAME +XDB_PITRIG_PKG. +XDB_PITRIG_PKG.PITRIG_DEL +XDB_PITRIG_PKG.PITRIG_DELMETADATA +XDB_PITRIG_PKG.PITRIG_DROP +XDB_PITRIG_PKG.PITRIG_DROPMETADATA +XDB_PITRIG_PKG.PITRIG_TRUNCATE +XDB_PITRIG_PKG.PITRIG_UPD +XDB_PITRIG_PKG.PITRIG_UPDMETADATA +XDB_PITRIG_PKG_01. +XDB_PITRIG_PKG_01.PITRIG_DEL +XDB_PITRIG_PKG_01.PITRIG_DELMETADATA +XDB_PITRIG_PKG_01.PITRIG_UPD +XDB_PITRIG_PKG_01.PITRIG_UPDMETADATA +XDB_PI_TRIG. +XDB_PVTRIG_PKG. +XDB_PVTRIG_PKG.PVTRIG_DEL +XDB_PVTRIG_PKG.PVTRIG_INS +XDB_PVTRIG_PKG.PVTRIG_UPD +XDB_PV_TRIG. +XDB_RVTRIG_PKG. +XDB_RVTRIG_PKG.RVTRIG_DEL +XDB_RVTRIG_PKG.RVTRIG_INS +XDB_RVTRIG_PKG.RVTRIG_UPD +XDB_RV_TRIG. +XID +XIDSLOT +XIDSLT +XIDSQN +XIDUSN +XID_REPORT +XIMETADATA_PKG. +XIMETADATA_PKG.GETINDEXMETADATA +XIMETADATA_PKG.GETINDEXMETADATACALLBACK +XIMETADATA_PKG.UTLGETTABLENAMES +XMLBINARYINPUTSTREAM.AVAILABLE +XMLBINARYINPUTSTREAM.CLOSE +XMLBINARYINPUTSTREAM.ISNULL +XMLBINARYINPUTSTREAM.READ +XMLBINARYINPUTSTREAM.XMLBINARYINPUTSTREAM +XMLBINARYOUTPUTSTREAM.CLOSE +XMLBINARYOUTPUTSTREAM.FLUSH +XMLBINARYOUTPUTSTREAM.ISNULL +XMLBINARYOUTPUTSTREAM.WRITE +XMLBINARYOUTPUTSTREAM.XMLBINARYOUTPUTSTREAM +XMLCHARACTERINPUTSTREAM.AVAILABLE +XMLCHARACTERINPUTSTREAM.CLOSE +XMLCHARACTERINPUTSTREAM.ISNULL +XMLCHARACTERINPUTSTREAM.READ +XMLCHARACTERINPUTSTREAM.XMLCHARACTERINPUTSTREAM +XMLCHARACTEROUTPUTSTREAM.CLOSE +XMLCHARACTEROUTPUTSTREAM.FLUSH +XMLCHARACTEROUTPUTSTREAM.ISNULL +XMLCHARACTEROUTPUTSTREAM.WRITE +XMLCHARACTEROUTPUTSTREAM.XMLCHARACTEROUTPUTSTREAM +XMLGENFORMATTYPE.CREATEFORMAT +XMLGENFORMATTYPE.CREATEFORMAT2 +XMLGENFORMATTYPE.GENSCHEMA +XMLGENFORMATTYPE.SETDBURLPREFIX +XMLGENFORMATTYPE.SETENCLOSINGELEMENTNAME +XMLGENFORMATTYPE.SETPROCESSINGINS +XMLGENFORMATTYPE.SETSCHEMANAME +XMLGENFORMATTYPE.SETTARGETNAMESPACE +XMLGENFORMATTYPE.XMLGENFORMATTYPE +XMLIDXSTATSMETHODS.ODCIGETINTERFACES +XMLIDXSTATSMETHODS.ODCISTATSCOLLECT +XMLIDXSTATSMETHODS.ODCISTATSDELETE +XMLIDXSTATSMETHODS.ODCISTATSEXCHANGEPARTITION +XMLIDXSTATSMETHODS.ODCISTATSFUNCTIONCOST +XMLIDXSTATSMETHODS.ODCISTATSINDEXCOST +XMLIDXSTATSMETHODS.ODCISTATSSELECTIVITY +XMLIDXSTATSMETHODS.ODCISTATSTABLEFUNCTION +XMLIDXSTATSMETHODS.ODCISTATSUPDPARTSTATISTICS +XMLINDEXINSFUNC. +XMLINDEXLOADFUNC. +XMLINDEXLOAD_IMP_T.ODCITABLECLOSE +XMLINDEXLOAD_IMP_T.ODCITABLEFETCH +XMLINDEXLOAD_IMP_T.ODCITABLESTART +XMLINDEXMETHODS.ODCIGETINTERFACES +XMLINDEXMETHODS.ODCIINDEXALTER +XMLINDEXMETHODS.ODCIINDEXCLOSE +XMLINDEXMETHODS.ODCIINDEXCREATE +XMLINDEXMETHODS.ODCIINDEXDELETE +XMLINDEXMETHODS.ODCIINDEXDROP +XMLINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +XMLINDEXMETHODS.ODCIINDEXFETCH +XMLINDEXMETHODS.ODCIINDEXGETMETADATA +XMLINDEXMETHODS.ODCIINDEXINSERT +XMLINDEXMETHODS.ODCIINDEXSTART +XMLINDEXMETHODS.ODCIINDEXTRUNCATE +XMLINDEXMETHODS.ODCIINDEXUPDATE +XMLINDEXMETHODS.ODCIINDEXUPDPARTMETADATA +XMLINDEXMETHODS.ODCIINDEXUTILCLEANUP +XMLINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +XMLINDEX_FUNCIMPL. +XMLINDEX_FUNCIMPL.XMLINDEX_NOOP +XMLINDEX_REWRITE +XMLINDEX_REWRITE_IN_SELECT +XMLINDEX_SEL_IDX_TBL +XMLROOT. +XMLSCHEMA +XMLSEQCUR2_IMP_T.ODCITABLECLOSE +XMLSEQCUR2_IMP_T.ODCITABLEFETCH +XMLSEQCUR2_IMP_T.ODCITABLESTART +XMLSEQCUR_IMP_T.ODCITABLECLOSE +XMLSEQCUR_IMP_T.ODCITABLEFETCH +XMLSEQCUR_IMP_T.ODCITABLESTART +XMLSEQUENCEFROMREFCURSOR. +XMLSEQUENCEFROMREFCURSOR2. +XMLSEQUENCEFROMXMLTYPE. +XMLSEQ_IMP_T.ODCITABLECLOSE +XMLSEQ_IMP_T.ODCITABLEFETCH +XMLSEQ_IMP_T.ODCITABLESTART +XMLTYPE.APPENDCHILDXML +XMLTYPE.CREATENONSCHEMABASEDXML +XMLTYPE.CREATESCHEMABASEDXML +XMLTYPE.CREATEXML +XMLTYPE.CREATEXMLFROMBINARY +XMLTYPE.DELETEXML +XMLTYPE.EXISTSNODE +XMLTYPE.EXTRACT +XMLTYPE.GETBLOBVAL +XMLTYPE.GETCLOBVAL +XMLTYPE.GETNAMESPACE +XMLTYPE.GETNUMBERVAL +XMLTYPE.GETROOTELEMENT +XMLTYPE.GETSCHEMAID +XMLTYPE.GETSCHEMAURL +XMLTYPE.GETSTRINGVAL +XMLTYPE.INSERTXMLBEFORE +XMLTYPE.ISFRAGMENT +XMLTYPE.ISSCHEMABASED +XMLTYPE.ISSCHEMAVALID +XMLTYPE.ISSCHEMAVALIDATED +XMLTYPE.SCHEMAVALIDATE +XMLTYPE.SETSCHEMAVALIDATED +XMLTYPE.TOOBJECT +XMLTYPE.TRANSFORM +XMLTYPE.XMLTYPE +XMLVALIDATE. +XML_DML_RWT_STMT +XML_SCHEMA_NAME_PRESENT. +XML_SCHEMA_NAME_PRESENT.IS_SCHEMA_PRESENT +XNC +XOQ_VALIDATE. +XPATHINDEXMETHODS.ODCIGETINTERFACES +XPATHINDEXMETHODS.ODCIINDEXALTER +XPATHINDEXMETHODS.ODCIINDEXCLOSE +XPATHINDEXMETHODS.ODCIINDEXCREATE +XPATHINDEXMETHODS.ODCIINDEXDELETE +XPATHINDEXMETHODS.ODCIINDEXDROP +XPATHINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +XPATHINDEXMETHODS.ODCIINDEXFETCH +XPATHINDEXMETHODS.ODCIINDEXGETMETADATA +XPATHINDEXMETHODS.ODCIINDEXINSERT +XPATHINDEXMETHODS.ODCIINDEXMERGEPARTITION +XPATHINDEXMETHODS.ODCIINDEXSPLITPARTITION +XPATHINDEXMETHODS.ODCIINDEXSTART +XPATHINDEXMETHODS.ODCIINDEXTRUNCATE +XPATHINDEXMETHODS.ODCIINDEXUPDATE +XPATHINDEXMETHODS.ODCIINDEXUTILCLEANUP +XPATHINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +XQSEQUENCEFROMXMLTYPE. +XQSEQ_IMP_T.ODCITABLECLOSE +XQSEQ_IMP_T.ODCITABLEFETCH +XQSEQ_IMP_T.ODCITABLESTART +XQWINDOWSEQUENCEFROMXMLTYPE. +XQWINDOWSEQ_IMP_T.ODCITABLECLOSE +XQWINDOWSEQ_IMP_T.ODCITABLEFETCH +XQWINDOWSEQ_IMP_T.ODCITABLESTART +XS$ACE_TYPE.GET_END_DATE +XS$ACE_TYPE.GET_PRINCIPAL +XS$ACE_TYPE.GET_PRINCIPAL_TYPE +XS$ACE_TYPE.GET_PRIVILEGES +XS$ACE_TYPE.GET_START_DATE +XS$ACE_TYPE.IS_GRANTED +XS$ACE_TYPE.IS_INVERTED_PRINCIPAL +XS$ACE_TYPE.SET_END_DATE +XS$ACE_TYPE.SET_GRANT +XS$ACE_TYPE.SET_INVERTED_PRINCIPAL +XS$ACE_TYPE.SET_PRINCIPAL +XS$ACE_TYPE.SET_PRINCIPAL_TYPE +XS$ACE_TYPE.SET_PRIVILEGES +XS$ACE_TYPE.SET_START_DATE +XS$ACE_TYPE.XS$ACE_TYPE +XS$COLUMN_CONSTRAINT_TYPE.ADD_COLUMNS +XS$COLUMN_CONSTRAINT_TYPE.GET_COLUMNS +XS$COLUMN_CONSTRAINT_TYPE.GET_PRIVILEGE +XS$COLUMN_CONSTRAINT_TYPE.SET_COLUMNS +XS$COLUMN_CONSTRAINT_TYPE.SET_PRIVILEGE +XS$COLUMN_CONSTRAINT_TYPE.XS$COLUMN_CONSTRAINT_TYPE +XS$KEY_TYPE.GET_FOREIGN_KEY +XS$KEY_TYPE.GET_FOREIGN_KEY_TYPE +XS$KEY_TYPE.GET_PRIMARY_KEY +XS$KEY_TYPE.SET_FOREIGN_KEY +XS$KEY_TYPE.SET_FOREIGN_KEY_TYPE +XS$KEY_TYPE.SET_PRIMARY_KEY +XS$KEY_TYPE.XS$KEY_TYPE +XS$NS_ATTRIBUTE.GET_ATTRIBUTE_EVENTS +XS$NS_ATTRIBUTE.GET_DEFAULT_VALUE +XS$NS_ATTRIBUTE.GET_NAME +XS$NS_ATTRIBUTE.SET_ATTRIBUTE_EVENTS +XS$NS_ATTRIBUTE.SET_DEFAULT_VALUE +XS$NS_ATTRIBUTE.XS$NS_ATTRIBUTE +XS$PRIVILEGE.GET_DESCRIPTION +XS$PRIVILEGE.GET_IMPLIED_PRIVILEGES +XS$PRIVILEGE.GET_NAME +XS$PRIVILEGE.SET_DESCRIPTION +XS$PRIVILEGE.SET_IMPLIED_PRIVILEGES +XS$PRIVILEGE.XS$PRIVILEGE +XS$REALM_CONSTRAINT_TYPE.ADD_ACLS +XS$REALM_CONSTRAINT_TYPE.ADD_KEYS +XS$REALM_CONSTRAINT_TYPE.GET_ACLS +XS$REALM_CONSTRAINT_TYPE.GET_DESCRIPTION +XS$REALM_CONSTRAINT_TYPE.GET_KEYS +XS$REALM_CONSTRAINT_TYPE.GET_PARENT_OBJECT +XS$REALM_CONSTRAINT_TYPE.GET_PARENT_SCHEMA +XS$REALM_CONSTRAINT_TYPE.GET_REALM +XS$REALM_CONSTRAINT_TYPE.GET_TYPE +XS$REALM_CONSTRAINT_TYPE.GET_WHEN_CONDITION +XS$REALM_CONSTRAINT_TYPE.IS_DYNAMIC_REALM +XS$REALM_CONSTRAINT_TYPE.IS_PARAMETERIZED_REALM +XS$REALM_CONSTRAINT_TYPE.IS_STATIC_REALM +XS$REALM_CONSTRAINT_TYPE.SET_ACLS +XS$REALM_CONSTRAINT_TYPE.SET_DESCRIPTION +XS$REALM_CONSTRAINT_TYPE.SET_DYNAMIC +XS$REALM_CONSTRAINT_TYPE.SET_KEYS +XS$REALM_CONSTRAINT_TYPE.SET_PARENT_OBJECT +XS$REALM_CONSTRAINT_TYPE.SET_PARENT_SCHEMA +XS$REALM_CONSTRAINT_TYPE.SET_REALM +XS$REALM_CONSTRAINT_TYPE.SET_STATIC +XS$REALM_CONSTRAINT_TYPE.SET_WHEN_CONDITION +XS$REALM_CONSTRAINT_TYPE.XS$REALM_CONSTRAINT_TYPE +XS$ROLE_GRANT_TYPE.GET_END_DATE +XS$ROLE_GRANT_TYPE.GET_ROLE_NAME +XS$ROLE_GRANT_TYPE.GET_START_DATE +XS$ROLE_GRANT_TYPE.SET_END_DATE +XS$ROLE_GRANT_TYPE.SET_START_DATE +XS$ROLE_GRANT_TYPE.XS$ROLE_GRANT_TYPE +XSTREAM_TYPE +XS_ACL. +XS_ACL.ADD_ACL_PARAMETER +XS_ACL.APPEND_ACES +XS_ACL.CREATE_ACL +XS_ACL.DELETE_ACL +XS_ACL.REMOVE_ACES +XS_ACL.REMOVE_ACL_PARAMETERS +XS_ACL.SET_DESCRIPTION +XS_ACL.SET_PARENT_ACL +XS_ACL.SET_SECURITY_CLASS +XS_ACL_INT. +XS_ACL_INT.ADD_ACL_PARAMETER +XS_ACL_INT.APPEND_ACES +XS_ACL_INT.CREATE_ACL +XS_ACL_INT.DELETE_ACL +XS_ACL_INT.REMOVE_ACES +XS_ACL_INT.REMOVE_ACL_PARAMETERS +XS_ACL_INT.SET_DESCRIPTION +XS_ACL_INT.SET_PARENT_ACL +XS_ACL_INT.SET_SECURITY_CLASS +XS_ADMIN_INT. +XS_ADMIN_INT.ADMIN_AUDIT +XS_ADMIN_INT.CHECK_PERMISSION +XS_ADMIN_INT.CREATE_DEPENDENCY +XS_ADMIN_INT.CREATE_ENTITY +XS_ADMIN_INT.DELETE_DEPENDENCY +XS_ADMIN_INT.DELETE_ENTITY +XS_ADMIN_INT.GET_ENTITY_ID +XS_ADMIN_INT.INVALIDATE_ENTITY +XS_ADMIN_UTIL. +XS_ADMIN_UTIL.CHECK_LENGTH +XS_ADMIN_UTIL.CHECK_SEEDED +XS_ADMIN_UTIL.DROP_SCHEMA_OBJECTS +XS_ADMIN_UTIL.GET_DEFAULT_WORKSPACE +XS_ADMIN_UTIL.GET_OBJECT_ID +XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE +XS_ADMIN_UTIL.RAISE_ERROR +XS_ADMIN_UTIL.REMOVE_DBUSER_ACES +XS_ADMIN_UTIL.REVOKE_SYSTEM_PRIVILEGE +XS_ADMIN_UTIL.SET_DEFAULT_WORKSPACE +XS_ADMIN_UTIL.VALIDATE_DB_OBJECT_NAME +XS_ADMIN_UTIL.XSNAME_TO_ID +XS_CALLBACK_EVENT_TYPE +XS_COOKIE +XS_DATASEC_POLICY_NAME +XS_DATA_SECURITY. +XS_DATA_SECURITY.ADD_COLUMN_CONSTRAINTS +XS_DATA_SECURITY.APPEND_REALM_CONSTRAINTS +XS_DATA_SECURITY.APPLY_OBJECT_POLICY +XS_DATA_SECURITY.CREATE_ACL_PARAMETER +XS_DATA_SECURITY.CREATE_POLICY +XS_DATA_SECURITY.DELETE_ACL_PARAMETER +XS_DATA_SECURITY.DELETE_POLICY +XS_DATA_SECURITY.DISABLE_OBJECT_POLICY +XS_DATA_SECURITY.ENABLE_OBJECT_POLICY +XS_DATA_SECURITY.REMOVE_COLUMN_CONSTRAINTS +XS_DATA_SECURITY.REMOVE_OBJECT_POLICY +XS_DATA_SECURITY.REMOVE_REALM_CONSTRAINTS +XS_DATA_SECURITY.SET_DESCRIPTION +XS_DATA_SECURITY_INT. +XS_DATA_SECURITY_INT.ADD_COLUMN_CONSTRAINTS +XS_DATA_SECURITY_INT.APPEND_REALM_CONSTRAINTS +XS_DATA_SECURITY_INT.APPLY_OBJECT_POLICY +XS_DATA_SECURITY_INT.CREATE_ACL_PARAMETER +XS_DATA_SECURITY_INT.CREATE_POLICY +XS_DATA_SECURITY_INT.DELETE_ACL_PARAMETER +XS_DATA_SECURITY_INT.DELETE_POLICY +XS_DATA_SECURITY_INT.ENABLE_DISABLE_OBJECT_POLICY +XS_DATA_SECURITY_INT.REMOVE_COLUMN_CONSTRAINTS +XS_DATA_SECURITY_INT.REMOVE_OBJECT_POLICY +XS_DATA_SECURITY_INT.REMOVE_REALM_CONSTRAINTS +XS_DATA_SECURITY_INT.SET_DESCRIPTION +XS_DATA_SECURITY_UTIL. +XS_DATA_SECURITY_UTIL.ALTER_STATIC_ACL_REFRESH +XS_DATA_SECURITY_UTIL.PURGE_ACL_REFRESH_HISTORY +XS_DATA_SECURITY_UTIL.SCHEDULE_STATIC_ACL_REFRESH +XS_DATA_SECURITY_UTIL.SET_TRACE_LEVEL +XS_DATA_SECURITY_UTIL.XS$REFRESH_STATIC_ACL +XS_DIAG. +XS_DIAG.VALIDATE_ACL +XS_DIAG.VALIDATE_DATA_SECURITY +XS_DIAG.VALIDATE_NAMESPACE_TEMPLATE +XS_DIAG.VALIDATE_PRINCIPAL +XS_DIAG.VALIDATE_ROLESET +XS_DIAG.VALIDATE_SECURITY_CLASS +XS_DIAG.VALIDATE_WORKSPACE +XS_DIAG_INT. +XS_DIAG_INT.CALL_VALIDATION +XS_DIAG_INT.VALIDATE_WORKSPACE +XS_ENABLED_ROLE +XS_ENTITY_TYPE +XS_INACTIVITY_TIMEOUT +XS_MTCACHE_INT. +XS_MTCACHE_INT.MIDTIER_CACHE_DELETE +XS_MTCACHE_INT.MIDTIER_CACHE_UPDATE +XS_MTCACHE_INT.SET_RETENTION_TIME +XS_NAMESPACE. +XS_NAMESPACE.ADD_ATTRIBUTES +XS_NAMESPACE.CREATE_TEMPLATE +XS_NAMESPACE.DELETE_TEMPLATE +XS_NAMESPACE.REMOVE_ATTRIBUTES +XS_NAMESPACE.SET_DESCRIPTION +XS_NAMESPACE.SET_HANDLER +XS_NAMESPACE_INT. +XS_NAMESPACE_INT.ADD_ATTRIBUTES +XS_NAMESPACE_INT.CREATE_TEMPLATE +XS_NAMESPACE_INT.DELETE_TEMPLATE +XS_NAMESPACE_INT.REMOVE_ATTRIBUTES +XS_NAMESPACE_INT.SET_DESCRIPTION +XS_NAMESPACE_INT.SET_HANDLER +XS_NS_ATTRIBUTE +XS_NS_ATTRIBUTE_NEW_VAL +XS_NS_ATTRIBUTE_OLD_VAL +XS_NS_NAME +XS_PACKAGE_NAME +XS_PRINCIPAL. +XS_PRINCIPAL.ADD_PROXY_TO_DBUSER +XS_PRINCIPAL.ADD_PROXY_USER +XS_PRINCIPAL.CREATE_DYNAMIC_ROLE +XS_PRINCIPAL.CREATE_ROLE +XS_PRINCIPAL.CREATE_USER +XS_PRINCIPAL.DELETE_PRINCIPAL +XS_PRINCIPAL.ENABLE_BY_DEFAULT +XS_PRINCIPAL.ENABLE_ROLES_BY_DEFAULT +XS_PRINCIPAL.GRANT_ROLES +XS_PRINCIPAL.REMOVE_PROXY_FROM_DBUSER +XS_PRINCIPAL.REMOVE_PROXY_USERS +XS_PRINCIPAL.REVOKE_ROLES +XS_PRINCIPAL.SET_DESCRIPTION +XS_PRINCIPAL.SET_DYNAMIC_ROLE_DURATION +XS_PRINCIPAL.SET_DYNAMIC_ROLE_SCOPE +XS_PRINCIPAL.SET_EFFECTIVE_DATES +XS_PRINCIPAL.SET_GUID +XS_PRINCIPAL.SET_PASSWORD +XS_PRINCIPAL.SET_PROFILE +XS_PRINCIPAL.SET_USER_SCHEMA +XS_PRINCIPAL.SET_USER_STATUS +XS_PRINCIPAL.SET_VERIFIER +XS_PRINCIPAL_INT. +XS_PRINCIPAL_INT.ADD_PROXY_TO_DBUSER +XS_PRINCIPAL_INT.ADD_PROXY_TO_SCHEMA_INTERNAL +XS_PRINCIPAL_INT.ADD_PROXY_USER +XS_PRINCIPAL_INT.CREATE_DYNAMIC_ROLE +XS_PRINCIPAL_INT.CREATE_ROLE +XS_PRINCIPAL_INT.CREATE_USER +XS_PRINCIPAL_INT.DELETE_PRINCIPAL +XS_PRINCIPAL_INT.ENABLE_BY_DEFAULT +XS_PRINCIPAL_INT.ENABLE_ROLES_BY_DEFAULT +XS_PRINCIPAL_INT.GET_PRIN_TYPE +XS_PRINCIPAL_INT.GET_VERIFIER_TYPE +XS_PRINCIPAL_INT.GRANT_ROLES +XS_PRINCIPAL_INT.REMOVE_PROXY_FROM_DBUSER +XS_PRINCIPAL_INT.REMOVE_PROXY_USERS +XS_PRINCIPAL_INT.REVOKE_ROLES +XS_PRINCIPAL_INT.RM_PROXY_FROM_SCHEMA_INTERNAL +XS_PRINCIPAL_INT.SET_DESCRIPTION +XS_PRINCIPAL_INT.SET_DYNAMIC_ROLE_DURATION +XS_PRINCIPAL_INT.SET_DYNAMIC_ROLE_SCOPE +XS_PRINCIPAL_INT.SET_EFFECTIVE_DATES +XS_PRINCIPAL_INT.SET_GUID +XS_PRINCIPAL_INT.SET_PASSWORD_INTERNAL +XS_PRINCIPAL_INT.SET_PROFILE_INTERNAL +XS_PRINCIPAL_INT.SET_USER_SCHEMA +XS_PRINCIPAL_INT.SET_USER_STATUS +XS_PRINCIPAL_INT.SET_USER_STATUS_INTERNAL +XS_PRINCIPAL_INT.SET_VERIFIER_HELPER +XS_PRINCIPAL_INT.SET_VERIFIER_INTERNAL +XS_PROCEDURE_NAME +XS_PROXY_USER_NAME +XS_ROLESET. +XS_ROLESET.ADD_ROLES +XS_ROLESET.CREATE_ROLESET +XS_ROLESET.DELETE_ROLESET +XS_ROLESET.REMOVE_ROLES +XS_ROLESET.SET_DESCRIPTION +XS_ROLESET_INT. +XS_ROLESET_INT.ADD_ROLES +XS_ROLESET_INT.CREATE_ROLESET +XS_ROLESET_INT.DELETE_ROLESET +XS_ROLESET_INT.REMOVE_ROLES +XS_ROLESET_INT.SET_DESCRIPTION +XS_SCHEMA_NAME +XS_SECURITY_CLASS. +XS_SECURITY_CLASS.ADD_IMPLIED_PRIVILEGES +XS_SECURITY_CLASS.ADD_PARENTS +XS_SECURITY_CLASS.ADD_PRIVILEGES +XS_SECURITY_CLASS.CREATE_SECURITY_CLASS +XS_SECURITY_CLASS.DELETE_SECURITY_CLASS +XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES +XS_SECURITY_CLASS.REMOVE_PARENTS +XS_SECURITY_CLASS.REMOVE_PRIVILEGES +XS_SECURITY_CLASS.SET_DESCRIPTION +XS_SECURITY_CLASS_INT. +XS_SECURITY_CLASS_INT.ADD_IMPLIED_PRIVILEGES +XS_SECURITY_CLASS_INT.ADD_PARENTS +XS_SECURITY_CLASS_INT.ADD_PRIVILEGES +XS_SECURITY_CLASS_INT.CREATE_SECURITY_CLASS +XS_SECURITY_CLASS_INT.DELETE_SECURITY_CLASS +XS_SECURITY_CLASS_INT.REMOVE_IMPLIED_PRIVILEGES +XS_SECURITY_CLASS_INT.REMOVE_PARENTS +XS_SECURITY_CLASS_INT.REMOVE_PRIVILEGES +XS_SECURITY_CLASS_INT.SET_DESCRIPTION +XS_SESSIONID +XS_TARGET_PRINCIPAL_NAME +XS_USER_NAME +X_2_NULL +X_2_NULL_FORCED_STALE +X_2_NULL_FORCED_WRITE +X_2_S +X_2_SSX +X_2_SSX_FORCED_WRITE +X_2_S_FORCED_WRITE +X_DYN_PRUNE +YIELDS +ZERO_RESULTS +ZONEMAP +ZONEMAP_NAME +_4030_dump_bitvec +_4031_dump_bitvec +_4031_dump_interval +_4031_max_dumps +_4031_sga_dump_interval +_4031_sga_max_dumps +_AllowMultInsteadofDDLTrigger +_ILM_FILTER_TIME +_ILM_FILTER_TIME_LOWER +_ILM_POLICY_NAME +_NUMA_bind_mode +_NUMA_instance_mapping +_NUMA_pool_size +_PX_use_large_pool +__data_transfer_cache_size +__db_cache_size +__dg_broker_service_names +__java_pool_size +__large_pool_size +__oracle_base +__pga_aggregate_target +__sga_target +__shared_io_pool_size +__shared_pool_size +__streams_pool_size +__wait_test_param +_abort_on_mrp_crash +_abort_recovery_on_join +_ac_enable_dscn_in_rac +_ac_strict_SCN_check +_accept_versions +_active_instance_count +_active_session_idle_limit +_active_session_legacy_behavior +_active_standby_fast_reconfiguration +_adaptive_direct_read +_adaptive_direct_write +_adaptive_fetch_enabled +_adaptive_log_file_sync_high_switch_freq_threshold +_adaptive_log_file_sync_poll_aggressiveness +_adaptive_log_file_sync_sampling_count +_adaptive_log_file_sync_sampling_time +_adaptive_log_file_sync_sched_delay_window +_adaptive_log_file_sync_use_polling_threshold +_adaptive_log_file_sync_use_postwait_threshold +_adaptive_log_file_sync_use_postwait_threshold_aging +_adaptive_scalable_log_writer_disable_worker_threshold +_adaptive_scalable_log_writer_enable_worker_aging +_adaptive_scalable_log_writer_enable_worker_threshold +_adaptive_scalable_log_writer_sampling_count +_adaptive_scalable_log_writer_sampling_time +_adaptive_window_consolidator_enabled +_add_col_optim_enabled +_add_nullable_column_with_default_optim +_add_stale_mv_to_dependency_list +_add_trim_for_nlssort +_addm_auto_enable +_addm_skiprules +_addm_version_check +_adg_buffer_wait_timeout +_adg_distributed_lockmaster +_adg_instance_recovery +_adg_parselock_timeout +_adg_parselock_timeout_sleep +_adjust_literal_replacement +_adr_migrate_runonce +_advanced_index_compression_options +_advanced_index_compression_options_value +_advanced_index_compression_trace +_afd_disable_fence +_affinity_on +_aged_out_cursor_cache_time +_aggregation_optimization_settings +_aiowait_timeouts +_alert_expiration +_alert_message_cleanup +_alert_message_purge +_alert_post_background +_all_shared_dblinks +_allocate_creation_order +_allocation_update_interval +_allow_cell_smart_scan_attr +_allow_commutativity +_allow_compatibility_adv_w_grp +_allow_convert_to_standby +_allow_drop_snapshot_standby_grsp +_allow_drop_ts_with_grp +_allow_error_simulation +_allow_file_1_offline_error_1245 +_allow_level_without_connect_by +_allow_read_only_corruption +_allow_resetlogs_corruption +_allow_terminal_recovery_corruption +_alter_upgrade_signature_only +_alternate_iot_leaf_block_split_points +_always_anti_join +_always_semi_join +_always_star_transformation +_always_vector_transformation +_and_pruning_enabled +_appqos_cdb_setting +_appqos_po_multiplier +_appqos_qt +_approx_cnt_distinct_gby_pushdown +_approx_cnt_distinct_optimization +_aq_Txn_ht_sz +_aq_addpt_batch_size +_aq_disable_x +_aq_dq_prefetch_Siz +_aq_droppt_batch_size +_aq_init_shards +_aq_ipc_max_slave +_aq_latency_absolute_threshold +_aq_latency_relative_threshold +_aq_lb_cycle +_aq_lb_stats_collect_cycle +_aq_lookback_size +_aq_max_scan_delay +_aq_pt_processes +_aq_pt_shrink_frequency +_aq_pt_statistics_window +_aq_qt_prefetch_Size +_aq_shard_bitmap_child_latches +_aq_shard_child_latches +_aq_shard_prty_latches +_aq_shard_retry_child_latches +_aq_shard_sub_child_Elem_latches +_aq_shard_sub_child_latches +_aq_shard_txn_child_latches +_aq_stop_backgrounds +_aq_streaming_threshold +_aq_subshard_Size +_aq_subshards_per_dqpartition +_aq_subshards_per_qpartition +_aq_tm_deqcountinterval +_aq_tm_scanlimit +_aq_tm_statistics_duration +_aq_truncpt_batch_size +_aq_x_msg_size +_aqsharded_cache_limit +_arch_comp_dbg_scan +_arch_comp_dec_block_check_dump +_arch_compress_checksums +_arch_compression +_arch_io_slaves +_arch_sim_mode +_array_cdb_view_enabled +_array_update_vector_read_enabled +_ash_compression_enable +_ash_disk_filter_ratio +_ash_disk_write_enable +_ash_dummy_test_param +_ash_eflush_trigger +_ash_enable +_ash_min_mmnl_dump +_ash_sample_all +_ash_sampling_interval +_ash_size +_asm_access +_asm_acd_chunks +_asm_admin_with_sysdba +_asm_allow_appliance_dropdisk_noforce +_asm_allow_dangerous_unprotected_volumes +_asm_allow_lvm_resilvering +_asm_allow_only_raw_disks +_asm_allow_small_memory_target +_asm_allow_system_alias_rename +_asm_allow_unsafe_reconnect +_asm_allowdegeneratemounts +_asm_appliance_config_file +_asm_appliance_ignore_oak +_asm_appliance_slot_from_path +_asm_ausize +_asm_automatic_rezone +_asm_avoid_pst_scans +_asm_blksize +_asm_cancel_alert_time +_asm_check_for_misbehaving_cf_clients +_asm_compatibility +_asm_dba_batch +_asm_dba_spcchk_thld +_asm_dba_threshold +_asm_dbmsdg_nohdrchk +_asm_diag_dead_clients +_asm_direct_con_expire_time +_asm_disable_amdu_dump +_asm_disable_async_msgs +_asm_disable_dangerous_failgroup_checking +_asm_disable_multiple_instance_check +_asm_disable_profilediscovery +_asm_disable_smr_creation +_asm_disable_ufg_dump +_asm_disable_ufgmemberkill +_asm_disk_repair_time +_asm_diskerr_traces +_asm_diskgroups2 +_asm_diskgroups3 +_asm_diskgroups4 +_asm_emulate_nfs_disk +_asm_emulmax +_asm_emultimeout +_asm_enable_xrov +_asm_evenread +_asm_evenread_alpha +_asm_evenread_alpha2 +_asm_evenread_faststart +_asm_fail_random_rx +_asm_fd_cln_idle_sess_twait +_asm_fd_cln_on_fg +_asm_fob_tac_frequency +_asm_force_quiesce +_asm_force_vam +_asm_global_dump_level +_asm_hbeatiowait +_asm_hbeatwaitquantum +_asm_healthcheck_timeout +_asm_imbalance_tolerance +_asm_instlock_quota +_asm_iostat_latch_count +_asm_kfdpevent +_asm_kill_unresponsive_clients +_asm_libraries +_asm_log_scale_rebalance +_asm_lsod_bucket_size +_asm_max_cod_strides +_asm_max_parallelios +_asm_max_redo_buffer_size +_asm_maxio +_asm_network_timeout +_asm_networks +_asm_nodekill_escalate_time +_asm_noevenread_diskgroups +_asm_offload_all +_asm_partner_target_disk_part +_asm_partner_target_fg_rel +_asm_primary_load +_asm_primary_load_cycles +_asm_procs_trace_diskerr +_asm_proxy_startwait +_asm_random_zone +_asm_read_cancel +_asm_read_cancel_back_out +_asm_rebalance_plan_size +_asm_rebalance_space_errors +_asm_relocation_ignore_hard_failure +_asm_relocation_trace +_asm_remote_client_timeout +_asm_repairquantum +_asm_reserve_slaves +_asm_resyncCkpt +_asm_root_directory +_asm_runtime_capability_volume_support +_asm_scrub_limit +_asm_scrub_unmatched_dba +_asm_secondary_load +_asm_secondary_load_cycles +_asm_serialize_volume_rebalance +_asm_shadow_cycle +_asm_skip_dbfile_ios +_asm_skip_diskval_check +_asm_skip_rename_check +_asm_skip_resize_check +_asm_storagemaysplit +_asm_stripesize +_asm_stripewidth +_asm_sync_rebalance +_asm_trace_limit_timeout +_asm_usd_batch +_asm_wait_time +_asm_write_cancel +_asm_xrov_nstats +_asm_xrov_nvios +_asm_xrov_rsnmod +_asm_xrov_single +_asmsid +_assm_default +_assm_force_fetchmeta +_assm_high_gsp_threshold +_assm_low_gsp_threshold +_assm_test_force_rej +_assm_test_force_rej2 +_assm_test_reentrant_gsp +_async_recovery_claims +_async_recovery_reads +_async_rta_broadcast +_async_ts_threshold +_auto_assign_cg_for_sessions +_auto_bmr +_auto_bmr_bg_time +_auto_bmr_fc_time +_auto_bmr_max_rowno +_auto_bmr_pub_timeout +_auto_bmr_req_timeout +_auto_bmr_sess_threshold +_auto_bmr_sys_threshold +_auto_manage_enable_offline_check +_auto_manage_exadata_disks +_auto_manage_infreq_tout +_auto_manage_ioctl_bufsz +_auto_manage_max_online_tries +_auto_manage_num_pipe_msgs +_auto_manage_num_tries +_auto_manage_online_tries_expire_time +_automatic_maintenance_test +_automemory_broker_interval +_autotask_max_window +_autotask_min_window +_autotask_test_name +_autotune_gtx_idle_time +_autotune_gtx_interval +_autotune_gtx_threshold +_aux_dfc_keep_time +_available_core_count +_avoid_prepare +_awr_cdbperf_threshold +_awr_corrupt_mode +_awr_disabled_flush_tables +_awr_disabled_purge_tables +_awr_flush_threshold_metrics +_awr_flush_workload_metrics +_awr_mmon_cpuusage +_awr_mmon_deep_purge_all_expired +_awr_mmon_deep_purge_extent +_awr_mmon_deep_purge_interval +_awr_mmon_deep_purge_numrows +_awr_partition_interval +_awr_pdb_registration_enabled +_awr_remote_target_dblink +_awr_restrict_mode +_awr_snapshot_level +_awr_sql_child_limit +_b_tree_bitmap_plans +_ba_cf_trace_buffer_size +_ba_container_filesystem_ausize +_ba_max_containers +_ba_max_groups +_ba_max_seg_bytes +_ba_timeouts_enabled +_background_process_opts +_backup_align_write_io +_backup_appliance_enabled +_backup_automatic_retry +_backup_bool_spare1 +_backup_bool_spare2 +_backup_bool_spare3 +_backup_bool_spare4 +_backup_disk_bufcnt +_backup_disk_bufsz +_backup_disk_io_slaves +_backup_dynamic_buffers +_backup_encrypt_opt_mode +_backup_file_bufcnt +_backup_file_bufsz +_backup_int_spare1 +_backup_int_spare2 +_backup_int_spare3 +_backup_int_spare4 +_backup_io_pool_size +_backup_kgc_blksiz +_backup_kgc_bufsz +_backup_kgc_memlevel +_backup_kgc_niters +_backup_kgc_perflevel +_backup_kgc_scheme +_backup_kgc_type +_backup_kgc_windowbits +_backup_ksfq_bufcnt +_backup_ksfq_bufmem_max +_backup_ksfq_bufsz +_backup_lzo_size +_backup_max_gap_size +_backup_min_ct_unused_optim +_backup_seq_bufcnt +_backup_seq_bufsz +_backup_text_spare1 +_backup_text_spare2 +_backup_text_spare3 +_backup_text_spare4 +_bct_bitmaps_per_file +_bct_buffer_allocation_max +_bct_buffer_allocation_min_extents +_bct_buffer_allocation_size +_bct_chunk_size +_bct_crash_reserve_size +_bct_file_block_size +_bct_file_extent_size +_bct_fixtab_file +_bct_health_check_interval +_bct_initial_private_dba_buffer_size +_bct_mrp_timeout +_bct_public_dba_buffer_dynresize +_bct_public_dba_buffer_maxsize +_bct_public_dba_buffer_size +_bg_spawn_diag_opts +_bigdata_external_table +_bitmap_or_improvement_enabled +_block_level_offload_high_lat_thresh +_block_sample_readahead_prob_threshold +_blocking_sess_graph_cache_size +_blocks_per_cache_server +_bloom_filter_debug +_bloom_filter_enabled +_bloom_filter_size +_bloom_folding_density +_bloom_folding_enabled +_bloom_folding_min +_bloom_max_size +_bloom_minmax_enabled +_bloom_predicate_enabled +_bloom_predicate_offload +_bloom_pruning_enabled +_bloom_pushing_max +_bloom_pushing_total_max +_bloom_rm_filter +_bloom_serial_filter +_bloom_sm_enabled +_branch_tagging +_broadcast_scn_mode +_broadcast_scn_wait_timeout +_bsln_adaptive_thresholds_enabled +_bt_mmv_query_rewrite_enabled +_buffer_busy_wait_timeout +_buffered_message_spill_age +_buffered_publisher_flow_control_threshold +_bufq_stop_flow_control +_bug19146597_df_hist_offl_override +_build_deferred_mv_skipping_mvlog_update +_bump_highwater_mark_count +_bwr_for_flushed_pi +_bypass_srl_for_so_eor +_bypass_xplatform_error +_cache_orl_during_open +_cache_stats_monitor +_capture_buffer_size +_capture_publisher_flow_control_threshold +_case_sensitive_logon +_catalog_foreign_restore +_causal_standby_wait_timeout +_cdb_compatible +_cdb_cross_container +_cdb_rac_affinity +_cdb_spfile_inherit +_cdb_view_parallel_degree +_cdb_view_prefetch_batch_size +_cdb_view_rc_shelflife +_cdc_subscription_owner +_cdmp_diagnostic_level +_cell_fast_file_create +_cell_fast_file_restore +_cell_file_format_chunk_size +_cell_index_scan_enabled +_cell_materialize_all_expressions +_cell_materialize_virtual_columns +_cell_object_expiration_hours +_cell_offload_backup_compression +_cell_offload_capabilities_enabled +_cell_offload_complex_processing +_cell_offload_expressions +_cell_offload_hybridcolumnar +_cell_offload_predicate_reordering_enabled +_cell_offload_sys_context +_cell_offload_timezone +_cell_offload_virtual_columns +_cell_range_scan_enabled +_cell_storidx_minmax_enabled +_cell_storidx_mode +_cgs_allgroup_poll_time +_cgs_big_group_enabled +_cgs_comm_readiness_check +_cgs_dball_group_registration +_cgs_dbgroup_poll_time +_cgs_health_check_in_reconfig +_cgs_memberkill_from_rim_instance +_cgs_msg_batch_size +_cgs_msg_batching +_cgs_node_kill_escalation +_cgs_node_kill_escalation_wait +_cgs_os_level_connection_check +_cgs_os_level_connection_reqno +_cgs_reconfig_extra_wait +_cgs_reconfig_timeout +_cgs_send_timeout +_cgs_support_rim_disc +_cgs_ticket_sendback +_cgs_tickets +_cgs_zombie_member_kill_wait +_change_vector_buffers +_check_block_after_checksum +_check_block_new_invariant_for_flashback +_check_column_length +_check_pdbid_in_redo +_check_ts_threshold +_child_read_ahead_dba_check +_cleanout_shrcur_buffers +_cleanup_rollback_entries +_cleanup_timeout +_cleanup_timeout_flags +_clear_buffer_before_reuse +_cli_cachebktalloc +_client_enable_auto_unregister +_client_ntfn_cleanup_interval +_client_ntfn_pinginterval +_client_ntfn_pingretries +_client_ntfn_pingtimeout +_client_result_cache_bypass +_client_tstz_error_check +_clone_one_pdb_recovery +_close_cached_open_cursors +_close_deq_by_cond_curs +_cloud_name +_cluster_flash_cache_slave_file +_cluster_library +_clusterwide_global_transactions +_collapse_wait_history +_collect_tempundo_stats +_collect_undo_stats +_column_compression_factor +_column_elimination_off +_column_tracking_level +_common_data_view_enabled +_common_user_prefix +_compilation_call_heap_extent_size +_complex_view_merging +_compression_above_cache +_compression_advisor +_compression_chain +_compression_compatibility +_concurrency_chosen +_connect_by_use_union_all +_connection_broker_host +_controlfile_autobackup_delay +_controlfile_backup_copy_check +_controlfile_block_size +_controlfile_cell_flash_caching +_controlfile_enqueue_dump +_controlfile_enqueue_holding_time +_controlfile_enqueue_holding_time_tracking_size +_controlfile_enqueue_timeout +_controlfile_section_init_size +_controlfile_section_max_expand +_controlfile_split_brain_check +_controlfile_update_check +_convert_set_to_join +_coord_message_buffer +_corrupted_rollback_segments +_cost_equality_semi_join +_cp_num_hash_latches +_cpu_eff_thread_multiplier +_cpu_to_io +_cpu_util_adj_force +_cpu_util_adj_target +_cr_grant_global_role +_cr_grant_local_role +_cr_grant_only +_cr_server_log_flush +_cr_trc_buf_size +_crash_domain_on_exception +_create_stat_segment +_create_table_in_any_cluster +_cross_con_row_count +_crs_2phase +_ctx_doc_policy_stems +_cu_row_locking +_cursor_bind_capture_area_size +_cursor_bind_capture_interval +_cursor_cache_time +_cursor_db_buffers_pinned +_cursor_diagnostic_node_agedout_count +_cursor_features_enabled +_cursor_obsolete_threshold +_cursor_plan_enabled +_cursor_plan_hash_version +_cursor_plan_unparse_enabled +_cursor_reload_failure_threshold +_cursor_runtimeheap_memlimit +_cursor_stats_enabled +_cvmap_buffers +_cvw_enable_weak_checking +_data_transfer_cache_bc_perc_x100 +_data_transfer_cache_size +_data_warehousing_scan_buffers +_data_warehousing_scan_flash_buffers +_data_warehousing_serial_scan +_datafile_cow +_datafile_write_errors_crash_instance +_dataguard_prespawn_count +_datapump_compressbas_buffer_size +_datapump_metadata_buffer_size +_datapump_tabledata_buffer_size +_db_16k_flash_cache_file +_db_16k_flash_cache_size +_db_2k_flash_cache_file +_db_2k_flash_cache_size +_db_32k_flash_cache_file +_db_32k_flash_cache_size +_db_4k_flash_cache_file +_db_4k_flash_cache_size +_db_8k_flash_cache_file +_db_8k_flash_cache_size +_db_aging_cool_count +_db_aging_freeze_cr +_db_aging_hot_criteria +_db_aging_stay_count +_db_aging_touch_time +_db_always_check_system_ts +_db_block_adjcheck +_db_block_adjchk_level +_db_block_align_direct_read +_db_block_bad_write_check +_db_block_buffers +_db_block_cache_clone +_db_block_cache_history +_db_block_cache_history_level +_db_block_cache_history_lru +_db_block_cache_num_umap +_db_block_cache_protect +_db_block_cache_protect_internal +_db_block_check_for_debug +_db_block_check_objtyp +_db_block_chunkify_ncmbr +_db_block_corruption_recovery_threshold +_db_block_do_full_mbreads +_db_block_hash_buckets +_db_block_hash_latches +_db_block_header_guard_level +_db_block_hi_priority_batch_size +_db_block_known_clean_pct +_db_block_lru_latches +_db_block_max_cr_dba +_db_block_max_scan_pct +_db_block_med_priority_batch_size +_db_block_numa +_db_block_prefetch_fast_longjumps_enabled +_db_block_prefetch_limit +_db_block_prefetch_override +_db_block_prefetch_private_cache_enabled +_db_block_prefetch_quota +_db_block_prefetch_skip_reading_enabled +_db_block_prefetch_wasted_threshold_perc +_db_block_table_scan_buffer_size +_db_block_temp_redo +_db_block_trace_protect +_db_block_vlm_check +_db_block_vlm_leak_threshold +_db_blocks_per_hash_latch +_db_cache_advice_hash_latch_multiple +_db_cache_advice_max_size_factor +_db_cache_advice_sample_factor +_db_cache_advice_sanity_check +_db_cache_block_read_stack_trace +_db_cache_crx_check +_db_cache_miss_check_les +_db_cache_mman_latch_check +_db_cache_pre_warm +_db_cache_process_cr_pin_max +_db_cache_wait_debug +_db_change_notification_enable +_db_check_cell_hints +_db_disable_temp_encryption +_db_discard_lost_masterkey +_db_dump_from_disk_and_efc +_db_dw_scan_adaptive_cooling +_db_dw_scan_max_shadow_count +_db_dw_scan_obj_cooling_factor +_db_dw_scan_obj_cooling_interval +_db_dw_scan_obj_cooling_policy +_db_dw_scan_obj_warming_increment +_db_fast_obj_check +_db_fast_obj_ckpt +_db_fast_obj_truncate +_db_file_direct_io_count +_db_file_exec_read_count +_db_file_format_io_buffers +_db_file_noncontig_mblock_read_count +_db_file_optimizer_read_count +_db_flash_cache_disable_write_batchsize +_db_flash_cache_force_replenish_limit +_db_flash_cache_keep_limit +_db_flash_cache_max_latency +_db_flash_cache_max_outstanding_writes +_db_flash_cache_max_read_retry +_db_flash_cache_max_slow_io +_db_flash_cache_write_limit +_db_flashback_iobuf_size +_db_flashback_log_min_size +_db_flashback_log_min_total_space +_db_flashback_num_iobuf +_db_full_caching +_db_full_db_cache_diff_pct +_db_generate_dummy_masterkey +_db_handles +_db_handles_cached +_db_hot_block_tracking +_db_index_block_checking +_db_initial_cachesize_create_mb +_db_l2_tracing +_db_large_dirty_queue +_db_lost_write_checking +_db_lost_write_corrupt_block +_db_lost_write_tracing +_db_mttr_advice +_db_mttr_partitions +_db_mttr_sample_factor +_db_mttr_sim_target +_db_mttr_sim_trace_size +_db_mttr_trace_to_alert +_db_noarch_disble_optim +_db_num_evict_waitevents +_db_num_gsm +_db_obj_enable_ksr +_db_percent_hot_default +_db_percent_hot_keep +_db_percent_hot_recycle +_db_percpu_create_cachesize +_db_prefetch_histogram_statistics +_db_recovery_temporal_file_dest +_db_required_percent_fairshare_usage +_db_row_overlap_checking +_db_todefer_cache_create +_db_writer_chunk_writes +_db_writer_coalesce_area_size +_db_writer_coalesce_encrypted_buffers +_db_writer_coalesce_write_limit +_db_writer_flush_imu +_db_writer_histogram_statistics +_db_writer_max_writes +_db_writer_nomemcopy_coalesce +_db_writer_verify_writes +_dbfs_modify_implicit_fetch +_dbg_proc_startup +_dbg_scan +_dbms_sql_security_level +_dbop_enabled +_dbpool_name +_dbrm_dynamic_threshold +_dbrm_num_runnable_list +_dbrm_quantum +_dbrm_runchk +_dbrm_short_wait_us +_dbwr_async_io +_dbwr_scan_interval +_dbwr_stall_write_detection_interval +_dbwr_tracing +_dd_validate_remote_locks +_dde_flood_control_init +_dead_process_scan_interval +_deadlock_diagnostic_level +_deadlock_record_to_alert_log +_deadlock_resolution_incidents_always +_deadlock_resolution_incidents_enabled +_deadlock_resolution_level +_deadlock_resolution_min_wait_timeout_secs +_deadlock_resolution_signal_process_thresh_secs +_dedicated_server_poll_count +_dedicated_server_post_wait +_dedicated_server_post_wait_call +_default_encrypt_alg +_default_non_equality_sel_check +_defer_eor_orl_arch_for_so +_defer_log_boundary_ckpt +_defer_log_count +_defer_rcv_during_sw_to_sby +_defer_sga_alloc_chunk_size +_defer_sga_enabled +_defer_sga_min_spsz_at_startup +_defer_sga_min_total_defer_segs_sz +_defer_sga_test_alloc_intv +_deferred_constant_folding_mode +_deferred_log_dest_is_valid +_deferred_seg_in_seed +_delay_index_maintain +_delta_push_share_blockers +_deq_execute_reset_time +_deq_ht_child_latches +_deq_ht_max_elements +_deq_large_txn_size +_deq_log_array_size +_deq_max_fetch_count +_deq_maxwait_time +_desired_readmem_rate +_dg_broker_trace_level +_dg_cf_check_timer +_dg_corrupt_redo_log +_diag_adr_auto_purge +_diag_adr_enabled +_diag_adr_test_param +_diag_adr_trace_dest +_diag_arb_before_kill +_diag_backward_compat +_diag_cc_enabled +_diag_conf_cap_enabled +_diag_crashdump_level +_diag_daemon +_diag_dde_async_age_limit +_diag_dde_async_cputime_limit +_diag_dde_async_mode +_diag_dde_async_msg_capacity +_diag_dde_async_msgs +_diag_dde_async_process_rate +_diag_dde_async_runtime_limit +_diag_dde_async_slaves +_diag_dde_enabled +_diag_dde_fc_enabled +_diag_dde_fc_implicit_time +_diag_dde_fc_macro_time +_diag_dde_inc_proc_delay +_diag_diagnostics +_diag_dump_request_debug_level +_diag_dump_timeout +_diag_enable_startup_events +_diag_hm_rc_enabled +_diag_hm_tc_enabled +_diag_patch_cap_enabled +_diag_proc_enabled +_diag_proc_max_time_ms +_diag_proc_stack_capture_type +_diag_test_seg_reinc_mode +_diag_uts_control +_diag_verbose_error_on_init +_diag_xm_enabled +_dimension_skip_null +_direct_io_skip_cur_slot_on_error +_direct_io_slots +_direct_io_wslots +_direct_path_insert_features +_direct_read_decision_statistics_driven +_dirty_appliance_mode +_disable_12751 +_disable_12cbigfile +_disable_active_influx_move +_disable_adaptive_shrunk_aggregation +_disable_appliance_check +_disable_appliance_partnering +_disable_autotune_gtx +_disable_block_checking +_disable_cdb_view_rc_invalidation +_disable_cell_optimized_backups +_disable_cpu_check +_disable_cursor_sharing +_disable_datalayer_sampling +_disable_directory_link_check +_disable_duplex_link +_disable_duplicate_service_warning +_disable_fast_aggregation +_disable_fast_validate +_disable_fastopen +_disable_fba_qrw +_disable_fba_wpr +_disable_file_locks +_disable_file_resize_logging +_disable_flashback_archiver +_disable_flashback_recyclebin_opt +_disable_flashback_wait_callback +_disable_function_based_index +_disable_gvaq_cache +_disable_health_check +_disable_highres_ticks +_disable_image_check +_disable_implicit_row_movement +_disable_incremental_checkpoints +_disable_incremental_recovery_ckpt +_disable_index_block_prefetching +_disable_initial_block_compression +_disable_instance_params_check +_disable_interface_checking +_disable_kcb_flashback_blocknew_opt +_disable_kcbhxor_osd +_disable_kcbl_flashback_blocknew_opt +_disable_kgghshcrc32_osd +_disable_latch_free_SCN_writes_via_32cas +_disable_latch_free_SCN_writes_via_64cas +_disable_logging +_disable_metrics_group +_disable_modsvc_refresh +_disable_multiple_block_sizes +_disable_odm +_disable_oradebug_commands +_disable_parallel_conventional_load +_disable_primary_bitmap_switch +_disable_read_only_open_dict_check +_disable_rebalance_space_check +_disable_recovery_read_skip +_disable_rolling_patch +_disable_sample_io_optim +_disable_savepoint_reset +_disable_selftune_checkpointing +_disable_storage_type +_disable_streams_diagnostics +_disable_streams_pool_auto_tuning +_disable_sun_rsm +_disable_system_state +_disable_system_state_wait_samples +_disable_temp_tablespace_alerts +_disable_thread_internal_disable +_disable_thread_snapshot +_disable_txn_alert +_disable_undo_tablespace_alerts +_disable_wait_state +_discard_cmn_ddl_in_pdb_err +_discrete_transactions_enabled +_disk_sector_size_override +_diskmon_pipe_name +_dispatcher_listen_on_vip +_dispatcher_rate_scale +_dispatcher_rate_ttl +_distinct_agg_optimization_gsets +_distinct_view_unnesting +_distributed_recovery_connection_hold_time +_dlmtrace +_dm_dmf_details_compatibility +_dm_enable_legacy_dmf_output_types +_dm_max_shared_pool_pct +_dml_batch_error_limit +_dml_frequency_tracking +_dml_frequency_tracking_advance +_dml_frequency_tracking_slot_time +_dml_frequency_tracking_slots +_dml_monitoring_enabled +_dnfs_rdma_enable +_dnfs_rdma_max +_dnfs_rdma_min +_domain_index_batch_size +_domain_index_dml_batch_size +_dra_bmr_number_threshold +_dra_bmr_percent_threshold +_dra_enable_offline_dictionary +_drm_parallel_freeze +_drop_flashback_logical_operations_enq +_drop_stat_segment +_drop_table_granule +_drop_table_optimization_enabled +_ds_enable_auto_txn +_ds_iocount_iosize +_ds_parse_model +_dsc_feature_level +_dskm_health_check_cnt +_dss_cache_flush +_dtree_area_size +_dtree_binning_enabled +_dtree_bintest_id +_dtree_compressbmp_enabled +_dtree_max_surrogates +_dtree_pruning_enabled +_dummy_instance +_dump_10261_level +_dump_common_subexpressions +_dump_connect_by_loop_data +_dump_cursor_heap_sizes +_dump_interval_limit +_dump_max_limit +_dump_qbc_tree +_dump_rcvr_ipc +_dump_scn_increment_stack +_dump_system_state_scope +_dump_trace_scope +_dynamic_rls_policies +_dynamic_share_range_factor +_dynamic_stats_threshold +_early_flush_delta +_eighteenth_spare_parameter +_eighth_spare_parameter +_eightieth_spare_parameter +_eighty-eighth_spare_parameter +_eighty-fifth_spare_parameter +_eighty-first_spare_parameter +_eighty-fourth_spare_parameter +_eighty-ninth_spare_parameter +_eighty-second_spare_parameter +_eighty-seventh_spare_parameter +_eighty-sixth_spare_parameter +_eighty-third_spare_parameter +_eleventh_spare_parameter +_eliminate_common_subexpr +_emon_max_active_connections +_emon_outbound_connect_timeout +_emon_pool_inc +_emon_pool_max +_emon_pool_min +_emon_regular_ntfn_slaves +_emon_send_timeout +_emx_control +_emx_max_sessions +_emx_session_timeout +_enable_12g_bft +_enable_Front_End_View_Optimization +_enable_NUMA_interleave +_enable_NUMA_optimization +_enable_NUMA_support +_enable_asyncvio +_enable_automatic_maintenance +_enable_automatic_sqltune +_enable_block_level_transaction_recovery +_enable_check_truncate +_enable_columnar_cache +_enable_cscn_caching +_enable_ddl_wait_lock +_enable_default_affinity +_enable_default_temp_threshold +_enable_default_undo_threshold +_enable_dml_lock_escalation +_enable_editions_for_users +_enable_exchange_validation_using_check +_enable_fast_file_zero +_enable_fast_ref_after_mv_tbs +_enable_ffw +_enable_flash_logging +_enable_hash_overflow +_enable_heatmap_internal +_enable_hwm_sync +_enable_iee_stats +_enable_ilm_flush_stats +_enable_ilm_testflush_stats +_enable_kernel_io_outliers +_enable_kqf_purge +_enable_list_io +_enable_metrics_allpdb +_enable_metrics_pdb +_enable_midtier_affinity +_enable_minscn_cr +_enable_nativenet_tcpip +_enable_obj_queues +_enable_offloaded_writes +_enable_online_index_without_s_locking +_enable_pdb_close_abort +_enable_pdb_close_noarchivelog +_enable_pluggable_database +_enable_query_rewrite_on_remote_objs +_enable_redo_global_post +_enable_refresh_schedule +_enable_reliable_latch_waits +_enable_rename_user +_enable_rlb +_enable_row_shipping +_enable_sb_detection +_enable_schema_synonyms +_enable_scn_wait_interface +_enable_securefile_flashback_opt +_enable_separable_transactions +_enable_shared_pool_durations +_enable_shared_server_vector_io +_enable_space_preallocation +_enable_spacebg +_enable_tablespace_alerts +_enable_type_dep_selectivity +_endprot_chunk_comment +_endprot_heap_comment +_endprot_subheaps +_enqueue_deadlock_detect_all_global_locks +_enqueue_deadlock_scan_secs +_enqueue_deadlock_time_sec +_enqueue_debug_multi_instance +_enqueue_hash +_enqueue_hash_chain_latches +_enqueue_locks +_enqueue_paranoia_mode_enabled +_enqueue_resources +_enqueue_sync_retry_attempts +_enqueue_sync_sim_mem_error +_evolve_plan_baseline_report_level +_evt_system_event_propagation +_exafusion_enabled +_expand_aggregates +_explain_rewrite_mode +_extended_pruning_enabled +_external_scn_logging_threshold_seconds +_external_scn_rejection_delta_threshold_minutes +_external_scn_rejection_threshold_hours +_external_table_smart_scan +_fair_remote_cvt +_fairness_threshold +_fast_cursor_reexecute +_fast_dual_enabled +_fast_full_scan_enabled +_fast_index_maintenance +_fast_psby_conversion +_fastpin_enable +_fbda_busy_percentage +_fbda_debug_assert +_fbda_debug_mode +_fbda_global_bscn_lag +_fbda_inline_percentage +_fbda_rac_inactive_limit +_fg_iorm_slaves +_fg_log_checksum +_fg_sync_sleep_usecs +_fic_algorithm_set +_fic_area_size +_fic_max_length +_fic_min_bmsize +_fic_outofmem_candidates +_fifteenth_spare_parameter +_fifth_spare_parameter +_fiftieth_spare_parameter +_fifty-eighth_spare_parameter +_fifty-fifth_spare_parameter +_fifty-first_spare_parameter +_fifty-fourth_spare_parameter +_fifty-ninth_spare_parameter +_fifty-second_spare_parameter +_fifty-seventh_spare_parameter +_fifty-sixth_spare_parameter +_fifty-third_spare_parameter +_file_offline_sync_timeout +_file_set_enqueue_timeout +_file_size_increase_increment +_filemap_dir +_first_k_rows_dynamic_proration +_fix_control +_flashback_11.1_block_new_opt +_flashback_allow_noarchivelog +_flashback_archiver_partition_size +_flashback_barrier_interval +_flashback_copy_latches +_flashback_database_test_only +_flashback_delete_chunk_MB +_flashback_dynamic_enable +_flashback_dynamic_enable_failure +_flashback_enable_ra +_flashback_format_chunk_mb +_flashback_format_chunk_mb_dwrite +_flashback_fuzzy_barrier +_flashback_generation_buffer_size +_flashback_hint_barrier_percent +_flashback_log_io_error_behavior +_flashback_log_min_size +_flashback_log_rac_balance_factor +_flashback_log_size +_flashback_logfile_enqueue_timeout +_flashback_marker_cache_enabled +_flashback_marker_cache_size +_flashback_max_log_size +_flashback_max_n_log_per_thread +_flashback_max_standby_sync_span +_flashback_n_log_per_thread +_flashback_prepare_log +_flashback_size_based_on_redo +_flashback_standby_barrier_interval +_flashback_validate_controlfile +_flashback_verbose_info +_flashback_write_max_loop_limit +_flush_ilm_stats +_flush_plan_in_awr_sql +_flush_redo_to_standby +_flush_undo_after_tx_recovery +_force_arch_compress +_force_datefold_trunc +_force_hash_join_spill +_force_hsc_compress +_force_logging_in_upgrade +_force_oltp_compress +_force_oltp_update_opt +_force_rcv_info_ping +_force_rewrite_enable +_force_slave_mapping_intra_part_loads +_force_sys_compress +_force_temptables_for_gsets +_force_tmp_segment_loads +_fortieth_spare_parameter +_forty-eighth_spare_parameter +_forty-fifth_spare_parameter +_forty-first_spare_parameter +_forty-fourth_spare_parameter +_forty-ninth_spare_parameter +_forty-second_spare_parameter +_forty-seventh_spare_parameter +_forty-sixth_spare_parameter +_forty-third_spare_parameter +_forwarded_2pc_threshold +_fourteenth_spare_parameter +_fourth_spare_parameter +_frame_cache_time +_full_diag_on_rim +_full_pwise_join_enabled +_fusion_security +_gby_hash_aggregation_enabled +_gby_onekey_enabled +_gby_vector_aggregation_enabled +_gc_affinity_locking +_gc_affinity_locks +_gc_affinity_ratio +_gc_async_send +_gc_bypass_readers +_gc_check_bscn +_gc_coalesce_recovery_reads +_gc_cpu_time +_gc_cr_server_read_wait +_gc_defer_ping_index_only +_gc_defer_time +_gc_delta_push_objects +_gc_disable_s_lock_brr_ping_check +_gc_down_convert_after_keep +_gc_dump_remote_lock +_gc_element_percent +_gc_escalate_bid +_gc_fg_merge +_gc_fg_spin_time +_gc_flush_during_affinity +_gc_fusion_compression +_gc_global_checkpoint_scn +_gc_global_cpu +_gc_global_lru +_gc_global_lru_touch_count +_gc_global_lru_touch_time +_gc_integrity_checks +_gc_keep_recovery_buffers +_gc_latches +_gc_log_flush +_gc_long_query_threshold +_gc_max_downcvt +_gc_maximum_bids +_gc_msgq_buffer_size +_gc_msgq_buffers +_gc_no_fairness_for_clones +_gc_object_queue_max_length +_gc_override_force_cr +_gc_persistent_read_mostly +_gc_policy_minimum +_gc_policy_rm_dirty_percent +_gc_policy_time +_gc_read_mostly_flush_check +_gc_read_mostly_locking +_gc_sanity_check_cr_buffers +_gc_save_cleanout +_gc_serve_from_flash_cache +_gc_statistics +_gc_temp_affinity +_gc_trace_freelist_empty +_gc_transfer_ratio +_gc_try_to_skip_imc_flush +_gc_undo_affinity +_gc_undo_block_disk_reads +_gc_vector_read +_gcr_cpu_min_free +_gcr_css_group_large +_gcr_css_group_query_boost +_gcr_css_group_try_lock_delay +_gcr_css_group_update2_interval +_gcr_css_group_update_interval +_gcr_css_use_2group_lock +_gcr_enable_high_cpu_kill +_gcr_enable_high_cpu_rm +_gcr_enable_high_cpu_rt +_gcr_enable_high_memory_kill +_gcr_enable_new_drm_check +_gcr_enable_statistical_cpu_check +_gcr_high_cpu_threshold +_gcr_high_memory_threshold +_gcr_max_rt_procs +_gcr_mem_min_free +_gcr_tick +_gcr_use_css +_gcs_cluster_flash_cache_mode +_gcs_disable_remote_handles +_gcs_disable_skip_close_remastering +_gcs_dynamic_slaves +_gcs_fast_reconfig +_gcs_flash_cache_mode +_gcs_latches +_gcs_min_slaves +_gcs_pkey_history +_gcs_process_in_recovery +_gcs_res_hash_buckets +_gcs_res_per_bucket +_gcs_reserved_resources +_gcs_reserved_shadows +_gcs_resources +_gcs_shadow_locks +_gcs_testing +_generalized_pruning_enabled +_ges_dd_debug +_ges_default_lmds +_ges_designated_master +_ges_diagnostics +_ges_diagnostics_asm_dump_level +_ges_direct_free +_ges_direct_free_res_type +_ges_dump_open_locks +_ges_fggl +_ges_freeable_res_chunk_free +_ges_freeable_res_chunk_free_interval +_ges_gather_res_reuse_stats +_ges_hash_groups +_ges_health_check +_ges_lmd_mapping +_ges_nres_divide +_ges_num_blockers_to_kill +_ges_resource_memory_opt +_ges_server_processes +_ges_vbfreelists +_global_hang_analysis_interval_secs +_globalindex_pnum_filter_enabled +_grant_read_instead_of_select +_grant_secure_role +_groupby_nopushdown_cut_ratio +_groupby_orderby_combine +_gs_anti_semi_join_allowed +_gsm +_gsm_config_vers +_gsm_cpu_thresh +_gsm_drv_interval +_gsm_max_instances_per_db +_gsm_max_num_regions +_gsm_region_list +_gsm_srlat_thresh +_gsm_thresh_respct +_gsm_thresh_zone +_gwm_spare1 +_gwm_spare2 +_gwm_spare3 +_hang_analysis_num_call_stacks +_hang_base_file_count +_hang_base_file_space_limit +_hang_bool_spare1 +_hang_cross_boundary_hang_detection_enabled +_hang_delay_resolution_for_libcache +_hang_detection_enabled +_hang_detection_interval +_hang_hang_analyze_output_hang_chains +_hang_hiload_promoted_ignored_hang_count +_hang_hiprior_session_attribute_list +_hang_ignored_hang_count +_hang_ignored_hangs_interval +_hang_int_spare2 +_hang_log_verified_hangs_to_alert +_hang_long_wait_time_threshold +_hang_lws_file_count +_hang_lws_file_space_limit +_hang_monitor_archiving_related_hang_interval +_hang_msg_checksum_enabled +_hang_resolution_allow_archiving_issue_termination +_hang_resolution_confidence_promotion +_hang_resolution_global_hang_confidence_promotion +_hang_resolution_percent_hung_sessions_threshold +_hang_resolution_policy +_hang_resolution_promote_process_termination +_hang_resolution_scope +_hang_short_stacks_output_enabled +_hang_signature_list_match_output_frequency +_hang_statistics_collection_interval +_hang_statistics_collection_ma_alpha +_hang_statistics_high_io_percentage_threshold +_hang_terminate_session_replay_enabled +_hang_verification_interval +_hard_protection +_hash_join_enabled +_hash_multiblock_io_count +_hashops_prefetch_size +_hb_redo_interval +_hb_redo_msg_interval +_heatmap_format_1block +_heatmap_min_maxsize +_heur_deadlock_resolution_secs +_high_priority_processes +_high_threshold_delta +_highest_priority_processes +_highres_drift_allowed_sec +_highthreshold_undoretention +_hj_bit_filter_threshold +_hm_analysis_oradebug_sys_dump_level +_hm_xm_enabled +_hpk_compression_range +_hpk_project_cost_weighting +_hpk_throughput_range +_hwm_sync_threshold +_idl_conventional_index_maintenance +_idle_session_kill_enabled +_idxrb_rowincr +_ignore_desc_in_index +_ignore_edition_enabled_for_EV_creation +_ignore_fg_deps +_ilm_mem_limit +_ilmflush_stat_limit +_ilmset_stat_limit +_ilmstat_memlimit +_image_redo_gen_delay +_immediate_commit_propagation +_improved_outerjoin_card +_improved_row_length_enabled +_imr_active +_imr_avoid_double_voting +_imr_check_css_incarnation_number +_imr_controlfile_access_wait_time +_imr_device_type +_imr_disk_voting_interval +_imr_diskvote_implementation +_imr_evicted_member_kill +_imr_evicted_member_kill_wait +_imr_extra_reconfig_wait +_imr_highload_threshold +_imr_max_reconfig_delay +_imr_rr_holder_kill_time +_imr_splitbrain_res_wait +_imr_systemload_check +_imu_pools +_in_memory_tbs_search +_in_memory_undo +_incremental_recovery_ckpt_min_batch +_index_join_enabled +_index_load_buf_oltp_sacrifice_pct +_index_load_buf_oltp_under_pct +_index_max_inc_trans_pct +_index_partition_large_extents +_index_prefetch_factor +_index_scan_check_skip_corrupt +_index_scan_check_stopkey +_indexable_con_id +_init_granule_interval +_init_sql_file +_inject_startup_fault +_inline_sql_in_plsql +_inmemory_64k_percent +_inmemory_analyzer_optimize_for +_inmemory_auto_distribute +_inmemory_autodist_2safe +_inmemory_buffer_waittime +_inmemory_check_prot_meta +_inmemory_check_protect +_inmemory_checksum +_inmemory_cu_timeout +_inmemory_cudrop_timeout +_inmemory_dbg_scan +_inmemory_default_flags +_inmemory_default_new +_inmemory_distribute_ondemand_timeout +_inmemory_distribute_timeout +_inmemory_enable_population_verify +_inmemory_enable_stat_alert +_inmemory_enable_sys +_inmemory_exclto_timeout +_inmemory_force_fs +_inmemory_force_fs_tbs +_inmemory_force_fs_tbs_size +_inmemory_force_non_engineered +_inmemory_fs_blk_inv_blk_percent +_inmemory_fs_blk_inv_blkcnt +_inmemory_fs_enable +_inmemory_fs_enable_blk_lvl_inv +_inmemory_fs_nodml +_inmemory_fs_raise_error +_inmemory_fs_verify +_inmemory_imco_cycle +_inmemory_imcu_align +_inmemory_imcu_populate_minbytes +_inmemory_imcu_source_analyze_bytes +_inmemory_imcu_source_blocks +_inmemory_imcu_source_extents +_inmemory_imcu_source_maxbytes +_inmemory_imcu_source_minbytes +_inmemory_imcu_target_bytes +_inmemory_imcu_target_maxrows +_inmemory_imcu_target_rows +_inmemory_incremental_repopulation +_inmemory_invalidate_cursors +_inmemory_journal_check +_inmemory_journal_row_logging +_inmemory_jscan +_inmemory_lock_for_smucreate +_inmemory_log_level +_inmemory_max_populate_retry +_inmemory_max_queued_tasks +_inmemory_memprot +_inmemory_min_ima_defersize +_inmemory_num_hash_latches +_inmemory_pct_inv_blocks_invalidate_imcu +_inmemory_pct_inv_rows_invalidate_imcu +_inmemory_pga_per_server +_inmemory_pin_hist_mode +_inmemory_populate_fg +_inmemory_populate_wait +_inmemory_populate_wait_max +_inmemory_prepopulate +_inmemory_prepopulate_fg +_inmemory_private_journal_numbkts +_inmemory_private_journal_numgran +_inmemory_private_journal_quota +_inmemory_private_journal_sharedpool_quota +_inmemory_pruning +_inmemory_query_check +_inmemory_query_fetch_by_rowid +_inmemory_query_scan +_inmemory_repopulate_disable +_inmemory_repopulate_invalidate_rate_percent +_inmemory_repopulate_priority_scale_factor +_inmemory_repopulate_priority_threshold_block +_inmemory_repopulate_priority_threshold_row +_inmemory_repopulate_threshold_blocks +_inmemory_repopulate_threshold_blocks_percent +_inmemory_repopulate_threshold_mintime +_inmemory_repopulate_threshold_mintime_factor +_inmemory_repopulate_threshold_rows +_inmemory_repopulate_threshold_rows_percent +_inmemory_repopulate_threshold_scans +_inmemory_rows_check_interrupt +_inmemory_scan_override +_inmemory_scan_threshold_percent_noscan +_inmemory_segment_populate_verify +_inmemory_servers_throttle_pgalim_percent +_inmemory_small_segment_threshold +_inmemory_strdlxid_timeout +_inmemory_suppress_vsga_ima +_inmemory_test_verification +_inmemory_trickle_repopulate +_inmemory_trickle_repopulate_fg +_inmemory_trickle_repopulate_min_interval +_inmemory_trickle_repopulate_threshold_dirty_ratio +_inmemory_txn_checksum +_inmemory_validate_fetch +_inplace_update_retry +_inquiry_retry_interval +_insert_enable_hwm_brokered +_inst_locking_period +_interconnect_checksum +_intrapart_pdml_enabled +_intrapart_pdml_randomlocal_enabled +_io_internal_test +_io_osd_param +_io_outlier_threshold +_io_resource_manager_always_on +_io_shared_pool_size +_io_slaves_disabled +_io_statistics +_iocalibrate_init_ios +_iocalibrate_max_ios +_ioq_fanin_multiplier +_ior_serialize_fault +_iorm_tout +_ioslave_batch_count +_ioslave_issue_count +_ipc_config_opts_dyn +_ipc_config_opts_stat +_ipc_fail_network +_ipc_test_failover +_ipc_test_mult_nets +_ipddb_enable +_job_queue_interval +_k2q_latches +_ka_allow_reenable +_ka_compatibility_requirement +_ka_doorbell +_ka_enabled +_ka_grant_policy +_ka_locks_per_sector +_ka_max_wait_delay +_ka_mode +_ka_msg_reap_count +_ka_msg_wait_count +_ka_pbatch_messages +_ka_scn_accel_shrmem +_ka_scn_enabled +_ka_scn_use_ka_msgs +_kcbl_assert_reset_slot +_kcfis_automem_level +_kcfis_block_dump_level +_kcfis_caching_enabled +_kcfis_cell_passthru_dataonly +_kcfis_cell_passthru_enabled +_kcfis_cell_passthru_fromcpu_enabled +_kcfis_celloflsrv_passthru_enabled +_kcfis_celloflsrv_usage_enabled +_kcfis_control1 +_kcfis_control2 +_kcfis_control3 +_kcfis_control4 +_kcfis_control5 +_kcfis_control6 +_kcfis_disable_platform_decryption +_kcfis_dump_corrupt_block +_kcfis_fast_response_enabled +_kcfis_fast_response_initiosize +_kcfis_fast_response_iosizemult +_kcfis_fast_response_threshold +_kcfis_fastfileinit_disabled +_kcfis_fault_control +_kcfis_io_prefetch_size +_kcfis_ioreqs_throttle_enabled +_kcfis_kept_in_cellfc_enabled +_kcfis_large_payload_enabled +_kcfis_max_cached_sessions +_kcfis_max_out_translations +_kcfis_nonkept_in_cellfc_enabled +_kcfis_oss_io_size +_kcfis_qm_prioritize_sys_plan +_kcfis_qm_user_plan_name +_kcfis_rdbms_blockio_enabled +_kcfis_read_buffer_limit +_kcfis_spawn_debugger +_kcfis_stats_level +_kcfis_storageidx_diag_mode +_kcfis_storageidx_disabled +_kcfis_test_control1 +_kcfis_trace_bucket_size +_kcfis_xtgran_prefetch_count +_kcl_commit +_kcl_conservative_log_flush +_kcl_debug +_kcl_index_split +_kd_symtab_chk +_kdbl_enable_post_allocation +_kdi_avoid_block_checking +_kdic_segarr_sz +_kdis_reject_level +_kdis_reject_limit +_kdis_reject_ops +_kdizoltp_uncompsentinal_freq +_kdlf_read_flag +_kdli_STOP_bsz +_kdli_STOP_dba +_kdli_STOP_fsz +_kdli_STOP_nio +_kdli_STOP_tsn +_kdli_allow_corrupt +_kdli_buffer_inject +_kdli_cache_inode +_kdli_cache_read_threshold +_kdli_cache_size +_kdli_cache_verify +_kdli_cache_write_threshold +_kdli_cacheable_length +_kdli_checkpoint_flush +_kdli_dbc +_kdli_delay_flushes +_kdli_descn_adj +_kdli_flush_cache_reads +_kdli_flush_injections +_kdli_force_cr +_kdli_force_cr_meta +_kdli_force_storage +_kdli_full_readahead_threshold +_kdli_inject_assert +_kdli_inject_batch +_kdli_inject_crash +_kdli_inline_xfm +_kdli_inode_preference +_kdli_inplace_overwrite +_kdli_itree_entries +_kdli_memory_protect +_kdli_mts_so +_kdli_oneblk +_kdli_preallocation_mode +_kdli_preallocation_pct +_kdli_ralc_length +_kdli_ralc_rounding +_kdli_rci_lobmap_entries +_kdli_readahead_limit +_kdli_readahead_strategy +_kdli_recent_scn +_kdli_reshape +_kdli_safe_callbacks +_kdli_sio_async +_kdli_sio_backoff +_kdli_sio_bps +_kdli_sio_dop +_kdli_sio_fbwrite_pct +_kdli_sio_fgio +_kdli_sio_fileopen +_kdli_sio_flush +_kdli_sio_free +_kdli_sio_min_read +_kdli_sio_min_write +_kdli_sio_nbufs +_kdli_sio_niods +_kdli_sio_on +_kdli_sio_pga +_kdli_sio_pga_top +_kdli_sio_strategy +_kdli_sio_write_pct +_kdli_small_cache_limit +_kdli_sort_dbas +_kdli_space_cache_limit +_kdli_space_cache_segments +_kdli_squeeze +_kdli_timer_dmp +_kdli_timer_trc +_kdli_trace +_kdli_vll_direct +_kdlu_max_bucket_size +_kdlu_max_bucket_size_mts +_kdlu_trace_layer +_kdlu_trace_system +_kdlw_enable_ksi_locking +_kdlw_enable_write_gathering +_kdlwp_flush_threshold +_kdlxp_cmp_subunit_size +_kdlxp_dedup_flush_threshold +_kdlxp_dedup_hash_algo +_kdlxp_dedup_inl_pctfree +_kdlxp_dedup_prefix_threshold +_kdlxp_dedup_wapp_len +_kdlxp_lobcmpadp +_kdlxp_lobcmplevel +_kdlxp_lobcmprciver +_kdlxp_lobcompress +_kdlxp_lobdeduplicate +_kdlxp_lobdedupvalidate +_kdlxp_lobencrypt +_kdlxp_mincmp +_kdlxp_mincmplen +_kdlxp_minxfm_size +_kdlxp_spare1 +_kdlxp_uncmp +_kdlxp_xfmcache +_kdt_buffering +_kdtgsp_retries +_kdu_array_depth +_kdz_hcc_flags +_kdz_hcc_track_upd_rids +_kdz_pcode_flags +_kdz_pred_nrows +_kdz_proj_nrows +_kdzk_enable_init_trace +_kdzk_load_specialized_library +_kdzk_trace_level +_kebm_nstrikes +_kebm_suspension_time +_kecap_cache_size +_keep_19907_during_recovery +_keep_remote_column_size +_kernel_message_network_driver +_kes_parse_model +_kewm_simulate_oer4031 +_key_vector_caching +_key_vector_max_size +_key_vector_offload +_key_vector_predicate_enabled +_key_vector_predicate_threshold +_kffmap_hash_size +_kffmlk_hash_size +_kffmop_chunks +_kffmop_hash_size +_kfm_disable_set_fence +_kgh_restricted_subheaps +_kgh_restricted_trace +_kghdsidx_count +_kgl_bucket_count +_kgl_cluster_lock +_kgl_cluster_lock_read_mostly +_kgl_cluster_pin +_kgl_debug +_kgl_fixed_extents +_kgl_hash_collision +_kgl_heap_size +_kgl_hot_object_copies +_kgl_kqr_cap_so_stacks +_kgl_large_heap_assert_threshold +_kgl_large_heap_warning_threshold +_kgl_latch_count +_kgl_message_locks +_kgl_min_cached_so_count +_kgl_time_to_wait_for_locks +_kglsim_maxmem_percent +_kgsb_threshold_size +_kgx_latches +_kill_controlfile_enqueue_blocker +_kill_diagnostics_timeout +_kill_enqueue_blocker +_kill_java_threads_on_eoc +_kill_session_dump +_kjac_force_outcome_current_session +_kjdd_call_stack_dump_enabled +_kjdd_wfg_dump_cntrl +_kjltmaxgt +_kjltmaxht +_kjlton +_kkfi_trace +_kks_cached_parse_errors +_kks_free_cursor_stat_pct +_kks_obsolete_dump_threshold +_kktAllowInsteadOfDDLTriggeronDDL +_kokli_cache_size +_kokln_current_read +_kolfuseslf +_kqdsn_max_instance_bits +_kqdsn_min_instance_bits +_kqdsn_partition_ratio +_kql_subheap_trace +_kqr_optimistic_reads +_kra_trace_buffer_size +_krb_trace_buffer_size +_krbabr_trace_buffer_size +_krc_trace_buffer_size +_ksb_restart_clean_time +_ksb_restart_policy_times +_ksd_test_param +_ksdx_charset_ratio +_ksdxdocmd_default_timeout_ms +_ksdxdocmd_enabled +_ksdxw_cini_flg +_ksdxw_nbufs +_ksdxw_num_pgw +_ksdxw_num_sgw +_ksdxw_stack_depth +_ksdxw_stack_readable +_kse_die_timeout +_kse_pc_table_size +_kse_signature_entries +_kse_signature_limit +_kse_snap_ring_disable +_kse_snap_ring_record_stack +_kse_snap_ring_size +_kse_snap_ring_suppress +_kse_trace_int_msg_clear +_ksfd_fob_pct +_ksfd_verify_write +_ksi_clientlocks_enabled +_ksi_trace +_ksi_trace_bucket +_ksi_trace_bucket_size +_ksipc_efchecks +_ksipc_libipc_path +_ksipc_mode +_ksipc_spare_param1 +_ksipc_spare_param2 +_ksipc_wait_flags +_ksm_post_sga_init_notif_delay_secs +_ksm_pre_sga_init_notif_delay_secs +_ksmb_debug +_ksmd_protect_mode +_ksmg_granule_locking_status +_ksmg_granule_size +_ksmg_lock_check_interval +_ksmg_lock_reacquire_count +_ksmlsaf +_kspol_tac_timeout +_ksr_unit_test_processes +_kss_callstack_type +_kss_quiet +_ksu_diag_kill_time +_ksuitm_addon_trccmd +_ksuitm_dont_kill_dumper +_ksv_dynamic_flags1 +_ksv_max_spawn_fail_limit +_ksv_pool_hang_kill_to +_ksv_pool_wait_timeout +_ksv_slave_exit_timeout +_ksv_spawn_control_all +_ksv_static_flags1 +_ksvppktmode +_ksxp_compat_flags +_ksxp_control_flags +_ksxp_diagmode +_ksxp_disable_clss +_ksxp_disable_dynamic_loading +_ksxp_disable_ipc_stats +_ksxp_disable_rolling_migration +_ksxp_dump_timeout +_ksxp_dynamic_skgxp_param +_ksxp_exa_ip_config +_ksxp_if_config +_ksxp_init_stats_bkts +_ksxp_ipclw_enabled +_ksxp_ksmsq_ip_config +_ksxp_max_stats_bkts +_ksxp_ping_enable +_ksxp_ping_polling_time +_ksxp_reaping +_ksxp_reporting_process +_ksxp_send_timeout +_ksxp_skgxp_ant_options +_ksxp_skgxp_compat_library_path +_ksxp_skgxp_ctx_flags1 +_ksxp_skgxp_ctx_flags1mask +_ksxp_skgxp_dynamic_protocol +_ksxp_skgxp_inets +_ksxp_skgxp_library_path +_ksxp_skgxp_rgn_ports +_ksxp_skgxp_spare_param1 +_ksxp_skgxp_spare_param2 +_ksxp_skgxp_spare_param3 +_ksxp_skgxp_spare_param4 +_ksxp_skgxpg_last_parameter +_ksxp_stats_mem_lmt +_ksxp_testing +_ksxp_unit_test_byte_transformation +_ksxp_wait_flags +_ktb_debug_flags +_ktc_debug +_ktc_latches +_ktilmsc_exp +_ktslj_segext_max_mb +_ktslj_segext_retry +_ktslj_segext_warning +_ktslj_segext_warning_mb +_ktspsrch_maxsc +_ktspsrch_maxskip +_ktspsrch_scchk +_ktspsrch_scexp +_ktst_rss_max +_ktst_rss_min +_ktst_rss_retry +_kttext_warning +_ktu_latches +_ku_trace +_kxdbio_ctx_init_count +_kxdbio_disable_offload_opcode +_kxdbio_enable_ds_opcode +_kxdbio_hca_loadavg_thresh +_kxdbio_ut_ctl +_kxscio_cap_stacks +_large_pool_min_alloc +_last_allocation_period +_latch_class_0 +_latch_class_1 +_latch_class_2 +_latch_class_3 +_latch_class_4 +_latch_class_5 +_latch_class_6 +_latch_class_7 +_latch_classes +_latch_miss_stat_sid +_latch_wait_list_pri_sleep_secs +_ldr_io_size +_ldr_io_size2 +_ldr_pga_lim +_ldr_tempseg_threshold +_left_nested_loops_random +_lgwr_delay_write +_lgwr_io_outlier +_lgwr_io_slaves +_lgwr_max_ns_wt +_lgwr_ns_nl_max +_lgwr_ns_nl_min +_lgwr_ns_sim_err +_lgwr_posts_for_pending_bcasts +_lgwr_ta_sim_err +_library_cache_advice +_lightweight_hdrs +_like_with_bind_as_equality +_limit_itls +_lm_activate_lms_threshold +_lm_adrm_interval +_lm_adrm_options +_lm_adrm_scan_timeout +_lm_adrm_time_out +_lm_asm_enq_hashing +_lm_batch_compression_threshold +_lm_better_ddvictim +_lm_big_cluster_optimizations +_lm_broadcast_res +_lm_cache_allocated_res_ratio +_lm_cache_enqueue +_lm_cache_lvl0_cleanup +_lm_cache_res_cleanup +_lm_cache_res_cleanup_tries +_lm_cache_res_options +_lm_cache_res_skip_cleanup +_lm_cache_res_type +_lm_checksum_batch_msg +_lm_comm_channel +_lm_comm_msgq_busywait +_lm_comm_reap_count +_lm_comm_tkts_adaptive +_lm_comm_tkts_calc_period_length +_lm_comm_tkts_max_add +_lm_comm_tkts_max_periods +_lm_comm_tkts_min_decrease_wait +_lm_comm_tkts_min_increase_wait +_lm_comm_tkts_mult_factor +_lm_comm_tkts_nullreq_threshold +_lm_comm_tkts_sub_factor +_lm_compression_scheme +_lm_contiguous_res_count +_lm_db_rank +_lm_db_ranks +_lm_dd_ignore_nodd +_lm_dd_interval +_lm_dd_max_search_time +_lm_dd_maxdump +_lm_dd_scan_interval +_lm_dd_search_cnt +_lm_deferred_msg_timeout +_lm_drm_banned_objs +_lm_drm_batch_time +_lm_drm_disable +_lm_drm_duration_limit +_lm_drm_duration_limit_type +_lm_drm_filter_history_window +_lm_drm_filter_history_window_type +_lm_drm_filters +_lm_drm_hiload_percentage +_lm_drm_lowload_percentage +_lm_drm_max_banned_objs +_lm_drm_max_requests +_lm_drm_min_interval +_lm_drm_object_scan +_lm_drm_we_interval +_lm_drm_we_size +_lm_drm_window +_lm_drm_xlatch +_lm_drmopt12 +_lm_dump_null_lock +_lm_dynamic_lms +_lm_dynamic_load +_lm_enable_aff_benefit_stats +_lm_enq_lock_freelist +_lm_enq_rcfg +_lm_enqueue_blocker_dump_timeout +_lm_enqueue_blocker_dump_timeout_cnt +_lm_enqueue_blocker_kill_timeout +_lm_enqueue_freelist +_lm_enqueue_timeout +_lm_exadata_fence_type +_lm_exchange_opt +_lm_fdrm_stats +_lm_file_affinity +_lm_file_read_mostly +_lm_free_queue_threshold +_lm_freeze_kill_time +_lm_gl_hash_scheme +_lm_global_posts +_lm_hash_control +_lm_hashtable_bkt_high +_lm_hashtable_bkt_low +_lm_hashtable_bkt_thr +_lm_hb_acceptable_hang_condition +_lm_hb_callstack_collect_time +_lm_hb_disable_check_list +_lm_hb_enable_acl_check +_lm_hb_exponential_hang_time_factor +_lm_hb_maximum_hang_report_count +_lm_high_load_sysload_percentage +_lm_high_load_threshold +_lm_idle_connection_check +_lm_idle_connection_check_interval +_lm_idle_connection_instance_check_callout +_lm_idle_connection_kill +_lm_idle_connection_kill_max_skips +_lm_idle_connection_max_ignore_kill_count +_lm_idle_connection_quorum_threshold +_lm_kill_fg_on_timeout +_lm_lhupd_interval +_lm_lmd_waittime +_lm_lmon_nowait_latch +_lm_lms +_lm_lms_opt_priority +_lm_lms_priority_check_frequency +_lm_lms_priority_dynamic +_lm_lms_rt_threshold +_lm_lms_spin +_lm_lms_waittime +_lm_local_hp_enq +_lm_locks +_lm_low_load_percentage +_lm_master_weight +_lm_max_lms +_lm_mp_avail_queue_threshold +_lm_mp_bulk_mbuf_free +_lm_msg_batch_size +_lm_msg_cleanup_interval +_lm_msg_pool_dump_threshold +_lm_msg_pool_user_callstack_dump +_lm_no_lh_check +_lm_no_sync +_lm_node_join_opt +_lm_non_fault_tolerant +_lm_num_bnft_stats_buckets +_lm_num_pt_buckets +_lm_num_pt_latches +_lm_postevent_buffer_size +_lm_preregister_css_restype +_lm_proc_freeze_timeout +_lm_process_batching +_lm_process_lock_q_scan_limit +_lm_procs +_lm_psrcfg +_lm_rac_spare_dp1 +_lm_rac_spare_dp10 +_lm_rac_spare_dp2 +_lm_rac_spare_dp3 +_lm_rac_spare_dp4 +_lm_rac_spare_dp5 +_lm_rac_spare_dp6 +_lm_rac_spare_dp7 +_lm_rac_spare_dp8 +_lm_rac_spare_dp9 +_lm_rac_spare_p1 +_lm_rac_spare_p10 +_lm_rac_spare_p2 +_lm_rac_spare_p3 +_lm_rac_spare_p4 +_lm_rac_spare_p5 +_lm_rac_spare_p6 +_lm_rac_spare_p7 +_lm_rac_spare_p8 +_lm_rac_spare_p9 +_lm_rcfg_kjcdump_time +_lm_rcfg_timeout +_lm_rcvinst +_lm_rcvr_hang_allow_time +_lm_rcvr_hang_cfio_kill +_lm_rcvr_hang_check_frequency +_lm_rcvr_hang_check_system_load +_lm_rcvr_hang_kill +_lm_rcvr_hang_systemstate_dump_level +_lm_reloc_use_mhint +_lm_res_hash_bucket +_lm_res_part +_lm_res_tm_hash_bucket +_lm_resend_open_convert_timeout +_lm_ress +_lm_rm_slaves +_lm_send_mode +_lm_send_queue_batching +_lm_send_queue_length +_lm_sendproxy_reserve +_lm_share_lock_opt +_lm_share_lock_restype +_lm_single_inst_affinity_lock +_lm_spare_threads +_lm_spare_undo +_lm_sq_batch_factor +_lm_sq_batch_type +_lm_sq_batch_waittick +_lm_sync_timeout +_lm_ticket_active_sendback +_lm_tickets +_lm_timed_statistics_level +_lm_tx_delta +_lm_use_gcr +_lm_use_new_defmsgtmo_action +_lm_use_tx_tsn +_lm_validate_pbatch +_lm_wait_pending_send_queue +_lm_watchpoint_maximum +_lm_watchpoint_timeout +_lm_xids +_lmn_compression +_load_without_compile +_local_arc_assert_on_wait +_local_communication_costing_enabled +_local_communication_ratio +_local_hang_analysis_interval_secs +_lock_next_constraint_count +_lock_ref_constraint_count +_log_archive_avoid_memcpy +_log_archive_buffers +_log_archive_network_redo_size +_log_archive_prot_auto_demote +_log_archive_strong_auth +_log_archive_trace_pids +_log_blocks_during_backup +_log_buffer_coalesce +_log_buffers_corrupt +_log_buffers_debug +_log_checkpoint_recovery_check +_log_committime_block_cleanout +_log_deletion_policy +_log_event_queues +_log_file_sync_timeout +_log_max_optimize_threads +_log_parallelism_dynamic +_log_parallelism_max +_log_private_mul +_log_private_parallelism_mul +_log_read_buffer_size +_log_read_buffers +_log_segment_dump_parameter +_log_segment_dump_patch +_log_simultaneous_copies +_log_space_errors +_log_switch_timeout +_log_undo_df_info +_log_write_info_size +_log_writer_worker_dlm_hearbeat_update_freq +_logout_storm_rate +_logout_storm_retrycnt +_logout_storm_timeout +_long_bcast_ack_warning_threshold +_long_log_write_warning_threshold +_longops_enabled +_low_server_threshold +_lowres_drift_allowed_sec +_ltc_trace +_lthread_cleanup_intv_secs +_lthread_clnup_hk_wait_secs +_lthread_clnup_pmon_softkill_wait_secs +_lthread_clnup_spawner_sk_wait_secs +_lthread_debug +_lthread_enabled +_lthread_max_spawn_time_csecs +_lthread_spawn_check_intv_ms +_lthread_step_debugging +_main_dead_process_scan_interval +_master_direct_sends +_mav_refresh_consistent_read +_mav_refresh_double_count_prevented +_mav_refresh_opt +_mav_refresh_unionall_tables +_max_aq_persistent_queue_memory +_max_async_wait_for_catch_up +_max_clients_per_emon +_max_cr_rollbacks +_max_data_transfer_cache_size +_max_defer_gran_xfer_atonce +_max_exponential_sleep +_max_filestat_tries +_max_fsu_segments +_max_fsu_stale_time +_max_incident_file_size +_max_io_size +_max_kcnibr_ranges +_max_large_io +_max_largepage_alloc_time_secs +_max_lns_shutdown_archival_time +_max_log_write_io_parallelism +_max_log_write_parallelism +_max_outstanding_log_writes +_max_pdbs +_max_pending_scn_bcasts +_max_protocol_support +_max_queued_report_requests +_max_reasonable_scn_rate +_max_report_flushes_percycle +_max_rwgs_groupings +_max_services +_max_shrink_obj_stats +_max_sleep_holding_latch +_max_small_io +_max_spacebg_msgs_percentage +_max_spacebg_slaves +_max_spacebg_tasks +_max_sql_stmt_length +_max_string_size_bypass +_max_sys_next_extent +_maxrpop_files_inst +_maxrpop_instances +_media_recovery_read_batch +_mem_annotation_pr_lev +_mem_annotation_scale +_mem_annotation_sh_lev +_mem_annotation_store +_mem_std_extent_size +_memory_broker_log_stat_entries +_memory_broker_marginal_utility_bc +_memory_broker_marginal_utility_sp +_memory_broker_shrink_heaps +_memory_broker_shrink_java_heaps +_memory_broker_shrink_streams_pool +_memory_broker_shrink_timeout +_memory_broker_stat_interval +_memory_checkinuse_timeintv +_memory_imm_mode_without_autosga +_memory_initial_sga_split_perc +_memory_management_tracing +_memory_max_tgt_inc_cnt +_memory_mgmt_fail_immreq +_memory_mgmt_immreq_timeout +_memory_nocancel_defsgareq +_memory_sanity_check +_merge_monitor_threshold +_messages +_mgd_rcv_handle_orphan_datafiles +_midtier_affinity_cluswait_prc_threshold +_midtier_affinity_goodness_threshold +_min_spacebg_slaves +_min_time_between_psp0_diag_secs +_minfree_plus +_minimal_stats_aggregation +_minimum_blocks_to_shrink +_minimum_db_flashback_retention +_minimum_extents_to_shrink +_minmax_spacebg_slaves +_mirror_redo_buffers +_mmv_query_rewrite_enabled +_modify_column_index_unusable +_module_action_old_length +_monitor_sql_stmt_length +_mpmt_enabled +_mpmt_enabled_backgrounds +_mpmt_fg_enabled +_mpmt_procs_per_osp +_mpmt_single_process_instance +_multi_instance_pmr +_multi_join_key_table_lookup +_multi_transaction_optimization_enabled +_multiple_char_set_cdb +_multiple_instance_recovery +_mutex_spin_count +_mutex_wait_scheme +_mutex_wait_time +_mv_add_log_placeholder +_mv_cleanup_orphaned_metadata +_mv_complete_refresh_conventional +_mv_deferred_no_log_age_val +_mv_expression_extend_size +_mv_generalized_oj_refresh_opt +_mv_refresh_ana +_mv_refresh_costing +_mv_refresh_delta_fraction +_mv_refresh_enhanced_dml_detection +_mv_refresh_eut +_mv_refresh_force_parallel_query +_mv_refresh_insert_no_append +_mv_refresh_new_setup_disabled +_mv_refresh_no_idx_rebuild +_mv_refresh_pkfk_data_units_opt +_mv_refresh_pkfk_relationship_opt +_mv_refresh_rebuild_percentage +_mv_refresh_selections +_mv_refresh_truncate_log +_mv_refresh_update_analysis +_mv_refresh_use_hash_sj +_mv_refresh_use_no_merge +_mv_refresh_use_stats +_mv_refsched_timeincr +_mv_rolling_inv +_mwin_schedule +_nameservice_consistency_check +_nameservice_request_batching +_nchar_imp_cnv +_nchar_imp_conv +_ncmb_readahead_enabled +_ncmb_readahead_tracing +_ncomp_shared_objects_dir +_nested_loop_fudge +_nested_mv_fast_oncommit_enabled +_net_timeout_latency +_new_initial_join_orders +_new_sort_cost_estimate +_newsort_enabled +_newsort_ordered_pct +_newsort_type +_nineteenth_spare_parameter +_ninetieth_spare_parameter +_ninety-eighth_spare_parameter +_ninety-fifth_spare_parameter +_ninety-first_spare_parameter +_ninety-fourth_spare_parameter +_ninety-ninth_spare_parameter +_ninety-second_spare_parameter +_ninety-seventh_spare_parameter +_ninety-sixth_spare_parameter +_ninety-third_spare_parameter +_ninth_spare_parameter +_nlj_batching_ae_flag +_nlj_batching_enabled +_nlj_batching_misses_enabled +_nls_parameter_sync_enabled +_no_objects +_no_or_expansion +_no_recovery_through_resetlogs +_no_small_file +_no_stale_joinback_rewrite +_nologging_kcnbuf_hash_buckets +_nologging_kcnbuf_hash_latches +_nologging_load_slotsz +_nologging_sdcl_append_wait +_nologging_sendbuf_ratio +_nologging_txn_cmt_wait +_noseg_for_unusable_index_enabled +_notify_crs +_ns_max_flush_wt +_ns_max_send_delay +_num_longop_child_latches +_numa_buffer_cache_stats +_numa_shift_enabled +_numa_shift_value +_numa_trace_level +_number_cached_attributes +_number_cached_group_memberships +_number_group_memberships_per_cache_line +_obj_ckpt_tracing +_object_link_fixed_enabled +_object_number_cache_size +_object_reuse_bast +_object_statistics +_object_stats_max_entries +_odci_aggregate_save_space +_offline_rollback_segments +_ogms_home +_olap_adv_comp_stats_cc_precomp +_olap_adv_comp_stats_max_rows +_olap_aggregate_buffer_size +_olap_aggregate_flags +_olap_aggregate_function_cache_enabled +_olap_aggregate_max_thread_tuples +_olap_aggregate_min_buffer_size +_olap_aggregate_min_thread_status +_olap_aggregate_multipath_hier +_olap_aggregate_statlen_thresh +_olap_aggregate_work_per_thread +_olap_aggregate_worklist_max +_olap_allocate_errorlog_format +_olap_allocate_errorlog_header +_olap_analyze_max +_olap_continuous_trace_file +_olap_dbgoutfile_echo_to_eventlog +_olap_dimension_corehash_force +_olap_dimension_corehash_large +_olap_dimension_corehash_pressure +_olap_dimension_corehash_size +_olap_disable_loop_optimized +_olap_eif_export_lob_size +_olap_lmgen_dim_size +_olap_lmgen_meas_size +_olap_object_hash_class +_olap_page_pool_expand_rate +_olap_page_pool_hi +_olap_page_pool_hit_target +_olap_page_pool_low +_olap_page_pool_pressure +_olap_page_pool_shrink_rate +_olap_parallel_update_server_num +_olap_parallel_update_small_threshold +_olap_parallel_update_threshold +_olap_row_load_time_precision +_olap_sesscache_enabled +_olap_sort_buffer_pct +_olap_sort_buffer_size +_olap_statbool_corebits +_olap_statbool_threshold +_olap_table_function_statistics +_olap_wrap_errors +_olapi_history_retention +_olapi_iface_object_history +_olapi_iface_object_history_retention +_olapi_iface_operation_history_retention +_olapi_interface_operation_history +_olapi_memory_operation_history +_olapi_memory_operation_history_pause_at_seqno +_olapi_memory_operation_history_retention +_olapi_session_history +_olapi_session_history_retention +_old_connect_by_enabled +_old_extent_scheme +_ols_cleanup_task +_oltp_comp_dbg_scan +_oltp_compression +_oltp_compression_gain +_oltp_spill +_omf +_omni_enqueue_enable +_one-hundred-and-eighteenth_spare_parameter +_one-hundred-and-eighth_spare_parameter +_one-hundred-and-eightieth_spare_parameter +_one-hundred-and-eighty-eighth_spare_parameter +_one-hundred-and-eighty-fifth_spare_parameter +_one-hundred-and-eighty-first_spare_parameter +_one-hundred-and-eighty-fourth_spare_parameter +_one-hundred-and-eighty-ninth_spare_parameter +_one-hundred-and-eighty-second_spare_parameter +_one-hundred-and-eighty-seventh_spare_parameter +_one-hundred-and-eighty-sixth_spare_parameter +_one-hundred-and-eighty-third_spare_parameter +_one-hundred-and-eleventh_spare_parameter +_one-hundred-and-fifteenth_spare_parameter +_one-hundred-and-fifth_spare_parameter +_one-hundred-and-fiftieth_spare_parameter +_one-hundred-and-fifty-eighth_spare_parameter +_one-hundred-and-fifty-fifth_spare_parameter +_one-hundred-and-fifty-first_spare_parameter +_one-hundred-and-fifty-fourth_spare_parameter +_one-hundred-and-fifty-ninth_spare_parameter +_one-hundred-and-fifty-second_spare_parameter +_one-hundred-and-fifty-seventh_spare_parameter +_one-hundred-and-fifty-sixth_spare_parameter +_one-hundred-and-fifty-third_spare_parameter +_one-hundred-and-first_spare_parameter +_one-hundred-and-fortieth_spare_parameter +_one-hundred-and-forty-eighth_spare_parameter +_one-hundred-and-forty-fifth_spare_parameter +_one-hundred-and-forty-fourth_spare_parameter +_one-hundred-and-forty-ninth_spare_parameter +_one-hundred-and-forty-seventh_spare_parameter +_one-hundred-and-forty-sixth_spare_parameter +_one-hundred-and-forty-third_spare_parameter +_one-hundred-and-fourteenth_spare_parameter +_one-hundred-and-fourth_spare_parameter +_one-hundred-and-nineteenth_spare_parameter +_one-hundred-and-ninetieth_spare_parameter +_one-hundred-and-ninety-eighth_spare_parameter +_one-hundred-and-ninety-fifth_spare_parameter +_one-hundred-and-ninety-first_spare_parameter +_one-hundred-and-ninety-fourth_spare_parameter +_one-hundred-and-ninety-ninth_spare_parameter +_one-hundred-and-ninety-second_spare_parameter +_one-hundred-and-ninety-seventh_spare_parameter +_one-hundred-and-ninety-sixth_spare_parameter +_one-hundred-and-ninety-third_spare_parameter +_one-hundred-and-ninth_spare_parameter +_one-hundred-and-second_spare_parameter +_one-hundred-and-seventeenth_spare_parameter +_one-hundred-and-seventh_spare_parameter +_one-hundred-and-seventieth_spare_parameter +_one-hundred-and-seventy-eighth_spare_parameter +_one-hundred-and-seventy-fifth_spare_parameter +_one-hundred-and-seventy-first_spare_parameter +_one-hundred-and-seventy-fourth_spare_parameter +_one-hundred-and-seventy-ninth_spare_parameter +_one-hundred-and-seventy-second_spare_parameter +_one-hundred-and-seventy-seventh_spare_parameter +_one-hundred-and-seventy-sixth_spare_parameter +_one-hundred-and-seventy-third_spare_parameter +_one-hundred-and-sixteenth_spare_parameter +_one-hundred-and-sixth_spare_parameter +_one-hundred-and-sixtieth_spare_parameter +_one-hundred-and-sixty-eighth_spare_parameter +_one-hundred-and-sixty-fifth_spare_parameter +_one-hundred-and-sixty-first_spare_parameter +_one-hundred-and-sixty-fourth_spare_parameter +_one-hundred-and-sixty-ninth_spare_parameter +_one-hundred-and-sixty-second_spare_parameter +_one-hundred-and-sixty-seventh_spare_parameter +_one-hundred-and-sixty-sixth_spare_parameter +_one-hundred-and-sixty-third_spare_parameter +_one-hundred-and-tenth_spare_parameter +_one-hundred-and-third_spare_parameter +_one-hundred-and-thirteenth_spare_parameter +_one-hundred-and-thirtieth_spare_parameter +_one-hundred-and-thirty-eighth_spare_parameter +_one-hundred-and-thirty-fifth_spare_parameter +_one-hundred-and-thirty-first_spare_parameter +_one-hundred-and-thirty-fourth_spare_parameter +_one-hundred-and-thirty-ninth_spare_parameter +_one-hundred-and-thirty-second_spare_parameter +_one-hundred-and-thirty-seventh_spare_parameter +_one-hundred-and-thirty-sixth_spare_parameter +_one-hundred-and-thirty-third_spare_parameter +_one-hundred-and-twelfth_spare_parameter +_one-hundred-and-twentieth_spare_parameter +_one-hundred-and-twenty-eighth_spare_parameter +_one-hundred-and-twenty-fifth_spare_parameter +_one-hundred-and-twenty-first_spare_parameter +_one-hundred-and-twenty-fourth_spare_parameter +_one-hundred-and-twenty-ninth_spare_parameter +_one-hundred-and-twenty-second_spare_parameter +_one-hundred-and-twenty-seventh_spare_parameter +_one-hundred-and-twenty-sixth_spare_parameter +_one-hundred-and-twenty-third_spare_parameter +_one-hundredth_spare_parameter +_oneside_colstat_for_equijoins +_online_ctas_diag +_online_patch_disable_stack_check +_ops_per_semop +_optim_adjust_for_part_skews +_optim_dict_stats_at_db_cr_upg +_optim_enhance_nnull_detection +_optim_new_default_join_sel +_optim_peek_user_binds +_optimizer_adaptive_cursor_sharing +_optimizer_adaptive_plan_control +_optimizer_adaptive_plans +_optimizer_adaptive_random_seed +_optimizer_adjust_for_nulls +_optimizer_ads_max_table_count +_optimizer_ads_result_cache_life +_optimizer_ads_time_limit +_optimizer_ads_use_partial_results +_optimizer_ads_use_result_cache +_optimizer_aggr_groupby_elim +_optimizer_ansi_join_lateral_enhance +_optimizer_ansi_rearchitecture +_optimizer_autostats_job +_optimizer_aw_join_push_enabled +_optimizer_aw_stats_enabled +_optimizer_batch_table_access_by_rowid +_optimizer_better_inlist_costing +_optimizer_block_size +_optimizer_cache_stats +_optimizer_cartesian_enabled +_optimizer_cbqt_factor +_optimizer_cbqt_no_size_restriction +_optimizer_ceil_cost +_optimizer_cluster_by_rowid +_optimizer_cluster_by_rowid_batch_size +_optimizer_cluster_by_rowid_batched +_optimizer_cluster_by_rowid_control +_optimizer_coalesce_subqueries +_optimizer_complex_pred_selectivity +_optimizer_compute_index_stats +_optimizer_connect_by_cb_whr_only +_optimizer_connect_by_combine_sw +_optimizer_connect_by_cost_based +_optimizer_connect_by_elim_dups +_optimizer_correct_sq_selectivity +_optimizer_cost_based_transformation +_optimizer_cost_filter_pred +_optimizer_cost_hjsmj_multimatch +_optimizer_cost_model +_optimizer_cube_join_enabled +_optimizer_degree +_optimizer_dim_subq_join_sel +_optimizer_disable_strans_sanity_checks +_optimizer_distinct_agg_transform +_optimizer_distinct_elimination +_optimizer_distinct_placement +_optimizer_dsdir_usage_control +_optimizer_dyn_smp_blks +_optimizer_eliminate_filtering_join +_optimizer_enable_density_improvements +_optimizer_enable_extended_stats +_optimizer_enable_table_lookup_by_nl +_optimizer_enhanced_filter_push +_optimizer_extend_jppd_view_types +_optimizer_extended_cursor_sharing +_optimizer_extended_cursor_sharing_rel +_optimizer_extended_stats_usage_control +_optimizer_false_filter_pred_pullup +_optimizer_fast_access_pred_analysis +_optimizer_fast_pred_transitivity +_optimizer_feedback_control +_optimizer_filter_pred_pullup +_optimizer_filter_pushdown +_optimizer_fkr_index_cost_bias +_optimizer_force_CBQT +_optimizer_free_transformation_heap +_optimizer_full_outer_join_to_outer +_optimizer_gather_feedback +_optimizer_gather_stats_on_load +_optimizer_generate_transitive_pred +_optimizer_group_by_placement +_optimizer_hll_entry +_optimizer_hybrid_fpwj_enabled +_optimizer_ignore_hints +_optimizer_improve_selectivity +_optimizer_inmemory_access_path +_optimizer_inmemory_autodop +_optimizer_inmemory_bloom_filter +_optimizer_inmemory_cluster_aware_dop +_optimizer_inmemory_gen_pushable_preds +_optimizer_inmemory_minmax_pruning +_optimizer_inmemory_pruning_ratio_rows +_optimizer_inmemory_quotient +_optimizer_inmemory_table_expansion +_optimizer_instance_count +_optimizer_interleave_jppd +_optimizer_invalidation_period +_optimizer_join_elimination_enabled +_optimizer_join_factorization +_optimizer_join_order_control +_optimizer_join_sel_sanity_check +_optimizer_key_vector_aggr_factor +_optimizer_max_permutations +_optimizer_min_cache_blocks +_optimizer_mjc_enabled +_optimizer_mode_force +_optimizer_multi_level_push_pred +_optimizer_multi_table_outerjoin +_optimizer_multiple_cenv +_optimizer_multiple_cenv_report +_optimizer_multiple_cenv_stmt +_optimizer_native_full_outer_join +_optimizer_nested_rollup_for_gset +_optimizer_new_join_card_computation +_optimizer_nlj_hj_adaptive_join +_optimizer_null_accepting_semijoin +_optimizer_null_aware_antijoin +_optimizer_or_expansion +_optimizer_or_expansion_subheap +_optimizer_order_by_elimination_enabled +_optimizer_outer_join_to_inner +_optimizer_outer_to_anti_enabled +_optimizer_partial_join_eval +_optimizer_percent_parallel +_optimizer_performance_feedback +_optimizer_proc_rate_level +_optimizer_proc_rate_source +_optimizer_purge_stats_iteration_row_count +_optimizer_push_down_distinct +_optimizer_push_pred_cost_based +_optimizer_random_plan +_optimizer_reduce_groupby_key +_optimizer_reuse_cost_annotations +_optimizer_rownum_bind_default +_optimizer_rownum_pred_based_fkr +_optimizer_save_stats +_optimizer_search_limit +_optimizer_self_induced_cache_cost +_optimizer_skip_scan_enabled +_optimizer_skip_scan_guess +_optimizer_sortmerge_join_enabled +_optimizer_sortmerge_join_inequality +_optimizer_squ_bottomup +_optimizer_star_tran_in_with_clause +_optimizer_star_trans_min_cost +_optimizer_star_trans_min_ratio +_optimizer_starplan_enabled +_optimizer_strans_adaptive_pruning +_optimizer_synopsis_min_size +_optimizer_system_stats_usage +_optimizer_table_expansion +_optimizer_trace +_optimizer_transitivity_retain +_optimizer_try_st_before_jppd +_optimizer_undo_changes +_optimizer_undo_cost_change +_optimizer_unnest_all_subqueries +_optimizer_unnest_corr_set_subq +_optimizer_unnest_disjunctive_subq +_optimizer_unnest_scalar_sq +_optimizer_use_cbqt_star_transformation +_optimizer_use_feedback +_optimizer_use_gtt_session_stats +_optimizer_use_histograms +_optimizer_use_subheap +_optimizer_vector_cost_adj +_optimizer_vector_fact_dim_ratio +_optimizer_vector_min_fact_rows +_optimizer_vector_transformation +_or_expand_nvl_predicate +_oracle_script +_oradbg_pathname +_oradebug_cmds_at_startup +_oradebug_force +_ordered_nested_loop +_ordered_semijoin +_orph_cln_interval +_os_sched_high_priority +_os_sched_highest_priority +_oss_skgxp_udp_dynamic_credit_mgmt +_other_wait_event_exclusion +_other_wait_threshold +_outline_bitmap_tree +_parallel_adaptive_max_users +_parallel_blackbox_enabled +_parallel_blackbox_sga +_parallel_blackbox_size +_parallel_broadcast_enabled +_parallel_cluster_cache_pct +_parallel_cluster_cache_policy +_parallel_conservative_queuing +_parallel_ctas_enabled +_parallel_default_max_instances +_parallel_execution_message_align +_parallel_fake_class_pct +_parallel_fault_tolerance_enabled +_parallel_fault_tolerance_threshold +_parallel_fixwrite_bucket +_parallel_heartbeat_snapshot_interval +_parallel_heartbeat_snapshot_max +_parallel_inmemory_min_time_threshold +_parallel_inmemory_time_unit +_parallel_load_bal_unit +_parallel_load_balancing +_parallel_load_publish_threshold +_parallel_min_message_pool +_parallel_optimization_phase_for_local +_parallel_queuing_max_waitingtime +_parallel_recovery_stopat +_parallel_replay_msg_limit +_parallel_scalability +_parallel_server_idle_time +_parallel_server_sleep_time +_parallel_slave_acquisition_wait +_parallel_statement_queuing +_parallel_syspls_obey_force +_parallel_time_unit +_parallel_txn_global +_parallelism_cost_fudge_factor +_parameter_table_block_size +_part_access_version_by_number +_part_redef_global_index_update +_partial_pwise_join_enabled +_partition_advisor_srs_active +_partition_cdb_view_enabled +_partition_large_extents +_partition_view_enabled +_passwordfile_enqueue_timeout +_pbkdf2_sder_count +_pct_refresh_double_count_prevented +_pdb_cluster_database +_pdb_mask_cdb_info +_pdb_use_sequence_cache +_pdml_gim_sampling +_pdml_gim_staggered +_pdml_slaves_diff_part +_percent_flashback_buf_partial_full +_pga_auto_snapshot_percentage +_pga_auto_snapshot_threshold +_pga_detail_combine_auto +_pga_large_extent_size +_pga_limit_check_wait_time +_pga_limit_dump_summary +_pga_limit_interrupt_smaller +_pga_limit_min_req_size +_pga_limit_physmem_perc +_pga_limit_simulated_physmem_size +_pga_limit_target_perc +_pga_limit_time_to_interrupt +_pga_limit_time_until_idle +_pga_limit_time_until_killed +_pga_limit_tracing +_pga_limit_use_immediate_kill +_pga_limit_watch_perc +_pga_limit_watch_size +_pga_max_size +_pgactx_cap_stacks +_pin_time_statistics +_ping_wait_for_log_force +_pivot_implementation_method +_pkt_enable +_pkt_pmon_interval +_pkt_start +_plan_outline_data +_plan_verify_improvement_margin +_plan_verify_local_time_limit +_plsql_anon_block_code_type +_plsql_cache_enable +_plsql_dump_buffer_events +_plsql_icd_arg_dump +_plsql_max_stack_size +_plsql_minimum_cache_hit_percent +_plsql_native_frame_threshold +_plsql_nvl_optimize +_pluggable_database_debug +_pmon_dead_blkrs_alive_chk_rate_secs +_pmon_dead_blkrs_max_blkrs +_pmon_dead_blkrs_max_cleanup_attempts +_pmon_dead_blkrs_scan_rate_secs +_pmon_enable_dead_blkrs +_pmon_load_constants +_pmon_max_consec_posts +_posix_spawn_enabled +_post_wait_queues_dynamic_queues +_post_wait_queues_num_per_class +_pq_numa_working_set_affinity +_pqq_debug_txn_act +_pqq_enabled +_pre_rewrite_push_pred +_precompute_gid_values +_pred_move_around +_pred_push_cdb_view_enabled +_predicate_elimination_enabled +_prefered_standby +_prescomm +_prespawn_batch_count +_print_inmem_heatmap +_print_inmem_srmap +_print_refresh_schedule +_print_stat_segment +_private_memory_address +_proc_grp_enabled +_process_heartbeat_range +_project_view_columns +_projection_pushdown +_projection_pushdown_debug +_prop_old_enabled +_protect_frame_heaps +_ptn_cache_threshold +_push_join_predicate +_push_join_union_view +_push_join_union_view2 +_px_adaptive_dist_method +_px_adaptive_dist_method_threshold +_px_adaptive_offload_percentage +_px_adaptive_offload_threshold +_px_async_getgranule +_px_autodop_pq_overhead +_px_back_to_parallel +_px_bind_peek_sharing +_px_broadcast_fudge_factor +_px_buffer_ttl +_px_cdb_view_enabled +_px_cdb_view_join_enabled +_px_chunklist_count_ratio +_px_compilation_debug +_px_compilation_trace +_px_concurrent +_px_cpu_autodop_enabled +_px_cpu_operator_bandwidth +_px_cpu_process_bandwidth +_px_dp_array_size +_px_dump_12805_source +_px_dynamic_opt +_px_dynamic_sample_size +_px_execution_services_enabled +_px_external_table_default_stats +_px_filter_parallelized +_px_filter_skew_handling +_px_freelist_latch_divisor +_px_gim_factor +_px_granule_batch_size +_px_granule_randomize +_px_granule_size +_px_groupby_pushdown +_px_hold_time +_px_hybrid_TSM_HWMB_load +_px_index_sampling_objsize +_px_io_process_bandwidth +_px_io_system_bandwidth +_px_join_skew_handling +_px_join_skew_minfreq +_px_join_skew_ratio +_px_kxib_tracing +_px_load_balancing_policy +_px_load_factor +_px_load_monitor_threshold +_px_load_publish_interval +_px_loc_msg_cost +_px_max_granules_per_slave +_px_max_map_val +_px_max_message_pool_pct +_px_message_compression +_px_min_granules_per_slave +_px_minus_intersect +_px_monitor_load +_px_net_msg_cost +_px_no_granule_sort +_px_no_stealing +_px_nss_planb +_px_numa_stealing_enabled +_px_numa_support_enabled +_px_object_sampling +_px_object_sampling_enabled +_px_onepass_slave_acquisition +_px_overhead_exec_ctrlmesg +_px_overhead_init_endpoints +_px_overhead_init_slavealloc +_px_overhead_teardown +_px_parallelize_expression +_px_partial_rollup_pushdown +_px_partition_scan_enabled +_px_partition_scan_threshold +_px_proactive_slave_alloc_threshold +_px_proc_constrain +_px_pwg_enabled +_px_pwmr_enabled +_px_replication_enabled +_px_round_robin_rowcnt +_px_rownum_pd +_px_scalable_invdist +_px_send_timeout +_px_single_server_enabled +_px_slaves_share_cursors +_px_tq_rowhvs +_px_trace +_px_ual_serial_input +_px_wif_dfo_declumping +_px_wif_extend_distribution_keys +_px_wif_min_ndv_per_slave +_px_xtgranule_size +_qa_control +_qa_lrg_type +_query_cost_rewrite +_query_execution_cache_max_size +_query_execution_time_limit +_query_mmvrewrite_maxcmaps +_query_mmvrewrite_maxdmaps +_query_mmvrewrite_maxinlists +_query_mmvrewrite_maxintervals +_query_mmvrewrite_maxpreds +_query_mmvrewrite_maxqryinlistvals +_query_mmvrewrite_maxregperm +_query_on_physical +_query_rewrite_1 +_query_rewrite_2 +_query_rewrite_drj +_query_rewrite_expression +_query_rewrite_fpc +_query_rewrite_fudge +_query_rewrite_jgmigrate +_query_rewrite_maxdisjunct +_query_rewrite_or_error +_query_rewrite_setopgrw_enable +_query_rewrite_vop_cleanup +_queue_buffer_max_dump_len +_radm_enabled +_rbr_ckpt_tracing +_rc_sys_obj_enabled +_rcfg_disable_verify +_rcfg_parallel_fixwrite +_rcfg_parallel_replay +_rcfg_parallel_verify +_rdbms_compatibility +_rdbms_internal_fplib_enabled +_rdbms_internal_fplib_raise_errors +_re_fast_sql_operator +_re_independent_expression_cache_size +_re_num_complex_operator +_re_num_rowcache_load +_re_result_cache_keysiz +_re_result_cache_size +_read_mostly_enable_logon +_read_mostly_instance +_read_mostly_instance_qa_control +_read_mostly_slave_timeout +_read_only_violation_dump_to_trace +_read_only_violation_max_count +_read_only_violation_max_count_per_module +_readable_standby_sync_timeout +_real_time_apply_sim +_realfree_heap_max_size +_realfree_heap_mode +_realfree_heap_pagesize +_realfree_pq_heap_pagesize +_reco_sessions_max_percentage +_recoverable_recovery_batch_percent +_recovery_asserts +_recovery_percentage +_recovery_read_limit +_recovery_skip_cfseq_check +_recovery_verify_writes +_recursive_imu_transactions +_recursive_with_max_recursion_level +_redef_on_statement +_redo_compatibility_check +_redo_log_check_backup +_redo_log_debug_config +_redo_log_record_life +_redo_read_from_memory +_redo_transport_compress_all +_redo_transport_sanity_check +_redo_transport_stall_time +_redo_transport_stall_time_long +_redo_transport_stream_test +_redo_transport_stream_writes +_redo_transport_vio_size_req +_reduce_sby_log_scan +_region_name +_release_insert_threshold +_reliable_block_sends +_relocate_pdb +_relocation_commit_batch_size +_remote_asm +_remote_awr_enabled +_remove_aggr_subquery +_remove_exf_component +_rep_base_path +_replace_virtual_columns +_report_capture_cycle_time +_report_capture_dbtime_percent_cutoff +_report_capture_recharge_window +_report_capture_timeband_length +_report_request_ageout_minutes +_reset_maxcap_history +_resource_includes_unlimited_tablespace +_resource_manager_always_off +_resource_manager_plan +_restore_maxopenfiles +_restore_spfile +_result_cache_auto_dml_monitoring_duration +_result_cache_auto_dml_monitoring_slots +_result_cache_auto_dml_threshold +_result_cache_auto_dml_trend_threshold +_result_cache_auto_execution_threshold +_result_cache_auto_size_threshold +_result_cache_auto_time_distance +_result_cache_auto_time_threshold +_result_cache_block_size +_result_cache_copy_block_count +_result_cache_deterministic_plsql +_result_cache_global +_result_cache_timeout +_resumable_critical_alert +_reuse_index_loop +_revoke_new_semantics +_right_outer_hash_enable +_rm_cluster_interconnects +_rm_force_caging +_rm_numa_sched_enable +_rm_numa_simulation_cpus +_rm_numa_simulation_pgs +_rman_io_priority +_rman_roundrobin_placement +_rollback_segment_count +_rollback_segment_initial +_rollback_stopat +_rond_test_mode +_row_cache_cursors +_row_cr +_row_locking +_row_shipping_explain +_row_shipping_threshold +_rowlen_for_chaining_threshold +_rowsets_cdb_view_enabled +_rowsets_enabled +_rowsets_max_rows +_rowsets_target_maxsize +_rowsource_execution_statistics +_rowsource_profiling_statistics +_rowsource_statistics_sampfreq +_rowsrc_trace_level +_rq_shm_max_size +_rta_sync_wait_timeout +_rtaddm_trigger_args +_rtaddm_trigger_enabled +_rtc_infeasible_threshold +_sage_block_checking +_sample_rows_per_block +_scalar_type_lob_storage_threshold +_scatter_gcs_resources +_scatter_gcs_shadows +_sched_delay_max_samples +_sched_delay_measurement_sleep_us +_sched_delay_os_tick_granularity_us +_sched_delay_sample_collection_thresh_ms +_sched_delay_sample_interval_ms +_scn_wait_interface_max_backoff_time_secs +_scn_wait_interface_max_timeout_secs +_sdiag_crash +_sec_enable_test_rpcs +_second_spare_parameter +_securefile_log_num_latches +_securefile_log_shared_pool_size +_securefile_timers +_securefiles_breakreten_retry +_securefiles_bulkinsert +_securefiles_concurrency_estimate +_securefiles_fg_retry +_securefiles_forceflush +_securefiles_memory_percentofSGA +_securefiles_spcutl +_select_any_dictionary_security_enabled +_selectivity_for_srf_enabled +_selfjoin_mv_duplicates +_selftune_checkpoint_write_pct +_selftune_checkpointing_lag +_sem_per_semid +_send_ast_to_foreground +_send_close_with_block +_send_requests_to_pi +_serial_direct_read +_serial_log_write_worker_io +_serial_recovery +_serializable +_serialize_lgwr_sync_io +_service_cleanup_timeout +_session_allocation_latches +_session_cached_instantiations +_session_context_size +_session_idle_bit_latches +_session_page_extent +_session_wait_history +_set_container_service +_set_mgd_recovery_state +_seventeenth_spare_parameter +_seventh_spare_parameter +_seventieth_spare_parameter +_seventy-eighth_spare_parameter +_seventy-fifth_spare_parameter +_seventy-first_spare_parameter +_seventy-fourth_spare_parameter +_seventy-ninth_spare_parameter +_seventy-second_spare_parameter +_seventy-seventh_spare_parameter +_seventy-sixth_spare_parameter +_seventy-third_spare_parameter +_sf_default_enabled +_sga_alloc_slaves_term_timeout_secs +_sga_clear_dump +_sga_data_protection_disabled +_sga_dp_bytes_per_alloc +_sga_dp_precise_errors +_sga_early_trace +_sga_heap_chunk_alignment +_sga_heap_chunk_alignment_disabled +_shared_io_pool_buf_size +_shared_io_pool_debug_trc +_shared_io_pool_size +_shared_io_set_value +_shared_iop_max_size +_shared_pool_max_size +_shared_pool_minsize_on +_shared_pool_reserved_min_alloc +_shared_pool_reserved_pct +_shared_server_load_balance +_shared_server_num_queues +_shmprotect +_short_stack_timeout_ms +_show_mgd_recovery_state +_shrd_que_tm_processes +_shrd_que_tm_statistics_duration +_shrunk_aggs_disable_threshold +_shrunk_aggs_enabled +_shutdown_completion_timeout_mins +_shutdown_sync_enable +_side_channel_batch_size +_side_channel_batch_timeout +_side_channel_batch_timeout_ms +_simple_view_merging +_simulate_disk_sectorsize +_simulate_io_wait +_simulate_logical_sectorsize +_simulate_mem_transfer +_simulated_log_write_usecs +_simulator_bucket_mindelta +_simulator_internal_bound +_simulator_lru_rebalance_sizthr +_simulator_lru_rebalance_thresh +_simulator_lru_scan_count +_simulator_pin_inval_maxcnt +_simulator_reserved_heap_count +_simulator_reserved_obj_count +_simulator_sampling_factor +_simulator_upper_bound_multiple +_single_process +_siop_flashback_scandepth +_siop_perc_of_bc_x100 +_sixteenth_spare_parameter +_sixth_spare_parameter +_sixtieth_spare_parameter +_sixty-eighth_spare_parameter +_sixty-fifth_spare_parameter +_sixty-first_spare_parameter +_sixty-fourth_spare_parameter +_sixty-ninth_spare_parameter +_sixty-second_spare_parameter +_sixty-seventh_spare_parameter +_sixty-sixth_spare_parameter +_sixty-third_spare_parameter +_skgxp_ant_options +_skgxp_ctx_flags1 +_skgxp_ctx_flags1mask +_skgxp_dynamic_protocol +_skgxp_gen_ant_off_rpc_timeout_in_sec +_skgxp_gen_ant_ping_misscount +_skgxp_gen_rpc_no_path_check_in_sec +_skgxp_gen_rpc_timeout_in_sec +_skgxp_inets +_skgxp_min_rpc_rcv_zcpy_len +_skgxp_min_zcpy_len +_skgxp_reaping +_skgxp_rgn_ports +_skgxp_spare_param1 +_skgxp_spare_param2 +_skgxp_spare_param3 +_skgxp_spare_param4 +_skgxp_spare_param5 +_skgxp_udp_ach_reaping_time +_skgxp_udp_ack_delay +_skgxp_udp_enable_dynamic_credit_mgmt +_skgxp_udp_hiwat_warn +_skgxp_udp_interface_detection_time_secs +_skgxp_udp_keep_alive_ping_timer_secs +_skgxp_udp_lmp_mtusize +_skgxp_udp_lmp_on +_skgxp_udp_timed_wait_buffering +_skgxp_udp_timed_wait_seconds +_skgxp_udp_use_tcb +_skgxp_zcpy_flags +_skgxpg_last_parameter +_skip_acfs_checks +_skip_assume_msg +_skip_trstamp_check +_slave_mapping_enabled +_slave_mapping_group_size +_slave_mapping_skew_ratio +_small_table_threshold +_smm_advice_enabled +_smm_advice_log_size +_smm_auto_cost_enabled +_smm_auto_max_io_size +_smm_auto_min_io_size +_smm_bound +_smm_control +_smm_freeable_retain +_smm_isort_cap +_smm_max_size +_smm_max_size_static +_smm_min_size +_smm_px_max_size +_smm_px_max_size_static +_smm_retain_size +_smm_trace +_smon_internal_errlimit +_smon_undo_seg_rescan_limit +_smu_debug_mode +_smu_error_simulation_site +_smu_error_simulation_type +_smu_timeouts +_snapshot_recovery_enabled +_sort_elimination_cost_ratio +_sort_multiblock_read_count +_sort_spill_threshold +_sort_sync_min_spill_threshold +_sort_sync_min_spillsize +_space_align_size +_spacereuse_track_memlimit +_spare_test_parameter +_sparse_backing_file +_spawn_diag_opts +_spawn_diag_thresh_secs +_spin_count +_spr_max_rules +_spr_push_pred_refspr +_spr_use_AW_AS +_spr_use_hash_table +_sql_analyze_enable_auto_txn +_sql_analyze_parse_model +_sql_compatibility +_sql_connect_capability_override +_sql_connect_capability_table +_sql_diag_repo_origin +_sql_diag_repo_retain +_sql_hash_debug +_sql_hvshare_debug +_sql_hvshare_threshold +_sql_model_unfold_forloops +_sql_ncg_mode +_sql_plan_directive_mgmt_control +_sql_plan_management_control +_sql_show_expreval +_sqlexec_progression_cost +_sqlmon_binds_xml_format +_sqlmon_max_plan +_sqlmon_max_planlines +_sqlmon_recycle_time +_sqlmon_threshold +_sqltune_category_parsed +_srvntfn_job_deq_timeout +_srvntfn_jobsubmit_interval +_srvntfn_max_concurrent_jobs +_srvntfn_q_msgcount +_srvntfn_q_msgcount_inc +_sscr_dir +_sscr_osdir +_sta_control +_stack_guard_level +_standby_causal_heartbeat_timeout +_standby_flush_mode +_standby_implicit_rcv_timeout +_standby_switchover_timeout +_stat_aggs_one_pass_algorithm +_static_backgrounds +_statistics_based_srf_enabled +_step_down_limit_in_pct +_streams_pool_max_size +_subquery_pruning_cost_factor +_subquery_pruning_enabled +_subquery_pruning_mv_enabled +_subquery_pruning_reduction +_suppress_identifiers_on_dupkey +_switch_current_scan_scn +_switchover_timeout +_switchover_to_standby_option +_switchover_to_standby_switch_log +_swrf_metric_frequent_mode +_swrf_mmon_dbfus +_swrf_mmon_flush +_swrf_mmon_metrics +_swrf_on_disk_enabled +_swrf_test_action +_swrf_test_dbfus +_sync_primary_wait_time +_synonym_repoint_tracing +_sys_logon_delay +_sysaux_test_param +_system_api_interception_debug +_system_index_caching +_system_state_cputime_limit +_system_state_runtime_limit +_system_trig_enabled +_ta_lns_wait_for_arch_log +_table_lookup_prefetch_size +_table_lookup_prefetch_thresh +_table_scan_cost_plus_one +_tablespaces_per_transaction +_target_log_write_size +_target_log_write_size_timeout +_target_rba_max_lag_percentage +_tdb_debug_mode +_temp_tran_block_threshold +_temp_tran_cache +_temp_undo_disable_adg +_tenth_spare_parameter +_test_hm_extent_map +_test_ksusigskip +_test_param_1 +_test_param_2 +_test_param_3 +_test_param_4 +_test_param_5 +_test_param_6 +_test_param_7 +_test_param_8 +_third_spare_parameter +_thirteenth_spare_parameter +_thirtieth_spare_parameter +_thirty-eighth_spare_parameter +_thirty-fifth_spare_parameter +_thirty-first_spare_parameter +_thirty-fourth_spare_parameter +_thirty-ninth_spare_parameter +_thirty-second_spare_parameter +_thirty-seventh_spare_parameter +_thirty-sixth_spare_parameter +_thirty-third_spare_parameter +_thread_state_change_timeout_pnp +_threshold_alerts_enable +_time_based_rcv_ckpt_target +_time_based_rcv_hdr_update_interval +_timemodel_collection +_timeout_actions_enabled +_timer_precision +_total_large_extent_memory +_touch_sga_pages_during_allocation +_tq_dump_period +_trace_buffer_wait_timeouts +_trace_buffers +_trace_dump_all_procs +_trace_dump_client_buckets +_trace_dump_cur_proc_only +_trace_dump_static_only +_trace_events +_trace_files_public +_trace_kqlidp +_trace_ktds +_trace_ktfs +_trace_ktfs_mem +_trace_navigation_scope +_trace_pin_time +_trace_pool_size +_trace_processes +_trace_temp +_trace_virtual_columns +_track_metrics_memory +_track_space_reuse +_transaction_auditing +_transaction_recovery_servers +_transient_logical_clear_hold_mrp_bit +_truncate_optimization_enabled +_tsenc_obfuscate_key +_tsenc_tracing +_tsm_connect_string +_tsm_disable_auto_cleanup +_tstz_localtime_bypass +_tts_allow_charset_mismatch +_twelfth_spare_parameter +_twentieth_spare_parameter +_twenty-eighth_spare_parameter +_twenty-fifth_spare_parameter +_twenty-first_spare_parameter +_twenty-fourth_spare_parameter +_twenty-ninth_spare_parameter +_twenty-second_spare_parameter +_twenty-seventh_spare_parameter +_twenty-sixth_spare_parameter +_twenty-third_spare_parameter +_two-hundred-and-eighteenth_spare_parameter +_two-hundred-and-eighth_spare_parameter +_two-hundred-and-eleventh_spare_parameter +_two-hundred-and-fifteenth_spare_parameter +_two-hundred-and-fifth_spare_parameter +_two-hundred-and-first_spare_parameter +_two-hundred-and-fourteenth_spare_parameter +_two-hundred-and-fourth_spare_parameter +_two-hundred-and-nineteenth_spare_parameter +_two-hundred-and-ninth_spare_parameter +_two-hundred-and-second_spare_parameter +_two-hundred-and-seventeenth_spare_parameter +_two-hundred-and-seventh_spare_parameter +_two-hundred-and-sixteenth_spare_parameter +_two-hundred-and-sixth_spare_parameter +_two-hundred-and-tenth_spare_parameter +_two-hundred-and-third_spare_parameter +_two-hundred-and-thirteenth_spare_parameter +_two-hundred-and-twelfth_spare_parameter +_two-hundred-and-twentieth_spare_parameter +_two-hundredth_spare_parameter +_two_pass +_two_pass_reverse_polish_enabled +_txn_control_trace_buf_size +_uga_cga_large_extent_size +_ultrafast_latch_statistics +_undo_autotune +_undo_block_compression +_undo_debug_mode +_undo_debug_usage +_undo_tbs_slave_percent +_undotbs_regular_tables +_undotbs_stepdown_pcent +_unified_audit_flush_interval +_unified_audit_flush_threshold +_unified_audit_policy_disabled +_union_rewrite_for_gs +_unnest_subquery +_unused_block_compression +_update_datafile_headers_with_space_information +_upddel_dba_hash_mask_bits +_usd_preload_blks +_usd_recent_read +_use_adaptive_log_file_sync +_use_best_fit +_use_column_stats_for_function +_use_dynamic_shares +_use_fips_mode +_use_hidden_partitions +_use_hybrid_encryption_mode +_use_ism +_use_ism_for_pga +_use_nosegment_indexes +_use_pdb_parselock +_use_platform_compression_lib +_use_platform_encryption_lib +_use_realfree_heap +_use_seq_process_cache +_use_single_log_writer +_use_vector_post +_use_zero_copy_io +_utlmmig_table_stats_gathering +_uts_first_segment_retain +_uts_first_segment_size +_uts_trace_disk_threshold +_uts_trace_segment_size +_uts_trace_segments +_validate_flashback_database +_validate_metric_groups +_validate_readmem_redo +_vector_aggregation_max_size +_vector_operations_control +_vector_serialize_temp_threshold +_vendor_lib_loc +_verify_fg_log_checksum +_verify_flashback_redo +_verify_undo_quota +_very_large_object_threshold +_very_large_partitioned_table +_virtual_column_overload_allowed +_vkrm_schedule_interval +_vktm_assert_thresh +_wait_breakup_threshold_csecs +_wait_breakup_time_csecs +_wait_for_sync +_wait_samples_max_sections +_wait_samples_max_time_secs +_wait_tracker_interval_secs +_wait_tracker_num_intervals +_wait_yield_hp_mode +_wait_yield_mode +_wait_yield_sleep_freq +_wait_yield_sleep_time_msecs +_wait_yield_yield_freq +_walk_insert_threshold +_watchpoint_on +_wcr_control +_wcr_grv_cache_size +_wcr_seq_cache_size +_widetab_comp_enabled +_windowfunc_optimization_settings +_with_subquery +_write_clones +_xa_internal_retries +_xds_max_child_cursors +_xengem_devname +_xengem_diagmode +_xengem_enabled +_xpl_peeked_binds_log_size +_xpl_trace +_xs_cleanup_task +_xs_dispatcher_only +_xsolapi_auto_materialization_bound +_xsolapi_auto_materialization_type +_xsolapi_build_trace +_xsolapi_debug_output +_xsolapi_densify_cubes +_xsolapi_dimension_group_creation +_xsolapi_dml_trace +_xsolapi_fetch_type +_xsolapi_fix_vptrs +_xsolapi_generate_with_clause +_xsolapi_hierarchy_value_type +_xsolapi_load_at_process_start +_xsolapi_materialization_rowcache_min_rows_for_use +_xsolapi_materialize_sources +_xsolapi_metadata_reader_mode +_xsolapi_odbo_mode +_xsolapi_opt_aw_position +_xsolapi_optimize_suppression +_xsolapi_precompute_subquery +_xsolapi_remove_columns_for_materialization +_xsolapi_set_nls +_xsolapi_share_executors +_xsolapi_source_trace +_xsolapi_sql_all_multi_join_non_base_hints +_xsolapi_sql_all_non_base_hints +_xsolapi_sql_auto_dimension_hints +_xsolapi_sql_auto_measure_hints +_xsolapi_sql_dimension_hints +_xsolapi_sql_enable_aw_join +_xsolapi_sql_enable_aw_qdr_merge +_xsolapi_sql_hints +_xsolapi_sql_measure_hints +_xsolapi_sql_minus_threshold +_xsolapi_sql_optimize +_xsolapi_sql_prepare_stmt_cache_size +_xsolapi_sql_remove_columns +_xsolapi_sql_result_set_cache_size +_xsolapi_sql_symmetric_predicate +_xsolapi_sql_top_dimension_hints +_xsolapi_sql_top_measure_hints +_xsolapi_sql_use_bind_variables +_xsolapi_stringify_order_levels +_xsolapi_support_mtm +_xsolapi_suppression_aw_mask_threshold +_xsolapi_suppression_chunk_size +_xsolapi_use_models +_xsolapi_use_olap_dml +_xsolapi_use_olap_dml_for_rank +_xt_coverage +_xt_trace +_xtbuffer_size +_xtts_allow_pre10 +_xtts_set_platform_info +_zonemap_control +_zonemap_staleness_tracking +_zonemap_use_enabled +abort +abs +access +accessed +account +acl +acos +action +actions +activate +active +active_component +active_data +active_function +active_instance_count +active_tag +activity +adaptive_plan +add +add_column +add_group +add_months +adj_date +admin +administer +administrator +advanced +advise +advisor +afd_diskstring +after +alias +all +all_rows +allocate +allow +alter +always +analyze +ancillary +and +and_equal +anomaly +ansi_rearch +antijoin +any +anyschema +append +append_values +appendchildxml +application +apply +approx_count_distinct +aq_tm_processes +archival +archive +archive_lag_target +archived +archivelog +array +asc +ascii +asciistr +asin +asis +asm_diskgroups +asm_diskstring +asm_power_limit +asm_preferred_read_failure_groups +assembly +assign +associate +async +asynchronous +atan +atan2 +attribute +attributes +audit +audit_file_dest +audit_sys_operations +audit_syslog_level +audit_trail +authenticated +authentication +authid +authorization +auto +auto_login +auto_reoptimize +autoallocate +autoextend +automatic +availability +avg +avro +awr_snapshot_time_offset +background +background_core_dump +background_dump_dest +backup +backup_tape_io_slaves +basic +basicfile +batch +batch_table_access_by_rowid +batchsize +become +before +begin +begin_outline_data +beginning +behalf +bequeath +between +bfile +bfilename +bigfile +bin_to_num +binary +binary_double +binary_double_infinity +binary_double_nan +binary_float +binary_float_infinity +binary_float_nan +bind_aware +binding +bitand +bitmap +bitmap_and +bitmap_merge_area_size +bitmap_tree +bitmaps +bits +blank_trimming +blob +block +block_range +blocks +blocksize +body +both +bound +branch +breadth +broadcast +bson +buffer +buffer_cache +buffer_pool +buffer_pool_keep +buffer_pool_recycle +build +bulk +bypass_recursive_check +bypass_ujvc +byte +cache +cache_cb +cache_instances +cache_temp_table +caching +calculated +call +callback +cancel +capacity +cardinality +cascade +case +cast +category +cdb$default +ceil +cell_flash_cache +cell_offload_compaction +cell_offload_decryption +cell_offload_parameters +cell_offload_plan_display +cell_offload_processing +cell_offloadgroup_name +certificate +cfile +chained +change +change_dupkey_error_index +char +char_cs +character +chartorowid +check +check_acl_rewrite +checkpoint +child +choose +chr +chunk +circuits +class +classifier +cleanup +clear +client +client_result_cache_lag +client_result_cache_size +clob +clone +clonedb +close +close_cached_open_cursors +cluster +cluster_by_rowid +cluster_database +cluster_database_instances +cluster_details +cluster_distance +cluster_id +cluster_interconnects +cluster_probability +cluster_set +clustering +clustering_factor +co_auth_ind +coalesce +coalesce_sq +coarse +cold +collect +column +column_auth_indicator +column_stats +column_value +columnar +columns +comment +commit +commit_logging +commit_point_strength +commit_wait +commit_write +committed +common_data +common_user_prefix +compact +compatibility +compatible +compile +complete +compliance +component +components +compose +composite +composite_limit +compound +compress +compute +con_dbid_to_id +con_guid_to_id +con_id +con_name_to_id +con_uid_to_id +concat +condition +conditional +confirm +conforming +connect +connect_by_cb_whr_only +connect_by_combine_sw +connect_by_cost_based +connect_by_elim_dups +connect_by_filtering +connect_by_iscycle +connect_by_isleaf +connect_by_root +connect_time +connection_brokers +consider +consistent +const +constant +constraint +constraints +container +container_data +containers +content +contents +context +continue +control_file_record_keep_time +control_files +control_management_pack_access +controlfile +convert +cookie +copy +core_dump_dest +corr +corr_k +corr_s +corrupt_xid +corrupt_xid_all +corruption +cos +cosh +cost +cost_xml_query_rewrite +count +covar_pop +covar_samp +cpu_costing +cpu_count +cpu_per_call +cpu_per_session +crash +create +create_bitmap_area_size +create_file_dest +create_stored_outlines +creation +credential +critical +cross +crossedition +csconvert +cube +cube_aj +cube_gb +cube_sj +cume_dist +cume_distm +current +current_date +current_schema +current_time +current_timestamp +current_user +currentv +cursor +cursor_bind_capture_destination +cursor_sharing +cursor_sharing_exact +cursor_space_for_time +cursor_specific_segment +cycle +dangling +data +data_security_rewrite_limit +database +datafile +datafiles +datamovement +dataobj_to_mat_partition +dataobj_to_partition +dataobjno +datapump +date +date_mode +day +days +db_16k_cache_size +db_2k_cache_size +db_32k_cache_size +db_4k_cache_size +db_8k_cache_size +db_big_table_cache_percent_target +db_block_buffers +db_block_checking +db_block_checksum +db_block_size +db_cache_advice +db_cache_size +db_create_file_dest +db_create_online_log_dest_1 +db_create_online_log_dest_2 +db_create_online_log_dest_3 +db_create_online_log_dest_4 +db_create_online_log_dest_5 +db_domain +db_file_multiblock_read_count +db_file_name_convert +db_files +db_flash_cache_file +db_flash_cache_size +db_flashback_retention_target +db_index_compression_inheritance +db_keep_cache_size +db_lost_write_protect +db_name +db_performance_profile +db_recovery_file_dest +db_recovery_file_dest_size +db_recycle_cache_size +db_role_change +db_securefile +db_ultra_safe +db_unique_name +db_unrecoverable_scn_tracking +db_version +db_writer_processes +dba +dba_recyclebin +dbms_stats +dbtimezone +dbwr_io_slaves +ddl +ddl_lock_timeout +deallocate +debug +debugger +dec +decimal +declare +decode +decompose +decorrelate +decr +decrement +decrypt +deduplicate +default +defaults +deferrable +deferred +deferred_segment_creation +define +defined +definer +degree +delay +delegate +delete +delete_all +deletexml +demand +dense_rank +dense_rankm +dependent +depth +dequeue +deref +deref_no_rewrite +desc +destroy +detached +determines +dg_broker_config_file1 +dg_broker_config_file2 +dg_broker_start +diagnostic_dest +dictionary +dimension +dimensions +direct_load +direct_path +directory +disable +disable_all +disable_parallel_dml +disable_preset +disable_rpke +disallow +disassociate +discard +disconnect +disk +disk_asynch_io +diskgroup +disks +dismount +dispatchers +distinct +distinguished +distribute +distributed +distributed_lock_timeout +dml +dml_locks +dml_update +dnfs_batch_size +docfidelity +document +domain_index_filter +domain_index_no_sort +domain_index_sort +double +downgrade +driving_site +drop +drop_column +drop_group +dst_upgrade_insert_conv +dump +duplicate +dynamic +dynamic_sampling +dynamic_sampling_est_cdn +each +edition +editionable +editioning +editions +element +elim_groupby +eliminate_join +eliminate_oby +eliminate_outer_join +else +empty +empty_blob +empty_clob +enable +enable_all +enable_ddl_logging +enable_goldengate_replication +enable_parallel_dml +enable_pluggable_database +enable_preset +encoding +encrypt +encryption +end +end_outline_data +enforce +enforced +enqueue +enterprise +entityescaping +entry +equipart +error +error_argument +error_on_overlap_time +errors +escape +estimate +eval +evalname +evaluate +evaluation +event +events +every +exafusion_enabled +except +exceptions +exchange +exclude +exclude_seed_cdb_view +excluding +exclusive +execute +exempt +existing +exists +existsnode +exp +expand_gset_to_union +expand_table +expire +explain +explosion +export +expr_corr_check +express +extends +extent +extents +external +externally +extra +extract +extractclobxml +extractvalue +facility +fact +factor +factorize_join +failed +failed_login_attempts +failgroup +failover +failure +fal_client +fal_server +false +family +far +fast +fast_start_io_target +fast_start_mttr_target +fast_start_parallel_rollback +faststart +fbtscan +feature_details +feature_id +feature_set +feature_value +fetch +file +file_mapping +file_name_convert +fileio_network_adapters +filesystem_like_logging +filesystemio_options +filter +final +fine +finish +first +first_rows +first_value +firstm +fixed_date +fixed_view_data +flagger +flash_cache +flashback +float +flob +floor +flush +folder +following +follows +for +force +force_xml_query_rewrite +foreign +forever +format +forward +fragment_number +freelist +freelists +freepools +fresh +from +from_tz +full +full_outer_join_to_outer +function +functions +gather_optimizer_statistics +gather_plan_statistics +gby_conc_rollup +gby_pushdown +gcs_server_processes +generated +get +global +global_context_pool_size +global_name +global_names +global_topic_enabled +global_txn_processes +globally +grant +greatest +group +group_by +group_id +grouping +grouping_id +groups +guarantee +guaranteed +guard +hash +hash_aj +hash_area_size +hash_sj +hashkeys +having +header +heap +heat_map +help +hextoraw +hextoref +hi_shared_memory_address +hidden +hide +hierarchy +high +hintset_begin +hintset_end +hot +hour +hs_autoregister +hwm_brokered +hybrid +identified +identifier +identity +idgenerators +idle_time +ifile +ignore +ignore_optim_embedded_hints +ignore_row_on_dupkey_index +ignore_where_clause +ilm +immediate +impact +import +in_memory_metadata +in_xquery +inactive +include +include_version +including +incr +increment +incremental +indent +index +index_asc +index_combine +index_desc +index_ffs +index_filter +index_join +index_rows +index_rrs +index_rs +index_rs_asc +index_rs_desc +index_scan +index_skip_scan +index_ss +index_ss_asc +index_ss_desc +index_stats +indexed +indexes +indexing +indextype +indextypes +indicator +infinite +informational +inherit +initcap +initial +initialized +initially +initrans +inline +inline_xmltype_nt +inmemory +inmemory_clause_default +inmemory_force +inmemory_max_populate_servers +inmemory_pruning +inmemory_query +inmemory_size +inmemory_trickle_repopulate_servers_percent +inner +inplace +insert +insertchildxml +insertchildxmlafter +insertchildxmlbefore +insertxmlafter +insertxmlbefore +instance +instance_groups +instance_name +instance_number +instance_type +instances +instant_restore +instantiable +instantly +instead +instr +instr2 +instr4 +instrb +instrc +int +integer +interleaved +intermediate +internal_convert +internal_use +interpreted +intersect +interval +into +invalidate +invisible +isolation +isolation_level +iterate +iteration_number +java +java_jit_enabled +java_max_sessionspace_size +java_pool_size +java_restrict +java_soft_sessionspace_limit +job +job_queue_processes +join +json +json_array +json_arrayagg +json_equal +json_exists +json_exists2 +json_object +json_objectagg +json_query +json_serialize +json_table +json_textcontains +json_textcontains2 +json_value +jsonget +jsonparse +keep +keep_duplicates +kerberos +key +key_length +keys +keysize +keystore +kill +label +lag +large_pool_size +last +last_day +last_value +lateral +lax +layer +ldap_directory_access +ldap_directory_sysauth +ldap_reg_sync_interval +ldap_registration +ldap_registration_enabled +lead +leading +least +left +length +length2 +length4 +lengthb +lengthc +less +level +levels +library +license_max_sessions +license_max_users +license_sessions_warning +life +lifecycle +lifetime +like +like2 +like4 +like_expand +likec +limit +linear +link +list +listagg +listener_networks +lnnvl +load +lob +lobnvl +lobs +local +local_indexes +local_listener +localtime +localtimestamp +location +locator +lock +lock_name_space +lock_sga +locked +locking +log +log_archive_config +log_archive_dest +log_archive_dest_1 +log_archive_dest_10 +log_archive_dest_11 +log_archive_dest_12 +log_archive_dest_13 +log_archive_dest_14 +log_archive_dest_15 +log_archive_dest_16 +log_archive_dest_17 +log_archive_dest_18 +log_archive_dest_19 +log_archive_dest_2 +log_archive_dest_20 +log_archive_dest_21 +log_archive_dest_22 +log_archive_dest_23 +log_archive_dest_24 +log_archive_dest_25 +log_archive_dest_26 +log_archive_dest_27 +log_archive_dest_28 +log_archive_dest_29 +log_archive_dest_3 +log_archive_dest_30 +log_archive_dest_31 +log_archive_dest_4 +log_archive_dest_5 +log_archive_dest_6 +log_archive_dest_7 +log_archive_dest_8 +log_archive_dest_9 +log_archive_dest_state_1 +log_archive_dest_state_10 +log_archive_dest_state_11 +log_archive_dest_state_12 +log_archive_dest_state_13 +log_archive_dest_state_14 +log_archive_dest_state_15 +log_archive_dest_state_16 +log_archive_dest_state_17 +log_archive_dest_state_18 +log_archive_dest_state_19 +log_archive_dest_state_2 +log_archive_dest_state_20 +log_archive_dest_state_21 +log_archive_dest_state_22 +log_archive_dest_state_23 +log_archive_dest_state_24 +log_archive_dest_state_25 +log_archive_dest_state_26 +log_archive_dest_state_27 +log_archive_dest_state_28 +log_archive_dest_state_29 +log_archive_dest_state_3 +log_archive_dest_state_30 +log_archive_dest_state_31 +log_archive_dest_state_4 +log_archive_dest_state_5 +log_archive_dest_state_6 +log_archive_dest_state_7 +log_archive_dest_state_8 +log_archive_dest_state_9 +log_archive_duplex_dest +log_archive_format +log_archive_max_processes +log_archive_min_succeed_dest +log_archive_start +log_archive_trace +log_buffer +log_checkpoint_interval +log_checkpoint_timeout +log_checkpoints_to_alert +log_file_name_convert +log_read_only_violations +logfile +logfiles +logging +logical +logical_reads_per_call +logical_reads_per_session +logmining +logoff +logon +long +low +lower +lpad +ltrim +main +make_ref +manage +managed +management +manager +manual +map +mapping +master +match +match_number +match_recognize +matched +matches +materialize +materialized +max +max_dispatchers +max_dump_file_size +max_enabled_roles +max_shared_servers +max_shared_temp_size +max_string_size +maxarchlogs +maxdatafiles +maxextents +maximize +maxinstances +maxlogfiles +maxloghistory +maxlogmembers +maxsize +maxtrans +maxvalue +measure +measures +median +medium +member +memcompress +memory +memory_max_target +memory_target +merge +merge$actions +merge_aj +merge_const_on +merge_sj +metadata +method +migrate +migration +min +minextents +minimize +minimum +mining +minus +minus_null +minute +minvalue +mirror +mirrorcold +mirrorhot +mlslabel +mod +mode +model +model_compile_subquery +model_dontverify_uniqueness +model_dynamic_subquery +model_min_analysis +model_nb +model_no_analysis +model_pby +model_push_ref +model_sv +modification +modify +modify_column_type +module +monitor +monitoring +month +months +months_between +mount +mountpath +move +movement +multidimensional +multiset +mv_merge +name +named +namespace +nan +nanvl +national +native +native_full_outer_join +natural +nav +nchar +nchar_cs +nchr +nclob +needed +neg +nested +nested_table_fast_insert +nested_table_get_refs +nested_table_id +nested_table_set_refs +nested_table_set_setid +network +never +new +new_time +next +next_day +nl_aj +nl_sj +nlj_batching +nlj_index_filter +nlj_index_scan +nlj_prefetch +nls_calendar +nls_characterset +nls_charset_decl_len +nls_charset_id +nls_charset_name +nls_comp +nls_currency +nls_date_format +nls_date_language +nls_dual_currency +nls_initcap +nls_iso_currency +nls_lang +nls_language +nls_length_semantics +nls_lower +nls_nchar_conv_excp +nls_numeric_characters +nls_sort +nls_special_chars +nls_territory +nls_time_format +nls_time_tz_format +nls_timestamp_format +nls_timestamp_tz_format +nls_upper +nlssort +no_access +no_adaptive_plan +no_ansi_rearch +no_auto_reoptimize +no_basetable_multimv_rewrite +no_batch_table_access_by_rowid +no_bind_aware +no_buffer +no_cartesian +no_check_acl_rewrite +no_cluster_by_rowid +no_clustering +no_coalesce_sq +no_common_data +no_connect_by_cb_whr_only +no_connect_by_combine_sw +no_connect_by_cost_based +no_connect_by_elim_dups +no_connect_by_filtering +no_cost_xml_query_rewrite +no_cpu_costing +no_data_security_rewrite +no_decorrelate +no_domain_index_filter +no_dst_upgrade_insert_conv +no_elim_groupby +no_eliminate_join +no_eliminate_oby +no_eliminate_outer_join +no_expand +no_expand_gset_to_union +no_expand_table +no_fact +no_factorize_join +no_filtering +no_full_outer_join_to_outer +no_gather_optimizer_statistics +no_gby_pushdown +no_index +no_index_ffs +no_index_ss +no_inmemory +no_inmemory_pruning +no_load +no_merge +no_model_push_ref +no_monitor +no_monitoring +no_multimv_rewrite +no_native_full_outer_join +no_nlj_batching +no_nlj_prefetch +no_object_link +no_order_rollups +no_outer_join_to_anti +no_outer_join_to_inner +no_parallel +no_parallel_index +no_partial_commit +no_partial_join +no_partial_rollup_pushdown +no_place_distinct +no_place_group_by +no_pq_concurrent_union +no_pq_map +no_pq_replicate +no_pq_skew +no_prune_gsets +no_pull_pred +no_push_pred +no_push_subq +no_px_fault_tolerance +no_px_join_filter +no_qkn_buff +no_query_transformation +no_ref_cascade +no_result_cache +no_rewrite +no_root_sw_for_local +no_semi_to_inner +no_semijoin +no_set_to_join +no_sql_translation +no_sql_tune +no_star_transformation +no_statement_queuing +no_stats_gsets +no_subquery_pruning +no_substrb_pad +no_swap_join_inputs +no_table_lookup_by_nl +no_temp_table +no_transform_distinct_agg +no_unnest +no_use_cube +no_use_hash +no_use_hash_aggregation +no_use_hash_gby_for_pushdown +no_use_invisible_indexes +no_use_merge +no_use_nl +no_use_vector_aggregation +no_vector_transform +no_vector_transform_dims +no_vector_transform_fact +no_xdb_fastpath_insert +no_xml_dml_rewrite +no_xml_query_rewrite +no_xmlindex_rewrite +no_xmlindex_rewrite_in_select +no_zonemap +noappend +noarchivelog +noaudit +nocache +nocompress +nocopy +nocpu_costing +nocycle +nodelay +noentityescaping +noforce +noguarantee +nokeep +nolocal +nologging +nomapping +nomaxvalue +nominimize +nominvalue +nomonitoring +nonblocking +noncdb_compatible +none +noneditionable +nonschema +noorder +nooverride +noparallel +noparallel_index +nopartition +norelocate +norely +norepair +noreplay +noresetlogs +noreverse +norewrite +normal +norowdependencies +noschemacheck +nosegment +nosort +nostrict +noswitch +not +nothing +notification +novalidate +nowait +nth_value +ntile +null +nullif +nulls +num_index_keys +number +numeric +numtodsinterval +numtoyminterval +nvarchar2 +nvl +nvl2 +obj_id +object +object2xml +object_cache_max_size_percent +object_cache_optimal_size +objno +objno_reuse +occurences +off +offline +offset +oid +oidindex +olap +olap_page_pool_size +old +old_push_pred +ols +oltp +omit +one +online +only +opaque +opaque_transform +opaque_xcanonical +opcode +open +open_cursors +open_links +open_links_per_instance +operations +operator +opt_estimate +opt_param +optimal +optimize +optimizer_adaptive_features +optimizer_adaptive_reporting_only +optimizer_capture_sql_plan_baselines +optimizer_dynamic_sampling +optimizer_features_enable +optimizer_goal +optimizer_index_caching +optimizer_index_cost_adj +optimizer_inmemory_aware +optimizer_mode +optimizer_secure_view_merging +optimizer_use_invisible_indexes +optimizer_use_pending_statistics +optimizer_use_sql_plan_baselines +option +or_expand +or_predicates +ora_branch +ora_check_acl +ora_check_privilege +ora_clustering +ora_dst_affected +ora_dst_convert +ora_dst_error +ora_get_aclids +ora_get_privileges +ora_hash +ora_invoking_user +ora_invoking_userid +ora_invoking_xs_user +ora_invoking_xs_user_guid +ora_rawcompare +ora_rawconcat +ora_rowscn +ora_rowscn_raw +ora_rowversion +ora_tabversion +ora_write_time +oradebug +order +ordered +ordered_predicates +ordinality +organization +os_authent_prefix +os_roles +other +out_of_line +outer +outer_join_to_anti +outer_join_to_inner +outline +outline_leaf +over +overflow +overflow_nomove +overlaps +own +owner +ownership +package +packages +parallel +parallel_adaptive_multi_user +parallel_automatic_tuning +parallel_degree_level +parallel_degree_limit +parallel_degree_policy +parallel_execution_message_size +parallel_force_local +parallel_index +parallel_instance_group +parallel_io_cap_enabled +parallel_max_servers +parallel_min_percent +parallel_min_servers +parallel_min_time_threshold +parallel_server +parallel_server_instances +parallel_servers_target +parallel_threads_per_cpu +param +parameters +parent +parity +part$num$inst +partial +partial_join +partial_rollup_pushdown +partially +partition +partition_hash +partition_list +partition_range +partitions +passing +password +password_grace_time +password_life_time +password_lock_time +password_reuse_max +password_reuse_time +password_verify_function +past +patch +path +path_prefix +paths +pattern +pbl_hs_begin +pbl_hs_end +pctfree +pctincrease +pctthreshold +pctused +pctversion +pdb_file_name_convert +pdb_lockdown +pdb_os_credential +pending +per +percent +percent_rank +percent_rankm +percentile_cont +percentile_disc +performance +period +permanent +permission +permit_92_wrap_format +permute +pfile +pga_aggregate_limit +pga_aggregate_target +physical +pikey +piv_gb +piv_ssf +pivot +place_distinct +place_group_by +plan +plscope_settings +plsql_ccflags +plsql_code_type +plsql_debug +plsql_optimize_level +plsql_v2_compatibility +plsql_warnings +pluggable +point +policy +pool_16k +pool_2k +pool_32k +pool_4k +pool_8k +post_transaction +power +powermultiset +powermultiset_by_cardinality +pq_concurrent_union +pq_distribute +pq_distribute_window +pq_filter +pq_map +pq_nomap +pq_replicate +pq_skew +pre_page_sga +prebuilt +precedes +preceding +precision +precompute_subquery +predicate_reorders +prediction +prediction_bounds +prediction_cost +prediction_details +prediction_probability +prediction_set +preload +prepare +present +presentnnv +presentv +preserve +preserve_oid +pretty +prev +previous +primary +printblobtoclob +prior +priority +private +private_sga +privilege +privileged +privileges +procedural +procedure +process +processes +processor_group_name +profile +program +project +propagate +protected +protection +proxy +pruning +public +pull_pred +purge +push_pred +push_subq +px_fault_tolerance +px_granule +px_join_filter +qb_name +query +query_block +query_rewrite_enabled +query_rewrite_integrity +queue +queue_curr +queue_rowp +quiesce +quorum +quota +random +random_local +range +rank +rankm +rapidly +ratio_to_report +raw +rawtohex +rawtonhex +rba +rbo_outline +rdba +rdbms_server_dn +read +read_only_open_delayed +reads +real +realm +rebalance +rebuild +records_per_block +recover +recoverable +recovery +recovery_parallelism +recycle +recyclebin +redaction +redefine +redo +redo_transport_user +reduced +redundancy +ref +ref_cascade_cursor +reference +referenced +references +referencing +refresh +reftohex +regexp_count +regexp_instr +regexp_like +regexp_replace +regexp_substr +register +regr_avgx +regr_avgy +regr_count +regr_intercept +regr_r2 +regr_slope +regr_sxx +regr_sxy +regr_syy +regular +reject +rekey +relational +relocate +rely +remainder +remote_dependencies_mode +remote_listener +remote_login_passwordfile +remote_mapped +remote_os_authent +remote_os_roles +remove +rename +repair +repeat +replace +replication +replication_dependency_tracking +required +reset +resetlogs +resize +resolve +resolver +resource +resource_limit +resource_manager_cpu_allocation +resource_manager_plan +respect +restart +restore +restore_as_intervals +restrict +restrict_all_ref_cons +restricted +result_cache +result_cache_max_result +result_cache_max_size +result_cache_mode +result_cache_remote_expiration +resumable +resumable_timeout +resume +retention +retry_on_row_change +return +returning +reuse +reverse +revoke +rewrite +rewrite_or_error +right +role +roles +roleset +rollback +rollback_segments +rolling +rollup +round +row +row_length +row_number +rowdependencies +rowid +rowid_mapping_table +rowidtochar +rowidtonchar +rownum +rows +rpad +rtrim +rule +rules +running +salt +sample +save +save_as_intervals +savepoint +sb4 +scale +scale_rows +scan +scan_instances +scheduler +schema +schemacheck +scn +scn_ascending +scope +scrub +sd_all +sd_inhibit +sd_show +sdo_geom_mbr +search +sec_case_sensitive_logon +sec_max_failed_login_attempts +sec_protocol_error_further_action +sec_protocol_error_trace_action +sec_return_server_release_banner +second +secret +securefile +securefile_dba +security +seed +seg_block +seg_file +segment +select +selectivity +semi_to_inner +semijoin +semijoin_driver +sequence +sequenced +sequential +serial +serial_reuse +serializable +servererror +service_name_convert +service_names +services +session +session_cached_cursors +session_max_open_files +sessions +sessions_per_user +sessiontimezone +sessiontzname +set +set_to_join +sets +settings +severe +sga_max_size +sga_target +shadow_core_dump +share +shared +shared_memory_address +shared_pool +shared_pool_reserved_size +shared_pool_size +shared_server_sessions +shared_servers +sharing +shelflife +show +shrink +shutdown +siblings +sid +sign +signal_component +signal_function +simple +sin +single +singletask +sinh +size +skip +skip_ext_optimizer +skip_unq_unusable_idx +skip_unusable_indexes +smallfile +smallint +smtp_out_server +snapshot +some +sort +sort_area_retained_size +sort_area_size +soundex +source +source_file_directory +source_file_name_convert +space +spatial_vector_acceleration +specification +spfile +split +spreadsheet +sql +sql92_security +sql_trace +sql_translation_profile +sqlldr +sqltune_category +sqrt +stale +standalone +standard_hash +standby +standby_archive_dest +standby_file_management +standby_max_data_delay +standbys +star +star_transformation +star_transformation_enabled +start +startup +state +statement +statement_id +statement_queuing +statements +static +statistics +statistics_level +stats_binomial_test +stats_crosstab +stats_f_test +stats_ks_test +stats_mode +stats_mw_test +stats_one_way_anova +stats_t_test_indep +stats_t_test_indepu +stats_t_test_one +stats_t_test_paired +stats_wsr_test +stddev +stddev_pop +stddev_samp +stop +storage +store +stream +streams +streams_pool_size +strict +string +strip +stripe_columns +stripe_width +structure +submultiset +subpartition +subpartition_rel +subpartitions +subqueries +subquery_pruning +subscribe +subset +substitutable +substr +substr2 +substr4 +substrb +substrc +success +successful +sum +summary +supplemental +suspend +swap_join_inputs +switch +switchover +sync +synchronous +synonym +sys_audit +sys_check_privilege +sys_checkacl +sys_connect_by_path +sys_context +sys_dburigen +sys_dl_cursor +sys_dm_rxform_chr +sys_dm_rxform_num +sys_dom_compare +sys_dst_prim2sec +sys_dst_sec2prim +sys_et_bfile_to_raw +sys_et_blob_to_image +sys_et_image_to_blob +sys_et_raw_to_bfile +sys_extpdtxt +sys_extract_utc +sys_fbt_insdel +sys_filter_acls +sys_fnmatches +sys_fnreplace +sys_get_aclids +sys_get_col_aclids +sys_get_privileges +sys_gettokenid +sys_getxtival +sys_guid +sys_make_xmlnodeid +sys_makexml +sys_mkxmlattr +sys_mkxti +sys_op_adt2bin +sys_op_adtcons +sys_op_alscrval +sys_op_atg +sys_op_bin2adt +sys_op_bitvec +sys_op_bl2r +sys_op_bloom_filter +sys_op_bloom_filter_list +sys_op_c2c +sys_op_cast +sys_op_ceg +sys_op_cl2c +sys_op_combined_hash +sys_op_comp +sys_op_convert +sys_op_countchg +sys_op_csconv +sys_op_csconvtest +sys_op_csr +sys_op_csx_patch +sys_op_cycled_seq +sys_op_decomp +sys_op_descend +sys_op_distinct +sys_op_dra +sys_op_dump +sys_op_dv_check +sys_op_enforce_not_null$ +sys_op_extract +sys_op_grouping +sys_op_guid +sys_op_hash +sys_op_iix +sys_op_itr +sys_op_key_vector_create +sys_op_key_vector_filter +sys_op_key_vector_filter_list +sys_op_key_vector_succeeded +sys_op_key_vector_use +sys_op_lbid +sys_op_lobloc2blob +sys_op_lobloc2clob +sys_op_lobloc2id +sys_op_lobloc2nclob +sys_op_lobloc2typ +sys_op_lsvi +sys_op_lvl +sys_op_makeoid +sys_op_map_nonnull +sys_op_msr +sys_op_nicombine +sys_op_niextract +sys_op_nii +sys_op_nix +sys_op_noexpand +sys_op_ntcimg$ +sys_op_numtoraw +sys_op_oidvalue +sys_op_opnsize +sys_op_par +sys_op_par_1 +sys_op_pargid +sys_op_pargid_1 +sys_op_part_id +sys_op_pivot +sys_op_r2o +sys_op_rawtonum +sys_op_rdtm +sys_op_ref +sys_op_rmtd +sys_op_rowidtoobj +sys_op_rpb +sys_op_tosetid +sys_op_tpr +sys_op_trtb +sys_op_undescend +sys_op_vecand +sys_op_vecbit +sys_op_vecor +sys_op_vecxor +sys_op_version +sys_op_vref +sys_op_vvd +sys_op_xmlcons_for_csx +sys_op_xpthatg +sys_op_xpthidx +sys_op_xpthop +sys_op_xtxt2sqlt +sys_op_zone_id +sys_optlobprbsc +sys_optxicmp +sys_optxqcastasnq +sys_orderkey_depth +sys_orderkey_maxchild +sys_orderkey_parent +sys_parallel_txn +sys_path_reverse +sys_pathid_is_attr +sys_pathid_is_nmspc +sys_pathid_lastname +sys_pathid_lastnmspc +sys_pxqextract +sys_raw_to_xsid +sys_rid_order +sys_row_delta +sys_sc_2_xmlt +sys_synrciredo +sys_typeid +sys_umakexml +sys_xmlanalyze +sys_xmlcontains +sys_xmlconv +sys_xmlexnsuri +sys_xmlgen +sys_xmli_loc_isnode +sys_xmli_loc_istext +sys_xmlinstr +sys_xmllocator_getsval +sys_xmlnodeid +sys_xmlnodeid_getcid +sys_xmlnodeid_getlocator +sys_xmlnodeid_getokey +sys_xmlnodeid_getpathid +sys_xmlnodeid_getptrid +sys_xmlnodeid_getrid +sys_xmlnodeid_getsval +sys_xmlnodeid_gettid +sys_xmlt_2_sc +sys_xmltranslate +sys_xmltype2sql +sys_xq_asqlcnv +sys_xq_atomcnvchk +sys_xq_nrng +sys_xq_pksql2xml +sys_xq_upkxml2sql +sys_xqbaseuri +sys_xqcastableerrh +sys_xqcodep2str +sys_xqcodepeq +sys_xqcon2seq +sys_xqconcat +sys_xqdelete +sys_xqdfltcolation +sys_xqdoc +sys_xqdocuri +sys_xqdurdiv +sys_xqed4uri +sys_xqendswith +sys_xqerr +sys_xqerrh +sys_xqeshtmluri +sys_xqexlobval +sys_xqexstwrp +sys_xqextract +sys_xqextrref +sys_xqexval +sys_xqfb2str +sys_xqfnbool +sys_xqfncmp +sys_xqfndatim +sys_xqfnlname +sys_xqfnnm +sys_xqfnnsuri +sys_xqfnpredtruth +sys_xqfnqnm +sys_xqfnroot +sys_xqformatnum +sys_xqftcontain +sys_xqfuncr +sys_xqgetcontent +sys_xqindxof +sys_xqinsert +sys_xqinspfx +sys_xqiri2uri +sys_xqlang +sys_xqllnmfrmqnm +sys_xqmknoderef +sys_xqnilled +sys_xqnodename +sys_xqnormspace +sys_xqnormucode +sys_xqnsp4pfx +sys_xqnspfrmqnm +sys_xqpfxfrmqnm +sys_xqpolyabs +sys_xqpolyadd +sys_xqpolycel +sys_xqpolycst +sys_xqpolycstbl +sys_xqpolydiv +sys_xqpolyflr +sys_xqpolymod +sys_xqpolymul +sys_xqpolyrnd +sys_xqpolysqrt +sys_xqpolysub +sys_xqpolyumus +sys_xqpolyupls +sys_xqpolyveq +sys_xqpolyvge +sys_xqpolyvgt +sys_xqpolyvle +sys_xqpolyvlt +sys_xqpolyvne +sys_xqref2val +sys_xqrename +sys_xqreplace +sys_xqresvuri +sys_xqrndhalf2evn +sys_xqrslvqnm +sys_xqryenvpget +sys_xqryvarget +sys_xqrywrp +sys_xqseq2con +sys_xqseq2con4xc +sys_xqseqdeepeq +sys_xqseqinsb +sys_xqseqrm +sys_xqseqrvs +sys_xqseqsub +sys_xqseqtypmatch +sys_xqstartswith +sys_xqstatburi +sys_xqstr2codep +sys_xqstrjoin +sys_xqsubstraft +sys_xqsubstrbef +sys_xqtokenize +sys_xqtreatas +sys_xqxform +sys_xsid_to_raw +sys_zmap_filter +sys_zmap_refresh +sysasm +sysaux +sysbackup +sysdate +sysdba +sysdg +sysguid +syskm +sysobj +sysoper +system +system_defined +systimestamp +table +table_lookup_by_nl +table_stats +tables +tablespace +tablespace_no +tabno +tag +tan +tanh +tape_asynch_io +tbl$or$idx$part$num +temp_table +temp_undo_enabled +tempfile +template +temporary +test +text +than +the +then +thread +threaded_execution +through +tier +ties +time +time_zone +timed_os_statistics +timed_statistics +timeout +times +timestamp +timezone_abbr +timezone_hour +timezone_minute +timezone_offset +timezone_region +tiv_gb +tiv_ssf +to_aclid +to_binary_double +to_binary_float +to_blob +to_char +to_clob +to_date +to_dsinterval +to_lob +to_multi_byte +to_nchar +to_nclob +to_number +to_single_byte +to_time +to_time_tz +to_timestamp +to_timestamp_tz +to_yminterval +toplevel +trace +trace_enabled +tracefile_identifier +tracing +tracking +trailing +transaction +transactions +transactions_per_rollback_segment +transform_distinct_agg +transition +transitional +translate +translation +treat +trigger +triggers +trim +true +trunc +truncate +trust +trusted +tuning +type +types +tz_offset +ub2 +uba +ucs2 +uid +unarchived +unbound +unbounded +unconditional +under +undo +undo_management +undo_retention +undo_tablespace +undrop +unified_audit_sga_queue_size +uniform +union +unique +unistr +unlimited +unload +unlock +unmatched +unnest +unnest_innerj_distinct_view +unnest_nosemij_nodistinctview +unnest_semij_view +unpacked +unpivot +unplug +unprotected +unquiesce +unrecoverable +unrestricted +unsubscribe +until +unusable +unused +upd_indexes +upd_joinindex +updatable +update +updated +updatexml +upgrade +upper +upsert +urowid +usable +usage +use +use_anti +use_concat +use_cube +use_dedicated_broker +use_hash +use_hash_aggregation +use_hash_gby_for_pushdown +use_hidden_partitions +use_indirect_data_buffers +use_invisible_indexes +use_large_pages +use_merge +use_merge_cartesian +use_nl +use_nl_with_index +use_private_outlines +use_semi +use_stored_outlines +use_ttt_for_gsets +use_vector_aggregation +use_weak_name_resl +user +user_data +user_defined +user_dump_dest +user_recyclebin +user_tablespaces +userenv +usergroup +users +using +using_no_expand +utf16be +utf16le +utf32 +utf8 +utl_file_dir +valid_time_end +validate +validation +value +values +var_pop +var_samp +varchar +varchar2 +variance +varray +varrays +varying +vector_read +vector_read_trace +vector_transform +vector_transform_dims +vector_transform_fact +verifier +verify +version +versioning +versions +versions_endscn +versions_endtime +versions_operation +versions_startscn +versions_starttime +versions_xid +view +violation +virtual +visibility +visible +volume +vsize +wait +wallet +week +weeks +wellformed +when +whenever +where +whitespace +width_bucket +with +with_plsql +within +without +work +workarea_size_policy +wrapped +wrapper +write +x_dyn_prune +xdb_fastpath_insert +xid +xml +xml2object +xml_db_events +xml_dml_rwt_stmt +xmlattributes +xmlcast +xmlcdata +xmlcolattval +xmlcomment +xmlconcat +xmldiff +xmlelement +xmlexists +xmlexists2 +xmlforest +xmlindex_rewrite +xmlindex_rewrite_in_select +xmlindex_sel_idx_tbl +xmlisnode +xmlisvalid +xmlnamespaces +xmlparse +xmlpatch +xmlpi +xmlquery +xmlqueryval +xmlroot +xmlschema +xmlserialize +xmltable +xmltransform +xmltransformblob +xmltype +xpathtable +xs_sys_context +year +years +yes +zone +zonemap diff --git a/tpt/setup/wordfile_18c.sql b/tpt/setup/wordfile_18c.sql new file mode 100644 index 0000000..e27de27 --- /dev/null +++ b/tpt/setup/wordfile_18c.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set lines 300 trimspool on pages 0 head off feedback off termout off + +SELECT DISTINCT name FROM ( + select lower(keyword) name from v$reserved_words union all + select upper(table_name) from dict union all + select upper(column_name) from dict_columns union all + -- select object_name from dba_objects union all + select upper(object_name||'.'||procedure_name) from dba_procedures union all + -- select '"'||table_name||'".'||column_name from dba_tab_columns union all + select ksppinm from x$ksppi union all + select name from v$sql_hint +) +WHERE length(name) > 2 +ORDER BY 1 +. + +spool wordfile_18c.txt +/ +spool off + + +-- you can also add TPT scripts by running this in TPT script dir: +-- find . -type f -name "*.sql" | sed 's/^\.\///' | awk '{ print "@" $1 }' >> ~/work/oracle/wordfile_18c.txt +-- or you could just run rlwrap sqlplus while being in the directory where the scripts are located!! diff --git a/tpt/setup/wordfile_18c.txt b/tpt/setup/wordfile_18c.txt new file mode 100644 index 0000000..7ad3c4c --- /dev/null +++ b/tpt/setup/wordfile_18c.txt @@ -0,0 +1,43329 @@ +ABORTED_REQUESTS +ABORTED_REQUEST_THRESHOLD +ABSOLUTE_FUZZY_CHANGE# +ABSTRACT_LOBS +ABS_FILE# +ACCEPT +ACCEPTED +ACCESSIBILITY +ACCESS_FROM_REMOTE +ACCESS_METHOD +ACCESS_PARAMETERS +ACCESS_PREDICATES +ACCESS_TIME +ACCESS_TYPE +ACCOUNT_STATUS +ACE_ORDER +ACKED_SCN +ACKNOWLEDGEMENT +ACKNOWLEDGEMENT_POSITION +ACKNOWLEGEMENT_POSITION +ACK_LATENCY +ACL +ACLID +ACL_MISMATCH +ACL_MVIEW_NAME +ACL_OWNER +ACL_STATUS +ACQUIRING +ACTION +ACTION# +ACTIONS +ACTION_ARGUMENT_1 +ACTION_ARGUMENT_2 +ACTION_ARGUMENT_3 +ACTION_ARGUMENT_4 +ACTION_ARGUMENT_5 +ACTION_ARGUMENT_COUNT +ACTION_CLAUSE +ACTION_DETAILS +ACTION_FUNCTION +ACTION_HASH +ACTION_ID +ACTION_MESSAGE_ID +ACTION_NAME +ACTION_SOURCE +ACTION_THRESHOLD +ACTION_TIME +ACTION_TYPE +ACTION_VAL +ACTIVATING_DBID +ACTIVATING_DBNAME +ACTIVATING_INSTANCE_NAME +ACTIVATING_INSTANCE_NUMBER +ACTIVATING_INSTANCE_SERIAL +ACTIVATING_PDBGUID +ACTIVATING_PDBID +ACTIVATING_PDBNAME +ACTIVATING_PDBUID +ACTIVATION# +ACTIVATION_LEVEL +ACTIVATION_TIME +ACTIVE +ACTIVEBLKS +ACTIVE_AGENTS +ACTIVE_ELEM_COUNT +ACTIVE_LISTENER +ACTIVE_SERVER_COUNT +ACTIVE_SESSIONS +ACTIVE_SESSIONS_KILLED +ACTIVE_SESSION_LIMIT_HIT +ACTIVE_SESS_KILLED +ACTIVE_SESS_LIMIT_HIT +ACTIVE_SESS_POOL_MTH +ACTIVE_SESS_POOL_P1 +ACTIVE_SHARDS +ACTIVE_SPEED +ACTIVE_STATE +ACTIVE_STATUS +ACTIVE_STAT_PERIOD +ACTIVE_TIME +ACTIVITY_COUNTER +ACTIVITY_ID +ACTIVITY_TRACKING +ACTIVITY_TYPE +ACTUAL +ACTUAL_ANALYSIS +ACTUAL_DOP +ACTUAL_DURATION +ACTUAL_MEM_USED +ACTUAL_PHYSICAL_READS +ACTUAL_REDO_BLKS +ACTUAL_REPAIR_TIME +ACTUAL_START_DATE +ACT_REPAIR_TIME +ADAPTIVE +ADAPTIVE_PLAN +ADDED_EXTENTS +ADDITIONAL_DELTA_PIECES +ADDITIONAL_EXECUTIONS +ADDITIONAL_IMCU_PIECES +ADDITIONAL_IMEU_PIECES +ADDITIONAL_INFO +ADDR +ADDRESS +ADD_AGENT_CERTIFICATE. +ADD_UNIQUE_KEY_PREFIX +ADMIN_NAME +ADMIN_OPT +ADMIN_OPTION +ADRALERT_VERSION +ADRDIR_VERSION +ADRID +ADRSCHMV_SUMMARY +ADRSCHM_VERSION +ADR_HOME +ADR_HOME_T.ADR_HOME_T +ADR_INCIDENT_T.ADD_CORRELATION_KEY +ADR_INCIDENT_T.BEGIN_UPDATE +ADR_INCIDENT_T.DUMP_INCFILE +ADR_INCIDENT_T.DUMP_INCFILE_RAW +ADR_INCIDENT_T.DUMP_INCIDENT +ADR_INCIDENT_T.DUMP_INCIDENT_RAW +ADR_INCIDENT_T.END_UPDATE +ADR_INCIDENT_T.GET_ID +ADR_INCIDENT_T.GET_INCIDENT_LOCATION +ADR_INCIDENT_T.REGISTER_FILE +ADR_PATH_IDX +ADVICE +ADVICE_DISABLED +ADVICE_STATUS +ADVISE_ID +ADVISOR +ADVISOR_ID +ADVISOR_METRIC1 +ADVISOR_NAME +ADVISOR_RUN_ID +ADVISOR_RUN_REASON +ADVISOR_RUN_TIME +AFFIRM +AFF_SWITCHES_BACK_IN +AFTER_FAST_REFRESH +AFTER_ROW +AFTER_STATEMENT +AGE +AGENT +AGENT_ID +AGENT_NAME +AGENT_TYPE +AGGRCENTROID.ODCIAGGREGATEINITIALIZE +AGGRCENTROID.ODCIAGGREGATEITERATE +AGGRCENTROID.ODCIAGGREGATEMERGE +AGGRCENTROID.ODCIAGGREGATETERMINATE +AGGRCONCAT.ODCIAGGREGATEINITIALIZE +AGGRCONCAT.ODCIAGGREGATEITERATE +AGGRCONCAT.ODCIAGGREGATEMERGE +AGGRCONCAT.ODCIAGGREGATETERMINATE +AGGRCONCAVEHULL.ODCIAGGREGATEINITIALIZE +AGGRCONCAVEHULL.ODCIAGGREGATEITERATE +AGGRCONCAVEHULL.ODCIAGGREGATEMERGE +AGGRCONCAVEHULL.ODCIAGGREGATETERMINATE +AGGRCONCAVEHULL.SDOAGGREGATEITERATE +AGGRCONVEXHULL.ODCIAGGREGATEINITIALIZE +AGGRCONVEXHULL.ODCIAGGREGATEITERATE +AGGRCONVEXHULL.ODCIAGGREGATEMERGE +AGGRCONVEXHULL.ODCIAGGREGATETERMINATE +AGGREGATE +AGGREGATE_CACHE_HITS +AGGREGATE_CACHE_MISSES +AGGREGATION_METHOD +AGGREGATION_TYPE +AGGRLRSCONCAT.ODCIAGGREGATEINITIALIZE +AGGRLRSCONCAT.ODCIAGGREGATEITERATE +AGGRLRSCONCAT.ODCIAGGREGATEMERGE +AGGRLRSCONCAT.ODCIAGGREGATETERMINATE +AGGRLRSCONCAT3D.ODCIAGGREGATEINITIALIZE +AGGRLRSCONCAT3D.ODCIAGGREGATEITERATE +AGGRLRSCONCAT3D.ODCIAGGREGATEMERGE +AGGRLRSCONCAT3D.ODCIAGGREGATETERMINATE +AGGRMBR.ODCIAGGREGATEINITIALIZE +AGGRMBR.ODCIAGGREGATEITERATE +AGGRMBR.ODCIAGGREGATEMERGE +AGGRMBR.ODCIAGGREGATETERMINATE +AGGRUNION.ODCIAGGREGATEINITIALIZE +AGGRUNION.ODCIAGGREGATEITERATE +AGGRUNION.ODCIAGGREGATEMERGE +AGGRUNION.ODCIAGGREGATETERMINATE +AGGRUNION.SDOAGGREGATEITERATE +AGGR_FUNCTION +AGGR_FUNC_CALCS +AGGR_FUNC_LOGICAL_NA +AGGR_FUNC_PRECOMPUTE +AGGXMLIMP.ODCIAGGREGATEINITIALIZE +AGGXMLIMP.ODCIAGGREGATEITERATE +AGGXMLIMP.ODCIAGGREGATEMERGE +AGGXMLIMP.ODCIAGGREGATETERMINATE +AGGXMLIMP.ODCIAGGREGATEWRAPCONTEXT +AGGXQAVGIMP.ODCIAGGREGATEINITIALIZE +AGGXQAVGIMP.ODCIAGGREGATEITERATE +AGGXQAVGIMP.ODCIAGGREGATEMERGE +AGGXQAVGIMP.ODCIAGGREGATETERMINATE +AGGXQAVGIMP.ODCIAGGREGATEWRAPCONTEXT +AGGXQIMP.ODCIAGGREGATEINITIALIZE +AGGXQIMP.ODCIAGGREGATEITERATE +AGGXQIMP.ODCIAGGREGATEMERGE +AGGXQIMP.ODCIAGGREGATETERMINATE +AGGXQIMP.ODCIAGGREGATEWRAPCONTEXT +AGGXQSUMIMP.ODCIAGGREGATEINITIALIZE +AGGXQSUMIMP.ODCIAGGREGATEITERATE +AGGXQSUMIMP.ODCIAGGREGATEMERGE +AGGXQSUMIMP.ODCIAGGREGATETERMINATE +AGGXQSUMIMP.ODCIAGGREGATEWRAPCONTEXT +AGG_COLUMN_NAME +AGG_FUNC +AGG_FUNCTION +ALERT_REASON_ID +ALGORITHM +ALGORITHM_COMPATIBILITY +ALGORITHM_DESCRIPTION +ALGORITHM_ID +ALGORITHM_METADATA +ALGORITHM_NAME +ALGORITHM_TYPE +ALIAS_DIRECTORY +ALIAS_INCARNATION +ALIAS_INDEX +ALIGNMENT +ALL$OLAP2_AWS +ALLOCATED +ALLOCATED_AVG +ALLOCATED_BYTES +ALLOCATED_LEN +ALLOCATED_MAT_MB +ALLOCATED_MAX +ALLOCATED_SIZE +ALLOCATED_SPACE +ALLOCATED_STDDEV +ALLOCATED_TOTAL +ALLOCATION_COUNT +ALLOCATION_TYPE +ALLOCATION_UNIT_SIZE +ALLOC_BYTES +ALLOC_CLASS +ALLOC_ELEM_COUNT +ALLOWED_AUTOMATED_SWITCHES +ALLOW_RUNS_IN_RESTRICTED_MODE +ALL_ALL_TABLES +ALL_ANALYTIC_VIEWS +ALL_ANALYTIC_VIEW_ATTR_CLASS +ALL_ANALYTIC_VIEW_BASE_MEAS +ALL_ANALYTIC_VIEW_CALC_MEAS +ALL_ANALYTIC_VIEW_CLASS +ALL_ANALYTIC_VIEW_COLUMNS +ALL_ANALYTIC_VIEW_DIMENSIONS +ALL_ANALYTIC_VIEW_DIM_CLASS +ALL_ANALYTIC_VIEW_HIERS +ALL_ANALYTIC_VIEW_HIER_CLASS +ALL_ANALYTIC_VIEW_KEYS +ALL_ANALYTIC_VIEW_LEVELS +ALL_ANALYTIC_VIEW_LEVEL_CLASS +ALL_ANALYTIC_VIEW_LVLGRPS +ALL_ANALYTIC_VIEW_MEAS_CLASS +ALL_APPLY +ALL_APPLY_CHANGE_HANDLERS +ALL_APPLY_CONFLICT_COLUMNS +ALL_APPLY_DML_CONF_COLUMNS +ALL_APPLY_DML_CONF_HANDLERS +ALL_APPLY_DML_HANDLERS +ALL_APPLY_ENQUEUE +ALL_APPLY_ERROR +ALL_APPLY_ERROR_MESSAGES +ALL_APPLY_EXECUTE +ALL_APPLY_HANDLE_COLLISIONS +ALL_APPLY_INSTANTIATED_GLOBAL +ALL_APPLY_INSTANTIATED_OBJECTS +ALL_APPLY_INSTANTIATED_SCHEMAS +ALL_APPLY_KEY_COLUMNS +ALL_APPLY_PARAMETERS +ALL_APPLY_PROGRESS +ALL_APPLY_REPERROR_HANDLERS +ALL_APPLY_SPILL_TXN +ALL_APPLY_TABLE_COLUMNS +ALL_ARGUMENTS +ALL_ASSEMBLIES +ALL_ASSOCIATIONS +ALL_ATTRIBUTE_DIMENSIONS +ALL_ATTRIBUTE_DIM_ATTRS +ALL_ATTRIBUTE_DIM_ATTR_CLASS +ALL_ATTRIBUTE_DIM_CLASS +ALL_ATTRIBUTE_DIM_JOIN_PATHS +ALL_ATTRIBUTE_DIM_KEYS +ALL_ATTRIBUTE_DIM_LEVELS +ALL_ATTRIBUTE_DIM_LEVEL_ATTRS +ALL_ATTRIBUTE_DIM_LVL_CLASS +ALL_ATTRIBUTE_DIM_ORDER_ATTRS +ALL_ATTRIBUTE_DIM_TABLES +ALL_ATTRIBUTE_TRANSFORMATIONS +ALL_AUDITED_SYSTEM_ACTIONS +ALL_AUDIT_POLICIES +ALL_AUDIT_POLICY_COLUMNS +ALL_AWS +ALL_AW_AC +ALL_AW_AC_10G +ALL_AW_OBJ +ALL_AW_PROP +ALL_AW_PROP_NAME +ALL_AW_PS +ALL_BASE_TABLE_MVIEWS +ALL_CAPTURE +ALL_CAPTURE_EXTRA_ATTRIBUTES +ALL_CAPTURE_PARAMETERS +ALL_CAPTURE_PREPARED_DATABASE +ALL_CAPTURE_PREPARED_SCHEMAS +ALL_CAPTURE_PREPARED_TABLES +ALL_CATALOG +ALL_CLUSTERING_DIMENSIONS +ALL_CLUSTERING_JOINS +ALL_CLUSTERING_KEYS +ALL_CLUSTERING_TABLES +ALL_CLUSTERS +ALL_CLUSTER_HASH_EXPRESSIONS +ALL_CODE_ROLE_PRIVS +ALL_COLL_TYPES +ALL_COLUMN +ALL_COL_COMMENTS +ALL_COL_PENDING_STATS +ALL_COL_PRIVS +ALL_COL_PRIVS_MADE +ALL_COL_PRIVS_RECD +ALL_COMPARISON_SCAN_SUMMARY +ALL_CONSTRAINTS +ALL_CONS_COLUMNS +ALL_CONS_OBJ_COLUMNS +ALL_CONTAINERS +ALL_CONTEXT +ALL_CREDENTIALS +ALL_CUBES +ALL_CUBE_ATTRIBUTES +ALL_CUBE_ATTR_MAPPINGS +ALL_CUBE_ATTR_UNIQUE_KEYS +ALL_CUBE_ATTR_VISIBILITY +ALL_CUBE_BUILD_PROCESSES +ALL_CUBE_CALCULATED_MEMBERS +ALL_CUBE_CLASSIFICATIONS +ALL_CUBE_DEPENDENCIES +ALL_CUBE_DESCRIPTIONS +ALL_CUBE_DIMENSIONALITY +ALL_CUBE_DIMENSIONS +ALL_CUBE_DIMNL_MAPPINGS +ALL_CUBE_DIM_LEVELS +ALL_CUBE_DIM_MAPPINGS +ALL_CUBE_DIM_MODELS +ALL_CUBE_DIM_VIEWS +ALL_CUBE_DIM_VIEW_COLUMNS +ALL_CUBE_HIERARCHIES +ALL_CUBE_HIER_LEVELS +ALL_CUBE_HIER_VIEWS +ALL_CUBE_HIER_VIEW_COLUMNS +ALL_CUBE_MAPPINGS +ALL_CUBE_MEASURES +ALL_CUBE_MEAS_MAPPINGS +ALL_CUBE_NAMED_BUILD_SPECS +ALL_CUBE_VIEWS +ALL_CUBE_VIEW_COLUMNS +ALL_DB_LINKS +ALL_DEF_AUDIT_OPTS +ALL_DEPENDENCIES +ALL_DEQUEUE_QUEUES +ALL_DIMENSIONS +ALL_DIM_ATTRIBUTES +ALL_DIM_CHILD_OF +ALL_DIM_HIERARCHIES +ALL_DIM_JOIN_KEY +ALL_DIM_LEVELS +ALL_DIM_LEVEL_KEY +ALL_DIRECTORIES +ALL_EDITIONING_VIEWS +ALL_EDITIONING_VIEWS_AE +ALL_EDITIONING_VIEW_COLS +ALL_EDITIONING_VIEW_COLS_AE +ALL_EDITIONS +ALL_EDITION_COMMENTS +ALL_EMON_SERVERS +ALL_ENCRYPTED_COLUMNS +ALL_ERRORS +ALL_ERRORS_AE +ALL_ERROR_TRANSLATIONS +ALL_EVALUATION_CONTEXTS +ALL_EVALUATION_CONTEXT_TABLES +ALL_EVALUATION_CONTEXT_VARS +ALL_EXPRESSION_STATISTICS +ALL_EXTERNAL_LOCATIONS +ALL_EXTERNAL_TABLES +ALL_FILE_GROUPS +ALL_FILE_GROUP_EXPORT_INFO +ALL_FILE_GROUP_FILES +ALL_FILE_GROUP_TABLES +ALL_FILE_GROUP_TABLESPACES +ALL_FILE_GROUP_VERSIONS +ALL_GG_AUTO_CDR_COLUMNS +ALL_GG_AUTO_CDR_COLUMN_GROUPS +ALL_GG_AUTO_CDR_TABLES +ALL_GOLDENGATE_CONTAINER_RULES +ALL_GOLDENGATE_INBOUND +ALL_GOLDENGATE_PRIVILEGES +ALL_GOLDENGATE_RULES +ALL_HEAT_MAP_SEGMENT +ALL_HEAT_MAP_SEG_HISTOGRAM +ALL_HIERARCHIES +ALL_HIER_CLASS +ALL_HIER_COLUMNS +ALL_HIER_HIER_ATTRIBUTES +ALL_HIER_HIER_ATTR_CLASS +ALL_HIER_JOIN_PATHS +ALL_HIER_LEVELS +ALL_HIER_LEVEL_ID_ATTRS +ALL_HISTOGRAMS +ALL_HIVE_COLUMNS +ALL_HIVE_DATABASES +ALL_HIVE_PART_KEY_COLUMNS +ALL_HIVE_TABLES +ALL_HIVE_TAB_PARTITIONS +ALL_IDENTIFIERS +ALL_INDEXES +ALL_INDEXTYPES +ALL_INDEXTYPE_ARRAYTYPES +ALL_INDEXTYPE_COMMENTS +ALL_INDEXTYPE_OPERATORS +ALL_IND_COLUMNS +ALL_IND_COLUMNS_V$ +ALL_IND_EXPRESSIONS +ALL_IND_PARTITIONS +ALL_IND_PENDING_STATS +ALL_IND_STATISTICS +ALL_IND_SUBPARTITIONS +ALL_INTERNAL_TRIGGERS +ALL_INT_DEQUEUE_QUEUES +ALL_JAVA_ARGUMENTS +ALL_JAVA_CLASSES +ALL_JAVA_COMPILER_OPTIONS +ALL_JAVA_DERIVATIONS +ALL_JAVA_FIELDS +ALL_JAVA_IMPLEMENTS +ALL_JAVA_INNERS +ALL_JAVA_LAYOUTS +ALL_JAVA_METHODS +ALL_JAVA_NCOMPS +ALL_JAVA_RESOLVERS +ALL_JAVA_THROWS +ALL_JOBS +ALL_JOIN_IND_COLUMNS +ALL_JSON_COLUMNS +ALL_JSON_DATAGUIDES +ALL_JSON_DATAGUIDE_FIELDS +ALL_LIBRARIES +ALL_LOBS +ALL_LOB_PARTITIONS +ALL_LOB_SUBPARTITIONS +ALL_LOB_TEMPLATES +ALL_LOG_GROUPS +ALL_LOG_GROUP_COLUMNS +ALL_MEASURE_FOLDERS +ALL_MEASURE_FOLDER_CONTENTS +ALL_MEASURE_FOLDER_SUBFOLDERS +ALL_MEMBER_CAPTION +ALL_MEMBER_DESCRIPTION +ALL_MEMBER_NAME +ALL_METADATA_PROPERTIES +ALL_METHOD_PARAMS +ALL_METHOD_RESULTS +ALL_MINING_ALGORITHMS +ALL_MINING_MODELS +ALL_MINING_MODEL_ATTRIBUTES +ALL_MINING_MODEL_PARTITIONS +ALL_MINING_MODEL_SETTINGS +ALL_MINING_MODEL_VIEWS +ALL_MINING_MODEL_XFORMS +ALL_MVIEWS +ALL_MVIEW_AGGREGATES +ALL_MVIEW_ANALYSIS +ALL_MVIEW_COMMENTS +ALL_MVIEW_DETAIL_PARTITION +ALL_MVIEW_DETAIL_RELATIONS +ALL_MVIEW_DETAIL_SUBPARTITION +ALL_MVIEW_JOINS +ALL_MVIEW_KEYS +ALL_MVIEW_LOGS +ALL_MVIEW_REFRESH_TIMES +ALL_NESTED_TABLES +ALL_NESTED_TABLE_COLS +ALL_OBJECTS +ALL_OBJECTS_AE +ALL_OBJECT_TABLES +ALL_OBJ_COLATTRS +ALL_OLAP2_AWS +ALL_OPANCILLARY +ALL_OPARGUMENTS +ALL_OPBINDINGS +ALL_OPERATORS +ALL_OPERATOR_COMMENTS +ALL_OUTLINES +ALL_OUTLINE_HINTS +ALL_PARTIAL_DROP_TABS +ALL_PART_COL_STATISTICS +ALL_PART_HISTOGRAMS +ALL_PART_INDEXES +ALL_PART_KEY_COLUMNS +ALL_PART_KEY_COLUMNS_V$ +ALL_PART_LOBS +ALL_PART_TABLES +ALL_PENDING_CONV_TABLES +ALL_PLSQL_COLL_TYPES +ALL_PLSQL_OBJECT_SETTINGS +ALL_PLSQL_TYPES +ALL_PLSQL_TYPE_ATTRS +ALL_POLICIES +ALL_POLICY_ATTRIBUTES +ALL_POLICY_CONTEXTS +ALL_POLICY_GROUPS +ALL_PROBE_OBJECTS +ALL_PROCEDURES +ALL_PROPAGATION +ALL_QUALIFIERS +ALL_QUEUES +ALL_QUEUE_PUBLISHERS +ALL_QUEUE_SCHEDULES +ALL_QUEUE_SUBSCRIBERS +ALL_QUEUE_TABLES +ALL_REFRESH +ALL_REFRESH_CHILDREN +ALL_REFRESH_DEPENDENCIES +ALL_REFS +ALL_REGISTERED_MVIEWS +ALL_REGISTERED_SNAPSHOTS +ALL_REGISTRY_BANNERS +ALL_REPLICATION_PROCESS_EVENTS +ALL_REPL_DBNAME_MAPPING +ALL_REWRITE_EQUIVALENCES +ALL_ROWS +ALL_RULES +ALL_RULESETS +ALL_RULE_SETS +ALL_RULE_SET_RULES +ALL_SCHEDULER_CHAINS +ALL_SCHEDULER_CHAIN_RULES +ALL_SCHEDULER_CHAIN_STEPS +ALL_SCHEDULER_CREDENTIALS +ALL_SCHEDULER_DB_DESTS +ALL_SCHEDULER_DESTS +ALL_SCHEDULER_EXTERNAL_DESTS +ALL_SCHEDULER_FILE_WATCHERS +ALL_SCHEDULER_GLOBAL_ATTRIBUTE +ALL_SCHEDULER_GROUPS +ALL_SCHEDULER_GROUP_MEMBERS +ALL_SCHEDULER_INCOMPATS +ALL_SCHEDULER_INCOMPAT_MEMBER +ALL_SCHEDULER_JOBS +ALL_SCHEDULER_JOB_ARGS +ALL_SCHEDULER_JOB_CLASSES +ALL_SCHEDULER_JOB_DESTS +ALL_SCHEDULER_JOB_LOG +ALL_SCHEDULER_JOB_RUN_DETAILS +ALL_SCHEDULER_NOTIFICATIONS +ALL_SCHEDULER_PROGRAMS +ALL_SCHEDULER_PROGRAM_ARGS +ALL_SCHEDULER_REMOTE_DATABASES +ALL_SCHEDULER_REMOTE_JOBSTATE +ALL_SCHEDULER_RESOURCES +ALL_SCHEDULER_RSC_CONSTRAINTS +ALL_SCHEDULER_RUNNING_CHAINS +ALL_SCHEDULER_SCHEDULES +ALL_SCHEDULER_WINDOWS +ALL_SCHEDULER_WINDOW_DETAILS +ALL_SCHEDULER_WINDOW_GROUPS +ALL_SCHEDULER_WINDOW_LOG +ALL_SCHEDULER_WINGROUP_MEMBERS +ALL_SECONDARY_OBJECTS +ALL_SEC_RELEVANT_COLS +ALL_SEQUENCES +ALL_SERVICES +ALL_SHARD +ALL_SNAPSHOTS +ALL_SNAPSHOT_LOGS +ALL_SNAPSHOT_REFRESH_TIMES +ALL_SOURCE +ALL_SOURCE_AE +ALL_SQLJ_TYPES +ALL_SQLJ_TYPE_ATTRS +ALL_SQLJ_TYPE_METHODS +ALL_SQLSET +ALL_SQLSET_BINDS +ALL_SQLSET_PLANS +ALL_SQLSET_REFERENCES +ALL_SQLSET_STATEMENTS +ALL_SQL_TRANSLATIONS +ALL_SQL_TRANSLATION_PROFILES +ALL_STATEMENTS +ALL_STAT_EXTENSIONS +ALL_STORED_SETTINGS +ALL_STREAMS_COLUMNS +ALL_STREAMS_GLOBAL_RULES +ALL_STREAMS_KEEP_COLUMNS +ALL_STREAMS_MESSAGE_CONSUMERS +ALL_STREAMS_MESSAGE_RULES +ALL_STREAMS_NEWLY_SUPPORTED +ALL_STREAMS_RULES +ALL_STREAMS_SCHEMA_RULES +ALL_STREAMS_TABLE_RULES +ALL_STREAMS_TRANSFORMATIONS +ALL_STREAMS_TRANSFORM_FUNCTION +ALL_STREAMS_UNSUPPORTED +ALL_SUBPARTITION_TEMPLATES +ALL_SUBPART_COL_STATISTICS +ALL_SUBPART_HISTOGRAMS +ALL_SUBPART_KEY_COLUMNS +ALL_SUBPART_KEY_COLUMNS_V$ +ALL_SUMDELTA +ALL_SUMMAP +ALL_SUMMARIES +ALL_SYNC_CAPTURE +ALL_SYNC_CAPTURE_PREPARED_TABS +ALL_SYNC_CAPTURE_TABLES +ALL_SYNONYMS +ALL_TABLES +ALL_TAB_COLS +ALL_TAB_COLS_V$ +ALL_TAB_COLUMNS +ALL_TAB_COL_STATISTICS +ALL_TAB_COMMENTS +ALL_TAB_HISTGRM_PENDING_STATS +ALL_TAB_HISTOGRAMS +ALL_TAB_IDENTITY_COLS +ALL_TAB_MODIFICATIONS +ALL_TAB_PARTITIONS +ALL_TAB_PENDING_STATS +ALL_TAB_PRIVS +ALL_TAB_PRIVS_MADE +ALL_TAB_PRIVS_RECD +ALL_TAB_STATISTICS +ALL_TAB_STATS_HISTORY +ALL_TAB_STAT_PREFS +ALL_TAB_SUBPARTITIONS +ALL_TRANSFORMATIONS +ALL_TRIGGERS +ALL_TRIGGER_COLS +ALL_TRIGGER_ORDERING +ALL_TSTZ_TABLES +ALL_TSTZ_TAB_COLS +ALL_TYPES +ALL_TYPE_ATTRS +ALL_TYPE_METHODS +ALL_TYPE_VERSIONS +ALL_UNUSED_COL_TABS +ALL_UPDATABLE_COLUMNS +ALL_USERS +ALL_USTATS +ALL_VARRAYS +ALL_VIEWS +ALL_VIEWS_AE +ALL_WARNING_SETTINGS +ALL_XDS_ACL_REFRESH +ALL_XDS_ACL_REFSTAT +ALL_XDS_LATEST_ACL_REFSTAT +ALL_XMLTYPE_COLS +ALL_XML_INDEXES +ALL_XML_NESTED_TABLES +ALL_XML_OUT_OF_LINE_TABLES +ALL_XML_SCHEMAS +ALL_XML_SCHEMAS2 +ALL_XML_SCHEMA_ATTRIBUTES +ALL_XML_SCHEMA_COMPLEX_TYPES +ALL_XML_SCHEMA_ELEMENTS +ALL_XML_SCHEMA_NAMESPACES +ALL_XML_SCHEMA_SIMPLE_TYPES +ALL_XML_SCHEMA_SUBSTGRP_HEAD +ALL_XML_SCHEMA_SUBSTGRP_MBRS +ALL_XML_TABLES +ALL_XML_TAB_COLS +ALL_XML_VIEWS +ALL_XML_VIEW_COLS +ALL_XSTREAM_ADMINISTRATOR +ALL_XSTREAM_INBOUND +ALL_XSTREAM_OUTBOUND +ALL_XSTREAM_OUT_SUPPORT_MODE +ALL_XSTREAM_RULES +ALL_XSTREAM_TRANSFORMATIONS +ALL_XS_ACES +ALL_XS_ACLS +ALL_XS_ACL_PARAMETERS +ALL_XS_APPLICABLE_OBJECTS +ALL_XS_APPLIED_POLICIES +ALL_XS_COLUMN_CONSTRAINTS +ALL_XS_IMPLIED_PRIVILEGES +ALL_XS_INHERITED_REALMS +ALL_XS_POLICIES +ALL_XS_PRIVILEGES +ALL_XS_REALM_CONSTRAINTS +ALL_XS_SECURITY_CLASSES +ALL_XS_SECURITY_CLASS_DEP +ALL_XTERNAL_LOC_PARTITIONS +ALL_XTERNAL_LOC_SUBPARTITIONS +ALL_XTERNAL_PART_TABLES +ALL_XTERNAL_TAB_PARTITIONS +ALL_XTERNAL_TAB_SUBPARTITIONS +ALL_XT_HIVE_TABLES_VALIDATION +ALL_ZONEMAPS +ALL_ZONEMAP_MEASURES +ALT +ALTERNATE +ALWAYS +AMGT$DATAPUMP. +AMGT$DATAPUMP.INSTANCE_CALLOUT_IMP +ANALYSIS_VERSION +ANALYTIC +ANALYTIC_VIEW_NAME +AND_EQUAL +ANNOTATION_STATUS +ANSI_REARCH +ANSWER_QUERY_USING_STATS +ANTIJOIN +ANYDATA.ACCESSBDOUBLE +ANYDATA.ACCESSBFILE +ANYDATA.ACCESSBFLOAT +ANYDATA.ACCESSBLOB +ANYDATA.ACCESSCHAR +ANYDATA.ACCESSCLOB +ANYDATA.ACCESSDATE +ANYDATA.ACCESSINTERVALDS +ANYDATA.ACCESSINTERVALYM +ANYDATA.ACCESSNCHAR +ANYDATA.ACCESSNCLOB +ANYDATA.ACCESSNUMBER +ANYDATA.ACCESSNVARCHAR2 +ANYDATA.ACCESSRAW +ANYDATA.ACCESSTIMESTAMP +ANYDATA.ACCESSTIMESTAMPLTZ +ANYDATA.ACCESSTIMESTAMPTZ +ANYDATA.ACCESSUROWID +ANYDATA.ACCESSVARCHAR +ANYDATA.ACCESSVARCHAR2 +ANYDATA.BEGINCREATE +ANYDATA.CONVERTBDOUBLE +ANYDATA.CONVERTBFILE +ANYDATA.CONVERTBFLOAT +ANYDATA.CONVERTBLOB +ANYDATA.CONVERTCHAR +ANYDATA.CONVERTCLOB +ANYDATA.CONVERTCOLLECTION +ANYDATA.CONVERTDATE +ANYDATA.CONVERTINTERVALDS +ANYDATA.CONVERTINTERVALYM +ANYDATA.CONVERTNCHAR +ANYDATA.CONVERTNCLOB +ANYDATA.CONVERTNUMBER +ANYDATA.CONVERTNVARCHAR2 +ANYDATA.CONVERTOBJECT +ANYDATA.CONVERTRAW +ANYDATA.CONVERTREF +ANYDATA.CONVERTTIMESTAMP +ANYDATA.CONVERTTIMESTAMPLTZ +ANYDATA.CONVERTTIMESTAMPTZ +ANYDATA.CONVERTUROWID +ANYDATA.CONVERTVARCHAR +ANYDATA.CONVERTVARCHAR2 +ANYDATA.ENDCREATE +ANYDATA.GETBDOUBLE +ANYDATA.GETBFILE +ANYDATA.GETBFLOAT +ANYDATA.GETBLOB +ANYDATA.GETCHAR +ANYDATA.GETCLOB +ANYDATA.GETCOLLECTION +ANYDATA.GETDATE +ANYDATA.GETINTERVALDS +ANYDATA.GETINTERVALYM +ANYDATA.GETNCHAR +ANYDATA.GETNCLOB +ANYDATA.GETNUMBER +ANYDATA.GETNVARCHAR2 +ANYDATA.GETOBJECT +ANYDATA.GETRAW +ANYDATA.GETREF +ANYDATA.GETTIMESTAMP +ANYDATA.GETTIMESTAMPLTZ +ANYDATA.GETTIMESTAMPTZ +ANYDATA.GETTYPE +ANYDATA.GETTYPENAME +ANYDATA.GETVARCHAR +ANYDATA.GETVARCHAR2 +ANYDATA.PIECEWISE +ANYDATA.SETBDOUBLE +ANYDATA.SETBFILE +ANYDATA.SETBFLOAT +ANYDATA.SETBLOB +ANYDATA.SETCHAR +ANYDATA.SETCLOB +ANYDATA.SETCOLLECTION +ANYDATA.SETDATE +ANYDATA.SETINTERVALDS +ANYDATA.SETINTERVALYM +ANYDATA.SETNCHAR +ANYDATA.SETNCLOB +ANYDATA.SETNUMBER +ANYDATA.SETNVARCHAR2 +ANYDATA.SETOBJECT +ANYDATA.SETRAW +ANYDATA.SETREF +ANYDATA.SETTIMESTAMP +ANYDATA.SETTIMESTAMPLTZ +ANYDATA.SETTIMESTAMPTZ +ANYDATA.SETVARCHAR +ANYDATA.SETVARCHAR2 +ANYDATASET.ADDINSTANCE +ANYDATASET.BEGINCREATE +ANYDATASET.ENDCREATE +ANYDATASET.GETBDOUBLE +ANYDATASET.GETBFILE +ANYDATASET.GETBFLOAT +ANYDATASET.GETBLOB +ANYDATASET.GETCHAR +ANYDATASET.GETCLOB +ANYDATASET.GETCOLLECTION +ANYDATASET.GETCOUNT +ANYDATASET.GETDATE +ANYDATASET.GETINSTANCE +ANYDATASET.GETINTERVALDS +ANYDATASET.GETINTERVALYM +ANYDATASET.GETNCHAR +ANYDATASET.GETNCLOB +ANYDATASET.GETNUMBER +ANYDATASET.GETNVARCHAR2 +ANYDATASET.GETOBJECT +ANYDATASET.GETRAW +ANYDATASET.GETREF +ANYDATASET.GETTIMESTAMP +ANYDATASET.GETTIMESTAMPLTZ +ANYDATASET.GETTIMESTAMPTZ +ANYDATASET.GETTYPE +ANYDATASET.GETTYPENAME +ANYDATASET.GETUROWID +ANYDATASET.GETVARCHAR +ANYDATASET.GETVARCHAR2 +ANYDATASET.PIECEWISE +ANYDATASET.SETBDOUBLE +ANYDATASET.SETBFILE +ANYDATASET.SETBFLOAT +ANYDATASET.SETBLOB +ANYDATASET.SETCHAR +ANYDATASET.SETCLOB +ANYDATASET.SETCOLLECTION +ANYDATASET.SETDATE +ANYDATASET.SETINTERVALDS +ANYDATASET.SETINTERVALYM +ANYDATASET.SETNCHAR +ANYDATASET.SETNCLOB +ANYDATASET.SETNUMBER +ANYDATASET.SETNVARCHAR2 +ANYDATASET.SETOBJECT +ANYDATASET.SETRAW +ANYDATASET.SETREF +ANYDATASET.SETTIMESTAMP +ANYDATASET.SETTIMESTAMPLTZ +ANYDATASET.SETTIMESTAMPTZ +ANYDATASET.SETUROWID +ANYDATASET.SETVARCHAR +ANYDATASET.SETVARCHAR2 +ANYDATA_TRANSFORMATION +ANYDATA_VALUE +ANYSCHEMA +ANYTYPE.ADDATTR +ANYTYPE.BEGINCREATE +ANYTYPE.ENDCREATE +ANYTYPE.GETATTRELEMINFO +ANYTYPE.GETINFO +ANYTYPE.GETPERSISTENT +ANYTYPE.SETINFO +ANY_CONTEXT +APPEND +APPEND_VALUES +APPLICATION +APPLICATION_CLONE +APPLICATION_CONTEXTS +APPLICATION_PDB +APPLICATION_ROOT +APPLICATION_ROOT_CLONE +APPLICATION_ROOT_CON_ID +APPLICATION_SEED +APPLICATION_WAIT_TIME +APPLIED +APPLIED_HIGH_POSITION +APPLIED_LOW_POSITION +APPLIED_LOW_SCN +APPLIED_MESSAGE_CREATE_TIME +APPLIED_MESSAGE_NUMBER +APPLIED_SCN +APPLIED_SEQ# +APPLIED_SEQUENCE# +APPLIED_STATE +APPLIED_THREAD# +APPLIED_TIME +APPLY# +APPLY_BYTES_SENT +APPLY_CAPTURED +APPLY_CROSSEDITION_TRIGGER +APPLY_DATABASE_LINK +APPLY_DBLINK +APPLY_DONE +APPLY_MESSAGES_SENT +APPLY_NAME +APPLY_REASON +APPLY_SEQNO +APPLY_SERVER_ONLY +APPLY_STATUS +APPLY_TAG +APPLY_TIME +APPLY_USER +APPLY_VERSION +APP_CAPTURE_MODULE +APP_CAPTURE_SERVICE +APP_ID +APP_IMPLICIT +APP_IO_BYTES_AVG +APP_IO_BYTES_SUM +APP_IO_BYTES_SUMX2 +APP_IO_LATENCY_AVG +APP_IO_LATENCY_SUM +APP_IO_LATENCY_SUMX2 +APP_IO_REQUESTS_AVG +APP_IO_REQUESTS_SUM +APP_IO_REQUESTS_SUMX2 +APP_NAME +APP_STATEMENT +APP_STATUS +APP_VERSION +APP_VERSION_CHECKSUM +APP_VERSION_COMMENT +APS_VALIDATE. +APWAIT_DELTA +APWAIT_TOTAL +AQ$_GET_SUBSCRIBERS. +AQ$_JMS_BYTES_MESSAGE.CLEAN +AQ$_JMS_BYTES_MESSAGE.CLEAN_ALL +AQ$_JMS_BYTES_MESSAGE.CLEAR_BODY +AQ$_JMS_BYTES_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_BYTES_MESSAGE.CONSTRUCT +AQ$_JMS_BYTES_MESSAGE.FLUSH +AQ$_JMS_BYTES_MESSAGE.GET_APPID +AQ$_JMS_BYTES_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_BYTES +AQ$_JMS_BYTES_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_EXCEPTION +AQ$_JMS_BYTES_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_GROUPID +AQ$_JMS_BYTES_MESSAGE.GET_GROUPSEQ +AQ$_JMS_BYTES_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_MODE +AQ$_JMS_BYTES_MESSAGE.GET_REPLYTO +AQ$_JMS_BYTES_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_BYTES_MESSAGE.GET_TYPE +AQ$_JMS_BYTES_MESSAGE.GET_USERID +AQ$_JMS_BYTES_MESSAGE.PREPARE +AQ$_JMS_BYTES_MESSAGE.READ_BOOLEAN +AQ$_JMS_BYTES_MESSAGE.READ_BYTE +AQ$_JMS_BYTES_MESSAGE.READ_BYTES +AQ$_JMS_BYTES_MESSAGE.READ_CHAR +AQ$_JMS_BYTES_MESSAGE.READ_DOUBLE +AQ$_JMS_BYTES_MESSAGE.READ_FLOAT +AQ$_JMS_BYTES_MESSAGE.READ_INT +AQ$_JMS_BYTES_MESSAGE.READ_LONG +AQ$_JMS_BYTES_MESSAGE.READ_SHORT +AQ$_JMS_BYTES_MESSAGE.READ_UNSIGNED_BYTE +AQ$_JMS_BYTES_MESSAGE.READ_UNSIGNED_SHORT +AQ$_JMS_BYTES_MESSAGE.READ_UTF +AQ$_JMS_BYTES_MESSAGE.RESET +AQ$_JMS_BYTES_MESSAGE.SET_APPID +AQ$_JMS_BYTES_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_BYTES +AQ$_JMS_BYTES_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_GROUPID +AQ$_JMS_BYTES_MESSAGE.SET_GROUPSEQ +AQ$_JMS_BYTES_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_REPLYTO +AQ$_JMS_BYTES_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_BYTES_MESSAGE.SET_TYPE +AQ$_JMS_BYTES_MESSAGE.SET_USERID +AQ$_JMS_BYTES_MESSAGE.WRITE_BOOLEAN +AQ$_JMS_BYTES_MESSAGE.WRITE_BYTE +AQ$_JMS_BYTES_MESSAGE.WRITE_BYTES +AQ$_JMS_BYTES_MESSAGE.WRITE_CHAR +AQ$_JMS_BYTES_MESSAGE.WRITE_DOUBLE +AQ$_JMS_BYTES_MESSAGE.WRITE_FLOAT +AQ$_JMS_BYTES_MESSAGE.WRITE_INT +AQ$_JMS_BYTES_MESSAGE.WRITE_LONG +AQ$_JMS_BYTES_MESSAGE.WRITE_SHORT +AQ$_JMS_BYTES_MESSAGE.WRITE_UTF +AQ$_JMS_HEADER.CLEAR_PROPERTIES +AQ$_JMS_HEADER.GET_APPID +AQ$_JMS_HEADER.GET_BOOLEAN_PROPERTY +AQ$_JMS_HEADER.GET_BOOLEAN_PROPERTY_AS_INT +AQ$_JMS_HEADER.GET_BYTE_PROPERTY +AQ$_JMS_HEADER.GET_DOUBLE_PROPERTY +AQ$_JMS_HEADER.GET_FLOAT_PROPERTY +AQ$_JMS_HEADER.GET_GROUPID +AQ$_JMS_HEADER.GET_GROUPSEQ +AQ$_JMS_HEADER.GET_INT_PROPERTY +AQ$_JMS_HEADER.GET_LONG_PROPERTY +AQ$_JMS_HEADER.GET_REPLYTO +AQ$_JMS_HEADER.GET_SHORT_PROPERTY +AQ$_JMS_HEADER.GET_STRING_PROPERTY +AQ$_JMS_HEADER.GET_TYPE +AQ$_JMS_HEADER.GET_USERID +AQ$_JMS_HEADER.LOOKUP_PROPERTY_NAME +AQ$_JMS_HEADER.SET_APPID +AQ$_JMS_HEADER.SET_BOOLEAN_PROPERTY +AQ$_JMS_HEADER.SET_BYTE_PROPERTY +AQ$_JMS_HEADER.SET_DOUBLE_PROPERTY +AQ$_JMS_HEADER.SET_FLOAT_PROPERTY +AQ$_JMS_HEADER.SET_GROUPID +AQ$_JMS_HEADER.SET_GROUPSEQ +AQ$_JMS_HEADER.SET_INT_PROPERTY +AQ$_JMS_HEADER.SET_LONG_PROPERTY +AQ$_JMS_HEADER.SET_REPLYTO +AQ$_JMS_HEADER.SET_SHORT_PROPERTY +AQ$_JMS_HEADER.SET_STRING_PROPERTY +AQ$_JMS_HEADER.SET_TYPE +AQ$_JMS_HEADER.SET_USERID +AQ$_JMS_MAP_MESSAGE.CLEAN +AQ$_JMS_MAP_MESSAGE.CLEAN_ALL +AQ$_JMS_MAP_MESSAGE.CLEAR_BODY +AQ$_JMS_MAP_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_MAP_MESSAGE.CONSTRUCT +AQ$_JMS_MAP_MESSAGE.FLUSH +AQ$_JMS_MAP_MESSAGE.GET_APPID +AQ$_JMS_MAP_MESSAGE.GET_BOOLEAN +AQ$_JMS_MAP_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_BYTE +AQ$_JMS_MAP_MESSAGE.GET_BYTES +AQ$_JMS_MAP_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_CHAR +AQ$_JMS_MAP_MESSAGE.GET_DOUBLE +AQ$_JMS_MAP_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_EXCEPTION +AQ$_JMS_MAP_MESSAGE.GET_FLOAT +AQ$_JMS_MAP_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_GROUPID +AQ$_JMS_MAP_MESSAGE.GET_GROUPSEQ +AQ$_JMS_MAP_MESSAGE.GET_INT +AQ$_JMS_MAP_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_LONG +AQ$_JMS_MAP_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_NAMES +AQ$_JMS_MAP_MESSAGE.GET_OBJECT +AQ$_JMS_MAP_MESSAGE.GET_REPLYTO +AQ$_JMS_MAP_MESSAGE.GET_SHORT +AQ$_JMS_MAP_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_SIZE +AQ$_JMS_MAP_MESSAGE.GET_STRING +AQ$_JMS_MAP_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_MAP_MESSAGE.GET_TYPE +AQ$_JMS_MAP_MESSAGE.GET_USERID +AQ$_JMS_MAP_MESSAGE.ITEM_EXISTS +AQ$_JMS_MAP_MESSAGE.PREPARE +AQ$_JMS_MAP_MESSAGE.SET_APPID +AQ$_JMS_MAP_MESSAGE.SET_BOOLEAN +AQ$_JMS_MAP_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_BYTE +AQ$_JMS_MAP_MESSAGE.SET_BYTES +AQ$_JMS_MAP_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_CHAR +AQ$_JMS_MAP_MESSAGE.SET_DOUBLE +AQ$_JMS_MAP_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_FLOAT +AQ$_JMS_MAP_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_GROUPID +AQ$_JMS_MAP_MESSAGE.SET_GROUPSEQ +AQ$_JMS_MAP_MESSAGE.SET_INT +AQ$_JMS_MAP_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_LONG +AQ$_JMS_MAP_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_REPLYTO +AQ$_JMS_MAP_MESSAGE.SET_SHORT +AQ$_JMS_MAP_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_STRING +AQ$_JMS_MAP_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_MAP_MESSAGE.SET_TYPE +AQ$_JMS_MAP_MESSAGE.SET_USERID +AQ$_JMS_MESSAGE.CAST_TO_BYTES_MSG +AQ$_JMS_MESSAGE.CAST_TO_MAP_MSG +AQ$_JMS_MESSAGE.CAST_TO_OBJECT_MSG +AQ$_JMS_MESSAGE.CAST_TO_STREAM_MSG +AQ$_JMS_MESSAGE.CAST_TO_TEXT_MSG +AQ$_JMS_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_MESSAGE.CONSTRUCT +AQ$_JMS_MESSAGE.GET_APPID +AQ$_JMS_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_MESSAGE.GET_BYTES +AQ$_JMS_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_MESSAGE.GET_GROUPID +AQ$_JMS_MESSAGE.GET_GROUPSEQ +AQ$_JMS_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_MESSAGE.GET_REPLYTO +AQ$_JMS_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_MESSAGE.GET_TEXT +AQ$_JMS_MESSAGE.GET_TYPE +AQ$_JMS_MESSAGE.GET_USERID +AQ$_JMS_MESSAGE.SET_APPID +AQ$_JMS_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_MESSAGE.SET_BYTES +AQ$_JMS_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_MESSAGE.SET_GROUPID +AQ$_JMS_MESSAGE.SET_GROUPSEQ +AQ$_JMS_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_MESSAGE.SET_REPLYTO +AQ$_JMS_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_MESSAGE.SET_TEXT +AQ$_JMS_MESSAGE.SET_TYPE +AQ$_JMS_MESSAGE.SET_USERID +AQ$_JMS_STREAM_MESSAGE.CLEAN +AQ$_JMS_STREAM_MESSAGE.CLEAN_ALL +AQ$_JMS_STREAM_MESSAGE.CLEAR_BODY +AQ$_JMS_STREAM_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_STREAM_MESSAGE.CONSTRUCT +AQ$_JMS_STREAM_MESSAGE.FLUSH +AQ$_JMS_STREAM_MESSAGE.GET_APPID +AQ$_JMS_STREAM_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_EXCEPTION +AQ$_JMS_STREAM_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_GROUPID +AQ$_JMS_STREAM_MESSAGE.GET_GROUPSEQ +AQ$_JMS_STREAM_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_MODE +AQ$_JMS_STREAM_MESSAGE.GET_REPLYTO +AQ$_JMS_STREAM_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_STREAM_MESSAGE.GET_TYPE +AQ$_JMS_STREAM_MESSAGE.GET_USERID +AQ$_JMS_STREAM_MESSAGE.PREPARE +AQ$_JMS_STREAM_MESSAGE.READ_BOOLEAN +AQ$_JMS_STREAM_MESSAGE.READ_BYTE +AQ$_JMS_STREAM_MESSAGE.READ_BYTES +AQ$_JMS_STREAM_MESSAGE.READ_CHAR +AQ$_JMS_STREAM_MESSAGE.READ_DOUBLE +AQ$_JMS_STREAM_MESSAGE.READ_FLOAT +AQ$_JMS_STREAM_MESSAGE.READ_INT +AQ$_JMS_STREAM_MESSAGE.READ_LONG +AQ$_JMS_STREAM_MESSAGE.READ_OBJECT +AQ$_JMS_STREAM_MESSAGE.READ_SHORT +AQ$_JMS_STREAM_MESSAGE.READ_STRING +AQ$_JMS_STREAM_MESSAGE.RESET +AQ$_JMS_STREAM_MESSAGE.SET_APPID +AQ$_JMS_STREAM_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_GROUPID +AQ$_JMS_STREAM_MESSAGE.SET_GROUPSEQ +AQ$_JMS_STREAM_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_REPLYTO +AQ$_JMS_STREAM_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_STREAM_MESSAGE.SET_TYPE +AQ$_JMS_STREAM_MESSAGE.SET_USERID +AQ$_JMS_STREAM_MESSAGE.WRITE_BOOLEAN +AQ$_JMS_STREAM_MESSAGE.WRITE_BYTE +AQ$_JMS_STREAM_MESSAGE.WRITE_BYTES +AQ$_JMS_STREAM_MESSAGE.WRITE_CHAR +AQ$_JMS_STREAM_MESSAGE.WRITE_DOUBLE +AQ$_JMS_STREAM_MESSAGE.WRITE_FLOAT +AQ$_JMS_STREAM_MESSAGE.WRITE_INT +AQ$_JMS_STREAM_MESSAGE.WRITE_LONG +AQ$_JMS_STREAM_MESSAGE.WRITE_SHORT +AQ$_JMS_STREAM_MESSAGE.WRITE_STRING +AQ$_JMS_TEXT_MESSAGE.CLEAR_PROPERTIES +AQ$_JMS_TEXT_MESSAGE.CONSTRUCT +AQ$_JMS_TEXT_MESSAGE.GET_APPID +AQ$_JMS_TEXT_MESSAGE.GET_BOOLEAN_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_BYTE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_DOUBLE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_FLOAT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_GROUPID +AQ$_JMS_TEXT_MESSAGE.GET_GROUPSEQ +AQ$_JMS_TEXT_MESSAGE.GET_INT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_LONG_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_REPLYTO +AQ$_JMS_TEXT_MESSAGE.GET_SHORT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_STRING_PROPERTY +AQ$_JMS_TEXT_MESSAGE.GET_TEXT +AQ$_JMS_TEXT_MESSAGE.GET_TYPE +AQ$_JMS_TEXT_MESSAGE.GET_USERID +AQ$_JMS_TEXT_MESSAGE.SET_APPID +AQ$_JMS_TEXT_MESSAGE.SET_BOOLEAN_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_BYTE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_DOUBLE_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_FLOAT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_GROUPID +AQ$_JMS_TEXT_MESSAGE.SET_GROUPSEQ +AQ$_JMS_TEXT_MESSAGE.SET_INT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_LONG_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_REPLYTO +AQ$_JMS_TEXT_MESSAGE.SET_SHORT_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_STRING_PROPERTY +AQ$_JMS_TEXT_MESSAGE.SET_TEXT +AQ$_JMS_TEXT_MESSAGE.SET_TYPE +AQ$_JMS_TEXT_MESSAGE.SET_USERID +AQ$_REG_INFO.AQ$_REG_INFO +AQ_HA_NOTIFICATION +AQ_HA_NOTIFICATIONS +ARCHIVAL_THREAD# +ARCHIVED +ARCHIVED_SEQ# +ARCHIVED_THREAD# +ARCHIVELOG_CHANGE# +ARCHIVELOG_COMPRESSION +ARCHIVER +ARCHIVE_CHANGE# +ARCHIVE_NAME +ARCHIVE_TABLE_NAME +ARCHIVE_TIME +ARG1 +ARG2 +ARG3 +ARG4 +ARG5 +ARGNUM +ARGUMENTS +ARGUMENT_CLASS +ARGUMENT_NAME +ARGUMENT_POSITION +ARGUMENT_TYPE +ARRAY_DEPTH +ARRAY_DML +ARRAY_LEN +ARRAY_SIZE +ARRAY_TYPE_NAME +ARRAY_TYPE_SCHEMA +ASSEMBLE_LOBS +ASSEMBLY_NAME +ASSOCIATION +AST_EVENT0 +ASYNC +ASYNCH_IO +ASYNC_BLOCKS +AS_CANDIDATE_TARGET +AS_REPLAY. +AS_REPLAY.END_AS_REPLAY +AS_REPLAY.INITIALIZE_AS_REPLAY +AS_REPLAY.PREPARE_AS_REPLAY +AS_REPLAY.PROCESS_AS_CAPTURE +AS_REPLAY.START_AS_REPLAY +AS_SOURCE +ATOMIC_REFRESH +ATTACHED_SESSIONS +ATTACH_ID +ATTACH_MODE +ATTR1 +ATTR10 +ATTR11 +ATTR16 +ATTR17 +ATTR18 +ATTR2 +ATTR3 +ATTR4 +ATTR5 +ATTR6 +ATTR7 +ATTR8 +ATTR9 +ATTRB1_NAME +ATTRB1_VAL +ATTRB2_NAME +ATTRB2_VAL +ATTRB3_NAME +ATTRB3_VAL +ATTRB4_NAME +ATTRB4_VAL +ATTRB5_NAME +ATTRB5_VAL +ATTRIBUTE +ATTRIBUTES +ATTRIBUTE_DEFAULT_VALUE +ATTRIBUTE_EVENTS +ATTRIBUTE_EXPRESSION +ATTRIBUTE_GROUP_NAME +ATTRIBUTE_ID +ATTRIBUTE_INCARNATION +ATTRIBUTE_INDEX +ATTRIBUTE_NAME +ATTRIBUTE_ROLE +ATTRIBUTE_SPEC +ATTRIBUTE_SUBNAME +ATTRIBUTE_TRANSFORMATION +ATTRIBUTE_TYPE +ATTRIBUTE_VALUE +ATTR_NAME +ATTR_NO +ATTR_ORDER_NUM +ATTR_TYPE_MOD +ATTR_TYPE_NAME +ATTR_TYPE_OWNER +ATTR_TYPE_PACKAGE +AUD +AUDIT_ACTIONS +AUDIT_CONDITION +AUDIT_FILES_SIZE +AUDIT_OPTION +AUDIT_SESSIONID +AUDIT_TRAIL +AUDIT_TYPE +AUDSID +AUTHENTICATION +AUTHENTICATION_TYPE +AUTHID +AUTHORIZATION_CONSTRAINT +AUTH_CHECK_MISMATCH +AUTH_PRIVILEGES +AUTH_TIME +AUTO +AUTOBACKUP_COUNT +AUTOBACKUP_DONE +AUTOEXTENSIBLE +AUTOLIST +AUTOLIST_SUBPARTITION +AUTOPURGE +AUTOTASK_STATUS +AUTO_DROP +AUTO_FILTERED +AUTO_MERGE_THRESHOLD +AUTO_PARTITION +AUTO_REOPTIMIZE +AUTO_TASKID +AUTO_TXN_BUFFER_SIZE +AUX_COUNT +AUX_NAME +AVAILABLE_COMMITTED_TXN +AVAILABLE_DBTIME +AVAILABLE_MESSAGE_CREATE_TIME +AVAILABLE_MESSAGE_NUMBER +AVAILABLE_TIME +AVAILABLE_TXN +AVAILABLE_WORK_SIZE +AVEACTIVE +AVERAGE +AVERAGE_500B +AVERAGE_8K +AVERAGE_CONVERT_TIME +AVERAGE_MSG_AGE +AVERAGE_PENDING_TIME +AVERAGE_PROCESSING_TIME +AVERAGE_READ_TIME +AVERAGE_TRANSACTION_CPU_TIME +AVERAGE_TRANSACTION_TIME +AVERAGE_WAIT +AVERAGE_WAITER_COUNT +AVERAGE_WAIT_FG +AVERAGE_WAIT_TIME +AVERAGE_WRITE_TIME +AVESHRINK +AVGIOTIM +AVGREADTIME +AVGWRITETIME +AVG_ACTIVE_PARALLEL_SERVERS +AVG_ACTIVE_PARALLEL_STMTS +AVG_BLOCKS_PER_KEY +AVG_BUF_RATE +AVG_BYTE_PER_BUF +AVG_BYTE_RATE +AVG_CACHED_BLOCKS +AVG_CACHE_HIT_RATIO +AVG_CLT_BUF_RATE +AVG_CLT_BYTE_PER_BUF +AVG_CLT_BYTE_RATE +AVG_COL_LEN +AVG_CPU_TIME +AVG_CPU_UTILIZATION +AVG_DATA_BLOCKS_PER_KEY +AVG_DB_TIME +AVG_EVENTS_PER_LOOP +AVG_EVENT_RATE +AVG_EVICTION_RATE +AVG_EVICTION_TIME +AVG_FREE_SIZE +AVG_FTSTIME +AVG_HARD_PARSE_TIME +AVG_IN_CONNECT_RATE +AVG_IO_THROTTLE +AVG_LATENCY +AVG_LEAF_BLOCKS_PER_KEY +AVG_LOAD_RATE +AVG_LOAD_TIME +AVG_LOOKUPTIME +AVG_LOOP_RATE +AVG_MISS_RATIO +AVG_MSG_AGE +AVG_MSG_RATE +AVG_NUMBER +AVG_OPTTIME_DRIFT +AVG_OPT_TIME_ERROR +AVG_OUT_CONNECT_RATE +AVG_QUEUED_PARALLEL_SERVERS +AVG_QUEUED_PARALLEL_STMTS +AVG_READTIME +AVG_RECONNECT_RATE +AVG_ROW_LEN +AVG_RUNNING_SESSIONS +AVG_SIZE +AVG_SPACE +AVG_SPACE_FREELIST_BLOCKS +AVG_SUBSHARD_MEMORY +AVG_SUBSHARD_SIZE +AVG_SVR_BUF_RATE +AVG_SVR_BYTE_PER_BUF +AVG_SVR_BYTE_RATE +AVG_THRASH_RATIO +AVG_TIME +AVG_UNEVICTION_TIME +AVG_USED_SIZE +AVG_USERIO_TIME +AVG_WAITING_SESSIONS +AVG_WAIT_TIME +AVG_WRITETIME +AV_CACHE +AV_CACHE_COL. +AV_KEY_COLUMN +AV_KEY_TABLE_ALIAS +AV_LVLGRP_ORDER +AWR_BEGIN_SNAP +AWR_DBID +AWR_END_SNAP +AWR_EXPORTED +AWR_FLUSH_BYTES +AWR_FLUSH_COUNT +AWR_FLUSH_ELAPSED_TIME +AWR_FLUSH_EMERGENCY_COUNT +AW_DROP_PROC. +AW_DROP_TRG. +AW_NAME +AW_NUMBER +AW_REN_PROC. +AW_REN_TRG. +AW_TRUNC_PROC. +AW_TRUNC_TRG. +AW_VERSION +BACKEDOUT +BACKED_BY_OSB +BACKED_BY_PDB +BACKED_BY_VSS +BACKED_UP +BACKGROUND +BACKOUT_MODE +BACKOUT_SEQ +BACKOUT_SQL_ID +BACKUPFILENAME +BACKUP_COUNT +BACKUP_FUZZY +BACKUP_TYPE +BAD +BAD_COLUMN +BAD_ROWID +BAND_LENGTH +BAND_START_TIME +BANNER +BANNER_FULL +BANNER_LEGACY +BASELINE_ID +BASELINE_NAME +BASELINE_NAME_PREFIX +BASELINE_TYPE +BASEOBJ +BASE_COUNT +BASE_NAME +BASE_OBJECT +BASE_OBJECT_NAME +BASE_OBJECT_TYPE +BASE_PHYSICAL_READS +BASE_SCHEMA_URL +BASE_SEQUENCE +BASE_TABLE +BASE_TABLES +BASE_TABLE_NAME +BASE_TABLE_OWNER +BASE_TARGET_NAMESPACE +BASE_TBLS_REFR_STATUS +BASE_TYPE +BASE_TYPE_NAME +BASE_TYPE_SCHEMA +BATCHID +BATCHING_COEFF +BATCH_COUNT +BATCH_TABLE_ACCESS_BY_ROWID +BATCH_XIDSLT +BATCH_XIDSQN +BATCH_XIDUSN +BEFORE_ROW +BEFORE_STATEMENT +BEGIN_INTERVAL_TIME +BEGIN_INTERVAL_TIME_TZ +BEGIN_RESETLOGS_SCN +BEGIN_RESETLOGS_TIME +BEGIN_SNAP_ID +BEGIN_TIME +BEGIN_TRACK_TIME +BENEFIT +BENEFIT_MAX +BENEFIT_SOFAR +BENEFIT_TYPE +BEQUEATH +BFILE +BFILE_STR +BIGFILE +BINARY +BINARY_ERRORS +BINARY_OUTPUT +BINDING +BINDING# +BINDS +BINDS_CAPTURED +BINDS_XML +BIND_AWARE +BIND_DATA +BIND_EQUIV_FAILURE +BIND_LENGTH_UPGRADEABLE +BIND_MEM_LOC +BIND_MISMATCH +BIND_NAME +BIND_PEEKED_PQ_MISMATCH +BIND_SET_HASH_VALUE +BIND_UACS_DIFF +BIND_VARS +BITMAP +BITMAP_AND +BITMAP_TREE +BITOR. +BITPOS +BITS_SET +BLEVEL +BLK_TYPE +BLOCK +BLOCK# +BLOCK1_OFFSET +BLOCKED +BLOCKED_RES_NAME +BLOCKER +BLOCKER_CHAIN_ID +BLOCKER_INSTANCE +BLOCKER_INSTANCE_ID +BLOCKER_IS_VALID +BLOCKER_OSID +BLOCKER_PDB_ID +BLOCKER_PDB_NAME +BLOCKER_PID +BLOCKER_RES_NAME +BLOCKER_SERIAL# +BLOCKER_SESS_SERIAL# +BLOCKER_SID +BLOCKING_COMPONENT +BLOCKING_HANGCHAIN_INFO +BLOCKING_INSTANCE +BLOCKING_INST_ID +BLOCKING_OTHERS +BLOCKING_SESSION +BLOCKING_SESSION_SERIAL# +BLOCKING_SESSION_STATUS +BLOCKS +BLOCKSINMEM +BLOCKSIZE +BLOCKS_ALLOCATED +BLOCKS_CACHED +BLOCKS_COALESCED +BLOCKS_DECRYPTED +BLOCKS_ENCRYPTED +BLOCKS_FREE +BLOCKS_READ +BLOCKS_SKIPPED_IN_CELL +BLOCKS_USED +BLOCK_CHANGES +BLOCK_CNT +BLOCK_COMMENT +BLOCK_COUNT +BLOCK_GETS +BLOCK_ID +BLOCK_NUM +BLOCK_SIZE +BL_MOVED +BNO +BODY +BOTTLENECK_IDENTIFIED +BPID +BP_COPY# +BP_KEY +BP_PIECE# +BRANCH +BRANCHES +BRANCHID +BRANCH_SCN +BREAKS +BROKEN +BROWSED_MSGS +BSLN. +BSLN.ACTIVATE_BASELINE +BSLN.BASELINE_GUID +BSLN.COMPUTE_ALL_STATISTICS +BSLN.COMPUTE_STATISTICS +BSLN.CREATE_BASELINE_STATIC +BSLN.DATASOURCE_GUID +BSLN.DATA_AND_MODEL_OK +BSLN.DEACTIVATE_BASELINE +BSLN.DELETE_BSLN_JOBS +BSLN.DEREGISTER_DATASOURCE +BSLN.DISABLE +BSLN.DROP_BASELINE +BSLN.ENABLE +BSLN.IS_ENABLED +BSLN.METRIC_SIGNAL_QUALITIES +BSLN.METRIC_UID +BSLN.MOVING_WINDOW_BASELINE_GUID +BSLN.REGISTER_DATASOURCE +BSLN.SET_ALL_THRESHOLDS +BSLN.SET_DEFAULT_TIMEGROUPING +BSLN.SET_THRESHOLD_PARAMETERS +BSLN.SUBINTERVAL_CODE +BSLN.TARGET_UID +BSLN.THIS_TARGET_UID +BSLN.TIMEGROUP +BSLN.UNSET_THRESHOLD_PARAMETERS +BSLN.UPDATE_MOVING_WINDOW +BSLN_INTERNAL. +BSLN_INTERNAL.ALLOW_DROP +BSLN_INTERNAL.BASELINE_REC +BSLN_INTERNAL.COMPUTE_LOAD_MAS +BSLN_INTERNAL.COMPUTE_LOAD_MES_TG +BSLN_INTERNAL.COMPUTE_LOAD_MES_XX +BSLN_INTERNAL.COMPUTE_STATISTICS +BSLN_INTERNAL.DEDUCED_TIMEGROUPING +BSLN_INTERNAL.DEDUCE_TIMEGROUPINGS +BSLN_INTERNAL.DELETE_BSLN_JOBS +BSLN_INTERNAL.ELECTED_TIMEGROUPING +BSLN_INTERNAL.HOUR_OF_WEEK +BSLN_INTERNAL.IN_EFFECT_THRESHOLD_REC +BSLN_INTERNAL.LOAD_DAY_OFFSETS +BSLN_INTERNAL.MAINTAIN_STATISTICS +BSLN_INTERNAL.MAINTAIN_THRESHOLDS +BSLN_INTERNAL.MES_TG +BSLN_INTERNAL.MES_XX +BSLN_INTERNAL.METRIC_SIGNAL_QUALITIES +BSLN_INTERNAL.N_FIELD +BSLN_INTERNAL.SET_ALL_THRESHOLDS +BSLN_INTERNAL.SET_BASELINE_METRIC_THRESHOLD +BSLN_INTERNAL.SET_LAST_COMPUTE_DATE +BSLN_INTERNAL.SIGNAL_QUALITY_SCORE +BSLN_INTERNAL.STD7 +BSLN_INTERNAL.THIS_DBID +BSLN_INTERNAL.THIS_INSTANCE_NAME +BSLN_INTERNAL.THRESHOLD_REC +BSLN_INTERNAL.UNSET_ALL_THRESHOLDS +BSLN_INTERNAL.UNSET_THRESHOLD +BSLN_INTERNAL.W_FIELD +BS_BYTES +BS_COMPLETION_TIME +BS_COMPRESSED +BS_COPIES +BS_COUNT +BS_DEVICE_TYPE +BS_INCR_TYPE +BS_KEY +BS_PIECES +BS_STAMP +BS_STATUS +BS_TAG +BS_TYPE +BTYPE +BTYPE_KEY +BT_CACHE_ALLOC +BT_CACHE_TARGET +BUCKET +BUCKET_0_ACCESS_COUNT +BUCKET_1000_PLUS_ACCESS_COUNT +BUCKET_1000_PLUS_ROWS_RETURNED +BUCKET_101_1000_ACCESS_COUNT +BUCKET_101_1000_ROWS_RETURNED +BUCKET_11_100_ACCESS_COUNT +BUCKET_11_100_ROWS_RETURNED +BUCKET_1_ACCESS_COUNT +BUCKET_2_10_ACCESS_COUNT +BUCKET_2_10_ROWS_RETURNED +BUCKET_ID +BUCKET_NO +BUCKET_NUMBER +BUFFER +BUFFERED_DML_MISMATCH +BUFFERS +BUFFERS_FOR_ESTIMATE +BUFFER_BUSY_WAIT +BUFFER_BUSY_WAITS_DELTA +BUFFER_BUSY_WAITS_TOTAL +BUFFER_CACHE_BYTES +BUFFER_COUNT +BUFFER_GETS +BUFFER_GETS_DELTA +BUFFER_GETS_TOTAL +BUFFER_POOL +BUFFER_SIZE +BUF_ADDRESS +BUF_FLAG +BUF_GOT +BUF_LENGTH +BUGNO +BUG_ID +BUG_NUMBER +BUILDER_WORK_SIZE +BUILDS +BUILD_DURATION +BUILD_MODE +BUILD_PROCESS +BUILD_PROCESS_ID +BUILD_PROCESS_NAME +BUILD_TIME +BUNDLE_SERIES +BUSHY_JOIN +BUSY +BUSY_TIME_CUR +BUSY_TIME_TOTAL +BYPASS_RECURSIVE_CHECK +BYPASS_UJVC +BYTES +BYTES_CACHED +BYTES_COALESCED +BYTES_DELETED +BYTES_FREE +BYTES_NOT_POPULATED +BYTES_OF_REDO_MINED +BYTES_PROCESSED +BYTES_READ +BYTES_RECEIVED +BYTES_REDO_MINED +BYTES_SENT +BYTES_USED +BYTES_WRITTEN +CACHE +CACHE# +CACHED_GETS +CACHED_IN_MEM +CACHED_OBJECTS +CACHEHINT +CACHE_CB +CACHE_CNT +CACHE_FLUSHES +CACHE_ID +CACHE_KEY +CACHE_LOBS +CACHE_NAME +CACHE_REFRESHES +CACHE_SHRINKS +CACHE_SIZE +CACHE_TYPE +CACHE_WRITES +CALAIS_EXTRACTOR.CALAIS_EXTRACTOR +CALAIS_EXTRACTOR.EXTRACTRDF +CALIBRATION_TIME +CALIBRATION_VALUE +CALLBACK +CALLOUT +CALLSPERSEC +CALL_COUNTER +CALL_CTR +CALL_ID +CANDIDATE +CAN_PURGE +CAN_UNDROP +CAN_USE_LOG +CAPTURE +CAPTURE# +CAPTURED +CAPTURED_SCN +CAPTURE_BYTES_RECEIVED +CAPTURE_COMMIT_TIME +CAPTURE_COMMIT_TIME_DELTA +CAPTURE_CONN +CAPTURE_DIR +CAPTURE_DIRECTORY +CAPTURE_ELAPSED_TIME +CAPTURE_FILE_ID +CAPTURE_FORMAT +CAPTURE_ID +CAPTURE_LOCATOR +CAPTURE_MESSAGE_CREATE_TIME +CAPTURE_MESSAGE_NUMBER +CAPTURE_MODE +CAPTURE_NAME +CAPTURE_OVERHEAD +CAPTURE_SCOPE +CAPTURE_SIZE +CAPTURE_STREAM_ID +CAPTURE_TIME +CAPTURE_TYPE +CAPTURE_USER +CAPTURE_VALUES +CARDINALITY +CARTRIDGE. +CARTRIDGE.DBMS_FEATURE_DICOM +CARTRIDGE.DBMS_FEATURE_MULTIMEDIA +CAT +CATEGORY +CATINDEXMETHODS.ODCIGETINTERFACES +CATINDEXMETHODS.ODCIINDEXALTER +CATINDEXMETHODS.ODCIINDEXCLOSE +CATINDEXMETHODS.ODCIINDEXCREATE +CATINDEXMETHODS.ODCIINDEXDELETE +CATINDEXMETHODS.ODCIINDEXDROP +CATINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +CATINDEXMETHODS.ODCIINDEXFETCH +CATINDEXMETHODS.ODCIINDEXGETMETADATA +CATINDEXMETHODS.ODCIINDEXINSERT +CATINDEXMETHODS.ODCIINDEXMERGEPARTITION +CATINDEXMETHODS.ODCIINDEXSPLITPARTITION +CATINDEXMETHODS.ODCIINDEXSTART +CATINDEXMETHODS.ODCIINDEXTRUNCATE +CATINDEXMETHODS.ODCIINDEXUPDATE +CATINDEXMETHODS.ODCIINDEXUTILCLEANUP +CATINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +CAT_ROLLBACK_TRIGGER. +CBR +CBR_FORCED_WRITE +CCLASS_NAME +CCWAIT_DELTA +CCWAIT_TOTAL +CDB +CDBVIEW. +CDBVIEW.CREATE_CDBVIEW +CDBVIEW.GETLONG +CDBVIEW_INTERNAL. +CDBVIEW_INTERNAL.LONG2VARCHAR2_I +CDB_2PC_NEIGHBORS +CDB_2PC_PENDING +CDB_ACL_NAME_MAP +CDB_ADDM_FDG_BREAKDOWN +CDB_ADDM_FINDINGS +CDB_ADDM_INSTANCES +CDB_ADDM_SYSTEM_DIRECTIVES +CDB_ADDM_TASKS +CDB_ADDM_TASK_DIRECTIVES +CDB_ADVISOR_ACTIONS +CDB_ADVISOR_COMMANDS +CDB_ADVISOR_DEFINITIONS +CDB_ADVISOR_DEF_PARAMETERS +CDB_ADVISOR_DIR_DEFINITIONS +CDB_ADVISOR_DIR_INSTANCES +CDB_ADVISOR_DIR_TASK_INST +CDB_ADVISOR_EXECUTIONS +CDB_ADVISOR_EXECUTION_TYPES +CDB_ADVISOR_EXEC_PARAMETERS +CDB_ADVISOR_FDG_BREAKDOWN +CDB_ADVISOR_FINDINGS +CDB_ADVISOR_FINDING_NAMES +CDB_ADVISOR_JOURNAL +CDB_ADVISOR_LOG +CDB_ADVISOR_OBJECTS +CDB_ADVISOR_OBJECT_TYPES +CDB_ADVISOR_PARAMETERS +CDB_ADVISOR_PARAMETERS_PROJ +CDB_ADVISOR_RATIONALE +CDB_ADVISOR_RECOMMENDATIONS +CDB_ADVISOR_SQLA_COLVOL +CDB_ADVISOR_SQLA_REC_SUM +CDB_ADVISOR_SQLA_TABLES +CDB_ADVISOR_SQLA_TABVOL +CDB_ADVISOR_SQLA_WK_MAP +CDB_ADVISOR_SQLA_WK_STMTS +CDB_ADVISOR_SQLA_WK_SUM +CDB_ADVISOR_SQLPLANS +CDB_ADVISOR_SQLSTATS +CDB_ADVISOR_SQLW_COLVOL +CDB_ADVISOR_SQLW_JOURNAL +CDB_ADVISOR_SQLW_PARAMETERS +CDB_ADVISOR_SQLW_STMTS +CDB_ADVISOR_SQLW_SUM +CDB_ADVISOR_SQLW_TABLES +CDB_ADVISOR_SQLW_TABVOL +CDB_ADVISOR_SQLW_TEMPLATES +CDB_ADVISOR_TASKS +CDB_ADVISOR_TEMPLATES +CDB_ADVISOR_USAGE +CDB_ALERT_ARGUMENTS +CDB_ALERT_HISTORY +CDB_ALERT_HISTORY_DETAIL +CDB_ALL_TABLES +CDB_ANALYTIC_VIEWS +CDB_ANALYTIC_VIEW_ATTR_CLASS +CDB_ANALYTIC_VIEW_BASE_MEAS +CDB_ANALYTIC_VIEW_CALC_MEAS +CDB_ANALYTIC_VIEW_CLASS +CDB_ANALYTIC_VIEW_COLUMNS +CDB_ANALYTIC_VIEW_DIMENSIONS +CDB_ANALYTIC_VIEW_DIM_CLASS +CDB_ANALYTIC_VIEW_HIERS +CDB_ANALYTIC_VIEW_HIER_CLASS +CDB_ANALYTIC_VIEW_KEYS +CDB_ANALYTIC_VIEW_LEVELS +CDB_ANALYTIC_VIEW_LEVEL_CLASS +CDB_ANALYTIC_VIEW_LVLGRPS +CDB_ANALYTIC_VIEW_MEAS_CLASS +CDB_ANALYZE_OBJECTS +CDB_APPLICATIONS +CDB_APPLICATION_ROLES +CDB_APPLY +CDB_APPLY_CHANGE_HANDLERS +CDB_APPLY_CONFLICT_COLUMNS +CDB_APPLY_DML_CONF_COLUMNS +CDB_APPLY_DML_CONF_HANDLERS +CDB_APPLY_DML_HANDLERS +CDB_APPLY_ENQUEUE +CDB_APPLY_ERROR +CDB_APPLY_ERROR_MESSAGES +CDB_APPLY_EXECUTE +CDB_APPLY_HANDLE_COLLISIONS +CDB_APPLY_INSTANTIATED_GLOBAL +CDB_APPLY_INSTANTIATED_OBJECTS +CDB_APPLY_INSTANTIATED_SCHEMAS +CDB_APPLY_KEY_COLUMNS +CDB_APPLY_PARAMETERS +CDB_APPLY_PROGRESS +CDB_APPLY_REPERROR_HANDLERS +CDB_APPLY_SPILL_TXN +CDB_APPLY_TABLE_COLUMNS +CDB_APP_ERRORS +CDB_APP_PATCHES +CDB_APP_PDB_STATUS +CDB_APP_STATEMENTS +CDB_APP_VERSIONS +CDB_AQ_AGENTS +CDB_AQ_AGENT_PRIVS +CDB_ARGUMENTS +CDB_ASSEMBLIES +CDB_ASSOCIATIONS +CDB_ATTRIBUTE_DIMENSIONS +CDB_ATTRIBUTE_DIM_ATTRS +CDB_ATTRIBUTE_DIM_ATTR_CLASS +CDB_ATTRIBUTE_DIM_CLASS +CDB_ATTRIBUTE_DIM_JOIN_PATHS +CDB_ATTRIBUTE_DIM_KEYS +CDB_ATTRIBUTE_DIM_LEVELS +CDB_ATTRIBUTE_DIM_LEVEL_ATTRS +CDB_ATTRIBUTE_DIM_LVL_CLASS +CDB_ATTRIBUTE_DIM_ORDER_ATTRS +CDB_ATTRIBUTE_DIM_TABLES +CDB_ATTRIBUTE_TRANSFORMATIONS +CDB_AUDIT_EXISTS +CDB_AUDIT_MGMT_CLEANUP_JOBS +CDB_AUDIT_MGMT_CLEAN_EVENTS +CDB_AUDIT_MGMT_CONFIG_PARAMS +CDB_AUDIT_MGMT_LAST_ARCH_TS +CDB_AUDIT_OBJECT +CDB_AUDIT_POLICIES +CDB_AUDIT_POLICY_COLUMNS +CDB_AUDIT_SESSION +CDB_AUDIT_STATEMENT +CDB_AUDIT_TRAIL +CDB_AUTOTASK_CLIENT +CDB_AUTOTASK_CLIENT_HISTORY +CDB_AUTOTASK_CLIENT_JOB +CDB_AUTOTASK_JOB_HISTORY +CDB_AUTOTASK_OPERATION +CDB_AUTOTASK_SCHEDULE +CDB_AUTOTASK_STATUS +CDB_AUTOTASK_TASK +CDB_AUTOTASK_WINDOW_CLIENTS +CDB_AUTOTASK_WINDOW_HISTORY +CDB_AUTO_SEGADV_CTL +CDB_AUTO_SEGADV_SUMMARY +CDB_AWS +CDB_AW_OBJ +CDB_AW_PROP +CDB_AW_PS +CDB_BASE_TABLE_MVIEWS +CDB_BLOCKERS +CDB_CAPTURE +CDB_CAPTURE_EXTRA_ATTRIBUTES +CDB_CAPTURE_PARAMETERS +CDB_CAPTURE_PREPARED_DATABASE +CDB_CAPTURE_PREPARED_SCHEMAS +CDB_CAPTURE_PREPARED_TABLES +CDB_CATALOG +CDB_CDB_RSRC_PLANS +CDB_CDB_RSRC_PLAN_DIRECTIVES +CDB_CHANGE_NOTIFICATION_REGS +CDB_CHECKED_ROLES +CDB_CHECKED_ROLES_PATH +CDB_CLUSTERING_DIMENSIONS +CDB_CLUSTERING_JOINS +CDB_CLUSTERING_KEYS +CDB_CLUSTERING_TABLES +CDB_CLUSTERS +CDB_CLUSTER_HASH_EXPRESSIONS +CDB_CLU_COLUMNS +CDB_CODE_ROLE_PRIVS +CDB_COLL_TYPES +CDB_COL_COMMENTS +CDB_COL_PENDING_STATS +CDB_COL_PRIVS +CDB_COL_USAGE_STATISTICS +CDB_COMMON_AUDIT_TRAIL +CDB_COMPARISON +CDB_COMPARISON_COLUMNS +CDB_COMPARISON_ROW_DIF +CDB_COMPARISON_SCAN +CDB_COMPARISON_SCAN_SUMMARY +CDB_COMPARISON_SCAN_VALUES +CDB_CONNECTION_TESTS +CDB_CONNECT_ROLE_GRANTEES +CDB_CONSTRAINTS +CDB_CONS_COLUMNS +CDB_CONS_OBJ_COLUMNS +CDB_CONTAINER_DATA +CDB_CONTEXT +CDB_CPOOL_INFO +CDB_CPU_USAGE_STATISTICS +CDB_CQ_NOTIFICATION_QUERIES +CDB_CREDENTIALS +CDB_CUBES +CDB_CUBE_ATTRIBUTES +CDB_CUBE_ATTR_MAPPINGS +CDB_CUBE_ATTR_UNIQUE_KEYS +CDB_CUBE_ATTR_VISIBILITY +CDB_CUBE_BUILD_PROCESSES +CDB_CUBE_CALCULATED_MEMBERS +CDB_CUBE_CLASSIFICATIONS +CDB_CUBE_DEPENDENCIES +CDB_CUBE_DESCRIPTIONS +CDB_CUBE_DIMENSIONALITY +CDB_CUBE_DIMENSIONS +CDB_CUBE_DIMNL_MAPPINGS +CDB_CUBE_DIM_LEVELS +CDB_CUBE_DIM_MAPPINGS +CDB_CUBE_DIM_MODELS +CDB_CUBE_DIM_VIEWS +CDB_CUBE_DIM_VIEW_COLUMNS +CDB_CUBE_HIERARCHIES +CDB_CUBE_HIER_LEVELS +CDB_CUBE_HIER_VIEWS +CDB_CUBE_HIER_VIEW_COLUMNS +CDB_CUBE_MAPPINGS +CDB_CUBE_MEASURES +CDB_CUBE_MEAS_MAPPINGS +CDB_CUBE_NAMED_BUILD_SPECS +CDB_CUBE_SUB_PARTITION_LEVELS +CDB_CUBE_VIEWS +CDB_CUBE_VIEW_COLUMNS +CDB_DATAPUMP_JOBS +CDB_DATAPUMP_SESSIONS +CDB_DATA_FILES +CDB_DBFS_HS +CDB_DBFS_HS_COMMANDS +CDB_DBFS_HS_FIXED_PROPERTIES +CDB_DBFS_HS_PROPERTIES +CDB_DB_LINKS +CDB_DB_LINK_SOURCES +CDB_DDL_LOCKS +CDB_DEPENDENCIES +CDB_DIGEST_VERIFIERS +CDB_DIMENSIONS +CDB_DIM_ATTRIBUTES +CDB_DIM_CHILD_OF +CDB_DIM_HIERARCHIES +CDB_DIM_JOIN_KEY +CDB_DIM_LEVELS +CDB_DIM_LEVEL_KEY +CDB_DIRECTORIES +CDB_DISCOVERY_SOURCE +CDB_DML_LOCKS +CDB_DMT_FREE_SPACE +CDB_DMT_USED_EXTENTS +CDB_DV_STATUS +CDB_EDITIONED_TYPES +CDB_EDITIONING_VIEWS +CDB_EDITIONING_VIEWS_AE +CDB_EDITIONING_VIEW_COLS +CDB_EDITIONING_VIEW_COLS_AE +CDB_EDITIONS +CDB_EDITION_COMMENTS +CDB_ENABLED_AGGREGATIONS +CDB_ENABLED_TRACES +CDB_ENCRYPTED_COLUMNS +CDB_EPG_DAD_AUTHORIZATION +CDB_ERRORS +CDB_ERRORS_AE +CDB_ERROR_TRANSLATIONS +CDB_EVALUATION_CONTEXTS +CDB_EVALUATION_CONTEXT_TABLES +CDB_EVALUATION_CONTEXT_VARS +CDB_EXPORT_OBJECTS +CDB_EXPORT_PATHS +CDB_EXPRESSION_STATISTICS +CDB_EXP_FILES +CDB_EXP_OBJECTS +CDB_EXP_VERSION +CDB_EXTENTS +CDB_EXTERNAL_LOCATIONS +CDB_EXTERNAL_SCN_ACTIVITY +CDB_EXTERNAL_TABLES +CDB_FEATURE_USAGE_STATISTICS +CDB_FGA_AUDIT_TRAIL +CDB_FILE_GROUPS +CDB_FILE_GROUP_EXPORT_INFO +CDB_FILE_GROUP_FILES +CDB_FILE_GROUP_TABLES +CDB_FILE_GROUP_TABLESPACES +CDB_FILE_GROUP_VERSIONS +CDB_FLASHBACK_ARCHIVE +CDB_FLASHBACK_ARCHIVE_TABLES +CDB_FLASHBACK_ARCHIVE_TS +CDB_FLASHBACK_TXN_REPORT +CDB_FLASHBACK_TXN_STATE +CDB_FREE_SPACE +CDB_FREE_SPACE_COALESCED +CDB_FREE_SPACE_COALESCED_TMP1 +CDB_FREE_SPACE_COALESCED_TMP2 +CDB_FREE_SPACE_COALESCED_TMP3 +CDB_FREE_SPACE_COALESCED_TMP4 +CDB_FREE_SPACE_COALESCED_TMP5 +CDB_FREE_SPACE_COALESCED_TMP6 +CDB_GG_AUTO_CDR_COLUMNS +CDB_GG_AUTO_CDR_COLUMN_GROUPS +CDB_GG_AUTO_CDR_TABLES +CDB_GG_INBOUND_PROGRESS +CDB_GG_PROCEDURE_ANNOTATION +CDB_GG_PROC_OBJECT_EXCLUSION +CDB_GG_SUPPORTED_PACKAGES +CDB_GG_SUPPORTED_PROCEDURES +CDB_GLOBAL_CONTEXT +CDB_GOLDENGATE_CONTAINER_RULES +CDB_GOLDENGATE_INBOUND +CDB_GOLDENGATE_NOT_UNIQUE +CDB_GOLDENGATE_PRIVILEGES +CDB_GOLDENGATE_RULES +CDB_GOLDENGATE_SUPPORT_MODE +CDB_HANG_MANAGER_PARAMETERS +CDB_HEATMAP_TOP_OBJECTS +CDB_HEATMAP_TOP_TABLESPACES +CDB_HEAT_MAP_SEGMENT +CDB_HEAT_MAP_SEG_HISTOGRAM +CDB_HIERARCHIES +CDB_HIER_CLASS +CDB_HIER_COLUMNS +CDB_HIER_HIER_ATTRIBUTES +CDB_HIER_HIER_ATTR_CLASS +CDB_HIER_JOIN_PATHS +CDB_HIER_LEVELS +CDB_HIER_LEVEL_ID_ATTRS +CDB_HIGH_WATER_MARK_STATISTICS +CDB_HIST_ACTIVE_SESS_HISTORY +CDB_HIST_APPLY_SUMMARY +CDB_HIST_ASH_SNAPSHOT +CDB_HIST_ASM_BAD_DISK +CDB_HIST_ASM_DISKGROUP +CDB_HIST_ASM_DISKGROUP_STAT +CDB_HIST_ASM_DISK_STAT_SUMMARY +CDB_HIST_BASELINE +CDB_HIST_BASELINE_DETAILS +CDB_HIST_BASELINE_METADATA +CDB_HIST_BASELINE_TEMPLATE +CDB_HIST_BG_EVENT_SUMMARY +CDB_HIST_BUFFERED_QUEUES +CDB_HIST_BUFFERED_SUBSCRIBERS +CDB_HIST_BUFFER_POOL_STAT +CDB_HIST_CAPTURE +CDB_HIST_CELL_CONFIG +CDB_HIST_CELL_CONFIG_DETAIL +CDB_HIST_CELL_DB +CDB_HIST_CELL_DISKTYPE +CDB_HIST_CELL_DISK_NAME +CDB_HIST_CELL_DISK_SUMMARY +CDB_HIST_CELL_GLOBAL +CDB_HIST_CELL_GLOBAL_SUMMARY +CDB_HIST_CELL_IOREASON +CDB_HIST_CELL_IOREASON_NAME +CDB_HIST_CELL_METRIC_DESC +CDB_HIST_CELL_NAME +CDB_HIST_CELL_OPEN_ALERTS +CDB_HIST_CHANNEL_WAITS +CDB_HIST_CLUSTER_INTERCON +CDB_HIST_COLORED_SQL +CDB_HIST_COMP_IOSTAT +CDB_HIST_CON_SYSMETRIC_HIST +CDB_HIST_CON_SYSMETRIC_SUMM +CDB_HIST_CON_SYSSTAT +CDB_HIST_CON_SYSTEM_EVENT +CDB_HIST_CON_SYS_TIME_MODEL +CDB_HIST_CR_BLOCK_SERVER +CDB_HIST_CURRENT_BLOCK_SERVER +CDB_HIST_DATABASE_INSTANCE +CDB_HIST_DATAFILE +CDB_HIST_DB_CACHE_ADVICE +CDB_HIST_DISPATCHER +CDB_HIST_DLM_MISC +CDB_HIST_DYN_REMASTER_STATS +CDB_HIST_ENQUEUE_STAT +CDB_HIST_EVENT_HISTOGRAM +CDB_HIST_EVENT_NAME +CDB_HIST_FILEMETRIC_HISTORY +CDB_HIST_FILESTATXS +CDB_HIST_IC_CLIENT_STATS +CDB_HIST_IC_DEVICE_STATS +CDB_HIST_IM_SEG_STAT +CDB_HIST_IM_SEG_STAT_OBJ +CDB_HIST_INSTANCE_RECOVERY +CDB_HIST_INST_CACHE_TRANSFER +CDB_HIST_INTERCONNECT_PINGS +CDB_HIST_IOSTAT_DETAIL +CDB_HIST_IOSTAT_FILETYPE +CDB_HIST_IOSTAT_FILETYPE_NAME +CDB_HIST_IOSTAT_FUNCTION +CDB_HIST_IOSTAT_FUNCTION_NAME +CDB_HIST_JAVA_POOL_ADVICE +CDB_HIST_LATCH +CDB_HIST_LATCH_CHILDREN +CDB_HIST_LATCH_MISSES_SUMMARY +CDB_HIST_LATCH_NAME +CDB_HIST_LATCH_PARENT +CDB_HIST_LIBRARYCACHE +CDB_HIST_LMS_STATS +CDB_HIST_LOG +CDB_HIST_MEMORY_RESIZE_OPS +CDB_HIST_MEMORY_TARGET_ADVICE +CDB_HIST_MEM_DYNAMIC_COMP +CDB_HIST_METRIC_NAME +CDB_HIST_MTTR_TARGET_ADVICE +CDB_HIST_MUTEX_SLEEP +CDB_HIST_MVPARAMETER +CDB_HIST_OPTIMIZER_ENV +CDB_HIST_OSSTAT +CDB_HIST_OSSTAT_NAME +CDB_HIST_PARAMETER +CDB_HIST_PARAMETER_NAME +CDB_HIST_PDB_INSTANCE +CDB_HIST_PDB_IN_SNAP +CDB_HIST_PERSISTENT_QMN_CACHE +CDB_HIST_PERSISTENT_QUEUES +CDB_HIST_PERSISTENT_SUBS +CDB_HIST_PGASTAT +CDB_HIST_PGA_TARGET_ADVICE +CDB_HIST_PLAN_OPERATION_NAME +CDB_HIST_PLAN_OPTION_NAME +CDB_HIST_PROCESS_MEM_SUMMARY +CDB_HIST_PROCESS_WAITTIME +CDB_HIST_RECOVERY_PROGRESS +CDB_HIST_REPLICATION_TBL_STATS +CDB_HIST_REPLICATION_TXN_STATS +CDB_HIST_REPORTS +CDB_HIST_REPORTS_CONTROL +CDB_HIST_REPORTS_DETAILS +CDB_HIST_REPORTS_TIMEBANDS +CDB_HIST_RESOURCE_LIMIT +CDB_HIST_ROWCACHE_SUMMARY +CDB_HIST_RSRC_CONSUMER_GROUP +CDB_HIST_RSRC_METRIC +CDB_HIST_RSRC_PDB_METRIC +CDB_HIST_RSRC_PLAN +CDB_HIST_RULE_SET +CDB_HIST_SEG_STAT +CDB_HIST_SEG_STAT_OBJ +CDB_HIST_SERVICE_NAME +CDB_HIST_SERVICE_STAT +CDB_HIST_SERVICE_WAIT_CLASS +CDB_HIST_SESSMETRIC_HISTORY +CDB_HIST_SESS_SGA_STATS +CDB_HIST_SESS_TIME_STATS +CDB_HIST_SGA +CDB_HIST_SGASTAT +CDB_HIST_SGA_TARGET_ADVICE +CDB_HIST_SHARED_POOL_ADVICE +CDB_HIST_SHARED_SERVER_SUMMARY +CDB_HIST_SNAPSHOT +CDB_HIST_SNAP_ERROR +CDB_HIST_SQLBIND +CDB_HIST_SQLCOMMAND_NAME +CDB_HIST_SQLSTAT +CDB_HIST_SQLTEXT +CDB_HIST_SQL_BIND_METADATA +CDB_HIST_SQL_PLAN +CDB_HIST_SQL_SUMMARY +CDB_HIST_SQL_WORKAREA_HSTGRM +CDB_HIST_STAT_NAME +CDB_HIST_STREAMS_APPLY_SUM +CDB_HIST_STREAMS_CAPTURE +CDB_HIST_STREAMS_POOL_ADVICE +CDB_HIST_SYSMETRIC_HISTORY +CDB_HIST_SYSMETRIC_SUMMARY +CDB_HIST_SYSSTAT +CDB_HIST_SYSTEM_EVENT +CDB_HIST_SYS_TIME_MODEL +CDB_HIST_TABLESPACE +CDB_HIST_TABLESPACE_STAT +CDB_HIST_TBSPC_SPACE_USAGE +CDB_HIST_TEMPFILE +CDB_HIST_TEMPSTATXS +CDB_HIST_THREAD +CDB_HIST_TOPLEVELCALL_NAME +CDB_HIST_UNDOSTAT +CDB_HIST_WAITCLASSMET_HISTORY +CDB_HIST_WAITSTAT +CDB_HIST_WR_CONTROL +CDB_HIST_WR_SETTINGS +CDB_HIVE_COLUMNS +CDB_HIVE_DATABASES +CDB_HIVE_PART_KEY_COLUMNS +CDB_HIVE_TABLES +CDB_HIVE_TAB_PARTITIONS +CDB_HOST_ACES +CDB_HOST_ACLS +CDB_IDENTIFIERS +CDB_ILMDATAMOVEMENTPOLICIES +CDB_ILMEVALUATIONDETAILS +CDB_ILMOBJECTS +CDB_ILMPARAMETERS +CDB_ILMPOLICIES +CDB_ILMRESULTS +CDB_ILMTASKS +CDB_INDEXES +CDB_INDEXTYPES +CDB_INDEXTYPE_ARRAYTYPES +CDB_INDEXTYPE_COMMENTS +CDB_INDEXTYPE_OPERATORS +CDB_INDEX_USAGE +CDB_IND_COLUMNS +CDB_IND_COLUMNS_V$ +CDB_IND_EXPRESSIONS +CDB_IND_PARTITIONS +CDB_IND_PENDING_STATS +CDB_IND_STATISTICS +CDB_IND_SUBPARTITIONS +CDB_INMEMORY_AIMTASKDETAILS +CDB_INMEMORY_AIMTASKS +CDB_INTERNAL_TRIGGERS +CDB_INVALID_OBJECTS +CDB_JAVA_ARGUMENTS +CDB_JAVA_CLASSES +CDB_JAVA_COMPILER_OPTIONS +CDB_JAVA_DERIVATIONS +CDB_JAVA_FIELDS +CDB_JAVA_IMPLEMENTS +CDB_JAVA_INNERS +CDB_JAVA_LAYOUTS +CDB_JAVA_METHODS +CDB_JAVA_NCOMPS +CDB_JAVA_POLICY +CDB_JAVA_RESOLVERS +CDB_JAVA_THROWS +CDB_JOBS +CDB_JOBS_RUNNING +CDB_JOINGROUPS +CDB_JOIN_IND_COLUMNS +CDB_JSON_COLUMNS +CDB_JSON_DATAGUIDES +CDB_JSON_DATAGUIDE_FIELDS +CDB_KEEPSIZES +CDB_KGLLOCK +CDB_LIBRARIES +CDB_LMT_FREE_SPACE +CDB_LMT_USED_EXTENTS +CDB_LOBS +CDB_LOB_PARTITIONS +CDB_LOB_SUBPARTITIONS +CDB_LOB_TEMPLATES +CDB_LOCAL_ADMIN_PRIVS +CDB_LOCK +CDB_LOCKDOWN_PROFILES +CDB_LOCK_INTERNAL +CDB_LOGMNR_LOG +CDB_LOGMNR_PURGED_LOG +CDB_LOGMNR_SESSION +CDB_LOGSTDBY_EDS_SUPPORTED +CDB_LOGSTDBY_EDS_TABLES +CDB_LOGSTDBY_EVENTS +CDB_LOGSTDBY_HISTORY +CDB_LOGSTDBY_LOG +CDB_LOGSTDBY_NOT_UNIQUE +CDB_LOGSTDBY_PARAMETERS +CDB_LOGSTDBY_PLSQL_MAP +CDB_LOGSTDBY_PLSQL_SUPPORT +CDB_LOGSTDBY_PROGRESS +CDB_LOGSTDBY_SKIP +CDB_LOGSTDBY_SKIP_TRANSACTION +CDB_LOGSTDBY_UNSUPPORTED +CDB_LOGSTDBY_UNSUPPORTED_TABLE +CDB_LOG_GROUPS +CDB_LOG_GROUP_COLUMNS +CDB_MEASURE_FOLDERS +CDB_MEASURE_FOLDER_CONTENTS +CDB_MEASURE_FOLDER_SUBFOLDERS +CDB_METADATA_PROPERTIES +CDB_METHOD_PARAMS +CDB_METHOD_RESULTS +CDB_MINING_MODELS +CDB_MINING_MODEL_ATTRIBUTES +CDB_MINING_MODEL_PARTITIONS +CDB_MINING_MODEL_SETTINGS +CDB_MINING_MODEL_TABLES +CDB_MINING_MODEL_VIEWS +CDB_MINING_MODEL_XFORMS +CDB_MVIEWS +CDB_MVIEW_AGGREGATES +CDB_MVIEW_ANALYSIS +CDB_MVIEW_COMMENTS +CDB_MVIEW_DETAIL_PARTITION +CDB_MVIEW_DETAIL_RELATIONS +CDB_MVIEW_DETAIL_SUBPARTITION +CDB_MVIEW_JOINS +CDB_MVIEW_KEYS +CDB_MVIEW_LOGS +CDB_MVIEW_LOG_FILTER_COLS +CDB_MVIEW_REFRESH_TIMES +CDB_MVREF_CHANGE_STATS +CDB_MVREF_RUN_STATS +CDB_MVREF_STATS +CDB_MVREF_STATS_PARAMS +CDB_MVREF_STATS_SYS_DEFAULTS +CDB_MVREF_STMT_STATS +CDB_NESTED_TABLES +CDB_NESTED_TABLE_COLS +CDB_NETWORK_ACLS +CDB_NETWORK_ACL_PRIVILEGES +CDB_OBJECTS +CDB_OBJECTS_AE +CDB_OBJECT_SIZE +CDB_OBJECT_TABLES +CDB_OBJECT_USAGE +CDB_OBJ_AUDIT_OPTS +CDB_OBJ_COLATTRS +CDB_OLDIMAGE_COLUMNS +CDB_OPANCILLARY +CDB_OPARGUMENTS +CDB_OPBINDINGS +CDB_OPERATORS +CDB_OPERATOR_COMMENTS +CDB_OPTSTAT_OPERATIONS +CDB_OPTSTAT_OPERATION_TASKS +CDB_OUTLINES +CDB_OUTLINE_HINTS +CDB_OUTSTANDING_ALERTS +CDB_PARALLEL_EXECUTE_CHUNKS +CDB_PARALLEL_EXECUTE_TASKS +CDB_PARTIAL_DROP_TABS +CDB_PART_COL_STATISTICS +CDB_PART_HISTOGRAMS +CDB_PART_INDEXES +CDB_PART_KEY_COLUMNS +CDB_PART_KEY_COLUMNS_V$ +CDB_PART_LOBS +CDB_PART_TABLES +CDB_PDBS +CDB_PDB_HISTORY +CDB_PDB_SAVED_STATES +CDB_PDB_SNAPSHOTS +CDB_PENDING_CONV_TABLES +CDB_PENDING_TRANSACTIONS +CDB_PLSQL_COLL_TYPES +CDB_PLSQL_OBJECT_SETTINGS +CDB_PLSQL_TYPES +CDB_PLSQL_TYPE_ATTRS +CDB_POLICIES +CDB_POLICY_ATTRIBUTES +CDB_POLICY_CONTEXTS +CDB_POLICY_GROUPS +CDB_PRIVATE_TEMP_TABLES +CDB_PRIV_AUDIT_OPTS +CDB_PRIV_CAPTURES +CDB_PROCEDURES +CDB_PROFILES +CDB_PROPAGATION +CDB_PROPERTIES +CDB_PROXIES +CDB_PTC_APPLY_PROGRESS +CDB_QUEUES +CDB_QUEUE_PUBLISHERS +CDB_QUEUE_SCHEDULES +CDB_QUEUE_SUBSCRIBERS +CDB_QUEUE_TABLES +CDB_RCHILD +CDB_RECOVERABLE_SCRIPT +CDB_RECOVERABLE_SCRIPT_BLOCKS +CDB_RECOVERABLE_SCRIPT_ERRORS +CDB_RECOVERABLE_SCRIPT_HIST +CDB_RECOVERABLE_SCRIPT_PARAMS +CDB_RECYCLEBIN +CDB_REDEFINITION_ERRORS +CDB_REDEFINITION_OBJECTS +CDB_REDEFINITION_STATUS +CDB_REDO_DB +CDB_REDO_LOG +CDB_REFRESH +CDB_REFRESH_CHILDREN +CDB_REFS +CDB_REGISTERED_ARCHIVED_LOG +CDB_REGISTERED_MVIEWS +CDB_REGISTERED_SNAPSHOTS +CDB_REGISTRY +CDB_REGISTRY_DATABASE +CDB_REGISTRY_DEPENDENCIES +CDB_REGISTRY_ERROR +CDB_REGISTRY_HIERARCHY +CDB_REGISTRY_HISTORY +CDB_REGISTRY_LOG +CDB_REGISTRY_PROGRESS +CDB_REGISTRY_SCHEMAS +CDB_REGISTRY_SQLPATCH +CDB_REGISTRY_SQLPATCH_RU_INFO +CDB_REPLICATION_PROCESS_EVENTS +CDB_REPL_DBNAME_MAPPING +CDB_RESOURCE_INCARNATIONS +CDB_RESUMABLE +CDB_REWRITE_EQUIVALENCES +CDB_RGROUP +CDB_ROLES +CDB_ROLE_PRIVS +CDB_ROLLBACK_SEGS +CDB_ROLLING_DATABASES +CDB_ROLLING_EVENTS +CDB_ROLLING_PARAMETERS +CDB_ROLLING_PLAN +CDB_ROLLING_STATISTICS +CDB_ROLLING_STATUS +CDB_ROLLING_UNSUPPORTED +CDB_ROOT_DBID +CDB_ROPP$X$KCCAL +CDB_ROPP$X$KCCBF +CDB_ROPP$X$KCCBI +CDB_ROPP$X$KCCBL +CDB_ROPP$X$KCCBP +CDB_ROPP$X$KCCBS +CDB_ROPP$X$KCCDC +CDB_ROPP$X$KCCDI +CDB_ROPP$X$KCCDI2 +CDB_ROPP$X$KCCFE +CDB_ROPP$X$KCCFN +CDB_ROPP$X$KCCIC +CDB_ROPP$X$KCCLE +CDB_ROPP$X$KCCLH +CDB_ROPP$X$KCCOR +CDB_ROPP$X$KCCPA +CDB_ROPP$X$KCCPD +CDB_ROPP$X$KCCPDB +CDB_ROPP$X$KCCPIC +CDB_ROPP$X$KCCRT +CDB_ROPP$X$KCCSL +CDB_ROPP$X$KCCTF +CDB_ROPP$X$KCCTIR +CDB_ROPP$X$KCCTS +CDB_ROPP$X$KCPDBINC +CDB_ROPP$X$KCVDF +CDB_ROPP$X$KCVFH +CDB_ROPP$X$KCVFHALL +CDB_ROPP$X$KCVFHTMP +CDB_RPP$X$KCCAL +CDB_RPP$X$KCCBF +CDB_RPP$X$KCCBI +CDB_RPP$X$KCCBL +CDB_RPP$X$KCCBP +CDB_RPP$X$KCCBS +CDB_RPP$X$KCCDC +CDB_RPP$X$KCCDI +CDB_RPP$X$KCCDI2 +CDB_RPP$X$KCCFE +CDB_RPP$X$KCCFN +CDB_RPP$X$KCCIC +CDB_RPP$X$KCCLE +CDB_RPP$X$KCCLH +CDB_RPP$X$KCCOR +CDB_RPP$X$KCCPA +CDB_RPP$X$KCCPD +CDB_RPP$X$KCCPDB +CDB_RPP$X$KCCPIC +CDB_RPP$X$KCCRT +CDB_RPP$X$KCCSL +CDB_RPP$X$KCCTF +CDB_RPP$X$KCCTIR +CDB_RPP$X$KCCTS +CDB_RPP$X$KCPDBINC +CDB_RPP$X$KCVDF +CDB_RPP$X$KCVFH +CDB_RPP$X$KCVFHALL +CDB_RPP$X$KCVFHTMP +CDB_RSRC_CAPABILITY +CDB_RSRC_CATEGORIES +CDB_RSRC_CONSUMER_GROUPS +CDB_RSRC_CONSUMER_GROUP_PRIVS +CDB_RSRC_GROUP_MAPPINGS +CDB_RSRC_INSTANCE_CAPABILITY +CDB_RSRC_IO_CALIBRATE +CDB_RSRC_MANAGER_SYSTEM_PRIVS +CDB_RSRC_MAPPING_PRIORITY +CDB_RSRC_PLANS +CDB_RSRC_PLAN_DIRECTIVES +CDB_RSRC_STORAGE_POOL_MAPPING +CDB_RULES +CDB_RULESETS +CDB_RULE_SETS +CDB_RULE_SET_RULES +CDB_SCHEDULER_CHAINS +CDB_SCHEDULER_CHAIN_RULES +CDB_SCHEDULER_CHAIN_STEPS +CDB_SCHEDULER_CREDENTIALS +CDB_SCHEDULER_DB_DESTS +CDB_SCHEDULER_DESTS +CDB_SCHEDULER_EXTERNAL_DESTS +CDB_SCHEDULER_FILE_WATCHERS +CDB_SCHEDULER_GLOBAL_ATTRIBUTE +CDB_SCHEDULER_GROUPS +CDB_SCHEDULER_GROUP_MEMBERS +CDB_SCHEDULER_INCOMPATS +CDB_SCHEDULER_INCOMPAT_MEMBER +CDB_SCHEDULER_JOBS +CDB_SCHEDULER_JOB_ARGS +CDB_SCHEDULER_JOB_CLASSES +CDB_SCHEDULER_JOB_DESTS +CDB_SCHEDULER_JOB_LOG +CDB_SCHEDULER_JOB_ROLES +CDB_SCHEDULER_JOB_RUN_DETAILS +CDB_SCHEDULER_NOTIFICATIONS +CDB_SCHEDULER_PROGRAMS +CDB_SCHEDULER_PROGRAM_ARGS +CDB_SCHEDULER_REMOTE_DATABASES +CDB_SCHEDULER_REMOTE_JOBSTATE +CDB_SCHEDULER_RESOURCES +CDB_SCHEDULER_RSC_CONSTRAINTS +CDB_SCHEDULER_RUNNING_CHAINS +CDB_SCHEDULER_RUNNING_JOBS +CDB_SCHEDULER_SCHEDULES +CDB_SCHEDULER_WINDOWS +CDB_SCHEDULER_WINDOW_DETAILS +CDB_SCHEDULER_WINDOW_GROUPS +CDB_SCHEDULER_WINDOW_LOG +CDB_SCHEDULER_WINGROUP_MEMBERS +CDB_SECONDARY_OBJECTS +CDB_SECUREFILE_LOGS +CDB_SECUREFILE_LOG_INSTANCES +CDB_SECUREFILE_LOG_PARTITIONS +CDB_SECUREFILE_LOG_TABLES +CDB_SEC_RELEVANT_COLS +CDB_SEGMENTS +CDB_SEGMENTS_OLD +CDB_SENSITIVE_COLUMN_TYPES +CDB_SENSITIVE_DATA +CDB_SEQUENCES +CDB_SERVER_REGISTRY +CDB_SERVICES +CDB_SNAPSHOTS +CDB_SNAPSHOT_LOGS +CDB_SOURCE +CDB_SOURCE_AE +CDB_SQLJ_TYPES +CDB_SQLJ_TYPE_ATTRS +CDB_SQLJ_TYPE_METHODS +CDB_SQLSET +CDB_SQLSET_BINDS +CDB_SQLSET_PLANS +CDB_SQLSET_REFERENCES +CDB_SQLSET_STATEMENTS +CDB_SQLTUNE_BINDS +CDB_SQLTUNE_PLANS +CDB_SQLTUNE_RATIONALE_PLAN +CDB_SQLTUNE_STATISTICS +CDB_SQL_MANAGEMENT_CONFIG +CDB_SQL_MONITOR_USAGE +CDB_SQL_PATCHES +CDB_SQL_PLAN_BASELINES +CDB_SQL_PLAN_DIRECTIVES +CDB_SQL_PLAN_DIR_OBJECTS +CDB_SQL_PROFILES +CDB_SQL_TRANSLATIONS +CDB_SQL_TRANSLATION_PROFILES +CDB_SR_GRP_STATUS +CDB_SR_GRP_STATUS_ALL +CDB_SR_OBJ +CDB_SR_OBJ_ALL +CDB_SR_OBJ_STATUS +CDB_SR_OBJ_STATUS_ALL +CDB_SR_PARTN_OPS +CDB_SR_STLOG_EXCEPTIONS +CDB_SR_STLOG_STATS +CDB_SSCR_CAPTURE +CDB_SSCR_RESTORE +CDB_STATEMENTS +CDB_STAT_EXTENSIONS +CDB_STMT_AUDIT_OPTS +CDB_STORED_SETTINGS +CDB_STREAMS_ADD_COLUMN +CDB_STREAMS_ADMINISTRATOR +CDB_STREAMS_COLUMNS +CDB_STREAMS_DELETE_COLUMN +CDB_STREAMS_GLOBAL_RULES +CDB_STREAMS_KEEP_COLUMNS +CDB_STREAMS_MESSAGE_CONSUMERS +CDB_STREAMS_MESSAGE_RULES +CDB_STREAMS_NEWLY_SUPPORTED +CDB_STREAMS_RENAME_COLUMN +CDB_STREAMS_RENAME_SCHEMA +CDB_STREAMS_RENAME_TABLE +CDB_STREAMS_RULES +CDB_STREAMS_SCHEMA_RULES +CDB_STREAMS_SPLIT_MERGE +CDB_STREAMS_SPLIT_MERGE_HIST +CDB_STREAMS_STMTS +CDB_STREAMS_STMT_HANDLERS +CDB_STREAMS_TABLE_RULES +CDB_STREAMS_TP_COMPONENT +CDB_STREAMS_TP_COMPONENT_LINK +CDB_STREAMS_TP_COMPONENT_STAT +CDB_STREAMS_TP_DATABASE +CDB_STREAMS_TP_PATH_BOTTLENECK +CDB_STREAMS_TP_PATH_STAT +CDB_STREAMS_TRANSFORMATIONS +CDB_STREAMS_TRANSFORM_FUNCTION +CDB_STREAMS_UNSUPPORTED +CDB_SUBPARTITION_TEMPLATES +CDB_SUBPART_COL_STATISTICS +CDB_SUBPART_HISTOGRAMS +CDB_SUBPART_KEY_COLUMNS +CDB_SUBPART_KEY_COLUMNS_V$ +CDB_SUBSCR_REGISTRATIONS +CDB_SUMMARIES +CDB_SUMMARY_AGGREGATES +CDB_SUMMARY_DETAIL_TABLES +CDB_SUMMARY_JOINS +CDB_SUMMARY_KEYS +CDB_SUPPLEMENTAL_LOGGING +CDB_SYNC_CAPTURE +CDB_SYNC_CAPTURE_PREPARED_TABS +CDB_SYNC_CAPTURE_TABLES +CDB_SYNONYMS +CDB_SYS_PRIVS +CDB_TABLES +CDB_TABLESPACES +CDB_TABLESPACE_GROUPS +CDB_TABLESPACE_THRESHOLDS +CDB_TABLESPACE_USAGE_METRICS +CDB_TAB_COLS +CDB_TAB_COLS_V$ +CDB_TAB_COLUMNS +CDB_TAB_COL_STATISTICS +CDB_TAB_COMMENTS +CDB_TAB_HISTGRM_PENDING_STATS +CDB_TAB_HISTOGRAMS +CDB_TAB_IDENTITY_COLS +CDB_TAB_MODIFICATIONS +CDB_TAB_PARTITIONS +CDB_TAB_PENDING_STATS +CDB_TAB_PRIVS +CDB_TAB_STATISTICS +CDB_TAB_STATS_HISTORY +CDB_TAB_STAT_PREFS +CDB_TAB_SUBPARTITIONS +CDB_TEMP_FILES +CDB_TEMP_FREE_SPACE +CDB_THRESHOLDS +CDB_TRANSFORMATIONS +CDB_TRIGGERS +CDB_TRIGGER_COLS +CDB_TRIGGER_ORDERING +CDB_TSDP_IMPORT_ERRORS +CDB_TSDP_POLICY_CONDITION +CDB_TSDP_POLICY_FEATURE +CDB_TSDP_POLICY_PARAMETER +CDB_TSDP_POLICY_PROTECTION +CDB_TSDP_POLICY_TYPE +CDB_TSM_DESTINATION +CDB_TSM_HISTORY +CDB_TSM_SOURCE +CDB_TSTZ_TABLES +CDB_TSTZ_TAB_COLS +CDB_TS_QUOTAS +CDB_TUNE_MVIEW +CDB_TYPES +CDB_TYPE_ATTRS +CDB_TYPE_METHODS +CDB_TYPE_VERSIONS +CDB_UNDO_EXTENTS +CDB_UNUSED_COL_TABS +CDB_UNUSED_GRANTS +CDB_UNUSED_OBJPRIVS +CDB_UNUSED_OBJPRIVS_PATH +CDB_UNUSED_PRIVS +CDB_UNUSED_SYSPRIVS +CDB_UNUSED_SYSPRIVS_PATH +CDB_UNUSED_USERPRIVS +CDB_UNUSED_USERPRIVS_PATH +CDB_UPDATABLE_COLUMNS +CDB_USED_OBJPRIVS +CDB_USED_OBJPRIVS_PATH +CDB_USED_PRIVS +CDB_USED_PUBPRIVS +CDB_USED_SYSPRIVS +CDB_USED_SYSPRIVS_PATH +CDB_USED_USERPRIVS +CDB_USED_USERPRIVS_PATH +CDB_USERS +CDB_USERS_WITH_DEFPWD +CDB_USTATS +CDB_VARRAYS +CDB_VIEWS +CDB_VIEWS_AE +CDB_WAITERS +CDB_WALLET_ACES +CDB_WALLET_ACLS +CDB_WARNING_SETTINGS +CDB_WI_CAPTURE_FILES +CDB_WI_JOBS +CDB_WI_OBJECTS +CDB_WI_PATTERNS +CDB_WI_PATTERN_ITEMS +CDB_WI_STATEMENTS +CDB_WI_TEMPLATES +CDB_WI_TEMPLATE_EXECUTIONS +CDB_WORKLOAD_ACTIVE_USER_MAP +CDB_WORKLOAD_CAPTURES +CDB_WORKLOAD_CONNECTION_MAP +CDB_WORKLOAD_DIV_SUMMARY +CDB_WORKLOAD_FILTERS +CDB_WORKLOAD_GROUP_ASSIGNMENTS +CDB_WORKLOAD_REPLAYS +CDB_WORKLOAD_REPLAY_CLIENTS +CDB_WORKLOAD_REPLAY_DIVERGENCE +CDB_WORKLOAD_REPLAY_FILTER_SET +CDB_WORKLOAD_REPLAY_SCHEDULES +CDB_WORKLOAD_REPLAY_THREAD +CDB_WORKLOAD_SCHEDULE_CAPTURES +CDB_WORKLOAD_SCHEDULE_ORDERING +CDB_WORKLOAD_SQL_MAP +CDB_WORKLOAD_TRACKED_COMMITS +CDB_WORKLOAD_USER_MAP +CDB_XDS_ACL_REFRESH +CDB_XDS_ACL_REFSTAT +CDB_XDS_LATEST_ACL_REFSTAT +CDB_XMLSCHEMA_LEVEL_VIEW +CDB_XMLSCHEMA_LEVEL_VIEW_DUP +CDB_XMLTYPE_COLS +CDB_XML_INDEXES +CDB_XML_NESTED_TABLES +CDB_XML_OUT_OF_LINE_TABLES +CDB_XML_SCHEMAS +CDB_XML_SCHEMA_ATTRIBUTES +CDB_XML_SCHEMA_COMPLEX_TYPES +CDB_XML_SCHEMA_DEPENDENCY +CDB_XML_SCHEMA_ELEMENTS +CDB_XML_SCHEMA_IMPORTS +CDB_XML_SCHEMA_INCLUDES +CDB_XML_SCHEMA_NAMESPACES +CDB_XML_SCHEMA_SIMPLE_TYPES +CDB_XML_SCHEMA_SUBSTGRP_HEAD +CDB_XML_SCHEMA_SUBSTGRP_MBRS +CDB_XML_TABLES +CDB_XML_TAB_COLS +CDB_XML_VIEWS +CDB_XML_VIEW_COLS +CDB_XSTREAM_ADMINISTRATOR +CDB_XSTREAM_INBOUND +CDB_XSTREAM_INBOUND_PROGRESS +CDB_XSTREAM_OUTBOUND +CDB_XSTREAM_OUTBOUND_PROGRESS +CDB_XSTREAM_OUT_SUPPORT_MODE +CDB_XSTREAM_RULES +CDB_XSTREAM_SPLIT_MERGE +CDB_XSTREAM_SPLIT_MERGE_HIST +CDB_XSTREAM_STMTS +CDB_XSTREAM_STMT_HANDLERS +CDB_XSTREAM_TRANSFORMATIONS +CDB_XS_ACES +CDB_XS_ACLS +CDB_XS_ACL_PARAMETERS +CDB_XS_ACTIVE_SESSIONS +CDB_XS_APPLIED_POLICIES +CDB_XS_AUDIT_POLICY_OPTIONS +CDB_XS_COLUMN_CONSTRAINTS +CDB_XS_DYNAMIC_ROLES +CDB_XS_ENABLED_AUDIT_POLICIES +CDB_XS_ENB_AUDIT_POLICIES +CDB_XS_EXTERNAL_PRINCIPALS +CDB_XS_IMPLIED_PRIVILEGES +CDB_XS_INHERITED_REALMS +CDB_XS_MODIFIED_POLICIES +CDB_XS_NS_TEMPLATES +CDB_XS_NS_TEMPLATE_ATTRIBUTES +CDB_XS_OBJECTS +CDB_XS_POLICIES +CDB_XS_PRINCIPALS +CDB_XS_PRIVILEGES +CDB_XS_PRIVILEGE_GRANTS +CDB_XS_PROXY_ROLES +CDB_XS_REALM_CONSTRAINTS +CDB_XS_ROLES +CDB_XS_ROLE_GRANTS +CDB_XS_SECURITY_CLASSES +CDB_XS_SECURITY_CLASS_DEP +CDB_XS_SESSIONS +CDB_XS_SESSION_NS_ATTRIBUTES +CDB_XS_SESSION_ROLES +CDB_XS_USERS +CDB_XTERNAL_LOC_PARTITIONS +CDB_XTERNAL_LOC_SUBPARTITIONS +CDB_XTERNAL_PART_TABLES +CDB_XTERNAL_TAB_PARTITIONS +CDB_XTERNAL_TAB_SUBPARTITIONS +CDB_XT_HIVE_TABLES_VALIDATION +CDB_ZONEMAPS +CDB_ZONEMAP_MEASURES +CDR_DELETE_ROW_EXISTS +CDR_DELETE_ROW_MISSING +CDR_FAILED +CDR_FAILED_RESOLUTIONS +CDR_INSERT_ROW_EXISTS +CDR_SUCCESSFUL +CDR_SUCCESSFUL_RESOLUTIONS +CDR_UPDATE_ROW_EXISTS +CDR_UPDATE_ROW_MISSING +CELLHASH +CELLMEMORY +CELLNAME +CELL_ALERT_SUMMARY +CELL_FLASH_CACHE +CELL_HASH +CELL_HASHVAL +CELL_NAME +CELL_PATH +CELL_TYPE +CELL_UNCOMPRESSED_BYTES_DELTA +CELL_UNCOMPRESSED_BYTES_TOTAL +CERT_ID +CFG_ID +CHAIN_CNT +CHAIN_ID +CHAIN_IS_CYCLE +CHAIN_NAME +CHAIN_OWNER +CHAIN_ROW_EXCESS_DELTA +CHAIN_ROW_EXCESS_TOTAL +CHAIN_SIGNATURE +CHAIN_SIGNATURE_HASH +CHANGE# +CHANGELAG +CHANGESCN8 +CHANGESCN_BASE +CHANGESCN_WRAP +CHANGE_DUPKEY_ERROR_INDEX +CHANGE_REASON +CHANGE_TABLE_NAME +CHANGE_TABLE_OWNER +CHANGE_TIME +CHANNEL +CHARACTER_SET +CHARACTER_SET_NAME +CHARACTER_SID +CHAR_COL_DECL_LENGTH +CHAR_LENGTH +CHAR_USED +CHECKED_ROLE +CHECKPOINT_CHANGE# +CHECKPOINT_COUNT +CHECKPOINT_INTERVAL +CHECKPOINT_RETENTION_TIME +CHECKPOINT_SCN +CHECKPOINT_TIME +CHECKSUM +CHECK_ACL_REWRITE +CHECK_AGENT_VERSION. +CHECK_FULL_DVAUTH. +CHECK_ID +CHECK_NAME +CHECK_TAB_DVAUTH. +CHECK_TS_DVAUTH. +CHECK_UPGRADE. +CHILD# +CHILD_ADDR +CHILD_ADDRESS +CHILD_COUNT +CHILD_HANDLE +CHILD_IDX +CHILD_JOIN_COLUMN +CHILD_JOIN_OWNER +CHILD_JOIN_TABLE +CHILD_LATCH +CHILD_LEVEL_NAME +CHILD_LOCK +CHILD_NUMBER +CHILD_PIN +CHK_OPTION +CHK_SDO_DIMNAME. +CHNF$_REG_INFO.CHNF$_REG_INFO +CHOOSE +CHUNK +CHUNK# +CHUNKS +CHUNK_ADDRESS +CHUNK_ALLOCATED +CHUNK_COM +CHUNK_ID +CHUNK_NUMBER +CHUNK_PTR +CHUNK_SIZE +CHUNK_TABLESPACE +CHUNK_TYPE +CHUNK_USED +CH_ID +CIRCUIT +CKPT_BLOCK_WRITES +CLASS +CLASS# +CLASSIFICATION +CLASS_INDEX +CLASS_NAME +CLAUSE +CLAUSE_ID# +CLAUSE_NAME +CLAUSE_NAME. +CLAUSE_OPTION +CLA_LEN +CLB_GOAL +CLEANDC +CLEANUP_ATTEMPTS +CLEANUP_LATENCY +CLEANUP_OWNER +CLEANUP_PROCESS +CLEANUP_TIME +CLEAN_PDB_RESTORE_POINT +CLIENT +CLIENT# +CLIENTADDR +CLIENTID +CLIENTIDENTIFIER +CLIENTOPAQUEIDENTIFIER +CLIENTPORT +CLIENT_CHARSET +CLIENT_CONNECTION +CLIENT_DBID +CLIENT_DRIVER +CLIENT_HOST +CLIENT_ID +CLIENT_IDENTIFIER +CLIENT_INFO +CLIENT_IP_ADDRESS. +CLIENT_LOBATTR +CLIENT_NAME +CLIENT_OCI_LIBRARY +CLIENT_OS_USER +CLIENT_PID +CLIENT_PROCESS +CLIENT_PROGRAM_NAME +CLIENT_REGID +CLIENT_REQ_TIMEOUTS +CLIENT_RESULT_CACHE_STATS$ +CLIENT_ROLE +CLIENT_STATUS +CLIENT_TAG +CLIENT_TYPE +CLIENT_VERSION +CLOCK +CLONECNT +CLONED_CAPTURE_NAME +CLONED_CAPTURE_STATUS +CLONED_FROM_PDB_DBID +CLONED_FROM_PDB_GUID +CLONED_FROM_PDB_NAME +CLONED_QUEUE_NAME +CLONED_QUEUE_OWNER +CLONED_STREAMS_NAME +CLONED_XSTREAM_NAME +CLONEFILENAME +CLONETAG +CLOSE_REASON +CLOSE_TIME +CLSID +CLSNAME +CLSNAME_ID +CLSOID +CLS_NAME +CLU +CLUSTER +CLUSTERING +CLUSTERING_FACTOR +CLUSTERING_TYPE +CLUSTERNAME +CLUSTER_BY_ROWID +CLUSTER_ID +CLUSTER_NAME +CLUSTER_OWNER +CLUSTER_TYPE +CLUSTER_WAIT_TIME +CLU_COLUMN_NAME +CLWAIT_DELTA +CLWAIT_TOTAL +CMD_RULE_NAME +CMON_ADDR +CNT_500B +CNT_8K +CNUM_MSGS +CNUM_REPL +CNUM_SET +CNUM_WRITE +COALESCE_SQ +CODE_COVERAGE. +CODE_ID# +CODE_SIZE +COL +COLD_BYTES_READ +COLD_BYTES_WRITTEN +COLD_READS +COLD_USED_MB +COLD_WRITES +COLID +COLLATED_COLUMN_ID +COLLATION +COLLECTION_LEVEL +COLL_TYPE +COLS +COLUMN_COUNT +COLUMN_EXPRESSION +COLUMN_FUNCTION +COLUMN_GROUP_NAME +COLUMN_ID +COLUMN_INT_ID +COLUMN_LENGTH +COLUMN_LIST +COLUMN_NAME +COLUMN_NUMBER +COLUMN_OPTION +COLUMN_POSITION +COLUMN_PRIVILEGES +COLUMN_STATS +COLUMN_TYPE +COLUMN_USAGE +COLUMN_VALUE +COL_NAME +COM +COMMAND +COMMAND_ID +COMMAND_LINE +COMMAND_NAME +COMMAND_TYPE +COMMENT$TEXT +COMMENTS +COMMENTS$ +COMMENT_TEXT +COMMIT# +COMMITSCN +COMMITTED_DATA_ONLY +COMMIT_JTIME +COMMIT_OUTCOME +COMMIT_POINT_STRENGTH +COMMIT_POSITION +COMMIT_SCN +COMMIT_SCN_BASED +COMMIT_TIME +COMMIT_TIMESTAMP +COMMIT_WAIT_SCN +COMMIT_WTIME +COMMON +COMP +COMP1_NAME +COMP1_VAL +COMP2_NAME +COMP2_VAL +COMP3_NAME +COMP3_VAL +COMP4_NAME +COMP4_VAL +COMP5_NAME +COMP5_VAL +COMPARE_OLD_ON_DELETE +COMPARE_OLD_ON_UPDATE +COMPARISON_MODE +COMPARISON_NAME +COMPATIBILITY +COMPATIBLE +COMPATIBLE_VERSION +COMPENSATING_TXN_NAME +COMPENSATING_XID +COMPID +COMPILATION_ORIGIN +COMPILE_STATE +COMPLETED +COMPLETED_ACTIONS +COMPLETE_STATS_AVAILABLE +COMPLETION_TIME +COMPLEX_TYPE +COMPLEX_TYPE_NAME +COMPONENT +COMPONENT_CHANGED_TIME +COMPONENT_DB +COMPONENT_ID +COMPONENT_NAME +COMPONENT_RULE_TYPE +COMPONENT_TYPE +COMPOSITE +COMPOSITE_TARGET_GUID +COMPOSITE_TARGET_NAME +COMPOSITE_TARGET_TYPE +COMPOUND_INDEX +COMPRESSED +COMPRESSION +COMPRESSION_LEVEL +COMPRESSION_NUMBER +COMPRESSION_RATIO +COMPRESS_FOR +COMP_ID +COMP_NAME +CONCUR +CONCURRENCY_WAIT_TIME +CONCURRENT_EXECUTION +CONDITION +CONDITIONS_PROCESSED +CONDITION_DAYS +CONDITION_EVAL_OPT +CONDITION_TYPE +CONF# +CONFIGURE_DV. +CONFIGURE_DV_INTERNAL. +CONFIGURE_DV_INTERNAL.CONFIG_PART1 +CONFIGURE_DV_INTERNAL.CONFIG_PART2 +CONFIGURE_DV_INTERNAL.CONFIG_RAISE_ERR +CONFIGURE_OLS. +CONFIRMED +CONFLICT_HANDLER_NAME +CONFLICT_INFO +CONFLICT_MOD +CONFLICT_TYPE +CONFTYPE +CONFVAL +CONFVAL_HASH +CONF_INDX +CONNECTIONS +CONNECTION_ADDR +CONNECTION_MODE +CONNECTION_POOL +CONNECTION_STATUS +CONNECTION_TEST_TYPE +CONNECTS +CONNECTS_TOTAL +CONNECT_BY_CB_WHR_ONLY +CONNECT_BY_COMBINE_SW +CONNECT_BY_COST_BASED +CONNECT_BY_ELIM_DUPS +CONNECT_BY_FILTERING +CONNECT_CREDENTIAL_NAME +CONNECT_CREDENTIAL_OWNER +CONNECT_IDENTIFIER +CONNECT_INFO +CONNECT_STRING +CONNECT_TIME +CONNECT_TIME_AUTO_CORRECT +CONNECT_TIME_SCALE +CONNECT_USER +CONN_ID +CONSECUTIVE_OCCURRENCES +CONSISTENT_CHANGES +CONSISTENT_GETS +CONSISTENT_SOLVE_SPEC +CONSTRAINT_LEVEL +CONSTRAINT_NAME +CONSTRAINT_TYPE +CONSUMED_CPU_TIME +CONSUMED_SCN +CONSUMER_GROUP +CONSUMER_GROUP_ID +CONSUMER_GROUP_NAME +CONSUMER_NAME +CONS_RID +CONS_RSCN +CONS_SCN +CONS_TYPE_NAME +CONS_TYPE_ONLY +CONS_TYPE_OWNER +CONTAINERS +CONTAINERS_DEFAULT +CONTAINER_COLUMN +CONTAINER_DATA +CONTAINER_GUID +CONTAINER_ID +CONTAINER_MAP +CONTAINER_MAP_OBJECT +CONTAINER_NAME +CONTAINER_OWNER +CONTAINS_PLSQL +CONTAINS_VIEWS +CONTENTS +CONTENTSCHEMAIS. +CONTEXT +CONTEXT_ID +CONTEXT_SIZE +CONTEXT_TYPE +CONTROL +CONTROLFILE_CHANGE# +CONTROLFILE_CONVERTED +CONTROLFILE_CREATED +CONTROLFILE_INCLUDED +CONTROLFILE_SEQUENCE# +CONTROLFILE_TIME +CONTROLFILE_TYPE +CONVERTED_FILE +CONVERT_COUNT +CONVERT_OPT_DUBVALUE +CONVERT_OPT_EXPRESS +CONVERT_OPT_GETVALUE +CONVERT_OPT_NODEADLOCKBLOCK +CONVERT_OPT_NODEADLOCKWAIT +CONVERT_OPT_NOQUEUE +CONVERT_OPT_NOVALUE +CONVERT_OPT_PUTVALUE +CONVERT_TYPE +CON_DBID +CON_ID +CON_NAME +CON_UID +COOKIE +COORDINATOR_ID +COORDINATOR_INSTANCE +COORDINATOR_INSTANCE_ID +COORDINATOR_PID +COORD_INSTANCE_ID +COORD_LWM_LAG +COORD_SESSION_ID +COORD_TOTAL_APPLIED +COORD_TOTAL_RECEIVED +COORD_TOTAL_ROLLBACKS +COORD_TOTAL_WAIT_CMTS +COORD_TOTAL_WAIT_DEPS +COPY# +COPY_KEY +COPY_RECID +COPY_STAMP +CORRELATED_ID +CORRELATION +CORRELATION_LEVEL +CORRUPT +CORRUPTION_CHANGE# +CORRUPTION_TYPE +CORRUPT_XID +COST +COST_XML_QUERY_REWRITE +COUNT +COUNTER +COUNT_500B +COUNT_8K +COUNT_ROWS +COUPLING +CPU +CPUPERCALL +CPUPERREQUEST +CPUTIME +CPUWAITPERREQUEST +CPU_CAPABLE +CPU_CONSUMED_TIME +CPU_CORE_COUNT +CPU_CORE_COUNT_CURRENT +CPU_CORE_COUNT_HIGHWATER +CPU_COST +CPU_COSTING +CPU_COUNT +CPU_COUNT_CURRENT +CPU_COUNT_HIGHWATER +CPU_DECISIONS +CPU_DECISIONS_EXCLUSIVE +CPU_DECISIONS_WON +CPU_DEQUEUE_TIME +CPU_MANAGED +CPU_METHOD +CPU_P1 +CPU_P2 +CPU_P3 +CPU_P4 +CPU_P5 +CPU_P6 +CPU_P7 +CPU_P8 +CPU_SECS_CUR +CPU_SECS_TOTAL +CPU_SOCKET_COUNT +CPU_SOCKET_COUNT_CURRENT +CPU_SOCKET_COUNT_HIGHWATER +CPU_TIME +CPU_TIME_DELTA +CPU_TIME_TOTAL +CPU_USAGE_AVG +CPU_USAGE_SUM +CPU_USAGE_SUMX2 +CPU_USED +CPU_UTILIZATION_LIMIT +CPU_WAITS +CPU_WAIT_TIME +CQ_TOTALQ +CQ_WAIT +CRE +CREATED +CREATED_APPID +CREATED_VSNID +CREATETIME +CREATE_BYTES +CREATE_DATE +CREATE_INDEX +CREATE_OR_FETCH_ILABEL. +CREATE_SCN +CREATE_TIME +CREATIONTIME +CREATION_CHANGE# +CREATION_DATE +CREATION_DATE_HASH +CREATION_DURATION +CREATION_SCN +CREATION_TIME +CREATION_TIMESTAMP +CREATOR +CREATOR_ADDR +CREATOR_DBID +CREATOR_DBNAME +CREATOR_ID +CREATOR_INSTANCE_NAME +CREATOR_INSTANCE_NUMBER +CREATOR_INSTANCE_SERIAL +CREATOR_PDBGUID +CREATOR_PDBID +CREATOR_PDBNAME +CREATOR_PDBUID +CREATOR_SERIAL# +CREATOR_UID +CREDENTIAL_NAME +CREDENTIAL_OWNER +CRITERIA +CRITICAL_FACTOR +CRITICAL_INCIDENTS +CRITICAL_INICDENTS +CRITICAL_OPERATOR +CRITICAL_VALUE +CRMODE +CROSSEDITION +CROSSEDITION_TRIGGER_MISMATCH +CROSS_STREAM_JOBS +CRSRUN +CRSTOTAL +CRT_SCN +CRT_TIME +CR_2HOP +CR_2HOP_TIME +CR_3HOP +CR_3HOP_TIME +CR_BLOCK +CR_BLOCK_TIME +CR_BUFFER_GETS +CR_BUSY +CR_BUSY_TIME +CR_CHANGE +CR_CONGESTED +CR_CONGESTED_TIME +CR_GET +CR_OPERATIONS +CR_REQUESTS +CR_TRANSFER +CR_TRANSFERS +CSCN +CSF +CSPILL_MSGS +CS_SRS_TRIGGER. +CTIME +CTMHASH +CTXAGGIMP.ODCIAGGREGATEINITIALIZE +CTXAGGIMP.ODCIAGGREGATEITERATE +CTXAGGIMP.ODCIAGGREGATEMERGE +CTXAGGIMP.ODCIAGGREGATETERMINATE +CTXAGGIMP.ODCIAGGREGATEWRAPCONTEXT +CTX_ADM. +CTX_ADM.DROP_USER_OBJECTS +CTX_ADM.MARK_FAILED +CTX_ADM.RECOVER +CTX_ADM.RESET_AUTO_OPTIMIZE_STATUS +CTX_ADM.SET_PARAMETER +CTX_ADM.SHUTDOWN +CTX_ADM.STOP_OPTIMIZE +CTX_ADM.TEST_EXTPROC +CTX_ANL. +CTX_ANL.ADD_DICTIONARY +CTX_ANL.DROP_DICTIONARY +CTX_CATSEARCH. +CTX_CATSEARCH.CATSEARCH +CTX_CLS. +CTX_CLS.CLUSTERING +CTX_CLS.SA_DROP_MODEL +CTX_CLS.SA_TRAIN_MODEL +CTX_CLS.TRAIN +CTX_CONTAINS. +CTX_CONTAINS.TEXTCONTAINS +CTX_DDL. +CTX_DDL.ADD_ATTR_SECTION +CTX_DDL.ADD_AUTO_OPTIMIZE +CTX_DDL.ADD_FIELD_SECTION +CTX_DDL.ADD_FILTER_SECTION +CTX_DDL.ADD_INDEX +CTX_DDL.ADD_MDATA +CTX_DDL.ADD_MDATA_COLUMN +CTX_DDL.ADD_MDATA_SECTION +CTX_DDL.ADD_MVDATA_SECTION +CTX_DDL.ADD_NDATA_SECTION +CTX_DDL.ADD_SDATA +CTX_DDL.ADD_SDATA_COLUMN +CTX_DDL.ADD_SDATA_SECTION +CTX_DDL.ADD_SEC_GRP_ATTR_VAL +CTX_DDL.ADD_SPECIAL_SECTION +CTX_DDL.ADD_STOPCLASS +CTX_DDL.ADD_STOPTHEME +CTX_DDL.ADD_STOPWORD +CTX_DDL.ADD_STOP_SECTION +CTX_DDL.ADD_SUB_LEXER +CTX_DDL.ADD_ZONE_SECTION +CTX_DDL.ALTER_INDEX +CTX_DDL.COPY_POLICY +CTX_DDL.CREATE_INDEX_SET +CTX_DDL.CREATE_POLICY +CTX_DDL.CREATE_PREFERENCE +CTX_DDL.CREATE_SECTION_GROUP +CTX_DDL.CREATE_SHADOW_INDEX +CTX_DDL.CREATE_STOPLIST +CTX_DDL.DELETE_MVDATA_VALUES +CTX_DDL.DROP_INDEX_SET +CTX_DDL.DROP_POLICY +CTX_DDL.DROP_PREFERENCE +CTX_DDL.DROP_SECTION_GROUP +CTX_DDL.DROP_SHADOW_INDEX +CTX_DDL.DROP_STOPLIST +CTX_DDL.EXCHANGE_SHADOW_INDEX +CTX_DDL.INSERT_MVDATA_VALUES +CTX_DDL.OPTIMIZE_INDEX +CTX_DDL.POPULATE_PENDING +CTX_DDL.RECREATE_INDEX_ONLINE +CTX_DDL.REMOVE_AUTO_OPTIMIZE +CTX_DDL.REMOVE_INDEX +CTX_DDL.REMOVE_MDATA +CTX_DDL.REMOVE_OVERLAP_DOLLARS +CTX_DDL.REMOVE_SDATA +CTX_DDL.REMOVE_SECTION +CTX_DDL.REMOVE_STOPCLASS +CTX_DDL.REMOVE_STOPTHEME +CTX_DDL.REMOVE_STOPWORD +CTX_DDL.REMOVE_SUB_LEXER +CTX_DDL.REM_SEC_GRP_ATTR_VAL +CTX_DDL.REPLACE_INDEX_METADATA +CTX_DDL.REPOPULATE_DOLLARN +CTX_DDL.SET_ATTRIBUTE +CTX_DDL.SET_SECTION_ATTRIBUTE +CTX_DDL.SET_SEC_GRP_ATTR +CTX_DDL.SPLIT_DOLLARI +CTX_DDL.SPLIT_ZONE_TOKENS +CTX_DDL.SYNC_INDEX +CTX_DDL.UNSET_ATTRIBUTE +CTX_DDL.UNSET_SECTION_ATTRIBUTE +CTX_DDL.UNSET_SEC_GRP_ATTR +CTX_DDL.UPDATE_MVDATA_SET +CTX_DDL.UPDATE_POLICY +CTX_DDL.UPDATE_SDATA +CTX_DDL.UPDATE_SUB_LEXER +CTX_DDL.ZONE_TO_FIELD +CTX_DOC. +CTX_DOC.DIRECT_IFIL_BLOB +CTX_DOC.FILTER +CTX_DOC.FUNC_EVAL +CTX_DOC.GET_KEY_TYPE +CTX_DOC.GIST +CTX_DOC.HIGHLIGHT +CTX_DOC.HIGHLIGHT_CLOB_QUERY +CTX_DOC.IFILTER +CTX_DOC.MARKUP +CTX_DOC.MARKUP_CLOB_QUERY +CTX_DOC.PKENCODE +CTX_DOC.POLICY_FILTER +CTX_DOC.POLICY_GIST +CTX_DOC.POLICY_HIGHLIGHT +CTX_DOC.POLICY_HIGHLIGHT_CLOB_QUERY +CTX_DOC.POLICY_LANGUAGES +CTX_DOC.POLICY_MARKUP +CTX_DOC.POLICY_MARKUP_CLOB_QUERY +CTX_DOC.POLICY_NOUN_PHRASES +CTX_DOC.POLICY_PART_OF_SPEECH +CTX_DOC.POLICY_SNIPPET +CTX_DOC.POLICY_SNIPPET_CLOB_QUERY +CTX_DOC.POLICY_STEMS +CTX_DOC.POLICY_THEMES +CTX_DOC.POLICY_TOKENS +CTX_DOC.QUERY_IMCU +CTX_DOC.SENTIMENT +CTX_DOC.SENTIMENT_AGGREGATE +CTX_DOC.SET_KEY_TYPE +CTX_DOC.SNIPPET +CTX_DOC.SNIPPET_CLOB_QUERY +CTX_DOC.THEMES +CTX_DOC.TOKENS +CTX_ENTITY. +CTX_ENTITY.ADD_EXTRACT_RULE +CTX_ENTITY.ADD_STOP_ENTITY +CTX_ENTITY.COMPILE +CTX_ENTITY.CREATE_EXTRACT_POLICY +CTX_ENTITY.DROP_EXTRACT_POLICY +CTX_ENTITY.EXTRACT +CTX_ENTITY.REMOVE_EXTRACT_RULE +CTX_ENTITY.REMOVE_STOP_ENTITY +CTX_ENTITY_EXTRACTOR.CTX_ENTITY_EXTRACTOR +CTX_ENTITY_EXTRACTOR.EXTRACTRDF +CTX_ENTITY_EXTRACTOR.GETDESCRIPTION +CTX_ENTITY_EXTRACTOR.RDFRETURNTYPE +CTX_FEEDBACK_ITEM_TYPE.RANK +CTX_MATCHES. +CTX_MATCHES.MATCHES +CTX_OUTPUT. +CTX_OUTPUT.ADD_EVENT +CTX_OUTPUT.ADD_TRACE +CTX_OUTPUT.DISABLE_QUERY_STATS +CTX_OUTPUT.DUMPEDERRORS +CTX_OUTPUT.ENABLE_QUERY_STATS +CTX_OUTPUT.END_LOG +CTX_OUTPUT.END_QUERY_LOG +CTX_OUTPUT.GET_TRACE_VALUE +CTX_OUTPUT.LOGFILENAME +CTX_OUTPUT.LOGFILEOVERWRITE +CTX_OUTPUT.LOGGING +CTX_OUTPUT.LOG_TRACES +CTX_OUTPUT.REMOVE_EVENT +CTX_OUTPUT.REMOVE_TRACE +CTX_OUTPUT.RESET_TRACE +CTX_OUTPUT.START_LOG +CTX_OUTPUT.START_QUERY_LOG +CTX_QUERY. +CTX_QUERY.BROWSE_WORDS +CTX_QUERY.CHK_TXNQRY_DISBL_SWITCH +CTX_QUERY.CHK_XPATH +CTX_QUERY.COUNT_HITS +CTX_QUERY.COUNT_HITS_CLOB_QUERY +CTX_QUERY.DISABLE_TRANSACTIONAL +CTX_QUERY.EXPLAIN +CTX_QUERY.EXPLAIN_CLOB_QUERY +CTX_QUERY.FCONTAINS +CTX_QUERY.GEN_RS_ONLY_IF_LAST_SEQ +CTX_QUERY.GEN_RS_ONLY_ON_LAST_SEQ +CTX_QUERY.HFEEDBACK +CTX_QUERY.HFEEDBACK_CLOB_QUERY +CTX_QUERY.PREFERENCE +CTX_QUERY.REMOVE_SQE +CTX_QUERY.RESULT_SET +CTX_QUERY.RESULT_SET_CLOB_QUERY +CTX_QUERY.RESULT_SET_PX +CTX_QUERY.STORE_CTXIN_CURSOR +CTX_QUERY.STORE_SQE +CTX_QUERY.STORE_SQE_CLOB_QUERY +CTX_REPORT. +CTX_REPORT.CREATE_INDEX_SCRIPT +CTX_REPORT.CREATE_POLICY_SCRIPT +CTX_REPORT.DESCRIBE_INDEX +CTX_REPORT.DESCRIBE_POLICY +CTX_REPORT.INDEX_SIZE +CTX_REPORT.INDEX_STATS +CTX_REPORT.OFFSET_INFO +CTX_REPORT.QUERY_LOG_SUMMARY +CTX_REPORT.RESOLVE_PATTERN +CTX_REPORT.TOKEN_INFO +CTX_REPORT.TOKEN_TYPE +CTX_REPORT.VALIDATE_INDEX +CTX_REPORT.VALIDATE_MVDATA +CTX_REPORT.WILDCARD_INDEX_FRAGMENTATION +CTX_THES. +CTX_THES.ALTER_PHRASE +CTX_THES.ALTER_THESAURUS +CTX_THES.BT +CTX_THES.BTG +CTX_THES.BTI +CTX_THES.BTP +CTX_THES.CREATE_PHRASE +CTX_THES.CREATE_RELATION +CTX_THES.CREATE_THESAURUS +CTX_THES.CREATE_TRANSLATION +CTX_THES.DROP_PHRASE +CTX_THES.DROP_RELATION +CTX_THES.DROP_THESAURUS +CTX_THES.DROP_TRANSLATION +CTX_THES.EXPORT_THESAURUS +CTX_THES.HAS_RELATION +CTX_THES.IMPORT_THESAURUS +CTX_THES.NT +CTX_THES.NTG +CTX_THES.NTI +CTX_THES.NTP +CTX_THES.OUTPUT_STYLE +CTX_THES.PT +CTX_THES.RT +CTX_THES.SN +CTX_THES.SYN +CTX_THES.THES_TT +CTX_THES.TR +CTX_THES.TRSYN +CTX_THES.TT +CTX_THES.UPDATE_TRANSLATION +CTX_TREE. +CTX_TREE.ADD_NODE +CTX_TREE.DROPSEQUENCES +CTX_TREE.GET_CHILDREN +CTX_TREE.GET_NODEID_LIST +CTX_TREE.GET_NODE_ID +CTX_TREE.GET_ROOTS +CTX_TREE.REGINDEX +CTX_TREE.REGISTER_INDEX +CTX_TREE.REMOVE_NODE +CTX_ULEXER. +CTX_XPCONTAINS. +CTX_XPCONTAINS.XPCONTAINS +CUBE_AJ +CUBE_GB +CUBE_ID +CUBE_MAP_NAME +CUBE_NAME +CUBE_OWNER +CUBE_SJ +CUBE_STORAGE_TYPE +CUBE_TABLE. +CUMULATIVE +CUMULATIVE_MESSAGE_COUNT +CUM_WAIT_TIME +CURBLK +CUREXT +CURLOG +CURNO +CURRENT +CURRENTLY_USED +CURRENT_2HOP +CURRENT_2HOP_TIME +CURRENT_3HOP +CURRENT_3HOP_TIME +CURRENT_500B +CURRENT_8K +CURRENT_ACTIVE_TIME +CURRENT_AUDIT_SIZE +CURRENT_BLOCK +CURRENT_BLOCK# +CURRENT_BLOCK_TIME +CURRENT_BUSY +CURRENT_BUSY_TIME +CURRENT_CONGESTED +CURRENT_CONGESTED_TIME +CURRENT_CONSUMED_CPU_TIME +CURRENT_CONSUMER_GROUP +CURRENT_CONSUMER_GROUP_ID +CURRENT_CPU_WAITS +CURRENT_CPU_WAIT_TIME +CURRENT_DIF_COUNT +CURRENT_ELAPSED_TIME +CURRENT_ENQ_SEQ +CURRENT_FILE# +CURRENT_FMR +CURRENT_GROUP +CURRENT_GROUP# +CURRENT_IDLE_TIME +CURRENT_INSTANCE +CURRENT_IO_SERVICE_TIME +CURRENT_IO_SERVICE_WAITS +CURRENT_JOB_NAME +CURRENT_LARGE_READ_MEGABYTES +CURRENT_LARGE_READ_REQUESTS +CURRENT_LARGE_WRITE_MEGABYTES +CURRENT_LARGE_WRITE_REQUESTS +CURRENT_LOGICAL_IOS +CURRENT_MASTER +CURRENT_OBJ# +CURRENT_OBJECTS +CURRENT_PGA +CURRENT_PQS_ACTIVE +CURRENT_PQS_QUEUED +CURRENT_PQ_ACTIVE_TIME +CURRENT_PQ_QUEUED_TIME +CURRENT_PQ_SERVERS_ACTIVE +CURRENT_QUEUED_TIME +CURRENT_QUEUE_DURATION +CURRENT_REQUESTS +CURRENT_RESULTS +CURRENT_ROW# +CURRENT_RUN +CURRENT_SCN +CURRENT_SIZE +CURRENT_SMALL_READ_MEGABYTES +CURRENT_SMALL_READ_REQUESTS +CURRENT_SMALL_WRITE_MEGABYTES +CURRENT_SMALL_WRITE_REQUESTS +CURRENT_SNAPSHOTS +CURRENT_SNAP_ID +CURRENT_START_DATE +CURRENT_START_TIME +CURRENT_STATE +CURRENT_TIME +CURRENT_TRANSFER +CURRENT_UNDO_CONSUMPTION +CURRENT_USER +CURRENT_USERS +CURRENT_UTILIZATION +CURRENT_VALUE +CURRENT_VERSION +CURRENT_YIELDS +CURRMVNAME +CURRMVOWNER +CURROWS +CURR_DML_COMMAND +CURSIZE +CURSOR_NAME +CURSOR_NUM +CURSOR_PARTS_MISMATCH +CURSOR_SHARING_EXACT +CURSOR_TYPE +CURSTATUS_TIME +CURVAL +CUR_BUF_RATE +CUR_BYTE_PER_BUF +CUR_BYTE_RATE +CUR_CLT_BUF_RATE +CUR_CLT_BYTE_PER_BUF +CUR_CLT_BYTE_RATE +CUR_COUNT +CUR_EVENTS_PER_LOOP +CUR_EVENT_RATE +CUR_IN_CONNECT_RATE +CUR_LOOP_RATE +CUR_MSG_RATE +CUR_OUT_CONNECT_RATE +CUR_RECONNECT_RATE +CUR_SVR_BUF_RATE +CUR_SVR_BYTE_PER_BUF +CUR_SVR_BYTE_RATE +CUR_TRANSFERS +CUSTOM_FUNCTION +CUSTOM_ORDER +CUSTOM_TYPE +CU_BUFFER_GETS +CU_SIZE +CYCLES_SINCE_STATS_RESET +CYCLE_FLAG +CYCLIC_INDEX_VALUE +DAD_NAME +DALLOC +DAMAGE_DESCRIPTION +DAMAGE_MSGGRP_ID +DATA +DATABASE +DATABASE_COMPATIBILITY +DATABASE_COMPATIBLE_LEVEL +DATABASE_DSC_T.DATABASE_DSC_T +DATABASE_ID +DATABASE_INCARNATION# +DATABASE_LINK +DATABASE_MODE +DATABASE_NAME +DATABASE_NAME. +DATABASE_ROLE +DATABASE_SESSIONID +DATABASE_STATUS +DATABASE_TIME +DATABASE_TYPE +DATABLOCKS +DATAFILE_BLOCKS +DATAGUARD_BROKER +DATAGUARD_ROLE +DATAGUIDE +DATAOBJ +DATAOBJ# +DATAPUMP_DIR_OBJS +DATAPUMP_SESSIONS +DATATYPE +DATATYPE_STRING +DATA_BLK# +DATA_DEFAULT +DATA_INTEGRITY_CAPABLE +DATA_LENGTH +DATA_LEVEL +DATA_LOSS_TIME +DATA_OBJ# +DATA_OBJD# +DATA_OBJECT_ID +DATA_OBJV# +DATA_PRECISION +DATA_REQUESTS +DATA_SCALE +DATA_SECURITY_REWRITE_LIMIT +DATA_SOURCE +DATA_TYPE +DATA_TYPE_MOD +DATA_TYPE_OWNER +DATA_UPGRADED +DATA_VALIDATE +DATUM_TIME +DAY_OF_WEEK +DBA_2PC_NEIGHBORS +DBA_2PC_PENDING +DBA_ACL_NAME_MAP +DBA_ADDM_FDG_BREAKDOWN +DBA_ADDM_FINDINGS +DBA_ADDM_INSTANCES +DBA_ADDM_SYSTEM_DIRECTIVES +DBA_ADDM_TASKS +DBA_ADDM_TASK_DIRECTIVES +DBA_ADVISOR_ACTIONS +DBA_ADVISOR_COMMANDS +DBA_ADVISOR_DEFINITIONS +DBA_ADVISOR_DEF_PARAMETERS +DBA_ADVISOR_DIR_DEFINITIONS +DBA_ADVISOR_DIR_INSTANCES +DBA_ADVISOR_DIR_TASK_INST +DBA_ADVISOR_EXECUTIONS +DBA_ADVISOR_EXECUTION_TYPES +DBA_ADVISOR_EXEC_PARAMETERS +DBA_ADVISOR_FDG_BREAKDOWN +DBA_ADVISOR_FINDINGS +DBA_ADVISOR_FINDING_NAMES +DBA_ADVISOR_JOURNAL +DBA_ADVISOR_LOG +DBA_ADVISOR_OBJECTS +DBA_ADVISOR_OBJECT_TYPES +DBA_ADVISOR_PARAMETERS +DBA_ADVISOR_PARAMETERS_PROJ +DBA_ADVISOR_RATIONALE +DBA_ADVISOR_RECOMMENDATIONS +DBA_ADVISOR_SQLA_COLVOL +DBA_ADVISOR_SQLA_REC_SUM +DBA_ADVISOR_SQLA_TABLES +DBA_ADVISOR_SQLA_TABVOL +DBA_ADVISOR_SQLA_WK_MAP +DBA_ADVISOR_SQLA_WK_STMTS +DBA_ADVISOR_SQLA_WK_SUM +DBA_ADVISOR_SQLPLANS +DBA_ADVISOR_SQLSTATS +DBA_ADVISOR_SQLW_COLVOL +DBA_ADVISOR_SQLW_JOURNAL +DBA_ADVISOR_SQLW_PARAMETERS +DBA_ADVISOR_SQLW_STMTS +DBA_ADVISOR_SQLW_SUM +DBA_ADVISOR_SQLW_TABLES +DBA_ADVISOR_SQLW_TABVOL +DBA_ADVISOR_SQLW_TEMPLATES +DBA_ADVISOR_TASKS +DBA_ADVISOR_TEMPLATES +DBA_ADVISOR_USAGE +DBA_ALERT_ARGUMENTS +DBA_ALERT_HISTORY +DBA_ALERT_HISTORY_DETAIL +DBA_ALL_TABLES +DBA_ANALYTIC_VIEWS +DBA_ANALYTIC_VIEW_ATTR_CLASS +DBA_ANALYTIC_VIEW_BASE_MEAS +DBA_ANALYTIC_VIEW_CALC_MEAS +DBA_ANALYTIC_VIEW_CLASS +DBA_ANALYTIC_VIEW_COLUMNS +DBA_ANALYTIC_VIEW_DIMENSIONS +DBA_ANALYTIC_VIEW_DIM_CLASS +DBA_ANALYTIC_VIEW_HIERS +DBA_ANALYTIC_VIEW_HIER_CLASS +DBA_ANALYTIC_VIEW_KEYS +DBA_ANALYTIC_VIEW_LEVELS +DBA_ANALYTIC_VIEW_LEVEL_CLASS +DBA_ANALYTIC_VIEW_LVLGRPS +DBA_ANALYTIC_VIEW_MEAS_CLASS +DBA_ANALYZE_OBJECTS +DBA_APPLICATIONS +DBA_APPLY +DBA_APPLY_CHANGE_HANDLERS +DBA_APPLY_CONFLICT_COLUMNS +DBA_APPLY_DML_CONF_COLUMNS +DBA_APPLY_DML_CONF_HANDLERS +DBA_APPLY_DML_HANDLERS +DBA_APPLY_ENQUEUE +DBA_APPLY_ERROR +DBA_APPLY_ERROR_MESSAGES +DBA_APPLY_EXECUTE +DBA_APPLY_HANDLE_COLLISIONS +DBA_APPLY_INSTANTIATED_GLOBAL +DBA_APPLY_INSTANTIATED_OBJECTS +DBA_APPLY_INSTANTIATED_SCHEMAS +DBA_APPLY_KEY_COLUMNS +DBA_APPLY_OBJECT_DEPENDENCIES +DBA_APPLY_PARAMETERS +DBA_APPLY_PROGRESS +DBA_APPLY_REPERROR_HANDLERS +DBA_APPLY_SPILL_TXN +DBA_APPLY_TABLE_COLUMNS +DBA_APPLY_VALUE_DEPENDENCIES +DBA_APP_ERRORS +DBA_APP_PATCHES +DBA_APP_PDB_STATUS +DBA_APP_STATEMENTS +DBA_APP_VERSIONS +DBA_AQ_AGENTS +DBA_AQ_AGENT_PRIVS +DBA_ARGUMENTS +DBA_ASSEMBLIES +DBA_ASSOCIATIONS +DBA_ATTRIBUTE_DIMENSIONS +DBA_ATTRIBUTE_DIM_ATTRS +DBA_ATTRIBUTE_DIM_CLASS +DBA_ATTRIBUTE_DIM_JOIN_PATHS +DBA_ATTRIBUTE_DIM_LEVELS +DBA_ATTRIBUTE_DIM_LEVEL_ATTRS +DBA_ATTRIBUTE_DIM_ORDER_ATTRS +DBA_ATTRIBUTE_DIM_TABLES +DBA_ATTRIBUTE_TRANSFORMATIONS +DBA_AUDIT_EXISTS +DBA_AUDIT_MGMT_CLEANUP_JOBS +DBA_AUDIT_MGMT_CLEAN_EVENTS +DBA_AUDIT_MGMT_CONFIG_PARAMS +DBA_AUDIT_MGMT_LAST_ARCH_TS +DBA_AUDIT_OBJECT +DBA_AUDIT_POLICIES +DBA_AUDIT_POLICY_COLUMNS +DBA_AUDIT_SESSION +DBA_AUDIT_STATEMENT +DBA_AUDIT_TRAIL +DBA_AUTOTASK_CLIENT +DBA_AUTOTASK_CLIENT_HISTORY +DBA_AUTOTASK_CLIENT_JOB +DBA_AUTOTASK_JOB_HISTORY +DBA_AUTOTASK_OPERATION +DBA_AUTOTASK_SCHEDULE +DBA_AUTOTASK_STATUS +DBA_AUTOTASK_TASK +DBA_AUTOTASK_WINDOW_CLIENTS +DBA_AUTOTASK_WINDOW_HISTORY +DBA_AWS +DBA_AW_OBJ +DBA_AW_PROP +DBA_AW_PS +DBA_BASE_TABLE_MVIEWS +DBA_BLOCKERS +DBA_CAPTURE +DBA_CAPTURE_EXTRA_ATTRIBUTES +DBA_CAPTURE_PARAMETERS +DBA_CAPTURE_PREPARED_DATABASE +DBA_CAPTURE_PREPARED_SCHEMAS +DBA_CAPTURE_PREPARED_TABLES +DBA_CATALOG +DBA_CDB_RSRC_PLANS +DBA_CDB_RSRC_PLAN_DIRECTIVES +DBA_CHANGE_NOTIFICATION_REGS +DBA_CHECKED_ROLES +DBA_CHECKED_ROLES_PATH +DBA_CLUSTERING_DIMENSIONS +DBA_CLUSTERING_JOINS +DBA_CLUSTERING_KEYS +DBA_CLUSTERING_TABLES +DBA_CLUSTERS +DBA_CLUSTER_HASH_EXPRESSIONS +DBA_CLU_COLUMNS +DBA_CODE_ROLE_PRIVS +DBA_COLL_TYPES +DBA_COL_COMMENTS +DBA_COL_PENDING_STATS +DBA_COL_PRIVS +DBA_COL_USAGE_STATISTICS +DBA_COMMON_AUDIT_TRAIL +DBA_COMPARISON +DBA_COMPARISON_COLUMNS +DBA_COMPARISON_ROW_DIF +DBA_COMPARISON_SCAN +DBA_COMPARISON_SCAN_SUMMARY +DBA_COMPARISON_SCAN_VALUES +DBA_CONNECTION_TESTS +DBA_CONNECT_ROLE_GRANTEES +DBA_CONSTRAINTS +DBA_CONS_COLUMNS +DBA_CONS_OBJ_COLUMNS +DBA_CONTAINER_DATA +DBA_CONTEXT +DBA_CPOOL_INFO +DBA_CPU_USAGE_STATISTICS +DBA_CQ_NOTIFICATION_QUERIES +DBA_CREDENTIALS +DBA_CUBES +DBA_CUBE_ATTRIBUTES +DBA_CUBE_ATTR_MAPPINGS +DBA_CUBE_ATTR_UNIQUE_KEYS +DBA_CUBE_ATTR_VISIBILITY +DBA_CUBE_BUILD_PROCESSES +DBA_CUBE_CALCULATED_MEMBERS +DBA_CUBE_CLASSIFICATIONS +DBA_CUBE_DEPENDENCIES +DBA_CUBE_DESCRIPTIONS +DBA_CUBE_DIMENSIONALITY +DBA_CUBE_DIMENSIONS +DBA_CUBE_DIMNL_MAPPINGS +DBA_CUBE_DIM_LEVELS +DBA_CUBE_DIM_MAPPINGS +DBA_CUBE_DIM_MODELS +DBA_CUBE_DIM_VIEWS +DBA_CUBE_DIM_VIEW_COLUMNS +DBA_CUBE_HIERARCHIES +DBA_CUBE_HIER_LEVELS +DBA_CUBE_HIER_VIEWS +DBA_CUBE_HIER_VIEW_COLUMNS +DBA_CUBE_MAPPINGS +DBA_CUBE_MEASURES +DBA_CUBE_MEAS_MAPPINGS +DBA_CUBE_NAMED_BUILD_SPECS +DBA_CUBE_SUB_PARTITION_LEVELS +DBA_CUBE_VIEWS +DBA_CUBE_VIEW_COLUMNS +DBA_DATAPUMP_JOBS +DBA_DATAPUMP_SESSIONS +DBA_DATA_FILES +DBA_DBFS_HS +DBA_DBFS_HS_COMMANDS +DBA_DBFS_HS_FIXED_PROPERTIES +DBA_DBFS_HS_PROPERTIES +DBA_DB_LINKS +DBA_DB_LINK_SOURCES +DBA_DDL_LOCKS +DBA_DEPENDENCIES +DBA_DIGEST_VERIFIERS +DBA_DIMENSIONS +DBA_DIM_ATTRIBUTES +DBA_DIM_CHILD_OF +DBA_DIM_HIERARCHIES +DBA_DIM_JOIN_KEY +DBA_DIM_LEVELS +DBA_DIM_LEVEL_KEY +DBA_DIRECTORIES +DBA_DISCOVERY_SOURCE +DBA_DML_LOCKS +DBA_DMT_FREE_SPACE +DBA_DMT_USED_EXTENTS +DBA_DV_STATUS +DBA_EDITIONING_VIEWS +DBA_EDITIONING_VIEWS_AE +DBA_EDITIONING_VIEW_COLS +DBA_EDITIONING_VIEW_COLS_AE +DBA_EDITIONS +DBA_EDITION_COMMENTS +DBA_ENABLED_AGGREGATIONS +DBA_ENABLED_TRACES +DBA_ENCRYPTED_COLUMNS +DBA_EPG_DAD_AUTHORIZATION +DBA_ERRORS +DBA_ERRORS_AE +DBA_ERROR_TRANSLATIONS +DBA_EVALUATION_CONTEXTS +DBA_EVALUATION_CONTEXT_TABLES +DBA_EVALUATION_CONTEXT_VARS +DBA_EXPORT_OBJECTS +DBA_EXPORT_PATHS +DBA_EXPRESSION_STATISTICS +DBA_EXP_FILES +DBA_EXP_OBJECTS +DBA_EXP_VERSION +DBA_EXTENTS +DBA_EXTERNAL_LOCATIONS +DBA_EXTERNAL_SCN_ACTIVITY +DBA_EXTERNAL_TABLES +DBA_FEATURE_USAGE_STATISTICS +DBA_FGA_AUDIT_TRAIL +DBA_FILE_GROUPS +DBA_FILE_GROUP_EXPORT_INFO +DBA_FILE_GROUP_FILES +DBA_FILE_GROUP_TABLES +DBA_FILE_GROUP_TABLESPACES +DBA_FILE_GROUP_VERSIONS +DBA_FLASHBACK_ARCHIVE +DBA_FLASHBACK_ARCHIVE_TABLES +DBA_FLASHBACK_ARCHIVE_TS +DBA_FLASHBACK_TXN_REPORT +DBA_FLASHBACK_TXN_STATE +DBA_FREE_SPACE +DBA_FREE_SPACE_COALESCED +DBA_GG_AUTO_CDR_COLUMNS +DBA_GG_AUTO_CDR_COLUMN_GROUPS +DBA_GG_AUTO_CDR_TABLES +DBA_GG_PROCEDURE_ANNOTATION +DBA_GG_PROC_OBJECT_EXCLUSION +DBA_GG_SUPPORTED_PACKAGES +DBA_GG_SUPPORTED_PROCEDURES +DBA_GLOBAL_CONTEXT +DBA_GOLDENGATE_CONTAINER_RULES +DBA_GOLDENGATE_INBOUND +DBA_GOLDENGATE_NOT_UNIQUE +DBA_GOLDENGATE_PRIVILEGES +DBA_GOLDENGATE_RULES +DBA_GOLDENGATE_SUPPORT_MODE +DBA_HANG_MANAGER_PARAMETERS +DBA_HEATMAP_TOP_OBJECTS +DBA_HEATMAP_TOP_TABLESPACES +DBA_HEAT_MAP_SEGMENT +DBA_HEAT_MAP_SEG_HISTOGRAM +DBA_HIERARCHIES +DBA_HIER_CLASS +DBA_HIER_COLUMNS +DBA_HIER_HIER_ATTRIBUTES +DBA_HIER_HIER_ATTR_CLASS +DBA_HIER_JOIN_PATHS +DBA_HIER_LEVELS +DBA_HIER_LEVEL_ID_ATTRS +DBA_HIGH_WATER_MARK_STATISTICS +DBA_HISTOGRAMS +DBA_HIST_ACTIVE_SESS_HISTORY +DBA_HIST_APPLY_SUMMARY +DBA_HIST_ASH_SNAPSHOT +DBA_HIST_ASM_BAD_DISK +DBA_HIST_ASM_DISKGROUP +DBA_HIST_ASM_DISKGROUP_STAT +DBA_HIST_ASM_DISK_STAT_SUMMARY +DBA_HIST_BASELINE +DBA_HIST_BASELINE_DETAILS +DBA_HIST_BASELINE_METADATA +DBA_HIST_BASELINE_TEMPLATE +DBA_HIST_BG_EVENT_SUMMARY +DBA_HIST_BUFFERED_QUEUES +DBA_HIST_BUFFERED_SUBSCRIBERS +DBA_HIST_BUFFER_POOL_STAT +DBA_HIST_CAPTURE +DBA_HIST_CELL_CONFIG +DBA_HIST_CELL_CONFIG_DETAIL +DBA_HIST_CELL_DB +DBA_HIST_CELL_DISKTYPE +DBA_HIST_CELL_DISK_NAME +DBA_HIST_CELL_DISK_SUMMARY +DBA_HIST_CELL_GLOBAL +DBA_HIST_CELL_GLOBAL_SUMMARY +DBA_HIST_CELL_IOREASON +DBA_HIST_CELL_IOREASON_NAME +DBA_HIST_CELL_METRIC_DESC +DBA_HIST_CELL_NAME +DBA_HIST_CELL_OPEN_ALERTS +DBA_HIST_CHANNEL_WAITS +DBA_HIST_CLUSTER_INTERCON +DBA_HIST_COLORED_SQL +DBA_HIST_COMP_IOSTAT +DBA_HIST_CON_SYSMETRIC_HIST +DBA_HIST_CON_SYSMETRIC_SUMM +DBA_HIST_CON_SYSSTAT +DBA_HIST_CON_SYSTEM_EVENT +DBA_HIST_CON_SYS_TIME_MODEL +DBA_HIST_CR_BLOCK_SERVER +DBA_HIST_CURRENT_BLOCK_SERVER +DBA_HIST_DATABASE_INSTANCE +DBA_HIST_DATAFILE +DBA_HIST_DB_CACHE_ADVICE +DBA_HIST_DISPATCHER +DBA_HIST_DLM_MISC +DBA_HIST_DYN_REMASTER_STATS +DBA_HIST_ENQUEUE_STAT +DBA_HIST_EVENT_HISTOGRAM +DBA_HIST_EVENT_NAME +DBA_HIST_FILEMETRIC_HISTORY +DBA_HIST_FILESTATXS +DBA_HIST_IC_CLIENT_STATS +DBA_HIST_IC_DEVICE_STATS +DBA_HIST_IM_SEG_STAT +DBA_HIST_IM_SEG_STAT_OBJ +DBA_HIST_INSTANCE_RECOVERY +DBA_HIST_INST_CACHE_TRANSFER +DBA_HIST_INTERCONNECT_PINGS +DBA_HIST_IOSTAT_DETAIL +DBA_HIST_IOSTAT_FILETYPE +DBA_HIST_IOSTAT_FILETYPE_NAME +DBA_HIST_IOSTAT_FUNCTION +DBA_HIST_IOSTAT_FUNCTION_NAME +DBA_HIST_JAVA_POOL_ADVICE +DBA_HIST_LATCH +DBA_HIST_LATCH_CHILDREN +DBA_HIST_LATCH_MISSES_SUMMARY +DBA_HIST_LATCH_NAME +DBA_HIST_LATCH_PARENT +DBA_HIST_LIBRARYCACHE +DBA_HIST_LMS_STATS +DBA_HIST_LOG +DBA_HIST_MEMORY_RESIZE_OPS +DBA_HIST_MEMORY_TARGET_ADVICE +DBA_HIST_MEM_DYNAMIC_COMP +DBA_HIST_METRIC_NAME +DBA_HIST_MTTR_TARGET_ADVICE +DBA_HIST_MUTEX_SLEEP +DBA_HIST_MVPARAMETER +DBA_HIST_OPTIMIZER_ENV +DBA_HIST_OSSTAT +DBA_HIST_OSSTAT_NAME +DBA_HIST_PARAMETER +DBA_HIST_PARAMETER_NAME +DBA_HIST_PDB_INSTANCE +DBA_HIST_PDB_IN_SNAP +DBA_HIST_PERSISTENT_QMN_CACHE +DBA_HIST_PERSISTENT_QUEUES +DBA_HIST_PERSISTENT_SUBS +DBA_HIST_PGASTAT +DBA_HIST_PGA_TARGET_ADVICE +DBA_HIST_PLAN_OPERATION_NAME +DBA_HIST_PLAN_OPTION_NAME +DBA_HIST_PROCESS_MEM_SUMMARY +DBA_HIST_PROCESS_WAITTIME +DBA_HIST_RECOVERY_PROGRESS +DBA_HIST_REPLICATION_TBL_STATS +DBA_HIST_REPLICATION_TXN_STATS +DBA_HIST_REPORTS +DBA_HIST_REPORTS_CONTROL +DBA_HIST_REPORTS_DETAILS +DBA_HIST_REPORTS_TIMEBANDS +DBA_HIST_RESOURCE_LIMIT +DBA_HIST_ROWCACHE_SUMMARY +DBA_HIST_RSRC_CONSUMER_GROUP +DBA_HIST_RSRC_METRIC +DBA_HIST_RSRC_PDB_METRIC +DBA_HIST_RSRC_PLAN +DBA_HIST_RULE_SET +DBA_HIST_SEG_STAT +DBA_HIST_SEG_STAT_OBJ +DBA_HIST_SERVICE_NAME +DBA_HIST_SERVICE_STAT +DBA_HIST_SERVICE_WAIT_CLASS +DBA_HIST_SESSMETRIC_HISTORY +DBA_HIST_SESS_SGA_STATS +DBA_HIST_SESS_TIME_STATS +DBA_HIST_SGA +DBA_HIST_SGASTAT +DBA_HIST_SGA_TARGET_ADVICE +DBA_HIST_SHARED_POOL_ADVICE +DBA_HIST_SHARED_SERVER_SUMMARY +DBA_HIST_SNAPSHOT +DBA_HIST_SNAP_ERROR +DBA_HIST_SQLBIND +DBA_HIST_SQLCOMMAND_NAME +DBA_HIST_SQLSTAT +DBA_HIST_SQLTEXT +DBA_HIST_SQL_BIND_METADATA +DBA_HIST_SQL_PLAN +DBA_HIST_SQL_SUMMARY +DBA_HIST_SQL_WORKAREA_HSTGRM +DBA_HIST_STAT_NAME +DBA_HIST_STREAMS_APPLY_SUM +DBA_HIST_STREAMS_CAPTURE +DBA_HIST_STREAMS_POOL_ADVICE +DBA_HIST_SYSMETRIC_HISTORY +DBA_HIST_SYSMETRIC_SUMMARY +DBA_HIST_SYSSTAT +DBA_HIST_SYSTEM_EVENT +DBA_HIST_SYS_TIME_MODEL +DBA_HIST_TABLESPACE +DBA_HIST_TABLESPACE_STAT +DBA_HIST_TBSPC_SPACE_USAGE +DBA_HIST_TEMPFILE +DBA_HIST_TEMPSTATXS +DBA_HIST_THREAD +DBA_HIST_TOPLEVELCALL_NAME +DBA_HIST_UNDOSTAT +DBA_HIST_WAITCLASSMET_HISTORY +DBA_HIST_WAITSTAT +DBA_HIST_WR_CONTROL +DBA_HIST_WR_SETTINGS +DBA_HIVE_COLUMNS +DBA_HIVE_DATABASES +DBA_HIVE_PART_KEY_COLUMNS +DBA_HIVE_TABLES +DBA_HIVE_TAB_PARTITIONS +DBA_HOST_ACES +DBA_HOST_ACLS +DBA_IDENTIFIERS +DBA_ILMDATAMOVEMENTPOLICIES +DBA_ILMEVALUATIONDETAILS +DBA_ILMOBJECTS +DBA_ILMPARAMETERS +DBA_ILMPOLICIES +DBA_ILMRESULTS +DBA_ILMTASKS +DBA_IM_EXPRESSIONS +DBA_INDEXES +DBA_INDEXTYPES +DBA_INDEXTYPE_ARRAYTYPES +DBA_INDEXTYPE_COMMENTS +DBA_INDEXTYPE_OPERATORS +DBA_INDEX_USAGE +DBA_IND_COLUMNS +DBA_IND_COLUMNS_V$ +DBA_IND_EXPRESSIONS +DBA_IND_PARTITIONS +DBA_IND_PENDING_STATS +DBA_IND_STATISTICS +DBA_IND_SUBPARTITIONS +DBA_INMEMORY_AIMTASKDETAILS +DBA_INMEMORY_AIMTASKS +DBA_INTERNAL_TRIGGERS +DBA_INVALID_OBJECTS +DBA_JAVA_ARGUMENTS +DBA_JAVA_CLASSES +DBA_JAVA_COMPILER_OPTIONS +DBA_JAVA_DERIVATIONS +DBA_JAVA_FIELDS +DBA_JAVA_IMPLEMENTS +DBA_JAVA_INNERS +DBA_JAVA_LAYOUTS +DBA_JAVA_METHODS +DBA_JAVA_NCOMPS +DBA_JAVA_POLICY +DBA_JAVA_RESOLVERS +DBA_JAVA_THROWS +DBA_JOBS +DBA_JOBS_RUNNING +DBA_JOINGROUPS +DBA_JOIN_IND_COLUMNS +DBA_JSON_COLUMNS +DBA_JSON_DATAGUIDES +DBA_JSON_DATAGUIDE_FIELDS +DBA_KEEPSIZES +DBA_KGLLOCK +DBA_LIBRARIES +DBA_LMT_FREE_SPACE +DBA_LMT_USED_EXTENTS +DBA_LOBS +DBA_LOB_PARTITIONS +DBA_LOB_SUBPARTITIONS +DBA_LOB_TEMPLATES +DBA_LOCK +DBA_LOCKDOWN_PROFILES +DBA_LOCKS +DBA_LOCK_INTERNAL +DBA_LOGMNR_LOG +DBA_LOGMNR_PURGED_LOG +DBA_LOGMNR_SESSION +DBA_LOGSTDBY_EDS_SUPPORTED +DBA_LOGSTDBY_EDS_TABLES +DBA_LOGSTDBY_EVENTS +DBA_LOGSTDBY_HISTORY +DBA_LOGSTDBY_LOG +DBA_LOGSTDBY_NOT_UNIQUE +DBA_LOGSTDBY_PARAMETERS +DBA_LOGSTDBY_PLSQL_MAP +DBA_LOGSTDBY_PLSQL_SUPPORT +DBA_LOGSTDBY_PROGRESS +DBA_LOGSTDBY_SKIP +DBA_LOGSTDBY_SKIP_TRANSACTION +DBA_LOGSTDBY_UNSUPPORTED +DBA_LOGSTDBY_UNSUPPORTED_TABLE +DBA_LOG_GROUPS +DBA_LOG_GROUP_COLUMNS +DBA_MEASURE_FOLDERS +DBA_MEASURE_FOLDER_CONTENTS +DBA_MEASURE_FOLDER_SUBFOLDERS +DBA_METADATA_PROPERTIES +DBA_METHOD_PARAMS +DBA_METHOD_RESULTS +DBA_MINING_MODELS +DBA_MINING_MODEL_ATTRIBUTES +DBA_MINING_MODEL_PARTITIONS +DBA_MINING_MODEL_SETTINGS +DBA_MINING_MODEL_TABLES +DBA_MINING_MODEL_VIEWS +DBA_MINING_MODEL_XFORMS +DBA_MVIEWS +DBA_MVIEW_AGGREGATES +DBA_MVIEW_ANALYSIS +DBA_MVIEW_COMMENTS +DBA_MVIEW_DETAIL_PARTITION +DBA_MVIEW_DETAIL_RELATIONS +DBA_MVIEW_DETAIL_SUBPARTITION +DBA_MVIEW_JOINS +DBA_MVIEW_KEYS +DBA_MVIEW_LOGS +DBA_MVIEW_LOG_FILTER_COLS +DBA_MVIEW_REFRESH_TIMES +DBA_MVREF_CHANGE_STATS +DBA_MVREF_RUN_STATS +DBA_MVREF_STATS +DBA_MVREF_STATS_PARAMS +DBA_MVREF_STATS_SYS_DEFAULTS +DBA_MVREF_STMT_STATS +DBA_NESTED_TABLES +DBA_NESTED_TABLE_COLS +DBA_NETWORK_ACLS +DBA_NETWORK_ACL_PRIVILEGES +DBA_OBJECTS +DBA_OBJECTS_AE +DBA_OBJECT_SIZE +DBA_OBJECT_TABLES +DBA_OBJECT_USAGE +DBA_OBJ_AUDIT_OPTS +DBA_OBJ_COLATTRS +DBA_OLDIMAGE_COLUMNS +DBA_OPANCILLARY +DBA_OPARGUMENTS +DBA_OPBINDINGS +DBA_OPERATORS +DBA_OPERATOR_COMMENTS +DBA_OPTSTAT_OPERATIONS +DBA_OPTSTAT_OPERATION_TASKS +DBA_OUTLINES +DBA_OUTLINE_HINTS +DBA_OUTSTANDING_ALERTS +DBA_PARALLEL_EXECUTE_CHUNKS +DBA_PARALLEL_EXECUTE_TASKS +DBA_PARTIAL_DROP_TABS +DBA_PART_COL_STATISTICS +DBA_PART_HISTOGRAMS +DBA_PART_INDEXES +DBA_PART_KEY_COLUMNS +DBA_PART_KEY_COLUMNS_V$ +DBA_PART_LOBS +DBA_PART_TABLES +DBA_PDBS +DBA_PDB_HISTORY +DBA_PDB_SAVED_STATES +DBA_PDB_SNAPSHOTS +DBA_PENDING_CONV_TABLES +DBA_PENDING_TRANSACTIONS +DBA_PLSQL_COLL_TYPES +DBA_PLSQL_OBJECT_SETTINGS +DBA_PLSQL_TYPES +DBA_PLSQL_TYPE_ATTRS +DBA_POLICIES +DBA_POLICY_ATTRIBUTES +DBA_POLICY_CONTEXTS +DBA_POLICY_GROUPS +DBA_PRIVATE_TEMP_TABLES +DBA_PRIV_AUDIT_OPTS +DBA_PRIV_CAPTURES +DBA_PROCEDURES +DBA_PROFILES +DBA_PROPAGATION +DBA_PROXIES +DBA_QUEUES +DBA_QUEUE_PUBLISHERS +DBA_QUEUE_SCHEDULES +DBA_QUEUE_SUBSCRIBERS +DBA_QUEUE_TABLES +DBA_RCHILD +DBA_RECOVERABLE_SCRIPT +DBA_RECOVERABLE_SCRIPT_BLOCKS +DBA_RECOVERABLE_SCRIPT_ERRORS +DBA_RECOVERABLE_SCRIPT_HIST +DBA_RECOVERABLE_SCRIPT_PARAMS +DBA_RECYCLEBIN +DBA_REDO_DB +DBA_REDO_LOG +DBA_REFRESH +DBA_REFRESH_CHILDREN +DBA_REFS +DBA_REGISTERED_ARCHIVED_LOG +DBA_REGISTERED_MVIEWS +DBA_REGISTERED_SNAPSHOTS +DBA_REGISTRY +DBA_REGISTRY_DATABASE +DBA_REGISTRY_DEPENDENCIES +DBA_REGISTRY_ERROR +DBA_REGISTRY_HIERARCHY +DBA_REGISTRY_HISTORY +DBA_REGISTRY_LOG +DBA_REGISTRY_PROGRESS +DBA_REGISTRY_SCHEMAS +DBA_REGISTRY_SQLPATCH +DBA_REGISTRY_SQLPATCH_RU_INFO +DBA_REPLICATION_PROCESS_EVENTS +DBA_REPL_DBNAME_MAPPING +DBA_RESOURCE_INCARNATIONS +DBA_RESUMABLE +DBA_REWRITE_EQUIVALENCES +DBA_RGROUP +DBA_ROLES +DBA_ROLE_PRIVS +DBA_ROLLBACK_SEGS +DBA_ROLLING_DATABASES +DBA_ROLLING_EVENTS +DBA_ROLLING_PARAMETERS +DBA_ROLLING_PLAN +DBA_ROLLING_STATISTICS +DBA_ROLLING_STATUS +DBA_ROLLING_UNSUPPORTED +DBA_RSRC_CAPABILITY +DBA_RSRC_CATEGORIES +DBA_RSRC_CONSUMER_GROUPS +DBA_RSRC_CONSUMER_GROUP_PRIVS +DBA_RSRC_GROUP_MAPPINGS +DBA_RSRC_INSTANCE_CAPABILITY +DBA_RSRC_IO_CALIBRATE +DBA_RSRC_MANAGER_SYSTEM_PRIVS +DBA_RSRC_MAPPING_PRIORITY +DBA_RSRC_PLANS +DBA_RSRC_PLAN_DIRECTIVES +DBA_RSRC_STORAGE_POOL_MAPPING +DBA_RULES +DBA_RULESETS +DBA_RULE_SETS +DBA_RULE_SET_RULES +DBA_SCHEDULER_CHAINS +DBA_SCHEDULER_CHAIN_RULES +DBA_SCHEDULER_CHAIN_STEPS +DBA_SCHEDULER_CREDENTIALS +DBA_SCHEDULER_DB_DESTS +DBA_SCHEDULER_DESTS +DBA_SCHEDULER_EXTERNAL_DESTS +DBA_SCHEDULER_FILE_WATCHERS +DBA_SCHEDULER_GLOBAL_ATTRIBUTE +DBA_SCHEDULER_GROUPS +DBA_SCHEDULER_GROUP_MEMBERS +DBA_SCHEDULER_INCOMPATS +DBA_SCHEDULER_INCOMPAT_MEMBER +DBA_SCHEDULER_JOBS +DBA_SCHEDULER_JOB_ARGS +DBA_SCHEDULER_JOB_CLASSES +DBA_SCHEDULER_JOB_DESTS +DBA_SCHEDULER_JOB_LOG +DBA_SCHEDULER_JOB_ROLES +DBA_SCHEDULER_JOB_RUN_DETAILS +DBA_SCHEDULER_NOTIFICATIONS +DBA_SCHEDULER_PROGRAMS +DBA_SCHEDULER_PROGRAM_ARGS +DBA_SCHEDULER_REMOTE_DATABASES +DBA_SCHEDULER_REMOTE_JOBSTATE +DBA_SCHEDULER_RESOURCES +DBA_SCHEDULER_RSC_CONSTRAINTS +DBA_SCHEDULER_RUNNING_CHAINS +DBA_SCHEDULER_SCHEDULES +DBA_SCHEDULER_WINDOWS +DBA_SCHEDULER_WINDOW_DETAILS +DBA_SCHEDULER_WINDOW_GROUPS +DBA_SCHEDULER_WINDOW_LOG +DBA_SCHEDULER_WINGROUP_MEMBERS +DBA_SECONDARY_OBJECTS +DBA_SECUREFILE_LOGS +DBA_SECUREFILE_LOG_INSTANCES +DBA_SECUREFILE_LOG_PARTITIONS +DBA_SECUREFILE_LOG_TABLES +DBA_SEC_RELEVANT_COLS +DBA_SEGMENTS +DBA_SEGMENTS_OLD +DBA_SENSITIVE_COLUMN_TYPES +DBA_SENSITIVE_DATA +DBA_SEQUENCES +DBA_SERVER_REGISTRY +DBA_SNAPSHOTS +DBA_SNAPSHOT_LOGS +DBA_SNAPSHOT_LOG_FILTER_COLS +DBA_SNAPSHOT_REFRESH_TIMES +DBA_SOURCE +DBA_SOURCE_AE +DBA_SQLJ_TYPES +DBA_SQLJ_TYPE_ATTRS +DBA_SQLJ_TYPE_METHODS +DBA_SQLSET +DBA_SQLSET_BINDS +DBA_SQLSET_DEFINITIONS +DBA_SQLSET_PLANS +DBA_SQLSET_REFERENCES +DBA_SQLSET_STATEMENTS +DBA_SQLTUNE_BINDS +DBA_SQLTUNE_PLANS +DBA_SQLTUNE_RATIONALE_PLAN +DBA_SQLTUNE_STATISTICS +DBA_SQL_MONITOR_USAGE +DBA_SQL_PATCHES +DBA_SQL_PLAN_BASELINES +DBA_SQL_PLAN_DIRECTIVES +DBA_SQL_PLAN_DIR_OBJECTS +DBA_SQL_PROFILES +DBA_SQL_TRANSLATIONS +DBA_SQL_TRANSLATION_PROFILES +DBA_SR_GRP_STATUS +DBA_SR_GRP_STATUS_ALL +DBA_SR_OBJ +DBA_SR_OBJ_ALL +DBA_SR_OBJ_STATUS +DBA_SR_OBJ_STATUS_ALL +DBA_SR_PARTN_OPS +DBA_SR_STLOG_STATS +DBA_SSCR_CAPTURE +DBA_SSCR_RESTORE +DBA_STATEMENTS +DBA_STAT_EXTENSIONS +DBA_STMT_AUDIT_OPTS +DBA_STORED_SETTINGS +DBA_STREAMS_ADD_COLUMN +DBA_STREAMS_ADMINISTRATOR +DBA_STREAMS_COLUMNS +DBA_STREAMS_DELETE_COLUMN +DBA_STREAMS_GLOBAL_RULES +DBA_STREAMS_KEEP_COLUMNS +DBA_STREAMS_MESSAGE_CONSUMERS +DBA_STREAMS_MESSAGE_RULES +DBA_STREAMS_NEWLY_SUPPORTED +DBA_STREAMS_RENAME_COLUMN +DBA_STREAMS_RENAME_SCHEMA +DBA_STREAMS_RENAME_TABLE +DBA_STREAMS_RULES +DBA_STREAMS_SCHEMA_RULES +DBA_STREAMS_SPLIT_MERGE +DBA_STREAMS_SPLIT_MERGE_HIST +DBA_STREAMS_TABLE_RULES +DBA_STREAMS_TP_COMPONENT +DBA_STREAMS_TP_COMPONENT_LINK +DBA_STREAMS_TP_COMPONENT_STAT +DBA_STREAMS_TP_DATABASE +DBA_STREAMS_TP_PATH_BOTTLENECK +DBA_STREAMS_TP_PATH_STAT +DBA_STREAMS_TRANSFORMATIONS +DBA_STREAMS_TRANSFORM_FUNCTION +DBA_STREAMS_UNSUPPORTED +DBA_SUBPARTITION_TEMPLATES +DBA_SUBPART_COL_STATISTICS +DBA_SUBPART_HISTOGRAMS +DBA_SUBPART_KEY_COLUMNS +DBA_SUBPART_KEY_COLUMNS_V$ +DBA_SUBSCR_REGISTRATIONS +DBA_SUMMARIES +DBA_SUPPLEMENTAL_LOGGING +DBA_SYNC_CAPTURE +DBA_SYNC_CAPTURE_PREPARED_TABS +DBA_SYNC_CAPTURE_TABLES +DBA_SYNONYMS +DBA_SYS_PRIVS +DBA_TABLES +DBA_TABLESPACES +DBA_TABLESPACE_GROUPS +DBA_TABLESPACE_THRESHOLDS +DBA_TABLESPACE_USAGE_METRICS +DBA_TAB_COLS +DBA_TAB_COLS_V$ +DBA_TAB_COLUMNS +DBA_TAB_COL_STATISTICS +DBA_TAB_COMMENTS +DBA_TAB_HISTGRM_PENDING_STATS +DBA_TAB_HISTOGRAMS +DBA_TAB_IDENTITY_COLS +DBA_TAB_MODIFICATIONS +DBA_TAB_PARTITIONS +DBA_TAB_PENDING_STATS +DBA_TAB_PRIVS +DBA_TAB_STATISTICS +DBA_TAB_STATS_HISTORY +DBA_TAB_STAT_PREFS +DBA_TAB_SUBPARTITIONS +DBA_TEMP_FILES +DBA_TEMP_FREE_SPACE +DBA_THRESHOLDS +DBA_TRANSFORMATIONS +DBA_TRIGGERS +DBA_TRIGGER_COLS +DBA_TRIGGER_ORDERING +DBA_TSDP_IMPORT_ERRORS +DBA_TSDP_POLICY_CONDITION +DBA_TSDP_POLICY_FEATURE +DBA_TSDP_POLICY_PARAMETER +DBA_TSDP_POLICY_PROTECTION +DBA_TSDP_POLICY_TYPE +DBA_TSM_DESTINATION +DBA_TSM_HISTORY +DBA_TSM_SOURCE +DBA_TSTZ_TABLES +DBA_TSTZ_TAB_COLS +DBA_TS_QUOTAS +DBA_TUNE_MVIEW +DBA_TYPES +DBA_TYPE_ATTRS +DBA_TYPE_METHODS +DBA_TYPE_VERSIONS +DBA_UMF_LINK +DBA_UMF_REGISTRATION +DBA_UMF_SERVICE +DBA_UMF_TOPOLOGY +DBA_UNDO_EXTENTS +DBA_UNUSED_COL_TABS +DBA_UNUSED_GRANTS +DBA_UNUSED_OBJPRIVS +DBA_UNUSED_OBJPRIVS_PATH +DBA_UNUSED_PRIVS +DBA_UNUSED_SYSPRIVS +DBA_UNUSED_SYSPRIVS_PATH +DBA_UNUSED_USERPRIVS +DBA_UNUSED_USERPRIVS_PATH +DBA_UPDATABLE_COLUMNS +DBA_USED_OBJPRIVS +DBA_USED_OBJPRIVS_PATH +DBA_USED_PRIVS +DBA_USED_PUBPRIVS +DBA_USED_SYSPRIVS +DBA_USED_SYSPRIVS_PATH +DBA_USED_USERPRIVS +DBA_USED_USERPRIVS_PATH +DBA_USERS +DBA_USERS_WITH_DEFPWD +DBA_USTATS +DBA_VARRAYS +DBA_VIEWS +DBA_VIEWS_AE +DBA_WAITERS +DBA_WALLET_ACES +DBA_WALLET_ACLS +DBA_WARNING_SETTINGS +DBA_WI_CAPTURE_FILES +DBA_WI_JOBS +DBA_WI_OBJECTS +DBA_WI_PATTERNS +DBA_WI_PATTERN_ITEMS +DBA_WI_STATEMENTS +DBA_WI_TEMPLATES +DBA_WI_TEMPLATE_EXECUTIONS +DBA_WORKLOAD_ACTIVE_USER_MAP +DBA_WORKLOAD_CAPTURES +DBA_WORKLOAD_CAPTURE_SQLTEXT +DBA_WORKLOAD_CONNECTION_MAP +DBA_WORKLOAD_DIV_SUMMARY +DBA_WORKLOAD_FILTERS +DBA_WORKLOAD_GROUP_ASSIGNMENTS +DBA_WORKLOAD_LONG_SQLTEXT +DBA_WORKLOAD_REPLAYS +DBA_WORKLOAD_REPLAY_CLIENTS +DBA_WORKLOAD_REPLAY_DIVERGENCE +DBA_WORKLOAD_REPLAY_FILTER_SET +DBA_WORKLOAD_REPLAY_SCHEDULES +DBA_WORKLOAD_REPLAY_THREAD +DBA_WORKLOAD_SCHEDULE_CAPTURES +DBA_WORKLOAD_SCHEDULE_ORDERING +DBA_WORKLOAD_SQL_MAP +DBA_WORKLOAD_TRACKED_COMMITS +DBA_WORKLOAD_USER_MAP +DBA_XDS_ACL_REFRESH +DBA_XDS_ACL_REFSTAT +DBA_XDS_LATEST_ACL_REFSTAT +DBA_XMLSCHEMA_LEVEL_VIEW +DBA_XMLSCHEMA_LEVEL_VIEW_DUP +DBA_XMLTYPE_COLS +DBA_XML_INDEXES +DBA_XML_NESTED_TABLES +DBA_XML_OUT_OF_LINE_TABLES +DBA_XML_SCHEMAS +DBA_XML_SCHEMA_ATTRIBUTES +DBA_XML_SCHEMA_COMPLEX_TYPES +DBA_XML_SCHEMA_DEPENDENCY +DBA_XML_SCHEMA_ELEMENTS +DBA_XML_SCHEMA_IMPORTS +DBA_XML_SCHEMA_INCLUDES +DBA_XML_SCHEMA_NAMESPACES +DBA_XML_SCHEMA_SIMPLE_TYPES +DBA_XML_SCHEMA_SUBSTGRP_HEAD +DBA_XML_SCHEMA_SUBSTGRP_MBRS +DBA_XML_TABLES +DBA_XML_TAB_COLS +DBA_XML_VIEWS +DBA_XML_VIEW_COLS +DBA_XSTREAM_ADMINISTRATOR +DBA_XSTREAM_INBOUND +DBA_XSTREAM_OUTBOUND +DBA_XSTREAM_OUT_SUPPORT_MODE +DBA_XSTREAM_RULES +DBA_XSTREAM_SPLIT_MERGE +DBA_XSTREAM_SPLIT_MERGE_HIST +DBA_XSTREAM_TRANSFORMATIONS +DBA_XS_ACES +DBA_XS_ACLS +DBA_XS_ACL_PARAMETERS +DBA_XS_ACTIVE_SESSIONS +DBA_XS_APPLIED_POLICIES +DBA_XS_AUDIT_POLICY_OPTIONS +DBA_XS_COLUMN_CONSTRAINTS +DBA_XS_DYNAMIC_ROLES +DBA_XS_ENABLED_AUDIT_POLICIES +DBA_XS_ENB_AUDIT_POLICIES +DBA_XS_EXTERNAL_PRINCIPALS +DBA_XS_IMPLIED_PRIVILEGES +DBA_XS_INHERITED_REALMS +DBA_XS_MODIFIED_POLICIES +DBA_XS_NS_TEMPLATES +DBA_XS_NS_TEMPLATE_ATTRIBUTES +DBA_XS_OBJECTS +DBA_XS_POLICIES +DBA_XS_PRINCIPALS +DBA_XS_PRIVILEGES +DBA_XS_PRIVILEGE_GRANTS +DBA_XS_PROXY_ROLES +DBA_XS_REALM_CONSTRAINTS +DBA_XS_ROLES +DBA_XS_ROLE_GRANTS +DBA_XS_SECURITY_CLASSES +DBA_XS_SECURITY_CLASS_DEP +DBA_XS_SESSIONS +DBA_XS_SESSION_NS_ATTRIBUTES +DBA_XS_SESSION_ROLES +DBA_XS_USERS +DBA_XTERNAL_LOC_PARTITIONS +DBA_XTERNAL_LOC_SUBPARTITIONS +DBA_XTERNAL_PART_TABLES +DBA_XTERNAL_TAB_PARTITIONS +DBA_XTERNAL_TAB_SUBPARTITIONS +DBA_XT_HIVE_TABLES_VALIDATION +DBA_ZONEMAPS +DBA_ZONEMAP_MEASURES +DBCLONE_NAME +DBCLONE_STATUS +DBFIPS_140 +DBGLVL +DBID +DBJ_LONG_NAME. +DBJ_SHORT_NAME. +DBLINK +DBLINK_INFO +DBLINK_NAME +DBMSHSXP. +DBMSHSXP.SYSTEM_INFO_EXP +DBMSZEXP_SYSPKGGRNT. +DBMSZEXP_SYSPKGGRNT.SYSTEM_INFO_EXP +DBMS_ADDM. +DBMS_ADDM.ANALYZE_DB +DBMS_ADDM.ANALYZE_INST +DBMS_ADDM.ANALYZE_PARTIAL +DBMS_ADDM.COMPARE_CAPTURE_REPLAY_REPORT +DBMS_ADDM.COMPARE_DATABASES +DBMS_ADDM.COMPARE_INSTANCES +DBMS_ADDM.COMPARE_REPLAY_REPLAY_REPORT +DBMS_ADDM.DELETE +DBMS_ADDM.DELETE_FINDING_DIRECTIVE +DBMS_ADDM.DELETE_PARAMETER_DIRECTIVE +DBMS_ADDM.DELETE_SEGMENT_DIRECTIVE +DBMS_ADDM.DELETE_SQL_DIRECTIVE +DBMS_ADDM.GET_ASH_QUERY +DBMS_ADDM.GET_REPORT +DBMS_ADDM.INSERT_FINDING_DIRECTIVE +DBMS_ADDM.INSERT_PARAMETER_DIRECTIVE +DBMS_ADDM.INSERT_SEGMENT_DIRECTIVE +DBMS_ADDM.INSERT_SQL_DIRECTIVE +DBMS_ADDM.REAL_TIME_ADDM_REPORT +DBMS_ADR. +DBMS_ADR.CLEANOUT_SCHEMA +DBMS_ADR.CREATE_INCIDENT +DBMS_ADR.DOWNGRADE_SCHEMA +DBMS_ADR.GET_CALL_ERROR_MSG +DBMS_ADR.GET_CALL_STATUS +DBMS_ADR.GET_LOG_LOCATION +DBMS_ADR.GET_TRACE_LOCATION +DBMS_ADR.MIGRATE_SCHEMA +DBMS_ADR.RECOVER_SCHEMA +DBMS_ADR.RUN_PURGE +DBMS_ADR.SET_EXCEPTION_MODE +DBMS_ADR.SET_LOG_MSG_TEMPLATE +DBMS_ADR.SET_TRACEFILE_IDENTIFIER +DBMS_ADR.WRITE_LOG +DBMS_ADR.WRITE_TRACE +DBMS_ADR_APP. +DBMS_ADR_APP.CREATE_INCIDENT +DBMS_ADR_APP.GET_CALL_ERROR_MSG +DBMS_ADR_APP.GET_CALL_STATUS +DBMS_ADR_APP.GET_CURRENT_PRECEDENCE +DBMS_ADR_APP.GET_LOG_LOCATION +DBMS_ADR_APP.GET_TRACE_LOCATION +DBMS_ADR_APP.RUN_PURGE +DBMS_ADR_APP.SET_ADR_HOME +DBMS_ADR_APP.SET_CURRENT_PRECEDENCE +DBMS_ADR_APP.SET_EXCEPTION_MODE +DBMS_ADR_APP.SET_LOG_MSG_TEMPLATE +DBMS_ADR_APP.SET_TRACEFILE_IDENTIFIER +DBMS_ADR_APP.WRITE_LOG +DBMS_ADR_APP.WRITE_TRACE +DBMS_ADR_INTERNAL. +DBMS_ADR_INTERNAL.CREATE_ADR_HOME +DBMS_ADR_INTERNAL.CREATE_INCIDENT +DBMS_ADR_INTERNAL.GET_LOCATION +DBMS_ADR_INTERNAL.INCIDENT_ADD_METADATA +DBMS_ADR_INTERNAL.INCIDENT_CREATE +DBMS_ADR_INTERNAL.RESERVE_INCIDS +DBMS_ADR_INTERNAL.RUN_PURGE +DBMS_ADR_INTERNAL.SET_TRACEFILE_IDENTIFIER +DBMS_ADR_INTERNAL.TEST_RESERVE_INCIDS +DBMS_ADR_INTERNAL.WRITE_LOG +DBMS_ADR_INTERNAL.WRITE_LOG_HANDLER +DBMS_ADR_INTERNAL.WRITE_TRACE +DBMS_ADVANCED_REWRITE. +DBMS_ADVANCED_REWRITE.ALTER_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.BUILD_SAFE_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE +DBMS_ADVANCED_REWRITE.VALIDATE_REWRITE_EQUIVALENCE +DBMS_ADVISOR. +DBMS_ADVISOR.ADD_SQLWKLD_REF +DBMS_ADVISOR.ADD_SQLWKLD_STATEMENT +DBMS_ADVISOR.ADD_STS_REF +DBMS_ADVISOR.CANCEL_TASK +DBMS_ADVISOR.CHECK_PRIVS +DBMS_ADVISOR.CHECK_READ_PRIVS +DBMS_ADVISOR.COPY_SQLWKLD_TO_STS +DBMS_ADVISOR.CREATE_FILE +DBMS_ADVISOR.CREATE_OBJECT +DBMS_ADVISOR.CREATE_SQLWKLD +DBMS_ADVISOR.CREATE_TASK +DBMS_ADVISOR.DELETE_DIRECTIVE +DBMS_ADVISOR.DELETE_SQLWKLD +DBMS_ADVISOR.DELETE_SQLWKLD_REF +DBMS_ADVISOR.DELETE_SQLWKLD_STATEMENT +DBMS_ADVISOR.DELETE_STS_REF +DBMS_ADVISOR.DELETE_TASK +DBMS_ADVISOR.EVALUATE_DIRECTIVE +DBMS_ADVISOR.EXECUTE_TASK +DBMS_ADVISOR.FORMAT_MESSAGE +DBMS_ADVISOR.FORMAT_MESSAGE_GROUP +DBMS_ADVISOR.GET_ACCESS_ADVISOR_DEFAULTS +DBMS_ADVISOR.GET_REC_ATTRIBUTES +DBMS_ADVISOR.GET_TASK_REPORT +DBMS_ADVISOR.GET_TASK_SCRIPT +DBMS_ADVISOR.IMPLEMENT_TASK +DBMS_ADVISOR.IMPORT_SQLWKLD_SCHEMA +DBMS_ADVISOR.IMPORT_SQLWKLD_SQLCACHE +DBMS_ADVISOR.IMPORT_SQLWKLD_STS +DBMS_ADVISOR.IMPORT_SQLWKLD_SUMADV +DBMS_ADVISOR.IMPORT_SQLWKLD_USER +DBMS_ADVISOR.INSERT_DIRECTIVE +DBMS_ADVISOR.INTERRUPT_TASK +DBMS_ADVISOR.MARK_RECOMMENDATION +DBMS_ADVISOR.QUICK_TUNE +DBMS_ADVISOR.RESET_SQLWKLD +DBMS_ADVISOR.RESET_TASK +DBMS_ADVISOR.RESUME_TASK +DBMS_ADVISOR.SETUP_REPOSITORY +DBMS_ADVISOR.SETUP_USER_ENVIRONMENT +DBMS_ADVISOR.SET_DEFAULT_SQLWKLD_PARAMETER +DBMS_ADVISOR.SET_DEFAULT_TASK_PARAMETER +DBMS_ADVISOR.SET_SQLWKLD_PARAMETER +DBMS_ADVISOR.SET_TASK_PARAMETER +DBMS_ADVISOR.TUNE_MVIEW +DBMS_ADVISOR.UPDATE_DIRECTIVE +DBMS_ADVISOR.UPDATE_OBJECT +DBMS_ADVISOR.UPDATE_REC_ATTRIBUTES +DBMS_ADVISOR.UPDATE_SQLWKLD_ATTRIBUTES +DBMS_ADVISOR.UPDATE_SQLWKLD_STATEMENT +DBMS_ADVISOR.UPDATE_TASK_ATTRIBUTES +DBMS_ALERT. +DBMS_ALERT.REGISTER +DBMS_ALERT.REMOVE +DBMS_ALERT.REMOVEALL +DBMS_ALERT.SET_DEFAULTS +DBMS_ALERT.SIGNAL +DBMS_ALERT.WAITANY +DBMS_ALERT.WAITONE +DBMS_ALERT_INFO +DBMS_APBACKEND. +DBMS_APBACKEND.CHECK_VALID_TBS +DBMS_APBACKEND.CLEANUPUNUSEDBACKUPFILES +DBMS_APBACKEND.DELETECONTENT +DBMS_APBACKEND.DELETECONTENTAT +DBMS_APBACKEND.DEREGSTORECOMMAND +DBMS_APBACKEND.DROPSTORE +DBMS_APBACKEND.EXISTSFILE +DBMS_APBACKEND.GETARCHIVEREFID +DBMS_APBACKEND.GETCOMPRESSIONLEVEL +DBMS_APBACKEND.GETCONTENT +DBMS_APBACKEND.GETSTAGINGAREALOCATOR +DBMS_APBACKEND.GETSTORECONTENTSIZE +DBMS_APBACKEND.GETSTOREID +DBMS_APBACKEND.GETSTOREPROPERTY +DBMS_APBACKEND.GETTARBALLID +DBMS_APBACKEND.IMPORTREFERENCE +DBMS_APBACKEND.ISAPDEBUGON +DBMS_APBACKEND.ISREADABLEONLY +DBMS_APBACKEND.REGISTERSTORECOMMAND +DBMS_APBACKEND.REGISTERSTOREOWNER +DBMS_APBACKEND.SENDCOMMAND +DBMS_APBACKEND.SETSTOREPROPERTY +DBMS_APBACKEND.STOREPUSH +DBMS_APBACKEND.WRITECONTENT +DBMS_APPLICATION_INFO. +DBMS_APPLICATION_INFO.READ_CLIENT_INFO +DBMS_APPLICATION_INFO.READ_MODULE +DBMS_APPLICATION_INFO.SET_ACTION +DBMS_APPLICATION_INFO.SET_CLIENT_INFO +DBMS_APPLICATION_INFO.SET_MODULE +DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS +DBMS_APPLY_ADM. +DBMS_APPLY_ADM.ADD_STMT_HANDLER +DBMS_APPLY_ADM.ALTER_APPLY +DBMS_APPLY_ADM.COMPARE_OLD_VALUES +DBMS_APPLY_ADM.CREATE_APPLY +DBMS_APPLY_ADM.CREATE_OBJECT_DEPENDENCY +DBMS_APPLY_ADM.DELETE_ALL_ERRORS +DBMS_APPLY_ADM.DELETE_ERROR +DBMS_APPLY_ADM.DROP_APPLY +DBMS_APPLY_ADM.DROP_OBJECT_DEPENDENCY +DBMS_APPLY_ADM.EXECUTE_ALL_ERRORS +DBMS_APPLY_ADM.EXECUTE_ERROR +DBMS_APPLY_ADM.GET_ERROR_MESSAGE +DBMS_APPLY_ADM.HANDLE_COLLISIONS +DBMS_APPLY_ADM.REMOVE_STMT_HANDLER +DBMS_APPLY_ADM.SET_CHANGE_HANDLER +DBMS_APPLY_ADM.SET_DML_CONFLICT_HANDLER +DBMS_APPLY_ADM.SET_DML_HANDLER +DBMS_APPLY_ADM.SET_ENQUEUE_DESTINATION +DBMS_APPLY_ADM.SET_EXECUTE +DBMS_APPLY_ADM.SET_GLOBAL_INSTANTIATION_SCN +DBMS_APPLY_ADM.SET_KEY_COLUMNS +DBMS_APPLY_ADM.SET_PARAMETER +DBMS_APPLY_ADM.SET_REPERROR_HANDLER +DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN +DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN +DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER +DBMS_APPLY_ADM.SET_VALUE_DEPENDENCY +DBMS_APPLY_ADM.START_APPLY +DBMS_APPLY_ADM.STOP_APPLY +DBMS_APPLY_ADM_INTERNAL. +DBMS_APPLY_ADM_INTERNAL.ADD_OBJECT_CONSTRAINT +DBMS_APPLY_ADM_INTERNAL.ALTER_APPLY +DBMS_APPLY_ADM_INTERNAL.ALTER_MONITOR_JOB +DBMS_APPLY_ADM_INTERNAL.ALTER_OBJECT_ERROR_NOTIFIER +DBMS_APPLY_ADM_INTERNAL.COMPARE_OLD_VALUES_INNER +DBMS_APPLY_ADM_INTERNAL.CREATE_APPLY +DBMS_APPLY_ADM_INTERNAL.DROP_APPLY +DBMS_APPLY_ADM_INTERNAL.DROP_APPLY_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.DROP_OBJECT_CONSTRAINT +DBMS_APPLY_ADM_INTERNAL.GET_APPLY_FROM_TXN_ID +DBMS_APPLY_ADM_INTERNAL.HANDLE_COLLISIONS +DBMS_APPLY_ADM_INTERNAL.INVALIDATE_DEST_OBJ +DBMS_APPLY_ADM_INTERNAL.INVALIDATE_TABLE_OBJECT +DBMS_APPLY_ADM_INTERNAL.MONITOR_APPLY_PROGRESS +DBMS_APPLY_ADM_INTERNAL.POPULATE_APPLY_PROGRESS +DBMS_APPLY_ADM_INTERNAL.POPULATE_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.REGISTER_REMOTE_OBJECT +DBMS_APPLY_ADM_INTERNAL.RESET_CONFIGURATION +DBMS_APPLY_ADM_INTERNAL.SET_CHANGE_HANDLER +DBMS_APPLY_ADM_INTERNAL.SET_CONSTRAINT_COLUMNS +DBMS_APPLY_ADM_INTERNAL.SET_DML_CONFLICT_HANDLER +DBMS_APPLY_ADM_INTERNAL.SET_REPERROR_HANDLER +DBMS_APPLY_ADM_INTERNAL.SET_UPDATE_CONFLICT_HANDLER +DBMS_APPLY_ADM_INTERNAL.SYNC_PDB_PARTITIONS +DBMS_APPLY_ADM_INTERNAL.UNPICKLE_APPLY_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.UNPICKLE_LSBY_PROGRESS_REDO +DBMS_APPLY_ADM_INTERNAL.UNPICKLE_PROGRESS_REDO_META +DBMS_APPLY_ADM_INTERNAL.VALIDATE_REMOTE_COLUMN +DBMS_APPLY_ADM_IVK. +DBMS_APPLY_ADM_IVK.CREATE_APPLY_IVK +DBMS_APPLY_ERROR. +DBMS_APPLY_ERROR.DELETE_ALL_ERRORS +DBMS_APPLY_ERROR.DELETE_ERROR +DBMS_APPLY_ERROR.EXECUTE_ALL_ERRORS +DBMS_APPLY_ERROR.EXECUTE_ERROR +DBMS_APPLY_ERROR.GET_ERROR_MESSAGE +DBMS_APPLY_ERROR.GET_ERROR_TXN_CHUNK_SIZE +DBMS_APPLY_ERROR.PROCESS_USER_PROPERTIES +DBMS_APPLY_ERROR.SET_ERROR_TXN_CHUNK_SIZE +DBMS_APPLY_HANDLER_ADM. +DBMS_APPLY_HANDLER_ADM.ADD_STMT_HANDLER +DBMS_APPLY_HANDLER_ADM.REMOVE_STMT_HANDLER +DBMS_APPLY_HANDLER_ADM.SET_STMT_HANDLER +DBMS_APPLY_HANDLER_INTERNAL. +DBMS_APPLY_HANDLER_INTERNAL.ADD_STMT_HANDLER +DBMS_APPLY_HANDLER_INTERNAL.REMOVE_STMT_HANDLER +DBMS_APPLY_POSITION. +DBMS_APPLY_POSITION.GET_EXTERNAL_POSITION +DBMS_APPLY_POSITION.SET_GLOBAL_INSTANTIATION_SCN +DBMS_APPLY_POSITION.SET_SCHEMA_INSTANTIATION_SCN +DBMS_APPLY_POSITION.SET_TABLE_INSTANTIATION_SCN +DBMS_APPLY_PROCESS. +DBMS_APPLY_PROCESS.GET_APPLY# +DBMS_APP_CONT. +DBMS_APP_CONT.GET_LTXID_OUTCOME +DBMS_APP_CONT_PRVT. +DBMS_APP_CONT_PRVT.BEGIN_REPLAY +DBMS_APP_CONT_PRVT.END_REPLAY +DBMS_APP_CONT_PRVT.MONITOR_TXN +DBMS_APP_CONT_PRVT.PARTITION_EXISTS +DBMS_APP_CONT_PRVT.PREPARE_REPLAY +DBMS_AQ. +DBMS_AQ.AQ$_BACKGROUND_OPER +DBMS_AQ.AQ$_BACKGROUND_OPER_PAS +DBMS_AQ.AQ$_DELETE_DIOT_TAB +DBMS_AQ.AQ$_DELETE_HIST_TAB +DBMS_AQ.AQ$_DELETE_TIOT_TAB +DBMS_AQ.AQ$_DEQUEUE +DBMS_AQ.AQ$_ENQUEUE +DBMS_AQ.AQ$_INSERT_DIOT_TAB +DBMS_AQ.AQ$_INSERT_HIST_TAB +DBMS_AQ.AQ$_INSERT_TIOT_TAB +DBMS_AQ.AQ$_UPDATE_HIST_TAB +DBMS_AQ.AQ$_UPDATE_HIST_TAB_EX +DBMS_AQ.BIND_AGENT +DBMS_AQ.CREATE_DEQUEUE_JOB +DBMS_AQ.DEQUEUE +DBMS_AQ.DEQUEUE_ARRAY +DBMS_AQ.DEQUEUE_INTERNAL +DBMS_AQ.DEQUEUE_INTERNAL_PAS +DBMS_AQ.DISABLE_DEQUEUE_JOB +DBMS_AQ.DROP_DEQUEUE_JOB +DBMS_AQ.ENABLE_DEQUEUE_JOB +DBMS_AQ.ENQUEUE +DBMS_AQ.ENQUEUE_ARRAY +DBMS_AQ.ENQUEUE_INT_SHARD +DBMS_AQ.ENQUEUE_INT_SHARD_JMS +DBMS_AQ.ENQUEUE_INT_UNSHARDED +DBMS_AQ.ENQUEUE_INT_UNSHARDED_PAS +DBMS_AQ.LISTEN +DBMS_AQ.POST +DBMS_AQ.REGISTER +DBMS_AQ.REGISTRATION_REPLICATION +DBMS_AQ.UNBIND_AGENT +DBMS_AQ.UNREGISTER +DBMS_AQADM. +DBMS_AQADM.ADD_ALIAS_TO_LDAP +DBMS_AQADM.ADD_CONNECTION_TO_LDAP +DBMS_AQADM.ADD_SUBSCRIBER +DBMS_AQADM.ALTER_AQ_AGENT +DBMS_AQADM.ALTER_PROPAGATION_SCHEDULE +DBMS_AQADM.ALTER_QUEUE +DBMS_AQADM.ALTER_QUEUE_TABLE +DBMS_AQADM.ALTER_SHARDED_QUEUE +DBMS_AQADM.ALTER_SUBSCRIBER +DBMS_AQADM.AQ$_PROPAQ +DBMS_AQADM.CREATE_AQ_AGENT +DBMS_AQADM.CREATE_EXCEPTION_QUEUE +DBMS_AQADM.CREATE_NP_QUEUE +DBMS_AQADM.CREATE_QUEUE +DBMS_AQADM.CREATE_QUEUE_TABLE +DBMS_AQADM.CREATE_SHARDED_QUEUE +DBMS_AQADM.DEL_ALIAS_FROM_LDAP +DBMS_AQADM.DEL_CONNECTION_FROM_LDAP +DBMS_AQADM.DISABLE_DB_ACCESS +DBMS_AQADM.DISABLE_PROPAGATION_SCHEDULE +DBMS_AQADM.DROP_AQ_AGENT +DBMS_AQADM.DROP_QUEUE +DBMS_AQADM.DROP_QUEUE_TABLE +DBMS_AQADM.DROP_SHARDED_QUEUE +DBMS_AQADM.ENABLE_DB_ACCESS +DBMS_AQADM.ENABLE_JMS_TYPES +DBMS_AQADM.ENABLE_PROPAGATION_SCHEDULE +DBMS_AQADM.GET_MAX_STREAMS_POOL +DBMS_AQADM.GET_MIN_STREAMS_POOL +DBMS_AQADM.GET_PROP_SEQNO +DBMS_AQADM.GET_QUEUE_PARAMETER +DBMS_AQADM.GET_REPLAY_INFO +DBMS_AQADM.GET_TYPE_INFO +DBMS_AQADM.GET_WATERMARK +DBMS_AQADM.GRANT_QUEUE_PRIVILEGE +DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE +DBMS_AQADM.GRANT_TYPE_ACCESS +DBMS_AQADM.ISSHARDEDQUEUE +DBMS_AQADM.MIGRATE_QUEUE_TABLE +DBMS_AQADM.NONREPUDIATE_RECEIVER +DBMS_AQADM.NONREPUDIATE_SENDER +DBMS_AQADM.PURGE_QUEUE_TABLE +DBMS_AQADM.QUEUE_SUBSCRIBERS +DBMS_AQADM.RECOVER_PROPAGATION +DBMS_AQADM.REMOVE_SUBSCRIBER +DBMS_AQADM.RESET_REPLAY_INFO +DBMS_AQADM.REVOKE_QUEUE_PRIVILEGE +DBMS_AQADM.REVOKE_SYSTEM_PRIVILEGE +DBMS_AQADM.SCHEDULE_PROPAGATION +DBMS_AQADM.SET_MAX_STREAMS_POOL +DBMS_AQADM.SET_MIN_STREAMS_POOL +DBMS_AQADM.SET_QUEUE_PARAMETER +DBMS_AQADM.SET_WATERMARK +DBMS_AQADM.START_QUEUE +DBMS_AQADM.START_TIME_MANAGER +DBMS_AQADM.STOP_QUEUE +DBMS_AQADM.STOP_TIME_MANAGER +DBMS_AQADM.UNSCHEDULE_PROPAGATION +DBMS_AQADM.UNSET_QUEUE_PARAMETER +DBMS_AQADM.VERIFY_QUEUE_TYPES +DBMS_AQADM.VERIFY_QUEUE_TYPES_GET_NRP +DBMS_AQADM.VERIFY_QUEUE_TYPES_NO_QUEUE +DBMS_AQADM.VERIFY_SHARDED_QUEUE +DBMS_AQADM_INV. +DBMS_AQADM_INV.EXECUTE_STMT +DBMS_AQADM_INV.EXECUTE_STMT2 +DBMS_AQADM_INV.EXECUTE_STMTCUSR +DBMS_AQADM_INV.EXECUTE_STMTCUSR2 +DBMS_AQADM_INV.KWQA_3GL_CHECKQUEPRIV +DBMS_AQADM_INV.KWQA_3GL_CHECKSYSPRIV +DBMS_AQADM_INV.KWQA_3GL_CHECKSYSPRIVCUSR +DBMS_AQADM_SYS. +DBMS_AQADM_SYS.ADD_ALIAS_TO_LDAP +DBMS_AQADM_SYS.ADD_BUFFER +DBMS_AQADM_SYS.ADD_BUFFER_INT +DBMS_AQADM_SYS.ADD_BUFFER_TABLES +DBMS_AQADM_SYS.ADD_BUFFER_TABLES_INT +DBMS_AQADM_SYS.ADD_CHILD +DBMS_AQADM_SYS.ADD_CONNECTION_TO_LDAP +DBMS_AQADM_SYS.ADD_DB_LINK +DBMS_AQADM_SYS.ADD_NONDURABLE_SUBSCRIBER +DBMS_AQADM_SYS.ADD_QTAB_EXPDEP +DBMS_AQADM_SYS.ADD_QUEUE_TAB_TO_LDAP +DBMS_AQADM_SYS.ADD_QUEUE_TO_LDAP +DBMS_AQADM_SYS.ADD_SPILLED_IOT +DBMS_AQADM_SYS.ADD_SPILLED_TABLE +DBMS_AQADM_SYS.ADD_SUBSCRIBER +DBMS_AQADM_SYS.ADD_SUBSCRIBER_11G +DBMS_AQADM_SYS.ADD_SUBSCRIBER_TO_LDAP +DBMS_AQADM_SYS.ALTER_AQ_AGENT +DBMS_AQADM_SYS.ALTER_PROPAGATION_SCHEDULE_INT +DBMS_AQADM_SYS.ALTER_QUEUE +DBMS_AQADM_SYS.ALTER_QUEUE_INT +DBMS_AQADM_SYS.ALTER_QUEUE_TABLE +DBMS_AQADM_SYS.ALTER_QUEUE_TABLE_INT +DBMS_AQADM_SYS.ALTER_SHARDED_QUEUE +DBMS_AQADM_SYS.ALTER_SUBSCRIBER +DBMS_AQADM_SYS.ALTER_SUBSCRIBER_11G +DBMS_AQADM_SYS.ALTER_SUBSCRIBER_11G_INT +DBMS_AQADM_SYS.ANALYZE_MESSAGE_CACHE +DBMS_AQADM_SYS.AQ$_PROPAGATION_PROCEDURE +DBMS_AQADM_SYS.AQ$_PROPAQ +DBMS_AQADM_SYS.BEGINTRANS +DBMS_AQADM_SYS.BFQ +DBMS_AQADM_SYS.CALCULATE_MESSAGE_CACHE +DBMS_AQADM_SYS.CHANGE_QUEUE_REPL_MODE +DBMS_AQADM_SYS.CHK_QT_FLG +DBMS_AQADM_SYS.CLR_QT_FLG +DBMS_AQADM_SYS.CNF +DBMS_AQADM_SYS.COMPATIBLE_100 +DBMS_AQADM_SYS.COMPUTE_NAME +DBMS_AQADM_SYS.CREATECACHEOBJECT +DBMS_AQADM_SYS.CREATEQUEUE +DBMS_AQADM_SYS.CREATE_AQ_AGENT +DBMS_AQADM_SYS.CREATE_BASE_VIEW +DBMS_AQADM_SYS.CREATE_BASE_VIEW10_1_0 +DBMS_AQADM_SYS.CREATE_BUFFER_VIEW +DBMS_AQADM_SYS.CREATE_BUFFER_VIEW101 +DBMS_AQADM_SYS.CREATE_DEQ_VIEW +DBMS_AQADM_SYS.CREATE_DEQ_VIEW_PRE11_2 +DBMS_AQADM_SYS.CREATE_EVICTION_TABLE +DBMS_AQADM_SYS.CREATE_EXCEPTION_MAP_12G +DBMS_AQADM_SYS.CREATE_EXCEPTION_QUEUE +DBMS_AQADM_SYS.CREATE_NP_QUEUE +DBMS_AQADM_SYS.CREATE_NP_QUEUE_INT +DBMS_AQADM_SYS.CREATE_PLSQL_NOTIF_QUEUE +DBMS_AQADM_SYS.CREATE_PLSQL_NOTIF_QUEUE_INT +DBMS_AQADM_SYS.CREATE_PROP_VIEWS +DBMS_AQADM_SYS.CREATE_QT_DICTIONARY +DBMS_AQADM_SYS.CREATE_QUEUE +DBMS_AQADM_SYS.CREATE_QUEUE_INT +DBMS_AQADM_SYS.CREATE_QUEUE_TABLE +DBMS_AQADM_SYS.CREATE_QUEUE_TABLE_INT +DBMS_AQADM_SYS.CREATE_QUEUE_TABLE_TZ +DBMS_AQADM_SYS.CREATE_SHARDED_QUEUE +DBMS_AQADM_SYS.CREATE_SPILLED_TABLES_IOTS +DBMS_AQADM_SYS.CTQT +DBMS_AQADM_SYS.DELETE_FROM_DEQIOT +DBMS_AQADM_SYS.DELETE_MESSAGES_FOR_REMOVESUB +DBMS_AQADM_SYS.DEL_ALIAS_FROM_LDAP +DBMS_AQADM_SYS.DEL_CONNECTION_FROM_LDAP +DBMS_AQADM_SYS.DEL_QUEUE_FROM_LDAP +DBMS_AQADM_SYS.DEL_SUBSCRIBER_FROM_LDAP +DBMS_AQADM_SYS.DESTROYCACHEOBJECT +DBMS_AQADM_SYS.DISABLE_DB_ACCESS +DBMS_AQADM_SYS.DISABLE_PROP_SCHEDULE_INT +DBMS_AQADM_SYS.DISABLE_REGISTRATION +DBMS_AQADM_SYS.DROP_AQ_AGENT +DBMS_AQADM_SYS.DROP_BUFFER +DBMS_AQADM_SYS.DROP_BUFFER_VIEW +DBMS_AQADM_SYS.DROP_EVICTION_TABLE +DBMS_AQADM_SYS.DROP_QTAB_EXPDEP +DBMS_AQADM_SYS.DROP_QUEUE +DBMS_AQADM_SYS.DROP_QUEUE_INT +DBMS_AQADM_SYS.DROP_QUEUE_TABLE +DBMS_AQADM_SYS.DROP_QUEUE_TABLE_INT +DBMS_AQADM_SYS.DROP_QUEUE_TAB_FROM_LDAP +DBMS_AQADM_SYS.DROP_SHARDED_QUEUE +DBMS_AQADM_SYS.DROP_SHARDED_QUEUE_INT +DBMS_AQADM_SYS.DROP_SPILLED_IOT +DBMS_AQADM_SYS.DROP_SPILLED_TABLE +DBMS_AQADM_SYS.DUMP_TRACE +DBMS_AQADM_SYS.ENABLE_DB_ACCESS +DBMS_AQADM_SYS.ENABLE_JMS_TYPES +DBMS_AQADM_SYS.ENABLE_JMS_TYPES_INT +DBMS_AQADM_SYS.ENABLE_PROP_SCHEDULE_INT +DBMS_AQADM_SYS.ENABLE_REGISTRATION +DBMS_AQADM_SYS.ENDTRANS +DBMS_AQADM_SYS.ENQUOTE_LITERAL +DBMS_AQADM_SYS.FAILOVER_NOTIF_QUEUE +DBMS_AQADM_SYS.GET_ADT_QTABLE_PAYLOAD_NAME +DBMS_AQADM_SYS.GET_CLIENT_SESSION_ID +DBMS_AQADM_SYS.GET_OWNER_INSTANCE +DBMS_AQADM_SYS.GET_PROCNAME +DBMS_AQADM_SYS.GET_PROP_SEQNO +DBMS_AQADM_SYS.GET_QUEUE_PARAMETER +DBMS_AQADM_SYS.GET_QUEUE_TABLE_NAME +DBMS_AQADM_SYS.GET_REMOTE_QTYPE_INFO_TTC +DBMS_AQADM_SYS.GET_SCHEMA_OID +DBMS_AQADM_SYS.GET_SEQ_NXTVAL +DBMS_AQADM_SYS.GET_TRANS_INFO +DBMS_AQADM_SYS.GET_TYPE_INFO +DBMS_AQADM_SYS.GRANT_QUEUE_PRIVILEGE +DBMS_AQADM_SYS.GRANT_QUEUE_PRIVILEGE_INT +DBMS_AQADM_SYS.GRANT_SYSTEM_PRIVILEGE +DBMS_AQADM_SYS.GRANT_TYPE_ACCESS +DBMS_AQADM_SYS.IMPPEND_FLAG_CLEAR +DBMS_AQADM_SYS.INVALIDATE_QUEUE +DBMS_AQADM_SYS.IN_DATAPUMP_IMPORT +DBMS_AQADM_SYS.IS12GJMSQUEUE +DBMS_AQADM_SYS.IS12GSHARDEDQUEUE +DBMS_AQADM_SYS.ISALIVE +DBMS_AQADM_SYS.ISSHARDEDQUEUE +DBMS_AQADM_SYS.I_BIND_AGENT +DBMS_AQADM_SYS.I_CREATE_QT +DBMS_AQADM_SYS.I_PARSE_NAME +DBMS_AQADM_SYS.I_UNBIND_AGENT +DBMS_AQADM_SYS.KWQAQPDHASLOB +DBMS_AQADM_SYS.LOCKQUEUE +DBMS_AQADM_SYS.MARK_INTERNAL_TABLES +DBMS_AQADM_SYS.MATCH_TDS +DBMS_AQADM_SYS.MCQ +DBMS_AQADM_SYS.MCQ_12G +DBMS_AQADM_SYS.MCQ_12GJMS +DBMS_AQADM_SYS.MCQ_8_0 +DBMS_AQADM_SYS.MCQ_8_1 +DBMS_AQADM_SYS.MIGRATE_QUEUE_TABLE +DBMS_AQADM_SYS.MIGRATE_QUEUE_TABLE_INT +DBMS_AQADM_SYS.MOD_QUEUE_IN_LDAP +DBMS_AQADM_SYS.MOD_QUEUE_TAB_IN_LDAP +DBMS_AQADM_SYS.MOD_SUBSCRIBER_IN_LDAP +DBMS_AQADM_SYS.NEWQ_10_1 +DBMS_AQADM_SYS.NEWQ_12G +DBMS_AQADM_SYS.NEWQ_8_1 +DBMS_AQADM_SYS.OBJECT_EXISTS +DBMS_AQADM_SYS.PARSE_NAME +DBMS_AQADM_SYS.PATCH_DEQUEUE_IOT +DBMS_AQADM_SYS.PATCH_HISTORY_IOT +DBMS_AQADM_SYS.PATCH_QUEUE_TABLE +DBMS_AQADM_SYS.PATCH_TIMEMGR_IOT +DBMS_AQADM_SYS.PRS_CMT +DBMS_AQADM_SYS.PRS_QTYP +DBMS_AQADM_SYS.PRS_RBK +DBMS_AQADM_SYS.PRS_SEQ +DBMS_AQADM_SYS.PSTUPD_CREATE_EVICTION_TABLE +DBMS_AQADM_SYS.PURGE_QUEUE_TABLE +DBMS_AQADM_SYS.PURGE_QUEUE_TABLE_ALL +DBMS_AQADM_SYS.PURGE_QUEUE_TABLE_INT +DBMS_AQADM_SYS.QT_BUFQ_COUNT +DBMS_AQADM_SYS.QT_COMPAT +DBMS_AQADM_SYS.QUEUE_SUBSCRIBERS +DBMS_AQADM_SYS.RECOVER_PROPAGATION_INT +DBMS_AQADM_SYS.REGISTER_DRIVER +DBMS_AQADM_SYS.REMOVE_ALL_NONDURABLESUB +DBMS_AQADM_SYS.REMOVE_CHILD_SUB +DBMS_AQADM_SYS.REMOVE_DB_LINK +DBMS_AQADM_SYS.REMOVE_NONDURABLESUB_CLIENT +DBMS_AQADM_SYS.REMOVE_NONDURABLE_DBSESSION +DBMS_AQADM_SYS.REMOVE_ORPHMSGS +DBMS_AQADM_SYS.REMOVE_ORPHMSGS_INT +DBMS_AQADM_SYS.REMOVE_ORPHMSGS_NR +DBMS_AQADM_SYS.REMOVE_SUBSCRIBER +DBMS_AQADM_SYS.REMOVE_SUBSCRIBER_11G +DBMS_AQADM_SYS.REMOVE_SUBSCRIBER_11G_INT +DBMS_AQADM_SYS.REVOKE_QUEUE_PRIVILEGE +DBMS_AQADM_SYS.REVOKE_QUEUE_PRIVILEGE_INT +DBMS_AQADM_SYS.REVOKE_SYSTEM_PRIVILEGE +DBMS_AQADM_SYS.RULESET_EXISTS +DBMS_AQADM_SYS.SCHEDULE_PROPAGATION +DBMS_AQADM_SYS.SCHEDULE_PROPAGATION_INT +DBMS_AQADM_SYS.SCQ_8_0 +DBMS_AQADM_SYS.SCQ_8_1 +DBMS_AQADM_SYS.SECURE_QT +DBMS_AQADM_SYS.SETREGISTRATIONNAME +DBMS_AQADM_SYS.SETSTREAMSCAPTUREOFF +DBMS_AQADM_SYS.SET_QUEUE_PARAMETER +DBMS_AQADM_SYS.START_QUEUE +DBMS_AQADM_SYS.START_QUEUE_INT +DBMS_AQADM_SYS.STOP_MESSAGE_FORWARDING +DBMS_AQADM_SYS.STOP_QUEUE +DBMS_AQADM_SYS.STOP_QUEUE_INT +DBMS_AQADM_SYS.TGQ +DBMS_AQADM_SYS.TRANSFORMATION_EXISTS +DBMS_AQADM_SYS.UNSCHEDULE_PROPAGATION +DBMS_AQADM_SYS.UNSCHEDULE_PROPAGATION_INT +DBMS_AQADM_SYS.UNSET_QUEUE_PARAMETER +DBMS_AQADM_SYS.UPGRADE_SHARDED_QUEUE +DBMS_AQADM_SYS.VALIDATE_QTAB_QUEUES +DBMS_AQADM_SYS.VALIDATE_QUEUE +DBMS_AQADM_SYS.VERIFY_AQ_TIMEZONE +DBMS_AQADM_SYS.VERIFY_QUEUE_TYPES +DBMS_AQADM_SYS.VERIFY_SHARDED_QUEUE +DBMS_AQADM_SYS.WRAPPER_CREATE_DEQUEUE_LOG +DBMS_AQADM_SYS.WRITE_TRACE +DBMS_AQADM_SYSCALLS. +DBMS_AQADM_SYSCALLS.GET_MAX_STREAMS_POOL +DBMS_AQADM_SYSCALLS.GET_MIN_STREAMS_POOL +DBMS_AQADM_SYSCALLS.GET_OWNER_INSTANCE +DBMS_AQADM_SYSCALLS.GET_WATERMARK +DBMS_AQADM_SYSCALLS.IS_LOGICAL_STBY +DBMS_AQADM_SYSCALLS.IS_OGG_DEST +DBMS_AQADM_SYSCALLS.IS_OGG_SRC +DBMS_AQADM_SYSCALLS.IS_PRIMARY +DBMS_AQADM_SYSCALLS.IS_QUEUE_REPLICATED +DBMS_AQADM_SYSCALLS.KWQA_3GL_ADDSUBSCRIBER +DBMS_AQADM_SYSCALLS.KWQA_3GL_ALTERCACHEOBJECT +DBMS_AQADM_SYSCALLS.KWQA_3GL_ALTERQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_ALTERSUBSCRIBER +DBMS_AQADM_SYSCALLS.KWQA_3GL_ANALYZE_MSG_CACHE +DBMS_AQADM_SYSCALLS.KWQA_3GL_AQPKG +DBMS_AQADM_SYSCALLS.KWQA_3GL_BEGINTRANS +DBMS_AQADM_SYSCALLS.KWQA_3GL_CALCULATE_MSG_CACHE +DBMS_AQADM_SYSCALLS.KWQA_3GL_CHANGE_REP_MOD +DBMS_AQADM_SYSCALLS.KWQA_3GL_CREATEADTPLODINFO +DBMS_AQADM_SYSCALLS.KWQA_3GL_CREATECACHEOBJECT +DBMS_AQADM_SYSCALLS.KWQA_3GL_CREATEQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_CREATEQUEUE_12G +DBMS_AQADM_SYSCALLS.KWQA_3GL_DESTROYCACHEOBJECT +DBMS_AQADM_SYSCALLS.KWQA_3GL_DMPESTACK +DBMS_AQADM_SYSCALLS.KWQA_3GL_DROPQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_DROPREGISTRATIONS +DBMS_AQADM_SYSCALLS.KWQA_3GL_ENDTRANS +DBMS_AQADM_SYSCALLS.KWQA_3GL_EVENTLEVEL +DBMS_AQADM_SYSCALLS.KWQA_3GL_EXECUTESTMT +DBMS_AQADM_SYSCALLS.KWQA_3GL_FIND_DATE +DBMS_AQADM_SYSCALLS.KWQA_3GL_GET_PARAMS_IN_QKGL +DBMS_AQADM_SYSCALLS.KWQA_3GL_GRANT +DBMS_AQADM_SYSCALLS.KWQA_3GL_INVALIDATEQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_ISSTREAMSCAPTUREOFF +DBMS_AQADM_SYSCALLS.KWQA_3GL_ISTTSIMPORT +DBMS_AQADM_SYSCALLS.KWQA_3GL_LOCKQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_LOCKQUEUETABLE +DBMS_AQADM_SYSCALLS.KWQA_3GL_MARK_INTERNAL_TABLES +DBMS_AQADM_SYSCALLS.KWQA_3GL_NFYNOI +DBMS_AQADM_SYSCALLS.KWQA_3GL_NTFNTRCCHK +DBMS_AQADM_SYSCALLS.KWQA_3GL_PARSEAQNAME +DBMS_AQADM_SYSCALLS.KWQA_3GL_PRINTREMSUBLIST +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGEREMSUBLIST +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGE_CBK_OBJ +DBMS_AQADM_SYSCALLS.KWQA_3GL_PURGE_QUEUE_TABLE +DBMS_AQADM_SYSCALLS.KWQA_3GL_QT_COMPAT +DBMS_AQADM_SYSCALLS.KWQA_3GL_REMOVESUBSCRIBER +DBMS_AQADM_SYSCALLS.KWQA_3GL_REVOKE +DBMS_AQADM_SYSCALLS.KWQA_3GL_SCHEDULETMSERVICE +DBMS_AQADM_SYSCALLS.KWQA_3GL_SETMSGWAIT +DBMS_AQADM_SYSCALLS.KWQA_3GL_SETREGISTRATIONNAME +DBMS_AQADM_SYSCALLS.KWQA_3GL_SETSTREAMSCAPTUREOFF +DBMS_AQADM_SYSCALLS.KWQA_3GL_SET_CLR_TABLE_FLAG +DBMS_AQADM_SYSCALLS.KWQA_3GL_SET_PARAMS_IN_QKGL +DBMS_AQADM_SYSCALLS.KWQA_3GL_SET_TABLE_STATS_LOCK +DBMS_AQADM_SYSCALLS.KWQA_3GL_SET_VIEW_FLAG +DBMS_AQADM_SYSCALLS.KWQA_3GL_STARTQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_STOPQUEUE +DBMS_AQADM_SYSCALLS.KWQA_3GL_STOP_MSG_FORWARDING +DBMS_AQADM_SYSCALLS.KWQA_3GL_UNSET_PARAMS_IN_QKGL +DBMS_AQADM_SYSCALLS.KWQA_3GL_UPDKGQM +DBMS_AQADM_SYSCALLS.KWQA_3GL_VALIDATEQUEUE +DBMS_AQADM_SYSCALLS.SET_MAX_STREAMS_POOL +DBMS_AQADM_SYSCALLS.SET_MIN_STREAMS_POOL +DBMS_AQADM_SYSCALLS.SET_WATERMARK +DBMS_AQADM_VAR. +DBMS_AQADM_VAR.DBCOMPATMAJOR +DBMS_AQADM_VAR.DBCOMPATMINOR +DBMS_AQADM_VAR.GETIDNLENGTH +DBMS_AQADM_VAR.GET_DB_BLOCK_SIZE +DBMS_AQADM_VAR.ISLONGIDN +DBMS_AQELM. +DBMS_AQELM.GET_MAILHOST +DBMS_AQELM.GET_MAILPORT +DBMS_AQELM.GET_PROXY +DBMS_AQELM.GET_SENDFROM +DBMS_AQELM.GET_TXTIMEOUT +DBMS_AQELM.HTTP_SEND +DBMS_AQELM.SEND_EMAIL +DBMS_AQELM.SET_MAILHOST +DBMS_AQELM.SET_MAILPORT +DBMS_AQELM.SET_PROXY +DBMS_AQELM.SET_SENDFROM +DBMS_AQIN. +DBMS_AQIN.AQ$_ALTER_QUEUE +DBMS_AQIN.AQ$_CREATE_QUEUE +DBMS_AQIN.AQ$_CREATE_QUEUE_TABLE +DBMS_AQIN.AQ$_DEQUEUE_IN +DBMS_AQIN.AQ$_DEQUEUE_RAW +DBMS_AQIN.AQ$_DROP_QUEUE +DBMS_AQIN.AQ$_DROP_QUEUE_TABLE +DBMS_AQIN.AQ$_ENQUEUE_OBJ +DBMS_AQIN.AQ$_ENQUEUE_OBJ_NO_RECPL +DBMS_AQIN.AQ$_ENQUEUE_RAW +DBMS_AQIN.AQ$_ENQUEUE_RAW_NO_RECPL +DBMS_AQIN.AQ$_GETBLOB_FROM_JMSANYDATA +DBMS_AQIN.AQ$_GETCLOB_FROM_JMSANYDATA +DBMS_AQIN.AQ$_JMS_ENQUEUE_BYTES_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_MAP_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_OBJECT_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_STREAM_MESSAGE +DBMS_AQIN.AQ$_JMS_ENQUEUE_TEXT_MESSAGE +DBMS_AQIN.AQ$_LISTEN +DBMS_AQIN.AQ$_QUEUE_SUBSCRIBERS +DBMS_AQIN.AQ$_REGISTER_IN +DBMS_AQIN.AQ$_START_QUEUE +DBMS_AQIN.AQ$_STOP_QUEUE +DBMS_AQIN.GET_DEQ_SORT +DBMS_AQIN.GET_MULTI_RETRY +DBMS_AQIN.SET_DEQ_SORT +DBMS_AQIN.SET_MULTI_RETRY +DBMS_AQJMS. +DBMS_AQJMS.AQ$_ADD_NONDURABLE_SUBSCRIBER +DBMS_AQJMS.AQ$_ADD_NONDURABLE_SUB_SQ +DBMS_AQJMS.AQ$_ADD_SUBSCRIBER +DBMS_AQJMS.AQ$_ALTER_SUBSCRIBER +DBMS_AQJMS.AQ$_DROPNONDURABLE_SUB_SQ +DBMS_AQJMS.AQ$_GET_PROP_STAT +DBMS_AQJMS.AQ$_GET_TRANS_TYPE +DBMS_AQJMS.AQ$_PR +DBMS_AQJMS.AQ$_PURGE_MESSAGE +DBMS_AQJMS.AQ$_REGISTER +DBMS_AQJMS.AQ$_REMOVE_SUBSCRIBER +DBMS_AQJMS.AQ$_REM_NONDURABLE_SUBSCRIBER +DBMS_AQJMS.AQ$_UNREGISTER +DBMS_AQJMS.AQ$_UPDATE_PROP_STAT +DBMS_AQJMS.AQ$_UPDATE_PROP_STAT_QNAME +DBMS_AQJMS.CLEAR_DBSESSION_GUID +DBMS_AQJMS.CLEAR_GLOBAL_AQCLNTDB_CTX_CLNT +DBMS_AQJMS.CLEAR_GLOBAL_AQCLNTDB_CTX_DB +DBMS_AQJMS.FETCHNONPERSDATA_12C_CALLOUT +DBMS_AQJMS.GET_DB_USERNAME_FOR_AGENT +DBMS_AQJMS.GET_NUMVAL +DBMS_AQJMS.GET_PTYPE +DBMS_AQJMS.GET_STRVAL +DBMS_AQJMS.SEARCH_BOOLEAN_PROPERTY +DBMS_AQJMS.SEARCH_DOUBLE_PROPERTY +DBMS_AQJMS.SEARCH_NUMBER_PROPERTY +DBMS_AQJMS.SEARCH_STRING_PROPERTY +DBMS_AQJMS.SET_DBSESSION_GUID +DBMS_AQJMS.SET_GLOBAL_AQCLNTDB_CTX +DBMS_AQJMS.SUBSCRIBER_EXISTS +DBMS_AQJMS_INTERNAL. +DBMS_AQJMS_INTERNAL.AQ$_GET_PROP_STAT +DBMS_AQJMS_INTERNAL.AQ$_GET_TRANS_TYPE +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_BYTES_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_MAP_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_OBJ_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_STR_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_DEQUEUE_TEXT_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_BYTES_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_MAP_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_OBJ_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_STR_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_JMS_ENQUEUE_TEXT_MESSAGES +DBMS_AQJMS_INTERNAL.AQ$_PURGE_MESSAGE +DBMS_AQJMS_INTERNAL.AQ$_UPDATE_PROP_STAT +DBMS_AQJMS_INTERNAL.CREATE_BYTES_MESSAGE +DBMS_AQJMS_INTERNAL.CREATE_GENERIC_MESSAGE +DBMS_AQJMS_INTERNAL.CREATE_MAP_MESSAGE +DBMS_AQJMS_INTERNAL.CREATE_OBJECT_MESSAGE +DBMS_AQJMS_INTERNAL.CREATE_STREAM_MESSAGE +DBMS_AQJMS_INTERNAL.CREATE_TEXT_MESSAGE +DBMS_AQJMS_INTERNAL.ENQUEUE_BYTES_INTERNAL +DBMS_AQJMS_INTERNAL.ENQUEUE_GENERIC_INTERNAL +DBMS_AQJMS_INTERNAL.ENQUEUE_MAP_INTERNAL +DBMS_AQJMS_INTERNAL.ENQUEUE_OBJECT_INTERNAL +DBMS_AQJMS_INTERNAL.ENQUEUE_STREAM_INTERNAL +DBMS_AQJMS_INTERNAL.ENQUEUE_TEXT_INTERNAL +DBMS_AQJMS_INTERNAL.FLATTEN_JMS +DBMS_AQJMS_INTERNAL.GET_DB_USERNAME_FOR_AGENT +DBMS_AQ_BQVIEW. +DBMS_AQ_BQVIEW.GET_ADT_PAYLOAD +DBMS_AQ_BQVIEW.GET_OPAQUE_PAYLOAD +DBMS_AQ_BQVIEW.GET_RAW_PAYLOAD +DBMS_AQ_EXP_CMT_TIME_TABLES. +DBMS_AQ_EXP_CMT_TIME_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_DEQUEUELOG_TABLES. +DBMS_AQ_EXP_DEQUEUELOG_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_HISTORY_TABLES. +DBMS_AQ_EXP_HISTORY_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_INDEX_TABLES. +DBMS_AQ_EXP_INDEX_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_QUEUES. +DBMS_AQ_EXP_QUEUES.AUDIT_EXP +DBMS_AQ_EXP_QUEUES.AUDIT_SYSPRIVS_EXP +DBMS_AQ_EXP_QUEUES.CREATE_EXP +DBMS_AQ_EXP_QUEUES.DROP_EXP +DBMS_AQ_EXP_QUEUES.GRANT_EXP +DBMS_AQ_EXP_QUEUES.GRANT_SYSPRIVS_EXP +DBMS_AQ_EXP_QUEUE_TABLES. +DBMS_AQ_EXP_QUEUE_TABLES.INSTANCE_CALLOUT +DBMS_AQ_EXP_QUEUE_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_QUEUE_TABLES.SCHEMA_CALLOUT +DBMS_AQ_EXP_QUEUE_TABLES.SCHEMA_INFO_EXP +DBMS_AQ_EXP_SIGNATURE_TABLES. +DBMS_AQ_EXP_SIGNATURE_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_SUBSCRIBER_TABLES. +DBMS_AQ_EXP_SUBSCRIBER_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_TIMEMGR_TABLES. +DBMS_AQ_EXP_TIMEMGR_TABLES.INSTANCE_INFO_EXP +DBMS_AQ_EXP_ZECURITY. +DBMS_AQ_EXP_ZECURITY.CHECK_EXPORT_PRIV +DBMS_AQ_IMPORT_INTERNAL. +DBMS_AQ_IMPORT_INTERNAL.AQ_DEFN_UPDATE +DBMS_AQ_IMPORT_INTERNAL.AQ_EXPORT_CHECK +DBMS_AQ_IMPORT_INTERNAL.AQ_EXPORT_IOT +DBMS_AQ_IMPORT_INTERNAL.AQ_EXPORT_SUBSCRIBER +DBMS_AQ_IMPORT_INTERNAL.AQ_IMPORT_IOT +DBMS_AQ_IMPORT_INTERNAL.AQ_IMPORT_SUBSCRIBER +DBMS_AQ_IMPORT_INTERNAL.AQ_TABLE_DEFN_UPDATE +DBMS_AQ_IMPORT_INTERNAL.AQ_TABLE_EXPORT_CHECK +DBMS_AQ_IMPORT_INTERNAL.CREATE_EXPACT_ENTRY +DBMS_AQ_IMPORT_INTERNAL.REMOVE_EXPACT_ENTRY +DBMS_AQ_IMP_INTERNAL. +DBMS_AQ_IMP_INTERNAL.BUMP_TID_SEQUENCE +DBMS_AQ_IMP_INTERNAL.CLEANUP_SCHEMA_IMPORT +DBMS_AQ_IMP_INTERNAL.IMPORT_CMT_TIME_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_DEQUEUELOG_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_HISTORY_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_INDEX_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_DQTMAP +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_META +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_QTMAP +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_SEQ +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_SHARDED_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_SHARDS +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_SUBS +DBMS_AQ_IMP_INTERNAL.IMPORT_QUEUE_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_SIGNATURE_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_SUBSCRIBER_TABLE +DBMS_AQ_IMP_INTERNAL.IMPORT_TIMEMGR_TABLE +DBMS_AQ_IMP_ZECURITY. +DBMS_AQ_IMP_ZECURITY.CHECK_IMPORT_PRIV +DBMS_AQ_INV. +DBMS_AQ_INV.CREATE_PROC_BUFFERED_MCQ +DBMS_AQ_INV.CREATE_PROC_BUFFERED_SCQ +DBMS_AQ_INV.INTERNAL_PURGE_QUEUE_TABLE +DBMS_AQ_INV.PURGE_BUFFERED_MCQ_TABLE +DBMS_AQ_INV.PURGE_BUFFERED_SCQ_TABLE +DBMS_AQ_INV.PURGE_ELIGIBLE_RCPT_MESSAGES +DBMS_AQ_INV.PURGE_ELIGIBLE_RCPT_MSGS_TXN +DBMS_AQ_INV.PURGE_ELIGIBLE_SUB_MESSAGES +DBMS_AQ_INV.PURGE_ELIGIBLE_SUB_MSGS_TXN +DBMS_AQ_INV.PURGE_PERSISTENT_MCQ_TABLE +DBMS_AQ_INV.PURGE_PERSISTENT_SCQ_TABLE +DBMS_AQ_INV.PURGE_PROCEDURE_NAME +DBMS_AQ_SYS_EXP_ACTIONS. +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_AGENTS +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_QUEUE_META +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_QUEUE_SEQUENCE +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_QUEUE_SHARDED_TABLE +DBMS_AQ_SYS_EXP_ACTIONS.EXPORT_TABLE +DBMS_AQ_SYS_EXP_ACTIONS.POST_SCHEMA_CLEANUP +DBMS_AQ_SYS_EXP_INTERNAL. +DBMS_AQ_SYS_EXP_INTERNAL.APPENDBUF +DBMS_AQ_SYS_EXP_INTERNAL.COUNT_AQ_OBJECTS +DBMS_AQ_SYS_EXP_INTERNAL.DEREGISTER_PROCEDURAL_ACTION +DBMS_AQ_SYS_EXP_INTERNAL.DEREGISTER_PROCEDURAL_OBJECT +DBMS_AQ_SYS_EXP_INTERNAL.DOWNGRADE_EXPORT_ACTIONS +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_QUEUE +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_QUEUE_PRIVILEGE +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_QUEUE_TABLE +DBMS_AQ_SYS_EXP_INTERNAL.EXPORT_SYSTEM_PRIVILEGE +DBMS_AQ_SYS_EXP_INTERNAL.POPULATE_TTS_DQMAP +DBMS_AQ_SYS_EXP_INTERNAL.POPULATE_TTS_QTMAP +DBMS_AQ_SYS_EXP_INTERNAL.POPULATE_TTS_SHARDS +DBMS_AQ_SYS_EXP_INTERNAL.POPULATE_TTS_SUB +DBMS_AQ_SYS_EXP_INTERNAL.REGISTER_PROCEDURAL_ACTION +DBMS_AQ_SYS_EXP_INTERNAL.REGISTER_PROCEDURAL_OBJECT +DBMS_AQ_SYS_EXP_INTERNAL.TO_OWNERID +DBMS_AQ_SYS_EXP_INTERNAL.UPGRADE_EXPORT_ACTIONS +DBMS_AQ_SYS_IMP_INTERNAL. +DBMS_AQ_SYS_IMP_INTERNAL.BUMP_TID_SEQUENCE +DBMS_AQ_SYS_IMP_INTERNAL.CLEANUP_SCHEMA_IMPORT +DBMS_AQ_SYS_IMP_INTERNAL.CREATE_PMAP_DICTIONARY +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_CMT_TIME_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_DEQUEUELOG_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_EXP_ENTRY +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_HISTORY_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_INDEX_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QTAB_EXPDEP +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_DQTMAP +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_META +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_QTMAP +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_SEQ +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_SHARDED_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_SHARDS +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_SUBS +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_QUEUE_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_SIGNATURE_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_SUBSCRIBER_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IMPORT_TIMEMGR_TABLE +DBMS_AQ_SYS_IMP_INTERNAL.IS_TTS_EXPORT +DBMS_AQ_SYS_IMP_INTERNAL.I_SHARDED_CALLOUT +DBMS_AQ_SYS_IMP_INTERNAL.POST_TTS_REBUILD_IDX +DBMS_AQ_SYS_IMP_INTERNAL.POST_TTS_SHARDED_Q +DBMS_AQ_SYS_IMP_INTERNAL.POST_TTS_WORK +DBMS_AQ_SYS_IMP_INTERNAL.POST_TTS_WORK_REMAINING +DBMS_ARCH_PROVIDER_INTL. +DBMS_ARCH_PROVIDER_INTL.APPENDCACHEJOURNAL +DBMS_ARCH_PROVIDER_INTL.APTRACE +DBMS_ARCH_PROVIDER_INTL.CREATEACCESSTBL +DBMS_ARCH_PROVIDER_INTL.CREATECACHESIZETBL +DBMS_ARCH_PROVIDER_INTL.CREATECJRNLTBL +DBMS_ARCH_PROVIDER_INTL.CREATEDELBFTBL +DBMS_ARCH_PROVIDER_INTL.CREATELRUENTRY +DBMS_ARCH_PROVIDER_INTL.CREATESTORETBLS +DBMS_ARCH_PROVIDER_INTL.CREATETARBALLTBL +DBMS_ARCH_PROVIDER_INTL.CREATETRACETBL +DBMS_ARCH_PROVIDER_INTL.DELETELRUENTRY +DBMS_ARCH_PROVIDER_INTL.DROPPROVIDERTABLES +DBMS_ARCH_PROVIDER_INTL.DROPSTORETBL +DBMS_ARCH_PROVIDER_INTL.DROPSTORETBLS +DBMS_ARCH_PROVIDER_INTL.GETLOBCACHEUSAGE +DBMS_ARCH_PROVIDER_INTL.GETSTOREGUID +DBMS_ARCH_PROVIDER_INTL.GETSTOREPROPERTY +DBMS_ARCH_PROVIDER_INTL.GETSTORETBLNAME +DBMS_ARCH_PROVIDER_INTL.GRANTSELECT +DBMS_ARCH_PROVIDER_INTL.REGISTERSTORE +DBMS_ARCH_PROVIDER_INTL.RENAMELRUENTRY +DBMS_ARCH_PROVIDER_INTL.RENAMELRUSUBENTRIES +DBMS_ARCH_PROVIDER_INTL.SETSTOREPROPERTY +DBMS_ARCH_PROVIDER_INTL.UNREGISTERSTORE +DBMS_ARCH_PROVIDER_INTL.UPDATEACCESSFORLRU +DBMS_ASH. +DBMS_ASH.FETCH_OBJ_NAME_AWR +DBMS_ASH.FETCH_OBJ_NAME_LOCAL +DBMS_ASH.FETCH_PROCEDURE_NAME +DBMS_ASH.FETCH_SQLTEXT_AWR +DBMS_ASH.FETCH_SQLTEXT_LOCAL +DBMS_ASH.FETCH_USER_NAME +DBMS_ASH.GETCPUINFO +DBMS_ASH.GETDATAHISTORICAL +DBMS_ASH.GETDATAREALTIME +DBMS_ASH.GETTIMEPICKERHISTORICAL +DBMS_ASH.GETTIMEPICKERREALTIME +DBMS_ASH.INCREMENTDATA +DBMS_ASH.INCREMENTTIMEPICKER +DBMS_ASH.STR_TO_ASCII +DBMS_ASH_INTERNAL. +DBMS_ASH_INTERNAL.ASH_PHASE_EXECUTION +DBMS_ASH_INTERNAL.ASH_ROLLUP_SQL_1D +DBMS_ASH_INTERNAL.ASH_ROLLUP_SQL_2D +DBMS_ASH_INTERNAL.ASH_ROLLUP_SQL_3D +DBMS_ASH_INTERNAL.ASH_ROLLUP_XML_1D +DBMS_ASH_INTERNAL.ASH_ROLLUP_XML_2D +DBMS_ASH_INTERNAL.ASH_SQL_FOR_AWR +DBMS_ASH_INTERNAL.ASH_VIEW_SQL +DBMS_ASH_INTERNAL.BUILD_ACTION_TAG +DBMS_ASH_INTERNAL.BUILD_DATABASE_HEADER_TAG +DBMS_ASH_INTERNAL.BUILD_EVENT_TAG +DBMS_ASH_INTERNAL.BUILD_SERVICE_MODULE_TAG +DBMS_ASH_INTERNAL.BUILD_SESSION_TAG +DBMS_ASH_INTERNAL.BUILD_SQL_TAG +DBMS_ASH_INTERNAL.FORMAT_PLSQL +DBMS_ASH_INTERNAL.GETPACKAGEVERSION +DBMS_ASH_INTERNAL.GET_ASH_HEADING +DBMS_ASH_INTERNAL.GET_BLKSID_ACTIVE +DBMS_ASH_INTERNAL.GET_BLKSID_DETAILS +DBMS_ASH_INTERNAL.GET_BLKSID_PROGRAM +DBMS_ASH_INTERNAL.GET_BLKSID_USER +DBMS_ASH_INTERNAL.GET_BLKSID_XIDS +DBMS_ASH_INTERNAL.GET_BLK_STR +DBMS_ASH_INTERNAL.GET_CPUINFO_XML +DBMS_ASH_INTERNAL.GET_LATCH_NAME +DBMS_ASH_INTERNAL.GET_OBJ_NAME +DBMS_ASH_INTERNAL.GET_PLSQL_NAME +DBMS_ASH_INTERNAL.GET_SID_ACTIVE +DBMS_ASH_INTERNAL.GET_SID_STR +DBMS_ASH_INTERNAL.GET_SLOT_WIDTH +DBMS_ASH_INTERNAL.GET_SQLTEXT +DBMS_ASH_INTERNAL.GET_SQL_PLAN_INFO +DBMS_ASH_INTERNAL.GET_SQL_PLAN_PERC +DBMS_ASH_INTERNAL.GET_USER_NAME +DBMS_ASH_INTERNAL.INITIALIZE +DBMS_ASH_INTERNAL.IN_MEMORY_ASH_VIEW_SQL +DBMS_ASH_INTERNAL.ON_DISK_ASH_VIEW_SQL +DBMS_ASH_INTERNAL.REPORT_ASHVIEWER_XML +DBMS_ASH_INTERNAL.RUNREPORT +DBMS_ASH_INTERNAL.SAMPLE_TIME_TO_ID +DBMS_ASH_INTERNAL.SHRINK_STRING +DBMS_ASH_INTERNAL.SLOT_ID_TO_TIME +DBMS_ASH_INTERNAL.UNIFIED_DBA_FILES +DBMS_ASH_INTERNAL.UNIFIED_DBA_OBJECTS +DBMS_ASH_INTERNAL.UNIFIED_PLSQL_SUBPROGRAMS +DBMS_ASH_INTERNAL.UNIFIED_SERVICE_NAMES +DBMS_ASH_INTERNAL.UNIFIED_SQLSTAT +DBMS_ASSERT. +DBMS_ASSERT.ENQUOTE_LITERAL +DBMS_ASSERT.ENQUOTE_NAME +DBMS_ASSERT.NOOP +DBMS_ASSERT.QUALIFIED_SQL_NAME +DBMS_ASSERT.SCHEMA_NAME +DBMS_ASSERT.SIMPLE_SQL_NAME +DBMS_ASSERT.SQL_OBJECT_NAME +DBMS_AUDIT_MGMT. +DBMS_AUDIT_MGMT.ALTER_PARTITION_INTERVAL +DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL +DBMS_AUDIT_MGMT.CLEAR_AUDIT_TRAIL_PROPERTY +DBMS_AUDIT_MGMT.CLEAR_LAST_ARCHIVE_TIMESTAMP +DBMS_AUDIT_MGMT.CREATE_PURGE_JOB +DBMS_AUDIT_MGMT.DEINIT_CLEANUP +DBMS_AUDIT_MGMT.DROP_OLD_UNIFIED_AUDIT_TABLES +DBMS_AUDIT_MGMT.DROP_PURGE_JOB +DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL +DBMS_AUDIT_MGMT.GET_AUDIT_COMMIT_DELAY +DBMS_AUDIT_MGMT.GET_AUDIT_TRAIL_PROPERTY_VALUE +DBMS_AUDIT_MGMT.GET_CLI_PART_ORANUM +DBMS_AUDIT_MGMT.GET_LAST_ARCHIVE_TIMESTAMP +DBMS_AUDIT_MGMT.GET_PART_HIGHVAL_AS_CHAR +DBMS_AUDIT_MGMT.INIT_CLEANUP +DBMS_AUDIT_MGMT.IS_CLEANUP_INITIALIZED +DBMS_AUDIT_MGMT.IS_CLEANUP_INITIALIZED2 +DBMS_AUDIT_MGMT.IS_DROPPABLE_PARTITION +DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES +DBMS_AUDIT_MGMT.MOVE_DBAUDIT_TABLES +DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION +DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY +DBMS_AUDIT_MGMT.SET_DEBUG_LEVEL +DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP +DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL +DBMS_AUDIT_MGMT.SET_PURGE_JOB_STATUS +DBMS_AUDIT_MGMT.TRANSFER_UNIFIED_AUDIT_RECORDS +DBMS_AUDIT_UTIL. +DBMS_AUDIT_UTIL.DECODE_RLS_INFO_ATRAIL_FGA +DBMS_AUDIT_UTIL.DECODE_RLS_INFO_ATRAIL_STD +DBMS_AUDIT_UTIL.DECODE_RLS_INFO_ATRAIL_UNI +DBMS_AUDIT_UTIL.DECODE_RLS_INFO_ATRAIL_XML +DBMS_AUTOTASK_PRVT. +DBMS_AUTOTASK_PRVT.ABA +DBMS_AUTOTASK_PRVT.AGE +DBMS_AUTOTASK_PRVT.GET_TASKS +DBMS_AUTOTASK_PRVT.SETUP +DBMS_AUTO_REPORT. +DBMS_AUTO_REPORT.FINISH_REPORT_CAPTURE +DBMS_AUTO_REPORT.FINISH_REPORT_CAPTURE_HELPER +DBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAIL +DBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAIL_XML +DBMS_AUTO_REPORT.REPORT_REPOSITORY_LIST_XML +DBMS_AUTO_REPORT.START_REPORT_CAPTURE +DBMS_AUTO_REPORT.START_REPORT_CAPTURE_HELPER +DBMS_AUTO_REPORT_INTERNAL. +DBMS_AUTO_REPORT_INTERNAL.I_SAVE_REPORT +DBMS_AUTO_REPORT_INTERNAL.I_UNCOMPRESS_REPORT +DBMS_AUTO_SQLTUNE. +DBMS_AUTO_SQLTUNE.EXECUTE_AUTO_TUNING_TASK +DBMS_AUTO_SQLTUNE.REPORT_AUTO_TUNING_TASK +DBMS_AUTO_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER +DBMS_AUTO_TASK. +DBMS_AUTO_TASK.CHECK_CLIENT_STATUS_OVERRIDE +DBMS_AUTO_TASK.DECODE_ATTRIBUTES +DBMS_AUTO_TASK.GET_CLIENT_STATUS_OVERRIDE +DBMS_AUTO_TASK.GET_SCHEDULE_DATE +DBMS_AUTO_TASK.RECONCILE_ATTRIBUTES +DBMS_AUTO_TASK.WINDOW_CALENDAR +DBMS_AUTO_TASK_ADMIN. +DBMS_AUTO_TASK_ADMIN.DEFAULT_RESET +DBMS_AUTO_TASK_ADMIN.DISABLE +DBMS_AUTO_TASK_ADMIN.ENABLE +DBMS_AUTO_TASK_ADMIN.GET_CLIENT_ATTRIBUTES +DBMS_AUTO_TASK_ADMIN.GET_P1_RESOURCES +DBMS_AUTO_TASK_ADMIN.OVERRIDE_PRIORITY +DBMS_AUTO_TASK_ADMIN.SET_ATTRIBUTE +DBMS_AUTO_TASK_ADMIN.SET_CLIENT_SERVICE +DBMS_AUTO_TASK_ADMIN.SET_P1_RESOURCES +DBMS_AUTO_TASK_EXPORT. +DBMS_AUTO_TASK_EXPORT.DOWNGRADE_FROM_11G +DBMS_AUTO_TASK_EXPORT.POST_UPGRADE_FROM_10G +DBMS_AUTO_TASK_EXPORT.SYSTEM_INFO_EXP +DBMS_AUTO_TASK_IMMEDIATE. +DBMS_AUTO_TASK_IMMEDIATE.GATHER_OPTIMIZER_STATS +DBMS_AW. +DBMS_AW.ADD_DIMENSION_SOURCE +DBMS_AW.ADVISE_CUBE +DBMS_AW.ADVISE_DIMENSIONALITY +DBMS_AW.ADVISE_PARTITIONING_DIMENSION +DBMS_AW.ADVISE_PARTITIONING_LEVEL +DBMS_AW.ADVISE_REL +DBMS_AW.ADVISE_SPARSITY +DBMS_AW.AW_ATTACH +DBMS_AW.AW_COPY +DBMS_AW.AW_CREATE +DBMS_AW.AW_DELETE +DBMS_AW.AW_DETACH +DBMS_AW.AW_IS_SYSTEM +DBMS_AW.AW_RENAME +DBMS_AW.AW_TABLESPACE +DBMS_AW.AW_UPDATE +DBMS_AW.CLEAN_ACCESS_TRACKING +DBMS_AW.CONVERT +DBMS_AW.DISABLE_ACCESS_TRACKING +DBMS_AW.EIF_BLOB_IN +DBMS_AW.EIF_BLOB_OUT +DBMS_AW.EIF_DELETE +DBMS_AW.EIF_IN +DBMS_AW.EIF_OUT +DBMS_AW.ENABLE_ACCESS_TRACKING +DBMS_AW.EVAL_NUMBER +DBMS_AW.EVAL_TEXT +DBMS_AW.EXECUTE +DBMS_AW.GATHER_STATS +DBMS_AW.GETLOG +DBMS_AW.GET_OBJ_PROTECT +DBMS_AW.INFILE +DBMS_AW.INITDRIVER +DBMS_AW.INTERP +DBMS_AW.INTERPCLOB +DBMS_AW.INTERP_SILENT +DBMS_AW.IN_AW_CLEANUP +DBMS_AW.MOVE_AWMETA +DBMS_AW.OLAP_ACTIVE +DBMS_AW.OLAP_ON +DBMS_AW.OLAP_RUNNING +DBMS_AW.OLAP_TYPE +DBMS_AW.PARSE_AW_NAME +DBMS_AW.PARSE_SCHEMA_NAME +DBMS_AW.PRINTLOG +DBMS_AW.PROP_CLOB +DBMS_AW.PROP_LEN +DBMS_AW.PROP_VAL +DBMS_AW.RUN +DBMS_AW.SHUTDOWN +DBMS_AW.SPARSITY_ADVICE_TABLE +DBMS_AW.STARTUP +DBMS_AW.TOGGLEDBCREATE +DBMS_AW.VALIDATE_AW_NAME +DBMS_AW.VALIDATE_SCHEMA_NAME +DBMS_AWR_PROTECTED. +DBMS_AWR_REPORT_LAYOUT. +DBMS_AWR_REPORT_LAYOUT.ASH_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.ASH_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.AWRG_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.AWRG_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.AWR_BUILD_ASH_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.AWR_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.AWR_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DBFUS_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DBFUS_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DIFFG_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DIFFG_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DIFF_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DIFF_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.DIFF_EXA_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.DIFF_EXA_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.EXADATA_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.EXADATA_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.SQL_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.SQL_BUILD_REPORT_SECTIONS +DBMS_AWR_REPORT_LAYOUT.WCR_BUILD_REPORT_CHAPTERS +DBMS_AWR_REPORT_LAYOUT.WCR_BUILD_REPORT_SECTIONS +DBMS_AW_EXP. +DBMS_AW_EXP.ALTER_LOB_SIZE +DBMS_AW_EXP.IMPORT_BEGIN100 +DBMS_AW_EXP.IMPORT_BEGIN112 +DBMS_AW_EXP.IMPORT_BEGIN120 +DBMS_AW_EXP.IMPORT_BEGIN92 +DBMS_AW_EXP.IMPORT_CALLOUT112 +DBMS_AW_EXP.IMPORT_CALLOUT120 +DBMS_AW_EXP.IMPORT_CHUNK100 +DBMS_AW_EXP.IMPORT_CHUNK112 +DBMS_AW_EXP.IMPORT_CHUNK120 +DBMS_AW_EXP.IMPORT_CHUNK92 +DBMS_AW_EXP.IMPORT_FINISH100 +DBMS_AW_EXP.IMPORT_FINISH112 +DBMS_AW_EXP.IMPORT_FINISH120 +DBMS_AW_EXP.IMPORT_FINISH92 +DBMS_AW_EXP.IMPORT_TABLE_CALLOUT120 +DBMS_AW_EXP.INSTANCE_CALLOUT_IMP +DBMS_AW_EXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_AW_EXP.LOB_WRITE +DBMS_AW_EXP.LOB_WRITEAPPEND +DBMS_AW_EXP.SCHEMA_CALLOUT +DBMS_AW_EXP.SCHEMA_INFO_EXP +DBMS_AW_EXP.TRANSPORTING +DBMS_AW_EXP.TRANS_BEGIN102 +DBMS_AW_EXP.TRANS_CHUNK102 +DBMS_AW_EXP.TRANS_FINISH102 +DBMS_AW_EXP.TRANS_FINISH112 +DBMS_AW_EXP.TRANS_FINISH120 +DBMS_AW_EXP.TRANS_FINISH122 +DBMS_AW_STATS. +DBMS_AW_STATS.ANALYZE +DBMS_AW_STATS.CLEAR +DBMS_AW_XML. +DBMS_AW_XML.EXECUTE +DBMS_AW_XML.EXECUTEFILE +DBMS_AW_XML.READAWMETADATA +DBMS_AW_XML.READAWMETADATA1 +DBMS_BACKUP_RESTORE. +DBMS_BACKUP_RESTORE.APPLYBACKUPPIECE +DBMS_BACKUP_RESTORE.APPLYDATAFILETO +DBMS_BACKUP_RESTORE.APPLYOFFLINERANGE +DBMS_BACKUP_RESTORE.APPLYSETDATAFILE +DBMS_BACKUP_RESTORE.AUTOBACKUPFLAG +DBMS_BACKUP_RESTORE.BACKUPARCHIVEDLOG +DBMS_BACKUP_RESTORE.BACKUPBACKUPPIECE +DBMS_BACKUP_RESTORE.BACKUPCANCEL +DBMS_BACKUP_RESTORE.BACKUPCONTROLFILE +DBMS_BACKUP_RESTORE.BACKUPDATAFILE +DBMS_BACKUP_RESTORE.BACKUPDATAFILECOPY +DBMS_BACKUP_RESTORE.BACKUPDMPFILE +DBMS_BACKUP_RESTORE.BACKUPPIECEBACKUP +DBMS_BACKUP_RESTORE.BACKUPPIECECREATE +DBMS_BACKUP_RESTORE.BACKUPPIECECRTDUPGET +DBMS_BACKUP_RESTORE.BACKUPPIECECRTDUPSET +DBMS_BACKUP_RESTORE.BACKUPPIECERESTORE +DBMS_BACKUP_RESTORE.BACKUPSETARCHIVEDLOG +DBMS_BACKUP_RESTORE.BACKUPSETDATAFILE +DBMS_BACKUP_RESTORE.BACKUPSETPIECE +DBMS_BACKUP_RESTORE.BACKUPSPFILE +DBMS_BACKUP_RESTORE.BACKUPSTATUS +DBMS_BACKUP_RESTORE.BACKUPVALIDATE +DBMS_BACKUP_RESTORE.BCTSET +DBMS_BACKUP_RESTORE.BCTSWITCH +DBMS_BACKUP_RESTORE.BEGINPREPLUGINTRANSLATION +DBMS_BACKUP_RESTORE.BMRADDBLOCK +DBMS_BACKUP_RESTORE.BMRCANCEL +DBMS_BACKUP_RESTORE.BMRDOMEDIARECOVERY +DBMS_BACKUP_RESTORE.BMRGETFILE +DBMS_BACKUP_RESTORE.BMRINITIALSCAN +DBMS_BACKUP_RESTORE.BMRRESTOREFROMFLASHBACK +DBMS_BACKUP_RESTORE.BMRRESTOREFROMSTANDBY +DBMS_BACKUP_RESTORE.BMRSCANDATAFILECOPY +DBMS_BACKUP_RESTORE.BMRSTART +DBMS_BACKUP_RESTORE.CANKEEPDATAFILES +DBMS_BACKUP_RESTORE.CFILECALCSIZEARRAY +DBMS_BACKUP_RESTORE.CFILECALCSIZELIST +DBMS_BACKUP_RESTORE.CFILEMAKEANDUSESNAPSHOT +DBMS_BACKUP_RESTORE.CFILERESIZESECTION +DBMS_BACKUP_RESTORE.CFILESETSNAPSHOTNAME +DBMS_BACKUP_RESTORE.CFILEUSECOPY +DBMS_BACKUP_RESTORE.CFILEUSECURRENT +DBMS_BACKUP_RESTORE.CFILEUSESNAPSHOT +DBMS_BACKUP_RESTORE.CHANGEARCHIVEDLOG +DBMS_BACKUP_RESTORE.CHANGEBACKUPPIECE +DBMS_BACKUP_RESTORE.CHANGEBACKUPSET +DBMS_BACKUP_RESTORE.CHANGEDATAFILECOPY +DBMS_BACKUP_RESTORE.CHECKCOMPRESSIONALG +DBMS_BACKUP_RESTORE.CHECKFILENAME +DBMS_BACKUP_RESTORE.CLEANUPBACKUPRECORDS +DBMS_BACKUP_RESTORE.CLEANUPFOREIGNARCHIVEDLOGS +DBMS_BACKUP_RESTORE.CLEANUPPGACONTEXT +DBMS_BACKUP_RESTORE.CLEARCONTROLFILE +DBMS_BACKUP_RESTORE.CLEARONLINELOGNAMES +DBMS_BACKUP_RESTORE.CLEARRECOVERYDESTFLAG +DBMS_BACKUP_RESTORE.CLEARUNARCHIVEDLOGS +DBMS_BACKUP_RESTORE.COMMITRMANSTATUSROW +DBMS_BACKUP_RESTORE.CONVERTDATAFILECOPY +DBMS_BACKUP_RESTORE.CONVERTFILENAME +DBMS_BACKUP_RESTORE.COPYARCHIVEDLOG +DBMS_BACKUP_RESTORE.COPYCONTROLFILE +DBMS_BACKUP_RESTORE.COPYDATAFILE +DBMS_BACKUP_RESTORE.COPYDATAFILECOPY +DBMS_BACKUP_RESTORE.CREATEDATAFILE +DBMS_BACKUP_RESTORE.CREATEFRAAUXCFCOPY +DBMS_BACKUP_RESTORE.CREATEFRAAUXDFCOPY +DBMS_BACKUP_RESTORE.CREATERESTOREPOINT +DBMS_BACKUP_RESTORE.CREATERMANOUTPUTROW +DBMS_BACKUP_RESTORE.CREATERMANSTATUSROW +DBMS_BACKUP_RESTORE.CREATETEMPXMLFILE +DBMS_BACKUP_RESTORE.CROSSCHECKBACKUPPIECE +DBMS_BACKUP_RESTORE.DBA2RFNO +DBMS_BACKUP_RESTORE.DELETEARCHIVEDLOG +DBMS_BACKUP_RESTORE.DELETEBACKUPPIECE +DBMS_BACKUP_RESTORE.DELETECONFIG +DBMS_BACKUP_RESTORE.DELETEDATAFILECOPY +DBMS_BACKUP_RESTORE.DELETED_GETDBINFO +DBMS_BACKUP_RESTORE.DELETEFILE +DBMS_BACKUP_RESTORE.DESCRIBEREMOTEPDB +DBMS_BACKUP_RESTORE.DEVICEALLOCATE +DBMS_BACKUP_RESTORE.DEVICECOMMAND +DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE +DBMS_BACKUP_RESTORE.DEVICEQUERY +DBMS_BACKUP_RESTORE.DEVICESTATUS +DBMS_BACKUP_RESTORE.DOAUTOBACKUP +DBMS_BACKUP_RESTORE.DUPLICATEFILEEXISTS +DBMS_BACKUP_RESTORE.ENDPREPLUGINTRANSLATION +DBMS_BACKUP_RESTORE.FAULT_INJECTOR +DBMS_BACKUP_RESTORE.FETCHFILERESTORED +DBMS_BACKUP_RESTORE.FINDAUTSEARCHFILETABLE +DBMS_BACKUP_RESTORE.FLASHBACKADDFILE +DBMS_BACKUP_RESTORE.FLASHBACKCANCEL +DBMS_BACKUP_RESTORE.FLASHBACKCONTROLFILE +DBMS_BACKUP_RESTORE.FLASHBACKFILES +DBMS_BACKUP_RESTORE.FLASHBACKSTART +DBMS_BACKUP_RESTORE.FREE_STORAGE_SPACE +DBMS_BACKUP_RESTORE.GENPIECENAME +DBMS_BACKUP_RESTORE.GENTRANSPORTSCRIPT +DBMS_BACKUP_RESTORE.GETARCFILENAME +DBMS_BACKUP_RESTORE.GETBLOCKSTAT +DBMS_BACKUP_RESTORE.GETCKPT +DBMS_BACKUP_RESTORE.GETCKPTSCN +DBMS_BACKUP_RESTORE.GETCNCTSTR +DBMS_BACKUP_RESTORE.GETDEFAULTTAG +DBMS_BACKUP_RESTORE.GETDISKGROUPNAME +DBMS_BACKUP_RESTORE.GETDUPLICATEDDATAFILECOPY +DBMS_BACKUP_RESTORE.GETFNO +DBMS_BACKUP_RESTORE.GETGUID +DBMS_BACKUP_RESTORE.GETLIMIT +DBMS_BACKUP_RESTORE.GETMAXINFO +DBMS_BACKUP_RESTORE.GETNBRBLOCKSTAT +DBMS_BACKUP_RESTORE.GETOMFFILENAME +DBMS_BACKUP_RESTORE.GETPARM +DBMS_BACKUP_RESTORE.GETPRIMARYCONSTR +DBMS_BACKUP_RESTORE.GETSTANDBYCONSTR +DBMS_BACKUP_RESTORE.GETSTANDBYFILENAME +DBMS_BACKUP_RESTORE.GETTSNAMEFROMDATAFILECOPY +DBMS_BACKUP_RESTORE.GETXTTSNAME +DBMS_BACKUP_RESTORE.GETXTTSPLUGNAME +DBMS_BACKUP_RESTORE.GET_CONNECT_IDENTIFIER +DBMS_BACKUP_RESTORE.INCRARCHIVEDLOGBACKUPCOUNT +DBMS_BACKUP_RESTORE.INCREMENTRECORDSTAMP +DBMS_BACKUP_RESTORE.INITFRAMETADATA +DBMS_BACKUP_RESTORE.INITMSB +DBMS_BACKUP_RESTORE.INITMSC +DBMS_BACKUP_RESTORE.INITMSR +DBMS_BACKUP_RESTORE.INITNAMESPACE +DBMS_BACKUP_RESTORE.INSPECTARCHIVEDLOG +DBMS_BACKUP_RESTORE.INSPECTARCHIVEDLOGSEQ +DBMS_BACKUP_RESTORE.INSPECTBACKUPPIECE +DBMS_BACKUP_RESTORE.INSPECTCONTROLFILE +DBMS_BACKUP_RESTORE.INSPECTDATAFILECOPY +DBMS_BACKUP_RESTORE.IR_ICD_FINISH +DBMS_BACKUP_RESTORE.IR_ICD_START +DBMS_BACKUP_RESTORE.ISFILENAMEOMF +DBMS_BACKUP_RESTORE.MANAGEAUXINSTANCE +DBMS_BACKUP_RESTORE.NBRADDFILE +DBMS_BACKUP_RESTORE.NBRCANCEL +DBMS_BACKUP_RESTORE.NBRDOMEDIARECOVERY +DBMS_BACKUP_RESTORE.NBRFILESTATUS +DBMS_BACKUP_RESTORE.NBRSTART +DBMS_BACKUP_RESTORE.NETWORKBACKUPARCHIVEDLOG +DBMS_BACKUP_RESTORE.NETWORKBACKUPDATAFILE +DBMS_BACKUP_RESTORE.NETWORKBACKUPSPFILE +DBMS_BACKUP_RESTORE.NETWORKFILETRANSFER +DBMS_BACKUP_RESTORE.NETWORKREADFILEHEADER +DBMS_BACKUP_RESTORE.NETWORKSETMSB +DBMS_BACKUP_RESTORE.NIDBEGIN +DBMS_BACKUP_RESTORE.NIDEND +DBMS_BACKUP_RESTORE.NIDGETNEWDBID +DBMS_BACKUP_RESTORE.NIDPROCESSCF +DBMS_BACKUP_RESTORE.NIDPROCESSDF +DBMS_BACKUP_RESTORE.NORMALIZEFILENAME +DBMS_BACKUP_RESTORE.OAMPOLLEDRECORD +DBMS_BACKUP_RESTORE.ORACLESBTVERSION +DBMS_BACKUP_RESTORE.PARSEPLUGXMLFILE +DBMS_BACKUP_RESTORE.PDBTIMECHECK +DBMS_BACKUP_RESTORE.PIECECONTEXTGETNUMBER +DBMS_BACKUP_RESTORE.PREPLUGINDOMEDIARECOVERY +DBMS_BACKUP_RESTORE.PREPLUGINRECOVERYADDFILE +DBMS_BACKUP_RESTORE.PREPLUGINRECOVERYCANCEL +DBMS_BACKUP_RESTORE.PREPLUGINRECOVERYSTART +DBMS_BACKUP_RESTORE.PROCESSSEARCHFILETABLE +DBMS_BACKUP_RESTORE.PROXYBACKUPARCHIVEDLOG +DBMS_BACKUP_RESTORE.PROXYBACKUPCONTROLFILE +DBMS_BACKUP_RESTORE.PROXYBACKUPDATAFILE +DBMS_BACKUP_RESTORE.PROXYBACKUPDATAFILECOPY +DBMS_BACKUP_RESTORE.PROXYBEGINBACKUP +DBMS_BACKUP_RESTORE.PROXYBEGINRESTORE +DBMS_BACKUP_RESTORE.PROXYCANCEL +DBMS_BACKUP_RESTORE.PROXYCHANGE +DBMS_BACKUP_RESTORE.PROXYDELETE +DBMS_BACKUP_RESTORE.PROXYGO +DBMS_BACKUP_RESTORE.PROXYQUERYBACKUP +DBMS_BACKUP_RESTORE.PROXYQUERYRESTORE +DBMS_BACKUP_RESTORE.PROXYRESTOREARCHIVEDLOG +DBMS_BACKUP_RESTORE.PROXYRESTORECONTROLFILE +DBMS_BACKUP_RESTORE.PROXYRESTOREDATAFILE +DBMS_BACKUP_RESTORE.PROXYVALIDATE +DBMS_BACKUP_RESTORE.PROXYVALONLY +DBMS_BACKUP_RESTORE.READARCHIVEDLOGHEADER +DBMS_BACKUP_RESTORE.READFILEHEADER +DBMS_BACKUP_RESTORE.RECOVERADDFILE +DBMS_BACKUP_RESTORE.RECOVERADDPDB +DBMS_BACKUP_RESTORE.RECOVERCANCEL +DBMS_BACKUP_RESTORE.RECOVERDO +DBMS_BACKUP_RESTORE.RECOVERSTART +DBMS_BACKUP_RESTORE.REFRESHAGEDFILES +DBMS_BACKUP_RESTORE.REGISTERAUXDFCOPY +DBMS_BACKUP_RESTORE.REINIT +DBMS_BACKUP_RESTORE.REMOTESQLEXECUTE +DBMS_BACKUP_RESTORE.REMOVEDUPLICATEFILE +DBMS_BACKUP_RESTORE.REMOVESTANDBYSYNCFILE +DBMS_BACKUP_RESTORE.RENORMALIZEALLFILENAMES +DBMS_BACKUP_RESTORE.RESDATAFILECOPY +DBMS_BACKUP_RESTORE.RESETCFILESECTION +DBMS_BACKUP_RESTORE.RESETCONFIG +DBMS_BACKUP_RESTORE.RESETDATABASE +DBMS_BACKUP_RESTORE.RESTOREARCHIVEDLOG +DBMS_BACKUP_RESTORE.RESTOREARCHIVEDLOGRANGE +DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE +DBMS_BACKUP_RESTORE.RESTORECANCEL +DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO +DBMS_BACKUP_RESTORE.RESTOREDATAFILETO +DBMS_BACKUP_RESTORE.RESTOREDMPFILE +DBMS_BACKUP_RESTORE.RESTORESETARCHIVEDLOG +DBMS_BACKUP_RESTORE.RESTORESETDATAFILE +DBMS_BACKUP_RESTORE.RESTORESETFOREIGNAL +DBMS_BACKUP_RESTORE.RESTORESETFOREIGNDF +DBMS_BACKUP_RESTORE.RESTORESETPIECE +DBMS_BACKUP_RESTORE.RESTORESETXTTFILE +DBMS_BACKUP_RESTORE.RESTORESPFILETO +DBMS_BACKUP_RESTORE.RESTORESTATUS +DBMS_BACKUP_RESTORE.RESTOREVALIDATE +DBMS_BACKUP_RESTORE.RESTOREXTTFILETO +DBMS_BACKUP_RESTORE.RMAN_USAGE +DBMS_BACKUP_RESTORE.SCANARCHIVEDLOG +DBMS_BACKUP_RESTORE.SCANDATAFILE +DBMS_BACKUP_RESTORE.SCANDATAFILECOPY +DBMS_BACKUP_RESTORE.SEARCHFILES +DBMS_BACKUP_RESTORE.SETCONFIG +DBMS_BACKUP_RESTORE.SETDATAFILEAUX +DBMS_BACKUP_RESTORE.SETDBUNIQNAMETSPITR +DBMS_BACKUP_RESTORE.SETEXPORTJOBNAME +DBMS_BACKUP_RESTORE.SETLIMIT +DBMS_BACKUP_RESTORE.SETMSB +DBMS_BACKUP_RESTORE.SETMSC +DBMS_BACKUP_RESTORE.SETPARMS +DBMS_BACKUP_RESTORE.SETRMANSTATUSROWID +DBMS_BACKUP_RESTORE.SETTABLESPACEATTR +DBMS_BACKUP_RESTORE.SETTABLESPACEEXCLUDE +DBMS_BACKUP_RESTORE.SET_CHARSET +DBMS_BACKUP_RESTORE.SET_CLIENT_INFO +DBMS_BACKUP_RESTORE.SLEEP +DBMS_BACKUP_RESTORE.STANDBYSYNCFILEEXISTS +DBMS_BACKUP_RESTORE.SWITCHTEMPFILE +DBMS_BACKUP_RESTORE.SWITCHTOCOPY +DBMS_BACKUP_RESTORE.SWITCH_PRIMARY_BCT +DBMS_BACKUP_RESTORE.TRANSPORTDBLOCK +DBMS_BACKUP_RESTORE.TRANSPORTDBUNLOCK +DBMS_BACKUP_RESTORE.UNLOCKREMOTEPDB +DBMS_BACKUP_RESTORE.UPDATEHEADERS +DBMS_BACKUP_RESTORE.UPDATERMANSTATUSROW +DBMS_BACKUP_RESTORE.VALIDATEARCHIVEDLOG +DBMS_BACKUP_RESTORE.VALIDATEBACKUPPIECE +DBMS_BACKUP_RESTORE.VALIDATEBLOCK +DBMS_BACKUP_RESTORE.VALIDATEDATAFILECOPY +DBMS_BACKUP_RESTORE.VALIDATETABLESPACE +DBMS_BACKUP_RESTORE.VALIDATIONADDPIECE +DBMS_BACKUP_RESTORE.VALIDATIONEND +DBMS_BACKUP_RESTORE.VALIDATIONNEXTRESULT +DBMS_BACKUP_RESTORE.VALIDATIONSTART +DBMS_BACKUP_RESTORE.VALIDATIONVALIDATE +DBMS_BACKUP_RESTORE.VSSBACKEDRECORD +DBMS_BACKUP_RESTORE.WRITEDUPLICATEDDATAFILECOPY +DBMS_BACKUP_RESTORE.WRITESTANDBYFILENAME +DBMS_BACKUP_RESTORE.WRITETRACE +DBMS_BACKUP_RESTORE.XTTRESTORE +DBMS_BACKUP_RESTORE.ZERODBID +DBMS_CACHEUTIL. +DBMS_CACHEUTIL.DISSOLVE_AFFINITY +DBMS_CACHEUTIL.DISSOLVE_READMOSTLY +DBMS_CACHEUTIL.GRAB_AFFINITY +DBMS_CACHEUTIL.GRAB_READMOSTLY +DBMS_CACHEUTIL.LIST_READMOSTLY +DBMS_CACHEUTIL.OBJECT_DOWNCONVERT +DBMS_CAPTURE_ADM. +DBMS_CAPTURE_ADM.ABORT_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM.ABORT_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM.ABORT_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM.ABORT_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM.ALTER_CAPTURE +DBMS_CAPTURE_ADM.ALTER_SYNC_CAPTURE +DBMS_CAPTURE_ADM.BUILD +DBMS_CAPTURE_ADM.CREATE_CAPTURE +DBMS_CAPTURE_ADM.CREATE_SYNC_CAPTURE +DBMS_CAPTURE_ADM.DROP_CAPTURE +DBMS_CAPTURE_ADM.INCLUDE_EXTRA_ATTRIBUTE +DBMS_CAPTURE_ADM.PREPARE_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM.PREPARE_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM.SET_PARAMETER +DBMS_CAPTURE_ADM.START_CAPTURE +DBMS_CAPTURE_ADM.STOP_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL. +DBMS_CAPTURE_ADM_INTERNAL.ABORT_GLOBAL_INST +DBMS_CAPTURE_ADM_INTERNAL.ABORT_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_GLOBAL_INST_ONE_PDB +DBMS_CAPTURE_ADM_INTERNAL.ABORT_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_SCHEMA_INST_CDB +DBMS_CAPTURE_ADM_INTERNAL.ABORT_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.ABORT_TABLE_INST_CDB +DBMS_CAPTURE_ADM_INTERNAL.ADD_LOGFILE +DBMS_CAPTURE_ADM_INTERNAL.ALTER_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.BUILD +DBMS_CAPTURE_ADM_INTERNAL.CREATE_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.CREATE_SYNC_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.DROP_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.ENFORCE_CHECKPOINT_RETENTION +DBMS_CAPTURE_ADM_INTERNAL.GET_SOURCE_DATABASE +DBMS_CAPTURE_ADM_INTERNAL.GET_SOURCE_ROOT +DBMS_CAPTURE_ADM_INTERNAL.INCLUDE_EXTRA_ATTRIBUTE +DBMS_CAPTURE_ADM_INTERNAL.IS_CAPTURE_EXISTS +DBMS_CAPTURE_ADM_INTERNAL.IS_DOWNSTREAM_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.IS_EXISTING_DOWNSTREAM_CAP +DBMS_CAPTURE_ADM_INTERNAL.IS_GOLDENGATE_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.IS_SYNC_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.IS_USE_DBLINK +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_DDL +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_GLOBAL_INST +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_GLOBAL_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_GLOBAL_INST_ONE_PDB +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SCHEMA_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SCHEMA_INST_CDB +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SCHEMA_TABLES +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_SYNC_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_TABLE_INST +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_TABLE_INSTANTIATION +DBMS_CAPTURE_ADM_INTERNAL.PREPARE_TABLE_INST_CDB +DBMS_CAPTURE_ADM_INTERNAL.REPLACE_DICTIONARY +DBMS_CAPTURE_ADM_INTERNAL.SET_XOUT_PARAMS +DBMS_CAPTURE_ADM_INTERNAL.STORE_PREPARE_INFO +DBMS_CAPTURE_ADM_INTERNAL.SUSPEND_CAPTURE +DBMS_CAPTURE_ADM_INTERNAL.UPDATE_PREPARE_DDL +DBMS_CAPTURE_ADM_INTERNAL.VALIDATE_PREPARE_TABLE +DBMS_CAPTURE_ADM_INTERNAL.WAIT_FOR_INFLIGHT_TXN +DBMS_CAPTURE_ADM_IVK. +DBMS_CAPTURE_ADM_IVK.ABORT_GLOBAL_INST_IVK +DBMS_CAPTURE_ADM_IVK.ABORT_SCHEMA_INST_IVK +DBMS_CAPTURE_ADM_IVK.ABORT_TABLE_INST_IVK +DBMS_CAPTURE_ADM_IVK.CREATE_CAPTURE_IVK +DBMS_CAPTURE_ADM_IVK.PREPARE_GLOBAL_INST_IVK +DBMS_CAPTURE_ADM_IVK.PREPARE_SCHEMA_INST_IVK +DBMS_CAPTURE_ADM_IVK.PREPARE_TABLE_INST_IVK +DBMS_CAPTURE_ADM_IVK.SET_PARAMETER +DBMS_CAPTURE_ADM_IVK.SUPP_LOG_LEVEL_CHECK +DBMS_CAPTURE_PROCESS. +DBMS_CAPTURE_PROCESS.CLONE_LOGMNR_SESSION +DBMS_CAPTURE_PROCESS.CLONE_LOGMNR_SESSION_CKPTFRE +DBMS_CAPTURE_PROCESS.GET_CAPTURE# +DBMS_CAPTURE_PROCESS.IS_DICTIONARY_MINED +DBMS_CAPTURE_PROCESS.WAIT_FOR_DICTIONARY_DUMP +DBMS_CAPTURE_SWITCH_ADM. +DBMS_CAPTURE_SWITCH_ADM.GET_SOURCE_DATABASE_SCNS +DBMS_CAPTURE_SWITCH_ADM.SWITCH_TO_APPLY_STATE_CKPT +DBMS_CAPTURE_SWITCH_ADM.SWITCH_TO_CHECKPOINTS +DBMS_CAPTURE_SWITCH_INTERNAL. +DBMS_CAPTURE_SWITCH_INTERNAL.CAN_SWITCH +DBMS_CAPTURE_SWITCH_INTERNAL.CAPTURE_WAIT_FOR_SCN +DBMS_CAPTURE_SWITCH_INTERNAL.DISPLAY_MESSAGE +DBMS_CAPTURE_SWITCH_INTERNAL.GET_APPLY_NAME_AND_DBLINK +DBMS_CAPTURE_SWITCH_INTERNAL.GET_DATABASE_SCNS +DBMS_CAPTURE_SWITCH_INTERNAL.GET_OLDEST_SCN +DBMS_CAPTURE_SWITCH_INTERNAL.RESTART_PROCESS +DBMS_CAPTURE_SWITCH_INTERNAL.SET_OLDEST_SCN +DBMS_CAPTURE_SWITCH_INTERNAL.WAITFOR_CAPTURE +DBMS_CAPTURE_SWITCH_INTERNAL.WAIT_CAPTURE_MAKE_PROGRESS +DBMS_CHANGE_NOTIFICATION. +DBMS_CHANGE_NOTIFICATION.CQ_NOTIFICATION_QUERYID +DBMS_CHANGE_NOTIFICATION.DEREGISTER +DBMS_CHANGE_NOTIFICATION.ENABLE_REG +DBMS_CHANGE_NOTIFICATION.NEW_REG_START +DBMS_CHANGE_NOTIFICATION.NEW_REG_START_OC4J +DBMS_CHANGE_NOTIFICATION.REG_END +DBMS_CHANGE_NOTIFICATION.SET_ROWID_THRESHOLD +DBMS_CLIENT_RESULT_CACHE. +DBMS_CLIENT_RESULT_CACHE.CACHE_CLEANUP +DBMS_CLOBUTIL. +DBMS_CLOBUTIL.CLOB2URL +DBMS_CLOBUTIL.FP2BLOB +DBMS_CLOBUTIL.GETBOMOFFSET +DBMS_CLOBUTIL.URL2CLOB +DBMS_CLUSTDB. +DBMS_CLUSTDB.VALIDATE +DBMS_CMP_INT. +DBMS_CMP_INT.CMP_TRACE +DBMS_CMP_INT.CMP_TRACE_CLOB +DBMS_CMP_INT.DROP_CMP +DBMS_CMP_INT.DROP_CMP_BY_CMPID +DBMS_CMP_INT.GET_CMP_CTX +DBMS_CMP_INT.GET_CMP_SCAN +DBMS_CMP_INT.GET_CMP_SCANS +DBMS_CMP_INT.GET_NEXT_SCAN_SEQ +DBMS_CMP_INT.IS_CMP_TRACING_ON +DBMS_CMP_INT.PURGE_CMP +DBMS_CMP_INT.PUT_CMP_CTX +DBMS_CMP_INT.PUT_CMP_SCAN +DBMS_CMP_INT.PUT_CMP_SCANS +DBMS_CMP_INT.PUT_ROW_DIFS +DBMS_CMP_INT.UPDATE_CMP_SCAN +DBMS_CMP_INT.UPDATE_CMP_SCAN_NUM_ROWS +DBMS_CMP_INT.UPDATE_ROW_DIFS +DBMS_CMP_INT.UPDATE_ROW_DIFS2 +DBMS_CMP_INT.UPDATE_ROW_INSERTED_DIFS +DBMS_COMPARISON. +DBMS_COMPARISON.COMPARE +DBMS_COMPARISON.CONVERGE +DBMS_COMPARISON.CREATE_COMPARISON +DBMS_COMPARISON.DROP_COMPARISON +DBMS_COMPARISON.PURGE_COMPARISON +DBMS_COMPARISON.RECHECK +DBMS_COMPRESSION. +DBMS_COMPRESSION.CLEAR_ANALYSIS +DBMS_COMPRESSION.DUMP_COMPRESSION_MAP +DBMS_COMPRESSION.GET_COMPRESSION_RATIO +DBMS_COMPRESSION.GET_COMPRESSION_TYPE +DBMS_COMPRESSION.INCREMENTAL_COMPRESS +DBMS_CONNECTION_POOL. +DBMS_CONNECTION_POOL.ALTER_PARAM +DBMS_CONNECTION_POOL.CONFIGURE_POOL +DBMS_CONNECTION_POOL.RESTORE_DEFAULTS +DBMS_CONNECTION_POOL.START_POOL +DBMS_CONNECTION_POOL.STOP_POOL +DBMS_CREDENTIAL. +DBMS_CREDENTIAL.CREATE_CREDENTIAL +DBMS_CREDENTIAL.DISABLE_CREDENTIAL +DBMS_CREDENTIAL.DROP_CREDENTIAL +DBMS_CREDENTIAL.ENABLE_CREDENTIAL +DBMS_CREDENTIAL.UPDATE_CREDENTIAL +DBMS_CRYPTO. +DBMS_CRYPTO.DECRYPT +DBMS_CRYPTO.ENCRYPT +DBMS_CRYPTO.HASH +DBMS_CRYPTO.MAC +DBMS_CRYPTO.RANDOMBYTES +DBMS_CRYPTO.RANDOMINTEGER +DBMS_CRYPTO.RANDOMNUMBER +DBMS_CRYPTO_FFI. +DBMS_CRYPTO_FFI.COOKIE +DBMS_CRYPTO_FFI.DECRYPT +DBMS_CRYPTO_FFI.ENCRYPT +DBMS_CRYPTO_FFI.HASH +DBMS_CRYPTO_FFI.MAC +DBMS_CRYPTO_FFI.RANDOM +DBMS_CRYPTO_INTERNAL. +DBMS_CRYPTO_INTERNAL.STATSDECRYPTNUM +DBMS_CRYPTO_INTERNAL.STATSDECRYPTRAW +DBMS_CRYPTO_INTERNAL.STATSENCRYPTNUM +DBMS_CRYPTO_INTERNAL.STATSENCRYPTRAW +DBMS_CRYPTO_INTERNAL.UPDATESENSITIVESTATS +DBMS_CRYPTO_TOOLKIT. +DBMS_CRYPTO_TOOLKIT.ABORTIDENTITY +DBMS_CRYPTO_TOOLKIT.CLOSEPERSONA +DBMS_CRYPTO_TOOLKIT.CLOSEWALLET +DBMS_CRYPTO_TOOLKIT.CREATEIDENTITY +DBMS_CRYPTO_TOOLKIT.CREATEPERSONA +DBMS_CRYPTO_TOOLKIT.CREATEWALLET +DBMS_CRYPTO_TOOLKIT.DECRYPT +DBMS_CRYPTO_TOOLKIT.DEENVELOPE +DBMS_CRYPTO_TOOLKIT.DESTROYWALLET +DBMS_CRYPTO_TOOLKIT.ENCRYPT +DBMS_CRYPTO_TOOLKIT.ENVELOPE +DBMS_CRYPTO_TOOLKIT.HASH +DBMS_CRYPTO_TOOLKIT.INITIALIZE +DBMS_CRYPTO_TOOLKIT.KEYEDHASH +DBMS_CRYPTO_TOOLKIT.OPENPERSONA +DBMS_CRYPTO_TOOLKIT.OPENWALLET +DBMS_CRYPTO_TOOLKIT.PKDECRYPT +DBMS_CRYPTO_TOOLKIT.PKENCRYPT +DBMS_CRYPTO_TOOLKIT.RANDOMBYTES +DBMS_CRYPTO_TOOLKIT.RANDOMNUMBER +DBMS_CRYPTO_TOOLKIT.REMOVEIDENTITY +DBMS_CRYPTO_TOOLKIT.REMOVEPERSONA +DBMS_CRYPTO_TOOLKIT.SEEDRANDOM +DBMS_CRYPTO_TOOLKIT.SIGN +DBMS_CRYPTO_TOOLKIT.SIGNDETACHED +DBMS_CRYPTO_TOOLKIT.STOREPERSONA +DBMS_CRYPTO_TOOLKIT.STORETRUSTEDIDENTITY +DBMS_CRYPTO_TOOLKIT.TERMINATE +DBMS_CRYPTO_TOOLKIT.VALIDATE +DBMS_CRYPTO_TOOLKIT.VERIFY +DBMS_CRYPTO_TOOLKIT.VERIFYDETACHED +DBMS_CRYPTO_TOOLKIT_FFI. +DBMS_CRYPTO_TOOLKIT_FFI.ABORTIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.CLOSEPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.CLOSEWALLET +DBMS_CRYPTO_TOOLKIT_FFI.CREATEIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.CREATEPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.CREATEWALLET +DBMS_CRYPTO_TOOLKIT_FFI.DECRYPT +DBMS_CRYPTO_TOOLKIT_FFI.DEENVELOPE +DBMS_CRYPTO_TOOLKIT_FFI.DESTROYWALLET +DBMS_CRYPTO_TOOLKIT_FFI.ENCRYPT +DBMS_CRYPTO_TOOLKIT_FFI.ENVELOPE +DBMS_CRYPTO_TOOLKIT_FFI.GETPERSONAFROMWALLET +DBMS_CRYPTO_TOOLKIT_FFI.GETPROTECTION +DBMS_CRYPTO_TOOLKIT_FFI.HASH +DBMS_CRYPTO_TOOLKIT_FFI.INITIALIZE +DBMS_CRYPTO_TOOLKIT_FFI.KEYEDHASH +DBMS_CRYPTO_TOOLKIT_FFI.OPENPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.OPENWALLET +DBMS_CRYPTO_TOOLKIT_FFI.PKDECRYPT +DBMS_CRYPTO_TOOLKIT_FFI.PKENCRYPT +DBMS_CRYPTO_TOOLKIT_FFI.RANDOMBYTES +DBMS_CRYPTO_TOOLKIT_FFI.RANDOMNUMBER +DBMS_CRYPTO_TOOLKIT_FFI.REMOVEIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.REMOVEPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.SEEDRANDOM +DBMS_CRYPTO_TOOLKIT_FFI.SETPROTECTION +DBMS_CRYPTO_TOOLKIT_FFI.SIGN +DBMS_CRYPTO_TOOLKIT_FFI.SIGNDETACHED +DBMS_CRYPTO_TOOLKIT_FFI.STOREPERSONA +DBMS_CRYPTO_TOOLKIT_FFI.STORETRUSTEDIDENTITY +DBMS_CRYPTO_TOOLKIT_FFI.TERMINATE +DBMS_CRYPTO_TOOLKIT_FFI.VALIDATE +DBMS_CRYPTO_TOOLKIT_FFI.VERIFY +DBMS_CRYPTO_TOOLKIT_FFI.VERIFYDETACHED +DBMS_CRYPTO_TOOLKIT_TYPES. +DBMS_CSX_ADMIN. +DBMS_CSX_ADMIN.COPYDEFAULTTOKENTABLESET +DBMS_CSX_ADMIN.GATHERTOKENTABLESTATS +DBMS_CSX_ADMIN.GETSEQUENCEINFO +DBMS_CSX_ADMIN.GETTOKENTABLEINFO +DBMS_CSX_ADMIN.GETTOKENTABLEINFOBYTABLESPACE +DBMS_CSX_ADMIN.GETTOKENTABLENAMES +DBMS_CSX_ADMIN.INSTANCE_INFO_EXP +DBMS_CSX_ADMIN.MOVETOKENTABLES +DBMS_CSX_ADMIN.NAMESPACEIDTABLE +DBMS_CSX_ADMIN.PATHIDTABLE +DBMS_CSX_ADMIN.POST_IMPORT_DDL_DML +DBMS_CSX_ADMIN.QNAMEIDTABLE +DBMS_CSX_ADMIN.REBUILDTOKENTABLESINDEXES +DBMS_CSX_ADMIN.REGISTERTOKENTABLESET +DBMS_CSX_ADMIN.TBS_TTSET_DML +DBMS_CSX_INT. +DBMS_CSX_INT.CREATETOKENTABLES +DBMS_CSX_INT.GENTTMAPPING +DBMS_CSX_INT.GETCOMPILEDSCHEMA +DBMS_CSX_INT.GETCOMPILEDSCHEMABYID +DBMS_CSX_INT.GETCSXSCHEMA +DBMS_CSX_INT.GETNEWTOKENSETIDS +DBMS_CSX_INT.GETVOCABULARY +DBMS_CSX_INT.GETVOCABULARYFROMTOKEN +DBMS_CSX_INT.GETVOCABULARYFROMTOKENNOTXN +DBMS_CSX_INT.GETVOCABULARYNOTXN +DBMS_CSX_INT.GUIDFROM32 +DBMS_CSX_INT.GUIDTO32 +DBMS_CSX_INT.IMPORTMERGETOKENTABLES +DBMS_CSX_INT.LOCKTOKENMANAGER +DBMS_CSX_INT.MERGEIMPORTEDTOKENS +DBMS_CSX_INT.POPULATEKDSOFROMGUID +DBMS_CSX_INT.POPULATETOKENTABLESET +DBMS_CSX_INT.REENCODE_BINARY_TO_CENTRAL +DBMS_CSX_INT.REGISTERTOKEN +DBMS_CSX_INT.TOVALIDATE +DBMS_CSX_INT.TTMAPPINGGENERATOR +DBMS_CSX_INT.UPDATEMASTERTABLE +DBMS_CSX_INT2. +DBMS_CSX_INT2.GETDEFAULTGUID +DBMS_CSX_INT2.GETTABLEGUID +DBMS_CUBE. +DBMS_CUBE.BUILD +DBMS_CUBE.BUILD_SLAVE +DBMS_CUBE.CREATE_CUBE_DIM_REFRESH_MVIEWS +DBMS_CUBE.CREATE_CUBE_REFRESH_MVIEW +DBMS_CUBE.CREATE_CUBE_REWRITE_MVIEW +DBMS_CUBE.CREATE_EXPORT_OPTIONS +DBMS_CUBE.CREATE_IMPORT_OPTIONS +DBMS_CUBE.CREATE_MVIEW +DBMS_CUBE.DERIVE_FROM_MVIEW +DBMS_CUBE.DRILL_THROUGH +DBMS_CUBE.DROP_MVIEW +DBMS_CUBE.EXPORT_XML +DBMS_CUBE.EXPORT_XML_TO_FILE +DBMS_CUBE.GET_BREAKOUT_DIMENSIONS +DBMS_CUBE.IMPORT_XML +DBMS_CUBE.INITIALIZE_CUBE_UPGRADE +DBMS_CUBE.IS_DRILL_THROUGH_ALLOWED +DBMS_CUBE.REFRESH_MVIEW +DBMS_CUBE.UPGRADE_AW +DBMS_CUBE.VALIDATE_XML +DBMS_CUBE_ADVISE. +DBMS_CUBE_ADVISE.CHECK_FOR_NESTING +DBMS_CUBE_ADVISE.GET_ATR_EXPR_RC +DBMS_CUBE_ADVISE.GET_COLDISTINCTCOUNT +DBMS_CUBE_ADVISE.GET_DIMHIERJOIN_DISPOSITION +DBMS_CUBE_ADVISE.GET_DIMLVL_DISPOSITION +DBMS_CUBE_ADVISE.GET_DIM_DISPOSITION +DBMS_CUBE_ADVISE.GET_FK_NAME +DBMS_CUBE_ADVISE.GET_LVL_NAME +DBMS_CUBE_ADVISE.GET_MEAS_COL +DBMS_CUBE_ADVISE.GET_MVNAME +DBMS_CUBE_ADVISE.GET_NN_NAME +DBMS_CUBE_ADVISE.GET_PK_NAME +DBMS_CUBE_ADVISE.IS_MD_CLASS +DBMS_CUBE_ADVISE.LOG +DBMS_CUBE_ADVISE.MV_CUBE_ADVICE +DBMS_CUBE_ADVISE.SET_CNS_EXCEPTION_LOG +DBMS_CUBE_ADVISE.TRACE +DBMS_CUBE_ADVISE_SEC. +DBMS_CUBE_ADVISE_SEC.COADSEQ_CURRENT +DBMS_CUBE_ADVISE_SEC.COADSEQ_NEXT +DBMS_CUBE_EXP. +DBMS_CUBE_EXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_CUBE_EXP.INSTANCE_INFO_IMP_DS_11_2_0_2 +DBMS_CUBE_EXP.SCHEMA_CALLOUT +DBMS_CUBE_EXP.SCHEMA_INFO_EXP +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_11_2 +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_BEG +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_END +DBMS_CUBE_EXP.SCHEMA_INFO_IMP_LOOP +DBMS_CUBE_LOG. +DBMS_CUBE_LOG.COMPLETE_OPLOG +DBMS_CUBE_LOG.CREATE_REJECT_SQL +DBMS_CUBE_LOG.DEFAULT_NAME +DBMS_CUBE_LOG.DISABLE +DBMS_CUBE_LOG.ENABLE +DBMS_CUBE_LOG.FLUSH +DBMS_CUBE_LOG.GET_LOG +DBMS_CUBE_LOG.GET_LOG_SPEC +DBMS_CUBE_LOG.GET_PARAMETER +DBMS_CUBE_LOG.LEVEL_HIGH +DBMS_CUBE_LOG.LEVEL_HIGHEST +DBMS_CUBE_LOG.LEVEL_LOW +DBMS_CUBE_LOG.LEVEL_LOWEST +DBMS_CUBE_LOG.LEVEL_MEDIUM +DBMS_CUBE_LOG.SET_LOG_SPEC +DBMS_CUBE_LOG.SET_PARAMETER +DBMS_CUBE_LOG.SET_QUERY_ENV +DBMS_CUBE_LOG.START_OPLOG +DBMS_CUBE_LOG.TABLE_CREATE +DBMS_CUBE_LOG.TARGET_FILE +DBMS_CUBE_LOG.TARGET_LOB +DBMS_CUBE_LOG.TARGET_TABLE +DBMS_CUBE_LOG.TARGET_TRACE +DBMS_CUBE_LOG.TYPE_BUILD +DBMS_CUBE_LOG.TYPE_DIMENSION_COMPILE +DBMS_CUBE_LOG.TYPE_OPERATIONS +DBMS_CUBE_LOG.TYPE_REJECTED_RECORDS +DBMS_CUBE_LOG.VERBOSE_ACTION +DBMS_CUBE_LOG.VERBOSE_DEBUG +DBMS_CUBE_LOG.VERBOSE_INFO +DBMS_CUBE_LOG.VERBOSE_NOTICE +DBMS_CUBE_LOG.VERBOSE_STATS +DBMS_CUBE_LOG.VERSION +DBMS_CUBE_LOG.WRITE_TO_OPLOG +DBMS_CUBE_UTIL. +DBMS_CUBE_UTIL.CREATE_RPT_FILTER +DBMS_CUBE_UTIL.DROP_BRANCH +DBMS_CUBE_UTIL.DROP_RPT_FILTER +DBMS_CUBE_UTIL.GET_DEFAULT_MEASURE +DBMS_CUBE_UTIL.GET_EXT_METADATA +DBMS_DATAPUMP. +DBMS_DATAPUMP.ADD_DEVICE +DBMS_DATAPUMP.ADD_FILE +DBMS_DATAPUMP.ATTACH +DBMS_DATAPUMP.CLIENT_LOB_APPEND +DBMS_DATAPUMP.CLIENT_LOB_DELETE +DBMS_DATAPUMP.CLIENT_LOB_GET +DBMS_DATAPUMP.CREATE_JOB_VIEW +DBMS_DATAPUMP.DATAPUMP_JOB +DBMS_DATAPUMP.DATA_FILTER +DBMS_DATAPUMP.DATA_REMAP +DBMS_DATAPUMP.DETACH +DBMS_DATAPUMP.DH_KEY_EXCHANGE +DBMS_DATAPUMP.END_SW_UPDATE +DBMS_DATAPUMP.ESTABLISH_REMOTE_CONTEXT +DBMS_DATAPUMP.GET_DUMPFILE_INFO +DBMS_DATAPUMP.GET_OBJECT_INFO +DBMS_DATAPUMP.GET_STATUS +DBMS_DATAPUMP.GET_STATUS_VERSION +DBMS_DATAPUMP.HAS_PRIVS +DBMS_DATAPUMP.LOG_ENTRY +DBMS_DATAPUMP.LOG_ERROR +DBMS_DATAPUMP.METADATA_FILTER +DBMS_DATAPUMP.METADATA_REMAP +DBMS_DATAPUMP.METADATA_TRANSFORM +DBMS_DATAPUMP.OPEN +DBMS_DATAPUMP.SETUP_REMOTE_CONTEXT +DBMS_DATAPUMP.SET_DEBUG +DBMS_DATAPUMP.SET_PARALLEL +DBMS_DATAPUMP.SET_PARAMETER +DBMS_DATAPUMP.SET_REMOTE_WORKER +DBMS_DATAPUMP.START_JOB +DBMS_DATAPUMP.START_SW_UPDATE +DBMS_DATAPUMP.STOP_JOB +DBMS_DATAPUMP.STOP_WORKER +DBMS_DATAPUMP.TEST_FUNCTIONALITY +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1010 +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1020 +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1120 +DBMS_DATAPUMP.TEST_REMOTE_CONTEXT1210 +DBMS_DATAPUMP.TRACE_ENTRY +DBMS_DATAPUMP.WAIT_FOR_JOB +DBMS_DATAPUMP_INT. +DBMS_DATAPUMP_INT.GET_DUMPFILESET +DBMS_DATAPUMP_INT.GET_JOBDESC +DBMS_DATAPUMP_INT.GET_JOBSTATUS +DBMS_DATAPUMP_INT.GET_OBJECT_INFO +DBMS_DATAPUMP_INT.GET_PARAMVALUES +DBMS_DATAPUMP_INT.GET_WORKERSTATUSLIST +DBMS_DATAPUMP_INT.SET_DEBUG +DBMS_DATAPUMP_UTL. +DBMS_DATAPUMP_UTL.CREATE_DEFAULT_DIR +DBMS_DATAPUMP_UTL.EXTRACT_ELEMENT +DBMS_DATAPUMP_UTL.INSTANCE_CALLOUT_IMP +DBMS_DATAPUMP_UTL.INSTANCE_EXPORT_ACTION +DBMS_DATAPUMP_UTL.REPLACE_DEFAULT_DIR +DBMS_DATAPUMP_UTL.SYSTEM_CALLOUT_IMP +DBMS_DATA_MINING. +DBMS_DATA_MINING.ADD_COST_MATRIX +DBMS_DATA_MINING.ADD_PARTITION +DBMS_DATA_MINING.ALTER_REVERSE_EXPRESSION +DBMS_DATA_MINING.APPLY +DBMS_DATA_MINING.COMPUTE_CONFUSION_MATRIX +DBMS_DATA_MINING.COMPUTE_CONFUSION_MATRIX_PART +DBMS_DATA_MINING.COMPUTE_LIFT +DBMS_DATA_MINING.COMPUTE_LIFT_PART +DBMS_DATA_MINING.COMPUTE_ROC +DBMS_DATA_MINING.COMPUTE_ROC_PART +DBMS_DATA_MINING.CREATE_MODEL +DBMS_DATA_MINING.CREATE_MODEL2 +DBMS_DATA_MINING.DROP_ALGORITHM +DBMS_DATA_MINING.DROP_MODEL +DBMS_DATA_MINING.DROP_PARTITION +DBMS_DATA_MINING.EXPORT_MODEL +DBMS_DATA_MINING.EXPORT_SERMODEL +DBMS_DATA_MINING.FETCH_ALG_SCHEMA +DBMS_DATA_MINING.GET_ASSOCIATION_RULES +DBMS_DATA_MINING.GET_DEFAULT_SETTINGS +DBMS_DATA_MINING.GET_FREQUENT_ITEMSETS +DBMS_DATA_MINING.GET_MODEL_COST_MATRIX +DBMS_DATA_MINING.GET_MODEL_DETAILS_AI +DBMS_DATA_MINING.GET_MODEL_DETAILS_EM +DBMS_DATA_MINING.GET_MODEL_DETAILS_EM_COMP +DBMS_DATA_MINING.GET_MODEL_DETAILS_EM_PROJ +DBMS_DATA_MINING.GET_MODEL_DETAILS_GLM +DBMS_DATA_MINING.GET_MODEL_DETAILS_GLOBAL +DBMS_DATA_MINING.GET_MODEL_DETAILS_KM +DBMS_DATA_MINING.GET_MODEL_DETAILS_NB +DBMS_DATA_MINING.GET_MODEL_DETAILS_NMF +DBMS_DATA_MINING.GET_MODEL_DETAILS_OC +DBMS_DATA_MINING.GET_MODEL_DETAILS_RA +DBMS_DATA_MINING.GET_MODEL_DETAILS_SVD +DBMS_DATA_MINING.GET_MODEL_DETAILS_SVM +DBMS_DATA_MINING.GET_MODEL_DETAILS_XML +DBMS_DATA_MINING.GET_MODEL_R_FUNCTION +DBMS_DATA_MINING.GET_MODEL_SETTINGS +DBMS_DATA_MINING.GET_MODEL_SIGNATURE +DBMS_DATA_MINING.GET_MODEL_TRANSFORMATIONS +DBMS_DATA_MINING.GET_TRANSFORM_LIST +DBMS_DATA_MINING.IMPORT_MODEL +DBMS_DATA_MINING.IMPORT_SERMODEL +DBMS_DATA_MINING.RANK_APPLY +DBMS_DATA_MINING.REGISTER_ALGORITHM +DBMS_DATA_MINING.REMOVE_COST_MATRIX +DBMS_DATA_MINING.RENAME_MODEL +DBMS_DATA_MINING_INTERNAL. +DBMS_DATA_MINING_INTERNAL.IMPORT_PMML_MODEL +DBMS_DATA_MINING_TRANSFORM. +DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_CAT +DBMS_DATA_MINING_TRANSFORM.CREATE_BIN_NUM +DBMS_DATA_MINING_TRANSFORM.CREATE_CLIP +DBMS_DATA_MINING_TRANSFORM.CREATE_COL_REM +DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_CAT +DBMS_DATA_MINING_TRANSFORM.CREATE_MISS_NUM +DBMS_DATA_MINING_TRANSFORM.CREATE_NORM_LIN +DBMS_DATA_MINING_TRANSFORM.DESCRIBE_STACK +DBMS_DATA_MINING_TRANSFORM.GET_EXPRESSION +DBMS_DATA_MINING_TRANSFORM.INSERT_AUTOBIN_NUM_EQWIDTH +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_CAT_FREQ +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_NUM_EQWIDTH +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_NUM_QTILE +DBMS_DATA_MINING_TRANSFORM.INSERT_BIN_SUPER +DBMS_DATA_MINING_TRANSFORM.INSERT_CLIP_TRIM_TAIL +DBMS_DATA_MINING_TRANSFORM.INSERT_CLIP_WINSOR_TAIL +DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_CAT_MODE +DBMS_DATA_MINING_TRANSFORM.INSERT_MISS_NUM_MEAN +DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_MINMAX +DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_SCALE +DBMS_DATA_MINING_TRANSFORM.INSERT_NORM_LIN_ZSCORE +DBMS_DATA_MINING_TRANSFORM.SET_EXPRESSION +DBMS_DATA_MINING_TRANSFORM.SET_TRANSFORM +DBMS_DATA_MINING_TRANSFORM.STACK_BIN_CAT +DBMS_DATA_MINING_TRANSFORM.STACK_BIN_NUM +DBMS_DATA_MINING_TRANSFORM.STACK_CLIP +DBMS_DATA_MINING_TRANSFORM.STACK_COL_REM +DBMS_DATA_MINING_TRANSFORM.STACK_MISS_CAT +DBMS_DATA_MINING_TRANSFORM.STACK_MISS_NUM +DBMS_DATA_MINING_TRANSFORM.STACK_NORM_LIN +DBMS_DATA_MINING_TRANSFORM.XFORM_BIN_CAT +DBMS_DATA_MINING_TRANSFORM.XFORM_BIN_NUM +DBMS_DATA_MINING_TRANSFORM.XFORM_CLIP +DBMS_DATA_MINING_TRANSFORM.XFORM_COL_REM +DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_NUM +DBMS_DATA_MINING_TRANSFORM.XFORM_EXPR_STR +DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_CAT +DBMS_DATA_MINING_TRANSFORM.XFORM_MISS_NUM +DBMS_DATA_MINING_TRANSFORM.XFORM_NORM_LIN +DBMS_DATA_MINING_TRANSFORM.XFORM_STACK +DBMS_DBCOMP. +DBMS_DBCOMP.DBCOMP +DBMS_DBFS_CONTENT. +DBMS_DBFS_CONTENT.CHECKACCESS +DBMS_DBFS_CONTENT.CHECKSPI +DBMS_DBFS_CONTENT.CREATEDIRECTORY +DBMS_DBFS_CONTENT.CREATEFILE +DBMS_DBFS_CONTENT.CREATELINK +DBMS_DBFS_CONTENT.CREATEREFERENCE +DBMS_DBFS_CONTENT.DECODEFEATURES +DBMS_DBFS_CONTENT.DELETECONTENT +DBMS_DBFS_CONTENT.DELETEDIRECTORY +DBMS_DBFS_CONTENT.DELETEFILE +DBMS_DBFS_CONTENT.FEATURENAME +DBMS_DBFS_CONTENT.FLUSHSTATS +DBMS_DBFS_CONTENT.GETATTR_VIEW +DBMS_DBFS_CONTENT.GETDEFAULTACL +DBMS_DBFS_CONTENT.GETDEFAULTASOF +DBMS_DBFS_CONTENT.GETDEFAULTCONTEXT +DBMS_DBFS_CONTENT.GETDEFAULTOWNER +DBMS_DBFS_CONTENT.GETDEFAULTPRINCIPAL +DBMS_DBFS_CONTENT.GETFEATURESBYMOUNT +DBMS_DBFS_CONTENT.GETFEATURESBYNAME +DBMS_DBFS_CONTENT.GETFEATURESBYPATH +DBMS_DBFS_CONTENT.GETPATH +DBMS_DBFS_CONTENT.GETPATHBYMOUNTID +DBMS_DBFS_CONTENT.GETPATHBYSTOREID +DBMS_DBFS_CONTENT.GETPATHNOWAIT +DBMS_DBFS_CONTENT.GETSTATS +DBMS_DBFS_CONTENT.GETSTOREBYMOUNT +DBMS_DBFS_CONTENT.GETSTOREBYNAME +DBMS_DBFS_CONTENT.GETSTOREBYPATH +DBMS_DBFS_CONTENT.GETTRACE +DBMS_DBFS_CONTENT.GETVERSION +DBMS_DBFS_CONTENT.ISPATHLOCKED +DBMS_DBFS_CONTENT.LIST +DBMS_DBFS_CONTENT.LISTALLCONTENT +DBMS_DBFS_CONTENT.LISTALLPROPERTIES +DBMS_DBFS_CONTENT.LISTCLIENTS +DBMS_DBFS_CONTENT.LISTCURSOR +DBMS_DBFS_CONTENT.LISTMOUNTS +DBMS_DBFS_CONTENT.LISTSTORES +DBMS_DBFS_CONTENT.LOCKPATH +DBMS_DBFS_CONTENT.MOUNTSTORE +DBMS_DBFS_CONTENT.MOVEPATH +DBMS_DBFS_CONTENT.NORMALIZEPATH +DBMS_DBFS_CONTENT.PROPANY +DBMS_DBFS_CONTENT.PROPERTIESH2T +DBMS_DBFS_CONTENT.PROPERTIEST2H +DBMS_DBFS_CONTENT.PROPNUMBER +DBMS_DBFS_CONTENT.PROPRAW +DBMS_DBFS_CONTENT.PROPTIMESTAMP +DBMS_DBFS_CONTENT.PROPVARCHAR2 +DBMS_DBFS_CONTENT.PURGEALL +DBMS_DBFS_CONTENT.PURGEPATH +DBMS_DBFS_CONTENT.PUTPATH +DBMS_DBFS_CONTENT.REGISTERCLIENT +DBMS_DBFS_CONTENT.REGISTERSTORE +DBMS_DBFS_CONTENT.REMOUNTALL +DBMS_DBFS_CONTENT.REMOUNTSTORE +DBMS_DBFS_CONTENT.RENAMEPATH +DBMS_DBFS_CONTENT.RESTOREALL +DBMS_DBFS_CONTENT.RESTOREPATH +DBMS_DBFS_CONTENT.SEARCH +DBMS_DBFS_CONTENT.SETDEFAULTACL +DBMS_DBFS_CONTENT.SETDEFAULTASOF +DBMS_DBFS_CONTENT.SETDEFAULTCONTEXT +DBMS_DBFS_CONTENT.SETDEFAULTOWNER +DBMS_DBFS_CONTENT.SETDEFAULTPRINCIPAL +DBMS_DBFS_CONTENT.SETPATH +DBMS_DBFS_CONTENT.SETSTATS +DBMS_DBFS_CONTENT.SETTRACE +DBMS_DBFS_CONTENT.SPACEUSAGE +DBMS_DBFS_CONTENT.TRACE +DBMS_DBFS_CONTENT.TRACEENABLED +DBMS_DBFS_CONTENT.UNLOCKPATH +DBMS_DBFS_CONTENT.UNMOUNTALL +DBMS_DBFS_CONTENT.UNMOUNTSTORE +DBMS_DBFS_CONTENT.UNREGISTERCLIENT +DBMS_DBFS_CONTENT.UNREGISTERSTORE +DBMS_DBFS_CONTENT_ADMIN. +DBMS_DBFS_CONTENT_ADMIN.CHECKSPI +DBMS_DBFS_CONTENT_ADMIN.EXIMREGISTERALL +DBMS_DBFS_CONTENT_ADMIN.EXIM_MOUNT +DBMS_DBFS_CONTENT_ADMIN.EXIM_MOUNTP +DBMS_DBFS_CONTENT_ADMIN.EXIM_STORE +DBMS_DBFS_CONTENT_ADMIN.INSTANCE_INFO_EXP +DBMS_DBFS_CONTENT_ADMIN.LISTCLIENTS +DBMS_DBFS_CONTENT_ADMIN.MOUNTSTORE +DBMS_DBFS_CONTENT_ADMIN.MOUNTSTORE_LOG +DBMS_DBFS_CONTENT_ADMIN.PROFILE_CLEAR +DBMS_DBFS_CONTENT_ADMIN.PROFILE_ENABLE +DBMS_DBFS_CONTENT_ADMIN.PROFILE_RESTORE +DBMS_DBFS_CONTENT_ADMIN.REGISTERCLIENT +DBMS_DBFS_CONTENT_ADMIN.REGISTERSTORE +DBMS_DBFS_CONTENT_ADMIN.REGISTERSTORE_LOG +DBMS_DBFS_CONTENT_ADMIN.SCHEMA_INFO_EXP +DBMS_DBFS_CONTENT_ADMIN.SYSTEM_INFO_EXP +DBMS_DBFS_CONTENT_ADMIN.UNMOUNTSTORE +DBMS_DBFS_CONTENT_ADMIN.UNMOUNTSTORE_LOG +DBMS_DBFS_CONTENT_ADMIN.UNREGISTERCLIENT +DBMS_DBFS_CONTENT_ADMIN.UNREGISTERSTORE +DBMS_DBFS_CONTENT_ADMIN.UNREGISTERSTORE_LOG +DBMS_DBFS_CONTENT_ADMIN.UPDATECTX +DBMS_DBFS_CONTENT_ADMIN.UPDATESTATS +DBMS_DBFS_CONTENT_SPI. +DBMS_DBFS_CONTENT_SPI.CHECKACCESS +DBMS_DBFS_CONTENT_SPI.CREATEDIRECTORY +DBMS_DBFS_CONTENT_SPI.CREATEFILE +DBMS_DBFS_CONTENT_SPI.CREATEGETATTRVIEW +DBMS_DBFS_CONTENT_SPI.CREATELINK +DBMS_DBFS_CONTENT_SPI.CREATEREFERENCE +DBMS_DBFS_CONTENT_SPI.DELETECONTENT +DBMS_DBFS_CONTENT_SPI.DELETEDIRECTORY +DBMS_DBFS_CONTENT_SPI.DELETEFILE +DBMS_DBFS_CONTENT_SPI.DROPGETATTRVIEW +DBMS_DBFS_CONTENT_SPI.GETFEATURES +DBMS_DBFS_CONTENT_SPI.GETPATH +DBMS_DBFS_CONTENT_SPI.GETPATHBYSTOREID +DBMS_DBFS_CONTENT_SPI.GETPATHNOWAIT +DBMS_DBFS_CONTENT_SPI.GETSTOREID +DBMS_DBFS_CONTENT_SPI.GETVERSION +DBMS_DBFS_CONTENT_SPI.ISPATHLOCKED +DBMS_DBFS_CONTENT_SPI.LIST +DBMS_DBFS_CONTENT_SPI.LISTCURSOR +DBMS_DBFS_CONTENT_SPI.LOCKPATH +DBMS_DBFS_CONTENT_SPI.MOVEPATH +DBMS_DBFS_CONTENT_SPI.PURGEALL +DBMS_DBFS_CONTENT_SPI.PURGEPATH +DBMS_DBFS_CONTENT_SPI.PUTPATH +DBMS_DBFS_CONTENT_SPI.RENAMEPATH +DBMS_DBFS_CONTENT_SPI.RESTOREALL +DBMS_DBFS_CONTENT_SPI.RESTOREPATH +DBMS_DBFS_CONTENT_SPI.SEARCH +DBMS_DBFS_CONTENT_SPI.SETPATH +DBMS_DBFS_CONTENT_SPI.SPACEUSAGE +DBMS_DBFS_CONTENT_SPI.SPACEUSAGEFULL +DBMS_DBFS_CONTENT_SPI.UNLOCKPATH +DBMS_DBFS_HS. +DBMS_DBFS_HS.CHECKACCESS +DBMS_DBFS_HS.CLEANUPUNUSEDBACKUPFILES +DBMS_DBFS_HS.CREATEBUCKET +DBMS_DBFS_HS.CREATEDIRECTORY +DBMS_DBFS_HS.CREATEFILE +DBMS_DBFS_HS.CREATELINK +DBMS_DBFS_HS.CREATEREFERENCE +DBMS_DBFS_HS.CREATESTORE +DBMS_DBFS_HS.DELETECONTENT +DBMS_DBFS_HS.DELETEDIRECTORY +DBMS_DBFS_HS.DELETEFILE +DBMS_DBFS_HS.DEREGSTORECOMMAND +DBMS_DBFS_HS.DROPSTORE +DBMS_DBFS_HS.FLUSHCACHE +DBMS_DBFS_HS.GETFEATURES +DBMS_DBFS_HS.GETPATH +DBMS_DBFS_HS.GETPATHBYSTOREID +DBMS_DBFS_HS.GETPATHNOWAIT +DBMS_DBFS_HS.GETSTOREID +DBMS_DBFS_HS.GETSTOREPROPERTY +DBMS_DBFS_HS.GETVERSION +DBMS_DBFS_HS.LIST +DBMS_DBFS_HS.LISTCONTENTFILENAME +DBMS_DBFS_HS.LOCKPATH +DBMS_DBFS_HS.PURGEALL +DBMS_DBFS_HS.PURGEPATH +DBMS_DBFS_HS.PUTPATH +DBMS_DBFS_HS.RECONFIGCACHE +DBMS_DBFS_HS.REGISTERSTORECOMMAND +DBMS_DBFS_HS.RENAMEPATH +DBMS_DBFS_HS.RESTOREALL +DBMS_DBFS_HS.RESTOREPATH +DBMS_DBFS_HS.SEARCH +DBMS_DBFS_HS.SENDCOMMAND +DBMS_DBFS_HS.SETPATH +DBMS_DBFS_HS.SETSTOREPROPERTY +DBMS_DBFS_HS.SPACEUSAGE +DBMS_DBFS_HS.STOREPUSH +DBMS_DBFS_HS.UNLOCKPATH +DBMS_DBFS_SFS. +DBMS_DBFS_SFS.ADDFSPROPERTIES +DBMS_DBFS_SFS.CHECKACCESS +DBMS_DBFS_SFS.CLEANUPORPHANS +DBMS_DBFS_SFS.CREATEDIRECTORY +DBMS_DBFS_SFS.CREATEFILE +DBMS_DBFS_SFS.CREATEFILESYSTEM +DBMS_DBFS_SFS.CREATEGETATTRVIEW +DBMS_DBFS_SFS.CREATELINK +DBMS_DBFS_SFS.CREATEREFERENCE +DBMS_DBFS_SFS.CREATESNAPSHOT +DBMS_DBFS_SFS.CREATESTORE +DBMS_DBFS_SFS.DELETECONTENT +DBMS_DBFS_SFS.DELETEDIRECTORY +DBMS_DBFS_SFS.DELETEFILE +DBMS_DBFS_SFS.DELETEFSPROPERTIES +DBMS_DBFS_SFS.DROPFILESYSTEM +DBMS_DBFS_SFS.DROPGETATTRVIEW +DBMS_DBFS_SFS.DROPSNAPSHOT +DBMS_DBFS_SFS.EXPORTFILESYSTEM +DBMS_DBFS_SFS.EXPORTTABLE +DBMS_DBFS_SFS.FS_ACCESS +DBMS_DBFS_SFS.FS_CHMOD +DBMS_DBFS_SFS.FS_CHOWN +DBMS_DBFS_SFS.FS_CREAT +DBMS_DBFS_SFS.FS_DESTROY +DBMS_DBFS_SFS.FS_FGETATTR +DBMS_DBFS_SFS.FS_FLUSH +DBMS_DBFS_SFS.FS_FSYNC +DBMS_DBFS_SFS.FS_FSYNCDIR +DBMS_DBFS_SFS.FS_FTRUNCATE +DBMS_DBFS_SFS.FS_GETATTR +DBMS_DBFS_SFS.FS_GETXATTR +DBMS_DBFS_SFS.FS_INIT +DBMS_DBFS_SFS.FS_LINK +DBMS_DBFS_SFS.FS_LISTXATTR +DBMS_DBFS_SFS.FS_MKDIR +DBMS_DBFS_SFS.FS_MKNOD +DBMS_DBFS_SFS.FS_OPEN +DBMS_DBFS_SFS.FS_OPENDIR +DBMS_DBFS_SFS.FS_READ +DBMS_DBFS_SFS.FS_READDIR +DBMS_DBFS_SFS.FS_READLINK +DBMS_DBFS_SFS.FS_RELEASE +DBMS_DBFS_SFS.FS_RELEASEDIR +DBMS_DBFS_SFS.FS_REMOVEXATTR +DBMS_DBFS_SFS.FS_RENAME +DBMS_DBFS_SFS.FS_RMDIR +DBMS_DBFS_SFS.FS_SETXATTR +DBMS_DBFS_SFS.FS_STATFS +DBMS_DBFS_SFS.FS_SYMLINK +DBMS_DBFS_SFS.FS_TRUNCATE +DBMS_DBFS_SFS.FS_UNLINK +DBMS_DBFS_SFS.FS_UTIME +DBMS_DBFS_SFS.FS_WRITE +DBMS_DBFS_SFS.GETFEATURES +DBMS_DBFS_SFS.GETPATH +DBMS_DBFS_SFS.GETPATHBYSTOREID +DBMS_DBFS_SFS.GETPATHNOWAIT +DBMS_DBFS_SFS.GETSTOREID +DBMS_DBFS_SFS.GETVERSION +DBMS_DBFS_SFS.GET_EPOCH +DBMS_DBFS_SFS.INITFS +DBMS_DBFS_SFS.ISPATHLOCKED +DBMS_DBFS_SFS.LIST +DBMS_DBFS_SFS.LISTCURSOR +DBMS_DBFS_SFS.LISTFILESYSTEMS +DBMS_DBFS_SFS.LISTSNAPSHOTS +DBMS_DBFS_SFS.LISTTABLES +DBMS_DBFS_SFS.LISTVOLUMES +DBMS_DBFS_SFS.LOCKPATH +DBMS_DBFS_SFS.MOVEPATH +DBMS_DBFS_SFS.NORMALIZEFS +DBMS_DBFS_SFS.PURGEALL +DBMS_DBFS_SFS.PURGEALLLOCKS +DBMS_DBFS_SFS.PURGELOCKSBYLOCKER +DBMS_DBFS_SFS.PURGELOCKSBYPATH +DBMS_DBFS_SFS.PURGEPATH +DBMS_DBFS_SFS.PUTPATH +DBMS_DBFS_SFS.RECREATEGETATTRVIEW +DBMS_DBFS_SFS.REGISTERFILESYSTEM +DBMS_DBFS_SFS.RENAMEPATH +DBMS_DBFS_SFS.REORGANIZEFS +DBMS_DBFS_SFS.RESTOREALL +DBMS_DBFS_SFS.RESTOREPATH +DBMS_DBFS_SFS.REVERTSNAPSHOT +DBMS_DBFS_SFS.SEARCH +DBMS_DBFS_SFS.SETFSPROPERTIES +DBMS_DBFS_SFS.SETPATH +DBMS_DBFS_SFS.SHRINKFS +DBMS_DBFS_SFS.SPACEUSAGE +DBMS_DBFS_SFS.SPACEUSAGEFULL +DBMS_DBFS_SFS.TO_EPOCH +DBMS_DBFS_SFS.UNLOCKPATH +DBMS_DBFS_SFS.UNREGISTERFILESYSTEM +DBMS_DBFS_SFS_ADMIN. +DBMS_DBFS_SFS_ADMIN.BLESSUSER +DBMS_DBFS_SFS_ADMIN.CREATEFILESYSTEM +DBMS_DBFS_SFS_ADMIN.CREATEFILESYSTEM_LOG +DBMS_DBFS_SFS_ADMIN.CREATESNAPSHOT +DBMS_DBFS_SFS_ADMIN.DEFAULTTABLESPACE +DBMS_DBFS_SFS_ADMIN.DELETE_ORPHANS +DBMS_DBFS_SFS_ADMIN.DELETE_ORPHANS_LOG +DBMS_DBFS_SFS_ADMIN.DROPFILESYSTEM +DBMS_DBFS_SFS_ADMIN.DROPFILESYSTEM_LOG +DBMS_DBFS_SFS_ADMIN.DROPSNAPSHOT +DBMS_DBFS_SFS_ADMIN.DROP_ALL_TABLES +DBMS_DBFS_SFS_ADMIN.EXIMREGISTERALL +DBMS_DBFS_SFS_ADMIN.EXIM_ATTRV +DBMS_DBFS_SFS_ADMIN.EXIM_FS +DBMS_DBFS_SFS_ADMIN.EXIM_GRANTS +DBMS_DBFS_SFS_ADMIN.EXIM_SEQ +DBMS_DBFS_SFS_ADMIN.EXIM_SNAP +DBMS_DBFS_SFS_ADMIN.EXIM_TAB +DBMS_DBFS_SFS_ADMIN.EXIM_TABP +DBMS_DBFS_SFS_ADMIN.EXIM_TAB_LOG +DBMS_DBFS_SFS_ADMIN.EXIM_VOL +DBMS_DBFS_SFS_ADMIN.GETSTOREID +DBMS_DBFS_SFS_ADMIN.INITFILESYSTEM +DBMS_DBFS_SFS_ADMIN.INITFILESYSTEM_LOG +DBMS_DBFS_SFS_ADMIN.INSTANCE_INFO_EXP +DBMS_DBFS_SFS_ADMIN.LOBUSAGE +DBMS_DBFS_SFS_ADMIN.PARTITION_SEQUENCE +DBMS_DBFS_SFS_ADMIN.PARTITION_SEQUENCE_LOG +DBMS_DBFS_SFS_ADMIN.RECACHE_SEQUENCE +DBMS_DBFS_SFS_ADMIN.RECACHE_SEQUENCE_LOG +DBMS_DBFS_SFS_ADMIN.REGISTERFILESYSTEM +DBMS_DBFS_SFS_ADMIN.REGISTERFILESYSTEM_LOG +DBMS_DBFS_SFS_ADMIN.REVERTSNAPSHOT +DBMS_DBFS_SFS_ADMIN.SCHEMA_INFO_EXP +DBMS_DBFS_SFS_ADMIN.SETFSPROPERTIES +DBMS_DBFS_SFS_ADMIN.SETFSPROPERTIES_LOG +DBMS_DBFS_SFS_ADMIN.SPACEDEPENDENTS +DBMS_DBFS_SFS_ADMIN.SPACEUSAGE +DBMS_DBFS_SFS_ADMIN.SYSTEM_INFO_EXP +DBMS_DBFS_SFS_ADMIN.TBSUSAGE +DBMS_DBFS_SFS_ADMIN.UNREGISTERFILESYSTEM +DBMS_DBFS_SFS_ADMIN.UNREGISTERFILESYSTEM_LOG +DBMS_DBVERIFY. +DBMS_DBVERIFY.DBV2 +DBMS_DB_VERSION. +DBMS_DDL. +DBMS_DDL.ALTER_COMPILE +DBMS_DDL.ALTER_TABLE_NOT_REFERENCEABLE +DBMS_DDL.ALTER_TABLE_REFERENCEABLE +DBMS_DDL.ANALYZE_OBJECT +DBMS_DDL.CREATE_WRAPPED +DBMS_DDL.IS_TRIGGER_FIRE_ONCE +DBMS_DDL.IS_TRIGGER_FIRE_ONCE_INTERNAL +DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY +DBMS_DDL.WRAP +DBMS_DDL_INTERNAL. +DBMS_DDL_INTERNAL.CHECK_TRIGGER_FIRING_PROPERTY +DBMS_DDL_INTERNAL.COMPAT_OK +DBMS_DDL_INTERNAL.GEN_NEW_OBJECT_ID +DBMS_DDL_INTERNAL.IS_DDL_TRIGGER +DBMS_DDL_INTERNAL.SWAP_BOOTSTRAP +DBMS_DEBUG. +DBMS_DEBUG.ABORT +DBMS_DEBUG.ATTACH_SESSION +DBMS_DEBUG.CONTINUE +DBMS_DEBUG.DEBUG_OFF +DBMS_DEBUG.DEBUG_ON +DBMS_DEBUG.DELETE_BREAKPOINT +DBMS_DEBUG.DELETE_OER_BREAKPOINT +DBMS_DEBUG.DETACH_SESSION +DBMS_DEBUG.DISABLE_BREAKPOINT +DBMS_DEBUG.ENABLE_BREAKPOINT +DBMS_DEBUG.EXECUTE +DBMS_DEBUG.GET_DIAGNOSTIC_LEVEL +DBMS_DEBUG.GET_ENCODED_PKGVARS_FOR_CLIENT +DBMS_DEBUG.GET_ENCODED_STACK_FOR_CLIENT +DBMS_DEBUG.GET_INDEXES +DBMS_DEBUG.GET_LINE_MAP +DBMS_DEBUG.GET_MORE_SOURCE +DBMS_DEBUG.GET_RUNTIME_INFO +DBMS_DEBUG.GET_TIMEOUT +DBMS_DEBUG.GET_TIMEOUT_BEHAVIOUR +DBMS_DEBUG.GET_VALUE +DBMS_DEBUG.INITIALIZE +DBMS_DEBUG.PING +DBMS_DEBUG.PRINT_BACKTRACE +DBMS_DEBUG.PRINT_INSTANTIATIONS +DBMS_DEBUG.PROBE_VERSION +DBMS_DEBUG.SELF_CHECK +DBMS_DEBUG.SET_BREAKPOINT +DBMS_DEBUG.SET_DIAGNOSTIC_LEVEL +DBMS_DEBUG.SET_OER_BREAKPOINT +DBMS_DEBUG.SET_TIMEOUT +DBMS_DEBUG.SET_TIMEOUT_BEHAVIOUR +DBMS_DEBUG.SET_VALUE +DBMS_DEBUG.SHOW_BREAKPOINTS +DBMS_DEBUG.SHOW_FRAME_SOURCE +DBMS_DEBUG.SHOW_SOURCE +DBMS_DEBUG.SYNCHRONIZE +DBMS_DEBUG.TARGET_PROGRAM_RUNNING +DBMS_DEBUG_JDWP. +DBMS_DEBUG_JDWP.CONNECT_TCP +DBMS_DEBUG_JDWP.CURRENT_SESSION_ID +DBMS_DEBUG_JDWP.CURRENT_SESSION_SERIAL +DBMS_DEBUG_JDWP.DISCONNECT +DBMS_DEBUG_JDWP.GET_NLS_PARAMETER +DBMS_DEBUG_JDWP.PROCESS_CONNECT_STRING +DBMS_DEBUG_JDWP.SET_NLS_PARAMETER +DBMS_DEBUG_JDWP_CUSTOM. +DBMS_DEBUG_JDWP_CUSTOM.CONNECT_DEBUGGER +DBMS_DEFER_IMPORT_INTERNAL. +DBMS_DEFER_IMPORT_INTERNAL.DROP_PROPAGATOR_CASCADE +DBMS_DEFER_IMPORT_INTERNAL.QUEUE_EXPORT_CHECK +DBMS_DEFER_IMPORT_INTERNAL.QUEUE_IMPORT_CHECK +DBMS_DESCRIBE. +DBMS_DESCRIBE.DESCRIBE_PROCEDURE +DBMS_DG. +DBMS_DG.INITIATE_FS_FAILOVER +DBMS_DIMENSION. +DBMS_DIMENSION.DESCRIBE_DIMENSION +DBMS_DIMENSION.VALIDATE_DIMENSION +DBMS_DISRUPT. +DBMS_DISRUPT.DISRUPT_SERVICES +DBMS_DISRUPT.DISRUPT_SERVICES_CANCEL +DBMS_DISRUPT.DISRUPT_SERVICES_IMMEDIATE +DBMS_DISRUPT.DISRUPT_SESSIONS +DBMS_DISRUPT.DISRUPT_SESSIONS_CANCEL +DBMS_DISRUPT.DISRUPT_SESSIONS_IMMEDIATE +DBMS_DISRUPT.WAKE_UP_SERVICE +DBMS_DISTRIBUTED_TRUST_ADMIN. +DBMS_DISTRIBUTED_TRUST_ADMIN.ALLOW_ALL +DBMS_DISTRIBUTED_TRUST_ADMIN.ALLOW_SERVER +DBMS_DISTRIBUTED_TRUST_ADMIN.DENY_ALL +DBMS_DISTRIBUTED_TRUST_ADMIN.DENY_SERVER +DBMS_DM_EXP_INTERNAL. +DBMS_DM_EXP_INTERNAL.EXP_MODEL +DBMS_DM_EXP_INTERNAL.GET_CUR_JOB_ID +DBMS_DM_EXP_INTERNAL.GET_DM_JOB_INFO +DBMS_DM_EXP_INTERNAL.IMP_MODEL +DBMS_DM_EXP_INTERNAL.INIT_DM_JOB_ID +DBMS_DM_EXP_INTERNAL.SET_CUR_JOB_ID +DBMS_DM_MODEL_EXP. +DBMS_DM_MODEL_EXP.AUDIT_EXP +DBMS_DM_MODEL_EXP.AUDIT_SYSPRIVS_EXP +DBMS_DM_MODEL_EXP.CREATE_EXP +DBMS_DM_MODEL_EXP.GRANT_EXP +DBMS_DM_MODEL_EXP.GRANT_SYSPRIVS_EXP +DBMS_DM_MODEL_IMP. +DBMS_DM_MODEL_IMP.ADD_TABLE +DBMS_DM_MODEL_IMP.CREATE_MODEL +DBMS_DM_MODEL_IMP.PERSIST_MODEL +DBMS_DM_UTIL. +DBMS_DM_UTIL.ASSERT +DBMS_DNFS. +DBMS_DNFS.CLONEDB_RENAMEFILE +DBMS_DNFS.RESTORE_DATAFILE_PERMISSIONS +DBMS_DNFS.UNMOUNTVOLUME +DBMS_DRS. +DBMS_DRS.ADD_DATABASE +DBMS_DRS.ADD_FAR_SYNC +DBMS_DRS.CANCEL_REQUEST +DBMS_DRS.CHECK_CONNECT +DBMS_DRS.CREATE_CONFIGURATION +DBMS_DRS.DELETE_REQUEST +DBMS_DRS.DG_BROKER_INFO +DBMS_DRS.DISABLE_FS_FAILOVER +DBMS_DRS.DO_CONTROL +DBMS_DRS.DO_CONTROL_RAW +DBMS_DRS.DO_OBSERVE +DBMS_DRS.DUMP_BROKER +DBMS_DRS.DUMP_META +DBMS_DRS.DUMP_OBSERVER +DBMS_DRS.ENABLE_CONFIGURATION +DBMS_DRS.ENABLE_DATABASE +DBMS_DRS.ENABLE_FAR_SYNC +DBMS_DRS.ENABLE_FS_FAILOVER +DBMS_DRS.FS_FAILOVER_FOR_HC_COND +DBMS_DRS.GET_PROPERTY +DBMS_DRS.GET_PROPERTY_OBJ +DBMS_DRS.GET_RESPONSE +DBMS_DRS.GET_RESPONSE_RAW +DBMS_DRS.INITIATE_FS_FAILOVER +DBMS_DRS.PING +DBMS_DRS.READYTOFAILOVER +DBMS_DRS.REMOVE_CONFIGURATION +DBMS_DRS.REMOVE_DATABASE +DBMS_DRS.REMOVE_FAR_SYNC +DBMS_DRS.REPLACE_MEMBER_NAME_IN_PROPS +DBMS_DRS.RESET_CONFIGURATION_PROPERTY +DBMS_DRS.RESET_DATABASE_PROPERTY +DBMS_DRS.RESET_FAR_SYNC_PROPERTY +DBMS_DRS.SET_CONFIGURATION_PROPERTY +DBMS_DRS.SET_DATABASE_PROPERTY +DBMS_DRS.SET_FAR_SYNC_PROPERTY +DBMS_DRS.SET_PROTECTION_MODE +DBMS_DRS.SLEEP +DBMS_DRS.STARTUP_FOR_RELOCATE +DBMS_DRS.STATECHANGERECORDED +DBMS_DRS.STOP_OBSERVER +DBMS_DRS.WAIT +DBMS_DRS.WAIT_SYNC +DBMS_DST. +DBMS_DST.BEGIN_PREPARE +DBMS_DST.BEGIN_UPGRADE +DBMS_DST.CREATE_AFFECTED_TABLE +DBMS_DST.CREATE_ERROR_TABLE +DBMS_DST.CREATE_TRIGGER_TABLE +DBMS_DST.END_PREPARE +DBMS_DST.END_UPGRADE +DBMS_DST.FIND_AFFECTED_TABLES +DBMS_DST.GET_LATEST_TIMEZONE_VERSION +DBMS_DST.LOAD_SECONDARY +DBMS_DST.UNLOAD_SECONDARY +DBMS_DST.UPGRADE_DATABASE +DBMS_DST.UPGRADE_SCHEMA +DBMS_DST.UPGRADE_TABLE +DBMS_EDITIONS_UTILITIES. +DBMS_EDITIONS_UTILITIES.CLEAN_UNUSABLE_EDITIONS +DBMS_EDITIONS_UTILITIES.COMPARE_EDITION +DBMS_EDITIONS_UTILITIES.SET_EDITIONING_VIEWS_READ_ONLY +DBMS_EDITIONS_UTILITIES.SET_NULL_COLUMN_VALUES_TO_EXPR +DBMS_EPG. +DBMS_EPG.AUTHORIZE_DAD +DBMS_EPG.CREATE_DAD +DBMS_EPG.DEAUTHORIZE_DAD +DBMS_EPG.DELETE_DAD_ATTRIBUTE +DBMS_EPG.DELETE_GLOBAL_ATTRIBUTE +DBMS_EPG.DROP_DAD +DBMS_EPG.GET_ALL_DAD_ATTRIBUTES +DBMS_EPG.GET_ALL_DAD_MAPPINGS +DBMS_EPG.GET_ALL_GLOBAL_ATTRIBUTES +DBMS_EPG.GET_DAD_ATTRIBUTE +DBMS_EPG.GET_DAD_LIST +DBMS_EPG.GET_GLOBAL_ATTRIBUTE +DBMS_EPG.MAP_DAD +DBMS_EPG.SET_DAD_ATTRIBUTE +DBMS_EPG.SET_GLOBAL_ATTRIBUTE +DBMS_EPG.UNMAP_DAD +DBMS_ERRLOG. +DBMS_ERRLOG.CREATE_ERROR_LOG +DBMS_EXPORT_EXTENSION. +DBMS_EXPORT_EXTENSION.BEGIN_IMPORT_DOMAIN_INDEX +DBMS_EXPORT_EXTENSION.CHECK_MATCH_TEMPLATE +DBMS_EXPORT_EXTENSION.FUNC_INDEX_DEFAULT +DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_METADATA +DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES +DBMS_EXPORT_EXTENSION.GET_OBJECT_COMMENT +DBMS_EXPORT_EXTENSION.GET_OBJECT_SOURCE +DBMS_EXPORT_EXTENSION.GET_V2_DOMAIN_INDEX_TABLES +DBMS_EXPORT_EXTENSION.INSERT_SECOBJ +DBMS_EXPORT_EXTENSION.NULLTOCHR0 +DBMS_EXPORT_EXTENSION.POST_TABLES +DBMS_EXPORT_EXTENSION.PRE_TABLE +DBMS_EXPORT_EXTENSION.RESET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION.RESET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION.RESET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION.SET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION.SET_EXP_SORTSIZE +DBMS_EXPORT_EXTENSION.SET_EXP_TIMEZONE +DBMS_EXPORT_EXTENSION.SET_HAKAN_EVENT +DBMS_EXPORT_EXTENSION.SET_IMP_EVENTS +DBMS_EXPORT_EXTENSION.SET_IMP_SKIP_INDEXES_OFF +DBMS_EXPORT_EXTENSION.SET_IMP_SKIP_INDEXES_ON +DBMS_EXPORT_EXTENSION.SET_IMP_TIMEZONE +DBMS_EXPORT_EXTENSION.SET_IOT_EVENT +DBMS_EXPORT_EXTENSION.SET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION.SET_NO_OUTLINES +DBMS_EXPORT_EXTENSION.SET_RESUM +DBMS_EXPORT_EXTENSION.SET_RESUMNAM +DBMS_EXPORT_EXTENSION.SET_RESUMNAMTIM +DBMS_EXPORT_EXTENSION.SET_RESUMTIM +DBMS_EXPORT_EXTENSION.SET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION.SET_STATSON +DBMS_EXPORT_EXTENSION_I. +DBMS_EXPORT_EXTENSION_I.CHECK_MATCH_TEMPLATE +DBMS_EXPORT_EXTENSION_I.FUNC_INDEX_DEFAULT +DBMS_EXPORT_EXTENSION_I.GET_LOBCOLCNT +DBMS_EXPORT_EXTENSION_I.GET_OBJECT_COMMENT +DBMS_EXPORT_EXTENSION_I.GET_TABACT +DBMS_EXPORT_EXTENSION_I.INSERT_SECOBJ +DBMS_EXPORT_EXTENSION_I.NULLTOCHR0 +DBMS_EXPORT_EXTENSION_I.RESET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION_I.RESET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION_I.RESET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION_I.SET_EXP_OPQ_TYP_EVENT +DBMS_EXPORT_EXTENSION_I.SET_EXP_SORTSIZE +DBMS_EXPORT_EXTENSION_I.SET_EXP_TIMEZONE +DBMS_EXPORT_EXTENSION_I.SET_HAKAN_EVENT +DBMS_EXPORT_EXTENSION_I.SET_IMP_EVENTS +DBMS_EXPORT_EXTENSION_I.SET_IMP_SKIP_INDEXES_OFF +DBMS_EXPORT_EXTENSION_I.SET_IMP_SKIP_INDEXES_ON +DBMS_EXPORT_EXTENSION_I.SET_IMP_TIMEZONE +DBMS_EXPORT_EXTENSION_I.SET_IOT_EVENT +DBMS_EXPORT_EXTENSION_I.SET_NLS_NUMERIC_CHAR +DBMS_EXPORT_EXTENSION_I.SET_NO_OUTLINES +DBMS_EXPORT_EXTENSION_I.SET_RESUM +DBMS_EXPORT_EXTENSION_I.SET_RESUMNAM +DBMS_EXPORT_EXTENSION_I.SET_RESUMNAMTIM +DBMS_EXPORT_EXTENSION_I.SET_RESUMTIM +DBMS_EXPORT_EXTENSION_I.SET_SECONDARYOBJ_EVENT +DBMS_EXPORT_EXTENSION_I.SET_STATSON +DBMS_EXPORT_EXTENSION_I.TRUNCATE_SECOBJ +DBMS_EXTENDED_TTS_CHECKS. +DBMS_EXTENDED_TTS_CHECKS.CHECK_CSX_CLOSURE +DBMS_EXTENDED_TTS_CHECKS.GET_TABLESPACE_TAB +DBMS_EXTENDED_TTS_CHECKS.VERIFY_EXTENSIBLE +DBMS_EXTENDED_TTS_CHECKS.VERIFY_MV +DBMS_EXTENDED_TTS_CHECKS.VERIFY_NT +DBMS_EXTENDED_TTS_CHECKS.VERIFY_XMLSCHEMA +DBMS_FBT. +DBMS_FBT.FBT_ANALYZE +DBMS_FBT.FBT_DISCARD +DBMS_FBT.FBT_EXECUTE +DBMS_FEATURE_ACFS. +DBMS_FEATURE_ACFS_ENCR. +DBMS_FEATURE_ACFS_SNAPSHOT. +DBMS_FEATURE_ACTIVE_DATA_GUARD. +DBMS_FEATURE_ADAPTIVE_PLANS. +DBMS_FEATURE_ADV_IDXCMP. +DBMS_FEATURE_ADV_TABCMP. +DBMS_FEATURE_AFD. +DBMS_FEATURE_APEX. +DBMS_FEATURE_ASM. +DBMS_FEATURE_AUDIT_OPTIONS. +DBMS_FEATURE_AUM. +DBMS_FEATURE_AUTOSTA. +DBMS_FEATURE_AUTO_MEM. +DBMS_FEATURE_AUTO_REOPT. +DBMS_FEATURE_AUTO_SGA. +DBMS_FEATURE_AUTO_SSM. +DBMS_FEATURE_AWR. +DBMS_FEATURE_BACKUP_ENCRYPTION. +DBMS_FEATURE_BA_OWNER. +DBMS_FEATURE_CLOUD_EHCC. +DBMS_FEATURE_CONCURRENT_STATS. +DBMS_FEATURE_DATABASE_ODM. +DBMS_FEATURE_DATABASE_VAULT. +DBMS_FEATURE_DATA_GUARD. +DBMS_FEATURE_DATA_REDACTION. +DBMS_FEATURE_DBFS_CONTENT. +DBMS_FEATURE_DBFS_HS. +DBMS_FEATURE_DBFS_SFS. +DBMS_FEATURE_DEFERRED_SEG_CRT. +DBMS_FEATURE_DMU. +DBMS_FEATURE_DYN_SGA. +DBMS_FEATURE_EMX. +DBMS_FEATURE_EXADATA. +DBMS_FEATURE_EXTENSIBILITY. +DBMS_FEATURE_FGA_AUDIT. +DBMS_FEATURE_FLEX_ASM. +DBMS_FEATURE_GATEWAYS. +DBMS_FEATURE_GOLDENGATE. +DBMS_FEATURE_HCC. +DBMS_FEATURE_HCCCONV. +DBMS_FEATURE_HCCRLL. +DBMS_FEATURE_HEATMAP. +DBMS_FEATURE_IDH. +DBMS_FEATURE_ILM. +DBMS_FEATURE_IMA. +DBMS_FEATURE_IMC. +DBMS_FEATURE_IMFS. +DBMS_FEATURE_IM_ADO. +DBMS_FEATURE_IM_EXPRESSIONS. +DBMS_FEATURE_IM_FORSERVICE. +DBMS_FEATURE_IM_JOINGROUPS. +DBMS_FEATURE_IOT. +DBMS_FEATURE_JOB_SCHEDULER. +DBMS_FEATURE_JSON. +DBMS_FEATURE_LABEL_SECURITY. +DBMS_FEATURE_LMT. +DBMS_FEATURE_MOVE_DATAFILE. +DBMS_FEATURE_OBJECT. +DBMS_FEATURE_ONLINE_REDEF. +DBMS_FEATURE_PARTITION_SYSTEM. +DBMS_FEATURE_PARTITION_USER. +DBMS_FEATURE_PILLAR_EHCC. +DBMS_FEATURE_PILLAR_STORAGE. +DBMS_FEATURE_PLSQL_NATIVE. +DBMS_FEATURE_PRIV_CAPTURE. +DBMS_FEATURE_QOSM. +DBMS_FEATURE_RAC. +DBMS_FEATURE_RAS. +DBMS_FEATURE_REGISTER_ALLFEAT. +DBMS_FEATURE_REGISTER_ALLHWM. +DBMS_FEATURE_RESOURCE_MANAGER. +DBMS_FEATURE_RMAN_BACKUP. +DBMS_FEATURE_RMAN_BASIC. +DBMS_FEATURE_RMAN_BZIP2. +DBMS_FEATURE_RMAN_DISK_BACKUP. +DBMS_FEATURE_RMAN_HIGH. +DBMS_FEATURE_RMAN_LOW. +DBMS_FEATURE_RMAN_MEDIUM. +DBMS_FEATURE_RMAN_TAPE_BACKUP. +DBMS_FEATURE_RMAN_ZLIB. +DBMS_FEATURE_ROND. +DBMS_FEATURE_RULESMANAGER. +DBMS_FEATURE_SECUREFILES_SYS. +DBMS_FEATURE_SECUREFILES_USR. +DBMS_FEATURE_SEGADV_USER. +DBMS_FEATURE_SEG_MAIN_ONL_COMP. +DBMS_FEATURE_SERVICES. +DBMS_FEATURE_SFCOMPRESS_SYS. +DBMS_FEATURE_SFCOMPRESS_USR. +DBMS_FEATURE_SFDEDUP_SYS. +DBMS_FEATURE_SFDEDUP_USR. +DBMS_FEATURE_SFENCRYPT_SYS. +DBMS_FEATURE_SFENCRYPT_USR. +DBMS_FEATURE_SHARD. +DBMS_FEATURE_SPD. +DBMS_FEATURE_STATS_INCREMENTAL. +DBMS_FEATURE_STREAMS. +DBMS_FEATURE_TEST_PROC_1. +DBMS_FEATURE_TEST_PROC_2. +DBMS_FEATURE_TEST_PROC_3. +DBMS_FEATURE_TEST_PROC_4. +DBMS_FEATURE_TEST_PROC_5. +DBMS_FEATURE_THP. +DBMS_FEATURE_TSDP. +DBMS_FEATURE_UNIFIED_AUDIT. +DBMS_FEATURE_USAGE. +DBMS_FEATURE_USAGE.REGISTER_DB_FEATURE +DBMS_FEATURE_USAGE.REGISTER_HIGH_WATER_MARK +DBMS_FEATURE_USAGE_INTERNAL. +DBMS_FEATURE_USAGE_INTERNAL.CLEANUP_DATABASE +DBMS_FEATURE_USAGE_INTERNAL.EXEC_DB_USAGE_SAMPLING +DBMS_FEATURE_USAGE_INTERNAL.SAMPLE_ONE_FEATURE +DBMS_FEATURE_USAGE_INTERNAL.SAMPLE_ONE_HWM +DBMS_FEATURE_USAGE_REPORT. +DBMS_FEATURE_USAGE_REPORT.DISPLAY_HTML +DBMS_FEATURE_USAGE_REPORT.DISPLAY_TEXT +DBMS_FEATURE_USER_MVS. +DBMS_FEATURE_UTILITIES1. +DBMS_FEATURE_UTILITIES2. +DBMS_FEATURE_UTILITIES3. +DBMS_FEATURE_UTILITIES4. +DBMS_FEATURE_UTILITIES5. +DBMS_FEATURE_UTILITIES6. +DBMS_FEATURE_VPD. +DBMS_FEATURE_WCR_CAPTURE. +DBMS_FEATURE_WCR_REPLAY. +DBMS_FEATURE_XDB. +DBMS_FEATURE_XSTREAM_IN. +DBMS_FEATURE_XSTREAM_OUT. +DBMS_FEATURE_XSTREAM_STREAMS. +DBMS_FEATURE_ZFS_EHCC. +DBMS_FEATURE_ZFS_STORAGE. +DBMS_FEATURE_ZMAP. +DBMS_FGA. +DBMS_FGA.ADD_POLICY +DBMS_FGA.DISABLE_POLICY +DBMS_FGA.DROP_POLICY +DBMS_FGA.ENABLE_POLICY +DBMS_FILE_GROUP. +DBMS_FILE_GROUP.ADD_FILE +DBMS_FILE_GROUP.ALTER_FILE +DBMS_FILE_GROUP.ALTER_FILE_GROUP +DBMS_FILE_GROUP.ALTER_VERSION +DBMS_FILE_GROUP.CREATE_FILE_GROUP +DBMS_FILE_GROUP.CREATE_VERSION +DBMS_FILE_GROUP.DROP_FILE_GROUP +DBMS_FILE_GROUP.DROP_VERSION +DBMS_FILE_GROUP.GRANT_OBJECT_PRIVILEGE +DBMS_FILE_GROUP.GRANT_SYSTEM_PRIVILEGE +DBMS_FILE_GROUP.PURGE_FILE_GROUP +DBMS_FILE_GROUP.REMOVE_FILE +DBMS_FILE_GROUP.REVOKE_OBJECT_PRIVILEGE +DBMS_FILE_GROUP.REVOKE_SYSTEM_PRIVILEGE +DBMS_FILE_GROUP_DECL. +DBMS_FILE_GROUP_EXP. +DBMS_FILE_GROUP_EXP.AUDIT_EXP +DBMS_FILE_GROUP_EXP.AUDIT_SYSPRIVS_EXP +DBMS_FILE_GROUP_EXP.CREATE_EXP +DBMS_FILE_GROUP_EXP.DROP_EXP +DBMS_FILE_GROUP_EXP.GRANT_EXP +DBMS_FILE_GROUP_EXP.GRANT_SYSPRIVS_EXP +DBMS_FILE_GROUP_EXP.SCHEMA_INFO_EXP +DBMS_FILE_GROUP_EXP_INTERNAL. +DBMS_FILE_GROUP_EXP_INTERNAL.OBJECT_OWNER +DBMS_FILE_GROUP_IMP. +DBMS_FILE_GROUP_IMP.ADD_FILE +DBMS_FILE_GROUP_IMP.CREATE_FILE_GROUP +DBMS_FILE_GROUP_IMP.CREATE_VERSION +DBMS_FILE_GROUP_IMP.GRANT_OBJECT_PRIVILEGE +DBMS_FILE_GROUP_IMP.SET_TABLESPACE_INFO +DBMS_FILE_GROUP_IMP.SET_TABLE_INFO +DBMS_FILE_GROUP_IMP.SET_VERSION_EXPORT_INFO +DBMS_FILE_GROUP_IMP_INTERNAL. +DBMS_FILE_GROUP_IMP_INTERNAL.SET_TABLESPACE_INFO +DBMS_FILE_GROUP_IMP_INTERNAL.SET_TABLE_INFO +DBMS_FILE_GROUP_IMP_INTERNAL.SET_VERSION_EXPORT_INFO +DBMS_FILE_GROUP_INTERNAL_INVOK. +DBMS_FILE_GROUP_INTERNAL_INVOK.ADD_FILE +DBMS_FILE_GROUP_INTERNAL_INVOK.ALTER_FILE_GROUP_3GL +DBMS_FILE_GROUP_INTERNAL_INVOK.CREATE_FILE_GROUP +DBMS_FILE_GROUP_INTERNAL_INVOK.CREATE_FILE_GROUP_3GL +DBMS_FILE_GROUP_INTERNAL_INVOK.CREATE_VERSION +DBMS_FILE_GROUP_INTERNAL_INVOK.DROP_FILE_GROUP_3GL +DBMS_FILE_GROUP_UTL. +DBMS_FILE_GROUP_UTL.AS_POS_INTEGER +DBMS_FILE_GROUP_UTL.AUTO_PURGE_FILE_GROUPS +DBMS_FILE_GROUP_UTL.BOOLEAN_STR +DBMS_FILE_GROUP_UTL.CANONICALIZE +DBMS_FILE_GROUP_UTL.CHECK_FILE_GROUP_FOR_DP_INFO +DBMS_FILE_GROUP_UTL.CHECK_VERSION_FOR_DP_INFO +DBMS_FILE_GROUP_UTL.CREATE_VERSEQ +DBMS_FILE_GROUP_UTL.DELETE_FILE_METADATA +DBMS_FILE_GROUP_UTL.DELETE_VERSION_METADATA +DBMS_FILE_GROUP_UTL.DISABLE_PURGE_JOB +DBMS_FILE_GROUP_UTL.DROP_VERSEQ +DBMS_FILE_GROUP_UTL.ENABLE_PURGE_JOB +DBMS_FILE_GROUP_UTL.GENERATE_NAME +DBMS_FILE_GROUP_UTL.GET_FGV_LOCK +DBMS_FILE_GROUP_UTL.GET_FG_LOCK +DBMS_FILE_GROUP_UTL.GET_FILES_PURGE_CURSOR +DBMS_FILE_GROUP_UTL.GET_FILE_GROUP_METADATA +DBMS_FILE_GROUP_UTL.GET_FILE_METADATA +DBMS_FILE_GROUP_UTL.GET_NEXTSEQVAL +DBMS_FILE_GROUP_UTL.GET_VERSIONS_PURGE_CURSOR +DBMS_FILE_GROUP_UTL.GET_VERSION_METADATA +DBMS_FILE_GROUP_UTL.GET_VERSION_METADATA_CURSOR +DBMS_FILE_GROUP_UTL.INSERT_FILE_METADATA +DBMS_FILE_GROUP_UTL.INSERT_VERSION_METADATA +DBMS_FILE_GROUP_UTL.IS_INTEGER +DBMS_FILE_GROUP_UTL.POPULATE_DATAPUMP_INFO +DBMS_FILE_GROUP_UTL.PURGE_DATAPUMP_INFO +DBMS_FILE_GROUP_UTL.RAISE_DP_ERRORS +DBMS_FILE_GROUP_UTL.RELOAD_VERSION_METADATA +DBMS_FILE_GROUP_UTL.TRACE_ON +DBMS_FILE_GROUP_UTL.UPDATE_FILE_METADATA +DBMS_FILE_GROUP_UTL.UPDATE_VERSION_METADATA +DBMS_FILE_GROUP_UTL.WRITE_TRACE +DBMS_FILE_GROUP_UTL_INVOK. +DBMS_FILE_GROUP_UTL_INVOK.AUTO_PURGE_FILE_GROUP +DBMS_FILE_GROUP_UTL_INVOK.CHECK_PRIVILEGE_ON_FILE_GROUP +DBMS_FILE_GROUP_UTL_INVOK.CHECK_SYSTEM_PRIVILEGE +DBMS_FILE_GROUP_UTL_INVOK.LOAD_DATAPUMP +DBMS_FILE_GROUP_UTL_INVOK.PURGE_FILE_GROUP +DBMS_FILE_GROUP_UTL_INVOK.PURGE_FILE_METADATA +DBMS_FILE_GROUP_UTL_INVOK.PURGE_FILE_ONDISK +DBMS_FILE_GROUP_UTL_INVOK.PURGE_VERSION +DBMS_FILE_GROUP_UTL_INVOK.UNLOAD_DATAPUMP +DBMS_FILE_TRANSFER. +DBMS_FILE_TRANSFER.COPY_FILE +DBMS_FILE_TRANSFER.GET_FILE +DBMS_FILE_TRANSFER.PUT_FILE +DBMS_FLASHBACK. +DBMS_FLASHBACK.DISABLE +DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER +DBMS_FLASHBACK.ENABLE_AT_TIME +DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER +DBMS_FLASHBACK.TRANSACTION_BACKOUT +DBMS_FLASHBACK_ARCHIVE. +DBMS_FLASHBACK_ARCHIVE.ADD_TABLE_TO_APPLICATION +DBMS_FLASHBACK_ARCHIVE.CREATE_TEMP_HISTORY_TABLE +DBMS_FLASHBACK_ARCHIVE.DISABLE_APPLICATION +DBMS_FLASHBACK_ARCHIVE.DISABLE_ASOF_VALID_TIME +DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA +DBMS_FLASHBACK_ARCHIVE.DROP_APPLICATION +DBMS_FLASHBACK_ARCHIVE.ENABLE_APPLICATION +DBMS_FLASHBACK_ARCHIVE.ENABLE_AT_VALID_TIME +DBMS_FLASHBACK_ARCHIVE.EXTEND_MAPPINGS +DBMS_FLASHBACK_ARCHIVE.GET_SYS_CONTEXT +DBMS_FLASHBACK_ARCHIVE.IMPORT_HISTORY +DBMS_FLASHBACK_ARCHIVE.LOCK_DOWN_APPLICATION +DBMS_FLASHBACK_ARCHIVE.PURGE_CONTEXT +DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA +DBMS_FLASHBACK_ARCHIVE.REGISTER_APPLICATION +DBMS_FLASHBACK_ARCHIVE.REMOVE_TABLE_FROM_APPLICATION +DBMS_FLASHBACK_ARCHIVE.SET_CONTEXT_LEVEL +DBMS_FLASHBACK_ARCHIVE.UNLOCK_APPLICATION +DBMS_FREQUENT_ITEMSET. +DBMS_FREQUENT_ITEMSET.FI_HORIZONTAL +DBMS_FREQUENT_ITEMSET.FI_HORIZONTAL_INNER +DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL +DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL_INNER +DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL_OUTER +DBMS_FS. +DBMS_FS.DESTROY_ORACLE_FS +DBMS_FS.MAKE_ORACLE_FS +DBMS_FS.MOUNT_ORACLE_FS +DBMS_FS.UNMOUNT_ORACLE_FS +DBMS_FUSE. +DBMS_FUSE.FS_ACCESS +DBMS_FUSE.FS_CHMOD +DBMS_FUSE.FS_CHOWN +DBMS_FUSE.FS_CREAT +DBMS_FUSE.FS_DESTROY +DBMS_FUSE.FS_FGETATTR +DBMS_FUSE.FS_FLUSH +DBMS_FUSE.FS_FSYNC +DBMS_FUSE.FS_FSYNCDIR +DBMS_FUSE.FS_FTRUNCATE +DBMS_FUSE.FS_GETATTR +DBMS_FUSE.FS_GETATTR_VIEW +DBMS_FUSE.FS_GETXATTR +DBMS_FUSE.FS_INIT +DBMS_FUSE.FS_ISLOCKED +DBMS_FUSE.FS_LINK +DBMS_FUSE.FS_LISTXATTR +DBMS_FUSE.FS_LOCK +DBMS_FUSE.FS_MKDIR +DBMS_FUSE.FS_MKNOD +DBMS_FUSE.FS_MOVE +DBMS_FUSE.FS_OPEN +DBMS_FUSE.FS_OPENDIR +DBMS_FUSE.FS_READ +DBMS_FUSE.FS_READDIR +DBMS_FUSE.FS_READLINK +DBMS_FUSE.FS_RELEASE +DBMS_FUSE.FS_RELEASEDIR +DBMS_FUSE.FS_REMOVEXATTR +DBMS_FUSE.FS_RENAME +DBMS_FUSE.FS_RMDIR +DBMS_FUSE.FS_SETXATTR +DBMS_FUSE.FS_STATFS +DBMS_FUSE.FS_SYMLINK +DBMS_FUSE.FS_TRUNCATE +DBMS_FUSE.FS_UNLINK +DBMS_FUSE.FS_UNLOCK +DBMS_FUSE.FS_UTIME +DBMS_FUSE.FS_WRITE +DBMS_GOLDENGATE_ADM. +DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR +DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_COLUMN_GROUP +DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_DELTA_RES +DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR +DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR_COLUMN_GROUP +DBMS_GOLDENGATE_ADM.DELETE_PROCREP_EXCLUSION_OBJ +DBMS_GOLDENGATE_ADM.GG_PROCEDURE_REPLICATION_ON +DBMS_GOLDENGATE_ADM.INSERT_PROCREP_EXCLUSION_OBJ +DBMS_GOLDENGATE_ADM.PURGE_TOMBSTONES +DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR +DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_COLUMN_GROUP +DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_DELTA_RES +DBMS_GOLDENGATE_ADM.UPDATE_IDENTITY_COLUMN_HWM +DBMS_GOLDENGATE_ADM_INTERNAL. +DBMS_GOLDENGATE_ADM_INTERNAL.DELETE_PROCREP_EXCLUSION_OBJ +DBMS_GOLDENGATE_ADM_INTERNAL.INSERT_PROCREP_EXCLUSION_OBJ +DBMS_GOLDENGATE_ADM_INT_INVOK. +DBMS_GOLDENGATE_ADM_INT_INVOK.ADD_AUTO_CDR_COLGROUP_INT +DBMS_GOLDENGATE_ADM_INT_INVOK.ADD_AUTO_CDR_DELTA_RES_INT +DBMS_GOLDENGATE_ADM_INT_INVOK.ADD_AUTO_CDR_INT +DBMS_GOLDENGATE_ADM_INT_INVOK.ALTER_AUTO_CDR_COLGROUP_INT +DBMS_GOLDENGATE_ADM_INT_INVOK.ALTER_AUTO_CDR_INT +DBMS_GOLDENGATE_ADM_INT_INVOK.REMOVE_AUTO_CDR_COLGROUP_INT +DBMS_GOLDENGATE_ADM_INT_INVOK.REMOVE_AUTO_CDR_DELTA_RES_INT +DBMS_GOLDENGATE_ADM_INT_INVOK.REMOVE_AUTO_CDR_INT +DBMS_GOLDENGATE_AUTH. +DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE +DBMS_GOLDENGATE_AUTH.REVOKE_ADMIN_PRIVILEGE +DBMS_GOLDENGATE_EXP. +DBMS_GOLDENGATE_EXP.INSTANCE_INFO_EXP +DBMS_GOLDENGATE_IMP. +DBMS_GOLDENGATE_IMP.ACDR_COLUMN +DBMS_GOLDENGATE_IMP.ACDR_COLUMN_GROUP +DBMS_GOLDENGATE_IMP.ACDR_END +DBMS_GOLDENGATE_IMP.ACDR_START +DBMS_GOLDENGATE_IMP.ACDR_TABLE +DBMS_GSM_ALERTS. +DBMS_GSM_ALERTS.GET_CURRENT_CARDINALITY +DBMS_GSM_ALERTS.GET_DATABASE_NAME +DBMS_GSM_ALERTS.GET_EXPECTED_CARDINALITY +DBMS_GSM_ALERTS.GET_GDSPOOL_NAME +DBMS_GSM_ALERTS.GET_GSM_NAME +DBMS_GSM_ALERTS.GET_INSTANCE_NAME +DBMS_GSM_ALERTS.GET_REGION_NAME +DBMS_GSM_ALERTS.GET_RESOURCE_NAME +DBMS_GSM_ALERTS.GET_SERVICE_NAME +DBMS_GSM_ALERTS.GET_THRESH_LEVEL +DBMS_GSM_ALERTS.POST_ALERT +DBMS_GSM_ALERTS.POST_CARD_OFF +DBMS_GSM_ALERTS.POST_CATALOG_DOWN +DBMS_GSM_ALERTS.POST_DATABASE_DOWN +DBMS_GSM_ALERTS.POST_DATABASE_LAGGING +DBMS_GSM_ALERTS.POST_GSM_DOWN +DBMS_GSM_ALERTS.POST_INSTANCE_DOWN +DBMS_GSM_ALERTS.POST_THRESHOLD_HIT +DBMS_GSM_CLOUDADMIN. +DBMS_GSM_CLOUDADMIN.ADDDATABASEPOOL +DBMS_GSM_CLOUDADMIN.ADDDATABASEPOOLADMIN +DBMS_GSM_CLOUDADMIN.ADDGSM +DBMS_GSM_CLOUDADMIN.ADDREGION +DBMS_GSM_CLOUDADMIN.ADDVNCR +DBMS_GSM_CLOUDADMIN.CANCELALLCHANGES +DBMS_GSM_CLOUDADMIN.CHECKGSMDOWN +DBMS_GSM_CLOUDADMIN.CREATECATALOG +DBMS_GSM_CLOUDADMIN.CREATECLOUD +DBMS_GSM_CLOUDADMIN.CREATESHARDCATALOG +DBMS_GSM_CLOUDADMIN.CREATESUBSCRIBER +DBMS_GSM_CLOUDADMIN.DISCONNECTGSM +DBMS_GSM_CLOUDADMIN.DOENCRYPTGSMPWD +DBMS_GSM_CLOUDADMIN.GENDATAOBJNUMBER +DBMS_GSM_CLOUDADMIN.GETMASTERLOCK +DBMS_GSM_CLOUDADMIN.IMPORTBEGIN +DBMS_GSM_CLOUDADMIN.IMPORTEND +DBMS_GSM_CLOUDADMIN.ISSYSUPDATE +DBMS_GSM_CLOUDADMIN.MASKPOLICY +DBMS_GSM_CLOUDADMIN.MODIFYCATALOG +DBMS_GSM_CLOUDADMIN.MODIFYGSM +DBMS_GSM_CLOUDADMIN.MODIFYREGION +DBMS_GSM_CLOUDADMIN.POOLVPDPREDICATE +DBMS_GSM_CLOUDADMIN.RAN_CREATE_CATALOG +DBMS_GSM_CLOUDADMIN.RELEASEMASTERLOCK +DBMS_GSM_CLOUDADMIN.REMOVECATALOG +DBMS_GSM_CLOUDADMIN.REMOVECLOUD +DBMS_GSM_CLOUDADMIN.REMOVEDATABASEPOOL +DBMS_GSM_CLOUDADMIN.REMOVEDATABASEPOOLADMIN +DBMS_GSM_CLOUDADMIN.REMOVEGSM +DBMS_GSM_CLOUDADMIN.REMOVEREGION +DBMS_GSM_CLOUDADMIN.REMOVESUBSCRIBER +DBMS_GSM_CLOUDADMIN.REMOVEVNCR +DBMS_GSM_CLOUDADMIN.SETENCRYPTEDDDL +DBMS_GSM_CLOUDADMIN.SETENCRYPTEDGSMPWD +DBMS_GSM_CLOUDADMIN.SYNCPARAMETERS +DBMS_GSM_CLOUDADMIN.UNSET_CREATE_CATALOG +DBMS_GSM_CLOUDADMIN.VERIFYCATALOG +DBMS_GSM_COMMON. +DBMS_GSM_COMMON.ACTIONUET +DBMS_GSM_COMMON.CHECKDBCOMPAT +DBMS_GSM_COMMON.CHUNKLOWHIGH +DBMS_GSM_COMMON.CLOBTOTRACE +DBMS_GSM_COMMON.DBISDOWNGRADEABLE +DBMS_GSM_COMMON.EXISTGSM +DBMS_GSM_COMMON.GETDBPARAMETERNUM +DBMS_GSM_COMMON.GETDBPARAMETERSTR +DBMS_GSM_COMMON.GETMSG +DBMS_GSM_COMMON.GETPARAM_DB_NUM_GSM +DBMS_GSM_COMMON.GETPARAM_GWM_DATABASE_FLAGS +DBMS_GSM_COMMON.GETPARAM_SHARDGROUP_NAME +DBMS_GSM_COMMON.GSM_LIST_TO_GSM_PARAMS +DBMS_GSM_COMMON.GSM_PARAMS_TO_GSM_LIST +DBMS_GSM_COMMON.GWMFACTOR +DBMS_GSM_COMMON.GWMSUBNET +DBMS_GSM_COMMON.INST_LIST_TO_INST_STRING +DBMS_GSM_COMMON.ISCDB +DBMS_GSM_COMMON.ISGWMTRACING +DBMS_GSM_COMMON.ISNONORACLECLOUD +DBMS_GSM_COMMON.ISUETENABLED +DBMS_GSM_COMMON.NUM2LINEAR +DBMS_GSM_COMMON.PARAMS_TO_DBPARAM_LIST +DBMS_GSM_COMMON.REGION_PARAMS_TO_REGION_LIST +DBMS_GSM_COMMON.REREGISTERDB +DBMS_GSM_COMMON.RESETDBPARAMETER +DBMS_GSM_COMMON.SERVICECHANGE +DBMS_GSM_COMMON.SETDBPARAMETER +DBMS_GSM_COMMON.SETGSMPARAMETER +DBMS_GSM_COMMON.SETREGIONLISTPARAMETER +DBMS_GSM_COMMON.UPDATECHUNKS +DBMS_GSM_COMMON.VERIFYUET +DBMS_GSM_COMMON.WRITETOGWMTRACING +DBMS_GSM_DBADMIN. +DBMS_GSM_DBADMIN.ADDDATABASE +DBMS_GSM_DBADMIN.ADDGSM +DBMS_GSM_DBADMIN.ADDREGION +DBMS_GSM_DBADMIN.ADDSERVICE +DBMS_GSM_DBADMIN.ALTERALLREFFRAGMENTSUNITTEST +DBMS_GSM_DBADMIN.CONFIGOGGREPLICATION +DBMS_GSM_DBADMIN.CONTROLCHUNK +DBMS_GSM_DBADMIN.CREATERATABLEFAMILY +DBMS_GSM_DBADMIN.DROPRATABLEFAMILY +DBMS_GSM_DBADMIN.ENSUREDBLINK +DBMS_GSM_DBADMIN.EXECUTEDDLCALLBACK +DBMS_GSM_DBADMIN.EXECUTEDDLPRVT +DBMS_GSM_DBADMIN.EXECUTEGENERICPROCEDURE +DBMS_GSM_DBADMIN.EXPORTMETADATA +DBMS_GSM_DBADMIN.FINISHMOVE +DBMS_GSM_DBADMIN.GETCRSINFO +DBMS_GSM_DBADMIN.GETDBNUMBERRANGE +DBMS_GSM_DBADMIN.GETGSMINFO +DBMS_GSM_DBADMIN.GETHOSTINFO +DBMS_GSM_DBADMIN.GRABCHUNKSFROMCATALOG +DBMS_GSM_DBADMIN.IMPORTDATA +DBMS_GSM_DBADMIN.MODIFYDATABASE +DBMS_GSM_DBADMIN.MODIFYGSM +DBMS_GSM_DBADMIN.MODIFYREGION +DBMS_GSM_DBADMIN.MODIFYSERVICE +DBMS_GSM_DBADMIN.MODIFYSERVICEGLOBALPARAMETERS +DBMS_GSM_DBADMIN.MODIFYSERVICELOCALPARAMETERS +DBMS_GSM_DBADMIN.MOVECHUNK +DBMS_GSM_DBADMIN.RECOVERCHUNKS +DBMS_GSM_DBADMIN.REMOVEALLSERVICES +DBMS_GSM_DBADMIN.REMOVEDATABASE +DBMS_GSM_DBADMIN.REMOVEGSM +DBMS_GSM_DBADMIN.REMOVEREGION +DBMS_GSM_DBADMIN.REMOVESERVICE +DBMS_GSM_DBADMIN.RESTORECHUNK +DBMS_GSM_DBADMIN.SEND_GDSCTL_MSG +DBMS_GSM_DBADMIN.SETCATALOGLINK +DBMS_GSM_DBADMIN.SETCHUNKS +DBMS_GSM_DBADMIN.SETDDLTIMEOUT +DBMS_GSM_DBADMIN.SETRATABLEFAMILY +DBMS_GSM_DBADMIN.SPLITCHUNK +DBMS_GSM_DBADMIN.STARTSERVICE +DBMS_GSM_DBADMIN.STOPSERVICE +DBMS_GSM_DBADMIN.SYNC +DBMS_GSM_DBADMIN.SYNCDDLPARAMETER +DBMS_GSM_DBADMIN.VALIDATEDATABASE +DBMS_GSM_FIX. +DBMS_GSM_FIX.CROSSVALIDATEDATABASE +DBMS_GSM_FIX.SETDGPROPERTY +DBMS_GSM_FIX.VALIDATEDATABASE +DBMS_GSM_FIX.VALIDATESHARD +DBMS_GSM_FIXED. +DBMS_GSM_FIXED.FIXBC +DBMS_GSM_FIXED.GETCOLUMNINFOEX +DBMS_GSM_FIXED.GETTABLESPACEDDLINTERNAL +DBMS_GSM_FIXED.SETUPBC +DBMS_GSM_FIXED.VALIDATEPARAMETERS +DBMS_GSM_NOPRIV. +DBMS_GSM_NOPRIV.GETCATALOGLOCK +DBMS_GSM_NOPRIV.RELEASECATALOGLOCK +DBMS_GSM_POOLADMIN. +DBMS_GSM_POOLADMIN.ADDBROKERCONFIG +DBMS_GSM_POOLADMIN.ADDCDB +DBMS_GSM_POOLADMIN.ADDDATABASE +DBMS_GSM_POOLADMIN.ADDDATABASEDONE +DBMS_GSM_POOLADMIN.ADDDATABASEINTERNAL +DBMS_GSM_POOLADMIN.ADDFILE +DBMS_GSM_POOLADMIN.ADDREMOTECRED +DBMS_GSM_POOLADMIN.ADDSERVICE +DBMS_GSM_POOLADMIN.ADDSERVICETODBS +DBMS_GSM_POOLADMIN.ADDSHARD +DBMS_GSM_POOLADMIN.ADDSHARDGROUP +DBMS_GSM_POOLADMIN.ADDSHARDSPACE +DBMS_GSM_POOLADMIN.AQTEST +DBMS_GSM_POOLADMIN.ASSIGNCHUNKLOCATIONSDG +DBMS_GSM_POOLADMIN.ASSIGNCHUNKLOCATIONSOGG +DBMS_GSM_POOLADMIN.CATROLLBACK +DBMS_GSM_POOLADMIN.CHANGESERVICESTATE +DBMS_GSM_POOLADMIN.CHECKSYNC +DBMS_GSM_POOLADMIN.CONFIRMMOVE +DBMS_GSM_POOLADMIN.CREATESHARD +DBMS_GSM_POOLADMIN.DEPLOY +DBMS_GSM_POOLADMIN.DEPLOY_ASYNC +DBMS_GSM_POOLADMIN.DEPLOY_INT +DBMS_GSM_POOLADMIN.DISABLESERVICE +DBMS_GSM_POOLADMIN.ENABLESERVICE +DBMS_GSM_POOLADMIN.EXECSQLONSHARD +DBMS_GSM_POOLADMIN.EXECUTEOGGPROCEDURE +DBMS_GSM_POOLADMIN.GENERICPROCEDUREDONE +DBMS_GSM_POOLADMIN.GETDBINFO +DBMS_GSM_POOLADMIN.GETINFO +DBMS_GSM_POOLADMIN.GETINSTANCESTRING +DBMS_GSM_POOLADMIN.GETSERVICEDBPARAMS +DBMS_GSM_POOLADMIN.GETSERVICELOCALPARAMS +DBMS_GSM_POOLADMIN.GETSHARDCONNECTIONINFO +DBMS_GSM_POOLADMIN.GET_KEY +DBMS_GSM_POOLADMIN.GSMPROCESSINGDEPLOY +DBMS_GSM_POOLADMIN.INITCROSSSHARDS +DBMS_GSM_POOLADMIN.MAKEDBSPREFERRED +DBMS_GSM_POOLADMIN.MODIFYCDB +DBMS_GSM_POOLADMIN.MODIFYDATABASE +DBMS_GSM_POOLADMIN.MODIFYDATABASEDDLSTATE +DBMS_GSM_POOLADMIN.MODIFYFILE +DBMS_GSM_POOLADMIN.MODIFYREMOTECRED +DBMS_GSM_POOLADMIN.MODIFYSERVICE +DBMS_GSM_POOLADMIN.MODIFYSERVICECONFIG +DBMS_GSM_POOLADMIN.MODIFYSERVICEONDB +DBMS_GSM_POOLADMIN.MODIFYSHARD +DBMS_GSM_POOLADMIN.MODIFYSHARDGROUP +DBMS_GSM_POOLADMIN.MODIFYSHARDSPACE +DBMS_GSM_POOLADMIN.MOVECHUNK +DBMS_GSM_POOLADMIN.MOVECHUNKATOMIC +DBMS_GSM_POOLADMIN.MOVEFAILED +DBMS_GSM_POOLADMIN.MOVESERVICETODB +DBMS_GSM_POOLADMIN.RECOVERSHARDDDL +DBMS_GSM_POOLADMIN.RELOCATESERVICE +DBMS_GSM_POOLADMIN.REMOVEBROKERCONFIG +DBMS_GSM_POOLADMIN.REMOVECDB +DBMS_GSM_POOLADMIN.REMOVEDATABASE +DBMS_GSM_POOLADMIN.REMOVEFILE +DBMS_GSM_POOLADMIN.REMOVEREMOTECRED +DBMS_GSM_POOLADMIN.REMOVESERVICE +DBMS_GSM_POOLADMIN.REMOVESERVICEINTERNAL +DBMS_GSM_POOLADMIN.REMOVESHARD +DBMS_GSM_POOLADMIN.REMOVESHARDGROUP +DBMS_GSM_POOLADMIN.REMOVESHARDSPACE +DBMS_GSM_POOLADMIN.REQUESTDELETE +DBMS_GSM_POOLADMIN.REQUESTDONE +DBMS_GSM_POOLADMIN.RETRIEVEFILE +DBMS_GSM_POOLADMIN.SETDGPROPERTY +DBMS_GSM_POOLADMIN.SETRUNTIMESTATUS +DBMS_GSM_POOLADMIN.SET_KEY +DBMS_GSM_POOLADMIN.SPLITCHUNK +DBMS_GSM_POOLADMIN.STARTOBSERVER +DBMS_GSM_POOLADMIN.STARTSERVICE +DBMS_GSM_POOLADMIN.STOPSERVICE +DBMS_GSM_POOLADMIN.STRTOLIST +DBMS_GSM_POOLADMIN.STRTONUMLIST +DBMS_GSM_POOLADMIN.SYNCBROKERCONFIG +DBMS_GSM_POOLADMIN.SYNCDATABASE +DBMS_GSM_POOLADMIN.UPDATECROSSSHARDOGGDBDOWN +DBMS_GSM_POOLADMIN.UPDATECROSSSHARDOGGDBUP +DBMS_GSM_POOLADMIN.UPDATEDATABASESTATUS +DBMS_GSM_POOLADMIN.UPDATEMOVECHUNK +DBMS_GSM_POOLADMIN.UPDATEMOVESTATE +DBMS_GSM_UTILITY. +DBMS_GSM_UTILITY.ALT_CSHDBLINK +DBMS_GSM_UTILITY.CLEANUPDDL +DBMS_GSM_UTILITY.COMPATIBLEVERSION +DBMS_GSM_UTILITY.CRT_CSHDBLINK +DBMS_GSM_UTILITY.DATABASEPOOLEXISTS +DBMS_GSM_UTILITY.DBVERSREVLOOKUP +DBMS_GSM_UTILITY.DROP_TABLE +DBMS_GSM_UTILITY.DROP_TABLES_IN_TSET +DBMS_GSM_UTILITY.DRP_CREATED_TS +DBMS_GSM_UTILITY.DRP_CSHDBLINK +DBMS_GSM_UTILITY.GDSCTLVERSLOOKUP +DBMS_GSM_UTILITY.GENERATECHANGELOGENTRY +DBMS_GSM_UTILITY.GETCATALOGLOCK +DBMS_GSM_UTILITY.GETCATALOGLOCKPRVT +DBMS_GSM_UTILITY.GETCATALOGVERSION +DBMS_GSM_UTILITY.GETCATINFO +DBMS_GSM_UTILITY.GETCHUNKID +DBMS_GSM_UTILITY.GETCHUNKUNIQUEID +DBMS_GSM_UTILITY.GETCHUNKUNIQUEIDBYTEXT +DBMS_GSM_UTILITY.GETDBVERSION +DBMS_GSM_UTILITY.GETFIELDSIZE +DBMS_GSM_UTILITY.GETGDSONSCONFIG +DBMS_GSM_UTILITY.GETREPTYPE +DBMS_GSM_UTILITY.GETSESSIONKEYRAW +DBMS_GSM_UTILITY.GETSESSIONKEYTEXT +DBMS_GSM_UTILITY.GETSHARDCOL +DBMS_GSM_UTILITY.GETSHARDSPACEIDBYTEXT +DBMS_GSM_UTILITY.GSMVERSLOOKUP +DBMS_GSM_UTILITY.GSM_REQUESTS_UPDATE +DBMS_GSM_UTILITY.ISGSMUP +DBMS_GSM_UTILITY.ISLOCKEDBYMASTER +DBMS_GSM_UTILITY.ISSHARDEDCATALOG +DBMS_GSM_UTILITY.MAXDBINSTANCES +DBMS_GSM_UTILITY.NEW_DDL_REQUEST +DBMS_GSM_UTILITY.NEW_DDL_REQUEST_PWD +DBMS_GSM_UTILITY.NEW_FAMILY +DBMS_GSM_UTILITY.NEW_KEYCOL +DBMS_GSM_UTILITY.NEW_PARTITION_SET +DBMS_GSM_UTILITY.NEW_SHARD_TABLESPACE +DBMS_GSM_UTILITY.NEW_TABLE +DBMS_GSM_UTILITY.NEW_TABLESPACE_SET +DBMS_GSM_UTILITY.NEW_TS_SET_TABLE +DBMS_GSM_UTILITY.PREPAREDBPOOLNAME +DBMS_GSM_UTILITY.PREPARENAME +DBMS_GSM_UTILITY.PREPAREREGIONNAME +DBMS_GSM_UTILITY.RAISE_GSM_WARNING +DBMS_GSM_UTILITY.REGIONEXISTS +DBMS_GSM_UTILITY.RELEASECATALOGLOCK +DBMS_GSM_UTILITY.RELEASECATALOGLOCKPRVT +DBMS_GSM_UTILITY.REMOVESTALEREQUESTS +DBMS_GSM_UTILITY.RESERVEINSTNUMS +DBMS_GSM_UTILITY.RESERVENEXTDBNUM +DBMS_GSM_UTILITY.RSAENCODER +DBMS_GSM_UTILITY.SEND_GDSCTL_MSG +DBMS_GSM_UTILITY.SETSESSIONKEY +DBMS_GSM_UTILITY.SHARDGROUPEXISTS +DBMS_GSM_UTILITY.SHARDSPACEEXISTS +DBMS_GSM_UTILITY.UPDATE_DDL_DUPTBL +DBMS_GSM_UTILITY.UPDATE_DDL_INCDEP +DBMS_GSM_UTILITY.WAIT_FOR_DDL +DBMS_GSM_UTILITY.WAIT_FOR_DDL_NOEX +DBMS_GSM_XDB. +DBMS_GSM_XDB.SETXDBPORT +DBMS_HADOOP. +DBMS_HADOOP.CREATE_EXTDDL_FOR_HIVE +DBMS_HADOOP.SYNC_PARTITIONS_FOR_HIVE +DBMS_HADOOP_INTERNAL. +DBMS_HADOOP_INTERNAL.ADDED_HIVE_PARTNS +DBMS_HADOOP_INTERNAL.ADDED_PARTNS +DBMS_HADOOP_INTERNAL.DEBUG_USER_PRIVILEGED +DBMS_HADOOP_INTERNAL.DO_SYNC_PARTITIONS +DBMS_HADOOP_INTERNAL.DROPPED_PARTNS +DBMS_HADOOP_INTERNAL.GETHIVETABLE +DBMS_HADOOP_INTERNAL.GETNUMBEROFITEMS +DBMS_HADOOP_INTERNAL.GETPARTKEYVALUES +DBMS_HADOOP_INTERNAL.GET_CONFIG_DIR +DBMS_HADOOP_INTERNAL.GET_DDL +DBMS_HADOOP_INTERNAL.GET_DEBUG_DIR +DBMS_HADOOP_INTERNAL.GET_HIVE_COLUMNS +DBMS_HADOOP_INTERNAL.GET_HIVE_PKEYS +DBMS_HADOOP_INTERNAL.GET_HIVE_TAB_INFO +DBMS_HADOOP_INTERNAL.GET_INCOMPATIBILITY +DBMS_HADOOP_INTERNAL.GET_NAME +DBMS_HADOOP_INTERNAL.GET_OBJNO_FROM_ET +DBMS_HADOOP_INTERNAL.GET_PARTN_SPEC +DBMS_HADOOP_INTERNAL.GET_XT_COLUMNS +DBMS_HADOOP_INTERNAL.GET_XT_PKEYS +DBMS_HADOOP_INTERNAL.IS_METADATA_COMPATIBLE +DBMS_HADOOP_INTERNAL.IS_PARTITION_COMPATIBLE +DBMS_HADOOP_INTERNAL.REMOVE_DOUBLE_QUOTE +DBMS_HADOOP_INTERNAL.SYNC_USER_PRIVILEGED +DBMS_HADOOP_INTERNAL.UNIX_TS_TO_DATE +DBMS_HADOOP_INTERNAL.USER_PRIVILEGED +DBMS_HADOOP_INTERNAL.XT_COLUMNS_MATCHED +DBMS_HANG_MANAGER. +DBMS_HANG_MANAGER.SET +DBMS_HA_ALERTS. +DBMS_HA_ALERTS.GET_CARDINALITY +DBMS_HA_ALERTS.GET_DB_DOMAIN +DBMS_HA_ALERTS.GET_DB_UNIQUE_NAME +DBMS_HA_ALERTS.GET_EVENT_TIME +DBMS_HA_ALERTS.GET_HOST +DBMS_HA_ALERTS.GET_INCARNATION +DBMS_HA_ALERTS.GET_INSTANCE +DBMS_HA_ALERTS.GET_REASON +DBMS_HA_ALERTS.GET_SERVICE +DBMS_HA_ALERTS.GET_SEVERITY +DBMS_HA_ALERTS.GET_VERSION +DBMS_HA_ALERTS_PRVT. +DBMS_HA_ALERTS_PRVT.CHECK_HA_RESOURCES +DBMS_HA_ALERTS_PRVT.CLEAR_INSTANCE_RESOURCES +DBMS_HA_ALERTS_PRVT.INSTANCE_STARTUP_TIMESTAMP_TZ +DBMS_HA_ALERTS_PRVT.POST_HA_ALERT +DBMS_HA_ALERTS_PRVT.POST_INSTANCE_UP +DBMS_HEAT_MAP. +DBMS_HEAT_MAP.AUTO_ADVISOR_HEATMAP_JOB +DBMS_HEAT_MAP.BLOCK_HEAT_MAP +DBMS_HEAT_MAP.EXTENT_HEAT_MAP +DBMS_HEAT_MAP.OBJECT_HEAT_MAP +DBMS_HEAT_MAP.SEGMENT_HEAT_MAP +DBMS_HEAT_MAP.TABLESPACE_HEAT_MAP +DBMS_HEAT_MAP_INTERNAL. +DBMS_HEAT_MAP_INTERNAL.AUTO_ADVISOR_HEATMAP_JOB +DBMS_HEAT_MAP_INTERNAL.BLOCK_HEAT_MAP +DBMS_HEAT_MAP_INTERNAL.EXTENT_HEAT_MAP +DBMS_HEAT_MAP_INTERNAL.OBJECT_HEAT_MAP +DBMS_HEAT_MAP_INTERNAL.SEGMENT_HEAT_MAP +DBMS_HEAT_MAP_INTERNAL.TABLESPACE_HEAT_MAP +DBMS_HIERARCHY. +DBMS_HIERARCHY.CREATE_VALIDATE_LOG_TABLE +DBMS_HIERARCHY.GET_MV_SQL_FOR_AV_CACHE +DBMS_HIERARCHY.IS_NUMERIC +DBMS_HIERARCHY.UPGRADE_VALIDATE_LOG_TABLE +DBMS_HIERARCHY.VALIDATE_ANALYTIC_VIEW +DBMS_HIERARCHY.VALIDATE_CHECK_SUCCESS +DBMS_HIERARCHY.VALIDATE_HIERARCHY +DBMS_HM. +DBMS_HM.CREATE_OFFLINE_DICTIONARY +DBMS_HM.CREATE_SCHEMA +DBMS_HM.DROP_SCHEMA +DBMS_HM.GET_RUN_REPORT +DBMS_HM.RUN_CHECK +DBMS_HM.RUN_DDE_ACTION +DBMS_HPROF. +DBMS_HPROF.ANALYZE +DBMS_HPROF.CREATE_TABLES +DBMS_HPROF.START_PROFILING +DBMS_HPROF.STOP_PROFILING +DBMS_HS. +DBMS_HS.ALTER_BASE_CAPS +DBMS_HS.ALTER_BASE_DD +DBMS_HS.ALTER_CLASS_CAPS +DBMS_HS.ALTER_CLASS_DD +DBMS_HS.ALTER_CLASS_INIT +DBMS_HS.ALTER_FDS_CLASS +DBMS_HS.ALTER_FDS_INST +DBMS_HS.ALTER_INST_CAPS +DBMS_HS.ALTER_INST_DD +DBMS_HS.ALTER_INST_INIT +DBMS_HS.COPY_CLASS +DBMS_HS.COPY_INST +DBMS_HS.CREATE_BASE_CAPS +DBMS_HS.CREATE_BASE_DD +DBMS_HS.CREATE_CLASS_CAPS +DBMS_HS.CREATE_CLASS_DD +DBMS_HS.CREATE_CLASS_INIT +DBMS_HS.CREATE_FDS_CLASS +DBMS_HS.CREATE_FDS_INST +DBMS_HS.CREATE_INST_CAPS +DBMS_HS.CREATE_INST_DD +DBMS_HS.CREATE_INST_INIT +DBMS_HS.DROP_BASE_CAPS +DBMS_HS.DROP_BASE_DD +DBMS_HS.DROP_CLASS_CAPS +DBMS_HS.DROP_CLASS_DD +DBMS_HS.DROP_CLASS_INIT +DBMS_HS.DROP_FDS_CLASS +DBMS_HS.DROP_FDS_INST +DBMS_HS.DROP_INST_CAPS +DBMS_HS.DROP_INST_DD +DBMS_HS.DROP_INST_INIT +DBMS_HS.REPLACE_BASE_CAPS +DBMS_HS.REPLACE_BASE_DD +DBMS_HS.REPLACE_CLASS_CAPS +DBMS_HS.REPLACE_CLASS_DD +DBMS_HS.REPLACE_CLASS_INIT +DBMS_HS.REPLACE_FDS_CLASS +DBMS_HS.REPLACE_FDS_INST +DBMS_HS.REPLACE_INST_CAPS +DBMS_HS.REPLACE_INST_DD +DBMS_HS.REPLACE_INST_INIT +DBMS_HS_ALT. +DBMS_HS_ALT.ALTER_BASE_CAPS +DBMS_HS_ALT.ALTER_BASE_DD +DBMS_HS_ALT.ALTER_CLASS_CAPS +DBMS_HS_ALT.ALTER_CLASS_DD +DBMS_HS_ALT.ALTER_CLASS_INIT +DBMS_HS_ALT.ALTER_FDS_CLASS +DBMS_HS_ALT.ALTER_FDS_INST +DBMS_HS_ALT.ALTER_INST_CAPS +DBMS_HS_ALT.ALTER_INST_DD +DBMS_HS_ALT.ALTER_INST_INIT +DBMS_HS_CHK. +DBMS_HS_CHK.CHECK_BASE_CAPS +DBMS_HS_CHK.CHECK_BASE_DD +DBMS_HS_CHK.CHECK_CLASS_CAPS +DBMS_HS_CHK.CHECK_CLASS_DD +DBMS_HS_CHK.CHECK_CLASS_INIT +DBMS_HS_CHK.CHECK_FDS_CLASS +DBMS_HS_CHK.CHECK_FDS_INST +DBMS_HS_CHK.CHECK_INIT_VALUE_TYPE +DBMS_HS_CHK.CHECK_INST_CAPS +DBMS_HS_CHK.CHECK_INST_DD +DBMS_HS_CHK.CHECK_INST_INIT +DBMS_HS_CHK.CHECK_TRANSLATION_TEXT +DBMS_HS_CHK.CHECK_TRANSLATION_TYPE +DBMS_HS_PARALLEL. +DBMS_HS_PARALLEL.CREATE_OR_REPLACE_VIEW +DBMS_HS_PARALLEL.CREATE_TABLE_TEMPLATE +DBMS_HS_PARALLEL.DROP_VIEW +DBMS_HS_PARALLEL.LOAD_TABLE +DBMS_HS_PARALLEL_METADATA. +DBMS_HS_PARALLEL_METADATA.CHECK_CAP +DBMS_HS_PARALLEL_METADATA.DELETE_VIEWOBJ +DBMS_HS_PARALLEL_METADATA.GET_CPU_NUM +DBMS_HS_PARALLEL_METADATA.GET_DOMAIN_NAME +DBMS_HS_PARALLEL_METADATA.INSERT_VIEWOBJ +DBMS_HS_PARALLEL_METADATA.LOADHISINFO +DBMS_HS_PARALLEL_METADATA.LOADINDCOLINFO +DBMS_HS_PARALLEL_METADATA.LOADPATITIONINFO +DBMS_HS_PARALLEL_METADATA.LOAD_SAMPLEDATA +DBMS_HS_PARALLEL_METADATA.PURGEMETADATA +DBMS_HS_PARALLEL_METADATA.RAISE_SYSTEM_ERROR +DBMS_HS_PARALLEL_METADATA.SCHEDULE_SAMPLING +DBMS_HS_PARALLEL_METADATA.TABLE_SAMPLING +DBMS_HS_PARALLEL_METADATA.UPDATE_SAMPLEMETA +DBMS_HS_UTL. +DBMS_HS_UTL.CANONICALIZE +DBMS_HS_UTL.CANON_EXTOBJ +DBMS_HS_UTL.COPY_CLASS +DBMS_HS_UTL.COPY_INST +DBMS_HS_UTL.CREATE_BASE_CAPS +DBMS_HS_UTL.CREATE_BASE_DD +DBMS_HS_UTL.CREATE_CLASS_CAPS +DBMS_HS_UTL.CREATE_CLASS_DD +DBMS_HS_UTL.CREATE_CLASS_INIT +DBMS_HS_UTL.CREATE_FDS_CLASS +DBMS_HS_UTL.CREATE_FDS_INST +DBMS_HS_UTL.CREATE_INST_CAPS +DBMS_HS_UTL.CREATE_INST_DD +DBMS_HS_UTL.CREATE_INST_INIT +DBMS_HS_UTL.DROP_BASE_CAPS +DBMS_HS_UTL.DROP_BASE_DD +DBMS_HS_UTL.DROP_CLASS_CAPS +DBMS_HS_UTL.DROP_CLASS_DD +DBMS_HS_UTL.DROP_CLASS_INIT +DBMS_HS_UTL.DROP_FDS_CLASS +DBMS_HS_UTL.DROP_FDS_INST +DBMS_HS_UTL.DROP_INST_CAPS +DBMS_HS_UTL.DROP_INST_DD +DBMS_HS_UTL.DROP_INST_INIT +DBMS_HS_UTL.GET_TRANS_TYPE +DBMS_HS_UTL.RAISE_SYSTEM_ERROR +DBMS_HWM_PRIM_SHARDS. +DBMS_HWM_SHARDS. +DBMS_IJOB. +DBMS_IJOB.BIS +DBMS_IJOB.BIT +DBMS_IJOB.BROKEN +DBMS_IJOB.CDROLE +DBMS_IJOB.CHANGE_ENV +DBMS_IJOB.CHECK_DATAPUMP_AUTH +DBMS_IJOB.CHECK_PRIVS +DBMS_IJOB.CHECK_SCHEDULER_CONVERSION +DBMS_IJOB.CLUSER +DBMS_IJOB.DB_COMPATIBILITY +DBMS_IJOB.DROP_USER_JOBS +DBMS_IJOB.ENABLED +DBMS_IJOB.EXPORT_MYINST +DBMS_IJOB.FULL_EXPORT +DBMS_IJOB.GET_INSTANCE_MATCH_COUNT +DBMS_IJOB.GET_JOB_INSTANCE +DBMS_IJOB.INSTANCE +DBMS_IJOB.INST_CHECK +DBMS_IJOB.INTERVAL +DBMS_IJOB.IS_DV_ENABLED +DBMS_IJOB.NEXTVALS +DBMS_IJOB.NEXTVALSBY +DBMS_IJOB.NEXT_DATE +DBMS_IJOB.PUID +DBMS_IJOB.PUSER +DBMS_IJOB.REMOVE +DBMS_IJOB.RUN +DBMS_IJOB.SET_ENABLED +DBMS_IJOB.SET_JOB_AFFINITY +DBMS_IJOB.SET_JOB_FOR_ISUBMIT +DBMS_IJOB.SUBMIT +DBMS_IJOB.TOGGLE +DBMS_IJOB.UPDATE_METADATA +DBMS_IJOB.USER_EXPORT +DBMS_IJOB.WHAT +DBMS_ILM. +DBMS_ILM.ADD_TO_ILM +DBMS_ILM.ARCHIVESTATENAME +DBMS_ILM.EXECUTE_ILM +DBMS_ILM.EXECUTE_ILM_TASK +DBMS_ILM.FLUSH_ALL_SEGMENTS +DBMS_ILM.FLUSH_COL_STATS +DBMS_ILM.FLUSH_ROWMAPS +DBMS_ILM.FLUSH_SEGMENT_ACCESS +DBMS_ILM.FLUSH_SEGMENT_ROWMAP +DBMS_ILM.PREVIEW_ILM +DBMS_ILM.REMOVE_FROM_ILM +DBMS_ILM.STOP_ILM +DBMS_ILM_ADMIN. +DBMS_ILM_ADMIN.CLEAR_HEAT_MAP_ALL +DBMS_ILM_ADMIN.CLEAR_HEAT_MAP_TABLE +DBMS_ILM_ADMIN.CUSTOMIZE_ILM +DBMS_ILM_ADMIN.DISABLE_ILM +DBMS_ILM_ADMIN.ENABLE_ILM +DBMS_ILM_ADMIN.SET_HEAT_MAP_ALL +DBMS_ILM_ADMIN.SET_HEAT_MAP_START +DBMS_ILM_ADMIN.SET_HEAT_MAP_TABLE +DBMS_INDEX_UTL. +DBMS_INDEX_UTL.BUILD_INDEXES +DBMS_INDEX_UTL.BUILD_INDEX_COMPONENTS +DBMS_INDEX_UTL.BUILD_SCHEMA_INDEXES +DBMS_INDEX_UTL.BUILD_TABLE_COMPONENT_INDEXES +DBMS_INDEX_UTL.BUILD_TABLE_INDEXES +DBMS_INDEX_UTL.MULTI_LEVEL_BUILD +DBMS_INMEMORY. +DBMS_INMEMORY.IME_DROP_EXPRESSIONS +DBMS_INMEMORY.POPULATE +DBMS_INMEMORY.REPOPULATE +DBMS_INMEMORY.SEGMENT_DEALLOCATE_VERSIONS +DBMS_INMEMORY_ADMIN. +DBMS_INMEMORY_ADMIN.AIM_GET_PARAMETER +DBMS_INMEMORY_ADMIN.AIM_SET_PARAMETER +DBMS_INMEMORY_ADMIN.DEALLOCATE_VERSIONS +DBMS_INMEMORY_ADMIN.FASTSTART_CHECKPOINT +DBMS_INMEMORY_ADMIN.FASTSTART_DISABLE +DBMS_INMEMORY_ADMIN.FASTSTART_ENABLE +DBMS_INMEMORY_ADMIN.FASTSTART_MIGRATE_STORAGE +DBMS_INMEMORY_ADMIN.GET_FASTSTART_TABLESPACE +DBMS_INMEMORY_ADMIN.IME_CAPTURE_EXPRESSIONS +DBMS_INMEMORY_ADMIN.IME_CLOSE_CAPTURE_WINDOW +DBMS_INMEMORY_ADMIN.IME_DROP_ALL_EXPRESSIONS +DBMS_INMEMORY_ADMIN.IME_GET_CAPTURE_STATE +DBMS_INMEMORY_ADMIN.IME_OPEN_CAPTURE_WINDOW +DBMS_INMEMORY_ADMIN.IME_POPULATE_EXPRESSIONS +DBMS_INTERNAL_LOGSTDBY. +DBMS_INTERNAL_LOGSTDBY.ADD_PREFIX_ENQUOTE +DBMS_INTERNAL_LOGSTDBY.APPLY_GET +DBMS_INTERNAL_LOGSTDBY.APPLY_IS_OFF +DBMS_INTERNAL_LOGSTDBY.APPLY_SET +DBMS_INTERNAL_LOGSTDBY.APPLY_STOP_NOWAIT +DBMS_INTERNAL_LOGSTDBY.APPLY_UNSET +DBMS_INTERNAL_LOGSTDBY.AUDDEL +DBMS_INTERNAL_LOGSTDBY.AUDINS +DBMS_INTERNAL_LOGSTDBY.AUDUPD +DBMS_INTERNAL_LOGSTDBY.BUILD +DBMS_INTERNAL_LOGSTDBY.CANCEL_FUTURE +DBMS_INTERNAL_LOGSTDBY.CAPTURE_SCN +DBMS_INTERNAL_LOGSTDBY.CHECK_SKIP_LIKE +DBMS_INTERNAL_LOGSTDBY.CLEAR_LOGICAL_INSTANTIATION +DBMS_INTERNAL_LOGSTDBY.DATA_ONLY_PREREQ +DBMS_INTERNAL_LOGSTDBY.DISABLE_LOGICAL_REPLICATION +DBMS_INTERNAL_LOGSTDBY.DUMP_XDAT +DBMS_INTERNAL_LOGSTDBY.EDS_ADD_PREREQ +DBMS_INTERNAL_LOGSTDBY.EDS_ADD_TABLE_FINISH +DBMS_INTERNAL_LOGSTDBY.EDS_ADD_TABLE_INT +DBMS_INTERNAL_LOGSTDBY.EDS_CHECK_EVOLVE_STARTED +DBMS_INTERNAL_LOGSTDBY.EDS_CLEANUP_METADATA +DBMS_INTERNAL_LOGSTDBY.EDS_DROP_MVIEW +DBMS_INTERNAL_LOGSTDBY.EDS_DROP_TRIGGER +DBMS_INTERNAL_LOGSTDBY.EDS_EVAL_CHANGE_VECTOR +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_DISABLE +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_ENABLE +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_TABLE_CANCEL +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_TABLE_END +DBMS_INTERNAL_LOGSTDBY.EDS_EVOLVE_TABLE_START +DBMS_INTERNAL_LOGSTDBY.EDS_GEN_MV +DBMS_INTERNAL_LOGSTDBY.EDS_GEN_TRIGGERS +DBMS_INTERNAL_LOGSTDBY.EDS_GET_NAMES +DBMS_INTERNAL_LOGSTDBY.EDS_GET_TABLESPACE +DBMS_INTERNAL_LOGSTDBY.EDS_REMOVE_TABLE_FINISH +DBMS_INTERNAL_LOGSTDBY.EDS_REMOVE_TABLE_INT +DBMS_INTERNAL_LOGSTDBY.EDS_USER_CURSOR +DBMS_INTERNAL_LOGSTDBY.ENABLE_LOGICAL_REPLICATION +DBMS_INTERNAL_LOGSTDBY.END_STREAM +DBMS_INTERNAL_LOGSTDBY.END_STREAM_SHARED +DBMS_INTERNAL_LOGSTDBY.ENQUOTE_QUALIFIED_COL_NAME +DBMS_INTERNAL_LOGSTDBY.ESCAPE_ENQUOTE_LITERAL +DBMS_INTERNAL_LOGSTDBY.ESCAPE_QUOTES +DBMS_INTERNAL_LOGSTDBY.FGADEL +DBMS_INTERNAL_LOGSTDBY.FGAINS +DBMS_INTERNAL_LOGSTDBY.FGAUPD +DBMS_INTERNAL_LOGSTDBY.FLUSH_SRLS +DBMS_INTERNAL_LOGSTDBY.GET_DB_ROLE +DBMS_INTERNAL_LOGSTDBY.GET_EXPORT_DML_SCN +DBMS_INTERNAL_LOGSTDBY.GET_OBJ_NUM +DBMS_INTERNAL_LOGSTDBY.GET_SAFE_SCN +DBMS_INTERNAL_LOGSTDBY.GUARD_BYPASS_CHK +DBMS_INTERNAL_LOGSTDBY.GUARD_BYPASS_OFF +DBMS_INTERNAL_LOGSTDBY.GUARD_BYPASS_ON +DBMS_INTERNAL_LOGSTDBY.GUARD_CHECK +DBMS_INTERNAL_LOGSTDBY.HIST_READ_RECORD +DBMS_INTERNAL_LOGSTDBY.HIST_SYNCH +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_CANCEL +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_CURRENT +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_FUTURE +DBMS_INTERNAL_LOGSTDBY.HIST_WRITE_RECORD_PREVIOUS +DBMS_INTERNAL_LOGSTDBY.HSTDEL +DBMS_INTERNAL_LOGSTDBY.HSTINS +DBMS_INTERNAL_LOGSTDBY.HSTUPD +DBMS_INTERNAL_LOGSTDBY.INSTANTIATE_TAB_LOG +DBMS_INTERNAL_LOGSTDBY.INSTANTIATE_TAB_PREREQ +DBMS_INTERNAL_LOGSTDBY.IS_EDS_MAINTAINED +DBMS_INTERNAL_LOGSTDBY.IS_EDS_SUPPORTABLE +DBMS_INTERNAL_LOGSTDBY.IS_LSBY_SUPPORTABLE +DBMS_INTERNAL_LOGSTDBY.IS_PDB_ROOT +DBMS_INTERNAL_LOGSTDBY.IS_SUPP_AND_NOTSKIP +DBMS_INTERNAL_LOGSTDBY.JOBDEL +DBMS_INTERNAL_LOGSTDBY.JOBINS +DBMS_INTERNAL_LOGSTDBY.JOBUPD +DBMS_INTERNAL_LOGSTDBY.LOCK_LSBY_CON +DBMS_INTERNAL_LOGSTDBY.LOCK_LSBY_META +DBMS_INTERNAL_LOGSTDBY.LSBY_LOCK_TABLE +DBMS_INTERNAL_LOGSTDBY.LSBY_UNLOCK_TABLE +DBMS_INTERNAL_LOGSTDBY.MATCHED_PRIMARY +DBMS_INTERNAL_LOGSTDBY.NEED_SCN +DBMS_INTERNAL_LOGSTDBY.PARDEL +DBMS_INTERNAL_LOGSTDBY.PARINS +DBMS_INTERNAL_LOGSTDBY.PARUPD +DBMS_INTERNAL_LOGSTDBY.PREPARE_FOR_NEW_PRIMARY +DBMS_INTERNAL_LOGSTDBY.PRIMARY_DBID +DBMS_INTERNAL_LOGSTDBY.PRINTLOB +DBMS_INTERNAL_LOGSTDBY.PURGE_LOGS +DBMS_INTERNAL_LOGSTDBY.REBUILD +DBMS_INTERNAL_LOGSTDBY.REPAIR_LSBY +DBMS_INTERNAL_LOGSTDBY.REPLACE_DICTIONARY +DBMS_INTERNAL_LOGSTDBY.REPORT_ERROR +DBMS_INTERNAL_LOGSTDBY.RETRIEVE_STATEMENT +DBMS_INTERNAL_LOGSTDBY.SEQUENCE_UPDATE +DBMS_INTERNAL_LOGSTDBY.SEQUPD +DBMS_INTERNAL_LOGSTDBY.SET_EXPORT_SCN +DBMS_INTERNAL_LOGSTDBY.SET_LOGICAL_INSTANTIATION +DBMS_INTERNAL_LOGSTDBY.SET_TABLESPACE +DBMS_INTERNAL_LOGSTDBY.SET_TABLE_SCN +DBMS_INTERNAL_LOGSTDBY.SKIP_SUPPORT +DBMS_INTERNAL_LOGSTDBY.SKIP_TRANSACTION +DBMS_INTERNAL_LOGSTDBY.UNLOCK_LSBY_CON +DBMS_INTERNAL_LOGSTDBY.UNLOCK_LSBY_META +DBMS_INTERNAL_LOGSTDBY.UNSKIP_TRANSACTION +DBMS_INTERNAL_LOGSTDBY.UPCASE_NAME +DBMS_INTERNAL_LOGSTDBY.UPDATE_DYNAMIC_LSBY_OPTION +DBMS_INTERNAL_LOGSTDBY.VALIDATE_SET +DBMS_INTERNAL_LOGSTDBY.VALIDATE_SKIP_ACTION +DBMS_INTERNAL_LOGSTDBY.VALIDATE_SKIP_AUTHID +DBMS_INTERNAL_LOGSTDBY.VERIFY_NOSESSION +DBMS_INTERNAL_LOGSTDBY.VERIFY_SESSION +DBMS_INTERNAL_LOGSTDBY.VERIFY_SESSION_LOGAUTODELETE +DBMS_INTERNAL_LOGSTDBY.WAIT_FOR_SAFE_SCN +DBMS_INTERNAL_ROLLING. +DBMS_INTERNAL_ROLLING.DESTROY_META +DBMS_INTERNAL_ROLLING.INSERT_DGLRDDIR +DBMS_INTERNAL_ROLLING.INSERT_DGLRDEVT +DBMS_INTERNAL_ROLLING.SET_UPGRADE_FLAGS +DBMS_INTERNAL_ROLLING.UPDATE_DGLRDINS_PROGRESS +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDCON +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDDAT +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDINS +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDPAR +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDSTA +DBMS_INTERNAL_ROLLING.UPSERT_DGLRDSTS +DBMS_INTERNAL_SAFE_SCN. +DBMS_INTERNAL_SAFE_SCN.GET_EXPORT_DML_SCN +DBMS_INTERNAL_SAFE_SCN.MATCHED_PRIMARY +DBMS_INTERNAL_SAFE_SCN.NEED_SCN +DBMS_INTERNAL_SAFE_SCN.SET_EXPORT_SCN +DBMS_INTERNAL_SAFE_SCN.SET_SESSION_STATE +DBMS_INTERNAL_SAFE_SCN.WAIT_FOR_SAFE_SCN +DBMS_INTERNAL_TRIGGER. +DBMS_INTERNAL_TRIGGER.DESTROY +DBMS_INTERNAL_TRIGGER.GET_UGAKNT +DBMS_INTERNAL_TRIGGER.INVALIDATE_LIBRARY_CACHE +DBMS_INTERNAL_TRIGGER.IS_NESTED_TABLE +DBMS_INTERNAL_TRIGGER.MAKE +DBMS_INTERNAL_TRIGGER.SET_UGAKNT +DBMS_IR. +DBMS_IR.ADDLINE +DBMS_IR.ADVISECANCEL +DBMS_IR.ADVISEDONE +DBMS_IR.CHANGEPRIORITY +DBMS_IR.CLOSEFAILURES +DBMS_IR.CLOSESCRIPTFILE +DBMS_IR.COMPLETEREPAIROPTION +DBMS_IR.CONSOLIDATEREPAIR +DBMS_IR.CONTROLFILECHECK +DBMS_IR.CREATESCRIPTFILE +DBMS_IR.CREATEWORKINGREPAIRSET +DBMS_IR.EXECSQLSCRIPT +DBMS_IR.GETADVISEID +DBMS_IR.GETERROR +DBMS_IR.GETFEASIBILITYANDIMPACT +DBMS_IR.GETFILE +DBMS_IR.GETLINE +DBMS_IR.OPENSCRIPTFILE +DBMS_IR.REEVALUATEOPENFAILURES +DBMS_IR.STARTREPAIROPTION +DBMS_IR.UPDATEFEASIBILITYANDIMPACT +DBMS_IR.UPDATEREPAIROPTION +DBMS_IR.WRITEFILE +DBMS_IREFRESH. +DBMS_IREFRESH.ADD +DBMS_IREFRESH.CHANGE +DBMS_IREFRESH.CHECK_TAB +DBMS_IREFRESH.DESTROY +DBMS_IREFRESH.DROP_USER_GROUPS +DBMS_IREFRESH.DUMP_REFRESH_INFO +DBMS_IREFRESH.ENQUOTE_LITERAL +DBMS_IREFRESH.FULL_EXPORT +DBMS_IREFRESH.FULL_EXPORT_CHILD +DBMS_IREFRESH.GET_BASENAME +DBMS_IREFRESH.GET_NAME +DBMS_IREFRESH.LOCK_GROUP +DBMS_IREFRESH.MAKE +DBMS_IREFRESH.MAKE_REPAPI +DBMS_IREFRESH.REFGROUP +DBMS_IREFRESH.REFRESH +DBMS_IREFRESH.SUBMIT_JOB +DBMS_IREFRESH.SUBTRACT +DBMS_IREFRESH.USER_EXPORT +DBMS_IREFRESH.USER_EXPORT_CHILD +DBMS_IREFSTATS. +DBMS_IREFSTATS.DUMP_TRACE +DBMS_IREFSTATS.PURGE_ALL_STATS +DBMS_IREFSTATS.PURGE_STATS +DBMS_IREFSTATS.PURGE_STATS_MV_RP +DBMS_IREFSTATS.RUN_SA +DBMS_IREFSTATS.WRITE_TRACE +DBMS_ISCHED. +DBMS_ISCHED.ADD_AGENT_CERT +DBMS_ISCHED.ADD_EVENT_QUEUE_SUBSCRIBER +DBMS_ISCHED.ADD_GROUP_MEMBER +DBMS_ISCHED.ADD_JOB_EMAIL_NOTIFICATION +DBMS_ISCHED.ADD_OUTPUT_BLOB +DBMS_ISCHED.ADD_WINDOW_GROUP_MEMBER +DBMS_ISCHED.AGENT_INSTALL_POST_STEPS +DBMS_ISCHED.AGENT_INSTALL_PRE_STEPS +DBMS_ISCHED.ALTER_CHAIN +DBMS_ISCHED.ALTER_CHAIN_STEP +DBMS_ISCHED.ALTER_RUNNING_CHAIN +DBMS_ISCHED.AUDIT_SYS_PRIV +DBMS_ISCHED.BASE64ENCODENONEWLINES +DBMS_ISCHED.BATCH_JOB_OPS +DBMS_ISCHED.CHAIN_END +DBMS_ISCHED.CHAIN_EVAL +DBMS_ISCHED.CHAIN_EVAL_UPDATE_STEP_STATE +DBMS_ISCHED.CHAIN_KILL +DBMS_ISCHED.CHAIN_LOG +DBMS_ISCHED.CHAIN_PARSE_STRING +DBMS_ISCHED.CHAIN_START +DBMS_ISCHED.CHAIN_STOP +DBMS_ISCHED.CHECK_AGENT_ACTION_STATUS +DBMS_ISCHED.CHECK_AQ_CBK_PRIVS +DBMS_ISCHED.CHECK_COMPAT +DBMS_ISCHED.CHECK_CREDENTIAL +DBMS_ISCHED.CHECK_LOCAL_CREDENTIAL +DBMS_ISCHED.CHECK_REQUEST_PRIVS +DBMS_ISCHED.CLOSE_WINDOW +DBMS_ISCHED.COMPLETE_JOB_RUN +DBMS_ISCHED.CONVERT_DBMS_JOB +DBMS_ISCHED.COPY_JOB +DBMS_ISCHED.CREATE_AGENT_DESTINATION +DBMS_ISCHED.CREATE_CHAIN +DBMS_ISCHED.CREATE_CHAIN_STEP +DBMS_ISCHED.CREATE_CREDENTIAL +DBMS_ISCHED.CREATE_DATABASE_DESTINATION +DBMS_ISCHED.CREATE_FILE_WATCHER +DBMS_ISCHED.CREATE_GROUP +DBMS_ISCHED.CREATE_JOB +DBMS_ISCHED.CREATE_JOBS +DBMS_ISCHED.CREATE_JOB_CLASS +DBMS_ISCHED.CREATE_LOG_DIR +DBMS_ISCHED.CREATE_PROGRAM +DBMS_ISCHED.CREATE_RESOURCE +DBMS_ISCHED.CREATE_SCHEDULE +DBMS_ISCHED.CREATE_WINDOW +DBMS_ISCHED.CREATE_WINDOW_GROUP +DBMS_ISCHED.DEFINE_CHAIN_RULE +DBMS_ISCHED.DEFINE_CHAIN_STEP +DBMS_ISCHED.DEFINE_METADATA_ARGUMENT +DBMS_ISCHED.DEFINE_PROGRAM_ARGUMENT +DBMS_ISCHED.DELETE_FILE +DBMS_ISCHED.DISABLE +DBMS_ISCHED.DISABLE1_CALENDAR_CHECK +DBMS_ISCHED.DROP_AGENT_DESTINATION +DBMS_ISCHED.DROP_CHAIN +DBMS_ISCHED.DROP_CHAIN_RULE +DBMS_ISCHED.DROP_CHAIN_STEP +DBMS_ISCHED.DROP_CREDENTIAL +DBMS_ISCHED.DROP_DATABASE_DESTINATION +DBMS_ISCHED.DROP_FILE_WATCHER +DBMS_ISCHED.DROP_GROUP +DBMS_ISCHED.DROP_JOB +DBMS_ISCHED.DROP_JOB_CLASS +DBMS_ISCHED.DROP_PROGRAM +DBMS_ISCHED.DROP_PROGRAM_ARGUMENT +DBMS_ISCHED.DROP_RESOURCE +DBMS_ISCHED.DROP_SCHEDULE +DBMS_ISCHED.DROP_SCHEDULER_ATTRIBUTE +DBMS_ISCHED.DROP_SCHEDULER_ATT_INT +DBMS_ISCHED.DROP_WINDOW +DBMS_ISCHED.DROP_WINDOW_GROUP +DBMS_ISCHED.ENABLE +DBMS_ISCHED.ENQ_END_CHAIN_JOB +DBMS_ISCHED.EVALUATE_RULESET +DBMS_ISCHED.EVALUATE_RUNNING_CHAIN +DBMS_ISCHED.EVENT_COND_FILTER +DBMS_ISCHED.EXEC_JOB_RUN_LSA +DBMS_ISCHED.EXPAND_FILENAME +DBMS_ISCHED.FILE_TRANSFER +DBMS_ISCHED.FILE_WATCH_FILTER +DBMS_ISCHED.GENERATE_OBJECT_NAME +DBMS_ISCHED.GEN_AGENT_PASS_SALT +DBMS_ISCHED.GET_AGENT_INFO +DBMS_ISCHED.GET_AGENT_PASS_VERIFIER +DBMS_ISCHED.GET_AGENT_REGISTRATION_INFO +DBMS_ISCHED.GET_AGENT_VERSION +DBMS_ISCHED.GET_AGENT_WALLET_LOCATION +DBMS_ISCHED.GET_BOOL_ATTRIBUTE +DBMS_ISCHED.GET_CHAIN_EVAL_LOCK +DBMS_ISCHED.GET_CHAIN_RULESET +DBMS_ISCHED.GET_CHAR_ATTRIBUTE +DBMS_ISCHED.GET_DATE_ATTRIBUTE +DBMS_ISCHED.GET_FILE +DBMS_ISCHED.GET_GLOBAL_DB_NAME +DBMS_ISCHED.GET_INTERVAL_ATTRIBUTE +DBMS_ISCHED.GET_INT_ATTRIBUTE +DBMS_ISCHED.GET_LAST_RUN_TIME +DBMS_ISCHED.GET_NOTIFICATIONS +DBMS_ISCHED.GET_RULE_LINKS +DBMS_ISCHED.GET_SCHEDULER_ATTRIBUTE +DBMS_ISCHED.GET_STEP_STATE +DBMS_ISCHED.GET_STEP_STATE_CF +DBMS_ISCHED.GET_SYS_TIME_ZONE_NAME +DBMS_ISCHED.GET_TNS_NVPAIR +DBMS_ISCHED.IS_SCHEDULER_CREATED_AGENT +DBMS_ISCHED.LOG_DBMS_OUTPUT +DBMS_ISCHED.LOG_LOCAL_EXTERNAL_OUTPUT +DBMS_ISCHED.NEW_LOG_ID +DBMS_ISCHED.NORMALIZE_HOST_NAME +DBMS_ISCHED.NTFY_SVC_METRICS_UPDT +DBMS_ISCHED.OBFUSCATE_CREDENTIAL_PASSWORD +DBMS_ISCHED.OPEN_WINDOW +DBMS_ISCHED.PARSE_EMAIL_ADDRESSES +DBMS_ISCHED.PRE_ALTER_CHAIN +DBMS_ISCHED.PRE_CREATE_CHAIN +DBMS_ISCHED.PRE_DROP_CHAIN +DBMS_ISCHED.PURGE_LOG +DBMS_ISCHED.PUT_FILE +DBMS_ISCHED.RAISE_ORACLE_ERROR +DBMS_ISCHED.RAISE_SCHLIM_EVT +DBMS_ISCHED.RECORD_RESEND_REQUEST +DBMS_ISCHED.REGISTER_CALLBACK +DBMS_ISCHED.REMOTE_KILL +DBMS_ISCHED.REMOVE_EVENT_QUEUE_SUBSCRIBER +DBMS_ISCHED.REMOVE_GROUP_MEMBER +DBMS_ISCHED.REMOVE_JOB_EMAIL_NOTIFICATION +DBMS_ISCHED.REMOVE_WINDOW_GROUP_MEMBER +DBMS_ISCHED.RESET_JOBSUFFIX_SEQ +DBMS_ISCHED.RESET_JOB_ARGUMENT_VALUE +DBMS_ISCHED.RESOLVE3_NAME +DBMS_ISCHED.RESOLVE_IF_NAMED_DEST +DBMS_ISCHED.RESOLVE_NAME +DBMS_ISCHED.RETRIEVE_JOB_OUTPUT +DBMS_ISCHED.RUN_CHAIN +DBMS_ISCHED.RUN_JOB +DBMS_ISCHED.SEND_EVENT_EMAIL +DBMS_ISCHED.SET_AGENT_REGISTRATION_INFO +DBMS_ISCHED.SET_AGENT_REGISTRATION_PASS +DBMS_ISCHED.SET_BOOL_ATTRIBUTE +DBMS_ISCHED.SET_CHAR_ATTRIBUTE +DBMS_ISCHED.SET_DATE_ATTRIBUTE +DBMS_ISCHED.SET_EVTMSG_ARG +DBMS_ISCHED.SET_INTERVAL_ATTRIBUTE +DBMS_ISCHED.SET_INT_ATTRIBUTE +DBMS_ISCHED.SET_JOB_ARGUMENT_VALUE +DBMS_ISCHED.SET_JOB_ATTRIBUTES +DBMS_ISCHED.SET_LAST_RUN_TIME +DBMS_ISCHED.SET_LIST_ATTRIBUTE +DBMS_ISCHED.SET_RESOURCE_CONSTRAINT +DBMS_ISCHED.SET_SCHEDULER_ATTRIBUTE +DBMS_ISCHED.SET_SECURITY_HEADERS +DBMS_ISCHED.SHOW_ERRORS +DBMS_ISCHED.STIME +DBMS_ISCHED.STOP_JOB +DBMS_ISCHED.SUBMIT_REMOTE_EXTERNAL_JOB +DBMS_ISCHED.SUBMIT_REMOTE_FILE_WATCH +DBMS_ISCHED.TRACE_EMAIL +DBMS_ISCHED.TRANSLATE_JSSU_ERROR_CODE +DBMS_ISCHED.VALIDATE_DEST +DBMS_ISCHED.VALIDATE_EMAIL_ADDRESSES +DBMS_ISCHED.WRITE_FILE_WATCH_TRACE +DBMS_ISCHEDFW. +DBMS_ISCHEDFW.FILE_WATCH_JOB +DBMS_ISCHEDFW.WATCH_FOR_FILES +DBMS_ISCHED_AGENT. +DBMS_ISCHED_AGENT.AGENT_INSTALL_POST_STEPS +DBMS_ISCHED_AGENT.AGENT_INSTALL_PRE_STEPS +DBMS_ISCHED_AGENT.GET_AGENT_REGISTRATION_INFO +DBMS_ISCHED_AGENT.SET_AGENT_REGISTRATION_INFO +DBMS_ISCHED_CHAIN_CONDITION. +DBMS_ISCHED_CHAIN_CONDITION.DELETE_STEP_NAME_TABLE +DBMS_ISCHED_CHAIN_CONDITION.STEP_TABLE_POPULATED +DBMS_ISCHED_CHAIN_CONDITION.TRANSFORM_CHAIN_CONDITION +DBMS_ISCHED_REMDB_JOB. +DBMS_ISCHED_REMDB_JOB.IS_TRACING_ON +DBMS_ISCHED_REMDB_JOB.TRACE_ENTRY +DBMS_ISCHED_REMDB_JOB.TRACE_EXIT +DBMS_ISCHED_REMDB_JOB.WRITE_TRACE +DBMS_ISCHED_REMOTE_ACCESS. +DBMS_ISCHED_REMOTE_ACCESS.ADD_AGENT_CERTIFICATE +DBMS_ISCHED_REMOTE_ACCESS.AGENT_REGISTRATION_LOCKED +DBMS_ISCHED_REMOTE_ACCESS.ATTEMPT_LIMIT_REACHED +DBMS_ISCHED_REMOTE_ACCESS.FILEWATCH_REQUEST_RESEND +DBMS_ISCHED_REMOTE_ACCESS.GETREGPWDKEYSPEC +DBMS_ISCHED_REMOTE_ACCESS.SUBMIT_FILEWATCH_RESULTS +DBMS_ISCHED_REMOTE_ACCESS.SUBMIT_JOB_RESULTS +DBMS_ISCHED_REMOTE_ACCESS.SUBMIT_JOB_RESULTS2 +DBMS_ISCHED_REMOTE_ACCESS.UNREGISTER_AGENT +DBMS_ISCHED_UTL. +DBMS_ISCHED_UTL.CHECK_OBJECT_PRIVS +DBMS_ISNAPSHOT. +DBMS_ISNAPSHOT.CHANGE_GROUP +DBMS_ISNAPSHOT.CHECK_USRPRIV +DBMS_ISNAPSHOT.DROP_GROUP +DBMS_ISNAPSHOT.DROP_USER_SNAPSHOTS +DBMS_ISNAPSHOT.FIND_DBLINKS +DBMS_ISNAPSHOT.GET_SCHEDULER_INFORMATION +DBMS_ISNAPSHOT.PURGE_LDR_LOG +DBMS_ISNAPSHOT.PURGE_LOG_XID +DBMS_ISYNCREF. +DBMS_ISYNCREF.CREATE_INDEX +DBMS_ISYNCREF.CREATE_TABLE +DBMS_ISYNCREF.LOCKING_PRIMITIVE +DBMS_ITRIGGER_UTL. +DBMS_ITRIGGER_UTL.IMPORT_SCDC_TRIGGER_STRING +DBMS_ITRIGGER_UTL.SYNC_UP_SCDC +DBMS_I_INDEX_UTL. +DBMS_I_INDEX_UTL.COLLECT_PARAMETERS +DBMS_I_INDEX_UTL.COMPUTE_ORDER +DBMS_I_INDEX_UTL.DROP_IDX_JOB +DBMS_I_INDEX_UTL.FIX_QUOTES +DBMS_I_INDEX_UTL.GET_DOM_IDX_PARAM_STR +DBMS_I_INDEX_UTL.GET_REBUILD_COMMAND +DBMS_I_INDEX_UTL.IS_DOMAIN_INDEX +DBMS_I_INDEX_UTL.I_BUILD_INDEXES +DBMS_I_INDEX_UTL.PACK_PARAMETERS +DBMS_I_INDEX_UTL.REBUILD_INDEX +DBMS_I_INDEX_UTL.REBUILD_INDEX_LIST +DBMS_I_INDEX_UTL.REMOVE_PARAMETER_PIPES +DBMS_I_INDEX_UTL.SUBMIT_IDX_REBUILD_JOB +DBMS_I_INDEX_UTL.UNPACK_PARAMETERS +DBMS_I_INDEX_UTL.VERIFY_IDX_COMP +DBMS_I_INDEX_UTL.VERIFY_INDEX +DBMS_I_INDEX_UTL.VERIFY_OWNER +DBMS_I_INDEX_UTL.VERIFY_TABLE +DBMS_I_INDEX_UTL.VERIFY_TAB_COMP +DBMS_JAVA. +DBMS_JAVA.COMPILE_CLASS +DBMS_JAVA.COMPILE_METHOD +DBMS_JAVA.DBMS_FEATURE_OJVM +DBMS_JAVA.DBMS_FEATURE_SYSTEM_OJVM +DBMS_JAVA.DECODE_NATIVE_COMPILER_OPTION +DBMS_JAVA.DELETE_PERMISSION +DBMS_JAVA.DERIVEDFROM +DBMS_JAVA.DISABLE_OUTPUT_TO_FILE +DBMS_JAVA.DISABLE_OUTPUT_TO_JAVA +DBMS_JAVA.DISABLE_OUTPUT_TO_SQL +DBMS_JAVA.DISABLE_OUTPUT_TO_TRC +DBMS_JAVA.DISABLE_PERMISSION +DBMS_JAVA.DROPJAVA +DBMS_JAVA.DUMP_NATIVE_MACHINE_CODE +DBMS_JAVA.ENABLE_OUTPUT_TO_FILE +DBMS_JAVA.ENABLE_OUTPUT_TO_JAVA +DBMS_JAVA.ENABLE_OUTPUT_TO_SQL +DBMS_JAVA.ENABLE_OUTPUT_TO_TRC +DBMS_JAVA.ENABLE_PERMISSION +DBMS_JAVA.ENDSESSION +DBMS_JAVA.ENDSESSION_AND_RELATED_STATE +DBMS_JAVA.END_EXPORT +DBMS_JAVA.END_IMPORT +DBMS_JAVA.EXPORT_CLASS +DBMS_JAVA.EXPORT_RAW_CHUNK +DBMS_JAVA.EXPORT_RESOURCE +DBMS_JAVA.EXPORT_SOURCE +DBMS_JAVA.EXPORT_TEXT_CHUNK +DBMS_JAVA.FINALIZE_OUTPUT_TO_FILE +DBMS_JAVA.FIXED_IN_INSTANCE +DBMS_JAVA.FULL_NCOMP_ENABLED +DBMS_JAVA.GETVERSION +DBMS_JAVA.GET_COMPILER_OPTION +DBMS_JAVA.GET_JDK_VERSION +DBMS_JAVA.GET_OJVM_PROPERTY +DBMS_JAVA.GET_PROPERTY +DBMS_JAVA.GET_REPLY +DBMS_JAVA.GRANT_PERMISSION +DBMS_JAVA.GRANT_POLICY_PERMISSION +DBMS_JAVA.IMPORT_RAW_CHUNK +DBMS_JAVA.IMPORT_TEXT_CHUNK +DBMS_JAVA.INITIALIZE_OUTPUT_TO_FILE +DBMS_JAVA.INIT_BTL +DBMS_JAVA.LOADJAVA +DBMS_JAVA.LONGNAME +DBMS_JAVA.NATIVE_COMPILER_OPTIONS +DBMS_JAVA.NCOMP_STATUS_MSG +DBMS_JAVA.OPTION_CONTROLLER +DBMS_JAVA.QUERY_OUTPUT_TO_FILE +DBMS_JAVA.QUERY_OUTPUT_TO_JAVA +DBMS_JAVA.QUERY_OUTPUT_TO_SQL +DBMS_JAVA.QUERY_OUTPUT_TO_TRC +DBMS_JAVA.REMOVE_OUTPUT_TO_FILE +DBMS_JAVA.REMOVE_OUTPUT_TO_JAVA +DBMS_JAVA.REMOVE_OUTPUT_TO_SQL +DBMS_JAVA.REMOVE_PROPERTY +DBMS_JAVA.RESET_COMPILER_OPTION +DBMS_JAVA.RESET_PROPERTY_DEFS_TABLE_FLAG +DBMS_JAVA.RESOLVER +DBMS_JAVA.RESTRICT_PERMISSION +DBMS_JAVA.REVOKE_PERMISSION +DBMS_JAVA.RUNJAVA +DBMS_JAVA.RUNJAVA_IN_CURRENT_SESSION +DBMS_JAVA.SEND_COMMAND +DBMS_JAVA.SET_COMPILER_OPTION +DBMS_JAVA.SET_EXECUTE_PRIVILEGE +DBMS_JAVA.SET_FIXED_IN_INSTANCE +DBMS_JAVA.SET_NATIVE_COMPILER_OPTION +DBMS_JAVA.SET_OUTPUT +DBMS_JAVA.SET_OUTPUT_TO_FILE +DBMS_JAVA.SET_OUTPUT_TO_JAVA +DBMS_JAVA.SET_OUTPUT_TO_SQL +DBMS_JAVA.SET_PERMISSION_DEBUG +DBMS_JAVA.SET_PREFERENCE +DBMS_JAVA.SET_PROPERTY +DBMS_JAVA.SET_RUNTIME_EXEC_CREDENTIALS +DBMS_JAVA.SET_SYSTEM_CLASS_LOADING +DBMS_JAVA.SET_VERIFIER +DBMS_JAVA.SHAREDPRIVATECLASSNAME +DBMS_JAVA.SHORTNAME +DBMS_JAVA.SHOW_PROPERTY +DBMS_JAVA.START_BTL +DBMS_JAVA.START_EXPORT +DBMS_JAVA.START_IMPORT +DBMS_JAVA.START_JMX_AGENT +DBMS_JAVA.STOP_BTL +DBMS_JAVA.TERMINATE_BTL +DBMS_JAVA.UNCOMPILE_CLASS +DBMS_JAVA.UNCOMPILE_METHOD +DBMS_JAVA.UNSET_NATIVE_COMPILER_OPTION +DBMS_JAVASCRIPT. +DBMS_JAVASCRIPT.RUN +DBMS_JAVA_DEFINERS. +DBMS_JAVA_DEFINERS.COMPILE_CLASS_ +DBMS_JAVA_DEFINERS.COMPILE_METHOD_ +DBMS_JAVA_DEFINERS.DECODE_NATIVE_COMPILER_OPTION_ +DBMS_JAVA_DEFINERS.GET_NTH_NATIVE_COMPILER_OPTION +DBMS_JAVA_DEFINERS.SET_NATIVE_COMPILER_OPTION_ +DBMS_JAVA_DEFINERS.UNCOMPILE_CLASS_ +DBMS_JAVA_DEFINERS.UNCOMPILE_METHOD_ +DBMS_JAVA_DEFINERS.UNSET_NATIVE_COMPILER_OPTION_ +DBMS_JAVA_DUMP. +DBMS_JAVA_DUMP.DUMP +DBMS_JAVA_MISC. +DBMS_JAVA_MISC.RUNJAVA +DBMS_JAVA_MISC.RUNJAVA_IN_CURRENT_SESSION +DBMS_JAVA_TEST. +DBMS_JAVA_TEST.FUNCALL +DBMS_JMS_PLSQL. +DBMS_JMS_PLSQL.BYTES_CLEAN +DBMS_JMS_PLSQL.BYTES_CLEAN_ALL +DBMS_JMS_PLSQL.BYTES_CLEAR_BODY +DBMS_JMS_PLSQL.BYTES_FLUSH +DBMS_JMS_PLSQL.BYTES_GET_MODE +DBMS_JMS_PLSQL.BYTES_PREPARE +DBMS_JMS_PLSQL.BYTES_READ_BYTES +DBMS_JMS_PLSQL.BYTES_READ_CHAR +DBMS_JMS_PLSQL.BYTES_READ_NUMBER +DBMS_JMS_PLSQL.BYTES_READ_UTF +DBMS_JMS_PLSQL.BYTES_RESET +DBMS_JMS_PLSQL.BYTES_WRITE_BYTES +DBMS_JMS_PLSQL.BYTES_WRITE_CHAR +DBMS_JMS_PLSQL.BYTES_WRITE_NUMBER +DBMS_JMS_PLSQL.BYTES_WRITE_UTF +DBMS_JMS_PLSQL.CONVERT_JMS_SELECTOR +DBMS_JMS_PLSQL.GET_EXCEPTION +DBMS_JMS_PLSQL.JAVA_CONVERT_JMS_SELECTOR +DBMS_JMS_PLSQL.MAP_CLEAN +DBMS_JMS_PLSQL.MAP_CLEAN_ALL +DBMS_JMS_PLSQL.MAP_CLEAR_BODY +DBMS_JMS_PLSQL.MAP_FLUSH +DBMS_JMS_PLSQL.MAP_GET_BYTES +DBMS_JMS_PLSQL.MAP_GET_CHAR +DBMS_JMS_PLSQL.MAP_GET_NAMES +DBMS_JMS_PLSQL.MAP_GET_NUMBER +DBMS_JMS_PLSQL.MAP_GET_OBJECT +DBMS_JMS_PLSQL.MAP_GET_SIZE +DBMS_JMS_PLSQL.MAP_GET_STRING +DBMS_JMS_PLSQL.MAP_ITEM_EXISTS +DBMS_JMS_PLSQL.MAP_PREPARE +DBMS_JMS_PLSQL.MAP_SET_BYTES +DBMS_JMS_PLSQL.MAP_SET_CHAR +DBMS_JMS_PLSQL.MAP_SET_NUMBER +DBMS_JMS_PLSQL.MAP_SET_STRING +DBMS_JMS_PLSQL.STREAM_CLEAN +DBMS_JMS_PLSQL.STREAM_CLEAN_ALL +DBMS_JMS_PLSQL.STREAM_CLEAR_BODY +DBMS_JMS_PLSQL.STREAM_FLUSH +DBMS_JMS_PLSQL.STREAM_GET_MODE +DBMS_JMS_PLSQL.STREAM_PREPARE +DBMS_JMS_PLSQL.STREAM_READ_BYTES +DBMS_JMS_PLSQL.STREAM_READ_CHAR +DBMS_JMS_PLSQL.STREAM_READ_NUMBER +DBMS_JMS_PLSQL.STREAM_READ_OBJECT +DBMS_JMS_PLSQL.STREAM_READ_STRING +DBMS_JMS_PLSQL.STREAM_RESET +DBMS_JMS_PLSQL.STREAM_WRITE_BYTES +DBMS_JMS_PLSQL.STREAM_WRITE_CHAR +DBMS_JMS_PLSQL.STREAM_WRITE_NUMBER +DBMS_JMS_PLSQL.STREAM_WRITE_STRING +DBMS_JOB. +DBMS_JOB.BACKGROUND_PROCESS +DBMS_JOB.BROKEN +DBMS_JOB.CHANGE +DBMS_JOB.INSTANCE +DBMS_JOB.INTERVAL +DBMS_JOB.ISUBMIT +DBMS_JOB.IS_JOBQ +DBMS_JOB.NEXT_DATE +DBMS_JOB.REMOVE +DBMS_JOB.RUN +DBMS_JOB.SUBMIT +DBMS_JOB.USER_EXPORT +DBMS_JOB.WHAT +DBMS_JSON. +DBMS_JSON.ADD_VIRTUAL_COLUMNS +DBMS_JSON.CREATE_VIEW +DBMS_JSON.CREATE_VIEW_ON_PATH +DBMS_JSON.DROP_VIRTUAL_COLUMNS +DBMS_JSON.FORMAT_FLAT +DBMS_JSON.FORMAT_HIERARCHICAL +DBMS_JSON.GET_INDEX_DATAGUIDE +DBMS_JSON.PREPALLJCOLINM +DBMS_JSON.PREPJCOLINM +DBMS_JSON.PREPTABJCOLINM +DBMS_JSON.PRETTY +DBMS_JSON.RENAME_COLUMN +DBMS_JSON0. +DBMS_JSON0.CHECKCOMPAT +DBMS_JSON0.CHECKVCNAME +DBMS_JSON0.GETINDEXINFO +DBMS_JSON0.GETJSONFORMAT +DBMS_JSON0.RAISEERROR +DBMS_JSON0.RAISEERRORMESG +DBMS_JSON_INT. +DBMS_JSON_INT.ADDVC +DBMS_JSON_INT.CREATEVIEWONPATH +DBMS_JSON_INT.DROPVC +DBMS_JSON_INT.GENDATAGUIDE +DBMS_JSON_INT.GETDATAGUIDE +DBMS_JSON_INT.PJCOLINM +DBMS_JSON_INT.RENAME +DBMS_JVM_EXP_PERMS. +DBMS_JVM_EXP_PERMS.AUDIT_EXP +DBMS_JVM_EXP_PERMS.AUDIT_SYSPRIVS_EXP +DBMS_JVM_EXP_PERMS.CREATE_EXP +DBMS_JVM_EXP_PERMS.DROP_EXP +DBMS_JVM_EXP_PERMS.EXPORT_PERMS +DBMS_JVM_EXP_PERMS.GRANT_EXP +DBMS_JVM_EXP_PERMS.GRANT_SYSPRIVS_EXP +DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS +DBMS_LCR. +DBMS_LDAP. +DBMS_LDAP.ADD_S +DBMS_LDAP.BER_FREE +DBMS_LDAP.BIND_S +DBMS_LDAP.CHECK_INTERFACE_VERSION +DBMS_LDAP.COMPARE_S +DBMS_LDAP.COUNT_ENTRIES +DBMS_LDAP.COUNT_VALUES +DBMS_LDAP.COUNT_VALUES_BLOB +DBMS_LDAP.COUNT_VALUES_LEN +DBMS_LDAP.CREATE_MOD_ARRAY +DBMS_LDAP.DELETE +DBMS_LDAP.DELETE_S +DBMS_LDAP.ERR2STRING +DBMS_LDAP.EXPLODE_DN +DBMS_LDAP.FIRST_ATTRIBUTE +DBMS_LDAP.FIRST_ENTRY +DBMS_LDAP.FREE_MOD_ARRAY +DBMS_LDAP.GET_DN +DBMS_LDAP.GET_SESSION_INFO +DBMS_LDAP.GET_TRACE_LEVEL +DBMS_LDAP.GET_VALUES +DBMS_LDAP.GET_VALUES_BLOB +DBMS_LDAP.GET_VALUES_LEN +DBMS_LDAP.INIT +DBMS_LDAP.MODIFY_S +DBMS_LDAP.MODRDN2_S +DBMS_LDAP.MSGFREE +DBMS_LDAP.NEXT_ATTRIBUTE +DBMS_LDAP.NEXT_ENTRY +DBMS_LDAP.NLS_CONVERT_FROM_UTF8 +DBMS_LDAP.NLS_CONVERT_TO_UTF8 +DBMS_LDAP.NLS_GET_DBCHARSET_NAME +DBMS_LDAP.OPEN_SSL +DBMS_LDAP.POPULATE_MOD_ARRAY +DBMS_LDAP.RENAME_S +DBMS_LDAP.SEARCH_S +DBMS_LDAP.SEARCH_ST +DBMS_LDAP.SET_TRACE_LEVEL +DBMS_LDAP.SIMPLE_BIND_S +DBMS_LDAP.UNBIND_S +DBMS_LDAP.VALUE_FREE_BLOB +DBMS_LDAP_API_FFI. +DBMS_LDAP_API_FFI.BER_FREE +DBMS_LDAP_API_FFI.CREATE_MOD_ARRAY +DBMS_LDAP_API_FFI.FREE_MOD_ARRAY +DBMS_LDAP_API_FFI.LDAP_ADD_S +DBMS_LDAP_API_FFI.LDAP_BIND_S +DBMS_LDAP_API_FFI.LDAP_COMPARE_S +DBMS_LDAP_API_FFI.LDAP_COUNT_ENTRIES +DBMS_LDAP_API_FFI.LDAP_DELETE_S +DBMS_LDAP_API_FFI.LDAP_ERR2STRING +DBMS_LDAP_API_FFI.LDAP_EXPLODE_DN +DBMS_LDAP_API_FFI.LDAP_FIRST_ATTRIBUTE +DBMS_LDAP_API_FFI.LDAP_FIRST_ENTRY +DBMS_LDAP_API_FFI.LDAP_GET_DBCHARSET_NAME +DBMS_LDAP_API_FFI.LDAP_GET_DN +DBMS_LDAP_API_FFI.LDAP_GET_SESSION_INFO +DBMS_LDAP_API_FFI.LDAP_GET_TRACE_LEVEL +DBMS_LDAP_API_FFI.LDAP_GET_VALUES +DBMS_LDAP_API_FFI.LDAP_GET_VALUES_BLOB +DBMS_LDAP_API_FFI.LDAP_GET_VALUES_LEN +DBMS_LDAP_API_FFI.LDAP_INIT +DBMS_LDAP_API_FFI.LDAP_MEMFREE +DBMS_LDAP_API_FFI.LDAP_MODIFY_S +DBMS_LDAP_API_FFI.LDAP_MODRDN2_S +DBMS_LDAP_API_FFI.LDAP_MSGFREE +DBMS_LDAP_API_FFI.LDAP_NEXT_ATTRIBUTE +DBMS_LDAP_API_FFI.LDAP_NEXT_ENTRY +DBMS_LDAP_API_FFI.LDAP_OPEN_SSL +DBMS_LDAP_API_FFI.LDAP_RENAME_S +DBMS_LDAP_API_FFI.LDAP_SEARCH_S +DBMS_LDAP_API_FFI.LDAP_SEARCH_ST +DBMS_LDAP_API_FFI.LDAP_SET_TRACE_LEVEL +DBMS_LDAP_API_FFI.LDAP_SIMPLE_BIND_S +DBMS_LDAP_API_FFI.LDAP_UNBIND_S +DBMS_LDAP_API_FFI.ORA_LDAP_AUTHENTICATE_USER +DBMS_LDAP_API_FFI.ORA_LDAP_AUTHENTICATE_USER_EXT +DBMS_LDAP_API_FFI.ORA_LDAP_CHECK_GRP_MEMBERSHIP +DBMS_LDAP_API_FFI.ORA_LDAP_CHECK_USER_SCRIPTION +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_GRP_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_MOD_PSET +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_SRV_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_SUB_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_CREATE_USER_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_FREE_HANDLE +DBMS_LDAP_API_FFI.ORA_LDAP_FREE_MOD_PSET +DBMS_LDAP_API_FFI.ORA_LDAP_FREE_PSET_COLL +DBMS_LDAP_API_FFI.ORA_LDAP_GET_AVAIL_SRVS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_GRP_DN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_GRP_MEMBERSHIP +DBMS_LDAP_API_FFI.ORA_LDAP_GET_GRP_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_NAMES +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_VALUES +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_VALUES_BLOB +DBMS_LDAP_API_FFI.ORA_LDAP_GET_PROP_VALUES_LEN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SCRIBED_SRVS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SCRIBED_USERS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SUB_DN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SUB_EXT_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_SUB_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_DN +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_EXT_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_GET_USER_PROPS_AUTH +DBMS_LDAP_API_FFI.ORA_LDAP_LOCATE_SUB_FOR_USER +DBMS_LDAP_API_FFI.ORA_LDAP_NORM_DN_WITH_CASE +DBMS_LDAP_API_FFI.ORA_LDAP_POPULATE_MOD_PSET +DBMS_LDAP_API_FFI.ORA_LDAP_SCRIBE_USER +DBMS_LDAP_API_FFI.ORA_LDAP_SET_GRP_HANDLE_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_SET_USER_HANDLE_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_SET_USER_PROPS +DBMS_LDAP_API_FFI.ORA_LDAP_UNSCRIBE_USER +DBMS_LDAP_API_FFI.POPULATE_MOD_ARRAY +DBMS_LDAP_API_FFI.VALUE_FREE_BLOB +DBMS_LDAP_UTL. +DBMS_LDAP_UTL.AUTHENTICATE_USER +DBMS_LDAP_UTL.AUTHENTICATE_USER_EXT +DBMS_LDAP_UTL.CHECK_GROUP_MEMBERSHIP +DBMS_LDAP_UTL.CHECK_INTERFACE_VERSION +DBMS_LDAP_UTL.CHECK_USER_SUBSCRIPTION +DBMS_LDAP_UTL.CREATE_GROUP_HANDLE +DBMS_LDAP_UTL.CREATE_MOD_PROPERTYSET +DBMS_LDAP_UTL.CREATE_SERVICE_HANDLE +DBMS_LDAP_UTL.CREATE_SUBSCRIBER_HANDLE +DBMS_LDAP_UTL.CREATE_USER_HANDLE +DBMS_LDAP_UTL.FREE_HANDLE +DBMS_LDAP_UTL.FREE_MOD_PROPERTYSET +DBMS_LDAP_UTL.FREE_PROPERTYSET_COLLECTION +DBMS_LDAP_UTL.GET_AVAILABLE_SERVICES +DBMS_LDAP_UTL.GET_GROUP_DN +DBMS_LDAP_UTL.GET_GROUP_MEMBERSHIP +DBMS_LDAP_UTL.GET_GROUP_PROPERTIES +DBMS_LDAP_UTL.GET_PROPERTY_NAMES +DBMS_LDAP_UTL.GET_PROPERTY_VALUES +DBMS_LDAP_UTL.GET_PROPERTY_VALUES_BLOB +DBMS_LDAP_UTL.GET_PROPERTY_VALUES_LEN +DBMS_LDAP_UTL.GET_SUBSCRIBED_SERVICES +DBMS_LDAP_UTL.GET_SUBSCRIBED_USERS +DBMS_LDAP_UTL.GET_SUBSCRIBER_DN +DBMS_LDAP_UTL.GET_SUBSCRIBER_EXT_PROPERTIES +DBMS_LDAP_UTL.GET_SUBSCRIBER_PROPERTIES +DBMS_LDAP_UTL.GET_USER_DN +DBMS_LDAP_UTL.GET_USER_EXTENDED_PROPERTIES +DBMS_LDAP_UTL.GET_USER_PROPERTIES +DBMS_LDAP_UTL.GET_USER_PROPS_AND_AUTH +DBMS_LDAP_UTL.LOCATE_SUBSCRIBER_FOR_USER +DBMS_LDAP_UTL.NORMALIZE_DN_WITH_CASE +DBMS_LDAP_UTL.POPULATE_MOD_PROPERTYSET +DBMS_LDAP_UTL.PROPERTY_VALUE_FREE_BLOB +DBMS_LDAP_UTL.SET_GROUP_HANDLE_PROPERTIES +DBMS_LDAP_UTL.SET_USER_HANDLE_PROPERTIES +DBMS_LDAP_UTL.SET_USER_PROPERTIES +DBMS_LDAP_UTL.SUBSCRIBE_USER +DBMS_LDAP_UTL.UNSUBSCRIBE_USER +DBMS_LOB. +DBMS_LOB.APPEND +DBMS_LOB.CLOB2FILE +DBMS_LOB.CLOSE +DBMS_LOB.COMPARE +DBMS_LOB.CONVERTTOBLOB +DBMS_LOB.CONVERTTOCLOB +DBMS_LOB.COPY +DBMS_LOB.COPY_DBFS_LINK +DBMS_LOB.COPY_FROM_DBFS_LINK +DBMS_LOB.CREATETEMPORARY +DBMS_LOB.DBFS_LINK_GENERATE_PATH +DBMS_LOB.ERASE +DBMS_LOB.FILECLOSE +DBMS_LOB.FILECLOSEALL +DBMS_LOB.FILEEXISTS +DBMS_LOB.FILEGETNAME +DBMS_LOB.FILEISOPEN +DBMS_LOB.FILEOPEN +DBMS_LOB.FRAGMENT_DELETE +DBMS_LOB.FRAGMENT_INSERT +DBMS_LOB.FRAGMENT_MOVE +DBMS_LOB.FRAGMENT_REPLACE +DBMS_LOB.FREETEMPORARY +DBMS_LOB.GETCHUNKSIZE +DBMS_LOB.GETCONTENTTYPE +DBMS_LOB.GETLENGTH +DBMS_LOB.GETOPTIONS +DBMS_LOB.GET_DBFS_LINK +DBMS_LOB.GET_DBFS_LINK_STATE +DBMS_LOB.GET_DEDUPLICATE_REGIONS +DBMS_LOB.GET_STORAGE_LIMIT +DBMS_LOB.INSTR +DBMS_LOB.ISOPEN +DBMS_LOB.ISREMOTE +DBMS_LOB.ISSECUREFILE +DBMS_LOB.ISTEMPORARY +DBMS_LOB.LOADBLOBFROMFILE +DBMS_LOB.LOADCLOBFROMFILE +DBMS_LOB.LOADFROMFILE +DBMS_LOB.MOVE_TO_DBFS_LINK +DBMS_LOB.OPEN +DBMS_LOB.READ +DBMS_LOB.SETCONTENTTYPE +DBMS_LOB.SETOPTIONS +DBMS_LOB.SET_DBFS_LINK +DBMS_LOB.SUBSTR +DBMS_LOB.TRIM +DBMS_LOB.WRITE +DBMS_LOB.WRITEAPPEND +DBMS_LOBUTIL. +DBMS_LOBUTIL.COPY_PRIMARY_DEDUP +DBMS_LOBUTIL.GETDEDUPSET +DBMS_LOBUTIL.GETEXTENTS +DBMS_LOBUTIL.GETINODE +DBMS_LOBUTIL.GETLOBMAP +DBMS_LOB_AM_PRIVATE. +DBMS_LOB_AM_PRIVATE.CREATEFILE +DBMS_LOB_AM_PRIVATE.DELETEFILE +DBMS_LOB_AM_PRIVATE.GETFILE +DBMS_LOB_AM_PRIVATE.GETLENGTH +DBMS_LOB_AM_PRIVATE.ISSTREAMABLE +DBMS_LOB_AM_PRIVATE.SETCHARSETID +DBMS_LOCK. +DBMS_LOCK.ALLOCATE_UNIQUE +DBMS_LOCK.ALLOCATE_UNIQUE_AUTONOMOUS +DBMS_LOCK.CONVERT +DBMS_LOCK.RELEASE +DBMS_LOCK.REQUEST +DBMS_LOCK.SLEEP +DBMS_LOCK_ALLOCATED +DBMS_LOG. +DBMS_LOG.KSDDDT +DBMS_LOG.KSDFLS +DBMS_LOG.KSDIND +DBMS_LOG.KSDWRT +DBMS_LOGMNR. +DBMS_LOGMNR.ADD_LOGFILE +DBMS_LOGMNR.COLUMN_PRESENT +DBMS_LOGMNR.END_LOGMNR +DBMS_LOGMNR.MINE_VALUE +DBMS_LOGMNR.REMOVE_LOGFILE +DBMS_LOGMNR.START_LOGMNR +DBMS_LOGMNR_D. +DBMS_LOGMNR_D.BUILD +DBMS_LOGMNR_D.SET_TABLESPACE +DBMS_LOGMNR_FFVTOLOGMNRT. +DBMS_LOGMNR_INTERNAL. +DBMS_LOGMNR_INTERNAL.ADD_TABLE_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.ADD_USER_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.ADD_XID_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.ADVANCE_READ_SCN +DBMS_LOGMNR_INTERNAL.AGESPILL_11202TO112 +DBMS_LOGMNR_INTERNAL.AGESPILL_11204TO121 +DBMS_LOGMNR_INTERNAL.AGESPILL_112TO11 +DBMS_LOGMNR_INTERNAL.AGESPILL_11TO112 +DBMS_LOGMNR_INTERNAL.AGESPILL_121TO11204 +DBMS_LOGMNR_INTERNAL.AGESPILL_12202TO122 +DBMS_LOGMNR_INTERNAL.AGESPILL_122TO12 +DBMS_LOGMNR_INTERNAL.AGESPILL_122TO12202 +DBMS_LOGMNR_INTERNAL.AGESPILL_12TO122 +DBMS_LOGMNR_INTERNAL.DELETE_TABLE_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.DELETE_USER_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.DELETE_XID_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.DICTIONARY_S_LOCK +DBMS_LOGMNR_INTERNAL.DICTIONARY_S_LOCK_FS +DBMS_LOGMNR_INTERNAL.DICTIONARY_UNLOCK +DBMS_LOGMNR_INTERNAL.DICTIONARY_X_LOCK +DBMS_LOGMNR_INTERNAL.DICTIONARY_X_LOCK_FS +DBMS_LOGMNR_INTERNAL.DO_INT_BUILD +DBMS_LOGMNR_INTERNAL.DUMP_CKPT_DATA +DBMS_LOGMNR_INTERNAL.DUMP_PAGEOUT_DATA +DBMS_LOGMNR_INTERNAL.DUMP_STREAMS_CKPT_DATA +DBMS_LOGMNR_INTERNAL.GET_BRANCH_INFO +DBMS_LOGMNR_INTERNAL.GET_MDH +DBMS_LOGMNR_INTERNAL.GET_MDH_FOR_PDBNAME_SCN +DBMS_LOGMNR_INTERNAL.GET_PDBNAME_FOR_MDH +DBMS_LOGMNR_INTERNAL.GET_PROCESS_ROLE# +DBMS_LOGMNR_INTERNAL.GET_ROOT_GLOBAL_NAME +DBMS_LOGMNR_INTERNAL.GET_SESSION_ACTION_TYPE# +DBMS_LOGMNR_INTERNAL.GET_SESS_OP_LOCK +DBMS_LOGMNR_INTERNAL.GET_SHARED_SETTBL_LOCK +DBMS_LOGMNR_INTERNAL.INJECTCOMMITORROLLBACK +DBMS_LOGMNR_INTERNAL.INSERT_INTO_SESSION_ACTION_TBL +DBMS_LOGMNR_INTERNAL.INT_BUILD +DBMS_LOGMNR_INTERNAL.INT_BUILD_N +DBMS_LOGMNR_INTERNAL.KRVIGSSS +DBMS_LOGMNR_INTERNAL.KRVILCJ +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVICL +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIFTSI +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIGENQ +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIISAC +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVILSS +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVILT +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIRENQ +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIULSS +DBMS_LOGMNR_INTERNAL.LOGMNR_KRVIULT +DBMS_LOGMNR_INTERNAL.LOGMNR_SESSION_EVOLVE_DIVERGED +DBMS_LOGMNR_INTERNAL.PMOP_LOCK +DBMS_LOGMNR_INTERNAL.PMOP_UNLOCK +DBMS_LOGMNR_INTERNAL.PRUNE_STREAMS_CKPT +DBMS_LOGMNR_INTERNAL.RELEASE_SESS_OP_LOCK +DBMS_LOGMNR_INTERNAL.RELEASE_SHARED_SETTBL_LOCK +DBMS_LOGMNR_INTERNAL.REPLACE_DICTIONARY_BEGIN +DBMS_LOGMNR_INTERNAL.REPLACE_DICTIONARY_END +DBMS_LOGMNR_INTERNAL.RESOLVE_TABLE_INCLUSION_RULE +DBMS_LOGMNR_INTERNAL.SET_SESSION_ACTION +DBMS_LOGMNR_INTERNAL.SET_SESSION_ACTION_HELPER +DBMS_LOGMNR_INTERNAL.SET_TABLESPACE +DBMS_LOGMNR_INTERNAL.SHARE_PERSISTENT_DICTIONARY +DBMS_LOGMNR_INTERNAL.SKIP_OBJ +DBMS_LOGMNR_INTERNAL.SKIP_OBJ_C +DBMS_LOGMNR_INTERNAL.SKIP_OBJ_V +DBMS_LOGMNR_INTERNAL.SKIP_RBA +DBMS_LOGMNR_INTERNAL.SKIP_XID +DBMS_LOGMNR_INTERNAL.TRACEREDOLOGS +DBMS_LOGMNR_INTERNAL.TRACE_FOREIGN_LOG_INFO +DBMS_LOGMNR_INTERNAL.TRACE_LOCAL_LOG_INFO +DBMS_LOGMNR_INTERNAL.TRACE_LOCAL_XID +DBMS_LOGMNR_INTERNAL.TRACE_TABLE_LOCAL_DICT +DBMS_LOGMNR_INTERNAL.UNSET_SESSION_ACTION +DBMS_LOGMNR_INTERNAL.UNSET_SESSION_ACTION_HELPER +DBMS_LOGMNR_INTERNAL.UNSKIP_OBJ +DBMS_LOGMNR_INTERNAL.UNSKIP_OBJ_C +DBMS_LOGMNR_INTERNAL.UNSKIP_RBA +DBMS_LOGMNR_INTERNAL.UNSKIP_XID +DBMS_LOGMNR_LOGREP_DICT. +DBMS_LOGMNR_LOGREP_DICT.ADD_COL +DBMS_LOGMNR_LOGREP_DICT.ADD_GLOBAL_NAME +DBMS_LOGMNR_LOGREP_DICT.ADD_OBJ +DBMS_LOGMNR_LOGREP_DICT.COMMIT_XID +DBMS_LOGMNR_LOGREP_DICT.DEL_OBJ +DBMS_LOGMNR_LOGREP_DICT.PURGE_GLOBAL_NAME +DBMS_LOGMNR_LOGREP_DICT.PURGE_OBJ +DBMS_LOGMNR_LOGREP_DICT.PURGE_SCN +DBMS_LOGMNR_LOGREP_DICT.ROLLBACK_XID +DBMS_LOGMNR_LOGREP_DICT.SYSTEM_INFO_EXP +DBMS_LOGMNR_SESSION_INT. +DBMS_LOGMNR_SESSION_INT.ABORT_PURGE +DBMS_LOGMNR_SESSION_INT.ADD_LOG_FILE +DBMS_LOGMNR_SESSION_INT.ATTACH_SESSION +DBMS_LOGMNR_SESSION_INT.CLONE_CONTEXT +DBMS_LOGMNR_SESSION_INT.CLONE_CONTEXT2 +DBMS_LOGMNR_SESSION_INT.COLUMN_PRESENT +DBMS_LOGMNR_SESSION_INT.CREATE_SESSION +DBMS_LOGMNR_SESSION_INT.DESTROY_SESSION +DBMS_LOGMNR_SESSION_INT.DETACH_SESSION +DBMS_LOGMNR_SESSION_INT.MINE_VALUE +DBMS_LOGMNR_SESSION_INT.PREPARE_SCN_RANGE +DBMS_LOGMNR_SESSION_INT.PROCESS_PURGE +DBMS_LOGMNR_SESSION_INT.PURGE_SESSION +DBMS_LOGMNR_SESSION_INT.RELEASE_SCN_RANGE +DBMS_LOGMNR_SESSION_INT.REMOVE_LOG_FILE +DBMS_LOGMNR_SESSION_INT.SET_DICT_ATTR +DBMS_LOGMNR_SESSION_INT.SET_SESSION_PARAMS +DBMS_LOGREP_DEF_PROC_UTL. +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_DROP_TABLE +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_DROP_USER +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_NEW_TABLE +DBMS_LOGREP_DEF_PROC_UTL.PROCESS_SRC_NEW_USER +DBMS_LOGREP_EXP. +DBMS_LOGREP_EXP.ANYDATA_IMPORT_STRING +DBMS_LOGREP_EXP.INSTANCE_EXTENDED_INFO_EXP +DBMS_LOGREP_EXP.INTERNAL_TRANSFORM_EXPORT +DBMS_LOGREP_EXP.SCHEMA_INFO_EXP +DBMS_LOGREP_EXP.SYSTEM_INFO_EXP +DBMS_LOGREP_EXP.VERSION_VAR2_2_NUMBER +DBMS_LOGREP_IMP. +DBMS_LOGREP_IMP.APPLY_ERROR +DBMS_LOGREP_IMP.APPLY_ERROR_TXN +DBMS_LOGREP_IMP.APPLY_MILESTONE +DBMS_LOGREP_IMP.APPLY_PROGRESS +DBMS_LOGREP_IMP.BUMP_SCN +DBMS_LOGREP_IMP.CREATE_APPLY +DBMS_LOGREP_IMP.CREATE_CAPTURE +DBMS_LOGREP_IMP.CREATE_PROPAGATION +DBMS_LOGREP_IMP.CREATE_SYNC_CAPTURE +DBMS_LOGREP_IMP.DATE_CONVERT +DBMS_LOGREP_IMP.INCLUDE_EXTRA_ATTRIBUTE +DBMS_LOGREP_IMP.INSTANTIATE +DBMS_LOGREP_IMP.INSTANTIATE_SCHEMA +DBMS_LOGREP_IMP.IS_IMPORT_CONFIGURATION +DBMS_LOGREP_IMP.IS_IMPORT_INSTANTIATION +DBMS_LOGREP_IMP.IS_SWITCH_USER +DBMS_LOGREP_IMP.MESSAGE_CONSUMERS +DBMS_LOGREP_IMP.MESSAGE_RULES +DBMS_LOGREP_IMP.PREPARE_DDL +DBMS_LOGREP_IMP.PREPARE_OBJECT +DBMS_LOGREP_IMP.PREPARE_SYNC_OBJECT +DBMS_LOGREP_IMP.PRIVILEGED_USER +DBMS_LOGREP_IMP.SET_APPLY_PARAM +DBMS_LOGREP_IMP.SET_APPLY_SOURCE_OBJ +DBMS_LOGREP_IMP.SET_APPLY_SOURCE_SCHEMA +DBMS_LOGREP_IMP.SET_CAPTURE_PARAM +DBMS_LOGREP_IMP.SET_DML_HANDLER +DBMS_LOGREP_IMP.SET_IMPORT_MODE +DBMS_LOGREP_IMP.SET_KEY_COLUMNS +DBMS_LOGREP_IMP.SET_UPDATE_CONFLICT_HANDLER +DBMS_LOGREP_IMP.START_APPLY +DBMS_LOGREP_IMP.START_CAPTURE +DBMS_LOGREP_IMP.START_QUEUE +DBMS_LOGREP_IMP.STREAMS_RULES +DBMS_LOGREP_IMP_INTERNAL. +DBMS_LOGREP_IMP_INTERNAL.APPLY_ERROR +DBMS_LOGREP_IMP_INTERNAL.APPLY_ERROR_TXN +DBMS_LOGREP_IMP_INTERNAL.APPLY_MILESTONE +DBMS_LOGREP_IMP_INTERNAL.APPLY_PROGRESS +DBMS_LOGREP_IMP_INTERNAL.INSTANTIATE +DBMS_LOGREP_IMP_INTERNAL.INSTANTIATE_SCHEMA +DBMS_LOGREP_IMP_INTERNAL.PREPARE_DDL +DBMS_LOGREP_IMP_INTERNAL.PRIVILEGED_USER +DBMS_LOGREP_IMP_INTERNAL.STREAMS_RULES +DBMS_LOGREP_IMP_INTERNAL.UPDATE_APPLY_PROCESS +DBMS_LOGREP_UTIL. +DBMS_LOGREP_UTIL.ADD_CLOB_TO_TABLE +DBMS_LOGREP_UTIL.ARRAY_SUBSTITUTE +DBMS_LOGREP_UTIL.BIC +DBMS_LOGREP_UTIL.BIS +DBMS_LOGREP_UTIL.BIT +DBMS_LOGREP_UTIL.BITOR +DBMS_LOGREP_UTIL.BOOLEAN_TO_VARCHAR2 +DBMS_LOGREP_UTIL.BUMP_SCN +DBMS_LOGREP_UTIL.CANONICALIZE +DBMS_LOGREP_UTIL.CANONICALIZE_OLD +DBMS_LOGREP_UTIL.CANONICAL_CONCAT +DBMS_LOGREP_UTIL.CANON_DBLINK +DBMS_LOGREP_UTIL.CHECK_2LEVEL_PRIVILEGE +DBMS_LOGREP_UTIL.CHECK_DBLINK +DBMS_LOGREP_UTIL.CHECK_LCRID_VERSION +DBMS_LOGREP_UTIL.CHECK_PROCESS_PRIVILEGES +DBMS_LOGREP_UTIL.CHECK_SOURCE_ROOT +DBMS_LOGREP_UTIL.COMMA_TO_TABLE +DBMS_LOGREP_UTIL.COMPATIBLE_VARCHAR_TO_INT +DBMS_LOGREP_UTIL.CONVERT_INT_TO_EXT_LCR +DBMS_LOGREP_UTIL.DB_VERSION +DBMS_LOGREP_UTIL.DDL_ANNOTATE +DBMS_LOGREP_UTIL.DROP_UNUSED_RULE_SETS +DBMS_LOGREP_UTIL.DUMP_TRACE +DBMS_LOGREP_UTIL.ENQUOTE_LITERAL +DBMS_LOGREP_UTIL.ENQUOTE_NAME +DBMS_LOGREP_UTIL.ENSURE_DB_COMPATIBLE +DBMS_LOGREP_UTIL.ENSURE_NONNULL +DBMS_LOGREP_UTIL.ENSURE_STREAMS +DBMS_LOGREP_UTIL.FETCH_CAPTURE_USER +DBMS_LOGREP_UTIL.FETCH_DBA_XOUT_CAPTURE_USER +DBMS_LOGREP_UTIL.FORCE_XSTREAM +DBMS_LOGREP_UTIL.GENERIC_CANONICALIZE +DBMS_LOGREP_UTIL.GET_CHECKPOINT_SCNS +DBMS_LOGREP_UTIL.GET_CONSISTENT_SCN +DBMS_LOGREP_UTIL.GET_CONSTRAINT_NAME +DBMS_LOGREP_UTIL.GET_CURRENT_PDB_NAME +DBMS_LOGREP_UTIL.GET_LAST_ENQ_SCN +DBMS_LOGREP_UTIL.GET_LOCK +DBMS_LOGREP_UTIL.GET_MAX_BYTES_PER_CHAR +DBMS_LOGREP_UTIL.GET_MAX_LENGTH_COMPAT +DBMS_LOGREP_UTIL.GET_NLS_PREFIX +DBMS_LOGREP_UTIL.GET_NLS_SUBSTR +DBMS_LOGREP_UTIL.GET_OBJECT_LOCK +DBMS_LOGREP_UTIL.GET_PDB_SHORT_NAME +DBMS_LOGREP_UTIL.GET_PROC_USE_CONTEXT +DBMS_LOGREP_UTIL.GET_PROC_USE_CONTEXT_INT +DBMS_LOGREP_UTIL.GET_QUEUE_OID +DBMS_LOGREP_UTIL.GET_REAL_CHECKPOINT_SCNS +DBMS_LOGREP_UTIL.GET_REQ_CKPT_SCN +DBMS_LOGREP_UTIL.GET_RS_LOCKS +DBMS_LOGREP_UTIL.GET_RULE_ACTION_CONTEXT +DBMS_LOGREP_UTIL.GET_STR_COMPAT +DBMS_LOGREP_UTIL.GG_XSTREAM_QTABLE +DBMS_LOGREP_UTIL.IS_BUILT_IN_TYPE +DBMS_LOGREP_UTIL.IS_FUNCTION_BASED_INDEX +DBMS_LOGREP_UTIL.IS_INVOKER_VALID_OGG_USER +DBMS_LOGREP_UTIL.IS_MAX_PRIV_USER +DBMS_LOGREP_UTIL.IS_PDB_ENABLED +DBMS_LOGREP_UTIL.IS_ROOT_PDB +DBMS_LOGREP_UTIL.IS_SES_USER +DBMS_LOGREP_UTIL.IS_VALID_ROLE +DBMS_LOGREP_UTIL.IS_VALID_SYSTEM_PRIV +DBMS_LOGREP_UTIL.LCR_CACHE_PURGE +DBMS_LOGREP_UTIL.LOAD_DDL_TAB +DBMS_LOGREP_UTIL.LOAD_STRING_FROM_TAB +DBMS_LOGREP_UTIL.LOCAL_NODE +DBMS_LOGREP_UTIL.LOCK_PROCESS +DBMS_LOGREP_UTIL.MESSAGE_TRACKING_PURGE +DBMS_LOGREP_UTIL.MESSAGE_TRACKING_RESIZE +DBMS_LOGREP_UTIL.PARSE_FOR_KEYWORD +DBMS_LOGREP_UTIL.PRE_11_2_DB +DBMS_LOGREP_UTIL.QUERY_DBA_APPLY +DBMS_LOGREP_UTIL.QUERY_DBA_CAPTURE +DBMS_LOGREP_UTIL.QUERY_DBA_CAPTURE2 +DBMS_LOGREP_UTIL.QUERY_DBA_QUEUES +DBMS_LOGREP_UTIL.QUERY_DBA_XOUT_ATTACHED_SVR +DBMS_LOGREP_UTIL.QUERY_DIFF_APPLY_USER +DBMS_LOGREP_UTIL.RAISE_CONFIG_ERROR +DBMS_LOGREP_UTIL.RAISE_SYSTEM_ERROR +DBMS_LOGREP_UTIL.RAISE_SYSTEM_ERROR_3GL +DBMS_LOGREP_UTIL.RAISE_SYSTEM_WARNING +DBMS_LOGREP_UTIL.RAISE_SYSTEM_WARNING_3GL +DBMS_LOGREP_UTIL.RAWS +DBMS_LOGREP_UTIL.RELEASE_LOCK +DBMS_LOGREP_UTIL.RELEASE_OBJECT_LOCK +DBMS_LOGREP_UTIL.RELEASE_RS_LOCKS +DBMS_LOGREP_UTIL.RESET +DBMS_LOGREP_UTIL.SESS_HAS_ROLE +DBMS_LOGREP_UTIL.SET_3X_IDEN +DBMS_LOGREP_UTIL.SET_ALLOCATED_MEMORY +DBMS_LOGREP_UTIL.SET_CCA_MAX_PERCENTAGE +DBMS_LOGREP_UTIL.SET_PARAMETER +DBMS_LOGREP_UTIL.SET_STREAMS_AUTO_FILTER +DBMS_LOGREP_UTIL.SET_SUPP_LOGGING +DBMS_LOGREP_UTIL.SHORTEN_OBJECT_NAME +DBMS_LOGREP_UTIL.START_PROCESS +DBMS_LOGREP_UTIL.STOP_PROCESS +DBMS_LOGREP_UTIL.STRCMP_CS +DBMS_LOGREP_UTIL.STREAMS_TRANSACTION_PURGE +DBMS_LOGREP_UTIL.UNCL_TO_NAME +DBMS_LOGREP_UTIL.UNCL_TO_QUOTED_NAME +DBMS_LOGREP_UTIL.UNLOCK_PROCESS +DBMS_LOGREP_UTIL.UPDATE_DBNAME_MAPPING +DBMS_LOGREP_UTIL.USER_HAS_ROLE +DBMS_LOGREP_UTIL.WRAP_DQT +DBMS_LOGREP_UTIL.WRITE_ERROR +DBMS_LOGREP_UTIL.WRITE_TRACE +DBMS_LOGREP_UTIL.WRITE_TRACE_APT +DBMS_LOGREP_UTIL_INVOK. +DBMS_LOGREP_UTIL_INVOK.CHECK_BECOME_USER_PRIVILEGE +DBMS_LOGREP_UTIL_INVOK.CHECK_DV_STREAMS_ADMIN +DBMS_LOGREP_UTIL_INVOK.CHECK_PDB_ACCESS +DBMS_LOGREP_UTIL_INVOK.GET_OBJECT_NAME +DBMS_LOGSTDBY. +DBMS_LOGSTDBY.APPLY_SET +DBMS_LOGSTDBY.APPLY_UNSET +DBMS_LOGSTDBY.BUILD +DBMS_LOGSTDBY.DB_IS_LOGSTDBY +DBMS_LOGSTDBY.EDS_ADD_TABLE +DBMS_LOGSTDBY.EDS_EVOLVE_AUTOMATIC +DBMS_LOGSTDBY.EDS_EVOLVE_MANUAL +DBMS_LOGSTDBY.EDS_REMOVE_TABLE +DBMS_LOGSTDBY.INSTANTIATE_TABLE +DBMS_LOGSTDBY.IS_APPLY_SERVER +DBMS_LOGSTDBY.MAP_PRIMARY_SCN +DBMS_LOGSTDBY.PREPARE_FOR_NEW_PRIMARY +DBMS_LOGSTDBY.PURGE_SESSION +DBMS_LOGSTDBY.REBUILD +DBMS_LOGSTDBY.SET_TABLESPACE +DBMS_LOGSTDBY.SKIP +DBMS_LOGSTDBY.SKIP_ERROR +DBMS_LOGSTDBY.SKIP_TRANSACTION +DBMS_LOGSTDBY.UNSKIP +DBMS_LOGSTDBY.UNSKIP_ERROR +DBMS_LOGSTDBY.UNSKIP_TRANSACTION +DBMS_LOGSTDBY_CONTEXT. +DBMS_LOGSTDBY_CONTEXT.CLEAR_ALL_CONTEXT +DBMS_LOGSTDBY_CONTEXT.CLEAR_CONTEXT +DBMS_LOGSTDBY_CONTEXT.GET_CONTEXT +DBMS_LOGSTDBY_CONTEXT.SET_CONTEXT +DBMS_MACADM. +DBMS_MACADM.ADD_AUTH_TO_REALM +DBMS_MACADM.ADD_CMD_RULE_TO_POLICY +DBMS_MACADM.ADD_FACTOR_LINK +DBMS_MACADM.ADD_INDEX_FUNCTION +DBMS_MACADM.ADD_NLS_DATA +DBMS_MACADM.ADD_OBJECT_TO_REALM +DBMS_MACADM.ADD_OWNER_TO_POLICY +DBMS_MACADM.ADD_POLICY_FACTOR +DBMS_MACADM.ADD_REALM_TO_POLICY +DBMS_MACADM.ADD_RULE_TO_RULE_SET +DBMS_MACADM.AUTHORIZE_DATAPUMP_USER +DBMS_MACADM.AUTHORIZE_DBCAPTURE +DBMS_MACADM.AUTHORIZE_DBREPLAY +DBMS_MACADM.AUTHORIZE_DDL +DBMS_MACADM.AUTHORIZE_DEBUG_CONNECT +DBMS_MACADM.AUTHORIZE_DIAGNOSTIC_ADMIN +DBMS_MACADM.AUTHORIZE_MAINTENANCE_USER +DBMS_MACADM.AUTHORIZE_PREPROCESSOR +DBMS_MACADM.AUTHORIZE_PROXY_USER +DBMS_MACADM.AUTHORIZE_SCHEDULER_USER +DBMS_MACADM.AUTHORIZE_TTS_USER +DBMS_MACADM.AUTH_DATAPUMP_CREATE_USER +DBMS_MACADM.AUTH_DATAPUMP_GRANT +DBMS_MACADM.CHANGE_IDENTITY_FACTOR +DBMS_MACADM.CHANGE_IDENTITY_VALUE +DBMS_MACADM.CHECK_BACKUP_PARM_VARCHAR +DBMS_MACADM.CHECK_DB_FILE_PARM_VARCHAR +DBMS_MACADM.CHECK_DUMP_DEST_PARM_VARCHAR +DBMS_MACADM.CHECK_DYNRLS_PARM_VARCHAR +DBMS_MACADM.CHECK_O7_PARM_VARCHAR +DBMS_MACADM.CHECK_OPTIMIZER_PARM_VARCHAR +DBMS_MACADM.CHECK_PLSQL_PARM_VARCHAR +DBMS_MACADM.CHECK_SECURITY_PARM_VARCHAR +DBMS_MACADM.CHECK_SYS_SEC_PARM_VARCHAR +DBMS_MACADM.CHECK_TRIG_PARM_VARCHAR +DBMS_MACADM.CREATE_COMMAND_RULE +DBMS_MACADM.CREATE_CONNECT_COMMAND_RULE +DBMS_MACADM.CREATE_DOMAIN_IDENTITY +DBMS_MACADM.CREATE_FACTOR +DBMS_MACADM.CREATE_FACTOR_TYPE +DBMS_MACADM.CREATE_IDENTITY +DBMS_MACADM.CREATE_IDENTITY_MAP +DBMS_MACADM.CREATE_MAC_POLICY +DBMS_MACADM.CREATE_POLICY +DBMS_MACADM.CREATE_POLICY_LABEL +DBMS_MACADM.CREATE_REALM +DBMS_MACADM.CREATE_ROLE +DBMS_MACADM.CREATE_RULE +DBMS_MACADM.CREATE_RULE_SET +DBMS_MACADM.CREATE_SESSION_EVENT_CMD_RULE +DBMS_MACADM.CREATE_SYSTEM_EVENT_CMD_RULE +DBMS_MACADM.DELETE_AUTH_FROM_REALM +DBMS_MACADM.DELETE_CMD_RULE_FROM_POLICY +DBMS_MACADM.DELETE_COMMAND_RULE +DBMS_MACADM.DELETE_CONNECT_COMMAND_RULE +DBMS_MACADM.DELETE_FACTOR +DBMS_MACADM.DELETE_FACTOR_LINK +DBMS_MACADM.DELETE_FACTOR_TYPE +DBMS_MACADM.DELETE_IDENTITY +DBMS_MACADM.DELETE_IDENTITY_MAP +DBMS_MACADM.DELETE_INDEX_FUNCTION +DBMS_MACADM.DELETE_MAC_POLICY_CASCADE +DBMS_MACADM.DELETE_OBJECT_FROM_REALM +DBMS_MACADM.DELETE_OWNER_FROM_POLICY +DBMS_MACADM.DELETE_POLICY_FACTOR +DBMS_MACADM.DELETE_POLICY_LABEL +DBMS_MACADM.DELETE_REALM +DBMS_MACADM.DELETE_REALM_CASCADE +DBMS_MACADM.DELETE_REALM_FROM_POLICY +DBMS_MACADM.DELETE_ROLE +DBMS_MACADM.DELETE_RULE +DBMS_MACADM.DELETE_RULE_FROM_RULE_SET +DBMS_MACADM.DELETE_RULE_SET +DBMS_MACADM.DELETE_SESSION_EVENT_CMD_RULE +DBMS_MACADM.DELETE_SYSTEM_EVENT_CMD_RULE +DBMS_MACADM.DISABLE_DV +DBMS_MACADM.DISABLE_DV_DICTIONARY_ACCTS +DBMS_MACADM.DISABLE_DV_PATCH_ADMIN_AUDIT +DBMS_MACADM.DISABLE_EVENT +DBMS_MACADM.DISABLE_ORADEBUG +DBMS_MACADM.DROP_DOMAIN_IDENTITY +DBMS_MACADM.DROP_POLICY +DBMS_MACADM.DV_SANITY_CHECK +DBMS_MACADM.ENABLE_DV +DBMS_MACADM.ENABLE_DV_DICTIONARY_ACCTS +DBMS_MACADM.ENABLE_DV_PATCH_ADMIN_AUDIT +DBMS_MACADM.ENABLE_EVENT +DBMS_MACADM.ENABLE_ORADEBUG +DBMS_MACADM.GET_DB_CHARSET +DBMS_MACADM.GET_INSTANCE_INFO +DBMS_MACADM.GET_ORA_LANG +DBMS_MACADM.GET_SESSION_INFO +DBMS_MACADM.IS_ALTER_USER_ALLOW_VARCHAR +DBMS_MACADM.IS_DROP_USER_ALLOW_VARCHAR +DBMS_MACADM.RENAME_FACTOR +DBMS_MACADM.RENAME_FACTOR_TYPE +DBMS_MACADM.RENAME_POLICY +DBMS_MACADM.RENAME_REALM +DBMS_MACADM.RENAME_ROLE +DBMS_MACADM.RENAME_RULE +DBMS_MACADM.RENAME_RULE_SET +DBMS_MACADM.SET_PRESERVE_CASE +DBMS_MACADM.UNAUTHORIZE_DATAPUMP_USER +DBMS_MACADM.UNAUTHORIZE_DBCAPTURE +DBMS_MACADM.UNAUTHORIZE_DBREPLAY +DBMS_MACADM.UNAUTHORIZE_DDL +DBMS_MACADM.UNAUTHORIZE_DEBUG_CONNECT +DBMS_MACADM.UNAUTHORIZE_DIAGNOSTIC_ADMIN +DBMS_MACADM.UNAUTHORIZE_MAINTENANCE_USER +DBMS_MACADM.UNAUTHORIZE_PREPROCESSOR +DBMS_MACADM.UNAUTHORIZE_PROXY_USER +DBMS_MACADM.UNAUTHORIZE_SCHEDULER_USER +DBMS_MACADM.UNAUTHORIZE_TTS_USER +DBMS_MACADM.UNAUTH_DATAPUMP_CREATE_USER +DBMS_MACADM.UNAUTH_DATAPUMP_GRANT +DBMS_MACADM.UPDATE_COMMAND_RULE +DBMS_MACADM.UPDATE_CONNECT_COMMAND_RULE +DBMS_MACADM.UPDATE_FACTOR +DBMS_MACADM.UPDATE_FACTOR_TYPE +DBMS_MACADM.UPDATE_IDENTITY +DBMS_MACADM.UPDATE_MAC_POLICY +DBMS_MACADM.UPDATE_POLICY_DESCRIPTION +DBMS_MACADM.UPDATE_POLICY_STATE +DBMS_MACADM.UPDATE_REALM +DBMS_MACADM.UPDATE_REALM_AUTH +DBMS_MACADM.UPDATE_ROLE +DBMS_MACADM.UPDATE_RULE +DBMS_MACADM.UPDATE_RULE_SET +DBMS_MACADM.UPDATE_SESSION_EVENT_CMD_RULE +DBMS_MACADM.UPDATE_SYSTEM_EVENT_CMD_RULE +DBMS_MACAUD. +DBMS_MACAUD.CREATE_ADMIN_AUDIT +DBMS_MACOLS. +DBMS_MACOLS.CREATE_MACOLS_CONTEXTS +DBMS_MACOLS.DROP_MACOLS_CONTEXTS +DBMS_MACOLS.INIT_SESSION +DBMS_MACOLS.LABEL_OF +DBMS_MACOLS.MIN_POLICY_LABEL_OF +DBMS_MACOLS.UPDATE_POLICY_LABEL_CONTEXT +DBMS_MACOLS_SESSION. +DBMS_MACOLS_SESSION.CAN_SET_LABEL +DBMS_MACOLS_SESSION.IS_MAC_LABEL_SET +DBMS_MACOLS_SESSION.IS_MAC_POLICY +DBMS_MACOLS_SESSION.LABEL_AUDIT_RAISE +DBMS_MACOLS_SESSION.RESTORE_DEFAULT_LABELS +DBMS_MACOLS_SESSION.SET_ACCESS_PROFILE +DBMS_MACOLS_SESSION.SET_POLICY_LABEL_CONTEXT +DBMS_MACOUT. +DBMS_MACOUT.DISABLE +DBMS_MACOUT.ENABLE +DBMS_MACOUT.GET_LINE +DBMS_MACOUT.GET_LINE_COUNT +DBMS_MACOUT.IS_ENABLED +DBMS_MACOUT.PL +DBMS_MACOUT.PUT_LINE +DBMS_MACSEC. +DBMS_MACSEC.GET_FACTOR +DBMS_MACSEC.GET_FACTOR_LABEL +DBMS_MACSEC.GET_TRUST_LEVEL +DBMS_MACSEC.IS_SECURE_APPLICATION_ROLE +DBMS_MACSEC.ROLE_IS_ENABLED +DBMS_MACSEC.SET_FACTOR +DBMS_MACSEC_FUNCTION. +DBMS_MACSEC_FUNCTION.CREATE_FACTOR_FUNCTION +DBMS_MACSEC_FUNCTION.DROP_FACTOR_FUNCTION +DBMS_MACSEC_FUNCTION.TO_ORACLE_IDENTIFIER +DBMS_MACSEC_ROLES. +DBMS_MACSEC_ROLES.CAN_SET_ROLE +DBMS_MACSEC_ROLES.SET_ROLE +DBMS_MACSEC_RULES. +DBMS_MACSEC_RULES.EVALUATE +DBMS_MACSEC_RULES.EVALUATE_TR +DBMS_MACSEC_RULES.EVALUATE_WR +DBMS_MACUTL. +DBMS_MACUTL.ALTER_SYSTEM_DUMP_ALLOWED +DBMS_MACUTL.ALTER_SYSTEM_DUMP_VARCHAR +DBMS_MACUTL.CHECK_DVSYS_DML_ALLOWED +DBMS_MACUTL.CHECK_FULL_DVAUTH +DBMS_MACUTL.CHECK_GOLDENGATE_ADMIN +DBMS_MACUTL.CHECK_GOLDENGATE_REDO_ACCESS +DBMS_MACUTL.CHECK_STREAMS_ADMIN +DBMS_MACUTL.CHECK_TAB_DVAUTH +DBMS_MACUTL.CHECK_TS_DVAUTH +DBMS_MACUTL.CHECK_XSTREAM_ADMIN +DBMS_MACUTL.DECODE_AUDIT_OPTIONS +DBMS_MACUTL.GET_CODE_ID +DBMS_MACUTL.GET_CODE_VALUE +DBMS_MACUTL.GET_DAY +DBMS_MACUTL.GET_EVENT_STATUS +DBMS_MACUTL.GET_FACTOR_CONTEXT +DBMS_MACUTL.GET_HOUR +DBMS_MACUTL.GET_MESSAGE_LABEL +DBMS_MACUTL.GET_MINUTE +DBMS_MACUTL.GET_MONTH +DBMS_MACUTL.GET_SECOND +DBMS_MACUTL.GET_SQL_TEXT +DBMS_MACUTL.GET_YEAR +DBMS_MACUTL.IN_CALL_STACK +DBMS_MACUTL.IS_ALPHA +DBMS_MACUTL.IS_DIGIT +DBMS_MACUTL.IS_DVSYS_OWNER +DBMS_MACUTL.IS_DV_ENABLED +DBMS_MACUTL.IS_DV_ENABLED_VARCHAR +DBMS_MACUTL.IS_OID_ENABLED_OLS +DBMS_MACUTL.IS_OLS_INSTALLED +DBMS_MACUTL.IS_OLS_INSTALLED_VARCHAR +DBMS_MACUTL.OLS_LDAP_USER +DBMS_MACUTL.RAISE_ERROR +DBMS_MACUTL.RAISE_UNAUTHORIZED_OPERATION +DBMS_MACUTL.ROLE_GRANTED_ENABLED_VARCHAR +DBMS_MACUTL.SESSION_ENABLED_ROLE +DBMS_MACUTL.SESSION_ENABLED_ROLE_VARCHAR +DBMS_MACUTL.TO_ORACLE_IDENTIFIER +DBMS_MACUTL.UNIQUE_USER +DBMS_MACUTL.USER_HAS_OBJECT_PRIVILEGE +DBMS_MACUTL.USER_HAS_ROLE +DBMS_MACUTL.USER_HAS_ROLE_VARCHAR +DBMS_MACUTL.USER_HAS_SYSTEM_PRIVILEGE +DBMS_MACUTL.USER_HAS_SYSTEM_PRIV_VARCHAR +DBMS_MACUTL.VALIDATE_NAME +DBMS_MANAGEMENT_BOOTSTRAP. +DBMS_MANAGEMENT_BOOTSTRAP.CLEANUP_DB_REPLAY_OBJECTS +DBMS_MANAGEMENT_BOOTSTRAP.MODIFY_AWR_VIEW_SETTINGS +DBMS_MANAGEMENT_PACKS. +DBMS_MANAGEMENT_PACKS.CHECK_PACK_ENABLED +DBMS_MANAGEMENT_PACKS.MODIFY_AWR_SETTINGS +DBMS_MANAGEMENT_PACKS.PURGE +DBMS_MANAGEMENT_PACKS.PURGE_AWR +DBMS_MANAGEMENT_PACKS.PURGE_SQLSETS +DBMS_MANAGEMENT_PACKS.REPORT +DBMS_MASTER_TABLE. +DBMS_MASTER_TABLE.DROP_ORPHANED_JOBS +DBMS_MASTER_TABLE.DROP_ORPHANED_JOBS_BY_DATE +DBMS_MASTER_TABLE.EXPORT_INFO +DBMS_MASTER_TABLE.FORMAT_TABLE_DATA_MSG +DBMS_MASTER_TABLE.IMPORT_INFO +DBMS_MASTER_TABLE.IMPORT_MAX_CREATION_LEVEL +DBMS_MASTER_TABLE.IMPORT_NEXT_CREATION_LEVEL +DBMS_MASTER_TABLE.IMPORT_REMAINING_TABLES +DBMS_MASTER_TABLE.OBJECTS_LEFT_TO_IMPORT +DBMS_MASTER_TABLE.TABLE_OBJECTS_LEFT_TO_IMPORT +DBMS_MDX_ODBO. +DBMS_MDX_ODBO.CLOSE +DBMS_MDX_ODBO.CLOSE_SCHEMA_ROWSET +DBMS_MDX_ODBO.CONVERT_FORMAT_STRING +DBMS_MDX_ODBO.EXECUTE +DBMS_MDX_ODBO.GET_AXIS_DATA +DBMS_MDX_ODBO.GET_CELL_DATA +DBMS_MDX_ODBO.GET_DSO_PROPERTIES +DBMS_MDX_ODBO.GET_KEYWORDS +DBMS_MDX_ODBO.GET_MDSCHEMA_ACTIONS +DBMS_MDX_ODBO.GET_MDSCHEMA_CUBES +DBMS_MDX_ODBO.GET_MDSCHEMA_DIMENSIONS +DBMS_MDX_ODBO.GET_MDSCHEMA_FUNCTIONS +DBMS_MDX_ODBO.GET_MDSCHEMA_HIERARCHIES +DBMS_MDX_ODBO.GET_MDSCHEMA_LEVELS +DBMS_MDX_ODBO.GET_MDSCHEMA_MEASURES +DBMS_MDX_ODBO.GET_MDSCHEMA_MEMBERS +DBMS_MDX_ODBO.GET_MDSCHEMA_PROPERTIES +DBMS_MDX_ODBO.GET_MDSCHEMA_ROWSET_MAX +DBMS_MDX_ODBO.GET_MDSCHEMA_SETS +DBMS_MDX_ODBO.GET_MDX_DATE_TYPE +DBMS_MDX_ODBO.GET_MDX_FUNCTION_NAMES +DBMS_MDX_ODBO.GET_MDX_KEYWORD_NAMES +DBMS_MDX_ODBO.GET_MDX_NUMBER_TYPE +DBMS_MDX_ODBO.GET_MDX_PROPERTY_VALUES +DBMS_MDX_ODBO.GET_SCHEMA_ROWSET +DBMS_MDX_ODBO.MDX_COMPONENT_ID +DBMS_MDX_ODBO.MDX_DATATYPE +DBMS_MDX_ODBO.MDX_DIMENSION_TYPE +DBMS_MDX_ODBO.MDX_GET_DIMENSION_CARDINALITY +DBMS_MDX_ODBO.MDX_GET_HIERARCHY_CARDINALITY +DBMS_MDX_ODBO.MDX_GET_LEVEL_CARDINALITY +DBMS_MDX_ODBO.MDX_GET_MEASURE_CARDINALITY +DBMS_MDX_ODBO.MDX_HIERARCHY_INST_SELECTION +DBMS_MDX_ODBO.MDX_HIERARCHY_STRUCTURE +DBMS_MDX_ODBO.MDX_LEVEL_UNIQUE_SETTINGS +DBMS_MDX_ODBO.MDX_MEASURE_AGGREGATOR +DBMS_MDX_ODBO.MDX_ORIGIN +DBMS_MDX_ODBO.MDX_PROPERTY_CONTENT_TYPE +DBMS_MDX_ODBO.MDX_PROPERTY_ORIGIN +DBMS_MDX_ODBO.MDX_PROPERTY_TYPE +DBMS_MDX_ODBO.MDX_STRIP_COMPONENT +DBMS_MEMOPTIMIZE. +DBMS_MEMOPTIMIZE.DROP_OBJECT +DBMS_MEMOPTIMIZE.POPULATE +DBMS_METADATA. +DBMS_METADATA.ADD_TRANSFORM +DBMS_METADATA.CHECK_CONSTRAINT +DBMS_METADATA.CHECK_MATCH_TEMPLATE +DBMS_METADATA.CHECK_MATCH_TEMPLATE_LOB +DBMS_METADATA.CHECK_MATCH_TEMPLATE_PAR +DBMS_METADATA.CHECK_TYPE +DBMS_METADATA.CLOSE +DBMS_METADATA.CONVERT +DBMS_METADATA.CONVERT_TO_CANONICAL +DBMS_METADATA.FETCH_CLOB +DBMS_METADATA.FETCH_DDL +DBMS_METADATA.FETCH_DDL_TEXT +DBMS_METADATA.FETCH_OBJNUMS +DBMS_METADATA.FETCH_OBJNUMS_NAMES +DBMS_METADATA.FETCH_SORTED_OBJNUMS +DBMS_METADATA.FETCH_VAT_OBJNUMS +DBMS_METADATA.FETCH_XML +DBMS_METADATA.FETCH_XML_CLOB +DBMS_METADATA.FREE_CONTEXT_ENTRY +DBMS_METADATA.GET_ACTION_INSTANCE +DBMS_METADATA.GET_ACTION_SCHEMA +DBMS_METADATA.GET_ACTION_SYS +DBMS_METADATA.GET_CANONICAL_VSN +DBMS_METADATA.GET_CHECK_CONSTRAINT_NAME +DBMS_METADATA.GET_DDL +DBMS_METADATA.GET_DEPENDENT_DDL +DBMS_METADATA.GET_DEPENDENT_SXML +DBMS_METADATA.GET_DEPENDENT_XML +DBMS_METADATA.GET_DOMIDX_METADATA +DBMS_METADATA.GET_DPSTRM_MD +DBMS_METADATA.GET_EDITION +DBMS_METADATA.GET_EDITION_ID +DBMS_METADATA.GET_FK_CONSTRAINT_NAME +DBMS_METADATA.GET_GRANTED_DDL +DBMS_METADATA.GET_GRANTED_XML +DBMS_METADATA.GET_HASHCODE +DBMS_METADATA.GET_INDEX_INTCOL +DBMS_METADATA.GET_INDPART_TS +DBMS_METADATA.GET_JAVA_METADATA +DBMS_METADATA.GET_PARTN +DBMS_METADATA.GET_PLSQL_OPTIMIZE_LEVEL +DBMS_METADATA.GET_PLUGTS_BLK +DBMS_METADATA.GET_PREPOST_TABLE_ACT +DBMS_METADATA.GET_PROCOBJ +DBMS_METADATA.GET_PROCOBJ_GRANT +DBMS_METADATA.GET_QUERY +DBMS_METADATA.GET_STAT_COLNAME +DBMS_METADATA.GET_STAT_INDNAME +DBMS_METADATA.GET_SXML +DBMS_METADATA.GET_SXML_DDL +DBMS_METADATA.GET_SYSPRIVS +DBMS_METADATA.GET_VERSION +DBMS_METADATA.GET_XML +DBMS_METADATA.IN_TSNUM +DBMS_METADATA.IN_TSNUM_2 +DBMS_METADATA.IS_ACTIVE_REGISTRATION +DBMS_METADATA.IS_ATTR_VALID_ON_10 +DBMS_METADATA.IS_XDB_TRANS +DBMS_METADATA.NETWORK_CALLOUTS +DBMS_METADATA.NETWORK_FETCH_CLOB +DBMS_METADATA.NETWORK_FETCH_ERRORS +DBMS_METADATA.NETWORK_FETCH_PARSE +DBMS_METADATA.NETWORK_OPEN +DBMS_METADATA.NET_SET_DEBUG +DBMS_METADATA.OKTOEXP_2NDARY_TABLE +DBMS_METADATA.OPEN +DBMS_METADATA.OPENW +DBMS_METADATA.OPEN_GET_FK_CONSTRAINT_NAME +DBMS_METADATA.PARSE_CONDITION +DBMS_METADATA.PARSE_DEFAULT +DBMS_METADATA.PARSE_QUERY +DBMS_METADATA.PATCH_TYPEID +DBMS_METADATA.PUT +DBMS_METADATA.SET_COUNT +DBMS_METADATA.SET_DEBUG +DBMS_METADATA.SET_FILTER +DBMS_METADATA.SET_FK_CONSTRAINT_COL_PAIR +DBMS_METADATA.SET_PARAMETER +DBMS_METADATA.SET_PARSE_ITEM +DBMS_METADATA.SET_REMAP_PARAM +DBMS_METADATA.SET_TRANSFORM_PARAM +DBMS_METADATA.SET_XMLFORMAT +DBMS_METADATA.TRANSFORM_STRM +DBMS_METADATA_BUILD. +DBMS_METADATA_BUILD.CLOSE +DBMS_METADATA_BUILD.CREATE_FILTER +DBMS_METADATA_BUILD.CREATE_TYPE +DBMS_METADATA_BUILD.DROP_TYPE +DBMS_METADATA_BUILD.SET_DEBUG +DBMS_METADATA_BUILD.SET_DEBUG_PARAM +DBMS_METADATA_BUILD.SET_FILTER_PARAM +DBMS_METADATA_BUILD.SET_TYPE_PARAM +DBMS_METADATA_DIFF. +DBMS_METADATA_DIFF.ADD_DOCUMENT +DBMS_METADATA_DIFF.CLOSE +DBMS_METADATA_DIFF.COMPARE_ALTER +DBMS_METADATA_DIFF.COMPARE_ALTER_XML +DBMS_METADATA_DIFF.COMPARE_SXML +DBMS_METADATA_DIFF.FETCH_CLOB +DBMS_METADATA_DIFF.OPENC +DBMS_METADATA_DPBUILD. +DBMS_METADATA_DPBUILD.CREATE_DATABASE_EXPORT +DBMS_METADATA_DPBUILD.CREATE_SCHEMA_EXPORT +DBMS_METADATA_DPBUILD.CREATE_TABLE_EXPORT +DBMS_METADATA_DPBUILD.CREATE_TRANSPORTABLE_EXPORT +DBMS_METADATA_DPBUILD.SET_DEBUG +DBMS_METADATA_HACK. +DBMS_METADATA_HACK.CRE_DIR +DBMS_METADATA_HACK.CRE_XML_DIR +DBMS_METADATA_HACK.DELETESCHEMA +DBMS_METADATA_HACK.DROP_DIR +DBMS_METADATA_HACK.DROP_XML_DIR +DBMS_METADATA_HACK.GET_BFILE +DBMS_METADATA_HACK.GET_XML_BFILE +DBMS_METADATA_HACK.GET_XML_DIRNAME +DBMS_METADATA_HACK.LOAD_XSD +DBMS_METADATA_INT. +DBMS_METADATA_INT.ADD_TRANSFORM +DBMS_METADATA_INT.CLOSE +DBMS_METADATA_INT.COMPARE +DBMS_METADATA_INT.DO_PARSE_TRANSFORM +DBMS_METADATA_INT.DO_TRANSFORM +DBMS_METADATA_INT.GET_OBJECT_TYPE_INFO +DBMS_METADATA_INT.GET_PARSE_DELIM +DBMS_METADATA_INT.GET_QUERY +DBMS_METADATA_INT.GET_VIEW_FILTER_INPUTS +DBMS_METADATA_INT.GET_XML_INPUTS +DBMS_METADATA_INT.IS_ATTR_VALID_ON_10 +DBMS_METADATA_INT.MODIFY_VAT +DBMS_METADATA_INT.NEXT_OBJECT +DBMS_METADATA_INT.OPEN +DBMS_METADATA_INT.OPENC +DBMS_METADATA_INT.OPENW +DBMS_METADATA_INT.PRINT_CTXS +DBMS_METADATA_INT.SET_COUNT +DBMS_METADATA_INT.SET_DEBUG +DBMS_METADATA_INT.SET_FILTER +DBMS_METADATA_INT.SET_OBJECTS_FETCHED +DBMS_METADATA_INT.SET_PARSE_ITEM +DBMS_METADATA_INT.SET_REMAP_PARAM +DBMS_METADATA_INT.SET_TRANSFORM_ENGINE +DBMS_METADATA_INT.SET_TRANSFORM_PARAM +DBMS_METADATA_INT.SET_XMLFORMAT +DBMS_METADATA_UTIL. +DBMS_METADATA_UTIL.ARE_STYLESHEETS_LOADED +DBMS_METADATA_UTIL.BLOB2CLOB +DBMS_METADATA_UTIL.BLOCK_ESTIMATE +DBMS_METADATA_UTIL.BYTES_ALLOC +DBMS_METADATA_UTIL.CHECK_CONSTRAINT +DBMS_METADATA_UTIL.CHECK_TYPE +DBMS_METADATA_UTIL.CONVERT_TO_CANONICAL +DBMS_METADATA_UTIL.DELETE_XMLSCHEMA +DBMS_METADATA_UTIL.FETCH_STAT +DBMS_METADATA_UTIL.FUNC_INDEX_DEFAULT +DBMS_METADATA_UTIL.FUNC_INDEX_DEFAULTC +DBMS_METADATA_UTIL.FUNC_VIEW_DEFAULT +DBMS_METADATA_UTIL.FUNC_VIEW_DEFAULTC +DBMS_METADATA_UTIL.GET_ANC +DBMS_METADATA_UTIL.GET_ANYDATA_COLSET +DBMS_METADATA_UTIL.GET_ATTRNAME +DBMS_METADATA_UTIL.GET_ATTRNAME2 +DBMS_METADATA_UTIL.GET_AUDIT +DBMS_METADATA_UTIL.GET_AUDIT_DEFAULT +DBMS_METADATA_UTIL.GET_BASE_COL_NAME +DBMS_METADATA_UTIL.GET_BASE_COL_TYPE +DBMS_METADATA_UTIL.GET_BASE_INTCOL_NUM +DBMS_METADATA_UTIL.GET_CANONICAL_VSN +DBMS_METADATA_UTIL.GET_COL_PROPERTY +DBMS_METADATA_UTIL.GET_COMPAT_VSN +DBMS_METADATA_UTIL.GET_DB_VSN +DBMS_METADATA_UTIL.GET_EDITIONID +DBMS_METADATA_UTIL.GET_ENDIANNESS +DBMS_METADATA_UTIL.GET_FULLATTRNAME +DBMS_METADATA_UTIL.GET_INDEX_INTCOL +DBMS_METADATA_UTIL.GET_INDEX_INTCOL_PARSE +DBMS_METADATA_UTIL.GET_INDPART_TS +DBMS_METADATA_UTIL.GET_LATEST_VSN +DBMS_METADATA_UTIL.GET_LOB_PROPERTY +DBMS_METADATA_UTIL.GET_LOST_WRITE_PROTECTION +DBMS_METADATA_UTIL.GET_MARKER +DBMS_METADATA_UTIL.GET_OPEN_MODE +DBMS_METADATA_UTIL.GET_PART_LIST +DBMS_METADATA_UTIL.GET_PROCOBJ_ERRORS +DBMS_METADATA_UTIL.GET_QA_LRG_TYPE +DBMS_METADATA_UTIL.GET_REFRESH_ADD_DBA +DBMS_METADATA_UTIL.GET_REFRESH_ADD_USER +DBMS_METADATA_UTIL.GET_REFRESH_MAKE_DBA +DBMS_METADATA_UTIL.GET_REFRESH_MAKE_USER +DBMS_METADATA_UTIL.GET_SOURCE_LINES +DBMS_METADATA_UTIL.GET_STRM_MINVER +DBMS_METADATA_UTIL.GET_TABPART_TS +DBMS_METADATA_UTIL.GET_VERS_DPAPI +DBMS_METADATA_UTIL.GET_XMLCOLSET +DBMS_METADATA_UTIL.GET_XMLHIERARCHY +DBMS_METADATA_UTIL.GET_XMLTYPE_FMTS +DBMS_METADATA_UTIL.GLO +DBMS_METADATA_UTIL.HAS_TSTZ_COLS +DBMS_METADATA_UTIL.HAS_TSTZ_ELEMENTS +DBMS_METADATA_UTIL.ISXML +DBMS_METADATA_UTIL.IS_OMF +DBMS_METADATA_UTIL.IS_SCHEMANAME_EXISTS +DBMS_METADATA_UTIL.LOAD_STYLESHEETS +DBMS_METADATA_UTIL.LOAD_TEMP_TABLE +DBMS_METADATA_UTIL.LOAD_XSD +DBMS_METADATA_UTIL.LONG2CLOB +DBMS_METADATA_UTIL.LONG2VARCHAR +DBMS_METADATA_UTIL.LONG2VCMAX +DBMS_METADATA_UTIL.LONG2VCNT +DBMS_METADATA_UTIL.NULLTOCHR0 +DBMS_METADATA_UTIL.PARSE_TRIGGER_DEFINITION +DBMS_METADATA_UTIL.PATCH_TYPEID +DBMS_METADATA_UTIL.PUT_BOOL +DBMS_METADATA_UTIL.PUT_LINE +DBMS_METADATA_UTIL.REF_PAR_LEVEL +DBMS_METADATA_UTIL.REF_PAR_PARENT +DBMS_METADATA_UTIL.SAVE_PROCOBJ_ERRORS +DBMS_METADATA_UTIL.SET_BLOCK_ESTIMATE +DBMS_METADATA_UTIL.SET_DEBUG +DBMS_METADATA_UTIL.SET_FORCE_LOB_BE +DBMS_METADATA_UTIL.SET_FORCE_NO_ENCRYPT +DBMS_METADATA_UTIL.SET_MARKER +DBMS_METADATA_UTIL.SET_VERS_DPAPI +DBMS_METADATA_UTIL.TABLE_TSNUM +DBMS_METADATA_UTIL.VSN2NUM +DBMS_METADATA_UTIL.WRITE_CLOB +DBMS_MONITOR. +DBMS_MONITOR.CLIENT_ID_STAT_DISABLE +DBMS_MONITOR.CLIENT_ID_STAT_ENABLE +DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE +DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE +DBMS_MONITOR.DATABASE_TRACE_DISABLE +DBMS_MONITOR.DATABASE_TRACE_ENABLE +DBMS_MONITOR.SERV_MOD_ACT_STAT_DISABLE +DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE +DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE +DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE +DBMS_MONITOR.SESSION_TRACE_DISABLE +DBMS_MONITOR.SESSION_TRACE_ENABLE +DBMS_MVIEW_STATS. +DBMS_MVIEW_STATS.PURGE_REFRESH_STATS +DBMS_MVIEW_STATS.SET_MVREF_STATS_PARAMS +DBMS_MVIEW_STATS.SET_SYSTEM_DEFAULT +DBMS_MVIEW_STATS_INTERNAL. +DBMS_MVIEW_STATS_INTERNAL.PURGE_REFRESH_STATS +DBMS_MVIEW_STATS_INTERNAL.SET_MVREF_STATS_PARAMS +DBMS_MVIEW_STATS_INTERNAL.SET_SYSTEM_DEFAULT +DBMS_NETWORK_ACL_ADMIN. +DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE +DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE +DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACL +DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE +DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACL +DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL +DBMS_NETWORK_ACL_ADMIN.ASSIGN_WALLET_ACL +DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE +DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID +DBMS_NETWORK_ACL_ADMIN.CREATE_ACL +DBMS_NETWORK_ACL_ADMIN.DELETE_PRIVILEGE +DBMS_NETWORK_ACL_ADMIN.DROP_ACL +DBMS_NETWORK_ACL_ADMIN.GET_HOST_ACLIDS +DBMS_NETWORK_ACL_ADMIN.GET_WALLET_ACLID +DBMS_NETWORK_ACL_ADMIN.INSTANCE_CALLOUT_IMP +DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE +DBMS_NETWORK_ACL_ADMIN.REMOVE_WALLET_ACE +DBMS_NETWORK_ACL_ADMIN.SET_HOST_ACL +DBMS_NETWORK_ACL_ADMIN.SET_WALLET_ACL +DBMS_NETWORK_ACL_ADMIN.UNASSIGN_ACL +DBMS_NETWORK_ACL_ADMIN.UNASSIGN_WALLET_ACL +DBMS_NETWORK_ACL_UTILITY. +DBMS_NETWORK_ACL_UTILITY.CONTAINS_HOST +DBMS_NETWORK_ACL_UTILITY.DOMAINS +DBMS_NETWORK_ACL_UTILITY.DOMAIN_LEVEL +DBMS_NETWORK_ACL_UTILITY.EQUALS_HOST +DBMS_OBFUSCATION_TOOLKIT. +DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT +DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT +DBMS_OBFUSCATION_TOOLKIT.DES3GETKEY +DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT +DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT +DBMS_OBFUSCATION_TOOLKIT.DESGETKEY +DBMS_OBFUSCATION_TOOLKIT.MD5 +DBMS_OBFUSCATION_TOOLKIT_FFI. +DBMS_OBFUSCATION_TOOLKIT_FFI.DES3DECRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.DES3ENCRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.DESDECRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.DESENCRYPT +DBMS_OBFUSCATION_TOOLKIT_FFI.GETKEY +DBMS_OBFUSCATION_TOOLKIT_FFI.MD5 +DBMS_OBJECTS_APPS_UTILS. +DBMS_OBJECTS_APPS_UTILS.OWNER_MIGRATE_UPDATE_HASHCODE +DBMS_OBJECTS_APPS_UTILS.OWNER_MIGRATE_UPDATE_TDO +DBMS_OBJECTS_APPS_UTILS.RECOMPILE_TYPES +DBMS_OBJECTS_APPS_UTILS.SPLIT_SOURCE +DBMS_OBJECTS_APPS_UTILS.UPDATE_TYPES +DBMS_OBJECTS_UTILS. +DBMS_OBJECTS_UTILS.DELETE_ORPHAN_TYPEIDCOLS +DBMS_OBJECTS_UTILS.FIX_KOTTD_IMAGES +DBMS_OBJECTS_UTILS.PERSISTABLE_DOWNGRADE_CHECK +DBMS_OBJECTS_UTILS.UPGRADE_DICT_IMAGE +DBMS_ODCI. +DBMS_ODCI.CLEANUP +DBMS_ODCI.ESTIMATE_CPU_UNITS +DBMS_ODCI.GETMETADATA +DBMS_ODCI.GETTABLENAMES +DBMS_ODCI.RESTOREREFCURSOR +DBMS_ODCI.SAVEREFCURSOR +DBMS_ODCI.UPGRADE_SECOBJ +DBMS_OPTIM_BUNDLE. +DBMS_OPTIM_BUNDLE.ENABLE_OPTIM_FIXES +DBMS_OPTIM_BUNDLE.GETBUGSFORBUNDLE +DBMS_OPTIM_BUNDLE.LISTBUNDLESWITHFCFIXES +DBMS_OUTPUT. +DBMS_OUTPUT.DISABLE +DBMS_OUTPUT.ENABLE +DBMS_OUTPUT.GET_LINE +DBMS_OUTPUT.GET_LINES +DBMS_OUTPUT.NEW_LINE +DBMS_OUTPUT.PUT +DBMS_OUTPUT.PUT_LINE +DBMS_PARALLEL_EXECUTE. +DBMS_PARALLEL_EXECUTE.ADM_DROP_CHUNKS +DBMS_PARALLEL_EXECUTE.ADM_DROP_TASK +DBMS_PARALLEL_EXECUTE.ADM_STOP_TASK +DBMS_PARALLEL_EXECUTE.ADM_TASK_STATUS +DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_NUMBER_COL +DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_ROWID +DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_SQL +DBMS_PARALLEL_EXECUTE.CREATE_TASK +DBMS_PARALLEL_EXECUTE.DROP_CHUNKS +DBMS_PARALLEL_EXECUTE.DROP_TASK +DBMS_PARALLEL_EXECUTE.GENERATE_TASK_NAME +DBMS_PARALLEL_EXECUTE.GET_NUMBER_COL_CHUNK +DBMS_PARALLEL_EXECUTE.GET_ROWID_CHUNK +DBMS_PARALLEL_EXECUTE.PURGE_PROCESSED_CHUNKS +DBMS_PARALLEL_EXECUTE.RESUME_TASK +DBMS_PARALLEL_EXECUTE.RUN_INTERNAL_WORKER +DBMS_PARALLEL_EXECUTE.RUN_TASK +DBMS_PARALLEL_EXECUTE.SET_CHUNK_STATUS +DBMS_PARALLEL_EXECUTE.STOP_TASK +DBMS_PARALLEL_EXECUTE.TASK_STATUS +DBMS_PARALLEL_EXECUTE_INTERNAL. +DBMS_PARALLEL_EXECUTE_INTERNAL.ASSERT_CHUNK_EXISTS +DBMS_PARALLEL_EXECUTE_INTERNAL.ASSERT_TASK_EXISTS +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_CHUNKS_BY_NUMBER_COL +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_CHUNKS_BY_ROWID +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_CHUNKS_BY_SQL +DBMS_PARALLEL_EXECUTE_INTERNAL.CREATE_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.DEFAULT_PARALLELISM +DBMS_PARALLEL_EXECUTE_INTERNAL.DROP_ALL_TASKS +DBMS_PARALLEL_EXECUTE_INTERNAL.DROP_CHUNKS +DBMS_PARALLEL_EXECUTE_INTERNAL.DROP_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.GENERATE_TASK_NAME +DBMS_PARALLEL_EXECUTE_INTERNAL.GET_RANGE +DBMS_PARALLEL_EXECUTE_INTERNAL.OWNER_NAME_TO_NUM +DBMS_PARALLEL_EXECUTE_INTERNAL.PURGE_PROCESSED_CHUNKS +DBMS_PARALLEL_EXECUTE_INTERNAL.READ_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.RUN_INTERNAL_WORKER +DBMS_PARALLEL_EXECUTE_INTERNAL.SEQ_NEXT_VAL +DBMS_PARALLEL_EXECUTE_INTERNAL.SET_CHUNK_STATUS +DBMS_PARALLEL_EXECUTE_INTERNAL.STOP_TASK +DBMS_PARALLEL_EXECUTE_INTERNAL.TASK_STATUS +DBMS_PARALLEL_EXECUTE_INTERNAL.UNASSIGN_CHUNKS +DBMS_PARALLEL_EXECUTE_INTERNAL.UPDATE_TASK +DBMS_PART. +DBMS_PART.CLEANUP_GIDX +DBMS_PART.CLEANUP_GIDX_JOB +DBMS_PART.CLEANUP_ONLINE_OP +DBMS_PCLXUTIL. +DBMS_PCLXUTIL.BUILD_PART_INDEX +DBMS_PCLXUTIL_INTERNAL. +DBMS_PCLXUTIL_INTERNAL.BUILD_PART_INDEX +DBMS_PDB. +DBMS_PDB.CHECK_LOCKDOWN +DBMS_PDB.CHECK_NFT +DBMS_PDB.CHECK_PLUG_COMPATIBILITY +DBMS_PDB.CLEANUP_TASK +DBMS_PDB.CLEAR_PLUGIN_VIOLATIONS +DBMS_PDB.CONVERT_TO_LOCAL +DBMS_PDB.CREATEX$PERMANENTTABLES +DBMS_PDB.DESCRIBE +DBMS_PDB.DROPX$PERMANENTTABLES +DBMS_PDB.EXEC_AS_ORACLE_SCRIPT +DBMS_PDB.EXPORTRMANBACKUP +DBMS_PDB.IS_VALID_PATH +DBMS_PDB.NONCDB_TO_PDB +DBMS_PDB.POPULATESYNCTABLE +DBMS_PDB.RECOVER +DBMS_PDB.SET_DATA_LINKED +DBMS_PDB.SET_EXT_DATA_LINKED +DBMS_PDB.SET_METADATA_LINKED +DBMS_PDB.SET_PROFILE_EXPLICIT +DBMS_PDB.SET_ROLE_EXPLICIT +DBMS_PDB.SET_SHARING_NONE +DBMS_PDB.SET_USER_EXPLICIT +DBMS_PDB.SYNC_PDB +DBMS_PDB.UPDATE_CDBVW_STATS +DBMS_PDB.UPDATE_COMDATA_STATS +DBMS_PDB.UPDATE_DATALINK_STATS +DBMS_PDB.UPDATE_VERSION +DBMS_PDB_ALTER_SHARING. +DBMS_PDB_ALTER_SHARING.SET_DATA_LINKED +DBMS_PDB_ALTER_SHARING.SET_EXT_DATA_LINKED +DBMS_PDB_ALTER_SHARING.SET_METADATA_LINKED +DBMS_PDB_ALTER_SHARING.SET_PROFILE_EXPLICIT +DBMS_PDB_ALTER_SHARING.SET_ROLE_EXPLICIT +DBMS_PDB_ALTER_SHARING.SET_SHARING_NONE +DBMS_PDB_ALTER_SHARING.SET_USER_EXPLICIT +DBMS_PDB_APP_CON. +DBMS_PDB_CHECK_LOCKDOWN. +DBMS_PDB_EXEC_SQL. +DBMS_PDB_IS_VALID_PATH. +DBMS_PDB_NUM. +DBMS_PERF. +DBMS_PERF.REPORT_ADDM_WATCHDOG_XML +DBMS_PERF.REPORT_PERFHUB +DBMS_PERF.REPORT_PERFHUB_XML +DBMS_PERF.REPORT_SESSION +DBMS_PERF.REPORT_SESSION_XML +DBMS_PERF.REPORT_SQL +DBMS_PERF.REPORT_SQL_XML +DBMS_PICKLER. +DBMS_PICKLER.GET_FORMAT +DBMS_PICKLER.GET_TYPE_SHAPE +DBMS_PICKLER.UPDATE_THROUGH_REF +DBMS_PIPE. +DBMS_PIPE.CREATE_PIPE +DBMS_PIPE.NEXT_ITEM_TYPE +DBMS_PIPE.PACK_MESSAGE +DBMS_PIPE.PACK_MESSAGE_RAW +DBMS_PIPE.PACK_MESSAGE_ROWID +DBMS_PIPE.PURGE +DBMS_PIPE.RECEIVE_MESSAGE +DBMS_PIPE.REMOVE_PIPE +DBMS_PIPE.RESET_BUFFER +DBMS_PIPE.SEND_MESSAGE +DBMS_PIPE.UNIQUE_SESSION_NAME +DBMS_PIPE.UNPACK_MESSAGE +DBMS_PIPE.UNPACK_MESSAGE_RAW +DBMS_PIPE.UNPACK_MESSAGE_ROWID +DBMS_PITR. +DBMS_PITR.ADJUSTCOMPATIBILITY +DBMS_PITR.BEGINEXPORT +DBMS_PITR.BEGINIMPORT +DBMS_PITR.BEGINTABLESPACE +DBMS_PITR.COMMITPITR +DBMS_PITR.DOFILEVERIFY +DBMS_PITR.ENDIMPORT +DBMS_PITR.ENDTABLESPACE +DBMS_PITR.GETLINE +DBMS_PITR.SELECTBLOCK +DBMS_PITR.SELECTTABLESPACE +DBMS_PLSQL_CODE_COVERAGE. +DBMS_PLSQL_CODE_COVERAGE.CREATE_COVERAGE_TABLES +DBMS_PLSQL_CODE_COVERAGE.START_COVERAGE +DBMS_PLSQL_CODE_COVERAGE.STOP_COVERAGE +DBMS_PLUGTS. +DBMS_PLUGTS.BEGINEXPORT +DBMS_PLUGTS.BEGINEXPTABLESPACE +DBMS_PLUGTS.BEGINIMPORT +DBMS_PLUGTS.BEGINIMPTABLESPACE +DBMS_PLUGTS.CHECKCOMPTYPE +DBMS_PLUGTS.CHECKDATAFILE +DBMS_PLUGTS.CHECKPLUGGABLE +DBMS_PLUGTS.CHECKUSER +DBMS_PLUGTS.COMMITPLUGGABLE +DBMS_PLUGTS.ENDIMPORT +DBMS_PLUGTS.ENDIMPTABLESPACE +DBMS_PLUGTS.GETLINE +DBMS_PLUGTS.GET_DB_CHAR_PROPERTIES +DBMS_PLUGTS.INIT +DBMS_PLUGTS.KCP_CHECK_TTS_CHAR_SET_COMPAT +DBMS_PLUGTS.KCP_CHKCHAR +DBMS_PLUGTS.KCP_GETCOMP +DBMS_PLUGTS.MANAGEPLSQLTABLE +DBMS_PLUGTS.MAPTS +DBMS_PLUGTS.MAPUSER +DBMS_PLUGTS.NEWDATAFILE +DBMS_PLUGTS.NEWTABLESPACE +DBMS_PLUGTS.PLTS_NEWDATAFILE +DBMS_PLUGTS.PLUGGABLEUSER +DBMS_PLUGTS.RECLAIMTEMPSEGMENT +DBMS_PLUGTS.SELECTBLOCK +DBMS_PLUGTS.SENDTRACEMSG +DBMS_PLUGTS.SETDEBUG +DBMS_PLUGTS.TAB_FUNC +DBMS_PLUGTSP. +DBMS_PLUGTSP.PATCHDICTIONARY +DBMS_PLUGTSP.PATCHLOBPROP +DBMS_PLUGTSP.PATCHTABLEMETADATA +DBMS_PQ_INTERNAL. +DBMS_PQ_INTERNAL.CREATE_DB_LINK_FOR_HUB +DBMS_PREDICTIVE_ANALYTICS. +DBMS_PREDICTIVE_ANALYTICS.EXPLAIN +DBMS_PREDICTIVE_ANALYTICS.PREDICT +DBMS_PREDICTIVE_ANALYTICS.PROFILE +DBMS_PREPLUGIN_BACKUP. +DBMS_PREPLUGIN_BACKUP.DROPX$RMANTABLES +DBMS_PREPLUGIN_BACKUP.EXPORTX$RMANTABLES +DBMS_PREPLUGIN_BACKUP.EXPORTX$RMANTABLESASPDB +DBMS_PREPLUGIN_BACKUP.IMPORTX$RMANTABLES +DBMS_PREPLUGIN_BACKUP.IMPORTX$RMANTABLESASJOB +DBMS_PREPLUGIN_BACKUP.IMPORTX$RMANTABLESUSINGCONID +DBMS_PREPLUGIN_BACKUP.TRUNCATEX$RMANTABLES +DBMS_PREPROCESSOR. +DBMS_PREPROCESSOR.GET_POST_PROCESSED_SOURCE +DBMS_PREPROCESSOR.PRINT_POST_PROCESSED_SOURCE +DBMS_PRIVILEGE_CAPTURE. +DBMS_PRIVILEGE_CAPTURE.CAPTURE_DEPENDENCY_PRIVS +DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE +DBMS_PRIVILEGE_CAPTURE.DELETE_RUN +DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE +DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE +DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE +DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT +DBMS_PRIV_CAPTURE. +DBMS_PRIV_CAPTURE.CAPTURE_PRIVILEGE_USE +DBMS_PRIV_CAPTURE.SES_HAS_OBJ_PRIV +DBMS_PRIV_CAPTURE.SES_HAS_ROLE_PRIV +DBMS_PRIV_CAPTURE.SES_HAS_SYS_PRIV +DBMS_PROCESS. +DBMS_PROCESS.CONFIGURE_POOL +DBMS_PROCESS.START_POOL +DBMS_PROCESS.STOP_POOL +DBMS_PROFILER. +DBMS_PROFILER.FLUSH_DATA +DBMS_PROFILER.GET_VERSION +DBMS_PROFILER.INTERNAL_VERSION_CHECK +DBMS_PROFILER.PAUSE_PROFILER +DBMS_PROFILER.RESUME_PROFILER +DBMS_PROFILER.ROLLUP_RUN +DBMS_PROFILER.ROLLUP_UNIT +DBMS_PROFILER.START_PROFILER +DBMS_PROFILER.STOP_PROFILER +DBMS_PROPAGATION_ADM. +DBMS_PROPAGATION_ADM.ALTER_PROPAGATION +DBMS_PROPAGATION_ADM.CREATE_PROPAGATION +DBMS_PROPAGATION_ADM.DROP_PROPAGATION +DBMS_PROPAGATION_ADM.START_PROPAGATION +DBMS_PROPAGATION_ADM.STOP_PROPAGATION +DBMS_PROPAGATION_INTERNAL. +DBMS_PROPAGATION_INTERNAL.ALTER_PROPAGATION +DBMS_PROPAGATION_INTERNAL.CLEAR_PROP_ABORT_ALERT +DBMS_PROPAGATION_INTERNAL.CREATE_PROPAGATION +DBMS_PROPAGATION_INTERNAL.DROP_PROPAGATION +DBMS_PROPAGATION_INTERNAL.RAISE_PROP_ABORTED_ALERT_JOBID +DBMS_PROPAGATION_INTERNAL.START_PROPAGATION +DBMS_PROPAGATION_INTERNAL.STOP_PROPAGATION +DBMS_PRVTAQIM. +DBMS_PRVTAQIM.AQ_PATCH_CMT_TIME +DBMS_PRVTAQIM.AQ_PATCH_DEQUEUELOG_TABLE +DBMS_PRVTAQIM.AQ_PATCH_HISTORY +DBMS_PRVTAQIM.AQ_PATCH_IOT +DBMS_PRVTAQIM.AQ_PATCH_SIGNATURE +DBMS_PRVTAQIM.AQ_PATCH_TIMEMGR +DBMS_PRVTAQIM.BUFQ_VIEW_PARAMS +DBMS_PRVTAQIM.COMPRESS_IOT +DBMS_PRVTAQIM.CREATE_BASE_VIEW +DBMS_PRVTAQIM.CREATE_BASE_VIEW10_1_0 +DBMS_PRVTAQIM.CREATE_BASE_VIEW11_1_0 +DBMS_PRVTAQIM.CREATE_BASE_VIEW11_2_0 +DBMS_PRVTAQIM.CREATE_BASE_VIEW_12101 +DBMS_PRVTAQIM.CREATE_BASE_VIEW_12C +DBMS_PRVTAQIM.CREATE_COMMIT_TIME_IOT +DBMS_PRVTAQIM.CREATE_DEQUEUE_IOT +DBMS_PRVTAQIM.CREATE_DEQUEUE_LOG +DBMS_PRVTAQIM.CREATE_DEQ_VIEW +DBMS_PRVTAQIM.CREATE_DEQ_VIEW_PRE11_2 +DBMS_PRVTAQIM.CREATE_HISTORY_IOT +DBMS_PRVTAQIM.CREATE_SIGNATURE_IOT +DBMS_PRVTAQIM.CREATE_TIMEMGMT_IOT +DBMS_PRVTAQIM.DOWNGRADE_QUEUE_TABLE +DBMS_PRVTAQIM.DROP_COMMIT_TIME_IOT +DBMS_PRVTAQIM.DROP_DEQUEUE_IOT +DBMS_PRVTAQIM.DROP_DEQUEUE_LOG +DBMS_PRVTAQIM.DROP_HISTORY_IOT +DBMS_PRVTAQIM.DROP_QUEUE +DBMS_PRVTAQIM.DROP_SIGNATURE_IOT +DBMS_PRVTAQIM.DROP_TIMEMGMT_IOT +DBMS_PRVTAQIM.UNCOMPRESS_IOT +DBMS_PRVTAQIM.UPDATE_IOT_MSG_ROWID +DBMS_PRVTAQIM.UPGRADE_QUEUE_TABLE +DBMS_PRVTAQIM.USER_DATA_COL +DBMS_PRVTAQIP. +DBMS_PRVTAQIP.ALTER_PROPAGATION_SCHEDULE +DBMS_PRVTAQIP.CREATE_PROP_TABLE_102 +DBMS_PRVTAQIP.CRT_XMLCMT_REQ +DBMS_PRVTAQIP.CRT_XMLRBK_REQ +DBMS_PRVTAQIP.CRT_XMLSEQ_REQ +DBMS_PRVTAQIP.CRT_XMLTYP_REQ +DBMS_PRVTAQIP.DEQ_NFY_QUEUE_102 +DBMS_PRVTAQIP.DISABLE_PROPAGATION_SCHEDULE +DBMS_PRVTAQIP.ENABLE_PROPAGATION_SCHEDULE +DBMS_PRVTAQIP.ENQ_NFY_QUEUE_102 +DBMS_PRVTAQIP.GET_SCHED_TYPE +DBMS_PRVTAQIP.GET_SEQNO_HTTP +DBMS_PRVTAQIP.HTTP_COMMIT +DBMS_PRVTAQIP.HTTP_PUSH +DBMS_PRVTAQIP.HTTP_ROLLBACK +DBMS_PRVTAQIP.IS_PROTO_SSL +DBMS_PRVTAQIP.I_UNSCHED_PROP +DBMS_PRVTAQIP.KWQP_3GL_MODPSENTRY +DBMS_PRVTAQIP.NEEDS_RECOVERY +DBMS_PRVTAQIP.RECOVER_PROPAGATION +DBMS_PRVTAQIP.RESUBMIT_JOBS_102 +DBMS_PRVTAQIP.SCHEDULE_PROPAGATION +DBMS_PRVTAQIP.TRANS_SCHED_INFO +DBMS_PRVTAQIP.TRUNCATE_PENDING_MESSAGES +DBMS_PRVTAQIP.TYPE_MATCHES +DBMS_PRVTAQIP.UPDATE_AQS_INSTANCE_102 +DBMS_PRVTAQIP.UPDATE_PROPJOB_AFFINITY_102 +DBMS_PRVTAQIP.UPDATE_SCHEDULE +DBMS_PRVTAQIP.UPDATE_SCHEDULE_CLEAR_ERROR +DBMS_PRVTAQIP.WRITE_REQUEST +DBMS_PRVTAQIP.WRITE_TRACE +DBMS_PRVTAQIS. +DBMS_PRVTAQIS.ADD_ADDRESS +DBMS_PRVTAQIS.ADD_PROXY +DBMS_PRVTAQIS.ADD_QUEUE_RULE +DBMS_PRVTAQIS.ADD_RCPT +DBMS_PRVTAQIS.ADD_RS_EXPDEP +DBMS_PRVTAQIS.ADD_SUBSCRIBER +DBMS_PRVTAQIS.ADD_SUBSCRIBER_RULE +DBMS_PRVTAQIS.ADD_TO_EXPDEP +DBMS_PRVTAQIS.AGENTID +DBMS_PRVTAQIS.AGENT_EXISTS +DBMS_PRVTAQIS.ALTER_SUBSCRIBER +DBMS_PRVTAQIS.AQ_PATCH_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.CANON_SUBTAB_RSNAME +DBMS_PRVTAQIS.CHECK_AGENT_NAME +DBMS_PRVTAQIS.CHK_SUB_ADD_BUFFER +DBMS_PRVTAQIS.CREATE_90_RULES_VIEW +DBMS_PRVTAQIS.CREATE_QTAB_EVCTX +DBMS_PRVTAQIS.CREATE_QUEUE_RULE_SET +DBMS_PRVTAQIS.CREATE_RULES_VIEW +DBMS_PRVTAQIS.CREATE_SUBSCRIBER_SEQUENCE +DBMS_PRVTAQIS.CREATE_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.CREATE_SUBSCRIBER_VIEW +DBMS_PRVTAQIS.DELETE_REMOVED_SUBSCRIBERS +DBMS_PRVTAQIS.DOWNGRADE_92_90 +DBMS_PRVTAQIS.DOWNGRADE_QT_RULESUB_MSGS +DBMS_PRVTAQIS.DOWNGRADE_RULESUB_MSGS +DBMS_PRVTAQIS.DOWNGRADE_RULE_FRM10I +DBMS_PRVTAQIS.DOWNGRADE_SUBSCRIBERS +DBMS_PRVTAQIS.DROP_QTAB_EVCTX +DBMS_PRVTAQIS.DROP_QUEUE_DEFAULT_RULESETS +DBMS_PRVTAQIS.DROP_QUEUE_NPRS +DBMS_PRVTAQIS.DROP_QUEUE_RULE +DBMS_PRVTAQIS.DROP_QUEUE_RULE_SET +DBMS_PRVTAQIS.DROP_QUEUE_SUBSCRIBERS +DBMS_PRVTAQIS.DROP_RULES_VIEW +DBMS_PRVTAQIS.DROP_SUBSCRIBER +DBMS_PRVTAQIS.DROP_SUBSCRIBER_SEQUENCE +DBMS_PRVTAQIS.DROP_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.DROP_SUBSCRIBER_VIEW +DBMS_PRVTAQIS.FIX_SUBSCRIBER_TABLES_2424746 +DBMS_PRVTAQIS.INSERT_DUMMY_ROW +DBMS_PRVTAQIS.PATCH_PRE92_SUBSCRIBERS +DBMS_PRVTAQIS.PATCH_RSUB_EXPDEP +DBMS_PRVTAQIS.PATCH_RULESET_COLUMN +DBMS_PRVTAQIS.PATCH_SUBTAB_COLUMN +DBMS_PRVTAQIS.PATCH_SUBTAB_OPERATIONS +DBMS_PRVTAQIS.POPULATE_SYS_SUBSCRIBER_TABLE +DBMS_PRVTAQIS.QTAB_ADD_BUFFER +DBMS_PRVTAQIS.QUEUE_SUBSCRIBERS +DBMS_PRVTAQIS.RULE_SUBSCRIBERS_EXIST +DBMS_PRVTAQIS.SUBID_REPLICATE +DBMS_PRVTAQIS.SUBID_REPLICATE_INT +DBMS_PRVTAQIS.UPDATE_SUBTAB_ADDR +DBMS_PRVTAQIS.UPGRADE_90_92 +DBMS_PRVTAQIS.UPGRADE_QT_RULESUB_MSGS +DBMS_PRVTAQIS.UPGRADE_RULESUB_MSGS +DBMS_PRVTAQIS.UPGRADE_RULE_10I +DBMS_PRVTAQIS.UPGRADE_SUBSCRIBERS +DBMS_PRVTRMIE. +DBMS_PRVTRMIE.APPEND_BOOLEAN_ARG +DBMS_PRVTRMIE.APPEND_NUMBER_ARG +DBMS_PRVTRMIE.APPEND_STRING_ARG +DBMS_PRVTRMIE.BEGIN_PROCEDURE_EXPORT +DBMS_PRVTRMIE.CACHE_OBJ_GRANTS +DBMS_PRVTRMIE.CHECK_COMPATIBILITY +DBMS_PRVTRMIE.CLEAR_OBJ_GRANTS +DBMS_PRVTRMIE.END_PROCEDURE_EXPORT +DBMS_PRVTRMIE.GET_CONSUMER_GRP +DBMS_PRVTRMIE.GET_GROUP_MAPPINGS +DBMS_PRVTRMIE.GET_MAPPING_PRIORITY +DBMS_PRVTRMIE.GET_OBJ_GRANTS +DBMS_PRVTRMIE.GET_PLAN_DIRECTIVES +DBMS_PRVTRMIE.GET_RESOURCE_PLAN +DBMS_PRVTRMIE.IS_SYS_MANAGED +DBMS_PRVTRMIE.WRAP_WITH_ERROR_HANDLING +DBMS_PRVTRMIE.WRAP_WITH_EXECUTE_IMMEDIATE +DBMS_PRVTSQDS. +DBMS_PRVTSQDS.ADDQUERULE +DBMS_PRVTSQDS.ALTERSUBRULE +DBMS_PRVTSQDS.CHECKANDDROPRULE +DBMS_PRVTSQDS.CHECKDUPLRULECOND +DBMS_PRVTSQDS.CREATEEXPIMPDEP +DBMS_PRVTSQDS.CREATESQRULESET +DBMS_PRVTSQDS.CREATETMT +DBMS_PRVTSQDS.CREATE_RULE_SEQUENCE +DBMS_PRVTSQDS.DROPQUERULE +DBMS_PRVTSQDS.DROPTMT +DBMS_PRVTSQDS.DROP_RULE_SEQUENCE +DBMS_PRVTSQDS.GETNUMQUESAMERULE +DBMS_PRVTSQDS.GETOBJNUMBER +DBMS_PRVTSQDS.GETQUEUERULESET +DBMS_PRVTSQIS. +DBMS_PRVTSQIS.ADD_CHILD_SUB +DBMS_PRVTSQIS.ADD_CHILD_SUBSCRIBER +DBMS_PRVTSQIS.ADD_DURABLE_SUB +DBMS_PRVTSQIS.ADD_NON_DURABLE_SUB +DBMS_PRVTSQIS.ADD_SUBSCRIBER_12G +DBMS_PRVTSQIS.AGENT_EXISTS +DBMS_PRVTSQIS.ALTER_SUBSCRIBER_12G +DBMS_PRVTSQIS.CHILD_SUB_EXISTS +DBMS_PRVTSQIS.CREATE_SUBSCRIBER_VIEW +DBMS_PRVTSQIS.DROP_SUBSCRIBER_VIEW +DBMS_PRVTSQIS.DURABLE_SUB_EXISTS +DBMS_PRVTSQIS.GETDURSUBMETADATA +DBMS_PRVTSQIS.NON_DURABLE_SUB_EXISTS +DBMS_PRVTSQIS.REMOVE_ALL_CHILD +DBMS_PRVTSQIS.REMOVE_CHILD +DBMS_PRVTSQIS.REMOVE_SUBSCRIBER_12G +DBMS_PRVTSQIS.SUBMATCH +DBMS_PRVTSQIS.SUBSCRIPTION_EXISTS +DBMS_PRVT_TRACE. +DBMS_PRVT_TRACE.FORCE_VERBOSE +DBMS_PRVT_TRACE.SET_TRACE_EVENT +DBMS_PRVT_TRACE.TRACE +DBMS_PRVT_TRACE.TRACE_ENTER_PROCEDURE +DBMS_PRVT_TRACE.TRACE_EXIT_PROCEDURE +DBMS_PRVT_TRACE.TRACE_EXPRESSION +DBMS_PRVT_TRACE.TRACE_LONG_EXPRESSION +DBMS_PRVT_TRACE.TRACE_PRINT_EXCEPTION +DBMS_PRVT_TRACE.TRACE_RAISE_EXCEPTION +DBMS_PRVT_TRACE.UNFORCE_VERBOSE +DBMS_PSP. +DBMS_PSP.ADD_IN_MEMORY_PAGE +DBMS_PSP.ADD_IN_MEMORY_PAGES +DBMS_PSP.CLEAR_IN_MEMORY_PAGES +DBMS_PSP.COMPILE_PAGE +DBMS_PSP.COMPILE_PAGES +DBMS_PSP.SET_DOCUMENT_TABLE +DBMS_PSWMG_IMPORT. +DBMS_PSWMG_IMPORT.IMPORT_HISTORY +DBMS_PSWMG_IMPORT.IMPORT_PSW_VERIFY_FN +DBMS_PSWMG_IMPORT.PURGE_HISTORY +DBMS_QOPATCH. +DBMS_QOPATCH.ADD_OINV_JOB +DBMS_QOPATCH.BODY_BUILD_HEADER +DBMS_QOPATCH.CHECK_PATCH_INSTALLED +DBMS_QOPATCH.CLEAN_METADATA +DBMS_QOPATCH.DROP_OINV_JOB +DBMS_QOPATCH.GET_OPATCH_BUGS +DBMS_QOPATCH.GET_OPATCH_COUNT +DBMS_QOPATCH.GET_OPATCH_DATA +DBMS_QOPATCH.GET_OPATCH_FILES +DBMS_QOPATCH.GET_OPATCH_IMAGE +DBMS_QOPATCH.GET_OPATCH_INSTALL_INFO +DBMS_QOPATCH.GET_OPATCH_LIST +DBMS_QOPATCH.GET_OPATCH_LSINVENTORY +DBMS_QOPATCH.GET_OPATCH_OLAYS +DBMS_QOPATCH.GET_OPATCH_PREQS +DBMS_QOPATCH.GET_OPATCH_XSLT +DBMS_QOPATCH.GET_PATCH_DETAILS +DBMS_QOPATCH.GET_PENDING_ACTIVITY +DBMS_QOPATCH.GET_SQLPATCH_STATUS +DBMS_QOPATCH.IS_PATCH_INSTALLED +DBMS_QOPATCH.LOAD_SQL_PATCHES +DBMS_QOPATCH.OPATCH_COMPARE_CURRENT +DBMS_QOPATCH.OPATCH_COMPARE_GOLD_IMAGE +DBMS_QOPATCH.OPATCH_COMPARE_NODES +DBMS_QOPATCH.OPATCH_CREATE_IMAGE +DBMS_QOPATCH.OPATCH_INV_REFRESH_JOB +DBMS_QOPATCH.PATCH_CONFLICT_DETECTION +DBMS_QOPATCH.REPLACE_DIRS_INT +DBMS_QOPATCH.REPLACE_LOGSCRPT_DIRS +DBMS_QOPATCH.SET_CURRENT_OPINST +DBMS_QOPATCH.SET_DEBUG +DBMS_QOPATCH.SKIP_SANITY_CHECK +DBMS_RANDOM. +DBMS_RANDOM.INITIALIZE +DBMS_RANDOM.NORMAL +DBMS_RANDOM.RANDOM +DBMS_RANDOM.RECORD_RANDOM_NUMBER +DBMS_RANDOM.REPLAY_RANDOM_NUMBER +DBMS_RANDOM.SEED +DBMS_RANDOM.STRING +DBMS_RANDOM.TERMINATE +DBMS_RANDOM.VALUE +DBMS_RAT_MASK. +DBMS_RAT_MASK.AWR_PURGE_BINDS +DBMS_RAT_MASK.CLEANUP_MASKING +DBMS_RAT_MASK.DBR_EXTRACT_DATA +DBMS_RAT_MASK.DBR_MASK_DATA +DBMS_RAT_MASK.GET_RAT_VERSION +DBMS_RAT_MASK.INITIALIZE_MASKING +DBMS_RAT_MASK.REMOVE_SPA_PEEKED_BINDS +DBMS_RAT_MASK.SPA_EXTRACT_DATA +DBMS_RAT_MASK.SPA_MASK_DATA +DBMS_RAT_MASK_INTERNAL. +DBMS_RAT_MASK_INTERNAL.I_AWR_PURGE_BINDS +DBMS_RAT_MASK_INTERNAL.I_CLEANUP_MASKING +DBMS_RAT_MASK_INTERNAL.I_DBR_EXTRACT_DATA +DBMS_RAT_MASK_INTERNAL.I_DBR_MASK_DATA +DBMS_RAT_MASK_INTERNAL.I_GET_RAT_VERSION +DBMS_RAT_MASK_INTERNAL.I_INITIALIZE_MASKING +DBMS_RAT_MASK_INTERNAL.I_REMOVE_SPA_PEEKED_BINDS +DBMS_RAT_MASK_INTERNAL.I_SPA_EXTRACT_DATA +DBMS_RAT_MASK_INTERNAL.I_SPA_MASK_DATA +DBMS_RCVMAN. +DBMS_RCVMAN.BMRADDCORRUPTTABLE +DBMS_RCVMAN.CLRSITENAME +DBMS_RCVMAN.COMPUTERECOVERYACTIONS +DBMS_RCVMAN.CREATEFAILURELIST +DBMS_RCVMAN.DBUNIQUENAMEISSTANDBY +DBMS_RCVMAN.DUMPPKGSTATE +DBMS_RCVMAN.DUMPSTATE +DBMS_RCVMAN.FINDARCHIVEDLOGBACKUP +DBMS_RCVMAN.FINDCONTROLFILEBACKUP +DBMS_RCVMAN.FINDLOGBREAKPOINT +DBMS_RCVMAN.FINDOFFLINERANGECOPY +DBMS_RCVMAN.FINDRANGEARCHIVEDLOGBACKUP +DBMS_RCVMAN.FINDSPFILEBACKUP +DBMS_RCVMAN.FINDVALIDBACKUPSET +DBMS_RCVMAN.GETACTUALDBINC +DBMS_RCVMAN.GETALBACKUPHISTORY +DBMS_RCVMAN.GETALLBACKUPSET +DBMS_RCVMAN.GETAPPLIEDAL +DBMS_RCVMAN.GETAPPLIEDSCN +DBMS_RCVMAN.GETARCHIVEDLOG +DBMS_RCVMAN.GETARCHIVEDLOGBACKUP +DBMS_RCVMAN.GETARCHIVEDNEXTSCN +DBMS_RCVMAN.GETBACKEDUPFILES +DBMS_RCVMAN.GETBACKUPHISTORY +DBMS_RCVMAN.GETBACKUPPIECE +DBMS_RCVMAN.GETBSBACKUPHISTORY +DBMS_RCVMAN.GETCHECKPOINT +DBMS_RCVMAN.GETCLONENAME +DBMS_RCVMAN.GETCONFIG +DBMS_RCVMAN.GETCONTROLFILEBACKUP +DBMS_RCVMAN.GETCONTROLFILECOPY +DBMS_RCVMAN.GETCOPYOFDATAFILE +DBMS_RCVMAN.GETCURRENTINCARNATION +DBMS_RCVMAN.GETDATAFILE +DBMS_RCVMAN.GETDATAFILECOPY +DBMS_RCVMAN.GETDBKEY +DBMS_RCVMAN.GETDBUNIQUENAME +DBMS_RCVMAN.GETDCBACKUPHISTORY +DBMS_RCVMAN.GETDFBACKUPHISTORY +DBMS_RCVMAN.GETDROPOSFILES +DBMS_RCVMAN.GETDROPSCN +DBMS_RCVMAN.GETENCRYPTTSCOUNT +DBMS_RCVMAN.GETFAILURE +DBMS_RCVMAN.GETINCARNATIONKEY +DBMS_RCVMAN.GETINCREMENTALSCN +DBMS_RCVMAN.GETMANUALREPAIR +DBMS_RCVMAN.GETMAXCOPYNO +DBMS_RCVMAN.GETMAXREDOSCN +DBMS_RCVMAN.GETMAXSCN +DBMS_RCVMAN.GETMINRCVSTARTSCN +DBMS_RCVMAN.GETNEXTAVAILABLESCN +DBMS_RCVMAN.GETOFFLINERANGECOPY +DBMS_RCVMAN.GETONLINELOG +DBMS_RCVMAN.GETPACKAGEVERSION +DBMS_RCVMAN.GETPARENTINCARNATION +DBMS_RCVMAN.GETPREPLUGINDF +DBMS_RCVMAN.GETPRIMARYDFNAME +DBMS_RCVMAN.GETPROXYCOPY +DBMS_RCVMAN.GETRCVREC +DBMS_RCVMAN.GETRECOVERYACTION +DBMS_RCVMAN.GETREDOLOGDELETIONPOLICY +DBMS_RCVMAN.GETREPAIR +DBMS_RCVMAN.GETREPAIROPTION +DBMS_RCVMAN.GETREPAIRPARMS +DBMS_RCVMAN.GETREPAIRSCRIPTNAME +DBMS_RCVMAN.GETREPAIRSTEP +DBMS_RCVMAN.GETREQUIREDSCN +DBMS_RCVMAN.GETRESTOREPOINT +DBMS_RCVMAN.GETRESTORERANGESET +DBMS_RCVMAN.GETRETENTIONPOLICY +DBMS_RCVMAN.GETSCNFORAPPLIEDPOLICY +DBMS_RCVMAN.GETSITEKEY +DBMS_RCVMAN.GETSITENAME +DBMS_RCVMAN.GETSPACERECL +DBMS_RCVMAN.GETSPFILEBACKUP +DBMS_RCVMAN.GETTEMPFILE +DBMS_RCVMAN.GETUNTILSCN +DBMS_RCVMAN.GETUNTILTIME +DBMS_RCVMAN.GETVALIDBACKUPSET +DBMS_RCVMAN.INITIALIZE +DBMS_RCVMAN.ISARCHIVEDLOGMISSING +DBMS_RCVMAN.ISBACKUPTYPEMATCH +DBMS_RCVMAN.ISBSRECCACHEMATCH +DBMS_RCVMAN.ISDEVICETYPEALLOCATED +DBMS_RCVMAN.ISINFAILURELIST +DBMS_RCVMAN.ISNOBACKUPPDB +DBMS_RCVMAN.ISPDBSCNORPHAN +DBMS_RCVMAN.ISRECLRECID +DBMS_RCVMAN.ISSTATUSMATCH +DBMS_RCVMAN.ISTRANSLATEDDBID +DBMS_RCVMAN.ISTRANSLATEDFNO +DBMS_RCVMAN.ISTRANSLATEDPDBID +DBMS_RCVMAN.LISTAPPLICATIONPDBS +DBMS_RCVMAN.LISTBACKUP +DBMS_RCVMAN.LISTGETAPPPDB +DBMS_RCVMAN.LISTGETARCHIVEDLOGBACKUP +DBMS_RCVMAN.LISTGETARCHIVEDLOGCOPY +DBMS_RCVMAN.LISTGETBACKUPSETFILES +DBMS_RCVMAN.LISTGETCONTROLFILEBACKUP +DBMS_RCVMAN.LISTGETCONTROLFILECOPY +DBMS_RCVMAN.LISTGETDATAFILEBACKUP +DBMS_RCVMAN.LISTGETDATAFILECOPY +DBMS_RCVMAN.LISTGETDBINCARNATION +DBMS_RCVMAN.LISTGETDBSITE +DBMS_RCVMAN.LISTGETPROXYARCHIVEDLOG +DBMS_RCVMAN.LISTGETPROXYDATAFILE +DBMS_RCVMAN.LISTGETRESTOREPOINT +DBMS_RCVMAN.LISTGETSPFILEBACKUP +DBMS_RCVMAN.LISTGETTABLESPACE +DBMS_RCVMAN.LISTROLLBACKSEGTABLESPACE +DBMS_RCVMAN.LISTTRANSLATEARCHIVEDLOGBACKUP +DBMS_RCVMAN.LISTTRANSLATEARCHIVEDLOGCOPY +DBMS_RCVMAN.LISTTRANSLATEBACKUPSETFILES +DBMS_RCVMAN.LISTTRANSLATECONTROLFILEBACKUP +DBMS_RCVMAN.LISTTRANSLATECONTROLFILECOPY +DBMS_RCVMAN.LISTTRANSLATEDATAFILEBACKUP +DBMS_RCVMAN.LISTTRANSLATEDATAFILECOPY +DBMS_RCVMAN.LISTTRANSLATEDBINCARNATION +DBMS_RCVMAN.LISTTRANSLATEDBSITE +DBMS_RCVMAN.LISTTRANSLATEPROXYARCHIVEDLOG +DBMS_RCVMAN.LISTTRANSLATEPROXYDATAFILE +DBMS_RCVMAN.LISTTRANSLATEPROXYDFRECID +DBMS_RCVMAN.LISTTRANSLATERESTOREPOINT +DBMS_RCVMAN.LISTTRANSLATESPFILEBACKUP +DBMS_RCVMAN.NUM2DISPLAYSIZE +DBMS_RCVMAN.PDBHASDATAFILE +DBMS_RCVMAN.PRINTRECOVERYACTIONS +DBMS_RCVMAN.REPORTGETDFDEL +DBMS_RCVMAN.REPORTTRANSLATEDFDEL +DBMS_RCVMAN.RESETALL +DBMS_RCVMAN.RESETDBKEY +DBMS_RCVMAN.RESETDEVICETYPE +DBMS_RCVMAN.RESETLOCALORSSITEKEY +DBMS_RCVMAN.RESETPDBIDLIST +DBMS_RCVMAN.RESETRECLRECID +DBMS_RCVMAN.RESETRESTORERANGEDEVTYP +DBMS_RCVMAN.RESETTHISBACKUPAGE +DBMS_RCVMAN.RESETUNTIL +DBMS_RCVMAN.SEC2DISPLAYTIME +DBMS_RCVMAN.SETALLFLAG +DBMS_RCVMAN.SETALLINCARNATIONS +DBMS_RCVMAN.SETARCHIVEDLOGRECORD +DBMS_RCVMAN.SETARCHIVEFILESCOPEATTRIBUTES +DBMS_RCVMAN.SETBACKUPFILESCOPEATTRIBUTES +DBMS_RCVMAN.SETBIGSCNAWARE +DBMS_RCVMAN.SETCANAPPLYANYREDO +DBMS_RCVMAN.SETCANCONVERTCF +DBMS_RCVMAN.SETCANHANDLETRANSPORTABLETBS +DBMS_RCVMAN.SETCOMPLETEDRANGE +DBMS_RCVMAN.SETCOMPUTERECOVERYACTIONMASKS +DBMS_RCVMAN.SETDATABASE +DBMS_RCVMAN.SETDBIDTRANSCLAUSE +DBMS_RCVMAN.SETDBINCKEY +DBMS_RCVMAN.SETDEBUGOFF +DBMS_RCVMAN.SETDEBUGON +DBMS_RCVMAN.SETDEVICETYPE +DBMS_RCVMAN.SETDEVICETYPEANY +DBMS_RCVMAN.SETFIRSTFULLBCKSCOPEATTRIBUTES +DBMS_RCVMAN.SETFROM +DBMS_RCVMAN.SETGETSINCELASTBACKEDAL +DBMS_RCVMAN.SETGUID +DBMS_RCVMAN.SETLIKEPATTERN +DBMS_RCVMAN.SETLOCALORSSITEKEY +DBMS_RCVMAN.SETNEEDOBSOLETEDATA +DBMS_RCVMAN.SETORSFILE +DBMS_RCVMAN.SETPDBID +DBMS_RCVMAN.SETRAFLAGS +DBMS_RCVMAN.SETRCVRECBACKUPAGE +DBMS_RCVMAN.SETRECLRECID +DBMS_RCVMAN.SETRECOVERYDESTFILE +DBMS_RCVMAN.SETREDOLOGDELETIONPOLICY +DBMS_RCVMAN.SETRESTORERANGEDEVTYP +DBMS_RCVMAN.SETSITENAME +DBMS_RCVMAN.SETSKIPOFFLINERANGEABOVESCN +DBMS_RCVMAN.SETSPARSENESS +DBMS_RCVMAN.SETSTANDBY +DBMS_RCVMAN.SETSTDBYCTRLSCN +DBMS_RCVMAN.SETTAG +DBMS_RCVMAN.SETTOLOG +DBMS_RCVMAN.SETUNTILLOG +DBMS_RCVMAN.SETUNTILRESETLOGS +DBMS_RCVMAN.SETUNTILSCN +DBMS_RCVMAN.SETUNTILTIME +DBMS_RCVMAN.SET_PACKAGE_CONSTANTS +DBMS_RCVMAN.SKIPTABLESPACE +DBMS_RCVMAN.STAMP2DATE +DBMS_RCVMAN.SV_GETSESSIONFROMTIMERANGE +DBMS_RCVMAN.SV_GETSESSIONKEY +DBMS_RCVMAN.SV_GETSESSIONUNTILTIMERANGE +DBMS_RCVMAN.SV_SETSESSIONKEY +DBMS_RCVMAN.SV_SETSESSIONTIMERANGE +DBMS_RCVMAN.TRANSLATEALLBACKUPSET +DBMS_RCVMAN.TRANSLATEALLDATAFILE +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGCANCEL +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGKEY +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGNAME +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGPATTERN +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGSCNRANGE +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGSEQRANGE +DBMS_RCVMAN.TRANSLATEARCHIVEDLOGTIMERANGE +DBMS_RCVMAN.TRANSLATEBACKUPFILE +DBMS_RCVMAN.TRANSLATEBACKUPPIECEBSKEY +DBMS_RCVMAN.TRANSLATEBACKUPPIECEGUID +DBMS_RCVMAN.TRANSLATEBACKUPPIECEHANDLE +DBMS_RCVMAN.TRANSLATEBACKUPPIECEKEY +DBMS_RCVMAN.TRANSLATEBACKUPPIECETAG +DBMS_RCVMAN.TRANSLATEBACKUPSETKEY +DBMS_RCVMAN.TRANSLATEBACKUPSETRECID +DBMS_RCVMAN.TRANSLATEBPBSKEYCANCEL +DBMS_RCVMAN.TRANSLATECONTROLFILECOPYKEY +DBMS_RCVMAN.TRANSLATECONTROLFILECOPYNAME +DBMS_RCVMAN.TRANSLATECONTROLFILECOPYTAG +DBMS_RCVMAN.TRANSLATECORRUPTLIST +DBMS_RCVMAN.TRANSLATEDATABASE +DBMS_RCVMAN.TRANSLATEDATAFILE +DBMS_RCVMAN.TRANSLATEDATAFILECANCEL +DBMS_RCVMAN.TRANSLATEDATAFILECOPY +DBMS_RCVMAN.TRANSLATEDATAFILECOPYFNO +DBMS_RCVMAN.TRANSLATEDATAFILECOPYKEY +DBMS_RCVMAN.TRANSLATEDATAFILECOPYNAME +DBMS_RCVMAN.TRANSLATEDATAFILECOPYTAG +DBMS_RCVMAN.TRANSLATEFAILURE +DBMS_RCVMAN.TRANSLATEMANUALREPAIR +DBMS_RCVMAN.TRANSLATEONLINELOGS +DBMS_RCVMAN.TRANSLATEPDB2NAME +DBMS_RCVMAN.TRANSLATEPDBGUID2NAME +DBMS_RCVMAN.TRANSLATEPDBNAME +DBMS_RCVMAN.TRANSLATEPREPLUGINDF +DBMS_RCVMAN.TRANSLATEPROXYCOPYGUID +DBMS_RCVMAN.TRANSLATEPROXYCOPYHANDLE +DBMS_RCVMAN.TRANSLATEPROXYCOPYKEY +DBMS_RCVMAN.TRANSLATEPROXYCOPYTAG +DBMS_RCVMAN.TRANSLATEREPAIR +DBMS_RCVMAN.TRANSLATEREPAIROPTION +DBMS_RCVMAN.TRANSLATEREPAIRPARMS +DBMS_RCVMAN.TRANSLATEREPAIRSTEP +DBMS_RCVMAN.TRANSLATESEEKBPBSKEY +DBMS_RCVMAN.TRANSLATETABLESPACE +DBMS_RCVMAN.TRANSLATETEMPFILE +DBMS_RCVMAN.TRIMRECOVERYACTIONS +DBMS_RCVMAN.VALIDATESTANDBYCONFIG +DBMS_RCVMAN.WASFILEOFFLINE +DBMS_RECOVERABLE_SCRIPT. +DBMS_RECOVERABLE_SCRIPT.ADD_FORWARD_BLOCK +DBMS_RECOVERABLE_SCRIPT.CREATE_SCRIPT +DBMS_RECOVERABLE_SCRIPT.DROP_SCRIPT +DBMS_RECOVERABLE_SCRIPT.GET_CUR_BLOCK_NUM +DBMS_RECOVERABLE_SCRIPT.INSERT_PARAM +DBMS_RECOVERABLE_SCRIPT.MODIFY_FORWARD_BLOCK +DBMS_RECOVERABLE_SCRIPT.MODIFY_UNDO_BLOCK +DBMS_RECOVERABLE_SCRIPT.RUN +DBMS_RECOVERABLE_SCRIPT.UPDATE_COMMENT +DBMS_RECOVERABLE_SCRIPT.UPDATE_STATUS +DBMS_RECO_SCRIPT_INT. +DBMS_RECO_SCRIPT_INT.ADD_FORWARD_BLOCK +DBMS_RECO_SCRIPT_INT.CREATE_SCRIPT +DBMS_RECO_SCRIPT_INT.GET_DBLINKS +DBMS_RECO_SCRIPT_INT.GET_ERROR_BLOCK_NUM +DBMS_RECO_SCRIPT_INT.GET_FORWARD_BLOCK +DBMS_RECO_SCRIPT_INT.GET_FORWARD_BLOCKS +DBMS_RECO_SCRIPT_INT.GET_SCRIPT_OWNER +DBMS_RECO_SCRIPT_INT.GET_UNDO_BLOCK +DBMS_RECO_SCRIPT_INT.GET_UNDO_BLOCKS +DBMS_RECO_SCRIPT_INT.INSERT_PARAM +DBMS_RECO_SCRIPT_INT.MODIFY_FORWARD_BLOCK +DBMS_RECO_SCRIPT_INT.MODIFY_UNDO_BLOCK +DBMS_RECO_SCRIPT_INT.RECORD_ERROR +DBMS_RECO_SCRIPT_INT.SYS_PURGE +DBMS_RECO_SCRIPT_INT.SYS_PURGE_LOCAL +DBMS_RECO_SCRIPT_INT.UPDATE_BLOCK_STATUS +DBMS_RECO_SCRIPT_INT.UPDATE_COMMENT +DBMS_RECO_SCRIPT_INT.UPDATE_DONE_BLOCK_NUM +DBMS_RECO_SCRIPT_INT.UPDATE_STATUS +DBMS_RECO_SCRIPT_INT.USER_PURGE +DBMS_RECO_SCRIPT_INVOK. +DBMS_RECO_SCRIPT_INVOK.CHECK_PRIVILEGES +DBMS_RECO_SCRIPT_INVOK.LOCAL_EXECUTE_BLOCK +DBMS_REDACT. +DBMS_REDACT.ADD_POLICY +DBMS_REDACT.ALTER_POLICY +DBMS_REDACT.APPLY_POLICY_EXPR_TO_COL +DBMS_REDACT.CREATE_POLICY_EXPRESSION +DBMS_REDACT.DISABLE_POLICY +DBMS_REDACT.DROP_POLICY +DBMS_REDACT.DROP_POLICY_EXPRESSION +DBMS_REDACT.ENABLE_POLICY +DBMS_REDACT.FPM_MASK +DBMS_REDACT.FPM_UNMASK +DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES +DBMS_REDACT.UPDATE_POLICY_EXPRESSION +DBMS_REDACT_INT. +DBMS_REDACT_INT.ADD_POLICY +DBMS_REDACT_INT.ALTER_POLICY +DBMS_REDACT_INT.APPLY_POLICY_EXPR_TO_COL +DBMS_REDACT_INT.CLEAR_POLICY_DESCRIPTIONS +DBMS_REDACT_INT.CREATE_POLICY_EXPRESSION +DBMS_REDACT_INT.DISABLE_POLICY +DBMS_REDACT_INT.DROP_POLICY +DBMS_REDACT_INT.DROP_POLICY_EXPRESSION +DBMS_REDACT_INT.ENABLE_POLICY +DBMS_REDACT_INT.FPM_MASK +DBMS_REDACT_INT.FPM_UNMASK +DBMS_REDACT_INT.SET_POLICY_COLUMN_DESCRIPTION +DBMS_REDACT_INT.SET_POLICY_DESCRIPTION +DBMS_REDACT_INT.UPDATE_FULL_REDACTION_VALUES +DBMS_REDACT_INT.UPDATE_POLICY_EXPRESSION +DBMS_REDEFINITION. +DBMS_REDEFINITION.ABORT_REDEF_TABLE +DBMS_REDEFINITION.ABORT_ROLLBACK +DBMS_REDEFINITION.ABORT_UPDATE +DBMS_REDEFINITION.CAN_REDEF_TABLE +DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS +DBMS_REDEFINITION.EXECUTE_UPDATE +DBMS_REDEFINITION.FINISH_REDEF_TABLE +DBMS_REDEFINITION.REDEF_TABLE +DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT +DBMS_REDEFINITION.ROLLBACK +DBMS_REDEFINITION.SET_PARAM +DBMS_REDEFINITION.START_REDEF_TABLE +DBMS_REDEFINITION.SYNC_INTERIM_TABLE +DBMS_REDEFINITION.UNREGISTER_DEPENDENT_OBJECT +DBMS_REDEFINITION_INTERNAL.ADD_DEP_ERRMSG +DBMS_REDEFINITION_INTERNAL.ADD_DEP_ERROR +DBMS_REDEFINITION_INTERNAL.CHECK_TRACE_EVENT +DBMS_REDEFINITION_INTERNAL.DELETE_DEP_ERROR +DBMS_REDEFINITION_INTERNAL.DO_REFRESH_DEP_MVS +DBMS_REDEFINITION_INTERNAL.FETCH_DDL +DBMS_REDEFINITION_INTERNAL.GENERATECOLMAP +DBMS_REDEFINITION_INTERNAL.GET_DEFAULTONNULL_COL +DBMS_REDEFINITION_INTERNAL.GET_DEFAULT_VALUE +DBMS_REDEFINITION_INTERNAL.GET_IDX_NAME +DBMS_REDEFINITION_INTERNAL.GET_IDX_SPARE4 +DBMS_REDEFINITION_INTERNAL.GET_INTERIM_TAB_NAME +DBMS_REDEFINITION_INTERNAL.GET_INT_OBJ_NAME +DBMS_REDEFINITION_INTERNAL.GET_MVLOG_NAME +DBMS_REDEFINITION_INTERNAL.GET_PARTITION_CNT +DBMS_REDEFINITION_INTERNAL.GET_REDEF_ID +DBMS_REDEFINITION_INTERNAL.GET_SUPPLEMENTAL_LOG_GRP_NAME +DBMS_REDEFINITION_INTERNAL.GET_SUPPLEMENTAL_LOG_TYPE +DBMS_REDEFINITION_INTERNAL.GET_TABLESPACE +DBMS_REDEFINITION_INTERNAL.GET_TABLE_OBJID +DBMS_REDEFINITION_INTERNAL.GET_TAB_PROPERTY +DBMS_REDEFINITION_INTERNAL.GET_USER +DBMS_REDEFINITION_INTERNAL.GET_USER_ID +DBMS_REDEFINITION_INTERNAL.HAS_SDO_IDX +DBMS_REDEFINITION_INTERNAL.HAS_VIRTUAL_COL +DBMS_REDEFINITION_INTERNAL.IS_BITMAP_IDX +DBMS_REDEFINITION_INTERNAL.IS_CONTRAINT_ON_NTAB +DBMS_REDEFINITION_INTERNAL.IS_CTX_IDX +DBMS_REDEFINITION_INTERNAL.IS_IDX_ANALYZED +DBMS_REDEFINITION_INTERNAL.IS_IDX_FROM_CONSTRAINT +DBMS_REDEFINITION_INTERNAL.IS_IDX_FROM_PK_CONSTRAINT +DBMS_REDEFINITION_INTERNAL.IS_INDEX_COMPOSITE_PARTITIONED +DBMS_REDEFINITION_INTERNAL.IS_INDEX_ON_NESTED_TAB +DBMS_REDEFINITION_INTERNAL.IS_INDEX_SINGLE_COL_KEY +DBMS_REDEFINITION_INTERNAL.IS_INDEX_XML +DBMS_REDEFINITION_INTERNAL.IS_IOT_INDEX +DBMS_REDEFINITION_INTERNAL.IS_JOIN_IDX +DBMS_REDEFINITION_INTERNAL.IS_NESTIOT +DBMS_REDEFINITION_INTERNAL.IS_NOTNULL_CONSTRAINT +DBMS_REDEFINITION_INTERNAL.IS_PARTITIONED_IDX +DBMS_REDEFINITION_INTERNAL.IS_PART_VALID +DBMS_REDEFINITION_INTERNAL.IS_PK_GENERATED_IDX +DBMS_REDEFINITION_INTERNAL.IS_PK_IOT +DBMS_REDEFINITION_INTERNAL.IS_REG_DEP_OBJ +DBMS_REDEFINITION_INTERNAL.IS_SDO_IDX +DBMS_REDEFINITION_INTERNAL.IS_TABLE_AUTO_PARTITIONED +DBMS_REDEFINITION_INTERNAL.IS_TABLE_COMPOSITE_PARTITIONED +DBMS_REDEFINITION_INTERNAL.IS_TABLE_NAME_TAKEN +DBMS_REDEFINITION_INTERNAL.IS_TABLE_OBJECT +DBMS_REDEFINITION_INTERNAL.IS_TABLE_PARTITIONED +DBMS_REDEFINITION_INTERNAL.IS_TAB_ANALYZED +DBMS_REDEFINITION_INTERNAL.META_GET_XML +DBMS_REDEFINITION_INTERNAL.META_PUT +DBMS_REDEFINITION_INTERNAL.MV_FASTREFRESHABLE +DBMS_REDEFINITION_INTERNAL.NEED_REFRESH_DEP_MVS +DBMS_REDEFINITION_INTERNAL.NEST_TAB_NAME_EXIST +DBMS_REDEFINITION_INTERNAL.NOCOMP_PART_LOB +DBMS_REDEFINITION_INTERNAL.PART_LOB +DBMS_REDEFINITION_INTERNAL.PK_ON_IOT +DBMS_REDEFINITION_INTERNAL.PK_ON_NESTIOT +DBMS_REDEFINITION_INTERNAL.PK_ON_TBL +DBMS_REDEFINITION_INTERNAL.REGISTER_DEP_OBJ +DBMS_REDEFINITION_INTERNAL.SET_PARAM_INT +DBMS_REDEFINITION_INTERNAL.SKIP_ABORT_EVENT +DBMS_REDEFINITION_INTERNAL.TAB_BEING_REDEFED +DBMS_REDEFINITION_INTERNAL.TAB_EXIST +DBMS_REDEFINITION_INTERNAL.TAB_HAS_EXTERNAL_FK +DBMS_REDEFINITION_INTERNAL.TAB_HAS_LOB +DBMS_REDEFINITION_INTERNAL.TAB_HAS_LONG +DBMS_REDEFINITION_INTERNAL.TAB_HAS_NESTAB +DBMS_REDEFINITION_INTERNAL.TAB_HAS_PERIOD +DBMS_REDEFINITION_INTERNAL.TAB_HAS_SENSITIVE_COL +DBMS_REDEFINITION_INTERNAL.TAB_IS_LOGGING +DBMS_REDEFINITION_INTERNAL.TEST_DML_REF_TRIGGER +DBMS_REDEFINITION_INTERNAL.VALIDATE_TABLESPACE +DBMS_REDEFINITION_INTERNAL.VORD_MONITOR_EVENT +DBMS_REFRESH. +DBMS_REFRESH.ADD +DBMS_REFRESH.CHANGE +DBMS_REFRESH.DESTROY +DBMS_REFRESH.MAKE +DBMS_REFRESH.MAKE_REPAPI +DBMS_REFRESH.REFRESH +DBMS_REFRESH.SUBTRACT +DBMS_REFRESH.USER_EXPORT +DBMS_REFRESH.USER_EXPORT_CHILD +DBMS_REGISTRY. +DBMS_REGISTRY.CHECK_SERVER_INSTANCE +DBMS_REGISTRY.COMP_NAME +DBMS_REGISTRY.COUNT_ERRORS_IN_REGISTRY +DBMS_REGISTRY.DELETE_PROGRESS_ACTION +DBMS_REGISTRY.DOWNGRADED +DBMS_REGISTRY.DOWNGRADING +DBMS_REGISTRY.EDITION +DBMS_REGISTRY.GET_CONTAINER_NAME +DBMS_REGISTRY.GET_CON_ID +DBMS_REGISTRY.GET_DEPENDENT_COMPS +DBMS_REGISTRY.GET_DEPENDENT_COMPS_REC +DBMS_REGISTRY.GET_PROGRESS_STEP +DBMS_REGISTRY.GET_PROGRESS_VALUE +DBMS_REGISTRY.GET_REQUIRED_COMPS +DBMS_REGISTRY.GET_REQUIRED_COMPS_REC +DBMS_REGISTRY.INVALID +DBMS_REGISTRY.IS_COMPONENT +DBMS_REGISTRY.IS_DB_CONSOLIDATED +DBMS_REGISTRY.IS_DB_PDB +DBMS_REGISTRY.IS_DB_PDB_SEED +DBMS_REGISTRY.IS_DB_ROOT +DBMS_REGISTRY.IS_IN_REGISTRY +DBMS_REGISTRY.IS_IN_UPGRADE_MODE +DBMS_REGISTRY.IS_LOADED +DBMS_REGISTRY.IS_SERVER_COMPONENT +DBMS_REGISTRY.IS_STARTUP_REQUIRED +DBMS_REGISTRY.IS_STATS_FROM_UPGRADE +DBMS_REGISTRY.IS_TRACE_EVENT_SET +DBMS_REGISTRY.IS_UPGRADE_RUNNING +DBMS_REGISTRY.IS_VALID +DBMS_REGISTRY.LOADED +DBMS_REGISTRY.LOADING +DBMS_REGISTRY.NOTHING_SCRIPT +DBMS_REGISTRY.NUM_OF_EXADATA_CELLS +DBMS_REGISTRY.OPTION_OFF +DBMS_REGISTRY.PREV_VERSION +DBMS_REGISTRY.REMOVED +DBMS_REGISTRY.REMOVING +DBMS_REGISTRY.RESET_VERSION +DBMS_REGISTRY.RU_APPLY +DBMS_REGISTRY.RU_ROLLBACK +DBMS_REGISTRY.SCHEMA +DBMS_REGISTRY.SCHEMA_LIST +DBMS_REGISTRY.SCHEMA_LIST_STRING +DBMS_REGISTRY.SCRIPT +DBMS_REGISTRY.SCRIPT_PATH +DBMS_REGISTRY.SCRIPT_PREFIX +DBMS_REGISTRY.SESSION_NAMESPACE +DBMS_REGISTRY.SET_COMP_NAMESPACE +DBMS_REGISTRY.SET_EDITION +DBMS_REGISTRY.SET_PROGRESS_ACTION +DBMS_REGISTRY.SET_PROGRESS_STEP +DBMS_REGISTRY.SET_PROGRESS_VALUE +DBMS_REGISTRY.SET_RDBMS_STATUS +DBMS_REGISTRY.SET_REQUIRED_COMPS +DBMS_REGISTRY.SET_SESSION_CONTAINER +DBMS_REGISTRY.SET_SESSION_NAMESPACE +DBMS_REGISTRY.SET_SESSION_TO_CONTAINER_NAME +DBMS_REGISTRY.STARTUP_COMPLETE +DBMS_REGISTRY.STARTUP_REQUIRED +DBMS_REGISTRY.STATUS +DBMS_REGISTRY.STATUS_NAME +DBMS_REGISTRY.SUBCOMPONENTS +DBMS_REGISTRY.UPDATE_SCHEMA_LIST +DBMS_REGISTRY.UPGRADED +DBMS_REGISTRY.UPGRADING +DBMS_REGISTRY.VALID +DBMS_REGISTRY.VERSION +DBMS_REGISTRY.VERSION_FULL +DBMS_REGISTRY.VERSION_GREATER +DBMS_REGISTRY_EXTENDED. +DBMS_REGISTRY_EXTENDED.COMPARE_VERSIONS +DBMS_REGISTRY_EXTENDED.CONVERT_VERSION_TO_N_DOTS +DBMS_REGISTRY_EXTENDED.ELEMENT +DBMS_REGISTRY_EXTENDED.OCCURS +DBMS_REGISTRY_SERVER. +DBMS_REGISTRY_SIMPLE. +DBMS_REGISTRY_SIMPLE.IS_DB_CONSOLIDATED +DBMS_REGISTRY_SIMPLE.IS_DB_PDB +DBMS_REGISTRY_SIMPLE.IS_DB_PDB_SEED +DBMS_REGISTRY_SIMPLE.IS_DB_ROOT +DBMS_REGISTRY_SYS. +DBMS_REGISTRY_SYS.CAPITALIZE_SINGLE_QUOTED +DBMS_REGISTRY_SYS.CATCON_QUERY +DBMS_REGISTRY_SYS.CHECK_COMPONENT_DOWNGRADES +DBMS_REGISTRY_SYS.DBDWG_SCRIPT +DBMS_REGISTRY_SYS.DBUPG_SCRIPT +DBMS_REGISTRY_SYS.DELETE_PROPS_DATA +DBMS_REGISTRY_SYS.DIAGNOSTICS +DBMS_REGISTRY_SYS.DROP_USER +DBMS_REGISTRY_SYS.GATHER_STATS +DBMS_REGISTRY_SYS.INSERT_PROPS_DATA +DBMS_REGISTRY_SYS.POPULATE +DBMS_REGISTRY_SYS.RECORD_ACTION +DBMS_REGISTRY_SYS.RELOD_SCRIPT +DBMS_REGISTRY_SYS.REMOVAL_SCRIPT +DBMS_REGISTRY_SYS.RESOLVE_CATJAVA +DBMS_REGISTRY_SYS.SELECT_PROPS_DATA +DBMS_REGISTRY_SYS.SET_REGISTRY_CONTEXT +DBMS_REGISTRY_SYS.TIME_STAMP +DBMS_REGISTRY_SYS.TIME_STAMP_COMP_DISPLAY +DBMS_REGISTRY_SYS.TIME_STAMP_DISPLAY +DBMS_REGISTRY_SYS.UPDATE_PROPS_DATA +DBMS_REGISTRY_SYS.UTLMMIG_SCRIPT_NAME +DBMS_REGISTRY_SYS.VALIDATE_CATALOG +DBMS_REGISTRY_SYS.VALIDATE_CATJAVA +DBMS_REGISTRY_SYS.VALIDATE_CATPROC +DBMS_REGISTRY_SYS.VALIDATE_COMPONENTS +DBMS_REGXDB. +DBMS_REGXDB.VALIDATEXDB +DBMS_REGXDB.VALIDATEXDB_OBJS +DBMS_REPAIR. +DBMS_REPAIR.ADMIN_TABLES +DBMS_REPAIR.CHECK_OBJECT +DBMS_REPAIR.DUMP_ORPHAN_KEYS +DBMS_REPAIR.FIX_CORRUPT_BLOCKS +DBMS_REPAIR.ONLINE_INDEX_CLEAN +DBMS_REPAIR.REBUILD_FREELISTS +DBMS_REPAIR.REBUILD_SHC_INDEX +DBMS_REPAIR.REPAIR_CLUSTER_INDEX_KEYCOUNT +DBMS_REPAIR.SEGMENT_FIX_STATUS +DBMS_REPAIR.SKIP_CORRUPT_BLOCKS +DBMS_REPCAT. +DBMS_REPCAT.REPCAT_IMPORT_CHECK +DBMS_REPCAT.REPCAT_IMPORT_REPSCHEMA +DBMS_REPCAT_MIG. +DBMS_REPCAT_MIG.CLEANUP_IMPORT +DBMS_REPCAT_MIG.POST_IMPORT +DBMS_REPCAT_MIG.PRE_IMPORT +DBMS_REPORT. +DBMS_REPORT.BUILD_GENERIC_TAG +DBMS_REPORT.BUILD_REPORT_REFERENCE_STRUCT +DBMS_REPORT.BUILD_REPORT_REFERENCE_VARG +DBMS_REPORT.CLEAR_FRAMEWORK +DBMS_REPORT.FORMAT_MESSAGE +DBMS_REPORT.FORMAT_REPORT +DBMS_REPORT.GET_AWR_CONTEXT +DBMS_REPORT.GET_AWR_DIFF_CONTEXT +DBMS_REPORT.GET_IMPORTED_REPORT_ATTRS +DBMS_REPORT.GET_PARAM +DBMS_REPORT.GET_REPORT +DBMS_REPORT.GET_REPORT_WITH_SUMMARY +DBMS_REPORT.GET_SNAP_ID +DBMS_REPORT.GET_TIMING_INFO +DBMS_REPORT.GZIP_REPORT_XML +DBMS_REPORT.LOOKUP_COMPONENT_ID +DBMS_REPORT.LOOKUP_REPORT_ID +DBMS_REPORT.PARSE_REPORT_REFERENCE +DBMS_REPORT.REGISTER_COMPONENT +DBMS_REPORT.REGISTER_CUSTOM_FORMAT +DBMS_REPORT.REGISTER_REPORT +DBMS_REPORT.REGISTER_SWF +DBMS_REPORT.REGISTER_TEXT_FORMAT +DBMS_REPORT.REGISTER_XSLT_FORMAT +DBMS_REPORT.RESTORE_REPORT_ENV +DBMS_REPORT.SETUP_REPORT_ENV +DBMS_REPORT.TRANSFORM_HTML_TO_TEXT +DBMS_REPORT.TRANSFORM_REPORT_XML +DBMS_REPORT.VALIDATE_REPORT +DBMS_REPORT.ZLIB2BASE64_CLOB +DBMS_REPORT.ZLIB2BASE64_REPORT_XML +DBMS_REPUTIL. +DBMS_REPUTIL.REPLICATION_IS_ON +DBMS_REPUTIL.REPLICATION_OFF +DBMS_REPUTIL.REPLICATION_ON +DBMS_RESCONFIG. +DBMS_RESCONFIG.ADDREPOSITORYRESCONFIG +DBMS_RESCONFIG.ADDRESCONFIG +DBMS_RESCONFIG.APPENDRESCONFIG +DBMS_RESCONFIG.DELETEREPOSITORYRESCONFIG +DBMS_RESCONFIG.DELETERESCONFIG +DBMS_RESCONFIG.GETLISTENERS +DBMS_RESCONFIG.GETREPOSITORYRESCONFIG +DBMS_RESCONFIG.GETREPOSITORYRESCONFIGPATHS +DBMS_RESCONFIG.GETRESCONFIG +DBMS_RESCONFIG.GETRESCONFIGPATHS +DBMS_RESOURCE_MANAGER. +DBMS_RESOURCE_MANAGER.BEGIN_SQL_BLOCK +DBMS_RESOURCE_MANAGER.CALIBRATE_IO +DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA +DBMS_RESOURCE_MANAGER.CREATE_CATEGORY +DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN +DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE +DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA +DBMS_RESOURCE_MANAGER.CREATE_PLAN +DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN +DBMS_RESOURCE_MANAGER.DELETE_CATEGORY +DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN +DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.DELETE_CDB_PROFILE_DIRECTIVE +DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.DELETE_PLAN +DBMS_RESOURCE_MANAGER.DELETE_PLAN_CASCADE +DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.DEQUEUE_PARALLEL_STATEMENT +DBMS_RESOURCE_MANAGER.END_SQL_BLOCK +DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING +DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING_PRI +DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA +DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS +DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_USER +DBMS_RESOURCE_MANAGER.SWITCH_PLAN +DBMS_RESOURCE_MANAGER.UPDATE_CATEGORY +DBMS_RESOURCE_MANAGER.UPDATE_CDB_AUTOTASK_DIRECTIVE +DBMS_RESOURCE_MANAGER.UPDATE_CDB_DEFAULT_DIRECTIVE +DBMS_RESOURCE_MANAGER.UPDATE_CDB_PLAN +DBMS_RESOURCE_MANAGER.UPDATE_CDB_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE +DBMS_RESOURCE_MANAGER.UPDATE_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER.UPDATE_PLAN +DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE +DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA +DBMS_RESOURCE_MANAGER_PRIVS. +DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE +DBMS_RESOURCE_MANAGER_PRIVS.REVOKE_SWITCH_CONSUMER_GROUP +DBMS_RESOURCE_MANAGER_PRIVS.REVOKE_SYSTEM_PRIVILEGE +DBMS_RESULT_CACHE. +DBMS_RESULT_CACHE.BLACK_LIST +DBMS_RESULT_CACHE.BLACK_LIST_ADD +DBMS_RESULT_CACHE.BLACK_LIST_CLEAR +DBMS_RESULT_CACHE.BLACK_LIST_REMOVE +DBMS_RESULT_CACHE.BYPASS +DBMS_RESULT_CACHE.DELETE_DEPENDENCY +DBMS_RESULT_CACHE.FLUSH +DBMS_RESULT_CACHE.INVALIDATE +DBMS_RESULT_CACHE.INVALIDATE_OBJECT +DBMS_RESULT_CACHE.MEMORY_REPORT +DBMS_RESULT_CACHE.STATUS +DBMS_RESULT_CACHE_API. +DBMS_RESULT_CACHE_API.GET +DBMS_RESULT_CACHE_API.GETC +DBMS_RESULT_CACHE_API.SET +DBMS_RESULT_CACHE_API.SETC +DBMS_RESULT_CACHE_INTERNAL. +DBMS_RESULT_CACHE_INTERNAL.RELIES_ON +DBMS_RESUMABLE. +DBMS_RESUMABLE.ABORT +DBMS_RESUMABLE.GET_SESSION_TIMEOUT +DBMS_RESUMABLE.GET_TIMEOUT +DBMS_RESUMABLE.SET_SESSION_TIMEOUT +DBMS_RESUMABLE.SET_TIMEOUT +DBMS_RESUMABLE.SPACE_ERROR_INFO +DBMS_RLS. +DBMS_RLS.ADD_GROUPED_POLICY +DBMS_RLS.ADD_POLICY +DBMS_RLS.ADD_POLICY_CONTEXT +DBMS_RLS.ALTER_GROUPED_POLICY +DBMS_RLS.ALTER_POLICY +DBMS_RLS.CREATE_POLICY_GROUP +DBMS_RLS.DELETE_POLICY_GROUP +DBMS_RLS.DISABLE_GROUPED_POLICY +DBMS_RLS.DROP_GROUPED_POLICY +DBMS_RLS.DROP_POLICY +DBMS_RLS.DROP_POLICY_CONTEXT +DBMS_RLS.ENABLE_GROUPED_POLICY +DBMS_RLS.ENABLE_POLICY +DBMS_RLS.REFRESH_GROUPED_POLICY +DBMS_RLS.REFRESH_POLICY +DBMS_RLS_INT. +DBMS_RLS_INT.ADD_GROUPED_POLICY +DBMS_RLS_INT.ADD_POLICY +DBMS_RLS_INT.ADD_POLICY_CONTEXT +DBMS_RLS_INT.ALTER_GROUPED_POLICY +DBMS_RLS_INT.ALTER_POLICY +DBMS_RLS_INT.CREATE_POLICY_GROUP +DBMS_RLS_INT.DELETE_POLICY_GROUP +DBMS_RLS_INT.DISABLE_GROUPED_POLICY +DBMS_RLS_INT.DROP_GROUPED_POLICY +DBMS_RLS_INT.DROP_POLICY +DBMS_RLS_INT.DROP_POLICY_CONTEXT +DBMS_RLS_INT.ENABLE_GROUPED_POLICY +DBMS_RLS_INT.ENABLE_POLICY +DBMS_RLS_INT.REFRESH_GROUPED_POLICY +DBMS_RLS_INT.REFRESH_POLICY +DBMS_RMGR_GROUP_EXPORT. +DBMS_RMGR_GROUP_EXPORT.AUDIT_EXP +DBMS_RMGR_GROUP_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_RMGR_GROUP_EXPORT.CREATE_EXP +DBMS_RMGR_GROUP_EXPORT.DROP_EXP +DBMS_RMGR_GROUP_EXPORT.GRANT_EXP +DBMS_RMGR_GROUP_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_RMGR_PACT_EXPORT. +DBMS_RMGR_PACT_EXPORT.SYSTEM_INFO_EXP +DBMS_RMGR_PLAN_EXPORT. +DBMS_RMGR_PLAN_EXPORT.AUDIT_EXP +DBMS_RMGR_PLAN_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_RMGR_PLAN_EXPORT.CREATE_EXP +DBMS_RMGR_PLAN_EXPORT.DROP_EXP +DBMS_RMGR_PLAN_EXPORT.GRANT_EXP +DBMS_RMGR_PLAN_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_RMIN. +DBMS_RMIN.RM$_BGN_SQLBLK +DBMS_RMIN.RM$_END_SQLBLK +DBMS_RMIN.RM$_NONCDB_TO_PDB +DBMS_RMIN.RM$_PROCESS_PRIV +DBMS_RMIN.RM$_PROCESS_PRIV_EXT +DBMS_RMIN.RM$_RUN_QUEUED_PARALLEL_STMT +DBMS_RMIN.RM$_SET_INITIAL_GROUP +DBMS_RMIN.RM$_UP_CONSUMER_GROUP_MAPPINGS +DBMS_RMIN.RM$_VERIFY_PRIVILEGES +DBMS_RMIN_SYS. +DBMS_RMIN_SYS.BEGIN_IMPORT_EXPORT +DBMS_RMIN_SYS.DOWNGRADE_PREP +DBMS_RMIN_SYS.INSTALL +DBMS_RMIN_SYS.QPARAM +DBMS_RMIN_SYS.RESTORE_OLD_INTERNAL_PLAN +DBMS_RMIN_SYS.RM$_CALIBRATE_IO +DBMS_RMIN_SYS.RM$_CLRPAREA +DBMS_RMIN_SYS.RM$_CONSUMER_GROUP_MAPPING_PRI +DBMS_RMIN_SYS.RM$_CRTPAREA +DBMS_RMIN_SYS.RM$_CRT_CATEGORY +DBMS_RMIN_SYS.RM$_CRT_CDB_DIRECTIVE +DBMS_RMIN_SYS.RM$_CRT_CDB_PLAN +DBMS_RMIN_SYS.RM$_CRT_GROUP +DBMS_RMIN_SYS.RM$_CRT_PLAN +DBMS_RMIN_SYS.RM$_CRT_PLAN_DIRECTIVE +DBMS_RMIN_SYS.RM$_DRP_CATEGORY +DBMS_RMIN_SYS.RM$_DRP_CDB_DIRECTIVE +DBMS_RMIN_SYS.RM$_DRP_CDB_PLAN +DBMS_RMIN_SYS.RM$_DRP_GROUP +DBMS_RMIN_SYS.RM$_DRP_PLAN +DBMS_RMIN_SYS.RM$_DRP_PLAN_CSD +DBMS_RMIN_SYS.RM$_DRP_PLAN_DIRECTIVE +DBMS_RMIN_SYS.RM$_FLATTEN_PLANS +DBMS_RMIN_SYS.RM$_GET_MAINTENANCE_PLAN +DBMS_RMIN_SYS.RM$_GET_PLAN_TOTAL_SHARES +DBMS_RMIN_SYS.RM$_IS_OTHER_GROUPS_SPECD +DBMS_RMIN_SYS.RM$_IS_PDB_ENABLED +DBMS_RMIN_SYS.RM$_IS_SYS_GROUP_SPECD +DBMS_RMIN_SYS.RM$_NONCDB_TO_PDB +DBMS_RMIN_SYS.RM$_SET_CONSUMER_GROUP_MAPPING +DBMS_RMIN_SYS.RM$_SUBPAREA +DBMS_RMIN_SYS.RM$_SWTCH_SESSION_GROUP +DBMS_RMIN_SYS.RM$_SWTCH_USR_GROUP +DBMS_RMIN_SYS.RM$_UPD_CATEGORY +DBMS_RMIN_SYS.RM$_UPD_CDB_DIRECTIVE +DBMS_RMIN_SYS.RM$_UPD_CDB_PLAN +DBMS_RMIN_SYS.RM$_UPD_GROUP +DBMS_RMIN_SYS.RM$_UPD_PLAN +DBMS_RMIN_SYS.RM$_UPD_PLAN_DIRECTIVE +DBMS_RMIN_SYS.RM$_VLDPAREA +DBMS_RMIN_SYS.UNINSTALL +DBMS_ROLLING. +DBMS_ROLLING.BUILD_PLAN +DBMS_ROLLING.DESTROY_PLAN +DBMS_ROLLING.FINISH_PLAN +DBMS_ROLLING.INIT_PLAN +DBMS_ROLLING.ROLLBACK_PLAN +DBMS_ROLLING.SET_PARAMETER +DBMS_ROLLING.START_PLAN +DBMS_ROLLING.SWITCHOVER +DBMS_ROWID. +DBMS_ROWID.ROWID_BLOCK_NUMBER +DBMS_ROWID.ROWID_CREATE +DBMS_ROWID.ROWID_INFO +DBMS_ROWID.ROWID_OBJECT +DBMS_ROWID.ROWID_RELATIVE_FNO +DBMS_ROWID.ROWID_ROW_NUMBER +DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO +DBMS_ROWID.ROWID_TO_EXTENDED +DBMS_ROWID.ROWID_TO_RESTRICTED +DBMS_ROWID.ROWID_TYPE +DBMS_ROWID.ROWID_VERIFY +DBMS_RULE. +DBMS_RULE.CLOSE_ITERATOR +DBMS_RULE.EVALUATE +DBMS_RULE.EVALUATE_EXPRESSION +DBMS_RULE.GET_NEXT_HIT +DBMS_RULE.IS_FAST +DBMS_RULEADM_INTERNAL. +DBMS_RULEADM_INTERNAL.ADD_RULE +DBMS_RULEADM_INTERNAL.ALTER_EVALUATION_CONTEXT +DBMS_RULEADM_INTERNAL.ALTER_RULE +DBMS_RULEADM_INTERNAL.CREATE_EVALUATION_CONTEXT +DBMS_RULEADM_INTERNAL.CREATE_RULE +DBMS_RULEADM_INTERNAL.CREATE_RULE_SET +DBMS_RULEADM_INTERNAL.DROP_EVALUATION_CONTEXT +DBMS_RULEADM_INTERNAL.DROP_RULE +DBMS_RULEADM_INTERNAL.DROP_RULE_SET +DBMS_RULEADM_INTERNAL.I_ALTER_RULE +DBMS_RULEADM_INTERNAL.I_CREATE_EVAL_CTX +DBMS_RULEADM_INTERNAL.I_CREATE_RULE +DBMS_RULEADM_INTERNAL.I_CREATE_RULE_SET +DBMS_RULEADM_INTERNAL.I_EVALUATION_CONTEXT_ADD_VAR +DBMS_RULEADM_INTERNAL.PATCH_RULE_PRIV +DBMS_RULEADM_INTERNAL.REGISTER_INTERNAL_ACTX +DBMS_RULEADM_INTERNAL.REMOVE_RULE +DBMS_RULEADM_INTERNAL.UNREGISTER_INTERNAL_ACTX +DBMS_RULEADM_INTERNAL.VALIDATE_RE_OBJECT +DBMS_RULE_ADM. +DBMS_RULE_ADM.ADD_RULE +DBMS_RULE_ADM.ALTER_EVALUATION_CONTEXT +DBMS_RULE_ADM.ALTER_RULE +DBMS_RULE_ADM.CREATE_EVALUATION_CONTEXT +DBMS_RULE_ADM.CREATE_RULE +DBMS_RULE_ADM.CREATE_RULE_SET +DBMS_RULE_ADM.DROP_EVALUATION_CONTEXT +DBMS_RULE_ADM.DROP_RULE +DBMS_RULE_ADM.DROP_RULE_SET +DBMS_RULE_ADM.GRANT_OBJECT_PRIVILEGE +DBMS_RULE_ADM.GRANT_SYSTEM_PRIVILEGE +DBMS_RULE_ADM.REMOVE_RULE +DBMS_RULE_ADM.REVOKE_OBJECT_PRIVILEGE +DBMS_RULE_ADM.REVOKE_SYSTEM_PRIVILEGE +DBMS_RULE_EXIMP. +DBMS_RULE_EXIMP.IMPORT_RULE +DBMS_RULE_EXIMP.IMPORT_RULE_SET +DBMS_RULE_EXP_EC_INTERNAL. +DBMS_RULE_EXP_EC_INTERNAL.I_CREATE_EXP +DBMS_RULE_EXP_EC_INTERNAL.I_GRANT_EXP +DBMS_RULE_EXP_EC_INTERNAL.I_GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_EV_CTXS. +DBMS_RULE_EXP_EV_CTXS.AUDIT_EXP +DBMS_RULE_EXP_EV_CTXS.AUDIT_SYSPRIVS_EXP +DBMS_RULE_EXP_EV_CTXS.CREATE_EXP +DBMS_RULE_EXP_EV_CTXS.DROP_EXP +DBMS_RULE_EXP_EV_CTXS.GRANT_EXP +DBMS_RULE_EXP_EV_CTXS.GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RL_INTERNAL. +DBMS_RULE_EXP_RL_INTERNAL.I_CREATE_EXP +DBMS_RULE_EXP_RL_INTERNAL.I_GRANT_EXP +DBMS_RULE_EXP_RL_INTERNAL.I_GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RL_INTERNAL.I_INSTANCE_CALLOUT +DBMS_RULE_EXP_RL_INTERNAL.I_SCHEMA_CALLOUT +DBMS_RULE_EXP_RS_INTERNAL. +DBMS_RULE_EXP_RS_INTERNAL.I_CREATE_EXP +DBMS_RULE_EXP_RS_INTERNAL.I_GRANT_EXP +DBMS_RULE_EXP_RS_INTERNAL.I_GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULES. +DBMS_RULE_EXP_RULES.AUDIT_EXP +DBMS_RULE_EXP_RULES.AUDIT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULES.CREATE_EXP +DBMS_RULE_EXP_RULES.DROP_EXP +DBMS_RULE_EXP_RULES.GRANT_EXP +DBMS_RULE_EXP_RULES.GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULES.INSTANCE_CALLOUT +DBMS_RULE_EXP_RULES.INSTANCE_INFO_EXP +DBMS_RULE_EXP_RULES.SCHEMA_CALLOUT +DBMS_RULE_EXP_RULES.SCHEMA_INFO_EXP +DBMS_RULE_EXP_RULES.SYSTEM_CALLOUT +DBMS_RULE_EXP_RULES.SYSTEM_INFO_EXP +DBMS_RULE_EXP_RULE_SETS. +DBMS_RULE_EXP_RULE_SETS.AUDIT_EXP +DBMS_RULE_EXP_RULE_SETS.AUDIT_SYSPRIVS_EXP +DBMS_RULE_EXP_RULE_SETS.CREATE_EXP +DBMS_RULE_EXP_RULE_SETS.DROP_EXP +DBMS_RULE_EXP_RULE_SETS.GRANT_EXP +DBMS_RULE_EXP_RULE_SETS.GRANT_SYSPRIVS_EXP +DBMS_RULE_EXP_UTL. +DBMS_RULE_EXP_UTL.ENQUOTE_LITERAL +DBMS_RULE_EXP_UTL.ENQUOTE_NAME +DBMS_RULE_EXP_UTL.EXPORT_ACTION +DBMS_RULE_EXP_UTL.IS_SYSTEM_EXPORT +DBMS_RULE_EXP_UTL.OBJECT_OWNER +DBMS_RULE_EXP_UTL.PARSE_NAME +DBMS_RULE_EXP_UTLI. +DBMS_RULE_EXP_UTLI.CHECK_PRIV +DBMS_RULE_IMP_OBJ. +DBMS_RULE_IMP_OBJ.IMPORT_ADD_RULE +DBMS_RULE_IMP_OBJ.IMPORT_EVALUATION_CONTEXT +DBMS_RULE_IMP_OBJ.IMPORT_RULE +DBMS_RULE_IMP_OBJ.IMPORT_RULE_SET +DBMS_RULE_INTERNAL. +DBMS_RULE_INTERNAL.I_EVALUATE +DBMS_SCHEDULER. +DBMS_SCHEDULER.ADD_EVENT_QUEUE_SUBSCRIBER +DBMS_SCHEDULER.ADD_GROUP_MEMBER +DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION +DBMS_SCHEDULER.ADD_TO_INCOMPATIBILITY +DBMS_SCHEDULER.ADD_WINDOW_GROUP_MEMBER +DBMS_SCHEDULER.ALTER_CHAIN +DBMS_SCHEDULER.ALTER_RUNNING_CHAIN +DBMS_SCHEDULER.ANALYZE_CHAIN +DBMS_SCHEDULER.AUTO_PURGE +DBMS_SCHEDULER.CHECK_CREDENTIAL +DBMS_SCHEDULER.CHECK_SYS_PRIVS +DBMS_SCHEDULER.CLOSE_WINDOW +DBMS_SCHEDULER.COPY_JOB +DBMS_SCHEDULER.CREATE_CALENDAR_STRING +DBMS_SCHEDULER.CREATE_CHAIN +DBMS_SCHEDULER.CREATE_CREDENTIAL +DBMS_SCHEDULER.CREATE_DATABASE_DESTINATION +DBMS_SCHEDULER.CREATE_EVENT_SCHEDULE +DBMS_SCHEDULER.CREATE_FILE_WATCHER +DBMS_SCHEDULER.CREATE_GROUP +DBMS_SCHEDULER.CREATE_INCOMPATIBILITY +DBMS_SCHEDULER.CREATE_JOB +DBMS_SCHEDULER.CREATE_JOBS +DBMS_SCHEDULER.CREATE_JOB_CLASS +DBMS_SCHEDULER.CREATE_PROGRAM +DBMS_SCHEDULER.CREATE_RESOURCE +DBMS_SCHEDULER.CREATE_SCHEDULE +DBMS_SCHEDULER.CREATE_WINDOW +DBMS_SCHEDULER.CREATE_WINDOW_GROUP +DBMS_SCHEDULER.DEFINE_ANYDATA_ARGUMENT +DBMS_SCHEDULER.DEFINE_CHAIN_EVENT_STEP +DBMS_SCHEDULER.DEFINE_CHAIN_RULE +DBMS_SCHEDULER.DEFINE_CHAIN_STEP +DBMS_SCHEDULER.DEFINE_METADATA_ARGUMENT +DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT +DBMS_SCHEDULER.DELETE_FILE +DBMS_SCHEDULER.DISABLE +DBMS_SCHEDULER.DISABLE1_CALENDAR_CHECK +DBMS_SCHEDULER.DROP_AGENT_DESTINATION +DBMS_SCHEDULER.DROP_CHAIN +DBMS_SCHEDULER.DROP_CHAIN_RULE +DBMS_SCHEDULER.DROP_CHAIN_STEP +DBMS_SCHEDULER.DROP_CREDENTIAL +DBMS_SCHEDULER.DROP_DATABASE_DESTINATION +DBMS_SCHEDULER.DROP_FILE_WATCHER +DBMS_SCHEDULER.DROP_GROUP +DBMS_SCHEDULER.DROP_INCOMPATIBILITY +DBMS_SCHEDULER.DROP_JOB +DBMS_SCHEDULER.DROP_JOB_CLASS +DBMS_SCHEDULER.DROP_PROGRAM +DBMS_SCHEDULER.DROP_PROGRAM_ARGUMENT +DBMS_SCHEDULER.DROP_RESOURCE +DBMS_SCHEDULER.DROP_SCHEDULE +DBMS_SCHEDULER.DROP_WINDOW +DBMS_SCHEDULER.DROP_WINDOW_GROUP +DBMS_SCHEDULER.ENABLE +DBMS_SCHEDULER.END_DETACHED_JOB_RUN +DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING +DBMS_SCHEDULER.EVALUATE_RUNNING_CHAIN +DBMS_SCHEDULER.FILE_WATCH_FILTER +DBMS_SCHEDULER.GENERATE_EVENT_LIST +DBMS_SCHEDULER.GENERATE_JOB_NAME +DBMS_SCHEDULER.GET_AGENT_INFO +DBMS_SCHEDULER.GET_AGENT_VERSION +DBMS_SCHEDULER.GET_ATTRIBUTE +DBMS_SCHEDULER.GET_CHAIN_RULE_ACTION +DBMS_SCHEDULER.GET_CHAIN_RULE_CONDITION +DBMS_SCHEDULER.GET_DEFAULT_VALUE +DBMS_SCHEDULER.GET_FILE +DBMS_SCHEDULER.GET_JOB_STEP_CF +DBMS_SCHEDULER.GET_SCHEDULER_ATTRIBUTE +DBMS_SCHEDULER.GET_SYS_TIME_ZONE_NAME +DBMS_SCHEDULER.GET_VARCHAR2_VALUE +DBMS_SCHEDULER.IS_SCHEDULER_CREATED_AGENT +DBMS_SCHEDULER.OPEN_WINDOW +DBMS_SCHEDULER.PURGE_LOG +DBMS_SCHEDULER.PUT_FILE +DBMS_SCHEDULER.REMOVE_EVENT_QUEUE_SUBSCRIBER +DBMS_SCHEDULER.REMOVE_FROM_INCOMPATIBILITY +DBMS_SCHEDULER.REMOVE_GROUP_MEMBER +DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION +DBMS_SCHEDULER.REMOVE_WINDOW_GROUP_MEMBER +DBMS_SCHEDULER.RESET_JOB_ARGUMENT_VALUE +DBMS_SCHEDULER.RESOLVE_CALENDAR_STRING +DBMS_SCHEDULER.RESOLVE_NAME +DBMS_SCHEDULER.RUN_CHAIN +DBMS_SCHEDULER.RUN_JOB +DBMS_SCHEDULER.SET_AGENT_REGISTRATION_PASS +DBMS_SCHEDULER.SET_ATTRIBUTE +DBMS_SCHEDULER.SET_ATTRIBUTE_NULL +DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE +DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE +DBMS_SCHEDULER.SET_JOB_ATTRIBUTES +DBMS_SCHEDULER.SET_RESOURCE_CONSTRAINT +DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE +DBMS_SCHEDULER.SHOW_ERRORS +DBMS_SCHEDULER.STIME +DBMS_SCHEDULER.STOP_JOB +DBMS_SCHEDULER.SUBMIT_REMOTE_EXTERNAL_JOB +DBMS_SCHED_ARGUMENT_IMPORT. +DBMS_SCHED_ARGUMENT_IMPORT.CHECK_PRIV +DBMS_SCHED_ARGUMENT_IMPORT.INSTANCE_CALLOUT_IMP +DBMS_SCHED_ARGUMENT_IMPORT.SYSTEM_CALLOUT_IMP +DBMS_SCHED_ATTRIBUTE_EXPORT. +DBMS_SCHED_ATTRIBUTE_EXPORT.AUDIT_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.CREATE_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.DROP_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.GRANT_EXP +DBMS_SCHED_ATTRIBUTE_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CHAIN_EXPORT. +DBMS_SCHED_CHAIN_EXPORT.AUDIT_EXP +DBMS_SCHED_CHAIN_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CHAIN_EXPORT.CREATE_EXP +DBMS_SCHED_CHAIN_EXPORT.DROP_EXP +DBMS_SCHED_CHAIN_EXPORT.GRANT_EXP +DBMS_SCHED_CHAIN_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CLASS_EXPORT. +DBMS_SCHED_CLASS_EXPORT.AUDIT_EXP +DBMS_SCHED_CLASS_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CLASS_EXPORT.CREATE_EXP +DBMS_SCHED_CLASS_EXPORT.DROP_EXP +DBMS_SCHED_CLASS_EXPORT.GRANT_EXP +DBMS_SCHED_CLASS_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CONSTRAINT_EXPORT. +DBMS_SCHED_CONSTRAINT_EXPORT.AUDIT_EXP +DBMS_SCHED_CONSTRAINT_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CONSTRAINT_EXPORT.CREATE_EXP +DBMS_SCHED_CONSTRAINT_EXPORT.DROP_EXP +DBMS_SCHED_CONSTRAINT_EXPORT.GRANT_EXP +DBMS_SCHED_CONSTRAINT_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_CREDENTIAL_EXPORT. +DBMS_SCHED_CREDENTIAL_EXPORT.AUDIT_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.CREATE_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.DROP_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.GRANT_EXP +DBMS_SCHED_CREDENTIAL_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_EXPORT_CALLOUTS. +DBMS_SCHED_EXPORT_CALLOUTS.SCHEMA_CALLOUT +DBMS_SCHED_EXPORT_CALLOUTS.SCHEMA_INFO_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT. +DBMS_SCHED_FILE_WATCHER_EXPORT.AUDIT_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.CREATE_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.DROP_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.GRANT_EXP +DBMS_SCHED_FILE_WATCHER_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_JOB_EXPORT. +DBMS_SCHED_JOB_EXPORT.AUDIT_EXP +DBMS_SCHED_JOB_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_JOB_EXPORT.CHECK_PRIV +DBMS_SCHED_JOB_EXPORT.CREATE_EXP +DBMS_SCHED_JOB_EXPORT.DROP_EXP +DBMS_SCHED_JOB_EXPORT.GRANT_EXP +DBMS_SCHED_JOB_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_MAIN_EXPORT. +DBMS_SCHED_MAIN_EXPORT.EXPORT_CHAIN +DBMS_SCHED_MAIN_EXPORT.EXPORT_CLASS +DBMS_SCHED_MAIN_EXPORT.EXPORT_CONSTRAINT +DBMS_SCHED_MAIN_EXPORT.EXPORT_CREDENTIAL +DBMS_SCHED_MAIN_EXPORT.EXPORT_FILE_WATCHER +DBMS_SCHED_MAIN_EXPORT.EXPORT_GRANTS +DBMS_SCHED_MAIN_EXPORT.EXPORT_JOB +DBMS_SCHED_MAIN_EXPORT.EXPORT_PROGRAM +DBMS_SCHED_MAIN_EXPORT.EXPORT_RESOURCE +DBMS_SCHED_MAIN_EXPORT.EXPORT_RESOURCE_CONSTRAINT +DBMS_SCHED_MAIN_EXPORT.EXPORT_SCHEDULE +DBMS_SCHED_MAIN_EXPORT.EXPORT_SCHEDULER_ATTRIBUTE +DBMS_SCHED_MAIN_EXPORT.EXPORT_SYSTEM_WINDOW +DBMS_SCHED_MAIN_EXPORT.EXPORT_WINDOW +DBMS_SCHED_MAIN_EXPORT.EXPORT_WINGRP +DBMS_SCHED_MAIN_EXPORT.GET_OBJECT_OWNER +DBMS_SCHED_MAIN_EXPORT.I_INSTANCE_CALLOUT_IMP +DBMS_SCHED_MAIN_EXPORT.I_SCHEMA_CALLOUT +DBMS_SCHED_MAIN_EXPORT.I_SCHEMA_INFO_EXP +DBMS_SCHED_MAIN_EXPORT.I_SYSTEM_CALLOUT_IMP +DBMS_SCHED_MAIN_EXPORT.NEXT_PIECE +DBMS_SCHED_MAIN_EXPORT.TS_TO_CHAR +DBMS_SCHED_PROGRAM_EXPORT. +DBMS_SCHED_PROGRAM_EXPORT.AUDIT_EXP +DBMS_SCHED_PROGRAM_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_PROGRAM_EXPORT.CREATE_EXP +DBMS_SCHED_PROGRAM_EXPORT.DROP_EXP +DBMS_SCHED_PROGRAM_EXPORT.GRANT_EXP +DBMS_SCHED_PROGRAM_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_SCHEDULE_EXPORT. +DBMS_SCHED_SCHEDULE_EXPORT.AUDIT_EXP +DBMS_SCHED_SCHEDULE_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_SCHEDULE_EXPORT.CREATE_EXP +DBMS_SCHED_SCHEDULE_EXPORT.DROP_EXP +DBMS_SCHED_SCHEDULE_EXPORT.GRANT_EXP +DBMS_SCHED_SCHEDULE_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_WINDOW_EXPORT. +DBMS_SCHED_WINDOW_EXPORT.AUDIT_EXP +DBMS_SCHED_WINDOW_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_WINDOW_EXPORT.CREATE_EXP +DBMS_SCHED_WINDOW_EXPORT.DROP_EXP +DBMS_SCHED_WINDOW_EXPORT.GRANT_EXP +DBMS_SCHED_WINDOW_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCHED_WINGRP_EXPORT. +DBMS_SCHED_WINGRP_EXPORT.AUDIT_EXP +DBMS_SCHED_WINGRP_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SCHED_WINGRP_EXPORT.CREATE_EXP +DBMS_SCHED_WINGRP_EXPORT.DROP_EXP +DBMS_SCHED_WINGRP_EXPORT.GRANT_EXP +DBMS_SCHED_WINGRP_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SCN. +DBMS_SCN.DISABLEAUTOROLLOVER +DBMS_SCN.ENABLEAUTOROLLOVER +DBMS_SCN.GETCURRENTSCNPARAMS +DBMS_SCN.GETSCNAUTOROLLOVERPARAMS +DBMS_SCN.GETSCNPARAMSBYCOMPAT +DBMS_SECUREFILE_LOG_ADMIN. +DBMS_SECUREFILE_LOG_ADMIN.DESTROY_ALL_LOGS +DBMS_SECUREFILE_LOG_ADMIN.UPGRADE_INST_ALL_LOGS +DBMS_SERVER_ALERT. +DBMS_SERVER_ALERT.EXPAND_MESSAGE +DBMS_SERVER_ALERT.GET_THRESHOLD +DBMS_SERVER_ALERT.SET_THRESHOLD +DBMS_SERVER_ALERT.VIEW_THRESHOLDS +DBMS_SERVER_ALERT_EXPORT. +DBMS_SERVER_ALERT_EXPORT.SYSTEM_INFO_EXP +DBMS_SERVER_ALERT_PRVT. +DBMS_SERVER_ALERT_PRVT.POST_ALERT +DBMS_SERVER_ALERT_PRVT.UPDATE_ALERT +DBMS_SERVER_TRACE. +DBMS_SERVER_TRACE.CONVERT_BINARY_TRACE_FILE +DBMS_SERVICE. +DBMS_SERVICE.CREATE_SERVICE +DBMS_SERVICE.DELETE_SERVICE +DBMS_SERVICE.DISCONNECT_SESSION +DBMS_SERVICE.KILL_SESSION +DBMS_SERVICE.MODIFY_SERVICE +DBMS_SERVICE.START_SERVICE +DBMS_SERVICE.STOP_SERVICE +DBMS_SERVICE.TAG_SESSION +DBMS_SERVICE_CONST. +DBMS_SERVICE_ERR. +DBMS_SERVICE_ERR.FOLD_KSWS_ERROR +DBMS_SERVICE_ERR.HANDLE_ERROR +DBMS_SERVICE_PRVT. +DBMS_SERVICE_PRVT.CREATE_SERVICE +DBMS_SERVICE_PRVT.DELETE_SERVICE +DBMS_SERVICE_PRVT.GET_HASH +DBMS_SERVICE_PRVT.GET_TOPOLOGY +DBMS_SERVICE_PRVT.IS_JAVA_SERVICE +DBMS_SERVICE_PRVT.MIGRATE_TO_12_2 +DBMS_SERVICE_PRVT.MODIFY_SERVICE +DBMS_SERVICE_PRVT.RENAME_PDB_ATTRIBUTE +DBMS_SERVICE_PRVT.START_SERVICE +DBMS_SERVICE_PRVT.STOP_SERVICE +DBMS_SESSION. +DBMS_SESSION.ADD_SQL_CONNECTION_TEST +DBMS_SESSION.CLEAR_ALL_CONTEXT +DBMS_SESSION.CLEAR_CONTEXT +DBMS_SESSION.CLEAR_IDENTIFIER +DBMS_SESSION.CLOSE_DATABASE_LINK +DBMS_SESSION.DELETE_SQL_CONNECTION_TEST +DBMS_SESSION.DISABLE_CONNECTION_TEST +DBMS_SESSION.ENABLE_CONNECTION_TEST +DBMS_SESSION.FREE_UNUSED_USER_MEMORY +DBMS_SESSION.GET_PACKAGE_MEMORY_UTILIZATION +DBMS_SESSION.IS_ROLE_ENABLED +DBMS_SESSION.IS_SESSION_ALIVE +DBMS_SESSION.LIST_CONTEXT +DBMS_SESSION.MODIFY_PACKAGE_STATE +DBMS_SESSION.RESET_PACKAGE +DBMS_SESSION.SESSION_TRACE_DISABLE +DBMS_SESSION.SESSION_TRACE_ENABLE +DBMS_SESSION.SET_CLOSE_CACHED_OPEN_CURSORS +DBMS_SESSION.SET_CONTEXT +DBMS_SESSION.SET_CURRENT_SCHEMA_DEFERRED +DBMS_SESSION.SET_EDITION_DEFERRED +DBMS_SESSION.SET_IDENTIFIER +DBMS_SESSION.SET_NLS +DBMS_SESSION.SET_ROLE +DBMS_SESSION.SET_SQL_TRACE +DBMS_SESSION.SLEEP +DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP +DBMS_SESSION.UNIQUE_SESSION_ID +DBMS_SESSION.USE_DEFAULT_EDITION_ALWAYS +DBMS_SESSION.USE_DEFAULT_EDITION_DEFERRED +DBMS_SESSION_STATE. +DBMS_SESSION_STATE.CAPTURE +DBMS_SESSION_STATE.MARK_CAPTURE +DBMS_SESSION_STATE.RESTORE +DBMS_SESSION_STATE.SS_CAPTURE +DBMS_SESSION_STATE.SS_MARK_CAPTURE +DBMS_SESSION_STATE.SS_RESTORE +DBMS_SESSION_STATE.SS_UNMARK_CAPTURE +DBMS_SESSION_STATE.UNMARK_CAPTURE +DBMS_SET_PDB. +DBMS_SFW_ACL_ADMIN. +DBMS_SFW_ACL_ADMIN.COMMIT_ACL +DBMS_SFW_ACL_ADMIN.ED_ADD_ACE +DBMS_SFW_ACL_ADMIN.ED_ADD_PDB_ACE +DBMS_SFW_ACL_ADMIN.ED_BREMOVE_COMMIT_BY_UUIDS +DBMS_SFW_ACL_ADMIN.ED_BUPDATE_COMMIT +DBMS_SFW_ACL_ADMIN.ED_ENABLE_ACL +DBMS_SFW_ACL_ADMIN.ED_GET_ACES_BY_SGID +DBMS_SFW_ACL_ADMIN.ED_GET_ACES_BY_SVC +DBMS_SFW_ACL_ADMIN.ED_GET_ACES_BY_UUID +DBMS_SFW_ACL_ADMIN.ED_GET_ACES_BY_UUID_SGID +DBMS_SFW_ACL_ADMIN.ED_IS_ACL_ENABLED +DBMS_SFW_ACL_ADMIN.ED_REMOVE_ACES_BY_SGID +DBMS_SFW_ACL_ADMIN.ED_REMOVE_ACES_BY_UUID +DBMS_SFW_ACL_ADMIN.ED_REMOVE_ACE_BY_SGID +DBMS_SFW_ACL_ADMIN.ED_REMOVE_ACE_BY_UUID +DBMS_SFW_ACL_ADMIN.ED_REMOVE_ACL +DBMS_SFW_ACL_ADMIN.ED_REMOVE_PDB_ACE_BY_SGID +DBMS_SFW_ACL_ADMIN.ED_REMOVE_PDB_ACE_BY_UUID +DBMS_SFW_ACL_ADMIN.ED_REMOVE_PDB_ACL +DBMS_SFW_ACL_ADMIN.ED_UPDATE_ACE +DBMS_SFW_ACL_ADMIN.ED_UPDATE_PDB_ACE +DBMS_SFW_ACL_ADMIN.GET_CDB_SVCS +DBMS_SFW_ACL_ADMIN.IP_ADD_ACE +DBMS_SFW_ACL_ADMIN.IP_ADD_PDB_ACE +DBMS_SFW_ACL_ADMIN.IP_GET_ACL +DBMS_SFW_ACL_ADMIN.IP_GET_ACL_SVCS_BY_HOST +DBMS_SFW_ACL_ADMIN.IP_REMOVE_ACE +DBMS_SFW_ACL_ADMIN.IP_REMOVE_ACL +DBMS_SFW_ACL_ADMIN.IP_REMOVE_PDB_ACE +DBMS_SFW_ACL_ADMIN.IP_REMOVE_PDB_ACL +DBMS_SHARED_POOL. +DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD +DBMS_SHARED_POOL.KEEP +DBMS_SHARED_POOL.MARKHOT +DBMS_SHARED_POOL.PURGE +DBMS_SHARED_POOL.SIZES +DBMS_SHARED_POOL.UNKEEP +DBMS_SHARED_POOL.UNMARKHOT +DBMS_SMB. +DBMS_SMB.CHECK_SMB_PRIV +DBMS_SMB.CREATE_STGTAB +DBMS_SMB.GET_VSN_STGTAB_SMO +DBMS_SMB.OPEN_STGTAB_CURSOR +DBMS_SMB.PACK_STGTAB +DBMS_SMB.UNPACK_STGTAB +DBMS_SMB.UPGRADE_STGTAB +DBMS_SMB_INTERNAL. +DBMS_SMB_INTERNAL.CHECK_SMO_PROPS +DBMS_SMB_INTERNAL.CURSOR_TO_HINTS_XML +DBMS_SMB_INTERNAL.INIT_SMB +DBMS_SMB_INTERNAL.INSTANCE_CALLOUT_IMP +DBMS_SMB_INTERNAL.I_CONSTRUCT_SMB_QUERY +DBMS_SMB_INTERNAL.MAP_ORIGIN_BASE_TO_VIEW +DBMS_SMB_INTERNAL.NORMALIZE_NAME +DBMS_SMB_INTERNAL.OPEN_SMB_OBJ_CURSOR +DBMS_SMB_INTERNAL.VARR_TO_HINTS_XML +DBMS_SMB_INTERNAL.VERIFY_QUALIFIED_STGTAB +DBMS_SNAPSHOT. +DBMS_SNAPSHOT.BEGIN_TABLE_REORGANIZATION +DBMS_SNAPSHOT.DROP_SNAPSHOT +DBMS_SNAPSHOT.END_TABLE_REORGANIZATION +DBMS_SNAPSHOT.ESTIMATE_MVIEW_SIZE +DBMS_SNAPSHOT.EXPLAIN_MVIEW +DBMS_SNAPSHOT.EXPLAIN_REWRITE +DBMS_SNAPSHOT.EXPLAIN_REWRITE_SQLID +DBMS_SNAPSHOT.GET_LOG_AGE +DBMS_SNAPSHOT.GET_MV_DEPENDENCIES +DBMS_SNAPSHOT.I_AM_A_REFRESH +DBMS_SNAPSHOT.PMARKER +DBMS_SNAPSHOT.PURGE_DIRECT_LOAD_LOG +DBMS_SNAPSHOT.PURGE_LOG +DBMS_SNAPSHOT.PURGE_MVIEW_FROM_LOG +DBMS_SNAPSHOT.PURGE_SNAPSHOT_FROM_LOG +DBMS_SNAPSHOT.REFRESH +DBMS_SNAPSHOT.REFRESH_ALL +DBMS_SNAPSHOT.REFRESH_ALL_MVIEWS +DBMS_SNAPSHOT.REFRESH_DEPENDENT +DBMS_SNAPSHOT.REFRESH_MV +DBMS_SNAPSHOT.REGISTER_MVIEW +DBMS_SNAPSHOT.REGISTER_SNAPSHOT +DBMS_SNAPSHOT.SET_I_AM_A_REFRESH +DBMS_SNAPSHOT.SET_UP +DBMS_SNAPSHOT.TESTING +DBMS_SNAPSHOT.UNREGISTER_MVIEW +DBMS_SNAPSHOT.UNREGISTER_SNAPSHOT +DBMS_SNAPSHOT.WRAP_UP +DBMS_SNAPSHOT_COMMON. +DBMS_SNAPSHOT_COMMON.CHECK_PRIVS_ON_TABLE +DBMS_SNAPSHOT_COMMON.CHECK_USER +DBMS_SNAPSHOT_COMMON.HAS_DBA_PRIV +DBMS_SNAPSHOT_KKXRCA. +DBMS_SNAPSHOT_KKXRCA.BEGIN_TABLE_REORGANIZATION +DBMS_SNAPSHOT_KKXRCA.DROP_SNAPSHOT +DBMS_SNAPSHOT_KKXRCA.END_TABLE_REORGANIZATION +DBMS_SNAPSHOT_KKXRCA.EXPLAIN_MVIEW +DBMS_SNAPSHOT_KKXRCA.EXPLAIN_REWRITE +DBMS_SNAPSHOT_KKXRCA.EXPLAIN_REWRITE_SQLID +DBMS_SNAPSHOT_KKXRCA.GET_LOG_AGE +DBMS_SNAPSHOT_KKXRCA.GET_MV_DEPENDENCIES +DBMS_SNAPSHOT_KKXRCA.I_AM_A_REFRESH +DBMS_SNAPSHOT_KKXRCA.PMARKER +DBMS_SNAPSHOT_KKXRCA.PURGE_DIRECT_LOAD_LOG +DBMS_SNAPSHOT_KKXRCA.PURGE_LOG +DBMS_SNAPSHOT_KKXRCA.PURGE_MVIEW_FROM_LOG +DBMS_SNAPSHOT_KKXRCA.PURGE_SNAPSHOT_FROM_LOG +DBMS_SNAPSHOT_KKXRCA.REFRESH +DBMS_SNAPSHOT_KKXRCA.REFRESH_ALL +DBMS_SNAPSHOT_KKXRCA.REFRESH_ALL_MVIEWS +DBMS_SNAPSHOT_KKXRCA.REFRESH_DEPENDENT +DBMS_SNAPSHOT_KKXRCA.REFRESH_MV +DBMS_SNAPSHOT_KKXRCA.REGISTER_MVIEW +DBMS_SNAPSHOT_KKXRCA.REGISTER_SNAPSHOT +DBMS_SNAPSHOT_KKXRCA.SET_I_AM_A_REFRESH +DBMS_SNAPSHOT_KKXRCA.SET_UP +DBMS_SNAPSHOT_KKXRCA.TESTING +DBMS_SNAPSHOT_KKXRCA.UNREGISTER_MVIEW +DBMS_SNAPSHOT_KKXRCA.UNREGISTER_SNAPSHOT +DBMS_SNAPSHOT_KKXRCA.WRAP_UP +DBMS_SNAPSHOT_UTL. +DBMS_SNAPSHOT_UTL.CHECK_REFERENTIAL_CONSTRAINT +DBMS_SNAPSHOT_UTL.CLEANUP_SNAPSHOT_IMPORT +DBMS_SNAPSHOT_UTL.CLEANUP_SUBSCRIPTION +DBMS_SNAPSHOT_UTL.DIRECT_LOAD_USED +DBMS_SNAPSHOT_UTL.DROP_SNAPSHOT +DBMS_SNAPSHOT_UTL.GET_EMPTY_SCALARS +DBMS_SNAPSHOT_UTL.GET_FULLY_QUALIFIED_NAME +DBMS_SNAPSHOT_UTL.GET_LOB_COLUMNS_INFO +DBMS_SNAPSHOT_UTL.GET_LOG_AGE +DBMS_SNAPSHOT_UTL.GET_LOG_NAME +DBMS_SNAPSHOT_UTL.GET_LOG_TYPE +DBMS_SNAPSHOT_UTL.GET_MASK_VECTOR +DBMS_SNAPSHOT_UTL.GET_MAX_BYTES_PER_CHAR +DBMS_SNAPSHOT_UTL.GET_MLOG_FLAG +DBMS_SNAPSHOT_UTL.GET_OBJECT_NAME +DBMS_SNAPSHOT_UTL.GET_PK_BY_EOID +DBMS_SNAPSHOT_UTL.GET_PK_CONSTRAINT_INFO +DBMS_SNAPSHOT_UTL.GET_RELATIONAL_COLUMNS +DBMS_SNAPSHOT_UTL.GET_TYPEINFO_BY_TOID +DBMS_SNAPSHOT_UTL.IMPORT_LOG_TRIGGER_STRING +DBMS_SNAPSHOT_UTL.IMPORT_UPD_TRIGGER_STRING +DBMS_SNAPSHOT_UTL.MASTER_LOG_TYPE +DBMS_SNAPSHOT_UTL.REGISTER_SNAPSHOT +DBMS_SNAPSHOT_UTL.SETUP +DBMS_SNAPSHOT_UTL.SET_UP +DBMS_SNAPSHOT_UTL.SUBSCRIBE +DBMS_SNAPSHOT_UTL.SYNC_UP_LOG +DBMS_SNAPSHOT_UTL.SYNC_UP_UPD +DBMS_SNAPSHOT_UTL.UNREGISTER_SNAPSHOT +DBMS_SNAPSHOT_UTL.UPDATE_LOG_PLACEHOLDER +DBMS_SNAPSHOT_UTL.VALIDATE +DBMS_SNAPSHOT_UTL.VALIDATE_REFRESH +DBMS_SNAPSHOT_UTL.VALIDATE_ROLLBACK_SEGMENT +DBMS_SNAPSHOT_UTL.VECTOR_COMPARE +DBMS_SNAPSHOT_UTL.VERIFY_FC_AGE +DBMS_SNAPSHOT_UTL.VERIFY_LOG +DBMS_SNAPSHOT_UTL.WRAPUP +DBMS_SNAPSHOT_UTL.WRAP_UP +DBMS_SNAP_INTERNAL. +DBMS_SNAP_INTERNAL.ALLOW_UPDATEABLE_MVS +DBMS_SNAP_INTERNAL.BEGIN_TABLE_REORGANIZATION +DBMS_SNAP_INTERNAL.BIC +DBMS_SNAP_INTERNAL.BIS +DBMS_SNAP_INTERNAL.BIT +DBMS_SNAP_INTERNAL.CANONICALIZE_IDENTIFIER +DBMS_SNAP_INTERNAL.CANONICALIZE_MASTER +DBMS_SNAP_INTERNAL.CLEAR_REDIRECTION +DBMS_SNAP_INTERNAL.CONVERT_TO_SELECT_LIST +DBMS_SNAP_INTERNAL.DELETE_REFRESH_OPERATIONS +DBMS_SNAP_INTERNAL.END_TABLE_REORGANIZATION +DBMS_SNAP_INTERNAL.ENSURE_NWAY_MASTER_SITE +DBMS_SNAP_INTERNAL.ENSURE_ONE_WAY_MASTER_SITE +DBMS_SNAP_INTERNAL.ENSURE_SNAPSHOT_SITE +DBMS_SNAP_INTERNAL.GENERATE_REFRESH_OPERATIONS +DBMS_SNAP_INTERNAL.GET_BACK_END_DB +DBMS_SNAP_INTERNAL.GET_INDEX_DDL +DBMS_SNAP_INTERNAL.GET_LOGGING_STATUS +DBMS_SNAP_INTERNAL.GET_TABLE_ID +DBMS_SNAP_INTERNAL.GET_TABLE_XLOCK +DBMS_SNAP_INTERNAL.IAS_CREATE_MV_DDL +DBMS_SNAP_INTERNAL.IAS_XLOCK_EVENT +DBMS_SNAP_INTERNAL.ID_TO_TIMESTAMP +DBMS_SNAP_INTERNAL.INSTANTIATE_OFFLINE +DBMS_SNAP_INTERNAL.IS_IAS +DBMS_SNAP_INTERNAL.I_AM_A_REFRESH +DBMS_SNAP_INTERNAL.LOCAL_NAME_RESOLVE +DBMS_SNAP_INTERNAL.MODIFY_RO_ATTRIBUTE +DBMS_SNAP_INTERNAL.PROHIBIT_UPDATEABLE_MVS +DBMS_SNAP_INTERNAL.REMOVE_BACK_END_DB +DBMS_SNAP_INTERNAL.SET_BACK_END_DB +DBMS_SNAP_INTERNAL.SET_I_AM_AN_ACLMV +DBMS_SNAP_INTERNAL.SET_I_AM_AN_ORACLE_REFRESH +DBMS_SNAP_INTERNAL.SET_LOGGING +DBMS_SNAP_INTERNAL.SET_REDIRECTION +DBMS_SNAP_INTERNAL.SYNC_BACK_END_DB +DBMS_SNAP_INTERNAL.SYNC_UP_LOG +DBMS_SNAP_INTERNAL.SYNC_UP_UPD +DBMS_SNAP_INTERNAL.TEST_REDIRECTION +DBMS_SNAP_INTERNAL.TIMESTAMP_TO_ID +DBMS_SNAP_INTERNAL.TRANSFORM_DDL +DBMS_SNAP_INTERNAL.UPDATEABLE_MVS_ALLOWED +DBMS_SNAP_INTERNAL.VALIDATE_SQL +DBMS_SNAP_INTERNAL.VEC_COLS_IN_TABLE +DBMS_SNAP_REPAPI. +DBMS_SNAP_REPAPI.CONTEXT_GET +DBMS_SNAP_REPAPI.CONTEXT_SET +DBMS_SODA. +DBMS_SODA.CREATE_COLLECTION +DBMS_SODA.DROP_COLLECTION +DBMS_SODA.LIST_COLLECTION_NAMES +DBMS_SODA.OPEN_COLLECTION +DBMS_SODA_ADMIN. +DBMS_SODA_ADMIN.CREATE_COLLECTION +DBMS_SODA_ADMIN.CREATE_INDEX +DBMS_SODA_ADMIN.DELETE_COLLECTION_METADATA +DBMS_SODA_ADMIN.DESCRIBE_COLLECTION +DBMS_SODA_ADMIN.DROP_COLLECTION +DBMS_SODA_ADMIN.DROP_COLLECTIONS +DBMS_SODA_ADMIN.DROP_DANGLING_COLLECTIONS +DBMS_SODA_ADMIN.GET_PARAMETERS +DBMS_SODA_ADMIN.GET_SCN +DBMS_SODA_ADMIN.GET_SQL_TEXT +DBMS_SODA_ADMIN.LIST_COLLECTIONS +DBMS_SODA_DML. +DBMS_SODA_DML.DO_DELETE +DBMS_SODA_DML.DO_DELETE_ALL +DBMS_SODA_DML.DO_DELETE_COLLECTION_METADATA +DBMS_SODA_DML.DO_DROP_DANGLING_COLLECTIONS +DBMS_SODA_DML.DO_INSERT +DBMS_SODA_DML.DO_LOCK +DBMS_SODA_DML.DO_READ_DESCRIPTOR +DBMS_SODA_DML.DO_UPDATE +DBMS_SODA_DOM. +DBMS_SODA_DOM.JSON_MERGE_PATCH +DBMS_SODA_DOM.JSON_MERGE_PATCH_B +DBMS_SODA_DOM.JSON_MERGE_PATCH_C +DBMS_SODA_DOM.JSON_MERGE_PATCH_N +DBMS_SODA_DOM.JSON_MERGE_PATCH_NC +DBMS_SODA_DOM.JSON_MERGE_PATCH_R +DBMS_SODA_DOM.JSON_PATCH +DBMS_SODA_DOM.JSON_PATCH_B +DBMS_SODA_DOM.JSON_PATCH_C +DBMS_SODA_DOM.JSON_PATCH_N +DBMS_SODA_DOM.JSON_PATCH_NC +DBMS_SODA_DOM.JSON_PATCH_R +DBMS_SODA_DOM.JSON_SELECT +DBMS_SODA_DOM.JSON_SELECT_B +DBMS_SODA_DOM.JSON_SELECT_C +DBMS_SODA_DOM.JSON_SELECT_N +DBMS_SODA_DOM.JSON_SELECT_NC +DBMS_SODA_DOM.JSON_SELECT_R +DBMS_SODA_DOM.NUMBER_TO_HEX +DBMS_SODA_DOM.NUMBER_TO_STRING +DBMS_SODA_DOM.TIMESTAMP_TO_NUMBER +DBMS_SODA_DOM.UUID_TO_HEX +DBMS_SODA_UTIL. +DBMS_SODA_UTIL.CHECKCOLUMNS +DBMS_SODA_UTIL.CHECKCOMPAT +DBMS_SODA_UTIL.CHECKSEQUENCEEXISTS +DBMS_SODA_UTIL.CHECKTABLEEXISTS +DBMS_SODA_UTIL.CHECKVIEWEXISTS +DBMS_SODA_UTIL.GETCHARSET +DBMS_SODA_UTIL.GETLONGSTRINGENABLED +DBMS_SODA_UTIL.GETNLSCHARSET +DBMS_SODA_UTIL.GETSCN +DBMS_SODA_UTIL.RAISE_SYSTEM_ERROR +DBMS_SPACE. +DBMS_SPACE.ASA_RECOMMENDATIONS +DBMS_SPACE.AUTO_SPACE_ADVISOR_JOB_PROC +DBMS_SPACE.CREATE_INDEX_COST +DBMS_SPACE.CREATE_TABLE_COST +DBMS_SPACE.DBFS_DF +DBMS_SPACE.FREE_BLOCKS +DBMS_SPACE.ISDATAFILEDROPPABLE_NAME +DBMS_SPACE.OBJECT_DEPENDENT_SEGMENTS +DBMS_SPACE.OBJECT_GROWTH_TREND +DBMS_SPACE.OBJECT_GROWTH_TREND_CUR +DBMS_SPACE.OBJECT_GROWTH_TREND_CURTAB +DBMS_SPACE.OBJECT_GROWTH_TREND_I_TO_S +DBMS_SPACE.OBJECT_GROWTH_TREND_SWRF +DBMS_SPACE.OBJECT_GROWTH_TREND_S_TO_I +DBMS_SPACE.OBJECT_SPACE_USAGE +DBMS_SPACE.OBJECT_SPACE_USAGE_TBF +DBMS_SPACE.PARSE_SPACE_ADV_INFO +DBMS_SPACE.SPACE_USAGE +DBMS_SPACE.UNUSED_SPACE +DBMS_SPACE.VERIFY_SHRINK_CANDIDATE +DBMS_SPACE.VERIFY_SHRINK_CANDIDATE_TBF +DBMS_SPACE_ADMIN. +DBMS_SPACE_ADMIN.ASSM_SEGMENT_SYNCHWM +DBMS_SPACE_ADMIN.ASSM_SEGMENT_VERIFY +DBMS_SPACE_ADMIN.ASSM_TABLESPACE_VERIFY +DBMS_SPACE_ADMIN.DROP_EMPTY_SEGMENTS +DBMS_SPACE_ADMIN.FLUSH_LOBSEGMENT_STATS +DBMS_SPACE_ADMIN.GET_SEGADV_ATTRIB +DBMS_SPACE_ADMIN.HEAT_MAP_SEGMENT_DROP +DBMS_SPACE_ADMIN.HEAT_MAP_SEGMENT_SETMAXSIZE +DBMS_SPACE_ADMIN.IMC_AREA_DUMP +DBMS_SPACE_ADMIN.IMC_SEGMENT_CREATE +DBMS_SPACE_ADMIN.IMC_SEGMENT_DROP +DBMS_SPACE_ADMIN.IMC_SEGMENT_LOAD +DBMS_SPACE_ADMIN.IMC_TABLESPACE_CREATE +DBMS_SPACE_ADMIN.IMC_TABLESPACE_DROP +DBMS_SPACE_ADMIN.IMC_TREE_DUMP +DBMS_SPACE_ADMIN.MATERIALIZE_DEFERRED_SEGMENTS +DBMS_SPACE_ADMIN.MATERIALIZE_DEFERRED_WITH_OPT +DBMS_SPACE_ADMIN.NGLOB_SEGMENT_VERIFY +DBMS_SPACE_ADMIN.PURGE_LOBSEGMENT_STATS +DBMS_SPACE_ADMIN.SEGMENT_CORRUPT +DBMS_SPACE_ADMIN.SEGMENT_DROP_CORRUPT +DBMS_SPACE_ADMIN.SEGMENT_DUMP +DBMS_SPACE_ADMIN.SEGMENT_EXTEND +DBMS_SPACE_ADMIN.SEGMENT_MOVEBLOCKS +DBMS_SPACE_ADMIN.SEGMENT_NUMBER_BLOCKS +DBMS_SPACE_ADMIN.SEGMENT_NUMBER_EXTENTS +DBMS_SPACE_ADMIN.SEGMENT_REPAIR +DBMS_SPACE_ADMIN.SEGMENT_VERIFY +DBMS_SPACE_ADMIN.SET_SEGADV_ATTRIB +DBMS_SPACE_ADMIN.TABLESPACE_DUMP_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_FIX_AFFINITY +DBMS_SPACE_ADMIN.TABLESPACE_FIX_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_FIX_SEGMENT_EXTBLKS +DBMS_SPACE_ADMIN.TABLESPACE_FIX_SEGMENT_STATES +DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL +DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL +DBMS_SPACE_ADMIN.TABLESPACE_REBUILD_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_REBUILD_QUOTAS +DBMS_SPACE_ADMIN.TABLESPACE_RELOCATE_BITMAPS +DBMS_SPACE_ADMIN.TABLESPACE_VERIFY +DBMS_SPACE_ALERT. +DBMS_SPACE_ALERT.DELETE_FROM_ALERT_HISTORY +DBMS_SPACE_ALERT.DELETE_FROM_ALERT_OUTSTANDING +DBMS_SPACE_ALERT.INSERT_INTO_ALERT_HISTORY +DBMS_SPACE_ALERT.INSERT_INTO_ALERT_OUTSTANDING +DBMS_SPACE_ALERT.UPDATE_ALERT_OUTSTANDING +DBMS_SPD. +DBMS_SPD.ALTER_SQL_PLAN_DIRECTIVE +DBMS_SPD.CREATE_STGTAB_DIRECTIVE +DBMS_SPD.DROP_SQL_PLAN_DIRECTIVE +DBMS_SPD.FLUSH_SQL_PLAN_DIRECTIVE +DBMS_SPD.GET_PREFS +DBMS_SPD.PACK_STGTAB_DIRECTIVE +DBMS_SPD.SET_PREFS +DBMS_SPD.TRANSFER_SPD_FOR_DP +DBMS_SPD.UNPACK_STGTAB_DIRECTIVE +DBMS_SPD_INTERNAL.ALTER_SPD +DBMS_SPD_INTERNAL.FLUSH_SPD_CALLOUT +DBMS_SPD_INTERNAL.GET_SPD_TEXT +DBMS_SPD_INTERNAL.GET_VEC_SET_IDS +DBMS_SPD_INTERNAL.IMPORT_DIRECTIVE +DBMS_SPD_INTERNAL.INIT_SCRATCH_TAB +DBMS_SPD_INTERNAL.INSERT_OBJECT +DBMS_SPD_INTERNAL.INSERT_OBJECT_FOR_DP +DBMS_SPD_INTERNAL.REMAP_SPD +DBMS_SPD_INTERNAL.UB8_TO_SQLID +DBMS_SPD_INTERNAL.VERIFY_STGTAB +DBMS_SPM. +DBMS_SPM.ACCEPT_SQL_PLAN_BASELINE +DBMS_SPM.ALTER_SQL_PLAN_BASELINE +DBMS_SPM.CANCEL_EVOLVE_TASK +DBMS_SPM.CONFIGURE +DBMS_SPM.CREATE_EVOLVE_TASK +DBMS_SPM.CREATE_STGTAB_BASELINE +DBMS_SPM.DROP_EVOLVE_TASK +DBMS_SPM.DROP_MIGRATED_STORED_OUTLINE +DBMS_SPM.DROP_SQL_PLAN_BASELINE +DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE +DBMS_SPM.EXECUTE_EVOLVE_TASK +DBMS_SPM.IMPLEMENT_EVOLVE_TASK +DBMS_SPM.INTERRUPT_EVOLVE_TASK +DBMS_SPM.LOAD_PLANS_FROM_AWR +DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE +DBMS_SPM.LOAD_PLANS_FROM_SQLSET +DBMS_SPM.MIGRATE_STORED_OUTLINE +DBMS_SPM.PACK_STGTAB_BASELINE +DBMS_SPM.REPORT_AUTO_EVOLVE_TASK +DBMS_SPM.REPORT_EVOLVE_TASK +DBMS_SPM.RESET_EVOLVE_TASK +DBMS_SPM.RESUME_EVOLVE_TASK +DBMS_SPM.SET_EVOLVE_TASK_PARAMETER +DBMS_SPM.UNPACK_STGTAB_BASELINE +DBMS_SPM_INTERNAL. +DBMS_SPM_INTERNAL.AUTO_PURGE_SQL_PLAN_BASELINE +DBMS_SPM_INTERNAL.CHECK_SPM_ALLOWED +DBMS_SPM_INTERNAL.CREATE_SQL_PLAN_BASELINE +DBMS_SPM_INTERNAL.FETCH_FLAGS_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_HANDLE_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_NAME_USING_SIG_CAT_PID +DBMS_SPM_INTERNAL.FETCH_PLAN_ID_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_PLAN_SIGN_ID_AND_FLAGS +DBMS_SPM_INTERNAL.FETCH_SIG_USING_PLAN_NAME +DBMS_SPM_INTERNAL.FETCH_SIG_USING_SQL_HANDLE +DBMS_SPM_INTERNAL.FETCH_TEXT_USING_SQL_HANDLE +DBMS_SPM_INTERNAL.GET_CONFIG_FILTER_NUM_AND_LEN +DBMS_SPM_INTERNAL.GET_NONACCEPTED_PLANS +DBMS_SPM_INTERNAL.GET_OUTLINE +DBMS_SPM_INTERNAL.GET_PARAM_VALUE +DBMS_SPM_INTERNAL.GET_PLANS_FROM_CC +DBMS_SPM_INTERNAL.GET_PLAN_HASH_2 +DBMS_SPM_INTERNAL.GET_PLAN_OUTLINE +DBMS_SPM_INTERNAL.GET_PLAN_ROWS_FROM_SMB +DBMS_SPM_INTERNAL.GET_SPM_TRACING_VALUE +DBMS_SPM_INTERNAL.GET_SQL_IDS_FROM_CC +DBMS_SPM_INTERNAL.I_ACCEPT_SQL_PLAN_BASELINE +DBMS_SPM_INTERNAL.I_CREATE_AUTO_EVOLVE_TASK +DBMS_SPM_INTERNAL.I_EVOLVE_CHECK_TIME_LIMIT +DBMS_SPM_INTERNAL.I_GET_PLAN +DBMS_SPM_INTERNAL.I_NOTIFY_SMB_CONFIG_UPDATE +DBMS_SPM_INTERNAL.I_PROCESS_SQLSET_ROW_PHV +DBMS_SPM_INTERNAL.I_REPORT_EVOLVE_TASK +DBMS_SPM_INTERNAL.I_SPM_TRC +DBMS_SPM_INTERNAL.LOAD_ALTERNATE_PLANS +DBMS_SPM_INTERNAL.LOAD_PLANS_FROM_AWR +DBMS_SPM_INTERNAL.LOAD_PLANS_FROM_CC +DBMS_SPM_INTERNAL.LOAD_PLANS_FROM_SQLSET +DBMS_SPM_INTERNAL.LOAD_PLANS_SET +DBMS_SPM_INTERNAL.UNMIGRATE_STORED_OUTLINE +DBMS_SPM_INTERNAL.UPDATE_AUTOCAP_CONFIG +DBMS_SPM_INTERNAL.UPDATE_CONFIG +DBMS_SQADM_SYSCALLS. +DBMS_SQADM_SYSCALLS.KWSA_3GL_ADDCSUB +DBMS_SQADM_SYSCALLS.KWSA_3GL_ADDDSUB +DBMS_SQADM_SYSCALLS.KWSA_3GL_ALTERDSUB +DBMS_SQADM_SYSCALLS.KWSA_3GL_DRPCSUB +DBMS_SQADM_SYSCALLS.KWSA_3GL_DRPDSUB +DBMS_SQADM_SYSCALLS.KWSA_3GL_LOCKDSUB +DBMS_SQL. +DBMS_SQL.BIND_ARRAY +DBMS_SQL.BIND_VARIABLE +DBMS_SQL.BIND_VARIABLE_CHAR +DBMS_SQL.BIND_VARIABLE_PKG +DBMS_SQL.BIND_VARIABLE_RAW +DBMS_SQL.BIND_VARIABLE_ROWID +DBMS_SQL.CLOSE_CURSOR +DBMS_SQL.COLUMN_VALUE +DBMS_SQL.COLUMN_VALUE_CHAR +DBMS_SQL.COLUMN_VALUE_LONG +DBMS_SQL.COLUMN_VALUE_RAW +DBMS_SQL.COLUMN_VALUE_ROWID +DBMS_SQL.DEFINE_ARRAY +DBMS_SQL.DEFINE_COLUMN +DBMS_SQL.DEFINE_COLUMN_CHAR +DBMS_SQL.DEFINE_COLUMN_LONG +DBMS_SQL.DEFINE_COLUMN_RAW +DBMS_SQL.DEFINE_COLUMN_ROWID +DBMS_SQL.DESCRIBE_COLUMNS +DBMS_SQL.DESCRIBE_COLUMNS2 +DBMS_SQL.DESCRIBE_COLUMNS3 +DBMS_SQL.EXECUTE +DBMS_SQL.EXECUTE_AND_FETCH +DBMS_SQL.FETCH_ROWS +DBMS_SQL.GET_NEXT_RESULT +DBMS_SQL.IS_OPEN +DBMS_SQL.LAST_ERROR_POSITION +DBMS_SQL.LAST_ROW_COUNT +DBMS_SQL.LAST_ROW_ID +DBMS_SQL.LAST_SQL_FUNCTION_CODE +DBMS_SQL.OPEN_CURSOR +DBMS_SQL.PARSE +DBMS_SQL.RETURN_RESULT +DBMS_SQL.TO_CURSOR_NUMBER +DBMS_SQL.TO_REFCURSOR +DBMS_SQL.VARIABLE_VALUE +DBMS_SQL.VARIABLE_VALUE_CHAR +DBMS_SQL.VARIABLE_VALUE_PKG +DBMS_SQL.VARIABLE_VALUE_RAW +DBMS_SQL.VARIABLE_VALUE_ROWID +DBMS_SQLDIAG. +DBMS_SQLDIAG.ACCEPT_SQL_PATCH +DBMS_SQLDIAG.ALTER_SQL_PATCH +DBMS_SQLDIAG.CANCEL_DIAGNOSIS_TASK +DBMS_SQLDIAG.CREATE_DIAGNOSIS_TASK +DBMS_SQLDIAG.CREATE_SQL_PATCH +DBMS_SQLDIAG.CREATE_STGTAB_SQLPATCH +DBMS_SQLDIAG.DROP_DIAGNOSIS_TASK +DBMS_SQLDIAG.DROP_SQL_PATCH +DBMS_SQLDIAG.DUMP_TRACE +DBMS_SQLDIAG.EXECUTE_DIAGNOSIS_TASK +DBMS_SQLDIAG.EXPLAIN_SQL_TESTCASE +DBMS_SQLDIAG.EXPORT_SQL_TESTCASE +DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_INC +DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_TXT +DBMS_SQLDIAG.GETSQL +DBMS_SQLDIAG.GET_FIX_CONTROL +DBMS_SQLDIAG.IMPORT_SQL_TESTCASE +DBMS_SQLDIAG.INCIDENTID_2_SQL +DBMS_SQLDIAG.INTERRUPT_DIAGNOSIS_TASK +DBMS_SQLDIAG.LOAD_SQLSET_FROM_TCB +DBMS_SQLDIAG.PACK_STGTAB_SQLPATCH +DBMS_SQLDIAG.REPLAY_SQL_TESTCASE +DBMS_SQLDIAG.REPORT_DIAGNOSIS_TASK +DBMS_SQLDIAG.RESET_DIAGNOSIS_TASK +DBMS_SQLDIAG.RESUME_DIAGNOSIS_TASK +DBMS_SQLDIAG.SET_DIAGNOSIS_TASK_PARAMETER +DBMS_SQLDIAG.SET_TCB_TRACING +DBMS_SQLDIAG.SQL_DIAGNOSE_AND_REPAIR +DBMS_SQLDIAG.UNPACK_STGTAB_SQLPATCH +DBMS_SQLDIAG_INTERNAL. +DBMS_SQLDIAG_INTERNAL.CLOB_TO_SQLPROF_ATTR +DBMS_SQLDIAG_INTERNAL.I_CREATE_HINTSET +DBMS_SQLDIAG_INTERNAL.I_CREATE_INCIDENT +DBMS_SQLDIAG_INTERNAL.I_CREATE_PATCH +DBMS_SQLDIAG_INTERNAL.I_GENERATE_PARAM_IMPORT +DBMS_SQLDIAG_INTERNAL.I_GENERATE_SS_IMPORT +DBMS_SQLDIAG_INTERNAL.I_GET_DBVERSION +DBMS_SQLDIAG_INTERNAL.I_GET_INCIDENTID +DBMS_SQLDIAG_INTERNAL.I_GET_INCIDENT_FOR_SQLID +DBMS_SQLDIAG_INTERNAL.I_GET_INCIDENT_TYPE +DBMS_SQLDIAG_INTERNAL.I_INCIDENTID_2_SQL +DBMS_SQLDIAG_INTERNAL.I_REMOVE_INCIDENT +DBMS_SQLDIAG_INTERNAL.I_VALIDATE_PROBLEM_TYPE +DBMS_SQLHASH. +DBMS_SQLHASH.GETHASH +DBMS_SQLJTYPE. +DBMS_SQLJTYPE.VALIDATECLASS +DBMS_SQLJTYPE.VALIDATETYPE +DBMS_SQLPA. +DBMS_SQLPA.CANCEL_ANALYSIS_TASK +DBMS_SQLPA.CREATE_ANALYSIS_TASK +DBMS_SQLPA.DROP_ANALYSIS_TASK +DBMS_SQLPA.EXECUTE_ANALYSIS_TASK +DBMS_SQLPA.GET_SESS_OPTIMIZER_ENV +DBMS_SQLPA.INTERRUPT_ANALYSIS_TASK +DBMS_SQLPA.REMOTE_PROCESS_SQL +DBMS_SQLPA.REPORT_ANALYSIS_TASK +DBMS_SQLPA.RESET_ANALYSIS_TASK +DBMS_SQLPA.RESUME_ANALYSIS_TASK +DBMS_SQLPA.SET_ANALYSIS_DEFAULT_PARAMETER +DBMS_SQLPA.SET_ANALYSIS_TASK_PARAMETER +DBMS_SQLPA.SET_QUICK_CHECK_TASK +DBMS_SQLPATCH. +DBMS_SQLPATCH.ALL_PATCHES +DBMS_SQLPATCH.BODY_BUILD_HEADER +DBMS_SQLPATCH.CLEAR_STATE +DBMS_SQLPATCH.CURRENT_RU_VERSION +DBMS_SQLPATCH.EVENT_VALUE +DBMS_SQLPATCH.GET_OPATCH_LSINVENTORY +DBMS_SQLPATCH.INSTALLED_PATCHES +DBMS_SQLPATCH.INSTALL_FILE +DBMS_SQLPATCH.LAST_SUCCESSFUL_RU_VERSION +DBMS_SQLPATCH.OPATCH_REGISTRY_STATE +DBMS_SQLPATCH.PATCH_FINALIZE +DBMS_SQLPATCH.PATCH_INITIALIZE +DBMS_SQLPATCH.SESSION_INITIALIZE +DBMS_SQLPATCH.SET_FILE_METADATA +DBMS_SQLPATCH.SET_PATCH_METADATA +DBMS_SQLPATCH.SQL_REGISTRY_STATE +DBMS_SQLPATCH.UPDATE_PATCH_METADATA +DBMS_SQLPATCH.VERIFY_QUERYABLE_INVENTORY +DBMS_SQLSET. +DBMS_SQLSET.ADD_REFERENCE +DBMS_SQLSET.CAPTURE_CURSOR_CACHE +DBMS_SQLSET.CREATE_SQLSET +DBMS_SQLSET.CREATE_STGTAB +DBMS_SQLSET.DELETE_SQLSET +DBMS_SQLSET.DROP_SQLSET +DBMS_SQLSET.LOAD_SQLSET +DBMS_SQLSET.PACK_STGTAB +DBMS_SQLSET.REMAP_STGTAB +DBMS_SQLSET.REMOVE_REFERENCE +DBMS_SQLSET.SELECT_CURSOR_CACHE +DBMS_SQLSET.SELECT_SQLPA_TASK +DBMS_SQLSET.SELECT_SQLSET +DBMS_SQLSET.SELECT_SQL_TRACE +DBMS_SQLSET.SELECT_WORKLOAD_REPOSITORY +DBMS_SQLSET.UNPACK_STGTAB +DBMS_SQLSET.UPDATE_SQLSET +DBMS_SQLTCB_INTERNAL.I_CAPTURE_BIND_LIST +DBMS_SQLTCB_INTERNAL.I_CLOB_LOAD +DBMS_SQLTCB_INTERNAL.I_COMPRESS_TESTCASE +DBMS_SQLTCB_INTERNAL.I_CONVERT_FROM_BOOLEAN +DBMS_SQLTCB_INTERNAL.I_CONVERT_TO_BOOLEAN +DBMS_SQLTCB_INTERNAL.I_EXPLAIN_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_GENERATE_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_GET_FILE_NAME +DBMS_SQLTCB_INTERNAL.I_IMPORT_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_REPLAY_BIND_LIST +DBMS_SQLTCB_INTERNAL.I_REPLAY_SQL_TESTCASE +DBMS_SQLTCB_INTERNAL.I_SET_TRACING +DBMS_SQLTCB_INTERNAL.I_TCB_CHECK_REPLAY_PARAMETERS +DBMS_SQLTCB_INTERNAL.I_TCB_HAS_DYN_STS +DBMS_SQLTCB_INTERNAL.I_TCB_INIT_SCRIPT_PREFIX +DBMS_SQLTCB_INTERNAL.I_VALIDATE_INCIDENTID +DBMS_SQLTCB_INTERNAL.UPCASE +DBMS_SQLTUNE. +DBMS_SQLTUNE.ACCEPT_ALL_SQL_PROFILES +DBMS_SQLTUNE.ACCEPT_SQL_PROFILE +DBMS_SQLTUNE.ADD_SQLSET_REFERENCE +DBMS_SQLTUNE.ALTER_PLAN_OBJECT_XML +DBMS_SQLTUNE.ALTER_SQL_PROFILE +DBMS_SQLTUNE.ALTER_TUNING_TASK_XML +DBMS_SQLTUNE.BUILD_STASH_XML +DBMS_SQLTUNE.CANCEL_TUNING_TASK +DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSET +DBMS_SQLTUNE.CAP_STS_CBK +DBMS_SQLTUNE.CHECK_SQLSET_PRIVS +DBMS_SQLTUNE.CHECK_SQL_PROFILE_PRIV +DBMS_SQLTUNE.CHECK_TUNING_TASK_STATUS +DBMS_SQLTUNE.CONFIGURE_TUNING_TASK_XML +DBMS_SQLTUNE.CREATE_SQLSET +DBMS_SQLTUNE.CREATE_SQL_PLAN_BASELINE +DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF +DBMS_SQLTUNE.CREATE_STGTAB_SQLSET +DBMS_SQLTUNE.CREATE_TUNING_TASK +DBMS_SQLTUNE.DELETE_SQLSET +DBMS_SQLTUNE.DROP_PLAN_OBJECT_XML +DBMS_SQLTUNE.DROP_SQLSET +DBMS_SQLTUNE.DROP_SQL_PROFILE +DBMS_SQLTUNE.DROP_TUNING_TASK +DBMS_SQLTUNE.EXAMINE_STGTAB +DBMS_SQLTUNE.EXECUTE_TUNING_TASK +DBMS_SQLTUNE.EXPORT_PLAN_OBJECT_XML +DBMS_SQLTUNE.EXTRACT_BIND +DBMS_SQLTUNE.EXTRACT_BINDS +DBMS_SQLTUNE.IMPLEMENT_TUNING_TASK +DBMS_SQLTUNE.IMPLEMENT_TUNING_TASK_XML +DBMS_SQLTUNE.IMPORT_PLAN_OBJECT_XML +DBMS_SQLTUNE.IMPORT_SQL_PROFILE +DBMS_SQLTUNE.INTERRUPT_TUNING_TASK +DBMS_SQLTUNE.LIST_ALL_DIRECTORIES_XML +DBMS_SQLTUNE.LOAD_SQLSET +DBMS_SQLTUNE.LOAD_SQL_PLAN_BASELINE_XML +DBMS_SQLTUNE.PACK_STGTAB_SQLPROF +DBMS_SQLTUNE.PACK_STGTAB_SQLSET +DBMS_SQLTUNE.PREPARE_AWR_STATEMENT +DBMS_SQLTUNE.PREPARE_SQLSET_STATEMENT +DBMS_SQLTUNE.REMAP_STGTAB_SQLPROF +DBMS_SQLTUNE.REMAP_STGTAB_SQLSET +DBMS_SQLTUNE.REMOVE_SQLSET_REFERENCE +DBMS_SQLTUNE.REPORT_AUTO_TUNING_TASK +DBMS_SQLTUNE.REPORT_SQL_DETAIL +DBMS_SQLTUNE.REPORT_SQL_DETAIL_XML +DBMS_SQLTUNE.REPORT_SQL_MONITOR +DBMS_SQLTUNE.REPORT_SQL_MONITOR_LIST +DBMS_SQLTUNE.REPORT_SQL_MONITOR_LIST_XML +DBMS_SQLTUNE.REPORT_SQL_MONITOR_XML +DBMS_SQLTUNE.REPORT_TUNING_TASK +DBMS_SQLTUNE.REPORT_TUNING_TASK_LIST_XML +DBMS_SQLTUNE.REPORT_TUNING_TASK_XML +DBMS_SQLTUNE.RESET_TUNING_TASK +DBMS_SQLTUNE.RESUME_TUNING_TASK +DBMS_SQLTUNE.SCHEDULE_TUNING_TASK +DBMS_SQLTUNE.SCRIPT_TUNING_TASK +DBMS_SQLTUNE.SELECT_CURSOR_CACHE +DBMS_SQLTUNE.SELECT_SQLPA_TASK +DBMS_SQLTUNE.SELECT_SQLSET +DBMS_SQLTUNE.SELECT_SQL_TRACE +DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY +DBMS_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER +DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER +DBMS_SQLTUNE.SQLSET_PROGRESS_STATS +DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE +DBMS_SQLTUNE.TRANSFORM_SQLSET_CURSOR +DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF +DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET +DBMS_SQLTUNE.UPDATE_SQLSET +DBMS_SQLTUNE_INTERNAL. +DBMS_SQLTUNE_INTERNAL.ACCEPT_ALL_SQL_PROFILES +DBMS_SQLTUNE_INTERNAL.EXEC_EMX_TUNING_TASK_CALLOUT +DBMS_SQLTUNE_INTERNAL.GET_BEGIN_EXECUTION +DBMS_SQLTUNE_INTERNAL.GET_SQLSET_USERBINDS +DBMS_SQLTUNE_INTERNAL.I_ACCEPT_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_ADD_SQLSET_REFERENCE +DBMS_SQLTUNE_INTERNAL.I_ADD_TASK_SQLSET_REFERENCE +DBMS_SQLTUNE_INTERNAL.I_ALLOW_BIND_FLUSH +DBMS_SQLTUNE_INTERNAL.I_ALTER_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_ASSERT_INPUT +DBMS_SQLTUNE_INTERNAL.I_CHECK_ACTIVE +DBMS_SQLTUNE_INTERNAL.I_CLONE_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_COMBINE_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_CREATE_AUTO_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_CREATE_SQLSET +DBMS_SQLTUNE_INTERNAL.I_CREATE_SQL_PLAN_BASELINE +DBMS_SQLTUNE_INTERNAL.I_CREATE_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_CREATE_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_DECR_REFC_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_DELETE_SQLSET +DBMS_SQLTUNE_INTERNAL.I_DROP_SQLSET +DBMS_SQLTUNE_INTERNAL.I_DROP_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_DROP_USER_SQLSETS +DBMS_SQLTUNE_INTERNAL.I_DUMP_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_FORMAT_ERROR +DBMS_SQLTUNE_INTERNAL.I_FORMAT_LINE1 +DBMS_SQLTUNE_INTERNAL.I_FORMAT_LINE2 +DBMS_SQLTUNE_INTERNAL.I_FORMAT_SEPARATOR +DBMS_SQLTUNE_INTERNAL.I_FORMAT_TEXT +DBMS_SQLTUNE_INTERNAL.I_FORMAT_TITLE1 +DBMS_SQLTUNE_INTERNAL.I_FORMAT_TITLE2 +DBMS_SQLTUNE_INTERNAL.I_FORMAT_TITLE3 +DBMS_SQLTUNE_INTERNAL.I_FORMAT_TITLE4 +DBMS_SQLTUNE_INTERNAL.I_GET_COMMAND_PIECES +DBMS_SQLTUNE_INTERNAL.I_GET_DBLINK_TO_PRIMARY_XML +DBMS_SQLTUNE_INTERNAL.I_GET_PLAN_QUERY_TEXT +DBMS_SQLTUNE_INTERNAL.I_GET_REPORT_EXECSUBQ +DBMS_SQLTUNE_INTERNAL.I_INIT_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_INSERT_SQLSET_SQLTEXT +DBMS_SQLTUNE_INTERNAL.I_INSERT_STS_TOPACK +DBMS_SQLTUNE_INTERNAL.I_LOAD_SQLSET_CURSOR +DBMS_SQLTUNE_INTERNAL.I_LOAD_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_LOCK_SQLSET +DBMS_SQLTUNE_INTERNAL.I_MOVE_DELTA_COLUMNS +DBMS_SQLTUNE_INTERNAL.I_OPEN_IMPL_PROFILE_CURSOR +DBMS_SQLTUNE_INTERNAL.I_OPEN_SCRIPT_CURSOR +DBMS_SQLTUNE_INTERNAL.I_PARSE_SCRIPT_REC_TYPES +DBMS_SQLTUNE_INTERNAL.I_PROCESS_SQL +DBMS_SQLTUNE_INTERNAL.I_QUALIFIED_NAME +DBMS_SQLTUNE_INTERNAL.I_REMOVE_SQLSET_REFERENCE +DBMS_SQLTUNE_INTERNAL.I_REPORT_AUTO_SUMMARY_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_COMPARE_PLANS_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_SQLT_SINGLE_SQL_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_SQLT_SUMMARY_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_SQL_TABLE_XML +DBMS_SQLTUNE_INTERNAL.I_REPORT_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_SCRIPT_TUNING_TASK +DBMS_SQLTUNE_INTERNAL.I_SQL_RECURSIVE +DBMS_SQLTUNE_INTERNAL.I_SUB_EXECUTE +DBMS_SQLTUNE_INTERNAL.I_TRACK_SQLMON_REPT_USAGE +DBMS_SQLTUNE_INTERNAL.I_TRUNC_STS_TOPACK +DBMS_SQLTUNE_INTERNAL.I_UNLOCK_SQLSET +DBMS_SQLTUNE_INTERNAL.I_UNPACK_SQLSETS_BULK +DBMS_SQLTUNE_INTERNAL.I_UPDATE_AWR_SQLTEXT_REFCOUNT +DBMS_SQLTUNE_INTERNAL.I_UPDATE_CAPTURE_STATS +DBMS_SQLTUNE_INTERNAL.I_UPDATE_SQLSET +DBMS_SQLTUNE_INTERNAL.I_UPDATE_SQL_PROFILE +DBMS_SQLTUNE_INTERNAL.I_VALIDATE_LEVEL +DBMS_SQLTUNE_INTERNAL.I_VALIDATE_PROCESS_ACTION +DBMS_SQLTUNE_INTERNAL.I_VALIDATE_TUNING_PARAMETER +DBMS_SQLTUNE_INTERNAL.RETRIEVE_AUTOTUNE_INFO_XML +DBMS_SQLTUNE_INTERNAL.SQLDET_FINDSQL_XML +DBMS_SQLTUNE_INTERNAL.SQLMON_PARSE_REPORT_REF +DBMS_SQLTUNE_INTERNAL.TEST_KSD_TRACE +DBMS_SQLTUNE_INTERNAL.TEST_PROCESS_SQLSET +DBMS_SQLTUNE_UTIL0. +DBMS_SQLTUNE_UTIL0.ADD_SUBST_PATTERN +DBMS_SQLTUNE_UTIL0.CDBCON_DBID_TO_NAME +DBMS_SQLTUNE_UTIL0.CDBCON_ID_TO_DBID +DBMS_SQLTUNE_UTIL0.CDBCON_NAME2IDS +DBMS_SQLTUNE_UTIL0.CDB_IS_PDB +DBMS_SQLTUNE_UTIL0.CDB_IS_ROOT +DBMS_SQLTUNE_UTIL0.CHECK_DV_ACCESS +DBMS_SQLTUNE_UTIL0.EXTRACT_BIND +DBMS_SQLTUNE_UTIL0.EXTRACT_BINDS +DBMS_SQLTUNE_UTIL0.GET_BINDS_COUNT +DBMS_SQLTUNE_UTIL0.GET_DB_LINK_TO_PRIM +DBMS_SQLTUNE_UTIL0.GET_SUBST_QUERY +DBMS_SQLTUNE_UTIL0.IS_BIND_MASKED +DBMS_SQLTUNE_UTIL0.SET_DB_LINK_TO_PRIM +DBMS_SQLTUNE_UTIL0.SQLTEXT_TO_SIGNATURE +DBMS_SQLTUNE_UTIL0.SQLTEXT_TO_SQLID +DBMS_SQLTUNE_UTIL0.VALIDATE_SQLID +DBMS_SQLTUNE_UTIL1. +DBMS_SQLTUNE_UTIL1.ALTER_SESSION_PARAMETER +DBMS_SQLTUNE_UTIL1.CHECK_STBY_OPER +DBMS_SQLTUNE_UTIL1.COPY_CLOB +DBMS_SQLTUNE_UTIL1.GET_AWR_QUERY_TEXT +DBMS_SQLTUNE_UTIL1.GET_AWR_VIEW_LOCATION +DBMS_SQLTUNE_UTIL1.GET_CURRENT_TIME +DBMS_SQLTUNE_UTIL1.GET_DBID_FROM_CONID +DBMS_SQLTUNE_UTIL1.GET_EXECUTION_TYPE +DBMS_SQLTUNE_UTIL1.GET_SEQ_REMOTE +DBMS_SQLTUNE_UTIL1.GET_SQLSET_CON_DBID +DBMS_SQLTUNE_UTIL1.GET_SQLSET_IDENTIFIER +DBMS_SQLTUNE_UTIL1.GET_SQLSET_NB_STMTS +DBMS_SQLTUNE_UTIL1.GET_TASK_NAME +DBMS_SQLTUNE_UTIL1.GET_VIEW_TEXT +DBMS_SQLTUNE_UTIL1.GET_WKLDTYPE_NAME +DBMS_SQLTUNE_UTIL1.INIT_REMOTE_CONTEXT +DBMS_SQLTUNE_UTIL1.INIT_TASK_SPAOBJ +DBMS_SQLTUNE_UTIL1.INIT_TASK_WKLDOBJ +DBMS_SQLTUNE_UTIL1.IS_ADAPTIVE_PLAN +DBMS_SQLTUNE_UTIL1.IS_EXADATA_PROFILE +DBMS_SQLTUNE_UTIL1.IS_RUNNING_FAKE_CC_TEST +DBMS_SQLTUNE_UTIL1.IS_SESSION_MONITORED +DBMS_SQLTUNE_UTIL1.IS_STANDBY +DBMS_SQLTUNE_UTIL1.REPLACE_AWR_VIEW_PREFIX +DBMS_SQLTUNE_UTIL1.RESOLVE_DB_TYPE +DBMS_SQLTUNE_UTIL1.RESOLVE_EXEC_NAME +DBMS_SQLTUNE_UTIL1.RESTORE_SESSION_PARAMETER +DBMS_SQLTUNE_UTIL1.VALIDATE_NAME +DBMS_SQLTUNE_UTIL1.VALIDATE_TASK_STATUS +DBMS_SQLTUNE_UTIL2. +DBMS_SQLTUNE_UTIL2.CHECK_PRIV +DBMS_SQLTUNE_UTIL2.GET_SQLSET_USERBINDS +DBMS_SQLTUNE_UTIL2.GET_TIMING_INFO +DBMS_SQLTUNE_UTIL2.IS_IMPORTED_CDB +DBMS_SQLTUNE_UTIL2.IS_IMPORTED_PDB +DBMS_SQLTUNE_UTIL2.IS_RAS_USER +DBMS_SQLTUNE_UTIL2.RESOLVE_DATABASE_TYPE +DBMS_SQLTUNE_UTIL2.RESOLVE_USERNAME +DBMS_SQLTUNE_UTIL2.SQL_BINDS_NTAB_TO_VARRAY +DBMS_SQLTUNE_UTIL2.SQL_BINDS_VARRAY_TO_NTAB +DBMS_SQLTUNE_UTIL2.VALIDATE_SNAPSHOT +DBMS_SQLTUNE_UTIL2.VARR_TO_HINTS_XML +DBMS_SQL_MONITOR. +DBMS_SQL_MONITOR.BEGIN_OPERATION +DBMS_SQL_MONITOR.END_OPERATION +DBMS_SQL_MONITOR.REPORT_SQL_MONITOR +DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_LIST +DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_LIST_XML +DBMS_SQL_MONITOR.REPORT_SQL_MONITOR_XML +DBMS_SQL_TRANSLATOR. +DBMS_SQL_TRANSLATOR.CLEAR_SQL_TRANSLATION_ERROR +DBMS_SQL_TRANSLATOR.CREATE_PROFILE +DBMS_SQL_TRANSLATOR.DEREGISTER_ERROR_TRANSLATION +DBMS_SQL_TRANSLATOR.DEREGISTER_SQL_TRANSLATION +DBMS_SQL_TRANSLATOR.DROP_PROFILE +DBMS_SQL_TRANSLATOR.ENABLE_ERROR_TRANSLATION +DBMS_SQL_TRANSLATOR.ENABLE_SQL_TRANSLATION +DBMS_SQL_TRANSLATOR.EXPORT_PROFILE +DBMS_SQL_TRANSLATOR.IMPORT_PROFILE +DBMS_SQL_TRANSLATOR.REGISTER_ERROR_TRANSLATION +DBMS_SQL_TRANSLATOR.REGISTER_SQL_TRANSLATION +DBMS_SQL_TRANSLATOR.SET_ATTRIBUTE +DBMS_SQL_TRANSLATOR.SET_DICTIONARY_SQL_ID +DBMS_SQL_TRANSLATOR.SET_ERROR_TRANSLATION_COMMENT +DBMS_SQL_TRANSLATOR.SET_SQL_TRANSLATION_COMMENT +DBMS_SQL_TRANSLATOR.SET_SQL_TRANSLATION_MODULE +DBMS_SQL_TRANSLATOR.SQL_HASH +DBMS_SQL_TRANSLATOR.SQL_ID +DBMS_SQL_TRANSLATOR.TRANSLATE_ERROR +DBMS_SQL_TRANSLATOR.TRANSLATE_SQL +DBMS_SQL_TRANSLATOR_EXPORT. +DBMS_SQL_TRANSLATOR_EXPORT.AUDIT_EXP +DBMS_SQL_TRANSLATOR_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SQL_TRANSLATOR_EXPORT.CREATE_EXP +DBMS_SQL_TRANSLATOR_EXPORT.DROP_EXP +DBMS_SQL_TRANSLATOR_EXPORT.GRANT_EXP +DBMS_SQL_TRANSLATOR_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_STANDARD. +DBMS_STANDARD.APPLYING_CROSSEDITION_TRIGGER +DBMS_STANDARD.CLIENT_IP_ADDRESS +DBMS_STANDARD.COMMIT +DBMS_STANDARD.COMMIT_CM +DBMS_STANDARD.DATABASE_NAME +DBMS_STANDARD.DELETING +DBMS_STANDARD.DES_ENCRYPTED_PASSWORD +DBMS_STANDARD.DICTIONARY_OBJ_NAME +DBMS_STANDARD.DICTIONARY_OBJ_NAME_LIST +DBMS_STANDARD.DICTIONARY_OBJ_OWNER +DBMS_STANDARD.DICTIONARY_OBJ_OWNER_LIST +DBMS_STANDARD.DICTIONARY_OBJ_TYPE +DBMS_STANDARD.GRANTEE +DBMS_STANDARD.INSERTING +DBMS_STANDARD.INSTANCE_NUM +DBMS_STANDARD.IS_ALTER_COLUMN +DBMS_STANDARD.IS_CREATING_NESTED_TABLE +DBMS_STANDARD.IS_DROP_COLUMN +DBMS_STANDARD.IS_SERVERERROR +DBMS_STANDARD.LOGIN_USER +DBMS_STANDARD.ORA_MAX_NAME_LEN_SUPPORTED +DBMS_STANDARD.ORIGINAL_SQL_TXT +DBMS_STANDARD.PARTITION_POS +DBMS_STANDARD.PRIVILEGE_LIST +DBMS_STANDARD.RAISE_APPLICATION_ERROR +DBMS_STANDARD.REVOKEE +DBMS_STANDARD.ROLLBACK_NR +DBMS_STANDARD.ROLLBACK_SV +DBMS_STANDARD.SAVEPOINT +DBMS_STANDARD.SERVER_ERROR +DBMS_STANDARD.SERVER_ERROR_DEPTH +DBMS_STANDARD.SERVER_ERROR_MSG +DBMS_STANDARD.SERVER_ERROR_NUM_PARAMS +DBMS_STANDARD.SERVER_ERROR_PARAM +DBMS_STANDARD.SET_TRANSACTION_USE +DBMS_STANDARD.SQL_TXT +DBMS_STANDARD.SYSEVENT +DBMS_STANDARD.SYS_GETTRIGGERSTATE +DBMS_STANDARD.UPDATING +DBMS_STANDARD.WITH_GRANT_OPTION +DBMS_STATS +DBMS_STATS. +DBMS_STATS.ALTER_DATABASE_TAB_MONITORING +DBMS_STATS.ALTER_SCHEMA_TAB_MONITORING +DBMS_STATS.ALTER_STATS_HISTORY_RETENTION +DBMS_STATS.CANCEL_ADVISOR_TASK +DBMS_STATS.CLEANUP_STATS_JOB_PROC +DBMS_STATS.CLOB_TO_VARRAY +DBMS_STATS.COLUMN_NEED_HIST +DBMS_STATS.CONFIGURE_ADVISOR_FILTER +DBMS_STATS.CONFIGURE_ADVISOR_OBJ_FILTER +DBMS_STATS.CONFIGURE_ADVISOR_OPR_FILTER +DBMS_STATS.CONFIGURE_ADVISOR_RULE_FILTER +DBMS_STATS.CONVERT_RAW_TO_BIN_DOUBLE +DBMS_STATS.CONVERT_RAW_TO_BIN_FLOAT +DBMS_STATS.CONVERT_RAW_TO_DATE +DBMS_STATS.CONVERT_RAW_TO_NUMBER +DBMS_STATS.CONVERT_RAW_TO_NVARCHAR +DBMS_STATS.CONVERT_RAW_TO_ROWID +DBMS_STATS.CONVERT_RAW_TO_VARCHAR2 +DBMS_STATS.CONVERT_RAW_VALUE +DBMS_STATS.CONVERT_RAW_VALUE_NVARCHAR +DBMS_STATS.CONVERT_RAW_VALUE_ROWID +DBMS_STATS.CONV_RAW +DBMS_STATS.COPY_TABLE_STATS +DBMS_STATS.CREATE_ADVISOR_TASK +DBMS_STATS.CREATE_EXTENDED_STATS +DBMS_STATS.CREATE_STAT_TABLE +DBMS_STATS.DELETE_COLUMN_STATS +DBMS_STATS.DELETE_DATABASE_PREFS +DBMS_STATS.DELETE_DATABASE_STATS +DBMS_STATS.DELETE_DICTIONARY_STATS +DBMS_STATS.DELETE_FIXED_OBJECTS_STATS +DBMS_STATS.DELETE_INDEX_STATS +DBMS_STATS.DELETE_PENDING_STATS +DBMS_STATS.DELETE_PENDING_SYSTEM_STATS +DBMS_STATS.DELETE_PROCESSING_RATE +DBMS_STATS.DELETE_SCHEMA_PREFS +DBMS_STATS.DELETE_SCHEMA_STATS +DBMS_STATS.DELETE_SYSTEM_STATS +DBMS_STATS.DELETE_TABLE_PREFS +DBMS_STATS.DELETE_TABLE_STATS +DBMS_STATS.DIFF_TABLE_STATS_IN_HISTORY +DBMS_STATS.DIFF_TABLE_STATS_IN_PENDING +DBMS_STATS.DIFF_TABLE_STATS_IN_STATTAB +DBMS_STATS.DROP_ADVISOR_TASK +DBMS_STATS.DROP_EXTENDED_STATS +DBMS_STATS.DROP_STAT_TABLE +DBMS_STATS.EXECUTE_ADVISOR_TASK +DBMS_STATS.EXPORT_COLUMN_STATS +DBMS_STATS.EXPORT_DATABASE_PREFS +DBMS_STATS.EXPORT_DATABASE_STATS +DBMS_STATS.EXPORT_DICTIONARY_STATS +DBMS_STATS.EXPORT_FIXED_OBJECTS_STATS +DBMS_STATS.EXPORT_INDEX_STATS +DBMS_STATS.EXPORT_PENDING_STATS +DBMS_STATS.EXPORT_PENDING_SYSTEM_STATS +DBMS_STATS.EXPORT_SCHEMA_PREFS +DBMS_STATS.EXPORT_SCHEMA_STATS +DBMS_STATS.EXPORT_STATS_FOR_DP +DBMS_STATS.EXPORT_SYSTEM_STATS +DBMS_STATS.EXPORT_TABLE_PREFS +DBMS_STATS.EXPORT_TABLE_STATS +DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO +DBMS_STATS.GATHER_DATABASE_STATS +DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC +DBMS_STATS.GATHER_DICTIONARY_STATS +DBMS_STATS.GATHER_FIXED_OBJECTS_STATS +DBMS_STATS.GATHER_INDEX_STATS +DBMS_STATS.GATHER_PROCESSING_RATE +DBMS_STATS.GATHER_SCHEMA_STATS +DBMS_STATS.GATHER_SYSTEM_STATS +DBMS_STATS.GATHER_TABLE_STATS +DBMS_STATS.GATHER_TABLE_STATS_FUNC +DBMS_STATS.GENERATE_STATS +DBMS_STATS.GEN_SELMAP +DBMS_STATS.GET_ADVISOR_OPR_FILTER +DBMS_STATS.GET_ADVISOR_RECS +DBMS_STATS.GET_COLUMN_STATS +DBMS_STATS.GET_COMPATIBLE +DBMS_STATS.GET_INDEX_STATS +DBMS_STATS.GET_PARAM +DBMS_STATS.GET_PREFS +DBMS_STATS.GET_ROW_COUNT_ESTIMATE +DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY +DBMS_STATS.GET_STATS_HISTORY_RETENTION +DBMS_STATS.GET_STAT_TAB_VERSION +DBMS_STATS.GET_SYSTEM_STATS +DBMS_STATS.GET_TABLE_STATS +DBMS_STATS.IMPLEMENT_ADVISOR_TASK +DBMS_STATS.IMPORT_COLUMN_STATS +DBMS_STATS.IMPORT_DATABASE_PREFS +DBMS_STATS.IMPORT_DATABASE_STATS +DBMS_STATS.IMPORT_DICTIONARY_STATS +DBMS_STATS.IMPORT_FIXED_OBJECTS_STATS +DBMS_STATS.IMPORT_INDEX_STATS +DBMS_STATS.IMPORT_SCHEMA_PREFS +DBMS_STATS.IMPORT_SCHEMA_STATS +DBMS_STATS.IMPORT_STATS_FOR_DP +DBMS_STATS.IMPORT_SYSTEM_STATS +DBMS_STATS.IMPORT_TABLE_PREFS +DBMS_STATS.IMPORT_TABLE_STATS +DBMS_STATS.INIT_PACKAGE +DBMS_STATS.INTERRUPT_ADVISOR_TASK +DBMS_STATS.LOCK_PARTITION_STATS +DBMS_STATS.LOCK_SCHEMA_STATS +DBMS_STATS.LOCK_TABLE_STATS +DBMS_STATS.MERGE_COL_USAGE +DBMS_STATS.POSTPROCESS_STATS +DBMS_STATS.PREPARE_COLUMN_VALUES +DBMS_STATS.PREPARE_COLUMN_VALUES_NVARCHAR +DBMS_STATS.PREPARE_COLUMN_VALUES_ROWID +DBMS_STATS.PUBLISH_PENDING_STATS +DBMS_STATS.PUBLISH_PENDING_SYSTEM_STATS +DBMS_STATS.PURGE_STATS +DBMS_STATS.REMAP_STAT_TABLE +DBMS_STATS.REPORT_ADVISOR_TASK +DBMS_STATS.REPORT_COL_USAGE +DBMS_STATS.REPORT_GATHER_AUTO_STATS +DBMS_STATS.REPORT_GATHER_DATABASE_STATS +DBMS_STATS.REPORT_GATHER_DICTIONARY_STATS +DBMS_STATS.REPORT_GATHER_FIXED_OBJ_STATS +DBMS_STATS.REPORT_GATHER_SCHEMA_STATS +DBMS_STATS.REPORT_GATHER_TABLE_STATS +DBMS_STATS.REPORT_SINGLE_STATS_OPERATION +DBMS_STATS.REPORT_STATS_OPERATIONS +DBMS_STATS.RESET_ADVISOR_TASK +DBMS_STATS.RESET_COL_USAGE +DBMS_STATS.RESET_GLOBAL_PREF_DEFAULTS +DBMS_STATS.RESET_PARAM_DEFAULTS +DBMS_STATS.RESTORE_DATABASE_STATS +DBMS_STATS.RESTORE_DICTIONARY_STATS +DBMS_STATS.RESTORE_FIXED_OBJECTS_STATS +DBMS_STATS.RESTORE_SCHEMA_STATS +DBMS_STATS.RESTORE_SYSTEM_STATS +DBMS_STATS.RESTORE_TABLE_STATS +DBMS_STATS.RESUME_ADVISOR_TASK +DBMS_STATS.RESUME_GATHER_STATS +DBMS_STATS.SAVE_INMEMORY_STATS +DBMS_STATS.SCRIPT_ADVISOR_TASK +DBMS_STATS.SEED_COL_USAGE +DBMS_STATS.SET_ADVISOR_TASK_PARAMETER +DBMS_STATS.SET_COLUMN_STATS +DBMS_STATS.SET_DATABASE_PREFS +DBMS_STATS.SET_GLOBAL_PREFS +DBMS_STATS.SET_INDEX_STATS +DBMS_STATS.SET_PARAM +DBMS_STATS.SET_PROCESSING_RATE +DBMS_STATS.SET_SCHEMA_PREFS +DBMS_STATS.SET_SYSTEM_STATS +DBMS_STATS.SET_TABLE_PREFS +DBMS_STATS.SET_TABLE_STATS +DBMS_STATS.SHOW_EXTENDED_STATS_NAME +DBMS_STATS.TO_NO_INVALIDATE_TYPE +DBMS_STATS.TRANSFER_STATS +DBMS_STATS.UNLOCK_PARTITION_STATS +DBMS_STATS.UNLOCK_SCHEMA_STATS +DBMS_STATS.UNLOCK_TABLE_STATS +DBMS_STATS.UPGRADE_STAT_TABLE +DBMS_STATS.VARRAY_TO_CLOB +DBMS_STATS_ADVISOR. +DBMS_STATS_ADVISOR.ACTION_GATHEROBJECTSTATS +DBMS_STATS_ADVISOR.ACTION_LOCKVOLATILETABLE +DBMS_STATS_ADVISOR.ACTION_NOP +DBMS_STATS_ADVISOR.ACTION_NOTUSEINCREMENTAL +DBMS_STATS_ADVISOR.ACTION_UNLOCKNONVOLATILETABLE +DBMS_STATS_ADVISOR.ACTION_USEAUTODEGREE +DBMS_STATS_ADVISOR.ACTION_USECONCURRENT +DBMS_STATS_ADVISOR.ACTION_USEDEFAULTOBJPREFERENCE +DBMS_STATS_ADVISOR.ACTION_USEDEFAULTPARAMETER +DBMS_STATS_ADVISOR.ACTION_USEDEFAULTPREFERENCE +DBMS_STATS_ADVISOR.ACTION_USEINCREMENTAL +DBMS_STATS_ADVISOR.CANCEL_TASK +DBMS_STATS_ADVISOR.CHECK_MMON_POLICY_VIOLATION +DBMS_STATS_ADVISOR.COMPUTE_VOLATILE_FLAG +DBMS_STATS_ADVISOR.CONFIGURE_FILTER +DBMS_STATS_ADVISOR.CONFIGURE_OBJ_FILTER +DBMS_STATS_ADVISOR.CONFIGURE_OPR_FILTER +DBMS_STATS_ADVISOR.CONFIGURE_RULE_FILTER +DBMS_STATS_ADVISOR.CREATE_OPR_FILTER +DBMS_STATS_ADVISOR.CREATE_TASK +DBMS_STATS_ADVISOR.DROP_TASK +DBMS_STATS_ADVISOR.EXAMPLE_AVOID_ANALYZE +DBMS_STATS_ADVISOR.EXAMPLE_CREATE_MAINTENANCE_WIN +DBMS_STATS_ADVISOR.EXAMPLE_ENABLE_AUTO_TASK +DBMS_STATS_ADVISOR.EXAMPLE_ENA_AUTO_OPTIM_STATS +DBMS_STATS_ADVISOR.EXAMPLE_ENA_MAINTENANCE_WIN +DBMS_STATS_ADVISOR.EXAMPLE_GATHER_SCHEMA_STATS +DBMS_STATS_ADVISOR.EXAMPLE_GATHER_STATS_ON_OBJ +DBMS_STATS_ADVISOR.EXAMPLE_INC_MAINTENANCE_WINDOW +DBMS_STATS_ADVISOR.EXAMPLE_LOCK_VOLATILE_TABLE +DBMS_STATS_ADVISOR.EXAMPLE_NOP +DBMS_STATS_ADVISOR.EXAMPLE_NOT_USE_INCREMENTAL +DBMS_STATS_ADVISOR.EXAMPLE_PURGE_STATS +DBMS_STATS_ADVISOR.EXAMPLE_REDUCE_RETENTION +DBMS_STATS_ADVISOR.EXAMPLE_SET_AUTO_STATS_TARGET +DBMS_STATS_ADVISOR.EXAMPLE_SET_CONCURRENT +DBMS_STATS_ADVISOR.EXAMPLE_SET_GLOBAL_PREF +DBMS_STATS_ADVISOR.EXAMPLE_TURN_ON_SPD +DBMS_STATS_ADVISOR.EXAMPLE_UNLOCK_NONVOLATILE_TAB +DBMS_STATS_ADVISOR.EXAMPLE_USE_AUTODEGREE +DBMS_STATS_ADVISOR.EXAMPLE_USE_DEFAULT_PARAM +DBMS_STATS_ADVISOR.EXAMPLE_USE_DEF_OBJ_PREF +DBMS_STATS_ADVISOR.EXAMPLE_USE_INCREMENTAL +DBMS_STATS_ADVISOR.EXAMPLE_USE_TRUNCATE +DBMS_STATS_ADVISOR.EXECUTE_TASK +DBMS_STATS_ADVISOR.GET_INDIVIDUAL_RECS +DBMS_STATS_ADVISOR.GET_NONDEFPARAM_OPR +DBMS_STATS_ADVISOR.GET_NOSTATS_OBJ +DBMS_STATS_ADVISOR.GET_PARAM_DEF_VAL +DBMS_STATS_ADVISOR.GET_SINGLE_PARAM_DEF_VAL +DBMS_STATS_ADVISOR.GET_STALESTATS_OBJ +DBMS_STATS_ADVISOR.IMPLEMENT_TASK +DBMS_STATS_ADVISOR.INTERRUPT_TASK +DBMS_STATS_ADVISOR.I_EXECUTE_TASK +DBMS_STATS_ADVISOR.I_RAISE_STATS_ADVISOR_ERROR +DBMS_STATS_ADVISOR.I_TRACE +DBMS_STATS_ADVISOR.REPORT_AVOIDINEFFSTATSOPRSEQ +DBMS_STATS_ADVISOR.REPORT_AVOIDOUTOFRANGE +DBMS_STATS_ADVISOR.REPORT_CONSISTENTSTATS +DBMS_STATS_ADVISOR.REPORT_NOP +DBMS_STATS_ADVISOR.REPORT_OBJ_DEFAULT +DBMS_STATS_ADVISOR.REPORT_OPR_DEFAULT +DBMS_STATS_ADVISOR.REPORT_TASK +DBMS_STATS_ADVISOR.RESET_TASK +DBMS_STATS_ADVISOR.RESUME_TASK +DBMS_STATS_ADVISOR.SCRIPT_TASK +DBMS_STATS_ADVISOR.SET_TASK_PARAMETER +DBMS_STATS_ADVISOR.SKIP_OPERATION +DBMS_STATS_ADVISOR.TAB_SAME_SIGNATURE +DBMS_STATS_ADVISOR.USE_AUTODEGREE +DBMS_STATS_ADVISOR.USE_INCREMENTAL +DBMS_STATS_INTERNAL.ADDOBJTONUMTAB +DBMS_STATS_INTERNAL.ADD_PARAM +DBMS_STATS_INTERNAL.ADD_SUBSCRIBER +DBMS_STATS_INTERNAL.ADVISOR_CHECK_OBJ_FILTER_VALID +DBMS_STATS_INTERNAL.ADVISOR_CHECK_RESUME +DBMS_STATS_INTERNAL.ADVISOR_CLEANUP_OBJ_FILTER +DBMS_STATS_INTERNAL.ADVISOR_CLEAR_DIRECTIVES +DBMS_STATS_INTERNAL.ADVISOR_CLEAR_FILTERS +DBMS_STATS_INTERNAL.ADVISOR_EXPAND_DIRECTIVES +DBMS_STATS_INTERNAL.ADVISOR_GET_MAX_OBJ_ID +DBMS_STATS_INTERNAL.ADVISOR_GET_OBJECT_NUMBER +DBMS_STATS_INTERNAL.ADVISOR_GET_OBJ_DIR +DBMS_STATS_INTERNAL.ADVISOR_GET_OPR_DIR +DBMS_STATS_INTERNAL.ADVISOR_GET_RULE_DIR +DBMS_STATS_INTERNAL.ADVISOR_GET_UNIQUE_DIR_NAME +DBMS_STATS_INTERNAL.ADVISOR_IS_SYSTEM_RULE +DBMS_STATS_INTERNAL.ADVISOR_REPORT_HEADER +DBMS_STATS_INTERNAL.ADVISOR_REPORT_SUMMARY +DBMS_STATS_INTERNAL.ADVISOR_RULE_HAS_FINDING +DBMS_STATS_INTERNAL.ADVISOR_SETUP_OBJ_FILTER +DBMS_STATS_INTERNAL.ADVISOR_SKIP_CHECKED_RULES +DBMS_STATS_INTERNAL.ADVISOR_TASK_EXISTS +DBMS_STATS_INTERNAL.AGGREGATE_INDSTATS +DBMS_STATS_INTERNAL.AGG_PARTITION_ROWCNT +DBMS_STATS_INTERNAL.AGG_PDB_SHARD_TSTATS +DBMS_STATS_INTERNAL.ALTER_PARAMETER_VAL +DBMS_STATS_INTERNAL.BITCLR +DBMS_STATS_INTERNAL.BITOR +DBMS_STATS_INTERNAL.CAN_DERIVE_COL_HISTOGRAM +DBMS_STATS_INTERNAL.CCT +DBMS_STATS_INTERNAL.CHECK_ADVISOR_INPUT_VALIDITY +DBMS_STATS_INTERNAL.CHECK_ADVISOR_OBJ_FILTER +DBMS_STATS_INTERNAL.CHECK_ADVISOR_OPR_FILTER +DBMS_STATS_INTERNAL.CHECK_ADVISOR_RULE_FILTER +DBMS_STATS_INTERNAL.CHECK_ANALYZE_DONE +DBMS_STATS_INTERNAL.CHECK_DOMIDX_PARTITIONS +DBMS_STATS_INTERNAL.CHECK_DOMIDX_PARTS +DBMS_STATS_INTERNAL.CHECK_DOMIDX_SUBPARTITIONS +DBMS_STATS_INTERNAL.CHECK_GLOBAL_TAB_STALENESS +DBMS_STATS_INTERNAL.CHECK_GRANULARITY +DBMS_STATS_INTERNAL.CHECK_HIST_MISSING +DBMS_STATS_INTERNAL.CHECK_INCREMENTAL_STALENESS +DBMS_STATS_INTERNAL.CHECK_VOLATILE +DBMS_STATS_INTERNAL.CHECK_WINDOW_CAPTURE_MODE +DBMS_STATS_INTERNAL.CLEAR_MON_COL_USAGE_FLAG +DBMS_STATS_INTERNAL.COLHASBASESTATS +DBMS_STATS_INTERNAL.COLHASHISTOGRAM +DBMS_STATS_INTERNAL.COLUMN_EXISTS +DBMS_STATS_INTERNAL.COL_STATS_FROM_LOAD +DBMS_STATS_INTERNAL.COMPOSE_HASHVAL_CLOB_REC +DBMS_STATS_INTERNAL.COMPUTE_DOP +DBMS_STATS_INTERNAL.CONTROL_PARALLEL +DBMS_STATS_INTERNAL.COUNT_PDB_OR_SHARD +DBMS_STATS_INTERNAL.CREATE_ADVISOR_OBJECT +DBMS_STATS_INTERNAL.CREATE_TEMP +DBMS_STATS_INTERNAL.DBMS_ASSERT_SIMPLE_SQL_NAME +DBMS_STATS_INTERNAL.DECODE_GRANULARITY +DBMS_STATS_INTERNAL.DELETE_CACHE_HISTORY +DBMS_STATS_INTERNAL.DELETE_COL_USAGE +DBMS_STATS_INTERNAL.DELETE_EXPR_STATS +DBMS_STATS_INTERNAL.DELETE_FROM_USTATS +DBMS_STATS_INTERNAL.DELETE_PARTITION_SYNOPSIS +DBMS_STATS_INTERNAL.DELETE_PROC_RATE_CALLOUT +DBMS_STATS_INTERNAL.DELETE_SINGLE_COL_GROUP_USAGE +DBMS_STATS_INTERNAL.DELETE_STATS_OPERATION +DBMS_STATS_INTERNAL.DEL_SESSION_COL_STATS +DBMS_STATS_INTERNAL.DERIVE_GLOBAL_HISTOGRAM +DBMS_STATS_INTERNAL.DML_STATTAB_PREFS +DBMS_STATS_INTERNAL.DML_TABLE_PREFS +DBMS_STATS_INTERNAL.DQ +DBMS_STATS_INTERNAL.DROP_OLD_TEMP +DBMS_STATS_INTERNAL.DROP_TEMP +DBMS_STATS_INTERNAL.DUMP_ALERT_TSES +DBMS_STATS_INTERNAL.DUMP_PQ_SESSTAT +DBMS_STATS_INTERNAL.DUMP_QUERY +DBMS_STATS_INTERNAL.DUMP_TRACE +DBMS_STATS_INTERNAL.DUMP_TRACE_TS +DBMS_STATS_INTERNAL.EST_USING_NONEXACT_HISTORY +DBMS_STATS_INTERNAL.EXECUTE_ADVISOR_AUTO_TASK +DBMS_STATS_INTERNAL.EXPORT_COLSTATS_DIRECT +DBMS_STATS_INTERNAL.EXPORT_COL_USAGE +DBMS_STATS_INTERNAL.EXPORT_FXT_COLSTATS_DIRECT +DBMS_STATS_INTERNAL.EXTRACT_STR +DBMS_STATS_INTERNAL.FILL_IN_PARAMS +DBMS_STATS_INTERNAL.FILL_IN_PARAMS_WITH_NO_PREFS +DBMS_STATS_INTERNAL.FILL_SYNOPSIS +DBMS_STATS_INTERNAL.FIXQ +DBMS_STATS_INTERNAL.FIX_IND_NAMES +DBMS_STATS_INTERNAL.FIX_TAB_NAMES +DBMS_STATS_INTERNAL.FLUSH_CACHE_STATS +DBMS_STATS_INTERNAL.FORMAT_CACHE_ROWS +DBMS_STATS_INTERNAL.GATHER_FXT_STATS_OK +DBMS_STATS_INTERNAL.GATHER_INDEX +DBMS_STATS_INTERNAL.GATHER_PROCESSING_RATE_AUX +DBMS_STATS_INTERNAL.GATHER_PROCESSING_RATE_JOB +DBMS_STATS_INTERNAL.GATHER_SCAN_RATE +DBMS_STATS_INTERNAL.GATHER_SCAN_RATE_BY_MMON +DBMS_STATS_INTERNAL.GATHER_SQL_STATS +DBMS_STATS_INTERNAL.GENERATE_OP_ID +DBMS_STATS_INTERNAL.GET_ADVISOR_DEFAULT_INCLUDE +DBMS_STATS_INTERNAL.GET_ADVISOR_FINDING_DEF_ID +DBMS_STATS_INTERNAL.GET_ADVISOR_FINDING_ID +DBMS_STATS_INTERNAL.GET_ADVISOR_FINDING_NAME +DBMS_STATS_INTERNAL.GET_ADVISOR_NUM_FINDINGS +DBMS_STATS_INTERNAL.GET_ADVISOR_OBJECT_TYPE_ID +DBMS_STATS_INTERNAL.GET_ADVISOR_OPR_FILTER +DBMS_STATS_INTERNAL.GET_ADVISOR_PARAM_VAL +DBMS_STATS_INTERNAL.GET_ADVISOR_RAT_ID +DBMS_STATS_INTERNAL.GET_ADVISOR_REC_CBK +DBMS_STATS_INTERNAL.GET_ADVISOR_REC_ID +DBMS_STATS_INTERNAL.GET_ADVISOR_REC_NAME +DBMS_STATS_INTERNAL.GET_ADVISOR_REPORT_CBK +DBMS_STATS_INTERNAL.GET_ADVISOR_RTL_NAME +DBMS_STATS_INTERNAL.GET_ADVISOR_RULE_DESC +DBMS_STATS_INTERNAL.GET_ADVISOR_RULE_ID +DBMS_STATS_INTERNAL.GET_ADVISOR_RULE_NAME +DBMS_STATS_INTERNAL.GET_ADVISOR_RULE_OBJ_ID +DBMS_STATS_INTERNAL.GET_ADVISOR_TASK_ID +DBMS_STATS_INTERNAL.GET_ADVISOR_TASK_NAME +DBMS_STATS_INTERNAL.GET_ADVISOR_TASK_OWNER +DBMS_STATS_INTERNAL.GET_ADVISOR_TASK_PRIVILEGE +DBMS_STATS_INTERNAL.GET_AGG_CHT_WITH_DISK +DBMS_STATS_INTERNAL.GET_AGG_CLIST_WITH_DISK +DBMS_STATS_INTERNAL.GET_AGG_COLSTATS +DBMS_STATS_INTERNAL.GET_AGG_NDV +DBMS_STATS_INTERNAL.GET_ALL_ADVISOR_RULE_IDS +DBMS_STATS_INTERNAL.GET_APPROX_NDV_ALGORITHM +DBMS_STATS_INTERNAL.GET_BLKCNT +DBMS_STATS_INTERNAL.GET_CALIB_OPID_CALLOUT +DBMS_STATS_INTERNAL.GET_COLNAME +DBMS_STATS_INTERNAL.GET_COLNUM +DBMS_STATS_INTERNAL.GET_COLTYPE +DBMS_STATS_INTERNAL.GET_COL_EXPR +DBMS_STATS_INTERNAL.GET_COUNT_OF_COLS +DBMS_STATS_INTERNAL.GET_CURRENT_JOB_NAME +DBMS_STATS_INTERNAL.GET_CURRENT_SESSION_ID +DBMS_STATS_INTERNAL.GET_DB_BLOCK_SIZE +DBMS_STATS_INTERNAL.GET_DEFAULT$ +DBMS_STATS_INTERNAL.GET_DEFAULT_ADVISOR_EXECUTION +DBMS_STATS_INTERNAL.GET_DEFAULT_DOP +DBMS_STATS_INTERNAL.GET_EXPORT_SQL_CLAUSES +DBMS_STATS_INTERNAL.GET_EXP_LIST +DBMS_STATS_INTERNAL.GET_FIRST_PART_COL +DBMS_STATS_INTERNAL.GET_FXT_OBJ +DBMS_STATS_INTERNAL.GET_FXT_TYP +DBMS_STATS_INTERNAL.GET_HIST_DENSITY +DBMS_STATS_INTERNAL.GET_IDENTIFIER +DBMS_STATS_INTERNAL.GET_IDX_TABPART +DBMS_STATS_INTERNAL.GET_INDEX_BLOCK_COUNT +DBMS_STATS_INTERNAL.GET_INDEX_LOCK_FLAG +DBMS_STATS_INTERNAL.GET_INDEX_PART_NAME +DBMS_STATS_INTERNAL.GET_INDSTATS_DICT +DBMS_STATS_INTERNAL.GET_IND_COLS +DBMS_STATS_INTERNAL.GET_IND_SHARE_TYPE +DBMS_STATS_INTERNAL.GET_INTCOL +DBMS_STATS_INTERNAL.GET_IOT_MAPPING_TABLE +DBMS_STATS_INTERNAL.GET_MBRC +DBMS_STATS_INTERNAL.GET_MV_ENQUE +DBMS_STATS_INTERNAL.GET_NUM_ROWS +DBMS_STATS_INTERNAL.GET_OBJLIST_TEXT +DBMS_STATS_INTERNAL.GET_OBJNUM +DBMS_STATS_INTERNAL.GET_OBJ_NAME_USER_NAME +DBMS_STATS_INTERNAL.GET_OLDEST_HISTORY_TIME +DBMS_STATS_INTERNAL.GET_PARAM +DBMS_STATS_INTERNAL.GET_PARAMETER_VAL +DBMS_STATS_INTERNAL.GET_PARAM_DEFAULT +DBMS_STATS_INTERNAL.GET_PARAM_NUMVAL +DBMS_STATS_INTERNAL.GET_PARAM_PROP +DBMS_STATS_INTERNAL.GET_PARTN_LOCK_FLAG +DBMS_STATS_INTERNAL.GET_PART_COLS +DBMS_STATS_INTERNAL.GET_PREFS +DBMS_STATS_INTERNAL.GET_PREV_PART +DBMS_STATS_INTERNAL.GET_PROCRATE_ID +DBMS_STATS_INTERNAL.GET_SC_1201 +DBMS_STATS_INTERNAL.GET_SC_1202 +DBMS_STATS_INTERNAL.GET_SC_MAX +DBMS_STATS_INTERNAL.GET_STALE_REASON +DBMS_STATS_INTERNAL.GET_STAT_EXTENSION +DBMS_STATS_INTERNAL.GET_SYNOPSIS_DEGREE +DBMS_STATS_INTERNAL.GET_SYNOPSIS_GROUP_NUM +DBMS_STATS_INTERNAL.GET_TABLE_BLOCK_COUNT +DBMS_STATS_INTERNAL.GET_TABLE_DEGREE +DBMS_STATS_INTERNAL.GET_TABLE_PREFS +DBMS_STATS_INTERNAL.GET_TABLE_PROPERTY +DBMS_STATS_INTERNAL.GET_TABLE_STATS_SIMPLE +DBMS_STATS_INTERNAL.GET_TAB_NUM_SEGMENTS +DBMS_STATS_INTERNAL.GET_TAB_PROPERTY +DBMS_STATS_INTERNAL.GET_TAB_PROPERTY_AND_FLAGS +DBMS_STATS_INTERNAL.GET_TAB_SHARE_TYPE +DBMS_STATS_INTERNAL.GET_TAB_SHARE_TYPE_VIEW +DBMS_STATS_INTERNAL.GET_USER_NUM +DBMS_STATS_INTERNAL.GRANT_CONC_PRIV_TO_USER +DBMS_STATS_INTERNAL.HYBRID_HIST_ENABLED +DBMS_STATS_INTERNAL.IMPORT_COL_USAGE_FOR_DIR +DBMS_STATS_INTERNAL.IMPORT_MON_INFO +DBMS_STATS_INTERNAL.IMPORT_STATS_HISTORY +DBMS_STATS_INTERNAL.IMPORT_SYNOPSES_STATS +DBMS_STATS_INTERNAL.INDEX_MAX_KEYSIZE_OK +DBMS_STATS_INTERNAL.INDHASGLOBALSTATS +DBMS_STATS_INTERNAL.INDPARTSHAVESTATS +DBMS_STATS_INTERNAL.INIT_ID_MAP_TAB +DBMS_STATS_INTERNAL.INIT_OBJ_LIST_TAB +DBMS_STATS_INTERNAL.INIT_STATS_ARG_TAB +DBMS_STATS_INTERNAL.INSERT_ADVISOR_FILTER_OBJ +DBMS_STATS_INTERNAL.INSERT_INTO_USTATS +DBMS_STATS_INTERNAL.INSERT_ONLY +DBMS_STATS_INTERNAL.INS_SESSION_HG_STATS +DBMS_STATS_INTERNAL.INT_ASSERT +DBMS_STATS_INTERNAL.ISSHARDEDCATALOG +DBMS_STATS_INTERNAL.IS_DUPLICATED_OPR +DBMS_STATS_INTERNAL.IS_HADOOP_TABLE +DBMS_STATS_INTERNAL.IS_INDEX_UNIQUE +DBMS_STATS_INTERNAL.IS_MV_TABLE_BUSY +DBMS_STATS_INTERNAL.IS_PARAM_VALUE_DEFAULT +DBMS_STATS_INTERNAL.IS_PARTITIONED_TAB +DBMS_STATS_INTERNAL.IS_PART_DEFAULT +DBMS_STATS_INTERNAL.IS_PART_TYP_SAME +DBMS_STATS_INTERNAL.IS_RES_MAN_ON +DBMS_STATS_INTERNAL.IS_STALE +DBMS_STATS_INTERNAL.IS_STALE_IN_CONTAINER +DBMS_STATS_INTERNAL.IS_TABLE_EMPTY +DBMS_STATS_INTERNAL.IS_TEMP_TAB +DBMS_STATS_INTERNAL.IS_URGENT_ERROR +DBMS_STATS_INTERNAL.JOB_CLASS_EXISTS +DBMS_STATS_INTERNAL.MANAGE_COL_TRACKING_LEVEL_JOB +DBMS_STATS_INTERNAL.MIN_NUM +DBMS_STATS_INTERNAL.MONITORING_MAN_SIGNAL_SAFEMODE +DBMS_STATS_INTERNAL.OBJECT_EXISTS +DBMS_STATS_INTERNAL.OPEN_ADVISOR_ACTION_OBJ_CUR +DBMS_STATS_INTERNAL.OPEN_ADVISOR_FINDING_OBJ_CUR +DBMS_STATS_INTERNAL.OPEN_ALL_EMPTY_OBJS_CUR +DBMS_STATS_INTERNAL.OPEN_ALL_OBJECTS_CUR +DBMS_STATS_INTERNAL.OPEN_ALL_STALE_OBJS_CUR +DBMS_STATS_INTERNAL.OPEN_COLSTATS_DICT_CUR +DBMS_STATS_INTERNAL.OPEN_COLSTATS_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_CUR_ALL_LOCAL_INDEX_PARTS +DBMS_STATS_INTERNAL.OPEN_EXTN_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_FXT_COLSTATS_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_FXT_STATS_DICT_CUR +DBMS_STATS_INTERNAL.OPEN_FXT_STATS_HIST_CUR +DBMS_STATS_INTERNAL.OPEN_GET_IND_PARTS_CUR +DBMS_STATS_INTERNAL.OPEN_GET_IND_SUBPARTS_CUR +DBMS_STATS_INTERNAL.OPEN_GET_OPR_PARAMS +DBMS_STATS_INTERNAL.OPEN_GET_TARGET_PARTITIONS_CUR +DBMS_STATS_INTERNAL.OPEN_GET_TARGET_SUBPARTS_CUR +DBMS_STATS_INTERNAL.OPEN_OPERATIONS_CUR +DBMS_STATS_INTERNAL.OPEN_TAB_STATS_DICT_CUR +DBMS_STATS_INTERNAL.OPEN_TAB_STATS_HIST_CUR +DBMS_STATS_INTERNAL.PARSE_HASHVAL +DBMS_STATS_INTERNAL.PARSE_INCREMENTAL_STALENESS +DBMS_STATS_INTERNAL.PART_TYPES +DBMS_STATS_INTERNAL.PENDING_STATS_ENABLED +DBMS_STATS_INTERNAL.POPULATE_OBJ_LIST_TAB +DBMS_STATS_INTERNAL.POPULATE_TEMP_INSERT +DBMS_STATS_INTERNAL.PQFLAGS +DBMS_STATS_INTERNAL.PREPARE_METHOD_OPT_TEXT +DBMS_STATS_INTERNAL.PREP_INSERT_SYNOPSIS_ONLINE +DBMS_STATS_INTERNAL.PREP_SAVE_CS +DBMS_STATS_INTERNAL.PRORATE_GLOBAL_NDV +DBMS_STATS_INTERNAL.PURGE_PENDING_STATS +DBMS_STATS_INTERNAL.PURGE_STATS_AUX +DBMS_STATS_INTERNAL.PURGE_STAT_TABLE +DBMS_STATS_INTERNAL.PURGE_SYNOPSIS +DBMS_STATS_INTERNAL.PURGE_SYNOPSIS_BY_MMON +DBMS_STATS_INTERNAL.QOSPSETPGAFLG +DBMS_STATS_INTERNAL.RECLAIM_SYNOPSIS_SPACE +DBMS_STATS_INTERNAL.REC_EXTN_DDL +DBMS_STATS_INTERNAL.REMAP_INDEX_NAMES +DBMS_STATS_INTERNAL.REMOVE_SUBSCRIBER +DBMS_STATS_INTERNAL.RESTORE_STATS_OK +DBMS_STATS_INTERNAL.REVOKE_CONC_PRIV_FROM_USER +DBMS_STATS_INTERNAL.SAME_COL +DBMS_STATS_INTERNAL.SAME_PART +DBMS_STATS_INTERNAL.SAME_TAB_COLS +DBMS_STATS_INTERNAL.SAVE_AS_PENDING_COL_STATS +DBMS_STATS_INTERNAL.SAVE_AS_PENDING_INDEX_STATS +DBMS_STATS_INTERNAL.SAVE_AS_PENDING_TABLE_STATS +DBMS_STATS_INTERNAL.SCHEMA_EXISTS +DBMS_STATS_INTERNAL.SEGMENT_NUMBER_BLOCKS +DBMS_STATS_INTERNAL.SET_ADVISOR_EXEC_PROPERTIES +DBMS_STATS_INTERNAL.SET_MON_COL_USAGE_FLAG +DBMS_STATS_INTERNAL.SET_PARAM +DBMS_STATS_INTERNAL.SET_PROCESSING_RATE_AUX +DBMS_STATS_INTERNAL.SET_PROCESSING_RATE_CALLOUT +DBMS_STATS_INTERNAL.SET_TEMP_DOP +DBMS_STATS_INTERNAL.SHARDEDCATALOG_OR_ROOT +DBMS_STATS_INTERNAL.SIMILAR_OBJECT_EXISTS +DBMS_STATS_INTERNAL.SIMILAR_SCHEMA_EXISTS +DBMS_STATS_INTERNAL.STORE_SYSTEM_STATS +DBMS_STATS_INTERNAL.SYSAUX_OFFLINE +DBMS_STATS_INTERNAL.TABHASGLOBALSTATS +DBMS_STATS_INTERNAL.TABLE_PREFS_EXISTS +DBMS_STATS_INTERNAL.TABPARTSHAVESTATS +DBMS_STATS_INTERNAL.TAB_STATS_STALE +DBMS_STATS_INTERNAL.TEST_GATHER_SQL_STATS +DBMS_STATS_INTERNAL.TEST_MMON_AUTOJOB +DBMS_STATS_INTERNAL.TOP_FREQ_HIST_ENABLED +DBMS_STATS_INTERNAL.TO_BOOL_TYPE +DBMS_STATS_INTERNAL.TO_CASCADE_TYPE +DBMS_STATS_INTERNAL.TO_DEGREE_TYPE +DBMS_STATS_INTERNAL.TO_ESTIMATE_PERCENT_TYPE +DBMS_STATS_INTERNAL.TO_STALE_PERCENT_TYPE +DBMS_STATS_INTERNAL.TO_TABLE_CACHED_BLOCKS_TYPE +DBMS_STATS_INTERNAL.TRACE_ERROR +DBMS_STATS_INTERNAL.TRANSLATE_EV_COLNAME +DBMS_STATS_INTERNAL.TRANSLATE_EV_TO_TBL +DBMS_STATS_INTERNAL.TRUNCATE_TABLE +DBMS_STATS_INTERNAL.TRUNCATE_TEMP +DBMS_STATS_INTERNAL.UPCASE +DBMS_STATS_INTERNAL.UPDATE_ADVISOR_DEFAULT_INCLUDE +DBMS_STATS_INTERNAL.UPDATE_OP_TERMINATION_STATUS +DBMS_STATS_INTERNAL.UPDATE_ROOT_OR_COORD_DML +DBMS_STATS_INTERNAL.UPDATE_SYNOPSIS_HEAD +DBMS_STATS_INTERNAL.UPDATE_SYNOPSIS_PDB_SHARD +DBMS_STATS_INTERNAL.UPDATE_TARGET_LIST +DBMS_STATS_INTERNAL.UPDATE_TASK_TERMINATION_STATUS +DBMS_STATS_INTERNAL.VIEW_COLUMN_EXISTS +DBMS_STATS_INTERNAL.WRITE_CLOB_TO_FILE +DBMS_STATS_INTERNAL_AGG. +DBMS_STATS_INTERNAL_AGG.AGG_PDB_SHARD_TSTATS +DBMS_STATS_INTERNAL_AGG.CAN_DERIVE_COL_HISTOGRAM +DBMS_STATS_INTERNAL_AGG.CHECK_GLOBAL_TAB_STALENESS +DBMS_STATS_INTERNAL_AGG.CONSTRUCT_GLOBAL_HEIGHT_CUR +DBMS_STATS_INTERNAL_AGG.CONSTRUCT_GLOBAL_HYBRID_CUR +DBMS_STATS_INTERNAL_AGG.CONSTRUCT_SEL_AGG_COL_STAT +DBMS_STATS_INTERNAL_AGG.CONSTRUCT_SQL_NDV_HISTOGRAM +DBMS_STATS_INTERNAL_AGG.COUNT_PDB_OR_SHARD +DBMS_STATS_INTERNAL_AGG.DERIVE_GLOBAL_HISTOGRAM +DBMS_STATS_INTERNAL_AGG.FROM_CLAUSE_AGG_COL_STAT +DBMS_STATS_INTERNAL_AGG.FROM_CLAUSE_GLOBAL_HISTOGRAM +DBMS_STATS_INTERNAL_AGG.FROM_CLAUSE_NDV_HISTOGRAM +DBMS_STATS_INTERNAL_AGG.GET_ACT_EPVAL_NULLCNT +DBMS_STATS_INTERNAL_AGG.GET_AGG_COLSTATS +DBMS_STATS_INTERNAL_AGG.GET_NNV_HIST +DBMS_STATS_INTERNAL_AGG.UPDATE_ROOT_OR_COORD_DML +DBMS_STAT_FUNCS. +DBMS_STAT_FUNCS.EXPONENTIAL_DIST_FIT +DBMS_STAT_FUNCS.NORMAL_DIST_FIT +DBMS_STAT_FUNCS.POISSON_DIST_FIT +DBMS_STAT_FUNCS.SUMMARY +DBMS_STAT_FUNCS.UNIFORM_DIST_FIT +DBMS_STAT_FUNCS.WEIBULL_DIST_FIT +DBMS_STAT_FUNCS_AUX. +DBMS_STAT_FUNCS_AUX.CALC_SW_A1 +DBMS_STAT_FUNCS_AUX.CALC_SW_A2 +DBMS_STAT_FUNCS_AUX.CALC_SW_COEF +DBMS_STAT_FUNCS_AUX.CALC_SW_FAC +DBMS_STAT_FUNCS_AUX.CALC_SW_SUMM2 +DBMS_STAT_FUNCS_AUX.CDF_BINOMIAL +DBMS_STAT_FUNCS_AUX.CDF_EXPONENTIAL +DBMS_STAT_FUNCS_AUX.CDF_NORMAL +DBMS_STAT_FUNCS_AUX.CDF_POISSON +DBMS_STAT_FUNCS_AUX.CDF_UNIFORM +DBMS_STAT_FUNCS_AUX.CDF_WEIBULL +DBMS_STAT_FUNCS_AUX.MINX +DBMS_STAT_FUNCS_AUX.POLY +DBMS_STAT_FUNCS_AUX.SIGN +DBMS_STORAGE_MAP. +DBMS_STORAGE_MAP.DROP_ALL +DBMS_STORAGE_MAP.DROP_ELEMENT +DBMS_STORAGE_MAP.DROP_FILE +DBMS_STORAGE_MAP.LOCK_MAP +DBMS_STORAGE_MAP.MAP_ALL +DBMS_STORAGE_MAP.MAP_ELEMENT +DBMS_STORAGE_MAP.MAP_FILE +DBMS_STORAGE_MAP.MAP_OBJECT +DBMS_STORAGE_MAP.RESTORE +DBMS_STORAGE_MAP.SAVE +DBMS_STORAGE_MAP.UNLOCK_MAP +DBMS_STREAMS. +DBMS_STREAMS.COMPATIBLE_10_1 +DBMS_STREAMS.COMPATIBLE_10_2 +DBMS_STREAMS.COMPATIBLE_11_1 +DBMS_STREAMS.COMPATIBLE_11_2 +DBMS_STREAMS.COMPATIBLE_12_1 +DBMS_STREAMS.COMPATIBLE_12_2 +DBMS_STREAMS.COMPATIBLE_9_2 +DBMS_STREAMS.CONVERT_ANYDATA_TO_LCR_DDL +DBMS_STREAMS.CONVERT_ANYDATA_TO_LCR_ROW +DBMS_STREAMS.CONVERT_LCR_TO_XML +DBMS_STREAMS.CONVERT_USER_TO_ID +DBMS_STREAMS.CONVERT_XML_TO_LCR +DBMS_STREAMS.GET_FINAL_LOB +DBMS_STREAMS.GET_INFORMATION +DBMS_STREAMS.GET_STREAMS_NAME +DBMS_STREAMS.GET_STREAMS_TYPE +DBMS_STREAMS.GET_TAG +DBMS_STREAMS.MAX_COMPATIBLE +DBMS_STREAMS.SET_TAG +DBMS_STREAMS_ADM. +DBMS_STREAMS_ADM.ADD_COLUMN +DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_GLOBAL_RULES +DBMS_STREAMS_ADM.ADD_MESSAGE_PROPAGATION_RULE +DBMS_STREAMS_ADM.ADD_MESSAGE_RULE +DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_SCHEMA_RULES +DBMS_STREAMS_ADM.ADD_SUBSET_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_SUBSET_RULES +DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES +DBMS_STREAMS_ADM.ADD_TABLE_RULES +DBMS_STREAMS_ADM.CLEANUP_INSTANTIATION_SETUP +DBMS_STREAMS_ADM.DELETE_COLUMN +DBMS_STREAMS_ADM.DELETE_REPLICATION_EVENTS +DBMS_STREAMS_ADM.GET_MESSAGE_TRACKING +DBMS_STREAMS_ADM.GET_SCN_MAPPING +DBMS_STREAMS_ADM.GET_TAG +DBMS_STREAMS_ADM.KEEP_COLUMNS +DBMS_STREAMS_ADM.MAINTAIN_CHANGE_TABLE +DBMS_STREAMS_ADM.MAINTAIN_GLOBAL +DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS +DBMS_STREAMS_ADM.MAINTAIN_SIMPLE_TABLESPACE +DBMS_STREAMS_ADM.MAINTAIN_SIMPLE_TTS +DBMS_STREAMS_ADM.MAINTAIN_TABLES +DBMS_STREAMS_ADM.MAINTAIN_TABLESPACES +DBMS_STREAMS_ADM.MAINTAIN_TTS +DBMS_STREAMS_ADM.MERGE_STREAMS +DBMS_STREAMS_ADM.MERGE_STREAMS_JOB +DBMS_STREAMS_ADM.POST_INSTANTIATION_SETUP +DBMS_STREAMS_ADM.PRE_INSTANTIATION_SETUP +DBMS_STREAMS_ADM.PURGE_SOURCE_CATALOG +DBMS_STREAMS_ADM.RECOVER_OPERATION +DBMS_STREAMS_ADM.REMOVE_QUEUE +DBMS_STREAMS_ADM.REMOVE_RULE +DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION +DBMS_STREAMS_ADM.RENAME_COLUMN +DBMS_STREAMS_ADM.RENAME_SCHEMA +DBMS_STREAMS_ADM.RENAME_TABLE +DBMS_STREAMS_ADM.SET_MESSAGE_NOTIFICATION +DBMS_STREAMS_ADM.SET_MESSAGE_TRACKING +DBMS_STREAMS_ADM.SET_RULE_TRANSFORM_FUNCTION +DBMS_STREAMS_ADM.SET_TAG +DBMS_STREAMS_ADM.SET_UP_QUEUE +DBMS_STREAMS_ADM.SPLIT_STREAMS +DBMS_STREAMS_ADM_IVK. +DBMS_STREAMS_ADM_IVK.ADD_COLUMN +DBMS_STREAMS_ADM_IVK.ADD_GLOBAL_PROPAGATION_RULES +DBMS_STREAMS_ADM_IVK.ADD_GLOBAL_RULES +DBMS_STREAMS_ADM_IVK.ADD_MESSAGE_PROPAGATION_RULE +DBMS_STREAMS_ADM_IVK.ADD_MESSAGE_RULE +DBMS_STREAMS_ADM_IVK.ADD_SCHEMA_PROPAGATION_RULES +DBMS_STREAMS_ADM_IVK.ADD_SCHEMA_RULES +DBMS_STREAMS_ADM_IVK.ADD_SUBSET_PROPAGATION_RULES +DBMS_STREAMS_ADM_IVK.ADD_SUBSET_RULES +DBMS_STREAMS_ADM_IVK.ADD_TABLE_PROPAGATION_RULES +DBMS_STREAMS_ADM_IVK.ADD_TABLE_RULES +DBMS_STREAMS_ADM_IVK.CLEANUP_INSTANTIATION_SETUP +DBMS_STREAMS_ADM_IVK.DELETE_COLUMN +DBMS_STREAMS_ADM_IVK.GET_MESSAGE_TRACKING +DBMS_STREAMS_ADM_IVK.GET_SCN_MAPPING +DBMS_STREAMS_ADM_IVK.GET_TAG +DBMS_STREAMS_ADM_IVK.KEEP_COLUMNS +DBMS_STREAMS_ADM_IVK.MAINTAIN_CHANGE_TABLE +DBMS_STREAMS_ADM_IVK.MAINTAIN_GLOBAL +DBMS_STREAMS_ADM_IVK.MAINTAIN_SCHEMAS +DBMS_STREAMS_ADM_IVK.MAINTAIN_SIMPLE_TABLESPACE +DBMS_STREAMS_ADM_IVK.MAINTAIN_SIMPLE_TTS +DBMS_STREAMS_ADM_IVK.MAINTAIN_TABLES +DBMS_STREAMS_ADM_IVK.MAINTAIN_TABLESPACES +DBMS_STREAMS_ADM_IVK.MAINTAIN_TTS +DBMS_STREAMS_ADM_IVK.MERGE_STREAMS +DBMS_STREAMS_ADM_IVK.MERGE_STREAMS_JOB +DBMS_STREAMS_ADM_IVK.POST_INSTANTIATION_SETUP +DBMS_STREAMS_ADM_IVK.PRE_INSTANTIATION_SETUP +DBMS_STREAMS_ADM_IVK.PURGE_SOURCE_CATALOG +DBMS_STREAMS_ADM_IVK.RECOVER_OPERATION +DBMS_STREAMS_ADM_IVK.REMOVE_QUEUE +DBMS_STREAMS_ADM_IVK.REMOVE_RULE +DBMS_STREAMS_ADM_IVK.REMOVE_STREAMS_CONFIGURATION +DBMS_STREAMS_ADM_IVK.RENAME_COLUMN +DBMS_STREAMS_ADM_IVK.RENAME_SCHEMA +DBMS_STREAMS_ADM_IVK.RENAME_TABLE +DBMS_STREAMS_ADM_IVK.SET_MESSAGE_NOTIFICATION +DBMS_STREAMS_ADM_IVK.SET_MESSAGE_TRACKING +DBMS_STREAMS_ADM_IVK.SET_RULE_TRANSFORM_FUNCTION +DBMS_STREAMS_ADM_IVK.SET_TAG +DBMS_STREAMS_ADM_IVK.SET_UP_QUEUE +DBMS_STREAMS_ADM_IVK.SPLIT_STREAMS +DBMS_STREAMS_ADM_UTL. +DBMS_STREAMS_ADM_UTL.ADD_PROPAGATION_RULE +DBMS_STREAMS_ADM_UTL.ADD_STREAMS_ADMIN_PRIVILEGE +DBMS_STREAMS_ADM_UTL.CHECK_AGENT_DB_ACCESS +DBMS_STREAMS_ADM_UTL.CHECK_APPLY_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_CAPTURE_INPUTS +DBMS_STREAMS_ADM_UTL.CHECK_DDL_RULE +DBMS_STREAMS_ADM_UTL.CHECK_PROCESS_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_PROPAGATION_PARAM +DBMS_STREAMS_ADM_UTL.CHECK_QUEUE_ENABLED +DBMS_STREAMS_ADM_UTL.CHECK_QUEUE_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_QUEUE_TABLE +DBMS_STREAMS_ADM_UTL.CHECK_STREAMS_TYPE +DBMS_STREAMS_ADM_UTL.CHECK_TABLE_EXISTS +DBMS_STREAMS_ADM_UTL.CHECK_USER_ACCESS +DBMS_STREAMS_ADM_UTL.CHECK_USER_EXISTS +DBMS_STREAMS_ADM_UTL.CREATE_DEFAULT_RULE +DBMS_STREAMS_ADM_UTL.CREATE_PROPAGATION_PROCESS +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_GLOBAL +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_PROCEDURE +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_SCHEMA +DBMS_STREAMS_ADM_UTL.CREATE_RULE_STRING_TABLE +DBMS_STREAMS_ADM_UTL.DROP_APPLY +DBMS_STREAMS_ADM_UTL.DROP_CAPTURE +DBMS_STREAMS_ADM_UTL.DROP_CONSUMER +DBMS_STREAMS_ADM_UTL.DROP_DEQUEUE +DBMS_STREAMS_ADM_UTL.DROP_PROPAGATION +DBMS_STREAMS_ADM_UTL.ENSURE_STREAMS_TYPE_DEQUEUE +DBMS_STREAMS_ADM_UTL.GENERATE_DUMP_FILE_NAME +DBMS_STREAMS_ADM_UTL.GENERATE_NAME +DBMS_STREAMS_ADM_UTL.GET_APPLY_QUEUE +DBMS_STREAMS_ADM_UTL.GET_DBLINK_NAME +DBMS_STREAMS_ADM_UTL.GET_DP_JOB_MODE +DBMS_STREAMS_ADM_UTL.GET_EVALUATION_CONTEXT +DBMS_STREAMS_ADM_UTL.GET_IGNORE_TXNS +DBMS_STREAMS_ADM_UTL.GET_NOTIFICATION_LOC_HEADER +DBMS_STREAMS_ADM_UTL.GET_STREAMS_NAME +DBMS_STREAMS_ADM_UTL.INSTANTIATION_NUM_TO_CHAR +DBMS_STREAMS_ADM_UTL.IS_DATAPUMP_INSTANTIATION +DBMS_STREAMS_ADM_UTL.IS_NETWORK_INSTANTIATION +DBMS_STREAMS_ADM_UTL.POPULATE_DUMP_FILE_SET +DBMS_STREAMS_ADM_UTL.POPULATE_LOG_FILE_SET +DBMS_STREAMS_ADM_UTL.POPULATE_MESG_CONSUMER_TABLE +DBMS_STREAMS_ADM_UTL.POPULATE_MESSAGE_RULE +DBMS_STREAMS_ADM_UTL.POPULATE_STREAMS_RULE +DBMS_STREAMS_ADM_UTL.PROCESS_DROP_USER_CASCADE +DBMS_STREAMS_ADM_UTL.PROCESS_DROP_USER_PRIVILEGE +DBMS_STREAMS_ADM_UTL.PURGE_INTERNAL +DBMS_STREAMS_ADM_UTL.REMOVE_DEST_OBJ_INFO +DBMS_STREAMS_ADM_UTL.REMOVE_EMPTY_HANDLERS +DBMS_STREAMS_ADM_UTL.REMOVE_RULE_INTERNAL +DBMS_STREAMS_ADM_UTL.REMOVE_STREAMS_ADMIN_PRIVILEGE +DBMS_STREAMS_ADM_UTL.REMOVE_STREAMS_RULE +DBMS_STREAMS_ADM_UTL.TRANSFORM_RULE_CONDITION +DBMS_STREAMS_ADM_UTL.UPDATE_MESG_CONSUMER_TABLE +DBMS_STREAMS_ADM_UTL.VERIFY_SUBSET_TABLE +DBMS_STREAMS_ADM_UTL_INT. +DBMS_STREAMS_ADM_UTL_INVOK. +DBMS_STREAMS_ADM_UTL_INVOK.ADD_MESSAGE_RULE +DBMS_STREAMS_ADM_UTL_INVOK.ADD_OBJECT_CONSTRAINT +DBMS_STREAMS_ADM_UTL_INVOK.ADD_STREAMS_RULE +DBMS_STREAMS_ADM_UTL_INVOK.CANON_PROC_NAME +DBMS_STREAMS_ADM_UTL_INVOK.CREATE_STREAMS_PROCESS +DBMS_STREAMS_ADM_UTL_INVOK.DROP_OBJECT_CONSTRAINT +DBMS_STREAMS_ADM_UTL_INVOK.GATHER_PERFORMANCE_STATISTICS +DBMS_STREAMS_ADM_UTL_INVOK.GET_PERFORMANCE_REPORT +DBMS_STREAMS_ADM_UTL_INVOK.HAS_PRIVS_FOR_TAG +DBMS_STREAMS_ADM_UTL_INVOK.SET_CONSTRAINT_COLUMNS +DBMS_STREAMS_ADVISOR_ADM. +DBMS_STREAMS_ADVISOR_ADM.ANALYZE_CURRENT_PERFORMANCE +DBMS_STREAMS_ADVISOR_ADM.GET_BOTTLENECK_FLOWCTRL_THRESH +DBMS_STREAMS_ADVISOR_ADM.GET_BOTTLENECK_IDLE_THRESHOLD +DBMS_STREAMS_ADVISOR_ADM.GET_RETENTION_TIME +DBMS_STREAMS_ADVISOR_ADM.SET_BOTTLENECK_FLOWCTRL_THRESH +DBMS_STREAMS_ADVISOR_ADM.SET_BOTTLENECK_IDLE_THRESHOLD +DBMS_STREAMS_ADVISOR_ADM.SET_RETENTION_TIME +DBMS_STREAMS_ADV_ADM_UTL. +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_EVENT +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_LINK +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_PROP +DBMS_STREAMS_ADV_ADM_UTL.ADD_COMPONENT_STAT +DBMS_STREAMS_ADV_ADM_UTL.ANALYZE_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL.ASSIGN_COMPONENT_IDS +DBMS_STREAMS_ADV_ADM_UTL.CLEAN_IN_TABLES +DBMS_STREAMS_ADV_ADM_UTL.CLEAN_OUT_TABLES +DBMS_STREAMS_ADV_ADM_UTL.CLEAN_TABLES +DBMS_STREAMS_ADV_ADM_UTL.COLLECT_COMPONENT_EVENT_LOCAL +DBMS_STREAMS_ADV_ADM_UTL.COLLECT_DBLINKS +DBMS_STREAMS_ADV_ADM_UTL.DELETE_COMPONENT_PROP +DBMS_STREAMS_ADV_ADM_UTL.DELETE_DATABASE_INFO +DBMS_STREAMS_ADV_ADM_UTL.DISCOVER_STREAM_PATHS +DBMS_STREAMS_ADV_ADM_UTL.GET_ADVISOR_RUN_ID +DBMS_STREAMS_ADV_ADM_UTL.GET_ADVISOR_RUN_TIME +DBMS_STREAMS_ADV_ADM_UTL.GET_COMPUTE_TOPOLOGY +DBMS_STREAMS_ADV_ADM_UTL.GET_DBLINKS +DBMS_STREAMS_ADV_ADM_UTL.GET_DBLINK_INFO_CONVERT +DBMS_STREAMS_ADV_ADM_UTL.GET_DBLINK_INFO_UNIQUE +DBMS_STREAMS_ADV_ADM_UTL.GET_HEURISTIC_PRUNING +DBMS_STREAMS_ADV_ADM_UTL.GET_LAST_ADVISOR_RUN_TIME +DBMS_STREAMS_ADV_ADM_UTL.GET_LAST_ADVSIOR_RUN_TIME +DBMS_STREAMS_ADV_ADM_UTL.GET_RELEASE_NUMBER +DBMS_STREAMS_ADV_ADM_UTL.GET_VERSION_NUMBER +DBMS_STREAMS_ADV_ADM_UTL.IS_GLOBAL_NAMES +DBMS_STREAMS_ADV_ADM_UTL.IS_STAT_EMPTY +DBMS_STREAMS_ADV_ADM_UTL.IS_TOPOLOGY_CHANGED +DBMS_STREAMS_ADV_ADM_UTL.PREPARE_INPUT +DBMS_STREAMS_ADV_ADM_UTL.SET_ADVISOR_RUN_ID +DBMS_STREAMS_ADV_ADM_UTL.SET_ADVISOR_RUN_TIME +DBMS_STREAMS_ADV_ADM_UTL.SET_COMPUTE_TOPOLOGY +DBMS_STREAMS_ADV_ADM_UTL.SET_HEURISTIC_PRUNING +DBMS_STREAMS_ADV_ADM_UTL.SET_LAST_ADVISOR_RUN_TIME +DBMS_STREAMS_ADV_ADM_UTL.SET_STREAM_FLAGS +DBMS_STREAMS_ADV_ADM_UTL.SHIFT_COMPONENT_STATS +DBMS_STREAMS_ADV_ADM_UTL.STORE_COMPONENT_PROPS +DBMS_STREAMS_ADV_ADM_UTL.STORE_DATABASE_INFO +DBMS_STREAMS_ADV_ADM_UTL.STORE_STREAM_PATHS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENTS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENT_EVENTS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENT_LINKS +DBMS_STREAMS_ADV_ADM_UTL.TRACE_COMPONENT_PROPS +DBMS_STREAMS_ADV_ADM_UTL.UPDATE_APPLY_PARALLELISM +DBMS_STREAMS_ADV_ADM_UTL.UPDATE_DATABASE_INFO +DBMS_STREAMS_ADV_ADM_UTL.UPDATE_DBLINKS +DBMS_STREAMS_ADV_ADM_UTL_INVOK. +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_LOCAL_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_PERFORMANCE +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_PERFORMANCE_INTERNAL +DBMS_STREAMS_ADV_ADM_UTL_INVOK.ANALYZE_TOPOLOGY +DBMS_STREAMS_ADV_ADM_UTL_INVOK.COLLECT_DATA +DBMS_STREAMS_AUTH. +DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE +DBMS_STREAMS_AUTH.GRANT_REMOTE_ADMIN_ACCESS +DBMS_STREAMS_AUTH.REVOKE_ADMIN_PRIVILEGE +DBMS_STREAMS_AUTH.REVOKE_REMOTE_ADMIN_ACCESS +DBMS_STREAMS_AUTO_INT. +DBMS_STREAMS_AUTO_INT.APPLY_SPLITTABLE_VARCHAR2 +DBMS_STREAMS_AUTO_INT.CLEAN_AUTO_SPLIT_MERGE +DBMS_STREAMS_AUTO_INT.CLEAN_MISSING_ORIGINAL_CAPTURE +DBMS_STREAMS_AUTO_INT.CLEAN_RECOVERABLE_SCRIPT +DBMS_STREAMS_AUTO_INT.ENABLE_AUTO_SPLIT_JOB +DBMS_STREAMS_AUTO_INT.GET_CAPTURE_ID +DBMS_STREAMS_AUTO_INT.GET_NEXT_SMID +DBMS_STREAMS_AUTO_INT.READY_TO_SPLIT_NON_CCAC +DBMS_STREAMS_AUTO_INT.SPLIT_STREAMS +DBMS_STREAMS_AUTO_INT.SPLIT_STREAMS_JOB +DBMS_STREAMS_AUTO_INT.SUBMIT_SPLIT_MERGE_STREAMS_JOB +DBMS_STREAMS_CONTROL_ADM. +DBMS_STREAMS_CONTROL_ADM.IS_SKIP_CAPTURE +DBMS_STREAMS_CONTROL_ADM.RESUME_CAPTURE +DBMS_STREAMS_CONTROL_ADM.SKIP_CAPTURE +DBMS_STREAMS_DATAPUMP. +DBMS_STREAMS_DATAPUMP.GET_EXPORT_DML_SCN +DBMS_STREAMS_DATAPUMP.GET_EXPORT_DML_SCN_VALUE +DBMS_STREAMS_DATAPUMP.NEED_SCN +DBMS_STREAMS_DATAPUMP.NEED_SCN_COMMON +DBMS_STREAMS_DATAPUMP.SET_EXPORT_SCN +DBMS_STREAMS_DATAPUMP.SET_SESSION_STATE +DBMS_STREAMS_DATAPUMP_UTIL. +DBMS_STREAMS_DATAPUMP_UTIL.GET_RMAN_INST_SCN +DBMS_STREAMS_DATAPUMP_UTIL.GET_TYPE_NUM +DBMS_STREAMS_DATAPUMP_UTIL.IN_DATAPUMP_JOB +DBMS_STREAMS_DATAPUMP_UTIL.IS_FULL_DB_EXPORT +DBMS_STREAMS_DATAPUMP_UTIL.IS_MAINTAIN_DATAPUMP +DBMS_STREAMS_DATAPUMP_UTIL.IS_STREAMS_CONFIGURATION +DBMS_STREAMS_DATAPUMP_UTIL.JOB_MODE +DBMS_STREAMS_DATAPUMP_UTIL.JOB_TYPE +DBMS_STREAMS_DATAPUMP_UTIL.MIN_SUPP_LOGGING_ENABLED +DBMS_STREAMS_DATAPUMP_UTIL.REMOTE_LINK +DBMS_STREAMS_DECL. +DBMS_STREAMS_HANDLER_ADM. +DBMS_STREAMS_HANDLER_ADM.ADD_STMT_TO_HANDLER +DBMS_STREAMS_HANDLER_ADM.CREATE_STMT_HANDLER +DBMS_STREAMS_HANDLER_ADM.DROP_STMT_HANDLER +DBMS_STREAMS_HANDLER_ADM.REMOVE_STMT_FROM_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL. +DBMS_STREAMS_HANDLER_INTERNAL.CHANGE_HANDLER_EXISTS +DBMS_STREAMS_HANDLER_INTERNAL.CREATE_STMT_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.DROP_STMT_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.EXISTS_STMT_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.SET_STMT_IN_HANDLER +DBMS_STREAMS_HANDLER_INTERNAL.STMT_HANDLER_IN_USE +DBMS_STREAMS_LCR_INT. +DBMS_STREAMS_LCR_INT.CONVERT_LCR_TO_XML +DBMS_STREAMS_LCR_INT.CONVERT_XML_TO_LCR +DBMS_STREAMS_LCR_INT.GET_LCR_CONTENT +DBMS_STREAMS_MC. +DBMS_STREAMS_MC.MAINTAIN_CHANGE_TABLE +DBMS_STREAMS_MC_INV. +DBMS_STREAMS_MC_INV.GET_NEXT_SEQNO +DBMS_STREAMS_MESSAGING. +DBMS_STREAMS_MESSAGING.DEQUEUE +DBMS_STREAMS_MESSAGING.ENQUEUE +DBMS_STREAMS_MT. +DBMS_STREAMS_MT.ALTER_APPLY_SETUP +DBMS_STREAMS_MT.ALTER_CAPTURE_SETUP +DBMS_STREAMS_MT.ALTER_PROPAGATION_SETUP +DBMS_STREAMS_MT.APPLY_SETUP +DBMS_STREAMS_MT.BUILD_AND_PREPARE +DBMS_STREAMS_MT.CANONICALIZE_TABLEPACES +DBMS_STREAMS_MT.CAPTURE_SETUP +DBMS_STREAMS_MT.CLEANUP_INSTANTIATION_SETUP +DBMS_STREAMS_MT.CLOSE_SQL_SCRIPT +DBMS_STREAMS_MT.CONSTRUCT_SQL_REC +DBMS_STREAMS_MT.CONVERT_TAB_OBJS_TO_ARRAYS +DBMS_STREAMS_MT.CRASH_TEST +DBMS_STREAMS_MT.CREATE_CAPTURE_SETUP +DBMS_STREAMS_MT.DROP_QUEUE_SETUP +DBMS_STREAMS_MT.DROP_QUEUE_TABLE_SETUP +DBMS_STREAMS_MT.DROP_RULESET_SETUP +DBMS_STREAMS_MT.DROP_RULE_SETUP +DBMS_STREAMS_MT.DROP_TABLESPACE_SETUP +DBMS_STREAMS_MT.ENABLE_PROPAGATION +DBMS_STREAMS_MT.EXECUTING_MAINTAIN_API +DBMS_STREAMS_MT.GENERATE_HEADER_STMT +DBMS_STREAMS_MT.GET_CRASH_COUNTER +DBMS_STREAMS_MT.GET_CRASH_POINT +DBMS_STREAMS_MT.GET_SETUP_STREAMS +DBMS_STREAMS_MT.GET_SRC_DB +DBMS_STREAMS_MT.GET_TABLES_IN_TABLESPACES +DBMS_STREAMS_MT.GET_TARGET_DB +DBMS_STREAMS_MT.INSERT_PARAM +DBMS_STREAMS_MT.IS_IN +DBMS_STREAMS_MT.MAINTAIN_STREAMS +DBMS_STREAMS_MT.OPEN_SQL_SCRIPT +DBMS_STREAMS_MT.POST_INSTANTIATION_SETUP +DBMS_STREAMS_MT.PRE_INSTANTIATION_SETUP +DBMS_STREAMS_MT.PROCESS_SQL_REC +DBMS_STREAMS_MT.PROCESS_SQL_SCRIPT +DBMS_STREAMS_MT.PROPAGATION_SETUP +DBMS_STREAMS_MT.QUEUE_SETUP +DBMS_STREAMS_MT.RECOVER_OPERATION +DBMS_STREAMS_MT.REMOTE_STATE_BLOCK +DBMS_STREAMS_MT.REMOVE_RULE_RULESET_SETUP +DBMS_STREAMS_MT.SETUP_REMOTE_SESSION_STATE +DBMS_STREAMS_MT.SET_CRASH_COUNTER +DBMS_STREAMS_MT.SET_CRASH_POINT +DBMS_STREAMS_MT.SET_INSTANTIATION_SCN +DBMS_STREAMS_MT.SET_SETUP_STREAMS +DBMS_STREAMS_MT.SET_SRC_DB +DBMS_STREAMS_MT.SET_TARGET_DB +DBMS_STREAMS_MT.START_APPLY +DBMS_STREAMS_MT.START_CAPTURE +DBMS_STREAMS_MT.STOP_QUEUE_SETUP +DBMS_STREAMS_MT.STOP_STREAMS_PROCESS_SETUP +DBMS_STREAMS_PUB_RPC. +DBMS_STREAMS_PUB_RPC.GET_EXPORT_DML_SCN +DBMS_STREAMS_PUB_RPC.MIN_SUPP_LOGGING_ENABLED +DBMS_STREAMS_PUB_RPC.NEED_SCN +DBMS_STREAMS_RPC. +DBMS_STREAMS_RPC.BUILD +DBMS_STREAMS_RPC.BUILD_RC +DBMS_STREAMS_RPC.CONVERT_FILE_AT_SOURCE +DBMS_STREAMS_RPC.CONVERT_FILE_AT_SOURCE_RC +DBMS_STREAMS_RPC.CREATE_VERSION +DBMS_STREAMS_RPC.DROP_SCRIPT +DBMS_STREAMS_RPC.GET_CHARACTER_SET +DBMS_STREAMS_RPC.GET_DATABASE_SCNS +DBMS_STREAMS_RPC.GET_DATABASE_SCNS_RC +DBMS_STREAMS_RPC.GET_EXPORT_DML_SCN +DBMS_STREAMS_RPC.GET_FILE_GROUP_FILE_INFO +DBMS_STREAMS_RPC.GET_FILE_GROUP_INFO +DBMS_STREAMS_RPC.GET_FILE_GROUP_VERSION_INFO +DBMS_STREAMS_RPC.GET_OLDEST_SCN +DBMS_STREAMS_RPC.GET_OLDEST_SCN_RC +DBMS_STREAMS_RPC.GET_SYSTEM_CHANGE_NUMBER +DBMS_STREAMS_RPC.GET_SYSTEM_CHANGE_NUMBER_RC +DBMS_STREAMS_RPC.GET_UNDO_BLOCK +DBMS_STREAMS_RPC.LOCAL_EXECUTE_BLOCK +DBMS_STREAMS_RPC.MIN_SUPP_LOGGING_ENABLED +DBMS_STREAMS_RPC.NEED_SCN +DBMS_STREAMS_RPC.PREPARE_GLOBAL_INSTANTIATION +DBMS_STREAMS_RPC.PREPARE_GLOBAL_INSTANTIATION_R +DBMS_STREAMS_RPC.PREPARE_SCHEMA_INSTANTIATION +DBMS_STREAMS_RPC.PREPARE_SCHEMA_INSTANTIATION_R +DBMS_STREAMS_RPC.PREPARE_TABLE_INSTANTIATION +DBMS_STREAMS_RPC.PREPARE_TABLE_INSTANTIATION_RC +DBMS_STREAMS_RPC.PULL_ALTER_TABLESPACE +DBMS_STREAMS_RPC.PULL_PLATFORM +DBMS_STREAMS_RPC.PULL_TABLESPACE_FILE_INFO +DBMS_STREAMS_RPC.PULL_TABLESPACE_INFO +DBMS_STREAMS_RPC.PULL_TBS_FILE_NAME_ID +DBMS_STREAMS_RPC.REMOVE_FILE +DBMS_STREAMS_RPC.REMOVE_FILE_RC +DBMS_STREAMS_RPC.SET_OLDEST_SCN +DBMS_STREAMS_RPC.SET_OLDEST_SCN_RC +DBMS_STREAMS_RPC.TABLESPACES_EXIST_NUM +DBMS_STREAMS_RPC.TABLESPACES_EXIST_NUM_RC +DBMS_STREAMS_RPC.WAIT_FOR_INFLIGHT_TXN +DBMS_STREAMS_RPC.WAIT_FOR_INFLIGHT_TXN_RC +DBMS_STREAMS_RPC_INTERNAL. +DBMS_STREAMS_RPC_INTERNAL.BUILD +DBMS_STREAMS_RPC_INTERNAL.GET_SYSTEM_CHANGE_NUMBER +DBMS_STREAMS_RPC_INTERNAL.WAIT_FOR_INFLIGHT_TXN +DBMS_STREAMS_SM. +DBMS_STREAMS_SM.APPLY_EXISTS +DBMS_STREAMS_SM.CAPTURE_SPLITTABLE +DBMS_STREAMS_SM.IS_UNCOMMITTED_XOUT +DBMS_STREAMS_SM.MERGE_STREAMS +DBMS_STREAMS_SM.MERGE_STREAMS_JOB +DBMS_STREAMS_SM.OUTPUT_BOOLEAN +DBMS_STREAMS_SM.SET_JOB_NEXT_RUN +DBMS_STREAMS_SM.SPLIT_JOB_INFO +DBMS_STREAMS_SM.SPLIT_STREAMS +DBMS_STREAMS_SM.SPLIT_STREAMS_INTERNAL +DBMS_STREAMS_SM.TRY_DROP_JOB +DBMS_STREAMS_SM.WRITE_ALERT +DBMS_STREAMS_TABLESPACE_ADM. +DBMS_STREAMS_TABLESPACE_ADM.ATTACH_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.ATTACH_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.CLONE_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.CLONE_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.DETACH_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.DETACH_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.GET_TRACE_LEVEL +DBMS_STREAMS_TABLESPACE_ADM.PULL_SIMPLE_TABLESPACE +DBMS_STREAMS_TABLESPACE_ADM.PULL_TABLESPACES +DBMS_STREAMS_TABLESPACE_ADM.SET_TRACE_LEVEL +DBMS_STREAMS_TBS_INT. +DBMS_STREAMS_TBS_INT.CANON +DBMS_STREAMS_TBS_INT.CHECK_ASM +DBMS_STREAMS_TBS_INT.CHECK_CDB +DBMS_STREAMS_TBS_INT.CHECK_FILE_EXISTS +DBMS_STREAMS_TBS_INT.COMBINE_DIR_AND_FILE +DBMS_STREAMS_TBS_INT.COMPARE_PATH_NAMES +DBMS_STREAMS_TBS_INT.CONVERT_FILE +DBMS_STREAMS_TBS_INT.CONVERT_FILE_AT_SOURCE +DBMS_STREAMS_TBS_INT.CONVERT_PLATFORM_TO_ID +DBMS_STREAMS_TBS_INT.DEFAULT_FILE_NAME +DBMS_STREAMS_TBS_INT.DETERMINE_CALL_TRACING +DBMS_STREAMS_TBS_INT.DUMP_ERROR +DBMS_STREAMS_TBS_INT.ENSURE_NONNULL +DBMS_STREAMS_TBS_INT.GENERATE_FILE_NAME +DBMS_STREAMS_TBS_INT.GET_FILE_COUNT +DBMS_STREAMS_TBS_INT.GET_FILE_GROUP_FILE_INFO +DBMS_STREAMS_TBS_INT.GET_FILE_GROUP_INFO +DBMS_STREAMS_TBS_INT.GET_FILE_GROUP_VERSION_INFO +DBMS_STREAMS_TBS_INT.GET_LOCAL_PLATFORM +DBMS_STREAMS_TBS_INT.GET_LOCAL_PLATFORM_ID +DBMS_STREAMS_TBS_INT.GET_TABLESPACE_INFORMATION +DBMS_STREAMS_TBS_INT.PARSE_FILE_NAME +DBMS_STREAMS_TBS_INT.RAISE_INVALID +DBMS_STREAMS_TBS_INT.REMOVE_FILE +DBMS_STREAMS_TBS_INT.TRACE_COMMON +DBMS_STREAMS_TBS_INT.TRACE_CONVERT_FILE +DBMS_STREAMS_TBS_INT.TRACE_ENTRY +DBMS_STREAMS_TBS_INT.TRACE_EXPRESSION +DBMS_STREAMS_TBS_INT.TRACE_INVOCATION +DBMS_STREAMS_TBS_INT_INVOK. +DBMS_STREAMS_TBS_INT_INVOK.CHECK_PRIVILEGE +DBMS_STREAMS_TBS_INT_INVOK.DQ +DBMS_STREAMS_TBS_INT_INVOK.GET_DATA_FILE +DBMS_STREAMS_TBS_INT_INVOK.GET_FILE_GROUP_VERSION_INFO +DBMS_STREAMS_TBS_INT_INVOK.GET_SINGLE_DATA_FILE +DBMS_STREAMS_TBS_INT_INVOK.GET_SINGLE_FILE +DBMS_STREAMS_TBS_INT_INVOK.GET_TABLESPACE_FILES +DBMS_STREAMS_TBS_INT_INVOK.GET_TABLESPACE_STATUS +DBMS_STREAMS_TBS_INT_INVOK.IS_TABLESPACE_READONLY +DBMS_STREAMS_TBS_INT_INVOK.IS_TABLESPACE_READWRITE +DBMS_STREAMS_TBS_INT_INVOK.MAKE_TABLESPACE_READONLY +DBMS_STREAMS_TBS_INT_INVOK.MAKE_TABLESPACE_READWRITE +DBMS_STREAMS_TBS_INT_INVOK.PARSE +DBMS_STREAMS_TBS_INT_INVOK.PRINT_ANY_ERROR +DBMS_STREAMS_TBS_INT_INVOK.PULL_ALTER_TABLESPACE +DBMS_STREAMS_TBS_INT_INVOK.PULL_PLATFORM +DBMS_STREAMS_TBS_INT_INVOK.PULL_TABLESPACE_FILE_INFO +DBMS_STREAMS_TBS_INT_INVOK.PULL_TABLESPACE_INFO +DBMS_STREAMS_TBS_INT_INVOK.PULL_TBS_FILE_NAME_ID +DBMS_STREAMS_TBS_INT_INVOK.RPC_PULL_TABLESPACE_FILE_INFO +DBMS_STREAMS_TBS_INT_INVOK.RPC_PULL_TABLESPACE_INFO +DBMS_STREAMS_TBS_INT_INVOK.RPC_PULL_TBS_FILE_NAME_ID +DBMS_STREAMS_TBS_INT_INVOK.TABLESPACES_EXIST_NUM +DBMS_STREAMS_TBS_INT_INVOK.WAIT_FOR_TERMINATION +DBMS_SUMMARY. +DBMS_SUMMARY.DISABLE_DEPENDENT +DBMS_SUMMARY.ENABLE_DEPENDENT +DBMS_SUMMARY.ESTIMATE_MVIEW_SIZE +DBMS_SUMMARY.SET_LOGFILE_NAME +DBMS_SUMMARY.VALIDATE_DIMENSION +DBMS_SUMREF_UTIL. +DBMS_SUMREF_UTIL.SET_LOGFILE_NAME +DBMS_SUMREF_UTIL.TRACE +DBMS_SUMREF_UTIL.TRACE_FINISH +DBMS_SUMREF_UTIL.TRACE_INIT +DBMS_SUMREF_UTIL.TRACE_OFF +DBMS_SUMREF_UTIL.TRACE_ON +DBMS_SUMVDM. +DBMS_SUMVDM.VERIFY_DIMENSION +DBMS_SUM_RWEQ_EXPORT. +DBMS_SUM_RWEQ_EXPORT.AUDIT_EXP +DBMS_SUM_RWEQ_EXPORT.AUDIT_SYSPRIVS_EXP +DBMS_SUM_RWEQ_EXPORT.CREATE_EXP +DBMS_SUM_RWEQ_EXPORT.DROP_EXP +DBMS_SUM_RWEQ_EXPORT.GRANT_EXP +DBMS_SUM_RWEQ_EXPORT.GRANT_SYSPRIVS_EXP +DBMS_SUM_RWEQ_EXPORT_INTERNAL. +DBMS_SUM_RWEQ_EXPORT_INTERNAL.I_CREATE_EXP +DBMS_SWRF_INTERNAL. +DBMS_SWRF_INTERNAL.AWR_CHECK_DMP_SNAPID +DBMS_SWRF_INTERNAL.AWR_CLEAN +DBMS_SWRF_INTERNAL.AWR_DECODE_OBJECT_TYPE +DBMS_SWRF_INTERNAL.AWR_EXTRACT +DBMS_SWRF_INTERNAL.AWR_FLUSH_T2SS_SNAP +DBMS_SWRF_INTERNAL.AWR_GET_DDL +DBMS_SWRF_INTERNAL.AWR_GET_MASTER +DBMS_SWRF_INTERNAL.AWR_GET_OBJECT_INFO +DBMS_SWRF_INTERNAL.AWR_LOAD +DBMS_SWRF_INTERNAL.AWR_LOAD2 +DBMS_SWRF_INTERNAL.BASELINE_MIGRATE +DBMS_SWRF_INTERNAL.BLUPDATE_LAST_TIME_COMPUTED +DBMS_SWRF_INTERNAL.CLEANUP_DATABASE +DBMS_SWRF_INTERNAL.CLEAR_AWR_DBID +DBMS_SWRF_INTERNAL.CREATE_IMPORT_PARTITIONS +DBMS_SWRF_INTERNAL.CREATE_STAGING_SCHEMA +DBMS_SWRF_INTERNAL.CREATE_UPGRADE_PARTITIONS +DBMS_SWRF_INTERNAL.DEFAULT_REPORT_DBID +DBMS_SWRF_INTERNAL.DUMP_COLUMN_STATS +DBMS_SWRF_INTERNAL.GET_AWR_DBID +DBMS_SWRF_INTERNAL.GET_DUMP_INFO +DBMS_SWRF_INTERNAL.GET_SOURCE_NAME +DBMS_SWRF_INTERNAL.INSERT_BASELINE_DETAILS +DBMS_SWRF_INTERNAL.MASSAGE_COLUMN_STATS +DBMS_SWRF_INTERNAL.MODIFY_AUTOPURGE_SETTINGS +DBMS_SWRF_INTERNAL.MOVE_TO_AWR +DBMS_SWRF_INTERNAL.REGISTER_DATABASE +DBMS_SWRF_INTERNAL.REGISTER_LOCAL_DBID +DBMS_SWRF_INTERNAL.REGISTER_REMOTE_DATABASE +DBMS_SWRF_INTERNAL.REMOVE_ADDM_TASKS +DBMS_SWRF_INTERNAL.REMOVE_STAGING_SCHEMA +DBMS_SWRF_INTERNAL.REMOVE_WR_CONTROL +DBMS_SWRF_INTERNAL.RESERVE_SNAPSHOT_RANGE +DBMS_SWRF_INTERNAL.RESET_AWR +DBMS_SWRF_INTERNAL.RESET_DEFAULT_TZ +DBMS_SWRF_INTERNAL.SET_AWR_DBID +DBMS_SWRF_INTERNAL.SET_SOURCE_NAME +DBMS_SWRF_INTERNAL.T2S_REGISTER_NFY +DBMS_SWRF_INTERNAL.T2S_SNAP_INTENT_NFY +DBMS_SWRF_INTERNAL.UNREGISTER_DATABASE +DBMS_SWRF_INTERNAL.UNREGISTER_REMOTE_DATABASE +DBMS_SWRF_INTERNAL.UNRESERVE_SNAPSHOT_RANGE +DBMS_SWRF_INTERNAL.UPDATE_DATAFILE_INFO +DBMS_SWRF_INTERNAL.UPDATE_OBJECT_INFO +DBMS_SWRF_INTERNAL.UPGRADE_SCHEMA +DBMS_SWRF_INTERNAL.VALIDATE_AWR_LOCATION +DBMS_SWRF_INTERNAL.WAIT_FOR_AWR_OPEN +DBMS_SWRF_REPORT_INTERNAL. +DBMS_SWRF_REPORT_INTERNAL.ADD_CON_DBID_LIST_PRED +DBMS_SWRF_REPORT_INTERNAL.ASH_GLOBAL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.ASH_INPUT_FILTER +DBMS_SWRF_REPORT_INTERNAL.ASH_REPORT_INIT +DBMS_SWRF_REPORT_INTERNAL.ASH_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.ASH_REPORT_SUMMARY +DBMS_SWRF_REPORT_INTERNAL.AWR_GLOBAL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.AWR_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.BUILD_HEADING_INFO +DBMS_SWRF_REPORT_INTERNAL.DBFUS_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.DIFF_GLOBAL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.DIFF_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.DISPLAY_SQLRPT_SECTIONS +DBMS_SWRF_REPORT_INTERNAL.GENERATE_DATA_SOURCE_NAME +DBMS_SWRF_REPORT_INTERNAL.GET_CON_REPORT_TYPE +DBMS_SWRF_REPORT_INTERNAL.GET_PCTDIFF +DBMS_SWRF_REPORT_INTERNAL.PRINT_EXECUTION_PLAN +DBMS_SWRF_REPORT_INTERNAL.REPORT_CLEANUP +DBMS_SWRF_REPORT_INTERNAL.SET_REPORT_THRESHOLDS +DBMS_SWRF_REPORT_INTERNAL.SQL_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.SQL_REPORT_SUMMARY +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_CLEANUP +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_GC_XML_SQL +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_INIT +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_MAIN +DBMS_SWRF_REPORT_INTERNAL.WCR_REPORT_SUMMARY +DBMS_SYNC_REFRESH. +DBMS_SYNC_REFRESH.ABORT_REFRESH +DBMS_SYNC_REFRESH.ALTER_REFRESH_STATS_RETENTION +DBMS_SYNC_REFRESH.CAN_SYNCREF_TABLE +DBMS_SYNC_REFRESH.EXECUTE_REFRESH +DBMS_SYNC_REFRESH.GET_ALL_GROUP_IDS +DBMS_SYNC_REFRESH.GET_GROUP_ID +DBMS_SYNC_REFRESH.GET_GROUP_ID_LIST +DBMS_SYNC_REFRESH.PREPARE_REFRESH +DBMS_SYNC_REFRESH.PREPARE_STAGING_LOG +DBMS_SYNC_REFRESH.PURGE_REFRESH_STATS +DBMS_SYNC_REFRESH.REGISTER_MVIEWS +DBMS_SYNC_REFRESH.REGISTER_PARTITION_OPERATION +DBMS_SYNC_REFRESH.UNREGISTER_MVIEWS +DBMS_SYNC_REFRESH.UNREGISTER_PARTITION_OPERATION +DBMS_SYNC_REFRESH_INTERNAL. +DBMS_SYNC_REFRESH_INTERNAL.ABORT_REFRESH +DBMS_SYNC_REFRESH_INTERNAL.ALTER_REFRESH_STATS_RETENTION +DBMS_SYNC_REFRESH_INTERNAL.CAN_SYNCREF_TABLE +DBMS_SYNC_REFRESH_INTERNAL.EXECUTE_REFRESH +DBMS_SYNC_REFRESH_INTERNAL.GET_ALL_GROUP_IDS +DBMS_SYNC_REFRESH_INTERNAL.GET_GROUP_ID +DBMS_SYNC_REFRESH_INTERNAL.GET_GROUP_ID_LIST +DBMS_SYNC_REFRESH_INTERNAL.PREPARE_REFRESH +DBMS_SYNC_REFRESH_INTERNAL.PREPARE_STAGING_LOG +DBMS_SYNC_REFRESH_INTERNAL.PURGE_REFRESH_STATS +DBMS_SYNC_REFRESH_INTERNAL.REGISTER_MVIEWS +DBMS_SYNC_REFRESH_INTERNAL.REGISTER_PARTITION_OPERATION +DBMS_SYNC_REFRESH_INTERNAL.UNREGISTER_MVIEWS +DBMS_SYNC_REFRESH_INTERNAL.UNREGISTER_PARTITION_OPERATION +DBMS_SYSTEM. +DBMS_SYSTEM.ADD_PARAMETER_VALUE +DBMS_SYSTEM.DIST_TXN_SYNC +DBMS_SYSTEM.GET_ENV +DBMS_SYSTEM.GET_OBH +DBMS_SYSTEM.KCFRMS +DBMS_SYSTEM.KSDDDT +DBMS_SYSTEM.KSDFLS +DBMS_SYSTEM.KSDIND +DBMS_SYSTEM.KSDWRT +DBMS_SYSTEM.READ_EV +DBMS_SYSTEM.REMOVE_PARAMETER_VALUE +DBMS_SYSTEM.SET_BOOL_PARAM_IN_SESSION +DBMS_SYSTEM.SET_EV +DBMS_SYSTEM.SET_INT_PARAM_IN_SESSION +DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION +DBMS_SYSTEM.WAIT_FOR_EVENT +DBMS_SYS_ERROR. +DBMS_SYS_ERROR.RAISE_SYSTEM_ERROR +DBMS_SYS_SQL. +DBMS_SYS_SQL.BIND_ARRAY +DBMS_SYS_SQL.BIND_VARIABLE +DBMS_SYS_SQL.BIND_VARIABLE_CHAR +DBMS_SYS_SQL.BIND_VARIABLE_PKG +DBMS_SYS_SQL.BIND_VARIABLE_RAW +DBMS_SYS_SQL.BIND_VARIABLE_ROWID +DBMS_SYS_SQL.CLOSE_CURSOR +DBMS_SYS_SQL.COLUMN_VALUE +DBMS_SYS_SQL.COLUMN_VALUE_CHAR +DBMS_SYS_SQL.COLUMN_VALUE_LONG +DBMS_SYS_SQL.COLUMN_VALUE_RAW +DBMS_SYS_SQL.COLUMN_VALUE_ROWID +DBMS_SYS_SQL.DEFINE_ARRAY +DBMS_SYS_SQL.DEFINE_COLUMN +DBMS_SYS_SQL.DEFINE_COLUMN_CHAR +DBMS_SYS_SQL.DEFINE_COLUMN_LONG +DBMS_SYS_SQL.DEFINE_COLUMN_RAW +DBMS_SYS_SQL.DEFINE_COLUMN_ROWID +DBMS_SYS_SQL.DESCRIBE_COLUMNS +DBMS_SYS_SQL.DESCRIBE_COLUMNS2 +DBMS_SYS_SQL.DESCRIBE_COLUMNS3 +DBMS_SYS_SQL.DUMP_ALL_OPEN_CURSORS +DBMS_SYS_SQL.EXECUTE +DBMS_SYS_SQL.EXECUTE_AND_FETCH +DBMS_SYS_SQL.FETCH_ROWS +DBMS_SYS_SQL.GET_NEXT_RESULT +DBMS_SYS_SQL.GET_RPI_CURSOR +DBMS_SYS_SQL.INIT +DBMS_SYS_SQL.IS_OPEN +DBMS_SYS_SQL.LAST_ERROR_POSITION +DBMS_SYS_SQL.LAST_ROW_COUNT +DBMS_SYS_SQL.LAST_ROW_ID +DBMS_SYS_SQL.LAST_SQL_FUNCTION_CODE +DBMS_SYS_SQL.OPEN_CURSOR +DBMS_SYS_SQL.PARSE +DBMS_SYS_SQL.PARSE_AS_USER +DBMS_SYS_SQL.RETURN_RESULT +DBMS_SYS_SQL.TO_CURSOR_NUMBER +DBMS_SYS_SQL.TO_REFCURSOR +DBMS_SYS_SQL.VARIABLE_VALUE +DBMS_SYS_SQL.VARIABLE_VALUE_CHAR +DBMS_SYS_SQL.VARIABLE_VALUE_PKG +DBMS_SYS_SQL.VARIABLE_VALUE_RAW +DBMS_SYS_SQL.VARIABLE_VALUE_ROWID +DBMS_TDB. +DBMS_TDB.CHECK_DB +DBMS_TDB.CHECK_EXTERNAL +DBMS_TDB.EXIT_TRANSPORT_SCRIPT +DBMS_TDE_TOOLKIT. +DBMS_TDE_TOOLKIT.DATAPUMP_DECRYPT +DBMS_TDE_TOOLKIT.DATAPUMP_ENCRYPT +DBMS_TDE_TOOLKIT_FFI. +DBMS_TDE_TOOLKIT_FFI.DATAPUMP_DECRYPT +DBMS_TDE_TOOLKIT_FFI.DATAPUMP_ENCRYPT +DBMS_TF. +DBMS_TF.COLUMN_TYPE_NAME +DBMS_TF.COL_TO_CHAR +DBMS_TF.CSTORE_EXISTS +DBMS_TF.CSTORE_GET +DBMS_TF.GET_COL +DBMS_TF.GET_ENV +DBMS_TF.GET_ROW_SET +DBMS_TF.GET_XID +DBMS_TF.PUT_COL +DBMS_TF.PUT_ROW_SET +DBMS_TF.ROW_REPLICATION +DBMS_TF.ROW_TO_CHAR +DBMS_TF.SUPPORTED_TYPE +DBMS_TF.TRACE +DBMS_TF.XSTORE_CLEAR +DBMS_TF.XSTORE_EXISTS +DBMS_TF.XSTORE_GET +DBMS_TF.XSTORE_REMOVE +DBMS_TF.XSTORE_SET +DBMS_TG_DBG. +DBMS_TG_DBG.CLEAR_FAILPOINT +DBMS_TG_DBG.SET_FAILPOINT +DBMS_TG_DBG.SET_SESSION_DRAINABLE +DBMS_TNS. +DBMS_TNS.RESOLVE_TNSNAME +DBMS_TRACE. +DBMS_TRACE.CLEAR_PLSQL_TRACE +DBMS_TRACE.COMMENT_PLSQL_TRACE +DBMS_TRACE.GET_PLSQL_TRACE_LEVEL +DBMS_TRACE.GET_PLSQL_TRACE_RUNNUMBER +DBMS_TRACE.INTERNAL_VERSION_CHECK +DBMS_TRACE.LIMIT_PLSQL_TRACE +DBMS_TRACE.PAUSE_PLSQL_TRACE +DBMS_TRACE.PLSQL_TRACE_VERSION +DBMS_TRACE.RESUME_PLSQL_TRACE +DBMS_TRACE.SET_PLSQL_TRACE +DBMS_TRANSACTION. +DBMS_TRANSACTION.ADVISE_COMMIT +DBMS_TRANSACTION.ADVISE_NOTHING +DBMS_TRANSACTION.ADVISE_ROLLBACK +DBMS_TRANSACTION.BEGIN_DISCRETE_TRANSACTION +DBMS_TRANSACTION.COMMIT +DBMS_TRANSACTION.COMMIT_COMMENT +DBMS_TRANSACTION.COMMIT_FORCE +DBMS_TRANSACTION.LOCAL_TRANSACTION_ID +DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY +DBMS_TRANSACTION.PURGE_MIXED +DBMS_TRANSACTION.READ_ONLY +DBMS_TRANSACTION.READ_WRITE +DBMS_TRANSACTION.ROLLBACK +DBMS_TRANSACTION.ROLLBACK_FORCE +DBMS_TRANSACTION.ROLLBACK_SAVEPOINT +DBMS_TRANSACTION.SAVEPOINT +DBMS_TRANSACTION.STEP_ID +DBMS_TRANSACTION.USE_ROLLBACK_SEGMENT +DBMS_TRANSACTION_INTERNAL_SYS. +DBMS_TRANSACTION_INTERNAL_SYS.GET_CURRENT_SCN +DBMS_TRANSFORM. +DBMS_TRANSFORM.COMPUTE_TRANSFORMATION +DBMS_TRANSFORM.CREATE_TRANSFORMATION +DBMS_TRANSFORM.DROP_TRANSFORMATION +DBMS_TRANSFORM.MODIFY_TRANSFORMATION +DBMS_TRANSFORM_EXIMP. +DBMS_TRANSFORM_EXIMP.IMPORT_TRANSFORMATION +DBMS_TRANSFORM_EXIMP.IMPORT_TRANS_ATTR +DBMS_TRANSFORM_EXIMP.INSTANCE_INFO_EXP +DBMS_TRANSFORM_EXIMP.SCHEMA_INFO_EXP +DBMS_TRANSFORM_EXIMP_INTERNAL. +DBMS_TRANSFORM_EXIMP_INTERNAL.PARSE_NAME +DBMS_TRANSFORM_EXIMP_INTERNAL.PROCESS_TRANS +DBMS_TRANSFORM_EXIMP_INTERNAL.PROCESS_TRANS_ATTRIB +DBMS_TRANSFORM_INTERNAL. +DBMS_TRANSFORM_INTERNAL.GET_IDN_LENGTH +DBMS_TRANSFORM_INTERNAL.I_CREATE_TRANS +DBMS_TRANSFORM_INTERNAL.I_DROP_TRANSFORMATION +DBMS_TRANSFORM_INTERNAL.I_MODIFY_TRANS +DBMS_TSDP_MANAGE. +DBMS_TSDP_MANAGE.ADD_SENSITIVE_COLUMN +DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE +DBMS_TSDP_MANAGE.ALTER_SENSITIVE_COLUMN +DBMS_TSDP_MANAGE.DROP_SENSITIVE_COLUMN +DBMS_TSDP_MANAGE.DROP_SENSITIVE_TYPE +DBMS_TSDP_MANAGE.DROP_SENSITIVE_TYPE_SOURCE +DBMS_TSDP_MANAGE.IMPORT_DISCOVERY_RESULT +DBMS_TSDP_MANAGE.IMPORT_SENSITIVE_TYPES +DBMS_TSDP_MANAGE.REMOVE_DISCOVERY_RESULT +DBMS_TSDP_PROTECT. +DBMS_TSDP_PROTECT.ADD_POLICY +DBMS_TSDP_PROTECT.ALTER_POLICY +DBMS_TSDP_PROTECT.ASSOCIATE_POLICY +DBMS_TSDP_PROTECT.DISABLE_PROTECTION_COLUMN +DBMS_TSDP_PROTECT.DISABLE_PROTECTION_SOURCE +DBMS_TSDP_PROTECT.DISABLE_PROTECTION_TYPE +DBMS_TSDP_PROTECT.DROP_POLICY +DBMS_TSDP_PROTECT.ENABLE_PROTECTION_COLUMN +DBMS_TSDP_PROTECT.ENABLE_PROTECTION_SOURCE +DBMS_TSDP_PROTECT.ENABLE_PROTECTION_TYPE +DBMS_TTS. +DBMS_TTS.ADD_PROTECTED_CE_TAB_KEY +DBMS_TTS.CHECKTABLESPACE +DBMS_TTS.CONVERTENCRYPTEDDATAFILECOPY +DBMS_TTS.DH_KEY_EXCHANGE +DBMS_TTS.DOWNGRADE +DBMS_TTS.GET_AFN_DBID +DBMS_TTS.GET_AFN_DBIDXENDIAN +DBMS_TTS.GET_PROTECTED_CE_TAB_KEY +DBMS_TTS.GET_PROTECTED_TSE_KEY +DBMS_TTS.INSERT_ERROR +DBMS_TTS.ISSELFCONTAINED +DBMS_TTS.PUT_PROTECTED_TSE_KEY +DBMS_TTS.SET_PASSPHRASE +DBMS_TTS.TAB_FUNC_ERROR +DBMS_TTS.TRANSPORT_CHAR_SET_CHECK +DBMS_TTS.TRANSPORT_CHAR_SET_CHECK_MSG +DBMS_TTS.TRANSPORT_SET_CHECK +DBMS_TYPES. +DBMS_TYPE_UTILITY. +DBMS_TYPE_UTILITY.NONE +DBMS_UMF. +DBMS_UMF.CONFIGURE_NODE +DBMS_UMF.CREATE_LINK +DBMS_UMF.CREATE_TOPOLOGY +DBMS_UMF.DROP_LINK +DBMS_UMF.DROP_TOPOLOGY +DBMS_UMF.ENABLE_SERVICE +DBMS_UMF.GET_NODE_ID_LOCAL +DBMS_UMF.GET_NODE_NAME_LOCAL +DBMS_UMF.GET_TARGET_ID +DBMS_UMF.GET_TOPOLOGY_NAME_LOCAL +DBMS_UMF.QUERY_LINK_INFO +DBMS_UMF.QUERY_NODE_INFO +DBMS_UMF.REGISTER_NODE +DBMS_UMF.SWITCH_DESTINATION +DBMS_UMF.UNCONFIGURE_NODE +DBMS_UMF.UNREGISTER_NODE +DBMS_UMF_INTERNAL. +DBMS_UMF_INTERNAL.ACQUIRE_TOPOLOGY_LOCK +DBMS_UMF_INTERNAL.BUILD_TARGET_XML +DBMS_UMF_INTERNAL.CHECK_BOOLEAN +DBMS_UMF_INTERNAL.CHECK_NODE_ID +DBMS_UMF_INTERNAL.CHECK_NODE_REGISTRATION +DBMS_UMF_INTERNAL.CHECK_NUMBER_NOT_NULL +DBMS_UMF_INTERNAL.CHECK_UMF_NAME +DBMS_UMF_INTERNAL.CHECK_UMF_REMOTE_ENABLED +DBMS_UMF_INTERNAL.GET_GLOBAL_DBLINK_NAME +DBMS_UMF_INTERNAL.GET_SERVICE_ID +DBMS_UMF_INTERNAL.POPULATE_LOCAL_CACHE +DBMS_UMF_INTERNAL.REGISTER_REMOTE +DBMS_UMF_INTERNAL.RELEASE_TOPOLOGY_LOCK +DBMS_UMF_INTERNAL.REMOTE_GLOBAL_DBLINK_NAME +DBMS_UMF_INTERNAL.SYNC_WITH_TARGET +DBMS_UMF_INTERNAL.TOPOLOGY_EXISTS +DBMS_UMF_INTERNAL.TOPOLOGY_LOAD_XML +DBMS_UMF_INTERNAL.TOPOLOGY_NODE_REGISTERED +DBMS_UMF_INTERNAL.UNREGISTER_REMOTE +DBMS_UMF_INTERNAL.UPDATE_SERVICE_INTERNAL +DBMS_UMF_INTERNAL.UPDATE_SERVICE_REMOTE +DBMS_UMF_PROTECTED. +DBMS_UMF_PROTECTED.PSF_ADD_BIND +DBMS_UMF_PROTECTED.PSF_CQCX_FINALIZE +DBMS_UMF_PROTECTED.PSF_CQCX_INIT +DBMS_UMF_PROTECTED.PSF_CREATE_INSTANTIATION_PAT +DBMS_UMF_PROTECTED.PSF_DEFINE_COLUMNS +DBMS_UMF_PROTECTED.PSF_EXECUTE_QUERY +DBMS_UMF_PROTECTED.PSF_GET_DEFINE +DBMS_UMF_PROTECTED.PSF_GET_ENV_FLAG_BY_DBID +DBMS_UMF_PROTECTED.PSF_ICXC_INIT +DBMS_UMF_PROTECTED.PSF_ICXC_SET +DBMS_UMF_PROTECTED.PSF_INIT_BINDS +DBMS_UMF_PROTECTED.PSF_INIT_DEFINES +DBMS_UMF_PROTECTED.PSF_SUBSTITUTE_PAT +DBMS_UMF_PROTECTED.PSF_SUBSTITUTE_PAT2 +DBMS_UMF_PROTECTED.PSF_TRANSFORM_VCHAR +DBMS_UNDO_ADV. +DBMS_UNDO_ADV.BEST_POSSIBLE_RETENTION +DBMS_UNDO_ADV.LONGEST_QUERY +DBMS_UNDO_ADV.RBU_MIGRATION +DBMS_UNDO_ADV.REQUIRED_RETENTION +DBMS_UNDO_ADV.REQUIRED_UNDO_SIZE +DBMS_UNDO_ADV.UNDO_ADVISOR +DBMS_UNDO_ADV.UNDO_AUTOTUNE +DBMS_UNDO_ADV.UNDO_HEALTH +DBMS_UNDO_ADV.UNDO_INFO +DBMS_UTILITY. +DBMS_UTILITY.ACTIVE_INSTANCES +DBMS_UTILITY.ANALYZE_DATABASE +DBMS_UTILITY.ANALYZE_PART_OBJECT +DBMS_UTILITY.ANALYZE_SCHEMA +DBMS_UTILITY.CANONICALIZE +DBMS_UTILITY.COMMA_TO_TABLE +DBMS_UTILITY.COMPILE_SCHEMA +DBMS_UTILITY.CREATE_ALTER_TYPE_ERROR_TABLE +DBMS_UTILITY.CURRENT_INSTANCE +DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK +DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE +DBMS_UTILITY.DB_VERSION +DBMS_UTILITY.EXEC_DDL_STATEMENT +DBMS_UTILITY.EXPAND_SQL_TEXT +DBMS_UTILITY.FORMAT_CALL_STACK +DBMS_UTILITY.FORMAT_ERROR_BACKTRACE +DBMS_UTILITY.FORMAT_ERROR_STACK +DBMS_UTILITY.GET_CPU_TIME +DBMS_UTILITY.GET_DEPENDENCY +DBMS_UTILITY.GET_ENDIANNESS +DBMS_UTILITY.GET_HASH_VALUE +DBMS_UTILITY.GET_PARAMETER_VALUE +DBMS_UTILITY.GET_SQL_HASH +DBMS_UTILITY.GET_TIME +DBMS_UTILITY.GET_TZ_TRANSITIONS +DBMS_UTILITY.INIT_NUMBER_ARRAY +DBMS_UTILITY.INVALIDATE +DBMS_UTILITY.IS_BIT_SET +DBMS_UTILITY.IS_CLUSTER_DATABASE +DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS +DBMS_UTILITY.NAME_RESOLVE +DBMS_UTILITY.NAME_TOKENIZE +DBMS_UTILITY.OLD_CURRENT_SCHEMA +DBMS_UTILITY.OLD_CURRENT_USER +DBMS_UTILITY.PORT_STRING +DBMS_UTILITY.SQLID_TO_SQLHASH +DBMS_UTILITY.TABLE_TO_COMMA +DBMS_UTILITY.VALIDATE +DBMS_UTILITY.WAIT_ON_PENDING_DML +DBMS_WARNING. +DBMS_WARNING.ADD_WARNING_SETTING_CAT +DBMS_WARNING.ADD_WARNING_SETTING_NUM +DBMS_WARNING.GET_CATEGORY +DBMS_WARNING.GET_WARNING_SETTING_CAT +DBMS_WARNING.GET_WARNING_SETTING_NUM +DBMS_WARNING.GET_WARNING_SETTING_STRING +DBMS_WARNING.SET_WARNING_SETTING_STRING +DBMS_WARNING_INTERNAL. +DBMS_WARNING_INTERNAL.SHOW_WARNING_SETTINGS +DBMS_WLM. +DBMS_WLM.ABORT_WLMPLAN +DBMS_WLM.ADD_WLMCLASSIFIERS +DBMS_WLM.CHECK_RM_ENABLE +DBMS_WLM.CHECK_RM_PLAN +DBMS_WLM.CHECK_RM_PLAN_L +DBMS_WLM.CHECK_WLMPLAN +DBMS_WLM.CREATE_WLMPLAN +DBMS_WLM.DELETE_CG_MAPPINGS +DBMS_WLM.DELETE_WLMPLAN +DBMS_WLM.GET_CAPABILITIES +DBMS_WLM.GET_CDB_SETTING +DBMS_WLM.GET_CPU_COUNT +DBMS_WLM.GET_PDB_INFO +DBMS_WLM.GET_PO_MULTIPLIER +DBMS_WLM.SET_CDB_SETTING +DBMS_WLM.SET_CPU_COUNT +DBMS_WLM.SET_DBI_DBMAP +DBMS_WLM.SET_DBI_RM_PLAN +DBMS_WLM.SET_DBMAP +DBMS_WLM.SET_PDB_RM_PLAN +DBMS_WLM.SET_PDB_RM_PLAN_L +DBMS_WLM.SET_PO_MULTIPLIER +DBMS_WLM.SET_RM_PLAN +DBMS_WLM.SUBMIT_WLMPCINFO +DBMS_WLM.SUBMIT_WLMPCS +DBMS_WLM.SUBMIT_WLMPLAN +DBMS_WLM.UPDATE_CG_MAPPINGS +DBMS_WLM.UP_CG_MAPS +DBMS_WLM.UP_CG_MAPS_L +DBMS_WORKLOAD_CAPTURE. +DBMS_WORKLOAD_CAPTURE.ADD_FILTER +DBMS_WORKLOAD_CAPTURE.DECRYPT_CAPTURE +DBMS_WORKLOAD_CAPTURE.DELETE_CAPTURE_INFO +DBMS_WORKLOAD_CAPTURE.DELETE_FILTER +DBMS_WORKLOAD_CAPTURE.ENCRYPT_CAPTURE +DBMS_WORKLOAD_CAPTURE.EXPORT_AWR +DBMS_WORKLOAD_CAPTURE.EXPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_CAPTURE.EXPORT_UC_GRAPH +DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE +DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO +DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_PATH +DBMS_WORKLOAD_CAPTURE.GET_PERF_DATA_EXPORT_STATUS +DBMS_WORKLOAD_CAPTURE.GET_STATE +DBMS_WORKLOAD_CAPTURE.IMPORT_AWR +DBMS_WORKLOAD_CAPTURE.IMPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_CAPTURE.IMPORT_UC_GRAPH +DBMS_WORKLOAD_CAPTURE.REPORT +DBMS_WORKLOAD_CAPTURE.START_BATCH_CAPTURE +DBMS_WORKLOAD_CAPTURE.START_CAPTURE +DBMS_WORKLOAD_CAPTURE.SWITCH_BUCKET +DBMS_WORKLOAD_CAPTURE.USER_CALLS_GRAPH +DBMS_WORKLOAD_CAPTURE_I. +DBMS_WORKLOAD_CAPTURE_I.ADD_FILTER +DBMS_WORKLOAD_CAPTURE_I.DELETE_CAPTURE_INFO +DBMS_WORKLOAD_CAPTURE_I.DELETE_FILTER +DBMS_WORKLOAD_CAPTURE_I.EXPORT_AWR +DBMS_WORKLOAD_CAPTURE_I.EXPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_CAPTURE_I.EXPORT_UC_GRAPH +DBMS_WORKLOAD_CAPTURE_I.FINISH_CAPTURE +DBMS_WORKLOAD_CAPTURE_I.FINISH_CAPTURE_HELP +DBMS_WORKLOAD_CAPTURE_I.GET_CAPTURE_INFO +DBMS_WORKLOAD_CAPTURE_I.GET_CAPTURE_PATH +DBMS_WORKLOAD_CAPTURE_I.GET_PERF_DATA_EXPORT_STATUS +DBMS_WORKLOAD_CAPTURE_I.GET_STATE +DBMS_WORKLOAD_CAPTURE_I.HANDLE_ENCRYPTION +DBMS_WORKLOAD_CAPTURE_I.IMPORT_AWR +DBMS_WORKLOAD_CAPTURE_I.IMPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_CAPTURE_I.IMPORT_UC_GRAPH +DBMS_WORKLOAD_CAPTURE_I.REPORT +DBMS_WORKLOAD_CAPTURE_I.START_BATCH_CAPTURE +DBMS_WORKLOAD_CAPTURE_I.START_CAPTURE +DBMS_WORKLOAD_CAPTURE_I.SWITCH_BUCKET +DBMS_WORKLOAD_REPLAY. +DBMS_WORKLOAD_REPLAY.ADD_CAPTURE +DBMS_WORKLOAD_REPLAY.ADD_FILTER +DBMS_WORKLOAD_REPLAY.ADD_SCHEDULE_ORDERING +DBMS_WORKLOAD_REPLAY.ADJUST_TIMES_TO_SNAP_TIMEZONE +DBMS_WORKLOAD_REPLAY.ASSIGN_GROUP_TO_INSTANCE +DBMS_WORKLOAD_REPLAY.BEGIN_REPLAY_SCHEDULE +DBMS_WORKLOAD_REPLAY.CALIBRATE +DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY +DBMS_WORKLOAD_REPLAY.CLIENT_CONNECT +DBMS_WORKLOAD_REPLAY.CLIENT_GET_REPLAY_SUBDIR +DBMS_WORKLOAD_REPLAY.CLIENT_VITALS +DBMS_WORKLOAD_REPLAY.COMPARE_PERIOD_REPORT +DBMS_WORKLOAD_REPLAY.COMPARE_SQLSET_REPORT +DBMS_WORKLOAD_REPLAY.CREATE_FILTER_SET +DBMS_WORKLOAD_REPLAY.DELETE_ATTRIBUTE +DBMS_WORKLOAD_REPLAY.DELETE_FILTER +DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO +DBMS_WORKLOAD_REPLAY.DIVERGING_STATEMENT_STATUS +DBMS_WORKLOAD_REPLAY.END_REPLAY_SCHEDULE +DBMS_WORKLOAD_REPLAY.EXPORT_AWR +DBMS_WORKLOAD_REPLAY.EXPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_REPLAY.EXPORT_UC_GRAPH +DBMS_WORKLOAD_REPLAY.GENERATE_CAPTURE_SUBSET +DBMS_WORKLOAD_REPLAY.GET_ADVANCED_PARAMETER +DBMS_WORKLOAD_REPLAY.GET_ATTRIBUTE +DBMS_WORKLOAD_REPLAY.GET_CAPTURED_TABLES +DBMS_WORKLOAD_REPLAY.GET_CLOCK +DBMS_WORKLOAD_REPLAY.GET_DIVERGING_STATEMENT +DBMS_WORKLOAD_REPLAY.GET_PERF_DATA_EXPORT_STATUS +DBMS_WORKLOAD_REPLAY.GET_PROCESSING_PATH +DBMS_WORKLOAD_REPLAY.GET_REPLAY_DIRECTORY +DBMS_WORKLOAD_REPLAY.GET_REPLAY_INFO +DBMS_WORKLOAD_REPLAY.GET_REPLAY_PATH +DBMS_WORKLOAD_REPLAY.GET_REPLAY_TIMEOUT +DBMS_WORKLOAD_REPLAY.GET_STATE +DBMS_WORKLOAD_REPLAY.GROUP_WORKLOAD +DBMS_WORKLOAD_REPLAY.IMPORT_AWR +DBMS_WORKLOAD_REPLAY.IMPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_REPLAY.IMPORT_UC_GRAPH +DBMS_WORKLOAD_REPLAY.INITIALIZE_CONSOLIDATED_REPLAY +DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY +DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY_INTERNAL +DBMS_WORKLOAD_REPLAY.IS_REPLAY_PAUSED +DBMS_WORKLOAD_REPLAY.LOAD_DIVERGENCE +DBMS_WORKLOAD_REPLAY.LOAD_LONG_SQLTEXT +DBMS_WORKLOAD_REPLAY.LOAD_TRACKED_COMMITS +DBMS_WORKLOAD_REPLAY.PAUSE_REPLAY +DBMS_WORKLOAD_REPLAY.PERSIST_ATTRIBUTES +DBMS_WORKLOAD_REPLAY.POPULATE_DIVERGENCE +DBMS_WORKLOAD_REPLAY.POPULATE_DIVERGENCE_STATUS +DBMS_WORKLOAD_REPLAY.PREPARE_CONSOLIDATED_REPLAY +DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY +DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE +DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE_COMPLETION +DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE_REMAINING_TIME +DBMS_WORKLOAD_REPLAY.PROCESS_REPLAY_GRAPH +DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION +DBMS_WORKLOAD_REPLAY.REMOVE_CAPTURE +DBMS_WORKLOAD_REPLAY.REMOVE_REPLAY_SCHEDULE +DBMS_WORKLOAD_REPLAY.REMOVE_SCHEDULE_ORDERING +DBMS_WORKLOAD_REPLAY.REPORT +DBMS_WORKLOAD_REPLAY.RESET_ADVANCED_PARAMETERS +DBMS_WORKLOAD_REPLAY.RESUME_REPLAY +DBMS_WORKLOAD_REPLAY.REUSE_REPLAY_FILTER_SET +DBMS_WORKLOAD_REPLAY.SET_ADVANCED_PARAMETER +DBMS_WORKLOAD_REPLAY.SET_ATTRIBUTE +DBMS_WORKLOAD_REPLAY.SET_CONSOLIDATED_DIRECTORY +DBMS_WORKLOAD_REPLAY.SET_REPLAY_DIRECTORY +DBMS_WORKLOAD_REPLAY.SET_REPLAY_TIMEOUT +DBMS_WORKLOAD_REPLAY.SET_SQL_MAPPING +DBMS_WORKLOAD_REPLAY.SET_USER_MAPPING +DBMS_WORKLOAD_REPLAY.START_CONSOLIDATED_REPLAY +DBMS_WORKLOAD_REPLAY.START_REPLAY +DBMS_WORKLOAD_REPLAY.STOP_STS_C +DBMS_WORKLOAD_REPLAY.SYNC_ATTRIBUTES_FROM_FILE +DBMS_WORKLOAD_REPLAY.USER_CALLS_GRAPH +DBMS_WORKLOAD_REPLAY.USE_FILTER_SET +DBMS_WORKLOAD_REPLAY.WORKLOAD_INTELLIGENCE_REPORT +DBMS_WORKLOAD_REPLAY_I. +DBMS_WORKLOAD_REPLAY_I.ADD_CAPTURE +DBMS_WORKLOAD_REPLAY_I.ADD_FILTER +DBMS_WORKLOAD_REPLAY_I.ADD_SCHEDULE_ORDERING +DBMS_WORKLOAD_REPLAY_I.ADJUST_TIMES_TO_SNAP_TIMEZONE +DBMS_WORKLOAD_REPLAY_I.ASSIGN_GROUP_TO_INSTANCE +DBMS_WORKLOAD_REPLAY_I.BEGIN_REPLAY_SCHEDULE +DBMS_WORKLOAD_REPLAY_I.CALIBRATE +DBMS_WORKLOAD_REPLAY_I.CANCEL_REPLAY +DBMS_WORKLOAD_REPLAY_I.CLIENT_CONNECT +DBMS_WORKLOAD_REPLAY_I.CLIENT_GET_REPLAY_SUBDIR +DBMS_WORKLOAD_REPLAY_I.CLIENT_VITALS +DBMS_WORKLOAD_REPLAY_I.COMPARE_PERIOD_REPORT +DBMS_WORKLOAD_REPLAY_I.COMPARE_SQLSET_REPORT +DBMS_WORKLOAD_REPLAY_I.CREATE_FILTER_SET +DBMS_WORKLOAD_REPLAY_I.DELETE_ATTRIBUTE +DBMS_WORKLOAD_REPLAY_I.DELETE_FILTER +DBMS_WORKLOAD_REPLAY_I.DELETE_REPLAY_INFO +DBMS_WORKLOAD_REPLAY_I.DIVERGING_STATEMENT_STATUS +DBMS_WORKLOAD_REPLAY_I.END_REPLAY_SCHEDULE +DBMS_WORKLOAD_REPLAY_I.EXPORT_AWR +DBMS_WORKLOAD_REPLAY_I.EXPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_REPLAY_I.EXPORT_UC_GRAPH +DBMS_WORKLOAD_REPLAY_I.GENERATE_CAPTURE_SUBSET +DBMS_WORKLOAD_REPLAY_I.GET_ADVANCED_PARAMETER +DBMS_WORKLOAD_REPLAY_I.GET_ATTRIBUTE +DBMS_WORKLOAD_REPLAY_I.GET_CAPTURED_TABLES +DBMS_WORKLOAD_REPLAY_I.GET_CLOCK +DBMS_WORKLOAD_REPLAY_I.GET_DIVERGING_STATEMENT +DBMS_WORKLOAD_REPLAY_I.GET_PERF_DATA_EXPORT_STATUS +DBMS_WORKLOAD_REPLAY_I.GET_PROCESSING_PATH +DBMS_WORKLOAD_REPLAY_I.GET_REPLAY_DIRECTORY +DBMS_WORKLOAD_REPLAY_I.GET_REPLAY_INFO +DBMS_WORKLOAD_REPLAY_I.GET_REPLAY_PATH +DBMS_WORKLOAD_REPLAY_I.GET_REPLAY_TIMEOUT +DBMS_WORKLOAD_REPLAY_I.GET_STATE +DBMS_WORKLOAD_REPLAY_I.GROUP_WORKLOAD +DBMS_WORKLOAD_REPLAY_I.IMPORT_AWR +DBMS_WORKLOAD_REPLAY_I.IMPORT_PERFORMANCE_DATA +DBMS_WORKLOAD_REPLAY_I.IMPORT_UC_GRAPH +DBMS_WORKLOAD_REPLAY_I.INITIALIZE_CONSOLIDATED_REPLAY +DBMS_WORKLOAD_REPLAY_I.INITIALIZE_REPLAY +DBMS_WORKLOAD_REPLAY_I.INITIALIZE_REPLAY_INTERNAL +DBMS_WORKLOAD_REPLAY_I.IS_REPLAY_PAUSED +DBMS_WORKLOAD_REPLAY_I.LOAD_DIVERGENCE +DBMS_WORKLOAD_REPLAY_I.LOAD_LONG_SQLTEXT +DBMS_WORKLOAD_REPLAY_I.LOAD_TRACKED_COMMITS +DBMS_WORKLOAD_REPLAY_I.PAUSE_REPLAY +DBMS_WORKLOAD_REPLAY_I.PERSIST_ATTRIBUTES +DBMS_WORKLOAD_REPLAY_I.POPULATE_DIVERGENCE +DBMS_WORKLOAD_REPLAY_I.POPULATE_DIVERGENCE_STATUS +DBMS_WORKLOAD_REPLAY_I.PREPARE_CONSOLIDATED_REPLAY +DBMS_WORKLOAD_REPLAY_I.PREPARE_REPLAY +DBMS_WORKLOAD_REPLAY_I.PROCESS_CAPTURE +DBMS_WORKLOAD_REPLAY_I.PROCESS_CAPTURE_COMPLETION +DBMS_WORKLOAD_REPLAY_I.PROCESS_CAPTURE_REMAINING_TIME +DBMS_WORKLOAD_REPLAY_I.PROCESS_REPLAY_GRAPH +DBMS_WORKLOAD_REPLAY_I.REMAP_CONNECTION +DBMS_WORKLOAD_REPLAY_I.REMOVE_CAPTURE +DBMS_WORKLOAD_REPLAY_I.REMOVE_REPLAY_SCHEDULE +DBMS_WORKLOAD_REPLAY_I.REMOVE_SCHEDULE_ORDERING +DBMS_WORKLOAD_REPLAY_I.REPORT +DBMS_WORKLOAD_REPLAY_I.RESET_ADVANCED_PARAMETERS +DBMS_WORKLOAD_REPLAY_I.RESUME_REPLAY +DBMS_WORKLOAD_REPLAY_I.REUSE_REPLAY_FILTER_SET +DBMS_WORKLOAD_REPLAY_I.SET_ADVANCED_PARAMETER +DBMS_WORKLOAD_REPLAY_I.SET_ATTRIBUTE +DBMS_WORKLOAD_REPLAY_I.SET_CONSOLIDATED_DIRECTORY +DBMS_WORKLOAD_REPLAY_I.SET_REPLAY_DIRECTORY +DBMS_WORKLOAD_REPLAY_I.SET_REPLAY_TIMEOUT +DBMS_WORKLOAD_REPLAY_I.SET_SQL_MAPPING +DBMS_WORKLOAD_REPLAY_I.SET_USER_MAPPING +DBMS_WORKLOAD_REPLAY_I.START_CONSOLIDATED_REPLAY +DBMS_WORKLOAD_REPLAY_I.START_REPLAY +DBMS_WORKLOAD_REPLAY_I.STOP_STS_C +DBMS_WORKLOAD_REPLAY_I.SYNC_ATTRIBUTES_FROM_FILE +DBMS_WORKLOAD_REPLAY_I.USE_FILTER_SET +DBMS_WORKLOAD_REPLAY_I.WORKLOAD_INTELLIGENCE_REPORT +DBMS_WORKLOAD_REPOSITORY. +DBMS_WORKLOAD_REPOSITORY.ADD_COLORED_SQL +DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_ANALYTICS +DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_DIFF_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_DIFF_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_DIFF_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_GLOBAL_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_REPORT +DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.AWR_SET_REPORT_THRESHOLDS +DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_HTML +DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_TEXT +DBMS_WORKLOAD_REPOSITORY.CONTROL_RESTRICTED_SNAPSHOT +DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE +DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE +DBMS_WORKLOAD_REPOSITORY.CREATE_REMOTE_SNAPSHOT +DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT +DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE +DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE +DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE +DBMS_WORKLOAD_REPOSITORY.EXTRACT +DBMS_WORKLOAD_REPOSITORY.GET_AWR_VIEW_NAME_BY_LOCATION +DBMS_WORKLOAD_REPOSITORY.LOAD +DBMS_WORKLOAD_REPOSITORY.LOCAL_AWR_DBID +DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE +DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS +DBMS_WORKLOAD_REPOSITORY.PURGE_SQL_DETAILS +DBMS_WORKLOAD_REPOSITORY.REGISTER_REMOTE_DATABASE +DBMS_WORKLOAD_REPOSITORY.REMOVE_COLORED_SQL +DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE +DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_DETAILS +DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRIC +DBMS_WORKLOAD_REPOSITORY.UNREGISTER_REMOTE_DATABASE +DBMS_WORKLOAD_REPOSITORY.UPDATE_DATAFILE_INFO +DBMS_WORKLOAD_REPOSITORY.UPDATE_OBJECT_INFO +DBMS_WRR_INTERNAL. +DBMS_WRR_INTERNAL.ACQUIRE_WRR_LOCK +DBMS_WRR_INTERNAL.ADD_CAPTURE +DBMS_WRR_INTERNAL.ADD_CAPTURE_BUCKET +DBMS_WRR_INTERNAL.ADD_CAPTURE_STATS +DBMS_WRR_INTERNAL.ADD_FILTER +DBMS_WRR_INTERNAL.ADD_REPLAY +DBMS_WRR_INTERNAL.ADD_REPLAY_STATS +DBMS_WRR_INTERNAL.ARG_MIN +DBMS_WRR_INTERNAL.BITOR +DBMS_WRR_INTERNAL.BOOL_TO_STRING +DBMS_WRR_INTERNAL.BUILD_CAPTURE_INFO_TAG +DBMS_WRR_INTERNAL.CAPTURE_EXPORT_AWR +DBMS_WRR_INTERNAL.CAPTURE_UPDATE_EXP_STATUS +DBMS_WRR_INTERNAL.CHECK_PLSQL_MODE_VALID +DBMS_WRR_INTERNAL.COMPARE_STS +DBMS_WRR_INTERNAL.COPY_FILTERS +DBMS_WRR_INTERNAL.COUNT_FILTERS +DBMS_WRR_INTERNAL.CREATE_DIR_OBJ +DBMS_WRR_INTERNAL.CREATE_DIR_OBJ_TMP +DBMS_WRR_INTERNAL.CREATE_SNAPSHOT +DBMS_WRR_INTERNAL.DBG_TRACE +DBMS_WRR_INTERNAL.DB_DATE +DBMS_WRR_INTERNAL.DELETE_CAPTURE +DBMS_WRR_INTERNAL.DELETE_FILE +DBMS_WRR_INTERNAL.DELETE_FILTER +DBMS_WRR_INTERNAL.DELETE_REPLAY +DBMS_WRR_INTERNAL.DIR_OBJ_EXISTS +DBMS_WRR_INTERNAL.DROP_DIR_OBJ +DBMS_WRR_INTERNAL.DROP_INDEX +DBMS_WRR_INTERNAL.DROP_TABLE +DBMS_WRR_INTERNAL.END_REPLAY_ACTIONS +DBMS_WRR_INTERNAL.EXPORT_REP_EXT_TBL +DBMS_WRR_INTERNAL.EXPORT_STS +DBMS_WRR_INTERNAL.EXPORT_STS_FROM_CAPTURE +DBMS_WRR_INTERNAL.EXPORT_STS_FROM_REPLAY +DBMS_WRR_INTERNAL.EXPORT_UC_GRAPH +DBMS_WRR_INTERNAL.FILE_EXISTS +DBMS_WRR_INTERNAL.FINALIZE_FIRST_PASS +DBMS_WRR_INTERNAL.FINALIZE_STS_CAPTURE +DBMS_WRR_INTERNAL.FORMAT_BYTES +DBMS_WRR_INTERNAL.FORMAT_INTERVAL +DBMS_WRR_INTERNAL.GENERATE_CAPTURE_WID +DBMS_WRR_INTERNAL.GET_ASH_REPORT_REFERENCE +DBMS_WRR_INTERNAL.GET_BOOLEAN_VALUE +DBMS_WRR_INTERNAL.GET_CAPINFO_INTERNAL +DBMS_WRR_INTERNAL.GET_CAPTURE_SIG +DBMS_WRR_INTERNAL.GET_DIR_PATH +DBMS_WRR_INTERNAL.GET_EXPORT_STATUS_I +DBMS_WRR_INTERNAL.GET_FILE +DBMS_WRR_INTERNAL.GET_PLSQL_MODE_INTERNAL +DBMS_WRR_INTERNAL.GET_REPLAY_SIG +DBMS_WRR_INTERNAL.GET_ROW_DIVERGENCE_BCK_HLP +DBMS_WRR_INTERNAL.GET_SNAP_ASH_TIMES +DBMS_WRR_INTERNAL.GET_STS_NAME +DBMS_WRR_INTERNAL.GET_UNIQUE_DBID +DBMS_WRR_INTERNAL.IMPORT_STS +DBMS_WRR_INTERNAL.IMPORT_STS_FROM_CAPTURE +DBMS_WRR_INTERNAL.IMPORT_STS_FROM_REPLAY +DBMS_WRR_INTERNAL.IMPORT_UC_GRAPH +DBMS_WRR_INTERNAL.INIT_CAPTURE_STATS +DBMS_WRR_INTERNAL.INVOKE_ACQUIRE_WRR_LOCK +DBMS_WRR_INTERNAL.INVOKE_CHECK_SQLSET_PRIVS +DBMS_WRR_INTERNAL.INVOKE_DIS_RES_SESS +DBMS_WRR_INTERNAL.INVOKE_GET_FEATURE_BOOL_VALUE +DBMS_WRR_INTERNAL.INVOKE_KGHSFSNEWFILE +DBMS_WRR_INTERNAL.INVOKE_READ_WMD +DBMS_WRR_INTERNAL.INVOKE_RELEASE_WRR_LOCK +DBMS_WRR_INTERNAL.INVOKE_UPDATE_WMD +DBMS_WRR_INTERNAL.IS_CONSOLIDATED_DATABASE +DBMS_WRR_INTERNAL.IS_CONTAINER_CDBROOT +DBMS_WRR_INTERNAL.IS_CONTAINER_PDB +DBMS_WRR_INTERNAL.LIST_TO_TABLE +DBMS_WRR_INTERNAL.LIST_TO_TABLE_INT +DBMS_WRR_INTERNAL.LOAD_WORKLOAD_ATTRIBUTES +DBMS_WRR_INTERNAL.OS_SECONDS +DBMS_WRR_INTERNAL.PROCESS_SQLTEXT +DBMS_WRR_INTERNAL.PUT_FILE +DBMS_WRR_INTERNAL.REPLAY_EXPORT_AWR +DBMS_WRR_INTERNAL.REPLAY_REPORT_INTERNAL +DBMS_WRR_INTERNAL.REPLAY_SUFFIX +DBMS_WRR_INTERNAL.START_STS_CAPTURE +DBMS_WRR_INTERNAL.STOP_SQL_SET_CAPTURE +DBMS_WRR_INTERNAL.TO_DBTZ +DBMS_WRR_INTERNAL.TRUNCATE_TABLE +DBMS_WRR_INTERNAL.UPDATE_CAPTURE_STATS +DBMS_WRR_INTERNAL.UPDATE_PROPS +DBMS_WRR_INTERNAL.VALIDATE_ENCRYPTION_PASSWD +DBMS_WRR_INTERNAL.VALID_DEFAULT_ACTION +DBMS_WRR_INTERNAL.WI_TRANSFORM_ID_TO_STR +DBMS_WRR_PROTECTED. +DBMS_WRR_PROTECTED.CHECK_DIR_ACCESS +DBMS_WRR_PROTECTED.CHECK_RAT_PRIVILEGE +DBMS_WRR_PROTECTED.SET_PDB_ENABLED +DBMS_WRR_REPORT. +DBMS_WRR_REPORT.REPLAY +DBMS_WRR_STATE. +DBMS_XA. +DBMS_XA.DIST_TXN_SYNC +DBMS_XA.XA_COMMIT +DBMS_XA.XA_END +DBMS_XA.XA_FORGET +DBMS_XA.XA_GETLASTOER +DBMS_XA.XA_PREPARE +DBMS_XA.XA_RECOVER +DBMS_XA.XA_ROLLBACK +DBMS_XA.XA_SETTIMEOUT +DBMS_XA.XA_START +DBMS_XA_XID.DBMS_XA_XID +DBMS_XDB. +DBMS_XDB.ACLCHECKPRIVILEGES +DBMS_XDB.ADDHTTPEXPIREMAPPING +DBMS_XDB.ADDMIMEMAPPING +DBMS_XDB.ADDRESOURCE +DBMS_XDB.ADDSCHEMALOCMAPPING +DBMS_XDB.ADDSERVLET +DBMS_XDB.ADDSERVLETMAPPING +DBMS_XDB.ADDSERVLETSECROLE +DBMS_XDB.ADDTOLOCKTOKENLIST +DBMS_XDB.ADDXMLEXTENSION +DBMS_XDB.APPENDRESOURCEMETADATA +DBMS_XDB.CFG_GET +DBMS_XDB.CFG_REFRESH +DBMS_XDB.CFG_UPDATE +DBMS_XDB.CHANGEOWNER +DBMS_XDB.CHANGEPRIVILEGES +DBMS_XDB.CHECKPRIVILEGES +DBMS_XDB.CREATEFOLDER +DBMS_XDB.CREATEOIDPATH +DBMS_XDB.CREATERESOURCE +DBMS_XDB.DELETEFROMLOCKTOKENLIST +DBMS_XDB.DELETEHTTPEXPIREMAPPING +DBMS_XDB.DELETEMIMEMAPPING +DBMS_XDB.DELETERESOURCE +DBMS_XDB.DELETERESOURCEMETADATA +DBMS_XDB.DELETESCHEMALOCMAPPING +DBMS_XDB.DELETESERVLET +DBMS_XDB.DELETESERVLETMAPPING +DBMS_XDB.DELETESERVLETSECROLE +DBMS_XDB.DELETEXMLEXTENSION +DBMS_XDB.EXISTSRESOURCE +DBMS_XDB.GETACLDOCUMENT +DBMS_XDB.GETCONTENTBLOB +DBMS_XDB.GETCONTENTCLOB +DBMS_XDB.GETCONTENTVARCHAR2 +DBMS_XDB.GETCONTENTXMLREF +DBMS_XDB.GETCONTENTXMLTYPE +DBMS_XDB.GETFTPPORT +DBMS_XDB.GETHTTPPORT +DBMS_XDB.GETHTTPREQUESTHEADER +DBMS_XDB.GETLISTENERENDPOINT +DBMS_XDB.GETLOCKTOKEN +DBMS_XDB.GETLOCKTOKENLIST +DBMS_XDB.GETPRIVILEGES +DBMS_XDB.GETRESOID +DBMS_XDB.GETRESOURCE +DBMS_XDB.GETXDB_TABLESPACE +DBMS_XDB.HASBLOBCONTENT +DBMS_XDB.HASCHARCONTENT +DBMS_XDB.HASXMLCONTENT +DBMS_XDB.HASXMLREFERENCE +DBMS_XDB.ISFOLDER +DBMS_XDB.LINK +DBMS_XDB.LOCKDISCOVERY +DBMS_XDB.LOCKRESOURCE +DBMS_XDB.PROCESSLINKS +DBMS_XDB.PURGERESOURCEMETADATA +DBMS_XDB.REFRESHCONTENTSIZE +DBMS_XDB.REFRESHLOCK +DBMS_XDB.RENAMERESOURCE +DBMS_XDB.SETACL +DBMS_XDB.SETFTPPORT +DBMS_XDB.SETHTTPPORT +DBMS_XDB.SETLISTENERENDPOINT +DBMS_XDB.SETLISTENERLOCALACCESS +DBMS_XDB.TOUCHRESOURCE +DBMS_XDB.UNLOCKRESOURCE +DBMS_XDB.UPDATERESOURCEMETADATA +DBMS_XDBNFS. +DBMS_XDBNFS.DUMP_NFSSTATS +DBMS_XDBNFS.NFSFH2RESID +DBMS_XDBNFS.RESET_NFSSTATS +DBMS_XDBNFS.SYNCRESOURCE +DBMS_XDBREPOS. +DBMS_XDBREPOS.CREATEREPOSITORY +DBMS_XDBREPOS.DROPREPOSITORY +DBMS_XDBREPOS.DROP_REPOS +DBMS_XDBREPOS.INSTALL_REPOS +DBMS_XDBREPOS.MOUNTREPOSITORY +DBMS_XDBREPOS.SETCURRENTREPOSITORY +DBMS_XDBREPOS.UNMOUNTREPOSITORY +DBMS_XDBRESOURCE. +DBMS_XDBRESOURCE.FREERESOURCE +DBMS_XDBRESOURCE.GETACL +DBMS_XDBRESOURCE.GETACLDOCFROMRES +DBMS_XDBRESOURCE.GETAUTHOR +DBMS_XDBRESOURCE.GETCHARACTERSET +DBMS_XDBRESOURCE.GETCOMMENT +DBMS_XDBRESOURCE.GETCONTENTBLOB +DBMS_XDBRESOURCE.GETCONTENTCLOB +DBMS_XDBRESOURCE.GETCONTENTREF +DBMS_XDBRESOURCE.GETCONTENTTYPE +DBMS_XDBRESOURCE.GETCONTENTVARCHAR2 +DBMS_XDBRESOURCE.GETCONTENTXML +DBMS_XDBRESOURCE.GETCREATIONDATE +DBMS_XDBRESOURCE.GETCREATOR +DBMS_XDBRESOURCE.GETCUSTOMMETADATA +DBMS_XDBRESOURCE.GETDISPLAYNAME +DBMS_XDBRESOURCE.GETLANGUAGE +DBMS_XDBRESOURCE.GETLASTMODIFIER +DBMS_XDBRESOURCE.GETMODIFICATIONDATE +DBMS_XDBRESOURCE.GETOWNER +DBMS_XDBRESOURCE.GETREFCOUNT +DBMS_XDBRESOURCE.GETVERSIONID +DBMS_XDBRESOURCE.HASACLCHANGED +DBMS_XDBRESOURCE.HASAUTHORCHANGED +DBMS_XDBRESOURCE.HASCHANGED +DBMS_XDBRESOURCE.HASCHARACTERSETCHANGED +DBMS_XDBRESOURCE.HASCOMMENTCHANGED +DBMS_XDBRESOURCE.HASCONTENTCHANGED +DBMS_XDBRESOURCE.HASCONTENTTYPECHANGED +DBMS_XDBRESOURCE.HASCREATIONDATECHANGED +DBMS_XDBRESOURCE.HASCREATORCHANGED +DBMS_XDBRESOURCE.HASCUSTOMMETADATACHANGED +DBMS_XDBRESOURCE.HASDISPLAYNAMECHANGED +DBMS_XDBRESOURCE.HASLANGUAGECHANGED +DBMS_XDBRESOURCE.HASLASTMODIFIERCHANGED +DBMS_XDBRESOURCE.HASMODIFICATIONDATECHANGED +DBMS_XDBRESOURCE.HASOWNERCHANGED +DBMS_XDBRESOURCE.HASREFCOUNTCHANGED +DBMS_XDBRESOURCE.HASVERSIONIDCHANGED +DBMS_XDBRESOURCE.ISFOLDER +DBMS_XDBRESOURCE.ISNULL +DBMS_XDBRESOURCE.MAKEDOCUMENT +DBMS_XDBRESOURCE.SAVE +DBMS_XDBRESOURCE.SETACL +DBMS_XDBRESOURCE.SETAUTHOR +DBMS_XDBRESOURCE.SETCHARACTERSET +DBMS_XDBRESOURCE.SETCOMMENT +DBMS_XDBRESOURCE.SETCONTENT +DBMS_XDBRESOURCE.SETCONTENTTYPE +DBMS_XDBRESOURCE.SETCUSTOMMETADATA +DBMS_XDBRESOURCE.SETDISPLAYNAME +DBMS_XDBRESOURCE.SETLANGUAGE +DBMS_XDBRESOURCE.SETOWNER +DBMS_XDBT. +DBMS_XDBT.AUTOSYNCJOBBYCOUNT +DBMS_XDBT.AUTOSYNCJOBBYTIME +DBMS_XDBT.CONFIGUREAUTOSYNC +DBMS_XDBT.CREATEDATASTOREPREF +DBMS_XDBT.CREATEFILTERPREF +DBMS_XDBT.CREATEINDEX +DBMS_XDBT.CREATELEXERPREF +DBMS_XDBT.CREATEPREFERENCES +DBMS_XDBT.CREATESECTIONGROUPPREF +DBMS_XDBT.CREATESTOPLISTPREF +DBMS_XDBT.CREATESTORAGEPREF +DBMS_XDBT.CREATEWORDLISTPREF +DBMS_XDBT.DROPPREFERENCES +DBMS_XDBT.OPTIMIZEINDEX +DBMS_XDBT.SETSYNCTIMEOUT +DBMS_XDBT.SYNCINDEX +DBMS_XDBT.XDB_DATASTORE_PROC +DBMS_XDBUTIL_INT. +DBMS_XDBUTIL_INT.CLEANSGAFORUPGRADE +DBMS_XDBUTIL_INT.CLEANUP_EXPIRED_NFSCLIENTS +DBMS_XDBUTIL_INT.CREATEACL +DBMS_XDBUTIL_INT.CREATECROSSCONFOLDER +DBMS_XDBUTIL_INT.CREATESYSTEMVIRTUALFOLDER +DBMS_XDBUTIL_INT.FIXACL +DBMS_XDBUTIL_INT.FIXACL_DOWNGRADE +DBMS_XDBUTIL_INT.FLUSHSESSION +DBMS_XDBUTIL_INT.GETNAMESPACE +DBMS_XDBUTIL_INT.GETNEWOID +DBMS_XDBUTIL_INT.GET_TABLESPACE_TAB +DBMS_XDBUTIL_INT.IMPORTSEQUENCE +DBMS_XDBUTIL_INT.INSTANCE_CALLOUT_IMP +DBMS_XDBUTIL_INT.INSTANCE_EXPORT_ACTION +DBMS_XDBUTIL_INT.ISOBJECTGENERATED +DBMS_XDBUTIL_INT.ISTABLEOUTOFLINE +DBMS_XDBUTIL_INT.ISXMLNESTEDTABLE +DBMS_XDBUTIL_INT.LOOKUPSCHEMAOID +DBMS_XDBUTIL_INT.LOOKUPSCHEMAURL +DBMS_XDBUTIL_INT.MIGRATEALLXMLFROM9201 +DBMS_XDBUTIL_INT.NUMTOHEX +DBMS_XDBUTIL_INT.NUMTOHEX2 +DBMS_XDBUTIL_INT.PATCHREPOSITORYRESCONFIGLIST +DBMS_XDBUTIL_INT.RAWTONUM +DBMS_XDBUTIL_INT.RAWTONUM2 +DBMS_XDBUTIL_INT.SETLINKPARENTS +DBMS_XDBUTIL_INT.SETLINKPARENTSNEW +DBMS_XDBUTIL_INT.SYSTEM_INFO_EXP +DBMS_XDBUTIL_INT.USESETLINKPARENTSNEW +DBMS_XDBUTIL_INT.XMLSCHEMADEPENDENCYLEVEL +DBMS_XDBUTIL_INT.XMLSCHEMAGETDEPENDENCYLIST +DBMS_XDBUTIL_INT.XMLSCHEMASTRIPUSERNAME +DBMS_XDBZ. +DBMS_XDBZ.ADD_APPLICATION_PRINCIPAL +DBMS_XDBZ.CHANGE_APPLICATION_MEMBERSHIP +DBMS_XDBZ.DELETE_APPLICATION_PRINCIPAL +DBMS_XDBZ.DISABLE_HIERARCHY +DBMS_XDBZ.ENABLE_HIERARCHY +DBMS_XDBZ.GET_ACLOID +DBMS_XDBZ.GET_USERID +DBMS_XDBZ.IS_HIERARCHY_ENABLED +DBMS_XDBZ.PURGEAPPLICATIONCACHE +DBMS_XDBZ.PURGELDAPCACHE +DBMS_XDBZ.RESET_APPLICATION_PRINCIPAL +DBMS_XDBZ.SET_APPLICATION_PRINCIPAL +DBMS_XDBZ.VALIDATEACL +DBMS_XDBZ.VALIDATEFUSIONACL +DBMS_XDBZ0. +DBMS_XDBZ0.CHECKPRIVRLS_DELETEPF +DBMS_XDBZ0.CHECKPRIVRLS_DELETEPROPF +DBMS_XDBZ0.CHECKPRIVRLS_INSERTPF +DBMS_XDBZ0.CHECKPRIVRLS_SELECTPF +DBMS_XDBZ0.CHECKPRIVRLS_SELECTPROPF +DBMS_XDBZ0.CHECKPRIVRLS_UPDATEPF +DBMS_XDBZ0.CHECKPRIVRLS_UPDATEPROPF +DBMS_XDBZ0.CHECKWORKSPACE_PF +DBMS_XDBZ0.DISABLE_HIERARCHY_INTERNAL +DBMS_XDBZ0.ENABLE_HIERARCHY_INTERNAL +DBMS_XDBZ0.GENERATE_TRGNM +DBMS_XDBZ0.GENERATE_TRGNMDL +DBMS_XDBZ0.GET_USERNAME +DBMS_XDBZ0.GET_VALID_ACL +DBMS_XDBZ0.INITXDBRESCONFIG +DBMS_XDBZ0.INITXDBSECURITY +DBMS_XDBZ0.IS_HIERARCHY_ENABLED_INTERNAL +DBMS_XDBZ0.IS_HIERARCHY_ENABLED_TRIG +DBMS_XDBZ0.MIGRATE_PITRIG +DBMS_XDBZ0.SET_DELTA_CALC_INLINE_TRIGFLAG +DBMS_XDBZ0.TRUNCATE_NAME +DBMS_XDBZ0.UPDATE_TABLE_DEPENDANT_FLAGS +DBMS_XDB_ADMIN. +DBMS_XDB_ADMIN.CREATENONCEKEY +DBMS_XDB_ADMIN.INSTALLDEFAULTWALLET +DBMS_XDB_ADMIN.MOVEXDB_TABLESPACE +DBMS_XDB_ADMIN.REBUILDHIERARCHICALINDEX +DBMS_XDB_CONFIG. +DBMS_XDB_CONFIG.ADDAUTHENTICATIONMAPPING +DBMS_XDB_CONFIG.ADDAUTHENTICATIONMETHOD +DBMS_XDB_CONFIG.ADDDEFAULTTYPEMAPPINGS +DBMS_XDB_CONFIG.ADDHTTPEXPIREMAPPING +DBMS_XDB_CONFIG.ADDMIMEMAPPING +DBMS_XDB_CONFIG.ADDSCHEMALOCMAPPING +DBMS_XDB_CONFIG.ADDSERVLET +DBMS_XDB_CONFIG.ADDSERVLETMAPPING +DBMS_XDB_CONFIG.ADDSERVLETSECROLE +DBMS_XDB_CONFIG.ADDTRUSTMAPPING +DBMS_XDB_CONFIG.ADDTRUSTSCHEME +DBMS_XDB_CONFIG.ADDXMLEXTENSION +DBMS_XDB_CONFIG.CFG_GET +DBMS_XDB_CONFIG.CFG_REFRESH +DBMS_XDB_CONFIG.CFG_UPDATE +DBMS_XDB_CONFIG.CLEARHTTPDIGESTS +DBMS_XDB_CONFIG.DELETEAUTHENTICATIONMAPPING +DBMS_XDB_CONFIG.DELETEAUTHENTICATIONMETHOD +DBMS_XDB_CONFIG.DELETEDEFAULTTYPEMAPPINGS +DBMS_XDB_CONFIG.DELETEHTTPEXPIREMAPPING +DBMS_XDB_CONFIG.DELETEMIMEMAPPING +DBMS_XDB_CONFIG.DELETESCHEMALOCMAPPING +DBMS_XDB_CONFIG.DELETESERVLET +DBMS_XDB_CONFIG.DELETESERVLETMAPPING +DBMS_XDB_CONFIG.DELETESERVLETSECROLE +DBMS_XDB_CONFIG.DELETETRUSTMAPPING +DBMS_XDB_CONFIG.DELETETRUSTSCHEME +DBMS_XDB_CONFIG.DELETEXMLEXTENSION +DBMS_XDB_CONFIG.ENABLECUSTOMAUTHENTICATION +DBMS_XDB_CONFIG.ENABLECUSTOMTRUST +DBMS_XDB_CONFIG.ENABLEDIGESTAUTHENTICATION +DBMS_XDB_CONFIG.GETFTPPORT +DBMS_XDB_CONFIG.GETHTTPCONFIGREALM +DBMS_XDB_CONFIG.GETHTTPPORT +DBMS_XDB_CONFIG.GETHTTPREQUESTHEADER +DBMS_XDB_CONFIG.GETHTTPSPORT +DBMS_XDB_CONFIG.GETLISTENERENDPOINT +DBMS_XDB_CONFIG.GETREMOTEHTTPPORT +DBMS_XDB_CONFIG.GETREMOTEHTTPSPORT +DBMS_XDB_CONFIG.ISGLOBALPORTENABLED +DBMS_XDB_CONFIG.SETDEFAULTTYPEMAPPINGS +DBMS_XDB_CONFIG.SETDYNAMICGROUPSTORE +DBMS_XDB_CONFIG.SETFTPPORT +DBMS_XDB_CONFIG.SETGLOBALPORTENABLED +DBMS_XDB_CONFIG.SETHTTPCONFIGREALM +DBMS_XDB_CONFIG.SETHTTPPORT +DBMS_XDB_CONFIG.SETHTTPSPORT +DBMS_XDB_CONFIG.SETLISTENERENDPOINT +DBMS_XDB_CONFIG.SETLISTENERLOCALACCESS +DBMS_XDB_CONFIG.SETREMOTEHTTPPORT +DBMS_XDB_CONFIG.SETREMOTEHTTPSPORT +DBMS_XDB_CONFIG.USEDPORT +DBMS_XDB_CONSTANTS. +DBMS_XDB_CONSTANTS.ENCODING_DEFAULT +DBMS_XDB_CONSTANTS.ENCODING_ISOLATIN1 +DBMS_XDB_CONSTANTS.ENCODING_UTF8 +DBMS_XDB_CONSTANTS.ENCODING_WIN1252 +DBMS_XDB_CONSTANTS.NAMESPACE_ACL +DBMS_XDB_CONSTANTS.NAMESPACE_ORACLE +DBMS_XDB_CONSTANTS.NAMESPACE_ORACLE_XDB +DBMS_XDB_CONSTANTS.NAMESPACE_RESOURCE +DBMS_XDB_CONSTANTS.NAMESPACE_RESOURCE_CONFIG +DBMS_XDB_CONSTANTS.NAMESPACE_XDBCONFIG +DBMS_XDB_CONSTANTS.NAMESPACE_XDBSCHEMA +DBMS_XDB_CONSTANTS.NAMESPACE_XMLDIFF +DBMS_XDB_CONSTANTS.NAMESPACE_XMLINSTANCE +DBMS_XDB_CONSTANTS.NAMESPACE_XMLSCHEMA +DBMS_XDB_CONSTANTS.NSPREFIX_ACL_ACL +DBMS_XDB_CONSTANTS.NSPREFIX_RESCONFIG_RC +DBMS_XDB_CONSTANTS.NSPREFIX_RESOURCE_R +DBMS_XDB_CONSTANTS.NSPREFIX_XDBCONFIG_CFG +DBMS_XDB_CONSTANTS.NSPREFIX_XDB_XDB +DBMS_XDB_CONSTANTS.NSPREFIX_XMLDIFF_XD +DBMS_XDB_CONSTANTS.NSPREFIX_XMLINSTANCE_XSI +DBMS_XDB_CONSTANTS.NSPREFIX_XMLSCHEMA_XSD +DBMS_XDB_CONSTANTS.SCHEMAELEM_RESCONTENT_BINARY +DBMS_XDB_CONSTANTS.SCHEMAELEM_RESCONTENT_TEXT +DBMS_XDB_CONSTANTS.SCHEMAELEM_RES_ACL +DBMS_XDB_CONSTANTS.SCHEMAURL_ACL +DBMS_XDB_CONSTANTS.SCHEMAURL_RESOURCE +DBMS_XDB_CONSTANTS.SCHEMAURL_XDBCONFIG +DBMS_XDB_CONSTANTS.SCHEMAURL_XDBSCHEMA +DBMS_XDB_CONSTANTS.XDBSCHEMA_PREFIXES +DBMS_XDB_CONSTANTS.XSD_ATTRIBUTE +DBMS_XDB_CONSTANTS.XSD_COMPLEX_TYPE +DBMS_XDB_CONSTANTS.XSD_ELEMENT +DBMS_XDB_CONSTANTS.XSD_GROUP +DBMS_XDB_CONTENT. +DBMS_XDB_CONTENT.CREATEDIR +DBMS_XDB_CONTENT.CREATEFILE +DBMS_XDB_CONTENT.CREATEFILE2 +DBMS_XDB_CONTENT.CREATEFILE3 +DBMS_XDB_CONTENT.DELETEDIR +DBMS_XDB_CONTENT.DELETEFILE +DBMS_XDB_CONTENT.DELETENODE +DBMS_XDB_CONTENT.GETALLPROPERTIES +DBMS_XDB_CONTENT.GETCONTENTBYPATH +DBMS_XDB_CONTENT.GETEVERYTHING +DBMS_XDB_CONTENT.GETPATH +DBMS_XDB_CONTENT.GETPROPERTY +DBMS_XDB_CONTENT.GETTYPE +DBMS_XDB_CONTENT.LIST +DBMS_XDB_CONTENT.RENAMEPATH +DBMS_XDB_PRINT. +DBMS_XDB_PRINT.CLEARPRINTMODE +DBMS_XDB_PRINT.SETPRINTMODE +DBMS_XDB_REPOS. +DBMS_XDB_REPOS.ACLCHECKPRIVILEGES +DBMS_XDB_REPOS.ADDRESOURCE +DBMS_XDB_REPOS.ADDTOLOCKTOKENLIST +DBMS_XDB_REPOS.APPENDRESOURCEMETADATA +DBMS_XDB_REPOS.CHANGEOWNER +DBMS_XDB_REPOS.CHANGEPRIVILEGES +DBMS_XDB_REPOS.CHECKPRIVILEGES +DBMS_XDB_REPOS.CREATEFOLDER +DBMS_XDB_REPOS.CREATEOIDPATH +DBMS_XDB_REPOS.CREATERESOURCE +DBMS_XDB_REPOS.DELETEFROMLOCKTOKENLIST +DBMS_XDB_REPOS.DELETERESOURCE +DBMS_XDB_REPOS.DELETERESOURCEMETADATA +DBMS_XDB_REPOS.EXISTSRESOURCE +DBMS_XDB_REPOS.GETACLDOCUMENT +DBMS_XDB_REPOS.GETCONTENTBLOB +DBMS_XDB_REPOS.GETCONTENTCLOB +DBMS_XDB_REPOS.GETCONTENTVARCHAR2 +DBMS_XDB_REPOS.GETCONTENTXMLREF +DBMS_XDB_REPOS.GETCONTENTXMLTYPE +DBMS_XDB_REPOS.GETLOCKTOKEN +DBMS_XDB_REPOS.GETLOCKTOKENLIST +DBMS_XDB_REPOS.GETPRIVILEGES +DBMS_XDB_REPOS.GETRESOID +DBMS_XDB_REPOS.GETRESOURCE +DBMS_XDB_REPOS.GETXDB_TABLESPACE +DBMS_XDB_REPOS.HASBLOBCONTENT +DBMS_XDB_REPOS.HASCHARCONTENT +DBMS_XDB_REPOS.HASXMLCONTENT +DBMS_XDB_REPOS.HASXMLREFERENCE +DBMS_XDB_REPOS.ISFOLDER +DBMS_XDB_REPOS.LINK +DBMS_XDB_REPOS.LOCKDISCOVERY +DBMS_XDB_REPOS.LOCKRESOURCE +DBMS_XDB_REPOS.PROCESSLINKS +DBMS_XDB_REPOS.PURGERESOURCEMETADATA +DBMS_XDB_REPOS.REFRESHCONTENTSIZE +DBMS_XDB_REPOS.REFRESHLOCK +DBMS_XDB_REPOS.RENAMERESOURCE +DBMS_XDB_REPOS.SETACL +DBMS_XDB_REPOS.TOUCHRESOURCE +DBMS_XDB_REPOS.UNLOCKRESOURCE +DBMS_XDB_REPOS.UPDATERESOURCEMETADATA +DBMS_XDB_UTIL. +DBMS_XDB_UTIL.RAISE_SYSTEM_ERROR +DBMS_XDB_VERSION. +DBMS_XDB_VERSION.CHECKIN +DBMS_XDB_VERSION.CHECKIN_INT +DBMS_XDB_VERSION.CHECKOUT +DBMS_XDB_VERSION.GETCONTENTSBLOBBYRESID +DBMS_XDB_VERSION.GETCONTENTSCLOBBYRESID +DBMS_XDB_VERSION.GETCONTENTSXMLBYRESID +DBMS_XDB_VERSION.GETPREDECESSORS +DBMS_XDB_VERSION.GETPREDSBYRESID +DBMS_XDB_VERSION.GETRESOURCEBYRESID +DBMS_XDB_VERSION.GETSUCCESSORS +DBMS_XDB_VERSION.GETSUCCSBYRESID +DBMS_XDB_VERSION.ISCHECKEDOUT +DBMS_XDB_VERSION.MAKEVERSIONED +DBMS_XDB_VERSION.MAKEVERSIONED_INT +DBMS_XDB_VERSION.UNCHECKOUT +DBMS_XDB_VERSION.UNCHECKOUT_INT +DBMS_XDS. +DBMS_XDS.ALTER_STATIC_ACL_REFRESH +DBMS_XDS.DISABLE_OLAP_POLICY +DBMS_XDS.DISABLE_XDS +DBMS_XDS.DROP_OLAP_POLICY +DBMS_XDS.DROP_XDS +DBMS_XDS.ENABLE_OLAP_POLICY +DBMS_XDS.ENABLE_XDS +DBMS_XDS.PURGE_ACL_REFRESH_HISTORY +DBMS_XDS.SCHEDULE_STATIC_ACL_REFRESH +DBMS_XDS.SET_TRACE_LEVEL +DBMS_XDS.XDS$REFRESH_STATIC_ACL +DBMS_XDS_INT. +DBMS_XDS_INT.ALTER_STATIC_ACL_REFRESH +DBMS_XDS_INT.DISABLE_OLAP_POLICY +DBMS_XDS_INT.DISABLE_XDS +DBMS_XDS_INT.DROP_OLAP_POLICY +DBMS_XDS_INT.DROP_XDS +DBMS_XDS_INT.ENABLE_OLAP_POLICY +DBMS_XDS_INT.ENABLE_XDS +DBMS_XDS_INT.PURGE_ACL_REFRESH_HISTORY +DBMS_XDS_INT.SCHEDULE_STATIC_ACL_REFRESH +DBMS_XDS_INT.SET_TRACE_LEVEL +DBMS_XDS_INT.XDS$REFRESH_STATIC_ACL +DBMS_XEVENT. +DBMS_XEVENT.CLEAR +DBMS_XEVENT.GETAPPLICATIONDATA +DBMS_XEVENT.GETCHILDOID +DBMS_XEVENT.GETCURRENTUSER +DBMS_XEVENT.GETDAVOWNER +DBMS_XEVENT.GETDAVTOKEN +DBMS_XEVENT.GETDEPTH +DBMS_XEVENT.GETEVENT +DBMS_XEVENT.GETEXPIRY +DBMS_XEVENT.GETFIRST +DBMS_XEVENT.GETHANDLERLIST +DBMS_XEVENT.GETINTERFACE +DBMS_XEVENT.GETLANGUAGE +DBMS_XEVENT.GETLINK +DBMS_XEVENT.GETLINKNAME +DBMS_XEVENT.GETLOCK +DBMS_XEVENT.GETLOCKMODE +DBMS_XEVENT.GETLOCKTYPE +DBMS_XEVENT.GETNAME +DBMS_XEVENT.GETNEXT +DBMS_XEVENT.GETNFSNODEID +DBMS_XEVENT.GETOLDRESOURCE +DBMS_XEVENT.GETOPENACCESSMODE +DBMS_XEVENT.GETOPENDENYMODE +DBMS_XEVENT.GETOUTPUTSTREAM +DBMS_XEVENT.GETPARAMETER +DBMS_XEVENT.GETPARENT +DBMS_XEVENT.GETPARENTNAME +DBMS_XEVENT.GETPARENTOID +DBMS_XEVENT.GETPARENTPATH +DBMS_XEVENT.GETPATH +DBMS_XEVENT.GETRESOURCE +DBMS_XEVENT.GETSCHEMA +DBMS_XEVENT.GETSOURCE +DBMS_XEVENT.GETUPDATEBYTECOUNT +DBMS_XEVENT.GETUPDATEBYTEOFFSET +DBMS_XEVENT.GETXDBEVENT +DBMS_XEVENT.ISNULL +DBMS_XEVENT.REMOVE +DBMS_XEVENT.SETRENDERPATH +DBMS_XEVENT.SETRENDERSTREAM +DBMS_XLSB. +DBMS_XLSB.DELETERESOURCE +DBMS_XLSB.DELNAMELOCKS +DBMS_XLSB.INSERTRESOURCE +DBMS_XLSB.INSERTRESOURCENXOB +DBMS_XLSB.INSERTRESOURCENXOBCLOB +DBMS_XLSB.INSERTRESOURCEREF +DBMS_XLSB.INSERTTOHTABLE +DBMS_XLSB.INSERTTOUSERHTAB +DBMS_XLSB.LINKRESOURCE +DBMS_XLSB.SAVEACL +DBMS_XLSB.SETREFCOUNT +DBMS_XLSB.TOUCHOID +DBMS_XLSB.UNLINKRESOURCE +DBMS_XLSB.UPDATECONTENTXOB +DBMS_XLSB.UPDATELOCKS +DBMS_XLSB.UPDATENAMELOCKS +DBMS_XLSB.UPDATERESOURCE +DBMS_XLSB.UPDATERESOURCEREF +DBMS_XLSB.UPDATEROOTINFO +DBMS_XMLDOM. +DBMS_XMLDOM.ADOPTNODE +DBMS_XMLDOM.APPENDCHILD +DBMS_XMLDOM.APPENDDATA +DBMS_XMLDOM.BINARYINPUTSTREAMAVAILABLE +DBMS_XMLDOM.CHARACTERINPUTSTREAMAVAILABLE +DBMS_XMLDOM.CLONENODE +DBMS_XMLDOM.CLOSEBINARYINPUTSTREAM +DBMS_XMLDOM.CLOSEBINARYOUTPUTSTREAM +DBMS_XMLDOM.CLOSECHARACTERINPUTSTREAM +DBMS_XMLDOM.CLOSECHARACTEROUTPUTSTREAM +DBMS_XMLDOM.CREATEATTRIBUTE +DBMS_XMLDOM.CREATECDATASECTION +DBMS_XMLDOM.CREATECOMMENT +DBMS_XMLDOM.CREATEDOCUMENT +DBMS_XMLDOM.CREATEDOCUMENTFRAGMENT +DBMS_XMLDOM.CREATEELEMENT +DBMS_XMLDOM.CREATEENTITYREFERENCE +DBMS_XMLDOM.CREATEPROCESSINGINSTRUCTION +DBMS_XMLDOM.CREATETEXTNODE +DBMS_XMLDOM.CREATEXMLBINARYINPUTSTREAM +DBMS_XMLDOM.CREATEXMLBINARYOUTPUTSTREAM +DBMS_XMLDOM.CREATEXMLCHARACTERINPUTSTREAM +DBMS_XMLDOM.CREATEXMLCHARACTEROUTPUTSTREAM +DBMS_XMLDOM.DELETEDATA +DBMS_XMLDOM.FINDENTITY +DBMS_XMLDOM.FINDNOTATION +DBMS_XMLDOM.FLUSHBINARYOUTPUTSTREAM +DBMS_XMLDOM.FLUSHCHARACTEROUTPUTSTREAM +DBMS_XMLDOM.FREEDOCFRAG +DBMS_XMLDOM.FREEDOCTYPE +DBMS_XMLDOM.FREEDOCUMENT +DBMS_XMLDOM.FREEELEMENT +DBMS_XMLDOM.FREENODE +DBMS_XMLDOM.FREENODELIST +DBMS_XMLDOM.GETATTRIBUTE +DBMS_XMLDOM.GETATTRIBUTENODE +DBMS_XMLDOM.GETATTRIBUTES +DBMS_XMLDOM.GETCHARSET +DBMS_XMLDOM.GETCHILDNODES +DBMS_XMLDOM.GETCHILDRENBYTAGNAME +DBMS_XMLDOM.GETDATA +DBMS_XMLDOM.GETDOCTYPE +DBMS_XMLDOM.GETDOCUMENTELEMENT +DBMS_XMLDOM.GETELEMENTSBYTAGNAME +DBMS_XMLDOM.GETENTITIES +DBMS_XMLDOM.GETEXPANDEDNAME +DBMS_XMLDOM.GETFIRSTCHILD +DBMS_XMLDOM.GETIMPLEMENTATION +DBMS_XMLDOM.GETLASTCHILD +DBMS_XMLDOM.GETLENGTH +DBMS_XMLDOM.GETLOCALNAME +DBMS_XMLDOM.GETNAME +DBMS_XMLDOM.GETNAMEDITEM +DBMS_XMLDOM.GETNAMESPACE +DBMS_XMLDOM.GETNEXTSIBLING +DBMS_XMLDOM.GETNODEFROMFRAGMENT +DBMS_XMLDOM.GETNODENAME +DBMS_XMLDOM.GETNODETYPE +DBMS_XMLDOM.GETNODEVALUE +DBMS_XMLDOM.GETNODEVALUEASBINARYSTREAM +DBMS_XMLDOM.GETNODEVALUEASCHARACTERSTREAM +DBMS_XMLDOM.GETNOTATIONNAME +DBMS_XMLDOM.GETNOTATIONS +DBMS_XMLDOM.GETOWNERDOCUMENT +DBMS_XMLDOM.GETOWNERELEMENT +DBMS_XMLDOM.GETPARENTNODE +DBMS_XMLDOM.GETPREFIX +DBMS_XMLDOM.GETPREVIOUSSIBLING +DBMS_XMLDOM.GETPUBLICID +DBMS_XMLDOM.GETQUALIFIEDNAME +DBMS_XMLDOM.GETSCHEMANODE +DBMS_XMLDOM.GETSPECIFIED +DBMS_XMLDOM.GETSTANDALONE +DBMS_XMLDOM.GETSYSTEMID +DBMS_XMLDOM.GETTAGNAME +DBMS_XMLDOM.GETTARGET +DBMS_XMLDOM.GETVALUE +DBMS_XMLDOM.GETVERSION +DBMS_XMLDOM.GETXMLTYPE +DBMS_XMLDOM.HASATTRIBUTE +DBMS_XMLDOM.HASATTRIBUTES +DBMS_XMLDOM.HASCHILDNODES +DBMS_XMLDOM.HASFEATURE +DBMS_XMLDOM.IMPORTNODE +DBMS_XMLDOM.INSERTBEFORE +DBMS_XMLDOM.INSERTDATA +DBMS_XMLDOM.ISNULL +DBMS_XMLDOM.ITEM +DBMS_XMLDOM.MAKEATTR +DBMS_XMLDOM.MAKECDATASECTION +DBMS_XMLDOM.MAKECHARACTERDATA +DBMS_XMLDOM.MAKECOMMENT +DBMS_XMLDOM.MAKEDOCUMENT +DBMS_XMLDOM.MAKEDOCUMENTFRAGMENT +DBMS_XMLDOM.MAKEDOCUMENTTYPE +DBMS_XMLDOM.MAKEELEMENT +DBMS_XMLDOM.MAKEENTITY +DBMS_XMLDOM.MAKEENTITYREFERENCE +DBMS_XMLDOM.MAKENODE +DBMS_XMLDOM.MAKENOTATION +DBMS_XMLDOM.MAKEPROCESSINGINSTRUCTION +DBMS_XMLDOM.MAKETEXT +DBMS_XMLDOM.NEWDOMDOCUMENT +DBMS_XMLDOM.NORMALIZE +DBMS_XMLDOM.READBINARYINPUTSTREAM +DBMS_XMLDOM.READBYTESFROMBIS1 +DBMS_XMLDOM.READCHARACTERINPUTSTREAM +DBMS_XMLDOM.REMOVEATTRIBUTE +DBMS_XMLDOM.REMOVEATTRIBUTENODE +DBMS_XMLDOM.REMOVECHILD +DBMS_XMLDOM.REMOVENAMEDITEM +DBMS_XMLDOM.REPLACECHILD +DBMS_XMLDOM.REPLACEDATA +DBMS_XMLDOM.RESOLVENAMESPACEPREFIX +DBMS_XMLDOM.SETATTRIBUTE +DBMS_XMLDOM.SETATTRIBUTENODE +DBMS_XMLDOM.SETCHARSET +DBMS_XMLDOM.SETDATA +DBMS_XMLDOM.SETDOCTYPE +DBMS_XMLDOM.SETNAMEDITEM +DBMS_XMLDOM.SETNODEVALUE +DBMS_XMLDOM.SETNODEVALUEASBINARYSTREAM +DBMS_XMLDOM.SETNODEVALUEASCHARACTERSTREAM +DBMS_XMLDOM.SETNODEVALUEASDEFERREDBFILE +DBMS_XMLDOM.SETNODEVALUEASDEFERREDBLOB +DBMS_XMLDOM.SETNODEVALUEASDEFERREDCLOB +DBMS_XMLDOM.SETPREFIX +DBMS_XMLDOM.SETSTANDALONE +DBMS_XMLDOM.SETVALUE +DBMS_XMLDOM.SETVERSION +DBMS_XMLDOM.SPLITTEXT +DBMS_XMLDOM.STREAMISNULL +DBMS_XMLDOM.SUBSTRINGDATA +DBMS_XMLDOM.USEBINARYSTREAM +DBMS_XMLDOM.WRITEBINARYOUTPUTSTREAM +DBMS_XMLDOM.WRITECHARACTEROUTPUTSTREAM +DBMS_XMLDOM.WRITETOBUFFER +DBMS_XMLDOM.WRITETOCLOB +DBMS_XMLDOM.WRITETOFILE +DBMS_XMLDOM.XMLD_USEBINSTREAM +DBMS_XMLDOM_ICD. +DBMS_XMLDOM_ICD.GETCHILDNODES +DBMS_XMLDOM_ICD.GETFIRSTCHILD +DBMS_XMLDOM_ICD.GETNODEVALUE +DBMS_XMLDOM_ICD.GETTAGNAME +DBMS_XMLDOM_ICD.ITEM +DBMS_XMLDOM_ICD.MAKEELEMENT +DBMS_XMLGEN. +DBMS_XMLGEN.CLEARBINDVALUES +DBMS_XMLGEN.CLOSECONTEXT +DBMS_XMLGEN.CONVERT +DBMS_XMLGEN.GETNUMROWSPROCESSED +DBMS_XMLGEN.GETXML +DBMS_XMLGEN.GETXMLTYPE +DBMS_XMLGEN.NEWCONTEXT +DBMS_XMLGEN.NEWCONTEXTFROMHIERARCHY +DBMS_XMLGEN.REMOVEXSLTPARAM +DBMS_XMLGEN.RESTARTQUERY +DBMS_XMLGEN.SETBINDVALUE +DBMS_XMLGEN.SETCHECKINVALIDCHARS +DBMS_XMLGEN.SETCONVERTSPECIALCHARS +DBMS_XMLGEN.SETINDENTATIONWIDTH +DBMS_XMLGEN.SETMAXROWS +DBMS_XMLGEN.SETNULLHANDLING +DBMS_XMLGEN.SETPRETTYPRINTING +DBMS_XMLGEN.SETROWSETTAG +DBMS_XMLGEN.SETROWTAG +DBMS_XMLGEN.SETSKIPROWS +DBMS_XMLGEN.SETXSLT +DBMS_XMLGEN.SETXSLTPARAM +DBMS_XMLGEN.USEITEMTAGSFORCOLL +DBMS_XMLGEN.USENULLATTRIBUTEINDICATOR +DBMS_XMLINDEX. +DBMS_XMLINDEX.CREATEDATEINDEX +DBMS_XMLINDEX.CREATENUMBERINDEX +DBMS_XMLINDEX.DROPPARAMETER +DBMS_XMLINDEX.GETPARAMETER +DBMS_XMLINDEX.MODIFYPARAMETER +DBMS_XMLINDEX.PROCESS_PENDING +DBMS_XMLINDEX.REGISTERPARAMETER +DBMS_XMLINDEX.SYNCINDEX +DBMS_XMLINDEX0. +DBMS_XMLINDEX0.CREATEDATEINDEX +DBMS_XMLINDEX0.CREATENUMBERINDEX +DBMS_XMLINDEX0.GETPARAMETERNAME +DBMS_XMLINDEX0.RELOAD_SXI_LEAF +DBMS_XMLPARSER. +DBMS_XMLPARSER.FREEPARSER +DBMS_XMLPARSER.GETBASEDIR +DBMS_XMLPARSER.GETDOCTYPE +DBMS_XMLPARSER.GETDOCUMENT +DBMS_XMLPARSER.GETERRORLOG +DBMS_XMLPARSER.GETRELEASEVERSION +DBMS_XMLPARSER.GETVALIDATIONMODE +DBMS_XMLPARSER.NEWPARSER +DBMS_XMLPARSER.PARSE +DBMS_XMLPARSER.PARSEBUFFER +DBMS_XMLPARSER.PARSECLOB +DBMS_XMLPARSER.PARSEDTD +DBMS_XMLPARSER.PARSEDTDBUFFER +DBMS_XMLPARSER.PARSEDTDCLOB +DBMS_XMLPARSER.RETAINCDATASECTION +DBMS_XMLPARSER.SETBASEDIR +DBMS_XMLPARSER.SETDOCTYPE +DBMS_XMLPARSER.SETERRORLOG +DBMS_XMLPARSER.SETPRESERVEWHITESPACE +DBMS_XMLPARSER.SETVALIDATIONMODE +DBMS_XMLPARSER.SHOWWARNINGS +DBMS_XMLPARSER.WRITEERRORS +DBMS_XMLQUERY. +DBMS_XMLQUERY.CLEARBINDVALUES +DBMS_XMLQUERY.CLOSECONTEXT +DBMS_XMLQUERY.GETDTD +DBMS_XMLQUERY.GETEXCEPTIONCONTENT +DBMS_XMLQUERY.GETNUMROWSPROCESSED +DBMS_XMLQUERY.GETVERSION +DBMS_XMLQUERY.GETXML +DBMS_XMLQUERY.NEWCONTEXT +DBMS_XMLQUERY.PROPAGATEORIGINALEXCEPTION +DBMS_XMLQUERY.P_GETDTD +DBMS_XMLQUERY.P_GETXML +DBMS_XMLQUERY.P_PROPORIGEXC +DBMS_XMLQUERY.P_SETDATAHEADER +DBMS_XMLQUERY.P_SETENCODINGTAG +DBMS_XMLQUERY.P_SETMETAHEADER +DBMS_XMLQUERY.P_SETRAISEEXCEPTION +DBMS_XMLQUERY.P_SETRAISENOROWSEXC +DBMS_XMLQUERY.P_SETSQLTOXMLNAMEESC +DBMS_XMLQUERY.P_SETSTRICTLEGALXMLCHARCHECK +DBMS_XMLQUERY.P_SETSTYLESHEETHEADER +DBMS_XMLQUERY.P_SETXSLT +DBMS_XMLQUERY.P_USENULLATTRIND +DBMS_XMLQUERY.P_USETYPEFORCOLLELEMTAG +DBMS_XMLQUERY.REMOVEXSLTPARAM +DBMS_XMLQUERY.RESETRESULTSET +DBMS_XMLQUERY.SETBINDVALUE +DBMS_XMLQUERY.SETCOLLIDATTRNAME +DBMS_XMLQUERY.SETDATAHEADER +DBMS_XMLQUERY.SETDATEFORMAT +DBMS_XMLQUERY.SETENCODINGTAG +DBMS_XMLQUERY.SETERRORTAG +DBMS_XMLQUERY.SETMAXROWS +DBMS_XMLQUERY.SETMETAHEADER +DBMS_XMLQUERY.SETRAISEEXCEPTION +DBMS_XMLQUERY.SETRAISENOROWSEXCEPTION +DBMS_XMLQUERY.SETROWIDATTRNAME +DBMS_XMLQUERY.SETROWIDATTRVALUE +DBMS_XMLQUERY.SETROWSETTAG +DBMS_XMLQUERY.SETROWTAG +DBMS_XMLQUERY.SETSKIPROWS +DBMS_XMLQUERY.SETSQLTOXMLNAMEESCAPING +DBMS_XMLQUERY.SETSTRICTLEGALXMLCHARCHECK +DBMS_XMLQUERY.SETSTYLESHEETHEADER +DBMS_XMLQUERY.SETTAGCASE +DBMS_XMLQUERY.SETXSLT +DBMS_XMLQUERY.SETXSLTPARAM +DBMS_XMLQUERY.USENULLATTRIBUTEINDICATOR +DBMS_XMLQUERY.USETYPEFORCOLLELEMTAG +DBMS_XMLSAVE. +DBMS_XMLSAVE.CLEARKEYCOLUMNLIST +DBMS_XMLSAVE.CLEARUPDATECOLUMNLIST +DBMS_XMLSAVE.CLOSECONTEXT +DBMS_XMLSAVE.DELETEXML +DBMS_XMLSAVE.GETEXCEPTIONCONTENT +DBMS_XMLSAVE.INSERTXML +DBMS_XMLSAVE.NEWCONTEXT +DBMS_XMLSAVE.PROPAGATEORIGINALEXCEPTION +DBMS_XMLSAVE.P_PROPAGATEORIGINALEXCEPTION +DBMS_XMLSAVE.P_SETPRESERVEWHITESPACE +DBMS_XMLSAVE.P_SETSQLTOXMLNAMEESC +DBMS_XMLSAVE.P_SETXSLT +DBMS_XMLSAVE.P_USEDBDATES +DBMS_XMLSAVE.REMOVEXSLTPARAM +DBMS_XMLSAVE.SETBATCHSIZE +DBMS_XMLSAVE.SETCOMMITBATCH +DBMS_XMLSAVE.SETDATEFORMAT +DBMS_XMLSAVE.SETIGNORECASE +DBMS_XMLSAVE.SETKEYCOLUMN +DBMS_XMLSAVE.SETPRESERVEWHITESPACE +DBMS_XMLSAVE.SETROWTAG +DBMS_XMLSAVE.SETSQLTOXMLNAMEESCAPING +DBMS_XMLSAVE.SETUPDATECOLUMN +DBMS_XMLSAVE.SETXSLT +DBMS_XMLSAVE.SETXSLTPARAM +DBMS_XMLSAVE.UPDATEXML +DBMS_XMLSAVE.USEDBDATES +DBMS_XMLSCHEMA. +DBMS_XMLSCHEMA.COMPILESCHEMA +DBMS_XMLSCHEMA.CONVERTTODATE +DBMS_XMLSCHEMA.CONVERTTOTS +DBMS_XMLSCHEMA.CONVERTTOTSWITHTZ +DBMS_XMLSCHEMA.COPYEVOLVE +DBMS_XMLSCHEMA.DELETESCHEMA +DBMS_XMLSCHEMA.GENERATEBEAN +DBMS_XMLSCHEMA.GENERATESCHEMA +DBMS_XMLSCHEMA.GENERATESCHEMAS +DBMS_XMLSCHEMA.GETSCHEMAELEMENTNAME +DBMS_XMLSCHEMA.INPLACEEVOLVE +DBMS_XMLSCHEMA.PURGESCHEMA +DBMS_XMLSCHEMA.REGISTERSCHEMA +DBMS_XMLSCHEMA.REGISTERURI +DBMS_XMLSCHEMA_ANNOTATE. +DBMS_XMLSCHEMA_ANNOTATE.ADDXDBNAMESPACE +DBMS_XMLSCHEMA_ANNOTATE.DISABLEDEFAULTTABLECREATION +DBMS_XMLSCHEMA_ANNOTATE.DISABLEMAINTAINDOM +DBMS_XMLSCHEMA_ANNOTATE.ENABLEDEFAULTTABLECREATION +DBMS_XMLSCHEMA_ANNOTATE.ENABLEMAINTAINDOM +DBMS_XMLSCHEMA_ANNOTATE.GETSCHEMAANNOTATIONS +DBMS_XMLSCHEMA_ANNOTATE.PRINTWARNINGS +DBMS_XMLSCHEMA_ANNOTATE.REMOVEANYSTORAGE +DBMS_XMLSCHEMA_ANNOTATE.REMOVEDEFAULTTABLE +DBMS_XMLSCHEMA_ANNOTATE.REMOVEMAINTAINDOM +DBMS_XMLSCHEMA_ANNOTATE.REMOVEOUTOFLINE +DBMS_XMLSCHEMA_ANNOTATE.REMOVESQLCOLLTYPE +DBMS_XMLSCHEMA_ANNOTATE.REMOVESQLNAME +DBMS_XMLSCHEMA_ANNOTATE.REMOVESQLTYPE +DBMS_XMLSCHEMA_ANNOTATE.REMOVESQLTYPEMAPPING +DBMS_XMLSCHEMA_ANNOTATE.REMOVETABLEPROPS +DBMS_XMLSCHEMA_ANNOTATE.REMOVETIMESTAMPWITHTIMEZONE +DBMS_XMLSCHEMA_ANNOTATE.SETANYSTORAGE +DBMS_XMLSCHEMA_ANNOTATE.SETDEFAULTTABLE +DBMS_XMLSCHEMA_ANNOTATE.SETOUTOFLINE +DBMS_XMLSCHEMA_ANNOTATE.SETSCHEMAANNOTATIONS +DBMS_XMLSCHEMA_ANNOTATE.SETSQLCOLLTYPE +DBMS_XMLSCHEMA_ANNOTATE.SETSQLNAME +DBMS_XMLSCHEMA_ANNOTATE.SETSQLTYPE +DBMS_XMLSCHEMA_ANNOTATE.SETSQLTYPEMAPPING +DBMS_XMLSCHEMA_ANNOTATE.SETTABLEPROPS +DBMS_XMLSCHEMA_ANNOTATE.SETTIMESTAMPWITHTIMEZONE +DBMS_XMLSCHEMA_INT. +DBMS_XMLSCHEMA_INT.ADDDOCID +DBMS_XMLSCHEMA_INT.CHECKUSERDEPENDENTS +DBMS_XMLSCHEMA_INT.COMPILESCHEMA +DBMS_XMLSCHEMA_INT.COPYEVOLVE +DBMS_XMLSCHEMA_INT.CREATENSBXML +DBMS_XMLSCHEMA_INT.DELETESCHEMA +DBMS_XMLSCHEMA_INT.GENERATEBEAN +DBMS_XMLSCHEMA_INT.GENERATESCHEMA +DBMS_XMLSCHEMA_INT.GENERATESCHEMAS +DBMS_XMLSCHEMA_INT.HASDOCID +DBMS_XMLSCHEMA_INT.INPLACEEVOLVE +DBMS_XMLSCHEMA_INT.REGISTERSCHEMA +DBMS_XMLSCHEMA_INT.XDB$OID2INTNAME +DBMS_XMLSCHEMA_LSB. +DBMS_XMLSCHEMA_LSB.COMPILESCHEMA +DBMS_XMLSCHEMA_LSB.COPYEVOLVE +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_BLOB +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_CLOB +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_OID +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_STR +DBMS_XMLSCHEMA_LSB.REGISTERSCHEMA_XML +DBMS_XMLSTORAGE_MANAGE. +DBMS_XMLSTORAGE_MANAGE.DISABLEINDEXESANDCONSTRAINTS +DBMS_XMLSTORAGE_MANAGE.ENABLEINDEXESANDCONSTRAINTS +DBMS_XMLSTORAGE_MANAGE.EXCHANGEPOSTPROC +DBMS_XMLSTORAGE_MANAGE.EXCHANGEPREPROC +DBMS_XMLSTORAGE_MANAGE.GETSIDXDEFFROMVIEW +DBMS_XMLSTORAGE_MANAGE.GETTYPEDDL +DBMS_XMLSTORAGE_MANAGE.INDEXXMLREFERENCES +DBMS_XMLSTORAGE_MANAGE.REFPARTITIONEXCHANGEIN +DBMS_XMLSTORAGE_MANAGE.REFPARTITIONEXCHANGEOUT +DBMS_XMLSTORAGE_MANAGE.RENAMECOLLECTIONTABLE +DBMS_XMLSTORAGE_MANAGE.SCOPEXMLREFERENCES +DBMS_XMLSTORAGE_MANAGE.XPATH2TABCOLMAPPING +DBMS_XMLSTORE. +DBMS_XMLSTORE.CLEARKEYCOLUMNLIST +DBMS_XMLSTORE.CLEARUPDATECOLUMNLIST +DBMS_XMLSTORE.CLOSECONTEXT +DBMS_XMLSTORE.DELETEXML +DBMS_XMLSTORE.INSERTXML +DBMS_XMLSTORE.NEWCONTEXT +DBMS_XMLSTORE.SETKEYCOLUMN +DBMS_XMLSTORE.SETPRESERVEWHITESPACE +DBMS_XMLSTORE.SETROWTAG +DBMS_XMLSTORE.SETUPDATECOLUMN +DBMS_XMLSTORE.UPDATEXML +DBMS_XMLTRANSLATIONS. +DBMS_XMLTRANSLATIONS.DISABLETRANSLATION +DBMS_XMLTRANSLATIONS.ENABLETRANSLATION +DBMS_XMLTRANSLATIONS.EXTRACTXLIFF +DBMS_XMLTRANSLATIONS.GETBASEDOCUMENT +DBMS_XMLTRANSLATIONS.MERGEXLIFF +DBMS_XMLTRANSLATIONS.SETSOURCELANG +DBMS_XMLTRANSLATIONS.TRANSLATEXML +DBMS_XMLTRANSLATIONS.UPDATETRANSLATION +DBMS_XPLAN. +DBMS_XPLAN.BUILD_PLAN_XML +DBMS_XPLAN.DIFF_PLAN +DBMS_XPLAN.DIFF_PLAN_AWR +DBMS_XPLAN.DIFF_PLAN_CURSOR +DBMS_XPLAN.DIFF_PLAN_OUTLINE +DBMS_XPLAN.DIFF_PLAN_SQL_BASELINE +DBMS_XPLAN.DISPLAY +DBMS_XPLAN.DISPLAY_AWR +DBMS_XPLAN.DISPLAY_CURSOR +DBMS_XPLAN.DISPLAY_PLAN +DBMS_XPLAN.DISPLAY_SQLSET +DBMS_XPLAN.DISPLAY_SQL_PATCH_PLAN +DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE +DBMS_XPLAN.DISPLAY_SQL_PROFILE_PLAN +DBMS_XPLAN.DISPLAY_WORKLOAD_REPOSITORY +DBMS_XPLAN.FORMAT_NUMBER +DBMS_XPLAN.FORMAT_NUMBER2 +DBMS_XPLAN.FORMAT_SIZE +DBMS_XPLAN.FORMAT_SIZE2 +DBMS_XPLAN.FORMAT_TIME_S +DBMS_XPLAN.GET_CURSOR_ROWS +DBMS_XPLAN.GET_PLANDIFF_REPORT_XML +DBMS_XPLAN.GET_PLAN_ROWS +DBMS_XPLAN.I_DISPLAY_CURSOR +DBMS_XPLAN.I_DISPLAY_SMB_PLAN +DBMS_XPLAN.PREPARE_PLAN_XML_QUERY +DBMS_XPLAN.PREPARE_RECORDS +DBMS_XPLAN.VALIDATE_FORMAT +DBMS_XQUERY. +DBMS_XQUERY.EVAL +DBMS_XQUERYINT. +DBMS_XQUERYINT.BIND +DBMS_XQUERYINT.BINDWITHTYPE +DBMS_XQUERYINT.BINDXML +DBMS_XQUERYINT.CLOSEHDL +DBMS_XQUERYINT.EXEC +DBMS_XQUERYINT.EXECALL +DBMS_XQUERYINT.EXECALLCMN +DBMS_XQUERYINT.EXECALLXCLB +DBMS_XQUERYINT.EXECALLXCLB_EXISTS +DBMS_XQUERYINT.EXECALL_EXISTS +DBMS_XQUERYINT.EXECQUERY +DBMS_XQUERYINT.EXECUTE +DBMS_XQUERYINT.EXECUTECMN +DBMS_XQUERYINT.EXECUTEXCLB +DBMS_XQUERYINT.EXEC_EXISTS +DBMS_XQUERYINT.FETCHALL +DBMS_XQUERYINT.FETCHONE +DBMS_XQUERYINT.GETXQUERYX +DBMS_XQUERYINT.GETXQUERYXXCLB +DBMS_XQUERYINT.PREPARE +DBMS_XQUERYINT.PREPAREXCLB +DBMS_XRWMV. +DBMS_XRWMV.CLEANUP_3GL +DBMS_XRWMV.XPLNMV_3GLA +DBMS_XRWMV.XPLNMV_3GLCA +DBMS_XRWMV.XPLNMV_3GLCT +DBMS_XRWMV.XPLNMV_3GLT +DBMS_XRWMV.XPLNRW_3GLA +DBMS_XRWMV.XPLNRW_3GLCA +DBMS_XRWMV.XPLNRW_3GLCT +DBMS_XRWMV.XPLNRW_3GLT +DBMS_XRWMV.XPLNRW_EM_3GLT +DBMS_XSLPROCESSOR. +DBMS_XSLPROCESSOR.CLOB2FILE +DBMS_XSLPROCESSOR.FREEPROCESSOR +DBMS_XSLPROCESSOR.FREESTYLESHEET +DBMS_XSLPROCESSOR.NEWPROCESSOR +DBMS_XSLPROCESSOR.NEWSTYLESHEET +DBMS_XSLPROCESSOR.PROCESSXSL +DBMS_XSLPROCESSOR.READ2CLOB +DBMS_XSLPROCESSOR.REMOVEPARAM +DBMS_XSLPROCESSOR.RESETPARAMS +DBMS_XSLPROCESSOR.SELECTNODES +DBMS_XSLPROCESSOR.SELECTSINGLENODE +DBMS_XSLPROCESSOR.SETERRORLOG +DBMS_XSLPROCESSOR.SETPARAM +DBMS_XSLPROCESSOR.SHOWWARNINGS +DBMS_XSLPROCESSOR.TRANSFORMNODE +DBMS_XSLPROCESSOR.VALUEOF +DBMS_XSTREAM_ADM. +DBMS_XSTREAM_ADM.ADD_COLUMN +DBMS_XSTREAM_ADM.ADD_GLOBAL_PROPAGATION_RULES +DBMS_XSTREAM_ADM.ADD_GLOBAL_RULES +DBMS_XSTREAM_ADM.ADD_OUTBOUND +DBMS_XSTREAM_ADM.ADD_SCHEMA_PROPAGATION_RULES +DBMS_XSTREAM_ADM.ADD_SCHEMA_RULES +DBMS_XSTREAM_ADM.ADD_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_ADM.ADD_SUBSET_PROPAGATION_RULES +DBMS_XSTREAM_ADM.ADD_SUBSET_RULES +DBMS_XSTREAM_ADM.ADD_TABLE_PROPAGATION_RULES +DBMS_XSTREAM_ADM.ADD_TABLE_RULES +DBMS_XSTREAM_ADM.ALTER_INBOUND +DBMS_XSTREAM_ADM.ALTER_OUTBOUND +DBMS_XSTREAM_ADM.COMPARE_POSITION +DBMS_XSTREAM_ADM.CONVERT_POSITION +DBMS_XSTREAM_ADM.CREATE_INBOUND +DBMS_XSTREAM_ADM.CREATE_OUTBOUND +DBMS_XSTREAM_ADM.DELETE_COLUMN +DBMS_XSTREAM_ADM.DELETE_REPLICATION_EVENTS +DBMS_XSTREAM_ADM.DROP_INBOUND +DBMS_XSTREAM_ADM.DROP_OUTBOUND +DBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM.GET_IS_XSTREAM +DBMS_XSTREAM_ADM.GET_MESSAGE_TRACKING +DBMS_XSTREAM_ADM.GET_TAG +DBMS_XSTREAM_ADM.IS_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM.KEEP_COLUMNS +DBMS_XSTREAM_ADM.MERGE_STREAMS +DBMS_XSTREAM_ADM.MERGE_STREAMS_JOB +DBMS_XSTREAM_ADM.PURGE_SOURCE_CATALOG +DBMS_XSTREAM_ADM.RECOVER_OPERATION +DBMS_XSTREAM_ADM.REMOVE_QUEUE +DBMS_XSTREAM_ADM.REMOVE_RULE +DBMS_XSTREAM_ADM.REMOVE_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_ADM.REMOVE_XSTREAM_CONFIGURATION +DBMS_XSTREAM_ADM.RENAME_COLUMN +DBMS_XSTREAM_ADM.RENAME_SCHEMA +DBMS_XSTREAM_ADM.RENAME_TABLE +DBMS_XSTREAM_ADM.SET_MESSAGE_TRACKING +DBMS_XSTREAM_ADM.SET_PARAMETER +DBMS_XSTREAM_ADM.SET_TAG +DBMS_XSTREAM_ADM.SET_UP_QUEUE +DBMS_XSTREAM_ADM.SPLIT_STREAMS +DBMS_XSTREAM_ADM.START_OUTBOUND +DBMS_XSTREAM_ADM.STOP_OUTBOUND +DBMS_XSTREAM_ADM_INTERNAL. +DBMS_XSTREAM_ADM_INTERNAL.ADD_CONTAINER_RULE +DBMS_XSTREAM_ADM_INTERNAL.ADD_GOLDENGATE_PRIVILEGE +DBMS_XSTREAM_ADM_INTERNAL.CONVERT_POSITION_INTERNAL +DBMS_XSTREAM_ADM_INTERNAL.DELETE_REPLICATION_EVENTS +DBMS_XSTREAM_ADM_INTERNAL.GET_OPTIONAL_PRIVILEGES +DBMS_XSTREAM_ADM_INTERNAL.INS_XSERVER +DBMS_XSTREAM_ADM_INTERNAL.POPULATE_SCRIPT_ARRAY +DBMS_XSTREAM_ADM_INTERNAL.REMOVE_CONTAINER_RULE +DBMS_XSTREAM_ADM_INTERNAL.REMOVE_CONTAINER_RULE_BY_ID +DBMS_XSTREAM_ADM_INTERNAL.REMOVE_GOLDENGATE_PRIVILEGE +DBMS_XSTREAM_ADM_INTERNAL.UPDATE_GOLDENGATE_PRIVILEGE +DBMS_XSTREAM_ADM_INTERNAL.UPDATE_XSERVER_CONNECT_USER +DBMS_XSTREAM_ADM_UTL. +DBMS_XSTREAM_ADM_UTL.ADD_XSTREAM_ADMIN_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.ALTER_OUTBOUND +DBMS_XSTREAM_ADM_UTL.APPLY_EXISTS +DBMS_XSTREAM_ADM_UTL.CHECK_SVR_NAME +DBMS_XSTREAM_ADM_UTL.CHECK_SVR_TYPE +DBMS_XSTREAM_ADM_UTL.CLEAN_APPLY_SPILL +DBMS_XSTREAM_ADM_UTL.CONVERT_SCN_TO_POS +DBMS_XSTREAM_ADM_UTL.CREATE_XOUT_CAPTURE +DBMS_XSTREAM_ADM_UTL.DEL_GEN_RULE +DBMS_XSTREAM_ADM_UTL.DEL_SUBSET_RULES +DBMS_XSTREAM_ADM_UTL.DEL_XSERVER +DBMS_XSTREAM_ADM_UTL.DROP_GEN_RULE +DBMS_XSTREAM_ADM_UTL.DROP_OUTBOUND +DBMS_XSTREAM_ADM_UTL.DROP_OUTBOUND_RULES +DBMS_XSTREAM_ADM_UTL.ENABLE_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM_UTL.GET_CAP_N_QUEUE +DBMS_XSTREAM_ADM_UTL.GET_LCR_CONTENT +DBMS_XSTREAM_ADM_UTL.GET_LOCAL_CAPTURE +DBMS_XSTREAM_ADM_UTL.GET_OUTBOUND_SRCDB +DBMS_XSTREAM_ADM_UTL.GET_OUTBOUND_SRCROOT +DBMS_XSTREAM_ADM_UTL.GET_PROCEDURE_RULES +DBMS_XSTREAM_ADM_UTL.GET_STREAMS_RULES +DBMS_XSTREAM_ADM_UTL.GRANT_CONNECT_USER_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.HAS_TABLE_RULE +DBMS_XSTREAM_ADM_UTL.INS_GEN_OBJ +DBMS_XSTREAM_ADM_UTL.INS_SUBSET_RULES +DBMS_XSTREAM_ADM_UTL.IS_GG_XSTREAM_FOR_STREAMS +DBMS_XSTREAM_ADM_UTL.IS_SYSGEN_OBJ +DBMS_XSTREAM_ADM_UTL.IS_UNCOMMITTED_XOUT +DBMS_XSTREAM_ADM_UTL.NUM_SUBSCRIBERS +DBMS_XSTREAM_ADM_UTL.REMOVE_GEN_RULE +DBMS_XSTREAM_ADM_UTL.REMOVE_XSTREAM_ADMIN_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.SET_APPLY_STARTSCN +DBMS_XSTREAM_ADM_UTL.SET_CAPTURE_STARTSCN +DBMS_XSTREAM_ADM_UTL.SET_CHECKPOINT_SCNS +DBMS_XSTREAM_ADM_UTL.SET_OUTBOUND_STARTSCN +DBMS_XSTREAM_ADM_UTL.START_OUTBOUND +DBMS_XSTREAM_ADM_UTL.STOP_OUTBOUND +DBMS_XSTREAM_ADM_UTL.UPDATE_XSTREAM_ADMIN_PRIVILEGE +DBMS_XSTREAM_ADM_UTL.UPD_XSERVER +DBMS_XSTREAM_ADM_UTL.UPD_XSERVER_CAPINFO +DBMS_XSTREAM_ADM_UTL.VALID_SUBSET_RULES +DBMS_XSTREAM_AUTH. +DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH.GRANT_REMOTE_ADMIN_ACCESS +DBMS_XSTREAM_AUTH.REVOKE_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH.REVOKE_REMOTE_ADMIN_ACCESS +DBMS_XSTREAM_AUTH_IVK. +DBMS_XSTREAM_AUTH_IVK.CONSTRUCT_SQL_T +DBMS_XSTREAM_AUTH_IVK.GRANT_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH_IVK.GRANT_ADMIN_PRIVILEGE_INT +DBMS_XSTREAM_AUTH_IVK.GRANT_ADMIN_PRIVILEGE_PDBS +DBMS_XSTREAM_AUTH_IVK.REVOKE_ADMIN_PRIVILEGE +DBMS_XSTREAM_AUTH_IVK.REVOKE_ADMIN_PRIVILEGE_INT +DBMS_XSTREAM_AUTH_IVK.REVOKE_ADMIN_PRIVILEGE_PDBS +DBMS_XSTREAM_GG. +DBMS_XSTREAM_GG.DISABLE_TDUP_WORKSPACE +DBMS_XSTREAM_GG.ENABLE_TDUP_WORKSPACE +DBMS_XSTREAM_GG.GET_GG_NO_STMT_BUF +DBMS_XSTREAM_GG.GET_GG_NO_WS_FOR_DEF_CONS +DBMS_XSTREAM_GG.GET_GG_SESSION +DBMS_XSTREAM_GG.GET_GG_SESSION_FLAGS +DBMS_XSTREAM_GG.GET_GG_XML_SCHEMA +DBMS_XSTREAM_GG.IS_CHARSET_COMP_FOR_MINING +DBMS_XSTREAM_GG.IS_CTAS_NO_DML_AT_SESSION +DBMS_XSTREAM_GG.IS_FOO_TRIGGER_FIRE_AT_SESSION +DBMS_XSTREAM_GG.IS_TDUP_WORKSPACE_ENABLED +DBMS_XSTREAM_GG.SET_CTAS_SESSION_CONTEXT +DBMS_XSTREAM_GG.SET_FOO_TRIGGER_SESSION_CONTXT +DBMS_XSTREAM_GG.SET_GG_NO_STMT_BUF +DBMS_XSTREAM_GG.SET_GG_NO_WS_FOR_DEF_CONS +DBMS_XSTREAM_GG.SET_GG_SESSION +DBMS_XSTREAM_GG.SET_GG_SESSION_FLAGS +DBMS_XSTREAM_GG.SET_GG_XML_SCHEMA +DBMS_XSTREAM_GG.SET_SESSION_ACTION_GG +DBMS_XSTREAM_GG.UNSET_SESSION_ACTION_GG +DBMS_XSTREAM_GG_ADM. +DBMS_XSTREAM_GG_ADM.ADD_COLUMN +DBMS_XSTREAM_GG_ADM.ADD_CONTAINER_RULE +DBMS_XSTREAM_GG_ADM.ADD_GLOBAL_PROPAGATION_RULES +DBMS_XSTREAM_GG_ADM.ADD_GLOBAL_RULES +DBMS_XSTREAM_GG_ADM.ADD_OUTBOUND +DBMS_XSTREAM_GG_ADM.ADD_PROCEDURE_RULE +DBMS_XSTREAM_GG_ADM.ADD_SCHEMA_PROPAGATION_RULES +DBMS_XSTREAM_GG_ADM.ADD_SCHEMA_RULES +DBMS_XSTREAM_GG_ADM.ADD_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_GG_ADM.ADD_SUBSET_PROPAGATION_RULES +DBMS_XSTREAM_GG_ADM.ADD_SUBSET_RULES +DBMS_XSTREAM_GG_ADM.ADD_TABLE_PROPAGATION_RULES +DBMS_XSTREAM_GG_ADM.ADD_TABLE_RULES +DBMS_XSTREAM_GG_ADM.ALTER_INBOUND +DBMS_XSTREAM_GG_ADM.ALTER_OUTBOUND +DBMS_XSTREAM_GG_ADM.BUILD_PDBSET_DICTIONARY +DBMS_XSTREAM_GG_ADM.CREATE_CAPTURE +DBMS_XSTREAM_GG_ADM.CREATE_INBOUND +DBMS_XSTREAM_GG_ADM.CREATE_OUTBOUND +DBMS_XSTREAM_GG_ADM.DELETE_COLUMN +DBMS_XSTREAM_GG_ADM.DELETE_REPLICATION_EVENTS +DBMS_XSTREAM_GG_ADM.DROP_INBOUND +DBMS_XSTREAM_GG_ADM.DROP_OUTBOUND +DBMS_XSTREAM_GG_ADM.GET_LCR_CONTENT +DBMS_XSTREAM_GG_ADM.GET_MDH_FOR_PDBNAME_SCN +DBMS_XSTREAM_GG_ADM.GET_MESSAGE_TRACKING +DBMS_XSTREAM_GG_ADM.GET_PDBNAME_FOR_MDH +DBMS_XSTREAM_GG_ADM.GET_PDB_INFO +DBMS_XSTREAM_GG_ADM.GET_TAG +DBMS_XSTREAM_GG_ADM.HANDLE_COLLISIONS +DBMS_XSTREAM_GG_ADM.KEEP_COLUMNS +DBMS_XSTREAM_GG_ADM.MERGE_STREAMS +DBMS_XSTREAM_GG_ADM.MERGE_STREAMS_JOB +DBMS_XSTREAM_GG_ADM.POPULATE_APPLY_PROGRESS +DBMS_XSTREAM_GG_ADM.PURGE_CDR_INFO +DBMS_XSTREAM_GG_ADM.PURGE_SOURCE_CATALOG +DBMS_XSTREAM_GG_ADM.RECOVER_OPERATION +DBMS_XSTREAM_GG_ADM.REMOVE_CONTAINER_RULE +DBMS_XSTREAM_GG_ADM.REMOVE_CONTAINER_RULE_BY_ID +DBMS_XSTREAM_GG_ADM.REMOVE_DBNAME_MAPPING +DBMS_XSTREAM_GG_ADM.REMOVE_QUEUE +DBMS_XSTREAM_GG_ADM.REMOVE_RULE +DBMS_XSTREAM_GG_ADM.REMOVE_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_GG_ADM.REMOVE_XSTREAM_CONFIGURATION +DBMS_XSTREAM_GG_ADM.RENAME_COLUMN +DBMS_XSTREAM_GG_ADM.RENAME_SCHEMA +DBMS_XSTREAM_GG_ADM.RENAME_TABLE +DBMS_XSTREAM_GG_ADM.RESET_CONFIGURATION +DBMS_XSTREAM_GG_ADM.SET_CHECKPOINT_SCNS +DBMS_XSTREAM_GG_ADM.SET_DML_CONFLICT_HANDLER +DBMS_XSTREAM_GG_ADM.SET_MESSAGE_TRACKING +DBMS_XSTREAM_GG_ADM.SET_PARAMETER +DBMS_XSTREAM_GG_ADM.SET_REPERROR_HANDLER +DBMS_XSTREAM_GG_ADM.SET_TAG +DBMS_XSTREAM_GG_ADM.SET_UP_QUEUE +DBMS_XSTREAM_GG_ADM.SPLIT_STREAMS +DBMS_XSTREAM_GG_ADM.START_OUTBOUND +DBMS_XSTREAM_GG_ADM.STOP_OUTBOUND +DBMS_XSTREAM_GG_ADM.UPDATE_ERROR_TXN +DBMS_XSTREAM_GG_INTERNAL. +DBMS_XSTREAM_GG_INTERNAL.BUILD_PDBSET_DICTIONARY +DBMS_XSTREAM_GG_INTERNAL.DISABLE_TDUP_WRKSPC_INT +DBMS_XSTREAM_GG_INTERNAL.ENABLE_TDUP_WORKSPACE_INT +DBMS_XSTREAM_GG_INTERNAL.GET_GG_SESS_FLAGS_INT +DBMS_XSTREAM_GG_INTERNAL.GET_MDH_FOR_PDBNAME_SCN +DBMS_XSTREAM_GG_INTERNAL.GET_PDBNAME_FOR_MDH +DBMS_XSTREAM_GG_INTERNAL.GET_PDB_INFO +DBMS_XSTREAM_GG_INTERNAL.INIT_WFIT_N_SYNCH_VARS +DBMS_XSTREAM_GG_INTERNAL.IS_CHARSET_COMP_FOR_MINING +DBMS_XSTREAM_GG_INTERNAL.IS_CTAS_NO_DML_SESS_INT +DBMS_XSTREAM_GG_INTERNAL.IS_FOO_TRIG_FIRE_AT_SESS_INT +DBMS_XSTREAM_GG_INTERNAL.IS_TDUP_WRKSPC_ENABLED_INT +DBMS_XSTREAM_GG_INTERNAL.PURGE_CDR_INFO_INTERNAL +DBMS_XSTREAM_GG_INTERNAL.RESTORE_VARIABLES +DBMS_XSTREAM_GG_INTERNAL.SET_CTAS_SESS_CTX_INT +DBMS_XSTREAM_GG_INTERNAL.SET_FOO_TRIGGER_CONTXT_INT +DBMS_XSTREAM_GG_INTERNAL.SET_GG_SESS_FLAGS_INT +DBMS_XSTREAM_GG_INTERNAL.SET_SESSION_ACTION +DBMS_XSTREAM_GG_INTERNAL.UNSET_SESSION_ACTION +DBMS_XSTREAM_GG_INTERNAL.UPDATE_ERROR_TXN +DBMS_XSTREAM_UTL_IVK. +DBMS_XSTREAM_UTL_IVK.ADD_OUTBOUND +DBMS_XSTREAM_UTL_IVK.ADD_SUBSET_OUTBOUND_RULES +DBMS_XSTREAM_UTL_IVK.ALTER_INBOUND +DBMS_XSTREAM_UTL_IVK.ALTER_OUTBOUND +DBMS_XSTREAM_UTL_IVK.COMMA_TO_TABLE_INT +DBMS_XSTREAM_UTL_IVK.CREATE_INBOUND +DBMS_XSTREAM_UTL_IVK.CREATE_OUTBOUND +DBMS_XSTREAM_UTL_IVK.DROP_INBOUND +DBMS_XSTREAM_UTL_IVK.STR_LENGTH_CK +DBMS_XSTREAM_UTL_IVK.VALIDATE_SRCDB_INPUT +DBMS_XS_FIDM. +DBMS_XS_FIDM.DBMS_XS_FIDM_DELETE +DBMS_XS_FIDM.DBMS_XS_FIDM_INSERT +DBMS_XS_FIDM.DBMS_XS_FIDM_UPDATE +DBMS_XS_MTCACHE. +DBMS_XS_MTCACHE.GET_RETENTION_TIME +DBMS_XS_MTCACHE.SET_RETENTION_TIME +DBMS_XS_NSATTR.DBMS_XS_NSATTR +DBMS_XS_PRINCIPALS. +DBMS_XS_PRINCIPALS.SET_PASSWORD +DBMS_XS_PRINCIPALS.SET_VERIFIER +DBMS_XS_SESSIONS. +DBMS_XS_SESSIONS.ADD_GLOBAL_CALLBACK +DBMS_XS_SESSIONS.ASSIGN_USER +DBMS_XS_SESSIONS.ATTACH_SESSION +DBMS_XS_SESSIONS.CREATE_ATTRIBUTE +DBMS_XS_SESSIONS.CREATE_NAMESPACE +DBMS_XS_SESSIONS.CREATE_SESSION +DBMS_XS_SESSIONS.DELETE_ATTRIBUTE +DBMS_XS_SESSIONS.DELETE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS.DELETE_NAMESPACE +DBMS_XS_SESSIONS.DESTROY_SESSION +DBMS_XS_SESSIONS.DETACH_SESSION +DBMS_XS_SESSIONS.DISABLE_ROLE +DBMS_XS_SESSIONS.ENABLE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS.ENABLE_ROLE +DBMS_XS_SESSIONS.GET_ATTRIBUTE +DBMS_XS_SESSIONS.GET_SESSIONID_FROM_COOKIE +DBMS_XS_SESSIONS.REAUTH_SESSION +DBMS_XS_SESSIONS.RESET_ATTRIBUTE +DBMS_XS_SESSIONS.SAVE_SESSION +DBMS_XS_SESSIONS.SET_ATTRIBUTE +DBMS_XS_SESSIONS.SET_INACTIVITY_TIMEOUT +DBMS_XS_SESSIONS.SET_SESSION_COOKIE +DBMS_XS_SESSIONS.SWITCH_USER +DBMS_XS_SESSIONS_FFI. +DBMS_XS_SESSIONS_FFI.ADD_GLOBAL_CALLBACK +DBMS_XS_SESSIONS_FFI.ASSIGN_USER +DBMS_XS_SESSIONS_FFI.ATTACH_SESSION +DBMS_XS_SESSIONS_FFI.CREATE_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.CREATE_NAMESPACE +DBMS_XS_SESSIONS_FFI.CREATE_SESSION +DBMS_XS_SESSIONS_FFI.DELETE_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.DELETE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS_FFI.DELETE_NAMESPACE +DBMS_XS_SESSIONS_FFI.DESTROY_SESSION +DBMS_XS_SESSIONS_FFI.DETACH_SESSION +DBMS_XS_SESSIONS_FFI.DISABLE_ROLE +DBMS_XS_SESSIONS_FFI.ENABLE_GLOBAL_CALLBACK +DBMS_XS_SESSIONS_FFI.ENABLE_ROLE +DBMS_XS_SESSIONS_FFI.GET_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.GET_SESSIONID_FROM_COOKIE +DBMS_XS_SESSIONS_FFI.REAUTH_SESSION +DBMS_XS_SESSIONS_FFI.RESET_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.SAVE_SESSION +DBMS_XS_SESSIONS_FFI.SET_ATTRIBUTE +DBMS_XS_SESSIONS_FFI.SET_INACTIVITY_TIMEOUT +DBMS_XS_SESSIONS_FFI.SET_SESSION_COOKIE +DBMS_XS_SESSIONS_FFI.SWITCH_USER +DBMS_XS_SIDP. +DBMS_XS_SIDP.DODHEXCHANGE +DBMS_XS_SIDP.FIXDHKEYSIZE +DBMS_XS_SYSTEM. +DBMS_XS_SYSTEM.BLOCK_PRINCIPAL_CHANGES +DBMS_XS_SYSTEM.CHECK_XSCALLBACK +DBMS_XS_SYSTEM.CHECK_XSPROVISION +DBMS_XS_SYSTEM.SET_XS_ACL_RESULT_SIZE +DBMS_XS_SYSTEM_FFI. +DBMS_XS_SYSTEM_FFI.BLOCK_PRINCIPAL_CHANGES +DBMS_XS_SYSTEM_FFI.CHECK_XSCALLBACK +DBMS_XS_SYSTEM_FFI.CHECK_XSPROVISION +DBMS_XS_SYSTEM_FFI.SET_XS_ACL_RESULT_SIZE +DBMS_ZHELP. +DBMS_ZHELP.GET_OBJECT_GRANTS +DBMS_ZHELP.GET_SYSPRIV_GRANTS +DBMS_ZHELP_IR. +DBMS_ZHELP_IR.CHECK_SYS_PRIV +DBNAME +DBOP_EXEC_ID +DBOP_NAME +DBREPLAY_CALL_COUNTER +DBREPLAY_FILE_ID +DBTIME +DBTIMEPERCALL +DBTIMEPERSEC +DBTIME_IN_WAIT +DBTIME_TOTAL +DBUN +DBUNAME +DBURITYPE.CREATEURI +DBURITYPE.DBURITYPE +DBURITYPE.GETBLOB +DBURITYPE.GETCLOB +DBURITYPE.GETCONTENTTYPE +DBURITYPE.GETEXTERNALURL +DBURITYPE.GETURL +DBURITYPE.GETXML +DBUSER_OWNER +DBVERSION +DB_BLOCK_CHANGE +DB_BLOCK_CHANGES +DB_BLOCK_CHANGES_DELTA +DB_BLOCK_CHANGES_TOTAL +DB_BLOCK_GETS +DB_CHARACTER_SET +DB_CREATED +DB_DATA +DB_DBID +DB_DOMAIN +DB_ID +DB_INCARNATION# +DB_LINK +DB_LINK_OWNER +DB_LOCATION +DB_NAME +DB_RANK +DB_SESSION_ID +DB_SID +DB_STATUS +DB_TIME +DB_TXN_SCN +DB_UNIQUE_NAME +DB_USER +DB_USERNAME +DB_VERSION +DB_VERSION_STRING +DB_VERSION_TIME +DDL_ATTRIBUTE +DDL_HANDLER +DDL_NO_INVALIDATE +DDL_TXT +DD_TIME +DEAD_IN_CLEANUP +DEAD_TIME +DEBUGINFO +DECLARATIVE_TYPE +DECORRELATE +DEDUPLICATION +DEFAULT +DEFAULTED +DEFAULT_ACTION +DEFAULT_AGGR +DEFAULT_ANYDATA_VALUE +DEFAULT_ATTR +DEFAULT_BUILD_SPEC +DEFAULT_COLLATION +DEFAULT_DIRECTORY +DEFAULT_DIRECTORY_NAME +DEFAULT_DIRECTORY_OWNER +DEFAULT_ENABLED +DEFAULT_HIERARCHY_NAME +DEFAULT_LENGTH +DEFAULT_MEASURE +DEFAULT_ON_NULL +DEFAULT_OPTION +DEFAULT_ROLE +DEFAULT_TABLE +DEFAULT_TABLESPACE +DEFAULT_VALUE +DEFAULT_WEIGHT +DEFERRABLE +DEFERRED +DEFERRED_DROP +DEFERRED_WINDOW_NAME +DEFINE_VARS +DEFVAL +DEF_BUFFER_POOL +DEF_CACHE +DEF_CELLMEMORY +DEF_CELL_FLASH_CACHE +DEF_CHUNK +DEF_COMPRESS +DEF_COMPRESSION +DEF_COMPRESS_FOR +DEF_CPU_COST +DEF_DEDUPLICATE +DEF_ENCRYPT +DEF_FLASH_CACHE +DEF_FREELISTS +DEF_FREELIST_GROUPS +DEF_INDEXING +DEF_INDEX_COMPRESSION +DEF_INITIAL_EXTENT +DEF_INI_TRANS +DEF_INMEMORY +DEF_INMEMORY_COMPRESSION +DEF_INMEMORY_DISTRIBUTE +DEF_INMEMORY_DUPLICATE +DEF_INMEMORY_PRIORITY +DEF_INMEMORY_SERVICE +DEF_INMEMORY_SERVICE_NAME +DEF_IN_ROW +DEF_IO_COST +DEF_LOGGING +DEF_MAX_EXTENTS +DEF_MAX_SIZE +DEF_MAX_TRANS +DEF_MINRET +DEF_MIN_EXTENTS +DEF_NET_COST +DEF_NEXT_EXTENT +DEF_PARAMETERS +DEF_PCTVERSION +DEF_PCT_FREE +DEF_PCT_INCREASE +DEF_PCT_USED +DEF_READ_ONLY +DEF_RETENTION +DEF_SECUREFILE +DEF_SEGMENT_CREATION +DEF_SELECTIVITY +DEF_SUBPARTITION_COUNT +DEF_TABLESPACE_NAME +DEF_TAB_COMPRESSION +DEGREE +DEL +DELAY_CSECS +DELAY_MINS +DELEGATE_OPTION +DELETABLE +DELETED +DELETED_ROWS +DELETES +DELETE_COLLISIONS +DELETE_COUNT +DELETE_ENTRIES. +DELETE_FREQ +DELETE_RULE +DELIVERED_COMMITTED_TXN +DELIVERED_TXN +DELIVERY_MODE +DELIVERY_TIME +DELTA +DELTASCN_BASE +DELTASCN_WRAP +DELTAUPD_TIME +DELTA_ADDR +DELTA_ALLOC +DELTA_APPLICATION_WAIT_TIME +DELTA_BUFFER_GETS +DELTA_CELL_OFFLOAD_ELIG_BYTES +DELTA_CELL_UNCOMPRESSED_BYTES +DELTA_CLUSTER_WAIT_TIME +DELTA_CONCURRENCY_TIME +DELTA_COUNT +DELTA_CPU_TIME +DELTA_DEALLOC +DELTA_DIRECT_READS +DELTA_DIRECT_WRITES +DELTA_DISK_READS +DELTA_ELAPSED_TIME +DELTA_END_OF_FETCH_COUNT +DELTA_EXECUTION_COUNT +DELTA_FETCH_COUNT +DELTA_ID +DELTA_INTERCONNECT_IO_BYTES +DELTA_INVALIDATIONS +DELTA_IO_INTERCONNECT_BYTES +DELTA_JAVA_EXEC_TIME +DELTA_LOADS +DELTA_PARSE_CALLS +DELTA_PHYSICAL_READ_BYTES +DELTA_PHYSICAL_READ_REQUESTS +DELTA_PHYSICAL_WRITE_BYTES +DELTA_PHYSICAL_WRITE_REQUESTS +DELTA_PLSQL_EXEC_TIME +DELTA_PX_SERVERS_EXECUTIONS +DELTA_READ_IO_BYTES +DELTA_READ_IO_REQUESTS +DELTA_READ_MEM_BYTES +DELTA_ROWS_PROCESSED +DELTA_SCN +DELTA_SORTS +DELTA_TIME +DELTA_USER_IO_WAIT_TIME +DELTA_WRITE_IO_BYTES +DELTA_WRITE_IO_REQUESTS +DENSITY +DEPENDENCIES +DEPENDENCY +DEPENDENCY_NAME +DEPENDENCY_TYPE +DEPENDENT_SCN +DEPENDENT_XID +DEPEND_COUNT +DEPEND_ID +DEPEND_ON +DEPTH +DEP_COMMITSCN +DEP_COMMIT_POSITION +DEP_SCHEMA_OID +DEP_SCHEMA_OWNER +DEP_SCHEMA_URL +DEP_TRANSACTION_ID +DEP_TXN_CONF_SQL_ID +DEP_TXN_NAME +DEP_XID +DEP_XIDSLT +DEP_XIDSQN +DEP_XIDUSN +DEQLOG_PROCESSING_CPU_TIME +DEQLOG_PROCESSING_ELAPSED_TIME +DEQLOG_ROWS_PROCESSED +DEQUEUED_MESSAGE_CREATE_TIME +DEQUEUED_MESSAGE_NUMBER +DEQUEUED_MSGS +DEQUEUED_MSG_LATENCY +DEQUEUED_POSITION +DEQUEUE_CPU_TIME +DEQUEUE_DISK_DELETES +DEQUEUE_DISK_LOCKS +DEQUEUE_ENABLED +DEQUEUE_INDEX_BLOCKS_FREED +DEQUEUE_MEMORY_LOCKS +DEQUEUE_RATE +DEQUEUE_REQUESTS +DEQUEUE_SUBSHARD +DEQUEUE_TIME +DEQUEUE_TRANSACTIONS +DEREF_NO_REWRITE +DESCEND +DESCR +DESCRIBE_MISMATCH +DESCRIPTION +DESCRIPTION_TYPE +DESCRIPTION_VALUE +DESTINATION +DESTINATION_COMPONENT_DB +DESTINATION_COMPONENT_ID +DESTINATION_COMPONENT_NAME +DESTINATION_COMPONENT_TYPE +DESTINATION_DATABASE_NAME +DESTINATION_DBLINK +DESTINATION_END_TIME +DESTINATION_INSTANCE_ID +DESTINATION_INSTANCE_NAME +DESTINATION_INST_START_TIME +DESTINATION_NAME +DESTINATION_OWNER +DESTINATION_QUEUE_NAME +DESTINATION_QUEUE_OWNER +DESTINATION_SCHEMA_NAME +DESTINATION_SERIAL# +DESTINATION_SID +DESTINATION_START_TIME +DESTINATION_STATE +DESTINATION_STMT +DESTINATION_TABLE_NAME +DESTINATION_TABLE_OWNER +DESTINATION_TYPE +DESTINATION_USER_NAME +DEST_ID +DEST_MASK +DEST_NAME +DEST_ROLE +DEST_SERVER_PROCESS_ID +DES_ENCRYPTED_PASSWORD. +DETACHED +DETAIL +DETAILED_DESCRIPTION +DETAILED_LOCATION +DETAILED_MESSAGE +DETAILOBJ1_COLUMN +DETAILOBJ1_OWNER +DETAILOBJ1_RELATION +DETAILOBJ2_COLUMN +DETAILOBJ2_OWNER +DETAILOBJ2_RELATION +DETAILOBJ_ALIAS +DETAILOBJ_COLUMN +DETAILOBJ_NAME +DETAILOBJ_OWNER +DETAILOBJ_PCT +DETAILOBJ_TYPE +DETAIL_ALIAS +DETAIL_COLUMN +DETAIL_NAME +DETAIL_OWNER +DETAIL_PARTITION_NAME +DETAIL_PARTITION_POSITION +DETAIL_RELATION +DETAIL_SUBPARTITION_NAME +DETAIL_SUBPARTITION_POSITION +DETAIL_TYPE +DETECTED_USAGES +DETERMINISTIC +DEVICE_NAME +DEVICE_TYPE +DFLAG +DFO_NUMBER +DFREE +DF_CHECKPOINT_CHANGE# +DF_CKP_MOD_TIME +DF_COUNT +DF_CREATION_CHANGE# +DF_FILE# +DF_RESETLOGS_CHANGE# +DF_TABLESPACE +DG$GETDGQUOTENAME. +DG$GETFLATDG. +DG$HASDGINDEX. +DGID +DGNAME +DIAGNOSTICS_SIZE +DIANA. +DIANA.AS_ALTER +DIANA.AS_ALTERS +DIANA.AS_ALTS +DIANA.AS_ALTTYPS +DIANA.AS_APPLY +DIANA.AS_CHOIC +DIANA.AS_COMP_ +DIANA.AS_DECL1 +DIANA.AS_DECL2 +DIANA.AS_DSCRM +DIANA.AS_DSCRT +DIANA.AS_EXP +DIANA.AS_FROM +DIANA.AS_GROUP +DIANA.AS_HIDDEN +DIANA.AS_ID +DIANA.AS_INTO_ +DIANA.AS_ITEM +DIANA.AS_LIST +DIANA.AS_NAME +DIANA.AS_OIDTYPS +DIANA.AS_ORDER +DIANA.AS_PARMS +DIANA.AS_PRAGM +DIANA.AS_P_ +DIANA.AS_P_ASS +DIANA.AS_RELIES_ON +DIANA.AS_RESULTS +DIANA.AS_SET_C +DIANA.AS_STM +DIANA.AS_USING_ +DIANA.AS_WHTLST +DIANA.A_ACTUAL +DIANA.A_AGENT +DIANA.A_AGENT_INDEX +DIANA.A_AGENT_NAME +DIANA.A_ALIGNM +DIANA.A_ALTERACT +DIANA.A_AUTHID +DIANA.A_BEGCOL +DIANA.A_BEGLIN +DIANA.A_BINARY +DIANA.A_BIND +DIANA.A_BITFLAGS +DIANA.A_BITFLAGS2 +DIANA.A_BLOCK_ +DIANA.A_CALL +DIANA.A_CHARSET +DIANA.A_CLUSTE +DIANA.A_CONNEC +DIANA.A_CONSTD +DIANA.A_CONSTT +DIANA.A_CONTEX +DIANA.A_CRED +DIANA.A_CS +DIANA.A_DIR +DIANA.A_D_ +DIANA.A_D_CHAR +DIANA.A_D_R_ +DIANA.A_D_R_VO +DIANA.A_ENDCOL +DIANA.A_ENDLIN +DIANA.A_EXCEPT +DIANA.A_EXP +DIANA.A_EXP1 +DIANA.A_EXP2 +DIANA.A_EXP_VO +DIANA.A_EXTERNAL +DIANA.A_EXTERNAL_CLASS +DIANA.A_EXT_FLAGS +DIANA.A_EXT_TY +DIANA.A_FILE +DIANA.A_FLAGS +DIANA.A_FORM_D +DIANA.A_HANDLE +DIANA.A_HAVING +DIANA.A_HEADER +DIANA.A_ID +DIANA.A_IDENTIFIER +DIANA.A_IDENTITY +DIANA.A_INDICA +DIANA.A_ITERAT +DIANA.A_KIND +DIANA.A_LANG +DIANA.A_LIB +DIANA.A_LIBAGENT_NAME +DIANA.A_LIMIT +DIANA.A_MEMBER +DIANA.A_METH_FLAGS +DIANA.A_NAME +DIANA.A_NAME_V +DIANA.A_NOT_NU +DIANA.A_NUM_INH_ATTR +DIANA.A_OBJECT +DIANA.A_ON_ERR +DIANA.A_OPAQUE_SIZE +DIANA.A_OPAQUE_USELIB +DIANA.A_ORIGINAL +DIANA.A_PACKAG +DIANA.A_PARALLEL_SPEC +DIANA.A_PARTITIONING +DIANA.A_PARTN +DIANA.A_PERCENT +DIANA.A_P_IFC +DIANA.A_RANGE +DIANA.A_REFIN +DIANA.A_RTNING +DIANA.A_SAMPLE +DIANA.A_SCHEMA +DIANA.A_SECURITY +DIANA.A_SPACE +DIANA.A_STM +DIANA.A_STM_STRING +DIANA.A_STREAMING +DIANA.A_STYLE +DIANA.A_SUBPRO +DIANA.A_SUBUNI +DIANA.A_SUPERTYPE +DIANA.A_TFLAG +DIANA.A_TRANS +DIANA.A_TYPE_BODY +DIANA.A_TYPE_R +DIANA.A_TYPE_S +DIANA.A_UNIT_B +DIANA.A_UNUSED +DIANA.A_UP +DIANA.A_WHERE +DIANA.C_ENTRY_ +DIANA.C_ENTRY_PT +DIANA.C_FIXUP +DIANA.C_FRAME_ +DIANA.C_LABEL +DIANA.C_OFFSET +DIANA.C_VAR +DIANA.C_VT_INDEX +DIANA.D_WHTLST_KIND +DIANA.D_WHTLST_NAME +DIANA.D_WHTLST_SCHEMA +DIANA.L_DEFAUL +DIANA.L_INDREP +DIANA.L_NUMREP +DIANA.L_Q_HINT +DIANA.L_RESTRICT_REFERENCES +DIANA.L_SYMREP +DIANA.L_TYPENAME +DIANA.SS_BINDS +DIANA.SS_BUCKE +DIANA.SS_EXLST +DIANA.SS_FUNCTIONS +DIANA.SS_INTO +DIANA.SS_LOCALS +DIANA.SS_PLSCOPE +DIANA.SS_PRAGM_L +DIANA.SS_SQL +DIANA.SS_TABLES +DIANA.SS_VTABLE +DIANA.S_ADDRES +DIANA.S_ADEFN +DIANA.S_ALS +DIANA.S_BASE_T +DIANA.S_BLKFLG +DIANA.S_BLOCK +DIANA.S_BODY +DIANA.S_CHARSET_EXPR +DIANA.S_CHARSET_FORM +DIANA.S_CHARSET_VALUE +DIANA.S_CMP_TY +DIANA.S_COMP_S +DIANA.S_CONSTR +DIANA.S_CURRENT_OF +DIANA.S_DECL +DIANA.S_DEFN_PRIVATE +DIANA.S_DEP_NUM +DIANA.S_DISCRI +DIANA.S_EXCEPT +DIANA.S_EXP_TY +DIANA.S_FG_POS +DIANA.S_FG_REFS +DIANA.S_FG_SIG +DIANA.S_FIRST +DIANA.S_FLAGS +DIANA.S_FRAME +DIANA.S_INDCOL +DIANA.S_INIT_E +DIANA.S_INTERF +DIANA.S_INTRO_VERSION +DIANA.S_IN_OUT +DIANA.S_ITEMS +DIANA.S_LAYER +DIANA.S_LENGTH_SEMANTICS +DIANA.S_LIB_FLAGS +DIANA.S_LOCATI +DIANA.S_NAME +DIANA.S_NORMARGLIST +DIANA.S_NOT_NU +DIANA.S_OBJN +DIANA.S_OBJ_DE +DIANA.S_OBJ_TY +DIANA.S_OPERAT +DIANA.S_PACKIN +DIANA.S_PLSC_SIG +DIANA.S_POS +DIANA.S_RECORD +DIANA.S_REP +DIANA.S_SCOPE +DIANA.S_SIZE +DIANA.S_SPEC +DIANA.S_STM +DIANA.S_STMT_FLAGS +DIANA.S_STUB +DIANA.S_TOID +DIANA.S_TYP +DIANA.S_T_SPEC +DIANA.S_T_STRU +DIANA.S_VALUE +DIANA.S_VTFLAGS +DICT +DICTCLA_LEN +DICTCODESTREAM_LEN +DICTIONARY +DICTIONARY_BEGIN +DICTIONARY_END +DICTIONARY_ENTRIES +DICTIONARY_OBJ_NAME. +DICTIONARY_OBJ_NAME_LIST. +DICTIONARY_OBJ_OWNER. +DICTIONARY_OBJ_OWNER_LIST. +DICTIONARY_OBJ_TYPE. +DICTIONARY_SCN +DICTIONARY_SQL_ID +DICT_BEGIN +DICT_COLUMNS +DICT_END +DID +DIFFERENT_LONG_LENGTH +DIFF_CALL_DURN +DIGEST_TYPE +DIMENSIONALITY_EXPRESSION +DIMENSIONALITY_ID +DIMENSIONALITY_NAME +DIMENSION_ALIAS +DIMENSION_ID +DIMENSION_NAME +DIMENSION_OWNER +DIMENSION_TYPE +DIM_KEY_ID +DIRECT +DIRECTIVE_ID +DIRECTIVE_NAME +DIRECTIVE_TYPE +DIRECTORY +DIRECTORY_NAME +DIRECTORY_OWNER +DIRECTORY_PATH +DIRECT_GETS +DIRECT_LOAD_FREQ +DIRECT_LOAD_ROWS +DIRECT_LOGON_USER +DIRECT_PATH_NUM_COLUMNS_LOADED +DIRECT_READS +DIRECT_WRITES +DIRECT_WRITES_DELTA +DIRECT_WRITES_TOTAL +DIRNAME +DIRSSCAN +DIRTY +DIRTY_BUFFERS +DIRTY_BUFFERS_INSPECTED +DIRTY_LIMIT +DIR_PATH +DIR_PATH_SHARED +DISABLED +DISABLE_CHANGE# +DISABLE_PARALLEL_DML +DISABLE_TIME +DISCONNECT_TIME +DISCRETE_BYTES_PER_SECOND +DISK +DISK1_LATENCY +DISK1_NAME +DISK2_LATENCY +DISK2_NAME +DISK3_LATENCY +DISK3_NAME +DISKGROUP +DISK_BYTES +DISK_FILTER_RATIO +DISK_ID +DISK_LARGE_IO_QUEUE_TIME +DISK_LARGE_IO_REQS +DISK_LARGE_IO_SERVICE_TIME +DISK_NAME +DISK_NUMBER +DISK_READS +DISK_READS_DELTA +DISK_READS_TOTAL +DISK_READ_RESULTS +DISK_REQUESTS +DISK_SMALL_IO_QUEUE_TIME +DISK_SMALL_IO_REQS +DISK_SMALL_IO_SERVICE_TIME +DISK_UTILIZATION_AVG +DISK_UTILIZATION_SUM +DISK_UTILIZATION_SUMX2 +DISK_WRITES +DISPATCHER +DISPATCHERS +DISPATCHERS_CPU +DISPLAY_NAME +DISPLAY_RESET_VALUE +DISPLAY_VALUE +DISP_TYPE +DISTDIM +DISTINCTFLAG +DISTINCT_KEYS +DISTRIBUTION +DIST_AGG_PROLLUP_PUSHDOWN +DIUTIL. +DIUTIL.ATTRIBUTE_USE_STATISTICS +DIUTIL.BOOL_TO_INT +DIUTIL.GET_D +DIUTIL.GET_DIANA +DIUTIL.INT_TO_BOOL +DIUTIL.NODE_USE_STATISTICS +DIUTIL.SUBPTXT +DIVERGENCE_LOAD_STATUS +DIVERGENCE_TYPE +DLM_CONFLICTS +DLM_INVALIDATIONS +DLM_INVALIDATION_REQUESTS +DLM_LOCK_REQUESTS +DLM_PIN_RELEASES +DLM_PIN_REQUESTS +DLM_RELEASES +DLM_REQUESTS +DM$RQCREATEDBOBJS. +DM$RQEVALSERINP. +DM$RQMOD_BUILD. +DM$RQMOD_DETAILIMPL.ODCITABLECLOSE +DM$RQMOD_DETAILIMPL.ODCITABLEDESCRIBE +DM$RQMOD_DETAILIMPL.ODCITABLEFETCH +DM$RQMOD_DETAILIMPL.ODCITABLEPREPARE +DM$RQMOD_DETAILIMPL.ODCITABLESTART +DM$RQMOD_DETAILIMPL.STUBTABLECLOSE +DM$RQMOD_DETAILIMPL.STUBTABLEDESCRIBE +DM$RQMOD_DETAILIMPL.STUBTABLEFETCH +DM$RQMOD_DETAILIMPL.STUBTABLEPREPARE +DM$RQMOD_DETAILIMPL.STUBTABLESTART +DM$RQMOD_SCORE. +DMLOPERATION +DML_CONDITION +DML_TIMESTAMP +DML_UPDATE +DMP_SEC.ADD_MODEL_TABLE +DMP_SEC.CHECK_SCHEMA +DMP_SEC.CREATE_EMPTY_MODEL +DMP_SEC.DROP_ALGORITHM_INTERNAL +DMP_SEC.DROP_MODEL_TABLES +DMP_SEC.DROP_TABLE +DMP_SEC.FETCH_ALG_SCHEMA_INTERNAL +DMP_SEC.GATHER_MODEL_STATS +DMP_SEC.GET_ALGORITHM_NAME +DMP_SEC.GET_ASSOCIATION_RULES +DMP_SEC.GET_FREQUENT_ITEMSETS +DMP_SEC.GET_FUNCTION_NAME +DMP_SEC.GET_MODEL_COST_MATRIX +DMP_SEC.GET_MODEL_DETAILS_AI +DMP_SEC.GET_MODEL_DETAILS_EM +DMP_SEC.GET_MODEL_DETAILS_EM_COMP +DMP_SEC.GET_MODEL_DETAILS_EM_PROJ +DMP_SEC.GET_MODEL_DETAILS_GLM +DMP_SEC.GET_MODEL_DETAILS_GLOBAL +DMP_SEC.GET_MODEL_DETAILS_KM +DMP_SEC.GET_MODEL_DETAILS_NB +DMP_SEC.GET_MODEL_DETAILS_NMF +DMP_SEC.GET_MODEL_DETAILS_OC +DMP_SEC.GET_MODEL_DETAILS_SVD +DMP_SEC.GET_MODEL_DETAILS_SVM +DMP_SEC.GET_MODEL_DETAILS_TREE_XML +DMP_SEC.GET_MODEL_TABLE +DMP_SEC.GET_MODEL_TABLES +DMP_SEC.INSERT_ALGORITHM +DMP_SEC.LOAD_MODEL +DMP_SEC.MODEL_EXISTS +DMP_SEC.RECKON_TABLE_SIZE +DMP_SYS. +DMP_SYS.ADD_SETTING +DMP_SYS.CALCULATE_MODEL_SIZE +DMP_SYS.CREATE_MODEL_TABLES_LIST +DMP_SYS.CREATE_NEW_MODEL_TABLE_NAME +DMP_SYS.CREATE_NEW_TEMP_MODEL_NAME +DMP_SYS.CREATE_NEW_TEMP_TABLE_NAME +DMP_SYS.DOWNGRADE_MODELS +DMP_SYS.GENERATE_HASH_V +DMP_SYS.LOCK_MODEL +DMP_SYS.PERSIST_MODEL +DMP_SYS.RELEASE_MODEL +DMP_SYS.UPGRADE_MODELS +DMP_SYS.VERIFY_TABLE_EXISTENCE +DM_QGEN. +DM_QGEN.CLOB_LITERAL +DM_QGEN.EXT_QUOTE +DM_QGEN.SQLN2BND +DM_QGEN.SQLN2LIT +DM_QGEN.SQLN2QSQL +DM_QGEN.SQLN2SQL +DM_QGEN.TO_LITERAL +DM_XFORM. +DOMAIN# +DOMAIN_INDEX_FILTER +DOMAIN_INDEX_NO_SORT +DOMAIN_INDEX_SORT +DOMAIN_NAME +DOMIDX_MANAGEMENT +DOMIDX_OPSTATUS +DOMIDX_STATUS +DONE_BLOCK_NUM +DONE_TIME +DONE_TRIGGER. +DOP +DOWNSTREAM_COMP_ID +DPRECO +DP_ADD_RLS_POLICY. +DP_BOOLEAN_PARAMETERS1 +DP_DROP_RLS_POLICY. +DP_TEXT_PARAMETERS1 +DQ_TOTALQ +DRAIN_TIMEOUT +DRAMMEMBYTES +DRIACC. +DRIACC.CAN +DRIACC.CAN_EXECUTE +DRIACC.SPLIT_SPEC +DRIACC.UD_ACCESS +DRIACC.USER_ACCESS +DRIACC.USER_IN_ROLE +DRIACC.VERIFY_COLSPEC +DRIACC.VERIFY_PROCEDURE +DRIACCHELP. +DRIACCHELP.CLOSE_ROLE_PRIVS +DRIACCHELP.DO_SYN +DRIACCHELP.FETCH_ROLE_PRIVS +DRIACCHELP.GET_ROLE_DIRECT +DRIACCHELP.GET_TAB_PRIVS +DRIACCHELP.OPEN_ROLE_PRIVS +DRICON. +DRICON.EXIST_TAB +DRICON.GET_DATA_TYPE +DRICON.GET_PRIMARY_KEY +DRICON.GET_TYPE_DATA_TYPE +DRICON.SET_DATATYPE_OBJ +DRICON.SET_STORE_OBJ +DRICON.VALIDATE_CDI +DRICON.VALIDATE_META_COLUMN +DRICON.VALIDATE_TAB +DRICON.VALIDATE_TEXT_COLUMN +DRIDISP. +DRIDISP.EXECTRUST +DRIDISP.EXECTRUST2 +DRIDISP.EXECTRUST_RET +DRIDISP.EXECTRUST_RET1 +DRIDML. +DRIDML.CLEANDELETE +DRIDML.CLEARONLINEPENDING +DRIDML.DELETEPENDING +DRIDML.DELETEPENDINGARR +DRIDML.DELETE_DUP_WAITING +DRIDML.DEREGISTER +DRIDML.EXCHANGEPENDING +DRIDML.EXCHANGEPENDINGCOMP +DRIDML.FETCH_WAITING_CUR +DRIDML.HASPENDING +DRIDML.INSERT_PENDING +DRIDML.LOCK_AUTOSYNC +DRIDML.LOCK_AUTOSYNC_RET +DRIDML.LOCK_DML +DRIDML.LOCK_DML_ALL_PART +DRIDML.LOCK_DML_RET +DRIDML.OPEN_WAITING_CUR +DRIDML.POPULATEPENDINGROWID +DRIDML.SETLOCKFAILED +DRIDML.UNLOCK_AUTOSYNC +DRIDML.UNLOCK_DML +DRIDML.UNLOCK_DML_ALL_PART +DRIDOC. +DRIDOC.HIGHLIGHT_ADD +DRIDOC.TEXT_ADD +DRIDOC.TEXT_END +DRIDOC.TEXT_NEW +DRIDOC.THEME_ADD +DRIDOC.TOKEN_ADD +DRIENT. +DRIENT.ADD_EXTRACT_RULE +DRIENT.CHKEXTPOL +DRIENT.COMPILE +DRIENT.REMOVE_EXTRACT_RULE +DRIENTL. +DRIENTL.ADD_DICT_ENTRY +DRIENTL.CHKDUPDICT +DRIENTL.CLOSE_DICT +DRIENTL.DROP_DICT +DRIENTL.PREP_DICT +DRIERR. +DRIERR.ADDODCIWARNING +DRIERR.RECORDINDEXERROR +DRIERR.RECORDINDEXERRORID +DRIEXP. +DRIEXP.ENQUOTE_VALUE +DRIEXP.GET_META_DATA +DRIFEAT. +DRIFEAT.DR$FEATURE_TRACK +DRIFEAT.DR$IDX_TRACK +DRIFEAT.DR$OPR_TRACK +DRIFEAT.DR$PAC_TRACK +DRIG. +DRIIMP. +DRIIMP.ADD_CDICOL +DRIIMP.ADD_PENDING +DRIIMP.ADD_USER_EXTRACT_RULE +DRIIMP.CREATE_INDEX +DRIIMP.CREATE_PARTITION +DRIIMP.SET_OBJECT +DRIIMP.SET_SUB_VALUE +DRIIMP.SET_VALUE +DRIIXS. +DRIIXS.ADD_INDEX +DRIIXS.COPY_INDEX_SET +DRIIXS.CREATE_INDEX_SET +DRIIXS.DROP_INDEX_SET +DRIIXS.DROP_USER_INDEX_SETS +DRIIXS.GETINDEXINDEXSET +DRIIXS.GETINDEXIXSCOLUMNS +DRIIXS.REMOVE_INDEX +DRILIST. +DRILOAD. +DRILOAD.GETLEADINGCHARS +DRILOAD.RESOLVE_SQE +DRILOAD.REVERSE_PATTERN +DRIMLX. +DRIMLX.ADD_SUB_LEXER +DRIMLX.COPY_MULTI_LEXER +DRIMLX.GETINDEXMULTILEXER +DRIMLX.GETSLXALTABBR +DRIMLX.INDEXADDSLX +DRIMLX.INDEXREMOVESLX +DRIMLX.INDEXUPDATESLX +DRIMLX.REMOVE_SUB_LEXER +DRIMLX.UPD_SUB_LEXER +DRIOBJ. +DRIOPT. +DRIOPT.CONVERT_AGGMERGE +DRIOPT.GETSEGMENTINFO +DRIOPT.GET_DDL_LOCK_TIMEOUT +DRIOPT.GET_STATE +DRIOPT.GET_TIMER +DRIOPT.INDEXOPTIMIZEREBUILD_VERIFY +DRIOPT.LOCK_OPT +DRIOPT.LOCK_OPT_AF +DRIOPT.LOCK_OPT_AGGINNER +DRIOPT.LOCK_OPT_AGGMERGE +DRIOPT.LOCK_OPT_ALL_PART +DRIOPT.LOCK_OPT_MVDATA +DRIOPT.LOCK_OPT_REBUILD +DRIOPT.LOCK_OPT_RET +DRIOPT.LOCK_SYNC_UPD +DRIOPT.SET_DDL_LOCK_TIMEOUT +DRIOPT.SET_STATE +DRIOPT.START_TIMER +DRIOPT.UNLOCK_AGGINNER +DRIOPT.UNLOCK_AGGMERGE +DRIOPT.UNLOCK_OPT +DRIOPT.UNLOCK_OPT_AF +DRIOPT.UNLOCK_OPT_ALL_PART +DRIOPT.UNLOCK_OPT_REBUILD +DRIOPT.UNLOCK_SYNC_UPD +DRIPARSE. +DRIPARSE.INITCREATEREC +DRIPARSE.NORMALIZE_COLUMN_LIST +DRIPARSE.PARSEALTER +DRIPARSE.PARSEALTERCAT +DRIPARSE.PARSEALTERRULE +DRIPARSE.PARSEALTERXPATH +DRIPARSE.PARSECREATE +DRIPARSE.PARSECREATECAT +DRIPARSE.PARSECREATERULE +DRIPARSE.PARSECREATEXPATH +DRIPARSE.PARSEMIGRATE +DRIPARSE.PARSEPARTALTER +DRIPARSE.PARSEPARTCREATE +DRIPARX. +DRIPARX.CLEARCONTEXT +DRIPARX.END_PARALLEL_OP +DRIPARX.GETCONTEXT +DRIPARX.GET_SESSION_STATE +DRIPARX.SETCONTEXT +DRIPARX.SET_SESSION_STATE +DRIPREF. +DRIPREF.ADD_PARTITION_STORAGE +DRIPREF.COPY_PREFERENCES +DRIPREF.CREATE_PREFERENCE +DRIPREF.DROP_PREFERENCE +DRIPREF.DROP_USER_PREFERENCES +DRIPREF.GETOBJDEFAULT +DRIPREF.GETPREFCLAOBJ +DRIPREF.GETSTAGEITABMAXROWS +DRIPREF.GET_ATTRIBUTE_VALUE +DRIPREF.GET_ATTRIBUTE_VALUE2 +DRIPREF.GET_DEFAULT_FILTER +DRIPREF.GET_INDEX_VALUES +DRIPREF.GET_OAT_ID +DRIPREF.GET_OBJ_INFO +DRIPREF.GET_PREF_INFO +DRIPREF.GET_SUB_INDEX_VALUES +DRIPREF.NEXTPREFVALUE +DRIPREF.OPENPREFVALUE +DRIPREF.REMOVE_PARTITION_STORAGE +DRIPREF.RPL_PREFERENCES +DRIPREF.SET_ATTRIBUTE +DRIPREF.SET_PREFERENCES +DRIPREF.UNSET_ATTRIBUTE +DRIREC. +DRIREC.RECOVER +DRIREC.RECOVER_DICT +DRIREP. +DRIREP.BLANKLN +DRIREP.BYTESTR +DRIREP.ENDREPORT +DRIREP.INITREPORT +DRIREP.LOAD_TTYPE_NAMES +DRIREP.NUMSTR +DRIREP.PCTSTR +DRIREP.TITLE +DRIREP.WL +DRIREPM. +DRIREPM.CREATE_INDEX_SCRIPT +DRIREPM.CREATE_POLICY_SCRIPT +DRIREPM.DESCRIBE_INDEX +DRIREPM.DESCRIBE_POLICY +DRIREPZ. +DRIREPZ.GET_GTAB_SIZE +DRIREPZ.INDEX_SIZE +DRIRIO. +DRIRIO.CREATE_SHADOW +DRIRIO.CREATE_SHADOW_PARTMD +DRIRIO.LOCK_RIO +DRIRIO.LOCK_RIO_ALL_PART +DRIRIO.SHADOW_NAME +DRIRIO.UNLOCK_RIO +DRIRIO.UNLOCK_RIO_ALL_PART +DRISCORE. +DRISCORE.TEXTSCORE +DRISCORR. +DRISCORR.RULESCORE +DRISGP. +DRISGP.ADD_SECTION +DRISGP.ADD_SEC_GRP_ATTR_VAL +DRISGP.CHECKUPDMDATA +DRISGP.COPY_SECTION_GROUP +DRISGP.CREATE_SECTION_GROUP +DRISGP.CSV_TO_SECTION_ATTR +DRISGP.DROP_SECTION_GROUP +DRISGP.DROP_USER_SECTION_GROUPS +DRISGP.FIELD_TO_MDATA +DRISGP.GETMAXSECID +DRISGP.GETSEARCHSDATAFLAG +DRISGP.GETSECTION +DRISGP.GETSECTIONS +DRISGP.GETTKTYPMVDATA +DRISGP.GET_DEFAULT_SECTION +DRISGP.GET_SECTION_ID +DRISGP.GET_SG_INFO +DRISGP.HANDLESIMPLESYNTAXALTER +DRISGP.HASFILTERSECTION +DRISGP.HASSECTIONTYPE +DRISGP.INDEXADDDATAGUIDEMD +DRISGP.INDEXADDSEARCHSDATAMD +DRISGP.INDEXADDSECTION +DRISGP.INDEXADDTEXTMD +DRISGP.INDEXGETSECTIONATTRIBUTE +DRISGP.INDEXGETSECTIONID +DRISGP.INDEXREMOVEDATAGUIDEMD +DRISGP.INDEXREMSECTION +DRISGP.INDEXSETSECTIONATTRIBUTE +DRISGP.INDEXUNSETSECTIONATTRIBUTE +DRISGP.INDEXUPDATESECTIONATTRIBUTE +DRISGP.INS_SEC_GRP_ATTR_BY_ID +DRISGP.ISFILTERSECTION +DRISGP.LOADSECTIONMD +DRISGP.REMOVE_SECTION +DRISGP.REM_SEC_GRP_ATTR_VAL +DRISGP.SECISMDATA +DRISGP.SECISSDATA +DRISGP.SET_SECTION_ATTRIBUTE +DRISGP.SET_SECTION_ATTRIBUTE_BY_ID +DRISGP.SET_SEC_GRP_ATTR +DRISGP.UNSET_SECTION_ATTRIBUTE +DRISGP.UNSET_SEC_GRP_ATTR +DRISPL. +DRISPL.ADD_STOPOBJ +DRISPL.COPY_STOPLIST +DRISPL.CREATE_STOPLIST +DRISPL.DROP_STOPLIST +DRISPL.DROP_USER_STOPLISTS +DRISPL.GETINDEXSTOPWORDS +DRISPL.GETSPLLANG +DRISPL.INDEXADDSTOPWORD +DRISPL.INDEXREMSTOPWORD +DRISPL.MIGRATETOMULTISTOPLIST +DRISPL.REMOVE_STOPOBJ +DRITHS. +DRITHS.GET_THS +DRITHS.LOOKUP +DRITHS.LOOKUP_SINGLE +DRITHS.PARSE_PHRASE +DRITHSC. +DRITHSC.CHANGE_SN +DRITHSC.CHECK_THESAURUS_EXISTS +DRITHSC.CREATE_PHRASE +DRITHSC.CREATE_PHRASE_LSB +DRITHSC.CREATE_RELATION +DRITHSC.CREATE_THESAURUS +DRITHSC.CREATE_THESAURUS_LSB +DRITHSC.CREATE_TR +DRITHSC.DROP_PHRASE +DRITHSC.DROP_RELATION +DRITHSC.DROP_THESAURUS +DRITHSC.DROP_TR +DRITHSC.DROP_USER_THESAURI +DRITHSC.MAKE_PT +DRITHSC.RENAME_PHRASE +DRITHSC.RENAME_THESAURUS +DRITHSC.TRUNC_THESAURUS +DRITHSC.UPDATE_TR +DRITHSD. +DRITHSD.DUMP_THESAURUS +DRITHSD.NEXT_DUMP_LINE +DRITHSL. +DRITHSL.ALLOCATE_IDS +DRITHSL.CREATE_PHRASE +DRITHSL.CREATE_THESAURUS +DRITHSL.DUMP_THESAURUS +DRITHSL.GET_THSID_BYNAME +DRITHSL.INSERT_BT +DRITHSL.INSERT_FPHRASE +DRITHSL.INSERT_PHRASE +DRITHSL.NEXT_DUMP_LINE +DRITHSL.UPDATE_PHRASE +DRITHSX. +DRITHSX.EXPAND +DRITHSX.EXPAND0 +DRITHSX.OUTPUT_STYLE +DRITHSX.PV_EXP_TAB_COUNT +DRITHSX.PV_EXP_TAB_REC +DRITHSX.SN +DRITHSX.TTT +DRIUTL. +DRIUTL.BYTESTR +DRIUTL.CHECKNUMLANGINDSLXSW +DRIUTL.CHECK_LANGUAGE +DRIUTL.DRUEBRK +DRIUTL.DUMPPLSQLSTACK +DRIUTL.ENQUOTECOMPOUNDOBJECTNAME +DRIUTL.GENID +DRIUTL.GET_CTX_DOC_POLSTEMS +DRIUTL.GET_DBID +DRIUTL.GET_DEFAULT_VALUE +DRIUTL.GET_HASH_AREA_SIZE +DRIUTL.GET_MAX_STRING_SIZE +DRIUTL.GET_OBJ_ID +DRIUTL.GET_SHADOW_INDEX +DRIUTL.GET_SLAVE_ID +DRIUTL.GET_USER +DRIUTL.GET_USER_ID +DRIUTL.GET_USER_NAME +DRIUTL.IDXCREATEERRCHECK +DRIUTL.IDXMEM_TO_NUMBER +DRIUTL.IS_DECIMAL_VALUE +DRIUTL.IS_OPS +DRIUTL.IS_SHADOW_INDEX +DRIUTL.KEYCOMP_OK +DRIUTL.LANG_TO_ABBR +DRIUTL.LOCK_INDEX +DRIUTL.LOCK_PARTITION +DRIUTL.MAKE_PFX +DRIUTL.MAX_NAME_LENGTH +DRIUTL.MEM_TO_NUMBER +DRIUTL.NORMALIZEOBJECTNAME +DRIUTL.NUMSTR +DRIUTL.PARSE_OBJECT_NAME +DRIUTL.PARSE_SHADOW_INDEX +DRIUTL.PCTSTR +DRIUTL.PKEY_TOOLONG +DRIUTL.SET_HASH_AREA_SIZE +DRIUTL.SPLIT +DRIUTL.SPLIT_LIST +DRIUTL.SYNCMEM_TO_NUMBER +DRIUTL.TRIM_QUOTES +DRIUTL.VALIDATE_STORAGE +DRIUTL.VERIFY_NP_INDEX_TABLES +DRIVAL. +DRIVAL.VALIDATECTXRULEOPTIONS +DRIVAL.VALIDATE_ATTR +DRIVAL.VALIDATE_PREF +DRIVER +DRIVING_INCIDENT +DRIVING_SITE +DRIXMD. +DRIXMD.ADDSTAGEITAB +DRIXMD.ADD_AUTO_OPTIMIZE +DRIXMD.ADD_BG_OPTIMIZE +DRIXMD.ADD_DICTIONARY +DRIXMD.ALLOCATEDOCIDS +DRIXMD.ALLOCATEPARTID +DRIXMD.AUTOOPT_CRE_PIPE +DRIXMD.AUTOOPT_POP_TOKEN +DRIXMD.AUTOOPT_PUSH_TOKEN +DRIXMD.AUTO_OPTIMIZE_ON +DRIXMD.CHANGEINDEXOPTION +DRIXMD.CHECKACCESS +DRIXMD.CHECKINDEXESFOREXCHANGE +DRIXMD.CHECKINDEXFORORACON +DRIXMD.CHECKINDEXQUERYABLE +DRIXMD.CHECKINDEXVISIBLE +DRIXMD.CHECK_AUTO_OPTIMIZE +DRIXMD.CHKINDEXOPTION +DRIXMD.COMPAREINDEXOBJECTVALUESPREF +DRIXMD.COPYINDEXMDRIO +DRIXMD.COPYPARTMDRIO +DRIXMD.COPYPOLICY +DRIXMD.COPY_USER_ANL_DICT +DRIXMD.CREATEPARTITIONMD +DRIXMD.CREATEPOLICY +DRIXMD.CREATESQE +DRIXMD.DECREMENTDOCCNT +DRIXMD.DISABLE_QUERY_STATS +DRIXMD.DROPPARTITIONMD +DRIXMD.DROPPOLICY +DRIXMD.DROPSQE +DRIXMD.DROPUSERPOLICIES +DRIXMD.DROPUSERSQES +DRIXMD.DROP_ALL_DICTIONARY +DRIXMD.DROP_BG_OPTIMIZE +DRIXMD.DROP_DICTIONARY +DRIXMD.ENABLE_QUERY_STATS +DRIXMD.EXCHANGEINDEXMD +DRIXMD.EXCHANGEINDEXPARTMD +DRIXMD.FASTGETINDEXID +DRIXMD.GETALLCDICOLUMNS +DRIXMD.GETALLINDEXOBJECTS +DRIXMD.GETALLPARTITIONIDS +DRIXMD.GETALLPARTITIONINFO +DRIXMD.GETALLPARTITIONNAMES +DRIXMD.GETALLPARTITIONNMS +DRIXMD.GETALLPARTITIONOPTS +DRIXMD.GETALLPARTITIONS +DRIXMD.GETALLSDATASECS +DRIXMD.GETBASETABLENAME +DRIXMD.GETDOCIDCOUNT +DRIXMD.GETFIELDFID +DRIXMD.GETINDEXID +DRIXMD.GETINDEXMD +DRIXMD.GETINDEXOBJECT +DRIXMD.GETINDEXPARTITION +DRIXMD.GETINDEXREC +DRIXMD.GETINDEXRECBYID +DRIXMD.GETINDEXSTATS +DRIXMD.GETINDEXSTATUS +DRIXMD.GETINDEXSTORAGE +DRIXMD.GETINDEXTABLENAME +DRIXMD.GETINDEXTYPENAME +DRIXMD.GETJOB +DRIXMD.GETMULTIBLOCKREADCOUNT +DRIXMD.GETMVFLAG +DRIXMD.GETNEXTID +DRIXMD.GETPARTITIONID +DRIXMD.GETPARTITIONREC +DRIXMD.GETPARTITIONRECBYID +DRIXMD.GETSLXMDATASECID +DRIXMD.GETSSCURRENTMETADATA +DRIXMD.GETSYNCATTR +DRIXMD.GETSYSPARAM +DRIXMD.GETTRANSITIONINFO +DRIXMD.IMPORTINGINDEX +DRIXMD.INCREMENTDOCCNT +DRIXMD.INDEXHASDATAGUIDE +DRIXMD.INDEXHASDTABLE +DRIXMD.INDEXHASETABLE +DRIXMD.INDEXHASFATABLES +DRIXMD.INDEXHASFULLLENGTHOBJECTS +DRIXMD.INDEXHASGMAXROWS +DRIXMD.INDEXHASGTABLE +DRIXMD.INDEXHASKGTABLE +DRIXMD.INDEXHASMTABLE +DRIXMD.INDEXHASMVDATA +DRIXMD.INDEXHASOTABLE +DRIXMD.INDEXHASPENDINGROWS +DRIXMD.INDEXHASPTABLE +DRIXMD.INDEXHASSSORTTABLE +DRIXMD.INDEXHASSTABLE +DRIXMD.INSERT_CDICOL +DRIXMD.INSERT_INDEX +DRIXMD.INSERT_OBJECT +DRIXMD.INSERT_PARTITION +DRIXMD.INSERT_PENDING +DRIXMD.INSERT_SUB_VALUE +DRIXMD.INSERT_USER_EXTRACT_RULE +DRIXMD.INSERT_VALUE +DRIXMD.ISINDEXREADABLE +DRIXMD.ISSES +DRIXMD.ISSHARDCATALOG +DRIXMD.NEXTINDEXCDI +DRIXMD.NEXTINDEXOBJECT +DRIXMD.NEXTINDEXVALUE +DRIXMD.OBJECTISSHARDED +DRIXMD.OPENINDEXMDSCAN +DRIXMD.ORACONREWRITECHK +DRIXMD.PARTID_TO_PARTNAME +DRIXMD.PURGEKGL +DRIXMD.RECORDJOB +DRIXMD.REMOVESTAGEITAB +DRIXMD.REMOVE_AUTO_OPTIMIZE +DRIXMD.REMZONEFROMMD +DRIXMD.REM_USER_ANL_DICT +DRIXMD.RENAMEINDEX +DRIXMD.RENAMEINDEXCOL +DRIXMD.RENAMEINDEXTAB +DRIXMD.RESETINDEXIDS +DRIXMD.RESET_AUTO_OPTIMIZE_STATUS +DRIXMD.RUN_AUTO_OPTIMIZE +DRIXMD.RUN_BG_OPTIMIZE +DRIXMD.SELECTUSERANLDICTLOB +DRIXMD.SETACTIVEINDEX +DRIXMD.SETINDEXMD +DRIXMD.SETINDEXSTATUS +DRIXMD.SETSYNCATTR +DRIXMD.SETTRANSITIONINFO +DRIXMD.START_AUTO_OPTIMIZE +DRIXMD.STOP_AUTO_OPTIMIZE +DRIXMD.SUBSTRINGENABLED +DRIXMD.TABLEPARTISSUBPART +DRIXMD.THIRTYCHARACTERNAMES +DRIXMD.TXNALGETKEY +DRIXMD.TXNALSETKEY +DRIXMD.UPDATESDATA +DRI_MOVE_CTXSYS. +DRI_SUBLXV_LANG. +DRI_VERSION. +DRL_FILE_NUMBER +DRM_BENEFIT_ACCESS +DRM_BENEFIT_CR_ACCESS +DROPPABLE +DROPPED +DROPPED_SAMPLE_COUNT +DROPSCN +DROPSEG +DROPTIME +DROP_SEGMENTS +DRUE. +DRUE.CLEAR_STACK +DRUE.ERROR +DRUE.GET_ERROR_MESG +DRUE.GET_STACK +DRUE.GET_STACK1 +DRUE.GET_STACK_NOCLEAR +DRUE.POP +DRUE.PUSH +DRUE.PUSH_INTERNAL +DRUE.RAISE +DRUE.TEXT_ON_STACK +DRV0DDL. +DRV0DDL.GENERATE_SUBSTRINGS +DRV0DDL.GENERATE_SUBSTRINGS2 +DRVANL. +DRVANL.ADD_DICTIONARY +DRVANL.COPY_USER_ANL_DICT +DRVANL.DROP_DICTIONARY +DRVANL.REM_USER_ANL_DICT +DRVDDL. +DRVDDL.ADDDOCLEXERMDATATOKENS +DRVDDL.ADD_BG_OPTIMIZE +DRVDDL.ADD_BIG_IO +DRVDDL.ADD_SEPARATE_OFFSETS +DRVDDL.ADD_STAGE_ITAB +DRVDDL.CDIUPDATE +DRVDDL.CONTEXTOLDDELETE +DRVDDL.CONTEXTOLDINSERT +DRVDDL.CONTEXTOLDUPDATE +DRVDDL.CREATE_DATAGUIDE_TABLE +DRVDDL.CREATE_SEARCH_TABLES +DRVDDL.CURSORTOBITVECTOR +DRVDDL.DROP_BG_OPTIMIZE +DRVDDL.DROP_DATAGUIDE_TABLE +DRVDDL.FIELD_TO_MDATA +DRVDDL.IDX_ADD_SLX +DRVDDL.IDX_ADD_SW +DRVDDL.IDX_REM_SLX +DRVDDL.IDX_REM_SW +DRVDDL.INDEXCOLRENAME +DRVDDL.INDEXCREATE +DRVDDL.INDEXDROP +DRVDDL.INDEXMAPLANGUAGES +DRVDDL.INDEXMAPLANGUAGESDRIVER +DRVDDL.INDEXOPTIMIZE +DRVDDL.INDEXOPTIMIZEPARFN +DRVDDL.INDEXPARTITIONLOAD +DRVDDL.INDEXPARTREPLACE +DRVDDL.INDEXPARTRESUME +DRVDDL.INDEXRENAME +DRVDDL.INDEXREPLACE +DRVDDL.INDEXRESUME +DRVDDL.INDEXSYNC +DRVDDL.INDEXTABRENAME +DRVDDL.INDEXTRANSPORT +DRVDDL.INDEXTRUNCATE +DRVDDL.LOCKBASETABLE +DRVDDL.PARTCLEANUP +DRVDDL.PARTITIONADD +DRVDDL.PARTITIONCREATE +DRVDDL.PARTITIONDROP +DRVDDL.PARTITIONEXCHANGE +DRVDDL.PARTITIONMERGE +DRVDDL.PARTITIONSPLIT +DRVDDL.PROCESSONLINEPENDING +DRVDDL.REMDOCLEXERMDATATOKENS +DRVDDL.REMOVE_BIG_IO +DRVDDL.REMOVE_STAGE_ITAB +DRVDDL.REPOPULATE_DOLLARN +DRVDDL.RIOCLEANUP +DRVDDL.SET_READ_MODE +DRVDDL.SPLITDOLLARI +DRVDDLC. +DRVDDLC.INDEXCOLRENAME +DRVDDLC.INDEXCREATE +DRVDDLC.INDEXDROP +DRVDDLC.INDEXRENAME +DRVDDLC.INDEXREPLACE +DRVDDLC.INDEXTRANSPORT +DRVDDLC.INDEXTRUNCATE +DRVDDLR. +DRVDDLR.INDEXCOLRENAME +DRVDDLR.INDEXCREATE +DRVDDLR.INDEXDROP +DRVDDLR.INDEXOPTIMIZE +DRVDDLR.INDEXRENAME +DRVDDLR.INDEXREPLACE +DRVDDLR.INDEXRESUME +DRVDDLR.INDEXSYNC +DRVDDLR.INDEXTRANSPORT +DRVDDLR.INDEXTRUNCATE +DRVDDLX. +DRVDDLX.INDEXCOLRENAME +DRVDDLX.INDEXCREATE +DRVDDLX.INDEXDROP +DRVDDLX.INDEXRENAME +DRVDDLX.INDEXREPLACE +DRVDDLX.INDEXRESUME +DRVDDLX.INDEXTRANSPORT +DRVDDLX.INDEXTRUNCATE +DRVDDLX.ISBINARYXMLCOLUMN +DRVDISP. +DRVDISP.EXECASOWN +DRVDISP.EXECASOWN_CLOB +DRVDISP.EXECASOWN_CLOB_RET +DRVDISP.EXECASOWN_IN_CLOB +DRVDISP.EXECASOWN_IN_CLOB_RET +DRVDISP.EXECASOWN_IN_OUT_CLOBS +DRVDISP.EXECASOWN_RET +DRVDISP.EXECASOWN_RET1 +DRVDISP.EXECTRUST +DRVDISP.EXECTRUST_ARRAY +DRVDISP.EXECTRUST_RET +DRVDISP.EXECTRUST_RET1 +DRVDISP.TABLEFUNC +DRVDISP.TABLEFUNC_ASOWN +DRVDML. +DRVDML.ADDREMONEMDATA +DRVDML.ADDREMONESDATA +DRVDML.ADD_REM_MDATA +DRVDML.ADD_REM_SDATA +DRVDML.AUTO_SYNC_INDEX +DRVDML.CLEANDML +DRVDML.COM_SYNC_INDEX +DRVDML.CONVERT_AGGMERGE +DRVDML.CTXCAT_DML +DRVDML.DELETEPENDING +DRVDML.IDX_POPULATE_MODE +DRVDML.INS_DEL_MVDATA +DRVDML.LOCK_OPT_AGGINNER +DRVDML.LOCK_OPT_AGGMERGE +DRVDML.LOCK_OPT_MVDATA +DRVDML.LOCK_OPT_REBUILD +DRVDML.LOCK_SYNC_UPD +DRVDML.MAINTAINKTAB +DRVDML.POPULATEPENDING +DRVDML.PROCESSDML +DRVDML.PROCESSWAITING +DRVDML.SETLOCKFAILED +DRVDML.UNLOCK_AGGINNER +DRVDML.UNLOCK_AGGMERGE +DRVDML.UNLOCK_OPT_REBUILD +DRVDML.UNLOCK_SYNC_UPD +DRVDML.UPDATEMDATA +DRVDML.UPD_SDATA +DRVDOC. +DRVDOC.CONCORDANCE_OPTIONS +DRVDOC.FILTER_OPTIONS +DRVDOC.GET_ROWID +DRVDOC.GET_SENTIMENT +DRVDOC.GIST_OPTIONS +DRVDOC.HIGHLIGHT_OPTIONS +DRVDOC.HIGHLIGHT_REQUEST +DRVDOC.LANGUAGES_REQUEST +DRVDOC.LING_REQUEST +DRVDOC.MARKUP_OPTIONS +DRVDOC.NOUN_PHRASES_REQUEST +DRVDOC.PARTNAME_TO_PARTPOSITION +DRVDOC.PARTPOSITION_TO_PARTNAME +DRVDOC.PART_OF_SPEECH_REQUEST +DRVDOC.RESLOB_CHK +DRVDOC.RESTAB_CHK +DRVDOC.RID_TO_PARTNAME +DRVDOC.RID_TO_PARTPOSITION +DRVDOC.STEMS_REQUEST +DRVDOC.THEME_OPTIONS +DRVDOC.TOKEN_REQUEST +DRVIMR. +DRVIMR.ADD_BRW +DRVIMR.ADD_CLUSTER +DRVIMR.ADD_DOCCLS +DRVIMR.ADD_EXPLAIN +DRVIMR.ADD_FEATURE +DRVIMR.ADD_GIST +DRVIMR.ADD_GIST_TXT +DRVIMR.ADD_HIGHLIGHT +DRVIMR.ADD_HQF +DRVIMR.ADD_LANGUAGE +DRVIMR.ADD_NOUN_PHRASE +DRVIMR.ADD_POS +DRVIMR.ADD_QUERY +DRVIMR.ADD_SENTIMENT +DRVIMR.ADD_STEM +DRVIMR.ADD_THEME +DRVIMR.ADD_TOKEN +DRVIMR.BLANKLN +DRVIMR.BRW_COUNT +DRVIMR.CLEAR_CLSTAB +DRVIMR.CLEAR_GIST_TAB +DRVIMR.DELETE_BRW_TAB +DRVIMR.DELETE_EXP_TAB +DRVIMR.DELETE_HFEED_TAB +DRVIMR.DELETE_HILTAB +DRVIMR.DELETE_QUERYTAB +DRVIMR.DELETE_SENTTAB +DRVIMR.DIRECT_GET +DRVIMR.DIRECT_GET_BFILE +DRVIMR.DIRECT_GET_BLOB +DRVIMR.DIRECT_GET_CLOB +DRVIMR.DIRECT_GET_LANG +DRVIMR.DIRECT_GET_VCHR2 +DRVIMR.DIRECT_SET +DRVIMR.DIRECT_SET_VCHR2 +DRVIMR.ENDREPORT +DRVIMR.FEATURE_COUNT +DRVIMR.GET_BRW_REC +DRVIMR.GET_CLSTAB_COUNT +DRVIMR.GET_CLS_REC +DRVIMR.GET_DOCTAB_COUNT +DRVIMR.GET_DOC_REC +DRVIMR.GET_FEATURE +DRVIMR.GET_GIST_REC +DRVIMR.GET_GIST_TXT +DRVIMR.GET_HILREC +DRVIMR.GET_HILTAB_COUNT +DRVIMR.GET_KWIC +DRVIMR.GET_QUERYREC +DRVIMR.GET_RLANGUAGES_REC +DRVIMR.GET_RNOUNPHRASES_REC +DRVIMR.GET_RPOS_REC_PART1 +DRVIMR.GET_RPOS_REC_PART2 +DRVIMR.GET_RSTEMS_REC +DRVIMR.GET_RTHM_REC +DRVIMR.GET_RTOK_REC +DRVIMR.GET_SENT_REC +DRVIMR.GIST_COUNT +DRVIMR.INITREPORT +DRVIMR.INSERT_HFEED_TAB +DRVIMR.NEXT_DID +DRVIMR.QUERY_COUNT +DRVIMR.RESET_FEATURE +DRVIMR.RLANGUAGES_COUNT +DRVIMR.RLANGUAGES_DELETE +DRVIMR.RNOUNPHRASES_COUNT +DRVIMR.RNOUNPHRASES_DELETE +DRVIMR.RPOS_COUNT +DRVIMR.RPOS_DELETE +DRVIMR.RSTEMS_COUNT +DRVIMR.RSTEMS_DELETE +DRVIMR.RTHM_COUNT +DRVIMR.RTHM_DELETE +DRVIMR.RTOK_COUNT +DRVIMR.RTOK_DELETE +DRVIMR.SENTTAB_COUNT +DRVIMR.SET_DID_REC +DRVIMR.SET_KWIC +DRVIMR.START_DIDSCAN +DRVIMR.TITLE +DRVIMR.W +DRVIMR.WL +DRVLSB. +DRVLSB.ADD_ATTR_SECTION_C +DRVLSB.ADD_ATTR_SECTION_NC +DRVLSB.ADD_DICTIONARY_C +DRVLSB.ADD_DICTIONARY_NC +DRVLSB.ADD_FIELD_SECTION_C +DRVLSB.ADD_FIELD_SECTION_NC +DRVLSB.ADD_INDEX_C +DRVLSB.ADD_INDEX_NC +DRVLSB.ADD_MDATA +DRVLSB.ADD_MDATA_COLUMN_C +DRVLSB.ADD_MDATA_COLUMN_NC +DRVLSB.ADD_MDATA_SECTION_C +DRVLSB.ADD_MDATA_SECTION_NC +DRVLSB.ADD_MVDATA_SECTION_C +DRVLSB.ADD_MVDATA_SECTION_NC +DRVLSB.ADD_NDATA_SECTION_C +DRVLSB.ADD_NDATA_SECTION_NC +DRVLSB.ADD_SDATA +DRVLSB.ADD_SDATA_COLUMN_C +DRVLSB.ADD_SDATA_COLUMN_NC +DRVLSB.ADD_SDATA_SECTION_C +DRVLSB.ADD_SDATA_SECTION_NC +DRVLSB.ADD_SEC_GRP_ATTR_VAL_C +DRVLSB.ADD_SEC_GRP_ATTR_VAL_NC +DRVLSB.ADD_SPECIAL_SECTION_C +DRVLSB.ADD_SPECIAL_SECTION_NC +DRVLSB.ADD_STOPCLASS_C +DRVLSB.ADD_STOPCLASS_NC +DRVLSB.ADD_STOPTHEME_C +DRVLSB.ADD_STOPTHEME_NC +DRVLSB.ADD_STOPWORD_C +DRVLSB.ADD_STOPWORD_NC +DRVLSB.ADD_STOP_SECTION_C +DRVLSB.ADD_STOP_SECTION_NC +DRVLSB.ADD_SUB_LEXER_C +DRVLSB.ADD_SUB_LEXER_NC +DRVLSB.ADD_XML_SECTION_C +DRVLSB.ADD_XML_SECTION_NC +DRVLSB.ADD_ZONE_SECTION_C +DRVLSB.ADD_ZONE_SECTION_NC +DRVLSB.CREATE_INDEX_SET_C +DRVLSB.CREATE_INDEX_SET_NC +DRVLSB.CREATE_PREFERENCE_C +DRVLSB.CREATE_PREFERENCE_NC +DRVLSB.CREATE_SECTION_GROUP_C +DRVLSB.CREATE_SECTION_GROUP_NC +DRVLSB.CREATE_SHADOW_INDEX +DRVLSB.CREATE_STOPLIST_C +DRVLSB.CREATE_STOPLIST_NC +DRVLSB.DELETE_MVDATA_VALUES +DRVLSB.DROP_DICTIONARY_C +DRVLSB.DROP_DICTIONARY_NC +DRVLSB.DROP_PREFERENCE_C +DRVLSB.DROP_PREFERENCE_NC +DRVLSB.DROP_SECTION_GROUP_C +DRVLSB.DROP_SECTION_GROUP_NC +DRVLSB.DROP_SHADOW_INDEX +DRVLSB.DROP_STOPLIST_C +DRVLSB.DROP_STOPLIST_NC +DRVLSB.EXCHANGE_SHADOW_INDEX +DRVLSB.FILTER +DRVLSB.GET_PKENCODE +DRVLSB.GIST +DRVLSB.HIGHLIGHT +DRVLSB.HIGHLIGHT_CLOB_QUERY +DRVLSB.INSERT_MVDATA_VALUES +DRVLSB.MARKUP +DRVLSB.MARKUP_CLOB_QUERY +DRVLSB.OPTIMIZE_INDEX +DRVLSB.PK_EXISTS +DRVLSB.POPULATE_PENDING +DRVLSB.RECREATE_INDEX_ONLINE +DRVLSB.REMOVE_INDEX_C +DRVLSB.REMOVE_INDEX_NC +DRVLSB.REMOVE_MDATA +DRVLSB.REMOVE_SDATA +DRVLSB.REMOVE_SECTION_C +DRVLSB.REMOVE_SECTION_NC +DRVLSB.REMOVE_SUB_LEXER_C +DRVLSB.REMOVE_SUB_LEXER_NC +DRVLSB.SENTIMENT +DRVLSB.SET_ATTRIBUTE_C +DRVLSB.SET_ATTRIBUTE_NC +DRVLSB.SET_SECTION_ATTRIBUTE_C +DRVLSB.SET_SECTION_ATTRIBUTE_NC +DRVLSB.SET_SEC_GRP_ATTR_C +DRVLSB.SET_SEC_GRP_ATTR_NC +DRVLSB.SYNC_INDEX +DRVLSB.THEMES +DRVLSB.TOKENS +DRVLSB.UNSET_ATTRIBUTE_C +DRVLSB.UNSET_ATTRIBUTE_NC +DRVLSB.UNSET_SECTION_ATTRIBUTE_C +DRVLSB.UNSET_SECTION_ATTRIBUTE_NC +DRVLSB.UPDATE_MVDATA_SET +DRVLSB.UPDATE_SDATA +DRVLSB.UPDATE_SUB_LEXER_C +DRVLSB.UPDATE_SUB_LEXER_NC +DRVODM. +DRVODM.FEATURE_EXPLAIN +DRVODM.FEATURE_PREP +DRVODM.FI2TTAB +DRVODM.FVSTAB +DRVODM.GET_FEATURES +DRVODM.GET_SUGGESTIONS +DRVODM.ODMKTRAINSET +DRVODM.ODMTRAINSET +DRVODM.ODM_DRPMODEL +DRVODM.ODM_GENMODEL +DRVODM.ODM_MODELNAME +DRVODM.ODM_READKMEANMODEL +DRVODM.SVM_TRAIN +DRVPARX. +DRVPARX.CREATESUBLEXTOKENS +DRVPARX.FILTERCACHEGETSTATS +DRVPARX.GETFILTERCACHEENTRIES +DRVPARX.GETFILTERCACHEHITS +DRVPARX.GETFILTERCACHEREQUESTS +DRVPARX.GETFILTERCACHESIZE +DRVPARX.INDEXMAPDOCUMENTS +DRVPARX.INDEXOPTIMIZEPARFN +DRVPARX.PARALLELPOPUINDEX +DRVPARX.SETFILTERCACHEENTRIES +DRVPARX.SETFILTERCACHEHITS +DRVPARX.SETFILTERCACHEREQUESTS +DRVPARX.SETFILTERCACHESIZE +DRVPARX.TRACEGETTRACE +DRVRIO. +DRVRIO.CREATE_SHADOW_INDEX +DRVRIO.CREATE_SHADOW_PART +DRVRIO.CREATE_SHADOW_PARTSMD +DRVRIO.EXCHANGE_SHADOW_INDEX +DRVRIO.EXCHANGE_SHADOW_PART +DRVRIO.SWAP_SHADOW +DRVTMT. +DRVTMT.CLUSTER_TAB +DRVTMT.DOCCLS_TAB +DRVTMT.MODEL_TAB +DRVTMT.NOEX_TABNAME +DRVTMT.VERIFY_MODELTAB +DRVTMT.VERIFY_TRAINCAT +DRVTMT.VERIFY_TRAINDOC +DRVUTL. +DRVUTL.CHECK_BASE_TABLE +DRVUTL.CHECK_TEXT_DATASTORE_ACCESS +DRVUTL.CHKCOMPATIBLE +DRVUTL.CLEARINVOKER +DRVUTL.CURRENTUSERID +DRVUTL.GETCOMPATIBLE +DRVUTL.GETINVOKER +DRVUTL.GETINVOKERID +DRVUTL.GET_ORA_EVENT_LEVEL +DRVUTL.HASSYNCINMEMORY +DRVUTL.ISDGROLLINGUPGRADE +DRVUTL.ISINDEXTRACEON +DRVUTL.ISJSONCONSTRAINT +DRVUTL.ISLOGGINGLOCKDOWN +DRVUTL.ISPDBLOCKDOWN +DRVUTL.PARSE_OBJECT_NAME +DRVUTL.PROCEDURALLOGLEVEL +DRVUTL.SESS_SQE_DELETE +DRVUTL.SESS_SQE_EXISTS +DRVUTL.SESS_SQE_FIRST +DRVUTL.SESS_SQE_GET +DRVUTL.SESS_SQE_NEXT +DRVUTL.SESS_SQE_SET +DRVUTL.SETINVOKER +DRVUTL.SETVPDENABLE +DRVUTL.SET_ORA_EVENT_LEVEL +DRVUTL.VALIDATE_IXS_COLLIST +DRVUTL.VALIDATE_IXS_COLUMNS +DRVUTL.WRITE_TO_LOG +DRVXMD. +DRVXMD.ADD_BG_OPTIMIZE +DRVXMD.ALLOCATEDOCIDS +DRVXMD.AUTOOPT_CLO +DRVXMD.AUTOOPT_PREP +DRVXMD.AUTOOPT_PUSH_TOKEN +DRVXMD.CHKINDEXOPTION +DRVXMD.CTX_SQE_TBL_FUNC +DRVXMD.DECREMENTDOCCNT +DRVXMD.DROP_BG_OPTIMIZE +DRVXMD.GETBASETABLENAME +DRVXMD.GETDOCIDCOUNT +DRVXMD.GETFIELDSECNAME +DRVXMD.GETINDEXMD +DRVXMD.GETINDEXPARTITION +DRVXMD.GETINDEXSTATS +DRVXMD.GETMVFLAG +DRVXMD.GETNEXTID +DRVXMD.GETOBJDEFAULT +DRVXMD.GETPREFCLAOBJ +DRVXMD.GETSECDATATYPE +DRVXMD.GETSLXMDATASECID +DRVXMD.GET_FUNCTIONAL_CACHE_SIZE +DRVXMD.INCREMENTDOCCNT +DRVXMD.INDEXHASGTABLE +DRVXMD.NEXTINDEXCDI +DRVXMD.NEXTINDEXOBJECT +DRVXMD.NEXTINDEXVALUE +DRVXMD.NEXTPREFVALUE +DRVXMD.OPENINDEXMDSCAN +DRVXMD.OPENPREFVALUE +DRVXMD.OPTGETSTATE +DRVXMD.OPTGETTIMER +DRVXMD.OPTGETTYPE +DRVXMD.OPTSETSTATE +DRVXMD.OPTSTARTTIMER +DRVXMD.PROCESSN +DRVXMD.RECORDINDEXERROR +DRVXMD.RECORDOPTTOKENERROR +DRVXMD.RESOLVE_PATTERN +DRVXMD.RUN_BG_OPTIMIZE +DRVXMD.SELECTUSERANLDICTLOB +DRVXMD.SET_REVERSE_DOCID_SWITCH +DRVXMD.SUBSTRINGENABLED +DRVXMD.TXNALGETKEY +DRVXMD.TXNALSETKEY +DRVXTAB. +DRVXTAB.ADD_OFFSETS_COLUMN +DRVXTAB.ADD_R +DRVXTAB.ADJUSTSHADOWCOLUMNWIDTH +DRVXTAB.ADJUSTTTYPE +DRVXTAB.ALTERDOLLARITTYPE +DRVXTAB.CREATE_A_TABLE +DRVXTAB.CREATE_DATAGUIDE_TABLE +DRVXTAB.CREATE_F_TABLE +DRVXTAB.CREATE_G_TABLE +DRVXTAB.CREATE_INDEX_INDEXES +DRVXTAB.CREATE_INDEX_TABLES +DRVXTAB.CREATE_R_CON +DRVXTAB.CREATE_S_INDEX +DRVXTAB.CREATE_S_SEARCH_TABLES +DRVXTAB.CREATE_S_SORT_TABLE +DRVXTAB.CREATE_S_TABLES +DRVXTAB.DROP_DATAGUIDE_TABLE +DRVXTAB.DROP_FA_TABLES +DRVXTAB.DROP_G_TABLE +DRVXTAB.DROP_INDEX_TABLES +DRVXTAB.DROP_S_SEARCH_TABLES +DRVXTAB.EXCHANGE_INDEX_TABLES +DRVXTAB.GETTOKENTYPEWIDTH +DRVXTAB.GET_CONSTRAINT_NAME +DRVXTAB.GET_CREATE_SQL +DRVXTAB.GET_OBJECT_NAME +DRVXTAB.GET_OBJECT_PREFIX +DRVXTAB.PART_CREATE_S_TABLES +DRVXTAB.PART_EVENTS_OFF +DRVXTAB.PART_EVENTS_ON +DRVXTAB.POPULATE_PTABLE +DRVXTAB.REMOVE_R +DRVXTAB.RENAME_IDX_TABLE_PARTITIONS +DRVXTAB.RENAME_INDEX_TABLES +DRVXTAB.SWAP_INDEX_TEMP_TABLES +DRVXTAB.TRUNC_INDEX_TABLES +DRVXTABC. +DRVXTABC.CREATE_INDEXES +DRVXTABC.CREATE_TABLES +DRVXTABC.DROP_TABLES +DRVXTABC.POST_TRANSPORT +DRVXTABC.RECREATE_TRIGGER +DRVXTABC.RENAME_TABLES +DRVXTABC.TRUNC_TABLES +DRVXTABR. +DRVXTABR.CREATE_INDEXES +DRVXTABR.CREATE_TABLES +DRVXTABR.DROP_TABLES +DRVXTABR.RENAME_TABLES +DRVXTABR.TRUNC_TABLES +DRVXTABX. +DRVXTABX.CREATE_INDEXES +DRVXTABX.CREATE_TABLES +DRVXTABX.DROP_TABLES +DRVXTABX.RENAME_TABLES +DRVXTABX.TRUNC_TABLES +DR_DEF. +DSB_EXPONENT +DSB_WIDTH +DSCN-B +DSCN-W +DSCN_BASE +DSCN_WRAP +DST_DATABASE_NAME +DST_QUEUE_NAME +DST_QUEUE_SCHEMA +DST_UPGRADE_INSERT_CONV +DTIME +DTP +DUAL +DUMMY +DUPID +DUPLICATE +DUPLICATED +DUP_JOIN_KEY_COUNT +DUP_POSITION +DURATION +DURATION_SECS +DVLANG. +DV_ACTION_CODE +DV_ACTION_NAME +DV_ACTION_OBJECT_NAME +DV_COMMENT +DV_DATABASE_NAME. +DV_DICT_OBJ_NAME. +DV_DICT_OBJ_OWNER. +DV_DICT_OBJ_TYPE. +DV_EXTENDED_ACTION_CODE +DV_FACTOR_CONTEXT +DV_GRANTEE +DV_ID_TO_NAME. +DV_ID_TO_TYPE. +DV_INSTANCE_NUM. +DV_JOB_INVOKER. +DV_JOB_OWNER. +DV_LOGIN_USER. +DV_OBJECT_STATUS +DV_RETURN_CODE +DV_RULE_SET_NAME +DV_SQL_TEXT. +DV_SYSEVENT. +DYNAMIC +DYNAMIC_COST +DYNAMIC_SAMPLING +DYNAMIC_SAMPLING_EST_CDN +DYNCOST +DYN_ALL_CACHE +D_OBJ_TYPE +D_SUB_OBJ_NAME1 +D_SUB_OBJ_NAME2 +D_SUB_OBJ_NAME3 +D_SUB_OBJ_NAME4 +D_TOP_OBJ_NAME +ECID +ECONTEXT_ID +EDITION +EDITIONABLE +EDITIONABLE_TYPE +EDITIONING_VIEW +EDITIONS_ENABLED +EDITION_ID +EDITION_MISMATCH +EDITION_NAME +EFFECTIVE_BYTES_PER_SECOND +ELAPSEDPERCALL +ELAPSED_APPLY_TIME +ELAPSED_CAPTURE_TIME +ELAPSED_DEQUEUE_TIME +ELAPSED_ENQUEUE_TIME +ELAPSED_IDLE_TIME +ELAPSED_LCR_TIME +ELAPSED_PAUSE_TIME +ELAPSED_PICKLE_TIME +ELAPSED_PROPAGATION_TIME +ELAPSED_REDO_WAIT_TIME +ELAPSED_RULE_EVALUATION_TIME +ELAPSED_RULE_TIME +ELAPSED_SCHEDULE_TIME +ELAPSED_SECONDS +ELAPSED_SEND_TIME +ELAPSED_SPILL_TIME +ELAPSED_TIME +ELAPSED_TIME_DELTA +ELAPSED_TIME_DIFF +ELAPSED_TIME_TOTAL +ELAPSED_TRANSFORMATION_TIME +ELAPSED_UNPICKLE_TIME +ELEMENT +ELEMENT_ID +ELEMENT_NAME +ELEMENT_SUBSTITUTABLE +ELEM_CFGID +ELEM_DESCR +ELEM_IDX +ELEM_NAME +ELEM_NSUBELEM +ELEM_OFFSET +ELEM_SIZE +ELEM_STORAGE +ELEM_TYPE +ELEM_TYPE_MOD +ELEM_TYPE_NAME +ELEM_TYPE_OWNER +ELEM_TYPE_PACKAGE +ELIMINATE_JOIN +ELIMINATE_OBY +ELIMINATE_SQ +ELIM_GROUPBY +ELOCATIONSETJVMHEAPSIZE. +ELOCATION_EDGE_LINK_LEVEL. +EMON# +EMON_ID +EMPTY_BLOCKS +ENABLE +ENABLED +ENABLED_BY_SCHEDULER +ENABLED_OPT +ENABLED_OPTION +ENABLED_STATUS +ENABLED_THREAD_MAP +ENABLEGEORASTER. +ENABLE_CHANGE# +ENABLE_PARALLEL_DML +ENABLE_TIME +ENCRYPT +ENCRYPTED +ENCRYPTEDKEY +ENCRYPTEDTS +ENCRYPTION +ENCRYPTIONALG +ENCRYPTION_ALG +ENCRYPT_IN_BACKUP +ENDIAN +ENDIANNESS +ENDIAN_FORMAT +ENDOFFSET +ENDPOINT_ACTUAL_VALUE +ENDPOINT_ACTUAL_VALUE_RAW +ENDPOINT_NUMBER +ENDPOINT_REPEAT_COUNT +ENDPOINT_VALUE +END_DATE +END_DBA +END_ID +END_INTERVAL_TIME +END_INTERVAL_TIME_TZ +END_MONITORING +END_OF_FETCH_COUNT +END_OF_FETCH_COUNT_DELTA +END_OF_FETCH_COUNT_TOTAL +END_OF_REDO +END_OF_REDO_TYPE +END_RESETLOGS_SCN +END_RESETLOGS_TIME +END_ROWID +END_SCN +END_SNAP_ID +END_SNAP_TIME +END_TIME +END_TRACK_TIME +END_TS +ENGINE_STATUS +ENQIDX +ENQUEUED_DELAY_MSGS +ENQUEUED_EXPIRY_MSGS +ENQUEUED_MSGS +ENQUEUE_CPU_TIME +ENQUEUE_ENABLED +ENQUEUE_MESSAGE_CREATE_TIME +ENQUEUE_MESSAGE_NUMBER +ENQUEUE_TIME +ENQUEUE_TRANSACTIONS +ENQ_TIME +ENTITY_ID +ENTITY_NAME +ENTITY_SEQUENCE +ENTITY_TYPE +ENTRYID +ENTRY_ID +ENTRY_NUMBER +ENV +ENVIRONMENT +ENV_HASH +EQ_NAME +EQ_TYPE +ERROR +ERROR# +ERROR1 +ERROR2 +ERRORMSG +ERRORNUM +ERRORS +ERROR_ARG1 +ERROR_ARG10 +ERROR_ARG11 +ERROR_ARG12 +ERROR_ARG2 +ERROR_ARG3 +ERROR_ARG4 +ERROR_ARG5 +ERROR_ARG6 +ERROR_ARG7 +ERROR_ARG8 +ERROR_ARG9 +ERROR_CNT +ERROR_CODE +ERROR_COUNT +ERROR_CREATION +ERROR_CREATION_TIME +ERROR_DATE +ERROR_FACILITY +ERROR_HANDLER +ERROR_INSTANCE_ID +ERROR_INSTANCE_SEQUENCE +ERROR_MESSAGE +ERROR_MSG +ERROR_NUMBER +ERROR_PARAMETER1 +ERROR_PARAMETER2 +ERROR_PARAMETER3 +ERROR_PARAMETER4 +ERROR_PARAMETER5 +ERROR_POSITION +ERROR_SIZE +ERROR_SOURCE +ERROR_TYPE +ERRREQUESTSPERSEC +ERR_NO +ERR_NUMBER +ERR_TXT +ESC +ESCALATED_HANG +ESCAPE_CHAR +ESTD_BG_PROCESSES +ESTD_BG_UNEVICTIONS +ESTD_BG_UNEVICTION_RATE +ESTD_BUFFER_CACHE_SIZE +ESTD_CACHED_SUBSHARDS +ESTD_CACHE_WRITES +ESTD_CACHE_WRITE_FACTOR +ESTD_CLUSTER_AVAILABLE_TIME +ESTD_CLUSTER_READS +ESTD_CLUSTER_READ_TIME +ESTD_DB_TIME +ESTD_DB_TIME_FACTOR +ESTD_EVICTIONS +ESTD_EVICTION_RATE +ESTD_EXTRA_BYTES_RW +ESTD_FG_UNEVICTIONS +ESTD_FG_UNEVICTION_RATE +ESTD_LC_LOAD_TIME +ESTD_LC_LOAD_TIME_FACTOR +ESTD_LC_MEMORY_OBJECTS +ESTD_LC_MEMORY_OBJECT_HITS +ESTD_LC_SIZE +ESTD_LC_TIME_SAVED +ESTD_LC_TIME_SAVED_FACTOR +ESTD_MULTIPASSES_EXECUTIONS +ESTD_ONEPASS_EXECUTIONS +ESTD_OPTIMAL_EXECUTIONS +ESTD_OVERALLOC_COUNT +ESTD_PCT_OF_DB_TIME_FOR_READS +ESTD_PGA_CACHE_HIT_PERCENTAGE +ESTD_PHYSICAL_READS +ESTD_PHYSICAL_READ_FACTOR +ESTD_PHYSICAL_READ_TIME +ESTD_SHARED_POOL_SIZE +ESTD_SIZE_TYPE +ESTD_SPILL_COUNT +ESTD_SPILL_TIME +ESTD_TIME +ESTD_TIME_TO_DRAIN +ESTD_TIME_TO_DRAIN_NO_ENQ +ESTD_TOTAL_EXECUTIONS +ESTD_TOTAL_IOS +ESTD_TOTAL_IO_FACTOR +ESTD_TOTAL_WRITES +ESTD_TOTAL_WRITE_FACTOR +ESTD_UNCACHED_SUBSHARDS +ESTD_UNSPILL_COUNT +ESTD_UNSPILL_TIME +ESTIMATE +ESTIMATED_COST +ESTIMATED_CPU_TIME +ESTIMATED_DATA_LOSS +ESTIMATED_DOP +ESTIMATED_DURATION +ESTIMATED_EXECUTION_LIMIT_HIT +ESTIMATED_EXECUTION_TIME +ESTIMATED_FLASHBACK_SIZE +ESTIMATED_IO_RATE +ESTIMATED_MTTR +ESTIMATED_ONEPASS_SIZE +ESTIMATED_OPTIMAL_SIZE +ESTIMATED_REPAIR_TIME +ESTIMATED_SIZE_BYTES +ESTIMATED_TEMP +ESTIMATED_UNCMP_SIZE_BYTES +ESTIMATED_UNDO_RATE +ESTIMATED_WEIGHT +ESTIMATE_TYPE +EST_MINUTES +EST_RATE +EST_REPAIR_TIME +EST_WORK +ET_ATTR_PREFIX +EVALCNT +EVALUATE_RULE_SET. +EVALUATIONS +EVALUATION_CONTEXT_COMMENT +EVALUATION_CONTEXT_NAME +EVALUATION_CONTEXT_OBJECT_ID +EVALUATION_CONTEXT_OWNER +EVALUATION_COUNT +EVALUATION_EDITION +EVALUATION_FUNCTION +EVALUATION_FUNCTION_CALLS +EVALUATION_INTERVAL +EVENT +EVENT# +EVENT. +EVENT.SET +EVENT.SETDEFAULT +EVENT.SET_C +EVENTID +EVENT_ACTION. +EVENT_ACTION_LEVEL. +EVENT_CONDITION +EVENT_DATE +EVENT_FLAG +EVENT_ID +EVENT_LEVEL. +EVENT_NAME +EVENT_NAME. +EVENT_QUEUE_AGENT +EVENT_QUEUE_NAME +EVENT_QUEUE_OWNER +EVENT_RULE +EVENT_SCHEDULE_NAME +EVENT_SCHEDULE_OWNER +EVENT_TARGET. +EVENT_TIME +EVENT_TIMESTAMP +EVICTDC +EXACT_MATCHING_SIGNATURE +EXCEPTION_CLASS +EXCEPTION_INDEX +EXCHANGE. +EXCHANGE.EXCHANGE_OUT +EXCLUDE +EXCLUDED_OBJECT +EXCLUDED_SCHEMA +EXCLUDED_USER +EXCLUSION_RULE_EXISTS +EXE +EXECASUSER. +EXECUTE +EXECUTED +EXECUTEDDL. +EXECUTE_END_TIME +EXECUTE_EVENT +EXECUTE_START_TIME +EXECUTIONS +EXECUTIONS_DELTA +EXECUTIONS_TOTAL +EXECUTION_CONTEXT_ID +EXECUTION_CONTEXT_SEQUENCE +EXECUTION_COUNT +EXECUTION_DESCRIPTION +EXECUTION_END +EXECUTION_ID +EXECUTION_LAST_MODIFIED +EXECUTION_MODE +EXECUTION_NAME +EXECUTION_ORIGIN +EXECUTION_PLAN +EXECUTION_SEQUENCE +EXECUTION_START +EXECUTION_TIME +EXECUTION_TYPE +EXECUTION_TYPE# +EXECUTION_WAITERS +EXEC_INFO +EXEC_SHARD_PLSQL. +EXEC_SQL. +EXEC_STATUS +EXEC_TIME +EXISTENT +EXISTING_DATA_TIMESTAMP +EXPAND_GSET_TO_UNION +EXPAND_TABLE +EXPBLKRELCNT +EXPBLKREUCNT +EXPECTED_ERROR# +EXPECTED_ERROR_MESSAGE +EXPECTED_ROW_COUNT +EXPECTED_SIZE +EXPID +EXPIRATION +EXPIRATION_AFTER_GRACE +EXPIRED +EXPIREDBLKS +EXPIRED_MSGS +EXPIRE_TIME +EXPIRY_DATE +EXPLAIN_PLAN_CURSOR +EXPORT_SCN +EXPORT_TIME +EXPORT_VERSION +EXPRESSION +EXPRESSION_ID +EXPRESSION_TEXT +EXPR_CORR_CHECK +EXPSTEALCNT +EXP_TYPE +EXP_VERSION +EXTCNT +EXTENDED_DATA_LINK +EXTENDED_DATA_LINK_MAP +EXTENDED_TIMESTAMP +EXTENDS +EXTEND_FLAG +EXTENSION +EXTENSION_NAME +EXTENTS +EXTENTS_CACHED +EXTENTS_COALESCED +EXTENTS_USED +EXTENT_CNT +EXTENT_HITS +EXTENT_ID +EXTENT_MANAGEMENT +EXTENT_SIZE +EXTERNAL +EXTERNAL_ATTR_NAME +EXTERNAL_COLUMN_NAME +EXTERNAL_FILE +EXTERNAL_NAME +EXTERNAL_SCN +EXTERNAL_SOURCE +EXTERNAL_USERID +EXTERNAL_VAR_NAME +EXTRACT_NAME +EXT_ADDR +EXT_ELEM_OFF +EXT_FILE_OFF +EXT_LEN +EXT_NAME +EXT_NUM +EXT_SIZE +EXT_TO_OBJ +EXT_TYPE +EX_OR_INCLUDE +F$AUTHENTICATION_METHOD. +F$CLIENT_IP. +F$DATABASE_DOMAIN. +F$DATABASE_HOSTNAME. +F$DATABASE_INSTANCE. +F$DATABASE_IP. +F$DATABASE_NAME. +F$DOMAIN. +F$DV$_CLIENT_IDENTIFIER. +F$DV$_DBLINK_INFO. +F$DV$_MODULE. +F$ENTERPRISE_IDENTITY. +F$IDENTIFICATION_TYPE. +F$LANG. +F$LANGUAGE. +F$MACHINE. +F$NETWORK_PROTOCOL. +F$PROXY_ENTERPRISE_IDENTITY. +F$PROXY_USER. +F$SESSION_USER. +FACILITY +FACT +FACTORIZE_JOIN +FACT_NAME +FACT_OWNER +FACT_TABLE +FAILED_LOGINS +FAILED_OVER +FAILED_REQ# +FAILGROUP +FAILGROUP_LABEL +FAILGROUP_TYPE +FAILOVER_DELAY +FAILOVER_METHOD +FAILOVER_RESTORE +FAILOVER_RETRIES +FAILOVER_TYPE +FAILURE +FAILURES +FAILURE_COUNT +FAILURE_ID +FAILURE_REASON +FAIL_BLOCK +FAIL_DATE +FAIL_ON_SCRIPT_ERROR +FAIL_RESULTS +FAIL_SEQUENCE +FAIL_TIME +FAIRNESS_CLEARS +FAIRNESS_DOWN_CONVERTS +FAL +FAMILY +FASTGETS +FAST_REFRESHABLE +FAST_START_IO_TARGET_REDO_BLKS +FATAL_BACKGROUND +FBK +FBTSCAN +FCOUNT +FDG_COUNT +FDG_ID +FDG_SET_ID +FDS_CLASS_ID +FDS_INST_ID +FEATURE +FEATURE_INFO +FEATURE_NAME +FEATURE_USAGE. +FETCHCOLS +FETCHES +FETCHES_DELTA +FETCHES_TOTAL +FETCH_ILABEL. +FGA_POLICY_NAME +FIELDS +FIELD_CLASS +FIELD_COUNT +FIELD_INDEX +FIELD_LENGTH +FIELD_NAME +FIELD_SEQ# +FIELD_TYPE +FILE# +FILEGROUP_INCARN +FILEGROUP_INCARNATION +FILEGROUP_NUMBER +FILEHANDLE +FILEID +FILENAME +FILENUM +FILENUMBER +FILESIZE +FILESIZE_DISPLAY +FILETYPE +FILETYPE_ID +FILETYPE_KEY +FILETYPE_NAME +FILEWATCH_REQUEST_RESEND. +FILE_BLOCK_SIZE +FILE_CFGID +FILE_DIRECTORY +FILE_GROUP_NAME +FILE_GROUP_OWNER +FILE_ID +FILE_ID_MD +FILE_INCARNATION +FILE_MAP_IDX +FILE_MAXSIZE +FILE_NAME +FILE_NEXTS +FILE_NO +FILE_NUMBER +FILE_OFFSET +FILE_PATH +FILE_SIZE +FILE_SIZE_BLKS +FILE_SIZE_COPY +FILE_SIZE_MD +FILE_SPEC +FILE_STATE +FILE_STATUS +FILE_STRUCTURE +FILE_TIMESTAMP +FILE_TIMESTAMP_COPY +FILE_TIMESTAMP_MD +FILE_TYPE +FILE_WATCHER_NAME +FILE_WATCHER_OWNER +FILTERED +FILTERED_SCN +FILTERS_USED +FILTER_COLUMNS +FILTER_CONDITION +FILTER_ID +FILTER_NAME +FILTER_PREDICATES +FILTER_RULE +FILTER_SET_NAME +FINAL +FINAL_BLOCKING_INSTANCE +FINAL_BLOCKING_SESSION +FINAL_BLOCKING_SESSION_STATUS +FINAL_NUM_ROWS +FINAL_SIZE +FINDINGS +FINDING_ID +FINDING_NAME +FINISH_TIME +FIRE_APPLY_TRIGGER +FIRE_ONCE +FIRSTINC_TIME +FIRSTREAD_EVENT +FIRST_ACTIVITY_TIME +FIRST_CHANGE# +FIRST_CHANGE_TIME +FIRST_DB_REPORT_TIME +FIRST_EM_REPORT_TIME +FIRST_HIT_EVALUATIONS +FIRST_INCIDENT +FIRST_INDEX +FIRST_LCR_TIME +FIRST_LOAD_TIME +FIRST_LOGON_TIME +FIRST_MESSAGE_CREATE_TIME +FIRST_MESSAGE_NUMBER +FIRST_MESSAGE_POSITION +FIRST_MESSAGE_TIME +FIRST_NONLOGGED_SCN +FIRST_NONLOGGED_TIME +FIRST_POSITION +FIRST_REFRESH_TIME +FIRST_REPORT_TIME +FIRST_ROWS +FIRST_SCN +FIRST_TIME +FIRST_USAGE_DATE +FIXED +FIXED_COST +FIXED_SIZE +FIXED_TABLE_SEQUENCE +FIXED_TIME +FIXWRITE_TIME +FLAG +FLAGS +FLASHBACK_ARCHIVE# +FLASHBACK_ARCHIVE_MISMATCH +FLASHBACK_ARCHIVE_NAME +FLASHBACK_CURSOR +FLASHBACK_DATA +FLASHBACK_DATABASE_ALLOWED +FLASHBACK_ON +FLASHBACK_SIZE +FLASHBACK_TABLE_MISMATCH +FLASHFILE# +FLASH_BYTES +FLASH_CACHE +FLASH_DISK_TYPE +FLASH_LARGE_IO_QUEUE_TIME +FLASH_LARGE_IO_REQS +FLASH_LARGE_IO_SERVICE_TIME +FLASH_REQUESTS +FLASH_SMALL_IO_QUEUE_TIME +FLASH_SMALL_IO_REQS +FLASH_SMALL_IO_SERVICE_TIME +FLOOD_CONTROLLED +FLOOD_CONTROL_STR +FLOW_CONTROL +FLUSH +FLUSH0 +FLUSH1 +FLUSH10 +FLUSH100 +FLUSH1000 +FLUSH10000 +FLUSHES +FLUSHES_QUEUED +FLUSH_COUNT +FLUSH_ELAPSED +FLUSH_MAX_TIME +FLUSH_QUEUE_FULL +FMRREG_COUNT +FNAME +FORCE +FORCED_READS +FORCED_WRITES +FORCE_FULL_DB_CACHING +FORCE_HARD_PARSE +FORCE_LOGGING +FORCE_MATCHING +FORCE_MATCHING_SIGNATURE +FORCE_NOLOGGING +FORCE_TIME +FORCE_XML_QUERY_REWRITE +FOREIGN_CDB_DBID +FOREIGN_CREATION_CHANGE# +FOREIGN_CREATION_TIME +FOREIGN_DBID +FOREIGN_KEY +FOREIGN_KEY_TYPE +FOREIGN_PDB_ID +FOREIGN_SQL_SYNTAX +FORMAT +FORMATID +FORWARD_BLOCK +FORWARD_BLOCK_DBLINK +FOR_XTTS +FREE +FREED_EXTENTS +FREELISTS +FREELIST_GROUPS +FREENESS +FREEPOOLS +FREEZE_TIME +FREE_BLOCKS +FREE_BUFFER_INSPECTED +FREE_BUFFER_WAIT +FREE_COUNT +FREE_EXTENTS +FREE_GC_ELEMENTS +FREE_LOCK_ELEMENTS +FREE_MB +FREE_REQUESTS +FREE_SPACE +FREQUENCY +FRESHNESS +FRESH_MV +FROM_ADDRESS +FROM_CLAUSE +FROM_COLUMN_NAME +FROM_HASH +FROM_NODE_ID +FROM_SCHEMA_NAME +FROM_TABLE_NAME +FROM_TYPE +FROM_VAL +FROZEN +FR_OPERATIONS +FSNAME +FS_FAILOVER_CURRENT_TARGET +FS_FAILOVER_OBSERVER_HOST +FS_FAILOVER_OBSERVER_PRESENT +FS_FAILOVER_STATUS +FS_FAILOVER_THRESHOLD +FS_NAME +FS_NUM_WRITES +FS_TIME_TO_WRITE +FS_WRITE_TIMESTAMP +FTPURITYPE.CREATEFTPURI +FTPURITYPE.FTPURITYPE +FTPURITYPE.GETBLOB +FTPURITYPE.GETCLOB +FTPURITYPE.GETCONTENTTYPE +FTPURITYPE.GETEXTERNALURL +FTPURITYPE.GETURL +FTPURITYPE.GETXML +FULL +FULLREFRESHTIM +FULLY_BACKED_UP +FULL_HASH_VALUE +FULL_NAME +FULL_OUTER_JOIN_TO_OUTER +FULL_PLAN_HASH_VALUE +FULL_PROPERTY_VALUE +FULL_SCAN +FULL_SIZE +FULL_SNAPSHOT_PATH +FULL_TEXT +FUNC +FUNCIDX_STATUS +FUNCSTATS.ODCIGETINTERFACES +FUNCSTATS.ODCISTATSCOLLECT +FUNCSTATS.ODCISTATSDELETE +FUNCSTATS.ODCISTATSFUNCTIONCOST +FUNCSTATS.ODCISTATSINDEXCOST +FUNCSTATS.ODCISTATSSELECTIVITY +FUNCTION +FUNCTIONALITY +FUNCTION_ID +FUNCTION_NAME +FUNC_ID +FUTURE_MASTER +FUTURE_PRIMARY +FUZZY +GAP_DONE +GAP_NEXT_SCN +GAP_NEXT_TIME +GAP_RET +GAP_RET2 +GAP_SEQNO +GAP_STATUS +GATENLP_EXTRACTOR.EXTRACTRDF +GATENLP_EXTRACTOR.GATENLP_EXTRACTOR +GATENLP_EXTRACTOR.GETDESCRIPTION +GATHER_OPTIMIZER_STATISTICS +GATHER_PLAN_STATISTICS +GBY_CONC_ROLLUP +GBY_PUSHDOWN +GCPERREQUEST +GCWAITPERREQUEST +GC_BUFFER_BUSY_DELTA +GC_BUFFER_BUSY_TOTAL +GC_CR_BLOCKS_RECEIVED_DELTA +GC_CR_BLOCKS_RECEIVED_TOTAL +GC_CR_BLOCKS_SERVED_DELTA +GC_CR_BLOCKS_SERVED_TOTAL +GC_CU_BLOCKS_RECEIVED_DELTA +GC_CU_BLOCKS_RECEIVED_TOTAL +GC_CU_BLOCKS_SERVED_DELTA +GC_CU_BLOCKS_SERVED_TOTAL +GC_ELEMENT_ADDR +GC_ELEMENT_NAME +GC_MASTERING_POLICY +GC_REMOTE_GRANTS_DELTA +GC_REMOTE_GRANTS_TOTAL +GD_ADDRESS +GENCONNECTIONINTERFACE. +GENCONNECTIONINTERFACE.CLOSE +GENCONNECTIONINTERFACE.EVALUATEBOOLEANEXPRESSION +GENCONNECTIONINTERFACE.EVALUATEDATE2EXPRESSION +GENCONNECTIONINTERFACE.EVALUATEDATEEXPRESSION +GENCONNECTIONINTERFACE.EVALUATEDECIMALEXPRESSION +GENCONNECTIONINTERFACE.EVALUATEINTEGEREXPRESSION +GENCONNECTIONINTERFACE.EVALUATESHORTDECIMALEXPRESSION +GENCONNECTIONINTERFACE.EVALUATESHORTINTEGEREXPRESSION +GENCONNECTIONINTERFACE.EVALUATESTRINGEXPRESSION +GENCONNECTIONINTERFACE.EVALUATESTRINGLISTEXPRESSION +GENCONNECTIONINTERFACE.EXECUTECOMMAND +GENCONNECTIONINTERFACE.GETCONNECTIONSTATISTICS +GENCONNECTIONINTERFACE.GETDEFAULTDATABASE +GENCONNECTIONINTERFACE.OPENDATABASE +GENCURSORMANAGERINTERFACE. +GENCURSORMANAGERINTERFACE.CLOSE +GENCURSORMANAGERINTERFACE.FETCH2BLOCKS +GENCURSORMANAGERINTERFACE.FETCH2INITIALBLOCKS +GENCURSORMANAGERINTERFACE.FETCH3BLOCKS +GENCURSORMANAGERINTERFACE.FETCH3INITIALBLOCKS +GENCURSORMANAGERINTERFACE.FETCHBLOCKS +GENCURSORMANAGERINTERFACE.FETCHINITIALBLOCKS +GENCURSORMANAGERINTERFACE.GENERATESQL +GENCURSORMANAGERINTERFACE.GETGENERATIONINFO +GENCURSORMANAGERINTERFACE.GETINTERNALID +GENCURSORMANAGERINTERFACE.UPDATESPECIFICATION +GENDATABASEINTERFACE. +GENDATAPROVIDERINTERFACE. +GENDATAPROVIDERINTERFACE.CLOSE +GENDATAPROVIDERINTERFACE.CREATEDFNMGRWITHNOARGS +GENDATAPROVIDERINTERFACE.EVALUATEBOOLEANEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEDATE2EXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEDATEEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEDECIMALEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATEINTEGEREXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESHORTDECIMALEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESHORTINTEGEREXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESTRINGEXPRESSION +GENDATAPROVIDERINTERFACE.EVALUATESTRINGLISTEXPRESSION +GENDATAPROVIDERINTERFACE.EXECUTECOMMAND +GENDATAPROVIDERINTERFACE.GENERIC +GENDATAPROVIDERINTERFACE.GETCONNECTIONSTATISTICS +GENDATAPROVIDERINTERFACE.GETDEFAULTDATABASE +GENDATAPROVIDERINTERFACE.OPENDATABASE +GENDATATYPEIDCONSTANTS. +GENDEFINITIONMANAGERINTERFACE. +GENDEFINITIONMANAGERINTERFACE.CLOSE +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS2 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS3 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS4 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS5 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRS6 +GENDEFINITIONMANAGERINTERFACE.CRTCURMGRWTHINPUTTYPES +GENDEFINITIONMANAGERINTERFACE.GENERIC +GENDEFINITIONMANAGERINTERFACE.GETINTERNALID +GENDEFINITIONMANAGERINTERFACE.MERGESRCINFOTOPARENTDFNMGR +GENDEFINITIONMANAGERINTERFACE.PREPARE2 +GENDEFINITIONMANAGERINTERFACE.ROLLBACK +GENERATED +GENERATION +GENERATIONS +GENERATION_COST_SECONDS +GENERATION_TIME +GENERATION_TYPE +GENMDMCLASSCONSTANTS. +GENMDMOBJECTIDCONSTANTS. +GENMDMPROPERTYIDCONSTANTS. +GENMETADATAPROVIDERINTERFACE. +GENMETADATAPROVIDERINTERFACE.GETID +GENMETADATAPROVIDERINTERFACE.GETMETADATACLOB +GENSERVERINTERFACE. +GENSERVERINTERFACE.MAKECONNECTION +GETANYTYPEFROMPERSISTENT. +GETHITRATIO +GETHITS +GETLONG. +GETMDSYSEVENT. +GETMISSES +GETS +GETSHARDINGMODE. +GETTVOID. +GETXMLSCHEMADEPENDENCYLIST. +GET_APPLICATION_DIFF. +GET_AUD_PDB_LIST. +GET_ERROR$. +GET_ERROR$.ERROR_LINES +GET_FACTOR. +GET_FACTOR_LABEL. +GET_MAX_CHECKPOINT. +GET_OLDVERSION_HASHCODE. +GET_OLDVERSION_HASHCODE2. +GET_REALM_PARAMETERS. +GET_REQUIRED_SCOPE. +GET_STATS_EXTENSION. +GET_TABLE_NAME. +GET_TOPO_GEOMETRY_LAYER_ARRAY. +GET_TOPO_GEOMETRY_LAYER_TABLE. +GET_TRUST_LEVEL. +GET_TRUST_LEVEL_FOR_IDENTITY. +GET_XDB_TABLESPACE. +GLOBAL +GLOBALID +GLOBAL_DBNAME +GLOBAL_HANG +GLOBAL_NAME +GLOBAL_SERVICE +GLOBAL_STATS +GLOBAL_TRAN_ID +GLOBAL_UID +GLOBAL_USERID +GOAL +GOODNESS +GRA +GRANTABLE +GRANTED_GROUP +GRANTED_ROLE +GRANTED_ROLE_TYPE +GRANTEE +GRANTEE. +GRANTEE_NAME +GRANTEE_TYPE +GRANTOR +GRANTPATH_TO_STRING. +GRANT_LEVEL +GRANT_OPTION +GRANT_SELECT_PRIVILEGES +GRANT_TYPE +GRANULE_SIZE +GROUP# +GROUPID +GROUPS +GROUP_ID +GROUP_KEY_COUNT +GROUP_NAME +GROUP_NUMBER +GROUP_OR_SUBPLAN +GROUP_TYPE +GSMLOGOFF. +GSM_FLAGS +GSM_INFO.GSM_INFO +GUARANTEE_FLASHBACK_DATABASE +GUARD_STATUS +GUID +GUID_BASE64 +GV$ACCESS +GV$ACTIVE_INSTANCES +GV$ACTIVE_SERVICES +GV$ACTIVE_SESSION_HISTORY +GV$ACTIVE_SESS_POOL_MTH +GV$ADVISOR_CURRENT_SQLPLAN +GV$ADVISOR_PROGRESS +GV$ALERT_TYPES +GV$AQ +GV$AQ1 +GV$AQ_BACKGROUND_COORDINATOR +GV$AQ_BMAP_NONDUR_SUBSCRIBERS +GV$AQ_CACHED_SUBSHARDS +GV$AQ_CROSS_INSTANCE_JOBS +GV$AQ_INACTIVE_SUBSHARDS +GV$AQ_IPC_ACTIVE_MSGS +GV$AQ_IPC_MSG_STATS +GV$AQ_IPC_PENDING_MSGS +GV$AQ_JOB_COORDINATOR +GV$AQ_MESSAGE_CACHE +GV$AQ_MESSAGE_CACHE_ADVICE +GV$AQ_MESSAGE_CACHE_STAT +GV$AQ_MSGBM +GV$AQ_NONDUR_REGISTRATIONS +GV$AQ_NONDUR_SUBSCRIBER +GV$AQ_NONDUR_SUBSCRIBER_LWM +GV$AQ_NOTIFICATION_CLIENTS +GV$AQ_REMOTE_DEQUEUE_AFFINITY +GV$AQ_SERVER_POOL +GV$AQ_SHARDED_SUBSCRIBER_STAT +GV$AQ_SUBSCRIBER_LOAD +GV$AQ_UNCACHED_SUBSHARDS +GV$ARCHIVE +GV$ARCHIVED_LOG +GV$ARCHIVE_DEST +GV$ARCHIVE_DEST_STATUS +GV$ARCHIVE_GAP +GV$ARCHIVE_PROCESSES +GV$ASH_INFO +GV$ASM_ACFSREPL +GV$ASM_ACFSREPLTAG +GV$ASM_ACFSSNAPSHOTS +GV$ASM_ACFSTAG +GV$ASM_ACFSVOLUMES +GV$ASM_ACFS_ENCRYPTION_INFO +GV$ASM_ACFS_SECURITY_INFO +GV$ASM_ACFS_SEC_ADMIN +GV$ASM_ACFS_SEC_CMDRULE +GV$ASM_ACFS_SEC_REALM +GV$ASM_ACFS_SEC_REALM_FILTER +GV$ASM_ACFS_SEC_REALM_GROUP +GV$ASM_ACFS_SEC_REALM_USER +GV$ASM_ACFS_SEC_RULE +GV$ASM_ACFS_SEC_RULESET +GV$ASM_ACFS_SEC_RULESET_RULE +GV$ASM_ALIAS +GV$ASM_ATTRIBUTE +GV$ASM_AUDIT_CLEANUP_JOBS +GV$ASM_AUDIT_CLEAN_EVENTS +GV$ASM_AUDIT_CONFIG_PARAMS +GV$ASM_AUDIT_LAST_ARCH_TS +GV$ASM_AUDIT_LOAD_JOBS +GV$ASM_CLIENT +GV$ASM_DBCLONE_INFO +GV$ASM_DISK +GV$ASM_DISKGROUP +GV$ASM_DISKGROUP_SPARSE +GV$ASM_DISKGROUP_STAT +GV$ASM_DISK_IOSTAT +GV$ASM_DISK_IOSTAT_SPARSE +GV$ASM_DISK_SPARSE +GV$ASM_DISK_SPARSE_STAT +GV$ASM_DISK_STAT +GV$ASM_ESTIMATE +GV$ASM_FILE +GV$ASM_FILEGROUP +GV$ASM_FILEGROUP_FILE +GV$ASM_FILEGROUP_PROPERTY +GV$ASM_FILESYSTEM +GV$ASM_OPERATION +GV$ASM_QUOTAGROUP +GV$ASM_TEMPLATE +GV$ASM_USER +GV$ASM_USERGROUP +GV$ASM_USERGROUP_MEMBER +GV$ASM_VOLUME +GV$ASM_VOLUME_STAT +GV$AUTO_BMR_STATISTICS +GV$AW_AGGREGATE_OP +GV$AW_ALLOCATE_OP +GV$AW_CALC +GV$AW_LONGOPS +GV$AW_OLAP +GV$AW_SESSION_INFO +GV$BACKUP +GV$BACKUP_ASYNC_IO +GV$BACKUP_CORRUPTION +GV$BACKUP_DATAFILE +GV$BACKUP_DEVICE +GV$BACKUP_NONLOGGED +GV$BACKUP_PIECE +GV$BACKUP_REDOLOG +GV$BACKUP_SET +GV$BACKUP_SPFILE +GV$BACKUP_SYNC_IO +GV$BGPROCESS +GV$BH +GV$BLOCKING_QUIESCE +GV$BSP +GV$BTS_STAT +GV$BT_SCAN_CACHE +GV$BT_SCAN_OBJ_TEMPS +GV$BUFFERED_PUBLISHERS +GV$BUFFERED_QUEUES +GV$BUFFERED_SUBSCRIBERS +GV$BUFFER_POOL +GV$BUFFER_POOL_STATISTICS +GV$CACHE +GV$CACHE_LOCK +GV$CACHE_TRANSFER +GV$CALLTAG +GV$CELL +GV$CELL_CONFIG +GV$CELL_CONFIG_INFO +GV$CELL_DB +GV$CELL_DB_HISTORY +GV$CELL_DISK +GV$CELL_DISK_HISTORY +GV$CELL_GLOBAL +GV$CELL_GLOBAL_HISTORY +GV$CELL_IOREASON +GV$CELL_IOREASON_NAME +GV$CELL_METRIC_DESC +GV$CELL_OFL_THREAD_HISTORY +GV$CELL_OPEN_ALERTS +GV$CELL_REQUEST_TOTALS +GV$CELL_STATE +GV$CELL_THREAD_HISTORY +GV$CHANNEL_WAITS +GV$CHUNK_METRIC +GV$CIRCUIT +GV$CLASS_CACHE_TRANSFER +GV$CLASS_PING +GV$CLEANUP_PROCESS +GV$CLIENT_SECRETS +GV$CLIENT_STATS +GV$CLONEDFILE +GV$CLUSTER_INTERCONNECTS +GV$CODE_CLAUSE +GV$COLUMN_STATISTICS +GV$CONFIGURED_INTERCONNECTS +GV$CONTAINERS +GV$CONTEXT +GV$CONTROLFILE +GV$CONTROLFILE_RECORD_SECTION +GV$CON_EVENT_HISTOGRAM_MICRO +GV$CON_SYSMETRIC +GV$CON_SYSMETRIC_HISTORY +GV$CON_SYSMETRIC_SUMMARY +GV$CON_SYSSTAT +GV$CON_SYSTEM_EVENT +GV$CON_SYSTEM_WAIT_CLASS +GV$CON_SYS_TIME_MODEL +GV$COPY_CORRUPTION +GV$COPY_NONLOGGED +GV$CORRUPT_XID_LIST +GV$CPOOL_CC_INFO +GV$CPOOL_CC_STATS +GV$CPOOL_CONN_INFO +GV$CPOOL_STATS +GV$CR_BLOCK_SERVER +GV$CURRENT_BLOCK_SERVER +GV$DATABASE +GV$DATABASE_BLOCK_CORRUPTION +GV$DATABASE_INCARNATION +GV$DATABASE_KEY_INFO +GV$DATABASE_REPLAY_PROGRESS +GV$DATAFILE +GV$DATAFILE_COPY +GV$DATAFILE_HEADER +GV$DATAGUARD_CONFIG +GV$DATAGUARD_PROCESS +GV$DATAGUARD_STATS +GV$DATAGUARD_STATUS +GV$DATAPUMP_JOB +GV$DATAPUMP_SESSION +GV$DBFILE +GV$DBLINK +GV$DB_CACHE_ADVICE +GV$DB_OBJECT_CACHE +GV$DB_PIPES +GV$DB_TRANSPORTABLE_PLATFORM +GV$DEAD_CLEANUP +GV$DELETED_OBJECT +GV$DETACHED_SESSION +GV$DG_BROKER_CONFIG +GV$DIAG_APP_TRACE_FILE +GV$DIAG_INFO +GV$DIAG_OPT_TRACE_RECORDS +GV$DIAG_SQL_TRACE_RECORDS +GV$DIAG_TRACE_FILE +GV$DIAG_TRACE_FILE_CONTENTS +GV$DISPATCHER +GV$DISPATCHER_CONFIG +GV$DISPATCHER_RATE +GV$DLM_ALL_LOCKS +GV$DLM_CONVERT_LOCAL +GV$DLM_CONVERT_REMOTE +GV$DLM_LATCH +GV$DLM_LOCKS +GV$DLM_MISC +GV$DLM_RESS +GV$DLM_TRAFFIC_CONTROLLER +GV$DML_STATS +GV$DNFS_CHANNELS +GV$DNFS_FILES +GV$DNFS_SERVERS +GV$DNFS_STATS +GV$DYNAMIC_REMASTER_STATS +GV$EDITIONABLE_TYPES +GV$EMON +GV$EMX_USAGE_STATS +GV$ENABLEDPRIVS +GV$ENCRYPTED_TABLESPACES +GV$ENCRYPTION_KEYS +GV$ENCRYPTION_WALLET +GV$ENQUEUE_LOCK +GV$ENQUEUE_STAT +GV$ENQUEUE_STATISTICS +GV$EVENTMETRIC +GV$EVENT_HISTOGRAM +GV$EVENT_HISTOGRAM_MICRO +GV$EVENT_NAME +GV$EVENT_OUTLIERS +GV$EXADIRECT_ACL +GV$EXECUTION +GV$EXP_STATS +GV$FALSE_PING +GV$FAST_START_SERVERS +GV$FAST_START_TRANSACTIONS +GV$FILEMETRIC +GV$FILEMETRIC_HISTORY +GV$FILESPACE_USAGE +GV$FILESTAT +GV$FILE_CACHE_TRANSFER +GV$FILE_HISTOGRAM +GV$FILE_OPTIMIZED_HISTOGRAM +GV$FILE_PING +GV$FIXED_TABLE +GV$FIXED_VIEW_DEFINITION +GV$FLASHBACK_DATABASE_LOG +GV$FLASHBACK_DATABASE_LOGFILE +GV$FLASHBACK_DATABASE_STAT +GV$FLASHFILESTAT +GV$FOREIGN_ARCHIVED_LOG +GV$FS_FAILOVER_HISTOGRAM +GV$FS_FAILOVER_OBSERVERS +GV$FS_FAILOVER_STATS +GV$FS_OBSERVER_HISTOGRAM +GV$GCR_ACTIONS +GV$GCR_LOG +GV$GCR_METRICS +GV$GCR_STATUS +GV$GCSHVMASTER_INFO +GV$GCSPFMASTER_INFO +GV$GC_ELEMENT +GV$GC_ELEMENTS_WITH_COLLISIONS +GV$GES_BLOCKING_ENQUEUE +GV$GES_CONVERT_LOCAL +GV$GES_CONVERT_REMOTE +GV$GES_DEADLOCKS +GV$GES_DEADLOCK_SESSIONS +GV$GES_ENQUEUE +GV$GES_LATCH +GV$GES_RESOURCE +GV$GES_STATISTICS +GV$GES_TRAFFIC_CONTROLLER +GV$GG_APPLY_COORDINATOR +GV$GG_APPLY_READER +GV$GG_APPLY_RECEIVER +GV$GG_APPLY_SERVER +GV$GLOBALCONTEXT +GV$GLOBAL_BLOCKED_LOCKS +GV$GLOBAL_TRANSACTION +GV$GOLDENGATE_CAPABILITIES +GV$GOLDENGATE_CAPTURE +GV$GOLDENGATE_MESSAGE_TRACKING +GV$GOLDENGATE_PROCEDURE_STATS +GV$GOLDENGATE_TABLE_STATS +GV$GOLDENGATE_TRANSACTION +GV$GWM_RAC_AFFINITY +GV$HANG_STATISTICS +GV$HEAT_MAP_SEGMENT +GV$HM_CHECK +GV$HM_CHECK_PARAM +GV$HM_FINDING +GV$HM_INFO +GV$HM_RECOMMENDATION +GV$HM_RUN +GV$HS_AGENT +GV$HS_PARAMETER +GV$HS_SESSION +GV$HVMASTER_INFO +GV$IMEU_HEADER +GV$IMHMSEG +GV$IM_ADOELEMENTS +GV$IM_ADOTASKDETAILS +GV$IM_ADOTASKS +GV$IM_COLUMN_LEVEL +GV$IM_COL_CU +GV$IM_DELTA_HEADER +GV$IM_GLOBALDICT +GV$IM_GLOBALDICT_PIECEMAP +GV$IM_GLOBALDICT_SORTORDER +GV$IM_GLOBALDICT_VERSION +GV$IM_HEADER +GV$IM_IMECOL_CU +GV$IM_SEGMENTS +GV$IM_SEGMENTS_DETAIL +GV$IM_SEG_EXT_MAP +GV$IM_SMU_CHUNK +GV$IM_SMU_DELTA +GV$IM_SMU_HEAD +GV$IM_TBS_EXT_MAP +GV$IM_USER_SEGMENTS +GV$INCMETER_CONFIG +GV$INCMETER_INFO +GV$INCMETER_SUMMARY +GV$INDEXED_FIXED_COLUMN +GV$INDEX_USAGE_INFO +GV$INMEMORY_AREA +GV$INMEMORY_FASTSTART_AREA +GV$INMEMORY_XMEM_AREA +GV$INSTANCE +GV$INSTANCE_CACHE_TRANSFER +GV$INSTANCE_LOG_GROUP +GV$INSTANCE_PING +GV$INSTANCE_RECOVERY +GV$IOFUNCMETRIC +GV$IOFUNCMETRIC_HISTORY +GV$IOSTAT_CONSUMER_GROUP +GV$IOSTAT_FILE +GV$IOSTAT_FUNCTION +GV$IOSTAT_FUNCTION_DETAIL +GV$IOSTAT_NETWORK +GV$IOS_CLIENT +GV$IO_CALIBRATION_STATUS +GV$IO_OUTLIER +GV$IP_ACL +GV$IR_FAILURE +GV$IR_FAILURE_SET +GV$IR_MANUAL_CHECKLIST +GV$IR_REPAIR +GV$JAVAPOOL +GV$JAVA_LIBRARY_CACHE_MEMORY +GV$JAVA_PATCHING_STATUS +GV$JAVA_POOL_ADVICE +GV$JAVA_SERVICES +GV$KERNEL_IO_OUTLIER +GV$KEY_VECTOR +GV$LATCH +GV$LATCHHOLDER +GV$LATCHNAME +GV$LATCH_CHILDREN +GV$LATCH_MISSES +GV$LATCH_PARENT +GV$LGWRIO_OUTLIER +GV$LIBCACHE_LOCKS +GV$LIBRARYCACHE +GV$LIBRARY_CACHE_MEMORY +GV$LICENSE +GV$LISTENER_NETWORK +GV$LOADISTAT +GV$LOADPSTAT +GV$LOBSTAT +GV$LOCK +GV$LOCKDOWN_RULES +GV$LOCKED_OBJECT +GV$LOCKS_WITH_COLLISIONS +GV$LOCK_ACTIVITY +GV$LOCK_ELEMENT +GV$LOCK_TYPE +GV$LOG +GV$LOGFILE +GV$LOGHIST +GV$LOGMNR_CONTENTS +GV$LOGMNR_DICTIONARY +GV$LOGMNR_DICTIONARY_LOAD +GV$LOGMNR_LATCH +GV$LOGMNR_LOGFILE +GV$LOGMNR_LOGS +GV$LOGMNR_PARAMETERS +GV$LOGMNR_PROCESS +GV$LOGMNR_SESSION +GV$LOGMNR_STATS +GV$LOGMNR_TRANSACTION +GV$LOGSTDBY +GV$LOGSTDBY_PROCESS +GV$LOGSTDBY_PROGRESS +GV$LOGSTDBY_STATE +GV$LOGSTDBY_STATS +GV$LOGSTDBY_TRANSACTION +GV$LOG_HISTORY +GV$MANAGED_STANDBY +GV$MAPPED_SQL +GV$MAP_COMP_LIST +GV$MAP_ELEMENT +GV$MAP_EXT_ELEMENT +GV$MAP_FILE +GV$MAP_FILE_EXTENT +GV$MAP_FILE_IO_STACK +GV$MAP_LIBRARY +GV$MAP_SUBELEMENT +GV$MAX_ACTIVE_SESS_TARGET_MTH +GV$MEMOPTIMIZE_WRITE_AREA +GV$MEMORY_CURRENT_RESIZE_OPS +GV$MEMORY_DYNAMIC_COMPONENTS +GV$MEMORY_RESIZE_OPS +GV$MEMORY_TARGET_ADVICE +GV$METRIC +GV$METRICGROUP +GV$METRICNAME +GV$METRIC_HISTORY +GV$MTTR_TARGET_ADVICE +GV$MUTEX_SLEEP +GV$MUTEX_SLEEP_HISTORY +GV$MVREFRESH +GV$MYSTAT +GV$NFS_CLIENTS +GV$NFS_LOCKS +GV$NFS_OPEN_FILES +GV$NLS_PARAMETERS +GV$NLS_VALID_VALUES +GV$NONLOGGED_BLOCK +GV$OBJECT_DEPENDENCY +GV$OBJECT_DML_FREQUENCIES +GV$OBSOLETE_PARAMETER +GV$OFFLINE_RANGE +GV$OFSMOUNT +GV$OFS_STATS +GV$ONLINE_REDEF +GV$OPEN_CURSOR +GV$OPTIMIZER_PROCESSING_RATE +GV$OPTION +GV$OSSTAT +GV$PARALLEL_DEGREE_LIMIT_MTH +GV$PARAMETER +GV$PARAMETER2 +GV$PARAMETER_VALID_VALUES +GV$PASSWORDFILE_INFO +GV$PATCHES +GV$PDBS +GV$PDB_INCARNATION +GV$PERSISTENT_PUBLISHERS +GV$PERSISTENT_QMN_CACHE +GV$PERSISTENT_QUEUES +GV$PERSISTENT_SUBSCRIBERS +GV$PGASTAT +GV$PGA_TARGET_ADVICE +GV$PGA_TARGET_ADVICE_HISTOGRAM +GV$PING +GV$PLSQL_DEBUGGABLE_SESSIONS +GV$POLICY_HISTORY +GV$PQ_SESSTAT +GV$PQ_SLAVE +GV$PQ_SYSSTAT +GV$PQ_TQSTAT +GV$PROCESS +GV$PROCESS_GROUP +GV$PROCESS_MEMORY +GV$PROCESS_MEMORY_DETAIL +GV$PROCESS_MEMORY_DETAIL_PROG +GV$PROCESS_POOL +GV$PROCESS_PRIORITY_DATA +GV$PROPAGATION_RECEIVER +GV$PROPAGATION_SENDER +GV$PROXY_ARCHIVEDLOG +GV$PROXY_DATAFILE +GV$PROXY_PDB_TARGETS +GV$PWFILE_USERS +GV$PX_BUFFER_ADVICE +GV$PX_INSTANCE_GROUP +GV$PX_PROCESS +GV$PX_PROCESS_SYSSTAT +GV$PX_PROCESS_TRACE +GV$PX_SESSION +GV$PX_SESSTAT +GV$QMON_COORDINATOR_STATS +GV$QMON_SERVER_STATS +GV$QMON_TASKS +GV$QMON_TASK_STATS +GV$QPX_INVENTORY +GV$QUARANTINE +GV$QUARANTINE_SUMMARY +GV$QUEUE +GV$QUEUEING_MTH +GV$RECOVERY_FILE_STATUS +GV$RECOVERY_LOG +GV$RECOVERY_PROGRESS +GV$RECOVERY_SLAVE +GV$RECOVERY_STATUS +GV$RECOVER_FILE +GV$REDO_DEST_RESP_HISTOGRAM +GV$REPLAY_CONTEXT +GV$REPLAY_CONTEXT_LOB +GV$REPLAY_CONTEXT_SEQUENCE +GV$REPLAY_CONTEXT_SYSDATE +GV$REPLAY_CONTEXT_SYSGUID +GV$REPLAY_CONTEXT_SYSTIMESTAMP +GV$REQDIST +GV$RESERVED_WORDS +GV$RESOURCE +GV$RESOURCE_LIMIT +GV$RESTORE_POINT +GV$RESULT_CACHE_DEPENDENCY +GV$RESULT_CACHE_MEMORY +GV$RESULT_CACHE_OBJECTS +GV$RESULT_CACHE_STATISTICS +GV$RESUMABLE +GV$RFS_THREAD +GV$RMAN_COMPRESSION_ALGORITHM +GV$RMAN_CONFIGURATION +GV$RMAN_OUTPUT +GV$ROLLSTAT +GV$ROWCACHE +GV$ROWCACHE_PARENT +GV$ROWCACHE_SUBORDINATE +GV$RO_USER_ACCOUNT +GV$RSRCMGRMETRIC +GV$RSRCMGRMETRIC_HISTORY +GV$RSRCPDBMETRIC +GV$RSRCPDBMETRIC_HISTORY +GV$RSRC_CONSUMER_GROUP +GV$RSRC_CONSUMER_GROUP_CPU_MTH +GV$RSRC_CONS_GROUP_HISTORY +GV$RSRC_PDB +GV$RSRC_PDB_HISTORY +GV$RSRC_PLAN +GV$RSRC_PLAN_CPU_MTH +GV$RSRC_PLAN_HISTORY +GV$RSRC_SESSION_INFO +GV$RT_ADDM_CONTROL +GV$RULE +GV$RULE_SET +GV$RULE_SET_AGGREGATE_STATS +GV$SCHEDULER_INMEM_MDINFO +GV$SCHEDULER_INMEM_RTINFO +GV$SCHEDULER_RUNNING_JOBS +GV$SECUREFILE_TIMER +GV$SEGMENT_STATISTICS +GV$SEGSPACE_USAGE +GV$SEGSTAT +GV$SEGSTAT_NAME +GV$SERVICEMETRIC +GV$SERVICEMETRIC_HISTORY +GV$SERVICES +GV$SERVICE_EVENT +GV$SERVICE_REGION_METRIC +GV$SERVICE_STATS +GV$SERVICE_WAIT_CLASS +GV$SERV_MOD_ACT_STATS +GV$SESSION +GV$SESSIONS_COUNT +GV$SESSION_BLOCKERS +GV$SESSION_CONNECT_INFO +GV$SESSION_CURSOR_CACHE +GV$SESSION_EVENT +GV$SESSION_FIX_CONTROL +GV$SESSION_LONGOPS +GV$SESSION_OBJECT_CACHE +GV$SESSION_WAIT +GV$SESSION_WAIT_CLASS +GV$SESSION_WAIT_HISTORY +GV$SESSMETRIC +GV$SESSTAT +GV$SESS_IO +GV$SESS_TIME_MODEL +GV$SES_OPTIMIZER_ENV +GV$SGA +GV$SGAINFO +GV$SGASTAT +GV$SGA_CURRENT_RESIZE_OPS +GV$SGA_DYNAMIC_COMPONENTS +GV$SGA_DYNAMIC_FREE_MEMORY +GV$SGA_RESIZE_OPS +GV$SGA_TARGET_ADVICE +GV$SHADOW_DATAFILE +GV$SHARED_POOL_ADVICE +GV$SHARED_POOL_RESERVED +GV$SHARED_SERVER +GV$SHARED_SERVER_MONITOR +GV$SORT_SEGMENT +GV$SORT_USAGE +GV$SPPARAMETER +GV$SQL +GV$SQLAREA +GV$SQLAREA_PLAN_HASH +GV$SQLCOMMAND +GV$SQLFN_ARG_METADATA +GV$SQLFN_METADATA +GV$SQLPA_METRIC +GV$SQLSTATS +GV$SQLSTATS_PLAN_HASH +GV$SQLTEXT +GV$SQLTEXT_WITH_NEWLINES +GV$SQL_BIND_CAPTURE +GV$SQL_BIND_DATA +GV$SQL_BIND_METADATA +GV$SQL_CS_HISTOGRAM +GV$SQL_CS_SELECTIVITY +GV$SQL_CS_STATISTICS +GV$SQL_CURSOR +GV$SQL_DIAG_REPOSITORY +GV$SQL_DIAG_REPOSITORY_REASON +GV$SQL_FEATURE +GV$SQL_FEATURE_DEPENDENCY +GV$SQL_FEATURE_HIERARCHY +GV$SQL_HINT +GV$SQL_JOIN_FILTER +GV$SQL_MONITOR +GV$SQL_MONITOR_SESSTAT +GV$SQL_MONITOR_STATNAME +GV$SQL_OPTIMIZER_ENV +GV$SQL_PLAN +GV$SQL_PLAN_MONITOR +GV$SQL_PLAN_STATISTICS +GV$SQL_PLAN_STATISTICS_ALL +GV$SQL_REDIRECTION +GV$SQL_REOPTIMIZATION_HINTS +GV$SQL_SHARD +GV$SQL_SHARED_CURSOR +GV$SQL_SHARED_MEMORY +GV$SQL_WORKAREA +GV$SQL_WORKAREA_ACTIVE +GV$SQL_WORKAREA_HISTOGRAM +GV$SSCR_SESSIONS +GV$STANDBY_LOG +GV$STATISTICS_LEVEL +GV$STATNAME +GV$STREAMS_APPLY_COORDINATOR +GV$STREAMS_APPLY_READER +GV$STREAMS_APPLY_SERVER +GV$STREAMS_CAPTURE +GV$STREAMS_MESSAGE_TRACKING +GV$STREAMS_POOL_ADVICE +GV$STREAMS_POOL_STATISTICS +GV$STREAMS_TRANSACTION +GV$SUBCACHE +GV$SUBSCR_REGISTRATION_STATS +GV$SYSAUX_OCCUPANTS +GV$SYSMETRIC +GV$SYSMETRIC_HISTORY +GV$SYSMETRIC_SUMMARY +GV$SYSSTAT +GV$SYSTEM_CURSOR_CACHE +GV$SYSTEM_EVENT +GV$SYSTEM_FIX_CONTROL +GV$SYSTEM_PARAMETER +GV$SYSTEM_PARAMETER2 +GV$SYSTEM_RESET_PARAMETER +GV$SYSTEM_RESET_PARAMETER2 +GV$SYSTEM_WAIT_CLASS +GV$SYS_OPTIMIZER_ENV +GV$SYS_REPORT_REQUESTS +GV$SYS_REPORT_STATS +GV$SYS_TIME_MODEL +GV$TABLESPACE +GV$TEMPFILE +GV$TEMPFILE_INFO_INSTANCE +GV$TEMPORARY_LOBS +GV$TEMPSEG_USAGE +GV$TEMPSTAT +GV$TEMPUNDOSTAT +GV$TEMP_CACHE_TRANSFER +GV$TEMP_EXTENT_MAP +GV$TEMP_EXTENT_POOL +GV$TEMP_PING +GV$TEMP_SPACE_HEADER +GV$THREAD +GV$THRESHOLD_TYPES +GV$TIMER +GV$TIMEZONE_FILE +GV$TIMEZONE_NAMES +GV$TOPLEVELCALL +GV$TRANSACTION +GV$TRANSACTION_ENQUEUE +GV$TRANSPORTABLE_PLATFORM +GV$TSDP_SUPPORTED_FEATURE +GV$TSM_SESSIONS +GV$TYPE_SIZE +GV$UNDOSTAT +GV$UNIFIED_AUDIT_TRAIL +GV$VERSION +GV$VPD_POLICY +GV$WAITCLASSMETRIC +GV$WAITCLASSMETRIC_HISTORY +GV$WAITSTAT +GV$WALLET +GV$WLM_DB_MODE +GV$WLM_PCMETRIC +GV$WLM_PCMETRIC_HISTORY +GV$WLM_PCSERVICE +GV$WLM_PC_STATS +GV$WORKLOAD_REPLAY_THREAD +GV$XML_AUDIT_TRAIL +GV$XSTREAM_APPLY_COORDINATOR +GV$XSTREAM_APPLY_READER +GV$XSTREAM_APPLY_RECEIVER +GV$XSTREAM_APPLY_SERVER +GV$XSTREAM_CAPTURE +GV$XSTREAM_MESSAGE_TRACKING +GV$XSTREAM_OUTBOUND_SERVER +GV$XSTREAM_TABLE_STATS +GV$XSTREAM_TRANSACTION +GV$XS_SESSIONS +GV$XS_SESSION_NS_ATTRIBUTE +GV$XS_SESSION_NS_ATTRIBUTES +GV$XS_SESSION_ROLE +GV$XS_SESSION_ROLES +GV$ZONEMAP_USAGE_STATS +GV$_LOCK +HAEN_TXFM_TEXT. +HANDLE +HANDLER_COMMENT +HANDLER_FUNCTION +HANDLER_NAME +HANDLER_PACKAGE +HANDLER_SCHEMA +HANDLER_STATUS +HANDLER_TYPE +HANDLE_COLLISIONS +HANG_CHAIN_SESSIONS +HANG_CREATE_TIME +HANG_ID +HANG_RESOLVE_TIME +HANG_TYPE +HARD_DISK_TYPE +HARD_PARSES +HASH +HASHCODE +HASHKEYS +HASH_AJ +HASH_CODE +HASH_EXPRESSION +HASH_MATCH_FAILED +HASH_SJ +HASH_VALUE +HAS_CHILD +HAS_CONSTRAINTS +HAS_CURRENT_OF +HAS_DIGEST_VERIFIERS +HAS_FOR_UPDATE +HAS_HINT +HAS_IDENTITY +HAS_INTO_BULK +HAS_INTO_RECORD +HAS_INTO_RETURNING +HAS_IN_BINDS +HAS_SENSITIVE_COLUMN +HAS_VARARGS +HEADER_BLOCK +HEADER_FILE +HEADER_SIZE +HEADER_STATUS +HEAD_ADDRESS +HEAD_ELEMENT +HEAD_ELEMENT_NAME +HEAD_OWNER +HEAD_PIECE_ADDRESS +HEAD_SCHEMA_URL +HEAD_TARGET_NAMESPACE +HEALTH_MONITOR +HEAP_ALOC +HEAP_DESC +HEAP_DESCRIPTOR +HEAP_NAME +HEAP_NUM +HEAP_SIZE +HEAP_SZ +HEAP_USED +HETEROGENEOUS +HET_TYPE +HHAND. +HHBYTELEN. +HHCBIT. +HHCELLBNDRY. +HHCELLSIZE. +HHCLDATE. +HHCOLLAPSE. +HHCOMMONCODE. +HHCOMPARE. +HHCOMPOSE. +HHDECODE. +HHDISTANCE. +HHENCODE. +HHENCODE_BYLEVEL. +HHGBIT. +HHGETCID. +HHGROUP. +HHGTBIT. +HHGTYPE. +HHIDLPART. +HHIDPART. +HHINCRLEV. +HHJLDATE. +HHLENGTH. +HHLEVELS. +HHMATCH. +HHMAXCODE. +HHNCOMPARE. +HHNDIM. +HHOR. +HHORDER. +HHPRECISION. +HHSBIT. +HHSETCID. +HHSTBIT. +HHSTYPE. +HHSUBDIVIDE. +HHSUBSTR. +HHXOR. +HIDDEN +HIDDEN_COLUMN +HIERARCHICAL +HIERARCHY +HIERARCHY_CONSISTENCY_RULE +HIERARCHY_ID +HIERARCHY_LEVEL_ID +HIERARCHY_NAME +HIERARCHY_TYPE +HIER_ALIAS +HIER_ATTR_NAME +HIER_NAME +HIER_OWNER +HIER_TYPE +HIGH +HIGHB +HIGHROWID +HIGHWATER +HIGH_BOUND +HIGH_CHANGE# +HIGH_OPTIMAL_SIZE +HIGH_PART_NO +HIGH_RESETLOGS_CHANGE# +HIGH_RESETLOGS_TIME +HIGH_SCN +HIGH_SEQUENCE# +HIGH_TAB# +HIGH_TIME +HIGH_TSNAME +HIGH_VALUE +HIGH_VALUE_LENGTH +HIGH_WATER_MARK +HINT +HINT_ID +HINT_TEXT +HISTOGRAM +HISTORIC_MAX +HISTORY_INDEX_BLOCKS_FREED +HITS +HIT_RATIO +HIVEMETADATA.ODCITABLECLOSE +HIVEMETADATA.ODCITABLEFETCH +HIVEMETADATA.ODCITABLESTART +HIVE_COLUMN_TYPE +HIVE_TABLE_NAME +HIVE_URI +HIVE_XT_INCOMPATIBILITY +HI_BNUM +HI_SETID +HM_SQLTK_INTERNAL. +HM_SQLTK_INTERNAL.COLUMN_CHECK +HM_SQLTK_INTERNAL.REF_CHECK +HM_SQLTK_INTERNAL.ROW_CHECK +HM_SQLTK_INTERNAL.TAB_DESC +HM_SQLTK_INTERNAL.TAB_INIT +HOLDING_CON_ID +HOLDING_SESSION +HOLDING_USER_SESSION +HOP_COUNT +HOST +HOSTING_CLIENT_ID +HOSTNAME +HOST_ADDRESS +HOST_ID +HOST_NAME +HOST_NW_ADDR +HOT_BYTES_READ +HOT_BYTES_WRITTEN +HOT_MINE +HOT_READS +HOT_USED_MB +HOT_WRITES +HOUR_IN_DAY +HOW_CREATED +HS$_DDTF_OPTCOLUMNS. +HS$_DDTF_OPTFOREIGNKEYS. +HS$_DDTF_OPTPROCEDURES. +HS$_DDTF_OPTSTATISTICS. +HS$_DDTF_OPTTABFORKEYS. +HS$_DDTF_OPTTABPRIKEYS. +HS$_DDTF_OPTTABSTATS. +HS$_DDTF_SQLCOLUMNS. +HS$_DDTF_SQLFOREIGNKEYS. +HS$_DDTF_SQLPRIMARYKEYS. +HS$_DDTF_SQLPROCEDURES. +HS$_DDTF_SQLSTATISTICS. +HS$_DDTF_SQLTABFORKEYS. +HS$_DDTF_SQLTABLES. +HS$_DDTF_SQLTABPRIKEYS. +HS$_DDTF_SQLTABSTATS. +HSECS +HS_SESSION_ID +HTF. +HTF.ADDRESS +HTF.ANCHOR +HTF.ANCHOR2 +HTF.APPLETOPEN +HTF.AREA +HTF.BASE +HTF.BASEFONT +HTF.BGSOUND +HTF.BIG +HTF.BLOCKQUOTEOPEN +HTF.BODYOPEN +HTF.BOLD +HTF.BR +HTF.CENTER +HTF.CITE +HTF.CODE +HTF.COMMENT +HTF.DFN +HTF.DIV +HTF.DLISTDEF +HTF.DLISTOPEN +HTF.DLISTTERM +HTF.EM +HTF.EMPHASIS +HTF.ESCAPE_SC +HTF.ESCAPE_URL +HTF.FONTOPEN +HTF.FORMAT_CELL +HTF.FORMCHECKBOX +HTF.FORMFILE +HTF.FORMHIDDEN +HTF.FORMIMAGE +HTF.FORMOPEN +HTF.FORMPASSWORD +HTF.FORMRADIO +HTF.FORMRESET +HTF.FORMSELECTOPEN +HTF.FORMSELECTOPTION +HTF.FORMSUBMIT +HTF.FORMTEXT +HTF.FORMTEXTAREA +HTF.FORMTEXTAREA2 +HTF.FORMTEXTAREAOPEN +HTF.FORMTEXTAREAOPEN2 +HTF.FRAME +HTF.FRAMESETOPEN +HTF.HEADER +HTF.HR +HTF.HTITLE +HTF.IMG +HTF.IMG2 +HTF.ISINDEX +HTF.ITALIC +HTF.KBD +HTF.KEYBOARD +HTF.LINE +HTF.LINKREL +HTF.LINKREV +HTF.LISTHEADER +HTF.LISTITEM +HTF.MAILTO +HTF.MAPOPEN +HTF.META +HTF.NEXTID +HTF.NL +HTF.NOBR +HTF.OLISTOPEN +HTF.PARAGRAPH +HTF.PARAM +HTF.PLAINTEXT +HTF.PREOPEN +HTF.S +HTF.SAMPLE +HTF.SCRIPT +HTF.SMALL +HTF.STRIKE +HTF.STRONG +HTF.STYLE +HTF.SUB +HTF.SUP +HTF.TABLECAPTION +HTF.TABLEDATA +HTF.TABLEHEADER +HTF.TABLEOPEN +HTF.TABLEROWOPEN +HTF.TELETYPE +HTF.TITLE +HTF.ULISTOPEN +HTF.UNDERLINE +HTF.VARIABLE +HTP. +HTP.ADDDEFAULTHTMLHDR +HTP.ADDRESS +HTP.ANCHOR +HTP.ANCHOR2 +HTP.APPLETCLOSE +HTP.APPLETOPEN +HTP.AREA +HTP.BASE +HTP.BASEFONT +HTP.BGSOUND +HTP.BIG +HTP.BLOCKQUOTECLOSE +HTP.BLOCKQUOTEOPEN +HTP.BODYCLOSE +HTP.BODYOPEN +HTP.BOLD +HTP.BR +HTP.CENTER +HTP.CENTERCLOSE +HTP.CENTEROPEN +HTP.CITE +HTP.CODE +HTP.COMMENT +HTP.DFN +HTP.DIRLISTCLOSE +HTP.DIRLISTOPEN +HTP.DIV +HTP.DLISTCLOSE +HTP.DLISTDEF +HTP.DLISTOPEN +HTP.DLISTTERM +HTP.DOWNLOAD_FILE +HTP.EM +HTP.EMPHASIS +HTP.ESCAPE_SC +HTP.FLUSH +HTP.FLUSH_CHARSET_CONVERT +HTP.FONTCLOSE +HTP.FONTOPEN +HTP.FORMCHECKBOX +HTP.FORMCLOSE +HTP.FORMFILE +HTP.FORMHIDDEN +HTP.FORMIMAGE +HTP.FORMOPEN +HTP.FORMPASSWORD +HTP.FORMRADIO +HTP.FORMRESET +HTP.FORMSELECTCLOSE +HTP.FORMSELECTOPEN +HTP.FORMSELECTOPTION +HTP.FORMSUBMIT +HTP.FORMTEXT +HTP.FORMTEXTAREA +HTP.FORMTEXTAREA2 +HTP.FORMTEXTAREACLOSE +HTP.FORMTEXTAREAOPEN +HTP.FORMTEXTAREAOPEN2 +HTP.FRAME +HTP.FRAMESETCLOSE +HTP.FRAMESETOPEN +HTP.GET_DOWNLOAD_FILES_LIST +HTP.GET_LINE +HTP.GET_PAGE +HTP.GET_PAGE_CHARSET_CONVERT +HTP.GET_PAGE_RAW +HTP.HEADCLOSE +HTP.HEADER +HTP.HEADOPEN +HTP.HR +HTP.HTITLE +HTP.HTMLCLOSE +HTP.HTMLOPEN +HTP.IMG +HTP.IMG2 +HTP.INIT +HTP.ISINDEX +HTP.ITALIC +HTP.KBD +HTP.KEYBOARD +HTP.LINE +HTP.LINKREL +HTP.LINKREV +HTP.LISTHEADER +HTP.LISTINGCLOSE +HTP.LISTINGOPEN +HTP.LISTITEM +HTP.MAILTO +HTP.MAPCLOSE +HTP.MAPOPEN +HTP.MENULISTCLOSE +HTP.MENULISTOPEN +HTP.META +HTP.NEXTID +HTP.NL +HTP.NOBR +HTP.NOFRAMESCLOSE +HTP.NOFRAMESOPEN +HTP.OLISTCLOSE +HTP.OLISTOPEN +HTP.P +HTP.PARA +HTP.PARAGRAPH +HTP.PARAM +HTP.PLAINTEXT +HTP.PRECLOSE +HTP.PREOPEN +HTP.PRINT +HTP.PRINTS +HTP.PRINT_HEADER +HTP.PRN +HTP.PS +HTP.PUTRAW +HTP.RESET_GET_PAGE +HTP.S +HTP.SAMPLE +HTP.SCRIPT +HTP.SETHTTPCHARSET +HTP.SET_TRANSFER_MODE +HTP.SHOWPAGE +HTP.SMALL +HTP.STRIKE +HTP.STRONG +HTP.STYLE +HTP.SUB +HTP.SUP +HTP.TABLECAPTION +HTP.TABLECLOSE +HTP.TABLEDATA +HTP.TABLEHEADER +HTP.TABLEOPEN +HTP.TABLEROWCLOSE +HTP.TABLEROWOPEN +HTP.TELETYPE +HTP.TITLE +HTP.ULISTCLOSE +HTP.ULISTOPEN +HTP.UNDERLINE +HTP.VARIABLE +HTP.WBR +HTTPURITYPE.CREATEURI +HTTPURITYPE.GETBLOB +HTTPURITYPE.GETCLOB +HTTPURITYPE.GETCONTENTTYPE +HTTPURITYPE.GETEXTERNALURL +HTTPURITYPE.GETURL +HTTPURITYPE.GETXML +HTTPURITYPE.HTTPURITYPE +HTTP_ENABLED +HV_ID +HWMSIZE +HWM_BROKERED +HWM_MESSAGE_CREATE_TIME +HWM_MESSAGE_NUMBER +HWM_POSITION +HWM_TIME +ID1 +ID1_TAG +ID2 +ID2_TAG +IDENTIFIER +IDENTITY +IDENTITY_COLUMN +IDENTITY_OPTIONS +IDLE +IDLE_BLKR_SESSIONS_KILLED +IDLE_BLKR_SESS_KILLED +IDLE_SESSIONS_KILLED +IDLE_SESS_KILLED +IDLE_TIME +IDLE_TIME_CUR +IDLE_TIME_TOTAL +IDX +ID_TYPE +IF_NAME +IF_NONDURABLE_SUBSCRIBER +IGNORED_HANG +IGNORED_WORKAREAS_COUNT +IGNORE_OPTIM_EMBEDDED_HINTS +IGNORE_ROW_ON_DUPKEY_INDEX +IGNORE_SCN +IGNORE_WHERE_CLAUSE +IM. +IM.COMPATIBILITYINIT +IMCFLAG +IMCUSINMEM +IMCU_ADDR +IMEFLAG +IMEU_ADDR +IMEU_HEAD_PIECE_ADDR +IMMEDIATE_GETS +IMMEDIATE_MISSES +IMPACT +IMPACT1 +IMPACT2 +IMPACT3 +IMPACT4 +IMPACTS +IMPACT_DESC +IMPACT_FLAGS +IMPACT_ID +IMPACT_NAME +IMPACT_SCOPE +IMPACT_SEVERITY +IMPACT_STR +IMPACT_STR1 +IMPACT_STR2 +IMPACT_STR3 +IMPACT_STR4 +IMPACT_TYPE +IMPLEMENTATION_NAME +IMPLEMENTATION_SCHEMA +IMPLEMENTATION_TYPE +IMPLEMENTATION_TYPE_SCHEMA +IMPLEMENTATION_VERSION +IMPLICIT +IMPLICIT_DESTROY +IMPLIED_PRIVILEGE +IMPLTYPENAME +IMPLTYPEOWNER +IMPORTANCE +IMPT_NATURE +IM_BLOCK_COUNT +IM_DB_BLOCK_CHANGES_DELTA +IM_DB_BLOCK_CHANGES_TOTAL +IM_IMCU_COUNT +IM_SCANS +IM_SCANS_DELTA +IM_SCANS_TOTAL +IM_SCAN_BYTES_INMEMORY +IM_SCAN_BYTES_UNCOMPRESSED +IM_SIZE +IM_STAT_UPDATE_TIME +INACTIVE_TIMEOUT +INACTIVITY_TIMEOUT +INBOUND_DB_LINK_SOURCE_ID +INC +INC# +INCARNATION +INCARNATION# +INCARNATION_NUM +INCARNATION_SCN +INCARNATION_TIME +INCIDENT_CNT +INCIDENT_ID +INCLUDE +INCLUDED_IN_DATABASE_BACKUP +INCLUDE_COLUMN +INCLUDE_NEW_VALUES +INCLUDE_RULE +INCLUDE_TAGGED_LCR +INCLUDE_VERSION +INCOMPATIBILITY_NAME +INCOMPATIBILITY_OWNER +INCOMPLETE +INCOMP_LTRL_MISMATCH +INCREFRESHTIM +INCREMENTAL +INCREMENTAL_CHANGE# +INCREMENTAL_LEVEL +INCREMENTAL_SIZE +INCREMENT_BY +INCRSIZE +INC_COUNT +INC_DMPFILE +INC_REFRESHABLE +INC_SCN +INC_TIME +IND +INDEX +INDEXING +INDEXNAME +INDEXTYPE_NAME +INDEX_ASC +INDEX_BY +INDEX_CLEANUP_COUNT +INDEX_CLEANUP_CPU_TIME +INDEX_CLEANUP_ELAPSED_TIME +INDEX_COLUMN +INDEX_COMBINE +INDEX_COMPRESS_FOR +INDEX_DESC +INDEX_FFS +INDEX_HISTOGRAM +INDEX_JOIN +INDEX_NAME +INDEX_NUMBER +INDEX_OWNER +INDEX_RRS +INDEX_RS_ASC +INDEX_RS_DESC +INDEX_SS +INDEX_SS_ASC +INDEX_SS_DESC +INDEX_STATS +INDEX_STATS_COLLECTION_TYPE +INDEX_STATS_ENABLED +INDEX_TYPE +INDEX_VALUE +INDICATOR +INDX +INFERRED +INFO +INFO_FIELD_1 +INFO_FIELD_2 +INFO_FIELD_3 +INFO_FIELD_4 +INFO_ID +INHERITANCE_TYPE +INHERITED +INHERITED_FROM +INITIALIZER +INITIAL_ALLOCATION +INITIAL_DIF_COUNT +INITIAL_EXTENT +INITIAL_GROUP +INITIAL_NUM_ROWS +INITIAL_POPULATE_TIME +INITIAL_RELEASE +INITIAL_RSRC_CONSUMER_GROUP +INITIAL_SIZE +INITIAL_TIMESTAMP +INITJVMAUX. +INITJVMAUX.ABORT_MESSAGE +INITJVMAUX.ALTER_IF_NOT_PRESENT +INITJVMAUX.CHECK_SIZES_FOR_CJS +INITJVMAUX.COMPARE_RELEASES +INITJVMAUX.CREATE_IF_NOT_PRESENT +INITJVMAUX.CREATE_PROPERTY_DEFS_TABLE +INITJVMAUX.CURRENTEXECID +INITJVMAUX.CURRENT_RELEASE_VERSION +INITJVMAUX.DEBUG_OUTPUT +INITJVMAUX.DROP_INVALID_SROS +INITJVMAUX.DROP_SROS +INITJVMAUX.DROP_SYS_CLASS +INITJVMAUX.DROP_SYS_RESOURCE +INITJVMAUX.DRP +INITJVMAUX.ENDACTION +INITJVMAUX.ENDACTION_ASLOAD +INITJVMAUX.ENDACTION_OUTARG +INITJVMAUX.ENDSTEP +INITJVMAUX.EXEC +INITJVMAUX.JVMUSCRIPT +INITJVMAUX.JVMVERSION +INITJVMAUX.REGISTRYSTATUS +INITJVMAUX.ROLLBACKCLEANUP +INITJVMAUX.ROLLBACKSET +INITJVMAUX.ROLLBACKSETUP +INITJVMAUX.SETLOADED +INITJVMAUX.SETLOADING +INITJVMAUX.SET_ALT_TABLESPACE_LIMIT +INITJVMAUX.SET_DEBUG_OUTPUT_OFF +INITJVMAUX.SET_DEBUG_OUTPUT_ON +INITJVMAUX.STARTACTION +INITJVMAUX.STARTACTION_OUTARG +INITJVMAUX.STARTSTEP +INITJVMAUX.STARTUP_PENDING_P +INITJVMAUX.VALIDATE_JAVAVM +INITREQ_ELAPSED_TIME +INITSTATUS +INIT_COUNT +INIT_TIME +INI_TRANS +INLINE +INLINE_XMLTYPE_NT +INMEMORY +INMEMORY_COMPRESSION +INMEMORY_DISTRIBUTE +INMEMORY_DUPLICATE +INMEMORY_PRIORITY +INMEMORY_PRUNING +INMEMORY_SERVICE +INMEMORY_SERVICE_NAME +INMEMORY_SIZE +INNER_CLASSES +INNER_INDEX +INNER_TABLE_COLUMN +INNER_TABLE_NAME +INNER_TABLE_OWNER +INPUT_BYTES +INPUT_BYTES_DISPLAY +INPUT_BYTES_PER_SEC +INPUT_BYTES_PER_SEC_DISPLAY +INPUT_FILE_SCAN_ONLY +INPUT_FORMAT +INPUT_TYPE +INS +INSERTABLE +INSERTED_ROWS +INSERTS +INSERT_COLLISIONS +INSERT_FREQ +INST +INSTALL_ID +INSTANCE +INSTANCES +INSTANCE_CAGING +INSTANCE_ID +INSTANCE_MODE +INSTANCE_NAME +INSTANCE_NUM +INSTANCE_NUM. +INSTANCE_NUMBER +INSTANCE_ROLE +INSTANCE_STICKINESS +INSTANTIABLE +INSTANTIATION_SCN +INSTEAD_OF_ROW +INSTID +INSTNAME +INST_DRTLD_MISMATCH +INST_FLAG +INST_FLAG2 +INST_ID +INST_LOCK_ID1 +INST_LOCK_ID2 +INST_LOCK_RELEASE +INST_LOCK_REQUEST +INST_LOCK_TYPE +INST_NAME +INST_NUMBER +INSUFF_PRIVS +INSUFF_PRIVS_REM +INTEGRITY_ALG +INTERACTIONEXECUTE. +INTERESTING +INTERFACE +INTERFACES +INTERFACE_INDEX +INTERFACE_NAME +INTERFACE_VERSION +INTERIM_OBJECT_NAME +INTERIM_OBJECT_OWNER +INTERIM_TABLE_NAME +INTERNAL_CHECK +INTERNAL_COLUMN_ID +INTERNAL_COLUMN_NUMBER +INTERNAL_METRIC_CATEGORY +INTERNAL_METRIC_NAME +INTERNAL_PKG_NAME +INTERNAL_PROC_NAME +INTERNAL_TRIGGER_TYPE +INTERNAL_USE +INTERVAL +INTERVAL_SIZE +INTERVAL_SUBPARTITION +INTSIZE +INTSIZE_CSEC +INT_OBJNAME +INVALID +INVALIDATIONS +INVALIDATIONS_DELTA +INVALIDATIONS_TOTAL +INVALID_BLOCKS +INVALID_ROWS +INVERSE +INVERT +INVERTED_PRINCIPAL +INVOCATIONS +INVOCATION_ID +INVOCATION_TIME +INVOKING_PACKAGE +INVOKING_PACKAGE_OWNER +INVOKING_PROCEDURE +INVOKING_USER +IN_BIND +IN_CONNECTION_MGMT +IN_CURSOR_CLOSE +IN_CYCLE +IN_DBOP_EXEC_ID +IN_DBOP_NAME +IN_HARD_PARSE +IN_INMEMORY_POPULATE +IN_INMEMORY_PREPOPULATE +IN_INMEMORY_QUERY +IN_INMEMORY_REPOPULATE +IN_INMEMORY_TREPOPULATE +IN_JAVA_EXECUTION +IN_NET +IN_OUT +IN_PARSE +IN_PLSQL_COMPILATION +IN_PLSQL_EXECUTION +IN_PLSQL_RPC +IN_ROW +IN_SEQUENCE_LOAD +IN_SQL_EXECUTION +IN_TABLESPACE_ENCRYPTION +IN_TRANSACTION +IN_WAIT +IN_WAIT_SECS +IOMBPS +IOMBPS_THROTTLE_EXEMPT +IOPERREQUEST +IOPS +IOPS_THROTTLE_EXEMPT +IOT_NAME +IOT_REDUNDANT_PKEY_ELIM +IOT_TYPE +IOWAITPERREQUEST +IOWAIT_DELTA +IOWAIT_TOTAL +IO_CAPABLE +IO_CELL_OFFLOAD_ELIGIBLE_BYTES +IO_CELL_OFFLOAD_RETURNED_BYTES +IO_CELL_UNCOMPRESSED_BYTES +IO_COMPONENT_ID +IO_COST +IO_COUNT +IO_INTERCONNECT_BYTES +IO_INTERCONNECT_BYTES_DELTA +IO_INTERCONNECT_BYTES_TOTAL +IO_LATENCY +IO_MB_AVG +IO_MB_SUM +IO_MB_SUMX2 +IO_MEGABYTES +IO_OFFLOAD_ELIG_BYTES_DELTA +IO_OFFLOAD_ELIG_BYTES_TOTAL +IO_OFFLOAD_RETURN_BYTES_DELTA +IO_OFFLOAD_RETURN_BYTES_TOTAL +IO_OFFSET +IO_REQUESTS +IO_REQUESTS_AVG +IO_REQUESTS_SUM +IO_REQUESTS_SUMX2 +IO_SERVICE_TIME +IO_SERVICE_WAITS +IO_SHARES +IO_SIZE +IO_TIME_MAX +IO_TIME_TOTAL +IO_TYPE +IP_ADDR +IP_ADDRESS +ISADJUSTED +ISBASIC +ISCURRENT +ISDEFAULT +ISDEPRECATED +ISINSTANCE_MODIFIABLE +ISINSTANCE_RESETTABLE +ISMASTER +ISMODIFIED +ISPDB_MODIFIABLE +ISPDB_RESETTABLE +ISSES_MODIFIABLE +ISSPECIFIED +ISSUER +ISSYS_MODIFIABLE +ISSYS_RESETTABLE +ISXMLTYPETABLE. +ISXMLTYPETABLE_INTERNAL. +IS_ABSTRACT +IS_ACTIVE +IS_ADAPTIVE_PLAN +IS_AGGREGATE +IS_ALTERNATE +IS_ALTER_COLUMN. +IS_ANNOTATION +IS_ASM +IS_AWR_SAMPLE +IS_BACKUP +IS_BIND_AWARE +IS_BIND_SENSITIVE +IS_CAPTURED +IS_COMPILED +IS_CREATING_NESTED_TABLE. +IS_CURRENT_SRC_DB +IS_CUSTOM_AGGREGATE +IS_DATA_MASKED +IS_DEBUG +IS_DEFAULT +IS_DEFINITE +IS_DISABLED +IS_DML_DATA_DIVERGENCE +IS_DROP_COLUMN. +IS_DV_SUPPORTED. +IS_ENUM +IS_ERROR_DIVERGENCE +IS_EXTERNAL +IS_FINAL +IS_FINAL_PLAN +IS_FIRST_IN_LOOP +IS_FULL_SQLTEXT +IS_GRANT +IS_GV +IS_HEAD_PIECE +IS_INNER +IS_INSTANCE_WIDE +IS_INTERFACE +IS_LAST_IN_LOOP +IS_LOCAL_TEMP +IS_MINIMAL_DTM +IS_MODIFIABLE_ANYTIME +IS_MULTI_LINGUAL +IS_NATIVE +IS_NESTED +IS_OBSOLETE +IS_OLS_SUPPORTED. +IS_OUTPUT +IS_POPULATED +IS_PROXY_PDB +IS_PUBLIC +IS_QUERY_DATA_DIVERGENCE +IS_RAGGED +IS_RECOVERY_DEST_FILE +IS_RECYCLE +IS_REF +IS_REOPTIMIZABLE +IS_REPLAYED +IS_REPLAY_SYNC_TOKEN_HOLDER +IS_RESOLVED_ADAPTIVE_PLAN +IS_RESULT_CACHE +IS_ROLLING_INVALID +IS_ROLLING_REFRESH_INVALID +IS_SCALE_UP_SESS +IS_SCOPED +IS_SECURE_APPLICATION_ROLE. +IS_SERVERERROR. +IS_SHAREABLE +IS_SKIP_LEVEL +IS_SOLVED +IS_SPARSE +IS_SQLID_CURRENT +IS_STATIC +IS_STRICTFP +IS_STS +IS_SYNCHRONIZED +IS_SYNTHETIC +IS_SYSTEM_TASK_ONLY +IS_THREAD_FAILURE +IS_TOP_PLAN +IS_TRANSACTION +IS_TRANSIENT +IS_USER +IS_VALID +IS_VOLATILE +IS_VPD_ENABLED. +ITEM +ITEMS_DELETED +ITEM_NAME +ITEM_VALUE +ITERATION +ITL_CNT +ITL_WAITS_DELTA +ITL_WAITS_TOTAL +ITYP_NAME +ITYP_OWNER +JAVAVM_SYS. +JAVAVM_SYS.REHOTLOAD +JAVAVM_SYS.UNINSTALL_DBHADOOP +JAVA_EXEC_TIME +JAVA_POOL_SIZE_FACTOR +JAVA_POOL_SIZE_FOR_ESTIMATE +JAVA_XA. +JAVA_XA.XA_COMMIT +JAVA_XA.XA_COMMIT_NEW +JAVA_XA.XA_DOTWOPHASE +JAVA_XA.XA_END +JAVA_XA.XA_END_NEW +JAVA_XA.XA_FORGET +JAVA_XA.XA_FORGET_NEW +JAVA_XA.XA_PREPARE +JAVA_XA.XA_PREPARE_NEW +JAVA_XA.XA_ROLLBACK +JAVA_XA.XA_ROLLBACK_NEW +JAVA_XA.XA_START +JAVA_XA.XA_START_NEW +JAVA_XA.XA_THINTWOPHASE +JAVEXEC_TIME_DELTA +JAVEXEC_TIME_TOTAL +JDOM_T.APPEND +JDOM_T.APPEND_NULL +JDOM_T.CLONE +JDOM_T.CREATE_ARR +JDOM_T.CREATE_OBJ +JDOM_T.GET +JDOM_T.GET_BLOB +JDOM_T.GET_BOOLEAN +JDOM_T.GET_CLOB +JDOM_T.GET_DATE +JDOM_T.GET_KEYS +JDOM_T.GET_NUMBER +JDOM_T.GET_SIZE +JDOM_T.GET_STRING +JDOM_T.GET_TIMESTAMP +JDOM_T.GET_TYPE +JDOM_T.HAS_KEY +JDOM_T.IS_ARRAY +JDOM_T.IS_BOOLEAN +JDOM_T.IS_DATE +JDOM_T.IS_FALSE +JDOM_T.IS_NULL +JDOM_T.IS_NUMBER +JDOM_T.IS_OBJECT +JDOM_T.IS_SCALAR +JDOM_T.IS_STRING +JDOM_T.IS_TIMESTAMP +JDOM_T.IS_TRUE +JDOM_T.MERGEPATCH +JDOM_T.ON_ERROR +JDOM_T.PARSE +JDOM_T.PATCH +JDOM_T.PUT +JDOM_T.PUT_NULL +JDOM_T.REDACT +JDOM_T.REMOVE +JDOM_T.RENAME_KEY +JDOM_T.STRINGIFY +JDOM_T.TO_BLOB +JDOM_T.TO_BOOLEAN +JDOM_T.TO_CLOB +JDOM_T.TO_DATE +JDOM_T.TO_NUMBER +JDOM_T.TO_STRING +JDOM_T.TO_TIMESTAMP +JOB +JOB.JOB +JOBARG.JOBARG +JOBATTR.JOBATTR +JOBS_COMPLETED +JOBS_CREATED +JOBS_RUNNING_COUNT +JOBS_STARTED +JOB_ACTION +JOB_CLASS +JOB_CLASS_NAME +JOB_CONTAINER +JOB_CREATOR +JOB_DEFINITION.JOB_DEFINITION +JOB_DESCRIPTION +JOB_DEST_ID +JOB_DURATION +JOB_END_TIME +JOB_ERROR +JOB_FREQUENCY +JOB_ID +JOB_INFO +JOB_LATENCY +JOB_MODE +JOB_NAME +JOB_NEXT_RUN_DATE +JOB_OWNER +JOB_PREFIX +JOB_PRIORITY +JOB_SCHEDULER_STATUS +JOB_SEQ +JOB_START_TIME +JOB_STATE +JOB_STATUS +JOB_STYLE +JOB_SUBNAME +JOB_TYPE +JOB_WEIGHT +JOINGROUP_NAME +JOINGROUP_OWNER +JOIN_COLUMN_COUNT +JOIN_CONDITION +JOIN_INDEX +JOIN_KEY_COUNT +JOIN_KEY_ID +JOIN_PATH_NAME +JOIN_POS +JOIN_STRUCTURE_SIZE +JOURNAL_ENTRY +JOURNAL_ENTRY_SEQ +JOURNAL_ENTRY_TYPE +JSONDGIMP.ODCIAGGREGATEINITIALIZE +JSONDGIMP.ODCIAGGREGATEITERATE +JSONDGIMP.ODCIAGGREGATEMERGE +JSONDGIMP.ODCIAGGREGATETERMINATE +JSONDGIMP.ODCIAGGREGATEWRAPCONTEXT +JSONHDGIMP.ODCIAGGREGATEINITIALIZE +JSONHDGIMP.ODCIAGGREGATEITERATE +JSONHDGIMP.ODCIAGGREGATEMERGE +JSONHDGIMP.ODCIAGGREGATETERMINATE +JSONHDGIMP.ODCIAGGREGATEWRAPCONTEXT +JSON_ARRAY_T.APPEND +JSON_ARRAY_T.APPEND_NULL +JSON_ARRAY_T.CLONE +JSON_ARRAY_T.GET +JSON_ARRAY_T.GET_BLOB +JSON_ARRAY_T.GET_BOOLEAN +JSON_ARRAY_T.GET_CLOB +JSON_ARRAY_T.GET_DATE +JSON_ARRAY_T.GET_NUMBER +JSON_ARRAY_T.GET_STRING +JSON_ARRAY_T.GET_TIMESTAMP +JSON_ARRAY_T.GET_TYPE +JSON_ARRAY_T.JSON_ARRAY_T +JSON_ARRAY_T.PARSE +JSON_ARRAY_T.PUT +JSON_ARRAY_T.PUT_NULL +JSON_ARRAY_T.REMOVE +JSON_DATAGUIDE. +JSON_ELEMENT_T.GET_SIZE +JSON_ELEMENT_T.IS_ARRAY +JSON_ELEMENT_T.IS_BOOLEAN +JSON_ELEMENT_T.IS_DATE +JSON_ELEMENT_T.IS_FALSE +JSON_ELEMENT_T.IS_NULL +JSON_ELEMENT_T.IS_NUMBER +JSON_ELEMENT_T.IS_OBJECT +JSON_ELEMENT_T.IS_SCALAR +JSON_ELEMENT_T.IS_STRING +JSON_ELEMENT_T.IS_TIMESTAMP +JSON_ELEMENT_T.IS_TRUE +JSON_ELEMENT_T.MERGEPATCH +JSON_ELEMENT_T.ON_ERROR +JSON_ELEMENT_T.PARSE +JSON_ELEMENT_T.PATCH +JSON_ELEMENT_T.REDACT +JSON_ELEMENT_T.STRINGIFY +JSON_ELEMENT_T.TO_BLOB +JSON_ELEMENT_T.TO_BOOLEAN +JSON_ELEMENT_T.TO_CLOB +JSON_ELEMENT_T.TO_DATE +JSON_ELEMENT_T.TO_NUMBER +JSON_ELEMENT_T.TO_STRING +JSON_ELEMENT_T.TO_TIMESTAMP +JSON_HIERDATAGUIDE. +JSON_OBJECT_T.CLONE +JSON_OBJECT_T.GET +JSON_OBJECT_T.GET_ARRAY +JSON_OBJECT_T.GET_BLOB +JSON_OBJECT_T.GET_BOOLEAN +JSON_OBJECT_T.GET_CLOB +JSON_OBJECT_T.GET_DATE +JSON_OBJECT_T.GET_KEYS +JSON_OBJECT_T.GET_NUMBER +JSON_OBJECT_T.GET_OBJECT +JSON_OBJECT_T.GET_STRING +JSON_OBJECT_T.GET_TIMESTAMP +JSON_OBJECT_T.GET_TYPE +JSON_OBJECT_T.HAS +JSON_OBJECT_T.JSON_OBJECT_T +JSON_OBJECT_T.PARSE +JSON_OBJECT_T.PUT +JSON_OBJECT_T.PUT_NULL +JSON_OBJECT_T.REMOVE +JSON_OBJECT_T.RENAME_KEY +JSON_SCALAR_T.CLONE +JSON_SCALAR_T.JSON_SCALAR_T +JVMFCB. +JVMFCB.EXIT +JVMFCB.INIT +JVMFCB.PUT +JVMRJBC. +JVMRJBC.DONE +JVMRJBC.GETLOB +JVMRJBC.GETPATH +JVMRJBC.INIT +JVMRJBC.PUTLOB +JVMRJBC.PUTPATH +JVMRJBCINV. +JVMRJBCINV.DROP_JAR +JVMRJBCINV.FINISH_LOADING_JAR +JVMRJBCINV.HANDLEMD5 +JVMRJBCINV.JAR_STATUS +JVMRJBCINV.RJBC_DONE +JVMRJBCINV.RJBC_FLAGS +JVMRJBCINV.RJBC_INIT +JVMRJBCINV.RJBC_NORMALIZE +JVMRJBCINV.RJBC_OUTPUT +JVMRJBCINV.RJBC_REQUEST +JVMRJBCINV.RJBC_RESPOND +JVMRJBCINV.RJBC_SESSID +JVMRJBCINV.START_LOADING_JAR +KADDR +KBYTES_READ +KBYTES_WRITTEN +KCISYS_CTXAGG. +KDZSTORAGETYPE. +KEEP +KEEP_FILES +KEEP_OPTIONS +KEEP_UNTIL +KEEP_VALUE +KEPT +KEPT_VERSIONS +KEY +KEY1 +KEY2 +KEY3 +KEY4 +KEYSIZE +KEYSTORE_MODE +KEYSTORE_TYPE +KEYWORD +KEY_DATA_TYPE +KEY_EXPRESSION +KEY_ID +KEY_LENGTH +KEY_NAME +KEY_ORDER_NUM +KEY_POSITION +KEY_SIZE +KEY_USE +KEY_VALUE +KEY_VERSION +KGLLKHDL +KGLLKMOD +KGLLKREQ +KGLLKTYPE +KGLLKUSE +KIND +KNOWN_AGENTS +KNOWN_STALE +KSACL_SERVICE_NAME +KSACL_SOURCE_LOCATION +KSACL_USER_NAME +KUBSAGT. +KUBSAGT.DESCRIBE_CLOSE +KUBSAGT.DESCRIBE_GETINFO +KUBSAGT.DESCRIBE_OPEN +KUBSAGT.DESCRIBE_VERSION +KUBSAGT.FETCH_CLOSE +KUBSAGT.FETCH_DATA +KUBSAGT.FETCH_INIT +KUBSAGT.FETCH_OPEN +KUPC$QUEUE. +KUPC$QUEUE.TRANSCEIVE +KUPC$QUEUE_INT. +KUPC$QUEUE_INT.ATTACH_QUEUE +KUPC$QUEUE_INT.ATTACH_QUEUES +KUPC$QUEUE_INT.CREATE_QUEUES +KUPC$QUEUE_INT.DELETE_QUEUES +KUPC$QUEUE_INT.DETACH_QUEUE +KUPC$QUEUE_INT.DETACH_QUEUES +KUPC$QUEUE_INT.GET_STATUS +KUPC$QUEUE_INT.GET_STATUS_MSG_COUNT +KUPC$QUEUE_INT.GET_SUBSCRIBER_COUNT +KUPC$QUEUE_INT.ISREMOTE +KUPC$QUEUE_INT.PREPARE_QUEUE_TABLE +KUPC$QUEUE_INT.PUT_STATUS +KUPC$QUEUE_INT.RECEIVE +KUPC$QUEUE_INT.SEND +KUPC$QUEUE_INT.SET_DEBUG +KUPC$QUEUE_INT.TRANSCEIVE +KUPC$QUE_INT. +KUPC$QUE_INT.ATTACH_QUEUE +KUPC$QUE_INT.ATTACH_QUEUES +KUPC$QUE_INT.CREATE_QUEUES +KUPC$QUE_INT.DELETE_QUEUES +KUPC$QUE_INT.DETACH_QUEUE +KUPC$QUE_INT.DETACH_QUEUES +KUPC$QUE_INT.GET_STATUS +KUPC$QUE_INT.GET_STATUS_MSG_COUNT +KUPC$QUE_INT.GET_SUBSCRIBER_COUNT +KUPC$QUE_INT.PREPARE_QUEUE_TABLE +KUPC$QUE_INT.PUT_STATUS +KUPC$QUE_INT.RECEIVE +KUPC$QUE_INT.SEND +KUPC$QUE_INT.SET_DEBUG +KUPC$QUE_INT.TRANSCEIVE_INT +KUPC$_ADD_DEVICE.KUPC$_ADD_DEVICE +KUPC$_ADD_FILE.KUPC$_ADD_FILE +KUPC$_API_ACK.KUPC$_API_ACK +KUPC$_BAD_FILE.KUPC$_BAD_FILE +KUPC$_COMPLETE_IMP_OBJECT.KUPC$_COMPLETE_IMP_OBJECT +KUPC$_DATA_FILTER.KUPC$_DATA_FILTER +KUPC$_DATA_REMAP.KUPC$_DATA_REMAP +KUPC$_DEVICE_IDENT.KUPC$_DEVICE_IDENT +KUPC$_DISK_FILE.KUPC$_DISK_FILE +KUPC$_ENCODED_PWD.KUPC$_ENCODED_PWD +KUPC$_ESTIMATE_JOB.KUPC$_ESTIMATE_JOB +KUPC$_EXIT.KUPC$_EXIT +KUPC$_FILEINFO.KUPC$_FILEINFO +KUPC$_FILE_LIST.KUPC$_FILE_LIST +KUPC$_FIXUP_VIRTUAL_COLUMN.KUPC$_FIXUP_VIRTUAL_COLUMN +KUPC$_GET_WORK.KUPC$_GET_WORK +KUPC$_JOBINFO.ADDERROR +KUPC$_JOBINFO.ADDLINE +KUPC$_JOBINFO.ADDLOGENTRY +KUPC$_JOBINFO.ADDTIMESTAMP +KUPC$_JOBINFO.CREATEJOBINFO +KUPC$_JOBINFO.FORMAT +KUPC$_JOBINFO.KUPC$_JOBINFO +KUPC$_JOBINFO.PRINTJOBINFO +KUPC$_LOAD_DATA.KUPC$_LOAD_DATA +KUPC$_LOAD_METADATA.KUPC$_LOAD_METADATA +KUPC$_LOG_ENTRY.KUPC$_LOG_ENTRY +KUPC$_LOG_ERROR.KUPC$_LOG_ERROR +KUPC$_MASTERERROR.KUPC$_MASTERERROR +KUPC$_MASTERJOBINFO.KUPC$_MASTERJOBINFO +KUPC$_MASTER_KEY_EXCHANGE.KUPC$_MASTER_KEY_EXCHANGE +KUPC$_MDFILEPIECE.KUPC$_MDFILEPIECE +KUPC$_MDREPLOFFSETS.KUPC$_MDREPLOFFSETS +KUPC$_MESSAGE.ISDATAGRAM +KUPC$_MESSAGE.ISREQUEST +KUPC$_MESSAGE.ISRESPONSE +KUPC$_METADATA_FILTER.KUPC$_METADATA_FILTER +KUPC$_METADATA_REMAP.KUPC$_METADATA_REMAP +KUPC$_METADATA_TRANSFORM.KUPC$_METADATA_TRANSFORM +KUPC$_OPEN.KUPC$_OPEN +KUPC$_POST_MT_INIT.KUPC$_POST_MT_INIT +KUPC$_PREPARE_DATA.KUPC$_PREPARE_DATA +KUPC$_RECOMP.KUPC$_RECOMP +KUPC$_RELEASE_FILES.KUPC$_RELEASE_FILES +KUPC$_RESTART.KUPC$_RESTART +KUPC$_RESTORE_LOGGING.KUPC$_RESTORE_LOGGING +KUPC$_SEQUENTIAL_FILE.KUPC$_SEQUENTIAL_FILE +KUPC$_SET_PARALLEL.KUPC$_SET_PARALLEL +KUPC$_SET_PARAMETER.KUPC$_SET_PARAMETER +KUPC$_SHADOW_KEY_EXCHANGE.KUPC$_SHADOW_KEY_EXCHANGE +KUPC$_SQL_FILE_JOB.KUPC$_SQL_FILE_JOB +KUPC$_START_JOB.KUPC$_START_JOB +KUPC$_STOP_JOB.KUPC$_STOP_JOB +KUPC$_STOP_WORKER.KUPC$_STOP_WORKER +KUPC$_TABLE_DATA_ARRAY.KUPC$_TABLE_DATA_ARRAY +KUPC$_TAB_MT_COLS. +KUPC$_TYPE_COMP_READY.KUPC$_TYPE_COMP_READY +KUPC$_UNLOAD_DATA.KUPC$_UNLOAD_DATA +KUPC$_UNLOAD_METADATA.KUPC$_UNLOAD_METADATA +KUPC$_WORKERERROR.KUPC$_WORKERERROR +KUPC$_WORKER_EXIT.KUPC$_WORKER_EXIT +KUPC$_WORKER_FILE.KUPC$_WORKER_FILE +KUPC$_WORKER_FILE_LIST.KUPC$_WORKER_FILE_LIST +KUPC$_WORKER_GET_PWD.KUPC$_WORKER_GET_PWD +KUPC$_WORKER_LOG_ENTRY.KUPC$_WORKER_LOG_ENTRY +KUPCC. +KUPD$DATA. +KUPD$DATA.DEBUG_ENABLED +KUPD$DATA.ET_CREATE_ERROR_TABLE +KUPD$DATA.FETCH_INSERT_STMT +KUPD$DATA.OPEN +KUPD$DATA.SET_DEBUG +KUPD$DATA.SET_PARAMETER +KUPD$DATA.START_JOB +KUPD$DATA_INT. +KUPD$DATA_INT.FETCH_METADATA +KUPD$DATA_INT.GET_OPT_PARAM +KUPD$DATA_INT.GET_TAB_INFO +KUPD$DATA_INT.LOAD_DATA +KUPD$DATA_INT.NETLOAD_DATA +KUPD$DATA_INT.SELECT_MODE +KUPD$DATA_INT.SEND_TRACE_MSG +KUPD$DATA_INT.UNLOAD_DATA +KUPF$FILE. +KUPF$FILE.ADD_DEVICE +KUPF$FILE.ADD_FILE +KUPF$FILE.ADD_TDX_ROW_CB +KUPF$FILE.ALLOCATE_DEVICE +KUPF$FILE.CHECK_ACCESS +KUPF$FILE.CHECK_FATAL_ERROR +KUPF$FILE.CLOSE_CONTEXT +KUPF$FILE.DELETE_UNUSED_FILE_REFS +KUPF$FILE.FILE_REQUEST +KUPF$FILE.FILE_REQUEST_NAK +KUPF$FILE.FLUSH_LOB +KUPF$FILE.GET_BLKBUF_SIZES +KUPF$FILE.GET_DEFAULT_FILENAME +KUPF$FILE.GET_DUMPFILE_INFO +KUPF$FILE.GET_FILE_ATTRS +KUPF$FILE.GET_FILE_LIST +KUPF$FILE.GET_FORMATTED_TIME +KUPF$FILE.GET_FULL_FILENAME +KUPF$FILE.GET_MAX_CSWIDTH +KUPF$FILE.INIT +KUPF$FILE.INIT_CB +KUPF$FILE.INIT_TDX_STATS +KUPF$FILE.IS_DUMPFILE_SET_CONSISTENT +KUPF$FILE.JOB_MODES +KUPF$FILE.LOCATE_MASTER +KUPF$FILE.LOG_MESSAGES +KUPF$FILE.MARK_FILES_AS_UNUSABLE +KUPF$FILE.MASTER_TABLE_UNLOAD_STARTED +KUPF$FILE.OPEN_CONTEXT +KUPF$FILE.READ_LOB +KUPF$FILE.RELEASE_FILE +KUPF$FILE.RELEASE_FILES +KUPF$FILE.REQUEST_ENCPWD +KUPF$FILE.REQUEST_FILE +KUPF$FILE.RESET_EOF +KUPF$FILE.SET_DEBUG +KUPF$FILE.TERM +KUPF$FILE.TRACE +KUPF$FILE.UPD_FILE_COMP_BYTES +KUPF$FILE.UPD_TDX_FILEINFO_CB +KUPF$FILE.UPD_TDX_STATS_CB +KUPF$FILE.VERIFY_DUMPFILE_SET +KUPF$FILE.WRITE_LOB +KUPF$FILE_INT. +KUPF$FILE_INT.CLOSE_CONTEXT +KUPF$FILE_INT.CREATE_DUMP_FILE +KUPF$FILE_INT.CREATE_KEY_INFO +KUPF$FILE_INT.DELETE_DUMP_FILE +KUPF$FILE_INT.ENCODE_PWD +KUPF$FILE_INT.EXAMINE_DUMP_FILE +KUPF$FILE_INT.FLUSH_LOB +KUPF$FILE_INT.GET_BLKBUF_SIZES +KUPF$FILE_INT.GET_DEBUG_EVENT +KUPF$FILE_INT.GET_DEFAULT_CREDENTIAL +KUPF$FILE_INT.GET_DEFAULT_FILENAME +KUPF$FILE_INT.GET_ENCODED_PWD +KUPF$FILE_INT.GET_FORMATTED_TIME +KUPF$FILE_INT.GET_FULL_FILENAME +KUPF$FILE_INT.GET_MAX_CSWIDTH +KUPF$FILE_INT.GTOP +KUPF$FILE_INT.INIT +KUPF$FILE_INT.IS_DUMPFILE_A_RESTFILE +KUPF$FILE_INT.OPEN_CONTEXT +KUPF$FILE_INT.PARSE_FILENAME +KUPF$FILE_INT.READ_LOB +KUPF$FILE_INT.RELEASE_FILES +KUPF$FILE_INT.SET_DEBUG +KUPF$FILE_INT.SET_TRANS_PARAMS +KUPF$FILE_INT.TERM +KUPF$FILE_INT.VERIFY_KEY_INFO +KUPF$FILE_INT.WRITE_LOB +KUPM$MCP. +KUPM$MCP.CLOSE_JOB +KUPM$MCP.DISPATCH +KUPM$MCP.FILE_LOG_MESSAGE +KUPM$MCP.FILE_TO_WORKER +KUPM$MCP.GET_ENDIANNESS +KUPM$MCP.MAIN +KUPM$MCP.MAINLOOP +KUPM$MCP.SET_DEBUG +KUPM$MCP.VALIDATE_EXPRESSION +KUPP$PROC. +KUPP$PROC.ANY_DEBUG_TRACE_INFO +KUPP$PROC.APPLY_TRACE_DEBUG_RULES +KUPP$PROC.CHANGE_USER +KUPP$PROC.CHECK_FOR_INTERRUPT +KUPP$PROC.CHECK_WORKER_STATUS +KUPP$PROC.CREATE_MASTER_PROCESS +KUPP$PROC.CREATE_WORKER_PROCESSES +KUPP$PROC.DELETE_WORKER_PROCESSES +KUPP$PROC.DISABLE_MULTIPROCESS +KUPP$PROC.ENABLE_FLASHBACK_DMLS +KUPP$PROC.ENABLE_MULTIPROCESS +KUPP$PROC.GET_NLS_ALTER_SESSION +KUPP$PROC.GET_TRACE_DEBUG +KUPP$PROC.GET_WORKER_EXCEPTION +KUPP$PROC.INIT_DONE +KUPP$PROC.IS_MULTIPROCESS_ENABLED +KUPP$PROC.JOB_ALIVE +KUPP$PROC.KILL_WORKER +KUPP$PROC.OPTION_ENABLED +KUPP$PROC.SEC_TT_LOADED +KUPP$PROC.SEC_TT_UNLOADED +KUPP$PROC.SET_PROFILING +KUPP$PROC.SET_REMOTE_WORKER +KUPP$PROC.SET_TRACE_DEBUG +KUPP$PROC.SHUTDOWN_IN_PROGRESS +KUPP$PROC.TOTAL_WORKERS_ALIVE +KUPP$PROC.WHATS_MY_ID +KUPP$PROC.WHATS_MY_NAME +KUPP$PROC.WHAT_AM_I +KUPP$PROC.WHAT_ORACLE_PRODUCT +KUPP$PROC.WORKER_EXTTBL_ACTIVE +KUPP$PROC.WORKER_EXTTBL_FULLNAME +KUPP$PROC.WORKER_EXTTBL_INACTIVE +KUPP$PROC.WORKER_PROCESS_INIT +KUPP$PROC.WORKER_SERVICE_INIT +KUPU$UTILITIES. +KUPU$UTILITIES.BITCLR +KUPU$UTILITIES.BITSET +KUPU$UTILITIES.BITSETRET +KUPU$UTILITIES.BITSOC +KUPU$UTILITIES.BITTST +KUPU$UTILITIES.BITTSTANY +KUPU$UTILITIES.BOOLTOINT +KUPU$UTILITIES.BOOLTOSTR +KUPU$UTILITIES.DEBUG +KUPU$UTILITIES.GET_REMOTE_DBLINK_USER +KUPU$UTILITIES.REPLACE_XML_VALUES +KUPU$UTILITIES.UPDATEFEATURETABLE +KUPU$UTILITIES.WRITEAUDITRECORD +KUPU$UTILITIES_INT. +KUPU$UTILITIES_INT.CHECK_ENCRYPTION_WALLET +KUPU$UTILITIES_INT.CHECK_IF_SHARDED_DB +KUPU$UTILITIES_INT.CHECK_IGNORE_DESC_IN_INDEX +KUPU$UTILITIES_INT.CHECK_TBS_FOR_TDECOL_TABS +KUPU$UTILITIES_INT.CREATE_DIRECTORY +KUPU$UTILITIES_INT.DEBUG +KUPU$UTILITIES_INT.DECODE +KUPU$UTILITIES_INT.DH_CHECK_DIGESTS +KUPU$UTILITIES_INT.DH_DECRYPT +KUPU$UTILITIES_INT.DH_ENCRYPT +KUPU$UTILITIES_INT.DH_FREE_HANDLE +KUPU$UTILITIES_INT.DH_GEN_SHARED_KEY +KUPU$UTILITIES_INT.DH_GET_PUBLIC_KEY +KUPU$UTILITIES_INT.DH_NEW_HANDLE +KUPU$UTILITIES_INT.DIRECTORY_SCAN +KUPU$UTILITIES_INT.ENCODE +KUPU$UTILITIES_INT.GET_DP_UPDATE_LOCK +KUPU$UTILITIES_INT.GET_PARAMETER_VALUE +KUPU$UTILITIES_INT.GET_REMOTE_DBLINK_USER +KUPU$UTILITIES_INT.GET_SESSION_STAT +KUPU$UTILITIES_INT.GET_SHARDED_TABLE_FAMILY_ID +KUPU$UTILITIES_INT.INTALGCONV +KUPU$UTILITIES_INT.IS_SUPERSET +KUPU$UTILITIES_INT.RELEASE_DP_UPDATE_LOCK +KUPU$UTILITIES_INT.SET_DEBUG +KUPU$UTILITIES_INT.TEN_G_LOGON_ALLOWED +KUPU$UTILITIES_INT.UPDATEFEATURETABLE +KUPU$UTILITIES_INT.WRITEAUDITRECORD +KUPV$FT. +KUPV$FT.ATTACH_JOB +KUPV$FT.BUILD_COL_LIST +KUPV$FT.CREATE_GBL_TEMPORARY_MASTERS +KUPV$FT.DP_ATTACH_JOB +KUPV$FT.ERROR_TEXT +KUPV$FT.FLUSH_TIMINGS +KUPV$FT.GET_FORMATTED_TIME +KUPV$FT.HAS_PRIVS +KUPV$FT.MESSAGE_TEXT +KUPV$FT.OPEN_JOB +KUPV$FT.RECORD_DELTA_TIMINGS +KUPV$FT.SET_APPLICATION_ROLE +KUPV$FT.SET_LONGOPS +KUPV$FT.START_TIMINGS +KUPV$FT_INT. +KUPV$FT_INT.ACTIVE_CLIENT_COUNT +KUPV$FT_INT.ACTIVE_JOB +KUPV$FT_INT.ASSIGN_JOB +KUPV$FT_INT.ATTACH_POSSIBLE +KUPV$FT_INT.ATTACH_TO_JOB +KUPV$FT_INT.BUILD_MTABLE_INDEXES +KUPV$FT_INT.CHECK_USER_VALID +KUPV$FT_INT.CREATE_NEW_JOB +KUPV$FT_INT.DEBUG_ENABLED +KUPV$FT_INT.DELETE_JOB +KUPV$FT_INT.DELETE_MASTER_TABLE +KUPV$FT_INT.DETACH_JOB +KUPV$FT_INT.FATAL_ERROR +KUPV$FT_INT.GET_DEBUG_INFO +KUPV$FT_INT.GET_ERROR_TEXT +KUPV$FT_INT.GET_INSTANCE_ID +KUPV$FT_INT.GET_JOB_GUID +KUPV$FT_INT.GET_JOB_INFO +KUPV$FT_INT.GET_JOB_QUEUES +KUPV$FT_INT.GET_MAX_STRING_SIZE +KUPV$FT_INT.GET_PLATFORM_NAME +KUPV$FT_INT.GET_SESSION_ADDRESS +KUPV$FT_INT.GET_SOLE_JOBNAME +KUPV$FT_INT.MASTER_TBL_LOCK +KUPV$FT_INT.MASTER_TBL_UNLOCK +KUPV$FT_INT.ON_BEHALF +KUPV$FT_INT.REMOVE_NEW_ATTACH +KUPV$FT_INT.REMOVE_NEW_JOB +KUPV$FT_INT.SET_DEBUG +KUPV$FT_INT.SET_DEBUG_FS +KUPV$FT_INT.SET_EVENT +KUPV$FT_INT.UPDATE_JOB_INFO +KUPV$FT_INT.UPDATE_JOB_SNUM +KUPV$FT_INT.VALID_HANDLE +KUPW$WORKER. +KUPW$WORKER.DISPATCH_WORK_ITEMS +KUPW$WORKER.FETCH_UNLOAD_METHOD +KUPW$WORKER.GET_CONTAINER_ID +KUPW$WORKER.GET_JOB_VERSION +KUPW$WORKER.GET_PROXY_VAT_VIEW +KUPW$WORKER.IS_IMPORT_TRANSPORTABLE +KUPW$WORKER.MAIN +KUPW$WORKER.MARK_BAD_OBJECT_CALLBACK +KUPW$WORKER.REPORT_ERROR_CALLBACK +KUPW$WORKER.SET_DEBUG +KUPW$WORKER.SET_OPTION_TRANSFORM_CALLBACK +KUPW$WORKER.STREAM_MD_REMAP_SCHEMA +KXFTERRCODE +KXFTINSTID +KXFTITASKID +KXFTOUT1 +KXFTOUT2 +KXFTOUT3 +KXFTOUT4 +KXFTOUT5 +KXFTOUT6 +KXFTOUT7 +KXFTOUT8 +KXFTPDBUID +KXFTSLAVEID +KXFTTASKID +KXFTTIME +KXFTTXNID1 +KXFTTXNID2 +KXFTTXNID3 +LABEL +LADDR +LAG +LANGUAGE +LANGUAGE_FLAG +LANGUAGE_MISMATCH +LARGE_READS_AVG +LARGE_READS_SUM +LARGE_READS_SUMX2 +LARGE_READ_BYTES_AVG +LARGE_READ_BYTES_SUM +LARGE_READ_BYTES_SUMX2 +LARGE_READ_IOPS +LARGE_READ_LATENCY_AVG +LARGE_READ_LATENCY_SUM +LARGE_READ_LATENCY_SUMX2 +LARGE_READ_MBPS +LARGE_READ_MEGABYTES +LARGE_READ_REQS +LARGE_READ_REQUESTS +LARGE_READ_SERVICETIME +LARGE_WRITES_AVG +LARGE_WRITES_SUM +LARGE_WRITES_SUMX2 +LARGE_WRITE_BYTES_AVG +LARGE_WRITE_BYTES_SUM +LARGE_WRITE_BYTES_SUMX2 +LARGE_WRITE_IOPS +LARGE_WRITE_LATENCY_AVG +LARGE_WRITE_LATENCY_SUM +LARGE_WRITE_LATENCY_SUMX2 +LARGE_WRITE_MBPS +LARGE_WRITE_MEGABYTES +LARGE_WRITE_REQS +LARGE_WRITE_REQUESTS +LARGE_WRITE_SERVICETIME +LASTFREE +LASTINC_TIME +LASTSYNC +LASTTIME +LASTUSED +LAST_ABORTED_SIZE +LAST_ACCESSED_TIME +LAST_ACTION +LAST_ACTION_REASON +LAST_ACTION_TIME +LAST_ACTIVE_CHILD_ADDRESS +LAST_ACTIVE_TIME +LAST_ANALYZED +LAST_APPLY_POSITION +LAST_ARCHIVE_TS +LAST_ASH_SAMPLE_ID +LAST_ATTEMPT +LAST_AUTOPRG_TIME +LAST_AVG_CACHED_HORIZON +LAST_AVG_MEMORY_HORIZON +LAST_AVG_SUBSHARD_HORIZON +LAST_BASE_SEQUENCE +LAST_BROWSED_NUM +LAST_BROWSED_SEQ +LAST_BROWSE_NUM +LAST_BROWSE_POSITION +LAST_BROWSE_SEQ +LAST_CALL_ET +LAST_CAPTURED +LAST_CHANGE +LAST_CHANGE# +LAST_CHANGED_BY +LAST_CHANGE_TIME +LAST_CHECKPOINT_TIME +LAST_COMPLETE_SEQUENCE +LAST_CONVERT +LAST_CREATED_TASKNUM +LAST_CR_BUFFER_GETS +LAST_CU_BUFFER_GETS +LAST_CYCLE_TIME +LAST_DATAMOVE_CLST +LAST_DATE +LAST_DB_REPORT_TIME +LAST_DDL_TIME +LAST_DEALLOC_CHANGE# +LAST_DEGREE +LAST_DEQLOG_PROCESSING_TIME +LAST_DEQUEUED_NUM +LAST_DEQUEUED_SEQ +LAST_DEQUEUE_TIME +LAST_DEQ_SEQ +LAST_DISK_READS +LAST_DISK_WRITES +LAST_DONE_TIME +LAST_ELAPSED_TIME +LAST_EM_REPORT_TIME +LAST_ENABLED_TIME +LAST_END_DATE +LAST_ENQUEUED_MSG +LAST_ENQUEUED_SCN +LAST_ENQUEUE_TIME +LAST_ERR +LAST_ERROR +LAST_ERROR_DATE +LAST_ERROR_MSG +LAST_ERROR_TIME +LAST_ERR_TIME +LAST_EXECUTED +LAST_EXECUTION +LAST_EXECUTION_DATE +LAST_EXEC_START_TIME +LAST_EXEC_TIME +LAST_FAILED_CYCLE_TIME +LAST_FAILOVER_REASON +LAST_FAILOVER_TIME +LAST_FAILURE +LAST_FAILURE_SIZE +LAST_FAILURE_TASK +LAST_FAILURE_TASKNUM +LAST_FAILURE_TIME +LAST_FAIL_ITERATION +LAST_FAIL_TIME +LAST_FLUSH_TIME +LAST_GENERATED +LAST_GOOD_CONCURRENCY +LAST_GOOD_CONTENTION +LAST_GOOD_CPU_TIME +LAST_GOOD_CPU_WAIT +LAST_GOOD_DATE +LAST_GOOD_DOP +LAST_GOOD_DURATION +LAST_GOOD_IO_RATE +LAST_GOOD_IO_WAIT +LAST_GOOD_PRIORITY +LAST_GOOD_TEMP +LAST_GOOD_TEMP_WAIT +LAST_GOOD_UNDO_RATE +LAST_GOOD_UNDO_WAIT +LAST_HOUR_INCIDENTS +LAST_IDLE_TIME +LAST_INCIDENT +LAST_INCIDENT_IMPACT +LAST_INDEX +LAST_INDEX_CLEANUP_TIME +LAST_LCR_CREATION_TIME +LAST_LCR_LATENCY +LAST_LCR_PROPAGATION_TIME +LAST_LEEWAY_SHIFT +LAST_LOADING_TIME +LAST_LOAD_CLST +LAST_LOAD_TIME +LAST_LOGIN +LAST_LOGON_TIME +LAST_MANUPRG_TIME +LAST_MEMORY_USED +LAST_MESSAGE_NUMBER +LAST_MESSAGE_POSITION +LAST_MESSAGE_TIME +LAST_MISS_SIZE +LAST_MODIFIED +LAST_MODIFIED_TIME +LAST_MOD_TIME +LAST_MSG_ENQUEUE_TIME +LAST_MSG_LATENCY +LAST_MSG_PROPAGATION_TIME +LAST_NTFN_SENT_TIME +LAST_NTFN_START_TIME +LAST_NUMBER +LAST_OPEN_INCARNATION# +LAST_OPER_MODE +LAST_OPER_TIME +LAST_OPER_TYPE +LAST_OUTPUT_ROWS +LAST_PASS_ITERATION +LAST_PASS_TIME +LAST_PING_TIME +LAST_POPULATE_TIME +LAST_PROCESSED_VERSION +LAST_PROCESS_TIME +LAST_PURGE_DATE +LAST_PURGE_STATUS +LAST_PURGE_TIME +LAST_QUERIED +LAST_QUERY +LAST_RAN_ITERATION +LAST_RAN_TIME +LAST_RECEIVED_MSG +LAST_RECEIVED_MSG_POSITION +LAST_RECEIVED_TIME +LAST_RECEIVE_TIME +LAST_RECID +LAST_REDO_BLK# +LAST_REDO_BLOCK +LAST_REDO_CHANGE# +LAST_REDO_SEQ# +LAST_REDO_SEQUENCE# +LAST_REDO_TIME +LAST_REFRESH +LAST_REFRESH_DATE +LAST_REFRESH_END_TIME +LAST_REFRESH_METHOD +LAST_REFRESH_SCN +LAST_REFRESH_TIME +LAST_REFRESH_TYPE +LAST_REKEY_TIME +LAST_REPORT_TIME +LAST_REQ_TIME +LAST_RESUME_TIME +LAST_RUN_DATE +LAST_RUN_DURATION +LAST_RUN_TIME +LAST_SAMPLE_DATE +LAST_SAMPLE_PERIOD +LAST_SEC +LAST_SEND_TIME +LAST_SENT_MESSAGE_CREATE_TIME +LAST_SENT_MESSAGE_NUMBER +LAST_SENT_POSITION +LAST_SEQUENCE +LAST_SERVER_PID +LAST_SERVER_START_TIME +LAST_SQL_ACTIVE_TIME +LAST_STARTS +LAST_START_DATE +LAST_STATS_RESET_TIME +LAST_SYNC_TIME +LAST_TEMPSEG_SIZE +LAST_THINK_TIME +LAST_TIME +LAST_TIME_COMPUTED +LAST_TIME_UPDATED +LAST_TMGR_PROCESSING_TIME +LAST_TM_EXPIRY_TIME +LAST_TM_READY_TIME +LAST_TRY_CONCURRENCY +LAST_TRY_CONTENTION +LAST_TRY_CPU_TIME +LAST_TRY_CPU_WAIT +LAST_TRY_DATE +LAST_TRY_DOP +LAST_TRY_DURATION +LAST_TRY_IO_RATE +LAST_TRY_IO_WAIT +LAST_TRY_PRIORITY +LAST_TRY_RESULT +LAST_TRY_TEMP +LAST_TRY_TEMP_WAIT +LAST_TRY_UNDO_RATE +LAST_TRY_UNDO_WAIT +LAST_UPDATE +LAST_UPDATE_TIME +LAST_USAGE_DATE +LAST_USED +LAST_VALUE +LAST_VERIFIED +LAST_WAIT_TIME +LATCH +LATCH# +LATCHSPIN +LATCHWAIT +LATCH_HASH +LATCH_NAME +LATENCY +LATENCY_STATE +LATEST_INC_CTIME +LATEST_SAMPLE_ID +LATEST_SAMPLE_TIME +LATEST_SCN +LATEST_TIME +LAYER_ID +LAYER_NAME +LBAC$AFTER_CREATE. +LBAC$AFTER_DROP. +LBAC$BEFORE_ALTER. +LBAC$SA. +LBAC$SA.CREATE_POLICY +LBAC$SA.DDL_CHECK +LBAC$SA.ENFORCE_DELETE +LBAC$SA.ENFORCE_INSERT +LBAC$SA.ENFORCE_LABEL_INSERT +LBAC$SA.ENFORCE_LABEL_UPDATE +LBAC$SA.ENFORCE_READ +LBAC$SA.ENFORCE_UPDATE +LBAC$SA.ENFORCE_WRITE +LBAC$SA.GET_CACHED_BYPASS +LBAC$SA.GET_CACHED_PRIVILEGES +LBAC$SA.GET_ROW_NLABEL +LBAC$SA.IS_POLICY_CACHED +LBAC$SA.LABEL_NAMES +LBAC$SA.PRIV_NAMES +LBAC$SA.SET_ROW_LABEL +LBAC$SA.STARTUP +LBAC$SA.STORE_UNION_PRIVS +LBAC$SA.VALIDATE_FORMAT +LBAC$SA.VALIDATE_PRIV +LBAC$SA_LABELS. +LBAC$SA_LABELS.COMPUTE_WRITE_LABEL +LBAC$SA_LABELS.FROM_LABEL +LBAC$SA_LABELS.INSERT_READ_LABEL +LBAC$SA_LABELS.INSERT_WRITE_LABEL +LBAC$SA_LABELS.LABEL_LEVEL_ONLY +LBAC$SA_LABELS.MERGE_LABEL +LBAC$SA_LABELS.SET_INVERSE_POLICY_BIT +LBAC$SA_LABELS.SET_USER_LABELS_INTERNAL +LBAC$SA_LABELS.STARTUP +LBAC$SA_LABELS.STORE_USER +LBAC$SA_LABELS.STORE_USER_LABEL_LIST +LBAC$SA_LABELS.SUBSET_GROUPS +LBAC$SA_LABELS.TO_LABEL +LBAC$SA_LABELS.UPDATE_DEFAULT_LABEL +LBAC$SA_LABELS.UPDATE_ROW_LABEL +LBAC_BIN_LABEL.BIN_SIZE +LBAC_BIN_LABEL.EQ +LBAC_BIN_LABEL.EQ_SQL +LBAC_BIN_LABEL.NEW_LBAC_BIN_LABEL +LBAC_BIN_LABEL.POLICY_ID +LBAC_BIN_LABEL.SET_INT +LBAC_BIN_LABEL.SET_RAW +LBAC_BIN_LABEL.TO_INT +LBAC_BIN_LABEL.TO_RAW +LBAC_CACHE. +LBAC_CACHE.BYPASSALL +LBAC_CACHE.BYPASSREAD +LBAC_CACHE.CACHE_TAGS +LBAC_CACHE.CACHE_TAGS_INV +LBAC_CACHE.CANONICALIZE_IDENTIFIER +LBAC_CACHE.CHECK_POLICYADMIN +LBAC_CACHE.CHECK_POLICYROLE +LBAC_CACHE.CHECK_POLICYSUBSCRIBED +LBAC_CACHE.COLUMN_NAME +LBAC_CACHE.FAILEDSTARTUP +LBAC_CACHE.GET_UNIQUE_ID +LBAC_CACHE.INVERSE_GROUP +LBAC_CACHE.IS_DIP_SET +LBAC_CACHE.IS_FAILOVER +LBAC_CACHE.IS_OID_CONFIGURED +LBAC_CACHE.IS_OLS_ENABLED +LBAC_CACHE.IS_OP_ALLOWED_LOGICAL +LBAC_CACHE.IS_RAC_ENABLED +LBAC_CACHE.MAX_SES_POLICY_ID +LBAC_CACHE.OID_ENABLED +LBAC_CACHE.OID_SUBSCRIBE +LBAC_CACHE.OID_UNSUBSCRIBE +LBAC_CACHE.OPTION_NUMBER +LBAC_CACHE.OPTION_STRING +LBAC_CACHE.OPTION_STRING_IMP +LBAC_CACHE.PACKAGE +LBAC_CACHE.POLICYEXISTS +LBAC_CACHE.POLICY_NAME +LBAC_CACHE.POL_NUMBER +LBAC_CACHE.SET_ALTER_ALLOW +LBAC_CACHE.SET_DIP_FLAG +LBAC_CACHE.STORE_DEFAULT_OPTIONS +LBAC_CACHE.UPDATE_PROPS_TABLE +LBAC_ERRORS. +LBAC_EVENTS. +LBAC_EVENTS.AFTER_CREATE +LBAC_EVENTS.AFTER_DROP +LBAC_EVENTS.BEFORE_ALTER +LBAC_EVENTS.BEFORE_DDL +LBAC_EVENTS.COMP_INSTALL +LBAC_EVENTS.PROG_INVOCATION +LBAC_EVENTS.PROG_TERMINATION +LBAC_EXP. +LBAC_EXP.INSTANCE_INFO_EXP +LBAC_EXP.SCHEMA_INFO_EXP +LBAC_EXP.SYSTEM_INFO_EXP +LBAC_FRAME_GRANT. +LBAC_LABEL.EQ +LBAC_LABEL.EQ_SQL +LBAC_LABEL.LBAC_LABEL_MAP +LBAC_LABEL.NEW_LBAC_LABEL +LBAC_LABEL.TO_TAG +LBAC_LABEL_LIST.COUNT +LBAC_LABEL_LIST.GET +LBAC_LABEL_LIST.NEW_LBAC_LABEL_LIST +LBAC_LABEL_LIST.POLICY_ID +LBAC_LABEL_LIST.PUT +LBAC_LABEL_TO_CHAR. +LBAC_LABEL_TO_NUMERIC. +LBAC_LGSTNDBY_UTIL. +LBAC_LGSTNDBY_UTIL.ADD_COMPARTMENTS +LBAC_LGSTNDBY_UTIL.ADD_GROUPS +LBAC_LGSTNDBY_UTIL.ALTER_COMPARTMENTS +LBAC_LGSTNDBY_UTIL.ALTER_GROUPS +LBAC_LGSTNDBY_UTIL.CONFIGURE_OLS +LBAC_LGSTNDBY_UTIL.CONVERT_USER_TO_DATA_LABEL +LBAC_LGSTNDBY_UTIL.CREATE_POLICY +LBAC_LGSTNDBY_UTIL.DISABLE_OLS +LBAC_LGSTNDBY_UTIL.DROP_ALL_COMPARTMENTS +LBAC_LGSTNDBY_UTIL.DROP_ALL_GROUPS +LBAC_LGSTNDBY_UTIL.DROP_COMPARTMENTS +LBAC_LGSTNDBY_UTIL.DROP_GROUPS +LBAC_LGSTNDBY_UTIL.ENABLE_OLS +LBAC_LGSTNDBY_UTIL.INSERT_LABEL +LBAC_LGSTNDBY_UTIL.SAVE_DEFAULT_LABELS +LBAC_LGSTNDBY_UTIL.SET_COMPARTMENTS +LBAC_LGSTNDBY_UTIL.SET_DEFAULT_LABEL +LBAC_LGSTNDBY_UTIL.SET_GROUPS +LBAC_LGSTNDBY_UTIL.SET_LEVELS +LBAC_LGSTNDBY_UTIL.SET_ROW_LABEL +LBAC_LGSTNDBY_UTIL.SET_USER_LABELS +LBAC_LGSTNDBY_UTIL.STORE_LABEL_LIST +LBAC_POLICY_ADMIN. +LBAC_POLICY_ADMIN.ALTER_SCHEMA_POLICY +LBAC_POLICY_ADMIN.APPLY_SCHEMA_POLICY +LBAC_POLICY_ADMIN.APPLY_TABLE_POLICY +LBAC_POLICY_ADMIN.DISABLE_SCHEMA_POLICY +LBAC_POLICY_ADMIN.DISABLE_TABLE_POLICY +LBAC_POLICY_ADMIN.ENABLE_SCHEMA_POLICY +LBAC_POLICY_ADMIN.ENABLE_TABLE_POLICY +LBAC_POLICY_ADMIN.POLICY_SUBSCRIBE +LBAC_POLICY_ADMIN.POLICY_UNSUBSCRIBE +LBAC_POLICY_ADMIN.REMOVE_SCHEMA_POLICY +LBAC_POLICY_ADMIN.REMOVE_TABLE_POLICY +LBAC_PRIVS.CLEAR_PRIV +LBAC_PRIVS.DIFF_PRIVS +LBAC_PRIVS.NEW_LBAC_PRIVS +LBAC_PRIVS.NONE +LBAC_PRIVS.POLICY_ID +LBAC_PRIVS.SET_PRIV +LBAC_PRIVS.TEST_PRIV +LBAC_PRIVS.UNION_PRIVS +LBAC_RLS. +LBAC_RLS.CHECK_FILTER +LBAC_RLS.CLEARHT +LBAC_RLS.INVKZSCO +LBAC_RLS.READCHECK_FILTER +LBAC_RLS.READCHECK_FILTER2 +LBAC_RLS.READ_FILTER +LBAC_SERVICES. +LBAC_SERVICES.AUDIT_ACTION +LBAC_SERVICES.AUDIT_PRIVILEGE +LBAC_SERVICES.CHECK_AUDIT +LBAC_SERVICES.DISABLE_OLS +LBAC_SERVICES.ENABLE_OLS +LBAC_SERVICES.EXECUTE_SYS_ACTION +LBAC_SERVICES.EXPORT_LBACSYS_PACKAGE_GRANTS +LBAC_SERVICES.INSTANCE_INFO_EXP +LBAC_SERVICES.RECREATE_TRIGGERS_UPGRADE +LBAC_SERVICES.SCHEMA_INFO_EXP +LBAC_SERVICES.SET_UGA +LBAC_SESSION. +LBAC_SESSION.BYPASSALL +LBAC_SESSION.BYPASSREAD +LBAC_SESSION.POLICY_DISABLED +LBAC_STANDARD. +LBAC_STANDARD.RAISE_FACILITY_ERROR +LBAC_STANDARD.RESET_TRUSTED_PROG +LBAC_STANDARD.SET_TRUSTED_PROG +LBAC_SYSDBA. +LBAC_SYSDBA.ALTER_POLICY +LBAC_SYSDBA.CREATE_POLICY +LBAC_SYSDBA.DISABLE_POLICY +LBAC_SYSDBA.DROP_POLICY +LBAC_SYSDBA.ENABLE_POLICY +LBAC_UTL. +LBAC_UTL.DATA_LABEL +LBAC_UTL.LABEL_FLAGS +LBAC_UTL.NLS_SUBSTRB +LBAC_UTL.NLS_VALIDNAME +LBAC_UTL.NUMBER_POLICY_COLUMN +LBAC_UTL.USER_DATA_LABEL +LCK_BITMAP +LCR$_DDL_RECORD.CONSTRUCT +LCR$_DDL_RECORD.EXECUTE +LCR$_DDL_RECORD.GET_BASE_TABLE_NAME +LCR$_DDL_RECORD.GET_BASE_TABLE_OWNER +LCR$_DDL_RECORD.GET_COMMAND_TYPE +LCR$_DDL_RECORD.GET_COMMIT_SCN +LCR$_DDL_RECORD.GET_COMMIT_SCN_FROM_POSITION +LCR$_DDL_RECORD.GET_COMMIT_TIME +LCR$_DDL_RECORD.GET_COMPATIBLE +LCR$_DDL_RECORD.GET_CURRENT_SCHEMA +LCR$_DDL_RECORD.GET_CURRENT_USER +LCR$_DDL_RECORD.GET_DDL_TEXT +LCR$_DDL_RECORD.GET_EDITION_NAME +LCR$_DDL_RECORD.GET_EXTRA_ATTRIBUTE +LCR$_DDL_RECORD.GET_LOGON_USER +LCR$_DDL_RECORD.GET_OBJECT_NAME +LCR$_DDL_RECORD.GET_OBJECT_OWNER +LCR$_DDL_RECORD.GET_OBJECT_TYPE +LCR$_DDL_RECORD.GET_POSITION +LCR$_DDL_RECORD.GET_ROOT_NAME +LCR$_DDL_RECORD.GET_SCN +LCR$_DDL_RECORD.GET_SCN_FROM_POSITION +LCR$_DDL_RECORD.GET_SOURCE_DATABASE_NAME +LCR$_DDL_RECORD.GET_SOURCE_TIME +LCR$_DDL_RECORD.GET_TAG +LCR$_DDL_RECORD.GET_THREAD_NUMBER +LCR$_DDL_RECORD.GET_TRANSACTION_ID +LCR$_DDL_RECORD.IS_NULL_TAG +LCR$_DDL_RECORD.MAP_LCR +LCR$_DDL_RECORD.SET_BASE_TABLE_NAME +LCR$_DDL_RECORD.SET_BASE_TABLE_OWNER +LCR$_DDL_RECORD.SET_COMMAND_TYPE +LCR$_DDL_RECORD.SET_CURRENT_SCHEMA +LCR$_DDL_RECORD.SET_CURRENT_USER +LCR$_DDL_RECORD.SET_DDL_TEXT +LCR$_DDL_RECORD.SET_EDITION_NAME +LCR$_DDL_RECORD.SET_EXTRA_ATTRIBUTE +LCR$_DDL_RECORD.SET_LOGON_USER +LCR$_DDL_RECORD.SET_OBJECT_NAME +LCR$_DDL_RECORD.SET_OBJECT_OWNER +LCR$_DDL_RECORD.SET_OBJECT_TYPE +LCR$_DDL_RECORD.SET_ROOT_NAME +LCR$_DDL_RECORD.SET_SOURCE_DATABASE_NAME +LCR$_DDL_RECORD.SET_TAG +LCR$_PROCEDURE_RECORD.GET_COMPATIBLE +LCR$_PROCEDURE_RECORD.GET_CURRENT_USER +LCR$_PROCEDURE_RECORD.GET_DEFAULT_USER +LCR$_PROCEDURE_RECORD.GET_LOGON_USER +LCR$_PROCEDURE_RECORD.GET_PACKAGE_NAME +LCR$_PROCEDURE_RECORD.GET_PACKAGE_OWNER +LCR$_PROCEDURE_RECORD.GET_PARAMETERS +LCR$_PROCEDURE_RECORD.GET_POSITION +LCR$_PROCEDURE_RECORD.GET_PROCEDURE_NAME +LCR$_PROCEDURE_RECORD.GET_PUBLICATION +LCR$_PROCEDURE_RECORD.GET_ROOT_NAME +LCR$_PROCEDURE_RECORD.GET_SCN +LCR$_PROCEDURE_RECORD.GET_SOURCE_DATABASE_NAME +LCR$_PROCEDURE_RECORD.GET_SOURCE_TIME +LCR$_PROCEDURE_RECORD.GET_TAG +LCR$_PROCEDURE_RECORD.GET_THREAD_NUMBER +LCR$_PROCEDURE_RECORD.GET_TRANSACTION_ID +LCR$_PROCEDURE_RECORD.IS_NULL_TAG +LCR$_PROCEDURE_RECORD.MAP_LCR +LCR$_ROW_RECORD.ADD_COLUMN +LCR$_ROW_RECORD.CONSTRUCT +LCR$_ROW_RECORD.CONVERT_LONG_TO_LOB_CHUNK +LCR$_ROW_RECORD.DELETE_COLUMN +LCR$_ROW_RECORD.EXECUTE +LCR$_ROW_RECORD.GET_BASE_OBJECT_ID +LCR$_ROW_RECORD.GET_COMMAND_TYPE +LCR$_ROW_RECORD.GET_COMMIT_SCN +LCR$_ROW_RECORD.GET_COMMIT_SCN_FROM_POSITION +LCR$_ROW_RECORD.GET_COMMIT_TIME +LCR$_ROW_RECORD.GET_COMPATIBLE +LCR$_ROW_RECORD.GET_EXTRA_ATTRIBUTE +LCR$_ROW_RECORD.GET_LOB_INFORMATION +LCR$_ROW_RECORD.GET_LOB_OFFSET +LCR$_ROW_RECORD.GET_LOB_OPERATION_SIZE +LCR$_ROW_RECORD.GET_LONG_INFORMATION +LCR$_ROW_RECORD.GET_OBJECT_ID +LCR$_ROW_RECORD.GET_OBJECT_NAME +LCR$_ROW_RECORD.GET_OBJECT_OWNER +LCR$_ROW_RECORD.GET_POSITION +LCR$_ROW_RECORD.GET_ROOT_NAME +LCR$_ROW_RECORD.GET_ROW_TEXT +LCR$_ROW_RECORD.GET_SCN +LCR$_ROW_RECORD.GET_SCN_FROM_POSITION +LCR$_ROW_RECORD.GET_SOURCE_DATABASE_NAME +LCR$_ROW_RECORD.GET_SOURCE_TIME +LCR$_ROW_RECORD.GET_TAG +LCR$_ROW_RECORD.GET_THREAD_NUMBER +LCR$_ROW_RECORD.GET_TRANSACTION_ID +LCR$_ROW_RECORD.GET_VALUE +LCR$_ROW_RECORD.GET_VALUES +LCR$_ROW_RECORD.GET_WHERE_CLAUSE +LCR$_ROW_RECORD.GET_XML_INFORMATION +LCR$_ROW_RECORD.IS_NULL_TAG +LCR$_ROW_RECORD.IS_STATEMENT_LCR +LCR$_ROW_RECORD.KEEP_COLUMNS +LCR$_ROW_RECORD.MAP_LCR +LCR$_ROW_RECORD.RENAME_COLUMN +LCR$_ROW_RECORD.SET_COMMAND_TYPE +LCR$_ROW_RECORD.SET_EXTRA_ATTRIBUTE +LCR$_ROW_RECORD.SET_LOB_INFORMATION +LCR$_ROW_RECORD.SET_LOB_OFFSET +LCR$_ROW_RECORD.SET_LOB_OPERATION_SIZE +LCR$_ROW_RECORD.SET_OBJECT_NAME +LCR$_ROW_RECORD.SET_OBJECT_OWNER +LCR$_ROW_RECORD.SET_ROOT_NAME +LCR$_ROW_RECORD.SET_ROW_TEXT +LCR$_ROW_RECORD.SET_SOURCE_DATABASE_NAME +LCR$_ROW_RECORD.SET_TAG +LCR$_ROW_RECORD.SET_VALUE +LCR$_ROW_RECORD.SET_VALUES +LCR$_ROW_RECORD.SET_XML_INFORMATION +LCR$_ROW_UNIT.LCR$_ROW_UNIT +LCRID_VERSION +LCR_COUNT +LCR_RETRY_ITERATION +LC_FREEABLE_MEMORY_OBJECTS +LC_FREEABLE_MEMORY_SIZE +LC_INUSE_MEMORY_OBJECTS +LC_INUSE_MEMORY_SIZE +LC_NAMESPACE +LEADING +LEAF_BLOCKS +LEAF_FILENAME +LEASEEXPIRY +LEN +LENGTH +LEVEL +LEVEL# +LEVEL_EXPRESSION +LEVEL_ID +LEVEL_ID_EXPRESSION +LEVEL_MEAS_ORDER +LEVEL_NAME +LEVEL_TYPE +LIBRARY +LIBRARYFILE +LIBRARY_NAME +LIB_IDX +LIB_NAME +LIGHT_WORKS +LIMIT +LIMIT_VALUE +LINE +LINE_NUMBER +LINK_NAME +LIST +LISTENER +LITERAL_HASH_VALUE +LITERAL_MISMATCH +LITREP_COMP_MISMATCH +LMODE +LOADED +LOADED_VERSIONS +LOADS +LOADS_DELTA +LOADS_TOTAL +LOAD_OPTIMIZER_STATS +LOAD_PREDEFINED_RULEBASES. +LOAD_RUNTIME_HEAP_FAILED +LOAD_SCN +LOAD_UNDO_STAT. +LOBCURRTIME +LOBEXPMQL +LOBID +LOBOBJID +LOBRDBA +LOBSPCANALTIME +LOBSQLMQL +LOBS_CAPTURED +LOBS_REPLAYED +LOBTSN +LOBUNDORETTIME +LOB_COL_NAME +LOB_ID +LOB_INDEX_NAME +LOB_INDPART_NAME +LOB_INDSUBPART_NAME +LOB_NAME +LOB_OPERATIONS +LOB_PARTITION_NAME +LOB_READS +LOB_SEGMENT_NAME +LOB_SUBPARTITION_NAME +LOB_VERSION_BASE +LOB_VERSION_WRAP +LOC +LOCAL +LOCALITY +LOCAL_ATTRIBUTES +LOCAL_AWRDBID +LOCAL_CONVERGE_TAG +LOCAL_INDEXES +LOCAL_METHODS +LOCAL_NID +LOCAL_PRIVILEGES +LOCAL_ROWID +LOCAL_TASK_ID +LOCAL_TEMP_TABLESPACE +LOCAL_TRANSACTION_ID +LOCAL_TRAN_ID +LOCAL_UNDO +LOCATION +LOCATION_NAME +LOCKED_MODE +LOCKED_TOTAL +LOCKOWNER +LOCKP +LOCKS +LOCKSEQUENCEID +LOCKSTATE +LOCKSTATEID +LOCKTYPE +LOCKWAIT +LOCK_DATE +LOCK_ELEMENT_ADDR +LOCK_ELEMENT_CLASS +LOCK_ELEMENT_NAME +LOCK_HELD +LOCK_ID1 +LOCK_ID2 +LOCK_MODE +LOCK_REQUEST +LOCK_TYPE +LOCK_USER_SCHEMA_FAILED +LOG# +LOGBSN +LOGFILE +LOGFILE_ASSIGNMENT +LOGGED_ON +LOGGING +LOGGING_LEVEL +LOGGING_PROPERTY +LOGICALLY_CORRUPT +LOGICAL_FILENAME +LOGICAL_IOS +LOGICAL_PATH +LOGICAL_READS +LOGICAL_READS_DELTA +LOGICAL_READS_TOTAL +LOGICAL_READ_PCT +LOGICAL_SECTOR_SIZE +LOGICAL_STANDBY_APPLY +LOGINS +LOGIN_ELAPSED_TIME +LOGIN_USER. +LOGMINER_ID +LOGMINER_SESSION_MISMATCH +LOGMNR$ALWAYSSUPLOG_PROC. +LOGMNR$ALWSUPLOG_TABF_PUBLIC. +LOGMNR$COL_GG_TABF_PUBLIC. +LOGMNR$GSBA_GG_TABF_PUBLIC. +LOGMNR$KEY_GG_TABF_PUBLIC. +LOGMNR$SEQ_GG_TABF_PUBLIC. +LOGMNR$TAB_GG_TABF_PUBLIC. +LOGMNR$USER_GG_TABF_PUBLIC. +LOGMNRGGC_TRIGGER. +LOGMNR_DDL_TRIGGER_PROC. +LOGMNR_DICT_CACHE. +LOGMNR_DICT_CACHE.ADD_COL +LOGMNR_DICT_CACHE.ADD_OBJ +LOGMNR_DICT_CACHE.ADD_OBJ_AT +LOGMNR_DICT_CACHE.ADD_SBA +LOGMNR_DICT_CACHE.CLEANOUT +LOGMNR_DICT_CACHE.COLTYPE_NAME +LOGMNR_DICT_CACHE.COMMIT_XID +LOGMNR_DICT_CACHE.DEL_BASEOBJ +LOGMNR_DICT_CACHE.DEL_OBJ +LOGMNR_DICT_CACHE.DGTLO +LOGMNR_DICT_CACHE.GETLOGMNRUID +LOGMNR_DICT_CACHE.GETTABLEMCV +LOGMNR_DICT_CACHE.GSII +LOGMNR_DICT_CACHE.GTLO3B +LOGMNR_DICT_CACHE.LOGMNR$CLONE_KEY_GG +LOGMNR_DICT_CACHE.LOGMNR$COL_GG +LOGMNR_DICT_CACHE.LOGMNR$FINALIZE_CLONE_KEY_GG +LOGMNR_DICT_CACHE.LOGMNR$GSBA_GG +LOGMNR_DICT_CACHE.LOGMNR$KEY_GG +LOGMNR_DICT_CACHE.LOGMNR$POPULATE_CACHE_PART +LOGMNR_DICT_CACHE.LOGMNR$SEQ_GG +LOGMNR_DICT_CACHE.LOGMNR$TAB_GG +LOGMNR_DICT_CACHE.LOGMNR$USER_GG +LOGMNR_DICT_CACHE.LOGMNR_GCID +LOGMNR_DICT_CACHE.LOGMNR_GET_IDEN_SEQ_NUM +LOGMNR_DICT_CACHE.LOGMNR_GET_IDEN_TAB +LOGMNR_DICT_CACHE.LOGMNR_SHARD_TS_INFO +LOGMNR_DICT_CACHE.LOGMNR_TSPART_INFO +LOGMNR_DICT_CACHE.LOGMNR_TS_INFO +LOGMNR_DICT_CACHE.MID_PROCESS_CTAS +LOGMNR_DICT_CACHE.OBJTYPE_NAME +LOGMNR_DICT_CACHE.PURGE_OBJ +LOGMNR_DICT_CACHE.PURGE_SCN_DID +LOGMNR_DICT_CACHE.PURGE_SCN_UID +LOGMNR_DICT_CACHE.REMOTE_SAVE_COLSET +LOGMNR_DICT_CACHE.ROLLBACK_XID +LOGMNR_DICT_CACHE.SAVEDRP_IDX +LOGMNR_DICT_CACHE.SAVEDRP_OBJ +LOGMNR_DICT_CACHE.SAVE_COLSET +LOGMNR_DICT_CACHE.SAVE_COLSET_AT +LOGMNR_DICT_CACHE.SAVE_KEYS +LOGMNR_DICT_CACHE.SAVE_OBJ +LOGMNR_DICT_CACHE.SAVE_OBJ_AT +LOGMNR_DICT_CACHE.SAVE_OBJ_SCN +LOGMNR_DICT_CACHE.SAVE_SEQ +LOGMNR_DICT_CACHE.TRACE_FAST_START +LOGMNR_DICT_CACHE.WRITE_TRACE_GG +LOGMNR_EM_SUPPORT. +LOGMNR_EM_SUPPORT.ADD_TABLE_INCLUSION_RULE +LOGMNR_EM_SUPPORT.ADD_USER_INCLUSION_RULE +LOGMNR_EM_SUPPORT.ADD_XID_INCLUSION_RULE +LOGMNR_EM_SUPPORT.DELETE_TABLE_INCLUSION_RULE +LOGMNR_EM_SUPPORT.DELETE_USER_INCLUSION_RULE +LOGMNR_EM_SUPPORT.DELETE_XID_INCLUSION_RULE +LOGMNR_EM_SUPPORT.VALIDATE_AUTH +LOGMNR_GET_GT_PROTOCOL. +LOGMNR_GTLO3. +LOGMNR_KRVRDA_TEST_APPLY. +LOGMNR_KRVRDLUID3. +LOGMNR_KRVRDREPDICT3. +LOGMNR_RMT_BLD. +LOGMNR_SESSION_ID +LOGMNR_UID +LOGOFF_DLOCK +LOGOFF_LREAD +LOGOFF_LWRITE +LOGOFF_PREAD +LOGOFF_TIME +LOGON_COUNT +LOGON_TIME +LOGON_USER +LOGSTDBY_ID +LOGSTDBY_INTERNAL. +LOGSTDBY_INTERNAL.EDS_ADD_PREREQ_I +LOGSTDBY_INTERNAL.EDS_ADD_TABLE_I +LOGSTDBY_INTERNAL.EDS_EVOLVE_TABLE_FINISH_I +LOGSTDBY_INTERNAL.EDS_EVOLVE_TABLE_I +LOGSTDBY_INTERNAL.EDS_GEN_SHADOWTAB_I +LOGSTDBY_INTERNAL.EDS_REMOVE_TABLE_I +LOGSTDBY_INTERNAL.INSTANTIATE_TABLE_I +LOGSTDBY_INTERNAL.VALIDATE_AUTH_I +LOGSTDBY_UNSUPPORTED_TABLES +LOG_CHKPT_INTERVAL_REDO_BLKS +LOG_CHKPT_TIMEOUT_REDO_BLKS +LOG_DATE +LOG_ERRORS +LOG_FILE_SIZE_REDO_BLKS +LOG_GROUP_NAME +LOG_GROUP_TYPE +LOG_HISTORY +LOG_ID +LOG_IO +LOG_MODE +LOG_NAME +LOG_OWNER +LOG_PURGE_TIME +LOG_SEQUENCE +LOG_SETUP_TIME +LOG_STATE +LOG_SWITCH_WAIT +LOG_TABLE +LOG_TRANSLATION_ERROR +LOG_TRIGGER +LOG_TYPE +LOG_USER +LONGHOLD_COUNT +LONGNAME +LONGP_POLICY +LONG_PREDICATE +LONG_WAITS +LONG_WAIT_TIME_MAX +LONG_WAIT_TIME_TOTAL +LOOKUP_SCAN +LOOP_DENSE_OVERRIDE +LOOP_TYPE +LOOP_VAR_OVERRIDE +LOST +LOST_TIME +LOST_WRITE_PROTECT +LOW +LOWB +LOWER_PORT +LOWER_RANGE +LOWEST_VERSION +LOWROWID +LOW_CHANGE# +LOW_GAP_SCN +LOW_GAP_TIME +LOW_MARK_SCN +LOW_OPTIMAL_SIZE +LOW_RESETLOGS_CHANGE# +LOW_RESETLOGS_TIME +LOW_SCN +LOW_SCNBAS +LOW_SCNWRP +LOW_SEQUENCE# +LOW_TIME +LOW_VALUE +LO_BNUM +LO_SETID +LRU_NUMBER +LSTIOTIM +LSTVAL +LT. +LT.ADDASPARENTWORKSPACE +LT.ADDUSERDEFINEDHINT +LT.ADD_TOPO_GEOMETRY_LAYER +LT.ALTERSAVEPOINT +LT.ALTERVERSIONEDTABLE +LT.ALTERWORKSPACE +LT.BEGINBULKLOADING +LT.BEGINDDL +LT.BEGINRESOLVE +LT.CHANGEWORKSPACETYPE +LT.COMMITBULKLOADING +LT.COMMITDDL +LT.COMMITRESOLVE +LT.COMPRESSWORKSPACE +LT.COMPRESSWORKSPACETREE +LT.COPYFORUPDATE +LT.COPYWORKSPACE +LT.CREATESAVEPOINT +LT.CREATEWORKSPACE +LT.DELETESAVEPOINT +LT.DELETE_TOPO_GEOMETRY_LAYER +LT.DISABLEVERSIONING +LT.DML_ +LT.DROPREPLICATIONSUPPORT +LT.ENABLEVERSIONING +LT.EXPORT +LT.EXPORT_SCHEMAS +LT.FINDRICSET +LT.FREEZEWORKSPACE +LT.GENERATEREPLICATIONSUPPORT +LT.GETBULKLOADVERSION +LT.GETCONFLICTWORKSPACE +LT.GETDIFFVERSIONS +LT.GETLOCKMODE +LT.GETLTLOCKSTR +LT.GETMULTIWORKSPACES +LT.GETOPCONTEXT +LT.GETORIGINALDDL +LT.GETPHYSICALTABLENAME +LT.GETPRIVS +LT.GETSESSIONINFO +LT.GETSYSTEMPARAMETER +LT.GETVALIDFROM +LT.GETVALIDTILL +LT.GETVERSION +LT.GETWMMETADATASPACE +LT.GETWORKSPACE +LT.GOTODATE +LT.GOTOSAVEPOINT +LT.GOTOWORKSPACE +LT.GRANTGRAPHPRIV +LT.GRANTPRIVSONPOLICY +LT.GRANTSYSTEMPRIV +LT.GRANTWORKSPACEPRIV +LT.IMPORT +LT.IMPORT_SCHEMAS +LT.INITIALIZE_AFTER_IMPORT +LT.ISWORKSPACEOCCUPIED +LT.LOCKROWS +LT.MAX_TIME +LT.MERGETABLE +LT.MERGEWORKSPACE +LT.MIN_TIME +LT.MOVE_PROC +LT.PURGETABLE +LT.RECOVERALLMIGRATINGTABLES +LT.RECOVERFROMDROPPEDUSER +LT.RECOVERMIGRATINGTABLE +LT.REFRESHTABLE +LT.REFRESHWORKSPACE +LT.RELOCATEWRITERSITE +LT.REMOVEASPARENTWORKSPACE +LT.REMOVEDEFERREDWORKSPACES +LT.REMOVEUSERDEFINEDHINT +LT.REMOVEWORKSPACE +LT.REMOVEWORKSPACETREE +LT.RENAMESAVEPOINT +LT.RENAMEWORKSPACE +LT.RESOLVECONFLICTS +LT.REVOKEGRAPHPRIV +LT.REVOKESYSTEMPRIV +LT.REVOKEWORKSPACEPRIV +LT.ROLLBACKBULKLOADING +LT.ROLLBACKDDL +LT.ROLLBACKRESOLVE +LT.ROLLBACKTABLE +LT.ROLLBACKTOSP +LT.ROLLBACKWORKSPACE +LT.SETCAPTUREEVENT +LT.SETCOMPRESSWORKSPACE +LT.SETCONFLICTWORKSPACE +LT.SETDIFFVERSIONS +LT.SETLOCKINGOFF +LT.SETLOCKINGON +LT.SETMULTIWORKSPACES +LT.SETSYSTEMPARAMETER +LT.SETTRIGGEREVENTS +LT.SETVALIDTIME +LT.SETVALIDTIMEFILTEROFF +LT.SETVALIDTIMEFILTERON +LT.SETWMVALIDUPDATEMODEOFF +LT.SETWMVALIDUPDATEMODEON +LT.SETWOOVERWRITEOFF +LT.SETWOOVERWRITEON +LT.SETWORKSPACELOCKMODEOFF +LT.SETWORKSPACELOCKMODEON +LT.SYNCHRONIZESITE +LT.UNFREEZEWORKSPACE +LT.UNLOCKROWS +LT.UNTIL_CHANGED +LT.USEDEFAULTVALUESFORNULLS +LTADM. +LTADM.ACQUIRELOCKONRESOURCE +LTADM.ACQUIRELOCKS +LTADM.ADDEVUNDOCODE +LTADM.ADDLOCKROWSINFOENTRY +LTADM.ADDVERSIONEDTABLE +LTADM.ALTERSAVEPOINT +LTADM.ALTERSTATE +LTADM.APPLY_UNIQUE_CONSTRAINTS +LTADM.ARETHERECONFLICTS +LTADM.ARETHEREDIFFS +LTADM.BEGINRESOLVE +LTADM.BUILD_MODIFIED_TABLES_LIST +LTADM.CHECKFORADDITIONALROWS +LTADM.CHECKWHERECLAUSE +LTADM.CHECK_FOR_NVE_CHILD_TABLES +LTADM.CHILD_TABLES_EXIST +LTADM.CLEANUPAUXTABLE +LTADM.CLEANUPMODTABLE +LTADM.CLEANUP_MW_TABLE +LTADM.COMPRESSSTATE +LTADM.COMPRESSSTATE_INTERNAL +LTADM.COMPUTERICWEIGHT +LTADM.COPYTABLE +LTADM.COPYTABLE_VT +LTADM.CREATESAVEPOINT +LTADM.CREATESTATE +LTADM.CURRENTUSERSSESSION +LTADM.DELETETABLE_INTERNAL +LTADM.DELETETABLE_INTERNAL_VT +LTADM.DISABLESYSTEMTRIGGERS +LTADM.DISABLESYSTEMTRIGGERS_EXP +LTADM.ENABLESYSTEMTRIGGERS +LTADM.ENDRESOLVE +LTADM.EXECSQL +LTADM.EXECSQLAUTO +LTADM.EXECSQLFROMCLOB +LTADM.EXECSQLINTOINT +LTADM.EXECSQLINTOSTR +LTADM.EXECSQLWUNDO +LTADM.EXISTCONFLICTS +LTADM.EXISTOPENSHORTTRANSINSTATE +LTADM.EXISTSOPENSHORTTRANS +LTADM.EXISTSOPENSHORTTRANSONTABLE +LTADM.EXISTSSAVEPOINT +LTADM.EXISTSSTATE +LTADM.FREEZESTATE +LTADM.GETALLRESOLVESTATUS +LTADM.GETALLSTATEATTRIBUTES +LTADM.GETANCESTORWORKSPACE +LTADM.GETCOLALIASES +LTADM.GETINSTEADOFDELTRIGNAME +LTADM.GETINSTEADOFINSTRIGNAME +LTADM.GETINSTEADOFUPDTRIGNAME +LTADM.GETLOCKWITHSTATUS +LTADM.GETRESOLVESTATUS +LTADM.GETSPVERSION +LTADM.GETSTATEATTRIBUTES +LTADM.GETSTATELOCKID +LTADM.GETSYSTEMPARAMETER +LTADM.GETWORKSPACECURVER +LTADM.GETWORKSPACEDEPTH +LTADM.GETWORKSPACESYSTEMMODE +LTADM.GOTODATE +LTADM.GOTOTS +LTADM.GRANTSTATEPRIV +LTADM.GRANTSYSTEMPRIV +LTADM.INSERT_INTO_MODIFIED_TABLES +LTADM.INSERT_INTO_MW_TABLE +LTADM.ISLOCKINGALIVE +LTADM.ISVERSIONEDTABLE +LTADM.LOGSESSIONINWS +LTADM.NO_VM_ALTER_PROC +LTADM.NO_VM_CREATE_PROC +LTADM.NO_VM_DROP_PROC +LTADM.NUMACTIVESESSIONS +LTADM.OPENCURSOR +LTADM.POSTTABLE_RIC +LTADM.REFRESHCURRENTMPLEAFS +LTADM.REFRESHSTATE_INTERNAL +LTADM.REFRESHSYSTEMPARAMETERS +LTADM.REFRESHTABLE +LTADM.RELEASELOCK +LTADM.RELEASELOCKS +LTADM.RELEASEWSPRESENCELOCKS +LTADM.REMOVESTATE +LTADM.RESETCRSTATUS +LTADM.RESOLVETABLENAME +LTADM.REVOKESTATEPRIV +LTADM.REVOKESYSTEMPRIV +LTADM.ROLLBACKRESOLVE +LTADM.ROLLBACKTABLE_PARTIAL +LTADM.SETSTATELOCKMODEOFF +LTADM.SETSTATELOCKMODEON +LTADM.SETSYNCPARVER +LTADM.SETSYSTEMPARAMETER +LTADM.TURNONPESSIMISTICLOCKING +LTADM.UNFREEZESTATE +LTADM.UPDATECRSTATUS +LTADM.UPDATEVERSIONEDTABLE +LTADM.VERSIONROWCOPY +LTAQ. +LTAQ.CAPTUREEVENT +LTDDL. +LTDDL.DISABLEVERSIONING +LTDDL.DISABLEVERSIONING_NONAUTO +LTDDL.ENABLEVERSIONING +LTDDL.ENABLEVERSIONING_NONAUTO +LTDDL.GETVARIABLE_B +LTDDL.GETVARIABLE_I +LTDDL.UNDOENABLEVER +LTDTRG. +LTDTRG.ADDNEWTODEFN +LTDTRG.CREATETRIGGERS +LTDTRG.TRIGGERSELECTCLAUSE +LTPRIV. +LTPRIV.GETPRIVLIST +LTPRIV.GRANTGRAPHPRIV +LTPRIV.GRANTSTATEPRIV +LTPRIV.GRANTSYSTEMPRIV +LTPRIV.ISUSERALLOWED +LTPRIV.ISUSERALLOWEDOPER +LTPRIV.REVOKEGRAPHPRIV +LTPRIV.REVOKESTATEPRIV +LTPRIV.REVOKESYSTEMPRIV +LTPRIV.SETUSER +LTRIC. +LTRIC.APPLY_RIC_COMMIT_TABLE +LTRIC.APPLY_RIC_CONSTRAINTS +LTRIC.APPLY_RIC_RESTRICT +LTRIC.APPLY_RIC_RESTRICT_POST +LTRIC.APPLY_SELF_REF_RIC +LTRIC.BACKUPRICLOCKSLIST +LTRIC.CHECKRICONRFRSHBYFLIPPING +LTRIC.CREATERICLOCKINGTABLES +LTRIC.CREATERICWHERECLAUSE +LTRIC.DO_CR_RIC_CHECK +LTRIC.DROPRICLOCKINGTABLES +LTRIC.FINDRICSET +LTRIC.GENRICVIEWS +LTRIC.GENVTPTNOTEXISTSWC +LTRIC.GETMODVER +LTRIC.GETPTBEFORETRIGSTRS +LTRIC.GETPTVTNONSEQUENCEDCODE +LTRIC.GETRICINSTEADOFTRIGSTRS +LTRIC.GETRICLOCKNOS +LTRIC.GETRICLOCKS +LTRIC.GETRICLOCKSFORTABLE +LTRIC.GETRICSESSLOCKSFORTABLE +LTRIC.GETRICSFROMSKELETONTABLES +LTRIC.GETSTATUS +LTRIC.GETVARIABLE_C +LTRIC.INITIALIZERICLOCKINGVARS +LTRIC.ISPARENTTABLE +LTRIC.LOCKRICROWS +LTRIC.NEEDTODECLVTVARS +LTRIC.PROCESSCONSTRAINTVIOLATIONS +LTRIC.RECREATEPTUPDDELTRIGGERS +LTRIC.RELRICSESSLOCKSFORTABLE +LTRIC.RESTORERICLOCKSLIST +LTRIC.RIC_DISABLE_VERSNING_INTERNAL +LTRIC.RIC_ENABLE_VERSIONING_INTERNAL +LTRIC.SETVARIABLE +LTRIC.UPDATERICWEIGHTS +LTSYS. +LTSYS.ADDASPARENTWORKSPACE +LTSYS.ADDUSERDEFINEDHINT +LTSYS.ADD_TOPO_GEOMETRY_LAYER +LTSYS.ALTERSAVEPOINT +LTSYS.ALTERVERSIONEDTABLE +LTSYS.ALTERWORKSPACE +LTSYS.BEGINBULKLOADING +LTSYS.BEGINDDL +LTSYS.BEGINRESOLVE +LTSYS.CHANGEWORKSPACETYPE +LTSYS.COMMITBULKLOADING +LTSYS.COMMITDDL +LTSYS.COMMITRESOLVE +LTSYS.COMPRESSWORKSPACE +LTSYS.COMPRESSWORKSPACETREE +LTSYS.COPYFORUPDATE +LTSYS.COPYWORKSPACE +LTSYS.CREATESAVEPOINT +LTSYS.CREATEWORKSPACE +LTSYS.DELETESAVEPOINT +LTSYS.DELETE_TOPO_GEOMETRY_LAYER +LTSYS.DISABLEVERSIONING +LTSYS.DROPREPLICATIONSUPPORT +LTSYS.ENABLEVERSIONING +LTSYS.EXPORT +LTSYS.EXPORT_SCHEMAS +LTSYS.FINDRICSET +LTSYS.FREEZEWORKSPACE +LTSYS.GENERATEREPLICATIONSUPPORT +LTSYS.GETBULKLOADVERSION +LTSYS.GETCONFLICTWORKSPACE +LTSYS.GETDIFFVERSIONS +LTSYS.GETLOCKMODE +LTSYS.GETMULTIWORKSPACES +LTSYS.GETOPCONTEXT +LTSYS.GETORIGINALDDL +LTSYS.GETPHYSICALTABLENAME +LTSYS.GETPRIVS +LTSYS.GETSESSIONINFO +LTSYS.GETSYSTEMPARAMETER +LTSYS.GETVALIDFROM +LTSYS.GETVALIDTILL +LTSYS.GETVERSION +LTSYS.GETWMMETADATASPACE +LTSYS.GETWORKSPACE +LTSYS.GOTODATE +LTSYS.GOTOSAVEPOINT +LTSYS.GOTOWORKSPACE +LTSYS.GRANTGRAPHPRIV +LTSYS.GRANTPRIVSONPOLICY +LTSYS.GRANTSYSTEMPRIV +LTSYS.GRANTWORKSPACEPRIV +LTSYS.IMPORT +LTSYS.IMPORT_SCHEMAS +LTSYS.INITIALIZE_AFTER_IMPORT +LTSYS.ISWORKSPACEOCCUPIED +LTSYS.LOCKROWS +LTSYS.MAX_TIME +LTSYS.MERGETABLE +LTSYS.MERGEWORKSPACE +LTSYS.MIN_TIME +LTSYS.MOVE_PROC +LTSYS.PURGETABLE +LTSYS.RECOVERALLMIGRATINGTABLES +LTSYS.RECOVERFROMDROPPEDUSER +LTSYS.RECOVERMIGRATINGTABLE +LTSYS.REFRESHTABLE +LTSYS.REFRESHWORKSPACE +LTSYS.RELOCATEWRITERSITE +LTSYS.REMOVEASPARENTWORKSPACE +LTSYS.REMOVEDEFERREDWORKSPACES +LTSYS.REMOVEUSERDEFINEDHINT +LTSYS.REMOVEWORKSPACE +LTSYS.REMOVEWORKSPACETREE +LTSYS.RENAMESAVEPOINT +LTSYS.RENAMEWORKSPACE +LTSYS.RESOLVECONFLICTS +LTSYS.REVOKEGRAPHPRIV +LTSYS.REVOKESYSTEMPRIV +LTSYS.REVOKEWORKSPACEPRIV +LTSYS.ROLLBACKBULKLOADING +LTSYS.ROLLBACKDDL +LTSYS.ROLLBACKRESOLVE +LTSYS.ROLLBACKTABLE +LTSYS.ROLLBACKTOSP +LTSYS.ROLLBACKWORKSPACE +LTSYS.SETCAPTUREEVENT +LTSYS.SETCOMPRESSWORKSPACE +LTSYS.SETCONFLICTWORKSPACE +LTSYS.SETDIFFVERSIONS +LTSYS.SETLOCKINGOFF +LTSYS.SETLOCKINGON +LTSYS.SETMULTIWORKSPACES +LTSYS.SETSYSTEMPARAMETER +LTSYS.SETTRIGGEREVENTS +LTSYS.SETVALIDTIME +LTSYS.SETVALIDTIMEFILTEROFF +LTSYS.SETVALIDTIMEFILTERON +LTSYS.SETWMVALIDUPDATEMODEOFF +LTSYS.SETWMVALIDUPDATEMODEON +LTSYS.SETWOOVERWRITEOFF +LTSYS.SETWOOVERWRITEON +LTSYS.SETWORKSPACELOCKMODEOFF +LTSYS.SETWORKSPACELOCKMODEON +LTSYS.SYNCHRONIZESITE +LTSYS.UNFREEZEWORKSPACE +LTSYS.UNLOCKROWS +LTSYS.UNTIL_CHANGED +LTSYS.USEDEFAULTVALUESFORNULLS +LTUTIL. +LTUTIL.ADDUSERDEFINEDHINT +LTUTIL.ADDWCP +LTUTIL.ALLOCATE_UNIQUE +LTUTIL.ALLOWROWLEVELLOCKING +LTUTIL.BITCLEAR +LTUTIL.BITOR +LTUTIL.CHECKADDTOPOGEOLAYERERRORS +LTUTIL.CHECKDELTOPOGEOLAYERERRORS +LTUTIL.CHECKDOMAININDEXPRIVS +LTUTIL.CHOOSE +LTUTIL.CLEANUPBDDL +LTUTIL.CLEANUPCDDL +LTUTIL.CLEANUPDV +LTUTIL.CLEANUPEV +LTUTIL.CLEANUPMETADATA +LTUTIL.CLEANUPMETADATABYUSER +LTUTIL.CLEANUPSTALEMETADATA +LTUTIL.CONTRACTWHITESPACE +LTUTIL.CONTRACTWHITESPACECLOB +LTUTIL.COPYRLSPOLICIES +LTUTIL.CREATEINLISTFROMQUERY +LTUTIL.CREATEPKWHERECLAUSE +LTUTIL.DELETEFULLROLLBACKMARKER +LTUTIL.DELETEUNDOCODE +LTUTIL.DELETEUNDOCODECHECKPOINTS +LTUTIL.DELETEUNDOCODERANGE +LTUTIL.DELETE_ALL_SDO_GEOM_METADATA +LTUTIL.DISALLOWIFWITHVT +LTUTIL.DROPRLSPOLICIES +LTUTIL.DROPUNUSEDCOLUMNS +LTUTIL.EXECEVUNDO +LTUTIL.EXECLOG +LTUTIL.EXECUTESQLLOG +LTUTIL.EXISTSBIR +LTUTIL.EXISTSBUR +LTUTIL.EXISTSCONSTRAINT +LTUTIL.EXISTSFULLROLLBACKMARKER +LTUTIL.EXISTSTOPOLOGY +LTUTIL.FIXTOPOLOGYIMPORT +LTUTIL.FIXVTAB_COMPRESS +LTUTIL.FIXVTAB_REFRESH +LTUTIL.FIXVTAB_ROLLBACK +LTUTIL.GENFIXCRNONSEQNFRESHINS +LTUTIL.GENWMCOLSUPDATESTMNT +LTUTIL.GETBASETABLENAME +LTUTIL.GETBATCHWHERECLAUSES +LTUTIL.GETCOLINFO +LTUTIL.GETCOLLIST +LTUTIL.GETCOLSTR +LTUTIL.GETCOLUMNDECLARATION +LTUTIL.GETCOLUMNPLUSEXPRESSION +LTUTIL.GETCONTAINEDVER +LTUTIL.GETCONTAINEDVERINRANGE +LTUTIL.GETCONTAINEDVERSINWORKSPACE +LTUTIL.GETCONTAINEDVERSIONRANGE +LTUTIL.GETCRNEXTVERS +LTUTIL.GETCRSTATUS +LTUTIL.GETCURRENTLOCKINGMODE +LTUTIL.GETCURVER +LTUTIL.GETDEFAULTWORKSPACEID +LTUTIL.GETDEFAULTWORKSPACENAME +LTUTIL.GETDESCVERSIONS +LTUTIL.GETDISTINCTOBJECT +LTUTIL.GETDISVER +LTUTIL.GETHISTOPTION +LTUTIL.GETINDEXTABLE +LTUTIL.GETINDEXTABLESPACE +LTUTIL.GETMINWORKSPACEVERSION +LTUTIL.GETNESTEDCOLUMNVIEW +LTUTIL.GETNESTEDTABLECOLSTR +LTUTIL.GETNESTEDTABLEMETADATACOLUMNS +LTUTIL.GETNESTEDTABLETYPE +LTUTIL.GETNEXTVERSION +LTUTIL.GETNOTNULLCONSTRAINT +LTUTIL.GETNTPKEYCOLS +LTUTIL.GETPIPELINEDTABLE +LTUTIL.GETPKEYCOLS +LTUTIL.GETPKEYINFO +LTUTIL.GETPKEYINFO_VT +LTUTIL.GETPKINDEXINFO +LTUTIL.GETRICSTATUS +LTUTIL.GETRLSWHERECLAUSE +LTUTIL.GETSEQUENCEOPTIONS +LTUTIL.GETSID +LTUTIL.GETSNO +LTUTIL.GETSPACEUSAGE +LTUTIL.GETSTATEFROMVER +LTUTIL.GETTABLETABLESPACE +LTUTIL.GETTOPOFEATURETABINFO +LTUTIL.GETTOPOINFO +LTUTIL.GETTRIGFLAG +LTUTIL.GETTRIGGERS +LTUTIL.GETTRIGTYPES +LTUTIL.GETUDHINT +LTUTIL.GETUNDOCODECLOB +LTUTIL.GETVALIDTIMEOPTION +LTUTIL.GETVARIABLE_R +LTUTIL.GETVERINDEXNAME +LTUTIL.GETVN +LTUTIL.GETVTID +LTUTIL.GETWHERECLAUSESTR +LTUTIL.GETWORKSPACELOCKID +LTUTIL.GETWORKSPACELOCKMODE +LTUTIL.GET_EXPANDED_NEXTVERS +LTUTIL.GET_EXPANDED_NEXTVERS_NP +LTUTIL.GRANTOLSPRIVS +LTUTIL.HASCRCHILD +LTUTIL.HASDEFERREDCHILD +LTUTIL.HASFEATURETABLE +LTUTIL.HASNESTEDTABLECOLUMN +LTUTIL.HASOLSPOLICY +LTUTIL.HASRICCASCADINGCONSTRAINT +LTUTIL.HASRICSETNULLCONSTRAINT +LTUTIL.HASVIRTUALCOLUMN +LTUTIL.HASWOOVERWRITEOPTION +LTUTIL.HISTWITHDATETYPE +LTUTIL.HISTWITHDATETYPEEV +LTUTIL.INSERTFULLROLLBACKMARKER +LTUTIL.INSERTNEXTVERS +LTUTIL.INSERTVERSION +LTUTIL.INVERSIONEDSTATE +LTUTIL.ISIMPLICITSP +LTUTIL.ISLEAFSTATE +LTUTIL.ISMODIFIED +LTUTIL.ISMODIFIEDINSUBTREE +LTUTIL.ISOBJECTTABLE +LTUTIL.ISSPATIALINSTALLED +LTUTIL.ISSPLITINSUBTREE +LTUTIL.ISTOPOFEATURETABLE +LTUTIL.ISTOPOLOGYINDEXTABLE +LTUTIL.ISTOPOLOGYRELATIONTABLE +LTUTIL.ISVERSIONEDTABLE +LTUTIL.ISVERSIONENABLEDTOPOLOGY +LTUTIL.ISWORKSPACEOWNER +LTUTIL.MOVEWMMETADATA +LTUTIL.NEEDTOEXECUTETRIGGERS +LTUTIL.NUMTRIGGERSTOEXECUTE +LTUTIL.PARSESTRINGLIST +LTUTIL.PIPED_ROWID_FUNC +LTUTIL.POPULATEROWIDRANGES +LTUTIL.PREFIXSTR +LTUTIL.QB_BLOCK_REPLACE +LTUTIL.REMOVEUSERDEFINEDHINT +LTUTIL.RENAMESAVEPOINT +LTUTIL.RENAMEWORKSPACE +LTUTIL.REQUIRESTRIGGERSONTOPVIEW +LTUTIL.RESETALLSEQUENCES +LTUTIL.RESOLVESYNONYM +LTUTIL.RESTARTSEQUENCE +LTUTIL.ROWSINVERSFROMHISTOGRAM +LTUTIL.SEPARATECLOBINTO2PARTS +LTUTIL.SETDEBUGOPTIONS +LTUTIL.SETDISVER +LTUTIL.SETVARIABLE +LTUTIL.SKIPOBJECTSDURINGEXPORT +LTUTIL.STRIPVERSION +LTUTIL.STRIPVERSIONRANGE +LTUTIL.STUFFVERSION +LTUTIL.STUFFVERSIONRANGE +LTUTIL.SUBSVERSION +LTUTIL.TOPOTABLECHECK +LTUTIL.TO_CLOB_ +LTUTIL.UPDATESDOTOPOMETADATADV +LTUTIL.UPDATESDOTOPOMETADATAEV +LTUTIL.VT_FIXNVTAB +LTUTIL.WM$CONCAT +LTUTIL.WM$CONVERTVERSIONSTR +LTUTIL.WM$GETDBCOMPATIBLESTR +LTUTIL.WM$GETDBVERSIONSTR +LTUTIL.WM$GETERRORS +LTUTIL.WM$SORTSTRING +LTUTIL.WRITETOLOG +LTUTIL.WRITEUNDOCODE +LT_CTX_PKG. +LT_CTX_PKG.ALLOWDDLOPERATION +LT_CTX_PKG.APPENDNEXTVERS +LT_CTX_PKG.CHECKFREEZESTATUS +LT_CTX_PKG.CHECKNGETLOCK +LT_CTX_PKG.CHVLTL +LT_CTX_PKG.EXISTSLTLOCKINFO +LT_CTX_PKG.GETCURLOCKSTR +LT_CTX_PKG.GETCURNEXTVER +LT_CTX_PKG.GETCURRENTLOCKINGMODE +LT_CTX_PKG.GETLTLOCKINFO +LT_CTX_PKG.GETLTTABLENAME +LT_CTX_PKG.GETMAXVTRANGE +LT_CTX_PKG.GETMULTIWORKSPACES +LT_CTX_PKG.GETNEXTVER +LT_CTX_PKG.GETPARWSDELSTATUS +LT_CTX_PKG.GETPARWSVER +LT_CTX_PKG.GETPREVVER +LT_CTX_PKG.GETPURGEOPTION +LT_CTX_PKG.GETSESSIONATTRIBUTES +LT_CTX_PKG.GETSTATEFROMVER +LT_CTX_PKG.GETSTRIPPEDNEXTVER +LT_CTX_PKG.GETVARIABLE_B +LT_CTX_PKG.GETVARIABLE_N +LT_CTX_PKG.GETVARIABLE_V +LT_CTX_PKG.GETVTTABLENAME +LT_CTX_PKG.INSERTEXTTABROWSFORNVER +LT_CTX_PKG.REFRESHVERSINWSPCLIST +LT_CTX_PKG.SETACTIVETIMEFORDML +LT_CTX_PKG.SETCALLSTACKASINVALID +LT_CTX_PKG.SETCALLSTACKASVALID +LT_CTX_PKG.SETCOMMITVARS +LT_CTX_PKG.SETCOMPRESSWORKSPACE +LT_CTX_PKG.SETCONFLICTSTATE +LT_CTX_PKG.SETCOPYVARS +LT_CTX_PKG.SETCRINFO +LT_CTX_PKG.SETDIFFVERS +LT_CTX_PKG.SETEVCHECKPOINT +LT_CTX_PKG.SETFLIPVERSIONONREFRESH +LT_CTX_PKG.SETFREEZESTATUS +LT_CTX_PKG.SETIMPORTVARS +LT_CTX_PKG.SETINSTANT +LT_CTX_PKG.SETLOCKMODE +LT_CTX_PKG.SETLTLOCKINFO +LT_CTX_PKG.SETMPROOT +LT_CTX_PKG.SETMPWORKSPACE +LT_CTX_PKG.SETMULTIWORKSPACES +LT_CTX_PKG.SETNEWMPVARS +LT_CTX_PKG.SETNEWROOTANCVERSION +LT_CTX_PKG.SETOPCONTEXT +LT_CTX_PKG.SETPOSTVARS +LT_CTX_PKG.SETPREVVER +LT_CTX_PKG.SETROWLOCKSTATUS +LT_CTX_PKG.SETSAVEPOINT +LT_CTX_PKG.SETSTATEATTRIBUTES +LT_CTX_PKG.SETTABMRGWOREMOVEEVENT +LT_CTX_PKG.SETTABMRGWREMOVEEVENT +LT_CTX_PKG.SETTABREFRESHEVENT +LT_CTX_PKG.SETTRIGGEREVENT +LT_CTX_PKG.SETTSINSTANT +LT_CTX_PKG.SETUSER +LT_CTX_PKG.SETVALIDTIME +LT_CTX_PKG.SETVALIDTIMEFILTEROFF +LT_CTX_PKG.SETVALIDTIMEFILTERON +LT_CTX_PKG.SETVARIABLE +LT_CTX_PKG.SETVERAFTINSTANT +LT_CTX_PKG.SETVERBEFINSTANT +LT_CTX_PKG.SETVERSION +LT_CTX_PKG.SETVERSIONANDSTATE +LT_CTX_PKG.SETWRITERSTATE +LT_CTX_PKG.SETWSPCMRGWOREMOVEEVENT +LT_CTX_PKG.SETWSPCMRGWREMOVEEVENT +LT_CTX_PKG.TO_TIMESTAMP_TZ_ +LT_CTX_PKG.UNSETCOMMITVARS +LT_CTX_PKG.UNSETCOPYVARS +LT_CTX_PKG.UNSETIMPORTVARS +LT_CTX_PKG.UNSETPOSTVARS +LT_CTX_PKG.UPDATE_MODIFIED_TABLES +LT_CTX_PKG.WM$DISALLOWQNDML +LT_EXPORT_PKG. +LT_EXPORT_PKG.EXPORTWMSYS +LT_EXPORT_PKG.EXPORT_MAPPING_VIEW_FUNC +LT_EXPORT_PKG.EXPORT_METADATA_VIEW_FUNC +LT_EXPORT_PKG.EXPORT_SCHEMAS +LT_EXPORT_PKG.GET_DATAPUMP_ID +LT_EXPORT_PKG.GET_INTERNAL_OBJECTS +LT_EXPORT_PKG.IMPORT_SCHEMAS +LT_EXPORT_PKG.INITIALIZE +LT_EXPORT_PKG.INSTANCE_CALLOUT_IMP +LT_EXPORT_PKG.INSTANCE_EXPORT_ACTION +LT_EXPORT_PKG.RECOMPUTEALLVTROWIDS +LT_EXPORT_PKG.SCHEMA_INFO_EXP +LT_EXPORT_PKG.SYSTEM_CALLOUT +LT_EXPORT_PKG.SYSTEM_CALLOUT_IMP +LT_EXPORT_PKG.SYSTEM_INFO_EXP +LVL +LWM +LWM_MESSAGE_CREATE_TIME +LWM_MESSAGE_NUMBER +LWM_POSITION +LWM_TIME +MACHINE +MACHINE_NAME +MACOLS_INIT_SESSION. +MAINTAIN_DOM +MAINTAIN_ORDER +MAINTENANCE_TYPE +MAJOR +MANAGEMENT_PACK_ACCESS +MANDATORY +MANDATORY_AFF_SWITCHES +MANDATORY_AFF_SWITCHES_OUT +MANDATORY_AFF_SWITCH_ATTEMPTS +MANUAL_DURATION +MANUAL_OPEN_TIME +MANUAL_REPAIRS_ONLY +MANUAL_VALUE +MAPPED_CONSUMER_GROUP +MAPPED_DIMENSION_NAME +MAPPED_DIMENSION_TYPE +MAPPED_HASH_VALUE +MAPPED_HIERARCHY_NAME +MAPPED_HIERARCHY_TYPE +MAPPED_LEVEL_NAME +MAPPED_SQL_FULLTEXT +MAPPED_SQL_ID +MAPPED_SQL_TEXT +MAPPING_ATTRIBUTE +MAP_ELEM +MAP_FILE +MAP_ID +MAP_NAME +MAP_SYNC +MARKED_CORRUPT +MASTER +MASTERKEYID +MASTERKEY_ACTIVATED +MASTER_ID +MASTER_INST +MASTER_INSTANCE +MASTER_LINK +MASTER_NODE +MASTER_OWNER +MASTER_ROLLBACK_SEG +MASTER_VIEW +MATCHED +MATERIALIZE +MAXARGS +MAXBLOCKS +MAXBYTES +MAXCONCURRENCY +MAXCONN_CBROK +MAXIMUM +MAXIMUM_CONNECTIONS +MAXIMUM_SESSIONS +MAXIMUM_SIZE +MAXIMUM_VALUE +MAXIORTM +MAXIOWTM +MAXOPENFILES +MAXPAGES +MAXQUERYID +MAXQUERYLEN +MAXQUERYSQLID +MAXSIZE +MAXTIME +MAXVAL +MAX_500B +MAX_8K +MAX_ALLOCATED +MAX_ALLOCATED_MAX +MAX_APPLIED_MESSAGE_NUMBER +MAX_AUDIT_SIZE +MAX_BLOCKS +MAX_BUCKET_NO +MAX_BUF_RATE +MAX_BYTES +MAX_BYTE_PER_BUF +MAX_BYTE_RATE +MAX_CARDINALITY +MAX_CELL_DISK_IOPS +MAX_CELL_DISK_MBPS +MAX_CELL_FLASH_IOPS +MAX_CELL_FLASH_MBPS +MAX_CHECKPOINT_CHANGE# +MAX_CHECKPOINT_SCN +MAX_CHECKPOINT_TIME +MAX_CLT_BUF_RATE +MAX_CLT_BYTE_PER_BUF +MAX_CLT_BYTE_RATE +MAX_CONCURRENT_SESSIONS +MAX_CONNECTIONS +MAX_COUNT +MAX_DB_VERSION +MAX_DIAGNOSTICS_SIZE +MAX_DISK_IOPS +MAX_DISK_MBPS +MAX_DURATION_LAST_30_DAYS +MAX_DURATION_LAST_7_DAYS +MAX_ELEM_COUNT +MAX_EST_EXEC_TIME +MAX_EVENTS_PER_LOOP +MAX_EVENT_RATE +MAX_EXTENT +MAX_EXTENTS +MAX_FAILURE +MAX_FAILURES +MAX_FLASH_IOPS +MAX_FLASH_MBPS +MAX_FREE_SIZE +MAX_FTSTIME +MAX_IDLE_BLOCKER_TIME +MAX_IDLE_TIME +MAX_INTERVAL +MAX_IN_CONNECT_RATE +MAX_IOPS +MAX_JOIN_KEY +MAX_LAG_TIME +MAX_LATENCY +MAX_LENGTH +MAX_LIFETIME_SESSION +MAX_LOOKUPTIME +MAX_LOOP_RATE +MAX_MBPS +MAX_MEMORY_SIZE +MAX_MEM_USED +MAX_MISS_SIZE +MAX_MODIFICATION_TIME +MAX_MSGS +MAX_MSG_RATE +MAX_NEXT_CHANGE# +MAX_NEXT_TIME +MAX_NUMBER +MAX_NUM_BUCKETS +MAX_NUM_PER_WIN +MAX_OPT_TIME_DRIFT +MAX_OPT_TIME_ERROR +MAX_OUT_CONNECT_RATE +MAX_PMBPS +MAX_READTIME +MAX_RECONNECT_RATE +MAX_REDO_COMPAT_LEVEL +MAX_RETRIES +MAX_RUNS +MAX_RUN_DURATION +MAX_SERVERS +MAX_SERVER_COUNT +MAX_SIZE +MAX_SORT_BLOCKS +MAX_SORT_SIZE +MAX_SUBSH_SIZE +MAX_SVR_BUF_RATE +MAX_SVR_BYTE_PER_BUF +MAX_SVR_BYTE_RATE +MAX_TASK_LATENCY +MAX_TEMPSEG_SIZE +MAX_THINK_TIME +MAX_TRANS +MAX_TXN_THINK_TIME +MAX_UNDO_CONSUMPTION +MAX_USED_BLOCKS +MAX_USED_SIZE +MAX_USE_SESSION +MAX_UTILIZATION +MAX_UTILIZATION_LIMIT +MAX_VALUE +MAX_VERSIONS +MAX_WAIT +MAX_WRITETIME +MAYBE_HITS +MAYBE_RULES +MBYTES_PROCESSED +MD. +MD.HHAND +MD.HHBITS +MD.HHBYTELEN +MD.HHCBIT +MD.HHCELLBNDRY +MD.HHCELLSIZE +MD.HHCKREF +MD.HHCLDATE +MD.HHCOLLAPSE +MD.HHCOMMONCODE +MD.HHCOMPARE +MD.HHCOMPOSE +MD.HHDECODE +MD.HHDISTANCE +MD.HHENCODE +MD.HHENCODE_BYLEVEL +MD.HHGBIT +MD.HHGETCID +MD.HHGROUP +MD.HHGTBIT +MD.HHGTYPE +MD.HHIDLPART +MD.HHIDLROWS +MD.HHIDPART +MD.HHIDROWS +MD.HHINCRLEV +MD.HHJLDATE +MD.HHLENGTH +MD.HHLEVELS +MD.HHMATCH +MD.HHMAXCODE +MD.HHMKCODE +MD.HHMKDIM +MD.HHNCOMPARE +MD.HHNDIM +MD.HHOR +MD.HHORDER +MD.HHPRECISION +MD.HHSBIT +MD.HHSETCID +MD.HHSTBIT +MD.HHSTYPE +MD.HHSUBDIVIDE +MD.HHSUBSTR +MD.HHXOR +MD.SET_CHECK +MD.SIGERR +MD1. +MD1.BVALUETODIM +MD1.COMPARE +MD1.DATETODIM +MD1.DECODE +MD1.ENCODE +MD1.HVALUETODIM +MD1.LATLONTOCODE +MD1.TO_BVALUE +MD1.TO_DATE +MD1.TO_HVALUE +MD1.TO_LAT +MD1.TO_LON +MD2. +MD2.INTERACT +MD2.RELATE +MD2.RELATE_PROCESS +MD2.SDO_CGLNLN +MD2.SDO_CODE_SIZE +MD2.SDO_READ_LAYER_METADATA +MD2.TESSELLATE +MD2.TESSELLATE_FIXED +MD2.TEST_LOADGEOM +MD2.VALIDATE_GEOM +MDERR. +MDERR.RAISE_MD_ERROR +MDPRVT_FEATURE. +MDPRVT_FEATURE.SDO_INVALIDATE_FEATURE +MDPRVT_FEATURE.SDO_REGISTER_FEATURE +MDPRVT_GMD. +MDPRVT_GMD.CHECK_OWNER +MDPRVT_GMD.DELETE_SDO_GEOM_METADATA +MDPRVT_GMD.GET_GEOM_METADATA +MDPRVT_GMD.GET_GEOM_METADATA_RAISE +MDPRVT_GMD.GET_JSON_GEOM_COL +MDPRVT_GMD.INVALIDATE_GEOM_METADATA +MDPRVT_GMD.SDO_GEOM_METADATA_EXISTS +MDPRVT_IDX. +MDPRVT_IDX.EXCHANGE +MDPRVT_IDX.EXECUTE_GUPDATE +MDPRVT_IDX.EXP_DUMP_METADATA +MDPRVT_IDX.GET_INDEX_METADATA +MDPRVT_IDX.INIT_META +MDPRVT_IDX.INVALIDATE_CACHE +MDPRVT_IDX.MD_TRACE +MDPRVT_IDX.RESET_TTS_INDEX_METADATA +MDPRVT_IDX.TTS_META +MDPRVT_IDX.UPDATE_INDEX_METADATA +MDPRVT_SRID. +MDPRVT_SRID.ADD_PREFERENCE_FOR_OP +MDPRVT_SRID.CREATE_CONCATENATED_OP +MDPRVT_SRID.CREATE_PREF_CONCATENATED_OP +MDPRVT_SRID.DET_SRID_WKT +MDPRVT_SRID.GET_3D_WKT +MDPRVT_SRID.GET_DIMS +MDPRVT_SRID.GET_REF_KIND +MDPRVT_SRID.GET_TOLERANCE +MDPRVT_SRID.GET_UNIT +MDPRVT_SRID.IS_GEODETIC +MDPRVT_SRID.POPULATE_DATUM_3PARAMS +MDPRVT_SRID.POPULATE_DATUM_7PARAMS +MDPRVT_SRID.SDO_INVALIDATE_SRID_METADATA +MD_LRS. +MD_LRS.ADJUST_LEVEL_MEASURE +MD_LRS.ADJUST_MEASURE +MD_LRS.ADJUST_MEASURE_3D +MD_LRS.APPEND_TO_GEOM_SEGMENT +MD_LRS.CLEAN_GEOMETRY +MD_LRS.CLEAN_GEOMETRY_FUN +MD_LRS.CLIP_GEOM_SEGMENT_FUN +MD_LRS.CLIP_LEVEL_M +MD_LRS.CONCATENATE_GEOM_SEGMENTS_FUN +MD_LRS.CONNECTION_TYPE_FUN +MD_LRS.CONSTRUCT_DIM_ARRAY +MD_LRS.CONSTRUCT_LRS_GTYPE +MD_LRS.CONTAINS_UNKNOWN_ELEM +MD_LRS.CONTAIN_MEASURE_DIM +MD_LRS.CONTAIN_MEASURE_DIM_3D +MD_LRS.CONVERT_NULLS +MD_LRS.CROSS_PRODUCT_2D +MD_LRS.DEFINE_GEOM_SEGMENT_GEO3D +MD_LRS.DEFINE_GEOM_SEGMENT_PROC +MD_LRS.ELEM_END_PT +MD_LRS.GEODETIC_2D_GEOM +MD_LRS.GEODETIC_3D_GEOM +MD_LRS.GEODETIC_GEOMETRY +MD_LRS.GEODETIC_SRID +MD_LRS.GEOM_SEGMENTS_CON_TYPE +MD_LRS.GEOM_SEGMENTS_CON_TYPE_3D +MD_LRS.GET_GEODETIC_3D_PARAMS +MD_LRS.GET_LRS_DIM_POS +MD_LRS.GET_M_VALUE +MD_LRS.GTYPE_FILTER +MD_LRS.IS_DEFINED_FUN +MD_LRS.LINESTRING_GEOM +MD_LRS.LOCATE_PT_FUN +MD_LRS.LOCATE_PT_LEVEL_M +MD_LRS.LRS_GEOMETRY +MD_LRS.LRS_GEOM_BY_GTYPE +MD_LRS.LRS_GEOM_LENGTH_3D +MD_LRS.LRS_MULTI_SEGMENTS_GTYPE +MD_LRS.LRS_POLYGON_GTYPE +MD_LRS.LRS_PT_GTYPE +MD_LRS.LRS_SEGMENT_GTYPE +MD_LRS.MAKE_POINT_GEOM +MD_LRS.MEASURE_IDS +MD_LRS.MONOTONIC_MEASURE +MD_LRS.NEXT_NON_NULL_ORDINATE +MD_LRS.NO_OF_DIMENSIONS +MD_LRS.NO_OF_ELEMENTS +MD_LRS.NO_OF_VERTICES +MD_LRS.OFFSET_GEOM_SEGMENT_FUN +MD_LRS.PROJECTED_GEOMETRY +MD_LRS.PROJECTED_SRID +MD_LRS.PROJECT_PT_BY_INDEX +MD_LRS.PROJECT_PT_FUN +MD_LRS.RESTORE_NULLS +MD_LRS.REVERSE_GEOMETRY_FUN +MD_LRS.REVERSE_M +MD_LRS.SAME_CS +MD_LRS.SAME_SDO_ORDINATE_ARRAY +MD_LRS.SET_LRS_DIM_POS +MD_LRS.SET_M_VALUE +MD_LRS.SNAP_TO_PT +MD_LRS.SNAP_TO_PT_3D +MD_NET. +MD_NET.BUILD_GEOM_NETWORK +MD_NET.BUILD_LINK_TABLE +MD_NET.COLUMN_ERROR_MSG +MD_NET.CONSTRAINT_EXISTS +MD_NET.CREATE_BIDIRECTED_NETWORK +MD_NET.CREATE_DELETE_LINK_TRIGGER +MD_NET.CREATE_DELETE_NODE_TRIGGER +MD_NET.CREATE_DELETE_PATH_TRIGGER +MD_NET.CREATE_DELETE_SUBPATH_TRIGGER +MD_NET.CREATE_LRS_NODE_TABLE +MD_NET.CREATE_SPATIAL_INDEX +MD_NET.CREATE_SPATIAL_NETWORK +MD_NET.CREATE_UNDIRECTED_NETWORK +MD_NET.DELETE_GEOM_METADATA +MD_NET.DELETE_NETWORK_METADATA +MD_NET.DROP_TABLE +MD_NET.FIND_NETWORK_INTERSECTION +MD_NET.GEOM_END_POINT +MD_NET.GEOM_METADATA_EXISTS +MD_NET.GET_GEOMETRY +MD_NET.GET_GEOM_END_POINT +MD_NET.GET_LOGGING_LEVEL +MD_NET.GET_MAX_ID +MD_NET.GET_NETWORK_NAME +MD_NET.GET_PERCENTAGE +MD_NET.GET_PT +MD_NET.GET_SCHEMA_NAME +MD_NET.GET_TABLE_NAME +MD_NET.GET_USER +MD_NET.INDEX_ON_COL_EXISTS +MD_NET.INSERT_GEOM_METADATA +MD_NET.INSERT_NETWORK_METADATA +MD_NET.IS_COLUMN_VALID +MD_NET.IS_LRS_TABLE +MD_NET.LOG +MD_NET.MAJOR_VERSION_NO +MD_NET.MAKE_LRS_POINT +MD_NET.MAKE_POINT_GEOMETRY +MD_NET.NETWORK_ERROR_MSG +MD_NET.NET_LOG +MD_NET.NO_OF_END_POINTS +MD_NET.REFERENTIAL_CHECK +MD_NET.RESET_ID_GENERATOR +MD_NET.SET_LOGGING_LEVEL +MD_NET.SPATIAL_INDEX_EXISTS +MD_NET.STR_TRIM_TAIL +MD_NET.TABLE_ERROR_MSG +MD_NET.TABLE_EXISTS +MD_NET.TABLE_TYPE +MD_NET.TRIGGER_EXISTS +MD_NET.VALID_TOPOLOGY_LAYER +MD_NFE. +MD_NFE.CALC_AVAILABLE_PT_CONNECTIONS +MD_NFE.CHECK_POINT_EXISTANCE +MD_NFE.CHECK_VIRTUAL_CONNECTION +MD_NFE.CONNECT_INTERSECTION +MD_NFE.CREATE_MODEL_TABLE_NAME +MD_NFE.CREATE_NETWORK_TAB_SEQ_NAME +MD_NFE.CREATE_SEQUENCE_NAME +MD_NFE.DELETE_MODEL_TABLES +MD_NFE.DISABLE_VERSIONING_TABLE +MD_NFE.DISCARD_CONNECTED_LINES +MD_NFE.GET_AVAILABLE_IN_CONN +MD_NFE.GET_AVAILABLE_OUT_CONN +MD_NFE.GET_FEATURE_LAYERS_IDS +MD_NFE.GET_GEOMETRY_TOLERANCE +MD_NFE.GET_INTERACTING_LINE_FEATURES +MD_NFE.GET_INTERACTING_POINT_FEATURES +MD_NFE.GET_INTERSECTION_POINTS +MD_NFE.GET_MATCHING_POINTS +MD_NFE.GET_NETWORK_FEATURE_METADATA +MD_NFE.GET_NETWORK_METADATA +MD_NFE.GET_NETWORK_USER_DATA +MD_NFE.GET_NETWORK_USER_DATA_VALUES +MD_NFE.GET_NEXT_SEQUENCE_VALUE +MD_NFE.IS_CONNECTED_NODE +MD_NFE.IS_NULL_VALUES_COLUMN +MD_NFE.SET_AVAILABLE_IN_CONN +MD_NFE.SET_AVAILABLE_OUT_CONN +MD_NFE.VALIDATE_SQL_NAMES +MEAN_GOOD_CONCURRENCY +MEAN_GOOD_CONTENTION +MEAN_GOOD_CPU_TIME +MEAN_GOOD_CPU_WAIT +MEAN_GOOD_DOP +MEAN_GOOD_DURATION +MEAN_GOOD_IO +MEAN_GOOD_IO_WAIT +MEAN_GOOD_TEMP +MEAN_GOOD_TEMP_WAIT +MEAN_GOOD_UNDO +MEAN_GOOD_UNDO_WAIT +MEAN_INCOMING_TASKS_30_DAYS +MEAN_INCOMING_TASKS_7_DAYS +MEAN_JOB_ATTEMPTS +MEAN_JOB_CPU +MEAN_JOB_DURATION +MEAN_SUBSH_SIZE +MEASURE +MEASURE_EXPRESSION +MEASURE_FOLDER_ID +MEASURE_FOLDER_NAME +MEASURE_ID +MEASURE_NAME +MEASURE_ONLY +MEASURE_STORAGE +MEASURE_SUBFOLDER_NAME +MEASURE_SUBFOLDER_OWNER +MEASURE_TYPE +MEAS_EXPRESSION +MEDIA +MEDIA_CORRUPT +MEDIA_POOL +MEMADDR +MEMBER +MEMBERS +MEMBER_CAPTION_EXPR +MEMBER_CDB +MEMBER_DESCRIPTION_EXPR +MEMBER_INCARNATION +MEMBER_NAME +MEMBER_NAME_EXPR +MEMBER_NUMBER +MEMBER_TARGET_EMD_URL +MEMBER_TARGET_GUID +MEMBER_TARGET_NAME +MEMBER_TARGET_TYPE +MEMBYTES +MEMBYTES_VERSIONS +MEMEXTENTS +MEMOPTIMIZE_READ +MEMOPTIMIZE_WRITE +MEMORY_ALLOCATED +MEMORY_BUF_ALLOC +MEMORY_LIMIT +MEMORY_MIN +MEMORY_SIZE +MEMORY_SIZE_FACTOR +MEMORY_TOTAL +MEMORY_USAGE +MEMUSED +MEM_READ +MERGE +MERGE_AJ +MERGE_CHANGE# +MERGE_CONST_ON +MERGE_SJ +MESSAGE +MESSAGE0 +MESSAGE1 +MESSAGE2 +MESSAGE3 +MESSAGES +MESSAGES_PUBLISHED +MESSAGE_ARGUMENTS +MESSAGE_CODE +MESSAGE_COUNT +MESSAGE_CREATION_TIME +MESSAGE_DELIVERY_MODE +MESSAGE_GROUP +MESSAGE_GROUPING +MESSAGE_HANDLER +MESSAGE_ID +MESSAGE_LAG +MESSAGE_LEVEL +MESSAGE_NUM +MESSAGE_NUMBER +MESSAGE_POSITION +MESSAGE_RULE_VARIABLE +MESSAGE_SEQUENCE +MESSAGE_TEXT +MESSAGE_TYPE +MESSAGE_TYPE_NAME +MESSAGE_TYPE_OWNER +METADATA +METADATA_ATTRIBUTE +METADATA_COMPATIBLE +METER_LEVEL +METHOD +METHODS +METHOD_INDEX +METHOD_NAME +METHOD_NO +METHOD_TYPE +METRIC1_DESC +METRICS_GROUP_ID +METRICS_ID +METRICS_NAME +METRIC_ID +METRIC_NAME +METRIC_TIMESTAMP +METRIC_TYPE +METRIC_UNIT +METRIC_UNITS +METRIC_VALUE +METRIC_VALUE_TYPE +MFLAG +MFLAG2 +MGMT_CONFIG. +MGMT_CONFIG.COLLECT_CONFIG +MGMT_CONFIG.COLLECT_STATS +MGMT_CONFIG.PRINT_JOB_DETAILS +MGMT_CONFIG.RUN_NOW +MGMT_CONFIG.STOP_JOB +MGMT_CONFIG.SUBMIT_JOB +MGMT_CONFIG_UTL. +MGMT_CONFIG_UTL.CREATE_REPLACE_DIR_OBJ +MGMT_DB_LL_METRICS. +MGMT_DB_LL_METRICS.COLLECT_CONFIG_METRICS +MGMT_DB_LL_METRICS.COLLECT_STATS_METRICS +MGMT_DB_LL_METRICS.GET_VERSION_CATEGORY +MGMT_DB_LL_METRICS.WRITE_DB_CCR_FILE +MGMT_METHOD +MGMT_P1 +MGMT_P2 +MGMT_P3 +MGMT_P4 +MGMT_P5 +MGMT_P6 +MGMT_P7 +MGMT_P8 +MGMT_RESPONSE. +MGMT_RESPONSE.CALC_METRIC +MGMT_RESPONSE.CAPTURE_STATS +MGMT_RESPONSE.CREATE_BASELINE +MGMT_RESPONSE.DELETE_BASELINE +MGMT_RESPONSE.DELETE_SQL_FROM_BASELINE +MGMT_RESPONSE.GETDURATION +MGMT_RESPONSE.GETVERSION +MGMT_RESPONSE.GET_LATEST_CURS +MGMT_RESPONSE.GET_METRIC_CURS +MGMT_RESPONSE.GET_TIME_STATS +MGMT_RESPONSE.PURGE_OLD_HISTORY +MGMT_RESPONSE.PURGE_OLD_STATS +MGMT_RESPONSE.RESET_CAPTURE_STATS +MGMT_RESPONSE.RESET_SNAPSHOT_STATS +MGMT_RESPONSE.SAVE_TO_HISTORY +MGMT_RESPONSE.TAKE_V$SQL_SNAPSHOT +MGMT_UPDATE_DB_FEATURE_LOG. +MIGRATABLE +MIGRATED +MIGRATE_80SYSIMAGES_TO_81. +MIGRATION_ALLOWED +MIGRATION_BOUNDARY +MINARGS +MINIMAL +MINIMUM +MINIMUM_VALUE +MINING_FUNCTION +MINING_SCN +MINING_STATUS +MINING_TIME +MINIOTIM +MINOR +MINRETENTION +MINSIZE +MINTIME +MINVAL +MIN_CACHED_TEMP +MIN_CARDINALITY +MIN_CHECKPOINT_CHANGE# +MIN_CHECKPOINT_TIME +MIN_COUNT +MIN_DB_VERSION +MIN_EVICT_PERCENT +MIN_EXTENT +MIN_EXTENTS +MIN_EXTLEN +MIN_FILE_SIZE +MIN_FIRST_CHANGE# +MIN_FIRST_TIME +MIN_FTSTIME +MIN_JOIN_KEY +MIN_LATENCY +MIN_LOGON_TIME +MIN_LOOKUPTIME +MIN_MODIFICATION_TIME +MIN_OPT_TIME_DRIFT +MIN_OPT_TIME_ERROR +MIN_READTIME +MIN_RECORD_SCN +MIN_RECORD_TIME +MIN_REDO_COMPAT_LEVEL +MIN_REQUIRED_CAPTURE_CHANGE# +MIN_ROWS_IN_BUCKET +MIN_SIZE +MIN_SUBSH_SIZE +MIN_TASK_LATENCY +MIN_VALUE +MIN_VERSIONS +MIN_WRITETIME +MIRRORCOPY_NAME +MIRROR_REGION +MISC_ENV +MISSES +MIXED +MNTPORT +MODE +MODEL_COMPILE_SUBQUERY +MODEL_DONTVERIFY_UNIQUENESS +MODEL_DYNAMIC_SUBQUERY +MODEL_ID +MODEL_MIN_ANALYSIS +MODEL_NAME +MODEL_NO_ANALYSIS +MODEL_ORDER +MODEL_PUSH_REF +MODEL_SIZE +MODE_HELD +MODE_REQUESTED +MODE_STATUS +MODIFICATIONS +MODIFICATION_DATE +MODIFICATION_TIME +MODIFICATION_TIMESTAMP +MODIFIED +MODIFIED_APPID +MODIFIED_BY +MODIFIED_TIME +MODIFIED_VSNID +MODIFY_DATE +MODIFY_EVENT +MODIFY_TIME +MODS_PER_LCR +MODULE +MODULE_HASH +MODULE_ID +MONITOR +MONITORING +MORE_INFO +MOUNTID +MOUNTPATH +MOUNT_DATE +MOUNT_STATUS +MOVE_PROCEDURE +MOVE_PROCEDURE_DESC +MOVING_WINDOW_SIZE +MSGID +MSGNO +MSGS_MADE_EXPIRED +MSGS_MADE_READY +MSGS_RCVD_CUR +MSGS_RCVD_TOTAL +MSGS_SENT +MSGS_SENT_CUR +MSGS_SENT_TOTAL +MSG_CLASS_NAME +MSG_CTRL_QUEUE +MSG_FLAGS +MSG_GRPID +MSG_PICKD_TIME +MSG_PICKED_TIME +MSG_SUBMIT_TIME +MSG_SUBMT_TIME +MTTR_TARGET_FOR_ESTIMATE +MTU +MULTIPASSES_EXECUTIONS +MULTIPLEX +MULTI_PX_MISMATCH +MULTI_SECTION +MUTEX_IDENTIFIER +MUTEX_TYPE +MUTEX_VALUE +MVAGGRAWBITOR. +MVAGGRAWBITOR_TYP.ODCIAGGREGATEINITIALIZE +MVAGGRAWBITOR_TYP.ODCIAGGREGATEITERATE +MVAGGRAWBITOR_TYP.ODCIAGGREGATEMERGE +MVAGGRAWBITOR_TYP.ODCIAGGREGATETERMINATE +MVIEWS +MVIEW_ID +MVIEW_LAST_REFRESH_TIME +MVIEW_NAME +MVIEW_SITE +MVIEW_TABLE_OWNER +MV_MERGE +MV_NAME +MV_OWNER +MV_QUERY_GEN_MISMATCH +MV_REWRITE_MISMATCH +MV_STALEOBJ_MISMATCH +NALLOC +NAME +NAMED +NAMED_BUILD_SPEC +NAMEFROMLASTDDL. +NAMESPACE +NAMESPACE_NAME +NAME_HASH +NAME_ID +NAME_NLS +NAME_SPACE +NATIVE_FULL_OUTER_JOIN +NATIVE_METHODS +NC_COMPONENT +NC_REASON +NDM_RESET_ID_GENERATOR. +NEGATIVE_RULE_SET_NAME +NEGATIVE_RULE_SET_OWNER +NESTED +NESTED_TABLE_FAST_INSERT +NESTED_TABLE_GET_REFS +NESTED_TABLE_NAME +NESTED_TABLE_SET_SETID +NETWORK +NETWORK_BYTES_RECD_AVG +NETWORK_BYTES_RECD_SUM +NETWORK_BYTES_RECD_SUMX2 +NETWORK_BYTES_SENT_AVG +NETWORK_BYTES_SENT_SUM +NETWORK_BYTES_SENT_SUMX2 +NETWORK_NAME +NETWORK_SERVICE_BANNER +NETWORK_TIME +NET_MASK +NET_TIMEOUT +NEW +NEWEST_BACKUP_TIME +NEWEST_SCN +NEWEST_SEQUENCE# +NEWEST_THREAD# +NEWEST_TIME +NEW_NAME +NEW_OWNER +NEXT +NEXT_CHANGE# +NEXT_CVT_LEVEL +NEXT_DATE +NEXT_EXPIRY_TIME +NEXT_EXTENT +NEXT_INSTRUCTION +NEXT_PIECE_ADDRESS +NEXT_READY_TIME +NEXT_RUN_DATE +NEXT_RUN_TIME +NEXT_SCN +NEXT_SCNBAS +NEXT_SCNWRP +NEXT_SEC +NEXT_SERVICE_TIME +NEXT_START_DATE +NEXT_TICKER +NEXT_TIME +NEXT_TRY_DATE +NEXT_WAKEUP_TIME +NFREE +NFSPORT +NFSVERSION +NFS_ACCESS +NFS_COMMIT +NFS_CREATE +NFS_FSINFO +NFS_FSSTAT +NFS_GETATTR +NFS_LINK +NFS_LOOKUP +NFS_MKDIR +NFS_MKNOD +NFS_MOUNT +NFS_NULL +NFS_PATHCONF +NFS_READ +NFS_READBYTES +NFS_READDIR +NFS_READDIRPLUS +NFS_READLINK +NFS_REMOVE +NFS_RENAME +NFS_RMDIR +NFS_SETATTR +NFS_SYMLINK +NFS_WRITE +NFS_WRITEBYTES +NIWAITPERREQUEST +NLJ_BATCHING +NLJ_PREFETCH +NLS_DATABASE_PARAMETERS +NLS_ENV +NLS_INSTANCE_PARAMETERS +NLS_LENGTH_SEMANTICS +NLS_SESSION_PARAMETERS +NL_AJ +NL_SJ +NOAPPEND +NOCACHE +NOCACHE_LOBS +NODE +NODE_ID +NODE_NAME +NODE_TYPE +NONDURABLE +NONLOGGED_CHANGE# +NONLOGGED_END_CHANGE# +NONLOGGED_END_TIME +NONLOGGED_START_CHANGE# +NONLOGGED_START_TIME +NONLOGGED_TIME +NONMIGRATABILITY_INFO +NONMIGRATABILITY_REASON +NONSCHEMA +NONTRANSFERABILITY_INFO +NONTRANSFERABILITY_REASON +NON_ZERO_ALLOCS +NOPARALLEL +NORMALIZED_TIMESTAMP +NOSPACEERRCNT +NOTES +NOTIFICATION_ACTION +NOTIFICATION_CONTEXT +NOTIFICATION_OWNER +NOTIFICATION_STATE +NOTIFICATION_TYPE +NOUNDO +NO_ACCESS +NO_ADAPTIVE_PLAN +NO_ANSI_REARCH +NO_ANSWER_QUERY_USING_STATS +NO_AUTO_REOPTIMIZE +NO_BASETABLE_MULTIMV_REWRITE +NO_BATCH_TABLE_ACCESS_BY_ROWID +NO_BIND_AWARE +NO_BUFFER +NO_BUSHY_JOIN +NO_CARTESIAN +NO_CHECK_ACL_REWRITE +NO_CLUSTERING +NO_CLUSTER_BY_ROWID +NO_COALESCE_SQ +NO_CONNECT_BY_CB_WHR_ONLY +NO_CONNECT_BY_COMBINE_SW +NO_CONNECT_BY_COST_BASED +NO_CONNECT_BY_ELIM_DUPS +NO_CONNECT_BY_FILTERING +NO_COST_XML_QUERY_REWRITE +NO_CPU_COSTING +NO_DATA_SECURITY_REWRITE +NO_DECORRELATE +NO_DIST_AGG_PROLLUP_PUSHDOWN +NO_DOMAIN_INDEX_FILTER +NO_DST_UPGRADE_INSERT_CONV +NO_ELIMINATE_JOIN +NO_ELIMINATE_OBY +NO_ELIMINATE_SQ +NO_ELIM_GROUPBY +NO_EXPAND +NO_EXPAND_GSET_TO_UNION +NO_EXPAND_TABLE +NO_FACT +NO_FACTORIZE_JOIN +NO_FULL_OUTER_JOIN_TO_OUTER +NO_GATHER_OPTIMIZER_STATISTICS +NO_GBY_PUSHDOWN +NO_INDEX +NO_INDEX_FFS +NO_INDEX_SS +NO_INMEMORY +NO_INMEMORY_PRUNING +NO_LOAD +NO_MERGE +NO_MODEL_PUSH_REF +NO_MONITOR +NO_MONITORING +NO_MULTIMV_REWRITE +NO_NATIVE_FULL_OUTER_JOIN +NO_NLJ_BATCHING +NO_NLJ_PREFETCH +NO_OF_COLS +NO_OF_PART_KEYS +NO_ORDER_ROLLUPS +NO_OR_EXPAND +NO_OUTER_JOIN_TO_ANTI +NO_OUTER_JOIN_TO_INNER +NO_PARALLEL +NO_PARALLEL_INDEX +NO_PARTIAL_COMMIT +NO_PARTIAL_JOIN +NO_PARTIAL_ROLLUP_PUSHDOWN +NO_PLACE_DISTINCT +NO_PLACE_GROUP_BY +NO_PQ_CONCURRENT_UNION +NO_PQ_REPLICATE +NO_PQ_SKEW +NO_PRUNE_GSETS +NO_PULL_PRED +NO_PUSH_HAVING_TO_GBY +NO_PUSH_PRED +NO_PUSH_SUBQ +NO_PX_FAULT_TOLERANCE +NO_PX_JOIN_FILTER +NO_QKN_BUFF +NO_QUERY_TRANSFORMATION +NO_REF_CASCADE +NO_REORDER_WIF +NO_RESULT_CACHE +NO_REWRITE +NO_SEMIJOIN +NO_SEMI_TO_INNER +NO_SET_TO_JOIN +NO_SQL_TUNE +NO_STAR_TRANSFORMATION +NO_STATEMENT_QUEUING +NO_STATS_GSETS +NO_SUBQUERY_PRUNING +NO_SUBSTRB_PAD +NO_SWAP_JOIN_INPUTS +NO_TABLE_LOOKUP_BY_NL +NO_TRANSFORM_DISTINCT_AGG +NO_TRIGGER_MISMATCH +NO_UNNEST +NO_USE_CUBE +NO_USE_DAGG_UNION_ALL_GSETS +NO_USE_HASH +NO_USE_HASH_AGGREGATION +NO_USE_HASH_GBY_FOR_DAGGPSHD +NO_USE_HASH_GBY_FOR_PUSHDOWN +NO_USE_INVISIBLE_INDEXES +NO_USE_MERGE +NO_USE_NL +NO_USE_PARTITION_WISE_DISTINCT +NO_USE_PARTITION_WISE_GBY +NO_USE_PARTITION_WISE_WIF +NO_USE_VECTOR_AGGREGATION +NO_VECTOR_TRANSFORM +NO_VECTOR_TRANSFORM_DIMS +NO_VECTOR_TRANSFORM_FACT +NO_VM_DDL. +NO_VM_DROP_A. +NO_XDB_FASTPATH_INSERT +NO_XMLINDEX_REWRITE +NO_XMLINDEX_REWRITE_IN_SELECT +NO_XML_DML_REWRITE +NO_XML_QUERY_REWRITE +NO_ZONEMAP +NTFN_GROUPING_CLASS +NTFN_GROUPING_REPEAT_COUNT +NTFN_GROUPING_START_TIME +NTFN_GROUPING_TYPE +NTFN_GROUPING_VALUE +NULLABLE +NULLS_POSITION +NULLS_STORED +NULL_2_S +NULL_2_SS +NULL_2_X +NULL_CONSTRAINT +NULL_VALUE +NUM +NUMA_CURR +NUMA_DEFAULT +NUMA_ID +NUMBER_COLUMN +NUMBER_OF_ARGUMENTS +NUMBER_OF_BINDS +NUMBER_OF_DESTINATIONS +NUMBER_OF_EXECUTIONS +NUMBER_OF_FAILURES +NUMBER_OF_FILES +NUMBER_OF_MEMBERS +NUMBER_OF_OPERATORS +NUMBER_OF_RULES +NUMBER_OF_SESSIONS +NUMBER_OF_STEPS +NUMBER_OF_WAITS +NUMBER_OF_WINDOWS +NUMBER_PASSES +NUMDELTA +NUMERIC_DOMINATED_BY. +NUMERIC_DOMINATES. +NUMERIC_GREATEST_LBOUND. +NUMERIC_LABEL_TO_CHAR. +NUMERIC_LABEL_TO_LBAC. +NUMERIC_LEAST_UBOUND. +NUMERIC_MERGE_LABEL. +NUMERIC_STRICTLY_DOMINATED_BY. +NUMERIC_STRICTLY_DOMINATES. +NUMGETS +NUMHITS +NUM_ANONYMOUS_NTFNS +NUM_AQ_NTFNS +NUM_ATTR1 +NUM_ATTR2 +NUM_ATTR3 +NUM_ATTR4 +NUM_ATTR5 +NUM_ATTRB +NUM_AUTHENTICATIONS +NUM_AUTH_SERVERS +NUM_BACKUPSETS +NUM_BLOCKED +NUM_BLOCKS +NUM_BUCKETS +NUM_BUSY_SERVERS +NUM_BYTES_SENT +NUM_CACHED +NUM_CBROK +NUM_CELL_DISKS +NUM_CHUNKS +NUM_CLEANED +NUM_CLIENTS +NUM_CLIENTS_ASSIGNED +NUM_CLIENTS_DONE +NUM_COLS +NUM_COLUMNS +NUM_COMP +NUM_COORDINATORS +NUM_COPIES +NUM_CPUS +NUM_CU +NUM_DAMAGE_MSG +NUM_DBCHANGE_NTFNS +NUM_DB_REPORTS +NUM_DEFERRED_WRITES +NUM_DELETES +NUM_DELETE_STMT +NUM_DELTA +NUM_DISK +NUM_DISK_EXTENTS +NUM_DISTINCT +NUM_DISTINCT_COPIES +NUM_DISTINCT_FILES_BACKED +NUM_DISTINCT_TS_BACKED +NUM_EMAIL_NTFNS +NUM_EM_REPORTS +NUM_EVENTS_PENDING +NUM_EVENTS_PROCESSED +NUM_EVICTED +NUM_EXECS +NUM_FAILED_CYCLES +NUM_FAILED_REQUESTS +NUM_FAILGROUP +NUM_FAILURES +NUM_FILES_BACKED +NUM_FLASH_DISKS +NUM_FREELIST_BLOCKS +NUM_FREE_CHUNKS +NUM_FRESH_PCT_PARTITIONS +NUM_FRESH_PCT_REGIONS +NUM_GRID_DISKS +NUM_GROUPING_NTFNS +NUM_HARD_DISKS +NUM_HITS +NUM_HTTP_NTFNS +NUM_INCIDENT +NUM_INCIDENTS +NUM_INCIDENTS_LASTHOUR +NUM_INDEX_KEYS +NUM_INSERTS +NUM_INSERT_STMT +NUM_INTERVAL +NUM_JOBS +NUM_MERGE_STMT +NUM_MESSAGE_RECEIVED +NUM_MESSAGE_SENT +NUM_MISSES +NUM_MSG +NUM_MSGS +NUM_MVS +NUM_MVS_ABORTED +NUM_MVS_COMPLETED +NUM_NTFNS +NUM_NTFNS_ALL_GROUPS +NUM_NTFNS_CURRENT_GROUP +NUM_NULLS +NUM_OCI_NTFNS +NUM_OPEN_SERVERS +NUM_PARAMETERS +NUM_PARTS +NUM_PCT_TABLES +NUM_PENDING_NTFNS +NUM_PHYSICAL_DISKS +NUM_PLAN_DIRECTIVES +NUM_PLSQL_NTFNS +NUM_PREDS +NUM_PREFETCHED +NUM_PROCESS +NUM_PROCESSES +NUM_PURGED +NUM_QUEUED_REQUESTS +NUM_REPOP +NUM_REQUESTS +NUM_RETRIES +NUM_ROWS +NUM_ROWS_DEL +NUM_ROWS_DL_INS +NUM_ROWS_INS +NUM_ROWS_PURGED +NUM_ROWS_UPD +NUM_RUNS +NUM_SAMPLES +NUM_SELECT_STMT +NUM_SERVERS +NUM_SESS_WAITING +NUM_STALE_PCT_PARTITIONS +NUM_STALE_PCT_REGIONS +NUM_SUCCS +NUM_SYMBOLS +NUM_TARGET_BLOCKS +NUM_TARGET_ROWS +NUM_TASKS +NUM_TBLS +NUM_THRESHOLD_DRIFT +NUM_TRACKED +NUM_UNCACHED +NUM_UNEVICTION +NUM_UPDATES +NUM_UPDATE_STMT +NUM_VIRCOLS +NUM_VOL +NUM_WAITERS +NUM_WAITS +NUM_WRITERS +NUM_WRITES +NVALS +NWFAIL_COUNT +N_DMLS +N_FTS +N_FULL_SCAN +N_LOOKUP_SCAN +N_SEGMENT_WRITE +O7_DICTIONARY_ACCESSIBILITY +OBJ +OBJ# +OBJD +OBJECT +OBJECT# +OBJECT_ALIAS +OBJECT_ARGPOS +OBJECT_COLUMN_NAME +OBJECT_COUNT +OBJECT_DATA +OBJECT_EDITION +OBJECT_FLUSHES +OBJECT_HANDLE +OBJECT_ID +OBJECT_ID_TYPE +OBJECT_INSTANCE +OBJECT_LIMIT +OBJECT_NAME +OBJECT_NO +OBJECT_NODE +OBJECT_NUMBER +OBJECT_OWNER +OBJECT_OWNER_ARGPOS +OBJECT_PATH +OBJECT_PRIVILEGES +OBJECT_RECID +OBJECT_REFRESHES +OBJECT_SCHEMA +OBJECT_SIZE +OBJECT_STAMP +OBJECT_STATUS +OBJECT_TYPE +OBJECT_TYPE_ID +OBJECT_TYPE_NAME +OBJECT_TYPE_WEIGHT +OBJID +OBJN +OBJNUM +OBJ_EDITION_NAME +OBJ_ID +OBJ_NAME +OBJ_NUM +OBJ_OWNER +OBJ_PRIV +OBJ_PRIVILEGE +OBJ_TYPE +OBSERVATION_PERIOD +OBSERVED_ERROR# +OBSERVED_ERROR_MESSAGE +OBSERVED_ROW_COUNT +OBSERVER_HOST +OBSERVER_NAME +OBSOLETE +OBSOLETE_COUNT +OCCUPANT_DESC +OCCUPANT_NAME +OCCURRENCES +ODCIANYDATADUMP. +ODCICOLINFODUMP. +ODCICOLINFOFLAGSDUMP. +ODCICONST. +ODCIENVDUMP. +ODCIINDEXALTEROPTIONDUMP. +ODCIINDEXCALLPROPERTYDUMP. +ODCIINDEXINFODUMP. +ODCIINDEXINFOFLAGSDUMP. +ODCIPARTINFODUMP. +ODCIPARTINFOLISTDUMP. +ODCIPREDINFODUMP. +ODCIQUERYINFODUMP. +ODCISTATSOPTIONSDUMP. +ODCITABFUNCINFODUMP. +ODM_MODEL_UTIL. +ODM_MODEL_UTIL.CHOP_UP +ODM_MODEL_UTIL.CLOB_TO_EXPRESSION_REC +ODM_MODEL_UTIL.DM_ENABLED_CHECK +ODM_MODEL_UTIL.EXPRESSION_REC_TO_CLOB +ODM_MODEL_UTIL.GET_PARTITION_LIST +ODM_MODEL_UTIL.PARTITIONING_AVAILABLE +ODM_MODEL_UTIL.TABLE_EXIST +ODM_MODEL_UTIL.UPCASE +ODM_MODEL_UTIL.VIRTUAL_NESTED_XFORM +ODM_UTIL. +ODM_UTIL.DM_TEXT_TOKENS +ODM_UTIL.DROP_MODEL +ODM_UTIL.GET_DETAILS_PARSE_INTERVAL +ODM_UTIL.SYS_DM_TEXT +ODM_UTIL.SYS_DM_TEXT_DF +OFFLINE_CAPABLE +OFFLINE_CHANGE# +OFFLINE_DISKS +OFFLOADABLE +OFFSET +OFS_ACCESS +OFS_BMAP +OFS_BYTES_READ +OFS_BYTES_WRITTEN +OFS_CREATE +OFS_DESTROY +OFS_FLUSH +OFS_FORGET +OFS_FSID +OFS_FSPATH +OFS_FSTYPE +OFS_FSYNC +OFS_FSYNCDIR +OFS_GETATTR +OFS_GETLK +OFS_GETXATTR +OFS_INIT +OFS_INTERRUPT +OFS_LINK +OFS_LISTXATTR +OFS_LOOKUP +OFS_MKDIR +OFS_MKNOD +OFS_MNTFLAGS +OFS_MNTFLGS +OFS_MNTOPTS +OFS_MNTPATH +OFS_MNTPNT +OFS_NODENM +OFS_OPEN +OFS_OPENDIR +OFS_READ +OFS_READDIR +OFS_READLINK +OFS_RELEASE +OFS_RELEASEDIR +OFS_REMOVEXATTR +OFS_RENAME +OFS_RMDIR +OFS_SETATTR +OFS_SETLK +OFS_SETLKW +OFS_SETXATTR +OFS_STATFS +OFS_SYMLINK +OFS_UNLINK +OFS_WRITE +OGC_AREA. +OGC_ASBINARY. +OGC_ASTEXT. +OGC_BOUNDARY. +OGC_BUFFER. +OGC_CENTROID. +OGC_CONTAINS. +OGC_CONVEXHULL. +OGC_CROSS. +OGC_DIFFERENCE. +OGC_DIMENSION. +OGC_DISJOINT. +OGC_DISTANCE. +OGC_ENDPOINT. +OGC_ENVELOPE. +OGC_EQUALS. +OGC_EXTERIORRING. +OGC_GEOMETRYN. +OGC_GEOMETRYTYPE. +OGC_INTERIORRINGN. +OGC_INTERSECTION. +OGC_INTERSECTS. +OGC_ISCLOSED. +OGC_ISEMPTY. +OGC_ISRING. +OGC_ISSIMPLE. +OGC_LENGTH. +OGC_LINESTRINGFROMTEXT. +OGC_LINESTRINGFROMWKB. +OGC_MULTILINESTRINGFROMTEXT. +OGC_MULTILINESTRINGFROMWKB. +OGC_MULTIPOLYGONFROMTEXT. +OGC_MULTIPOLYGONFROMWKB. +OGC_NUMGEOMETRIES. +OGC_NUMINTERIORRINGS. +OGC_NUMPOINTS. +OGC_OVERLAP. +OGC_POINTFROMTEXT. +OGC_POINTFROMWKB. +OGC_POINTN. +OGC_POINTONSURFACE. +OGC_POLYGONFROMTEXT. +OGC_POLYGONFROMWKB. +OGC_RELATE. +OGC_SRID. +OGC_STARTPOINT. +OGC_SYMMETRICDIFFERENCE. +OGC_TOUCH. +OGC_UNION. +OGC_WITHIN. +OGC_X. +OGC_Y. +OGIS_CRS_DELETE_TRIGGER. +OGIS_CRS_INSERT_TRIGGER. +OID_ENABLED. +OID_TEXT +OID_TEXT_LENGTH +OJDS$ROLE_TRIGGER$. +OJDS_CONTEXT. +OJDS_CONTEXT.ADDPERM +OJDS_CONTEXT.DROP_ALL_CHILD_LINKS +OJDS_CONTEXT.DROP_INODE_NODE +OJDS_CONTEXT.DROP_INODE_S +OJDS_CONTEXT.DROP_INODE_SLOW +OJDS_CONTEXT.DROP_PERMISSION_S +OJDS_CONTEXT.IS_THIS_A_CONTEXT +OJDS_CONTEXT.LINK +OJDS_CONTEXT.MKCONTEXT +OJDS_CONTEXT.MKREFERENCE +OJDS_CONTEXT.RELINK +OJDS_CONTEXT.RMEMPTYCTX +OJDS_CONTEXT.RMUNREFNODES +OJDS_CONTEXT.ROLE_DROPPED +OJDS_CONTEXT.UNLINK +OJDS_CONTEXT.USER_DROPPED +OJDS_NAMESPACE. +OJDS_NAMESPACE.EXECUTE +OJDS_NAMESPACE.READ +OJDS_NAMESPACE.WRITE +OLAPIBOOTSTRAP2. +OLAPIHANDSHAKE2. +OLAPRANCURIMPL_T.ODCITABLECLOSE +OLAPRANCURIMPL_T.ODCITABLEDESCRIBE +OLAPRANCURIMPL_T.ODCITABLEFETCH +OLAPRANCURIMPL_T.ODCITABLEPREPARE +OLAPRANCURIMPL_T.ODCITABLESTART +OLAPRC_TABLE. +OLAP_BOOL_SRF. +OLAP_CONDITION. +OLAP_DATE_SRF. +OLAP_NUMBER_SRF. +OLAP_TABLE. +OLAP_TEXT_SRF. +OLDEST_BACKUP_TIME +OLDEST_FLASHBACK_SCN +OLDEST_FLASHBACK_TIME +OLDEST_MESSAGE_NUMBER +OLDEST_MSGID +OLDEST_MSG_ENQTM +OLDEST_OFFLINE_RANGE +OLDEST_PERSISTENT_INC_CTIME +OLDEST_POSITION +OLDEST_REFRESH_DATE +OLDEST_REFRESH_SCN +OLDEST_SAMPLE_ID +OLDEST_SAMPLE_TIME +OLDEST_SCN +OLDEST_SCN_NUM +OLDEST_TRANSACTION_ID +OLDEST_TRANSIENT_INC_CTIME +OLDEST_XIDSLT +OLDEST_XIDSQN +OLDEST_XIDUSN +OLD_BLOCKS +OLD_FILENAME +OLD_HASH_VALUE +OLD_LOG_STATE +OLD_LOG_TYPE +OLD_PUSH_PRED +OLS$DATAPUMP. +OLS$DATAPUMP.INSTANCE_CALLOUT_IMP +OLS$DATAPUMP.SYSTEM_CALLOUT_IMP +OLS_DIP_NTFY. +OLS_DIP_NTFY.GETAPPEVENT +OLS_DIP_NTFY.PUTAPPEVENTSTATUS +OLS_DIP_NTFY.PUTOIDEVENT +OLS_ENFORCEMENT. +OLS_ENFORCEMENT.DISABLE_OLS +OLS_ENFORCEMENT.ENABLE_OLS +OLS_GRANTEE +OLS_INIT_SESSION. +OLS_LABEL_COMPONENT_NAME +OLS_LABEL_COMPONENT_TYPE +OLS_LABEL_DOMINATES. +OLS_MAX_READ_LABEL +OLS_MAX_WRITE_LABEL +OLS_MIN_WRITE_LABEL +OLS_NEW_VALUE +OLS_OLD_VALUE +OLS_PARENT_GROUP_NAME +OLS_POLICY_NAME +OLS_PRIVILEGES_GRANTED +OLS_PRIVILEGES_USED +OLS_PROGRAM_UNIT_NAME +OLS_STRING_LABEL +OLS_UTIL_WRAPPER. +OLS_UTIL_WRAPPER.CREATE_TEMP_TABLE +OLS_UTIL_WRAPPER.DROP_ROLE +OLS_UTIL_WRAPPER.GET_STATUS +ONEPASS_EXECUTIONS +ONLINE +ONLINE_CHANGE# +ONLINE_FUZZY +ONLINE_STATUS +ONLINE_TIME +ONUSER +ON_CONDITION +ON_CONVERT_Q +ON_DATAMOVEMENT +ON_GRANT_Q +ON_LOAD +ON_QUERY_COMPUTATION +OPAQUE_TRANSFORM +OPAQUE_XCANONICAL +OPCODE +OPENOWNEROPAQUE +OPENREAD +OPENS +OPENSEQUENCEID +OPENSTATEID +OPENWRITE +OPEN_CURSORS +OPEN_MODE +OPEN_OPT_DEADLOCK +OPEN_OPT_NO_XID +OPEN_OPT_PERSISTENT +OPEN_OPT_PROCESS_OWNED +OPEN_RESETLOGS +OPEN_TIME +OPEN_TIME_TZ +OPEN_VERSIONS +OPERATION +OPERATIONS_FILTER +OPERATION_CODE +OPERATION_ID +OPERATION_NAME +OPERATION_TAG +OPERATION_TIME +OPERATION_TIMESTAMP +OPERATION_TYPE +OPERATOR +OPERATOR_MASK +OPERATOR_NAME +OPERATOR_SCHEMA +OPERATOR_TYPE +OPER_COUNT +OPER_MODE +OPER_TYPE +OPG_APIS. +OPG_APIS.ADD_INDEX_METADATA_LUCENE +OPG_APIS.ADD_INDEX_METADATA_ORATEXT +OPG_APIS.ADD_INDEX_METADATA_SOLRCLOUD +OPG_APIS.ANALYZE_PG +OPG_APIS.CF +OPG_APIS.CF_CLEANUP +OPG_APIS.CF_PREP +OPG_APIS.CHECK_COL_TYPE +OPG_APIS.CLEAR_PG +OPG_APIS.CLEAR_PG_INDICES +OPG_APIS.CLEAR_TWOTABLES_GRAPH_TABLE +OPG_APIS.CLONE_GRAPH +OPG_APIS.COUNT_TRIANGLE +OPG_APIS.COUNT_TRIANGLE_CLEANUP +OPG_APIS.COUNT_TRIANGLE_PREP +OPG_APIS.COUNT_TRIANGLE_RENUM +OPG_APIS.CREATE_EDGES_TEXT_IDX +OPG_APIS.CREATE_PG +OPG_APIS.CREATE_PG_SNAPSHOT_TAB +OPG_APIS.CREATE_PG_TEXTIDX_TAB +OPG_APIS.CREATE_STAT_TABLE +OPG_APIS.CREATE_SUB_GRAPH +OPG_APIS.CREATE_TWO_TABLES_EDGE +OPG_APIS.CREATE_TWO_TABLES_VERTEX +OPG_APIS.CREATE_VERTICES_TEXT_IDX +OPG_APIS.CURRENTTIMEMILLIS +OPG_APIS.DELETE_INDEX_METADATA +OPG_APIS.DELETE_INDEX_METADATA_KEY +OPG_APIS.DROP_EDGES_TEXT_IDX +OPG_APIS.DROP_ELEMENT_TEXT_IDX +OPG_APIS.DROP_PG +OPG_APIS.DROP_PG_VIEW +OPG_APIS.DROP_VERTICES_TEXT_IDX +OPG_APIS.END_FTSL +OPG_APIS.ESTIMATE_TRIANGLE_RENUM +OPG_APIS.EXP_EDGE_TAB_STATS +OPG_APIS.EXP_VERTEX_TAB_STATS +OPG_APIS.FIND_CC_MAPPING_BASED +OPG_APIS.FIND_CLUSTERS_CLEANUP +OPG_APIS.FIND_CLUSTERS_PREP +OPG_APIS.FIND_SP +OPG_APIS.FIND_SP_CLEANUP +OPG_APIS.FIND_SP_PREP +OPG_APIS.FORMAT_NUM_FOR_SQL +OPG_APIS.GENERATE_GRAPH_TMP_WORK_TAB +OPG_APIS.GET_BUILD_ID +OPG_APIS.GET_COMPRESS_STR +OPG_APIS.GET_EDGE_TAB_COL_DEF +OPG_APIS.GET_ELAPSED_TIME +OPG_APIS.GET_GEOMETRY_FROM_V_COL +OPG_APIS.GET_GEOMETRY_FROM_V_T_COLS +OPG_APIS.GET_INT_IN_BRACKETS +OPG_APIS.GET_LATLONG_FROM_V_COL +OPG_APIS.GET_LATLONG_FROM_V_T_COLS +OPG_APIS.GET_LOGLINE_HEADER +OPG_APIS.GET_LONGLAT_FROM_V_COL +OPG_APIS.GET_LONGLAT_FROM_V_T_COLS +OPG_APIS.GET_LONG_LAT_GEOMETRY +OPG_APIS.GET_OPTION_VAL +OPG_APIS.GET_PARALLEL_CLAUSE_FOR_CTAS +OPG_APIS.GET_PARTITIONS_LIST +OPG_APIS.GET_SCN +OPG_APIS.GET_SESSION_ID +OPG_APIS.GET_SPATIAL_PROPERTY_KEY +OPG_APIS.GET_TMP_WORK_TAB_NAME +OPG_APIS.GET_VERSION +OPG_APIS.GET_VERTEX_TAB_COL_DEF +OPG_APIS.GET_WKTGEOMETRY_FROM_V_COL +OPG_APIS.GET_WKTGEOMETRY_FROM_V_T_COLS +OPG_APIS.GET_WORK_TAB_NAME_IF_EMPTY +OPG_APIS.GRANT_ACCESS +OPG_APIS.IMP_EDGE_TAB_STATS +OPG_APIS.IMP_VERTEX_TAB_STATS +OPG_APIS.LOCK_EDGES +OPG_APIS.LOCK_INDEX_MATA +OPG_APIS.LOCK_SKEL +OPG_APIS.LOCK_VERTICES +OPG_APIS.NOT_NULL_OR_EMPTY +OPG_APIS.PLAN_DONE +OPG_APIS.PLAN_START +OPG_APIS.PR +OPG_APIS.PREPARE_TEXT_INDEX +OPG_APIS.PROCESS_TRACE_SETTING +OPG_APIS.PR_CLEANUP +OPG_APIS.PR_PREP +OPG_APIS.RELEASE_LOCK +OPG_APIS.RENAME_PG +OPG_APIS.SET_SESSION_PARAM +OPG_APIS.SHOW_PATH_BD +OPG_APIS.SPARSIFY_GRAPH +OPG_APIS.SPARSIFY_GRAPH_CLEANUP +OPG_APIS.SPARSIFY_GRAPH_PREP +OPG_APIS.START_FTSL +OPG_APIS.TRUNCATE_AND_DROP_IGNORE +OPG_APIS.VALIDATE_NAME +OPG_APIS.VALIDATE_NON_GRAPHNAME +OPG_APIS.VALIDATE_TAB_VIEW_NAME +OPG_CTX. +OPG_CTX.GET_LOG_LEVEL +OPG_CTX.GET_PARAM +OPG_CTX.SET_LOG_LEVEL +OPG_CTX.SET_PARAM +OPG_CTX_SESSION. +OPG_CTX_SESSION.GET_LOG_LEVEL +OPG_CTX_SESSION.GET_PARAM +OPG_CTX_SESSION.SET_LOG_LEVEL +OPG_CTX_SESSION.SET_PARAM +OPG_GRAPHOP. +OPG_GRAPHOP.CLONE_GRAPH +OPG_GRAPHOP.CREATE_SUB_GRAPH +OPG_GRAPHOP.FIND_CC +OPG_GRAPHOP.FIND_CC_MAPPING_BASED +OPG_GRAPHOP.POPULATE_SKELETON_TAB +OPG_GRAPHOP.SPARSIFY_GRAPH +OPG_LOG. +OPG_LOG.ASSERT +OPG_LOG.DEBUG +OPG_LOG.DEBUG_NH +OPG_LOG.ERROR +OPG_LOG.FATAL +OPG_LOG.GET_CALLER_INFO +OPG_LOG.GET_LOG_LEVEL +OPG_LOG.INFO +OPG_LOG.IS_ASSERTION_ENABLED +OPG_LOG.IS_DEBUG_ENABLED +OPG_LOG.IS_ERROR_ENABLED +OPG_LOG.IS_FATAL_ENABLED +OPG_LOG.IS_INFO_ENABLED +OPG_LOG.IS_WARNING_ENABLED +OPG_LOG.SET_LOG_LEVEL +OPG_LOG.SET_LOG_OUTPUT +OPG_LOG.TEST +OPG_LOG.WARNING +OPG_METRICS. +OPG_METRICS.COUNT_TRIANGLE_BIND +OPG_METRICS.COUNT_TRIANGLE_BIND_RENUM +OPG_METRICS.PROCESS_DOP +OPG_PATH. +OPG_PATH.FIND_SP +OPG_PATH.GET_FLAG +OPG_PATH.GET_MINCOST +OPG_PATH.GET_P2S +OPG_PATH.GET_ROWID +OPG_PATH.GET_STRATEGY +OPG_PATH.GET_WEIGHT +OPG_PATH.INIT_MINCOST +OPG_PATH.SET_FLAG +OPG_PATH.SET_MINCOST +OPG_PATH.SET_STRATEGY +OPG_RANK. +OPG_RANK.PPR +OPG_RANK.PR +OPG_UTL. +OPG_UTL.BOOL_TO_STR +OPG_UTL.EXE_PLAN_DUMP +OPG_UTL.EXE_PLAN_PREPARE +OPG_UTL.GENERATE_GRAPH_TMP_WORK_TAB +OPG_UTL.GET_COLUMNAR_COMPRESS_SYN +OPG_UTL.GET_COMPRESS_NOLOG_TBS +OPG_UTL.GET_COMPRESS_NOLOG_TBS_SET +OPG_UTL.GET_ELAPSED_TIME_IN_SEC +OPG_UTL.GET_INT_PARAMETER +OPG_UTL.GET_NUMBER_IN_POS +OPG_UTL.GET_PARAMETER +OPG_UTL.GET_SAFE_ROWCOUNT +OPG_UTL.GET_SCN +OPG_UTL.GET_SESSION_PARALLEL_DML_DOP +OPG_UTL.GET_SESSION_PARALLEL_QUERY_DOP +OPG_UTL.GET_STORAGE_CLAUSE +OPG_UTL.GET_STRING_PARAMETER +OPG_UTL.GET_TBS_CLAUSE +OPG_UTL.PROCESS_TRACE_SETTING +OPID +OPNAME +OPTIMAL_EXECUTIONS +OPTIMAL_LOGFILE_SIZE +OPTIMAL_SIZE +OPTIME +OPTIMIZATION +OPTIMIZED +OPTIMIZED_PHYBLKRD +OPTIMIZED_PHYSICAL_READS +OPTIMIZED_PHYSICAL_READS_DELTA +OPTIMIZED_PHYSICAL_READS_TOTAL +OPTIMIZED_PHY_READ_REQUESTS +OPTIMIZED_WEIGHT +OPTIMIZER +OPTIMIZER_COST +OPTIMIZER_ENV +OPTIMIZER_ENV_HASH_VALUE +OPTIMIZER_FEATURES_ENABLE +OPTIMIZER_FEATURE_ENABLE +OPTIMIZER_MISMATCH +OPTIMIZER_MODE +OPTIMIZER_MODE_MISMATCH +OPTIMIZER_STATS +OPTIMIZER_TRACE +OPTION$ +OPTIONAL_AFF_SWITCHES +OPTIONAL_AFF_SWITCHES_OUT +OPTIONAL_AFF_SWITCH_ATTEMPTS +OPTIONS +OPTION_ID +OPTION_NAME +OPTION_VALUE +OPTSIZE +OPT_ESTIMATE +OPT_PARAM +OPT_STATE +OPT_TIME +OP_2_SS +OP_SCNBAS +OP_SCNWRP +OP_TIMESTAMP +ORA$GRANT_SYS_SELECT. +ORA12C_STIG_VERIFY_FUNCTION. +ORA12C_STRONG_VERIFY_FUNCTION. +ORA12C_VERIFY_FUNCTION. +ORACLE_BIGDATA.ODCIEXTTABLECLOSE +ORACLE_BIGDATA.ODCIEXTTABLEFETCH +ORACLE_BIGDATA.ODCIEXTTABLEOPEN +ORACLE_BIGDATA.ODCIEXTTABLEPOPULATE +ORACLE_BIGDATA.ODCIGETINTERFACES +ORACLE_COLUMN_TYPE +ORACLE_DATAPUMP.ODCIEXTTABLECLOSE +ORACLE_DATAPUMP.ODCIEXTTABLEFETCH +ORACLE_DATAPUMP.ODCIEXTTABLEOPEN +ORACLE_DATAPUMP.ODCIEXTTABLEPOPULATE +ORACLE_DATAPUMP.ODCIGETINTERFACES +ORACLE_HDFS.ODCIEXTTABLECLOSE +ORACLE_HDFS.ODCIEXTTABLEFETCH +ORACLE_HDFS.ODCIEXTTABLEOPEN +ORACLE_HDFS.ODCIEXTTABLEPOPULATE +ORACLE_HDFS.ODCIGETINTERFACES +ORACLE_HIVE.ODCIEXTTABLECLOSE +ORACLE_HIVE.ODCIEXTTABLEFETCH +ORACLE_HIVE.ODCIEXTTABLEOPEN +ORACLE_HIVE.ODCIEXTTABLEPOPULATE +ORACLE_HIVE.ODCIGETINTERFACES +ORACLE_LOADER.ODCIEXTTABLECLOSE +ORACLE_LOADER.ODCIEXTTABLEFETCH +ORACLE_LOADER.ODCIEXTTABLEOPEN +ORACLE_LOADER.ODCIEXTTABLEPOPULATE +ORACLE_LOADER.ODCIGETINTERFACES +ORACLE_MAINTAINED +ORACLE_USERNAME +ORA_COMPLEXITY_CHECK. +ORA_DM_BUILD. +ORA_DM_BUILD_FLAT. +ORA_DM_REFCUR_PKG. +ORA_FI_IMP_T.ODCITABLEDESCRIBE +ORA_FI_RIMP_T.ODCITABLEDESCRIBE +ORA_FI_RIMP_T.ODCITABLEREWRITE +ORA_FI_SUPERVISED_BINNING. +ORA_FI_T.ODCITABLECLOSE +ORA_FI_T.ODCITABLEDESCRIBE +ORA_FI_T.ODCITABLEFETCH +ORA_FI_T.ODCITABLEPREPARE +ORA_FI_T.ODCITABLESTART +ORA_GET_AUDITED_LABEL. +ORA_SI_MKSTILLIMAGE. +ORA_STRING_DISTANCE. +ORDAUDIO.APPENDTOCOMMENTS +ORDAUDIO.CHECKPROPERTIES +ORDAUDIO.CLEARLOCAL +ORDAUDIO.CLOSESOURCE +ORDAUDIO.COMPARECOMMENTS +ORDAUDIO.COPYCOMMENTSOUT +ORDAUDIO.DELETECOMMENTS +ORDAUDIO.DELETECONTENT +ORDAUDIO.ERASEFROMCOMMENTS +ORDAUDIO.EXPORT +ORDAUDIO.GETALLATTRIBUTES +ORDAUDIO.GETATTRIBUTE +ORDAUDIO.GETAUDIODURATION +ORDAUDIO.GETBFILE +ORDAUDIO.GETCOMMENTLENGTH +ORDAUDIO.GETCOMPRESSIONTYPE +ORDAUDIO.GETCONTENT +ORDAUDIO.GETCONTENTINLOB +ORDAUDIO.GETCONTENTLENGTH +ORDAUDIO.GETDESCRIPTION +ORDAUDIO.GETENCODING +ORDAUDIO.GETFORMAT +ORDAUDIO.GETMIMETYPE +ORDAUDIO.GETNUMBEROFCHANNELS +ORDAUDIO.GETPROPERTIES +ORDAUDIO.GETSAMPLESIZE +ORDAUDIO.GETSAMPLINGRATE +ORDAUDIO.GETSOURCE +ORDAUDIO.GETSOURCELOCATION +ORDAUDIO.GETSOURCENAME +ORDAUDIO.GETSOURCETYPE +ORDAUDIO.GETUPDATETIME +ORDAUDIO.IMPORT +ORDAUDIO.IMPORTFROM +ORDAUDIO.INIT +ORDAUDIO.ISLOCAL +ORDAUDIO.LOADCOMMENTSFROMFILE +ORDAUDIO.LOCATEINCOMMENTS +ORDAUDIO.OPENSOURCE +ORDAUDIO.ORDAUDIO +ORDAUDIO.PROCESSAUDIOCOMMAND +ORDAUDIO.PROCESSSOURCECOMMAND +ORDAUDIO.READFROMCOMMENTS +ORDAUDIO.READFROMSOURCE +ORDAUDIO.SETAUDIODURATION +ORDAUDIO.SETCOMPRESSIONTYPE +ORDAUDIO.SETDESCRIPTION +ORDAUDIO.SETENCODING +ORDAUDIO.SETFORMAT +ORDAUDIO.SETKNOWNATTRIBUTES +ORDAUDIO.SETLOCAL +ORDAUDIO.SETMIMETYPE +ORDAUDIO.SETNUMBEROFCHANNELS +ORDAUDIO.SETPROPERTIES +ORDAUDIO.SETSAMPLESIZE +ORDAUDIO.SETSAMPLINGRATE +ORDAUDIO.SETSOURCE +ORDAUDIO.SETUPDATETIME +ORDAUDIO.TRIMCOMMENTS +ORDAUDIO.TRIMSOURCE +ORDAUDIO.WRITETOCOMMENTS +ORDAUDIO.WRITETOSOURCE +ORDAUDIOEXCEPTIONS. +ORDAUDIO_PKG. +ORDAUDIO_PKG.CHECKPROPERTIES +ORDAUDIO_PKG.GETALLATTRIBUTES +ORDAUDIO_PKG.GETATTRIBUTE +ORDAUDIO_PKG.GETATTRIBUTES +ORDAUDIO_PKG.GETATTRIBUTESFROMLOCAL +ORDAUDIO_PKG.GETSUPPORTEDMIMETYPE +ORDAUDIO_PKG.PROCESSCOMMAND +ORDAUDIO_PKG.SETOUTPUTTONULL +ORDAUDIO_PKG.SETOUTPUTTOSTATUS +ORDAUDIO_PKG.SETOUTPUTTOTRACE +ORDAUDIO_PKG.SETOUTPUTTOVERBOSE +ORDAUDIO_PKG.SETPROPERTIES +ORDDATASOURCE.EXPORT +ORDDATASOURCE.GETBFILE +ORDDATASOURCE.GETBLOB +ORDDATASOURCE.GETCONTENTLENGTH +ORDDATASOURCE.GETSOURCEINFORMATION +ORDDATASOURCE.GETSOURCELOCATION +ORDDATASOURCE.GETSOURCENAME +ORDDATASOURCE.GETSOURCETYPE +ORDDATASOURCE.GETUPDATETIME +ORDDATASOURCE.IMPORT +ORDDATASOURCE.ISLOCAL +ORDDATASOURCE.ORDDATASOURCE +ORDDATASOURCE.SETSOURCEINFORMATION +ORDDATASOURCE.SETUPDATETIME +ORDDICOM.EXPORT +ORDDICOM.EXTRACTMETADATA +ORDDICOM.GETATTRIBUTEBYNAME +ORDDICOM.GETATTRIBUTEBYTAG +ORDDICOM.GETCONTENT +ORDDICOM.GETCONTENTLENGTH +ORDDICOM.GETSERIESINSTANCEUID +ORDDICOM.GETSOPCLASSUID +ORDDICOM.GETSOPINSTANCEUID +ORDDICOM.GETSOURCEINFORMATION +ORDDICOM.GETSOURCELOCATION +ORDDICOM.GETSOURCENAME +ORDDICOM.GETSOURCETYPE +ORDDICOM.GETSTUDYINSTANCEUID +ORDDICOM.IMPORT +ORDDICOM.ISANONYMOUS +ORDDICOM.ISCONFORMANCEVALID +ORDDICOM.ISLOCAL +ORDDICOM.MAKEANONYMOUS +ORDDICOM.ORDDICOM +ORDDICOM.PROCESSCOPY +ORDDICOM.SETPROPERTIES +ORDDICOM.WRITEMETADATA +ORDDOC.CLEARLOCAL +ORDDOC.CLOSESOURCE +ORDDOC.DELETECONTENT +ORDDOC.EXPORT +ORDDOC.GETBFILE +ORDDOC.GETCONTENT +ORDDOC.GETCONTENTINLOB +ORDDOC.GETCONTENTLENGTH +ORDDOC.GETFORMAT +ORDDOC.GETMIMETYPE +ORDDOC.GETPROPERTIES +ORDDOC.GETSOURCE +ORDDOC.GETSOURCELOCATION +ORDDOC.GETSOURCENAME +ORDDOC.GETSOURCETYPE +ORDDOC.GETUPDATETIME +ORDDOC.IMPORT +ORDDOC.IMPORTFROM +ORDDOC.INIT +ORDDOC.ISLOCAL +ORDDOC.OPENSOURCE +ORDDOC.ORDDOC +ORDDOC.PROCESSSOURCECOMMAND +ORDDOC.READFROMSOURCE +ORDDOC.SETFORMAT +ORDDOC.SETLOCAL +ORDDOC.SETMIMETYPE +ORDDOC.SETPROPERTIES +ORDDOC.SETSOURCE +ORDDOC.SETUPDATETIME +ORDDOC.TRIMSOURCE +ORDDOC.WRITETOSOURCE +ORDDOCEXCEPTIONS. +ORDDOC_PKG. +ORDDOC_PKG.GETPROPERTIES +ORDERED +ORDERED_PREDICATES +ORDERING_TYPE +ORDERROR. +ORDERROR.PRINTSTACKTRACE +ORDERROR.RAISE +ORDERRORINT. +ORDERRORINT.RAISE +ORDER_FLAG +ORDER_ID +ORDER_NUM +ORDER_SUBQ +ORDIMAGE.APPLYWATERMARK +ORDIMAGE.CHECKPROPERTIES +ORDIMAGE.CLEARLOCAL +ORDIMAGE.CLOSESOURCE +ORDIMAGE.COPY +ORDIMAGE.DELETECONTENT +ORDIMAGE.EXPORT +ORDIMAGE.GETBFILE +ORDIMAGE.GETCOMPRESSIONFORMAT +ORDIMAGE.GETCONTENT +ORDIMAGE.GETCONTENTFORMAT +ORDIMAGE.GETCONTENTLENGTH +ORDIMAGE.GETDICOMMETADATA +ORDIMAGE.GETFILEFORMAT +ORDIMAGE.GETHEIGHT +ORDIMAGE.GETMETADATA +ORDIMAGE.GETMIMETYPE +ORDIMAGE.GETPROPERTIES +ORDIMAGE.GETSOURCE +ORDIMAGE.GETSOURCELOCATION +ORDIMAGE.GETSOURCENAME +ORDIMAGE.GETSOURCETYPE +ORDIMAGE.GETUPDATETIME +ORDIMAGE.GETWIDTH +ORDIMAGE.IMPORT +ORDIMAGE.IMPORTFROM +ORDIMAGE.INIT +ORDIMAGE.ISLOCAL +ORDIMAGE.OPENSOURCE +ORDIMAGE.ORDIMAGE +ORDIMAGE.PROCESS +ORDIMAGE.PROCESSCOPY +ORDIMAGE.PROCESSSOURCECOMMAND +ORDIMAGE.PUTMETADATA +ORDIMAGE.READFROMSOURCE +ORDIMAGE.SETLOCAL +ORDIMAGE.SETMIMETYPE +ORDIMAGE.SETPROPERTIES +ORDIMAGE.SETSOURCE +ORDIMAGE.SETUPDATETIME +ORDIMAGE.TRIMSOURCE +ORDIMAGE.WRITETOSOURCE +ORDIMAGECONSTANTS. +ORDIMAGEEXCEPTIONS. +ORDIMAGESIEXCEPTIONS. +ORDIMAGESIGNATURE.EVALUATESCORE +ORDIMAGESIGNATURE.GENERATESIGNATURE +ORDIMAGESIGNATURE.INIT +ORDIMAGESIGNATURE.ISSIMILAR +ORDIMDPCALLOUTS. +ORDIMDPCALLOUTS.INSTANCE_CALLOUT_IMP +ORDIMERRORCODES. +ORDIMERRORCODES.RAISEEXCEPTIONWITHMSG +ORDIMERRORCODES.RAISEEXCEPTIONWITHMSG2 +ORDIMGEXTCODEC_PKG. +ORDIMGEXTCODEC_PKG.MMTK_EXT_PROCESS +ORDIMGEXTCODEC_PKG.MMTK_GETPROPERTIES +ORDIMGEXTCODEC_PKG.MMTK_PROCESS +ORDIMGSIG_PKG. +ORDIMGSIG_PKG.GENERATESIGNATUREFUNC +ORDIMGSI_PKG. +ORDIMGSI_PKG.COMPUTESCORE +ORDIMGSI_PKG.EXTRACT_ALLPROPERTIES +ORDIMGSI_PKG.EXTRACT_ALLPROPERTIES_FUNC +ORDIMGSI_PKG.GETSCORE +ORDIMGSI_PKG.SI_DERIVETHUMBNAIL +ORDIMGSI_PKG.SI_ISSUPPORTEDFORMATCONV +ORDIMGSI_PKG.SI_ISVALIDSTR +ORDIMGSI_PKG.SI_SUPPORTEDFORMAT +ORDIMGSI_PKG.SI_SUPPORTEDTHUMBNAIL +ORDIMG_PKG. +ORDIMG_PKG.APPLYWATERMARK +ORDIMG_PKG.BUILDXMLATTRIBUTES +ORDIMG_PKG.BUILDXMLDOC +ORDIMG_PKG.CHECKGETMETAARGS +ORDIMG_PKG.CHECKPROPERTIES +ORDIMG_PKG.CHECKPUTMETAARGS +ORDIMG_PKG.COPY +ORDIMG_PKG.COPYCONTENT +ORDIMG_PKG.FREETEMPLOB +ORDIMG_PKG.GETDICOMMETADATA +ORDIMG_PKG.GETHEADERLESSINFO +ORDIMG_PKG.GETIMAGEPROPERTIES +ORDIMG_PKG.GETMETADATA +ORDIMG_PKG.IMAGECONVERT +ORDIMG_PKG.IMPORT +ORDIMG_PKG.IMPORTFROM +ORDIMG_PKG.LARGEIMAGECONVERT +ORDIMG_PKG.ORDIMGB_APPLYWATERMARK +ORDIMG_PKG.ORDIMGB_PROCESS +ORDIMG_PKG.ORDIMGB_SETPROPERTIES +ORDIMG_PKG.ORDIMGF_APPLYWATERMARK +ORDIMG_PKG.ORDIMGF_PROCESSCOPY +ORDIMG_PKG.ORDIMGF_SETPROPERTIES +ORDIMG_PKG.ORDIMG_HEADERLESSSETPROPERTIES +ORDIMG_PKG.PACKMETADATAVECTOR +ORDIMG_PKG.PROCESS +ORDIMG_PKG.PROCESSCOPY +ORDIMG_PKG.PUTMETADATA +ORDIMG_PKG.SETDEBUGLEVEL +ORDIMG_PKG.SETPROPERTIES +ORDINAL +ORDPLSGWYUTIL. +ORDPLSGWYUTIL.CACHE_IS_VALID +ORDPLSGWYUTIL.RESOURCE_NOT_FOUND +ORDPLSGWYUTIL.SET_LAST_MODIFIED +ORDSOURCE.CLEARLOCAL +ORDSOURCE.CLOSE +ORDSOURCE.DELETELOCALCONTENT +ORDSOURCE.EXPORT +ORDSOURCE.GETBFILE +ORDSOURCE.GETCONTENTINTEMPLOB +ORDSOURCE.GETCONTENTLENGTH +ORDSOURCE.GETLOCALCONTENT +ORDSOURCE.GETSOURCEADDRESS +ORDSOURCE.GETSOURCEINFORMATION +ORDSOURCE.GETSOURCELOCATION +ORDSOURCE.GETSOURCENAME +ORDSOURCE.GETSOURCETYPE +ORDSOURCE.GETUPDATETIME +ORDSOURCE.IMPORT +ORDSOURCE.IMPORTFROM +ORDSOURCE.ISLOCAL +ORDSOURCE.OPEN +ORDSOURCE.PROCESSCOMMAND +ORDSOURCE.READ +ORDSOURCE.SETLOCAL +ORDSOURCE.SETSOURCEINFORMATION +ORDSOURCE.SETUPDATETIME +ORDSOURCE.TRIM +ORDSOURCE.WRITE +ORDSOURCEEXCEPTIONS. +ORDUTIL. +ORDUTIL.GETAUDIOPKGNAME +ORDUTIL.GETDICOMVALIDATION +ORDUTIL.GETDOCPKGNAME +ORDUTIL.GETSOURCEPKGNAME +ORDUTIL.GETVIDEOPKGNAME +ORDUTIL.SETDICOMVALIDATION +ORDUTIL_PRV. +ORDUTIL_PRV.RECORDFEATUREUSAGE +ORDVIDEO.APPENDTOCOMMENTS +ORDVIDEO.CHECKPROPERTIES +ORDVIDEO.CLEARLOCAL +ORDVIDEO.CLOSESOURCE +ORDVIDEO.COMPARECOMMENTS +ORDVIDEO.COPYCOMMENTSOUT +ORDVIDEO.DELETECOMMENTS +ORDVIDEO.DELETECONTENT +ORDVIDEO.ERASEFROMCOMMENTS +ORDVIDEO.EXPORT +ORDVIDEO.GETALLATTRIBUTES +ORDVIDEO.GETATTRIBUTE +ORDVIDEO.GETBFILE +ORDVIDEO.GETBITRATE +ORDVIDEO.GETCOMMENTLENGTH +ORDVIDEO.GETCOMPRESSIONTYPE +ORDVIDEO.GETCONTENT +ORDVIDEO.GETCONTENTINLOB +ORDVIDEO.GETCONTENTLENGTH +ORDVIDEO.GETDESCRIPTION +ORDVIDEO.GETFORMAT +ORDVIDEO.GETFRAMERATE +ORDVIDEO.GETFRAMERESOLUTION +ORDVIDEO.GETFRAMESIZE +ORDVIDEO.GETMIMETYPE +ORDVIDEO.GETNUMBEROFCOLORS +ORDVIDEO.GETNUMBEROFFRAMES +ORDVIDEO.GETPROPERTIES +ORDVIDEO.GETSOURCE +ORDVIDEO.GETSOURCELOCATION +ORDVIDEO.GETSOURCENAME +ORDVIDEO.GETSOURCEOBJECT +ORDVIDEO.GETSOURCETYPE +ORDVIDEO.GETUPDATETIME +ORDVIDEO.GETVIDEODURATION +ORDVIDEO.IMPORT +ORDVIDEO.IMPORTFROM +ORDVIDEO.INIT +ORDVIDEO.ISLOCAL +ORDVIDEO.LOADCOMMENTSFROMFILE +ORDVIDEO.LOCATEINCOMMENTS +ORDVIDEO.OPENSOURCE +ORDVIDEO.ORDVIDEO +ORDVIDEO.PROCESSSOURCECOMMAND +ORDVIDEO.PROCESSVIDEOCOMMAND +ORDVIDEO.READFROMCOMMENTS +ORDVIDEO.READFROMSOURCE +ORDVIDEO.SETBITRATE +ORDVIDEO.SETCOMPRESSIONTYPE +ORDVIDEO.SETDESCRIPTION +ORDVIDEO.SETFORMAT +ORDVIDEO.SETFRAMERATE +ORDVIDEO.SETFRAMERESOLUTION +ORDVIDEO.SETFRAMESIZE +ORDVIDEO.SETKNOWNATTRIBUTES +ORDVIDEO.SETLOCAL +ORDVIDEO.SETMIMETYPE +ORDVIDEO.SETNUMBEROFCOLORS +ORDVIDEO.SETNUMBEROFFRAMES +ORDVIDEO.SETPROPERTIES +ORDVIDEO.SETSOURCE +ORDVIDEO.SETUPDATETIME +ORDVIDEO.SETVIDEODURATION +ORDVIDEO.TRIMCOMMENTS +ORDVIDEO.TRIMSOURCE +ORDVIDEO.WRITETOCOMMENTS +ORDVIDEO.WRITETOSOURCE +ORDVIDEOEXCEPTIONS. +ORDVIDEO_PKG. +ORDVIDEO_PKG.CHECKPROPERTIES +ORDVIDEO_PKG.GETALLATTRIBUTES +ORDVIDEO_PKG.GETATTRIBUTE +ORDVIDEO_PKG.GETATTRIBUTES +ORDVIDEO_PKG.GETATTRIBUTESFROMLOCAL +ORDVIDEO_PKG.GETSUPPORTEDMIMETYPE +ORDVIDEO_PKG.PROCESSCOMMAND +ORDVIDEO_PKG.SETOUTPUTTONULL +ORDVIDEO_PKG.SETOUTPUTTOSTATUS +ORDVIDEO_PKG.SETOUTPUTTOTRACE +ORDVIDEO_PKG.SETOUTPUTTOVERBOSE +ORDVIDEO_PKG.SETPROPERTIES +ORDX_DEFAULT_AUDIO. +ORDX_DEFAULT_AUDIO.CHECKPROPERTIES +ORDX_DEFAULT_AUDIO.GETALLATTRIBUTES +ORDX_DEFAULT_AUDIO.GETATTRIBUTE +ORDX_DEFAULT_AUDIO.PROCESSCOMMAND +ORDX_DEFAULT_AUDIO.SETPROPERTIES +ORDX_DEFAULT_DOC. +ORDX_DEFAULT_DOC.SETPROPERTIES +ORDX_DEFAULT_VIDEO. +ORDX_DEFAULT_VIDEO.CHECKPROPERTIES +ORDX_DEFAULT_VIDEO.GETALLATTRIBUTES +ORDX_DEFAULT_VIDEO.GETATTRIBUTE +ORDX_DEFAULT_VIDEO.PROCESSCOMMAND +ORDX_DEFAULT_VIDEO.SETPROPERTIES +ORDX_FILE_SOURCE. +ORDX_FILE_SOURCE.CLOSE +ORDX_FILE_SOURCE.EXPORT +ORDX_FILE_SOURCE.GETCONTENTLENGTH +ORDX_FILE_SOURCE.GETSOURCEADDRESS +ORDX_FILE_SOURCE.IMPORT +ORDX_FILE_SOURCE.IMPORTFROM +ORDX_FILE_SOURCE.OPEN +ORDX_FILE_SOURCE.PROCESSCOMMAND +ORDX_FILE_SOURCE.READ +ORDX_FILE_SOURCE.TRIM +ORDX_FILE_SOURCE.WRITE +ORDX_HTTP_SOURCE. +ORDX_HTTP_SOURCE.CLOSE +ORDX_HTTP_SOURCE.EXPORT +ORDX_HTTP_SOURCE.GETCONTENTLENGTH +ORDX_HTTP_SOURCE.GETSOURCEADDRESS +ORDX_HTTP_SOURCE.IMPORT +ORDX_HTTP_SOURCE.IMPORTFROM +ORDX_HTTP_SOURCE.OPEN +ORDX_HTTP_SOURCE.PROCESSCOMMAND +ORDX_HTTP_SOURCE.READ +ORDX_HTTP_SOURCE.TRIM +ORDX_HTTP_SOURCE.WRITE +ORD_ADMIN. +ORD_ADMIN.MOVE_ORDIM_TBLSPC +ORD_AUDIO. +ORD_AUDIO.EXPORT +ORD_AUDIO.GETPROPERTIES +ORD_AUDIO.IMPORTFROM +ORD_DATASOURCE_PKG. +ORD_DATASOURCE_PKG.EXPORT +ORD_DATASOURCE_PKG.IMPORTFROM +ORD_DICOM. +ORD_DICOM.CREATEDICOMIMAGE +ORD_DICOM.EXPORT +ORD_DICOM.EXTRACTMETADATA +ORD_DICOM.GETDICTIONARYTAG +ORD_DICOM.GETMAPPINGXPATH +ORD_DICOM.IMPORTFROM +ORD_DICOM.ISANONYMOUS +ORD_DICOM.ISCONFORMANCEVALID +ORD_DICOM.MAKEANONYMOUS +ORD_DICOM.PROCESSCOPY +ORD_DICOM.SETDATAMODEL +ORD_DICOM.WRITEMETADATA +ORD_DICOM_ADMIN. +ORD_DICOM_ADMIN.DELETEDOCUMENT +ORD_DICOM_ADMIN.EDITDATAMODEL +ORD_DICOM_ADMIN.EXPORTDOCUMENT +ORD_DICOM_ADMIN.GENERATETAGLISTDOCUMENT +ORD_DICOM_ADMIN.GETDOCUMENTCONTENT +ORD_DICOM_ADMIN.INSERTDOCUMENT +ORD_DICOM_ADMIN.PUBLISHDATAMODEL +ORD_DICOM_ADMIN.ROLLBACKDATAMODEL +ORD_DICOM_ADMIN_PRV. +ORD_DICOM_ADMIN_PRV.CANONICALCOLUMNNAME +ORD_DICOM_ADMIN_PRV.DELETEANYDOC +ORD_DICOM_ADMIN_PRV.DELETEDOCUMENT +ORD_DICOM_ADMIN_PRV.EDITDATAMODEL +ORD_DICOM_ADMIN_PRV.GENERATETAGLISTDOCUMENT +ORD_DICOM_ADMIN_PRV.GETDICTIONARYTAG +ORD_DICOM_ADMIN_PRV.GETDOCUMENTCONTENT +ORD_DICOM_ADMIN_PRV.GETMAPPINGXPATH +ORD_DICOM_ADMIN_PRV.GETNEWLOCK +ORD_DICOM_ADMIN_PRV.GETNEXTDICOMVERSIONNUMBER +ORD_DICOM_ADMIN_PRV.GETPREFERENCEVALUE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLADMINDOCSTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLATTRIBUTETABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLDICOMTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLMETADATATABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLPREVIEWTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLSPECIALTAGTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLVERSIONTABLE +ORD_DICOM_ADMIN_PRV.GETPROTOCOLWADOTABLE +ORD_DICOM_ADMIN_PRV.HASDOCUMENT +ORD_DICOM_ADMIN_PRV.INSERTDOCUMENT +ORD_DICOM_ADMIN_PRV.ISCONSTRAINT +ORD_DICOM_ADMIN_PRV.ISCOVEREDBYSTL +ORD_DICOM_ADMIN_PRV.ISDATAMODELLOADED +ORD_DICOM_ADMIN_PRV.ISDOCUMENT +ORD_DICOM_ADMIN_PRV.ISOWNLOCK +ORD_DICOM_ADMIN_PRV.PUBLISHDATAMODEL +ORD_DICOM_ADMIN_PRV.RELEASEDATAMODELLOCK +ORD_DICOM_ADMIN_PRV.ROLLBACKDATAMODEL +ORD_DICOM_ADMIN_PRV.SETDATAMODEL +ORD_DICOM_CT. +ORD_DICOM_CT.DELETECT +ORD_DICOM_CT.INSERTCT +ORD_DICOM_CT.UPDATECT +ORD_DICOM_PKG. +ORD_DICOM_PKG.CHECKFEATUREENABLED +ORD_DICOM_PKG.CREATEDICOMIMAGE +ORD_DICOM_PKG.GETDICOMPROPERTIES +ORD_DICOM_PKG.HASDOCUMENT +ORD_DICOM_PKG.ISANONYMOUS +ORD_DICOM_PKG.ISCONFORMANCEVALID +ORD_DICOM_PKG.ISCONSTRAINT +ORD_DICOM_PKG.ISDOCUMENT +ORD_DICOM_PKG.ISIMAGELOCAL +ORD_DICOM_PKG.MAKEANONYMOUS +ORD_DICOM_PKG.PROCESSCOPY +ORD_DICOM_PKG.WRITEMETADATA +ORD_DOC. +ORD_DOC.EXPORT +ORD_DOC.GETPROPERTIES +ORD_DOC.IMPORTFROM +ORD_IMAGE. +ORD_IMAGE.APPLYWATERMARK +ORD_IMAGE.CONVERT +ORD_IMAGE.CROP +ORD_IMAGE.EXPORT +ORD_IMAGE.FLIP +ORD_IMAGE.GETMETADATA +ORD_IMAGE.GETPROPERTIES +ORD_IMAGE.GRAYSCALE +ORD_IMAGE.IMPORTFROM +ORD_IMAGE.MIRROR +ORD_IMAGE.PAGE +ORD_IMAGE.PROCESS +ORD_IMAGE.PROCESSCOPY +ORD_IMAGE.PUTMETADATA +ORD_IMAGE.ROTATE +ORD_IMAGE.SCALE +ORD_IMAGE.THUMBNAIL +ORD_VIDEO. +ORD_VIDEO.EXPORT +ORD_VIDEO.GETPROPERTIES +ORD_VIDEO.IMPORTFROM +ORGANIZATION_ID +ORIGIN +ORIGINAL +ORIGINAL_CAPTURE_NAME +ORIGINAL_CAPTURE_STATUS +ORIGINAL_INPRATE_BYTES +ORIGINAL_INPRATE_BYTES_DISPLAY +ORIGINAL_INPUT_BYTES +ORIGINAL_INPUT_BYTES_DISPLAY +ORIGINAL_NAME +ORIGINAL_PRIMARY +ORIGINAL_PROPAGATION_NAME +ORIGINAL_QUEUE_NAME +ORIGINAL_QUEUE_OWNER +ORIGINAL_RULE_CONDITION +ORIGINAL_SOURCE_QUEUE_NAME +ORIGINAL_SOURCE_QUEUE_OWNER +ORIGINAL_SQL_TXT. +ORIGINAL_STREAMS_NAME +ORIGINAL_TABLE_NAME +ORIGINAL_XSTREAM_NAME +ORIGINATING_TIMESTAMP +ORIGIN_CON_ID +ORIG_CONSUMER_GROUP_ID +ORPHANED_ENTRIES +OR_EXPAND +OSB_ALLOCATED +OSID +OSPID +OSSTAT_ID +OSUSER +OS_GRANTED +OS_HOST +OS_ID +OS_MB +OS_NAME +OS_PRIVILEGE +OS_PROCESS +OS_PROCESS_ID +OS_SUBDIR +OS_TERMINAL +OS_USER +OS_USERNAME +OS_USER_NAME +OTHER +OTHERSTAT_10_ID +OTHERSTAT_10_TYPE +OTHERSTAT_10_VALUE +OTHERSTAT_1_ID +OTHERSTAT_1_TYPE +OTHERSTAT_1_VALUE +OTHERSTAT_2_ID +OTHERSTAT_2_TYPE +OTHERSTAT_2_VALUE +OTHERSTAT_3_ID +OTHERSTAT_3_TYPE +OTHERSTAT_3_VALUE +OTHERSTAT_4_ID +OTHERSTAT_4_TYPE +OTHERSTAT_4_VALUE +OTHERSTAT_5_ID +OTHERSTAT_5_TYPE +OTHERSTAT_5_VALUE +OTHERSTAT_6_ID +OTHERSTAT_6_TYPE +OTHERSTAT_6_VALUE +OTHERSTAT_7_ID +OTHERSTAT_7_TYPE +OTHERSTAT_7_VALUE +OTHERSTAT_8_ID +OTHERSTAT_8_TYPE +OTHERSTAT_8_VALUE +OTHERSTAT_9_ID +OTHERSTAT_9_TYPE +OTHERSTAT_9_VALUE +OTHERSTAT_GROUP_ID +OTHER_REQUESTS +OTHER_SCHEMAS +OTHER_TAG +OTHER_XML +OUTBOUND_DB_LINK_NAME +OUTBOUND_DB_LINK_OWNER +OUTER +OUTER_JOIN_TO_ANTI +OUTER_JOIN_TO_INNER +OUTER_TABLE_COLUMN +OUTER_TABLE_NAME +OUTER_TABLE_OWNER +OUTLIER_THRESHOLD +OUTLIER_TIMESTAMP +OUTLIER_WAIT_TIME +OUTLINE +OUTLINE_CATEGORY +OUTLINE_LEAF +OUTLINE_MISMATCH +OUTLINE_SID +OUTLN_PKG. +OUTLN_PKG.CLEAR_USED +OUTLN_PKG.CREATE_OUTLINE +OUTLN_PKG.DROP_BY_CAT +OUTLN_PKG.DROP_COLLISION +OUTLN_PKG.DROP_COLLISION_EXPACT +OUTLN_PKG.DROP_EXTRAS +OUTLN_PKG.DROP_EXTRAS_EXPACT +OUTLN_PKG.DROP_UNREFD_HINTS +OUTLN_PKG.DROP_UNREFD_HINTS_EXPACT +OUTLN_PKG.DROP_UNUSED +OUTLN_PKG.EXACT_TEXT_SIGNATURES +OUTLN_PKG.REFRESH_OUTLINE_CACHE +OUTLN_PKG.REFRESH_OUTLINE_CACHE_EXPACT +OUTLN_PKG.UPDATE_BY_CAT +OUTLN_PKG.UPDATE_SIGNATURES +OUTLN_PKG_INTERNAL. +OUTLN_PKG_INTERNAL.I_CREATE_OUTLINE +OUTLN_PKG_INTERNAL.I_DROP_BY_CAT +OUTLN_PKG_INTERNAL.I_DROP_COLLISION +OUTLN_PKG_INTERNAL.I_DROP_EXTRAS +OUTLN_PKG_INTERNAL.I_DROP_UNREFD_HINTS +OUTLN_PKG_INTERNAL.I_DROP_UNUSED +OUTLN_PKG_INTERNAL.I_UPDATE_BY_CAT +OUTPUT +OUTPUT_BYTES +OUTPUT_BYTES_DISPLAY +OUTPUT_BYTES_PER_SEC +OUTPUT_BYTES_PER_SEC_DISPLAY +OUTPUT_DEVICE_TYPE +OUTPUT_FORMAT +OUTPUT_RATE_BYTES +OUTPUT_RATE_BYTES_DISPLAY +OUTPUT_ROWS +OUTSIDE_TABLE_NAME +OUTSIDE_TABLE_SCHEMA +OUT_ARGUMENT +OUT_NET +OUT_OF_PLACE +OVERFLOW_NOMOVE +OVERHEAD_MICROSEC +OVERLAP_TIME_MISMATCH +OVERLOAD +OVERRIDE_SOLVE_SPEC +OVERRIDING +OVERSPILLED_MSGS +OWA. +OWA.GET_LINE +OWA.GET_PAGE +OWA.GET_PAGE_CHARSET_CONVERT +OWA.GET_PAGE_RAW +OWA.INITIALIZE +OWA.INIT_CGI_ENV +OWA.RESET_GET_PAGE +OWA.SET_PASSWORD +OWA.SET_TRANSFER_MODE +OWA.SET_USER_ID +OWA_CACHE. +OWA_CACHE.DISABLE +OWA_CACHE.GET_ETAG +OWA_CACHE.GET_LEVEL +OWA_CACHE.INIT +OWA_CACHE.SET_CACHE +OWA_CACHE.SET_EXPIRES +OWA_CACHE.SET_NOT_MODIFIED +OWA_CACHE.SET_SURROGATE_CONTROL +OWA_COOKIE. +OWA_COOKIE.GET +OWA_COOKIE.GET_ALL +OWA_COOKIE.INIT +OWA_COOKIE.REMOVE +OWA_COOKIE.SEND +OWA_CUSTOM. +OWA_CUSTOM.AUTHORIZE +OWA_CX. +OWA_IMAGE. +OWA_IMAGE.GET_X +OWA_IMAGE.GET_Y +OWA_MATCH. +OWA_MATCH.MATCH_PATTERN +OWA_OPT_LOCK. +OWA_OPT_LOCK.CHECKSUM +OWA_OPT_LOCK.GET_ROWID +OWA_OPT_LOCK.STORE_VALUES +OWA_OPT_LOCK.VERIFY_VALUES +OWA_PATTERN. +OWA_PATTERN.AMATCH +OWA_PATTERN.CHANGE +OWA_PATTERN.GETPAT +OWA_PATTERN.MATCH +OWA_SEC. +OWA_SEC.GET_CLIENT_HOSTNAME +OWA_SEC.GET_CLIENT_IP +OWA_SEC.GET_PASSWORD +OWA_SEC.GET_USER_ID +OWA_SEC.SET_AUTHORIZATION +OWA_SEC.SET_PROTECTION_REALM +OWA_TEXT. +OWA_TEXT.ADD2MULTI +OWA_TEXT.NEW_MULTI +OWA_TEXT.NEW_ROW_LIST +OWA_TEXT.PRINT_MULTI +OWA_TEXT.PRINT_ROW_LIST +OWA_TEXT.STREAM2MULTI +OWA_UTIL. +OWA_UTIL.BIND_VARIABLES +OWA_UTIL.CALENDARPRINT +OWA_UTIL.CELLSPRINT +OWA_UTIL.CHOOSE_DATE +OWA_UTIL.COMMA_TO_IDENT_ARR +OWA_UTIL.DESCRIBE_COLS +OWA_UTIL.GET_CGI_ENV +OWA_UTIL.GET_OWA_SERVICE_PATH +OWA_UTIL.GET_PROCEDURE +OWA_UTIL.GET_VERSION +OWA_UTIL.HTTP_HEADER_CLOSE +OWA_UTIL.ITE +OWA_UTIL.LISTPRINT +OWA_UTIL.MIME_HEADER +OWA_UTIL.NAME_RESOLVE +OWA_UTIL.PATH_TO_ME +OWA_UTIL.PRINT_CGI_ENV +OWA_UTIL.PRINT_VERSION +OWA_UTIL.REDIRECT_URL +OWA_UTIL.RESOLVE_TABLE +OWA_UTIL.SHOWPAGE +OWA_UTIL.SHOWSOURCE +OWA_UTIL.SHOW_QUERY_COLUMNS +OWA_UTIL.SIGNATURE +OWA_UTIL.STATUS_LINE +OWA_UTIL.TABLECAPTION +OWA_UTIL.TABLECLOSE +OWA_UTIL.TABLEDATA +OWA_UTIL.TABLEHEADER +OWA_UTIL.TABLEHEADERROWCLOSE +OWA_UTIL.TABLEHEADERROWOPEN +OWA_UTIL.TABLENODATA +OWA_UTIL.TABLEOPEN +OWA_UTIL.TABLEPRINT +OWA_UTIL.TABLEROWCLOSE +OWA_UTIL.TABLEROWOPEN +OWA_UTIL.TODATE +OWA_UTIL.VALIDATE_ARG +OWA_UTIL.WHO_CALLED_ME +OWM_ASSERT_PKG. +OWM_ASSERT_PKG.ASSERT +OWM_ASSERT_PKG.ASSERT_WS +OWM_ASSERT_PKG.ASSERT_WS_NEQ +OWM_ASSERT_PKG.NOOP +OWM_ASSERT_PKG.VERIFYCALLSTACK +OWM_BULK_LOAD_PKG. +OWM_BULK_LOAD_PKG.BEGINBULKLOADING +OWM_BULK_LOAD_PKG.CHECKFORBULKLOADING +OWM_BULK_LOAD_PKG.ENDBULKLOADING +OWM_BULK_LOAD_PKG.EXISTSTABLE +OWM_BULK_LOAD_PKG.FIXOWMCOLSWHIST +OWM_BULK_LOAD_PKG.ISBEINGBULKLOADED +OWM_BULK_LOAD_PKG.PURGETABLE +OWM_BULK_LOAD_PKG.ROLLBACKBULKLOADING +OWM_BULK_LOAD_PKG.SETLTLOCKINFO +OWM_CPKG_PKG. +OWM_CPKG_PKG.CREATEPACKAGE +OWM_DDL_PKG. +OWM_DDL_PKG.BEGINDDL +OWM_DDL_PKG.COMMITDDL +OWM_DDL_PKG.COMPAREINDEXPROPERTIES +OWM_DDL_PKG.CREATERICVIEWS +OWM_DDL_PKG.DROPVIEWS +OWM_DDL_PKG.GETORIGINALDDL +OWM_DDL_PKG.GETUCDETAILS +OWM_DDL_PKG.HAVEIDENTICALCOLUMNS +OWM_DDL_PKG.RECREATEINSTOFTRIGS +OWM_DDL_PKG.RECREATEVIEWS +OWM_DDL_PKG.ROLLBACKDDL +OWM_DML_PKG. +OWM_DML_PKG.WM$COLUMN_PROPS$F +OWM_DML_PKG.WM$CONSTRAINTS_TABLE$F +OWM_DML_PKG.WM$ENV_VARS$F +OWM_DML_PKG.WM$EVENTS_INFO$F +OWM_DML_PKG.WM$HINT_TABLE$F +OWM_DML_PKG.WM$MP_GRAPH_WORKSPACES_TABLE$F +OWM_DML_PKG.WM$MP_PARENT_WORKSPACES_T$F +OWM_DML_PKG.WM$RESOLVE_WORKSPACES_TABLE$F +OWM_DML_PKG.WM$RIC_TABLE$F +OWM_DML_PKG.WM$SYSPARAM_ALL_VALUES$F +OWM_DML_PKG.WM$UDTRIG_DISPATCH_PROCS$F +OWM_DML_PKG.WM$UDTRIG_INFO$F +OWM_DML_PKG.WM$VERSIONED_TABLES$F +OWM_DML_PKG.WM$VT_ERRORS_TABLE$F +OWM_DML_PKG.WM$WORKSPACES_TABLE$F +OWM_DML_PKG.WM$WORKSPACE_PRIV_TABLE$F +OWM_DML_PKG.WM$WORKSPACE_SAVEPOINTS_T$F +OWM_DYNSQL_ACCESS. +OWM_DYNSQL_ACCESS.ALLOWDDLOPERATION +OWM_DYNSQL_ACCESS.ARETHERECONFLICTS +OWM_DYNSQL_ACCESS.ARETHEREDIFFS +OWM_DYNSQL_ACCESS.CHECKWHERECLAUSE +OWM_DYNSQL_ACCESS.CLEANUPMETADATABYUSER +OWM_DYNSQL_ACCESS.CLEANUPSTALEMETADATA +OWM_DYNSQL_ACCESS.COMPAREINDEXPROPERTIES +OWM_DYNSQL_ACCESS.COMPUTERICWEIGHT +OWM_DYNSQL_ACCESS.CREATEBASEVIEW +OWM_DYNSQL_ACCESS.CREATECONFLICTVIEW +OWM_DYNSQL_ACCESS.CREATECONSVIEW +OWM_DYNSQL_ACCESS.CREATEDIFFVIEW +OWM_DYNSQL_ACCESS.CREATEHISTORYVIEW +OWM_DYNSQL_ACCESS.CREATEINLISTFROMQUERY +OWM_DYNSQL_ACCESS.CREATELCKTABLE +OWM_DYNSQL_ACCESS.CREATELOCKVIEW +OWM_DYNSQL_ACCESS.CREATEMWVIEW +OWM_DYNSQL_ACCESS.CREATENESTEDTABLEBASEVIEW +OWM_DYNSQL_ACCESS.CREATENESTEDTABLECONSVIEW +OWM_DYNSQL_ACCESS.CREATEPACKAGE +OWM_DYNSQL_ACCESS.CREATERICLOCKINGTABLES +OWM_DYNSQL_ACCESS.CREATERICVIEWS +OWM_DYNSQL_ACCESS.CREATETOPVIEW +OWM_DYNSQL_ACCESS.CREATETRIGGERS +OWM_DYNSQL_ACCESS.CREATEUNIONBASEVIEW +OWM_DYNSQL_ACCESS.CREATEVTTABLE +OWM_DYNSQL_ACCESS.DROPRICLOCKINGTABLES +OWM_DYNSQL_ACCESS.EXECSQLFROMCLOB +OWM_DYNSQL_ACCESS.EXISTCONFLICTS +OWM_DYNSQL_ACCESS.FIXOWMCOLSWHIST +OWM_DYNSQL_ACCESS.GETBATCHWHERECLAUSES +OWM_DYNSQL_ACCESS.GETDISPATCHERINFO +OWM_DYNSQL_ACCESS.GETNCA +OWM_DYNSQL_ACCESS.GETRICINSTEADOFTRIGSTRS +OWM_DYNSQL_ACCESS.GETRICLOCKS +OWM_DYNSQL_ACCESS.GETRICSESSLOCKSFORTABLE +OWM_DYNSQL_ACCESS.GETSPVERSION +OWM_DYNSQL_ACCESS.GETSTATELOCKID +OWM_DYNSQL_ACCESS.GETSYSTEMPARAMETER +OWM_DYNSQL_ACCESS.GETUCDETAILS +OWM_DYNSQL_ACCESS.GETUDHINT +OWM_DYNSQL_ACCESS.GETVARIABLE_B +OWM_DYNSQL_ACCESS.GETVARIABLE_N +OWM_DYNSQL_ACCESS.GET_LOCK_TABLE +OWM_DYNSQL_ACCESS.HAVEIDENTICALCOLUMNS +OWM_DYNSQL_ACCESS.IMPORT +OWM_DYNSQL_ACCESS.INITIALIZERICLOCKINGVARS +OWM_DYNSQL_ACCESS.ISMODIFIEDINSUBTREE +OWM_DYNSQL_ACCESS.LOCKRICROWS +OWM_DYNSQL_ACCESS.NO_VM_ALTER_PROC +OWM_DYNSQL_ACCESS.NO_VM_CREATE_PROC +OWM_DYNSQL_ACCESS.NO_VM_DROP_PROC +OWM_DYNSQL_ACCESS.NULL_TABLE_FUNC +OWM_DYNSQL_ACCESS.OPERCOUNT +OWM_DYNSQL_ACCESS.PREFIXSTR +OWM_DYNSQL_ACCESS.RECREATEINSTOFTRIGS +OWM_DYNSQL_ACCESS.RECREATEPTAFTERTRIGS +OWM_DYNSQL_ACCESS.RECREATEVIEWS +OWM_DYNSQL_ACCESS.REGENUDTRIGDISPATCHER +OWM_DYNSQL_ACCESS.REGENUDTRIGPROCS +OWM_DYNSQL_ACCESS.RELEASELOCK +OWM_DYNSQL_ACCESS.RELRICSESSLOCKSFORTABLE +OWM_DYNSQL_ACCESS.REMOVEDOUBLEQUOTESINUSERNAME +OWM_DYNSQL_ACCESS.RETURNCONSTRAINTVIOLATIONS +OWM_DYNSQL_ACCESS.RIC_ENABLE_VERSIONING_INTERNAL +OWM_DYNSQL_ACCESS.SETIMPORTVARS +OWM_DYNSQL_ACCESS.SETLTLOCKINFO +OWM_DYNSQL_ACCESS.TRF_UDTRGS_ON_VER_ENABLE +OWM_DYNSQL_ACCESS.UNSETIMPORTVARS +OWM_DYNSQL_ACCESS.WMFLAGENCODE +OWM_IEXP_PKG. +OWM_IEXP_PKG.EXPORT +OWM_IEXP_PKG.IMPORT +OWM_IEXP_PKG.WMFLAGENCODE +OWM_MIG_PKG. +OWM_MIG_PKG.ALLLWDISABLEVERSIONING +OWM_MIG_PKG.ALLLWENABLEVERSIONING +OWM_MIG_PKG.ENABLEVERSIONTOPOINDEXTABLES +OWM_MIG_PKG.FIXAUXPKCONSTRAINT +OWM_MIG_PKG.FIXMETADATA +OWM_MIG_PKG.FIXPKCONSTRAINT +OWM_MIG_PKG.FIXWMMETADATA +OWM_MIG_PKG.MODIFYSYSTEMTRIGGERS +OWM_MIG_PKG.MOVEWMMETADATA +OWM_MIG_PKG.RECOMPILEALLOBJECTS +OWM_MIG_PKG.RECOMPILETABLEOBJECTS +OWM_MIG_PKG.RECOVERMIGRATINGTABLE +OWM_MIG_PKG.RECREATEPTUPDDELTRIGGERS +OWM_MP_PKG. +OWM_MP_PKG.ADDASPARENTWORKSPACE +OWM_MP_PKG.CREATEIMPLICITSPINGRAPH +OWM_MP_PKG.EXISTSMPWORKSPACE +OWM_MP_PKG.GETGRAPHNODES +OWM_MP_PKG.GETNCA +OWM_MP_PKG.ISMPWORKSPACE +OWM_MP_PKG.REMOVEASPARENTWORKSPACE +OWM_MP_PKG.SETMPPARAMETER +OWM_VSCRIPT_PKG. +OWM_VSCRIPT_PKG.STARTQUEUE +OWM_VSCRIPT_PKG.STOPQUEUE +OWM_VSCRIPT_PKG.UPGRADEOWM +OWM_VSCRIPT_PKG.WM$ADDRECORD +OWM_VSCRIPT_PKG.WM$CHECKEXISTINGRECORD +OWM_VSCRIPT_PKG.WM$CONVERTVERSIONSTR +OWM_VSCRIPT_PKG.WM$EXECRECORDS +OWM_VSCRIPT_PKG.WM$GETDBPARAMETER +OWM_VSCRIPT_PKG.WM$HASCOLUMN +OWM_VSCRIPT_PKG.WM$INSTALLPATCH +OWM_VSCRIPT_PKG.WM$OBJECTEXISTS +OWM_VSCRIPT_PKG.WM$UTLRP +OWM_VT_PKG. +OWM_VT_PKG.WM_CONTAINS +OWM_VT_PKG.WM_EQUALS +OWM_VT_PKG.WM_GREATERTHAN +OWM_VT_PKG.WM_INTERSECTION +OWM_VT_PKG.WM_LDIFF +OWM_VT_PKG.WM_LESSTHAN +OWM_VT_PKG.WM_MEETS +OWM_VT_PKG.WM_OVERLAPS +OWM_VT_PKG.WM_RDIFF +OWNED +OWNER +OWNER# +OWNERID +OWNER_BYPASS +OWNER_DBID +OWNER_DBNAME +OWNER_ID +OWNER_INCARNATION +OWNER_INSTANCE +OWNER_INSTANCE_ID +OWNER_INSTANCE_NAME +OWNER_INSTANCE_NUMBER +OWNER_INSTANCE_SERIAL +OWNER_MAP_DIMENSION_TYPE +OWNER_MAP_HIERARCHY_NAME +OWNER_MAP_LEVEL_NAME +OWNER_MAP_NAME +OWNER_NAME +OWNER_NODE +OWNER_NUMBER +OWNER_PDBGUID +OWNER_PDBID +OWNER_PDBNAME +OWNER_PDBUID +OWNING_OBJECT_ID +OWNING_TYPE +OWNTIME +P1RAW +P1TEXT +P1_TEXT +P2RAW +P2TEXT +P2_TEXT +P3RAW +P3TEXT +P3_TEXT +PACKAGE +PACKAGE_CNT +PACKAGE_ID +PACKAGE_NAME +PACKAGE_OWNER +PACKETS_RECEIVED +PACKETS_SENT +PADDR +PAGESPACES +PARADDR +PARALLEL +PARALLELISM +PARALLEL_DEGREE_LIMIT_MTH +PARALLEL_DEGREE_LIMIT_P1 +PARALLEL_EXECUTION_MANAGED +PARALLEL_INDEX +PARALLEL_LEVEL +PARALLEL_QUEUE_TIMEOUT +PARALLEL_SERVERS_ACTIVE +PARALLEL_SERVERS_LIMIT +PARALLEL_SERVERS_TOTAL +PARALLEL_SERVER_LIMIT +PARALLEL_STMT_CRITICAL +PARALLEL_TARGET_PERCENTAGE +PARAMETER +PARAMETER1 +PARAMETER2 +PARAMETER3 +PARAMETERS +PARAMETER_FLAGS +PARAMETER_HASH +PARAMETER_ID +PARAMETER_NAME +PARAMETER_NAME. +PARAMETER_TYPE +PARAMETER_TYPE# +PARAMETER_VALUE +PARAMETER_VALUE. +PARAM_INDEX +PARAM_MODE +PARAM_NAME +PARAM_NO +PARAM_TYPE_MOD +PARAM_TYPE_NAME +PARAM_TYPE_OWNER +PARAM_VALUE +PARENT +PARENTSEQ +PARENTSLT +PARENTUSN +PARENT_ACL +PARENT_ACL_OWNER +PARENT_ATTR +PARENT_COLUMN_NAME +PARENT_DBNAME +PARENT_DBUN +PARENT_EDITION_NAME +PARENT_ELEMENT_ID +PARENT_EXPRESSION +PARENT_FILEGROUP_NAME +PARENT_FILNUM +PARENT_FILNUMINC +PARENT_HANDLE +PARENT_HEAP_DESCRIPTOR +PARENT_ID +PARENT_IDX +PARENT_INDEX +PARENT_LEVEL +PARENT_LEVEL_ID_EXPRESSION +PARENT_LEVEL_NAME +PARENT_LOCK +PARENT_NAME +PARENT_OBJECT +PARENT_OBJECT_NAME +PARENT_OBJECT_OWNER +PARENT_OBJECT_TYPE +PARENT_OWNER +PARENT_RECID +PARENT_REC_ID +PARENT_REC_IDS +PARENT_RXEC_ID +PARENT_SCAN_ID +PARENT_SCHEMA +PARENT_STAMP +PARENT_SUBSCRIBER_ID +PARENT_TABLE_COLUMN +PARENT_TABLE_NAME +PARENT_TABLE_PARTITION +PARENT_TASK_ID +PARENT_TYPE +PARENT_XID +PARENT_XIDSLT +PARENT_XIDSQN +PARENT_XIDUSN +PARITY_PERIOD +PARITY_POS +PAROBJN +PARSED_SIZE +PARSE_CALLS +PARSE_CALLS_DELTA +PARSE_CALLS_TOTAL +PARSE_TIME +PARSING_SCHEMA_ID +PARSING_SCHEMA_NAME +PARSING_USER_ID +PARTIAL_JOIN +PARTIAL_ROLLUP_PUSHDOWN +PARTICIPANT +PARTICIPATING_DATABASES +PARTITION +PARTITIONED +PARTITIONING +PARTITIONING_KEY_COUNT +PARTITIONING_TYPE +PARTITIONOBJ# +PARTITIONS_ADDED +PARTITIONS_DROPPED +PARTITION_COMPATIBLE +PARTITION_COUNT +PARTITION_DIMENSION_NAME +PARTITION_HIERARCHY_NAME +PARTITION_ID +PARTITION_LEVEL_NAME +PARTITION_NAME +PARTITION_NUMBER +PARTITION_OP +PARTITION_POS. +PARTITION_POSITION +PARTITION_SIZE +PARTITION_SPECS +PARTITION_START +PARTITION_STOP +PARTITION_TYPE +PARTNAME +PART_MIN_SCN +PART_MIN_TIME +PART_NAME +PART_NO +PART_SCN +PART_SIZE +PART_TIME +PASS +PASSWORD +PASSWORD_PROFILE +PASSWORD_REQUIRED +PASSWORD_VERSIONS +PASSW_EXPIRED +PASSW_IN_GRACE +PASSW_LOCKED +PASSW_LOCK_TIME +PASSW_LOCK_UNLIM +PATCHES +PATCH_CHECKSUM +PATCH_COMMENT +PATCH_DESCRIPTOR +PATCH_DIRECTORY +PATCH_ID +PATCH_MIN_VERSION +PATCH_NUMBER +PATCH_STATUS +PATCH_TYPE +PATCH_UID +PATH +PATH_ID +PATH_NAME +PATH_OF_CONNECT_ROLE_GRANT +PATH_TABLE_NAME +PATTERN +PATTERN_ID +PAUSE +PAUSE_BEFORE +PAUSE_TIME +PAYLOAD +PAYLOAD_CALLBACK +PAYLOAD_COLUMN_COUNT +PBREAK. +PBREAK.CLEAR_DEBUG +PBREAK.DEBUG_MESSAGE +PBREAK.DELETE_BREAKPOINT +PBREAK.DISABLE_BREAKPOINT +PBREAK.ENABLE_BREAKPOINT +PBREAK.GENERATE_TIDL +PBREAK.GET_CURRENT_EVENT +PBREAK.GET_CURRENT_INFO +PBREAK.GET_DEBUG_FLAGS +PBREAK.GET_INDEXES +PBREAK.GET_LINE_MAP +PBREAK.GET_NUMERIC_OPTION +PBREAK.GET_SCALAR +PBREAK.INTERNAL_VERSION_CHECK +PBREAK.IS_EXECUTABLE +PBREAK.PIPE_CUTTER +PBREAK.PRINT_BACKTRACE +PBREAK.PRINT_BREAKPOINTS +PBREAK.PRINT_FRAME_SOURCE +PBREAK.PRINT_SOURCE +PBREAK.READ_INTO_TABLE +PBREAK.READ_PIPE +PBREAK.READ_WORD +PBREAK.SET_BREAK_LINE +PBREAK.SET_DEBUG +PBREAK.SET_DEBUG_FLAGS +PBREAK.SET_NUMERIC_OPTION +PBREAK.SET_OER_BREAKPOINT +PBREAK.SET_VALUE +PBREAK.WRITE_PIPE +PBREAK.WRITE_REQUEST +PBREAK.WRITE_TABLE +PBRPH. +PBRPH.ATTACH +PBRPH.CONTINUE +PBRPH.DISPLAY_FRAME +PBRPH.EXECUTE +PBRPH.GET_CURRENT_INFO +PBRPH.GET_DEBUG_FLAGS +PBRPH.GET_INDEXES +PBRPH.GET_MORE_SOURCE +PBRPH.GET_PENDING_REQUEST +PBRPH.GET_SCALAR +PBRPH.LISTEN +PBRPH.PING +PBRPH.PRINT_BACKTRACE +PBRPH.PRINT_BREAKPOINTS +PBRPH.PRINT_FRAME_SOURCE +PBRPH.PRINT_INTO_TABLE +PBRPH.PRINT_SOURCE +PBRPH.PROCESS_REQUEST +PBRPH.SET_BREAK_LINE +PBRPH.SET_VALUE +PBRPH.SHUTDOWN +PBRPH.TARGET_PROGRAM_RUNNING +PBSDE. +PBSDE.DEBUG_LOOP +PBSDE.INIT +PBSDE.SHUTDOWN +PBUTL. +PCIRCUIT +PCTVERSION +PCT_COMPLETION_TIME +PCT_DIRECT_ACCESS +PCT_FREE +PCT_INCREASE +PCT_THRESHOLD +PCT_TOTAL_TIME +PCT_USED +PC_NAME +PC_NAME_HASH +PC_POV +PC_RANK +PC_UNKNOWN +PDB +PDB_COUNT +PDB_DBID +PDB_GUID +PDB_ID +PDB_INCARNATION# +PDB_LOCAL_ONLY +PDB_NAME +PDB_RESTORE_POINT +PDDL_ENV_MISMATCH +PDDL_STATUS +PDML_ENABLED +PDML_ENV_MISMATCH +PDML_STATUS +PEAK_FMR +PEEKED +PENDING_ROLE_CHANGE_TASKS +PENDQ +PEND_TABLE_NAME +PERCENT +PERCENT_BLOCKS_COALESCED +PERCENT_DONE +PERCENT_EXTENTS_COALESCED +PERCENT_SPACE_RECLAIMABLE +PERCENT_SPACE_USED +PERC_ACTIVE_SESS +PERC_ACTIVE_SESSIONS +PERC_IMPACT +PERFORMANCE_CLASS +PERIOD_END_TIME +PERIOD_START_TIME +PERMISSIONS +PERSIST +PERSISTABLE +PERSISTENT_MEM +PERSISTENT_RES +PERS_HEAP_MEM +PFDG_ID +PF_FUNCTION +PF_OWNER +PF_PACKAGE +PF_SCHEMA +PGA_ALLOCATED +PGA_ALLOC_MEM +PGA_BYTES +PGA_FREEABLE_MEM +PGA_LIMIT_SESSIONS_KILLED +PGA_MAX_MEM +PGA_MEMORY +PGA_TARGET_FACTOR +PGA_TARGET_FOR_ESTIMATE +PGA_TUNABLE_MEM +PGA_USED_MEM +PG_NAME +PHASE +PHOST +PHYBLKRD +PHYBLKREAD +PHYBLKWRITE +PHYBLKWRT +PHYRDS +PHYSICALREAD +PHYSICALWRITE +PHYSICAL_BLOCK_READS +PHYSICAL_BLOCK_WRITES +PHYSICAL_FILE +PHYSICAL_FILENAME +PHYSICAL_PATH +PHYSICAL_READS +PHYSICAL_READS_DELTA +PHYSICAL_READS_DIRECT_DELTA +PHYSICAL_READS_DIRECT_TOTAL +PHYSICAL_READS_TOTAL +PHYSICAL_READ_BYTES +PHYSICAL_READ_BYTES_DELTA +PHYSICAL_READ_BYTES_TOTAL +PHYSICAL_READ_PCT +PHYSICAL_READ_REQUESTS +PHYSICAL_READ_REQUESTS_DELTA +PHYSICAL_READ_REQUESTS_TOTAL +PHYSICAL_WRITES +PHYSICAL_WRITES_DELTA +PHYSICAL_WRITES_DIRECT_DELTA +PHYSICAL_WRITES_DIRECT_TOTAL +PHYSICAL_WRITES_TOTAL +PHYSICAL_WRITE_BYTES +PHYSICAL_WRITE_BYTES_DELTA +PHYSICAL_WRITE_BYTES_TOTAL +PHYSICAL_WRITE_REQUESTS +PHYSICAL_WRITE_REQUESTS_DELTA +PHYSICAL_WRITE_REQUESTS_TOTAL +PHYWRTS +PHY_IO +PID +PIDL. +PIDL.PTATTANM +PIDL.PTATTBTY +PIDL.PTATTCNT +PIDL.PTATTNNM +PIDL.PTATTRTY +PIDL.PTATTTYP +PIDL.PTGEND +PIDL.PTGEPT +PIDL.PTGES2 +PIDL.PTGES4 +PIDL.PTGETX +PIDL.PTGEU1 +PIDL.PTGEU2 +PIDL.PTGEU4 +PIDL.PTGSND +PIDL.PTG_ND +PIDL.PTG_PT +PIDL.PTG_S2 +PIDL.PTG_S4 +PIDL.PTG_TX +PIDL.PTG_U1 +PIDL.PTG_U2 +PIDL.PTG_U4 +PIDL.PTKIN +PIDL.PTP_ND +PIDL.PTP_PT +PIDL.PTP_S2 +PIDL.PTP_S4 +PIDL.PTP_TX +PIDL.PTP_U1 +PIDL.PTP_U2 +PIDL.PTP_U4 +PIDL.PTSLEN +PIECE +PIECE# +PIECES +PIECES_PER_SET +PIN0 +PIN1 +PIN10 +PIN100 +PIN1000 +PIN10000 +PING +PINGING_PRIMARY +PINGING_TARGET +PINGS +PINGSERVER. +PINHITRATIO +PINHITS +PINNED_COMMITTED_TXN +PINNED_OBJECTS +PINNED_TOTAL +PINNED_TXN +PINS +PIN_COUNT +PIN_MODE +PIPELINED +PIPE_SIZE +PIV_GB +PIV_SSF +PKEY +PKG_NAME +PLACE_DISTINCT +PLACE_GROUP_BY +PLAN +PLAN_ATTRIBUTE +PLAN_BYTES +PLAN_CARDINALITY +PLAN_COST +PLAN_CPU_COST +PLAN_DEPTH +PLAN_HASH_VALUE +PLAN_ID +PLAN_IO_COST +PLAN_LINE_ID +PLAN_NAME +PLAN_OBJECT_NAME +PLAN_OBJECT_OWNER +PLAN_OBJECT_TYPE +PLAN_OPERATION +PLAN_OPERATION_INACTIVE +PLAN_OPTIONS +PLAN_PARENT_ID +PLAN_PARTITION_START +PLAN_PARTITION_STOP +PLAN_POSITION +PLAN_STATS +PLAN_TEMP_SPACE +PLAN_TIME +PLAN_TIMESTAMP +PLATFORM_ID +PLATFORM_NAME +PLITBLM. +PLITBLM.COUNT +PLITBLM.DELETE +PLITBLM.EXISTS +PLITBLM.EXTEND +PLITBLM.FIRST +PLITBLM.LAST +PLITBLM.LIMIT +PLITBLM.NEXT +PLITBLM.PRIOR +PLITBLM.TRIM +PLSCOPE_SETTINGS +PLSEXEC_TIME_DELTA +PLSEXEC_TIME_TOTAL +PLSQL_CALLS +PLSQL_CCFLAGS +PLSQL_CMP_SWITCHS_DIFF +PLSQL_CODE_TYPE +PLSQL_DBTIME +PLSQL_DEBUG +PLSQL_DEBUGGER_CONNECTED +PLSQL_ENTRY_OBJECT_ID +PLSQL_ENTRY_SUBPROGRAM_ID +PLSQL_EXEC_TIME +PLSQL_MODE +PLSQL_OBJECT_ID +PLSQL_OPTIMIZE_LEVEL +PLSQL_SUBCALLS +PLSQL_SUBCALL_SIZE +PLSQL_SUBPROGRAM_ID +PLSQL_WARNINGS +PLS_TYPE +PLUGGABLE_DATABASE +PLUGGED_IN +PLUGGED_READONLY +PLUGIN_CHANGE# +PLUGIN_RESETLOGS_CHANGE# +PLUGIN_RESETLOGS_TIME +PMAP_HEAD_ADDRESS +PMNTPT +PMOPS_OCCURRED +PMOP_DETAILS +PNAME +PNUM +POINTINPOLYGON_IMP_T.ODCITABLECLOSE +POINTINPOLYGON_IMP_T.ODCITABLEDESCRIBE +POINTINPOLYGON_IMP_T.ODCITABLEDESCRIBESTUB +POINTINPOLYGON_IMP_T.ODCITABLEFETCH +POINTINPOLYGON_IMP_T.ODCITABLEFETCHSTUB +POINTINPOLYGON_IMP_T.ODCITABLEPREPARE +POINTINPOLYGON_IMP_T.ODCITABLEPREPARESTUB +POINTINPOLYGON_IMP_T.ODCITABLESTART +POINTINPOLYGON_IMP_T.ODCITABLESTARTSTUB +POLICY +POLICY_COLUMN +POLICY_COLUMN_OPTIONS +POLICY_EVENT +POLICY_FUNCTION_OWNER +POLICY_GROUP +POLICY_NAME +POLICY_OWNER +POLICY_SUBTYPE +POLICY_TEXT +POLICY_TYPE +POLYMORPHIC +POOL +POOL_CHANGED_PAGES +POOL_HITS +POOL_ID +POOL_MISSES +POOL_NAME +POOL_NEW_PAGES +POOL_RECLAIMED_PAGES +POOL_SIZE +POOL_STATE +POOL_UNCHANGED_PAGES +POPREQSUB +POPULATE_CUS +POPULATE_CUS_DELTA +POPULATE_CUS_TOTAL +POPULATE_STATUS +PORT +POSITION +POSITION_IN_SELECT +POSTCOST +POST_COMMIT_SCN +POS_BITMAP +POWER +PQS_COMPLETED +PQS_QUEUED +PQ_ACTIVE +PQ_ACTIVE_TIME +PQ_CONCURRENT_UNION +PQ_DISTRIBUTE +PQ_DISTRIBUTE_WINDOW +PQ_FILTER +PQ_MAP +PQ_NOMAP +PQ_QUEUED +PQ_QUEUED_TIME +PQ_QUEUE_TIME_OUTS +PQ_REPLICATE +PQ_SERVERS +PQ_SERVERS_USED +PQ_SKEW +PQ_SLAVE_MISMATCH +PQ_STATUS +PQ_SVC +PQ_TIMEOUT_ACTION +PREBUILT +PRECEDENCE +PRECISION +PRECISION2 +PRECOMMIT_HANDLER +PRECOMPUTE_CONDITION +PRECOMPUTE_PERCENT +PRECOMPUTE_PERCENT_TOP +PRECOMPUTE_SUBQUERY +PRECOST +PREDEFINED +PREDICATE +PREDICATE_EVALUATION +PREDICATE_TRUE. +PREFERENCE_NAME +PREFERENCE_VALUE +PREFERRED_READ +PREFIX_LENGTH +PREPARECOUNT +PREPARED_SCN +PREPARED_STATUS +PREPARED_WORK_SIZE +PREPARE_END_TIME +PREPARE_START_TIME +PREPARE_TIME +PREPOPULATED +PRESENTATION +PRESERVED +PRESERVE_OID +PRESERVE_STATE +PRESETLOGS_SCN +PRESETLOGS_TIME +PREVIOUS_LOG_NAME +PREVIOUS_LOG_STATUS +PREVIOUS_MASTER +PREVIOUS_SNAPSHOT_SCN +PREVIOUS_SNAPSHOT_TIME +PREVIOUS_TIME +PREVIOUS_TIMESTAMP +PREVIOUS_VALUE +PREV_BUFFERS +PREV_CHILD_NUMBER +PREV_DML_COMMAND +PREV_EXEC_ID +PREV_EXEC_START +PREV_GLOBAL_COMMIT_FILE_ID +PREV_GLOBAL_COMMIT_SCN +PREV_HASH_VALUE +PREV_LOCAL_COMMIT_CALL_CTR +PREV_SIZE +PREV_SQL_ADDR +PREV_SQL_ID +PREV_TIMESTAMP +PRGOID +PRIMARY_CON_DBID +PRIMARY_DBID +PRIMARY_DB_UNIQUE_NAME +PRIMARY_ID +PRIMARY_INSTANCE +PRIMARY_KEY +PRIMARY_PARENT_XID +PRIMARY_PARENT_XIDSLT +PRIMARY_PARENT_XIDSQN +PRIMARY_PARENT_XIDUSN +PRIMARY_REGION +PRIMARY_START_SCN +PRIMARY_START_TIME +PRIMARY_VOL +PRIMARY_XID +PRIMARY_XIDSLT +PRIMARY_XIDSQN +PRIMARY_XIDUSN +PRIMOP_BIND# +PRIMOP_NAME +PRIMOP_OWNER +PRINCIPAL +PRINCIPAL_TYPE +PRIORITY +PRIORITY0_CROSS_LWM +PRIORITY1_CROSS_LWM +PRIORITY2_CROSS_LWM +PRIORITY3_CROSS_LWM +PRIORITY4_CROSS_LWM +PRIORITY5_CROSS_LWM +PRIORITY6_CROSS_LWM +PRIORITY7_CROSS_LWM +PRIORITY8_CROSS_LWM +PRIORITY9_CROSS_LWM +PRIORITY_CHANGES +PRIORITY_OVERRIDE +PRIOR_DB_INCARNATION# +PRIOR_INCARNATION# +PRIOR_PDB_INCARNATION# +PRIOR_RESETLOGS_CHANGE# +PRIOR_RESETLOGS_TIME +PRIVATE_JDBC. +PRIVATE_JDBC.GET_ALL_TYPE_SHAPE_INFO +PRIVATE_JDBC.GET_COMPATIBLE +PRIVATE_JDBC.GET_TYPE_SHAPE_INFO +PRIVATE_JDBC_DR. +PRIVATE_JDBC_DR.GET_COMPATIBLE +PRIVATE_MAX_LEN +PRIVATE_RESULTS +PRIVILEGE +PRIVILEGE_ID +PRIVILEGE_LIST. +PRIVILEGE_NAME +PRIVILEGE_TYPE +PRIVS_TO_CHAR. +PRIVS_TO_CHAR_N. +PRIV_NUMBER +PRIV_USED +PRIV_USER +PRLLIDX_CREATE.BUILD_INDEX_BATCH_EXTR +PRLLIDX_CREATE.BUILD_INDEX_PARTITION +PRLLIDX_CREATE.INDEX_LOAD +PRLLIDX_CREATE.INDEX_MERGE +PROBED +PROBLEM_ID +PROBLEM_KEY +PROC +PROCEDURAL +PROCEDURE +PROCEDURE_NAME +PROCEDURE_OWNER +PROCESS +PROCESSED_CHANGE# +PROCESSED_LOW_POSITION +PROCESSED_LOW_SCN +PROCESSED_LOW_TIME +PROCESSED_MESSAGE_NUMBER +PROCESSED_SCN +PROCESSED_TASKID +PROCESSED_TIME +PROCESS_ID +PROCESS_NAME +PROCESS_TYPE +PROC_NAME +PROC_TIME +PRODUCT +PRODUCT_STARTUP_TIME +PROD_RID +PROD_RSCN +PROD_SCN +PROFILE +PROFILE_NAME +PROGRAM +PROGRAM_ACTION +PROGRAM_ID +PROGRAM_LINE# +PROGRAM_NAME +PROGRAM_OWNER +PROGRAM_TYPE +PROGRESS +PROGRESS_METRIC +PROJECTION +PROPAGATION_NAME +PROPAGATION_WINDOW +PROPERTY +PROPERTYNAME +PROPERTYVALUE +PROPERTY_ID +PROPERTY_INDEX +PROPERTY_KEY +PROPERTY_NAME +PROPERTY_ORDER +PROPERTY_TYPE +PROPERTY_VALUE +PROPERTY_VALUE_LENGTH +PROP_NAME +PROP_VALUE +PROTECTION_LEVEL +PROTECTION_MODE +PROTOCOL +PROTOCOL_NUM +PROTOCOL_VERSION +PROXY +PROXY_AUTHORITY +PROXY_NAME +PROXY_ONLY_CONNECT +PROXY_PDB +PROXY_SERIAL +PROXY_SESSIONID +PROXY_SID +PROXY_SPID +PROXY_USER +PROXY_USERID +PROXY_USER_TYPE +PRUNED_COUNT +PRUNING +PRUNING_TYPE +PRVTEMX_ADMIN. +PRVTEMX_ADMIN.ADD_REDOLOG_GROUP_MEMBER_XML +PRVTEMX_ADMIN.BACKUP_CONTROL_FILE_XML +PRVTEMX_ADMIN.CLEAR_REDO_LOGFILE_XML +PRVTEMX_ADMIN.CREATE_REDOLOG_GROUP_XML +PRVTEMX_ADMIN.DROP_REDOLOG_GROUP_XML +PRVTEMX_ADMIN.FORCE_CHECKPOINT_XML +PRVTEMX_ADMIN.GET_REMOTE_UNDO_INFO +PRVTEMX_ADMIN.REPORT_ADD_DATAFILE_XML +PRVTEMX_ADMIN.REPORT_ALTER_PROFILE_XML +PRVTEMX_ADMIN.REPORT_ALTER_TBS_INMEMORY_XML +PRVTEMX_ADMIN.REPORT_ALTER_USER +PRVTEMX_ADMIN.REPORT_CHANGE_DF_STATUS_XML +PRVTEMX_ADMIN.REPORT_CHANGE_TBS_STATUS_XML +PRVTEMX_ADMIN.REPORT_CREATE_PROFILE_XML +PRVTEMX_ADMIN.REPORT_CREATE_ROLE_XML +PRVTEMX_ADMIN.REPORT_CREATE_TABLESPACE_XML +PRVTEMX_ADMIN.REPORT_CREATE_USER_XML +PRVTEMX_ADMIN.REPORT_DBSEARCH_XML +PRVTEMX_ADMIN.REPORT_DF_AUTO_EXTEND_XML +PRVTEMX_ADMIN.REPORT_DROP_DATAFILE_XML +PRVTEMX_ADMIN.REPORT_DROP_PROFILE_XML +PRVTEMX_ADMIN.REPORT_DROP_ROLE +PRVTEMX_ADMIN.REPORT_DROP_TABLESPACE_XML +PRVTEMX_ADMIN.REPORT_DROP_USER +PRVTEMX_ADMIN.REPORT_GRANT_PRIV_XML +PRVTEMX_ADMIN.REPORT_RESIZE_DATAFILE_XML +PRVTEMX_ADMIN.REPORT_RESIZE_TABLESPACE_XML +PRVTEMX_ADMIN.REPORT_SERVER_INFO_XML +PRVTEMX_ADMIN.REPORT_SET_DEFAULT_TBS_XML +PRVTEMX_ADMIN.REPORT_SET_PARAM_XML +PRVTEMX_ADMIN.REPORT_SET_TBS_GROUP_XML +PRVTEMX_ADMIN.REPORT_SHOW_ARCHLOG_FILES_XML +PRVTEMX_ADMIN.REPORT_SHOW_CONTROL_FILES_XML +PRVTEMX_ADMIN.REPORT_SHOW_DB_PROPS_XML +PRVTEMX_ADMIN.REPORT_SHOW_FEATURE_USAGE_XML +PRVTEMX_ADMIN.REPORT_SHOW_OBJECTS_XML +PRVTEMX_ADMIN.REPORT_SHOW_OBJFILTERS_XML +PRVTEMX_ADMIN.REPORT_SHOW_OBJ_PRIVS_XML +PRVTEMX_ADMIN.REPORT_SHOW_PARAMS_XML +PRVTEMX_ADMIN.REPORT_SHOW_PRIVS_XML +PRVTEMX_ADMIN.REPORT_SHOW_PROFILEDETAIL_XML +PRVTEMX_ADMIN.REPORT_SHOW_PROFILES_XML +PRVTEMX_ADMIN.REPORT_SHOW_REDOLOG_FILES_XML +PRVTEMX_ADMIN.REPORT_SHOW_ROLEDETAIL_XML +PRVTEMX_ADMIN.REPORT_SHOW_ROLES_XML +PRVTEMX_ADMIN.REPORT_SHOW_TABLESPACES_XML +PRVTEMX_ADMIN.REPORT_SHOW_TBLSPCNAMES_XML +PRVTEMX_ADMIN.REPORT_SHOW_UNDO_DETAILS_XML +PRVTEMX_ADMIN.REPORT_SHOW_UNDO_SUMMARY_XML +PRVTEMX_ADMIN.REPORT_SHOW_UNUSED_UNDOTBS_XML +PRVTEMX_ADMIN.REPORT_SHOW_USERDETAIL_XML +PRVTEMX_ADMIN.REPORT_SHOW_USERS_XML +PRVTEMX_ADMIN.REPORT_TBS_AUTO_EXTEND_XML +PRVTEMX_ADMIN.SWITCH_REDO_LOGFILE_XML +PRVTEMX_ADMIN.SWITCH_UNDOTBS_XML +PRVTEMX_CELL. +PRVTEMX_CELL.REPORT_CELL +PRVTEMX_CELL.REPORT_CELL_DIFF +PRVTEMX_CELL.REPORT_CELL_DIFF_XML +PRVTEMX_CELL.REPORT_CELL_XML +PRVTEMX_DBHOME. +PRVTEMX_DBHOME.ALTER_PDB_XML +PRVTEMX_DBHOME.CLONE_PDB_XML +PRVTEMX_DBHOME.CONVERT_NONCDB2PDB_XML +PRVTEMX_DBHOME.CREATE_PDB_XML +PRVTEMX_DBHOME.DROP_PDB_XML +PRVTEMX_DBHOME.I_BUILD_ERROR_XML +PRVTEMX_DBHOME.PLUG_PDB_XML +PRVTEMX_DBHOME.REPORT_CONTAINERS_XML +PRVTEMX_DBHOME.REPORT_DBHOME_XML +PRVTEMX_DBHOME.REPORT_INCIDENTS_XML +PRVTEMX_DBHOME.REPORT_INSTANCE_DETAILS_XML +PRVTEMX_DBHOME.REPORT_JOBS_XML +PRVTEMX_DBHOME.REPORT_PDB_STORAGE_LIMITS_XML +PRVTEMX_DBHOME.REPORT_PDB_VIOLATIONS_XML +PRVTEMX_DBHOME.REPORT_PERFORMANCE_XML +PRVTEMX_DBHOME.REPORT_RESOURCES_XML +PRVTEMX_DBHOME.REPORT_SHOW_DBLINKS_XML +PRVTEMX_DBHOME.REPORT_SHOW_PDB_INSTANCES_XML +PRVTEMX_DBHOME.REPORT_SQLMONITOR_XML +PRVTEMX_DBHOME.REPORT_STATUS_XML +PRVTEMX_DBHOME.UNPLUG_PDB_XML +PRVTEMX_MEMORY. +PRVTEMX_MEMORY.REPORT_MEMORY_XML +PRVTEMX_PERF. +PRVTEMX_PERF.ACTION_KILL_SESSION_XML +PRVTEMX_PERF.REPORT_SESSION_DETAILS_XML +PRVTEMX_RSRCMGR. +PRVTEMX_RSRCMGR.CREATE_CDB_PLAN_DIRECTIVE +PRVTEMX_RSRCMGR.CREATE_CDB_PLAN_DIR_SAVEERR +PRVTEMX_RSRCMGR.DELETE_CDB_PLAN_DIRECTIVE +PRVTEMX_RSRCMGR.REPORT_ADD_GROUP_XML +PRVTEMX_RSRCMGR.REPORT_CREATE_GROUP_XML +PRVTEMX_RSRCMGR.REPORT_CREATE_PLAN_XML +PRVTEMX_RSRCMGR.REPORT_DELETE_PLAN_XML +PRVTEMX_RSRCMGR.REPORT_GET_ATTRIBUTES_XML +PRVTEMX_RSRCMGR.REPORT_GROUP_DELETABLE_XML +PRVTEMX_RSRCMGR.REPORT_REMOVE_GROUP_XML +PRVTEMX_RSRCMGR.REPORT_SET_ACTIVE_PLAN_XML +PRVTEMX_RSRCMGR.REPORT_SET_DIRECTIVES_XML +PRVTEMX_RSRCMGR.REPORT_SET_INSTANCE_CAGING_XML +PRVTEMX_RSRCMGR.REPORT_SET_MAINT_WINDOWS_XML +PRVTEMX_RSRCMGR.REPORT_SET_MAPPINGS_XML +PRVTEMX_RSRCMGR.REPORT_SET_MAPPING_PRI_XML +PRVTEMX_RSRCMGR.REPORT_SHOW_DASHBOARD_XML +PRVTEMX_RSRCMGR.REPORT_SHOW_GROUPS_XML +PRVTEMX_RSRCMGR.REPORT_SHOW_MAINT_WINDOWS_XML +PRVTEMX_RSRCMGR.REPORT_SHOW_MAPPINGS_XML +PRVTEMX_RSRCMGR.REPORT_SHOW_PLANS_XML +PRVTEMX_RSRCMGR.REPORT_SHOW_PLAN_XML +PRVTEMX_RSRCMGR.REPORT_SHOW_TIMELINE_XML +PRVTEMX_RSRCMGR.REPORT_UPDATE_CDB_PLAN_XML +PRVTEMX_RSRCMGR.REPORT_UPDATE_GROUP_XML +PRVTEMX_RSRCMGR.REPORT_UPDATE_PDB_DIR_XML +PRVTEMX_RSRCMGR.REPORT_UPDATE_PLAN_XML +PRVTEMX_RSRCMGR.UPDATE_CDB_PLAN_DIRECTIVE +PRVTEMX_SQL. +PRVTEMX_SQL.ALTER_ANALYSIS_TASK_XML +PRVTEMX_SQL.CREATE_ANALYSIS_TASK +PRVTEMX_SQL.EXECUTE_QUICK_CHECK_TASK +PRVTEMX_SQL.REPORT_ANALYSIS_DEFAULTS_XML +PRVTEMX_SQL.REPORT_ANALYSIS_TASK_INFO_XML +PRVTEMX_SQL.REPORT_ANALYSIS_TASK_LIST_XML +PRVTEMX_SQL.REPORT_QUICK_CHECK_DFLTS_XML +PRVTEMX_SQL.REPORT_SET_ANALYSIS_DFLTS_XML +PRVTEMX_SQL.REPORT_SQLSET_LIST_XML +PRVTEMX_SQL.SCHEDULE_ANALYSIS_COMPARE +PRVTEMX_SQL.SCHEDULE_ANALYSIS_EXECUTION +PRVTEMX_SQL.SCHEDULE_QUICK_CHECK_TASK +PRVTPARENTCHILD. +PRVTPARENTCHILD.GETPARENTID +PRVTPARENTCHILD.SIZEARRAY +PRVTPC. +PRVTTNPC. +PRVTTNPC.DROP_DEPENDENCIES +PRVTTNPC.GET_OBJ_ID +PRVTTNPC.INSERT_DEP_TABLE +PRVT_ACCESS_ADVISOR. +PRVT_ACCESS_ADVISOR.CALLER_USER_ID +PRVT_ACCESS_ADVISOR.CHECK_WK_REF +PRVT_ACCESS_ADVISOR.CLEANUP_TASK +PRVT_ACCESS_ADVISOR.CREATE_TASK +PRVT_ACCESS_ADVISOR.CREATE_TASK_REPORT +PRVT_ACCESS_ADVISOR.DELETE_TASK +PRVT_ACCESS_ADVISOR.EXECUTE_TASK +PRVT_ACCESS_ADVISOR.GET_ACCESS_ADVISOR_DEFAULTS +PRVT_ACCESS_ADVISOR.GET_NEW_NAME +PRVT_ACCESS_ADVISOR.GET_REC_ATTRIBUTES +PRVT_ACCESS_ADVISOR.GET_TASK_SCRIPT +PRVT_ACCESS_ADVISOR.IMPLEMENT_TASK +PRVT_ACCESS_ADVISOR.PARAM_VALIDATE +PRVT_ACCESS_ADVISOR.QUICK_TUNE +PRVT_ACCESS_ADVISOR.RESET_TASK +PRVT_ACCESS_ADVISOR.RESUME_TASK +PRVT_ACCESS_ADVISOR.SETUP_PARAMETERS +PRVT_ACCESS_ADVISOR.SETUP_TEMPLATES +PRVT_ACCESS_ADVISOR.SETUP_USER +PRVT_ACCESS_ADVISOR.SYNONYM +PRVT_ACCESS_ADVISOR.TEST_API +PRVT_ACCESS_ADVISOR.THROW_ERROR +PRVT_ACCESS_ADVISOR.UPDATE_REC_ATTRIBUTES +PRVT_ADVISOR. +PRVT_ADVISOR.ADJUST_STRING +PRVT_ADVISOR.CANCEL_TASK +PRVT_ADVISOR.CHECK_ADV_ENABLED +PRVT_ADVISOR.CHECK_EXECUTION_STATUS +PRVT_ADVISOR.CHECK_EXPIRATION_COMP +PRVT_ADVISOR.CHECK_INITIAL +PRVT_ADVISOR.CHECK_MODIFY +PRVT_ADVISOR.CHECK_PACK_ENABLED +PRVT_ADVISOR.CHECK_TASK_ENABLED +PRVT_ADVISOR.CHECK_TEMPLATE +PRVT_ADVISOR.COMMON_DELETE_TASK +PRVT_ADVISOR.COMMON_EXECUTE_TASK +PRVT_ADVISOR.COMMON_RESET_TASK +PRVT_ADVISOR.CREATE_OBJECT +PRVT_ADVISOR.CREATE_TASK +PRVT_ADVISOR.DELETE_DIRECTIVE +PRVT_ADVISOR.DELETE_EXPIRED_TASKS +PRVT_ADVISOR.DELETE_MESSAGE +PRVT_ADVISOR.DELETE_TASK +PRVT_ADVISOR.DELETE_USER_TASKS +PRVT_ADVISOR.EDIT +PRVT_ADVISOR.EVAL_DIRECTIVE +PRVT_ADVISOR.FETCH_ADVISOR +PRVT_ADVISOR.FINDING_NAME_EXISTS +PRVT_ADVISOR.FORMAT_MESSAGE +PRVT_ADVISOR.FORMAT_MESSAGE_GROUP +PRVT_ADVISOR.GATHER_STATISTICS +PRVT_ADVISOR.GENERATE_UNIQUE_NAME +PRVT_ADVISOR.GET_DB_VERSION +PRVT_ADVISOR.GET_DEFAULT_TASK_PARAMETER +PRVT_ADVISOR.GET_DIRECTIVE_ID +PRVT_ADVISOR.GET_REC_ATTRIBUTES +PRVT_ADVISOR.GET_TASK_PARAM +PRVT_ADVISOR.GET_TASK_REPORT +PRVT_ADVISOR.GET_TASK_SCRIPT +PRVT_ADVISOR.HANDLE_LOCK +PRVT_ADVISOR.IMPLEMENT_TASK +PRVT_ADVISOR.INSERT_ADV_DEFINITION +PRVT_ADVISOR.INSERT_ADV_DIR_DEF +PRVT_ADVISOR.INSERT_DEF_EXECUTION_TYPE +PRVT_ADVISOR.INSERT_DEF_PARAMETER +PRVT_ADVISOR.INSERT_DIRECTIVE +PRVT_ADVISOR.INSERT_DIRECTIVE_I +PRVT_ADVISOR.INSERT_FINDING +PRVT_ADVISOR.INSERT_MESSAGE +PRVT_ADVISOR.INSERT_REC_ACT +PRVT_ADVISOR.INTERRUPT_TASK +PRVT_ADVISOR.IS_EMPTY +PRVT_ADVISOR.IS_KEYWORD +PRVT_ADVISOR.IS_PACK_ENABLED +PRVT_ADVISOR.IS_WILDCARD +PRVT_ADVISOR.MARK_RECOMMENDATION +PRVT_ADVISOR.PARSE_NAME +PRVT_ADVISOR.QUICK_TUNE +PRVT_ADVISOR.RECORD_ERRORMSG +PRVT_ADVISOR.RECORD_JOURNAL +PRVT_ADVISOR.RECOVER_SINGLE_STALE_TASK +PRVT_ADVISOR.RECOVER_STALE_TASKS +PRVT_ADVISOR.RESET_TASK +PRVT_ADVISOR.RESTORE_NLS_NUMBER_ENV +PRVT_ADVISOR.SETUP_NLS_NUMBER_ENV +PRVT_ADVISOR.SETUP_USER_ENVIRONMENT +PRVT_ADVISOR.SET_DEFAULT_TASK_PARAMETER +PRVT_ADVISOR.SET_TASK_PARAMETER +PRVT_ADVISOR.SIGNAL_INTERRUPT +PRVT_ADVISOR.TEST_EXECUTE_TASK +PRVT_ADVISOR.TRACK_REPORT_USAGE +PRVT_ADVISOR.UPDATE_DIRECTIVE +PRVT_ADVISOR.UPDATE_OBJECT +PRVT_ADVISOR.UPDATE_REC_ATTRIBUTES +PRVT_ADVISOR.UPDATE_TASK +PRVT_ADVISOR.UPDATE_TASK_ATTRIBUTES +PRVT_ADVISOR.VALIDATE_ADVISOR +PRVT_ADVISOR.VALIDATE_COMMAND +PRVT_ADVISOR.VALIDATE_EXECUTION +PRVT_ADVISOR.VALIDATE_EXECUTION_ID +PRVT_ADVISOR.VALIDATE_EXECUTION_OBJECT +PRVT_ADVISOR.VALIDATE_EXECUTION_ORDER +PRVT_ADVISOR.VALIDATE_ITEM_LENGTH +PRVT_ADVISOR.VALIDATE_NEW_TASK +PRVT_ADVISOR.VALIDATE_TASK +PRVT_ADVISOR.VALIDATE_TASK_ID +PRVT_ADVISOR.VALIDATE_USERNAME +PRVT_AWRV_METADATA.CLEAR_MEMBER +PRVT_AWRV_METADATA.GET_INST_CLAUSE +PRVT_AWRV_METADATA.ISDBLOCAL +PRVT_AWRV_METADATA.PRVT_AWRV_METADATA +PRVT_AWRV_METADATA.RESET_MEMBER +PRVT_AWRV_METADATA.SET_MEMBER +PRVT_AWRV_METADATA.TO_XML +PRVT_AWR_DATA. +PRVT_AWR_DATA.GET_BASIC_ASH_STATS +PRVT_AWR_DATA.GET_BC_ADVICE +PRVT_AWR_DATA.GET_CURSOR_INV +PRVT_AWR_DATA.GET_HOST_STATS +PRVT_AWR_DATA.GET_ICDEV_STATS +PRVT_AWR_DATA.GET_IC_TRAFFIC +PRVT_AWR_DATA.GET_IC_TRANSFER_DETAILS +PRVT_AWR_DATA.GET_IO_STATS +PRVT_AWR_DATA.GET_LITERAL_USAGE_STATS +PRVT_AWR_DATA.GET_MEMORY_COMPONENTS +PRVT_AWR_DATA.GET_MEM_ADVICE +PRVT_AWR_DATA.GET_OBJDETAILS +PRVT_AWR_DATA.GET_PARAMETERS +PRVT_AWR_DATA.GET_PGASTAT +PRVT_AWR_DATA.GET_PGA_ADVICE +PRVT_AWR_DATA.GET_PING_STATS +PRVT_AWR_DATA.GET_SESS_STAT +PRVT_AWR_DATA.GET_SGASTAT +PRVT_AWR_DATA.GET_SGA_ADVICE +PRVT_AWR_DATA.GET_SHARED_POOL_ADVICE +PRVT_AWR_DATA.GET_SQLSTAT +PRVT_AWR_DATA.GET_STREAMS_ADVICE +PRVT_AWR_DATA.GET_SYSSTAT +PRVT_AWR_DATA.GET_TIME_MODEL +PRVT_AWR_DATA.GET_TOP_SQL_DETAILS +PRVT_AWR_DATA.GET_WAITCLASS_CHART +PRVT_AWR_DATA.GET_WAIT_EVENTS +PRVT_AWR_DATA_CP. +PRVT_AWR_DATA_CP.GET_COMPATIBILITY +PRVT_AWR_DATA_CP.GET_ECLS_HOTOBJ +PRVT_AWR_DATA_CP.GET_EVTS_HOTOBJ +PRVT_AWR_DATA_CP.GET_EVT_HOTOBJ +PRVT_AWR_INST_META.TO_XML +PRVT_AWR_PERIOD.GET_INST_CLAUSE +PRVT_AWR_PERIOD.GET_ROW_CNT +PRVT_AWR_PERIOD.GET_TIME_PER_ROW +PRVT_AWR_PERIOD.PRVT_AWR_PERIOD +PRVT_AWR_PERIOD.TO_XML +PRVT_AWR_VIEWER. +PRVT_AWR_VIEWER.ADJUST_REALTIME_INPUT_TIMES +PRVT_AWR_VIEWER.AWR_RMMETRICS_XML +PRVT_AWR_VIEWER.AWR_SYSMETRICS_XML +PRVT_AWR_VIEWER.AWR_SYSSTAT_TOTALSTAT_XML +PRVT_AWR_VIEWER.CALCULATE_BUCKETS +PRVT_AWR_VIEWER.CREATE_BUCKET_SNAP_MAP +PRVT_AWR_VIEWER.CREATE_CONTAINER_MAP +PRVT_AWR_VIEWER.CREATE_INSTANCE_MAP +PRVT_AWR_VIEWER.DELTA_STR +PRVT_AWR_VIEWER.ERROR_XML +PRVT_AWR_VIEWER.GENERATE_BUCKETID_TAG +PRVT_AWR_VIEWER.GENERATE_BUCKETS_TAG2 +PRVT_AWR_VIEWER.GET_BUCKET_MAP +PRVT_AWR_VIEWER.GET_MAPPING_TYPE +PRVT_AWR_VIEWER.GET_VERSION +PRVT_AWR_VIEWER.INTERVAL_TO_SECOND +PRVT_AWR_VIEWER.REPORT_ADDM_XML +PRVT_AWR_VIEWER.REPORT_AWRREP_XML +PRVT_AWR_VIEWER.REPORT_AWR_XML +PRVT_AWR_VIEWER.REPORT_CONTAINERS_XML +PRVT_AWR_VIEWER.REPORT_METRICS_XML +PRVT_AWR_VIEWER.REPORT_RAC_XML +PRVT_AWR_VIEWER.REPORT_TIMEPICKER_XML +PRVT_AWR_VIEWER.REPORT_TOPSQL_XML +PRVT_AWR_VIEWER.RMMETRICS_DATA_XML +PRVT_AWR_VIEWER.SET_MAPPING_TYPE +PRVT_COMPRESS. +PRVT_COMPRESS.GET_ARCH_COMP +PRVT_COMPRESS.GET_COMPATIBLE +PRVT_COMPRESS.GET_TS_NUM +PRVT_COMPRESS.LOAD_TAB_INMEMORY +PRVT_COMPRESSION. +PRVT_COMPRESSION.ADV_ANALYZE_TABLE +PRVT_COMPRESSION.GET_ALLINDEX_COMPRESSION_RATIO +PRVT_COMPRESSION.GET_COMPRESSION_RATIO +PRVT_COMPRESSION.GET_INDEX_COMPRESSION_RATIO +PRVT_COMPRESSION.GET_LOB_COMPRESSION_RATIO +PRVT_COMPRESSION.GET_NUM_PARTITIONS +PRVT_COMPRESSION.GET_TABLE_COMPRESSION_RATIO +PRVT_COMPRESSION.INIT_TASK_STATE +PRVT_COMPRESSION.OLTP_COMPRESSIBLE +PRVT_COMPRESSION.REPORT +PRVT_CPADDM. +PRVT_CPADDM.COMPARE_CAPTURE_REPLAY +PRVT_CPADDM.COMPARE_DATABASES +PRVT_CPADDM.COMPARE_INSTANCES +PRVT_CPADDM.COMPARE_REPLAY_REPLAY +PRVT_CPADDM.COMPARE_WCR_REPORT_XML +PRVT_CPADDM.CPADDM_REPORT_XML +PRVT_CPADDM.GET_SNAPSHOTS +PRVT_CPADDM.ONE_TIME_PERIOD +PRVT_DBMS_MANAGE_XMLSTORAGE. +PRVT_DBMS_MANAGE_XMLSTORAGE.GETCOMPLEXTYPEELEMENTLIST +PRVT_DIMENSION_SYS_UTIL. +PRVT_DIMENSION_SYS_UTIL.INSERT_MESSAGE +PRVT_DIMENSION_SYS_UTIL.SET_DEBUG +PRVT_EMX. +PRVT_EMX.APPEND_DIR_SEPARATOR +PRVT_EMX.CLEAR_EMEXPRESS_FILES +PRVT_EMX.CLEAR_FILES +PRVT_EMX.CLEAR_REPORT_FILES +PRVT_EMX.EXECUTE_TUNING_TASK_STBY +PRVT_EMX.GENERATE_DBSEARCH_PRED +PRVT_EMX.GET_DIRECTORY_PATH +PRVT_EMX.GET_EXPANDED_OSD_PATH +PRVT_EMX.GET_FILE_BINARY +PRVT_EMX.GET_FILE_ID +PRVT_EMX.GET_FILE_NON_BINARY +PRVT_EMX.GET_FILE_PROPERTY +PRVT_EMX.GET_ORACLE_HOME +PRVT_EMX.GET_SWF +PRVT_EMX.IS_BINARY +PRVT_EMX.IS_BINARY_WRAPPER +PRVT_EMX.IS_FILE_PUBLIC +PRVT_EMX.IS_RAC +PRVT_EMX.REGISTER_COMMON_TAGS +PRVT_EMX.REGISTER_FILES +PRVT_EMX.REGISTER_REPORTS +PRVT_EMX.VALIDATE_SIZE_CLAUSE +PRVT_HDM. +PRVT_HDM.ADDM_REPORTS +PRVT_HDM.ADDM_REPORT_XML +PRVT_HDM.ADDM_TASK_LIST_XML +PRVT_HDM.ADDM_TASK_REPORT_LINES +PRVT_HDM.ADDM_TASK_REPORT_XML +PRVT_HDM.ADD_INFO +PRVT_HDM.AGGREGATE_FINDINGS +PRVT_HDM.APPLY_DIRECTIVES +PRVT_HDM.AUTO_EXECUTE +PRVT_HDM.DB_FEATURE_CLOB +PRVT_HDM.DESCRIBE_DIRECTIVE +PRVT_HDM.EVALUATE_METER +PRVT_HDM.EXECUTE +PRVT_HDM.FINDING_NAME_10G +PRVT_HDM.FIND_LOCAL_FDGS +PRVT_HDM.GET_ASH_QUERY +PRVT_HDM.GET_QUERY_PREDICATE +PRVT_HDM.PARAMETER_EXISTS +PRVT_HDM.PRINT_ELEMENT +PRVT_HDM.PRINT_LINE +PRVT_HDM.REPORT +PRVT_HDM.RUN +PRVT_HDM.RUN_LOCALS +PRVT_HDM.TOP_ADDM_TASKS +PRVT_HDM.TRANSLATE_CLOB +PRVT_HDM.UPDATE_FDG_COUNT +PRVT_HDM.VALIDATE_INSTANCE +PRVT_IDX. +PRVT_IDX.ASSERT_FNCOL +PRVT_IDX.CHECK_PARAM +PRVT_IDX.CMT_IDX_CHNGS +PRVT_IDX.CONVERT_ENDIAN +PRVT_IDX.COPYPTNINFO +PRVT_IDX.CRT_DUMMY_IDX +PRVT_IDX.NN +PRVT_IDX.NNDISTANCE +PRVT_IDX.SPLIT_QUALIFIED_SQL_NAME +PRVT_ILM. +PRVT_ILM.ADO_ENVPARAMS +PRVT_ILM.CHECK_CONFLICT +PRVT_ILM.CREATE_JOBS_REBUILD_DEP +PRVT_ILM.CREATE_JOB_DEP +PRVT_ILM.CREATE_TAB_ILMJOB +PRVT_ILM.DEPOBJ_STATE +PRVT_ILM.DETERMINE_CONFLICT +PRVT_ILM.DISABLE_TAB_OBJPOLICY +PRVT_ILM.EVALUATE_ILM_POLICIES +PRVT_ILM.EXECUTE_ILM_POLICIES +PRVT_ILM.EXECUTE_ILM_SCH +PRVT_ILM.EXECUTE_TASK +PRVT_ILM.EXEC_ILM_ACTION +PRVT_ILM.FILTER_BY_WEIGHT +PRVT_ILM.FILTER_FOR_MOVE +PRVT_ILM.GEN_EXECUTION_ID +PRVT_ILM.GEN_RID_RANGE +PRVT_ILM.GETSECTICK +PRVT_ILM.GET_EVALUATEDTASK_JOB_INFO +PRVT_ILM.GET_EVAL_INFO +PRVT_ILM.GET_ILMOBJ_TAB +PRVT_ILM.GET_IMCMPLEVEL +PRVT_ILM.GET_JOB_INFO +PRVT_ILM.GET_NEXTN_OBJ +PRVT_ILM.GET_NEXTN_OBJPOL +PRVT_ILM.GET_OBJPOLICY_STAT +PRVT_ILM.GET_OBJ_STAT +PRVT_ILM.GET_POLICY_INFO +PRVT_ILM.GET_STAT_TIME +PRVT_ILM.GET_WEIGHT +PRVT_ILM.HEAT_MAP_ON +PRVT_ILM.ILMJOBEXISTS +PRVT_ILM.ILM_AUTHORIZE +PRVT_ILM.ILM_CALLBACK +PRVT_ILM.ILM_CLEANUP +PRVT_ILM.ILM_CONSISTENCY +PRVT_ILM.ILM_DICT_CLEANUP +PRVT_ILM.ILM_DICT_CLEANUP_CHECK +PRVT_ILM.ILM_JOBCOMPLETION +PRVT_ILM.ILM_RESOLVETASKS +PRVT_ILM.ILM_TASKCOMPLETE +PRVT_ILM.INIT_ACT +PRVT_ILM.INIT_PNAME +PRVT_ILM.INSERT_TAB_ILMJOB +PRVT_ILM.INSERT_TAB_ILMTASKINFO_DDL +PRVT_ILM.ISSUPLOGENABLED +PRVT_ILM.IS_FILTER_CANDIDATE +PRVT_ILM.LOCK_ILM_DICT +PRVT_ILM.POPULATE_GRP_DEP +PRVT_ILM.POPULATE_TBS_STAT +PRVT_ILM.PREVIEW_ILM +PRVT_ILM.PRINT_ADO_INFO +PRVT_ILM.PRINT_ILMOBJ +PRVT_ILM.PRINT_OBJPOLICY_INFO +PRVT_ILM.PRINT_TAB_ADOJOB +PRVT_ILM.PRINT_TAB_NUMBERS +PRVT_ILM.PRINT_TAB_OBJPOLICY_INFO +PRVT_ILM.PRINT_TAB_OBJPOLICY_STAT +PRVT_ILM.PRINT_TAB_RID +PRVT_ILM.PRINT_TBS_STAT +PRVT_ILM.PURGE_ILM +PRVT_ILM.REMOVE_FROM_ILM +PRVT_ILM.SCHEDULE_COLSTATS_FLUSH +PRVT_ILM.SCHEDULE_ROWMAPS_FLUSH +PRVT_ILM.SCHEDULE_SEGMENTS_FLUSH +PRVT_ILM.SETDEBUG +PRVT_ILM.STOPJOBS +PRVT_ILM.STOPJOBS1 +PRVT_ILM.STORE_VALID_INDEXES +PRVT_ILM.TRACE +PRVT_ILM.UPDATE_ILMEXECUTION +PRVT_ILM.UPDATE_JOB_STATUS +PRVT_ILM.UPDATE_TAB_ILMJOB +PRVT_ILM.VALIDATE_EXECID +PRVT_ILM.VERIFY_PRECONDITION_POLICIES +PRVT_ILM.VERIFY_SUCCESS_POLICY +PRVT_PARTREC_NOPRIV. +PRVT_PARTREC_NOPRIV.GET_TABLE_DEFINITION +PRVT_PC. +PRVT_PC.CHECK_PC_BLOCK +PRVT_PC.CLIP_PC +PRVT_PC.CREATE_PC +PRVT_PC.GET_PT_IDS +PRVT_PC.OCI_CREATE_PC +PRVT_PC.TO_GEOMETRY +PRVT_REPORT_REGISTRY. +PRVT_REPORT_REGISTRY.REGISTER_CLIENTS +PRVT_REPORT_TAGS. +PRVT_REPORT_TAGS.BUILD_BINDS_TAG +PRVT_REPORT_TAGS.BUILD_BUCKET_TAG +PRVT_REPORT_TAGS.BUILD_EMPLOYEE_TAG +PRVT_REPORT_TAGS.BUILD_FMWK_TEST_TAG +PRVT_REPORT_TAGS.BUILD_HISTOGRAM_TAG +PRVT_REPORT_TAGS.BUILD_REPORT_REF_TAG +PRVT_REPORT_TAGS.BUILD_REPORT_TAG +PRVT_REPORT_TAGS.BUILD_STAT_GROUP_TAG +PRVT_REPORT_TAGS.BUILD_STAT_TAG +PRVT_REPORT_TAGS.BUILD_XPLAN_TAG +PRVT_RTADDM. +PRVT_RTADDM.DESCRIBETRIGGER +PRVT_RTADDM.GETDATA +PRVT_RTADDM.GETSECTIONS +PRVT_RTADDM.GETTRIGGERREASONXML +PRVT_RTADDM.RAC_FLOOD_CONTROL +PRVT_SAM. +PRVT_SAM.BEST_AGGREGATE_LOCATIONS +PRVT_SAM.GEOMETRY_OF_TILE +PRVT_SAM.SIMPLIFY_GEOMETRY +PRVT_SMGUTIL. +PRVT_SMGUTIL.CHECK_PACK_ENABLED +PRVT_SMGUTIL.CHECK_RAT_OPTION +PRVT_SMGUTIL.IS_PACK_ENABLED +PRVT_SMGUTIL.IS_RAT_OPTION_ENABLED +PRVT_SMGUTIL.PRVT_PACK_ENABLED +PRVT_SMGUTIL.VALIDATE_ARG_LEN +PRVT_SQLADV_INFRA. +PRVT_SQLADV_INFRA.CREATE_TASK +PRVT_SQLADV_INFRA.IMPLEMENT_TUNING_TASK_XML +PRVT_SQLADV_INFRA.REPORT_AUTO_TUNING_TASK +PRVT_SQLPA. +PRVT_SQLPA.I_LEVEL_FLAGS_TO_SQL_FLAGS +PRVT_SQLPA.I_STS_FROM_EXEC +PRVT_SQLPA.REPORT_SPA_TASK_COMPOSITE_XML +PRVT_SQLPA.REPORT_SQLPA_TASK +PRVT_SQLPA.REPORT_WORKLOAD_XML +PRVT_SQLPROF_INFRA. +PRVT_SQLPROF_INFRA.ACCEPT_SQL_PROFILE +PRVT_SQLPROF_INFRA.ALTER_SQL_PROFILE +PRVT_SQLPROF_INFRA.DROP_ALL_SQL_PROFILES +PRVT_SQLPROF_INFRA.DROP_SQL_PROFILE +PRVT_SQLSET_INFRA. +PRVT_SQLSET_INFRA.CREATE_SQLSET +PRVT_SYS_TUNE_MVIEW.ADVISE_MVIEW_LOG +PRVT_SYS_TUNE_MVIEW.ANALYZE_MVLOGS +PRVT_SYS_TUNE_MVIEW.CHECK_BUFFER_OVERFLOW +PRVT_SYS_TUNE_MVIEW.CHECK_TUNED +PRVT_SYS_TUNE_MVIEW.CREATE_SUB_MV +PRVT_SYS_TUNE_MVIEW.DELETE_REC_ACTIONS +PRVT_SYS_TUNE_MVIEW.DROP_SUB_MV +PRVT_SYS_TUNE_MVIEW.DUMP_MVLOG_DDL +PRVT_SYS_TUNE_MVIEW.FINALIZE_TASK +PRVT_SYS_TUNE_MVIEW.INSERT_MESSAGE +PRVT_SYS_TUNE_MVIEW.INSERT_REC_ACTION +PRVT_SYS_TUNE_MVIEW.INTERNAL_EXPLAIN_MVIEW +PRVT_SYS_TUNE_MVIEW.PROCESS_SINGLE_TOP_MV +PRVT_SYS_TUNE_MVIEW.RECORD_SUB_MV +PRVT_SYS_TUNE_MVIEW.TRACE_DEBUG +PRVT_SYS_TUNE_MVIEW.UPDATE_SUB_MV +PRVT_TIN. +PRVT_TIN.CHECK_TIN_BLOCK +PRVT_TIN.CLIP_TIN +PRVT_TIN.CREATE_TIN +PRVT_TIN.OCI_CREATE_TIN +PRVT_TIN.TO_GEOMETRY +PRVT_TUNE_MVIEW. +PRVT_TUNE_MVIEW.GENERATE_CHECKSUM +PRVT_TUNE_MVIEW.SETUP_PARAMETERS +PRVT_TUNE_MVIEW.TUNE_MVIEW +PRVT_TUNE_MVIEW.VALIDATE_TUNE_MVIEW +PRVT_UADV. +PRVT_UADV.CALCULATE_RBU_SIZES +PRVT_UADV.COUNT_UNDO_TABLESPACES +PRVT_UADV.EXECUTE +PRVT_UADV.GET_DBID +PRVT_UADV.GET_UNDO_MANAGEMENT +PRVT_UADV.GET_UNDO_RETENTION +PRVT_UADV.GET_UNDO_TABLESPACE +PRVT_UADV.IS_AUTOTUNE_ENABLED +PRVT_WORKLOAD. +PRVT_WORKLOAD.ADD_STATEMENT +PRVT_WORKLOAD.CHECK_OR_CREATE_REFERENCE +PRVT_WORKLOAD.CREATE_REPORT +PRVT_WORKLOAD.CREATE_WORKLOAD +PRVT_WORKLOAD.DELETE_REFERENCE +PRVT_WORKLOAD.DELETE_STATEMENT +PRVT_WORKLOAD.DELETE_USER_SQLWKLD +PRVT_WORKLOAD.DELETE_WORKLOAD +PRVT_WORKLOAD.GET_REPORT +PRVT_WORKLOAD.IMPORT_SCHEMA +PRVT_WORKLOAD.IMPORT_SQLCACHE +PRVT_WORKLOAD.IMPORT_STS +PRVT_WORKLOAD.IMPORT_SUMADV +PRVT_WORKLOAD.IMPORT_USER +PRVT_WORKLOAD.I_COPY_TO_LOCAL_STS +PRVT_WORKLOAD.I_OPEN_SQLWKLD_SQLSET_CURSOR +PRVT_WORKLOAD.PARAM_VALIDATE +PRVT_WORKLOAD.RECORD_JNL_ENTRY +PRVT_WORKLOAD.RESET_WORKLOAD +PRVT_WORKLOAD.SETUP_PARAMETERS +PRVT_WORKLOAD.SETUP_TEMPLATES +PRVT_WORKLOAD.SYNONYM +PRVT_WORKLOAD.TEST_API +PRVT_WORKLOAD.UPDATE_STATEMENT +PRVT_WORKLOAD_NOPRIV. +PRVT_WORKLOAD_NOPRIV.DELETE_STATEMENT +PRVT_WORKLOAD_NOPRIV.UPDATE_STATEMENT +PRV_XID +PRV_XIDSLT +PRV_XIDSQN +PRV_XIDUSN +PSERIAL# +PSL_MODE +PSNUMBER +PSTDY_DATAPUMP_SUPPORT. +PSTDY_DATAPUMP_SUPPORT.INSTANCE_CALLOUT_IMP +PSTDY_DATAPUMP_SUPPORT.INSTANCE_EXPORT_ACTION +PSVCNAME +PTX +PTX_XID +PTX_XIDSLT +PTX_XIDSQN +PTX_XIDUSN +PUBLISHER_ADDRESS +PUBLISHER_NAME +PUBLISHER_PROTOCOL +PUBLISHER_RULE +PUBLISHER_RULESET +PUBLISHER_RULE_NAME +PUBLISHER_STATE +PUBLISHER_TRANSFORMATION +PULL_PRED +PURGEABLE +PURGED_CURSOR +PURGE_ASYNCHRONOUS +PURGE_DEFERRED +PURGE_DONE +PURGE_ENDTIME +PURGE_ID +PURGE_INTERVAL +PURGE_ITEM_SIZE +PURGE_OBJECT +PURGE_OPTION +PURGE_PERIOD +PURGE_SCN +PURGE_STAGE +PURGE_START +PURGE_THRESHOLD +PURGE_TIME +PURITY +PURPOSE +PUSH_DEFERRED_RPC +PUSH_HAVING_TO_GBY +PUSH_PRED +PUSH_SUBQ +PXID +PXIDSLT +PXIDSQN +PXIDUSN +PX_FAULT_TOLERANCE +PX_FLAGS +PX_IS_CROSS_INSTANCE +PX_JOIN_FILTER +PX_MAXDOP +PX_MAXDOP_INSTANCES +PX_MISMATCH +PX_QCINST_ID +PX_QCSID +PX_SERVER# +PX_SERVERS_ALLOCATED +PX_SERVERS_EXECS_DELTA +PX_SERVERS_EXECS_TOTAL +PX_SERVERS_EXECUTIONS +PX_SERVERS_REQUESTED +PX_SERVER_GROUP +PX_SERVER_SET +P_OBJ_OWNER +P_OBJ_TYPE +P_SUB_OBJ_NAME1 +P_SUB_OBJ_NAME2 +P_SUB_OBJ_NAME3 +P_SUB_OBJ_NAME4 +P_TOP_OBJ_NAME +QBLOCK_NAME +QB_NAME +QCINST_ID +QCSERIAL# +QCSID +QC_INSTANCE_GROUP +QC_INSTANCE_ID +QC_INST_ID +QC_SESSION_ID +QC_SESSION_SERIAL# +QID +QMNC_PID +QNAME +QOS +QOSFLAGS +QOS_PC_ITT +QOS_PC_KEY +QOS_PC_RANK +QOS_PC_RTT +QRY2OPT. +QUALIFIED_COL_NAME +QUALIFIER_ID1 +QUALIFIER_ID2 +QUAL_SCHEMA_URL +QUERY +QUERYID +QUERYTEXT +QUERY_IS_APPROX +QUERY_LEN +QUERY_ONLY +QUERY_TXT +QUEUE +QUEUED +QUEUEDC +QUEUED_TIME +QUEUEING_MTH +QUEUEING_P1 +QUEUE_CURR +QUEUE_ID +QUEUE_LENGTH +QUEUE_NAME +QUEUE_OWNER +QUEUE_ROWP +QUEUE_SCHEMA +QUEUE_SIZE +QUEUE_STATE +QUEUE_TABLE +QUEUE_TABLE_ID +QUEUE_TABNUM +QUEUE_TIME_OUTS +QUEUE_TO_HBA_LATENCY +QUEUE_TO_QUEUE +QUEUE_TYPE +QUEUING_TIME +QUIESCE_TIME +QUOTAGROUP_INCARNATION +QUOTAGROUP_NUMBER +QUOTA_IN_MB +QUOTA_LIMIT_MB +QUOTA_SIZE +QUOTA_USED +RAC +RAC_INSTANCE +RAC_MODE +RADDR +RADIX +RAISE_EVENTS +RAISE_TRANSLATION_ERROR +RANGE_ID +RANK +RATIONALE_ID +RATIONALE_NAME +RBA +RBABLK +RBABYTE +RBASQN +RBO_OUTLINE +RBR +RBR_FORCED_STALE +RBR_FORCED_WRITE +RCVDC +RCVSERVERS +RCV_SEQ_NO +RDBID +RDF$DOMSALABEL.ODCIAGGREGATEINITIALIZE +RDF$DOMSALABEL.ODCIAGGREGATEITERATE +RDF$DOMSALABEL.ODCIAGGREGATEMERGE +RDF$DOMSALABEL.ODCIAGGREGATETERMINATE +RDF$GRANT_OLS_PRIVS. +RDF$LBACLAB. +RDF$LBACLAB.COMPARE +RDF$LBACLAB.FINDDOMINATINGOF +RDF$LBACLAB.PRINTALL +RDF$LBACLAB.RELOAD +RDFCTX_EXTRACTOR.BATCHEXTRACTRDF +RDFCTX_EXTRACTOR.CLOSEDRIVER +RDFCTX_EXTRACTOR.EXTRACTRDF +RDFCTX_EXTRACTOR.GETCONTEXT +RDFCTX_EXTRACTOR.GETDESCRIPTION +RDFCTX_EXTRACTOR.RDFRETURNTYPE +RDFCTX_EXTRACTOR.STARTDRIVER +RDFCTX_WS_EXTRACTOR.CLOSEDRIVER +RDFCTX_WS_EXTRACTOR.EXTRACTRDF +RDFCTX_WS_EXTRACTOR.GETDESCRIPTION +RDFCTX_WS_EXTRACTOR.RDFRETURNTYPE +RDFCTX_WS_EXTRACTOR.STARTDRIVER +RDFSA_DOMLBL. +RDFSA_LABELGEN.FINDDOMINATINGOF +RDFSA_LABELGEN.GETNUMERICLABEL +RDFSA_LABELGEN.SETDEPRESOURCES +RDFSA_RESOURCE.GETLABEL +RDFSA_RESOURCE.GETLABELCOUNT +RDFSA_RESOURCE.GETRESOURCE +RDFSA_RESOURCE.RDFSA_RESOURCE +RDF_APIS. +RDF_APIS.ADD_DATATYPE_INDEX +RDF_APIS.ADD_SEM_INDEX +RDF_APIS.ALTER_DATATYPE_INDEX +RDF_APIS.ALTER_ENTAILMENT +RDF_APIS.ALTER_MODEL +RDF_APIS.ALTER_SEM_INDEXES +RDF_APIS.ALTER_SEM_INDEX_ON_ENTAILMENT +RDF_APIS.ALTER_SEM_INDEX_ON_MODEL +RDF_APIS.ANALYZE_ENTAILMENT +RDF_APIS.ANALYZE_INTERMEDIATE +RDF_APIS.ANALYZE_MODEL +RDF_APIS.ANALYZE_RULES_INDEX +RDF_APIS.APPEND_SEM_NETWORK_DATA +RDF_APIS.BUILD_PG_RDFVIEW_INDEXES +RDF_APIS.BULK_LOAD_FROM_STAGING_TABLE +RDF_APIS.CASTTOBOOLEAN +RDF_APIS.CASTTODATETIME +RDF_APIS.CASTTODECIMAL +RDF_APIS.CASTTODOUBLE +RDF_APIS.CASTTOFLOAT +RDF_APIS.CASTTOINTEGER +RDF_APIS.CASTTOSTRING +RDF_APIS.CLEANUP_BATCH_LOAD +RDF_APIS.CLEANUP_FAILED +RDF_APIS.COMPOSE_CANON_TERM +RDF_APIS.COMPOSE_RDF_TERM +RDF_APIS.CONVERT_TO_GML311_LITERAL +RDF_APIS.CONVERT_TO_WKT_LITERAL +RDF_APIS.CREATE_ENTAILMENT +RDF_APIS.CREATE_LOGICAL_NETWORK +RDF_APIS.CREATE_PG_RDFVIEW +RDF_APIS.CREATE_RDFVIEW_MODEL +RDF_APIS.CREATE_RDF_MODEL +RDF_APIS.CREATE_RDF_NETWORK +RDF_APIS.CREATE_RULEBASE +RDF_APIS.CREATE_RULES_INDEX +RDF_APIS.CREATE_SEM_MODEL +RDF_APIS.CREATE_SEM_NETWORK +RDF_APIS.CREATE_SOURCE_EXTERNAL_TABLE +RDF_APIS.CREATE_SPARQL_UPDATE_TABLES +RDF_APIS.CREATE_VIRTUAL_MODEL +RDF_APIS.DATETIMECOMP +RDF_APIS.DATETIMEEQUAL +RDF_APIS.DELETE_ENTAILMENT_STATS +RDF_APIS.DELETE_MODEL_STATS +RDF_APIS.DELETE_TRIPLES +RDF_APIS.DISABLE_CHANGE_TRACKING +RDF_APIS.DISABLE_INC_INFERENCE +RDF_APIS.DISABLE_INMEMORY +RDF_APIS.DROP_DATATYPE_INDEX +RDF_APIS.DROP_ENTAILMENT +RDF_APIS.DROP_LOGICAL_NETWORK +RDF_APIS.DROP_MODEL_STATS +RDF_APIS.DROP_PG_RDFVIEW +RDF_APIS.DROP_PG_RDFVIEW_INDEXES +RDF_APIS.DROP_RDFVIEW_MODEL +RDF_APIS.DROP_RDF_MODEL +RDF_APIS.DROP_RDF_NETWORK +RDF_APIS.DROP_RULEBASE +RDF_APIS.DROP_RULES_INDEX +RDF_APIS.DROP_SEM_INDEX +RDF_APIS.DROP_SEM_MODEL +RDF_APIS.DROP_SEM_NETWORK +RDF_APIS.DROP_SPARQL_UPDATE_TABLES +RDF_APIS.DROP_USER_INFERENCE_OBJS +RDF_APIS.DROP_VIRTUAL_MODEL +RDF_APIS.ENABLE_CHANGE_TRACKING +RDF_APIS.ENABLE_INC_INFERENCE +RDF_APIS.ENABLE_INMEMORY +RDF_APIS.ESCAPE_CLOB_TERM +RDF_APIS.ESCAPE_CLOB_VALUE +RDF_APIS.ESCAPE_RDF_TERM +RDF_APIS.ESCAPE_RDF_VALUE +RDF_APIS.EXCHANGE_MODEL_PART$ +RDF_APIS.EXPORT_ENTAILMENT_STATS +RDF_APIS.EXPORT_MODEL_STATS +RDF_APIS.EXPORT_RDFVIEW_MODEL +RDF_APIS.GATHER_MODEL_STATS +RDF_APIS.GETV$BOOLEANVAL +RDF_APIS.GETV$CALENDARORDERVAL +RDF_APIS.GETV$DATATYPEVAL +RDF_APIS.GETV$DATETIMETZVAL +RDF_APIS.GETV$DATETZVAL +RDF_APIS.GETV$EBVVAL +RDF_APIS.GETV$GEOMETRYVAL +RDF_APIS.GETV$GEOSRID +RDF_APIS.GETV$LANGVAL +RDF_APIS.GETV$NUMERICVAL +RDF_APIS.GETV$ORDERFAMILY +RDF_APIS.GETV$RDFTERMSTRING +RDF_APIS.GETV$STRINGANDLANGVAL +RDF_APIS.GETV$STRINGVAL +RDF_APIS.GETV$STRVAL +RDF_APIS.GETV$TIMETZVAL +RDF_APIS.GET_CHANGE_TRACKING_INFO +RDF_APIS.GET_INC_INF_INFO +RDF_APIS.GET_MODEL_ID +RDF_APIS.GET_MODEL_NAME +RDF_APIS.GET_MODEL_STATS +RDF_APIS.GET_OBJECT_ID +RDF_APIS.GET_SEM_INDEX_INFO +RDF_APIS.GET_TRIPLE_ID +RDF_APIS.GET_VALUE$_TYPE$_FUNC +RDF_APIS.HASHCLOB +RDF_APIS.IMPORT_ENTAILMENT_STATS +RDF_APIS.IMPORT_MODEL_STATS +RDF_APIS.IS_REIFIED_QUAD +RDF_APIS.IS_TRIPLE +RDF_APIS.LANGMATCHES +RDF_APIS.LOAD_INTO_STAGING_TABLE +RDF_APIS.LOOKUP_ENTAILMENT +RDF_APIS.LOOKUP_LITERAL +RDF_APIS.LOOKUP_RULES_INDEX +RDF_APIS.MERGE_MODELS +RDF_APIS.MIGRATE_DATA_TO_CURRENT +RDF_APIS.MOVE_SEM_NETWORK_DATA +RDF_APIS.PRIVILEGE_ON_APP_TABLES +RDF_APIS.PURGE_UNUSED_VALUES +RDF_APIS.RAISEURIERROR +RDF_APIS.RDFTERMCOMP +RDF_APIS.RDFTERMEQUAL +RDF_APIS.REFRESH_QUERY_STATE +RDF_APIS.REFRESH_SEM_NETWORK_INDEX_INFO +RDF_APIS.REFRESH_SEM_TABLESPACE_NAMES +RDF_APIS.REMOVE_DUPLICATES +RDF_APIS.RENAME_ENTAILMENT +RDF_APIS.RENAME_MODEL +RDF_APIS.RES2VID +RDF_APIS.RESTORE_SEM_NETWORK_DATA +RDF_APIS.RESUME_LOAD_FROM_STAGING_TABLE +RDF_APIS.SET_ENTAILMENT_STATS +RDF_APIS.SET_MODEL_STATS +RDF_APIS.SET_SESSION_PARAM +RDF_APIS.SPARQL_BNODE +RDF_APIS.SPARQL_COALESCE +RDF_APIS.SPARQL_CONCAT +RDF_APIS.SPARQL_CONTAINS +RDF_APIS.SPARQL_ENCODE_FOR_URI +RDF_APIS.SPARQL_IF +RDF_APIS.SPARQL_LCASE +RDF_APIS.SPARQL_REPLACE +RDF_APIS.SPARQL_STRAFTER +RDF_APIS.SPARQL_STRBEFORE +RDF_APIS.SPARQL_STRDT +RDF_APIS.SPARQL_STRENDS +RDF_APIS.SPARQL_STRLANG +RDF_APIS.SPARQL_STRLEN +RDF_APIS.SPARQL_STRSTARTS +RDF_APIS.SPARQL_STRUUID +RDF_APIS.SPARQL_SUBSTR +RDF_APIS.SPARQL_TIMEZONE +RDF_APIS.SPARQL_TO_SQL +RDF_APIS.SPARQL_UCASE +RDF_APIS.SPARQL_URI +RDF_APIS.SPARQL_UUID +RDF_APIS.START_BATCH$ +RDF_APIS.SWAP_NAMES +RDF_APIS.SYN_ORIG_VALUE +RDF_APIS.SYN_ORIG_VALUE_BODY +RDF_APIS.UNESCAPE_CLOB_TERM +RDF_APIS.UNESCAPE_CLOB_VALUE +RDF_APIS.UNESCAPE_RDF_TERM +RDF_APIS.UNESCAPE_RDF_VALUE +RDF_APIS.UPDATE_MODEL +RDF_APIS.VALIDATE_ENTAILMENT +RDF_APIS.VALIDATE_GEOMETRIES +RDF_APIS.VALIDATE_MODEL +RDF_APIS.VALUE_NAME_PREFIX +RDF_APIS.VALUE_NAME_PREFIX_EXPR +RDF_APIS.VALUE_NAME_SUFFIX +RDF_APIS.VALUE_NAME_SUFFIX_EXPR +RDF_APIS_INTERNAL. +RDF_APIS_INTERNAL.AUTONOMOUSDDLAP +RDF_APIS_INTERNAL.AUTONOMOUSDDLAPD +RDF_APIS_INTERNAL.AUTONOMOUSDDLCRV +RDF_APIS_INTERNAL.AUTONOMOUSDDLCT +RDF_APIS_INTERNAL.AUTONOMOUSDDLDT +RDF_APIS_INTERNAL.AUTONOMOUSDDLDTP +RDF_APIS_INTERNAL.AUTONOMOUSDDLDV +RDF_APIS_INTERNAL.AUTONOMOUSDDLGP +RDF_APIS_INTERNAL.AUTONOMOUSDDLGTP +RDF_APIS_INTERNAL.AUTONOMOUSDDLGV +RDF_APIS_INTERNAL.AUTONOMOUSDDLTP +RDF_APIS_INTERNAL.AUTONOMOUSDMLIL +RDF_APIS_INTERNAL.AUTONOMOUSDMLUP +RDF_APIS_INTERNAL.AUTONOMOUSDMLUPV +RDF_APIS_INTERNAL.BUILDPRECOMPSIG +RDF_APIS_INTERNAL.CANONICAL_DATETIME +RDF_APIS_INTERNAL.CANONICAL_DATETIME_TZ +RDF_APIS_INTERNAL.CANONICAL_NUMERIC +RDF_APIS_INTERNAL.CANONICAL_STRING_LANG +RDF_APIS_INTERNAL.CANONICAL_STRING_VAL +RDF_APIS_INTERNAL.CHECKDUPLICATEMODELS +RDF_APIS_INTERNAL.CHECKRDFVWMODEL +RDF_APIS_INTERNAL.CHECKVMNOTSUPPORTED +RDF_APIS_INTERNAL.CHECK_ANC_PART_EXISTENCE +RDF_APIS_INTERNAL.CHECK_MODEL_STATS_PRIV +RDF_APIS_INTERNAL.CLEANUPENTAILMENTS +RDF_APIS_INTERNAL.CLEANUPMODELS +RDF_APIS_INTERNAL.CLEANUPRULEBASES +RDF_APIS_INTERNAL.CLEANUPRULESINDEX +RDF_APIS_INTERNAL.CLEANUPTABLES +RDF_APIS_INTERNAL.CLEANUP_FAILED +RDF_APIS_INTERNAL.COMPAREALIASLISTS +RDF_APIS_INTERNAL.COMPAREIDLISTS +RDF_APIS_INTERNAL.COMPUTECLOBHASH +RDF_APIS_INTERNAL.CREATENODE +RDF_APIS_INTERNAL.CREATEPRECOMPSTATUS +RDF_APIS_INTERNAL.CREATE_CLIQUE_TS_TABLES +RDF_APIS_INTERNAL.CREATE_PREDEFINED_RBS +RDF_APIS_INTERNAL.CREATE_RULEBASE +RDF_APIS_INTERNAL.CREATE_RULES_INDEX_TRNS +RDF_APIS_INTERNAL.CREATE_STATS_PARTITION +RDF_APIS_INTERNAL.CREATE_TEMP_STATS_TABLE +RDF_APIS_INTERNAL.DELETEREDUNDANTTRIPS +RDF_APIS_INTERNAL.DISABLE_CHANGE_TRACKING +RDF_APIS_INTERNAL.DISABLE_CHANGE_TRACKING_MODEL +RDF_APIS_INTERNAL.DISABLE_INC_INFERENCE +RDF_APIS_INTERNAL.DOTRUNCATEAPPTABLE +RDF_APIS_INTERNAL.DROPDEPVMS +RDF_APIS_INTERNAL.DROP_INF_WORKING_TABS +RDF_APIS_INTERNAL.DROP_RULEBASE +RDF_APIS_INTERNAL.DROP_RULES_INDEX +RDF_APIS_INTERNAL.DROP_STATS_PARTITION +RDF_APIS_INTERNAL.DROP_TEMP_STATS_TABLE +RDF_APIS_INTERNAL.DROP_USER +RDF_APIS_INTERNAL.ENABLE_CHANGE_TRACKING +RDF_APIS_INTERNAL.ENABLE_INC_INFERENCE +RDF_APIS_INTERNAL.EXPANDPATTERN +RDF_APIS_INTERNAL.EXPANDRULEPATTERN +RDF_APIS_INTERNAL.EXTRACTORADEFAULTS +RDF_APIS_INTERNAL.FETCHIDLIST +RDF_APIS_INTERNAL.FETCHTABIDLIST +RDF_APIS_INTERNAL.GETIENTAILSTATUS +RDF_APIS_INTERNAL.GETNUMERICEVENT +RDF_APIS_INTERNAL.GETPRECOMPIDXNAME +RDF_APIS_INTERNAL.GETPRECOMPSTATUS +RDF_APIS_INTERNAL.GETSTATUSFORVM +RDF_APIS_INTERNAL.GETVMVIEWNAME +RDF_APIS_INTERNAL.GET_APP_TABLE_INFO +RDF_APIS_INTERNAL.GET_MODEL_STATS +RDF_APIS_INTERNAL.GET_MODEL_STATS_INFO +RDF_APIS_INTERNAL.GET_OLS_POLICY_NAME +RDF_APIS_INTERNAL.GET_OWNERS +RDF_APIS_INTERNAL.GET_PREV_INF_START_TIME +RDF_APIS_INTERNAL.GET_RDF_PARAMETER +RDF_APIS_INTERNAL.GET_TABLESPACE_NAME +RDF_APIS_INTERNAL.GET_TRACKING_START_TIME +RDF_APIS_INTERNAL.GRANTS_FOR_PREDEFINED_RBS +RDF_APIS_INTERNAL.HASHCLOB +RDF_APIS_INTERNAL.HAS_ENABLED_OLS_POLICY +RDF_APIS_INTERNAL.HAS_OLS_POLICY +RDF_APIS_INTERNAL.HAS_TRIPLE_LEVEL_OLS +RDF_APIS_INTERNAL.HAS_VERSION_ENABLED_MODEL +RDF_APIS_INTERNAL.HAS_VPD_ENABLED_MODEL +RDF_APIS_INTERNAL.INTERNAL_GET_LOCK +RDF_APIS_INTERNAL.INTERNAL_GET_LOCKHANDLE +RDF_APIS_INTERNAL.IS_BULK_LOAD_USED +RDF_APIS_INTERNAL.IS_CHANGE_TRACKING_ENABLED +RDF_APIS_INTERNAL.IS_INC_INF_ENABLED +RDF_APIS_INTERNAL.IS_SECURITY_OR_VERSION_ENABLED +RDF_APIS_INTERNAL.KSDWRF +RDF_APIS_INTERNAL.LOCK_MODEL +RDF_APIS_INTERNAL.LOCK_RDF_VALUE$ +RDF_APIS_INTERNAL.LOCK_RULEBASE +RDF_APIS_INTERNAL.LOCK_RULEINDEX +RDF_APIS_INTERNAL.LOCK_STATSPARTITION +RDF_APIS_INTERNAL.LOCK_VIRTUALMODEL +RDF_APIS_INTERNAL.LOOKUPGRAPHS +RDF_APIS_INTERNAL.LOOKUP_CREATE_LITERAL +RDF_APIS_INTERNAL.LOOKUP_LITERAL +RDF_APIS_INTERNAL.NOTIFY_DROP_MODEL +RDF_APIS_INTERNAL.NOTIFY_DROP_NETWORK +RDF_APIS_INTERNAL.NOTIFY_DROP_USER +RDF_APIS_INTERNAL.NOTIFY_LOAD_MODEL +RDF_APIS_INTERNAL.NOTIFY_MODEL_DML +RDF_APIS_INTERNAL.POPIDSFROMVM +RDF_APIS_INTERNAL.POPNAMESFROMIDS +RDF_APIS_INTERNAL.POPULATEENTINFO +RDF_APIS_INTERNAL.POPULATEGRAPHS +RDF_APIS_INTERNAL.POPULATE_RDF_AND_RDFS_RBS +RDF_APIS_INTERNAL.PRECOMPDELETE +RDF_APIS_INTERNAL.PRECOMPSETSTATUS +RDF_APIS_INTERNAL.PROCESSGRAPHS +RDF_APIS_INTERNAL.PURGE_RDF_DELTA +RDF_APIS_INTERNAL.RDFR_DELETE_CALLBACK +RDF_APIS_INTERNAL.RDFR_INSERT_CALLBACK +RDF_APIS_INTERNAL.RDFVPD_SET_TRUSTED_PROG +RDF_APIS_INTERNAL.RELEASELOCKS +RDF_APIS_INTERNAL.RESOLVEENTAILMENTS +RDF_APIS_INTERNAL.RESOLVEMODELS +RDF_APIS_INTERNAL.RESOLVERULEBASES +RDF_APIS_INTERNAL.RESOLVERULESINDEX +RDF_APIS_INTERNAL.RESOLVETABLES +RDF_APIS_INTERNAL.RULEBASEPROPIDS +RDF_APIS_INTERNAL.SETPRECOMPSTATUS +RDF_APIS_INTERNAL.SPARQL_GET_SOURCES +RDF_APIS_INTERNAL.SPARQL_TO_SQL +RDF_APIS_INTERNAL.STORAGE_VERSION_ENABLED +RDF_APIS_INTERNAL.TEST_INPROGRESS +RDF_APIS_INTERNAL.TRUNCATE_STATS_PARTITION +RDF_APIS_INTERNAL.UPDATE_RDF_DELTA_TS +RDF_APIS_INTERNAL.UPDATE_TIME_STAMP +RDF_APIS_INTERNAL.VMCLEARMETADATA +RDF_APIS_INTERNAL.VMDELETE +RDF_APIS_INTERNAL.VMUNIONVIEWEXISTS +RDF_APIS_OPER_INTERNAL. +RDF_APIS_OPER_INTERNAL.CHECK_ANC_DIST_EXISTENCE +RDF_APIS_OPER_INTERNAL.CHECK_ANC_PART_EXISTENCE +RDF_APIS_OPER_INTERNAL.CHECK_USER_RULEBASES_EXISTENCE +RDF_APIS_OPER_INTERNAL.CONSTRUCTROWIDTABNAME +RDF_APIS_OPER_INTERNAL.CONSTRUCTSTATTABNAME +RDF_APIS_OPER_INTERNAL.CONSTRUCT_ONT_DIST_BASE +RDF_APIS_OPER_INTERNAL.CONSTRUCT_ONT_DIST_QUERY +RDF_APIS_OPER_INTERNAL.CONSTRUCT_ONT_QUERY +RDF_APIS_OPER_INTERNAL.CONSTRUCT_ONT_UNION_QUERY +RDF_APIS_OPER_INTERNAL.DELETE_METADATA +RDF_APIS_OPER_INTERNAL.EXTRACT_PARAMS +RDF_APIS_OPER_INTERNAL.EXTRACT_RULEBASES +RDF_APIS_OPER_INTERNAL.GETINDEXMODELRULEBASE +RDF_APIS_OPER_INTERNAL.GET_OBJ_ID +RDF_APIS_OPER_INTERNAL.GET_PRED_ID +RDF_APIS_OPER_INTERNAL.GET_SUBJ_ID +RDF_APIS_OPER_INTERNAL.INSERT_METADATA +RDF_APIS_OPER_INTERNAL.POV_PROC +RDF_APIS_OPER_INTERNAL.RENAME_METADATA +RDF_APIS_OPER_INTERNAL.STATS_EXIST +RDF_APIS_OPER_INTERNAL.USE_STATISTICS +RDF_APIS_OPER_INTERNAL.VALIDATE_MODELS_RULES_IN +RDF_APIS_USER. +RDF_APIS_USER.CHECKMODELS +RDF_APIS_USER.CHECKRULEBASES +RDF_APIS_USER.CHECKVMCONSTRAINTS +RDF_APIS_USER.CHECKVMODEL +RDF_APIS_USER.EXTRACTGATHERSTATSOPTS +RDF_APIS_USER.EXTRACTVALUE +RDF_APIS_USER.INFERENCE +RDF_APIS_USER.INFERENCECALLOUT +RDF_APIS_USER.SEMMODELSFROMSTRINGS +RDF_APIS_USER.SEMRULEBASESFROMSTRINGS +RDF_APIS_USER.STRINGSFROMSEMMODELS +RDF_APIS_USER.STRINGSFROMSEMRULEBASES +RDF_APIS_USER.TONUMBERINRANGE +RDF_APIS_USER.UPDATEINFERENCE +RDF_APIS_USER.UPDATEINFERENCECALLOUT +RDF_MATCH. +RDF_MATCH_IMPL_T.BELONGSINRESULT +RDF_MATCH_IMPL_T.DUMP +RDF_MATCH_IMPL_T.EXTRACTBINDVALS +RDF_MATCH_IMPL_T.FETCH_COUNTSTAR +RDF_MATCH_IMPL_T.GENVMEXPRHINT +RDF_MATCH_IMPL_T.GETTDWNOPT +RDF_MATCH_IMPL_T.ODCIGETINTERFACES +RDF_MATCH_IMPL_T.ODCITABLECLOSE +RDF_MATCH_IMPL_T.ODCITABLEDESCRIBE +RDF_MATCH_IMPL_T.ODCITABLEFETCH +RDF_MATCH_IMPL_T.ODCITABLEPREPARE +RDF_MATCH_IMPL_T.ODCITABLEREWRITE +RDF_MATCH_IMPL_T.ODCITABLESTART +RDF_MATCH_IMPL_T.PARSE_SPARQL +RDF_MATCH_IMPL_T.POPULATEGRAPHS +RDF_MATCH_IMPL_T.RECORD_GIVEN_AND_TRANS_QUERY +RDF_MATCH_IMPL_T.R_PARSE_SPARQL +RDF_MATCH_IMPL_T.SPARQL_GET_COLS +RDF_MATCH_IMPL_T.SPARQL_GET_SOURCES +RDF_MATCH_IMPL_T.SPARQL_TO_PRED +RDF_MATCH_IMPL_T.SPARQL_TO_SQL +RDMA +RDMAENABLE +RDMAPORT +RDMA_CREDITS +RE$NV_LIST.ADD_PAIR +RE$NV_LIST.GET_ALL_NAMES +RE$NV_LIST.GET_VALUE +RE$NV_LIST.REMOVE_PAIR +REA +READ +READER_LAG +READER_TOTAL_MESSAGES_DEQUEUED +READS +READS# +READS_AVG +READS_SUM +READS_SUMX2 +READTIM +READY +READ_ERRS +READ_LATENCY +READ_MB_AVG +READ_MB_SUM +READ_MB_SUMX2 +READ_ONLY +READ_SCN +READ_SEQUENCE# +READ_THREAD# +READ_TIME +READ_TIMEOUT +REALM +REALM_DESC +REALM_DESCRIPTION +REALM_ENCR_ALGO +REALM_ENCR_KEYLEN +REALM_ENCR_STATUS +REALM_NAME +REALM_ORDER +REALM_STATUS +REALM_TYPE +REALTIME_APPLY +REASON +REASON_ARGUMENT_1 +REASON_ARGUMENT_2 +REASON_ARGUMENT_3 +REASON_ARGUMENT_4 +REASON_ARGUMENT_5 +REASON_ARGUMENT_COUNT +REASON_ID +REASON_MESSAGE_ID +REASON_NAME +REASON_VALUE +RECEIVE_BUF_OR +RECEIVE_DROPPED +RECEIVE_ERRORS +RECEIVE_FRAME_ERR +RECENT_COUNT +RECENT_LIMIT +RECID +RECIPIENT +RECIPIENTS +RECIPIENT_ID +RECIPIENT_NAME +RECOMMENDATIONS +RECOMMENDATIONS_COUNT +RECOMMENDATION_COUNT +RECOMMENDATION_ID +RECORDS_TOTAL +RECORDS_USED +RECORD_CONFLICTS +RECORD_ID +RECORD_LEVEL +RECORD_SIZE +RECORD_TYPE +RECOVER +RECOVERABLE_SCRIPT_ID +RECOVERING +RECOVERY_CHECKPOINT +RECOVERY_ESTIMATED_IOS +RECOVERY_FUZZY_CHANGE# +RECOVERY_FUZZY_TIME +RECOVERY_MODE +RECOVERY_STATUS +RECOVERY_TARGET_INCARNATION# +RECURSIVE +RECURSIVE_SESSION_COUNT +RECV +RECVS +RECYCLEBIN +REC_ID +REC_NAME +REC_TYPE_ID +REDEFINITION_ID +REDO_DATA +REDO_LATENCY +REDO_SOURCE +REDO_THREAD +REDO_VALUE +REDUNDANCY +REDUNDANCY_LOWERED +REF +REFCOUNT +REFERENCED_LINK_NAME +REFERENCED_NAME +REFERENCED_OWNER +REFERENCED_TRIGGER_NAME +REFERENCED_TRIGGER_OWNER +REFERENCED_TYPE +REFERENCES_DISTINCT +REFERENCE_INDEX +REFERENCING_NAMES +REFGROUP +REFRESH_ABILITY +REFRESH_AFTER_ERRORS +REFRESH_COUNT +REFRESH_DEP_MVIEWS +REFRESH_GROUP +REFRESH_ID +REFRESH_INTERVAL +REFRESH_METHOD +REFRESH_MODE +REFRESH_MVIEW_NAME +REFRESH_OPTIMIZATIONS +REFRESH_STATEMENT +REFRESH_STATEMENT_SQL_ID +REFS_ENABLED +REF_CASCADE_CURSOR +REF_DIMENSION_ATTR +REF_LEN +REF_PTN_CONSTRAINT_NAME +REGFLAGS +REGID +REGION_NAME +REGISTER +REGISTERED +REGISTERED_AS +REGISTER_AGENT. +REGISTER_AGENT2. +REGISTER_AGENT3. +REGISTRAR +REGISTRATIONS_EXPIRED +REGISTRATIONS_INVALID +REGISTRATIONS_PURGED +REGISTRATION_TIME +REG_ID +REG_START. +REG_TIME +REJECT_LIMIT +RELATED +RELATION_ID +RELATION_NAME +RELATIVE_FNO +RELEASING +RELFILE +RELOADS +RELY +REL_FILE# +REMAINING_INSTRUCTIONS +REMALIAS +REMARK +REMARKS +REMASTERED_OBJECTS +REMASTER_CNT +REMASTER_OPS +REMASTER_TIME +REMASTER_TYPE +REMIRROR +REMOTE +REMOTE_ACCESS +REMOTE_ARCHIVE +REMOTE_CONVERGE_TAG +REMOTE_COST +REMOTE_CR_ACCESS +REMOTE_CR_COST +REMOTE_HOME +REMOTE_INC +REMOTE_INSTANCE# +REMOTE_MAPPED +REMOTE_MAPPING_MISMATCH +REMOTE_NID +REMOTE_OBJECT_NAME +REMOTE_OBJECT_TYPE +REMOTE_RID +REMOTE_ROWID +REMOTE_SCHEMA_NAME +REMOTE_TARGET +REMOTE_TEMPLATE +REMOTE_TRANS_MISMATCH +REN +REOPEN_SECS +REORDER_WIF +REPAIR_ID +REPAIR_SCRIPT +REPAIR_TIMER +REPARSE +REPEAT_INTERVAL +REPERROR_IGNORES +REPERROR_RECORDS +REPERR_CNT +REPLACEMENT_SQL_TEXT +REPLAYED +REPLAYED_LOCKS_RECEIVED +REPLAYED_LOCKS_SENT +REPLAY_COMMIT_TIME +REPLAY_COMMIT_TIME_DELTA +REPLAY_CONN +REPLAY_DEADLOCKS +REPLAY_DIR_NUMBER +REPLAY_ELAPSED_TIME +REPLAY_ID +REPLAY_INITIATION_TIMEOUT +REPLAY_OVERHEAD +REPLAY_TIME +REPLAY_USER +REPLICATION_MODE +REPLICAT_NAME +REPLSTATE +REPOPSUB +REPOPULATED +REPOPULATE_CUS +REPOPULATE_CUS_DELTA +REPOPULATE_CUS_TOTAL +REPORT +REPORT_CLASS +REPORT_COMPRESSED +REPORT_FILE +REPORT_GENERATION_TIME +REPORT_ID +REPORT_NAME +REPORT_PARAMETERS +REPORT_REF +REPORT_SUMMARY +REPRODUCED +REQUEST +REQUESTED_ANALYSIS +REQUESTED_DOP +REQUESTED_SIZE +REQUESTING_SESSION +REQUESTS +REQUESTSPERSEC +REQUEST_COUNT +REQUEST_DELETE_TRIGGER. +REQUEST_FAILURES +REQUEST_LEVEL +REQUEST_MISSES +REQUIRED +REQUIRED_CHECKPOINT_SCN +REQUIRED_MIRROR_FREE_MB +REQUIRED_START_DATE +REQUIRED_START_SCN +REQUIRES_ACO +REQ_COMP_ID +REQ_DEGREE +REQ_DESCRIPTION +REQ_NAMESPACE +REQ_REASON +REQ_START_DATE +RESENDS +RESENT +RESERVED +RESERVOIR_SAMPLING +RESETLOGS_CHANGE# +RESETLOGS_ID +RESETLOGS_SCN +RESETLOGS_TIME +RESETLOG_ID +RESET_INPROG_INDEX. +RESET_LOG_COUNTER +RESET_LOG_SCN +RESET_SCN +RESET_SCNBAS +RESET_SCNWRP +RESET_SCN_TIME +RESET_TIME +RESET_TIMESTAMP +RESET_UNDO_STAT. +RESET_VALUE +RESIZEABLE +RESIZE_STATE +RESIZE_UNIT_MB +RESOLUTION +RESOLUTION_ATTEMPTED +RESOLUTION_COLUMN +RESOLUTION_GRANULARITY +RESOLUTION_STATUS +RESOURCES_CLEANED +RESOURCE_CONSUMER_GROUP +RESOURCE_COST +RESOURCE_NAME +RESOURCE_NAME1 +RESOURCE_NAME2 +RESOURCE_OWNER +RESOURCE_PERCENTAGE +RESOURCE_PLAN +RESOURCE_TYPE +RESOURCE_UNITS +RESP +RESPONSETIMEPERREQUEST +RESTARTABLE +RESTARTQ +RESTART_ON_FAILURE +RESTART_ON_RECOVERY +RESTART_SCN +RESTART_TIME +RESTORE_AS_INTERVALS +RESTORE_BITMAP_JOBS +RESTORE_DIR +RESTORE_FORMAT +RESTORE_LOCATOR +RESTORE_MODE +RESTORE_ONLY +RESTORE_POINT_TIME +RESTORE_SCOPE +RESTORE_TIME +RESTRICTED +RESTRICTED_SYNTAX +RESTRICT_ACCESS. +RESTRICT_ALL_REF_CONS +RESULT +RESULTS +RESULT_CACHE +RESULT_CACHE_ELEMENTS +RESULT_CACHE_HITS +RESULT_ID +RESULT_TYPE +RESULT_TYPE_MOD +RESULT_TYPE_NAME +RESULT_TYPE_OWNER +RESUME_TIME +RES_ATTR +RES_SEMI +RES_TYPE +RETENTION +RETENTION_DAYS +RETENTION_IN_DAYS +RETENTION_PERIOD +RETENTION_POLICY +RETENTION_TARGET +RETENTION_TIME +RETENTION_TIMEOUT +RETENTION_TYPE +RETENTION_VALUE +RETRIES_ON_ERROR +RETRY_COUNT +RETRY_DELAY +RETRY_ON_ROW_CHANGE +RETRY_TIME +RETURNCODE +RETURN_CLASS +RETURN_CODE +RETURN_SCHEMA +RETURN_TYPE +REVERSE +REVISION +REVOKEE. +REWRITE +REWRITE_CAPABILITY +REWRITE_ENABLED +REWRITE_MODE +REWRITE_MVIEW_NAME +REWRITE_OR_ERROR +RFILE# +RFNO +RLS_INFO +RL_FIRST_CHANGE# +RL_FIRST_TIME +RL_NEXT_CHANGE# +RL_NEXT_TIME +RL_RESETLOGS_CHANGE# +RL_SEQUENCE# +RL_THREAD# +RMAN_DEVICE_TYPE +RMAN_OBJECT_TYPE +RMAN_OPERATION +RMAN_SESSION_RECID +RMAN_SESSION_STAMP +RMAN_STATUS_RECID +RMAN_STATUS_STAMP +RMJVM. +RMJVM.CHECK_FOR_RMJVM +RMJVM.HEXTOCHAR +RMJVM.RUN +RMJVM.STRIP +RM_CONSUMER_GROUP +RM_LAST_ACTION +RM_LAST_ACTION_REASON +RM_LAST_ACTION_TIME +RNAME +ROLE +ROLENAME +ROLES +ROLES_DEFAULT_ENABLED +ROLE_ID +ROLE_IS_ENABLED. +ROLE_NAME +ROLE_ROLE_PRIVS +ROLE_SYS_PRIVS +ROLE_TAB_PRIVS +ROLE_WSPACE +ROLLBACK +ROLLBACK_SEG +ROLL_INVALID_MISMATCH +ROOT +ROOT_ADDR +ROOT_DIR +ROOT_SCAN_ID +ROUNDTRIPS +ROWID +ROWIDS +ROWNER +ROWS_PROCESSED +ROWS_PROCESSED_DELTA +ROWS_PROCESSED_TOTAL +ROW_ACL +ROW_ATTRIBUTE +ROW_COUNT +ROW_ID +ROW_LEN +ROW_LEVEL +ROW_LOCK_WAITS_DELTA +ROW_LOCK_WAITS_TOTAL +ROW_MOVEMENT +ROW_RESOLUTION_COLUMN +ROW_SIZE_AVG +ROW_SIZE_MAX +ROW_SIZE_MIN +ROW_TYPE +ROW_UPDATE_COUNT +ROW_WAIT_BLOCK# +ROW_WAIT_FILE# +ROW_WAIT_OBJ# +ROW_WAIT_ROW# +RSSIZE +RS_ID +RTIME +RTMAX +RTREEJOINFUNC. +RTREEJOIN_IMP_T.CLOSESTUB +RTREEJOIN_IMP_T.FETCHSTUB +RTREEJOIN_IMP_T.ODCITABLECLOSE +RTREEJOIN_IMP_T.ODCITABLEFETCH +RTREEJOIN_IMP_T.ODCITABLESTART +RTREEJOIN_IMP_T.STARTSTUB +RTREE_IDX. +RTREE_IDX.INDEX_UPDATE +RTREE_INDEX_METHOD.ODCIGETINTERFACES +RTREE_INDEX_METHOD.ODCIINDEXALTER +RTREE_INDEX_METHOD.ODCIINDEXCLOSE +RTREE_INDEX_METHOD.ODCIINDEXCREATE +RTREE_INDEX_METHOD.ODCIINDEXDELETE +RTREE_INDEX_METHOD.ODCIINDEXDROP +RTREE_INDEX_METHOD.ODCIINDEXFETCH +RTREE_INDEX_METHOD.ODCIINDEXINSERT +RTREE_INDEX_METHOD.ODCIINDEXSTART +RTREE_INDEX_METHOD.ODCIINDEXTRUNCATE +RTREE_INDEX_METHOD.ODCIINDEXUPDATE +RULE +RULEINDEXMETHODS.ODCIGETINTERFACES +RULEINDEXMETHODS.ODCIINDEXALTER +RULEINDEXMETHODS.ODCIINDEXCLOSE +RULEINDEXMETHODS.ODCIINDEXCREATE +RULEINDEXMETHODS.ODCIINDEXDELETE +RULEINDEXMETHODS.ODCIINDEXDROP +RULEINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +RULEINDEXMETHODS.ODCIINDEXFETCH +RULEINDEXMETHODS.ODCIINDEXGETMETADATA +RULEINDEXMETHODS.ODCIINDEXINSERT +RULEINDEXMETHODS.ODCIINDEXMERGEPARTITION +RULEINDEXMETHODS.ODCIINDEXSPLITPARTITION +RULEINDEXMETHODS.ODCIINDEXSTART +RULEINDEXMETHODS.ODCIINDEXTRUNCATE +RULEINDEXMETHODS.ODCIINDEXUPDATE +RULEINDEXMETHODS.ODCIINDEXUTILCLEANUP +RULEINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +RULESET_COMMENT +RULESET_NAME +RULESET_OPTION +RULESET_STORAGE_TABLE +RULE_ACTION_CONTEXT +RULE_COMMENT +RULE_CONDITION +RULE_EVALUATION_CONTEXT_NAME +RULE_EVALUATION_CONTEXT_OWNER +RULE_ID +RULE_NAME +RULE_OPTION +RULE_OWNER +RULE_SET_COMMENT +RULE_SET_EVAL_CONTEXT_NAME +RULE_SET_EVAL_CONTEXT_OWNER +RULE_SET_NAME +RULE_SET_OBJECT_ID +RULE_SET_OWNER +RULE_SET_RULE_COMMENT +RULE_SET_RULE_ENABLED +RULE_SET_RULE_EVAL_CTX_NAME +RULE_SET_RULE_EVAL_CTX_OWNER +RULE_SET_TYPE +RULE_TYPE +RULE_VALUE +RULE_VALUE2 +RUNNING_INSTANCE +RUNNING_SESSIONS_LIMIT +RUNNING_SLAVE +RUNTIME_MEM +RUN_COUNT +RUN_DURATION +RUN_ID +RUN_MODE +RUN_NAME +RUN_OWNER +RU_BUILD_DESCRIPTION +RU_BUILD_TIMESTAMP +RU_LOGFILE +RU_VERSION +R_CONSTRAINT_NAME +R_OWNER +SADDR +SAFE_PURGE_SCN +SAFE_RESUME_SCN +SALT +SAMCLUST_IMP_T.FETCHSTUB +SAMCLUST_IMP_T.ODCITABLECLOSE +SAMCLUST_IMP_T.ODCITABLEFETCH +SAMCLUST_IMP_T.ODCITABLESTART +SAMCLUST_IMP_T.STARTSTUB +SAME_ENDIAN +SAME_RULE_CONDITION +SAMPLED +SAMPLED_ACTIVE_CONN +SAMPLED_ACTIVE_DISP +SAMPLED_ACTIVE_SRV +SAMPLED_BYTES +SAMPLED_TOTAL_CONN +SAMPLED_TOTAL_DISP +SAMPLED_TOTAL_SRV +SAMPLER_ELAPSED_TIME +SAMPLE_COUNT +SAMPLE_ID +SAMPLE_INTERVAL +SAMPLE_SIZE +SAMPLE_TIME +SAMPLE_TIME_UTC +SAMPLING_INTERVAL +SAVEPOINT_NUMBER +SAVE_AS_INTERVALS +SAVE_POINT_NUM +SA_AUDIT_ADMIN. +SA_AUDIT_ADMIN.AUDIT +SA_AUDIT_ADMIN.AUDIT_LABEL +SA_AUDIT_ADMIN.AUDIT_LABEL_ENABLED +SA_AUDIT_ADMIN.AUDIT_LABEL_ENABLED_SQL +SA_AUDIT_ADMIN.CREATE_VIEW +SA_AUDIT_ADMIN.DROP_VIEW +SA_AUDIT_ADMIN.NOAUDIT +SA_AUDIT_ADMIN.NOAUDIT_LABEL +SA_COMPONENTS. +SA_COMPONENTS.ALTER_COMPARTMENT +SA_COMPONENTS.ALTER_GROUP +SA_COMPONENTS.ALTER_GROUP_PARENT +SA_COMPONENTS.ALTER_LEVEL +SA_COMPONENTS.CREATE_COMPARTMENT +SA_COMPONENTS.CREATE_GROUP +SA_COMPONENTS.CREATE_LEVEL +SA_COMPONENTS.DROP_COMPARTMENT +SA_COMPONENTS.DROP_GROUP +SA_COMPONENTS.DROP_LEVEL +SA_LABEL_ADMIN. +SA_LABEL_ADMIN.ALTER_LABEL +SA_LABEL_ADMIN.CREATE_LABEL +SA_LABEL_ADMIN.DROP_LABEL +SA_POLICY_GRANT. +SA_SESSION. +SA_SESSION.COMP_READ +SA_SESSION.COMP_WRITE +SA_SESSION.GROUP_READ +SA_SESSION.GROUP_WRITE +SA_SESSION.LABEL +SA_SESSION.MAX_LEVEL +SA_SESSION.MAX_READ_LABEL +SA_SESSION.MAX_WRITE_LABEL +SA_SESSION.MIN_LEVEL +SA_SESSION.PRIVS +SA_SESSION.READ_LABEL +SA_SESSION.RESTORE_DEFAULT_LABELS +SA_SESSION.ROW_LABEL +SA_SESSION.SAVE_DEFAULT_LABELS +SA_SESSION.SA_USER_NAME +SA_SESSION.SET_ACCESS_PROFILE +SA_SESSION.SET_LABEL +SA_SESSION.SET_ROW_LABEL +SA_SESSION.WRITE_LABEL +SA_SYSDBA. +SA_SYSDBA.ALTER_POLICY +SA_SYSDBA.CREATE_POLICY +SA_SYSDBA.DISABLE_POLICY +SA_SYSDBA.DROP_POLICY +SA_SYSDBA.ENABLE_POLICY +SA_USER_ADMIN. +SA_USER_ADMIN.ADD_COMPARTMENTS +SA_USER_ADMIN.ADD_GROUPS +SA_USER_ADMIN.ALTER_COMPARTMENTS +SA_USER_ADMIN.ALTER_GROUPS +SA_USER_ADMIN.DROP_ALL_COMPARTMENTS +SA_USER_ADMIN.DROP_ALL_GROUPS +SA_USER_ADMIN.DROP_COMPARTMENTS +SA_USER_ADMIN.DROP_GROUPS +SA_USER_ADMIN.DROP_USER_ACCESS +SA_USER_ADMIN.SET_COMPARTMENTS +SA_USER_ADMIN.SET_DEFAULT_LABEL +SA_USER_ADMIN.SET_GROUPS +SA_USER_ADMIN.SET_LEVELS +SA_USER_ADMIN.SET_PROG_PRIVS +SA_USER_ADMIN.SET_ROW_LABEL +SA_USER_ADMIN.SET_USER_LABELS +SA_USER_ADMIN.SET_USER_PRIVS +SA_UTL. +SA_UTL.CHECK_LABEL_CHANGE +SA_UTL.CHECK_READ +SA_UTL.CHECK_WRITE +SA_UTL.DATA_LABEL +SA_UTL.DOMINATED_BY +SA_UTL.DOMINATES +SA_UTL.GREATEST_LBOUND +SA_UTL.LABEL +SA_UTL.LBAC_READ_LABEL +SA_UTL.LBAC_ROW_LABEL +SA_UTL.LBAC_WRITE_LABEL +SA_UTL.LEAST_UBOUND +SA_UTL.MERGE_LABEL +SA_UTL.NUMERIC_LABEL +SA_UTL.NUMERIC_READ_LABEL +SA_UTL.NUMERIC_ROW_LABEL +SA_UTL.NUMERIC_WRITE_LABEL +SA_UTL.SET_LABEL +SA_UTL.SET_ROW_LABEL +SA_UTL.STRICTLY_DOMINATED_BY +SA_UTL.STRICTLY_DOMINATES +SCALAR_COLUMN +SCALE +SCALE_BUF +SCALE_CLT_BUF +SCALE_FLAG +SCALE_IN_CONNECT +SCALE_LOOPS +SCALE_MSG +SCALE_OUT_CONNECT +SCALE_RECONNECT +SCALE_SVR_BUF +SCALE_UP_MULTIPLIER +SCANCNT +SCANCOMPLETES +SCANMISSES +SCANNED +SCANS +SCANS_DELTA +SCAN_COUNT +SCAN_ID +SCAN_MODE +SCAN_NULLS +SCAN_PERCENT +SCAN_RATE +SCHEDULE +SCHEDULER$NTFY_SVC_METRICS. +SCHEDULER$_BATCHERR_PIPE. +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLECLOSE +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLEFETCH +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLEPREPARE +SCHEDULER$_BATCHERR_VIEW_T.ODCITABLESTART +SCHEDULER$_EVENT_INFO.SCHEDULER$_EVENT_INFO +SCHEDULER$_JOB_EVENT_HANDLER. +SCHEDULE_CAP_ID +SCHEDULE_DISABLED +SCHEDULE_LIMIT +SCHEDULE_NAME +SCHEDULE_OWNER +SCHEDULE_STATUS +SCHEDULE_TYPE +SCHEMA +SCHEMA# +SCHEMAID +SCHEMANAME +SCHEMA_ID +SCHEMA_NAME +SCHEMA_OID +SCHEMA_OWNER +SCHEMA_URL +SCHEMA_USER +SCHWAITPERREQUEST +SCN +SCN_ADJUSTMENT +SCN_ASCENDING +SCN_NEEDED +SCN_TO_TIMESTAMP. +SCOPE +SCOPE_TABLE_NAME +SCOPE_TABLE_OWNER +SCRIPT +SCRIPT_COMMENT +SCRIPT_ID +SCRIPT_STATUS +SCRIPT_TYPE +SDO. +SDO.BVALUETODIM +SDO.COMPARE +SDO.DATETODIM +SDO.DECODE +SDO.ENCODE +SDO.HVALUETODIM +SDO.LATLONTOCODE +SDO.TO_BVALUE +SDO.TO_DATE +SDO.TO_HVALUE +SDO.TO_LAT +SDO.TO_LON +SDOAGGR.ODCIAGGREGATEINITIALIZE +SDOAGGR.ODCIAGGREGATEITERATE +SDOAGGR.ODCIAGGREGATEMERGE +SDOAGGR.ODCIAGGREGATETERMINATE +SDOCURPKG. +SDOTNPC. +SDOTNPC.ASSOCIATE_DEP_TABLES +SDOTNPC.CREATEDMLTRIGGER +SDOTNPC.DEL_BLKTAB_ROWS +SDOTNPC.DROP_DEP_TABLES +SDO_3GL. +SDO_3GL.ALPHA_SHAPE +SDO_3GL.ANYINTERACT +SDO_3GL.ANYINTERACT3D +SDO_3GL.ARC_DENSIFY +SDO_3GL.AREA3D +SDO_3GL.BEARING +SDO_3GL.CENTROID +SDO_3GL.CENTROID3D +SDO_3GL.CHECKSPATIAL +SDO_3GL.CLOSESTPOINTS3D +SDO_3GL.CLOSEST_POINTS +SDO_3GL.CONCAVEHULL +SDO_3GL.CONCAVEHULL_B +SDO_3GL.CONTAINS +SDO_3GL.CONVEXHULL +SDO_3GL.COVEREDBY +SDO_3GL.COVERS +SDO_3GL.DIAMETER +SDO_3GL.DISTANCE +SDO_3GL.DISTANCE3D +SDO_3GL.DIVIDE_RING_BY_POINTS +SDO_3GL.EQUAL +SDO_3GL.EXPANDG3DGEOMS +SDO_3GL.EXTENT_OF_OBJECT +SDO_3GL.FILTER +SDO_3GL.G3DCONV +SDO_3GL.GENERATE_BUFFER +SDO_3GL.GEODEXTENT_OF_OBJECT +SDO_3GL.GEOM_OPERATION +SDO_3GL.GET_EVENT +SDO_3GL.INSERT_LOG_FILTER +SDO_3GL.INSIDE +SDO_3GL.INSIDE3D +SDO_3GL.LENGTH3D +SDO_3GL.LENGTH_AREA +SDO_3GL.MAKE_RING_FROM_LINES +SDO_3GL.MAXDISTANCE +SDO_3GL.MBB_RAW +SDO_3GL.MBR_GEOMETRY +SDO_3GL.MDUTL_GET_CPU_COUNT +SDO_3GL.MEMORY_LEAK +SDO_3GL.MINBNDCIRCLE +SDO_3GL.OVERLAP +SDO_3GL.OVERLAPBDYDISJOINT +SDO_3GL.OVERLAPBDYINTERSECT +SDO_3GL.PCTRCLIP +SDO_3GL.POINTONSURFACE +SDO_3GL.REGISTER_UDT +SDO_3GL.RELATE +SDO_3GL.RELATE_PROCESS +SDO_3GL.REMOVE_DUPLICATE_VERTICES +SDO_3GL.RESET_EVENT +SDO_3GL.RING_UNION_APPROX +SDO_3GL.SDOON +SDO_3GL.SDO_CENTROID +SDO_3GL.SDO_CONVEXHULL +SDO_3GL.SDO_GEOD_MBR +SDO_3GL.SDO_MBR +SDO_3GL.SET_EVENT +SDO_3GL.TOUCH +SDO_3GL.TRIANGULATE +SDO_3GL.VALIDATEGEOM3D +SDO_3GL.VALIDATE_GEOM +SDO_3GL.VALIDATE_GEOM_WITH_CONTEXT +SDO_3GL.VALIDATE_LAYER_WITH_CONTEXT +SDO_3GL.VALIDATE_LAYER_WITH_CONTEXT3D +SDO_3GL.VOLUME3D +SDO_3GL.WIDTH +SDO_3GL.WITHIN_DISTANCE +SDO_ADMIN. +SDO_ADMIN.CHANGE_INDEX_PARAMETERS +SDO_ADMIN.POPULATE_INDEX +SDO_ADMIN.POPULATE_INDEX_FIXED +SDO_ADMIN.POPULATE_INDEX_FIXED_POINTS +SDO_ADMIN.SDO_CODE_SIZE +SDO_ADMIN.SDO_VERSION +SDO_ADMIN.SET_CODE_NULL +SDO_ADMIN.UPDATE_INDEX +SDO_ADMIN.UPDATE_INDEX_FIXED +SDO_AGGR. +SDO_AGGR.SDO_AGGR_SET_UNION +SDO_AGGR_CENTROID. +SDO_AGGR_CONCAT_LINES. +SDO_AGGR_CONCAVEHULL. +SDO_AGGR_CONVEXHULL. +SDO_AGGR_LRS_CONCAT. +SDO_AGGR_LRS_CONCAT_3D. +SDO_AGGR_MBR. +SDO_AGGR_SET_UNION. +SDO_AGGR_UNION. +SDO_ANNOT_TRIG_INS1. +SDO_CATALOG. +SDO_CATALOG.DELETE_CATALOG +SDO_CATALOG.INSERT_CATALOG +SDO_CATALOG.UPDATE_CATALOG +SDO_CONSTRUCT_DIM_ARRAY. +SDO_COORD_OPS_TRIGGER. +SDO_COORD_OP_METHODS_TRIGGER. +SDO_COORD_OP_PARAM_VAL_TRIGG2. +SDO_COORD_OP_PARAM_VAL_TRIGGER. +SDO_COORD_OP_PATHS_TRIGGER. +SDO_COORD_REF_SRID_INSERT. +SDO_COORD_REF_SRID_UPDATE. +SDO_CRS_DELETE_TRIGGER. +SDO_CRS_GEOG_SRID_UPDATE. +SDO_CRS_INSERT_TRIGGER. +SDO_CS. +SDO_CS.ADD_PREFERENCE_FOR_OP +SDO_CS.CONVERT_2D_SRID_TO_3D +SDO_CS.CONVERT_2D_TO_3D +SDO_CS.CONVERT_3D_SRID_TO_2D +SDO_CS.CONVERT_MIXED_AXES_UNITS +SDO_CS.CONVERT_NADCON_TO_XML +SDO_CS.CONVERT_NTV2_TO_XML +SDO_CS.CONVERT_NTV2_TO_XML_TABLE +SDO_CS.CONVERT_XML_TABLE_TO_NTV2 +SDO_CS.CONVERT_XML_TO_NADCON +SDO_CS.CONVERT_XML_TO_NTV2 +SDO_CS.CREATE_CONCATENATED_OP +SDO_CS.CREATE_CRS_USING_LEGACY_PROJ +SDO_CS.CREATE_GEOG_METADATA +SDO_CS.CREATE_OBVIOUS_EPSG_RULES +SDO_CS.CREATE_PREF_CONCATENATED_OP +SDO_CS.DECIMAL_DEGREES_TO_DMS +SDO_CS.DELETE_ALL_EPSG_RULES +SDO_CS.DELETE_NTV2_XML_DATA +SDO_CS.DELETE_OP +SDO_CS.DETERMINE_CHAIN +SDO_CS.DETERMINE_DEFAULT_CHAIN +SDO_CS.DETERMINE_NADCON_COVERAGE +SDO_CS.DETERMINE_SRID_UNITS +SDO_CS.DISAMBIGUATE_PROJ_NAME +SDO_CS.DMS_TO_DECIMAL_DEGREE +SDO_CS.ETYPE0_EXISTS +SDO_CS.FILL_IN_DEFAULT_UNITS +SDO_CS.FIND_EPSG_PARAMS +SDO_CS.FIND_GEOG_CRS +SDO_CS.FIND_PROJ_CRS +SDO_CS.FIND_SRID +SDO_CS.FROM_GEOHASH +SDO_CS.FROM_GEOJSON_CRS +SDO_CS.FROM_OGC_SIMPLEFEATURE_SRS +SDO_CS.FROM_USNG +SDO_CS.GENERATE_CRS_FROM_WKT +SDO_CS.GENERATE_EPSG_RULE_FOR_3785 +SDO_CS.GENERATE_SCRIPT_FROM_CS_ID +SDO_CS.GENERATE_SCRIPT_FROM_DATUM_ID +SDO_CS.GENERATE_SCRIPT_FROM_ELLIPS_ID +SDO_CS.GENERATE_SCRIPT_FROM_OP_ID +SDO_CS.GENERATE_SCRIPT_FROM_PM_ID +SDO_CS.GENERATE_SCRIPT_FROM_SRID +SDO_CS.GENERATE_SCRIPT_FROM_UOM_ID +SDO_CS.GEN_MERGE_SCRIPT_FROM_SRIDS +SDO_CS.GET_3D_WKT +SDO_CS.GET_AXIS_ORDER +SDO_CS.GET_CRS_INFO +SDO_CS.GET_EPSG_DATA_VERSION +SDO_CS.GET_GEOHASH_CELL_HEIGHT +SDO_CS.GET_GEOHASH_CELL_WIDTH +SDO_CS.GET_SRID_FOR_NAMESPACE +SDO_CS.GET_SRSNAME_FOR_NAMESPACE +SDO_CS.GET_WKT_PATH +SDO_CS.INTERNAL_DENSIFY_PRIOR_TO_TFM +SDO_CS.INTERNAL_DET_CHAIN +SDO_CS.INTERNAL_DET_CHAIN_VARCHAR +SDO_CS.INTERNAL_DET_SRID_WKT +SDO_CS.INTERNAL_EPSG_PARAM_TO_LEGACY +SDO_CS.INTERNAL_GET_DENSIFICATION_RES +SDO_CS.INTERNAL_READ_PARAM_FROM_WKT +SDO_CS.INTERNAL_READ_PROJ_FROM_WKT +SDO_CS.INTL_POPULATE_DATUM_3PARAMS +SDO_CS.INTL_POPULATE_DATUM_7PARAMS +SDO_CS.INTL_VALIDATE_WKT +SDO_CS.IS_WITHIN_TOLERANCE +SDO_CS.LOAD_EPSG_MATRIX +SDO_CS.LOOKUP_EPSG_PARAM +SDO_CS.MAKE_2D +SDO_CS.MAKE_3D +SDO_CS.MAP_EPSG_SRID_TO_ORACLE +SDO_CS.MAP_ORACLE_SRID_TO_EPSG +SDO_CS.MAP_URN_TO_SRID +SDO_CS.MBH2MBR +SDO_CS.REASSIGN_SRID +SDO_CS.REFORMAT_GTYPE +SDO_CS.REGISTER_SRSNAMESPACE +SDO_CS.REMOVE_ETYPE0 +SDO_CS.REVERSE_AXIS_ORDER +SDO_CS.REVOKE_PREFERENCE_FOR_OP +SDO_CS.SDO_CS_CONTEXT_INVALIDATE +SDO_CS.TFM_AXIS_ORIENTATION_TO_WKT +SDO_CS.TO_GEOHASH +SDO_CS.TO_GEOJSON_CRS +SDO_CS.TO_OGC_SIMPLEFEATURE_SRS +SDO_CS.TO_USNG +SDO_CS.TRANSFORM +SDO_CS.TRANSFORM_ACROSS_DIMS +SDO_CS.TRANSFORM_ACROSS_DIMS_WA +SDO_CS.TRANSFORM_GEOJSON +SDO_CS.TRANSFORM_LAYER +SDO_CS.TRANSFORM_LAYER_ACROSS_DIMS +SDO_CS.TRANSFORM_LAYER_WITH_ARCS +SDO_CS.TRANSFORM_OGC_CS_WKT_TO_SRS +SDO_CS.TRANSFORM_ORIG +SDO_CS.TRANSFORM_ORIG_USING_RULES +SDO_CS.TRANSFORM_ORIG_WITH_ARCS +SDO_CS.TRANSFORM_TO_BASE_UNIT +SDO_CS.TRANSFORM_TO_WKT_PARAM_UNIT +SDO_CS.TRANSFORM_USING_CASE_NAME +SDO_CS.TRANSFORM_USING_PLAN +SDO_CS.TRANSFORM_WITH_ARCS +SDO_CS.UPDATE_WKTS_FOR_ALL_EPSG_CRS +SDO_CS.UPDATE_WKTS_FOR_EPSG_CRS +SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM +SDO_CS.UPDATE_WKTS_FOR_EPSG_ELLIPS +SDO_CS.UPDATE_WKTS_FOR_EPSG_OP +SDO_CS.UPDATE_WKTS_FOR_EPSG_PARAM +SDO_CS.UPDATE_WKTS_FOR_EPSG_PM +SDO_CS.UPDATE_WKTS_WITH_HC_PARAMS +SDO_CS.UPDATE_WKT_WITH_7_PARAMS +SDO_CS.VALIDATE_EPSG_MATRIX +SDO_CS.VALIDATE_OP +SDO_CS.VALIDATE_WKT +SDO_CS.VIEWPORT_TRANSFORM +SDO_CS.WRAP_LATS +SDO_CSW. +SDO_CSW.CREATE_SPATIAL_IDX +SDO_CSW.CREATE_XQFT_IDX +SDO_CSW.GENERATE_METADATA_ID +SDO_CSW.INITIALIZE_CSW +SDO_CSW.PARSE_SEARCH +SDO_CSW.PUBLISH_RECORDTYPE +SDO_CSW.RECORD_EXTRACT +SDO_CSW.REGISTER_CSW +SDO_CSW.SYNC_INDEX +SDO_CSWADM. +SDO_CSWADM.DELETE_FROM_SDO_XSD_TABLE +SDO_CSWADM.DELETE_SCHEMA +SDO_CSWADM.REGISTER_XSD +SDO_CSWADM.REGISTER_XSDS +SDO_CSW_INT. +SDO_CSW_INT.CHANGE_USER_SDO_GEOM_METADATA +SDO_CSW_INT.EXTRACT_ELEMENT +SDO_CSW_INT.FIND_ELEMENT +SDO_CSW_INT.GENERATE_MD_IDENTIFIER_SQ +SDO_CSW_INT.INSERT_USER_SDO_CSWSERVICEINFO +SDO_CSW_INT.INSERT_USER_SDO_GEOM_METADATA +SDO_CSW_INT.OPT_RQ_FOR_SUMMARY +SDO_CSW_INT.PRINT_GEOM +SDO_CSW_TRIGGER_DEL1. +SDO_CSW_TRIGGER_INS1. +SDO_CSW_TRIGGER_UPD1. +SDO_CS_SRS_SRID_INSERT. +SDO_CS_SRS_SRID_UPDATE. +SDO_DROP_USER. +SDO_FEATURE_USAGE_UPDATE. +SDO_GCDR. +SDO_GCDR.BATCH_GEOCODE +SDO_GCDR.CREATE_PROFILE_TABLES +SDO_GCDR.DATA_VERSION +SDO_GCDR.GEOCODE +SDO_GCDR.GEOCODE_ADDR +SDO_GCDR.GEOCODE_ADDR_ALL +SDO_GCDR.GEOCODE_ALL +SDO_GCDR.GEOCODE_AS_GEOMETRY +SDO_GCDR.LIST_COUNTRIES +SDO_GCDR.REVERSE_GEOCODE +SDO_GCDR.VALIDATECITYROW +SDO_GCDR.VALIDATECOUNTRYROW +SDO_GCDR.VALIDATEINLINESTREETTYPEROW +SDO_GCDR.VALIDATELOCALITYDICTROW +SDO_GCDR.VALIDATEPLACENAMEROW +SDO_GCDR.VALIDATEPOBOXROW +SDO_GCDR.VALIDATEREGIONROW +SDO_GCDR.VALIDATESECONDUNITROW +SDO_GCDR.VALIDATESTREETDICTROW +SDO_GCDR.VALIDATESTREETPREFIXROW +SDO_GCDR.VALIDATESTREETSUFFIXROW +SDO_GCDR.VALIDATESTREETTYPEROW +SDO_GEOM. +SDO_GEOM.CHECK_BOUNDS +SDO_GEOM.CHECK_GEOM_ORDS_RADIANS +SDO_GEOM.G3D_PARAMETERS +SDO_GEOM.GET_DIM_ARRAY +SDO_GEOM.GET_ORDS +SDO_GEOM.INIT_ELEMENT +SDO_GEOM.INTERACT +SDO_GEOM.RELATE +SDO_GEOM.SDO_ALPHA_SHAPE +SDO_GEOM.SDO_ARC_DENSIFY +SDO_GEOM.SDO_AREA +SDO_GEOM.SDO_BUFFER +SDO_GEOM.SDO_CENTROID +SDO_GEOM.SDO_CLOSEST_POINTS +SDO_GEOM.SDO_CONCAVEHULL +SDO_GEOM.SDO_CONCAVEHULL_BOUNDARY +SDO_GEOM.SDO_CONVEXHULL +SDO_GEOM.SDO_DIAMETER +SDO_GEOM.SDO_DIAMETER_LINE +SDO_GEOM.SDO_DIFFERENCE +SDO_GEOM.SDO_DISTANCE +SDO_GEOM.SDO_G3DCONV +SDO_GEOM.SDO_INSERT_LOG_FILTER +SDO_GEOM.SDO_INTERSECTION +SDO_GEOM.SDO_IS_NURBSCURVE +SDO_GEOM.SDO_LENGTH +SDO_GEOM.SDO_MAXDISTANCE +SDO_GEOM.SDO_MAXDISTANCE_LINE +SDO_GEOM.SDO_MAX_MBR_ORDINATE +SDO_GEOM.SDO_MBC +SDO_GEOM.SDO_MBC_CENTER +SDO_GEOM.SDO_MBC_RADIUS +SDO_GEOM.SDO_MBR +SDO_GEOM.SDO_MIN_MBR_ORDINATE +SDO_GEOM.SDO_POINTONSURFACE +SDO_GEOM.SDO_POLY_DIFFERENCE +SDO_GEOM.SDO_POLY_INTERSECTION +SDO_GEOM.SDO_POLY_UNION +SDO_GEOM.SDO_POLY_XOR +SDO_GEOM.SDO_SELF_UNION +SDO_GEOM.SDO_TRIANGULATE +SDO_GEOM.SDO_UNION +SDO_GEOM.SDO_VOLUME +SDO_GEOM.SDO_WIDTH +SDO_GEOM.SDO_WIDTH_LINE +SDO_GEOM.SDO_XOR +SDO_GEOM.VALIDATE_GEOMETRY +SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT +SDO_GEOM.VALIDATE_GEOMETRY_WITH_SRID +SDO_GEOM.VALIDATE_LAYER +SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT +SDO_GEOM.VALLAYER_WITH_CONTEXT_LRS +SDO_GEOM.WITHIN_DISTANCE +SDO_GEOMETRY.GET_DIMS +SDO_GEOMETRY.GET_GEOJSON +SDO_GEOMETRY.GET_GML +SDO_GEOMETRY.GET_GML311 +SDO_GEOMETRY.GET_GML321 +SDO_GEOMETRY.GET_GTYPE +SDO_GEOMETRY.GET_KML +SDO_GEOMETRY.GET_LRS_DIM +SDO_GEOMETRY.GET_WKB +SDO_GEOMETRY.GET_WKT +SDO_GEOMETRY.SDO_GEOMETRY +SDO_GEOMETRY.ST_COORDDIM +SDO_GEOMETRY.ST_ISVALID +SDO_GEOM_METADATA_UPDATE. +SDO_GEOM_TRIG_DEL1. +SDO_GEOM_TRIG_INS1. +SDO_GEOM_TRIG_UPD1. +SDO_GEOR. +SDO_GEOR.ADDNODATA +SDO_GEOR.ADDSOURCEINFO +SDO_GEOR.AFFINETRANSFORM +SDO_GEOR.CALCCOMPRESSIONRATIO +SDO_GEOR.CHANGECELLVALUE +SDO_GEOR.CHANGECELLVALUES +SDO_GEOR.CHANGEFORMAT +SDO_GEOR.CHANGEFORMATCOPY +SDO_GEOR.COMPRESSJP2 +SDO_GEOR.COPY +SDO_GEOR.CREATEBLANK +SDO_GEOR.CREATETEMPLATE +SDO_GEOR.DECOMPRESSJP2 +SDO_GEOR.DELETECONTROLPOINT +SDO_GEOR.DELETENODATA +SDO_GEOR.DELETEPYRAMID +SDO_GEOR.EVALUATEDOUBLE +SDO_GEOR.EVALUATEDOUBLES +SDO_GEOR.EXPORTTO +SDO_GEOR.GENERATEAREAWEIGHTEDMEAN +SDO_GEOR.GENERATEBITMAPPYRAMID +SDO_GEOR.GENERATEBLOCKMBR +SDO_GEOR.GENERATEPYRAMID +SDO_GEOR.GENERATESPATIALEXTENT +SDO_GEOR.GENERATESPATIALRESOLUTIONS +SDO_GEOR.GENERATESTATISTICS +SDO_GEOR.GENERATESTATISTICSMAX +SDO_GEOR.GENERATESTATISTICSMEAN +SDO_GEOR.GENERATESTATISTICSMEDIAN +SDO_GEOR.GENERATESTATISTICSMIN +SDO_GEOR.GENERATESTATISTICSMODE +SDO_GEOR.GENERATESTATISTICSSTD +SDO_GEOR.GEOREFERENCE +SDO_GEOR.GETBANDDIMSIZE +SDO_GEOR.GETBEGINDATETIME +SDO_GEOR.GETBINFUNCTION +SDO_GEOR.GETBINTABLE +SDO_GEOR.GETBINTYPE +SDO_GEOR.GETBITMAPMASK +SDO_GEOR.GETBITMAPMASKSUBSET +SDO_GEOR.GETBITMAPMASKVALUE +SDO_GEOR.GETBITMAPMASKVALUES +SDO_GEOR.GETBLANKCELLVALUE +SDO_GEOR.GETBLOCKINGTYPE +SDO_GEOR.GETBLOCKSIZE +SDO_GEOR.GETCELLCOORDINATE +SDO_GEOR.GETCELLDEPTH +SDO_GEOR.GETCELLVALUE +SDO_GEOR.GETCELLVALUES +SDO_GEOR.GETCOLORMAP +SDO_GEOR.GETCOLORMAPTABLE +SDO_GEOR.GETCOMPRESSIONTYPE +SDO_GEOR.GETCONTROLPOINT +SDO_GEOR.GETDEFAULTALPHA +SDO_GEOR.GETDEFAULTBLUE +SDO_GEOR.GETDEFAULTCOLORLAYER +SDO_GEOR.GETDEFAULTGREEN +SDO_GEOR.GETDEFAULTPYRAMIDLEVEL +SDO_GEOR.GETDEFAULTRED +SDO_GEOR.GETENDDATETIME +SDO_GEOR.GETGCPGEOREFMETHOD +SDO_GEOR.GETGCPGEOREFMODEL +SDO_GEOR.GETGEOREFERENCETYPE +SDO_GEOR.GETGRAYSCALE +SDO_GEOR.GETGRAYSCALETABLE +SDO_GEOR.GETHISTOGRAM +SDO_GEOR.GETHISTOGRAMTABLE +SDO_GEOR.GETID +SDO_GEOR.GETINTERLEAVINGTYPE +SDO_GEOR.GETJP2TILESIZE +SDO_GEOR.GETLAYERDIMENSION +SDO_GEOR.GETLAYERID +SDO_GEOR.GETLAYERORDINATE +SDO_GEOR.GETMODELCOORDINATE +SDO_GEOR.GETMODELCOORDLOCATION +SDO_GEOR.GETMODELSRID +SDO_GEOR.GETNODATA +SDO_GEOR.GETPYRAMIDMAXLEVEL +SDO_GEOR.GETPYRAMIDTYPE +SDO_GEOR.GETRASTERBLOCKLOCATOR +SDO_GEOR.GETRASTERBLOCKS +SDO_GEOR.GETRASTERDATA +SDO_GEOR.GETRASTERRANGE +SDO_GEOR.GETRASTERSUBSET +SDO_GEOR.GETSCALING +SDO_GEOR.GETSOURCEINFO +SDO_GEOR.GETSPATIALDIMNUMBER +SDO_GEOR.GETSPATIALDIMSIZES +SDO_GEOR.GETSPATIALRESOLUTIONS +SDO_GEOR.GETSPECTRALRESOLUTION +SDO_GEOR.GETSPECTRALUNIT +SDO_GEOR.GETSRS +SDO_GEOR.GETSTATISTICS +SDO_GEOR.GETTOTALLAYERNUMBER +SDO_GEOR.GETULTCOORDINATE +SDO_GEOR.GETVAT +SDO_GEOR.GETVERSION +SDO_GEOR.HASBITMAPMASK +SDO_GEOR.HASGRAYSCALE +SDO_GEOR.HASNODATAMASK +SDO_GEOR.HASPSEUDOCOLOR +SDO_GEOR.IMPORTFROM +SDO_GEOR.INIT +SDO_GEOR.ISBLANK +SDO_GEOR.ISLOSSLESS +SDO_GEOR.ISORTHORECTIFIED +SDO_GEOR.ISRECTIFIED +SDO_GEOR.ISSPATIALREFERENCED +SDO_GEOR.MASK +SDO_GEOR.MERGELAYERS +SDO_GEOR.MOSAIC +SDO_GEOR.RECTIFY +SDO_GEOR.REPROJECT +SDO_GEOR.SCALE +SDO_GEOR.SCALECOPY +SDO_GEOR.SCHEMAVALIDATE +SDO_GEOR.SETBEGINDATETIME +SDO_GEOR.SETBINFUNCTION +SDO_GEOR.SETBINTABLE +SDO_GEOR.SETBITMAPMASK +SDO_GEOR.SETBLANKCELLVALUE +SDO_GEOR.SETCOLORMAP +SDO_GEOR.SETCOLORMAPTABLE +SDO_GEOR.SETCONTROLPOINT +SDO_GEOR.SETDEFAULTALPHA +SDO_GEOR.SETDEFAULTBLUE +SDO_GEOR.SETDEFAULTCOLORLAYER +SDO_GEOR.SETDEFAULTGREEN +SDO_GEOR.SETDEFAULTPYRAMIDLEVEL +SDO_GEOR.SETDEFAULTRED +SDO_GEOR.SETENDDATETIME +SDO_GEOR.SETGCPGEOREFMETHOD +SDO_GEOR.SETGCPGEOREFMODEL +SDO_GEOR.SETGRAYSCALE +SDO_GEOR.SETGRAYSCALETABLE +SDO_GEOR.SETHISTOGRAMTABLE +SDO_GEOR.SETID +SDO_GEOR.SETLAYERID +SDO_GEOR.SETLAYERORDINATE +SDO_GEOR.SETMODELCOORDLOCATION +SDO_GEOR.SETMODELSRID +SDO_GEOR.SETNODATAMASK +SDO_GEOR.SETORTHORECTIFIED +SDO_GEOR.SETRASTERTYPE +SDO_GEOR.SETRECTIFIED +SDO_GEOR.SETSCALING +SDO_GEOR.SETSOURCEINFO +SDO_GEOR.SETSPATIALREFERENCED +SDO_GEOR.SETSPATIALRESOLUTIONS +SDO_GEOR.SETSPECTRALRESOLUTION +SDO_GEOR.SETSPECTRALUNIT +SDO_GEOR.SETSRS +SDO_GEOR.SETSTATISTICS +SDO_GEOR.SETULTCOORDINATE +SDO_GEOR.SETVAT +SDO_GEOR.SETVERSION +SDO_GEOR.SUBSET +SDO_GEOR.UPDATERASTER +SDO_GEOR.VALIDATEBLOCKMBR +SDO_GEOR.VALIDATEFORMOSAIC +SDO_GEOR.VALIDATEGEORASTER +SDO_GEOR.WARP +SDO_GEORX. +SDO_GEORX.ADDNODATA +SDO_GEORX.APPENDSOURCEINFO +SDO_GEORX.CREATEBLANK +SDO_GEORX.DELETEGCP +SDO_GEORX.DELETENODATA +SDO_GEORX.GENERATESPATIALRES +SDO_GEORX.GEOREFERENCE +SDO_GEORX.GETBANDDIMSIZE +SDO_GEORX.GETBEGINDATETIME +SDO_GEORX.GETBINFUNCTION +SDO_GEORX.GETBINTABLE +SDO_GEORX.GETBINTYPE +SDO_GEORX.GETBLANKCELLVALUE +SDO_GEORX.GETBLOCKINGTYPE +SDO_GEORX.GETBLOCKSIZE +SDO_GEORX.GETCELLDEPTH +SDO_GEORX.GETCELLDEPTHTEXT +SDO_GEORX.GETCOLORMAP +SDO_GEORX.GETCOLORMAPTABLE +SDO_GEORX.GETCOMPRESSIONTYPE +SDO_GEORX.GETDEFAULTALPHA +SDO_GEORX.GETDEFAULTBLUE +SDO_GEORX.GETDEFAULTCOLORLAYER +SDO_GEORX.GETDEFAULTGREEN +SDO_GEORX.GETDEFAULTPYRAMIDLEVEL +SDO_GEORX.GETDEFAULTRED +SDO_GEORX.GETENDDATETIME +SDO_GEORX.GETGCP +SDO_GEORX.GETGCPGEOREFMODEL +SDO_GEORX.GETGRAYSCALE +SDO_GEORX.GETGRAYSCALETABLE +SDO_GEORX.GETHISTOGRAM +SDO_GEORX.GETHISTOGRAMTABLE +SDO_GEORX.GETID +SDO_GEORX.GETINTERLEAVING +SDO_GEORX.GETLAYERID +SDO_GEORX.GETLAYERORDINATE +SDO_GEORX.GETMAJORVERSION +SDO_GEORX.GETMINORVERSION +SDO_GEORX.GETMODELSRID +SDO_GEORX.GETNODATA +SDO_GEORX.GETPYRAMIDMAXLEVEL +SDO_GEORX.GETPYRAMIDTYPE +SDO_GEORX.GETSCALING +SDO_GEORX.GETSOURCEINFO +SDO_GEORX.GETSPATIALDIMSIZES +SDO_GEORX.GETSPATIALRESOLUTIONS +SDO_GEORX.GETSPECTRALRESOLUTION +SDO_GEORX.GETSPECTRALUNIT +SDO_GEORX.GETSRS +SDO_GEORX.GETSTATISTICS +SDO_GEORX.GETTOTALLAYERNUMBER +SDO_GEORX.GETULTCOORDINATE +SDO_GEORX.GETVAT +SDO_GEORX.HASGRAYSCALE +SDO_GEORX.HASPSEUDOCOLOR +SDO_GEORX.ISBLANK +SDO_GEORX.ISORTHORECTIFIED +SDO_GEORX.ISRECTIFIED +SDO_GEORX.ISSPATIALREFERENCED +SDO_GEORX.SCHEMAVALIDATE +SDO_GEORX.SETBEGINDATETIME +SDO_GEORX.SETBINFUNCTION +SDO_GEORX.SETBINTABLE +SDO_GEORX.SETBLANKCELLVALUE +SDO_GEORX.SETCOLORMAP +SDO_GEORX.SETCOLORMAPTABLE +SDO_GEORX.SETCONTROLPOINT +SDO_GEORX.SETDEFAULTALPHA +SDO_GEORX.SETDEFAULTBLUE +SDO_GEORX.SETDEFAULTCOLORLAYER +SDO_GEORX.SETDEFAULTGREEN +SDO_GEORX.SETDEFAULTPYRAMIDLEVEL +SDO_GEORX.SETDEFAULTRED +SDO_GEORX.SETENDDATETIME +SDO_GEORX.SETGCP +SDO_GEORX.SETGCPGEOREFMODEL +SDO_GEORX.SETGRAYSCALE +SDO_GEORX.SETGRAYSCALETABLE +SDO_GEORX.SETHISTOGRAMTABLE +SDO_GEORX.SETID +SDO_GEORX.SETLAYERID +SDO_GEORX.SETLAYERORDINATE +SDO_GEORX.SETMODELCOORDLOCATION +SDO_GEORX.SETMODELSRID +SDO_GEORX.SETNODATAMASK +SDO_GEORX.SETORTHORECTIFIED +SDO_GEORX.SETRASTERTYPE +SDO_GEORX.SETRECTIFIED +SDO_GEORX.SETSCALING +SDO_GEORX.SETSOURCEINFO +SDO_GEORX.SETSPATIALREFERENCED +SDO_GEORX.SETSPATIALRESOLUTIONS +SDO_GEORX.SETSPECTRALRESOLUTION +SDO_GEORX.SETSPECTRALUNIT +SDO_GEORX.SETSRS +SDO_GEORX.SETSTATISTICS +SDO_GEORX.SETVAT +SDO_GEORX.SETVERSION +SDO_GEOR_ADDL_TRIGGER. +SDO_GEOR_ADMIN. +SDO_GEOR_ADMIN.CHECKSYSDATAENTRIES +SDO_GEOR_ADMIN.CREATEDMLTRIGGER +SDO_GEOR_ADMIN.GETUNIQUERDTNAME +SDO_GEOR_ADMIN.ISRDTNAMEUNIQUE +SDO_GEOR_ADMIN.ISUPGRADENEEDED +SDO_GEOR_ADMIN.LISTDANGLINGRASTERDATA +SDO_GEOR_ADMIN.LISTGEORASTERCOLUMNS +SDO_GEOR_ADMIN.LISTGEORASTEROBJECTS +SDO_GEOR_ADMIN.LISTGEORASTERTABLES +SDO_GEOR_ADMIN.LISTRDT +SDO_GEOR_ADMIN.LISTREGISTEREDRDT +SDO_GEOR_ADMIN.LISTUNREGISTEREDRDT +SDO_GEOR_ADMIN.MAINTAINSYSDATAENTRIES +SDO_GEOR_ADMIN.REGISTERGEORASTERCOLUMNS +SDO_GEOR_ADMIN.REGISTERGEORASTEROBJECTS +SDO_GEOR_ADMIN.UPGRADEGEORASTER +SDO_GEOR_AGGR. +SDO_GEOR_AGGR.APPEND +SDO_GEOR_AGGR.GETMOSAICEXTENT +SDO_GEOR_AGGR.GETMOSAICRESOLUTIONS +SDO_GEOR_AGGR.GETMOSAICSTATISTICS +SDO_GEOR_AGGR.GETMOSAICSUBSET +SDO_GEOR_AGGR.MOSAICSUBSET +SDO_GEOR_AGGR.VALIDATEFORMOSAICSUBSET +SDO_GEOR_AUX. +SDO_GEOR_AUX.AFTERDELETE +SDO_GEOR_AUX.AFTERINSERT +SDO_GEOR_AUX.AFTERUPDATE +SDO_GEOR_AUX.CLASSIFYP +SDO_GEOR_AUX.COMPRESSDATA +SDO_GEOR_AUX.COMPRESSDATAP +SDO_GEOR_AUX.COMPRESSDATAWITHCRATIO +SDO_GEOR_AUX.DECOMPRESSDATA +SDO_GEOR_AUX.DECOMPRESSDATAP +SDO_GEOR_AUX.DECOMPRESSDATAWITHCRATIO +SDO_GEOR_AUX.DODGEP1 +SDO_GEOR_AUX.EQUALIZEP +SDO_GEOR_AUX.FILTERP +SDO_GEOR_AUX.FINDCELLSP +SDO_GEOR_AUX.GENERATEPYRAMIDP +SDO_GEOR_AUX.GENERATESTATISTICS1P +SDO_GEOR_AUX.GENERATESTATISTICSP +SDO_GEOR_AUX.HISTOGRAMMATCHP +SDO_GEOR_AUX.HISTOGRAMMATCHP1 +SDO_GEOR_AUX.MATHOPP +SDO_GEOR_AUX.MOSAICSUBSETP1 +SDO_GEOR_AUX.MOSAICSUBSETP2 +SDO_GEOR_AUX.NORMALIZEP +SDO_GEOR_AUX.NORMALIZEP1 +SDO_GEOR_AUX.PIECEWISESTRETCHP +SDO_GEOR_AUX.RAISEERROR +SDO_GEOR_AUX.RAISEERRORWITHMSG +SDO_GEOR_AUX.RASTERMATHOPP +SDO_GEOR_AUX.RASTERUPDATEP +SDO_GEOR_AUX.RECTIFYP +SDO_GEOR_AUX.RETRIEVEGEORASTER +SDO_GEOR_AUX.SETSTATUS +SDO_GEOR_AUX.STACKP +SDO_GEOR_AUX.STRETCHP +SDO_GEOR_BDDL_TRIGGER. +SDO_GEOR_DEF. +SDO_GEOR_DEF.CHECKSYSDATAENTRIES +SDO_GEOR_DEF.DELETEGRTMETAENTRY +SDO_GEOR_DEF.DELETEMETAENTRY +SDO_GEOR_DEF.DELETERDTMETAENTRY +SDO_GEOR_DEF.DELETETINPCMETAENTRY +SDO_GEOR_DEF.DELETETINSEQMETAENTRY +SDO_GEOR_DEF.DELETEUSERDATA +SDO_GEOR_DEF.DISABLEFLAG +SDO_GEOR_DEF.DOALTERDROPCOLUMN +SDO_GEOR_DEF.DOALTERRENAMETABLE +SDO_GEOR_DEF.DODROPUSERANDTABLE +SDO_GEOR_DEF.DORENAMETABLE +SDO_GEOR_DEF.DOTRUNCATETABLE +SDO_GEOR_DEF.ENABLEFLAG +SDO_GEOR_DEF.GETFILEPATH +SDO_GEOR_DEF.GETSQLTEXT +SDO_GEOR_DEF.GETUNIQUERDTNAME +SDO_GEOR_DEF.INSERTMETAENTRY +SDO_GEOR_DEF.INSERTUSERSYSENTRY +SDO_GEOR_DEF.ISDROPCOLUMN +SDO_GEOR_DEF.ISRDTNAMEUNIQUE +SDO_GEOR_DEF.ISVALIDENTRY +SDO_GEOR_DEF.ISVALIDENTRY2 +SDO_GEOR_DEF.LISTALLGEORASTERFIELDS +SDO_GEOR_DEF.LISTALLGEORASTERFIELDSSTR +SDO_GEOR_DEF.LISTALLRDT +SDO_GEOR_DEF.MAINTAINSYSDATAENTRIES +SDO_GEOR_GCP.SDO_GEOR_GCP +SDO_GEOR_GCPGEOREFTYPE.SDO_GEOR_GCPGEOREFTYPE +SDO_GEOR_GDAL. +SDO_GEOR_GDAL.DEM +SDO_GEOR_GDAL.INFO +SDO_GEOR_GDAL.TRANSLATE +SDO_GEOR_INT. +SDO_GEOR_INT.AFTERDELETE +SDO_GEOR_INT.AFTERINSERT +SDO_GEOR_INT.AFTERUPDATE +SDO_GEOR_INT.APPEND +SDO_GEOR_INT.CALCCOMPRESSIONRATIO +SDO_GEOR_INT.CALCOPTIMIZEDBLOCKSIZE +SDO_GEOR_INT.CALCRASTERNOMINALSIZE +SDO_GEOR_INT.CALCRASTERSTORAGESIZE +SDO_GEOR_INT.CALMOSAICEXTENT +SDO_GEOR_INT.CALPARALLELUNIT +SDO_GEOR_INT.CHANGECELLVALUE +SDO_GEOR_INT.CHANGECELLVALUES +SDO_GEOR_INT.CHANGEFORMAT +SDO_GEOR_INT.CHANGEFORMATCOPY +SDO_GEOR_INT.CHECKGEODETICMBR +SDO_GEOR_INT.CHECK_PARAM +SDO_GEOR_INT.CHECK_RDTNAME +SDO_GEOR_INT.CLASSIFY +SDO_GEOR_INT.CLASSIFYP +SDO_GEOR_INT.COMPRESSDATA +SDO_GEOR_INT.COMPRESSDATAU +SDO_GEOR_INT.COMPRESSDATAWITHCRATIO +SDO_GEOR_INT.COMPRESSJP2 +SDO_GEOR_INT.CONVERTCELLCOORDINATE +SDO_GEOR_INT.CONVERTGEOM +SDO_GEOR_INT.CREATETEMPLATE +SDO_GEOR_INT.DECOMPRESSDATA +SDO_GEOR_INT.DECOMPRESSDATAU +SDO_GEOR_INT.DECOMPRESSDATAWITHCRATIO +SDO_GEOR_INT.DECOMPRESSJP2 +SDO_GEOR_INT.DELETEMETAENTRY +SDO_GEOR_INT.DELETEPYRAMID +SDO_GEOR_INT.DISABLEREPORT +SDO_GEOR_INT.DODGE1 +SDO_GEOR_INT.DODGEP1 +SDO_GEOR_INT.DODGEPP1 +SDO_GEOR_INT.EMPTYBLOCKS +SDO_GEOR_INT.ENABLEREPORT +SDO_GEOR_INT.EQUALIZE0 +SDO_GEOR_INT.EQUALIZE0_BLOB +SDO_GEOR_INT.EQUALIZEP0 +SDO_GEOR_INT.EVALUATE +SDO_GEOR_INT.EVALUATES +SDO_GEOR_INT.EXPORTTO +SDO_GEOR_INT.FILTER0 +SDO_GEOR_INT.FILTER0_BLOB +SDO_GEOR_INT.FILTERP0 +SDO_GEOR_INT.FINDCELLS +SDO_GEOR_INT.FINDCELLSP +SDO_GEOR_INT.FINDCELLSPUNIT +SDO_GEOR_INT.GENERATEBLOCKMBR +SDO_GEOR_INT.GENERATEPYRAMID +SDO_GEOR_INT.GENERATEPYRAMIDP0 +SDO_GEOR_INT.GENERATEQUERIES +SDO_GEOR_INT.GENERATESPATIALEXTENT +SDO_GEOR_INT.GENERATESTATISTICS +SDO_GEOR_INT.GENERATESTATISTICS1P +SDO_GEOR_INT.GENERATESTATISTICSMAX +SDO_GEOR_INT.GENERATESTATISTICSMEDIAN +SDO_GEOR_INT.GENERATESTATISTICSP +SDO_GEOR_INT.GEOREFERENCE +SDO_GEOR_INT.GETATTRNO +SDO_GEOR_INT.GETBITMAPMASK +SDO_GEOR_INT.GETCELLCOORDINATE +SDO_GEOR_INT.GETCELLCOORDINATE2 +SDO_GEOR_INT.GETCELLVALUE +SDO_GEOR_INT.GETCELLVALUES +SDO_GEOR_INT.GETENQUOTEDSQLNAME +SDO_GEOR_INT.GETJP2TILESIZE +SDO_GEOR_INT.GETMODELCOORDINATE +SDO_GEOR_INT.GETMOSAICRESOLUTIONS +SDO_GEOR_INT.GETMOSAICSTATISTICS +SDO_GEOR_INT.GETMOSAICSUBSET +SDO_GEOR_INT.GETPARALLELDEGREE +SDO_GEOR_INT.GETRASTERBLOCKLOCATOR +SDO_GEOR_INT.GETRASTERIZEDGEOMETRY +SDO_GEOR_INT.GETRASTERRANGE +SDO_GEOR_INT.GETRASTERSUBSET +SDO_GEOR_INT.GETREPORTCLIENTID +SDO_GEOR_INT.GETREPORTOPNAME +SDO_GEOR_INT.GETREPORTSEQID +SDO_GEOR_INT.GETREPORTTARGETRDT +SDO_GEOR_INT.GETREPORTTARGETRID +SDO_GEOR_INT.HASBITMAPMASK +SDO_GEOR_INT.HISTOGRAMMATCH0 +SDO_GEOR_INT.HISTOGRAMMATCH1 +SDO_GEOR_INT.HISTOGRAMMATCHP0 +SDO_GEOR_INT.HISTOGRAMMATCHP1 +SDO_GEOR_INT.IMPORTFROM +SDO_GEOR_INT.INSERTUSERSYSENTRY +SDO_GEOR_INT.ISGEORASTERCOLUMN +SDO_GEOR_INT.ISOVERLAP +SDO_GEOR_INT.ISREPORTENABLED +SDO_GEOR_INT.ISSAMEGEOROBJ +SDO_GEOR_INT.ISVALIDRDT +SDO_GEOR_INT.IS_AFFINE_TRANSFORM +SDO_GEOR_INT.MASK +SDO_GEOR_INT.MATHOP +SDO_GEOR_INT.MATHOPP +SDO_GEOR_INT.MERGELAYERS +SDO_GEOR_INT.MOSAIC +SDO_GEOR_INT.MOSAICK +SDO_GEOR_INT.MOSAICSUBSET +SDO_GEOR_INT.MOSAICSUBSETP0 +SDO_GEOR_INT.NORMALIZE0 +SDO_GEOR_INT.NORMALIZE0_BLOB +SDO_GEOR_INT.NORMALIZE1 +SDO_GEOR_INT.NORMALIZEP0 +SDO_GEOR_INT.NORMALIZEP1 +SDO_GEOR_INT.PIECEWISESTRETCH0 +SDO_GEOR_INT.PIECEWISESTRETCH0_BLOB +SDO_GEOR_INT.PIECEWISESTRETCHP0 +SDO_GEOR_INT.POPULATERDT +SDO_GEOR_INT.PREPARERDT +SDO_GEOR_INT.PREPARERDT1 +SDO_GEOR_INT.RASTERDATATABLEEXISTS +SDO_GEOR_INT.RASTERDIFF +SDO_GEOR_INT.RASTERDIFFP +SDO_GEOR_INT.RASTERIZEPOLYGON +SDO_GEOR_INT.RASTERIZEPOLYGON0 +SDO_GEOR_INT.RASTERMATHOP +SDO_GEOR_INT.RASTERMATHOPP +SDO_GEOR_INT.RASTEROVER +SDO_GEOR_INT.RASTEROVERP +SDO_GEOR_INT.RASTERUPDATE +SDO_GEOR_INT.RASTERUPDATEP +SDO_GEOR_INT.RECTIFY +SDO_GEOR_INT.RECTIFYPARALLEL +SDO_GEOR_INT.REMOVEQUOTE0 +SDO_GEOR_INT.REPROJECT +SDO_GEOR_INT.SCALE +SDO_GEOR_INT.SCALECOPY +SDO_GEOR_INT.SDO_DOES_SYSDATA_EXIST +SDO_GEOR_INT.SDO_FETCH_SYSDATA +SDO_GEOR_INT.SDO_FETCH_SYSDATA_OWNER +SDO_GEOR_INT.SDO_INVALIDATE_SYSDATA_CACHE +SDO_GEOR_INT.SETBITMAPMASK +SDO_GEOR_INT.SETREPORTCLIENTID +SDO_GEOR_INT.SETREPORTOPNAME +SDO_GEOR_INT.SETREPORTSEQID +SDO_GEOR_INT.SETREPORTTARGETRDT +SDO_GEOR_INT.SETREPORTTARGETRID +SDO_GEOR_INT.SETSTATUS +SDO_GEOR_INT.SETULTCOORDINATE +SDO_GEOR_INT.STACK +SDO_GEOR_INT.STACKP +SDO_GEOR_INT.STRETCH0 +SDO_GEOR_INT.STRETCH0_BLOB +SDO_GEOR_INT.STRETCHP0 +SDO_GEOR_INT.SUBSET +SDO_GEOR_INT.TABLEEXISTS +SDO_GEOR_INT.TOAUXTABLE +SDO_GEOR_INT.TOGEORASTERARRAY +SDO_GEOR_INT.UPDATERASTER +SDO_GEOR_INT.VALIDATEBLOCKMBR +SDO_GEOR_INT.VALIDATEFORMOSAICSUBSET +SDO_GEOR_INT.VALIDATE_GEORASTER +SDO_GEOR_IP. +SDO_GEOR_IP.DODGE +SDO_GEOR_IP.EQUALIZE +SDO_GEOR_IP.FILTER +SDO_GEOR_IP.HISTOGRAMMATCH +SDO_GEOR_IP.NORMALIZE +SDO_GEOR_IP.PIECEWISESTRETCH +SDO_GEOR_IP.STRETCH +SDO_GEOR_RA. +SDO_GEOR_RA.CLASSIFY +SDO_GEOR_RA.DIFF +SDO_GEOR_RA.FINDCELLS +SDO_GEOR_RA.ISOVERLAP +SDO_GEOR_RA.OVER +SDO_GEOR_RA.RASTERMATHOP +SDO_GEOR_RA.RASTERUPDATE +SDO_GEOR_RA.STACK +SDO_GEOR_SRS.SDO_GEOR_SRS +SDO_GEOR_TRIG_DEL1. +SDO_GEOR_TRIG_DEL2. +SDO_GEOR_TRIG_INS1. +SDO_GEOR_TRIG_UPD1. +SDO_GEOR_UTL. +SDO_GEOR_UTL.CALCOPTIMIZEDBLOCKSIZE +SDO_GEOR_UTL.CALCRASTERNOMINALSIZE +SDO_GEOR_UTL.CALCRASTERSTORAGESIZE +SDO_GEOR_UTL.CALCSURFACEAREA +SDO_GEOR_UTL.CALCWORLDFILEPARAMS +SDO_GEOR_UTL.CLEARREPORTTABLE +SDO_GEOR_UTL.CREATEDMLTRIGGER +SDO_GEOR_UTL.CREATEREPORTTABLE +SDO_GEOR_UTL.DISABLEREPORT +SDO_GEOR_UTL.DROPREPORTTABLE +SDO_GEOR_UTL.EMPTYBLOCKS +SDO_GEOR_UTL.ENABLEREPORT +SDO_GEOR_UTL.FILLEMPTYBLOCKS +SDO_GEOR_UTL.GENERATECOLORRAMP +SDO_GEOR_UTL.GENERATEGRAYRAMP +SDO_GEOR_UTL.GETALLSTATUSREPORT +SDO_GEOR_UTL.GETMAXMEMSIZE +SDO_GEOR_UTL.GETPROGRESS +SDO_GEOR_UTL.GETREADBLOCKMEMSIZE +SDO_GEOR_UTL.GETSTATUSREPORT +SDO_GEOR_UTL.GETWRITEBLOCKMEMSIZE +SDO_GEOR_UTL.GET_CELL_GEOMS +SDO_GEOR_UTL.ISGEORASTERVALID +SDO_GEOR_UTL.ISREPORTING +SDO_GEOR_UTL.MAKERDTNAMESUNIQUE +SDO_GEOR_UTL.RECREATEDMLTRIGGERS +SDO_GEOR_UTL.RENAMERDT +SDO_GEOR_UTL.SETCLIENTID +SDO_GEOR_UTL.SETMAXMEMSIZE +SDO_GEOR_UTL.SETREADBLOCKMEMSIZE +SDO_GEOR_UTL.SETSEQID +SDO_GEOR_UTL.SETWRITEBLOCKMEMSIZE +SDO_GEO_ADDR.SDO_GEO_ADDR +SDO_GET_TAB_PART. +SDO_GET_TAB_SUBPART. +SDO_IDX. +SDO_IDX.ENDIANCONVERT +SDO_IDX.IE_CRT_GEOM_METADATA +SDO_IDX.PROCESS_PARAMS +SDO_IDX.TTS_INDEX_INITIALIZE +SDO_INDEX_METADATA_UPDATE. +SDO_INDEX_METHOD_10I.EXECUTE_INDEX_PTN_DROP +SDO_INDEX_METHOD_10I.INDEX_UPDATE +SDO_INDEX_METHOD_10I.INSERT_DELETE +SDO_INDEX_METHOD_10I.ODCIGETINTERFACES +SDO_INDEX_METHOD_10I.ODCIINDEXALTER +SDO_INDEX_METHOD_10I.ODCIINDEXCLOSE +SDO_INDEX_METHOD_10I.ODCIINDEXCOALESCEPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXCREATE +SDO_INDEX_METHOD_10I.ODCIINDEXDELETE +SDO_INDEX_METHOD_10I.ODCIINDEXDROP +SDO_INDEX_METHOD_10I.ODCIINDEXEXCHANGEPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXFETCH +SDO_INDEX_METHOD_10I.ODCIINDEXGETMETADATA +SDO_INDEX_METHOD_10I.ODCIINDEXINSERT +SDO_INDEX_METHOD_10I.ODCIINDEXMERGEPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXREWRITE +SDO_INDEX_METHOD_10I.ODCIINDEXSPLITPARTITION +SDO_INDEX_METHOD_10I.ODCIINDEXSTART +SDO_INDEX_METHOD_10I.ODCIINDEXTRUNCATE +SDO_INDEX_METHOD_10I.ODCIINDEXUPDATE +SDO_INDEX_METHOD_10I.ODCIINDEXUPDPARTMETADATA +SDO_INDEX_METHOD_10I.ODCIINDEXUTILCLEANUP +SDO_INDEX_METHOD_10I.ODCIINDEXUTILGETTABLENAMES +SDO_INTERACT_LINE_FEAT.GET_ID +SDO_INTERACT_POINT_FEAT.GET_ID +SDO_JAVA_STP. +SDO_JAVA_STP.AFFINETRANSFORMS +SDO_JAVA_STP.ANYINTERACT3D +SDO_JAVA_STP.AREA3D +SDO_JAVA_STP.BUILD_TURN_RESTRICTIONS +SDO_JAVA_STP.CENTROID3D +SDO_JAVA_STP.CLIP_GEOM_SEGMENT_GEO3D +SDO_JAVA_STP.CLOSESTPOINTS3D +SDO_JAVA_STP.DISTANCE3D +SDO_JAVA_STP.ELOCATIONSETJVMHEAPSIZE +SDO_JAVA_STP.ELOCATION_BORDER_DATA +SDO_JAVA_STP.ELOCATION_DUMP_BORDER_DATA +SDO_JAVA_STP.ELOCATION_DUMP_PARTITION +SDO_JAVA_STP.ELOCATION_DUMP_TIMEZONE_DATA +SDO_JAVA_STP.ELOCATION_DUMP_TRUCKING_DATA +SDO_JAVA_STP.ELOCATION_DUMP_TURN_RESTRICT +SDO_JAVA_STP.ELOCATION_PARTITION_ROUTER +SDO_JAVA_STP.ELOCATION_TIMEZONE_DATA +SDO_JAVA_STP.ELOCATION_TRUCKING_DATA +SDO_JAVA_STP.ELOCATION_TURN_RESTRICT_DATA +SDO_JAVA_STP.ELOCATION_VALIDATE_LOGFILE +SDO_JAVA_STP.ELOCATION_VALIDATE_PARTITION +SDO_JAVA_STP.EXPANDG3DGEOMS +SDO_JAVA_STP.EXTRACT3D +SDO_JAVA_STP.FIND_CONNECTED_COMPONENTS_JAVA +SDO_JAVA_STP.FIND_CONN_COMP_PART_JAVA +SDO_JAVA_STP.FROM_GML311GEOMETRY +SDO_JAVA_STP.FROM_GMLGEOMETRY +SDO_JAVA_STP.FROM_KMLGEOMETRY +SDO_JAVA_STP.FROM_WKBGEOMETRY +SDO_JAVA_STP.FROM_WKTGEOMETRY +SDO_JAVA_STP.GENERATE_BUFFER +SDO_JAVA_STP.GENERATE_PARTITION_BLOBS_JAVA +SDO_JAVA_STP.GENERATE_PARTITION_BLOBS_JAVA2 +SDO_JAVA_STP.GENERATE_PARTITION_BLOB_JAVA +SDO_JAVA_STP.GETLABELBYELEMENT +SDO_JAVA_STP.GET_PARTITION_SIZE_JAVA +SDO_JAVA_STP.INSIDE3D +SDO_JAVA_STP.INTERNAL_GETNURBSAPPROX +SDO_JAVA_STP.INTERNAL_SIMPLIFYVW +SDO_JAVA_STP.INTL_EXTRUDE +SDO_JAVA_STP.INTL_TO_WKBGEOMETRY +SDO_JAVA_STP.INTL_TO_WKTGEOMETRY +SDO_JAVA_STP.INTL_TO_WKTGEOMETRY_VARCHAR +SDO_JAVA_STP.LENGTH3D +SDO_JAVA_STP.LENGTH_GEO3D +SDO_JAVA_STP.LOAD_CONFIG_JAVA +SDO_JAVA_STP.LOCATE_PT_GEO3D +SDO_JAVA_STP.PCTRCLIP +SDO_JAVA_STP.POPULATE_MEASURE_GEO3D +SDO_JAVA_STP.PROJECT_PT_GEO3D +SDO_JAVA_STP.RING_UNION_APPROX +SDO_JAVA_STP.SET_LOGGING_LEVEL_JAVA +SDO_JAVA_STP.SET_MAX_JAVA_HEAP_SIZE +SDO_JAVA_STP.TO_GML311GEOMETRY +SDO_JAVA_STP.TO_GML321GEOMETRY +SDO_JAVA_STP.TO_GMLGEOMETRY +SDO_JAVA_STP.TO_KMLGEOMETRY +SDO_JAVA_STP.VALIDATEGEOM3D +SDO_JAVA_STP.VALIDATE_LAYER_WITH_CONTEXT3D +SDO_JAVA_STP.VALIDATE_WKBGEOMETRY +SDO_JAVA_STP.VALIDATE_WKTGEOMETRY +SDO_JAVA_STP.VALIDATE_XML_LAYER_INT +SDO_JAVA_STP.VALIDATE_XML_RECORD +SDO_JAVA_STP.VOLUME3D +SDO_JOIN. +SDO_LINK_I.GET_CHILD_LINKS +SDO_LINK_I.GET_CHILD_LINKS_S +SDO_LINK_I.GET_COST +SDO_LINK_I.GET_COST_S +SDO_LINK_I.GET_CO_LINK_IDS +SDO_LINK_I.GET_CO_LINK_IDS_S +SDO_LINK_I.GET_END_MEASURE +SDO_LINK_I.GET_END_MEASURE_S +SDO_LINK_I.GET_END_NODE_ID +SDO_LINK_I.GET_END_NODE_ID_S +SDO_LINK_I.GET_GEOMETRY +SDO_LINK_I.GET_GEOMETRY_S +SDO_LINK_I.GET_GEOM_ID +SDO_LINK_I.GET_GEOM_ID_S +SDO_LINK_I.GET_LEVEL +SDO_LINK_I.GET_LEVEL_S +SDO_LINK_I.GET_NAME +SDO_LINK_I.GET_NAME_S +SDO_LINK_I.GET_PARENT_LINK_ID +SDO_LINK_I.GET_PARENT_LINK_ID_S +SDO_LINK_I.GET_SIBLING_LINK_IDS +SDO_LINK_I.GET_SIBLING_LINK_IDS_S +SDO_LINK_I.GET_START_MEASURE +SDO_LINK_I.GET_START_MEASURE_S +SDO_LINK_I.GET_START_NODE_ID +SDO_LINK_I.GET_START_NODE_ID_S +SDO_LINK_I.GET_STATE +SDO_LINK_I.GET_STATE_S +SDO_LINK_I.GET_TYPE +SDO_LINK_I.GET_TYPE_S +SDO_LINK_I.IS_ACTIVE +SDO_LINK_I.IS_ACTIVE_S +SDO_LINK_I.IS_LOGICAL +SDO_LINK_I.IS_LOGICAL_S +SDO_LINK_I.IS_TEMPORARY +SDO_LINK_I.IS_TEMPORARY_S +SDO_LINK_I.MAKE_TEMPORARY +SDO_LINK_I.MAKE_TEMPORARY_S +SDO_LINK_I.SET_COST +SDO_LINK_I.SET_COST_S +SDO_LINK_I.SET_END_NODE +SDO_LINK_I.SET_END_NODE_S +SDO_LINK_I.SET_GEOMETRY +SDO_LINK_I.SET_GEOMETRY_S +SDO_LINK_I.SET_GEOM_ID +SDO_LINK_I.SET_GEOM_ID_S +SDO_LINK_I.SET_LEVEL +SDO_LINK_I.SET_LEVEL_S +SDO_LINK_I.SET_MEASURE +SDO_LINK_I.SET_MEASURE_S +SDO_LINK_I.SET_NAME +SDO_LINK_I.SET_NAME_S +SDO_LINK_I.SET_PARENT_LINK +SDO_LINK_I.SET_PARENT_LINK_S +SDO_LINK_I.SET_START_NODE +SDO_LINK_I.SET_START_NODE_S +SDO_LINK_I.SET_STATE +SDO_LINK_I.SET_STATE_S +SDO_LINK_I.SET_TYPE +SDO_LINK_I.SET_TYPE_S +SDO_LINK_T.GET_CHILD_LINKS +SDO_LINK_T.GET_COST +SDO_LINK_T.GET_CO_LINK_IDS +SDO_LINK_T.GET_END_MEASURE +SDO_LINK_T.GET_END_NODE_ID +SDO_LINK_T.GET_GEOMETRY +SDO_LINK_T.GET_GEOM_ID +SDO_LINK_T.GET_LEVEL +SDO_LINK_T.GET_NAME +SDO_LINK_T.GET_PARENT_LINK_ID +SDO_LINK_T.GET_SIBLING_LINK_IDS +SDO_LINK_T.GET_START_MEASURE +SDO_LINK_T.GET_START_NODE_ID +SDO_LINK_T.GET_STATE +SDO_LINK_T.GET_TYPE +SDO_LINK_T.IS_ACTIVE +SDO_LINK_T.IS_LOGICAL +SDO_LINK_T.IS_TEMPORARY +SDO_LINK_T.MAKE_TEMPORARY +SDO_LINK_T.SET_COST +SDO_LINK_T.SET_END_NODE +SDO_LINK_T.SET_GEOMETRY +SDO_LINK_T.SET_GEOM_ID +SDO_LINK_T.SET_LEVEL +SDO_LINK_T.SET_MEASURE +SDO_LINK_T.SET_NAME +SDO_LINK_T.SET_PARENT_LINK +SDO_LINK_T.SET_START_NODE +SDO_LINK_T.SET_STATE +SDO_LINK_T.SET_TYPE +SDO_LRS. +SDO_LRS.CLIP_GEOM_SEGMENT +SDO_LRS.CLIP_GEOM_SEGMENT_3D +SDO_LRS.CLIP_GEOM_SEGMENT_3D_LEVEL_M +SDO_LRS.CLIP_GEOM_SEGMENT_LEVEL_M +SDO_LRS.CONCATENATE_GEOM_SEGMENTS +SDO_LRS.CONCATENATE_GEOM_SEGMENTS_3D +SDO_LRS.CONNECTED_GEOM_SEGMENTS +SDO_LRS.CONNECTED_GEOM_SEGMENTS_3D +SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY +SDO_LRS.CONVERT_TO_LRS_DIM_ARRAY_3D +SDO_LRS.CONVERT_TO_LRS_GEOM +SDO_LRS.CONVERT_TO_LRS_GEOM_3D +SDO_LRS.CONVERT_TO_LRS_LAYER +SDO_LRS.CONVERT_TO_LRS_LAYER_3D +SDO_LRS.CONVERT_TO_STD_DIM_ARRAY +SDO_LRS.CONVERT_TO_STD_DIM_ARRAY_3D +SDO_LRS.CONVERT_TO_STD_GEOM +SDO_LRS.CONVERT_TO_STD_GEOM_3D +SDO_LRS.CONVERT_TO_STD_LAYER +SDO_LRS.CONVERT_TO_STD_LAYER_3D +SDO_LRS.DEFINE_GEOM_SEGMENT +SDO_LRS.DEFINE_GEOM_SEGMENT_3D +SDO_LRS.DYNAMIC_SEGMENT +SDO_LRS.DYNAMIC_SEGMENT_3D +SDO_LRS.DYNAMIC_SEGMENT_3D_LEVEL_M +SDO_LRS.DYNAMIC_SEGMENT_LEVEL_M +SDO_LRS.FIND_LRS_DIM_POS +SDO_LRS.FIND_MEASURE +SDO_LRS.FIND_MEASURE_3D +SDO_LRS.FIND_OFFSET +SDO_LRS.GEOM_SEGMENT_END_MEASURE +SDO_LRS.GEOM_SEGMENT_END_MEASURE_3D +SDO_LRS.GEOM_SEGMENT_END_PT +SDO_LRS.GEOM_SEGMENT_END_PT_3D +SDO_LRS.GEOM_SEGMENT_LENGTH +SDO_LRS.GEOM_SEGMENT_LENGTH_3D +SDO_LRS.GEOM_SEGMENT_START_MEASURE +SDO_LRS.GEOM_SEGMENT_START_MEASURE_3D +SDO_LRS.GEOM_SEGMENT_START_PT +SDO_LRS.GEOM_SEGMENT_START_PT_3D +SDO_LRS.GET_MEASURE +SDO_LRS.GET_MEASURE_3D +SDO_LRS.GET_NEXT_SHAPE_PT +SDO_LRS.GET_NEXT_SHAPE_PT_3D +SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE +SDO_LRS.GET_NEXT_SHAPE_PT_MEASURE_3D +SDO_LRS.GET_PREV_SHAPE_PT +SDO_LRS.GET_PREV_SHAPE_PT_3D +SDO_LRS.GET_PREV_SHAPE_PT_MEASURE +SDO_LRS.GET_PREV_SHAPE_PT_MEASURE_3D +SDO_LRS.IS_GEOM_SEGMENT_DEFINED +SDO_LRS.IS_GEOM_SEGMENT_DEFINED_3D +SDO_LRS.IS_MEASURE_DECREASING +SDO_LRS.IS_MEASURE_DECREASING_3D +SDO_LRS.IS_MEASURE_INCREASING +SDO_LRS.IS_MEASURE_INCREASING_3D +SDO_LRS.IS_SHAPE_PT_MEASURE +SDO_LRS.IS_SHAPE_PT_MEASURE_3D +SDO_LRS.LOCATE_PT +SDO_LRS.LOCATE_PT_3D +SDO_LRS.LOCATE_PT_3D_LEVEL_M +SDO_LRS.LOCATE_PT_LEVEL_M +SDO_LRS.LRS_INTERSECTION +SDO_LRS.LRS_INTERSECTION_ARRAY +SDO_LRS.MEASURE_RANGE +SDO_LRS.MEASURE_RANGE_3D +SDO_LRS.MEASURE_TO_PERCENTAGE +SDO_LRS.NUMBER_OF_MEASURE +SDO_LRS.OFFSET_GEOM_SEGMENT +SDO_LRS.PERCENTAGE_TO_MEASURE +SDO_LRS.PROJECT_PT +SDO_LRS.PROJECT_PT_3D +SDO_LRS.PROJECT_PT_3D_ARRAY +SDO_LRS.PROJECT_PT_3D_BY_INDEX +SDO_LRS.PROJECT_PT_ARRAY +SDO_LRS.PROJECT_PT_BY_INDEX +SDO_LRS.REDEFINE_GEOM_SEGMENT +SDO_LRS.REDEFINE_GEOM_SEGMENT_3D +SDO_LRS.RESET_MEASURE +SDO_LRS.REVERSE_GEOMETRY +SDO_LRS.REVERSE_MEASURE +SDO_LRS.REVERSE_MEASURE_3D +SDO_LRS.SCALE_GEOM_SEGMENT +SDO_LRS.SET_PT_MEASURE +SDO_LRS.SET_PT_MEASURE_3D +SDO_LRS.SPLIT_GEOM_SEGMENT +SDO_LRS.SPLIT_GEOM_SEGMENT_3D +SDO_LRS.TRANSLATE_MEASURE +SDO_LRS.TRANSLATE_MEASURE_3D +SDO_LRS.VALIDATE_LRS_GEOMETRY +SDO_LRS.VALIDATE_LRS_GEOMETRY_3D +SDO_LRS.VALID_GEOM_SEGMENT +SDO_LRS.VALID_GEOM_SEGMENT_3D +SDO_LRS.VALID_LRS_PT +SDO_LRS.VALID_LRS_PT_3D +SDO_LRS.VALID_MEASURE +SDO_LRS.VALID_MEASURE_3D +SDO_LRS_TRIG_DEL. +SDO_LRS_TRIG_INS. +SDO_LRS_TRIG_UPD. +SDO_MEMORY. +SDO_MEMORY.CHECK_MEMORY_LEAK +SDO_MEMORY.END_MEMORY_CHECK +SDO_MEMORY.START_MEMORY_CHECK +SDO_META. +SDO_META.CHANGE_ALL_SDO_GEOM_METADATA +SDO_META.CHANGE_IMP_SDO_GEOM_METADATA +SDO_META.DELETEGEORSYSENTRY +SDO_META.DELETE_ALL_SDO_GEOM_METADATA +SDO_META.DELETE_TOPO_METADATA +SDO_META.INSERTGEORSYSENTRY +SDO_META.INSERT_ALL_SDO_GEOM_METADATA +SDO_META.INSERT_TOPO_METADATA +SDO_META.UPDATE_TOPO_METADATA +SDO_META_USER. +SDO_META_USER.CREATEDMLTRIGGER +SDO_META_USER.CREATE_TOPO_BTREE +SDO_MIGRATE. +SDO_MIGRATE.FROM_815_TO_81X +SDO_MIGRATE.OGIS_METADATA_FROM +SDO_MIGRATE.OGIS_METADATA_TO +SDO_MIGRATE.TO_81X +SDO_MIGRATE.TO_CURRENT +SDO_MODEL_FTLAYER_TRIG_DEL. +SDO_MODEL_FTLAYER_TRIG_INS. +SDO_MODEL_FTLAYER_TRIG_UPD. +SDO_NDM_TRAFFIC. +SDO_NDM_TRAFFIC.CREATE_NDM_NETWORK +SDO_NDM_TRAFFIC.CREATE_NDM_TRAFFIC_TABLES +SDO_NDM_TRAFFIC.CREATE_TRAFFIC_METADATA +SDO_NDM_TRAFFIC.GENERATE_TRAFFIC_DATA_BLOBS +SDO_NDM_TRAFFIC.GENERATE_TRAFFIC_USER_DATA +SDO_NDM_TRAFFIC.GENERATE_TRAF_DATA_ONE_PART +SDO_NDM_TRAFFIC.GRANT_FILE_PERMISSIONS +SDO_NDM_TRAFFIC.INSERT_TRAFFIC_METADATA +SDO_NDM_TRAFFIC.LOG_MESSAGE +SDO_NDM_TRAFFIC.SET_LOG_INFO +SDO_NDM_TRAFFIC.SET_MAX_MEMORY_SIZE +SDO_NDM_TRAFFIC.TRANSLATE_USER_DATA +SDO_NDM_TRAFFIC.TRANSLATE_USER_DATA_BLOBS +SDO_NDM_TRAFFIC.TRANSLATE_USER_DATA_BLOBS_PART +SDO_NET. +SDO_NET.ADD_CHILD_FEATURE +SDO_NET.ADD_CHILD_FEATURES +SDO_NET.ADD_FEATURE +SDO_NET.ADD_FEATURE_ELEMENT +SDO_NET.ADD_FEATURE_ELEMENTS +SDO_NET.ADD_FEATURE_LAYER +SDO_NET.COMPUTE_PATH_GEOMETRY +SDO_NET.COPY_NETWORK +SDO_NET.CREATE_COMPONENT_TABLE +SDO_NET.CREATE_DELETE_TRIGGER +SDO_NET.CREATE_LINK_TABLE +SDO_NET.CREATE_LOGICAL_NETWORK +SDO_NET.CREATE_LRS_NETWORK +SDO_NET.CREATE_LRS_TABLE +SDO_NET.CREATE_NETWORK +SDO_NET.CREATE_NODE_TABLE +SDO_NET.CREATE_PARTITION_BLOB_TABLE +SDO_NET.CREATE_PARTITION_TABLE +SDO_NET.CREATE_PATH_LINK_TABLE +SDO_NET.CREATE_PATH_TABLE +SDO_NET.CREATE_REF_CONSTRAINTS +SDO_NET.CREATE_SDO_NETWORK +SDO_NET.CREATE_SUBPATH_TABLE +SDO_NET.CREATE_TOPO_NETWORK +SDO_NET.DB_SYNC_CLEAR +SDO_NET.DB_SYNC_DISABLE +SDO_NET.DB_SYNC_ENABLE +SDO_NET.DB_SYNC_GET_UPDATE +SDO_NET.DELETE_CHILD_FEATURES +SDO_NET.DELETE_CHILD_FEATURES_AT +SDO_NET.DELETE_DANGLING_FEATURES +SDO_NET.DELETE_DANGLING_LINKS +SDO_NET.DELETE_DANGLING_NODES +SDO_NET.DELETE_FEATURES +SDO_NET.DELETE_FEATURE_ELEMENTS +SDO_NET.DELETE_FEATURE_ELEMENTS_AT +SDO_NET.DELETE_LINK +SDO_NET.DELETE_NODE +SDO_NET.DELETE_PATH +SDO_NET.DELETE_PHANTOM_FEATURES +SDO_NET.DELETE_SUBPATH +SDO_NET.DEREGISTER_CONSTRAINT +SDO_NET.DEREGISTER_JAVA_OBJECT +SDO_NET.DISABLE_REF_CONSTRAINTS +SDO_NET.DROP_FEATURE_LAYER +SDO_NET.DROP_NETWORK +SDO_NET.DROP_REF_CONSTRAINTS +SDO_NET.ENABLE_REF_CONSTRAINTS +SDO_NET.FIND_CONNECTED_COMPONENTS +SDO_NET.GENERATE_NODE_LEVELS +SDO_NET.GENERATE_PARENT_LINK_TABLE +SDO_NET.GENERATE_PARTITION_BLOB +SDO_NET.GENERATE_PARTITION_BLOBS +SDO_NET.GET_BUFFER_COST +SDO_NET.GET_CHILD_FEATURE_IDS +SDO_NET.GET_CHILD_LINKS +SDO_NET.GET_CHILD_NODES +SDO_NET.GET_DANGLING_FEATURES +SDO_NET.GET_DANGLING_LINKS +SDO_NET.GET_DANGLING_NODES +SDO_NET.GET_FEATURES_ON_LINKS +SDO_NET.GET_FEATURES_ON_NODES +SDO_NET.GET_FEATURE_ELEMENTS +SDO_NET.GET_FEATURE_LAYER_ID +SDO_NET.GET_GEOMETRY +SDO_NET.GET_GEOMETRY_TYPE +SDO_NET.GET_INVALID_LINKS +SDO_NET.GET_INVALID_NODES +SDO_NET.GET_INVALID_PATHS +SDO_NET.GET_IN_LINKS +SDO_NET.GET_ISOLATED_NODES +SDO_NET.GET_LINKS_IN_CHILD_NETWORK +SDO_NET.GET_LINKS_IN_PATH +SDO_NET.GET_LINK_COST_COLUMN +SDO_NET.GET_LINK_DIRECTION +SDO_NET.GET_LINK_GEOMETRY +SDO_NET.GET_LINK_GEOM_COLUMN +SDO_NET.GET_LINK_PARTITION_COLUMN +SDO_NET.GET_LINK_TABLE_NAME +SDO_NET.GET_LOGGING_LEVEL +SDO_NET.GET_LRS_GEOM_COLUMN +SDO_NET.GET_LRS_LINK_GEOMETRY +SDO_NET.GET_LRS_NODE_GEOMETRY +SDO_NET.GET_LRS_TABLE_NAME +SDO_NET.GET_NETWORK_CATEGORY +SDO_NET.GET_NETWORK_ID +SDO_NET.GET_NETWORK_NAME +SDO_NET.GET_NETWORK_OWNER +SDO_NET.GET_NETWORK_TYPE +SDO_NET.GET_NODES_IN_CHILD_NETWORK +SDO_NET.GET_NODES_IN_PATH +SDO_NET.GET_NODE_COST_COLUMN +SDO_NET.GET_NODE_DEGREE +SDO_NET.GET_NODE_GEOMETRY +SDO_NET.GET_NODE_GEOM_COLUMN +SDO_NET.GET_NODE_HIERARCHY_LEVEL +SDO_NET.GET_NODE_IN_DEGREE +SDO_NET.GET_NODE_OUT_DEGREE +SDO_NET.GET_NODE_PARTITION_COLUMN +SDO_NET.GET_NODE_TABLE_NAME +SDO_NET.GET_NO_OF_HIERARCHY_LEVELS +SDO_NET.GET_NO_OF_LINKS +SDO_NET.GET_NO_OF_LINKS_IN_PATH +SDO_NET.GET_NO_OF_NODES +SDO_NET.GET_NO_OF_NODES_IN_PATH +SDO_NET.GET_NO_OF_PARTITIONS +SDO_NET.GET_OUT_LINKS +SDO_NET.GET_PARENT_FEATURE_IDS +SDO_NET.GET_PARTITION_BLOB_TABLE_NAME +SDO_NET.GET_PARTITION_SIZE +SDO_NET.GET_PARTITION_TABLE_NAME +SDO_NET.GET_PATH_GEOM_COLUMN +SDO_NET.GET_PATH_LINK_TABLE_NAME +SDO_NET.GET_PATH_TABLE_NAME +SDO_NET.GET_PERCENTAGE +SDO_NET.GET_PHANTOM_FEATURES +SDO_NET.GET_PT +SDO_NET.GET_PT_GEOM_ORD +SDO_NET.GET_SUBPATH_GEOM_COLUMN +SDO_NET.GET_SUBPATH_TABLE_NAME +SDO_NET.GET_TOPOLOGY +SDO_NET.GET_TOPO_LINK_GEOMETRY +SDO_NET.GET_TOPO_NODE_GEOMETRY +SDO_NET.GET_USER_DEFINED_DATA +SDO_NET.INSERT_GEOM_METADATA +SDO_NET.INSERT_PATH_LINK_INFO +SDO_NET.IS_COMPLEX +SDO_NET.IS_COVERED_BY_LINK_INTERVAL +SDO_NET.IS_GEODETIC +SDO_NET.IS_HIERARCHICAL +SDO_NET.IS_LINK_IN_PATH +SDO_NET.IS_LOGICAL +SDO_NET.IS_NODE_IN_PATH +SDO_NET.IS_SIMPLE +SDO_NET.IS_SPATIAL +SDO_NET.LOAD_CONFIG +SDO_NET.LOGICAL_PARTITION +SDO_NET.LOGICAL_POWERLAW_PARTITION +SDO_NET.LRS_GEOMETRY_NETWORK +SDO_NET.NETWORK_EXISTS +SDO_NET.POST_XML +SDO_NET.REGISTER_CONSTRAINT +SDO_NET.REGISTER_JAVA_OBJECT +SDO_NET.SDO_GEOMETRY_NETWORK +SDO_NET.SET_LOGGING_LEVEL +SDO_NET.SET_MAX_JAVA_HEAP_SIZE +SDO_NET.SPATIAL_PARTITION +SDO_NET.SWITCH_TO_LOGICAL_NETWORK +SDO_NET.SWITCH_TO_SPATIAL_NETWORK +SDO_NET.TOPO_GEOMETRY_NETWORK +SDO_NET.UPDATE_CONSISTENCY +SDO_NET.UPDATE_FEATURE +SDO_NET.UPDATE_FEATURE_ELEMENT +SDO_NET.VALIDATE_COMPONENT_SCHEMA +SDO_NET.VALIDATE_CONSISTENCY +SDO_NET.VALIDATE_LINK_SCHEMA +SDO_NET.VALIDATE_LRS_SCHEMA +SDO_NET.VALIDATE_NETWORK +SDO_NET.VALIDATE_NODE_SCHEMA +SDO_NET.VALIDATE_PARTITION_BLOB_SCHEMA +SDO_NET.VALIDATE_PARTITION_INFO +SDO_NET.VALIDATE_PARTITION_SCHEMA +SDO_NET.VALIDATE_PATH_SCHEMA +SDO_NET.VALIDATE_SUBPATH_SCHEMA +SDO_NETWORK_CONS_DEL_TRIG. +SDO_NETWORK_CONS_INS_TRIG. +SDO_NETWORK_CONS_UPD_TRIG. +SDO_NETWORK_DROP_USER. +SDO_NETWORK_HIS_DEL_TRIG. +SDO_NETWORK_HIS_INS_TRIG. +SDO_NETWORK_HIS_UPD_TRIG. +SDO_NETWORK_I.ADD_LINK +SDO_NETWORK_I.ADD_LINK_S +SDO_NETWORK_I.ADD_LRS_LINK +SDO_NETWORK_I.ADD_LRS_LINK_S +SDO_NETWORK_I.ADD_LRS_NODE +SDO_NETWORK_I.ADD_LRS_NODE_S +SDO_NETWORK_I.ADD_NODE +SDO_NETWORK_I.ADD_NODE_S +SDO_NETWORK_I.ADD_PATH +SDO_NETWORK_I.ADD_PATH_S +SDO_NETWORK_I.ADD_SDO_LINK +SDO_NETWORK_I.ADD_SDO_LINK_S +SDO_NETWORK_I.ADD_SDO_NODE +SDO_NETWORK_I.ADD_SDO_NODE_S +SDO_NETWORK_I.DELETE_LINK +SDO_NETWORK_I.DELETE_LINK_S +SDO_NETWORK_I.DELETE_NODE +SDO_NETWORK_I.DELETE_NODE_S +SDO_NETWORK_I.DELETE_PATH +SDO_NETWORK_I.DELETE_PATH_S +SDO_NETWORK_I.GET_MAX_LINK_ID +SDO_NETWORK_I.GET_MAX_LINK_ID_S +SDO_NETWORK_I.GET_MAX_NODE_ID +SDO_NETWORK_I.GET_MAX_NODE_ID_S +SDO_NETWORK_I.GET_MAX_PATH_ID +SDO_NETWORK_I.GET_MAX_PATH_ID_S +SDO_NETWORK_I.GET_MAX_SUBPATH_ID +SDO_NETWORK_I.GET_MAX_SUBPATH_ID_S +SDO_NETWORK_JAVA_DEL_TRIG. +SDO_NETWORK_JAVA_INS_TRIG. +SDO_NETWORK_JAVA_UPD_TRIG. +SDO_NETWORK_LOCKS_DEL_TRIG. +SDO_NETWORK_LOCKS_INS_TRIG. +SDO_NETWORK_LOCKS_UPD_TRIG. +SDO_NETWORK_MANAGER_I.ADJUST_LINK_FILTER +SDO_NETWORK_MANAGER_I.ADJUST_NODE_FILTER +SDO_NETWORK_MANAGER_I.ADJUST_PATH_FILTER +SDO_NETWORK_MANAGER_I.ALL_PATHS +SDO_NETWORK_MANAGER_I.ALL_PATHS_S +SDO_NETWORK_MANAGER_I.CREATE_LOGICAL_NETWORK +SDO_NETWORK_MANAGER_I.CREATE_LOGICAL_NETWORK_S +SDO_NETWORK_MANAGER_I.CREATE_LRS_NETWORK +SDO_NETWORK_MANAGER_I.CREATE_LRS_NETWORK_S +SDO_NETWORK_MANAGER_I.CREATE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_I.CREATE_REF_CONSTRAINTS_S +SDO_NETWORK_MANAGER_I.CREATE_SDO_NETWORK +SDO_NETWORK_MANAGER_I.CREATE_SDO_NETWORK_S +SDO_NETWORK_MANAGER_I.DEREGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_I.DEREGISTER_LOCK +SDO_NETWORK_MANAGER_I.DISABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_I.DISABLE_REF_CONSTRAINTS_S +SDO_NETWORK_MANAGER_I.DISABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_I.DROP_NETWORK +SDO_NETWORK_MANAGER_I.DROP_NETWORK_S +SDO_NETWORK_MANAGER_I.ENABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_I.ENABLE_REF_CONSTRAINTS_S +SDO_NETWORK_MANAGER_I.ENABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_I.FIND_CONNECTED_COMPONENTS +SDO_NETWORK_MANAGER_I.FIND_CONNECTED_COMPONENTS_S +SDO_NETWORK_MANAGER_I.FIND_REACHABLE_NODES +SDO_NETWORK_MANAGER_I.FIND_REACHABLE_NODES_S +SDO_NETWORK_MANAGER_I.FIND_REACHING_NODES +SDO_NETWORK_MANAGER_I.FIND_REACHING_NODES_S +SDO_NETWORK_MANAGER_I.GET_DEFAULT_VALUE_S +SDO_NETWORK_MANAGER_I.GET_LOCK_ID +SDO_NETWORK_MANAGER_I.GET_LOCK_INFO +SDO_NETWORK_MANAGER_I.GET_NET_TAB_NAMES +SDO_NETWORK_MANAGER_I.IS_REACHABLE +SDO_NETWORK_MANAGER_I.IS_REACHABLE_S +SDO_NETWORK_MANAGER_I.IS_VERSIONED_S +SDO_NETWORK_MANAGER_I.IS_VERSIONED_TAB +SDO_NETWORK_MANAGER_I.IS_VERSIONED_WM +SDO_NETWORK_MANAGER_I.LIST_NETWORKS +SDO_NETWORK_MANAGER_I.LIST_NETWORKS_S +SDO_NETWORK_MANAGER_I.LOCK_ROWS_WM +SDO_NETWORK_MANAGER_I.MCST_LINK +SDO_NETWORK_MANAGER_I.MCST_LINK_S +SDO_NETWORK_MANAGER_I.NEAREST_NEIGHBORS +SDO_NETWORK_MANAGER_I.NEAREST_NEIGHBORS_S +SDO_NETWORK_MANAGER_I.READ_CONSTRAINT +SDO_NETWORK_MANAGER_I.READ_NETWORK +SDO_NETWORK_MANAGER_I.READ_NETWORK_S +SDO_NETWORK_MANAGER_I.REGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_I.REGISTER_LOCK +SDO_NETWORK_MANAGER_I.SHORTEST_PATH +SDO_NETWORK_MANAGER_I.SHORTEST_PATH_DIJKSTRA +SDO_NETWORK_MANAGER_I.SHORTEST_PATH_DIJKSTRA_S +SDO_NETWORK_MANAGER_I.SHORTEST_PATH_S +SDO_NETWORK_MANAGER_I.TSP_PATH +SDO_NETWORK_MANAGER_I.TSP_PATH_S +SDO_NETWORK_MANAGER_I.UNLOCK_ROWS_WM +SDO_NETWORK_MANAGER_I.VALIDATE_NETWORK_SCHEMA +SDO_NETWORK_MANAGER_I.VALIDATE_NETWORK_SCHEMA_S +SDO_NETWORK_MANAGER_I.WITHIN_COST +SDO_NETWORK_MANAGER_I.WITHIN_COST_S +SDO_NETWORK_MANAGER_I.WRITE_NETWORK +SDO_NETWORK_MANAGER_I.WRITE_NETWORK_S +SDO_NETWORK_MANAGER_T.ALL_PATHS +SDO_NETWORK_MANAGER_T.CREATE_LOGICAL_NETWORK +SDO_NETWORK_MANAGER_T.CREATE_LRS_NETWORK +SDO_NETWORK_MANAGER_T.CREATE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_T.CREATE_SDO_NETWORK +SDO_NETWORK_MANAGER_T.DEREGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_T.DISABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_T.DISABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_T.DROP_NETWORK +SDO_NETWORK_MANAGER_T.ENABLE_REF_CONSTRAINTS +SDO_NETWORK_MANAGER_T.ENABLE_VERSIONING_WM +SDO_NETWORK_MANAGER_T.FIND_CONNECTED_COMPONENTS +SDO_NETWORK_MANAGER_T.FIND_REACHABLE_NODES +SDO_NETWORK_MANAGER_T.FIND_REACHING_NODES +SDO_NETWORK_MANAGER_T.IS_REACHABLE +SDO_NETWORK_MANAGER_T.IS_VERSIONED_WM +SDO_NETWORK_MANAGER_T.LIST_NETWORKS +SDO_NETWORK_MANAGER_T.LOCK_ROWS_WM +SDO_NETWORK_MANAGER_T.MCST_LINK +SDO_NETWORK_MANAGER_T.NEAREST_NEIGHBORS +SDO_NETWORK_MANAGER_T.READ_NETWORK +SDO_NETWORK_MANAGER_T.REGISTER_CONSTRAINT +SDO_NETWORK_MANAGER_T.SHORTEST_PATH +SDO_NETWORK_MANAGER_T.SHORTEST_PATH_DIJKSTRA +SDO_NETWORK_MANAGER_T.TSP_PATH +SDO_NETWORK_MANAGER_T.UNLOCK_ROWS_WM +SDO_NETWORK_MANAGER_T.VALIDATE_NETWORK_SCHEMA +SDO_NETWORK_MANAGER_T.WITHIN_COST +SDO_NETWORK_MANAGER_T.WRITE_NETWORK +SDO_NETWORK_T.ADD_LINK +SDO_NETWORK_T.ADD_LRS_LINK +SDO_NETWORK_T.ADD_LRS_NODE +SDO_NETWORK_T.ADD_NODE +SDO_NETWORK_T.ADD_PATH +SDO_NETWORK_T.ADD_SDO_LINK +SDO_NETWORK_T.ADD_SDO_NODE +SDO_NETWORK_T.DELETE_LINK +SDO_NETWORK_T.DELETE_NODE +SDO_NETWORK_T.DELETE_PATH +SDO_NETWORK_T.GET_MAX_LINK_ID +SDO_NETWORK_T.GET_MAX_NODE_ID +SDO_NETWORK_T.GET_MAX_PATH_ID +SDO_NETWORK_T.GET_MAX_SUBPATH_ID +SDO_NETWORK_TIME_DEL_TRIG. +SDO_NETWORK_TIME_INS_TRIG. +SDO_NETWORK_TIME_UPD_TRIG. +SDO_NETWORK_TRIG_DEL. +SDO_NETWORK_TRIG_INS. +SDO_NETWORK_TRIG_UPD. +SDO_NETWORK_UD_DEL_TRIG. +SDO_NETWORK_UD_INS_TRIG. +SDO_NETWORK_UD_UPD_TRIG. +SDO_NET_MEM. +SDO_NET_MEM.SET_MAX_MEMORY_SIZE +SDO_NET_PARTITION. +SDO_NET_PARTITION.ADJUST_M +SDO_NET_PARTITION.BINARY_SEARCH_MAXWT_ROW +SDO_NET_PARTITION.CLEAN_TABLES +SDO_NET_PARTITION.COMPUTE_CUTS_FOR_PARTITION +SDO_NET_PARTITION.GET_PID +SDO_NET_PARTITION.GRAPH_PARTITION +SDO_NET_PARTITION.INDEX_EXISTS +SDO_NET_PARTITION.LG_POWERLAW_PART +SDO_NET_PARTITION.LOGICAL_PART +SDO_NET_PARTITION.LOG_MESSAGE +SDO_NET_PARTITION.MIN_EIGENVECTOR +SDO_NET_PARTITION.SET_LOG_INFO +SDO_NET_PARTITION.TABLE_EXISTS +SDO_NFE. +SDO_NFE.APPLY_RULE +SDO_NFE.CLASSIFY_LINES_BY_SIDE +SDO_NFE.CREATE_MODEL_SEQUENCE +SDO_NFE.CREATE_MODEL_STRUCTURE +SDO_NFE.CREATE_MODEL_UNDERLYING_NET +SDO_NFE.CREATE_MODEL_WORKSPACE +SDO_NFE.DELETE_ALL_FT_LAYERS +SDO_NFE.DELETE_ALL_WORKSPACES +SDO_NFE.DELETE_MODEL_STRUCTURE +SDO_NFE.DELETE_MODEL_WORKSPACE +SDO_NFE.DISABLE_VERSIONING_TABLE +SDO_NFE.DROP_MODEL_SEQUENCE +SDO_NFE.DROP_MODEL_UNDERLYING_NETWORK +SDO_NFE.GET_CONNECTION_POINT_GEOM +SDO_NFE.GET_INTERACTION_GROUPS +SDO_NFE.GET_LINES_MATCH_LP_RULE +SDO_NFE.GET_LL_CONN_INTERSECTIONS +SDO_NFE.GET_LP_CONN_INTERSECTIONS +SDO_NFE.GET_MODEL_SEQUENCE_NAME +SDO_NFE.GET_MODEL_TABLE_NAME +SDO_NFE.GET_MODEL_UNDERLYING_NETWORK +SDO_NFE.GET_NEXT_SEQUENCE_VALUE +SDO_NFE.GET_POINTS_MATCH_LP_RULE +SDO_NFE.IMPORT_NETWORK +SDO_NFE.SET_MODEL_UNDERLYING_NETWORK +SDO_NFE.VALIDATE_SQL_NAMES +SDO_NFE_MODEL_TRIG_DEL. +SDO_NFE_MODEL_TRIG_INS. +SDO_NFE_MODEL_TRIG_UPD. +SDO_NFE_WORKSPACE_TRIG_DEL. +SDO_NFE_WORKSPACE_TRIG_INS. +SDO_NFE_WORKSPACE_TRIG_UPD. +SDO_NODE_I.GET_ADJACENT_NODE_IDS +SDO_NODE_I.GET_ADJACENT_NODE_IDS_S +SDO_NODE_I.GET_CHILD_NODE_IDS +SDO_NODE_I.GET_CHILD_NODE_IDS_S +SDO_NODE_I.GET_COMPONENT_NO +SDO_NODE_I.GET_COMPONENT_NO_S +SDO_NODE_I.GET_COST +SDO_NODE_I.GET_COST_S +SDO_NODE_I.GET_DEGREE +SDO_NODE_I.GET_DEGREE_S +SDO_NODE_I.GET_GEOMETRY +SDO_NODE_I.GET_GEOMETRY_S +SDO_NODE_I.GET_GEOM_ID +SDO_NODE_I.GET_GEOM_ID_S +SDO_NODE_I.GET_HIERARCHY_LEVEL +SDO_NODE_I.GET_HIERARCHY_LEVEL_S +SDO_NODE_I.GET_INCIDENT_LINK_IDS +SDO_NODE_I.GET_INCIDENT_LINK_IDS_S +SDO_NODE_I.GET_IN_DEGREE +SDO_NODE_I.GET_IN_DEGREE_S +SDO_NODE_I.GET_IN_LINK_IDS +SDO_NODE_I.GET_IN_LINK_IDS_S +SDO_NODE_I.GET_MEASURE +SDO_NODE_I.GET_MEASURE_S +SDO_NODE_I.GET_NAME +SDO_NODE_I.GET_NAME_S +SDO_NODE_I.GET_OUT_DEGREE +SDO_NODE_I.GET_OUT_DEGREE_S +SDO_NODE_I.GET_OUT_LINK_IDS +SDO_NODE_I.GET_OUT_LINK_IDS_S +SDO_NODE_I.GET_PARENT_NODE_ID +SDO_NODE_I.GET_PARENT_NODE_ID_S +SDO_NODE_I.GET_PARTITION_ID +SDO_NODE_I.GET_PARTITION_ID_S +SDO_NODE_I.GET_SIBLING_NODE_IDS +SDO_NODE_I.GET_SIBLING_NODE_IDS_S +SDO_NODE_I.GET_STATE +SDO_NODE_I.GET_STATE_S +SDO_NODE_I.GET_TYPE +SDO_NODE_I.GET_TYPE_S +SDO_NODE_I.IS_ACTIVE +SDO_NODE_I.IS_ACTIVE_S +SDO_NODE_I.IS_LOGICAL +SDO_NODE_I.IS_LOGICAL_S +SDO_NODE_I.IS_TEMPORARY +SDO_NODE_I.IS_TEMPORARY_S +SDO_NODE_I.LINK_EXISTS +SDO_NODE_I.LINK_EXISTS_S +SDO_NODE_I.MAKE_TEMPORARY +SDO_NODE_I.MAKE_TEMPORARY_S +SDO_NODE_I.SET_COMPONENT_NO +SDO_NODE_I.SET_COMPONENT_NO_S +SDO_NODE_I.SET_COST +SDO_NODE_I.SET_COST_S +SDO_NODE_I.SET_GEOMETRY +SDO_NODE_I.SET_GEOMETRY_S +SDO_NODE_I.SET_GEOM_ID +SDO_NODE_I.SET_GEOM_ID_S +SDO_NODE_I.SET_HIERARCHY_LEVEL +SDO_NODE_I.SET_HIERARCHY_LEVEL_S +SDO_NODE_I.SET_MEASURE +SDO_NODE_I.SET_MEASURE_S +SDO_NODE_I.SET_NAME +SDO_NODE_I.SET_NAME_S +SDO_NODE_I.SET_PARENT_NODE +SDO_NODE_I.SET_PARENT_NODE_S +SDO_NODE_I.SET_STATE +SDO_NODE_I.SET_STATE_S +SDO_NODE_I.SET_TYPE +SDO_NODE_I.SET_TYPE_S +SDO_NODE_T.GET_ADJACENT_NODE_IDS +SDO_NODE_T.GET_CHILD_NODE_IDS +SDO_NODE_T.GET_COMPONENT_NO +SDO_NODE_T.GET_COST +SDO_NODE_T.GET_DEGREE +SDO_NODE_T.GET_GEOMETRY +SDO_NODE_T.GET_GEOM_ID +SDO_NODE_T.GET_HIERARCHY_LEVEL +SDO_NODE_T.GET_INCIDENT_LINK_IDS +SDO_NODE_T.GET_IN_DEGREE +SDO_NODE_T.GET_IN_LINK_IDS +SDO_NODE_T.GET_MEASURE +SDO_NODE_T.GET_NAME +SDO_NODE_T.GET_OUT_DEGREE +SDO_NODE_T.GET_OUT_LINK_IDS +SDO_NODE_T.GET_PARENT_NODE_ID +SDO_NODE_T.GET_PARTITION_ID +SDO_NODE_T.GET_SIBLING_NODE_IDS +SDO_NODE_T.GET_STATE +SDO_NODE_T.GET_TYPE +SDO_NODE_T.IS_ACTIVE +SDO_NODE_T.IS_LOGICAL +SDO_NODE_T.IS_TEMPORARY +SDO_NODE_T.LINK_EXISTS +SDO_NODE_T.MAKE_TEMPORARY +SDO_NODE_T.SET_COMPONENT_NO +SDO_NODE_T.SET_COST +SDO_NODE_T.SET_GEOMETRY +SDO_NODE_T.SET_GEOM_ID +SDO_NODE_T.SET_HIERARCHY_LEVEL +SDO_NODE_T.SET_MEASURE +SDO_NODE_T.SET_NAME +SDO_NODE_T.SET_PARENT_NODE +SDO_NODE_T.SET_STATE +SDO_NODE_T.SET_TYPE +SDO_OLS. +SDO_OLS.DETERMINE_CLASSIFICATION +SDO_OLS.EXTRACT +SDO_OLS.EXTRACTVALUE +SDO_OLS.GENERATE_ERROR +SDO_OLS.GETBASISXML +SDO_OLS.GETNS +SDO_OLS.HANDLE_OPENLS_ERROR +SDO_OLS.MAKEOPENLS10REQUEST +SDO_OLS.MAKEOPENLSCLOBREQUEST +SDO_OLS.MAKEOPENLSREQUEST +SDO_OLS.MAKEOPENLSSOAPREQUEST +SDO_OLS.PARSE_COORD_PAIR +SDO_OLS.POSTCLOB +SDO_OLS.POSTXML +SDO_OLS_DIRECTORY. +SDO_OLS_DIRECTORY.GETOPENLSFORBUSINESS +SDO_OLS_DIRECTORY.GETOPENLSFORCATEGORIES +SDO_OLS_DIRECTORY.GETOPENLSFORCATEGORY +SDO_OLS_DIRECTORY.ISBUSINESSOFCATEGORYID +SDO_OLS_DIRECTORY.ISBUSINESSOFCATEGORYNAME +SDO_OLS_DIRECTORY.MAKEOPENLS10REQUEST +SDO_OLS_LOCUTL. +SDO_OLS_LOCUTL.GEOCODESINGLEADR +SDO_OLS_LOCUTL.MAKEOPENLS10REQUEST +SDO_OLS_PRESENTATION. +SDO_OLS_PRESENTATION.MAKEOPENLS10REQUEST +SDO_OLS_PRESENTATION.SPECIFY_POI_FOR_MAPVIEWER +SDO_OLS_PRESENTATION.SPECIFY_THEME_FOR_MAPVIEWER +SDO_OLS_ROUTE. +SDO_OLS_ROUTE.MAKEOPENLS10REQUEST +SDO_OLS_ROUTE.MANEUVERORACLETOOPENLS +SDO_OWM_INSTALLED. +SDO_PATH_I.COMPUTE_GEOMETRY +SDO_PATH_I.COMPUTE_GEOMETRY_S +SDO_PATH_I.GET_COST +SDO_PATH_I.GET_COST_S +SDO_PATH_I.GET_END_NODE_ID +SDO_PATH_I.GET_END_NODE_ID_S +SDO_PATH_I.GET_GEOMETRY +SDO_PATH_I.GET_GEOMETRY_S +SDO_PATH_I.GET_LINK_IDS +SDO_PATH_I.GET_LINK_IDS_S +SDO_PATH_I.GET_NAME +SDO_PATH_I.GET_NAME_S +SDO_PATH_I.GET_NODE_IDS +SDO_PATH_I.GET_NODE_IDS_S +SDO_PATH_I.GET_NO_OF_LINKS +SDO_PATH_I.GET_NO_OF_LINKS_S +SDO_PATH_I.GET_START_NODE_ID +SDO_PATH_I.GET_START_NODE_ID_S +SDO_PATH_I.GET_TYPE +SDO_PATH_I.GET_TYPE_S +SDO_PATH_I.IS_ACTIVE +SDO_PATH_I.IS_ACTIVE_S +SDO_PATH_I.IS_CLOSED +SDO_PATH_I.IS_CLOSED_S +SDO_PATH_I.IS_CONNECTED +SDO_PATH_I.IS_CONNECTED_S +SDO_PATH_I.IS_LOGICAL +SDO_PATH_I.IS_LOGICAL_S +SDO_PATH_I.IS_SIMPLE +SDO_PATH_I.IS_SIMPLE_S +SDO_PATH_I.IS_TEMPORARY +SDO_PATH_I.IS_TEMPORARY_S +SDO_PATH_I.SET_GEOMETRY +SDO_PATH_I.SET_GEOMETRY_S +SDO_PATH_I.SET_NAME +SDO_PATH_I.SET_NAME_S +SDO_PATH_I.SET_PATH_ID +SDO_PATH_I.SET_PATH_ID_S +SDO_PATH_I.SET_TYPE +SDO_PATH_I.SET_TYPE_S +SDO_PATH_T.COMPUTE_GEOMETRY +SDO_PATH_T.GET_COST +SDO_PATH_T.GET_END_NODE_ID +SDO_PATH_T.GET_GEOMETRY +SDO_PATH_T.GET_LINK_IDS +SDO_PATH_T.GET_NAME +SDO_PATH_T.GET_NODE_IDS +SDO_PATH_T.GET_NO_OF_LINKS +SDO_PATH_T.GET_START_NODE_ID +SDO_PATH_T.GET_TYPE +SDO_PATH_T.IS_ACTIVE +SDO_PATH_T.IS_CLOSED +SDO_PATH_T.IS_CONNECTED +SDO_PATH_T.IS_LOGICAL +SDO_PATH_T.IS_SIMPLE +SDO_PATH_T.IS_TEMPORARY +SDO_PATH_T.SET_GEOMETRY +SDO_PATH_T.SET_NAME +SDO_PATH_T.SET_PATH_ID +SDO_PATH_T.SET_TYPE +SDO_PC_PKG. +SDO_PC_PKG.ADD_HILBERT_TO_FLAT_MODEL_PC +SDO_PC_PKG.ADD_TO_PC +SDO_PC_PKG.CLIP_PC +SDO_PC_PKG.CLIP_PC_FLAT +SDO_PC_PKG.CLIP_PC_FLAT_STRING +SDO_PC_PKG.CLIP_PC_GET_MIN_HEIGHT +SDO_PC_PKG.CLIP_PC_INTO_LAS +SDO_PC_PKG.CLIP_PC_INTO_TABLE +SDO_PC_PKG.CLIP_PC_INTO_TABLE_HYBRID +SDO_PC_PKG.CLIP_PC_INTO_TIN +SDO_PC_PKG.CLIP_PC_PARALLEL +SDO_PC_PKG.CREATE_CONTOUR_GEOMETRIES +SDO_PC_PKG.CREATE_LIBLAS_PYRAMID +SDO_PC_PKG.CREATE_PC +SDO_PC_PKG.CREATE_PC_HYBRID +SDO_PC_PKG.CREATE_PC_UNIFIED +SDO_PC_PKG.DROP_DEPENDENCIES +SDO_PC_PKG.DROP_PC_HYBRID +SDO_PC_PKG.GENERATE_HBP_VALS +SDO_PC_PKG.GENERATE_HILBERT_VALS +SDO_PC_PKG.GETNTHHILBERTVALUE +SDO_PC_PKG.GET_BLOCKING_METHOD +SDO_PC_PKG.GET_HILBERT +SDO_PC_PKG.GET_PC_MODEL +SDO_PC_PKG.GET_PT_IDS +SDO_PC_PKG.GET_TILE_SQL +SDO_PC_PKG.HAS_PYRAMID +SDO_PC_PKG.HILBERT_BLOCKING +SDO_PC_PKG.HILBERT_XY2D +SDO_PC_PKG.IMPORT_LAS +SDO_PC_PKG.INIT +SDO_PC_PKG.MERGE_CELLS +SDO_PC_PKG.PARSE_32BIT_INTS +SDO_PC_PKG.PARSE_64BIT_DOUBLES +SDO_PC_PKG.PC2DEM +SDO_PC_PKG.PRESERVES_LEVEL1 +SDO_PC_PKG.PROJECT_ORDS_ONTO_PC +SDO_PC_PKG.SDO_PC_NN +SDO_PC_PKG.SDO_PC_NN_FOR_EACH +SDO_PC_PKG.SORT_BLOCK_BY_DIST +SDO_PC_PKG.TIN_TO_PC +SDO_PC_PKG.TO_GEOMETRY +SDO_POINTINPOLYGON. +SDO_PQRY. +SDO_PREFERRED_OPS_SYSTEM_TRIG. +SDO_PREFERRED_OPS_SYS_TRIGGER. +SDO_PREFERRED_OPS_USER_TRIGGER. +SDO_PRIDX. +SDO_PRIDX.GEN_RID_RANGE +SDO_PRIDX.GEN_RID_RANGE_BY_AREA +SDO_PRIDX.INDEXLOAD +SDO_PRIDX.MDPRCLUSTER +SDO_PRIDX.MDPRTESSELLATE +SDO_PRIDX.MDPRTXFERGM +SDO_PRIDX.RTCLUSTER +SDO_PRIDX.TESSELLATE +SDO_RDF. +SDO_RDF.ADD_DATATYPE_INDEX +SDO_RDF.ADD_SEM_INDEX +SDO_RDF.ALTER_DATATYPE_INDEX +SDO_RDF.ALTER_INDEX_ON_SEM_GRAPH +SDO_RDF.ALTER_SEM_GRAPH +SDO_RDF.ALTER_SEM_INDEXES +SDO_RDF.ANALYZE_ENTAILMENT +SDO_RDF.ANALYZE_MODEL +SDO_RDF.ANALYZE_RULES_INDEX +SDO_RDF.APPEND_SEM_NETWORK_DATA +SDO_RDF.BDOUBLE2LEXDOUBLE +SDO_RDF.BFLOAT2LEXFLOAT +SDO_RDF.BUILD_PG_RDFVIEW_INDEXES +SDO_RDF.BULK_LOAD_FROM_STAGING_TABLE +SDO_RDF.CASTTOBOOLEAN +SDO_RDF.CASTTODATETIME +SDO_RDF.CASTTODECIMAL +SDO_RDF.CASTTODOUBLE +SDO_RDF.CASTTOFLOAT +SDO_RDF.CASTTOINTEGER +SDO_RDF.CASTTOSTRING +SDO_RDF.CBNOD +SDO_RDF.CHECKAPPTABPRIV +SDO_RDF.CLEANUP_BATCH_LOAD +SDO_RDF.CLEANUP_BNODES +SDO_RDF.CLOB2VC +SDO_RDF.CONVERT_TO_GML311_LITERAL +SDO_RDF.CONVERT_TO_WKT_LITERAL +SDO_RDF.CREATE_LOGICAL_NETWORK +SDO_RDF.CREATE_PG_RDFVIEW +SDO_RDF.CREATE_RDFVIEW_MODEL +SDO_RDF.CREATE_RDF_MODEL +SDO_RDF.CREATE_RDF_NETWORK +SDO_RDF.CREATE_SEM_MODEL +SDO_RDF.CREATE_SEM_NETWORK +SDO_RDF.CREATE_SOURCE_EXTERNAL_TABLE +SDO_RDF.CREATE_SPARQL_UPDATE_TABLES +SDO_RDF.CREATE_VIRTUAL_MODEL +SDO_RDF.CRIRI +SDO_RDF.DATETIMECOMP +SDO_RDF.DATETIMEEQUAL +SDO_RDF.DELETE_AS_INSERT +SDO_RDF.DELETE_ENTAILMENT_STATS +SDO_RDF.DELETE_MODEL_STATS +SDO_RDF.DISABLE_INMEMORY +SDO_RDF.DROP_DATATYPE_INDEX +SDO_RDF.DROP_LOGICAL_NETWORK +SDO_RDF.DROP_MODEL_STATS +SDO_RDF.DROP_PG_RDFVIEW +SDO_RDF.DROP_PG_RDFVIEW_INDEXES +SDO_RDF.DROP_RDFVIEW_MODEL +SDO_RDF.DROP_RDF_MODEL +SDO_RDF.DROP_RDF_NETWORK +SDO_RDF.DROP_SEM_INDEX +SDO_RDF.DROP_SEM_MODEL +SDO_RDF.DROP_SEM_NETWORK +SDO_RDF.DROP_SPARQL_UPDATE_TABLES +SDO_RDF.DROP_VIRTUAL_MODEL +SDO_RDF.ENABLE_INMEMORY +SDO_RDF.ESCAPE_CLOB_TERM +SDO_RDF.ESCAPE_CLOB_VALUE +SDO_RDF.ESCAPE_RDF_TERM +SDO_RDF.ESCAPE_RDF_VALUE +SDO_RDF.EXPAND_URI_W_BASE +SDO_RDF.EXPORT_ENTAILMENT_STATS +SDO_RDF.EXPORT_MODEL_STATS +SDO_RDF.EXPORT_RDFVIEW_MODEL +SDO_RDF.FORM_URL_DECODE +SDO_RDF.FORM_URL_ENCODE +SDO_RDF.GATHER_MODEL_STATS +SDO_RDF.GETLANGTYPE +SDO_RDF.GETLITTYPE +SDO_RDF.GETORDDATE +SDO_RDF.GETORDNUM +SDO_RDF.GETORDTYP +SDO_RDF.GETPREF +SDO_RDF.GETSUFF +SDO_RDF.GETV$BOOLEANVAL +SDO_RDF.GETV$CALENDARORDERVAL +SDO_RDF.GETV$DATATYPEVAL +SDO_RDF.GETV$DATETIMETZVAL +SDO_RDF.GETV$DATETZVAL +SDO_RDF.GETV$EBVVAL +SDO_RDF.GETV$GEOMETRYVAL +SDO_RDF.GETV$GEOSRID +SDO_RDF.GETV$GEOSRID_SDO +SDO_RDF.GETV$LANGVAL +SDO_RDF.GETV$LITTYPEFAM +SDO_RDF.GETV$NUMERICVAL +SDO_RDF.GETV$ORDERFAMILY +SDO_RDF.GETV$RDFTERMSTRING +SDO_RDF.GETV$STRINGANDLANGVAL +SDO_RDF.GETV$STRINGVAL +SDO_RDF.GETV$STRVAL +SDO_RDF.GETV$TIMETZVAL +SDO_RDF.GETV$TYPEFAM +SDO_RDF.GETVAL +SDO_RDF.GETVALTYP +SDO_RDF.GET_CANON_VAL +SDO_RDF.GET_CHANGE_TRACKING_INFO +SDO_RDF.GET_ESC_VAL +SDO_RDF.GET_INC_INF_INFO +SDO_RDF.GET_MODEL_ID +SDO_RDF.GET_MODEL_NAME +SDO_RDF.GET_MODEL_STATS +SDO_RDF.GET_REGULAREXPRESION_FOR +SDO_RDF.GET_RESOURCE_FROM_TEMPLATE +SDO_RDF.GET_ROLES_AND_PRIVS +SDO_RDF.GET_TRIPLE_ID +SDO_RDF.GET_USER_OR_DBA_SCHEMA +SDO_RDF.IMPORT_ENTAILMENT_STATS +SDO_RDF.IMPORT_MODEL_STATS +SDO_RDF.ISV$CLOB +SDO_RDF.IS_REIFIED_QUAD +SDO_RDF.IS_TRIPLE +SDO_RDF.LANGMATCHES +SDO_RDF.LATAG +SDO_RDF.LOAD_INTO_STAGING_TABLE +SDO_RDF.LTYPE +SDO_RDF.MATERIALIZE_ERROR_LAUNCH +SDO_RDF.MERGE_MODELS +SDO_RDF.MIGRATE_DATA_TO_CURRENT +SDO_RDF.MIN_FRAC_SEC +SDO_RDF.MOVE_SEM_NETWORK_DATA +SDO_RDF.PARSE_OBJECT_NODE +SDO_RDF.PARSE_PROPERTY_VALUE +SDO_RDF.PENCD +SDO_RDF.POV_TYPED_LITERAL +SDO_RDF.PRIVILEGE_ON_APP_TABLES +SDO_RDF.PROCESSGRAPHS +SDO_RDF.PURGE_UNUSED_VALUES +SDO_RDF.RAISE_PARSE_ERROR +SDO_RDF.RDFTERMCOMP +SDO_RDF.RDFTERMEQUAL +SDO_RDF.REFRESH_SEM_NETWORK_INDEX_INFO +SDO_RDF.REFRESH_SEM_TABLESPACE_NAMES +SDO_RDF.REMOVE_DUPLICATES +SDO_RDF.RENAME_ENTAILMENT +SDO_RDF.RENAME_MODEL +SDO_RDF.REPLACE_RDF_PREFIX +SDO_RDF.RESTORE_SEM_NETWORK_DATA +SDO_RDF.RESUME_LOAD_FROM_STAGING_TABLE +SDO_RDF.SET_ENTAILMENT_STATS +SDO_RDF.SET_MODEL_STATS +SDO_RDF.SPARQL_BNODE +SDO_RDF.SPARQL_COALESCE +SDO_RDF.SPARQL_CONCAT +SDO_RDF.SPARQL_CONTAINS +SDO_RDF.SPARQL_ENCODE_FOR_URI +SDO_RDF.SPARQL_IF +SDO_RDF.SPARQL_LCASE +SDO_RDF.SPARQL_REGEX +SDO_RDF.SPARQL_REPLACE +SDO_RDF.SPARQL_STRAFTER +SDO_RDF.SPARQL_STRBEFORE +SDO_RDF.SPARQL_STRDT +SDO_RDF.SPARQL_STRENDS +SDO_RDF.SPARQL_STRLANG +SDO_RDF.SPARQL_STRLEN +SDO_RDF.SPARQL_STRSTARTS +SDO_RDF.SPARQL_SUBSTR +SDO_RDF.SPARQL_TIMEZONE +SDO_RDF.SPARQL_TO_SQL +SDO_RDF.SPARQL_UCASE +SDO_RDF.SPARQL_URI +SDO_RDF.SQLTEMPL2SQLEXPR +SDO_RDF.SWAP_NAMES +SDO_RDF.TESCP +SDO_RDF.TUESC +SDO_RDF.UNESCAPE_CLOB_TERM +SDO_RDF.UNESCAPE_CLOB_VALUE +SDO_RDF.UNESCAPE_RDF_TERM +SDO_RDF.UNESCAPE_RDF_VALUE +SDO_RDF.UPDATE_MODEL +SDO_RDF.URL_ESCAPE +SDO_RDF.URL_UNESCAPE +SDO_RDF.VNAME +SDO_RDF.VNPFX +SDO_RDF.VNSFX +SDO_RDF.VTYPE +SDO_RDF_EXP_IMP. +SDO_RDF_EXP_IMP.INSTANCE_CALLOUT_IMP +SDO_RDF_EXP_IMP.INSTANCE_EXPORT_ACTION +SDO_RDF_EXP_IMP.SYSTEM_CALLOUT +SDO_RDF_EXP_IMP.SYSTEM_CALLOUT_IMP +SDO_RDF_INTERNAL. +SDO_RDF_INTERNAL.ADD_DATATYPE_INDEX +SDO_RDF_INTERNAL.ADD_DBCOLINFO_FOR_TMAP +SDO_RDF_INTERNAL.ADD_RDF_INDEX +SDO_RDF_INTERNAL.ADJUST_IMVC_PARTITION +SDO_RDF_INTERNAL.ADJ_SEQUENCE_CURRVAL +SDO_RDF_INTERNAL.ALTER_DATATYPE_INDEX +SDO_RDF_INTERNAL.ALTER_INDEX_ON_RDF_GRAPH +SDO_RDF_INTERNAL.ALTER_RDF_GRAPH +SDO_RDF_INTERNAL.ALTER_RDF_INDEXES +SDO_RDF_INTERNAL.ANALYZE_MODEL +SDO_RDF_INTERNAL.ANALYZE_RULES_INDEX +SDO_RDF_INTERNAL.BULK_LOAD_FROM_STAGING_TABLE +SDO_RDF_INTERNAL.CHECK_CLEAR_COLLISION_SUMMARY +SDO_RDF_INTERNAL.CHECK_LEXVAL_FOR_VALIDITY +SDO_RDF_INTERNAL.CHECK_USER_OPTION +SDO_RDF_INTERNAL.CHKLEX +SDO_RDF_INTERNAL.CHK_NUMERIC +SDO_RDF_INTERNAL.CLEAR_NETWORK_COMPRESSION +SDO_RDF_INTERNAL.CLEAR_NETWORK_STATUS +SDO_RDF_INTERNAL.CLEAR_NET_DATA +SDO_RDF_INTERNAL.CONVERT_OLD_RDF_DATA +SDO_RDF_INTERNAL.CREATE_PARALLEL_HINTS +SDO_RDF_INTERNAL.CREATE_RDFVIEW_MODEL +SDO_RDF_INTERNAL.CREATE_RDF_DDL_TRIGGER +SDO_RDF_INTERNAL.CREATE_RDF_MODEL +SDO_RDF_INTERNAL.CREATE_RDF_MODEL_VIEWS +SDO_RDF_INTERNAL.CREATE_RDF_NETWORK +SDO_RDF_INTERNAL.CREATE_RDF_TRIGGERS +SDO_RDF_INTERNAL.CREATE_VIRTUAL_MODEL +SDO_RDF_INTERNAL.CREATE_VIRTUAL_MODEL_U_VIEW +SDO_RDF_INTERNAL.CREATE_VIRTUAL_MODEL_V_VIEW +SDO_RDF_INTERNAL.DDL_SAME_RDF_INDEXES +SDO_RDF_INTERNAL.DECODE_INDEX_CODE +SDO_RDF_INTERNAL.DECODE_MODEL_NAME +SDO_RDF_INTERNAL.DECR_LINK_COST_DEL_IF_ZEROED +SDO_RDF_INTERNAL.DELETE_LINK$_ID +SDO_RDF_INTERNAL.DELETE_MODEL_STATS +SDO_RDF_INTERNAL.DELETE_RULES_INDEX_STATS +SDO_RDF_INTERNAL.DISABLE_INMEMORY +SDO_RDF_INTERNAL.DROP_DATATYPE_INDEX +SDO_RDF_INTERNAL.DROP_EXTENDED_STATS +SDO_RDF_INTERNAL.DROP_MODEL_STATS +SDO_RDF_INTERNAL.DROP_RDFVIEW_MODEL +SDO_RDF_INTERNAL.DROP_RDF_INDEX +SDO_RDF_INTERNAL.DROP_RDF_MODEL +SDO_RDF_INTERNAL.DROP_RDF_NETWORK +SDO_RDF_INTERNAL.DROP_VIRTUAL_MODEL +SDO_RDF_INTERNAL.ENABLE_INMEMORY +SDO_RDF_INTERNAL.ENCODE_INTO_INDEX_CODE +SDO_RDF_INTERNAL.ESCLEX +SDO_RDF_INTERNAL.EXCHANGE_MODEL_PART$ +SDO_RDF_INTERNAL.EXTRACT_COMPRESS_OPTION +SDO_RDF_INTERNAL.FIND_VALUES_TO_REPLACE +SDO_RDF_INTERNAL.GATHER_MODEL_STATS +SDO_RDF_INTERNAL.GATHER_RDF_STATS +SDO_RDF_INTERNAL.GATHER_STATS +SDO_RDF_INTERNAL.GETLANGTYPE +SDO_RDF_INTERNAL.GETLITTYPE +SDO_RDF_INTERNAL.GETORDDATE +SDO_RDF_INTERNAL.GETORDNUM +SDO_RDF_INTERNAL.GETORDTYP +SDO_RDF_INTERNAL.GETPREF +SDO_RDF_INTERNAL.GETSUFF +SDO_RDF_INTERNAL.GETVAL +SDO_RDF_INTERNAL.GETVALTYP +SDO_RDF_INTERNAL.GET_BASE_PREFIX_FROM_RR_TABLE +SDO_RDF_INTERNAL.GET_CANON_ID +SDO_RDF_INTERNAL.GET_CANON_TERM +SDO_RDF_INTERNAL.GET_CANON_VAL_NULL +SDO_RDF_INTERNAL.GET_COL_NAME_FROM_RR_TABLE +SDO_RDF_INTERNAL.GET_GEO_MINDEX_INFO +SDO_RDF_INTERNAL.GET_LINK_COMPRESS_CMD +SDO_RDF_INTERNAL.GET_LITERAL +SDO_RDF_INTERNAL.GET_LITERALTYPE +SDO_RDF_INTERNAL.GET_MODEL_ID +SDO_RDF_INTERNAL.GET_MODEL_IDX_CLAUSE +SDO_RDF_INTERNAL.GET_MODEL_INFO +SDO_RDF_INTERNAL.GET_MODEL_NAME +SDO_RDF_INTERNAL.GET_MODEL_PNAME +SDO_RDF_INTERNAL.GET_MODEL_PXN_CLAUSE +SDO_RDF_INTERNAL.GET_NETWORK_COMPRESSION +SDO_RDF_INTERNAL.GET_OBJECT_NODE_TYPE +SDO_RDF_INTERNAL.GET_POS_LIST_FROM_CODE +SDO_RDF_INTERNAL.GET_RDF_INDEX_INFO +SDO_RDF_INTERNAL.GET_RULES_INDEX_PNAME +SDO_RDF_INTERNAL.GET_TABLESPACE_NAME +SDO_RDF_INTERNAL.GET_TRIPLE_COST +SDO_RDF_INTERNAL.GET_USER_OPTION_CHOICE +SDO_RDF_INTERNAL.GET_USER_SPEC_BATCH_VALUES_TAB +SDO_RDF_INTERNAL.GET_VALUE$_TYPE$ +SDO_RDF_INTERNAL.GET_VALUE$_TYPE$_FUNC +SDO_RDF_INTERNAL.GET_VALUE_COMPRESS_CMD +SDO_RDF_INTERNAL.GRANT_PDB_DBA_PRIVS +SDO_RDF_INTERNAL.INSERT_TRIPLE +SDO_RDF_INTERNAL.INSTANCE_CALLOUT_IMP +SDO_RDF_INTERNAL.INSTANCE_EXPORT_ACTION +SDO_RDF_INTERNAL.IS_REIFIED +SDO_RDF_INTERNAL.IS_TRIPLE +SDO_RDF_INTERNAL.LOAD_BATCH_VALUES_TABLE +SDO_RDF_INTERNAL.LOAD_RDFVIEW_SCHEMA +SDO_RDF_INTERNAL.MERGE_BATCH_VALUES +SDO_RDF_INTERNAL.MIGRATE_DATA_TO_CURRENT +SDO_RDF_INTERNAL.PARSE_OBJECT_NODE +SDO_RDF_INTERNAL.PARSE_PROPERTY_VALUE +SDO_RDF_INTERNAL.PARSE_SUBJECT_NODE +SDO_RDF_INTERNAL.PARSE_TRIPLE +SDO_RDF_INTERNAL.PARSE_TRIPLE_BATCH_MODE +SDO_RDF_INTERNAL.POPULATE_CRS_TABLE +SDO_RDF_INTERNAL.POV_LANGUAGE_TYPE +SDO_RDF_INTERNAL.POV_LITERAL_TYPE +SDO_RDF_INTERNAL.POV_VALUE_NAME +SDO_RDF_INTERNAL.POV_VALUE_TYPE +SDO_RDF_INTERNAL.RECREATE_APP_TRIGGERS +SDO_RDF_INTERNAL.RECREATE_LINK_VIEWS +SDO_RDF_INTERNAL.RECREATE_META_VIEWS +SDO_RDF_INTERNAL.RECREATE_RULEBASE_VIEWS +SDO_RDF_INTERNAL.RECREATE_STATS_PARTITIONS +SDO_RDF_INTERNAL.REFRESH_QUERY_STATE +SDO_RDF_INTERNAL.REFRESH_SEM_NETWORK_INDEX_INFO +SDO_RDF_INTERNAL.REFRESH_SEM_TABLESPACE_NAMES +SDO_RDF_INTERNAL.REMOVE_IM_VIRTUAL_COLUMNS +SDO_RDF_INTERNAL.RENAME_ENTAILMENT +SDO_RDF_INTERNAL.RENAME_MODEL +SDO_RDF_INTERNAL.REPLACE_RDF_PREFIX +SDO_RDF_INTERNAL.REPLACE_REF_PROP_ROWS_WITH_AGG +SDO_RDF_INTERNAL.REPLACE_VALUES +SDO_RDF_INTERNAL.RESUME_LOAD_FROM_STAGING_TABLE +SDO_RDF_INTERNAL.SET_MODEL_PARTITION_INFO +SDO_RDF_INTERNAL.SET_NETWORK_COMPRESSION +SDO_RDF_INTERNAL.SET_NETWORK_PARTITION_INFO +SDO_RDF_INTERNAL.SET_TRIPLE_COST +SDO_RDF_INTERNAL.START_BATCH$ +SDO_RDF_INTERNAL.SWAP_MODEL_NAMES +SDO_RDF_INTERNAL.SYSTEM_CALLOUT +SDO_RDF_INTERNAL.SYSTEM_CALLOUT_IMP +SDO_RDF_INTERNAL.TGT_RDF_HIST_ID_SQ_NEXTVAL +SDO_RDF_INTERNAL.TGT_RDF_LONG_LIT_ID_SQ_NEXTVAL +SDO_RDF_INTERNAL.TGT_RDF_MODEL_ID_SQ_NEXTVAL +SDO_RDF_INTERNAL.TGT_RDF_RULEBASE_ID_SQ_NEXTVAL +SDO_RDF_INTERNAL.TRUNCATE_RDFVIEW_MODEL +SDO_RDF_INTERNAL.TYPE_FAMILY +SDO_RDF_INTERNAL.UER2R +SDO_RDF_INTERNAL.UPDATE_COLLISION_SUMMARY +SDO_RDF_INTERNAL.VALIDATE_AND_CONVERT_NAME +SDO_RDF_INTERNAL.VALIDATE_USER_OPTIONS +SDO_RDF_INTERNAL.VAL_CVT_RDF_NAME +SDO_RDF_MIG. +SDO_RDF_MIG.CREATE_RDF_MODEL +SDO_RDF_MIG.DROP_RDF_MODEL +SDO_RDF_REL2RDF_INTERNAL. +SDO_RDF_REL2RDF_INTERNAL.GEN_URIPREFIX +SDO_RDF_REL2RDF_INTERNAL.R2RML2SCHEMA_FROMRRTABLE +SDO_RDF_REL2RDF_INTERNAL.REL2RDF +SDO_RDF_REL2RDF_INTERNAL.REPLACE_RDF_PREFIX +SDO_RDF_REL2RDF_INTERNAL.URL_ESCAPE +SDO_RDF_TERM.CANONTERMSTR +SDO_RDF_TERM.COMPARE +SDO_RDF_TERM.NONCANONTERMSTR +SDO_RDF_TERM.SDO_RDF_TERM +SDO_RDF_TERM.SETVALUENAME +SDO_RDF_TERM.TOCANONTERM +SDO_RDF_TRIPLE_S.GET_MODEL +SDO_RDF_TRIPLE_S.GET_OBJECT +SDO_RDF_TRIPLE_S.GET_OBJ_VALUE +SDO_RDF_TRIPLE_S.GET_PROPERTY +SDO_RDF_TRIPLE_S.GET_SUBJECT +SDO_RDF_TRIPLE_S.GET_TRIPLE +SDO_RDF_TRIPLE_S.IS_OBJECT_CLOB +SDO_RDF_TRIPLE_S.SDO_RDF_TRIPLE_S +SDO_ROUTER_PARTITION. +SDO_ROUTER_PARTITION.ADJUST_M +SDO_ROUTER_PARTITION.BUILD_TURN_RESTRICTIONS +SDO_ROUTER_PARTITION.CLEANUP_ROUTER +SDO_ROUTER_PARTITION.CREATE_BORDER_DATA +SDO_ROUTER_PARTITION.CREATE_ROUTER_NETWORK +SDO_ROUTER_PARTITION.CREATE_SDO_ROUTER_LOG_DIR +SDO_ROUTER_PARTITION.CREATE_TIMEZONE_DATA +SDO_ROUTER_PARTITION.CREATE_TRUCKING_DATA +SDO_ROUTER_PARTITION.CREATE_TURN_RESTRICTION_DATA +SDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORK +SDO_ROUTER_PARTITION.DUMP_BORDER_DATA +SDO_ROUTER_PARTITION.DUMP_PARTITIONS +SDO_ROUTER_PARTITION.DUMP_TIMEZONE_DATA +SDO_ROUTER_PARTITION.DUMP_TRUCKING_DATA +SDO_ROUTER_PARTITION.DUMP_TURN_RESTRICTION_DATA +SDO_ROUTER_PARTITION.ELOCATION_BORDER_DATA +SDO_ROUTER_PARTITION.ELOCATION_DUMP_BORDER_DATA +SDO_ROUTER_PARTITION.ELOCATION_DUMP_PARTITION +SDO_ROUTER_PARTITION.ELOCATION_DUMP_TIMEZONE_DATA +SDO_ROUTER_PARTITION.ELOCATION_DUMP_TRUCKING_DATA +SDO_ROUTER_PARTITION.ELOCATION_DUMP_TURN_RESTRICT +SDO_ROUTER_PARTITION.ELOCATION_PARTITION_ROUTER +SDO_ROUTER_PARTITION.ELOCATION_TIMEZONE_DATA +SDO_ROUTER_PARTITION.ELOCATION_TRUCKING_DATA +SDO_ROUTER_PARTITION.ELOCATION_TURN_RESTRICT_DATA +SDO_ROUTER_PARTITION.ELOCATION_VALIDATE_LOGFILE +SDO_ROUTER_PARTITION.ELOCATION_VALIDATE_PARTITION +SDO_ROUTER_PARTITION.GATHER_TABLE_STATS +SDO_ROUTER_PARTITION.GET_EDGE_INFO +SDO_ROUTER_PARTITION.GET_GEOMETRY_INFO +SDO_ROUTER_PARTITION.GET_GEOMETRY_INFO_LINK_LVL +SDO_ROUTER_PARTITION.GET_PID +SDO_ROUTER_PARTITION.GET_VERSION +SDO_ROUTER_PARTITION.MIN_EIGENVECTOR +SDO_ROUTER_PARTITION.PARTITION_ROUTER +SDO_ROUTER_PARTITION.VALIDATE_PARTITIONS +SDO_ROUTER_PARTITION.VALIDATE_SDO_ROUTER_LOG_DIR +SDO_ROUTER_TIMEZONE. +SDO_ROUTER_TIMEZONE.CLEANUP_TIMEZONES +SDO_ROUTER_TIMEZONE.CREATE_ROUTER_TIMEZONES_EDGES +SDO_ROUTER_TIMEZONE.CREATE_SDO_TIMEZONES_INDEX +SDO_RTREE_ADMIN. +SDO_RTREE_ADMIN.DATA_COUNT +SDO_RTREE_ADMIN.FILTER +SDO_RTREE_ADMIN.NN +SDO_RTREE_ADMIN.POPULATE_ROOT_MBRS +SDO_RTREE_ADMIN.RTREE_ANALYZE +SDO_RTREE_ADMIN.SDO_RTREE_CHILDMBRS +SDO_RTREE_ADMIN.SDO_RTREE_CHILDRIDS +SDO_RTREE_ADMIN.SDO_RTREE_DESCRIDS +SDO_RTREE_ADMIN.SDO_RTREE_NDEXTENT +SDO_SAM. +SDO_SAM.AGGREGATES_FOR_GEOMETRY +SDO_SAM.AGGREGATES_FOR_LAYER +SDO_SAM.BIN_GEOMETRY +SDO_SAM.BIN_LAYER +SDO_SAM.COLOCATED_REFERENCE_FEATURES +SDO_SAM.INTERSECTION_RATIO +SDO_SAM.PREDICATED_JOIN +SDO_SAM.SIMPLIFY_GEOMETRY +SDO_SAM.SIMPLIFY_LAYER +SDO_SAM.SPATIAL_CLUSTERS +SDO_SAM.TILED_AGGREGATES +SDO_SAM.TILED_BINS +SDO_SEM_CLI. +SDO_SEM_CLI.BUILD_CLIQUE +SDO_SEM_CONST. +SDO_SEM_CTX. +SDO_SEM_CTX.GET_LOG_LEVEL +SDO_SEM_CTX.GET_PARAM +SDO_SEM_CTX.SET_LOG_LEVEL +SDO_SEM_CTX.SET_PARAM +SDO_SEM_CTX_SESSION. +SDO_SEM_CTX_SESSION.GET_LOG_LEVEL +SDO_SEM_CTX_SESSION.GET_PARAM +SDO_SEM_CTX_SESSION.SET_LOG_LEVEL +SDO_SEM_CTX_SESSION.SET_PARAM +SDO_SEM_DOWNGRADE. +SDO_SEM_DOWNGRADE.PREPARE_DOWNGRADE_FROM_11 +SDO_SEM_DOWNGRADE_UTL. +SDO_SEM_DOWNGRADE_UTL.CHECK_111_COMPATIBLE +SDO_SEM_DOWNGRADE_UTL.CHECK_112_COMPATIBLE +SDO_SEM_DOWNGRADE_UTL.CHECK_121_COMPATIBLE +SDO_SEM_DOWNGRADE_UTL.CHECK_122_COMPATIBLE +SDO_SEM_DOWNGRADE_UTL.DATA_112NG_EXISTS +SDO_SEM_DOWNGRADE_UTL.DATA_112_EXISTS +SDO_SEM_DOWNGRADE_UTL.DATA_122PLUS_EXISTS +SDO_SEM_DOWNGRADE_UTL.DATA_122_EXISTS +SDO_SEM_DOWNGRADE_UTL.DOWNGRADE_TO_102 +SDO_SEM_DOWNGRADE_UTL.RESTORE_RULEBASES +SDO_SEM_DOWNGRADE_UTL.RESTORE_RULEINDICES +SDO_SEM_HTTP_CTX. +SDO_SEM_HTTP_CTX.GET_HASH +SDO_SEM_HTTP_CTX.GET_PWD +SDO_SEM_HTTP_CTX.GET_USR +SDO_SEM_HTTP_CTX.SET_PWD +SDO_SEM_HTTP_CTX.SET_USR +SDO_SEM_INFERENCE. +SDO_SEM_INFERENCE.CREATE_RULES_INDEX +SDO_SEM_INFERENCE.ENFORCE_DEFINER +SDO_SEM_INFERENCE.EXTRACT_CALLOUT_FUNC_NAMES +SDO_SEM_INFERENCE.EXTRACT_DELTA_VIEW_NAME +SDO_SEM_INFERENCE.EXTRACT_ENTAILMENT_ID +SDO_SEM_INFERENCE.EXTRACT_ENTAILMENT_SIG +SDO_SEM_INFERENCE.EXTRACT_FNAME +SDO_SEM_INFERENCE.EXTRACT_LABELS +SDO_SEM_INFERENCE.EXTRACT_UNAME +SDO_SEM_INFERENCE.IS_USER_LABEL +SDO_SEM_INFERENCE.NUMERIC_LABEL_WRAPPER +SDO_SEM_INFERENCE.NUMERIC_ROW_LABEL_WRAPPER +SDO_SEM_INFERENCE.ORACLE_ORARDF_ADD_RES +SDO_SEM_INFERENCE.ORACLE_ORARDF_RES2VID +SDO_SEM_INFERENCE.ORACLE_ORARDF_VID2BNODE +SDO_SEM_INFERENCE.ORACLE_ORARDF_VID2LEX +SDO_SEM_INFERENCE.ORACLE_ORARDF_VID2LIT +SDO_SEM_INFERENCE.ORACLE_ORARDF_VID2URI +SDO_SEM_INFERENCE.PRINT_PLAN +SDO_SEM_INFERENCE.SET_LABEL +SDO_SEM_INFERENCE.SET_LABEL_WRAPPER +SDO_SEM_INFERENCE.SET_ROW_LABEL_WRAPPER +SDO_SEM_INFH. +SDO_SEM_INFH.BUILD_EQ_TO_SUB_STMT +SDO_SEM_INFH.BUILD_PROPAGATE +SDO_SEM_INFH.BUILD_STMT_ADD_AXIOMS +SDO_SEM_INFH.BUILD_STMT_ADD_SKOS_AXIOMS +SDO_SEM_INFH.BUILD_STMT_COMP2UNIVERSE +SDO_SEM_INFH.BUILD_STMT_COMP_DISJ_TO_SCO +SDO_SEM_INFH.BUILD_STMT_COMP_TO_EQ +SDO_SEM_INFH.BUILD_STMT_DISJ_UNSAT +SDO_SEM_INFH.BUILD_STMT_DOM_RANGE_H +SDO_SEM_INFH.BUILD_STMT_INV2SP +SDO_SEM_INFH.BUILD_STMT_INV_DOM_RAN_H +SDO_SEM_INFH.BUILD_STMT_INV_EQ +SDO_SEM_INFH.BUILD_STMT_INV_FP_IFP_H +SDO_SEM_INFH.BUILD_STMT_INV_TP_SP +SDO_SEM_INFH.BUILD_STMT_MBRH +SDO_SEM_INFH.BUILD_STMT_PROPDISJH +SDO_SEM_INFH.BUILD_STMT_PROP_CHANGE +SDO_SEM_INFH.BUILD_STMT_RDFP10 +SDO_SEM_INFH.BUILD_STMT_RDFP9 +SDO_SEM_INFH.BUILD_STMT_SCM_CLS +SDO_SEM_INFH.BUILD_STMT_SCM_HV_NON_PLSQL +SDO_SEM_INFH.BUILD_STMT_SCM_HV_PLSQL +SDO_SEM_INFH.BUILD_STMT_SCM_HV_QUERY +SDO_SEM_INFH.BUILD_STMT_SCM_OP_DP +SDO_SEM_INFH.BUILD_STMT_SCOH +SDO_SEM_INFH.BUILD_STMT_SPOH +SDO_SEM_INFH.BUILD_STMT_SPO_DOM_RANGE_H +SDO_SEM_INFH.BUILD_STMT_STEPH +SDO_SEM_INFH.BUILD_STMT_SYMMH +SDO_SEM_INFH.BUILD_STMT_TYPE_PROPAGATE +SDO_SEM_INFH.BUILD_SUB_TO_EQ_STMT +SDO_SEM_INFH.BUILD_TRANS_STMT +SDO_SEM_INFI. +SDO_SEM_INFI.BUILD_OWLTHING_SAMEAS_STMT +SDO_SEM_INFI.BUILD_OWLTHING_STMT +SDO_SEM_INFI.BUILD_STMT_ALLSYMM +SDO_SEM_INFI.BUILD_STMT_ALLTRANS +SDO_SEM_INFI.BUILD_STMT_AVF +SDO_SEM_INFI.BUILD_STMT_AVF_PLSQL +SDO_SEM_INFI.BUILD_STMT_AVF_PLSQL_PO +SDO_SEM_INFI.BUILD_STMT_AVF_QUERY +SDO_SEM_INFI.BUILD_STMT_AVF_QUERY_PO +SDO_SEM_INFI.BUILD_STMT_CHAIN +SDO_SEM_INFI.BUILD_STMT_CLS_MAXC2_PLSQL +SDO_SEM_INFI.BUILD_STMT_CLS_MAXC2_PLSQL_PO +SDO_SEM_INFI.BUILD_STMT_CLS_MAXC2_QUERY +SDO_SEM_INFI.BUILD_STMT_CLS_MAXC2_QUERY_PO +SDO_SEM_INFI.BUILD_STMT_CLS_MAXQC3_PLSQL +SDO_SEM_INFI.BUILD_STMT_CLS_MAXQC3_PLSQL_PO +SDO_SEM_INFI.BUILD_STMT_CLS_MAXQC3_QUERY +SDO_SEM_INFI.BUILD_STMT_CLS_MAXQC3_QUERY_PO +SDO_SEM_INFI.BUILD_STMT_CLS_MAXQC4_QUERY +SDO_SEM_INFI.BUILD_STMT_CLS_SVF2_DOM +SDO_SEM_INFI.BUILD_STMT_CLS_SVF2_PLSQL +SDO_SEM_INFI.BUILD_STMT_CLS_SVF2_QUERY +SDO_SEM_INFI.BUILD_STMT_DISJ +SDO_SEM_INFI.BUILD_STMT_DOM +SDO_SEM_INFI.BUILD_STMT_DOM_PLSQL +SDO_SEM_INFI.BUILD_STMT_DT_RESTRICTIONS +SDO_SEM_INFI.BUILD_STMT_EL_INIT_R +SDO_SEM_INFI.BUILD_STMT_EL_R2 +SDO_SEM_INFI.BUILD_STMT_EL_R3 +SDO_SEM_INFI.BUILD_STMT_EL_R3_ALT +SDO_SEM_INFI.BUILD_STMT_EL_R4 +SDO_SEM_INFI.BUILD_STMT_EL_R5 +SDO_SEM_INFI.BUILD_STMT_FIND_MATCHING_SUB +SDO_SEM_INFI.BUILD_STMT_FP +SDO_SEM_INFI.BUILD_STMT_FP_CIRCLE_DIF +SDO_SEM_INFI.BUILD_STMT_FP_CIRCLE_DIF_ORG +SDO_SEM_INFI.BUILD_STMT_FP_DIF +SDO_SEM_INFI.BUILD_STMT_HASKEY +SDO_SEM_INFI.BUILD_STMT_HASSELFI +SDO_SEM_INFI.BUILD_STMT_HASSELFT +SDO_SEM_INFI.BUILD_STMT_HVA +SDO_SEM_INFI.BUILD_STMT_HVB +SDO_SEM_INFI.BUILD_STMT_IFP +SDO_SEM_INFI.BUILD_STMT_IFP_CIRCLE_DIF +SDO_SEM_INFI.BUILD_STMT_IFP_CIRCLE_DIF_ORG +SDO_SEM_INFI.BUILD_STMT_IFP_DIF +SDO_SEM_INFI.BUILD_STMT_INTERSECTH +SDO_SEM_INFI.BUILD_STMT_INTERSECTI +SDO_SEM_INFI.BUILD_STMT_INV +SDO_SEM_INFI.BUILD_STMT_INV_REVERSE +SDO_SEM_INFI.BUILD_STMT_MATCH_INTERSECTSCOH +SDO_SEM_INFI.BUILD_STMT_PROC_SVF_OUTER +SDO_SEM_INFI.BUILD_STMT_RAN +SDO_SEM_INFI.BUILD_STMT_RAN_DOM_QUERY +SDO_SEM_INFI.BUILD_STMT_RAN_PLSQL +SDO_SEM_INFI.BUILD_STMT_RDF1 +SDO_SEM_INFI.BUILD_STMT_RDFS4A +SDO_SEM_INFI.BUILD_STMT_RDFS4B +SDO_SEM_INFI.BUILD_STMT_RDFS_REFLEX +SDO_SEM_INFI.BUILD_STMT_RDFS_SCO +SDO_SEM_INFI.BUILD_STMT_SAM +SDO_SEM_INFI.BUILD_STMT_SAM_PROP +SDO_SEM_INFI.BUILD_STMT_SCOI +SDO_SEM_INFI.BUILD_STMT_SCOTHINGI +SDO_SEM_INFI.BUILD_STMT_SINGLE_FP_DIF +SDO_SEM_INFI.BUILD_STMT_SINGLE_IFP_DIF +SDO_SEM_INFI.BUILD_STMT_SPOI +SDO_SEM_INFI.BUILD_STMT_SVF +SDO_SEM_INFI.BUILD_STMT_SVFH_AVFH_NONPROC +SDO_SEM_INFI.BUILD_STMT_SVFH_AVFH_PLSQL_P1 +SDO_SEM_INFI.BUILD_STMT_SVFH_AVFH_PLSQL_P2 +SDO_SEM_INFI.BUILD_STMT_SVFH_AVFH_QUERY +SDO_SEM_INFI.BUILD_STMT_SVFH_EL +SDO_SEM_INFI.BUILD_STMT_SVF_PLSQL +SDO_SEM_INFI.BUILD_STMT_SVF_QUERY +SDO_SEM_INFI.BUILD_STMT_SYMM +SDO_SEM_INFI.BUILD_STMT_TRANS_QUERY +SDO_SEM_INFI.SET_PERF_TUNE_MODE +SDO_SEM_INF_INTERNAL. +SDO_SEM_INF_INTERNAL.BUILD_MODELS_UNION_CLAUSE +SDO_SEM_INF_INTERNAL.CREATE_CLIQUE_VIEWS +SDO_SEM_INF_INTERNAL.CREATE_ENT_VIEWS +SDO_SEM_INF_INTERNAL.CREATE_RULES_INDEX +SDO_SEM_INF_INTERNAL.GET_UID +SDO_SEM_INF_INTERNAL.M +SDO_SEM_INF_INTERNAL.SATISFY_RESTRICTION_DATATYPE +SDO_SEM_LOG. +SDO_SEM_LOG.ASSERT +SDO_SEM_LOG.DEBUG +SDO_SEM_LOG.DEBUG_NH +SDO_SEM_LOG.ERROR +SDO_SEM_LOG.FATAL +SDO_SEM_LOG.GET_CALLER_INFO +SDO_SEM_LOG.GET_LOG_LEVEL +SDO_SEM_LOG.INFO +SDO_SEM_LOG.IS_ASSERTION_ENABLED +SDO_SEM_LOG.IS_DEBUG_ENABLED +SDO_SEM_LOG.IS_ERROR_ENABLED +SDO_SEM_LOG.IS_FATAL_ENABLED +SDO_SEM_LOG.IS_INFO_ENABLED +SDO_SEM_LOG.IS_WARNING_ENABLED +SDO_SEM_LOG.SET_LOG_LEVEL +SDO_SEM_LOG.SET_LOG_OUTPUT +SDO_SEM_LOG.TEST +SDO_SEM_LOG.WARNING +SDO_SEM_OPERATOR. +SDO_SEM_OPERATOR.SEM_DISTANCE_FUNC +SDO_SEM_OPERATOR.SEM_PATH_FUNC +SDO_SEM_OPERATOR.SEM_RELATED_FUNC +SDO_SEM_PERF. +SDO_SEM_PERF.DELETE_NETWORK_STATS +SDO_SEM_PERF.DROP_EXTENDED_STATS +SDO_SEM_PERF.EXPORT_NETWORK_STATS +SDO_SEM_PERF.GATHER_STATS +SDO_SEM_PERF.GET_INF_EXT_MAX_NEW_TRIPLES +SDO_SEM_PERF.GET_INF_EXT_MAX_VALUES +SDO_SEM_PERF.IMPORT_NETWORK_STATS +SDO_SEM_PERF.SET_INF_EXT_MAX_NEW_TRIPLES +SDO_SEM_PERF.SET_INF_EXT_MAX_VALUES +SDO_SEM_STATS.ODCIGETINTERFACES +SDO_SEM_STATS.ODCISTATSCOLLECT +SDO_SEM_STATS.ODCISTATSDELETE +SDO_SEM_UPDATE_CTX. +SDO_SEM_UPDATE_CTX.GET_PARAM +SDO_SEM_UPDATE_CTX.SET_PARAM +SDO_SEM_UTL. +SDO_SEM_UTL.ADJTSFORPREFIX +SDO_SEM_UTL.ADJTSTZFORPREFIX +SDO_SEM_UTL.BOOL_TO_STR +SDO_SEM_UTL.CHECKUSERRULES +SDO_SEM_UTL.CHECK_PARTITION_EXISTS +SDO_SEM_UTL.CHECK_TABLE_EXISTS +SDO_SEM_UTL.COLLECT_STATS +SDO_SEM_UTL.COMPUTENONVNLEN +SDO_SEM_UTL.COMPUTETERMLEN +SDO_SEM_UTL.CONVERT_MAPPED2RAW +SDO_SEM_UTL.DELETE_NETWORK_STATS +SDO_SEM_UTL.DISABLE_ALL_TRIGGERS +SDO_SEM_UTL.ENABLE_ALL_TRIGGERS +SDO_SEM_UTL.EXE_PLAN_DUMP +SDO_SEM_UTL.EXE_PLAN_PREPARE +SDO_SEM_UTL.EXPANDGRAPHNAMES +SDO_SEM_UTL.EXPORT_ENTAILMENT_STATS +SDO_SEM_UTL.EXPORT_MODEL_STATS +SDO_SEM_UTL.EXPORT_NETWORK_STATS +SDO_SEM_UTL.EXTRACT_MARKER +SDO_SEM_UTL.GETCOLLECTIONELEMENTTYPE +SDO_SEM_UTL.GETID0INT +SDO_SEM_UTL.GETIDASSPRO +SDO_SEM_UTL.GETIDASYMMETRICPROPERTY +SDO_SEM_UTL.GETIDCMP +SDO_SEM_UTL.GETIDCOMP +SDO_SEM_UTL.GETIDDIF +SDO_SEM_UTL.GETIDDISJ +SDO_SEM_UTL.GETIDDOM +SDO_SEM_UTL.GETIDEQUC +SDO_SEM_UTL.GETIDEQUP +SDO_SEM_UTL.GETIDFP +SDO_SEM_UTL.GETIDIFP +SDO_SEM_UTL.GETIDIO +SDO_SEM_UTL.GETIDIRREFLEXIVEPROPERTY +SDO_SEM_UTL.GETIDMAXCARD +SDO_SEM_UTL.GETIDMAXQCARD +SDO_SEM_UTL.GETIDMBR +SDO_SEM_UTL.GETIDNOTHING +SDO_SEM_UTL.GETIDNPA +SDO_SEM_UTL.GETIDOC +SDO_SEM_UTL.GETIDOP +SDO_SEM_UTL.GETIDPROPDISJ +SDO_SEM_UTL.GETIDRAN +SDO_SEM_UTL.GETIDSAM +SDO_SEM_UTL.GETIDSCO +SDO_SEM_UTL.GETIDSKOSXLLABEL +SDO_SEM_UTL.GETIDSKOSXLLITERALFORM +SDO_SEM_UTL.GETIDSPO +SDO_SEM_UTL.GETIDSRCIND +SDO_SEM_UTL.GETIDSYMP +SDO_SEM_UTL.GETIDTGTIND +SDO_SEM_UTL.GETIDTGTVAL +SDO_SEM_UTL.GETIDTHING +SDO_SEM_UTL.GETIDTP +SDO_SEM_UTL.GETIDTYPE +SDO_SEM_UTL.GET_ALL_PROPERTY_ID +SDO_SEM_UTL.GET_ANC +SDO_SEM_UTL.GET_COLUMNAR_COMPRESS_SYN +SDO_SEM_UTL.GET_ELAPSED_TIME_IN_SEC +SDO_SEM_UTL.GET_INT_PARAMETER +SDO_SEM_UTL.GET_NUMBER_IN_POS +SDO_SEM_UTL.GET_PARAMETER +SDO_SEM_UTL.GET_PROOF +SDO_SEM_UTL.GET_SAFE_ROWCOUNT +SDO_SEM_UTL.GET_SESSION_PARALLEL_DML_DOP +SDO_SEM_UTL.GET_SESSION_PARALLEL_QUERY_DOP +SDO_SEM_UTL.GET_STRING_PARAMETER +SDO_SEM_UTL.GET_SUB_HINT +SDO_SEM_UTL.GET_URI +SDO_SEM_UTL.GET_VALUE_TYPE +SDO_SEM_UTL.IMPORT_ENTAILMENT_STATS +SDO_SEM_UTL.IMPORT_MODEL_STATS +SDO_SEM_UTL.IMPORT_NETWORK_STATS +SDO_SEM_UTL.INIT_ALREADY +SDO_SEM_UTL.ISSAFEFILTER +SDO_SEM_UTL.MERGE_MODELS_CREATE_TMP_TAB +SDO_SEM_UTL.MERGE_MODELS_SWAP_TMP_MERGE_TO +SDO_SEM_UTL.MERGE_MODELS_UPDATE_LINKTAB +SDO_SEM_UTL.NUMBERLISTCONTAINS +SDO_SEM_UTL.NUMTOINLIST +SDO_SEM_UTL.RAISEJAVAQUERYERROR +SDO_SEM_UTL.REMOVE_DUPLICATES +SDO_SEM_UTL.RUN_DML_STMT_MERGE +SDO_SEM_UTL.SETINFERTMPTABNAME +SDO_SEM_UTL.SET_ANC +SDO_SEM_UTL.SET_ENTAILMENT_STATS +SDO_SEM_UTL.SET_MODEL_STATS +SDO_SEM_UTL.SET_PROOF +SDO_SEM_UTL.SET_START_TIME +SDO_SEM_UTL.SET_SUB_HINT_AJ +SDO_SEM_UTL.SET_SUB_HINT_AJ_NO_PUSH_PRED +SDO_SEM_UTL.SET_SUB_HINT_EMPTY +SDO_SEM_UTL.SET_USE_PRH +SDO_SEM_UTL.SET_USE_RAW8 +SDO_SEM_UTL.SHORTENCLOBTOVC +SDO_SEM_UTL.SHORTENVC +SDO_SEM_UTL.USE_RAW +SDO_SEM_UTL.WRAP_NUM_COL2RAW +SDO_SEM_UTL.WRAP_RAW_COL2NUM +SDO_SEM_VALIDATE. +SDO_SEM_VALIDATE.GET_BULKLOAD_LIMIT +SDO_SEM_VALIDATE.GET_ERR_MESG +SDO_SEM_VALIDATE.SET_BULKLOAD_LIMIT +SDO_SEM_VALIDATE.VALIDATE +SDO_SIMPLE_FILTER. +SDO_STATISTICS.ODCIGETINTERFACES +SDO_STATISTICS.ODCISTATSCOLLECT +SDO_STATISTICS.ODCISTATSDELETE +SDO_STATISTICS.ODCISTATSFUNCTIONCOST +SDO_STATISTICS.ODCISTATSINDEXCOST +SDO_STATISTICS.ODCISTATSSELECTIVITY +SDO_ST_SYN_CREATE. +SDO_TIN_PKG. +SDO_TIN_PKG.CLIP_TIN +SDO_TIN_PKG.CLIP_TIN_INTO_PC +SDO_TIN_PKG.CREATE_CONTOUR_GEOMETRIES +SDO_TIN_PKG.CREATE_TIN +SDO_TIN_PKG.DROP_DEPENDENCIES +SDO_TIN_PKG.GET_SURFACE_OF_TIN +SDO_TIN_PKG.GET_SURFACE_OF_TIN_FOOTPRINT +SDO_TIN_PKG.GET_VOLUME_UNDER_TIN +SDO_TIN_PKG.INIT +SDO_TIN_PKG.POPULATE_ZCOORDS_FROM_TRIANGLE +SDO_TIN_PKG.PROJECT_ORDINATES_ONTO_TIN +SDO_TIN_PKG.TO_DEM +SDO_TIN_PKG.TO_GEOMETRY +SDO_TOPO. +SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER +SDO_TOPO.ALIGN_EDGE_GEOMETRY +SDO_TOPO.ALIGN_LINEAR_GEOMETRY +SDO_TOPO.ALIGN_POINT_GEOMETRY +SDO_TOPO.CREATE_TOPOLOGY +SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYER +SDO_TOPO.DROP_TOPOLOGY +SDO_TOPO.GET_FACE_BOUNDARY +SDO_TOPO.GET_INTERACTING_TGIDS +SDO_TOPO.GET_INTERNAL_GEOMETRY +SDO_TOPO.GET_TOPO_OBJECTS +SDO_TOPO.INITIALIZE_AFTER_IMPORT +SDO_TOPO.INITIALIZE_METADATA +SDO_TOPO.INTERNAL_GET_TGIDS +SDO_TOPO.LOCKROW_UNIVERSEFACE +SDO_TOPO.PREPARE_FOR_EXPORT +SDO_TOPO.RELATE +SDO_TOPO.SDO_TOPO_CRT_RLIDS_VIEW +SDO_TOPO.TG_INSERT_RELATION +SDO_TOPO_DROP_FTBL. +SDO_TOPO_GEOMETRY.GET_GEOMETRY +SDO_TOPO_GEOMETRY.GET_TGL_OBJECTS +SDO_TOPO_GEOMETRY.GET_TOPO_ELEMENTS +SDO_TOPO_GEOMETRY.SDO_TOPO_GEOMETRY +SDO_TOPO_GEOMETRY.TO_STRING +SDO_TOPO_MAP. +SDO_TOPO_MAP.ADD_EDGE +SDO_TOPO_MAP.ADD_ISOLATED_NODE +SDO_TOPO_MAP.ADD_LINEAR_GEOMETRY +SDO_TOPO_MAP.ADD_LOOP +SDO_TOPO_MAP.ADD_NODE +SDO_TOPO_MAP.ADD_POINT_GEOMETRY +SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY +SDO_TOPO_MAP.CHANGE_EDGE_COORDS +SDO_TOPO_MAP.CLEAR_TOPO_MAP +SDO_TOPO_MAP.COMMIT_TOPO_MAP +SDO_TOPO_MAP.CREATE_EDGE_INDEX +SDO_TOPO_MAP.CREATE_FACE_INDEX +SDO_TOPO_MAP.CREATE_FEATURE +SDO_TOPO_MAP.CREATE_TOPO_MAP +SDO_TOPO_MAP.DROP_TOPO_MAP +SDO_TOPO_MAP.GET_CONTAINING_FACE +SDO_TOPO_MAP.GET_EDGE_ADDITIONS +SDO_TOPO_MAP.GET_EDGE_CHANGES +SDO_TOPO_MAP.GET_EDGE_COORDS +SDO_TOPO_MAP.GET_EDGE_DELETIONS +SDO_TOPO_MAP.GET_EDGE_NODES +SDO_TOPO_MAP.GET_FACE_ADDITIONS +SDO_TOPO_MAP.GET_FACE_BOUNDARY +SDO_TOPO_MAP.GET_FACE_CHANGES +SDO_TOPO_MAP.GET_FACE_DELETIONS +SDO_TOPO_MAP.GET_NEAREST_EDGE +SDO_TOPO_MAP.GET_NEAREST_EDGE_IN_CACHE +SDO_TOPO_MAP.GET_NEAREST_NODE +SDO_TOPO_MAP.GET_NEAREST_NODE_IN_CACHE +SDO_TOPO_MAP.GET_NODE_ADDITIONS +SDO_TOPO_MAP.GET_NODE_CHANGES +SDO_TOPO_MAP.GET_NODE_COORD +SDO_TOPO_MAP.GET_NODE_DELETIONS +SDO_TOPO_MAP.GET_NODE_FACE_STAR +SDO_TOPO_MAP.GET_NODE_STAR +SDO_TOPO_MAP.GET_TOPO_NAME +SDO_TOPO_MAP.GET_TOPO_TRANSACTION_ID +SDO_TOPO_MAP.LIST_TOPO_MAPS +SDO_TOPO_MAP.LOAD_TOPO_MAP +SDO_TOPO_MAP.MOVE_EDGE +SDO_TOPO_MAP.MOVE_ISOLATED_NODE +SDO_TOPO_MAP.MOVE_NODE +SDO_TOPO_MAP.REMOVE_EDGE +SDO_TOPO_MAP.REMOVE_NODE +SDO_TOPO_MAP.REMOVE_OBSOLETE_NODES +SDO_TOPO_MAP.ROLLBACK_TOPO_MAP +SDO_TOPO_MAP.SEARCH_EDGE_RTREE_TOPO_MAP +SDO_TOPO_MAP.SEARCH_FACE_RTREE_TOPO_MAP +SDO_TOPO_MAP.SET_MAX_MEMORY_SIZE +SDO_TOPO_MAP.UPDATE_TOPO_MAP +SDO_TOPO_MAP.VALIDATE_TOPOLOGY +SDO_TOPO_MAP.VALIDATE_TOPO_MAP +SDO_TOPO_METADATA. +SDO_TOPO_METADATA.CHECK_TOPO_ID +SDO_TOPO_METADATA.CLEARCACHE +SDO_TOPO_METADATA.EXTRACT_TOPO_OWNER +SDO_TOPO_METADATA.LOADWINDOW +SDO_TOPO_METADATA.UPDATETOPOLOGY +SDO_TOPO_METADATA_INT. +SDO_TOPO_METADATA_INT.ADD_ENTRY +SDO_TOPO_METADATA_INT.ADD_GM_ENTRY +SDO_TOPO_METADATA_INT.ADD_TG +SDO_TOPO_METADATA_INT.CHANGEFTNAME +SDO_TOPO_METADATA_INT.CHECK_TOPO_ID +SDO_TOPO_METADATA_INT.CLEARCACHE +SDO_TOPO_METADATA_INT.DELETE_TG +SDO_TOPO_METADATA_INT.DROP_ENTRY +SDO_TOPO_METADATA_INT.DROP_GM_ENTRY +SDO_TOPO_METADATA_INT.ENABLE_DDL_TRIGGER +SDO_TOPO_METADATA_INT.EXTRACT_TOPO_OWNER +SDO_TOPO_METADATA_INT.LOADWINDOW +SDO_TOPO_METADATA_INT.UPDATETOPOLOGY +SDO_TOPO_TRIG_INS1. +SDO_TPFNS. +SDO_TPFNS.ANYINTERACT +SDO_TPFNS.CONTAINS +SDO_TPFNS.COVEREDBY +SDO_TPFNS.COVERS +SDO_TPFNS.EQUAL +SDO_TPFNS.FILTER +SDO_TPFNS.INSIDE +SDO_TPFNS.OVERLAP +SDO_TPFNS.OVERLAPBDYDISJOINT +SDO_TPFNS.OVERLAPBDYINTERSECT +SDO_TPFNS.SDO_ON +SDO_TPFNS.TOUCH +SDO_TPIDX. +SDO_TPIDX.INDEX_DELETE +SDO_TPIDX.INDEX_INSERT +SDO_TPIDX.INDEX_UPDATE +SDO_TPIDX.ISVERSIONED +SDO_TRKR. +SDO_TRKR.CREATE_TRACKING_SET +SDO_TRKR.DROP_TRACKING_SET +SDO_TRKR.GET_NOTIFICATION_MSG +SDO_TRKR.RUN_LOC_DEQ +SDO_TRKR.RUN_TRKR_DEQ +SDO_TRKR.SEND_LOCATION_MSGS +SDO_TRKR.SEND_TRACKING_MSG +SDO_TRKR.START_TRACKING_SET +SDO_TRKR.STOP_TRACKING_SET +SDO_TUNE. +SDO_TUNE.ANALYZE_RTREE +SDO_TUNE.AVERAGE_MBR +SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE +SDO_TUNE.EXTENT_OF +SDO_TUNE.MIX_INFO +SDO_TUNE.QUALITY_DEGRADATION +SDO_TUNE.RTREE_QUALITY +SDO_UNITS_OF_MEASURE_TRIGGER. +SDO_UTIL. +SDO_UTIL.AFFINETRANSFORMS +SDO_UTIL.APPEND +SDO_UTIL.BEARING_TILT_FOR_POINTS +SDO_UTIL.CHECK_ENDIAN +SDO_UTIL.CIRCLE_POLYGON +SDO_UTIL.CONCAT_LINES +SDO_UTIL.CONVERT3007TO3008 +SDO_UTIL.CONVERT_DISTANCE +SDO_UTIL.CONVERT_UNIT +SDO_UTIL.COPY_PRE11GR2_METADATA +SDO_UTIL.DELETE_SDO_GEOM_METADATA +SDO_UTIL.DENSIFY_GEOMETRY +SDO_UTIL.DROP_WORK_TABLES +SDO_UTIL.ELLIPSE_POLYGON +SDO_UTIL.EXPAND_GEOM +SDO_UTIL.EXPAND_MULTI_POINT +SDO_UTIL.EXTRACT +SDO_UTIL.EXTRACT3D +SDO_UTIL.EXTRACTVOIDS +SDO_UTIL.EXTRACT_ALL +SDO_UTIL.EXTRUDE +SDO_UTIL.FROM_CLOB +SDO_UTIL.FROM_GEOJSON +SDO_UTIL.FROM_GML311GEOMETRY +SDO_UTIL.FROM_GMLGEOMETRY +SDO_UTIL.FROM_JSON +SDO_UTIL.FROM_KMLGEOMETRY +SDO_UTIL.FROM_WKBGEOMETRY +SDO_UTIL.FROM_WKTGEOMETRY +SDO_UTIL.GEO_SEARCH +SDO_UTIL.GETFIRSTVERTEX +SDO_UTIL.GETLABELBYELEMENT +SDO_UTIL.GETLASTVERTEX +SDO_UTIL.GETNUMELEM +SDO_UTIL.GETNUMRINGS +SDO_UTIL.GETNUMVERTICES +SDO_UTIL.GETNURBSAPPROX +SDO_UTIL.GETVERTICES +SDO_UTIL.GET_2D_FOOTPRINT +SDO_UTIL.GET_BOUNDARY +SDO_UTIL.GET_COORDINATE +SDO_UTIL.GET_POINT_ORDINATE +SDO_UTIL.GET_QUOTED_NAME +SDO_UTIL.HHCELL_BOUNDARY +SDO_UTIL.HYBRID_TILES +SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS +SDO_UTIL.INSERT_SDO_GEOM_METADATA +SDO_UTIL.INTERIOR_POINT +SDO_UTIL.INTERNAL_MAKE_LINE_OUT_OF_ELEM +SDO_UTIL.INTERNAL_MERGE_LINESTRINGS +SDO_UTIL.INTERNAL_ORDINATE_COPY +SDO_UTIL.INTERNAL_REVERSE_LINE_POINTS +SDO_UTIL.INVALIDATE_GTT_CACHE +SDO_UTIL.IS_DELETED +SDO_UTIL.IS_INTERNAL_RENAME +SDO_UTIL.IS_SIMPLE_FILE_NAME +SDO_UTIL.IS_SPATIAL_ENABLED +SDO_UTIL.JSPH_GETNURBSAPPROX +SDO_UTIL.LINEAR_KEY +SDO_UTIL.MDUTL_IS_NUMERIC +SDO_UTIL.NUMBER_OF_COMPONENTS +SDO_UTIL.NUMBER_TO_CHAR +SDO_UTIL.OUTERLN +SDO_UTIL.PARTITION_TABLE +SDO_UTIL.POINT_AT_BEARING +SDO_UTIL.POINT_TO_LINE +SDO_UTIL.POLYGONTOLINE +SDO_UTIL.PREPARE_FOR_TTS +SDO_UTIL.PROCESS_AUXILIARY_INFO +SDO_UTIL.QUAD_TILES +SDO_UTIL.RECTIFY_GEOMETRY +SDO_UTIL.REFINEMGON +SDO_UTIL.REMOVE_DUPLICATES +SDO_UTIL.REMOVE_DUPLICATE_VERTICES +SDO_UTIL.REMOVE_INNER_RINGS +SDO_UTIL.REVERSE_LINESTRING +SDO_UTIL.SDO_3DTRIANGLE_AREA +SDO_UTIL.SET_QUOTED_NAME +SDO_UTIL.SIMPLIFY +SDO_UTIL.SIMPLIFYVW +SDO_UTIL.SIMPLIFY_TO_EXTRUDED +SDO_UTIL.SPLIT_180_MERIDIAN +SDO_UTIL.THEME3D_ADD_BITMAP +SDO_UTIL.THEME3D_ADD_FACE_TEXTURE +SDO_UTIL.THEME3D_ADD_FACE_TEXTURES +SDO_UTIL.THEME3D_ADD_REF_TO_TEX_TABLES +SDO_UTIL.THEME3D_ADD_TEXTURE_COORDS +SDO_UTIL.THEME3D_CREATE_TEXTURE_TABLES +SDO_UTIL.THEME3D_GET_BLOCK_TABLE +SDO_UTIL.THEME3D_HAS_LOD +SDO_UTIL.THEME3D_HAS_TEXTURE +SDO_UTIL.TOGNOMONIC +SDO_UTIL.TO_CLOB +SDO_UTIL.TO_GEOJSON +SDO_UTIL.TO_GML311GEOMETRY +SDO_UTIL.TO_GML321GEOMETRY +SDO_UTIL.TO_GMLGEOMETRY +SDO_UTIL.TO_JSON +SDO_UTIL.TO_JSON_VARCHAR +SDO_UTIL.TO_KMLGEOMETRY +SDO_UTIL.TO_WKBGEOMETRY +SDO_UTIL.TO_WKBGEOMETRY_J +SDO_UTIL.TO_WKTGEOMETRY +SDO_UTIL.TO_WKTGEOMETRY_J +SDO_UTIL.TO_WKTGEOMETRY_J_VARCHAR +SDO_UTIL.TO_WKTGEOMETRY_VARCHAR +SDO_UTIL.TRUNCATE_NUMBER +SDO_UTIL.UPDATE_ENDIAN +SDO_UTIL.VALIDATE_3DTHEME +SDO_UTIL.VALIDATE_SCENE +SDO_UTIL.VALIDATE_VIEWFRAME +SDO_UTIL.VALIDATE_WKBGEOMETRY +SDO_UTIL.VALIDATE_WKTGEOMETRY +SDO_UTIL.VALIDATE_XML_LAYER +SDO_UTIL.VALIDATE_XML_RECORD +SDO_VERSION. +SDO_WCS. +SDO_WCS.CREATETEMPTABLE +SDO_WCS.DELETETEMPGEORASTER +SDO_WCS.DESCRIBECOVERAGE +SDO_WCS.DROPTEMPTABLE +SDO_WCS.GETCAPABILITIES +SDO_WCS.GETCOVERAGE +SDO_WCS.GRANTPRIVILEGESTOWCS +SDO_WCS.INIT +SDO_WCS.PUBLISHCOVERAGE +SDO_WCS.REVOKEPRIVILEGESFROMWCS +SDO_WCS.UNPUBLISHCOVERAGE +SDO_WCS.VALIDATECOVERAGES +SDO_WFS_LOCK. +SDO_WFS_LOCK.DELETETOKENSESSIONMAP +SDO_WFS_LOCK.ENABLEDBTXNS +SDO_WFS_LOCK.GENERATETOKENID +SDO_WFS_LOCK.LOCKROWSBYID +SDO_WFS_LOCK.QUERYTOKENSESSIONMAP +SDO_WFS_LOCK.REGISTERFEATURETABLE +SDO_WFS_LOCK.RESETTOKENEXPIRY +SDO_WFS_LOCK.TRANSFERTOKENBYID +SDO_WFS_LOCK.UNLOCKROWSBYID +SDO_WFS_LOCK.UNREGISTERFEATURETABLE +SDO_WFS_LOCK.UPDATETOKENSESSIONMAP +SDO_WFS_LOCK_GEN. +SDO_WFS_LOCK_GEN.GENERATETOKENID +SDO_WFS_LOCK_UTIL. +SDO_WFS_LOCK_UTIL.ALLOWUPDATEDELETEROW +SDO_WFS_LOCK_UTIL.CANLOCKROW +SDO_WFS_PROCESS. +SDO_WFS_PROCESS.COLTYPETOXSDTYPE +SDO_WFS_PROCESS.CONTAINSSDO +SDO_WFS_PROCESS.CONTAINSSDOINTERNAL +SDO_WFS_PROCESS.CREATEDEFAULTFTXSD +SDO_WFS_PROCESS.DELETECAPABILITIESINFO +SDO_WFS_PROCESS.DELETEFEATURETYPEXMLINFO +SDO_WFS_PROCESS.DROPFEATURETYPE +SDO_WFS_PROCESS.DROPFEATURETYPES +SDO_WFS_PROCESS.DROP_EXPORT_TABLES +SDO_WFS_PROCESS.ENUMERATEARRPATHS +SDO_WFS_PROCESS.EXPANDPATH +SDO_WFS_PROCESS.EXTRACTID +SDO_WFS_PROCESS.EXTRACTSDO +SDO_WFS_PROCESS.FINDNSURL +SDO_WFS_PROCESS.GENCOLLECTIONPROCS +SDO_WFS_PROCESS.GENCOLLECTIONPROCSHELPER +SDO_WFS_PROCESS.GENERATEALIASSTRING +SDO_WFS_PROCESS.GENERATEPARSEDSPATIALPATH +SDO_WFS_PROCESS.GENIDVALUE +SDO_WFS_PROCESS.GENRECORDTYPEPROCESSINGLOGIC +SDO_WFS_PROCESS.GENSPATIALARRINFO +SDO_WFS_PROCESS.GENSPATIALPATHELEMCOLINDEX +SDO_WFS_PROCESS.GENTRIGGERS +SDO_WFS_PROCESS.GENUPDATESTR +SDO_WFS_PROCESS.GETALIAS +SDO_WFS_PROCESS.GETCOUNT +SDO_WFS_PROCESS.GETFEATURETYPEID +SDO_WFS_PROCESS.GETPARSEDPATH +SDO_WFS_PROCESS.GETPATH +SDO_WFS_PROCESS.GETUPDATEMAP +SDO_WFS_PROCESS.GETXMLTAGTYPE +SDO_WFS_PROCESS.GRANTFEATURETYPETOUSER +SDO_WFS_PROCESS.GRANTMDACCESSTOUSER +SDO_WFS_PROCESS.INITIALIZE_AFTER_IMPORT +SDO_WFS_PROCESS.INSERTCAPABILITIESINFO +SDO_WFS_PROCESS.INSERTFTDATAUPDATED +SDO_WFS_PROCESS.INSERTFTMDUPDATED +SDO_WFS_PROCESS.ISCOMPLEXOBJECTTYPE +SDO_WFS_PROCESS.ISINLIST +SDO_WFS_PROCESS.ISLISTMEMBER +SDO_WFS_PROCESS.ISPKCOLIN +SDO_WFS_PROCESS.ISROWIDIN +SDO_WFS_PROCESS.NOTINARRAY +SDO_WFS_PROCESS.ORDERINLIST +SDO_WFS_PROCESS.PARSEPATH +SDO_WFS_PROCESS.POPULATEFEATURETYPEXMLINFO +SDO_WFS_PROCESS.POPULATEVARYINGALIASES +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_ALL +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_FTS +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_FT_INT +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_FT_M_INT +SDO_WFS_PROCESS.PREPARE_FOR_EXPORT_USER +SDO_WFS_PROCESS.PREPROCESSINSERT +SDO_WFS_PROCESS.PREPROCESSUPDATE +SDO_WFS_PROCESS.PROCESSCOMPLEXELEMENT +SDO_WFS_PROCESS.PROCESSIDPATH +SDO_WFS_PROCESS.PROCESSINLINECOMPLEXELEMENT +SDO_WFS_PROCESS.PROCESSPATH +SDO_WFS_PROCESS.PUBLISHFEATURETYPE +SDO_WFS_PROCESS.PUBLISH_FEATURETYPES_IN_SCHEMA +SDO_WFS_PROCESS.PUTALIAS +SDO_WFS_PROCESS.REGISTERMTABLEVIEW +SDO_WFS_PROCESS.REGISTEROBJECT +SDO_WFS_PROCESS.REVOKEFEATURETYPEFROMUSER +SDO_WFS_PROCESS.REVOKEMDACCESSFROMUSER +SDO_WFS_PROCESS.SORTSPCONTENTBYCOLINDEX +SDO_WFS_PROCESS.STRIP_SPECIAL_CHARS +SDO_WFS_PROCESS.UNREGISTERMTABLEVIEW +SDO_WFS_PROCESS.UPDATEOBJECTREF +SDO_WFS_PROCESS_UTIL. +SDO_WFS_PROCESS_UTIL.GENERATEWFS_PROC_SQ +SDO_WFS_PROCESS_UTIL.GENERATEXMLINFO_SQ +SDO_WS_PROCESS. +SDO_WS_PROCESS.CHECKLENGTH +SDO_WS_PROCESS.CONVERTDURATIONEXPR +SDO_WS_PROCESS.EVALUATEDURATIONEXPR +SDO_WS_PROCESS.EVALUATEEXPR +SDO_WS_PROCESS.EVALUATEGDAYEXPR +SDO_WS_PROCESS.EVALUATEGMONTHDAYEXPR +SDO_WS_PROCESS.EVALUATEGMONTHEXPR +SDO_WS_PROCESS.EVALUATEGYEAREXPR +SDO_WS_PROCESS.EVALUATEGYEARMONTHEXPR +SDO_WS_PROCESS.EVALUATENONTSEXPR +SDO_WS_PROCESS.EVALUATENONTSNUMEXPR +SDO_WS_PROCESS.EVALUATETIMEEXPR +SDO_WS_PROCESS.EVALUATETSEXPR +SEARCH_COLUMNS +SEARCH_CONDITION +SEARCH_CONDITION_VC +SECONDARY +SECONDARY_INSTANCE +SECONDARY_OBJDATA_TYPE +SECONDARY_OBJECT_NAME +SECONDARY_OBJECT_OWNER +SECONDS_IN_WAIT +SECRET_TAG +SECTION +SECTION_ID +SECTION_NAME +SECTION_SIZE +SECTOR_SIZE +SECURE +SECUREFILE +SECURITY +SECURITY_CLASS +SECURITY_CLASS_OWNER +SECURITY_FEATURE +SECURITY_FEATURE_POLICY +SECURITY_LEVEL +SEC_REL_COLUMN +SEGBLK# +SEGFILE# +SEGMENTS_PROCESSED +SEGMENTS_SELECTED +SEGMENT_ADVISOR +SEGMENT_BLOCK +SEGMENT_COLUMN_ID +SEGMENT_COUNT +SEGMENT_CREATED +SEGMENT_DICTIONARY_ADDRESS +SEGMENT_DICTIONARY_VERSION +SEGMENT_FILE +SEGMENT_FILEID +SEGMENT_ID +SEGMENT_NAME +SEGMENT_OWNER +SEGMENT_READ +SEGMENT_READ_TIME +SEGMENT_SPACE_MANAGEMENT +SEGMENT_SUBTYPE +SEGMENT_TYPE +SEGMENT_WRITE +SEGMENT_WRITE_TIME +SEGRFNO# +SEGTYPE +SEG_NAME +SEG_OWNER +SEG_TYPE +SEG_TYPE_NAME +SEL +SELECTED_FOR_EXECUTION +SEMCONTEXTINDEXMETHODS.ODCIGETINTERFACES +SEMCONTEXTINDEXMETHODS.ODCIINDEXALTER +SEMCONTEXTINDEXMETHODS.ODCIINDEXCLOSE +SEMCONTEXTINDEXMETHODS.ODCIINDEXCREATE +SEMCONTEXTINDEXMETHODS.ODCIINDEXDELETE +SEMCONTEXTINDEXMETHODS.ODCIINDEXDROP +SEMCONTEXTINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +SEMCONTEXTINDEXMETHODS.ODCIINDEXFETCH +SEMCONTEXTINDEXMETHODS.ODCIINDEXGETMETADATA +SEMCONTEXTINDEXMETHODS.ODCIINDEXINSERT +SEMCONTEXTINDEXMETHODS.ODCIINDEXMERGEPARTITION +SEMCONTEXTINDEXMETHODS.ODCIINDEXSPLITPARTITION +SEMCONTEXTINDEXMETHODS.ODCIINDEXSTART +SEMCONTEXTINDEXMETHODS.ODCIINDEXTRUNCATE +SEMCONTEXTINDEXMETHODS.ODCIINDEXUPDATE +SEMCONTEXTINDEXMETHODS.ODCIINDEXUTILCLEANUP +SEMCONTEXTINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +SEMIJOIN +SEMIJOIN_DRIVER +SEMI_TO_INNER +SEM_GRAPH.ADDMULTPATTERNQUERYNODE +SEM_GRAPH.ADDNODETOGRAPH +SEM_GRAPH.ADDQUERYNODE +SEM_GRAPH.ADD_RULE +SEM_GRAPH.BUILDGRAPH +SEM_GRAPH.BUILDORIGRULES +SEM_GRAPH.BUILD_PREDICATE +SEM_GRAPH.GENERATEGROUP1RULES +SEM_GRAPH.GENERATEGROUP2RULES +SEM_GRAPH.GENERATEGROUP3RULES +SEM_GRAPH.GENERATEGROUP4RULES +SEM_GRAPH.GENERATEMAGICPRED +SEM_GRAPH.GENERATEMAGICRULES +SEM_GRAPH.GENERATESUPPRED +SEM_GRAPH.GETGOALNODE +SEM_GRAPH.LOOKUPNODE +SEM_GRAPH.PRINTGRAPH +SEM_GRAPH.REMOVEMULTPREDQUERYRULES +SEM_GRAPH.SEM_GRAPH +SEM_GRAPH.SIMPLIFYMAGICRULES +SEM_INDEXTYPE_IM.ODCIGETINTERFACES +SEM_INDEXTYPE_IM.ODCIINDEXALTER +SEM_INDEXTYPE_IM.ODCIINDEXCLOSE +SEM_INDEXTYPE_IM.ODCIINDEXCREATE +SEM_INDEXTYPE_IM.ODCIINDEXDELETE +SEM_INDEXTYPE_IM.ODCIINDEXDROP +SEM_INDEXTYPE_IM.ODCIINDEXFETCH +SEM_INDEXTYPE_IM.ODCIINDEXGETMETADATA +SEM_INDEXTYPE_IM.ODCIINDEXINSERT +SEM_INDEXTYPE_IM.ODCIINDEXSTART +SEM_INDEXTYPE_IM.ODCIINDEXTRUNCATE +SEM_INDEXTYPE_IM.ODCIINDEXUPDATE +SEM_MATCH_NL. +SEM_MATCH_NL_IMPL_T.FETCH_PUSH_VAL +SEM_MATCH_NL_IMPL_T.GET_SEM_MATCH_STR +SEM_MATCH_NL_IMPL_T.NEXT_TOKEN +SEM_MATCH_NL_IMPL_T.ODCITABLECLOSE +SEM_MATCH_NL_IMPL_T.ODCITABLEDESCRIBE +SEM_MATCH_NL_IMPL_T.ODCITABLEFETCH +SEM_MATCH_NL_IMPL_T.ODCITABLEPREPARE +SEM_MATCH_NL_IMPL_T.ODCITABLESTART +SEM_MATCH_NL_IMPL_T.QUERYNEXTFILTER +SEM_MATCH_NL_IMPL_T.STR_TO_SEM_TYPE +SEM_OLS. +SEM_OLS.APPLY_OLS_POLICY +SEM_OLS.APPLY_POLICY_TO_APP_TAB +SEM_OLS.DISABLE_OLS_POLICY +SEM_OLS.ENABLE_OLS_POLICY +SEM_OLS.GET_MIN_LABEL_FOR_QUERY +SEM_OLS.REMOVE_OLS_POLICY +SEM_OLS.REMOVE_POLICY_FROM_APP_TAB +SEM_OLS.SET_MIN_LABEL_FOR_QUERY +SEM_OLS_DR. +SEM_OLS_DR.CREATE_SECACCESS_TRIGS +SEM_OLS_DR.DROP_SECUREACCESS_OBJS +SEM_OLS_DR.FLIP_OLS_POLICY +SEM_OLS_DR.GET_COL_NAME +SEM_OLS_DR.GET_MODEL_ID +SEM_OLS_DR.GET_OLS_POLICY_NAME +SEM_OLS_DR.GET_RDFOLS_OPTIONS +SEM_OLS_DR.INIT_PARAM_TAB +SEM_OLS_DR.IS_URI_TYPE +SEM_OLS_DR.LOOP_APP_TAB +SEM_OLS_DR.MAINTAIN_FOR_DDL +SEM_OLS_DR.PREPARE_FOR_SECUREACCESS +SEM_OLS_DR.TRACE +SEM_PREDICATE.GETVARS +SEM_PREDICATE.RESOLVE_NAME +SEM_PREDICATE.SEM_PREDICATE +SEM_PREDICATE.TOSTRING +SEM_RDFCTX. +SEM_RDFCTX.ADD_DEPENDENT_POLICY +SEM_RDFCTX.CREATE_POLICY +SEM_RDFCTX.DROP_POLICY +SEM_RDFCTX.EXTRACT_RDFXML +SEM_RDFCTX.MAINTAIN_TRIPLES +SEM_RDFCTX.SET_DEFAULT_POLICY +SEM_RDFCTX.SET_EXTRACTOR_PARAM +SEM_RDFCTX_DR. +SEM_RDFCTX_DR.ADD_DEPENDENT_POLICY +SEM_RDFCTX_DR.ADD_ONE_DOCURI_VALUE +SEM_RDFCTX_DR.ARE_MATCHING_DATASTORES +SEM_RDFCTX_DR.BULK_LOAD_INTO_MODEL +SEM_RDFCTX_DR.CLEANUP_RDFCTX +SEM_RDFCTX_DR.CREATE_DEPEND_POLICY +SEM_RDFCTX_DR.CREATE_POLICY +SEM_RDFCTX_DR.CREATE_RDFCTX_INDEX +SEM_RDFCTX_DR.CREATE_UNIQCTXT2_INDEX +SEM_RDFCTX_DR.CREATE_VIRTUAL_RDFCTX_INDEX +SEM_RDFCTX_DR.DELETE_RX_SPQL_ABSCNT +SEM_RDFCTX_DR.DELETE_RX_SPQL_RSLT +SEM_RDFCTX_DR.DELETE_TRIPLES +SEM_RDFCTX_DR.DROP_INDEX_POLICY +SEM_RDFCTX_DR.DROP_POLICY +SEM_RDFCTX_DR.DROP_RDFCTX_INDEX +SEM_RDFCTX_DR.EXCHANGE_INDEX_POLICIES +SEM_RDFCTX_DR.EXISTS_RX_SPQL_ABSCNT +SEM_RDFCTX_DR.EXISTS_RX_SPQL_RSLT +SEM_RDFCTX_DR.GEN_DOC_URI_PREFIX +SEM_RDFCTX_DR.GETSELECTVARIABLES +SEM_RDFCTX_DR.GETWHEREVARIABLES +SEM_RDFCTX_DR.GET_BASE_MODEL_ID +SEM_RDFCTX_DR.GET_DEFAULT_CTXENTITY_XSL +SEM_RDFCTX_DR.GET_DEFAULT_GATENLP_XSL +SEM_RDFCTX_DR.GET_DEP_INDEX_POLICIES +SEM_RDFCTX_DR.GET_DOCURI2RID_DEBUG_NAME +SEM_RDFCTX_DR.GET_EXCEPTIONS_COUNT +SEM_RDFCTX_DR.GET_IDXSTATUS_STRING +SEM_RDFCTX_DR.GET_INDEX_POLICIES +SEM_RDFCTX_DR.GET_MAPTAB_NAMES +SEM_RDFCTX_DR.GET_MODEL_ID +SEM_RDFCTX_DR.GET_POLICY_INFO +SEM_RDFCTX_DR.GET_RX_SPQL_ABSCNT +SEM_RDFCTX_DR.GET_RX_SPQL_RSLT +SEM_RDFCTX_DR.GET_STAGTAB_NAME +SEM_RDFCTX_DR.GET_STAGTAB_PART_VIEW_NAME +SEM_RDFCTX_DR.GET_STAGTAB_SUFFIX +SEM_RDFCTX_DR.GRANT_NETWORK_PRIV +SEM_RDFCTX_DR.HTTPPWREAD +SEM_RDFCTX_DR.HTTPPWWRITE +SEM_RDFCTX_DR.IS_ENTAILMENT_COMPAT +SEM_RDFCTX_DR.IS_INDEX_POLICY +SEM_RDFCTX_DR.LOAD_ONE_TRIPLE +SEM_RDFCTX_DR.LOAD_TRIPLES +SEM_RDFCTX_DR.LOAD_TRIPLES_FROM_TRANSIENT +SEM_RDFCTX_DR.PARSE_RDFXML +SEM_RDFCTX_DR.PROCESS_SOAP_REQUEST +SEM_RDFCTX_DR.PROCESS_TCP_REQUEST +SEM_RDFCTX_DR.PRVT_PARAMS_PARSER +SEM_RDFCTX_DR.RECORD_RDFCTX_EXCEPTION +SEM_RDFCTX_DR.SETUP_FOR_RDFCTX +SEM_RDFCTX_DR.SET_DEFAULT_POLICY +SEM_RDFCTX_DR.SET_EXTRACTOR_PARAM +SEM_RDFCTX_DR.SET_PACKAGE_ATTR +SEM_RDFCTX_DR.SET_RDFCTX_INDEX_STATUS +SEM_RDFCTX_DR.SET_RDFCTX_INDEX_STATUS_VALID +SEM_RDFCTX_DR.SET_RX_SPQL_ABSCNT +SEM_RDFCTX_DR.SET_RX_SPQL_RSLT +SEM_RDFCTX_DR.SPARQL_GET_COLS +SEM_RDFCTX_DR.SPLIT_POLICY_LIST +SEM_RDFCTX_DR.TRUNCATE_RDFCTX_INDEX +SEM_RDFCTX_IR. +SEM_RDFCTX_IR.CREATE_ALL_STAGING_TABLES +SEM_RDFCTX_IR.CREATE_DOCVID2RID_TABLE +SEM_RDFCTX_IR.CREATE_MAPPING_TABLES +SEM_RDFCTX_IR.CREATE_MAPTABLE_INDEXES +SEM_RDFCTX_IR.CREATE_STAGING_TABLE +SEM_RDFCTX_IR.MAINTAIN_DOCVID2RID_TABLE +SEM_RDFCTX_IR.POPULATE_INDEX_SEGMENT +SEM_RDFCTX_IR.PURGE_TEMP_STAGING_TABLES +SEM_RDFCTX_IR.READ_FROM_FILE +SEM_RDFCTX_IR.READ_FROM_NTWRK +SEM_RDFCTX_IR.SET_DEBUG_TRACE +SEM_RDFCTX_IR.SET_PACKAGE_ATTR +SEM_RDFCTX_IR.VALIDATE_RDFCTX_PREFERENCES +SEM_RDFCTX_OPER. +SEM_RDFCTX_OPER.SEM_CONTAINS +SEM_RDFCTX_OPER.SEM_RDFCTX_COUNT +SEM_RDFCTX_OPER.SEM_RDFCTX_SELECT +SEM_RDFSA. +SEM_RDFSA.ADD_VPD_CONSTRAINT +SEM_RDFSA.APPLY_OLS_POLICY +SEM_RDFSA.APPLY_VPD_POLICY +SEM_RDFSA.CREATE_VPD_POLICY +SEM_RDFSA.DELETE_VPD_CONSTRAINT +SEM_RDFSA.DISABLE_OLS_POLICY +SEM_RDFSA.DROP_VPD_POLICY +SEM_RDFSA.ENABLE_OLS_POLICY +SEM_RDFSA.LOCAL_SA_SESSION_PRIVS +SEM_RDFSA.MAINT_VPD_METADATA +SEM_RDFSA.REMOVE_OLS_POLICY +SEM_RDFSA.REMOVE_VPD_POLICY +SEM_RDFSA.RESET_MODEL_LABELS +SEM_RDFSA.SET_PREDICATE_LABEL +SEM_RDFSA.SET_RDFS_LABEL +SEM_RDFSA.SET_RESOURCE_LABEL +SEM_RDFSA.SET_RULE_LABEL +SEM_RDFSA_CONST. +SEM_RDFSA_CONST_INTERNAL. +SEM_RDFSA_DR. +SEM_RDFSA_DR.APPLY_VPD_IDXRESTR +SEM_RDFSA_DR.APPLY_VPD_POLICY +SEM_RDFSA_DR.CLEANUP_VPD_OBJECTS +SEM_RDFSA_DR.CREATE_SECACCESS_TRIGS +SEM_RDFSA_DR.CREATE_VPD_POLICY +SEM_RDFSA_DR.DROP_SECUREACCESS_OBJS +SEM_RDFSA_DR.DROP_VPD_POLICY +SEM_RDFSA_DR.FLIP_OLS_POLICY +SEM_RDFSA_DR.GET_CTX_BATCH_MAINT_OPER +SEM_RDFSA_DR.GET_MODEL_ID +SEM_RDFSA_DR.GET_OLS_POLICY_NAME +SEM_RDFSA_DR.GET_RDFOLS_OPTIONS +SEM_RDFSA_DR.GET_TAG_LABELS +SEM_RDFSA_DR.GET_VPD_TRUSTED_QUERY +SEM_RDFSA_DR.HAS_TRIPLE_LEVEL_OLS +SEM_RDFSA_DR.IS_URI_TYPE +SEM_RDFSA_DR.MAINTAIN_FOR_DDL +SEM_RDFSA_DR.MAINT_VPD_CONSTR +SEM_RDFSA_DR.MAINT_VPD_MDSTMT +SEM_RDFSA_DR.MODELS_DIST_VPDPOLS +SEM_RDFSA_DR.PREPARE_FOR_CUSTOM_ENTLBLS +SEM_RDFSA_DR.PREPARE_FOR_SECUREACCESS +SEM_RDFSA_DR.PROCESS_VPD_PATTERNS +SEM_RDFSA_DR.RDF_OLS_STATE +SEM_RDFSA_DR.RDF_VPD_STATE4MODS +SEM_RDFSA_DR.REMOVE_VPD_POLICY +SEM_RDFSA_DR.RESTRICT_RDFMVIEW_ACCESS4VPD +SEM_RDFSA_DR.RESTRICT_TRIPLECOL_ACCESS4VPD +SEM_RDFSA_DR.RESTRICT_TRIPLE_SELECT +SEM_RDFSA_DR.SETUP_FOR_VPD +SEM_RDFSA_DR.SET_BULKLOAD_LABELS +SEM_RDFSA_DR.SET_CTX_BATCH_MAINT_OPER +SEM_RDFSA_DR.SET_ENTAILMENT_LABELS_NT +SEM_RDFSA_DR.SET_PREDICATE_LABEL +SEM_RDFSA_DR.SET_RDFS_LABEL +SEM_RDFSA_DR.SET_RESOURCE_LABEL +SEM_RDFSA_DR.SET_RULE_LABEL +SEM_RDFSA_DR.SET_TRIPLE_LABEL +SEM_RDFSA_DR.SET_VPD_TRUSTED_QUERY +SEM_RDFSA_DR.TRACE +SEM_RDFSA_DR.UNINSTALL_VPD +SEM_RDFSA_IR. +SEM_RDFSA_IR.BULK_LOAD_FROM_STAGING_TABLE +SEM_RDFSA_IR.CREATE_ENTAILMENT +SEM_RDFSA_PRIV. +SEM_RDFSA_PRIV.SYNC_META_TAGS +SEM_RDFSA_PRIV.TRIPLE_ROW_COUNT +SEM_RULE.ORDERSUBGOALS +SEM_RULE.TOSTRING +SEM_RULE_NODE.SEM_RULE_NODE +SEM_TERM.SEM_TERM +SEM_UPGRADE_TO_11. +SEM_UPGRADE_TO_11.CREATE_ALL_MODELS_IN_11 +SEM_UPGRADE_TO_11.EMPTY_APP_TABS_DROP_RDF_COLS +SEM_UPGRADE_TO_11.LOAD_FROM_ALL_STAGING_TABLES +SEM_UPGRADE_TO_11.RESTORE_10_2_RDF_NETWORK_IN_11 +SEM_UPGRADE_TO_11.SAVE_10_2_RDF_NETWORK_FOR_11 +SEM_UPGRADE_TO_11.SETUP_FOR_LOADING_IN_11 +SEM_UPGRADE_TO_11.UNLOAD_ALL_INTO_STAGING_TABLES +SENDER +SENDER_ADDRESS +SENDER_NAME +SENDER_PROTOCOL +SENDQ +SENDS +SENDS_DROPPED +SEND_BUF_OR +SEND_CARRIER_LOST +SEND_ELAPSED_TIME +SEND_ERRORS +SEND_TIME +SENSITIVE# +SENSITIVE_COLUMN +SENSITIVE_TYPE +SENT +SEQ +SEQ# +SEQH +SEQL +SEQNO +SEQNO_DONE_CUR +SEQNO_DONE_HI +SEQNO_DONE_LO +SEQNO_RCV_CUR +SEQNO_RCV_HI +SEQNO_RCV_LO +SEQUENCE +SEQUENCE# +SEQUENCENUMBER +SEQUENCE_HASH +SEQUENCE_ID +SEQUENCE_NAME +SEQUENCE_NEEDED +SEQUENCE_NUMBER +SEQUENCE_OWNER +SEQUENCE_START_VALUE +SEQUENCE_VALUES_CAPTURED +SEQUENCE_VALUES_REPLAYED +SEQ_ID +SEQ_NO +SEQ_NUMBER +SERIAL +SERIAL# +SERIALIZABLE_ABORTS +SERIALIZATION +SERIALNUM +SERIAL_NUM +SERVER +SERVER# +SERVERS_HIGHWATER +SERVERS_STARTED +SERVERS_TERMINATED +SERVER_COUNT +SERVER_ELAPSED_APPLY_TIME +SERVER_ELAPSED_DEQUEUE_TIME +SERVER_ERROR. +SERVER_ERROR_DEPTH. +SERVER_ERROR_MSG. +SERVER_ERROR_NUM_PARAMS. +SERVER_ERROR_PARAM. +SERVER_GROUP +SERVER_ID +SERVER_NAME +SERVER_PID +SERVER_SERIAL# +SERVER_SET +SERVER_SID +SERVER_SPID +SERVER_START_TIME +SERVER_TOTAL_MESSAGES_APPLIED +SERVER_TYPE +SERVICE +SERVICE_DSC_T.SERVICE_DSC_T +SERVICE_HASH +SERVICE_ID +SERVICE_NAME +SERVICE_NAME_HASH +SERVICE_NETWORK_NAME +SERVICE_REQUEST +SERVICE_TIME_AVG +SERVICE_TIME_SUM +SERVICE_TIME_SUMX2 +SESS# +SESSID +SESSINFO_CLEANUP. +SESSION# +SESSIONID +SESSIONS +SESSIONS_CURRENT +SESSIONS_HIGHWATER +SESSIONS_MAX +SESSIONS_WARNING +SESSION_ADDR +SESSION_CACHED_CURSORS +SESSION_CACHE_HITS +SESSION_CACHE_MISSES +SESSION_CPU +SESSION_EDITION_ID +SESSION_FLAG +SESSION_HANDLE +SESSION_ID +SESSION_INFO +SESSION_KEY +SESSION_MODULE +SESSION_NAME +SESSION_NUM +SESSION_PGA_LIMIT +SESSION_PRIVS +SESSION_RECID +SESSION_RESTART_SCN +SESSION_ROLES +SESSION_SERIAL# +SESSION_SERIAL_NUM +SESSION_SETTABLE +SESSION_STAMP +SESSION_STATE +SESSION_STATE_CONSISTENCY +SESSION_STATUS +SESSION_STAT_CPU +SESSION_TOTAL +SESSION_TYPE +SESS_SERIAL# +SES_ACTIONS +SES_ADDR +SETMODFLG. +SETTING +SETTING_NAME +SETTING_TYPE +SETTING_VALUE +SETUP_LATENCY +SET_BY +SET_BY_USER +SET_COUNT +SET_FACTOR. +SET_MSIZE +SET_NAME +SET_STAMP +SET_STATUS +SET_TO_JOIN +SEVERITY +SEVERITY_INDEX +SFILE_CACHE +SFILE_COMPRESS +SFILE_DEDUPLICATE +SFILE_LOG +SF_VERSION +SGA_ALLOCATED +SGA_BYTES +SGA_SIZE +SGA_SIZE_FACTOR +SGA_TARGET_VALUE +SGA_USED +SGID +SH$DEQ_PMAP.SH$DEQ_PMAP +SH$QTAB_PMAP.SH$QTAB_PMAP +SH$SHARD_META.SH$SHARD_META +SH$SUB_META.SH$SUB_META +SHADOW_AFF_SWITCHES_IN +SHADOW_AFF_SWITCHES_OUT +SHADOW_BLOCK +SHADOW_OFFSET +SHADOW_SCN_BASE +SHADOW_SCN_SEQUENCE +SHADOW_SCN_WRAP +SHADOW_SHARDS_FREED +SHADOW_SHARDS_RECEIVED +SHADOW_TSID +SHARABLE_MEM +SHARD +SHARDED +SHARD_CHILD_NUMBER +SHARD_DDL_STATUS +SHARD_ID +SHARD_INTERNAL +SHARD_SQL_ID +SHAREACCESS +SHARED +SHAREDENY +SHARED_FLAG +SHARED_FLAG2 +SHARED_MAX_LEN +SHARED_POOL_BYTES +SHARED_POOL_SIZE_FACTOR +SHARED_POOL_SIZE_FOR_ESTIMATE +SHARES +SHARING +SHORTP_POLICY +SHORT_WAITS +SHORT_WAIT_TIME_MAX +SHORT_WAIT_TIME_TOTAL +SHOST +SHRINKS +SHRINK_PHASE +SHUTDOWN +SHUTDOWN_PENDING +SID +SIGNALLING_COMPONENT +SIGNALLING_SUBCOMPONENT +SIGNATURE +SIMPLE_NAME +SIMPLE_RULES_ONLY_EVALUATIONS +SIMPLE_TYPE +SIMPLE_TYPE_NAME +SIMULATION_TIME +SINGLEBLKRDS +SINGLEBLKRDTIM +SINGLEBLKRDTIM_MICRO +SINGLEBLKRDTIM_MILLI +SINGLE_TABLE +SINGLE_USE_SQL +SINGLE_USE_SQL_MEM +SITE +SITE_GUID +SITE_LABEL +SITE_NAME +SITE_STATUS +SIZEP_POLICY +SIZE_BYTES_DISPLAY +SIZE_FACTOR +SIZE_FOR_ESTIMATE +SIZE_IN_BLKS +SIZE_MB +SI_APPENDCLRHSTGR. +SI_ARRAYCLRHSTGR. +SI_AVERAGECOLOR.SI_AVERAGECOLOR +SI_AVERAGECOLOR.SI_SCORE +SI_CHGCONTENT. +SI_COLOR.SI_RGBCOLOR +SI_COLORHISTOGRAM.SI_APPEND +SI_COLORHISTOGRAM.SI_COLORHISTOGRAM +SI_COLORHISTOGRAM.SI_SCORE +SI_CONVERTFORMAT. +SI_FEATURELIST.SI_AVGCLRFTR +SI_FEATURELIST.SI_AVGCLRFTRWGHT +SI_FEATURELIST.SI_CLRHSTGRFTR +SI_FEATURELIST.SI_CLRHSTGRFTRWGHT +SI_FEATURELIST.SI_FEATURELIST +SI_FEATURELIST.SI_PSTNLCLRFTR +SI_FEATURELIST.SI_PSTNLCLRFTRWGHT +SI_FEATURELIST.SI_SCORE +SI_FEATURELIST.SI_SETFEATURE +SI_FEATURELIST.SI_TEXTUREFTR +SI_FEATURELIST.SI_TEXTUREFTRWGHT +SI_FINDAVGCLR. +SI_FINDCLRHSTGR. +SI_FINDPSTNLCLR. +SI_FINDTEXTURE. +SI_GETAVGCLRFTR. +SI_GETAVGCLRFTRW. +SI_GETCLRHSTGRFTR. +SI_GETCLRHSTGRFTRW. +SI_GETCONTENT. +SI_GETCONTENTLNGTH. +SI_GETFORMAT. +SI_GETHEIGHT. +SI_GETPSTNLCLRFTR. +SI_GETPSTNLCLRFTRW. +SI_GETSIZEDTHMBNL. +SI_GETTEXTUREFTR. +SI_GETTEXTUREFTRW. +SI_GETTHMBNL. +SI_GETWIDTH. +SI_MKAVGCLR. +SI_MKCLRHSTGR. +SI_MKFTRLIST. +SI_MKRGBCLR. +SI_MKSTILLIMAGE1. +SI_MKSTILLIMAGE2. +SI_POSITIONALCOLOR.SI_POSITIONALCOLOR +SI_POSITIONALCOLOR.SI_SCORE +SI_SCOREBYAVGCLR. +SI_SCOREBYCLRHSTGR. +SI_SCOREBYFTRLIST. +SI_SCOREBYPSTNLCLR. +SI_SCOREBYTEXTURE. +SI_SETAVGCLRFTR. +SI_SETCLRHSTGRFTR. +SI_SETPSTNLCLRFTR. +SI_SETTEXTUREFTR. +SI_STILLIMAGE.SI_CHANGEFORMAT +SI_STILLIMAGE.SI_CLEARFEATURES +SI_STILLIMAGE.SI_CONTENT +SI_STILLIMAGE.SI_CONTENTLENGTH +SI_STILLIMAGE.SI_FORMAT +SI_STILLIMAGE.SI_HEIGHT +SI_STILLIMAGE.SI_INITFEATURES +SI_STILLIMAGE.SI_RETAINFEATURES +SI_STILLIMAGE.SI_SETCONTENT +SI_STILLIMAGE.SI_STILLIMAGE +SI_STILLIMAGE.SI_THUMBNAIL +SI_STILLIMAGE.SI_WIDTH +SI_TEXTURE.SI_SCORE +SI_TEXTURE.SI_TEXTURE +SKIP +SKIP_CORRUPT +SKIP_EXT_OPTIMIZER +SKIP_IT +SKIP_PROXY +SKIP_UNQ_UNUSABLE_IDX +SKIP_WHEN_NULL +SLAVEOBJ_STATE +SLAVE_NAME +SLAVE_OBJECT_STATE +SLAVE_ORIGIN +SLAVE_OS_PROCESS_ID +SLAVE_PID +SLAVE_PROCESS_ID +SLAVE_QC_MISMATCH +SLAVE_STATE +SLEEP1 +SLEEP10 +SLEEP11 +SLEEP2 +SLEEP3 +SLEEP4 +SLEEP5 +SLEEP6 +SLEEP7 +SLEEP8 +SLEEP9 +SLEEPS +SLEEP_COUNT +SLEEP_TIMESTAMP +SLEN +SLOT0 +SLOT1 +SLOT10 +SLOT11 +SLOT12 +SLOT13 +SLOT14 +SLOT15 +SLOT16 +SLOT17 +SLOT18 +SLOT19 +SLOT2 +SLOT20 +SLOT21 +SLOT22 +SLOT23 +SLOT24 +SLOT3 +SLOT4 +SLOT5 +SLOT6 +SLOT7 +SLOT8 +SLOT9 +SLT +SLVID +SM$VERSION +SMALL_READS_AVG +SMALL_READS_SUM +SMALL_READS_SUMX2 +SMALL_READ_BYTES_AVG +SMALL_READ_BYTES_SUM +SMALL_READ_BYTES_SUMX2 +SMALL_READ_IOPS +SMALL_READ_LATENCY_AVG +SMALL_READ_LATENCY_SUM +SMALL_READ_LATENCY_SUMX2 +SMALL_READ_MBPS +SMALL_READ_MEGABYTES +SMALL_READ_REQS +SMALL_READ_REQUESTS +SMALL_READ_SERVICETIME +SMALL_SYNC_READ_LATENCY +SMALL_SYNC_READ_REQS +SMALL_WRITES_AVG +SMALL_WRITES_SUM +SMALL_WRITES_SUMX2 +SMALL_WRITE_BYTES_AVG +SMALL_WRITE_BYTES_SUM +SMALL_WRITE_BYTES_SUMX2 +SMALL_WRITE_IOPS +SMALL_WRITE_LATENCY_AVG +SMALL_WRITE_LATENCY_SUM +SMALL_WRITE_LATENCY_SUMX2 +SMALL_WRITE_MBPS +SMALL_WRITE_MEGABYTES +SMALL_WRITE_REQS +SMALL_WRITE_REQUESTS +SMALL_WRITE_SERVICETIME +SMNTPT +SMTP_ENABLED +SMU_ADDR +SNAPID +SNAPSHOT +SNAPSHOTBLKREAD +SNAPSHOTFILENAME +SNAPSHOTREQUEST +SNAPSHOT_ID +SNAPSHOT_INTERVAL +SNAPSHOT_MODE +SNAPSHOT_NAME +SNAPSHOT_PARENT_CON_ID +SNAPSHOT_SCN +SNAPSHOT_SITE +SNAPSHOT_TIME +SNAP_FLAG +SNAP_ID +SNAP_INTERVAL +SNAP_LEVEL +SNAP_NAME +SNAP_TIMEZONE +SND_PROXY +SND_Q_LEN +SND_Q_MAX +SND_Q_TM_BASE +SND_Q_TM_WRAP +SND_Q_TOT +SND_SEQ_NO +SODA_COLLECTION_T.CREATE_INDEX +SODA_COLLECTION_T.DROP_INDEX +SODA_COLLECTION_T.FIND +SODA_COLLECTION_T.FIND_ONE +SODA_COLLECTION_T.GET_DATA_GUIDE +SODA_COLLECTION_T.GET_METADATA +SODA_COLLECTION_T.GET_NAME +SODA_COLLECTION_T.INSERT_MANY +SODA_COLLECTION_T.INSERT_ONE +SODA_COLLECTION_T.INSERT_ONE_AND_GET +SODA_COLLECTION_T.REMOVE_ONE +SODA_COLLECTION_T.REPLACE_ONE +SODA_COLLECTION_T.REPLACE_ONE_AND_GET +SODA_CURSOR_T.CLOSE +SODA_CURSOR_T.HAS_NEXT +SODA_CURSOR_T.NEXT +SODA_DOCUMENT_T.GET_BLOB +SODA_DOCUMENT_T.GET_CLOB +SODA_DOCUMENT_T.GET_CREATED_ON +SODA_DOCUMENT_T.GET_DATA_TYPE +SODA_DOCUMENT_T.GET_KEY +SODA_DOCUMENT_T.GET_LAST_MODIFIED +SODA_DOCUMENT_T.GET_MEDIA_TYPE +SODA_DOCUMENT_T.GET_VARCHAR2 +SODA_DOCUMENT_T.GET_VERSION +SODA_DOCUMENT_T.SODA_DOCUMENT_T +SODA_OPERATION_T.COUNT +SODA_OPERATION_T.FILTER +SODA_OPERATION_T.GET_CURSOR +SODA_OPERATION_T.GET_ONE +SODA_OPERATION_T.KEY +SODA_OPERATION_T.KEYS +SODA_OPERATION_T.LIMIT +SODA_OPERATION_T.REMOVE +SODA_OPERATION_T.REPLACE_ONE +SODA_OPERATION_T.REPLACE_ONE_AND_GET +SODA_OPERATION_T.SKIP +SODA_OPERATION_T.VERSION +SOFAR +SOFTWARE_VERSION +SOFT_PARSES +SORTS +SORTS_DELTA +SORTS_TOTAL +SORT_ORDER +SOSID +SOURCE +SOURCE_BUILD_DESCRIPTION +SOURCE_BUILD_TIMESTAMP +SOURCE_COMMIT_POSITION +SOURCE_COMMIT_SCN +SOURCE_COMPONENT_DB +SOURCE_COMPONENT_ID +SOURCE_COMPONENT_NAME +SOURCE_COMPONENT_TYPE +SOURCE_CONTAINER_NAME +SOURCE_DATABASE +SOURCE_DATABASE_NAME +SOURCE_DBID +SOURCE_DB_UNIQUE_NAME +SOURCE_END_TIME +SOURCE_GLOBAL_NAME +SOURCE_ID +SOURCE_INSTANCE_ID +SOURCE_INSTANCE_NAME +SOURCE_INSTANCE_START_TIME +SOURCE_NAME +SOURCE_OBJECT_NAME +SOURCE_OBJECT_OWNER +SOURCE_OBJECT_TYPE +SOURCE_PACKAGE_NAME +SOURCE_QUEUE_NAME +SOURCE_QUEUE_OWNER +SOURCE_RESETLOGS_SCN +SOURCE_RESETLOGS_TIME +SOURCE_ROOT_NAME +SOURCE_SCHEMA +SOURCE_SCHEMA_NAME +SOURCE_SERIAL# +SOURCE_SID +SOURCE_SIZE +SOURCE_START_TIME +SOURCE_STATE +SOURCE_STMT +SOURCE_TABLE_NAME +SOURCE_TABLE_OWNER +SOURCE_TRANSACTION_ID +SOURCE_TXN_ID +SOURCE_TYPE +SOURCE_USER_NAME +SOURCE_VERSION +SPACE +SPACE_ALLOCATED_DELTA +SPACE_ALLOCATED_TOTAL +SPACE_ERROR_INFO. +SPACE_HEADER +SPACE_LIMIT +SPACE_OVERHEAD +SPACE_RECLAIMABLE +SPACE_UNUSED +SPACE_USAGE_KBYTES +SPACE_USED +SPACE_USED_DELTA +SPACE_USED_TOTAL +SPARE +SPARE_ID +SPARE_UB8 +SPARQL_GROUPCONCAT. +SPARQL_GROUPCONCAT_VC. +SPARQL_GROUP_CONCAT.ODCIAGGREGATEINITIALIZE +SPARQL_GROUP_CONCAT.ODCIAGGREGATEITERATE +SPARQL_GROUP_CONCAT.ODCIAGGREGATEMERGE +SPARQL_GROUP_CONCAT.ODCIAGGREGATETERMINATE +SPARQL_GROUP_CONCAT_VC.EXTRACTDELIM +SPARQL_GROUP_CONCAT_VC.EXTRACTTERM +SPARQL_GROUP_CONCAT_VC.ODCIAGGREGATEINITIALIZE +SPARQL_GROUP_CONCAT_VC.ODCIAGGREGATEITERATE +SPARQL_GROUP_CONCAT_VC.ODCIAGGREGATEMERGE +SPARQL_GROUP_CONCAT_VC.ODCIAGGREGATETERMINATE +SPARQL_MAX.ODCIAGGREGATEINITIALIZE +SPARQL_MAX.ODCIAGGREGATEITERATE +SPARQL_MAX.ODCIAGGREGATEMERGE +SPARQL_MAX.ODCIAGGREGATETERMINATE +SPARQL_MAXAGG. +SPARQL_MAXAGG_VC. +SPARQL_MAX_VC.ODCIAGGREGATEINITIALIZE +SPARQL_MAX_VC.ODCIAGGREGATEITERATE +SPARQL_MAX_VC.ODCIAGGREGATEMERGE +SPARQL_MAX_VC.ODCIAGGREGATETERMINATE +SPARQL_MIN.ODCIAGGREGATEINITIALIZE +SPARQL_MIN.ODCIAGGREGATEITERATE +SPARQL_MIN.ODCIAGGREGATEMERGE +SPARQL_MIN.ODCIAGGREGATETERMINATE +SPARQL_MINAGG. +SPARQL_MINAGG_VC. +SPARQL_MIN_VC.ODCIAGGREGATEINITIALIZE +SPARQL_MIN_VC.ODCIAGGREGATEITERATE +SPARQL_MIN_VC.ODCIAGGREGATEMERGE +SPARQL_MIN_VC.ODCIAGGREGATETERMINATE +SPARQL_SAMPLE.ODCIAGGREGATEINITIALIZE +SPARQL_SAMPLE.ODCIAGGREGATEITERATE +SPARQL_SAMPLE.ODCIAGGREGATEMERGE +SPARQL_SAMPLE.ODCIAGGREGATETERMINATE +SPARQL_SAMPLEAGG. +SPARQL_SAMPLEAGG_VC. +SPARQL_SAMPLE_VC.ODCIAGGREGATEINITIALIZE +SPARQL_SAMPLE_VC.ODCIAGGREGATEITERATE +SPARQL_SAMPLE_VC.ODCIAGGREGATEMERGE +SPARQL_SAMPLE_VC.ODCIAGGREGATETERMINATE +SPARQL_SERVICE. +SPARQL_SERVICE_IMPL_T.CANONICALIZE +SPARQL_SERVICE_IMPL_T.CHECKESCAPE +SPARQL_SERVICE_IMPL_T.CHECKLITLEN +SPARQL_SERVICE_IMPL_T.GETNEWREQUEST +SPARQL_SERVICE_IMPL_T.GETNEXTFILTER +SPARQL_SERVICE_IMPL_T.ODCITABLECLOSE +SPARQL_SERVICE_IMPL_T.ODCITABLEDESCRIBE +SPARQL_SERVICE_IMPL_T.ODCITABLEFETCH +SPARQL_SERVICE_IMPL_T.ODCITABLEPREPARE +SPARQL_SERVICE_IMPL_T.ODCITABLESTART +SPARQL_SERVICE_IMPL_T.READNEXTCHUNK +SPARQL_SERVICE_IMPL_T.TRIMESCCHARS +SPARSE_BACKUP +SPARSE_BYTES_READ +SPARSE_READS +SPARSE_READ_TIME +SPARSE_TYPE +SPCLUSTERS. +SPID +SPILLED_LCR_COUNT +SPILL_CREATION_TIME +SPILL_LWM_POSITION +SPILL_LWM_SCN +SPILL_MESSAGE_NUMBER +SPILL_MSGS +SPILL_POSITION +SPILL_SCN +SPIN_GETS +SPLIT +SPRECO +SQLADDR +SQLHASH +SQLID +SQLJUTL. +SQLJUTL.BOOL2INT +SQLJUTL.CHAR2IDS +SQLJUTL.CHAR2IYM +SQLJUTL.GET_TYPECODE +SQLJUTL.HAS_DEFAULT +SQLJUTL.IDS2CHAR +SQLJUTL.INT2BOOL +SQLJUTL.IYM2CHAR +SQLJUTL.URI2VCHAR +SQLLDR +SQLSET_ID +SQLSET_NAME +SQLSET_OWNER +SQLSET_ROW.SQLSET_ROW +SQLTYPE +SQL_ADAPTIVE_PLAN_RESOLVED +SQL_ADDRESS +SQL_BIND +SQL_BINDS +SQL_BUILTIN +SQL_CANCELED +SQL_CHILD_ADDRESS +SQL_CHILD_NUMBER +SQL_COL_TYPE +SQL_CONNECTION_TEST +SQL_CUBE_STORAGE_TYPE +SQL_DIAG_REPO_ID +SQL_ELAPSED_TIME +SQL_EVALUATIONS +SQL_EXECUTIONS +SQL_EXEC_ID +SQL_EXEC_START +SQL_EXPRESSION +SQL_FEATURE +SQL_FREE_EVALUATIONS +SQL_FULLTEXT +SQL_FULL_PLAN_HASH_VALUE +SQL_HANDLE +SQL_HASH +SQL_HASH_VALUE +SQL_ID +SQL_ID_NUMBER +SQL_ID_TEMPSEG +SQL_INLINE +SQL_LENGTH +SQL_NAME +SQL_OPCODE +SQL_OPNAME +SQL_PATCH +SQL_PLAN_ALLSTAT_ROW_TYPE.SQL_PLAN_ALLSTAT_ROW_TYPE +SQL_PLAN_BASELINE +SQL_PLAN_HASH_VALUE +SQL_PLAN_LINE_ID +SQL_PLAN_OPERATION +SQL_PLAN_OPTIONS +SQL_PROFILE +SQL_REDO +SQL_SCHEMA +SQL_SCOPE +SQL_SEQ +SQL_STMT +SQL_TEXT +SQL_TEXT_COMPLETE +SQL_TEXT_PIECE +SQL_TRACE +SQL_TRACE_BINDS +SQL_TRACE_PLAN_STATS +SQL_TRACE_WAITS +SQL_TRANSLATION_PROFILE +SQL_TRANSLATION_PROFILE_ID +SQL_TUNE_ADVISOR +SQL_TXT. +SQL_TYPE +SQL_TYPE_MISMATCH +SQL_UNDO +SRC_CON_DBID +SRC_CON_GUID +SRC_CON_ID +SRC_CON_NAME +SRC_CON_UID +SRC_DBID +SRC_DBNAME +SRC_INCIDENT +SRC_INCIDENT_ID +SRC_QUEUE_NAME +SRC_QUEUE_SCHEMA +SRL +SRV_BUSY +SRV_BYTES +SRV_IDLE +SRV_IN_NET +SRV_MESSAGES +SRV_OUT_NET +SSN +SSOLDERRCNT +SSVCNAME +SSX_2_X +SS_2_NULL +SS_2_RLS +STACK_VARRAY_TO_CLOB. +STAGE +STAGING_LOG +STAGING_LOG_NAME +STALE +STALENESS +STALE_SINCE +STALE_STATS +STAMP +STANDARD. +STANDARD. SYS$DSINTERVALSUBTRACT +STANDARD. SYS$EXTRACT_FROM +STANDARD. SYS$EXTRACT_STRING_FROM +STANDARD. SYS$STANDARD_CHR +STANDARD. SYS$STANDARD_JSON +STANDARD. SYS$STANDARD_TRANSLATE +STANDARD. SYS$STANDARD_TRIM +STANDARD. SYS$YMINTERVALSUBTRACT +STANDARD.ABS +STANDARD.ACOS +STANDARD.ADD_MONTHS +STANDARD.ASCII +STANDARD.ASCIISTR +STANDARD.ASIN +STANDARD.ATAN +STANDARD.ATAN2 +STANDARD.BFILENAME +STANDARD.BITAND +STANDARD.CARDINALITY +STANDARD.CEIL +STANDARD.CHARTOROWID +STANDARD.CHR +STANDARD.COALESCE +STANDARD.COMMIT +STANDARD.COMMIT_CM +STANDARD.COMPOSE +STANDARD.CONCAT +STANDARD.CONTINUE +STANDARD.CONVERT +STANDARD.COS +STANDARD.COSH +STANDARD.CUBE +STANDARD.CURRENT_DATE +STANDARD.CURRENT_TIME +STANDARD.CURRENT_TIMESTAMP +STANDARD.DBTIMEZONE +STANDARD.DECODE +STANDARD.DECOMPOSE +STANDARD.DEREF +STANDARD.DUMP +STANDARD.EMPTY_BLOB +STANDARD.EMPTY_CLOB +STANDARD.EXISTS +STANDARD.EXP +STANDARD.FLOOR +STANDARD.FROM_TZ +STANDARD.GLB +STANDARD.GREATEST +STANDARD.GREATEST_LB +STANDARD.GROUPING +STANDARD.HEXTORAW +STANDARD.INITCAP +STANDARD.INSTR +STANDARD.INSTR2 +STANDARD.INSTR4 +STANDARD.INSTRB +STANDARD.INSTRC +STANDARD.ISNCHAR +STANDARD.LAST_DAY +STANDARD.LEAST +STANDARD.LEAST_UB +STANDARD.LENGTH +STANDARD.LENGTH2 +STANDARD.LENGTH4 +STANDARD.LENGTHB +STANDARD.LENGTHC +STANDARD.LEVEL +STANDARD.LN +STANDARD.LOCALTIME +STANDARD.LOCALTIMESTAMP +STANDARD.LOG +STANDARD.LOWER +STANDARD.LPAD +STANDARD.LTRIM +STANDARD.LUB +STANDARD.MONTHS_BETWEEN +STANDARD.NANVL +STANDARD.NCHARTOROWID +STANDARD.NCHR +STANDARD.NEW_TIME +STANDARD.NEXT_DAY +STANDARD.NHEXTORAW +STANDARD.NLSSORT +STANDARD.NLS_CHARSET_DECL_LEN +STANDARD.NLS_CHARSET_ID +STANDARD.NLS_CHARSET_NAME +STANDARD.NLS_INITCAP +STANDARD.NLS_LOWER +STANDARD.NLS_UPPER +STANDARD.NULLFN +STANDARD.NULLIF +STANDARD.NUMTODSINTERVAL +STANDARD.NUMTOYMINTERVAL +STANDARD.NVL +STANDARD.POWER +STANDARD.RAWTOHEX +STANDARD.RAWTONHEX +STANDARD.REF +STANDARD.REGEXP_COUNT +STANDARD.REGEXP_INSTR +STANDARD.REGEXP_LIKE +STANDARD.REGEXP_REPLACE +STANDARD.REGEXP_SUBSTR +STANDARD.REMAINDER +STANDARD.REPLACE +STANDARD.ROLLBACK_NR +STANDARD.ROLLBACK_SV +STANDARD.ROLLUP +STANDARD.ROUND +STANDARD.ROWID +STANDARD.ROWIDTOCHAR +STANDARD.ROWIDTONCHAR +STANDARD.ROWLABEL +STANDARD.ROWNUM +STANDARD.RPAD +STANDARD.RTRIM +STANDARD.SAVEPOINT +STANDARD.SESSIONTIMEZONE +STANDARD.SET +STANDARD.SET_TRANSACTION_USE +STANDARD.SIGN +STANDARD.SIN +STANDARD.SINH +STANDARD.SOUNDEX +STANDARD.SQLCODE +STANDARD.SQLERRM +STANDARD.SQRT +STANDARD.SUBSTR +STANDARD.SUBSTR2 +STANDARD.SUBSTR4 +STANDARD.SUBSTRB +STANDARD.SUBSTRC +STANDARD.SYS$LOB_REPLICATION +STANDARD.SYSDATE +STANDARD.SYSTIMESTAMP +STANDARD.SYS_AT_TIME_ZONE +STANDARD.SYS_CONTEXT +STANDARD.SYS_EXTRACT_UTC +STANDARD.SYS_GUID +STANDARD.SYS_LITERALTODATE +STANDARD.SYS_LITERALTODSINTERVAL +STANDARD.SYS_LITERALTOTIME +STANDARD.SYS_LITERALTOTIMESTAMP +STANDARD.SYS_LITERALTOTZTIME +STANDARD.SYS_LITERALTOTZTIMESTAMP +STANDARD.SYS_LITERALTOYMINTERVAL +STANDARD.TAN +STANDARD.TANH +STANDARD.TO_ANYLOB +STANDARD.TO_BINARY_DOUBLE +STANDARD.TO_BINARY_FLOAT +STANDARD.TO_BLOB +STANDARD.TO_CHAR +STANDARD.TO_CLOB +STANDARD.TO_DATE +STANDARD.TO_DSINTERVAL +STANDARD.TO_LABEL +STANDARD.TO_MULTI_BYTE +STANDARD.TO_NCHAR +STANDARD.TO_NCLOB +STANDARD.TO_NUMBER +STANDARD.TO_RAW +STANDARD.TO_SINGLE_BYTE +STANDARD.TO_TIME +STANDARD.TO_TIMESTAMP +STANDARD.TO_TIMESTAMP_TZ +STANDARD.TO_TIME_TZ +STANDARD.TO_YMINTERVAL +STANDARD.TRANSLATE +STANDARD.TRIM +STANDARD.TRUNC +STANDARD.TZ_OFFSET +STANDARD.UID +STANDARD.UNISTR +STANDARD.UPPER +STANDARD.UROWID +STANDARD.USER +STANDARD.USERENV +STANDARD.VALUE +STANDARD.VSIZE +STANDARD.XOR +STANDARD_DEVIATION +STANDBY_BECAME_PRIMARY_SCN +STANDBY_DEST +STANDBY_LOGFILE_ACTIVE +STANDBY_LOGFILE_COUNT +STAR +STARTDBA +STARTOFFSET +STARTS +STARTTIME +STARTUP +STARTUP_TIME +STARTUP_TIME_TZ +START_CODE +START_DATE +START_DBA +START_DELAY_SECS +START_ID +START_MONITORING +START_ROWID +START_SCN +START_SCNB +START_SCNW +START_SNAP_ID +START_SNAP_TIME +START_SUBSHARD_ID +START_TIME +START_TIMESTAMP +START_TS +START_UBABLK +START_UBAFIL +START_UBAREC +START_UBASQN +START_UEXT +START_WITH +STAR_TRANSFORMATION +STATE +STATEFUL +STATELESS +STATEMENT +STATEMENTID +STATEMENT_COUNT +STATEMENT_ID +STATEMENT_OPT +STATEMENT_QUEUING +STATEMENT_SCN +STATEMENT_TYPE +STATE_CHANGED_TIME +STATE_TRANSITION_NUMBER +STATIC +STATIC_FIELDS +STATIC_METHODS +STATIC_POLICY +STATISTIC +STATISTIC# +STATISTICS +STATISTICS_NAME +STATISTICS_TYPE +STATISTICS_VALUE +STATISTICS_VIEW_NAME +STATISTIC_NAME +STATISTIC_TIME +STATISTIC_UNIT +STATISTIC_VALUE +STATISTIC_VALUE_INT +STATISTIC_VALUE_STR +STATSTYPE_NAME +STATSTYPE_SCHEMA +STATS_ROW_MISMATCH +STATS_UPDATE_TIME +STATTYPE_LOCKED +STATUS +STATUS# +STATUS_CHANGE_TIME +STATUS_CODE +STATUS_MESSAGE +STATUS_MSG +STATUS_QUEUE +STATUS_STR +STATUS_UPDATE_TIME +STATUS_WEIGHT +STAT_ID +STAT_NAME +STAT_PERIOD +STAT_TYPE +STAT_VAL_INT +STAT_VAL_STR +STB_OBJECT_MISMATCH +STEADY_STATE_DURATION +STEP +STEP_ID +STEP_JOB_LOG_ID +STEP_JOB_SUBNAME +STEP_NAME +STEP_NUMBER +STEP_TYPE +STID +STMT +STMT_ID +STOP_ON_WINDOW_CLOSE +STOP_OPTION +STOP_REPLAY +STOP_STATE +STORAGE_SIZE +STORAGE_SPEC +STORAGE_TYPE +STORECOMMAND +STOREFLAGS +STORENAME +STOREOWNER +STORE_NAME +STORE_OUTPUT +STORE_OWNER +STRAGG. +STREAMS +STREAMS_NAME +STREAMS_POOL_SIZE_FACTOR +STREAMS_POOL_SIZE_FOR_ESTIMATE +STREAMS_RULE_TYPE +STREAMS_TYPE +STREAM_ID +STREAM_SEQUENCE# +STRIDE +STRING_AGG_TYPE.ODCIAGGREGATEINITIALIZE +STRING_AGG_TYPE.ODCIAGGREGATEITERATE +STRING_AGG_TYPE.ODCIAGGREGATEMERGE +STRING_AGG_TYPE.ODCIAGGREGATETERMINATE +STRING_TO_GRANTPATH. +STRIPE +STRIPED +STRIPE_COLUMNS +STRIPE_SIZE +STRIPE_WIDTH_K +STRP_BLK_ID +STRP_CTRL_ID +STRUCTURE +ST_ANNOTATIONTEXTELEMENT.LEADERLINE +ST_ANNOTATIONTEXTELEMENT.LOCATION +ST_ANNOTATIONTEXTELEMENT.TEXTATTRIBUTES +ST_ANNOTATIONTEXTELEMENT.VALUE +ST_ANNOTATIONTEXTELEMENT_ARRAY.ELEMENTN +ST_ANNOTATION_TEXT.CONCAT +ST_ANNOTATION_TEXT.ELEMENT_ARRAY +ST_ANNOTATION_TEXT.ENVELOPE +ST_ANNOTATION_TEXT.ST_ANNOTATION_TEXT +ST_CIRCULARSTRING.ST_CIRCULARSTRING +ST_CIRCULARSTRING.ST_POINTS +ST_COMPOUNDCURVE.ST_COMPOUNDCURVE +ST_COMPOUNDCURVE.ST_CURVEN +ST_COMPOUNDCURVE.ST_CURVES +ST_COMPOUNDCURVE.ST_NUMCURVES +ST_CURVE.ST_DIMENSION +ST_CURVE.ST_ENDPOINT +ST_CURVE.ST_ISCLOSED +ST_CURVE.ST_ISRING +ST_CURVE.ST_ISSIMPLE +ST_CURVE.ST_LENGTH +ST_CURVE.ST_MIDPOINTREP +ST_CURVE.ST_NUMPOINTS +ST_CURVE.ST_POINTN +ST_CURVE.ST_POINTS +ST_CURVE.ST_STARTPOINT +ST_CURVEPOLYGON.ST_CURVEPOLYGON +ST_CURVEPOLYGON.ST_EXTERIORRING +ST_CURVEPOLYGON.ST_INTERIORRINGN +ST_CURVEPOLYGON.ST_INTERIORRINGS +ST_CURVEPOLYGON.ST_NUMINTERIORRING +ST_GEOMCOLLECTION.ST_DIMENSION +ST_GEOMCOLLECTION.ST_GEOMCOLLECTION +ST_GEOMCOLLECTION.ST_GEOMETRIES +ST_GEOMETRY.FROM_SDO_GEOM +ST_GEOMETRY.FROM_WKB +ST_GEOMETRY.FROM_WKT +ST_GEOMETRY.GET_SDO_GEOM +ST_GEOMETRY.GET_WKB +ST_GEOMETRY.GET_WKT +ST_GEOMETRY.ST_ASBINARY +ST_GEOMETRY.ST_ASTEXT +ST_GEOMETRY.ST_BOUNDARY +ST_GEOMETRY.ST_BUFFER +ST_GEOMETRY.ST_CENTROID +ST_GEOMETRY.ST_CONTAINS +ST_GEOMETRY.ST_CONVEXHULL +ST_GEOMETRY.ST_COORDDIM +ST_GEOMETRY.ST_CROSS +ST_GEOMETRY.ST_CROSSES +ST_GEOMETRY.ST_DIFFERENCE +ST_GEOMETRY.ST_DIMENSION +ST_GEOMETRY.ST_DISJOINT +ST_GEOMETRY.ST_DISTANCE +ST_GEOMETRY.ST_ENVELOPE +ST_GEOMETRY.ST_EQUALS +ST_GEOMETRY.ST_GEOMETRYTYPE +ST_GEOMETRY.ST_GEOMFROMTEXT +ST_GEOMETRY.ST_GEOMFROMWKB +ST_GEOMETRY.ST_GETTOLERANCE +ST_GEOMETRY.ST_INTERSECTION +ST_GEOMETRY.ST_INTERSECTS +ST_GEOMETRY.ST_ISEMPTY +ST_GEOMETRY.ST_ISSIMPLE +ST_GEOMETRY.ST_ISVALID +ST_GEOMETRY.ST_OVERLAP +ST_GEOMETRY.ST_RELATE +ST_GEOMETRY.ST_SRID +ST_GEOMETRY.ST_SYMDIFFERENCE +ST_GEOMETRY.ST_SYMMETRICDIFFERENCE +ST_GEOMETRY.ST_TOUCH +ST_GEOMETRY.ST_TOUCHES +ST_GEOMETRY.ST_UNION +ST_GEOMETRY.ST_WITHIN +ST_LINESTRING.ST_ISSIMPLE +ST_LINESTRING.ST_LINESTRING +ST_LINESTRING.ST_POINTS +ST_MULTICURVE.ST_DIMENSION +ST_MULTICURVE.ST_ISCLOSED +ST_MULTICURVE.ST_ISSIMPLE +ST_MULTICURVE.ST_LENGTH +ST_MULTICURVE.ST_MULTICURVE +ST_MULTILINESTRING.ST_MULTILINESTRING +ST_MULTIPOINT.ST_DIMENSION +ST_MULTIPOINT.ST_ISSIMPLE +ST_MULTIPOINT.ST_MULTIPOINT +ST_MULTIPOLYGON.ST_BDMPOLYFROMTEXT +ST_MULTIPOLYGON.ST_BDMPOLYFROMWKB +ST_MULTIPOLYGON.ST_MULTIPOLYGON +ST_MULTISURFACE.ST_AREA +ST_MULTISURFACE.ST_DIMENSION +ST_MULTISURFACE.ST_MULTISURFACE +ST_MULTISURFACE.ST_POINTONSURFACE +ST_POINT.ST_DIMENSION +ST_POINT.ST_EXPLICITPOINT +ST_POINT.ST_POINT +ST_POINT.ST_X +ST_POINT.ST_Y +ST_POLYGON.ST_BDPOLYFROMTEXT +ST_POLYGON.ST_BDPOLYFROMWKB +ST_POLYGON.ST_EXTERIORRING +ST_POLYGON.ST_INTERIORRINGN +ST_POLYGON.ST_INTERIORRINGSP +ST_POLYGON.ST_POLYGON +ST_SURFACE.ST_AREA +ST_SURFACE.ST_DIMENSION +ST_SURFACE.ST_POINTONSURFACE +SUBCACHE# +SUBCACHE_NAME +SUBHEAP_DESC +SUBJECT +SUBMIT_FILEWATCH_RESULTS. +SUBMIT_JOB_RESULTS. +SUBMIT_JOB_RESULTS2. +SUBNAME +SUBOBJECT_NAME +SUBOPERATION +SUBORDINATE# +SUBPARTITIONING_KEY_COUNT +SUBPARTITIONING_TYPE +SUBPARTITION_COUNT +SUBPARTITION_NAME +SUBPARTITION_POSITION +SUBPOLICY# +SUBPROGRAM_ID +SUBPTXT. +SUBPTXT2. +SUBQUERY_PRUNING +SUBSCRIBER_ADDRESS +SUBSCRIBER_ID +SUBSCRIBER_NAME +SUBSCRIBER_TYPE +SUBSCRIPTION +SUBSCRIPTION_NAME +SUBSETTING_OPERATION +SUBSHARD +SUBSHARD_ID +SUBSTITUTABLE +SUB_COMPONENT_TYPE +SUB_FLAGS +SUB_NUM +SUB_PARTITION_LEVEL_NAME +SUB_PARTITION_LEVEL_ORDER +SUB_PLAN +SUB_POLICY +SUB_SIZE +SUCCESS +SUCC_REQ# +SUGGESTED_ACTION +SUMMARY +SUMMARY_ID +SUMMARY_NAME +SUM_CPU_TIME +SUM_SCAN +SUM_SQUARES +SUM_SYS_IO_WAIT +SUM_USER_IO_WAIT +SUM_WRITE +SUPER +SUPERTYPE_NAME +SUPERTYPE_OWNER +SUPERVIEW_NAME +SUPPLEMENTAL_ATTRIBUTES +SUPPLEMENTAL_DETAILS +SUPPLEMENTAL_LOG_DATA_ALL +SUPPLEMENTAL_LOG_DATA_FK +SUPPLEMENTAL_LOG_DATA_MIN +SUPPLEMENTAL_LOG_DATA_PK +SUPPLEMENTAL_LOG_DATA_PL +SUPPLEMENTAL_LOG_DATA_UI +SUPPORTED_LEVEL +SUPPORTED_MODE +SUPPORT_LEVEL +SUPPORT_MODE +SUPPRESS_LOAD +SUSPECT +SUSPECT_COMPONENT +SUSPECT_SUBCOMPONENT +SUSPEND_TIME +SVRNAME +SVR_ID +SWAP_JOIN_INPUTS +SWEEP_TIME +SWITCHES_IN_CPU_TIME +SWITCHES_IN_ELAPSED_TIME +SWITCHES_IN_IO_LOGICAL +SWITCHES_IN_IO_MEGABYTES +SWITCHES_IN_IO_REQUESTS +SWITCHES_OUT_CPU_TIME +SWITCHES_OUT_ELAPSED_TIME +SWITCHES_OUT_IO_LOGICAL +SWITCHES_OUT_IO_MEGABYTES +SWITCHES_OUT_IO_REQUESTS +SWITCHOVER# +SWITCHOVER_STATUS +SWITCH_CHANGE# +SWITCH_ELAPSED_TIME +SWITCH_ESTIMATE +SWITCH_FOR_CALL +SWITCH_GROUP +SWITCH_IO_LOGICAL +SWITCH_IO_MEGABYTES +SWITCH_IO_REQS +SWITCH_TIME +SWITCH_TIME_IN_CALL +SYN +SYNCHRONIZATION +SYNCHRONIZATION_STATUS +SYNCHRONIZED +SYNCRN. +SYNC_CAPTURE_REASON +SYNC_CAPTURE_VERSION +SYNC_TIME +SYNONYM_NAME +SYS$RAWTOANY. +SYSASM +SYSBACKUP +SYSDATE_VALUE +SYSDATE_VALUES_CAPTURED +SYSDATE_VALUES_REPLAYED +SYSDBA +SYSDG +SYSDGAGGIMP.ODCIAGGREGATEINITIALIZE +SYSDGAGGIMP.ODCIAGGREGATEITERATE +SYSDGAGGIMP.ODCIAGGREGATEMERGE +SYSDGAGGIMP.ODCIAGGREGATETERMINATE +SYSDGAGGIMP.ODCIAGGREGATEWRAPCONTEXT +SYSEVENT. +SYSGUID_VALUE +SYSGUID_VALUES_CAPTURED +SYSGUID_VALUES_REPLAYED +SYSHIERDGAGGIMP.ODCIAGGREGATEINITIALIZE +SYSHIERDGAGGIMP.ODCIAGGREGATEITERATE +SYSHIERDGAGGIMP.ODCIAGGREGATEMERGE +SYSHIERDGAGGIMP.ODCIAGGREGATETERMINATE +SYSHIERDGAGGIMP.ODCIAGGREGATEWRAPCONTEXT +SYSKM +SYSLSBY_EDS_DDL_TRIG. +SYSOPER +SYSTEM +SYSTEM_CREATED +SYSTEM_DEFINED +SYSTEM_PRIVILEGE +SYSTEM_PRIVILEGE_USED +SYSTEM_STATS +SYSTEM_STATUS +SYSTEM_TASK +SYSTIMESTAMP_VALUE +SYSTIMESTAMP_VALUES_CAPTURED +SYSTIMESTAMP_VALUES_REPLAYED +SYS_DGAGG. +SYS_DL_CURSOR +SYS_HIERDGAGG. +SYS_IXMLAGG. +SYS_IXQAGG. +SYS_IXQAGGAVG. +SYS_IXQAGGSUM. +SYS_NT_COLLECT. +SYS_NT_COLLECT_IMP.ODCIAGGREGATEINITIALIZE +SYS_NT_COLLECT_IMP.ODCIAGGREGATEITERATE +SYS_NT_COLLECT_IMP.ODCIAGGREGATEMERGE +SYS_NT_COLLECT_IMP.ODCIAGGREGATETERMINATE +SYS_PARALLEL_TXN +SYS_PRIV +SYS_PRIVILEGE +SYS_RID_ORDER +SYS_STUB_FOR_PURITY_ANALYSIS. +SYS_STUB_FOR_PURITY_ANALYSIS.PRDS +SYS_STUB_FOR_PURITY_ANALYSIS.PRPS +SYS_STUB_FOR_PURITY_ANALYSIS.PWDS +SYS_STUB_FOR_PURITY_ANALYSIS.PWPS +SYS_USAGE_AVG +SYS_USAGE_SUM +SYS_USAGE_SUMX2 +SYS_XMLAGG. +S_2_NULL +S_2_NULL_FORCED_STALE +S_2_X +TAB1_COLUMN +TAB1_NAME +TAB1_OWNER +TAB2_COLUMN +TAB2_NAME +TAB2_OWNER +TABLEOBJ# +TABLESPACE +TABLESPACE_ID +TABLESPACE_MAXSIZE +TABLESPACE_NAME +TABLESPACE_NUMBER +TABLESPACE_PROCESSED +TABLESPACE_SELECTED +TABLESPACE_SIZE +TABLESPACE_USEDSIZE +TABLE_ALIAS +TABLE_COLUMN_ID +TABLE_COLUMN_NAME +TABLE_CRT_SCN +TABLE_CRT_TIME +TABLE_ID +TABLE_LOCK +TABLE_LOOKUP_BY_NL +TABLE_NAME +TABLE_NUM +TABLE_OBJN +TABLE_OWNER +TABLE_PRIVILEGES +TABLE_SCANS_DELTA +TABLE_SCANS_TOTAL +TABLE_SCHEMA +TABLE_SEQUENCE +TABLE_SPACE +TABLE_STATS +TABLE_TYPE +TABLE_TYPE_NAME +TABLE_TYPE_OWNER +TABLE_VERSION +TABNAME +TABS +TAB_COLUMN_NAME +TAB_NAME +TADDR +TAG +TAGS +TAG_NAME +TAKE_BEGIN_SNAPSHOT +TAKE_END_SNAPSHOT +TALLOC +TARBALLID +TARENDOFFSET +TARGET +TARGETINFO_ID +TARGET_AUDIT_SIZE +TARGET_BUFFERS +TARGET_BUILD_DESCRIPTION +TARGET_BUILD_TIMESTAMP +TARGET_DESC +TARGET_DIMENSION_NAME +TARGET_HOST +TARGET_ID +TARGET_INSTANCE +TARGET_INSTANCE_NUMBER +TARGET_LEVEL +TARGET_MTTR +TARGET_NAMESPACE +TARGET_OBJN +TARGET_PORT +TARGET_REDO_BLKS +TARGET_ROLE +TARGET_SERVICE +TARGET_SIZE +TARGET_TYPE +TARGET_USER +TARGET_USER_TYPE +TARGET_VERSION +TARSTARTOFFSET +TASK_COMMENT +TASK_CON_DBID +TASK_DONE +TASK_EXEC_NAME +TASK_EXPIRY_TIME +TASK_FND_ID +TASK_ID +TASK_NAME +TASK_NUMBER +TASK_OBJ_ID +TASK_OPERATION +TASK_OWNER +TASK_PRIORITY +TASK_READY_TIME +TASK_REC_ID +TASK_START_TIME +TASK_STATUS +TASK_SUBMIT_TIME +TASK_TARGET_NAME +TASK_TARGET_TYPE +TASK_TIME +TASK_TYPE +TBLCONTAINSADT. +TBL_NAME +TBL_OWNER +TBS_ID +TBS_INHERITED_FROM +TCKT_AVAIL +TCKT_LIMIT +TCKT_RCVD +TCKT_WAIT +TEMP +TEMPERATURE +TEMPLATE +TEMPLATE_ID +TEMPLATE_NAME +TEMPLATE_TYPE +TEMPORARY +TEMPORARY_TABLESPACE +TEMPSEG_SIZE +TEMP_SPACE +TEMP_SPACE_ALLOCATED +TEMP_SPACE_PAGES +TEMP_SPACE_READS +TENANT_ID +TERMINAL +TERMINAL_RELEASE +TERM_INDEX +TESTEXEC_FIRST_EXEC_IGNORED +TESTEXEC_TOTAL_EXECS +TEXT +TEXTINDEXMETHODS.ODCIGETINTERFACES +TEXTINDEXMETHODS.ODCIINDEXALTER +TEXTINDEXMETHODS.ODCIINDEXCLOSE +TEXTINDEXMETHODS.ODCIINDEXCREATE +TEXTINDEXMETHODS.ODCIINDEXDELETE +TEXTINDEXMETHODS.ODCIINDEXDROP +TEXTINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +TEXTINDEXMETHODS.ODCIINDEXFETCH +TEXTINDEXMETHODS.ODCIINDEXGETMETADATA +TEXTINDEXMETHODS.ODCIINDEXINSERT +TEXTINDEXMETHODS.ODCIINDEXMERGEPARTITION +TEXTINDEXMETHODS.ODCIINDEXSPLITPARTITION +TEXTINDEXMETHODS.ODCIINDEXSTART +TEXTINDEXMETHODS.ODCIINDEXTRUNCATE +TEXTINDEXMETHODS.ODCIINDEXUPDATE +TEXTINDEXMETHODS.ODCIINDEXUPDPARTMETADATA +TEXTINDEXMETHODS.ODCIINDEXUTILCLEANUP +TEXTINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +TEXTOPTSTATS.ODCIGETINTERFACES +TEXTOPTSTATS.ODCISTATSCOLLECT +TEXTOPTSTATS.ODCISTATSDELETE +TEXTOPTSTATS.ODCISTATSFUNCTIONCOST +TEXTOPTSTATS.ODCISTATSINDEXCOST +TEXTOPTSTATS.ODCISTATSSELECTIVITY +TEXT_LENGTH +TEXT_VC +TFM_PLAN.ADD_STEP +TFM_PLAN.EXPAND_CHAIN_ELEMENT_CORE +TFM_PLAN.EXPAND_CONCAT_CHAIN_ELEMENT +TFM_PLAN.EXPAND_CONCAT_CHAIN_ELEMENTS +TFM_PLAN.EXPAND_FOR_CHAIN_ELEMENT_CORE +TFM_PLAN.EXPAND_INV_CHAIN_ELEMENT_CORE +TFM_PLAN.GET_NUM_STEPS +TFM_PLAN.GET_STEP +TFM_PLAN.TFM_PLAN +TFREE +THINK_TIME +THINK_TIME_AUTO_CORRECT +THINK_TIME_SCALE +THIN_PROVISION_CAPABLE +THIS_DATE +THIS_SEC +THREAD +THREAD# +THREADED +THREAD_ID +THREAD_INSTANCE_NUMBER +THREAD_SQN +THRESHOLD +THRESHOLD_TYPE +THROWS +TIER_STATUS +TIER_TABLESPACE +TIER_TO +TIME +TIMEOUT +TIMEOUTS +TIMESTAMP +TIMESTAMP_TO_SCN. +TIMEZONE +TIME_COMPUTED +TIME_DETECTED +TIME_ENTERED +TIME_GAIN +TIME_INDEX_BLOCKS_FREED +TIME_LOSS +TIME_MODEL +TIME_NEEDED +TIME_REMAINING +TIME_REMAINING_MICRO +TIME_REMAINING_SECS +TIME_SELECTED +TIME_SINCE_LAST_CLEANUP +TIME_SINCE_LAST_DEQUEUE +TIME_SINCE_LAST_WAIT_MICRO +TIME_SINCE_LAST_WAIT_SECS +TIME_STAMP +TIME_SUGGESTED +TIME_TAKEN_DISPLAY +TIME_TO_POPULATE +TIME_WAITED +TIME_WAITED_FG +TIME_WAITED_MICRO +TIME_WAITED_MICRO_FG +TIV_GB +TIV_SSF +TMGR_CPU_TIME +TMGR_ELAPSED_TIME +TMGR_ROWS_PROCESSED +TM_DELTA_CPU_TIME +TM_DELTA_DB_TIME +TM_DELTA_TIME +TOKENSETS +TOMBSTONE_TABLE +TOPNSQL +TOPOLOGY_NAME +TOPOLOGY_STATE +TOPOLOGY_VERSION +TOP_ERROR1 +TOP_ERROR2 +TOP_LEVEL_CALL# +TOP_LEVEL_CALL_NAME +TOP_LEVEL_DDL_MISMATCH +TOP_LEVEL_RPI_CURSOR +TOP_LEVEL_SQL_ID +TOP_LEVEL_SQL_OPCODE +TOP_SESSION_ID +TOP_SESSION_SERIAL# +TOTAL +TOTALQ +TOTALWORK +TOTAL_ACCESS +TOTAL_ACCESS_COUNT +TOTAL_ACTIONS +TOTAL_ACTIVE_MSGS +TOTAL_ADMIN +TOTAL_ALLOC +TOTAL_ANONYMOUS_NTFN_TIME +TOTAL_APPLIED +TOTAL_AQ_NTFN_TIME +TOTAL_ASSIGNED +TOTAL_AVAILABLE_MESSAGES +TOTAL_BLOCKS +TOTAL_BYTES +TOTAL_CHUNKS +TOTAL_CONSUMERS +TOTAL_CPU_LAST_30_DAYS +TOTAL_CPU_LAST_7_DAYS +TOTAL_CPU_TIME +TOTAL_CR_ACCESS +TOTAL_DATABASES +TOTAL_DBCHANGE_NTFN_TIME +TOTAL_DEALLOC +TOTAL_DELETES +TOTAL_DELTA +TOTAL_DEQUEUED_MSG +TOTAL_DEQUEUE_RATE +TOTAL_ELAPSED_TIME +TOTAL_EMAIL_NTFN_TIME +TOTAL_EMON_LATENCY +TOTAL_ENQUEUE_RATE +TOTAL_ERRORS +TOTAL_EXECUTIONS +TOTAL_EXEC_COUNT +TOTAL_EXEC_TIME +TOTAL_EXTENTS +TOTAL_FAILS +TOTAL_FLUSH_DURATION +TOTAL_FREE +TOTAL_FULL_EVALUATIONS +TOTAL_HTTP_NTFN_TIME +TOTAL_HUNG_SESSIONS +TOTAL_IGNORED +TOTAL_INSERTS +TOTAL_IN_MEMORY_LCRS +TOTAL_LATENCY +TOTAL_LCRS_COUNT +TOTAL_LCRS_RETRIED +TOTAL_LCRS_WITH_DEP +TOTAL_LCRS_WITH_WMDEP +TOTAL_LENGTH +TOTAL_MAT_MB +TOTAL_MB +TOTAL_MEMORY_ALLOCATED +TOTAL_MESSAGES_APPLIED +TOTAL_MESSAGES_CAPTURED +TOTAL_MESSAGES_CREATED +TOTAL_MESSAGES_DEQUEUED +TOTAL_MESSAGES_ENQUEUED +TOTAL_MESSAGES_RECEIVED +TOTAL_MESSAGES_SENT +TOTAL_MESSAGES_SPILLED +TOTAL_MESSAGE_COUNT +TOTAL_MSGS +TOTAL_MSG_CALLS +TOTAL_NUMBER +TOTAL_OCI_NTFN_TIME +TOTAL_PASSES +TOTAL_PAYLOAD_BYTES_SENT +TOTAL_PENDING_MSGS +TOTAL_PENDING_NTFN_BYTES +TOTAL_PLSQL_EXEC_TIME +TOTAL_PLSQL_NTFN_TIME +TOTAL_POSTCOST +TOTAL_PRECOST +TOTAL_PREFILTER_DISCARDED +TOTAL_PREFILTER_EVALUATIONS +TOTAL_PREFILTER_KEPT +TOTAL_PROCESSED_MSGS +TOTAL_RECEIVED +TOTAL_REQ# +TOTAL_ROLLBACKS +TOTAL_ROWS +TOTAL_ROWS_RETURNED +TOTAL_RUNS +TOTAL_SAMPLES +TOTAL_SHARABLE_MEM +TOTAL_SIZE +TOTAL_SNAP_SPACE_USAGE +TOTAL_SPILLED_MSG +TOTAL_SQL +TOTAL_SQL_MEM +TOTAL_STMTS +TOTAL_TASKS_EXECUTED +TOTAL_TASK_FAILURES +TOTAL_TASK_LATENCY +TOTAL_TASK_RUNS +TOTAL_TASK_RUN_TIME +TOTAL_TIME +TOTAL_TIMEOUTS +TOTAL_TIMEOUTS_FG +TOTAL_TRANSACTION +TOTAL_TRANSACTIONS_RETRIED +TOTAL_TRANSACTIONS_SENT +TOTAL_TRANSACTION_CPU_TIME +TOTAL_TRANSACTION_TIME +TOTAL_TXNS_RECORDED +TOTAL_TXNS_RETRIED +TOTAL_UPDATES +TOTAL_USAGE +TOTAL_WAIT +TOTAL_WAIT# +TOTAL_WAITS +TOTAL_WAITS_FG +TOTAL_WAIT_COMMITS +TOTAL_WAIT_DEPS +TOTSIZE +TO_ADDRESS +TO_COLUMN_NAME +TO_HASH +TO_LABEL_LIST. +TO_LABEL_LIST.FROM_LABEL +TO_LBAC_DATA_LABEL. +TO_LBAC_DATA_LABEL_INTERNAL. +TO_LBAC_LABEL. +TO_LBAC_LABEL_INTERNAL. +TO_NAME +TO_NODE_ID +TO_NUMERIC_DATA_LABEL. +TO_NUMERIC_LABEL. +TO_NUMERIC_LABEL_INTERNAL. +TO_OWNER +TO_SCHEMA_NAME +TO_TABLE_NAME +TO_TYPE +TO_VAL +TQ_ID +TRACE +TRACEFILE +TRACEID +TRACE_FILENAME +TRACE_TRANSLATION +TRACE_TYPE +TRACING +TRACKED_DATAFILE_AFN +TRACKED_DATAFILE_BLOCK +TRACKING_ID +TRACKING_LABEL +TRACK_TIME +TRANSACTIONID +TRANSACTIONS +TRANSACTIONS_TOTAL +TRANSACTION_CPU_TIME +TRANSACTION_ID +TRANSACTION_ID0 +TRANSACTION_ID1 +TRANSACTION_MESSAGE_NUMBER +TRANSACTION_TIME +TRANSFERABLE +TRANSFER_LATENCY +TRANSFORMATION +TRANSFORMATION_ID +TRANSFORMATION_NAME +TRANSFORMATION_OWNER +TRANSFORMED_LEN +TRANSFORM_DISTINCT_AGG +TRANSFORM_FUNCTION_NAME +TRANSFORM_MAP. +TRANSFORM_MAP.DATA_DELETE +TRANSFORM_MAP.DATA_INSERT +TRANSFORM_TYPE +TRANSIENT_INCIDENT_LIFETIME +TRANSIENT_INCIDENT_LIFE_TIME +TRANSLATED_CODE +TRANSLATED_SQLSTATE +TRANSLATED_TEXT +TRANSLATE_ID +TRANSLATE_NEW_SQL +TRANSLATION_CPU_TIME +TRANSLATION_ELAPSED_TIME +TRANSLATION_METHOD +TRANSLATION_MISMATCH +TRANSLATION_TIMESTAMP +TRANSLATOR +TRANSMIT_MODE +TRAN_COMMENT +TRICKLE_REPOPULATED +TRIGGERING_EVENT +TRIGGER_BODY +TRIGGER_NAME +TRIGGER_OWNER +TRIGGER_TYPE +TRUE_HITS +TRUE_HIT_RATIO +TRUE_RULES +TRUNCATED +TS# +TS1 +TS2 +TS3 +TSDP$DATAPUMP. +TSDP$DATAPUMP.INSTANCE_CALLOUT_IMP +TSDP$VALIDATION_CHECK. +TSDP_POLICY +TSN +TSNAME +TSV +TS_NAME +TTIME +TTL_BUF +TTL_CLT_BUF +TTL_IN_CONNECT +TTL_LOOPS +TTL_MSG +TTL_OUT_CONNECT +TTL_RECONNECT +TTL_SVR_BUF +TUNED_UNDORETENTION +TXN +TXNCOUNT +TXN_CONF_SQL_ID +TXN_ID +TXN_NAME +TXN_RETRY_ITERATION +TX_NAME +TX_REQUESTS +TYPCHK_DEP_MISMATCH +TYPE +TYPE# +TYPECHECK_MEM +TYPECHECK_MISMATCH +TYPECODE +TYPEID +TYPE_CHK_HEAP +TYPE_ID +TYPE_LINK +TYPE_NAME +TYPE_OBJECT_TYPE +TYPE_OID +TYPE_OWNER +TYPE_SCHEMA +TYPE_SIZE +TYPE_SUBNAME +TYPE_TEXT +TYPE_TEXT_LENGTH +TZABBREV +TZNAME +UBABLK +UBAFIL +UBAREC +UBASQN +UDID +UD_TRIGS. +UD_TRIGS.DROP_ALL_UDTRIG_DISPATCH_PROCS +UD_TRIGS.EXISTSTRIGGER +UD_TRIGS.GENUDTRIGDISPATCHER +UD_TRIGS.GETDISPATCHERINFO +UD_TRIGS.GETPARAMSTRS +UD_TRIGS.HASOWNERNAMEPREFIX +UD_TRIGS.INSERTTABLEOWNERNAME +UD_TRIGS.RECREATETRIGPROCSDG +UD_TRIGS.REGENUDTRIGDISPATCHER +UD_TRIGS.REGENUDTRIGPROCS +UD_TRIGS.REMOVEDOUBLEQUOTESINUSERNAME +UD_TRIGS.REPLACEOLDNEW +UD_TRIGS.SETGLOBALTRIGGERSETTING +UD_TRIGS.SETTRIGGEREVENTS +UD_TRIGS.SUBSTITUTETABLENAME +UD_TRIGS.TRF_UDTRGS_ON_COMMIT_DDL +UD_TRIGS.TRF_UDTRGS_ON_VER_DISABLE +UD_TRIGS.TRF_UDTRGS_ON_VER_ENABLE +ULE_COUNT +UNAME +UNASSIGNED_COMPLETE_TXN +UNASSIGNED_COMPLETE_TXNS +UNBOUND_CURSOR +UNBROWSED_MSGS +UNDER_PATH_FUNC. +UNDOBLKCNT +UNDOBLKS +UNDOBLOCKSDONE +UNDOBLOCKSTOTAL +UNDOTSN +UNDO_BLOCK +UNDO_BLOCK_DBLINK +UNDO_LIMIT_HIT +UNDO_OPTIMIZED +UNDO_OPT_CURRENT_CHANGE# +UNDO_POOL +UNDO_REQUESTS +UNDO_SCN +UNDO_SQL +UNDO_SQL_SQN +UNDO_SQL_SUB_SQN +UNDO_TIMESTAMP +UNDO_VALUE +UNEXPIREDBLKS +UNIFIED_AUDIT_POLICIES +UNIQUENESS +UNIQUE_INDEX +UNIQUE_KEY_LEVEL_NAME +UNIQUE_SEQUENCES_CAPTURED +UNIT +UNITS +UNITS_USED +UNKNOWN_CONSIDER_FRESH +UNKNOWN_EXTERNAL_TABLE +UNKNOWN_IMPORT +UNKNOWN_PLSQL_FUNC +UNKNOWN_PREBUILT +UNKNOWN_TRUSTED_FD +UNNEST +UNPLUG_SCN +UNRECOVERABLE_CHANGE# +UNRECOVERABLE_TIME +UNREGISTER_AGENT. +UNUSABLE +UNUSABLE_BEFORE +UNUSABLE_BEGINNING +UNUSED_COLUMN +UNXPBLKRELCNT +UNXPBLKREUCNT +UNXPSTEALCNT +UPD +UPDATABLE +UPDATED_ROWS +UPDATES +UPDATE_COLLISIONS +UPDATE_COMMENT +UPDATE_FREQ +UPDATE_LOG +UPDATE_PROGRESS +UPDATE_SENT +UPDATE_TIME +UPDATE_TRIG +UPGRADE_IN_PROGRESS +UPGRADE_LEVEL +UPGRADE_PRIORITY +UPLOAD_TIME +UPPER_BOUND +UPPER_PORT +UPPER_RANGE +UPSTREAM_COMP_ID +UPTIME_FAILURE_COUNT +UPTIME_RUN_COUNT +URIFACTORY. +URIFACTORY.ESCAPEURI +URIFACTORY.GETURI +URIFACTORY.REGISTERURLHANDLER +URIFACTORY.UNESCAPEURI +URIFACTORY.UNREGISTERURLHANDLER +URITYPE.GETBLOB +URITYPE.GETCLOB +URITYPE.GETCONTENTTYPE +URITYPE.GETEXTERNALURL +URITYPE.GETURL +URITYPE.GETXML +URITYPE.MAKEBLOBFROMCLOB +USABLE +USABLE_FILE_MB +USAGE +USAGE_CONTEXT_ID +USAGE_ID +USAGE_TYPE +USCOUNT +USECS_PER_ROW +USED +USED_BLOCKS +USED_BYTES +USED_CHANGE_TRACKING +USED_COUNT +USED_EXTENTS +USED_LEN +USED_MEMORY_SIZE +USED_OPTIMIZATION +USED_PERCENT +USED_POS +USED_QUOTA_MB +USED_ROLE +USED_SIZE +USED_SPACE +USED_TOTAL +USED_UBLK +USED_UREC +USER +USER# +USERGROUP_INCARNATION +USERGROUP_NUMBER +USERHOST +USERID +USERIO_TIME +USERNAME +USERS +USERS_EXECUTING +USERS_MAX +USERS_OPENING +USER_ADDM_FDG_BREAKDOWN +USER_ADDM_FINDINGS +USER_ADDM_INSTANCES +USER_ADDM_TASKS +USER_ADDM_TASK_DIRECTIVES +USER_ADVISOR_ACTIONS +USER_ADVISOR_DIR_TASK_INST +USER_ADVISOR_EXECUTIONS +USER_ADVISOR_EXEC_PARAMETERS +USER_ADVISOR_FDG_BREAKDOWN +USER_ADVISOR_FINDINGS +USER_ADVISOR_JOURNAL +USER_ADVISOR_LOG +USER_ADVISOR_OBJECTS +USER_ADVISOR_PARAMETERS +USER_ADVISOR_RATIONALE +USER_ADVISOR_RECOMMENDATIONS +USER_ADVISOR_SQLA_COLVOL +USER_ADVISOR_SQLA_REC_SUM +USER_ADVISOR_SQLA_TABLES +USER_ADVISOR_SQLA_TABVOL +USER_ADVISOR_SQLA_WK_MAP +USER_ADVISOR_SQLA_WK_STMTS +USER_ADVISOR_SQLA_WK_SUM +USER_ADVISOR_SQLPLANS +USER_ADVISOR_SQLSTATS +USER_ADVISOR_SQLW_COLVOL +USER_ADVISOR_SQLW_JOURNAL +USER_ADVISOR_SQLW_PARAMETERS +USER_ADVISOR_SQLW_STMTS +USER_ADVISOR_SQLW_SUM +USER_ADVISOR_SQLW_TABLES +USER_ADVISOR_SQLW_TABVOL +USER_ADVISOR_SQLW_TEMPLATES +USER_ADVISOR_TASKS +USER_ADVISOR_TEMPLATES +USER_ALL_TABLES +USER_ANALYTIC_VIEWS +USER_ANALYTIC_VIEW_ATTR_CLASS +USER_ANALYTIC_VIEW_BASE_MEAS +USER_ANALYTIC_VIEW_CALC_MEAS +USER_ANALYTIC_VIEW_CLASS +USER_ANALYTIC_VIEW_COLUMNS +USER_ANALYTIC_VIEW_DIMENSIONS +USER_ANALYTIC_VIEW_DIM_CLASS +USER_ANALYTIC_VIEW_HIERS +USER_ANALYTIC_VIEW_HIER_CLASS +USER_ANALYTIC_VIEW_KEYS +USER_ANALYTIC_VIEW_LEVELS +USER_ANALYTIC_VIEW_LEVEL_CLASS +USER_ANALYTIC_VIEW_LVLGRPS +USER_ANALYTIC_VIEW_MEAS_CLASS +USER_APPLY_ERROR +USER_AQ_AGENT_PRIVS +USER_ARGUMENTS +USER_ASSEMBLIES +USER_ASSOCIATIONS +USER_ATTRIBUTE_DIMENSIONS +USER_ATTRIBUTE_DIM_ATTRS +USER_ATTRIBUTE_DIM_ATTR_CLASS +USER_ATTRIBUTE_DIM_CLASS +USER_ATTRIBUTE_DIM_JOIN_PATHS +USER_ATTRIBUTE_DIM_KEYS +USER_ATTRIBUTE_DIM_LEVELS +USER_ATTRIBUTE_DIM_LEVEL_ATTRS +USER_ATTRIBUTE_DIM_LVL_CLASS +USER_ATTRIBUTE_DIM_ORDER_ATTRS +USER_ATTRIBUTE_DIM_TABLES +USER_ATTRIBUTE_TRANSFORMATIONS +USER_AUDIT_OBJECT +USER_AUDIT_POLICIES +USER_AUDIT_POLICY_COLUMNS +USER_AUDIT_SESSION +USER_AUDIT_STATEMENT +USER_AUDIT_TRAIL +USER_AWS +USER_AW_OBJ +USER_AW_PROP +USER_AW_PS +USER_BASE_TABLE_MVIEWS +USER_BIND_PEEK_MISMATCH +USER_BLOCKS +USER_BYTES +USER_CALLS +USER_CALLS_TOTAL +USER_CALLS_UNREPLAYABLE +USER_CATALOG +USER_CHANGE_NOTIFICATION_REGS +USER_CLUSTERING_DIMENSIONS +USER_CLUSTERING_JOINS +USER_CLUSTERING_KEYS +USER_CLUSTERING_TABLES +USER_CLUSTERS +USER_CLUSTER_HASH_EXPRESSIONS +USER_CLU_COLUMNS +USER_CODE_ROLE_PRIVS +USER_COLL_TYPES +USER_COL_COMMENTS +USER_COL_PENDING_STATS +USER_COL_PRIVS +USER_COL_PRIVS_MADE +USER_COL_PRIVS_RECD +USER_COMMENT +USER_COMPARISON +USER_COMPARISON_COLUMNS +USER_COMPARISON_ROW_DIF +USER_COMPARISON_SCAN +USER_COMPARISON_SCAN_SUMMARY +USER_COMPARISON_SCAN_VALUES +USER_CONSTRAINTS +USER_CONS_COLUMNS +USER_CONS_OBJ_COLUMNS +USER_CONTEXT +USER_CQ_NOTIFICATION_QUERIES +USER_CREDENTIALS +USER_CUBES +USER_CUBE_ATTRIBUTES +USER_CUBE_ATTR_MAPPINGS +USER_CUBE_ATTR_UNIQUE_KEYS +USER_CUBE_ATTR_VISIBILITY +USER_CUBE_BUILD_PROCESSES +USER_CUBE_CALCULATED_MEMBERS +USER_CUBE_CLASSIFICATIONS +USER_CUBE_DEPENDENCIES +USER_CUBE_DESCRIPTIONS +USER_CUBE_DIMENSIONALITY +USER_CUBE_DIMENSIONS +USER_CUBE_DIMNL_MAPPINGS +USER_CUBE_DIM_LEVELS +USER_CUBE_DIM_MAPPINGS +USER_CUBE_DIM_MODELS +USER_CUBE_DIM_VIEWS +USER_CUBE_DIM_VIEW_COLUMNS +USER_CUBE_HIERARCHIES +USER_CUBE_HIER_LEVELS +USER_CUBE_HIER_VIEWS +USER_CUBE_HIER_VIEW_COLUMNS +USER_CUBE_MAPPINGS +USER_CUBE_MEASURES +USER_CUBE_MEAS_MAPPINGS +USER_CUBE_NAMED_BUILD_SPECS +USER_CUBE_VIEWS +USER_CUBE_VIEW_COLUMNS +USER_DATAPUMP_JOBS +USER_DBFS_HS +USER_DBFS_HS_COMMANDS +USER_DBFS_HS_FILES +USER_DBFS_HS_FIXED_PROPERTIES +USER_DBFS_HS_PROPERTIES +USER_DB_LINKS +USER_DEPENDENCIES +USER_DIMENSIONS +USER_DIM_ATTRIBUTES +USER_DIM_CHILD_OF +USER_DIM_HIERARCHIES +USER_DIM_JOIN_KEY +USER_DIM_LEVELS +USER_DIM_LEVEL_KEY +USER_EDITIONING_VIEWS +USER_EDITIONING_VIEWS_AE +USER_EDITIONING_VIEW_COLS +USER_EDITIONING_VIEW_COLS_AE +USER_ENCRYPTED_COLUMNS +USER_EPG_DAD_AUTHORIZATION +USER_ERRORS +USER_ERRORS_AE +USER_ERROR_TRANSLATIONS +USER_EVALUATION_CONTEXTS +USER_EVALUATION_CONTEXT_TABLES +USER_EVALUATION_CONTEXT_VARS +USER_EXPRESSION_STATISTICS +USER_EXTENTS +USER_EXTERNAL_LOCATIONS +USER_EXTERNAL_TABLES +USER_FILE_GROUPS +USER_FILE_GROUP_EXPORT_INFO +USER_FILE_GROUP_FILES +USER_FILE_GROUP_TABLES +USER_FILE_GROUP_TABLESPACES +USER_FILE_GROUP_VERSIONS +USER_FLASHBACK_ARCHIVE +USER_FLASHBACK_ARCHIVE_TABLES +USER_FLASHBACK_TXN_REPORT +USER_FLASHBACK_TXN_STATE +USER_FREE_SPACE +USER_FUNCTION_NAME +USER_GENERATED +USER_GOLDENGATE_PRIVILEGES +USER_HEAT_MAP_SEGMENT +USER_HEAT_MAP_SEG_HISTOGRAM +USER_HIERARCHIES +USER_HIER_CLASS +USER_HIER_COLUMNS +USER_HIER_HIER_ATTRIBUTES +USER_HIER_HIER_ATTR_CLASS +USER_HIER_JOIN_PATHS +USER_HIER_LEVELS +USER_HIER_LEVEL_ID_ATTRS +USER_HISTOGRAMS +USER_HIVE_COLUMNS +USER_HIVE_DATABASES +USER_HIVE_PART_KEY_COLUMNS +USER_HIVE_TABLES +USER_HIVE_TAB_PARTITIONS +USER_HOST_ACES +USER_ID +USER_IDENTIFIERS +USER_ILMDATAMOVEMENTPOLICIES +USER_ILMEVALUATIONDETAILS +USER_ILMOBJECTS +USER_ILMPOLICIES +USER_ILMRESULTS +USER_ILMTASKS +USER_IM_EXPRESSIONS +USER_INCARNATION +USER_INDEXES +USER_INDEXTYPES +USER_INDEXTYPE_ARRAYTYPES +USER_INDEXTYPE_COMMENTS +USER_INDEXTYPE_OPERATORS +USER_IND_COLUMNS +USER_IND_COLUMNS_V$ +USER_IND_EXPRESSIONS +USER_IND_PARTITIONS +USER_IND_PENDING_STATS +USER_IND_STATISTICS +USER_IND_SUBPARTITIONS +USER_INTERNAL_TRIGGERS +USER_IO_TIME +USER_IO_WAIT_TIME +USER_JAVA_ARGUMENTS +USER_JAVA_CLASSES +USER_JAVA_COMPILER_OPTIONS +USER_JAVA_DERIVATIONS +USER_JAVA_FIELDS +USER_JAVA_IMPLEMENTS +USER_JAVA_INNERS +USER_JAVA_LAYOUTS +USER_JAVA_METHODS +USER_JAVA_NCOMPS +USER_JAVA_POLICY +USER_JAVA_RESOLVERS +USER_JAVA_THROWS +USER_JOBS +USER_JOINGROUPS +USER_JOIN_IND_COLUMNS +USER_JSON_COLUMNS +USER_JSON_DATAGUIDES +USER_JSON_DATAGUIDE_FIELDS +USER_LIBRARIES +USER_LOBS +USER_LOB_PARTITIONS +USER_LOB_SUBPARTITIONS +USER_LOB_TEMPLATES +USER_LOG_GROUPS +USER_LOG_GROUP_COLUMNS +USER_MEASURE_FOLDERS +USER_MEASURE_FOLDER_CONTENTS +USER_MEASURE_FOLDER_SUBFOLDERS +USER_METADATA_PROPERTIES +USER_METHOD_PARAMS +USER_METHOD_RESULTS +USER_MINING_MODELS +USER_MINING_MODEL_ATTRIBUTES +USER_MINING_MODEL_PARTITIONS +USER_MINING_MODEL_SETTINGS +USER_MINING_MODEL_VIEWS +USER_MINING_MODEL_XFORMS +USER_MVIEWS +USER_MVIEW_AGGREGATES +USER_MVIEW_ANALYSIS +USER_MVIEW_COMMENTS +USER_MVIEW_DETAIL_PARTITION +USER_MVIEW_DETAIL_RELATIONS +USER_MVIEW_DETAIL_SUBPARTITION +USER_MVIEW_JOINS +USER_MVIEW_KEYS +USER_MVIEW_LOGS +USER_MVIEW_REFRESH_TIMES +USER_MVREF_CHANGE_STATS +USER_MVREF_RUN_STATS +USER_MVREF_STATS +USER_MVREF_STATS_PARAMS +USER_MVREF_STATS_SYS_DEFAULTS +USER_MVREF_STMT_STATS +USER_NAME +USER_NESTED_TABLES +USER_NESTED_TABLE_COLS +USER_NETWORK_ACL_PRIVILEGES +USER_NUMBER +USER_OBJECTS +USER_OBJECTS_AE +USER_OBJECT_SIZE +USER_OBJECT_TABLES +USER_OBJECT_USAGE +USER_OBJ_AUDIT_OPTS +USER_OBJ_COLATTRS +USER_OLDIMAGE_COLUMNS +USER_OPANCILLARY +USER_OPARGUMENTS +USER_OPBINDINGS +USER_OPERATORS +USER_OPERATOR_COMMENTS +USER_OUTLINES +USER_OUTLINE_HINTS +USER_PARALLEL_EXECUTE_CHUNKS +USER_PARALLEL_EXECUTE_TASKS +USER_PARTIAL_DROP_TABS +USER_PART_COL_STATISTICS +USER_PART_HISTOGRAMS +USER_PART_INDEXES +USER_PART_KEY_COLUMNS +USER_PART_KEY_COLUMNS_V$ +USER_PART_LOBS +USER_PART_TABLES +USER_PASSWORD_LIMITS +USER_PENDING_CONV_TABLES +USER_PLSQL_COLL_TYPES +USER_PLSQL_OBJECT_SETTINGS +USER_PLSQL_TYPES +USER_PLSQL_TYPE_ATTRS +USER_POLICIES +USER_POLICY_ATTRIBUTES +USER_POLICY_CONTEXTS +USER_POLICY_GROUPS +USER_PRIV +USER_PRIVATE_TEMP_TABLES +USER_PROCEDURE +USER_PROCEDURES +USER_PROXIES +USER_QUEUES +USER_QUEUE_PUBLISHERS +USER_QUEUE_SCHEDULES +USER_QUEUE_SUBSCRIBERS +USER_QUEUE_TABLES +USER_RECYCLEBIN +USER_REFRESH +USER_REFRESH_CHILDREN +USER_REFS +USER_REGISTERED_MVIEWS +USER_REGISTERED_SNAPSHOTS +USER_REGISTRY +USER_RESOURCE_LIMITS +USER_RESUMABLE +USER_REWRITE_EQUIVALENCES +USER_ROLE_PRIVS +USER_RSRC_CONSUMER_GROUP_PRIVS +USER_RSRC_MANAGER_SYSTEM_PRIVS +USER_RULES +USER_RULESETS +USER_RULE_SET +USER_RULE_SETS +USER_RULE_SET_RULES +USER_SCHEDULER_CHAINS +USER_SCHEDULER_CHAIN_RULES +USER_SCHEDULER_CHAIN_STEPS +USER_SCHEDULER_CREDENTIALS +USER_SCHEDULER_DB_DESTS +USER_SCHEDULER_DESTS +USER_SCHEDULER_FILE_WATCHERS +USER_SCHEDULER_GROUPS +USER_SCHEDULER_GROUP_MEMBERS +USER_SCHEDULER_INCOMPATS +USER_SCHEDULER_INCOMPAT_MEMBER +USER_SCHEDULER_JOBS +USER_SCHEDULER_JOB_ARGS +USER_SCHEDULER_JOB_DESTS +USER_SCHEDULER_JOB_LOG +USER_SCHEDULER_JOB_RUN_DETAILS +USER_SCHEDULER_NOTIFICATIONS +USER_SCHEDULER_PROGRAMS +USER_SCHEDULER_PROGRAM_ARGS +USER_SCHEDULER_REMOTE_JOBSTATE +USER_SCHEDULER_RESOURCES +USER_SCHEDULER_RSC_CONSTRAINTS +USER_SCHEDULER_RUNNING_CHAINS +USER_SCHEDULER_SCHEDULES +USER_SECONDARY_OBJECTS +USER_SEC_RELEVANT_COLS +USER_SEGMENTS +USER_SEQUENCES +USER_SESSION_COUNT +USER_SNAPSHOTS +USER_SNAPSHOT_LOGS +USER_SNAPSHOT_REFRESH_TIMES +USER_SOURCE +USER_SOURCE_AE +USER_SPECIFIED_SIZE +USER_SQLJ_TYPES +USER_SQLJ_TYPE_ATTRS +USER_SQLJ_TYPE_METHODS +USER_SQLSET +USER_SQLSET_BINDS +USER_SQLSET_DEFINITIONS +USER_SQLSET_PLANS +USER_SQLSET_REFERENCES +USER_SQLSET_STATEMENTS +USER_SQLTUNE_BINDS +USER_SQLTUNE_PLANS +USER_SQLTUNE_RATIONALE_PLAN +USER_SQLTUNE_STATISTICS +USER_SQL_TRANSLATIONS +USER_SQL_TRANSLATION_PROFILES +USER_SR_GRP_STATUS +USER_SR_GRP_STATUS_ALL +USER_SR_OBJ +USER_SR_OBJ_ALL +USER_SR_OBJ_STATUS +USER_SR_OBJ_STATUS_ALL +USER_SR_PARTN_OPS +USER_SR_STLOG_STATS +USER_STATEMENTS +USER_STATS +USER_STAT_EXTENSIONS +USER_STORED_SETTINGS +USER_SUBPARTITION_TEMPLATES +USER_SUBPART_COL_STATISTICS +USER_SUBPART_HISTOGRAMS +USER_SUBPART_KEY_COLUMNS +USER_SUBPART_KEY_COLUMNS_V$ +USER_SUBSCR_REGISTRATIONS +USER_SUMMARIES +USER_SUPPLIED_MV +USER_SYNONYMS +USER_SYS_PRIVS +USER_TABLES +USER_TABLESPACES +USER_TAB_COLS +USER_TAB_COLS_V$ +USER_TAB_COLUMNS +USER_TAB_COL_STATISTICS +USER_TAB_COMMENTS +USER_TAB_HISTGRM_PENDING_STATS +USER_TAB_HISTOGRAMS +USER_TAB_IDENTITY_COLS +USER_TAB_MODIFICATIONS +USER_TAB_PARTITIONS +USER_TAB_PENDING_STATS +USER_TAB_PRIVS +USER_TAB_PRIVS_MADE +USER_TAB_PRIVS_RECD +USER_TAB_STATISTICS +USER_TAB_STATS_HISTORY +USER_TAB_STAT_PREFS +USER_TAB_SUBPARTITIONS +USER_TRANSFORMATIONS +USER_TRIGGERS +USER_TRIGGER_COLS +USER_TS +USER_TSTZ_TABLES +USER_TSTZ_TAB_COLS +USER_TS_QUOTAS +USER_TUNE_MVIEW +USER_TYPES +USER_TYPE_ATTRS +USER_TYPE_METHODS +USER_TYPE_VERSIONS +USER_UNUSED_COL_TABS +USER_UPDATABLE_COLUMNS +USER_USAGE_AVG +USER_USAGE_SUM +USER_USAGE_SUMX2 +USER_USERS +USER_USTATS +USER_VARRAYS +USER_VIEWS +USER_VIEWS_AE +USER_WALLET_ACES +USER_WARNING_SETTINGS +USER_XDS_ACL_REFRESH +USER_XDS_ACL_REFSTAT +USER_XDS_LATEST_ACL_REFSTAT +USER_XMLTYPE_COLS +USER_XML_COLUMN_NAMES +USER_XML_INDEXES +USER_XML_NESTED_TABLES +USER_XML_OUT_OF_LINE_TABLES +USER_XML_PARTITIONED_TABLE_OK. +USER_XML_SCHEMAS +USER_XML_SCHEMA_ATTRIBUTES +USER_XML_SCHEMA_COMPLEX_TYPES +USER_XML_SCHEMA_ELEMENTS +USER_XML_SCHEMA_NAMESPACES +USER_XML_SCHEMA_SIMPLE_TYPES +USER_XML_SCHEMA_SUBSTGRP_HEAD +USER_XML_SCHEMA_SUBSTGRP_MBRS +USER_XML_TABLES +USER_XML_TAB_COLS +USER_XML_VIEWS +USER_XML_VIEW_COLS +USER_XS_ACES +USER_XS_ACLS +USER_XS_ACL_PARAMETERS +USER_XS_COLUMN_CONSTRAINTS +USER_XS_IMPLIED_PRIVILEGES +USER_XS_INHERITED_REALMS +USER_XS_PASSWORD_LIMITS +USER_XS_POLICIES +USER_XS_PRIVILEGES +USER_XS_REALM_CONSTRAINTS +USER_XS_SECURITY_CLASSES +USER_XS_SECURITY_CLASS_DEP +USER_XS_USERS +USER_XTERNAL_LOC_PARTITIONS +USER_XTERNAL_LOC_SUBPARTITIONS +USER_XTERNAL_PART_TABLES +USER_XTERNAL_TAB_PARTITIONS +USER_XTERNAL_TAB_SUBPARTITIONS +USER_XT_HIVE_TABLES_VALIDATION +USER_ZONEMAPS +USER_ZONEMAP_MEASURES +USE_ANTI +USE_CONCAT +USE_COUNT +USE_CUBE +USE_CUSTOM_HANDLERS +USE_DAGG_UNION_ALL_GSETS +USE_DATABASE_LINK +USE_FEEDBACK_STATS +USE_HASH +USE_HASH_AGGREGATION +USE_HASH_GBY_FOR_DAGGPSHD +USE_HASH_GBY_FOR_PUSHDOWN +USE_HIDDEN_PARTITIONS +USE_INVISIBLE_INDEXES +USE_LAST_ARCHIVE_TIMESTAMP +USE_LIKE +USE_MERGE +USE_MERGE_CARTESIAN +USE_NL +USE_NL_WITH_INDEX +USE_NO_INDEX +USE_PARTITION_WISE_DISTINCT +USE_PARTITION_WISE_GBY +USE_PARTITION_WISE_WIF +USE_RESOURCE_ESTIMATES +USE_SECUREFILE +USE_SEMI +USE_TTT_FOR_GSETS +USE_VECTOR_AGGREGATION +USE_WEAK_NAME_RESL +USING +USN +USPSCNBASE +USPSCNWRAP +USPTIME +UTILIZATION_LIMIT +UTIME +UTL_BINARYINPUTSTREAM.AVAILABLE +UTL_BINARYINPUTSTREAM.CLOSE +UTL_BINARYINPUTSTREAM.ISNULL +UTL_BINARYINPUTSTREAM.READ +UTL_BINARYOUTPUTSTREAM.CLOSE +UTL_BINARYOUTPUTSTREAM.FLUSH +UTL_BINARYOUTPUTSTREAM.ISNULL +UTL_BINARYOUTPUTSTREAM.WRITE +UTL_CALL_STACK. +UTL_CALL_STACK.ACTUAL_EDITION +UTL_CALL_STACK.BACKTRACE_DEPTH +UTL_CALL_STACK.BACKTRACE_LINE +UTL_CALL_STACK.BACKTRACE_UNIT +UTL_CALL_STACK.CONCATENATE_SUBPROGRAM +UTL_CALL_STACK.CURRENT_EDITION +UTL_CALL_STACK.DYNAMIC_DEPTH +UTL_CALL_STACK.ERROR_DEPTH +UTL_CALL_STACK.ERROR_MSG +UTL_CALL_STACK.ERROR_NUMBER +UTL_CALL_STACK.LEXICAL_DEPTH +UTL_CALL_STACK.OWNER +UTL_CALL_STACK.SUBPROGRAM +UTL_CALL_STACK.UNIT_LINE +UTL_CALL_STACK.UNIT_TYPE +UTL_CHARACTERINPUTSTREAM.AVAILABLE +UTL_CHARACTERINPUTSTREAM.CLOSE +UTL_CHARACTERINPUTSTREAM.ISNULL +UTL_CHARACTERINPUTSTREAM.READ +UTL_CHARACTEROUTPUTSTREAM.CLOSE +UTL_CHARACTEROUTPUTSTREAM.FLUSH +UTL_CHARACTEROUTPUTSTREAM.ISNULL +UTL_CHARACTEROUTPUTSTREAM.WRITE +UTL_COLL. +UTL_COLL.IS_LOCATOR +UTL_COMPRESS. +UTL_COMPRESS.ISOPEN +UTL_COMPRESS.LZ_COMPRESS +UTL_COMPRESS.LZ_COMPRESS_ADD +UTL_COMPRESS.LZ_COMPRESS_CLOSE +UTL_COMPRESS.LZ_COMPRESS_OPEN +UTL_COMPRESS.LZ_UNCOMPRESS +UTL_COMPRESS.LZ_UNCOMPRESS_CLOSE +UTL_COMPRESS.LZ_UNCOMPRESS_EXTRACT +UTL_COMPRESS.LZ_UNCOMPRESS_OPEN +UTL_ENCODE. +UTL_ENCODE.BASE64_DECODE +UTL_ENCODE.BASE64_ENCODE +UTL_ENCODE.MIMEHEADER_DECODE +UTL_ENCODE.MIMEHEADER_ENCODE +UTL_ENCODE.QUOTED_PRINTABLE_DECODE +UTL_ENCODE.QUOTED_PRINTABLE_ENCODE +UTL_ENCODE.TEXT_DECODE +UTL_ENCODE.TEXT_ENCODE +UTL_ENCODE.UUDECODE +UTL_ENCODE.UUENCODE +UTL_FILE. +UTL_FILE.FCLOSE +UTL_FILE.FCLOSE_ALL +UTL_FILE.FCOPY +UTL_FILE.FFLUSH +UTL_FILE.FGETATTR +UTL_FILE.FGETPOS +UTL_FILE.FOPEN +UTL_FILE.FOPEN_NCHAR +UTL_FILE.FREMOVE +UTL_FILE.FRENAME +UTL_FILE.FSEEK +UTL_FILE.GET_LINE +UTL_FILE.GET_LINE_NCHAR +UTL_FILE.GET_RAW +UTL_FILE.IS_OPEN +UTL_FILE.NEW_LINE +UTL_FILE.PUT +UTL_FILE.PUTF +UTL_FILE.PUTF_NCHAR +UTL_FILE.PUT_LINE +UTL_FILE.PUT_LINE_NCHAR +UTL_FILE.PUT_NCHAR +UTL_FILE.PUT_RAW +UTL_GDK. +UTL_GDK.CHARSET_MAP +UTL_GDK.LANGUAGE_MAP +UTL_GDK.TERRITORY_MAP +UTL_HTTP. +UTL_HTTP.ADD_COOKIES +UTL_HTTP.BEGIN_REQUEST +UTL_HTTP.CLEAR_COOKIES +UTL_HTTP.CLOSE_PERSISTENT_CONN +UTL_HTTP.CLOSE_PERSISTENT_CONNS +UTL_HTTP.CREATE_REQUEST_CONTEXT +UTL_HTTP.DESTROY_REQUEST_CONTEXT +UTL_HTTP.END_REQUEST +UTL_HTTP.END_RESPONSE +UTL_HTTP.GET_AUTHENTICATION +UTL_HTTP.GET_BODY_CHARSET +UTL_HTTP.GET_CONTENT_ENCODING_SUPPORT +UTL_HTTP.GET_COOKIES +UTL_HTTP.GET_COOKIE_COUNT +UTL_HTTP.GET_COOKIE_SUPPORT +UTL_HTTP.GET_DETAILED_EXCP_SUPPORT +UTL_HTTP.GET_DETAILED_SQLCODE +UTL_HTTP.GET_DETAILED_SQLERRM +UTL_HTTP.GET_FOLLOW_REDIRECT +UTL_HTTP.GET_HEADER +UTL_HTTP.GET_HEADER_BY_NAME +UTL_HTTP.GET_HEADER_COUNT +UTL_HTTP.GET_PERSISTENT_CONNS +UTL_HTTP.GET_PERSISTENT_CONN_COUNT +UTL_HTTP.GET_PERSISTENT_CONN_SUPPORT +UTL_HTTP.GET_PROXY +UTL_HTTP.GET_RESPONSE +UTL_HTTP.GET_RESPONSE_ERROR_CHECK +UTL_HTTP.GET_TRANSFER_TIMEOUT +UTL_HTTP.READ_LINE +UTL_HTTP.READ_RAW +UTL_HTTP.READ_RAW_PTR +UTL_HTTP.READ_TEXT +UTL_HTTP.REQUEST +UTL_HTTP.REQUEST_PIECES +UTL_HTTP.SET_AUTHENTICATION +UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET +UTL_HTTP.SET_BODY_CHARSET +UTL_HTTP.SET_CONTENT_ENCODING_SUPPORT +UTL_HTTP.SET_COOKIE_SUPPORT +UTL_HTTP.SET_DETAILED_EXCP_SUPPORT +UTL_HTTP.SET_FOLLOW_REDIRECT +UTL_HTTP.SET_HEADER +UTL_HTTP.SET_PERSISTENT_CONN_SUPPORT +UTL_HTTP.SET_PROPERTY +UTL_HTTP.SET_PROXY +UTL_HTTP.SET_RESPONSE_ERROR_CHECK +UTL_HTTP.SET_TRANSFER_TIMEOUT +UTL_HTTP.SET_WALLET +UTL_HTTP.WRITE_LINE +UTL_HTTP.WRITE_RAW +UTL_HTTP.WRITE_TEXT +UTL_I18N. +UTL_I18N.ENCODE_SQL_XML +UTL_I18N.ESCAPE_REFERENCE +UTL_I18N.GET_COMMON_TIME_ZONES +UTL_I18N.GET_DEFAULT_CHARSET +UTL_I18N.GET_DEFAULT_ISO_CURRENCY +UTL_I18N.GET_DEFAULT_LINGUISTIC_SORT +UTL_I18N.GET_LOCAL_LANGUAGES +UTL_I18N.GET_LOCAL_LINGUISTIC_SORTS +UTL_I18N.GET_LOCAL_TERRITORIES +UTL_I18N.GET_LOCAL_TIME_ZONES +UTL_I18N.GET_MAX_CHARACTER_SIZE +UTL_I18N.GET_TRANSLATION +UTL_I18N.MAP_CHARSET +UTL_I18N.MAP_FROM_SHORT_LANGUAGE +UTL_I18N.MAP_LANGUAGE_FROM_ISO +UTL_I18N.MAP_LOCALE_TO_ISO +UTL_I18N.MAP_TERRITORY_FROM_ISO +UTL_I18N.MAP_TO_SHORT_LANGUAGE +UTL_I18N.RAW_TO_CHAR +UTL_I18N.RAW_TO_NCHAR +UTL_I18N.STRING_TO_RAW +UTL_I18N.TRANSLITERATE +UTL_I18N.UNESCAPE_REFERENCE +UTL_I18N.VALIDATE_CHARACTER_ENCODING +UTL_I18N.VALIDATE_SQLNAME +UTL_IDENT. +UTL_INADDR. +UTL_INADDR.GET_HOST_ADDRESS +UTL_INADDR.GET_HOST_NAME +UTL_LMS. +UTL_LMS.FORMAT_MESSAGE +UTL_LMS.GET_MESSAGE +UTL_MATCH. +UTL_MATCH.EDIT_DISTANCE +UTL_MATCH.EDIT_DISTANCE_SIMILARITY +UTL_MATCH.JARO_WINKLER +UTL_MATCH.JARO_WINKLER_SIMILARITY +UTL_NLA. +UTL_NLA.BLAS_ASUM +UTL_NLA.BLAS_AXPY +UTL_NLA.BLAS_COPY +UTL_NLA.BLAS_DOT +UTL_NLA.BLAS_GBMV +UTL_NLA.BLAS_GEMM +UTL_NLA.BLAS_GEMV +UTL_NLA.BLAS_GER +UTL_NLA.BLAS_IAMAX +UTL_NLA.BLAS_NRM2 +UTL_NLA.BLAS_ROT +UTL_NLA.BLAS_ROTG +UTL_NLA.BLAS_SBMV +UTL_NLA.BLAS_SCAL +UTL_NLA.BLAS_SPMV +UTL_NLA.BLAS_SPR +UTL_NLA.BLAS_SPR2 +UTL_NLA.BLAS_SWAP +UTL_NLA.BLAS_SYMM +UTL_NLA.BLAS_SYMV +UTL_NLA.BLAS_SYR +UTL_NLA.BLAS_SYR2 +UTL_NLA.BLAS_SYR2K +UTL_NLA.BLAS_SYRK +UTL_NLA.BLAS_TBMV +UTL_NLA.BLAS_TBSV +UTL_NLA.BLAS_TPMV +UTL_NLA.BLAS_TPSV +UTL_NLA.BLAS_TRMM +UTL_NLA.BLAS_TRMV +UTL_NLA.BLAS_TRSM +UTL_NLA.BLAS_TRSV +UTL_NLA.LAPACK_GBSV +UTL_NLA.LAPACK_GEES +UTL_NLA.LAPACK_GEEV +UTL_NLA.LAPACK_GELS +UTL_NLA.LAPACK_GESDD +UTL_NLA.LAPACK_GESV +UTL_NLA.LAPACK_GESVD +UTL_NLA.LAPACK_GTSV +UTL_NLA.LAPACK_PBSV +UTL_NLA.LAPACK_POSV +UTL_NLA.LAPACK_PPSV +UTL_NLA.LAPACK_PTSV +UTL_NLA.LAPACK_SBEV +UTL_NLA.LAPACK_SBEVD +UTL_NLA.LAPACK_SPEV +UTL_NLA.LAPACK_SPEVD +UTL_NLA.LAPACK_SPSV +UTL_NLA.LAPACK_STEV +UTL_NLA.LAPACK_STEVD +UTL_NLA.LAPACK_SYEV +UTL_NLA.LAPACK_SYEVD +UTL_NLA.LAPACK_SYSV +UTL_NLA.UNIT_TEST_BLAS +UTL_NLA.UNIT_TEST_LAPACK +UTL_RAW. +UTL_RAW.BIT_AND +UTL_RAW.BIT_COMPLEMENT +UTL_RAW.BIT_OR +UTL_RAW.BIT_XOR +UTL_RAW.CAST_FROM_BINARY_DOUBLE +UTL_RAW.CAST_FROM_BINARY_FLOAT +UTL_RAW.CAST_FROM_BINARY_INTEGER +UTL_RAW.CAST_FROM_NUMBER +UTL_RAW.CAST_TO_BINARY_DOUBLE +UTL_RAW.CAST_TO_BINARY_FLOAT +UTL_RAW.CAST_TO_BINARY_INTEGER +UTL_RAW.CAST_TO_NUMBER +UTL_RAW.CAST_TO_NVARCHAR2 +UTL_RAW.CAST_TO_RAW +UTL_RAW.CAST_TO_VARCHAR2 +UTL_RAW.COMPARE +UTL_RAW.CONCAT +UTL_RAW.CONVERT +UTL_RAW.COPIES +UTL_RAW.LENGTH +UTL_RAW.OVERLAY +UTL_RAW.REVERSE +UTL_RAW.SUBSTR +UTL_RAW.TRANSLATE +UTL_RAW.TRANSLITERATE +UTL_RAW.XRANGE +UTL_RECOMP. +UTL_RECOMP.PARALLEL_SLAVE +UTL_RECOMP.POPULATE_UTL_RECOMP_SKIP_LIST +UTL_RECOMP.RECOMP_PARALLEL +UTL_RECOMP.RECOMP_SERIAL +UTL_RECOMP.TRUNCATE_UTL_RECOMP_SKIP_LIST +UTL_REF. +UTL_REF.DELETE_OBJECT +UTL_REF.LOCK_OBJECT +UTL_REF.SELECT_OBJECT +UTL_REF.SELECT_OBJECT_WITH_CR +UTL_REF.UPDATE_OBJECT +UTL_SMTP. +UTL_SMTP.AUTH +UTL_SMTP.CLOSE_CONNECTION +UTL_SMTP.CLOSE_DATA +UTL_SMTP.COMMAND +UTL_SMTP.COMMAND_REPLIES +UTL_SMTP.DATA +UTL_SMTP.EHLO +UTL_SMTP.HELO +UTL_SMTP.HELP +UTL_SMTP.MAIL +UTL_SMTP.NOOP +UTL_SMTP.OPEN_CONNECTION +UTL_SMTP.OPEN_DATA +UTL_SMTP.QUIT +UTL_SMTP.RCPT +UTL_SMTP.RSET +UTL_SMTP.STARTTLS +UTL_SMTP.VRFY +UTL_SMTP.WRITE_DATA +UTL_SMTP.WRITE_RAW_DATA +UTL_SYS_COMPRESS. +UTL_SYS_COMPRESS.ISOPEN +UTL_SYS_COMPRESS.LZ_COMPRESS +UTL_SYS_COMPRESS.LZ_COMPRESS_ADD +UTL_SYS_COMPRESS.LZ_COMPRESS_BFILE +UTL_SYS_COMPRESS.LZ_COMPRESS_BLOB +UTL_SYS_COMPRESS.LZ_COMPRESS_CLOSE +UTL_SYS_COMPRESS.LZ_COMPRESS_OPEN +UTL_SYS_COMPRESS.LZ_UNCOMPRESS +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_BFILE +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_BLOB +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_CLOSE +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_EXTRACT +UTL_SYS_COMPRESS.LZ_UNCOMPRESS_OPEN +UTL_TCP. +UTL_TCP.AVAILABLE +UTL_TCP.CLOSE_ALL_CONNECTIONS +UTL_TCP.CLOSE_CONNECTION +UTL_TCP.FLUSH +UTL_TCP.GET_LINE +UTL_TCP.GET_LINE_NCHAR +UTL_TCP.GET_RAW +UTL_TCP.GET_TEXT +UTL_TCP.GET_TEXT_NCHAR +UTL_TCP.OPEN_CONNECTION +UTL_TCP.READ_LINE +UTL_TCP.READ_RAW +UTL_TCP.READ_TEXT +UTL_TCP.SECURE_CONNECTION +UTL_TCP.WRITE_LINE +UTL_TCP.WRITE_RAW +UTL_TCP.WRITE_TEXT +UTL_URL. +UTL_URL.ESCAPE +UTL_URL.UNESCAPE +UTL_XML. +UTL_XML.COMPARE +UTL_XML.GETDDLSRCFROMXML +UTL_XML.GETFDO +UTL_XML.GETHASHCODE +UTL_XML.GETNEXTTYPEID +UTL_XML.HASTSTZ +UTL_XML.ISNAMEOMF +UTL_XML.LONG2CLOB +UTL_XML.PARSEEXPR +UTL_XML.PARSEQUERY +UTL_XML.SETXMLTRANSFORMENGINE +UTL_XML.SSCFIND +UTL_XML.SSCGETCTX +UTL_XML.SSCMINIMIZECACHE +UTL_XML.SSCPARSE +UTL_XML.SSCPURGE +UTL_XML.SSCSETDEBUG +UTL_XML.TYPEHASHCODEEQ +UTL_XML.WINDOWS32 +UTL_XML.XMLCLEAN +UTL_XML.XMLDUMPCTXS +UTL_XML.XMLINIT +UTL_XML.XMLPARSE +UTL_XML.XMLSETMEMDEBUG +UTL_XML.XMLSETPARSEFLAG +UTL_XML.XSLLOADFROMFILE +UTL_XML.XSLRESETPARAMS +UTL_XML.XSLSETPARAM +UTL_XML.XSLTRANSFORM +UTL_XML.XSLTRANSFORMCTOX +UTL_XML.XSLTRANSFORMXTOC +UTL_XML.XSLTRANSFORMXTOX +V$ACCESS +V$ACTIVE_INSTANCES +V$ACTIVE_SERVICES +V$ACTIVE_SESSION_HISTORY +V$ACTIVE_SESS_POOL_MTH +V$ADVISOR_CURRENT_SQLPLAN +V$ADVISOR_PROGRESS +V$ALERT_TYPES +V$AQ +V$AQ1 +V$AQ_BACKGROUND_COORDINATOR +V$AQ_BMAP_NONDUR_SUBSCRIBERS +V$AQ_CACHED_SUBSHARDS +V$AQ_CROSS_INSTANCE_JOBS +V$AQ_INACTIVE_SUBSHARDS +V$AQ_IPC_ACTIVE_MSGS +V$AQ_IPC_MSG_STATS +V$AQ_IPC_PENDING_MSGS +V$AQ_JOB_COORDINATOR +V$AQ_MESSAGE_CACHE +V$AQ_MESSAGE_CACHE_ADVICE +V$AQ_MESSAGE_CACHE_STAT +V$AQ_MSGBM +V$AQ_NONDUR_REGISTRATIONS +V$AQ_NONDUR_SUBSCRIBER +V$AQ_NONDUR_SUBSCRIBER_LWM +V$AQ_NOTIFICATION_CLIENTS +V$AQ_REMOTE_DEQUEUE_AFFINITY +V$AQ_SERVER_POOL +V$AQ_SHARDED_SUBSCRIBER_STAT +V$AQ_SUBSCRIBER_LOAD +V$AQ_UNCACHED_SUBSHARDS +V$ARCHIVE +V$ARCHIVED_LOG +V$ARCHIVE_DEST +V$ARCHIVE_DEST_STATUS +V$ARCHIVE_GAP +V$ARCHIVE_PROCESSES +V$ASH_INFO +V$ASM_ACFSREPL +V$ASM_ACFSREPLTAG +V$ASM_ACFSSNAPSHOTS +V$ASM_ACFSTAG +V$ASM_ACFSVOLUMES +V$ASM_ACFS_ENCRYPTION_INFO +V$ASM_ACFS_SECURITY_INFO +V$ASM_ACFS_SEC_ADMIN +V$ASM_ACFS_SEC_CMDRULE +V$ASM_ACFS_SEC_REALM +V$ASM_ACFS_SEC_REALM_FILTER +V$ASM_ACFS_SEC_REALM_GROUP +V$ASM_ACFS_SEC_REALM_USER +V$ASM_ACFS_SEC_RULE +V$ASM_ACFS_SEC_RULESET +V$ASM_ACFS_SEC_RULESET_RULE +V$ASM_ALIAS +V$ASM_ATTRIBUTE +V$ASM_AUDIT_CLEANUP_JOBS +V$ASM_AUDIT_CLEAN_EVENTS +V$ASM_AUDIT_CONFIG_PARAMS +V$ASM_AUDIT_LAST_ARCH_TS +V$ASM_AUDIT_LOAD_JOBS +V$ASM_CACHE_EVENTS +V$ASM_CLIENT +V$ASM_DBCLONE_INFO +V$ASM_DISK +V$ASM_DISKGROUP +V$ASM_DISKGROUP_SPARSE +V$ASM_DISKGROUP_STAT +V$ASM_DISK_IOSTAT +V$ASM_DISK_IOSTAT_SPARSE +V$ASM_DISK_SPARSE +V$ASM_DISK_SPARSE_STAT +V$ASM_DISK_STAT +V$ASM_ESTIMATE +V$ASM_FILE +V$ASM_FILEGROUP +V$ASM_FILEGROUP_FILE +V$ASM_FILEGROUP_PROPERTY +V$ASM_FILESYSTEM +V$ASM_OPERATION +V$ASM_QUOTAGROUP +V$ASM_TEMPLATE +V$ASM_USER +V$ASM_USERGROUP +V$ASM_USERGROUP_MEMBER +V$ASM_VOLUME +V$ASM_VOLUME_STAT +V$AW_AGGREGATE_OP +V$AW_ALLOCATE_OP +V$AW_CALC +V$AW_LONGOPS +V$AW_OLAP +V$AW_SESSION_INFO +V$BACKUP +V$BACKUP_ARCHIVELOG_DETAILS +V$BACKUP_ARCHIVELOG_SUMMARY +V$BACKUP_ASYNC_IO +V$BACKUP_CONTROLFILE_DETAILS +V$BACKUP_CONTROLFILE_SUMMARY +V$BACKUP_COPY_DETAILS +V$BACKUP_COPY_SUMMARY +V$BACKUP_CORRUPTION +V$BACKUP_DATAFILE +V$BACKUP_DATAFILE_DETAILS +V$BACKUP_DATAFILE_SUMMARY +V$BACKUP_DEVICE +V$BACKUP_FILES +V$BACKUP_NONLOGGED +V$BACKUP_PIECE +V$BACKUP_PIECE_DETAILS +V$BACKUP_REDOLOG +V$BACKUP_SET +V$BACKUP_SET_DETAILS +V$BACKUP_SET_SUMMARY +V$BACKUP_SPFILE +V$BACKUP_SPFILE_DETAILS +V$BACKUP_SPFILE_SUMMARY +V$BACKUP_SYNC_IO +V$BGPROCESS +V$BH +V$BLOCKING_QUIESCE +V$BLOCK_CHANGE_TRACKING +V$BSP +V$BTS_STAT +V$BT_SCAN_CACHE +V$BT_SCAN_OBJ_TEMPS +V$BUFFERED_PUBLISHERS +V$BUFFERED_QUEUES +V$BUFFERED_SUBSCRIBERS +V$BUFFER_POOL +V$BUFFER_POOL_STATISTICS +V$CACHE +V$CACHE_LOCK +V$CACHE_TRANSFER +V$CALLTAG +V$CELL +V$CELL_CONFIG +V$CELL_CONFIG_INFO +V$CELL_DB +V$CELL_DB_HISTORY +V$CELL_DISK +V$CELL_DISK_HISTORY +V$CELL_GLOBAL +V$CELL_GLOBAL_HISTORY +V$CELL_IOREASON +V$CELL_IOREASON_NAME +V$CELL_METRIC_DESC +V$CELL_OFL_THREAD_HISTORY +V$CELL_OPEN_ALERTS +V$CELL_REQUEST_TOTALS +V$CELL_STATE +V$CELL_THREAD_HISTORY +V$CHANNEL_WAITS +V$CHUNK_METRIC +V$CIRCUIT +V$CLASS_CACHE_TRANSFER +V$CLASS_PING +V$CLEANUP_PROCESS +V$CLIENT_SECRETS +V$CLIENT_STATS +V$CLONEDFILE +V$CLUSTER_INTERCONNECTS +V$CODE_CLAUSE +V$COLUMN_STATISTICS +V$CONFIGURED_INTERCONNECTS +V$CONTAINERS +V$CONTEXT +V$CONTROLFILE +V$CONTROLFILE_RECORD_SECTION +V$CON_EVENT_HISTOGRAM_MICRO +V$CON_SYSMETRIC +V$CON_SYSMETRIC_HISTORY +V$CON_SYSMETRIC_SUMMARY +V$CON_SYSSTAT +V$CON_SYSTEM_EVENT +V$CON_SYSTEM_WAIT_CLASS +V$CON_SYS_TIME_MODEL +V$COPY_CORRUPTION +V$COPY_NONLOGGED +V$CORRUPT_XID_LIST +V$CPOOL_CC_INFO +V$CPOOL_CC_STATS +V$CPOOL_CONN_INFO +V$CPOOL_STATS +V$CR_BLOCK_SERVER +V$CURRENT_BLOCK_SERVER +V$DATABASE +V$DATABASE_BLOCK_CORRUPTION +V$DATABASE_INCARNATION +V$DATABASE_KEY_INFO +V$DATABASE_REPLAY_PROGRESS +V$DATAFILE +V$DATAFILE_COPY +V$DATAFILE_HEADER +V$DATAGUARD_CONFIG +V$DATAGUARD_PROCESS +V$DATAGUARD_STATS +V$DATAGUARD_STATUS +V$DATAPUMP_JOB +V$DATAPUMP_SESSION +V$DBFILE +V$DBLINK +V$DB_CACHE_ADVICE +V$DB_OBJECT_CACHE +V$DB_PIPES +V$DB_TRANSPORTABLE_PLATFORM +V$DEAD_CLEANUP +V$DELETED_OBJECT +V$DETACHED_SESSION +V$DG_BROKER_CONFIG +V$DIAG_ADR_CONTROL +V$DIAG_ADR_CONTROL_AUX +V$DIAG_ADR_INVALIDATION +V$DIAG_ALERT_EXT +V$DIAG_AMS_XACTION +V$DIAG_APP_TRACE_FILE +V$DIAG_CRITICAL_ERROR +V$DIAG_DDE_USER_ACTION +V$DIAG_DDE_USER_ACTION_DEF +V$DIAG_DDE_USR_ACT_PARAM +V$DIAG_DDE_USR_ACT_PARAM_DEF +V$DIAG_DDE_USR_INC_ACT_MAP +V$DIAG_DDE_USR_INC_TYPE +V$DIAG_DFW_CONFIG_CAPTURE +V$DIAG_DFW_CONFIG_ITEM +V$DIAG_DFW_PATCH_CAPTURE +V$DIAG_DFW_PATCH_ITEM +V$DIAG_DFW_PURGE +V$DIAG_DFW_PURGE_ITEM +V$DIAG_DIAGV_INCIDENT +V$DIAG_DIR_EXT +V$DIAG_EM_DIAG_JOB +V$DIAG_EM_TARGET_INFO +V$DIAG_EM_USER_ACTIVITY +V$DIAG_HM_FDG_SET +V$DIAG_HM_FINDING +V$DIAG_HM_INFO +V$DIAG_HM_MESSAGE +V$DIAG_HM_RECOMMENDATION +V$DIAG_HM_RUN +V$DIAG_INCCKEY +V$DIAG_INCIDENT +V$DIAG_INCIDENT_FILE +V$DIAG_INC_METER_CONFIG +V$DIAG_INC_METER_IMPT_DEF +V$DIAG_INC_METER_INFO +V$DIAG_INC_METER_PK_IMPTS +V$DIAG_INC_METER_SUMMARY +V$DIAG_INFO +V$DIAG_IPS_CONFIGURATION +V$DIAG_IPS_FILE_COPY_LOG +V$DIAG_IPS_FILE_METADATA +V$DIAG_IPS_PACKAGE +V$DIAG_IPS_PACKAGE_FILE +V$DIAG_IPS_PACKAGE_HISTORY +V$DIAG_IPS_PACKAGE_INCIDENT +V$DIAG_IPS_PKG_UNPACK_HIST +V$DIAG_IPS_PROGRESS_LOG +V$DIAG_IPS_REMOTE_PACKAGE +V$DIAG_LOG_EXT +V$DIAG_OPT_TRACE_RECORDS +V$DIAG_PDB_PROBLEM +V$DIAG_PDB_SPACE_MGMT +V$DIAG_PICKLEERR +V$DIAG_PROBLEM +V$DIAG_RELMD_EXT +V$DIAG_SESS_OPT_TRACE_RECORDS +V$DIAG_SESS_SQL_TRACE_RECORDS +V$DIAG_SQL_TRACE_RECORDS +V$DIAG_SWEEPERR +V$DIAG_TRACE_FILE +V$DIAG_TRACE_FILE_CONTENTS +V$DIAG_VEM_USER_ACTLOG +V$DIAG_VEM_USER_ACTLOG1 +V$DIAG_VHM_RUN +V$DIAG_VIEW +V$DIAG_VIEWCOL +V$DIAG_VINCIDENT +V$DIAG_VINCIDENT_FILE +V$DIAG_VINC_METER_INFO +V$DIAG_VIPS_FILE_COPY_LOG +V$DIAG_VIPS_FILE_METADATA +V$DIAG_VIPS_PACKAGE_FILE +V$DIAG_VIPS_PACKAGE_HISTORY +V$DIAG_VIPS_PACKAGE_MAIN_INT +V$DIAG_VIPS_PACKAGE_SIZE +V$DIAG_VIPS_PKG_FILE +V$DIAG_VIPS_PKG_INC_CAND +V$DIAG_VIPS_PKG_INC_DTL +V$DIAG_VIPS_PKG_INC_DTL1 +V$DIAG_VIPS_PKG_MAIN_PROBLEM +V$DIAG_VNOT_EXIST_INCIDENT +V$DIAG_VPDB_PROBLEM +V$DIAG_VPROBLEM +V$DIAG_VPROBLEM1 +V$DIAG_VPROBLEM2 +V$DIAG_VPROBLEM_BUCKET +V$DIAG_VPROBLEM_BUCKET1 +V$DIAG_VPROBLEM_BUCKET_COUNT +V$DIAG_VPROBLEM_INT +V$DIAG_VPROBLEM_LASTINC +V$DIAG_VSHOWCATVIEW +V$DIAG_VSHOWINCB +V$DIAG_VSHOWINCB_I +V$DIAG_VTEST_EXISTS +V$DIAG_V_ACTINC +V$DIAG_V_ACTPROB +V$DIAG_V_INCCOUNT +V$DIAG_V_INCFCOUNT +V$DIAG_V_INC_METER_INFO_PROB +V$DIAG_V_IPSPRBCNT +V$DIAG_V_IPSPRBCNT1 +V$DIAG_V_NFCINC +V$DIAG_V_SWPERRCOUNT +V$DISK_RESTORE_RANGE +V$DISPATCHER +V$DISPATCHER_CONFIG +V$DISPATCHER_RATE +V$DLM_ALL_LOCKS +V$DLM_CONVERT_LOCAL +V$DLM_CONVERT_REMOTE +V$DLM_LATCH +V$DLM_LOCKS +V$DLM_MISC +V$DLM_RESS +V$DLM_TRAFFIC_CONTROLLER +V$DML_STATS +V$DNFS_CHANNELS +V$DNFS_FILES +V$DNFS_SERVERS +V$DNFS_STATS +V$DYNAMIC_REMASTER_STATS +V$EDITIONABLE_TYPES +V$EMON +V$EMX_USAGE_STATS +V$ENABLEDPRIVS +V$ENCRYPTED_TABLESPACES +V$ENCRYPTION_KEYS +V$ENCRYPTION_WALLET +V$ENQUEUE_LOCK +V$ENQUEUE_STAT +V$ENQUEUE_STATISTICS +V$EVENTMETRIC +V$EVENT_HISTOGRAM +V$EVENT_HISTOGRAM_MICRO +V$EVENT_NAME +V$EVENT_OUTLIERS +V$EXADIRECT_ACL +V$EXECUTION +V$EXP_STATS +V$FALSE_PING +V$FAST_START_SERVERS +V$FAST_START_TRANSACTIONS +V$FILEMETRIC +V$FILEMETRIC_HISTORY +V$FILESPACE_USAGE +V$FILESTAT +V$FILE_CACHE_TRANSFER +V$FILE_HISTOGRAM +V$FILE_OPTIMIZED_HISTOGRAM +V$FILE_PING +V$FIXED_TABLE +V$FIXED_VIEW_DEFINITION +V$FLASHBACK_DATABASE_LOG +V$FLASHBACK_DATABASE_LOGFILE +V$FLASHBACK_DATABASE_STAT +V$FLASHBACK_TXN_GRAPH +V$FLASHBACK_TXN_MODS +V$FLASHFILESTAT +V$FLASH_RECOVERY_AREA_USAGE +V$FOREIGN_ARCHIVED_LOG +V$FS_FAILOVER_HISTOGRAM +V$FS_FAILOVER_OBSERVERS +V$FS_FAILOVER_STATS +V$FS_OBSERVER_HISTOGRAM +V$GCR_ACTIONS +V$GCR_LOG +V$GCR_METRICS +V$GCR_STATUS +V$GCSHVMASTER_INFO +V$GCSPFMASTER_INFO +V$GC_ELEMENT +V$GC_ELEMENTS_WITH_COLLISIONS +V$GES_BLOCKING_ENQUEUE +V$GES_CONVERT_LOCAL +V$GES_CONVERT_REMOTE +V$GES_DEADLOCKS +V$GES_DEADLOCK_SESSIONS +V$GES_ENQUEUE +V$GES_LATCH +V$GES_RESOURCE +V$GES_STATISTICS +V$GES_TRAFFIC_CONTROLLER +V$GG_APPLY_COORDINATOR +V$GG_APPLY_READER +V$GG_APPLY_RECEIVER +V$GG_APPLY_SERVER +V$GLOBALCONTEXT +V$GLOBAL_BLOCKED_LOCKS +V$GLOBAL_TRANSACTION +V$GOLDENGATE_CAPABILITIES +V$GOLDENGATE_CAPTURE +V$GOLDENGATE_MESSAGE_TRACKING +V$GOLDENGATE_PROCEDURE_STATS +V$GOLDENGATE_TABLE_STATS +V$GOLDENGATE_TRANSACTION +V$HANG_INFO +V$HANG_SESSION_INFO +V$HANG_STATISTICS +V$HEAT_MAP_SEGMENT +V$HM_CHECK +V$HM_CHECK_PARAM +V$HM_FINDING +V$HM_INFO +V$HM_RECOMMENDATION +V$HM_RUN +V$HS_AGENT +V$HS_PARAMETER +V$HS_SESSION +V$HVMASTER_INFO +V$IMEU_HEADER +V$IMHMSEG +V$IM_ADOELEMENTS +V$IM_ADOTASKDETAILS +V$IM_ADOTASKS +V$IM_COLUMN_LEVEL +V$IM_COL_CU +V$IM_DELTA_HEADER +V$IM_GLOBALDICT +V$IM_GLOBALDICT_PIECEMAP +V$IM_GLOBALDICT_SORTORDER +V$IM_GLOBALDICT_VERSION +V$IM_HEADER +V$IM_IMECOL_CU +V$IM_SEGMENTS +V$IM_SEGMENTS_DETAIL +V$IM_SEG_EXT_MAP +V$IM_SMU_CHUNK +V$IM_SMU_DELTA +V$IM_SMU_HEAD +V$IM_TBS_EXT_MAP +V$IM_USER_SEGMENTS +V$INCMETER_CONFIG +V$INCMETER_INFO +V$INCMETER_SUMMARY +V$INDEXED_FIXED_COLUMN +V$INDEX_USAGE_INFO +V$INMEMORY_AREA +V$INMEMORY_FASTSTART_AREA +V$INMEMORY_XMEM_AREA +V$INSTANCE +V$INSTANCE_CACHE_TRANSFER +V$INSTANCE_LOG_GROUP +V$INSTANCE_PING +V$INSTANCE_RECOVERY +V$IOFUNCMETRIC +V$IOFUNCMETRIC_HISTORY +V$IOSTAT_CONSUMER_GROUP +V$IOSTAT_FILE +V$IOSTAT_FUNCTION +V$IOSTAT_FUNCTION_DETAIL +V$IOSTAT_NETWORK +V$IOS_CLIENT +V$IO_CALIBRATION_STATUS +V$IO_OUTLIER +V$IP_ACL +V$IR_FAILURE +V$IR_FAILURE_SET +V$IR_MANUAL_CHECKLIST +V$IR_REPAIR +V$JAVAPOOL +V$JAVA_LIBRARY_CACHE_MEMORY +V$JAVA_PATCHING_STATUS +V$JAVA_POOL_ADVICE +V$JAVA_SERVICES +V$KERNEL_IO_OUTLIER +V$KEY_VECTOR +V$LATCH +V$LATCHHOLDER +V$LATCHNAME +V$LATCH_CHILDREN +V$LATCH_MISSES +V$LATCH_PARENT +V$LGWRIO_OUTLIER +V$LIBCACHE_LOCKS +V$LIBRARYCACHE +V$LIBRARY_CACHE_MEMORY +V$LICENSE +V$LISTENER_NETWORK +V$LOADISTAT +V$LOADPSTAT +V$LOBSTAT +V$LOCK +V$LOCKDOWN_RULES +V$LOCKED_OBJECT +V$LOCKS_WITH_COLLISIONS +V$LOCK_ACTIVITY +V$LOCK_ELEMENT +V$LOCK_TYPE +V$LOG +V$LOGFILE +V$LOGHIST +V$LOGMNR_CONTENTS +V$LOGMNR_DICTIONARY +V$LOGMNR_DICTIONARY_LOAD +V$LOGMNR_LATCH +V$LOGMNR_LOGFILE +V$LOGMNR_LOGS +V$LOGMNR_PARAMETERS +V$LOGMNR_PROCESS +V$LOGMNR_SESSION +V$LOGMNR_STATS +V$LOGMNR_TRANSACTION +V$LOGSTDBY +V$LOGSTDBY_PROCESS +V$LOGSTDBY_PROGRESS +V$LOGSTDBY_STATE +V$LOGSTDBY_STATS +V$LOGSTDBY_TRANSACTION +V$LOG_HISTORY +V$MANAGED_STANDBY +V$MAPPED_SQL +V$MAP_COMP_LIST +V$MAP_ELEMENT +V$MAP_EXT_ELEMENT +V$MAP_FILE +V$MAP_FILE_EXTENT +V$MAP_FILE_IO_STACK +V$MAP_LIBRARY +V$MAP_SUBELEMENT +V$MAX_ACTIVE_SESS_TARGET_MTH +V$MEMOPTIMIZE_WRITE_AREA +V$MEMORY_CURRENT_RESIZE_OPS +V$MEMORY_DYNAMIC_COMPONENTS +V$MEMORY_RESIZE_OPS +V$MEMORY_TARGET_ADVICE +V$METRIC +V$METRICGROUP +V$METRICNAME +V$METRIC_HISTORY +V$MTTR_TARGET_ADVICE +V$MUTEX_SLEEP +V$MUTEX_SLEEP_HISTORY +V$MVREFRESH +V$MYSTAT +V$NFS_CLIENTS +V$NFS_LOCKS +V$NFS_OPEN_FILES +V$NLS_PARAMETERS +V$NLS_VALID_VALUES +V$NONLOGGED_BLOCK +V$OBJECT_DEPENDENCY +V$OBJECT_DML_FREQUENCIES +V$OBJECT_PRIVILEGE +V$OBJECT_USAGE +V$OBSOLETE_PARAMETER +V$OFFLINE_RANGE +V$OFSMOUNT +V$OFS_STATS +V$ONLINE_REDEF +V$OPEN_CURSOR +V$OPTIMIZER_PROCESSING_RATE +V$OPTION +V$OSSTAT +V$PARALLEL_DEGREE_LIMIT_MTH +V$PARAMETER +V$PARAMETER2 +V$PARAMETER_VALID_VALUES +V$PASSWORDFILE_INFO +V$PATCHES +V$PDBS +V$PDB_INCARNATION +V$PERSISTENT_PUBLISHERS +V$PERSISTENT_QMN_CACHE +V$PERSISTENT_QUEUES +V$PERSISTENT_SUBSCRIBERS +V$PGASTAT +V$PGA_TARGET_ADVICE +V$PGA_TARGET_ADVICE_HISTOGRAM +V$PING +V$PLSQL_DEBUGGABLE_SESSIONS +V$POLICY_HISTORY +V$PQ_SESSTAT +V$PQ_SLAVE +V$PQ_SYSSTAT +V$PQ_TQSTAT +V$PROCESS +V$PROCESS_GROUP +V$PROCESS_MEMORY +V$PROCESS_MEMORY_DETAIL +V$PROCESS_MEMORY_DETAIL_PROG +V$PROCESS_POOL +V$PROCESS_PRIORITY_DATA +V$PROPAGATION_RECEIVER +V$PROPAGATION_SENDER +V$PROXY_ARCHIVEDLOG +V$PROXY_ARCHIVELOG_DETAILS +V$PROXY_ARCHIVELOG_SUMMARY +V$PROXY_COPY_DETAILS +V$PROXY_COPY_SUMMARY +V$PROXY_DATAFILE +V$PROXY_PDB_TARGETS +V$PWFILE_USERS +V$PX_BUFFER_ADVICE +V$PX_INSTANCE_GROUP +V$PX_PROCESS +V$PX_PROCESS_SYSSTAT +V$PX_PROCESS_TRACE +V$PX_SESSION +V$PX_SESSTAT +V$QMON_COORDINATOR_STATS +V$QMON_SERVER_STATS +V$QMON_TASKS +V$QMON_TASK_STATS +V$QPX_INVENTORY +V$QUARANTINE +V$QUARANTINE_SUMMARY +V$QUEUE +V$QUEUEING_MTH +V$RECOVERY_AREA_USAGE +V$RECOVERY_FILE_DEST +V$RECOVERY_FILE_STATUS +V$RECOVERY_LOG +V$RECOVERY_PROGRESS +V$RECOVERY_SLAVE +V$RECOVERY_STATUS +V$RECOVER_FILE +V$REDO_DEST_RESP_HISTOGRAM +V$REPLAY_CONTEXT +V$REPLAY_CONTEXT_LOB +V$REPLAY_CONTEXT_SEQUENCE +V$REPLAY_CONTEXT_SYSDATE +V$REPLAY_CONTEXT_SYSGUID +V$REPLAY_CONTEXT_SYSTIMESTAMP +V$REQDIST +V$RESERVED_WORDS +V$RESOURCE +V$RESOURCE_LIMIT +V$RESTORE_POINT +V$RESTORE_RANGE +V$RESULT_CACHE_DEPENDENCY +V$RESULT_CACHE_MEMORY +V$RESULT_CACHE_OBJECTS +V$RESULT_CACHE_STATISTICS +V$RESUMABLE +V$RFS_THREAD +V$RMAN_BACKUP_JOB_DETAILS +V$RMAN_BACKUP_SUBJOB_DETAILS +V$RMAN_BACKUP_TYPE +V$RMAN_COMPRESSION_ALGORITHM +V$RMAN_CONFIGURATION +V$RMAN_ENCRYPTION_ALGORITHMS +V$RMAN_OUTPUT +V$RMAN_STATUS +V$ROLLNAME +V$ROLLSTAT +V$ROWCACHE +V$ROWCACHE_PARENT +V$ROWCACHE_SUBORDINATE +V$RO_USER_ACCOUNT +V$RSRCMGRMETRIC +V$RSRCMGRMETRIC_HISTORY +V$RSRCPDBMETRIC +V$RSRCPDBMETRIC_HISTORY +V$RSRC_CONSUMER_GROUP +V$RSRC_CONSUMER_GROUP_CPU_MTH +V$RSRC_CONS_GROUP_HISTORY +V$RSRC_PDB +V$RSRC_PDB_HISTORY +V$RSRC_PLAN +V$RSRC_PLAN_CPU_MTH +V$RSRC_PLAN_HISTORY +V$RSRC_SESSION_INFO +V$RT_ADDM_CONTROL +V$RULE +V$RULE_SET +V$RULE_SET_AGGREGATE_STATS +V$SBT_RESTORE_RANGE +V$SCHEDULER_INMEM_MDINFO +V$SCHEDULER_INMEM_RTINFO +V$SCHEDULER_RUNNING_JOBS +V$SECUREFILE_TIMER +V$SEGMENT_STATISTICS +V$SEGSPACE_USAGE +V$SEGSTAT +V$SEGSTAT_NAME +V$SERVICEMETRIC +V$SERVICEMETRIC_HISTORY +V$SERVICES +V$SERVICE_EVENT +V$SERVICE_REGION_METRIC +V$SERVICE_STATS +V$SERVICE_WAIT_CLASS +V$SERV_MOD_ACT_STATS +V$SESSION +V$SESSIONS_COUNT +V$SESSION_BLOCKERS +V$SESSION_CONNECT_INFO +V$SESSION_CURSOR_CACHE +V$SESSION_EVENT +V$SESSION_FIX_CONTROL +V$SESSION_LONGOPS +V$SESSION_OBJECT_CACHE +V$SESSION_WAIT +V$SESSION_WAIT_CLASS +V$SESSION_WAIT_HISTORY +V$SESSMETRIC +V$SESSTAT +V$SESS_IO +V$SESS_TIME_MODEL +V$SES_OPTIMIZER_ENV +V$SGA +V$SGAINFO +V$SGASTAT +V$SGA_CURRENT_RESIZE_OPS +V$SGA_DYNAMIC_COMPONENTS +V$SGA_DYNAMIC_FREE_MEMORY +V$SGA_RESIZE_OPS +V$SGA_TARGET_ADVICE +V$SHADOW_DATAFILE +V$SHARED_POOL_ADVICE +V$SHARED_POOL_RESERVED +V$SHARED_SERVER +V$SHARED_SERVER_MONITOR +V$SORT_SEGMENT +V$SORT_USAGE +V$SPPARAMETER +V$SQL +V$SQLAREA +V$SQLAREA_PLAN_HASH +V$SQLCOMMAND +V$SQLFN_ARG_METADATA +V$SQLFN_METADATA +V$SQLPA_METRIC +V$SQLSTATS +V$SQLSTATS_PLAN_HASH +V$SQLTEXT +V$SQLTEXT_WITH_NEWLINES +V$SQL_BIND_CAPTURE +V$SQL_BIND_DATA +V$SQL_BIND_METADATA +V$SQL_CS_HISTOGRAM +V$SQL_CS_SELECTIVITY +V$SQL_CS_STATISTICS +V$SQL_CURSOR +V$SQL_DIAG_REPOSITORY +V$SQL_DIAG_REPOSITORY_REASON +V$SQL_FEATURE +V$SQL_FEATURE_DEPENDENCY +V$SQL_FEATURE_HIERARCHY +V$SQL_HINT +V$SQL_JOIN_FILTER +V$SQL_MONITOR +V$SQL_MONITOR_SESSTAT +V$SQL_MONITOR_STATNAME +V$SQL_OPTIMIZER_ENV +V$SQL_PLAN +V$SQL_PLAN_MONITOR +V$SQL_PLAN_STATISTICS +V$SQL_PLAN_STATISTICS_ALL +V$SQL_REDIRECTION +V$SQL_REOPTIMIZATION_HINTS +V$SQL_SHARD +V$SQL_SHARED_CURSOR +V$SQL_SHARED_MEMORY +V$SQL_WORKAREA +V$SQL_WORKAREA_ACTIVE +V$SQL_WORKAREA_HISTOGRAM +V$SSCR_SESSIONS +V$STANDBY_EVENT_HISTOGRAM +V$STANDBY_LOG +V$STATISTICS_LEVEL +V$STATNAME +V$STATS_ADVISOR_ACTIONS +V$STATS_ADVISOR_FINDINGS +V$STATS_ADVISOR_RATIONALES +V$STATS_ADVISOR_RECS +V$STATS_ADVISOR_RULES +V$STREAMS_APPLY_COORDINATOR +V$STREAMS_APPLY_READER +V$STREAMS_APPLY_SERVER +V$STREAMS_CAPTURE +V$STREAMS_MESSAGE_TRACKING +V$STREAMS_POOL_ADVICE +V$STREAMS_POOL_STATISTICS +V$STREAMS_TRANSACTION +V$SUBCACHE +V$SUBSCR_REGISTRATION_STATS +V$SYSAUX_OCCUPANTS +V$SYSMETRIC +V$SYSMETRIC_HISTORY +V$SYSMETRIC_SUMMARY +V$SYSSTAT +V$SYSTEM_CURSOR_CACHE +V$SYSTEM_EVENT +V$SYSTEM_FIX_CONTROL +V$SYSTEM_PARAMETER +V$SYSTEM_PARAMETER2 +V$SYSTEM_RESET_PARAMETER +V$SYSTEM_RESET_PARAMETER2 +V$SYSTEM_WAIT_CLASS +V$SYS_OPTIMIZER_ENV +V$SYS_REPORT_REQUESTS +V$SYS_REPORT_STATS +V$SYS_TIME_MODEL +V$TABLESPACE +V$TEMPFILE +V$TEMPFILE_INFO_INSTANCE +V$TEMPORARY_LOBS +V$TEMPSEG_USAGE +V$TEMPSTAT +V$TEMPUNDOSTAT +V$TEMP_CACHE_TRANSFER +V$TEMP_EXTENT_MAP +V$TEMP_EXTENT_POOL +V$TEMP_PING +V$TEMP_SPACE_HEADER +V$THREAD +V$THRESHOLD_TYPES +V$TIMER +V$TIMEZONE_FILE +V$TIMEZONE_NAMES +V$TOPLEVELCALL +V$TRANSACTION +V$TRANSACTION_ENQUEUE +V$TRANSPORTABLE_PLATFORM +V$TSDP_SUPPORTED_FEATURE +V$TSM_SESSIONS +V$TYPE_SIZE +V$UNDOSTAT +V$UNIFIED_AUDIT_RECORD_FORMAT +V$UNIFIED_AUDIT_TRAIL +V$UNUSABLE_BACKUPFILE_DETAILS +V$VERSION +V$VPD_POLICY +V$WAITCLASSMETRIC +V$WAITCLASSMETRIC_HISTORY +V$WAITSTAT +V$WAIT_CHAINS +V$WALLET +V$WLM_DB_MODE +V$WLM_PCMETRIC +V$WLM_PCMETRIC_HISTORY +V$WLM_PCSERVICE +V$WLM_PC_STATS +V$WORKLOAD_REPLAY_THREAD +V$XML_AUDIT_TRAIL +V$XSTREAM_APPLY_COORDINATOR +V$XSTREAM_APPLY_READER +V$XSTREAM_APPLY_RECEIVER +V$XSTREAM_APPLY_SERVER +V$XSTREAM_CAPTURE +V$XSTREAM_MESSAGE_TRACKING +V$XSTREAM_OUTBOUND_SERVER +V$XSTREAM_TABLE_STATS +V$XSTREAM_TRANSACTION +V$XS_SESSIONS +V$XS_SESSION_NS_ATTRIBUTE +V$XS_SESSION_NS_ATTRIBUTES +V$XS_SESSION_ROLES +V$ZONEMAP_USAGE_STATS +V$_LOCK +V80_FMT_IMAGE +VAL1 +VAL2 +VALID +VALIDATED +VALIDATE_CONTEXT. +VALIDATE_DV. +VALIDATE_OLS. +VALIDATE_ORDIM. +VALIDATE_OWM. +VALIDATE_SDO. +VALID_NOW +VALID_ROLE +VALID_TYPE +VALUE +VALUES_CAPTURED +VALUES_REPLAYED +VALUE_ANYDATA +VALUE_BLK +VALUE_BLK_STATE +VALUE_STRING +VALUE_TYPE +VAL_LENGTH +VARIABLE_METHOD_FUNCTION +VARIABLE_METHOD_FUNCTION_CALLS +VARIABLE_NAME +VARIABLE_TYPE +VARIABLE_VALUE_FUNCTION +VARIABLE_VALUE_FUNCTION_CALLS +VECTOR_READ +VECTOR_READ_TRACE +VECTOR_TRANSFORM +VECTOR_TRANSFORM_DIMS +VECTOR_TRANSFORM_FACT +VENDOR_NAME +VERIFIER +VERIFIER_TYPE +VERIFY +VERIFY_FUNCTION. +VERIFY_FUNCTION_11G. +VERSION +VERSION# +VERSION_ADDED +VERSION_COUNT +VERSION_FULL +VERSION_ID +VERSION_LEGACY +VERSION_NAME +VERSION_NUM +VERSION_NUMBER +VERSION_OUTLINE +VERSION_REMOVED +VERSION_TEXT +VERSION_TIME +VERTEX_TYPE.VERTEX_TYPE +VICTIM_INSTANCE +VICTIM_OSPID +VICTIM_PID +VICTIM_QOS_PC_ITT +VICTIM_QOS_PC_KEY +VICTIM_QOS_PC_RANK +VICTIM_QOS_PC_RTT +VICTIM_REQ_LEVEL +VICTIM_RESNM +VICTIM_SERIAL# +VICTIM_SESSION_ID +VICTIM_SID +VIEW_COLUMN_ID +VIEW_COLUMN_NAME +VIEW_DEFINITION +VIEW_LOCATION +VIEW_NAME +VIEW_RELATED +VIEW_TYPE +VIEW_TYPE_OWNER +VIRTUAL_COLUMN +VISIBILITY +VNCR_INSERT. +VOLDEV +VOLUME_DEVICE +VOLUME_NAME +VOLUME_NUMBER +VOL_DEVICE +VOL_LABEL +VOTING_FILE +VOTING_FILES +VSN +V_LBRECSETIMPL_T.ODCITABLECLOSE +V_LBRECSETIMPL_T.ODCITABLEFETCH +V_LBRECSETIMPL_T.ODCITABLEPREPARE +V_LBRECSETIMPL_T.ODCITABLESTART +V_LISTBACKUPPIPE. +V_LISTRSRANGEPIPE. +V_RANGERECSETIMPL_T.ODCITABLECLOSE +V_RANGERECSETIMPL_T.ODCITABLEFETCH +V_RANGERECSETIMPL_T.ODCITABLESTART +WAIT +WAITER +WAITERS_WOKEN +WAITFOR_CAP_ID +WAITING +WAITING_CON_ID +WAITING_SESSION +WAITS +WAITSQ_500B +WAITSQ_8K +WAITS_HOLDING_LATCH +WAIT_500B +WAIT_8K +WAIT_CLASS +WAIT_CLASS# +WAIT_CLASS_ID +WAIT_CLASS_TYPE +WAIT_COUNT +WAIT_COUNT_FG +WAIT_DEPENDENCIES +WAIT_EVENT +WAIT_EVENT_TEXT +WAIT_FOR_LOG +WAIT_FOR_SCN +WAIT_ID +WAIT_OBJECT_NAME +WAIT_STATE +WAIT_TIME +WAIT_TIME_500B +WAIT_TIME_8K +WAIT_TIME_FORMAT +WAIT_TIME_MICRO +WAIT_TIME_MILLI +WAIT_TIME_SQUARED_500B +WAIT_TIME_SQUARED_8K +WAIT_TIME_SUM +WAIT_TIME_SUMX2 +WAIT_TIME_USEC +WALLET_ORDER +WALLET_PATH +WALLET_TYPE +WARNING +WARNING_FACTOR +WARNING_INCIDENTS +WARNING_OPERATOR +WARNING_VALUE +WAS_CAPTURED +WAS_FORCED +WEIGHT +WEIGHT_FACTOR +WHAT +WHEN_CLAUSE +WHERE +WHERE_CLAUSE +WHERE_IN_CODE +WHICH_QUEUE +WHY +WIDTH +WINDOWS_DOMAIN +WINDOW_ACTIVE +WINDOW_DURATION +WINDOW_DURATION_LAST_30_DAYS +WINDOW_DURATION_LAST_7_DAYS +WINDOW_END_TIME +WINDOW_GROUP +WINDOW_GROUP_NAME +WINDOW_NAME +WINDOW_NEXT_TIME +WINDOW_PRIORITY +WINDOW_START_TIME +WITH_CLUSTERING +WITH_GRANT_OPTION. +WITH_PLSQL +WITH_ROWID +WITH_ZONEMAP +WM$BCT_I_TRIG. +WM$CC_I_TRIG. +WM$CP_D_TRIG. +WM$CP_I_TRIG. +WM$CP_U_TRIG. +WM$CT_I_TRIG. +WM$CT_U_TRIG. +WM$EI_I_TRIG. +WM$EI_U_TRIG. +WM$EV_I_TRIG. +WM$HT_I_TRIG. +WM$LI_I_TRIG. +WM$MGWT_I_TRIG. +WM$MPWT_I_TRIG. +WM$MT_I_TRIG. +WM$MW_I_TRIG. +WM$NCT_I_TRIG. +WM$NT_I_TRIG. +WM$RLT_I_TRIG. +WM$RTT_I_TRIG. +WM$RT_D_TRIG. +WM$RT_I_TRIG. +WM$RWT_I_TRIG. +WM$SAV_I_TRIG. +WM$UDP_I_TRIG. +WM$UD_U_TRIG. +WM$UI_I_TRIG. +WM$VET_I_TRIG. +WM$VET_U_TRIG. +WM$VHT_I_TRIG. +WM$VTH_D_TRIG. +WM$VTH_I_TRIG. +WM$VTH_NT_D_TRIG. +WM$VTH_NT_I_TRIG. +WM$VTH_NT_U_TRIG. +WM$VTH_U_TRIG. +WM$VT_I_TRIG. +WM$WPT_D_TRIG. +WM$WPT_I_TRIG. +WM$WPT_U_TRIG. +WM$WST_I_TRIG. +WM$WT_D_TRIG. +WM$WT_I_TRIG. +WM$WT_U_TRIG. +WM_DDL_UTIL. +WM_DDL_UTIL.ADDCOLUMNS +WM_DDL_UTIL.ADDUSERCOLUMNS +WM_DDL_UTIL.ADDVALIDTIMESUPPORT +WM_DDL_UTIL.AVTDDL +WM_DDL_UTIL.BASEVIEW_COMMON +WM_DDL_UTIL.CARRYFORWARDPRIVSQL +WM_DDL_UTIL.CHECKFORERRORSEV +WM_DDL_UTIL.CHECK_MRIC_CASCADE +WM_DDL_UTIL.CONFVIEW_COMMON +WM_DDL_UTIL.CREATEAUXILIARYTABLE +WM_DDL_UTIL.CREATEBASEVIEW +WM_DDL_UTIL.CREATECONFLICTVIEW +WM_DDL_UTIL.CREATECONSVIEW +WM_DDL_UTIL.CREATEDIFFVIEW +WM_DDL_UTIL.CREATEHISTORYVIEW +WM_DDL_UTIL.CREATELCKTABLE +WM_DDL_UTIL.CREATELOCKVIEW +WM_DDL_UTIL.CREATEMWVIEW +WM_DDL_UTIL.CREATENESTEDTABLEBASEVIEW +WM_DDL_UTIL.CREATENESTEDTABLECONSVIEW +WM_DDL_UTIL.CREATETEMPTABLE +WM_DDL_UTIL.CREATETEMPTOPVIEW +WM_DDL_UTIL.CREATETOPVIEW +WM_DDL_UTIL.CREATEUNIONBASEVIEW +WM_DDL_UTIL.CREATEUSERVIEWS +WM_DDL_UTIL.CREATEVTTABLE +WM_DDL_UTIL.DELETENONLATESTDATAFROMLIVE +WM_DDL_UTIL.DELETENONLIVEDATA +WM_DDL_UTIL.DIFFVIEW_COMMON +WM_DDL_UTIL.DROPCONFLICTSRELATED +WM_DDL_UTIL.DROPDIFFRELATED +WM_DDL_UTIL.DROPWMCOLUMNS +WM_DDL_UTIL.FIXCONSTRAINTSEV +WM_DDL_UTIL.FIXINDEXEV +WM_DDL_UTIL.FIXPRIVSEV +WM_DDL_UTIL.GETASSOCIATEDINDEX +WM_DDL_UTIL.GETCOLSTREV +WM_DDL_UTIL.GETINDEXCLAUSE +WM_DDL_UTIL.GETINDEXCOLUMNS +WM_DDL_UTIL.GETINDEXSUBCLAUSE +WM_DDL_UTIL.GRANTWMSYSPRIVS +WM_DDL_UTIL.INDEXCREATEDBYCONSTRAINT +WM_DDL_UTIL.IS_RIC_CHILD_OF_ENABLED_TABLE +WM_DDL_UTIL.IS_RIC_PARENT +WM_DDL_UTIL.MODIFYNESTEDCOLUMNSDV +WM_DDL_UTIL.MODIFYNESTEDCOLUMNSEV +WM_DDL_UTIL.MODIFYNESTEDCOLUMNS_DDL +WM_DDL_UTIL.NESTEDTABLE_LTSELECT +WM_DDL_UTIL.REBUILDINDEX +WM_DDL_UTIL.RECREATEORIGINALCONSTRAINTS +WM_DDL_UTIL.RECREATEORIGINALINDICES +WM_DDL_UTIL.RECREATEPTAFTERTRIGS +WM_DDL_UTIL.RENAMECONSTRAINT +WM_DDL_UTIL.RENAMEINDEX +WM_DDL_UTIL.RENAMETABDV +WM_DDL_UTIL.RENAMETABEV +WM_DDL_UTIL.REVOKEWMSYSPRIVS +WM_DDL_UTIL.SYNCRONIZEVTVIEWS +WM_ERROR. +WM_ERROR.GETERRORSTR +WM_ERROR.RAISEERROR +WM_PERIOD.WM_PERIOD_MAP +WORKAREA_ADDRESS +WORKAREA_MAX_MEM +WORKAREA_MAX_TEMPSEG +WORKAREA_MEM +WORKAREA_TEMPSEG +WORKERS +WORKING +WORKLOAD_ID +WORKLOAD_NAME +WORKSPACE_NAME +WORK_AREA_SIZE +WORK_HEAP_MEM +WORK_MICROSEC +WORK_REQUEST_CLASS +WPG_DOCLOAD. +WPG_DOCLOAD.DOWNLOAD_FILE +WPG_DOCLOAD.GET_CONTENT_LENGTH +WPG_DOCLOAD.GET_DOWNLOAD_BFILE +WPG_DOCLOAD.GET_DOWNLOAD_BLOB +WPG_DOCLOAD.GET_DOWNLOAD_FILE +WPG_DOCLOAD.GET_DOWNLOAD_FILE_RAW +WPG_DOCLOAD.IS_FILE_DOWNLOAD +WPIUTL. +WPIUTL.SUBPFPARAM +WPIUTL.SUBPPARAM +WRAPS +WRB +WRB_FORCED_WRITE +WRC_ID +WRI +WRI$_ADV_ABSTRACT_T.SUB_CLEANUP +WRI$_ADV_ABSTRACT_T.SUB_CREATE +WRI$_ADV_ABSTRACT_T.SUB_DELETE +WRI$_ADV_ABSTRACT_T.SUB_DELETE_EXECUTION +WRI$_ADV_ABSTRACT_T.SUB_EXECUTE +WRI$_ADV_ABSTRACT_T.SUB_GET_REC_ATTR +WRI$_ADV_ABSTRACT_T.SUB_GET_REPORT +WRI$_ADV_ABSTRACT_T.SUB_GET_SCRIPT +WRI$_ADV_ABSTRACT_T.SUB_IMPLEMENT +WRI$_ADV_ABSTRACT_T.SUB_IMPORT_DIRECTIVES +WRI$_ADV_ABSTRACT_T.SUB_PARAM_VALIDATE +WRI$_ADV_ABSTRACT_T.SUB_QUICK_TUNE +WRI$_ADV_ABSTRACT_T.SUB_RESET +WRI$_ADV_ABSTRACT_T.SUB_RESUME +WRI$_ADV_ABSTRACT_T.SUB_UPDATE_REC_ATTR +WRI$_ADV_ABSTRACT_T.SUB_USER_SETUP +WRI$_ADV_ABSTRACT_T.SUB_VALIDATE_DIRECTIVE +WRI$_ADV_COMPRESSION_T.SUB_EXECUTE +WRI$_ADV_COMPRESSION_T.SUB_GET_REPORT +WRI$_ADV_HDM_T.SUB_DELETE +WRI$_ADV_HDM_T.SUB_EXECUTE +WRI$_ADV_HDM_T.SUB_GET_REPORT +WRI$_ADV_HDM_T.SUB_PARAM_VALIDATE +WRI$_ADV_HDM_T.SUB_RESET +WRI$_ADV_OBJSPACE_TREND_T.SUB_EXECUTE +WRI$_ADV_SPM_EVOLVE.SUB_DELETE +WRI$_ADV_SPM_EVOLVE.SUB_DELETE_EXECUTION +WRI$_ADV_SPM_EVOLVE.SUB_EXECUTE +WRI$_ADV_SPM_EVOLVE.SUB_GET_REPORT +WRI$_ADV_SPM_EVOLVE.SUB_GET_SCRIPT +WRI$_ADV_SPM_EVOLVE.SUB_PARAM_VALIDATE +WRI$_ADV_SPM_EVOLVE.SUB_RESET +WRI$_ADV_SPM_EVOLVE.SUB_RESUME +WRI$_ADV_SQLACCESS_ADV.SUB_CLEANUP +WRI$_ADV_SQLACCESS_ADV.SUB_CREATE +WRI$_ADV_SQLACCESS_ADV.SUB_DELETE +WRI$_ADV_SQLACCESS_ADV.SUB_EXECUTE +WRI$_ADV_SQLACCESS_ADV.SUB_GET_REC_ATTR +WRI$_ADV_SQLACCESS_ADV.SUB_GET_REPORT +WRI$_ADV_SQLACCESS_ADV.SUB_GET_SCRIPT +WRI$_ADV_SQLACCESS_ADV.SUB_IMPLEMENT +WRI$_ADV_SQLACCESS_ADV.SUB_IMPORT_DIRECTIVES +WRI$_ADV_SQLACCESS_ADV.SUB_PARAM_VALIDATE +WRI$_ADV_SQLACCESS_ADV.SUB_QUICK_TUNE +WRI$_ADV_SQLACCESS_ADV.SUB_RESET +WRI$_ADV_SQLACCESS_ADV.SUB_RESUME +WRI$_ADV_SQLACCESS_ADV.SUB_UPDATE_REC_ATTR +WRI$_ADV_SQLACCESS_ADV.SUB_USER_SETUP +WRI$_ADV_SQLACCESS_ADV.SUB_VALIDATE_DIRECTIVE +WRI$_ADV_SQLTUNE.SUB_DELETE +WRI$_ADV_SQLTUNE.SUB_DELETE_EXECUTION +WRI$_ADV_SQLTUNE.SUB_EXECUTE +WRI$_ADV_SQLTUNE.SUB_GET_REPORT +WRI$_ADV_SQLTUNE.SUB_GET_SCRIPT +WRI$_ADV_SQLTUNE.SUB_PARAM_VALIDATE +WRI$_ADV_SQLTUNE.SUB_RESET +WRI$_ADV_SQLTUNE.SUB_RESUME +WRI$_ADV_STATS.SUB_EXECUTE +WRI$_ADV_STATS.SUB_RESET +WRI$_ADV_STATS.SUB_RESUME +WRI$_ADV_TUNEMVIEW_ADV.SUB_CLEANUP +WRI$_ADV_TUNEMVIEW_ADV.SUB_DELETE +WRI$_ADV_TUNEMVIEW_ADV.SUB_EXECUTE +WRI$_ADV_TUNEMVIEW_ADV.SUB_GET_REC_ATTR +WRI$_ADV_TUNEMVIEW_ADV.SUB_GET_SCRIPT +WRI$_ADV_TUNEMVIEW_ADV.SUB_IMPLEMENT +WRI$_ADV_TUNEMVIEW_ADV.SUB_IMPORT_DIRECTIVES +WRI$_ADV_TUNEMVIEW_ADV.SUB_PARAM_VALIDATE +WRI$_ADV_TUNEMVIEW_ADV.SUB_QUICK_TUNE +WRI$_ADV_TUNEMVIEW_ADV.SUB_RESET +WRI$_ADV_TUNEMVIEW_ADV.SUB_RESUME +WRI$_ADV_TUNEMVIEW_ADV.SUB_UPDATE_REC_ATTR +WRI$_ADV_TUNEMVIEW_ADV.SUB_USER_SETUP +WRI$_ADV_TUNEMVIEW_ADV.SUB_VALIDATE_DIRECTIVE +WRI$_ADV_UNDO_ADV.SUB_EXECUTE +WRI$_ADV_WORKLOAD.SUB_CREATE +WRI$_ADV_WORKLOAD.SUB_DELETE +WRI$_ADV_WORKLOAD.SUB_GET_REPORT +WRI$_ADV_WORKLOAD.SUB_PARAM_VALIDATE +WRI$_ADV_WORKLOAD.SUB_RESET +WRI$_ADV_WORKLOAD.SUB_USER_SETUP +WRI$_REPT_ABSTRACT_T.CUSTOM_FORMAT +WRI$_REPT_ABSTRACT_T.GET_REPORT +WRI$_REPT_ABSTRACT_T.GET_REPORT_WITH_SUMMARY +WRI$_REPT_ADDM.GET_REPORT +WRI$_REPT_ARC.GET_REPORT +WRI$_REPT_ASH.GET_REPORT +WRI$_REPT_AWRV.GET_REPORT +WRI$_REPT_CELL.GET_REPORT +WRI$_REPT_CONFIG.GET_REPORT +WRI$_REPT_CPADDM.GET_REPORT +WRI$_REPT_DBHOME.GET_REPORT +WRI$_REPT_DBREPLAY.GET_REPORT +WRI$_REPT_EMX_PERF.GET_REPORT +WRI$_REPT_MEMORY.GET_REPORT +WRI$_REPT_OPTSTATS.GET_REPORT +WRI$_REPT_PERF.GET_REPORT +WRI$_REPT_PLAN_DIFF.GET_REPORT +WRI$_REPT_RSRCMGR.GET_REPORT +WRI$_REPT_RTADDM.GET_REPORT +WRI$_REPT_SECURITY.GET_REPORT +WRI$_REPT_SESSION.GET_REPORT +WRI$_REPT_SPMEVOLVE.GET_REPORT +WRI$_REPT_SQLDETAIL.GET_REPORT +WRI$_REPT_SQLMONITOR.GET_REPORT +WRI$_REPT_SQLMONITOR.GET_REPORT_WITH_SUMMARY +WRI$_REPT_SQLPI.CUSTOM_FORMAT +WRI$_REPT_SQLPI.GET_REPORT +WRI$_REPT_SQLT.GET_REPORT +WRI$_REPT_STATSADV.GET_REPORT +WRI$_REPT_STORAGE.GET_REPORT +WRI$_REPT_TCB.GET_REPORT +WRI$_REPT_XPLAN.GET_REPORT +WRITE +WRITE1 +WRITE10 +WRITE100 +WRITE1000 +WRITE10000 +WRITEDC +WRITES +WRITES# +WRITES_AUTOTUNE +WRITES_AVG +WRITES_FULL_THREAD_CKPT +WRITES_LOGFILE_SIZE +WRITES_LOG_CHECKPOINT_SETTINGS +WRITES_MTTR +WRITES_OTHER_SETTINGS +WRITES_SUM +WRITES_SUMX2 +WRITETIM +WRITE_COMPLETE_WAIT +WRITE_ERRS +WRITE_LATENCY +WRITE_MB_AVG +WRITE_MB_SUM +WRITE_MB_SUMX2 +WRITE_TIME +WRITE_TIMEOUT +WRITING +WRL_PARAMETER +WRL_TYPE +WRR$_ASH_TIME_PERIOD.WRR$_ASH_TIME_PERIOD +WTMAX +WTR_SLP_COUNT +X$KXFTASK +XACTS +XDB$ACL$XD. +XDB$CONFIG$XD. +XDB$DERIVATIONCHOICE.LOOKUPVALUE +XDB$DERIVATIONCHOICE.SETVALUE +XDB$ENUM2_T.LOOKUPVALUE +XDB$ENUM2_T.SETVALUE +XDB$ENUM_T.LOOKUPVALUE +XDB$ENUM_T.SETVALUE +XDB$EXTNAME2INTNAME. +XDB$FORMCHOICE.LOOKUPVALUE +XDB$FORMCHOICE.SETVALUE +XDB$INITXDBSCHEMA. +XDB$JAVATYPE.LOOKUPVALUE +XDB$JAVATYPE.SETVALUE +XDB$PATCHUPDELETESCHEMA. +XDB$PATCHUPSCHEMA. +XDB$PROCESSCHOICE.LOOKUPVALUE +XDB$PROCESSCHOICE.SETVALUE +XDB$RESCONFIG$XD. +XDB$STATS$XD. +XDB$TRANSIENTCHOICE.LOOKUPVALUE +XDB$TRANSIENTCHOICE.SETVALUE +XDB$USECHOICE.LOOKUPVALUE +XDB$USECHOICE.SETVALUE +XDB$WHITESPACECHOICE.LOOKUPVALUE +XDB$WHITESPACECHOICE.SETVALUE +XDBCONFIG_VALIDATE. +XDBHI_IM.ODCIGETINTERFACES +XDBHI_IM.ODCIINDEXALTER +XDBHI_IM.ODCIINDEXCLOSE +XDBHI_IM.ODCIINDEXCREATE +XDBHI_IM.ODCIINDEXDELETE +XDBHI_IM.ODCIINDEXDROP +XDBHI_IM.ODCIINDEXFETCH +XDBHI_IM.ODCIINDEXINSERT +XDBHI_IM.ODCIINDEXSTART +XDBHI_IM.ODCIINDEXUPDATE +XDBPI_FUNCIMPL. +XDBPI_FUNCIMPL.NOOP_FUNC +XDBPI_IM.ODCIGETINTERFACES +XDBPI_IM.ODCIINDEXCLOSE +XDBPI_IM.ODCIINDEXCREATE +XDBPI_IM.ODCIINDEXDELETE +XDBPI_IM.ODCIINDEXDROP +XDBPI_IM.ODCIINDEXFETCH +XDBPI_IM.ODCIINDEXINSERT +XDBPI_IM.ODCIINDEXSTART +XDBPI_IM.ODCIINDEXTRUNCATE +XDBPI_IM.ODCIINDEXUPDATE +XDBURITYPE.CREATEURI +XDBURITYPE.GETBLOB +XDBURITYPE.GETCLOB +XDBURITYPE.GETCONTENTTYPE +XDBURITYPE.GETEXTERNALURL +XDBURITYPE.GETRESOURCE +XDBURITYPE.GETURL +XDBURITYPE.GETXML +XDBURITYPE.XDBURITYPE +XDB_ANCOP. +XDB_ANCOP.ABSPATH_FUNC +XDB_ANCOP.ABSPATH_FUNC_INT +XDB_ANCOP.ALLPATH_FUNC +XDB_ANCOP.ALLPATH_FUNC_INT +XDB_ANCOP.DEPTH_FUNC +XDB_ANCOP.DEPTH_FUNC_INT +XDB_ANCOP.PATH_FUNC +XDB_ANCOP.PATH_FUNC_INT +XDB_DATASTORE_PROC. +XDB_DLTRIG_PKG. +XDB_DLTRIG_PKG.DLTRIG_UPD +XDB_FASTPATH_INSERT +XDB_FUNCIMPL. +XDB_FUNCIMPL.EQUAL_PATH_FUNC +XDB_FUNCIMPL.UNDER_PATH_FUNC +XDB_FUNCIMPL.UNDER_PATH_FUNC1 +XDB_NAME +XDB_PITRIG_PKG. +XDB_PITRIG_PKG.PITRIG_DEL +XDB_PITRIG_PKG.PITRIG_DELMETADATA +XDB_PITRIG_PKG.PITRIG_DROP +XDB_PITRIG_PKG.PITRIG_DROPMETADATA +XDB_PITRIG_PKG.PITRIG_TRUNCATE +XDB_PITRIG_PKG.PITRIG_UPD +XDB_PITRIG_PKG.PITRIG_UPDMETADATA +XDB_PITRIG_PKG_01. +XDB_PITRIG_PKG_01.PITRIG_DEL +XDB_PITRIG_PKG_01.PITRIG_DELMETADATA +XDB_PITRIG_PKG_01.PITRIG_UPD +XDB_PITRIG_PKG_01.PITRIG_UPDMETADATA +XDB_PI_TRIG. +XDB_PVTRIG_PKG. +XDB_PVTRIG_PKG.PVTRIG_DEL +XDB_PVTRIG_PKG.PVTRIG_INS +XDB_PVTRIG_PKG.PVTRIG_UPD +XDB_PV_TRIG. +XDB_RVTRIG_PKG. +XDB_RVTRIG_PKG.RVTRIG_DEL +XDB_RVTRIG_PKG.RVTRIG_INS +XDB_RVTRIG_PKG.RVTRIG_UPD +XDB_RV_TRIG. +XID +XIDSLOT +XIDSLT +XIDSQN +XIDUSN +XID_REPORT +XIMETADATA_PKG. +XIMETADATA_PKG.GETINDEXMETADATA +XIMETADATA_PKG.GETINDEXMETADATACALLBACK +XIMETADATA_PKG.UTLGETTABLENAMES +XMEMMEMBYTES +XMLBINARYINPUTSTREAM.AVAILABLE +XMLBINARYINPUTSTREAM.CLOSE +XMLBINARYINPUTSTREAM.ISNULL +XMLBINARYINPUTSTREAM.READ +XMLBINARYINPUTSTREAM.XMLBINARYINPUTSTREAM +XMLBINARYOUTPUTSTREAM.CLOSE +XMLBINARYOUTPUTSTREAM.FLUSH +XMLBINARYOUTPUTSTREAM.ISNULL +XMLBINARYOUTPUTSTREAM.WRITE +XMLBINARYOUTPUTSTREAM.XMLBINARYOUTPUTSTREAM +XMLCHARACTERINPUTSTREAM.AVAILABLE +XMLCHARACTERINPUTSTREAM.CLOSE +XMLCHARACTERINPUTSTREAM.ISNULL +XMLCHARACTERINPUTSTREAM.READ +XMLCHARACTERINPUTSTREAM.XMLCHARACTERINPUTSTREAM +XMLCHARACTEROUTPUTSTREAM.CLOSE +XMLCHARACTEROUTPUTSTREAM.FLUSH +XMLCHARACTEROUTPUTSTREAM.ISNULL +XMLCHARACTEROUTPUTSTREAM.WRITE +XMLCHARACTEROUTPUTSTREAM.XMLCHARACTEROUTPUTSTREAM +XMLGENFORMATTYPE.CREATEFORMAT +XMLGENFORMATTYPE.CREATEFORMAT2 +XMLGENFORMATTYPE.GENSCHEMA +XMLGENFORMATTYPE.SETDBURLPREFIX +XMLGENFORMATTYPE.SETENCLOSINGELEMENTNAME +XMLGENFORMATTYPE.SETPROCESSINGINS +XMLGENFORMATTYPE.SETSCHEMANAME +XMLGENFORMATTYPE.SETTARGETNAMESPACE +XMLGENFORMATTYPE.XMLGENFORMATTYPE +XMLIDXSTATSMETHODS.ODCIGETINTERFACES +XMLIDXSTATSMETHODS.ODCISTATSCOLLECT +XMLIDXSTATSMETHODS.ODCISTATSDELETE +XMLIDXSTATSMETHODS.ODCISTATSEXCHANGEPARTITION +XMLIDXSTATSMETHODS.ODCISTATSFUNCTIONCOST +XMLIDXSTATSMETHODS.ODCISTATSINDEXCOST +XMLIDXSTATSMETHODS.ODCISTATSSELECTIVITY +XMLIDXSTATSMETHODS.ODCISTATSTABLEFUNCTION +XMLIDXSTATSMETHODS.ODCISTATSUPDPARTSTATISTICS +XMLINDEXINSFUNC. +XMLINDEXLOADFUNC. +XMLINDEXLOAD_IMP_T.ODCITABLECLOSE +XMLINDEXLOAD_IMP_T.ODCITABLEFETCH +XMLINDEXLOAD_IMP_T.ODCITABLESTART +XMLINDEXMETHODS.ODCIGETINTERFACES +XMLINDEXMETHODS.ODCIINDEXALTER +XMLINDEXMETHODS.ODCIINDEXCLOSE +XMLINDEXMETHODS.ODCIINDEXCREATE +XMLINDEXMETHODS.ODCIINDEXDELETE +XMLINDEXMETHODS.ODCIINDEXDROP +XMLINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +XMLINDEXMETHODS.ODCIINDEXFETCH +XMLINDEXMETHODS.ODCIINDEXGETMETADATA +XMLINDEXMETHODS.ODCIINDEXINSERT +XMLINDEXMETHODS.ODCIINDEXSTART +XMLINDEXMETHODS.ODCIINDEXTRUNCATE +XMLINDEXMETHODS.ODCIINDEXUPDATE +XMLINDEXMETHODS.ODCIINDEXUPDPARTMETADATA +XMLINDEXMETHODS.ODCIINDEXUTILCLEANUP +XMLINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +XMLINDEX_FUNCIMPL. +XMLINDEX_FUNCIMPL.XMLINDEX_NOOP +XMLINDEX_REWRITE +XMLINDEX_REWRITE_IN_SELECT +XMLINDEX_SEL_IDX_TBL +XMLSCHEMA +XMLSEQCUR2_IMP_T.ODCITABLECLOSE +XMLSEQCUR2_IMP_T.ODCITABLEFETCH +XMLSEQCUR2_IMP_T.ODCITABLESTART +XMLSEQCUR_IMP_T.ODCITABLECLOSE +XMLSEQCUR_IMP_T.ODCITABLEFETCH +XMLSEQCUR_IMP_T.ODCITABLESTART +XMLSEQUENCEFROMREFCURSOR. +XMLSEQUENCEFROMREFCURSOR2. +XMLSEQUENCEFROMXMLTYPE. +XMLSEQ_IMP_T.ODCITABLECLOSE +XMLSEQ_IMP_T.ODCITABLEFETCH +XMLSEQ_IMP_T.ODCITABLESTART +XMLTSET_DML_ENABLE +XMLTYPE.APPENDCHILDXML +XMLTYPE.CREATENONSCHEMABASEDXML +XMLTYPE.CREATESCHEMABASEDXML +XMLTYPE.CREATEXML +XMLTYPE.CREATEXMLFROMBINARY +XMLTYPE.DELETEXML +XMLTYPE.EXISTSNODE +XMLTYPE.EXTRACT +XMLTYPE.GETBLOBVAL +XMLTYPE.GETCLOBVAL +XMLTYPE.GETNAMESPACE +XMLTYPE.GETNUMBERVAL +XMLTYPE.GETROOTELEMENT +XMLTYPE.GETSCHEMAID +XMLTYPE.GETSCHEMAURL +XMLTYPE.GETSTRINGVAL +XMLTYPE.INSERTXMLBEFORE +XMLTYPE.ISFRAGMENT +XMLTYPE.ISSCHEMABASED +XMLTYPE.ISSCHEMAVALID +XMLTYPE.ISSCHEMAVALIDATED +XMLTYPE.SCHEMAVALIDATE +XMLTYPE.SETSCHEMAVALIDATED +XMLTYPE.TOOBJECT +XMLTYPE.TRANSFORM +XMLTYPE.XMLTYPE +XMLVALIDATE. +XML_DML_RWT_STMT +XML_SCHEMA_NAME_PRESENT. +XML_SCHEMA_NAME_PRESENT.IS_SCHEMA_PRESENT +XNC +XOQ_VALIDATE. +XPATHINDEXMETHODS.ODCIGETINTERFACES +XPATHINDEXMETHODS.ODCIINDEXALTER +XPATHINDEXMETHODS.ODCIINDEXCLOSE +XPATHINDEXMETHODS.ODCIINDEXCREATE +XPATHINDEXMETHODS.ODCIINDEXDELETE +XPATHINDEXMETHODS.ODCIINDEXDROP +XPATHINDEXMETHODS.ODCIINDEXEXCHANGEPARTITION +XPATHINDEXMETHODS.ODCIINDEXFETCH +XPATHINDEXMETHODS.ODCIINDEXGETMETADATA +XPATHINDEXMETHODS.ODCIINDEXINSERT +XPATHINDEXMETHODS.ODCIINDEXMERGEPARTITION +XPATHINDEXMETHODS.ODCIINDEXSPLITPARTITION +XPATHINDEXMETHODS.ODCIINDEXSTART +XPATHINDEXMETHODS.ODCIINDEXTRUNCATE +XPATHINDEXMETHODS.ODCIINDEXUPDATE +XPATHINDEXMETHODS.ODCIINDEXUTILCLEANUP +XPATHINDEXMETHODS.ODCIINDEXUTILGETTABLENAMES +XQSEQUENCEFROMXMLTYPE. +XQSEQ_IMP_T.ODCITABLECLOSE +XQSEQ_IMP_T.ODCITABLEFETCH +XQSEQ_IMP_T.ODCITABLESTART +XQWINDOWSEQUENCEFROMXMLTYPE. +XQWINDOWSEQ_IMP_T.ODCITABLECLOSE +XQWINDOWSEQ_IMP_T.ODCITABLEFETCH +XQWINDOWSEQ_IMP_T.ODCITABLESTART +XS$ACE_TYPE.GET_END_DATE +XS$ACE_TYPE.GET_PRINCIPAL +XS$ACE_TYPE.GET_PRINCIPAL_TYPE +XS$ACE_TYPE.GET_PRIVILEGES +XS$ACE_TYPE.GET_START_DATE +XS$ACE_TYPE.IS_GRANTED +XS$ACE_TYPE.IS_INVERTED_PRINCIPAL +XS$ACE_TYPE.SET_END_DATE +XS$ACE_TYPE.SET_GRANT +XS$ACE_TYPE.SET_INVERTED_PRINCIPAL +XS$ACE_TYPE.SET_PRINCIPAL +XS$ACE_TYPE.SET_PRINCIPAL_TYPE +XS$ACE_TYPE.SET_PRIVILEGES +XS$ACE_TYPE.SET_START_DATE +XS$ACE_TYPE.XS$ACE_TYPE +XS$COLUMN_CONSTRAINT_TYPE.ADD_COLUMNS +XS$COLUMN_CONSTRAINT_TYPE.GET_COLUMNS +XS$COLUMN_CONSTRAINT_TYPE.GET_PRIVILEGE +XS$COLUMN_CONSTRAINT_TYPE.SET_COLUMNS +XS$COLUMN_CONSTRAINT_TYPE.SET_PRIVILEGE +XS$COLUMN_CONSTRAINT_TYPE.XS$COLUMN_CONSTRAINT_TYPE +XS$KEY_TYPE.GET_FOREIGN_KEY +XS$KEY_TYPE.GET_FOREIGN_KEY_TYPE +XS$KEY_TYPE.GET_PRIMARY_KEY +XS$KEY_TYPE.SET_FOREIGN_KEY +XS$KEY_TYPE.SET_FOREIGN_KEY_TYPE +XS$KEY_TYPE.SET_PRIMARY_KEY +XS$KEY_TYPE.XS$KEY_TYPE +XS$NS_ATTRIBUTE.GET_ATTRIBUTE_EVENTS +XS$NS_ATTRIBUTE.GET_DEFAULT_VALUE +XS$NS_ATTRIBUTE.GET_NAME +XS$NS_ATTRIBUTE.SET_ATTRIBUTE_EVENTS +XS$NS_ATTRIBUTE.SET_DEFAULT_VALUE +XS$NS_ATTRIBUTE.XS$NS_ATTRIBUTE +XS$PRIVILEGE.GET_DESCRIPTION +XS$PRIVILEGE.GET_IMPLIED_PRIVILEGES +XS$PRIVILEGE.GET_NAME +XS$PRIVILEGE.SET_DESCRIPTION +XS$PRIVILEGE.SET_IMPLIED_PRIVILEGES +XS$PRIVILEGE.XS$PRIVILEGE +XS$REALM_CONSTRAINT_TYPE.ADD_ACLS +XS$REALM_CONSTRAINT_TYPE.ADD_KEYS +XS$REALM_CONSTRAINT_TYPE.GET_ACLS +XS$REALM_CONSTRAINT_TYPE.GET_DESCRIPTION +XS$REALM_CONSTRAINT_TYPE.GET_KEYS +XS$REALM_CONSTRAINT_TYPE.GET_PARENT_OBJECT +XS$REALM_CONSTRAINT_TYPE.GET_PARENT_SCHEMA +XS$REALM_CONSTRAINT_TYPE.GET_REALM +XS$REALM_CONSTRAINT_TYPE.GET_TYPE +XS$REALM_CONSTRAINT_TYPE.GET_WHEN_CONDITION +XS$REALM_CONSTRAINT_TYPE.IS_DYNAMIC_REALM +XS$REALM_CONSTRAINT_TYPE.IS_PARAMETERIZED_REALM +XS$REALM_CONSTRAINT_TYPE.IS_STATIC_REALM +XS$REALM_CONSTRAINT_TYPE.SET_ACLS +XS$REALM_CONSTRAINT_TYPE.SET_DESCRIPTION +XS$REALM_CONSTRAINT_TYPE.SET_DYNAMIC +XS$REALM_CONSTRAINT_TYPE.SET_KEYS +XS$REALM_CONSTRAINT_TYPE.SET_PARENT_OBJECT +XS$REALM_CONSTRAINT_TYPE.SET_PARENT_SCHEMA +XS$REALM_CONSTRAINT_TYPE.SET_REALM +XS$REALM_CONSTRAINT_TYPE.SET_STATIC +XS$REALM_CONSTRAINT_TYPE.SET_WHEN_CONDITION +XS$REALM_CONSTRAINT_TYPE.XS$REALM_CONSTRAINT_TYPE +XS$ROLE_GRANT_TYPE.GET_END_DATE +XS$ROLE_GRANT_TYPE.GET_ROLE_NAME +XS$ROLE_GRANT_TYPE.GET_START_DATE +XS$ROLE_GRANT_TYPE.SET_END_DATE +XS$ROLE_GRANT_TYPE.SET_START_DATE +XS$ROLE_GRANT_TYPE.XS$ROLE_GRANT_TYPE +XSTREAM_TYPE +XS_ACL. +XS_ACL.ADD_ACL_PARAMETER +XS_ACL.APPEND_ACES +XS_ACL.CREATE_ACL +XS_ACL.DELETE_ACL +XS_ACL.REMOVE_ACES +XS_ACL.REMOVE_ACL_PARAMETERS +XS_ACL.SET_DESCRIPTION +XS_ACL.SET_PARENT_ACL +XS_ACL.SET_SECURITY_CLASS +XS_ACL_INT. +XS_ACL_INT.ADD_ACL_PARAMETER +XS_ACL_INT.APPEND_ACES +XS_ACL_INT.CREATE_ACL +XS_ACL_INT.DELETE_ACL +XS_ACL_INT.REMOVE_ACES +XS_ACL_INT.REMOVE_ACL_PARAMETERS +XS_ACL_INT.SET_DESCRIPTION +XS_ACL_INT.SET_PARENT_ACL +XS_ACL_INT.SET_SECURITY_CLASS +XS_ADMIN_INT. +XS_ADMIN_INT.ADMIN_AUDIT +XS_ADMIN_INT.CHECK_PERMISSION +XS_ADMIN_INT.CREATE_DEPENDENCY +XS_ADMIN_INT.CREATE_ENTITY +XS_ADMIN_INT.DELETE_DEPENDENCY +XS_ADMIN_INT.DELETE_ENTITY +XS_ADMIN_INT.GET_ENTITY_ID +XS_ADMIN_INT.INVALIDATE_ENTITY +XS_ADMIN_INT.VALIDATE_ENTITY_NAME +XS_ADMIN_UTIL. +XS_ADMIN_UTIL.CHECK_LENGTH +XS_ADMIN_UTIL.CHECK_SEEDED +XS_ADMIN_UTIL.DROP_SCHEMA_OBJECTS +XS_ADMIN_UTIL.GET_DEFAULT_WORKSPACE +XS_ADMIN_UTIL.GET_OBJECT_ID +XS_ADMIN_UTIL.GRANT_SYSTEM_PRIVILEGE +XS_ADMIN_UTIL.RAISE_ERROR +XS_ADMIN_UTIL.REMOVE_DBUSER_ACES +XS_ADMIN_UTIL.REVOKE_SYSTEM_PRIVILEGE +XS_ADMIN_UTIL.SET_DEFAULT_WORKSPACE +XS_ADMIN_UTIL.VALIDATE_DB_OBJECT_NAME +XS_ADMIN_UTIL.VALIDATE_DB_USER +XS_ADMIN_UTIL.XSNAME_TO_ID +XS_ADMIN_UTIL_INT. +XS_ADMIN_UTIL_INT.GRANT_SYSTEM_PRIVILEGE +XS_ADMIN_UTIL_INT.REMOVE_DBUSER_ACES +XS_ADMIN_UTIL_INT.REVOKE_SYSTEM_PRIVILEGE +XS_CALLBACK_EVENT_TYPE +XS_COOKIE +XS_DATASEC_POLICY_NAME +XS_DATA_SECURITY. +XS_DATA_SECURITY.ADD_COLUMN_CONSTRAINTS +XS_DATA_SECURITY.APPEND_REALM_CONSTRAINTS +XS_DATA_SECURITY.APPLY_OBJECT_POLICY +XS_DATA_SECURITY.CREATE_ACL_PARAMETER +XS_DATA_SECURITY.CREATE_POLICY +XS_DATA_SECURITY.DELETE_ACL_PARAMETER +XS_DATA_SECURITY.DELETE_POLICY +XS_DATA_SECURITY.DISABLE_OBJECT_POLICY +XS_DATA_SECURITY.ENABLE_OBJECT_POLICY +XS_DATA_SECURITY.REMOVE_COLUMN_CONSTRAINTS +XS_DATA_SECURITY.REMOVE_OBJECT_POLICY +XS_DATA_SECURITY.REMOVE_REALM_CONSTRAINTS +XS_DATA_SECURITY.SET_DESCRIPTION +XS_DATA_SECURITY_INT. +XS_DATA_SECURITY_INT.ADD_COLUMN_CONSTRAINTS +XS_DATA_SECURITY_INT.APPEND_REALM_CONSTRAINTS +XS_DATA_SECURITY_INT.APPLY_OBJECT_POLICY +XS_DATA_SECURITY_INT.CREATE_ACL_PARAMETER +XS_DATA_SECURITY_INT.CREATE_POLICY +XS_DATA_SECURITY_INT.DELETE_ACL_PARAMETER +XS_DATA_SECURITY_INT.DELETE_POLICY +XS_DATA_SECURITY_INT.ENABLE_DISABLE_OBJECT_POLICY +XS_DATA_SECURITY_INT.REMOVE_COLUMN_CONSTRAINTS +XS_DATA_SECURITY_INT.REMOVE_OBJECT_POLICY +XS_DATA_SECURITY_INT.REMOVE_REALM_CONSTRAINTS +XS_DATA_SECURITY_INT.SET_DESCRIPTION +XS_DATA_SECURITY_UTIL. +XS_DATA_SECURITY_UTIL.ALTER_STATIC_ACL_REFRESH +XS_DATA_SECURITY_UTIL.PURGE_ACL_REFRESH_HISTORY +XS_DATA_SECURITY_UTIL.SCHEDULE_STATIC_ACL_REFRESH +XS_DATA_SECURITY_UTIL.SET_TRACE_LEVEL +XS_DATA_SECURITY_UTIL.XS$REFRESH_STATIC_ACL +XS_DATA_SECURITY_UTIL_INT. +XS_DATA_SECURITY_UTIL_INT.ALTER_STATIC_ACL_REFRESH +XS_DATA_SECURITY_UTIL_INT.PURGE_ACL_REFRESH_HISTORY +XS_DATA_SECURITY_UTIL_INT.SCHEDULE_STATIC_ACL_REFRESH +XS_DATA_SECURITY_UTIL_INT.SET_TRACE_LEVEL +XS_DATA_SECURITY_UTIL_INT.XS$REFRESH_STATIC_ACL +XS_DIAG. +XS_DIAG.VALIDATE_ACL +XS_DIAG.VALIDATE_DATA_SECURITY +XS_DIAG.VALIDATE_NAMESPACE_TEMPLATE +XS_DIAG.VALIDATE_PRINCIPAL +XS_DIAG.VALIDATE_ROLESET +XS_DIAG.VALIDATE_SECURITY_CLASS +XS_DIAG.VALIDATE_WORKSPACE +XS_DIAG_INT. +XS_DIAG_INT.CALL_VALIDATION +XS_DIAG_INT.VALIDATE_WORKSPACE +XS_ENABLED_ROLE +XS_ENTITY_TYPE +XS_INACTIVITY_TIMEOUT +XS_MTCACHE_INT. +XS_MTCACHE_INT.MIDTIER_CACHE_DELETE +XS_MTCACHE_INT.MIDTIER_CACHE_UPDATE +XS_MTCACHE_INT.SET_RETENTION_TIME +XS_NAMESPACE. +XS_NAMESPACE.ADD_ATTRIBUTES +XS_NAMESPACE.CREATE_TEMPLATE +XS_NAMESPACE.DELETE_TEMPLATE +XS_NAMESPACE.REMOVE_ATTRIBUTES +XS_NAMESPACE.SET_DESCRIPTION +XS_NAMESPACE.SET_HANDLER +XS_NAMESPACE_INT. +XS_NAMESPACE_INT.ADD_ATTRIBUTES +XS_NAMESPACE_INT.CREATE_TEMPLATE +XS_NAMESPACE_INT.DELETE_TEMPLATE +XS_NAMESPACE_INT.REMOVE_ATTRIBUTES +XS_NAMESPACE_INT.SET_DESCRIPTION +XS_NAMESPACE_INT.SET_HANDLER +XS_NS_ATTRIBUTE +XS_NS_ATTRIBUTE_NEW_VAL +XS_NS_ATTRIBUTE_OLD_VAL +XS_NS_NAME +XS_PACKAGE_NAME +XS_PRINCIPAL. +XS_PRINCIPAL.ADD_PROXY_TO_DBUSER +XS_PRINCIPAL.ADD_PROXY_USER +XS_PRINCIPAL.CREATE_DYNAMIC_ROLE +XS_PRINCIPAL.CREATE_ROLE +XS_PRINCIPAL.CREATE_USER +XS_PRINCIPAL.DELETE_PRINCIPAL +XS_PRINCIPAL.ENABLE_BY_DEFAULT +XS_PRINCIPAL.ENABLE_ROLES_BY_DEFAULT +XS_PRINCIPAL.GRANT_ROLES +XS_PRINCIPAL.REMOVE_PROXY_FROM_DBUSER +XS_PRINCIPAL.REMOVE_PROXY_USERS +XS_PRINCIPAL.REVOKE_ROLES +XS_PRINCIPAL.SET_ACL +XS_PRINCIPAL.SET_DESCRIPTION +XS_PRINCIPAL.SET_DYNAMIC_ROLE_DURATION +XS_PRINCIPAL.SET_DYNAMIC_ROLE_SCOPE +XS_PRINCIPAL.SET_EFFECTIVE_DATES +XS_PRINCIPAL.SET_GUID +XS_PRINCIPAL.SET_PASSWORD +XS_PRINCIPAL.SET_PROFILE +XS_PRINCIPAL.SET_USER_SCHEMA +XS_PRINCIPAL.SET_USER_STATUS +XS_PRINCIPAL.SET_VERIFIER +XS_PRINCIPAL_INT. +XS_PRINCIPAL_INT.ADD_PROXY_TO_DBUSER +XS_PRINCIPAL_INT.ADD_PROXY_TO_SCHEMA_INTERNAL +XS_PRINCIPAL_INT.ADD_PROXY_USER +XS_PRINCIPAL_INT.CREATE_DYNAMIC_ROLE +XS_PRINCIPAL_INT.CREATE_ROLE +XS_PRINCIPAL_INT.CREATE_USER +XS_PRINCIPAL_INT.DELETE_PRINCIPAL +XS_PRINCIPAL_INT.ENABLE_BY_DEFAULT +XS_PRINCIPAL_INT.ENABLE_ROLES_BY_DEFAULT +XS_PRINCIPAL_INT.GET_PRIN_TYPE +XS_PRINCIPAL_INT.GET_VERIFIER_TYPE +XS_PRINCIPAL_INT.GRANT_ROLES +XS_PRINCIPAL_INT.REMOVE_PROXY_FROM_DBUSER +XS_PRINCIPAL_INT.REMOVE_PROXY_USERS +XS_PRINCIPAL_INT.REVOKE_ROLES +XS_PRINCIPAL_INT.RM_PROXY_FROM_SCHEMA_INTERNAL +XS_PRINCIPAL_INT.SET_ACL +XS_PRINCIPAL_INT.SET_DESCRIPTION +XS_PRINCIPAL_INT.SET_DYNAMIC_ROLE_DURATION +XS_PRINCIPAL_INT.SET_DYNAMIC_ROLE_SCOPE +XS_PRINCIPAL_INT.SET_EFFECTIVE_DATES +XS_PRINCIPAL_INT.SET_GUID +XS_PRINCIPAL_INT.SET_PASSWORD_INTERNAL +XS_PRINCIPAL_INT.SET_PROFILE_INTERNAL +XS_PRINCIPAL_INT.SET_USER_SCHEMA +XS_PRINCIPAL_INT.SET_USER_STATUS +XS_PRINCIPAL_INT.SET_USER_STATUS_INTERNAL +XS_PRINCIPAL_INT.SET_VERIFIER_HELPER +XS_PRINCIPAL_INT.SET_VERIFIER_INTERNAL +XS_PROCEDURE_NAME +XS_PROXY_USER_NAME +XS_ROLESET. +XS_ROLESET.ADD_ROLES +XS_ROLESET.CREATE_ROLESET +XS_ROLESET.DELETE_ROLESET +XS_ROLESET.REMOVE_ROLES +XS_ROLESET.SET_DESCRIPTION +XS_ROLESET_INT. +XS_ROLESET_INT.ADD_ROLES +XS_ROLESET_INT.CREATE_ROLESET +XS_ROLESET_INT.DELETE_ROLESET +XS_ROLESET_INT.REMOVE_ROLES +XS_ROLESET_INT.SET_DESCRIPTION +XS_SCHEMA_NAME +XS_SECURITY_CLASS. +XS_SECURITY_CLASS.ADD_IMPLIED_PRIVILEGES +XS_SECURITY_CLASS.ADD_PARENTS +XS_SECURITY_CLASS.ADD_PRIVILEGES +XS_SECURITY_CLASS.CREATE_SECURITY_CLASS +XS_SECURITY_CLASS.DELETE_SECURITY_CLASS +XS_SECURITY_CLASS.REMOVE_IMPLIED_PRIVILEGES +XS_SECURITY_CLASS.REMOVE_PARENTS +XS_SECURITY_CLASS.REMOVE_PRIVILEGES +XS_SECURITY_CLASS.SET_DESCRIPTION +XS_SECURITY_CLASS_INT. +XS_SECURITY_CLASS_INT.ADD_IMPLIED_PRIVILEGES +XS_SECURITY_CLASS_INT.ADD_PARENTS +XS_SECURITY_CLASS_INT.ADD_PRIVILEGES +XS_SECURITY_CLASS_INT.CREATE_SECURITY_CLASS +XS_SECURITY_CLASS_INT.DELETE_SECURITY_CLASS +XS_SECURITY_CLASS_INT.REMOVE_IMPLIED_PRIVILEGES +XS_SECURITY_CLASS_INT.REMOVE_PARENTS +XS_SECURITY_CLASS_INT.REMOVE_PRIVILEGES +XS_SECURITY_CLASS_INT.SET_DESCRIPTION +XS_SESSIONID +XS_TARGET_PRINCIPAL_NAME +XS_USER_NAME +X_2_NULL +X_2_NULL_FORCED_STALE +X_2_NULL_FORCED_WRITE +X_2_S +X_2_SSX +X_2_SSX_FORCED_WRITE +X_2_S_FORCED_WRITE +X_DYN_PRUNE +YIELDS +ZERO_RESULTS +ZONEMAP +ZONEMAP_NAME +_4030_dump_bitvec +_4031_dump_bitvec +_4031_dump_interval +_4031_max_dumps +_4031_sga_dump_interval +_4031_sga_max_dumps +_AllowMultInsteadofDDLTrigger +_EnableDDLTtriggerTracing +_EnableShadowTypes +_ILM_FILTER_TIME +_ILM_FILTER_TIME_LOWER +_ILM_POLICY_NAME +_NUMA_bind_mode +_NUMA_float_spawner +_NUMA_instance_mapping +_NUMA_pool_size +_PX_use_large_pool +_REMOVE_INACTIVE_STANDBY_TDE_MASTER_KEY +_REMOVE_STDBY_OLD_KEY_AFTER_CHECKPOINT_SCN +_STFTranslateDynamicSQL +_VIEW_DICTIONARY_ACCESSIBILITY +__data_transfer_cache_size +__db_16k_cache_xmem_size_metadata +__db_2k_cache_xmem_size_metadata +__db_32k_cache_xmem_size_metadata +__db_4k_cache_xmem_size_metadata +__db_8k_cache_xmem_size_metadata +__db_cache_size +__db_cache_xmem_size_metadata +__db_keep_cache_xmem_size_metadata +__db_recycle_cache_xmem_size_metadata +__dg_broker_service_names +__inmemory_ext_roarea +__inmemory_ext_rwarea +__java_pool_size +__large_pool_size +__latch_test_param +__memoptimize_xmem_pool_size_metadata +__oracle_base +__persistent_cl2_slave_size +__pga_aggregate_target +__reload_lsnr +__sga_current_size +__sga_target +__shared_io_pool_size +__shared_pool_size +__streams_pool_size +__wait_test_param +_abort_on_mrp_crash +_abort_recovery_on_join +_ac_enable_dscn_in_rac +_ac_strict_SCN_check +_accept_versions +_active_instance_count +_active_session_idle_limit +_active_session_legacy_behavior +_active_standby_fast_reconfiguration +_adaptive_direct_read +_adaptive_direct_write +_adaptive_fetch_enabled +_adaptive_log_file_sync_high_switch_freq_threshold +_adaptive_log_file_sync_poll_aggressiveness +_adaptive_log_file_sync_sampling_count +_adaptive_log_file_sync_sampling_time +_adaptive_log_file_sync_sched_delay_window +_adaptive_log_file_sync_use_polling_threshold +_adaptive_log_file_sync_use_postwait_threshold +_adaptive_log_file_sync_use_postwait_threshold_aging +_adaptive_scalable_log_writer_disable_worker_threshold +_adaptive_scalable_log_writer_enable_worker_aging +_adaptive_scalable_log_writer_enable_worker_threshold +_adaptive_scalable_log_writer_sampling_count +_adaptive_scalable_log_writer_sampling_time +_adaptive_window_consolidator_enabled +_add_col_optim_enabled +_add_nullable_column_with_default_optim +_add_stale_mv_to_dependency_list +_add_trim_for_nlssort +_addm_auto_enable +_addm_skiprules +_addm_version_check +_adg_adt_redirect_apply_lag_threshold +_adg_adt_redirect_catchup_wait_time +_adg_auto_close_pdb +_adg_count_beyond_limit +_adg_defer_segstat +_adg_distributed_lockmaster +_adg_influx_qscn_gap +_adg_instance_recovery +_adg_objectlock_attempts +_adg_objectlock_maxnum +_adg_objectlock_timeout +_adg_parselock_timeout +_adg_parselock_timeout_sleep +_adg_redirect_flags +_adg_redirect_upd_to_primary_max_retries +_adjust_literal_replacement +_adr_migrate_runonce +_advanced_index_compression_cmp_options +_advanced_index_compression_opt_options +_advanced_index_compression_options +_advanced_index_compression_options_value +_advanced_index_compression_recmp_crsz +_advanced_index_compression_recmp_cusz +_advanced_index_compression_recmp_nprg +_advanced_index_compression_trace +_advanced_index_compression_tst_options +_advanced_index_compression_umem_options +_afd_disable_fence +_affinity_on +_aged_out_cursor_cache_time +_aggregation_optimization_settings +_aiowait_timeouts +_alert_expiration +_alert_message_cleanup +_alert_message_purge +_alert_post_background +_all_shared_dblinks +_alloc_perm_as_free +_allocate_creation_order +_allocate_flashback_buffer +_allocation_update_interval +_allow_cell_smart_scan_attr +_allow_commutativity +_allow_compatibility_adv_w_grp +_allow_convert_to_standby +_allow_cross_endian_dictionary +_allow_drop_snapshot_standby_grsp +_allow_drop_ts_with_grp +_allow_error_simulation +_allow_file_1_offline_error_1245 +_allow_insert_with_update_check +_allow_level_without_connect_by +_allow_read_only_corruption +_allow_resetlogs_corruption +_allow_terminal_recovery_corruption +_alter_upgrade_signature_only +_alternate_iot_leaf_block_split_points +_always_anti_join +_always_semi_join +_always_star_transformation +_always_vector_transformation +_analyze_comprehensive +_and_pruning_enabled +_app_container_debug +_app_default_containers +_app_ignore_errors +_app_replay_silent_errors +_application_purge_enabled +_application_script +_apppdb_multi_slave_sync +_appqos_cdb_setting +_appqos_po_multiplier +_appqos_qt +_approx_cnt_distinct_gby_pushdown +_approx_cnt_distinct_optimization +_approx_perc_sampling_err_rate +_approx_percentile_optimization +_apx_root_directory +_aq_Txn_ht_sz +_aq_addpt_batch_size +_aq_dly_bkt +_aq_dq_prefetch_Siz +_aq_dqblocks_in_cache +_aq_droppt_batch_size +_aq_free_list_pools +_aq_init_shards +_aq_ipc_max_slave +_aq_latency_absolute_threshold +_aq_latency_relative_threshold +_aq_lb_cycle +_aq_lb_garbage_col_interval +_aq_lb_stats_collect_cycle +_aq_lb_subht_bkt_ltch +_aq_lb_subht_elm_ltch +_aq_lookback_size +_aq_max_pdb_close_msg +_aq_max_scan_delay +_aq_opt_background_enabled +_aq_opt_enabled +_aq_opt_fudge_factor +_aq_opt_min_evict_memory +_aq_opt_preevict_dop +_aq_opt_prefetch_dop +_aq_opt_prefetch_horizon +_aq_opt_stat_window +_aq_opt_stop_stat +_aq_pt_processes +_aq_pt_shrink_frequency +_aq_pt_statistics_window +_aq_qt_prefetch_Size +_aq_retry_timeouts +_aq_scrambled_deqlog +_aq_shard_bitmap_child_latches +_aq_shard_child_latches +_aq_shard_prty_latches +_aq_shard_retry_child_latches +_aq_shard_sub_child_Elem_latches +_aq_shard_sub_child_latches +_aq_shard_txn_child_latches +_aq_stop_backgrounds +_aq_streaming_threshold +_aq_subshard_Size +_aq_subshards_per_dqpartition +_aq_subshards_per_qpartition +_aq_tm_deqcountinterval +_aq_tm_scanlimit +_aq_tm_statistics_duration +_aq_truncpt_batch_size +_aq_uncached_stats +_aq_x_mode +_aq_x_msg_size +_aqsharded_cache_limit +_arch_comp_dbg_scan +_arch_comp_dec_block_check_dump +_arch_compress_checksums +_arch_compression +_arch_io_slaves +_arch_sim_mode +_array_cdb_view_enabled +_array_update_vector_read_enabled +_ash_compression_enable +_ash_disk_filter_ratio +_ash_disk_write_enable +_ash_dummy_test_param +_ash_eflush_trigger +_ash_enable +_ash_min_mmnl_dump +_ash_progressive_flush_interval +_ash_sample_all +_ash_sampling_interval +_ash_size +_asm_access +_asm_access_assume_local +_asm_acd_chunks +_asm_admin_with_sysdba +_asm_allow_appliance_dropdisk_noforce +_asm_allow_dangerous_unprotected_volumes +_asm_allow_dgname_special_chars +_asm_allow_foreign_siteguids +_asm_allow_lvm_resilvering +_asm_allow_older_clients +_asm_allow_only_raw_disks +_asm_allow_prepare_split +_asm_allow_small_memory_target +_asm_allow_system_alias_rename +_asm_allow_unsafe_reconnect +_asm_allowdegeneratemounts +_asm_appliance_config_file +_asm_appliance_disable_fg_check +_asm_appliance_ignore_oak +_asm_appliance_slot_from_path +_asm_asmb_max_wait_timeout +_asm_asmb_rcvto +_asm_async_scrub_reap_wait +_asm_audit_sp_param +_asm_ausize +_asm_auto_online_interval +_asm_automatic_rezone +_asm_avoid_pst_scans +_asm_blksize +_asm_cancel_alert_time +_asm_cancel_delta +_asm_cclient_cleanup_timeout +_asm_check_for_misbehaving_cf_clients +_asm_compatibility +_asm_dba_batch +_asm_dba_spcchk_thld +_asm_dba_threshold +_asm_dbmsdg_nohdrchk +_asm_dependency_under_cfenqueue +_asm_diag_dead_clients +_asm_direct_con_expire_time +_asm_disable_amdu_dump +_asm_disable_async_msgs +_asm_disable_dangerous_failgroup_checking +_asm_disable_failgroup_count_checking +_asm_disable_failgroup_size_checking +_asm_disable_multiple_instance_check +_asm_disable_patch_compat +_asm_disable_proact_client_cleanup +_asm_disable_profilediscovery +_asm_disable_request_tracer +_asm_disable_smr_creation +_asm_disable_ufg_dump +_asm_disable_ufgmemberkill +_asm_disable_vtoc_check +_asm_disable_vxn_map_messages +_asm_disk_repair_time +_asm_diskerr_traces +_asm_diskgroups2 +_asm_diskgroups3 +_asm_diskgroups4 +_asm_emulate_nfs_disk +_asm_emulmax +_asm_emultimeout +_asm_enable_batch_scrub +_asm_enable_kfios +_asm_enable_kfks +_asm_enable_multiple_asmb +_asm_enable_parity_datafile_creation +_asm_enable_parity_scrub +_asm_enable_parityfile_creation +_asm_enable_xrov +_asm_evenread +_asm_evenread_alpha +_asm_evenread_alpha2 +_asm_evenread_faststart +_asm_fail_random_rx +_asm_fd_cln_idle_sess_twait +_asm_fd_cln_on_fg +_asm_fob_tac_frequency +_asm_force_parity_extent_check +_asm_force_paritycheck_rebalance +_asm_force_quiesce +_asm_force_vam +_asm_global_dump_level +_asm_hbeatiowait +_asm_hbeatwaitquantum +_asm_healthcheck_timeout +_asm_idn_processes +_asm_imbalance_tolerance +_asm_instlock_quota +_asm_ios_network_domains +_asm_ios_network_processes +_asm_iosconnect_timeout +_asm_iostat_latch_count +_asm_iowp_max_async +_asm_kfdpevent +_asm_kill_unresponsive_clients +_asm_libraries +_asm_log_scale_rebalance +_asm_lsod_bucket_size +_asm_max_aux_cods +_asm_max_clients +_asm_max_cod_strides +_asm_max_connected_clients +_asm_max_parallelios +_asm_max_redo_buffer_size +_asm_maxio +_asm_min_compatibility +_asm_netp_factor +_asm_netp_iosize +_asm_network_timeout +_asm_networks +_asm_node_site_guid +_asm_nodekill_escalate_time +_asm_noevenread_diskgroups +_asm_oda_type +_asm_offload_all +_asm_partner_target_disk_part +_asm_partner_target_fg_rel +_asm_primary_load +_asm_primary_load_cycles +_asm_procs_trace_diskerr +_asm_proxy_online_restart +_asm_proxy_startwait +_asm_pstonpartners +_asm_random_zone +_asm_read_cancel +_asm_read_cancel_back_out +_asm_rebalance_estimates_process +_asm_rebalance_plan_size +_asm_rebalance_space_errors +_asm_reloc_cic +_asm_relocation_async_lock_count +_asm_relocation_ignore_hard_failure +_asm_relocation_scheme +_asm_relocation_trace +_asm_remote_client_timeout +_asm_repairquantum +_asm_reserve_slaves +_asm_resyncCkpt +_asm_root_directory +_asm_runtime_capability_volume_support +_asm_scrub_async +_asm_scrub_disable_cod +_asm_scrub_limit +_asm_scrub_strict +_asm_scrub_unmatched_dba +_asm_secondary_load +_asm_secondary_load_cycles +_asm_serialize_volume_rebalance +_asm_shadow_cycle +_asm_skip_dbfile_ios +_asm_skip_diskval_check +_asm_skip_rename_check +_asm_skip_resize_check +_asm_storagemaysplit +_asm_stripesize +_asm_stripewidth +_asm_sync_rebalance +_asm_tcp_user_timeout +_asm_trace_limit_timeout +_asm_usd_batch +_asm_wait_time +_asm_write_badfdata_in_contentcheck +_asm_write_cancel +_asm_xrov_nstats +_asm_xrov_nvios +_asm_xrov_rsnmod +_asm_xrov_single +_asm_zero_power_limit +_asmsid +_assert_encrypted_tablespace_blocks +_assm_default +_assm_examination_blocks_threshold +_assm_examination_enable_sla +_assm_examination_time_threshold +_assm_force_fetchmeta +_assm_high_gsp_threshold +_assm_l1cleanout_throttle_time +_assm_latency_sampling_frequency +_assm_low_gsp_threshold +_assm_segment_extension_percent +_assm_segment_repair_bg +_assm_segment_repair_fg +_assm_segment_repair_maxblks +_assm_segment_repair_timelimit +_assm_space_cache_hb_expire +_assm_space_cache_max_segments +_assm_test_force_rej +_assm_test_force_rej2 +_assm_test_reentrant_gsp +_async_recovery_claims +_async_recovery_reads +_async_rta_broadcast +_async_scn_sync +_async_ts_threshold +_auto_assign_cg_for_sessions +_auto_bmr +_auto_bmr_bg_time +_auto_bmr_fc_time +_auto_bmr_file_header +_auto_bmr_max_rowno +_auto_bmr_noretry_window +_auto_bmr_pub_timeout +_auto_bmr_req_timeout +_auto_bmr_sess_threshold +_auto_bmr_sys_threshold +_auto_dismount_on_pdb_close +_auto_export_preplugin_backup +_auto_manage_enable_offline_check +_auto_manage_exadata_disks +_auto_manage_infreq_tout +_auto_manage_ioctl_bufsz +_auto_manage_max_online_tries +_auto_manage_num_pipe_msgs +_auto_manage_num_tries +_auto_manage_online_tries_expire_time +_auto_rcv_pdb_open +_auto_rekey_during_mrcv +_auto_start_pdb_services +_automatic_maintenance_test +_automemory_broker_interval +_autotask_max_window +_autotask_min_window +_autotask_test_action +_autotask_test_name +_autotune_gtx_idle_time +_autotune_gtx_interval +_autotune_gtx_threshold +_aux_dfc_keep_time +_available_core_count +_avoid_scn_growth +_awr_cdbperf_threshold +_awr_corrupt_mode +_awr_disabled_flush_tables +_awr_disabled_purge_tables +_awr_enable_pdb_snapshots +_awr_flush_threshold_metrics +_awr_flush_workload_metrics +_awr_incremental_flush_enabled +_awr_metrics_use_mmnl +_awr_mmon_cpuusage +_awr_mmon_deep_purge_all_expired +_awr_mmon_deep_purge_extent +_awr_mmon_deep_purge_interval +_awr_mmon_deep_purge_numrows +_awr_partition_interval +_awr_pdb_registration_enabled +_awr_restrict_mode +_awr_snapshot_level +_awr_sql_child_limit +_b_tree_bitmap_plans +_ba_cf_trace_buffer_size +_ba_container_filesystem_ausize +_ba_max_containers +_ba_max_groups +_ba_max_seg_bytes +_ba_timeouts_enabled +_background_process_opts +_backup_align_write_io +_backup_appliance_enabled +_backup_automatic_retry +_backup_block0 +_backup_bool_spare1 +_backup_bool_spare2 +_backup_bool_spare3 +_backup_bool_spare4 +_backup_disk_bufcnt +_backup_disk_bufsz +_backup_disk_io_slaves +_backup_dynamic_buffers +_backup_encrypt_opt_mode +_backup_file_bufcnt +_backup_file_bufsz +_backup_int_spare1 +_backup_int_spare2 +_backup_int_spare3 +_backup_int_spare4 +_backup_io_pool_size +_backup_kgc_blksiz +_backup_kgc_bufsz +_backup_kgc_memlevel +_backup_kgc_niters +_backup_kgc_perflevel +_backup_kgc_scheme +_backup_kgc_type +_backup_kgc_windowbits +_backup_ksfq_bufcnt +_backup_ksfq_bufmem_max +_backup_ksfq_bufsz +_backup_lzo_size +_backup_max_gap_size +_backup_max_wallet_session +_backup_min_ct_unused_optim +_backup_seq_bufcnt +_backup_seq_bufsz +_backup_text_spare1 +_backup_text_spare2 +_backup_text_spare3 +_backup_text_spare4 +_bct_bitmaps_per_file +_bct_buffer_allocation_max +_bct_buffer_allocation_min_extents +_bct_buffer_allocation_size +_bct_chunk_size +_bct_crash_reserve_size +_bct_file_block_size +_bct_file_extent_size +_bct_fixtab_file +_bct_health_check_interval +_bct_initial_private_dba_buffer_size +_bct_mrp_timeout +_bct_public_dba_buffer_dynresize +_bct_public_dba_buffer_maxsize +_bct_public_dba_buffer_size +_bequeath_via_broker +_bg_spawn_diag_opts +_big_scn_test_mode +_bigdata_external_table +_bigram_dependency_percentage +_bitmap_or_improvement_enabled +_block_dump_assert +_block_level_offload_high_lat_thresh +_block_sample_readahead_prob_threshold +_blockhm_flush_period +_blocking_sess_graph_cache_size +_blocks_per_cache_server +_bloom_extent_size +_bloom_filter_debug +_bloom_filter_enabled +_bloom_filter_ratio +_bloom_filter_setops_enabled +_bloom_filter_size +_bloom_folding_density +_bloom_folding_enabled +_bloom_folding_min +_bloom_max_size +_bloom_max_wait_time +_bloom_minmax_enabled +_bloom_predicate_enabled +_bloom_predicate_offload +_bloom_pruning_enabled +_bloom_pruning_setops_enabled +_bloom_pushing_max +_bloom_pushing_total_max +_bloom_rm_filter +_bloom_serial_filter +_bloom_sm_enabled +_bloom_use_shared_pool +_bloom_wait_on_rac +_bps_sanity_checks +_branch_tagging +_broadcast_scn_mode +_broadcast_scn_wait_timeout +_bsln_adaptive_thresholds_enabled +_bt_mmv_query_rewrite_enabled +_buddy_instance +_buddy_instance_num_read_buffers +_buddy_instance_scan_phase_threshold +_buddy_instance_start_rba_timeout +_buffer_busy_wait_timeout +_buffered_message_spill_age +_buffered_publisher_flow_control_threshold +_bufq_stop_flow_control +_build_deferred_mv_skipping_mvlog_update +_bump_highwater_mark_count +_bwr_for_flushed_pi +_bypass_srl_for_so_eor +_bypass_xplatform_error +_c3_external_scn_rejection_threshold_hours +_cache_fusion_pipelined_updates +_cache_orl_during_open +_cache_stats_monitor +_capability_simulate +_capture_buffer_size +_capture_pgadep +_capture_publisher_flow_control_threshold +_case_sensitive_logon +_catalog_foreign_restore +_causal_standby_wait_timeout +_cdb_compatible +_cdb_cross_container +_cdb_disable_pdb_limit +_cdb_fleet_sync_timeout +_cdb_port +_cdb_rac_affinity +_cdb_special_old_xplan +_cdb_spfile_inherit +_cdb_view_no_skip_migrate +_cdb_view_no_skip_restricted +_cdb_view_parallel_degree +_cdb_view_prefetch_batch_size +_cdb_view_rc_shelflife +_cdb_view_recursive_px_enabled +_cdc_subscription_owner +_cdmp_diagnostic_level +_cell_fast_file_create +_cell_fast_file_restore +_cell_file_format_chunk_size +_cell_index_scan_enabled +_cell_materialize_all_expressions +_cell_materialize_virtual_columns +_cell_object_expiration_hours +_cell_offload_backup_compression +_cell_offload_capabilities_enabled +_cell_offload_complex_processing +_cell_offload_expressions +_cell_offload_hybrid_processing +_cell_offload_hybridcolumnar +_cell_offload_predicate_reordering_enabled +_cell_offload_sys_context +_cell_offload_timezone +_cell_offload_vector_groupby +_cell_offload_vector_groupby_force +_cell_offload_virtual_columns +_cell_range_scan_enabled +_cell_storidx_minmax_enabled +_cell_storidx_mode +_cellcache_clause_default +_cellcache_default_flags +_cellcache_default_new +_cgs_allgroup_poll_time +_cgs_big_group_enabled +_cgs_combine_css_events +_cgs_comm_readiness_check +_cgs_dball_group_registration +_cgs_dbgroup_poll_time +_cgs_health_check_in_reconfig +_cgs_memberkill_from_rim_instance +_cgs_msg_batch_size +_cgs_msg_batching +_cgs_node_kill_escalation +_cgs_node_kill_escalation_wait +_cgs_os_level_connection_check +_cgs_os_level_connection_pthreadno +_cgs_os_level_connection_reqno +_cgs_publish_netinfo_collect_event_chm +_cgs_publish_netinfo_collect_event_haip +_cgs_reconfig_extra_wait +_cgs_reconfig_timeout +_cgs_send_timeout +_cgs_support_rim_disc +_cgs_ticket_sendback +_cgs_tickets +_cgs_zombie_member_kill_wait +_change_vector_buffers +_change_vector_read_sample_ratio +_check_block_after_checksum +_check_block_new_invariant_for_flashback +_check_column_length +_check_pdbid_in_redo +_check_ts_threshold +_child_read_ahead_dba_check +_cleanout_shrcur_buffers +_cleanup_rollback_entries +_cleanup_timeout +_cleanup_timeout_flags +_clear_buffer_before_reuse +_clear_preserved_buffers +_cli_cachebktalloc +_client_enable_auto_unregister +_client_ntfn_cleanup_interval +_client_ntfn_pinginterval +_client_ntfn_pingretries +_client_ntfn_pingtimeout +_client_result_cache_bypass +_client_result_cache_ramthreshold +_client_tstz_error_check +_clone_during_split +_clone_one_pdb_recovery +_close_cached_open_cursors +_close_deq_by_cond_curs +_cloud_name +_cloud_service_sim +_cloud_service_type +_cluster_flash_cache_slave_file +_cluster_flash_cache_slave_size +_cluster_instances_number +_cluster_library +_clusterwide_global_transactions +_collapse_wait_history +_collect_tempundo_stats +_collect_undo_stats +_column_compression_factor +_column_elimination_off +_column_level_stats +_column_stats_flush_interval +_column_stats_max_entries_per_stat +_column_stats_mem_limit +_column_tracking_level +_common_data_view_enabled +_common_user_prefix +_compilation_call_heap_extent_size +_complex_view_merging +_component_timing +_composite_interval_partition_creation_opt_enabled +_compression_above_cache +_compression_advisor +_compression_chain +_compression_compatibility +_con_map_sql_enforcement +_concurrency_chosen +_connect_by_use_union_all +_connection_broker_handout_accept +_connection_broker_host +_controlfile_auto_convert_behaviour +_controlfile_autobackup_delay +_controlfile_backup_copy_check +_controlfile_block_size +_controlfile_cell_flash_caching +_controlfile_enqueue_dump +_controlfile_enqueue_holding_time +_controlfile_enqueue_holding_time_tracking_size +_controlfile_enqueue_timeout +_controlfile_section_init_size +_controlfile_section_max_expand +_controlfile_split_brain_check +_controlfile_update_check +_controlfile_verify_on_mount +_convert_set_to_join +_coord_message_buffer +_corrupted_rollback_segments +_cost_equality_semi_join +_cp_num_hash_latches +_cpu_eff_thread_multiplier +_cpu_to_io +_cpu_util_adj_force +_cpu_util_adj_target +_cr_grant_global_role +_cr_grant_local_role +_cr_grant_only +_cr_multiblock_grant_only +_cr_server_log_flush +_cr_trc_buf_size +_crash_domain_on_exception +_create_stat_segment +_create_table_in_any_cluster +_cross_con_collection +_cross_con_row_count +_crs_2phase +_ctx_doc_policy_stems +_cu_row_locking +_cursor_bind_capture_area_size +_cursor_bind_capture_interval +_cursor_cache_time +_cursor_db_buffers_pinned +_cursor_diagnostic_node_agedout_count +_cursor_features_enabled +_cursor_obsolete_threshold +_cursor_plan_enabled +_cursor_plan_hash_version +_cursor_plan_unparse_enabled +_cursor_reload_failure_threshold +_cursor_runtimeheap_memlimit +_cursor_stats_enabled +_cvw_enable_weak_checking +_data_transfer_cache_bc_perc_x100 +_data_warehousing_scan_buffers +_data_warehousing_scan_flash_buffers +_data_warehousing_serial_scan +_datafile_cow +_datafile_open_errors_crash_instance +_datafile_write_errors_crash_instance +_datapump_compressbas_buffer_size +_datapump_conv_pga_lim +_datapump_gather_stats_on_load +_datapump_inherit_svcname +_datapump_metadata_buffer_size +_datapump_tabledata_buffer_size +_db_16k_cache_xmem_size +_db_16k_flash_cache_file +_db_16k_flash_cache_size +_db_2k_cache_xmem_size +_db_2k_flash_cache_file +_db_2k_flash_cache_size +_db_32k_cache_xmem_size +_db_32k_flash_cache_file +_db_32k_flash_cache_size +_db_4k_cache_xmem_size +_db_4k_flash_cache_file +_db_4k_flash_cache_size +_db_8k_cache_xmem_size +_db_8k_flash_cache_file +_db_8k_flash_cache_size +_db_aging_cool_count +_db_aging_freeze_cr +_db_aging_hot_criteria +_db_aging_stay_count +_db_aging_touch_time +_db_always_check_system_ts +_db_block_adjcheck +_db_block_adjchk_level +_db_block_align_direct_read +_db_block_bad_write_check +_db_block_buffers +_db_block_cache_history +_db_block_cache_history_level +_db_block_cache_history_lru +_db_block_cache_protect +_db_block_cache_protect_internal +_db_block_check_for_debug +_db_block_check_objtyp +_db_block_chunkify_ncmbr +_db_block_corruption_recovery_threshold +_db_block_do_full_mbreads +_db_block_hash_buckets +_db_block_hash_latches +_db_block_header_guard_level +_db_block_hi_priority_batch_size +_db_block_iterations_for_rm +_db_block_known_clean_pct +_db_block_lru_latches +_db_block_max_cr_dba +_db_block_max_scan_pct +_db_block_med_priority_batch_size +_db_block_numa +_db_block_prefetch_fast_longjumps_enabled +_db_block_prefetch_limit +_db_block_prefetch_override +_db_block_prefetch_private_cache_enabled +_db_block_prefetch_quota +_db_block_prefetch_skip_reading_enabled +_db_block_prefetch_wasted_threshold_perc +_db_block_scandepth_for_rm +_db_block_table_scan_buffer_size +_db_block_temp_redo +_db_block_trace_protect +_db_block_vlm_check +_db_block_vlm_leak_threshold +_db_blocks_per_hash_latch +_db_bt_cache_only_readmostly_obj_on_roi +_db_cache_advice_hash_latch_multiple +_db_cache_advice_max_size_factor +_db_cache_advice_sample_factor +_db_cache_advice_sanity_check +_db_cache_block_read_stack_trace +_db_cache_block_read_stack_trace_where1 +_db_cache_block_read_stack_trace_where2 +_db_cache_block_read_stack_trace_where3 +_db_cache_crx_check +_db_cache_max_sz +_db_cache_miss_check_les +_db_cache_mman_latch_check +_db_cache_pre_warm +_db_cache_process_cr_pin_max +_db_cache_silicon_secured_memory +_db_cache_wait_debug +_db_cache_xmem_size +_db_change_notification_enable +_db_check_cell_hints +_db_disable_temp_encryption +_db_discard_lost_masterkey +_db_dump_from_disk_and_efc +_db_dw_scan_adaptive_cooling +_db_dw_scan_max_shadow_count +_db_dw_scan_obj_cooling_factor +_db_dw_scan_obj_cooling_interval +_db_dw_scan_obj_cooling_policy +_db_dw_scan_obj_warming_increment +_db_fast_obj_check +_db_fast_obj_ckpt +_db_fast_obj_truncate +_db_file_direct_io_count +_db_file_exec_read_count +_db_file_format_io_buffers +_db_file_noncontig_mblock_read_count +_db_file_optimizer_read_count +_db_flash_cache_disable_write_batchsize +_db_flash_cache_encryption +_db_flash_cache_force_replenish_limit +_db_flash_cache_keep_limit +_db_flash_cache_max_latency +_db_flash_cache_max_outstanding_writes +_db_flash_cache_max_read_retry +_db_flash_cache_max_slow_io +_db_flash_cache_slow_io_adjustment_interval +_db_flash_cache_write_limit +_db_flashback_iobuf_size +_db_flashback_log_min_size +_db_flashback_log_min_total_space +_db_flashback_num_iobuf +_db_full_caching +_db_full_db_cache_diff_pct +_db_generate_dummy_masterkey +_db_handles +_db_handles_cached +_db_hot_block_tracking +_db_imoltp_hashidx_force_nonctg +_db_index_block_checking +_db_initial_cachesize_create_mb +_db_keep_cache_xmem_size +_db_l2_tracing +_db_large_dirty_queue +_db_link_sources_tracking +_db_lost_write_checking +_db_lost_write_corrupt_block +_db_lost_write_tracing +_db_minimum_auxsize_percent +_db_mttr_advice +_db_mttr_partitions +_db_mttr_sample_factor +_db_mttr_sim_target +_db_mttr_sim_trace_size +_db_mttr_trace_to_alert +_db_noarch_disble_optim +_db_num_evict_waitevents +_db_num_gsm +_db_obj_enable_ksr +_db_percent_hot_default +_db_percent_hot_keep +_db_percent_hot_recycle +_db_percpu_create_cachesize +_db_prefetch_histogram_statistics +_db_recovery_temporal_file_dest +_db_recycle_cache_xmem_size +_db_required_percent_fairshare_usage +_db_row_overlap_checking +_db_shadow_lost_write_protect +_db_todefer_cache_create +_db_writer_chunk_writes +_db_writer_coalesce_area_size +_db_writer_coalesce_encrypted_buffers +_db_writer_coalesce_write_limit +_db_writer_flush_imu +_db_writer_histogram_statistics +_db_writer_max_writes +_db_writer_nomemcopy_coalesce +_db_writer_verify_writes +_db_xmem_cache_encryption +_db_xmem_hot_switch_criteria +_dbcomp_maxdump +_dbcomp_msg_ver +_dbfs_modify_implicit_fetch +_dbg_proc_startup +_dbg_scan +_dbms_sql_security_level +_dbmsumf$$1x +_dbmsumf$$2x +_dbmsumf$$3x +_dbmsumf$$nn +_dbmsumf$$p +_dbop_enabled +_dbpool_name +_dbreplay_feature_control +_dbrm_dynamic_threshold +_dbrm_num_runnable_list +_dbrm_quantum +_dbrm_runchk +_dbrm_short_wait_us +_dbwr_async_io +_dbwr_flashlock_shrink_limit +_dbwr_nowrite_assert_interval +_dbwr_nwp_assert_interval +_dbwr_scan_interval +_dbwr_stall_write_detection_interval +_dbwr_tracing +_dd_validate_remote_locks +_dde_flood_control_init +_dead_process_scan_interval +_deadlock_diagnostic_level +_deadlock_record_to_alert_log +_deadlock_resolution_incidents_always +_deadlock_resolution_incidents_enabled +_deadlock_resolution_level +_deadlock_resolution_min_wait_timeout_secs +_deadlock_resolution_signal_process_thresh_secs +_dedicated_server_poll_count +_dedicated_server_post_wait +_dedicated_server_post_wait_call +_default_encrypt_alg +_default_non_equality_sel_check +_defer_eor_orl_arch_for_so +_defer_log_boundary_ckpt +_defer_log_count +_defer_rcv_during_sw_to_sby +_defer_sga_alloc_chunk_size +_defer_sga_enabled +_defer_sga_min_spsz_at_startup +_defer_sga_min_total_defer_segs_sz +_defer_sga_test_alloc_intv +_deferred_constant_folding_mode +_deferred_log_dest_is_valid +_deferred_seg_in_seed +_delay_index_maintain +_delete_ghost_data +_delta_push_share_blockers +_deq_execute_reset_time +_deq_ht_child_latches +_deq_ht_max_elements +_deq_large_txn_size +_deq_log_array_size +_deq_max_fetch_count +_deq_maxwait_time +_desired_readmem_rate +_df_hist_offl_override +_dg_broker_trace_level +_dg_cf_check_timer +_dg_corrupt_redo_log +_diag_adl_dyn_alloc +_diag_adr_auto_purge +_diag_adr_enabled +_diag_adr_test_param +_diag_adr_trace_dest +_diag_alert_root_annotate +_diag_arb_before_kill +_diag_backward_compat +_diag_cc_enabled +_diag_cdb_logging +_diag_conf_cap_enabled +_diag_crashdump_level +_diag_daemon +_diag_dde_async_age_limit +_diag_dde_async_cputime_limit +_diag_dde_async_mode +_diag_dde_async_msg_capacity +_diag_dde_async_msgs +_diag_dde_async_process_rate +_diag_dde_async_runtime_limit +_diag_dde_async_slaves +_diag_dde_enabled +_diag_dde_fc_enabled +_diag_dde_fc_implicit_time +_diag_dde_fc_macro_time +_diag_dde_inc_proc_delay +_diag_diagnostics +_diag_dump_request_debug_level +_diag_dump_timeout +_diag_enable_startup_events +_diag_hm_rc_enabled +_diag_hm_tc_enabled +_diag_large_packets +_diag_patch_cap_enabled +_diag_pdb_control +_diag_pdb_purge_target +_diag_pdb_purge_threshold +_diag_proc_enabled +_diag_proc_max_time_ms +_diag_proc_stack_capture_type +_diag_test_seg_reinc_mode +_diag_uts_control +_diag_verbose_error_on_init +_diag_xm_enabled +_dimension_skip_null +_direct_io_skip_cur_slot_on_error +_direct_io_slots +_direct_io_wslots +_direct_path_insert_features +_direct_read_decision_statistics_driven +_dirty_appliance_mode +_disable_12751 +_disable_12cbigfile +_disable_active_influx_move +_disable_actualization_for_grant +_disable_adaptive_shrunk_aggregation +_disable_adp_adj_buf_check +_disable_appliance_check +_disable_appliance_partnering +_disable_asm_audit_feat +_disable_autotune_gtx +_disable_block_checking +_disable_cdb_view_rc_invalidation +_disable_cell_optimized_backups +_disable_con_recurse_queuing +_disable_cpu_check +_disable_cursor_sharing +_disable_data_block_check_after_decrypt +_disable_datalayer_sampling +_disable_dblink_optim +_disable_def_seg_update +_disable_destructive_patch_operation +_disable_dict_check_pdb_open +_disable_directory_link_check +_disable_duplex_link +_disable_duplicate_service_warning +_disable_fast_aggregation +_disable_fast_validate +_disable_fastopen +_disable_fba_qrw +_disable_fba_wpr +_disable_file_locks +_disable_file_resize_logging +_disable_flashback_archiver +_disable_flashback_recyclebin_opt +_disable_flashback_wait_callback +_disable_function_based_index +_disable_gvaq_cache +_disable_hcc_array_insert +_disable_health_check +_disable_highres_ticks +_disable_image_check +_disable_implicit_row_movement +_disable_incremental_checkpoints +_disable_incremental_recovery_ckpt +_disable_index_block_prefetching +_disable_initial_block_compression +_disable_instance_params_check +_disable_interface_checking +_disable_kcb_flashback_blocknew_opt +_disable_kcbhxor_osd +_disable_kcbl_flashback_blocknew_opt +_disable_kgghshcrc32_osd +_disable_logging +_disable_lostwrite_tablespace_alerts +_disable_metrics_group +_disable_modsvc_refresh +_disable_multiple_block_sizes +_disable_odm +_disable_oradebug_commands +_disable_os_time_page +_disable_parallel_conventional_load +_disable_primary_bitmap_switch +_disable_ptl_replay +_disable_read_only_open_dict_check +_disable_rebalance_space_check +_disable_recovery_read_skip +_disable_rolling_patch +_disable_sample_io_optim +_disable_savepoint_reset +_disable_selftune_checkpointing +_disable_storage_type +_disable_streams_diagnostics +_disable_streams_pool_auto_tuning +_disable_sun_rsm +_disable_system_state +_disable_system_state_wait_samples +_disable_system_tablespaces_enc_enforcement +_disable_temp_tablespace_alerts +_disable_thread_internal_disable +_disable_thread_snapshot +_disable_txn_alert +_disable_undo_tablespace_alerts +_disable_wait_state +_discard_cmn_ddl_in_pdb_err +_discrete_transactions_enabled +_disk_sector_size_override +_diskmon_pipe_name +_disksize_binary_search +_dispatcher_listen_on_vip +_dispatcher_rate_scale +_dispatcher_rate_ttl +_distinct_agg_optimization_gsets +_distinct_view_unnesting +_distributed_recovery_connection_hold_time +_disttxn_for_queries +_dlm_stats_collect +_dlm_stats_collect_du_limit +_dlm_stats_collect_mode +_dlm_stats_collect_slot_interval +_dlmtrace +_dm_dmf_details_compatibility +_dm_enable_legacy_dmf_output_types +_dm_inmemory_threshold +_dm_max_chunk_size +_dm_max_shared_pool_pct +_dml_batch_error_limit +_dml_frequency_tracking +_dml_frequency_tracking_advance +_dml_frequency_tracking_slot_time +_dml_frequency_tracking_slots +_dml_monitoring_enabled +_dmm_auto_max_features +_dmm_blas_library +_dmm_cnt_arr_size_threshold +_dmm_force_treetop_merge +_dmm_inc_cholesky_rows +_dmm_ipp_cutoff +_dmm_kmean_dense_threshold +_dmm_max_memory_size +_dmm_memory_size +_dmm_nobin_threshold +_dmm_pga_load_threshold +_dmm_reduction_rate +_dmm_sample_lower_threshold +_dmm_sample_upper_threshold +_dmm_ts_lapack +_dmsqr_qr_chunk_rows +_dnfs_rdma_enable +_dnfs_rdma_max +_dnfs_rdma_min +_domain_index_batch_size +_domain_index_dml_batch_size +_dra_bmr_number_threshold +_dra_bmr_percent_threshold +_dra_enable_offline_dictionary +_drain_on_ping_database +_drm_parallel_freeze +_drop_flashback_logical_operations_enq +_drop_stat_segment +_drop_table_granule +_drop_table_optimization_enabled +_drop_tablespace_objects +_ds_enable_auto_txn +_ds_enable_view_sampling +_ds_iocount_iosize +_ds_parse_model +_ds_progressive_initial_samples +_ds_progressive_no_matches_min_sample_size +_ds_sampling_method +_ds_xt_split_count +_dsc_feature_level +_dskm_health_check_cnt +_dskm_single_instance +_dss_cache_flush +_dss_cache_flush_threshold +_dtree_area_size +_dtree_binning_enabled +_dtree_max_surrogates +_dtree_pruning_enabled +_dummy_instance +_dump_10261_level +_dump_common_subexpressions +_dump_connect_by_loop_data +_dump_cursor_heap_sizes +_dump_interval_limit +_dump_max_limit +_dump_qbc_tree +_dump_rcvr_ipc +_dump_scn_increment_stack +_dump_system_state_scope +_dump_trace_scope +_duplicated_table_complete_refresh_percent +_dupt_noupdate +_dynamic_rls_policies +_dynamic_share_range_factor +_dynamic_stats_threshold +_early_flush_delta +_eighteenth_spare_parameter +_eighth_spare_parameter +_eightieth_spare_parameter +_eighty-eighth_spare_parameter +_eighty-fifth_spare_parameter +_eighty-first_spare_parameter +_eighty-fourth_spare_parameter +_eighty-ninth_spare_parameter +_eighty-second_spare_parameter +_eighty-seventh_spare_parameter +_eighty-sixth_spare_parameter +_eighty-third_spare_parameter +_eleventh_spare_parameter +_eliminate_common_subexpr +_emon_max_active_connections +_emon_outbound_connect_timeout +_emon_pool_inc +_emon_pool_max +_emon_pool_min +_emon_regular_ntfn_slaves +_emon_send_timeout +_emx_control +_emx_max_sessions +_emx_session_timeout +_ena_storage_lmt +_enable_12g_bft +_enable_Front_End_View_Optimization +_enable_NUMA_interleave +_enable_NUMA_optimization +_enable_NUMA_support +_enable_asyncvio +_enable_auto_upgrade +_enable_automatic_maintenance +_enable_automatic_sqltune +_enable_block_level_transaction_recovery +_enable_buffer_header_history +_enable_cdb_upgrade_capture +_enable_check_truncate +_enable_columnar_cache +_enable_containers_subquery +_enable_cscn_caching +_enable_dbwr_auto_tracing +_enable_ddl_wait_lock +_enable_default_affinity +_enable_default_temp_threshold +_enable_default_undo_threshold +_enable_dml_lock_escalation +_enable_drop_clone +_enable_editions_for_users +_enable_event_ports +_enable_exchange_validation_using_check +_enable_fast_file_zero +_enable_fast_ref_after_mv_tbs +_enable_ffw +_enable_flash_logging +_enable_guid_endpoint_service +_enable_hash_overflow +_enable_heatmap_internal +_enable_http_digest_generation +_enable_hwm_sync +_enable_iee_stats +_enable_ilm_flush_stats +_enable_ilm_testflush_stats +_enable_imc_mira +_enable_ios_spm +_enable_kernel_io_outliers +_enable_kqf_purge +_enable_list_io +_enable_metrics_allpdb +_enable_metrics_pdb +_enable_midtier_affinity +_enable_minscn_cr +_enable_module_match +_enable_multiple_fgprepares +_enable_nativenet_tcpip +_enable_obj_queues +_enable_offloaded_writes +_enable_online_index_without_s_locking +_enable_parallel_dml +_enable_partial_sync +_enable_pdb_close_abort +_enable_pdb_close_noarchivelog +_enable_pdb_isolation +_enable_pdb_process_limit +_enable_pluggable_database +_enable_pmo_outside_begin_end +_enable_proxy_adg_redirect +_enable_query_rewrite_on_remote_objs +_enable_redo_global_post +_enable_refresh_schedule +_enable_rejection_cache +_enable_reliable_latch_waits +_enable_rename_user +_enable_rlb +_enable_row_shipping +_enable_schema_synonyms +_enable_scn_wait_interface +_enable_secure_sub_role +_enable_securefile_flashback_opt +_enable_separable_transactions +_enable_shared_pool_durations +_enable_shared_server_sizing +_enable_shared_server_sizing_slope +_enable_shared_server_vector_io +_enable_single_dgprepare +_enable_space_preallocation +_enable_spacebg +_enable_sysaux_gdr +_enable_system_app +_enable_tablespace_alerts +_enable_thr_kill +_enable_type_dep_selectivity +_enable_verbose_gdr +_enable_view_pdb +_endprot_chunk_comment +_endprot_heap_comment +_endprot_subheaps +_enqueue_deadlock_detect_all_global_locks +_enqueue_deadlock_scan_secs +_enqueue_deadlock_time_sec +_enqueue_debug_multi_instance +_enqueue_hash +_enqueue_hash_chain_latches +_enqueue_locks +_enqueue_paranoia_mode_enabled +_enqueue_resources +_enqueue_scan_interval +_enqueue_sync_retry_attempts +_enqueue_sync_sim_mem_error +_error_row_predicate_evaluation +_event_port_opts +_evt_system_event_propagation +_exadata_feature_on +_exclude_seed_cdb_view +_expand_aggregates +_explain_rewrite_mode +_expression_tracking_elem_per_bucket +_expression_tracking_latch_count +_extended_pruning_enabled +_external_scn_activity_tracking +_external_scn_logging_threshold_seconds +_external_scn_rejection_delta_threshold_minutes +_external_scn_rejection_threshold_hours +_external_table_hive_partition_restricted +_external_table_smart_scan +_extra_lmn_enabled +_fair_remote_cvt +_fairness_threshold +_fast_cr_clone +_fast_cursor_reexecute +_fast_dual_enabled +_fast_full_scan_enabled +_fast_index_maintenance +_fast_psby_conversion +_fastpin_enable +_fatalprocess_redo_dump_time_limit +_fbda_busy_percentage +_fbda_debug_assert +_fbda_debug_mode +_fbda_global_bscn_lag +_fbda_inline_percentage +_fbda_rac_inactive_limit +_fbda_tcrv_cleanup_lag +_federation_max_root_clones +_federation_script +_fg_fast_sync_sleep_usecs +_fg_fast_sync_spin_usecs +_fg_iorm_slaves +_fg_log_checksum +_fg_sync_sleep_usecs +_fic_algorithm_set +_fic_area_size +_fic_min_bmsize +_fifteenth_spare_parameter +_fifth_spare_parameter +_fiftieth_spare_parameter +_fifty-eighth_spare_parameter +_fifty-fifth_spare_parameter +_fifty-first_spare_parameter +_fifty-fourth_spare_parameter +_fifty-ninth_spare_parameter +_fifty-second_spare_parameter +_fifty-seventh_spare_parameter +_fifty-sixth_spare_parameter +_fifty-third_spare_parameter +_file_offline_sync_timeout +_file_set_enqueue_timeout +_file_size_increase_increment +_filemap_dir +_first_k_rows_dynamic_proration +_first_spare_parameter +_fix_control +_fix_fuzzy_scn +_flashback_11_1_block_new_opt +_flashback_allow_noarchivelog +_flashback_archiver_partition_size +_flashback_barrier_interval +_flashback_copy_latches +_flashback_database_test_only +_flashback_delete_chunk_MB +_flashback_dynamic_enable +_flashback_dynamic_enable_failure +_flashback_enable_ra +_flashback_format_chunk_mb +_flashback_format_chunk_mb_dwrite +_flashback_fuzzy_barrier +_flashback_generation_buffer_size +_flashback_hint_barrier_percent +_flashback_log_io_error_behavior +_flashback_log_min_size +_flashback_log_rac_balance_factor +_flashback_log_size +_flashback_logfile_enqueue_timeout +_flashback_marker_cache_enabled +_flashback_marker_cache_size +_flashback_marker_for_every_grp +_flashback_max_log_size +_flashback_max_n_log_per_thread +_flashback_max_standby_sync_span +_flashback_n_log_per_thread +_flashback_prepare_log +_flashback_size_based_on_redo +_flashback_standby_barrier_interval +_flashback_standby_check_barrier_MIRA +_flashback_standby_check_minpfh_MIRA +_flashback_stby_support_mira +_flashback_validate_controlfile +_flashback_verbose_info +_flashback_write_max_loop_limit +_flush_ilm_stats +_flush_log_buffer_force +_flush_log_buffer_timeout +_flush_plan_in_awr_sql +_flush_redo_to_standby +_flush_undo_after_tx_recovery +_fob_dgaalloc +_fob_ospshare +_force_active_temp_detection +_force_arch_compress +_force_cloud_on +_force_containers_subquery +_force_datefold_trunc +_force_hash_join_spill +_force_hsc_compress +_force_java_pool_zero +_force_local_temp +_force_logging_in_upgrade +_force_oltp_compress +_force_oltp_update_opt +_force_partial_compress +_force_rewrite_enable +_force_slave_mapping_intra_part_loads +_force_standard_compile +_force_sys_compress +_force_temptables_for_gsets +_force_tmp_segment_loads +_forced_endian_type +_fortieth_spare_parameter +_forty-eighth_spare_parameter +_forty-fifth_spare_parameter +_forty-first_spare_parameter +_forty-fourth_spare_parameter +_forty-ninth_spare_parameter +_forty-second_spare_parameter +_forty-seventh_spare_parameter +_forty-sixth_spare_parameter +_forty-third_spare_parameter +_forwarded_2pc_threshold +_fourteenth_spare_parameter +_fourth_spare_parameter +_frame_cache_time +_freeze_kgh_timestamp +_full_diag_on_rim +_full_pwise_join_enabled +_fusion_security +_gby_hash_aggregation_enabled +_gby_onekey_enabled +_gby_vector_aggregation_enabled +_gc_affinity_locking +_gc_affinity_locks +_gc_affinity_ratio +_gc_anti_lock_ratio +_gc_async_receive +_gc_async_send +_gc_bg_merge +_gc_blocking_pins +_gc_buckets_per_latch +_gc_bypass_readers +_gc_check_bscn +_gc_coalesce_recovery_reads +_gc_cr_server_read_wait +_gc_defer_ping_index_only +_gc_defer_time +_gc_delay_ping +_gc_delta_push_objects +_gc_disable_s_lock_brr_ping_check +_gc_down_convert_after_keep +_gc_drm_windows +_gc_dump_remote_lock +_gc_element_percent +_gc_enable_cr_bypass +_gc_fast_index_split_wait +_gc_fg_merge +_gc_fg_spin_time +_gc_first_dirty_merge +_gc_flush_during_affinity +_gc_fusion_compression +_gc_global_checkpoint_scn +_gc_global_lru +_gc_global_lru_touch_count +_gc_global_lru_touch_time +_gc_integrity_checks +_gc_interconnect_checksum +_gc_keep_recovery_buffers +_gc_keep_undo_recovery_buffers +_gc_latches +_gc_lease_time +_gc_log_flush +_gc_max_downcvt +_gc_max_reg_sz +_gc_msgq_buffers +_gc_no_fairness_for_clones +_gc_numa_lock_elements +_gc_object_queue_max_length +_gc_override_force_cr +_gc_partial_cleanout +_gc_persistent_read_mostly +_gc_policy_minimum +_gc_policy_rm_dirty_percent +_gc_policy_time +_gc_read_mostly_flush_check +_gc_read_mostly_locking +_gc_sanity_check_cr_buffers +_gc_save_cleanout +_gc_serve_from_flash_cache +_gc_skip_undo_disk_read +_gc_statistics +_gc_temp_affinity +_gc_trace_blocking_pins +_gc_trace_freelist_empty +_gc_transfer_ratio +_gc_try_to_skip_imc_flush +_gc_undo_affinity +_gc_undo_block_disk_reads +_gc_undo_rdma_read +_gc_vector_read +_gcr_cpu_consumer_dump_level +_gcr_cpu_min_free +_gcr_cpu_min_hard_limit +_gcr_css_group_large +_gcr_css_group_query_boost +_gcr_css_group_try_lock_delay +_gcr_css_group_update2_interval +_gcr_css_group_update_interval +_gcr_css_use_2group_lock +_gcr_dump_cpu_consumers +_gcr_enable_high_cpu_kill +_gcr_enable_high_cpu_rm +_gcr_enable_high_cpu_rt +_gcr_enable_high_memory_kill +_gcr_enable_kill_inst_diags +_gcr_enable_new_drm_check +_gcr_enable_statistical_cpu_check +_gcr_high_cpu_threshold +_gcr_high_memory_threshold +_gcr_max_rt_procs +_gcr_mem_min_free +_gcr_min_free_memory_hard_limit +_gcr_tick +_gcr_use_css +_gcs_cluster_flash_cache_mode +_gcs_cluster_flash_cache_persistency +_gcs_cr_master_ping_remote +_gcs_crslave_check_time +_gcs_crslave_longq_cnt +_gcs_crslave_longq_us +_gcs_disable_imc_preallocation +_gcs_disable_remote_handles +_gcs_disable_skip_close_remastering +_gcs_dynamic_slaves +_gcs_enable_private_iterator +_gcs_fast_reconfig +_gcs_flash_cache_mode +_gcs_latches +_gcs_min_cr_slaves +_gcs_min_slaves +_gcs_pkey_history +_gcs_process_in_recovery +_gcs_recoverable_asserts +_gcs_res_hash_buckets +_gcs_res_per_bucket +_gcs_reserved_resources +_gcs_reserved_shadows +_gcs_resources +_gcs_shadow_locks +_gcs_testing +_gcs_trace_bucket +_gcs_trace_bucket_size +_gcs_track_reliable_block_sends +_gdr_clear_active_only +_gdr_clear_inactive_only +_gdr_control_flags +_gds_allow_nullkey +_gds_chunk_num +_gds_lddlid +_gds_max_chunk_num +_gds_shardgroup_id +_generalized_pruning_enabled +_ges_dd_debug +_ges_default_lmds +_ges_designated_master +_ges_diagnostics +_ges_diagnostics_asm_dump_level +_ges_direct_free +_ges_direct_free_res_type +_ges_dump_open_locks +_ges_fggl +_ges_freeable_res_chunk_free +_ges_freeable_res_chunk_free_interval +_ges_gather_res_reuse_stats +_ges_hash_groups +_ges_health_check +_ges_lmd_mapping +_ges_mseq_demo +_ges_nres_divide +_ges_num_blockers_to_kill +_ges_resource_memory_opt +_ges_server_processes +_ges_vbfreelists +_global_hang_analysis_interval_secs +_globaldict_analyzer_pct +_globaldict_chain_limit +_globaldict_check +_globaldict_chunk_minalloc +_globaldict_dbg +_globaldict_enable +_globaldict_max_gdsize +_globaldict_reprobe_limit +_globaldict_use_ndv +_globalindex_pnum_filter_enabled +_grant_read_instead_of_select +_grant_secure_role +_group_membership_bucket_batch_size +_group_membership_bucket_scan_timeout +_group_membership_entries_per_bucket +_groupby_nopushdown_cut_ratio +_groupby_orderby_combine +_gs_anti_semi_join_allowed +_gsm +_gsm_config_vers +_gsm_cpu_thresh +_gsm_drv_interval +_gsm_max_instances_per_db +_gsm_max_num_regions +_gsm_pool_size +_gsm_region_list +_gsm_srlat_thresh +_gsm_svcrgnmax +_gsm_thresh_respct +_gsm_thresh_zone +_gwm_database_flags +_gwm_db_unique_name +_gwm_spare1 +_gwm_spare2 +_gwm_spare3 +_gws_cache_version +_gws_deployed +_gws_sharding_method +_hang_allow_resolution_on_single_nonrac +_hang_analysis_num_call_stacks +_hang_appl_issue_session_threshold +_hang_asm_hang_resolution_enabled +_hang_base_file_count +_hang_base_file_space_limit +_hang_blocked_session_percent_threshold +_hang_bool_spare1 +_hang_bool_spare2 +_hang_cross_boundary_hang_detection_enabled +_hang_cross_cluster_hang_detection_enabled +_hang_deadlock_resolution_enabled +_hang_delay_resolution_for_libcache +_hang_detection_enabled +_hang_enable_processstate +_hang_hang_analyze_output_hang_chains +_hang_hang_blocked_session_delta_percent_threshold +_hang_hiload_promoted_ignored_hang_count +_hang_hiprior_session_attribute_list +_hang_hung_session_ewarn_percent +_hang_ignore_hngmtrc_interval +_hang_ignored_hang_count +_hang_ignored_hangs_interval +_hang_int_spare1 +_hang_int_spare2 +_hang_intersecting_chains_scanning_enabled +_hang_log_important_hangs_to_alert +_hang_log_io_hung_sessions_to_alert +_hang_log_verified_hangs_to_alert +_hang_long_wait_time_threshold +_hang_lws_file_count +_hang_lws_file_space_limit +_hang_max_session_hang_time +_hang_monitor_archiving_related_hang_interval +_hang_msg_checksum_enabled +_hang_promote_process_termination_interval +_hang_resolution_allow_archiving_issue_termination +_hang_resolution_confidence_promotion +_hang_resolution_global_hang_confidence_promotion +_hang_resolution_percent_hung_sessions_threshold +_hang_resolution_policy +_hang_resolution_promote_process_termination +_hang_resolution_scope +_hang_root_ha_phase_trigger_time +_hang_running_in_lrg +_hang_short_stacks_output_enabled +_hang_signature_list_match_output_frequency +_hang_statistics_collection_interval +_hang_statistics_collection_ma_alpha +_hang_statistics_high_io_percentage_threshold +_hang_terminate_session_replay_enabled +_hang_trace_interval +_hang_verification_interval +_hard_protection +_hash_join_enabled +_hash_multiblock_io_count +_hashops_prefetch_size +_hb_redo_interval +_hb_redo_msg_interval +_hcs_all_distinct +_hcs_avcache_dynamic_enabled +_hcs_expose_with_expr +_hcs_gen_aggr_opt_estimate +_hcs_ignore_latest_compat_check +_hcs_ignore_unsupported_calcs +_hcs_in_mem_cdt_hint +_hcs_logging +_hcs_mdx_cache_name_col +_hcs_mdx_cache_name_no_sid +_hcs_mdx_sleep_after_pin +_hcs_no_all_prune +_hcs_no_av_jback_opt +_hcs_no_bd_agg_opt +_hcs_no_calc_dtm_to_out_opt +_hcs_no_cell_qry_atr_prune_opt +_hcs_no_cell_qry_lvl_prune_opt +_hcs_no_cell_qry_meas_prune_opt +_hcs_no_cell_qry_mv_cache_opt +_hcs_no_cell_qry_no_calc_nav_opt +_hcs_no_cell_qry_no_out_data_opt +_hcs_no_cell_qry_tmpls +_hcs_no_col_prune_optz +_hcs_no_exists_distinct +_hcs_no_filter_hierarchies +_hcs_no_fltr_fact_opt +_hcs_no_fltr_hier_star_opt +_hcs_no_hier_join_map_nonnull +_hcs_no_hord_in_oby_prune +_hcs_no_inline_tmpl_opt +_hcs_no_jback_opt_for_hord_in_oby +_hcs_no_level_ord +_hcs_no_level_prune +_hcs_no_level_prune_gby +_hcs_no_level_prune_hier_join +_hcs_no_level_prune_hier_qry +_hcs_no_level_prune_hierarchize +_hcs_no_level_prune_in_qry +_hcs_no_level_prune_mbr_lookup +_hcs_no_level_prune_vis_lvs +_hcs_no_materialize +_hcs_no_mdx_cache_hint +_hcs_no_mv_rewrite_check +_hcs_no_opt_cell_qry +_hcs_no_opt_estimate +_hcs_no_result_cache_hint +_hcs_no_rm_like_withs_optz +_hcs_no_rm_unused_withs_optz +_hcs_no_rmv_unref_top_opt +_hcs_no_smooth_descendants +_hcs_no_smooth_drill_all +_hcs_no_smooth_hierarchize +_hcs_no_smooth_remove_all +_hcs_no_sp_jback_opt +_hcs_no_sql_pred_push +_hcs_no_tgt_depths_opt +_hcs_no_vis_totals +_hcs_opt_av_pred_push +_hcs_parallel_hint +_hcs_parse_dynamic_all_cache +_hcs_perf +_hcs_query_hint +_hcs_stats_max_card +_hcs_use_dynamic_all_cache +_hcs_use_multi_parent_gen +_heartbeat_config +_heartbeat_period_multiplier +_heatmap_format_1block +_heatmap_min_maxsize +_heur_deadlock_resolution_secs +_high_intrinsic_scn_growth_alert +_high_priority_processes +_high_threshold_delta +_highest_priority_processes +_highres_drift_allowed_sec +_highthreshold_undoretention +_hj_bit_filter_threshold +_hm_analysis_oradebug_sys_dump_level +_hm_xm_enabled +_hpk_compression_range +_hpk_project_cost_weighting +_hpk_throughput_range +_hugetlbfs_mount_point_for_sga +_hw_watchpoint_on +_hwm_sync_threshold +_iat_frequency_short +_idle_session_kill_enabled +_idxrb_rowincr +_ignore_desc_in_index +_ignore_edition_enabled_for_EV_creation +_ignore_fg_deps +_ilm_mem_limit +_ilmflush_stat_limit +_ilmset_stat_limit +_ilmstat_memlimit +_imado_diagtasks_log_period +_imado_diagtasks_purge_period +_imado_disable_bg +_imado_evict_sf +_imado_mem_threshold +_imado_optim_algo +_imado_optimize_period +_imado_sysaux_usage_limit +_imado_verification +_image_redo_gen_delay +_immediate_commit_propagation +_improved_outerjoin_card +_improved_row_length_enabled +_imr_active +_imr_avoid_double_voting +_imr_check_css_incarnation_number +_imr_controlfile_access_wait_time +_imr_dd_slave_wait_time +_imr_device_type +_imr_disk_voting_interval +_imr_diskvote_implementation +_imr_evicted_member_kill +_imr_evicted_member_kill_wait +_imr_extra_reconfig_wait +_imr_highload_threshold +_imr_largest_hub_membership +_imr_max_reconfig_delay +_imr_mount_retry_wait_time +_imr_non_blocking_device_driver +_imr_remount_retry_wait_time +_imr_rim_mount_device +_imr_rr_holder_kill_time +_imr_splitbrain_res_wait +_imr_systemload_check +_imtxn_table_enable +_imtxn_table_flags +_imtxn_table_max_inc_per_slt +_imtxn_table_max_slts_per_seg +_imtxn_table_max_undo_segs +_imtxnrma_table_enable +_imu_pools +_in_memory_cdt +_in_memory_cdt_maxpx +_in_memory_memory_threshold +_in_memory_tbs_search +_in_memory_ts_only +_in_memory_undo +_increase_lms_process +_incremental_purge_size +_incremental_recovery_ckpt_min_batch +_index_alert_key_not_found +_index_join_enabled +_index_load_analysis_frequency +_index_load_buf_oltp_over_retry +_index_load_buf_oltp_sacrifice_pct +_index_load_buf_oltp_under_pct +_index_load_last_leaf_comp +_index_load_min_key_count +_index_max_inc_trans_pct +_index_partition_large_extents +_index_prefetch_factor +_index_scan_check_skip_corrupt +_index_scan_check_stopkey +_index_split_chk_cancel +_indexable_con_id +_indoubt_pdb_transactions_force_outcome +_inet_cluster_interconnects +_influx_scn_wait_timeout +_influx_scn_waits +_init_granule_interval +_init_sql_file +_inject_simulated_error_period +_inject_startup_fault +_inline_sql_in_plsql +_inmemory_64k_percent +_inmemory_adg_batched_flush +_inmemory_adg_journal_quota +_inmemory_adg_parallel_flush +_inmemory_adg_periodic_sort +_inmemory_adg_quiesce_timeout +_inmemory_analyzer_optimize_for +_inmemory_auto_distribute +_inmemory_autodist_2safe +_inmemory_buffer_waittime +_inmemory_check_prot_meta +_inmemory_check_protect +_inmemory_checksum +_inmemory_crclone_buffer_size +_inmemory_crclone_min_clones +_inmemory_crclone_min_space_percent +_inmemory_crclone_threshold_rows +_inmemory_cu_checksum +_inmemory_cudrop_timeout +_inmemory_dbg_scan +_inmemory_default_flags +_inmemory_default_new +_inmemory_default_svc +_inmemory_default_svcname +_inmemory_delta_population +_inmemory_direct_reads +_inmemory_disable_alter_imco_cycle +_inmemory_disable_selective_vircols +_inmemory_distribute_ondemand_timeout +_inmemory_distribute_timeout +_inmemory_drcancel_cu_percent +_inmemory_dynamic_scan_disable_threshold +_inmemory_dynamic_scans +_inmemory_dynamic_scans_analyze_batch_size +_inmemory_dynamic_scans_batch_size +_inmemory_enable_population_verify +_inmemory_enable_readonly +_inmemory_enable_stat_alert +_inmemory_enable_sys +_inmemory_exclto_timeout +_inmemory_expression_count +_inmemory_expressions_area_percent +_inmemory_expressions_mark_unused +_inmemory_ext_roarea +_inmemory_ext_rwarea +_inmemory_external_table +_inmemory_faststart_control_flags +_inmemory_force_fs +_inmemory_force_fs_tbs +_inmemory_force_fs_tbs_size +_inmemory_force_non_engineered +_inmemory_format_compatible +_inmemory_fs_blk_inv_blk_percent +_inmemory_fs_blk_inv_blkcnt +_inmemory_fs_dmlverify_read_ahead_cnt +_inmemory_fs_enable +_inmemory_fs_enable_blk_lvl_inv +_inmemory_fs_nodml +_inmemory_fs_prune_pct +_inmemory_fs_raise_error +_inmemory_fs_tbsmaxsz +_inmemory_fs_verify +_inmemory_fsdw_cnt +_inmemory_fsdw_enable +_inmemory_fsdw_inline +_inmemory_fsdw_maxcnt +_inmemory_fsdw_maxmem +_inmemory_fsdw_on_populate +_inmemory_fsdw_penalty_threshold +_inmemory_fsdw_populate_threshold_multiplier +_inmemory_fsdw_priority_penalty_percent +_inmemory_fsdw_priority_population_percent +_inmemory_fsdw_priority_repopulation_percent +_inmemory_fsdw_schedlrtm +_inmemory_fsdw_scheduler_dedicated +_inmemory_fsdw_task_timeout +_inmemory_fsdw_threshold +_inmemory_granule_size +_inmemory_grpcolinv_buffer_size +_inmemory_grpcolinv_granularity +_inmemory_hwm_expand_percent +_inmemory_hwm_expansion +_inmemory_imco_cycle +_inmemory_imcu_align +_inmemory_imcu_populate_minbytes +_inmemory_imcu_source_analyze_bytes +_inmemory_imcu_source_blocks +_inmemory_imcu_source_extents +_inmemory_imcu_source_maxbytes +_inmemory_imcu_source_minbytes +_inmemory_imcu_target_bytes +_inmemory_imcu_target_maxrows +_inmemory_imcu_target_rows +_inmemory_incremental_repopulation +_inmemory_invalidate_cursors +_inmemory_journal_check +_inmemory_journal_cla_stride +_inmemory_journal_format +_inmemory_journal_row_logging +_inmemory_journal_scan +_inmemory_journal_scan_format +_inmemory_lock_for_smucreate +_inmemory_log_level +_inmemory_max_delta +_inmemory_max_expressions_table +_inmemory_max_populate_retry +_inmemory_max_queued_tasks +_inmemory_memprot +_inmemory_min_delta_blocks +_inmemory_min_delta_rows +_inmemory_min_ima_defersize +_inmemory_num_hash_latches +_inmemory_partrowlock_threshold +_inmemory_patch_background_blocks +_inmemory_patch_commit_path +_inmemory_patch_threshold_blocks +_inmemory_pct_inv_blocks_invalidate_imcu +_inmemory_pct_inv_rows_invalidate_imcu +_inmemory_pga_per_server +_inmemory_pin_hist_mode +_inmemory_populate_fg +_inmemory_populate_wait +_inmemory_populate_wait_max +_inmemory_prefer_xmem_memcompress +_inmemory_prefer_xmem_priority +_inmemory_prefix_encode_dsbs +_inmemory_prepopulate +_inmemory_prepopulate_fg +_inmemory_private_journal_maxexts +_inmemory_private_journal_numbkts +_inmemory_private_journal_numgran +_inmemory_private_journal_quota +_inmemory_private_journal_sharedpool_quota +_inmemory_pruning +_inmemory_query_check +_inmemory_query_fetch_by_rowid +_inmemory_query_scan +_inmemory_relimcusz_thresh +_inmemory_repopulate_disable +_inmemory_repopulate_flags +_inmemory_repopulate_invalidate_rate_percent +_inmemory_repopulate_optimize +_inmemory_repopulate_priority_scale_factor +_inmemory_repopulate_priority_threshold_block +_inmemory_repopulate_priority_threshold_row +_inmemory_repopulate_threshold_blocks +_inmemory_repopulate_threshold_blocks_percent +_inmemory_repopulate_threshold_mintime +_inmemory_repopulate_threshold_mintime_factor +_inmemory_repopulate_threshold_rows +_inmemory_repopulate_threshold_rows_percent +_inmemory_repopulate_threshold_scans +_inmemory_retention_time +_inmemory_rows_check_interrupt +_inmemory_scan_invalid_percent +_inmemory_scan_override +_inmemory_servers_throttle_pgalim_percent +_inmemory_shared_journal_maxexts +_inmemory_shared_journal_minexts_repop +_inmemory_small_segment_threshold +_inmemory_smu_patch_options +_inmemory_strdlxid_timeout +_inmemory_subcu_histsize +_inmemory_subcusize +_inmemory_suppress_vsga_ima +_inmemory_test_verification +_inmemory_transaction_options +_inmemory_trickle_repopulate +_inmemory_trickle_repopulate_fg +_inmemory_trickle_repopulate_min_interval +_inmemory_trickle_repopulate_threshold_dirty_ratio +_inmemory_txn_checksum +_inmemory_txnpjrnl_debug +_inmemory_validate_fetch +_inmemory_vector_encode_override +_inmemory_waitinvis_count +_inmemory_xmem_size +_inplace_update_retry +_inquiry_retry_interval +_insert_enable_hwm_brokered +_inst_locking_period +_instance_recovery_bloom_filter_fprate +_instance_recovery_bloom_filter_size +_instant_file_create +_intra_cdb_dblink +_intrapart_pdml_enabled +_intrapart_pdml_randomlocal_enabled +_invalidate_upon_revoke +_io_internal_test +_io_osd_param +_io_outlier_threshold +_io_resource_manager_always_on +_io_shared_pool_size +_io_slaves_disabled +_io_statistics +_iocalibrate_init_ios +_iocalibrate_max_ios +_ioq_fanin_multiplier +_ior_serialize_fault +_iorm_tout +_ios_root_directory +_ioslave_batch_count +_ioslave_issue_count +_ipc_config_opts_dyn +_ipc_config_opts_stat +_ipc_fail_network +_ipc_switch_reconfig_needed +_ipc_test_failover +_ipc_test_mult_nets +_ipddb_enable +_iut_enable +_iut_max_entries +_iut_stat_collection_type +_job_queue_interval +_k2q_latches +_ka_allow_reenable +_ka_compatibility_requirement +_ka_doorbell +_ka_enabled +_ka_grant_policy +_ka_locks_per_sector +_ka_max_wait_delay +_ka_mode +_ka_msg_reap_count +_ka_msg_wait_count +_ka_pbatch_messages +_ka_scn_accel_shrmem +_ka_scn_enabled +_ka_scn_use_ka_msgs +_kcbl_assert_reset_slot +_kcfis_automem_level +_kcfis_block_dump_level +_kcfis_byteswap_opt_disabled +_kcfis_caching_enabled +_kcfis_cell_passthru_dataonly +_kcfis_cell_passthru_enabled +_kcfis_cell_passthru_fromcpu_enabled +_kcfis_cellcache_disabled +_kcfis_celloflsrv_passthru_enabled +_kcfis_celloflsrv_usage_enabled +_kcfis_control1 +_kcfis_control2 +_kcfis_control3 +_kcfis_control4 +_kcfis_control5 +_kcfis_control6 +_kcfis_disable_platform_decryption +_kcfis_dump_corrupt_block +_kcfis_fast_response_enabled +_kcfis_fast_response_initiosize +_kcfis_fast_response_iosizemult +_kcfis_fast_response_threshold +_kcfis_fastfileinit_disabled +_kcfis_fault_control +_kcfis_io_prefetch_size +_kcfis_ioreqs_throttle_enabled +_kcfis_kept_in_cellfc_enabled +_kcfis_large_payload_enabled +_kcfis_max_cached_sessions +_kcfis_max_out_translations +_kcfis_nonkept_in_cellfc_enabled +_kcfis_oss_io_size +_kcfis_pmem_enabled +_kcfis_qm_prioritize_sys_plan +_kcfis_qm_user_plan_name +_kcfis_rdbms_blockio_enabled +_kcfis_read_buffer_limit +_kcfis_spawn_debugger +_kcfis_stats_level +_kcfis_storageidx_diag_mode +_kcfis_storageidx_disabled +_kcfis_storageidx_set_membership_disabled +_kcfis_storageidx_xtss_disabled +_kcfis_test_control1 +_kcfis_trace_bucket_size +_kcfis_xtgran_prefetch_count +_kcl_conservative_log_flush +_kcl_debug +_kcl_index_split +_kd_dbg_control +_kd_symtab_chk +_kdbl_enable_post_allocation +_kdfip_buf_nclatch +_kdfip_bufl_nbkt +_kdfip_cmap_nbkt +_kdfip_debug +_kdfip_drain_sleeps +_kdfip_elem_nclatch +_kdfip_flush_nrows +_kdfip_flush_rowsz +_kdfip_flush_rowtm +_kdfip_iga_bufsz +_kdfip_iga_maxsz +_kdfip_par_flush +_kdfip_trace +_kdfs_fix_control +_kdfs_timer_dmp +_kdfs_trace +_kdfs_trace_size +_kdi_avoid_block_checking +_kdic_segarr_sz +_kdis_reject_level +_kdis_reject_limit +_kdis_reject_ops +_kdis_split_xid_prune +_kdizoltp_uncompsentinal_freq +_kdkv_fg_drop_memopt +_kdkv_fg_no_memopt +_kdkv_fg_populate +_kdkv_fg_repopulate +_kdkv_force_fastpath +_kdkv_index_lossy +_kdkv_index_relocate +_kdkv_indexinvalid +_kdkv_trace +_kdlf_read_flag +_kdli_STOP_bsz +_kdli_STOP_dba +_kdli_STOP_fsz +_kdli_STOP_nio +_kdli_STOP_tsn +_kdli_allow_corrupt +_kdli_buffer_inject +_kdli_cache_inode +_kdli_cache_read_threshold +_kdli_cache_size +_kdli_cache_verify +_kdli_cache_write_threshold +_kdli_cacheable_length +_kdli_checkpoint_flush +_kdli_dbc +_kdli_delay_flushes +_kdli_descn_adj +_kdli_flush_cache_reads +_kdli_flush_injections +_kdli_force_cr +_kdli_force_cr_meta +_kdli_force_storage +_kdli_full_readahead_threshold +_kdli_full_vll +_kdli_icache_entries +_kdli_inject_assert +_kdli_inject_batch +_kdli_inject_crash +_kdli_inline_xfm +_kdli_inode_preference +_kdli_inplace_overwrite +_kdli_itree_entries +_kdli_memory_protect +_kdli_mts_so +_kdli_oneblk +_kdli_preallocation_mode +_kdli_preallocation_pct +_kdli_ralc_length +_kdli_ralc_rounding +_kdli_rci_lobmap_entries +_kdli_readahead_limit +_kdli_readahead_strategy +_kdli_recent_scn +_kdli_reshape +_kdli_safe_callbacks +_kdli_sio_async +_kdli_sio_backoff +_kdli_sio_bps +_kdli_sio_dop +_kdli_sio_fbwrite_pct +_kdli_sio_fgio +_kdli_sio_fileopen +_kdli_sio_flush +_kdli_sio_free +_kdli_sio_min_read +_kdli_sio_min_write +_kdli_sio_nbufs +_kdli_sio_niods +_kdli_sio_on +_kdli_sio_pga +_kdli_sio_pga_top +_kdli_sio_strategy +_kdli_sio_write_pct +_kdli_small_append_redo +_kdli_small_cache_limit +_kdli_sort_dbas +_kdli_space_cache_limit +_kdli_space_cache_segments +_kdli_squeeze +_kdli_timer_dmp +_kdli_timer_trc +_kdli_trace +_kdli_vll_direct +_kdlu_max_bucket_size +_kdlu_max_bucket_size_mts +_kdlu_trace_layer +_kdlu_trace_system +_kdlw_enable_ksi_locking +_kdlw_enable_write_gathering +_kdlwp_flush_threshold +_kdlxp_cmp_subunit_size +_kdlxp_dedup_flush_threshold +_kdlxp_dedup_hash_algo +_kdlxp_dedup_inl_pctfree +_kdlxp_dedup_prefix_threshold +_kdlxp_dedup_wapp_len +_kdlxp_lobcmpadp +_kdlxp_lobcmplevel +_kdlxp_lobcmprciver +_kdlxp_lobcompress +_kdlxp_lobdeduplicate +_kdlxp_lobdedupvalidate +_kdlxp_lobencrypt +_kdlxp_mincmp +_kdlxp_mincmplen +_kdlxp_minxfm_size +_kdlxp_no_dedup_on_insert +_kdlxp_spare1 +_kdlxp_uncmp +_kdlxp_xfmcache +_kdt_buffering +_kdtgsp_retries +_kdu_array_depth +_kdz_clear_analysis_percent +_kdz_hcc_flags +_kdz_hcc_track_upd_rids +_kdz_pcode_flags +_kdz_pred_nrows +_kdz_proj_nrows +_kdzk_enable_init_trace +_kdzk_load_specialized_library +_kdzk_specialized_library_name +_kdzk_trace_level +_kebm_nstrikes +_kebm_sanity_check_enabled +_kebm_suspension_time +_kecap_cache_size +_keep_19907_during_recovery +_keep_remote_column_size +_kernel_message_network_driver +_kes_parse_model +_kewm_simulate_oer4031 +_kewm_trace_sga +_key_vector_alternate_dictionary +_key_vector_create_pushdown_threshold +_key_vector_double_enabled +_key_vector_force_alternate_dictionary +_key_vector_max_size +_key_vector_offload +_key_vector_predicate_enabled +_key_vector_predicate_threshold +_key_vector_shared_dgk_ht +_key_vector_timestamp_enabled +_kffmap_hash_size +_kffmlk_hash_size +_kffmop_chunks +_kffmop_hash_size +_kfi_software_patchmap +_kfi_version_patchmap +_kfm_disable_set_fence +_kgh_restricted_subheaps +_kgh_restricted_trace +_kghdsidx_count +_kgl_bucket_count +_kgl_cluster_lock +_kgl_cluster_lock_read_mostly +_kgl_cluster_pin +_kgl_debug +_kgl_fixed_extents +_kgl_hash_collision +_kgl_heap_size +_kgl_hot_object_copies +_kgl_iterator_action +_kgl_kqr_cap_so_stacks +_kgl_large_heap_assert_threshold +_kgl_large_heap_warning_threshold +_kgl_latch_count +_kgl_message_locks +_kgl_min_cached_so_count +_kgl_time_to_wait_for_locks +_kglsim_maxmem_percent +_kgsb_threshold_size +_kgx_latches +_kill_controlfile_enqueue_blocker +_kill_diagnostics_timeout +_kill_enqueue_blocker +_kill_java_threads_on_eoc +_kill_session_dump +_kjac_force_outcome_current_session +_kjdd_call_stack_dump_enabled +_kjdd_wfg_dump_cntrl +_kjltmaxgt +_kjltmaxht +_kjlton +_kkfi_trace +_kkpogpi_nocpy +_kks_cached_parse_errors +_kks_obsolete_dump_threshold +_kks_parse_error_warning +_kktAllowInsteadOfDDLTriggeronDDL +_kokli_cache_size +_kokln_current_read +_kolfuseslf +_kqdsn_cpu_digits +_kqdsn_instance_digits +_kql_clientlocks_enabled +_kql_subheap_trace +_kqr_enable_conservative_logging +_kqr_optimistic_reads +_kra_cfile_compaction +_kra_trace_buffer_size +_krb_check_osd_block_endianess +_krb_trace_buffer_size +_krbabr_trace_buffer_size +_krc_trace_buffer_size +_krpm_trace_buffer_size +_ksb_restart_clean_time +_ksb_restart_policy_times +_ksd_test_param +_ksdx_charset_ratio +_ksdxdocmd_default_timeout_ms +_ksdxdocmd_enabled +_ksdxw_cini_flg +_ksdxw_nbufs +_ksdxw_num_pgw +_ksdxw_num_sgw +_ksdxw_stack_depth +_ksdxw_stack_readable +_kse_alt_stack_sig_syms +_kse_die_timeout +_kse_pc_table_size +_kse_signature_entries +_kse_signature_limit +_kse_snap_ring_disable +_kse_snap_ring_record_stack +_kse_snap_ring_size +_kse_snap_ring_suppress +_kse_ssnt +_kse_trace_int_msg_clear +_ksfd_fob_pct +_ksfd_verify_write +_ksi_clientlocks_enabled +_ksi_pdb_checks +_ksi_trace +_ksi_trace_bucket +_ksi_trace_bucket_size +_ksim_time_monitor +_ksipc_common_sl +_ksipc_efchecks +_ksipc_group_sz +_ksipc_heap_extent +_ksipc_ipclw_library_path +_ksipc_libipc_path +_ksipc_loopback_ips +_ksipc_mga_segment_size +_ksipc_mode +_ksipc_service_level +_ksipc_service_mask +_ksipc_skgxp_compat_library_path +_ksipc_skgxp_library_path +_ksipc_spare_param1 +_ksipc_spare_param2 +_ksipc_spare_param3 +_ksipc_spare_param4 +_ksipc_spare_param5 +_ksipc_trace_bucket +_ksipc_trace_bucket_size +_ksipc_wait_flags +_ksipc_window_size +_ksipcsnsrv +_ksm_post_sga_init_notif_delay_secs +_ksm_pre_sga_init_notif_delay_secs +_ksm_shared_pool_stats_minsz +_ksm_shared_pool_stats_num_pdb +_ksm_sp_rcr_hits +_ksmb_debug +_ksmd_protect_mode +_ksmd_trace +_ksmg_granule_size +_ksmlsaf +_ksmsq_hintmaxinst +_ksmsq_hintmaxproc +_kspol_tac_timeout +_ksr_unit_test_processes +_ksrma_enabled +_ksrma_gsm_base_addr +_kss_callstack_type +_kss_quiet +_ksu_diag_kill_time +_ksuitm_addon_trccmd +_ksuitm_dont_kill_dumper +_ksv_dynamic_flags1 +_ksv_max_spawn_fail_limit +_ksv_pool_hang_kill_to +_ksv_pool_wait_timeout +_ksv_slave_exit_timeout +_ksv_spawn_control_all +_ksv_static_flags1 +_ksvppktmode +_ksws_java_patching +_kswsas_db_svc_mapping +_kswsas_drain_kill_batch_size +_kswsas_ht_log_size +_kswsas_num_jp_slaves +_ksxp_compat_flags +_ksxp_control_flags +_ksxp_diagmode +_ksxp_disable_clss +_ksxp_disable_dynamic_loading +_ksxp_disable_ipc_stats +_ksxp_disable_rolling_migration +_ksxp_dump_timeout +_ksxp_dynamic_skgxp_param +_ksxp_exa_ip_config +_ksxp_if_config +_ksxp_init_stats_bkts +_ksxp_ipclw_enabled +_ksxp_ipclw_ptswinsz +_ksxp_ksmsq_ip_config +_ksxp_max_stats_bkts +_ksxp_ping_enable +_ksxp_ping_polling_time +_ksxp_reaping +_ksxp_reporting_process +_ksxp_save_sockets +_ksxp_save_sockets_pattern +_ksxp_send_timeout +_ksxp_skgxp_ant_options +_ksxp_skgxp_ctx_flags1 +_ksxp_skgxp_ctx_flags1mask +_ksxp_skgxp_dynamic_protocol +_ksxp_skgxp_inets +_ksxp_skgxp_rgn_ports +_ksxp_skgxp_spare_param1 +_ksxp_skgxp_spare_param2 +_ksxp_skgxp_spare_param3 +_ksxp_skgxpg_last_parameter +_ksxp_stats_mem_lmt +_ksxp_testing +_ksxp_unit_test_byte_transformation +_ksxp_validate_cnh_life_cycle +_ksxp_wait_flags +_ksxp_xrc_cm_port +_ktb_debug_flags +_ktc_debug +_ktc_latches +_ktilm_uga_off +_ktilmsc_exp +_ktslj_segext_max_mb +_ktslj_segext_retry +_ktslj_segext_warning +_ktslj_segext_warning_mb +_ktspsrch_maxsc +_ktspsrch_maxskip +_ktspsrch_scchk +_ktspsrch_scexp +_ktst_rss_max +_ktst_rss_min +_ktst_rss_retry +_ktst_tscleanup_timeout +_ktt_tsid_reuse_threshold +_kttext_warning +_ktu_latches +_ku_trace +_kxdbio_ctx_init_count +_kxdbio_disable_offload_opcode +_kxdbio_enable_ds_opcode +_kxdbio_hca_loadavg_thresh +_kxdbio_offena_timeout +_kxdbio_ut_ctl +_kxscio_cap_stacks +_large_pool_min_alloc +_last_allocation_period +_latch_class_0 +_latch_class_1 +_latch_class_2 +_latch_class_3 +_latch_class_4 +_latch_class_5 +_latch_class_6 +_latch_class_7 +_latch_classes +_latch_miss_stat_sid +_latch_pause_count +_latch_pause_mode +_latch_wait_list_pri_sleep_secs +_ldap_config_force_sync_up +_ldap_config_ssl_for_sasl_md5 +_ldap_reset_user_account_flc +_ldr_io_size +_ldr_io_size2 +_ldr_pga_lim +_ldr_tempseg_threshold +_left_nested_loops_random +_lgwr_delay_write +_lgwr_io_outlier +_lgwr_io_slaves +_lgwr_max_ns_wt +_lgwr_ns_nl_max +_lgwr_ns_nl_min +_lgwr_ns_sim_err +_lgwr_posts_for_pending_bcasts +_lgwr_ta_sim_err +_library_cache_advice +_library_cache_dump_cooling_period +_library_cache_dump_interval +_light_work_rule_debug +_lightweight_hdrs +_like_with_bind_as_equality +_limit_itls +_lm_activate_lms_threshold +_lm_adrm_interval +_lm_adrm_options +_lm_adrm_scan_timeout +_lm_adrm_time_out +_lm_asm_enq_hashing +_lm_batch_compression_threshold +_lm_better_ddvictim +_lm_big_cluster_optimizations +_lm_broadcast_res +_lm_cache_allocated_res_ratio +_lm_cache_enqueue +_lm_cache_lvl0_cleanup +_lm_cache_res_cleanup +_lm_cache_res_cleanup_tries +_lm_cache_res_options +_lm_cache_res_skip_cleanup +_lm_cache_res_type +_lm_check_ges_resource +_lm_checksum_batch_msg +_lm_chk_inv_domenq_ops +_lm_comm_channel +_lm_comm_msgq_bufr_multiple +_lm_comm_msgq_busywait +_lm_comm_msgq_copy_buffers +_lm_comm_msgq_fixed_buffers +_lm_comm_rcv_msg_history_slots +_lm_comm_reap_count +_lm_comm_slow_op_loop_threshold +_lm_comm_slow_op_stat_dump_threshold +_lm_comm_tkts_adaptive +_lm_comm_tkts_calc_period_length +_lm_comm_tkts_max_add +_lm_comm_tkts_max_periods +_lm_comm_tkts_min_decrease_wait +_lm_comm_tkts_min_increase_wait +_lm_comm_tkts_mult_factor +_lm_comm_tkts_nullreq_threshold +_lm_comm_tkts_sub_factor +_lm_compression_scheme +_lm_contiguous_res_count +_lm_db_rank +_lm_db_ranks +_lm_dd_ignore_nodd +_lm_dd_interval +_lm_dd_max_search_time +_lm_dd_maxdump +_lm_dd_scan_interval +_lm_dd_search_cnt +_lm_deferred_msg_timeout +_lm_domain_hash_buckets +_lm_drm_banned_objs +_lm_drm_batch_time +_lm_drm_disable +_lm_drm_disable_kjfc +_lm_drm_duration_limit +_lm_drm_duration_limit_type +_lm_drm_filter_history_window +_lm_drm_filter_history_window_type +_lm_drm_filters +_lm_drm_hiload_percentage +_lm_drm_lowload_percentage +_lm_drm_max_banned_objs +_lm_drm_max_requests +_lm_drm_min_interval +_lm_drm_object_scan +_lm_drm_we_interval +_lm_drm_we_size +_lm_drm_window +_lm_drm_xlatch +_lm_drmopt12 +_lm_dump_null_lock +_lm_dynamic_lms +_lm_dynamic_load +_lm_enable_aff_benefit_stats +_lm_enable_translation +_lm_enq_iso_enabled +_lm_enq_lock_freelist +_lm_enq_rcfg +_lm_enqueue_blocker_dump_timeout +_lm_enqueue_blocker_dump_timeout_cnt +_lm_enqueue_blocker_kill_timeout +_lm_enqueue_freelist +_lm_enqueue_timeout +_lm_exadata_fence_type +_lm_fdrm_stats +_lm_file_affinity +_lm_file_read_mostly +_lm_free_queue_threshold +_lm_freeze_kill_time +_lm_gl_hash_scheme +_lm_global_posts +_lm_hash_control +_lm_hashtable_bkt_high +_lm_hashtable_bkt_low +_lm_hashtable_bkt_thr +_lm_hb_acceptable_hang_condition +_lm_hb_callstack_collect_time +_lm_hb_callstack_collect_time_long +_lm_hb_cfio_timeout +_lm_hb_disable_check_list +_lm_hb_enable_acl_check +_lm_hb_exponential_hang_time_factor +_lm_hb_maximum_hang_report_count +_lm_hb_per_proc_behavior +_lm_hb_per_proc_timeout +_lm_hb_timeout_extension +_lm_high_load_sysload_percentage +_lm_high_load_threshold +_lm_hwc_disabled +_lm_idle_connection_action +_lm_idle_connection_check +_lm_idle_connection_check_interval +_lm_idle_connection_instance_check_callout +_lm_idle_connection_kill +_lm_idle_connection_kill_max_skips +_lm_idle_connection_load_check +_lm_idle_connection_max_ignore_kill_count +_lm_idle_connection_quorum_threshold +_lm_inherited_max_requests +_lm_kill_fg_on_timeout +_lm_lazy_domain_timeout +_lm_lhupd_interval +_lm_lmd_waittime +_lm_lmon_nowait_latch +_lm_lms +_lm_lms_no_yield +_lm_lms_opt_priority +_lm_lms_priority_check_frequency +_lm_lms_priority_dynamic +_lm_lms_rt_threshold +_lm_lms_spin +_lm_lms_waittime +_lm_local_hp_enq +_lm_locks +_lm_low_load_percentage +_lm_master_weight +_lm_max_lms +_lm_max_lms_block_time +_lm_mp_avail_queue_threshold +_lm_mp_bulk_mbuf_free +_lm_msg_batch_size +_lm_msg_cleanup_interval +_lm_msg_pool_dump_threshold +_lm_msg_pool_user_callstack_dump +_lm_no_lh_check +_lm_no_sync +_lm_node_join_opt +_lm_non_fault_tolerant +_lm_nonisolated_restype +_lm_num_bnft_stats_buckets +_lm_num_msg_pools_per_type +_lm_num_pt_buckets +_lm_num_pt_latches +_lm_pdb_domains_enable +_lm_pdb_wait_all_gone +_lm_postevent_buffer_size +_lm_preregister_css_restype +_lm_proc_freeze_timeout +_lm_process_batching +_lm_process_lock_q_scan_limit +_lm_procs +_lm_psrcfg +_lm_rac_spare_dp1 +_lm_rac_spare_dp10 +_lm_rac_spare_dp2 +_lm_rac_spare_dp3 +_lm_rac_spare_dp4 +_lm_rac_spare_dp5 +_lm_rac_spare_dp6 +_lm_rac_spare_dp7 +_lm_rac_spare_dp8 +_lm_rac_spare_dp9 +_lm_rac_spare_p1 +_lm_rac_spare_p10 +_lm_rac_spare_p2 +_lm_rac_spare_p3 +_lm_rac_spare_p4 +_lm_rac_spare_p5 +_lm_rac_spare_p6 +_lm_rac_spare_p7 +_lm_rac_spare_p8 +_lm_rac_spare_p9 +_lm_rcfg_kjcdump_time +_lm_rcfg_timeout +_lm_rcvinst +_lm_rcvr_hang_allow_time +_lm_rcvr_hang_cfio_kill +_lm_rcvr_hang_check_frequency +_lm_rcvr_hang_check_system_load +_lm_rcvr_hang_kill +_lm_rcvr_hang_systemstate_dump_level +_lm_recovery_set +_lm_reloc_use_mhint +_lm_res_hash_bucket +_lm_res_part +_lm_res_tm_hash_bucket +_lm_resend_open_convert_timeout +_lm_ress +_lm_rm_object_bypass +_lm_rm_slaves +_lm_send_mode +_lm_send_queue_batching +_lm_send_queue_length +_lm_sendproxy_reserve +_lm_share_lock_opt +_lm_share_lock_pdbisolation +_lm_share_lock_restype +_lm_single_inst_affinity_lock +_lm_singleton_pdb_opt +_lm_sndq_flush_int +_lm_spare_threads +_lm_spare_undo +_lm_sq_batch_factor +_lm_sq_batch_type +_lm_sq_batch_waittick +_lm_sync_timeout +_lm_throttle_time_interval +_lm_ticket_active_sendback +_lm_ticket_check_inject +_lm_ticket_min +_lm_tickets +_lm_timed_statistics_level +_lm_tkt_leak_check_count +_lm_tkt_leak_check_seconds +_lm_tx_delta +_lm_uid_default_lookup_value +_lm_use_gcr +_lm_use_new_defmsgtmo_action +_lm_use_tx_tsn +_lm_use_us_timer +_lm_validate_pbatch +_lm_wait_for_hub_rcv_timeout +_lm_wait_pending_send_queue +_lm_watchpoint_kjmddp +_lm_watchpoint_maximum +_lm_watchpoint_timeout +_lm_xids +_lmhb_procstate_dump_cputime_limit +_lmhb_procstate_dump_runtime_limit +_lmn_invalidlkr_enabled +_lms_rollbacks +_load_without_compile +_lob_use_locator_varying_width +_local_arc_assert_on_wait +_local_communication_costing_enabled +_local_communication_ratio +_local_hang_analysis_interval_secs +_lock_dc_users_time +_lock_next_constraint_count +_lock_ref_constraint_count +_lock_ref_descendants_count +_log_archive_avoid_memcpy +_log_archive_buffers +_log_archive_network_redo_size +_log_archive_prot_auto_demote +_log_archive_strong_auth +_log_archive_trace_pids +_log_blocks_during_backup +_log_buffer_coalesce +_log_buffers_corrupt +_log_buffers_debug +_log_checkpoint_recovery_check +_log_committime_block_cleanout +_log_deletion_policy +_log_file_sync_timeout +_log_max_optimize_threads +_log_parallelism_dynamic +_log_parallelism_max +_log_private_mul +_log_private_parallelism_mul +_log_read_buffer_size +_log_read_buffers +_log_segment_dump_parameter +_log_segment_dump_patch +_log_silicon_secured_memory +_log_simultaneous_copies +_log_space_errors +_log_switch_timeout +_log_write_info_size +_log_write_worker_post_spinwait +_log_write_worker_task_prefetch +_log_write_worker_task_spinwait +_log_writer_worker_dlm_hearbeat_update_freq +_logout_storm_rate +_logout_storm_retrycnt +_logout_storm_timeout +_long_bcast_ack_warning_threshold +_long_log_write_warning_threshold +_longops_enabled +_low_scn_headroom_warning_threshold_days +_low_server_threshold +_lowres_drift_allowed_sec +_lrgdbcz6_ignore_restrictions +_ltc_trace +_lthread_cleanup_intv_secs +_lthread_clnup_hk_wait_secs +_lthread_clnup_pmon_softkill_wait_secs +_lthread_clnup_spawner_sk_wait_secs +_lthread_debug +_lthread_enabled +_lthread_idle_timeout_secs +_lthread_max_spawn_time_csecs +_lthread_spawn_check_intv_ms +_lthread_step_debugging +_main_dead_process_scan_interval +_master_direct_sends +_mav_refresh_consistent_read +_mav_refresh_double_count_prevented +_mav_refresh_opt +_mav_refresh_unionall_tables +_max_aq_persistent_queue_memory +_max_async_wait_for_catch_up +_max_clients_per_emon +_max_cr_rollbacks +_max_data_transfer_cache_size +_max_defer_gran_xfer_atonce +_max_exponential_sleep +_max_filestat_tries +_max_fsu_exptime +_max_fsu_segments +_max_fsu_sgapcent +_max_fsu_stale_time +_max_incident_file_size +_max_io_size +_max_kcnibr_ranges +_max_large_io +_max_largepage_alloc_time_secs +_max_library_cache_dumps +_max_lns_shutdown_archival_time +_max_log_write_parallelism +_max_lwt_cpu_ratio +_max_outstanding_log_writes +_max_pending_scn_bcasts +_max_physmem_perc_mmt +_max_physmem_perc_sga +_max_protocol_support +_max_queued_report_requests +_max_reasonable_scn_rate +_max_remote_tool_requests +_max_report_flushes_percycle +_max_row_cache_dumps +_max_rwgs_groupings +_max_services +_max_shrink_obj_stats +_max_shutdown_abort_secs +_max_sleep_holding_latch +_max_small_io +_max_spacebg_msgs_percentage +_max_spacebg_slaves +_max_spacebg_tasks +_max_sql_stmt_length +_max_string_size_bypass +_max_sys_next_extent +_maxrpop_files_inst +_maxrpop_instances +_media_recovery_read_batch +_mem_annotation_pr_lev +_mem_annotation_scale +_mem_annotation_sh_lev +_mem_annotation_store +_mem_std_extent_size +_memoptimize_xmem_pool_size +_memory_adi_bytes_per_alloc +_memory_adi_enabled +_memory_adi_extend +_memory_adi_heap_mask +_memory_adi_module_mask +_memory_adi_precise_errors +_memory_broker_log_stat_entries +_memory_broker_marginal_utility_bc +_memory_broker_marginal_utility_sp +_memory_broker_shrink_heaps +_memory_broker_shrink_java_heaps +_memory_broker_shrink_streams_pool +_memory_broker_shrink_timeout +_memory_broker_stat_interval +_memory_checkinuse_timeintv +_memory_imm_mode_without_autosga +_memory_initial_sga_split_perc +_memory_management_tracing +_memory_max_tgt_inc_cnt +_memory_mgmt_fail_immreq +_memory_mgmt_immreq_timeout +_memory_nocancel_defsgareq +_memory_sanity_check +_merge_monitor_threshold +_messages +_mga_large_page_path +_mgd_rcv_handle_orphan_datafiles +_midtier_affinity_cluswait_prc_threshold +_midtier_affinity_goodness_threshold +_min_autotask_percentage +_min_lwt_lt +_min_spacebg_slaves +_min_sys_percentage +_min_sys_process +_min_time_between_psp0_diag_secs +_minact_timeout +_minfree_plus +_minimal_stats_aggregation +_minimum_blocks_to_shrink +_minimum_db_flashback_retention +_minimum_extents_to_shrink +_minmax_spacebg_slaves +_mira_free_unused_buffers +_mira_mark_archivelog_timeout +_mira_num_local_buffers +_mira_num_receive_buffers +_mira_rcv_catchup_buffers +_mira_rcv_max_buffers +_mira_sender_process +_mirror_redo_buffers +_mmv_query_rewrite_enabled +_modify_column_index_unusable +_modify_other_app_object +_monitor_sql_stmt_length +_monitor_workload_interval +_mpmt_enabled +_mpmt_enabled_backgrounds +_mpmt_fg_enabled +_mpmt_fthread_mode +_mpmt_prefer_enabled +_mpmt_procs_per_osp +_mpmt_single_process_instance +_mpmt_use_fthread +_multi_instance_pmr +_multi_join_key_table_lookup +_multi_transaction_optimization_enabled +_multiple_char_set_cdb +_multiple_instance_recovery +_multiple_name_convert_patterns +_mutex_spin_count +_mutex_wait_scheme +_mutex_wait_time +_mv_access_compute_fresh_data +_mv_add_log_placeholder +_mv_cleanup_orphaned_metadata +_mv_complete_refresh_conventional +_mv_deferred_no_log_age_val +_mv_expression_extend_size +_mv_generalized_oj_refresh_opt +_mv_refresh_ana +_mv_refresh_costing +_mv_refresh_delta_fraction +_mv_refresh_enhanced_dml_detection +_mv_refresh_eut +_mv_refresh_force_parallel_query +_mv_refresh_insert_no_append +_mv_refresh_new_setup_disabled +_mv_refresh_no_idx_rebuild +_mv_refresh_pipe_timeout +_mv_refresh_pkfk_data_units_opt +_mv_refresh_pkfk_relationship_opt +_mv_refresh_rebuild_percentage +_mv_refresh_selections +_mv_refresh_shrink_log +_mv_refresh_truncate_log +_mv_refresh_update_analysis +_mv_refresh_use_hash_sj +_mv_refresh_use_no_merge +_mv_refresh_use_stats +_mv_refsched_timeincr +_mv_rolling_inv +_mwin_schedule +_nameservice_consistency_check +_nameservice_request_batching +_nbr_recovery_max_request_size +_nbr_recovery_target_bufs +_nbr_recovery_timeout +_nchar_imp_cnv +_nchar_imp_conv +_ncmb_readahead_enabled +_ncmb_readahead_tracing +_ncomp_shared_objects_dir +_nested_loop_fudge +_nested_mv_fast_oncommit_enabled +_new_initial_join_orders +_new_sort_cost_estimate +_newsort_enabled +_newsort_ordered_pct +_newsort_type +_next_pdbid +_nineteenth_spare_parameter +_ninetieth_spare_parameter +_ninety-eighth_spare_parameter +_ninety-fifth_spare_parameter +_ninety-first_spare_parameter +_ninety-fourth_spare_parameter +_ninety-ninth_spare_parameter +_ninety-second_spare_parameter +_ninety-seventh_spare_parameter +_ninety-sixth_spare_parameter +_ninety-third_spare_parameter +_ninth_spare_parameter +_nlj_batching_ae_flag +_nlj_batching_enabled +_nlj_batching_misses_enabled +_nls_parameter_sync_enabled +_no_catalog +_no_objects +_no_or_expansion +_no_recovery_through_resetlogs +_no_small_file +_no_snapshot_root_clone +_no_stale_joinback_rewrite +_nologging_apply_stall_time +_nologging_block_cleanout_delay +_nologging_fetch_demote_count +_nologging_fetch_initial_interval +_nologging_fetch_retry_interval_cold +_nologging_fetch_retry_interval_hot +_nologging_fetch_slv_wt +_nologging_kcnbuf_hash_buckets +_nologging_kcnbuf_hash_latches +_nologging_load_slotsz +_nologging_mode_override +_nologging_progress_keep_alive +_nologging_sdcl_append_wait +_nologging_sendbuf_ratio +_nologging_slots +_nologging_standby_cold_buffer_timeout +_nologging_standby_dtc_expire +_nologging_standby_fetch_disable +_nologging_standby_hot_buffer_timeout +_nologging_standby_refetch_disable +_nologging_txn_cmt_wait +_non_app_ignore_errors +_nonce_history_buffer_size +_nonfatalprocess_redo_dump_time_limit +_noseg_for_unusable_index_enabled +_notify_crs +_ns_max_flush_wt +_ns_max_send_delay +_num_longop_child_latches +_num_rlslaves +_numa_buffer_cache_stats +_numa_shift_enabled +_numa_shift_value +_numa_trace_level +_number_cached_attributes +_number_cached_group_memberships +_number_group_memberships_per_cache_line +_obj_ckpt_tracing +_object_link_fixed_enabled +_object_linked_remote +_object_number_cache_size +_object_reuse_bast +_object_statistics +_object_stats_max_entries +_odci_aggregate_save_space +_odci_index_pmo_rebuild +_offline_rollback_segments +_ofs_write_buffer_size +_ogms_home +_olap_adv_comp_stats_cc_precomp +_olap_adv_comp_stats_max_rows +_olap_aggregate_buffer_size +_olap_aggregate_flags +_olap_aggregate_function_cache_enabled +_olap_aggregate_max_thread_tuples +_olap_aggregate_min_buffer_size +_olap_aggregate_min_thread_status +_olap_aggregate_multipath_hier +_olap_aggregate_statlen_thresh +_olap_aggregate_work_per_thread +_olap_aggregate_worklist_max +_olap_allocate_errorlog_format +_olap_allocate_errorlog_header +_olap_analyze_max +_olap_continuous_trace_file +_olap_dbgoutfile_echo_to_eventlog +_olap_dimension_corehash_force +_olap_dimension_corehash_large +_olap_dimension_corehash_pressure +_olap_dimension_corehash_size +_olap_disable_loop_optimized +_olap_eif_export_lob_size +_olap_lmgen_dim_size +_olap_lmgen_meas_size +_olap_object_hash_class +_olap_page_pool_expand_rate +_olap_page_pool_hi +_olap_page_pool_hit_target +_olap_page_pool_low +_olap_page_pool_pressure +_olap_page_pool_shrink_rate +_olap_parallel_update_server_num +_olap_parallel_update_small_threshold +_olap_parallel_update_threshold +_olap_row_load_time_precision +_olap_sesscache_enabled +_olap_sort_buffer_pct +_olap_sort_buffer_size +_olap_statbool_corebits +_olap_statbool_threshold +_olap_table_function_statistics +_olap_wrap_errors +_olapi_history_retention +_olapi_iface_object_history +_olapi_iface_object_history_retention +_olapi_iface_operation_history_retention +_olapi_interface_operation_history +_olapi_memory_operation_history +_olapi_memory_operation_history_pause_at_seqno +_olapi_memory_operation_history_retention +_olapi_session_history +_olapi_session_history_retention +_old_connect_by_enabled +_old_extent_scheme +_ols_cleanup_task +_oltp_comp_dbg_scan +_oltp_compress_dbg +_oltp_compression +_oltp_compression_gain +_oltp_spill +_omf +_omni_enqueue_enable +_one-hundred-and-eighteenth_spare_parameter +_one-hundred-and-eighth_spare_parameter +_one-hundred-and-eightieth_spare_parameter +_one-hundred-and-eighty-eighth_spare_parameter +_one-hundred-and-eighty-fifth_spare_parameter +_one-hundred-and-eighty-first_spare_parameter +_one-hundred-and-eighty-fourth_spare_parameter +_one-hundred-and-eighty-ninth_spare_parameter +_one-hundred-and-eighty-second_spare_parameter +_one-hundred-and-eighty-seventh_spare_parameter +_one-hundred-and-eighty-sixth_spare_parameter +_one-hundred-and-eighty-third_spare_parameter +_one-hundred-and-eleventh_spare_parameter +_one-hundred-and-fifteenth_spare_parameter +_one-hundred-and-fifth_spare_parameter +_one-hundred-and-fiftieth_spare_parameter +_one-hundred-and-fifty-eighth_spare_parameter +_one-hundred-and-fifty-fifth_spare_parameter +_one-hundred-and-fifty-first_spare_parameter +_one-hundred-and-fifty-fourth_spare_parameter +_one-hundred-and-fifty-ninth_spare_parameter +_one-hundred-and-fifty-second_spare_parameter +_one-hundred-and-fifty-seventh_spare_parameter +_one-hundred-and-fifty-sixth_spare_parameter +_one-hundred-and-fifty-third_spare_parameter +_one-hundred-and-first_spare_parameter +_one-hundred-and-fortieth_spare_parameter +_one-hundred-and-forty-eighth_spare_parameter +_one-hundred-and-forty-fifth_spare_parameter +_one-hundred-and-forty-first_spare_parameter +_one-hundred-and-forty-fourth_spare_parameter +_one-hundred-and-forty-ninth_spare_parameter +_one-hundred-and-forty-second_spare_parameter +_one-hundred-and-forty-seventh_spare_parameter +_one-hundred-and-forty-sixth_spare_parameter +_one-hundred-and-forty-third_spare_parameter +_one-hundred-and-fourteenth_spare_parameter +_one-hundred-and-fourth_spare_parameter +_one-hundred-and-nineteenth_spare_parameter +_one-hundred-and-ninetieth_spare_parameter +_one-hundred-and-ninety-eighth_spare_parameter +_one-hundred-and-ninety-fifth_spare_parameter +_one-hundred-and-ninety-first_spare_parameter +_one-hundred-and-ninety-fourth_spare_parameter +_one-hundred-and-ninety-ninth_spare_parameter +_one-hundred-and-ninety-second_spare_parameter +_one-hundred-and-ninety-seventh_spare_parameter +_one-hundred-and-ninety-sixth_spare_parameter +_one-hundred-and-ninety-third_spare_parameter +_one-hundred-and-ninth_spare_parameter +_one-hundred-and-second_spare_parameter +_one-hundred-and-seventeenth_spare_parameter +_one-hundred-and-seventh_spare_parameter +_one-hundred-and-seventieth_spare_parameter +_one-hundred-and-seventy-eighth_spare_parameter +_one-hundred-and-seventy-fifth_spare_parameter +_one-hundred-and-seventy-first_spare_parameter +_one-hundred-and-seventy-fourth_spare_parameter +_one-hundred-and-seventy-ninth_spare_parameter +_one-hundred-and-seventy-second_spare_parameter +_one-hundred-and-seventy-seventh_spare_parameter +_one-hundred-and-seventy-sixth_spare_parameter +_one-hundred-and-seventy-third_spare_parameter +_one-hundred-and-sixteenth_spare_parameter +_one-hundred-and-sixth_spare_parameter +_one-hundred-and-sixtieth_spare_parameter +_one-hundred-and-sixty-eighth_spare_parameter +_one-hundred-and-sixty-fifth_spare_parameter +_one-hundred-and-sixty-first_spare_parameter +_one-hundred-and-sixty-fourth_spare_parameter +_one-hundred-and-sixty-ninth_spare_parameter +_one-hundred-and-sixty-second_spare_parameter +_one-hundred-and-sixty-seventh_spare_parameter +_one-hundred-and-sixty-sixth_spare_parameter +_one-hundred-and-sixty-third_spare_parameter +_one-hundred-and-tenth_spare_parameter +_one-hundred-and-third_spare_parameter +_one-hundred-and-thirteenth_spare_parameter +_one-hundred-and-thirtieth_spare_parameter +_one-hundred-and-thirty-eighth_spare_parameter +_one-hundred-and-thirty-fifth_spare_parameter +_one-hundred-and-thirty-first_spare_parameter +_one-hundred-and-thirty-fourth_spare_parameter +_one-hundred-and-thirty-ninth_spare_parameter +_one-hundred-and-thirty-second_spare_parameter +_one-hundred-and-thirty-seventh_spare_parameter +_one-hundred-and-thirty-sixth_spare_parameter +_one-hundred-and-thirty-third_spare_parameter +_one-hundred-and-twelfth_spare_parameter +_one-hundred-and-twentieth_spare_parameter +_one-hundred-and-twenty-eighth_spare_parameter +_one-hundred-and-twenty-fifth_spare_parameter +_one-hundred-and-twenty-first_spare_parameter +_one-hundred-and-twenty-fourth_spare_parameter +_one-hundred-and-twenty-ninth_spare_parameter +_one-hundred-and-twenty-second_spare_parameter +_one-hundred-and-twenty-seventh_spare_parameter +_one-hundred-and-twenty-sixth_spare_parameter +_one-hundred-and-twenty-third_spare_parameter +_one-hundredth_spare_parameter +_oneside_colstat_for_equijoins +_online_ctas_diag +_online_file_conversion_batchsize +_online_patch_disable_stack_check +_ops_per_semop +_optim_adjust_for_part_skews +_optim_dict_stats_at_db_cr_upg +_optim_enhance_nnull_detection +_optim_new_default_join_sel +_optim_peek_user_binds +_optimizer_adaptive_cursor_sharing +_optimizer_adaptive_plan_control +_optimizer_adaptive_plans_continuous +_optimizer_adaptive_plans_iterative +_optimizer_adaptive_random_seed +_optimizer_adjust_for_nulls +_optimizer_ads_for_pq +_optimizer_ads_max_table_count +_optimizer_ads_result_cache_life +_optimizer_ads_spd_cache_owner_limit +_optimizer_ads_time_limit +_optimizer_ads_use_partial_results +_optimizer_ads_use_result_cache +_optimizer_ads_use_spd_cache +_optimizer_aggr_groupby_elim +_optimizer_allow_all_access_paths +_optimizer_ansi_join_lateral_enhance +_optimizer_ansi_rearchitecture +_optimizer_answering_query_using_stats +_optimizer_autostats_job +_optimizer_aw_join_push_enabled +_optimizer_aw_stats_enabled +_optimizer_band_join_aware +_optimizer_batch_table_access_by_rowid +_optimizer_better_inlist_costing +_optimizer_block_size +_optimizer_bushy_cost_factor +_optimizer_bushy_fact_dim_ratio +_optimizer_bushy_fact_min_size +_optimizer_bushy_join +_optimizer_cache_stats +_optimizer_cartesian_enabled +_optimizer_cbqt_factor +_optimizer_cbqt_no_size_restriction +_optimizer_cbqt_or_expansion +_optimizer_ceil_cost +_optimizer_cluster_by_rowid +_optimizer_cluster_by_rowid_batch_size +_optimizer_cluster_by_rowid_batched +_optimizer_cluster_by_rowid_control +_optimizer_coalesce_subqueries +_optimizer_complex_pred_selectivity +_optimizer_compute_index_stats +_optimizer_connect_by_cb_whr_only +_optimizer_connect_by_combine_sw +_optimizer_connect_by_cost_based +_optimizer_connect_by_elim_dups +_optimizer_control_shard_qry_processing +_optimizer_correct_sq_selectivity +_optimizer_cost_based_transformation +_optimizer_cost_filter_pred +_optimizer_cost_hjsmj_multimatch +_optimizer_cost_model +_optimizer_cube_join_enabled +_optimizer_db_blocks_buffers +_optimizer_degree +_optimizer_dim_subq_join_sel +_optimizer_disable_strans_sanity_checks +_optimizer_distinct_agg_transform +_optimizer_distinct_elimination +_optimizer_distinct_placement +_optimizer_dsdir_usage_control +_optimizer_dyn_smp_blks +_optimizer_eliminate_filtering_join +_optimizer_eliminate_subquery +_optimizer_enable_density_improvements +_optimizer_enable_extended_stats +_optimizer_enable_plsql_stats +_optimizer_enable_table_lookup_by_nl +_optimizer_enhanced_filter_push +_optimizer_enhanced_join_elimination +_optimizer_extend_jppd_view_types +_optimizer_extended_cursor_sharing +_optimizer_extended_cursor_sharing_rel +_optimizer_extended_stats_usage_control +_optimizer_false_filter_pred_pullup +_optimizer_fast_access_pred_analysis +_optimizer_fast_pred_transitivity +_optimizer_feedback_control +_optimizer_filter_pred_pullup +_optimizer_filter_pushdown +_optimizer_fkr_index_cost_bias +_optimizer_force_CBQT +_optimizer_free_transformation_heap +_optimizer_full_outer_join_to_outer +_optimizer_gather_feedback +_optimizer_gather_stats_on_load +_optimizer_gather_stats_on_load_all +_optimizer_gather_stats_on_load_hist +_optimizer_generate_ptf_implied_preds +_optimizer_generate_transitive_pred +_optimizer_group_by_placement +_optimizer_hll_entry +_optimizer_hybrid_fpwj_enabled +_optimizer_improve_selectivity +_optimizer_inmemory_access_path +_optimizer_inmemory_autodop +_optimizer_inmemory_bloom_filter +_optimizer_inmemory_capture_stored_stats +_optimizer_inmemory_cluster_aware_dop +_optimizer_inmemory_gen_pushable_preds +_optimizer_inmemory_minmax_pruning +_optimizer_inmemory_pruning_ratio_rows +_optimizer_inmemory_quotient +_optimizer_inmemory_table_expansion +_optimizer_inmemory_use_stored_stats +_optimizer_instance_count +_optimizer_interleave_jppd +_optimizer_interleave_or_expansion +_optimizer_invalidation_period +_optimizer_join_elimination_enabled +_optimizer_join_factorization +_optimizer_join_order_control +_optimizer_join_sel_sanity_check +_optimizer_key_vector_aggr_factor +_optimizer_key_vector_payload +_optimizer_key_vector_pruning_enabled +_optimizer_max_permutations +_optimizer_min_cache_blocks +_optimizer_mjc_enabled +_optimizer_mode_force +_optimizer_multi_level_push_pred +_optimizer_multi_table_outerjoin +_optimizer_multicol_join_elimination +_optimizer_multiple_cenv +_optimizer_multiple_cenv_report +_optimizer_multiple_cenv_stmt +_optimizer_native_full_outer_join +_optimizer_nested_rollup_for_gset +_optimizer_new_join_card_computation +_optimizer_nlj_hj_adaptive_join +_optimizer_null_accepting_semijoin +_optimizer_null_aware_antijoin +_optimizer_or_expansion +_optimizer_or_expansion_subheap +_optimizer_order_by_elimination_enabled +_optimizer_outer_join_to_inner +_optimizer_outer_to_anti_enabled +_optimizer_partial_join_eval +_optimizer_percent_parallel +_optimizer_performance_feedback +_optimizer_proc_rate_level +_optimizer_proc_rate_source +_optimizer_purge_stats_iteration_row_count +_optimizer_push_down_distinct +_optimizer_push_pred_cost_based +_optimizer_random_plan +_optimizer_reduce_groupby_key +_optimizer_reuse_cost_annotations +_optimizer_rownum_bind_default +_optimizer_rownum_pred_based_fkr +_optimizer_save_stats +_optimizer_search_limit +_optimizer_self_induced_cache_cost +_optimizer_skip_scan_enabled +_optimizer_skip_scan_guess +_optimizer_sortmerge_join_enabled +_optimizer_sortmerge_join_inequality +_optimizer_squ_bottomup +_optimizer_star_tran_in_with_clause +_optimizer_star_trans_min_cost +_optimizer_star_trans_min_ratio +_optimizer_starplan_enabled +_optimizer_strans_adaptive_pruning +_optimizer_synopsis_min_size +_optimizer_system_stats_usage +_optimizer_table_expansion +_optimizer_trace +_optimizer_transitivity_retain +_optimizer_try_st_before_jppd +_optimizer_undo_changes +_optimizer_undo_cost_change +_optimizer_union_all_gsets +_optimizer_unnest_all_subqueries +_optimizer_unnest_corr_set_subq +_optimizer_unnest_disjunctive_subq +_optimizer_unnest_scalar_sq +_optimizer_use_cbqt_star_transformation +_optimizer_use_feedback +_optimizer_use_feedback_for_join +_optimizer_use_gtt_session_stats +_optimizer_use_histograms +_optimizer_use_subheap +_optimizer_use_table_scanrate +_optimizer_use_xt_rowid +_optimizer_vector_base_dim_fact_factor +_optimizer_vector_cost_adj +_optimizer_vector_fact_dim_ratio +_optimizer_vector_fact_payload_ratio +_optimizer_vector_min_fact_rows +_optimizer_vector_transformation +_or_expand_nvl_predicate +_oracle_script +_oradbg_pathname +_oradebug_cmds_at_startup +_oradebug_force +_ordered_nested_loop +_ordered_semijoin +_orph_cln_interval +_os_sched_high_priority +_os_sched_highest_priority +_oss_skgxp_udp_dynamic_credit_mgmt +_other_wait_event_exclusion +_other_wait_threshold +_outline_bitmap_tree +_override_datafile_encrypt_check +_parallel_adaptive_max_users +_parallel_blackbox_enabled +_parallel_blackbox_sga +_parallel_blackbox_size +_parallel_broadcast_enabled +_parallel_cluster_cache_pct +_parallel_cluster_cache_policy +_parallel_conservative_queuing +_parallel_ctas_enabled +_parallel_default_max_instances +_parallel_execution_message_align +_parallel_fake_class_pct +_parallel_fault_tolerance_enabled +_parallel_fault_tolerance_threshold +_parallel_fixwrite_bucket +_parallel_heartbeat_snapshot_interval +_parallel_heartbeat_snapshot_max +_parallel_inmemory_min_time_threshold +_parallel_inmemory_time_unit +_parallel_lmd_reconfig +_parallel_load_bal_unit +_parallel_load_balancing +_parallel_load_publish_threshold +_parallel_log_write_cleanup +_parallel_min_message_pool +_parallel_optimization_phase_for_local +_parallel_queuing_max_waitingtime +_parallel_recovery_stopat +_parallel_replay_msg_limit +_parallel_scalability +_parallel_server_idle_time +_parallel_server_sleep_time +_parallel_slave_acquisition_wait +_parallel_statement_queuing +_parallel_syspls_obey_force +_parallel_time_unit +_parallel_txn_global +_parallelism_cost_fudge_factor +_parameter_table_block_size +_part_access_version_by_number +_part_redef_global_index_update +_partial_comp_enabled +_partial_pwise_join_enabled +_partition_advisor_srs_active +_partition_by_con_name +_partition_cdb_view_enabled +_partition_large_extents +_partition_read_only +_partition_view_enabled +_passwordfile_enqueue_timeout +_pbkdf2_sder_count +_pct_refresh_double_count_prevented +_pdb_auto_save_state +_pdb_auto_undots_create_off +_pdb_cluster_database +_pdb_failure_testing +_pdb_first_script +_pdb_hash_table_latches +_pdb_hash_table_size +_pdb_ignore_table_clauses +_pdb_inherit_cfd +_pdb_isolation_class +_pdb_ldp_cascade +_pdb_lockdown_bypass_sr +_pdb_lrg_auto_undots_create +_pdb_mask_cdb_info +_pdb_max_audit_size +_pdb_max_diag_size +_pdb_seed_mcsc +_pdb_service_on_root_listener +_pdb_strict_plugin_compat +_pdb_use_sequence_cache +_pdb_vm_max_size +_pdml_gim_sampling +_pdml_gim_staggered +_pdml_slaves_diff_part +_percent_flashback_buf_partial_full +_pga_aggregate_xmem_limit +_pga_auto_snapshot_percentage +_pga_auto_snapshot_threshold +_pga_detail_combine_auto +_pga_large_extent_size +_pga_limit_check_wait_time +_pga_limit_dump_summary +_pga_limit_interrupt_smaller +_pga_limit_min_req_size +_pga_limit_per_process_minimum +_pga_limit_physmem_perc +_pga_limit_simulated_physmem_size +_pga_limit_target_perc +_pga_limit_time_to_interrupt +_pga_limit_time_until_idle +_pga_limit_time_until_killed +_pga_limit_tracing +_pga_limit_use_immediate_kill +_pga_limit_watch_perc +_pga_limit_watch_size +_pga_max_size +_pgactx_cap_stacks +_pin_time_statistics +_pivot_implementation_method +_pkt_enable +_pkt_pmon_interval +_pkt_start +_plan_outline_data +_plan_verify_improvement_margin +_plsql_anon_block_code_type +_plsql_cache_enable +_plsql_dump_buffer_events +_plsql_icd_arg_dump +_plsql_max_stack_size +_plsql_minimum_cache_hit_percent +_plsql_native_frame_threshold +_plsql_nvl_optimize +_plsql_share_instantiation +_pluggable_database_debug +_pmon_cleanup_max_dfs +_pmon_dead_blkrs_alive_chk_rate_secs +_pmon_dead_blkrs_max_blkrs +_pmon_dead_blkrs_max_cleanup_attempts +_pmon_dead_blkrs_scan_rate_secs +_pmon_enable_dead_blkrs +_pmon_exitnfy_enabled +_pmon_idle_scan_interval +_pmon_incr_slaves +_pmon_load_constants +_pmon_max_consec_posts +_pmon_max_slaves +_pmon_min_slaves +_pmon_new_slave_secs +_pmon_slave_stop_secs +_pmon_slaves_arr_size +_pmon_trees_per_slave +_posix_spawn_enabled +_post_wait_queues_num_per_class +_pq_numa_working_set_affinity +_pqq_debug_txn_act +_pqq_enabled +_pre_rewrite_push_pred +_precompute_gid_values +_pred_move_around +_pred_push_cdb_view_enabled +_predicate_elimination_enabled +_prefer_local_temp +_prefered_standby +_preplugin_backup +_prescomm +_prespawn_batch_count +_prespawn_bg_init_count +_prespawn_enabled +_prespawn_fg_init_count +_prespawn_min_count +_print_inmem_heatmap +_print_inmem_srmap +_print_refresh_schedule +_print_stat_segment +_priv_for_set_current_schema +_private_memory_address +_proc_grp_enabled +_proc_grp_numa_map +_process_allocation_slots +_process_heartbeat_range +_project_view_columns +_projection_pushdown +_projection_pushdown_debug +_prop_old_enabled +_protect_frame_heaps +_proxy_connect_after_set_container +_pseudo_bootstrap +_ptf_enable_objects +_ptf_max_rows +_ptn_cache_threshold +_ptt_max_num +_push_join_predicate +_push_join_union_view +_push_join_union_view2 +_pwise_distinct_enabled +_px_adaptive_dist_bypass_enabled +_px_adaptive_dist_bypass_optimization +_px_adaptive_dist_method +_px_adaptive_dist_method_threshold +_px_adaptive_offload_percentage +_px_adaptive_offload_threshold +_px_autodop_pq_overhead +_px_back_to_parallel +_px_bind_peek_sharing +_px_broadcast_fudge_factor +_px_buffer_ttl +_px_cdb_view_enabled +_px_cdb_view_join_enabled +_px_chunk_size +_px_chunklist_count_ratio +_px_compilation_debug +_px_compilation_trace +_px_concurrent +_px_cpu_autodop_enabled +_px_cpu_operator_bandwidth +_px_cpu_process_bandwidth +_px_dist_agg_partial_rollup_pushdown +_px_dp_array_size +_px_dump_12805_source +_px_dynamic_opt +_px_dynamic_sample_size +_px_execution_services_enabled +_px_external_table_default_stats +_px_filter_parallelized +_px_filter_skew_handling +_px_freelist_latch_divisor +_px_gim_factor +_px_granule_alignment +_px_granule_batch_size +_px_granule_randomize +_px_granule_size +_px_groupby_pushdown +_px_hold_time +_px_hybrid_TSM_HWMB_load +_px_index_sampling_objsize +_px_io_process_bandwidth +_px_io_system_bandwidth +_px_join_skew_handling +_px_join_skew_minfreq +_px_join_skew_null_handling +_px_join_skew_ratio +_px_join_skew_sampling_percent +_px_join_skew_sampling_time_limit +_px_join_skew_use_histogram +_px_join_skewed_values_count +_px_kxib_tracing +_px_load_balancing_policy +_px_load_factor +_px_load_monitor_threshold +_px_load_publish_interval +_px_loc_msg_cost +_px_max_granules_per_slave +_px_max_map_val +_px_max_message_pool_pct +_px_message_compression +_px_min_granules_per_slave +_px_min_ndv_per_slave_perc_func +_px_minus_intersect +_px_monitor_load +_px_net_msg_cost +_px_nlj_bcast_rr_threshold +_px_no_granule_sort +_px_no_stealing +_px_nss_planb +_px_numa_stealing_enabled +_px_numa_support_enabled +_px_object_sampling +_px_object_sampling_enabled +_px_object_sampling_multiplier +_px_onepass_slave_acquisition +_px_overhead_exec_ctrlmesg +_px_overhead_init_endpoints +_px_overhead_init_slavealloc +_px_overhead_teardown +_px_parallel_spawn_min_count +_px_parallelize_expression +_px_partial_rollup_pushdown +_px_partition_load_dist_threshold +_px_partition_scan_enabled +_px_partition_scan_threshold +_px_partition_skew_threshold +_px_proactive_slave_alloc_threshold +_px_proc_constrain +_px_pwg_enabled +_px_pwise_wif_enabled +_px_pwmr_enabled +_px_replication_enabled +_px_reuse_server_groups +_px_round_robin_rowcnt +_px_rownum_pd +_px_scalable_invdist +_px_scalable_invdist_mcol +_px_send_timeout +_px_shared_hash_join +_px_single_server_enabled +_px_slave_parse_first_with_outline_hints +_px_split_batches_per_slave +_px_split_multi_msg +_px_split_use_single_list +_px_tq_memcpy_threshold +_px_tq_rowhvs +_px_trace +_px_ual_serial_input +_px_wif_dfo_declumping +_px_wif_extend_distribution_keys +_px_wif_min_ndv_per_slave +_px_xtgranule_size +_qa_control +_qa_lrg_type +_qesma_bo_lru_sz +_qesma_mvob_lru_sz +_qesmasc_trc +_qksfgi_disable_action_mask +_qksfgi_disable_oct_mask +_qksfgi_dynamic_partitions +_qksfgi_feature_level +_qkslvc_47510_sys +_qkslvc_47510_test +_qkslvc_extended_bind_sz +_quarantine_enabled +_quarantine_max_mem +_quarantine_max_objs +_quarantine_per_hour +_query_cost_rewrite +_query_execution_cache_max_size +_query_execution_time_limit +_query_mmvrewrite_maxcmaps +_query_mmvrewrite_maxdmaps +_query_mmvrewrite_maxinlists +_query_mmvrewrite_maxintervals +_query_mmvrewrite_maxpreds +_query_mmvrewrite_maxqryinlistvals +_query_mmvrewrite_maxregperm +_query_on_physical +_query_rewrite_1 +_query_rewrite_2 +_query_rewrite_drj +_query_rewrite_expression +_query_rewrite_fpc +_query_rewrite_fudge +_query_rewrite_jgmigrate +_query_rewrite_maxdisjunct +_query_rewrite_or_error +_query_rewrite_setopgrw_enable +_query_rewrite_use_on_query_computation +_query_rewrite_vop_cleanup +_queue_buffer_max_dump_len +_rac_dbtype_reset +_rac_propagate_last_rba +_radm_enabled +_rbr_ckpt_tracing +_rc_sys_obj_enabled +_rcfg_disable_verify +_rcfg_parallel_fixwrite +_rcfg_parallel_replay +_rcfg_parallel_verify +_rdbms_compatibility +_rdbms_internal_fplib_enabled +_rdbms_internal_fplib_raise_errors +_re_fast_sql_operator +_re_independent_expression_cache_size +_re_num_complex_operator +_re_num_rowcache_load +_re_result_cache_keysiz +_re_result_cache_size +_read_mostly_enable_logon +_read_mostly_instance +_read_mostly_instance_qa_control +_read_mostly_lock_mitigation +_read_mostly_slave_timeout +_read_only_slave_timeout +_read_only_violation_dump_to_trace +_read_only_violation_max_count +_read_only_violation_max_count_per_module +_read_optimized_table_lookup +_readable_standby_sync_interval +_readable_standby_sync_timeout +_reader_farm_isolation_enable +_reader_farm_isolation_time_threshold +_real_time_apply_sim +_realfree_heap_max_size +_realfree_heap_mode +_realfree_heap_pagesize +_realfree_pq_heap_pagesize +_reco_sessions_max_percentage +_reconfiguration_opt_level +_record_module_name +_recoverable_recovery_batch_percent +_recoverable_recovery_max_influx_buffers +_recovery_asserts +_recovery_percentage +_recovery_read_limit +_recovery_skip_cfseq_check +_recovery_verify_writes +_recursive_imu_transactions +_recursive_with_branch_iterations +_recursive_with_control +_recursive_with_max_recursion_level +_recursive_with_parallel +_recursive_with_using_temp_table +_redef_on_statement +_redo_compatibility_check +_redo_log_check_backup +_redo_log_debug_config +_redo_log_key_reuse_count +_redo_log_record_life +_redo_read_from_memory +_redo_transport_async_mode +_redo_transport_catch_up_bandwidth_percentage +_redo_transport_compress_all +_redo_transport_evict_threshold +_redo_transport_max_kbytes_sec +_redo_transport_min_kbytes_sec +_redo_transport_resource_management +_redo_transport_sanity_check +_redo_transport_stall_time +_redo_transport_stall_time_long +_redo_transport_stream_test +_redo_transport_stream_writes +_redo_transport_vio_size_req +_redo_write_coalesce_all_threshold +_redo_write_coalesce_slave_threshold +_redo_write_sync_single_io +_reduce_sby_log_scan +_ref_cons_sql_enforcement +_reg_cache_status +_region_name +_release_insert_threshold +_reliable_block_sends +_relocate_pdb +_relocation_commit_batch_size +_remessage_dbwrs +_remote_asm +_remote_awr_enabled +_remove_aggr_subquery +_remove_exf_component +_rep_base_path +_replace_virtual_columns +_report_capture_cycle_time +_report_capture_dbtime_percent_cutoff +_report_capture_recharge_window +_report_capture_timeband_length +_report_request_ageout_minutes +_request_boundaries +_reset_maxcap_history +_resource_includes_unlimited_tablespace +_resource_manager_always_off +_resource_manager_plan +_restore_block0 +_restore_create_directory +_restore_maxopenfiles +_restore_spfile +_restrict_become_user +_restrict_db_link_user_entries +_restrict_local_user_dml +_result_cache_auto_dml_monitoring_duration +_result_cache_auto_dml_monitoring_slots +_result_cache_auto_dml_threshold +_result_cache_auto_dml_trend_threshold +_result_cache_auto_execution_threshold +_result_cache_auto_size_threshold +_result_cache_auto_time_distance +_result_cache_auto_time_threshold +_result_cache_black_list +_result_cache_block_size +_result_cache_copy_block_count +_result_cache_deterministic_plsql +_result_cache_global +_result_cache_latch_free_reads +_result_cache_per_pdb +_result_cache_timeout +_result_cache_white_list +_resumable_critical_alert +_reuse_dropped_pdbid_time +_reuse_index_loop +_rf_blocks_per_entity +_right_outer_hash_enable +_rm_cluster_interconnects +_rm_exadata_partition_fc +_rm_exadata_pdb_cpu_cnt +_rm_exadata_pdb_cpu_cnt_mult +_rm_force_caging +_rm_numa_sched_enable +_rm_numa_simulation_cpus +_rm_numa_simulation_pgs +_rman_io_priority +_rman_roundrobin_placement +_rmt_for_table_redef_enabled +_rmv_dynamic_priority +_roi_first_open_wait +_rollback_segment_count +_rollback_segment_initial +_rollback_stopat +_rond_test_mode +_root_clone_state_from_root +_row_cache_cursors +_row_cache_dump_cooling_period +_row_cache_dump_interval +_row_cr +_row_locking +_row_shipping_explain +_row_shipping_threshold +_rowlen_for_chaining_threshold +_rowsets_cdb_view_enabled +_rowsets_enabled +_rowsets_max_enc_rows +_rowsets_max_rows +_rowsets_target_maxsize +_rowsets_use_encoding +_rowsource_execution_statistics +_rowsource_profiling_statistics +_rowsource_statistics_sampfreq +_rowsrc_trace_level +_rq_shm_max_size +_rta_sync_wait_timeout +_rtabnd_update_offload +_rtaddm_trigger_args +_rtaddm_trigger_enabled +_rtc_infeasible_threshold +_rule_max_dnfp_cnt +_sage_block_checking +_sample_rows_per_block +_save_afns_on_subset_pdb_creation +_scalar_type_lob_storage_threshold +_scatter_gcs_resources +_scatter_gcs_shadows +_sched_delay_max_samples +_sched_delay_measurement_sleep_us +_sched_delay_os_tick_granularity_us +_sched_delay_sample_collection_thresh_ms +_sched_delay_sample_interval_ms +_scn_wait_interface_max_backoff_time_secs +_scn_wait_interface_max_timeout_secs +_sdiag_crash +_sec_enable_test_rpcs +_second_spare_parameter +_securefile_log_num_latches +_securefile_log_shared_pool_size +_securefile_timers +_securefiles_bgtimeout +_securefiles_breakreten_retry +_securefiles_bulkclnout +_securefiles_bulkinsert +_securefiles_concurrency_estimate +_securefiles_fg_retry +_securefiles_forceflush +_securefiles_memory_percentofSGA +_securefiles_spcutl +_seed_root_undo_ratio +_selectivity_for_srf_enabled +_selfjoin_mv_duplicates +_selftune_checkpoint_write_pct +_selftune_checkpointing_lag +_sem_per_semid +_send_ast_to_foreground +_send_close_with_block +_send_requests_to_pi +_sequence_scale_extend +_sequence_scale_noextend +_serial_direct_read +_serial_log_write_worker_io +_serial_recovery +_serializable +_serialize_lgwr_sync_io +_service_cleanup_timeout +_session_allocation_latches +_session_aware_replay +_session_cached_instantiations +_session_context_size +_session_idle_bit_latches +_session_page_extent +_session_wait_history +_set_container_service +_seventeenth_spare_parameter +_seventh_spare_parameter +_seventieth_spare_parameter +_seventy-eighth_spare_parameter +_seventy-fifth_spare_parameter +_seventy-first_spare_parameter +_seventy-fourth_spare_parameter +_seventy-ninth_spare_parameter +_seventy-second_spare_parameter +_seventy-seventh_spare_parameter +_seventy-sixth_spare_parameter +_seventy-third_spare_parameter +_sf_default_enabled +_sga_alloc_slaves_term_timeout_secs +_sga_clear_dump +_sga_early_trace +_sga_heap_chunk_alignment +_sga_heap_chunk_alignment_disabled +_shadow_lost_write_found +_shadow_lost_write_tracing +_shard_sql_use_chunk_ids +_shardgroup_name +_shardspace_name +_share_drcp_proxy_sessions +_shared_io_pool_buf_size +_shared_io_pool_debug_trc +_shared_io_pool_size +_shared_io_set_value +_shared_iop_max_size +_shared_pool_max_size +_shared_pool_max_sz +_shared_pool_minsize_on +_shared_pool_reserved_min_alloc +_shared_pool_reserved_pct +_shared_server_load_balance +_shared_server_num_queues +_shared_server_sizing_coeff +_shared_servers_performance +_shd_atomic_move +_shd_reptype +_shmprotect +_short_stack_timeout_ms +_show_login_pdb_sessions +_show_mgd_recovery_state +_shrd_que_tm_processes +_shrd_que_tm_statistics_duration +_shrunk_aggs_disable_threshold +_shrunk_aggs_enabled +_shutdown_completion_timeout_mins +_shutdown_sync_enable +_side_channel_batch_size +_side_channel_batch_timeout +_side_channel_batch_timeout_ms +_simple_view_merging +_simulate_dax_storage +_simulate_disk_sectorsize +_simulate_io_wait +_simulate_logical_sectorsize +_simulate_mem_transfer +_simulated_log_write_usecs +_simulator_bucket_mindelta +_simulator_internal_bound +_simulator_lru_rebalance_sizthr +_simulator_lru_rebalance_thresh +_simulator_lru_scan_count +_simulator_pin_inval_maxcnt +_simulator_reserved_heap_count +_simulator_reserved_obj_count +_simulator_sampling_factor +_simulator_upper_bound_multiple +_single_process +_siop_flashback_scandepth +_siop_perc_of_bc_x100 +_sixteenth_spare_parameter +_sixth_spare_parameter +_sixtieth_spare_parameter +_sixty-eighth_spare_parameter +_sixty-fifth_spare_parameter +_sixty-first_spare_parameter +_sixty-fourth_spare_parameter +_sixty-ninth_spare_parameter +_sixty-second_spare_parameter +_sixty-seventh_spare_parameter +_sixty-sixth_spare_parameter +_sixty-third_spare_parameter +_size_of_log_table +_size_of_status_table +_skgxp_ant_options +_skgxp_ctx_flags1 +_skgxp_ctx_flags1mask +_skgxp_dynamic_protocol +_skgxp_gen_ant_off_rpc_timeout_in_sec +_skgxp_gen_ant_ping_misscount +_skgxp_gen_rpc_no_path_check_in_sec +_skgxp_gen_rpc_timeout_in_sec +_skgxp_inets +_skgxp_min_rpc_rcv_zcpy_len +_skgxp_min_zcpy_len +_skgxp_reaping +_skgxp_rgn_ports +_skgxp_spare_param1 +_skgxp_spare_param2 +_skgxp_spare_param3 +_skgxp_spare_param4 +_skgxp_spare_param5 +_skgxp_udp_ach_reaping_time +_skgxp_udp_ack_delay +_skgxp_udp_enable_dynamic_credit_mgmt +_skgxp_udp_hiwat_warn +_skgxp_udp_interface_detection_time_secs +_skgxp_udp_keep_alive_ping_timer_secs +_skgxp_udp_lmp_mtusize +_skgxp_udp_lmp_on +_skgxp_udp_timed_wait_buffering +_skgxp_udp_timed_wait_seconds +_skgxp_udp_use_tcb +_skgxp_zcpy_flags +_skgxpg_last_parameter +_skip_acfs_checks +_skip_app_object_check +_skip_app_unconverted_check +_skip_assume_msg +_skip_pdb_recovery_if_keystore_not_open +_skip_trstamp_check +_skip_unconverted_change_vector +_slave_mapping_enabled +_slave_mapping_group_size +_slave_mapping_skew_ratio +_slow_kill_on_pdb_close_immediate +_small_table_threshold +_smm_advice_enabled +_smm_advice_log_size +_smm_auto_cost_enabled +_smm_auto_max_io_size +_smm_auto_min_io_size +_smm_bound +_smm_control +_smm_freeable_retain +_smm_isort_cap +_smm_max_size +_smm_max_size_static +_smm_min_size +_smm_px_max_size +_smm_px_max_size_static +_smm_retain_size +_smm_trace +_smon_internal_errlimit +_smon_undo_seg_rescan_limit +_smu_debug_mode +_smu_error_simulation_site +_smu_error_simulation_type +_smu_timeouts +_snapshot_recovery_enabled +_sort_elimination_cost_ratio +_sort_multiblock_read_count +_sort_spill_threshold +_sort_sync_min_spill_threshold +_sort_sync_min_spillsize +_space_align_size +_spacebg_sync_segblocks +_spacereuse_track_memlimit +_spadr +_spare_test_parameter +_sparse_backing_file +_spawn_diag_opts +_spawn_diag_thresh_secs +_spfdc +_spfei +_spfoc +_spin_count +_split_file_copy +_spr_max_rules +_spr_push_pred_refspr +_spr_use_AW_AS +_sql_alias_scope +_sql_analyze_enable_auto_txn +_sql_analyze_parse_model +_sql_compatibility +_sql_connect_capability_override +_sql_connect_capability_table +_sql_diag_repo_origin +_sql_diag_repo_retain +_sql_hash_debug +_sql_hvshare_debug +_sql_hvshare_threshold +_sql_model_unfold_forloops +_sql_ncg_mode +_sql_plan_directive_mgmt_control +_sql_plan_management_control +_sql_show_expreval +_sqlexec_cache_aware_hash_aggr_enabled +_sqlexec_cache_aware_hash_join_enabled +_sqlexec_disable_hash_based_distagg_tiv +_sqlexec_distagg_optimization_settings +_sqlexec_encoding_aware_hj_enabled +_sqlexec_encoding_aware_hj_min_compression_ratio +_sqlexec_hash_based_distagg_enabled +_sqlexec_hash_based_distagg_ssf_enabled +_sqlexec_hash_join_uses_xmem +_sqlexec_join_group_aware_hj_enabled +_sqlexec_join_group_aware_hj_unencoded_rowsets_tolerated +_sqlexec_pwiseops_with_binds_enabled +_sqlexec_pwiseops_with_sqlfuncs_enabled +_sqlexec_reorder_wif_enabled +_sqlexec_sort_uses_xmem +_sqlexec_use_kgghash3 +_sqlexec_use_rwo_aware_expr_analysis +_sqlmon_binds_xml_format +_sqlmon_max_plan +_sqlmon_max_planlines +_sqlmon_recycle_time +_sqlmon_threshold +_sqlset_hash_max_size +_sqltune_category_parsed +_srvntfn_job_deq_timeout +_srvntfn_jobsubmit_interval +_srvntfn_max_concurrent_jobs +_srvntfn_q_msgcount +_srvntfn_q_msgcount_inc +_sscr_dir +_sscr_osdir +_sta_control +_stack_guard_level +_standby_causal_heartbeat_timeout +_standby_flush_mode +_standby_implicit_rcv_timeout +_standby_newkey_keystore_location +_standby_switchover_timeout +_stat_aggs_one_pass_algorithm +_static_backgrounds +_statistics_based_srf_enabled +_stats_encryption_enabled +_step_down_limit_in_pct +_streams_pool_max_size +_strict_dml_data_link +_strict_redaction_semantics +_subquery_pruning_cost_factor +_subquery_pruning_enabled +_subquery_pruning_mv_enabled +_subquery_pruning_reduction +_super_shared_conversion_threshold +_super_shared_enable +_super_shared_max_exclusive_conversions +_suppress_identifiers_on_dupkey +_suspended_session_timeout +_switch_current_scan_scn +_switchover_through_cascade +_switchover_timeout +_switchover_to_standby_option +_switchover_to_standby_switch_log +_swrf_metric_frequent_mode +_swrf_mmon_dbfus +_swrf_mmon_flush +_swrf_mmon_metrics +_swrf_on_disk_enabled +_swrf_test_action +_swrf_test_dbfus +_sync_app_pdb_first_open +_sync_primary_wait_time +_synonym_repoint_tracing +_sys_logon_delay +_sysaux_test_param +_system_api_interception_debug +_system_index_caching +_system_state_cputime_limit +_system_state_runtime_limit +_system_trig_enabled +_ta_lns_wait_for_arch_log +_table_lookup_prefetch_size +_table_lookup_prefetch_thresh +_table_scan_cost_plus_one +_tablespaces_per_transaction +_target_log_write_size +_target_log_write_size_percent_for_poke +_target_log_write_size_spinwait +_target_log_write_size_timeout +_target_rba_max_lag_percentage +_tdb_debug_mode +_temp_tran_block_threshold +_temp_tran_cache +_temp_undo_disable_adg +_temp_undo_optimal_extents +_tenth_spare_parameter +_test_hm_extent_map +_test_ksusigskip +_test_offload_pdb_sga_init +_test_param_1 +_test_param_10 +_test_param_10_bi +_test_param_10_i +_test_param_11_base +_test_param_11_dep +_test_param_12 +_test_param_2 +_test_param_3 +_test_param_4 +_test_param_5 +_test_param_6 +_test_param_7 +_test_param_8 +_test_param_9 +_test_param_9_1 +_test_param_9_2 +_test_param_9_3 +_test_xmem_alloc_size +_third_spare_parameter +_thirteenth_spare_parameter +_thirtieth_spare_parameter +_thirty-eighth_spare_parameter +_thirty-fifth_spare_parameter +_thirty-first_spare_parameter +_thirty-fourth_spare_parameter +_thirty-ninth_spare_parameter +_thirty-second_spare_parameter +_thirty-seventh_spare_parameter +_thirty-sixth_spare_parameter +_thirty-third_spare_parameter +_thread_state_change_timeout_pnp +_threshold_alerts_enable +_time_based_rcv_ckpt_target +_time_based_rcv_hdr_update_interval +_timemodel_collection +_timeout_actions_enabled +_timer_precision +_total_large_extent_memory +_touch_sga_pages_during_allocation +_tq_dump_period +_trace_buffer_wait_timeouts +_trace_buffers +_trace_dump_all_procs +_trace_dump_client_buckets +_trace_dump_cur_proc_only +_trace_dump_static_only +_trace_events +_trace_files_public +_trace_kqlidp +_trace_ktds +_trace_ktfs +_trace_ktfs_mem +_trace_navigation_scope +_trace_pin_time +_trace_pool_size +_trace_processes +_trace_temp +_trace_virtual_columns +_track_metrics_memory +_track_space_reuse +_track_space_reuse_rac +_transaction_auditing +_transaction_recovery_servers +_transient_logical_clear_hold_mrp_bit +_truncate_optimization_enabled +_tsenc_obfuscate_key +_tsenc_tracing +_tsm_connect_string +_tsm_disable_auto_cleanup +_tstz_localtime_bypass +_tts_allow_charset_mismatch +_twelfth_spare_parameter +_twentieth_spare_parameter +_twenty-eighth_spare_parameter +_twenty-fifth_spare_parameter +_twenty-first_spare_parameter +_twenty-fourth_spare_parameter +_twenty-ninth_spare_parameter +_twenty-second_spare_parameter +_twenty-seventh_spare_parameter +_twenty-sixth_spare_parameter +_twenty-third_spare_parameter +_two-hundred-and-eighteenth_spare_parameter +_two-hundred-and-eighth_spare_parameter +_two-hundred-and-eleventh_spare_parameter +_two-hundred-and-fifteenth_spare_parameter +_two-hundred-and-fifth_spare_parameter +_two-hundred-and-first_spare_parameter +_two-hundred-and-fourteenth_spare_parameter +_two-hundred-and-fourth_spare_parameter +_two-hundred-and-nineteenth_spare_parameter +_two-hundred-and-ninth_spare_parameter +_two-hundred-and-second_spare_parameter +_two-hundred-and-seventeenth_spare_parameter +_two-hundred-and-seventh_spare_parameter +_two-hundred-and-sixteenth_spare_parameter +_two-hundred-and-sixth_spare_parameter +_two-hundred-and-tenth_spare_parameter +_two-hundred-and-third_spare_parameter +_two-hundred-and-thirteenth_spare_parameter +_two-hundred-and-twelfth_spare_parameter +_two-hundred-and-twentieth_spare_parameter +_two-hundredth_spare_parameter +_two_pass +_two_pass_reverse_polish_enabled +_txn_control_trace_buf_size +_uga_cga_large_extent_size +_ultrafast_latch_statistics +_umf_remote_enabled +_umf_remote_target_dblink +_umf_test_action +_undo_autotune +_undo_block_compression +_undo_debug_mode +_undo_debug_usage +_undo_tbs_slave_percent +_undotbs_regular_tables +_undotbs_stepdown_pcent +_unified_audit_flush_interval +_unified_audit_flush_threshold +_unified_audit_policy_disabled +_union_rewrite_for_gs +_uniq_cons_sql_enforcement +_unnest_subquery +_unused_block_compression +_update_datafile_headers_with_space_information +_upddel_dba_hash_mask_bits +_upgrade_capture_noops +_upgrade_optim +_usd_preload_blks +_usd_recent_read +_use_adaptive_log_file_sync +_use_best_fit +_use_cached_asm_free_space +_use_column_stats_for_function +_use_dynamic_shares +_use_fallocate_for_mga +_use_fips_mode +_use_futex_ipc +_use_hugetlbfs_for_SGA +_use_hybrid_encryption_mode +_use_ism +_use_ism_for_pga +_use_large_pages_for_mga +_use_nosegment_indexes +_use_pdb_parselock +_use_platform_compression_lib +_use_platform_encryption_lib +_use_platform_hash_function +_use_realfree_heap +_use_seq_process_cache +_use_single_log_writer +_use_vector_post +_use_zero_copy_io +_user_defined_sharding +_utlmmig_table_stats_gathering +_uts_enable_alltrc_stats +_uts_first_segment_retain +_uts_first_segment_size +_uts_inc_inmem_trace +_uts_trace_buffer_size +_uts_trace_disk_threshold +_uts_trace_files_nopurge +_uts_trace_segment_size +_uts_trace_segments +_validate_flashback_database +_validate_metric_groups +_validate_readmem_redo +_vector_aggregation_max_size +_vector_dense_accum_max +_vector_encoding_mode +_vector_operations_control +_vector_serialize_temp_threshold +_vendor_lib_loc +_verify_encrypted_tablespace_keys +_verify_fg_log_checksum +_verify_flashback_redo +_verify_undo_quota +_very_large_object_threshold +_virtual_column_access_control +_virtual_column_overload_allowed +_vkrm_schedule_interval +_vktm_assert_thresh +_wait_breakup_threshold_csecs +_wait_breakup_time_csecs +_wait_for_busy_session +_wait_for_sync +_wait_outlier_detection_enable +_wait_outlier_dump_flags +_wait_outlier_event_names +_wait_outlier_lambda_x1000 +_wait_outlier_min_waits +_wait_outlier_num_outliers +_wait_samples_max_sections +_wait_samples_max_time_secs +_wait_tracker_interval_secs +_wait_tracker_num_intervals +_wait_yield_hp_mode +_wait_yield_mode +_wait_yield_sleep_freq +_wait_yield_sleep_time_msecs +_wait_yield_yield_freq +_walk_insert_threshold +_watchpoint_on +_wcr_control +_wcr_grv_cache_size +_wcr_seq_cache_size +_wcr_test_action +_widetab_comp_enabled +_windowfunc_optimization_settings +_with_subquery +_worker_threads +_write_clones +_xa_internal_retries +_xds_max_child_cursors +_xengem_devname +_xengem_diagmode +_xengem_enabled +_xpl_peeked_binds_log_size +_xpl_trace +_xs_cleanup_task +_xs_dispatcher_only +_xs_logon_grant +_xsolapi_auto_materialization_bound +_xsolapi_auto_materialization_type +_xsolapi_build_trace +_xsolapi_debug_output +_xsolapi_densify_cubes +_xsolapi_dimension_group_creation +_xsolapi_dml_trace +_xsolapi_fetch_type +_xsolapi_fix_vptrs +_xsolapi_generate_with_clause +_xsolapi_hierarchy_value_type +_xsolapi_load_at_process_start +_xsolapi_materialization_rowcache_min_rows_for_use +_xsolapi_materialize_sources +_xsolapi_metadata_reader_mode +_xsolapi_odbo_mode +_xsolapi_opt_aw_position +_xsolapi_optimize_suppression +_xsolapi_precompute_subquery +_xsolapi_remove_columns_for_materialization +_xsolapi_set_nls +_xsolapi_share_executors +_xsolapi_source_trace +_xsolapi_sql_all_multi_join_non_base_hints +_xsolapi_sql_all_non_base_hints +_xsolapi_sql_auto_dimension_hints +_xsolapi_sql_auto_measure_hints +_xsolapi_sql_dimension_hints +_xsolapi_sql_enable_aw_join +_xsolapi_sql_enable_aw_qdr_merge +_xsolapi_sql_hints +_xsolapi_sql_measure_hints +_xsolapi_sql_minus_threshold +_xsolapi_sql_optimize +_xsolapi_sql_prepare_stmt_cache_size +_xsolapi_sql_remove_columns +_xsolapi_sql_result_set_cache_size +_xsolapi_sql_symmetric_predicate +_xsolapi_sql_top_dimension_hints +_xsolapi_sql_top_measure_hints +_xsolapi_sql_use_bind_variables +_xsolapi_stringify_order_levels +_xsolapi_support_mtm +_xsolapi_suppression_aw_mask_threshold +_xsolapi_suppression_chunk_size +_xsolapi_use_models +_xsolapi_use_olap_dml +_xsolapi_use_olap_dml_for_rank +_xt_coverage +_xt_def_compression_ratio +_xt_http_wscl +_xt_legacy_debug_flags +_xt_sampling_scan_granules +_xt_sampling_scan_granules_min_granules +_xt_trace +_xtbigdata_max_buffersize +_xtbuffer_size +_xtts_allow_pre10 +_xtts_set_platform_info +_zonemap_control +_zonemap_staleness_tracking +_zonemap_usage_tracking +_zonemap_use_enabled +abort +abs +absent +access +accessed +account +acl +acos +across +action +actions +activate +active +active_component +active_data +active_function +active_instance_count +active_tag +activity +adaptive_plan +add +add_column +add_group +add_months +adg_account_info_tracking +adg_redirect_dml +adg_redirect_plsql +adj_date +admin +administer +administrator +advanced +advise +advisor +afd_diskstring +affinity +after +aggregate +aggregates +algorithm +alias +all +all_rows +allocate +allow +allow_global_dblinks +allow_group_access_to_sga +alter +alternate +always +analytic +analyze +ancestor +ancillary +and +and_equal +anomaly +ansi_rearch +answer_query_using_stats +antijoin +any +anyschema +append +append_values +appendchildxml +application +apply +approx_count +approx_count_distinct +approx_count_distinct_agg +approx_count_distinct_detail +approx_for_aggregation +approx_for_count_distinct +approx_for_percentile +approx_median +approx_percentile +approx_percentile_agg +approx_percentile_detail +approx_rank +approx_sum +aq_tm_processes +archival +archive +archive_lag_target +archived +archivelog +array +as_json +asc +ascii +asciistr +asin +asis +asm_diskgroups +asm_diskstring +asm_io_processes +asm_power_limit +asm_preferred_read_failure_groups +assembly +assign +associate +async +asynchronous +atan +atan2 +attribute +attributes +audit +audit_file_dest +audit_sys_operations +audit_syslog_level +audit_trail +authenticated +authentication +authid +authorization +auto +auto_login +auto_reoptimize +autoallocate +autoextend +automatic +autotask_max_active_pdbs +av_cache +availability +avcache_op +average_rank +avg +avmdx_op +avro +awr_pdb_autoflush_enabled +awr_pdb_max_parallel_slaves +awr_snapshot_time_offset +background +background_core_dump +background_dump_dest +backup +backup_tape_io_slaves +band_join +basic +basicfile +batch +batch_table_access_by_rowid +batchsize +become +before +begin +begin_outline_data +beginning +behalf +bequeath +between +bfile +bfilename +bigfile +bin_to_num +binary +binary_double +binary_double_infinity +binary_double_nan +binary_float +binary_float_infinity +binary_float_nan +bind_aware +binding +bitand +bitmap +bitmap_and +bitmap_merge_area_size +bitmap_tree +bitmaps +bits +blank_trimming +blob +block +block_range +blocks +blocksize +body +both +bound +branch +breadth +broadcast +bson +buffer +buffer_cache +buffer_pool +buffer_pool_keep +buffer_pool_recycle +build +bulk +bushy_join +bypass_recursive_check +bypass_ujvc +byte +cache +cache_cb +cache_instances +cache_temp_table +caching +calculated +call +callback +cancel +capacity +caption +cardinality +cascade +case +cast +category +cdb$default +cdb_cluster +cdb_cluster_name +cdb_http_handler +ceil +cell_flash_cache +cell_offload_compaction +cell_offload_decryption +cell_offload_parameters +cell_offload_plan_display +cell_offload_processing +cell_offloadgroup_name +cellmemory +certificate +cfile +chained +change +change_dupkey_error_index +char +char_cs +character +chartorowid +check +check_acl_rewrite +checkpoint +child +choose +chr +chunk +circuits +class +classification +classifier +clause +clean +cleanup +clear +client +client_result_cache_lag +client_result_cache_size +clob +clone +clonedb +clonedb_dir +close +close_cached_open_cursors +closest +cluster +cluster_by_rowid +cluster_database +cluster_database_instances +cluster_details +cluster_distance +cluster_id +cluster_interconnects +cluster_probability +cluster_set +clustering +clustering_factor +co_auth_ind +coalesce +coalesce_sq +coarse +cold +collate +collation +collect +column +column_auth_indicator +column_authorization_indicator +column_stats +column_value +columnar +columns +comment +commit +commit_logging +commit_point_strength +commit_wait +commit_write +committed +common +common_data_map +common_user_prefix +compact +compatibility +compatible +compile +complete +compliance +component +components +compose +composite +composite_limit +compound +compress +computation +compute +con_dbid_to_id +con_guid_to_id +con_id +con_id_filter +con_id_to_con_name +con_id_to_dbid +con_name_to_id +con_uid_to_id +concat +condition +conditional +confirm +conforming +connect +connect_by_cb_whr_only +connect_by_combine_sw +connect_by_cost_based +connect_by_elim_dups +connect_by_filtering +connect_by_iscycle +connect_by_isleaf +connect_by_root +connect_time +connection_brokers +consider +consistent +const +constant +constraint +constraints +container +container_data +container_data_admit_null +container_map +container_map_object +containers +containers_default +containers_parallel_degree +content +contents +context +continue +control_file_record_keep_time +control_files +control_management_pack_access +controlfile +conversion +convert +cookie +copy +core_dump_dest +corr +corr_k +corr_s +corrupt_xid +corrupt_xid_all +corruption +cos +cosh +cost +cost_xml_query_rewrite +count +covar_pop +covar_samp +cpu_costing +cpu_count +cpu_per_call +cpu_per_session +crash +create +create_bitmap_area_size +create_file_dest +create_stored_outlines +creation +credential +credentials +critical +cross +crossedition +csconvert +cube +cube_aj +cube_gb +cube_sj +cume_dist +cume_distm +current +current_date +current_instance +current_schema +current_time +current_timestamp +current_user +currentv +cursor +cursor_bind_capture_destination +cursor_invalidation +cursor_sharing +cursor_sharing_exact +cursor_space_for_time +cursor_specific_segment +cycle +dangling +data +data_guard_sync_latency +data_link_dml +data_security_rewrite_limit +data_transfer_cache_size +data_validate +database +datafile +datafiles +datamovement +dataobj_to_mat_partition +dataobj_to_partition +dataobjno +datapump +datastore +date +date_mode +day +days +db_16k_cache_size +db_2k_cache_size +db_32k_cache_size +db_4k_cache_size +db_8k_cache_size +db_big_table_cache_percent_target +db_block_buffers +db_block_checking +db_block_checksum +db_block_size +db_cache_advice +db_cache_size +db_create_file_dest +db_create_online_log_dest_1 +db_create_online_log_dest_2 +db_create_online_log_dest_3 +db_create_online_log_dest_4 +db_create_online_log_dest_5 +db_domain +db_file_multiblock_read_count +db_file_name_convert +db_files +db_flash_cache_file +db_flash_cache_size +db_flashback_retention_target +db_index_compression_inheritance +db_keep_cache_size +db_lost_write_protect +db_name +db_performance_profile +db_recovery_file_dest +db_recovery_file_dest_size +db_recycle_cache_size +db_role_change +db_securefile +db_ultra_safe +db_unique_name +db_unrecoverable_scn_tracking +db_version +db_writer_processes +dba +dba_recyclebin +dbms_stats +dbtimezone +dbwr_io_slaves +ddl +ddl_lock_timeout +deallocate +debug +debugger +dec +decimal +declare +decode +decompose +decompress +decorrelate +decr +decrement +decrypt +deduplicate +default +default_collation +default_pdb_hint +default_sharing +defaults +deferrable +deferred +deferred_segment_creation +define +defined +definer +definition +degree +delay +delegate +delete +delete_all +deletexml +demand +dense_rank +dense_rankm +dependent +depth +dequeue +deref +deref_no_rewrite +desc +descendant +description +destroy +detached +determined +determines +deterministic +dg_broker_config_file1 +dg_broker_config_file2 +dg_broker_start +dg_gather_stats +diagnostic_dest +dictionary +digest +dimension +dimensions +direct_load +direct_path +directory +disable +disable_all +disable_container_map +disable_containers_default +disable_parallel_dml +disable_pdb_feature +disable_preset +disable_rpke +disallow +disassociate +discard +disconnect +disk +disk_asynch_io +diskgroup +disks +dismount +dispatchers +dist_agg_prollup_pushdown +distinct +distinguished +distribute +distributed +distributed_lock_timeout +dml +dml_locks +dml_update +dnfs_batch_size +docfidelity +document +domain_index_filter +domain_index_no_sort +domain_index_sort +double +downgrade +driving_site +drop +drop_column +drop_group +dst_upgrade_insert_conv +dump +duplicate +duplicated +dynamic +dynamic_sampling +dynamic_sampling_est_cdn +each +edition +editionable +editioning +editions +element +elim_groupby +eliminate_join +eliminate_oby +eliminate_outer_join +eliminate_sq +else +empty +empty_blob +empty_clob +enable +enable_all +enable_automatic_maintenance_pdb +enable_ddl_logging +enable_dnfs_dispatcher +enable_goldengate_replication +enable_parallel_dml +enable_pluggable_database +enable_preset +enabled_PDBs_on_standby +encode +encoding +encrypt +encrypt_new_tablespaces +encryption +end +end_outline_data +enforce +enforced +enqueue +enterprise +entityescaping +entry +equipart +error +error_argument +error_on_overlap_time +errors +escape +estimate +eval +evalname +evaluate +evaluation +event +events +every +exafusion_enabled +except +exceptions +exchange +exclude +excluding +exclusive +execute +exempt +existing +exists +existsnode +exp +expand_gset_to_union +expand_table +expire +explain +explosion +export +expr_corr_check +express +extend +extended +extends +extent +extents +external +external_keystore_credential_location +externally +extra +extract +extractclobxml +extractvalue +facility +fact +factor +factorize_join +failed +failed_login_attempts +failgroup +failover +failure +fal_client +fal_server +false +family +far +fast +fast_start_io_target +fast_start_mttr_target +fast_start_parallel_rollback +fbtscan +feature +feature_compare +feature_details +feature_id +feature_set +feature_value +federation +fetch +file +file_mapping +file_name_convert +filegroup +fileio_network_adapters +filesystem_like_logging +filesystemio_options +filter +final +fine +finish +first +first_rows +first_value +firstm +fixed_date +fixed_view_data +flagger +flash_cache +flashback +flex +float +flob +floor +flush +folder +following +follows +for +force +force_spatial +force_xml_query_rewrite +foreign +forever +format +forward +forward_listener +fragment_number +free +freelist +freelists +freepools +fresh +fresh_mv +from +from_tz +full +full_outer_join_to_outer +function +functions +gather_optimizer_statistics +gather_plan_statistics +gby_conc_rollup +gby_pushdown +gcs_server_processes +generated +get +global +global_name +global_names +global_topic_enabled +global_txn_processes +globally +grant +granted +granular +greatest +group +group_by +group_id +grouping +grouping_id +groups +guarantee +guaranteed +guard +half_years +hash +hash_aj +hash_area_size +hash_sj +hashkeys +having +header +heap +heat_map +help +hextoraw +hextoref +hi_shared_memory_address +hidden +hide +hier_ancestor +hier_caption +hier_child_count +hier_column +hier_depth +hier_description +hier_has_children +hier_lag +hier_lead +hier_level +hier_member_name +hier_member_unique_name +hier_order +hier_parent +hier_window +hierarchical +hierarchies +hierarchy +high +hintset_begin +hintset_end +host +hot +hour +hours +hs_autoregister +http +hwm_brokered +hybrid +identified +identifier +identity +idgenerators +idle_time +ifile +ignore +ignore_optim_embedded_hints +ignore_row_on_dupkey_index +ignore_where_clause +ilm +immediate +impact +import +in_memory_metadata +in_xquery +inactive +inactive_account_time +include +include_version +includes +including +incr +increment +incremental +indent +index +index_asc +index_combine +index_desc +index_ffs +index_filter +index_join +index_rows +index_rrs +index_rs +index_rs_asc +index_rs_desc +index_scan +index_skip_scan +index_ss +index_ss_asc +index_ss_desc +index_stats +indexed +indexes +indexing +indextype +indextypes +indicator +infinite +informational +inherit +initcap +initial +initialized +initially +initrans +inline +inline_xmltype_nt +inline_xt +inmemory +inmemory_adg_enabled +inmemory_automatic_level +inmemory_clause_default +inmemory_expressions_usage +inmemory_force +inmemory_max_populate_servers +inmemory_optimized_arithmetic +inmemory_prefer_xmem_memcompress +inmemory_prefer_xmem_priority +inmemory_pruning +inmemory_query +inmemory_size +inmemory_trickle_repopulate_servers_percent +inmemory_virtual_columns +inmemory_xmem_size +inner +inplace +insert +insertchildxml +insertchildxmlafter +insertchildxmlbefore +insertxmlafter +insertxmlbefore +install +instance +instance_abort_delay_time +instance_groups +instance_mode +instance_name +instance_number +instance_type +instances +instant_restore +instantiable +instantly +instead +instr +instr2 +instr4 +instrb +instrc +int +integer +interleaved +intermediate +internal_convert +internal_use +interpreted +intersect +interval +into +intra_cdb +invalidate +invalidation +invisible +ioseektim +iotfrspeed +isolate +isolation +isolation_level +iterate +iteration_number +java +java_jit_enabled +java_max_sessionspace_size +java_pool_size +java_restrict +java_soft_sessionspace_limit +job +job_queue_processes +join +json +json_array +json_arrayagg +json_equal +json_exists +json_exists2 +json_mergepatch +json_object +json_objectagg +json_patch +json_query +json_table +json_textcontains +json_textcontains2 +json_transform +json_value +jsonget +jsonparse +jsontoxml +keep +keep_duplicates +kerberos +key +key_length +keys +keysize +keystore +kill +label +lag +lag_diff +lag_diff_percent +language +large_pool_size +last +last_day +last_value +lateral +lax +layer +ldap_directory_access +ldap_directory_sysauth +ldap_reg_sync_interval +ldap_registration +ldap_registration_enabled +lead +lead_cdb +lead_cdb_uri +lead_diff +lead_diff_percent +leading +leaf +least +leaves +left +length +length2 +length4 +lengthb +lengthc +less +level +levels +library +license_max_sessions +license_max_users +license_sessions_warning +life +lifecycle +lifetime +like +like2 +like4 +likec +limit +linear +link +list +listagg +listener_networks +lnnvl +load +lob +lobnvl +lobs +local +local_indexes +local_listener +localtime +localtimestamp +location +locator +lock +lock_name_space +lock_sga +lockdown +locked +locking +log +log_archive_config +log_archive_dest +log_archive_dest_1 +log_archive_dest_10 +log_archive_dest_11 +log_archive_dest_12 +log_archive_dest_13 +log_archive_dest_14 +log_archive_dest_15 +log_archive_dest_16 +log_archive_dest_17 +log_archive_dest_18 +log_archive_dest_19 +log_archive_dest_2 +log_archive_dest_20 +log_archive_dest_21 +log_archive_dest_22 +log_archive_dest_23 +log_archive_dest_24 +log_archive_dest_25 +log_archive_dest_26 +log_archive_dest_27 +log_archive_dest_28 +log_archive_dest_29 +log_archive_dest_3 +log_archive_dest_30 +log_archive_dest_31 +log_archive_dest_4 +log_archive_dest_5 +log_archive_dest_6 +log_archive_dest_7 +log_archive_dest_8 +log_archive_dest_9 +log_archive_dest_state_1 +log_archive_dest_state_10 +log_archive_dest_state_11 +log_archive_dest_state_12 +log_archive_dest_state_13 +log_archive_dest_state_14 +log_archive_dest_state_15 +log_archive_dest_state_16 +log_archive_dest_state_17 +log_archive_dest_state_18 +log_archive_dest_state_19 +log_archive_dest_state_2 +log_archive_dest_state_20 +log_archive_dest_state_21 +log_archive_dest_state_22 +log_archive_dest_state_23 +log_archive_dest_state_24 +log_archive_dest_state_25 +log_archive_dest_state_26 +log_archive_dest_state_27 +log_archive_dest_state_28 +log_archive_dest_state_29 +log_archive_dest_state_3 +log_archive_dest_state_30 +log_archive_dest_state_31 +log_archive_dest_state_4 +log_archive_dest_state_5 +log_archive_dest_state_6 +log_archive_dest_state_7 +log_archive_dest_state_8 +log_archive_dest_state_9 +log_archive_duplex_dest +log_archive_format +log_archive_max_processes +log_archive_min_succeed_dest +log_archive_start +log_archive_trace +log_buffer +log_checkpoint_interval +log_checkpoint_timeout +log_checkpoints_to_alert +log_file_name_convert +log_read_only_violations +logfile +logfiles +logging +logical +logical_reads_per_call +logical_reads_per_session +logmining +logoff +logon +long +long_module_action +lost +low +lower +lpad +ltrim +main +make_ref +manage +managed +management +manager +manual +map +mapping +master +match +match_number +match_recognize +matched +matches +materialize +materialized +matrix +max +max_audit_size +max_datapump_jobs_per_pdb +max_diag_size +max_dispatchers +max_dump_file_size +max_idle_time +max_iops +max_mbps +max_pdb_snapshots +max_pdbs +max_shared_servers +max_shared_temp_size +max_string_size +maxarchlogs +maxdatafiles +maxextents +maximize +maxinstances +maxlogfiles +maxloghistory +maxlogmembers +maxsize +maxtrans +maxvalue +mbrc +measure +measures +median +medium +member +memcompress +memoptimize +memoptimize_pool_size +memoptimize_write +memory +memory_max_target +memory_target +merge +merge$actions +merge_aj +merge_const_on +merge_sj +metadata +metadata_source_pdb +method +migrate +migrate_cross_con +migration +min +minextents +minimize +minimum +mining +minus +minus_null +minute +minutes +minvalue +mirror +mirrorcold +mirrorhot +mlslabel +mod +mode +model +model_compile_subquery +model_dontverify_uniqueness +model_dynamic_subquery +model_min_analysis +model_nb +model_no_analysis +model_pby +model_push_ref +model_sv +modification +modify +modify_column_type +module +monitor +monitoring +month +months +months_between +mount +mountpath +move +movement +multidimensional +multiset +multishard_query_data_consistency +multishard_query_partial_results +mv_merge +name +named +namespace +nan +nanvl +national +native +native_full_outer_join +natural +nav +nchar +nchar_cs +nchr +nclob +needed +neg +nested +nested_table_fast_insert +nested_table_get_refs +nested_table_id +nested_table_set_refs +nested_table_set_setid +network +never +new +new_time +next +next_day +nl_aj +nl_sj +nlj_batching +nlj_index_filter +nlj_index_scan +nlj_prefetch +nls_calendar +nls_characterset +nls_charset_decl_len +nls_charset_id +nls_charset_name +nls_collation_id +nls_collation_name +nls_comp +nls_currency +nls_date_format +nls_date_language +nls_dual_currency +nls_initcap +nls_iso_currency +nls_lang +nls_language +nls_length_semantics +nls_lower +nls_nchar_conv_excp +nls_numeric_characters +nls_sort +nls_special_chars +nls_territory +nls_time_format +nls_time_tz_format +nls_timestamp_format +nls_timestamp_tz_format +nls_upper +nlssort +no_access +no_adaptive_plan +no_ansi_rearch +no_answer_query_using_stats +no_auto_reoptimize +no_band_join +no_basetable_multimv_rewrite +no_batch_table_access_by_rowid +no_bind_aware +no_buffer +no_bushy_join +no_cartesian +no_check_acl_rewrite +no_cluster_by_rowid +no_clustering +no_coalesce_sq +no_common_data +no_connect_by_cb_whr_only +no_connect_by_combine_sw +no_connect_by_cost_based +no_connect_by_elim_dups +no_connect_by_filtering +no_containers +no_cost_xml_query_rewrite +no_cpu_costing +no_cross_container +no_data_security_rewrite +no_decorrelate +no_dist_agg_prollup_pushdown +no_domain_index_filter +no_dst_upgrade_insert_conv +no_elim_groupby +no_eliminate_join +no_eliminate_oby +no_eliminate_outer_join +no_eliminate_sq +no_expand +no_expand_gset_to_union +no_expand_table +no_fact +no_factorize_join +no_filtering +no_full_outer_join_to_outer +no_gather_optimizer_statistics +no_gby_pushdown +no_index +no_index_ffs +no_index_ss +no_inmemory +no_inmemory_pruning +no_load +no_merge +no_model_push_ref +no_monitor +no_monitoring +no_multimv_rewrite +no_native_full_outer_join +no_nlj_batching +no_nlj_prefetch +no_object_link +no_or_expand +no_order_rollups +no_outer_join_to_anti +no_outer_join_to_inner +no_parallel +no_parallel_index +no_partial_commit +no_partial_join +no_partial_rollup_pushdown +no_place_distinct +no_place_group_by +no_pq_concurrent_union +no_pq_map +no_pq_replicate +no_pq_skew +no_prune_gsets +no_pull_pred +no_push_having_to_gby +no_push_pred +no_push_subq +no_px_fault_tolerance +no_px_join_filter +no_qkn_buff +no_query_transformation +no_ref_cascade +no_reorder_wif +no_result_cache +no_rewrite +no_root_sw_for_local +no_semi_to_inner +no_semijoin +no_set_to_join +no_sql_translation +no_sql_tune +no_star_transformation +no_statement_queuing +no_stats_gsets +no_subquery_pruning +no_substrb_pad +no_swap_join_inputs +no_table_lookup_by_nl +no_temp_table +no_transform_distinct_agg +no_unnest +no_use_cube +no_use_dagg_union_all_gsets +no_use_hash +no_use_hash_aggregation +no_use_hash_gby_for_daggpshd +no_use_hash_gby_for_pushdown +no_use_invisible_indexes +no_use_merge +no_use_nl +no_use_partition_wise_distinct +no_use_partition_wise_gby +no_use_partition_wise_wif +no_use_vector_aggregation +no_vector_transform +no_vector_transform_dims +no_vector_transform_fact +no_xdb_fastpath_insert +no_xml_dml_rewrite +no_xml_query_rewrite +no_xmlindex_rewrite +no_xmlindex_rewrite_in_select +no_zonemap +noappend +noarchivelog +noaudit +nocache +nocompress +nocopy +nocpu_costing +nocycle +nodelay +noentityescaping +noextend +noforce +noguarantee +nokeep +nolocal +nologging +nomapping +nomaxvalue +nominimize +nominvalue +nomonitoring +nonblocking +noncdb_compatible +none +noneditionable +nonpartitioned +nonschema +noorder +nooverride +noparallel +noparallel_index +norelocate +norely +norepair +noreplay +noresetlogs +noreverse +norewrite +normal +norowdependencies +noscale +noschemacheck +nosegment +nosort +nostrict +noswitch +not +nothing +notification +novalidate +now +nowait +nth_value +ntile +null +nullif +nulls +num_index_keys +number +numeric +numtodsinterval +numtoyminterval +nvarchar2 +nvl +nvl2 +obj_id +object +object2xml +object_cache_max_size_percent +object_cache_optimal_size +objno +objno_reuse +occurences +occurrences +off +offline +offset +ofs_threads +oid +oidindex +olap +olap_page_pool_size +old +old_push_pred +ols +oltp +omit +one +one_step_plugin_for_pdb_with_tde +online +only +opaque +opaque_transform +opaque_xcanonical +opcode +open +open_cursors +open_links +open_links_per_instance +operations +operator +opt_estimate +opt_param +optimal +optimize +optimizer_adaptive_plans +optimizer_adaptive_reporting_only +optimizer_adaptive_statistics +optimizer_capture_sql_plan_baselines +optimizer_dynamic_sampling +optimizer_features_enable +optimizer_goal +optimizer_ignore_hints +optimizer_ignore_parallel_hints +optimizer_index_caching +optimizer_index_cost_adj +optimizer_inmemory_aware +optimizer_mode +optimizer_secure_view_merging +optimizer_use_invisible_indexes +optimizer_use_pending_statistics +optimizer_use_sql_plan_baselines +option +or_expand +or_predicates +ora_branch +ora_check_acl +ora_check_privilege +ora_check_sys_privilege +ora_clustering +ora_concat_rwkey +ora_dm_partition_name +ora_dst_affected +ora_dst_convert +ora_dst_error +ora_get_aclids +ora_get_privileges +ora_hash +ora_invoking_user +ora_invoking_userid +ora_invoking_xs_user +ora_invoking_xs_user_guid +ora_partition_validation +ora_rawcompare +ora_rawconcat +ora_rowscn +ora_rowscn_raw +ora_rowversion +ora_search_rwkey +ora_shard_id +ora_tabversion +ora_write_time +oradebug +order +order_subq +ordered +ordered_predicates +ordinality +organization +os_authent_prefix +os_roles +oson +other +out_of_line +outbound_dblink_protocols +outer +outer_join_to_anti +outer_join_to_inner +outline +outline_leaf +over +overflow +overflow_nomove +overlaps +own +owner +ownership +package +packages +parallel +parallel_adaptive_multi_user +parallel_degree_limit +parallel_degree_policy +parallel_execution_message_size +parallel_force_local +parallel_index +parallel_instance_group +parallel_max_servers +parallel_min_degree +parallel_min_percent +parallel_min_servers +parallel_min_time_threshold +parallel_servers_target +parallel_threads_per_cpu +param +parameters +parent +parity +part$num$inst +partial +partial_join +partial_rollup_pushdown +partially +partition +partition_contained +partition_hash +partition_list +partition_range +partitioning +partitions +partitionset +passing +password +password_grace_time +password_life_time +password_lock_time +password_reuse_max +password_reuse_time +password_verify_function +past +patch +path +path_prefix +paths +pattern +pbl_hs_begin +pbl_hs_end +pctfree +pctincrease +pctthreshold +pctused +pctversion +pdb_file_name_convert +pdb_local_only +pdb_lockdown +pdb_os_credential +pdb_template +pending +per +percent +percent_rank +percent_rankm +percentile_cont +percentile_disc +performance +period +permanent +permission +permit_92_wrap_format +permute +persistable +pfile +pga_aggregate_limit +pga_aggregate_target +physical +pikey +piv_gb +piv_ssf +pivot +place_distinct +place_group_by +plan +plscope_settings +plsql_ccflags +plsql_code_type +plsql_debug +plsql_optimize_level +plsql_v2_compatibility +plsql_warnings +pluggable +point +policy +pool_16k +pool_2k +pool_32k +pool_4k +pool_8k +port +position +post_transaction +power +powermultiset +powermultiset_by_cardinality +pq_concurrent_union +pq_distribute +pq_distribute_window +pq_filter +pq_map +pq_nomap +pq_replicate +pq_skew +pre_page_sga +prebuilt +precedes +preceding +precision +precompute_subquery +predicate_reorders +prediction +prediction_bounds +prediction_cost +prediction_details +prediction_probability +prediction_set +preload +prepare +present +presentnnv +presentv +preserve +preserve_oid +pretty +prev +previous +primary +printblobtoclob +prior +priority +private +private_sga +private_temp_table_prefix +privilege +privileged +privileges +procedural +procedure +process +processes +processor_group_name +profile +program +project +propagate +property +protected +protection +proxy +pruning +public +pull_pred +purge +push_having_to_gby +push_pred +push_subq +px_fault_tolerance +px_granule +px_join_filter +qb_name +qualify +quarters +query +query_block +query_rewrite_enabled +query_rewrite_integrity +queue +queue_curr +queue_rowp +quiesce +quorum +quota +quotagroup +random +random_local +range +rank +rankm +rapidly +ratio_to_report +raw +rawtohex +rawtonhex +rawtoref +rba +rbo_outline +rdba +rdbms_server_dn +read +read_only_open_delayed +read_or_write +reads +real +realm +rebalance +rebuild +reconnect +records_per_block +recover +recoverable +recovery +recovery_parallelism +recycle +recyclebin +redaction +redefine +redo +redo_transport_user +reduced +redundancy +ref +ref_cascade_cursor +reference +referenced +references +referencing +refresh +reftohex +reftoraw +regexp_count +regexp_instr +regexp_like +regexp_replace +regexp_substr +register +regr_avgx +regr_avgy +regr_count +regr_intercept +regr_r2 +regr_slope +regr_sxx +regr_sxy +regr_syy +regular +reject +rekey +relational +relocate +rely +remainder +remote +remote_dependencies_mode +remote_listener +remote_login_passwordfile +remote_mapped +remote_os_authent +remote_os_roles +remote_recovery_file_dest +remove +rename +reorder_wif +repair +repeat +replace +replication +replication_dependency_tracking +required +reservoir_sampling +reset +resetlogs +resize +resolve +resolver +resource +resource_limit +resource_manage_goldengate +resource_manager_cpu_allocation +resource_manager_plan +respect +restart +restore +restore_as_intervals +restrict +restrict_all_ref_cons +restricted +result_cache +result_cache_max_result +result_cache_max_size +result_cache_mode +result_cache_remote_expiration +resumable +resumable_timeout +resume +retention +retry_on_row_change +return +returning +reuse +reverse +revoke +rewrite +rewrite_or_error +right +rim +role +roles +roleset +rollback +rollback_segments +rolling +rollup +root +round +round_ties_to_even +row +row_length +row_number +rowdependencies +rowid +rowid_mapping_table +rowidtochar +rowidtonchar +rownum +rows +rpad +rtrim +rule +rules +running +salt +sample +save +save_as_intervals +savepoint +sb4 +scale +scale_rows +scan +scan_instances +scheduler +schema +schemacheck +scn +scn_ascending +scope +scrub +sd_all +sd_inhibit +sd_show +sdo_geom_key +sdo_geom_mbb +sdo_geom_mbr +search +sec_case_sensitive_logon +sec_max_failed_login_attempts +sec_protocol_error_further_action +sec_protocol_error_trace_action +sec_return_server_release_banner +second +seconds +secret +securefile +securefile_dba +security +seed +seg_block +seg_file +segment +select +selectivity +self +semi_to_inner +semijoin +semijoin_driver +sequence +sequenced +sequential +serial +serial_reuse +serializable +servererror +service +service_name_convert +service_names +services +session +session_cached_cursors +session_max_open_files +sessions +sessions_per_user +sessiontimezone +sessiontzname +set +set_to_join +sets +settings +severe +sga_max_size +sga_min_size +sga_target +shadow_core_dump +shard +sharded +shards +shardspace +share +share_of +shared +shared_memory_address +shared_pool +shared_pool_reserved_size +shared_pool_size +shared_server_sessions +shared_servers +sharing +shelflife +show +shrd_dupl_table_refresh_rate +shrink +shutdown +sibling +siblings +sid +sign +signal_component +signal_function +simple +sin +single +singletask +sinh +site +size +skip +skip_ext_optimizer +skip_proxy +skip_unq_unusable_idx +skip_unusable_indexes +smallfile +smallint +smtp_out_server +snapshot +some +sort +sort_area_retained_size +sort_area_size +soundex +source +source_file_directory +source_file_name_convert +space +spatial_vector_acceleration +specification +spfile +split +spreadsheet +sql +sql92_security +sql_scope +sql_trace +sql_translation_profile +sqlldr +sqltune_category +sqrt +stale +standalone +standard_hash +standby +standby_db_preserve_states +standby_file_management +standby_max_data_delay +standby_pdb_source_file_dblink +standby_pdb_source_file_directory +standbys +star +star_transformation +star_transformation_enabled +start +startup +state +statement +statement_id +statement_queuing +statements +static +statistics +statistics_level +stats_binomial_test +stats_crosstab +stats_f_test +stats_ks_test +stats_mode +stats_mw_test +stats_one_way_anova +stats_t_test_indep +stats_t_test_indepu +stats_t_test_one +stats_t_test_paired +stats_wsr_test +stddev +stddev_pop +stddev_samp +stop +storage +storage_index +store +stream +streams +streams_pool_size +strict +string +strip +stripe_columns +stripe_width +structure +submultiset +subpartition +subpartition_rel +subpartitioning +subpartitions +subqueries +subquery_pruning +subscribe +subset +substitutable +substr +substr2 +substr4 +substrb +substrc +success +successful +sum +summary +supplemental +suppress_load +suspend +swap_join_inputs +switch +switchover +sync +synchronous +synonym +sys_audit +sys_check_privilege +sys_checkacl +sys_connect_by_path +sys_context +sys_ctx_contains2 +sys_ctx_mkividx +sys_ctxinfopk +sys_dburigen +sys_dl_cursor +sys_dm_rxform_chr +sys_dm_rxform_lab +sys_dm_rxform_num +sys_dom_compare +sys_dst_prim2sec +sys_dst_sec2prim +sys_et_bfile_to_raw +sys_et_blob_to_image +sys_et_image_to_blob +sys_et_raw_to_bfile +sys_extpdtxt +sys_extract_utc +sys_fbt_insdel +sys_filter_acls +sys_fnmatches +sys_fnreplace +sys_get_aclids +sys_get_col_aclids +sys_get_privileges +sys_gettokenid +sys_getxtival +sys_guid +sys_make_xmlnodeid +sys_makexml +sys_mkxmlattr +sys_mkxti +sys_op_adt2bin +sys_op_adtcons +sys_op_alscrval +sys_op_atg +sys_op_bin2adt +sys_op_bitvec +sys_op_bl2r +sys_op_bloom_filter +sys_op_bloom_filter_list +sys_op_c2c +sys_op_cast +sys_op_ceg +sys_op_cl2c +sys_op_combined_hash +sys_op_comp +sys_op_convert +sys_op_countchg +sys_op_csconv +sys_op_csconvtest +sys_op_csr +sys_op_csx_patch +sys_op_cycled_seq +sys_op_decomp +sys_op_descend +sys_op_distinct +sys_op_dra +sys_op_dump +sys_op_dv_check +sys_op_enforce_not_null$ +sys_op_extract +sys_op_grouping +sys_op_guid +sys_op_hash +sys_op_hcs_table +sys_op_iix +sys_op_itr +sys_op_key_vector_create +sys_op_key_vector_filter +sys_op_key_vector_filter_list +sys_op_key_vector_payload +sys_op_key_vector_succeeded +sys_op_key_vector_use +sys_op_lbid +sys_op_lobloc2blob +sys_op_lobloc2clob +sys_op_lobloc2id +sys_op_lobloc2nclob +sys_op_lobloc2typ +sys_op_lsvi +sys_op_lvl +sys_op_makeoid +sys_op_map_nonnull +sys_op_msr +sys_op_nicombine +sys_op_niextract +sys_op_nii +sys_op_nix +sys_op_noexpand +sys_op_ntcimg$ +sys_op_numtoraw +sys_op_oidvalue +sys_op_opnsize +sys_op_par +sys_op_par_1 +sys_op_pargid +sys_op_pargid_1 +sys_op_part_id +sys_op_pivot +sys_op_r2o +sys_op_rawtonum +sys_op_rdtm +sys_op_ref +sys_op_rmtd +sys_op_rowidtoobj +sys_op_rpb +sys_op_tosetid +sys_op_tpr +sys_op_trtb +sys_op_undescend +sys_op_vecand +sys_op_vecbit +sys_op_vecor +sys_op_vector_group_by +sys_op_vecxor +sys_op_version +sys_op_vref +sys_op_vvd +sys_op_xmlcons_for_csx +sys_op_xpthatg +sys_op_xpthidx +sys_op_xpthop +sys_op_xtnn +sys_op_xtxt2sqlt +sys_op_zone_id +sys_optlobprbsc +sys_optxicmp +sys_optxqcastasnq +sys_orderkey_depth +sys_orderkey_maxchild +sys_orderkey_parent +sys_parallel_txn +sys_path_reverse +sys_pathid_is_attr +sys_pathid_is_nmspc +sys_pathid_lastname +sys_pathid_lastnmspc +sys_plsql_count +sys_plsql_cpu +sys_plsql_io +sys_pxqextract +sys_raw_to_xsid +sys_remap_xmltype +sys_rid_order +sys_row_delta +sys_sc_2_xmlt +sys_synrciredo +sys_typeid +sys_umakexml +sys_xmlanalyze +sys_xmlcontains +sys_xmlconv +sys_xmlexnsuri +sys_xmlgen +sys_xmli_loc_isnode +sys_xmli_loc_istext +sys_xmlinstr +sys_xmllocator_getsval +sys_xmlnodeid +sys_xmlnodeid_getcid +sys_xmlnodeid_getlocator +sys_xmlnodeid_getokey +sys_xmlnodeid_getpathid +sys_xmlnodeid_getptrid +sys_xmlnodeid_getrid +sys_xmlnodeid_getsval +sys_xmlnodeid_gettid +sys_xmlt_2_sc +sys_xmltranslate +sys_xmltype2sql +sys_xq_asqlcnv +sys_xq_atomcnvchk +sys_xq_nrng +sys_xq_pksql2xml +sys_xq_upkxml2sql +sys_xqbaseuri +sys_xqcastableerrh +sys_xqcodep2str +sys_xqcodepeq +sys_xqcon2seq +sys_xqconcat +sys_xqdelete +sys_xqdfltcolation +sys_xqdoc +sys_xqdocuri +sys_xqdurdiv +sys_xqed4uri +sys_xqendswith +sys_xqerr +sys_xqerrh +sys_xqeshtmluri +sys_xqexlobval +sys_xqexstwrp +sys_xqextract +sys_xqextrref +sys_xqexval +sys_xqfb2str +sys_xqfnbool +sys_xqfncmp +sys_xqfndatim +sys_xqfnlname +sys_xqfnnm +sys_xqfnnsuri +sys_xqfnpredtruth +sys_xqfnqnm +sys_xqfnroot +sys_xqformatnum +sys_xqftcontain +sys_xqfuncr +sys_xqgetcontent +sys_xqindxof +sys_xqinsert +sys_xqinspfx +sys_xqiri2uri +sys_xqlang +sys_xqllnmfrmqnm +sys_xqmknoderef +sys_xqnilled +sys_xqnodename +sys_xqnormspace +sys_xqnormucode +sys_xqnsp4pfx +sys_xqnspfrmqnm +sys_xqpfxfrmqnm +sys_xqpolyabs +sys_xqpolyadd +sys_xqpolycel +sys_xqpolycst +sys_xqpolycstbl +sys_xqpolydiv +sys_xqpolyflr +sys_xqpolymod +sys_xqpolymul +sys_xqpolyrnd +sys_xqpolysqrt +sys_xqpolysub +sys_xqpolyumus +sys_xqpolyupls +sys_xqpolyveq +sys_xqpolyvge +sys_xqpolyvgt +sys_xqpolyvle +sys_xqpolyvlt +sys_xqpolyvne +sys_xqref2val +sys_xqrename +sys_xqreplace +sys_xqresvuri +sys_xqrndhalf2evn +sys_xqrslvqnm +sys_xqryenvpget +sys_xqryvarget +sys_xqrywrp +sys_xqseq2con +sys_xqseq2con4xc +sys_xqseqdeepeq +sys_xqseqinsb +sys_xqseqrm +sys_xqseqrvs +sys_xqseqsub +sys_xqseqtypmatch +sys_xqstartswith +sys_xqstatburi +sys_xqstr2codep +sys_xqstrjoin +sys_xqsubstraft +sys_xqsubstrbef +sys_xqtokenize +sys_xqtreatas +sys_xqxform +sys_xsid_to_raw +sys_zmap_filter +sys_zmap_refresh +sysasm +sysaux +sysbackup +sysdate +sysdba +sysdg +sysguid +syskm +sysobj +sysoper +sysrac +system +system_defined +system_stats +systimestamp +table +table_lookup_by_nl +table_stats +tables +tablespace +tablespace_no +tabno +tag +tan +tanh +tape_asynch_io +target +target_pdbs +tbl$or$idx$part$num +tde_configuration +temp_table +temp_undo_enabled +tempfile +template +temporary +tenant_id +test +text +than +the +then +thread +threaded_execution +through +tier +ties +time +time_zone +timed_os_statistics +timed_statistics +timeout +times +timestamp +timestamp_to_number +timezone_abbr +timezone_hour +timezone_minute +timezone_offset +timezone_region +tiv_gb +tiv_ssf +to_aclid +to_approx_count_distinct +to_approx_percentile +to_binary_double +to_binary_float +to_blob +to_char +to_clob +to_date +to_dsinterval +to_lob +to_multi_byte +to_nchar +to_nclob +to_number +to_single_byte +to_time +to_time_tz +to_timestamp +to_timestamp_tz +to_utc_timestamp_tz +to_yminterval +token +toplevel +trace +trace_enabled +tracefile_identifier +tracing +tracking +trailing +transaction +transactions +transactions_per_rollback_segment +transform_distinct_agg +transition +transitional +translate +translation +treat +trigger +triggers +trim +true +trunc +truncate +trust +trusted +tuning +type +types +tz_offset +ub2 +uba +ucs2 +uid +unarchived +unbound +unbounded +unconditional +under +undo +undo_management +undo_retention +undo_tablespace +undrop +unified_audit_sga_queue_size +unified_audit_systemlog +uniform +uniform_log_timestamp_format +uninstall +union +unique +unistr +unite +unixtime +unlimited +unload +unlock +unmatched +unnest +unnest_innerj_distinct_view +unnest_nosemij_nodistinctview +unnest_semij_view +unpacked +unpivot +unplug +unprotected +unquiesce +unrecoverable +unrestricted +unsubscribe +until +unusable +unused +upd_indexes +upd_joinindex +updatable +update +updated +updatexml +upgrade +upper +upsert +urowid +usable +usage +use +use_anti +use_concat +use_cube +use_dagg_union_all_gsets +use_dedicated_broker +use_hash +use_hash_aggregation +use_hash_gby_for_daggpshd +use_hash_gby_for_pushdown +use_hidden_partitions +use_invisible_indexes +use_large_pages +use_merge +use_merge_cartesian +use_nl +use_nl_with_index +use_partition_wise_distinct +use_partition_wise_gby +use_partition_wise_wif +use_private_outlines +use_semi +use_stored_outlines +use_ttt_for_gsets +use_vector_aggregation +use_weak_name_resl +user +user_data +user_defined +user_dump_dest +user_recyclebin +user_tablespaces +userenv +usergroup +users +using +using_no_expand +utf16be +utf16le +utf32 +utf8 +valid_time_end +validate +validate_conversion +validation +value +values +var_pop +var_samp +varchar +varchar2 +variance +varray +varrays +varying +vector +vector_encode +vector_read +vector_read_trace +vector_transform +vector_transform_dims +vector_transform_fact +verifier +verify +version +versioning +versions +versions_endscn +versions_endtime +versions_operation +versions_startscn +versions_starttime +versions_xid +view +violation +virtual +visibility +visible +volume +vsize +wait +wallet +wallet_root +week +weeks +wellformed +when +whenever +where +whitespace +width_bucket +with +with_expression +with_plsql +within +without +work +workarea_size_policy +wrapped +wrapper +write +x_dyn_prune +xdb_fastpath_insert +xid +xml +xml2object +xml_db_events +xml_dml_rwt_stmt +xmlattributes +xmlcast +xmlcdata +xmlcolattval +xmlcomment +xmlconcat +xmldiff +xmlelement +xmlexists +xmlexists2 +xmlforest +xmlindex_rewrite +xmlindex_rewrite_in_select +xmlindex_sel_idx_tbl +xmlisnode +xmlisvalid +xmlnamespaces +xmlparse +xmlpatch +xmlpi +xmlquery +xmlqueryval +xmlroot +xmlschema +xmlserialize +xmltable +xmltojson +xmltokenset +xmltransform +xmltransformblob +xmltset_dml_enable +xmltype +xpathtable +xs_sys_context +year +years +yes +zone +zonemap diff --git a/tpt/sga.sql b/tpt/sga.sql new file mode 100644 index 0000000..201d33c --- /dev/null +++ b/tpt/sga.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show instance memory usage breakdown from v$memory_dynamic_components +COL mem_component HEAD COMPONENT FOR A35 + +SELECT + component mem_component + , ROUND(current_size/1048576) cur_mb + , ROUND(min_size/1048576) min_mb + , ROUND(max_size/1048576) max_mb + , ROUND(user_specified_size/1048576) spec_mb + , oper_count + , last_oper_type last_optype + , last_oper_mode last_opmode + , last_oper_time last_optime + , granule_size/1048576 gran_mb +FROM + v$sga_dynamic_components +/ + + diff --git a/tpt/sgai.sql b/tpt/sgai.sql new file mode 100644 index 0000000..95d73cf --- /dev/null +++ b/tpt/sgai.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from v$sgainfo; diff --git a/tpt/sgares.sql b/tpt/sgares.sql new file mode 100644 index 0000000..5a63f9f --- /dev/null +++ b/tpt/sgares.sql @@ -0,0 +1,22 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sgares_parameter head PARAMETER for a30 +col sgares_component head COMPONENT for a30 + +SELECT + component sgares_component + , oper_type + , oper_mode + , parameter sgares_parameter + , initial_size + , target_size + , final_size + , status + , start_time + , end_time +FROM + v$sga_resize_ops +ORDER BY + start_time +/ diff --git a/tpt/sgastat.sql b/tpt/sgastat.sql new file mode 100644 index 0000000..1d9999e --- /dev/null +++ b/tpt/sgastat.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from v$sgastat +where lower(name) like lower('%&1%') +or loweR(pool) like lower('%&1%') +order by name +/ diff --git a/tpt/sgastatx.sql b/tpt/sgastatx.sql new file mode 100644 index 0000000..d9595c3 --- /dev/null +++ b/tpt/sgastatx.sql @@ -0,0 +1,69 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: sgastatx +-- Purpose: Show shared pool stats by sub-pool from X$KSMSS +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sgastatx +-- @sgastatx "free memory" +-- @sgastatx cursor +-- +-- Other: The other script for querying V$SGASTAT is called sgastat.sql +-- +-- +-- +-------------------------------------------------------------------------------- + +COL sgastatx_subpool HEAD SUBPOOL FOR a30 + +PROMPT +PROMPT -- Subpool sizes: + +SELECT + 'shared pool ('||NVL(DECODE(TO_CHAR(ksmdsidx),'0','0 - Unused',ksmdsidx), 'Total')||'):' sgastatx_subpool + , SUM(ksmsslen) bytes + , ROUND(SUM(ksmsslen)/1048576,2) MB +FROM + x$ksmss +WHERE + ksmsslen > 0 +--AND ksmdsidx > 0 +GROUP BY ROLLUP + ( ksmdsidx ) +ORDER BY + sgastatx_subpool ASC +/ + +BREAK ON sgastatx_subpool SKIP 1 +PROMPT -- Allocations matching "&1": + +SELECT + subpool sgastatx_subpool + , name + , SUM(bytes) + , ROUND(SUM(bytes)/1048576,2) MB +FROM ( + SELECT + 'shared pool ('||DECODE(TO_CHAR(ksmdsidx),'0','0 - Unused',ksmdsidx)||'):' subpool + , ksmssnam name + , ksmsslen bytes + FROM + x$ksmss + WHERE + ksmsslen > 0 + AND LOWER(ksmssnam) LIKE LOWER('%&1%') +) +GROUP BY + subpool + , name +ORDER BY + subpool ASC + , SUM(bytes) DESC +/ + +BREAK ON sgastatx_subpool DUP diff --git a/tpt/sgav.sql b/tpt/sgav.sql new file mode 100644 index 0000000..52fa5e7 --- /dev/null +++ b/tpt/sgav.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@dumpvar sga &1 \ No newline at end of file diff --git a/tpt/sh.sql b/tpt/sh.sql new file mode 100644 index 0000000..aa42b3a --- /dev/null +++ b/tpt/sh.sql @@ -0,0 +1,3 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + diff --git a/tpt/sid.sql b/tpt/sid.sql new file mode 100644 index 0000000..9944c42 --- /dev/null +++ b/tpt/sid.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DEF sid="&1" \ No newline at end of file diff --git a/tpt/sinfo.sql b/tpt/sinfo.sql new file mode 100644 index 0000000..3b202d2 --- /dev/null +++ b/tpt/sinfo.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sinfo_username FOR A30 HEAD USERNAME + +SELECT sid, username sinfo_username, program, service_name, module, action, client_identifier, client_info, ecid, machine, port +FROM v$session WHERE sid IN (&1); + diff --git a/tpt/sl.sql b/tpt/sl.sql new file mode 100644 index 0000000..094fb4b --- /dev/null +++ b/tpt/sl.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt alter session set statistics_level = &1;; +alter session set statistics_level = &1; + diff --git a/tpt/sleep.sql b/tpt/sleep.sql new file mode 100644 index 0000000..bf2df40 --- /dev/null +++ b/tpt/sleep.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +exec dbms_lock.sleep(&1) \ No newline at end of file diff --git a/tpt/sm.sql b/tpt/sm.sql new file mode 100644 index 0000000..f5d113e --- /dev/null +++ b/tpt/sm.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from v$sessmetric where session_id in (&1); diff --git a/tpt/smem.sql b/tpt/smem.sql new file mode 100644 index 0000000..d4f200f --- /dev/null +++ b/tpt/smem.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: smem.sql +-- Purpose: Show process memory usage breakdown - lookup by session ID +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @smem +-- +-- +-- Other: Uses v$process_memory which is available from Oracle 10g onwards +-- +-------------------------------------------------------------------------------- +PROMPT Display session &1 memory usage from v$process_memory.... +SELECT + s.sid,pm.* +FROM + v$session s + , v$process p + , v$process_memory pm +WHERE + s.paddr = p.addr +AND p.pid = pm.pid +AND s.sid IN (&1) +ORDER BY + sid + , category +/ diff --git a/tpt/smem_detail.sql b/tpt/smem_detail.sql new file mode 100644 index 0000000..66ca822 --- /dev/null +++ b/tpt/smem_detail.sql @@ -0,0 +1,76 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: smem_detail.sql +-- Purpose: Show process memory usage breakdown details - lookup by session ID +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @smem_detail +-- +-- +-- Other: Uses v$process_memory_detail which is available from Oracle 10g +-- Also, this view is populated with help of an ORADEBUG command +-- so you must run this script with SYSDBA privileges. +-- +-- PROOFREAD AND TEST THIS IN A TEST ENVIRONMENT FIRST! +-- +-------------------------------------------------------------------------------- + +-- identify target session's process +SET TERMOUT OFF +COL pid NEW_VALUE get_pid +SELECT pid FROM v$process WHERE addr = (SELECT /*+ NO_UNNEST */ paddr FROM v$session WHERE sid = &1); +COL pid CLEAR +SET TERMOUT ON + +PROMPT +PROMPT WARNING! About to run an undocumented ORADEBUG command +PROMPT for getting heap details. +PROMPT This script is EXPERIMENTAL, use at your own risk! +PROMPT +PROMPT Press ENTER to continue, or CTRL+C to cancel +PAUSE + +-- send message to target for memory detail array population +SET TERMOUT OFF +ORADEBUG SETMYPID +ORADEBUG DUMP PGA_DETAIL_GET &get_pid +SET TERMOUT ON + +EXEC DBMS_LOCK.SLEEP(1) + +SELECT status FROM v$process_memory_detail_prog WHERE pid = &get_pid; + +PROMPT If the status above is not COMPLETE then you need to wait +PROMPT for the target process to do some work and re-run the +PROMPT v$process_memory_detail query in this script manually +PROMPT (or just take a heapdump level 29 to get heap breakdown +PROMPT in a tracefile) + +-- +SELECT + s.sid + ,pmd.category + ,pmd.name + ,pmd.heap_name + ,pmd.bytes + ,pmd.allocation_count +-- ,pmd.heap_descriptor +-- ,pmd.parent_heap_descriptor +FROM + v$session s + , v$process p + , v$process_memory_detail pmd +WHERE + s.paddr = p.addr +AND p.pid = pmd.pid +AND s.sid IN (&1) +ORDER BY + sid + , spid + , bytes DESC +/ diff --git a/tpt/sn.sql b/tpt/sn.sql new file mode 100644 index 0000000..ea31a46 --- /dev/null +++ b/tpt/sn.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt @snapper all &1 1 "&2" +@@snapper all "&1" 1 "&2" + diff --git a/tpt/snapcpu.sql b/tpt/snapcpu.sql new file mode 100644 index 0000000..7cb3a38 --- /dev/null +++ b/tpt/snapcpu.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot... + +@@snapper "ash,stats,gather=t,tinclude=DB CPU" &1 1 all diff --git a/tpt/snapio.sql b/tpt/snapio.sql new file mode 100644 index 0000000..09807f5 --- /dev/null +++ b/tpt/snapio.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot... + +@@snapper "stats,gather=sw,sinclude=physical,winclude=db file" &1 1 all diff --git a/tpt/snaplio.sql b/tpt/snaplio.sql new file mode 100644 index 0000000..0435f03 --- /dev/null +++ b/tpt/snaplio.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot... + +@@snapper "ash,stats,gather=s,sinclude=session logical reads" &1 1 all diff --git a/tpt/snapnet.sql b/tpt/snapnet.sql new file mode 100644 index 0000000..fa7c3dc --- /dev/null +++ b/tpt/snapnet.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot... + +@@snapper "stats,gather=s,sinclude=SQL*Net" &1 1 all diff --git a/tpt/snapper.sql b/tpt/snapper.sql new file mode 100644 index 0000000..64c5afa --- /dev/null +++ b/tpt/snapper.sql @@ -0,0 +1,2337 @@ +------------------------------------------------------------------------------ +-- +-- +-- +-- File name: snapper.sql (Oracle Session Snapper v4) +-- Purpose: An easy to use Oracle session-level performance measurement tool +-- which does NOT require any database changes nor creation of any +-- database objects! +-- +-- This is very useful for ad-hoc performance diagnosis in environments +-- with restrictive change management processes, where creating +-- even temporary tables and PL/SQL packages is not allowed or would +-- take too much time to get approved. +-- +-- All processing is done by a few sqlplus commands and an anonymous +-- PL/SQL block, all that's needed is SQLPLUS access (and if you want +-- to output data to server-side tracefile then execute rights on +-- DBMS_SYSTEM). Snapper only queries some V$ views (and in advanced +-- mode some X$ fixed tables, but it does not enable any traces nor +-- use oradebug. +-- +-- The output is formatted the way it could be easily post-processed +-- by either Unix string manipulation tools or loaded to spreadsheet. +-- +-- Snapper v4.20 Oracle 12c CDB and PDB grouping +-- Snapper v4 supports RAC and requires Oracle 10.1 or a newer DB version. +-- Snapper v3.5 works on Oracle versions starting from Oracle 9.2 (no RAC support) +-- +-- Note1: The "ASH" functionality in Snapper just samples GV$SESSION view, +-- so you do NOT need Diagnostics Pack licenses to use Snapper's +-- "ASH" output +-- +-- Note2: Snapper just reports you performance metric deltas in a snapsphot +-- and does not attempt to solve any performance problems for you. +-- You still need to interpret and understand these standard Oracle +-- metrics yourself +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- Copyright: (c) Tanel Poder - https://tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", so no warranties or guarantees are +-- made about its correctness, reliability and safety. Use it at your +-- own risk! +-- +-- Copyright: Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +-- +-- Thanks to: Adrian Billington, Jamey Johnston, Marcus Mönnig, Hans-Peter Sloot, +-- Ronald Rood and Peter Bach for bugfixes, additions and improvements +-- +-------------------------------------------------------------------------------- +-- +-- The Session Snapper v4.34 ( USE AT YOUR OWN RISK !!! ) +-- (c) Tanel Poder ( https://tanelpoder.com ) +-- +-- +-- +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a cheap ASCII +-- / imitation of a fish and a fishing rod. +-- | Nevertheless the PL/SQL code below the +-- | fish itself should be helpful for quick +-- | catching of relevant Oracle performance +-- | information. +-- | So I wish you happy... um... snapping? +-- | ) +-- | ...... +-- | iittii,,.... +-- ¿ iiffffjjjjtttt,, +-- ..;;ttffLLLLffLLLLLLffjjtt;;.. +-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,, +-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;.... +-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;.. +-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,, +-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;.. +-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii.. +-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;.. +-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,, +-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii.. +-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;.. +-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;; +-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;.. +-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. .... +-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii.. +-- ..;;ttttii;;.... ..;;;;.... +-- ..iiii;;.. +-- ..;;,, +-- .... +-- +-- +-- Usage: +-- +-- snapper.sql [,out][,trace][,pagesize=X][,gather=[s][t][w][l][e][b][a]]> +-- +-- ash - sample session activity ASH style, waits and SQL_IDs from gv$session and +-- print a TOP SQL/wait report from these samples (this is the default from +-- Snapper 3.0). The columns chosen for TOP calculation are defined in CONFIG +-- section below. +-- +-- ash=sql_id+event+wait_class +-- - the above example illustrates that you can also specify the gv$session +-- columns for TOP report yourself. The above example will show a TOP +-- activity report grouped by SQL_ID + EVENT + WAIT_CLASS +-- Note that the columns are separated by a "+" sign (as comma is a snapper +-- parameter separator, not ASH column separator) +-- +-- ash1 +-- ash2 +-- ash3 - in addition to "ash" report you can have 3 more reported during the same +-- snapper sampling snapshot. Just include ash1=col1+col2,ash2=col3+col4,... +-- parameters if you want multiple TOP reports per Snapper snapshot +-- +-- stats - sample gv$sesstat,gv$sess_time_model,gv$session_event performance counters +-- and report how much these stats increased (deltas) during Snapper run +-- all - report both ASH and stats sections +-- +-- out - use dbms_output.put_line() for output. output will be seen only when +-- Snapper run completes due to dbms_output limitations. This is the default. +-- trace - write output to server process tracefile +-- (you must have execute permission on sys.dbms_system.ksdwrt() for that, +-- you can use both out and trace parameters together if you like ) +-- +-- pagesize - display header lines after X snapshots. if pagesize=0 don't display +-- any headers. pagesize=-1 will display a terse header only once +-- +-- gather - if omitted, gathers s,t,w statistics (see below) +-- - if specified, then gather following: +-- +-- Session-level stats: +-- s - Session Statistics from gv$sesstat +-- t - Session Time model info from gv$sess_time_model +-- w - Session Wait statistics from gv$session_event and gv$session_wait +-- +-- Instance-level stats: +-- l - instance Latch get statistics ( gets + immediate_gets ) +-- e - instance Enqueue lock get statistics +-- b - buffer get Where statistics -- useful in versions up to 10.2.x +-- a - All above +-- +-- sinclude - if specified, then show only GV$SESSTAT stats which match the +-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+) +-- linclude - if specified, then show only GV$LATCH latch stats which match the +-- LIKE pattern of linclude (REGEXP_LIKE in 10g+) +-- tinclude - if specified, then show only GV$SESS_TIME_MODEL stats which match the +-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+) +-- winclude - if specified, then show only GV$SESSION_EVENT wait stats which match the +-- LIKE pattern of winclude (REGEXP_LIKE in 10g+) +-- +-- you can combine above parameters in any order, separate them by commas +-- !!!don't use spaces as otherwise they are treated as next parameters by sqlplus !!! +-- !!!if you want to use spaces, enclose the whole sqlplus parameter in doublequotes !!! +-- +-- - the number of seconds between taking snapshots +-- - the number of snapshots to take ( maximum value is power(2,31)-1 ) +-- +-- can be either one sessionid, multiple sessionids separated by +-- commas or a SQL statement which returns a list of SIDs (if you need spaces +-- in that parameter text, enclose it in double quotes). +-- +-- if you want to snap ALL sids, use "all" as value for +-- parameter +-- +-- alternatively you can use "select inst_id,sid from gv$session" as value for +-- parameter to capture all SIDs. you can write any query (with multiple and/or) +-- conditions to specify complex rules for capturing only the SIDs you want +-- +-- starting from version 3.0 there are further session_id selection options available in +-- instead of sid you can write such expressions for snapper's parameter: +-- +-- sid=123 -- take sid 123 only (the same as just writing 123) +-- user=tanel -- take all sessions where username is 'tanel' (case insensitive) +-- -- this is the same as writing following subquery for the +-- -- parameter: +-- select inst_id,sid from gv$session where lower(username) like lower('tanel') +-- +-- user=tanel% -- take all sessions where username begins with 'tanel%' (case insensitive) +-- -- the = means actually LIKE in SQL terms in this script +-- +-- spid=1234 -- all these 3 parameters do the same thing: +-- ospid=1234 -- they look up the sessions(s) where the processes OS PID=1234 +-- pid=1234 -- this is useful for quickly looking up what some OS process is doing +-- -- if it consumes too much of some resource +-- qc=123 +-- qcsid=123 -- show query coordinator and all PX slave sessions +-- +-- program=sqlplus% -- the following examples filter by corresponding gv$session coulmns +-- machine=linux01 -- machine +-- osuser=oracle -- os username +-- module=HR -- module +-- "action=Find Order" -- note the quotes because there is a space inside the parameter +-- -- value +-- client_id=tanelpoder -- show only sessions where client_identifier is set to tanelpoder +-- -- this is very useful in cases with (properly instrumented) +-- -- connection pools +-- +-- +-- Note that if you want to change some "advanced" snapper configuration parameters +-- or default values then search for CONFIG in this file to see configurable +-- variable section +-- +-- +-- Examples: +-- NB! Read the online examples, these are more detailed and list script output too! +-- +-- http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper +-- +-- @snapper ash,stats 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- Wait, gv$sesstat and gv$sess_time_model statistics are reported by default +-- Starting from V3 the ASH style session activity report is shown as well) +-- +-- @snapper stats,gather=w 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only Wait event statistics are reported, no ASH) +-- +-- @snapper ash,gather=st 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only gv$sesstat and gv$sess_Time_model statistics are gathered + ASH) +-- +-- @snapper trace,ash,gather=stw,pagesize=0 10 90 117,210,313 +-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313 +-- all statistics are reported, do not print any headers) +-- +-- @snapper trace,ash 900 999999999 all +-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace, +-- loop (almost) forever ) +-- +-- @snapper out,trace 300 12 "select inst_id,sid from gv$session where username='APPS'" +-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write +-- output to both dbms_output and tracefile) +-- +-- Notes: +-- +-- Snapper does not currently detect if a session with given SID has +-- ended and been recreated between snapshots, thus it may report bogus +-- statistics for such sessions. The check and warning for that will be +-- implemented in a future version. +-- +-------------------------------------------------------------------------------- + +set termout off tab off verify off linesize 999 trimspool on trimout on null "" + +--debug: +-- set termout on serveroutput on + +-- Get parameters (future snapper v4.x extended syntax: @snapper <"begin"|"end"|sleep#> <"snap_name"|snap_count> ) +define snapper_options="&1" +define snapper_sleep="&2" +define snapper_count="&3" +define snapper_sid="&4" + + +-- The following code is required for making this script "dynamic" as due to +-- different Oracle versions, script parameters or granted privileges some +-- statements might not compile if not adjusted properly. + +define _IF_ORA12_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA12="--" +define _IF_ORA11_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA11="--" +define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" +-- /*dummy*/ -- this "dummy" is here just for avoiding VIM syntax highlighter going crazy due to previous line +define _IF_X_ACCESSIBLE="--" + +-- plsql_object_id columns available in v$session (from 10.2.0.3) +define _YES_PLSQL_OBJ_ID="--" +define _NO_PLSQL_OBJ_ID="" +-- blocking_instance available in v$session (from 10.2) +define _YES_BLK_INST="--" +define _NO_BLK_INST="" + +-- snapper v4 manual before/after snapshotting +define _MANUAL_SNAPSHOT="--" +define _USE_DBMS_LOCK="" + +-- set the noprint's value to "noprint" if you don't want these temporary variables to show up in a sqlplus spool file +-- however, setting noprint="noprint" can cause errors in Oracle SQL Developer v4.0.x for some reason (OK in v4.1) +DEF noprint="" +col snapper_howtosleep &noprint new_value _HOW_TO_SLEEP +col snapper_ora18higher &noprint new_value _IF_ORA18_OR_HIGHER +col snapper_ora12higher &noprint new_value _IF_ORA12_OR_HIGHER +col snapper_ora12lower &noprint new_value _IF_LOWER_THAN_ORA12 +col snapper_ora12 &noprint new_value _IF_ORA12_OR_HIGHER +col snapper_ora11higher &noprint new_value _IF_ORA11_OR_HIGHER +col snapper_ora11lower &noprint new_value _IF_LOWER_THAN_ORA11 +col dbms_system_accessible &noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLE +col x_accessible &noprint new_value _IF_X_ACCESSIBLE +col no_plsql_obj_id &noprint new_value _NO_PLSQL_OBJ_ID +col yes_plsql_obj_id &noprint new_value _YES_PLSQL_OBJ_ID +col no_blk_inst &noprint new_value _NO_BLK_INST +col yes_blk_inst &noprint new_value _YES_BLK_INST +col manual_snapshot &noprint new_value _MANUAL_SNAPSHOT +col use_dbms_lock &noprint new_value _USE_DBMS_LOCK + +col snapper_sid &noprint new_value snapper_sid + +-- sid_filter and inst_filter are the new RAC gv$ friendly way to filter sessions in Snapper v4 +def sid_filter="/**/" +def inst_filter="/**/" +col sid_filter &noprint new_value sid_filter +col inst_filter &noprint new_value inst_filter + + +-- initialize, precompute and determine stuff +var v varchar2(100) +var x varchar2(10) +var sid_filter varchar2(4000) +var inst_filter varchar2(4000) + +-- this is here for a reason +-- im extracting the first word of the snapper_sid (if its a complex expression, not just a single SID) +-- by relying on how DEF and & assignment treat spaces in strings +def ssid_begin=&snapper_sid + +declare + + o sys.dbms_describe.number_table; + p sys.dbms_describe.number_table; + l sys.dbms_describe.number_table; + a sys.dbms_describe.varchar2_table; + dty sys.dbms_describe.number_table; + def sys.dbms_describe.number_table; + inout sys.dbms_describe.number_table; + len sys.dbms_describe.number_table; + prec sys.dbms_describe.number_table; + scal sys.dbms_describe.number_table; + rad sys.dbms_describe.number_table; + spa sys.dbms_describe.number_table; + + tmp number; + lv_sid_filter varchar2(4000); + lv_inst_filter varchar2(4000); + + function get_filter(str in varchar2) return varchar2 + is + ret varchar2(1000); + begin + if str like '%@%' then + --dbms_output.put_line('get_filter:1 str= '||str); + ret := lower(trim(regexp_replace(substr(str,instr(str,'=')+1), '^(.+)@([[:digit:]\*]+)(.*)', '\1'))); + else + --dbms_output.put_line('get_filter:2 str= '||str); + ret := lower(trim(substr(str,instr(str,'=')+1))); + end if; + --dbms_output.put_line('get_filter = ' || ret); + return ret; + end get_filter; + +begin + -- compute inst_filter + case + when regexp_instr('&ssid_begin','@') = 0 then + lv_inst_filter := '/* inst_filter */ s.inst_id=USERENV(''Instance'')'; + when regexp_instr('&ssid_begin','@\*') > 0 or '&ssid_begin' like '(%' then + lv_inst_filter := '/* inst_filter */ 1=1'; + when regexp_instr('&ssid_begin','@\d+') > 0 then + lv_inst_filter := 's.inst_id = ' || regexp_replace('&ssid_begin', '^(.+)@(\d+)(.*)', '\2'); + else + lv_inst_filter := 's.inst_id=USERENV(''Instance'')'; + --when regexp_instr('&ssid_begin','@\d+') > 0 then regexp_replace(snapper_sid, '^(.+)@\d+', '\1') || ' AND inst_id = ' || regexp_replace(snapper_sid, '^(.+)@(\d+)(.*)', '\2') + end case; + + -- compute sid_filter + case + when trim(lower('&ssid_begin')) like 'con_id=%' then lv_sid_filter := 's.con_id in ('||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'sid=%' then lv_sid_filter := 's.sid in (' ||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'audsid=%' then lv_sid_filter := 's.audsid in ('||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'user=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'username=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'machine=%' then lv_sid_filter := 'lower(machine) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'program=%' then lv_sid_filter := 'lower(program) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'service=%' then lv_sid_filter := 'lower(service_name) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'module=%' then lv_sid_filter := 'lower(module) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'action=%' then lv_sid_filter := 'lower(action) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'osuser=%' then lv_sid_filter := 'lower(osuser) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'client_id=%' then lv_sid_filter := 'lower(client_identifier) like '''||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'spid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'ospid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'pid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qcsid=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qc=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'all%' then lv_sid_filter := '1=1'; + when trim(lower('&ssid_begin')) like 'bg%' then lv_sid_filter := 'type=''BACKGROUND'''; + when trim(lower('&ssid_begin')) like 'fg%' then lv_sid_filter := 'type=''USER'''; + when trim(lower('&ssid_begin')) like 'smon%' then lv_sid_filter := 'program like ''%(SMON)%'''; + when trim(lower('&ssid_begin')) like 'pmon%' then lv_sid_filter := 'program like ''%(PMON)%'''; + when trim(lower('&ssid_begin')) like 'ckpt%' then lv_sid_filter := 'program like ''%(CKPT)%'''; + when trim(lower('&ssid_begin')) like 'lgwr%' then lv_sid_filter := 'program like ''%(LG__)%'''; -- 12c multiple adaptive LGWR workers + when trim(lower('&ssid_begin')) like 'dbwr%' then lv_sid_filter := 'regexp_like(program, ''.*\((DBW.|BW..)\).*'', ''i'')'; + when trim(lower('&ssid_begin')) like 'select%' then lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; + when trim(lower('&ssid_begin')) like '(%' then lv_inst_filter := '/* inst_filter2 */ 1=1'; lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; + else lv_sid_filter := '/* sid_filter_else_cond */ s.sid in ('||get_filter('&ssid_begin')||')'; + end case; + + :inst_filter := lv_inst_filter; + :sid_filter := lv_inst_filter||' and '||lv_sid_filter; + + -- this block determines whether dbms_system.ksdwrt is accessible to us + -- dbms_describe is required as all_procedures/all_objects may show this object + -- even if its not executable by us (thanks to o7_dictionary_accessibility=false) + begin + execute immediate 'select count(*) from x$kcbwh where rownum = 1' into tmp; + :x:= ' '; -- x$ tables are accessible, so dont comment any lines out + exception + when others then null; + end; + + sys.dbms_describe.describe_procedure( + 'DBMS_SYSTEM.KSDWRT', null, null, + o, p, l, a, dty, def, inout, len, prec, scal, rad, spa + ); + + -- we never get to following statement if dbms_system is not accessible + -- as sys.dbms_describe will raise an exception + :v:= '-- dbms_system is accessible'; + +exception + when others then null; +end; +/ + +-- this query populates some sqlplus variables required for dynamic compilation used below +with mod_banner as ( + select + replace(banner,' 9.','09.') banner + from + v$version + where rownum = 1 +) +select + case when substr(banner, instr(banner, 'Release ')+8,2) >= '18' then 'dbms_session.sleep' else 'dbms_lock.sleep' end snapper_howtosleep, + case when substr(banner, instr(banner, 'Release ')+8,2) >= '18' then '' else '--' end snapper_ora18higher, + case when substr(banner, instr(banner, 'Release ')+8,2) >= '12' then '' else '--' end snapper_ora12higher, + case when substr(banner, instr(banner, 'Release ')+8,2) < '12' then '' else '--' end snapper_ora12lower, + case when substr(banner, instr(banner, 'Release ')+8,2) = '11' then '' else '--' end snapper_ora11higher, + case when substr(banner, instr(banner, 'Release ')+8,2) < '11' then '' else '--' end snapper_ora11lower, + nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible, + nvl(:x, '--') x_accessible, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '' else '--' end yes_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '--' else '' end no_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '' else '--' end yes_plsql_obj_id, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '--' else '' end no_plsql_obj_id, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '' else '--' end manual_snapshot, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '--' else '' end use_dbms_lock, + :sid_filter sid_filter, + :inst_filter inst_filter +from + mod_banner +/ + +-- current workaround: 1st serveroutput command below is for sql developer compatibility +-- 2nd is for sqlplus, so that newlines and leading spaces get properly printed +set termout off +set serveroutput on size 1000000 +set serveroutput on size 1000000 format wrapped +set termout on + +prompt Sampling SID &4 with interval &snapper_sleep seconds, taking &snapper_count snapshots... + +-- let the Snapping start!!! +-- main() +declare + -- Snapper start + -- forward declarations + procedure output(p_txt in varchar2); + procedure fout; + + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, + p_grouplen in number default 3 + ) + return varchar2; + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) + return varchar2; + + + -- type, constant, variable declarations + + -- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_INTEGER + pls_adjust constant number(10,0) := power(2,31) - 1; + + type srec is record (ts timestamp, stype varchar2(4), inst_id number, sid number, statistic# number, value number, event_count number ); + type stab is table of srec index by pls_integer; + type ltab is table of srec index by varchar2(100); -- lookup tab for various average calculation + s1 stab; + s2 stab; + l1 ltab; + l2 ltab; + + type snrec is record (stype varchar2(4), statistic# number, name varchar2(100)); + type sntab is table of snrec index by pls_integer; + sn_tmp sntab; + sn sntab; + + type sntab_reverse is table of snrec index by varchar2(100); -- used for looking up stat id from stat name + sn_reverse sntab_reverse; + + tmp_varchar2 varchar2(1000); -- misc + + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2; + + type tmp_sestab is table of gv$session%rowtype index by pls_integer; + type sestab is table of gv$session%rowtype index by varchar2(20); + + g_sessions sestab; + g_empty_sessions sestab; + + type hc_tab is table of number index by pls_integer; -- index is sql hash value + type ses_hash_tab is table of hc_tab index by pls_integer; -- index is SID + + g_ses_hash_tab ses_hash_tab; + g_empty_ses_hash_tab ses_hash_tab; + + -- dbms_debug_vc2coll is a built-in collection present in every oracle db + g_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_empty_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_snap1 sys.dbms_debug_vc2coll; + g_snap2 sys.dbms_debug_vc2coll; + + g_ash_samples_taken number := 0; + + g_count_statname number; + g_count_eventname number; + + g_mysid number; + + top_n number; + + i number; + a number; + b number; + + c number; + delta number; + evcnt number; + changed_values number; + pagesize number:=99999999999999; + missing_values_s1 number := 0; + missing_values_s2 number := 0; + disappeared_sid number := 0; + lv_curr_sid number := 0; -- used for determining whether to print an empty line between session stats + d1 timestamp(6); + d2 timestamp(6); + ash_date1 date; + ash_date2 date; + lv_gather varchar2(1000); + gv_header_string varchar2(1000); + lv_data_string varchar2(1000); + + lv_ash varchar2(1000); + lv_stats varchar2(1000); + + gather_stats number := 0; + gather_ash number := 0; + + g_snap_begin varchar2(1000); + g_snap_end varchar2(1000); + + -- CONFIGURABLE STUFF -- + + -- this sets what are the default ash sample TOP reporting group by columns + g_ash_columns varchar2(1000) := 'inst_id + sql_id + sql_child_number + event + wait_class'; + g_ash_columns1 varchar2(1000) := 'inst_id + event + p1 + wait_class'; + g_ash_columns2 varchar2(1000) := 'inst_id + sid + user + machine + program'; + g_ash_columns3 varchar2(1000) := 'inst_id + plsql_object_id + plsql_subprogram_id + sql_id'; + g_ash_columns4 varchar2(1000) := 'con_id + inst_id + sql_id + sql_child_number + event + wait_class'; + g_ash_columns5 varchar2(1000) := 'con_id + inst_id + event + p1 + wait_class'; + g_ash_columns6 varchar2(1000) := 'con_id + inst_id + sid + user + machine + program'; + + -- output column configuration + output_header number := 0; -- 1=true 0=false + output_username number := 1; -- v$session.username + output_inst number := 0; -- inst + output_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 0 ELSE 1 END; -- just sid + output_inst_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 1 ELSE 0 END; -- inst_id and sid together + output_time number := 0; -- time of snapshot start + output_seconds number := 0; -- seconds in snapshot (shown in footer of each snapshot too) + output_stype number := 1; -- statistic type (WAIT,STAT,TIME,ENQG,LATG,...) + output_sname number := 1; -- statistic name + output_delta number := 1; -- raw delta + output_delta_s number := 0; -- raw delta normalized to per second + output_hdelta number := 0; -- human readable delta + output_hdelta_s number := 1; -- human readable delta normalized to per second + output_percent number := 1; -- percent of total time/samples + output_eventcnt number := 1; -- wait event count + output_eventcnt_s number := 1; -- wait event count + output_eventavg number := 1; -- average wait duration + output_pcthist number := 1; -- percent of total visual bar (histogram) -- Histograms seem to work for me on 9.2.0.7 + - JBJ2) + + output_actses number := 1; -- show Average Active Sessions (AAS) in "ASH" activity section + output_actses_pct number := 1; -- show AAS as a percentage of a single thread time + + -- column widths in ASH report output + w_inst_id number := 4; + w_sid number := 6; + w_username number := 20; + w_machine number := 20; + w_terminal number := 20; + w_program number := 25; + w_event number := 35; + w_wait_class number := 15; + w_state number := 8; + w_p1 number := 20; + w_p2 number := 20; + w_p3 number := 20; + w_row_wait_obj# number := 10; + w_row_wait_file# number := 6; + w_row_wait_block# number := 10; + w_row_wait_row# number := 6; + w_blocking_session_status number := 15; + w_blocking_instance number := 12; + w_blocking_session number := 12; + w_sql_hash_value number := 12; + w_sql_id number := 15; + w_sql_child_number number := 9; + w_plsql_entry_object_id number := 10; + w_plsql_entry_subprogram_id number := 10; + w_plsql_object_id number := 10; + w_plsql_subprogram_id number := 10; + w_module number := 25; + w_action number := 25; + w_client_identifier number := 25; + w_service_name number := 25; + w_con_id number := 6; + + w_actses number := 8; + w_actses_pct number := 10; + + -- END CONFIGURABLE STUFF -- + + -- constants for ash collection extraction from the vc2 collection + s_inst_id constant number := 1 ; + s_sid constant number := 2 ; + s_username constant number := 3 ; + s_machine constant number := 4 ; + s_terminal constant number := 5 ; + s_program constant number := 6 ; + s_event constant number := 7 ; + s_wait_class constant number := 8 ; + s_state constant number := 9 ; + s_p1 constant number := 10 ; + s_p2 constant number := 11 ; + s_p3 constant number := 12 ; + s_row_wait_obj# constant number := 13 ; + s_row_wait_file# constant number := 14 ; + s_row_wait_block# constant number := 15 ; + s_row_wait_row# constant number := 16 ; + s_blocking_session_status constant number := 17 ; + s_blocking_instance constant number := 18 ; + s_blocking_session constant number := 19 ; + s_sql_hash_value constant number := 20 ; + s_sql_id constant number := 21 ; + s_sql_child_number constant number := 22 ; + s_plsql_entry_object_id constant number := 23 ; + s_plsql_entry_subprogram_id constant number := 24 ; + s_plsql_object_id constant number := 25 ; + s_plsql_subprogram_id constant number := 26 ; + s_module constant number := 27 ; + s_action constant number := 28 ; + s_client_identifier constant number := 29 ; + s_service_name constant number := 30 ; + s_con_id constant number := 31 ; + + -- constants for ash collection reporting, which columns to show in report + c_inst_id constant number := power(2, s_inst_id ); + c_sid constant number := power(2, s_sid ); + c_username constant number := power(2, s_username ); + c_machine constant number := power(2, s_machine ); + c_terminal constant number := power(2, s_terminal ); + c_program constant number := power(2, s_program ); + c_event constant number := power(2, s_event ); + c_wait_class constant number := power(2, s_wait_class ); + c_state constant number := power(2, s_state ); + c_p1 constant number := power(2, s_p1 ); + c_p2 constant number := power(2, s_p2 ); + c_p3 constant number := power(2, s_p3 ); + c_row_wait_obj# constant number := power(2, s_row_wait_obj# ); + c_row_wait_file# constant number := power(2, s_row_wait_file# ); + c_row_wait_block# constant number := power(2, s_row_wait_block# ); + c_row_wait_row# constant number := power(2, s_row_wait_row# ); + c_blocking_session_status constant number := power(2, s_blocking_session_status ); + c_blocking_instance constant number := power(2, s_blocking_instance ); + c_blocking_session constant number := power(2, s_blocking_session ); + c_sql_hash_value constant number := power(2, s_sql_hash_value ); + c_sql_id constant number := power(2, s_sql_id ); + c_sql_child_number constant number := power(2, s_sql_child_number ); + c_plsql_entry_object_id constant number := power(2, s_plsql_entry_object_id ); + c_plsql_entry_subprogram_id constant number := power(2, s_plsql_entry_subprogram_id); + c_plsql_object_id constant number := power(2, s_plsql_object_id ); + c_plsql_subprogram_id constant number := power(2, s_plsql_subprogram_id ); + c_module constant number := power(2, s_module ); + c_action constant number := power(2, s_action ); + c_client_identifier constant number := power(2, s_client_identifier ); + c_service_name constant number := power(2, s_service_name ); + c_con_id constant number := power(2, s_con_id ); + + + /*--------------------------------------------------- + -- proc for outputting data to trace or dbms_output + ---------------------------------------------------*/ + procedure output(p_txt in varchar2) is + begin + + if (getopt('&snapper_options', 'out') is not null) + or + (getopt('&snapper_options', 'out') is null and getopt('&snapper_options', 'trace') is null) + then + dbms_output.put_line(p_txt); + end if; + + -- The block below is a sqlplus trick for conditionally commenting out PL/SQL code + &_IF_DBMS_SYSTEM_ACCESSIBLE + if getopt('&snapper_options', 'trace') is not null then + sys.dbms_system.ksdwrt(1, p_txt); + sys.dbms_system.ksdfls; + end if; + -- */ + end; -- output + + /*--------------------------------------------------- + -- function for converting interval datatype to microseconds + ---------------------------------------------------*/ + function get_seconds(i interval day to second) return number + as + s NUMBER; + begin + s := to_number(extract(second from i)) + + to_number(extract(minute from i)) * 60 + + to_number(extract(hour from i)) * 60 * 60 + + to_number(extract(day from i)) * 60 * 60 * 24; + --output('get_seconds '||to_char(i)||' = '||to_char(s)); + return s; + end get_seconds; + + /*--------------------------------------------------- + -- proc for outputting data, utilizing global vars + ---------------------------------------------------*/ + procedure fout is + l_output_username VARCHAR2(100); + gsid varchar2(20); + begin + --if s2(b).stype='WAIT' then output( 'DEBUG WAIT ' || sn(s2(b).statistic#).name || ' ' || delta ); end if; + --output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# ); + --output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + gsid := trim(to_char(s2(b).inst_id))||','||trim(to_char(s2(b).sid)); + + if output_username = 1 then + begin + l_output_username := nvl( g_sessions(gsid).username, substr(g_sessions(gsid).program, instr(g_sessions(gsid).program,'(')) ); + exception + when no_data_found then l_output_username := 'error'; + when others then raise; + end; + end if; + + -- DEBUG + --output('before'); + --output (CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END); + --output('after'); + + output( CASE WHEN output_header = 1 THEN 'SID= ' END + || CASE WHEN output_inst = 1 THEN to_char(s2(b).inst_id, '9999')||', ' END + || CASE WHEN output_sid = 1 THEN to_char(s2(b).sid,'999999')||', ' END + || CASE WHEN output_inst_sid = 1 THEN to_char(s2(b).sid,'99999')||' '||lpad('@'||trim(to_char(s2(b).inst_id, '99')),3)||', ' END + || CASE WHEN output_username = 1 THEN rpad(CASE s2(b).sid WHEN -1 THEN ' ' ELSE NVL(l_output_username, ' ') END, 10)||', ' END + || CASE WHEN output_time = 1 THEN to_char(d1, 'YYYYMMDD HH24:MI:SS')||', ' END + || CASE WHEN output_seconds = 1 THEN to_char(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end, '9999999')||', ' END + || CASE WHEN output_stype = 1 THEN s2(b).stype||', ' END + || CASE WHEN output_sname = 1 THEN rpad(sn(s2(b).statistic#).name, 58, ' ')||', ' END + || CASE WHEN output_delta = 1 THEN to_char(delta, '999999999999')||', ' END + || CASE WHEN output_delta_s = 1 THEN to_char(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end),'999999999')||', ' END + || CASE WHEN output_hdelta = 1 THEN lpad(tptformat(delta, s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_hdelta_s = 1 THEN lpad(tptformat(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_percent = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN to_char(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 10000, '9999.9')||'%' ELSE ' ' END END||', ' + || CASE WHEN output_pcthist = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN rpad(rpad('[', ceil(round(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 100000,1))+1, CASE WHEN s2(b).stype IN ('WAIT') THEN 'W' WHEN sn(s2(b).statistic#).name = 'DB CPU' THEN '@' ELSE '#' END),11,' ')||']' ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN to_char(evcnt, '99999999') ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt_s = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat((evcnt / case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), 'STAT' ), 10, ' ') ELSE ' ' END END||', ' + || CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END + ); + + end; + + + /*--------------------------------------------------- + -- lookup stat delta helper calculator (l2.value - l1.value) + ---------------------------------------------------*/ + function get_delta(metric_id in varchar2) return number + is + rec1 srec; + rec2 srec; + + val1 number; + val2 number; + + d number; + begin + begin + val1 := l1(metric_id).value; + exception + when no_data_found then val1 := 0; + end; + + begin + val2 := l2(metric_id).value; + exception + when no_data_found then val2 := 0; + end; + + d := val2 - NVL(val1, 0); + return d; + end get_delta; + + /*--------------------------------------------------- + -- delta helper function for convenience - it allows to specify any metric delta, if not specified then get current one + ---------------------------------------------------*/ + function gd(c in srec, metric_type in varchar2 DEFAULT NULL, metric_name in varchar2 DEFAULT NULL) return number + is + str varchar2(1000); + tmp_delta number; + begin + if metric_type || metric_name is null then + str := c.stype||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(c.statistic#,'999999999999999999999999')); + else + begin + str := trim(metric_type)||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(sn_reverse(metric_type||','||metric_name).statistic#)); + exception + when no_data_found then return 0; + end; + end if; + tmp_delta := get_delta(str); + --output('tmp_delta '||c.stype||' '||tmp_delta); + return tmp_delta; + -- return get_delta(str); + end; + + /*--------------------------------------------------- + -- function for calculating useful averages and ratios between metrics + -- it is totally OK to show ratios together with raw values they have been derived from + ---------------------------------------------------*/ + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2 + is + ret varchar2(1000); + mt varchar2(100) := c.stype; -- metric_type + mn varchar2(100) := sn(c.statistic#).name; -- metric_name + begin + case + when mt = 'STAT' then + case + when mn LIKE 'session _ga memory%' then ret := lpad( tptformat(gd(c), 'STAT'), 10) || ' actual value in end of snapshot'; + when mn LIKE '%ed%cursors current' then ret := lpad( tptformat(gd(c), 'STAT'), 10) || ' actual value in end of snapshot'; + when mn = 'file io service time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'physical read total IO requests')+gd(c, 'STAT', 'physical write total IO requests'),0), 'TIME'), 10) || ' bad guess of IO service time per IO request'; + when mn = 'file io wait time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'physical read total IO requests')+gd(c, 'STAT', 'physical write total IO requests'),0), 'TIME'), 10) || ' bad guess of IO wait time per IO request'; + when mn = 'redo synch time overhead (usec)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo synch writes' ),0), 'TIME'), 10) || ' FG wakeup overhead per log file sync'; + when mn = 'redo write worker delay (usec)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo write worker delay count'),0), 'TIME'), 10) || ' per LGWR post'; + when mn = 'redo write time (usec)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo writes' ),0), 'TIME'), 10) || ' per redo write'; + when mn = 'redo write gather time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo writes' ),0), 'TIME'), 10) || ' per redo write'; + when mn = 'redo write schedule time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo writes' ),0), 'TIME'), 10) || ' per redo write'; + when mn = 'redo write issue time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo writes' ),0), 'TIME'), 10) || ' per redo write'; + when mn = 'redo write finish time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo writes' ),0), 'TIME'), 10) || ' per redo write'; + when mn = 'redo write total time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo writes' ),0), 'TIME'), 10) || ' per redo write'; + when mn = 'recursive calls' then ret := lpad( tptformat(gd(c, 'STAT', 'recursive cpu usage') * 10000 / nullif(gd(c), 0), 'TIME'), 10) || ' recursive CPU per recursive call'; + when mn = 'recursive cpu usage' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total recursive CPU usage'; + when mn = 'parse time cpu' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total parse time CPU'; + when mn = 'parse time elapsed' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total parse time elapsed'; + when mn = 'CPU used when call started' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total CPU used when call started'; + when mn = 'CPU used by this session' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total CPU used by this session'; + when mn = 'DB Time' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total DB Time'; + when mn = 'physical write IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical write bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical write total IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical write total bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read total IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical write total multi block requests' then ret:= lpad( tptformat(gd(c, 'STAT', 'physical write total IO requests') - gd(c), mt), 10) || ' total single block write requests' ; + when mn = 'physical read total multi block requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total IO requests') - gd(c), mt), 10) || ' total single block read requests' ; + when mn = 'physical read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read bytes' ) / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total bytes' ) / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'bytes sent via SQL*Net to client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes received via SQL*Net from client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes sent via SQL*Net to dblink' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from dblink'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes received via SQL*Net from dblink' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from dblink'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'redo size' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'user commits' ),0), mt), 10) || ' bytes per user commit'; + when mn = 'execute count' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (total)' ),0), mt), 10) || ' executions per parse'; + when mn = 'parse count (total)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (hard)' ),0), mt), 10) || ' softparses per hardparse'; + when mn = 'session cursor cache hits' then ret := lpad( tptformat(gd(c) - (gd(c, 'STAT', 'parse count (total)' ) ), mt), 10) || ' softparses avoided thanks to cursor cache'; + when mn = 'session logical reads' then ret := lpad( tptformat(gd(c) + (gd(c, 'STAT', 'buffer is pinned count' ) ), mt), 10) || ' total buffer visits'; + when mn = 'buffer is pinned count' then ret := lpad( tptformat(gd(c) / nullif(gd(c) + gd(c, 'STAT', 'session logical reads'),0) * 100, mt), 10) || ' % buffer gets avoided thanks to buffer pin caching'; + else ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'execute count'),0), mt), 10) || ' per execution' ; + end case; -- mt=stat, mn + when mt = 'TIME' then + -- this is ugly and wrong at the moment - will refactor some day + case + when mn = 'DB time' or mn= 'background elapsed time' then ret := lpad(tptformat((get_seconds(d2 - d1)*1000000 - ( + gd(c) + /*+ gd(c, 'DB CPU', 'TIME') */ + + gd(c, 'WAIT', 'VKTM Logical Idle Wait') + + gd(c, 'WAIT', 'VKTM Init Wait for GSGA') + + gd(c, 'WAIT', 'IORM Scheduler Slave Idle Wait') + + gd(c, 'WAIT', 'rdbms ipc message') + + gd(c, 'WAIT', 'i/o slave wait') + + gd(c, 'WAIT', 'OFS Receive Queue') + + gd(c, 'WAIT', 'OFS idle') + + gd(c, 'WAIT', 'VKRM Idle') + + gd(c, 'WAIT', 'wait for unread message on broadcast channel') + + gd(c, 'WAIT', 'wait for unread message on multiple broadcast channels') + + gd(c, 'WAIT', 'class slave wait') + + gd(c, 'WAIT', 'RMA: IPC0 completion sync') + + gd(c, 'WAIT', 'PING') + + gd(c, 'WAIT', 'watchdog main loop') + + gd(c, 'WAIT', 'process in prespawned state') + + gd(c, 'WAIT', 'pmon timer') + + gd(c, 'WAIT', 'pman timer') + + gd(c, 'WAIT', 'DNFS disp IO slave idle') + + gd(c, 'WAIT', 'DIAG idle wait') + + gd(c, 'WAIT', 'ges remote message') + + gd(c, 'WAIT', 'SCM slave idle') + + gd(c, 'WAIT', 'LMS CR slave timer') + + gd(c, 'WAIT', 'gcs remote message') + + gd(c, 'WAIT', 'gcs yield cpu') + + gd(c, 'WAIT', 'heartbeat monitor sleep') + + gd(c, 'WAIT', 'GCR sleep') + + gd(c, 'WAIT', 'SGA: MMAN sleep for component shrink') + + gd(c, 'WAIT', 'DBWR timer') + + gd(c, 'WAIT', 'Data Guard: Gap Manager') + + gd(c, 'WAIT', 'Data Guard: controlfile update') + + gd(c, 'WAIT', 'MRP redo arrival') + + gd(c, 'WAIT', 'Data Guard: Timer') + + gd(c, 'WAIT', 'LNS ASYNC archive log') + + gd(c, 'WAIT', 'LNS ASYNC dest activation') + + gd(c, 'WAIT', 'LNS ASYNC end of log') + + gd(c, 'WAIT', 'simulated log write delay') + + gd(c, 'WAIT', 'heartbeat redo informer') + + gd(c, 'WAIT', 'LGWR real time apply sync') + + gd(c, 'WAIT', 'LGWR worker group idle') + + gd(c, 'WAIT', 'parallel recovery slave idle wait') + + gd(c, 'WAIT', 'Backup Appliance waiting for work') + + gd(c, 'WAIT', 'Backup Appliance waiting restore start') + + gd(c, 'WAIT', 'Backup Appliance Surrogate wait') + + gd(c, 'WAIT', 'Backup Appliance Servlet wait') + + gd(c, 'WAIT', 'Backup Appliance Comm SGA setup wait') + + gd(c, 'WAIT', 'LogMiner builder: idle') + + gd(c, 'WAIT', 'LogMiner builder: branch') + + gd(c, 'WAIT', 'LogMiner preparer: idle') + + gd(c, 'WAIT', 'LogMiner reader: log (idle)') + + gd(c, 'WAIT', 'LogMiner reader: redo (idle)') + + gd(c, 'WAIT', 'LogMiner merger: idle') + + gd(c, 'WAIT', 'LogMiner client: transaction') + + gd(c, 'WAIT', 'LogMiner: other') + + gd(c, 'WAIT', 'LogMiner: activate') + + gd(c, 'WAIT', 'LogMiner: reset') + + gd(c, 'WAIT', 'LogMiner: find session') + + gd(c, 'WAIT', 'LogMiner: internal') + + gd(c, 'WAIT', 'Logical Standby Apply Delay') + + gd(c, 'WAIT', 'parallel recovery coordinator waits for slave cleanup') + + gd(c, 'WAIT', 'parallel recovery coordinator idle wait') + + gd(c, 'WAIT', 'parallel recovery control message reply') + + gd(c, 'WAIT', 'parallel recovery slave next change') + + gd(c, 'WAIT', 'nologging fetch slave idle') + + gd(c, 'WAIT', 'recovery sender idle') + + gd(c, 'WAIT', 'recovery receiver idle') + + gd(c, 'WAIT', 'recovery coordinator idle') + + gd(c, 'WAIT', 'recovery logmerger idle') + + gd(c, 'WAIT', 'block compare coord process idle') + + gd(c, 'WAIT', 'PX Deq: Txn Recovery Start') + + gd(c, 'WAIT', 'PX Deq: Txn Recovery Reply') + + gd(c, 'WAIT', 'fbar timer') + + gd(c, 'WAIT', 'smon timer') + + gd(c, 'WAIT', 'PX Deq: Metadata Update') + + gd(c, 'WAIT', 'Space Manager: slave idle wait') + + gd(c, 'WAIT', 'PX Deq: Index Merge Reply') + + gd(c, 'WAIT', 'PX Deq: Index Merge Execute') + + gd(c, 'WAIT', 'PX Deq: Index Merge Close') + + gd(c, 'WAIT', 'PX Deq: kdcph_mai') + + gd(c, 'WAIT', 'PX Deq: kdcphc_ack') + + gd(c, 'WAIT', 'imco timer') + + gd(c, 'WAIT', 'IMFS defer writes scheduler') + + gd(c, 'WAIT', 'memoptimize write drain idle') + + gd(c, 'WAIT', 'virtual circuit next request') + + gd(c, 'WAIT', 'shared server idle wait') + + gd(c, 'WAIT', 'dispatcher timer') + + gd(c, 'WAIT', 'cmon timer') + + gd(c, 'WAIT', 'pool server timer') + + gd(c, 'WAIT', 'lreg timer') + + gd(c, 'WAIT', 'JOX Jit Process Sleep') + + gd(c, 'WAIT', 'jobq slave wait') + + gd(c, 'WAIT', 'pipe get') + + gd(c, 'WAIT', 'PX Deque wait') + + gd(c, 'WAIT', 'PX Idle Wait') + + gd(c, 'WAIT', 'PX Deq Credit: need buffer') + + gd(c, 'WAIT', 'PX Deq Credit: send blkd') + + gd(c, 'WAIT', 'PX Deq: Msg Fragment') + + gd(c, 'WAIT', 'PX Deq: Parse Reply') + + gd(c, 'WAIT', 'PX Deq: Execute Reply') + + gd(c, 'WAIT', 'PX Deq: Execution Msg') + + gd(c, 'WAIT', 'PX Deq: Table Q Normal') + + gd(c, 'WAIT', 'PX Deq: Table Q Sample') + + gd(c, 'WAIT', 'REPL Apply: txns') + + gd(c, 'WAIT', 'REPL Capture/Apply: messages') + + gd(c, 'WAIT', 'REPL Capture: archive log') + + gd(c, 'WAIT', 'single-task message') + + gd(c, 'WAIT', 'SQL*Net message from client') + + gd(c, 'WAIT', 'SQL*Net vector message from client') + + gd(c, 'WAIT', 'SQL*Net vector message from dblink') + + gd(c, 'WAIT', 'PL/SQL lock timer') + + gd(c, 'WAIT', 'Streams AQ: emn coordinator idle wait') + + gd(c, 'WAIT', 'EMON slave idle wait') + + gd(c, 'WAIT', 'Emon coordinator main loop') + + gd(c, 'WAIT', 'Emon slave main loop') + + gd(c, 'WAIT', 'Streams AQ: waiting for messages in the queue') + + gd(c, 'WAIT', 'Streams AQ: waiting for time management or cleanup tasks') + + gd(c, 'WAIT', 'Streams AQ: delete acknowledged messages') + + gd(c, 'WAIT', 'Streams AQ: deallocate messages from Streams Pool') + + gd(c, 'WAIT', 'Streams AQ: qmn coordinator idle wait') + + gd(c, 'WAIT', 'Streams AQ: qmn slave idle wait') + + gd(c, 'WAIT', 'AQ: 12c message cache init wait') + + gd(c, 'WAIT', 'AQ Cross Master idle') + + gd(c, 'WAIT', 'AQPC idle') + + gd(c, 'WAIT', 'Streams AQ: load balancer idle') + + gd(c, 'WAIT', 'Sharded Queues : Part Maintenance idle') + + gd(c, 'WAIT', 'Sharded Queues : Part Truncate idle') + + gd(c, 'WAIT', 'REPL Capture/Apply: RAC AQ qmn coordinator') + + gd(c, 'WAIT', 'Streams AQ: opt idle') + + gd(c, 'WAIT', 'HS message to agent') + + gd(c, 'WAIT', 'ASM background timer') + + gd(c, 'WAIT', 'ASM cluster membership changes') + + gd(c, 'WAIT', 'iowp msg') + + gd(c, 'WAIT', 'iowp file id') + + gd(c, 'WAIT', 'netp network') + + gd(c, 'WAIT', 'gopp msg') + + gd(c, 'WAIT', 'auto-sqltune: wait graph update') + + gd(c, 'WAIT', 'WCR: replay client notify') + + gd(c, 'WAIT', 'WCR: replay clock') + + gd(c, 'WAIT', 'WCR: replay paused') + + gd(c, 'WAIT', 'JS external job') + + gd(c, 'WAIT', 'cell worker idle') + )) / (get_seconds(d2 - d1)*1000000) * 100 + , 'STAT'), 10) || ' % unaccounted-for time*' ; + else null; + end case; -- mt=time, mn + else null; + end case; -- mt + return ret; + end get_useful_average; + + /*--------------------------------------------------- + -- function for converting large numbers to human-readable format + ---------------------------------------------------*/ + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, -- for KiB/MiB formatting use + p_grouplen in number default 3 -- p_base=2 and p_grouplen=10 + ) + return varchar2 + is + begin + if p_num = 0 then return '0'; end if; + if p_num IS NULL then return '~'; end if; + + if p_stype in ('WAIT','TIME') then + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then 'us' + when 1 then 'us' + when p_grouplen*1 then 'ms' + when p_grouplen*2 then 's' + when p_grouplen*3 then 'ks' + when p_grouplen*4 then 'Ms' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us' + end; + + else + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then '' + when 1 then '' + when p_grouplen*1 then 'k' + when p_grouplen*2 then 'M' + when p_grouplen*3 then 'G' + when p_grouplen*4 then 'T' + when p_grouplen*5 then 'P' + when p_grouplen*6 then 'E' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ) + end; + + end if; + + end; -- tptformat + + /*--------------------------------------------------- + -- simple function for parsing arguments from parameter string + ---------------------------------------------------*/ + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) return varchar2 + is + ret varchar(1000) := NULL; + begin + + -- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' ); + -- dbms_output.put('p_extract = ['||p_extract||'] ' ); + + if lower(p_parvalues) like lower(p_extract)||'%' + or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then + + ret := + nvl ( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract), + case + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) + when 0 then length(p_parvalues) + else + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) - 1 + end + ) + , chr(0) -- in case parameter was specified but with no value + ); + + else + ret := null; -- no parameter found + end if; + + -- dbms_output.put_line('ret = ['||replace(ret,chr(0),'\0')||']'); + + return ret; + + end; -- getopt + + /*--------------------------------------------------- + -- proc for getting session list with username, osuser, machine etc + ---------------------------------------------------*/ + procedure get_sessions is + tmp_sessions tmp_sestab; + begin + + select /*+ unnest */ /* get_session_list:1 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and ( + &sid_filter + ) ; + + g_sessions := g_empty_sessions; + + for i in 1..tmp_sessions.count loop + g_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + end; -- get_sessions + + /*--------------------------------------------------- + -- function for getting session list with username, osuser, machine etc + -- this func does not update the g_sessions global array but returns session info as return value + ---------------------------------------------------*/ + function get_sessions return sestab is + tmp_sessions tmp_sestab; + l_return_sessions sestab; + begin + + select /*+ unnest */ /* get_session_list:2 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and (&sid_filter) ; + + for i in 1..tmp_sessions.count loop + --output('get_sessions i='||i||' sid='||tmp_sessions(i).sid); + l_return_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + return l_return_sessions; + + end; -- get_sessions + + + /*--------------------------------------------------- + -- functions for extracting and converting gv$session + -- records to varchar2 + ---------------------------------------------------*/ + function sitem(p in varchar2) return varchar2 as + begin + return '<'||translate(p, '<>', '__')||'>'; + end; -- sitem varchar2 + + function sitem(p in number) return varchar2 as + begin + return '<'||to_char(p)||'>'; + end; -- sitem number + + function sitem(p in date) return varchar2 as + begin + return '<'||to_char(p, 'YYYY-MM-DD HH24:MI:SS')||'>'; + end; -- sitem date + + function sitem_raw(p in raw) return varchar2 as + begin + return '<'||upper(rawtohex(p))||'>'; + end; -- sitem_raw + + + /*--------------------------------------------------- + -- proc for resetting the snapper ash array + ---------------------------------------------------*/ + procedure reset_ash is + begin + g_ash_samples_taken := 0; + -- clear g_ash + g_ash := new sys.dbms_debug_vc2coll(); + end; -- reset_ash + + + /*--------------------------------------------------- + -- proc for getting ash style samples from gv$session + ---------------------------------------------------*/ + procedure extract_ash is + ash_i varchar2(30); + s gv$session%rowtype; + + begin + -- keep track how many times we sampled gv$session so we could calculate averages later on + g_ash_samples_taken := g_ash_samples_taken + 1; + --output('g_sessions.count='||g_sessions.count); + ash_i := g_sessions.first; + + while ash_i is not null loop + + s := g_sessions(ash_i); + if -- active, on cpu + (s.status = 'ACTIVE' and s.state != 'WAITING' and s.sid != g_mysid) + or -- active, waiting for non-idle wait + (s.status = 'ACTIVE' and s.state = 'WAITING' and s.wait_class != 'Idle' and s.sid != g_mysid) + then + --output('extract_ash: i='||i||' sid='||s.sid||' hv='||s.sql_hash_value||' sqlid='||s.sql_id); + -- if not actually waiting for anything, clear the past wait event details + if s.state != 'WAITING' then + s.state:='ON CPU'; + s.event:='ON CPU'; + s.wait_class:='ON CPU'; --TODO: What do we need to do for 9i here? + s.p1:=NULL; + s.p2:=NULL; + s.p3:=NULL; + end if; + + g_ash.extend; + + -- max length 1000 bytes (due to dbms_debug_vc2coll) + g_ash(g_ash.count) := substr( + sitem(s.inst_id) -- 1 + ||sitem(s.sid) -- 2 + ||sitem(s.username) -- 3 -- 30 bytes + ||sitem(s.machine) -- 4 -- 64 bytes + ||sitem(s.terminal) -- 5 -- 30 bytes + ||sitem(s.program) -- 6 -- 48 bytes + ||sitem(s.event) -- 7 -- 64 bytes + ||sitem(s.wait_class) -- 8 -- 64 bytes, 10g+ + ||sitem(s.state) -- 9 + ||sitem(s.p1) -- 10 + ||sitem(s.p2) -- 11 + ||sitem(s.p3) -- 12 + ||sitem(s.row_wait_obj#) -- 13 + ||sitem(s.row_wait_file#) -- 14 + ||sitem(s.row_wait_block#) -- 15 + ||sitem(s.row_wait_row#) -- 16 + ||sitem(s.blocking_session_status) -- 17 -- 10g+ + &_NO_BLK_INST ||sitem('N/A') -- 17 -- 10gR2+ + &_YES_BLK_INST ||sitem(s.blocking_instance) -- 18 -- 10gR2+ + ||sitem(s.blocking_session) -- 19 -- 10g+ + ||sitem(s.sql_hash_value) -- 20 + ||sitem(s.sql_id) -- 21 -- 10g+ + ||sitem(s.sql_child_number) -- 22 -- 10g+ + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 23 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 24 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 25 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 26 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_object_id) -- 23 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_subprogram_id) -- 24 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_object_id) -- 25 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_subprogram_id) -- 26 + ||sitem(s.module) -- 27 -- 48 bytes + ||sitem(s.action) -- 28 -- 32 bytes + ||sitem(s.client_identifier) -- 29 -- 64 bytes + ||sitem(s.service_name) -- 30 -- 64 bytes, 10g+ + &_IF_ORA12_OR_HIGHER ||sitem(s.con_id) -- 31 -- 12c+ + &_IF_LOWER_THAN_ORA12 ||sitem('N/A') -- 31 + , 1, 1000); + + end if; -- sample is of an active session + + ash_i := g_sessions.next(ash_i); + + end loop; + + exception + when no_data_found then output('error in extract_ash(): no_data_found for item '||i); + end; -- extract_ash + + + /*--------------------------------------------------- + -- proc for querying performance data into collections + ---------------------------------------------------*/ + procedure snap( p_snapdate out timestamp, p_stats out stab, l_stats out ltab, p_stats_string out sys.dbms_debug_vc2coll) is + + lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options', 'sinclude=' )), '%'); + lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options', 'linclude=' )), '%'); + lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options', 'tinclude=' )), '%'); + lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options', 'winclude=' )), '%'); + + lstr varchar2(1000); + + begin + + p_snapdate := systimestamp; + + select /* get_session_stats */ p_snapdate ts, snapper_stats.* + bulk collect into p_stats + from ( + select 'STAT' stype, s.inst_id, s.sid, ss.statistic# - pls_adjust statistic#, ss.value, null event_count + from gv$session s, gv$sesstat ss + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = ss.inst_id + and s.sid = ss.sid + and (lv_gather like '%s%' or lv_gather like '%a%') + and ss.statistic# in (select statistic# from v$statname + where lower(name) like '%'||lv_include_stat||'%' + or regexp_like (name, lv_include_stat, 'i') + ) + -- + union all + select + 'WAIT', s.inst_id, s.sid, + en.event# + (select count(*) from v$statname) + 1 - pls_adjust, + nvl(se.time_waited_micro,0) + ( decode(se.event||s.state, s.event||'WAITING', + CASE WHEN s.seconds_in_wait > 1300000000 THEN 0 ELSE s.seconds_in_wait END -- bug in v$session + , 0) * 1000000 ) value, total_waits event_count + from gv$session s, gv$session_event se, v$event_name en + where &sid_filter + and s.sid = se.sid + and s.inst_id = se.inst_id + and se.event = en.name + --and (se.inst_id, se.sid) in (&snapper_sid) + and (lv_gather like '%w%' or lv_gather like '%a%') + and en.event# in (select event# from v$event_name + where lower(name) like '%'||lv_include_wait||'%' + or regexp_like (name, lv_include_wait, 'i') + ) + -- + union all + select 'TIME' stype, s.inst_id, s.sid, st.stat_id - pls_adjust statistic#, st.value, null event_count + from gv$session s, gv$sess_time_model st + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = st.inst_id + and s.sid = st.sid + and (lv_gather like '%t%' or lv_gather like '%a%') + and st.stat_id in (select stat_id from gv$sys_time_model + where lower(stat_name) like '%'||lv_include_time||'%' + or regexp_like (stat_name, lv_include_time, 'i') + ) + -- + union all + select 'LATG', s.inst_id, -1 sid, + s.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + s.gets + s.immediate_gets value, null event_count + from gv$latch s + where &inst_filter + and (lv_gather like '%l%' or lv_gather like '%a%') + and latch# in (select latch# from v$latchname + where lower(name) like '%'||lv_include_latch||'%' + or regexp_like (name, lv_include_latch, 'i') + ) + -- + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 union all + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.why0+s.why1+s.why2 value, null event_count + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 from x$kcbsw s, x$kcbwh w + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 where + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx = w.indx + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and s.why0+s.why1+s.why2 > 0 + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and (lv_gather like '%b%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER union all + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER sw.indx + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.why0+why.why1+why.why2+sw.other_wait value, null event_count + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER from + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbuwhy why, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbwh dsc, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbsw sw + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER where + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.indx = dsc.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = dsc.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.why0 + why.why1 + why.why2 + sw.other_wait > 0 + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER -- deliberate cartesian join + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', s.inst_id, -1 sid, + ascii(substr(s.eq_type,1,1))*256 + ascii(substr(s.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + s.total_req# value, null event_count + from gv$enqueue_stat s + where &inst_filter + and (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_stats + order by inst_id, sid, stype, statistic#; + + if p_stats.COUNT > 0 then + -- l_stats is an associative array for stats lookup, used for the useful averages calculation + -- p_stats_string is a dbms_debug_vc2coll collection datatype for "persisting" stats values across snapper DB calls (for "before" and "after" snaps) + p_stats_string := sys.dbms_debug_vc2coll(); + for s in p_stats.first..p_stats.last loop + -- type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + + if g_snap_begin is not null then + p_stats_string.extend(); + p_stats_string(s) := TO_CHAR(p_stats(s).ts, 'YYYY-MM-DD HH24:MI:SS.FF') ||','|| + p_stats(s).stype ||','|| + TO_CHAR(p_stats(s).inst_id) ||','|| + TO_CHAR(p_stats(s).sid) ||','|| + TRIM(TO_CHAR(p_stats(s).statistic#, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).value, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).event_count,'999999999999999999999999')); + --output('p_stats.p_stats_string='||p_stats_string(s)); + end if; + end loop; -- s in (p_stats) + end if; -- p.stats.COUNT > 0 + end snap; + + + /*--------------------------------------------------- + -- proc for reversing the string-normalized + -- stats array into lookup tables/collections + ---------------------------------------------------*/ + procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out timestamp, p_stats out stab, l_stats out ltab) + is + lstr varchar2(1000); + lv_rec srec; + begin + p_snapdate := NULL; + --type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + for s in p_string_stats.first .. p_string_stats.last loop + lv_rec.ts := TO_TIMESTAMP(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 1),',',''), 'YYYY-MM-DD HH24:MI:SS.FF'); + lv_rec.stype := replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 2),',',''); + lv_rec.inst_id := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 3),',','')); + lv_rec.sid := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 4),',','')); + lv_rec.statistic# := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 5),',','')); + lv_rec.value := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 6),',','')); + lv_rec.event_count := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 7),',','')); + --output('snap_from_stats_string.event_count = '||to_char(lv_rec.event_count)); + + p_stats(s) := lv_rec; + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + end loop; + + p_snapdate := lv_rec.ts; + end snap_from_stats_string; + + /*--------------------------------------------------- + -- proc for dumping ASH data out in grouped + -- and ordered fashion + ---------------------------------------------------*/ + procedure out_ash( p_ash_columns in varchar2, p_topn in number := 10 ) as + + -- whether to print given column or not + p_inst_id number := 0; + p_sid number := 0; + p_username number := 0; + p_machine number := 0; + p_terminal number := 0; + p_program number := 0; + p_event number := 0; + p_wait_class number := 0; + p_state number := 0; + p_p1 number := 0; + p_p2 number := 0; + p_p3 number := 0; + p_row_wait_obj# number := 0; + p_row_wait_file# number := 0; + p_row_wait_block# number := 0; + p_row_wait_row# number := 0; + p_blocking_session_status number := 0; + p_blocking_instance number := 0; + p_blocking_session number := 0; + p_sql_hash_value number := 0; + p_sql_id number := 0; + p_sql_child_number number := 0; + p_plsql_entry_object_id number := 0; + p_plsql_entry_subprogram_id number := 0; + p_plsql_object_id number := 0; + p_plsql_subprogram_id number := 0; + p_module number := 0; + p_action number := 0; + p_client_identifier number := 0; + p_service_name number := 0; + p_con_id number := 0; + + -- temporary variables for holding session details (for later formatting) + o_inst_id varchar2(100); + o_sid varchar2(100); + o_username varchar2(100); + o_machine varchar2(100); + o_terminal varchar2(100); + o_program varchar2(100); + o_event varchar2(100); + o_wait_class varchar2(100); + o_state varchar2(100); + o_p1 varchar2(100); + o_p2 varchar2(100); + o_p3 varchar2(100); + o_row_wait_obj# varchar2(100); + o_row_wait_file# varchar2(100); + o_row_wait_block# varchar2(100); + o_row_wait_row# varchar2(100); + o_blocking_session_status varchar2(100); + o_blocking_instance varchar2(100); + o_blocking_session varchar2(100); + o_sql_hash_value varchar2(100); + o_sql_id varchar2(100); + o_sql_child_number varchar2(100); + o_plsql_entry_object_id varchar2(100); + o_plsql_entry_subprogram_id varchar2(100); + o_plsql_object_id varchar2(100); + o_plsql_subprogram_id varchar2(100); + o_module varchar2(100); + o_action varchar2(100); + o_client_identifier varchar2(100); + o_service_name varchar2(100); + o_con_id varchar2(100); + + -- helper local vars + l_ash_grouping number := 0; + l_output_line varchar2(4000); + l_ash_header_line varchar2(4000); + + begin + + -- bail out if no ASH samples recorded + if g_ash.count = 0 then + output(' '); + return; + end if; + + + l_ash_header_line := ''; + if output_actses = 1 then l_ash_header_line := l_ash_header_line || ' ActSes'; end if; + if output_actses_pct = 1 then l_ash_header_line := l_ash_header_line || ' %Thread'; end if; + + -- ash,ash1,ash2,ash3,ash4,ash5,ash6 parameter column group tokenizer + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + -- supported ASH column names + case s.token + -- actual column names in gv$session + when 'inst_id' then l_ash_grouping := l_ash_grouping + c_inst_id ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('INST_ID' , w_inst_id , ' '); + when 'con_id' then l_ash_grouping := l_ash_grouping + c_con_id ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('CON_ID' , w_con_id , ' '); + when 'sid' then l_ash_grouping := l_ash_grouping + c_sid ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('SID' , w_sid , ' '); + when 'username' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'machine' then l_ash_grouping := l_ash_grouping + c_machine ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MACHINE' , w_machine , ' '); + when 'terminal' then l_ash_grouping := l_ash_grouping + c_terminal ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('TERMINAL' , w_terminal , ' '); + when 'program' then l_ash_grouping := l_ash_grouping + c_program ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PROGRAM' , w_program , ' '); + when 'event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_class' then l_ash_grouping := l_ash_grouping + c_wait_class ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('WAIT_CLASS' , w_wait_class , ' '); + when 'state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + when 'p1' then l_ash_grouping := l_ash_grouping + c_p1 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P1' , w_p1 , ' '); + when 'p2' then l_ash_grouping := l_ash_grouping + c_p2 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P2' , w_p2 , ' '); + when 'p3' then l_ash_grouping := l_ash_grouping + c_p3 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P3' , w_p3 , ' '); + when 'row_wait_obj#' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'row_wait_file#' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'row_wait_block#' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row_wait_row#' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'blocking_session_status' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'blocking_instance' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'blocking_session' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql_hash_value' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sql_id' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'sql_child_number' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_entry_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_entry_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'module' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'action' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'client_identifier' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service_name' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'obj' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'file' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'block' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'bss' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'bsi' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'bs' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sqlid' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'child' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_eoid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_esubpid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_oid' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subpid' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'mod' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'act' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'cid' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + when 'wait_event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + else + null; + raise_application_error(-20001, 'Snapper: Invalid ASH column name, search for "ASH column name"'||chr(10)||'in snapper.sql script to see supported column names.'||chr(10)||sqlerrm); + end case; -- case s.token + + end loop; -- tokenizer + + output(' '); + output(lpad('-',length(l_ash_header_line),'-')); + output(l_ash_header_line); + output(lpad('-',length(l_ash_header_line),'-')); + + -- this is needed for "easy" sorting and group by ops (without any custom stored object types!) + for i in ( + with /* get_aggregates_from_ash */ raw_records as ( + select column_value rec from table(cast(g_ash as sys.dbms_debug_vc2coll)) + ), + ash_records as ( + select + substr(r.rec, instr(r.rec, '<', 1, 1)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 1)+1), '>')-1) inst_id + , substr(r.rec, instr(r.rec, '<', 1, 2)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 2)+1), '>')-1) sid + , substr(r.rec, instr(r.rec, '<', 1, 3)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 3)+1), '>')-1) username + , substr(r.rec, instr(r.rec, '<', 1, 4)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 4)+1), '>')-1) machine + , substr(r.rec, instr(r.rec, '<', 1, 5)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 5)+1), '>')-1) terminal + , substr(r.rec, instr(r.rec, '<', 1, 6)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 6)+1), '>')-1) program + , substr(r.rec, instr(r.rec, '<', 1, 7)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 7)+1), '>')-1) event + , substr(r.rec, instr(r.rec, '<', 1, 8)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 8)+1), '>')-1) wait_class + , substr(r.rec, instr(r.rec, '<', 1, 9)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 9)+1), '>')-1) state + , substr(r.rec, instr(r.rec, '<', 1, 10)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 10)+1), '>')-1) p1 + , substr(r.rec, instr(r.rec, '<', 1, 11)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 11)+1), '>')-1) p2 + , substr(r.rec, instr(r.rec, '<', 1, 12)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 12)+1), '>')-1) p3 + , substr(r.rec, instr(r.rec, '<', 1, 13)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 13)+1), '>')-1) row_wait_obj# + , substr(r.rec, instr(r.rec, '<', 1, 14)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 14)+1), '>')-1) row_wait_file# + , substr(r.rec, instr(r.rec, '<', 1, 15)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 15)+1), '>')-1) row_wait_block# + , substr(r.rec, instr(r.rec, '<', 1, 16)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 16)+1), '>')-1) row_wait_row# + , substr(r.rec, instr(r.rec, '<', 1, 17)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 17)+1), '>')-1) blocking_session_status + , substr(r.rec, instr(r.rec, '<', 1, 18)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 18)+1), '>')-1) blocking_instance + , substr(r.rec, instr(r.rec, '<', 1, 19)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 19)+1), '>')-1) blocking_session + , substr(r.rec, instr(r.rec, '<', 1, 20)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 20)+1), '>')-1) sql_hash_value + , substr(r.rec, instr(r.rec, '<', 1, 21)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 21)+1), '>')-1) sql_id + , substr(r.rec, instr(r.rec, '<', 1, 22)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 22)+1), '>')-1) sql_child_number + , substr(r.rec, instr(r.rec, '<', 1, 23)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 23)+1), '>')-1) plsql_entry_object_id + , substr(r.rec, instr(r.rec, '<', 1, 24)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 24)+1), '>')-1) plsql_entry_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 25)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 25)+1), '>')-1) plsql_object_id + , substr(r.rec, instr(r.rec, '<', 1, 26)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 26)+1), '>')-1) plsql_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 27)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 27)+1), '>')-1) module + , substr(r.rec, instr(r.rec, '<', 1, 28)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 28)+1), '>')-1) action + , substr(r.rec, instr(r.rec, '<', 1, 29)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 29)+1), '>')-1) client_identifier + , substr(r.rec, instr(r.rec, '<', 1, 30)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 30)+1), '>')-1) service_name + , substr(r.rec, instr(r.rec, '<', 1, 31)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 31)+1), '>')-1) con_id + from + raw_records r + ) + select * from ( + select + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) as inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) as sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) as username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) as machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) as terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) as program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) as event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) as wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) as state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) as p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) as p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) as p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) as row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) as row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) as row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) as row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) as blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) as blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) as blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) as sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) as sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) as sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) as plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) as plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) as plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) as plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) as module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) as action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) as client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) as service_name + , decode(bitand(l_ash_grouping, power(2, s_con_id )), 0, chr(0), con_id ) as con_id + , count(*)/g_ash_samples_taken average_active_samples + from + ash_records a + group by + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) -- inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) -- sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) -- username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) -- machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) -- terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) -- program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) -- event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) -- wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) -- state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) -- p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) -- p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) -- p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) -- row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) -- row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) -- row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) -- row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) -- blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) -- blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) -- blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) -- sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) -- sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) -- sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) -- plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) -- plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) -- plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) -- plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) -- module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) -- action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) -- client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) -- service_name + , decode(bitand(l_ash_grouping, power(2, s_con_id )), 0, chr(0), con_id ) -- con_id + order by + count(*)/g_ash_samples_taken desc + ) + where rownum <= p_topn + ) loop + + l_output_line := ''; + + o_inst_id := CASE WHEN i.inst_id = chr(0) THEN null ELSE nvl(i.inst_id , ' ') END; + o_sid := CASE WHEN i.sid = chr(0) THEN null ELSE nvl(i.sid , ' ') END; + o_username := CASE WHEN i.username = chr(0) THEN null ELSE nvl(i.username , ' ') END; + o_machine := CASE WHEN i.machine = chr(0) THEN null ELSE nvl(i.machine , ' ') END; + o_terminal := CASE WHEN i.terminal = chr(0) THEN null ELSE nvl(i.terminal , ' ') END; + o_program := CASE WHEN i.program = chr(0) THEN null ELSE nvl(i.program , ' ') END; + o_event := CASE WHEN i.event = chr(0) THEN null ELSE nvl(i.event , ' ') END; + o_wait_class := CASE WHEN i.wait_class = chr(0) THEN null ELSE nvl(i.wait_class , ' ') END; + o_state := CASE WHEN i.state = chr(0) THEN null ELSE nvl(i.state , ' ') END; + o_p1 := CASE WHEN i.p1 = chr(0) THEN null ELSE nvl(i.p1 , ' ') END; + o_p2 := CASE WHEN i.p2 = chr(0) THEN null ELSE nvl(i.p2 , ' ') END; + o_p3 := CASE WHEN i.p3 = chr(0) THEN null ELSE nvl(i.p3 , ' ') END; + o_row_wait_obj# := CASE WHEN i.row_wait_obj# = chr(0) THEN null ELSE nvl(i.row_wait_obj# , ' ') END; + o_row_wait_file# := CASE WHEN i.row_wait_file# = chr(0) THEN null ELSE nvl(i.row_wait_file# , ' ') END; + o_row_wait_block# := CASE WHEN i.row_wait_block# = chr(0) THEN null ELSE nvl(i.row_wait_block# , ' ') END; + o_row_wait_row# := CASE WHEN i.row_wait_row# = chr(0) THEN null ELSE nvl(i.row_wait_row# , ' ') END; + o_blocking_session_status := CASE WHEN i.blocking_session_status = chr(0) THEN null ELSE nvl(i.blocking_session_status , ' ') END; + o_blocking_instance := CASE WHEN i.blocking_instance = chr(0) THEN null ELSE nvl(i.blocking_instance , ' ') END; + o_blocking_session := CASE WHEN i.blocking_session = chr(0) THEN null ELSE nvl(i.blocking_session , ' ') END; + o_sql_hash_value := CASE WHEN i.sql_hash_value = chr(0) THEN null ELSE nvl(i.sql_hash_value , ' ') END; + o_sql_id := CASE WHEN i.sql_id = chr(0) THEN null ELSE nvl(i.sql_id , ' ') END; + o_sql_child_number := CASE WHEN i.sql_child_number = chr(0) THEN null ELSE nvl(i.sql_child_number , ' ') END; + o_plsql_entry_object_id := CASE WHEN i.plsql_entry_object_id = chr(0) THEN null ELSE nvl(i.plsql_entry_object_id , ' ') END; + o_plsql_entry_subprogram_id := CASE WHEN i.plsql_entry_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_entry_subprogram_id , ' ') END; + o_plsql_object_id := CASE WHEN i.plsql_object_id = chr(0) THEN null ELSE nvl(i.plsql_object_id , ' ') END; + o_plsql_subprogram_id := CASE WHEN i.plsql_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_subprogram_id , ' ') END; + o_module := CASE WHEN i.module = chr(0) THEN null ELSE nvl(i.module , ' ') END; + o_action := CASE WHEN i.action = chr(0) THEN null ELSE nvl(i.action , ' ') END; + o_client_identifier := CASE WHEN i.client_identifier = chr(0) THEN null ELSE nvl(i.client_identifier , ' ') END; + o_service_name := CASE WHEN i.service_name = chr(0) THEN null ELSE nvl(i.service_name , ' ') END; + o_con_id := CASE WHEN i.con_id = chr(0) THEN null ELSE nvl(i.con_id , ' ') END; + + -- print the AAS and activity % as the first columns + l_output_line := ''; + if output_actses = 1 then l_output_line := l_output_line || lpad(to_char(round(i.average_active_samples,2),'9999.99'), w_actses, ' '); end if; + if output_actses_pct = 1 then l_output_line := l_output_line || lpad('('||to_char(round(i.average_active_samples*100))||'%)', w_actses_pct, ' '); end if; + + -- loop through ash columns to find what to print and in which order + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + l_output_line := l_output_line || ' | ' || + case s.token + -- actual column names in gv$session + when 'inst_id' then lpad(o_inst_id , w_inst_id , ' ') + when 'con_id' then lpad(o_con_id , w_con_id , ' ') + when 'sid' then lpad(o_sid , w_sid , ' ') + when 'username' then rpad(o_username , w_username , ' ') + when 'machine' then rpad(o_machine , w_machine , ' ') + when 'terminal' then rpad(o_terminal , w_terminal , ' ') + when 'program' then rpad(o_program , w_program , ' ') + when 'event' then rpad(o_event , w_event , ' ') + when 'wait_class' then rpad(o_wait_class , w_wait_class , ' ') + when 'state' then rpad(o_state , w_state , ' ') + when 'p1' then rpad(o_p1 , w_p1 , ' ') + when 'p2' then rpad(o_p2 , w_p2 , ' ') + when 'p3' then rpad(o_p3 , w_p3 , ' ') + when 'row_wait_obj#' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'row_wait_file#' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'row_wait_block#' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row_wait_row#' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'blocking_session_status' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'blocking_instance' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'blocking_session' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql_hash_value' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sql_id' then rpad(o_sql_id , w_sql_id , ' ') + when 'sql_child_number' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_entry_object_id' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_entry_subprogram_id' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_object_id' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subprogram_id' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'module' then rpad(o_module , w_module , ' ') + when 'action' then rpad(o_action , w_action , ' ') + when 'client_identifier' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service_name' then rpad(o_service_name , w_service_name , ' ') + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then rpad(o_username , w_username , ' ') + when 'obj' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'file' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'block' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'bss' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'bsi' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'bs' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sqlid' then rpad(o_sql_id , w_sql_id , ' ') + when 'child' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_eoid' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_esubpid' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_oid' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subpid' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'mod' then rpad(o_module , w_module , ' ') + when 'act' then rpad(o_action , w_action , ' ') + when 'cid' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service' then rpad(o_service_name , w_service_name , ' ') + when 'wait_event' then rpad(o_event , w_event , ' ') + when 'wait_state' then rpad(o_state , w_state , ' ') + else + '' + end; -- case s.token + + end loop; -- ash parameter tokenizer + + output(l_output_line); + + end loop; -- grouped ash samples + + end out_ash; + +-- and it begins!!! +begin + + -- get snappers own sid into g_mysid + select sid into g_mysid from v$mystat where rownum = 1; + + pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize); + --output ( 'Pagesize='||pagesize ); + + lv_ash := getopt('&snapper_options', 'ash'); + lv_stats := getopt('&snapper_options', 'stat'); + + if lv_ash is not null then gather_ash := 1; end if; + if lv_stats is not null then gather_stats := 1; end if; + + --output('all='||case when getopt('&snapper_options', 'all') = chr(0) then 'chr(0)' when getopt('&snapper_options', 'all') is null then 'null' else (getopt('&snapper_options','all')) end); + -- some additional default value logic + if getopt('&snapper_options', 'all') is not null then + --output('setting stats to all due to option = all'); + gather_stats := 1; + gather_ash := 1; + else + if (lv_ash is null and lv_stats is null) then + gather_stats := 0; + gather_ash := 1; + end if; + end if; + + -- determine which performance counters and stats to collect + lv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + when 'all' then 'stw' + else nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + end; + + --lv_gather:=getopt ('&snapper_options', 'gather='); + --output('lv_gather='||lv_gather); + + g_snap_begin := lower(getopt('&snapper_options', 'begin' )); + g_snap_end := lower(getopt('&snapper_options', 'end' )); + --output('g_snap_begin = '||g_snap_begin); + --output('g_snap_end = '||g_snap_end); + + if pagesize > 0 then + output(' '); + output('-- Session Snapper v4.34 - by Tanel Poder ( https://tanelpoder.com/snapper ) - Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :)'); + output(' '); + end if; + + -- initialize statistic and event name array + -- fetch statistic names with their adjusted IDs + select /* get_stat_names */ * + bulk collect into sn_tmp + from ( + select 'STAT' stype, statistic# - pls_adjust statistic#, name + from v$statname + where (lv_gather like '%s%' or lv_gather like '%a%') + -- + union all + select 'WAIT', + event# + (select count(*) from v$statname) + 1 - pls_adjust, name + from v$event_name + where (lv_gather like '%w%' or lv_gather like '%a%') + -- + union all + select 'TIME' stype, stat_id - pls_adjust statistic#, stat_name name + from gv$sys_time_model + where (lv_gather like '%t%' or lv_gather like '%a%') + -- + union all + select 'LATG', + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + name + from gv$latch l + where (lv_gather like '%l%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE union all + &_IF_X_ACCESSIBLE select 'BUFG', + &_IF_X_ACCESSIBLE indx + + &_IF_X_ACCESSIBLE (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE kcbwhdes name + &_IF_X_ACCESSIBLE from x$kcbwh + &_IF_X_ACCESSIBLE where (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + eq_type + from ( + select es.eq_type + ||' - '||lt.name + eq_type, + total_req# + from + gv$enqueue_stat es + , gv$lock_type lt + where es.eq_type = lt.type + ) e + where (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_statnames + order by stype, statistic#; + + -- store these into an index_by array organized by statistic# for fast lookup + for i in 1..sn_tmp.count loop + sn(sn_tmp(i).statistic#) := sn_tmp(i); + sn_reverse(sn_tmp(i).stype||','||sn_tmp(i).name) := sn_tmp(i); + end loop; + + + -- main sampling loop + for c in 1..&snapper_count loop + + -- sesstat and other performance counter sampling + if gather_stats = 1 then + + -- print header if required + gv_header_string := + CASE WHEN output_header = 1 THEN 'HEAD,' END + || CASE WHEN output_inst = 1 THEN ' INST,' END + || CASE WHEN output_sid = 1 THEN ' SID,' END + || CASE WHEN output_inst_sid = 1 THEN ' SID @INST,' END + || CASE WHEN output_username = 1 THEN ' USERNAME ,' END + || CASE WHEN output_time = 1 THEN ' SNAPSHOT START ,' END + || CASE WHEN output_seconds = 1 THEN ' SECONDS,' END + || CASE WHEN output_stype = 1 THEN ' TYPE,' END + || CASE WHEN output_sname = 1 THEN rpad(' STATISTIC',59,' ')||',' END + || CASE WHEN output_delta = 1 THEN ' DELTA,' END + || CASE WHEN output_delta_s = 1 THEN ' DELTA/SEC,' END + || CASE WHEN output_hdelta = 1 THEN ' HDELTA,' END + || CASE WHEN output_hdelta_s = 1 THEN ' HDELTA/SEC,' END + || CASE WHEN output_percent = 1 THEN ' %TIME,' END + || CASE WHEN output_pcthist = 1 THEN ' GRAPH ,' END + || CASE WHEN output_eventcnt = 1 THEN ' NUM_WAITS,' END + || CASE WHEN output_eventcnt_s = 1 THEN ' WAITS/SEC,' END + || CASE WHEN output_eventavg = 1 THEN ' AVERAGES ' END + ; + + + if g_snap_begin is null then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(rpad('-',length(gv_header_string),'-')); + output(gv_header_string); + output(rpad('-',length(gv_header_string),'-')); + else + if pagesize = -1 and c = 1 then + output(gv_header_string); + end if; + end if; + else + output('Taking BEGIN sample ...'); + end if; + + -- TODO raise an error if both begin and end are used together + + -- manual before/after snapshots (snapper v4) + if g_snap_begin is not null or g_snap_end is not null then + if g_snap_begin is not null then + get_sessions; + snap(d1,s1,l1,g_snap1); +&_MANUAL_SNAPSHOT open :snapper for select column_value rec from table(g_snap1); -- if you see this error then run: "VAR SNAPPER REFCURSOR" first! + exit; + end if; + + if g_snap_end is not null then +&_MANUAL_SNAPSHOT fetch :snapper bulk collect into g_snap1; -- You should run snapper with BEGIN option first! + -- procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out date, p_stats out stab, l_stats out ltab) + snap_from_stats_string(g_snap1, d1, s1, l1); + end if; + else -- normal interval sampling + if c = 1 then + get_sessions; + snap(d1,s1,l1,g_snap1); + else + get_sessions; + d1 := d2; + s1 := s2; + g_snap1 := g_snap2; + end if; -- c = 1 + end if; + + end if; -- gather_stats = 1 + + + + -- ASH style sampling + +&_USE_DBMS_LOCK ash_date1 := sysdate; +&_USE_DBMS_LOCK if gather_ash = 1 then +&_USE_DBMS_LOCK while sysdate < (ash_date1 + (&snapper_sleep/86400)) loop +&_USE_DBMS_LOCK -- get active session records from g_sessions +&_USE_DBMS_LOCK get_sessions; +&_USE_DBMS_LOCK extract_ash(); +&_USE_DBMS_LOCK -- sleep timeout backoff depending on the duration sampled (for up to 10 seconds total sampling time will get max 100 Hz sampling) +&_USE_DBMS_LOCK -- for longer duration sampling the algorithm will back off and for long durations (over 100 sec) the sampling rate will stabilize +&_USE_DBMS_LOCK -- at 1Hz +&_USE_DBMS_LOCK &_HOW_TO_SLEEP( greatest(0.1,(least(1,&snapper_sleep*&snapper_count/100))) ); +&_USE_DBMS_LOCK end loop; +&_USE_DBMS_LOCK else +&_USE_DBMS_LOCK &_HOW_TO_SLEEP( ((ash_date1+(&snapper_sleep/86400)) - sysdate)*86400 ); +&_USE_DBMS_LOCK null; +&_USE_DBMS_LOCK end if; +&_USE_DBMS_LOCK ash_date2 := sysdate; + + -- sesstat new sample and delta calculation + if gather_stats = 1 then + + get_sessions; + snap(d2,s2,l2,g_snap2); + + -- manually coded nested loop outer join for calculating deltas: + -- why not use a SQL join? this would require creation of PL/SQL + -- collection object types, but Snapper does not require any changes + -- to the database, so any custom object types are out! + changed_values := 0; + missing_values_s1 := 0; + missing_values_s2 := 0; + + -- remember last disappeared SID so we wouldn't need to output a warning + -- message for each statistic row of that disappeared sid + disappeared_sid := 0; + + i :=1; -- iteration counter (for debugging) + a :=1; -- s1 array index + b :=1; -- s2 array index + + if s2.count > 0 then lv_curr_sid := s2(b).sid; end if; + + while ( a <= s1.count and b <= s2.count ) loop + + if lv_curr_sid != 0 and lv_curr_sid != s2(b).sid then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + -- if filtering specific stats, assuming that it's better to not leave spaces between every session data + + if getopt('&snapper_options', 'sinclude=')||getopt('&snapper_options', 'tinclude=' )||getopt('&snapper_options', 'winclude=' ) is null then + output(' '); + -- output(rpad('-',length(gv_header_string),'-')); + -- output(gv_header_string); + -- output(rpad('-',length(gv_header_string),'-')); + end if; + end if; + lv_curr_sid := s2(b).sid; + end if; + + delta := 0; -- don't print + + case + when s1(a).sid = s2(b).sid then + + case + when s1(a).statistic# = s2(b).statistic# then + + delta := s2(b).value - s1(a).value; + evcnt := s2(b).event_count - s1(a).event_count; + --output('DEBUG, s1(a).statistic# s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + if delta != 0 then fout(); end if; + + a := a + 1; + b := b + 1; + + when s1(a).statistic# > s2(b).statistic# then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).statistic# < s2(b).statistic# then + + output('ERROR, s1(a).statistic# < s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + else + output('ERROR, s1(a).statistic# ? s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + end case; -- s1(a).statistic# ... s2(b).statistic# + + when s1(a).sid > s2(b).sid then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).sid < s2(b).sid then + + if disappeared_sid != s1(a).sid then + output('WARN, Session has disappeared since previous snapshot, ignoring SID='||to_char(s1(a).sid)||' debug(a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count||')'); + end if; + disappeared_sid := s1(a).sid; + a := a + 1; + + else + output('ERROR, Should not be here, SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + end case; -- s1(a).sid ... s2(b).sid + + i:=i+1; + + if delta != 0 then + + changed_values := changed_values + 1; + + end if; -- delta != 0 + + end loop; -- while ( a <= s1.count and b <= s2.count ) + + if pagesize > 0 and changed_values > 0 then + output(' '); + output('-- End of Stats snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||round(get_seconds(d2-d1), 1)); + end if; + + output(' '); + + end if; -- gather_stats = 1 + + if gather_ash = 1 then + + -- get ASH sample grouping details + g_ash_columns := nvl( getopt('&snapper_options', 'ash=' ), g_ash_columns ); + + -- optional additional ASH groupings + g_ash_columns1 := case when getopt('&snapper_options', 'ash1' ) is null then null when getopt('&snapper_options', 'ash1' ) = chr(0) then g_ash_columns1 else getopt('&snapper_options', 'ash1=' ) end; + g_ash_columns2 := case when getopt('&snapper_options', 'ash2' ) is null then null when getopt('&snapper_options', 'ash2' ) = chr(0) then g_ash_columns2 else getopt('&snapper_options', 'ash2=' ) end; + g_ash_columns3 := case when getopt('&snapper_options', 'ash3' ) is null then null when getopt('&snapper_options', 'ash3' ) = chr(0) then g_ash_columns3 else getopt('&snapper_options', 'ash3=' ) end; + g_ash_columns4 := case when getopt('&snapper_options', 'ash4' ) is null then null when getopt('&snapper_options', 'ash4' ) = chr(0) then g_ash_columns4 else getopt('&snapper_options', 'ash4=' ) end; + g_ash_columns5 := case when getopt('&snapper_options', 'ash5' ) is null then null when getopt('&snapper_options', 'ash5' ) = chr(0) then g_ash_columns5 else getopt('&snapper_options', 'ash5=' ) end; + g_ash_columns6 := case when getopt('&snapper_options', 'ash6' ) is null then null when getopt('&snapper_options', 'ash6' ) = chr(0) then g_ash_columns6 else getopt('&snapper_options', 'ash6=' ) end; + + -- group ASH records and print report + top_n := nvl( getopt('&snapper_options', 'topn=' ), 10 ); + out_ash( g_ash_columns, top_n ); + -- group and print optional ASH reports + if g_ash_columns1 is not null then out_ash( g_ash_columns1, top_n ); end if; + if g_ash_columns2 is not null then out_ash( g_ash_columns2, top_n ); end if; + if g_ash_columns3 is not null then out_ash( g_ash_columns3, top_n ); end if; + if g_ash_columns4 is not null then out_ash( g_ash_columns4, top_n ); end if; + if g_ash_columns5 is not null then out_ash( g_ash_columns5, top_n ); end if; + if g_ash_columns6 is not null then out_ash( g_ash_columns6, top_n ); end if; + + + if pagesize > 0 then + output(' '); + output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken||', AAS='||CASE WHEN g_ash_samples_taken = 0 THEN '(No ASH sampling in begin/end snapshot mode)' ELSE TO_CHAR(ROUND(g_ash.COUNT/NULLIF(g_ash_samples_taken,0),1)) END ); + --output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken||', AAS='||TO_CHAR(ROUND(g_ash.COUNT/g_ash_samples_taken,1))||', Active%='||TO_CHAR(ROUND(g_ash.COUNT/g_ash_samples_taken*100,1))||'%' ); + + output(' '); + end if; + + reset_ash(); + + end if; -- gather_ash = 1 + + end loop; -- for c in 1..snapper_count + + exception when others then + raise_application_error(-20000, 'Snapper: Probably bad syntax or no execute rights on SYS.DBMS_LOCK'||chr(10)||'Check http://blog.tanelpoder.com/snapper for instructions'||chr(10)||sqlerrm||chr(10)||'Stack Trace:'||chr(10)||dbms_utility.format_error_backtrace); + +end; +/ + +undefine snapper_sleep +undefine snapper_count +undefine snapper_sid +undefine ssid_begin +undefine _IF_ORA12_OR_HIGHER +undefine _IF_ORA11_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11 +undefine _IF_LOWER_THAN_ORA12 +undefine _NO_BLK_INST +undefine _YES_BLK_INST +undefine _NO_PLSQL_OBJ_ID +undefine _YES_PLSQL_OBJ_ID +undefine _IF_DBMS_SYSTEM_ACCESSIBLE +undefine _IF_X_ACCESSIBLE +undefine _MANUAL_SNAPSHOT +undefine _USE_DBMS_LOCK +col snapper_howtosleep clear +col snapper_ora18higher clear +col snapper_ora12higher clear +col snapper_ora12lower clear +col snapper_ora11higher clear +col snapper_ora11lower clear +col dbms_system_accessible clear +col x_accessible clear +col no_plsql_obj_id clear +col yes_plsql_obj_id clear +col no_blk_inst clear +col yes_blk_inst clear +col manual_snapshot clear +col use_dbms_lock clear +col snapper_sid clear +col sid_filter clear +col inst_filter clear + +set serveroutput off + diff --git a/tpt/snapper3.sql b/tpt/snapper3.sql new file mode 100644 index 0000000..c8ff026 --- /dev/null +++ b/tpt/snapper3.sql @@ -0,0 +1,2136 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: snapper.sql +-- Purpose: An easy to use Oracle session-level performance measurement tool +-- which does NOT require any database changes nor creation of any +-- database objects! +-- +-- This is very useful for ad-hoc performance diagnosis in environments +-- with restrictive change management processes, where creating +-- even temporary tables and PL/SQL packages is not allowed or would +-- take too much time to get approved. +-- +-- All processing is done by a few sqlplus commands and an anonymous +-- PL/SQL block, all that's needed is SQLPLUS access (and if you want +-- to output data to server-side tracefile then execute rights on +-- DBMS_SYSTEM). Snapper only queries some V$ views (and in advanced +-- mode some X$ fixed tables, but it does not enable any traces nor +-- use oradebug. +-- +-- The output is formatted the way it could be easily post-processed +-- by either Unix string manipulation tools or loaded to spreadsheet. +-- +-- Snapper v4 works on Oracle 10.1 onwards. If you need Snapper for +-- older database versions, then Snapper v3 works on Oracle versions +-- starting from Oracle 9.2, but it does not have GV$ view, manual +-- snapshot support and the useful averages are limited to wait events +-- only +-- +-- Note1: The "ASH" functionality in Snapper just samples V$SESSION view, +-- so you do NOT need Diagnostics Pack licenses to use Snapper's +-- "ASH" output +-- +-- Note2: Snapper just reports you performance metric deltas in a snapsphot +-- and does not attempt to solve any performance problems for you. +-- You still need to interpret and understand these standard Oracle +-- metrics yourself +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- Copyright: (c) Tanel Poder - http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", so no warranties or guarantees are +-- made about its correctness, reliability and safety. Use it at your +-- own risk! +-- +-- License: 1) You may use this script for your (or your businesses) purposes for free +-- 2) You may modify this script as you like for your own (or your businesses) purpose, +-- but you must always leave this script header (the entire comment section), including the +-- author, copyright and license sections as the first thing in the beginning of this file +-- 3) You may NOT publish or distribute this script or any variation of it PUBLICLY +-- (including, but not limited to uploading it to your public website or ftp server), +-- instead just link to its location in blog.tanelpoder.com +-- 4) You may distribute this script INTERNALLY in your company, for internal use only, +-- for example when building a standard DBA toolset to be deployed to all +-- servers or DBA workstations +-- +-- +-- Thanks to: Adrian Billington, Jamey Johnston and Marcus Mönnig for bugfixes, +-- additions and improvements +-- +-------------------------------------------------------------------------------- +-- +-- The Session Snapper v3.64 +-- (c) Tanel Poder ( http://blog.tanelpoder.com ) +-- +-- +-- +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a cheap ASCII +-- / imitation of a fish and a fishing rod. +-- | Nevertheless the PL/SQL code below the +-- | fish itself should be helpful for quick +-- | catching of relevant Oracle performance +-- | information. +-- | So I wish you happy... um... snapping? +-- | ) +-- | ...... +-- | iittii,,.... +-- ¿ iiffffjjjjtttt,, +-- ..;;ttffLLLLffLLLLLLffjjtt;;.. +-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,, +-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;.... +-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;.. +-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,, +-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;.. +-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii.. +-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;.. +-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,, +-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii.. +-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;.. +-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;; +-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;.. +-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. .... +-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii.. +-- ..;;ttttii;;.... ..;;;;.... +-- ..iiii;;.. +-- ..;;,, +-- .... +-- +-- +-- Usage: +-- +-- snapper.sql [,out][,trace][,pagesize=X][,gather=[s][t][w][l][e][b][a]]> +-- +-- ash - sample session activity ASH style, waits and SQL_IDs from v$session and +-- print a TOP SQL/wait report from these samples (this is the default from +-- Snapper 3.0). The columns chosen for TOP calculation are defined in CONFIG +-- section below. +-- +-- ash=sql_id+event+wait_class +-- - the above example illustrates that you can also specify the v$session +-- columns for TOP report yourself. The above example will show a TOP +-- activity report grouped by SQL_ID + EVENT + WAIT_CLASS +-- Note that the columns are separated by a "+" sign (as comma is a snapper +-- parameter separator, not ASH column separator) +-- +-- ash1 +-- ash2 +-- ash3 - in addition to "ash" report you can have 3 more reported during the same +-- snapper sampling snapshot. Just include ash1=col1+col2,ash2=col3+col4,... +-- parameters if you want multiple TOP reports per Snapper snapshot +-- +-- stats - sample v$sesstat,v$sess_time_model,v$session_event performance counters +-- and report how much these stats increased (deltas) during Snapper run +-- all - report both ASH and stats sections +-- +-- out - use dbms_output.put_line() for output. output will be seen only when +-- Snapper run completes due to dbms_output limitations. This is the default. +-- trace - write output to server process tracefile +-- (you must have execute permission on sys.dbms_system.ksdwrt() for that, +-- you can use both out and trace parameters together if you like ) +-- +-- pagesize - display header lines after X snapshots. if pagesize=0 don't display +-- any headers. pagesize=-1 will display a terse header only once +-- +-- gather - if omitted, gathers s,t,w statistics (see below) +-- - if specified, then gather following: +-- +-- Session-level stats: +-- s - Session Statistics from v$sesstat +-- t - Session Time model info from v$sess_time_model +-- w - Session Wait statistics from v$session_event and v$session_wait +-- +-- Instance-level stats: +-- l - instance Latch get statistics ( gets + immediate_gets ) +-- e - instance Enqueue lock get statistics +-- b - buffer get Where statistics -- useful in versions up to 10.2.x +-- a - All above +-- +-- sinclude - if specified, then show only V$SESSTAT stats which match the +-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+) +-- linclude - if specified, then show only V$LATCH latch stats which match the +-- LIKE pattern of linclude (REGEXP_LIKE in 10g+) +-- tinclude - if specified, then show only V$SESS_TIME_MODEL stats which match the +-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+) +-- winclude - if specified, then show only V$SESSION_EVENT wait stats which match the +-- LIKE pattern of winclude (REGEXP_LIKE in 10g+) +-- +-- you can combine above parameters in any order, separate them by commas +-- !!!don't use spaces as otherwise they are treated as next parameters by sqlplus !!! +-- !!!if you want to use spaces, enclose the whole sqlplus parameter in doublequotes !!! +-- +-- - the number of seconds between taking snapshots +-- - the number of snapshots to take ( maximum value is power(2,31)-1 ) +-- +-- can be either one sessionid, multiple sessionids separated by +-- commas or a SQL statement which returns a list of SIDs (if you need spaces +-- in that parameter text, enclose it in double quotes). +-- +-- if you want to snap ALL sids, use "all" as value for +-- parameter +-- +-- alternatively you can used "select sid from v$session" as value for +-- parameter to capture all SIDs. you can write any query (with multiple and/or) +-- conditions to specify complex rules for capturing only the SIDs you want +-- +-- starting from version 3.0 there are further session_id selection options available in +-- instead of sid you can write such expressions for snapper's parameter: +-- +-- sid=123 -- take sid 123 only (the same as just writing 123) +-- user=tanel -- take all sessions where username is 'tanel' (case insensitive) +-- -- this is the same as writing following subquery for the +-- -- parameter: +-- select sid from v$session where lower(username) like lower('tanel') +-- +-- user=tanel% -- take all sessions where username begins with 'tanel%' (case insensitive) +-- -- the = means actually LIKE in SQL terms in this script +-- +-- spid=1234 -- all these 3 parameters do the same thing: +-- ospid=1234 -- they look up the sessions(s) where the processes OS PID=1234 +-- pid=1234 -- this is useful for quickly looking up what some OS process is doing +-- -- if it consumes too much of some resource +-- qc=123 +-- qcsid=123 -- show query coordinator and all PX slave sessions +-- +-- program=sqlplus% -- the following examples filter by corresponding v$session coulmns +-- machine=linux01 -- machine +-- osuser=oracle -- os username +-- module=HR -- module +-- "action=Find Order" -- note the quotes because there is a space inside the parameter +-- -- value +-- client_id=tanelpoder -- show only sessions where client_identifier is set to tanelpoder +-- -- this is very useful in cases with (properly instrumented) +-- -- connection pools +-- +-- +-- Note that if you want to change some "advanced" snapper configuration parameters +-- or default values then search for CONFIG in this file to see configurable +-- variable section +-- +-- +-- Examples: +-- NB! Read the online examples, these are more detailed and list script output too! +-- +-- http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper +-- +-- @snapper ash,stats 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- Wait, v$sesstat and v$sess_time_model statistics are reported by default +-- Starting from V3 the ASH style session activity report is shown as well) +-- +-- @snapper stats,gather=w 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only Wait event statistics are reported, no ASH) +-- +-- @snapper ash,gather=st 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only v$sesstat and v$sess_Time_model statistics are gathered + ASH) +-- +-- @snapper trace,ash,gather=stw,pagesize=0 10 90 117,210,313 +-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313 +-- all statistics are reported, do not print any headers) +-- +-- @snapper trace,ash 900 999999999 "select sid from v$session" +-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace, +-- loop (almost) forever ) +-- +-- @snapper out,trace 300 12 "select sid from v$session where username='APPS'" +-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write +-- output to both dbms_output and tracefile) +-- +-- Notes: +-- +-- Snapper does not currently detect if a session with given SID has +-- ended and been recreated between snapshots, thus it may report bogus +-- statistics for such sessions. The check and warning for that will be +-- implemented in a future version. +-- +-------------------------------------------------------------------------------- + +set termout off tab off verify off linesize 999 trimspool on trimout on null "" + + +-- Get parameters +define snapper_options="&1" +define snapper_sleep="&2" +define snapper_count="&3" +define snapper_sid="&4" + + +-- The following code is required for making this script "dynamic" as due to +-- different Oracle versions, script parameters or granted privileges some +-- statements might not compile if not adjusted properly. +define _IF_ORA9="" +define _IF_ORA9206_OR_LOWER="" +define _IF_ORA9207_OR_HIGHER="" +define _IF_ORA10_OR_HIGHER="" +define _IF_ORA10_OR_HIGHER="--" +define _IF_ORA11_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA11="--" +define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" +-- /*dummy*/ -- it's here to avoid vim syntax highlighter from going crazy +define _IF_X_ACCESSIBLE="--" + +-- plsql_object_id columns available in v$session (from 10.2.0.3) +define _YES_PLSQL_OBJ_ID="--" +define _NO_PLSQL_OBJ_ID="" +-- blocking_instance available in v$session (from 10.2) +define _YES_BLK_INST="--" +define _NO_BLK_INST="" + +-- set the noprint's value to "noprint" if you don't want these temporary variables to show up in a sqlplus spool file +DEF noprint="" +col snapper_ora9 &noprint new_value _IF_ORA9 +col snapper_ora9206lower &noprint new_value _IF_ORA9206_OR_LOWER +col snapper_ora9207higher &noprint new_value _IF_ORA9207_OR_HIGHER +col snapper_ora10higher &noprint new_value _IF_ORA10_OR_HIGHER +col snapper_ora11higher &noprint new_value _IF_ORA11_OR_HIGHER +col snapper_ora11lower &noprint new_value _IF_LOWER_THAN_ORA11 +col dbms_system_accessible &noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLE +col x_accessible &noprint new_value _IF_X_ACCESSIBLE +col no_plsql_obj_id &noprint new_value _NO_PLSQL_OBJ_ID +col yes_plsql_obj_id &noprint new_value _YES_PLSQL_OBJ_ID +col no_blk_inst &noprint new_value _NO_BLK_INST +col yes_blk_inst &noprint new_value _YES_BLK_INST + +col snapper_sid &noprint new_value snapper_sid + +-- this block determines whether dbms_system.ksdwrt is accessible to us +-- dbms_describe is required as all_procedures/all_objects may show this object +-- even if its not executable by us (thanks to o7_dictionary_accessibility=false) + +var v varchar2(100) +var x varchar2(10) + +declare + + o sys.dbms_describe.number_table; + p sys.dbms_describe.number_table; + l sys.dbms_describe.number_table; + a sys.dbms_describe.varchar2_table; + dty sys.dbms_describe.number_table; + def sys.dbms_describe.number_table; + inout sys.dbms_describe.number_table; + len sys.dbms_describe.number_table; + prec sys.dbms_describe.number_table; + scal sys.dbms_describe.number_table; + rad sys.dbms_describe.number_table; + spa sys.dbms_describe.number_table; + + tmp number; + +begin + + begin + execute immediate 'select count(*) from x$kcbwh where rownum = 1' into tmp; + :x:= ' '; -- x$ tables are accessible, so dont comment any lines out + exception + when others then null; + end; + + sys.dbms_describe.describe_procedure( + 'DBMS_SYSTEM.KSDWRT', null, null, + o, p, l, a, dty, def, inout, len, prec, scal, rad, spa + ); + + -- we never get to following statement if dbms_system is not accessible + -- as sys.dbms_describe will raise an exception + :v:= '-- dbms_system is accessible'; + +exception + when others then null; +end; +/ + +-- this is here for a reason +-- im extracting the first word of the snapper_sid (if its a complex expression, not just a single SID) +-- by relying on how DEF and & assignment treat spaces in strings +def ssid_begin=&snapper_sid + +select snapper_sid from ( + select + case + when trim(lower('&ssid_begin')) like 'sid=%' then trim(replace('&ssid_begin','sid=','')) + when trim(lower('&ssid_begin')) like 'user=%' then 'select sid from v$session where lower(username) like '''||lower(trim(replace('&ssid_begin','user=','')))||'''' + when trim(lower('&ssid_begin')) like 'username=%' then 'select sid from v$session where lower(username) like '''||lower(trim(replace('&ssid_begin','username=','')))||'''' + when trim(lower('&ssid_begin')) like 'machine=%' then 'select sid from v$session where lower(machine) like '''||lower(trim(replace('&ssid_begin','machine=','')))||'''' + when trim(lower('&ssid_begin')) like 'program=%' then 'select sid from v$session where lower(program) like '''||lower(trim(replace('&ssid_begin','program=','')))||'''' + when trim(lower('&ssid_begin')) like 'service=%' then 'select sid from v$session where lower(service_name) like '''||lower(trim(replace('&ssid_begin','service=','')))||'''' + when trim(lower('&ssid_begin')) like 'module=%' then 'select sid from v$session where lower(module) like '''||lower(trim(replace('&ssid_begin','module=','')))||'''' + when trim(lower('&ssid_begin')) like 'action=%' then 'select sid from v$session where lower(action) like '''||lower(trim(replace('&ssid_begin','action=','')))||'''' + when trim(lower('&ssid_begin')) like 'osuser=%' then 'select sid from v$session where lower(osuser) like '''||lower(trim(replace('&ssid_begin','osuser=','')))||'''' + when trim(lower('&ssid_begin')) like 'client_id=%' then 'select sid from v$session where lower(client_identifier) like '''||lower(trim(replace('&ssid_begin','client_id=','')))||'''' + when trim(lower('&ssid_begin')) like 'spid=%' then 'select sid from v$session where paddr in (select addr from v$process where spid in ('||lower(trim(replace('&ssid_begin','spid=','')))||'))' + when trim(lower('&ssid_begin')) like 'ospid=%' then 'select sid from v$session where paddr in (select addr from v$process where spid in ('||lower(trim(replace('&ssid_begin','ospid=','')))||'))' + when trim(lower('&ssid_begin')) like 'pid=%' then 'select sid from v$session where paddr in (select addr from v$process where spid in ('||lower(trim(replace('&ssid_begin','pid=','')))||'))' + when trim(lower('&ssid_begin')) like 'qcsid=%' then 'select sid from v$px_session where qcsid in ('||lower(trim(replace('&ssid_begin','qcsid=','')))||')' + when trim(lower('&ssid_begin')) like 'qc=%' then 'select sid from v$px_session where qcsid in ('||lower(trim(replace('&ssid_begin','qc=','')))||')' + when trim(lower('&ssid_begin')) = 'all' then 'select sid from v$session' + when trim(lower('&ssid_begin')) = 'bg' then 'select sid from v$session where type=''BACKGROUND''' + when trim(lower('&ssid_begin')) = 'fg' then 'select sid from v$session where type=''USER''' + when trim(lower('&ssid_begin')) = 'lgwr' then 'select sid from v$session where program like ''%(LGWR)%''' + when trim(lower('&ssid_begin')) = 'dbwr' then 'select sid from v$session where program like ''%(DBW%)%''' + when trim(lower('&ssid_begin')) like 'select%' then null + when trim(lower('&ssid_begin')) like 'with%' then null + else null + end snapper_sid -- put the result back to snapper_sid sqlplus value (if its not null) + from + dual +) +where + snapper_sid is not null -- snapper_sid sqlplus variable value will not be replaced if this query doesnt return any rows +/ + + +-- this query populates some sqlplus variables required for dynamic compilation used below + +with mod_banner as ( + select + replace(banner,'9.','09.') banner + from + v$version + where rownum = 1 +) +select + decode(substr(banner, instr(banner, 'Release ')+8,2), '09', '--', '') snapper_ora10lower, + decode(substr(banner, instr(banner, 'Release ')+8,2), '09', '', '--') snapper_ora9, + decode(substr(banner, instr(banner, 'Release ')+8,1), '1', '', '--') snapper_ora10higher, + CASE WHEN substr(banner, instr(banner, 'Release ')+8,2) >= '11' THEN '' ELSE '--' END snapper_ora11higher, + CASE WHEN substr(banner, instr(banner, 'Release ')+8,2) < '11' THEN '' ELSE '--' END snapper_ora11lower, + nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible, + nvl(:x, '--') x_accessible, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '' else '--' end yes_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '--' else '' end no_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '' else '--' end yes_plsql_obj_id, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '--' else '' end no_plsql_obj_id, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) < '09.2.0.7' then '' else '--' end snapper_ora9206lower, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '09.2.0.7' then '' else '--' end snapper_ora9207higher +from + mod_banner +/ + +set termout on serveroutput on size 1000000 format wrapped + +prompt Sampling SID &4 with interval &snapper_sleep seconds, taking &snapper_count snapshots... + +-- main() +-- let the Snapping start!!! +declare + -- Snapper start + -- forward declarations + procedure output(p_txt in varchar2); + procedure fout; + + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, + p_grouplen in number default 3 + ) + return varchar2; + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) + return varchar2; + + -- type, constant, variable declarations + + -- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_INTEGER + pls_adjust constant number(10,0) := power(2,31) - 1; + + type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + type stab is table of srec index by pls_integer; + s1 stab; + s2 stab; + + type snrec is record (stype varchar2(4), statistic# number, name varchar2(100)); + type sntab is table of snrec index by pls_integer; + sn_tmp sntab; + sn sntab; + +&_IF_ORA10_OR_HIGHER type sestab is table of v$session%rowtype index by pls_integer; + +--For ORA9 we can't just declare this with a table type, since we need to join V$SESSION with V$SESSION_WAIT + +&_IF_ORA9 TYPE sestab_rec IS RECORD ( +&_IF_ORA9 SADDR RAW(8), +&_IF_ORA9 SID NUMBER, +&_IF_ORA9 SERIAL# NUMBER, +&_IF_ORA9 AUDSID NUMBER, +&_IF_ORA9 PADDR RAW(8), +&_IF_ORA9 USER# NUMBER, +&_IF_ORA9 USERNAME VARCHAR2(30), +&_IF_ORA9 COMMAND NUMBER, +&_IF_ORA9 OWNERID NUMBER, +&_IF_ORA9 TADDR VARCHAR2(16), +&_IF_ORA9 LOCKWAIT VARCHAR2(16), +&_IF_ORA9 STATUS VARCHAR2(8), +&_IF_ORA9 SERVER VARCHAR2(9), +&_IF_ORA9 SCHEMA# NUMBER, +&_IF_ORA9 SCHEMANAME VARCHAR2(30), +&_IF_ORA9 OSUSER VARCHAR2(30), +&_IF_ORA9 PROCESS VARCHAR2(12), +&_IF_ORA9 MACHINE VARCHAR2(64), +&_IF_ORA9 TERMINAL VARCHAR2(30), +&_IF_ORA9 PROGRAM VARCHAR2(64), +&_IF_ORA9 TYPE VARCHAR2(10), +&_IF_ORA9 SQL_ADDRESS RAW(8), +&_IF_ORA9 SQL_HASH_VALUE NUMBER, +&_IF_ORA9 PREV_SQL_ADDR RAW(8), +&_IF_ORA9 PREV_HASH_VALUE NUMBER, +&_IF_ORA9 MODULE VARCHAR2(48), +&_IF_ORA9 MODULE_HASH NUMBER, +&_IF_ORA9 ACTION VARCHAR2(32), +&_IF_ORA9 ACTION_HASH NUMBER, +&_IF_ORA9 CLIENT_INFO VARCHAR2(64), +&_IF_ORA9 FIXED_TABLE_SEQUENCE NUMBER, +&_IF_ORA9 ROW_WAIT_OBJ# NUMBER, +&_IF_ORA9 ROW_WAIT_FILE# NUMBER, +&_IF_ORA9 ROW_WAIT_BLOCK# NUMBER, +&_IF_ORA9 ROW_WAIT_ROW# NUMBER, +&_IF_ORA9 LOGON_TIME DATE, +&_IF_ORA9 LAST_CALL_ET NUMBER, +&_IF_ORA9 PDML_ENABLED VARCHAR2(3), +&_IF_ORA9 FAILOVER_TYPE VARCHAR2(13), +&_IF_ORA9 FAILOVER_METHOD VARCHAR2(10), +&_IF_ORA9 FAILED_OVER VARCHAR2(3), +&_IF_ORA9 RESOURCE_CONSUMER_GROUP VARCHAR2(32), +&_IF_ORA9 PDML_STATUS VARCHAR2(8), +&_IF_ORA9 PDDL_STATUS VARCHAR2(8), +&_IF_ORA9 PQ_STATUS VARCHAR2(8), +&_IF_ORA9 CURRENT_QUEUE_DURATION NUMBER, +&_IF_ORA9 CLIENT_IDENTIFIER VARCHAR2(64), +&_IF_ORA9 SID2 NUMBER, +&_IF_ORA9 SEQ# NUMBER, +&_IF_ORA9 EVENT VARCHAR2(64), +&_IF_ORA9 P1TEXT VARCHAR2(64), +&_IF_ORA9 P1 NUMBER, +&_IF_ORA9 P1RAW RAW(8), +&_IF_ORA9 P2TEXT VARCHAR2(64), +&_IF_ORA9 P2 NUMBER, +&_IF_ORA9 P2RAW RAW(8), +&_IF_ORA9 P3TEXT VARCHAR2(64), +&_IF_ORA9 P3 NUMBER, +&_IF_ORA9 P3RAW RAW(8), +&_IF_ORA9 WAIT_TIME NUMBER, +&_IF_ORA9 SECONDS_IN_WAIT NUMBER, +&_IF_ORA9 STATE VARCHAR2(19) +&_IF_ORA9 ); + +&_IF_ORA9 type sestab is table of sestab_rec index by pls_integer; + + + g_sessions sestab; + g_empty_sessions sestab; + + type hc_tab is table of number index by pls_integer; -- index is sql hash value + type ses_hash_tab is table of hc_tab index by pls_integer; -- index is SID + + g_ses_hash_tab ses_hash_tab; + g_empty_ses_hash_tab ses_hash_tab; + + -- dbms_debug_vc2coll is a built-in collection present in every oracle db + g_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_empty_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + + g_ash_samples_taken number := 0; + + g_count_statname number; + g_count_eventname number; + + g_mysid number; + + i number; + a number; + b number; + + c number; + delta number; + evcnt number; + changed_values number; + pagesize number:=99999999999999; + missing_values_s1 number := 0; + missing_values_s2 number := 0; + disappeared_sid number := 0; + lv_curr_sid number := 0; -- used for determining whether to print an empty line between session stats + d1 date; + d2 date; + ash_date1 date; + ash_date2 date; + lv_gather varchar2(1000); + gv_header_string varchar2(1000); + lv_data_string varchar2(1000); + + lv_ash varchar2(1000); + lv_stats varchar2(1000); + + gather_stats number := 0; + gather_ash number := 0; + + + -- CONFIGURABLE STUFF -- + + -- this sets what are the default ash sample TOP reporting group by columns + + +&_IF_ORA10_OR_HIGHER g_ash_columns varchar2(1000) := 'sql_id + sql_child_number + event + wait_class'; +&_IF_ORA10_OR_HIGHER g_ash_columns1 varchar2(1000) := 'event + wait_class'; +&_IF_ORA10_OR_HIGHER g_ash_columns2 varchar2(1000) := 'sid + sql_id + event + wait_class'; +&_IF_ORA10_OR_HIGHER g_ash_columns3 varchar2(1000) := 'plsql_object_id + plsql_subprogram_id + sql_id'; + +&_IF_ORA9 g_ash_columns varchar2(1000) := 'sql_hash_value + event'; +&_IF_ORA9 g_ash_columns1 varchar2(1000) := 'event'; +&_IF_ORA9 g_ash_columns2 varchar2(1000) := 'sid + sql_hash_value + event'; +&_IF_ORA9 g_ash_columns3 varchar2(1000) := 'plsql_object_id + plsql_subprogram_id + sql_hash_value'; + + -- output column configuration + output_header number := 0; -- 1=true 0=false + output_username number := 1; -- v$session.username + output_sid number := 1; -- sid + output_time number := 0; -- time of snapshot start + output_seconds number := 0; -- seconds in snapshot (shown in footer of each snapshot too) + output_stype number := 1; -- statistic type (WAIT,STAT,TIME,ENQG,LATG,...) + output_sname number := 1; -- statistic name + output_delta number := 1; -- raw delta + output_delta_s number := 0; -- raw delta normalized to per second + output_hdelta number := 0; -- human readable delta + output_hdelta_s number := 1; -- human readable delta normalized to per second + output_percent number := 1; -- percent of total time/samples + output_eventcnt number := 1; -- wait event count + output_eventcnt_s number := 1; -- wait event count + output_eventavg number := 1; -- average wait duration +&_IF_ORA9206_OR_LOWER output_pcthist number := 0; -- percent of total visual bar (histogram) -- 9.2.0.6 or lower - does not work - jbj2 +&_IF_ORA9207_OR_HIGHER output_pcthist number := 1; -- percent of total visual bar (histogram) -- Histograms seem to work for me on 9.2.0.7 + - JBJ2) + + -- column widths in ASH report output + w_sid number := 6; + w_username number := 20; + w_machine number := 20; + w_terminal number := 20; + w_program number := 25; + w_event number := 35; + w_wait_class number := 15; + w_state number := 8; + w_p1 number := 20; + w_p2 number := 20; + w_p3 number := 20; + w_row_wait_obj# number := 10; + w_row_wait_file# number := 6; + w_row_wait_block# number := 10; + w_row_wait_row# number := 6; + w_blocking_session_status number := 15; + w_blocking_instance number := 12; + w_blocking_session number := 12; + w_sql_hash_value number := 12; + w_sql_id number := 15; + w_sql_child_number number := 9; + w_plsql_entry_object_id number := 10; + w_plsql_entry_subprogram_id number := 10; + w_plsql_object_id number := 10; + w_plsql_subprogram_id number := 10; + w_module number := 25; + w_action number := 25; + w_client_identifier number := 25; + w_service_name number := 25; + + w_activity_pct number := 7; + + -- END CONFIGURABLE STUFF -- + + -- constants for ash collection extraction from the vc2 collection + s_sid constant number := 1 ; + s_username constant number := 2 ; + s_machine constant number := 3 ; + s_terminal constant number := 4 ; + s_program constant number := 5 ; + s_event constant number := 6 ; + s_wait_class constant number := 7 ; + s_state constant number := 8 ; + s_p1 constant number := 9 ; + s_p2 constant number := 10 ; + s_p3 constant number := 11 ; + s_row_wait_obj# constant number := 12 ; + s_row_wait_file# constant number := 13 ; + s_row_wait_block# constant number := 14 ; + s_row_wait_row# constant number := 15 ; + s_blocking_session_status constant number := 16 ; + s_blocking_instance constant number := 17 ; + s_blocking_session constant number := 18 ; + s_sql_hash_value constant number := 19 ; + s_sql_id constant number := 20 ; + s_sql_child_number constant number := 21 ; + s_plsql_entry_object_id constant number := 22 ; + s_plsql_entry_subprogram_id constant number := 23 ; + s_plsql_object_id constant number := 24 ; + s_plsql_subprogram_id constant number := 25 ; + s_module constant number := 26 ; + s_action constant number := 27 ; + s_client_identifier constant number := 28 ; + s_service_name constant number := 29 ; + + -- constants for ash collection reporting, which columns to show in report + c_sid constant number := power(2, s_sid ); + c_username constant number := power(2, s_username ); + c_machine constant number := power(2, s_machine ); + c_terminal constant number := power(2, s_terminal ); + c_program constant number := power(2, s_program ); + c_event constant number := power(2, s_event ); + c_wait_class constant number := power(2, s_wait_class ); + c_state constant number := power(2, s_state ); + c_p1 constant number := power(2, s_p1 ); + c_p2 constant number := power(2, s_p2 ); + c_p3 constant number := power(2, s_p3 ); + c_row_wait_obj# constant number := power(2, s_row_wait_obj# ); + c_row_wait_file# constant number := power(2, s_row_wait_file# ); + c_row_wait_block# constant number := power(2, s_row_wait_block# ); + c_row_wait_row# constant number := power(2, s_row_wait_row# ); + c_blocking_session_status constant number := power(2, s_blocking_session_status ); + c_blocking_instance constant number := power(2, s_blocking_instance ); + c_blocking_session constant number := power(2, s_blocking_session ); + c_sql_hash_value constant number := power(2, s_sql_hash_value ); + c_sql_id constant number := power(2, s_sql_id ); + c_sql_child_number constant number := power(2, s_sql_child_number ); + c_plsql_entry_object_id constant number := power(2, s_plsql_entry_object_id ); + c_plsql_entry_subprogram_id constant number := power(2, s_plsql_entry_subprogram_id); + c_plsql_object_id constant number := power(2, s_plsql_object_id ); + c_plsql_subprogram_id constant number := power(2, s_plsql_subprogram_id ); + c_module constant number := power(2, s_module ); + c_action constant number := power(2, s_action ); + c_client_identifier constant number := power(2, s_client_identifier ); + c_service_name constant number := power(2, s_service_name ); + + -- bitfield specifying which columns to group by in sampled session activity (ASH) + g_ash_grouping number := 63; -- test + + + + /*--------------------------------------------------- + -- proc for outputting data to trace or dbms_output + ---------------------------------------------------*/ + procedure output(p_txt in varchar2) is + begin + + if (getopt('&snapper_options', 'out') is not null) + or + (getopt('&snapper_options', 'out') is null and getopt('&snapper_options', 'trace') is null) + then + dbms_output.put_line(p_txt); + end if; + + -- The block below is a sqlplus trick for conditionally commenting out PL/SQL code + &_IF_DBMS_SYSTEM_ACCESSIBLE + if getopt('&snapper_options', 'trace') is not null then + sys.dbms_system.ksdwrt(1, p_txt); + sys.dbms_system.ksdfls; + end if; + -- */ + end; -- output + + /*--------------------------------------------------- + -- proc for outputting data, utilizing global vars + ---------------------------------------------------*/ + procedure fout is + l_output_username VARCHAR2(100); + begin + --if s2(b).stype='WAIT' then output( 'DEBUG WAIT ' || sn(s2(b).statistic#).name || ' ' || delta ); end if; + --output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# ); + --output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + if output_username = 1 then + begin + l_output_username := nvl( g_sessions(s2(b).sid).username, substr(g_sessions(s2(b).sid).program, instr(g_sessions(s2(b).sid).program,'(')) ); + exception + when no_data_found then l_output_username := 'error'; + when others then raise; + end; + end if; + output( CASE WHEN output_header = 1 THEN 'SID= ' END + || CASE WHEN output_sid = 1 THEN to_char(s2(b).sid,'999999')||', ' END + || CASE WHEN output_username = 1 THEN rpad(CASE s2(b).sid WHEN -1 THEN ' ' ELSE NVL(l_output_username, ' ') END, 10)||', ' END + || CASE WHEN output_time = 1 THEN to_char(d1, 'YYYYMMDD HH24:MI:SS')||', ' END + || CASE WHEN output_seconds = 1 THEN to_char(case (d2-d1) when 0 then &snapper_sleep else (d2-d1) * 86400 end, '9999999')||', ' END + || CASE WHEN output_stype = 1 THEN s2(b).stype||', ' END + || CASE WHEN output_sname = 1 THEN rpad(sn(s2(b).statistic#).name, 58, ' ')||', ' END + || CASE WHEN output_delta = 1 THEN to_char(delta, '999999999999')||', ' END + || CASE WHEN output_delta_s = 1 THEN to_char(delta/(case (d2-d1) when 0 then &snapper_sleep else (d2-d1) * 86400 end),'999999999')||', ' END + || CASE WHEN output_hdelta = 1 THEN lpad(tptformat(delta, s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_hdelta_s = 1 THEN lpad(tptformat(delta/(case (d2-d1) when 0 then &snapper_sleep else (d2-d1)* 86400 end ), s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_percent = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN to_char(delta/CASE (d2-d1) WHEN 0 THEN &snapper_sleep ELSE (d2-d1) * 86400 END / 10000, '9999.9')||'%' ELSE ' ' END END||', ' + || CASE WHEN output_pcthist = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN rpad(rpad('[', ceil(round(delta/CASE (d2-d1) WHEN 0 THEN &snapper_sleep ELSE (d2-d1) * 86400 END / 100000,1))+1, CASE WHEN s2(b).stype IN ('WAIT') THEN 'W' WHEN sn(s2(b).statistic#).name = 'DB CPU' THEN '@' ELSE '#' END),11,' ')||']' ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN to_char(evcnt, '99999999') ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt_s = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat((evcnt / case (d2-d1) when 0 then &snapper_sleep else (d2-d1)* 86400 end ), 'STAT' ), 10, ' ') ELSE ' ' END END||', ' + || CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ') ELSE ' ' END END + ); + + end; + + /*--------------------------------------------------- + -- function for converting large numbers to human-readable format + ---------------------------------------------------*/ + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, -- for KiB/MiB formatting use + p_grouplen in number default 3 -- p_base=2 and p_grouplen=10 + ) + return varchar2 + is + begin + if p_num = 0 then return '0'; end if; + + if p_stype in ('WAIT','TIME') then + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then 'us' + when 1 then 'us' + when p_grouplen*1 then 'ms' + when p_grouplen*2 then 's' + when p_grouplen*3 then 'ks' + when p_grouplen*4 then 'Ms' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us' + end; + + else + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then '' + when 1 then '' + when p_grouplen*1 then 'k' + when p_grouplen*2 then 'M' + when p_grouplen*3 then 'G' + when p_grouplen*4 then 'T' + when p_grouplen*5 then 'P' + when p_grouplen*6 then 'E' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ) + end; + + end if; + + end; -- tptformat + + /*--------------------------------------------------- + -- simple function for parsing arguments from parameter string + ---------------------------------------------------*/ + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) return varchar2 + is + ret varchar(1000) := NULL; + begin + + -- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' ); + -- dbms_output.put('p_extract = ['||p_extract||'] ' ); + + if lower(p_parvalues) like lower(p_extract)||'%' + or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then + + ret := + nvl ( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract), + case + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) + when 0 then length(p_parvalues) + else + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) - 1 + end + ) + , chr(0) -- in case parameter was specified but with no value + ); + + else + ret := null; -- no parameter found + end if; + + -- dbms_output.put_line('ret = ['||replace(ret,chr(0),'\0')||']'); + + return ret; + + end; -- getopt + + /*--------------------------------------------------- + -- proc for getting session list with username, osuser, machine etc + ---------------------------------------------------*/ + procedure get_sessions is + tmp_sessions sestab; + begin + + + select + &_IF_ORA9 s.SADDR + &_IF_ORA9 , s.SID + &_IF_ORA9 , s.SERIAL# + &_IF_ORA9 , s.AUDSID + &_IF_ORA9 , s.PADDR + &_IF_ORA9 , s.USER# + &_IF_ORA9 , s.USERNAME + &_IF_ORA9 , s.COMMAND + &_IF_ORA9 , s.OWNERID + &_IF_ORA9 , s.TADDR + &_IF_ORA9 , s.LOCKWAIT + &_IF_ORA9 , s.STATUS + &_IF_ORA9 , s.SERVER + &_IF_ORA9 , s.SCHEMA# + &_IF_ORA9 , s.SCHEMANAME + &_IF_ORA9 , s.OSUSER + &_IF_ORA9 , s.PROCESS + &_IF_ORA9 , s.MACHINE + &_IF_ORA9 , s.TERMINAL + &_IF_ORA9 , CASE WHEN s.PROGRAM = 'ORACLE.EXE' THEN '('||bg.name||')' ELSE s.program END program + &_IF_ORA9 , s.TYPE + &_IF_ORA9 , s.SQL_ADDRESS + &_IF_ORA9 , s.SQL_HASH_VALUE + &_IF_ORA9 , s.PREV_SQL_ADDR + &_IF_ORA9 , s.PREV_HASH_VALUE + &_IF_ORA9 , s.MODULE + &_IF_ORA9 , s.MODULE_HASH + &_IF_ORA9 , s.ACTION + &_IF_ORA9 , s.ACTION_HASH + &_IF_ORA9 , s.CLIENT_INFO + &_IF_ORA9 , s.FIXED_TABLE_SEQUENCE + &_IF_ORA9 , s.ROW_WAIT_OBJ# + &_IF_ORA9 , s.ROW_WAIT_FILE# + &_IF_ORA9 , s.ROW_WAIT_BLOCK# + &_IF_ORA9 , s.ROW_WAIT_ROW# + &_IF_ORA9 , s.LOGON_TIME + &_IF_ORA9 , s.LAST_CALL_ET + &_IF_ORA9 , s.PDML_ENABLED + &_IF_ORA9 , s.FAILOVER_TYPE + &_IF_ORA9 , s.FAILOVER_METHOD + &_IF_ORA9 , s.FAILED_OVER + &_IF_ORA9 , s.RESOURCE_CONSUMER_GROUP + &_IF_ORA9 , s.PDML_STATUS + &_IF_ORA9 , s.PDDL_STATUS + &_IF_ORA9 , s.PQ_STATUS + &_IF_ORA9 , s.CURRENT_QUEUE_DURATION + &_IF_ORA9 , s.CLIENT_IDENTIFIER + &_IF_ORA9 , sw.sid SID2 + &_IF_ORA9 , sw.SEQ# + &_IF_ORA9 , sw.EVENT + &_IF_ORA9 , sw.P1TEXT + &_IF_ORA9 , sw.P1 + &_IF_ORA9 , sw.P1RAW + &_IF_ORA9 , sw.P2TEXT + &_IF_ORA9 , sw.P2 + &_IF_ORA9 , sw.P2RAW + &_IF_ORA9 , sw.P3TEXT + &_IF_ORA9 , sw.P3 + &_IF_ORA9 , sw.P3RAW + &_IF_ORA9 , sw.WAIT_TIME + &_IF_ORA9 , sw.SECONDS_IN_WAIT + &_IF_ORA9 , sw.STATE + &_IF_ORA10_OR_HIGHER * + bulk collect into + tmp_sessions + from +&_IF_ORA9 v$session s, v$session_wait sw, v$bgprocess bg, v$process p +&_IF_ORA10_OR_HIGHER v$session + where +&_IF_ORA9 s.sid in (&snapper_sid) and s.sid=sw.sid and p.addr = s.paddr and s.paddr = bg.paddr(+); +&_IF_ORA10_OR_HIGHER sid in (&snapper_sid); + + g_sessions := g_empty_sessions; + + for i in 1..tmp_sessions.count loop + g_sessions(tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + end; -- get_sessions + + /*--------------------------------------------------- + -- function for getting session list with username, osuser, machine etc + -- this func does not update the g_sessions global array but returns session info as return value + ---------------------------------------------------*/ + function get_sessions return sestab is + tmp_sessions sestab; + l_return_sessions sestab; + begin + + select +&_IF_ORA9 s.*,sw.* +&_IF_ORA10_OR_HIGHER * + bulk collect into + tmp_sessions + from +&_IF_ORA9 v$session s, v$session_wait sw +&_IF_ORA10_OR_HIGHER v$session + where +&_IF_ORA9 s.sid in (&snapper_sid) and s.sid=sw.sid; +&_IF_ORA10_OR_HIGHER sid in (&snapper_sid); + + for i in 1..tmp_sessions.count loop + --output('get_sessions i='||i||' sid='||tmp_sessions(i).sid); + l_return_sessions(tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + return l_return_sessions; + + end; -- get_sessions + + + + /*--------------------------------------------------- + -- functions for extracting and converting v$session + -- records to varchar2 + ---------------------------------------------------*/ + function sitem(p in varchar2) return varchar2 as + begin + return '<'||translate(p, '<>', '__')||'>'; + end; -- sitem varchar2 + + function sitem(p in number) return varchar2 as + begin + return '<'||to_char(p)||'>'; + end; -- sitem number + + function sitem(p in date) return varchar2 as + begin + return '<'||to_char(p, 'YYYY-MM-DD HH24:MI:SS')||'>'; + end; -- sitem date + + function sitem_raw(p in raw) return varchar2 as + begin + return '<'||upper(rawtohex(p))||'>'; + end; -- sitem_raw + + + /*--------------------------------------------------- + -- proc for resetting the snapper ash array + ---------------------------------------------------*/ + procedure reset_ash is + begin + g_ash_samples_taken := 0; + -- clear g_ash + g_ash := new sys.dbms_debug_vc2coll(); + end; -- reset_ash + + + /*--------------------------------------------------- + -- proc for getting ash style samples from v$session + -- (and v$session_wait in 9i) + ---------------------------------------------------*/ + procedure extract_ash is + ash_i number; +&_IF_ORA10_OR_HIGHER s v$session%rowtype; +&_IF_ORA9 s sestab_rec; + + + begin + -- keep track how many times we sampled v$session so we could calculate averages later on + g_ash_samples_taken := g_ash_samples_taken + 1; + --output('g_sessions.count='||g_sessions.count); + ash_i := g_sessions.first; + + while ash_i is not null loop + + s := g_sessions(ash_i); + -- only extract active sessions, TODO: get rid of wait_class for 9i compatibility + if -- active, on cpu + (s.status = 'ACTIVE' and s.state != 'WAITING' and s.sid != g_mysid) + or -- active, waiting for non-idle wait +&_IF_ORA10_OR_HIGHER (s.status = 'ACTIVE' and s.state = 'WAITING' and s.wait_class != 'Idle' and s.sid != g_mysid) +&_IF_ORA9 (s.status = 'ACTIVE' and s.state = 'WAITING' +&_IF_ORA9 -- Use a fixed list of idle wait events on 9i, since wait_class is not available +&_IF_ORA9 and lower(s.event) not in ( +&_IF_ORA9 'smon timer' -- idle events from 9i +&_IF_ORA9 , 'pmon timer' +&_IF_ORA9 , 'rdbms ipc message' +&_IF_ORA9 , 'null event' +&_IF_ORA9 , 'parallel query dequeue' +&_IF_ORA9 , 'pipe get' +&_IF_ORA9 , 'client message' +&_IF_ORA9 , 'sql*net message from client' +&_IF_ORA9 , 'dispatcher timer' +&_IF_ORA9 , 'virtual circuit status' +&_IF_ORA9 , 'lock manager wait for remote message' +&_IF_ORA9 , 'px idle wait' +&_IF_ORA9 , 'px deq: execution msg' +&_IF_ORA9 , 'px deq: table q normal' +&_IF_ORA9 , 'wakeup time manager' +&_IF_ORA9 , 'slave wait' +&_IF_ORA9 , 'i/o slave wait' +&_IF_ORA9 , 'jobq slave wait' +&_IF_ORA9 , 'null event' +&_IF_ORA9 , 'gcs remote message' +&_IF_ORA9 , 'gcs for action' +&_IF_ORA9 , 'ges remote message' +&_IF_ORA9 , 'queue messages' +&_IF_ORA9 , 'pmon timer' -- from 11.2.0.2 v$event_name +&_IF_ORA9 , 'vktm logical idle wait' +&_IF_ORA9 , 'vktm init wait for gsga' +&_IF_ORA9 , 'iorm scheduler slave idle wait' +&_IF_ORA9 , 'rdbms ipc message' +&_IF_ORA9 , 'i/o slave wait' +&_IF_ORA9 , 'vkrm idle' +&_IF_ORA9 , 'wait for unread message on broadcast channel' +&_IF_ORA9 , 'wait for unread message on multiple broadcast channels' +&_IF_ORA9 , 'class slave wait' +&_IF_ORA9 , 'ksv master wait' +&_IF_ORA9 , 'ping' +&_IF_ORA9 , 'watchdog main loop' +&_IF_ORA9 , 'diag idle wait' +&_IF_ORA9 , 'ges remote message' +&_IF_ORA9 , 'gcs remote message' +&_IF_ORA9 , 'heartbeat monitor sleep' +&_IF_ORA9 , 'gcr sleep' +&_IF_ORA9 , 'sga: mman sleep for component shrink' +&_IF_ORA9 , 'mrp redo arrival' +&_IF_ORA9 , 'lns async archive log' +&_IF_ORA9 , 'lns async dest activation' +&_IF_ORA9 , 'lns async end of log' +&_IF_ORA9 , 'simulated log write delay' +&_IF_ORA9 , 'lgwr real time apply sync' +&_IF_ORA9 , 'parallel recovery slave idle wait' +&_IF_ORA9 , 'logminer builder: idle' +&_IF_ORA9 , 'logminer builder: branch' +&_IF_ORA9 , 'logminer preparer: idle' +&_IF_ORA9 , 'logminer reader: log (idle)' +&_IF_ORA9 , 'logminer reader: redo (idle)' +&_IF_ORA9 , 'logminer client: transaction' +&_IF_ORA9 , 'logminer: other' +&_IF_ORA9 , 'logminer: activate' +&_IF_ORA9 , 'logminer: reset' +&_IF_ORA9 , 'logminer: find session' +&_IF_ORA9 , 'logminer: internal' +&_IF_ORA9 , 'logical standby apply delay' +&_IF_ORA9 , 'parallel recovery coordinator waits for slave cleanup' +&_IF_ORA9 , 'parallel recovery control message reply' +&_IF_ORA9 , 'parallel recovery slave next change' +&_IF_ORA9 , 'px deq: txn recovery start' +&_IF_ORA9 , 'px deq: txn recovery reply' +&_IF_ORA9 , 'fbar timer' +&_IF_ORA9 , 'smon timer' +&_IF_ORA9 , 'px deq: metadata update' +&_IF_ORA9 , 'space manager: slave idle wait' +&_IF_ORA9 , 'px deq: index merge reply' +&_IF_ORA9 , 'px deq: index merge execute' +&_IF_ORA9 , 'px deq: index merge close' +&_IF_ORA9 , 'px deq: kdcph_mai' +&_IF_ORA9 , 'px deq: kdcphc_ack' +&_IF_ORA9 , 'shared server idle wait' +&_IF_ORA9 , 'dispatcher timer' +&_IF_ORA9 , 'cmon timer' +&_IF_ORA9 , 'pool server timer' +&_IF_ORA9 , 'jox jit process sleep' +&_IF_ORA9 , 'jobq slave wait' +&_IF_ORA9 , 'pipe get' +&_IF_ORA9 , 'px deque wait' +&_IF_ORA9 , 'px idle wait' +&_IF_ORA9 , 'px deq: join ack' +&_IF_ORA9 , 'px deq credit: need buffer' +&_IF_ORA9 , 'px deq credit: send blkd' +&_IF_ORA9 , 'px deq: msg fragment' +&_IF_ORA9 , 'px deq: parse reply' +&_IF_ORA9 , 'px deq: execute reply' +&_IF_ORA9 , 'px deq: execution msg' +&_IF_ORA9 , 'px deq: table q normal' +&_IF_ORA9 , 'px deq: table q sample' +&_IF_ORA9 , 'streams fetch slave: waiting for txns' +&_IF_ORA9 , 'streams: waiting for messages' +&_IF_ORA9 , 'streams capture: waiting for archive log' +&_IF_ORA9 , 'single-task message' +&_IF_ORA9 , 'sql*net message from client' +&_IF_ORA9 , 'sql*net vector message from client' +&_IF_ORA9 , 'sql*net vector message from dblink' +&_IF_ORA9 , 'pl/sql lock timer' +&_IF_ORA9 , 'streams aq: emn coordinator idle wait' +&_IF_ORA9 , 'emon slave idle wait' +&_IF_ORA9 , 'streams aq: waiting for messages in the queue' +&_IF_ORA9 , 'streams aq: waiting for time management or cleanup tasks' +&_IF_ORA9 , 'streams aq: delete acknowledged messages' +&_IF_ORA9 , 'streams aq: deallocate messages from streams pool' +&_IF_ORA9 , 'streams aq: qmn coordinator idle wait' +&_IF_ORA9 , 'streams aq: qmn slave idle wait' +&_IF_ORA9 , 'streams aq: rac qmn coordinator idle wait' +&_IF_ORA9 , 'hs message to agent' +&_IF_ORA9 , 'asm background timer' +&_IF_ORA9 , 'auto-sqltune: wait graph update' +&_IF_ORA9 , 'wcr: replay client notify' +&_IF_ORA9 , 'wcr: replay clock' +&_IF_ORA9 , 'wcr: replay paused' +&_IF_ORA9 , 'js external job' +&_IF_ORA9 , 'cell worker idle') +&_IF_ORA9 and s.sid != g_mysid) + then + --output('extract_ash: i='||i||' sid='||s.sid||' hv='||s.sql_hash_value||' sqlid='||s.sql_id); + + -- if not actually waiting for anything, clear the past wait event details + if s.state != 'WAITING' then + s.state:='ON CPU'; + s.event:='ON CPU'; +&_IF_ORA10_OR_HIGHER s.wait_class:='ON CPU'; --TODO: What do we need to do for 9i here? + s.p1:=NULL; + s.p2:=NULL; + s.p3:=NULL; + end if; + + g_ash.extend; + + -- max length 1000 bytes (due to dbms_debug_vc2coll) + g_ash(g_ash.count) := substr( + sitem(s.sid) -- 1 + ||sitem(s.username) -- 2 -- 30 bytes + ||sitem(s.machine) -- 3 -- 64 bytes + ||sitem(s.terminal) -- 4 -- 30 bytes + ||sitem(s.program) -- 5 -- 48 bytes + ||sitem(s.event) -- 6 -- 64 bytes + &_IF_ORA10_OR_HIGHER ||sitem(s.wait_class) -- 7 -- 64 bytes, 10g+ + &_IF_ORA9 ||sitem('N/A') -- 7 + ||sitem(s.state) -- 8 + ||sitem(s.p1) -- 9 + ||sitem(s.p2) -- 10 + ||sitem(s.p3) -- 11 + ||sitem(s.row_wait_obj#) -- 12 + ||sitem(s.row_wait_file#) -- 13 + ||sitem(s.row_wait_block#) -- 14 + ||sitem(s.row_wait_row#) -- 15 + &_IF_ORA10_OR_HIGHER ||sitem(s.blocking_session_status) -- 16 -- 10g+ + &_IF_ORA9 ||sitem('N/A') -- 16 -- 10g+ -- 16 + &_NO_BLK_INST ||sitem('N/A') -- 17 -- 10gR2+ + &_YES_BLK_INST ||sitem(s.blocking_instance) -- 17 -- 10gR2+ + &_IF_ORA10_OR_HIGHER ||sitem(s.blocking_session) -- 18 -- 10g+ + &_IF_ORA9 ||sitem('N/A') -- 18 -- 10g+ + ||sitem(s.sql_hash_value) -- 19 + &_IF_ORA10_OR_HIGHER ||sitem(s.sql_id) -- 20 -- 10g+ + &_IF_ORA9 ||sitem(to_char(s.sql_hash_value)) -- 20 -- 9i, let's just put hash_value into sql_id + &_IF_ORA10_OR_HIGHER ||sitem(s.sql_child_number) -- 21 -- 10g+ + &_IF_ORA9 ||sitem('N/A') -- 21 -- 10g+ + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 22 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 23 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 24 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 25 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_object_id) -- 22 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_subprogram_id) -- 23 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_object_id) -- 24 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_subprogram_id) -- 25 + ||sitem(s.module) -- 26 -- 48 bytes + ||sitem(s.action) -- 27 -- 32 bytes + ||sitem(s.client_identifier) -- 28 -- 64 bytes + &_IF_ORA10_OR_HIGHER ||sitem(s.service_name) -- 29 -- 64 bytes, 10g+ + &_IF_ORA9 ||sitem('N/A') -- 29 + , 1, 1000); + + end if; -- sample is of an active session + + ash_i := g_sessions.next(ash_i); + + end loop; + + exception + when no_data_found then output('error in extract_ash(): no_data_found for item '||i); + end; -- extract_ash + + + /*--------------------------------------------------- + -- proc for querying performance data into collections + ---------------------------------------------------*/ + procedure snap( p_snapdate in out date, p_stats in out stab ) is + + lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options', 'sinclude=' )), '%'); + lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options', 'linclude=' )), '%'); + lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options', 'tinclude=' )), '%'); + lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options', 'winclude=' )), '%'); + + + begin + + p_snapdate := sysdate; + + select * + bulk collect into p_stats + from ( + select 'STAT' stype, sid, statistic# - pls_adjust statistic#, value, null event_count + from v$sesstat + where sid in (&snapper_sid) + and (lv_gather like '%s%' or lv_gather like '%a%') + and statistic# in (select /*+ no_unnest */ statistic# from v$statname + where lower(name) like '%'||lv_include_stat||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (name, lv_include_stat, 'i') + ) + -- + union all + select + 'WAIT', sw.sid, + en.event# + (select count(*) from v$statname) + 1 - pls_adjust, + nvl(se.time_waited_micro,0) + ( decode(se.event||sw.state, sw.event||'WAITING', sw.seconds_in_wait, 0) * 1000000 ) value, total_waits event_count + from v$session_wait sw, v$session_event se, v$event_name en + where sw.sid = se.sid + and se.event = en.name + and se.sid in (&snapper_sid) + and (lv_gather like '%w%' or lv_gather like '%a%') + and event# in (select event# from v$event_name + where lower(name) like '%'||lv_include_wait||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (name, lv_include_wait, 'i') + ) + -- + &_IF_ORA10_OR_HIGHER union all + &_IF_ORA10_OR_HIGHER select 'TIME' stype, sid, stat_id - pls_adjust statistic#, value, null event_count + &_IF_ORA10_OR_HIGHER from v$sess_time_model + &_IF_ORA10_OR_HIGHER where sid in (&snapper_sid) + &_IF_ORA10_OR_HIGHER and (lv_gather like '%t%' or lv_gather like '%a%') + &_IF_ORA10_OR_HIGHER and stat_id in (select stat_id from v$sys_time_model + &_IF_ORA10_OR_HIGHER where lower(stat_name) like '%'||lv_include_time||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (stat_name, lv_include_time, 'i') + &_IF_ORA10_OR_HIGHER ) + -- + union all + select 'LATG', -1 sid, + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + l.gets + l.immediate_gets value, null event_count + from v$latch l + where + (lv_gather like '%l%' or lv_gather like '%a%') + and latch# in (select latch# from v$latchname + where lower(name) like '%'||lv_include_latch||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (name, lv_include_latch, 'i') + ) + -- + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 union all + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 select 'BUFG', -1 sid, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.why0+s.why1+s.why2 value, null event_count + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 from x$kcbsw s, x$kcbwh w + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 where + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx = w.indx + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and s.why0+s.why1+s.why2 > 0 + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and (lv_gather like '%b%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER union all + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER select 'BUFG', -1 sid, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER sw.indx + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.why0+why.why1+why.why2+sw.other_wait value, null event_count + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER from + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbuwhy why, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbwh dsc, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbsw sw + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER where + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.indx = dsc.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.why0 + why.why1 + why.why2 + sw.other_wait > 0 + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER -- deliberate cartesian join + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', -1 sid, + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + e.total_req# value, null event_count + from v$enqueue_stat e + where + (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_stats + order by sid, stype, statistic#; + end snap; + + + /*--------------------------------------------------- + -- proc for dumping ASH data out in grouped + -- and ordered fashion + ---------------------------------------------------*/ + procedure out_ash( p_ash_columns in varchar2, p_topn in number := 10 ) as + + -- whether to print given column or not + p_sid number := 0; + p_username number := 0; + p_machine number := 0; + p_terminal number := 0; + p_program number := 0; + p_event number := 0; + p_wait_class number := 0; + p_state number := 0; + p_p1 number := 0; + p_p2 number := 0; + p_p3 number := 0; + p_row_wait_obj# number := 0; + p_row_wait_file# number := 0; + p_row_wait_block# number := 0; + p_row_wait_row# number := 0; + p_blocking_session_status number := 0; + p_blocking_instance number := 0; + p_blocking_session number := 0; + p_sql_hash_value number := 0; + p_sql_id number := 0; + p_sql_child_number number := 0; + p_plsql_entry_object_id number := 0; + p_plsql_entry_subprogram_id number := 0; + p_plsql_object_id number := 0; + p_plsql_subprogram_id number := 0; + p_module number := 0; + p_action number := 0; + p_client_identifier number := 0; + p_service_name number := 0; + + -- temporary variables for holding session details (for later formatting) + o_sid varchar2(100); + o_username varchar2(100); + o_machine varchar2(100); + o_terminal varchar2(100); + o_program varchar2(100); + o_event varchar2(100); + o_wait_class varchar2(100); + o_state varchar2(100); + o_p1 varchar2(100); + o_p2 varchar2(100); + o_p3 varchar2(100); + o_row_wait_obj# varchar2(100); + o_row_wait_file# varchar2(100); + o_row_wait_block# varchar2(100); + o_row_wait_row# varchar2(100); + o_blocking_session_status varchar2(100); + o_blocking_instance varchar2(100); + o_blocking_session varchar2(100); + o_sql_hash_value varchar2(100); + o_sql_id varchar2(100); + o_sql_child_number varchar2(100); + o_plsql_entry_object_id varchar2(100); + o_plsql_entry_subprogram_id varchar2(100); + o_plsql_object_id varchar2(100); + o_plsql_subprogram_id varchar2(100); + o_module varchar2(100); + o_action varchar2(100); + o_client_identifier varchar2(100); + o_service_name varchar2(100); + + -- helper local vars + l_ash_grouping number := 0; + l_output_line varchar2(4000); + l_ash_header_line varchar2(4000); + + begin + + -- bail out if no ASH samples recorded + if g_ash.count = 0 then + output(' '); + return; + end if; + + + l_ash_header_line := 'Active%'; + + -- ash,ash1,ash2,ash3 parameter column group tokenizer + for s in ( +-- ORA9 SQL*Plus returns only a single row with CONNECT BY LEVEL; An additonal outer SELECT * from (...) fixes this +&_IF_ORA9 select * from ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 +&_IF_ORA9 ) + ORDER BY + LEVEL ASC + ) loop + + + case s.token + -- actual column names in v$session + when 'sid' then l_ash_grouping := l_ash_grouping + c_sid ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('SID' , w_sid , ' '); + when 'username' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'machine' then l_ash_grouping := l_ash_grouping + c_machine ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MACHINE' , w_machine , ' '); + when 'terminal' then l_ash_grouping := l_ash_grouping + c_terminal ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('TERMINAL' , w_terminal , ' '); + when 'program' then l_ash_grouping := l_ash_grouping + c_program ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PROGRAM' , w_program , ' '); + when 'event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_class' then l_ash_grouping := l_ash_grouping + c_wait_class ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('WAIT_CLASS' , w_wait_class , ' '); + when 'state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + when 'p1' then l_ash_grouping := l_ash_grouping + c_p1 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P1' , w_p1 , ' '); + when 'p2' then l_ash_grouping := l_ash_grouping + c_p2 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P2' , w_p2 , ' '); + when 'p3' then l_ash_grouping := l_ash_grouping + c_p3 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P3' , w_p3 , ' '); + when 'row_wait_obj#' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'row_wait_file#' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'row_wait_block#' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row_wait_row#' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'blocking_session_status' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'blocking_instance' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'blocking_session' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql_hash_value' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sql_id' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'sql_child_number' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_entry_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_entry_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'module' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'action' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'client_identifier' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service_name' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + -- aliases for convenience (only either real name or alias should be used together at the same time) , ' '); + when 'user' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'obj' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'file' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'block' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'bss' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'bsi' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'bs' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sqlid' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'child' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_eoid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_esubpid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_oid' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subpid' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'mod' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'act' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'cid' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + when 'wait_event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + else + null; + -- raise_application_error(-20000, 'Invalid ASH column name'); + end case; -- case s.token + + end loop; -- tokenizer + + output(' '); + output(lpad('-',length(l_ash_header_line),'-')); + output(l_ash_header_line); + output(lpad('-',length(l_ash_header_line),'-')); + + -- this is needed for "easy" sorting and group by ops (without any custom stored object types!) + for i in ( + with raw_records as ( + select column_value rec from table(cast(g_ash as sys.dbms_debug_vc2coll)) + ), + ash_records as ( + select + substr(r.rec, instr(r.rec, '<', 1, 1)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 1)+1), '>')-1) sid + , substr(r.rec, instr(r.rec, '<', 1, 2)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 2)+1), '>')-1) username + , substr(r.rec, instr(r.rec, '<', 1, 3)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 3)+1), '>')-1) machine + , substr(r.rec, instr(r.rec, '<', 1, 4)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 4)+1), '>')-1) terminal + , substr(r.rec, instr(r.rec, '<', 1, 5)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 5)+1), '>')-1) program + , substr(r.rec, instr(r.rec, '<', 1, 6)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 6)+1), '>')-1) event + , substr(r.rec, instr(r.rec, '<', 1, 7)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 7)+1), '>')-1) wait_class + , substr(r.rec, instr(r.rec, '<', 1, 8)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 8)+1), '>')-1) state + , substr(r.rec, instr(r.rec, '<', 1, 9)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 9)+1), '>')-1) p1 + , substr(r.rec, instr(r.rec, '<', 1, 10)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 10)+1), '>')-1) p2 + , substr(r.rec, instr(r.rec, '<', 1, 11)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 11)+1), '>')-1) p3 + , substr(r.rec, instr(r.rec, '<', 1, 12)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 12)+1), '>')-1) row_wait_obj# + , substr(r.rec, instr(r.rec, '<', 1, 13)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 13)+1), '>')-1) row_wait_file# + , substr(r.rec, instr(r.rec, '<', 1, 14)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 14)+1), '>')-1) row_wait_block# + , substr(r.rec, instr(r.rec, '<', 1, 15)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 15)+1), '>')-1) row_wait_row# + , substr(r.rec, instr(r.rec, '<', 1, 16)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 16)+1), '>')-1) blocking_session_status + , substr(r.rec, instr(r.rec, '<', 1, 17)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 17)+1), '>')-1) blocking_instance + , substr(r.rec, instr(r.rec, '<', 1, 18)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 18)+1), '>')-1) blocking_session + , substr(r.rec, instr(r.rec, '<', 1, 19)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 19)+1), '>')-1) sql_hash_value + , substr(r.rec, instr(r.rec, '<', 1, 20)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 20)+1), '>')-1) sql_id + , substr(r.rec, instr(r.rec, '<', 1, 21)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 21)+1), '>')-1) sql_child_number + , substr(r.rec, instr(r.rec, '<', 1, 22)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 22)+1), '>')-1) plsql_entry_object_id + , substr(r.rec, instr(r.rec, '<', 1, 23)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 23)+1), '>')-1) plsql_entry_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 24)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 24)+1), '>')-1) plsql_object_id + , substr(r.rec, instr(r.rec, '<', 1, 25)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 25)+1), '>')-1) plsql_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 26)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 26)+1), '>')-1) module + , substr(r.rec, instr(r.rec, '<', 1, 27)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 27)+1), '>')-1) action + , substr(r.rec, instr(r.rec, '<', 1, 28)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 28)+1), '>')-1) client_identifier + , substr(r.rec, instr(r.rec, '<', 1, 29)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 29)+1), '>')-1) service_name + from + raw_records r + ) + select * from ( + select + decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) as sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) as username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) as machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) as terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) as program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) as event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) as wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) as state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) as p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) as p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) as p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) as row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) as row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) as row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) as row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) as blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) as blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) as blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) as sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) as sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) as sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) as plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) as plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) as plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) as plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) as module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) as action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) as client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) as service_name + , count(*)/g_ash_samples_taken average_active_samples + from + ash_records a + group by + decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) -- sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) -- username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) -- machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) -- terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) -- program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) -- event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) -- wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) -- state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) -- p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) -- p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) -- p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) -- row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) -- row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) -- row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) -- row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) -- blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) -- blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) -- blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) -- sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) -- sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) -- sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) -- plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) -- plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) -- plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) -- plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) -- module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) -- action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) -- client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) -- service_name + order by + count(*)/g_ash_samples_taken desc + ) + where rownum <= p_topn + ) loop + + l_output_line := ''; + + o_sid := CASE WHEN i.sid = chr(0) THEN null ELSE nvl(i.sid , ' ') END; + o_username := CASE WHEN i.username = chr(0) THEN null ELSE nvl(i.username , ' ') END; + o_machine := CASE WHEN i.machine = chr(0) THEN null ELSE nvl(i.machine , ' ') END; + o_terminal := CASE WHEN i.terminal = chr(0) THEN null ELSE nvl(i.terminal , ' ') END; + o_program := CASE WHEN i.program = chr(0) THEN null ELSE nvl(i.program , ' ') END; + o_event := CASE WHEN i.event = chr(0) THEN null ELSE nvl(i.event , ' ') END; + o_wait_class := CASE WHEN i.wait_class = chr(0) THEN null ELSE nvl(i.wait_class , ' ') END; + o_state := CASE WHEN i.state = chr(0) THEN null ELSE nvl(i.state , ' ') END; + o_p1 := CASE WHEN i.p1 = chr(0) THEN null ELSE nvl(i.p1 , ' ') END; + o_p2 := CASE WHEN i.p2 = chr(0) THEN null ELSE nvl(i.p2 , ' ') END; + o_p3 := CASE WHEN i.p3 = chr(0) THEN null ELSE nvl(i.p3 , ' ') END; + o_row_wait_obj# := CASE WHEN i.row_wait_obj# = chr(0) THEN null ELSE nvl(i.row_wait_obj# , ' ') END; + o_row_wait_file# := CASE WHEN i.row_wait_file# = chr(0) THEN null ELSE nvl(i.row_wait_file# , ' ') END; + o_row_wait_block# := CASE WHEN i.row_wait_block# = chr(0) THEN null ELSE nvl(i.row_wait_block# , ' ') END; + o_row_wait_row# := CASE WHEN i.row_wait_row# = chr(0) THEN null ELSE nvl(i.row_wait_row# , ' ') END; + o_blocking_session_status := CASE WHEN i.blocking_session_status = chr(0) THEN null ELSE nvl(i.blocking_session_status , ' ') END; + o_blocking_instance := CASE WHEN i.blocking_instance = chr(0) THEN null ELSE nvl(i.blocking_instance , ' ') END; + o_blocking_session := CASE WHEN i.blocking_session = chr(0) THEN null ELSE nvl(i.blocking_session , ' ') END; + o_sql_hash_value := CASE WHEN i.sql_hash_value = chr(0) THEN null ELSE nvl(i.sql_hash_value , ' ') END; + o_sql_id := CASE WHEN i.sql_id = chr(0) THEN null ELSE nvl(i.sql_id , ' ') END; + o_sql_child_number := CASE WHEN i.sql_child_number = chr(0) THEN null ELSE nvl(i.sql_child_number , ' ') END; + o_plsql_entry_object_id := CASE WHEN i.plsql_entry_object_id = chr(0) THEN null ELSE nvl(i.plsql_entry_object_id , ' ') END; + o_plsql_entry_subprogram_id := CASE WHEN i.plsql_entry_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_entry_subprogram_id , ' ') END; + o_plsql_object_id := CASE WHEN i.plsql_object_id = chr(0) THEN null ELSE nvl(i.plsql_object_id , ' ') END; + o_plsql_subprogram_id := CASE WHEN i.plsql_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_subprogram_id , ' ') END; + o_module := CASE WHEN i.module = chr(0) THEN null ELSE nvl(i.module , ' ') END; + o_action := CASE WHEN i.action = chr(0) THEN null ELSE nvl(i.action , ' ') END; + o_client_identifier := CASE WHEN i.client_identifier = chr(0) THEN null ELSE nvl(i.client_identifier , ' ') END; + o_service_name := CASE WHEN i.service_name = chr(0) THEN null ELSE nvl(i.service_name , ' ') END; + + + -- print the activity % as the first column + l_output_line := lpad(to_char(round(i.average_active_samples*100))||'%', w_activity_pct, ' '); + + -- loop through ash columns to find what to print and in which order + for s in ( +-- ORA9 SQL*Plus returns only a single row with CONNECT BY LEVEL; An additonal outer SELECT * from (...) fixes this +&_IF_ORA9 select * from ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 +&_IF_ORA9 ) + ORDER BY + LEVEL ASC + ) loop + l_output_line := l_output_line || ' | ' || + case s.token + -- actual column names in v$session + when 'sid' then lpad(o_sid , w_sid , ' ') + when 'username' then rpad(o_username , w_username , ' ') + when 'machine' then rpad(o_machine , w_machine , ' ') + when 'terminal' then rpad(o_terminal , w_terminal , ' ') + when 'program' then rpad(o_program , w_program , ' ') + when 'event' then rpad(o_event , w_event , ' ') + when 'wait_class' then rpad(o_wait_class , w_wait_class , ' ') + when 'state' then rpad(o_state , w_state , ' ') + when 'p1' then rpad(o_p1 , w_p1 , ' ') + when 'p2' then rpad(o_p2 , w_p2 , ' ') + when 'p3' then rpad(o_p3 , w_p3 , ' ') + when 'row_wait_obj#' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'row_wait_file#' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'row_wait_block#' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row_wait_row#' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'blocking_session_status' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'blocking_instance' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'blocking_session' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql_hash_value' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sql_id' then rpad(o_sql_id , w_sql_id , ' ') + when 'sql_child_number' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_entry_object_id' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_entry_subprogram_id' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_object_id' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subprogram_id' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'module' then rpad(o_module , w_module , ' ') + when 'action' then rpad(o_action , w_action , ' ') + when 'client_identifier' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service_name' then rpad(o_service_name , w_service_name , ' ') + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then rpad(o_username , w_username , ' ') + when 'obj' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'file' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'block' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'bss' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'bsi' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'bs' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sqlid' then rpad(o_sql_id , w_sql_id , ' ') + when 'child' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_eoid' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_esubpid' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_oid' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subpid' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'mod' then rpad(o_module , w_module , ' ') + when 'act' then rpad(o_action , w_action , ' ') + when 'cid' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service' then rpad(o_service_name , w_service_name , ' ') + when 'wait_event' then rpad(o_event , w_event , ' ') + when 'wait_state' then rpad(o_state , w_state , ' ') + else + '' + end; -- case s.token + + end loop; -- ash parameter tokenizer + + output(l_output_line); + + end loop; -- grouped ash samples + + end out_ash; + + +-- and it begins!!! +begin + + -- get snappers own sid into g_mysid + select sid into g_mysid from v$mystat where rownum = 1; + + pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize); + --output ( 'Pagesize='||pagesize ); + + lv_ash := getopt('&snapper_options', 'ash'); + lv_stats := getopt('&snapper_options', 'stat'); + + if lv_ash is not null then gather_ash := 1; end if; + if lv_stats is not null then gather_stats := 1; end if; + + --output('all='||case when getopt('&snapper_options', 'all') = chr(0) then 'chr(0)' when getopt('&snapper_options', 'all') is null then 'null' else (getopt('&snapper_options','all')) end); + -- some additional default value logic + if getopt('&snapper_options', 'all') is not null then + --output('setting stats to all due to option = all'); + gather_stats := 1; + gather_ash := 1; + else + if (lv_ash is null and lv_stats is null) then + gather_stats := 0; + gather_ash := 1; + end if; + end if; + + -- determine which performance counters and stats to collect + lv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + when 'all' then 'stw' + else nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + end; + + --lv_gather:=getopt ('&snapper_options', 'gather='); + --output('lv_gather='||lv_gather); + + + + if pagesize > 0 then + output(' '); + output('-- Session Snapper v3.64 by Tanel Poder ( http://blog.tanelpoder.com )'); + output(' '); + end if; + + -- initialize statistic and event name array + -- fetch statistic names with their adjusted IDs + select * + bulk collect into sn_tmp + from ( + select 'STAT' stype, statistic# - pls_adjust statistic#, name + from v$statname + where (lv_gather like '%s%' or lv_gather like '%a%') + -- + union all + select 'WAIT', + event# + (select count(*) from v$statname) + 1 - pls_adjust, name + from v$event_name + where (lv_gather like '%w%' or lv_gather like '%a%') + -- + &_IF_ORA10_OR_HIGHER union all + &_IF_ORA10_OR_HIGHER select 'TIME' stype, stat_id - pls_adjust statistic#, stat_name name + &_IF_ORA10_OR_HIGHER from v$sys_time_model + &_IF_ORA10_OR_HIGHER where (lv_gather like '%t%' or lv_gather like '%a%') + -- + union all + select 'LATG', + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + name + from v$latch l + where (lv_gather like '%l%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE union all + &_IF_X_ACCESSIBLE select 'BUFG', + &_IF_X_ACCESSIBLE indx + + &_IF_X_ACCESSIBLE (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE kcbwhdes name + &_IF_X_ACCESSIBLE from x$kcbwh + &_IF_X_ACCESSIBLE where (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + eq_type + from ( + select es.eq_type + &_IF_ORA10_OR_HIGHER ||' - '||lt.name + eq_type, + total_req# + from + v$enqueue_stat es + &_IF_ORA10_OR_HIGHER , v$lock_type lt + &_IF_ORA10_OR_HIGHER where es.eq_type = lt.type + ) e + where (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_statnames + order by stype, statistic#; + + -- store these into an index_by array organized by statistic# for fast lookup + --output('sn_tmp.count='||sn_tmp.count); + --output('lv_gather='||lv_gather); + for i in 1..sn_tmp.count loop + -- output('i='||i||' statistic#='||sn_tmp(i).statistic#); + sn(sn_tmp(i).statistic#) := sn_tmp(i); + end loop; + + + -- main sampling loop + for c in 1..&snapper_count loop + + -- sesstat and other performance counter sampling + if gather_stats = 1 then + + -- print header if required + gv_header_string := + CASE WHEN output_header = 1 THEN 'HEAD,' END + || CASE WHEN output_sid = 1 THEN ' SID,' END + || CASE WHEN output_username = 1 THEN ' USERNAME ,' END + || CASE WHEN output_time = 1 THEN ' SNAPSHOT START ,' END + || CASE WHEN output_seconds = 1 THEN ' SECONDS,' END + || CASE WHEN output_stype = 1 THEN ' TYPE,' END + || CASE WHEN output_sname = 1 THEN rpad(' STATISTIC',59,' ')||',' END + || CASE WHEN output_delta = 1 THEN ' DELTA,' END + || CASE WHEN output_delta_s = 1 THEN ' DELTA/SEC,' END + || CASE WHEN output_hdelta = 1 THEN ' HDELTA,' END + || CASE WHEN output_hdelta_s = 1 THEN ' HDELTA/SEC,' END + || CASE WHEN output_percent = 1 THEN ' %TIME,' END + || CASE WHEN output_pcthist = 1 THEN ' GRAPH ,' END + || CASE WHEN output_eventcnt = 1 THEN ' NUM_WAITS,' END + || CASE WHEN output_eventcnt_s = 1 THEN ' WAITS/SEC,' END + || CASE WHEN output_eventavg = 1 THEN ' AVERAGES' END + ; + + + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(rpad('-',length(gv_header_string),'-')); + output(gv_header_string); + output(rpad('-',length(gv_header_string),'-')); + else + if pagesize = -1 and c = 1 then + + output(gv_header_string); + + end if; + end if; + + + if c = 1 then + + get_sessions; + snap(d1,s1); + + else + + get_sessions; + d1 := d2; + s1 := s2; + + end if; -- c = 1 + + -- output('snapper_sleep='||to_char(&snapper_sleep - (sysdate - d1)*86400)); + -- dbms_lock.sleep( (&snapper_sleep - (sysdate - d1)) ); + -- dbms_lock.sleep( (&snapper_sleep - (sysdate - d1))*1000/1024 ); + + end if; -- gather_stats = 1 + + + + -- ASH style sampling + ash_date1 := sysdate; + + if gather_ash = 1 then + while sysdate < (ash_date1 + (&snapper_sleep/86400)) loop + -- get active session records from g_sessions + get_sessions; + extract_ash(); + -- sleep timeout backoff depending on the duration sampled (for up to 10 seconds total sampling time will get max 100 Hz sampling) + -- for longer duration sampling the algorithm will back off and for long durations (over 100 sec) the sampling rate will stabilize + -- at 1Hz + dbms_lock.sleep( greatest(0.1,(least(1,&snapper_sleep*&snapper_count/100))) ); + end loop; + + else + dbms_lock.sleep( ((ash_date1+(&snapper_sleep/86400)) - sysdate)*86400 ); + end if; + + ash_date2 := sysdate; + + -- sesstat new sample and delta calculation + if gather_stats = 1 then + + get_sessions; + snap(d2,s2); + + -- manually coded nested loop outer join for calculating deltas: + -- why not use a SQL join? this would require creation of PL/SQL + -- collection object types, but Snapper does not require any changes + -- to the database, so any custom object types are out! + changed_values := 0; + missing_values_s1 := 0; + missing_values_s2 := 0; + + -- remember last disappeared SID so we wouldn't need to output a warning + -- message for each statistic row of that disappeared sid + disappeared_sid := 0; + + i :=1; -- iteration counter (for debugging) + a :=1; -- s1 array index + b :=1; -- s2 array index + + if s2.count > 0 then lv_curr_sid := s2(a).sid; end if; + + while ( a <= s1.count and b <= s2.count ) loop + + if lv_curr_sid != 0 and lv_curr_sid != s2(a).sid then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(' '); + output(rpad('-',length(gv_header_string),'-')); + output(gv_header_string); + output(rpad('-',length(gv_header_string),'-')); + else + output(' '); + end if; + lv_curr_sid := s2(a).sid; + end if; + + delta := 0; -- don't print + + case + when s1(a).sid = s2(b).sid then + + case + when s1(a).statistic# = s2(b).statistic# then + + delta := s2(b).value - s1(a).value; + evcnt := s2(b).event_count - s1(a).event_count; + if delta != 0 then fout(); end if; + + a := a + 1; + b := b + 1; + + when s1(a).statistic# > s2(b).statistic# then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).statistic# < s2(b).statistic# then + + output('ERROR, s1(a).statistic# < s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + else + output('ERROR, s1(a).statistic# ? s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + end case; -- s1(a).statistic# ... s2(b).statistic# + + when s1(a).sid > s2(b).sid then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).sid < s2(b).sid then + + if disappeared_sid != s2(b).sid then + output('WARN, Session has disappeared during snapshot, ignoring SID='||to_char(s2(b).sid)||' debug(a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count||')'); + end if; + disappeared_sid := s2(b).sid; + a := a + 1; + + else + output('ERROR, Should not be here, SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + end case; -- s1(a).sid ... s2(b).sid + + i:=i+1; + + if delta != 0 then + + changed_values := changed_values + 1; + + end if; -- delta != 0 + + end loop; -- while ( a <= s1.count and b <= s2.count ) + + if pagesize > 0 and changed_values > 0 then + output(' '); + --output('-- End of Stats snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(case (d2-d1) when 0 then &snapper_sleep else round((d2-d1) * 86400, 1) end)); + output('-- End of Stats snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((d2-d1) * 86400, 1))); + end if; + + output(' '); + + end if; -- gather_stats = 1 + + if gather_ash = 1 then + + -- get ASH sample grouping details + g_ash_columns := nvl( getopt('&snapper_options', 'ash=' ), g_ash_columns ); + + -- optional additional ASH groupings + g_ash_columns1 := case when getopt('&snapper_options', 'ash1' ) is null then null when getopt('&snapper_options', 'ash1' ) = chr(0) then g_ash_columns1 else getopt('&snapper_options', 'ash1=' ) end; + g_ash_columns2 := case when getopt('&snapper_options', 'ash2' ) is null then null when getopt('&snapper_options', 'ash2' ) = chr(0) then g_ash_columns2 else getopt('&snapper_options', 'ash2=' ) end; + g_ash_columns3 := case when getopt('&snapper_options', 'ash3' ) is null then null when getopt('&snapper_options', 'ash3' ) = chr(0) then g_ash_columns3 else getopt('&snapper_options', 'ash3=' ) end; + + -- group ASH records and print report + out_ash( g_ash_columns, 10 ); + -- group and print optional ASH reports + if g_ash_columns1 is not null then out_ash( g_ash_columns1, 10 ); end if; + if g_ash_columns2 is not null then out_ash( g_ash_columns2, 10 ); end if; + if g_ash_columns3 is not null then out_ash( g_ash_columns3, 10 ); end if; + + + if pagesize > 0 then + output(' '); + output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken); + --output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(case (ash_date2-ash_date1) when 0 then &snapper_sleep else round((ash_date2-ash_date1) * 86400, 1) end)||', samples_taken='||g_ash_samples_taken); + output(' '); + end if; + + reset_ash(); + + end if; -- gather_ash = 1 + + end loop; -- for c in 1..snapper_count + +end; +/ + +undefine snapper_oraversion +undefine snapper_sleep +undefine snapper_count +undefine snapper_sid +undefine ssid_begin +-- undefine _IF_ORA10_OR_HIGHER +-- undefine _IF_ORA9 +-- undefine _IF_ORA11_OR_HIGHER +-- undefine _IF_LOWER_THAN_ORA11 +-- undefine _NO_BLK_INST +-- undefine _YES_BLK_INST +-- undefine _NO_PLSQL_OBJ_ID +-- undefine _YES_PLSQL_OBJ_ID +-- undefine _IF_DBMS_SYSTEM_ACCESSIBLE +-- undefine _IF_X_ACCESSIBLE +col snapper_ora10higher clear +col snapper_ora11higher clear +col snapper_ora11lower clear +col dbms_system_accessible clear + +set serveroutput off diff --git a/tpt/snapper_v1.sql b/tpt/snapper_v1.sql new file mode 100644 index 0000000..79fb23d --- /dev/null +++ b/tpt/snapper_v1.sql @@ -0,0 +1,744 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: snapper.sql +-- Purpose: An easy to use Oracle session-level performance snapshot utility +-- +-- NB! This script does NOT require creation of any database objects! +-- +-- This is very useful for ad-hoc performance diagnosis in environments +-- with restrictive change management processes, where creating +-- even temporary tables and PL/SQL packages is not allowed or would +-- take too much time to get approved. +-- +-- All processing is done by few sqlplus commands and an anonymous +-- PL/SQL block, all that's needed is SQLPLUS access (and if you want +-- to output data to server-side tracefile then execute rights on +-- DBMS_SYSTEM). +-- +-- The output is formatted the way it could be easily post-processed +-- by either Unix string manipulation tools or loaded to spreadsheet. +-- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-------------------------------------------------------------------------------- +-- +-- The Session Snapper v1.10 +-- (c) Tanel Poder ( http://www.tanelpoder.com ) +-- +-- +-- +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a cheap ASCII +-- / imitation of a fish and a fishing rod. +-- | Nevertheless the PL/SQL code below the +-- | fish itself should be helpful for quick +-- | catching of relevant Oracle performance +-- | information. +-- | So I wish you happy... um... snapping? +-- | ) +-- | ...... +-- | iittii,,.... +-- ¿ iiffffjjjjtttt,, +-- ..;;ttffLLLLffLLLLLLffjjtt;;.. +-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,, +-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;.... +-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;.. +-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,, +-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;.. +-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii.. +-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;.. +-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,, +-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii.. +-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;.. +-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;; +-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;.. +-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. .... +-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii.. +-- ..;;ttttii;;.... ..;;;;.... +-- ..iiii;;.. +-- ..;;,, +-- .... +-- +-- +-- Usage: +-- +-- snapper.sql +-- +-- out - use dbms_output.put_line() for output +-- trace - write output to server process tracefile +-- (you must have execute permission on sys.dbms_system.ksdwrt() for that, +-- you can use both out and trace parameters together if you like ) +-- pagesize - display header lines after X snapshots. if pagesize=0 don't display +-- any headers. pagesize=-1 will display a terse header only once +-- gather - if omitted, gathers all statistics +-- - if specified, then gather following: +-- s - Session Statistics from v$sesstat +-- t - Session Time model info from v$sess_time_model +-- w - Session Wait statistics from v$session_event and v$session_wait +-- l - instance Latch get statistics ( gets + immediate_gets ) +-- e - instance Enqueue lock get statistics +-- b - buffer get Where statistics +-- a - All above +-- +-- sinclude - if specified, then show only V$SESSTAT stats which match the +-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+) +-- linclude - if specified, then show only V$LATCH latch stats which match the +-- LIKE pattern of linclude (REGEXP_LIKE in 10g+) +-- tinclude - if specified, then show only V$SESS_TIME_MODEL stats which match the +-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+) +-- winclude - if specified, then show only V$SESSION_EVENT wait stats which match the +-- LIKE pattern of winclude (REGEXP_LIKE in 10g+) +-- +-- you can combine above parameters in any order, separate them by commas +-- (and don't use spaces as otherwise they are treated as following parameters) +-- +-- - the number of seconds between taking snapshots +-- - the number of snapshots to take ( maximum value is power(2,31)-1 ) +-- +-- can be either one sessionid, multiple sessionids separated by +-- commas or a SQL statement which returns a list of SIDs (if you need spaces +-- in that parameter text, enclose it in double quotes). +-- +-- if you want to snap ALL sids, use "select sid from v$session" as value for +-- parameter +-- +-- +-- Examples: +-- +-- @snapper out 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- all statistics are reported) +-- +-- @snapper out,gather=w 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only Wait event statistics are reported) +-- +-- @snapper out,gather=st 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only v$Session and v$sess_Time_model statistics are gathered) +-- +-- @snapper trace,gather=stw,pagesize=0 10 90 117,210,313 +-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313 +-- all statistics are reported, do not print any headers) +-- +-- @snapper trace 900 999999999 "select sid from v$session" +-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace, +-- loop (almost) forever ) +-- +-- @snapper out,trace 300 12 "select sid from v$session where username='APPS'" +-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write +-- output to both dbms_output and tracefile) +-- +-- Notes: +-- +-- Snapper does not currently detect if a session with given SID has +-- ended and been recreated between snapshots, thus it may report bogus +-- statistics for such sessions. The check and warning for that will be +-- implemented in a future version. +-- +-------------------------------------------------------------------------------- + +set termout off tab off verify off linesize 299 + + +-- Get parameters +define snapper_options="&1" +define snapper_sleep="&2" +define snapper_count="&3" +define snapper_sid="&4" + +-- The following code is required for making this script "dynamic" as due +-- different Oracle versions, script parameters or granted privileges some +-- statements might not compile if not adjusted properly. + +define _IF_ORA10_OR_HIGHER="--" +define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" /*dummy*/ + +col snapper_oraversion noprint new_value _IF_ORA10_OR_HIGHER +col dbms_system_accessible noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLE +col snapper_sid noprint new_value snapper_sid + +select + decode(substr(banner, instr(banner, 'Release ')+8,1), 1, '', '--') snapper_oraversion + , decode(trim(to_char('&snapper_sid')), '0', 'select /*+ no_unnest */ sid from v$session', trim(to_char('&snapper_sid'))) snapper_sid +from + v$version +where + rownum=1; + +-- this block determines whether dbms_system.ksdwrt is accessible to us +-- dbms_describe is required as all_procedures/all_objects may show this object +-- even if its not executable by us (thanks to o7_dictionary_accessibility=false) + +var v varchar2(100) + +declare + + o sys.dbms_describe.number_table; + p sys.dbms_describe.number_table; + l sys.dbms_describe.number_table; + a sys.dbms_describe.varchar2_table; + dty sys.dbms_describe.number_table; + def sys.dbms_describe.number_table; + inout sys.dbms_describe.number_table; + len sys.dbms_describe.number_table; + prec sys.dbms_describe.number_table; + scal sys.dbms_describe.number_table; + rad sys.dbms_describe.number_table; + spa sys.dbms_describe.number_table; + +begin + + sys.dbms_describe.describe_procedure( + 'DBMS_SYSTEM.KSDWRT', null, null, + o, p, l, a, dty, def, inout, len, prec, scal, rad, spa + ); + + -- we never get to following statement if dbms_system is not accessible + -- as sys.dbms_describe will raise an exception + :v:= '-- dbms_system is accessible'; + +exception + when others then null; +end; +/ + + +select nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible +from dual; + +set termout on serverout on size 1000000 + +declare + + -- forward declarations + procedure output(p_txt in varchar2); + procedure fout; + + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, + p_grouplen in number default 3 + ) + return varchar2; + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) + return varchar2; + + -- type, constant, variable declarations + + -- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_INTEGER + pls_adjust constant number(10,0) := power(2,31) - 1; + + type srec is record (stype varchar2(4), sid number, statistic# number, value number ); + type stab is table of srec index by pls_integer; + s1 stab; + s2 stab; + + type snrec is record (stype varchar2(4), statistic# number, name varchar2(64)); + type sntab is table of snrec index by pls_integer; + sn_tmp sntab; + sn sntab; + + + i number; + a number; + b number; + + c number; + delta number; + changed_values number; + pagesize number:=99999999999999; + missing_values_s1 number := 0; + missing_values_s2 number := 0; + d1 date; + d2 date; + lv_gather varchar2(100); + + /*--------------------------------------------------- + -- proc for outputting data to trace or dbms_output + ---------------------------------------------------*/ + procedure output(p_txt in varchar2) is + begin + + if getopt('&snapper_options', 'out') is not null then + dbms_output.put_line(p_txt); + end if; + + -- The block below is a sqlplus trick for conditionally commenting out PL/SQL code + &_IF_DBMS_SYSTEM_ACCESSIBLE + if getopt('&snapper_options', 'trace') is not null then + sys.dbms_system.ksdwrt(1, p_txt); + sys.dbms_system.ksdfls; + end if; + -- */ + end; -- output + + /*--------------------------------------------------- + -- proc for outputting data, utilizing global vars + ---------------------------------------------------*/ + procedure fout is + begin + +-- output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# ); +-- output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + output( 'DATA, ' + ||to_char(s2(b).sid,'999999')||', ' + ||to_char(d1, 'YYYYMMDD HH24:MI:SS')||', ' + ||to_char(case (d2-d1) when 0 then &snapper_sleep else (d2-d1) * 86400 end, '9999999')||', ' + ||s2(b).stype||', ' + ||rpad(sn(s2(b).statistic#).name, 40, ' ')||', ' + ||to_char(delta, '999999999999')||', ' + ||to_char(delta/(case (d2-d1) when 0 then &snapper_sleep else (d2-d1) * 86400 end),'999999999')||', ' + ||lpad(tptformat(delta, s2(b).stype), 10, ' ')||', ' + ||lpad(tptformat(delta/(case (d2-d1) when 0 then &snapper_sleep else (d2-d1)* 86400 end ), s2(b).stype), 10, ' ') + ); + end; + + /*--------------------------------------------------- + -- function for converting large numbers to human-readable format + ---------------------------------------------------*/ + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, -- for KiB/MiB formatting use + p_grouplen in number default 3 -- p_base=2 and p_grouplen=10 + ) + return varchar2 + is + begin + + if p_stype in ('WAIT','TIME') then + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then 'us' + when 1 then 'us' + when p_grouplen*1 then 'ms' + when p_grouplen*2 then 's' + when p_grouplen*3 then 'ks' + when p_grouplen*4 then 'Ms' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us' + end; + + else + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then '' + when 1 then '' + when p_grouplen*1 then 'k' + when p_grouplen*2 then 'M' + when p_grouplen*3 then 'G' + when p_grouplen*4 then 'T' + when p_grouplen*5 then 'P' + when p_grouplen*6 then 'E' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ) + end; + + end if; + + end; -- tptformat + + /*--------------------------------------------------- + -- simple function for parsing arguments from parameter string + ---------------------------------------------------*/ + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) return varchar2 + is + ret varchar(1000) := NULL; + begin + +-- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' ); +-- dbms_output.put('p_extract = ['||p_extract||'] ' ); + + if lower(p_parvalues) like lower(p_extract)||'%' + or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then + + ret := + nvl ( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract), + case + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) + when 0 then length(p_parvalues) + else + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) - 1 + end + ) + , chr(0) -- in case parameter was specified but with no value + ); + + else + ret := null; -- no parameter found + end if; + +-- dbms_output.put_line('ret = ['||ret||']'); + + return ret; + + end; -- getopt + + + /*--------------------------------------------------- + -- proc for querying performance data into collections + ---------------------------------------------------*/ + procedure snap( p_snapdate in out date, p_stats in out stab ) is + + lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options', 'sinclude=' )), '%'); + lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options', 'linclude=' )), '%'); + lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options', 'tinclude=' )), '%'); + lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options', 'winclude=' )), '%'); + + + begin + p_snapdate := sysdate; + + select * + bulk collect into p_stats + from ( + select 'STAT' stype, sid, statistic# - pls_adjust statistic#, value + from v$sesstat + where sid in (&snapper_sid) + and (lv_gather like '%s%' or lv_gather like '%a%') + and statistic# in (select statistic# from v$statname + where lower(name) like lv_include_stat + &_IF_ORA10_OR_HIGHER union + &_IF_ORA10_OR_HIGHER select statistic# from v$statname + &_IF_ORA10_OR_HIGHER where regexp_like (name, lv_include_stat, 'i') + ) + -- + union all + select + 'WAIT', sw.sid, + en.event# + (select count(*) from v$statname) + 1 - pls_adjust, + nvl(se.time_waited_micro,0) + ( decode(se.event||sw.state, sw.event||'WAITING', sw.seconds_in_wait, 0) * 1000000 ) value + from v$session_wait sw, v$session_event se, v$event_name en + where sw.sid = se.sid + and se.event = en.name + and se.sid in (&snapper_sid) + and (lv_gather like '%w%' or lv_gather like '%a%') + and event# in (select event# from v$event_name + where lower(name) like lv_include_wait + &_IF_ORA10_OR_HIGHER union + &_IF_ORA10_OR_HIGHER select event# from v$event_name + &_IF_ORA10_OR_HIGHER where regexp_like (name, lv_include_wait, 'i') + ) + -- + &_IF_ORA10_OR_HIGHER union all + &_IF_ORA10_OR_HIGHER select 'TIME' stype, sid, stat_id - pls_adjust statistic#, value + &_IF_ORA10_OR_HIGHER from v$sess_time_model + &_IF_ORA10_OR_HIGHER where sid in (&snapper_sid) + &_IF_ORA10_OR_HIGHER and (lv_gather like '%t%' or lv_gather like '%a%') + &_IF_ORA10_OR_HIGHER and stat_id in (select stat_id from v$sys_time_model + &_IF_ORA10_OR_HIGHER where lower(stat_name) like lv_include_time + &_IF_ORA10_OR_HIGHER union + &_IF_ORA10_OR_HIGHER select stat_id from v$sys_time_model + &_IF_ORA10_OR_HIGHER where regexp_like (stat_name, lv_include_time, 'i') + &_IF_ORA10_OR_HIGHER ) + -- + union all + select 'LATG', s.sid, + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + l.gets + l.immediate_gets value + from v$latch l, v$session s + where + -- deliberate cartesian join + s.sid in (&snapper_sid) + and (lv_gather like '%l%' or lv_gather like '%a%') + and latch# in (select latch# from v$latchname + where lower(name) like lv_include_latch + &_IF_ORA10_OR_HIGHER union + &_IF_ORA10_OR_HIGHER select latch# from v$latchname + &_IF_ORA10_OR_HIGHER where regexp_like (name, lv_include_latch, 'i') + ) + -- +-- union all +-- select 'BUFW', ses.sid, +-- s.indx + +-- (select count(*) from v$statname) + +-- (select count(*) from v$event_name) + +-- (select count(*) from v$latch) + +-- 1 - pls_adjust statistic#, +-- s.why0+s.why1+s.why2 value +-- from x$kcbsw s, x$kcbwh w, v$session ses +-- where +-- -- deliberate cartesian join +-- s.indx = w.indx +-- and s.why0+s.why1+s.why2 > 0 +-- and ses.sid in (&snapper_sid) +-- and (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select ' ENQ', s.sid, + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from v$latch) + +-- (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + e.total_req# value + from v$enqueue_stat e, v$session s + where + -- deliberate cartesian join + s.sid in (&snapper_sid) + and (lv_gather like '%e%' or lv_gather like '%a%') + ) + order by sid, stype, statistic#; + end snap; + + +begin + + pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize); + --output ( 'Pagesize='||pagesize ); + + -- determine which statistics to collect + lv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + when 'all' then 'stw' + else nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + end; + + --lv_gather:=getopt ('&snapper_options', 'gather='); + --output('lv_gather='||lv_gather); + + + + if pagesize > 0 then + output(' '); + output(chr(8)); + output('-- Session Snapper v1.10 by Tanel Poder ( http://www.tanelpoder.com )'); +-- output('-- Parameters used: snapper.sql '||to_char(snapper_options)||' '||to_char(&snapper_sleep)||' ' +-- ||to_char(&snapper_count)||' '||to_char(&snapper_sid)); + output(chr(8)); + output(' '); + end if; + + -- initialize statistic and event name array + -- fetch statistic names with their adjusted IDs + select * + bulk collect into sn_tmp + from ( + select 'STAT' stype, statistic# - pls_adjust statistic#, name + from v$statname + where (lv_gather like '%s%' or lv_gather like '%a%') + -- + union all + select 'WAIT', + event# + (select count(*) from v$statname) + 1 - pls_adjust, name + from v$event_name + where (lv_gather like '%w%' or lv_gather like '%a%') + -- + &_IF_ORA10_OR_HIGHER union all + &_IF_ORA10_OR_HIGHER select 'TIME' stype, stat_id - pls_adjust statistic#, stat_name name + &_IF_ORA10_OR_HIGHER from v$sys_time_model + &_IF_ORA10_OR_HIGHER where (lv_gather like '%t%' or lv_gather like '%a%') + -- + union all + select 'LATG', + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + name + from v$latch l + where (lv_gather like '%l%' or lv_gather like '%a%') + -- +-- union all +-- select 'BUFW', +-- indx + +-- (select count(*) from v$statname) + +-- (select count(*) from v$event_name) + +-- (select count(*) from v$latch) + +-- 1 - pls_adjust statistic#, +-- kcbwhdes name +-- from x$kcbwh +-- where (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select ' ENQ', + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from v$latch) + +-- (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + eq_type + from ( + select es.eq_type + &_IF_ORA10_OR_HIGHER ||' - '||lt.name + eq_type, + total_req# + from + v$enqueue_stat es + &_IF_ORA10_OR_HIGHER , V$lock_type lt + &_IF_ORA10_OR_HIGHER where es.eq_type = lt.type + ) e + where (lv_gather like '%e%' or lv_gather like '%a%') + ) + order by stype, statistic#; + + -- store these into an index_by array organized by statistic# for fast lookup + --output('sn_tmp.count='||sn_tmp.count); + --output('lv_gather='||lv_gather); + for i in 1..sn_tmp.count loop + -- output('i='||i||' statistic#='||sn_tmp(i).statistic#); + sn(sn_tmp(i).statistic#) := sn_tmp(i); + end loop; + + + -- main sampling loop + for c in 1..&snapper_count loop + + -- print header if required + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(rpad('--',141,'-')); + output('HEAD, SID, SNAPSHOT START , SECONDS, TYPE, ' + ||rpad('STATISTIC',40,' ') + ||', DELTA, DELTA/SEC, HDELTA, HDELTA/SEC' + ); + output(rpad('-',141,'-')); + else + if pagesize = -1 and c = 1 then + + output('HEAD, SID, SNAPSHOT START , SECONDS, TYPE, ' + ||rpad('STATISTIC',40,' ') + ||', DELTA, D/SEC, HDELTA, HD/SEC' + ); + + end if; + end if; + + + if c = 1 then + + snap(d1,s1); + + else + + d1 := d2; + s1 := s2; + + end if; -- c = 1 + + dbms_lock.sleep( (&snapper_sleep - (sysdate - d1)) ); + -- dbms_lock.sleep( (&snapper_sleep - (sysdate - d1))*1000/1024 ); + + snap(d2,s2); + + changed_values := 0; + missing_values_s1 := 0; + missing_values_s2 := 0; + + i :=1; -- iteration counter (for debugging) + a :=1; -- s1 array index + b :=1; -- s2 array index + + while ( a <= s1.count and b <= s2.count ) loop + + delta := 0; -- don't print + + case + when s1(a).sid = s2(b).sid then + + case + when s1(a).statistic# = s2(b).statistic# then + + delta := s2(b).value - s1(a).value; + if delta != 0 then fout(); end if; + + a := a + 1; + b := b + 1; + + when s1(a).statistic# > s2(b).statistic# then + + delta := s2(b).value; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).statistic# < s2(b).statistic# then + + output('ERROR, s1(a).statistic# < s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + else + output('ERROR, s1(a).statistic# ? s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + end case; -- s1(a).statistic# ... s2(b).statistic# + + when s1(a).sid > s2(b).sid then + + delta := s2(b).value; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).sid < s2(b).sid then + + output('WARN, Session has disappeared during snapshot, ignoring SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + + else + output('ERROR, Should not be here, SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + end case; -- s1(a).sid ... s2(b).sid + + i:=i+1; + + if delta != 0 then + + changed_values := changed_values + 1; + + end if; -- delta != 0 + + end loop; -- while ( a <= s1.count and b <= s2.count ) + + + if pagesize > 0 and changed_values > 0 then output('-- End of snap '||to_char(c)); end if; + + end loop; -- for c in 1..snapper_count + +end; +/ + +undefine snapper_oraversion +undefine snapper_sleep +undefine snapper_count +undefine snapper_sid +undefine _IF_ORA10_OR_HIGHER +undefine _IF_DBMS_SYSTEM_ACCESSIBLE +col snapper_oraversion clear +col dbms_system_accessible clear + +set serverout off diff --git a/tpt/snapper_v2.sql b/tpt/snapper_v2.sql new file mode 100644 index 0000000..bcb9563 --- /dev/null +++ b/tpt/snapper_v2.sql @@ -0,0 +1,864 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: snapper.sql +-- Purpose: An easy to use Oracle session-level performance snapshot utility +-- +-- NB! This script does NOT require creation of any database objects! +-- +-- This is very useful for ad-hoc performance diagnosis in environments +-- with restrictive change management processes, where creating +-- even temporary tables and PL/SQL packages is not allowed or would +-- take too much time to get approved. +-- +-- All processing is done by few sqlplus commands and an anonymous +-- PL/SQL block, all that's needed is SQLPLUS access (and if you want +-- to output data to server-side tracefile then execute rights on +-- DBMS_SYSTEM). +-- +-- The output is formatted the way it could be easily post-processed +-- by either Unix string manipulation tools or loaded to spreadsheet. +-- +-- +-- Author: Tanel Poder +-- Copyright: (c) Tanel Poder - http://www.tanelpoder.com - All rights reserved. +-- +-------------------------------------------------------------------------------- +-- +-- The Session Snapper v2.02 +-- (c) Tanel Poder ( http://www.tanelpoder.com ) +-- +-- +-- +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a cheap ASCII +-- / imitation of a fish and a fishing rod. +-- | Nevertheless the PL/SQL code below the +-- | fish itself should be helpful for quick +-- | catching of relevant Oracle performance +-- | information. +-- | So I wish you happy... um... snapping? +-- | ) +-- | ...... +-- | iittii,,.... +-- ¿ iiffffjjjjtttt,, +-- ..;;ttffLLLLffLLLLLLffjjtt;;.. +-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,, +-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;.... +-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;.. +-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,, +-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;.. +-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii.. +-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;.. +-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,, +-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii.. +-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;.. +-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;; +-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;.. +-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. .... +-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii.. +-- ..;;ttttii;;.... ..;;;;.... +-- ..iiii;;.. +-- ..;;,, +-- .... +-- +-- +-- Usage: +-- +-- snapper.sql +-- +-- out - use dbms_output.put_line() for output +-- trace - write output to server process tracefile +-- (you must have execute permission on sys.dbms_system.ksdwrt() for that, +-- you can use both out and trace parameters together if you like ) +-- pagesize - display header lines after X snapshots. if pagesize=0 don't display +-- any headers. pagesize=-1 will display a terse header only once +-- gather - if omitted, gathers all statistics +-- - if specified, then gather following: +-- s - Session Statistics from v$sesstat +-- t - Session Time model info from v$sess_time_model +-- w - Session Wait statistics from v$session_event and v$session_wait +-- l - instance Latch get statistics ( gets + immediate_gets ) +-- e - instance Enqueue lock get statistics +-- b - buffer get Where statistics (instance-wide) +-- a - All above +-- +-- sinclude - if specified, then show only V$SESSTAT stats which match the +-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+) +-- linclude - if specified, then show only V$LATCH latch stats which match the +-- LIKE pattern of linclude (REGEXP_LIKE in 10g+) +-- tinclude - if specified, then show only V$SESS_TIME_MODEL stats which match the +-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+) +-- winclude - if specified, then show only V$SESSION_EVENT wait stats which match the +-- LIKE pattern of winclude (REGEXP_LIKE in 10g+) +-- +-- you can combine above parameters in any order, separate them by commas +-- (and don't use spaces as otherwise they are treated as following parameters) +-- +-- - the number of seconds between taking snapshots +-- - the number of snapshots to take ( maximum value is power(2,31)-1 ) +-- +-- can be either one sessionid, multiple sessionids separated by +-- commas or a SQL statement which returns a list of SIDs (if you need spaces +-- in that parameter text, enclose it in double quotes). +-- +-- if you want to snap ALL sids, use "select sid from v$session" as value for +-- parameter +-- +-- +-- Examples: +-- +-- @snapper out 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- Wait, v$sesstat and v$sess_time_model statistics are reported by default) +-- +-- @snapper out,gather=w 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only Wait event statistics are reported) +-- +-- @snapper out,gather=st 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only v$sesstat and v$sess_Time_model statistics are gathered) +-- +-- @snapper trace,gather=stw,pagesize=0 10 90 117,210,313 +-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313 +-- all statistics are reported, do not print any headers) +-- +-- @snapper trace 900 999999999 "select sid from v$session" +-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace, +-- loop (almost) forever ) +-- +-- @snapper out,trace 300 12 "select sid from v$session where username='APPS'" +-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write +-- output to both dbms_output and tracefile) +-- +-- Notes: +-- +-- Snapper does not currently detect if a session with given SID has +-- ended and been recreated between snapshots, thus it may report bogus +-- statistics for such sessions. The check and warning for that will be +-- implemented in a future version. +-- +-------------------------------------------------------------------------------- + +set termout off tab off verify off linesize 299 + + +-- Get parameters +define snapper_options="&1" +define snapper_sleep="&2" +define snapper_count="&3" +define snapper_sid="&4" + +-- The following code is required for making this script "dynamic" as due +-- different Oracle versions, script parameters or granted privileges some +-- statements might not compile if not adjusted properly. + +define _IF_ORA10_OR_HIGHER="--" +define _IF_ORA11_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA11="--" +define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" /*dummy*/ +define _IF_X_ACCESSIBLE="--" + +col snapper_oraversion noprint new_value _SNAPPER_ORAVERSION +col snapper_ora10higher noprint new_value _IF_ORA10_OR_HIGHER +col snapper_ora11higher noprint new_value _IF_ORA11_OR_HIGHER +col snapper_ora11lower noprint new_value _IF_LOWER_THAN_ORA11 +col dbms_system_accessible noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLE +col x_accessible noprint new_value _IF_X_ACCESSIBLE +col snapper_sid noprint new_value snapper_sid + +-- this block determines whether dbms_system.ksdwrt is accessible to us +-- dbms_describe is required as all_procedures/all_objects may show this object +-- even if its not executable by us (thanks to o7_dictionary_accessibility=false) + +var v varchar2(100) +var x varchar2(10) + +declare + + o sys.dbms_describe.number_table; + p sys.dbms_describe.number_table; + l sys.dbms_describe.number_table; + a sys.dbms_describe.varchar2_table; + dty sys.dbms_describe.number_table; + def sys.dbms_describe.number_table; + inout sys.dbms_describe.number_table; + len sys.dbms_describe.number_table; + prec sys.dbms_describe.number_table; + scal sys.dbms_describe.number_table; + rad sys.dbms_describe.number_table; + spa sys.dbms_describe.number_table; + + tmp number; + +begin + + begin + execute immediate 'select count(*) from x$kcbwh where rownum = 1' into tmp; + :x:= ' '; -- x$ tables are accessible, so dont comment any lines out + exception + when others then null; + end; + + sys.dbms_describe.describe_procedure( + 'DBMS_SYSTEM.KSDWRT', null, null, + o, p, l, a, dty, def, inout, len, prec, scal, rad, spa + ); + + -- we never get to following statement if dbms_system is not accessible + -- as sys.dbms_describe will raise an exception + :v:= '-- dbms_system is accessible'; + +exception + when others then null; +end; +/ + + +select + decode(substr(banner, instr(banner, 'Release ')+8,1), '1', '', '--') snapper_ora10higher, + decode(substr(banner, instr(banner, 'Release ')+8,2), '11','', '--') snapper_ora11higher, + decode(substr(banner, instr(banner, 'Release ')+8,2), '11','--', '') snapper_ora11lower, + nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible, + nvl(:x, '--') x_accessible +from + v$version +where + rownum=1; + +set termout on serverout on size 1000000 format wrapped + +-- main() + +declare + + -- forward declarations + procedure output(p_txt in varchar2); + procedure fout; + + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, + p_grouplen in number default 3 + ) + return varchar2; + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) + return varchar2; + + -- type, constant, variable declarations + + -- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_INTEGER + pls_adjust constant number(10,0) := power(2,31) - 1; + + type srec is record (stype varchar2(4), sid number, statistic# number, value number ); + type stab is table of srec index by pls_integer; + s1 stab; + s2 stab; + + type snrec is record (stype varchar2(4), statistic# number, name varchar2(64)); + type sntab is table of snrec index by pls_integer; + sn_tmp sntab; + sn sntab; + + type sestab is table of v$session%rowtype index by pls_integer; + + g_sessions sestab; + g_empty_sessions sestab; + + g_count_statname number; + g_count_eventname number; + + i number; + a number; + b number; + + c number; + delta number; + changed_values number; + pagesize number:=99999999999999; + missing_values_s1 number := 0; + missing_values_s2 number := 0; + disappeared_sid number := 0; + d1 date; + d2 date; + lv_gather varchar2(1000); + lv_header_string varchar2(1000); + lv_data_string varchar2(1000); + + -- output column configuration + output_header number := 0; -- 1=true 0=false + output_username number := 1; -- v$session.username + output_sid number := 1; -- sid + output_time number := 0; -- time of snapshot start + output_seconds number := 0; -- seconds in snapshot (shown in footer of each snapshot too) + output_stype number := 1; -- statistic type (WAIT,STAT,TIME,ENQG,LATG,...) + output_sname number := 1; -- statistic name + output_delta number := 1; -- raw delta + output_delta_s number := 0; -- raw delta normalized to per second + output_hdelta number := 0; -- human readable delta + output_hdelta_s number := 1; -- human readable delta normalized to per second + output_percent number := 1; -- percent of total time/samples + output_pcthist number := 1; -- percent of total visual bar (histogram) + + /*--------------------------------------------------- + -- proc for outputting data to trace or dbms_output + ---------------------------------------------------*/ + procedure output(p_txt in varchar2) is + begin + + if (getopt('&snapper_options', 'out') is not null) + or + (getopt('&snapper_options', 'out') is null and getopt('&snapper_options', 'trace') is null) + then + dbms_output.put_line(p_txt); + end if; + + -- The block below is a sqlplus trick for conditionally commenting out PL/SQL code + &_IF_DBMS_SYSTEM_ACCESSIBLE + if getopt('&snapper_options', 'trace') is not null then + sys.dbms_system.ksdwrt(1, p_txt); + sys.dbms_system.ksdfls; + end if; + -- */ + end; -- output + + /*--------------------------------------------------- + -- proc for outputting data, utilizing global vars + ---------------------------------------------------*/ + procedure fout is + l_output_username VARCHAR2(30); + begin + +-- output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# ); +-- output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + if output_username = 1 then + begin + l_output_username := substr(nvl( g_sessions(s2(b).sid).username, substr(g_sessions(s2(b).sid).program, instr(g_sessions(s2(b).sid).program,'(')) ), 1,30); + exception + when no_data_found then l_output_username := 'error'; + when others then raise; + end; + end if; + + output( CASE WHEN output_header = 1 THEN 'SID= ' END + || CASE WHEN output_sid = 1 THEN to_char(s2(b).sid,'999999')||', ' END + || CASE WHEN output_username = 1 THEN rpad(CASE s2(b).sid WHEN -1 THEN ' ' ELSE l_output_username END, 10)||', ' END + || CASE WHEN output_time = 1 THEN to_char(d1, 'YYYYMMDD HH24:MI:SS')||', ' END + || CASE WHEN output_seconds = 1 THEN to_char(case (d2-d1) when 0 then &snapper_sleep else (d2-d1) * 86400 end, '9999999')||', ' END + || CASE WHEN output_stype = 1 THEN s2(b).stype||', ' END + || CASE WHEN output_sname = 1 THEN rpad(sn(s2(b).statistic#).name, 40, ' ')||', ' END + || CASE WHEN output_delta = 1 THEN to_char(delta, '999999999999')||', ' END + || CASE WHEN output_delta_s = 1 THEN to_char(delta/(case (d2-d1) when 0 then &snapper_sleep else (d2-d1) * 86400 end),'999999999')||', ' END + || CASE WHEN output_hdelta = 1 THEN lpad(tptformat(delta, s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_hdelta_s = 1 THEN lpad(tptformat(delta/(case (d2-d1) when 0 then &snapper_sleep else (d2-d1)* 86400 end ), s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_percent = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN to_char(delta/CASE (d2-d1) WHEN 0 THEN &snapper_sleep ELSE (d2-d1) * 86400 END / 10000, '9999.9')||'%,' END END + || CASE WHEN output_pcthist = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN rpad(' '||rpad('|', ceil(round(delta/CASE (d2-d1) WHEN 0 THEN &snapper_sleep ELSE (d2-d1) * 86400 END / 100000,1))+1, '@'),12,' ')||'|' END END + ); + + end; + + /*--------------------------------------------------- + -- function for converting large numbers to human-readable format + ---------------------------------------------------*/ + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, -- for KiB/MiB formatting use + p_grouplen in number default 3 -- p_base=2 and p_grouplen=10 + ) + return varchar2 + is + begin + + if p_stype in ('WAIT','TIME') then + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then 'us' + when 1 then 'us' + when p_grouplen*1 then 'ms' + when p_grouplen*2 then 's' + when p_grouplen*3 then 'ks' + when p_grouplen*4 then 'Ms' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us' + end; + + else + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then '' + when 1 then '' + when p_grouplen*1 then 'k' + when p_grouplen*2 then 'M' + when p_grouplen*3 then 'G' + when p_grouplen*4 then 'T' + when p_grouplen*5 then 'P' + when p_grouplen*6 then 'E' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ) + end; + + end if; + + end; -- tptformat + + /*--------------------------------------------------- + -- simple function for parsing arguments from parameter string + ---------------------------------------------------*/ + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) return varchar2 + is + ret varchar(1000) := NULL; + begin + +-- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' ); +-- dbms_output.put('p_extract = ['||p_extract||'] ' ); + + if lower(p_parvalues) like lower(p_extract)||'%' + or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then + + ret := + nvl ( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract), + case + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) + when 0 then length(p_parvalues) + else + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) - 1 + end + ) + , chr(0) -- in case parameter was specified but with no value + ); + + else + ret := null; -- no parameter found + end if; + +-- dbms_output.put_line('ret = ['||ret||']'); + + return ret; + + end; -- getopt + + /*--------------------------------------------------- + -- proc for getting session list with username, osuser, machine etc + ---------------------------------------------------*/ + procedure get_sessions is + tmp_sessions sestab; + begin + + select + * + bulk collect into + tmp_sessions + from + v$session + where + sid in (&snapper_sid); + + g_sessions := g_empty_sessions; + + for i in 1..tmp_sessions.count loop + g_sessions(tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + end; -- get_sessions + + /*--------------------------------------------------- + -- proc for querying performance data into collections + ---------------------------------------------------*/ + procedure snap( p_snapdate in out date, p_stats in out stab ) is + + lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options', 'sinclude=' )), '%'); + lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options', 'linclude=' )), '%'); + lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options', 'tinclude=' )), '%'); + lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options', 'winclude=' )), '%'); + + + begin + p_snapdate := sysdate; + + select * + bulk collect into p_stats + from ( + select 'STAT' stype, sid, statistic# - pls_adjust statistic#, value + from v$sesstat + where sid in (&snapper_sid) + and (lv_gather like '%s%' or lv_gather like '%a%') + and statistic# in (select /*+ no_unnest */ statistic# from v$statname + where lower(name) like '%'||lv_include_stat||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (name, lv_include_stat, 'i') + ) + -- + union all + select + 'WAIT', sw.sid, + en.event# + (select count(*) from v$statname) + 1 - pls_adjust, + nvl(se.time_waited_micro,0) + ( decode(se.event||sw.state, sw.event||'WAITING', sw.seconds_in_wait, 0) * 1000000 ) value + from v$session_wait sw, v$session_event se, v$event_name en + where sw.sid = se.sid + and se.event = en.name + and se.sid in (&snapper_sid) + and (lv_gather like '%w%' or lv_gather like '%a%') + and event# in (select event# from v$event_name + where lower(name) like '%'||lv_include_wait||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (name, lv_include_wait, 'i') + ) + -- + &_IF_ORA10_OR_HIGHER union all + &_IF_ORA10_OR_HIGHER select 'TIME' stype, sid, stat_id - pls_adjust statistic#, value + &_IF_ORA10_OR_HIGHER from v$sess_time_model + &_IF_ORA10_OR_HIGHER where sid in (&snapper_sid) + &_IF_ORA10_OR_HIGHER and (lv_gather like '%t%' or lv_gather like '%a%') + &_IF_ORA10_OR_HIGHER and stat_id in (select stat_id from v$sys_time_model + &_IF_ORA10_OR_HIGHER where lower(stat_name) like '%'||lv_include_time||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (stat_name, lv_include_time, 'i') + &_IF_ORA10_OR_HIGHER ) + -- + union all + select 'LATG', -1 sid, + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + l.gets + l.immediate_gets value + from v$latch l + where + (lv_gather like '%l%' or lv_gather like '%a%') + and latch# in (select latch# from v$latchname + where lower(name) like '%'||lv_include_latch||'%' + &_IF_ORA10_OR_HIGHER or regexp_like (name, lv_include_latch, 'i') + ) + -- + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 union all + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 select 'BUFG', -1 sid, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.why0+s.why1+s.why2 value + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 from x$kcbsw s, x$kcbwh w + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 where + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx = w.indx + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and s.why0+s.why1+s.why2 > 0 + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and (lv_gather like '%b%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER union all + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER select 'BUFG', -1 sid, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER sw.indx + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.why0+why.why1+why.why2+sw.other_wait value + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER from + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbuwhy why, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbwh dsc, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbsw sw + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER where + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.indx = dsc.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.why0 + why.why1 + why.why2 + sw.other_wait > 0 + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER -- deliberate cartesian join + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', -1 sid, + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + e.total_req# value + from v$enqueue_stat e + where + (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_stats + order by sid, stype, statistic#; + end snap; + + +begin + + pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize); + --output ( 'Pagesize='||pagesize ); + + -- determine which statistics to collect + lv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + when 'all' then 'stw' + else nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + end; + + --lv_gather:=getopt ('&snapper_options', 'gather='); + --output('lv_gather='||lv_gather); + + + + if pagesize > 0 then + output(' '); + output('-- Session Snapper v2.02 by Tanel Poder ( http://www.tanelpoder.com )'); + output(' '); + --output('-- '); + + end if; + + -- initialize statistic and event name array + -- fetch statistic names with their adjusted IDs + select * + bulk collect into sn_tmp + from ( + select 'STAT' stype, statistic# - pls_adjust statistic#, name + from v$statname + where (lv_gather like '%s%' or lv_gather like '%a%') + -- + union all + select 'WAIT', + event# + (select count(*) from v$statname) + 1 - pls_adjust, name + from v$event_name + where (lv_gather like '%w%' or lv_gather like '%a%') + -- + &_IF_ORA10_OR_HIGHER union all + &_IF_ORA10_OR_HIGHER select 'TIME' stype, stat_id - pls_adjust statistic#, stat_name name + &_IF_ORA10_OR_HIGHER from v$sys_time_model + &_IF_ORA10_OR_HIGHER where (lv_gather like '%t%' or lv_gather like '%a%') + -- + union all + select 'LATG', + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + name + from v$latch l + where (lv_gather like '%l%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE union all + &_IF_X_ACCESSIBLE select 'BUFG', + &_IF_X_ACCESSIBLE indx + + &_IF_X_ACCESSIBLE (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE kcbwhdes name + &_IF_X_ACCESSIBLE from x$kcbwh + &_IF_X_ACCESSIBLE where (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from v$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + eq_type + from ( + select es.eq_type + &_IF_ORA10_OR_HIGHER ||' - '||lt.name + eq_type, + total_req# + from + v$enqueue_stat es + &_IF_ORA10_OR_HIGHER , v$lock_type lt + &_IF_ORA10_OR_HIGHER where es.eq_type = lt.type + ) e + where (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_statnames + order by stype, statistic#; + + -- store these into an index_by array organized by statistic# for fast lookup + --output('sn_tmp.count='||sn_tmp.count); + --output('lv_gather='||lv_gather); + for i in 1..sn_tmp.count loop + -- output('i='||i||' statistic#='||sn_tmp(i).statistic#); + sn(sn_tmp(i).statistic#) := sn_tmp(i); + end loop; + + + -- main sampling loop + for c in 1..&snapper_count loop + + -- print header if required + lv_header_string := + CASE WHEN output_header = 1 THEN 'HEAD,' END + || CASE WHEN output_sid = 1 THEN ' SID,' END + || CASE WHEN output_username = 1 THEN ' USERNAME ,' END + || CASE WHEN output_time = 1 THEN ' SNAPSHOT START ,' END + || CASE WHEN output_seconds = 1 THEN ' SECONDS,' END + || CASE WHEN output_stype = 1 THEN ' TYPE,' END + || CASE WHEN output_sname = 1 THEN rpad(' STATISTIC',41,' ')||',' END + || CASE WHEN output_delta = 1 THEN ' DELTA,' END + || CASE WHEN output_delta_s = 1 THEN ' DELTA/SEC,' END + || CASE WHEN output_hdelta = 1 THEN ' HDELTA,' END + || CASE WHEN output_hdelta_s = 1 THEN ' HDELTA/SEC,' END + || CASE WHEN output_percent = 1 THEN ' %TIME,' END + || CASE WHEN output_pcthist = 1 THEN ' GRAPH ' END + ; + + + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(rpad('-',length(lv_header_string),'-')); + output(lv_header_string); + output(rpad('-',length(lv_header_string),'-')); + else + if pagesize = -1 and c = 1 then + + output(lv_header_string); + + end if; + end if; + + + if c = 1 then + + get_sessions; + snap(d1,s1); + + else + + get_sessions; + d1 := d2; + s1 := s2; + + end if; -- c = 1 + + dbms_lock.sleep( (&snapper_sleep - (sysdate - d1)) ); + -- dbms_lock.sleep( (&snapper_sleep - (sysdate - d1))*1000/1024 ); + + get_sessions; + snap(d2,s2); + + -- manually coded nested loop outer join for calculating deltas + -- why not use a SQL join? this would require creation of PL/SQL + -- collection object types, but Snapper does not require any changes + -- to the database, so any custom object types are out! + changed_values := 0; + missing_values_s1 := 0; + missing_values_s2 := 0; + + -- remember last disappeared SID so we woudlnt need to output a warning + -- message for each statistic row of that disappeared sid + disappeared_sid := 0; + + i :=1; -- iteration counter (for debugging) + a :=1; -- s1 array index + b :=1; -- s2 array index + + while ( a <= s1.count and b <= s2.count ) loop + + delta := 0; -- don't print + + case + when s1(a).sid = s2(b).sid then + + case + when s1(a).statistic# = s2(b).statistic# then + + delta := s2(b).value - s1(a).value; + if delta != 0 then fout(); end if; + + a := a + 1; + b := b + 1; + + when s1(a).statistic# > s2(b).statistic# then + + delta := s2(b).value; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).statistic# < s2(b).statistic# then + + output('ERROR, s1(a).statistic# < s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + else + output('ERROR, s1(a).statistic# ? s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + end case; -- s1(a).statistic# ... s2(b).statistic# + + when s1(a).sid > s2(b).sid then + + delta := s2(b).value; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).sid < s2(b).sid then + + if disappeared_sid != s2(b).sid then + output('WARN, Session has disappeared during snapshot, ignoring SID='||to_char(s2(b).sid)||' debug(a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count||')'); + end if; + disappeared_sid := s2(b).sid; + a := a + 1; + + else + output('ERROR, Should not be here, SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + end case; -- s1(a).sid ... s2(b).sid + + i:=i+1; + + if delta != 0 then + + changed_values := changed_values + 1; + + end if; -- delta != 0 + + end loop; -- while ( a <= s1.count and b <= s2.count ) + + + if pagesize > 0 and changed_values > 0 then output('-- End of snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(case (d2-d1) when 0 then &snapper_sleep else round((d2-d1) * 86400, 1) end)); output(''); end if; + + end loop; -- for c in 1..snapper_count + +end; +/ + +undefine snapper_oraversion +undefine snapper_sleep +undefine snapper_count +undefine snapper_sid +undefine snapper_options +undefine _IF_ORA10_OR_HIGHER +undefine _IF_ORA11_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11 +undefine _IF_DBMS_SYSTEM_ACCESSIBLE +undefine _IF_X_ACCESSIBLE +col snapper_ora10higher clear +col snapper_ora11higher clear +col snapper_ora11lower clear +col dbms_system_accessible clear + +set serverout off diff --git a/tpt/snapperloop.sql b/tpt/snapperloop.sql new file mode 100644 index 0000000..753c52c --- /dev/null +++ b/tpt/snapperloop.sql @@ -0,0 +1,42012 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set feedback off +prompt +prompt -- Running Snapper 42,000 times in a row, press CTRL+C to cancel... +prompt +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +@snapper "&1" "&2" "&3" "&4" +prompt +prompt SnapperLoop completed successfully. +prompt And the answer to life, the universe and everything is... &_sqlplus_release +prompt +set feedback on diff --git a/tpt/snapperloop.zip b/tpt/snapperloop.zip new file mode 100644 index 0000000..2f62711 Binary files /dev/null and b/tpt/snapperloop.zip differ diff --git a/tpt/snappio.sql b/tpt/snappio.sql new file mode 100644 index 0000000..745833b --- /dev/null +++ b/tpt/snappio.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot... + +@@snapper "stats,gather=s,sinclude=total IO requests|physical.*total bytes" &1 1 all diff --git a/tpt/snappiomb.sql b/tpt/snappiomb.sql new file mode 100644 index 0000000..44d97e9 --- /dev/null +++ b/tpt/snappiomb.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot... + +@@snapper "stats,gather=s,sinclude=physical%bytes" &1 1 all diff --git a/tpt/snapredo.sql b/tpt/snapredo.sql new file mode 100644 index 0000000..3fdc03a --- /dev/null +++ b/tpt/snapredo.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot... + +@@snapper "stats,gather=s,sinclude=redo size" &1 1 all diff --git a/tpt/snapsys.sql b/tpt/snapsys.sql new file mode 100644 index 0000000..1237523 --- /dev/null +++ b/tpt/snapsys.sql @@ -0,0 +1,22 @@ +COL snapsys_start FOR A23 + +WITH FUNCTION sleep(dur IN NUMBER) RETURN NUMBER IS + BEGIN + DBMS_LOCK.SLEEP(dur); + RETURN 1; + END; +SELECT /*+ LEADING (t1, slp) */ + TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') snapsys_start + , t1.name + , t2.value - t1.value delta +FROM + (SELECT /*+ NO_MERGE */ name, value FROM v$sysstat) t1 + , (SELECT /*+ NO_MERGE */ sleep(&1) ret FROM dual) slp + , (SELECT /*+ NO_MERGE */ name, value FROM v$sysstat) t2 +WHERE + t1.name = t2.name +AND slp.ret = 1 +AND t2.value - t1.value != 0 +AND REGEXP_LIKE(t1.name, '&2', 'i') +/ + diff --git a/tpt/snaptime.sql b/tpt/snaptime.sql new file mode 100644 index 0000000..872734b --- /dev/null +++ b/tpt/snaptime.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot... + +@@snapper "stats,gather=t,tinclude=DB Time" &1 1 all diff --git a/tpt/snapundo.sql b/tpt/snapundo.sql new file mode 100644 index 0000000..3e7a3d1 --- /dev/null +++ b/tpt/snapundo.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot... + +@@snapper "stats,gather=s,sinclude=undo change vector size" &1 1 all diff --git a/tpt/snapwait.sql b/tpt/snapwait.sql new file mode 100644 index 0000000..bb0f311 --- /dev/null +++ b/tpt/snapwait.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Taking a &1 second snapshot of wait "&2"... + +@@snapper "stats,gather=w,winclude=&2" &1 1 all diff --git a/tpt/snb.sql b/tpt/snb.sql new file mode 100644 index 0000000..1c44da1 --- /dev/null +++ b/tpt/snb.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +VAR snapper REFCURSOR +@snapper stats,begin 1 1 &mysid + diff --git a/tpt/sne.sql b/tpt/sne.sql new file mode 100644 index 0000000..e006697 --- /dev/null +++ b/tpt/sne.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@snapper stats,end 1 1 &mysid diff --git a/tpt/snr.sql b/tpt/snr.sql new file mode 100644 index 0000000..8b691ad --- /dev/null +++ b/tpt/snr.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +VAR snapper REFCURSOR + +DEF snr_query="&1" + +@snapper stats,begin 1 1 &mysid +PROMPT RUNNING SELECT * FROM (&snr_query);; +SELECT * FROM (&snr_query); +@snapper stats,end 1 1 &mysid + diff --git a/tpt/soff.sql b/tpt/soff.sql new file mode 100644 index 0000000..83cb78a --- /dev/null +++ b/tpt/soff.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt SQL> set serverout off +set serverout off + diff --git a/tpt/sol102.sql b/tpt/sol102.sql new file mode 100644 index 0000000..0159cee --- /dev/null +++ b/tpt/sol102.sql @@ -0,0 +1,63 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set appinfo OFF +set appinfo "SQL*Plus" +set arraysize 500 +set autocommit OFF +set autoprint OFF +set autorecovery OFF +set autotrace OFF +set blockterminator "." +set cmdsep OFF +set colsep " " +set compatibility NATIVE +set concat "." +set copycommit 0 +set copytypecheck ON +set define "&" +set describe DEPTH 1 LINENUM ON INDENT ON +set echo OFF +set editfile "afiedit.sql" +set embedded OFF +set escape OFF +set escchar OFF +set feedback 6 +set flagger OFF +set flush ON +set heading ON +set headsep "|" +set linesize 299 +set logsource "" +set long 10000000 +set longchunksize 10000000 +set markup HTML OFF HEAD " SYS@solaris02/sol102 report" BODY "" TABLE "border='1' align='center' summary='Script output'" SPOOL ON ENTMAP ON PRE OFF +set newpage 1 +set null "" +set numformat "" +set numwidth 10 +set pagesize 5000 +set pause OFF +set recsep WRAP +set recsepchar " " +set serveroutput OFF +set shiftinout invisible +set showmode OFF +set sqlblanklines OFF +set sqlcase MIXED +set sqlcontinue "> " +set sqlnumber ON +set sqlpluscompatibility 10.2.0 +set sqlprefix "#" +set sqlprompt "SQL> " +set sqlterminator ";" +set suffix "sql" +set tab OFF +set termout OFF +set time OFF +set timing OFF +set trimout ON +set trimspool ON +set underline "-" +set verify OFF +set wrap ON diff --git a/tpt/sol112.sql b/tpt/sol112.sql new file mode 100644 index 0000000..60d2081 --- /dev/null +++ b/tpt/sol112.sql @@ -0,0 +1,63 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set appinfo OFF +set appinfo "SQL*Plus" +set arraysize 500 +set autocommit OFF +set autoprint OFF +set autorecovery OFF +set autotrace OFF +set blockterminator "." +set cmdsep OFF +set colsep " " +set compatibility NATIVE +set concat "." +set copycommit 0 +set copytypecheck ON +set define "&" +set describe DEPTH 1 LINENUM ON INDENT ON +set echo OFF +set editfile "afiedit.sql" +set embedded OFF +set escape OFF +set escchar OFF +set feedback 6 +set flagger OFF +set flush ON +set heading ON +set headsep "|" +set linesize 299 +set logsource "" +set long 10000000 +set longchunksize 10000000 +set markup HTML OFF HEAD " SYS@solaris02/sol112 report" BODY "" TABLE "border='1' align='center' summary='Script output'" SPOOL ON ENTMAP ON PRE OFF +set newpage 1 +set null "" +set numformat "" +set numwidth 10 +set pagesize 5000 +set pause OFF +set recsep WRAP +set recsepchar " " +set serveroutput OFF +set shiftinout invisible +set showmode OFF +set sqlblanklines OFF +set sqlcase MIXED +set sqlcontinue "> " +set sqlnumber ON +set sqlpluscompatibility 10.2.0 +set sqlprefix "#" +set sqlprompt "SQL> " +set sqlterminator ";" +set suffix "sql" +set tab OFF +set termout OFF +set time OFF +set timing OFF +set trimout ON +set trimspool ON +set underline "-" +set verify OFF +set wrap ON diff --git a/tpt/someload.sql b/tpt/someload.sql new file mode 100644 index 0000000..b2b1c4b --- /dev/null +++ b/tpt/someload.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Generate some load for &1 hours.... + +DECLARE + j NUMBER; + begin_date DATE := SYSDATE; +BEGIN + WHILE TRUE LOOP + SELECT SUM(LENGTH(TEXT)) INTO j FROM dba_source; + DBMS_LOCK.SLEEP(60 * DBMS_RANDOM.VALUE(0,1)); + END LOOP; +END; +/ + diff --git a/tpt/source.sql b/tpt/source.sql new file mode 100644 index 0000000..3fa2322 --- /dev/null +++ b/tpt/source.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col source_owner for a20 +col source_name for a25 +col source_line head LINE# for 999999 +col source_text for a100 +col source_type noprint + +break on type skip 1 + +select + owner source_owner, + type source_type, + name source_name, + line source_line, + text source_text +from + dba_source +where + lower(owner) like lower('%&1%') +and lower(name) like lower('%&2%') +and lower(text) like lower('%&3%') +order by + source_type, + line +; diff --git a/tpt/source2.sql b/tpt/source2.sql new file mode 100644 index 0000000..d0d1fe3 --- /dev/null +++ b/tpt/source2.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col source_owner head OWNER for a20 +col source_name for a25 +col source_line head LINE# for 999999 +col source_text for a100 +col source_type noprint + +break on type skip 1 + +select + owner source_owner, + type source_type, + name source_name, + line source_line, + text source_text +from + dba_source +where + lower(name) like '&1' +and lower(text) like lower('&2') +order by + source_owner, + source_name, + source_type, + line +; diff --git a/tpt/sout.sql b/tpt/sout.sql new file mode 100644 index 0000000..fe6fd51 --- /dev/null +++ b/tpt/sout.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt set serverout on size 1000000 format wrapped +set serverout on size 1000000 format wrapped diff --git a/tpt/sowalk.sql b/tpt/sowalk.sql new file mode 100644 index 0000000..5e60553 --- /dev/null +++ b/tpt/sowalk.sql @@ -0,0 +1,98 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL addrlen NEW_VALUE addrlen +COL addrmask NEW_VALUE addrmask + +SET TERMOUT OFF +SELECT VSIZE(addr) addrlen, LPAD('X',VSIZE(addr)*2,'X') addrmask FROM x$kcbsw WHERE ROWNUM = 1; +SET TERMOUT ON + +-- ( SELECT /*+ INDEX(x$ksmmem) */ addr m1addr, HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(addr),'&addrmask')+&addrlen*2,'&addrmask')) ) m1parent_addr FROM x$ksmmem) m1, + + + + + + +--SELECT /*+ INDEX(x$ksmmem m) */ +-- addr, +---- ksmmmval VALUE, +-- HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(addr),'&addrmask')+&addrlen*2,'&addrmask')) ) owner_addr +--FROM +-- x$ksmmem m +--WHERE addr > HEXTORAW('00') +--CONNECT BY +-- HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(addr),'&addrmask')+&addrlen*2,'&addrmask')) ) = addr +--START WITH +-- addr = hextoraw('&1') +--/ + + +--SELECT /*+ ORDERED +-- USE_NL(m2,m1) +-- USE_NL(m3,m2) +-- USE_NL(m4) +-- USE_NL(m5) +-- USE_NL(m6) +-- USE_NL(m7) +-- USE_NL(m8) +-- USE_NL(m9) +-- USE_NL(m10) +-- INDEX(m1) +-- INDEX(m2) +-- INDEX(m3) +-- INDEX(m4) +-- INDEX(m5) +-- INDEX(m6) +-- INDEX(m7) +-- INDEX(m8) +-- INDEX(m9) +-- INDEX(m10) +-- NO_MERGE(m1) +-- NO_MERGE(m2) +-- */ +-- m1.m1addr, +-- m2.m2addr, +---- ksmmmval VALUE, +-- HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(m1addr),'&addrmask')+&addrlen*2,'&addrmask')) ) owner_addr +--FROM +-- ( SELECT /*+ NO_MERGE */ addr m1addr, HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(addr),'&addrmask')+&addrlen*2,'&addrmask')) ) m1parent_addr FROM x$ksmmem) m1, +-- ( SELECT /*+ NO_MERGE */ addr m2addr, HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(addr),'&addrmask')+&addrlen*2,'&addrmask')) ) m2parent_addr FROM x$ksmmem) m2 +---- x$ksmmem m3, +---- x$ksmmem m4, +---- x$ksmmem m5, +---- x$ksmmem m6, +---- x$ksmmem m7, +---- x$ksmmem m8, +---- x$ksmmem m9, +---- x$ksmmem m10 +--WHERE +-- m1addr = HEXTORAW('&1') +--AND m2parent_addr = m1addr +---- AND m3.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(m2.addr),'&addrmask')+&addrlen*2,'&addrmask')) ) +---- AND m4.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(m3.addr),'&addrmask')+&addrlen*2,'&addrmask')) ) +---- AND m5.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(m4.addr),'&addrmask')+&addrlen*2,'&addrmask')) ) +---- AND m6.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(m5.addr),'&addrmask')+&addrlen*2,'&addrmask')) ) +---- AND m7.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(m6.addr),'&addrmask')+&addrlen*2,'&addrmask')) ) +---- AND m8.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(m7.addr),'&addrmask')+&addrlen*2,'&addrmask')) ) +---- AND m9.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(m8.addr),'&addrmask')+&addrlen*2,'&addrmask')) ) +---- AND m10.addr = HEXTORAW( TRIM(TO_CHAR(TO_NUMBER(RAWTOHEX(m9.addr),'&addrmask')+&addrlen*2,'&addrmask')) ) +--/ + +SELECT /*+ ORDERED */ + b.ksmmmval +FROM + ( SELECT /*+ NO_MERGE */ ksmmmval FROM x$ksmmem WHERE addr = (SELECT /*+ NO_MERGE NO_UNNEST */ + CAST(HEXTORAW( + TRIM(TO_CHAR(TO_NUMBER('30F3C504','&addrmask')+&addrlen*2,'&addrmask')) + ) + AS RAW(4) + ) + FROM DUAL + ) + ) a, + x$ksmmem b +WHERE + a.ksmmmval = b.addr +/ diff --git a/tpt/sp.sql b/tpt/sp.sql new file mode 100644 index 0000000..6500252 --- /dev/null +++ b/tpt/sp.sql @@ -0,0 +1,9 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show SPFILE parameters from v$spparameter matching %&1% +col sp_name head NAME for a40 +col sp_value head VALUE for a80 +col sp_sid head SID for a10 + +select sid sp_sid, name sp_name, value sp_value, isspecified from v$spparameter where lower(name) like lower('%&1%') and isspecified = 'TRUE'; diff --git a/tpt/splast.sql b/tpt/splast.sql new file mode 100644 index 0000000..dce8dff --- /dev/null +++ b/tpt/splast.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +col end_snap new_value end_snap +col begin_snap new_value begin_snap + +with s as ( + select max(snap_id) end_snap from stats$snapshot +) +select end_snap, (select max(snap_id) begin_snap from stats$snapshot where snap_id < s.end_snap) begin_snap +from s; + +def report_name=splast.txt + +-- @?/rdbms/admin/spreport +@$HOME/work/oracle/statspack/11.2/spreport + +undef end_snap +undef begin_snap + +set termout on + +host open splast.txt diff --git a/tpt/spmem.sql b/tpt/spmem.sql new file mode 100644 index 0000000..c7b0c46 --- /dev/null +++ b/tpt/spmem.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt +prompt WARNING!!! This script will query X$KSMSP, which will cause heavy shared pool latch contention +prompt in systems under load and with large shared pool. This may even completely hang +prompt your instance until the query has finished! You probably do not want to run this in production! +prompt +pause Press ENTER to continue, CTRL+C to cancel... + +select ksmchcls, ksmchcom, count(*), sum(ksmchsiz), avg(ksmchsiz), max(ksmchsiz) from x$ksmsp group by ksmchcls, ksmchcom +/ diff --git a/tpt/spoolrun.sql b/tpt/spoolrun.sql new file mode 100644 index 0000000..cd47e46 --- /dev/null +++ b/tpt/spoolrun.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +def _spool_extension=&1 + +spool %SQLPATH%/tmp/output_&_connect_identifier..&_spool_extension +@&2 +spool off + +host start %SQLPATH%/tmp/output_&_connect_identifier..&_spool_extension +undef _spool_extension diff --git a/tpt/sprivs.sql b/tpt/sprivs.sql new file mode 100644 index 0000000..5f64ede --- /dev/null +++ b/tpt/sprivs.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@sprivs2 "%&1%" + diff --git a/tpt/sprivs2.sql b/tpt/sprivs2.sql new file mode 100644 index 0000000..5fc6c7b --- /dev/null +++ b/tpt/sprivs2.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from dba_sys_privs where upper(privilege) like upper('&1'); diff --git a/tpt/sql.sql b/tpt/sql.sql new file mode 100644 index 0000000..31d3c20 --- /dev/null +++ b/tpt/sql.sql @@ -0,0 +1,41 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sql_sql_text head SQL_TEXT format a110 word_wrap +col sql_child_number head "CH#" for 9999 + +prompt Show SQL text, child cursors and execution stats for SQL hash value &1 child &2 + +select + hash_value, + child_number sql_child_number, + plan_hash_value plan_hash, + sql_text sql_sql_text +from + v$sql +where + hash_value in (&1); + +select + child_number sql_child_number, + address parent_handle, + child_address object_handle, + parse_calls parses, + loads h_parses, + executions, + fetches, + rows_processed, + buffer_gets LIOS, + disk_reads PIOS, + sorts, +-- address, + cpu_time/1000 cpu_ms, + elapsed_time/1000 ela_ms, +-- sharable_mem, +-- persistent_mem, +-- runtime_mem, + users_executing +from + v$sql +where + hash_value in (&1); diff --git a/tpt/sql_profile_hints.sql b/tpt/sql_profile_hints.sql new file mode 100644 index 0000000..49a3f56 --- /dev/null +++ b/tpt/sql_profile_hints.sql @@ -0,0 +1,25 @@ +-- This script will show existing SQL profile hints. +-- +-- FYI with a different query you can also view what profiles would be created if you accept a SQL Tuning task result: +-- https://blog.dbi-services.com/oracle-sql-profiles-check-what-they-do-before-accepting-them-blindly/ + +SELECT + hint outline_hints +FROM ( + SELECT p.name, p.signature, p.category, ROW_NUMBER() + OVER (PARTITION BY d.signature, d.category ORDER BY d.signature) row_num, + EXTRACTVALUE(VALUE(t), '/hint') hint + FROM + sys.sqlobj$data d + , dba_sql_profiles p, + TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(d.comp_data), '/outline_data/hint'))) t +WHERE + d.obj_type = 1 +AND p.signature = d.signature +AND p.category = d.category +AND p.name LIKE ('&1')) +ORDER BY + name + , row_num +/ + diff --git a/tpt/sqla.sql b/tpt/sqla.sql new file mode 100644 index 0000000..b007081 --- /dev/null +++ b/tpt/sqla.sql @@ -0,0 +1,37 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sql_sql_text head SQL_TEXT format a150 word_wrap +col sql_child_number head "CH#" for 999 + +select + child_number sql_child_number, + sql_text sql_sql_text +from + v$sql +where + address = hextoraw(upper('&1')); + +select + child_number sql_child_number, + address parent_handle, + child_address object_handle, + parse_calls parses, + loads h_parses, + executions, + fetches, + rows_processed, + buffer_gets LIOS, + disk_reads PIOS, + sorts, +-- address, + cpu_time/1000 cpu_ms, + elapsed_time/1000 ela_ms, +-- sharable_mem, +-- persistent_mem, +-- runtime_mem, + users_executing +from + v$sql +where + address = hextoraw(upper('&1')); diff --git a/tpt/sqlbinds.sql b/tpt/sqlbinds.sql new file mode 100644 index 0000000..13a2e53 --- /dev/null +++ b/tpt/sqlbinds.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show captured binds from V$SQL_BIND_CAPTURE... + +COL sqlbinds_name HEAD NAME FOR A15 +COL value_string FOR A100 +COL value_anydata FOR A100 +COL sqlbinds_pos HEAD POS FOR 9999 +COL sqlbinds_chld HEAD CHLD FOR 9999 +COL sqlbinds_datatype HEAD DATATYPE FOR A15 +BREAK ON sqlbinds_chld SKIP 1 + +SELECT +-- ADDRESS parent_cursor + SQL_ID +, CHILD_NUMBER sqlbinds_chld +, POSITION sqlbinds_pos +, NAME sqlbinds_name +--, DUP_POSITION +--, DATATYPE +, DATATYPE_STRING sqlbinds_datatype +, CHARACTER_SID +, MAX_LENGTH +, PRECISION +, SCALE +, VALUE_STRING +, WAS_CAPTURED +, LAST_CAPTURED +, VALUE_ANYDATA +FROM + v$sql_bind_capture c +WHERE + sql_id like '&1' +AND child_number like '&2' +AND (c.name like '&3' escape '\' OR REGEXP_LIKE(name, '&3', 'i')) +ORDER BY + address + , sql_id + , child_number + , position +/ diff --git a/tpt/sqlbindsum.sql b/tpt/sqlbindsum.sql new file mode 100644 index 0000000..34b7564 --- /dev/null +++ b/tpt/sqlbindsum.sql @@ -0,0 +1,41 @@ + +COL BIND_NAME FOR A30 + +SELECT * FROM ( + SELECT + s.sql_id + , position + , bind_name + , COUNT(DISTINCT s.address) parents + , COUNT(DISTINCT RAWTOHEX(s.address||':'||s.child_number)) children + , COUNT(DISTINCT datatype) datatypes + --, COUNT(DISTINCT datatype)||CASE WHEN COUNT(DISTINCT datatype) > 1 THEN ' ('||TO_CHAR(MIN(datatype))||'..'||TO_CHAR(MAX(datatype))||')' END for_example + , COUNT(DISTINCT max_length) maxlengths + , COUNT(DISTINCT array_len) maxarraylens + FROM + v$sql s + , v$sql_bind_metadata sbm + WHERE + s.child_address = sbm.address + AND s.sql_id LIKE '&1' + GROUP BY + s.sql_id + , sbm.position + , sbm.bind_name + ORDER BY + s.sql_id + , sbm.position +) +WHERE + rownum <= 30 +/ + + +-- 1 ADDRESS RAW(8) +-- 2 POSITION NUMBER +-- 3 DATATYPE NUMBER +-- 4 MAX_LENGTH NUMBER +-- 5 ARRAY_LEN NUMBER +-- 6 BIND_NAME VARCHAR2(30) +-- 7 CON_ID NUMBER + diff --git a/tpt/sqlcsstat.sql b/tpt/sqlcsstat.sql new file mode 100644 index 0000000..7e2d6fe --- /dev/null +++ b/tpt/sqlcsstat.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + * +from + v$sql_cs_statistics +where + sql_id = '&1' +and child_number like '&2' +order by + sql_id + , child_number +/ + diff --git a/tpt/sqlexecid.sql b/tpt/sqlexecid.sql new file mode 100644 index 0000000..b032051 --- /dev/null +++ b/tpt/sqlexecid.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + NVL(qc_instance_id, inst_id) user_inst_id + , MIN(TO_CHAR(sql_exec_id,'XXXXXXXX')) min_sql_exec_id + , MAX(TO_CHAR(sql_exec_id,'XXXXXXXX')) max_sql_exec_id +FROM + gv$active_session_history +GROUP BY + NVL(qc_instance_id, inst_id) +ORDER BY + user_inst_id +/ + diff --git a/tpt/sqlf.sql b/tpt/sqlf.sql new file mode 100644 index 0000000..2eefe6d --- /dev/null +++ b/tpt/sqlf.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sqlf_sql_fulltext head SQL_FULLTEXT for a100 word_wrap + +select sql_fulltext sqlf_sql_fulltext from v$sql where sql_id like '&1'; diff --git a/tpt/sqlfh.sql b/tpt/sqlfh.sql new file mode 100644 index 0000000..f246728 --- /dev/null +++ b/tpt/sqlfh.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: sqlfh.sql (SQL Feature Hieararchy) +-- +-- Purpose: Display the full SQL Feature Hieararchy from v$sql_feature +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sqlfh +-- +-- Other: Requires Oracle 11g+ +-- +-------------------------------------------------------------------------------- + +COL sqlfh_feature HEAD SQL_FEATURE FOR A55 + +PROMPT Display full SQL Feature Hierarchy from v$sql_feature ... +SELECT + LPAD(' ', (level-1)*2) || REPLACE(f.sql_feature, 'QKSFM_','') sqlfh_feature + , f.description +FROM + v$sql_feature f + , v$sql_feature_hierarchy fh +WHERE + f.sql_feature = fh.sql_feature +CONNECT BY fh.parent_id = PRIOR f.sql_Feature +START WITH fh.sql_feature = 'QKSFM_ALL' +/ + diff --git a/tpt/sqlflame.sql b/tpt/sqlflame.sql new file mode 100644 index 0000000..f59f369 --- /dev/null +++ b/tpt/sqlflame.sql @@ -0,0 +1,100 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Name: sqlflame.sql +-- +-- Purpose: Demo script for displaying execution plan profile as a flame chart +-- +-- Usage: @sqlflame.sql +-- Note that you'll need to download Brendan Gregg's flamegraph.pl +-- https://github.com/brendangregg/FlameGraph and make sure that it's +-- in your PATH (or edit this script to use it from a hardcoded location) +-- +-- Note that you'll have to replace HOST OPEN with HOST START in the +-- end of this file if you're using sqlplus client on Windows +-- +-- Author: Tanel Poder - https://tanelpoder.com +-- +-- Examples: https://tanelpoder.com/posts/visualizing-sql-plan-execution-time-with-flamegraphs/ +-- https://tanelpoder.com/posts/sql-plan-flamegraph-loop-row-counts/ +-- +-- Other: This is an early version mostly meant as a proof of concept for +-- illustrating that a modern RDBMS SQL execution plan profile +-- can be treated just like any code profile (FlameGraphs were +-- initially used for process stack profiling) +-- +-- This script currently relies on the V$SQL_PLAN_STATISTICS_ALL source +-- so you'll need to run your query with statistics_level=all or +-- with the GATHER_PLAN_STATISTICS hint. +-- +-- Credits: Brendan Gregg invented and popularized FlameGraphs, if you want to +-- understand their logic better, read the articles at: +-- http://www.brendangregg.com/flamegraphs.html +-- +-------------------------------------------------------------------------------- + +SET HEADING OFF LINESIZE 32767 PAGESIZE 0 TRIMSPOOL ON TRIMOUT ON LONG 9999999 VERIFY OFF LONGCHUNKSIZE 100000 FEEDBACK OFF APPINFO OFF + +PROMPT +PROMPT -- SQLFlame 0.4 by Tanel Poder ( https://tanelpoder.com ) + +SET TERMOUT OFF + +WITH sq AS ( + SELECT /*+ MATERIALIZE */ + sp.id, sp.parent_id, sp.operation, sp.options + , sp.object_owner, sp.object_name, ss.last_elapsed_time, ss.elapsed_time, ss.last_starts, ss.last_output_rows + FROM v$sql_plan_statistics_all ss INNER JOIN + v$sql_plan sp + ON ( + sp.sql_id=ss.sql_id + AND sp.child_number=ss.child_number + AND sp.address=ss.address + AND sp.id=ss.id + ) + AND sp.sql_id='&1' + AND sp.child_number=&2 +), deltas AS ( + SELECT par.id, par.elapsed_time - SUM(chi.elapsed_time) self_elapsed_time + FROM sq par LEFT OUTER JOIN + sq chi + ON chi.parent_id = par.id + GROUP BY par.id, par.elapsed_time +), combined AS ( + SELECT sq.id, sq.parent_id, sq.operation, sq.options + , sq.object_owner, sq.object_name, sq.last_elapsed_time, sq.elapsed_time, sq.last_starts, sq.last_output_rows + , NVL(deltas.self_elapsed_time, sq.elapsed_time) self_elapsed_time + FROM + sq, deltas + WHERE + sq.id = deltas.id +) +SELECT + '0 - SELECT STATEMENT'||TRIM(SYS_CONNECT_BY_PATH(id||' - '||operation||NVL2(options,' '||options,NULL) + ||NVL2(object_owner||object_name, ' ['||object_owner||'.'||object_name||']', NULL) + ||' starts='||last_starts|| ' rows='||last_output_rows, ';'))||' '||TRIM(ROUND(self_elapsed_time/1000)) +FROM + combined +CONNECT BY + parent_id = PRIOR id + START WITH parent_id = 0 +ORDER BY + id ASC +. + +spool sqlflame_stacks.txt +/ +spool off + +SET TERMOUT ON HEADING ON PAGESIZE 5000 LINESIZE 999 FEEDBACK ON + +HOST flamegraph.pl --countname=Milliseconds --title="sql_id=&1" sqlflame_stacks.txt > sqlflame_&1..svg + +-- Windows +-- HOST START sqlflame_&1..svg + +-- MacOS +HOST OPEN sqlflame_&1..svg + diff --git a/tpt/sqlfn.sql b/tpt/sqlfn.sql new file mode 100644 index 0000000..6b5e71b --- /dev/null +++ b/tpt/sqlfn.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sqlfn_descr HEAD DESCRIPTION FOR A100 WORD_WRAP +COL sqlfn_name HEAD NAME FOR A30 + +SELECT + func_id + , name sqlfn_name + , offloadable +-- , usage + , minargs + , maxargs + -- this is just to avoid clutter on screen + , CASE WHEN name != descr THEN descr ELSE null END sqlfn_descr +FROM + v$sqlfn_metadata +WHERE + UPPER(name) LIKE UPPER('%&1%') +/ + diff --git a/tpt/sqlfna.sql b/tpt/sqlfna.sql new file mode 100644 index 0000000..41cd026 --- /dev/null +++ b/tpt/sqlfna.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sqlfna_name HEAD NAME FOR A30 +BREAK ON sqlfna_name SKIP 1 ON func_id + +SELECT + f.name sqlfna_name + , f.func_id + , f.analytic + , f.aggregate + , f.offloadable +-- , f.usage + , f.minargs + , f.maxargs + , a.argnum + , a.datatype + , a.descr +-- , f.descr +FROM + v$sqlfn_metadata f + , v$sqlfn_arg_metadata a +WHERE + a.func_id = f.func_id +AND UPPER(f.name) LIKE UPPER('&1') +ORDER BY + f.name + , f.func_id + , f.analytic + , f.aggregate + , a.argnum +/ + diff --git a/tpt/sqlh.sql b/tpt/sqlh.sql new file mode 100644 index 0000000..63b8df9 --- /dev/null +++ b/tpt/sqlh.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select sql_id, sql_text from v$sql where hash_value = &1; diff --git a/tpt/sqli.sql b/tpt/sqli.sql new file mode 100644 index 0000000..5a48bb6 --- /dev/null +++ b/tpt/sqli.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@sqlid "&1" \ No newline at end of file diff --git a/tpt/sqlid.sql b/tpt/sqlid.sql new file mode 100644 index 0000000..b47c4db --- /dev/null +++ b/tpt/sqlid.sql @@ -0,0 +1,76 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sql_sql_text head SQL_TEXT format a150 word_wrap +col sql_child_number head "CH#" for 9999 + + +col cpu_sec_exec FOR 999999.999 +col ela_sec_exec FOR 999999.999 +col lios_per_exec FOR 9999999999 +col pios_per_exec FOR 9999999999 + +prompt Show SQL text, child cursors and execution stats for SQLID &1 child &2 + +select + hash_value, + plan_hash_value, + child_number sql_child_number, + sql_text sql_sql_text +from + v$sql +where + sql_id = ('&1') +and child_number like '&2' +order by + sql_id, + hash_value, + child_number +/ + +select + child_number sql_child_number, + plan_hash_value plan_hash, + parse_calls parses, + loads h_parses, + executions, + fetches, + rows_processed, + rows_processed/nullif(fetches,0) rows_per_fetch, + ROUND(cpu_time/NULLIF(executions,0)/1000000,3) cpu_sec_exec, + ROUND(elapsed_time/NULLIF(executions,0)/1000000,3) ela_sec_exec, + ROUND(buffer_gets/NULLIF(executions,0),3) lios_per_exec, + ROUND(disk_reads/NULLIF(executions,0),3) pios_per_exec, + ROUND(cpu_time/1000000,3) total_cpu_sec, + ROUND(elapsed_time/1000000,3) total_ela_sec, + user_io_wait_time/1000000 total_iowait_sec, + buffer_gets total_LIOS, + disk_reads total_pios, + sorts +-- address, +-- sharable_mem, +-- persistent_mem, +-- runtime_mem, +-- , PHYSICAL_READ_REQUESTS +-- , PHYSICAL_READ_BYTES +-- , PHYSICAL_WRITE_REQUESTS +-- , PHYSICAL_WRITE_BYTES +-- , IO_CELL_OFFLOAD_ELIGIBLE_BYTES +-- , IO_INTERCONNECT_BYTES +-- , IO_CELL_UNCOMPRESSED_BYTES +-- , IO_CELL_OFFLOAD_RETURNED_BYTES + , users_executing + , last_active_time + , address parent_handle + , child_address object_handle +from + v$sql +where + sql_id = ('&1') +and child_number like '&2' +order by + sql_id, + hash_value, + child_number +/ + diff --git a/tpt/sqlidx.sql b/tpt/sqlidx.sql new file mode 100644 index 0000000..9d320ef --- /dev/null +++ b/tpt/sqlidx.sql @@ -0,0 +1,96 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Author: Tanel Poder (http://tanelpoder.com | @tanelpoder ) +-- Purpose: A temporary script/hack to display exadata-specific metrics along normal SQL stuff from V$SQL + +col sql_sql_text head SQL_TEXT format a150 word_wrap +col sql_child_number head "CH#" for 999 +col offl_attempted_mb HEAD OFFLOAD_MB FOR A14 JUST RIGHT + +prompt Show SQL text, child cursors and execution stats for SQLID &1 child &2 + +select + hash_value, + plan_hash_value, + child_number sql_child_number, + sql_text sql_sql_text +from + v$sql +where + sql_id = ('&1') +and child_number like '&2' +order by + sql_id, + hash_value, + child_number +/ + +select + child_number sql_child_number, + address parent_handle, + child_address object_handle, + plan_hash_value plan_hash, + parse_calls parses, + loads h_parses, + executions, + fetches, + rows_processed, + rows_processed/nullif(fetches,0) rows_per_fetch, + cpu_time/1000000 cpu_sec, + cpu_time/NULLIF(executions,0)/1000000 cpu_sec_exec, + elapsed_time/1000000 ela_sec, + buffer_gets LIOS, + disk_reads PIOS, + sorts +-- address, +-- sharable_mem, +-- persistent_mem, +-- runtime_mem, +-- , PHYSICAL_READ_REQUESTS +-- , PHYSICAL_READ_BYTES +-- , PHYSICAL_WRITE_REQUESTS +-- , PHYSICAL_WRITE_BYTES +-- , OPTIMIZED_PHY_READ_REQUESTS +-- , IO_CELL_OFFLOAD_ELIGIBLE_BYTES +-- , IO_INTERCONNECT_BYTES +-- , IO_CELL_UNCOMPRESSED_BYTES +-- , IO_CELL_OFFLOAD_RETURNED_BYTES + , users_executing +from + v$sql +where + sql_id = ('&1') +and child_number like '&2' +order by + sql_id, + hash_value, + child_number +/ + +select + child_number sql_child_number + , plan_hash_value plan_hash + , LPAD(CASE WHEN io_cell_offload_eligible_bytes > 0 THEN TO_CHAR(ROUND(io_cell_offload_eligible_bytes / 1048576)) ELSE 'NOT ATTEMPTED' END, 14) offl_attempted_mb +-- , ROUND(io_cell_offload_eligible_bytes / 1048576) offl_attempted_mb + , ROUND((1-(io_cell_offload_returned_bytes/NULLIF(io_cell_offload_eligible_bytes,0)))*100) scan_offl_saving + , ROUND(io_interconnect_bytes / 1048576) tot_ic_xfer_mb + , ROUND((1-(io_interconnect_bytes/NULLIF(physical_read_bytes,0)))*100) tot_ic_xfer_saving + , ROUND(physical_read_bytes / NULLIF(executions,0) / 1048576) avg_mb_rd_exec + , ROUND(physical_read_bytes / NULLIF(physical_read_requests,0) / 1024 ) avg_kb_rd_io + , ROUND(physical_write_bytes / NULLIF(executions,0) / 1048576) avg_mb_wr_exec + , ROUND(physical_write_bytes / NULLIF(physical_write_requests,0) / 1024 ) avg_kb_wr_io + , ROUND(optimized_phy_read_requests / NULLIF(physical_read_requests,0) * 100) pct_optim +-- , io_cell_uncompressed_bytes +from + v$sql +where + sql_id = ('&1') +and child_number like '&2' +order by + sql_id, + hash_value, + child_number +/ +--@pr + diff --git a/tpt/sqll.sql b/tpt/sqll.sql new file mode 100644 index 0000000..c9d7df1 --- /dev/null +++ b/tpt/sqll.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col sqll_sql_text head SQL_TEXT word_wrap + +select sql_text sqll_sql_text from v$sqltext where hash_value = &1 order by piece; \ No newline at end of file diff --git a/tpt/sqlmem.sql b/tpt/sqlmem.sql new file mode 100644 index 0000000..42d28f5 --- /dev/null +++ b/tpt/sqlmem.sql @@ -0,0 +1,65 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show shared pool memory usage of SQL statement with SQL_ID &1 + +-- uncomment the chunk_ptr and/or subheap_desc if you want more detailed breakdown of individual chunk allocations + +COL sqlmem_structure HEAD STRUCTURE FOR A20 +COL sqlmem_function HEAD FUNCTION FOR A20 +COL sqlmem_chunk_com HEAD CHUNK_COM FOR A20 +COL sqlmem_heap_desc HEAD HEAP_ADDR FOR A16 + + +SELECT + child_number + , sharable_mem + , persistent_mem + , runtime_mem +-- , typecheck_mem +FROM + v$sql +WHERE + sql_id = '&1' +/ + +-- the hints below are needed on oracle 12 as the CBO ended up +-- changing ignoring the join order specified in the GV$ view hints + +SELECT /*+ NO_MERGE(@sel$2) NO_MERGE(@sel$3) LEADING(@sel$3 c) */ +-- SELECT /*+ NO_MERGE(@sel$2) NO_MERGE(@sel$3) LEADING(@sel$4 c) xNO_MERGE(@"SEL$4") */ +-- sql_text +-- , sql_fulltext +-- hash_value +-- , sql_id + sum(chunk_size) total_size + , trunc(avg(chunk_size)) avg_size + , count(*) chunks + , alloc_class + , chunk_type + , structure sqlmem_structure + , function sqlmem_function + , chunk_com sqlmem_chunk_com + , heap_desc sqlmem_heap_desc +-- , chunk_ptr +-- , subheap_desc +FROM + v$sql_shared_memory s +WHERE + sql_id = '&1' +-- hash_value = &1 +GROUP BY + hash_value + , sql_id + , heap_desc + , structure + , function + , chunk_com +-- , chunk_ptr + , alloc_class + , chunk_type +-- , subheap_desc +ORDER BY + total_size DESC +/ + diff --git a/tpt/sqlmemh.sql b/tpt/sqlmemh.sql new file mode 100644 index 0000000..6decbd2 --- /dev/null +++ b/tpt/sqlmemh.sql @@ -0,0 +1,63 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show shared pool memory usage of SQL statement with hash value &1 + +-- uncomment the chunk_ptr and/or subheap_desc if you want more detailed breakdown of individual chunk allocations + +COL sqlmem_structure HEAD STRUCTURE FOR A20 +COL sqlmem_function HEAD FUNCTION FOR A20 +COL sqlmem_chunk_com HEAD CHUNK_COM FOR A20 +COL sqlmem_heap_desc HEAD HEAP_ADDR FOR A16 + + +SELECT + child_number + , sharable_mem + , persistent_mem + , runtime_mem +-- , typecheck_mem +FROM + v$sql +WHERE + hash_value = &1 +/ + +-- the hints below are needed on oracle 12 as the CBO ended up +-- changing ignoring the join order specified in the GV$ view hints + +SELECT /*+ NO_MERGE(@sel$2) NO_MERGE(@sel$3) LEADING(@sel$3 c) */ +-- sql_text +-- , sql_fulltext +-- hash_value +-- , sql_id + sum(chunk_size) total_size + , trunc(avg(chunk_size)) avg_size + , count(*) chunks + , alloc_class + , chunk_type + , structure sqlmem_structure + , function sqlmem_function + , chunk_com sqlmem_chunk_com + , heap_desc sqlmem_heap_desc +-- , chunk_ptr +-- , subheap_desc +FROM + v$sql_shared_memory s +WHERE + hash_value = &1 +GROUP BY +-- hash_value +-- , sql_id + heap_desc + , structure + , function + , chunk_com +-- , chunk_ptr + , alloc_class + , chunk_type +-- , subheap_desc +ORDER BY + total_size DESC +/ + diff --git a/tpt/sqlmemx.sql b/tpt/sqlmemx.sql new file mode 100644 index 0000000..ea1e7b5 --- /dev/null +++ b/tpt/sqlmemx.sql @@ -0,0 +1,52 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show shared pool memory usage of SQL statement with SQL_ID &1 + +-- uncomment the chunk_ptr and/or subheap_desc if you want more detailed breakdown of individual chunk allocations + +COL sqlmem_structure HEAD STRUCTURE FOR A20 +COL sqlmem_function HEAD FUNCTION FOR A20 +COL sqlmem_chunk_com HEAD CHUNK_COM FOR A20 +COL sqlmem_heap_desc HEAD HEAP_ADDR FOR A16 + + +SELECT + child_number + , sharable_mem + , persistent_mem + , runtime_mem +-- , typecheck_mem +FROM + v$sql +WHERE + sql_id = '&1' +/ + +-- the hints below are needed on oracle 12 as the CBO ended up +-- changing ignoring the join order specified in the GV$ view hints + +SELECT /*+ NO_MERGE(@sel$2) NO_MERGE(@sel$3) LEADING(@sel$3 c) */ +-- sql_text +-- , sql_fulltext +-- hash_value +-- , sql_id + chunk_size + , alloc_class + , chunk_type + , structure sqlmem_structure + , function sqlmem_function + , chunk_com sqlmem_chunk_com + , heap_desc sqlmem_heap_desc + , chunk_ptr + , subheap_desc +FROM + v$sql_shared_memory s +WHERE + sql_id = '&1' +ORDER BY + heap_desc + , subheap_desc + , chunk_ptr +/ + diff --git a/tpt/sqlmon.sql b/tpt/sqlmon.sql new file mode 100644 index 0000000..456840d --- /dev/null +++ b/tpt/sqlmon.sql @@ -0,0 +1,94 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: sqlmon.sql +-- Purpose: Spool a SQL Monitoring report to a local HTML file and open it +-- in your browser. +-- +-- Authors: Adrian Billington and Tanel Poder +-- Copyright: (c) Gluent, Inc. [http://gluent.com] +-- +-- Usage: @sqlmon +-- +-- Other: This script will report the latest/newest monitored SQL statement +-- of a provided session. +-- Ideally you should run this script from sqlplus running in your +-- workstation, as this way sqlplus will spool it to a local file +-- (and your local browser can open it) +-- +-------------------------------------------------------------------------------- + +SET HEADING OFF LINESIZE 32767 PAGESIZE 0 TRIMSPOOL ON TRIMOUT ON LONG 9999999 VERIFY OFF LONGCHUNKSIZE 100000 FEEDBACK OFF +SET TERMOUT OFF +SET TIMING OFF +SET DEFINE ON + +col _dbname NEW_VALUE _v_dbname +col _sid NEW_VALUE _v_sid +col _sql_id NEW_VALUE _v_sql_id +col _sql_exec_id NEW_VALUE _v_sql_exec_id +col _sql_exec_start NEW_VALUE _v_sql_exec_start +col _sql_exec_start_glu NEW_VALUE _v_sql_exec_start_glu +col _plan_hash_value NEW_VALUE _v_plan_hash_value +col _sql_child_number NEW_VALUE _v_sql_child_number + +SELECT + SYS_CONTEXT('USERENV', 'INSTANCE_NAME') AS "_dbname" +, m.sid AS "_sid" +, MAX(m.sql_id) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC) AS "_sql_id" +, TO_CHAR(MAX(m.sql_exec_id) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC)) AS "_sql_exec_id" +, TO_CHAR(MAX(m.sql_exec_start) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC), + 'YYMMDD_HH24MISS') AS "_sql_exec_start" +, TO_CHAR(MAX(m.sql_exec_start) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC), + 'YYYYMMDD_HH24MISS') AS "_sql_exec_start_glu" +, MAX(m.sql_plan_hash_value) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC) AS "_plan_hash_value" +, MAX(s.child_number) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC) AS "_sql_child_number" +FROM v$sql_monitor m + INNER JOIN + v$sql s + ON ( s.sql_id = m.sql_id + AND s.child_address = m.sql_child_address) +WHERE m.sid = &1 +AND UPPER(m.sql_text) NOT LIKE 'EXPLAIN PLAN%' +GROUP BY + m.sid +; + +SPOOL sqlmon_&_v_dbname._&_v_sql_id._&_v_sql_exec_start._&_v_sql_exec_id..html + +SELECT + REGEXP_REPLACE( + DBMS_SQLTUNE.REPORT_SQL_MONITOR( + session_id => &_v_sid, + sql_id => '&_v_sql_id', + sql_exec_id => '&_v_sql_exec_id', + sql_exec_start => TO_DATE('&_v_sql_exec_start', 'YYMMDD_HH24MISS'), + report_level => 'ALL', + type => 'ACTIVE'), + 'overflow:hidden', '') +FROM dual +/ + +SPOOL OFF + +SET TERMOUT ON HEADING ON PAGESIZE 5000 LINESIZE 999 FEEDBACK ON +SET TIMING ON + +HOST open sqlmon_&_v_dbname._&_v_sql_id._&_v_sql_exec_start._&_v_sql_exec_id..html +--HOST open http://localhost:8000/sqlmon_&_v_dbname._&_v_sql_id._&_v_sql_exec_start._&_v_sql_exec_id..html + +undefine _v_dbname +undefine _v_sid +undefine _v_sql_id +undefine _v_sql_exec_id +undefine _v_sql_exec_start +undefine _v_plan_hash_value +undefine _v_sql_child_number diff --git a/tpt/sqlmon_restarts.sql b/tpt/sqlmon_restarts.sql new file mode 100644 index 0000000..973f8bd --- /dev/null +++ b/tpt/sqlmon_restarts.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Purpose: List UPDATE/DELETE statements that have experienced restarts due to write consistency from V$SQL_PLAN_MONITOR + +SELECT + inst_id + , sql_id + , starts + , sql_exec_start + , sql_exec_id + , plan_operation + , plan_object_owner||'.'||plan_object_name object_name +FROM + gv$sql_plan_monitor +WHERE + plan_line_id = 1 +AND starts > 1 +ORDER BY + sql_id + , sql_exec_start +/ + diff --git a/tpt/sqlmon_sn.sql b/tpt/sqlmon_sn.sql new file mode 100644 index 0000000..b5a3924 --- /dev/null +++ b/tpt/sqlmon_sn.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT Querying V$SQL_MONITOR_STATNAME... + +SELECT + id + , group_id + , CASE type + WHEN 1 THEN 'CUMULATIVE' + WHEN 2 THEN 'RESOURCE' + WHEN 3 THEN 'DISCRETE_MAX' + WHEN 4 THEN 'DISCRETE_REFMAX1' + WHEN 5 THEN 'DISCRETE_REF1' + WHEN 7 THEN 'DIFFERENCE' + ELSE TO_CHAR(type) + END stat_type + , name + , description +FROM + v$sql_monitor_statname +/ + diff --git a/tpt/sqlmoni.sql b/tpt/sqlmoni.sql new file mode 100644 index 0000000..477f76f --- /dev/null +++ b/tpt/sqlmoni.sql @@ -0,0 +1,90 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: sqlmon.sql +-- Purpose: Spool a SQL Monitoring report to a local HTML file and open it +-- in your browser. +-- +-- Authors: Adrian Billington and Tanel Poder +-- Copyright: (c) Gluent, Inc. [http://gluent.com] +-- +-- Usage: @sqlmon +-- +-- Other: This script will report the latest/newest monitored SQL statement +-- of a provided session. +-- Ideally you should run this script from sqlplus running in your +-- workstation, as this way sqlplus will spool it to a local file +-- (and your local browser can open it) +-- +-------------------------------------------------------------------------------- + +SET HEADING OFF LINESIZE 32767 PAGESIZE 0 TRIMSPOOL ON TRIMOUT ON LONG 9999999 VERIFY OFF LONGCHUNKSIZE 100000 FEEDBACK OFF +SET TERMOUT OFF +SET TIMING OFF +SET DEFINE ON + +col _dbname NEW_VALUE _v_dbname +col _sql_id NEW_VALUE _v_sql_id +col _sql_exec_id NEW_VALUE _v_sql_exec_id +col _sql_exec_start NEW_VALUE _v_sql_exec_start +col _sql_exec_start_glu NEW_VALUE _v_sql_exec_start_glu +col _plan_hash_value NEW_VALUE _v_plan_hash_value +col _sql_child_number NEW_VALUE _v_sql_child_number + +SELECT + SYS_CONTEXT('USERENV', 'INSTANCE_NAME') AS "_dbname" +, MAX(m.sql_id) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC) AS "_sql_id" +, TO_CHAR(MAX(m.sql_exec_id) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC)) AS "_sql_exec_id" +, TO_CHAR(MAX(m.sql_exec_start) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC), + 'YYMMDD_HH24MISS') AS "_sql_exec_start" +, TO_CHAR(MAX(m.sql_exec_start) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC), + 'YYYYMMDD_HH24MISS') AS "_sql_exec_start_glu" +, MAX(m.sql_plan_hash_value) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC) AS "_plan_hash_value" +, MAX(s.child_number) KEEP + (DENSE_RANK FIRST ORDER BY m.last_refresh_time DESC) AS "_sql_child_number" +FROM v$sql_monitor m + INNER JOIN + v$sql s + ON ( s.sql_id = m.sql_id + AND s.child_address = m.sql_child_address) +WHERE m.sql_id = '&1' +AND UPPER(m.sql_text) NOT LIKE 'EXPLAIN PLAN%' +GROUP BY + m.sql_id +; + +SPOOL sqlmon_&_v_dbname._&_v_sql_id._&_v_sql_exec_start._&_v_sql_exec_id..html + +SELECT + REGEXP_REPLACE( + DBMS_SQLTUNE.REPORT_SQL_MONITOR( + sql_id => '&_v_sql_id', + sql_exec_id => '&_v_sql_exec_id', + sql_exec_start => TO_DATE('&_v_sql_exec_start', 'YYMMDD_HH24MISS'), + report_level => 'ALL', + type => 'ACTIVE'), + 'overflow:hidden', '') +FROM dual +/ + +SPOOL OFF + +SET TERMOUT ON HEADING ON PAGESIZE 5000 LINESIZE 999 FEEDBACK ON +SET TIMING ON + +--HOST open sqlmon_&_v_dbname._&_v_sql_id._&_v_sql_exec_start._&_v_sql_exec_id..html +HOST open http://localhost:8000/sqlmon_&_v_dbname._&_v_sql_id._&_v_sql_exec_start._&_v_sql_exec_id..html + +undefine _v_dbname +undefine _v_sql_id +undefine _v_sql_exec_id +undefine _v_sql_exec_start +undefine _v_plan_hash_value +undefine _v_sql_child_number diff --git a/tpt/sqlopt.sql b/tpt/sqlopt.sql new file mode 100644 index 0000000..2358f0b --- /dev/null +++ b/tpt/sqlopt.sql @@ -0,0 +1,34 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sqlopt_hash_value HEAD HASH_VALUE +COL sqlopt_sqlid HEAD SQL_ID +COL sqlopt_child# HEAD CHILD# + +BREAK ON sqlopt_hash_value SKIP 1 ON sqlopt_sqlid SKIP 1 ON sqlopt_child# SKIP 1 + +PROMPT Show compilation environment stored inside cursors for SQLID &1 child# &2 parameter &3 + +SELECT +-- inst_id +-- , kqlfsqce_phad + kqlfsqce_hash sqlopt_hash_value + , kqlfsqce_sqlid sqlopt_sqlid + , kqlfsqce_chno sqlopt_child# +-- , kqlfsqce_hadd +-- , kqlfsqce_pnum + , kqlfsqce_pname parameter + , UPPER(kqlfsqce_pvalue) value + , DECODE(BITAND(kqlfsqce_flags, 2), 0, 'NO', 'YES') "DFLT" +FROM -- v$sql_optimizer_env + x$kqlfsqce +WHERE + kqlfsqce_sqlid LIKE '&1' +AND kqlfsqce_chno LIKE ('&2') +AND LOWER(kqlfsqce_pname) LIKE LOWER('%&3%') +ORDER BY + kqlfsqce_hash + , kqlfsqce_sqlid + , kqlfsqce_chno + , kqlfsqce_pname +/ diff --git a/tpt/sqlprof.sql b/tpt/sqlprof.sql new file mode 100644 index 0000000..5580fb8 --- /dev/null +++ b/tpt/sqlprof.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@sample sql_hash_value,sql_child_number v$session sid=&1 1000 diff --git a/tpt/sqlt.sql b/tpt/sqlt.sql new file mode 100644 index 0000000..b5d2087 --- /dev/null +++ b/tpt/sqlt.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column sqlt_sql_text heading SQL_TEXT format a100 word_wrap + +select + hash_value, + sql_id, +-- old_hash_value, + child_number chld#, +-- plan_hash_value plan_hash, + optimizer_mode opt_mode, + sql_text sqlt_sql_text +from + v$sql +where + lower(sql_text) like lower('%&1%') +--and hash_value != (select sql_hash_value from v$session where sid = (select sid from v$mystat where rownum = 1)) +/ + diff --git a/tpt/sqlt9.sql b/tpt/sqlt9.sql new file mode 100644 index 0000000..dc7e313 --- /dev/null +++ b/tpt/sqlt9.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column sqlt_sql_text heading SQL_TEXT format a100 word_wrap + +select + hash_value, +-- sql_id, +-- old_hash_value, + child_number chld#, + plan_hash_value plan_hash, + optimizer_mode opt_mode, + sql_text sqlt_sql_text +from + v$sql +where + lower(sql_text) like lower('%&1%') +--and hash_value != (select sql_hash_value from v$session where sid = (select sid from v$mystat where rownum = 1)) +/ + diff --git a/tpt/sqltune_tune_sqlid.sql b/tpt/sqltune_tune_sqlid.sql new file mode 100644 index 0000000..019a484 --- /dev/null +++ b/tpt/sqltune_tune_sqlid.sql @@ -0,0 +1,36 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt dbms_sqltune.create_tuning_task(task_name=>'SQLTT_&1', sql_id=>'&1', time_limit=>&2) + +var c_tt refcursor + +DECLARE + r CLOB; + --r varchar2(32767); + t varchar2(30) := 'SQLTT_&1'; +BEGIN + + begin + dbms_sqltune.drop_tuning_task(t); + exception + when others then null; + end; + + r := dbms_sqltune.create_tuning_task(task_name=>t, sql_id=>'&1', time_limit=>&2); + dbms_output.put_line('r='||r); + + dbms_sqltune.execute_tuning_task(t); + + open :c_tt for + select dbms_sqltune.report_tuning_task(t) recommendations from dual; + +END; +/ + +spool &_tpt_tempdir/sqltune_ctt_&_tpt_tempfile..sql +print :c_tt +spool off +prompt Output file: &_tpt_tempdir/sqltune_ctt_&_tpt_tempfile..sql +host &_start &_tpt_tempdir/sqltune_ctt_&_tpt_tempfile..sql + diff --git a/tpt/sr.sql b/tpt/sr.sql new file mode 100644 index 0000000..61d2a60 --- /dev/null +++ b/tpt/sr.sql @@ -0,0 +1,165 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +set feedback off null "[NULL]" + +define grouping=&1 +define start_snap=&2 +define end_snap=&3 + +col wait_ms for 9999999999 +col avg_wait_ms for 99999999.9 +col ms_per_sec for 999999.9 + +col program for a30 truncate +col username for a15 truncate +col osuser for a20 truncate +col name for a40 truncate +col machine for a20 truncate + +col "%Total" for a12 +col "log10(D)" for a12 + +col grouping_break noprint new_value grouping_break + +select + &2 snapid_begin, + &3 snapid_end, + ' ' " ", + to_char(a.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_begin, + to_char(b.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_end, + (b.snaptime - a.snaptime)*86400 dur_sec, + (b.snaptime - a.snaptime)*86400/60 dur_min, + replace('&grouping', ',', ' on ') grouping_break +from + (select snaptime from sawr$snapshots where snapid = &2) a, + (select snaptime from sawr$snapshots where snapid = &3) b +/ + +break on &grouping_break skip 1 +col grouping_break clear + +select + &grouping, + substr(name,1,45) name, + decode(lower('&_tptmode'),'html','','|')|| + rpad( + nvl( + lpad('#', + ceil( (nvl(round(sum(us_per_sec/1000000),2),0))*10 ), + '#'), + ' '), + 10,' ') + ||decode(lower('&_tptmode'),'html','','|') "%Total", + sum(us_per_sec)/1000 ms_per_sec, + (sum(wait_us)/decode(sum(waits),0,1,sum(waits))/1000) avg_wait_ms, + sum(waits) waits, + sum(wait_us)/1000 wait_ms + -- ,avg(intrvl)/1000 sec_in_snap +from ( + select + e2.sid, + e2.audsid, + nvl(e1.snapid, &start_snap) begin_snapid, + e2.snapid end_snapid, + e2.username, + e2.program, + e2.terminal, + e2.machine, + e2.osuser, + e2.process, + e2.name, + round(e2.time_waited_micro - nvl(e1.time_waited_micro,0)) wait_us, + round( + ( e2.time_waited_micro - nvl(e1.time_waited_micro,0) ) / ( + decode((e2.snaptime - nvl(e1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400, 0, 1, + (e2.snaptime - nvl(e1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400) + ) + ) us_per_sec, + (e2.snaptime - nvl(e1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400*1000 intrvl, + e2.total_waits - nvl(e1.total_waits,0) waits + -- e1.average_wait avg1, + -- e2.average_wait avg2, + -- e2.average_wait - nvl(e1.average_wait,0) avgdelta + from + ( select * from sawr$sess_event where snapid = &start_snap ) e1, + ( select * from sawr$sess_event where snapid = &end_snap ) e2 + where + e1.audsid (+) = e2.audsid + and e1.sid (+) = e2.sid + and e1.serial# (+) = e2.serial# + and e1.logon_time (+) = e2.logon_time + and e1.event# (+) = e2.event# +) sq +where + ( waits != 0 or wait_us != 0 ) +group by + &grouping, name +order by + &grouping, ms_per_sec desc +/ + +col delta head Delta for 9999999999 +col delta_sec head D/sec for 9999999.9 + +select + &grouping, + substr(name,1,45) name, + decode(lower('&_tptmode'),'html','','|')|| + rpad( + nvl( + lpad('#', + ceil( nvl(log(10,abs(decode(sum(delta),0,1,sum(delta)))),0) ), + '#'), + ' '), + 10,' ') + ||decode(lower('&_tptmode'),'html','','|') "log10(D)", + sum(delta) delta, + sum(delta)/(avg(intrvl)/1000) delta_sec + -- ,avg(intrvl)/1000 sec_in_snap +from ( + select + s2.sid, + s2.audsid, + nvl(s1.snapid, &start_snap) begin_snapid, + s2.snapid end_snapid, + s2.username, + s2.program, + s2.terminal, + s2.machine, + s2.osuser, + s2.process, + s2.name, + s2.value - nvl(s1.value,0) delta, + (s2.snaptime - nvl(s1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400*1000 intrvl + from + ( select * from sawr$sess_stat where snapid = &start_snap ) s1, + ( select * from sawr$sess_stat where snapid = &end_snap ) s2 + where + s1.audsid (+) = s2.audsid + and s1.sid (+) = s2.sid + and s1.serial# (+) = s2.serial# + and s1.logon_time (+) = s2.logon_time + and s1.statistic# (+) = s2.statistic# +) sq +where + delta != 0 +group by + &grouping, name +order by + &grouping, abs(delta) desc +/ + + +break on _nonexistent +set feedback on null "" diff --git a/tpt/sr2.sql b/tpt/sr2.sql new file mode 100644 index 0000000..2dc8f93 --- /dev/null +++ b/tpt/sr2.sql @@ -0,0 +1,90 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +define grouping=&1 +define start_snap=&2 +define end_snap=&3 + +col grouping_break noprint new_value grouping_break + +set termout off +select replace('&grouping', ',', ' on ') grouping_break from dual; +set termout on + +break on &grouping_break skip 1 + +col wait_ms for 9999999999 +col avg_wait_ms for 99999999.9 +col ms_per_sec for 999999.9 + +select + to_char(a.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_begin, + to_char(b.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_end, + (b.snaptime - a.snaptime)*86400 dur_sec, + (b.snaptime - a.snaptime)*86400/60 dur_min +from + (select snaptime from sawr$snapshots where snapid = &2) a, + (select snaptime from sawr$snapshots where snapid = &3) b +/ + + +select + &grouping, + substr(name,1,45) name, + sum(us_per_sec)/1000 ms_per_sec, + (sum(wait_us)/decode(sum(waits),0,1,sum(waits))/1000) avg_wait_ms, + sum(waits) waits, + sum(wait_us)/1000 wait_ms, + avg(intrvl)/1000 sec_in_snap +from ( + select + e2.sid, + e2.audsid, + nvl(e1.snapid, &start_snap) begin_snapid, + e2.snapid end_snapid, + e2.username, + e2.program, + e2.terminal, + e2.machine, + e2.osuser, + e2.process, + e2.name, + round(e2.time_waited_micro - nvl(e1.time_waited_micro,0)) wait_us, + round( + ( e2.time_waited_micro - nvl(e1.time_waited_micro,0) ) / ( + decode((e2.snaptime - nvl(e1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400, 0, 1, + (e2.snaptime - nvl(e1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400) + ) + ) us_per_sec, + (e2.snaptime - nvl(e1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400*1000 intrvl, + e2.total_waits - nvl(e1.total_waits,0) waits + -- e1.average_wait avg1, + -- e2.average_wait avg2, + -- e2.average_wait - nvl(e1.average_wait,0) avgdelta + from + ( select * from sawr$sess_event where snapid = &start_snap ) e1, + ( select * from sawr$sess_event where snapid = &end_snap ) e2 + where + e1.audsid (+) = e2.audsid + and e1.sid (+) = e2.sid + and e1.serial# (+) = e2.serial# + and e1.logon_time (+) = e2.logon_time + and e1.event# (+) = e2.event# +) sq +group by + &grouping, name +order by + &grouping, ms_per_sec desc +/ + +break on _nonexistent \ No newline at end of file diff --git a/tpt/sr_old.sql b/tpt/sr_old.sql new file mode 100644 index 0000000..e24d23c --- /dev/null +++ b/tpt/sr_old.sql @@ -0,0 +1,93 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +set linesize 156 +set pagesize 5000 +set verify off + + +select + to_char(a.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_begin, + to_char(b.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_end, + (b.snaptime - a.snaptime)*86400 dur_sec, + (b.snaptime - a.snaptime)*86400/60 dur_min +from + (select snaptime from sawr$snapshots where snapid = &2) a, + (select snaptime from sawr$snapshots where snapid = &3) b +/ + + + +-- reports all sessions wait events + +col ms_per_sec head ms/|sec for 999999 +col pct_per_sec head %|sec for 999999 +col wait_ms head "ms in|snapshot" for 9999999999 +col waits head "Waits in|snapshot" for 99999999 +col event_name head "Event Name" for a45 +col avgdelta head "Avg|Wait" for 990.99 justify right +col avg_wait_ms head "Avg Wait|ms" for 9999990 justify right +col AVGDLT% head "%" for a1 +col %TOTAL head "% Total" for a12 justify right +col &1 word_wrap + +-- break on sid skip 1 on audsid + +break on &1 skip 1 + +select + &1, + name EVENT_NAME, + decode(lower('&_tptmode'),'html','','|')|| + rpad( + nvl( + lpad('#', + ceil( (nvl(round(sum(us_per_sec/1000000),2),0))*10 ), + '#'), + ' '), + 10,' ') + ||decode(lower('&_tptmode'),'html','','|') "%TOTAL", + avg(us_per_sec)/1000 ms_per_sec, + sum(wait_us)/1000 wait_ms, + sum(waits), + sum(wait_us/decode(waits,0,1,waits))/1000 avg_wait_ms +from + sawr$sess_event_delta +where + begin_snapid = &2 +and end_snapid = &3 +and wait_us != 0 +group by + &1, name +order by + &1, ms_per_sec desc +/ + + +-- sum(wait_us)/1000 wait_ms, +-- sum(waits) +-- sum(wait_us)/sum(decode(waits,0,1,waits)/1000)) avg_wait_ms +-- to_number(decode(avgdelta,0,null,avgdelta)) avgdlt, +-- avgdelta, +-- decode(avgdelta,0,null,'%') "AVGDLT%" +-- round(us_per_sec/10000,2) pct_per_sec, +-- intrvl, +-- '|'|| +-- rpad( +-- nvl( +-- lpad('#', +-- ceil( (nvl(round(sum(us_per_sec/1000000),2),0))*10 ), +-- '#'), +-- ' '), +-- 10,' ') +-- ||'|' "%TOTAL", diff --git a/tpt/srp.sql b/tpt/srp.sql new file mode 100644 index 0000000..a0b1eff --- /dev/null +++ b/tpt/srp.sql @@ -0,0 +1,79 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +set linesize 156 +set pagesize 5000 +set verify off + + +select + to_char(a.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_begin, + to_char(b.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_end, + (b.snaptime - a.snaptime)*86400 dur_sec, + (b.snaptime - a.snaptime)*86400/60 dur_min +from + (select snaptime from sawr$snapshots where snapid = &1) a, + (select snaptime from sawr$snapshots where snapid = &2) b +/ + + + +-- reports all sessions wait events + +col ms_per_sec head ms/|sec for 999999 +col pct_per_sec head %|sec for 999999 +col wait_ms head "ms in|snapshot" for 9999999999 +col waits head "Waits in|snapshot" for 99999999 +col event_name head "Event Name" for a45 +col avgdelta head "Avg|Wait" for 990.99 justify right +col avg_wait_ms head "Avg Wait|ms" for 9999990 justify right +col AVGDLT% head "%" for a1 +col %TOTAL head "% Total" for a12 justify right + + +break on sid skip 1 on audsid + +select + sid, + audsid, + ' ' " ", + name EVENT_NAME, + '|'|| + rpad( + nvl( + lpad('#', + ceil( (nvl(round(us_per_sec/1000000,2),0))*10 ), + '#'), + ' '), + 10,' ') + ||'|' "%TOTAL", + round(us_per_sec/1000,3) ms_per_sec, +-- round(us_per_sec/10000,2) pct_per_sec, + wait_us/1000 wait_ms, +-- intrvl, + waits, + round(wait_us/decode(waits,0,1,waits)/1000) avg_wait_ms +-- to_number(decode(avgdelta,0,null,avgdelta)) avgdlt, +-- avgdelta, +-- decode(avgdelta,0,null,'%') "AVGDLT%" +from + sawr$sess_event_delta +where + begin_snapid = &1 +and end_snapid = &2 +and wait_us != 0 -- might want to remove that +order by + sid, us_per_sec desc, wait_us desc, waits desc +/ + + diff --git a/tpt/srs.sql b/tpt/srs.sql new file mode 100644 index 0000000..9f4a132 --- /dev/null +++ b/tpt/srs.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@&SQLPATH/tools/sesspack_0.05e/srs "&1" "&2" "&3" "&4" \ No newline at end of file diff --git a/tpt/sru.sql b/tpt/sru.sql new file mode 100644 index 0000000..f64e2d5 --- /dev/null +++ b/tpt/sru.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + ru.indx SID, +/* decode ( KSURIND + , 0, 'COMPOSITE_LIMIT' + , 1, 'LOGINS_PER_USER' + , 2, 'CPU_PER_SESSION' + , 3, 'CPU_PER_CALL' + , 4, 'IO_PER_SESSION' + , 5, 'IO_PER_CALL' + , 6, 'MAX_IDLE_TIME' + , 7, 'MAX_CONNECT_TIME' + , 8, 'PRIVATE_SGA' + , 9, 'PROCEDURE_SPACE' + , to_char(KSURIND) */ + rm.name RES, + ru.ksuruse USED +from + sys.resource_map rm, + x$ksuru ru +where + ru.indx = to_number(&1) +and rm.resource# = ru.ksurind +and rm.type# = 0 +/ diff --git a/tpt/srun.sql b/tpt/srun.sql new file mode 100644 index 0000000..2bafeec --- /dev/null +++ b/tpt/srun.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +DEF cmd="&1" + +VAR snapper REFCURSOR +@snapper4 stats,begin 1 1 &mysid + +clear buffer +1 &cmd +/ + +@snapper4 stats,end 1 1 &mysid + diff --git a/tpt/st.sql b/tpt/st.sql new file mode 100644 index 0000000..93e3be2 --- /dev/null +++ b/tpt/st.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from &1 ; \ No newline at end of file diff --git a/tpt/stack_helper.py b/tpt/stack_helper.py new file mode 100644 index 0000000..d0b2646 --- /dev/null +++ b/tpt/stack_helper.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +# Copyright 2022 Tanel Poder. All rights reserved. More info at https://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +from __future__ import print_function +import sys, os + +full_stringlist = [] + +# parse stacks +for l in sys.stdin: + l = l.rstrip().split('<-') + l.reverse() + + x = [] + for f in l: + if f.startswith("__sighandler()"): + break + else: + x.append(f.split('+')[0]) + + s = "" + for f in x: + s += "%s/" % f + + full_stringlist.append(s) + +prefixlength = len(os.path.commonpath(full_stringlist)) +common_funclist = os.path.commonpath(full_stringlist).split("/") + +# report +if sys.argv[1] == "prefix": + for (i,f) in enumerate(common_funclist): + print("#%3d %s %s" % (len(common_funclist)-i, " "*i, f)) +else: + for suffix_funcs in full_stringlist: + print(" ", suffix_funcs[prefixlength:-1].replace('/','->')) + diff --git a/tpt/stack_helper.vbs b/tpt/stack_helper.vbs new file mode 100644 index 0000000..3343985 --- /dev/null +++ b/tpt/stack_helper.vbs @@ -0,0 +1,203 @@ +' Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +' Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +'------------------------------------------------------------------------------------- +'-- +'-- File name: stack_helper.vbs v1.01 +'-- Purpose: Helper script for OStackProf.sql script +'-- +'-- Author: Tanel Poder +'-- Copyright: (c) http://www.tanelpoder.com +'-- +'-- Usage: Put it into the same directory where %SQLPATH% environment variable +'-- points. OStackProf will call it for post-processing stack traces. +'-- +'------------------------------------------------------------------------------------- + +Option Explicit + +Dim DEBUG +DEBUG=False + +Dim curRow, prevRow, rowCount, commonFuncIndex, funcList, prevFuncList, rowsProcessed +Dim re1, re2, re3, re4, re5 + +prevRow = "" +rowCount= 0 + +Set re1 = New RegExp +re1.Pattern = "\+[0-9]*" +re1.Global = True + +Set re2 = New RegExp +re2.Pattern = ".*sspuser\(\)|.*00000000<-" +re2.Global = False +re2.IgnoreCase = True + +'Set re2a = New RegExp +'re2a.Pattern = "<-_[a-z]" +'re2a.Global = True +'re2a.IgnoreCase = True + +'Set re3 = New RegExp +'re3.Pattern = ".*(" & WScript.Arguments.Item(0) & "\(\)<-)" +'re3.Pattern = ".*<-(.*\(\)<-" & WScript.Arguments.Item(0) & "\(\)<-)" +'re3.Global = False +'re3.IgnoreCase = True + +Set re4 = New RegExp +'re4.Pattern = "<-(.*?\(\))" +re4.Pattern = "(.*?)<-" +re4.Global = True +re4.IgnoreCase = True + +Set re5 = New RegExp +re5.Pattern = "^<-|<-$" +re5.Global = False +re5.IgnoreCase = True + +'----------------------------------------------------------------------------------------------------- +Function stackStrip() + Dim rowIndex + rowIndex = 0 + + With WScript + Do + rowIndex = rowIndex + 1 + 'curRow = re3.replace(re2.replace(re1.Replace(WScript.StdIn.ReadLine, ""),""), "$1") + WScript.StdOut.WriteLine re2.replace(re1.Replace(WScript.StdIn.ReadLine, ""),"") + Loop Until WScript.StdIn.AtEndOfStream + End With + + stackStrip=rowIndex +End Function + +'----------------------------------------------------------------------------------------------------- +Function printFuncSummary(f, startFrom) + Dim i,j + WScript.StdOut.WriteLine "# -#--------------------------------------------------------------------" + WScript.StdOut.WriteLine "# - Num.Samples -> in call stack() " + WScript.StdOut.WriteLine "# ----------------------------------------------------------------------" + + + 'j = f.Count - 1 - startFrom + For i = f.Count - 1 To f.Count - startFrom step -1 + WScript.StdOut.WriteLine "#" & Space(3-Len(i-1)) & i-1 & Space(f.Count - i) & "->" & re5.replace(f(i), "") + + Next + WScript.StdOut.WriteLine "# ...(see call profile below)" + WScript.StdOut.WriteLine "# " +End Function + +'----------------------------------------------------------------------------------------------------- +Function printFuncList(f, startFrom, cnt) + Dim i,j + WScript.StdOut.Write Space(6-Len(cnt)) & cnt & " ->" + + 'j = f.Count - 1 - startFrom + For i = f.Count - 1 - startFrom To 0 step -1 + WScript.StdOut.Write re5.replace(f(i), "") & "->" + Next + WScript.StdOut.WriteLine "" +End Function + +'----------------------------------------------------------------------------------------------------- +Function getCommonFuncIndex(f1, f2, index) + Dim i,tmp + For i = 1 To index + If DEBUG Then WScript.StdOut.WriteLine " i: " & i & " f1.count=" & f1.count & " f2.count=" & f2.count + If DEBUG Then WScript.StdOut.WriteLine "fields: " & i & ":" & f1(f1.count - i) & " , " & f2(f2.count - i) + If i >= f1.Count Or i >= f2.Count Or StrComp(f1(f1.count-i),f2(f2.count-i)) <> 0 Then + getCommonFuncIndex = i - 1 + Exit For + End If + Next + If DEBUG Then tmp=printFuncList(f1,0,f1.count-1) + If DEBUG Then WScript.StdOut.WriteLine "Common idx: " & i + getCommonFuncIndex = i - 1 +End Function + +'----------------------------------------------------------------------------------------------------- +Function stackReport() + Dim rowIndex + Dim i,tmp,longestStack + Dim rows() + ReDim rows(100) + + '-- init row array and find highest common prefix across all stacks + rowIndex = 0 + Do + rows(rowIndex)=WScript.StdIn.ReadLine + + If rowIndex = 0 Then + Set prevFuncList = re4.Execute(rows(0)) + commonFuncIndex = prevFuncList.Count-1 + Set longestStack = prevFuncList + Else + Set funcList = re4.Execute(rows(rowIndex)) + commonFuncIndex = getCommonFuncIndex(funcList, prevFuncList, commonFuncIndex) + If funcList.Count > prevFuncList.Count Then Set longestStack = funcList + End If + + rowIndex = rowIndex + 1 + If rowIndex >= 100 Then ReDim Preserve rows(rowIndex+1) + + Loop Until WScript.StdIn.AtEndOfStream + + If DEBUG Then WScript.StdOut.WriteLine "rowIndex: " & rowIndex + + If rowIndex < 2 Then + WScript.StdOut.WriteLine "ERROR: Not enough stack samples" + WScript.Quit(1) + End If + + '-- print common stack prefix + tmp = printFuncSummary(longestStack, commonFuncIndex) + + '-- loop & print stack line breakdown + With WScript + For i = 0 To rowIndex - 1 + curRow = rows(i) + If rowCount = 0 Then + prevRow = curRow + Set prevFuncList = re4.Execute(prevRow) + End If + + rowCount = rowCount + 1 + If curRow <> prevRow Then + Set funcList = re4.Execute(prevRow) + tmp = printFuncList(funcList, commonFuncIndex,rowCount-1) + Set prevFuncList = funcList + rowCount = 1 + End If + prevRow = curRow + Next + + ' 1.01 fix + Set funcList = re4.Execute(prevRow) + tmp = printFuncList(funcList, commonFuncIndex, rowCount) + End With + + stackReport=rowIndex +End Function + + +'----------------------------------------------------------------------------------------------------- +' main() +'----------------------------------------------------------------------------------------------------- +If LCase(WScript.Arguments.Item(0)) = "-report" Then + rowsProcessed = stackReport() +ElseIf LCase(WScript.Arguments.Item(0)) = "-strip" Then + rowsProcessed = stackStrip() +Else + WScript.StdOut.WriteLine "" + WScript.StdOut.WriteLine "Usage: " + WScript.StdOut.WriteLine " cscript //nologo %SQLPATH%\stack_helper.vbs " + WScript.StdOut.WriteLine "" + WScript.StdOut.WriteLine " action is either -report or -strip" + WScript.StdOut.WriteLine "" + WScript.Quit(1) +End If + +'----------------------------------------------------------------------------------------------------- +'end +'----------------------------------------------------------------------------------------------------- diff --git a/tpt/stat.sql b/tpt/stat.sql new file mode 100644 index 0000000..bc06207 --- /dev/null +++ b/tpt/stat.sql @@ -0,0 +1,45 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: stat.sql +-- Purpose: Execute SQL statement in script argument and report basic +-- execution statistics +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @stat "" +-- @stat "select * from dual" +-- @stat "create table t as select * from all_objects" +-- +-------------------------------------------------------------------------------- + + +set termout off +exec dbms_Session.set_identifier(user||':'||sys_context('userenv', 'sessionid')); +exec dbms_monitor.client_id_stat_enable(user||':'||sys_context('userenv', 'sessionid')); +set termout on + +clear buffer +1 &2 +/ + +select + stat_name + , CASE stat_name + WHEN 'user calls' THEN value - 2 -- substract @stat scripts overhead + WHEN 'execute count' THEN value - 1 + WHEN 'parse count (total)' THEN value - 1 + WHEN 'opened cursors cumulative' THEN value - 1 + ELSE value + END value +from v$client_stats +where client_identifier = user||':'||sys_context('userenv', 'sessionid') +and lower(stat_name) like '%&1%'; + +set termout off +exec dbms_monitor.client_id_stat_disable(user||':'||sys_context('userenv', 'sessionid')); +exec dbms_Session.clear_identifier; +set termout on diff --git a/tpt/statn.sql b/tpt/statn.sql new file mode 100644 index 0000000..a54dec9 --- /dev/null +++ b/tpt/statn.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + n.statistic# stat#, + trim(to_char(s.statistic#, 'XXXX')) hex#, + n.statistic# * 8 offset, + n.name, + s.value +from v$mystat s, v$statname n +where s.statistic#=n.statistic# +and ( + lower(n.name) like lower('%&1%') +or lower(to_char(s.statistic#)) like lower('&1') +or lower(trim(to_char(s.statistic#, 'XXXX'))) like lower('&1') +or to_char(n.statistic# * 8) like '%&1%' +) +/ + + + diff --git a/tpt/statspack/pga_usage.sql b/tpt/statspack/pga_usage.sql new file mode 100644 index 0000000..fc9eb64 --- /dev/null +++ b/tpt/statspack/pga_usage.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +break on snap_time + +select + s.snap_time + , round(sum(m.allocated)/1048576) MB_ALLOC + , round(sum(m.used)/1048576) MB_USED + , count(distinct m.pid) processes +from + STATS$PROCESS_MEMORY_ROLLUP m + , STATS$SNAPSHOT s +where + s.snap_id = m.snap_id +and s.dbid = m.dbid +and s.instance_number = m.instance_number +group by + s.snap_time +order by + s.snap_time +/ + +select + s.snap_time + , m.category alloc_type + , round(sum(m.allocated)/1048576) MB_ALLOC + , round(sum(m.used)/1048576) MB_USED + , count(distinct m.pid) processes +from + STATS$PROCESS_MEMORY_ROLLUP m + , STATS$SNAPSHOT s +where + s.snap_id = m.snap_id +and s.dbid = m.dbid +and s.instance_number = m.instance_number +group by + s.snap_time + , m.category +order by + s.snap_time + , m.category +/ + diff --git a/tpt/subheap.sql b/tpt/subheap.sql new file mode 100644 index 0000000..5a21d16 --- /dev/null +++ b/tpt/subheap.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@hp "&1" \ No newline at end of file diff --git a/tpt/sum.sql b/tpt/sum.sql new file mode 100644 index 0000000..385dc83 --- /dev/null +++ b/tpt/sum.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select sum(&1) from &2; diff --git a/tpt/svcs.sql b/tpt/svcs.sql new file mode 100644 index 0000000..e3f5ecf --- /dev/null +++ b/tpt/svcs.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + service_name +, stat_name +, value +from + v$service_stats +where + lower(service_name) like lower('&1') +and lower(stat_name) like lower('&2') +/ + diff --git a/tpt/sw.sql b/tpt/sw.sql new file mode 100644 index 0000000..f428b73 --- /dev/null +++ b/tpt/sw.sql @@ -0,0 +1,73 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: sw.sql +-- Purpose: Display current Session Wait info +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sw +-- @sw 52,110,225 +-- @sw "select sid from v$session where username = 'XYZ'" +-- @sw &mysid +-- +-------------------------------------------------------------------------------- + +col sw_event head EVENT for a40 truncate +col sw_p1transl head P1TRANSL for a42 +col sw_sid head SID for 999999 + +col sw_p1 head P1 for a19 justify left word_wrap +col sw_p2 head P2 for a19 justify left word_wrap +col sw_p3 head P3 for a19 justify left word_wrap + +select + sid sw_sid, + CASE WHEN state != 'WAITING' THEN 'WORKING' + ELSE 'WAITING' + END AS state, + CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' + ELSE event + END AS sw_event, + seq#, + seconds_in_wait sec_in_wait, + CASE state WHEN 'WAITING' THEN NVL2(p1text,p1text||'= ',null)||CASE WHEN P1 < 536870912 THEN to_char(P1) ELSE '0x'||rawtohex(P1RAW) END ELSE null END SW_P1, + CASE state WHEN 'WAITING' THEN NVL2(p2text,p2text||'= ',null)||CASE WHEN P2 < 536870912 THEN to_char(P2) ELSE '0x'||rawtohex(P2RAW) END ELSE null END SW_P2, + CASE state WHEN 'WAITING' THEN NVL2(p3text,p3text||'= ',null)||CASE WHEN P3 < 536870912 THEN to_char(P3) ELSE '0x'||rawtohex(P3RAW) END ELSE null END SW_P3, + CASE state WHEN 'WAITING' THEN + CASE + WHEN event like 'cursor:%' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX')) + WHEN (event like 'enq%' OR event = 'DFS lock handle') AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '|| + chr(bitand(p1, -16777216)/16777215)|| + chr(bitand(p1,16711680)/65535)|| + ' mode '||bitand(p1, power(2,14)-1) + WHEN event like 'latch%' AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '||( + select name||'[par' + from v$latch_parent + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + union all + select name||'[c'||child#||']' + from v$latch_children + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + ) + WHEN event like 'library cache pin' THEN + '0x'||RAWTOHEX(p1raw) + ELSE NULL END + ELSE NULL END AS sw_p1transl +FROM + v$session_wait +WHERE + sid IN (&1) +ORDER BY + state, + sw_event, + p1, + p2, + p3 +/ diff --git a/tpt/sw2.sql b/tpt/sw2.sql new file mode 100644 index 0000000..3d97455 --- /dev/null +++ b/tpt/sw2.sql @@ -0,0 +1,74 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: sw.sql +-- Purpose: Display current Session Wait info +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sw +-- @sw 52,110,225 +-- @sw "select sid from v$session where username = 'XYZ'" +-- @sw &mysid +-- +-------------------------------------------------------------------------------- + +col sw_event head EVENT for a40 truncate +col sw_p1transl head P1TRANSL for a42 +col sw_sid head SID for 999999 + +col sw_p1 head P1 for a18 justify right +col sw_p2 head P2 for a18 justify right +col sw_p3 head P3 for a18 justify right + +select + sid sw_sid, + CASE WHEN state != 'WAITING' THEN 'WORKING' + ELSE 'WAITING' + END AS state, + CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' + ELSE event + END AS sw_event, + seq#, + seconds_in_wait sec_in_wait, + lpad(CASE WHEN P1 < 536870912 THEN to_char(P1) ELSE '0x'||rawtohex(P1RAW) END, 18) SW_P1, + lpad(CASE WHEN P2 < 536870912 THEN to_char(P2) ELSE '0x'||rawtohex(P2RAW) END, 18) SW_P2, + lpad(CASE WHEN P3 < 536870912 THEN to_char(P3) ELSE '0x'||rawtohex(P3RAW) END, 18) SW_P3, + CASE + WHEN event like 'cursor:%' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX')) + WHEN event like 'enq%' AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '|| + chr(bitand(p1, -16777216)/16777215)|| + chr(bitand(p1,16711680)/65535)|| + ' mode '||bitand(p1, power(2,14)-1) + WHEN event like 'latch%' AND state = 'WAITING' THEN + '0x'||trim(to_char(p1, 'XXXXXXXXXXXXXXXX'))||': '||( + select name||'[par' + from v$latch_parent + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + union all + select name||'[c'||child#||']' + from v$latch_children + where addr = hextoraw(trim(to_char(p1,rpad('0',length(rawtohex(addr)),'X')))) + ) + WHEN event like 'library cache pin' THEN + '0x'||RAWTOHEX(p1raw) + ELSE NULL END AS sw_p1transl +FROM + v$session_wait +WHERE + sid IN (&1) +ORDER BY + state, + sw_event, + p1, + p2, + p3 +/ + + + diff --git a/tpt/swa.sql b/tpt/swa.sql new file mode 100644 index 0000000..0d548fb --- /dev/null +++ b/tpt/swa.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@sw "select sid from v$session" diff --git a/tpt/swag.sql b/tpt/swag.sql new file mode 100644 index 0000000..c08201f --- /dev/null +++ b/tpt/swag.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@swg "select sid from v$session" diff --git a/tpt/swani.sql b/tpt/swani.sql new file mode 100644 index 0000000..04ae921 --- /dev/null +++ b/tpt/swani.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@sw "select sid from v$session where wait_class != 'Idle'" diff --git a/tpt/swb.sql b/tpt/swb.sql new file mode 100644 index 0000000..f197f99 --- /dev/null +++ b/tpt/swb.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@sw "select sid from v$session where type = 'BACKGROUND'" diff --git a/tpt/swc.sql b/tpt/swc.sql new file mode 100644 index 0000000..4a97bef --- /dev/null +++ b/tpt/swc.sql @@ -0,0 +1,61 @@ +COL obj FOR A30 +COL objt FOR A50 +COL wait_chain FOR A300 WORD_WRAP +COL distinct_sids FOR 9999 HEAD "#Blkrs" +COL "%This" FOR A6 + +PROMPT +PROMPT -- Display Session Wait Chain Signatures script v0.1 BETA by Tanel Poder ( https://tanelpoder.com ) + + +WITH + bclass AS (SELECT /*+ INLINE */ class, ROWNUM r from v$waitstat) + , sq AS ( + SELECT + REPLACE(SYS_CONNECT_BY_PATH(&1, '->'), '->', ' -> ') + ||CASE WHEN CONNECT_BY_ISLEAF = 1 AND ses.blocking_session IS NOT NULL + THEN ' -> [idle blocker '||ses.blocking_instance||','||ses.blocking_session||' ('||ses.program||')]' ELSE NULL + END path + FROM ( + SELECT + s.* + , CASE WHEN s.type = 'BACKGROUND' AND s.program LIKE '%(DBW%)' THEN + '(DBWn)' + WHEN s.type = 'BACKGROUND' OR REGEXP_LIKE(s.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(s.program,INSTR(s.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(s.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END || ' ' program2 + , NVL(s.event||CASE WHEN event like 'enq%' AND state = 'WAITING' + THEN ' [mode='||BITAND(p1, POWER(2,14)-1)||']' + WHEN s.event IN (SELECT name FROM v$event_name WHERE parameter3 = 'class#') + THEN ' ['||NVL((SELECT class FROM bclass WHERE r = s.p3),'undo @bclass '||s.p3)||']' ELSE null END,'ON CPU') + || ' ' event2 + , TO_CHAR(CASE WHEN state = 'WAITING' THEN p1 ELSE null END, '0XXXXXXXXXXXXXXX') p1hex + , TO_CHAR(CASE WHEN state = 'WAITING' THEN p2 ELSE null END, '0XXXXXXXXXXXXXXX') p2hex + , TO_CHAR(CASE WHEN state = 'WAITING' THEN p3 ELSE null END, '0XXXXXXXXXXXXXXX') p3hex + FROM + gv$session s + ) ses, (SELECT + object_id,data_object_id,owner,object_name,subobject_name,object_type + , owner||'.'||object_name obj + , owner||'.'||object_name||' ['||object_type||']' objt + FROM dba_objects) o + WHERE + ses.row_wait_obj# = o.object_id(+) + CONNECT BY NOCYCLE + ( PRIOR ses.blocking_session = ses.sid + AND PRIOR ses.blocking_instance = ses.inst_id + ) + START WITH (ses.state='WAITING' AND ses.wait_class!='Idle') AND &2 +) +SELECT + COUNT(*) sessions + , path wait_chain +FROM + sq +GROUP BY + path +ORDER BY + sessions DESC +/ diff --git a/tpt/swf.sql b/tpt/swf.sql new file mode 100644 index 0000000..63bb121 --- /dev/null +++ b/tpt/swf.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + s1.event + , s1.blocking_session + , s1.blocking_session_Status + , s1.final_blocking_session + , s1.final_blocking_session_status + , s2.state + , s2.event +FROM + v$session s1 + , v$session s2 +WHERE + s1.state = 'WAITING' +AND s1.event = 'enq: HV - contention' +AND s1.final_blocking_session = s2.sid +/ + diff --git a/tpt/swg.sql b/tpt/swg.sql new file mode 100644 index 0000000..825e827 --- /dev/null +++ b/tpt/swg.sql @@ -0,0 +1,47 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: swg.sql +-- Purpose: Display given Session Wait info grouped by state and event +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sw +-- @sw 52,110,225 +-- @sw "select sid from v$session where username = 'XYZ'" +-- @sw &mysid +-- +-------------------------------------------------------------------------------- + +col sw_event head EVENT for a40 truncate +col sw_p1transl head P1TRANSL for a42 +col sw_sid head SID for 999999 + +select + count(*), + CASE WHEN state != 'WAITING' THEN 'WORKING' + ELSE 'WAITING' + END AS state, + CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' + ELSE event + END AS sw_event +FROM + v$session_wait +WHERE + sid IN (&1) +GROUP BY + CASE WHEN state != 'WAITING' THEN 'WORKING' + ELSE 'WAITING' + END, + CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' + ELSE event + END +ORDER BY + 1 DESC, 2 DESC +/ + + + diff --git a/tpt/swh.sql b/tpt/swh.sql new file mode 100644 index 0000000..3d1a51a --- /dev/null +++ b/tpt/swh.sql @@ -0,0 +1,46 @@ +COL swh_sid HEAD SID FOR 999999 +COL swh_username HEAD USERNAME FOR A20 TRUNCATE +COL swh_event HEAD EVENT FOR A35 WORD_WRAP +COL swh_wait_time_us HEAD WAIT_TIME_US FOR 99,999,999,999 +COL swh_prev_wait_end_us HEAD CPU_BEFORE_WT_US FOR 99,999,999,999 +COL swh_machine HEAD MACHINE FOR A20 +COL swh_program HEAD PROGRAM FOR A20 + +BREAK ON swh_sid SKIP 1 + + +PROMPT +PROMPT -- Display last 10 COMPLETED waits from v$session_wait_history v0.1 BETA by Tanel Poder ( https://tanelpoder.com ) + +SELECT + s.inst_id + , s.sid swh_sid + , s.username swh_username + , CASE swh.seq# WHEN 1 THEN s.sql_id WHEN 2 THEN s.prev_sql_id END curr_prev_sql_id + , s.machine swh_machine +-- , s.program swh_program + , swh.seq# waits_ago + , swh.event swh_event + , swh.wait_time_micro swh_wait_time_us + , swh.time_since_last_wait_micro swh_prev_wait_end_us +-- , swh.p1text +-- , swh.p1 +-- , swh.p2text +-- , swh.p2 +-- , swh.p3text +-- , swh.p3 +FROM + -- using an inline view so that the swh.sql script can be called like: + -- @swh sid=XYZ ... or @swh username='XYZ' .. or @swh sql_id='xxxxxxxxx' + (SELECT * FROM gv$session s WHERE &1) s + , gv$session_wait_history swh +WHERE + s.inst_id = swh.inst_id +AND s.sid = swh.sid +--AND swh.event = 'SQL*Net message from client' +ORDER BY + s.inst_id + , s.sid + , swh.seq# +/ + diff --git a/tpt/swo.sql b/tpt/swo.sql new file mode 100644 index 0000000..ab71e66 --- /dev/null +++ b/tpt/swo.sql @@ -0,0 +1,68 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- old - unfinished + +-------------------------------------------------------------------------------- +-- +-- File name: sw.sql +-- Purpose: Display current Session Wait info +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @sw +-- @sw 52,110,225 +-- @sw "select sid from v$session where username = 'XYZ'" +-- @sw &mysid +-- +-------------------------------------------------------------------------------- + +--col sw_event head EVENT for a40 truncate +--col sw_p1transl head P1TRANSL for a42 +--col sw_sid head SID for 999999 +-- +--select /*+ ORDERED USE_NL(sw.gv$session_wait.s) */ +-- sw.sid sw_sid, +-- CASE WHEN sw.state = 'WAITING' THEN 'WAITING' ELSE 'WORKING' END AS state, +-- CASE WHEN sw.state = 'WAITING' THEN event ELSE 'On CPU / runqueue' END AS sw_event, +-- CASE WHEN sw.state = 'WAITING' THEN sw.p1 ELSE NULL END p1, +-- CASE WHEN sw.state = 'WAITING' THEN sw.p2 ELSE NULL END p2, +-- CASE WHEN sw.state = 'WAITING' THEN sw.p3 ELSE NULL END p3, +---- CASE +---- WHEN event like 'enq%' AND state = 'WAITING' THEN +---- '0x'||trim(to_char(CASE WHEN state = 'WAITING' THEN sw.p1 ELSE NULL END, 'XXXXXXXXXXXXXXXX'))||': '|| +---- chr(bitand(CASE WHEN state = 'WAITING' THEN sw.p1 ELSE NULL END, -16777216)/16777215)|| +---- chr(bitand(CASE WHEN state = 'WAITING' THEN sw.p1 ELSE NULL END,16711680)/65535)|| +---- ' mode '||bitand(CASE WHEN state = 'WAITING' THEN sw.p1 ELSE NULL END, power(2,14)-1) +---- WHEN event like 'latch%' AND state = 'WAITING' THEN +---- '0x'||trim(to_char(CASE WHEN state = 'WAITING' THEN sw.p1 ELSE NULL END, 'XXXXXXXXXXXXXXXX')) +---- temp +---- WHEN event like 'latch%' AND state = 'WAITING' THEN +---- '0x'||trim(to_char(CASE WHEN state = 'WAITING' THEN sw.p1 ELSE NULL END, 'XXXXXXXXXXXXXXXX'))||': '||( +---- select MAX(name)||'[par' +---- from v$latch_parent +---- where addr = hextoraw(trim(to_char(CASE WHEN state = 'WAITING' THEN sw.p1 ELSE NULL END,rpad('0',length(rawtohex(addr)),'X')))) +---- union all +---- select MAX(name)||'[c'||MAX(child#)||']' +---- from v$latch_children +---- where addr = hextoraw(trim(to_char(CASE WHEN state = 'WAITING' THEN sw.p1 ELSE NULL END,rpad('0',length(rawtohex(addr)),'X')))) +---- ) +---- ELSE NULL END AS sw_p1transl, +-- count(*) "COUNT" +--FROM +-- (select /*+ NO_MERGE */ &1 sid from dual connect by level <= 100000) s, +-- v$session_wait sw +--WHERE +-- sw.sid IN (&1) +--AND s.sid = sw.sid +-- GROUP BY +-- sw.sid, +-- CASE WHEN sw.state = 'WAITING' THEN 'WAITING' ELSE 'WORKING' END, +-- CASE WHEN sw.state = 'WAITING' THEN event ELSE 'On CPU / runqueue' END, +-- CASE WHEN sw.state = 'WAITING' THEN sw.p1 ELSE NULL END, +-- CASE WHEN sw.state = 'WAITING' THEN sw.p2 ELSE NULL END, +-- CASE WHEN sw.state = 'WAITING' THEN sw.p3 ELSE NULL END +--ORDER BY +-- "COUNT" DESC +--/ diff --git a/tpt/swp.sql b/tpt/swp.sql new file mode 100644 index 0000000..e3e8540 --- /dev/null +++ b/tpt/swp.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@waitprof "&1" "&2" "&3" \ No newline at end of file diff --git a/tpt/swu.sql b/tpt/swu.sql new file mode 100644 index 0000000..20bd5c6 --- /dev/null +++ b/tpt/swu.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@sw "select sid from v$session where type = 'USER'" diff --git a/tpt/swug.sql b/tpt/swug.sql new file mode 100644 index 0000000..4f35d89 --- /dev/null +++ b/tpt/swug.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@swg "select sid from v$session where type = 'USER'" diff --git a/tpt/sye.sql b/tpt/sye.sql new file mode 100644 index 0000000..0ab174f --- /dev/null +++ b/tpt/sye.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from v$system_event where lower(event) like lower('%&1%'); diff --git a/tpt/syn.sql b/tpt/syn.sql new file mode 100644 index 0000000..2863363 --- /dev/null +++ b/tpt/syn.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@syn2 '%&1%' diff --git a/tpt/syn2.sql b/tpt/syn2.sql new file mode 100644 index 0000000..583dbcd --- /dev/null +++ b/tpt/syn2.sql @@ -0,0 +1,33 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col syn_db_link head DB_LINK for a30 +col syn_owner head OWNER for a30 +col syn_synonym_name head SYNONYM_NAME for a30 +col syn_table_owner head TABLE_OWNER for a30 +col syn_table_name head TABLE_NAME for a30 + +select + owner syn_owner, + synonym_name syn_synonym_name, + table_owner syn_table_owner, + table_name syn_table_name, + db_link syn_db_link +from + dba_synonyms +where + upper(synonym_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +/ diff --git a/tpt/sys.sql b/tpt/sys.sql new file mode 100644 index 0000000..c229372 --- /dev/null +++ b/tpt/sys.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sys_value HEAD "VALUE" FOR 9999999999999999999999999 + +select name, value sys_value from v$sysstat where lower(name) like lower('%&1%'); diff --git a/tpt/sysm.sql b/tpt/sysm.sql new file mode 100644 index 0000000..0fa9b48 --- /dev/null +++ b/tpt/sysm.sql @@ -0,0 +1,26 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL sysm_group_name HEAD METRICGROUP FOR A30 +COL sysm_metric_name HEAD METRIC_NAME FOR A45 + +prompt Display SYSTEM metrics from V$METRIC + +select + (sysdate-end_time)*86400 seconds_ago +-- , end_time last_updated + , ROUND(mg.interval_size/100) seconds + , m.metric_name sysm_metric_name + , ROUND(m.value,2) value + , m.metric_unit + , mg.name sysm_group_name +from + v$metric m + , v$metricgroup mg +where + 1=1 +and m.group_id = mg.group_id +and mg.name like 'System Metrics % Duration' +and lower(m.metric_name) like lower('%&1%') +/ + diff --git a/tpt/sysopt.sql b/tpt/sysopt.sql new file mode 100644 index 0000000..113c4db --- /dev/null +++ b/tpt/sysopt.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT Show system default compilation environment, parameter &1 + +SELECT +-- pnum_qkscesyrow + pname_qkscesyrow parameter + , DECODE(BITAND(flags_qkscesyrow, 2), 0, 'NO', 'YES') isdefault + , UPPER(pvalue_qkscesyrow) value +FROM sys.x$qkscesys +WHERE + LOWER(pname_qkscesyrow) LIKE LOWER('%&1%') +-- BITAND(flags_qkscesyrow, 8) = 0 +--AND (BITAND(flags_qkscesyrow, 4) = 0 OR BITAND(flags_qkscesyrow, 2) = 0) +/ diff --git a/tpt/syspriv.sql b/tpt/syspriv.sql new file mode 100644 index 0000000..2ad15d6 --- /dev/null +++ b/tpt/syspriv.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + name +from + system_privilege_map +where + lower(name) like lower('%&1%') +/ + diff --git a/tpt/syt.sql b/tpt/syt.sql new file mode 100644 index 0000000..3c1a42f --- /dev/null +++ b/tpt/syt.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select stat_name, value/1000000 SEC from v$sys_time_model; \ No newline at end of file diff --git a/tpt/t.sql b/tpt/t.sql new file mode 100644 index 0000000..b027064 --- /dev/null +++ b/tpt/t.sql @@ -0,0 +1 @@ +SELECT value tracefile FROM v$diag_info WHERE name = 'Default Trace File'; diff --git a/tpt/tab.sql b/tpt/tab.sql new file mode 100644 index 0000000..93242d2 --- /dev/null +++ b/tpt/tab.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@tab2 "%&1%" diff --git a/tpt/tab2.sql b/tpt/tab2.sql new file mode 100644 index 0000000..0504912 --- /dev/null +++ b/tpt/tab2.sql @@ -0,0 +1,57 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column tab_owner heading OWNER format a20 +column tab_table_name heading TABLE_NAME format a30 +column tab_type heading TYPE format a4 +column tab_num_rows heading NUM_ROWS format 99999999999 +column tab_blocks heading BLOCKS format 999999999999 +column tab_empty_blocks heading EMPTY format 99999999 +column tab_avg_space heading AVGSPC format 99999 +column tab_avg_row_len heading ROWLEN format 99999 + +prompt Show tables matching condition "&1" (if schema is not specified then current user's tables only are shown)... + +select + owner tab_owner, + table_name tab_table_name, + case + when cluster_name is not null then 'CLU' + when partitioned = 'NO' and iot_name is not null then 'IOT' + when partitioned = 'YES' and iot_name is not null then 'PIOT' + when partitioned = 'NO' and iot_name is null then 'TAB' + when partitioned = 'YES' and iot_name is null then 'PTAB' + when temporary = 'Y' then 'TEMP' + else 'OTHR' + end tab_type, + num_rows tab_num_rows, + blocks tab_blocks, + empty_blocks tab_empty_blocks, + avg_space tab_avg_space, +-- chain_cnt tab_chain_cnt, + avg_row_len tab_avg_row_len, +-- avg_space_freelist_blocks tab_avg_space_freelist_blocks, +-- num_freelist_blocks tab_num_freelist_blocks, +-- sample_size tab_sample_size, + last_analyzed tab_last_analyzed, + degree, + compression +-- , compress_for -- 11.2 +from + dba_tables +where + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +/ diff --git a/tpt/tabhist.sql b/tpt/tabhist.sql new file mode 100644 index 0000000..0702199 --- /dev/null +++ b/tpt/tabhist.sql @@ -0,0 +1,91 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- CREATE OR REPLACE FUNCTION HEXSTR ( p_number in number ) return varchar2 +-- as +-- l_str varchar2(4000) := to_char(p_number,'fm'||rpad('x',50,'x')); +-- l_return varchar2(4000); +-- begin +-- while ( l_str is not null ) +-- loop +-- l_return := l_return || chr(to_number(substr(l_str,1,2),'xx')); +-- l_str := substr( l_str, 3 ); +-- end loop; +-- return l_return; +-- end; +-- / +-- +-- GRANT EXECUTE ON HEXSTR TO PUBLIC; +-- CREATE OR REPLACE PUBLIC SYNONYM HEXSTR FOR HEXSTR; + +col tabhist_ep_actual_value head ENDPOINT_ACTUAL_VALUE for a40 +col tabhist_ep_value head ENDPOINT_VALUE for a30 just right +col tabhist_ep_value2 for a80 +col tabhist_col_name head COLUMN_NAME for a30 +col tabhist_data_type head DATA_TYPE for a20 word_wrap + +break on tabhist_col_name on tabhist_data_type skip 1 + +select + h.column_name tabhist_col_name + , c.data_type tabhist_data_type + , h.endpoint_number + , CASE + WHEN c.data_type = 'NUMBER' THEN LPAD(TO_CHAR(h.endpoint_value), 30, ' ') + WHEN c.data_type IN ('CHAR', 'VARCHAR2', 'NCHAR', 'NVARCHAR2') THEN + --to_char(to_number((substr(trim(to_char(h.endpoint_value,lpad('x',63,'x'))),1,12)),'XXXXXXXXXXXXXXXX')) + to_char(to_number((substr(trim(to_char(h.endpoint_value,lpad('x',63,'x'))),1,12)),'XXXXXXXXXXXXXXXX'),'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX') + --hexstr(to_number((substr(trim(to_char(h.endpoint_value,lpad('x',63,'x'))),1,12)),'XXXXXXXXXXXXXXXX')) + --hexstr(substr(to_char(h.endpoint_value,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'),1,12)) + ELSE + trim(substr(trim(to_char(h.endpoint_value,lpad('x',63,'x'))),1,12)) + END tabhist_ep_value + , CASE WHEN c.histogram = 'FREQUENCY' THEN + h.endpoint_number - lag(endpoint_number, 1) over ( order by + h.owner + , h.table_name + , h.column_name + , h.endpoint_number + ) ELSE NULL + END frequency + ,CASE WHEN c.histogram = 'HEIGHT BALANCED' THEN + CASE WHEN c.data_type = 'NUMBER' THEN + h.endpoint_value - lag(endpoint_value, 1) over ( order by + h.owner + , h.table_name + , h.column_name + , h.endpoint_number + ) + ELSE null END + ELSE null END height_bal +-- , hexstr(h.endpoint_value) tabhist_ep_value +-- , to_char(h.endpoint_value,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') tabhist_ep_value2 + , h.endpoint_actual_value tabhist_ep_actual_value +from + dba_tab_columns c + , dba_tab_histograms h +where + c.owner = h.owner +and c.table_name = h.table_name +and c.column_name = h.column_name +and upper(h.table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND h.owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +AND UPPER(h.column_name) LIKE UPPER('&2') +ORDER BY + h.owner + , h.table_name + , h.column_name + , h.endpoint_number +/ diff --git a/tpt/tabhisthybrid.sql b/tpt/tabhisthybrid.sql new file mode 100644 index 0000000..c0718a4 --- /dev/null +++ b/tpt/tabhisthybrid.sql @@ -0,0 +1,134 @@ +-- script: tabhisthybrid.sql +-- author: Tanel Poder [tanelpoder.com] +-- created: Oct 2025 +-- usage: @tabhisthybrid [.] +-- example: @tabhisthybrid soe.customers account_mgr_id +-- +-- notes: +-- I reused the NewDensity logic already written by Mohamed Houri (and Alberto Dell'Era, Jonathan Lewis) +-- https://www.red-gate.com/simple-talk/databases/oracle-databases/12c-hybrid-histogram/ +-- +-- This script works with HYBRID histograms on NUMBER columns only for now. +-- I'm hoping to unify this script and my old tabhist.sql to show estimated cardinalities +-- (for equality filters) for all histogram types and data types someday. + +COL phys_bucket HEAD BUCKET FOR 99999 +COL table_owner FORMAT A15 +COL table_name FORMAT A30 +COL column_name FORMAT A30 +COL data_type HEAD DATA_TYPE FORMAT A12 +COL histogram_type HEAD HIST_TYPE FORMAT A12 +COL endpoint_number FORMAT 9999999999 +COL endpoint_value HEAD LOOKUP_VALUE FORMAT 9999999999 +COL endpoint_actual_value FORMAT A40 +COL estimated_rows FORMAT 9999999999 +COL endpoint_repeat_count FORMAT 999999 +COL olddensity FORMAT 0.00000000 +COL newdensity FORMAT 0.00000000 + +WITH col AS ( + SELECT + t.owner + , t.table_name + , t.num_rows + , c.column_name + , c.data_type + , c.histogram + , c.sample_size + , c.density AS OldDensity + , (c.sample_size - c.num_nulls) AS BktCnt + , c.num_distinct AS ndv + , c.num_buckets + , (c.sample_size - c.num_nulls) / c.num_buckets AS pop_bucketSize + FROM + dba_tables t + , dba_tab_columns c + WHERE + -- join + t.owner = c.owner + AND t.table_name = c.table_name + -- filter + AND UPPER(t.table_name) = UPPER(CASE WHEN INSTR('&1','.')>0 THEN SUBSTR('&1',INSTR('&1','.')+1) ELSE '&1' END) + AND UPPER(t.owner) = UPPER(CASE WHEN INSTR('&1','.')>0 THEN SUBSTR('&1',1,INSTR('&1','.')-1) ELSE USER END) + AND UPPER(c.column_name) = UPPER('&2') +), +hist AS ( + SELECT + owner + , table_name + , column_name + , endpoint_number + , endpoint_repeat_count + , endpoint_value + , endpoint_actual_value + FROM + dba_tab_histograms + WHERE + UPPER(table_name) = UPPER(CASE WHEN INSTR('&1','.')>0 THEN SUBSTR('&1',INSTR('&1','.')+1) ELSE '&1' END) + AND UPPER(owner) = UPPER(CASE WHEN INSTR('&1','.')>0 THEN SUBSTR('&1',1,INSTR('&1','.')-1) ELSE USER END) + AND UPPER(column_name) = UPPER('&2') +), +bkt AS ( + -- newdensity calc for a column (returns 1 row as we are looking into one column of one table) + SELECT + COUNT(*) PopValCnt + , SUM(endpoint_repeat_count) PopBktCnt + , ndv + , BktCnt + , pop_bucketSize + FROM + col + , hist + WHERE + endpoint_repeat_count > pop_bucketSize + GROUP BY + ndv + , BktCnt + , pop_bucketSize +), +nd AS ( + SELECT + TRUNC(((BktCnt - PopBktCnt) / BktCnt) / (NDV - PopValCnt), 10) AS NewDensity + FROM + bkt +) +SELECT + rownum AS phys_bucket + , data_type AS data_type + , histogram AS histogram_type + , endpoint_value AS endpoint_value + , CASE + -- popular value + WHEN + histogram = 'HYBRID' AND NVL(endpoint_repeat_count, 0) > 1 + THEN + ROUND(num_rows * (endpoint_repeat_count/sample_size)) + -- non-popular but is an endpoint + WHEN + histogram = 'HYBRID' AND NVL(endpoint_repeat_count, 0) = 1 + THEN + ROUND(num_rows * LEAST(newdensity, endpoint_repeat_count / sample_size)) + -- TODO check if this condition does even exist in the wild + WHEN + histogram = 'HYBRID' AND endpoint_number IS NULL + THEN + -1 + ELSE + NULL + END AS card_thisval + , TRUNC(c.num_rows * nd.newdensity) AS card_non_pop +-- , NVL(endpoint_repeat_count,0) AS endpoint_repeat_count +-- , endpoint_number AS endpoint_number +-- , endpoint_actual_value AS endpoint_actual_value +-- , olddensity AS olddensity +FROM + col c + , hist h + , nd -- single row +WHERE + c.owner = h.owner +AND c.table_name = h.table_name +AND c.column_name = h.column_name +ORDER BY + c.owner, c.table_name, c.column_name, h.endpoint_number +/ diff --git a/tpt/tabpart.sql b/tpt/tabpart.sql new file mode 100644 index 0000000..25f64c7 --- /dev/null +++ b/tpt/tabpart.sql @@ -0,0 +1,42 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col tabpart_high_value head HIGH_VALUE_RAW for a100 +col table_owner for a30 +col table_name for a30 +col partition_name for a30 + +select + table_owner + , table_name + , partition_position pos + , composite + , partition_name + , num_rows + , subpartition_count + , high_value tabpart_high_value + , high_value_length + , compression + , compress_for +from + dba_tab_partitions +where + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND table_owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +ORDER BY + table_owner + , table_name + , partition_position +/ diff --git a/tpt/tabsubpart.sql b/tpt/tabsubpart.sql new file mode 100644 index 0000000..c6bbe12 --- /dev/null +++ b/tpt/tabsubpart.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col tabpart_high_value head HIGH_VALUE_RAW for a100 +col partition_name for a30 +col subpartition_name for a30 + +select + table_owner + , table_name + , partition_name + , subpartition_name + , subpartition_position sub_pos + , num_rows + , high_value tabpart_high_value + , high_value_length +From + dba_tab_subpartitions +where + upper(table_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND table_owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +ORDER BY + table_owner + , table_name + , partition_name + , subpartition_position +/ diff --git a/tpt/tail.sql b/tpt/tail.sql new file mode 100644 index 0000000..ee72c41 --- /dev/null +++ b/tpt/tail.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--host tail -&1 &trcfile +host ssh oracle@solaris01 tail &trcfile + diff --git a/tpt/temp.sql b/tpt/temp.sql new file mode 100644 index 0000000..6e1cc42 --- /dev/null +++ b/tpt/temp.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL temp_username FOR A20 HEAD USERNAME +COL temp_tablespace FOR A20 HEAD TABLESPACE + +SELECT + u.inst_id + , u.username temp_username + , s.sid + , u.session_num serial# + , u.sql_id + , u.tablespace temp_tablespace + , u.contents + , u.segtype + , ROUND( u.blocks * t.block_size / (1024*1024) ) MB + , u.extents + , u.blocks +FROM + gv$tempseg_usage u + , gv$session s + , dba_tablespaces t +WHERE + u.session_addr = s.saddr +AND u.inst_id = s.inst_id +AND t.tablespace_name = u.tablespace +ORDER BY + mb DESC +/ + diff --git a/tpt/ti.sql b/tpt/ti.sql new file mode 100644 index 0000000..1d2673f --- /dev/null +++ b/tpt/ti.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@saveset + +column _ti_sequence noprint new_value _ti_sequence + +set feedback off heading off + +select trim(to_char( &_ti_sequence + 1 , '0999' )) "_ti_sequence" from dual; + +alter session set tracefile_identifier="&_ti_sequence"; + +set feedback on heading on + +set termout off + +column tracefile noprint new_value trc + +SELECT value tracefile FROM v$diag_info WHERE name = 'Default Trace File'; + +-- this is from from old 9i/10g days... +-- +-- select value ||'/'||(select instance_name from v$instance) ||'_ora_'|| +-- (select spid||case when traceid is not null then '_'||traceid else null end +-- from v$process where addr = (select paddr from v$session +-- where sid = (select sid from v$mystat +-- where rownum = 1 +-- ) +-- ) +-- ) || '.trc' tracefile +-- from v$parameter where name = 'user_dump_dest'; + +set termout on +@@loadset + +prompt New tracefile_identifier=&trc + +col tracefile print + diff --git a/tpt/tlc.sql b/tpt/tlc.sql new file mode 100644 index 0000000..f9d16c6 --- /dev/null +++ b/tpt/tlc.sql @@ -0,0 +1,13 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- oracle 11.2 +PROMPT Display top-level call names matching %&1% (Oracle 11.2+) +SELECT + * +FROM + v$toplevelcall +WHERE + UPPER(top_level_call_name) LIKE UPPER('%&1%') +/ + diff --git a/tpt/tmp/.gitkeep b/tpt/tmp/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tpt/toff.sql b/tpt/toff.sql new file mode 100644 index 0000000..e0fa82a --- /dev/null +++ b/tpt/toff.sql @@ -0,0 +1,9 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +alter session set events '&1 trace name context off'; +alter session set tracefile_identifier=CLEANUP; + +host ssh2 oracle@solaris01 "rm &trc" + +--host ssh2 oracle@solaris01 "rm `echo &trc | sed 's/_CLEANUP//'`" diff --git a/tpt/ton.sql b/tpt/ton.sql new file mode 100644 index 0000000..0fb59ed --- /dev/null +++ b/tpt/ton.sql @@ -0,0 +1,12 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set define ^ + +host ssh2 -q oracle@solaris01 "/usr/sbin/mknod ^trc p" +host start /wait /b ssh2 oracle@solaris01 "/usr/sfw/bin/gegrep -ie ""^3"" ^trc --line-buffered" + +alter session set tracefile_identifier=''; +alter session set events '^1 trace name context forever, level ^2'; + +set define & \ No newline at end of file diff --git a/tpt/tools/collectors/latchprof_install.sql b/tpt/tools/collectors/latchprof_install.sql new file mode 100644 index 0000000..68f3126 --- /dev/null +++ b/tpt/tools/collectors/latchprof_install.sql @@ -0,0 +1,123 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- LatchProfX collector v2.0 by Tanel Poder (blog.tanelpoder.com) + +-- drop table latchprof_reasons; + +create table latchprof_reasons ( + indx number not null + , reason_name varchar2(200) not null + , reason_label varchar2(200) + , primary key (indx) +) +organization index +tablespace users +/ + +insert into latchprof_reasons (indx,reason_name,reason_label) +select indx, ksllwnam, ksllwlbl +from x$ksllw +/ + +commit; + +--drop table latchprof_history; + +create table latchprof_history + tablespace users +as +select + systimestamp sample_timestamp + , lh.ksuprpid pid + , lh.ksuprsid sid + , lh.ksuprlat child_address + , lh.ksuprlnm latch_name + , lh.ksuprlmd hold_mode + , lh.ksulawhr where_location + , lh.ksulawhy which_object + , s.ksusesqh sqlhash + , s.ksusesql sqladdr + , s.ksusesph planhash + , s.ksusesch sqlchild + , s.ksusesqi sqlid +from + x$ksuprlat lh + , x$ksuse s +where + lh.ksuprsid = s.indx +and 1=0 +/ + + +create or replace package latchprof as + procedure snap_latchholder(p_sleep in number default 1); +end latchprof; +/ +show err + +create or replace package body latchprof as + + procedure snap_latchholder(p_sleep in number default 1) as + begin + + while true loop + + insert into latchprof_history + select /*+ LEADING(lh) USE_NL(s) LATCHPROF_INSERT */ + systimestamp sample_timestamp + , lh.ksuprpid pid + , lh.ksuprsid sid + , lh.ksuprlat child_address + , lh.ksuprlnm latch_name + , lh.ksuprlmd hold_mode + , lh.ksulawhr where_location + , lh.ksulawhy which_object + , s.ksusesqh sqlhash + , s.ksusesql sqladdr + , s.ksusesph planhash + , s.ksusesch sqlchild + , s.ksusesqi sqlid + from + x$ksuprlat lh + , x$ksuse s + where + lh.ksuprsid = s.indx + ; + commit; + + dbms_lock.sleep(p_sleep); + + end loop; -- while true + + end snap_latchholder; + +end latchprof; +/ +show err + +-- 9i version +create or replace view latchprof_view as +select + h.sample_timestamp + , h.pid + , h.sid + , h.child_address + , h.latch_name + , h.hold_mode + , h.where_location + , h.which_object + , h.sqlid + , h.sqlchild + , h.planhash + , h.sqlhash + , h.sqladdr + , r.reason_name + , r.reason_label +from + latchprof_history h + , latchprof_reasons r +where + h.where_location = r.indx +/ + diff --git a/tpt/tools/collectors/mutexprof_install.sql b/tpt/tools/collectors/mutexprof_install.sql new file mode 100644 index 0000000..d5bf00e --- /dev/null +++ b/tpt/tools/collectors/mutexprof_install.sql @@ -0,0 +1,58 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +drop table mutexprof_history; + +create table mutexprof_history + tablespace users +as +select + * +from + x$mutex_sleep_history +where + 1=0 +/ + +create or replace package mutexprof as + procedure snap_mutex_sleeps(p_sleep in number default 1); +end mutexprof; +/ +show err + +create or replace package body mutexprof as + + procedure snap_mutex_sleeps(p_sleep in number default 1) as + lv_max_sleep_timestamp timestamp := systimestamp; + type typ is table of x$mutex_sleep_history%rowtype; + t typ; + begin + + while true loop + + select * bulk collect into t + from x$mutex_sleep_history + where sleep_timestamp > lv_max_sleep_timestamp; + + -- get max timestamp so next time we can ignore these rows + for r in 1 .. t.count loop + if t(r).sleep_timestamp > lv_max_sleep_timestamp then + lv_max_sleep_timestamp := t(r).sleep_timestamp; + end if; + end loop; + + -- insert + forall r in 1 .. t.count + insert into mutexprof_history values t(r); + + commit; + dbms_lock.sleep(p_sleep); + + end loop; -- while true + + end snap_mutex_sleeps; + +end mutexprof; +/ +show err + diff --git a/tpt/tools/collectors/plancap_collector.sql b/tpt/tools/collectors/plancap_collector.sql new file mode 100644 index 0000000..115f6fb --- /dev/null +++ b/tpt/tools/collectors/plancap_collector.sql @@ -0,0 +1,109 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE OR REPLACE PACKAGE plancap_collector AS + + PROCEDURE snap_data_files; + PROCEDURE snap_free_space; + PROCEDURE snap_segment_space; + PROCEDURE snap_service_stats; + +END plancap_collector; +/ + +CREATE OR REPLACE PACKAGE BODY plancap_collector AS + + PROCEDURE snap_data_files AS + BEGIN + INSERT INTO plancap$data_files + SELECT + sysdate + , tablespace_name + , file_id + , SUM(bytes) + , SUM(blocks) + , relative_fno + FROM + dba_data_files + GROUP BY + sysdate, tablespace_name, file_id, relative_fno; + COMMIT; + END snap_data_files; + + PROCEDURE snap_free_space AS + BEGIN + INSERT INTO plancap$free_space + SELECT + sysdate + , tablespace_name + , file_id + , SUM(bytes) + , SUM(blocks) + , relative_fno + FROM + dba_free_space + GROUP BY + sysdate, tablespace_name, file_id, relative_fno; + COMMIT; + END snap_free_space; + + PROCEDURE snap_segment_space AS + BEGIN + INSERT INTO plancap$segment_space + SELECT + sysdate + , owner + , segment_name + , NVL(partition_name,'-') partition_name + , segment_type + , tablespace_name + , SUM(bytes) bytes + , SUM(blocks) blocks + , SUM(extents) extents + FROM + dba_segments + GROUP BY + sysdate, owner, segment_name, NVL(partition_name,'-'), tablespace_name, segment_type; + COMMIT; + END snap_segment_space; + + + PROCEDURE snap_service_stats AS + BEGIN + INSERT INTO plancap$service_stats + WITH sq AS ( + SELECT service_name,stat_name,value FROM v$service_stats + ) + SELECT + sysdate + , a.service_name + , a.value DB_CPU + , b.value EXECUTE_COUNT + , c.value USER_COMMITS + , d.value USER_CALLS + FROM + sq a + , sq b + , sq c + , sq d + WHERE + a.service_name = b.service_name + AND b.service_name = c.service_name + AND c.service_name = d.service_name + AND a.stat_name = 'DB CPU' + AND b.stat_name = 'execute count' + AND c.stat_name = 'user commits' + AND d.stat_name = 'user calls'; + COMMIT; + END; + + +END plancap_collector; +/ + +SHOW ERR + + + + + \ No newline at end of file diff --git a/tpt/tools/collectors/plancap_collector_schema.sql b/tpt/tools/collectors/plancap_collector_schema.sql new file mode 100644 index 0000000..51b448e --- /dev/null +++ b/tpt/tools/collectors/plancap_collector_schema.sql @@ -0,0 +1,67 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- drop table plancap$data_files; +-- drop table plancap$free_space; +-- drop table plancap$segment_space; + +CREATE TABLE plancap$data_files ( + snap_time DATE NOT NULL + , tablespace_name VARCHAR2(100) NOT NULL + , file_id NUMBER NOT NULL + , bytes NUMBER NOT NULL + , blocks NUMBER NOT NULL + , relative_fno NUMBER NOT NULL +); + +ALTER TABLE plancap$data_files ADD CONSTRAINT pk_data_files +PRIMARY KEY (snap_time,tablespace_name,file_id); + +CREATE TABLE plancap$free_space ( + snap_time DATE NOT NULL + , tablespace_name VARCHAR2(100) NOT NULL + , file_id NUMBER NOT NULL + , bytes NUMBER NOT NULL + , blocks NUMBER NOT NULL + , relative_fno NUMBER NOT NULL +); + +ALTER TABLE plancap$free_space ADD CONSTRAINT pk_free_space +PRIMARY KEY (snap_time,tablespace_name,file_id); + + +CREATE TABLE plancap$segment_space( + snap_time DATE NOT NULL + , owner VARCHAR2(100) NOT NULL + , segment_name VARCHAR2(100) NOT NULL + , partition_name VARCHAR2(100) NOT NULL + , segment_type VARCHAR2(100) NOT NULL + , tablespace_name VARCHAR2(100) NOT NULL + , bytes NUMBER NOT NULL + , blocks NUMBER NOT NULL + , extents NUMBER NOT NULL +); + +ALTER TABLE plancap$segment_space ADD CONSTRAINT pk_segment_space +PRIMARY KEY (snap_time,owner,segment_name,partition_name,segment_type); + +CREATE TABLE plancap$service_stats ( + snap_time DATE NOT NULL + , service_name VARCHAR2(100) NOT NULL + , db_cpu NUMBER NOT NULL + , execute_count NUMBER NOT NULL + , user_commits NUMBER NOT NULL + , user_calls NUMBER NOT NULL +); + +ALTER TABLE plancap$service_stats ADD CONSTRAINT pk_service_stats +PRIMARY KEY (snap_time,service_name); + + +CREATE PUBLIC SYNONYM plancap$data_files FOR plancap$data_files; +CREATE PUBLIC SYNONYM plancap$free_space FOR plancap$free_space; +CREATE PUBLIC SYNONYM plancap$segment_space FOR plancap$segment_space; + +GRANT SELECT ON plancap$data_files to DBA; +GRANT SELECT ON plancap$free_space to DBA; +GRANT SELECT ON plancap$segment_space to DBA; diff --git a/tpt/tools/collectors/shared_pool_monitor/reserved_pool_users.sql b/tpt/tools/collectors/shared_pool_monitor/reserved_pool_users.sql new file mode 100644 index 0000000..7e25ed1 --- /dev/null +++ b/tpt/tools/collectors/shared_pool_monitor/reserved_pool_users.sql @@ -0,0 +1,58 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- select * from v$shared_pool_reserved; +--CREATE TABLE tanel_ksmspr TABLESPACE USERS AS SELECT * FROM sys.x$ksmspr; +--CREATE TABLE tanel_kglob STORAGE (INITIAL 10M NEXT 10M PCTINCREASE 0) TABLESPACE users AS SELECT * FROM sys.x$kglob; + +SELECT + l.kglnaown owner + , l.kglnaobj object_name + , l.kglnahsh hash_value + , decode(l.kglhdnsp,0,'CURSOR',1,'TABLE/PROCEDURE',2,'BODY',3,'TRIGGER', 4,'INDEX',5,'CLUSTER',6,'OBJECT', + 13,'JAVA SOURCE',14,'JAVA RESOURCE', 15,'REPLICATED TABLE OBJECT', + 16,'REPLICATION INTERNAL PACKAGE', + 17,'CONTEXT + POLICY',18,'PUB_SUB',19,'SUMMARY',20,'DIMENSION', 21,'APP CONTEXT',22,'STORED OUTLINE' + ,23,'RULESET',24,'RSRC PLAN', + 25,'RSRC CONSUMER GROUP',26,'PENDING RSRC PLAN',27,'PENDING RSRC CONSUMER GROUP', + 28,'SUBSCRIPTION',29,'LOCATION',30,'REMOTE OBJECT', + 31,'SNAPSHOT METADATA',32,'JAVA SHARED DATA',33,'SECURITY PROFILE', 'INVALID NAMESPACE') obj_namespace + , decode(bitand(l.kglobflg,3),0,'NOT LOADED',2,'NON-EXISTENT',3,'INVALID STATUS', + decode(kglobtyp, 0,'CURSOR',1,'INDEX',2,'TABLE',3,'CLUSTER',4,'VIEW', + 5,'SYNONYM',6,'SEQUENCE',7,'PROCEDURE',8,'FUNCTION',9,'PACKAGE',10, 'NON-EXISTENT', + 11,'PACKAGE BODY',12,'TRIGGER',13,'TYPE',14,'TYPE BODY', + 15,'OBJECT',16,'USER',17,'DBLINK',18,'PIPE',19,'TABLE PARTITION' + , 20,'INDEX PARTITION',21,'LOB',22,'LIBRARY',23,'DIRECTORY',24,'QUEUE', + 25,'INDEX-ORGANIZED TABLE',26,'REPLICATION OBJECT GROUP', + 27,'REPLICATION PROPAGATOR', 28,'JAVA SOURCE',29,'JAVA CLASS',30,'JAVA RESOURCE' + ,31,'JAVA JAR', 32,'INDEX TYPE',33, + 'OPERATOR',34,'TABLE SUBPARTITION',35,'INDEX SUBPARTITION', + 36, 'REPLICATED TABLE OBJECT',37,'REPLICATION INTERNAL PACKAGE', 38,'CONTEXT POLICY' + ,39,'PUB_SUB',40,'LOB PARTITION',41,'LOB SUBPARTITION', 42,'SUMMARY',43,'DIMENSION' + ,44,'APP CONTEXT',45,'STORED OUTLINE',46,'RULESET', 47,'RSRC PLAN', + 48,'RSRC CONSUMER GROUP',49,'PENDING RSRC PLAN', 50,'PENDING RSRC CONSUMER GROUP' + ,51,'SUBSCRIPTION',52,'LOCATION', 53,'REMOTE OBJECT',54,'SNAPSHOT METADATA',55,'IFS' + , 56,'JAVA SHARED DATA',57,'SECURITY PROFILE','INVALID TYPE')) obj_type + , s.ksmchptr + , s.ksmchsiz + , s.ksmchcls + , s.ksmchcom + , s.ksmchpar +FROM + tanel_ksmspr s + , tanel_kglob l + -- x$ksmspr s + --, x$kglob l +WHERE + s.ksmchptr = l.kglobhd0 +OR s.ksmchptr = l.kglobhd1 +OR s.ksmchptr = l.kglobhd2 +OR s.ksmchptr = l.kglobhd3 +OR s.ksmchptr = l.kglobhd4 +OR s.ksmchptr = l.kglobhd5 +OR s.ksmchptr = l.kglobhd6 +OR s.ksmchptr = l.kglobhd7 +ORDER BY + s.ksmchsiz +/ diff --git a/tpt/tools/collectors/shared_pool_monitor/shared_pool_monitor_package.sql b/tpt/tools/collectors/shared_pool_monitor/shared_pool_monitor_package.sql new file mode 100644 index 0000000..3ef2e4c --- /dev/null +++ b/tpt/tools/collectors/shared_pool_monitor/shared_pool_monitor_package.sql @@ -0,0 +1,204 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- monitor shared pool activity, free memory and chunk flushing +-- +-- USAGE: +-- exec shared_pool_monitor.get_all( , 0 + AND ksmdsidx > 0 + GROUP BY + SYSDATE + , ksmdsidx + , ksmssnam; + + COMMIT; + + DBMS_APPLICATION_INFO.SET_ACTION('GET_SUBPOOL_STATS:END'); + END get_subpool_stats; + + PROCEDURE get_flush_stats(p_date IN DATE DEFAULT SYSDATE) AS + BEGIN + DBMS_APPLICATION_INFO.SET_ACTION('GET_FLUSH_STATS:BEGIN'); + + -- this procedure relies on the fact that X$KSMLRU contents are cleared out + -- automatically every time it's queried + INSERT INTO spmon_flush_stats ( sample_time, addr, indx, inst_id, chunk_subpool + , chunk_duration, chunk_comment , chunk_size + , chunks_flushed_out , flusher_object_name + , flusher_hash_value , flusher_ses_addr ) + SELECT + p_date sample_time + , ADDR + , INDX + , INST_ID + , KSMLRIDX + , KSMLRDUR + , KSMLRCOM + , KSMLRSIZ + , KSMLRNUM + , KSMLRHON + , KSMLROHV + , KSMLRSES + FROM + x$ksmlru + WHERE + ksmlrnum > 0; + + COMMIT; + + DBMS_APPLICATION_INFO.SET_ACTION('GET_FLUSH_STATS:END'); + END get_flush_stats; + + PROCEDURE get_heap_activity_stats(p_date IN DATE DEFAULT SYSDATE) AS + BEGIN + DBMS_APPLICATION_INFO.SET_ACTION('GET_HEAP_ACTIVITY_STATS:BEGIN'); + + INSERT INTO spmon_heap_activity_stats + SELECT + p_date + , kghluidx + , kghludur + , kghlufsh + , kghluops + , kghlurcr + , kghlutrn + , kghlunfu + , kghlunfs + , kghlumxa + , kghlumes + , kghlumer + , kghlurcn + , kghlurmi + , kghlurmz + , kghlurmx + FROM + x$kghlu; + COMMIT; + + DBMS_APPLICATION_INFO.SET_ACTION('GET_HEAP_ACTIVITY_STATS:END'); + END get_heap_activity_stats; + + PROCEDURE get_reserved_chunk_details(p_date IN DATE DEFAULT SYSDATE) AS + BEGIN + DBMS_APPLICATION_INFO.SET_ACTION('GET_RESERVED_CHUNKS:BEGIN'); + INSERT INTO spmon_reserved_chunk_details + SELECT + p_date + , ADDR + , INDX + , INST_ID + , KSMCHCOM + , KSMCHPTR + , KSMCHSIZ + , KSMCHCLS + , KSMCHTYP + , KSMCHPAR + FROM + x$ksmspr -- important, this view must be x$ksmspR <-- (not the x$ksmsp which may hang your instance) + ; + COMMIT; + DBMS_APPLICATION_INFO.SET_ACTION('GET_RESERVED_CHUNKS:END'); + END get_reserved_chunk_details; + + + PROCEDURE get_reserved_chunk_stats(p_date IN DATE DEFAULT SYSDATE) AS + BEGIN + DBMS_APPLICATION_INFO.SET_ACTION('GET_RESERVED_CHUNKS:BEGIN'); + INSERT INTO spmon_reserved_chunk_stats + SELECT + p_date + , KSMCHCLS + , KSMCHCOM + , KSMCHTYP + , COUNT(*) + , SUM(KSMCHSIZ) + , AVG(KSMCHSIZ) + , MIN(KSMCHSIZ) + , MAX(KSMCHSIZ) + FROM + x$ksmspr -- important, this view must be x$ksmspR <-- (not the x$ksmsp which may hang your instance) + GROUP BY + p_date + , ksmchcls + , ksmchcom + , ksmchtyp; + + COMMIT; + DBMS_APPLICATION_INFO.SET_ACTION('GET_RESERVED_CHUNKS:END'); + END get_reserved_chunk_stats; + + + + PROCEDURE get_all(p_sleep IN NUMBER DEFAULT 600, p_times IN NUMBER DEFAULT 0) AS + cur_date DATE; + BEGIN + + IF p_times > 0 THEN -- sample x times + FOR i IN 1..p_times LOOP + cur_date := SYSDATE; + + get_subpool_stats(cur_date); + get_heap_activity_stats(cur_date); + get_flush_stats(cur_date); + get_reserved_chunk_stats(cur_date); + + DBMS_APPLICATION_INFO.SET_ACTION('MAIN LOOP:SLEEPING'); + DBMS_LOCK.SLEEP(p_sleep); + END LOOP; -- 1..p_times + ELSE -- sample forever + WHILE TRUE LOOP + cur_date := SYSDATE; + + get_subpool_stats(cur_date); + get_heap_activity_stats(cur_date); + get_flush_stats(cur_date); + get_reserved_chunk_stats(cur_date); + + DBMS_APPLICATION_INFO.SET_ACTION('MAIN LOOP:SLEEPING'); + DBMS_LOCK.SLEEP(p_sleep); + END LOOP; -- while true + END IF; -- p_times > 0 + + END get_all; + +BEGIN + DBMS_APPLICATION_INFO.SET_MODULE('SHARED POOL MONITOR', 'PACKAGE INITIALIZATION'); + +END shared_pool_monitor; +/ + +SHOW ERR + +GRANT EXECUTE ON shared_pool_monitor TO perfstat; + diff --git a/tpt/tools/collectors/shared_pool_monitor/shared_pool_monitor_queries.sql b/tpt/tools/collectors/shared_pool_monitor/shared_pool_monitor_queries.sql new file mode 100644 index 0000000..5aabcb5 --- /dev/null +++ b/tpt/tools/collectors/shared_pool_monitor/shared_pool_monitor_queries.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + SAMPLE_TIME + , SUBPOOL + , DURATION + , FLUSHED_CHUNKS_D + , LRU_OPERATIONS_D + , RESERVED_SCANS + , RESERVED_MISSES + , UNSUCCESSFUL_FLUSHES + , LAST_UNSUCC_MISS_REQ_SIZE + , LAST_UNSUCC_FLUSH_REQ_SIZE +FROM + sys.SPMON_HEAP_ACTIVITY_VIEW +WHERE + sample_time BETWEEN %FROM_DATE% AND %TO_DATE% + diff --git a/tpt/tools/collectors/shared_pool_monitor/shared_pool_monitor_schema.sql b/tpt/tools/collectors/shared_pool_monitor/shared_pool_monitor_schema.sql new file mode 100644 index 0000000..987f113 --- /dev/null +++ b/tpt/tools/collectors/shared_pool_monitor/shared_pool_monitor_schema.sql @@ -0,0 +1,124 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- change to whichever tablespace you want to create these tables in +DEF tablespace=TOOLS + +-- x$ksmss (v$sgastat) +CREATE TABLE spmon_subpool_stats ( + sample_time DATE + , subpool NUMBER + , name VARCHAR2(100) + , bytes NUMBER +) +TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0); + +-- x$ksmlru +CREATE TABLE spmon_flush_stats ( + sample_time DATE + , addr RAW(8) + , indx NUMBER + , inst_id NUMBER + , chunk_subpool NUMBER + , chunk_duration NUMBER + , chunk_comment VARCHAR2(100) + , chunk_size NUMBER + , chunks_flushed_out NUMBER + , flusher_object_name VARCHAR2(100) + , flusher_hash_value NUMBER + , flusher_ses_addr RAW(8) +) +TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0); + +-- x$kghlu (part of v$shared_pool_reserved) +CREATE TABLE spmon_heap_activity_stats ( + sample_time DATE + , kghluidx NUMBER -- subpool id + , kghludur NUMBER -- allocation duration class + , kghlufsh NUMBER -- chunks flushed + , kghluops NUMBER -- LRU operations (moving chunks around in LRU list) + , kghlurcr NUMBER -- recurrent chunks (pinned/unpinned 3 times or more) + , kghlutrn NUMBER -- transient chunks (pinned 1-2 times) + , kghlumxa NUMBER -- + , kghlumes NUMBER -- + , kghlumer NUMBER -- + , kghlurcn NUMBER -- reserved freelist scans + , kghlurmi NUMBER -- reserved freelist misses + , kghlurmz NUMBER -- last reserved scan miss size + , kghlurmx NUMBER -- reserved list scan max miss size + , kghlunfu NUMBER -- number of free-unpinned unsuccessful attempts + , kghlunfs NUMBER -- last free unpinned unsuccessful size +) +TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0); + +CREATE OR REPLACE VIEW spmon_heap_activity_view AS +SELECT + sample_time + , kghluidx subpool + , kghludur duration + , CASE WHEN kghlufsh - NVL(lag(kghlufsh,1) over (partition by kghluidx, kghludur order by sample_time), kghlufsh) < 0 + THEN kghlufsh + ELSE kghlufsh - lag(kghlufsh,1) over (partition by kghluidx, kghludur order by sample_time) + END flushed_chunks_d + , CASE WHEN kghluops - NVL(lag(kghluops,1) over (partition by kghluidx, kghludur order by sample_time), kghluops) < 0 + THEN kghluops + ELSE kghluops - lag(kghluops,1) over (partition by kghluidx, kghludur order by sample_time) + END lru_operations_d + , CASE WHEN kghlurcn - NVL(lag(kghlurcn,1) over (partition by kghluidx, kghludur order by sample_time), kghlurcn) < 0 + THEN kghlurcn + ELSE kghlurcn - lag(kghlurcn,1) over (partition by kghluidx, kghludur order by sample_time) + END reserved_scans + , CASE WHEN kghlurmi - NVL(lag(kghlurmi,1) over (partition by kghluidx, kghludur order by sample_time), kghlurmi) < 0 + THEN kghlurmi + ELSE kghlurmi - lag(kghlurmi,1) over (partition by kghluidx, kghludur order by sample_time) + END reserved_misses + , CASE WHEN kghlunfu - NVL(lag(kghlunfu,1) over (partition by kghluidx, kghludur order by sample_time), kghlunfu) < 0 + THEN kghlunfu + ELSE kghlunfu - lag(kghlunfu,1) over (partition by kghluidx, kghludur order by sample_time) + END unsuccessful_flushes + , kghlurmz last_unsucc_miss_req_size + , kghlunfs last_unsucc_flush_req_size +FROM + spmon_heap_activity_stats +/ + +-- chunk details (all chunks in reserved area are dumped here) +-- x$ksmspr (v$shared_pool_reserved) +CREATE TABLE spmon_reserved_chunk_details ( + sample_time DATE + , addr RAW(8) + , indx NUMBER + , inst_id NUMBER + , ksmchcom VARCHAR2(100) + , ksmchptr RAW(8) + , ksmchsiz NUMBER + , ksmchcls VARCHAR2(100) + , ksmchtyp NUMBER + , ksmchpar RAW(8) +) +TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0); + +-- min,max,avg chunk size grouped by chunk type and (allocation reason) comment +-- x$ksmspr (v$shared_pool_reserved) summary +CREATE TABLE spmon_reserved_chunk_stats ( + sample_time DATE + , ksmchcls VARCHAR2(100) + , ksmchcom VARCHAR2(100) + , ksmchtype NUMBER + , chunk_count NUMBER + , total_size NUMBER + , avg_size NUMBER + , min_size NUMBER + , max_size NUMBER +) +TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0); + +GRANT SELECT ON SPMON_FLUSH_STATS TO PERFSTAT; +GRANT SELECT ON SPMON_HEAP_ACTIVITY_STATS TO PERFSTAT; +GRANT SELECT ON SPMON_RESERVED_CHUNK_DETAILS TO PERFSTAT; +GRANT SELECT ON SPMON_RESERVED_CHUNK_STATS TO PERFSTAT; +GRANT SELECT ON SPMON_SUBPOOL_STATS TO PERFSTAT; + +GRANT SELECT ON spmon_heap_activity_view TO PERFSTAT; + + diff --git a/tpt/tools/collectors/space_collect.sql b/tpt/tools/collectors/space_collect.sql new file mode 100644 index 0000000..74a2f5b --- /dev/null +++ b/tpt/tools/collectors/space_collect.sql @@ -0,0 +1,13 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- this script requires PLANCAP_COLLECTOR package +-- which is created using these scripts +-- 1) plancap_collector_schema.sql +-- 2) plancap_collector.sql + +EXEC SNAP_DATA_FILES +EXEC SNAP_FREE_SPACE +EXEC SNAP_SEGMENT_SPACE +EXEC SNAP_SERVICE_STATS + diff --git a/tpt/tools/helper_views/gen_rows_1000000000.sql b/tpt/tools/helper_views/gen_rows_1000000000.sql new file mode 100644 index 0000000..f5c2b69 --- /dev/null +++ b/tpt/tools/helper_views/gen_rows_1000000000.sql @@ -0,0 +1,13 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE OR REPLACE VIEW gen_rows_1000000000 AS +SELECT r FROM ( + SELECT ROWNUM r + FROM + (SELECT ROWNUM r FROM dual CONNECT BY ROWNUM <= 1000) a, + (SELECT ROWNUM r FROM dual CONNECT BY ROWNUM <= 1000) b, + (SELECT ROWNUM r FROM dual CONNECT BY ROWNUM <= 1000) c + ) +/ + diff --git a/tpt/tools/moats_v1.05/README.txt b/tpt/tools/moats_v1.05/README.txt new file mode 100644 index 0000000..c29d44b --- /dev/null +++ b/tpt/tools/moats_v1.05/README.txt @@ -0,0 +1,220 @@ + +Mother Of All Tuning Scripts (MOATS) README +=========================================== + +Copyright Information +===================== +MOATS v1.04, September 2010 +(c) Adrian Billington www.oracle-developer.net +(c) Tanel Poder www.e2sn.com + +Contents +======== +1.0 Introduction +2.0 Supported Versions +3.0 Installation & Removal + 3.1 Prerequisites + 3.1.1 System Privileges + 3.1.2 Object Privileges + 3.2 Installation + 3.3 Removal +4.0 Usage + 4.1 SQL*Plus Setup + 4.1.1 Window Size + 4.1.2 SQL*Plus Settings + 4.2 MOATS TOP Usage + 4.2.1 Using MOATS.TOP directly + 4.2.2 Using the TOP view + 4.3 Other MOATS APIs +5.0 Roadmap +6.0 Disclaimer +7.0 Acknowledgements + + +1.0 Introduction +================ +MOATS is a simple tuning tool that samples active sessions and reports top database activity in regular screen refreshes at specified intervals (similar to the TOP utility for UNIX). MOATS is designed to run in sqlplus only and has recommended display settings to enable screen refreshes. + +Examples of how this application might be used: + + -- To report top session and instance activity at 5 second intervals... + -- -------------------------------------------------------------------- + + SQL> set arrays 36 lines 110 head off tab off + + SQL> SELECT * FROM TABLE(moats.top(5)); + + + -- Sample output... + -- -------------------------------------------------------------------- + + MOATS: The Mother Of All Tuning Scripts v1.0 by Adrian Billington & Tanel Poder + http://www.oracle-developer.net & http://www.e2sn.com + + + INSTANCE SUMMARY ------------------------------------------------------------------------------------------+ + | Instance: ora112 | Execs/s: 2.0 | sParse/s: 0.0 | LIOs/s: 219637.3 | Read MB/s: 0.0 | + | Cur Time: 13-Aug 19:25:14 | Calls/s: 0.0 | hParse/s: 0.0 | PhyRD/s: 0.5 | Write MB/s: 0.0 | + | History: 0h 0m 26s | Commits/s: 0.0 | ccHits/s: 1.5 | PhyWR/s: 2.9 | Redo MB/s: 0.0 | + +------------------------------------------------------------------------------------------------------------+ + + + TOP SQL_ID (child#) -----+ TOP SESSIONS ---------+ + TOP WAITS -------------------------+ WAIT CLASS -+ + | 50% | bwx4var9q4y9f (0) | 71 | | 100% | latch: cache buffers chains | Concurrency | + | 50% | bq2qr0bhjyv1c (0) | 133 | | 50% | SQL*Net message to client | Network | + | 50% | 799uuu8tpf6rk (0) | 6 | | | | + +--------------------------------------------------+ +--------------------------------------------------+ + + + TOP SQL_ID ----+ PLAN_HASH_VALUE + SQL TEXT ---------------------------------------------------------------+ + | bwx4var9q4y9f | 2119813036 | select /*+ full(a) full(b) use_nl(a b) */ count(*) from sys.obj$ a, | + | | | ys.obj$ b where a.name = b.name and rownum <= 1000002 | + + ---------------------------------------------------------------------------------------------------------- + + | bq2qr0bhjyv1c | 644658511 | select moats_ash_ot( systimestamp, saddr, sid, serial#, audsid, paddr, | + | | | er#, username, command, ownerid, taddr | + + ---------------------------------------------------------------------------------------------------------- + + | 799uuu8tpf6rk | 2119813036 | select /*+ full(a) full(b) use_nl(a b) */ count(*) from sys.obj$ a, | + | | | ys.obj$ b where a.name = b.name and rownum <= 1000001 | + + ---------------------------------------------------------------------------------------------------------- + + + +2.0 Supported Versions +====================== +MOATS supports all Oracle versions of 10g Release 2 and above. + + +3.0 Installation & Removal +========================== +MOATS requires several database objects to be created. The privileges, installation and removal steps are described below. + +3.1 Prerequisites +----------------- +It is recommended that this application is installed in a "TOOLS" schema, but whichever schema is used requires the following privileges. Note that any or all of these grants can be assigned to either the MOATS target schema itself or a role that is granted to the MOATS target schema. + +3.1.1 System Privileges +----------------------- + * CREATE TYPE + * CREATE TABLE + * CREATE VIEW + * CREATE PROCEDURE + +3.1.2 Object Privileges +----------------------- + * EXECUTE ON DBMS_LOCK + * SELECT ON V_$SESSION *** + * SELECT ON V_$STATNAME *** + * SELECT ON V_$SYSSTAT *** + * SELECT ON V_$LATCH *** + * SELECT ON V_$TIMER *** + * SELECT ON V_$SQL *** + + *** Note: + a) SELECT ANY DICTIONARY can be granted in place of the specific V$ view grants above + b) Supplied scripts will grant/revoke all of the above to/from the MOATS target schema/role. + +3.2 Installation +---------------- +MOATS can be installed using sqlplus or any tools that fully support sqlplus commands. To install MOATS: + +1) Ensure that the MOATS owner schema has the required privileges described in Section 3.1 above. A script named moats_privs_grant.sql is supplied if required (this will need to be run as a user with admin grant rights on SYS objects. This script will prompt for the name of the target MOATS schema). + +2) To install MOATS, login as the target schema and run the moats_install.sql script. A warning will prompt for a continue/cancel option. + +3.3 Removal +----------- +To remove MOATS, login as the MOATS owner schema and run the moats_remove.sql script. A warning will prompt for a continue/cancel option. + +To revoke all related privileges from the MOATS owner schema, a script named moats_privs_revoke.sql is supplied if required (this will need to be run as a user with admin grant rights on SYS objects. This script will prompt for the name of the target MOATS schema). + +4.0 Usage +========= +MOATS is simple to use. It is designed for sqlplus only and makes use of sqlplus and PL/SQL functionality to provide real-time screen refreshes. To make the most of MOATS v1.0, follow the steps below. + +4.1 SQL*Plus Setup +------------------ +MOATS TOP output is of a fixed size so needs some specific settings. + +4.1.1 Setting Window Size +------------------------- +The MOATS.FORMAT_WINDOW procedure is a visual aid to setting the right screen size for MOATS. To run it, login to sqlplus and do the following: + + * set serveroutput on format wrapped + * exec moats.format_window + * resize window to the dotted lines at the top and bottom of the FORMAT_WINDOW output + +Window size should be at least 110 x 36 but the FORMAT_WINDOW procedure is the best way to get accurate and optimal settings for MOATS. + +4.1.2 SQL*Plus Settings +----------------------- +MOATS comes with a moats_settings.sql file that does the following: + + * set arrays 36 + * set lines 110 + * set head off + * set tab off + * set serveroutput on format wrapped + +These are optimal sqlplus settings for the MOATS TOP utility and need to be set before running it (see Usage below). + +4.2 MOATS TOP Usage +------------------- +MOATS.TOP is a pipelined function that outputs instance performance statistics at a given refresh interval. Before running TOP, the moats_settings.sql script (or equivalent) should be run in the sqlplus session. The following example refreshes the instance statistics at the default 10 seconds: + +4.2.1 Using MOATS.TOP directly +------------------------------ + + +-------------------------------------+ + | SQL> @moats_settings.sql | + | | + | SQL> SELECT * | + | 2 FROM TABLE(moats.top); | + +-------------------------------------+ + +To use a non-default refresh rate, supply it as follows: + + +-------------------------------------+ + | SQL> SELECT * | + | 2 FROM TABLE(moats.top(5)); | + +-------------------------------------+ + +This example uses a 5 second refresh rate. + +To stop MOATS.TOP refreshes, use a Ctrl-C interrupt. + +4.2.2 Using the TOP view +------------------------ +A view named TOP is included with MOATS for convenience. + + +-------------------------------------+ + | SQL> @moats_settings.sql | + | | + | SQL> SELECT * FROM top; | + +-------------------------------------+ + +To set a non-default value for refresh rate, set the MOATS refresh rate parameter, as follows. + + +--------------------------------------------------------------+ + | SQL> @moats_settings.sql | + | | + | SQL> exec moats.set_parameter(moats.gc_top_refresh_rate, 3); | + | | + | SQL> SELECT * FROM top; | + +--------------------------------------------------------------+ + +This example uses a 3 second refresh rate. + +4.3 Other MOATS APIs +-------------------- +MOATS contains several other public APIs that are currently for internal use only. These will be fully described and "released" with future MOATS versions but are currently only supported for use by MOATS.TOP. They include pipelined functions to query the active session data that MOATS gathers. + +5.0 Roadmap +=========== +There is no fixed roadmap at the time of writing. Features that Tanel and Adrian would like to add (but are not limited to) the following: + + * formally expose the active session query functions for custom-reporting + * add drill-down functionality for SQL statements of interest in the TOP output + +6.0 Disclaimer +============== +This software is supplied in good faith and is free for download, but any subsequent use is entirely at the end-users' risk. Adrian Billington/oracle-developer.net and Tanel Poder/www.e2sn.com do not accept any responsibility for problems arising as a result of using MOATS. All users are strongly advised to read the installation and removal scripts prior to running them and test the application in an appropriate environment. + +7.0 Acknowledgements +==================== +Many thanks to Randolf Geist for his contributions to the latest version of MOATS, including several bug-fixes to the original alpha version. \ No newline at end of file diff --git a/tpt/tools/moats_v1.05/global_test.sql b/tpt/tools/moats_v1.05/global_test.sql new file mode 100644 index 0000000..ff72bd3 --- /dev/null +++ b/tpt/tools/moats_v1.05/global_test.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- hack but ain't working + +CREATE OR REPLACE FUNCTION f + RETURN sys.dbms_debug_vc2coll PIPELINED +AS +BEGIN + FOR i IN 1..3 LOOP + FOR r IN ( + --SELECT USERENV('Instance')||','||TO_CHAR(sid)||','||TO_CHAR(serial#)||','||sql_id||','||state||','||event val + --FROM v$session + --WHERE status = 'ACTIVE' AND type = 'USER' + WITH sq AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$instance) SELECT TO_CHAR(instance_number)||' '||host_name val FROM sq + ) LOOP + PIPE ROW (r.val); + END LOOP; + DBMS_LOCK.SLEEP(1); + END LOOP; +END; +/ + +SHOW ERR; + diff --git a/tpt/tools/moats_v1.05/moats.pkb b/tpt/tools/moats_v1.05/moats.pkb new file mode 100644 index 0000000..1c35c5b --- /dev/null +++ b/tpt/tools/moats_v1.05/moats.pkb @@ -0,0 +1,890 @@ +create or replace package body moats as + + -- Internal types and global arrays for caching collections of + -- SYSSTAT/ASH data for querying within MOATS... + -- ------------------------------------------------------------------ + type moats_stat_ntt_aat is table of moats_stat_ntt + index by pls_integer; + g_stats moats_stat_ntt_aat; + + type moats_ash_ntt_aat is table of moats_ash_ntt + index by pls_integer; + g_ash moats_ash_ntt_aat; + + -- Internal type and variable for storing simple MOATS parameters... + -- ----------------------------------------------------------------- + type parameter_aat is table of integer + index by pls_integer; + g_params parameter_aat; + + -- Variables for maintaining ASH/SYSSTAT collections... + -- ---------------------------------------------------- + g_ash_size pls_integer := 0; + g_stat_size pls_integer := 0; + + -- General constants... + -- -------------------- + gc_space constant moats_output_ot := moats_output_ot(null); + gc_mb constant pls_integer := 1048576; + gc_gb constant pls_integer := 1048576*1024; + gc_screen_size constant pls_integer := 36; + gc_newline constant varchar2(1) := chr(10); + + ---------------------------------------------------------------------------- + procedure p( p_str in varchar2 ) is + begin + dbms_output.put_line(p_str); + end p; + + ---------------------------------------------------------------------------- + procedure po( p_str in moats_output_ot ) is + begin + p(p_str.output); + end po; + +-- ---------------------------------------------------------------------------- +-- procedure dump_ash is +-- pragma autonomous_transaction; +-- begin +-- insert into moats_ash_dump select * from table(moats.get_ash); +-- commit; +-- end dump_ash; + + ---------------------------------------------------------------------------- + procedure show_snaps is + v_indx pls_integer; + begin + p('ASH snaps...'); + p('------------------------------------'); + v_indx := g_ash.first; + while v_indx is not null loop + p(utl_lms.format_message('Index=[%d] Count=[%d]', v_indx, g_ash(v_indx).count)); + v_indx := g_ash.next(v_indx); + end loop; + p('STAT snaps...'); + p('------------------------------------'); + v_indx := g_stats.first; + while v_indx is not null loop + p(utl_lms.format_message('Index=[%d] Count=[%d]', v_indx, g_stats(v_indx).count)); + v_indx := g_stats.next(v_indx); + end loop; + end show_snaps; + + ---------------------------------------------------------------------------- + function banner return moats_output_ntt is + begin + return moats_output_ntt( + moats_output_ot('MOATS: The Mother Of All Tuning Scripts v1.0 by Adrian Billington & Tanel Poder'), + moats_output_ot(' http://www.oracle-developer.net & http://www.e2sn.com') + ); + end banner; + + ---------------------------------------------------------------------------- + function to_string ( p_collection in moats_v2_ntt, + p_delimiter in varchar2 default ',', + p_elements in pls_integer default null ) return varchar2 is + v_str varchar2(4000); + begin + for i in 1 .. least(nvl(p_elements, p_collection.count), p_collection.count) loop + v_str := v_str || p_delimiter || p_collection(i); + end loop; + return ltrim(v_str, p_delimiter); + end to_string; + + ---------------------------------------------------------------------------- + procedure format_window is + v_banner moats_output_ntt := banner(); + c_boundary varchar2(110) := rpad('-',110,'-'); + procedure spaces( p_spaces in pls_integer ) is + begin + for i in 1 .. p_spaces loop + po(gc_space); + end loop; + end spaces; + begin + p(c_boundary); + spaces(2); + for i in 1 .. v_banner.count loop + p(v_banner(i).output); + end loop; + spaces(3); + p(' MOATS.FORMAT_WINDOW'); + p(' -------------------'); + p(' Align sqlplus window size to dotted lines for optimal output'); + spaces(gc_screen_size-10); + p(c_boundary); + end format_window; + + ---------------------------------------------------------------------------- + procedure set_parameter( p_parameter_code in pls_integer, + p_parameter_value in integer ) is + begin + g_params(p_parameter_code) := p_parameter_value; + end set_parameter; + + ---------------------------------------------------------------------------- + function get_parameter ( p_parameter_code in pls_integer ) return integer is + begin + return g_params(p_parameter_code); + end get_parameter; + + ---------------------------------------------------------------------------- + procedure restore_default_parameters is + begin + set_parameter(moats.gc_ash_polling_rate, 1); + set_parameter(moats.gc_ash_threshold, 1000); + set_parameter(moats.gc_top_refresh_rate, 10); + -- By default don't use a trailing ASH window + set_parameter(moats.gc_ash_window_size, NULL); + end restore_default_parameters; + + ---------------------------------------------------------------------------- + function get_sql( p_select in varchar2, + p_from in varchar2, + p_where in varchar2, + p_group_by in varchar2, + p_order_by in varchar2 ) return varchar2 is + v_sql varchar2(32767); + begin + v_sql := 'select ' || nvl(p_select, '*') || ' from ' || p_from; + if p_where is not null then + v_sql := v_sql || ' where ' || p_where; + end if; + if p_group_by is not null then + v_sql := v_sql || ' group by ' || p_group_by; + end if; + if p_order_by is not null then + v_sql := v_sql || ' order by ' || p_order_by; + end if; + return v_sql; + end get_sql; + + ---------------------------------------------------------------------------- + function ash_history return interval day to second is + begin + return g_ash(g_ash.last)(1).snaptime - g_ash(g_ash.first)(1).snaptime; + end ash_history; + + ---------------------------------------------------------------------------- + function ash_sample_count( p_lower_snap in pls_integer, + p_upper_snap in pls_integer ) return pls_integer is + v_samples pls_integer := 0; + v_snap pls_integer; + v_exit boolean := false; + begin + v_snap := p_lower_snap; + while v_snap is not null and not v_exit loop + -- Ignore dummy record + if not (g_ash(v_snap).count = 1 and g_ash(v_snap)(1).sid is null) then + v_samples := v_samples + g_ash(v_snap).count; + end if; + v_exit := (v_snap = p_upper_snap); + v_snap := g_ash.next(v_snap); + end loop; + return greatest(v_samples,1); + end ash_sample_count; + + ---------------------------------------------------------------------------- + procedure maintain_ash_collection( p_index in pls_integer ) is + begin + if g_ash(p_index).count = 0 then + g_ash.delete(p_index); + else + g_ash_size := g_ash_size + g_ash(p_index).count; + while g_ash_size > g_params(moats.gc_ash_threshold) loop + g_ash_size := g_ash_size - g_ash(g_ash.first).count; + g_ash.delete(g_ash.first); + end loop; + end if; + end maintain_ash_collection; + + ---------------------------------------------------------------------------- + procedure snap_ash( p_index in pls_integer ) is + v_sql_template varchar2(32767); + v_sql varchar2(32767); + begin + + -- TODO: conditional compilation to get correct column list for version or + -- select a small bunch of useful columns + + -- Use dynamic SQL to avoid explicit grants on V$SESSION. Prepare the start + -- of the SQL as it will be used twice... + -- ------------------------------------------------------------------------ + v_sql_template := q'[select moats_ash_ot( + systimestamp, saddr, %sid%, serial#, audsid, paddr, user#, + username, command, ownerid, taddr, lockwait, + status, server, schema#, schemaname, osuser, + process, machine, terminal, program, type, + sql_address, sql_hash_value, sql_id, sql_child_number, + prev_sql_addr, prev_hash_value, prev_sql_id, + prev_child_number, module, module_hash, action, + action_hash, client_info, fixed_table_sequence, + row_wait_obj#, row_wait_file#, row_wait_block#, + row_wait_row#, logon_time, last_call_et, pdml_enabled, + failover_type, failover_method, failed_over, + resource_consumer_group, pdml_status, pddl_status, + pq_status, current_queue_duration, client_identifier, + blocking_session_status, blocking_instance, + blocking_session, seq#, event#, case when state = 'WAITING' then event else 'ON CPU' end, p1text, p1, + p1raw, p2text, p2, p2raw, p3text, p3, p3raw, + wait_class_id, wait_class#, case when state = 'WAITING' then wait_class else 'ON CPU' end, wait_time, + seconds_in_wait, state, service_name, sql_trace, + sql_trace_waits, sql_trace_binds + ) + from v$session + where %preds%]'; + + v_sql := replace( v_sql_template, '%sid%', 'sid'); + v_sql := replace( v_sql, '%preds%', q'[ status = 'ACTIVE' + and (wait_class != 'Idle' or state != 'WAITING') + and sid != sys_context('userenv', 'sid')]' ); + + execute immediate v_sql bulk collect into g_ash(p_index); + + -- If we have nothing to snap, add a dummy record that will be ignored + -- in GET_ASH and GET_ASH_SAMPLE_COUNT... + -- ------------------------------------------------------------------- + if g_ash(p_index).count = 0 then + v_sql := replace( v_sql_template, '%sid%', 'null'); + v_sql := replace( v_sql, '%preds%', q'[sid = sys_context('userenv', 'sid')]' ); + execute immediate v_sql bulk collect into g_ash(p_index); + end if; + + maintain_ash_collection(p_index); + + end snap_ash; + + ---------------------------------------------------------------------------- + procedure reset_stats_collection is + begin + g_stats.delete; + end reset_stats_collection; + + ---------------------------------------------------------------------------- + procedure snap_stats( p_index in pls_integer, + p_reset in boolean default false ) is + begin + + if p_reset then + reset_stats_collection(); + end if; + + -- Use dynamic SQL to avoid explicit grants on V$ views... + -- ------------------------------------------------------- + execute immediate + q'[select moats_stat_ot(type, name, value) + from ( + select 'STAT' as type + , sn.name + , ss.value + from v$statname sn + , v$sysstat ss + where sn.statistic# = ss.statistic# + union all + select 'LATCH' + , name + , gets + from v$latch + union all + select 'TIMER' + , 'moats timer' + , hsecs + from v$timer + )]' + bulk collect into g_stats(p_index); + + end snap_stats; + + ---------------------------------------------------------------------------- + function instance_summary ( p_lower_snap in pls_integer, + p_upper_snap in pls_integer ) return moats_output_ntt is + + type metric_aat is table of number + index by pls_integer; + v_rows moats_output_ntt := moats_output_ntt(); + v_metrics metric_aat; + v_secs number; --<-- seconds between 2 stats snaps + v_hivl interval day to second; --<-- interval of ASH history saved + v_hstr varchar2(30); --<-- formatted hh:mi:ss string of history + + begin + + -- Get long and short metrics for range of stats. Order for fixed array offset... + -- ------------------------------------------------------------------------------ + select upr.value - lwr.value + bulk collect into v_metrics + from table(g_stats(p_lower_snap)) lwr + , table(g_stats(p_upper_snap)) upr + where lwr.name = upr.name + and lwr.name in ('execute count', 'parse count (hard)', 'parse count (total)', + 'physical read total IO requests', 'physical read total bytes', + 'physical write total IO requests', 'physical write total bytes', + 'redo size', 'redo writes', 'session cursor cache hits', + 'session logical reads', 'user calls', 'user commits', + 'moats timer') + order by + lwr.name; + + -- 1 execute count + -- 2 moats timer + -- 3 parse count (hard) + -- 4 parse count (total) + -- 5 physical read total IO requests + -- 6 physical read total bytes + -- 7 physical write total IO requests + -- 8 physical write total bytes + -- 9 redo size + -- 10 redo writes + -- 11 session cursor cache hits + -- 12 session logical reads + -- 13 user calls + -- 14 user commits + + -- Execs/s: execute count + -- sParse/s: parse count (total) + -- LIOs/s: session logical reads + -- Read MB/s: physical read total bytes / 1048576 + -- Calls/s: user calls + -- hParse/s: parse count (hard) + -- PhyRD/s: physical read total IO requests + -- PhyWR/s: physical write total IO requests + -- Write MB/s: physical write total bytes / 1048576 + -- History: + -- Commits/s: user commits + -- ccHits/s: session cursor cache hits + -- Redo MB/s: redo size + + -- Calculate number of seconds... + -- ------------------------------ + v_secs := v_metrics(2)/100; + + -- Calculate ASH history... + -- ------------------------ + v_hivl := ash_history(); + v_hstr := to_char(extract(hour from v_hivl)) || 'h ' || + to_char(extract(minute from v_hivl)) || 'm ' || + to_char(trunc(extract(second from v_hivl))) || 's'; + + -- Set the instance summary output... + -- ---------------------------------- + v_rows.extend(5); + v_rows(1) := moats_output_ot(rpad('+ INSTANCE SUMMARY ',109,'-') || '+'); + v_rows(2) := moats_output_ot( + rpad('| Instance: ' || sys_context('userenv','instance_name'), 28) || + ' | Execs/s: ' || lpad(to_char(v_metrics(1)/v_secs, 'fm99990.0'), 7) || + ' | sParse/s: ' || lpad(to_char((v_metrics(4)-v_metrics(3))/v_secs, 'fm99990.0'), 7) || + ' | LIOs/s: ' || lpad(to_char(v_metrics(12)/v_secs, 'fm9999990.0'), 9) || + ' | Read MB/s: ' || lpad(to_char(v_metrics(6)/v_secs/gc_mb, 'fm99990.0'), 7) || + ' |'); + v_rows(3) := moats_output_ot( + rpad('| Cur Time: ' || to_char(sysdate, 'DD-Mon hh24:mi:ss'), 28) || + ' | Calls/s: ' || lpad(to_char(v_metrics(13)/v_secs, 'fm99990.0'), 7) || + ' | hParse/s: ' || lpad(to_char(v_metrics(3)/v_secs, 'fm99990.0'), 7) || + ' | PhyRD/s: ' || lpad(to_char(v_metrics(5)/v_secs, 'fm999990.0'), 8) || + ' | Write MB/s: ' || lpad(to_char(v_metrics(8)/v_secs/gc_mb, 'fm9990.0'), 6) || + ' |'); + v_rows(4) := moats_output_ot( + rpad('| History: ' || v_hstr, 28) || + ' | Commit/s: ' || lpad(to_char(v_metrics(14)/v_secs, 'fm99990'), 6) || + ' | ccHits/s: ' || lpad(to_char(v_metrics(11)/v_secs, 'fm99990.0'), 7) || + ' | PhyWR/s: ' || lpad(to_char(v_metrics(7)/v_secs, 'fm999990.0'), 8) || + ' | Redo MB/s: ' || lpad(to_char(v_metrics(9)/v_secs/gc_mb, 'fm99990.0'), 7) || + ' |'); + v_rows(5) := moats_output_ot(rpad('+-',109,'-') || '+'); + + return v_rows; + + end instance_summary; + + ---------------------------------------------------------------------------- + function top_summary ( p_lower_snap in pls_integer, + p_upper_snap in pls_integer ) return moats_output_ntt is + + type top_sql_rt is record + ( sql_id varchar2(64) + , sql_child_number number + , occurrences number + , top_sids moats_v2_ntt ); + + type top_waits_rt is record + ( wait_name varchar2(64) + , wait_class varchar2(64) + , occurrences number ); + + type top_sql_aat is table of top_sql_rt + index by pls_integer; + + type top_waits_aat is table of top_waits_rt + index by pls_integer; + + v_row varchar2(4000); + v_rows moats_output_ntt := moats_output_ntt(); + v_top_sqls top_sql_aat; + v_top_waits top_waits_aat; + v_samples pls_integer; + + begin + + -- Calculate number of ASH samples for this output... + -- -------------------------------------------------- + v_samples := ash_sample_count( p_lower_snap => p_lower_snap, + p_upper_snap => p_upper_snap ); + + -- Begin TOP summary... + -- -------------------- + v_rows.extend; + v_rows(1) := moats_output_ot( + rpad('+ TOP SQL_ID (child#) ',27,'-') || + rpad('+ TOP SESSIONS ',24,'-') || + rpad('+',7) || + rpad('+ TOP WAITS ',37,'-') || '+ WAIT CLASS -+' + ); + + -- Top SQL_IDs... + -- -------------- + with ash_data as ( + select sid, sql_id, sql_child_number + from table( + moats.get_ash( + p_lower_snap, p_upper_snap, moats.gc_all_rows)) + ) + select o_ash.sql_id + , o_ash.sql_child_number + , o_ash.occurrences + , cast( + multiset( + select i_ash.sid + from ash_data i_ash + where i_ash.sql_id = o_ash.sql_id + and i_ash.sql_child_number = o_ash.sql_child_number + group by + i_ash.sid + order by + count(*) desc + ) as moats_v2_ntt) as top_sids + bulk collect into v_top_sqls + from ( + select sql_id + , sql_child_number + , count(*) as occurrences + from ash_data + group by + sql_id + , sql_child_number + order by + count(*) desc + ) o_ash + where rownum <= 5; + + -- Top waits... + -- ------------ + select substr(event,1,48) + , wait_class + , occurrences + bulk collect into v_top_waits + from ( + select event + , wait_class + , count(*) as occurrences + from table( + moats.get_ash( + p_lower_snap, p_upper_snap, moats.gc_all_rows)) + group by + event + , wait_class + order by + count(*) desc + ) + where rownum <= 5; + + -- Summary output... + -- ----------------- + for i in 1 .. greatest(v_top_sqls.count, v_top_waits.count) loop + v_rows.extend; + v_row := case + when v_top_sqls.exists(i) + then '|' || lpad(to_char((v_top_sqls(i).occurrences/v_samples)*100, 'fm9999'),4) || '% ' || + rpad('| ' || v_top_sqls(i).sql_id || ' (' || v_top_sqls(i).sql_child_number || ')', 20) || + rpad('| ' || to_string(v_top_sqls(i).top_sids, p_elements => 5), 23) || + rpad(' |', 8) + else rpad('|', 7) || + rpad('| ', 20) || + rpad('| ', 23) || + rpad(' |', 8) + end; + v_row := v_row || + case + when v_top_waits.exists(i) + then '|' || lpad(to_char((v_top_waits(i).occurrences/v_samples)*100, 'fm9999'),4) || '% ' || + rpad('| ' || substr(v_top_waits(i).wait_name,1,35), 29) || + rpad(' | ' || v_top_waits(i).wait_class, 15) || '|' + else rpad('|', 7) || + rpad('| ', 29) || + rpad(' | ', 15) || + '|' + end; + + v_rows(v_rows.last) := moats_output_ot(v_row); + end loop; + + v_rows.extend(2); + v_rows(v_rows.last-1) := moats_output_ot( + rpad('+',51,'-') || rpad('+',7) || rpad('+',51,'-') || '+' + ); + v_rows(v_rows.last) := gc_space; + + -- Top SQL output - we're going to deliberately loop r-b-r for the sql_ids... + -- -------------------------------------------------------------------------- + v_rows.extend; + v_rows(v_rows.last) := moats_output_ot( + rpad('+ TOP SQL_ID ----+ PLAN_HASH_VALUE + SQL TEXT ', 109, '-') || '+' + ); + for i in 1 .. v_top_sqls.count loop + for r_sql in (select sql_id, child_number, sql_text, plan_hash_value + from v$sql + where sql_id = v_top_sqls(i).sql_id + and child_number = v_top_sqls(i).sql_child_number) + loop + v_rows.extend; + v_rows(v_rows.last) := moats_output_ot( + rpad('| ' || r_sql.sql_id, 17) || + rpad('| ' || r_sql.plan_hash_value, 18) || + rpad('| ' || substr(r_sql.sql_text, 1, 71), 73) || ' |' + ); + if length(r_sql.sql_text) > 74 then + v_rows.extend; + v_rows(v_rows.last) := moats_output_ot( + rpad('| ', 17) || + rpad('| ', 18) || + rpad('| ' || substr(r_sql.sql_text, 72, 71), 73) || ' |' + ); + end if; + v_rows.extend; + v_rows(v_rows.last) := moats_output_ot( + rpad('+ ', 17, '-') || + rpad('-', 18, '-') || + rpad('-', 73, '-') || ' +' + ); + end loop; + end loop; + + return v_rows; + + end top_summary; + + ---------------------------------------------------------------------------- + procedure poll( p_refresh_rate in integer, + p_include_ash in boolean, + p_include_stat in boolean, + p_lower_snap out pls_integer, + p_upper_snap out pls_integer ) is + + v_index pls_integer; + v_refresh_rate integer := nvl(p_refresh_rate, g_params(moats.gc_top_refresh_rate)); + + function snap_index return pls_integer is + begin + return dbms_utility.get_time(); + end snap_index; + + begin + + -- Set starting snap index... + -- -------------------------- + v_index := snap_index(); + p_lower_snap := v_index; + + -- Snap SYSSTAT if required... + -- --------------------------- + if p_include_stat then + snap_stats(v_index, true); + end if; + + -- Snap ASH if required... + -- ----------------------- + if p_include_ash then + for i in 1 .. ceil(v_refresh_rate/g_params(moats.gc_ash_polling_rate)) loop + if i > 1 then + v_index := snap_index; + end if; + snap_ash(v_index); + dbms_lock.sleep(g_params(moats.gc_ash_polling_rate)); + end loop; + end if; + + -- If no ASH samples taken, sleep for refresh rate instead... + -- ---------------------------------------------------------- + if p_include_stat and not p_include_ash then + dbms_lock.sleep(v_refresh_rate); + v_index := snap_index; + end if; + + -- Snap SYSSTAT again if required... + -- --------------------------------- + if p_include_stat then + snap_stats(v_index); + end if; + + -- Set end snap index... + -- --------------------- + p_upper_snap := v_index; + + end poll; + + ---------------------------------------------------------------------------- + -- Determine ASH trailing window size + ---------------------------------------------------------------------------- + function get_ash_window_lower_snap ( + p_lower_snap in pls_integer, + p_upper_snap in pls_integer, + p_refresh_rate in pls_integer, + p_ash_window_size in pls_integer + ) return pls_integer is + + v_snap_count pls_integer; + v_snap pls_integer; + v_ash_window_size pls_integer; + begin + v_ash_window_size := nvl(p_ash_window_size, get_parameter(moats.gc_ash_window_size)); + -- By default no ASH trailing window or if refresh rate greater than window size + -- ----------------------------------------------------------------------------- + if v_ash_window_size is null or p_refresh_rate >= v_ash_window_size then + v_snap := p_lower_snap; + else + v_snap_count := 1; + v_snap := p_upper_snap; + while v_snap_count < v_ash_window_size and g_ash.prior(v_snap) is not null loop + v_snap_count := v_snap_count + 1; + v_snap := g_ash.prior(v_snap); + end loop; + end if; + + return v_snap; + end get_ash_window_lower_snap; + + ---------------------------------------------------------------------------- + function top ( + p_refresh_rate in integer default null, + p_ash_window_size in integer default null + ) return moats_output_ntt pipelined is + + v_lower_snap pls_integer; + v_upper_snap pls_integer; + v_row varchar2(4000); + v_rows moats_output_ntt := moats_output_ntt(); + v_cnt pls_integer := 0; + + begin + + -- Initial clear screen and stabiliser... + -- -------------------------------------- + v_rows := banner(); + -- fill the initial "blank screen" (this is needed for arraysize = 72 to work) + for i in 1 .. gc_screen_size loop + pipe row (gc_space); + end loop; + -- print banner onto the top of the screen + for i in 1 .. v_rows.count loop + pipe row (v_rows(i)); + end loop; + -- fill the rest of the visible screen + for i in 1 .. gc_screen_size-(v_rows.count+1) loop + pipe row (gc_space); + end loop; + pipe row (moats_output_ot('Please wait : fetching data for first refresh...')); + + -- Begin TOP refreshes... + -- ---------------------- + loop + + -- Clear screen... + -- --------------- + for i in 1 .. gc_screen_size loop + pipe row (gc_space); + end loop; + + -- Take some ASH/STAT samples... + -- ----------------------------- + poll( p_refresh_rate => p_refresh_rate, + p_include_ash => true, + p_include_stat => true, + p_lower_snap => v_lower_snap, + p_upper_snap => v_upper_snap ); + + -- pipe row (moats_output_ot('Lower snap: ' || v_lower_snap || ' Upper snap: ' || v_upper_snap)); + + -- Banner... + -- --------- + v_rows := banner(); + for i in 1 .. v_rows.count loop + pipe row (v_rows(i)); + end loop; + pipe row (gc_space); + v_cnt := v_rows.count + 1; + + -- Instance summary... + -- ------------------- + v_rows := instance_summary( p_lower_snap => v_lower_snap, + p_upper_snap => v_upper_snap ); + for i in 1 .. v_rows.count loop + pipe row (v_rows(i)); + end loop; + pipe row (gc_space); + v_cnt := v_cnt + v_rows.count + 1; + + v_lower_snap := get_ash_window_lower_snap( p_lower_snap => v_lower_snap, + p_upper_snap => v_upper_snap, + p_refresh_rate => p_refresh_rate, + p_ash_window_size => p_ash_window_size ); + + -- pipe row (moats_output_ot('Lower snap: ' || v_lower_snap || ' Upper snap: ' || v_upper_snap)); + + -- Top SQL and waits section... + -- ---------------------------- + v_rows := top_summary( p_lower_snap => v_lower_snap, + p_upper_snap => v_upper_snap ); + for i in 1 .. v_rows.count loop + pipe row (v_rows(i)); + end loop; + pipe row (gc_space); + v_cnt := v_cnt + v_rows.count + 1; + + -- Some blank output... + -- -------------------- + if v_cnt < (gc_screen_size) then + for i in 1 .. (gc_screen_size)-v_cnt loop + pipe row (gc_space); + end loop; + end if; + + end loop; + return; + + exception + when NO_DATA_FOUND then + raise_application_error(-20000, 'Error: '||sqlerrm||' at:'||chr(10)||dbms_utility.format_error_backtrace); + end top; + + ---------------------------------------------------------------------------- + function ash ( + p_refresh_rate in integer default null, + p_select in varchar2 default null, + p_where in varchar2 default null, + p_group_by in varchar2 default null, + p_order_by in varchar2 default null + ) return moats_output_ntt pipelined is + + v_lower_snap pls_integer; + v_upper_snap pls_integer; + v_row varchar2(4000); + v_cnt pls_integer := 0; + + -- DBMS_SQL variables... + -- --------------------- + v_sql varchar2(32767); + v_cursor binary_integer; + v_execute integer; + v_desc dbms_sql.desc_tab2; + v_cols integer; + v_value varchar2(4000); + + begin + + -- Build up the dynamic SQL... + -- --------------------------- + v_sql := get_sql( p_select => p_select, + p_from => 'TABLE(moats.get_ash(:b1, :b2))', + p_where => p_where, + p_group_by => p_group_by, + p_order_by => p_order_by ); + + -- Open a cursor for the ASH queries, parse and describe it... + -- ----------------------------------------------------------- + v_cursor := dbms_sql.open_cursor; + dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); + dbms_sql.describe_columns2(v_cursor, v_cols, v_desc); + + -- Take some ASH samples... + -- ------------------------ + poll( p_refresh_rate => p_refresh_rate, + p_include_ash => true, + p_include_stat => false, + p_lower_snap => v_lower_snap, + p_upper_snap => v_upper_snap ); + + -- Bind the ASH snapshots... + -- ------------------------- + dbms_sql.bind_variable(v_cursor, 'b1', v_lower_snap); + dbms_sql.bind_variable(v_cursor, 'b2', v_upper_snap); + + -- Define the columns and variable we are fetching into... + -- ------------------------------------------------------- + for i in 1 .. v_cols loop + dbms_sql.define_column(v_cursor, i, v_value, 4000); + end loop; + + -- Output the heading... + -- --------------------- + for i in 1 .. v_cols loop + v_row := v_row || '|' || v_desc(i).col_name; + end loop; + pipe row (moats_output_ot(v_row)); + v_row := null; + + -- Start fetching... + -- ----------------- + v_execute := dbms_sql.execute(v_cursor); + + while dbms_sql.fetch_rows(v_cursor) > 0 loop + for i in 1 .. v_cols loop + dbms_sql.column_value(v_cursor, i, v_value); + v_row := v_row || '|' || v_value; + end loop; + pipe row (moats_output_ot(v_row)); + v_row := null; + end loop; + dbms_sql.close_cursor(v_cursor); --<-- will never be reached on an infinite loop with ctrl-c + + return; + + exception + when others then + dbms_sql.close_cursor(v_cursor); + raise_application_error (-20000, 'Error: ' || sqlerrm || ' at:' || chr(10) || dbms_utility.format_error_backtrace, true); + end ash; + + ---------------------------------------------------------------------------- + function get_ash ( + p_lower_snap in pls_integer default null, + p_upper_snap in pls_integer default null, + p_return_set in pls_integer default moats.gc_all_rows + ) return moats_ash_ntt pipelined is + v_lower_snap pls_integer := nvl(p_lower_snap, g_ash.first); + v_upper_snap pls_integer := nvl(p_upper_snap, g_ash.last); + v_snap pls_integer; + v_exit boolean := false; + begin + v_snap := v_lower_snap; + while v_snap is not null and not v_exit loop + for i in 1 .. g_ash(v_snap).count loop + -- Ignore dummy records + if g_ash(v_snap)(i).sid is not null then + pipe row (g_ash(v_snap)(i)); + end if; + end loop; + v_exit := (v_snap = v_upper_snap); + v_snap := case p_return_set + when moats.gc_all_rows + then g_ash.next(v_snap) + else v_upper_snap + end; + end loop; + return; + end get_ash; + +begin + restore_default_parameters(); +end moats; +/ + + diff --git a/tpt/tools/moats_v1.05/moats.pks b/tpt/tools/moats_v1.05/moats.pks new file mode 100644 index 0000000..3fbbfee --- /dev/null +++ b/tpt/tools/moats_v1.05/moats.pks @@ -0,0 +1,80 @@ +create or replace package moats as + + -- -------------------------------------------------------------------------- + -- MOATS v1.0 (c) Tanel Poder & Adrian Billington, 2010 + -- + -- See supplied README.txt for usage and disclaimers. + -- + -- http://www.e2sn.com + -- http://www.oracle-developer.net + -- -------------------------------------------------------------------------- + + -- Pipelined function to show TOP instance summary activity. The refresh rate + -- defines how many ASH/SYSSTAT samples to take and is roughly equivalent to + -- the number of seconds between screen refreshes... + -- -------------------------------------------------------------------------- + function top ( + p_refresh_rate in integer default null, + p_ash_window_size in integer default null + ) return moats_output_ntt pipelined; + + -- Helper procedure to size window to TOP output... + -- -------------------------------------------------------------------------- + procedure format_window; + + -- Internal Use Only + -- ----------------- + -- All functions and procedures from this point onwards are for internal use + -- only in v1.01. Some of these will be exposed in future versions of MOATS. + + -- Pipelined function to return dynamic samples, queries, aggregations etc + -- of active session data. The refresh rate defines (in seconds) how many + -- ASH samples to take before running the query components... + -- -------------------------------------------------------------------------- + function ash ( + p_refresh_rate in integer default null, + p_select in varchar2 default null, + p_where in varchar2 default null, + p_group_by in varchar2 default null, + p_order_by in varchar2 default null + ) return moats_output_ntt pipelined; + + -- Until 11g you can't bind UDTs into DBMS_SQL cursors, so this is an + -- internal workaround. Can also be used to query all of the collected ASH + -- samples. Note that gc_all_rows returns all ASH records between the two + -- snapshots and gc_deltas returns only the lower and upper snapshots... + -- -------------------------------------------------------------------------- + gc_all_rows constant pls_integer := 0; + gc_deltas constant pls_integer := 1; + + function get_ash ( + p_lower_snap in pls_integer default null, + p_upper_snap in pls_integer default null, + p_return_set in pls_integer default moats.gc_all_rows + ) return moats_ash_ntt pipelined; + + -- Constants, get/set for moats parameters such as polling rate, ASH size... + -- -------------------------------------------------------------------------- + gc_ash_polling_rate constant pls_integer := 0; + gc_ash_threshold constant pls_integer := 1; + gc_top_refresh_rate constant pls_integer := 2; + gc_ash_window_size constant pls_integer := 3; + + procedure set_parameter( + p_parameter_code in pls_integer, + p_parameter_value in integer + ); + + function get_parameter( + p_parameter_code in pls_integer + ) return integer; + + procedure restore_default_parameters; + + -- Debugging... + -- -------------------------------------------------------------------------- + procedure show_snaps; + +end moats; +/ + diff --git a/tpt/tools/moats_v1.05/moats_install.sql b/tpt/tools/moats_v1.05/moats_install.sql new file mode 100644 index 0000000..46959a8 --- /dev/null +++ b/tpt/tools/moats_v1.05/moats_install.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +set define off +set pause on + +prompt +prompt +prompt ************************************************************************** +prompt ************************************************************************** +prompt +prompt MOATS Installer (for 10.2+ databases) +prompt ===================================== +prompt +prompt This will install MOATS v1.0 into the current schema. +prompt +prompt Ensure that the target schema has the necessary privileges described +prompt in the README.txt file. +prompt +prompt To continue press Enter. To quit press Ctrl-C. +prompt +prompt (c) oracle-developer.net & www.e2sn.com +prompt +prompt ************************************************************************** +prompt ************************************************************************** +prompt +prompt + +pause + +prompt Creating types... +@@moats_types.sql + +prompt Creating package... +@@moats.pks +@@moats.pkb + +prompt Creating view... +@@moats_views.sql + +set define on +set pause off + diff --git a/tpt/tools/moats_v1.05/moats_privs_grant.sql b/tpt/tools/moats_v1.05/moats_privs_grant.sql new file mode 100644 index 0000000..488396b --- /dev/null +++ b/tpt/tools/moats_v1.05/moats_privs_grant.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +set pause on + +define moats_priv_target = &moats_priv_target; + +prompt +prompt +prompt ************************************************************************** +prompt ************************************************************************** +prompt +prompt MOATS Installer: Privileges +prompt =========================== +prompt +prompt This will grant required privileges to &moats_priv_target.. +prompt +prompt To continue press Enter. To quit press Ctrl-C. +prompt +prompt (c) oracle-developer.net, www.e2sn.com +prompt +prompt ************************************************************************** +prompt ************************************************************************** +prompt +prompt + +pause + +grant create view to &moats_priv_target; +grant create type to &moats_priv_target; +grant create table to &moats_priv_target; +grant create procedure to &moats_priv_target; +grant execute on dbms_lock to &moats_priv_target; +grant select on v_$session to &moats_priv_target; +grant select on v_$statname to &moats_priv_target; +grant select on v_$sysstat to &moats_priv_target; +grant select on v_$latch to &moats_priv_target; +grant select on v_$timer to &moats_priv_target; +grant select on v_$sql to &moats_priv_target; + +undefine moats_priv_target; + +set pause off diff --git a/tpt/tools/moats_v1.05/moats_privs_revoke.sql b/tpt/tools/moats_v1.05/moats_privs_revoke.sql new file mode 100644 index 0000000..ee86260 --- /dev/null +++ b/tpt/tools/moats_v1.05/moats_privs_revoke.sql @@ -0,0 +1,45 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +set define on +set pause on + +define moats_priv_target = &moats_priv_target; + +prompt +prompt +prompt ************************************************************************** +prompt ************************************************************************** +prompt +prompt MOATS Uninstaller: Revoke Privileges +prompt ==================================== +prompt +prompt This will revoke MOATS privileges from &moats_priv_target.. +prompt +prompt To continue press Enter. To quit press Ctrl-C. +prompt +prompt (c) oracle-developer.net, www.e2sn.com +prompt +prompt ************************************************************************** +prompt ************************************************************************** +prompt +prompt + +pause + +revoke create view from &moats_priv_target; +revoke create type from &moats_priv_target; +revoke create table from &moats_priv_target; +revoke create procedure from &moats_priv_target; +revoke execute on dbms_lock from &moats_priv_target; +revoke select on v_$session from &moats_priv_target; +revoke select on v_$statname from &moats_priv_target; +revoke select on v_$sysstat from &moats_priv_target; +revoke select on v_$latch from &moats_priv_target; +revoke select on v_$timer from &moats_priv_target; +revoke select on v_$sql from &moats_priv_target; + +undefine moats_priv_target; + +set pause off diff --git a/tpt/tools/moats_v1.05/moats_remove.sql b/tpt/tools/moats_v1.05/moats_remove.sql new file mode 100644 index 0000000..7f6b644 --- /dev/null +++ b/tpt/tools/moats_v1.05/moats_remove.sql @@ -0,0 +1,46 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +set define off +set pause on + +prompt +prompt +prompt ************************************************************************** +prompt ************************************************************************** +prompt +prompt MOATS Uninstaller +prompt ================= +prompt +prompt This will uninstall MOATS. +prompt +prompt To continue press Enter. To quit press Ctrl-C. +prompt +prompt (c) oracle-developer.net & www.e2sn.com +prompt +prompt ************************************************************************** +prompt ************************************************************************** +prompt +prompt + +pause + +prompt Removing MOATS... + +drop view top; +drop package moats; +drop type moats_output_ntt; +drop type moats_output_ot; +drop type moats_v2_ntt; +drop type moats_ash_ntt; +drop type moats_ash_ot; +drop type moats_stat_ntt; +drop type moats_stat_ot; + +prompt +prompt +prompt ************************************************************************** +prompt Uninstall complete. +prompt ************************************************************************** + diff --git a/tpt/tools/moats_v1.05/moats_settings.sql b/tpt/tools/moats_v1.05/moats_settings.sql new file mode 100644 index 0000000..2e21330 --- /dev/null +++ b/tpt/tools/moats_v1.05/moats_settings.sql @@ -0,0 +1,9 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +set arrays 36 +set lines 110 +set head off +set tab off +set serveroutput on format wrapped diff --git a/tpt/tools/moats_v1.05/moats_types.sql b/tpt/tools/moats_v1.05/moats_types.sql new file mode 100644 index 0000000..7be781c --- /dev/null +++ b/tpt/tools/moats_v1.05/moats_types.sql @@ -0,0 +1,110 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +create type moats_v2_ntt as table of varchar2(4000); +/ + +create type moats_output_ot as object +( output varchar2(4000) +); +/ + +create type moats_output_ntt as table of moats_output_ot; +/ + +create type moats_ash_ot as object +( snaptime timestamp +, saddr raw(8) +, sid number +, serial# number +, audsid number +, paddr raw(8) +, user# number +, username varchar2(64) +, command number +, ownerid number +, taddr varchar2(64) +, lockwait varchar2(64) +, status varchar2(64) +, server varchar2(64) +, schema# number +, schemaname varchar2(64) +, osuser varchar2(64) +, process varchar2(64) +, machine varchar2(64) +, terminal varchar2(64) +, program varchar2(64) +, type varchar2(64) +, sql_address raw(8) +, sql_hash_value number +, sql_id varchar2(64) +, sql_child_number number +, prev_sql_addr raw(8) +, prev_hash_value number +, prev_sql_id varchar2(64) +, prev_child_number number +, module varchar2(64) +, module_hash number +, action varchar2(64) +, action_hash number +, client_info varchar2(64) +, fixed_table_sequence number +, row_wait_obj# number +, row_wait_file# number +, row_wait_block# number +, row_wait_row# number +, logon_time date +, last_call_et number +, pdml_enabled varchar2(64) +, failover_type varchar2(64) +, failover_method varchar2(64) +, failed_over varchar2(64) +, resource_consumer_group varchar2(64) +, pdml_status varchar2(64) +, pddl_status varchar2(64) +, pq_status varchar2(64) +, current_queue_duration number +, client_identifier varchar2(64) +, blocking_session_status varchar2(64) +, blocking_instance number +, blocking_session number +, seq# number +, event# number +, event varchar2(64) +, p1text varchar2(64) +, p1 number +, p1raw raw(8) +, p2text varchar2(64) +, p2 number +, p2raw raw(8) +, p3text varchar2(64) +, p3 number +, p3raw raw(8) +, wait_class_id number +, wait_class# number +, wait_class varchar2(64) +, wait_time number +, seconds_in_wait number +, state varchar2(64) +, service_name varchar2(64) +, sql_trace varchar2(64) +, sql_trace_waits varchar2(64) +, sql_trace_binds varchar2(64) +); +/ + +create type moats_ash_ntt as table of moats_ash_ot; +/ + +create type moats_stat_ot as object +( type varchar2(100) +, name varchar2(100) +, value number +); +/ + +create type moats_stat_ntt as table of moats_stat_ot; +/ + + diff --git a/tpt/tools/moats_v1.05/moats_views.sql b/tpt/tools/moats_v1.05/moats_views.sql new file mode 100644 index 0000000..c20b75c --- /dev/null +++ b/tpt/tools/moats_v1.05/moats_views.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +create or replace view top +as + select * + from table(moats.top); diff --git a/tpt/tools/moats_v1.05/top.sql b/tpt/tools/moats_v1.05/top.sql new file mode 100644 index 0000000..cc9f7ee --- /dev/null +++ b/tpt/tools/moats_v1.05/top.sql @@ -0,0 +1,19 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +-- Following settings should be mandatory and documented... +-- -------------------------------------------------------- +set arrays 72 +set lines 110 +set head off +set tab off +set pages 0 + +-- Windows sqlplus properties for optimal output (relative to font): +-- * font: lucide console 12 +-- * window size: height of 47 + +select * from table(moats.top(5)); + + diff --git a/tpt/tools/optimizer/descxx_install.sql b/tpt/tools/optimizer/descxx_install.sql new file mode 100644 index 0000000..c4b8965 --- /dev/null +++ b/tpt/tools/optimizer/descxx_install.sql @@ -0,0 +1,45 @@ +-- descxx.sql requires the display_raw function which is included in the comment section below. +-- the display_raw function is taken from Greg Rahn's blog as I'm too lazy to write one myself +-- http://structureddata.org/2007/10/16/how-to-display-high_valuelow_value-columns-from-user_tab_col_statistics/ +-- + +PROMPT Install DISPLAY_RAW helper function into the current schema? +PAUSE Press ENTER to install, CTRL+C to cancel... + +create or replace function display_raw (rawval raw, type varchar2) +return varchar2 +is + cn number; + cv varchar2(128); + cd date; + cnv nvarchar2(128); + cr rowid; + cc char(128); +begin + if (type = 'NUMBER') then + dbms_stats.convert_raw_value(rawval, cn); + return to_char(cn); + elsif (type = 'VARCHAR2') then + dbms_stats.convert_raw_value(rawval, cv); + return to_char(cv); + elsif (type = 'DATE') then + dbms_stats.convert_raw_value(rawval, cd); + return to_char(cd); + elsif (type = 'NVARCHAR2') then + dbms_stats.convert_raw_value(rawval, cnv); + return to_char(cnv); + elsif (type = 'ROWID') then + dbms_stats.convert_raw_value(rawval, cr); + return to_char(cnv); + elsif (type = 'CHAR') then + dbms_stats.convert_raw_value(rawval, cc); + return to_char(cc); + else + return 'UNKNOWN DATATYPE'; + end if; +end; +/ + +grant execute on display_raw to public; +create public synonym display_raw for display_raw; + diff --git a/tpt/tools/optimizer/optimizer_features_matrix.sql b/tpt/tools/optimizer/optimizer_features_matrix.sql new file mode 100644 index 0000000..2e57ffc --- /dev/null +++ b/tpt/tools/optimizer/optimizer_features_matrix.sql @@ -0,0 +1,37 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT display a matrix of optimizer parameters which change when changing optimizer_features_enabled... + +CREATE TABLE opt_param_matrix( + opt_features_enabled VARCHAR2(20) NOT NULL + , parameter VARCHAR2(75) NOT NULL + , value VARCHAR2(1000) +) +/ + +CREATE TABLE opt_fix_matrix ( + opt_features_enabled VARCHAR2(20) NOT NULL + , bugno NUMBER + , value NUMBER + , sql_feature VARCHAR2(100) + , description VARCHAR2(100) + , optimizer_feature_enable VARCHAR2(25) + , event NUMBER + , is_default NUMBER +) +/ + +BEGIN + FOR i IN (select value from v$parameter_valid_values where name = 'optimizer_features_enable' order by ordinal) LOOP + EXECUTE IMMEDIATE 'alter session set optimizer_features_enable='''||i.value||''''; + EXECUTE IMMEDIATE 'insert into opt_param_matrix select :opt_features_enable, n.ksppinm, c.ksppstvl from sys.x$ksppi n, sys.x$ksppcv c where n.indx=c.indx' using i.value; + EXECUTE IMMEDIATE 'insert into opt_fix_matrix select :opt_features_enable, bugno, value, sql_feature, description, optimizer_feature_enable, event, is_default FROM v$session_fix_control WHERE session_id=USERENV(''sid'')' using i.value; + END LOOP; +END; +/ + +COMMIT; + +PROMPT To test, run: @cofep.sql 10.2.0.1 10.2.0.4 + diff --git a/tpt/tools/optimizer/sqlflame_stacks.txt b/tpt/tools/optimizer/sqlflame_stacks.txt new file mode 100644 index 0000000..fe63dd3 --- /dev/null +++ b/tpt/tools/optimizer/sqlflame_stacks.txt @@ -0,0 +1,25 @@ +0 - SELECT STATEMENT;1 - SORT ORDER BY 1 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY 45 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER 20 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS 19 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS 66 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN 635 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;7 - TABLE ACCESS FULL [TPCDS.DATE_DIM] 3 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN 935 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;9 - TABLE ACCESS FULL [TPCDS.HOUSEHOLD_DEMOGRAPHICS] 4 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN 146490 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;11 - HASH JOIN 11104 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;11 - HASH JOIN;12 - TABLE ACCESS FULL [TPCDS.WAREHOUSE] 5 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;11 - HASH JOIN;13 - HASH JOIN 20788 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;11 - HASH JOIN;13 - HASH JOIN;14 - HASH JOIN 3 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;11 - HASH JOIN;13 - HASH JOIN;14 - HASH JOIN;15 - TABLE ACCESS FULL [TPCDS.DATE_DIM] 3 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;11 - HASH JOIN;13 - HASH JOIN;14 - HASH JOIN;16 - TABLE ACCESS FULL [TPCDS.DATE_DIM] 3 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;11 - HASH JOIN;13 - HASH JOIN;17 - PARTITION RANGE ALL 113 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;11 - HASH JOIN;13 - HASH JOIN;17 - PARTITION RANGE ALL;18 - TABLE ACCESS FULL [TPCDS.INVENTORY] 5683 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;19 - PARTITION RANGE ALL 4635 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;6 - HASH JOIN;8 - HASH JOIN;10 - HASH JOIN;19 - PARTITION RANGE ALL;20 - TABLE ACCESS FULL [TPCDS.CATALOG_SALES] 13397 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;21 - TABLE ACCESS BY INDEX ROWID [TPCDS.CUSTOMER_DEMOGRAPHICS] 2552 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;5 - NESTED LOOPS;21 - TABLE ACCESS BY INDEX ROWID [TPCDS.CUSTOMER_DEMOGRAPHICS];22 - INDEX UNIQUE SCAN [TPCDS.CD_DEMO_PK_IDX] 475 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;23 - TABLE ACCESS BY INDEX ROWID [TPCDS.ITEM] 50 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;4 - NESTED LOOPS;23 - TABLE ACCESS BY INDEX ROWID [TPCDS.ITEM];24 - INDEX UNIQUE SCAN [TPCDS.ITEM_PK_IDX] 167 +0 - SELECT STATEMENT;1 - SORT ORDER BY;2 - HASH GROUP BY;3 - NESTED LOOPS OUTER;25 - INDEX UNIQUE SCAN [TPCDS.PROMOTION_PK_IDX] 32 diff --git a/tpt/tools/poor_ash/poor_ash.sh b/tpt/tools/poor_ash/poor_ash.sh new file mode 100644 index 0000000..f38f7dc --- /dev/null +++ b/tpt/tools/poor_ash/poor_ash.sh @@ -0,0 +1,106 @@ +#!/bin/bash +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +# note that "*" doesn't go well together with unix shell, so don't use it in your queries +HEADERQUERY="SELECT + TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') sample_time + , sid + , serial# + , username + , CASE WHEN state != 'WAITING' THEN 'ON CPU' ELSE 'WAITING' END AS state + , CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' ELSE event END AS event + , seq# + , seconds_in_wait + , blocking_session_status + , blocking_session + , blocking_instance + , program + , command + , osuser + , process + , machine + , terminal + , module + , action + , client_identifier + , client_info + , type + , sql_id + , sql_child_number + , TO_CHAR(sql_exec_start, 'YYYY-MM-DD HH24:MI:SS') sql_exec_start + , sql_exec_id + , p1text + , p1raw + , p2text + , p2raw + , p3text + , p3raw +FROM + v\$session s +WHERE + sid = SYS_CONTEXT('USERENV', 'SID') +" + +ASHQUERY="SELECT + TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') sample_time + , sid + , serial# + , username + , CASE WHEN state != 'WAITING' THEN 'ON CPU' ELSE 'WAITING' END AS state + , CASE WHEN state != 'WAITING' THEN 'On CPU / runqueue' ELSE event END AS event + , seq# + , seconds_in_wait + , blocking_session_status + , blocking_session + , blocking_instance + , program + , command + , osuser + , process + , machine + , terminal + , module + , action + , client_identifier + , client_info + , type + , sql_id + , sql_child_number + , TO_CHAR(sql_exec_start, 'YYYY-MM-DD HH24:MI:SS') sql_exec_start + , sql_exec_id + , p1text + , p1raw + , p2text + , p2raw + , p3text + , p3raw +FROM + v\$session s +WHERE + (s.status = 'ACTIVE' and s.state != 'WAITING' and s.sid != SYS_CONTEXT('USERENV','SID')) +OR + ( s.status = 'ACTIVE' + AND s.state = 'WAITING' + AND s.wait_class != 'Idle' + AND s.sid != SYS_CONTEXT('USERENV','SID') + ) +" + +echo SET PAGESIZE 50000 LINESIZE 5000 TRIMSPOOL ON TRIMOUT ON TAB OFF FEEDBACK OFF VERIFY OFF COLSEP \",\" SQLPROMPT \"\" SQLNUMBER OFF HEADING ON +echo "PROMPT Running... (ignore the first row, it's for printing the column headers...)" +echo "$HEADERQUERY" +echo "/" + +echo SET HEADING OFF +echo "$ASHQUERY" + +# LOOP FOREVER +while true +do + +sleep 1 +echo "/" + +done + diff --git a/tpt/tools/poor_ash/run_poor_ash.sh b/tpt/tools/poor_ash/run_poor_ash.sh new file mode 100644 index 0000000..af9db7d --- /dev/null +++ b/tpt/tools/poor_ash/run_poor_ash.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +./poor_ash.sh | sqlplus "/ as sysasm" > log_poor_ash.txt + diff --git a/tpt/tools/session_wait_monitor.sql b/tpt/tools/session_wait_monitor.sql new file mode 100644 index 0000000..153b58c --- /dev/null +++ b/tpt/tools/session_wait_monitor.sql @@ -0,0 +1,93 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- +-- SCRIPT: session_wait_monitor.sql +-- +-- PURPOSE: Creates one table and one procedure for logging v$session_wait +-- wait statistics. Running this script does not enable the logging, +-- the usage examples are below. +-- +-- REQUIREMENTS: +-- Read access on V$SESSION_WAIT +-- Execute right on DBMS_LOCK +-- +-- USAGE: +-- EXEC session_wait_monitor ( , , , ) +-- +-- wait_name = the name of wait event to be sampled, % and _ wildcards allowed, default % +-- from_time = time when sampling should start (the procedure sleeps until then), default SYSDATE +-- to_time = time when sampling should end (procedure quits then), default SYSDATE + 1 minute +-- sleep_time= time to sleep between samples, default 5 seconds +-- +-- once the procedure returns, query session wait samples: +-- +-- SELECT * FROM session_wait_hist ORDER BY sample_time ASC, cnt DESC; +-- +-- EXAMPLES: +-- After the table and procedure have been created, use following commands to: +-- +-- 1) Sample all session waits for 60 seconds from now, at 5 second intervals (few idle waits are not sampled): +-- +-- EXEC session_wait_monitor +-- +-- 2) Sample only buffer busy waits from 9 pm to 9:10 pm on 2007-10-19 (3 second sampling interval) +-- +-- EXEC session_wait_monitor('buffer busy waits', timestamp'2007-10-19 21:00:00', timestamp'2007-10-19 21:10:00', 3) +-- +-- 3) Sample all events containing "db" from now up to end of today: +-- +-- EXEC session_wait_monitor('%db%', sysdate, trunc(sysdate)+1) +-- + +create table session_wait_hist( + sample_time date not null, + event varchar2(100) not null, + p1 number, + p2 number, + p3 number, + cnt number +); + +create or replace procedure session_wait_monitor ( + wait_name in varchar2 default '%', + from_time in date default sysdate, + to_time in date default sysdate + 1/24/60, + sleep_time in number default 5 +) + authid current_user as +begin + + while sysdate < from_time loop + dbms_lock.sleep(sleep_time); + end loop; + + while sysdate between from_time and to_time loop + + insert into + session_wait_hist + select + sysdate, event, p1, p2, p3, count(*) cnt + from + v$session_wait + where + state = 'WAITING' + and event like wait_name + and event not in ( + 'SQL*Net message from client', + 'pmon timer', + 'rdbms ipc message', + 'smon timer', + 'wakeup time manager' + ) + group by + event, p1, p2, p3; + + commit; + + dbms_lock.sleep(sleep_time); + + end loop; + +end; +/ diff --git a/tpt/tools/sesspack_0.05_release.zip b/tpt/tools/sesspack_0.05_release.zip new file mode 100644 index 0000000..56b44e2 Binary files /dev/null and b/tpt/tools/sesspack_0.05_release.zip differ diff --git a/tpt/tools/sesspack_0.05_release/README.txt b/tpt/tools/sesspack_0.05_release/README.txt new file mode 100644 index 0000000..a628657 --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/README.txt @@ -0,0 +1,168 @@ +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + + +================================================================================ +SESSPACK v0.05 readme +================================================================================ + +About: + + Sesspack can be best described as session level statspack for Oracle. + It collects less data than statspack, "only" the session level wait events + and v$sesstat info and stores it in its repository. + + However Sesspack allows you to select the sampled sessions very flexibly, + you can sample all sessions in an instance or only few, based on various + conditions like SID, username, osuser, program, client machine, currently + effective module and action etc. + + Sesspack doesn't add extra instrumentation overhead to the database, it + just queries v$session_event, v$sesstat and few other views when executed. + + Note that with large number of sessions (1000+) you may want to sample + sessions selectively to save disk space and reduce snapshot CPU usage + + For further information, see http://www.tanelpoder.com + + +Installation: + + 1) Using SQLPLUS, log on as user who can *grant* access on V$ views (SYS for example) + + 2) Create a user if want to have sesspack object in separate schema and grant connect to it + + 3) run install_sesspack.sql + + e.g. @install_sesspack sesspack mypassword prod01 + + 4) check sesspack_install.log + +Usage example: + + Note that the reports require fairly wide linesize (120+) + + 1) exec sesspack.snap_orauser('') + 2) do some work + 3) exec sesspack.snap_orauser('') + 4) @list + 5) @sr sid,program 1 2 + + This will take snapshot 1 and 2 of user + + +Reference: + + Taking snapshots: + + sesspack.snap_me - snaps current session stats + sesspack.snap_sid - snaps given SIDs stats + sesspack.snap_orauser('') - snaps all given ORACLE user's sessions's stats + sesspack.snap_osuser('') - snaps all given OS user's sessions's stats + sesspack.snap_program('') - snaps all given programs session stats + sesspack.snap_machine('') - snaps all given machines session stats + sesspack.snap_spid('spid') - snaps all given SPID session stats + sesspack.snap_cpid('cpid') - snaps all given client PID session stats + sesspack.snap_all - snaps all session stats + sesspack.snap_bg - snaps background processes sessions stats + sesspack.snap_fg - snaps foreground processes sessions stats + + sesspack.snap_sidlist_internal('select sid from v$sesstat where ') + - snaps all SIDs returned by custom SQL + + Reporting performance data: + + list.sql shows you snapshots with brief descriptions + + sr.sql + + shows you the session event deltas between selected snapshots, grouped by a column + + Columns can be: + + 1 + SID + AUDSID + SERIAL# + USERNAME + PROGRAM + TERMINAL + MACHINE + OSUSER + PROCESS + + To get a session-level resource usage breakdown, use: + + @sr sid + + To get resource usage summed and rolled up by client program nama, use: + + @sr program + + To get resource usage on sid level but you also want to see other data columns in output, + you can combine the columns: + + @sr program,module + + To sum up all measured resource consumption in the snap, use dummy column 1: + + @sr 1 + + + + Purging old data: + + 1) exec sesspack.purge_data; -- purges all data older than a week + or + exec sesspack.purge_data( 5' + -------------------------------------------------------------------------------------------------------------------- + function in_list( p_sql in varchar2 ) return sawr$SIDlist + as + type rc is ref cursor; + l_cursor rc; + l_tmp number; + l_data sawr$sidlist := sawr$SIDlist(); + + begin + open l_cursor for p_sql; + loop + + fetch l_cursor into l_tmp; + exit when l_cursor%notfound; + l_data.extend; + l_data(l_data.count) := l_tmp; + + end loop; + close l_cursor; + + return l_data; + end in_list; -- ( p_sql in varchar2 ) + + -------------------------------------------------------------------------------------------------------------------- + -- FUNCTION: valid_stat_modes + -- PURPOSE: Function for returning a collection of valid snap modes as determined by + -- the sawr$session_stat_mode table. + -------------------------------------------------------------------------------------------------------------------- + function valid_stat_modes return sawr$ModeList is + l_modes sawr$ModeList; + begin + select distinct upper(mode_id) bulk collect into l_modes + from sawr$session_stat_mode; + return l_modes; + end valid_stat_modes; + + -------------------------------------------------------------------------------------------------------------------- + -- FUNCTION: snap_sidlist_internal (overloaded, p_sidlist as sawr$SIDlist type) + -- + -- PURPOSE: this is the low-level procedure doing the actual sampling from V$ views + -- and inserting the result to SAWR$ tables + -- + -- PARAMETERS: + -- p_sidlist : sawr$SIDlist collection, this is array of SIDs to be sampled from V$SESSION + -- p_snapid : snapshot ID to be inserted into SAWR$ tables. normally this comes from + -- parent functions, but is autogenerated when the low-level function is + -- executed manually and by leaving p_snapid as NULL. + -------------------------------------------------------------------------------------------------------------------- + procedure snap_sidlist_internal( p_sidlist in sawr$SIDlist, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null) + as + l_snapid number; + l_codeloc varchar2(200) := 'SNAP_SIDLIST_INTERNAL(P_SIDLIST): BEGIN'; + begin + + -- this variable is here for easier catching of exception sources in pre-10g dbs + l_codeloc:= 'SNAP_SIDLIST_INTERNAL(P_SIDLIST): CALL ASSIGN_SNAPID'; + + -- allocate a new snapid if a global one hasn't been passed down from caller + -- new snapid allocation inserts a line to SAWR$SNAPSHOTS table + l_snapid := assign_snapid(p_snapid); + + ------------------------------------------------------------------------------------------------------------ + -- insert sessions matching parameter conditions into SAWR$SESSIONS table + ------------------------------------------------------------------------------------------------------------ + l_codeloc := 'SNAP_SIDLIST_INTERNAL(P_SIDLIST): INSERT INTO SAWR$SESSIONS'; + insert into + sawr$sessions ( + snapid + , snaptime + , program + , username + , machine + , osuser + , terminal + , module + , action + , audsid + , sid + , serial# + , process + , logon_time + ) + select + l_snapid + , sysdate as snaptime + , nvl(s.program , '-') + , nvl(s.username , '-') + , nvl(s.machine , '-') + , nvl(s.osuser , '-') + , nvl(s.terminal , '-') + , nvl(module , '-') + , nvl(action , '-') + , s.audsid + , s.sid + , s.serial# + , s.process + , s.logon_time + from + v$session s + where + sid in ( + select * from ( table(cast(p_sidlist as sawr$SIDlist)) ) + ); + + + ------------------------------------------------------------------------------------------------------------ + -- insert matching session wait events into SAWR$SESSION_EVENTS table + ------------------------------------------------------------------------------------------------------------ + l_codeloc := 'SNAP_SIDLIST_INTERNAL(P_SIDLIST): INSERT INTO SAWR$SESSION_EVENTS'; + insert into + sawr$session_events ( + snapid + , snaptime + , audsid + , sid + , serial# + , event# + , total_waits + , total_timeouts + , average_wait + , max_wait + , time_waited_micro + ) + select --+ ORDERED tanel9 + l_snapid, + sysdate as snaptime, + s.audsid, + e.sid, + s.serial#, + en.event#, + e.total_waits, + e.total_timeouts, + e.average_wait, + e.max_wait, +-- e.time_waited_micro + ( decode(e.event||w.state, w.event||'WAITING', w.seconds_in_wait, 0) * 1000000 ) time_waited_micro + e.time_waited_micro + NVL( CASE e.event||w.state + WHEN w.event||'WAITING' THEN + CASE + WHEN w.event IN ( select event from v$system_event where total_timeouts != 0 ) THEN 0 + ELSE w.seconds_in_wait + END + ELSE 0 + END + * 1000000, 0 ) time_waited_micro + + from + v$session s, + v$session_event e, + v$session_wait w, + v$event_name en + where + e.sid = s.sid + and s.sid = w.sid + and w.sid = e.sid + and e.event = en.name + and s.sid in ( + select * from ( table(cast(p_sidlist as sawr$SIDlist)) ) + ); + + + + ------------------------------------------------------------------------------------------------------------ + -- insert used CPU time to session events table as well + -- in 9i V$SESSTAT (CPU used by this session) is used + -- from 10g V$SESS_TIME_MODEL is used as this is more accurate and is updated every 5 seconds + -- even during database CALL + -- + -- note that the installer script automatically comments out the irrelevant part depending on db version + ------------------------------------------------------------------------------------------------------------ + +-- the line below is substituted by "/*" by sqlplus during installation onto 9i database +&version_9_enable + + -- 9i version for getting session CPU usage + insert into + sawr$session_events ( + snapid + , snaptime + , audsid + , sid + , serial# + , event# + , total_waits + , time_waited_micro + ) + select --+ ORDERED USE_NL(s st) + l_snapid, + sysdate as snaptime, + s.audsid, + s.sid, + s.serial#, + -1, -- naming CPU usage as event# -1 + 1, -- setting total waits for CPU to 1 for now (this can be got from perhaps number of calls or sum(events) later on) + st.value * 10000 -- x10000 makes microseconds out of centiseconds + from + v$session s, + v$sesstat st + where + st.statistic# = (select statistic# from v$statname where name = 'CPU used by this session') + and s.sid = st.sid + and s.sid in ( + select * from ( table(cast(p_sidlist as sawr$SIDlist)) ) + ); + +-- end: version_9_enable +-- */ + +-- the line below is substituted by "/*" by sqlplus during installation onto 10g and above database +&version_10_enable + + -- 10g+ version for getting session CPU usage + insert into + sawr$session_events ( + snapid + , snaptime + , audsid + , sid + , serial# + , event# + , total_waits + , time_waited_micro + ) + select --+ ORDERED USE_NL(s st) + l_snapid, + sysdate as snaptime, + s.audsid, + s.sid, + s.serial#, + -1, -- naming CPU usage as event# -1 + 1, -- setting total waits for CPU to 1 for now (this can be got from perhaps number of calls or sum(events) later on) + st.value -- v$sess_time_model reports times in microseconds + from + v$session s, + v$sess_time_model st + where + st.stat_name = 'DB CPU' + and s.sid = st.sid + and s.sid in ( + select * from ( table(cast(p_sidlist as sawr$SIDlist)) ) + ); + +-- end: version_10_enable +-- */ + + ------------------------------------------------------------------------------------------------------------ + -- insert matching session statistics into SAWR$SESSION_STATS table + ------------------------------------------------------------------------------------------------------------ + l_codeloc := 'SNAP_SIDLIST_INTERNAL(P_SIDLIST): INSERT INTO SAWR$SESSION_STATS'; + insert into + sawr$session_stats ( + snapid + , snaptime + , audsid + , sid + , serial# + , statistic# + , value + ) + select --+ ORDERED USE_NL(s ss) INDEX(s) tanel2 + l_snapid, + sysdate as snaptime, + s.audsid, + s.sid, + s.serial#, + ss.statistic#, + ss.value + from + v$session s, + v$sesstat ss + where + s.sid = ss.sid + and s.sid in ( + select * from ( table(cast(p_sidlist as sawr$SIDlist)) ) + ) + and ss.statistic# in ( + select --+ ORDERED NO_UNNEST + statistic# + from + sawr$session_stat_mode cfg, + v$statname sn + where + sn.name = cfg.statistic_name + and cfg.mode_id = p_session_stats + ) + and ss.value != 0; + + + + l_codeloc := 'SNAP_SIDLIST_INTERNAL(P_SIDLIST): END'; + + exception + when NO_DATA_FOUND then null; -- its ok to find no matches for snapshot query + when others then raise_application_error(-20001, 'Error '||SQLCODE||': '||SQLERRM||' : FAILED AT '|| l_codeloc) ; + + + end snap_sidlist_internal; -- ( p_sidlist in sawr$SIDlist ) + + -------------------------------------------------------------------------------------------------------------------- + -- FUNCTION: snap_sidlist_internal (overloaded, p_sidlist as VARCHAR2 type) + -- + -- PURPOSE: this is a procedure accepting any SQL which returns array of + -- SIDs (NUMBER format) which are then used for calling the + -- snap_sidlist_internal sister function to extract session info + -- from V$SESSION + -- + -- PARAMETERS: + -- p_sidlist : sawr$SIDlist collection, this is array of SIDs to be sampled from V$SESSION + -- p_snapid : snapshot ID to be inserted into SAWR$ tables. normally this comes from + -- parent functions, but is autogenerated when the low-level function is + -- executed manually and by leaving p_snapid as NULL. + -------------------------------------------------------------------------------------------------------------------- + procedure snap_sidlist_internal(p_sql in varchar2, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null) + is + l_snapid number; + begin + + -- allocate a new snapid if a global one hasn't been passed down from caller + l_snapid := assign_snapid(p_snapid); + + -- call the overloaded snap_sidlist_internal sister-function + -- which accepts sawr$SIDlist collection as a parameter + snap_sidlist_internal( in_list(p_sql), p_session_stats, l_snapid ); + + end snap_sidlist_internal; -- ( p_sql in varchar2 ) + + +--================================================================================================================== +--================================================================================================================== +-- +-- External Procs to be executed by users +-- +--================================================================================================================== +--================================================================================================================== + + + -------------------------------------------------------------------------------------------------------------------- + -- procedure for snapping current session + -- useful for ad-hoc instrumentation and performance diagnosis for SQL tuning + -------------------------------------------------------------------------------------------------------------------- + procedure snap_me(p_session_stats in varchar2 default 'ALL', p_snapid in number default null) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_ME: '||user; + snap_sidlist_internal( 'select sid from v$mystat where rownum = 1', p_session_stats ); + commit; + end snap_me; + + + -------------------------------------------------------------------------------------------------------------------- + -- snap session with given SID + -------------------------------------------------------------------------------------------------------------------- + procedure snap_sid ( p_sid in number, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null ) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_SID: '||to_char(p_sid); + snap_sidlist_internal( 'select sid from v$session where sid in ('||to_char(p_sid)||')' , p_session_stats ); + commit; + end snap_sid; + + + -------------------------------------------------------------------------------------------------------------------- + -- snap session with given SID + -------------------------------------------------------------------------------------------------------------------- + procedure snap_sid ( p_sid in varchar2, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null ) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_SID: '||p_sid; + snap_sidlist_internal( 'select sid from v$session where sid in ('||p_sid||')' , p_session_stats ); + commit; + end snap_sid; + + + -------------------------------------------------------------------------------------------------------------------- + -- procedure for snapping all sessions + -------------------------------------------------------------------------------------------------------------------- + procedure snap_all(p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_ALL:'; + snap_sidlist_internal( 'select sid from v$session' , p_session_stats ); + commit; + end snap_all; + + + -------------------------------------------------------------------------------------------------------------------- + -- procedure for snapping all BACKGROUND sessions + -------------------------------------------------------------------------------------------------------------------- + procedure snap_bg(p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_BG:'; + snap_sidlist_internal( 'select sid from v$session where type = ''BACKGROUND''' , p_session_stats ); + commit; + end snap_bg; + + + -------------------------------------------------------------------------------------------------------------------- + -- procedure for snapping all USER sessions + -------------------------------------------------------------------------------------------------------------------- + procedure snap_fg(p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_FG:'; + snap_sidlist_internal( 'select sid from v$session where type = ''USER''' , p_session_stats ); + commit; + end snap_fg; + + + -------------------------------------------------------------------------------------------------------------------- + -- procedure for snapping all sessions estabilished by specified Oracle user + -- default value null will snap all sessions by current user + -------------------------------------------------------------------------------------------------------------------- + procedure snap_orauser(p_username in varchar2 default user, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_ORAUSER: '||p_username; + snap_sidlist_internal('select sid from v$session where username like '''|| p_username ||'''' , p_session_stats ); + commit; + end snap_orauser; + + + -------------------------------------------------------------------------------------------------------------------- + -- procedure for snapping all sessions estabilished by specified OS user + -------------------------------------------------------------------------------------------------------------------- + procedure snap_osuser(p_username in varchar2, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_OSUSER: '||p_username; + snap_sidlist_internal('select sid from v$session where osuser like '''|| p_username ||'''' , p_session_stats ); + commit; + end snap_osuser; + + + -------------------------------------------------------------------------------------------------------------------- + -- snap all sessions by program name (v$session.program) + -------------------------------------------------------------------------------------------------------------------- + procedure snap_program( p_program in varchar2, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null ) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_PROGRAM: '||p_program; + snap_sidlist_internal('select sid from v$session where program like '''|| p_program ||'''' , p_session_stats ); + commit; + end snap_program; + + + -------------------------------------------------------------------------------------------------------------------- + -- snap all sessions by terminal (v$session.terminal) + -------------------------------------------------------------------------------------------------------------------- + procedure snap_terminal( p_terminal in varchar2, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null ) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_TERMINAL: '||p_terminal; + snap_sidlist_internal('select sid from v$session where terminal like '''|| p_terminal ||'''' , p_session_stats ); + commit; + end snap_terminal; + + + -------------------------------------------------------------------------------------------------------------------- + -- snap all sessions by machine (v$session.machine) + -------------------------------------------------------------------------------------------------------------------- + procedure snap_machine( p_machine in varchar2, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null ) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_MACHINE: '||p_machine; + snap_sidlist_internal('select sid from v$session where machine like '''|| p_machine ||'''' , p_session_stats); + commit; + end snap_machine; + + + -------------------------------------------------------------------------------------------------------------------- + -- snap the session being served by SPID (v$process.spid) + -------------------------------------------------------------------------------------------------------------------- + procedure snap_spid( p_spid in varchar2, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null ) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_CPID: '||p_spid; + snap_sidlist_internal('select sid from v$session where paddr in ( select addr from v$process where spid in ('''|| p_spid ||'''))' , p_session_stats ); + commit; + end snap_spid; + + -------------------------------------------------------------------------------------------------------------------- + -- snap the session being served by SPID (v$process.spid) + -------------------------------------------------------------------------------------------------------------------- + procedure snap_spid( p_spid in number, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null ) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_CPID: '||p_spid; + snap_sidlist_internal('select sid from v$session where paddr in ( select addr from v$process where spid in ('''|| to_char(p_spid) ||'''))' , p_session_stats ); + commit; + end snap_spid; + + + -------------------------------------------------------------------------------------------------------------------- + -- snap all sessions by client PID (v$session.process) + -------------------------------------------------------------------------------------------------------------------- + procedure snap_cpid( p_cpid in varchar2, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null ) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_CPID: '||p_cpid; + snap_sidlist_internal('select sid from v$session where process in ('''|| p_cpid ||''')' , p_session_stats ); + commit; + end snap_cpid; + + + -------------------------------------------------------------------------------------------------------------------- + -- snap all sessions by client PID (v$session.process) + -------------------------------------------------------------------------------------------------------------------- + procedure snap_cpid( p_cpid in number, p_session_stats in varchar2 default 'TYPICAL', p_snapid in number default null ) is + pragma autonomous_transaction; + begin + g_snap_mode:='SNAP_CPID: '||to_char(p_cpid); + snap_sidlist_internal('select sid from v$session where process in ('''|| to_char(p_cpid) ||''')' , p_session_stats ); + commit; + end snap_cpid; + + -------------------------------------------------------------------------------------------------------------------- + -- purge repository data over a certain age threshold + -------------------------------------------------------------------------------------------------------------------- + procedure purge_data ( p_days_threshold in number default 7, p_snapid in number default null ) is + + type sawr$TableList is table of varchar2(30); + l_tables sawr$TableList := sawr$TableList('SAWR$SNAPSHOTS', + 'SAWR$SESSIONS', + 'SAWR$SESSION_EVENTS', + 'SAWR$SESSION_STATS'); + + l_snaptime date := trunc(sysdate)-nvl(p_days_threshold,7); + l_codeloc varchar2(200) := 'PURGE_DATA: BEGIN'; + l_ddl varchar2(200); + + pragma autonomous_transaction; + + begin + + l_codeloc := 'PURGE_DATA: DELETE DATA'; + for i in 1 .. l_tables.count loop + l_codeloc := 'PURGE_DATA: DELETE ' || l_tables(i); + execute immediate ' delete from ' || l_tables(i) || + ' where snaptime < :snaptime ' || + ' and (snapid = :snapid or :snapid is null)' + using l_snaptime, p_snapid, p_snapid; + end loop; + + l_codeloc := 'PURGE_DATA: REBUILD_TABLES'; + for i in 1 .. l_tables.count loop + + l_ddl := case l_tables(i) + when 'SAWR$SNAPSHOTS' + then 'alter index SAWR$SNAPSHOTS_PK coalesce' + else 'alter table ' || l_tables(i) || ' move online' + end; + l_codeloc := 'PURGE_DATA: REBUILD ' || l_tables(i); + execute immediate l_ddl; + end loop; + + l_codeloc := 'PURGE_DATA: END'; + + exception + when others then + raise_application_error(-20001, 'Error '||SQLCODE||': '||SQLERRM||' : FAILED AT '|| l_codeloc) ; + end purge_data; + +end sesspack; +/ + +show errors + + + diff --git a/tpt/tools/sesspack_0.05_release/install_sesspack_schema.sql b/tpt/tools/sesspack_0.05_release/install_sesspack_schema.sql new file mode 100644 index 0000000..753133b --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/install_sesspack_schema.sql @@ -0,0 +1,249 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +create or replace type sawr$SIDList is table of number; +/ + +create or replace type sawr$ModeList is table of varchar2(30); +/ + +create sequence sawr$snapid_seq cache 10 order; + +create table sawr$snapshots ( + snapid number, + snaptime date not null, + takenby varchar2(100) default user not null, + snap_mode varchar2(100) not null, + snap_comment varchar2(4000) +); +create index sawr$snapshots_pk on sawr$snapshots ( snapid, snaptime ); +alter table sawr$snapshots add constraint sawr$snapshots_pk primary key (snapid) using index sawr$snapshots_pk; + +create table sawr$sessions ( + snapid number not null + , snaptime date not null + , program varchar2(48) not null + , module varchar2(48) not null + , action varchar2(32) not null + , username varchar2(30) not null + , machine varchar2(64) not null + , osuser varchar2(30) not null + , terminal varchar2(30) not null + , audsid number not null + , sid number not null + , serial# number not null + , process varchar2(12) + , logon_time date + , sql_hash_value number + , prev_hash_value number + , client_info varchar2(64) + , row_wait_obj# number + , row_wait_file# number + , row_wait_block# number + , row_wait_row# number + , last_call_et number + , client_identifier varchar2(64) + , constraint sawr$sessions_pk primary key ( + snapid + , snaptime + , program + , module + , action + , username + , machine + , osuser + , terminal + , sid + , serial# + , audsid + ) -- so many PK columns and such column order is used for achieving good compressed IOT storage +) +organization index compress; + +create table sawr$session_events ( + snapid number + , snaptime date + , audsid number + , sid number + , serial# number + , event# number + , total_timeouts number + , total_waits number + , average_wait number + , max_wait number + , time_waited_micro number + , event_id number + , constraint sawr$session_events_pk primary key ( + snapid, + snaptime, + audsid, + sid, + serial#, + event# + ) +) +organization index compress; + +create table sawr$session_stats ( + snapid number + , snaptime date + , audsid number + , sid number + , serial# number + , statistic# number + , value number + , constraint sawr$session_stats_pk primary key ( + snapid, + snaptime, + audsid, + sid, + serial#, + statistic# + ) +) +organization index compress; + + +--------------------------------------------------------------------------------- +-- Table for V$SESSTAT sampling templates +--------------------------------------------------------------------------------- + +create table sawr$session_stat_mode ( + mode_id varchar(30) not null, + statistic_name varchar2(250) not null, + constraint sawr$session_stat_mode_pk primary key (mode_id, statistic_name) +) +organization index; + +insert into sawr$session_stat_mode +select + 'MINIMAL', + name +from + v$statname +where + name in ( + 'user calls', + 'user commits' + ) +/ + +insert into sawr$session_stat_mode +select + 'TYPICAL', + name +from + v$statname +where + name in ( + 'user calls', + 'user commits', + 'parse count (total)', + 'parse count (hard)', + 'execute count', + 'consistent gets', + 'db block gets' + ) +/ + +insert into sawr$session_stat_mode +select + 'DETAILED', + name +from + v$statname +where + name in ( + 'user calls', + 'user commits', + 'parse count (total)', + 'parse count (hard)', + 'execute count', + 'consistent gets', + 'consistent gets - examination', + 'db block gets', + 'parse time cpu', + 'parse time elapsed', + 'sorts (memory)', + 'sorts (disk)', + 'sorts (rows)', + 'transaction rollbacks', + 'user rollbacks' + ) +/ + +insert into sawr$session_stat_mode +select + 'ALL', + name +from + v$statname +/ + + +commit; + + +-- SAWR$SESS_EVENT +-- View consolidating sessions events and values over taken snapshots + +create or replace view sawr$sess_event as + select + snap.snapid, snap.snaptime, + s.sid, s.audsid, s.serial#, + s.username, s.program, s.terminal, s.machine, + s.osuser, s.process, s.module, s.action, + en.event#, en.name, e.time_waited_micro, + e.total_waits, e.average_wait, s.logon_time + from + sawr$snapshots snap, + sawr$sessions s, + sawr$session_events e, + ( select event#, name from v$event_name + union all + select -1, 'CPU Usage' from dual + ) en + where + snap.snapid = s.snapid + and snap.snapid = e.snapid + and s.audsid = e.audsid + and s.sid = e.sid + and s.serial# = e.serial# + and en.event# = e.event# +/ + +-- SAWR$SESS_STAT +-- View consolidating sessions stats and values over taken snapshots + +create or replace view sawr$sess_stat as + select + snap.snapid, snap.snaptime, + s.sid, s.audsid, s.serial#, + s.username, s.program, s.terminal, s.machine, + s.osuser, s.process, s.module, s.action, + sn.statistic#, sn.name, ss.value, s.logon_time + from + sawr$snapshots snap, + sawr$sessions s, + sawr$session_stats ss, + v$statname sn + where + snap.snapid = s.snapid + and snap.snapid = ss.snapid + and s.audsid = ss.audsid + and s.sid = ss.sid + and s.serial# = ss.serial# + and sn.statistic# = ss.statistic# +/ + + diff --git a/tpt/tools/sesspack_0.05_release/list.sql b/tpt/tools/sesspack_0.05_release/list.sql new file mode 100644 index 0000000..ff7399f --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/list.sql @@ -0,0 +1,40 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +set lines 156 + +column sawr_list_takenby heading "Taken By" format a20 +column sawr_list_snapid heading "Snap ID" format 9999999 +column sawr_list_snaptime heading "Snapshot Time" format a20 +column sawr_session_count heading "Snapped|Sessions" format 9999999 +column sawr_snap_mode heading "Snapshot|Mode" format a40 + +select + snap.snapid sawr_list_snapid, + to_char(snap.snaptime, 'YYYY-MM-DD HH24:MI:SS') sawr_list_snaptime, + snap.takenby sawr_list_takenby, + snap.snap_mode sawr_snap_mode, + count(*) sawr_session_count +from + sawr$snapshots snap, + sawr$sessions sess +where + snap.snapid = sess.snapid +group by + snap.snapid, + to_char(snap.snaptime, 'YYYY-MM-DD HH24:MI:SS'), + snap.snap_mode, + snap.takenby +order by + to_char(snap.snaptime, 'YYYY-MM-DD HH24:MI:SS') +/ diff --git a/tpt/tools/sesspack_0.05_release/old_sr.sql b/tpt/tools/sesspack_0.05_release/old_sr.sql new file mode 100644 index 0000000..380f6d8 --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/old_sr.sql @@ -0,0 +1,167 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +set feedback off null "[NULL]" + +-- define _tptmode = normal +define grouping=&1 +define start_snap=&2 +define end_snap=&3 + +col wait_ms for 9999999999 +col avg_wait_ms for 99999999.9 +col ms_per_sec for 999999.9 + +col program for a30 truncate +col username for a15 truncate +col osuser for a20 truncate +col name for a30 truncate +col machine for a20 truncate + +col grouping_break noprint new_value grouping_break +--set termout off +select replace('&grouping', ',', ' on ') grouping_break from dual; +--set termout on + +break on &grouping_break skip 1 + + +select + to_char(a.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_begin, + to_char(b.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_end, + (b.snaptime - a.snaptime)*86400 dur_sec, + (b.snaptime - a.snaptime)*86400/60 dur_min +from + (select snaptime from sawr$snapshots where snapid = &2) a, + (select snaptime from sawr$snapshots where snapid = &3) b +/ + + +select + &grouping, + substr(name,1,45) name, + decode(lower('&_tptmode'),'html','','|')|| + rpad( + nvl( + lpad('#', + ceil( (nvl(round(sum(us_per_sec/1000000),2),0))*10 ), + '#'), + ' '), + 10,' ') + ||decode(lower('&_tptmode'),'html','','|') "%Total", + sum(us_per_sec)/1000 ms_per_sec, + (sum(wait_us)/decode(sum(waits),0,1,sum(waits))/1000) avg_wait_ms, + sum(waits) waits, + sum(wait_us)/1000 wait_ms + -- ,avg(intrvl)/1000 sec_in_snap +from ( + select + e2.sid, + e2.audsid, + nvl(e1.snapid, &start_snap) begin_snapid, + e2.snapid end_snapid, + e2.username, + e2.program, + e2.terminal, + e2.machine, + e2.osuser, + e2.module, + e2.action, + e2.name, + round(e2.time_waited_micro - nvl(e1.time_waited_micro,0)) wait_us, + round( + ( e2.time_waited_micro - nvl(e1.time_waited_micro,0) ) / ( + decode((e2.snaptime - nvl(e1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400, 0, 1, + (e2.snaptime - nvl(e1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400) + ) + ) us_per_sec, + (e2.snaptime - nvl(e1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400*1000 intrvl, + e2.total_waits - nvl(e1.total_waits,0) waits + -- e1.average_wait avg1, + -- e2.average_wait avg2, + -- e2.average_wait - nvl(e1.average_wait,0) avgdelta + from + ( select * from sawr$sess_event where snapid = &start_snap ) e1, + ( select * from sawr$sess_event where snapid = &end_snap ) e2 + where + e1.audsid (+) = e2.audsid + and e1.sid (+) = e2.sid + and e1.serial# (+) = e2.serial# + and e1.logon_time (+) = e2.logon_time + and e1.event# (+) = e2.event# +) sq +where + ( waits != 0 or wait_us != 0 ) +group by + &grouping, name +order by + &grouping, ms_per_sec desc +/ + +col delta head Delta for 9999999999 +col delta_sec head D/sec for 9999999.9 + +select + &grouping, + substr(name,1,45) name, + decode(lower('&_tptmode'),'html','','|')|| + rpad( + nvl( + lpad('#', + ceil( nvl(log(10,abs(decode(sum(delta),0,1,sum(delta)))),0) ), + '#'), + ' '), + 10,' ') + ||decode(lower('&_tptmode'),'html','','|') "log10(D)", + sum(delta) delta, + sum(delta)/(avg(intrvl)/1000) delta_sec + -- ,avg(intrvl)/1000 sec_in_snap +from ( + select + s2.sid, + s2.audsid, + nvl(s1.snapid, &start_snap) begin_snapid, + s2.snapid end_snapid, + s2.username, + s2.program, + s2.terminal, + s2.machine, + s2.osuser, + s2.process, + s2.name, + s2.module, + s2.action, + s2.value - nvl(s1.value,0) delta, + (s2.snaptime - nvl(s1.snaptime,(select snaptime from sawr$snapshots where snapid = &start_snap)))*86400*1000 intrvl + from + ( select * from sawr$sess_stat where snapid = &start_snap ) s1, + ( select * from sawr$sess_stat where snapid = &end_snap ) s2 + where + s1.audsid (+) = s2.audsid + and s1.sid (+) = s2.sid + and s1.serial# (+) = s2.serial# + and s1.logon_time (+) = s2.logon_time + and s1.statistic# (+) = s2.statistic# +) sq +where + delta != 0 +group by + &grouping, name +order by + &grouping, abs(delta) desc +/ + + +break on _nonexistent +set feedback on null "" diff --git a/tpt/tools/sesspack_0.05_release/prepare_user.sql b/tpt/tools/sesspack_0.05_release/prepare_user.sql new file mode 100644 index 0000000..7ec0272 --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/prepare_user.sql @@ -0,0 +1,61 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +-- whenever sqlerror exit 1 rollback +set verify off + +-- create sesspack roles +create role sesspack_user_role; +create role sesspack_admin_role; + +-- grant the roles to sesspack schema holder +grant sesspack_user_role to &spuser with admin option; +grant sesspack_user_role to sesspack_admin_role; +grant sesspack_admin_role to &spuser with admin option; + +-- two additional privs to sesspack owner to avoid ORA-01720 +grant select on sys.v_$event_name to &spuser with grant option; +grant select on sys.v_$statname to &spuser with grant option; + +-- grant privs required for taking and scheduling snapshots +grant select on sys.v_$mystat to sesspack_user_role; +grant select on sys.v_$session to sesspack_user_role; +grant select on sys.v_$session_wait to sesspack_user_role; +grant select on sys.v_$session_event to sesspack_user_role; +grant select on sys.v_$system_event to sesspack_user_role; +grant select on sys.v_$sess_time_model to sesspack_user_role; +grant select on sys.v_$sesstat to sesspack_user_role; +grant select on sys.v_$event_name to sesspack_user_role; +grant select on sys.v_$statname to sesspack_user_role; +grant execute on sys.dbms_job to &spuser; +-- for 10g +grant create job to &spuser; + +grant create table to &spuser; +grant create view to &spuser; +grant create type to &spuser; +grant create procedure to &spuser; +grant create public synonym to &spuser; + +grant select on sys.v_$mystat to &spuser; +grant select on sys.v_$session to &spuser; +grant select on sys.v_$session_wait to &spuser; +grant select on sys.v_$session_event to &spuser; +grant select on sys.v_$system_event to &spuser; +grant select on sys.v_$sess_time_model to &spuser; +grant select on sys.v_$sesstat to &spuser; +grant select on sys.v_$event_name to &spuser; +grant select on sys.v_$statname to &spuser; + +set verify on +whenever sqlerror continue \ No newline at end of file diff --git a/tpt/tools/sesspack_0.05_release/reinst.sql b/tpt/tools/sesspack_0.05_release/reinst.sql new file mode 100644 index 0000000..fd78775 --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/reinst.sql @@ -0,0 +1,59 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +define spuser=perfstat +define sphost=ora92 +define sppass=oracle +define sysuser=sys +define syspass=oracle + +connect &spuser/&sppass@&sphost + +column sesspack_v9 noprint new_value version_9_enable +column sesspack_v10 noprint new_value version_10_enable + +with SQ as ( + select substr( + substr(banner, instr(banner, 'Release ')+8), + 1, + instr(substr(banner, instr(banner, 'Release ')+8),'.')-1 + ) db_version + from v$version + where rownum = 1 +) +select + case when db_version = '9' then '--' else '/*' end sesspack_v9, + case when db_version = '10' then '--' else '/*' end sesspack_v10 +from sq; + + + +prompt Uninstalling schema... + + +@@drop_sesspack_packages.sql +@@drop_sesspack_schema.sql + +--connect &sysuser/&syspass@&sphost + +-- @@prepare_user.sql + +-- connect &spuser/oracle + +prompt Installing schema... + +@@install_sesspack_schema.sql +@@install_sesspack_packages.sql +@@install_grants_syns.sql + +-- connect / as sysdba diff --git a/tpt/tools/sesspack_0.05_release/reinstall_sesspack.sql b/tpt/tools/sesspack_0.05_release/reinstall_sesspack.sql new file mode 100644 index 0000000..bc44851 --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/reinstall_sesspack.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +@@drop_sesspack.sql +@@install_sesspack.sql diff --git a/tpt/tools/sesspack_0.05_release/sesspack_ps.sh b/tpt/tools/sesspack_0.05_release/sesspack_ps.sh new file mode 100644 index 0000000..12a233a --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/sesspack_ps.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +# Note that this is currently only for Solaris + +while true +do + echo `date +%Y%m%d%H%M%S`";"BEGIN_PS_SAMPLE > /tmp/sawr_ps_pipe + ps -u oracle -o pid,time | awk '{ if ( NR > 1 ) print $1";"$2 }' > /tmp/sawr_ps_pipe +done + diff --git a/tpt/tools/sesspack_0.05_release/sesspack_purge.sql b/tpt/tools/sesspack_0.05_release/sesspack_purge.sql new file mode 100644 index 0000000..dd0669e --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/sesspack_purge.sql @@ -0,0 +1,38 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +define spuser=&1 +define spkeep=&2 + +prompt + +set heading off feedback off +select 'sesspack_purge: removing records older than '|| to_char( sysdate - &spkeep, 'YYYYMMDD HH24:MI:SS') from dual; +set heading on feedback on + +prompt + +prompt delete from &spuser..SAWR$SNAPSHOTS where snaptime < sysdate - &spkeep; +delete from &spuser..SAWR$SNAPSHOTS where snaptime < sysdate - &spkeep; +commit; + +prompt delete from &spuser..SAWR$SESSIONS where snaptime < sysdate - &spkeep; +delete from &spuser..SAWR$SESSIONS where snaptime < sysdate - &spkeep; +commit; + +prompt delete from &spuser..SAWR$SESSION_EVENTS where snaptime < sysdate - &spkeep; +delete from &spuser..SAWR$SESSION_EVENTS where snaptime < sysdate - &spkeep; +commit; + +prompt delete from &spuser..SAWR$SESSION_STATS where snaptime < sysdate - &spkeep; +delete from &spuser..SAWR$SESSION_STATS where snaptime < sysdate - &spkeep; +commit; + +-- compact the indexes & IOTs for saving space +alter index SAWR$SNAPSHOTS_PK coalesce; +alter table SAWR$SESSIONS move online; +alter table SAWR$SESSION_STATS move online; +alter table SAWR$SESSION_EVENTS move online; + +undefine spuser +undefine spkeep diff --git a/tpt/tools/sesspack_0.05_release/sesspack_truncate.sql b/tpt/tools/sesspack_0.05_release/sesspack_truncate.sql new file mode 100644 index 0000000..3582e22 --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/sesspack_truncate.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +define spuser=&1 + +prompt Truncating &spuser SAWR$ tables... + +set echo on + +truncate table &spuser..SAWR$SNAPSHOTS; +truncate table &spuser..SAWR$SESSIONS; +truncate table &spuser..SAWR$SESSION_EVENTS; +truncate table &spuser..SAWR$SESSION_STATS; + +set echo off + +undefine spuser + diff --git a/tpt/tools/sesspack_0.05_release/sesspack_vmstat.sh b/tpt/tools/sesspack_0.05_release/sesspack_vmstat.sh new file mode 100644 index 0000000..995d7c0 --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/sesspack_vmstat.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +# Note that this is currently only for Solaris + +while true +do + echo `date +%Y%m%d%H%M%S`";"BEGIN_SAMPLE > /tmp/sawr_vmstat_pipe + vmstat -s | awk '{ print $1";"$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9 }' > /tmp/sawr_vmstat_pipe +done + diff --git a/tpt/tools/sesspack_0.05_release/sr.sql b/tpt/tools/sesspack_0.05_release/sr.sql new file mode 100644 index 0000000..6b510ce --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/sr.sql @@ -0,0 +1,168 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +set feedback off lines 200 trimspool on + +define _tptmode = normal +define grouping = &1 +define start_snap = &2 +define end_snap = &3 + +col wait_ms for 9999999999 +col avg_wait_ms for 99999999.9 +col ms_per_sec for 999999.9 noprint +col pct_in_wait head "% of|Time" for 99999.9 +col module for a30 truncate +col action for a30 truncate +col program for a30 truncate +col username for a15 truncate +col osuser for a20 truncate +col name for a30 truncate +col machine for a20 truncate +col histgm for a10 truncate + +col grouping_break noprint new_value grouping_break +col mandatory_name_col noprint new_value name_col +--set termout off +select replace('&grouping', ',', ' on ') as grouping_break +, case + when replace(lower('&grouping'), ',', ' ') like '% name %' + or replace(lower('&grouping'), ',', ' ') like '% name' + or replace(lower('&grouping'), ',', ' ') like 'name %' + or trim(lower('&grouping')) = 'name' + then '--,name' + else ',name' + end as mandatory_name_col +from dual; +--set termout on + +break on &grouping_break skip 1 + + +select + to_char(a.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_begin, + to_char(b.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_end, + (b.snaptime - a.snaptime)*86400 dur_sec, + (b.snaptime - a.snaptime)*86400/60 dur_min +from + (select snaptime from sawr$snapshots where snapid = &2) a, + (select snaptime from sawr$snapshots where snapid = &3) b +/ + + +rem Events delta report +rem ================================================================================== + +with deltas as ( + select e2.sid + , nvl(e1.snapid, &start_snap) as begin_snapid + , e2.snapid as end_snapid + , nvl(e1.snaptime, e2.logon_time) as begin_snaptime + , e2.snaptime as end_snaptime + , greatest((e2.snaptime - nvl(e1.snaptime, e2.logon_time))*86400,1) as snap_interval + , e2.audsid + , e2.username + , e2.program + , e2.terminal + , e2.machine + , e2.osuser + , e2.module + , e2.action + , substr(e2.name,1,45) as name + , e2.time_waited_micro - nvl(e1.time_waited_micro,0) as wait_us + , e2.total_waits - nvl(e1.total_waits,0) as waits + from sawr$sess_event e1 + right outer join + sawr$sess_event e2 + on (e1.audsid = e2.audsid + and e1.sid = e2.sid + and e1.serial# = e2.serial# + and e1.logon_time = e2.logon_time + and e1.event# = e2.event# + and e1.snapid = &start_snap) + where e2.snapid = &end_snap + ) +, micros as ( + select d.* + , round(d.wait_us/d.snap_interval) as us_per_sec + from deltas d + where d.waits != 0 + or d.wait_us != 0 + ) +select &grouping + &name_col +, rpad('#',trunc(ratio_to_report(sum(wait_us)) over (partition by &grouping)*10),'#') as histgm +, sum(us_per_sec)/1000 as ms_per_sec +, round(sum(us_per_sec)/10000,2) as pct_in_wait +, (sum(wait_us)/decode(sum(waits),0,1,sum(waits))/1000) as avg_wait_ms +, sum(wait_us)/1000 as wait_ms +, sum(waits) as waits +from micros +group by + &grouping + &name_col +order by + &grouping, ms_per_sec desc; + + +rem Stats delta report +rem ================================================================================== + +col delta head Delta for 999999999999999 +col delta_per_sec head D/sec for 999999999999.9 + +with deltas as ( + select s2.sid + , nvl(s1.snapid, &start_snap) as begin_snapid + , s2.snapid as end_snapid + , nvl(s1.snaptime, s2.logon_time) as begin_snaptime + , s2.snaptime as end_snaptime + , greatest((s2.snaptime - nvl(s1.snaptime, s2.logon_time))*86400,1) as snap_interval + , s2.audsid + , s2.username + , s2.program + , s2.terminal + , s2.machine + , s2.osuser + , s2.module + , s2.action + , substr(s2.name,1,45) as name + , s2.value - nvl(s1.value,0) as delta + from sawr$sess_stat s1 + right outer join + sawr$sess_stat s2 + on (s1.audsid = s2.audsid + and s1.sid = s2.sid + and s1.serial# = s2.serial# + and s1.logon_time = s2.logon_time + and s1.statistic# = s2.statistic# + and s1.snapid = &start_snap) + where s2.snapid = &end_snap + ) +select &grouping + &name_col +, rpad('#',trunc(ratio_to_report(sum(delta)) over (partition by &grouping)*10),'#') as histgm +, sum(delta)/avg(snap_interval) as delta_per_sec +, sum(delta) as delta +from deltas +where delta != 0 +group by + &grouping + &name_col +order by + &grouping, abs(delta) desc; + + + +break on _nonexistent +set feedback on null "" diff --git a/tpt/tools/sesspack_0.05_release/srs.sql b/tpt/tools/sesspack_0.05_release/srs.sql new file mode 100644 index 0000000..dae98cc --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/srs.sql @@ -0,0 +1,190 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +set feedback 5 lines 200 trimspool on + +define _tptmode = normal +define grouping = &1 +define start_snap = &2 +define end_snap = &3 +define stat_cols = "&4" + +col wait_ms for 9999999999 +col avg_wait_ms for 99999999.9 +col ms_per_sec for 999999.9 +col module for a30 truncate +col action for a30 truncate +col program for a30 truncate +col username for a15 truncate +col osuser for a20 truncate +col name for a30 truncate +col machine for a20 truncate +col histgm for a10 truncate + +col delta head Delta for 9999999999 +col delta_per_sec head D/sec for 9999999.9 + +col grouping_break noprint new_value grouping_break +col mandatory_name_col noprint new_value name_col +col stat_list_cols noprint new_value stat_list +col e2_grouping_cols noprint new_value e2_grouping +col sa_grouping_cols noprint new_value sa_grouping + +--set termout off +select case + when replace(lower('&grouping'), ',', ' ') like '% name %' + or replace(lower('&grouping'), ',', ' ') like '% name' + or replace(lower('&grouping'), ',', ' ') like 'name %' + or trim(lower('&grouping')) = 'name' + then '--,name' + else ',name' + end as mandatory_name_col +, replace('&grouping', ',', ' on ') as grouping_break +, replace(replace('e2.&grouping',' '),',',',e2.') as e2_grouping_cols +, replace(replace('sa.&grouping',' '),',',',sa.') as sa_grouping_cols +, replace( + replace( + replace('&stat_cols',', ',','),' ,',','),',',''',''') as stat_list_cols +from dual; +--set termout on + +break on &grouping_break on delta_type skip 1 + +select + to_char(a.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_begin, + to_char(b.snaptime, 'YYYYMMDD HH24:MI:SS') snapshot_end, + (b.snaptime - a.snaptime)*86400 dur_sec, + (b.snaptime - a.snaptime)*86400/60 dur_min +from + (select snaptime from sawr$snapshots where snapid = &start_snap) a, + (select snaptime from sawr$snapshots where snapid = &end_snap) b +/ + + +rem Specific stats and events delta report +rem ================================================================================== +with stat_deltas as ( + select s2.sid + , nvl(s1.snapid, &start_snap) as begin_snapid + , s2.snapid as end_snapid + , nvl(s1.snaptime, s2.logon_time) as begin_snaptime + , s2.snaptime as end_snaptime + , greatest((s2.snaptime - nvl(s1.snaptime, s2.logon_time))*86400,1) as snap_interval + , s2.audsid + , s2.username + , s2.program + , s2.terminal + , s2.machine + , s2.osuser + , s2.module + , s2.action + , substr(s2.name,1,45) as name + , s2.value - nvl(s1.value,0) as delta + from sawr$sess_stat s1 + right outer join + sawr$sess_stat s2 + on (s1.audsid = s2.audsid + and s1.sid = s2.sid + and s1.serial# = s2.serial# + and s1.logon_time = s2.logon_time + and s1.statistic# = s2.statistic# + and s1.snapid = &start_snap) + where s2.snapid = &end_snap + and (s2.name in ( '&stat_list' ) + or replace('&stat_list',' ') is null) + ) +, stat_aggregates as ( + select &grouping + &name_col + , sum(delta)/avg(snap_interval) as delta_per_sec + , sum(delta) as delta + from stat_deltas + where delta != 0 + group by + &grouping + &name_col + order by + &grouping, abs(delta) desc + ) +, event_deltas as ( + select e2.sid + , nvl(e1.snapid, &start_snap) as begin_snapid + , e2.snapid as end_snapid + , nvl(e1.snaptime, e2.logon_time) as begin_snaptime + , e2.snaptime as end_snaptime + , greatest((e2.snaptime - nvl(e1.snaptime, e2.logon_time))*86400,1) as snap_interval + , e2.audsid + , e2.username + , e2.program + , e2.terminal + , e2.machine + , e2.osuser + , e2.module + , e2.action + , substr(e2.name,1,45) as name + , e2.time_waited_micro - nvl(e1.time_waited_micro,0) as wait_us + , e2.total_waits - nvl(e1.total_waits,0) as waits + from sawr$sess_event e1 + right outer join + sawr$sess_event e2 + on (e1.audsid = e2.audsid + and e1.sid = e2.sid + and e1.serial# = e2.serial# + and e1.logon_time = e2.logon_time + and e1.event# = e2.event# + and e1.snapid = &start_snap) + where e2.snapid = &end_snap + and (&e2_grouping) in (select &sa_grouping from stat_aggregates sa) + ) +, event_micros as ( + select ed.* + , round(ed.wait_us/ed.snap_interval) as us_per_sec + from event_deltas ed + where ed.waits != 0 + or ed.wait_us != 0 + ) +, event_aggregates as ( + select &grouping + &name_col + , rpad('#',trunc(ratio_to_report(sum(wait_us)) over (partition by &grouping)*10),'#') as histgm + , sum(wait_us)/1000 as wait_ms + , sum(us_per_sec)/1000 as ms_per_sec + , round(sum(us_per_sec)/10000,2) as pct_in_wait + , (sum(wait_us)/decode(sum(waits),0,1,sum(waits))/1000) as avg_wait_ms + , sum(waits) as waits + from event_micros + group by + &grouping + &name_col + order by + &grouping, ms_per_sec desc + ) +select * +from ( + select &grouping + , 'STAT' as delta_type + &name_col + , delta_per_sec + , delta + from stat_aggregates + union all + select &grouping + , 'EVENT' as delta_type + &name_col + , ms_per_sec + , waits + from event_aggregates + ) +order by + &grouping, delta_type, delta_per_sec desc; + diff --git a/tpt/tools/sesspack_0.05_release/unprepare_user.sql b/tpt/tools/sesspack_0.05_release/unprepare_user.sql new file mode 100644 index 0000000..86ddae9 --- /dev/null +++ b/tpt/tools/sesspack_0.05_release/unprepare_user.sql @@ -0,0 +1,46 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Notes: This software is provided AS IS and doesn't guarantee anything +-- Proofread before you execute it! +-- +-------------------------------------------------------------------------------- + +prompt +prompt Dropping roles... +prompt + +drop role sesspack_admin_role; +drop role sesspack_user_role; + +prompt +prompt Ready to revoke SAWR privileges from user &spuser +prompt The following commands will be run: +prompt + +prompt revoke select on sys.v_$session from &spuser; +prompt revoke select on sys.v_$session_wait from &spuser; +prompt revoke select on sys.v_$session_event from &spuser; +prompt revoke select on sys.v_$sess_time_model from &spuser; +prompt revoke select on sys.v_$sesstat from &spuser; +prompt revoke select on sys.v_$event_name from &spuser; +prompt revoke select on sys.v_$statname from &spuser; + +prompt +pause Press CTRL-C if you don't want to run those commands, otherwise press ENTER... +prompt + +revoke select on sys.v_$session from &spuser; +revoke select on sys.v_$session_wait from &spuser; +revoke select on sys.v_$session_event from &spuser; +revoke select on sys.v_$sess_time_model from &spuser; +revoke select on sys.v_$sesstat from &spuser; +revoke select on sys.v_$event_name from &spuser; +revoke select on sys.v_$statname from &spuser; + +whenever sqlerror continue diff --git a/tpt/tools/space_tools/space_usage.sql b/tpt/tools/space_tools/space_usage.sql new file mode 100644 index 0000000..3e6d73c --- /dev/null +++ b/tpt/tools/space_tools/space_usage.sql @@ -0,0 +1,39 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +CREATE OR REPLACE PACKAGE space_tools AS + FUNCTION get_space_usage(owner IN VARCHAR2, object_name IN VARCHAR2, segment_type IN VARCHAR2, partition_name IN VARCHAR2 DEFAULT NULL) RETURN sys.DBMS_DEBUG_VC2COLL PIPELINED; +END space_tools; +/ +SHOW ERR; + +CREATE OR REPLACE PACKAGE BODY space_tools AS + FUNCTION get_space_usage(owner IN VARCHAR2, object_name IN VARCHAR2, segment_type IN VARCHAR2, partition_name IN VARCHAR2 DEFAULT NULL) RETURN sys.DBMS_DEBUG_VC2COLL PIPELINED + AS + ufbl NUMBER; + ufby NUMBER; + fs1bl NUMBER; + fs1by NUMBER; + fs2bl NUMBER; + fs2by NUMBER; + fs3bl NUMBER; + fs3by NUMBER; + fs4bl NUMBER; + fs4by NUMBER; + fubl NUMBER; + fuby NUMBER; + BEGIN + DBMS_SPACE.SPACE_USAGE(owner,object_name,segment_type, ufbl, ufby, fs1bl,fs1by, fs2bl,fs2by, fs3bl,fs3by, fs4bl,fs4by, fubl,fuby, partition_name); + PIPE ROW('Full blocks /MB '||TO_CHAR(fubl, '999999999')||' '||TO_CHAR(fuby /1048576,'999999999')); + PIPE ROW('Unformatted blocks/MB '||TO_CHAR(ufbl, '999999999')||' '||TO_CHAR(ufby /1048576,'999999999')); + PIPE ROW('Free Space 0-25% '||TO_CHAR(fs1bl, '999999999')||' '||TO_CHAR(fs1by /1048576,'999999999')); + PIPE ROW('Free Space 25-50% '||TO_CHAR(fs2bl, '999999999')||' '||TO_CHAR(fs2by /1048576,'999999999')); + PIPE ROW('Free Space 50-75% '||TO_CHAR(fs3bl, '999999999')||' '||TO_CHAR(fs3by /1048576,'999999999')); + PIPE ROW('Free Space 75-100% '||TO_CHAR(fs4bl, '999999999')||' '||TO_CHAR(fs4by /1048576,'999999999')); + END get_space_usage; +END space_tools; +/ +SHOW ERR; + + + diff --git a/tpt/tools/unix/findhomes.sh b/tpt/tools/unix/findhomes.sh new file mode 100644 index 0000000..b048679 --- /dev/null +++ b/tpt/tools/unix/findhomes.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# A little helper script for finding ORACLE_HOMEs for all running instances in a Linux server +# by Tanel Poder (http://blog.tanelpoder.com) + +printf "%6s %-20s %-80s\n" "PID" "NAME" "ORACLE_HOME" +pgrep -lf _pmon_ | + while read pid pname y ; do + printf "%6s %-20s %-80s\n" $pid $pname `ls -l /proc/$pid/exe | awk -F'>' '{ print $2 }' | sed 's/bin\/oracle$//' | sort | uniq` + done + diff --git a/tpt/tools/unix/heapdump_analyzer b/tpt/tools/unix/heapdump_analyzer new file mode 100644 index 0000000..5a7a3bd --- /dev/null +++ b/tpt/tools/unix/heapdump_analyzer @@ -0,0 +1,58 @@ +#!/bin/ksh +################################################################################ +## Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +## Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +## +## File name: heapdump_analyzer +## Purpose: Script for aggregating Oracle heapdump chunk sizes +## +## Author: Tanel Poder +## Copyright: (c) http://www.tanelpoder.com +## +## Usage: 1) Take a heapdump ( read http://www.juliandyke.com ) +## +## 2) run ./heapdump_analyzer +## For example: ./heapdump_analyzer ORCL_ora_4345.trc +## +## Other: Only take heapdumps when you know what you're doing! +## Taking a heapdump on shared pool (when bit 2 in heapdump event +## level is enabled) can hang your database for a while as it +## holds shared pool latches for a long time if your shared pool +## is big and heavily active. +## +## Private memory heapdumps are safer as only the dumped process is +## affected. +## +## On Solaris you may need to replace awk with nawk in this script +## +################################################################################ + +if [ "$1" == "-t" ]; then + EXCLUDE='dummy_nonexistent_12345' + shift +else + EXCLUDE='Total heap size$' +fi + +echo +echo " -- Heapdump Analyzer v1.03 by Tanel Poder ( https://blog.tanelpoder.com )" +echo +echo " Total_size #Chunks Chunk_size, From_heap, Chunk_type, Alloc_reason" +echo " ------------ ------- ------------ ----------------- ----------------- -----------------" + +cat $1 | awk ' + /^HEAP DUMP heap name=/ { split($0,ht,"\""); HTYPE=ht[2]; doPrintOut = 1; } + /Chunk/{ if ( doPrintOut == 1 ) { + split($0,sf,"\""); + printf "%12.0f , %16s, %16s, %16s\n", $4, HTYPE, $5, sf[2]; + } + } + /Total heap size/ { + printf "%12.0f , %16s, %16s, %16s\n", $5, HTYPE, "TOTAL", "Total heap size"; + doPrintOut=0; + } + ' | grep -v "$EXCLUDE" | sort -n | uniq -c | awk '{ printf " %12.0f %s\n", $1*$2, $0 }' | sort -nr + +echo + + diff --git a/tpt/tools/unix/os_explain b/tpt/tools/unix/os_explain new file mode 100644 index 0000000..b551fee --- /dev/null +++ b/tpt/tools/unix/os_explain @@ -0,0 +1,190 @@ +#!/bin/bash +################################################################################ +## Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +## Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +## +## File name: os_explain (version 1.1) +## Purpose: Script to explain the currently active branch of SQL plan +## execution from Oracle server process stack trace +## +## Author: Tanel Poder +## Copyright: (c) http://www.tanelpoder.com +## +## Usage: 1) Take a stack trace of an Oracle process (either by using a +## a debugger, pstack or extract the stack from a corefile, +## save it to a file (pstack.txt for example) +## 2) run ./os_explain +## For example: ./os_explain pstack.txt +## +## +## +## Alternatively you can pipe pstack output directly to os_explain +## STDIN: +## +## pstack | ./os_explain +## +## Other: Get stack using pstack on Solaris and Linux, using procstack +## on AIX and by using pstack on recent versions of HP-UX. +## Older HP-UX versions may require a debugger for getting stack +## from OS. As an alternative (especially on Windows) you could +## use ORADEBUG DUMP ERRORSTACK for dumping stack of a process. +## Note that ORADEBUG's stack dump mechanism is not 100% safe +## on active processes +## +## Most of Oracle kernel function prefix translations are based +## on Metalink note 175982.1 (google for it, it's gone from the +## Oracle site) +## +## On Solaris you may need to replace awk with nawk in this script +## I don't remember why anymore, but for some reason I used it +## +################################################################################ + +# LIFO line reverser +f_lifo() { + + #echo Entering f_lifo() + + MAX_ARRAY=1023 # Max stack array depth. You can use 4095 here but older linuxes and hp-ux shell may not like it + + i=$MAX_ARRAY + + IFS=^ + while read input ; do + array[i]=$input + ((i=i-1)) + done + + i=1 + + for output in ${array[@]} ; do + + if test "$1" = "-n" ; then + printf "%4d %s\n" $i $output + else + printf "%s\n" $output + fi + ((i=i+1)) + done + +} + + +TRANSLATION_STRING=' +/----------------- lwp# 2/,$d; +s/(.*//; +s/ [[0-9][a-f]]{16} /./; +s/qerae/AND-EQUAL: /g; +s/qerba/BITMAP INDEXAND : /g; +s/qerbc/BITMAP INDEX COMPACTION: /g; +s/qerbi/BITMAP INDEX CREATION: /g; +s/qerbm/MINUS: /g; +s/qerbo/BITMAP INDEX OR: /g; +s/qerbt/BITMAP CONVERT: /g; +s/qerbu/BITMAP INDEX UNLIMITED-OR: /g; +s/qerbx/BITMAP INDEX ACCESS: /g; +s/qercb/CONNECT BY: /g; +s/qercbi/SUPPORT FOR CONNECT BY: /g; +s/qerco/COUNT: /g; +s/qerdl/DELETE: /g; +s/qerep/EXPLOSION: /g; +s/qerff/FIFO BUFFER: /g; +s/qerfi/FIRST ROW: /g; +s/qerfl/FILTER DEFINITION: /g; +s/qerfu/UPDATE: /g; +s/qerfx/FIXED TABLE: /g; +s/qergi/GRANULE ITERATOR: /g; +s/qergr/GROUP BY ROLLUP: /g; +s/qergs/GROUP BY SORT: /g; +s/qerhc/HASH CLUSTERS: /g; +s/qerhj/HASH JOIN: /g; +s/qeril/IN-LIST: /g; +s/qerim/INDEX MAINTENANCE: /g; +s/qerix/INDEX: /g; +s/qerjot/NESTED LOOP JOIN: /g; +s/qerjo/NESTED LOOP OUTER: /g; +s/qerle/LINEAR EXECUTION IMPLEMENTATION: /g; +s/qerli/PARALLEL CREATE INDEX: /g; +s/qerlt/LOAD TABLE: /g; +s/qerns/GROUP BY NO SORT: /g; +s/qeroc/OBJECT COLLECTION ITERATOR: /g; +s/qeroi/EXTENSIBLE INDEXING QUERY COMPONENT: /g; +s/qerpa/PARTITION: /g; +s/qerpf/QUERY EXECUTION PREFETCH: /g; +s/qerpx/PARALLELIZER: /g; +s/qerrm/REMOTE: /g; +s/qerse/SET IMPLEMENTATION: /g; +s/qerso/SORT: /g; +s/qersq/SEQUENCE NUMBER: /g; +s/qerst/QUERY EXECUTION STATISTICS: /g; +s/qertb/TABLE ACCESS: /g; +s/qertq/TABLE QUEUE: /g; +s/qerua/UNION-ALL: /g; +s/qerup/UPDATE: /g; +s/qerus/UPSERT: /g; +s/qervw/VIEW: /g; +s/qerwn/WINDOW: /g; +s/qerxt/EXTERNAL TABLE FETCH : /g; +s/opifch2/SELECT FETCH: /g +s/qergh/HASH GROUP BY: /g +' + +# main() + +case `uname -s` in + Linux) + FUNCPOS=4 + ;; + SunOS) + FUNCPOS=2 + ;; + *) + FUNCPOS=2 + ;; +esac + +if [ "$1X" == "-aX" ] ; then + FILTER="^\$|oracle|----------" + INDENT=" " + shift +else + FILTER="^\$|\?\?|oracle|----------" + TRANSLATION_STRING="/opifch /,\$d;/opiefn0/,\$d;/opiodr/,\$d;/opiexe/,\$d; $TRANSLATION_STRING" + INDENT=" " +fi + +if [ "$1X" == "-kX" ] ; then + FUNCPOS=2 # this is for linux kernel stack samples from /proc/PID/stack + TRANSLATION_STRING="s/+.*//g; $TRANSLATION_STRING" + shift +fi + +if [ $# -eq 0 ] ; then + + sed -e "$TRANSLATION_STRING" \ + | egrep -v "$FILTER" \ + | sed 's/^ *//g;s/__PGOSF[0-9]*_//' \ + | awk -F" " "{ for (f=$FUNCPOS; f <= NF; f++) { printf \"%s \", \$f }; printf \"\n\" }" \ + | f_lifo \ + | awk " + BEGIN{ option=\" \" } /rwsfcd/{ option=\"* \" } !/rwsfcd/{ pref=(pref \"$INDENT\") ; + print pref option \$0 ; option=\" \" } + " +else + + for i in $* ; do + sed -e "$TRANSLATION_STRING" < $i \ + | egrep -v "$FILTER" \ + | sed 's/^ *//g;s/__PGOSF[0-9]*_//' \ + | awk -F" " "{ for (f=$FUNCPOS; f <= NF; f++) { printf \"%s \", \$f }; printf \"\n\" }" \ + | f_lifo \ + | awk " + BEGIN{ option=\" \" } /rwsfcd/{ option=\"* \" } !/rwsfcd/{ pref=(pref \"$INDENT\") ; + print pref option \$0 ; option=\" \" } + " + done + +fi + +# that's all! + diff --git a/tpt/tools/unix/procio.sh b/tpt/tools/unix/procio.sh new file mode 100644 index 0000000..68fc2d6 --- /dev/null +++ b/tpt/tools/unix/procio.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Tiny Linux /proc//io demo script by Tanel Poder +# http://www.tanelpoder.com + +PID=$1 +TMPFILE1=/tmp/procio.${PID}.tmp1 +TMPFILE2=/tmp/procio.${PID}.tmp2 +SLEEP=5 + +trap 'rm -f $TMPFILE1 $TMPFILE2 ; exit 0' 0 + +echo Sampling process $PID IO every $SLEEP seconds... + +cat /proc/$PID/io > $TMPFILE2 + +while true ; do + mv $TMPFILE2 $TMPFILE1 + sleep $SLEEP + cat /proc/$PID/io > $TMPFILE2 + paste $TMPFILE1 $TMPFILE2 | awk '{ printf "%30s %d\n", $1, $4-$2 }' + echo +done + diff --git a/tpt/tools/unix/procmm.py b/tpt/tools/unix/procmm.py new file mode 100644 index 0000000..b2dff95 --- /dev/null +++ b/tpt/tools/unix/procmm.py @@ -0,0 +1,170 @@ +#!/bin/env python + +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +# perms +# r = read +# w = write +# x = execute +# s = shared +# p = private (copy on write) + +import sys, os, pwd, re, json + +re_mapheader = re.compile('[0-9a-f]+-[0-9a-f]+', re.IGNORECASE) + +def readFileLines(name): + with file(name) as f: + s = f.readlines() + return s + +def readFile(name): + x=readFileLines(name) + if x: + return x[0] + else: + return None + +def getProcRec(pid): + try: + mr={} + mr['pid'] = pid + mr['comm'] = readFile('/proc/' + pid + '/comm') + mr['cmdline'] = readFile('/proc/' + pid + '/cmdline') + mr['username'] = pwd.getpwuid(os.stat('/proc/' + pid).st_uid).pw_name + + except IOError as e: + print "Process gone" + except Exception as e: + print "error", e + raise + return mr + +def getProcMemData(pid): + memseg={} + memdetail={} + allmemseg={} + allmemdetail={} + + try: + for l in readFileLines('/proc/' + pid + '/smaps'): + if re_mapheader.match(l): + memseg['baddr_hex'] = l.split()[0].split('-')[0] + memseg['eaddr_hex'] = l.split()[0].split('-')[1] + memseg['perms'] = l.split()[1] + memseg['offset'] = l.split()[2] + memseg['dev'] = l.split()[3] + memseg['inode'] = l.split()[4] + if len(l.split()) >= 6: + s = l.split()[5] + if s.startswith('/dev/shm'): + s = '/dev/shm' + #re.sub('', '', s) + #print "s =", s + memseg['name'] = s + else: + memseg['name'] = '[anon]' + memseg['baddr'] = int(memseg['baddr_hex'], 16) + memseg['eaddr'] = int(memseg['eaddr_hex'], 16) + memseg['size'] = memseg['eaddr'] - memseg['baddr'] + + allmemseg[memseg['name']] = memseg + else: + # smaps format example: + # Size: 136 kB + # Rss: 40 kB ... + memdetail[l.split()[0].replace(':','')] = memdetail.get(l.split()[0].replace(':',''), 0) + int(l.split()[1]) + + allmemdetail[memseg['name']] = memdetail + + return allmemseg, allmemdetail + + except IOError as e: + print "Process gone" + except Exception as e: + print "error", e + raise + +def getProcMemDataSum(pidlist): + memsum = {} + for p in pidlist: + procrec = getProcRec(p) + #print "\n============ PID: %d %s" % ( int(procrec['pid']), procrec['cmdline'].replace('\x00','') ) + memseg, memdata = getProcMemData(p) + #print memseg + for ms in memseg: + memsum[ms] = memdata[ms] + #for i in memdata[ms]: + # #print "%-25s %10d kB %s" % ( i, memdata[ms][i], ms ) + # memsum[(ms,i)] = memsum.get((ms,i), 0) + memdata[ms][i] + + return memsum + +def main(argv): + memdatasum = getProcMemDataSum(argv) + #print memdatasum + #print json.dumps(memdatasum, indent=4) + print "%10s %10s %10s %10s %10s %10s %10s %10s %10s %10s %10s %10s %s" % ( + 'VSize' + , 'PTE' + , 'Locked' + , 'MMUPages' + , 'Priv_Clean' + , 'Priv_Dirty' + , 'Pss' + , 'Referenced' + , 'Rss' + , 'Shr_Clean' + , 'Shr_Dirty' + , 'Swap' + , ' Segment_Name' + ) + print "%10s %10s %10s %10s %10s %10s %10s %10s %10s %10s %10s %10s %s" % ( + '----------' + , '----------' + , '----------' + , '----------' + , '----------' + , '----------' + , '----------' + , '----------' + , '----------' + , '----------' + , '----------' + , '----------' + , ' ----------------------------------------------------------------------' + ) + for mseg in memdatasum: + m = memdatasum[mseg] + print "%10d %10d %10d %10d %10d %10d %10d %10d %10d %10d %10d %10d %s" % ( + m.get('Size', 0) + , m.get('KernelPageSize', 0) + , m.get('Locked', 0) + , m.get('MMUPageSize', 0) + , m.get('Private_Clean', 0) + , m.get('Private_Dirty', 0) + , m.get('Pss', 0) + , m.get('Referenced', 0) + , m.get('Rss', 0) + , m.get('Shared_Clean', 0) + , m.get('Shared_Dirty', 0) + , m.get('Swap', 0) + , mseg + ) + + #for a in argv: + # procrec = getProcRec(a) + # print "\n============ PID: %d %s" % ( int(procrec['pid']), procrec['cmdline'].replace('\x00','') ) + # memseg, memdata = getProcMemData(a) + # #for i in sorted(memdata, key=memdata.get, reverse=False): + # for i in sorted(memdata, reverse=False): + # print "%-25s %10d kB" % ( i, memdata[i] ) + + + + + + +if __name__ == "__main__": + main(sys.argv[1:]) + diff --git a/tpt/tools/unix/procmm.sh b/tpt/tools/unix/procmm.sh new file mode 100644 index 0000000..44497fb --- /dev/null +++ b/tpt/tools/unix/procmm.sh @@ -0,0 +1,134 @@ +#!/usr/bin/sh + +################################################################################ +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +# +# Script: procmm.sh (Process Memory Matrix) v1.03 +# +# Purpose: Show process memory usage for different mappings and segment types +# +# Copyright: Copyright (c) 2010 Tanel Poder ( http://tech.e2sn.com ) +# All rights reserved. +# +# ------------------------------------------------------------------------------ +# +# Usage: procmm.sh [-t|-a] +# +# Without any special options procmm.sh will show you a matrix +# of the processes address space segment types and their respective +# memory usages/reservations, separately for every process in the +# pidlist. +# +# -t option will only show total memory usage of all processes +# listed in pidlist. Any ANON memory usage and swap reservation +# for *shared* mappings (mapped binaries, libraries, shared memory +# segments - Oracle SGA) is not shown. +# Note that pmap command is not cheap one, so you probably do not +# want to run it over many processes frequently +# +# -a option will list ANON memory usage and swap reservation also for +# shared mappings. The -t and -a options are mutually exclusive +# as it doesn not make sense to sum together the same shared mapping +# memory usage of multiple processes. +# +# Comments: This script currently only works on Solaris as the pmap command +# on other platforms doesnt currently show all required info. On +# Linux it will be possible to read this info from proc filesystem (TODO) +# +# If you are getting "address space is changing" errors from pmap then try +# again or suspend the process for duration of this script run. +# NB! Suspending processes may be dangerous in some cases (such as when +# it is holding a hot latch) so you better know what you are doing. +# +################################################################################ + +get_matrix() { + p_pid="$1" + #[ "$1" -eq 0 ] && p_pid="all" || p_pid=$1 + #pmap -x $p_pid | tr '[]' ' ' | egrep -v "^ *Address|^---------|total Kb|^[0-9]*:" | nawk '' + join -j 1 /tmp/procmm-x.$$ /tmp/procmm-s.$$ > /tmp/blah + join -j 1 /tmp/procmm-x.$$ /tmp/procmm-s.$$ | sed 's/ism shmid/ism_shmid/g' | tr '[]' ' ' | egrep -v "^ *Address|^---------|total Kb|^[0-9]*:" | nawk ' + { + item=$7 + #print "before", s + sub(/.*\.so.*/, "lib", item) + #print "after", s + #item = gensub(/.*\.so.*/, "lib", "g", $7) + #item = gensub(/lib.+|ld\..+/, "lib", "g", $7) + #print $7 " = " item + vmem[item] += $2 + rss[item] += $3 + anon[item] += $4 + locked[item] += $5 + swap[item] += $9 + #print $0 + } + END { + printf "%6-s %20s %12s %12s %12s %12s %12s\n", "PID", "SEGMENT_TYPE", "VIRTUAL", "RSS", "ANON", "LOCKED", "SWAP_RSVD" + printf "------ -------------------- ------------ ------------ ------------ ------------ ------------\n" + for (x in vmem) { + printf "%6-d %20s %12d %12d %12d %12d %12d\n", '$p_pid', x, vmem[x], rss[x], anon[x], locked[x], swap[x] + + total_vmem += vmem[x] + total_rss += rss[x] + total_anon += anon[x] + total_locked += locked[x] + total_swap += swap[x] + } + + printf "------ -------------------- ------------ ------------ ------------ ------------ ------------\n" + printf "%6-d %20s %12d %12d %12d %12d %12d\n\n", '$p_pid', "TOTAL(kB)", total_vmem, total_rss, total_anon, total_locked, total_swap + + } + ' +} + +echo "\n-- procmm.sh: Process Memory Matrix v1.03 by Tanel Poder ( http://tech.e2sn.com )" + +if [ $# -lt 1 ] ; then + echo "\nUsage:\n" + echo " $0 [-a|-t] \n" + echo " Option -a would report swap reservations and anonymous memory" + echo " for shared mappings (like Oracle SGA) too\n" + exit 1 +fi + +# defaults +pmap_option="" +compute_total=0 + +case "$1" in + "-a") pmap_option="a" ; shift ;; + "-t") compute_total=1 ; shift ;; +esac + +echo "-- All numbers are shown in kilobytes\n" + +pidlist="$*" +#echo $pidlist + +if [ $compute_total -eq 0 ]; then + for pid in $pidlist; do + # ps -opid,vsz,rss,args -p $pid | nawk '/ *[0-9]+/{ printf "-- ps info: PID=%d VSZ=%d RSS=%d ARGS=%s\n\n", $1,$2,$3,$4 }' + rm -f /tmp/procmm-x.$$ /tmp/procmm-s.$$ + pmap -x$pmap_option $pid | sed 's/ism shmid/ism_shmid/g' | tr '[]' ' ' | egrep -v "^ *Address|^---------|total Kb|^[0-9]+:" > /tmp/procmm-x.$$ + pmap -S$pmap_option $pid | sed 's/ism shmid/ism_shmid/g' | tr '[]' ' ' | egrep -v "^ *Address|^---------|total Kb|^[0-9]+:" > /tmp/procmm-s.$$ + get_matrix $pid + rm -f /tmp/procmm-x.$$ /tmp/procmm-s.$$ + done +else + rm -f /tmp/procmm-x.$$ /tmp/procmm-s.$$ + printf "Total PIDs %d, working: " $# + for pid in $pidlist; do + # ps -opid,vsz,rss,args -p $pid | nawk '/ *[0-9]+/{ printf "-- ps info: PID=%d VSZ=%d RSS=%d ARGS=%s\n\n", $1,$2,$3,$4 }' + pmap -x$pmap_option $pid | sed 's/ism shmid/ism_shmid/g' | tr '[]' ' ' | egrep -v "^ *Address|^---------|total Kb|^[0-9]*:" >> /tmp/procmm-x.$$ + pmap -S$pmap_option $pid | sed 's/ism shmid/ism_shmid/g' | tr '[]' ' ' | egrep -v "^ *Address|^---------|total Kb|^[0-9]*:" >> /tmp/procmm-s.$$ + printf "." + done + printf "\n\n" + get_matrix 0 + echo "-- Note that in Total (-t) calculation mode it makes sense to look into ANON and SWAP_RSVD" + echo "-- totals only as other numbers may be heavily \"doublecounted\" due to overlaps of shared mappings\n" + rm -f /tmp/procmm-x.$$ /tmp/procmm-s.$$ + fi diff --git a/tpt/tools/unix/runqlat.sh b/tpt/tools/unix/runqlat.sh new file mode 100644 index 0000000..4393029 --- /dev/null +++ b/tpt/tools/unix/runqlat.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Tiny Linux /proc//schedstat demo script by Tanel Poder +# https://tanelpoder.com +# +# You may want to run this with high priority: +# sudo nice -n -10 ./runqlat.sh PID +# +# currently this script assumes that it will speep exactly for $SLEEP +# seconds, but it can itself be affected by CPU overload and you may +# see values that don't add up to 1000 ms per sec +# (or negative percentages in the derived BLKD% column) + +PID=$1 +SLEEP=1 + +echo Sampling /proc/$PID/schedstat every $SLEEP seconds... + +printf "%6s %6s %6s\n" "CPU%" "RUNQ%" "SLP%" +while true ; do + read -r CPU_NS_1 LAT_NS_1 SLICES_ON_THIS_CPU_1 < /proc/$PID/schedstat + sleep $SLEEP + read -r CPU_NS_2 LAT_NS_2 SLICES_ON_THIS_CPU_2 < /proc/$PID/schedstat + + ON_CPU=$((($CPU_NS_2-$CPU_NS_1)/10000000)) + ON_RUNQ=$((($LAT_NS_2-$LAT_NS_1)/10000000)) + OTHER=$((100-($ON_CPU+ON_RUNQ))) + + printf "%6d %6d %6d" $ON_CPU $ON_RUNQ $OTHER + echo +done + diff --git a/tpt/tools/unix/ssexplorer.sh b/tpt/tools/unix/ssexplorer.sh new file mode 100644 index 0000000..1a21be7 --- /dev/null +++ b/tpt/tools/unix/ssexplorer.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +# System State Dump "explorer" +# It just adds links to parent State Object location in the file for easier navigation + +# Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +# Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +TRACEFILE=$1 +OUTPUTFILE=$1.html + +sed -e ' +s//\>/g +s/SO: \(0x[A-Fa-f0-9]*\)/SO: \1<\/mark><\/a>/ +s/LIBRARY HANDLE:\(0x[A-Fa-f0-9]*\)/LIBRARY HANDLE:\1<\/a>/ +s/owner: \(0x[A-Fa-f0-9]*\)/owner: \1<\/a>/ +s/handle=\(0x[A-Fa-f0-9]*\)/handle=\1<\/a>/ +' $TRACEFILE | awk ' + BEGIN { print "System State Dump Explorer by Tanel Poder
    " }
    +   { print $0 }
    +   END { print "
    " } +' > $OUTPUTFILE + +echo Done writing into $OUTPUTFILE +echo +ls -l $OUTPUTFILE + + +#awk ' +# +# BEGIN { print "System State Dump Explorer by Tanel Poder
    " }
    +#    
    +#    /0x[A-Fa-f0-9]/ { gsub( /(0x[A-Fa-f0-9]*)/, "&", $0 ) }
    +#     
    +##    /SO: 0x[A-Za-z0-9]/ {
    +##        match($0, /(0x[A-Fa-f0-9]*),/ , arr)
    +##        printf ("%s\n", arr[1], gsub( /(0x[A-Fa-f0-9]*)/, "&", $0 ) )
    +##        
    +##    }
    +##    !/SO: 0x[A-Fa-f0-9]/ { gsub(/(0x[A-Fa-f0-9]*)/, "&", $0) ; printf("%s\n", $0)  }
    +#    
    +#    
    +#    END { print "
    " } +# +# +#' | awk '/SO: / { sub( / &atleast +ORDER BY COUNT(*) DESC +/ + +PROMPT ============================================================================================== +PROMPT == SQLs with many child cursors under a parent (use nonshared*.sql to find the reasons) == +PROMPT ============================================================================================== + +SELECT + COUNT(*) total_children + , COUNT(DISTINCT sql_id) distinct_sqlids + , COUNT(DISTINCT plan_hash_value) distinct_plans + , sql_id + , MIN(plan_hash_value) + , MAX(plan_hash_value) + , MIN(first_load_time) + , MAX(last_load_time) +FROM v$sql +GROUP BY sql_id +HAVING COUNT(*) > &atleast +ORDER BY COUNT(*) DESC +/ + diff --git a/tpt/topcurmem.sql b/tpt/topcurmem.sql new file mode 100644 index 0000000..5db2bd0 --- /dev/null +++ b/tpt/topcurmem.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM ( + SELECT + sharable_mem, sql_id, hash_value, SUBSTR(sql_text,1,100) sql_text_partial + FROM + v$sql + ORDER BY + sharable_mem DESC +) +WHERE rownum <= 20 +/ + diff --git a/tpt/topmsh.sql b/tpt/topmsh.sql new file mode 100644 index 0000000..406239b --- /dev/null +++ b/tpt/topmsh.sql @@ -0,0 +1,91 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col msh_obj_name head OBJECT_NAME for a60 word_wrap +col msh_obj_owner head OBJECT_OWNER for a20 wrap +col msh_mutex_type head MUTEX_TYPE for a15 truncate +col msh_location head GET_LOCATION for a20 truncate + +with s1 as ( + select /*+ ORDERED USE_NL(o) */ + count(*) + , sum(sleeps) sleeps + , sum(gets) gets + , mutex_type + , location + -- , p1raw, p2, p3, p4, p5 + , kglnaown + , kglnaobj + from + v$mutex_sleep_history m + , x$kglob o + where + m.mutex_identifier = o.kglnahsh (+) + group by + mutex_type + , location + -- , p1raw, p2, p3, p4, p5 + , kglnaown + , kglnaobj + ) + , sleep as (select /*+ NO_MERGE MATERIALIZE */ tptsleep(&1) x from dual) + , s2 as ( + select /*+ ORDERED USE_NL(o) */ + count(*) cnt + , sum(sleeps) sleeps + , sum(gets) gets + , mutex_type + , location + -- , p1raw, p2, p3, p4, p5 + , kglnaown + , kglnaobj + from + v$mutex_sleep_history m + , x$kglob o + where + m.mutex_identifier = o.kglnahsh (+) + group by + mutex_type + , location + -- , p1raw, p2, p3, p4, p5 + , kglnaown + , kglnaobj +) +select * from ( + select + cnt + , sleeps + , gets + , + from ( + select /*+ ORDERED */ + s2.sql_id, + s2.plan_hash_value, + s2.sql_text topsql_sql_text, + s2.cpu_time - s1.cpu_time cpu_time, + s2.elapsed_time - s1.elapsed_time elapsed_time, + s2.executions - s1.executions executions, + (s2.cpu_time - s1.cpu_time) / greatest(s2.executions - s1.executions,1) cpu_per_exec, + s2.fetches - s1.fetches fetches, + s2.parse_calls - s1.parse_calls parse_calls, + s2.disk_reads - s1.disk_reads disk_reads, + s2.buffer_gets - s1.buffer_gets buffer_gets, + s2.rows_processed - s1.rows_processed rows_processed + from + s1, + sleep, + s2 + where + s2.sql_id = s1.sql_id (+) + and s2.plan_hash_value = s1.plan_hash_value (+) + and sleep.x = 1 + and s2.sql_id not in (select sql_id from v$session where sid = userenv('SID')) + ) sq + where + &topsql_filter_clause > 0 + order by + &topsql_order_clause DESC +) +where rownum <= 10 +/ + diff --git a/tpt/topseg.sql b/tpt/topseg.sql new file mode 100644 index 0000000..cb24052 --- /dev/null +++ b/tpt/topseg.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show top space users per tablespace - collapse partitions to table/index level + +col topseg_segment_name head SEGMENT_NAME for a30 +col topseg_seg_owner HEAD OWNER FOR A30 + +select * from ( + select + round(SUM(bytes/1048576)) MB, + tablespace_name, + owner topseg_seg_owner, + segment_name topseg_segment_name, + --partition_name, + segment_type, + case when count(*) > 1 then count(*) else null end partitions + from dba_segments + where upper(tablespace_name) like upper('%&1%') + group by + tablespace_name, + owner, + segment_name, + segment_type + order by MB desc nulls last +) +where rownum <= 30; + diff --git a/tpt/topseg2.sql b/tpt/topseg2.sql new file mode 100644 index 0000000..052fb48 --- /dev/null +++ b/tpt/topseg2.sql @@ -0,0 +1,25 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show top space users per tablespace - collapse partitions to table/index level + +col topseg_seg_owner HEAD OWNER FOR A30 +col topseg_segment_name head SEGMENT_NAME for a30 +col topseg_segment_type head SEGMENT_TYPE for a30 + +select * from ( + select + tablespace_name, + owner, + segment_name topseg_segment_name, + --partition_name, + REPLACE(segment_type, ' PARTITION', ' - PARTITIONED') topseg_segment_type, + count(*), + round(sum(bytes)/1048576) MB + from dba_segments + where upper(tablespace_name) like upper('%&1%') + group by tablespace_name, owner, segment_name, segment_type + order by MB desc +) +where rownum <= 30; + diff --git a/tpt/topsegstat.sql b/tpt/topsegstat.sql new file mode 100644 index 0000000..72cc667 --- /dev/null +++ b/tpt/topsegstat.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col segstat_statistic_name head STATISTIC_NAME for a35 +col segstat_owner FOR A25 +col segstat_object_name FOR A30 + +SELECT * FROM ( + SELECT + owner segstat_owner, + object_name segstat_object_name, + statistic_name segstat_statistic_name, + value + FROM + v$segment_statistics + WHERE + lower(statistic_name) LIKE lower('%&1%') + order by value desc +) +WHERE rownum <= 40 +/ diff --git a/tpt/topsql.sql b/tpt/topsql.sql new file mode 100644 index 0000000..143574b --- /dev/null +++ b/tpt/topsql.sql @@ -0,0 +1,113 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: topsql.sql +-- Purpose: Show TOP SQL ordered by user-provided criteria +-- Ordering columns are: +-- CPU_TIME +-- ELAPSED_TIME +-- EXECUTIONS +-- FETCHES +-- PARSE_CALLS +-- DISK_READS +-- BUFFER_GETS +-- ROWS_PROCESSED +-- CPU_PER_EXEC +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @topsql +-- +-- @topsql cpu_time 6 +-- @topsql executions 6 +-- @topsql cpu_per_exec 30 +-- @topsql cpu_time,executions,buffer_gets 6 +-- @topsql buffer_gets/decode(executions,0,1,executions) 6 +-- +-- Other: You need to download and install the TPT package from +-- http://www.tanelpoder.com/files/scripts/setup/tptcreate.sql +-- before using the topsql script +-- +-- Use 6 seconds or more for interval as some v$sqlstats statistics +-- for long running statements are updated roughly every 5 seconds +-- +-------------------------------------------------------------------------------- + +prompt +prompt -- TopSQL v1.0 by Tanel Poder ( http://www.tanelpoder.com ) +prompt +prompt Taking a &2 second snapshot from V$SQLSTATS and ordering by &1... + +col topsql_sql_text head SQL_TEXT for a50 word_wrap + +col topsql_filter_clause noprint new_value topsql_filter_clause +col topsql_order_clause noprint new_value topsql_order_clause + +set termout off +with sq as ( + select regexp_replace( + regexp_replace( + regexp_replace('&1', '(\(.*?)(,)(.*?\))', '\1^\3') + , '(\(.*?)(,)(.*?\))', '\1^\3' + ), '(\(.*?)(,)(.*?\))', '\1^\3' + ) param + from dual +) +select + replace(replace(param, ',', ' > 0 OR '),'^',',') topsql_filter_clause + , replace(replace(param, ',', ' DESC, '),'^',',') topsql_order_clause +from + sq +/ +set termout on + +with s1 as (select /*+ NO_MERGE MATERIALIZE */ sql_id, plan_hash_value, cpu_time, elapsed_time, executions, fetches, parse_calls, disk_reads, buffer_gets, rows_processed, sql_text from v$sqlstats ) + , sleep as (select /*+ NO_MERGE MATERIALIZE */ tpt.sleep(&2) x from dual) + , s2 as (select /*+ NO_MERGE MATERIALIZE */ sql_id, plan_hash_value, cpu_time, elapsed_time, executions, fetches, parse_calls, disk_reads, buffer_gets, rows_processed, sql_text from v$sqlstats ) +select * from ( + select + &1 + , sql_id + , plan_hash_value + , topsql_sql_text + from ( + select /*+ ORDERED */ + s2.sql_id, + s2.plan_hash_value, + s2.sql_text topsql_sql_text, + s2.cpu_time - s1.cpu_time cpu_time, + s2.elapsed_time - s1.elapsed_time elapsed_time, + s2.executions - s1.executions executions, + (s2.cpu_time - s1.cpu_time) / greatest(s2.executions - s1.executions,1) cpu_per_exec, + s2.fetches - s1.fetches fetches, + s2.parse_calls - s1.parse_calls parse_calls, + s2.disk_reads - s1.disk_reads disk_reads, + s2.buffer_gets - s1.buffer_gets buffer_gets, + s2.rows_processed - s1.rows_processed rows_processed + from + s1, + sleep, + s2 + where + s2.sql_id = s1.sql_id (+) + and s2.plan_hash_value = s1.plan_hash_value (+) + and sleep.x = 1 + and s2.sql_id not in (select sql_id from v$session where sid = userenv('SID')) + ) sq + where + &topsql_filter_clause > 0 + order by + &topsql_order_clause DESC +) +where rownum <= 10 +/ + +col topsql_filter_clause clear +col topsql_order_clause clear + +undef topsql_filter_clause +undef topsql_order_clause + diff --git a/tpt/tpt.sql b/tpt/tpt.sql new file mode 100644 index 0000000..1a571fa --- /dev/null +++ b/tpt/tpt.sql @@ -0,0 +1,90 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set define off + +def _cmds_0="" +def _cmds_1="s &sid" +def _cmds_2="snapper all 5 1 &sid" +def _cmds_3="waitprof print &sid e123 100000" +def _cmds_4="latchprof sid,name &sid % 100000" +def _cmds_5="latchprofx sid,name,hmode,func &sid % 100000" +def _cmds_6="mutexprof id,loc,req,blk 1=1" +def _cmds_7="bufprof &sid 1000" +def _cmds_8="sample indx,ksllalaq x$ksupr ksllalaq!=hextoraw(''00'') 10000" +def _cmds_9="ostackprof &sid 0 100" + +set define on + +prompt ========================================================= +prompt = = +prompt = Tanel Poder's Troubleshooting scripts = +prompt = (c) 2004-2018 http://www.tanelpoder.com = +prompt = = +prompt =================== TPT Script usage ==================== +prompt +prompt 0) Exit menu +prompt +prompt 1) @&_cmds_1 +prompt +prompt 2) @&_cmds_2 +prompt +prompt 3) @&_cmds_3 +prompt +prompt 4) @&_cmds_4 +prompt +prompt 5) @&_cmds_5 +prompt +prompt 6) @&_cmds_6 +prompt +prompt 7) @&_cmds_7 +prompt +prompt 8) @&_cmds_8 +prompt +prompt 9) @&_cmds_9 +prompt +prompt +prompt + +accept _input char default 0 prompt "Enter command number [0]: " +prompt + + +def _cmds_0="" +def _cmds_1="s &&sid" +def _cmds_2="snapper out 6 1 &sid" +def _cmds_3="waitprof print &sid e123 100000" +def _cmds_4="latchprof sid,name &sid % 100000" +def _cmds_5="latchprofx sid,name,hmode,func &sid % 100000" +def _cmds_6="mutexprof id,loc,req,blk 1=1" +def _cmds_7="bufprof" +def _cmds_8="sample indx,ksllalaq x$ksupr ksllalaq!=hextoraw(''00'') 10000" +def _cmds_9="ostackprof &sid 0 100" + +col tpt_cmd new_value _tpt_cmd + +set termout off +select + case '&_input' + when '1' then '&_cmds_1' + when '2' then '&_cmds_2' + when '3' then '&_cmds_3' + when '4' then '&_cmds_4' + when '5' then '&_cmds_5' + when '6' then '&_cmds_6' + when '7' then '&_cmds_7' + when '8' then '&_cmds_8' + when '9' then '&_cmds_9' + else + '' + end tpt_cmd +from + dual +/ +set termout on + +--def _tpt_cmd + +prompt SQL> @&_tpt_cmd +@&_tpt_cmd + diff --git a/tpt/tq.sql b/tpt/tq.sql new file mode 100644 index 0000000..daaf276 --- /dev/null +++ b/tpt/tq.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show PX Table Queue statistics from last Parallel Execution in this session... + +col tq_tq head "TQ_ID|(DFO,SET)" for a10 +col tq_flow_dir head "TQ_FLOW|DIRECTION" for a9 +col tq_process head PROCESS for a10 +break on tq_tq on dfo_number on tq_id + +select + ':TQ'||trim(to_char(t.dfo_number))||','||trim(to_char(t.tq_id,'0999')) tq_tq + , DECODE(replace(SERVER_TYPE,chr(0),''),'Producer', 'Produced', 'Consumer', 'Consumed', SERVER_TYPE) tq_flow_dir + , NUM_ROWS + , BYTES +-- , OPEN_TIME +-- , AVG_LATENCY + , WAITS + , TIMEOUTS + , PROCESS tq_process + , INSTANCE + , DFO_NUMBER + , TQ_ID +from + v$pq_tqstat t +order by + dfo_number, tq_id,server_type desc +/ + diff --git a/tpt/trace.sql b/tpt/trace.sql new file mode 100644 index 0000000..9bc71aa --- /dev/null +++ b/tpt/trace.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + 'exec dbms_monitor.session_trace_enable('||sid||','||serial#||',waits=>true,binds=>true);' command_to_run +from + v$session +where + &1 +/ diff --git a/tpt/traceme.sql b/tpt/traceme.sql new file mode 100644 index 0000000..99699f3 --- /dev/null +++ b/tpt/traceme.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +exec dbms_monitor.session_trace_enable(binds=>true,waits=>true); + diff --git a/tpt/traceoff.sql b/tpt/traceoff.sql new file mode 100644 index 0000000..94056da --- /dev/null +++ b/tpt/traceoff.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + 'exec dbms_monitor.session_trace_disable('||sid||','||serial#||');' command_to_run +from + v$session +where + &1 +/ + diff --git a/tpt/tracesid.sql b/tpt/tracesid.sql new file mode 100644 index 0000000..f108729 --- /dev/null +++ b/tpt/tracesid.sql @@ -0,0 +1,17 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +declare + l_sid number; + l_serial number; +begin + + select sid, serial# + into l_sid, l_serial + from v$session + where sid = &1; + + sys.dbms_monitor.session_trace_enable(l_sid,l_serial,true,true); + +end; +/ diff --git a/tpt/tracesidoff.sql b/tpt/tracesidoff.sql new file mode 100644 index 0000000..c600137 --- /dev/null +++ b/tpt/tracesidoff.sql @@ -0,0 +1,17 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +declare + l_sid number; + l_serial number; +begin + + select sid, serial# + into l_sid, l_serial + from v$session + where sid = &1; + + sys.dbms_monitor.session_trace_disable(l_sid,l_serial); + +end; +/ diff --git a/tpt/trans.sql b/tpt/trans.sql new file mode 100644 index 0000000..acac87f --- /dev/null +++ b/tpt/trans.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col 0xFLAG just right +col trans_username HEAD USERNAME FOR A25 + +select + s.sid + , s.serial# + , s.username trans_username + , t.addr taddr + , s.saddr ses_addr + , t.used_ublk + , t.used_urec +-- , t.start_time + , to_char(t.flag, 'XXXXXXXX') "0xFLAG" + , t.status||CASE WHEN BITAND(t.flag,128) = 128 THEN ' ROLLING BACK' END status + , t.start_date + , XIDUSN + , XIDSLOT + , XIDSQN + , t.xid + , t.prv_xid + , t.ptx_xid +from + v$session s + , v$transaction t +where + s.saddr = t.ses_addr +/ + + diff --git a/tpt/trci.sql b/tpt/trci.sql new file mode 100644 index 0000000..35d64eb --- /dev/null +++ b/tpt/trci.sql @@ -0,0 +1,13 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +column trci_cmd new_value trci_cmd +select decode(lower('&1'),'off','''''','&1') trci_cmd from dual; +column trci_cmd clear + +set termout on + +alter session set tracefile_identifier = &trci_cmd; + diff --git a/tpt/trig.sql b/tpt/trig.sql new file mode 100644 index 0000000..76418f4 --- /dev/null +++ b/tpt/trig.sql @@ -0,0 +1,52 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show triggers by table/trigger name &1.... +col trig_triggering_event for a30 +col trigger_body for a80 word_wrap + +COL table_owner FOR A20 +COL table_name FOR A30 +COL trigger_owner FOR A20 +COL trigger_name FOR A30 + +select table_owner, table_name, owner trigger_owner, trigger_name, trigger_type, triggering_event trig_triggering_event, trigger_body +from dba_triggers +where ( + UPPER(table_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND UPPER(table_owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +) +OR ( + UPPER(trigger_name) LIKE + UPPER(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) +AND UPPER(owner) LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END +) +order by + table_owner, + table_name, + trigger_name +/ + diff --git a/tpt/trigger.sql b/tpt/trigger.sql new file mode 100644 index 0000000..0c0c56d --- /dev/null +++ b/tpt/trigger.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +create or replace trigger test +after servererror on oracle.schema +begin + dbms_output.put_line('Error: '|| sysdate); +end; +/ + + + + +declare + cursor getDepartments is + select xtab.name NAME, ref(d) XMLREF + from DEPARTMENT_XQL d, xmltable( + 'for $i in . return $i/Department/Name' PASSING d.object_value + COLUMNS name VARCHAR2(30) PATH '/Name') xtab; + res boolean; + targetFolder varchar2(1024) := '/home//OE/XQDepartments'; +begin + if dbms_xdb.existsResource(targetFolder) then + dbms_xdb.deleteResource(targetFolder,dbms_xdb.DELETE_RECURSIVE); + end if; + res := dbms_xdb.createFolder(targetFolder); + for dept in getDepartments loop + res := DBMS_XDB.createResource(targetFolder || '/' || dept.NAME || '.xml', dept.XMLREF); + end loop; +end; +/ + diff --git a/tpt/trim_database.sql b/tpt/trim_database.sql new file mode 100644 index 0000000..cb27ff3 --- /dev/null +++ b/tpt/trim_database.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- script : trim_database.sql +-- purpose : print alter database commands for trimming database files +-- author : tanel poder 2006 +-- issues : doesnt resize tablespaces with no extents in them at all + +with query as ( + select /*+ NO_MERGE MATERIALIZE */ + file_id, + tablespace_name, + max(block_id + blocks) highblock + from + dba_extents + group by + file_id, tablespace_name +) +select + 'alter database datafile '|| q.file_id || ' resize ' || ceil ((q.highblock * t.block_size + t.block_size)/1024) || 'K;' cmd +from + query q, + dba_tablespaces t +where + q.tablespace_name = t.tablespace_name; + + + diff --git a/tpt/troff.sql b/tpt/troff.sql new file mode 100644 index 0000000..ce61adf --- /dev/null +++ b/tpt/troff.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Setting linesize truncate off +set truncate off + diff --git a/tpt/tron.sql b/tpt/tron.sql new file mode 100644 index 0000000..c46594c --- /dev/null +++ b/tpt/tron.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Setting linesize truncate on +set truncate on diff --git a/tpt/ts.sql b/tpt/ts.sql new file mode 100644 index 0000000..48918ec --- /dev/null +++ b/tpt/ts.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + c.ts# + , t.tablespace_name + , t.block_size blksz + , status + , t.bigfile + , contents + , logging + , force_logging forcelog + , extent_management + , allocation_type + , segment_space_management ASSM + , min_extlen EXTSZ + , compress_for + , predicate_evaluation +from + v$tablespace c, + dba_tablespaces t +where c.name = t.tablespace_name +and upper(tablespace_name) like upper('%&1%'); + + + + diff --git a/tpt/tsv.sql b/tpt/tsv.sql new file mode 100644 index 0000000..0e0c34c --- /dev/null +++ b/tpt/tsv.sql @@ -0,0 +1,18 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@saveset +-- set underline off if dont want dashes to appear between column headers and data +-- ----- this here is a TAB char ----+ +-- | +-- v +set termout off feedback off colsep " " lines 32767 trimspool on trimout on tab off newpage none underline off +spool &_TPT_TEMPDIR/output_&_i_inst..tab +/ +spool off + +@@loadset + +host &_start &_TPT_TEMPDIR/output_&_i_inst..tab + diff --git a/tpt/typ.sql b/tpt/typ.sql new file mode 100644 index 0000000..aef8b6b --- /dev/null +++ b/tpt/typ.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@typ2 "%&1%" diff --git a/tpt/typ2.sql b/tpt/typ2.sql new file mode 100644 index 0000000..f08fd56 --- /dev/null +++ b/tpt/typ2.sql @@ -0,0 +1,7 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select owner, type_name, typecode, attributes, methods +from dba_types +where lower(type_name) like lower('&1') +/ diff --git a/tpt/u.sql b/tpt/u.sql new file mode 100644 index 0000000..8fb29c5 --- /dev/null +++ b/tpt/u.sql @@ -0,0 +1,38 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_spid head SPID for a12 wrap +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 truncate +col u_machine head MACHINE for a18 truncate +col u_program head PROGRAM for a20 truncate +col u_module head MODULE for a20 truncate + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, +-- s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, +-- s.machine u_machine, +-- s.program u_program, + substr(s.program,instr(s.program,'(')) u_program, + module u_module, + action, +-- p.pid, + p.spid u_spid, + -- s.sql_address, + s.sql_id, + s.sql_hash_value, + s.last_call_et lastcall, + s.status, + s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +--and s.type!='BACKGROUND' +--and s.status='ACTIVE' +/ + diff --git a/tpt/u_exit.sql b/tpt/u_exit.sql new file mode 100644 index 0000000..2bf2119 --- /dev/null +++ b/tpt/u_exit.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username for a20 +col u_sid for a12 +col u_osuser for a12 +col u_machine for a18 +col u_program for a20 + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.osuser u_osuser, substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,1,20) u_program, + p.spid, s.sql_address, s.sql_hash_value, s.last_call_et lastcall, s.status +from + v$session s, + v$process p +where + s.paddr=p.addr +and s.type!='BACKGROUND' +and s.username is not null +--and s.status='ACTIVE' +/ + +exit diff --git a/tpt/ua.sql b/tpt/ua.sql new file mode 100644 index 0000000..937ee7f --- /dev/null +++ b/tpt/ua.sql @@ -0,0 +1,30 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a20 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 truncate +col u_machine head MACHINE for a18 truncate +col u_program head PROGRAM for a20 truncate + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,1,20) u_program, + p.spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +and s.type!='BACKGROUND' +and s.status='ACTIVE' +/ + diff --git a/tpt/uall.sql b/tpt/uall.sql new file mode 100644 index 0000000..91b5a12 --- /dev/null +++ b/tpt/uall.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 +col u_machine head MACHINE for a18 +col u_program head PROGRAM for a20 + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,instr(s.program,'(')) u_program, + p.spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +/ + diff --git a/tpt/ub.sql b/tpt/ub.sql new file mode 100644 index 0000000..d4152a8 --- /dev/null +++ b/tpt/ub.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 +col u_machine head MACHINE for a18 TRUNCATE +col u_program head PROGRAM for a20 + +prompt Show background sessions belonging to background processes... + +select +-- s.username u_username, + '''' || s.sid || ',' || s.serial# || '''' u_sid, +-- s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,instr(s.program,'('),20) u_program, + p.pid, + p.spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +and s.type='BACKGROUND' +--and s.status='ACTIVE' +/ + diff --git a/tpt/ucpid.sql b/tpt/ucpid.sql new file mode 100644 index 0000000..501b128 --- /dev/null +++ b/tpt/ucpid.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 +col u_machine head MACHINE for a18 +col u_program head PROGRAM for a20 + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,1,20) u_program, + p.spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +and s.process like ('&1') +--and s.type!='BACKGROUND' +--and s.status='ACTIVE' +/ + diff --git a/tpt/uds.sql b/tpt/uds.sql new file mode 100644 index 0000000..23de633 --- /dev/null +++ b/tpt/uds.sql @@ -0,0 +1,35 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show undo statistics from V$UNDOSTAT.... +col uds_mb head MB format 999999.99 +col uds_mb_sec head "MB/s" format 999999.99 +col uds_maxquerylen head "MAX|QRYLEN" format 999999 +col uds_maxqueryid head "MAX|QRY_ID" format a13 +col uds_ssolderrcnt head "ORA-|1555" format 9999 +col uds_nospaceerrcnt head "SPC|ERR" format 99999 +col uds_unxpstealcnt head "UNEXP|STEAL" format 9999999 +col uds_expstealcnt head "EXP|STEAL" format 9999999 + +select * from ( + select + begin_time, + to_char(end_time, 'HH24:MI:SS') end_time, + txncount, + undoblks * (select block_size from dba_tablespaces where upper(tablespace_name) = + (select upper(value) from v$parameter where name = 'undo_tablespace') + ) / 1048576 uds_MB , + undoblks * (select block_size from dba_tablespaces where upper(tablespace_name) = + (select upper(value) from v$parameter where name = 'undo_tablespace') + ) / ((end_time-begin_time) * 86400) / 1048576 uds_MB_sec , + maxquerylen uds_maxquerylen, + maxqueryid uds_maxqueryid, + ssolderrcnt uds_ssolderrcnt, + nospaceerrcnt uds_nospaceerrcnt, + unxpstealcnt uds_unxpstealcnt, + expstealcnt uds_expstealcnt + from + v$undostat + order by + begin_time desc +) where rownum <= 30; diff --git a/tpt/ue.sql b/tpt/ue.sql new file mode 100644 index 0000000..5e876f3 --- /dev/null +++ b/tpt/ue.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select sys_context('USERENV', '&1') from dual; \ No newline at end of file diff --git a/tpt/uganco.sql b/tpt/uganco.sql new file mode 100644 index 0000000..3320bb9 --- /dev/null +++ b/tpt/uganco.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Note that this script shows you only the dblinks opened in your own session, not others! +-- the v$dblink view uses the same x$ and has the same limitation... + +COL uganco_protocol FOR A5 HEAD PROTO + +SELECT + addr + , ncouid conn_owner + , ncouct refcount + , decode(bitand(ncoflg, 2), 0, 'NO', 'YES') in_trans + , decode(bitand(ncoflg, 8), 0, 'NO', 'YES') update_sent + , decode(hstpro, 1, 'V5', 2, 'V6', 3, 'V6_NLS', 4, 'V7', 5, 'V8', 6, 'V8.1', '#'||hstpro) uganco_protocol + , nconam global_name +FROM + x$uganco +/ + diff --git a/tpt/ugav.sql b/tpt/ugav.sql new file mode 100644 index 0000000..6f89706 --- /dev/null +++ b/tpt/ugav.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@dumpvar uga &1 \ No newline at end of file diff --git a/tpt/ulock.sql b/tpt/ulock.sql new file mode 100644 index 0000000..c450090 --- /dev/null +++ b/tpt/ulock.sql @@ -0,0 +1,15 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select + session_id, + lock_Type, + mode_held, + mode_requested, + lock_id1 +from + dba_lock_internal +where + session_id in (&1) +/ + diff --git a/tpt/umachine.sql b/tpt/umachine.sql new file mode 100644 index 0000000..e85eb94 --- /dev/null +++ b/tpt/umachine.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 +col u_machine head MACHINE for a18 +col u_program head PROGRAM for a20 + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,instr(s.program,'('),20) u_program, + p.spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +and s.machine in ('&1') +--and s.status='ACTIVE' +/ + + diff --git a/tpt/undefparm.sql b/tpt/undefparm.sql new file mode 100644 index 0000000..a870227 --- /dev/null +++ b/tpt/undefparm.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +undefine 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 \ No newline at end of file diff --git a/tpt/uniq.vbs b/tpt/uniq.vbs new file mode 100644 index 0000000..10069f2 --- /dev/null +++ b/tpt/uniq.vbs @@ -0,0 +1,38 @@ +'-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +'-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +Dim curRow, prevRow, rowCount, lineSize + +prevRow = "" +rowCount= 0 +lineSize = 900 + +Set re1 = New RegExp +re1.Pattern = "\+[0-9]*" +re1.Global = True + +Set re2 = New RegExp +re2.Pattern = ".*sspuser\(\)" +re2.Global = False +re2.IgnoreCase = True + +Set re3 = New RegExp +re3.Pattern = ".*(" & WScript.Arguments.Item(0) & "\(\)<-)" +'re3.Pattern = ".*<-(.*\(\)<-" & WScript.Arguments.Item(0) & "\(\)<-)" +re3.Global = False +re3.IgnoreCase = True + + +With WScript + Do + curRow = re3.replace(re2.replace(re1.Replace(WScript.StdIn.ReadLine, ""),""), "$1") + If rowCount = 0 Then prevRow = curRow + + rowCount = rowCount + 1 + If curRow <> prevRow Then + WScript.StdOut.WriteLine Space(6-Len(rowCount - 1)) & rowCount - 1 & " " & Space(lineSize-Len(prevRow)) & prevRow + rowCount = 1 + End If + prevRow = curRow + Loop Until WScript.StdIn.AtEndOfStream + WScript.StdOut.WriteLine Space(6-Len(rowCount)) & rowCount & " " & Space(lineSize-Len(prevRow)) & prevRow +End With diff --git a/tpt/unix2date.sql b/tpt/unix2date.sql new file mode 100644 index 0000000..c1f0f04 --- /dev/null +++ b/tpt/unix2date.sql @@ -0,0 +1,8 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + TO_CHAR(TO_DATE('01011970','DDMMYYYY') + 1/24/60/60 * &1, 'DD-MON-YYYY HH24:MI:SS') "DATE" +FROM DUAL +/ + diff --git a/tpt/uo.sql b/tpt/uo.sql new file mode 100644 index 0000000..8c76fa3 --- /dev/null +++ b/tpt/uo.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col o_owner heading owner for a25 +col o_object_name heading object_name for a30 +col o_object_type heading object_type for a15 + +prompt Listing current user's objects matching %&1% + +select + object_name o_object_name, + object_type o_object_type, + created, + last_ddl_time, + status +from + user_objects +where + upper(object_name) like upper('%&1%') +order by + o_object_type, + o_object_name +; + diff --git a/tpt/uopid.sql b/tpt/uopid.sql new file mode 100644 index 0000000..1a69a37 --- /dev/null +++ b/tpt/uopid.sql @@ -0,0 +1,32 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 +col u_machine head MACHINE for a18 +col u_program head PROGRAM for a20 + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,instr(s.program,'('),20) u_program, + p.pid, + p.spid, + -- s.sql_address, + s.sql_hash_value, +-- s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +and p.pid like ('&1') +--and s.type!='BACKGROUND' +--and s.status='ACTIVE' +/ + diff --git a/tpt/uos.sql b/tpt/uos.sql new file mode 100644 index 0000000..377bc63 --- /dev/null +++ b/tpt/uos.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 +col u_machine head MACHINE for a18 +col u_program head PROGRAM for a20 + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,1,20) u_program, + p.spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +and s.type!='BACKGROUND' +and lower(s.osuser) like lower('&1') +--and s.status='ACTIVE' +/ + diff --git a/tpt/up.sql b/tpt/up.sql new file mode 100644 index 0000000..cbcc2dd --- /dev/null +++ b/tpt/up.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 +col u_machine head MACHINE for a18 +col u_program head PROGRAM for a20 + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,instr(s.program,'('),20) u_program, + p.spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +--and s.type!='BACKGROUND' +and lower(s.program) like lower('%&1%') +--and s.status='ACTIVE' +/ + diff --git a/tpt/us.sql b/tpt/us.sql new file mode 100644 index 0000000..fc08b3b --- /dev/null +++ b/tpt/us.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col username for a25 +col default_Tablespace for a25 +col temp_tablespace for a20 + +prompt Show database usernames from dba_users matching %&1% + +select + username, + default_tablespace, + temporary_tablespace, + user_id, + created, + account_status, + profile +from + dba_users +where + upper(username) like upper('%&1%'); diff --git a/tpt/use.sql b/tpt/use.sql new file mode 100644 index 0000000..ef8a712 --- /dev/null +++ b/tpt/use.sql @@ -0,0 +1,2 @@ +ALTER SESSION SET current_schema = &1; + diff --git a/tpt/userenv.sql b/tpt/userenv.sql new file mode 100644 index 0000000..3d09595 --- /dev/null +++ b/tpt/userenv.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select userenv('&1') from dual; diff --git a/tpt/usid.sql b/tpt/usid.sql new file mode 100644 index 0000000..bbd14ff --- /dev/null +++ b/tpt/usid.sql @@ -0,0 +1,46 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_spid head SPID for a14 +col u_pid head OPID for 99999 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 truncate +col u_machine head MACHINE for a18 truncate +col u_program head PROGRAM for a20 truncate + + +def usid_sql_hash_value=0 +col usid_sql_hash_value head HASH_VALUE for 9999999999 new_value usid_sql_hash_value + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, +-- s.action u_machine, + substr(s.program,instr(s.program,'('),20) u_program, + p.spid u_spid, + p.pid u_pid, + s.process cpid, + -- s.sql_address, + s.sql_id, + s.sql_hash_value usid_sql_hash_value, + s.last_call_et lastcall, + s.status, + s.saddr, + s.paddr, + s.taddr, + s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +and s.sid in (&1) +--and s.type!='BACKGROUND' +--and s.status='ACTIVE' +/ + +def 1=&usid_sql_hash_value +def 2=% diff --git a/tpt/uspid.sql b/tpt/uspid.sql new file mode 100644 index 0000000..98ceb45 --- /dev/null +++ b/tpt/uspid.sql @@ -0,0 +1,31 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 +col u_machine head MACHINE for a18 +col u_program head PROGRAM for a20 + +select s.username u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + substr(s.program,1,20) u_program, + p.spid, + -- s.sql_address, + s.sql_hash_value, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +and p.spid like ('&1') +--and s.type!='BACKGROUND' +--and s.status='ACTIVE' +/ + diff --git a/tpt/usql.sql b/tpt/usql.sql new file mode 100644 index 0000000..6da3639 --- /dev/null +++ b/tpt/usql.sql @@ -0,0 +1,27 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: usql (show outher User's SQL) +-- Purpose: Show another session's SQL directly from library cache +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @usql +-- @usql 150 +-- +-- Other: This script calls sql.sql (for displaying SQL text) and xmsh.sql +-- (for displaying execution plan) +-- +-- +-------------------------------------------------------------------------------- + + +def _usql_sid="&1" + +@@sql "select /*+ NO_MERGE */ sql_hash_value from v$session where sid in (&_usql_sid)" +--@@xmsh "select /*+ NO_MERGE */ sql_hash_value from v$session where sid in (&_usql_sid)" % + +undef _usql_sid diff --git a/tpt/usqlx.sql b/tpt/usqlx.sql new file mode 100644 index 0000000..cea18ef --- /dev/null +++ b/tpt/usqlx.sql @@ -0,0 +1,28 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: usql (show outher User's SQL) +-- Purpose: Show another session's SQL directly from library cache +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @usql +-- @usql 150 +-- +-- Other: This script calls sql.sql (for displaying SQL text) and xmsh.sql +-- ^M(for displaying execution plan) +-- +-- +-------------------------------------------------------------------------------- + + +def _usql_sid="&1" + +@@sql "select /*+ NO_MERGE */ sql_hash_value from v$session where sid in (&_usql_sid)" +@@xmsh "select /*+ NO_MERGE */ sql_hash_value from v$session where sid in (&_usql_sid)" % + +undef _usql_sid + diff --git a/tpt/utopsql.sql b/tpt/utopsql.sql new file mode 100644 index 0000000..e9e7b9b --- /dev/null +++ b/tpt/utopsql.sql @@ -0,0 +1,24 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@saveset +set serveroutput on size 1000000 + +declare + curr_sqlhash number; + + sqlhashes sys. + +begin + for i in 1..50 loop + select sql_hash_value into curr_sqlhash + from v$session where sid = &1; + + dbms_output.put_line(to_char(curr_sqlhash)); + + dbms_lock.sleep(0.1); + end loop; +end; +/ + +@@loadset diff --git a/tpt/uu.sql b/tpt/uu.sql new file mode 100644 index 0000000..4bdcccd --- /dev/null +++ b/tpt/uu.sql @@ -0,0 +1,36 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col u_username head USERNAME for a23 +col u_sid head SID for a14 +col u_audsid head AUDSID for 9999999999 +col u_osuser head OSUSER for a16 +col u_machine head MACHINE for a25 truncate +col u_program head PROGRAM for a20 + +select s.username||CASE WHEN s.sid = SYS_CONTEXT('userenv','sid') THEN ' (me)' WHEN s.type = 'BACKGROUND' THEN ' (bg)' END u_username, ' ''' || s.sid || ',' || s.serial# || '''' u_sid, + p.spid, + s.sql_id, --s.sql_hash_value, + s.audsid u_audsid, + s.osuser u_osuser, + substr(s.machine,instr(s.machine,'\')) u_machine, + CASE WHEN s.type = 'BACKGROUND' OR REGEXP_LIKE(s.program, '.*\([PJ]\d+\)') THEN + REGEXP_REPLACE(SUBSTR(s.program,INSTR(s.program,'(')), '\d', 'n') + ELSE + '('||REGEXP_REPLACE(REGEXP_REPLACE(s.program, '(.*)@(.*)(\(.*\))', '\1'), '\d', 'n')||')' + END u_program, + --substr(s.program,instr(s.program,'(')) u_program, + -- s.sql_address, + s.last_call_et lastcall, + s.status + --, s.logon_time +from + v$session s, + v$process p +where + s.paddr=p.addr +--and s.type!='BACKGROUND' +and (lower(s.username) like lower('&1') or (nvl(s.username,'%') = '%' and s.type = 'USER')) +--and s.status='ACTIVE' +/ + diff --git a/tpt/v.sql b/tpt/v.sql new file mode 100644 index 0000000..2ebf435 --- /dev/null +++ b/tpt/v.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@v2 "%&1%" \ No newline at end of file diff --git a/tpt/v2.sql b/tpt/v2.sql new file mode 100644 index 0000000..ed2d951 --- /dev/null +++ b/tpt/v2.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col view_name for a30 +col text for a100 word_wrap +col v_owner for a25 + +prompt Show SQL text of views matching "&1"... + +select owner v_owner, view_name, text from dba_views +where + upper(view_name) LIKE + upper(CASE + WHEN INSTR('&1','.') > 0 THEN + SUBSTR('&1',INSTR('&1','.')+1) + ELSE + '&1' + END + ) ESCAPE '\' +AND owner LIKE + CASE WHEN INSTR('&1','.') > 0 THEN + UPPER(SUBSTR('&1',1,INSTR('&1','.')-1)) + ELSE + user + END ESCAPE '\' +/ + +select view_name, view_definition text from v$fixed_View_definition where upper(view_name) like upper('&1'); + diff --git a/tpt/var.sql b/tpt/var.sql new file mode 100644 index 0000000..740d4cb --- /dev/null +++ b/tpt/var.sql @@ -0,0 +1,3 @@ +HOST echo VAR &1 > $SQLPATH/tmp/bindvar.tmp +@$SQLPATH/tmp/bindvar.tmp + diff --git a/tpt/vaud.sql b/tpt/vaud.sql new file mode 100644 index 0000000..6156b1a --- /dev/null +++ b/tpt/vaud.sql @@ -0,0 +1,23 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT + TRUNC(timestamp#,'MI') minute + , userid + , userhost + , COUNT(*) +FROM + sys.aud$ +WHERE + timestamp# BETWEEN TO_DATE('20101030 18:00', 'YYYYMMDD HH24:MI') + AND TO_DATE('20101030 19:00', 'YYYYMMDD HH24:MI') +GROUP BY + TRUNC(timestamp#,'MI') --minute + , userid + , userhost +ORDER BY + minute + , userid + , userhost +/ + diff --git a/tpt/w.sql b/tpt/w.sql new file mode 100644 index 0000000..b235abc --- /dev/null +++ b/tpt/w.sql @@ -0,0 +1,51 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +COL w_metric_value HEAD METRIC_VALUE FOR 9,999,999,999,999.99 + +prompt What's going on right now?! +prompt Showing System metrics from V$SYSMETRIC... + +SET FEEDBACK OFF + +SELECT + metric_name + , ROUND(value,2) w_metric_value + , metric_unit +FROM + v$sysmetric +WHERE + metric_name IN ( + 'Average Active Sessions' + , 'Average Synchronous Single-Block Read Latency' + , 'CPU Usage Per Sec' + , 'Background CPU Usage Per Sec' + , 'DB Block Changes Per Txn' + , 'Executions Per Sec' + , 'Host CPU Usage Per Sec' + , 'I/O Megabytes per Second' + , 'I/O Requests per Second' + , 'Logical Reads Per Txn' + , 'Logons Per Sec' + , 'Network Traffic Volume Per Sec' + , 'Physical Reads Per Sec' + , 'Physical Reads Per Txn' + , 'Physical Writes Per Sec' + , 'Redo Generated Per Sec' + , 'Redo Generated Per Txn' + , 'Response Time Per Txn' + , 'SQL Service Response Time' + , 'Total Parse Count Per Txn' + , 'User Calls Per Sec' + , 'User Transaction Per Sec' +) +AND group_id = 2 -- get last 60 sec metrics +ORDER BY + metric_name +/ + +PROMPT +PROMPT Session level breakdown... +SET FEEDBACK ON + +@@snapper ash,ash1,ash2,ash3=sqlid 5 1 all diff --git a/tpt/w4.sql b/tpt/w4.sql new file mode 100644 index 0000000..0c7f44e --- /dev/null +++ b/tpt/w4.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt What's going on right now?! +@@snapper4 ash,ash1,ash2,ash3 5 1 all@* diff --git a/tpt/waitprof.sql b/tpt/waitprof.sql new file mode 100644 index 0000000..a5d5e05 --- /dev/null +++ b/tpt/waitprof.sql @@ -0,0 +1,127 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: waitprof.sql ( Session Wait Profiler ) +-- Purpose: Sample V$SESSION_WAIT at high frequency and show resulting +-- session wait event and parameter profile by session +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @waitprof <#samples> +-- +-- +-- - whether to print P2,P3,SEQ# values or not +-- +-- - session ID of session to sample +-- +-- <[e123s]> - sample grouping +-- e - group by event name +-- 1 - group by P1 of v$session_wait event +-- 2 - group by P2 +-- 3 - group by P3 +-- s - group by SEQ# +-- +-- <#samples> - how many samples to take (a modern CPU can take +-- tens of thousands to low hundreds of k samples +-- per second) +-- +-- Examples: +-- @waitprof noprint 350 e 1000000 -- take million samples, group by event only +-- @waitprof print 350 e123 500000 -- take 500k samples, group by event,p1,p2,p3 +-- @waitprof print 350 e3 1000000 -- take million samples, group by event,p3 +-- @waitprof print 350 es 1000000 -- take million samples, group by event,seq# +-- +-- Other: +-- The sampling relies on NESTED LOOP join method and having +-- V$SESSION_WAIT as the inner (probed) table. Note that on 9i +-- you may need to run this script as SYS as it looks like otherwise +-- the global USE_NL hint is not propagated down to X$ base tables +-- +-- If sampling always reports a single distinct event even though +-- many different events (or parameter values) are expected then +-- the execution plan used is not right. +-- +-------------------------------------------------------------------------------- + +DEF _swp_print=&1 +DEF _swp_sid=&2 +DEF _swp_p123=&3 +DEF _swp_samples=&4 + +col sw_event head EVENT for a35 truncate +col sw_p1transl head P1TRANSL for a42 +col sw_sid head SID for 999999 +col swp_p1 head P1 for a26 word_wrap +col swp_p2 head P2 for a16 word_wrap &_swp_print +col swp_p3 head P3 for a16 word_wrap &_swp_print +col swp_seq# head SEQ# &_swp_print +col pct_total_samples head "% Total|Time" format 999.99 +col waitprof_total_ms head "Total Event|Time ms" format 9999999.999 +col dist_events head Distinct|Events +col average_samples head Average|Samples +col waitprof_avg_ms head "Avg time|ms/Event" format 99999.999 + +prompt +prompt -- WaitProf 1.04 by Tanel Poder ( http://www.tanelpoder.com ) + +WITH + t1 AS (SELECT hsecs FROM v$timer), + samples AS ( + SELECT /*+ ORDERED NO_MERGE USE_NL(sw.gv$session_wait.s) */ + s.sid sw_sid, + CASE WHEN sw.state = 'WAITING' THEN 'WAITING' ELSE 'WORKING' END AS state, + CASE WHEN sw.state = 'WAITING' THEN event ELSE 'On CPU / runqueue' END AS sw_event, + CASE WHEN sw.state = 'WAITING' AND '&_swp_p123' LIKE '%1%' THEN sw.p1text || '= ' || CASE WHEN (LOWER(sw.p1text) LIKE '%addr%' OR sw.p1 >= 536870912) THEN RAWTOHEX(sw.p1raw) ELSE TO_CHAR(sw.p1) END ELSE NULL END swp_p1, + CASE WHEN sw.state = 'WAITING' AND '&_swp_p123' LIKE '%2%' THEN sw.p2text || '= ' || CASE WHEN (LOWER(sw.p2text) LIKE '%addr%' OR sw.p2 >= 536870912) THEN RAWTOHEX(sw.p2raw) ELSE TO_CHAR(sw.p2) END ELSE NULL END swp_p2, + CASE WHEN sw.state = 'WAITING' AND '&_swp_p123' LIKE '%3%' THEN sw.p3text || '= ' || CASE WHEN (LOWER(sw.p3text) LIKE '%addr%' OR sw.p3 >= 536870912) THEN RAWTOHEX(sw.p3raw) ELSE TO_CHAR(sw.p3) END ELSE NULL END swp_p3, + CASE WHEN LOWER('&_swp_p123') LIKE '%s%' THEN sw.seq# ELSE NULL END seq#, + COUNT(*) total_samples, + COUNT(DISTINCT seq#) dist_events, + TRUNC(COUNT(*)/COUNT(DISTINCT seq#)) average_samples + FROM + ( SELECT /*+ NO_MERGE */ TO_NUMBER(&_swp_sid) sid FROM + (SELECT rownum r FROM dual CONNECT BY ROWNUM <= 1000) a, + (SELECT rownum r FROM dual CONNECT BY ROWNUM <= 1000) b, + (SELECT rownum r FROM dual CONNECT BY ROWNUM <= 1000) c + WHERE ROWNUM <= &_swp_samples + ) s, + v$session_wait sw + WHERE + s.sid = sw.sid + GROUP BY + s.sid, + CASE WHEN sw.state = 'WAITING' THEN 'WAITING' ELSE 'WORKING' END, + CASE WHEN sw.state = 'WAITING' THEN event ELSE 'On CPU / runqueue' END, + CASE WHEN sw.state = 'WAITING' AND '&_swp_p123' LIKE '%1%' THEN sw.p1text || '= ' || CASE WHEN (LOWER(sw.p1text) LIKE '%addr%' OR sw.p1 >= 536870912) THEN RAWTOHEX(sw.p1raw) ELSE TO_CHAR(sw.p1) END ELSE NULL END, + CASE WHEN sw.state = 'WAITING' AND '&_swp_p123' LIKE '%2%' THEN sw.p2text || '= ' || CASE WHEN (LOWER(sw.p2text) LIKE '%addr%' OR sw.p2 >= 536870912) THEN RAWTOHEX(sw.p2raw) ELSE TO_CHAR(sw.p2) END ELSE NULL END, + CASE WHEN sw.state = 'WAITING' AND '&_swp_p123' LIKE '%3%' THEN sw.p3text || '= ' || CASE WHEN (LOWER(sw.p3text) LIKE '%addr%' OR sw.p3 >= 536870912) THEN RAWTOHEX(sw.p3raw) ELSE TO_CHAR(sw.p3) END ELSE NULL END, + CASE WHEN LOWER('&_swp_p123') LIKE '%s%' THEN sw.seq# ELSE NULL END + ORDER BY + CASE WHEN LOWER('&_swp_p123') LIKE '%s%' THEN -seq# ELSE total_samples END DESC +), + t2 AS (SELECT hsecs FROM v$timer) +SELECT /*+ ORDERED */ + s.sw_sid, + s.state, + s.sw_event, + s.swp_p1, + s.swp_p2, + s.swp_p3, + s.seq# swp_seq#, + s.total_samples / &_swp_samples * 100 pct_total_samples, + (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &_swp_samples waitprof_total_ms, + s.dist_events, +-- s.average_samples, + (t2.hsecs - t1.hsecs) * 10 * s.total_samples / dist_events / &_swp_samples waitprof_avg_ms +FROM + t1, + samples s, + t2 +/ + +--UNDEF _swp_sid=&1 +--UNDEF _swp_p123=&2 +--UNDEF _swp_samples=&3 diff --git a/tpt/wat.sql b/tpt/wat.sql new file mode 100644 index 0000000..603dda6 --- /dev/null +++ b/tpt/wat.sql @@ -0,0 +1,29 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +col wat_sql_text head SQL_TEXT format a80 word_wrap +col wat_max_tempseg_size head MAX_TEMP format 999999.99 +col wat_last_tempseg_size head LAST_TEMP format 999999.99 +col wat_executions head EXECUTIONS format 999999999 +col wat_open_versions head OPEN|VER format 9999 +col wat_users_opening head USRS|OPEN format 9999 +col wat_disk_reads head DISK|READS format 999999999 + +select + s.sql_text wat_sql_text, + w.max_tempseg_size/1048576 wat_max_tempseg_size, + w.last_tempseg_size/1048576 wat_last_tempseg_size, + s.executions wat_executions, + s.open_versions wat_open_Versions, + s.users_opening wat_users_opening, + s.disk_reads wat_disk_reads +from + v$sql s, v$sql_workarea w +where + w.address = s.address +and w.hash_value = s.hash_value +and w.child_number = s.child_number +and w.max_tempseg_size > (select max(max_tempseg_size)*0.2 from v$sql_workarea) +order by + w.max_tempseg_size desc +; diff --git a/tpt/wc.sql b/tpt/wc.sql new file mode 100644 index 0000000..41ec0ad --- /dev/null +++ b/tpt/wc.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM v$wait_chains WHERE sid = &1 +/ + diff --git a/tpt/wp.sql b/tpt/wp.sql new file mode 100644 index 0000000..81a5551 --- /dev/null +++ b/tpt/wp.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@waitprof print &1 e123 100000 \ No newline at end of file diff --git a/tpt/wr.sql b/tpt/wr.sql new file mode 100644 index 0000000..b5a3ed0 --- /dev/null +++ b/tpt/wr.sql @@ -0,0 +1,6 @@ +where rownum <= &1 +. +prompt ....where rownum <= &1 + +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. diff --git a/tpt/wrk.sql b/tpt/wrk.sql new file mode 100644 index 0000000..21102e3 --- /dev/null +++ b/tpt/wrk.sql @@ -0,0 +1,48 @@ +-- Copyright 2019 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Purpose: List "last completed execution" SQL workarea memory and TEMP usage details +-- for cursors still in cache. +-- +-- Usage: @wrk 1=1 -- lots of output +-- @wrk sql_id='d394v2sjq5p51' -- report last completed execution of a SQL_ID +-- @wrk "sql_id='d394v2sjq5p51' and child_number = 0" -- show only child=0 for the given SQL_ID + +COL wrk_operation_type HEAD OPERATION_TYPE FOR A30 +COL wrk_policy HEAD POLICY FOR A10 +COL wrk_operation_id HEAD PLAN_LINE FOR 9999 +COL wrk_last_execution HEAD LAST_EXEC FOR A15 +COL wrk_max_tempseg_size HEAD MAX_TEMP +COL wrk_last_tempseg_size HEAD LAST_TEMP +COL wrk_last_memory_used HEAD LAST_MEM + +SELECT + -- address + sql_id + , child_number + , operation_id wrk_operation_id + , operation_type wrk_operation_type + , policy wrk_policy + , estimated_optimal_size est_0mem + , estimated_onepass_size est_1mem + , last_memory_used wrk_last_memory_used + , last_execution wrk_last_execution + , active_time + , max_tempseg_size wrk_max_tempseg_size + , last_tempseg_size wrk_last_tempseg_size + , last_degree + , total_executions + , optimal_executions + , onepass_executions + , multipasses_executions +FROM + v$sql_workarea +WHERE + &1 +ORDER BY + address + , sql_id + , child_number + , operation_id +/ + diff --git a/tpt/wrka.sql b/tpt/wrka.sql new file mode 100644 index 0000000..3aedd93 --- /dev/null +++ b/tpt/wrka.sql @@ -0,0 +1,44 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Purpose: List ACTIVE SQL workarea memory usage details at session/workarea level. +-- Show both PGA workarea usage and TEMP usage by workareas (workareas don't include +-- other PGA/TEMP use like PL/SQL arrays and global temporary tables) +-- +-- Usage: @wrka 1=1 +-- @wrka sid=123 +-- @wrka username='APPUSER' +-- @wrka "sid IN (123,234,456)" +-- @wrka "program LIKE '%BatchRunner.exe%' AND machine='host123'" +-- @wrka "sid in (SELECT sid FROM v$session WHERE ....)" + +prompt Show Active workarea memory usage for where &1.... + +COL wrka_operation_type HEAD OPERATION_TYPE FOR A30 + +SELECT + inst_id + , sid + , qcinst_id + , qcsid + , sql_id +-- , sql_exec_start -- 11g+ + , operation_type wrka_operation_type + , operation_id plan_line + , policy + , ROUND(active_time/1000000,1) active_sec + , actual_mem_used + , max_mem_used + , work_area_size + , number_passes + , tempseg_size + , tablespace +FROM + gv$sql_workarea_active +WHERE + &1 +ORDER BY + sid + , sql_hash_value + , operation_id +/ diff --git a/tpt/wrkasum.sql b/tpt/wrkasum.sql new file mode 100644 index 0000000..6ae47a6 --- /dev/null +++ b/tpt/wrkasum.sql @@ -0,0 +1,71 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- Purpose: Show a summary of ACTIVE SQL workareas grouped by operation type (SORT, HASH, etc) +-- Show both PGA workarea usage and TEMP usage by workareas (workareas don't include +-- other PGA/TEMP use like PL/SQL arrays and global temporary tables) +-- +-- Usage: @wrkasum 1=1 +-- @wrkasum username='APPUSER' +-- @wrkasum "program LIKE '%BatchRunner.exe%' AND machine='host123'" + +PROMPT Total PGA allocation from V$PROCESS (excluding MGA) + +SELECT + inst_id + , ROUND(SUM(pga_alloc_mem)/1048576,1) total_alloc_pga + , ROUND(SUM(pga_used_mem) /1048576,1) total_used_pga +FROM + gv$process +GROUP BY + inst_id +ORDER BY + inst_id +/ + +PROMPT Top allocation reason by PGA memory usage + +COL wrkasum_operation_type FOR A30 + +SELECT + operation_type wrkasum_operation_type + , policy + , ROUND(SUM(actual_mem_used)/1048576) actual_pga_mb + , ROUND(SUM(work_area_size)/1048576) allowed_pga_mb + , ROUND(SUM(tempseg_size)/1048576) temp_mb + , MAX(number_passes) num_passes + , COUNT(DISTINCT qcinst_id||','||qcsid) num_qc + , COUNT(DISTINCT inst_id||','||sid) num_sessions +FROM + gv$sql_workarea_active +WHERE + &1 +GROUP BY + operation_type + , policy +ORDER BY + actual_pga_mb DESC NULLS LAST +/ + +PROMPT Top SQL_ID by TEMP usage... + + SELECT + sql_id + , policy + , ROUND(SUM(actual_mem_used)/1048576) actual_pga_mb + , ROUND(SUM(work_area_size)/1048576) allowed_pga_mb + , ROUND(SUM(tempseg_size)/1048576) temp_mb + , MAX(number_passes) num_passes + , COUNT(DISTINCT qcinst_id||','||qcsid) num_qc + , COUNT(DISTINCT inst_id||','||sid) num_sessions + FROM + gv$sql_workarea_active + WHERE + &1 + GROUP BY + sql_id + , policy + ORDER BY + temp_mb DESC NULLS LAST +/ + diff --git a/tpt/x.sql b/tpt/x.sql new file mode 100644 index 0000000..0a12c8f --- /dev/null +++ b/tpt/x.sql @@ -0,0 +1,39 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- 10g2+ +prompt Display execution plan for last statement for this session from library cache... + +-- select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +COST +PEEKED_BINDS')); + +-- this is 10gR1 command (or @x101.sql) +-- +-- select * from table(dbms_xplan.display_cursor(null,null,'RUNSTATS_LAST')); + +-- in 9.2 use @xm +-- can be % if you want all children + +def _x_temp_env=&_tpt_tempdir/env_&_tpt_tempfile..sql +def _x_temp_sql=&_tpt_tempdir/sql_&_tpt_tempfile..sql + +set termout off +store set &_x_temp_env replace +save &_x_temp_sql replace +set termout on + +-- 12c ADAPTIVE: +--select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +PEEKED_BINDS +PARALLEL +PARTITION +COST +BYTES +ADAPTIVE')) +-- 19c HINT_REPORTING: +-- select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +PEEKED_BINDS +PARALLEL +PARTITION +COST +BYTES +HINT_REPORT')) +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +PEEKED_BINDS +PARALLEL +PARTITION +COST +BYTES')) +where + plan_table_output not in ('-----', 'Note') +and plan_table_output not like ('%- Warning: basic plan statistics not available. These are only collected when:%') +and plan_table_output not like ('%* hint _gather_plan_statistics_ is used for the statement or%') +and plan_table_output not like ('%* parameter _statistics_level_ is set to _ALL_, at session or system level%'); + +set termout off +@/&_x_temp_env +get &_x_temp_sql +set termout on diff --git a/tpt/x101.sql b/tpt/x101.sql new file mode 100644 index 0000000..6fd93da --- /dev/null +++ b/tpt/x101.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- oracle 10.1 version (in 10.2+ use x.sql) +select * from table(dbms_xplan.display_cursor(null,null)); +--select * from table(dbms_xplan.display_cursor(null,null,'RUNSTATS_LAST')); diff --git a/tpt/x2.sql b/tpt/x2.sql new file mode 100644 index 0000000..fcbd93a --- /dev/null +++ b/tpt/x2.sql @@ -0,0 +1,13 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +0 explain plan for + +run + +set termout on + +select * from table(dbms_xplan.display); + diff --git a/tpt/x9.sql b/tpt/x9.sql new file mode 100644 index 0000000..1ca7457 --- /dev/null +++ b/tpt/x9.sql @@ -0,0 +1,23 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +def _x9_temp_env=&_tpt_tempdir/env_&_tpt_tempfile..sql +def _x9_temp_sql=&_tpt_tempdir/sql_&_tpt_tempfile..sql + +store set &_x9_temp_env replace +save &_x9_temp_sql replace + +set termout on + +0 explain plan for +run + +select * from table(dbms_xplan.display()); + +set termout off +@/&_x9_temp_env +get &_x9_temp_sql +set termout on diff --git a/tpt/x9a.sql b/tpt/x9a.sql new file mode 100644 index 0000000..b079fe3 --- /dev/null +++ b/tpt/x9a.sql @@ -0,0 +1,23 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +def _x9_temp_env=&_tpt_tempdir/env_&_tpt_tempfile..sql +def _x9_temp_sql=&_tpt_tempdir/sql_&_tpt_tempfile..sql + +store set &_x9_temp_env replace +save &_x9_temp_sql replace + +0 explain plan for +run + +set termout on + +select * from table(dbms_xplan.display(null,null,'ALIAS +NOTE')); + +set termout off +@/&_x9_temp_env +get &_x9_temp_sql +set termout on diff --git a/tpt/x9all.sql b/tpt/x9all.sql new file mode 100644 index 0000000..8df4e00 --- /dev/null +++ b/tpt/x9all.sql @@ -0,0 +1,24 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +0 explain plan for + +set termout off + +def _x9_temp_env=&_tpt_tempdir/env_&_tpt_tempfile..sql +def _x9_temp_sql=&_tpt_tempdir/sql_&_tpt_tempfile..sql + +store set &_x9_temp_env replace +save &_x9_temp_sql replace + +run + +set termout on + +select * from table(dbms_xplan.display(null,null,'ADVANCED')); + +set termout off +@/&_x9_temp_env +get &_x9_temp_sql +set termout on diff --git a/tpt/xa.sql b/tpt/xa.sql new file mode 100644 index 0000000..0e1c64d --- /dev/null +++ b/tpt/xa.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from table( dbms_xplan.display_cursor(null, null, 'ALIAS +PEEKED_BINDS +ALLSTATS LAST +MEMSTATS LAST') ); diff --git a/tpt/xad.sql b/tpt/xad.sql new file mode 100644 index 0000000..dc3ed36 --- /dev/null +++ b/tpt/xad.sql @@ -0,0 +1,35 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- 10g2+ +prompt Display execution plan for last statement for this session from library cache... + +-- select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +COST +PEEKED_BINDS')); + +-- this is 10gR1 command (or @x101.sql) +-- +-- select * from table(dbms_xplan.display_cursor(null,null,'RUNSTATS_LAST')); + +-- in 9.2 use @xm +-- can be % if you want all children + +def _x_temp_env=&_tpt_tempdir/env_&_tpt_tempfile..sql +def _x_temp_sql=&_tpt_tempdir/sql_&_tpt_tempfile..sql + +set termout off +store set &_x_temp_env replace +save &_x_temp_sql replace +set termout on + +select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +PEEKED_BINDS +PARALLEL +PARTITION +COST +BYTES +ADAPTIVE')) +where + plan_table_output not in ('-----', 'Note') +and plan_table_output not like ('%- Warning: basic plan statistics not available. These are only collected when:%') +and plan_table_output not like ('%* hint _gather_plan_statistics_ is used for the statement or%') +and plan_table_output not like ('%* parameter _statistics_level_ is set to _ALL_, at session or system level%'); + +set termout off +@/&_x_temp_env +get &_x_temp_sql +set termout on diff --git a/tpt/xall.sql b/tpt/xall.sql new file mode 100644 index 0000000..69c2e78 --- /dev/null +++ b/tpt/xall.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from table( dbms_xplan.display_cursor(null, null, 'ADVANCED +PEEKED_BINDS +ALLSTATS LAST +MEMSTATS LAST') ); + diff --git a/tpt/xawr.sql b/tpt/xawr.sql new file mode 100644 index 0000000..2b420da --- /dev/null +++ b/tpt/xawr.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('&1', CASE WHEN '&2' = '%' THEN null ELSE '&2' END, format=>'+PEEKED_BINDS')); diff --git a/tpt/xb.sql b/tpt/xb.sql new file mode 100644 index 0000000..f5217be --- /dev/null +++ b/tpt/xb.sql @@ -0,0 +1,358 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xb (eXplain Better) +-- +-- Purpose: Explain a SQL statements execution plan with execution +-- profile directly from library cache - for the last +-- SQL executed in current session (see also xbi.sql) +-- +-- Author: Tanel Poder +-- Copyright: (c) https://blog.tanelpoder.com +-- +-- Usage: 1) alter session set statistics_level = all; +-- 2) Run the statement you want to explain +-- 3) @xb.sql +-- +-- Other: You can add a GATHER_PLAN_STATISTICS hint to the statement instead +-- if you dont want to use "alter session set statistics_level" +-- for some reason (this hint works on Oracle 10.2 and higher) +-- +-- TODO: Noteworthy outstanding items are: +-- * formatting, decide what columns to show by default +-- * clone to an @xbx.sql (eXtended version) with wider output and stuff like plan outline hints shown etc +-- currently you can just comment/uncomment sections in this script +-- * clone to @xbad.sql for showing full adaptive plans +-- * add an option to gather/report metrics of all PX slaves +-- +-------------------------------------------------------------------------------- + +prompt -- xb.sql: eXplain Better v1.01 for prev SQL in the current session - by Tanel Poder (https://blog.tanelpoder.com) + +set verify off pagesize 5000 tab off lines 999 + +column xbi_child_number heading "Ch|ld" format 999 + +column xbi_sql_id heading "SQL_ID" for a13 +column xbi_sql_child_number heading "CHLD" for 9999 +column xbi_sql_addr heading "ADDRESS" +column xbi_sql_id_text heading "" +column xbi_seconds_ago heading "First Load Time" +column xbi_id heading "Op|ID" for 9999 justify right +column xbi_parent_id heading "Par.|ID" for 9999 justify right +column xbi_id2 heading "Op|ID" for a5 justify right +column xbi_pred heading "Pred|#Col" for a5 justify right +column xbi_pos heading "#Sib|ling" for 9999 +column xbi_optimizer heading "Optimizer|Mode" format a10 +column xbi_plan_step heading "Operation" for a55 +column xbi_plan_line heading "Row Source" for a72 +column xbi_qblock_name heading "Query Block|name" for a20 PRINT +column xbi_object_name heading "Object|Name" for a30 +column xbi_object_node heading "Object|Node" for a10 +column xbi_opt_cost heading "Optimizer|Cost" for 9999999999 +column xbi_opt_card heading "Est. rows|per Start" for 999999999999 +column xbi_opt_card_times_starts heading "Est. rows|total" for 999999999999 +column xbi_opt_card_misestimate heading "Opt. Card.|misestimate" for a15 justify right +column xbi_opt_bytes heading "Estimated|output bytes" for 999999999999 +column xbi_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap +column xbi_cpu_cost heading "CPU|Cost" for 9999999 +column xbi_io_cost heading "IO|Cost" for 9999999 + +column xbi_last_output_rows heading "Real #rows|returned" for 9999999999 +column xbi_last_starts heading "Rowsource|starts" for 999999999 +column xbi_last_rows_start heading "#Rows ret/|per start" for 999999999 +column xbi_last_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xbi_last_cr_buffer_gets_row heading "Consistent|gets/row" for 999999999 +column xbi_last_cu_buffer_gets heading "Current|gets" for 999999999 +column xbi_last_cu_buffer_gets_row heading "Current|gets/row" for 999999999 +column xbi_last_disk_reads heading "Physical|read blks" for 999999999 +column xbi_last_disk_writes heading "Physical|write blks" for 999999999 +column xbi_last_elapsed_time_ms heading "cumulative ms|spent in branch" for 9,999,999.99 noprint +column xbi_self_elapsed_time_ms heading "ms spent in|this operation" for 9,999,999.99 +column xbi_self_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xbi_self_cr_buffer_gets_row heading "Consistent|gets/row" for 999999999 +column xbi_self_cu_buffer_gets heading "Current|gets" for 999999999 +column xbi_self_cu_buffer_gets_row heading "Current|gets/row" for 999999999 +column xbi_self_disk_reads heading "Physical|read blks" for 999999999 +column xbi_self_disk_writes heading "Physical|write blks" for 999999999 +column xbi_last_memory_used heading "Memory|used (MB)" for 9,999,999.99 +column xbi_last_execution heading "Workarea|Passes" for a13 + +column xbi_sql_plan_hash_value heading "Plan Hash Value" for 9999999999 +column xbi_plan_hash_value_text noprint + +column xbi_outline_hints heading "Outline Hints" for a120 word_wrap +column xbi_notes heading "Plan|Notes" for a120 word_wrap + +column xbi_sql_id heading "SQL_ID" for a13 new_value xbi_sql_id +column xbi_sql_child_number heading "CHLD" for 9999 new_value xbi_sql_child_number +column xbi_sql_addr heading "ADDRESS" new_value xbi_sql_addr + +set feedback off + +select + 'Cursor: ' xbi_sql_id_text, + sql.sql_id xbi_sql_id, + sql.child_number xbi_sql_child_number, + sql.address xbi_sql_addr, + ' PLAN_HASH_VALUE: ' xbi_plan_hash_value_text, + sql.plan_hash_value xbi_sql_plan_hash_value, + 'Statement first parsed at: '|| sql.first_load_time ||' - '|| + round( (sysdate - to_date(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'))*86400 ) || ' seconds ago' xbi_seconds_ago +from + v$sql sql, + all_users usr +where + sql.parsing_user_id = usr.user_id +and (sql.sql_id,sql.child_number,sql.address) = (SELECT prev_sql_id,prev_child_number,prev_sql_addr + FROM v$session WHERE sid = USERENV('SID')) +/ + +WITH sq AS ( + SELECT + sp.id, sp.parent_id, sp.operation, sp.options, sp.object_owner, sp.object_name + , ss.last_elapsed_time, ss.last_cr_buffer_gets, ss.last_cu_buffer_gets, ss.last_disk_reads, ss.last_disk_writes + FROM v$sql_plan_statistics_all ss INNER JOIN + v$sql_plan sp + ON ( + sp.sql_id=ss.sql_id + AND sp.child_number=ss.child_number + AND sp.address=ss.address + AND sp.id=ss.id + ) + AND sp.sql_id='&xbi_sql_id' + AND sp.child_number = TO_NUMBER('&xbi_sql_child_number') + AND sp.address = hextoraw('&xbi_sql_addr') +), deltas AS ( + SELECT + par.id + , par.last_elapsed_time - SUM(chi.last_elapsed_time ) self_elapsed_time + , par.last_cr_buffer_gets - SUM(chi.last_cr_buffer_gets) self_cr_buffer_gets + , par.last_cu_buffer_gets - SUM(chi.last_cu_buffer_gets) self_cu_buffer_gets + , par.last_disk_reads - SUM(chi.last_disk_reads ) self_disk_reads + , par.last_disk_writes - SUM(chi.last_disk_writes ) self_disk_writes + FROM sq par LEFT OUTER JOIN + sq chi + ON chi.parent_id = par.id + GROUP BY + par.id + , par.last_elapsed_time, par.last_cr_buffer_gets, par.last_cu_buffer_gets, par.last_disk_reads, par.last_disk_writes +), combined AS ( + SELECT sq.id, sq.parent_id, sq.operation, sq.options + , sq.object_owner, sq.object_name + , sq.last_elapsed_time + , sq.last_cr_buffer_gets + , sq.last_cu_buffer_gets + , sq.last_disk_reads + , sq.last_disk_writes + , NVL(deltas.self_elapsed_time , sq.last_elapsed_time) self_elapsed_time + , NVL(deltas.self_cr_buffer_gets , sq.last_cr_buffer_gets) self_cr_buffer_gets + , NVL(deltas.self_cu_buffer_gets , sq.last_cu_buffer_gets) self_cu_buffer_gets + , NVL(deltas.self_disk_reads , sq.last_disk_reads) self_disk_reads + , NVL(deltas.self_disk_writes , sq.last_disk_writes) self_disk_writes + FROM + sq, deltas + WHERE + sq.id = deltas.id +), +adaptive_display_map AS ( + SELECT + TO_NUMBER(EXTRACT(column_value, '/row/@op' )) id + , TO_NUMBER(EXTRACT(column_value, '/row/@par')) parent_id + , TO_NUMBER(EXTRACT(column_value, '/row/@dis')) display_id + , TO_NUMBER(EXTRACT(column_value, '/row/@dep')) depth + , TO_NUMBER(EXTRACT(column_value, '/row/@skp')) skip + FROM + v$sql_plan + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(other_xml),'/*/display_map/row'))) + WHERE + sql_id = '&xbi_sql_id' + AND child_number = TO_NUMBER('&xbi_sql_child_number') + AND address = hextoraw('&xbi_sql_addr') + AND other_xml IS NOT NULL +) +select + LPAD( + CASE WHEN p.filter_predicates IS NOT NULL THEN 'F' ELSE ' ' END || + CASE WHEN p.access_predicates IS NOT NULL THEN CASE WHEN p.options LIKE 'STORAGE %' THEN 'S' ELSE 'A' END ELSE '' END || + CASE p.search_columns WHEN 0 THEN NULL ELSE '#'||TO_CHAR(p.search_columns) END + , 5) xbi_pred, + NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , p.id) xbi_id, + nvl(adm2.parent_id, p.parent_id) xbi_parent_id, + CASE WHEN p.id != 0 THEN p.position END xbi_pos, + LPAD(' ',NVL(adm.depth,p.depth),' ')|| p.operation || ' ' || p.options ||' ' + ||nvl2(p.object_name, '['||p.object_name||']', null) + xbi_plan_line, + CASE WHEN p.id = 0 THEN '>>> Plan totals >>>' ELSE p.qblock_name END xbi_qblock_name, +-- p.object_node xbi_object_node, +-- p.distribution xbi_distribution, +-- lpad(decode(p.id,0,'T ','')||trim(to_char(round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) /1000,2),'9,999,999.00')), 14) xbi_self_elapsed_time_ms, + round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) /1000,2) xbi_self_elapsed_time_ms, + decode(p.id,0,c.last_cr_buffer_gets,c.self_cr_buffer_gets) xbi_self_cr_buffer_gets, + ps.last_starts xbi_last_starts, + ps.last_output_rows xbi_last_output_rows, + p.cardinality * ps.last_starts xbi_opt_card_times_starts, + regexp_replace(lpad(to_char(round( + CASE WHEN (DECODE(ps.last_output_rows,0,1,ps.last_output_rows) / DECODE(p.cardinality*ps.last_starts,0,1,p.cardinality*ps.last_starts)) > 1 THEN -(DECODE(ps.last_output_rows,0,1,ps.last_output_rows) / DECODE(p.cardinality*ps.last_starts,0,1,p.cardinality*ps.last_starts)) + WHEN (DECODE(ps.last_output_rows,0,1,ps.last_output_rows) / DECODE(p.cardinality*ps.last_starts,0,1,p.cardinality*ps.last_starts)) < 1 THEN 1/(DECODE(ps.last_output_rows,0,1,ps.last_output_rows) / DECODE(p.cardinality*ps.last_starts,0,1,p.cardinality*ps.last_starts)) + WHEN (DECODE(ps.last_output_rows,0,1,ps.last_output_rows) / DECODE(p.cardinality*ps.last_starts,0,1,p.cardinality*ps.last_starts)) = 1 THEN 1 + ELSE null + END + ,0))||'x',15),'^ *x$') xbi_opt_card_misestimate, +-- c.self_cr_buffer_gets xbi_self_cr_buffer_gets, +-- c.self_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cr_buffer_gets_row, + decode(p.id,0,c.last_cu_buffer_gets,c.self_cu_buffer_gets) xbi_self_cu_buffer_gets, +-- c.self_cu_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cu_buffer_gets_row, + decode(p.id,0,c.last_disk_reads,c.self_disk_reads) xbi_self_disk_reads, + decode(p.id,0,c.last_disk_writes,c.self_disk_writes) xbi_self_disk_writes, + round(ps.last_elapsed_time/1000,2) xbi_last_elapsed_time_ms, +-- ps.last_cr_buffer_gets xbi_last_cr_buffer_gets, +-- ps.last_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_last_cr_buffer_gets_row, +-- ps.last_cu_buffer_gets xbi_last_cu_buffer_gets, +-- ps.last_cu_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_last_cu_buffer_gets_row, +-- ps.last_disk_reads xbi_last_disk_reads, +-- ps.last_disk_writes xbi_last_disk_writes, + ps.last_memory_used/1048576 xbi_last_memory_used, + ps.last_execution xbi_last_execution, + p.cost xbi_opt_cost +-- p.bytes xbi_opt_bytes, +-- p.cpu_cost xbi_cpu_cost, +-- p.io_cost xbi_io_cost, +-- p.other_tag, +-- p.other, +-- p.access_predicates, +-- p.filter_predicates, +from + v$sql_plan p + , v$sql_plan_statistics_all ps + , combined c + , adaptive_display_map adm + , adaptive_display_map adm2 +where + p.address = ps.address (+) +and p.sql_id = ps.sql_id (+) +and p.plan_hash_value = ps.plan_hash_value (+) +and p.child_number = ps.child_number (+) +and p.id = ps.id (+) +and p.id = adm.id (+) +and adm.id = adm2.id (+) +and (adm.id IS NULL or adm.skip = 0) +and p.sql_id = '&xbi_sql_id' +and p.address = hextoraw('&xbi_sql_addr') +and p.child_number = TO_NUMBER(&xbi_sql_child_number) +and ps.id = c.id (+) +order by + p.id asc +/ + +WITH adaptive_display_map AS ( + SELECT + TO_NUMBER(EXTRACT(column_value, '/row/@op' )) id + , TO_NUMBER(EXTRACT(column_value, '/row/@dis')) display_id + , TO_NUMBER(EXTRACT(column_value, '/row/@skp')) skip + FROM + v$sql_plan + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(other_xml),'/*/display_map/row'))) + WHERE + sql_id = '&xbi_sql_id' + AND child_number = TO_NUMBER('&xbi_sql_child_number') + AND address = hextoraw('&xbi_sql_addr') + AND other_xml IS NOT NULL + AND TO_NUMBER(EXTRACT(column_value, '/row/@skp')) != 1 +) +select + xbi_id2, + xbi_qblock_name, + substr(dummy,1,0)||'-' " ", -- there's an ugly reason (bug) for this hack + xbi_predicate_info +from ( + select + sp.sql_id xbi_sql_id, + LPAD(NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , sp.id), 5, ' ') xbi_id2, + sp.filter_predicates dummy, -- looks like there's a bug in 11.2.0.3 where both pred cols have to be selected + CASE WHEN sp.options LIKE 'STORAGE %' THEN 'storage' ELSE 'access' END||'('|| substr(sp.access_predicates,1,3989) || ')' xbi_predicate_info, + sp.qblock_name xbi_qblock_name + from + v$sql_plan sp + , adaptive_display_map adm + where + sp.sql_id = '&xbi_sql_id' + and sp.child_number = TO_NUMBER(&xbi_sql_child_number) + AND sp.address = HEXTORAW('&xbi_sql_addr') + and sp.access_predicates is not null + and sp.id = adm.id (+) + union all + select + sp.sql_id xbi_sql_id, + --lpad(sp.id, 5, ' ') xbi_id2, + LPAD(NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , sp.id), 5, ' ') xbi_id2, + sp.access_predicates dummy, + 'filter('|| substr(sp.filter_predicates,1,3989) || ')' xbi_predicate_info, + sp.qblock_name xbi_qblock_name + from + v$sql_plan sp + , adaptive_display_map adm + where + sp.sql_id = '&xbi_sql_id' + and sp.child_number = TO_NUMBER(&xbi_sql_child_number) + and sp.address = HEXTORAW('&xbi_sql_addr') + and sp.filter_predicates is not null + and sp.id = adm.id (+) +) +order by + xbi_id2 asc, + xbi_predicate_info asc +/ + + +-- this query can return ORA-600 in Oracle 10.2 due to Bug 5497611 - OERI[qctVCO:csform] from Xquery using XMLType constructor (Doc ID 5497611.8) +WITH sq AS ( + SELECT other_xml + FROM v$sql_plan p + WHERE + p.sql_id = '&xbi_sql_id' + AND p.child_number = &xbi_sql_child_number + AND p.address = hextoraw('&xbi_sql_addr') + AND p.other_xml IS NOT NULL -- (the other_xml is not guaranteed to always be on plan line 1) +) + SELECT ' *' " ", 'Cardinality feedback = yes' xbi_notes FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "cardinality_feedback"]') = 'yes' +UNION ALL SELECT ' *', 'SQL Stored Outline used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "outline"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "outline"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Patch used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_patch"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_patch"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Profile used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_profile"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_profile"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Plan Baseline used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "baseline"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "baseline"]') IS NOT NULL +UNION ALL SELECT ' *', 'Adaptive Plan = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "adaptive_plan"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "adaptive_plan"]') IS NOT NULL +/ + +-- === Outline Hints === +WITH sq AS ( + SELECT other_xml + FROM v$sql_plan p + WHERE + p.sql_id = '&xbi_sql_id' + AND p.child_number = &xbi_sql_child_number + AND p.address = hextoraw('&xbi_sql_addr') + AND p.other_xml IS NOT NULL +) +SELECT + SUBSTR(EXTRACTVALUE(VALUE(d), '/hint'),1,4000) xbi_outline_hints +FROM + sq + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(sq.other_xml), '/*/outline_data/hint'))) D +/ + +set feedback on +PROMPT diff --git a/tpt/xbi.sql b/tpt/xbi.sql new file mode 100644 index 0000000..09f7511 --- /dev/null +++ b/tpt/xbi.sql @@ -0,0 +1,365 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xb (eXplain Better) +-- +-- Purpose: Explain a SQL statements execution plan with execution +-- profile directly from library cache - for the last +-- SQL executed in current session (see also xbi.sql) +-- +-- Author: Tanel Poder +-- Copyright: (c) https://blog.tanelpoder.com +-- +-- Usage: 1) alter session set statistics_level = all; +-- 2) Run the statement you want to explain +-- 3) @xb.sql +-- +-- Other: You can add a GATHER_PLAN_STATISTICS hint to the statement instead +-- if you dont want to use "alter session set statistics_level" +-- for some reason (this hint works on Oracle 10.2 and higher) +-- +-- TODO: Noteworthy outstanding items are: +-- * formatting, decide what columns to show by default +-- * clone to an @xbx.sql (eXtended version) with wider output and stuff like plan outline hints shown etc +-- currently you can just comment/uncomment sections in this script +-- * clone to @xbad.sql for showing full adaptive plans +-- * add an option to gather/report metrics of all PX slaves +-- +-------------------------------------------------------------------------------- + +def xbi_sql_id=&1 +def xbi_sql_child_number=&2 +def xbi_sql_addr="TODO" + +prompt -- xbi.sql: eXplain Better v1.01 for sql_id=&xbi_sql_id child=&xbi_sql_child_number - by Tanel Poder (https://blog.tanelpoder.com) + +set verify off pagesize 5000 tab off lines 999 + +column xbi_child_number heading "Ch|ld" format 999 + +column xbi_sql_id heading "SQL_ID" for a13 +column xbi_sql_child_number heading "CHLD" for 9999 +column xbi_sql_addr heading "ADDRESS" +column xbi_sql_id_text heading "" +column xbi_seconds_ago heading "First Load Time" +column xbi_id heading "Op|ID" for 9999 justify right +column xbi_parent_id heading "Par.|ID" for 9999 justify right +column xbi_id2 heading "Op|ID" for a5 justify right +column xbi_pred heading "Pred|#Col" for a5 justify right +column xbi_pos heading "#Sib|ling" for 9999 +column xbi_optimizer heading "Optimizer|Mode" format a10 +column xbi_plan_step heading "Operation" for a55 +column xbi_plan_line heading "Row Source" for a72 +column xbi_qblock_name heading "Query Block|name" for a20 PRINT +column xbi_object_name heading "Object|Name" for a30 +column xbi_object_node heading "Object|Node" for a10 +column xbi_opt_cost heading "Optimizer|Cost" for 9999999999 +column xbi_opt_card heading "Est. rows|per Start" for 999999999999 +column xbi_opt_card_times_starts heading "Est. rows|total" for 999999999999 +column xbi_opt_card_misestimate heading "Opt. Card.|misestimate" for a15 justify right +column xbi_opt_bytes heading "Estimated|output bytes" for 999999999999 +column xbi_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap +column xbi_cpu_cost heading "CPU|Cost" for 9999999 +column xbi_io_cost heading "IO|Cost" for 9999999 + +column xbi_last_output_rows heading "Real #rows|returned" for 9999999999 +column xbi_last_starts heading "Rowsource|starts" for 999999999 +column xbi_last_rows_start heading "#Rows ret/|per start" for 999999999 +column xbi_last_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xbi_last_cr_buffer_gets_row heading "Consistent|gets/row" for 999999999 +column xbi_last_cu_buffer_gets heading "Current|gets" for 999999999 +column xbi_last_cu_buffer_gets_row heading "Current|gets/row" for 999999999 +column xbi_last_disk_reads heading "Physical|read blks" for 999999999 +column xbi_last_disk_writes heading "Physical|write blks" for 999999999 +column xbi_last_elapsed_time_ms heading "cumulative ms|spent in branch" for 9,999,999.99 noprint +column xbi_self_elapsed_time_ms heading "ms spent in|this operation" for 9,999,999.99 +column xbi_self_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xbi_self_cr_buffer_gets_row heading "Consistent|gets/row" for 999999999 +column xbi_self_cu_buffer_gets heading "Current|gets" for 999999999 +column xbi_self_cu_buffer_gets_row heading "Current|gets/row" for 999999999 +column xbi_self_disk_reads heading "Physical|read blks" for 999999999 +column xbi_self_disk_writes heading "Physical|write blks" for 999999999 +column xbi_last_memory_used heading "Memory|used (MB)" for 9,999,999.99 +column xbi_last_execution heading "Workarea|Passes" for a13 + +column xbi_sql_plan_hash_value heading "Plan Hash Value" for 9999999999 +column xbi_plan_hash_value_text noprint + +column xbi_outline_hints heading "Outline Hints" for a120 word_wrap +column xbi_notes heading "Plan|Notes" for a120 word_wrap + +column xbi_sql_id heading "SQL_ID" for a13 new_value xbi_sql_id +column xbi_sql_child_number heading "CHLD" for 9999 new_value xbi_sql_child_number +column xbi_sql_addr heading "ADDRESS" new_value xbi_sql_addr + +set feedback off + +select + 'Cursor: ' xbi_sql_id_text, + sql.sql_id xbi_sql_id, + sql.child_number xbi_sql_child_number, + sql.address xbi_sql_addr, + ' PLAN_HASH_VALUE: ' xbi_plan_hash_value_text, + sql.plan_hash_value xbi_sql_plan_hash_value, + 'Statement first parsed at: '|| sql.first_load_time ||' - '|| + round( (sysdate - to_date(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'))*86400 ) || ' seconds ago' xbi_seconds_ago +from + v$sql sql, + all_users usr +where + sql.parsing_user_id = usr.user_id +and (sql.sql_id,sql.child_number) = (('&xbi_sql_id', TO_NUMBER('&xbi_sql_child_number'))) +and is_obsolete = 'N' +/ + +WITH sq AS ( + SELECT + sp.id, sp.parent_id, sp.operation, sp.options, sp.object_owner, sp.object_name + , ss.last_elapsed_time, ss.last_cr_buffer_gets, ss.last_cu_buffer_gets, ss.last_disk_reads, ss.last_disk_writes + FROM v$sql_plan_statistics_all ss INNER JOIN + v$sql_plan sp + ON ( + sp.sql_id=ss.sql_id + AND sp.child_number=ss.child_number + AND sp.address=ss.address + AND sp.id=ss.id + ) + AND sp.sql_id='&xbi_sql_id' + AND sp.child_number = TO_NUMBER('&xbi_sql_child_number') + AND sp.address = hextoraw('&xbi_sql_addr') +), deltas AS ( + SELECT + par.id + , par.last_elapsed_time - SUM(chi.last_elapsed_time ) self_elapsed_time + , par.last_cr_buffer_gets - SUM(chi.last_cr_buffer_gets) self_cr_buffer_gets + , par.last_cu_buffer_gets - SUM(chi.last_cu_buffer_gets) self_cu_buffer_gets + , par.last_disk_reads - SUM(chi.last_disk_reads ) self_disk_reads + , par.last_disk_writes - SUM(chi.last_disk_writes ) self_disk_writes + FROM sq par LEFT OUTER JOIN + sq chi + ON chi.parent_id = par.id + GROUP BY + par.id + , par.last_elapsed_time, par.last_cr_buffer_gets, par.last_cu_buffer_gets, par.last_disk_reads, par.last_disk_writes +), combined AS ( + SELECT sq.id, sq.parent_id, sq.operation, sq.options + , sq.object_owner, sq.object_name + , sq.last_elapsed_time + , sq.last_cr_buffer_gets + , sq.last_cu_buffer_gets + , sq.last_disk_reads + , sq.last_disk_writes + , NVL(deltas.self_elapsed_time , sq.last_elapsed_time) self_elapsed_time + , NVL(deltas.self_cr_buffer_gets , sq.last_cr_buffer_gets) self_cr_buffer_gets + , NVL(deltas.self_cu_buffer_gets , sq.last_cu_buffer_gets) self_cu_buffer_gets + , NVL(deltas.self_disk_reads , sq.last_disk_reads) self_disk_reads + , NVL(deltas.self_disk_writes , sq.last_disk_writes) self_disk_writes + FROM + sq, deltas + WHERE + sq.id = deltas.id +), +adaptive_display_map AS ( + SELECT + TO_NUMBER(EXTRACT(column_value, '/row/@op' )) id + , TO_NUMBER(EXTRACT(column_value, '/row/@par')) parent_id + , TO_NUMBER(EXTRACT(column_value, '/row/@dis')) display_id + , TO_NUMBER(EXTRACT(column_value, '/row/@dep')) depth + , TO_NUMBER(EXTRACT(column_value, '/row/@skp')) skip + FROM + v$sql_plan + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(other_xml),'/*/display_map/row'))) + WHERE + sql_id = '&xbi_sql_id' + AND child_number = TO_NUMBER('&xbi_sql_child_number') + AND address = hextoraw('&xbi_sql_addr') + AND other_xml IS NOT NULL +) +select + LPAD( + CASE WHEN p.filter_predicates IS NOT NULL THEN 'F' ELSE ' ' END || + CASE WHEN p.access_predicates IS NOT NULL THEN CASE WHEN p.options LIKE 'STORAGE %' THEN 'S' ELSE 'A' END ELSE '' END || + CASE p.search_columns WHEN 0 THEN NULL ELSE '#'||TO_CHAR(p.search_columns) END + , 5) xbi_pred, + NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , p.id) xbi_id, + nvl(adm2.parent_id, p.parent_id) xbi_parent_id, + CASE WHEN p.id != 0 THEN p.position END xbi_pos, + LPAD(' ',NVL(adm.depth,p.depth),' ')|| p.operation || ' ' || p.options ||' ' + ||nvl2(p.object_name, '['||p.object_name||']', null) + xbi_plan_line, + CASE WHEN p.id = 0 THEN '>>> Plan totals >>>' ELSE p.qblock_name END xbi_qblock_name, +-- p.object_node xbi_object_node, +-- p.object_owner, +-- p.object_name, +-- p.object_alias, +-- p.distribution xbi_distribution, +-- lpad(decode(p.id,0,'T ','')||trim(to_char(round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) /1000,2),'9,999,999.00')), 14) xbi_self_elapsed_time_ms, + round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) /1000,2) xbi_self_elapsed_time_ms, + decode(p.id,0,c.last_cr_buffer_gets,c.self_cr_buffer_gets) xbi_self_cr_buffer_gets, + ps.last_starts xbi_last_starts, + ps.last_output_rows xbi_last_output_rows, + p.cardinality * ps.last_starts xbi_opt_card_times_starts, + regexp_replace(lpad(to_char(round( + CASE WHEN (NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) > 1 THEN -(NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) + WHEN (NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) < 1 THEN 1/(NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) + WHEN (NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) = 1 THEN 1 + ELSE null + END + ,0))||'x',15),'^ *x$') xbi_opt_card_misestimate, +-- c.self_cr_buffer_gets xbi_self_cr_buffer_gets, +-- c.self_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cr_buffer_gets_row, + decode(p.id,0,c.last_cu_buffer_gets,c.self_cu_buffer_gets) xbi_self_cu_buffer_gets, +-- c.self_cu_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cu_buffer_gets_row, + decode(p.id,0,c.last_disk_reads,c.self_disk_reads) xbi_self_disk_reads, + decode(p.id,0,c.last_disk_writes,c.self_disk_writes) xbi_self_disk_writes, + round(ps.last_elapsed_time/1000,2) xbi_last_elapsed_time_ms, +-- ps.last_cr_buffer_gets xbi_last_cr_buffer_gets, +-- ps.last_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_last_cr_buffer_gets_row, +-- ps.last_cu_buffer_gets xbi_last_cu_buffer_gets, +-- ps.last_cu_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_last_cu_buffer_gets_row, +-- ps.last_disk_reads xbi_last_disk_reads, +-- ps.last_disk_writes xbi_last_disk_writes, + ps.last_memory_used/1048576 xbi_last_memory_used, + ps.last_execution xbi_last_execution, + p.cost xbi_opt_cost +-- p.bytes xbi_opt_bytes, +-- p.cpu_cost xbi_cpu_cost, +-- p.io_cost xbi_io_cost, +-- p.other_tag, +-- p.other, +-- p.access_predicates, +-- p.filter_predicates, +from + v$sql_plan p + , v$sql_plan_statistics_all ps + , combined c + , adaptive_display_map adm + , adaptive_display_map adm2 +where + p.address = ps.address (+) +and p.sql_id = ps.sql_id (+) +and p.plan_hash_value = ps.plan_hash_value (+) +and p.child_number = ps.child_number (+) +and p.id = ps.id (+) +and p.id = adm.id (+) +and adm.id = adm2.id (+) +and (adm.id IS NULL or adm.skip = 0) +and p.sql_id = '&xbi_sql_id' +and p.address = hextoraw('&xbi_sql_addr') +and p.child_number = TO_NUMBER(&xbi_sql_child_number) +and ps.id = c.id (+) +order by + p.id asc +/ + +WITH adaptive_display_map AS ( + SELECT + TO_NUMBER(EXTRACT(column_value, '/row/@op' )) id + , TO_NUMBER(EXTRACT(column_value, '/row/@dis')) display_id + , TO_NUMBER(EXTRACT(column_value, '/row/@skp')) skip + FROM + v$sql_plan + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(other_xml),'/*/display_map/row'))) + WHERE + sql_id = '&xbi_sql_id' + AND child_number = TO_NUMBER('&xbi_sql_child_number') + AND address = hextoraw('&xbi_sql_addr') + AND other_xml IS NOT NULL + AND TO_NUMBER(EXTRACT(column_value, '/row/@skp')) != 1 +) +select + xbi_id2, + xbi_qblock_name, + substr(dummy,1,0)||'-' " ", -- there's an ugly reason (bug) for this hack + xbi_predicate_info +from ( + select + sp.sql_id xbi_sql_id, + LPAD(NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , sp.id), 5, ' ') xbi_id2, + sp.filter_predicates dummy, -- looks like there's a bug in 11.2.0.3 where both pred cols have to be selected + CASE WHEN sp.options LIKE 'STORAGE %' THEN 'storage' ELSE 'access' END||'('|| substr(sp.access_predicates,1,3989) || ')' xbi_predicate_info, + sp.qblock_name xbi_qblock_name + from + v$sql_plan sp + , adaptive_display_map adm + where + sp.sql_id = '&xbi_sql_id' + and sp.child_number = TO_NUMBER(&xbi_sql_child_number) + AND sp.address = HEXTORAW('&xbi_sql_addr') + and sp.access_predicates is not null + and sp.id = adm.id (+) + union all + select + sp.sql_id xbi_sql_id, + --lpad(sp.id, 5, ' ') xbi_id2, + LPAD(NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , sp.id), 5, ' ') xbi_id2, + sp.access_predicates dummy, + 'filter('|| substr(sp.filter_predicates,1,3989) || ')' xbi_predicate_info, + sp.qblock_name xbi_qblock_name + from + v$sql_plan sp + , adaptive_display_map adm + where + sp.sql_id = '&xbi_sql_id' + and sp.child_number = TO_NUMBER(&xbi_sql_child_number) + and sp.address = HEXTORAW('&xbi_sql_addr') + and sp.filter_predicates is not null + and sp.id = adm.id (+) +) +order by + xbi_id2 asc, + xbi_predicate_info asc +/ + + +-- this query can return ORA-600 in Oracle 10.2 due to Bug 5497611 - OERI[qctVCO:csform] from Xquery using XMLType constructor (Doc ID 5497611.8) +WITH sq AS ( + SELECT other_xml + FROM v$sql_plan p + WHERE + p.sql_id = '&xbi_sql_id' + AND p.child_number = &xbi_sql_child_number + AND p.address = hextoraw('&xbi_sql_addr') + AND p.other_xml IS NOT NULL -- (the other_xml is not guaranteed to always be on plan line 1) +) + SELECT ' *' " ", 'Cardinality feedback = yes' xbi_notes FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "cardinality_feedback"]') = 'yes' +UNION ALL SELECT ' *', 'SQL Stored Outline used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "outline"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "outline"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Patch used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_patch"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_patch"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Profile used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_profile"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_profile"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Plan Baseline used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "baseline"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "baseline"]') IS NOT NULL +UNION ALL SELECT ' *', 'Adaptive Plan = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "adaptive_plan"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "adaptive_plan"]') IS NOT NULL +/ + +-- === Outline Hints === +WITH sq AS ( + SELECT other_xml + FROM v$sql_plan p + WHERE + p.sql_id = '&xbi_sql_id' + AND p.child_number = &xbi_sql_child_number + AND p.address = hextoraw('&xbi_sql_addr') + AND p.other_xml IS NOT NULL +) +SELECT + SUBSTR(EXTRACTVALUE(VALUE(d), '/hint'),1,4000) xbi_outline_hints +FROM + sq + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(sq.other_xml), '/*/outline_data/hint'))) D +/ + +set feedback on +PROMPT diff --git a/tpt/xbix.sql b/tpt/xbix.sql new file mode 100644 index 0000000..78cea63 --- /dev/null +++ b/tpt/xbix.sql @@ -0,0 +1,374 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xb (eXplain Better) +-- +-- Purpose: Explain a SQL statements execution plan with execution +-- profile directly from library cache - for the last +-- SQL executed in current session (see also xbi.sql) +-- +-- Author: Tanel Poder +-- Copyright: (c) https://blog.tanelpoder.com +-- +-- Usage: 1) alter session set statistics_level = all; +-- 2) Run the statement you want to explain +-- 3) @xb.sql +-- +-- Other: You can add a GATHER_PLAN_STATISTICS hint to the statement instead +-- if you dont want to use "alter session set statistics_level" +-- for some reason (this hint works on Oracle 10.2 and higher) +-- +-- TODO: Noteworthy outstanding items are: +-- +-- * formatting, decide what columns to show by default +-- * clone to @xbad.sql for showing full adaptive plans +-- * add an option to gather/report metrics of all PX slaves (ALLSTATS ALL) +-- * currently gaps (NULL values) on some plan lines for COST will +-- mess up the Self-Cost calculation (need more sophisticated calculation) +-- +-------------------------------------------------------------------------------- + +def xbi_sql_id=&1 +def xbi_sql_child_number=&2 +def xbi_sql_addr="TODO" + +prompt -- xbi.sql: eXplain Better v1.00 for sql_id=&xbi_sql_id child=&xbi_sql_child_number - by Tanel Poder (https://blog.tanelpoder.com) + +set verify off pagesize 5000 tab off lines 999 + +column xbi_child_number heading "Ch|ld" format 999 + +column xbi_sql_id heading "SQL_ID" for a13 +column xbi_sql_child_number heading "CHLD" for 9999 +column xbi_sql_addr heading "ADDRESS" +column xbi_sql_id_text heading "" +column xbi_seconds_ago heading "First Load Time" +column xbi_id heading "Op|ID" for 9999 justify right +column xbi_parent_id heading "Par.|ID" for 9999 justify right +column xbi_id2 heading "Op|ID" for a5 justify right +column xbi_pred heading "Pred|#Col" for a5 justify right +column xbi_pos heading "#Sib|ling" for 9999 +column xbi_optimizer heading "Optimizer|Mode" format a10 +column xbi_plan_step heading "Operation" for a55 +column xbi_plan_line heading "Row Source" for a72 +column xbi_qblock_name heading "Query Block|name" for a20 PRINT +column xbi_object_name heading "Object|Name" for a30 +column xbi_object_node heading "Object|Node" for a10 +column xbi_opt_cost heading "Optimizer|Cost" for 9999999999 +column xbi_opt_self_cost heading "Optimizer|Self Cost*" for 9999999999 +column xbi_opt_card heading "Est. rows|per Start" for 999999999999 +column xbi_opt_card_times_starts heading "Est. rows|total" for 999999999999 +column xbi_opt_card_misestimate heading "Opt. Card.|misestimate" for a15 justify right +column xbi_opt_bytes heading "Estimated|output bytes" for 999999999999 +column xbi_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap +column xbi_cpu_cost heading "CPU|Cost" for 9999999 +column xbi_io_cost heading "IO|Cost" for 9999999 + +column xbi_last_output_rows heading "Real #rows|returned" for 9999999999 +column xbi_last_starts heading "Rowsource|starts" for 999999999 +column xbi_last_rows_start heading "#Rows ret/|per start" for 999999999 +column xbi_last_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xbi_last_cr_buffer_gets_row heading "Consistent|gets/row" for 999999999 +column xbi_last_cu_buffer_gets heading "Current|gets" for 999999999 +column xbi_last_cu_buffer_gets_row heading "Current|gets/row" for 999999999 +column xbi_last_disk_reads heading "Physical|read blks" for 999999999 +column xbi_last_disk_writes heading "Physical|write blks" for 999999999 +column xbi_last_elapsed_time_ms heading "cumulative ms|spent in branch" for 9,999,999.99 noprint +column xbi_self_elapsed_time_ms heading "ms spent in|this operation" for 9,999,999.99 +column xbi_self_iotime_per_blk heading "Avg ms|per blk" for 9,999.999 +column xbi_self_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xbi_self_cr_buffer_gets_row heading "Consistent|gets/row" for 999999999 +column xbi_self_cu_buffer_gets heading "Current|gets" for 999999999 +column xbi_self_cu_buffer_gets_row heading "Current|gets/row" for 999999999 +column xbi_self_disk_reads heading "Physical|read blks" for 999999999 +column xbi_self_disk_writes heading "Physical|write blks" for 999999999 +column xbi_last_memory_used heading "Memory|used (MB)" for 9,999,999.99 +column xbi_last_execution heading "Workarea|Passes" for a13 + +column xbi_sql_plan_hash_value heading "Plan Hash Value" for 9999999999 +column xbi_plan_hash_value_text noprint + +column xbi_outline_hints heading "Outline Hints" for a120 word_wrap +column xbi_notes heading "Plan|Notes" for a120 word_wrap + +column xbi_sql_id heading "SQL_ID" for a13 new_value xbi_sql_id +column xbi_sql_child_number heading "CHLD" for 9999 new_value xbi_sql_child_number +column xbi_sql_addr heading "ADDRESS" new_value xbi_sql_addr + +set feedback off + +select + 'Cursor: ' xbi_sql_id_text, + sql.sql_id xbi_sql_id, + sql.child_number xbi_sql_child_number, + sql.address xbi_sql_addr, + ' PLAN_HASH_VALUE: ' xbi_plan_hash_value_text, + sql.plan_hash_value xbi_sql_plan_hash_value, + 'Statement first parsed at: '|| sql.first_load_time ||' - '|| + round( (sysdate - to_date(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'))*86400 ) || ' seconds ago' xbi_seconds_ago +from + v$sql sql, + all_users usr +where + sql.parsing_user_id = usr.user_id +and (sql.sql_id,sql.child_number) = (('&xbi_sql_id', TO_NUMBER('&xbi_sql_child_number'))) +and is_obsolete = 'N' +/ + +WITH sq AS ( + SELECT + sp.id, sp.parent_id, sp.operation, sp.options, sp.object_owner, sp.object_name, sp.cost + , ss.last_elapsed_time, ss.last_cr_buffer_gets, ss.last_cu_buffer_gets, ss.last_disk_reads, ss.last_disk_writes + FROM v$sql_plan_statistics_all ss INNER JOIN + v$sql_plan sp + ON ( + sp.sql_id=ss.sql_id + AND sp.child_number=ss.child_number + AND sp.address=ss.address + AND sp.id=ss.id + ) + AND sp.sql_id='&xbi_sql_id' + AND sp.child_number = TO_NUMBER('&xbi_sql_child_number') + AND sp.address = hextoraw('&xbi_sql_addr') +), deltas AS ( + SELECT + par.id + , par.last_elapsed_time - SUM(chi.last_elapsed_time ) self_elapsed_time + , par.last_cr_buffer_gets - SUM(chi.last_cr_buffer_gets) self_cr_buffer_gets + , par.last_cu_buffer_gets - SUM(chi.last_cu_buffer_gets) self_cu_buffer_gets + , par.last_disk_reads - SUM(chi.last_disk_reads ) self_disk_reads + , par.last_disk_writes - SUM(chi.last_disk_writes ) self_disk_writes + , par.cost - SUM(chi.cost ) self_cost + FROM sq par LEFT OUTER JOIN + sq chi + ON chi.parent_id = par.id + GROUP BY + par.id + , par.last_elapsed_time, par.last_cr_buffer_gets, par.last_cu_buffer_gets, par.last_disk_reads, par.last_disk_writes, par.cost +), combined AS ( + SELECT sq.id, sq.parent_id, sq.operation, sq.options + , sq.object_owner, sq.object_name + , sq.last_elapsed_time + , sq.last_cr_buffer_gets + , sq.last_cu_buffer_gets + , sq.last_disk_reads + , sq.last_disk_writes + , NVL(deltas.self_elapsed_time , sq.last_elapsed_time) self_elapsed_time + , NVL(deltas.self_cr_buffer_gets , sq.last_cr_buffer_gets) self_cr_buffer_gets + , NVL(deltas.self_cu_buffer_gets , sq.last_cu_buffer_gets) self_cu_buffer_gets + , NVL(deltas.self_disk_reads , sq.last_disk_reads) self_disk_reads + , NVL(deltas.self_disk_writes , sq.last_disk_writes) self_disk_writes + , NVL(deltas.self_cost , sq.cost ) self_cost + FROM + sq, deltas + WHERE + sq.id = deltas.id +), +adaptive_display_map AS ( + SELECT + TO_NUMBER(EXTRACT(column_value, '/row/@op' )) id + , TO_NUMBER(EXTRACT(column_value, '/row/@par')) parent_id + , TO_NUMBER(EXTRACT(column_value, '/row/@dis')) display_id + , TO_NUMBER(EXTRACT(column_value, '/row/@dep')) depth + , TO_NUMBER(EXTRACT(column_value, '/row/@skp')) skip + FROM + v$sql_plan + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(other_xml),'/*/display_map/row'))) + WHERE + sql_id = '&xbi_sql_id' + AND child_number = TO_NUMBER('&xbi_sql_child_number') + AND address = hextoraw('&xbi_sql_addr') + AND other_xml IS NOT NULL +) +select + LPAD( + CASE WHEN p.filter_predicates IS NOT NULL THEN 'F' ELSE ' ' END || + CASE WHEN p.access_predicates IS NOT NULL THEN CASE WHEN p.options LIKE 'STORAGE %' THEN 'S' ELSE 'A' END ELSE '' END || + CASE p.search_columns WHEN 0 THEN NULL ELSE '#'||TO_CHAR(p.search_columns) END + , 5) xbi_pred, + NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , p.id) xbi_id, + nvl(adm2.parent_id, p.parent_id) xbi_parent_id, + CASE WHEN p.id != 0 THEN p.position END xbi_pos, + LPAD(' ',NVL(adm.depth,p.depth),' ')|| p.operation || ' ' || p.options ||' ' + ||nvl2(p.object_name, '['||p.object_name||']', null) + xbi_plan_line, + CASE WHEN p.id = 0 THEN '>>> Plan totals >>>' ELSE p.qblock_name END xbi_qblock_name, +-- p.object_node xbi_object_node, +-- p.object_owner, +-- p.object_name, +-- p.object_alias, +-- p.distribution xbi_distribution, +-- lpad(decode(p.id,0,'T ','')||trim(to_char(round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) /1000,2),'9,999,999.00')), 14) xbi_self_elapsed_time_ms, + round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) /1000,2) xbi_self_elapsed_time_ms, + decode(p.id,0,c.last_cr_buffer_gets,c.self_cr_buffer_gets) xbi_self_cr_buffer_gets, + c.self_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cr_buffer_gets_row, + ps.last_starts xbi_last_starts, + ps.last_output_rows xbi_last_output_rows, + p.cardinality xbi_opt_card, + p.cardinality * ps.last_starts xbi_opt_card_times_starts, + regexp_replace(lpad(to_char(round( + CASE WHEN (NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) > 1 THEN -(NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) + WHEN (NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) < 1 THEN 1/(NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) + WHEN (NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) = 1 THEN 1 + ELSE null + END + ,0))||'x',15),'^ *x$') xbi_opt_card_misestimate, +-- c.self_cr_buffer_gets xbi_self_cr_buffer_gets, +-- c.self_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cr_buffer_gets_row, + decode(p.id,0,c.last_cu_buffer_gets,c.self_cu_buffer_gets) xbi_self_cu_buffer_gets, + c.self_cu_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cu_buffer_gets_row, + decode(p.id,0,c.last_disk_reads,c.self_disk_reads) xbi_self_disk_reads, + decode(p.id,0,c.last_disk_writes,c.self_disk_writes) xbi_self_disk_writes, + round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) / NULLIF(decode(p.id,0,c.last_disk_reads,c.self_disk_reads) + decode(p.id,0,c.last_disk_writes,c.self_disk_writes),0) / 1000, 3) xbi_self_iotime_per_blk, + round(ps.last_elapsed_time/1000,2) xbi_last_elapsed_time_ms, +-- ps.last_cr_buffer_gets xbi_last_cr_buffer_gets, +-- ps.last_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_last_cr_buffer_gets_row, +-- ps.last_cu_buffer_gets xbi_last_cu_buffer_gets, +-- ps.last_cu_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_last_cu_buffer_gets_row, +-- ps.last_disk_reads xbi_last_disk_reads, +-- ps.last_disk_writes xbi_last_disk_writes, + ps.last_memory_used/1048576 xbi_last_memory_used, + ps.last_execution xbi_last_execution, + p.cost xbi_opt_cost, + c.self_cost xbi_opt_self_cost +-- p.bytes xbi_opt_bytes, +-- p.cpu_cost xbi_cpu_cost, +-- p.io_cost xbi_io_cost, +-- p.other_tag, +-- p.other, +-- p.access_predicates, +-- p.filter_predicates, +from + v$sql_plan p + , v$sql_plan_statistics_all ps + , combined c + , adaptive_display_map adm + , adaptive_display_map adm2 +where + p.address = ps.address (+) +and p.sql_id = ps.sql_id (+) +and p.plan_hash_value = ps.plan_hash_value (+) +and p.child_number = ps.child_number (+) +and p.id = ps.id (+) +and p.id = adm.id (+) +and adm.id = adm2.id (+) +and (adm.id IS NULL or adm.skip = 0) +and p.sql_id = '&xbi_sql_id' +and p.address = hextoraw('&xbi_sql_addr') +and p.child_number = TO_NUMBER(&xbi_sql_child_number) +and ps.id = c.id (+) +order by + p.id asc +/ + +WITH adaptive_display_map AS ( + SELECT + TO_NUMBER(EXTRACT(column_value, '/row/@op' )) id + , TO_NUMBER(EXTRACT(column_value, '/row/@dis')) display_id + , TO_NUMBER(EXTRACT(column_value, '/row/@skp')) skip + FROM + v$sql_plan + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(other_xml),'/*/display_map/row'))) + WHERE + sql_id = '&xbi_sql_id' + AND child_number = TO_NUMBER('&xbi_sql_child_number') + AND address = hextoraw('&xbi_sql_addr') + AND other_xml IS NOT NULL + AND TO_NUMBER(EXTRACT(column_value, '/row/@skp')) != 1 +) +select + xbi_id2, + xbi_qblock_name, + substr(dummy,1,0)||'-' " ", -- there's an ugly reason (bug) for this hack + xbi_predicate_info +from ( + select + sp.sql_id xbi_sql_id, + LPAD(NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , sp.id), 5, ' ') xbi_id2, + sp.filter_predicates dummy, -- looks like there's a bug in 11.2.0.3 where both pred cols have to be selected + CASE WHEN sp.options LIKE 'STORAGE %' THEN 'storage' ELSE 'access' END||'('|| substr(sp.access_predicates,1,3989) || ')' xbi_predicate_info, + sp.qblock_name xbi_qblock_name + from + v$sql_plan sp + , adaptive_display_map adm + where + sp.sql_id = '&xbi_sql_id' + and sp.child_number = TO_NUMBER(&xbi_sql_child_number) + AND sp.address = HEXTORAW('&xbi_sql_addr') + and sp.access_predicates is not null + and sp.id = adm.id (+) + union all + select + sp.sql_id xbi_sql_id, + --lpad(sp.id, 5, ' ') xbi_id2, + LPAD(NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , sp.id), 5, ' ') xbi_id2, + sp.access_predicates dummy, + 'filter('|| substr(sp.filter_predicates,1,3989) || ')' xbi_predicate_info, + sp.qblock_name xbi_qblock_name + from + v$sql_plan sp + , adaptive_display_map adm + where + sp.sql_id = '&xbi_sql_id' + and sp.child_number = TO_NUMBER(&xbi_sql_child_number) + and sp.address = HEXTORAW('&xbi_sql_addr') + and sp.filter_predicates is not null + and sp.id = adm.id (+) +) +order by + xbi_id2 asc, + xbi_predicate_info asc +/ + + +-- this query can return ORA-600 in Oracle 10.2 due to Bug 5497611 - OERI[qctVCO:csform] from Xquery using XMLType constructor (Doc ID 5497611.8) +WITH sq AS ( + SELECT other_xml + FROM v$sql_plan p + WHERE + p.sql_id = '&xbi_sql_id' + AND p.child_number = &xbi_sql_child_number + AND p.address = hextoraw('&xbi_sql_addr') + AND p.other_xml IS NOT NULL -- (the other_xml is not guaranteed to always be on plan line 1) +) + SELECT ' *' " ", 'Cardinality feedback = yes' xbi_notes FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "cardinality_feedback"]') = 'yes' +UNION ALL SELECT ' *', 'SQL Stored Outline used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "outline"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "outline"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Patch used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_patch"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_patch"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Profile used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_profile"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_profile"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Plan Baseline used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "baseline"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "baseline"]') IS NOT NULL +UNION ALL SELECT ' *', 'Adaptive Plan = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "adaptive_plan"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "adaptive_plan"]') IS NOT NULL +/ + +-- === Outline Hints === +WITH sq AS ( + SELECT other_xml + FROM v$sql_plan p + WHERE + p.sql_id = '&xbi_sql_id' + AND p.child_number = &xbi_sql_child_number + AND p.address = hextoraw('&xbi_sql_addr') + AND p.other_xml IS NOT NULL +) +SELECT + SUBSTR(EXTRACTVALUE(VALUE(d), '/hint'),1,4000) xbi_outline_hints +FROM + sq + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(sq.other_xml), '/*/outline_data/hint'))) D +/ + +set feedback on +PROMPT diff --git a/tpt/xbx.sql b/tpt/xbx.sql new file mode 100644 index 0000000..25fe6a8 --- /dev/null +++ b/tpt/xbx.sql @@ -0,0 +1,367 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xb (eXplain Better) +-- +-- Purpose: Explain a SQL statements execution plan with execution +-- profile directly from library cache - for the last +-- SQL executed in current session (see also xbi.sql) +-- +-- Author: Tanel Poder +-- Copyright: (c) https://blog.tanelpoder.com +-- +-- Usage: 1) alter session set statistics_level = all; +-- 2) Run the statement you want to explain +-- 3) @xb.sql +-- +-- Other: You can add a GATHER_PLAN_STATISTICS hint to the statement instead +-- if you dont want to use "alter session set statistics_level" +-- for some reason (this hint works on Oracle 10.2 and higher) +-- +-- TODO: Noteworthy outstanding items are: +-- * formatting, decide what columns to show by default +-- * clone to an @xbx.sql (eXtended version) with wider output and stuff like plan outline hints shown etc +-- currently you can just comment/uncomment sections in this script +-- * clone to @xbad.sql for showing full adaptive plans +-- * add an option to gather/report metrics of all PX slaves +-- +-------------------------------------------------------------------------------- + +prompt -- xb.sql: eXplain Better v1.00 for prev SQL in the current session - by Tanel Poder (https://blog.tanelpoder.com) + +set verify off pagesize 5000 tab off lines 999 + +column xbi_child_number heading "Ch|ld" format 999 + +column xbi_sql_id heading "SQL_ID" for a13 +column xbi_sql_child_number heading "CHLD" for 9999 +column xbi_sql_addr heading "ADDRESS" +column xbi_sql_id_text heading "" +column xbi_seconds_ago heading "First Load Time" +column xbi_id heading "Op|ID" for 9999 justify right +column xbi_parent_id heading "Par.|ID" for 9999 justify right +column xbi_id2 heading "Op|ID" for a5 justify right +column xbi_pred heading "Pred|#Col" for a5 justify right +column xbi_pos heading "#Sib|ling" for 9999 +column xbi_optimizer heading "Optimizer|Mode" format a10 +column xbi_plan_step heading "Operation" for a55 +column xbi_plan_line heading "Row Source" for a72 +column xbi_qblock_name heading "Query Block|name" for a20 PRINT +column xbi_object_alias heading "Object|Alias" for a20 PRINT +column xbi_object_name heading "Object|Name" for a30 +column xbi_object_node heading "Object|Node" for a10 +column xbi_opt_cost heading "Optimizer|Cost" for 9999999999 +column xbi_opt_self_cost heading "Optimizer|Self Cost*" for 9999999999 +column xbi_opt_card heading "Est. rows|per Start" for 999999999999 +column xbi_opt_card_times_starts heading "Est. rows|total" for 999999999999 +column xbi_opt_card_misestimate heading "Opt. Card.|misestimate" for a15 justify right +column xbi_opt_bytes heading "Estimated|output bytes" for 999999999999 +column xbi_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap +column xbi_cpu_cost heading "CPU|Cost" for 9999999 +column xbi_io_cost heading "IO|Cost" for 9999999 + +column xbi_last_output_rows heading "Real #rows|returned" for 9999999999 +column xbi_last_starts heading "Rowsource|starts" for 999999999 +column xbi_last_rows_start heading "#Rows ret/|per start" for 999999999 +column xbi_last_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xbi_last_cr_buffer_gets_row heading "Consistent|gets/row" for 999999999 +column xbi_last_cu_buffer_gets heading "Current|gets" for 999999999 +column xbi_last_cu_buffer_gets_row heading "Current|gets/row" for 999999999 +column xbi_last_disk_reads heading "Physical|read blks" for 999999999 +column xbi_last_disk_writes heading "Physical|write blks" for 999999999 +column xbi_last_elapsed_time_ms heading "cumulative ms|spent in branch" for 9,999,999.99 noprint +column xbi_self_elapsed_time_ms heading "ms spent in|this operation" for 9,999,999.99 +column xbi_self_iotime_per_blk heading "Avg ms|per blk" for 9,999.999 +column xbi_self_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xbi_self_cr_buffer_gets_row heading "Consistent|gets/row" for 999999999 +column xbi_self_cu_buffer_gets heading "Current|gets" for 999999999 +column xbi_self_cu_buffer_gets_row heading "Current|gets/row" for 999999999 +column xbi_self_disk_reads heading "Physical|read blks" for 999999999 +column xbi_self_disk_writes heading "Physical|write blks" for 999999999 +column xbi_last_memory_used heading "Memory|used (MB)" for 9,999,999.99 +column xbi_last_execution heading "Workarea|Passes" for a13 + +column xbi_sql_plan_hash_value heading "Plan Hash Value" for 9999999999 +column xbi_plan_hash_value_text noprint + +column xbi_outline_hints heading "Outline Hints" for a120 word_wrap +column xbi_notes heading "Plan|Notes" for a120 word_wrap + +column xbi_sql_id heading "SQL_ID" for a13 new_value xbi_sql_id +column xbi_sql_child_number heading "CHLD" for 9999 new_value xbi_sql_child_number +column xbi_sql_addr heading "ADDRESS" new_value xbi_sql_addr + +set feedback off + +select + 'Cursor: ' xbi_sql_id_text, + sql.sql_id xbi_sql_id, + sql.child_number xbi_sql_child_number, + sql.address xbi_sql_addr, + ' PLAN_HASH_VALUE: ' xbi_plan_hash_value_text, + sql.plan_hash_value xbi_sql_plan_hash_value, + 'Statement first parsed at: '|| sql.first_load_time ||' - '|| + round( (sysdate - to_date(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'))*86400 ) || ' seconds ago' xbi_seconds_ago +from + v$sql sql, + all_users usr +where + sql.parsing_user_id = usr.user_id +and (sql.sql_id,sql.child_number,sql.address) = (SELECT prev_sql_id,prev_child_number,prev_sql_addr + FROM v$session WHERE sid = USERENV('SID')) +/ + +WITH sq AS ( + SELECT + sp.id, sp.parent_id, sp.operation, sp.options, sp.object_owner, sp.object_name, sp.cost + , ss.last_elapsed_time, ss.last_cr_buffer_gets, ss.last_cu_buffer_gets, ss.last_disk_reads, ss.last_disk_writes + FROM v$sql_plan_statistics_all ss INNER JOIN + v$sql_plan sp + ON ( + sp.sql_id=ss.sql_id + AND sp.child_number=ss.child_number + AND sp.address=ss.address + AND sp.id=ss.id + ) + AND sp.sql_id='&xbi_sql_id' + AND sp.child_number = TO_NUMBER('&xbi_sql_child_number') + AND sp.address = hextoraw('&xbi_sql_addr') +), deltas AS ( + SELECT + par.id + , par.last_elapsed_time - SUM(chi.last_elapsed_time ) self_elapsed_time + , par.last_cr_buffer_gets - SUM(chi.last_cr_buffer_gets) self_cr_buffer_gets + , par.last_cu_buffer_gets - SUM(chi.last_cu_buffer_gets) self_cu_buffer_gets + , par.last_disk_reads - SUM(chi.last_disk_reads ) self_disk_reads + , par.last_disk_writes - SUM(chi.last_disk_writes ) self_disk_writes + , par.cost - SUM(chi.cost ) self_cost + FROM sq par LEFT OUTER JOIN + sq chi + ON chi.parent_id = par.id + GROUP BY + par.id + , par.last_elapsed_time, par.last_cr_buffer_gets, par.last_cu_buffer_gets, par.last_disk_reads, par.last_disk_writes, par.cost +), combined AS ( + SELECT sq.id, sq.parent_id, sq.operation, sq.options + , sq.object_owner, sq.object_name + , sq.last_elapsed_time + , sq.last_cr_buffer_gets + , sq.last_cu_buffer_gets + , sq.last_disk_reads + , sq.last_disk_writes + , NVL(deltas.self_elapsed_time , sq.last_elapsed_time) self_elapsed_time + , NVL(deltas.self_cr_buffer_gets , sq.last_cr_buffer_gets) self_cr_buffer_gets + , NVL(deltas.self_cu_buffer_gets , sq.last_cu_buffer_gets) self_cu_buffer_gets + , NVL(deltas.self_disk_reads , sq.last_disk_reads) self_disk_reads + , NVL(deltas.self_disk_writes , sq.last_disk_writes) self_disk_writes + , NVL(deltas.self_cost , sq.cost ) self_cost + FROM + sq, deltas + WHERE + sq.id = deltas.id +), +adaptive_display_map AS ( + SELECT + TO_NUMBER(EXTRACT(column_value, '/row/@op' )) id + , TO_NUMBER(EXTRACT(column_value, '/row/@par')) parent_id + , TO_NUMBER(EXTRACT(column_value, '/row/@dis')) display_id + , TO_NUMBER(EXTRACT(column_value, '/row/@dep')) depth + , TO_NUMBER(EXTRACT(column_value, '/row/@skp')) skip + FROM + v$sql_plan + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(other_xml),'/*/display_map/row'))) + WHERE + sql_id = '&xbi_sql_id' + AND child_number = TO_NUMBER('&xbi_sql_child_number') + AND address = hextoraw('&xbi_sql_addr') + AND other_xml IS NOT NULL +) +select + LPAD( + CASE WHEN p.filter_predicates IS NOT NULL THEN 'F' ELSE ' ' END || + CASE WHEN p.access_predicates IS NOT NULL THEN CASE WHEN p.options LIKE 'STORAGE %' THEN 'S' ELSE 'A' END ELSE '' END || + CASE p.search_columns WHEN 0 THEN NULL ELSE '#'||TO_CHAR(p.search_columns) END + , 5) xbi_pred, + NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , p.id) xbi_id, + nvl(adm2.parent_id, p.parent_id) xbi_parent_id, + CASE WHEN p.id != 0 THEN p.position END xbi_pos, + LPAD(' ',NVL(adm.depth,p.depth),' ')|| p.operation || ' ' || p.options ||' ' + ||nvl2(p.object_name, '['||p.object_name||']', null) + xbi_plan_line, + CASE WHEN p.id = 0 THEN '>>> Plan totals >>>' ELSE p.qblock_name END xbi_qblock_name, +-- p.object_node xbi_object_node, +-- p.distribution xbi_distribution, +-- lpad(decode(p.id,0,'T ','')||trim(to_char(round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) /1000,2),'9,999,999.00')), 14) xbi_self_elapsed_time_ms, + round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) /1000,2) xbi_self_elapsed_time_ms, + decode(p.id,0,c.last_cr_buffer_gets,c.self_cr_buffer_gets) xbi_self_cr_buffer_gets, + c.self_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cr_buffer_gets_row, + ps.last_starts xbi_last_starts, + ps.last_output_rows xbi_last_output_rows, + p.cardinality xbi_opt_card, + p.cardinality * ps.last_starts xbi_opt_card_times_starts, + regexp_replace(lpad(to_char(round( + CASE WHEN (NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) > 1 THEN -(NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) + WHEN (NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) < 1 THEN 1/(NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) + WHEN (NULLIF(ps.last_output_rows / NULLIF(p.cardinality * ps.last_starts, 0),0)) = 1 THEN 1 + ELSE null + END + ,0))||'x',15),'^ *x$') xbi_opt_card_misestimate, +-- c.self_cr_buffer_gets xbi_self_cr_buffer_gets, +-- c.self_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cr_buffer_gets_row, + decode(p.id,0,c.last_cu_buffer_gets,c.self_cu_buffer_gets) xbi_self_cu_buffer_gets, + c.self_cu_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_self_cu_buffer_gets_row, + decode(p.id,0,c.last_disk_reads,c.self_disk_reads) xbi_self_disk_reads, + decode(p.id,0,c.last_disk_writes,c.self_disk_writes) xbi_self_disk_writes, + round(decode(p.id,0,c.last_elapsed_time,c.self_elapsed_time) / NULLIF(decode(p.id,0,c.last_disk_reads,c.self_disk_reads) + decode(p.id,0,c.last_disk_writes,c.self_disk_writes),0) / 1000, 3) xbi_self_iotime_per_blk, + round(ps.last_elapsed_time/1000,2) xbi_last_elapsed_time_ms, +-- ps.last_cr_buffer_gets xbi_last_cr_buffer_gets, +-- ps.last_cr_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_last_cr_buffer_gets_row, +-- ps.last_cu_buffer_gets xbi_last_cu_buffer_gets, +-- ps.last_cu_buffer_gets / DECODE(ps.last_output_rows,0,1,ps.last_output_rows) xbi_last_cu_buffer_gets_row, +-- ps.last_disk_reads xbi_last_disk_reads, +-- ps.last_disk_writes xbi_last_disk_writes, + ps.last_memory_used/1048576 xbi_last_memory_used, + ps.last_execution xbi_last_execution, + p.cost xbi_opt_cost, + c.self_cost xbi_opt_self_cost +-- p.bytes xbi_opt_bytes, +-- p.cpu_cost xbi_cpu_cost, +-- p.io_cost xbi_io_cost, +-- p.other_tag, +-- p.other, +-- p.access_predicates, +-- p.filter_predicates, +from + v$sql_plan p + , v$sql_plan_statistics_all ps + , combined c + , adaptive_display_map adm + , adaptive_display_map adm2 +where + p.address = ps.address (+) +and p.sql_id = ps.sql_id (+) +and p.plan_hash_value = ps.plan_hash_value (+) +and p.child_number = ps.child_number (+) +and p.id = ps.id (+) +and p.id = adm.id (+) +and adm.id = adm2.id (+) +and (adm.id IS NULL or adm.skip = 0) +and p.sql_id = '&xbi_sql_id' +and p.address = hextoraw('&xbi_sql_addr') +and p.child_number = TO_NUMBER(&xbi_sql_child_number) +and ps.id = c.id (+) +order by + p.id asc +/ + +WITH adaptive_display_map AS ( + SELECT + TO_NUMBER(EXTRACT(column_value, '/row/@op' )) id + , TO_NUMBER(EXTRACT(column_value, '/row/@dis')) display_id + , TO_NUMBER(EXTRACT(column_value, '/row/@skp')) skip + FROM + v$sql_plan + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(other_xml),'/*/display_map/row'))) + WHERE + sql_id = '&xbi_sql_id' + AND child_number = TO_NUMBER('&xbi_sql_child_number') + AND address = hextoraw('&xbi_sql_addr') + AND other_xml IS NOT NULL + AND TO_NUMBER(EXTRACT(column_value, '/row/@skp')) != 1 +) +select + xbi_id2, + xbi_qblock_name, + substr(dummy,1,0)||'-' " ", -- there's an ugly reason (bug) for this hack + xbi_predicate_info +from ( + select + sp.sql_id xbi_sql_id, + LPAD(NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , sp.id), 5, ' ') xbi_id2, + sp.filter_predicates dummy, -- looks like there's a bug in 11.2.0.3 where both pred cols have to be selected + CASE WHEN sp.options LIKE 'STORAGE %' THEN 'storage' ELSE 'access' END||'('|| substr(sp.access_predicates,1,3989) || ')' xbi_predicate_info, + sp.qblock_name xbi_qblock_name + from + v$sql_plan sp + , adaptive_display_map adm + where + sp.sql_id = '&xbi_sql_id' + and sp.child_number = TO_NUMBER(&xbi_sql_child_number) + AND sp.address = HEXTORAW('&xbi_sql_addr') + and sp.access_predicates is not null + and sp.id = adm.id (+) + union all + select + sp.sql_id xbi_sql_id, + --lpad(sp.id, 5, ' ') xbi_id2, + LPAD(NVL(CASE WHEN adm.skip IS NULL THEN NULL + WHEN adm.skip = 0 THEN adm.display_id + WHEN adm.skip = 1 THEN NULL + END + , sp.id), 5, ' ') xbi_id2, + sp.access_predicates dummy, + 'filter('|| substr(sp.filter_predicates,1,3989) || ')' xbi_predicate_info, + sp.qblock_name xbi_qblock_name + from + v$sql_plan sp + , adaptive_display_map adm + where + sp.sql_id = '&xbi_sql_id' + and sp.child_number = TO_NUMBER(&xbi_sql_child_number) + and sp.address = HEXTORAW('&xbi_sql_addr') + and sp.filter_predicates is not null + and sp.id = adm.id (+) +) +order by + xbi_id2 asc, + xbi_predicate_info asc +/ + + +-- this query can return ORA-600 in Oracle 10.2 due to Bug 5497611 - OERI[qctVCO:csform] from Xquery using XMLType constructor (Doc ID 5497611.8) +WITH sq AS ( + SELECT other_xml + FROM v$sql_plan p + WHERE + p.sql_id = '&xbi_sql_id' + AND p.child_number = &xbi_sql_child_number + AND p.address = hextoraw('&xbi_sql_addr') + AND p.other_xml IS NOT NULL -- (the other_xml is not guaranteed to always be on plan line 1) +) + SELECT ' *' " ", 'Cardinality feedback = yes' xbi_notes FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "cardinality_feedback"]') = 'yes' +UNION ALL SELECT ' *', 'SQL Stored Outline used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "outline"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "outline"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Patch used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_patch"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_patch"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Profile used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_profile"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "sql_profile"]') IS NOT NULL +UNION ALL SELECT ' *', 'SQL Plan Baseline used = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "baseline"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "baseline"]') IS NOT NULL +UNION ALL SELECT ' *', 'Adaptive Plan = ' ||extractvalue(xmltype(sq.other_xml), '/*/info[@type = "adaptive_plan"]') FROM sq WHERE extractvalue(xmltype(sq.other_xml), '/*/info[@type = "adaptive_plan"]') IS NOT NULL +/ + +-- === Outline Hints === +WITH sq AS ( + SELECT other_xml + FROM v$sql_plan p + WHERE + p.sql_id = '&xbi_sql_id' + AND p.child_number = &xbi_sql_child_number + AND p.address = hextoraw('&xbi_sql_addr') + AND p.other_xml IS NOT NULL +) +SELECT + SUBSTR(EXTRACTVALUE(VALUE(d), '/hint'),1,4000) xbi_outline_hints +FROM + sq + , TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE(sq.other_xml), '/*/outline_data/hint'))) D +/ + +set feedback on +PROMPT diff --git a/tpt/xco.sql b/tpt/xco.sql new file mode 100644 index 0000000..7af0398 --- /dev/null +++ b/tpt/xco.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column xco_kqfcoidx heading IX format 99 +column xco_name heading TABLE_NAME format a30 wrap +column xco_kqfconam heading COLUMN_NAME format a30 wrap + +break on xco_name + +select + t.name xco_name, c.kqfconam xco_kqfconam, c.kqfcodty, c.kqfcosiz, c.kqfcooff, + to_number(decode(c.kqfcoidx,0,null,c.kqfcoidx)) xco_kqfcoidx +from v$fixed_table t, x$kqfco c +where t.object_id = c.kqfcotob +and upper(c.kqfconam) like upper('%&1%') +/ diff --git a/tpt/xde.sql b/tpt/xde.sql new file mode 100644 index 0000000..efaa2f4 --- /dev/null +++ b/tpt/xde.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@xde2 "%&1%" \ No newline at end of file diff --git a/tpt/xde2.sql b/tpt/xde2.sql new file mode 100644 index 0000000..09ccc8b --- /dev/null +++ b/tpt/xde2.sql @@ -0,0 +1,86 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xde.sql ( X$ DEscribe ) +-- Purpose: Describe X$ tables, column offsets and report indexed fixed table +-- columns + +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @xde + +-- @xde x$ksl% +-- +-- Other: The IDX column shows whether given X$ table column is accessible +-- via internal index (if it's not null then the column is indexed) +-- +-------------------------------------------------------------------------------- + +column xde_kqfcoidx heading IDX format 999 +column xde_name heading TABLE_NAME format a22 +column xde_kqfconam heading COLUMN_NAME format a30 +column xde_data_type heading DATA_TYPE format a20 +column xde_off_hex heading OFF_HEX format a9 + +break on xde_name + + +prompt Describe X$ tables and show indexed columns... + +select + t.kqftanam xde_name, + c.kqfconam xde_kqfconam, + decode(kqfcodty, + 1, 'VARCHAR2', + 2, 'NUMBER', + 8, 'LONG', + 9, 'VARCHAR', + 12, 'DATE', + 23, 'RAW', + 24, 'LONG RAW', + 58, 'CUSTOM OBJ', + 69, 'ROWID', + 96, 'CHAR', + 100, 'BINARY_FLOAT', + 101, 'BINARY_DOUBLE', + 105, 'MLSLABEL', + 106, 'MLSLABEL', + 111, 'REF', + 112, 'CLOB', + 113, 'BLOB', + 114, 'BFILE', + 115, 'CFILE', + 121, 'CUSTOM OBJ', + 122, 'CUSTOM OBJ', + 123, 'CUSTOM OBJ', + 178, 'TIME', + 179, 'TIME WITH TIME ZONE', + 180, 'TIMESTAMP', + 181, 'TIMESTAMP WITH TIME ZONE', + 231, 'TIMESTAMP WITH LOCAL TIME ZONE', + 182, 'INTERVAL YEAR TO MONTH', + 183, 'INTERVAL DAY TO SECOND', + 208, 'UROWID', + 'UNKNOWN') + ||'(' + ||to_char(c.kqfcosiz) + ||')' xde_data_type, +-- c.kqfcodty, + c.kqfcosiz, + c.kqfcooff offset, + lpad('0x'||trim(to_char(c.kqfcooff,'XXXXXX')),8) xde_off_hex, + to_number(decode(c.kqfcoidx,0,null,c.kqfcoidx)) xde_kqfcoidx +from +-- v$fixed_table t, + x$kqfta t, + x$kqfco c +where + c.kqfcotab = t.indx +-- t.object_id = c.kqfcotob +and + upper(t.kqftanam) like upper('&1') +/ diff --git a/tpt/xi.sql b/tpt/xi.sql new file mode 100644 index 0000000..f7bf2f5 --- /dev/null +++ b/tpt/xi.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt eXplain the execution plan for sqlid &1 child &2.... + +-- with ADAPTIVE included: +-- select * from table(dbms_xplan.display_cursor('&1',CASE WHEN '&2' = '%' THEN null ELSE '&2' END,'ALLSTATS LAST +COST +ROWS +ADAPTIVE +PEEKED_BINDS +PARTITION')); + +-- without ADAPTIVE included: +select * from table(dbms_xplan.display_cursor('&1',CASE WHEN '&2' = '%' THEN null ELSE '&2' END,'ALLSTATS LAST +COST +ROWS +PEEKED_BINDS +PARTITION')); + +-- with 19c HINT_REPORT +-- select * from table(dbms_xplan.display_cursor('&1',CASE WHEN '&2' = '%' THEN null ELSE '&2' END,'ALLSTATS LAST +COST +ROWS +PEEKED_BINDS +PARTITION +HINT_REPORT')); + diff --git a/tpt/xia.sql b/tpt/xia.sql new file mode 100644 index 0000000..30daa40 --- /dev/null +++ b/tpt/xia.sql @@ -0,0 +1,7 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Display Execution plan in advanced format for sqlid &1 + +--select * from table(dbms_xplan.display_cursor('&1',null,'ADVANCED +ALLSTATS LAST +PEEKED_BINDS')); +select * from table(dbms_xplan.display_cursor('&1',CASE WHEN '&2' = '%' THEN null ELSE '&2' END,'ADVANCED +ALLSTATS LAST +PEEKED_BINDS')); diff --git a/tpt/xiad.sql b/tpt/xiad.sql new file mode 100644 index 0000000..5b7f0c5 --- /dev/null +++ b/tpt/xiad.sql @@ -0,0 +1,11 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt eXplain the execution plan for sqlid &1 child &2.... + +-- with ADAPTIVE included: +select * from table(dbms_xplan.display_cursor('&1',CASE WHEN '&2' = '%' THEN null ELSE '&2' END,'ALLSTATS LAST +COST +ROWS +ADAPTIVE +PEEKED_BINDS +PARTITION')); + +-- without ADAPTIVE included: +-- select * from table(dbms_xplan.display_cursor('&1',CASE WHEN '&2' = '%' THEN null ELSE '&2' END,'ALLSTATS LAST +COST +ROWS +PEEKED_BINDS +PARTITION')); + diff --git a/tpt/xip.sql b/tpt/xip.sql new file mode 100644 index 0000000..1ec75ba --- /dev/null +++ b/tpt/xip.sql @@ -0,0 +1,6 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt eXplain the execution plan for sqlid &1 child &2.... + +select * from table(dbms_xplan.display_cursor('&1',CASE WHEN '&2' = '%' THEN null ELSE '&2' END,'ALLSTATS ALL +PEEKED_BINDS +PARTITION')); diff --git a/tpt/xls.sql b/tpt/xls.sql new file mode 100644 index 0000000..1e32610 --- /dev/null +++ b/tpt/xls.sql @@ -0,0 +1,15 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off +set markup html on spool on +def _xls_spoolfile=&_tpt_tempdir/xls_&_tpt_tempfile..xls +spool &_xls_spoolfile +--list +/ +spool off +set markup html off spool off +set termout on +host &_start &_xls_spoolfile + diff --git a/tpt/xm.sql b/tpt/xm.sql new file mode 100644 index 0000000..955f706 --- /dev/null +++ b/tpt/xm.sql @@ -0,0 +1,90 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xm.sql (eXplain from Memory) +-- +-- Purpose: Explain a SQL statements execution plan directly from library cache +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: Identify the hash value and and child cursor number for the query +-- you want to explain (either from v$session.sql_hash_value or by +-- searching through v$sql.sql_text +-- +-- Then run: +-- @xm +-- +-- For example: +-- @xm 593239587 0 -- this would show plan for child 0 of cursor +-- -- with hash value 593239587 +-- +-- @xm 593239587 % -- this would show all child cursors for the SQL +-- +-------------------------------------------------------------------------------- + +column xms_child_number heading Ch|ld format 9 print +column xms_id heading Op|ID format 999 +column xms_id2 heading Op|ID format a6 +column xms_pred heading Pr|ed format a2 +column xms_optimizer heading Optimizer|Mode format a10 +column xms_plan_step heading Operation for a55 +column xms_object_name heading Objcect|Name for a30 +column xms_opt_cost heading Optimizer|Cost for 9999999 +column xms_opt_card heading "Optim rows|from step" for 999999999 +column xms_opt_bytes heading "Optim bytes|from step" for 999999999 +column xms_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap + +break on xms_child_number skip 1 + +select + child_number xms_child_number, + case when access_predicates is not null then 'A' else ' ' end || + case when filter_predicates is not null then 'F' else ' ' end xms_pred, + id xms_id, + lpad(' ',depth*1,' ')||operation || ' ' || options xms_plan_step, + object_name xms_object_name, +-- search_columns, + cost xms_opt_cost, + cardinality xms_opt_card, + bytes xms_opt_bytes, + optimizer xms_optimizer +-- other_tag, +-- other, +-- distribution, +-- access_predicates, +-- filter_predicates +from + v$sql_plan +where + hash_value in (&1) +and to_char(child_number) like '&2' -- to_char is just used for convenient filtering using % for all children +/ + +select * from ( +select + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - access('|| substr(access_predicates,1,3989) || ')' xms_predicate_info +from + v$sql_plan +where + hash_value in (&1) +and to_char(child_number) like '&2' +and access_predicates is not null +union all +select + child_number, + lpad(id, 5, ' ') xms_id2, + ' - filter('|| substr(filter_predicates,1,3989) || ')' xms_predicate_info +from + v$sql_plan +where + hash_value in (&1) +and to_char(child_number) like '&2' +and filter_predicates is not null +) +order by xms_child_number, xms_id2 +/ diff --git a/tpt/xma.sql b/tpt/xma.sql new file mode 100644 index 0000000..0637cbf --- /dev/null +++ b/tpt/xma.sql @@ -0,0 +1,93 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xma.sql (eXplain from Memoryi all) +-- +-- Purpose: Explain a SQL statements execution plan directly from library cache +-- for all SQL statements cached there (or multiple) +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: Identify the hash value and and child cursor number for the query +-- you want to explain (either from v$session.sql_hash_value or by +-- searching through v$sql.sql_text +-- +-- Then run: +-- @xm +-- +-- For example: +-- @xm 593239587 0 -- this would show plan for child 0 of cursor +-- -- with hash value 593239587 +-- +-- @xm 593239587 % -- this would show all child cursors for the SQL +-- +-------------------------------------------------------------------------------- + +column xms_hash_value heading Hash_value format 9999999999 print +column xms_child_number heading Ch|ld format 9 print +column xms_id heading Op|ID format 999 +column xms_id2 heading Op|ID format a6 +column xms_pred heading Pr|ed format a2 +column xms_optimizer heading Optimizer|Mode format a10 +column xms_plan_step heading Operation for a55 +column xms_object_name heading Objcect|Name for a30 +column xms_opt_cost heading Optimizer|Cost for 9999999 +column xms_opt_card heading "Optim rows|from step" for 999999999 +column xms_opt_bytes heading "Optim bytes|from step" for 999999999 +column xms_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap + +break on xms_child_number skip 1 on xms_hash_value skip 1 + +select + hash_value xms_hash_value, + child_number xms_child_number, + case when access_predicates is not null then 'A' else ' ' end || + case when filter_predicates is not null then 'F' else ' ' end xms_pred, + id xms_id, + lpad(' ',depth*1,' ')||operation || ' ' || options xms_plan_step, + object_name xms_object_name, +-- search_columns, + cost xms_opt_cost, + cardinality xms_opt_card, + bytes xms_opt_bytes, + optimizer xms_optimizer +-- other_tag, +-- other, +-- distribution, +-- access_predicates, +-- filter_predicates +from + v$sql_plan +where + hash_value in (&1) +and to_char(child_number) like '&2' -- to_char is just used for convenient filtering using % for all children +/ + +select * from ( +select + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - access('|| substr(access_predicates,1,3989) || ')' xms_predicate_info +from + v$sql_plan +where + hash_value in (&1) +and to_char(child_number) like '&2' +and access_predicates is not null +union all +select + child_number, + lpad(id, 5, ' ') xms_id2, + ' - filter('|| substr(filter_predicates,1,3989) || ')' xms_predicate_info +from + v$sql_plan +where + hash_value in (&1) +and to_char(child_number) like '&2' +and filter_predicates is not null +) +order by xms_child_number, xms_id2 +/ diff --git a/tpt/xmai.sql b/tpt/xmai.sql new file mode 100644 index 0000000..9fa038f --- /dev/null +++ b/tpt/xmai.sql @@ -0,0 +1,172 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xmai (eXplain from Memory with object/QB alias, lookup by SQL ID) +-- +-- Purpose: Explain a SQL statements execution plan with execution +-- profile directly from library cache +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: 1) alter session set statistics_level = all; +-- 2) Run the statement you want to explain +-- 3) @xmsi +-- +-- Other: You can add a GATHER_PLAN_STATISTICS hint to the statement instead +-- if you dont want to use "alter session set statistics_level" +-- for some reason (this hint works on Oracle 10.2 and higher) +-- +-------------------------------------------------------------------------------- + +set verify off heading off feedback off linesize 299 pagesize 5000 tab off + + +column xms_child_number heading "Ch|ld" format 99 +break on xms_child_number skip 1 + +column xms_id heading Op|ID format 999 +column xms_id2 heading Op|ID format a6 +column xms_pred heading Pr|ed format a2 +column xms_optimizer heading Optimizer|Mode format a10 +column xms_plan_step heading Operation for a55 +column xms_object_name heading Object|Name for a30 +column xms_object_alias heading Object|Alias for a30 +column xms_qblock_name heading Query|Block for a30 +column xms_opt_cost heading Optimizer|Cost for 99999999999 +column xms_opt_card heading "Estimated|output rows" for 999999999999 +column xms_opt_bytes heading "Estimated|output bytes" for 999999999999 +column xms_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap +column xms_cpu_cost heading CPU|Cost for 9999999 +column xms_io_cost heading IO|Cost for 9999999 + +column xms_last_output_rows heading "Real #rows|returned" for 999999999 +column xms_last_starts heading "Rowsource|starts" for 999999999 +column xms_last_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xms_last_cu_buffer_gets heading "Current|gets" for 999999999 +column xms_last_disk_reads heading "Physical|reads" for 999999999 +column xms_last_disk_writes heading "Physical|writes" for 999999999 +column xms_last_elapsed_time_ms heading "ms spent in|operation" for 9,999,999.99 + + +--select +-- 'Warning: statistics_level is not set to ALL!'||chr(10)|| +-- 'Run: alter session set statistics_level=all before executing your query...' warning +--from +-- v$parameter +--where +-- name = 'statistics_level' +--and lower(value) != 'all' +--/ + +select --+ ordered use_nl(mys ses) use_nl(mys sql) + 'SQL ID: ' xms_sql_sql_id_text, + sql.sql_id xms_sql_id, + ' Cursor address: ' xms_cursor_address_text, + sql.address xms_sql_address, + ' | Statement first parsed at: '|| sql.first_load_time ||' | '|| + round( (sysdate - to_date(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'))*86400 ) || ' seconds ago' xms_seconds_ago +from + v$sql sql, + all_users usr +where + sql.parsing_user_id = usr.user_id +and sql.sql_id = '&1' +and to_char(sql.child_number) like '&2' +order by + sql.sql_id asc, + sql.child_number asc +/ + +set heading on + +select --+ ordered use_nl(p ps) + p.child_number xms_child_number, + case when p.access_predicates is not null then 'A' else ' ' end || + case when p.filter_predicates is not null then 'F' else ' ' end xms_pred, + p.id xms_id, + lpad(' ',p.depth*1,' ')|| p.operation || ' ' || p.options xms_plan_step, + p.object_name xms_object_name, + p.object_alias xms_object_alias, + p.qblock_name xms_qblock_name, +-- p.search_columns, +-- p.optimizer xms_optimizer, + round(ps.last_elapsed_time/1000,2) + xms_last_elapsed_time_ms, + p.cardinality xms_opt_card, + ps.last_output_rows xms_last_output_rows, + ps.last_starts xms_last_starts, + ps.last_cr_buffer_gets xms_last_cr_buffer_gets, + ps.last_cu_buffer_gets xms_last_cu_buffer_gets, + ps.last_disk_reads xms_last_disk_reads, + ps.last_disk_writes xms_last_disk_writes, + p.cost xms_opt_cost +-- p.bytes xms_opt_bytes, +-- p.cpu_cost xms_cpu_cost, +-- p.io_cost xms_io_cost, +-- p.other_tag, +-- p.other, +-- p.distribution, +-- p.access_predicates, +-- p.filter_predicates, +from + v$sql_plan p, + v$sql_plan_statistics ps +where + p.address = ps.address(+) +and p.sql_id = ps.sql_id(+) +and p.id = ps.operation_id(+) +and p.sql_id = '&1' +and to_char(p.child_number) like '&2' -- to_char is just used for convenient filtering using % for all children +order by + p.sql_id asc, + p.address asc, + p.child_number asc, + p.id asc +/ + +prompt + + +select + xms_child_number, + xms_id2, + xms_predicate_info +from ( + select + sql_id xms_sql_id, + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - access('|| substr(access_predicates,1,3989) || ')' xms_predicate_info + from + v$sql_plan + where + sql_id = '&1' + and to_char(child_number) like '&2' + and access_predicates is not null + union all + select + sql_id xms_sql_id, + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - filter('|| substr(filter_predicates,1,3989) || ')' xms_predicate_info + from + v$sql_plan + where + sql_id = '&1' + and to_char(child_number) like '&2' + and filter_predicates is not null +) +order by + xms_sql_id asc, + xms_child_number asc, + xms_id2 asc, + xms_predicate_info asc +/ + + +prompt + +set feedback on diff --git a/tpt/xmon.sql b/tpt/xmon.sql new file mode 100644 index 0000000..abef400 --- /dev/null +++ b/tpt/xmon.sql @@ -0,0 +1,85 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- experimental script +-- v$sql_plan_monitor IO figures buggy as of 12.1.0.1.0 + +COL xmon_plan_operation HEAD PLAN_LINE FOR A70 +COL xmon_key HEAD KEY FOR 9999999999999999999 JUST RIGHT + +SET FEEDBACK OFF + +SELECT + sql_id + , status + , sql_exec_start + , sql_exec_id + , key xmon_key + , ROUND(elapsed_time / 1000, 1) ela_ms + , ROUND(cpu_time / 1000, 1) cpu_ms + , ROUND(user_io_wait_time / 1000, 1) iowait_ms + , ROUND(queuing_time / 1000, 1) queue_ms + , username +FROM + v$sql_monitor +WHERE + sql_id = '&1' +AND sql_exec_start = (SELECT MAX(sql_exec_start) FROM v$sql_monitor WHERE sql_id='&1') +/ + +SET FEEDBACK ON + +SELECT +-- process_name + plan_line_id id + , LPAD(' ',plan_depth) || plan_operation + ||' '||plan_options||' ' + ||plan_object_name xmon_plan_operation +-- , refresh_count +-- , sql_exec_start +-- , first_refresh_time +-- , last_refresh_time + , first_change_time + , last_change_time + , ROUND(physical_read_bytes / 1048576) phyrd_mb + , ROUND(io_interconnect_bytes / 1048576) ret_mb + , (1-(io_interconnect_bytes/NULLIF(physical_read_bytes,0)))*100 "SAVING%" + , otherstat_group_id + , otherstat_1_id + , otherstat_1_type + , otherstat_1_value + , otherstat_2_id + , otherstat_2_type + , otherstat_2_value + , otherstat_3_id + , otherstat_3_type + , otherstat_3_value + , otherstat_4_id + , otherstat_4_type + , otherstat_4_value + , otherstat_5_id + , otherstat_5_type + , otherstat_5_value + , otherstat_6_id + , otherstat_6_type + , otherstat_6_value + , otherstat_7_id + , otherstat_7_type + , otherstat_7_value + , otherstat_8_id + , otherstat_8_type + , otherstat_8_value + , otherstat_9_id + , otherstat_9_type + , otherstat_9_value + , otherstat_10_id + , otherstat_10_type + , otherstat_10_value +FROM + v$sql_plan_monitor +WHERE + sql_id = '&1' +AND sql_exec_start = (SELECT MAX(sql_exec_start) FROM v$sql_monitor WHERE sql_id='&1') +--AND process_name = 'ora' +/ + diff --git a/tpt/xms.sql b/tpt/xms.sql new file mode 100644 index 0000000..b8432ca --- /dev/null +++ b/tpt/xms.sql @@ -0,0 +1,174 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xms (eXplain from Memory with Statistics) +-- +-- Purpose: Explain your last SQL statements execution plan with execution +-- profile directly from library cache +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: alter session set statistics_level = all; +-- Run the statement you want to explain +-- @xms +-- +-- Other: You can add a GATHER_PLAN_STATISTICS hint to the statement instead +-- if you dont want to use "alter session set statistics_level" +-- for some reason (this hint works on Oracle 10.2 and higher) +-- +-- This script uses V$SESSION.PREV_HASH_VALUE for determining last +-- statement executed in a session. This may not work on some 9i +-- versions correctly. You need to use xmsh script in these cases. +-------------------------------------------------------------------------------- + +column xms_child_number head Ch|ld format 99 +column xms_id heading Op|ID format 999 +column xms_id2 heading Op|ID format a6 +column xms_pred heading Pr|ed format a2 +column xms_optimizer heading Optimizer|Mode format a10 +column xms_plan_step heading Operation for a40 +column xms_object_name heading Object|Name for a30 +column xms_opt_cost heading Optimizer|Cost for 999999999 +column xms_opt_card heading "Estimated|output rows" for 999999999 +column xms_opt_bytes heading "Estimated|output bytes" for 999999999 +column xms_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap +column xms_cpu_cost heading CPU|Cost for 9999999 +column xms_io_cost heading IO|Cost for 9999999 + +column xms_last_output_rows heading "Real #rows|returned" for 999999999 +column xms_last_starts heading "Rowsource|starts" for 999999999 +column xms_last_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xms_last_cu_buffer_gets heading "Current|gets" for 999999999 +column xms_last_disk_reads heading "Physical|reads" for 999999999 +column xms_last_disk_writes heading "Physical|writes" for 999999999 +column xms_last_elapsed_time_ms heading "ms spent|in op." for 99999999.99 + +column xms_hash_value new_value xms_hash_value +column xms_sql_address new_value xms_sql_address + +column xms_seconds_ago for a75 +column xms_sql_hash_value_text for a20 +column xms_cursor_address_text for a35 + +set feedback off heading off + +select --+ ordered use_nl(ses) use_nl(sql) use_nl(usr) + 'SQL hash value: ' xms_sql_hash_value_text, + ses.prev_hash_value xms_hash_value, + ' Cursor address: ' xms_cursor_address_text, + ses.prev_sql_addr xms_sql_address, + ' | Statement first parsed at: '|| sql.first_load_time ||' | '|| + round( (sysdate - to_date(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'))*86400 ) || ' seconds ago' xms_seconds_ago +from + (select /*+ no_unnest */ sid from v$mystat where rownum = 1) mys, + v$session ses, + v$sql sql, + all_users usr +where + mys.sid = ses.sid +and ses.prev_hash_value = sql.hash_value +and ses.prev_sql_addr = sql.address +and sql.parsing_user_id = usr.user_id +order by + sql.child_number +/ + +select + 'Warning: statistics_level is not set to ALL!'||chr(10)|| + 'Run: alter session set statistics_level=all before executing your query'||chr(10)|| + ' or run the query with GATHER_PLAN_STATISTICS hint...' warning +from + v$parameter +where + name = 'statistics_level' +and lower(value) != 'all' +/ + +break on xms_child_number skip 1 +set heading on + +select --+ ordered use_nl(ps) + p.child_number xms_child_number, +-- ps.child_number, + case when p.access_predicates is not null then 'A' else ' ' end || + case when p.filter_predicates is not null then 'F' else ' ' end xms_pred, + p.id xms_id, + lpad(' ',p.depth*1,' ')|| p.operation || ' ' || p.options xms_plan_step, + p.object_name xms_object_name, +-- p.search_columns, +-- p.optimizer xms_optimizer, + round(ps.last_elapsed_time/1000,2) + xms_last_elapsed_time_ms, + p.cardinality xms_opt_card, + ps.last_output_rows xms_last_output_rows, + ps.last_starts xms_last_starts, + ps.last_cr_buffer_gets xms_last_cr_buffer_gets, + ps.last_cu_buffer_gets xms_last_cu_buffer_gets, + ps.last_disk_reads xms_last_disk_reads, + ps.last_disk_writes xms_last_disk_writes, + p.cost xms_opt_cost +-- p.bytes xms_opt_bytes, +-- p.cpu_cost xms_cpu_cost, +-- p.io_cost xms_io_cost, +-- p.other_tag, +-- p.other, +-- p.distribution, +-- p.access_predicates, +-- p.filter_predicates, +from + v$sql_plan p, + v$sql_plan_statistics ps +where + p.address = ps.address(+) +and p.hash_value = ps.hash_value(+) +and p.id = ps.operation_id(+) +and p.hash_value = &xms_hash_value +and p.child_number = ps.child_number(+) +and p.address = hextoraw('&xms_sql_address') +order by + p.child_number asc, + p.id asc +/ + +prompt + +select * from ( + select + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - access('|| access_predicates || ')' xms_predicate_info + from + v$sql_plan + where + hash_value = &xms_hash_value + and address = hextoraw('&xms_sql_address') + and access_predicates is not null + union all + select + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - filter('|| filter_predicates || ')' xms_predicate_info + from + v$sql_plan + where + hash_value = &xms_hash_value + and address = hextoraw('&xms_sql_address') + and filter_predicates is not null +) +order by + xms_child_number asc, + xms_id2 asc, + xms_predicate_info asc +/ + +prompt + +set feedback 5 + +column xms_hash_value clear +column xms_sql_address clear +undefine xms_hash_value +undefine xms_sql_address diff --git a/tpt/xms2.sql b/tpt/xms2.sql new file mode 100644 index 0000000..9fee3b6 --- /dev/null +++ b/tpt/xms2.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +select * from table(dbms_xplan.display_cursor(format=>'ALLSTATS LAST')); diff --git a/tpt/xmsh.sql b/tpt/xmsh.sql new file mode 100644 index 0000000..6acc59c --- /dev/null +++ b/tpt/xmsh.sql @@ -0,0 +1,172 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xmsh (eXplain from Memory with Statistics lookup by Hash value) +-- +-- Purpose: Explain a SQL statements execution plan with execution +-- profile directly from library cache +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: 1) alter session set statistics_level = all; +-- 2) Run the statement you want to explain +-- 3) @xmsh +-- +-- Other: You can add a GATHER_PLAN_STATISTICS hint to the statement instead +-- if you dont want to use "alter session set statistics_level" +-- for some reason (this hint works on Oracle 10.2 and higher) +-- +-------------------------------------------------------------------------------- + +set verify off heading off feedback off linesize 299 pagesize 5000 tab off + + +column xms_child_number heading "Ch|ld" format 99 +break on xms_child_number skip 1 + +column xms_id heading Op|ID format 999 +column xms_id2 heading Op|ID format a6 +column xms_pred heading Pr|ed format a2 +column xms_optimizer heading Optimizer|Mode format a10 +column xms_plan_step heading Operation for a55 +column xms_object_name heading Object|Name for a30 +column xms_opt_cost heading Optimizer|Cost for 99999999999 +column xms_opt_card heading "Estimated|output rows" for 999999999999 +column xms_opt_bytes heading "Estimated|output bytes" for 999999999999 +column xms_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap +column xms_cpu_cost heading CPU|Cost for 9999999 +column xms_io_cost heading IO|Cost for 9999999 + +column xms_last_output_rows heading "Real #rows|returned" for 999999999 +column xms_last_starts heading "Rowsource|starts" for 999999999 +column xms_last_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xms_last_cu_buffer_gets heading "Current|gets" for 999999999 +column xms_last_disk_reads heading "Physical|reads" for 999999999 +column xms_last_disk_writes heading "Physical|writes" for 999999999 +column xms_last_elapsed_time_ms heading "ms spent in|operation" for 9,999,999.99 + + +--select +-- 'Warning: statistics_level is not set to ALL!'||chr(10)|| +-- 'Run: alter session set statistics_level=all before executing your query...' warning +--from +-- v$parameter +--where +-- name = 'statistics_level' +--and lower(value) != 'all' +--/ + +select --+ ordered use_nl(mys ses) use_nl(mys sql) + 'SQL hash value: ' xms_sql_hash_value_text, + sql.hash_value xms_hash_value, + ' Cursor address: ' xms_cursor_address_text, + sql.address xms_sql_address, + ' | Statement first parsed at: '|| sql.first_load_time ||' | '|| + round( (sysdate - to_date(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'))*86400 ) || ' seconds ago' xms_seconds_ago +from + v$sql sql, + all_users usr +where + sql.parsing_user_id = usr.user_id +and sql.hash_value in (&1) +--and sql.hash_value = &1 +and to_char(sql.child_number) like '&2' +order by + sql.hash_value asc, + sql.child_number asc +/ + +set heading on + +select --+ ordered use_nl(p ps) + p.child_number xms_child_number, + case when p.access_predicates is not null then 'A' else ' ' end || + case when p.filter_predicates is not null then 'F' else ' ' end xms_pred, + p.id xms_id, + lpad(' ',p.depth*1,' ')|| p.operation || ' ' || p.options xms_plan_step, + p.object_name xms_object_name, +-- p.search_columns, +-- p.optimizer xms_optimizer, + round(ps.last_elapsed_time/1000,2) + xms_last_elapsed_time_ms, + p.cardinality xms_opt_card, + ps.last_output_rows xms_last_output_rows, + ps.last_starts xms_last_starts, + ps.last_cr_buffer_gets xms_last_cr_buffer_gets, + ps.last_cu_buffer_gets xms_last_cu_buffer_gets, + ps.last_disk_reads xms_last_disk_reads, + ps.last_disk_writes xms_last_disk_writes, + p.cost xms_opt_cost +-- p.bytes xms_opt_bytes, +-- p.cpu_cost xms_cpu_cost, +-- p.io_cost xms_io_cost, +-- p.other_tag, +-- p.other, +-- p.distribution, +-- p.access_predicates, +-- p.filter_predicates, +from + v$sql_plan p, + v$sql_plan_statistics ps +where + p.address = ps.address(+) +and p.hash_value = ps.hash_value(+) +and p.child_number = ps.child_number(+) +and p.id = ps.operation_id(+) +and p.hash_value in (&1) +--and p.hash_value = &1 +and to_char(p.child_number) like '&2' -- to_char is just used for convenient filtering using % for all children +order by + p.hash_value asc, + p.address asc, + p.child_number asc, + p.id asc +/ + +prompt + + +select + xms_child_number, + xms_id2, + xms_predicate_info +from ( + select + hash_value xms_hash_value, + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - access('|| substr(access_predicates,1,3980) || ')' xms_predicate_info + from + v$sql_plan + where + hash_value in (&1) + and to_char(child_number) like '&2' + and access_predicates is not null + union all + select + hash_value xms_hash_value, + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - filter('|| substr(filter_predicates,1,3980) || ')' xms_predicate_info + from + v$sql_plan + where + hash_value in (&1) +-- hash_value = &1 + and to_char(child_number) like '&2' + and filter_predicates is not null +) +order by + xms_hash_value asc, + xms_child_number asc, + xms_id2 asc, + xms_predicate_info asc +/ + + +prompt + +set feedback on diff --git a/tpt/xmsi.sql b/tpt/xmsi.sql new file mode 100644 index 0000000..972dc1c --- /dev/null +++ b/tpt/xmsi.sql @@ -0,0 +1,169 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-------------------------------------------------------------------------------- +-- +-- File name: xmsi (eXplain from Memory with Statistics lookup by SQL ID) +-- +-- Purpose: Explain a SQL statements execution plan with execution +-- profile directly from library cache +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: 1) alter session set statistics_level = all; +-- 2) Run the statement you want to explain +-- 3) @xmsi +-- +-- Other: You can add a GATHER_PLAN_STATISTICS hint to the statement instead +-- if you dont want to use "alter session set statistics_level" +-- for some reason (this hint works on Oracle 10.2 and higher) +-- +-------------------------------------------------------------------------------- + +set verify off heading off feedback off linesize 299 pagesize 5000 tab off + + +column xms_child_number heading "Ch|ld" format 99 +break on xms_child_number skip 1 + +column xms_id heading Op|ID format 999 +column xms_id2 heading Op|ID format a6 +column xms_pred heading Pr|ed format a2 +column xms_optimizer heading Optimizer|Mode format a10 +column xms_plan_step heading Operation for a55 +column xms_object_name heading Object|Name for a30 +column xms_opt_cost heading Optimizer|Cost for 99999999999 +column xms_opt_card heading "Estimated|output rows" for 999999999999 +column xms_opt_bytes heading "Estimated|output bytes" for 999999999999 +column xms_predicate_info heading "Predicate Information (identified by operation id):" format a100 word_wrap +column xms_cpu_cost heading CPU|Cost for 9999999 +column xms_io_cost heading IO|Cost for 9999999 + +column xms_last_output_rows heading "Real #rows|returned" for 999999999 +column xms_last_starts heading "Rowsource|starts" for 999999999 +column xms_last_cr_buffer_gets heading "Consistent|gets" for 999999999 +column xms_last_cu_buffer_gets heading "Current|gets" for 999999999 +column xms_last_disk_reads heading "Physical|reads" for 999999999 +column xms_last_disk_writes heading "Physical|writes" for 999999999 +column xms_last_elapsed_time_ms heading "ms spent in|operation" for 9,999,999.99 + + +--select +-- 'Warning: statistics_level is not set to ALL!'||chr(10)|| +-- 'Run: alter session set statistics_level=all before executing your query...' warning +--from +-- v$parameter +--where +-- name = 'statistics_level' +--and lower(value) != 'all' +--/ + +select --+ ordered use_nl(mys ses) use_nl(mys sql) + 'SQL ID: ' xms_sql_sql_id_text, + sql.sql_id xms_sql_id, + ' Cursor address: ' xms_cursor_address_text, + sql.address xms_sql_address, + ' | Statement first parsed at: '|| sql.first_load_time ||' | '|| + round( (sysdate - to_date(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'))*86400 ) || ' seconds ago' xms_seconds_ago +from + v$sql sql, + all_users usr +where + sql.parsing_user_id = usr.user_id +and sql.sql_id = '&1' +and to_char(sql.child_number) like '&2' +order by + sql.sql_id asc, + sql.child_number asc +/ + +set heading on + +select --+ ordered use_nl(p ps) + p.child_number xms_child_number, + case when p.access_predicates is not null then 'A' else ' ' end || + case when p.filter_predicates is not null then 'F' else ' ' end xms_pred, + p.id xms_id, + lpad(' ',p.depth*1,' ')|| p.operation || ' ' || p.options xms_plan_step, + p.object_name xms_object_name, +-- p.search_columns, +-- p.optimizer xms_optimizer, + round(ps.last_elapsed_time/1000,2) + xms_last_elapsed_time_ms, + p.cardinality xms_opt_card, + ps.last_output_rows xms_last_output_rows, + ps.last_starts xms_last_starts, + ps.last_cr_buffer_gets xms_last_cr_buffer_gets, + ps.last_cu_buffer_gets xms_last_cu_buffer_gets, + ps.last_disk_reads xms_last_disk_reads, + ps.last_disk_writes xms_last_disk_writes, + p.cost xms_opt_cost +-- p.bytes xms_opt_bytes, +-- p.cpu_cost xms_cpu_cost, +-- p.io_cost xms_io_cost, +-- p.other_tag, +-- p.other, +-- p.distribution, +-- p.access_predicates, +-- p.filter_predicates, +from + v$sql_plan p, + v$sql_plan_statistics ps +where + p.address = ps.address(+) +and p.sql_id = ps.sql_id(+) +and p.child_number = ps.child_number(+) +and p.id = ps.operation_id(+) +and p.sql_id = '&1' +and to_char(p.child_number) like '&2' -- to_char is just used for convenient filtering using % for all children +order by + p.sql_id asc, + p.address asc, + p.child_number asc, + p.id asc +/ + +prompt + + +select + xms_child_number, + xms_id2, + xms_predicate_info +from ( + select + sql_id xms_sql_id, + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - access('|| substr(access_predicates,1,3989) || ')' xms_predicate_info + from + v$sql_plan + where + sql_id = '&1' + and to_char(child_number) like '&2' + and access_predicates is not null + union all + select + sql_id xms_sql_id, + child_number xms_child_number, + lpad(id, 5, ' ') xms_id2, + ' - filter('|| substr(filter_predicates,1,3989) || ')' xms_predicate_info + from + v$sql_plan + where + sql_id = '&1' + and to_char(child_number) like '&2' + and filter_predicates is not null +) +order by + xms_sql_id asc, + xms_child_number asc, + xms_id2 asc, + xms_predicate_info asc +/ + + +prompt + +set feedback on diff --git a/tpt/xp.sql b/tpt/xp.sql new file mode 100644 index 0000000..ce7c724 --- /dev/null +++ b/tpt/xp.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt eXplain with Profile: Running DBMS_SQLTUNE.REPORT_SQL_MONITOR for SID &1.... +@@xprof ALL TEXT SESSION_ID &1 diff --git a/tpt/xpa.sql b/tpt/xpa.sql new file mode 100644 index 0000000..5128149 --- /dev/null +++ b/tpt/xpa.sql @@ -0,0 +1,16 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt eXplain with Profile: Running DBMS_SQLTUNE.REPORT_SQL_MONITOR for SID &1.... (11.2+) + +set termout off heading off linesize 10000 trimspool on trimout on + +spool &SQLPATH/tmp/xprof_&_i_inst..html + +@@xprof ALL ACTIVE SESSION_ID &1 + +spool off + +host &_start &SQLPATH/tmp/xprof_&_i_inst..html +set termout on heading on linesize 999 + diff --git a/tpt/xph.sql b/tpt/xph.sql new file mode 100644 index 0000000..ce65eef --- /dev/null +++ b/tpt/xph.sql @@ -0,0 +1,13 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT eXplain with Profile: Running DBMS_SQLTUNE.REPORT_SQL_MONITOR for SID &1.... + +SET TERMOUT OFF +SPOOL &SQLPATH/tmp/xprof_&_i_inst..html + +@@xprof ALL HTML SESSION_ID &1 + +SPOOL OFF +HOST &_start &SQLPATH/tmp/xprof_&_i_inst..html +SET TERMOUT ON diff --git a/tpt/xpi.sql b/tpt/xpi.sql new file mode 100644 index 0000000..1710749 --- /dev/null +++ b/tpt/xpi.sql @@ -0,0 +1,5 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt eXplain with Profile: Running DBMS_SQLTUNE.REPORT_SQL_MONITOR for SQL_ID &1.... +@@xprof ALL TEXT SQL_ID "'&1'" diff --git a/tpt/xpia.sql b/tpt/xpia.sql new file mode 100644 index 0000000..4b3a214 --- /dev/null +++ b/tpt/xpia.sql @@ -0,0 +1,14 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt eXplain with Profile: Running DBMS_SQLTUNE.REPORT_SQL_MONITOR for SQL_ID &1.... (11.2+) + +SET TERMOUT OFF +SPOOL &SQLPATH/tmp/xprof_&_i_inst..html + +@@xprof ALL ACTIVE SQL_ID "'&1'" + +SPOOL OFF +HOST &_start &SQLPATH/tmp/xprof_&_i_inst..html +SET TERMOUT ON + diff --git a/tpt/xpih.sql b/tpt/xpih.sql new file mode 100644 index 0000000..3102cd9 --- /dev/null +++ b/tpt/xpih.sql @@ -0,0 +1,17 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +PROMPT eXplain with Profile: Running DBMS_SQLTUNE.REPORT_SQL_MONITOR for SQL_ID &1.... (11.2+) + +SET TERMOUT OFF + +SPOOL &SQLPATH/tmp/xprof_&_i_inst..html + +@@xprof ALL HTML SQL_ID "'&1'" + +SPOOL OFF + +host &_start &SQLPATH/tmp/xprof_&_i_inst..html + +SET TERMOUT ON + diff --git a/tpt/xplto.sql b/tpt/xplto.sql new file mode 100644 index 0000000..6f944a4 --- /dev/null +++ b/tpt/xplto.sql @@ -0,0 +1,10 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +prompt Show execution plan operations and options matching &1 (11g+) + +SELECT RPAD('OPERATION',20) "TYPE", indx, TO_CHAR(indx,'XX') hex, xplton_name FROM x$xplton WHERE lower(xplton_name) LIKE lower('%&1%') +UNION ALL +SELECT 'OPTION', indx, TO_CHAR(indx,'XX'), xpltoo_name FROM x$xpltoo WHERE lower(xpltoo_name) LIKE lower('%&1%') +/ + diff --git a/tpt/xpm.sql b/tpt/xpm.sql new file mode 100644 index 0000000..f04dd54 --- /dev/null +++ b/tpt/xpm.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +@@xp &mysid diff --git a/tpt/xprof.sql b/tpt/xprof.sql new file mode 100644 index 0000000..bd347b1 --- /dev/null +++ b/tpt/xprof.sql @@ -0,0 +1,18 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--prompt Running DBMS_SQLTUNE.REPORT_SQL_MONITOR for SID &3.... + +SET HEADING OFF + +SELECT + DBMS_SQLTUNE.REPORT_SQL_MONITOR( + &3=>&4, + report_level=>'&1', + type => '&2', + inst_id => -1) as report +FROM dual +/ + +SET HEADING ON + diff --git a/tpt/xr.sql b/tpt/xr.sql new file mode 100644 index 0000000..42b19da --- /dev/null +++ b/tpt/xr.sql @@ -0,0 +1,20 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +set markup HTML ON HEAD "&1" BODY "" TABLE "border='1' align='center' summary='Script output'" SPOOL ON ENTMAP OFF PREFORMAT OFF + +set feedback off +spool %SQLPATH%\tmp\output_&_connect_identifier..xls + +clear buffer +--prompt &1 +1 &1 +/ + +spool off +set markup html off spool off feedback on + +host start %SQLPATH%\tmp\output_&_connect_identifier..xls +set termout on diff --git a/tpt/xs.sql b/tpt/xs.sql new file mode 100644 index 0000000..9410098 --- /dev/null +++ b/tpt/xs.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +set termout off + +set markup HTML ON HEAD "&1" BODY "" TABLE "border='1' align='center' summary='Script output'" SPOOL ON ENTMAP OFF PREFORMAT OFF + +define _tptmode=html + +def _xs_spoolfile=&_tpt_tempdir/html_&_tpt_tempfile..xls + +spool &_xs_spoolfile + +@&1 + +spool off +set markup html off spool off +define _tptmode=normal + +host &_start &_xs_spoolfile +set termout on diff --git a/tpt/xsid.sql b/tpt/xsid.sql new file mode 100644 index 0000000..5145881 --- /dev/null +++ b/tpt/xsid.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM TABLE(SELECT DBMS_XPLAN.DISPLAY_CURSOR(sql_id,sql_child_number,'+PEEKED_BINDS +PARALLEL +PARTITION ALLSTATS LAST') FROM v$session WHERE sid IN (&1)); diff --git a/tpt/xsida.sql b/tpt/xsida.sql new file mode 100644 index 0000000..ef99cd4 --- /dev/null +++ b/tpt/xsida.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +SELECT * FROM TABLE(SELECT DBMS_XPLAN.DISPLAY_CURSOR(sql_id,sql_child_number,'ADVANCED +PARALLEL ALLSTATS LAST') FROM v$session WHERE sid IN (&1)); diff --git a/tpt/xt.sql b/tpt/xt.sql new file mode 100644 index 0000000..4de4037 --- /dev/null +++ b/tpt/xt.sql @@ -0,0 +1,74 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +column xt_time heading relative_time_sec format 99999999999.999999 +column xt_seq# heading seq# format 99999999999999 +column xtrace_data heading data format a180 word_wrap +column xt_event heading event format 999999 +column xt_op heading op format 999 +column xt_sid heading sid format 999999 +column xt_file_loc heading file.c for a20 + + +select + time/1000000 xt_time, + seq# xt_seq#, + event xt_event, + file_loc xt_file_loc, -- 11g + "FUNCTION", -- 11g +-- operation, -- 11g +-- section, -- 11g +-- op xt_op, + sid xt_sid, + -- data xtrace_data, + CASE event + WHEN 10812 THEN + 'rfile='||RPAD( + DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE( + TO_NUMBER( + SUBSTR(REPLACE(data,'0x',''),7,2)||SUBSTR(REPLACE(data,'0x',''),5,2)||SUBSTR(REPLACE(data,'0x',''),3,2)||SUBSTR(REPLACE(data,'0x',''),1,2) + , 'XXXXXXXX' + ) + ),4 + )|| + ' block='||RPAD( + DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK( + TO_NUMBER( + SUBSTR(REPLACE(data,'0x',''),7,2)||SUBSTR(REPLACE(data,'0x',''),5,2)||SUBSTR(REPLACE(data,'0x',''),3,2)||SUBSTR(REPLACE(data,'0x',''),1,2) + , 'XXXXXXXX' + ) + ),8 + )|| + ' cr_scn='||TO_CHAR( + TO_NUMBER( + SUBSTR(REPLACE(data,'0x',''),41,2)||SUBSTR(REPLACE(data,'0x',''),39,2)||SUBSTR(REPLACE(data,'0x',''),37,2)||SUBSTR(REPLACE(data,'0x',''),35,2) + , 'XXXXXXXX' + ) + ) + ELSE + data + END AS xtrace_data +from + x$trace +where + &1 +-- sid in (&1) +and time > (select max(time)-10000000000 from x$trace) +--and data not like 'KSL WAIT%' +and seq# > &_xt_seq +order by + time asc +, seq# asc +/ + +set termout off + +def _xt_seq=0 + +column xtseqsave new_value _xt_seq noprint + +select max(seq#) xtseqsave from x$trace +where sid = (select sid from v$mystat where rownum = 1); + +set termout on + diff --git a/tpt/xte.sql b/tpt/xte.sql new file mode 100644 index 0000000..8c5d764 --- /dev/null +++ b/tpt/xte.sql @@ -0,0 +1,21 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +--col xte_procs head ENABLED_FOR_ORAPIDS for a100 word_wrap +col procs head ENABLED_FOR_ORAPIDS for a100 word_wrap + +select +-- event, +-- trclevel, +-- status, +-- to_char(flags, 'XXXXXXXX') flags, +-- procs xte_procs + * +from + x$trace_events +where + procs is not null +order by + event +/ + diff --git a/tpt/xtreset.sql b/tpt/xtreset.sql new file mode 100644 index 0000000..aef101c --- /dev/null +++ b/tpt/xtreset.sql @@ -0,0 +1,4 @@ +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +def _xt_seq=0 diff --git a/tpt/xx.sql b/tpt/xx.sql new file mode 100644 index 0000000..e2ec2dd --- /dev/null +++ b/tpt/xx.sql @@ -0,0 +1,37 @@ +. +-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. + +-- 10g2+ + +prompt Display execution plan for last statement for this session from library cache... + +-- select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +COST +PEEKED_BINDS')); + +-- this is 10gR1 command (or @x101.sql) +-- +-- select * from table(dbms_xplan.display_cursor(null,null,'RUNSTATS_LAST')); + +-- in 9.2 use @xm +-- can be % if you want all children + +def _x_temp_env=&_tpt_tempdir/env_&_tpt_tempfile..sql +def _x_temp_sql=&_tpt_tempdir/sql_&_tpt_tempfile..sql + +set termout off +store set &_x_temp_env replace +save &_x_temp_sql replace +set termout on + +prompt Showing allstats >>>ALL<< r + 1* select event, wait_class, sql_id from v$session where sid = 134 + +EVENT WAIT_CLASS +---------------------------------------------------------------- ---------------------------------------------------------------- +SQL_ID +------------- +db file sequential read User I/O +a87bp8vnpnckt + + +sys@GLIMS> r + 1* select event, wait_class, sql_id from v$session where sid = 134 + +EVENT WAIT_CLASS +---------------------------------------------------------------- ---------------------------------------------------------------- +SQL_ID +------------- +db file sequential read User I/O +a87bp8vnpnckt + + +sys@GLIMS> select * from table(dbms_xplan.display_cursor('a87bp8vnpnckt')); + +PLAN_TABLE_OUTPUT +---------------------------------------------------------------------------------------------------------------------------------- +SQL_ID a87bp8vnpnckt, child number 0 +------------------------------------- +SELECT /*+ INDEX_ASC(T1 RSLT_ID) */ T0.RSTI_ID +unique_id_0,T0.RSTI_ACTION,T0.RSTI_RESULT,T1.RSLT_ID +unique_id_1,T1.RSLT_ID,T1.RSLT_OBJECT,T1.RSLT_OBJECTTIME,T1.RSLT_SPECIME +N,T1.RSLT_PROPERTY,T1.RSLT_PROPERTYOUTPUT,T1.RSLT_QCPOPULATION,T1.RSLT_R +AWVALUE,T1.RSLT_RAWUNIT,T1.RSLT_COMPARATOR,T1.RSLT_MANTISSA,T1.RSLT_EXPO +NENT,T1.RSLT_PROPERTYCHOICE,T1.RSLT_SEVERITY,T1.RSLT_STATUS,T1.RSLT_UNSO +LICITED,T1.RSLT_PHONESTATUS,T1.RSLT_NEEDSMANUALVALIDATION,T1.RSLT_NORM,T +1.RSLT_ALTERNATEUNITNORM,T1.RSLT_ORIGIN,T1.RSLT_CHANNELQUALITY,T1.RSLT_N +ORMSEVERITY,T1.RSLT_DELTANORMSEVERITY,T1.RSLT_QCSEVERITY,T1.RSLT_STATION +SEVERITY,T1.RSLT_MANUALSEVERITY,T1.RSLT_EXTERNALCOMMENT,T1.RSLT_INTERNAL +COMMENT,T1.RSLT_AVAILABILITYUSER,T1.RSLT_AVAILABILITYTIME,T1.RSLT_CONFIR +MATIONUSER,T1.RSLT_CONFIRMATIONTIME,T1.RSLT_VALIDATIONUSER,T1.RSLT_VALID +ATIONTIME,T1.RSLT_REJECTIONUSER,T1.RSLT_REJECTIONTIME,T1.RSLT_REJECTIONR +EASON,T1.RSLT_PREDECESSOR,T1.RSLT_ASSESSMENTCOUNT,T1.RSLT_CREATIONUSER,T +1.RSLT_CREATIONTIME,T1.RSLT_LASTUPDA + +Plan hash value: 442047200 + +----------------------------------------------------------------------------------------------- +| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | +----------------------------------------------------------------------------------------------- +| 0 | SELECT STATEMENT | | | | 11 (100)| | +| 1 | SORT ORDER BY | | 3 | 987 | 11 (10)| 00:00:01 | +|* 2 | FILTER | | | | | | +| 3 | NESTED LOOPS | | | | | | +| 4 | NESTED LOOPS | | 3 | 987 | 10 (0)| 00:00:01 | +| 5 | TABLE ACCESS BY INDEX ROWID| RESULTINPUT | 3 | 54 | 4 (0)| 00:00:01 | +|* 6 | INDEX RANGE SCAN | RSTI_ACTION | 3 | | 3 (0)| 00:00:01 | +|* 7 | INDEX UNIQUE SCAN | RSLT_ID | 1 | | 1 (0)| 00:00:01 | +|* 8 | TABLE ACCESS BY INDEX ROWID | RESULT | 1 | 311 | 2 (0)| 00:00:01 | +----------------------------------------------------------------------------------------------- + +Predicate Information (identified by operation id): +--------------------------------------------------- + + 2 - filter(TO_NUMBER(:2)<=TO_NUMBER(:3)) + 6 - access("T0"."RSTI_ACTION"=TO_NUMBER(:1)) + 7 - access("T0"."RSTI_RESULT"="T1"."RSLT_ID") + 8 - filter(("T1"."RSLT_PROPERTY"=TO_NUMBER(:4) AND "T1"."RSLT_COMPARATOR" IS NULL + AND "T1"."RSLT_STATUS"<=TO_NUMBER(:3) AND "T1"."RSLT_STATUS">=TO_NUMBER(:2))) + + +43 rows selected. + +sys@GLIMS> select sql_fulltext from v$sql where sql_id = 'a87bp8vnpnckt' and rownum = 1; + +SQL_FULLTEXT +-------------------------------------------------------------------------------- +SELECT /*+ INDEX_ASC(T1 RSLT_ID) */ T0.RSTI_ID unique_id_0,T0.RSTI_ACTION,T0.RST +I_RESULT,T1.RSLT_ID unique_id_1,T1.RSLT_ID,T1.RSLT_OBJECT,T1.RSLT_OBJECTTIME,T1. +RSLT_SPECIMEN,T1.RSLT_PROPERTY,T1.RSLT_PROPERTYOUTPUT,T1.RSLT_QCPOPULATION,T1.RS +LT_RAWVALUE,T1.RSLT_RAWUNIT,T1.RSLT_COMPARATOR,T1.RSLT_MANTISSA,T1.RSLT_EXPONENT +,T1.RSLT_PROPERTYCHOICE,T1.RSLT_SEVERITY,T1.RSLT_STATUS,T1.RSLT_UNSOLICITED,T1.R +SLT_PHONESTATUS,T1.RSLT_NEEDSMANUALVALIDATION,T1.RSLT_NORM,T1.RSLT_ALTERNATEUNIT +NORM,T1.RSLT_ORIGIN,T1.RSLT_CHANNELQUALITY,T1.RSLT_NORMSEVERITY,T1.RSLT_DELTANOR +MSEVERITY,T1.RSLT_QCSEVERITY,T1.RSLT_STATIONSEVERITY,T1.RSLT_MANUALSEVERITY,T1.R +SLT_EXTERNALCOMMENT,T1.RSLT_INTERNALCOMMENT,T1.RSLT_AVAILABILITYUSER,T1.RSLT_AVA +ILABILITYTIME,T1.RSLT_CONFIRMATIONUSER,T1.RSLT_CONFIRMATIONTIME,T1.RSLT_VALIDATI +ONUSER,T1.RSLT_VALIDATIONTIME,T1.RSLT_REJECTIONUSER,T1.RSLT_REJECTIONTIME,T1.RSL +T_REJECTIONREASON,T1.RSLT_PREDECESSOR,T1.RSLT_ASSESSMENTCOUNT,T1.RSLT_CREATIONUS +ER,T1.RSLT_CREATIONTIME,T1.RSLT_LASTUPDATEUSER,T1.RSLT_LASTUPDATETIME,T1.RSLT_VE +RSION,T1.RSLT_CONFIRMATIONMETHOD,T1.RSLT_VALIDATIONMETHOD,T1.RSLT_ORDER,T1.RSLT_ +HASDUPLICATE,T1.RSLT_URGENCY,T1.RSLT_HASREQUESTCOMMENT,T1.RSLT_ORIGINAL,T1.RSLT_ +ISDUPLICATE,T1.RSLT_LOG,T1.RSLT_FIRSTREPORTTIME,T1.RSLT_LASTREPORTTIME,T1.RSLT_D +EPARTMENT,T1.RSLT_MODIFICATIONMETHOD,T1.RSLT_NEEDSMANUALCONFIRM,T1.RSLT_REFERENC +ETIME,T1.RSLT_DYNAMICTYPE,T1.RSLT_RESTRICTEDVALIDATOR,T1.RSLT_EXPERTSYSTEMFLAGS, +T1.RSLT_SHIFT,T1.RSLT_PHONEMARKMETHOD,T1.RSLT_METHOD,T1.RSLT_REQDILUTIONFACTOR,T +1.RSLT_REQDILUTIONCONDITION,T1.RSLT_DILUTIONMODE,T1.RSLT_EFFDILUTIONCONDITION,T1 +.RSLT_EFFDILUTIONFACTOR,T1.RSLT_EXTERNALCOMMENTTIME FROM ORAGLIMS.RESULTINPUT T +0,ORAGLIMS.RESULT T1 WHERE ((T0.RSTI_ACTION = :1 AND T0.RSTI_RESULT = T1.RSLT_I +D AND T1.RSLT_STATUS >= :2 AND T1.RSLT_STATUS <= :3 AND T1.RSLT_PROPERTY = :4 AN +D T1.RSLT_COMPARATOR IS NULL )) ORDER BY T0.RSTI_ACTION, T1.RSLT_ID + +select /*+ INDEX_ASC(t1 rslt_id) */ + t0.rsti_id unique_id_0,t0.rsti_action,t0.rsti_result,t1.rslt_id unique_id_1, + t1.rslt_id,t1.rslt_object,t1.rslt_objecttime,t1.rslt_specimen,t1.rslt_property,t1. + rslt_propertyoutput,t1.rslt_qcpopulation,t1.rslt_rawvalue,t1.rslt_rawunit, + t1.rslt_comparator,t1.rslt_mantissa,t1.rslt_exponent,t1.rslt_propertychoice, + t1.rslt_severity,t1.rslt_status,t1.rslt_unsolicited,t1.rslt_phonestatus, + t1.rslt_needsmanualvalidation,t1.rslt_norm,t1.rslt_alternateunitnorm,t1.rslt_origin, + t1.rslt_channelquality,t1.rslt_normseverity,t1.rslt_deltanormseverity,t1.rslt_qcseverity, + t1.rslt_stationseverity,t1.rslt_manualseverity,t1.rslt_externalcomment, + t1.rslt_internalcomment,t1.rslt_availabilityuser,t1.rslt_availabilitytime, + t1.rslt_confirmationuser,t1.rslt_confirmationtime,t1.rslt_validationuser, + t1.rslt_validationtime,t1.rslt_rejectionuser,t1.rslt_rejectiontime,t1.rslt_rejectionreason, + t1.rslt_predecessor,t1.rslt_assessmentcount,t1.rslt_creationuser,t1.rslt_creationtime, + t1.rslt_lastupdateuser,t1.rslt_lastupdatetime,t1.rslt_version,t1.rslt_confirmationmethod, + t1.rslt_validationmethod,t1.rslt_order,t1.rslt_hasduplicate,t1.rslt_urgency, + t1.rslt_hasrequestcomment,t1.rslt_original,t1.rslt_isduplicate,t1.rslt_log, + t1.rslt_firstreporttime,t1.rslt_lastreporttime,t1.rslt_department,t1.rslt_modificationmethod, + t1.rslt_needsmanualconfirm,t1.rslt_referencetime,t1.rslt_dynamictype,t1.rslt_restrictedvalidator, + t1.rslt_expertsystemflags,t1.rslt_shift,t1.rslt_phonemarkmethod,t1.rslt_method, + t1.rslt_reqdilutionfactor,t1.rslt_reqdilutioncondition,t1.rslt_dilutionmode, + t1.rslt_effdilutioncondition,t1.rslt_effdilutionfactor,t1.rslt_externalcommenttime +from oraglims.resultinput t0,oraglims.result t1 + where (( t0.rsti_action = :1 + and t0.rsti_result = t1.rslt_id + and t1.rslt_status >= :2 + and t1.rslt_status <= :3 + and t1.rslt_property = :4 + and t1.rslt_comparator is null + ) + ) +order by t0.rsti_action, t1.rslt_id + diff --git a/vdh/Edit.001 b/vdh/Edit.001 new file mode 100644 index 0000000..3dd02b4 --- /dev/null +++ b/vdh/Edit.001 @@ -0,0 +1,26 @@ +PARSING IN CURSOR #47505495601448 len=1907 dep=0 uid=70 oct=3 lid=70 tim=1303377501916730 hv=3915002457 ad='c9fda7d8' sqlid='a87bp8vnpnckt' +SELECT /*+ INDEX_ASC(T1 RSLT_ID) */ T0.RSTI_ID unique_id_0,T0.RSTI_ACTION,T0.RSTI_RESULT,T1.RSLT_ID unique_id_1,T1.RSLT_ID,T1.RSLT_OBJECT,T1.RSLT_OBJECTTIME,T1.RSLT_SPECIMEN,T1.RSLT_PROPERTY,T1.RSLT_PROPERTYOUTPUT,T1.RSLT_QCPOPULATION,T1.RSLT_RAWVALUE,T1.RSLT_RAWUNIT,T1.RSLT_COMPARATOR,T1.RSLT_MANTISSA,T1.RSLT_EXPONENT,T1.RSLT_PROPERTYCHOICE,T1.RSLT_SEVERITY,T1.RSLT_STATUS,T1.RSLT_UNSOLICITED,T1.RSLT_PHONESTATUS,T1.RSLT_NEEDSMANUALVALIDATION,T1.RSLT_NORM,T1.RSLT_ALTERNATEUNITNORM,T1.RSLT_ORIGIN,T1.RSLT_CHANNELQUALITY,T1.RSLT_NORMSEVERITY,T1.RSLT_DELTANORMSEVERITY,T1.RSLT_QCSEVERITY,T1.RSLT_STATIONSEVERITY,T1.RSLT_MANUALSEVERITY,T1.RSLT_EXTERNALCOMMENT,T1.RSLT_INTERNALCOMMENT,T1.RSLT_AVAILABILITYUSER,T1.RSLT_AVAILABILITYTIME,T1.RSLT_CONFIRMATIONUSER,T1.RSLT_CONFIRMATIONTIME,T1.RSLT_VALIDATIONUSER,T1.RSLT_VALIDATIONTIME,T1.RSLT_REJECTIONUSER,T1.RSLT_REJECTIONTIME,T1.RSLT_REJECTIONREASON,T1.RSLT_PREDECESSOR,T1.RSLT_ASSESSMENTCOUNT,T1.RSLT_CREATIONUSER,T1.RSLT_CREATIONTIME,T1.RSLT_LASTUPDATEUSER,T1.RSLT_LASTUPDATETIME,T1.RSLT_VERSION,T1.RSLT_CONFIRMATIONMETHOD,T1.RSLT_VALIDATIONMETHOD,T1.RSLT_ORDER,T1.RSLT_HASDUPLICATE,T1.RSLT_URGENCY,T1.RSLT_HASREQUESTCOMMENT,T1.RSLT_ORIGINAL,T1.RSLT_ISDUPLICATE,T1.RSLT_LOG,T1.RSLT_FIRSTREPORTTIME,T1.RSLT_LASTREPORTTIME,T1.RSLT_DEPARTMENT,T1.RSLT_MODIFICATIONMETHOD,T1.RSLT_NEEDSMANUALCONFIRM,T1.RSLT_REFERENCETIME,T1.RSLT_DYNAMICTYPE,T1.RSLT_RESTRICTEDVALIDATOR,T1.RSLT_EXPERTSYSTEMFLAGS,T1.RSLT_SHIFT,T1.RSLT_PHONEMARKMETHOD,T1.RSLT_METHOD,T1.RSLT_REQDILUTIONFACTOR,T1.RSLT_REQDILUTIONCONDITION,T1.RSLT_DILUTIONMODE,T1.RSLT_EFFDILUTIONCONDITION,T1.RSLT_EFFDILUTIONFACTOR,T1.RSLT_EXTERNALCOMMENTTIME FROM ORAGLIMS.RESULTINPUT T0,ORAGLIMS.RESULT T1 WHERE ((T0.RSTI_ACTION = :1 AND T0.RSTI_RESULT = T1.RSLT_ID AND T1.RSLT_STATUS >= :2 AND T1.RSLT_STATUS <= :3 AND T1.RSLT_PROPERTY = :4 AND T1.RSLT_COMPARATOR IS NULL )) ORDER BY T0.RSTI_ACTION, T1.RSLT_ID +END OF STMT +PARSE #47505495601448:c=0,e=388,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=2,plh=0,tim=1303377501916729 +BINDS #47505495601448: + Bind#0 + oacdty=01 mxl=32(31) mxlc=00 mal=00 scl=00 pre=00 + oacflg=01 fl2=1000000 frm=01 csi=178 siz=128 off=0 + kxsbbbfp=2b34bc308a88 bln=32 avl=08 flg=05 + value="21087656" + Bind#1 + oacdty=01 mxl=32(31) mxlc=00 mal=00 scl=00 pre=00 + oacflg=01 fl2=1000000 frm=01 csi=178 siz=0 off=32 + kxsbbbfp=2b34bc308aa8 bln=32 avl=01 flg=01 + value="3" + Bind#2 + oacdty=01 mxl=32(31) mxlc=00 mal=00 scl=00 pre=00 + oacflg=01 fl2=1000000 frm=01 csi=178 siz=0 off=64 + kxsbbbfp=2b34bc308ac8 bln=32 avl=01 flg=01 + value="5" + Bind#3 + oacdty=01 mxl=32(31) mxlc=00 mal=00 scl=00 pre=00 + oacflg=01 fl2=1000000 frm=01 csi=178 siz=0 off=96 + kxsbbbfp=2b34bc308ae8 bln=32 avl=04 flg=01 + value="8997" +EXEC #47505495601448:c=4000,e=3046,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=2,plh=2844530747,tim=1303377501919822 diff --git a/vdh/Edit.002 b/vdh/Edit.002 new file mode 100644 index 0000000..2162fe9 --- /dev/null +++ b/vdh/Edit.002 @@ -0,0 +1,65 @@ + +--MET HINT + +PLAN_TABLE_OUTPUT +------------------------------------------------------------------------------------------------------------------------------------------------------ + +Plan hash value: 442047200 + +----------------------------------------------------------------------------------------------- +| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | +----------------------------------------------------------------------------------------------- +| 0 | SELECT STATEMENT | | 3 | 987 | 11 (10)| 00:00:01 | +| 1 | SORT ORDER BY | | 3 | 987 | 11 (10)| 00:00:01 | +|* 2 | FILTER | | | | | | +| 3 | NESTED LOOPS | | | | | | +| 4 | NESTED LOOPS | | 3 | 987 | 10 (0)| 00:00:01 | +| 5 | TABLE ACCESS BY INDEX ROWID| RESULTINPUT | 3 | 54 | 4 (0)| 00:00:01 | +|* 6 | INDEX RANGE SCAN | RSTI_ACTION | 3 | | 3 (0)| 00:00:01 | +|* 7 | INDEX UNIQUE SCAN | RSLT_ID | 1 | | 1 (0)| 00:00:01 | +|* 8 | TABLE ACCESS BY INDEX ROWID | RESULT | 1 | 311 | 2 (0)| 00:00:01 | +----------------------------------------------------------------------------------------------- + +Predicate Information (identified by operation id): +--------------------------------------------------- + + 2 - filter(TO_NUMBER(:2)<=TO_NUMBER(:3)) + 6 - access("T0"."RSTI_ACTION"=TO_NUMBER(:1)) + 7 - access("T0"."RSTI_RESULT"="T1"."RSLT_ID") + 8 - filter("T1"."RSLT_PROPERTY"=TO_NUMBER(:4) AND "T1"."RSLT_STATUS">=TO_NUMBER(:2) + AND "T1"."RSLT_STATUS"<=TO_NUMBER(:3) AND "T1"."RSLT_COMPARATOR" IS NULL) + +24 rows selected. + +--ZONDER HINT + +PLAN_TABLE_OUTPUT +------------------------------------------------------------------------------------------------------------------------------------------------------ + +Plan hash value: 442047200 + +----------------------------------------------------------------------------------------------- +| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | +----------------------------------------------------------------------------------------------- +| 0 | SELECT STATEMENT | | 3 | 987 | 11 (10)| 00:00:01 | +| 1 | SORT ORDER BY | | 3 | 987 | 11 (10)| 00:00:01 | +|* 2 | FILTER | | | | | | +| 3 | NESTED LOOPS | | | | | | +| 4 | NESTED LOOPS | | 3 | 987 | 10 (0)| 00:00:01 | +| 5 | TABLE ACCESS BY INDEX ROWID| RESULTINPUT | 3 | 54 | 4 (0)| 00:00:01 | +|* 6 | INDEX RANGE SCAN | RSTI_ACTION | 3 | | 3 (0)| 00:00:01 | +|* 7 | INDEX UNIQUE SCAN | RSLT_ID | 1 | | 1 (0)| 00:00:01 | +|* 8 | TABLE ACCESS BY INDEX ROWID | RESULT | 1 | 311 | 2 (0)| 00:00:01 | +----------------------------------------------------------------------------------------------- + +Predicate Information (identified by operation id): +--------------------------------------------------- + + 2 - filter(TO_NUMBER(:2)<=TO_NUMBER(:3)) + 6 - access("T0"."RSTI_ACTION"=TO_NUMBER(:1)) + 7 - access("T0"."RSTI_RESULT"="T1"."RSLT_ID") + 8 - filter("T1"."RSLT_PROPERTY"=TO_NUMBER(:4) AND "T1"."RSLT_STATUS">=TO_NUMBER(:2) + AND "T1"."RSLT_STATUS"<=TO_NUMBER(:3) AND "T1"."RSLT_COMPARATOR" IS NULL) + +24 rows selected. + diff --git a/vdh/Edit.003 b/vdh/Edit.003 new file mode 100644 index 0000000..bb6e2f5 --- /dev/null +++ b/vdh/Edit.003 @@ -0,0 +1,3 @@ + select to_number(substr(banner,instr(banner,'Release')+8,instr(banner,'.',1,2)-8-instr(banner,'Release')),'', 'NLS_NUMERIC_CHARACTERS = ''.,''')*10 + from V$VERSION + where banner like 'Oracle%' and rownum < 2; diff --git a/vdh/Edit.004 b/vdh/Edit.004 new file mode 100644 index 0000000..48ddfa1 --- /dev/null +++ b/vdh/Edit.004 @@ -0,0 +1,50 @@ +set pages 999 +set linesize 200 + +column nbr_exec format 99G999G999 +column ela_sec format 999G999G999 +column dreads format 999G999G999 +column bgets format 999G999G999 +column avg_ela_sec format 9G999G999D99 +column avg_dreads format 99G999G999 +column avg_bgets format 99G999G999 + +with exec_stats as + ( select + sqlstat.sql_id, + sqlstat.plan_hash_value phash_value, + min(sqlstat.snap_id) min_snap_id, + max(sqlstat.snap_id) max_snap_id, + sum(sqlstat.executions_delta) nbr_exec, + sum(sqlstat.elapsed_time_delta)/1000000 ela_sec, + sum(sqlstat.disk_reads_delta) dreads, + sum(sqlstat.buffer_gets_delta) bgets + from + dba_hist_sqlstat sqlstat + where + sql_id = '&sql_id' + group by + sql_id, + plan_hash_value + ) +select + to_char(snap1.begin_interval_time, 'DD/MM/YYYY HH24:MI') earliest_occur, + to_char(snap2.end_interval_time, 'DD/MM/YYYY HH24:MI') latest_occur, + sql_id, + phash_value, + nbr_exec, + ela_sec, + dreads, + bgets, + (ela_sec/nbr_exec) avg_ela_sec, + (dreads/nbr_exec) avg_dreads, + (bgets/nbr_exec) avg_bgets +from + exec_stats, + dba_hist_snapshot snap1, + dba_hist_snapshot snap2 +where + exec_stats.min_snap_id = snap1.snap_id + and exec_stats.max_snap_id = snap2.snap_id +; + \ No newline at end of file diff --git a/vdh/Edit.005 b/vdh/Edit.005 new file mode 100644 index 0000000..1c63588 --- /dev/null +++ b/vdh/Edit.005 @@ -0,0 +1,16 @@ +select * +from ( select bad.thread#, bad.sequence#, bad.next_change#, to_char(bad.next_time, 'DD/MM/YYYY HH24:MI:SS') next_time + from v$backup_archivelog_details bad + where (thread#, sequence#) in + ( select bad2.thread#, max(bad2.sequence#) last_sequence# + from v$backup_archivelog_details bad2 + group by bad2.thread# + ) + and resetlogs_time = + ( select resetlogs_time + from v$database_incarnation + where status = 'CURRENT' + ) + order by bad.next_change# + ) +where rownum = 1; diff --git a/vdh/README.md b/vdh/README.md new file mode 100644 index 0000000..487d14f --- /dev/null +++ b/vdh/README.md @@ -0,0 +1,6 @@ +toolbox +======= + +collection of sql and shell scripts that I use as an Oracle DBA +Some of these scripts are written by me, others come (as is or modified) from other DBA's + diff --git a/vdh/RecreateUsers.sql b/vdh/RecreateUsers.sql new file mode 100644 index 0000000..0ebc0c3 --- /dev/null +++ b/vdh/RecreateUsers.sql @@ -0,0 +1,1952 @@ +set lines 180 trimspool on verify off +CREATE OR REPLACE PACKAGE gdp$uptime_migration +AS + -- Author: Geert De Paep - Uptime Technologies + + procedure SetDebug(DebugA in boolean default true); + Procedure VerifyTargetDatabase(DbNameA in varchar2, + HostNameA in varchar2 default null, + InstanceNameA in varchar2 default null, + VersionLikeA in varchar2 default null); + procedure SetScriptOptions(GenSqlA in boolean default true, + LogFileNameA in varchar2 default null, + WheneverSqlErrorA in boolean default false, + AddInfoA in boolean default true, + CheckRoleExistanceA in boolean default false, + NrPausesA in number default 0, + DocFormatA in varchar2 default 'TXT', + IncDropUsersA in boolean default false, + IncDropUsersCascadeA in boolean default false, + LineSizeA in number default 200 + ); + procedure SetDatafileOptions(SrcSeparatorA in varchar2 default null, + DstSeparatorA in varchar2 default null, + FilesizeInitialPctA in number default 100, + FilesizeAutomaxPctA in number default 100, + ForceAutoextendA in boolean default true, + DefaultDirectoryA in varchar2 default null, + ConvertFilenamesToLowerA in boolean default false, + IncDropPermanentTablespacesA in boolean default false, + IncIncludeDropTSContentsA in boolean default false, + IncDropTemporaryTablespacesA in boolean default false + ); + PROCEDURE ExcludeTablespace(TablespaceA IN VARCHAR2); + PROCEDURE IncludeTablespace(TablespaceA IN VARCHAR2); + PROCEDURE ExcludeSysPriv(PrivilegeA IN VARCHAR2); + PROCEDURE ExcludeRole(RoleA IN VARCHAR2); + PROCEDURE AddDatafileDirectory(IfLikeA IN VARCHAR2, DirA IN VARCHAR2); + PROCEDURE SetUserList(UserListA in varchar2); + procedure SetCreateOptions(CreateUsers in boolean, + SysPrivsUsers in boolean, + ObjPrivsUsers in boolean, + DependentTS in boolean, + PublicSynonyms in boolean, + SetQuotas in boolean, + CreateRoles in boolean, + SysPrivsRoles in boolean, + ObjPrivsRoles in boolean, + GrantRoles in boolean, + Contexts in boolean); + procedure SetCreateOptions(PrePostImportA in varchar2); + procedure Run(BigBannerA in varchar2 default null); + procedure Reset; + procedure CORP; + procedure MDB; + procedure MDBW; + procedure BORP; + procedure CORPSTAT; + procedure ZINT; +END gdp$uptime_migration; +/ + +CREATE OR REPLACE PACKAGE BODY gdp$uptime_migration +AS + + -- Minimum extent size for tablespaces + + -- Create-options: + OptCreateUsers boolean; + OptSysPrivsUsers boolean; + OptObjPrivsUsers boolean; + OptDependentTS boolean; + OptPublicSynonyms boolean; + OptSetQuotas boolean; + OptCreateRoles boolean; + OptSysPrivsRoles boolean; + OptObjPrivsRoles boolean; + OptGrantRoles boolean; + OptContexts boolean; + + -- Script-options: + DEBUG BOOLEAN := false; + GenSql boolean := true; -- If true, generate SQL stmts, if false, only tell what will be done + LogFileName varchar2(256); -- If specified, generate "spool " in the output + IncludeWheneverSqlError BOOLEAN; -- Enclose CREATE statements by "whenever sqlerror" + NrPauses NUMBER; -- Ask this number of times for confirmation + DocFormat VARCHAR2(3); -- Output format + AddInfo BOOLEAN; -- Add extra informational messages + IncDropUsers BOOLEAN; -- Generates 'DROP USER' statements + IncDropUsersCascade BOOLEAN; -- Adds CASCADE to DROP USER statements + CheckRoleExistance BOOLEAN; -- Skip role creation if it already exists + LineSize number; + + -- Datafile-options: + SourceDirectorySeparator CHAR(1); -- Typically / on UNIX and \ on Windows + DestinationDirectorySeparator CHAR(1); -- Typically / on UNIX and \ on Windows + DefaultDatafileDirectory VARCHAR2(256); -- If specified, use this dir for all datafile names. If null, keep original directory + ConvertFilenamesToLower BOOLEAN; -- Convert all datafile-names to lower + IncDropPermanentTablespaces BOOLEAN; -- Generate DROP statements for permanent tablespaces + IncIncludeDropTSContents BOOLEAN; -- Adds 'including contents and datafiles' to drop tablespace + IncDropTemporaryTablespaces BOOLEAN; -- Generate DROP statements for temporary tablespaces + ForceAutoextend BOOLEAN; -- Create all datafiles with autoextend option + FilesizeInitialPct NUMBER; -- Create datafiles initially as FilesizeInitialPct percent from current size + FilesizeAutomaxPct NUMBER; -- Create datafiles maxsize as FilesizeAutomaxPct percent from current maxsize + FilesizeAutomaxMaxKb number; -- Create datafiles maxsize never bigger than FilesizeAutomaxMaxKb k + ForceAutoallocate BOOLEAN; + + -- Internal Variables: + OptVerifyDbName varchar2(64); -- If specified, the output will contain a check on database name + OptVerifyHostName varchar2(128); + OptVerifyInstanceName varchar2(64); + OptVerifyVersionLike varchar2(32); + + + TYPE V256Tbl IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER; + TYPE V30Tbl IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER; + TYPE V61Tbl IS TABLE OF VARCHAR2(61) INDEX BY BINARY_INTEGER; + DatafileLikeTable V256Tbl; + DatafileDirectoryTable V256Tbl; + CreatedTablespaces V30Tbl; + IncludedTablespaces V30Tbl; + ExcludedSysPrivs V30Tbl; + ExcludedRoles V30Tbl; + CreatedRoles V30Tbl; -- List of roles for which CREATE ROLE is already done + GrantedSysPrivsRoles V30Tbl; -- List of roles that have received sysprivs + GrantedObjPrivsRoles V30Tbl; -- List of roles that have received objprivs + GrantedRoles V61Tbl; -- List of roles that have been granted to user or other role + PausesPrinted NUMBER; + DbBlockSize NUMBER; + DbVersion varchar2(32); + DbName VARCHAR2(32); + QueuedLevel number; + QueuedMessage varchar2(4000); + UserTab Dbms_Utility.uncl_array; + + + ------------------------------------------------------------------------------ + ------------------------------------------------------------------------------ + ------------------------------------------------------------------------------ + ------------------------------------------------------------------------------ + FUNCTION AddPostIfNotNull(MsgA IN VARCHAR2, PostFixA IN varchar2) RETURN VARCHAR2 + IS + -- Help function to append a postfix to a value, only when that value is not null + BEGIN + IF (MsgA IS NULL) THEN RETURN NULL; + ELSE RETURN MsgA||PostFixA; + END IF; + END; + ------------------------------------------------------------------------------ + FUNCTION AddPreIfNotNull(MsgA IN VARCHAR2, PreFixA IN varchar2) RETURN VARCHAR2 + IS + -- Help function to prepend a prefix to a value, only when that value is not null + BEGIN + IF (MsgA IS NULL) THEN RETURN NULL; + ELSE RETURN PreFixA||MsgA; + END IF; + END; + -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + procedure PutLineSplit(PrefixA in varchar2, MsgA in varchar2, + WidthA in number, SplitOnA in varchar2 default ' ', + AllowSplitA in boolean default true) + is + -- Put a line in the output. Take the global variable "linesize" into account for wrapping. + -- If the line is longer than linesize and wraps, the PrefixA will + -- be repeated on the next line. + -- Lines will only be wrapped after a character listed in SplitOnA + -- If AllowSpliA is false and line is longer than linesize, an error will be raised + SpacePos number; + Msg varchar2(20000); + Cntr number := 0; -- To avoid infinite loop + begin + if (LineSize < length(PrefixA)+10) then + Raise_Application_Error(-20999,'Error in PutLineSplit: Linesize too small for prefix '||PrefixA); + end if; + if (SplitOnA is null) then + Raise_Application_Error(-20999,'Error in PutLineSplit: SplitOnA may not be null'); + end if; + if (MsgA is null) then + if (DocFormat = 'HTP') then + htp.p('
    '); + else + dbms_output.put_line(MsgA); + end if; + else + Msg := MsgA; + while (Length(PrefixA||Msg) > WidthA and Cntr < 1000) loop + for i in 1 .. length(SplitOnA) loop + SpacePos := instr(PrefixA||Msg,substr(SplitOnA,i,1),-(length(PrefixA||Msg)-WidthA+1)); + if (SpacePos <> 0) then exit; end if; + end loop; + if (SpacePos = 0 and NOT AllowSplitA) then -- No character found to split on + Raise_Application_Error(-20999,'Error in PutLineSplit: Linesize too small, unable to wrap data. You must increase linesize.'); + elsif (SpacePos = 0) then -- No character found to split on + if (DocFormat = 'HTP') then + htp.p(substr(PrefixA||Msg,1,WidthA)||'
    '); + elsif (DocFormat = 'HTM') then + dbms_output.put_line(substr(PrefixA||Msg,1,WidthA)||'
    '); + else + dbms_output.put_line(substr(PrefixA||Msg,1,WidthA)); + end if; + Msg := substr(PrefixA||Msg,WidthA+1); + else + if (DocFormat = 'HTP') then + htp.p(substr(PrefixA||Msg,1,SpacePos)||'
    '); + elsif (DocFormat = 'HTM') then + dbms_output.put_line(substr(PrefixA||Msg,1,SpacePos)||'
    '); + else + dbms_output.put_line(substr(PrefixA||Msg,1,SpacePos)); + end if; + Msg := substr(PrefixA||Msg,SpacePos+1); + end if; + Cntr := Cntr + 1; + end loop; + if (DocFormat = 'HTP') then + htp.p(PrefixA||Msg); + elsif (DocFormat = 'HTM') then + dbms_output.put_line(PrefixA||Msg); + else + dbms_output.put_line(PrefixA||Msg); + end if; + end if; + exception + when OTHERS then + raise_application_error(-20000,'Error in PutLineSplit',true); + end; + ------------------------------------------------------------------------------ + PROCEDURE PrintDebug(MsgA IN VARCHAR2) + IS + BEGIN + IF (DEBUG) THEN + PutLineSplit('--DEBUG ',MsgA,200); + END IF; + END; + + ------------------------------------------------------------------------------ + PROCEDURE PrintInfo(LevelA IN number, MsgA IN VARCHAR2, + ConditionalA in boolean default false) + -- This procedure prints an informational line in the output. + -- I.e. it will generate: prompt + -- It will alos take into account the pauses, so at the beginning of the + -- output, it will generate a number of: pause + -- If ConditionalA = true, the MsgA will only be printed if it is followed + -- by a PrintMessage(...) statement, and not if it is followed by another PrintInfo(...) + IS + BEGIN + if (ConditionalA) then + PrintDebug('Entering PrintInfo with Msg '||substr(MsgA,1,10)||'... and ConditionalA=true'); + -- We don't know if this message really needs to be printed. It depends on + -- whether there will still be printed more data + QueuedLevel := LevelA; + QueuedMessage := MsgA; + else + PrintDebug('Entering PrintInfo with Msg '||substr(MsgA,1,10)||'... and ConditionalA=false'); + IF (PausesPrinted < NrPauses AND GenSql) THEN + PutLineSplit('pause ',MsgA||' ... ',LineSize); + PausesPrinted := PausesPrinted + 1; + IF (PausesPrinted = NrPauses AND NrPauses > 0) THEN + PutLineSplit('pause ','The rest of this script will run automatically (no more pauses) ...', LineSize); + END IF; + ELSE + IF (AddInfo) THEN + PutLineSplit('prompt ',MsgA, LineSize); + IF (LevelA <= 2) THEN + -- Print an additional horizontal line if level <= 2 + PutLineSplit(null, LPad('-',Length('prompt '||MsgA),'-'), LineSize); + END IF; + IF (LevelA = 1) THEN + -- Print an additional blank line if level = 1 + PutLineSplit(null, '', LineSize); + END IF; + END IF; + END IF; + QueuedMessage := null; + end if; + END; + + ------------------------------------------------------------------------------ + PROCEDURE PrintMessage(MsgA IN VARCHAR2) + IS + -- This procedure puts the MsgA into the output + -- It will first print the Queued message, if there is any + BEGIN + if (QueuedMessage is not null) then + PrintDebug('Entering PrintMessage, BUT first need to print previously queued message'); + PrintInfo(QueuedLevel, QueuedMessage, false); + end if; + PutLineSplit(null,MsgA,LineSize, AllowSplitA => false); + END; + + ------------------------------------------------------------------------------ + PROCEDURE StartWheneverSqlError + IS + BEGIN + IF (IncludeWheneverSqlError) then + PrintMessage('whenever sqlerror exit sql.sqlcode'); + END IF; + END; + + ------------------------------------------------------------------------------ + PROCEDURE StopWheneverSqlError + IS + BEGIN + IF (IncludeWheneverSqlError) then + PrintMessage('whenever sqlerror continue'); + END IF; + END; + + ------------------------------------------------------------------------------ + Procedure VerifyTargetDatabase(DbNameA in varchar2, + HostNameA in varchar2 default null, + InstanceNameA in varchar2 default null, + VersionLikeA in varchar2 default null) + is + begin + OptVerifyDbName := DbNameA; + OptVerifyHostName := HostNameA; + OptVerifyInstanceName := InstanceNameA; + OptVerifyVersionLike := VersionLikeA; + end; + + ------------------------------------------------------------------------------ + Procedure DoVerifyTargetDatabase + is + begin + if (OptVerifyDbName is not null) then + PrintMessage('prompt Checking if we are in the correct database...'); + PrintMessage('whenever sqlerror exit'); + PrintMessage('set serveroutput on format wrapped'); + PrintMessage('declare'); + PrintMessage(' DbName varchar2(30);'); + PrintMessage(' HostName varchar2(30);'); + PrintMessage(' InstanceName varchar2(30);'); + PrintMessage(' Version varchar2(30);'); + PrintMessage('begin'); + PrintMessage(' select instance_name, host_name, version, d.name'); + PrintMessage(' into InstanceName, HostName, Version, DbName'); + PrintMessage(' from v$instance, v$database d;'); + PrintMessage(' dbms_output.put_line(''Checking if we are in the requested database:'');'); + PrintMessage(' if (upper(DbName) = upper('''||OptVerifyDbName||''')) then'); + PrintMessage(' dbms_output.put_line(''Database name: ''||DbName);'); + PrintMessage(' else'); + PrintMessage(' raise_application_error(-20000,''WRONG DATABASE!!! Databasename (''||DbName||'') not correct'');'); + PrintMessage(' end if;'); + if (OptVerifyInstanceName is not null) then + PrintMessage(' if (upper(InstanceName) = upper('''||OptVerifyInstanceName||''')) then'); + PrintMessage(' dbms_output.put_line(''Instance name: ''||InstanceName);'); + PrintMessage(' else'); + PrintMessage(' raise_application_error(-20000,''WRONG DATABASE!!! Instancename (''||InstanceName||'') not correct'');'); + PrintMessage(' end if;'); + end if; + if (OptVerifyHostName is not null) then + PrintMessage(' if (upper(HostName) = upper('''||OptVerifyHostName||''')) then'); + PrintMessage(' dbms_output.put_line(''Host name: ''||HostName);'); + PrintMessage(' else'); + PrintMessage(' raise_application_error(-20000,''WRONG DATABASE!!! HostName (''||HostName||'') not correct'');'); + PrintMessage(' end if;'); + end if; + if (OptVerifyVersionLike is not null) then + PrintMessage(' if (Version like '''||OptVerifyVersionLike||''') then'); + PrintMessage(' dbms_output.put_line(''Version : ''||Version);'); + PrintMessage(' else'); + PrintMessage(' raise_application_error(-20000,''WRONG DATABASE!!! Version (''||Version||'') not correct'');'); + PrintMessage(' end if;'); + end if; + PrintMessage(' dbms_output.put_line(''This is the correct database!'');'); + + PrintMessage('end;'); + PrintMessage('/'); + PrintMessage('whenever sqlerror continue'); + PrintMessage(''); + end if; + end; + + ------------------------------------------------------------------------------ + FUNCTION FetchViewText(OwnerA IN VARCHAR2, ViewA IN VARCHAR2) RETURN varchar2 + IS + Cur NUMBER; + Dummy NUMBER; + BufSize NUMBER := 20000; + Offset NUMBER := 0; + OutData VARCHAR2(20000); + OutSize NUMBER; + BEGIN + Cur := Dbms_Sql.open_cursor(); + Dbms_Sql.parse(Cur,'select text from dba_views where owner = :owner and view_name = :view_name', Dbms_Sql.native); + Dbms_Sql.bind_variable(Cur, 'owner', Upper(OwnerA)); + Dbms_Sql.bind_variable(Cur, 'view_name', Upper(ViewA)); + Dbms_Sql.define_column_long(Cur, 1); + Dummy := Dbms_Sql.EXECUTE(Cur); + Dummy := Dbms_Sql.fetch_rows(Cur); + IF (Dummy = 0) THEN + RETURN '[View '||OwnerA||'.'||ViewA||' does not exist]'; + END IF; + Dbms_Sql.column_value_long(Cur, 1, BufSize, Offset, OutData, OutSize); + Dbms_Sql.close_cursor(Cur); + OutData := replace(OutData,Chr(10)); + RETURN OutData; + END; + + ------------------------------------------------------------------------------ + FUNCTION FetchViewCollist(OwnerA IN VARCHAR2, ViewA IN VARCHAR2) RETURN varchar2 + IS + Collist VARCHAR2(20000); + BEGIN + FOR c_rec IN (SELECT column_name FROM dba_tab_columns + WHERE owner = OwnerA + AND table_name = ViewA + ORDER BY column_id) LOOP + collist := collist || ','||c_rec.column_name; + END LOOP; + RETURN SubStr(collist,2); + END; + + ------------------------------------------------------------------------------ + function RoleCreated(RoleA in varchar2) return boolean + IS + -- Function returns tue if the 'CREATE ROLE' statement has already been + -- generated during the current run of this procedure. + begin + FOR i IN 1 .. CreatedRoles.Count LOOP + IF (RoleA = CreatedRoles(i)) THEN + RETURN true; + END IF; + END LOOP; + return false; + end; + ------------------------------------------------------------------------------ + procedure MarkRoleAsCreated(RoleA in varchar2) + IS + -- Internally register that the 'CREATE ROLE' has been generated + begin + CreatedRoles(CreatedRoles.count+1) := RoleA; + end; + ------------------------------------------------------------------------------ + function GrantedSysPrivsToRole(RoleA in varchar2) return boolean + is + begin + FOR i IN 1 .. GrantedSysPrivsRoles.Count LOOP + IF (RoleA = GrantedSysPrivsRoles(i)) THEN + RETURN true; + END IF; + END LOOP; + return false; + end; + ------------------------------------------------------------------------------ + procedure MarkGrantedSysPrivsToRole(RoleA in varchar2) + is + begin + GrantedSysPrivsRoles(GrantedSysPrivsRoles.count+1) := RoleA; + end; + ------------------------------------------------------------------------------ + function GrantedObjPrivsToRole(RoleA in varchar2) return boolean + is + begin + FOR i IN 1 .. GrantedObjPrivsRoles.Count LOOP + IF (RoleA = GrantedObjPrivsRoles(i)) THEN + RETURN true; + END IF; + END LOOP; + return false; + end; + ------------------------------------------------------------------------------ + procedure MarkGrantedObjPrivsToRole(RoleA in varchar2) + is + begin + GrantedObjPrivsRoles(GrantedObjPrivsRoles.count+1) := RoleA; + end; + ------------------------------------------------------------------------------ + function RoleGranted(RoleA in VARCHAR2, ToA IN varchar2) return boolean + is + begin + FOR i IN 1 .. GrantedRoles.Count LOOP + IF (Upper(RoleA||'.'||ToA) = GrantedRoles(i)) THEN + RETURN true; + END IF; + END LOOP; + return false; + end; + ------------------------------------------------------------------------------ + procedure MarkRoleAsGranted(RoleA in varchar2, ToA IN varchar2) + is + begin + GrantedRoles(GrantedRoles.count+1) := Upper(RoleA||'.'||ToA); + end; + + ------------------------------------------------------------------------------ + PROCEDURE RecreateTablespace(TablespaceA IN VARCHAR2, ReasonA in varchar2) + IS + t_rec dba_tablespaces%ROWTYPE; + NrFiles NUMBER := 0; + NewFilename VARCHAR2(512); + Prefix VARCHAR2(16); + DirectoryToUse VARCHAR2(256); + FilenameToUse VARCHAR2(256); + UNEXISTANT_TS exception; + Assm varchar2(32); + BEGIN + -- Exclude SYSTEM tablespace + IF (TablespaceA = 'SYSTEM') THEN RETURN; END IF; + + -- Check if this tablespace was already created before + FOR i IN 1 .. CreatedTablespaces.Count LOOP + IF (TablespaceA = CreatedTablespaces(i)) THEN + RETURN; + END IF; + END LOOP; + + begin + SELECT * INTO t_rec FROM dba_tablespaces WHERE tablespace_name = Upper(TablespaceA); + exception + when NO_DATA_FOUND then + raise UNEXISTANT_TS; + end; + + if (NOT GenSql) then + PrintMessage('Tablespace '||t_rec.tablespace_name||' will be created because '||ReasonA); + else + -- Drop the tablespace first if requested to do so + IF (IncDropPermanentTablespaces AND t_rec.CONTENTS = 'PERMANENT') THEN + PrintInfo(3,'Dropping tablespace '||t_rec.tablespace_name); + IF (IncIncludeDropTSContents) then + PrintMessage('drop tablespace '||t_rec.tablespace_name||' including contents and datafiles;'); + ELSE + PrintMessage('drop tablespace '||t_rec.tablespace_name||';'); + END IF; + ELSIF (IncDropTemporaryTablespaces AND t_rec.CONTENTS = 'TEMPORARY') THEN + PrintInfo(3,'Dropping tablespace '||t_rec.tablespace_name); + PrintMessage('drop tablespace '||t_rec.tablespace_name||';'); + END IF; + + + -- Write the first part of the CREATE statement (no datafiles yet) + PrintInfo(3,'Creating tablespace '||t_rec.tablespace_name||' because '||ReasonA); + StartWheneverSqlError; + IF (t_rec.CONTENTS = 'PERMANENT') then + PrintMessage('CREATE TABLESPACE '||t_rec.tablespace_name); + ELSIF (t_rec.CONTENTS = 'TEMPORARY') THEN + PrintMessage('CREATE TEMPORARY TABLESPACE '||t_rec.tablespace_name); + ELSIF (t_rec.CONTENTS = 'UNDO') THEN + PrintMessage('CREATE UNDO TABLESPACE '||t_rec.tablespace_name); + ELSE + PrintMessage('-- ERROR: this tablespace type is not supported '||t_rec.CONTENTS); + END IF; + + -- Add all datafiles + FOR d_rec IN (SELECT * FROM dba_data_files + WHERE tablespace_name = Upper(TablespaceA) + ORDER BY file_id) LOOP + IF (NrFiles = 0 AND t_rec.CONTENTS in ('PERMANENT','UNDO')) THEN Prefix := ' DATAFILE '; + ELSIF (NrFiles = 0 AND t_rec.CONTENTS = 'TEMPORARY') THEN Prefix := ' TEMPFILE '; + ELSE Prefix := ' , '; + END IF; + + PrintDebug('Adding file '||d_rec.file_name||' '||Ceil(d_rec.bytes/1024/1024)||'M --> '||Ceil(d_rec.maxbytes/1024/1024)||'M'); + + DirectoryToUse := NULL; + -- Search if a special mapping is defined for this datafile: + FOR i IN 1 .. DatafileLikeTable.Count LOOP + IF (d_rec.file_name LIKE DatafileLikeTable(i)) THEN + DirectoryToUse := DatafileDirectoryTable(i); + EXIT; + END IF; + END LOOP; + IF (DirectoryToUse IS NULL) THEN + DirectoryToUse := DefaultDatafileDirectory; + END IF; + + IF (ConvertFilenamesToLower) then + FilenameToUse := Lower(d_rec.file_name); + ELSE + FilenameToUse := d_rec.file_name; + END IF; + + IF (DirectoryToUse IS NULL) THEN + NewFilename := FilenameToUse; + ELSE + NewFileName := RTrim(DirectoryToUse,DestinationDirectorySeparator)||DestinationDirectorySeparator|| + SubStr(FilenameToUse,InStr(d_rec.file_name,SourceDirectorySeparator,-1)+1); + end if; + PrintMessage(Prefix||''''||NewFilename||''' size '||ceil((d_rec.bytes*FilesizeInitialPct/100)/1024/1024)||'M'); + IF (d_rec.autoextensible = 'YES') THEN + PrintMessage(' AUTOEXTEND on NEXT '||(d_rec.increment_by*DbBlockSize)/1024||'K MAXSIZE '|| + Ceil(least(d_rec.maxbytes*FilesizeAutomaxPct/100/1024,FilesizeAutomaxMaxKb))||'K'); + ELSIF (ForceAutoextend) THEN + PrintMessage(' AUTOEXTEND on NEXT '||Ceil((d_rec.bytes/20)/1024)||'K MAXSIZE '|| + Ceil(least(d_rec.bytes*FilesizeAutomaxPct/100/1024,FilesizeAutomaxMaxKb))||'K'); + END IF; + NrFiles := NrFiles + 1; + END LOOP; + + -- Adding tempfiles + FOR d_rec IN (SELECT * FROM dba_temp_files + WHERE tablespace_name = Upper(TablespaceA) + ORDER BY file_id) LOOP + IF (NrFiles = 0) THEN Prefix := ' TEMPFILE '; + ELSE Prefix := ' , '; + END IF; + + DirectoryToUse := NULL; + -- Search if a special mapping is defined for this datafile: + FOR i IN 1 .. DatafileLikeTable.Count LOOP + IF (d_rec.file_name LIKE DatafileLikeTable(i)) THEN + DirectoryToUse := DatafileDirectoryTable(i); + EXIT; + END IF; + END LOOP; + IF (DirectoryToUse IS NULL) THEN + DirectoryToUse := DefaultDatafileDirectory; + END IF; + + IF (ConvertFilenamesToLower) then + FilenameToUse := Lower(d_rec.file_name); + ELSE + FilenameToUse := d_rec.file_name; + END IF; + + IF (DirectoryToUse IS NULL) THEN + NewFilename := d_rec.file_name; + ELSE + NewFileName := RTrim(DirectoryToUse,DestinationDirectorySeparator)||DestinationDirectorySeparator|| + SubStr(FilenameToUse,InStr(d_rec.file_name,SourceDirectorySeparator,-1)+1); + end if; + PrintMessage(Prefix||''''||NewFilename||''' size '||ceil((d_rec.bytes*FilesizeInitialPct/100)/1024/1024)||'M'); + IF (d_rec.autoextensible = 'YES') THEN + PrintMessage(' AUTOEXTEND on NEXT '||(d_rec.increment_by*DbBlockSize)/1024||'K MAXSIZE '|| + Ceil(least(d_rec.maxbytes*FilesizeAutomaxPct/100/1024,FilesizeAutomaxMaxKb))||'K'); + ELSIF (ForceAutoextend) THEN + PrintMessage(' AUTOEXTEND on NEXT '||Ceil((d_rec.bytes/20)/1024)||'K MAXSIZE '|| + Ceil(least(d_rec.bytes*FilesizeAutomaxPct/100/1024,FilesizeAutomaxMaxKb))||'K'); + END IF; + NrFiles := NrFiles + 1; + END LOOP; + + IF (t_rec.extent_management = 'LOCAL') THEN + IF (t_rec.CONTENTS = 'TEMPORARY') THEN --TEMP TS must have UNIFORM size + PrintMessage(' extent management LOCAL uniform size '||t_rec.next_extent); + ELSIF (t_rec.allocation_type = 'SYSTEM' OR ForceAutoallocate) THEN + PrintMessage(' extent management LOCAL autoallocate'); + ELSIF (t_rec.CONTENTS = 'UNDO') THEN -- UNDO TS must have autoallocate + PrintMessage(' extent management LOCAL autoallocate'); + ELSIF (t_rec.allocation_type = 'UNIFORM') THEN + PrintMessage(' extent management LOCAL uniform size '||t_rec.next_extent); + ELSE + Raise_application_error(-20000,'Error: Unsupported allocation type: '||t_rec.allocation_type); + END IF; + if (DbVersion not like '8.%') then + execute immediate 'select segment_space_management from dba_tablespaces '|| + ' where tablespace_name = '''||t_rec.tablespace_name||'''' + into Assm; + PrintMessage(' segment space management '||Assm); + end if; + END IF; + IF (t_rec.CONTENTS NOT IN ('TEMPORARY','UNDO')) THEN + PrintMessage(' '||t_rec.LOGGING); + end if; + PrintMessage(';'); + StopWheneverSqlError; + end if; + CreatedTablespaces(CreatedTablespaces.Count+1) := TablespaceA; + EXCEPTION + when UNEXISTANT_TS then + PrintMessage('prompt !! WARNING Unexistant tablespace '||TablespaceA||' found, check def_ts and temp_ts in dba_users !!'); + WHEN OTHERS THEN + Raise_application_error(-20000,'Error in RecreateTablespace for '||TablespaceA,true); + END; + + ------------------------------------------------------------------------------ + function IsExcludedSysPriv(PrivilegeA in varchar2) return boolean + is + begin + for i in 1 .. ExcludedSysPrivs.count loop + if (upper(ExcludedSysPrivs(i)) = upper(PrivilegeA)) then + return true; + end if; + end loop; + return false; + end; + ------------------------------------------------------------------------------ + FUNCTION IsPredefinedRole(RoleA IN VARCHAR2) RETURN BOOLEAN + IS + BEGIN + IF (RoleA IN ('CONNECT','RESOURCE','DBA','EXP_FULL_DATABASE','IMP_FULL_DATABASE', + 'SNMPAGENT','SELECT_CATALOG_ROLE','HS_ADMIN_ROLE','EXECUTE_CATALOG_ROLE', + 'DELETE_CATALOG_ROLE','GATHER_SYSTEM_STATISTICS','MONITOR_ROLE', + 'ORA_OWNER','ORA_OWNER_SESSION','ORA_OWNER_SPECIAL','OLAP_DBA','WM_ADMIN_ROLE', + 'AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','JAVA_ADMIN','JAVA_DEPLOY', + 'JAVASYSPRIV','JAVAUSERPRIV','JAVAIDPRIV','JAVADEBUGPRIV', + 'OEM_MONITOR','RECOVERY_CATALOG_OWNER' + )) THEN + RETURN true; + ELSE + RETURN FALSE; + END IF; + END; + ------------------------------------------------------------------------------ + function IsExcludedRole(RoleA in varchar2) return boolean + is + begin + for i in 1 .. ExcludedRoles.count loop + if (upper(ExcludedRoles(i)) = upper(RoleA)) then + return true; + end if; + end loop; + return false; + end; + + ------------------------------------------------------------------------------ + function IsUser(UserA in varchar2) return boolean + is + x number; + begin + select 1 into x from dba_users where username = upper(UserA); + return true; + exception + when no_data_found then return false; + end; + + ------------------------------------------------------------------------------ + PROCEDURE CreateRole(RoleA IN VARCHAR2, ReasonA in varchar2) + IS + BEGIN + IF (GenSql) then + PrintInfo(3,'Creating role '||RoleA||' because '||ReasonA); + StartWheneverSqlError; + IF (CheckRoleExistance) then + PrintMessage('declare'); + PrintMessage(' NrFound number;'); + PrintMessage('begin'); + PrintMessage(' select count(*) into NrFound from dba_roles where role = '''||RoleA||''';'); + PrintMessage(' if (NrFound = 0) then'); + PrintMessage(' execute immediate ''create role '||RoleA||''';'); + PrintMessage(' dbms_output.put_line(''Created role '||RoleA||''');' ); + PrintMessage(' else'); + PrintMessage(' dbms_output.put_line(''Role '||RoleA||' already exists'');' ); + PrintMessage(' end if;'); + PrintMessage('end;'); + PrintMessage('/'); + ELSE + PrintMessage('create role '||RoleA||';'); + END IF; + StopWheneverSqlError; + ELSE + PrintMessage('Role '||RoleA||' will be created because '||ReasonA); + END IF; + EXCEPTION + WHEN OTHERS THEN + Raise_application_error(-20000,'Error in CreateRoleWithSysPrivs for '||RoleA,true); + END; + + ------------------------------------------------------------------------------ + PROCEDURE DoRolesGrantedToUser(GranteeA IN VARCHAR2, ActionA IN VARCHAR2, + LevelA IN NUMBER DEFAULT 0) + -- Do action on the roles that are granted to this user + parent roles + IS + UserHasUnlimitedTS CHAR(1); + NrRoles NUMBER; + NrGrants number; + Prefix VARCHAR2(25); + BEGIN + IF (ActionA NOT IN ('CREATE','ADDSYSPRIVS','ADDOBJPRIVS','GRANT')) THEN + Raise_Application_Error(-20000,'Internal error: DoRolesGrantedToUser called with invalid action'); + END IF; + IF (LevelA > 25) THEN Raise_Application_Error(-20000,'Nested level too deep for roles granted to other roles'); ELSE Prefix := LPad(' ',LevelA+1); END IF; + PrintDebug(Prefix||'Entering DoRolesGrantedToUser for Grantee='||GranteeA||', Action='||ActionA||', Level '||LevelA); +-- IF (GenSql) THEN + FOR r_rec IN (SELECT granted_role, Decode(admin_option,'YES',' with admin option','') AS admin_option + FROM dba_role_privs + WHERE grantee = GranteeA + order by granted_role) LOOP + PrintDebug(Prefix||'Role '||r_rec.granted_role||' is granted to '||GranteeA||', processing...'); + IF (ActionA = 'CREATE' AND NOT IsPredefinedRole(r_rec.granted_role) + and NOT IsExcludedRole(r_rec.granted_role)) then + if (NOT RoleCreated(r_rec.granted_role) ) then + CreateRole(r_rec.granted_role,'it was granted to '||GranteeA); + MarkRoleAsCreated(r_rec.granted_role); + end if; + ELSIF (ActionA = 'GRANT' and NOT IsExcludedRole(r_rec.granted_role)) then + if ( NOT RoleGranted(RoleA => r_rec.granted_role, ToA => GranteeA)) then + IF (GenSql) then + PrintInfo(3,'Granting '||r_rec.granted_role||' to '||GranteeA); + StartWheneverSqlError; + PrintMessage('grant '||r_rec.granted_role||' to '||GranteeA||r_rec.admin_option||';'); + -- Revoke unlimited tablespace for RESOURCE and DBA + SELECT Decode(Count(*),0,'N','Y') INTO UserHasUnlimitedTS FROM dba_sys_privs WHERE grantee = GranteeA; + IF (r_rec.granted_role IN ('RESOURCE','DBA') AND UserHasUnlimitedTS = 'N' and IsUser(GranteeA)) THEN + PrintInfo(3,'Revoking UNLIMITED TABLESPACE from '||GranteeA); + PrintMessage('revoke unlimited tablespace from '||GranteeA||';'); + END IF; + StopWheneverSqlError; + ELSE + PrintMessage('Role '||r_rec.granted_role||' will be granted to '||GranteeA); + END IF; + MarkRoleAsGranted(RoleA => r_rec.granted_role, ToA => GranteeA); + end if; + ELSIF (ActionA = 'ADDSYSPRIVS' AND NOT IsPredefinedRole(r_rec.granted_role) + and NOT IsExcludedRole(r_rec.granted_role)) THEN + if (NOT GrantedSysPrivsToRole(r_rec.granted_role) ) then + IF (GenSql) then + PrintInfo(3,'Adding system privileges to role '||r_rec.granted_role, true); + FOR p_rec IN (SELECT grantee, privilege, Decode(admin_option,'YES',' with admin option','') AS admin_option + FROM dba_sys_privs + WHERE grantee = r_rec.granted_role + order by grantee, privilege) LOOP + if (NOT IsExcludedSysPriv(p_rec.privilege)) then + PrintMessage('grant '||p_rec.privilege||' to '||r_rec.granted_role||p_rec.admin_option||';'); + end if; + END LOOP; + -- Grants on objects of SYS are not imported in user-import + -- Should be given to roles in advance to avoid compilation errors due to insufficient privileges + PrintInfo(3,'Adding object privileges of SYS objects to role '||r_rec.granted_role, true); + FOR o_rec IN (SELECT owner, table_name, grantee, privilege, Decode(grantable,'YES',' with grant option','') AS grantable + FROM dba_tab_privs + WHERE grantee = r_rec.granted_role + and owner = 'SYS' + ORDER BY grantor, table_name, privilege) LOOP + PrintMessage('GRANT '||o_rec.privilege||' ON '||o_rec.owner||'.'||o_rec.table_name|| + ' TO '||r_rec.granted_role||o_rec.grantable||';'); + END LOOP; + ELSE + SELECT Count(*) INTO NrGrants FROM dba_sys_privs + WHERE grantee = r_rec.granted_role; + IF (NrGrants > 0) then + PrintMessage(NrGrants||' system privileges will be granted to role '||r_rec.granted_role); + END IF; + SELECT Count(*) INTO NrGrants FROM dba_tab_privs + WHERE grantee = r_rec.granted_role + and owner = 'SYS'; + IF (NrGrants > 0) then + PrintMessage(NrGrants||' object privileges on SYS objects will be granted to role '||r_rec.granted_role); + END IF; + END IF; + MarkGrantedSysprivsToRole(r_rec.granted_role); + end if; + ELSIF (ActionA = 'ADDOBJPRIVS' AND NOT IsPredefinedRole(r_rec.granted_role) + and NOT IsExcludedRole(r_rec.granted_role)) THEN + if (NOT GrantedObjPrivsToRole(r_rec.granted_role)) then + IF (GenSql) then + PrintInfo(3,'Adding object privileges to role '||r_rec.granted_role, true); + FOR o_rec IN (SELECT owner, table_name, grantee, privilege, + Decode(grantable,'YES',' with grant option','') AS grantable + FROM dba_tab_privs + WHERE grantee = r_rec.granted_role + ORDER BY grantor, table_name, privilege) LOOP + PrintMessage('GRANT '||o_rec.privilege||' ON '||o_rec.owner||'.'||o_rec.table_name|| + ' TO '||r_rec.granted_role||o_rec.grantable||';'); + END LOOP; + ELSE + SELECT Count(*) INTO NrGrants FROM dba_tab_privs + WHERE grantee = r_rec.granted_role; + IF (NrGrants > 0) then + PrintMessage(NrGrants||' object privileges will be granted to role '||r_rec.granted_role); + END IF; + END IF; + MarkGrantedObjprivsToRole(r_rec.granted_role); + end if; + elsif (IsExcludedRole(r_rec.granted_role)) then + PrintDebug(Prefix||'Role '||r_rec.granted_role||' is in list of excluded roles, nothing done'); + ELSE + PrintDebug(Prefix||'Nothing to do for role '||r_rec.granted_role); + END IF; + IF (NOT IsPredefinedRole(r_rec.granted_role) and NOT IsExcludedRole(r_rec.granted_role)) then + PrintDebug(Prefix||'Now recursively checking '||r_rec.granted_role); + DoRolesGrantedToUser(r_rec.granted_role, ActionA, LevelA + 1); + END IF; + END LOOP; +-- ELSE +-- IF (ActionA = 'CREATE') then +-- select count(distinct granted_role) into NrRoles +-- from dba_role_privs +-- connect by prior granted_role = grantee +-- start with grantee = upper(GranteeA); +-- if (NrRoles > 0) then +-- PrintMessage(NrRoles||' roles will be created for user '||GranteeA); +-- end if; +-- ELSIF (ActionA = 'GRANT') then +-- select count(*) into NrGrants +-- from dba_role_privs +-- connect by prior granted_role = grantee +-- start with grantee = upper(GranteeA); +-- if (NrRoles > 0) then +-- PrintMessage(NrGrants||' grants are needed for the roles of user '||GranteeA); +-- end if; +-- ELSIF (ActionA = 'ADDSYSPRIVS') THEN +-- PrintMessage('Todo...'); +-- ELSIF (ActionA = 'ADDOBJPRIVS') THEN +-- PrintMessage('Todo...'); +-- end if; +-- END IF; + PrintDebug(Prefix||'Finished DoRolesGrantedToUser for Grantee='||GranteeA||', Action='||ActionA||', Level '||LevelA); + EXCEPTION + WHEN OTHERS THEN + Raise_application_error(-20000,'Error in DoRolesGrantedToUser for '||GranteeA||' at level '||LevelA,true); + END; + + ------------------------------------------------------------------------------ + PROCEDURE RolesToWhichObjPrivsAreGranted(GrantorA IN VARCHAR2) + IS + -- If the user has granted object privileges to a role, create that role as well + NrRoles number; + BEGIN +-- if (NOT GenSql) then +-- select count(distinct grantee) into NrRoles +-- FROM dba_tab_privs +-- WHERE grantor = GrantorA +-- AND grantee IN (SELECT ROLE FROM dba_roles); +-- if (NrRoles > 0) then +-- PrintMessage('User '||GrantorA||' will grant object privileges to '||NrRoles||' different roles'); +-- end if; +-- else + FOR r_rec IN (SELECT DISTINCT grantee + FROM dba_tab_privs + WHERE grantor = GrantorA + AND grantee IN (SELECT ROLE FROM dba_roles) + ) LOOP + if (NOT RoleCreated(r_rec.grantee)) then + CreateRole(r_rec.grantee,GrantorA||' gave obj privs to it'); + MarkRoleAsCreated(r_rec.grantee); + end if; + END LOOP; +-- end if; + END; + ------------------------------------------------------------------------------ + PROCEDURE CreatePublicSynonyms(UsernameA IN VARCHAR2) + IS + NrSyn number; + BEGIN + PrintDebug('Entering CreatePublicSynonyms for user '||UsernameA); + if (NOT GenSql) then + select count(*) into NrSyn FROM dba_synonyms WHERE owner = 'PUBLIC' AND table_owner = UsernameA; + if (NrSyn > 0) then + PrintMessage(NrSyn||' public synonyms refer to user '||UsernameA); + end if; + else + StartWheneverSqlError; + FOR s_rec IN (SELECT * FROM dba_synonyms WHERE owner = 'PUBLIC' AND table_owner = UsernameA) LOOP + PrintInfo(3,'Creating public synonym '||UsernameA||'.'||s_rec.synonym_name); + PrintMessage('CREATE or replace public synonym '||s_rec.synonym_name||' for '||s_rec.table_owner||'.'||s_rec.table_name||';'); + END LOOP; + StopWheneverSqlError; + end if; + END; + ------------------------------------------------------------------------------ + PROCEDURE CreateDependentTablespaces(UsernameA IN VARCHAR2) + IS + u_rec dba_users%ROWTYPE; + USER_NOT_FOUND EXCEPTION; + BEGIN + PrintDebug('Entering CreateDependentTablespaces for user '||UsernameA); + begin + SELECT * INTO u_rec FROM dba_users WHERE username = Upper(UsernameA); + EXCEPTION + WHEN No_Data_Found THEN RAISE USER_NOT_FOUND; + END; + IF (GenSql) THEN PrintInfo(3,'Creating dependent tablespaces for user '||UsernameA, true); END IF; + FOR t_rec IN (SELECT DISTINCT default_tablespace AS tablespace_name, 'is default TS for '||UsernameA as reason FROM dba_users WHERE username = Upper(UsernameA) + UNION ALL + SELECT DISTINCT temporary_tablespace AS tablespace_name, 'is temp TS for '||UsernameA FROM dba_users WHERE username = Upper(UsernameA) + UNION ALL + SELECT DISTINCT tablespace_name, 'user '||UsernameA||' has quota on it' FROM dba_ts_quotas WHERE username = Upper(UsernameA) + UNION all + SELECT DISTINCT tablespace_name, 'user '||UsernameA||' has data in it' FROM dba_segments WHERE owner = Upper(UsernameA) + ) loop + RecreateTablespace(t_rec.tablespace_name,t_rec.reason); + END LOOP; + EXCEPTION + WHEN OTHERS THEN + Raise_application_error(-20000,'Error in CreateDependentTS for '||UserNameA,true); + END; + ------------------------------------------------------------------------------ + procedure CreateContexts(UserNameA in varchar2) + is + Stmt varchar2(1024); + CtxType varchar2(64); + begin + PrintDebug('Entering CreateContexts for '||UsernameA); + IF (GenSql) THEN PrintInfo(3,'Creating contexts for user '||UsernameA, true); end if; + for c_rec in (select * from dba_context where schema = upper(UsernameA)) loop + Stmt := 'create context '||c_rec.namespace||' using '||c_rec.schema||'.'||c_rec.package; + if (NOT DbVersion like '8.%') then + -- Accessed globally was only introduced in Oracle 9i + execute immediate 'select type from dba_context where namespace = '''||c_rec.namespace||'''' into CtxType; + Stmt := Stmt || ' ' || CtxType; + end if; + if (GenSql) then + PrintMessage(Stmt); + else + PrintMessage('Context '||c_rec.namespace||' will be created'); + end if; + end loop; + end; + + ------------------------------------------------------------------------------ + PROCEDURE CreateOneUser(UsernameA IN VARCHAR2) + IS + u_rec dba_users%ROWTYPE; + USER_NOT_FOUND EXCEPTION; + NrPrivs number; + BEGIN + PrintDebug('Entering CreateOneUser for '||UsernameA); + begin + SELECT * INTO u_rec FROM dba_users WHERE username = Upper(UsernameA); + EXCEPTION + WHEN No_Data_Found THEN + PrintDebug('ERROR: User '||UsernameA||' not found in dba_users'); + RAISE USER_NOT_FOUND; + END; + + if (OptCreateUsers) then + if (OptDependentTS) THEN + PrintDebug('Creating dependent TS before creating user '||UsernameA); + CreateDependentTablespaces(UsernameA); + end if; + + if (NOT GenSql) then + PrintMessage('User '||u_rec.username||' will be created'); + else + IF (IncDropUsers AND NOT IncDropUsersCascade) THEN + PrintInfo(3,'Dropping user '||u_rec.username); + PrintMessage('drop user '||u_rec.username||';'); + ELSIF (IncDropUsers AND IncDropUsersCascade) THEN + PrintInfo(3,'Dropping user '||u_rec.username); + PrintMessage('drop user '||u_rec.username||' cascade;'); + END IF; + + PrintInfo(3,'Creating user '||u_rec.username); + StartWheneverSqlError; + IF (u_rec.password <> 'EXTERNAL') then + PrintMessage('CREATE USER '||u_rec.username||' identified by values '''||u_rec.password||''''); + else + PrintMessage('CREATE USER '||u_rec.username||' identified externally'); + END IF; + PrintMessage(' default tablespace '||u_rec.default_tablespace); + PrintMessage(' temporary tablespace '||u_rec.temporary_tablespace); + PrintMessage(' profile '||u_rec.PROFILE||';'); + + end if; + end if; + + if (OptSetQuotas) then + IF (GenSql) THEN PrintInfo(3,'Setting quotas for '||UsernameA, true); END IF; + FOR q_rec IN (SELECT Decode(max_bytes,-1,'UNLIMITED',To_Char( ceil(max_bytes/1024/1024) )||'M' ) AS max_bytes, tablespace_name + FROM dba_ts_quotas + WHERE username = UsernameA) LOOP + IF (GenSql) then + PrintMessage('ALTER USER '||UsernameA||' quota '||q_rec.max_bytes||' on '||q_rec.tablespace_name||';'); + ELSE + PrintMessage('User '||UsernameA||' will get quotas of '||q_rec.max_bytes||' on '||q_rec.tablespace_name); + END IF; + END LOOP; + end if; + + if (OptSysPrivsUsers) THEN + PrintDebug('SysPrivs=true, generating grants for system privileges granted to '||UsernameA); + select count(*) into NrPrivs FROM dba_sys_privs + WHERE grantee = upper(UsernameA); + if (NrPrivs > 0 AND GenSql) then + PrintInfo(3,'Granting '||NrPrivs||' system privileges to user '||UsernameA, true); + FOR p_rec IN (SELECT grantee, privilege, Decode(admin_option,'YES',' with admin option','') AS admin_option + FROM dba_sys_privs + WHERE grantee = upper(UsernameA)) LOOP + if (NOT IsExcludedSysPriv(p_rec.privilege)) then + PrintMessage('grant '||p_rec.privilege||' to '||p_rec.grantee||p_rec.admin_option||';'); + end if; + END LOOP; + elsif (NrPrivs > 0) then + PrintMessage('User '||UsernameA||' will receive '||NrPrivs||' system privileges directly'); + ELSE + PrintDebug('No system privileges granted to '||UsernameA); + end if; + end if; + + if (OptObjPrivsUsers) then + PrintDebug('ObjPrivs=true, generating grants for object privileges granted to '||UsernameA); + select count(*) into NrPrivs FROM dba_tab_privs + WHERE grantee = Upper(UsernameA); + if (NrPrivs > 0 AND GenSql) then + PrintInfo(3,'Granting '||NrPrivs||' object privileges to user '||UsernameA, true); + FOR s_rec IN (SELECT owner, table_name, grantee, privilege, Decode(grantable,'YES',' with grant option','') AS grantable + FROM dba_tab_privs + WHERE grantee = Upper(UsernameA) + ORDER BY grantor, table_name, privilege) LOOP + PrintMessage('GRANT '||s_rec.privilege||' ON '||s_rec.owner||'.'||s_rec.table_name|| + ' TO '||s_rec.grantee||s_rec.grantable||';'); + END LOOP; + ELSIF (NrPrivs > 0) then + PrintMessage('User '||UsernameA||' will receive '||NrPrivs||' object privileges'); + ELSE + PrintDebug('No object privileges granted to '||UsernameA); + end if; + end if; + + if (OptPublicSynonyms) THEN + PrintDebug('PublicSynonyms=true, generating create synonyms for objects of '||UsernameA); + CreatePublicSynonyms(UsernameA); + end if; + + if (OptContexts) THEN + PrintDebug('OptContexts=true, generating create context for packages of '||UsernameA); + CreateContexts(UsernameA); + end if; + + StopWheneverSqlError; + PrintDebug('Finished CreateOneUser for '||UsernameA); + EXCEPTION + WHEN USER_NOT_FOUND THEN + Raise_application_error(-20000,'Error in CreatOneUser: user does not exist: '||UserNameA,true); + WHEN OTHERS THEN + Raise_application_error(-20000,'Error in CreatOneUser for '||UserNameA,true); + END; + + ------------------------------------------------------------------------------ + PROCEDURE RecreateTablespaces(TsListA IN VARCHAR2 DEFAULT null) + IS + TmpList VARCHAR2(2000); + CommaPos NUMBER; + Cntr NUMBER := 0; + BEGIN + IF (GenSql) THEN PrintInfo(2,'Creating tablespaces '||TsListA||' (null=all)'); END IF; + IF (Trim(TsListA) IS NULL) THEN + FOR t_rec IN (SELECT tablespace_name FROM dba_tablespaces WHERE tablespace_name NOT IN ('SYSTEM')) loop + TmpList := TmpList||','||t_rec.tablespace_name; + END LOOP; + TmpList := SubStr(TmpList,2); + ELSE + TmpList := TsListA; + END IF; + WHILE (TmpList IS NOT NULL AND Cntr < 1000) LOOP + CommaPos := InStr(TmpList,','); + IF (CommaPos > 0) THEN + RecreateTablespace( Trim(Upper(SubStr(TmpList,1,CommaPos-1))),'it is in list of requested TS' ); + TmpList := SubStr(TmpList,CommaPos+1); + else + RecreateTablespace( Trim(Upper(TmpList)),'it is in list of requested TS' ); + TmpList := NULL; + END IF; + Cntr := Cntr + 1; + END LOOP; + END; + + ------------------------------------------------------------------------------ + PROCEDURE ViewsOfUser(UserA IN VARCHAR2, GenSqlA IN boolean) + IS + NrViews NUMBER; + ViewText VARCHAR2(20000); + ViewCollist VARCHAR2(20000); + NrDep NUMBER; + BEGIN + IF (NOT GenSqlA) THEN + SELECT Count(*) INTO NrViews FROM dba_views WHERE owner = Upper(UserA); + PrintMessage('User '||UserA||' has '||NrViews||' views'); + NrDep := 0; + FOR s_rec IN (SELECT referenced_owner, referenced_link_name, Count(*) AS nr_dep + FROM dba_dependencies + WHERE owner = Upper(UserA) + AND (referenced_owner <> Upper(UserA) OR referenced_owner IS NULL) + AND TYPE = 'VIEW' + GROUP BY referenced_owner, referenced_link_name + ORDER BY referenced_link_name, referenced_owner) LOOP + PrintMessage(s_rec.nr_dep||' views have dependencies to '||s_rec.referenced_owner||AddPreIfNotNull(s_rec.referenced_link_name,'@')); + NrDep := NrDep + s_rec.nr_dep; + END LOOP; + IF (NrDep > 0) THEN + PrintMessage('Note: remote dependencies over database links are not included'); + PrintMessage(''); + END IF; + ELSE + PrintInfo(2,'Views for user '||UserA); + FOR v_rec IN (SELECT owner, view_name FROM dba_views + WHERE owner = Upper(UserA)) LOOP + ViewText := FetchViewText(v_rec.owner, v_rec.view_name); + ViewColList := FetchViewCollist(v_rec.owner, v_rec.view_name); + --DbLinks := GetDbLinksFromSqlText(ViewText); + PrintMessage('CREATE OR REPLACE FORCE VIEW '||v_rec.owner||'.'||v_rec.view_name||' '|| + '('||ViewCollist||') AS '||ViewText||';'); + PrintMessage(''); + END LOOP; + END IF; + END; + ------------------------------------------------------------------------------ + PROCEDURE SynonymsOwnedByUser(UserA IN VARCHAR2, GenSqlA IN boolean) + IS + BEGIN + IF (NOT GenSqlA) then + FOR s_rec IN (SELECT table_owner, db_link, Count(*) AS nr_syn + FROM dba_synonyms + WHERE owner = Upper(UserA) + AND (table_owner <> Upper(UserA) OR table_owner IS NULL) + GROUP BY table_owner, db_link + ORDER BY db_link, table_owner) LOOP + PrintMessage('User '||UserA||' has '||s_rec.nr_syn||' synonyms to '||Nvl(s_rec.table_owner,'')||AddPreIfNotNull(s_rec.db_link,'@')); + END LOOP; + ELSE + PrintInfo(2,'Synonyms for user '||UserA); + FOR s_rec IN (SELECT * + FROM dba_synonyms + WHERE owner = Upper(UserA) + AND (table_owner <> Upper(UserA) OR table_owner IS NULL) + ORDER BY db_link, table_owner, table_name) LOOP + PrintMessage('CREATE OR REPLACE SYNONYM '||UserA||'.'||s_rec.synonym_name|| + ' FOR '||AddPostIfNotNull(s_rec.table_owner,'.')||s_rec.table_name||AddPreIfNotNull(s_rec.db_link,'@')||';'); + END LOOP; + PrintMessage(''); + END IF; + END; + ------------------------------------------------------------------------------ + PROCEDURE Dependencies(UserListA IN VARCHAR2 DEFAULT NULL, GenSqlA IN boolean) + IS + UserTab Dbms_Utility.uncl_array; + UserTabLen NUMBER; + BEGIN + dbms_application_info.set_action('Dependencies'); + Dbms_Utility.comma_to_table( UserListA, UserTabLen, UserTab); + FOR i IN 1 .. UserTabLen LOOP + PrintInfo(2,'Dependencies for user '||UserTab(i)); + SynonymsOwnedByUser(UserTab(i), GenSqlA => GenSqlA); + ViewsOfUser(UserTab(i), GenSqlA => GenSqlA); + END LOOP; + END; + + ------------------------------------------------------------------------------ + PROCEDURE RecreateUsers + IS + BEGIN + dbms_application_info.set_action('RecreateUsers'); + PrintDebug('Entering RecreateUsers, UserTab.count='||UserTab.count); + for i in 1 .. UserTab.count LOOP + CreateOneUser( UserTab(i) ); + END LOOP; + PrintDebug('Finished RecreateUsers'); + END; + + ------------------------------------------------------------------------------ + PROCEDURE RecreateRoles(UserListA IN VARCHAR2 DEFAULT null) + IS + BEGIN + dbms_application_info.set_action('RecreateRoles'); + PrintDebug('Entering RecreateRoles'); + for i in 1 .. UserTab.count LOOP + if (OptCreateRoles) THEN + PrintDebug('CreateRoles=true, processing CREATE for user '||UserTab(i)); + DoRolesGrantedToUser(UserTab(i),'CREATE'); + PrintDebug('CreateRoles=true, also processing RolesToWhichObjPrivsAreGranted for role '||UserTab(i)); + RolesToWhichObjPrivsAreGranted(UserTab(i)); + ELSE + PrintDebug('CreateRoles=false, not creating roles of user '||UserTab(i)); + end if; + if (OptSysPrivsRoles) then + PrintDebug('SysPrivs=true, processing ADDSYSPRIVS for roles of user '||UserTab(i)); + DoRolesGrantedToUser(UserTab(i),'ADDSYSPRIVS'); + ELSE + PrintDebug('SysPrivs=false, not grant system privs to roles of user '||UserTab(i)); + end if; + if (OptObjPrivsRoles) then + PrintDebug('ObjPrivs=true, processing ADDOBJPRIVS for roles of user '||UserTab(i)); + DoRolesGrantedToUser(UserTab(i),'ADDOBJPRIVS'); + ELSE + PrintDebug('ObjPrivs=false, not grant object privs to roles of user '||UserTab(i)); + end if; + if (OptGrantRoles) then + PrintDebug('GrantRoles=true, processing GRANT for roles of user '||UserTab(i)); + DoRolesGrantedToUser(UserTab(i),'GRANT'); + ELSE + PrintDebug('GrantRoles=false, not granting roles to user '||UserTab(i)); + end if; + end loop; + PrintDebug('Finished RecreateRoles'); + end; + + + ------------------------------------------------------------------------------- + procedure SetDebug(DebugA in boolean default true) + is + begin + Debug := DebugA; + PrintDebug('Debug option is enabled'); + end; + + ------------------------------------------------------------------------------- + procedure SetScriptOptions(GenSqlA in boolean default true, + LogFileNameA in varchar2 default null, + WheneverSqlErrorA in boolean default false, + AddInfoA in boolean default true, + CheckRoleExistanceA in boolean default false, + NrPausesA in number default 0, + DocFormatA in varchar2 default 'TXT', + IncDropUsersA in boolean default false, + IncDropUsersCascadeA in boolean default false, + LineSizeA in number default 200 + ) + is + begin + dbms_application_info.set_action('Setting Script Options'); + -- Indicate if a real migrate script should be generated (true) or just + -- a text file with information about what the migrate script would do + if (GenSqlA) then GenSql := true; + else GenSql := false; + end if; + + LogFileName := LogFileNameA; + + -- Indicate if CREATE statements should be enclosed by WHENEVER SQL commands + if (WheneverSqlErrorA) then IncludeWheneverSqlError := True; + else IncludeWheneverSqlError := false; + end if; + + if (AddInfoA) then AddInfo := True; + else AddInfo := false; + end if; + + -- Indicate if the CREATE ROLE statements should be executed 'as is' or + -- if result should only create roles if they don't exists yet in the target database + if (CheckRoleExistanceA) then CheckRoleExistance := True; + else CheckRoleExistance := false; + end if; + + -- Specify how many pause statements should be included in the output before + -- running the rest of the script automatically + if (NrPausesA >= 0) then NrPauses := NrPausesA; else Raise_Application_Error(-20999,'Error in SetScriptOptions: NrPausesA should be >= 0'); end if; + + if (upper(DocFormatA) in ('TXT','HTM')) then DocFormat := upper(DocFormatA); + else Raise_Application_Error(-20999,'Error in SetScriptOptions: DocFormatA should be TXT or HTM'); + end if; + + -- Generates 'DROP USER' statements before every CREATE USER + IncDropUsers := IncDropUsersA; + + -- Adds CASCADE to each DROP USER statements + IncDropUsersCascade := IncDropUsersCascade; + + if (LineSizeA > 0) then + LineSize := LineSizeA; + end if; + end; + + ------------------------------------------------------------------------------- + procedure SetDatafileOptions(SrcSeparatorA in varchar2 default null, + DstSeparatorA in varchar2 default null, + FilesizeInitialPctA in number default 100, + FilesizeAutomaxPctA in number default 100, + ForceAutoextendA in boolean default true, + DefaultDirectoryA in varchar2 default null, + ConvertFilenamesToLowerA in boolean default false, + IncDropPermanentTablespacesA in boolean default false, + IncIncludeDropTSContentsA in boolean default false, + IncDropTemporaryTablespacesA in boolean default false + ) + is + begin + dbms_application_info.set_action('Setting datafile options'); + if (SrcSeparatorA in ('/','\')) then + SourceDirectorySeparator := SrcSeparatorA; + elsif (SrcSeparatorA is not null) then + Raise_Application_Error(-20999,'Error in SetDatafileOptions: SrcSeparatorA should be / or \'); + end if; + + if (DstSeparatorA in ('/','\')) then + DestinationDirectorySeparator := DstSeparatorA; + elsif (DstSeparatorA is not null) then + Raise_Application_Error(-20999,'Error in SetDatafileOptions: DstSeparatorA should be / or \'); + end if; + + -- Create new datafiles as small files (they will grow during import due to autoextend) + if (FilesizeInitialPctA > 0) then + FilesizeInitialPct := FilesizeInitialPctA; + else + Raise_Application_Error(-20999,'Error in SetDatafileOptions: FilesizeInitialPctA should be > 0'); + end if; + + -- Specify the generated value of autoextend maxsize as a percentage of the current file size + if (FilesizeAutomaxPctA > 0) then + FilesizeAutomaxPct := FilesizeAutomaxPctA; + else + Raise_Application_Error(-20999,'Error in SetDatafileOptions: FilesizeAutomaxPctA should be > 0'); + end if; + + -- Force all files to have the autoextend option enabled. If set to false, the + -- same setting will be used as on the source database + ForceAutoextend := ForceAutoextendA; + + ConvertFilenamesToLower := ConvertFilenamesToLowerA; + + -- Indicate the directory where all datafiles will be put on the target database + -- Specify an empty string to keep datafiles in the same directory as the source database + -- Note: an AddDatafileDirectory may override the target location of the datafile + DefaultDatafileDirectory := rtrim(DefaultDirectoryA,'\/'); + + -- Generate DROP statements for permanent tablespaces + IncDropPermanentTablespaces := IncDropPermanentTablespacesA; + + -- Adds 'including contents and datafiles' to drop tablespace + IncIncludeDropTSContents := IncIncludeDropTSContentsA; + + -- Generate DROP statements for temporary tablespaces + IncDropTemporaryTablespaces := IncDropTemporaryTablespacesA; + + end; + + ------------------------------------------------------------------------------ + PROCEDURE ExcludeTablespace(TablespaceA IN VARCHAR2) + IS + begin + -- Specify which tablespaces from the source database should be excluded for + -- generating 'create tablespace' statements + for i in 1 .. IncludedTablespaces.count loop + if (IncludedTablespaces(i) = TablespaceA) then + Raise_Application_Error(-20999,'Error: cannot exclude and include the same tablespace: '||TablespaceA); + end if; + end loop; + CreatedTablespaces(CreatedTablespaces.Count+1) := TablespaceA; + END; + + ------------------------------------------------------------------------------ + PROCEDURE IncludeTablespace(TablespaceA IN VARCHAR2) + IS + begin + -- Specify which tablespaces from the source database should be included for + -- generating 'create tablespace' statements, even if there are no + -- dependencies with any user + for i in 1 .. CreatedTablespaces.count loop + if (CreatedTablespaces(i) = TablespaceA) then + Raise_Application_Error(-20999,'Error: cannot exclude and include the same tablespace: '||TablespaceA); + end if; + end loop; + IncludedTablespaces(IncludedTablespaces.Count+1) := TablespaceA; + END; + + ------------------------------------------------------------------------------ + PROCEDURE ExcludeSysPriv(PrivilegeA IN VARCHAR2) + IS + begin + -- Specify which system privileges from the source database should be excluded for + -- generating 'grant ' statements + ExcludedSysPrivs(ExcludedSysPrivs.Count+1) := PrivilegeA; + END; + + ------------------------------------------------------------------------------ + PROCEDURE ExcludeRole(RoleA IN VARCHAR2) + IS + begin + -- Specify which tablespaces from the source database should be excluded for + -- generating create and grant statements + ExcludedRoles(ExcludedRoles.Count+1) := RoleA; + END; + + ------------------------------------------------------------------------------ + PROCEDURE AddDatafileDirectory(IfLikeA IN VARCHAR2, DirA IN VARCHAR2) + IS + BEGIN + -- Change directory path for certain files. Acts as a replace() on the filename: + -- I.e.: (arg1,arg2) means: if source-datafile like arg1 then directory on the + -- target database will be arg2 (arg2 should only specify a directory) + IF (IfLikeA IS NOT NULL) THEN + DatafileLikeTable(DatafileLikeTable.Count+1) := IfLikeA; + DatafileDirectoryTable(DatafileDirectoryTable.Count+1) := DirA; + ELSE + Raise_Application_Error(-20000,'Cannot call AddDatafileDirectory with first argument NULL'); + END IF; + EXCEPTION + WHEN OTHERS THEN + Raise_Application_Error(-20000,'Error in AddDatafileDirectory for '||IfLikeA||' and '||DirA,TRUE); + END; + + ------------------------------------------------------------------------------- + PROCEDURE SetUserList(UserListA in varchar2) + is + UserTabLen number; + BEGIN + dbms_application_info.set_action('Setting userlist'); + PrintDebug('Entering SetUserList'); + UserTab.delete; + IF (Trim(UserListA) IS NULL) THEN + -- No users specified, take all users in the database + FOR u_rec IN (SELECT username FROM dba_users WHERE username NOT IN ('SYS','SYSTEM','SYSMAN','SCHEDULER_ADMIN','MGMT_USER','MGMT_VIEW','DBSNMP','WMSYS')) loop + UserTab(UserTab.count+1) := u_rec.username; + END LOOP; + ELSE + Dbms_Utility.comma_to_table(UserListA, UserTabLen, UserTab); + for i in 1 .. UserTab.count LOOP + if (UserTab(i) is null) then UserTab.delete(i); end if; + end loop; + END IF; + PrintDebug('Found '||UserTab.count||' users to be processed, leaving SetUserList'); + end; + ------------------------------------------------------------------------------- + procedure SetCreateOptions(CreateUsers in boolean, + SysPrivsUsers in boolean, + ObjPrivsUsers in boolean, + DependentTS in boolean, + PublicSynonyms in boolean, + SetQuotas in boolean, + CreateRoles in boolean, + SysPrivsRoles in boolean, + ObjPrivsRoles in boolean, + GrantRoles in boolean, + Contexts in boolean) + is + begin + dbms_application_info.set_action('Setting Create Options'); + OptCreateUsers := CreateUsers; + OptSysPrivsUsers := SysPrivsUsers; + OptObjPrivsUsers := ObjPrivsUsers; + OptDependentTS := DependentTS; + OptPublicSynonyms := PublicSynonyms; + OptSetQuotas := SetQuotas; + OptCreateRoles := CreateRoles; + OptSysPrivsRoles := SysPrivsRoles; + OptObjPrivsRoles := ObjPrivsRoles; + OptGrantRoles := GrantRoles; + OptContexts := Contexts; + end; + + ------------------------------------------------------------------------------- + procedure SetCreateOptions(PrePostImportA in varchar2) + is + begin + dbms_application_info.set_action('Setting Create Options'); + if (upper(PrePostImportA) = 'PRE') then + --Post-import: create all the necessary sql to be executed before the import: + SetCreateOptions(CreateUsers=>true, SysPrivsUsers=>true, ObjPrivsUsers=>false, + DependentTS=>true, PublicSynonyms=>false, SetQuotas=>true, + CreateRoles=>true, SysPrivsRoles=>true, ObjPrivsRoles=>false, + GrantRoles=>true, Contexts=>false); + elsif (upper(PrePostImportA) = 'POST') then + --Post-import: create all the necessary sql to be executed after the import: + SetCreateOptions(CreateUsers=>false, SysPrivsUsers=>false, ObjPrivsUsers=>true, + DependentTS=>false, PublicSynonyms=>true, SetQuotas=>false, + CreateRoles=>false, SysPrivsRoles=>false, ObjPrivsRoles=>true, + GrantRoles=>false, Contexts=>true); + else + Raise_Application_Error(-20999,'Error in SetCreateOptions: PrePostImportA should be PRE or POST'); + end if; + end; + ------------------------------------------------------------------------------ + procedure BigBanner(MsgA in varchar2) + is + begin + PrintMessage('--='||lpad('=',length(MsgA),'=')); + PrintMessage('-- '||MsgA); + PrintMessage('--='||lpad('=',length(MsgA),'=')); + end; + ------------------------------------------------------------------------------ + PROCEDURE Initialize + IS + BEGIN + dbms_application_info.set_action('Initializing'); + Dbms_Output.ENABLE(1000000); + PrintMessage('whenever oserror exit'); + SELECT NAME INTO DbName FROM v$database; + PrintMessage(''); + PrintMessage('-- Script for database '||DbName||', generated at '||To_Char(SYSDATE,'DD-Mon-YYYY HH24:MI:SS')); + PrintMessage('set feedback off linesize 1000 trimspool on'); + PrintMessage('set serveroutput on format wrapped'); + PrintMessage(''); + PrintMessage('-- This script can recreate users, roles, tablespaces, etc...'); + PrintMessage('-- It can be used before and after a user-export/import (exp owner=...)'); + PrintMessage('-- Please verify the script manually before running it'); + PrintMessage('-- Use of this script is at your own risk'); + PrintMessage(''); + if (LogFileName is not null) then + PrintMessage('spool '||LogFileName); + end if; + SELECT Value INTO DbBlockSize FROM v$parameter WHERE NAME = 'db_block_size'; + select version into DbVersion from v$instance; + CreatedRoles.DELETE; + GrantedSysPrivsRoles.DELETE; + GrantedObjPrivsRoles.DELETE; + GrantedRoles.DELETE; + PausesPrinted := 0; + QueuedMessage := ''; + + if (SourceDirectorySeparator is null) then + DECLARE + NrSlash NUMBER := 0; + NrBack NUMBER := 0; + BEGIN + FOR n_rec IN (SELECT NAME FROM v$datafile) LOOP + FOR i IN 1 .. Length(n_rec.NAME) LOOP + IF (SubStr(n_rec.NAME,i,1) = '/') THEN NrSlash := NrSlash + 1; END IF; + IF (SubStr(n_rec.NAME,i,1) = '\') THEN NrBack := NrBack + 1; END IF; + END LOOP; + END LOOP; + IF (NrSlash > 0) THEN + SourceDirectorySeparator := '/'; + PrintDebug('Platform is Unix, SourceDirectorySeparator = /'); + ELSE + SourceDirectorySeparator := '\'; + PrintDebug('Platform is Windows, SourceDirectorySeparator = \'); + END IF; + END; + end if; + if (DestinationDirectorySeparator is null) then + DestinationDirectorySeparator := SourceDirectorySeparator; + end if; + + END; + + ------------------------------------------------------------------------------ + PROCEDURE Finalize + IS + BEGIN + if (LogFileName is not null) then + PrintMessage('spool off'); + end if; + PrintMessage('set feedback on'); + end; + + ------------------------------------------------------------------------------- + procedure Run(BigBannerA in varchar2 default null) + is + begin + if (BigBannerA is not null) then + BigBanner('START OF '||BigBannerA); + end if; + Initialize; + DoVerifyTargetDatabase; + for i in 1 .. IncludedTablespaces.count loop + RecreateTablespace(IncludedTablespaces(i),'it was explicitly included'); + end loop; + RecreateUsers; + RecreateRoles; + Finalize; + if (BigBannerA is not null) then + BigBanner('END OF '||BigBannerA); + end if; + PrintMessage(''); + PrintMessage(''); + PrintMessage(''); + dbms_application_info.set_action('Finished Run'); + end; + + ------------------------------------------------------------------------------- + procedure Reset + is + begin + -- SetDebug + Debug := false; + -- VerifyTargetDatabase + OptVerifyDbName := null; + OptVerifyHostName := null; + OptVerifyInstanceName := null; + OptVerifyVersionLike := null; + -- SetScriptOptions + GenSql := true; + LogFileName := null; + IncludeWheneverSqlError := true; + NrPauses := 1; + DocFormat := 'TXT'; + AddInfo := TRUE; + IncDropUsers := FALSE; + IncDropUsersCascade := FALSE; + CheckRoleExistance := TRUE; + LineSize := 200; + -- SetDatafileOptions + SourceDirectorySeparator := ''; + DestinationDirectorySeparator := ''; + DefaultDatafileDirectory := ''; + ConvertFilenamesToLower := TRUE; + IncDropPermanentTablespaces := FALSE; + IncIncludeDropTSContents := FALSE; + IncDropTemporaryTablespaces := FALSE; + ForceAutoextend := FALSE; + FilesizeInitialPct := 100; + FilesizeAutomaxPct := 100; + FilesizeAutomaxMaxKb := 33554416; + ForceAutoallocate := TRUE; + -- SetCreateOptions + OptCreateUsers := true; + OptSysPrivsUsers := true; + OptObjPrivsUsers := false; + OptDependentTS := true; + OptPublicSynonyms := false; + OptSetQuotas := true; + OptCreateRoles := true; + OptSysPrivsRoles := true; + OptObjPrivsRoles := false; + OptGrantRoles := true; + OptContexts := false; + -- ExcludeTablespace + CreatedTablespaces.delete; + -- IncludeTablespace + IncludedTablespaces.delete; + -- ExcludeSysPriv + ExcludedSysPrivs.delete; + -- ExcludeRole + ExcludedRoles.delete; + -- AddDatafileDirectory + DatafileLikeTable.delete; + DatafileDirectoryTable.delete; + -- SetUserList + UserTab.delete; + + -- Internal + CreatedRoles.delete; + GrantedSysPrivsRoles.delete; + GrantedObjPrivsRoles.delete; + GrantedRoles.delete; + PausesPrinted := 0; + QueuedMessage := ''; + end; + + ------------------------------------------------------------------------------ + procedure CORP + is + begin + SetDebug(false); + + VerifyTargetDatabase('CORP', InstanceNameA => 'CORP', HostNameA => 'ANTILOPE', VersionLikeA => '10.2.0.3%'); + SetScriptOptions(GenSqlA => true, + LogFileNameA => 'PreImportCORP.log', + WheneverSqlErrorA => false, + AddInfoA => true, + CheckRoleExistanceA => true, + NrPausesA => 0, + LineSizeA => 150); + + -- Indicate the file system type for the source and destination database: + SetDatafileOptions(SrcSeparatorA => '\', + DstSeparatorA => '\', + FilesizeInitialPctA => 1, + FilesizeAutomaxPctA => 1000, + ForceAutoextendA => true, + DefaultDirectoryA => 'E:\Oracle\Oradata\CORP'); + + ExcludeTablespace('TEMP'); + ExcludeTablespace('DRSYS'); + ExcludeTablespace('RBS'); + ExcludeTablespace('USERS'); + IncludeTablespace('CIM_DATA'); + ExcludeSysPriv('ADMINISTER RESOURCE MANAGER'); -- Does not exist in 10g + ExcludeRole('SNMPAGENT'); -- Does not exist in 10g + + AddDatafileDirectory('%INDEX%','F:\ORACLE\ORADATA\CORP'); + + SetUserList('CIM,CORP'); + SetCreateOptions(PrePostImportA => 'PRE'); + Run('PRE-IMPORT STATEMENTS for CORP (40_PreImportCORP.sql)'); + + SetCreateOptions(PrePostImportA => 'POST'); + SetScriptOptions(LogFileNameA => 'PostImportCORP.log'); + Run('POST-IMPORT STATEMENTS for CORP (60_PostImportCORP.sql)'); + end; + + ------------------------------------------------------------------------------ + procedure MDB + is + begin + SetDebug(false); + + VerifyTargetDatabase('MDB', InstanceNameA => 'MDB', HostNameA => 'ANTILOPE', VersionLikeA => '10.2.0.3%'); + SetScriptOptions(GenSqlA => true, + LogFileNameA => 'PreImportMDB.log', + WheneverSqlErrorA => false, + AddInfoA => true, + CheckRoleExistanceA => true, + NrPausesA => 0, + LineSizeA => 150); + + -- Indicate the file system type for the source and destination database: + SetDatafileOptions(SrcSeparatorA => '\', + DstSeparatorA => '\', + FilesizeInitialPctA => 1, + FilesizeAutomaxPctA => 120, + ForceAutoextendA => true, + DefaultDirectoryA => 'F:\Oracle\Oradata\MDB'); + + ExcludeTablespace('TEMP'); + ExcludeTablespace('DRSYS'); + ExcludeTablespace('RBS'); + ExcludeTablespace('USERS'); + ExcludeSysPriv('ADMINISTER RESOURCE MANAGER'); -- Does not exist in 10g + ExcludeRole('SNMPAGENT'); -- Does not exist in 10g + + AddDatafileDirectory('%INDEX%','E:\ORACLE\ORADATA\MDB'); + + SetUserList('BVDMDB_SET_MNGT,BVDMDBIMPORT,BVDMDB'); + SetCreateOptions(PrePostImportA => 'PRE'); + Run('PRE-IMPORT STATEMENTS for MDB (40_PreImportMDB.sql)'); + + SetCreateOptions(PrePostImportA => 'POST'); + Run('POST-IMPORT STATEMENTS for MDB (60_PostImportMDB.sql)'); + end; + + ------------------------------------------------------------------------------ + procedure MDBW + is + begin + SetDebug(false); + + VerifyTargetDatabase('MDBW', InstanceNameA => 'MDBW', HostNameA => 'ANTILOPE', VersionLikeA => '10.2.0.3%'); + SetScriptOptions(GenSqlA => true, + LogFileNameA => 'PreImportMDBW.log', + WheneverSqlErrorA => false, + AddInfoA => true, + CheckRoleExistanceA => true, + NrPausesA => 0, + LineSizeA => 150); + + -- Indicate the file system type for the source and destination database: + SetDatafileOptions(SrcSeparatorA => '\', + DstSeparatorA => '\', + FilesizeInitialPctA => 1, + FilesizeAutomaxPctA => 120, + ForceAutoextendA => true, + DefaultDirectoryA => 'F:\Oracle\Oradata\MDBW'); + + ExcludeTablespace('TEMP'); + ExcludeTablespace('DRSYS'); + ExcludeTablespace('RBS'); + ExcludeTablespace('USERS'); + ExcludeSysPriv('ADMINISTER RESOURCE MANAGER'); -- Does not exist in 10g + ExcludeRole('SNMPAGENT'); -- Does not exist in 10g + ExcludeRole('JAVADEBUGPRIV'); + ExcludeRole('JAVAIDPRIV'); + ExcludeRole('JAVAUSERPRIV'); + ExcludeRole('JAVASYSPRIV'); + + AddDatafileDirectory('%INDEX%','E:\ORACLE\ORADATA\MDBW'); + + SetUserList('BVDMDB_SET_MNGT,BVDMDBIMPORT,BVDMDB'); + SetCreateOptions(PrePostImportA => 'PRE'); + Run('PRE-IMPORT STATEMENTS for MDBW (40_PreImportMDBW.sql)'); + + SetCreateOptions(PrePostImportA => 'POST'); + Run('POST-IMPORT STATEMENTS for MDBW (60_PostImportMDBW.sql)'); + end; + + ------------------------------------------------------------------------------ + procedure BORP + is + begin + SetDebug(false); + + VerifyTargetDatabase('BORP', InstanceNameA => 'BORP', HostNameA => 'ANTILOPE', VersionLikeA => '10.2.0.3%'); + SetScriptOptions(GenSqlA => true, + LogFileNameA => 'PreImportBORP.log', + WheneverSqlErrorA => false, + AddInfoA => true, + CheckRoleExistanceA => true, + NrPausesA => 0, + LineSizeA => 150); + + -- Indicate the file system type for the source and destination database: + SetDatafileOptions(SrcSeparatorA => '\', + DstSeparatorA => '\', + FilesizeInitialPctA => 1, + FilesizeAutomaxPctA => 120, + ForceAutoextendA => true, + DefaultDirectoryA => 'E:\Oracle\Oradata\BORP'); + + ExcludeTablespace('TEMP'); + ExcludeTablespace('DRSYS'); + ExcludeTablespace('RBS'); + ExcludeTablespace('USERS'); + ExcludeSysPriv('EXTENDS ANY TYPE'); -- Does not exist in 10g + ExcludeRole('SNMPAGENT'); -- Does not exist in 10g +-- ExcludeRole('JAVADEBUGPRIV'); +-- ExcludeRole('JAVAIDPRIV'); +-- ExcludeRole('JAVAUSERPRIV'); +-- ExcludeRole('JAVASYSPRIV'); + + AddDatafileDirectory('%INDEX%','F:\ORACLE\ORADATA\BORP'); + + SetUserList('BORP,CACC,CADEV,CDEV,CPDEV,CPRD,CPRDEV,MACC,MDEV,MPRD,PRACC,PRDEV,PRPRD,QM,QMEUA,QM_1,QM_2,QM_BORP,RMB,SACC,SDEV,SPRD'); + SetCreateOptions(PrePostImportA => 'PRE'); + Run('PRE-IMPORT STATEMENTS for BORP (40_PreImportBORP.sql)'); + + SetCreateOptions(PrePostImportA => 'POST'); + Run('POST-IMPORT STATEMENTS for BORP (60_PostImportBORP.sql)'); + end; + + ------------------------------------------------------------------------------ + procedure CORPSTAT + is + begin + SetDebug(false); + + VerifyTargetDatabase('CORP', InstanceNameA => 'CORP', HostNameA => 'ANTILOPE', VersionLikeA => '10.2.0.3%'); + SetScriptOptions(GenSqlA => true, + LogFileNameA => 'PreImportCORPStat.log', + WheneverSqlErrorA => false, + AddInfoA => true, + CheckRoleExistanceA => true, + NrPausesA => 0, + LineSizeA => 150); + + -- Indicate the file system type for the source and destination database: + SetDatafileOptions(SrcSeparatorA => '\', + DstSeparatorA => '\', + FilesizeInitialPctA => 1, + FilesizeAutomaxPctA => 1000, + ForceAutoextendA => true, + DefaultDirectoryA => 'E:\Oracle\Oradata\CORP'); + + ExcludeTablespace('TEMP'); + ExcludeTablespace('DRSYS'); + ExcludeTablespace('RBS'); + ExcludeTablespace('USERS'); + ExcludeSysPriv('ADMINISTER RESOURCE MANAGER'); -- Does not exist in 10g + ExcludeRole('SNMPAGENT'); -- Does not exist in 10g + + AddDatafileDirectory('%INDEX%','F:\ORACLE\ORADATA\CORP'); + + SetUserList('STAT'); + SetCreateOptions(PrePostImportA => 'PRE'); + Run('PRE-IMPORT STATEMENTS for CORP (XX_PreImportCORPStat.sql)'); + + SetCreateOptions(PrePostImportA => 'POST'); + SetScriptOptions(LogFileNameA => 'PostImportCORPStat.log'); + Run('POST-IMPORT STATEMENTS for CORP (XX_PostImportCORPStat.sql)'); + end; + + ------------------------------------------------------------------------------ + procedure ZINT + is + begin + SetDebug(false); + + VerifyTargetDatabase('TRUDBA', InstanceNameA => 'TRUDBA', HostNameA => 'trudba', VersionLikeA => '9.2.0%'); + SetScriptOptions(GenSqlA => true, + LogFileNameA => 'PreImportZINT.log', + WheneverSqlErrorA => false, + AddInfoA => true, + CheckRoleExistanceA => true, + NrPausesA => 0, + LineSizeA => 150); + + -- Indicate the file system type for the source and destination database: + SetDatafileOptions(SrcSeparatorA => '/', + DstSeparatorA => '\', + FilesizeInitialPctA => 1, + FilesizeAutomaxPctA => 1000, + ForceAutoextendA => true, + DefaultDirectoryA => 'I:\Oracle\Oradata\ZINT'); + + ExcludeTablespace('TEMP'); + ExcludeTablespace('RBS'); + ExcludeTablespace('USERS'); + + SetUserList('ZINT'); + SetCreateOptions(PrePostImportA => 'PRE'); + Run('PRE-IMPORT STATEMENTS for ZINT (XX_PreImportCORPStat.sql)'); + + SetCreateOptions(PrePostImportA => 'POST'); + SetScriptOptions(LogFileNameA => 'PostImportCORPStat.log'); + Run('POST-IMPORT STATEMENTS for ZINT (XX_PostImportCORPStat.sql)'); + end; + + ------------------------------------------------------------------------------ +begin + dbms_application_info.set_module('RecreateUsers','Initializing'); + Reset; +END gdp$uptime_migration; +/ diff --git a/vdh/SimpleHTTPServerWithUpload.py b/vdh/SimpleHTTPServerWithUpload.py new file mode 100644 index 0000000..69cf175 --- /dev/null +++ b/vdh/SimpleHTTPServerWithUpload.py @@ -0,0 +1,294 @@ +#!/usr/bin/env python + +"""Simple HTTP Server With Upload. + +This module builds on BaseHTTPServer by implementing the standard GET +and HEAD requests in a fairly straightforward manner. + +""" + + +__version__ = "0.1" +__all__ = ["SimpleHTTPRequestHandler"] +__author__ = "bones7456" +__home_page__ = "http://li2z.cn/" + +import os +import posixpath +import BaseHTTPServer +import urllib +import cgi +import shutil +import mimetypes +import re +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + + +class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): + + """Simple HTTP request handler with GET/HEAD/POST commands. + + This serves files from the current directory and any of its + subdirectories. The MIME type for files is determined by + calling the .guess_type() method. And can reveive file uploaded + by client. + + The GET/HEAD/POST requests are identical except that the HEAD + request omits the actual contents of the file. + + """ + + server_version = "SimpleHTTPWithUpload/" + __version__ + + def do_GET(self): + """Serve a GET request.""" + f = self.send_head() + if f: + self.copyfile(f, self.wfile) + f.close() + + def do_HEAD(self): + """Serve a HEAD request.""" + f = self.send_head() + if f: + f.close() + + def do_POST(self): + """Serve a POST request.""" + r, info = self.deal_post_data() + print r, info, "by: ", self.client_address + f = StringIO() + f.write('') + f.write("\nUpload Result Page\n") + f.write("\n

    Upload Result Page

    \n") + f.write("
    \n") + if r: + f.write("Success:") + else: + f.write("Failed:") + f.write(info) + f.write("
    back" % self.headers['referer']) + f.write("
    Powerd By: bones7456, check new version at ") + f.write("") + f.write("here.\n\n") + length = f.tell() + f.seek(0) + self.send_response(200) + self.send_header("Content-type", "text/html") + self.send_header("Content-Length", str(length)) + self.end_headers() + if f: + self.copyfile(f, self.wfile) + f.close() + + def deal_post_data(self): + boundary = self.headers.plisttext.split("=")[1] + remainbytes = int(self.headers['content-length']) + line = self.rfile.readline() + remainbytes -= len(line) + if not boundary in line: + return (False, "Content NOT begin with boundary") + line = self.rfile.readline() + remainbytes -= len(line) + fn = re.findall(r'Content-Disposition.*name="file"; filename="(.*)"', line) + if not fn: + return (False, "Can't find out file name...") + path = self.translate_path(self.path) + fn = os.path.join(path, fn[0]) + line = self.rfile.readline() + remainbytes -= len(line) + line = self.rfile.readline() + remainbytes -= len(line) + try: + out = open(fn, 'wb') + except IOError: + return (False, "Can't create file to write, do you have permission to write?") + + preline = self.rfile.readline() + remainbytes -= len(preline) + while remainbytes > 0: + line = self.rfile.readline() + remainbytes -= len(line) + if boundary in line: + preline = preline[0:-1] + if preline.endswith('\r'): + preline = preline[0:-1] + out.write(preline) + out.close() + return (True, "File '%s' upload success!" % fn) + else: + out.write(preline) + preline = line + return (False, "Unexpect Ends of data.") + + def send_head(self): + """Common code for GET and HEAD commands. + + This sends the response code and MIME headers. + + Return value is either a file object (which has to be copied + to the outputfile by the caller unless the command was HEAD, + and must be closed by the caller under all circumstances), or + None, in which case the caller has nothing further to do. + + """ + path = self.translate_path(self.path) + f = None + if os.path.isdir(path): + if not self.path.endswith('/'): + # redirect browser - doing basically what apache does + self.send_response(301) + self.send_header("Location", self.path + "/") + self.end_headers() + return None + for index in "index.html", "index.htm": + index = os.path.join(path, index) + if os.path.exists(index): + path = index + break + else: + return self.list_directory(path) + ctype = self.guess_type(path) + try: + # Always read in binary mode. Opening files in text mode may cause + # newline translations, making the actual size of the content + # transmitted *less* than the content-length! + f = open(path, 'rb') + except IOError: + self.send_error(404, "File not found") + return None + self.send_response(200) + self.send_header("Content-type", ctype) + fs = os.fstat(f.fileno()) + self.send_header("Content-Length", str(fs[6])) + self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) + self.end_headers() + return f + + def list_directory(self, path): + """Helper to produce a directory listing (absent index.html). + + Return value is either a file object, or None (indicating an + error). In either case, the headers are sent, making the + interface the same as for send_head(). + + """ + try: + list = os.listdir(path) + except os.error: + self.send_error(404, "No permission to list directory") + return None + list.sort(key=lambda a: a.lower()) + f = StringIO() + displaypath = cgi.escape(urllib.unquote(self.path)) + f.write('') + f.write("\nDirectory listing for %s\n" % displaypath) + f.write("\n

    Directory listing for %s

    \n" % displaypath) + f.write("
    \n") + f.write("
    ") + f.write("") + f.write("\n") + f.write("
    \n
      \n") + for name in list: + fullname = os.path.join(path, name) + displayname = linkname = name + # Append / for directories or @ for symbolic links + if os.path.isdir(fullname): + displayname = name + "/" + linkname = name + "/" + if os.path.islink(fullname): + displayname = name + "@" + # Note: a link to a directory displays with @ and links with / + f.write('
    • %s\n' + % (urllib.quote(linkname), cgi.escape(displayname))) + f.write("
    \n
    \n\n\n") + length = f.tell() + f.seek(0) + self.send_response(200) + self.send_header("Content-type", "text/html") + self.send_header("Content-Length", str(length)) + self.end_headers() + return f + + def translate_path(self, path): + """Translate a /-separated PATH to the local filename syntax. + + Components that mean special things to the local file system + (e.g. drive or directory names) are ignored. (XXX They should + probably be diagnosed.) + + """ + # abandon query parameters + path = path.split('?',1)[0] + path = path.split('#',1)[0] + path = posixpath.normpath(urllib.unquote(path)) + words = path.split('/') + words = filter(None, words) + path = os.getcwd() + for word in words: + drive, word = os.path.splitdrive(word) + head, word = os.path.split(word) + if word in (os.curdir, os.pardir): continue + path = os.path.join(path, word) + return path + + def copyfile(self, source, outputfile): + """Copy all data between two file objects. + + The SOURCE argument is a file object open for reading + (or anything with a read() method) and the DESTINATION + argument is a file object open for writing (or + anything with a write() method). + + The only reason for overriding this would be to change + the block size or perhaps to replace newlines by CRLF + -- note however that this the default server uses this + to copy binary data as well. + + """ + shutil.copyfileobj(source, outputfile) + + def guess_type(self, path): + """Guess the type of a file. + + Argument is a PATH (a filename). + + Return value is a string of the form type/subtype, + usable for a MIME Content-type header. + + The default implementation looks the file's extension + up in the table self.extensions_map, using application/octet-stream + as a default; however it would be permissible (if + slow) to look inside the data to make a better guess. + + """ + + base, ext = posixpath.splitext(path) + if ext in self.extensions_map: + return self.extensions_map[ext] + ext = ext.lower() + if ext in self.extensions_map: + return self.extensions_map[ext] + else: + return self.extensions_map[''] + + if not mimetypes.inited: + mimetypes.init() # try to read system mime.types + extensions_map = mimetypes.types_map.copy() + extensions_map.update({ + '': 'application/octet-stream', # Default + '.py': 'text/plain', + '.c': 'text/plain', + '.h': 'text/plain', + }) + + +def test(HandlerClass = SimpleHTTPRequestHandler, + ServerClass = BaseHTTPServer.HTTPServer): + BaseHTTPServer.test(HandlerClass, ServerClass) + +if __name__ == '__main__': + test() diff --git a/vdh/activity_monitor.sql b/vdh/activity_monitor.sql new file mode 100644 index 0000000..3887d8f --- /dev/null +++ b/vdh/activity_monitor.sql @@ -0,0 +1,213 @@ +set echo off +set feedback off + +set linesize 150 +set pages 9999 + +column space_limit_mb format 999G999D99 +column space_used_mb format 999G999D99 +column space_reclaimable_mb format 999G999D99 +column percent_space_used format 00D99 +column percent_space_reclaimable format 00D99 + +compute sum of space_used_mb on report +compute sum of space_reclaimable_mb on report +compute sum of percent_space_used on report +compute sum of percent_space_reclaimable on report +compute sum of number_of_files on report; + +break on space_limit_mb on report + +select fusg.file_type, decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, nvl(ra.space_limit, 0))/1048576 space_limit_mb, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, nvl(fusg.space_used, 0))/1048576 space_used_mb, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, round(nvl(fusg.space_used, 0)/ra.space_limit, 4) * 100) percent_space_used, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, nvl(fusg.space_reclaimable, 0))/1048576 space_reclaimable_mb, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, round(nvl(fusg.space_reclaimable, 0)/ra.space_limit, 4) * 100) percent_space_reclaimable, + nvl2(ra.name, fusg.number_of_files, 0) number_of_files +from v$recovery_file_dest ra, + ( select 'CONTROLFILE' file_type, + sum( case when ceilasm = 1 and name like '+%' + then ceil(((block_size*file_size_blks)+1)/1048576)*1048576 + else block_size*file_size_blks + end + ) space_used, + 0 space_reclaimable, count(*) number_of_files + from v$controlfile, + ( select /*+ no_merge*/ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + union all + select 'ONLINELOG' file_type, + sum( case when ceilasm = 1 and member like '+%' + then ceil((l.bytes+1)/1048576)*1048576 + else l.bytes + end + ) space_used, + 0 space_reclaimable, count(*) number_of_files + from ( select group#, bytes + from v$log + union + select group#, bytes + from v$standby_log + ) l, v$logfile lf, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where l.group# = lf.group# + and lf.is_recovery_dest_file = 'YES' + union all + select 'ARCHIVELOG' file_type, + sum(al.file_size) space_used, + sum( case when dl.rectype = 11 + then al.file_size + else 0 + end + ) space_reclaimable, + count(*) number_of_files + from ( select recid, + case when ceilasm = 1 and name like '+%' + then ceil(((blocks*block_size)+1)/1048576)*1048576 + else blocks * block_size + end file_size + from v$archived_log, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + and name is not null + ) al, + x$kccagf dl + where al.recid = dl.recid(+) + and dl.rectype(+) = 11 + union all + select 'BACKUPPIECE' file_type, + sum(bp.file_size) space_used, + sum ( case when dl.rectype = 13 + then bp.file_size + else 0 + end + ) space_reclaimable, + count(*) number_of_files + from ( select recid, + case when ceilasm = 1 and handle like '+%' + then ceil((bytes+1)/1048576)*1048576 + else bytes + end file_size + from v$backup_piece, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + and handle is not null + ) bp, + x$kccagf dl + where bp.recid = dl.recid(+) + and dl.rectype(+) = 13 + union all + select 'IMAGECOPY' file_type, + sum(dc.file_size) space_used, + sum( case when dl.rectype = 16 + then dc.file_size + else 0 end + ) space_reclaimable, + count(*) number_of_files + from ( select recid, + case when ceilasm = 1 and name like '+%' + then ceil(((blocks*block_size)+1)/1048576)*1048576 + else blocks * block_size + end file_size + from v$datafile_copy, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + and name is not null + ) dc, + x$kccagf dl + where dc.recid = dl.recid(+) + and dl.rectype(+) = 16 + union all + select 'FLASHBACKLOG' file_type, + nvl(fl.space_used, 0) space_used, + nvl(fb.reclsiz, 0) space_reclaimable, + nvl(fl.number_of_files, 0) number_of_files + from ( select sum( case when ceilasm = 1 and name like '+%' + then ceil((fl.bytes+1)/1048576)*1048576 + else bytes + end + ) space_used, + count(*) number_of_files + from v$flashback_database_logfile fl, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + ) fl, + ( select sum(to_number(fblogreclsiz)) reclsiz + from x$krfblog + ) fb + ) fusg +order by file_type; + +clear breaks + +set pagesize 999 +set linesize 140 + +column name format a25 heading "tablespace name" +column space_mb format 99g999g990D99 heading "curr df mbytes" +column maxspace_mb format 99g999g990D99 heading "max df mbytes" +column used format 99g999g990D99 heading "used mbytes" +column df_free format 99g999g990D99 heading "curr df free mbytes" +column maxdf_free format 99g999g990D99 heading "max df free mbytes" +column pct_free format 990D99 heading "% free" +column pct_maxfile_free format 990D99 heading "% maxfile free" + +break on report + +compute sum of space_mb on report +compute sum of maxspace_mb on report +compute sum of df_free on report +compute sum of maxdf_free on report +compute sum of used on report + + +select df.tablespace_name name, df.space space_mb, df.maxspace maxspace_mb, (df.space - nvl(fs.freespace,0)) used, + nvl(fs.freespace,0) df_free, (nvl(fs.freespace,0) + df.maxspace - df.space) maxdf_free, + 100 * (nvl(fs.freespace,0) / df.space) pct_free, + 100 * ((nvl(fs.freespace,0) + df.maxspace - df.space) / df.maxspace) pct_maxfile_free +from ( select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_temp_files + group by tablespace_name + ) df, + ( select tablespace_name, sum(bytes)/1024/1024 freespace + from dba_free_space + group by tablespace_name + ) fs +where df.tablespace_name = fs.tablespace_name(+) +order by name; + +clear breaks + + +column hour_arch_size format 99G999D99 +column hour_arch# format 9G999 +column graph format a15 +column dayname format a12 +column dayhour format a18 + +break on dayname skip 1 + +select to_char(trunc(completion_time, 'HH'), 'DD/MM/YYYY HH24:MI') dayhour, sum(blocks * block_size)/1024/1024 hour_arch_size, count(*) hour_arch#, + rpad('*',floor(count(*)),'*') graph +from v$archived_log +where standby_dest = 'NO' + and completion_time >= trunc(sysdate, 'HH') - 4/24 +group by trunc(completion_time, 'HH') +order by dayhour; + +clear breaks \ No newline at end of file diff --git a/vdh/add_exadata_vmdisk.sh b/vdh/add_exadata_vmdisk.sh new file mode 100644 index 0000000..185f83c --- /dev/null +++ b/vdh/add_exadata_vmdisk.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +### This script will create a new virtual disk using the passed name and size and attaches it on the passed vm guest. +### It also modifies the config file for the guest, so the disk will be attached again after a restart +### The script will do some checking after each step to verify a correct outcome, but will not check upfront if enough disk space is available (still to be added) +### +### This script needs to be executed as root on the dom0 of the server on which the virtual disk needs to be created +### Required parameters are , and +### Do NOT add the img suffix to the disk name +### The disk size needs to be suffixed with the unit (eg 20G, to create a disk of 20 GB) +### +### Important to know is that this script will probably fail if the disk device mappings has "gaps", as it simply counts the number of disk devices for the given vm +### to determine the next free front device + +### Get the input parameters +guest_name=$1 +disk_name=$2 +disk_size=$3 + +### Check if all mandatory input parameters are given +if [ "${guest_name}" == "" ] || [ "${disk_name}" == "" ] || [ "${disk_size}" == "" ] +then + echo "usage: $0 guest_name disk_name disk_size" + echo "guest_name is the name of the virtual guest on which the disk needs to be attached" + echo "disk_name is the name of the disk to be created \(without the .img suffix\)" + echo "disk_size is the size of the disk, including the unit \(eg 20G\)" + exit -1 +fi + +### generate the array of disk devices +### the current limit of attached devices is 37 +drive_array=(xvda xvdb xvdc xvdd xvde xvdf xvdg xvdh xvdi xvdj xvdk xvdl xvdm xvdn xvdo xvdp xvdq xvdr xvds xvdt xvdv xvdw xvdx xvdy xvdz xvdaa xvdab xvdac xvdad xvdae xvdae xvdaf xvdag xvdah xvdai xvdaj xvdak) + +### get the uuid of the guest on which the new disk needs to be added +guest_uuid=$(xl vm-list | grep ${guest_name}| tr -d '-' |cut -d' ' -f1) +if [ "${guest_uuid}" == "" ] +then + echo "FAIL - Could not get guest uuid, pleace check guest name" + exit -1 +else + echo "Guest UUID: ${guest_uuid}" +fi + +### get the number of current attached block devices, as the output also includes a header, this is already the next available slot number +### subtract 1 to compensate for the arrays, which start at 0 and not 1 +### also, using xm and not xl here as xl seems to not list the disks that are attached on a running instance (exact reason still to be verified) +next_slot=$(($(xm block-list ${guest_name} | wc -l)-1)) +if [ "${next_slot}" == "" ] +then + echo "FAIL - Could not determine a free slot number, check outcome of xm block list ${guest_name}" + exit -1 +else + echo "Next drive slot: ${next_slot}" +fi + +### convert the new slot number to a drive name +next_drive=${drive_array[${next_slot}]} +if [ "${next_drive}" == "" ] || [[ ${next_drive} != xvd* ]] +then + echo "FAIL - Could not convert ${next_slot} to drive, check the drive_array variable" + exit -1 +else + echo "The new disk will be known on the vm as /dev/${next_drive}" +fi + +### generate a new uuid to be used for the new disk +disk_uuid=$(uuidgen | tr -d '-') +if [ "${disk_uuid}" == "" ] +then + echo "FAIL - Could not generate a new disk_uuid, check path variable for uuidgen" + exit -1 +else + echo "Generated disk UUID: ${disk_uuid}" +fi + +### create the virtual disk based upon the input parameters +### check first if the disk not already exists +if [ -e "/EXAVMIMAGES/GuestImages/${guest_name}/${disk_name}.img" ] +then + echo "FAIL - File /EXAVMIMAGES/GuestImages/${guest_name}/${disk_name}.img already exists, use a different disk name" + exit -1 +fi + +### create the disk +echo "creating the disk now" +qemu-img create /EXAVMIMAGES/GuestImages/${guest_name}/${disk_name}.img ${disk_size} + +### check if the disks exists +if [ ! -e "/EXAVMIMAGES/GuestImages/${guest_name}/${disk_name}.img" ] +then + echo "FAIL - File /EXAVMIMAGES/GuestImages/${guest_name}/${disk_name}.img was not created, check free disk space" + exit -1 +else + echo "Created disk image /EXAVMIMAGES/GuestImages/${guest_name}/${disk_name}.img" +fi + +### create the symbolic link, using the uuid of the vm guest and the newly generated uuid +ln -s /EXAVMIMAGES/GuestImages/${guest_name}/${disk_name}.img /OVS/Repositories/${guest_uuid}/VirtualDisks/${disk_uuid}.img + +### check if the symbolic link was correctly created +if [ ! -h "/OVS/Repositories/${guest_uuid}/VirtualDisks/${disk_uuid}.img" ] +then + echo "FAIL - Could not create symbolic link /OVS/Repositories/${guest_uuid}/VirtualDisks/${disk_uuid}.img" + exit -1 +else + echo "Symbolic link /OVS/Repositories/${guest_uuid}/VirtualDisks/${disk_uuid}.img generated" +fi + +### attach the block +xm block-attach ${guest_name} file:/OVS/Repositories/${guest_uuid}/VirtualDisks/${disk_uuid}.img /dev/${next_drive} w +result_code=$? +if [ ${result_code} -ne 0 ] +then + echo "FAIL - An error occured during the attach of the virtual disk, check console output" + exit -1 +else + echo "New disk was successfully attached to VM" +fi + +### add the new disk to the vm config file, so it is attached when restarted +### The sed commands searches for a line with the format "disk = []" and inserts the new disk into it. +### It does this by using grouping and back references (eg \1) +### The first group is "disk = [", the second contains the existing disk strings and the third "]" +### The new string is then inserted between the second and third back reference +sed -i.$(date '+%Y%m%d%H%M%S') "s/\(^disk = \[\)\(.*\)\(\]\)/\1\2,\'file:\/OVS\/Repositories\/${guest_uuid}\/VirtualDisks\/${disk_uuid}.img,${next_drive},w\'\3/" /EXAVMIMAGES/GuestImages/${guest_name}/vm.cfg +result_code=$? +if [ ${result_code} -ne 0 ] +then + echo "FAIL - An error occured during the modification of the vm config file, check console output" + exit -1 +else + echo "Disk added to config file /EXAVMIMAGES/GuestImages/${guest_name}/vm.cfg" +fi + +exit 0 diff --git a/vdh/add_job_statistics.sql b/vdh/add_job_statistics.sql new file mode 100644 index 0000000..558167b --- /dev/null +++ b/vdh/add_job_statistics.sql @@ -0,0 +1,12 @@ +DECLARE + l_job number; + +BEGIN + + dbms_job.submit( job => l_job, + what => 'BEGIN dbms_stats.gather_schema_stats(ownname => ''ADM'', method_opt => ''FOR ALL INDEXED COLUMNS SIZE 1'', cascade => true); END;', + next_date => trunc(sysdate) + 6/24, + interval => 'trunc(sysdate) + 30/24' + ); +END; + diff --git a/vdh/add_lun_online.sh b/vdh/add_lun_online.sh new file mode 100644 index 0000000..166ff0c --- /dev/null +++ b/vdh/add_lun_online.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +### still have to add the code to check the script is executed as root +ls -1 /sys/class/fc_transport/ | tr -d [[:alpha:]] | awk -v lun_id=$1 'BEGIN {FS=":"} {system("echo \""$2 " " $3 " " lun_id "\" > /sys/class/scsi_host/host"$1"/scan")}' diff --git a/vdh/adrci_cleanup.sh b/vdh/adrci_cleanup.sh new file mode 100644 index 0000000..204f08d --- /dev/null +++ b/vdh/adrci_cleanup.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +### sets the short and long retention policy for all oracle homes +### and issues a purge for all non rdbms homes (smon automatically runs a purge once every 7 days) +### +### run as Oracle owner, expects no role separation between Oracle and GI +### advice to schedule this once a week +### +### adrci_cleanup.sh [ORACLE_HOME] [adrci base] [short policy duration] [long policy duration] + + +export ORACLE_HOME=${1:-/u01/app/oracle/product/18.0.0.0/dbhome_1} +ADRCI=${ORACLE_HOME}/bin/adrci +adrci_base=${2:-/u01/app/oracle} +#short: script default 7 days, used for TRACE, CDUMP, UTSCDMP, IPS +shortp_policy=${3:-168} +#long: script default 31 days, used for ALERT, INCIDENT, SWEEP, STAGE, HM +longp_policy=${4:-744} + +### loops through the adrci homes and sets the short and long policy +echo +echo set policies +echo using ${adrci_base} as adrci_bash +echo +for home in $(${ADRCI} exec="set base ${adrci_base}; show homes" | egrep -e "/rdbms/|/tnslsnr/|/asm/") +do + echo set policy for ${home} + ${ADRCI} exec="set homepath ${home}; set control \(SHORTP_POLICY = ${shortp_policy}, LONGP_POLICY = ${longp_policy}\)" +done + + +### loop through the non database homes and issue the purge (db homes are done by smon automatically every 7 days) +### ---> changed to do rdbms homes as wel due to bug 29021413 (see MOS Note Doc ID 2572977.1 - ADR Files are not purged automatically) +echo +echo purging non rdbms homes +echo using ${adrci_base} as adrci_bash +echo +start=$SECONDS +for home in $(${ADRCI} exec="set base ${adrci_base}; show homes" | egrep -e "/rdbms/|/tnslsnr/|/asm/") +do + echo Purging home ${home} + homestart=$SECONDS + ${ADRCI} exec="set homepath ${home}; purge" + echo Duration: $(date -u -d "0 $SECONDS sec - ${homestart} sec" +"%H:%M:%S") + echo +done +echo Total duration: $(date -u -d "0 $SECONDS sec - ${start} sec" +"%H:%M:%S") + diff --git a/vdh/after_servererror_trigger.sql b/vdh/after_servererror_trigger.sql new file mode 100644 index 0000000..2e1c6a1 --- /dev/null +++ b/vdh/after_servererror_trigger.sql @@ -0,0 +1,64 @@ +drop sequence log_errors_seq; + +create sequence log_errors_seq + start with 1 + increment by 1 + minvalue 1 + nomaxvalue + nocache + nocycle; + +drop table log_errors_tab; + +create table log_errors_tab +( id number, + log_date date, + err_msg clob, + stm clob, + username varchar2(30), + err_depth number +) +tablespace sysaux; + + +create or replace trigger log_errors_trig after servererror on database + +DECLARE + + id number; +-- v_user varchar2(30); +-- v_os varchar2(30); +-- v_prog varchar2(30); +-- v_cur varchar2(100); +-- v_sql varchar2(2000); + stmt varchar2 (2000); + sql_text ora_name_list_t; + l binary_integer ; + +BEGIN + + select log_errors_seq.nextval + into id + from dual; + + l := ora_sql_txt(sql_text); + + for i in 1..l loop + stmt :=stmt||sql_text(i); + end loop; + + for n in 1..ora_server_error_depth loop + insert into log_errors_tab (id, log_date, err_msg, stm, username, err_depth) + values (id, sysdate, ora_server_error_msg(n),stmt, ora_login_user, n); + end loop; + +EXCEPTION + + -- not pretty, but.... + -- avoid blocking programs because of malfunctioning error logging + when others then + null; + + +END LOG_ERRORS_TRIG; +/ diff --git a/vdh/all_db_links.sql b/vdh/all_db_links.sql new file mode 100644 index 0000000..6660cc0 --- /dev/null +++ b/vdh/all_db_links.sql @@ -0,0 +1,10 @@ +column owner format a15 +column username format a15 +column password format a15 +column host format a20 +column db_link format a30 + +select u.name owner, l.name db_link, l.userid username, l.password password, l.host host +from sys.link$ l, sys.user$ u +where l.owner# = u.user# +order by l.name; diff --git a/vdh/all_granted_roles.sql b/vdh/all_granted_roles.sql new file mode 100644 index 0000000..4ebf597 --- /dev/null +++ b/vdh/all_granted_roles.sql @@ -0,0 +1,42 @@ +-- show all roles for a user, either directly assigned or nested via other roles + +with user_role_hierarchy +as ( select + t2.name username, t1.granted_role + from + ( select + distinct sa.userid, u.name granted_role + from + ( select + t.*, connect_by_root grantee# userid + from + sys.sysauth$ t + connect by + prior privilege# = grantee# + ) sa, + sys.user$ u + where + u.user# = sa.privilege# + and sa.userid in + ( select + user# + from + sys.user$ + where + type# = 1 -- normal users + or user# = 1 -- PUBLIC + ) + ) t1, + sys.user$ t2 + where + t1.userid = t2.user# + ) +select + * +from + user_role_hierarchy +where + username = '&user' +order by + granted_role +; diff --git a/vdh/arch_redo_size_on_disk.sql b/vdh/arch_redo_size_on_disk.sql new file mode 100644 index 0000000..4d920e9 --- /dev/null +++ b/vdh/arch_redo_size_on_disk.sql @@ -0,0 +1,40 @@ +set pagesize 9999 +set linesize 120 +set verify off + +column mb_arch format 9G999G999D99 +column real_mb_in_period format 9G999G999D99 +column max_mb_in_period format 9G999G999D99 +column min_mb_in_period format 9G999G999D99 +column counted format 99G999D99 +column counted_in_period format 99G999D99 + +prompt Enter the nbr of days the archived redo logs should be kept on disk +accept days_on_disk prompt '# Days: ' + +select dag, mb_arch, + sum(mb_arch) over + ( order by dag + range &days_on_disk preceding + ) as real_mb_in_period, + counted, + sum(counted) over + ( order by dag + range &days_on_disk preceding + ) counted_in_period, + max(mb_arch) over + ( order by dag + range &days_on_disk preceding + ) * &days_on_disk as max_mb_in_period, + min(mb_arch) over + ( order by dag + range &days_on_disk preceding + ) * &days_on_disk as min_mb_in_period +from ( select trunc(completion_time) dag, sum(blocks * block_size)/1024/1024 mb_arch, + count(*) counted + from v$archived_log + where months_between(trunc(sysdate), trunc(completion_time)) <= 1 + and completion_time < trunc(sysdate) + group by trunc(completion_time) + ); + \ No newline at end of file diff --git a/vdh/archived_redo_stats.sql b/vdh/archived_redo_stats.sql new file mode 100644 index 0000000..4aa7929 --- /dev/null +++ b/vdh/archived_redo_stats.sql @@ -0,0 +1,64 @@ +set echo off +set pagesize 999 +set linesize 150 + +/* +Average redo generation +*/ + +column start_day format a22 +column end_day format a22 +column days_between format 99 +column avg_archived_per_day format a13 heading avg_gen + +select to_char(min(dag), 'DD/MM/YYYY HH24:MI:SS') start_day, to_char(max(dag) + 1 - 1/(24*60*60), 'DD/MM/YYYY HH24:MI:SS') end_day, + (max(dag) - min(dag) + 1) days_between, + to_char(avg(gen_archived_size),'9G999G999D99') avg_archived_per_day +from ( select trunc(completion_time) dag, sum(blocks * block_size)/1024/1024 gen_archived_size + from v$archived_log + where standby_dest = 'NO' + and months_between(trunc(sysdate), trunc(completion_time)) <= 1 + and completion_time < trunc(sysdate) + group by trunc(completion_time) + ); + +/* +archived redo over the (max) last 10 days +*/ +column day_arch_size format 9G999G999D99 +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +select to_char(day, 'DD/MM/YYYY') day, to_char(day,'DAY') dayname, day_arch_size, day_arch#, graph +from ( select trunc(completion_time) day, sum(blocks * block_size)/1024/1024 day_arch_size, count(*) day_arch#, + rpad('*',floor(count(*)/10),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 10 + group by trunc(completion_time) + order by day + ); + +/* +archived redo per hour over the (max) last 2 days +*/ +column hour_arch_size format 99G999D99 +column hour_arch# format 9G999 +column graph format a15 +column dayname format a12 +column dayhour format a18 +break on dayname skip 1 + +select to_char(dayhour,'DAY') dayname, to_char(dayhour, 'DD/MM/YYYY HH24:MI') dayhour, hour_arch_size, hour_arch#, graph +from ( select trunc(completion_time, 'HH') dayhour, sum(blocks * block_size)/1024/1024 hour_arch_size, count(*) hour_arch#, + rpad('*',floor(count(*)/4),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 2 + group by trunc(completion_time, 'HH') + order by dayhour + ); + +clear breaks; diff --git a/vdh/as.sql b/vdh/as.sql new file mode 100644 index 0000000..d7cbbf2 --- /dev/null +++ b/vdh/as.sql @@ -0,0 +1,19 @@ +set pagesize 999 +set lines 150 +col username format a13 +col prog format a10 trunc +col sql_text format a41 trunc +col sid format 9999 +col child for 99999 +col avg_etime for 999,999.99 +select sid, substr(program,1,19) prog, address, hash_value, b.sql_id, child_number child, plan_hash_value, executions execs, +(elapsed_time/decode(nvl(executions,0),0,1,executions))/1000000 avg_etime, +sql_text +from v$session a, v$sql b +where status = 'ACTIVE' +and username is not null +and a.sql_id = b.sql_id +and a.sql_child_number = b.child_number +and sql_text not like 'select sid, substr(program,1,19) prog, address, hash_value, b.sql_id, child_number child,%' -- don't show this query +order by sql_id, sql_child_number +/ diff --git a/vdh/ash_queries_wip.sql b/vdh/ash_queries_wip.sql new file mode 100644 index 0000000..1fa3764 --- /dev/null +++ b/vdh/ash_queries_wip.sql @@ -0,0 +1,101 @@ +set linesize 200 +set pages 50000 + +column tm_delta_time format 99G999G999G999 heading "tm time|delta (µs)" +column tm_delta_db_time format 99G999G999G999 heading "tm db|delta (µs)" +column tm_delta_cpu_time format 99G999G999G999 heading "tm cpu|delta (µs)" +column time_waited format 99G999G999G999 heading "waited|(µs)" +column delta_time format 99G999G999G999 heading "delta time|(µs)" +column first_time format a15 heading "first sample" +column last_time format a15 heading "last sample" + +select + sum(ash.tm_delta_time) tm_delta_time, + sum(ash.tm_delta_db_time) tm_delta_db_time, + sum(ash.tm_delta_cpu_time) tm_delta_cpu_time, + sum(ash.time_waited) time_waited, + sum(ash.delta_time) delta_time, + to_char(min(ash.sample_time), 'DD/MM HH24:MI:SS') first_time, + to_char(max(ash.sample_time), 'DD/MM HH24:MI:SS') last_time +from + gv$active_session_history ash +where + ash.program = 'batch.exe' + and ash.sample_time between + to_date('22/11/2012 10:38', 'DD/MM/YYYY HH24:MI') + and to_date('22/11/2012 18:20', 'DD/MM/YYYY HH24:MI') +; + + + +set linesize 200 +set pages 50000 + +column sql_id format a15 heading "sql id" +column tm_delta_time format 99G999G999G999 heading "tm time|delta (µs)" +column tm_delta_db_time format 99G999G999G999 heading "tm db|delta (µs)" +column tm_delta_cpu_time format 99G999G999G999 heading "tm cpu|delta (µs)" +column time_waited format 99G999G999G999 heading "waited|(µs)" +column delta_time format 99G999G999G999 heading "delta time|(µs)" + +select + sql_id, + sum(ash.tm_delta_time) tm_delta_time, + sum(ash.tm_delta_db_time) tm_delta_db_time, + sum(ash.tm_delta_cpu_time) tm_delta_cpu_time, + sum(ash.time_waited) time_waited, + sum(ash.delta_time) delta_time +from + gv$active_session_history ash +where + ash.program = 'batch.exe' + and ash.sample_time between + to_date('22/11/2012 18:20', 'DD/MM/YYYY HH24:MI') + and to_date('23/11/2012 02:16', 'DD/MM/YYYY HH24:MI') +group by + sql_id +order by + tm_delta_db_time desc +; + + + +set linesize 200 +set pages 50000 + +column sample_id format 99999999 heading "sample" +column sample_time format a30 heading "sample time" +column session_id format 9999999 heading "session" +column session_serial# format 9999999 heading "serial#" +column sql_id format a15 heading "sql id" +column tm_delta_time format 99G999G999G999 heading "tm time|delta (µs)" +column tm_delta_db_time format 99G999G999G999 heading "tm db|delta (µs)" +column tm_delta_cpu_time format 99G999G999G999 heading "tm cpu|delta (µs)" +column time_waited format 99G999G999G999 heading "waited|(µs)" +column delta_time format 99G999G999G999 heading "delta time|(µs)" + +select + ash.sample_id, + ash.sample_time, + ash.session_id, + ash.session_serial#, + ash.sql_id, + ash.tm_delta_time, + ash.tm_delta_db_time, + ash.tm_delta_cpu_time, + ash.time_waited, + ash.delta_time +from + gv$active_session_history ash +where + ash.program = 'batch.exe' + and ash.sample_time > to_date('21/11/2012 22:00', 'DD/MM/YYYY HH24:MI') + and ash.sql_id = 'c6v8hz7wg8mym' +order by + ash.sample_id, + ash.session_id, + ash.session_serial# +; + + + diff --git a/vdh/ash_query_freq.sql b/vdh/ash_query_freq.sql new file mode 100644 index 0000000..4f3a496 --- /dev/null +++ b/vdh/ash_query_freq.sql @@ -0,0 +1,26 @@ +set linesize 120 +set pages 50000 + +column sql_id format a15 heading "sql id" +column plan_hash_value format 99999999999 heading "plan hash" +column total_exec format 999G999G999G999 heading "total exec|(µs)" +column total_elap format 999G999G999G999 heading "total elap|(µs)" +column avg_elap format 999G999G999D99 heading "avg elap|(µs)" + +select + sql_id, + plan_hash_value, + sum(executions_delta) total_exec, + sum(elapsed_time_delta) total_elap, + (sum(elapsed_time_delta) / sum(executions_delta)) avg_elap +from + dba_hist_sqlstat +where + sql_id = '&sql_id' +group by + sql_id, + plan_hash_value +order by + avg_elap desc +; + diff --git a/vdh/asm_diskgroup_info.sql b/vdh/asm_diskgroup_info.sql new file mode 100644 index 0000000..eff25d2 --- /dev/null +++ b/vdh/asm_diskgroup_info.sql @@ -0,0 +1,22 @@ +set linesize 150 + +column compatibility format a15 +column db_compatibility format a15 +column au_size_mb format 99D99 +column total_mb format 999G999G999D99 +column free_mb format 999G999G999D99 +column usable_file_mb format 9G999G999D99 +column req_m_free_mb format 9G999G999D99 +column name format a15 + +select + name, type, sector_size, block_size, total_mb, free_mb, + required_mirror_free_mb req_m_free_mb, usable_file_mb, + (allocation_unit_size/1024/1024) au_size_mb, + compatibility, + database_compatibility db_compatibility +from + v$asm_diskgroup +order by + name +; diff --git a/vdh/asm_operations.sql b/vdh/asm_operations.sql new file mode 100644 index 0000000..e2d57fb --- /dev/null +++ b/vdh/asm_operations.sql @@ -0,0 +1,14 @@ +select + g.name, + o.operation, + o.state, + o.sofar, + o.est_work, + o.est_minutes, + power +from + v$asm_diskgroup g, + v$asm_operation o + where + o.group_number = g.group_number +; diff --git a/vdh/asm_queries.sql b/vdh/asm_queries.sql new file mode 100644 index 0000000..a2d2ffd --- /dev/null +++ b/vdh/asm_queries.sql @@ -0,0 +1,123 @@ +-- generate sql to delete all asm files for a given database +column a format a120 +set linesize 120 +select 'alter diskgroup ' || gname || ' drop file ''+' || gname || sys_connect_by_path(aname, '/') || ''';' a +from ( select b.name gname, a.parent_index pindex, a.name aname, + a.reference_index rindex , a.system_created, a.alias_directory + from v$asm_alias a, v$asm_diskgroup b + where a.group_number = b.group_number + ) +where alias_directory = 'N' + and system_created = 'Y' +start with (mod(pindex, power(2, 24))) = 0 + and rindex in + ( select a.reference_index + from v$asm_alias a, v$asm_diskgroup b + where a.group_number = b.group_number + and (mod(a.parent_index, power(2, 24))) = 0 + and a.name = '&DATABASENAME' + ) +connect by prior rindex = pindex; + +-- generate sql to delete all the asm files of a given type for a given database +column a format a120 +set linesize 120 +select 'alter diskgroup ' || gname || ' drop file ''+' || gname || sys_connect_by_path(aname, '/') || ''';' a +from ( select b.name gname, a.parent_index pindex, a.name aname, + a.reference_index rindex , a.system_created, a.alias_directory, + c.type file_type + from v$asm_alias a, v$asm_diskgroup b, v$asm_file c + where a.group_number = b.group_number + and a.group_number = c.group_number(+) + and a.file_number = c.file_number(+) + and a.file_incarnation = c.incarnation(+) + ) +where alias_directory = 'N' + and system_created = 'Y' + and file_type = '&FILETYPE' +start with (mod(pindex, power(2, 24))) = 0 + and rindex in + ( select a.reference_index + from v$asm_alias a, v$asm_diskgroup b + where a.group_number = b.group_number + and (mod(a.parent_index, power(2, 24))) = 0 + and a.name = '&DATABASENAME' + ) +connect by prior rindex = pindex; + +-- generate sql to delete all the asm files except of a given type for a given database +column a format a120 +set linesize 120 +select 'alter diskgroup ' || gname || ' drop file ''+' || gname || sys_connect_by_path(aname, '/') || ''';' a +from ( select b.name gname, a.parent_index pindex, a.name aname, + a.reference_index rindex , a.system_created, a.alias_directory, + c.type file_type + from v$asm_alias a, v$asm_diskgroup b, v$asm_file c + where a.group_number = b.group_number + and a.group_number = c.group_number(+) + and a.file_number = c.file_number(+) + and a.file_incarnation = c.incarnation(+) + ) +where alias_directory = 'N' + and system_created = 'Y' + and file_type != '&FILETYPE' +start with (mod(pindex, power(2, 24))) = 0 + and rindex in + ( select a.reference_index + from v$asm_alias a, v$asm_diskgroup b + where a.group_number = b.group_number + and (mod(a.parent_index, power(2, 24))) = 0 + and a.name = '&DATABASENAME' + ) +connect by prior rindex = pindex; + +-- generate a list of all the asm files / directories / aliasses for a given database +column full_alias_path format a75 +column file_type format a15 +select concat('+'||gname, sys_connect_by_path(aname, '/')) full_alias_path, + system_created, alias_directory, file_type +from ( select b.name gname, a.parent_index pindex, a.name aname, + a.reference_index rindex , a.system_created, a.alias_directory, + c.type file_type + from v$asm_alias a, v$asm_diskgroup b, v$asm_file c + where a.group_number = b.group_number + and a.group_number = c.group_number(+) + and a.file_number = c.file_number(+) + and a.file_incarnation = c.incarnation(+) + ) +start with (mod(pindex, power(2, 24))) = 0 + and rindex in + ( select a.reference_index + from v$asm_alias a, v$asm_diskgroup b + where a.group_number = b.group_number + and (mod(a.parent_index, power(2, 24))) = 0 + and a.name = '&DATABASENAME' + ) +connect by prior rindex = pindex; + +-- generate a list of all the asm files of a given type for a given database +column full_alias_path format a70 +column file_type format a15 +select concat('+'||gname, sys_connect_by_path(aname, '/')) full_alias_path, + system_created, alias_directory, file_type +from ( select b.name gname, a.parent_index pindex, a.name aname, + a.reference_index rindex , a.system_created, a.alias_directory, + c.type file_type + from v$asm_alias a, v$asm_diskgroup b, v$asm_file c + where a.group_number = b.group_number + and a.group_number = c.group_number(+) + and a.file_number = c.file_number(+) + and a.file_incarnation = c.incarnation(+) + ) +where alias_directory = 'N' + and system_created = 'Y' + and file_type = '&FILETYPE' +start with (mod(pindex, power(2, 24))) = 0 + and rindex in + ( select a.reference_index + from v$asm_alias a, v$asm_diskgroup b + where a.group_number = b.group_number + and (mod(a.parent_index, power(2, 24))) = 0 + and a.name = '&DATABASENAME' + ) +connect by prior rindex = pindex; \ No newline at end of file diff --git a/vdh/asmiostat.scriptje b/vdh/asmiostat.scriptje new file mode 100644 index 0000000..233466c --- /dev/null +++ b/vdh/asmiostat.scriptje @@ -0,0 +1,245 @@ +#!/bin/ksh +# +# NAME +# asmiostat.sh +# +# DESCRIPTION +# iostat-like output for ASM +# $ asmiostat.sh [-s ASM ORACLE_SID] [-h ASM ORACLE_HOME] [-g Diskgroup] +# [-f disk path filter] [] [] +# +# NOTES +# Creates persistent SQL*Plus connection to the +ASM instance implemented +# as a ksh co-process +# +# AUTHOR +# Doug Utzig +# +# MODIFIED +# dutzig 08/18/05 - original version +# + +ORACLE_SID=+ASM + +NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 +NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS' + +endOfOutput="_EOP$$" + +typeset -u diskgroup +typeset diskgroup_string="Disk Group: All diskgroups" +typeset usage=" +$0 [-s ASM ORACLE_SID] [-h ASM ORACLE_HOME] [-g diskgroup] [] [] + +Output: + DiskPath - Path to ASM disk + DiskName - ASM disk name + Gr - ASM disk group number + Dsk - ASM disk number + Reads - Reads + Writes - Writes + AvRdTm - Average read time (in msec) + AvWrTm - Average write time (in msec) + KBRd - Kilobytes read + KBWr - Kilobytes written + AvRdSz - Average read size (in bytes) + AvWrSz - Average write size (in bytes) + RdEr - Read errors + WrEr - Write errors +" + +while getopts ":s:h:g:f" option; do + case $option in + s) ORACLE_SID="$OPTARG" ;; + h) ORACLE_HOME="$OPTARG" + LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH ;; + g) diskgroup="$OPTARG" + diskgroup_string="Disk Group: $diskgroup" ;; + f) print '-f option not implemented' ;; + :) print "Option $OPTARG needs a value" + print "$usage" + exit 1 ;; + \?) print "Invalid option $OPTARG" + print "$usage" + exit 1 ;; + esac +done +shift OPTIND-1 + +typeset -i interval=${1:-10} count=${2:-0} index=0 + +# +# Verify interval and count arguments are valid +# +(( interval <=0 || count<0 )) && { + print 'Invalid parameter: must be > 0; must be >= 0' + print "$usage" + exit 1 +} + +# +# Query to run against v$asm_disk_stat +# +if [[ -z $diskgroup ]]; then + query="select group_number, disk_number, name, path, reads, writes, read_errs, write_errs, read_time, write_time, bytes_read, bytes_written from v\$asm_disk_stat where group_number>0 order by group_number, disk_number;" +else + query="select group_number, disk_number, name, path, reads, writes, read_errs, write_errs, read_time, write_time, bytes_read, bytes_written from v\$asm_disk_stat where group_number=(select group_number from v\$asm_diskgroup_stat where name=regexp_replace('$diskgroup','^\+','')) order by group_number, disk_number;" +fi + +# +# Check for version 10.2 or later +# +typeset version minversion=10.2 +version=$($ORACLE_HOME/bin/exp &1 | grep "Export: " | sed -e 's/^Export: Release \([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') +if ! (print "$version<$minversion" | bc >/dev/null 2>&1); then + print "$0 requires Oracle Database Release $minversion or later" + exit 1 +fi + +############################################################################# +# +# Fatal error +#---------------------------------------------------------------------------- +function fatalError { + print -u2 -- "Error: $1" + exit 1 +} + +############################################################################# +# +# Drain all of the sqlplus output - stop when we see our well known string +#---------------------------------------------------------------------------- +function drainOutput { + typeset dispose=${1:-'dispose'} output + while :; do + read -p output || fatalError 'Read from co-process failed [$0]' + if [[ $QUERYDEBUG == ON ]]; then print $output; fi + if [[ $output == $endOfOutput* ]]; then break; fi + [[ $dispose != 'dispose' ]] && print -- $output + done +} + +############################################################################# +# +# Ensure the instance is running and it is of type ASM +#---------------------------------------------------------------------------- +function verifyASMinstance { + typeset asmcmdPath=$ORACLE_HOME/bin/asmcmd + [[ ! -x $asmcmdPath ]] && fatalError "Invalid ORACLE_HOME $ORACLE_HOME: $asmcmdPath does not exist" + $asmcmdPath pwd 2>/dev/null | grep -q '^\+$' || fatalError "$ORACLE_SID is not an ASM instance" +} + +############################################################################# +# +# Start the sqlplus coprocess +#---------------------------------------------------------------------------- +function startSqlplus { + # start sqlplus, setup the env + $ORACLE_HOME/bin/sqlplus -s '/ as sysdba' |& + + print -p 'whenever sqlerror exit failure' \ + && print -p "set pagesize 9999 linesize 9999 feedback off heading off" \ + && print -p "prompt $endOfOutput" \ + || fatalError 'Write to co-process failed (startSqlplus)' + drainOutput dispose +} + + +############################################################################# +############################################################################# +# MAIN +#---------------------------------------------------------------------------- +verifyASMinstance +startSqlplus + +# +# Loop as many times as requested or forever +# +while :; do + print -p "$query" \ + && print -p "prompt $endOfOutput" \ + || fatalError 'Write to co-process failed (collectData)' + stats=$(drainOutput keep) + + print -- "$stats\nEOL" + + index=index+1 + (( count0 )) && break + + sleep $interval +done | \ +awk ' +BEGIN { firstSample=1 +} +/^EOL$/ { + firstSample=0; firstLine=1 + next +} +{ + path=$4 + if (path ~ /^ *$/) next + group[path]=$1; disk[path]=$2; name[path]=$3 + + reads[path]=$5; writes[path]=$6 + readErrors[path]=$7; writeErrors[path]=$8 + readTime[path]=$9; writeTime[path]=$10 + readBytes[path]=$11; writeBytes[path]=$12 + + # reads and writes + readsDiff[path]=reads[path]-readsPrev[path] + writesDiff[path]=writes[path]-writesPrev[path] + + # read errors and write errors + readErrorsDiff[path]=readErrors[path]-readErrorsPrev[path] + writeErrorsDiff[path]=writeErrors[path]-writeErrorsPrev[path] + + # read time and write time + readTimeDiff[path]=readTime[path]-readTimePrev[path] + writeTimeDiff[path]=writeTime[path]-writeTimePrev[path] + + # average read time and average write time in msec (data provided in csec) + avgReadTime[path]=0; avgWriteTime[path]=0 + if ( readsDiff[path] ) avgReadTime[path]=(readTimeDiff[path]/readsDiff[path])*1000 + if ( writesDiff[path]) avgWriteTime[path]=(writeTimeDiff[path]/writesDiff[path])*1000 + + # bytes and KB read and bytes and KB written + readBytesDiff[path]=readBytes[path]-readBytesPrev[path] + writeBytesDiff[path]=writeBytes[path]-writeBytesPrev[path] + readKb[path]=readBytesDiff[path]/1024 + writeKb[path]=writeBytesDiff[path]/1024 + + # average read size and average write size + avgReadSize[path]=0; avgWriteSize[path]=0 + if ( readsDiff[path] ) avgReadSize[path]=readBytesDiff[path]/readsDiff[path] + if ( writesDiff[path] ) avgWriteSize[path]=writeBytesDiff[path]/writesDiff[path] + + if (!firstSample) { + if (firstLine) { + "date" | getline now; close("date") + printf "\n" + printf "Date: %s Interval: %d secs %s\n\n", now, '"$interval"', "'"$diskgroup_string"'" + printf "%-40s %2s %3s %8s %8s %6s %6s %8s %8s %7s %7s %4s %4s\n", \ + "DiskPath - DiskName","Gr","Dsk","Reads","Writes","AvRdTm",\ + "AvWrTm","KBRd","KBWr","AvRdSz","AvWrSz", "RdEr", "WrEr" + firstLine=0 + } + printf "%-40s %2s %3s %8d %8d %6.1f %6.1f %8d %8d %7d %7d %4d %4d\n", \ + path " - " name[path], group[path], disk[path], \ + readsDiff[path], writesDiff[path], \ + avgReadTime[path], avgWriteTime[path], \ + readKb[path], writeKb[path], \ + avgReadSize[path], avgWriteSize[path], \ + readErrorsDiff[path], writeErrorsDiff[path] + } + + readsPrev[path]=reads[path]; writesPrev[path]=writes[path] + readErrorsPrev[path]=readErrors[path]; writeErrorsPrev[path]=writeErrors[path] + readTimePrev[path]=readTime[path]; writeTimePrev[path]=writeTime[path] + readBytesPrev[path]=readBytes[path]; writeBytesPrev[path]=writeBytes[path] +} +END { +} +' + +exit 0 + diff --git a/vdh/asmiostat.zip b/vdh/asmiostat.zip new file mode 100644 index 0000000..872c794 Binary files /dev/null and b/vdh/asmiostat.zip differ diff --git a/vdh/avg_archived_size.sql b/vdh/avg_archived_size.sql new file mode 100644 index 0000000..33f6bc6 --- /dev/null +++ b/vdh/avg_archived_size.sql @@ -0,0 +1,13 @@ +select instance_name from v$instance; + +select to_char(min(dag), 'DD/MM/YYYY HH24:MI:SS') start_day, to_char(max(dag) + 1 - 1/(24*60*60), 'DD/MM/YYYY HH24:MI:SS') end_day, + (max(dag) - min(dag) + 1) days_between, + to_char(avg(gen_archived_size),'9G999G999D99') avg_archived_per_day +from ( select trunc(completion_time) dag, sum(blocks * block_size)/1024/1024 gen_archived_size + from v$archived_log + where months_between(trunc(sysdate), trunc(completion_time)) <= 1 + and completion_time < trunc(sysdate) + group by trunc(completion_time) + ); + +exit \ No newline at end of file diff --git a/vdh/avgskew.sql b/vdh/avgskew.sql new file mode 100644 index 0000000..49c1a22 --- /dev/null +++ b/vdh/avgskew.sql @@ -0,0 +1,3 @@ +select avg(pk_col) from kso.skew +where col1 > 0 +/ diff --git a/vdh/awr_io_load_history.sql b/vdh/awr_io_load_history.sql new file mode 100644 index 0000000..3eedcc9 --- /dev/null +++ b/vdh/awr_io_load_history.sql @@ -0,0 +1,85 @@ +set linesize 500 +set pagesize 9999 +alter session set nls_numeric_characters=',.'; +set trimspool on +set tab off +set verify off +set feedback off + +column instance_number format 99 +column bsnap_id format 9999999 +column bsnap_time format a16 +column esnap_id format 9999999 +column esnap_time format a16 + +column phy_read_total_bytes format 9G999G999G999 +column phy_read_bytes format 9G999G999G999 +column phy_write_total_bytes format 9G999G999G999 +column phy_write_bytes format 9G999G999G999 + +column phy_read_total_mb format 999G999D99 +column phy_read_mb format 999G999D99 +column phy_write_total_mb format 999G999D99 +column phy_write_mb format 999G999D99 +column phy_io_total_mb format 999G999D99 +column phy_io_mb format 999G999D99 + +WITH p as + ( select dbid, instance_number, snap_id, + lag(snap_id, 1, snap_id) over + ( partition by dbid, instance_number + order by snap_id + ) prev_snap_id, + begin_interval_time, end_interval_time + from dba_hist_snapshot + where begin_interval_time between + to_timestamp ('01/10/2019 00:00', 'DD/MM/YYYY HH24:MI') + and to_timestamp ('15/10/2019 00:00', 'DD/MM/YYYY HH24:MI') + ), + s as + ( select d.name database, p.dbid, p.instance_number, p.prev_snap_id bsnap_id, p.snap_id esnap_id, + p.begin_interval_time bsnap_time, p.end_interval_time esnap_time, bs.stat_name, + round((es.value-bs.value)/( extract(second from (p.end_interval_time - p.begin_interval_time)) + + extract(minute from (p.end_interval_time - p.begin_interval_time)) * 60 + + extract(hour from (p.end_interval_time - p.begin_interval_time)) * 60 * 60 + + extract(day from (p.end_interval_time - p.begin_interval_time)) * 24 * 60 * 60 + ) + ,6 + ) valuepersecond + from v$database d, p, + dba_hist_sysstat bs, dba_hist_sysstat es + where d.dbid = p.dbid + and ( p.dbid = bs.dbid + and p.instance_number = bs.instance_number + and p.prev_snap_id = bs.snap_id + ) + and ( p.dbid = es.dbid + and p.instance_number = es.instance_number + and p.snap_id = es.snap_id + ) + and ( bs.stat_id = es.stat_id + and bs.instance_number = es.instance_number + and bs.stat_name=es.stat_name + ) + and bs.stat_name in + ( 'physical read total bytes','physical read bytes','physical write total bytes','physical write bytes') + ), +g as + ( select /*+ FIRST_ROWS */ + database, instance_number, bsnap_id, esnap_id, bsnap_time, esnap_time, + sum(decode( stat_name, 'physical read total bytes' , valuepersecond, 0 )) phy_read_total_bytes, + sum(decode( stat_name, 'physical read bytes' , valuepersecond, 0 )) phy_read_bytes, + sum(decode( stat_name, 'physical write total bytes' , valuepersecond, 0 )) phy_write_total_bytes, + sum(decode( stat_name, 'physical write bytes' , valuepersecond, 0 )) phy_write_bytes + from s + group by database,instance_number, bsnap_id, esnap_id, bsnap_time, esnap_time + ) +select instance_number, bsnap_id, to_char(bsnap_time,'DD-MON-YY HH24:MI') bsnap_time_str, esnap_id, to_char(esnap_time,'DD-MON-YY HH24:MI') esnap_time_str, + phy_read_total_bytes/1024/1024 phy_read_total_mb, + phy_read_bytes/1024/1024 phy_read_mb, + phy_write_total_bytes/1024/1024 phy_write_total_mb, + phy_write_bytes/1024/1024 phy_write_mb, + (phy_read_total_bytes + phy_write_total_bytes) /1024/1024 phy_io_total_mb, + (phy_read_bytes + phy_write_bytes) /1024/1024 phy_io_mb +from g +order by instance_number, bsnap_time; diff --git a/vdh/awr_load_history.sql b/vdh/awr_load_history.sql new file mode 100644 index 0000000..0e49bd6 --- /dev/null +++ b/vdh/awr_load_history.sql @@ -0,0 +1,202 @@ +/* when using statspack, this query shows the statspack summary (same values as 'Load Profile' in statspack report) + for each snapshot during the last week. + + Thus you can quickly check the database load history and then run statspack report on desired snap_id if you want further details. + + It shows following columns for each timestamp: + + Redo size (in blocks) per second + Logical reads per second + Block changes per second + Physical reads per second (disk io/secs) + Physical writes per second + User calls per second + Parses per second + Hard parses per second + Sorts per second + Logons per second + Executes per second + Transactions per second + Blocks changed per Read % + Recursive Call % + Rollback per transaction % + Rows per Sort % + cpu per elapsed % + Buffer hit ratio % + + This query shows history for the seven last days. + You can modify it on the first lines +*/ + +set linesize 500 +set pagesize 9999 +alter session set nls_numeric_characters=',.'; +set trimspool on +set tab off +set verify off +set feedback off + +column instance_number format 99 +column bsnap_id format 9999999 +column bsnap_time format a16 +column esnap_id format 9999999 +column esnap_time format a16 +column redo_blocks format 999999999990D999 +column logical_reads format 999999999990D999 +column block_changes format 999999999990D999 +column physical_reads format 999999999990D999 +column physical_writes format 999999999990D999 +column user_calls format 999999999990D999 +column parses format 999999999990D999 +column hard_parses format 999999999990D999 +column sorts format 999999999990D999 +column logons format 999999999990D999 +column executes format 999999999990D999 +column transactions format 999999999990D999 +column changes_per_read format a8 +column recursive format a8 +column rollback format a8 +column rows_per_sort format a18 +column cpusecs_pct format 99990D00 +column rec_cpusecs_pct format 99990D00 +column parse_cpusecs_pct format 99990D00 +column buffer_hit format a8 +column undo_records format 99999999999999999 +column rollbacks format 99999999999999999 + +column a format a500 + +prompt Enter the begindate in the format DD/MM/YYYY HH24:MI +accept start_time prompt 'begin date: ' + +prompt Enter the enddate in the format DD/MM/YYYY HH24:MI +accept end_time prompt 'end date: ' + +prompt Enter the spoolfile +accept spoolfile prompt 'spool file: ' + +spool &spoolfile + +WITH p as + ( select dbid, instance_number, snap_id, + lag(snap_id, 1, snap_id) over + ( partition by dbid, instance_number + order by snap_id + ) prev_snap_id, + begin_interval_time, end_interval_time + from dba_hist_snapshot + where begin_interval_time between + to_timestamp ('&start_time', 'DD/MM/YYYY HH24:MI') + and to_timestamp ('&end_time', 'DD/MM/YYYY HH24:MI') + ), + s as + ( select d.name database, p.dbid, p.instance_number, p.prev_snap_id bsnap_id, p.snap_id esnap_id, + p.begin_interval_time bsnap_time, p.end_interval_time esnap_time, bs.stat_name, + round((es.value-bs.value)/( extract(second from (p.end_interval_time - p.begin_interval_time)) + + extract(minute from (p.end_interval_time - p.begin_interval_time)) * 60 + + extract(hour from (p.end_interval_time - p.begin_interval_time)) * 60 * 60 + + extract(day from (p.end_interval_time - p.begin_interval_time)) * 24 * 60 * 60 + ) + ,6 + ) valuepersecond + from v$database d, p, + dba_hist_sysstat bs, dba_hist_sysstat es + where d.dbid = p.dbid + and ( p.dbid = bs.dbid + and p.instance_number = bs.instance_number + and p.prev_snap_id = bs.snap_id + ) + and ( p.dbid = es.dbid + and p.instance_number = es.instance_number + and p.snap_id = es.snap_id + ) + and ( bs.stat_id = es.stat_id + and bs.instance_number = es.instance_number + and bs.stat_name=es.stat_name + ) + and bs.stat_name in + ( 'redo size','redo blocks written','session logical reads','db block changes','physical reads','physical writes','user calls', + 'parse count (total)','parse count (hard)','sorts (memory)','sorts (disk)','logons cumulative','execute count','user rollbacks', + 'user commits', 'recursive calls','sorts (rows)','CPU used by this session','recursive cpu usage','parse time cpu', + 'rollback changes - undo records applied', 'DB time', 'Read IO (MB)', 'Write IO (MB)' + ) + ), +g as + ( select /*+ FIRST_ROWS */ + database, instance_number, bsnap_id, esnap_id, bsnap_time, esnap_time, + sum(decode( stat_name, 'redo size' , valuepersecond, 0 )) redo_size, + sum(decode( stat_name, 'redo blocks written' , valuepersecond, 0 )) redo_blocks, + sum(decode( stat_name, 'session logical reads' , valuepersecond, 0 )) logical_reads, + sum(decode( stat_name, 'db block changes' , valuepersecond, 0 )) block_changes, + sum(decode( stat_name, 'physical reads' , valuepersecond, 0 )) physical_reads , + sum(decode( stat_name, 'physical writes' , valuepersecond, 0 )) physical_writes, + sum(decode( stat_name, 'user calls' , valuepersecond, 0 )) user_calls, + sum(decode( stat_name, 'recursive calls' , valuepersecond, 0 )) recursive_calls, + sum(decode( stat_name, 'parse count (total)' , valuepersecond, 0 )) parses , + sum(decode( stat_name, 'parse count (hard)' , valuepersecond, 0 )) hard_parses , + sum(decode( stat_name, 'sorts (rows)' , valuepersecond, 0 )) sort_rows , + sum(decode( stat_name, 'sorts (memory)' , valuepersecond, + 'sorts (disk)' , valuepersecond, 0 )) sorts , + sum(decode( stat_name, 'logons cumulative' , valuepersecond, 0 )) logons , + sum(decode( stat_name, 'execute count' , valuepersecond, 0 )) executes , + sum(decode( stat_name, 'user rollbacks' , valuepersecond, + 'user commits' , valuepersecond, 0 )) transactions, + sum(decode( stat_name, 'user rollbacks' , valuepersecond, 0 )) rollbacks, + sum(decode( stat_name, 'rollback changes - undo records applied' , valuepersecond, 0 )) undo_records, + sum(decode( stat_name, 'CPU used by this session' , valuepersecond/100, 0 )) cpusecs, + sum(decode( stat_name, 'recursive cpu usage' , valuepersecond/100, 0 )) rec_cpusecs, + sum(decode( stat_name, 'parse time cpu' , valuepersecond/100, 0 )) parse_cpusecs, + sum(decode( stat_name, 'DB time' , valuepersecond, 0 )) db_time, + sum(decode( stat_name, 'Read IO (MB)' , valuepersecond, 0 )) read_io_mb, + sum(decode( stat_name, 'Write IO (MB)' , valuepersecond, 0 )) write_io_mb + from s + group by database,instance_number, bsnap_id, esnap_id, bsnap_time, esnap_time + ) +/*select instance_number, bsnap_id, to_char(bsnap_time,'DD-MON-YY HH24:MI') bsnap_time_str, esnap_id, to_char(esnap_time,'DD-MON-YY HH24:MI') esnap_time_str,read_io_mb, write_io_mb + db_time, redo_blocks, logical_reads, block_changes, physical_reads, + physical_writes, user_calls, parses, hard_parses, sorts, logons, executes, transactions, + to_char(100 * (block_changes / decode(logical_reads,0,1,logical_reads)),'990D00')||'%' changes_per_read, + to_char(100 * (recursive_calls / decode(user_calls + recursive_calls, 0, 1,user_calls + recursive_calls)),'990D00') ||'%' recursive, + to_char(100 * (rollbacks / decode(transactions,0,1,transactions)),'990D00') ||'%' rollback, + to_char(decode(sorts, 0, NULL, (sort_rows/sorts)),'99999999999999999') rows_per_sort, + 100 * cpusecs cpusecs_pct, + 100 * rec_cpusecs rec_cpusecs_pct, + 100 * parse_cpusecs parse_cpusecs_pct, + to_char(100 * (1 - physical_reads / decode(logical_reads, 0, 1,logical_reads)),'990D00') ||'%' buffer_hit, + undo_records, rollbacks +*/select + (instance_number ||';'|| + bsnap_id ||';'|| + to_char(bsnap_time,'DD-MON-YY HH24:MI') ||';'|| + esnap_id ||';'|| + to_char(esnap_time,'DD-MON-YY HH24:MI') ||';'|| + db_time ||';' || + redo_blocks ||';'|| + logical_reads ||';'|| + block_changes ||';'|| + physical_reads ||';'|| + physical_writes ||';'|| + user_calls ||';'|| + parses ||';'|| + hard_parses ||';'|| + sorts ||';'|| + logons ||';'|| + executes ||';'|| + transactions ||';'|| + to_char(100 * (block_changes / decode(logical_reads,0,1,logical_reads)),'990D00')||'%' ||';'|| + to_char(100 * (recursive_calls / decode(user_calls + recursive_calls, 0, 1,user_calls + recursive_calls)),'990D00') ||'%' ||';'|| + to_char(100 * (rollbacks / decode(transactions,0,1,transactions)),'990D00') ||'%' ||';'|| + to_char(decode(sorts, 0, NULL, (sort_rows/sorts)),'99999999999999999') ||';'|| + 100 * cpusecs ||';'|| + 100 * rec_cpusecs ||';'|| + 100 * parse_cpusecs ||';'|| +-- to_char(100 * (1 - physical_reads / decode(logical_reads, 0, 1,logical_reads)),'990D00') ||'%' ||';'|| + undo_records ||';'|| + rollbacks + ) a +from g +order by instance_number, bsnap_time; + +spool off + +set feedback on diff --git a/vdh/awr_long_queries.sql b/vdh/awr_long_queries.sql new file mode 100644 index 0000000..c4bead2 --- /dev/null +++ b/vdh/awr_long_queries.sql @@ -0,0 +1,100 @@ +set linesize 500 +set pages 50000 +set long 50000 +--set markup html on + +column total_quries format 9G999G999 +column distinct_quries format 9G999G999 + +column inst_nbr format 999 +column begin_interval_time_str format a20 +column end_interval_time_str format a20 +column module format a20 +column action format a15 +column sql_profile format a15 +column parsing_schema_name format a30 +column fetches_delta_str format a14 +column sorts_delta_str format a14 +column exec_delta_str format a14 +column px_exec_delta_str format a14 +column disk_reads_delta_str format a14 +column buffer_gets_delta_str format a14 +column cpu_sec_str format a17 +column elaps_sec_str format a17 +column sql_text format a500 word_wrapped + + +--spool awr_queries_longer_than_10_minutes.html + +select + count(*) total_queries, + count(distinct stat.sql_id) distinct_queries +from + dba_hist_snapshot snap + join dba_hist_sqlstat stat + on ( snap.dbid = stat.dbid + and snap.instance_number = stat.instance_number + and snap.snap_id = stat.snap_id + ) + join dba_hist_sqltext sqlt + on ( stat.dbid = sqlt.dbid + and stat.sql_id = sqlt.sql_id + ) +where + snap.begin_interval_time > trunc(sysdate) - 1 + 19/24 + and stat.parsing_schema_name not in + ('SYS','SYSMAN','MDSYS','WKSYS', 'NAGIORA', 'PANDORA' + ) + and sql_text not like '%/* SQL Analyze(%' + and sql_text not like 'DECLARE job BINARY_INTEGER%' + and stat.elapsed_time_delta > 10 * 60 * 1000000 +order by + stat.elapsed_time_delta +; + + +select + snap.instance_number inst_nbr, + to_char(snap.begin_interval_time, 'DD/MM/YYYY HH24:MI:SS') begin_interval_time_str, + to_char(snap.end_interval_time, 'DD/MM/YYYY HH24:MI:SS') end_interval_time_str, + stat.sql_id, + stat.plan_hash_value, + to_char(stat.elapsed_time_delta/1000000, '9G999G999G999D99') elaps_sec_str, + to_char(stat.cpu_time_delta/1000000, '9G999G999G999D99') cpu_sec_str, + stat.module, + stat.action, + stat.sql_profile, + stat.parsing_schema_name, + to_char(stat.fetches_delta, '9G999G999G999') fetches_delta_str, + to_char(stat.sorts_delta, '9G999G999G999') sorts_delta_str, + to_char(stat.executions_delta, '9G999G999G999') exec_delta_str, + to_char(stat.px_servers_execs_delta, '9G999G999G999') px_exec_delta_str, + to_char(stat.disk_reads_delta, '9G999G999G999') disk_reads_delta_str, + to_char(stat.buffer_gets_delta, '9G999G999G999') buffer_gets_delta_str, + sqlt.sql_text +from + dba_hist_snapshot snap + join dba_hist_sqlstat stat + on ( snap.dbid = stat.dbid + and snap.instance_number = stat.instance_number + and snap.snap_id = stat.snap_id + ) + join dba_hist_sqltext sqlt + on ( stat.dbid = sqlt.dbid + and stat.sql_id = sqlt.sql_id + ) +where + snap.begin_interval_time > trunc(sysdate) - 1 + 19/24 + and stat.parsing_schema_name not in + ('SYS','SYSMAN','MDSYS','WKSYS', 'NAGIORA', 'PANDORA' + ) + and sql_text not like '%/* SQL Analyze(%' + and sql_text not like 'DECLARE job BINARY_INTEGER%' + -- longer then 10 minutes + and stat.elapsed_time_delta > 10 * 60 * 1000000 +order by + stat.elapsed_time_delta desc +; + +--spool off +set markup html off diff --git a/vdh/base_backup_sizes_per_pool1.sql b/vdh/base_backup_sizes_per_pool1.sql new file mode 100644 index 0000000..334e59e --- /dev/null +++ b/vdh/base_backup_sizes_per_pool1.sql @@ -0,0 +1,58 @@ +-- Base specific query, to report on the used space by the backup pieces, split per ZFS pool +-- order by pool, db name, db unique name and dbid +-- the reported sizes are the sizes seen by rman, thus before any filesystem compression or deduplication + +-- this query must be run against the rman catalog repository + + +set linesize 150 +set pages 50000 + +column name format a10 +column db_unique_name format a30 +column pool format a5 +column GB format 9G999G999D99 + +compute sum of GB on pool +compute sum of GB on report +break on pool skip 1 on report + +with backup_files +as +( select + db_key, + site_key, + bytes, + replace(regexp_substr(regexp_substr(bpd.handle,'/[^/]+/',2),'_[^_]+',1,2),'_') pool + from + rc_backup_piece_details bpd + where + device_type = 'DISK' +) +select + bf.pool, + db.dbid, + db.name, + st.db_unique_name, + sum(bf.bytes)/1024/1024/1024 GB +from + backup_files bf, + rc_site st, + rc_database db +where + bf.site_key = st.site_key + and db.db_key = bf.db_key +group by + bf.pool, + db.dbid, + db.name, + st.db_unique_name +order by + bf.pool, + db.name, + st.db_unique_name, + db.dbid +; + +clear breaks +clear computes diff --git a/vdh/base_backup_sizes_per_pool2.sql b/vdh/base_backup_sizes_per_pool2.sql new file mode 100644 index 0000000..aa38a7e --- /dev/null +++ b/vdh/base_backup_sizes_per_pool2.sql @@ -0,0 +1,58 @@ +-- Base specific query, to report on the used space by the backup pieces, split per ZFS pool +-- order by db name, db unique name, dbid and pool +-- the reported sizes are the sizes seen by rman, thus before any filesystem compression or deduplication + +-- this query must be run against the rman catalog repository + +set linesize 150 +set pages 50000 + +column name format a10 +column db_unique_name format a30 +column pool format a5 +column GB format 9G999G999D99 + +compute sum of GB on db_unique_name +compute sum of GB on report + +break on dbid on name on db_unique_name skip 1 on pool on report + +with backup_files +as +( select + db_key, + site_key, + bytes, + replace(regexp_substr(regexp_substr(bpd.handle,'/[^/]+/',2),'_[^_]+',1,2),'_') pool + from + rc_backup_piece_details bpd + where + device_type = 'DISK' +) +select + db.dbid, + db.name, + st.db_unique_name, + bf.pool, + sum(bf.bytes)/1024/1024/1024 GB +from + backup_files bf, + rc_site st, + rc_database db +where + bf.site_key = st.site_key + and db.db_key = bf.db_key +group by + db.dbid, + db.name, + st.db_unique_name, + bf.pool +order by + db.name, + st.db_unique_name, + db.dbid, + bf.pool +; + +clear breaks +clear computes diff --git a/vdh/base_crea_db_role_privs_diff.sql b/vdh/base_crea_db_role_privs_diff.sql new file mode 100644 index 0000000..ad4b394 --- /dev/null +++ b/vdh/base_crea_db_role_privs_diff.sql @@ -0,0 +1,143 @@ +with + grantees_to as + ( select + distinct + connect_by_root(usr.name) username, + r_usr.name name + from + sys.sysauth$@DWHPRD_X3DM_LNK sau, + sys.user$@DWHPRD_X3DM_LNK r_usr, + sys.user$@DWHPRD_X3DM_LNK usr + where + sau.privilege# = r_usr.user# + and sau.grantee# = usr.user# + connect by + prior privilege# = grantee# + start with grantee# in + ( select + user# + from + sys.user$@DWHPRD_X3DM_LNK + where + name in + ( select + owner + from + dba_objects@DWHPRD_X3DM_LNK + where + object_type = 'DATABASE LINK' + ) + ) + union all + select + distinct + owner, + owner + from + dba_objects@DWHPRD_X3DM_LNK + where + object_type = 'DATABASE LINK' + ), + users_to as + ( select + distinct + owner + from + dba_objects@DWHPRD_X3DM_LNK a + where + object_type = 'DATABASE LINK' + and not exists + ( select + null + from + uptdba.exclude_oracle_users b + where + b.user_name = a.owner + ) + minus + select + grt.username + from + grantees_to grt, + dba_sys_privs@DWHPRD_X3DM_LNK sp + where + grt.name = sp.grantee + and privilege = 'CREATE DATABASE LINK' + ), + grantees_from as + ( select + distinct + connect_by_root(usr.name) username, + r_usr.name name + from + sys.sysauth$@DWHPRD_LNK sau, + sys.user$@DWHPRD_LNK r_usr, + sys.user$@DWHPRD_LNK usr + where + sau.privilege# = r_usr.user# + and sau.grantee# = usr.user# + connect by + prior privilege# = grantee# + start with grantee# in + ( select + user# + from + sys.user$@DWHPRD_LNK + where + name in + ( select + owner + from + dba_objects@DWHPRD_LNK + where + object_type = 'DATABASE LINK' + ) + ) + union all + select + distinct + owner, + owner + from + dba_objects@DWHPRD_LNK + where + object_type = 'DATABASE LINK' + ), + users_from as + ( select + distinct + owner + from + dba_objects@DWHPRD_LNK a + where + object_type = 'DATABASE LINK' + and not exists + ( select + null + from + uptdba.exclude_oracle_users b + where + b.user_name = a.owner + ) + minus + select + grt.username + from + grantees_from grt, + dba_sys_privs@DWHPRD_LNK sp + where + grt.name = sp.grantee + and privilege = 'CREATE DATABASE LINK' + ) +select + owner +from + users_to +union +select + owner +from + users_from +order by + owner +; diff --git a/vdh/base_no_db_link_priv.sql b/vdh/base_no_db_link_priv.sql new file mode 100644 index 0000000..1b5e616 --- /dev/null +++ b/vdh/base_no_db_link_priv.sql @@ -0,0 +1,58 @@ +with + grantees_to as + ( select distinct connect_by_root(usr.name) username, r_usr.name name + from sys.sysauth$@DWHUAT_LNK sau, sys.user$@DWHUAT_LNK r_usr, sys.user$@DWHUAT_LNK usr + where sau.privilege# = r_usr.user# + and sau.grantee# = usr.user# + connect by + prior privilege# = grantee# + start with grantee# in + ( select user# + from sys.user$@DWHUAT_LNK + where name in (select owner from dba_objects@DWHUAT_LNK where object_type = 'DATABASE LINK')) + union all + select distinct owner, owner + from dba_objects@DWHUAT_LNK + where object_type = 'DATABASE LINK' + ), + users_to as + ( select distinct owner + from dba_objects@DWHUAT_LNK a + where object_type = 'DATABASE LINK' + and not exists (select null from uptdba.exclude_oracle_users b where b.user_name = a.owner) + minus + select grt.username + from grantees_to grt, dba_sys_privs@DWHUAT_LNK sp + where grt.name = sp.grantee + and privilege = 'CREATE DATABASE LINK' + ), + grantees_from as + ( select distinct connect_by_root(usr.name) username, r_usr.name name + from sys.sysauth$@DWHPRD_X3DM_LNK sau, sys.user$@DWHPRD_X3DM_LNK r_usr, sys.user$@DWHPRD_X3DM_LNK usr + where sau.privilege# = r_usr.user# + and sau.grantee# = usr.user# + connect by + prior privilege# = grantee# + start with grantee# in (select user# from sys.user$@DWHPRD_X3DM_LNK where name in (select owner from dba_objects@DWHPRD_X3DM_LNK where object_type = 'DATABASE LINK')) + union all + select distinct owner, owner + from dba_objects@DWHPRD_X3DM_LNK + where object_type = 'DATABASE LINK' + ), + users_from as + ( select distinct owner + from dba_objects@DWHPRD_X3DM_LNK a + where object_type = 'DATABASE LINK' + and not exists (select null from uptdba.exclude_oracle_users b where b.user_name = a.owner) + minus + select grt.username + from grantees_from grt, dba_sys_privs@DWHPRD_X3DM_LNK sp + where grt.name = sp.grantee + and privilege = 'CREATE DATABASE LINK' + ) +select owner +from users_to +union +select owner +from users_from +order by owner; diff --git a/vdh/batch_start_dbconsole.sh b/vdh/batch_start_dbconsole.sh new file mode 100644 index 0000000..626b24d --- /dev/null +++ b/vdh/batch_start_dbconsole.sh @@ -0,0 +1 @@ +for i in `ps -ef | grep pmon | grep -v grep | cut -d'_' -f3`; do export ORACLE_SID=$i; export ORACLE_UNQNAME=`echo $i | tr -d [:digit:]`; emctl start dbconsole; done \ No newline at end of file diff --git a/vdh/big_table_read_perf.sql b/vdh/big_table_read_perf.sql new file mode 100644 index 0000000..86a5ffb --- /dev/null +++ b/vdh/big_table_read_perf.sql @@ -0,0 +1,63 @@ +set lines 150 +set pages 9999 +set feedback off +set echo off + +select distinct sid from v$mystat; +alter system flush buffer_cache; + +alter session set "_serial_direct_read"='always'; + +--exec dbms_monitor.session_trace_enable(waits => true) + +DECLARE + + l_cnt number; + l_start_value number; + l_end_value number; + l_diff number; + l_start timestamp; + l_end timestamp; + l_elapsed number; + l_throughput number; + +BEGIN + + select value + into l_start_value + from v$mystat mystat, v$statname statname + where mystat.statistic# = statname.statistic# + and statname.name = 'physical read bytes'; + + l_start := systimestamp; + + select /*+ FULL(A) PARALLEL(A,10) */ count(*) into l_cnt from sysadm.COMLONG A; + -- select /*+ FULL(A) NOPARALLEL(A) */ count(*) into l_cnt from sysadm.COMLONG A; + -- select /*+ FULL(A) */ count(*) into l_cnt from c2mv5.hist_act A; + + l_end := systimestamp; + + + select value + into l_end_value + from v$mystat mystat, v$statname statname + where mystat.statistic# = statname.statistic# + and statname.name = 'physical read bytes'; + + l_elapsed := extract(day from (l_end - l_start)) * 24 * 60 * 60 + + extract(hour from (l_end - l_start)) * 60 * 60 + + extract(minute from (l_end - l_start)) * 60 + + extract(second from (l_end - l_start)); + l_diff := (l_end_value - l_start_value); + l_throughput := (l_diff/l_elapsed)/1024/1024; + + dbms_output.put_line('physical MB read: ' || to_char(l_diff/1024/1024, '999G999G999D99')); + dbms_output.put_line('elapsed seconds: ' || to_char(l_elapsed, '9G999G999D99')); + dbms_output.put_line('measured throughput: ' || to_char(l_throughput, '999G999D99')); + +END; +/ + +--exec dbms_monitor.session_trace_disable(); + + diff --git a/vdh/blocked_sessions.sql b/vdh/blocked_sessions.sql new file mode 100644 index 0000000..98275a7 --- /dev/null +++ b/vdh/blocked_sessions.sql @@ -0,0 +1,27 @@ +set linesize 150 + +column username format a20 +column bi format 99 +column bs format 9999 +column siw format 999999 +column rwo# format 999999 + +select inst_id, sid, serial#, username, sql_id, blocking_instance bi, blocking_session bs, + seconds_in_wait siw, row_wait_obj# rwo#, row_wait_file# rwf#, row_wait_block# rwb#, + row_wait_row# rwr# +from gv$session +where blocking_session is not null; + + +/* +FUNCTION ROWID_CREATE RETURNS ROWID + Argument Name Type In/Out Default? + ------------------------------ ----------------------- ------ -------- + ROWID_TYPE NUMBER IN + OBJECT_NUMBER NUMBER IN + RELATIVE_FNO NUMBER IN + BLOCK_NUMBER NUMBER IN + ROW_NUMBER NUMBER IN + +select dbms_rowid.rowid_create(1, 81574, 26, 286, 262) from dual; +*/ \ No newline at end of file diff --git a/vdh/blocked_sessions2.sql b/vdh/blocked_sessions2.sql new file mode 100644 index 0000000..9102206 --- /dev/null +++ b/vdh/blocked_sessions2.sql @@ -0,0 +1,44 @@ +set linesize 150 + +column username format a20 +column bi format 99 +column bs format 9999 +column siw format 999999 +column rwo# format 99999999 +column tl format a5 +column inst_id format a10 + +with sessions +as ( select /*+ MATERIALIZE */ + inst_id, sid, serial#, username, sql_id, blocking_instance bi, blocking_session bs, + seconds_in_wait siw, row_wait_obj# rwo#, row_wait_file# rwf#, row_wait_block# rwb#, + row_wait_row# rwr# + from gv$session + ) +select lpad('-', level, '-') || inst_id inst_id, sid, serial#, username, sql_id, bi, bs, siw, rwo#, + rwf#, rwb#, rwr# +from sessions +where bs is not null + or (inst_id, sid) in + ( select bi, bs + from sessions + ) +start with bs is null +connect by ( bi = prior inst_id + and bs = prior sid + ) +; + + +/* +FUNCTION ROWID_CREATE RETURNS ROWID + Argument Name Type In/Out Default? + ------------------------------ ----------------------- ------ -------- + ROWID_TYPE NUMBER IN + OBJECT_NUMBER NUMBER IN + RELATIVE_FNO NUMBER IN + BLOCK_NUMBER NUMBER IN + ROW_NUMBER NUMBER IN + +select dbms_rowid.rowid_create(1, 81574, 26, 286, 262) from dual; +*/ \ No newline at end of file diff --git a/vdh/bloom_join2.sql b/vdh/bloom_join2.sql new file mode 100644 index 0000000..0cd7688 --- /dev/null +++ b/vdh/bloom_join2.sql @@ -0,0 +1,7 @@ +-- skew2 and skew3 must be defined as PX +select /*+ bloom join 2 use_hash (skew temp_skew) */ a.col2, sum(a.col1) +from kso.skew3 a, kso.skew2 b +where a.pk_col = b.pk_col +and b.col1 = 1 +group by a.col2 +/ diff --git a/vdh/calculate_total_size.sql b/vdh/calculate_total_size.sql new file mode 100644 index 0000000..1d4e449 --- /dev/null +++ b/vdh/calculate_total_size.sql @@ -0,0 +1,80 @@ +-- calculates the sum of the ALLOCATED sizes for the given non partitioned tables +-- and their dependend indexes and lob segments + +column mb format 9G999G999D99 +column extents format 999G999D99 +column blocks format 999G999G999D99 + +compute sum label total of mb on report +break on report + +with my_segments +as +( select + --+ MATERIALIZE + tab.owner table_owner, + tab.table_name, + ind.owner index_owner, + ind.index_name, + lob.segment_name lob_segment, + lob.index_name lob_ind_segment + from + dba_tables tab + left outer join dba_indexes ind + on ( tab.owner = ind.table_owner + and tab.table_name = ind.table_name + ) + left outer join dba_lobs lob + on ( tab.owner = lob.owner + and tab.table_name = lob.table_name + ) + where + tab.owner = '&owner' + and tab.table_name = '&table_name' +) +select + segment_type, + sum(extents) extents, + sum(blocks) blocks, + sum(bytes)/1024/1024 mb +from + dba_segments dseg +where + (owner,segment_name) in + ( select + seg.table_owner, + seg.table_name + from + my_segments seg + ) + or (owner,segment_name) in + ( select + seg.index_owner, + seg.index_name + from + my_segments seg + ) + or (owner, segment_name) in + ( select + seg.table_owner, + seg.lob_segment + from + my_segments seg + ) + or (owner, segment_name) in + ( select + seg.table_owner, + seg.lob_ind_segment + from + my_segments seg + ) +group by + segment_type +; + + +clear computes +clear breaks + +undef owner +undef table_name diff --git a/vdh/calibrate_io.sql b/vdh/calibrate_io.sql new file mode 100644 index 0000000..2c17780 --- /dev/null +++ b/vdh/calibrate_io.sql @@ -0,0 +1,14 @@ +SET SERVEROUTPUT ON +DECLARE + lat INTEGER; + iops INTEGER; + mbps INTEGER; +BEGIN +-- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (, , iops, mbps, lat); + DBMS_RESOURCE_MANAGER.CALIBRATE_IO (&no_of_disks, 10, iops, mbps, lat); + + DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops); + DBMS_OUTPUT.PUT_LINE ('latency = ' || lat); + dbms_output.put_line('max_mbps = ' || mbps); +end; +/ diff --git a/vdh/cbo_last_analyzed_stats.sql b/vdh/cbo_last_analyzed_stats.sql new file mode 100644 index 0000000..99c666c --- /dev/null +++ b/vdh/cbo_last_analyzed_stats.sql @@ -0,0 +1,80 @@ +column counted format 9G999G999G999 + +accept OWNER prompt 'Owner Name: ' + +break on report on stattype_locked skip 2 on last_analyzed_day skip 1 + +compute sum of counted on last_analyzed_day +compute sum of counted on stattype_locked +compute sum of counted on report + +select + stattype_locked, + trunc(last_analyzed) last_analyzed_day, + object_type, + count(*) counted +from + ( select + object_type, + last_analyzed, + stattype_locked + from + dba_tab_statistics + where + owner = '&OWNER' + and table_name not in + ( select + table_name + from + dba_external_tables + where + owner = '&OWNER' + union all + select + table_name + from + dba_tables + where + temporary = 'Y' + and owner = '&OWNER' + ) + union all + select + object_type, + last_analyzed, + stattype_locked + from + dba_ind_statistics + where + owner = '&OWNER' + and table_name not in + ( select + table_name + from + dba_external_tables + where + owner = '&OWNER' + union all + select + table_name + from + dba_tables + where + temporary = 'Y' + and owner = '&OWNER' + ) + ) +group by + stattype_locked, + trunc(last_analyzed), + object_type +order by + stattype_locked, + last_analyzed_day, + object_type +; + +clear breaks +clear computes + +undef OWNER diff --git a/vdh/cdc_healthcheck.sql b/vdh/cdc_healthcheck.sql new file mode 100644 index 0000000..bbe4d00 --- /dev/null +++ b/vdh/cdc_healthcheck.sql @@ -0,0 +1,406 @@ +REM +REM This script collects details related to CDC setup and activity. +REM +REM It is recommended to run with markup html ON (default is on) and generate an +REM HTML file for web viewing. +REM Please provide the output in HTML format when Oracle (support or development) requests +REM CDC configuration details. +REM +REM NOTE: +REM This main consideration of this note is to provide configuration details although +REM some performance detail is provided. The note should be used in conjunction with +REM the Streams Healthcheck - +REM Streams Configuration Report and Health Check Script which also provides +REM detailed performance inforation relating to Capture and Apply processes. +REM +REM To convert output to a text file viewable with a text editor, +REM change the HTML ON to HTML OFF in the set markup command +REM Remember to set up a spool file to capture the output +REM + +-- connect / as sysdba +set markup HTML ON entmap off + +alter session set nls_date_format='HH24:Mi:SS MM/DD/YY'; +set heading off + +select 'CDC Configuration Check (V1.0.0) for '||global_name||' on Instance='||instance_name||' generated: '||sysdate o from global_name, v$instance; +set heading on timing off + +set pages 9999 + +prompt Publishers: Publishers Privileges + +prompt Change Sets: Change Sets Change Sources Change Tables + +prompt Subscribers: Change Sets Change Tables Views + +prompt Processes: Capture Apply Propagation + +prompt Processes: Additional Autolog Details + +prompt +prompt ============================================================================================ +prompt +prompt ++ Database Information ++ +COLUMN MIN_LOG FORMAT A7 +COLUMN PK_LOG FORMAT A6 +COLUMN UI_LOG FORMAT A6 +COLUMN FK_LOG FORMAT A6 +COLUMN ALL_LOG FORMAT A6 +COLUMN FORCE_LOG FORMAT A10 +COLUMN archive_change# format 999999999999999999 +COLUMN archivelog_change# format 999999999999999999 +COLUMN NAME HEADING 'Name' +COLUMN platform_name format a30 wrap +COLUMN current_scn format 99999999999999999 +SELECT DBid,name,created, +SUPPLEMENTAL_LOG_DATA_MIN MIN_LOG,SUPPLEMENTAL_LOG_DATA_PK PK_LOG, +SUPPLEMENTAL_LOG_DATA_UI UI_LOG, +SUPPLEMENTAL_LOG_DATA_FK FK_LOG, +SUPPLEMENTAL_LOG_DATA_ALL ALL_LOG, + FORCE_LOGGING FORCE_LOG, +resetlogs_time,log_mode, archive_change#, +open_mode,database_role,archivelog_change# , current_scn, platform_id, platform_name from v$database; + +prompt ============================================================================================ +prompt +prompt ++ Parameters ++ + +column NAME format a30 +column VALUE format a30 +select NAME, VALUE from v$parameter where name in ('java_pool_size','compatible','parallel_max_servers','job_queue_processes', +'aq_tm_processes','processes','sessions','streams_pool_size','undo_retention','open_links','global_names','remote_login_passwordfile'); + +prompt ++ AQ_TM_PROCESSES should indicate QMON AUTO TUNING IN FORCE ++ +column NAME format a20 +column NULL? format a20 +select inst_id, name, nvl(value,'AUTO TUNING IN OPERATION') "SHOULD INDICATE AUTO TUNING" +from gv$spparameter +where name = 'aq_tm_processes'; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Publishers ++ + +COLUMN PUBLISHER HEADING 'Change Set Publishers' FORMAT A30 +select distinct PUBLISHER from change_sets where PUBLISHER is not null; +COLUMN PUBLISHER HEADING 'Change Source Publishers' FORMAT A30 +select distinct PUBLISHER from change_sources where PUBLISHER is not null; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Publishers Privilieges ++ +prompt ++ --Roles ++ + +COLUMN GRANTEE HEADING 'GRANTEE' FORMAT A30 +COLUMN GRANTED_ROLE HEADING 'GRANTED_ROLE' FORMAT A30 +COLUMN ADMIN_OPTION HEADING 'ADMIN_OPTION' FORMAT A3 +COLUMN DEFAULT_ROLE HEADING 'DEFAULT_ROLE' FORMAT A3 +select GRANTEE ,GRANTED_ROLE,ADMIN_OPTION,DEFAULT_ROLE from dba_role_privs +where GRANTEE in (select distinct PUBLISHER from change_sets where PUBLISHER is not null) +or GRANTEE in (select distinct PUBLISHER from change_sources where PUBLISHER is not null) +order by GRANTEE; + +prompt +prompt ++ --System Privilieges ++ +prompt +COLUMN GRANTEE HEADING 'GRANTEE' FORMAT A30 +COLUMN PRIVILEGE HEADING 'PRIVILEGE' FORMAT A40 +COLUMN ADMIN_OPTION HEADING 'ADMIN_OPTION' FORMAT A3 +select GRANTEE,PRIVILEGE,ADMIN_OPTION from dba_sys_privs +where GRANTEE in (select distinct PUBLISHER from change_sets where PUBLISHER is not null) +or GRANTEE in (select distinct PUBLISHER from change_sources where PUBLISHER is not null) +order by GRANTEE; + +prompt +prompt ++ --Table Privilieges ++ +COLUMN GRANTEE format a20 +COLUMN TABLE_NAME format a40 +COLUMN PRIVILEGE format a10 +select GRANTEE, OWNER||'.'||TABLE_NAME "TABLE_NAME", PRIVILEGE +from dba_tab_privs +where GRANTEE in (select distinct PUBLISHER from change_sets where PUBLISHER is not null) +or GRANTEE in (select distinct PUBLISHER from change_sources where PUBLISHER is not null) +order by GRANTEE, TABLE_NAME; + + +prompt +prompt ============================================================================================ +prompt +prompt ++ Tables with Supplemental Logging ++ +column OWNER format a30 +column TABLE_NAME format a30 wrap +column TABLE Format a25 +select owner||'.'||table_name "TABLE", LOG_GROUP_NAME, LOG_GROUP_TYPE from DBA_LOG_GROUPS; + +prompt +prompt ++ Supplemental logging columns ++ +COLUMN LOG_GROUP_NAME format a25 +COLUMN COLUMN_NAME format a25 +select owner||'.'||table_name "Table", LOG_GROUP_NAME, COLUMN_NAME from DBA_LOG_GROUP_COLUMNS; + + +prompt +prompt ============================================================================================ +prompt +prompt ++ Change Sets ++ +prompt +column PUBLISHER format a20 +column SET_NAME format a20 +column CHANGE_SOURCE_NAME format a20 +select PUBLISHER, SET_NAME, CHANGE_SOURCE_NAME, CREATED from change_sets; + +prompt +prompt ++ Change Set Status ++ +prompt +column c HEADING 'Capture|Enabled' format a7 +column LOWEST_SCN format 999999999999999999 +select PUBLISHER, SET_NAME, CAPTURE_ENABLED c, PURGING, BEGIN_DATE, END_DATE, LOWEST_SCN, STOP_ON_DDL from change_sets; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Change Sources ++ +prompt +column SOURCE_NAME format a15 +column SOURCE_DESCRIPTION format a30 +column SOURCE_DATABASE format a40 +select SOURCE_NAME, SOURCE_DESCRIPTION, CREATED, SOURCE_TYPE, SOURCE_DATABASE, SOURCE_ENABLED "Enabled" +from change_sources; + +prompt ============================================================================================ +prompt +prompt ++ Tables Prepared for Capture ++ +prompt +COLUMN table_owner format a30 HEADING 'Table|Owner' +COLUMN table_name format a30 HEADING 'Table|Name' +COLUMN timestamp heading 'Timestamp' +COLUMN supplemental_log_data_pk HEADING 'PK|Logging' +COLUMN supplemental_log_data_ui HEADING 'UI|Logging' +COLUMN supplemental_log_data_fk HEADING 'FK|Logging' +COLUMN supplemental_log_data_all HEADING 'All|Logging' + +select * from dba_capture_prepared_tables order by table_owner,table_name; + +prompt ++ Schemas Prepared for Capture ++ +select * from dba_capture_prepared_schemas order by schema_name; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Capture / Distributed HotLog Case ++ + +select s.SOURCE_NAME, c.CAPTURE_NAME, c.QUEUE_NAME, c.STATUS +from change_sources s, dba_capture c +where s.capture_name=c.capture_name +and s.capture_queue_name=c.queue_name +and s.source_database=c.source_database +and s.publisher=c.queue_owner; + +prompt +prompt ++ Capture process current state ++ + +column CAPTURE_NAME format a25 +column SET_NAME format a20 +column STATE format a60 +column TOTAL_MESSAGES_CAPTURED HEADING 'Captured|MSGs' +column TOTAL_MESSAGES_ENQUEUED HEADING 'Enqueued|MSGs' +select s.PUBLISHER, s.SOURCE_NAME, c.capture_name, c.state +from v$streams_capture c, change_sources s +where c.capture_name = s.capture_name; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Capture / other configurations ++ + +Column PUBLISHER format a10 +column change_set format a20 +column CAPTURE_NAME format a25 +column queue_name format a25 +column ERROR_MESSAGE format a30 + +select PUBLISHER, s.SET_NAME change_set, c.CAPTURE_NAME, c.QUEUE_NAME, STATUS, ERROR_MESSAGE +from dba_capture c, change_sets s +where c.capture_name=s.capture_name +and c.queue_name = s.queue_name +and c.queue_owner = s.publisher; + +prompt +prompt ++ Capture process current state ++ +column CAPTURE_NAME format a25 +column SET_NAME format a20 +column STATE format a60 +column TOTAL_MESSAGES_CAPTURED HEADING 'Captured|MSGs' +column TOTAL_MESSAGES_ENQUEUED HEADING 'Enqueued|MSGs' + +select s.PUBLISHER, s.SET_NAME, c.capture_name, c.state +from v$streams_capture c, change_sets s +where c.capture_name = s.capture_name; + +prompt ============================================================================================ +prompt +prompt ++ Buffered Publishers ++ +select * from gv$buffered_publishers; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Apply process re Change Sets ++ +prompt + +Column PUBLISHER format a15 +column change_set format a20 +column apply_name format a25 +column queue_name format a25 +column ERROR_MESSAGE format a30 +select PUBLISHER, s.SET_NAME change_set, a.APPLY_NAME, a.QUEUE_NAME, STATUS, ERROR_MESSAGE +from dba_apply a, change_sets s +where a.apply_name=s.apply_name +and a.queue_name = s.queue_name +and a.queue_owner = s.publisher; + +prompt +prompt ++ Buffered Subscribers ++ +select * from gv$buffered_subscribers; + + +prompt +prompt ============================================================================================ +prompt +prompt ++ Buffered Queues ++ + +column QUEUE format a40 +select QUEUE_SCHEMA||'.'||QUEUE_NAME Queue, NUM_MSGS-SPILL_MSGS "Memory MSGs", SPILL_MSGS "Spilled", CNUM_MSGS Cummulative +from v$buffered_queues; + + +prompt +prompt ============================================================================================ +prompt +prompt ++ Propagation ++ +column "Source Queue" format a30 +column "Dest Queue" format a35 +column "Destination Name" format a35 +select PROPAGATION_NAME, DESTINATION_DBLINK "Destination Name", SOURCE_QUEUE_OWNER||'.'||SOURCE_QUEUE_NAME "Source Queue", +DESTINATION_QUEUE_OWNER||'.'||DESTINATION_QUEUE_NAME "Dest Queue", +STATUS, ERROR_MESSAGE +from dba_propagation; + +prompt ++ Queue Schedules ++ +column SOURCE format a30 +column DESTINATION format a65 +column LAST_ERROR_MSG format a30 +select SCHEMA||'.'||QNAME "SOURCE", DESTINATION, SCHEDULE_DISABLED, TOTAL_NUMBER, LAST_ERROR_MSG, LAST_ERROR_DATE +from dba_queue_schedules; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Change Tables ++ +column "Change Set" format a20 +column "Change Table" format a25 +column "Source Table" format a25 +column CREATED_SCN format 999999999999999999 +select CHANGE_SET_NAME "Change Set", CHANGE_TABLE_SCHEMA||'.'||CHANGE_TABLE_NAME "Change Table", + SOURCE_SCHEMA_NAME||'.'||SOURCE_TABLE_NAME "Source Table", + CAPTURED_VALUES, CREATED, CREATED_SCN +from change_tables; + +prompt +prompt ++ Change Columns For Each Change Table ++ + +column "Change Table" format a30 +column COLUMN_NAME format a20 +column DATA_TYPE format a10 +select CHANGE_TABLE_SCHEMA||'.'||CHANGE_TABLE_NAME "Change Table", PUB_ID, COLUMN_NAME, DATA_TYPE +from DBA_PUBLISHED_COLUMNS +order by "Change Table", PUB_ID, COLUMN_NAME; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Users Eligible to be Subscribers for Change Tables ++ +column "User" format a15 +column "Change Set" format a20 +column "Channge Table" format a20 +column "Source Table" format a20 +select t.GRANTEE "User", CHANGE_SET_NAME "Change Set", t.OWNER||'.'||t.TABLE_NAME "Channge Table", s.SOURCE_SCHEMA_NAME||'.'||s.SOURCE_TABLE_NAME "Source Table" +from dba_tab_privs t, dba_source_tables s, change_tables c +where t.PRIVILEGE ='SELECT' +and t.OWNER=c.CHANGE_TABLE_SCHEMA +and t.TABLE_NAME=c.CHANGE_TABLE_NAME +and c.SOURCE_SCHEMA_NAME=s.SOURCE_SCHEMA_NAME +and c.SOURCE_TABLE_NAME=s.SOURCE_TABLE_NAME; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Change Set Subscribers ++ +column "Subscriber" format a15 +column SUBSCRIPTION_NAME format a20 +column "Change Set" format a20 +column LAST_EXTENDED heading "Extended" +column LAST_PURGED heading "Purged" +select USERNAME "Subscriber", SET_NAME "Change Set", SUBSCRIPTION_NAME, CREATED, LAST_EXTENDED, LAST_PURGED +FROM DBA_SUBSCRIPTIONS; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Change Set Tables Subscriptions / Subscribers Views ++ +column VIEW_NAME format a15 +column "Change Table" format a20 +select s.SUBSCRIPTION_NAME, s.VIEW_NAME, + c.CHANGE_TABLE_SCHEMA||'.'||c.CHANGE_TABLE_NAME "Change Table", + s.CHANGE_SET_NAME "Change Set" +from DBA_SUBSCRIBED_TABLES s, CHANGE_TABLES c +where c.SOURCE_SCHEMA_NAME = s.SOURCE_SCHEMA_NAME +and c.SOURCE_TABLE_NAME = s.SOURCE_TABLE_NAME +and c.CHANGE_SET_NAME = s.CHANGE_SET_NAME; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Change Table / Columns Subscriptions ++ +column CHANGE_SET_NAME format a20 +column COLUMN_NAME format a15 +column DATA_TYPE format a10 +select sc.SUBSCRIPTION_NAME, s.VIEW_NAME, s.CHANGE_SET_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.PUB_ID +from DBA_SUBSCRIBED_COLUMNS sc, DBA_SUBSCRIBED_TABLES s, DBA_PUBLISHED_COLUMNS c +where sc.SOURCE_SCHEMA_NAME = s.SOURCE_SCHEMA_NAME +and sc.SOURCE_TABLE_NAME = s.SOURCE_TABLE_NAME +and sc.SOURCE_TABLE_NAME = c.SOURCE_TABLE_NAME +and sc.SOURCE_SCHEMA_NAME = c.SOURCE_SCHEMA_NAME +and s.CHANGE_SET_NAME = c.CHANGE_SET_NAME +and sc.COLUMN_NAME = c.COLUMN_NAME +order by sc.SUBSCRIPTION_NAME, s.VIEW_NAME, s.CHANGE_SET_NAME, c.COLUMN_NAME; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Additional Information relevant to AutoLog ++ +prompt +++ Autolog Parameters ++ +column NAME format a30 +column VALUE format a30 +select NAME, VALUE from v$parameter where name like 'log_archive%'; + +prompt +prompt ++ Logfiles ++ +select THREAD#, GROUP#, BYTES/1024/1024 from V$LOG; + +prompt +prompt ++ Standbylogs ++ +SELECT GROUP#, THREAD#, SEQUENCE#, BYTES/1024/1024, ARCHIVED, STATUS FROM V$STANDBY_LOG; + + +set timing off +set markup html off +clear col +clear break +spool +prompt End Of Script +spool off diff --git a/vdh/change_pctincrease.sql b/vdh/change_pctincrease.sql new file mode 100644 index 0000000..eb7dc9d --- /dev/null +++ b/vdh/change_pctincrease.sql @@ -0,0 +1,16 @@ +BEGIN + + for big_seg in + ( select owner, segment_name, segment_type + from dba_segments + where bytes > 100 *1024*1024 + and segment_type in ('INDEX', 'TABLE') + ) + loop + + dbms_output.put_line( 'alter ' || big_seg.segment_type || ' ' || + big_seg.owner || '.' || big_seg.segment_name || + ' storage (pctincrease 0);'); + end loop; + +END; \ No newline at end of file diff --git a/vdh/check_nd_constraints.sql b/vdh/check_nd_constraints.sql new file mode 100644 index 0000000..230f404 --- /dev/null +++ b/vdh/check_nd_constraints.sql @@ -0,0 +1,77 @@ +-- check for non deferrable unique/primary constraints that are supported by non unique indexes +-- because of the wide output it is best to spool it + +set linesize 200 + +column owner format a30 + +break on owner skip 1 on table_name + +select con.owner, con.table_name, con.constraint_name, con.constraint_type, index_owner, con.index_name +from dba_indexes ind, + dba_constraints con +where ind.owner = con.index_owner + and ind.index_name = con.index_name + and ind.uniqueness != 'UNIQUE' + and con.constraint_type in ('U', 'P') + and con.deferrable = 'NOT DEFERRABLE' +order by con.owner, con.table_name, con.constraint_name; + +clear breaks + + +column column_name format a30 +column column_position format 99 heading CP +column uniqueness format a1 heading U +column index_type format a10 + +break on owner skip 1 on table_name on index_name on index_type on uniqueness on status + +select ind.owner, ind.table_name, ind.index_name, ind.index_type, decode(ind.uniqueness,'UNIQUE', 'Y', 'N') uniqueness, + ind.status, inc.column_name, inc.column_position, ine.column_expression +from dba_indexes ind, dba_ind_columns inc, dba_ind_expressions ine +where ind.owner = inc.index_owner + and ind.index_name = inc.index_name + and inc.index_owner = ine.index_owner(+) + and inc.index_name = ine.index_name(+) + and inc.column_position = ine.column_position(+) + and (ind.owner, ind.index_name) in + ( select con.index_owner, con.index_name + from dba_indexes ind, + dba_constraints con + where ind.owner = con.index_owner + and ind.index_name = con.index_name + and ind.uniqueness != 'UNIQUE' + and con.constraint_type in ('U', 'P') + and con.deferrable = 'NOT DEFERRABLE' + ) +order by ind.owner, ind.table_name, ind.index_name, inc.column_position; + +clear breaks + + +set long 30 + +column constraint_name format a30 +column constraint_type format a2 heading CT +column column_name format a30 +column position format 99 heading CP + + +break on owner skip 1 on table_name on constraint_name on constraint_type on status + +select con.owner, con.table_name, con.constraint_name, con.constraint_type, con.status, col.column_name, col.position +from dba_constraints con, + dba_cons_columns col, + dba_indexes ind +where col.owner = con.owner + and col.constraint_name = con.constraint_name + and ind.owner = con.index_owner + and ind.index_name = con.index_name + and ind.uniqueness != 'UNIQUE' + and con.constraint_type in ('U', 'P') + and con.deferrable = 'NOT DEFERRABLE' +order by con.owner, con.table_name, con.constraint_name, col.position; + + +clear breaks diff --git a/vdh/check_px.sql b/vdh/check_px.sql new file mode 100644 index 0000000..938041d --- /dev/null +++ b/vdh/check_px.sql @@ -0,0 +1,7 @@ +column statistic format a50 +column value for 999,999 + + +select * +from V$PX_PROCESS_SYSSTAT +where statistic like '%In Use%'; diff --git a/vdh/client_tracing_parameters b/vdh/client_tracing_parameters new file mode 100644 index 0000000..e15c8f9 --- /dev/null +++ b/vdh/client_tracing_parameters @@ -0,0 +1,3 @@ +tracle_level_client = admin +trace_unique_client = on +trace_timestamp_client = on diff --git a/vdh/client_tracing_parameters.txt b/vdh/client_tracing_parameters.txt new file mode 100644 index 0000000..eb39771 --- /dev/null +++ b/vdh/client_tracing_parameters.txt @@ -0,0 +1,5 @@ +tracle_level_client = admin +trace_unique_client = on +trace_timestamp_client = on +trace_file_client = cli +trace_directory_client = E:\oracle\OraHome\network\trace \ No newline at end of file diff --git a/vdh/cnt_proc_per_user.sh b/vdh/cnt_proc_per_user.sh new file mode 100644 index 0000000..3ff1303 --- /dev/null +++ b/vdh/cnt_proc_per_user.sh @@ -0,0 +1 @@ +ps -ef | awk '{if (NR > 1) {users[$1]++}} END {for (user in users) { printf "%-20s %d\n", user, users[user]}}' diff --git a/vdh/cols_as_rows.sql b/vdh/cols_as_rows.sql new file mode 100644 index 0000000..a5ff49d --- /dev/null +++ b/vdh/cols_as_rows.sql @@ -0,0 +1,86 @@ +create or replace type obj_cols_as_rows as object + ( rnum number, + cname varchar2(30), + val varchar2(4000) + ) +/ + +create or replace type tab_cols_as_rows +as table of obj_cols_as_rows +/ + +create or replace +function cols_as_rows + ( p_query in varchar2 + ) RETURN tab_cols_as_rows + + AUTHID CURRENT_USER + PIPELINED + +AS + + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_colCnt number default 0; + l_descTbl dbms_sql.desc_tab; + l_rnum number := 1; + +BEGIN + + dbms_sql.parse + ( c => l_theCursor, + statement => p_query, + language_flag => dbms_sql.native + ); + + dbms_sql.describe_columns + ( c => l_theCursor, + col_cnt => l_colCnt, + desc_t => l_descTbl + ); + + for i in 1 .. l_colCnt loop + dbms_sql.define_column + ( c => l_theCursor, + position => i, + column => l_columnValue, + column_size => 4000 + ); + end loop; + + l_status := dbms_sql.execute + ( c => l_theCursor + ); + while ( dbms_sql.fetch_rows + ( c => l_theCursor + ) > 0 + ) + loop + + for i in 1 .. l_colCnt + loop + dbms_sql.column_value + ( c => l_theCursor, + position => i, + value => l_columnValue + ); + pipe row ( obj_cols_as_rows + ( l_rnum, + l_descTbl(i).col_name, + l_columnValue + ) + ); + end loop; + l_rnum := l_rnum + 1; + + end loop; + + dbms_sql.close_cursor + ( c => l_theCursor + ); + + return; + +end cols_as_rows; +/ diff --git a/vdh/comp_ratio.sql b/vdh/comp_ratio.sql new file mode 100644 index 0000000..91b7908 --- /dev/null +++ b/vdh/comp_ratio.sql @@ -0,0 +1,17 @@ +set lines 155 +compute sum of totalsize_megs on report +break on report +col owner for a10 +col segment_name for a20 +col segment_type for a10 +col totalsize_megs for 999,999.9 +col compression_ratio for 999.9 +select owner, segment_name, segment_type type, +sum(bytes/1024/1024) as totalsize_megs, +&original_size/sum(bytes/1024/1024) as compression_ratio +from dba_segments +where owner like nvl('&owner',owner) +and segment_name like nvl('&table_name',segment_name) +and segment_type like nvl('&type',segment_type) +group by owner, segment_name, tablespace_name, segment_type +order by 5; diff --git a/vdh/compare_schema.sql b/vdh/compare_schema.sql new file mode 100644 index 0000000..0cf73a3 --- /dev/null +++ b/vdh/compare_schema.sql @@ -0,0 +1,781 @@ +/* +This script compares the object definitions in the current schema +to that of a remote schema. +The remote schema is defined using a database link. +THE SCRIPT COMPARES THE FOLLOWING: +- Existence of tables +- Existence of columns +- Column definitions +- Existence of indexes +- Index definitions (column usage) +- Existence of constraints +- Constraint definitions (table, type and reference) +- Constraint column usage (for unique, primary key and foreign keys) +- Check constraint definitions +- Existence of triggers +- Definition of triggers +- Existence of procedure/packages/functions +- Definition of procedures/packages/functions +(Ie. the script does not do a complete check, it does not for example +check any grants, synonyms, clusters or storage definitions). +The script drops and creates a few temporary objects prefixed with +the first 3 letter combination (AAA - ZZZ) that does not conflict with any +existing objects. +If you find ways of improving this script or have any comments and/or +problems, please send a mail to the author. +This script has been tested on Oracle 7.3. +*/ +undef prex +undef prefx +undef a +undef thisuser +undef b +undef REMOTESCHEMA +undef REMOTEPASSW +undef connstring +undef c +undef todaysdate +variable prefx varchar2(3) +declare +i number ; +j number ; +k number ; +cnt number; +begin + for i in ascii('A') .. ascii('Z') loop + for j in ascii('A') .. ascii('Z') loop + for k in ascii('A') .. ascii('Z') loop + select count(*) into cnt from user_objects where object_name like + chr(i)||chr(j)||chr(k)||'%'; + if cnt = 0 then + :prefx := chr(i)||chr(j)||chr(k); + return; + end if; + end loop; + end loop; + end loop; +end; +/ +column a new_val prex +set verify off +set linesize 132 +set feedback off +select :prefx a from dual; +column b new_val thisuser +select user b from dual; +column c new_val todaysdate +select to_char(sysdate,'DD-MON-YYYY HH24:MI') c from dual; +accept REMOTESCHEMA char prompt 'Enter remote username:' +accept REMOTEPASSW char prompt 'Enter remote password:' hide +accept connstring char prompt 'Enter remote connectstring:' +spool dbdiff +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT SCHEMA DEFINITION DIFFERENCES &todaysdate +PROMPT +PROMPT this schema: &thisuser +PROMPT remote schema: &remoteschema.@&connstring +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT +PROMPT +create database link &prex.lnk connect to &REMOTESCHEMA identified +by &REMOTEPASSW using '&CONNSTRING'; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT TABLES MISSING IN THIS SCHEMA: +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +create table &prex.common_tables as +select table_name from user_TAbles@&prex.lnk +intersect +select table_name from user_tables; +select table_name from user_TAbles@&prex.lnk +minus +select table_name from &prex.common_tables; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT TABLES MISSING IN REMOTE SCHEMA: +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select table_name from user_TAbles where table_name not like '&prex.%' +minus +select table_name from user_tables@&prex.lnk; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT COLUMNS MISSING IN THIS SCHEMA FOR COMMON TABLES +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select table_name,column_name from user_tab_columns@&prex.lnk +where table_name in +(select table_name from &prex.common_tables) +minus +select table_name,column_name from user_tab_columns +where table_name in +(select table_name from &prex.common_tables); +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT COLUMNS MISSING IN REMOTE SCHEMA FOR COMMON TABLES +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select table_name,column_name from user_tab_columns +where table_name in +(select table_name from &prex.common_tables) +minus +select table_name,column_name from user_tab_columns@&prex.lnk +where table_name in +(select table_name from &prex.common_tables); + +create table &prex.diff_cols1 +( TABLE_NAME VARCHAR2(30), + COLUMN_NAME VARCHAR2(30), + DATA_TYPE VARCHAR2(9), + DATA_LENGTH NUMBER, + DATA_PRECISION NUMBER, + DATA_SCALE NUMBER, + NULLABLE VARCHAR2(1), + COLUMN_ID NUMBER, + DEFAULT_LENGTH NUMBER, + DATA_DEFAULT varchar2(2000)); +create table &prex.diff_cols2 +( TABLE_NAME VARCHAR2(30), + COLUMN_NAME VARCHAR2(30), + DATA_TYPE VARCHAR2(9), + DATA_LENGTH NUMBER, + DATA_PRECISION NUMBER, + DATA_SCALE NUMBER, + NULLABLE VARCHAR2(1), + COLUMN_ID NUMBER, + DEFAULT_LENGTH NUMBER, + DATA_DEFAULT varchar2(2000)); +declare +cursor c1 is +select + l.TABLE_NAME , + l.COLUMN_NAME, + l.DATA_TYPE , + l.DATA_LENGTH, + l.DATA_PRECISION , + l.DATA_SCALE , + l.NULLABLE, + l.COLUMN_ID , + l.DEFAULT_LENGTH , + l.DATA_DEFAULT +from user_tab_columns l,&prex.common_tables c +where c.table_name=l.table_name ; +TYPE rec is record ( + TABLE_NAME VARCHAR2(30), + COLUMN_NAME VARCHAR2(30), + DATA_TYPE VARCHAR2(9), + DATA_LENGTH NUMBER, + DATA_PRECISION NUMBER, + DATA_SCALE NUMBER, + NULLABLE VARCHAR2(1), + COLUMN_ID NUMBER, + DEFAULT_LENGTH NUMBER, + DATA_DEFAULT varchar2(2000) +); +c rec; +begin + open c1; + loop + fetch c1 into c; + exit when c1%NOTFOUND; + insert into &prex.diff_cols1 values + (c.table_name,c.column_name,c.data_type,c.data_length, + c.DATA_PRECISION, c.DATA_SCALE, c.NULLABLE, c.COLUMN_ID, + c.DEFAULT_LENGTH, c.DATA_DEFAULT); +end loop; +end; +/ +declare +cursor c1 is +select + l.TABLE_NAME , + l.COLUMN_NAME, + l.DATA_TYPE , + l.DATA_LENGTH, + l.DATA_PRECISION , + l.DATA_SCALE , + l.NULLABLE, + l.COLUMN_ID , + l.DEFAULT_LENGTH , + l.DATA_DEFAULT +from user_tab_columns@&prex.lnk l,&prex.common_tables c +where c.table_name=l.table_name ; +TYPE rec is record ( + TABLE_NAME VARCHAR2(30), + COLUMN_NAME VARCHAR2(30), + DATA_TYPE VARCHAR2(9), + DATA_LENGTH NUMBER, + DATA_PRECISION NUMBER, + DATA_SCALE NUMBER, + NULLABLE VARCHAR2(1), + COLUMN_ID NUMBER, + DEFAULT_LENGTH NUMBER, + DATA_DEFAULT varchar2(2000) +); +c rec; +begin + open c1; + loop + fetch c1 into c; + exit when c1%NOTFOUND; + insert into &prex.diff_cols2 values + (c.table_name,c.column_name,c.data_type,c.data_length, + c.DATA_PRECISION, c.DATA_SCALE, c.NULLABLE, c.COLUMN_ID, + c.DEFAULT_LENGTH, c.DATA_DEFAULT); +end loop; +end; +/ +column table_name format a20 +column column_name format a20 +column param format a15 +column local_value format a20 +column remote_value format a20 +set arraysize 1 +set maxdata 32000 +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT DIFFERENCE IN COLUMN-DEFS +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select l.table_name,l.column_name,'DATA_DEFAULT' param , +l.DATA_DEFAULT local_value, r.DATA_DEFAULT remote_value +from &prex.diff_cols1 l, &prex.diff_cols2 r +where l.table_name=r.table_name and + l.column_name=r.column_name and l.DATA_DEFAULT != r.DATA_DEFAULT +union +select l.table_name,l.column_name,'DATA_TYPE',l.data_type,r.data_type +from &prex.diff_cols1 l, &prex.diff_cols2 r +where l.table_name=r.table_name and + l.column_name=r.column_name and l.data_type != r.data_type +union +select l.table_name,l.column_name,'DATA_LENGTH',to_char(l.data_length), +to_char(r.data_length) +from &prex.diff_cols1 l, &prex.diff_cols2 r +where l.table_name=r.table_name and + l.column_name=r.column_name and l.data_length != r.data_length +union +select l.table_name,l.column_name,'DATA_PRECISION', +to_char(l.DATA_PRECISION),to_char(r.DATA_PRECISION) +from &prex.diff_cols1 l, &prex.diff_cols2 r +where l.table_name=r.table_name and + l.column_name=r.column_name and l.DATA_PRECISION != r.DATA_PRECISION +union +select l.table_name,l.column_name,'DATA_SCALE',to_char(l.DATA_SCALE), +to_char(r.DATA_SCALE) +from &prex.diff_cols1 l, &prex.diff_cols2 r +where l.table_name=r.table_name and + l.column_name=r.column_name and l.DATA_SCALE != r.DATA_SCALE +union +select l.table_name,l.column_name,'NULLABLE',l.NULLABLE,r.NULLABLE +from &prex.diff_cols1 l, &prex.diff_cols2 r +where l.table_name=r.table_name and + l.column_name=r.column_name and l.NULLABLE != r.NULLABLE +union +select l.table_name,l.column_name,'COLUMN_ID',to_char(l.COLUMN_ID), +to_char(r.COLUMN_ID) +from &prex.diff_cols1 l, &prex.diff_cols2 r +where l.table_name=r.table_name and + l.column_name=r.column_name and l.COLUMN_ID != r.COLUMN_ID +union +select l.table_name,l.column_name,'DEFAULT_LENGTH',to_char(l.DEFAULT_LENGTH), +to_char(r.DEFAULT_LENGTH) +from &prex.diff_cols1 l, &prex.diff_cols2 r +where l.table_name=r.table_name and + l.column_name=r.column_name and l.DEFAULT_LENGTH != r.DEFAULT_LENGTH +order by 1,2 +/ + +create table &prex.common_indexes as +select table_name, index_name from user_indexes@&prex.lnk +where table_name in (select table_name from &prex.common_tables) +intersect +select table_name, INdex_name from user_indexes +where table_name in (select table_name from &prex.common_tables); +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT INDEXES MISSING IN THIS SCHEMA FOR COMMON TABLES +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select table_name, index_name from user_indexes@&prex.lnk +where table_name in (select table_name from &prex.common_tables) +minus +select table_name, index_name from &prex.common_indexes; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT INDEXES MISSING IN REMOTE SCHEMA FOR COMMON TABLES +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select table_name, index_name from user_indexes +where table_name in (select table_name from &prex.common_tables) +minus +select table_name, index_name from &prex.common_indexes; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT COMMON INDEXES WITH DIFFERENT UNIQUENESS +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select a.table_name, a.index_name, a.uniqueness local, b.uniqueness remote +from user_indexes a, + user_indexes@&prex.lnk b +where a.index_name = b.index_name +and a.uniqueness != b.uniqueness +and (a.table_name, a.index_name) in +(select table_name, index_name from &prex.common_indexes); +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT INDEX COLUMNS MISSING IN THIS SCHEMA FOR COMMON INDEXES +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select index_name, column_name from user_ind_columns@&prex.lnk +where (table_name,index_name) in +(select table_name,index_name from &prex.common_indexes) +minus +select index_name, column_name from user_ind_columns +where (table_name,index_name) in +(select table_name,index_name from &prex.common_indexes); +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT INDEX COLUMNS MISSING IN REMOTE SCHEMA FOR COMMON INDEXES +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select index_name, column_name from user_ind_columns +where (table_name,index_name) in +(select table_name,index_name from &prex.common_indexes) +minus +select index_name, column_name from user_ind_columns@&prex.lnk +where (table_name,index_name) in +(select table_name,index_name from &prex.common_indexes); +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT INDEX COLUMNS POSITIONED DIFFERENTLY FOR COMMON INDEXES +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select a.index_name, a.column_name, a.column_position local, + b.column_position remote + from user_ind_columns a, + user_ind_columns@&prex.lnk b +where (a.table_name,a.index_name) in +(select table_name,index_name from &prex.common_indexes) +and b.index_name = a.index_name +and b.table_name = a.table_name +and a.column_name = b.column_name +and a.column_position != b.column_position; + +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT CONSTRAINTS MISSING IN THIS SCHEMA FOR COMMON TABLES +PROMPT (WORKS ONLY FOR CONSTRAINT WITH NON SYSTEM GENERATED NAMES) +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select table_name,constraint_name from user_constraints@&prex.lnk +where constraint_name not like 'SYS%' and table_name in +(select table_name from &prex.common_tables) +minus +select table_name,constraint_name from user_constraints +where constraint_name not like 'SYS%' and table_name in +(select table_name from &prex.common_tables); +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT CONSTRAINTS MISSING IN REMOTE SCHEMA FOR COMMON TABLES +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select table_name,constraint_name from user_constraints +where constraint_name not like 'SYS%' and table_name in +(select table_name from &prex.common_tables) +minus +select table_name,constraint_name from user_constraints@&prex.lnk +where constraint_name not like 'SYS%' and table_name in +(select table_name from &prex.common_tables); +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT COMMON CONSTRAINTS, TYPE MISMATCH +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select a.constraint_name,a.constraint_type local_type, +b.constraint_type remote_type +from user_constraints a, user_constraints@&prex.lnk b where +a.table_name = b.table_name and +a.constraint_name=b.constraint_name and +a.constraint_type !=b.constraint_type; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT COMMON CONSTRAINTS, TABLE MISMATCH +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select a.constraint_name,a.table_name,b.table_name from +user_constraints a, user_constraints@&prex.lnk b, +(select z.constraint_name from +(select constraint_name, table_name from useR_constraints union +select constraint_name, table_name from user_constraints@&prex.lnk) z +group by constraint_name having count(*) >1) q +where a.constraint_name = q.constraint_name and +b.constraint_name=q.constraint_name +and a.table_name != b.table_name; +create table &prex.comcons as +select constraint_name, constraint_type, table_name +from useR_constraints +intersect +select constraint_name, constraint_type, table_name +from user_constraints@&prex.lnk; +delete from &prex.comcons where constraint_name in +(select constraint_name from &prex.comcons +group by constraint_name having count(*) > 1); +delete from &prex.comcons where constraint_name like 'SYS%'; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT DIFFERENCES IN COLUMN USAGE FOR CONSTRAINT DEFS +PROMPT (Unique key, Primary Key, Foreign key) +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +declare +cursor c1 is +select a.constraint_name,a.position,a.column_name,b.constraint_type +from user_cons_columns a, &prex.comcons b +where a.constraint_name=b.constraint_name +union +select a.constraint_name,a.position,a.column_name,b.constraint_type +from user_cons_columns@&prex.lnk a, &prex.comcons b +where a.constraint_name=b.constraint_name +minus +(select a.constraint_name,a.position,a.column_name,b.constraint_type + from user_cons_columns a, &prex.comcons b + where a.constraint_name=b.constraint_name +intersect +select a.constraint_name,a.position,a.column_name,b.constraint_type + from user_cons_columns@&prex.lnk a, &prex.comcons b + where a.constraint_name=b.constraint_name +); +i binary_integer; +begin +for c in c1 loop + dbms_output.put_line('COLUMN USAGE DIFFERENCE FOR '||c.constraint_type|| + ' CONSTRAINT '||c.constraint_name); + dbms_output.put_line('. Local columns:'); + i:=1; + for c2 in (select column_name col + from user_cons_columns + where constraint_name=c.constraint_name order by position) + loop + dbms_output.put_line('. '||c2.col); + end loop; + i:=1; + dbms_output.put_line('. Remote columns:'); + for c3 in (select column_name col + from user_cons_columns@&prex.lnk + where constraint_name=c.constraint_name + ) + loop + dbms_output.put_line('. '||c3.col); + end loop; +end loop; +end; +/ +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT DIFFERENCES IN CHECK CONSTRAINT DEFS +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +set serveroutput on +declare +cursor c1 is select constraint_name,constraint_type,table_name +from &prex.comcons where constraint_type='C'; +cons varchar2(50); +tab1 varchar2(50); +tab2 varchar2(50); +search1 varchar2(32000); +search2 varchar2(32000); +begin +dbms_output.enable(100000); +for c in c1 loop + select search_condition into search1 from user_constraints + where constraint_name=c.constraint_name; + select search_condition into search2 from user_constraints@&prex.lnk + where constraint_name=c.constraint_name; + if search1 != search2 then + dbms_output.put_line('Check constraint '||c.constraint_name|| + ' defined differently!'); + dbms_output.put_line('. Local definition:'); + dbms_output.put_line('. '||search1); + dbms_output.put_line('. Remote definition:'); + dbms_output.put_line('. '||search2); + end if; +end loop; +end; +/ +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT TRIGGERS MISSING IN REMOTE SCHEMA +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select trigger_name from user_Triggers minus +select trigger_name from user_Triggers@&prex.lnk; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT TRIGGERS MISSING IN THIS SCHEMA +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select trigger_name from user_Triggers minus +select trigger_name from user_Triggers@&prex.lnk; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT TRIGGER DEFINITION DIFFERENCES ON COMMON TRIGGERS +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +set serveroutput on +declare +cursor c1 is select +TRIGGER_NAME,TRIGGER_TYPE,TRIGGERING_EVENT, +TABLE_NAME,REFERENCING_NAMES,rtrim(WHEN_CLAUSE,' '),STATUS, +rtrim(replace(description,'"&thisuser".',null),' ') DESCRIPTION, +TRIGGER_BODY from user_Triggers; +nam1 varchar2(30); +type1 varchar2(16); +event1 varchar2(26); +table1 varchar2(30); +ref1 varchar2(87); +when1 varchar2(2000); +status1 varchar2(8); +desc1 varchar2(2000); +body1 varchar2(32000); +type2 varchar2(16); +event2 varchar2(26); +table2 varchar2(30); +ref2 varchar2(87); +when2 varchar2(2000); +status2 varchar2(8); +desc2 varchar2(2000); +body2 varchar2(32000); +pr_head boolean; +begin +dbms_output.enable(100000); +open c1; +loop + fetch c1 into nam1,type1,event1,table1,ref1,when1,status1,desc1,body1; + exit when c1%notfound; + begin + select + TRIGGER_TYPE,TRIGGERING_EVENT, + TABLE_NAME,REFERENCING_NAMES,rtrim(WHEN_CLAUSE,' '),STATUS, + rtrim(replace(description,upper('"&remoteschema".'),null),' ') DESCRIPTION, + TRIGGER_BODY + into type2,event2,table2,ref2,when2,status2,desc2,body2 + from user_Triggers@&prex.lnk + where trigger_name=nam1; + pr_head := FALSE; + if table1 != table2 then + dbms_output.put_line('T R I G G E R : '||nam1); + dbms_output.put_line('-------------------------------------------------'|| + '-----------------------'); + pr_head := TRUE; + dbms_output.put_line(' '); + dbms_output.put_line('DEFINED ON DIFFERENT TABLES!'); + dbms_output.put_line('. This table_name : '||table1); + dbms_output.put_line('. Remote table_name: '||table2); + end if; + if event1 != event2 then + if not pr_head then + dbms_output.put_line('T R I G G E R : '||nam1); + dbms_output.put_line('-------------------------------------------------'|| + '-----------------------'); + pr_head := TRUE; + end if; + dbms_output.put_line(' '); + dbms_output.put_line('DEFINED FOR DIFFERENT EVENTS!'); + dbms_output.put_line('. This event: '||event1); + dbms_output.put_line('. Remote event: '||event2); + end if; + if type1 != type2 then + if not pr_head then + dbms_output.put_line('T R I G G E R : '||nam1); + dbms_output.put_line('-------------------------------------------------'|| + '-----------------------'); + pr_head := TRUE; + end if; + dbms_output.put_line(' '); + dbms_output.put_line('DIFFERENT TYPES!'); + dbms_output.put_line('. This type: '||type1); + dbms_output.put_line('. Remote: '||type2); + end if; + if ref1 != ref2 then + if not pr_head then + dbms_output.put_line('T R I G G E R : '||nam1); + dbms_output.put_line('-------------------------------------------------'|| + '-----------------------'); + pr_head := TRUE; + end if; + dbms_output.put_line(' '); + dbms_output.put_line('DIFFERENT REFERENCES!'); + dbms_output.put_line('. This ref: '||ref1); + dbms_output.put_line('. Remote: '||ref2); + end if; + if when1 != when2 then + dbms_output.put_line(' '); + if not pr_head then + dbms_output.put_line('T R I G G E R : '||nam1); + dbms_output.put_line('-------------------------------------------------'|| + '-----------------------'); + pr_head := TRUE; + end if; + dbms_output.put_line('DIFFERENT WHEN CLAUSES!'); + dbms_output.put_line('. Local when_clause:'); + dbms_output.put_line(when1); + dbms_output.put_line('. Remote when_clause: '); + dbms_output.put_line(when2); + end if; + if status1 != status2 then + dbms_output.put_line(' '); + dbms_output.put_line('DIFFERENT STATUS!'); + dbms_output.put_line('. Local status: '||status1); + dbms_output.put_line('. Remote status: '||status2); + end if; + if replace(desc1,chr(10),'') != replace(desc2,chr(10),'') then + dbms_output.put_line(' '); + dbms_output.put_line('DIFFERENT DESCRIPTIONS!'); + dbms_output.put_line('Local definition: '); + dbms_output.put_line(desc1); + dbms_output.put_line('Remote definition: '); + dbms_output.put_line(desc2); + end if; + if body1 != body2 then + dbms_output.put_line(' '); + dbms_output.put_line('THE PL/SQL BLOCKS ARE DIFFERENT! '); + dbms_output.put_line(' '); + end if; + exception when NO_DATA_FOUND then null; + when others then raise_application_error(-20010,SQLERRM); + end; +end loop; +end; +/ +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT MISSING PROCEDURES/PACKAGES/FUNCTIONS IN REMOTE SCHEMA +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select distinct name,type from user_source minus +select distinct name,type from user_source@&prex.lnk; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT MISSING PROCEDURES/PACKAGES/FUNCTIONS IN LOCAL SCHEMA +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select distinct name,type from user_source@&prex.lnk minus +select distinct name,type from user_source; +create table &prex.comcod as +select distinct name,type from user_source intersect +select distinct name,type from user_source@&prex.lnk; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT PROCEDURES/PACKAGES/FUNCTIONS WITH DIFFERENT DEFINITIONS +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select distinct q.name Object_name,q.type Object_type from +(select a.name,a.type,a.line,a.text + from user_source a, &prex.comcod b + where a.name=b.name union +select a.name,a.type,a.line,a.text + from user_source@&prex.lnk a, &prex.comcod b +where a.name=b.name +minus +(select a.name,a.type,a.line,a.text + from user_source a, &prex.comcod b + where a.name=b.name + intersect +select a.name,a.type,a.line,a.text + from user_source@&prex.lnk a, &prex.comcod b + where a.name=b.name )) q; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT VIEWS MISSING IN THIS SCHEMA: +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +create table &prex.common_views as +select view_name from user_views@&prex.lnk +intersect +select view_name from user_views; +select view_name from user_views@&prex.lnk +minus +select view_name from &prex.common_views; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT VIEWS MISSING IN REMOTE SCHEMA: +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select view_name from user_views +minus +select view_name from user_views@&prex.lnk; +PROMPT +PROMPT +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +PROMPT VIEWS WITH DIFFERENCES IN THE DEFINITION +PROMPT ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +declare +def1 varchar2(32000); +def2 varchar2(32000); +len1 number; +len2 number; +i number; +cursor c1 is select view_name from &prex.common_views; +begin +dbms_output.enable(100000); +for c in c1 loop + select text,text_length into def1,len1 + from user_Views where view_name=c.view_name; + select text,text_length into def2,len2 + from user_Views@&prex.lnk where view_name=c.view_name; + i := 1; + def1:=replace(def1,' ',''); + def2:=replace(def2,' ',''); + if def1 != def2 or length(def1) != length(def2) then + dbms_output.put_line(lpad('-',35+length(c.view_name),'-')); + dbms_output.put_line('| '||c.view_name || + ' |'); + dbms_output.put_line(lpad('-',35+length(c.view_name),'-')); + dbms_output.put_line('Local text_length: ' || to_char(len1)); + dbms_output.put_line('Remote text_length): ' || to_char(len2)); + dbms_output.put_line(' '); + i := 1; + while i <= length(def1) loop + if substr(def1,i,240) != substr(def2,i,240) then + dbms_output.put_line('Difference at offset ' || to_char(i) +); + dbms_output.put_line(' local: ' || substr(def1,i,240)); + dbms_output.put_line(' remote: ' || substr(def2,i,240)); + end if; + i := i + 240; + end loop; + end if; + if length(def2) > length(def1) then + dbms_output.put_line('Remote longer than Local. Next 255 bytes: '); + dbms_output.put_line(substr(def2,length(def1),255)); + end if; +end loop; +end; +/ +drop database link &prex.lnk; +drop table &prex.comcod; +drop table &prex.diff_cols1; +drop table &prex.diff_cols2; +drop table &prex.common_tables; +drop table &prex.common_views; +drop table &prex.ind; +drop table &prex.ind1; +drop table &prex.ind2; +drop table &prex.comcons; +spool off +set verify on +set feedback on +undef prex +undef prefx +undef a +undef thisuser +undef b +undef REMOTESCHEMA +undef REMOTEPASSW +undef connstring +undef c +undef todaysdate + diff --git a/vdh/constraint_info.sql b/vdh/constraint_info.sql new file mode 100644 index 0000000..a778406 --- /dev/null +++ b/vdh/constraint_info.sql @@ -0,0 +1,26 @@ +set verify off + +set linesize 300 +set long 30 + +column constraint_name format a30 +column constraint_type format a2 heading CT +column column_name format a30 +column position format 99 heading CP +column r_owner format a30 +column r_constraint_name format a30 + +break on constraint_name skip 1 on constraint_type + +select con.constraint_name, con.constraint_type, con.status, con.r_owner, con.r_constraint_name, + col.column_name, col.position, con.search_condition +from dba_constraints con, + dba_cons_columns col +where col.owner = con.owner + and col.constraint_name = con.constraint_name + and con.owner = '&T_OWNER' + and con.table_name = '&T_NAME' +order by con.constraint_name, col.position; + + +clear breaks diff --git a/vdh/cpu_table.sh b/vdh/cpu_table.sh new file mode 100644 index 0000000..7953932 --- /dev/null +++ b/vdh/cpu_table.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +gawk ' +BEGIN { + FS = ":" + printf "%5-s %6-s %4-s\n", "OS ID", "Socket", "Core" + printf "%5-s %6-s %4-s\n", "-----", "------", "----" +} +{ + if ($1 ~ /processor/) { + PROC = $2 + } else if ($1 ~ /physical id/) { + PHYID = $2 + } else if ($1 ~ /core id/) { + CID = $2 + printf "%5s %6s %4s\n", PROC, PHYID, CID + } +}' /proc/cpuinfo diff --git a/vdh/create_display_raw.sql b/vdh/create_display_raw.sql new file mode 100644 index 0000000..b3c615b --- /dev/null +++ b/vdh/create_display_raw.sql @@ -0,0 +1,35 @@ +create or replace function enkitec.display_raw (rawval raw, type varchar2) +return varchar2 +is + cn number; + cv varchar2(32); + cd date; + cnv nvarchar2(32); + cr rowid; + cc char(32); +begin +-- Greg Rahn's display_raw script + if (type = 'NUMBER') then + dbms_stats.convert_raw_value(rawval, cn); + return to_char(cn); + elsif (type = 'VARCHAR2') then + dbms_stats.convert_raw_value(rawval, cv); + return to_char(cv); + elsif (type = 'DATE') then + dbms_stats.convert_raw_value(rawval, cd); + return to_char(cd,'dd-mon-yyyy'); + elsif (type = 'NVARCHAR2') then + dbms_stats.convert_raw_value(rawval, cnv); + return to_char(cnv); + elsif (type = 'ROWID') then + dbms_stats.convert_raw_value(rawval, cr); + return to_char(cnv); + elsif (type = 'CHAR') then + dbms_stats.convert_raw_value(rawval, cc); + return to_char(cc); + else + return 'UNKNOWN DATATYPE'; + end if; +end; +/ + diff --git a/vdh/create_sql_profile.sql b/vdh/create_sql_profile.sql new file mode 100644 index 0000000..1cd02d7 --- /dev/null +++ b/vdh/create_sql_profile.sql @@ -0,0 +1,116 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: create_sql_profile.sql +-- +-- Purpose: Create SQL Profile based on Outline hints in V$SQL.OTHER_XML. +-- +-- Author: Kerry Osborne +-- +-- Usage: This scripts prompts for four values. +-- +-- sql_id: the sql_id of the statement to attach the profile to (must be in the shared pool) +-- +-- child_no: the child_no of the statement from v$sql +-- +-- profile_name: the name of the profile to be generated +-- +-- category: the name of the category for the profile +-- +-- force_macthing: a toggle to turn on or off the force_matching feature +-- +-- Description: +-- +-- Based on a script by Randolf Giest. +-- +-- Mods: This is the 2nd version of this script which removes dependency on rg_sqlprof1.sql. +-- +-- See kerryosborne.oracle-guy.com for additional information. +--------------------------------------------------------------------------------------- +-- + +-- @rg_sqlprof1 '&&sql_id' &&child_no '&&category' '&force_matching' + +set feedback off +set sqlblanklines on + +accept sql_id - + prompt 'Enter value for sql_id: ' - + default 'X0X0X0X0' +accept child_no - + prompt 'Enter value for child_no (0): ' - + default '0' +accept profile_name - + prompt 'Enter value for profile_name (PROF_sqlid_planhash): ' - + default 'X0X0X0X0' +accept category - + prompt 'Enter value for category (DEFAULT): ' - + default 'DEFAULT' +accept force_matching - + prompt 'Enter value for force_matching (FALSE): ' - + default 'false' + +declare +ar_profile_hints sys.sqlprof_attr; +cl_sql_text clob; +l_profile_name varchar2(30); +begin +select +extractvalue(value(d), '/hint') as outline_hints +bulk collect +into +ar_profile_hints +from +xmltable('/*/outline_data/hint' +passing ( +select +xmltype(other_xml) as xmlval +from +v$sql_plan +where +sql_id = '&&sql_id' +and child_number = &&child_no +and other_xml is not null +) +) d; + +select +sql_fulltext, +decode('&&profile_name','X0X0X0X0','PROF_&&sql_id'||'_'||plan_hash_value,'&&profile_name') +into +cl_sql_text, l_profile_name +from +v$sql +where +sql_id = '&&sql_id' +and child_number = &&child_no; + +dbms_sqltune.import_sql_profile( +sql_text => cl_sql_text, +profile => ar_profile_hints, +category => '&&category', +name => l_profile_name, +force_match => &&force_matching +-- replace => true +); + + dbms_output.put_line(' '); + dbms_output.put_line('SQL Profile '||l_profile_name||' created.'); + dbms_output.put_line(' '); + +exception +when NO_DATA_FOUND then + dbms_output.put_line(' '); + dbms_output.put_line('ERROR: sql_id: '||'&&sql_id'||' Child: '||'&&child_no'||' not found in v$sql.'); + dbms_output.put_line(' '); + +end; +/ + +undef sql_id +undef child_no +undef profile_name +undef category +undef force_matching + +set sqlblanklines off +set feedback on diff --git a/vdh/create_tablespaces.sql b/vdh/create_tablespaces.sql new file mode 100644 index 0000000..f66b273 --- /dev/null +++ b/vdh/create_tablespaces.sql @@ -0,0 +1,23 @@ +create tablespace test_small +datafile 'c:\oracle\oradata\vdev1\test\test_small01.dbf' +size 71744K +extent management local uniform size 64K +/ + +create tablespace test_medium +datafile 'c:\oracle\oradata\vdev1\test\test_medium01.dbf' +size 102464K +extent management local uniform size 512K +/ + +create tablespace tools_small +datafile 'c:\oracle\oradata\vdev1\tools\tools_small01.dbf' +size 71744K +extent management local uniform size 64K +/ + +create tablespace tools_medium +datafile 'c:\oracle\oradata\vdev1\tools\tools_medium01.dbf' +size 102464K +extent management local uniform size 512K +/ diff --git a/vdh/create_user.sql b/vdh/create_user.sql new file mode 100644 index 0000000..4531c76 --- /dev/null +++ b/vdh/create_user.sql @@ -0,0 +1,25 @@ +set verify off + +accept l_user char prompt 'username: ' +accept l_pass char prompt 'password: ' +accept l_tablespace char prompt 'tablespace: ' +accept l_quota number prompt 'quota (in MB) on tablespace: ' +accept l_temp_tablespace char prompt 'temporary tablespace: ' + + +create user &&l_user identified by &l_pass + default tablespace &&l_tablespace + temporary tablespace &&l_temp_tablespace + quota &&l_quota.M ON &&l_tablespace +/ + +grant create session to &&l_user; +grant create table to &&l_user; +grant create view to &&l_user; +grant create trigger to &&l_user; +grant create procedure to &&l_user; +grant create type to &&l_user; +grant create sequence to &&l_user; +grant create synonym to &&l_user; +grant query rewrite to &&l_user; +exit; diff --git a/vdh/db_cache_advice.sql b/vdh/db_cache_advice.sql new file mode 100644 index 0000000..d8d8d50 --- /dev/null +++ b/vdh/db_cache_advice.sql @@ -0,0 +1,63 @@ +set linesize 250 +set pages 50000 + +column block_size format a10 heading "Block Size" +column instance format a15 heading "Instance" +column size_for_estimate format 9G999G990D99 heading "Cache Size (MB)" +column estd_physical_read_factor format 990D999 heading "Factor" +column estd_physical_reads format 99G999G999G999G990 heading "Est Phys Reads" +column estd_phys_reads_delta format 999G999G999G990 heading "Est Phys Reads Del" +column estd_cluster_reads format 99G999G999G999G990 heading "Est Clust Reads" +column estd_cls_reads_delta format 999G999G999G990 heading "Est Clust Reads Del" +column estd_physical_read_time format 9G999G999G990 heading "Est Phys Read Time" +column estd_phys_read_time_delta format 9G999G999G990 heading "Est Phys Read Time Del" +column estd_pct_of_db_time_for_reads format 9990D99 heading "Est % read" +column estd_cluster_read_time format 9G999G999G990 heading "Est Clust Read Time" +column estd_cls_read_time_delta format 9G999G999G990 heading "Est Clust Read Time Del" + +break on name skip 2 on block_size on instance skip 1 + +with current_size as +( select + inst_id, + block_size, + estd_physical_reads, + estd_physical_read_time, + estd_cluster_reads, + estd_cluster_read_time + from + gv$db_cache_advice + where + advice_status = 'ON' + and estd_physical_read_factor = 1 +) +select + ca.block_size || decode(name, 'DEFAULT', ' (*)') block_size, + ca.inst_id || ' (' || to_char(inst.startup_time, 'DD/MM/YYYY') || ')' instance, + ca.size_for_estimate, + ca.estd_physical_read_factor, + ca.estd_pct_of_db_time_for_reads, + ca.estd_physical_reads, + (ca.estd_physical_reads - cs.estd_physical_reads) estd_phys_reads_delta, + ca.estd_physical_read_time, + ( ca.estd_physical_read_time - cs.estd_physical_read_time) estd_phys_read_time_delta, + ca.estd_cluster_reads, + (ca.estd_cluster_reads - cs.estd_cluster_reads) estd_cls_reads_delta, + ca.estd_cluster_read_time, + ( ca.estd_cluster_read_time - cs.estd_cluster_read_time) estd_cls_read_time_delta +from + gv$db_cache_advice ca, + current_size cs, + gv$instance inst +where + ca.block_size = cs.block_size + and ca.inst_id = cs.inst_id + and inst.inst_id = ca.inst_id + and ca.advice_status = 'ON' +order by + ca.block_size, + ca.inst_id, + ca.size_for_estimate +; + +clear breaks diff --git a/vdh/db_info.sql b/vdh/db_info.sql new file mode 100644 index 0000000..a01d0cb --- /dev/null +++ b/vdh/db_info.sql @@ -0,0 +1,282 @@ +/* run this script as a dba user + + on the db server, from the directory where this script is stored: + + set ORACLE_SID= + sqlplus "/ as sysdba" + @db_info.sql + exit + + this will generate a logfile in the current directory + +*/ + + +set pagesize 9999 +set linesize 150 +set serveroutput on +set trimspool on +set echo off +set feedback off + +spool &1 + +--------------------------------------------- DB ---------------------------------------------------------------------- + +column db_unique_name format a15 +column platform_name format a20 +column host_name format a30 +column name format a10 +column log_mode format a15 +column force_logging format a3 heading FL +column protection_mode format a25 +column protection_level format a25 +column flashback_on format a3 heading FO + +select name, log_mode, force_logging, protection_level, protection_mode, database_role +from v$database; + +--------------------------------------------- DB PARAMETERS ------------------------------------------------------------ +set linesize 180 +set pagesize 9999 +COLUMN display_value FORMAT a15 word_wrapped +COLUMN value FORMAT a75 word_wrapped +COLUMN name FORMAT a35 +column type format 999 + +select x.inst_id inst_id,ksppinm name,ksppity type, + ksppstvl value, ksppstdf isdefault +from x$ksppi x, x$ksppcv y +where (x.indx = y.indx) + and ( ksppstdf = 'FALSE' + and translate(ksppinm,'_','#') not like '##%' + or (ksppstdf = 'FALSE' and translate(ksppinm,'_','#') like '#%' and translate(ksppinm,'_','#') not like '##%') + ) +order by x.inst_id, ksppinm; + +column property_value format a40 + +select property_name, property_value +from database_properties +order by property_name; + +--------------------------------------------- INSTALLED OPTIONS -------------------------------------------------------- + +column comp_name format a50 + +select comp_name, version, status +from dba_registry +order by comp_name; + +--------------------------------------------- DB SIZES ------------------------------------------------------------------ + +column name format a25 heading "tablespace name" +column space_mb format 99g999g990D99 heading "curr df mbytes" +column maxspace_mb format 99g999g990D99 heading "max df mbytes" +column used format 99g999g990D99 heading "used mbytes" +column df_free format 99g999g990D99 heading "curr df free mbytes" +column maxdf_free format 99g999g990D99 heading "max df free mbytes" +column pct_free format 990D99 heading "% free" +column pct_maxfile_free format 990D99 heading "% maxfile free" + +break on report + +compute sum of space_mb on report +compute sum of maxspace_mb on report +compute sum of df_free on report +compute sum of maxdf_free on report +compute sum of used on report + +prompt +prompt DB - Sizes +prompt __________ + +select df.tablespace_name name, df.space space_mb, df.maxspace maxspace_mb, (df.space - nvl(fs.freespace,0)) used, + nvl(fs.freespace,0) df_free, (nvl(fs.freespace,0) + df.maxspace - df.space) maxdf_free, + 100 * (nvl(fs.freespace,0) / df.space) pct_free, + 100 * ((nvl(fs.freespace,0) + df.maxspace - df.space) / df.maxspace) pct_maxfile_free +from ( select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_data_files + group by tablespace_name + ) df, + ( select tablespace_name, sum(bytes)/1024/1024 freespace + from dba_free_space + group by tablespace_name + ) fs +where df.tablespace_name = fs.tablespace_name(+) +order by name; + +clear breaks + + +--------------------------------------------- TABLESPACE INFO -------------------------------------------------------------- + +prompt +prompt tablespace info +prompt _______________ + +column max_mb format 9G999G990D99 +column curr_mb format 9G999G990D99 +column free_mb format 9G999G990D99 +column pct_free format 900D99 heading "%FREE" +column NE format 999999D99 +column SSM format a6 +column AT format a8 +column tablespace_name format a20 +column EM format a10 +column contents format a15 +column block_size format 99999 heading bsize + +select A.tablespace_name, block_size, A.contents, extent_management EM, allocation_type AT, + segment_space_management ssm, decode(allocation_type, 'UNIFORM',next_extent/1024,'') NE, + B.max_mb, B.curr_mb, + (B.max_mb - B.curr_mb) + nvl(c.free_mb,0) free_mb, + ((100/B.max_mb)*(B.max_mb - B.curr_mb + nvl(c.free_mb,0))) pct_free +from dba_tablespaces A, + ( select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_temp_files + group by tablespace_name + ) B, + ( select tablespace_name, sum(bytes)/1024/1024 free_mb + from dba_free_space + group by tablespace_name + ) C +where A.tablespace_name = B.tablespace_name + and A.tablespace_name = C.tablespace_name(+) +order by tablespace_name; + +--------------------------------------------- DF DETAILS ------------------------------------------------------------------ + +column curr_mb format 9G999G990D99 +column max_mb format 9G9999990D99 +column incr_mb format 9G999G990D99 +column file_name format a70 +--column file_name format a60 +column tablespace_name format a20 +break on tablespace_name skip 1 +set linesize 150 +set pagesize 999 + +prompt +prompt datafiles info +prompt ______________ + +select A.tablespace_name, file_id, file_name, bytes/1024/1024 curr_mb, autoextensible, + maxbytes/1024/1024 max_mb, (increment_by * block_size)/1024/1024 incr_mb +from ( select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_data_files + union all + select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_temp_files + ) A, dba_tablespaces B +where A.tablespace_name = B.tablespace_name +order by A.tablespace_name, file_name; + +clear breaks; + +--------------------------------------------- ONLINE REDO INFO ---------------------------------------------------------------- + +column member format a65 +column type format a10 +column status format a15 +column arch format a4 + +break on type on thread# nodup skip 1 on type nodup on GROUP# nodup + +prompt +prompt online redo info +prompt ________________ + +select type, A.thread#, A.group#, B.member, A.bytes/1024/1024 mb,A.status, arch +from ( select group#, thread#, bytes, status, archived arch + from v$log + union all + select group#, thread#, bytes, status, archived arch + from v$standby_log + ) A, v$logfile B +where A.group# = B.group# +order by type, A.thread#, A.group#, B.member; + +clear breaks + + +--------------------------------------------- REDO SIZES ------------------------------------------------------------------ + + +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +prompt +prompt redo sizes +prompt __________ + +column start_day format a22 +column end_day format a22 +column days_between format 99 +column avg_archived_per_day format a13 heading avg_gen + +select to_char(min(dag), 'DD/MM/YYYY HH24:MI:SS') start_day, to_char(max(dag) + 1 - 1/(24*60*60), 'DD/MM/YYYY HH24:MI:SS') end_day, + (max(dag) - min(dag) + 1) days_between, + to_char(avg(gen_archived_size),'9G999G999D99') avg_archived_per_day +from ( select trunc(completion_time) dag, sum(blocks * block_size)/1024/1024 gen_archived_size + from v$archived_log + where standby_dest = 'NO' + and months_between(trunc(sysdate), trunc(completion_time)) <= 1 + and completion_time < trunc(sysdate) + group by trunc(completion_time) + ); + +/* +archived redo over the (max) last 10 days +*/ +column day_arch_size format 99G999D99 +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +select to_char(day, 'DD/MM/YYYY') day, to_char(day,'DAY') dayname, day_arch_size, day_arch#, graph +from ( select trunc(completion_time) day, sum(blocks * block_size)/1024/1024 day_arch_size, count(*) day_arch#, + rpad('*',floor(count(*)/10),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 10 + group by trunc(completion_time) + order by day + ); + +/* +archived redo per hour over the (max) last 2 days +*/ +column hour_arch_size format 99G999D99 +column hour_arch# format 9G999 +column graph format a15 +column dayname format a12 +column dayhour format a18 +break on dayname skip 1 + +select to_char(dayhour,'DAY') dayname, to_char(dayhour, 'DD/MM/YYYY HH24:MI') dayhour, hour_arch_size, hour_arch#, graph +from ( select trunc(completion_time, 'HH') dayhour, sum(blocks * block_size)/1024/1024 hour_arch_size, count(*) hour_arch#, + rpad('*',floor(count(*)/4),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 2 + group by trunc(completion_time, 'HH') + order by dayhour + ); + +clear breaks; + +spool off + +exit \ No newline at end of file diff --git a/vdh/db_info2.sql b/vdh/db_info2.sql new file mode 100644 index 0000000..af3b3c9 --- /dev/null +++ b/vdh/db_info2.sql @@ -0,0 +1,267 @@ +/* run this script as a dba user + + on the db server, from the directory where this script is stored: + + set ORACLE_SID= + sqlplus "/ as sysdba" + @db_info.sql + exit + + this will generate a logfile (db_info.txt) in the current directory + +*/ + + +set pagesize 9999 +set linesize 150 +set serveroutput on +set trimspool on +set echo off +set feedback off + +spool &1.txt + +--------------------------------------------- DB ---------------------------------------------------------------------- + +column platform_name format a40 +column name format a15 +column db_unique_name format a20 + +select name, db_unique_name, platform_name, flashback_on, log_mode +from v$database; + +--------------------------------------------- DB PARAMETERS ------------------------------------------------------------ +set linesize 180 +set pagesize 9999 +COLUMN display_value FORMAT a15 word_wrapped +COLUMN value FORMAT a75 word_wrapped +COLUMN name FORMAT a35 + +select x.inst_id inst_id,ksppinm name,ksppity type, + ksppstvl value, ksppstdf isdefault +from x$ksppi x, x$ksppcv y +where (x.indx = y.indx) + and ( ksppstdf = 'FALSE' + or translate(ksppinm,'_','#') like '##%' + -- or translate(ksppinm,'_','#') like '#%' + ) +order by x.inst_id, ksppinm; + +--------------------------------------------- INSTALLED OPTIONS -------------------------------------------------------- + +column comp_name format a50 + +select comp_name, version, status +from dba_registry +order by comp_name; + +--------------------------------------------- DB SIZES ------------------------------------------------------------------ + +column name format a25 heading "tablespace name" +column space_mb format 99g999g990D99 heading "curr df mbytes" +column maxspace_mb format 99g999g990D99 heading "max df mbytes" +column used format 99g999g990D99 heading "used mbytes" +column df_free format 99g999g990D99 heading "curr df free mbytes" +column maxdf_free format 99g999g990D99 heading "max df free mbytes" +column pct_free format 990D99 heading "% free" +column pct_maxfile_free format 990D99 heading "% maxfile free" + +break on report + +compute sum of space_mb on report +compute sum of maxspace_mb on report +compute sum of df_free on report +compute sum of maxdf_free on report +compute sum of used on report + +prompt +prompt DB - Sizes +prompt __________ + +select df.tablespace_name name, df.space space_mb, df.maxspace maxspace_mb, (df.space - nvl(fs.freespace,0)) used, + nvl(fs.freespace,0) df_free, (nvl(fs.freespace,0) + df.maxspace - df.space) maxdf_free, + 100 * (nvl(fs.freespace,0) / df.space) pct_free, + 100 * ((nvl(fs.freespace,0) + df.maxspace - df.space) / df.maxspace) pct_maxfile_free +from ( select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_data_files + group by tablespace_name + ) df, + ( select tablespace_name, sum(bytes)/1024/1024 freespace + from dba_free_space + group by tablespace_name + ) fs +where df.tablespace_name = fs.tablespace_name(+) +order by name; + +clear breaks + + +--------------------------------------------- TABLESPACE INFO -------------------------------------------------------------- + +prompt +prompt tablespace info +prompt _______________ + +column max_mb format 9G999G990D99 +column curr_mb format 9G999G990D99 +column free_mb format 9G999G990D99 +column pct_free format 900D99 heading "%FREE" +column NE format 999999D99 +column SSM format a6 +column AT format a8 +column tablespace_name format a20 +column EM format a10 +column contents format a15 +column block_size format 99999 heading bsize + +select A.tablespace_name, block_size, A.contents, extent_management EM, allocation_type AT, + segment_space_management ssm, decode(allocation_type, 'UNIFORM',next_extent/1024,'') NE, + B.max_mb, B.curr_mb, + (B.max_mb - B.curr_mb) + nvl(c.free_mb,0) free_mb, + ((100/B.max_mb)*(B.max_mb - B.curr_mb + nvl(c.free_mb,0))) pct_free +from dba_tablespaces A, + ( select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_temp_files + group by tablespace_name + ) B, + ( select tablespace_name, sum(bytes)/1024/1024 free_mb + from dba_free_space + group by tablespace_name + ) C +where A.tablespace_name = B.tablespace_name + and A.tablespace_name = C.tablespace_name(+) +order by tablespace_name; + +--------------------------------------------- DF DETAILS ------------------------------------------------------------------ + +column curr_mb format 9G999G990D99 +column max_mb format 9G9999990D99 +column incr_mb format 9G999G990D99 +column file_name format a70 +--column file_name format a60 +column tablespace_name format a20 +break on tablespace_name skip 1 +set linesize 150 +set pagesize 999 + +prompt +prompt datafiles info +prompt ______________ + +select A.tablespace_name, file_id, file_name, bytes/1024/1024 curr_mb, autoextensible, + maxbytes/1024/1024 max_mb, (increment_by * block_size)/1024/1024 incr_mb +from ( select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_data_files + union all + select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_temp_files + ) A, dba_tablespaces B +where A.tablespace_name = B.tablespace_name +order by A.tablespace_name, file_name; + +clear breaks; + +--------------------------------------------- ONLINE REDO INFO ---------------------------------------------------------------- + +column member format a55 +column type format a10 +column status format a20 +column arch format a4 + +break on type on thread# nodup skip 1 on type nodup on GROUP# nodup + +prompt +prompt online redo info +prompt ________________ + +select type, A.thread#, A.group#, B.member, A.bytes/1024/1024 mb,A.status, arch +from ( select group#, thread#, bytes, status, archived arch + from v$log + union all + select group#, thread#, bytes, status, archived arch + from v$standby_log + ) A, v$logfile B +where A.group# = B.group# +order by type, A.thread#, A.group#, B.member; + +clear breaks + + +--------------------------------------------- REDO SIZES ------------------------------------------------------------------ + + +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +prompt +prompt redo sizes +prompt __________ + +column start_day format a22 +column end_day format a22 +column days_between format 99 +column avg_archived_per_day format a13 heading avg_gen + +select to_char(min(dag), 'DD/MM/YYYY HH24:MI:SS') start_day, to_char(max(dag) + 1 - 1/(24*60*60), 'DD/MM/YYYY HH24:MI:SS') end_day, + (max(dag) - min(dag) + 1) days_between, + to_char(avg(gen_archived_size),'9G999G999D99') avg_archived_per_day +from ( select trunc(completion_time) dag, sum(blocks * block_size)/1024/1024 gen_archived_size + from v$archived_log + where standby_dest = 'NO' + and months_between(trunc(sysdate), trunc(completion_time)) <= 1 + and completion_time < trunc(sysdate) + group by trunc(completion_time) + ); + +/* +archived redo over the (max) last 10 days +*/ +column day_arch_size format 99G999D99 +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +select to_char(day, 'DD/MM/YYYY') day, to_char(day,'DAY') dayname, day_arch_size, day_arch#, graph +from ( select trunc(completion_time) day, sum(blocks * block_size)/1024/1024 day_arch_size, count(*) day_arch#, + rpad('*',floor(count(*)/10),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 10 + group by trunc(completion_time) + order by day + ); + +/* +archived redo per hour over the (max) last 2 days +*/ +column hour_arch_size format 99G999D99 +column hour_arch# format 9G999 +column graph format a15 +column dayname format a12 +column dayhour format a18 +break on dayname skip 1 + +select to_char(dayhour,'DAY') dayname, to_char(dayhour, 'DD/MM/YYYY HH24:MI') dayhour, hour_arch_size, hour_arch#, graph +from ( select trunc(completion_time, 'HH') dayhour, sum(blocks * block_size)/1024/1024 hour_arch_size, count(*) hour_arch#, + rpad('*',floor(count(*)/4),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 2 + group by trunc(completion_time, 'HH') + order by dayhour + ); + +clear breaks; + +spool off diff --git a/vdh/db_report.sql b/vdh/db_report.sql new file mode 100644 index 0000000..353b187 --- /dev/null +++ b/vdh/db_report.sql @@ -0,0 +1,90 @@ +clear breaks +set pagesize 9999 +set serveroutput on +set trimspool on +set echo off +set feedback 1 + +----------------------------------------- either specify a logfile name yourself or one will be generated for you + +set verify off +set feedback off +column dcol new_value spoolname noprint +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; + +select + nvl('&1', db_unique_name || '_' || to_char(sysdate,'YYYYMMDDHH24MISS') || '_db_overview.log') dcol +from + v$database +; + +undefine 1 + +spool &spoolname + +prompt version and os info +prompt ................... + + +select * from v$version; +@list_db_patches.sql + +column value clear +column value format 999G999G999G999G999D99 +column value clear + +select * from v$osstat order by stat_name; + +prompt +prompt tablespace and datafiles details +prompt ................................ + +@db_size2.sql +@tbs_info.sql +@df_details2.sql + +@online_logfiles_info.sql +@fra_usage.sql + + +prompt ASM layout +prompt .......... + +@asm_diskgroup_info.sql +@dg_attributes.sql + + +prompt DB Config +prompt ......... + +@list_parameters2.sql +@list_arch_dest.sql +@sga_report.sql +@db_cache_advice.sql + + +prompt DB Jobs +prompt ....... + +@get_job_overview.sql +@show_autotasks.sql + + +prompt RMAN backups +prompt ............ + +@rman_backup_overview2.sql + + +prompt Some load info +prompt .............. + +@archived_redo_stats.sql +@undo_usage_24window.sql +@top_segments_size.sql +set linesize 300 +@top_seg_history.sql +@tblspace_growth_per_day.sql + +spool off; diff --git a/vdh/db_size.sql b/vdh/db_size.sql new file mode 100644 index 0000000..71a3743 --- /dev/null +++ b/vdh/db_size.sql @@ -0,0 +1,30 @@ +column dummy noprint + +column pct_used format 999D9 heading "%|Used" + +column name format a25 heading "Tablespace Name" + +column bytes format 9G999G999G999G999 heading "Total Megs" + +column used format 99G999G999G999 heading "Used" + +column free format 999G999G999G999 heading "Free" + +break on report + +compute sum of bytes on report + +compute sum of free on report + +compute sum of used on report + + + +select a.tablespace_name name, b.tablespace_name dummy, + sum(b.bytes)/count( distinct a.file_id||'.'||a.block_id ) /1024/1024 bytes, + sum(b.bytes)/count( distinct a.file_id||'.'||a.block_id )/1024/1024 - sum(a.bytes)/count( distinct b.file_id )/1024/1024 used, + sum(a.bytes)/count( distinct b.file_id ) /1024/1024 free, + 100 * ( (sum(b.bytes)/count( distinct a.file_id||'.'||a.block_id )) - (sum(a.bytes)/count( distinct b.file_id ) )) / (sum(b.bytes)/count( distinct a.file_id||'.'||a.block_id )) pct_used +from sys.dba_free_space a, sys.dba_data_files b +where a.tablespace_name = b.tablespace_name +group by a.tablespace_name, b.tablespace_name; diff --git a/vdh/db_size2.sql b/vdh/db_size2.sql new file mode 100644 index 0000000..38eefb6 --- /dev/null +++ b/vdh/db_size2.sql @@ -0,0 +1,51 @@ +set pagesize 999 +set linesize 200 +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + +column name format a25 heading "tablespace name" +column space_mb format 9G999g999g990D99 heading "curr df mbytes" +column maxspace_mb format 9G999g999g990D99 heading "max df mbytes" +column used format 9G999g999g990D99 heading "used mbytes" +column df_free format 9G999g999g990D99 heading "curr df free mbytes" +column maxdf_free format 9G999g999g990D99 heading "max df free mbytes" +column pct_free format 990D99 heading "% free" +column pct_maxfile_free format 990D99 heading "% maxfile free" + +break on report + +compute sum of space_mb on report +compute sum of maxspace_mb on report +compute sum of df_free on report +compute sum of maxdf_free on report +compute sum of used on report + + +select df.tablespace_name name, df.space space_mb, df.maxspace maxspace_mb, (df.space - nvl(fs.freespace,0)) used, + nvl(fs.freespace,0) df_free, (nvl(fs.freespace,0) + df.maxspace - df.space) maxdf_free, + 100 * (nvl(fs.freespace,0) / df.space) pct_free, + 100 * ((nvl(fs.freespace,0) + df.maxspace - df.space) / df.maxspace) pct_maxfile_free +from ( select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_temp_files + group by tablespace_name + ) df, + ( select tablespace_name, sum(bytes)/1024/1024 freespace + from dba_free_space + group by tablespace_name + ) fs +where df.tablespace_name = fs.tablespace_name(+) + and df.tablespace_name like nvl('&1', '%') +order by name; + +clear breaks +clear computes + +undef 1 diff --git a/vdh/dba_tables.sql b/vdh/dba_tables.sql new file mode 100644 index 0000000..e6f28ca --- /dev/null +++ b/vdh/dba_tables.sql @@ -0,0 +1,6 @@ +set lines 150 +select owner, table_name, status, last_analyzed, num_rows, blocks, degree +from dba_tables +where owner like nvl('&owner',owner) +and table_name like nvl('&table_name',table_name) +/ diff --git a/vdh/df_details.sql b/vdh/df_details.sql new file mode 100644 index 0000000..fa8401b --- /dev/null +++ b/vdh/df_details.sql @@ -0,0 +1,51 @@ +set linesize 120 +set pages 999 +set verify off + +column file_name format a70 +column mb format 9G999G999D99 +column incr_by_mb format 9G999D99 +column max_mb format 9G999G999D99 + +compute sum of MB on report +compute sum of max_MB on report + +break on report +with + files as + ( select + file_id, file_name, bytes, maxbytes, increment_by + from + dba_data_files + where + tablespace_name = '&&tablespacename' + union all + select + file_id, file_name, bytes, maxbytes, increment_by + from + dba_temp_files + where + tablespace_name = '&&tablespacename' + ), + blocksize as + ( select + block_size + from + dba_tablespaces + where + tablespace_name = '&&tablespacename' + ) +select + files.file_id, files.file_name, + (files.bytes/1024/1024) MB, + (files.maxbytes/1024/1024) max_MB, + ((files.increment_by * blocksize.block_size )/1024/1024) incr_by_mb +from + files, + blocksize +order by + file_id +/ + +clear breaks +undefine tablespacename \ No newline at end of file diff --git a/vdh/df_details2.sql b/vdh/df_details2.sql new file mode 100644 index 0000000..e41a16a --- /dev/null +++ b/vdh/df_details2.sql @@ -0,0 +1,24 @@ +column curr_mb format 9G999G990D99 +column max_mb format 9G9999990D99 +column incr_mb format 9G999G990D99 +column file_name format a70 +--column file_name format a60 +column tablespace_name format a20 +break on tablespace_name skip 1 +set linesize 150 +set pagesize 999 + +select A.tablespace_name, file_id, file_name, bytes/1024/1024 curr_mb, autoextensible, + maxbytes/1024/1024 max_mb, (increment_by * block_size)/1024/1024 incr_mb +from ( select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_data_files + union all + select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_temp_files + ) A, dba_tablespaces B +where A.tablespace_name = B.tablespace_name +order by A.tablespace_name, file_name; + +clear breaks; diff --git a/vdh/df_details_pre_9.sql b/vdh/df_details_pre_9.sql new file mode 100644 index 0000000..a60999b --- /dev/null +++ b/vdh/df_details_pre_9.sql @@ -0,0 +1,13 @@ +select A.tablespace_name, file_name, bytes/1024/1024 curr_mb, autoextensible, + maxbytes/1024/1024 max_mb, (increment_by * (select value from v$parameter where name='db_block_size'))/1024/1024 incr_mb +from ( select tablespace_name, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_data_files + union all + select tablespace_name, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_temp_files + ) A, dba_tablespaces B +where A.tablespace_name = B.tablespace_name +order by A.tablespace_name, file_name +/ diff --git a/vdh/df_high_water_mark.sql b/vdh/df_high_water_mark.sql new file mode 100644 index 0000000..89d89bf --- /dev/null +++ b/vdh/df_high_water_mark.sql @@ -0,0 +1,20 @@ +column db_block_size new_value _BLOCK_SIZE; + +select to_number(value) db_block_size from v$parameter where name = 'db_block_size'; + +select + a.tablespace_name, + a.file_id, + a.file_name, + a.bytes/1024/1024 file_mb, + ((c.block_id+(c.blocks-1)) * &_BLOCK_SIZE) /1024/1024 HWM_MB, + (a.bytes - ((c.block_id+(c.blocks-1)) * &_BLOCK_SIZE))/1024/1024 SAVING_mb +from dba_data_files a, + (select file_id,max(block_id) maximum + from dba_extents + group by file_id) b, +dba_extents c +where a.file_id = b.file_id +and c.file_id = b.file_id +and c.block_id = b.maximum +order by 6; \ No newline at end of file diff --git a/vdh/dg_archivelog_status.sql b/vdh/dg_archivelog_status.sql new file mode 100644 index 0000000..155c208 --- /dev/null +++ b/vdh/dg_archivelog_status.sql @@ -0,0 +1,12 @@ +set linesize 120 +set pagesize 999 +break on dest_id skip 2 on thread# skip 1; + +select dest_id, thread#, sequence#, next_change#, to_char(next_time, 'DD/MM/YYYY HH24:MI:SS') next_time, + to_char(completion_time,'DD/MM/YYYY HH24:MI:SS') completion_time, archived, applied, deleted, status, fal +from v$archived_log +where standby_dest='YES' + and completion_time >= trunc(sysdate) -1 +order by dest_id, thread#, sequence#; + +clear breaks diff --git a/vdh/dg_archives.sql b/vdh/dg_archives.sql new file mode 100644 index 0000000..f0849f4 --- /dev/null +++ b/vdh/dg_archives.sql @@ -0,0 +1,12 @@ +select thread#, sequence#, to_char(first_time, 'DD/MM/YYYY HH24:MI') ft, archived, applied, fal +from v$archived_log +where first_time >= trunc(sysdate) -1 + and standby_dest = 'YES' +order by thread#, sequence#; + + +select thread#, sequence#, to_char(first_time, 'DD/MM/YYYY HH24:MI') ft, archived, applied, fal +from v$archived_log +where first_time >= trunc(sysdate) -1 +order by thread#, sequence#; + diff --git a/vdh/dg_attributes.sql b/vdh/dg_attributes.sql new file mode 100644 index 0000000..04383cb --- /dev/null +++ b/vdh/dg_attributes.sql @@ -0,0 +1,30 @@ +set linesize 130 +set pages 50000 + +column dg_number format 999999999 heading "dg number" +column dg_name format a30 heading "dg name" +column attr_name format a40 heading "attribute name" +column attr_value format a40 heading "attribute value" +column attr_incarnation format 99999 heading "incar" + +break on dg_number skip 1 on dg_name + +select + dg.group_number dg_number, + dg.name dg_name, + attr.name attr_name, + attr.value attr_value, + attr.attribute_incarnation attr_incarnation +from + v$asm_attribute attr, + v$asm_diskgroup dg +where + attr.group_number = dg.group_number + and attr.name not like 'template%' +order by + dg.group_number, + attr.name, + attr.attribute_incarnation +; + +clear breaks diff --git a/vdh/dg_lsby_diag.sql b/vdh/dg_lsby_diag.sql new file mode 100644 index 0000000..1979738 --- /dev/null +++ b/vdh/dg_lsby_diag.sql @@ -0,0 +1,245 @@ +--------------------------- Script begins here --------------------------- + +-- NAME: dg_lsby_diag.sql (Run on LOGICAL STANDBY) +-- ------------------------------------------------------------------------ +-- Copyright 2002, Oracle Corporation +-- LAST UPDATED: 2/23/04 +-- +-- Usage: @dg_lsby_diag +-- ------------------------------------------------------------------------ +-- PURPOSE: +-- This script is to be used to assist in collection information to help +-- troubeshoot Data Guard issues involving a Logical Standby. +-- ------------------------------------------------------------------------ +-- DISCLAIMER: +-- This script is provided for educational purposes only. It is NOT +-- supported by Oracle World Wide Technical Support. +-- The script has been tested and appears to work as intended. +-- You should always run new scripts on a test instance initially. +-- ------------------------------------------------------------------------ +-- Script output is as follows: + +set echo off +set feedback off +column timecol new_value timestamp +column spool_extension new_value suffix +select to_char(sysdate,'Mondd_hhmi') timecol, +'.out' spool_extension from sys.dual; +column output new_value dbname +select value || '_' output +from v$parameter where name = 'db_name'; +spool dg_lsby_diag_&&dbname&×tamp&&suffix + +set linesize 79 +set pagesize 180 +set long 1000 +set trim on +set trims on +alter session set nls_date_format = 'MM/DD HH24:MI:SS'; +set feedback on +select to_char(sysdate) time from dual; + +set echo on + +-- The following select will give us the generic information about how +-- this standby is setup. The database_role should be logical standby as +-- that is what this script is intended to be ran on. + +column ROLE format a7 tru +column NAME format a8 wrap +select name,database_role,log_mode,protection_mode +from v$database; + +-- ARCHIVER can be (STOPPED | STARTED | FAILED). FAILED means that the +-- archiver failed to archive a log last time, but will try again within 5 +-- minutes. LOG_SWITCH_WAIT The ARCHIVE LOG/CLEAR LOG/CHECKPOINT event log +-- switching is waiting for. Note that if ALTER SYSTEM SWITCH LOGFILE is +-- hung, but there is room in the current online redo log, then value is +-- NULL + +column host_name format a20 tru +column version format a9 tru +select instance_name,host_name,version,archiver,log_switch_wait +from v$instance; + +-- The following query give us information about catpatch. +-- This way we can tell if the procedure doesn't match the image. + +select version, modified, status from dba_registry +where comp_id = 'CATPROC'; + +-- Force logging and supplemental logging are not mandatory but are +-- recommended if you plan to switchover. During normal operations it is +-- acceptable for SWITCHOVER_STATUS to be SESSIONS ACTIVE or NOT ALLOWED. + +column force_logging format a13 tru +column remote_archive format a14 tru +column dataguard_broker format a16 tru + +select force_logging,remote_archive,supplemental_log_data_pk, +supplemental_log_data_ui,switchover_status,dataguard_broker +from v$database; + +-- This query produces a list of all archive destinations. It shows if +-- they are enabled, what process is servicing that destination, if the +-- destination is local or remote, and if remote what the current mount ID +-- is. + +column destination format a35 wrap +column process format a7 +column archiver format a8 +column ID format 99 +column mid format 99 + +select dest_id "ID",destination,status,target, + schedule,process,mountid mid +from v$archive_dest order by dest_id; + +-- This select will give further detail on the destinations as to what +-- options have been set. Register indicates whether or not the archived +-- redo log is registered in the remote destination control file. + +set numwidth 8 +column ID format 99 + +select dest_id "ID",archiver,transmit_mode,affirm,async_blocks async, + net_timeout net_time,delay_mins delay,reopen_secs reopen, + register,binding +from v$archive_dest order by dest_id; + +-- Determine if any error conditions have been reached by querying the +-- v$dataguard_status view (view only available in 9.2.0 and above): + +column message format a80 + +select message, timestamp +from v$dataguard_status +where severity in ('Error','Fatal') +order by timestamp; + +-- Query v$managed_standby to see the status of processes involved in +-- the shipping redo on this system. Does not include processes needed to +-- apply redo. + +select process,status,client_process,sequence# +from v$managed_standby; + +-- Verify that log apply services on the standby are currently +-- running. If the query against V$LOGSTDBY returns no rows then logical +-- apply is not running. + +column status format a50 wrap +column type format a11 +set numwidth 15 + +SELECT TYPE, STATUS, HIGH_SCN +FROM V$LOGSTDBY; + +-- The DBA_LOGSTDBY_PROGRESS view describes the progress of SQL apply +-- operations on the logical standby databases. The APPLIED_SCN indicates +-- that committed transactions at or below that SCN have been applied. The +-- NEWEST_SCN is the maximum SCN to which data could be applied if no more +-- logs were received. This is usually the MAX(NEXT_CHANGE#)-1 from +-- DBA_LOGSTDBY_LOG. When the value of NEWEST_SCN and APPLIED_SCN are the +-- equal then all available changes have been applied. If your +-- APPLIED_SCN is below NEWEST_SCN and is increasing then SQL apply is +-- currently processing changes. + +set numwidth 15 + +select + (case + when newest_scn = applied_scn then 'Done' + when newest_scn <= applied_scn + 9 then 'Done?' + when newest_scn > (select max(next_change#) from dba_logstdby_log) + then 'Near done' + when (select count(*) from dba_logstdby_log + where (next_change#, thread#) not in + (select first_change#, thread# from dba_logstdby_log)) > 1 + then 'Gap' + when newest_scn > applied_scn then 'Not Done' + else '---' end) "Fin?", + newest_scn, applied_scn, read_scn from dba_logstdby_progress; + +select newest_time, applied_time, read_time from dba_logstdby_progress; + +-- Determine if apply is lagging behind and by how much. Missing +-- sequence#'s in a range indicate that a gap exists. + +set numwidth 15 +column trd format 99 + +select thread# trd, sequence#, + first_change#, next_change#, + dict_begin beg, dict_end end, + to_char(timestamp, 'hh:mi:ss') timestamp, + (case when l.next_change# < p.read_scn then 'YES' + when l.first_change# < p.applied_scn then 'CURRENT' + else 'NO' end) applied + from dba_logstdby_log l, dba_logstdby_progress p + order by thread#, first_change#; + +-- Get a history on logical standby apply activity. + +set numwidth 15 + +select to_char(event_time, 'MM/DD HH24:MI:SS') time, + commit_scn, current_scn, event, status +from dba_logstdby_events +order by event_time, commit_scn, current_scn; + +-- Dump logical standby stats + +column name format a40 +column value format a20 + +select * from v$logstdby_stats; + +-- Dump logical standby parameters + +column name format a33 wrap +column value format a33 wrap +column type format 99 + +select name, value, type from system.logstdby$parameters +order by type, name; + +-- Gather log miner session and dictionary information. + +set numwidth 15 + +select * from system.logmnr_session$; +select * from system.logmnr_dictionary$; +select * from system.logmnr_dictstate$; +select * from v$logmnr_session; + +-- Query the log miner dictionary for key tables necessary to process +-- changes for logical standby Label security will move AUD$ from SYS to +-- SYSTEM. A synonym will remain in SYS but Logical Standby does not +-- support this. + +set numwidth 5 +column name format a9 wrap +column owner format a6 wrap + +select o.logmnr_uid, o.obj#, o.objv#, u.name owner, o.name + from system.logmnr_obj$ o, system.logmnr_user$ u + where + o.logmnr_uid = u.logmnr_uid and + o.owner# = u.user# and + o.name in ('JOB$','JOBSEQ','SEQ$','AUD$', + 'FGA_LOG$','IND$','COL$','LOGSTDBY$PARAMETER') + order by u.name; + +-- Non-default init parameters. + +column name format a30 tru +column value format a48 wra +select name, value +from v$parameter +where isdefault = 'FALSE'; + +spool off + +--------------------------- Script ends here --------------------------- + diff --git a/vdh/dg_phy_stby_diag.sql b/vdh/dg_phy_stby_diag.sql new file mode 100644 index 0000000..49d8af9 --- /dev/null +++ b/vdh/dg_phy_stby_diag.sql @@ -0,0 +1,163 @@ +-- NAME: new_dg_psby_diag.sql +-- +-- Copyright 2002, Oracle Corporation +-- +-- LAST UPDATED: 02-Sep-2015 +-- +-- Usage: @new_dg_psby_diag +-- +-- (Run from sqlplus on PHYSICAL STANDBY, ACTIVE STANDBY as SYS) +-- +-- PURPOSE: +-- +-- This script is to be used to assist in the collection of information to help +-- troubleshoot Data Guard issues involving a Physical or Active Standby. +-- +-- DISCLAIMER: +-- +-- This script is provided for educational purposes only. It is NOT +-- supported by Oracle World Wide Technical Support. +-- The script has been tested and appears to work as intended. +-- You should always run new scripts on a test instance initially. +-- +-- +-- Script output is as follows: + +set echo off +set feedback off +column timecol new_value timestamp +column spool_extension new_value suffix +SELECT TO_CHAR(sysdate,'yyyymmdd_hh24mi') timecol, '.html' spool_extension FROM dual; +column output new_value dbname +SELECT value || '_' output FROM v$parameter WHERE name = 'db_unique_name'; +spool new_dg_psby_diag_&&dbname&×tamp&&suffix +set linesize 2000 +set pagesize 50000 +set numformat 999999999999999 +set trim on +set trims on +set markup html on +set markup html entmap off +set feedback on + +ALTER SESSION SET nls_date_format = 'DD-MON-YYYY HH24:MI:SS'; +SELECT TO_CHAR(sysdate) time FROM dual; + +set echo on + + +-- The following select will give us the generic information about how this standby is setup. +-- The DATABASE_ROLE should be STANDBY as that is what this script is intended to be run on. +-- PLATFORM_ID should match the PLATFORM_ID of the primary or conform to the supported options in +-- Note: 413484.1 Data Guard Support for Heterogeneous Primary and Physical Standbys in Same Data Guard Configuration. +-- FLASHBACK can be YES (recommended) or NO. +-- If PROTECTION_LEVEL is different from PROTECTION_MODE then for some reason the mode listed in PROTECTION_MODE experienced a need to downgrade. +-- Once the error condition has been corrected the PROTECTION_LEVEL should match the PROTECTION_MODE after the next log switch. + +SELECT database_role role, name, db_unique_name, platform_id, open_mode, log_mode, flashback_on, protection_mode, protection_level FROM v$database; + +-- FORCE_LOGGING is not mandatory but is recommended. +-- REMOTE_ARCHIVE should be ENABLE. +-- SUPPLEMENTAL_LOG_DATA_PK and SUPPLEMENTAL_LOG_DATA_UI must be enabled if this standby is associated with a primary that has a logical standby. +-- During normal operations it is acceptable for SWITCHOVER_STATUS to be NOT ALLOWED. +-- DATAGUARD_BROKER can be ENABLED (recommended) or DISABLED. + +column force_logging format a13 tru +column supplemental_log_data_pk format a24 tru +column supplemental_log_data_ui format a24 tru + +SELECT force_logging, remote_archive, supplemental_log_data_pk, supplemental_log_data_ui, switchover_status, dataguard_broker FROM v$database; + +-- Check how many threads are enabled and started for this database. If the number of instances below does not match then not all instances are up. + +SELECT thread#, instance, status FROM v$thread; + +-- The number of instances returned below is the number currently running. If it does not match the number returned in Threads above then not all instances are up. +-- VERSION should match the version from the primary database. +-- ARCHIVER can be (STOPPED | STARTED | FAILED). FAILED means that the archiver failed to archive a log last time, but will try again within 5 minutes. +-- LOG_SWITCH_WAIT the ARCHIVE LOG/CLEAR LOG/CHECKPOINT event log switching is waiting for. +-- Note that if ALTER SYSTEM SWITCH LOGFILE is hung, but there is room in the current online redo log, then the value is NULL. + +column host_name format a32 wrap + +SELECT thread#, instance_name, host_name, version, archiver, log_switch_wait FROM gv$instance ORDER BY thread#; + +-- Check the number and size of online redo logs on each thread. + +SELECT thread#, group#, sequence#, bytes, archived ,status FROM v$log ORDER BY thread#, group#; + +-- The following query is run to see if standby redo logs have been created. +-- The standby redo logs should be the same size as the online redo logs. +-- There should be (( # of online logs per thread + 1) * # of threads) standby redo logs. +-- A value of 0 for the thread# means the log has never been allocated. + +SELECT thread#, group#, sequence#, bytes, archived, status FROM v$standby_log order by thread#, group#; + +-- This query produces a list of defined archive destinations. +-- It shows if they are enabled, what process is servicing that destination, if the destination is local or remote, and if remote what the current mount ID is. +-- For a physical standby we should have at least one remote destination that points the primary set. + +column destination format a35 wrap +column process format a7 +column ID format 99 +column mid format 99 + +SELECT thread#, dest_id, destination, gvad.status, target, schedule, process, mountid mid FROM gv$archive_dest gvad, gv$instance gvi WHERE gvad.inst_id = gvi.inst_id AND destination is NOT NULL ORDER BY thread#, dest_id; + +-- If the protection mode of the standby is set to anything higher than max performance then we need to make sure the remote destination that points to the primary is set with the correct options else we will have issues during switchover. + +set numwidth 8 +column archiver format a8 +column ID format 99 +column error format a55 wrap + +SELECT thread#, dest_id, gvad.archiver, transmit_mode, affirm, async_blocks, net_timeout, delay_mins, reopen_secs reopen, register, binding FROM gv$archive_dest gvad, gv$instance gvi WHERE gvad.inst_id = gvi.inst_id AND destination is NOT NULL ORDER BY thread#, dest_id; + +-- The following select will show any errors that occured the last time an attempt to archive to the destination was attempted. +-- If ERROR is blank and status is VALID then the archive completed correctly. + +SELECT thread#, dest_id, gvad.status, error FROM gv$archive_dest gvad, gv$instance gvi WHERE gvad.inst_id = gvi.inst_id AND destination is NOT NULL ORDER BY thread#, dest_id; + +-- The query below will determine if any error conditions have been reached by querying the v$dataguard_status view (view only available in 9.2.0 and above). + +column message format a80 + +SELECT timestamp, gvi.thread#, message FROM gv$dataguard_status gvds, gv$instance gvi WHERE gvds.inst_id = gvi.inst_id AND severity in ('Error','Fatal') ORDER BY timestamp, thread#; + +-- Query gv$managed_standby to see the status of processes involved in the shipping redo on this system. +-- Does not include processes needed to apply redo. + +SELECT thread#, process, pid, status, client_process, client_pid, sequence#, block#, active_agents, known_agents FROM gv$managed_standby ORDER BY thread#, process; + +-- Verify the last sequence# received and the last sequence# applied to standby database. + +SELECT al.thrd "Thread", almax "Last Seq Received", lhmax "Last Seq Applied" FROM (select thread# thrd, MAX(sequence#) almax FROM v$archived_log WHERE resetlogs_change#=(SELECT resetlogs_change# FROM v$database) GROUP BY thread#) al, (SELECT thread# thrd, MAX(sequence#) lhmax FROM v$log_history WHERE resetlogs_change#=(SELECT resetlogs_change# FROM v$database) GROUP BY thread#) lh WHERE al.thrd = lh.thrd; + +-- Check the transport lag and apply lag from the V$DATAGUARD_STATS view. This is only relevant when LGWR log transport and real time apply are in use. + +SELECT * FROM v$dataguard_stats WHERE name LIKE '%lag%'; + +-- Check how often and how far the apply lags. + +SELECT name, time, unit, count, TO_DATE(last_time_updated, 'MM/DD/YYYY HH24:MI:SS') FROM v$standby_event_histogram ORDER BY unit DESC, time; + +-- The V$ARCHIVE_GAP fixed view on a physical standby database only returns the next gap that is currently blocking redo apply from continuing. +-- After resolving the identified gap and starting redo apply, query the V$ARCHIVE_GAP fixed view again on the physical standby database to determine the next gap sequence, if there is one. + +SELECT * FROM v$archive_gap; + +-- Non-default init parameters. +-- For a RAC DB Thread# = * means the value is the same for all threads (SID=*) +-- Threads with different values are shown with their individual thread# and values. + +column num noprint + +SELECT num, '*' "THREAD#", name, value FROM v$PARAMETER WHERE NUM IN (SELECT num FROM v$parameter WHERE (isdefault = 'FALSE' OR ismodified <> 'FALSE') AND name NOT LIKE 'nls%' +MINUS +SELECT num FROM gv$parameter gvp, gv$instance gvi WHERE num IN (SELECT DISTINCT gvpa.num FROM gv$parameter gvpa, gv$parameter gvpb WHERE gvpa.num = gvpb.num AND gvpa.value <> gvpb.value AND (gvpa.isdefault = 'FALSE' OR gvpa.ismodified <> 'FALSE') AND gvpa.name NOT LIKE 'nls%') AND gvi.inst_id = gvp.inst_id AND (gvp.isdefault = 'FALSE' OR gvp.ismodified <> 'FALSE') AND gvp.name NOT LIKE 'nls%') +UNION +SELECT num, TO_CHAR(thread#) "THREAD#", name, value FROM gv$parameter gvp, gv$instance gvi WHERE num IN (SELECT DISTINCT gvpa.num FROM gv$parameter gvpa, gv$parameter gvpb WHERE gvpa.num = gvpb.num AND gvpa.value <> gvpb.value AND (gvpa.isdefault = 'FALSE' OR gvpa.ismodified <> 'FALSE') AND gvp.name NOT LIKE 'nls%') AND gvi.inst_id = gvp.inst_id AND (gvp.isdefault = 'FALSE' OR gvp.ismodified <> 'FALSE') AND gvp.name NOT LIKE 'nls%' ORDER BY 1, 2; + +spool off +set markup html off entmap on +set echo on \ No newline at end of file diff --git a/vdh/dg_prim_diag.sql b/vdh/dg_prim_diag.sql new file mode 100644 index 0000000..2231488 --- /dev/null +++ b/vdh/dg_prim_diag.sql @@ -0,0 +1,181 @@ +-- NAME: new_dg_prim_diag.sql +-- +-- Copyright 2002, Oracle Corporation +-- +-- LAST UPDATED: 02-Sep-2015 +-- +-- USAGE: @new_dg_prim_diag +-- +-- (Run from sqlplus on PRIMARY with a LOGICAL or PHYSICAL STANDBY as SYS) +-- +-- PURPOSE: +-- +-- This script is to be used to assist in the collection of information to +-- help troubleshoot Data Guard issues with a Primary Database +-- +-- DISCLAIMER: +-- +-- This script is provided for educational purposes only. It is NOT +-- supported by Oracle World Wide Technical Support. +-- The script has been tested and appears to work as intended. +-- You should always run new scripts on a test instance initially. +-- +-- Script output is as follows: + +set echo off +set feedback off +column timecol new_value timestamp +column spool_extension new_value suffix +SELECT TO_CHAR(sysdate,'yyyymmdd_hh24mi') timecol, '.html' spool_extension FROM dual; +column output new_value dbname +SELECT value || '_' output FROM v$parameter WHERE name = 'db_unique_name'; +spool new_dg_prim_diag_&&dbname&×tamp&&suffix +set linesize 2000 +set pagesize 50000 +set numformat 999999999999999 +set trim on +set trims on +set markup html on +set markup html entmap off +set feedback on + +ALTER SESSION SET nls_date_format = 'DD-MON-YYYY HH24:MI:SS'; +SELECT TO_CHAR(sysdate) time FROM dual; + +set echo on + +-- In the following output the DATABASE_ROLE should be PRIMARY as that is what this script is intended to be run on. +-- PLATFORM_ID should match the PLATFORM_ID of the standby(s) or conform to the supported options in +-- Note: 413484.1 Data Guard Support for Heterogeneous Primary and Physical Standbys in Same Data Guard Configuration +-- Note: 1085687.1 Data Guard Support for Heterogeneous Primary and Logical Standbys in Same Data Guard Configuration +-- OPEN_MODE should be READ WRITE. +-- LOG_MODE should be ARCHIVELOG. +-- FLASHBACK can be YES (recommended) or NO. +-- If PROTECTION_LEVEL is different from PROTECTION_MODE then for some reason the mode listed in PROTECTION_MODE experienced a need to downgrade. +-- Once the error condition has been corrected the PROTECTION_LEVEL should match the PROTECTION_MODE after the next log switch; + +SELECT database_role role, name, db_unique_name, platform_id, open_mode, log_mode, flashback_on, protection_mode, protection_level FROM v$database; + +-- FORCE_LOGGING is not mandatory but is recommended. +-- REMOTE_ARCHIVE should be ENABLE. +-- SUPPLEMENTAL_LOG_DATA_PK and SUPPLEMENTAL_LOG_DATA_UI must be enabled if the standby associated with this primary is a logical standby. +-- During normal operations it is acceptable for SWITCHOVER_STATUS to be SESSIONS ACTIVE or TO STANDBY. +-- DG_BROKER can be ENABLED (recommended) or DISABLED.; + +column force_logging format a13 tru +column remote_archive format a14 tru +column supplemental_log_data_pk format a24 tru +column supplemental_log_data_ui format a24 tru +column dataguard_broker format a16 tru + +SELECT force_logging, remote_archive, supplemental_log_data_pk, supplemental_log_data_ui, switchover_status, dataguard_broker FROM v$database; + +-- The following query gives us information about catpatch. From this we can tell if the catalog version doesn''t match the image version it was started with. + +column version format a10 tru + +SELECT version, modified, status FROM dba_registry WHERE comp_id = 'CATPROC'; + +-- Check how many threads are enabled and started for this database. If the number of instances below does not match then not all instances are up. + +SELECT thread#, instance, status FROM v$thread; + +-- The number of instances returned below is the number currently running. If it does not match the number returned in Threads above then not all instances are up. +-- VERSION should match the version from CATPROC above. +-- ARCHIVER can be (STOPPED | STARTED | FAILED). FAILED means that the archiver failed to archive a log last time, but will try again within 5 minutes. +-- LOG_SWITCH_WAIT the ARCHIVE LOG/CLEAR LOG/CHECKPOINT event log switching is waiting for. +-- Note that if ALTER SYSTEM SWITCH LOGFILE is hung, but there is room in the current online redo log, then the value is NULL. + +column host_name format a32 wrap + +SELECT thread#, instance_name, host_name, version, archiver, log_switch_wait FROM gv$instance ORDER BY thread#; + +-- Check how often logs are switching. Log switches should not regularly be occuring in < 20 mins. +-- Excessive log switching is a performance overhead. Whilst rapid log switching is not in itself a Data Guard issue it can affect Data guard. +-- It may also indicate a problem with log shipping. Use redo log size = 4GB or redo log size >= peak redo rate x 20 minutes. + +SELECT fs.log_switches_under_20_mins, ss.log_switches_over_20_mins FROM (SELECT SUM(COUNT (ROUND((b.first_time - a.first_time) * 1440) )) "LOG_SWITCHES_UNDER_20_MINS" FROM v$archived_log a, v$archived_log b WHERE a.sequence# + 1 = b.sequence# AND a.dest_id = 1 AND a.thread# = b.thread# AND a.dest_id = b.dest_id AND a.dest_id = (SELECT MIN(dest_id) FROM gv$archive_dest WHERE target='PRIMARY' AND destination IS NOT NULL) AND ROUND((b.first_time - a.first_time) * 1440) < 20 GROUP BY ROUND((b.first_time - a.first_time) * 1440)) fs, (SELECT SUM(COUNT (ROUND((b.first_time - a.first_time) * 1440) )) "LOG_SWITCHES_OVER_20_MINS" FROM v$archived_log a, v$archived_log b WHERE a.sequence# + 1 = b.sequence# AND a.dest_id = 1 AND a.thread# = b.thread# AND a.dest_id = b.dest_id AND a.dest_id = (SELECT MIN(dest_id) FROM gv$archive_dest WHERE target='PRIMARY' AND destination IS NOT NULL) AND ROUND((b.first_time - a.first_time) * 1440) > 19 GROUP BY ROUND((b.first_time - a.first_time) * 1440)) ss; + +column minutes format a12 + +SELECT (CASE WHEN bucket = 1 THEN '<= ' || TO_CHAR(bucket * 5) WHEN (bucket >1 AND bucket < 9) THEN TO_CHAR(bucket * 5 - 4) || ' TO ' || TO_CHAR(bucket * 5) WHEN bucket > 8 THEN '>= ' || TO_CHAR(bucket * 5 - 4) END) "MINUTES", switches "LOG_SWITCHES" FROM (SELECT bucket , COUNT(b.bucket) SWITCHES FROM (SELECT WIDTH_BUCKET(ROUND((b.first_time - a.first_time) * 1440), 0, 40, 8) bucket FROM v$archived_log a, v$archived_log b WHERE a.sequence# + 1 = b.sequence# AND a.dest_id = b.dest_id AND a.thread# = b.thread# AND a.dest_id = (SELECT MIN(dest_id) FROM gv$archive_dest WHERE target = 'PRIMARY' AND destination IS NOT NULL)) b GROUP BY bucket ORDER BY bucket); + +-- Check the number and size of online redo logs on each thread. + +SELECT thread#, group#, sequence#, bytes, archived ,status FROM v$log ORDER BY thread#, group#; + +-- The following query is run to see if standby redo logs have been created in preparation for switchover. +-- The standby redo logs should be the same size as the online redo logs.
    There should be (( # of online logs per thread + 1) * # of threads) standby redo logs. +-- A value of 0 for the thread# means the log has never been allocated. + +SELECT thread#, group#, sequence#, bytes, archived, status FROM v$standby_log order by thread#, group#; + +-- This query produces a list of defined archive destinations. It shows if they are enabled, what process is servicing that destination, +-- if the destination is local or remote. + +column destination format a35 wrap +column process format a7 +column ID format 99 +column mid format 99 + +SELECT thread#, dest_id, destination, target, schedule, process FROM gv$archive_dest gvad, gv$instance gvi WHERE gvad.inst_id = gvi.inst_id AND destination is NOT NULL ORDER BY thread#, dest_id; + +-- This select will give further detail on the destinations as to what options have been set. +-- Register indicates whether or not the archived redo log is registered in the remote destination control fileOptions. + +set numwidth 8 +column archiver format a8 +column affirm format a6 +column error format a55 wrap +column register format a8 + +SELECT thread#, dest_id, gvad.archiver, transmit_mode, affirm, async_blocks, net_timeout, max_failure, delay_mins, reopen_secs reopen, register, binding FROM gv$archive_dest gvad, gv$instance gvi WHERE gvad.inst_id = gvi.inst_id AND destination is NOT NULL ORDER BY thread#, dest_id; + +-- The following select will show any errors that occured the last time an attempt to archive to the destination was attempted. +-- If ERROR is blank and status is VALID then the archive completed correctly. + +SELECT thread#, dest_id, gvad.status, error, fail_sequence FROM gv$archive_dest gvad, gv$instance gvi WHERE gvad.inst_id = gvi.inst_id AND destination is NOT NULL ORDER BY thread#, dest_id; + +-- The query below will determine if any error conditions have been reached by querying the v$dataguard_status view (view only available in 9.2.0 and above). + +column message format a80 + +SELECT gvi.thread#, timestamp, message FROM gv$dataguard_status gvds, gv$instance gvi WHERE gvds.inst_id = gvi.inst_id AND severity in ('Error','Fatal') ORDER BY timestamp, thread#; + +-- Query v$managed_standby to see the status of processes involved in the shipping redo on this system. +-- Does not include processes needed to apply redo. + +SELECT inst_id, thread#, process, pid, status, client_process, client_pid, sequence#, block#, active_agents, known_agents FROM gv$managed_standby ORDER BY thread#, pid; + +-- The following query will determine the current sequence number and the last sequence archived. +-- If you are remotely archiving using the LGWR process then the archived sequence should be one higher than the current sequence. +-- If remotely archiving using the ARCH process then the archived sequence should be equal to the current sequence. +-- The applied sequence information is updated at log switch time. +-- The "Last Applied" value should be checked with the actual last log applied at the standby, only the standby is guaranteed to be correct. + +SELECT cu.thread#, cu.dest_id, la.lastarchived "Last Archived", cu.currentsequence "Current Sequence", appl.lastapplied "Last Applied" FROM (select gvi.thread#, gvd.dest_id, MAX(gvd.log_sequence) currentsequence FROM gv$archive_dest gvd, gv$instance gvi WHERE gvd.status = 'VALID' AND gvi.inst_id = gvd.inst_id GROUP BY thread#, dest_id) cu, (SELECT thread#, dest_id, MAX(sequence#) lastarchived FROM gv$archived_log WHERE resetlogs_change# = (SELECT resetlogs_change# FROM v$database) AND archived = 'YES' GROUP BY thread#, dest_id) la, (SELECT thread#, dest_id, MAX(sequence#) lastapplied FROM gv$archived_log WHERE resetlogs_change# = (SELECT resetlogs_change# FROM v$database) AND applied = 'YES' GROUP BY thread#, dest_id) appl WHERE cu.thread# = la.thread# AND cu.thread# = appl.thread# AND cu.dest_id = la.dest_id AND cu.dest_id = appl.dest_id ORDER BY 1, 2; + +-- The following select will attempt to gather as much information as possible from the standby. +-- Standby redo logs are not supported with Logical Standby until Version 10.1. +-- The ARCHIVED_SEQUENCE# from a logical standby is the sequence# created by the apply, not the sequence# sent from the primary. + +set numwidth 8 +column dest_id format 99 +column Active format 99 + +SELECT dest_id, database_mode, recovery_mode, protection_mode, standby_logfile_count, standby_logfile_active FROM v$archive_dest_status WHERE destination IS NOT NULL; + +-- Non-default init parameters. For a RAC DB Thread# = * means the value is the same for all threads (SID=*) +-- Threads with different values are shown with their individual thread# and values. + +column num noprint + +SELECT num, '*' "THREAD#", name, value FROM v$PARAMETER WHERE NUM IN (SELECT num FROM v$parameter WHERE (isdefault = 'FALSE' OR ismodified <> 'FALSE') AND name NOT LIKE 'nls%' +MINUS +SELECT num FROM gv$parameter gvp, gv$instance gvi WHERE num IN (SELECT DISTINCT gvpa.num FROM gv$parameter gvpa, gv$parameter gvpb WHERE gvpa.num = gvpb.num AND gvpa.value <> gvpb.value AND (gvpa.isdefault = 'FALSE' OR gvpa.ismodified <> 'FALSE') AND gvpa.name NOT LIKE 'nls%') AND gvi.inst_id = gvp.inst_id AND (gvp.isdefault = 'FALSE' OR gvp.ismodified <> 'FALSE') AND gvp.name NOT LIKE 'nls%') +UNION +SELECT num, TO_CHAR(thread#) "THREAD#", name, value FROM gv$parameter gvp, gv$instance gvi WHERE num IN (SELECT DISTINCT gvpa.num FROM gv$parameter gvpa, gv$parameter gvpb WHERE gvpa.num = gvpb.num AND gvpa.value <> gvpb.value AND (gvpa.isdefault = 'FALSE' OR gvpa.ismodified <> 'FALSE') AND gvp.name NOT LIKE 'nls%') AND gvi.inst_id = gvp.inst_id AND (gvp.isdefault = 'FALSE' OR gvp.ismodified <> 'FALSE') AND gvp.name NOT LIKE 'nls%' ORDER BY 1, 2; + +spool off +set markup html off entmap on +set echo on \ No newline at end of file diff --git a/vdh/display_raw.sql b/vdh/display_raw.sql new file mode 100644 index 0000000..f540ac8 --- /dev/null +++ b/vdh/display_raw.sql @@ -0,0 +1,34 @@ +create or replace function display_raw (rawval raw, type varchar2) +return varchar2 +is + cn number; + cv varchar2(32); + cd date; + cnv nvarchar2(32); + cr rowid; + cc char(32); +begin + if (type = 'NUMBER') then + dbms_stats.convert_raw_value(rawval, cn); + return to_char(cn); + elsif (type = 'VARCHAR2') then + dbms_stats.convert_raw_value(rawval, cv); + return to_char(cv); + elsif (type = 'DATE') then + dbms_stats.convert_raw_value(rawval, cd); + return to_char(cd); + elsif (type = 'NVARCHAR2') then + dbms_stats.convert_raw_value(rawval, cnv); + return to_char(cnv); + elsif (type = 'ROWID') then + dbms_stats.convert_raw_value(rawval, cr); + return to_char(cnv); + elsif (type = 'CHAR') then + dbms_stats.convert_raw_value(rawval, cc); + return to_char(cc); + else + return 'UNKNOWN DATATYPE'; + end if; +end; +/ + diff --git a/vdh/dnfs_mounts.sql b/vdh/dnfs_mounts.sql new file mode 100644 index 0000000..3e4ce29 --- /dev/null +++ b/vdh/dnfs_mounts.sql @@ -0,0 +1,25 @@ +set linesize 230 +set pages 50000 + +column svrname format a15 +column dirname format a30 +column path format a20 +column local format a20 + +select + distinct + svr.svrname, + svr.dirname, + chn.path, + chn.local +from + v$dnfs_servers svr, + v$dnfs_channels chn +where + svr.svrname = chn.svrname +order by + svr.svrname, + svr.dirname, + chn.path, + chn.local +; diff --git a/vdh/dp_disable_tracing.sql b/vdh/dp_disable_tracing.sql new file mode 100644 index 0000000..e283669 --- /dev/null +++ b/vdh/dp_disable_tracing.sql @@ -0,0 +1,22 @@ +exec dbms_monitor.serv_mod_act_trace_disable(service_name => 'NAVIS_TRACING'); + +BEGIN + + for l_sessions in + ( select sid, serial# + from v$session + where service_name ='NAVIS_TRACING' + and sql_trace = 'ENABLED' + ) + + loop + + dbms_monitor.session_trace_disable + ( session_id => l_sessions.sid, + serial_num => l_sessions.serial# + ); + + end loop; + +END; +/ diff --git a/vdh/dp_enable_tracing.sql b/vdh/dp_enable_tracing.sql new file mode 100644 index 0000000..6ee2f9f --- /dev/null +++ b/vdh/dp_enable_tracing.sql @@ -0,0 +1,22 @@ +exec dbms_monitor.serv_mod_act_trace_enable(service_name => 'NAVIS_TRACING', WAITS => TRUE, BINDS => TRUE); + +BEGIN + + for l_sessions in + ( select sid, serial# + from v$session + where service_name ='NAVIS_TRACING' + ) + loop + + dbms_monitor.session_trace_enable + ( session_id => l_sessions.sid, + serial_num => l_sessions.serial#, + waits => true, + binds => true + ); + + end loop; + +END; +/ diff --git a/vdh/dp_list_sessions.sql b/vdh/dp_list_sessions.sql new file mode 100644 index 0000000..fbdd442 --- /dev/null +++ b/vdh/dp_list_sessions.sql @@ -0,0 +1,6 @@ +column machine format a20 + +select inst_id, sid, serial#, machine, process, sql_id, sql_child_number, last_call_et, sql_trace +from gv$session +where service_name = 'NAVIS_TRACING' +order by 1, 2; diff --git a/vdh/dplan.sql b/vdh/dplan.sql new file mode 100644 index 0000000..fa7123b --- /dev/null +++ b/vdh/dplan.sql @@ -0,0 +1,4 @@ +set lines 180 +select * from table(dbms_xplan.display_cursor('&sql_id','&child_no','typical')) +/ + diff --git a/vdh/dump_block.sql b/vdh/dump_block.sql new file mode 100644 index 0000000..ea59c06 --- /dev/null +++ b/vdh/dump_block.sql @@ -0,0 +1,2 @@ +@find_trace +alter system dump datafile &fileno block &blockno; diff --git a/vdh/dynamic_plan_query.sql b/vdh/dynamic_plan_query.sql new file mode 100644 index 0000000..c49cac8 --- /dev/null +++ b/vdh/dynamic_plan_query.sql @@ -0,0 +1,13 @@ +select plan_table_output +from table( dbms_xplan.display + ( 'dynamic_plan_table', + ( select rawtohex(address) || '_' || child_number + from v$sql_plan, v$session + where address = sql_address + and hash_value = sql_hash_value + and sid = 8 + and serial# = 822 + and rownum = 1 + ), 'serial' + ) + ); \ No newline at end of file diff --git a/vdh/dynamic_plan_table.sql b/vdh/dynamic_plan_table.sql new file mode 100644 index 0000000..95c697a --- /dev/null +++ b/vdh/dynamic_plan_table.sql @@ -0,0 +1,9 @@ +create or replace view dynamic_plan_table +as +select rawtohex(address) || '_' || child_number as statement_id, sysdate timestamp, + operation, options, object_node, object_owner, object_name, 0 object_instance, + optimizer, search_columns, id, parent_id, position, cost, cardinality, bytes, + other_tag, partition_start, partition_stop, partition_id, other, distribution, + cpu_cost, io_cost, temp_space, access_predicates, filter_predicates +from v$sql_plan; + diff --git a/vdh/enable_trace_in_other_session.sql b/vdh/enable_trace_in_other_session.sql new file mode 100644 index 0000000..27adcce --- /dev/null +++ b/vdh/enable_trace_in_other_session.sql @@ -0,0 +1,8 @@ +/* + + _level: 12 --> binds and waites + +*/ + + +exec dbms_system.set_ev(&_sid, &_serial, 10046, &_level,''); \ No newline at end of file diff --git a/vdh/enqwaits.sql b/vdh/enqwaits.sql new file mode 100644 index 0000000..caddc8f --- /dev/null +++ b/vdh/enqwaits.sql @@ -0,0 +1,466 @@ +/********************************************************************** + * File: enqwaits.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 15jan01 + * + * Description: + * + * This report is intended to provide a complete picture of the + * dependencies that ensue when session-based enqueues cause other + * sessions to "wait" (or be "blocked"). + * + * Modifications: + * TGorman 15jan01 written + *********************************************************************/ +REM +REM If your installation is running Oracle Apps R11+, then leave the following +REM two substitution variables containing blank values. +REM +REM If your database is not running Oracle Apps, then assign the string "/*" +REM (i.e. start comment) to the substitution variable START_ORACLE_APPS_CODE and +REM the string "*/" (i.e. end comment) to the substitution variables +REM END_ORACLE_APPS_CODE. +REM +define START_ORACLE_APPS_CODE="" +define END_ORACLE_APPS_CODE="" + +spool enqwaits +set echo on feedback on timing on termout off +create or replace procedure enqwaits + (b_GetRelatedSessions in boolean default FALSE) +is + -- + cursor get_sqltext(in_address in raw) + is + select SQL_TEXT + from SYS.V_$SQLTEXT + where ADDRESS = in_address + order by PIECE; + -- + cursor get_waiters + is + select SID, + TYPE, + DECODE(TYPE, + 'BL','Buffer hash table', + 'CF','Control File Transaction', + 'CI','Cross Instance Call', + 'CS','Control File Schema', + 'CU','Bind Enqueue', + 'DF','Data File', + 'DL','Direct-loader index-creation', + 'DM','Mount/startup db primary/secondary instance', + 'DR','Distributed Recovery Process', + 'DX','Distributed Transaction Entry', + 'FI','SGA Open-File Information', + 'FS','File Set', + 'IN','Instance Number', + 'IR','Instance Recovery Serialization', + 'IS','Instance State', + 'IV','Library Cache InValidation', + 'JQ','Job Queue', + 'KK','Redo Log "Kick"', + 'LS','Log Start/Log Switch', + 'MB','Master Buffer hash table', + 'MM','Mount Definition', + 'MR','Media Recovery', + 'PF','Password File', + 'PI','Parallel Slaves', + 'PR','Process Startup', + 'PS','Parallel Slaves Synchronization', + 'RE','USE_ROW_ENQUEUE Enforcement', + 'RT','Redo Thread', + 'RW','Row Wait', + 'SC','System Commit Number', + 'SH','System Commit Number HWM', + 'SM','SMON', + 'SQ','Sequence Number', + 'SR','Synchronized Replication', + 'SS','Sort Segment', + 'ST','Space Transaction', + 'SV','Sequence Number Value', + 'TA','Transaction Recovery', + 'TD','DDL enqueue', + 'TE','Extend-segment enqueue', + 'TM','DML enqueue', + 'TS','Temporary Segment', + 'TT','Temporary Table', + 'TX','Transaction', + 'UL','User-defined Lock', + 'UN','User Name', + 'US','Undo Segment Serialization', + 'WL','Being-written redo log instance', + 'WS','Write-atomic-log-switch global enqueue', + 'XA','Instance Attribute', + 'XI','Instance Registration', + decode(substr(TYPE,1,1), + 'L','Library Cache ('||substr(TYPE,2,1)||')', + 'N','Library Cache Pin ('||substr(TYPE,2,1)||')', + 'Q','Row Cache ('||substr(TYPE,2,1)||')', + '????')) LOCK_TYPE, + REQUEST, + DECODE(REQUEST, + 0, '', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + '') MODE_REQUESTED, + ID1, + ID2 + from SYS.V_$LOCK + where REQUEST > 0 + and LMODE = 0; + -- + cursor get_blockers(in_type in varchar2, + in_id1 in number, + in_id2 in number, + in_sid in number) + is + select SID, + TYPE, + DECODE(TYPE, + 'BL','Buffer hash table', + 'CF','Control File Transaction', + 'CI','Cross Instance Call', + 'CS','Control File Schema', + 'CU','Bind Enqueue', + 'DF','Data File', + 'DL','Direct-loader index-creation', + 'DM','Mount/startup db primary/secondary instance', + 'DR','Distributed Recovery Process', + 'DX','Distributed Transaction Entry', + 'FI','SGA Open-File Information', + 'FS','File Set', + 'IN','Instance Number', + 'IR','Instance Recovery Serialization', + 'IS','Instance State', + 'IV','Library Cache InValidation', + 'JQ','Job Queue', + 'KK','Redo Log "Kick"', + 'LS','Log Start/Log Switch', + 'MB','Master Buffer hash table', + 'MM','Mount Definition', + 'MR','Media Recovery', + 'PF','Password File', + 'PI','Parallel Slaves', + 'PR','Process Startup', + 'PS','Parallel Slaves Synchronization', + 'RE','USE_ROW_ENQUEUE Enforcement', + 'RT','Redo Thread', + 'RW','Row Wait', + 'SC','System Commit Number', + 'SH','System Commit Number HWM', + 'SM','SMON', + 'SQ','Sequence Number', + 'SR','Synchronized Replication', + 'SS','Sort Segment', + 'ST','Space Transaction', + 'SV','Sequence Number Value', + 'TA','Transaction Recovery', + 'TD','DDL enqueue', + 'TE','Extend-segment enqueue', + 'TM','DML enqueue', + 'TS','Temporary Segment', + 'TT','Temporary Table', + 'TX','Transaction', + 'UL','User-defined Lock', + 'UN','User Name', + 'US','Undo Segment Serialization', + 'WL','Being-written redo log instance', + 'WS','Write-atomic-log-switch global enqueue', + 'XA','Instance Attribute', + 'XI','Instance Registration', + decode(substr(TYPE,1,1), + 'L','Library Cache ('||substr(TYPE,2,1)||')', + 'N','Library Cache Pin ('||substr(TYPE,2,1)||')', + 'Q','Row Cache ('||substr(TYPE,2,1)||')', + '????')) LOCK_TYPE, + LMODE, + DECODE(LMODE, + 0, '--Waiting--', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + '') MODE_HELD, + ID1, + ID2 + from SYS.V_$LOCK + where TYPE = in_type + and ID1 = in_id1 + and ID2 = in_id2 + and SID <> in_sid + and LMODE > 0 + and REQUEST = 0; + -- + cursor get_related_sessions(in_sid in number) + is + select S.SID, + S.SERIAL# SNBR, + S.LOGON_TIME, + S.USERNAME, + S.SQL_ADDRESS, + S.STATUS, + S.OSUSER, + P.SPID, + T.XIDUSN || '.' || T.XIDSLOT || '.' || T.XIDSQN TXN_ID, + T.STATUS TXN_STATUS, + T.START_TIME TXN_START_TIME, + T.USED_UBLK, + T.USED_UREC + from SYS.V_$SESSION S1, + SYS.V_$SESSION S, + SYS.V_$PROCESS P, + SYS.V_$TRANSACTION T + where S1.SID = in_sid + and S.PADDR = S1.PADDR + and P.ADDR = S1.PADDR + and T.ADDR (+) = S1.TADDR + order by decode(S.SID, in_sid, 0, S.SID); + -- + cursor get_dml_locks(in_sid in number) + is + select o.OWNER, + o.OBJECT_TYPE type, + o.OBJECT_NAME name, + decode(l.LMODE, + 0, 'REQUESTED=' || + DECODE(l.REQUEST, + 0, '--Waiting--', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + ''), + 'HELD=' || + DECODE(l.LMODE, + 0, '--Waiting--', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + '')) lmode + from sys.V_$LOCK l, + sys.DBA_OBJECTS o + where l.sid = in_sid + and l.type = 'TM' + and o.object_id = l.id1; + -- + v_waiter_username varchar2(30); + v_blocker_username varchar2(30); + v_errcontext varchar2(80); + v_errmsg varchar2(300); + -- +begin +-- +v_errcontext := 'open/fetch get_waiters'; +for w in get_waiters loop + -- + dbms_output.put_line('.'); + v_errcontext := 'open/fetch get_related_sessions (waiters)'; + for rw in get_related_sessions(w.sid) loop + -- + if w.sid = rw.sid then + -- + v_waiter_username := rw.username; + -- +&&START_ORACLE_APPS_CODE + v_errcontext := 'query waiters OraApps user info'; + begin + select u.user_name + into v_waiter_username + from apps.fnd_logins l, + apps.fnd_user u + where l.spid = rw.spid + and l.login_name = rw.osuser + and l.end_time is null + and l.start_time = + (select max(ll.start_time) + from apps.fnd_logins ll + where ll.spid = l.spid + and ll.end_time is null) + and u.user_id = l.user_id; + exception + when no_data_found then + v_waiter_username := ''; + when too_many_rows then + null; + end; +&&END_ORACLE_APPS_CODE + -- + v_errcontext := 'PUT_LINE waiters session/lock info'; + dbms_output.put_line(substr('Waiter: SID=' || rw.sid || + ' (' || rw.status || '), Logged on at ' || + to_char(rw.logon_time,'DD-MON HH24:MI'),1,78)); + dbms_output.put_line('....... REQUESTED LOCK|MODE=' || + w.type || ' (' || w.lock_type || + ') | ' || w.mode_requested || + ' (' || w.id1 || ',' || w.id2 || ')'); + dbms_output.put_line('....... AppsUser=' || v_waiter_username); + dbms_output.put_line('....... OS PID=' || rw.spid); + -- + else + -- + if b_GetRelatedSessions = FALSE then + -- + exit; -- ...exit from "get_related_sessions" cursor loop + -- + end if; + -- + v_errcontext := 'PUT_LINE related waiters session info'; + dbms_output.put_line(substr('... Related waiting SID=' || + rw.sid || ' (' || rw.status || + '), Logged on at ' || + to_char(rw.logon_time,'DD-MON HH24:MI'),1,78)); + -- + end if; + -- + dbms_output.put_line('.... TXN ID=' || rw.txn_id || + ' (' || rw.txn_status || ') started=' || + rw.txn_start_time || ' undo=' || rw.used_ublk || 'b/' || + rw.used_urec || 'r'); + -- + v_errcontext := 'open/fetch get_dml_locks (waiters)'; + for d in get_dml_locks(rw.sid) loop + -- + dbms_output.put_line(substr('....... DML Lock: ' || + d.owner || '.' || d.name || ' (' || d.type || ') - LOCK ' || + d.lmode,1,78)); + -- + v_errcontext := 'fetch/close get_dml_locks (waiters)'; + -- + end loop; /* end of "get_dml_locks (waiters)" cursor loop */ + -- + dbms_output.put_line('.... SQL Statement currently executing:'); + v_errcontext := 'open/fetch waiters get_sqltext'; + for t in get_sqltext(rw.sql_address) loop + -- + dbms_output.put_line('....... ' || t.sql_text); + -- + v_errcontext := 'fetch/close waiters get_sqltext'; + -- + end loop; /* end of "get_sqltext" cursor loop */ + -- + v_errcontext := 'fetch/close get_related_sessions (waiters)'; + -- + end loop; /* end of "get_related_sessions (waiters)" cursor loop */ + -- + v_errcontext := 'open/fetch get_blockers'; + for b in get_blockers(w.type, w.id1, w.id2, w.sid) loop + -- + v_errcontext := 'open/fetch get_related_sessions (blockers)'; + for rb in get_related_sessions(b.sid) loop + -- + if b.sid = rb.sid then + -- + v_blocker_username := rb.username; + -- + &&START_ORACLE_APPS_CODE + v_errcontext := 'query blockers OraApps user info'; + begin + select u.user_name + into v_blocker_username + from apps.fnd_logins l, + apps.fnd_user u + where l.spid = rb.spid + and l.login_name = rb.osuser + and l.end_time is null + and l.start_time = + (select max(ll.start_time) + from apps.fnd_logins ll + where ll.spid = l.spid + and ll.end_time is null) + and u.user_id = l.user_id; + exception + when no_data_found then + v_blocker_username := ''; + when too_many_rows then + null; + end; + &&END_ORACLE_APPS_CODE + -- + v_errcontext := 'PUT_LINE blockers session/lock info'; + dbms_output.put_line(substr('==>BLOCKER: SID=' || rb.sid || + ',' || rb.snbr || + ' (' || rb.status || '), Logged on at ' || + to_char(rb.logon_time,'DD-MON HH24:MI'),1,78)); + dbms_output.put_line('........... HELD LOCK|MODE=' || + b.type || ' (' || b.lock_type || + ') | ' || b.mode_held); + dbms_output.put_line('........... AppsUser=' || + v_blocker_username); + dbms_output.put_line('........... OS PID=' || rb.spid); + -- + else + -- + if b_GetRelatedSessions = FALSE then + -- + exit; -- ...exit from "get_related_sessions" cursor loop + -- + end if; + -- + v_errcontext := 'PUT_LINE related blockers session info'; + dbms_output.put_line(substr('...... Related BLOCKER: SID=' + || rb.sid || ' (' || rb.status || + '), Logged on at ' || + to_char(rb.logon_time,'DD-MON HH24:MI'),1,78)); + -- + end if; + -- + dbms_output.put_line('....... TXN ID=' || rb.txn_id || + ' (' || rb.txn_status || ') started=' || + rb.txn_start_time || ' undo=' || rb.used_ublk || 'b/' || + rb.used_urec || 'r'); + -- + v_errcontext := 'open/fetch get_dml_locks (blockers)'; + for d in get_dml_locks(rb.sid) loop + -- + dbms_output.put_line(substr('........... DML Lock: ' || + d.owner || '.' || d.name || ' (' || d.type || ') - LOCK ' || + d.lmode,1,78)); + -- + v_errcontext := 'fetch/close get_dml_locks (blockers)'; + -- + end loop; /* end of "get_dml_locks (blockers)" cursor loop */ + -- + dbms_output.put_line('....... SQL currently executing (not necessarily the blocking SQL):'); + v_errcontext := 'open/fetch get_sqltext (blockers)'; + for t in get_sqltext(rb.sql_address) loop + -- + dbms_output.put_line('........... ' || t.sql_text); + -- + v_errcontext := 'fetch/close get_sqltext (blockers)'; + -- + end loop; /* end of "get_sqltext (blockers)" cursor loop */ + -- + v_errcontext := 'fetch/close get_related_sessions (blockers)'; + -- + end loop; /* end of "get_related_sessions (blockers)" cursor loop */ + -- + v_errcontext := 'fetch/close get_blockers'; + -- + end loop; /* end of "get_blockers" cursor loop */ + -- + v_errcontext := 'fetch/close get_waiters'; + -- +end loop; /* end of "get_waiters" cursor loop */ +-- +exception + when others then + v_errmsg := substr(sqlerrm, 1, 300); + raise_application_error(-20001, v_errcontext||': '||v_errmsg); +end enqwaits; +/ +set termout on +show errors +spool off \ No newline at end of file diff --git a/vdh/esfc_hit_ratio.sql b/vdh/esfc_hit_ratio.sql new file mode 100644 index 0000000..361b698 --- /dev/null +++ b/vdh/esfc_hit_ratio.sql @@ -0,0 +1,64 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: esfc_hit_ratio.sql +-- +-- Purpose: Calculates a psuedo hit ratio for cell flash cache on Exadata storage. +-- +-- Author: Kerry Osborne +-- +-- Description: +-- +-- The script uses the total number of cell single block physical read" events +-- plus the total number of "cell multiblock physical read" events as an +-- approximation of the total number of reads and compares that to total number +-- of cell flash cache hits. +-- +-- +-- Note: This script does not produce accurate results. The calculated +-- hit ratio will be overstated. A better approach is to evaluate +-- average access times for read operations such as the +-- "cell single block physical read" event. Cache hits should be +-- under 1ms while missed will be on the order of a few ms. +-- +-- In fact, the results may be wildy overstated in cases where +-- objects are aggressively cached in ESFC due to the storage +-- parameter CELL_FLASH_CACHE being set to KEEP, as this causes +-- Smart Scans to use the flash cache as well. +-- +-- See kerryosborne.oracle-guy.com for additional information. +--------------------------------------------------------------------------------------- +set pages 999 +set lines 140 + +column c1 heading 'Event|Name' format a30 trunc +column c2 heading 'Total|Waits' format 99,999,999 +column c3 heading 'Seconds|Waiting' format 9,999,999 +column c5 heading 'Average|Wait|(ms)' format 9999.9 +column c6 heading 'Flash Cache Hits' for 999,999,999,999 +col hit_ratio heading 'Hit Ratio' for 999.999 + + +select + 'cell single + multiblock reads' c1, + c2, c3, c5, c6, + c6/decode(nvl(c2,0),0,1,c2) hit_ratio +from ( +select + sum(total_waits) c2, + avg(value) c6, + sum(time_waited / 100) c3, + avg((average_wait /100)*1000) c5 +from + sys.v_$system_event, v$sysstat ss +where + event in ( + 'cell single block physical read', + 'cell multiblock physical read') +and + name like 'cell flash cache read hits' +and + event not like '%Idle%') +order by + c3 +; +ttitle off diff --git a/vdh/esfc_keep_tables.sql b/vdh/esfc_keep_tables.sql new file mode 100644 index 0000000..de5f577 --- /dev/null +++ b/vdh/esfc_keep_tables.sql @@ -0,0 +1,6 @@ +select owner, table_name, status, last_analyzed, num_rows, blocks, degree, cell_flash_cache +from dba_tables +where owner like nvl('&owner',owner) +and table_name like nvl('&table_name',table_name) +and cell_flash_cache like nvl('&cell_flash_cache','KEEP') +/ diff --git a/vdh/estimate_compression_ratio.sql b/vdh/estimate_compression_ratio.sql new file mode 100644 index 0000000..a292d78 --- /dev/null +++ b/vdh/estimate_compression_ratio.sql @@ -0,0 +1,53 @@ +-- uses the statistics data to estimate the compression ratio of OLTP / HCC compressed table partitions +-- for this it estimates the uncompressed table size by multiplying the average row length with the number of rows and devide the result by the block size +-- to get the current (compressed) table size, the number of blocks (as stored by the cbo) is multiplied by the block size, rather then getting it from dba_segments. +-- this to avoid errors when the cbo statistics are stale (as the calculation for the compressed and uncompressed size are based upon the same data) + +column compress_for format a20 heading "compression method" +column max_compr_size_mb format 9G999G999D99 heading "max|compressed size (MB)" +column min_compr_size_mb format 9G999G999D99 heading "min|compressed size (MB)" +column avg_compr_size_mb format 9G999G999D99 heading "avg|compressed size (MB)" +column max_uncompr_size_mb format 999G999G999D99 heading "max|uncompressed size (MB)" +column min_uncompr_size_mb format 999G999G999D99 heading "min|uncompressed size (MB)" +column avg_uncompr_size_mb format 999G999G999D99 heading "avg|uncompressed size (MB)" +column max_pct_compression format 990D00 heading "max|% compression" +column min_pct_compression format 990D00 heading "min|% compression" +column avg_pct_compression format 990D00 heading "avg|% compression" +column nbr_samples format 9G999G999 heading "# samples" + +select + prt.compress_for, + max(prt.avg_row_len * prt.num_rows)/1024/1024 max_uncompr_size_mb, + min(prt.avg_row_len * prt.num_rows)/1024/1024 min_uncompr_size_mb, + avg(prt.avg_row_len * prt.num_rows)/1024/1024 avg_uncompr_size_mb, + max(prt.blocks * tbs.block_size)/1024/1024 max_compr_size_mb, + min(prt.blocks * tbs.block_size)/1024/1024 min_compr_size_mb, + avg(prt.blocks * tbs.block_size)/1024/1024 avg_compr_size_mb, + max(100 - (100 / (prt.avg_row_len * prt.num_rows)) * (prt.blocks * tbs.block_size)) max_pct_compression, + min(100 - (100 / (prt.avg_row_len * prt.num_rows)) * (prt.blocks * tbs.block_size)) min_pct_compression, + avg(100 - (100 / (prt.avg_row_len * prt.num_rows)) * (prt.blocks * tbs.block_size)) avg_pct_compression, + count(*) nbr_samples +from + dba_tab_partitions prt, + dba_tablespaces tbs +where + prt.tablespace_name = tbs.tablespace_name + -- only compressed partitions + and prt.compress_for in ('OLTP', 'QUERY LOW', 'QUERY HIGH', 'ARCHIVE LOW', 'ARCHIVE HIGH') + -- no subpartitioned tables + and prt.subpartition_count = 0 + -- only partitions that are analyzed + and prt.last_analyzed is not null + -- filter out empty partitions + and prt.avg_row_len > 0 + and prt.num_rows > 0 + and prt.blocks > 0 + -- filter out too small tables (less than 100MB worth of blocks), as they skew up the result + and prt.blocks >= (104857600 / tbs.block_size) + -- filter out tables that are compressed not smaller than uncompressed (perhaps compression enabled after loading and not yet moved?) + and (100 / (prt.avg_row_len * prt.num_rows)) * (prt.blocks * tbs.block_size) < 100 +group by + prt.compress_for +order by + prt.compress_for +/ diff --git a/vdh/expiring_accounts.sql b/vdh/expiring_accounts.sql new file mode 100644 index 0000000..3514056 --- /dev/null +++ b/vdh/expiring_accounts.sql @@ -0,0 +1,23 @@ +column username format a30 +column profile format a20 +column account_status format a15 +column creation_date format a20 +column expiry_date format a11 + + +select + username, profile, account_status, + to_char(created, 'DD/MM/YYYY HH24:MI:SS') creation_date, + to_char(expiry_date, 'DD/MM/YYYY') expiry_date +from + dba_users +where + ( account_status = 'EXPIRED' + or account_status = 'EXPIRED(GRACE)' + ) + or ( account_status = 'OPEN' + and expiry_date is not null + ) +order by + username +; diff --git a/vdh/expiring_passwords.sql b/vdh/expiring_passwords.sql new file mode 100644 index 0000000..fcd1f4b --- /dev/null +++ b/vdh/expiring_passwords.sql @@ -0,0 +1,43 @@ +set linesize 200 + +column username format a30 +column created format a10 +column lock_date format a10 +column expiry_date format a10 +column profile format a20 +column account_status format a25 +column default_tablespace format a20 +column temporary_tablespace format a20 +column initial_rsrc_consumer_group format a30 + +select + username, + to_char(created, 'DD/MM/YYYY') created, + profile, + account_status, + to_char(lock_date,'DD/MM/YYYY') lock_date, + to_char(expiry_date,'DD/MM/YYYY') expiry_date, + default_tablespace, + temporary_tablespace, + initial_rsrc_consumer_group +from + dba_users +where + expiry_date is not null + and username not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP','APPQOSSYS', 'ANONYMOUS', + 'CTXSYS','EXFSYS','MDSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA','XDB','DATAPUMP_EXP_FULL_DATABASE', + 'DATAPUMP_IMP_FULL_DATABASE','ADM_PARALLEL_EXECUTE_TASK','CTXAPP','DBFS_ROLE','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_SELECT_ROLE', + 'ORDADMIN','XDBADMIN','XDB_SET_INVOKER','XDB_WEBSERVICES','XDB_WEBSERVICES_OVER_HTTP','XDB_WEBSERVICES_WITH_PUBLIC', + 'AUTHENTICATEDUSER','JMXSERVER','OLAPSYS' + ) +order by + username +; diff --git a/vdh/extmap.sql b/vdh/extmap.sql new file mode 100644 index 0000000..a51835b --- /dev/null +++ b/vdh/extmap.sql @@ -0,0 +1,62 @@ +/********************************************************************** + * File: extmap.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 26-Aug-99 + * + * Description: + * Simple report against the DBA_EXTENTS view for Oracle8 + * databases. This report is intended to be run periodically + * (i.e. daily or several times daily), each time overwriting + * itself. + * + * The report's main purpose is to provide a mapping of objects + * and their extents by the datafiles in the database, so that + * in the event of the need for an "object point-in-time" + * recovery, only the necessary datafiles need to be restored + * and recovered in the CLONE database. + * + * This report is one of those you hope you never have to use, + * but if you need it, you'll kiss me full on the lips for giving + * it to you! + * + * Modifications: + *********************************************************************/ +whenever oserror exit failure +whenever sqlerror exit failure + +set pagesize 1000 linesize 500 trimspool on echo off feedback off timing off - + pause off verify off recsep off + +break on owner + +col instance new_value V_INSTANCE noprint + +select lower(replace(t.instance,chr(0),'')) instance +from v$thread t, + v$parameter p +where p.name = 'thread' +and t.thread# = to_number(decode(p.value,'0','1',p.value)); + +col seg format a30 heading "Owner.Name" word_wrap +col location format a43 heading "TableSpace:FileName" word_wrap +col exts format 990 heading "#Exts" + +select e.owner || '.' || e.segment_name || + decode(e.partition_name,'','',' ('||e.partition_name||')') seg, + e.tablespace_name || ':' || f.file_name location, + count(distinct e.block_id) exts +from sys.dba_extents e, + sys.dba_data_files f +where e.segment_type in + ('CLUSTER','LOBINDEX','LOBSEGMENT','TABLE','TABLE PARTITION') +and f.file_id = e.relative_fno +group by e.owner || '.' || e.segment_name || + decode(e.partition_name,'','',' ('||e.partition_name||')'), + e.tablespace_name || ':' || f.file_name +order by 1, 2 + +set termout off +spool extmap_&&V_INSTANCE +/ +exit success diff --git a/vdh/filestat.sql b/vdh/filestat.sql new file mode 100644 index 0000000..40c65de --- /dev/null +++ b/vdh/filestat.sql @@ -0,0 +1,56 @@ +/********************************************************************** + * File: filestat.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 20-Sep-99 + * + * Description: + * Report against the V$FILESTAT table to detect the tablespace + * with the greatest I/O load, according the volume of reads and + * writes, weighted against the average I/O time... + * + * Because this script depends on the timing information in the + * V$FILESTAT view, please be sure to have the configuration + * TIMED_STATISTICS set to TRUE to get the full value of this + * report... + * + * Modifications: + *********************************************************************/ +col ts_name format a25 truncate +col sort0 noprint +col io format a43 heading "Reads Writes|Rqsts,Blks,#Bks/Rqst" +col rds format a25 heading "Reads|Rds/Bks(#bks/Rd)" +col wrts format a25 heading "Writes|Wrts/Bks(#bks/Wrt)" +col avgiotim format 999990.0 + +set echo on feedback off timing off trimspool on pages 1000 lines 500 + +col instance new_value V_INSTANCE noprint +select lower(replace(t.instance,chr(0),'')) instance +from v$thread t, + v$parameter p +where p.name = 'thread' +and t.thread# = to_number(decode(p.value,'0','1',p.value)); +spool filestat_&&V_INSTANCE + +select avg(nvl(s.avgiotim,0)) * sum(nvl(s.phyrds,0) + nvl(s.phywrts,0)) sort0, + f.tablespace_name ts_name, + ltrim(to_char(sum(s.phyrds))) || ',' || + ltrim(to_char(sum(s.phyblkrd))) || ',' || + ltrim(to_char(sum(s.phyblkrd)/ + decode(sum(s.phyrds),0,1,sum(s.phyrds)),'990.0')) + || ' | ' || + ltrim(to_char(sum(s.phywrts))) || ',' || + ltrim(to_char(sum(s.phyblkwrt))) || ',' || + ltrim(to_char(sum(s.phyblkwrt)/ + decode(sum(s.phywrts),0,1,sum(s.phywrts)),'990.0')) io, + avg(s.avgiotim) avgiotim +from v$filestat s, + dba_data_files f +where f.file_id = s.file# +group by + f.tablespace_name +order by sort0 desc, ts_name +/ + +spool off diff --git a/vdh/find_trace.sql b/vdh/find_trace.sql new file mode 100644 index 0000000..814c5a7 --- /dev/null +++ b/vdh/find_trace.sql @@ -0,0 +1,9 @@ +column tracefile_name for a120 + +select + value tracefile_name +from + v$diag_info +where + name = 'Default Trace File' +; diff --git a/vdh/findilos.sh b/vdh/findilos.sh new file mode 100644 index 0000000..95b61c3 --- /dev/null +++ b/vdh/findilos.sh @@ -0,0 +1,157 @@ +#!/bin/bash +# +# findilos - Search a local network segment for iLOs +# The iLO is the Integrated Lights-Out management processor +# used on HP ProLiant and BladeSystem servers +# +scriptversion="1.0" +# +# Author: iggy@nachotech.com +# +# Website: http://blog.nachotech.com +# +# Requires: tr sed expr curl nmap +# +# Tested with: Nmap 4.20, curl 7.17.1, RHEL4 +# +# Note: Discovery of an iLO is dependent upon the Virtual Media port +# being set to the default of 17988. If this has been changed +# by the iLO administrator, then this script will NOT find it. +# +# Also, if the iLO XML Reply Data Return has been Disabled by +# the iLO administrator, this script will not be able to +# gather any information about the server. It will still be +# discovered, but all you will see is its IP address. +# + +# GLOBAL VARIABLES + +scriptname="findilos" +iloips="/tmp/tmpilos.$$" +iloxml="/tmp/tmpiloxml.$$" +ilohwvers="/tmp/tmpilohwvers.$$" + +declare -i ilosfound=0 + +# FUNCTIONS + +function parseiloxml { + fgrep "$1" $iloxml > /dev/null 2>&1 + if [ $? -ne 0 ] + then + # tag not found in xml output, return empty string + parsedstring="N/A" + else + # tag was found - now we parse it from the output + tempstring=$( cat $iloxml | tr -d -c [:print:] | sed "s/^.*<$1>//" | sed "s/<.$1.*//") + # trim off leading and trailing whitespace + parsedstring=`expr match "$tempstring" '[ \t]*\(.*[^ \t]\)[ \t]*$'` + fi +} + +function is_installed { + which $1 > /dev/null 2>&1 + if [ $? -ne 0 ] + then + printf "\nERROR: %s not installed.\n\n" $1 + exit 255 + fi +} + +# MAIN + +# check for tools that we depend upon + +is_installed tr +is_installed sed +is_installed expr +is_installed curl +is_installed nmap + +# check syntax - should have 1 and only 1 parameter on cmdline + +if [ $# -ne 1 ]; then + printf "%s %s ( http://blog.nachotech.com/ )\n" $scriptname $scriptversion + printf "Usage: %s {target network specification}\n" $scriptname + printf "TARGET NETWORK SPECIFICATION:\n" + printf " Can pass hostnames, IP addresses, networks, etc.\n" + printf " Ex: server1.company.com, company.com/24, 192.168.0.1/16, 10.0.0-255.1-254\n" + printf "EXAMPLE:\n" + printf " %s 16.32.64.0/22\n" $scriptname + exit 255 +fi + +iprange=$1 + +# prepare lookup file for iLO hardware versions + +cat > $ilohwvers << EOF +iLO-1 shows hw version ASIC: 2 +iLO-2 shows hw version ASIC: 7 +iLO-3 shows hw version ASIC: 8 +iLO-3 shows hw version ASIC: 9 +iLO-4 shows hw version ASIC: 12 +iLO-5 shows hw version ASIC: 21 +i-iLO shows hw version T0 +EOF + +# +# scan a range of IP addresses looking for an +# open tcp port 17988 (the iLO virtual media port) +# + +printf "Scanning..." + +nmap -n -P0 -sS -p 17988 -oG - $iprange | fgrep /open/ | awk '{print $2}' > $iloips + +printf "\n\n" + +# +# open and read the list of IP addresses one at a time +# + +exec 3< $iloips + +echo "--------------- ------ -------- ------------ ------------------------- -----------------------------" +echo "iLO IP Address iLO HW iLO FW Server S/N Server Model License key" +echo "--------------- ------ -------- ------------ ------------------------- -----------------------------" + +while read iloip <&3 ; do + ilosfound=$ilosfound+1 + # + # attempt to read the xmldata from iLO, no password required + # + curl --proxy "" --fail --silent --max-time 3 http://$iloip/xmldata?item=All > $iloxml + curl -sqk "http://$iloip/xmldata?item=CpqKey" >> $iloxml + + + # + # parse out the Server model (server product name) + # from the XML output + # + + parseiloxml SPN; servermodel=$parsedstring + parseiloxml SBSN; sernum=$parsedstring + parseiloxml PN; ilotype=$parsedstring + parseiloxml FWRI; ilofirmware=$parsedstring + parseiloxml HWRI; ilohardware=$parsedstring + parseiloxml KEY; ilolicensekey=$parsedstring + + ilohwver=$(grep "$ilohardware" $ilohwvers|awk '{print $1}') + if [ "$ilohwver" == "" ]; then + ilohwver="N/A" + fi + + if [ "$sernum" == "" ]; then + sernum="N/A" + fi + + printf "%-15s %-6s %-8s %-12s %-25s %s\n" $iloip "$ilohwver" "$ilofirmware" "$sernum" "$servermodel" "$ilolicensekey" + +done + + +printf "\n%d iLOs found on network target %s.\n\n" $ilosfound $iprange +rm -f $iloips $iloxml $ilohwvers + +exit 0 diff --git a/vdh/flashback_space_usage.sql b/vdh/flashback_space_usage.sql new file mode 100644 index 0000000..25e0613 --- /dev/null +++ b/vdh/flashback_space_usage.sql @@ -0,0 +1,13 @@ +set linesize 120 +column SL_MB format 999G999D99 +column SU_MB format 999G999D99 +column SR_MB format 999G999D99 +column SF_MB format 999G999D99 +column SF_PCT format 999D00 +column nbr_files format 9G999G999G999 +column name format a30 + +select name, space_limit/1024/1024 SL_MB, space_used/1024/1024 SU_MB, space_reclaimable/1024/1024 SR_MB, + (space_limit - space_used + space_reclaimable)/1024/1024 SF_MB, (100 * (space_limit - space_used + space_reclaimable)/space_limit ) SF_PCT, + number_of_files nbr_files +from v$recovery_file_dest; \ No newline at end of file diff --git a/vdh/flashback_space_usage2.sql b/vdh/flashback_space_usage2.sql new file mode 100644 index 0000000..2dcfa74 --- /dev/null +++ b/vdh/flashback_space_usage2.sql @@ -0,0 +1,145 @@ +o/*select fusg.file_type, decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, round(nvl(fusg.space_used, 0)/ra.space_limit, 4) * 100), + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, round(nvl(fusg.space_reclaimable, 0)/ra.space_limit, 4) * 100), + nvl2(ra.name, fusg.number_of_files, 0) + +SQL> descr v$flash_recovery_area_usage + Name Null? Type + ----------------------------------------------------------------- -------- -------------------------------------------- + FILE_TYPE VARCHAR2(12) + PERCENT_SPACE_USED NUMBER + PERCENT_SPACE_RECLAIMABLE NUMBER + NUMBER_OF_FILES NUMBER + + + +*/ +select fusg.file_type, decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, nvl(ra.space_limit, 0))/1024/1024 space_limit_mb, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, nvl(fusg.space_used, 0)) space_used, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, nvl(fusg.space_reclaimable, 0)) space_reclaimable, + nvl2(ra.name, fusg.number_of_files, 0) number_of_files +from v$recovery_file_dest ra, + ( select 'CONTROLFILE' file_type, + sum( case when ceilasm = 1 and name like '+%' + then ceil(((block_size*file_size_blks)+1)/1048576)*1048576 + else block_size*file_size_blks + end + ) space_used, + 0 space_reclaimable, count(*) number_of_files + from v$controlfile, + ( select /*+ no_merge*/ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + union all + select 'ONLINELOG' file_type, + sum( case when ceilasm = 1 and member like '+%' + then ceil((l.bytes+1)/1048576)*1048576 + else l.bytes + end + ) space_used, + 0 space_reclaimable, count(*) number_of_files + from ( select group#, bytes + from v$log + union + select group#, bytes + from v$standby_log + ) l, v$logfile lf, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where l.group# = lf.group# + and lf.is_recovery_dest_file = 'YES' + union all + select 'ARCHIVELOG' file_type, + sum(al.file_size) space_used, + sum( case when dl.rectype = 11 + then al.file_size + else 0 + end + ) space_reclaimable, + count(*) number_of_files + from ( select recid, + case when ceilasm = 1 and name like '+%' + then ceil(((blocks*block_size)+1)/1048576)*1048576 + else blocks * block_size + end file_size + from v$archived_log, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + and name is not null + ) al, + x$kccagf dl + where al.recid = dl.recid(+) + and dl.rectype(+) = 11 + union all + select 'BACKUPPIECE' file_type, + sum(bp.file_size) space_used, + sum ( case when dl.rectype = 13 + then bp.file_size + else 0 + end + ) space_reclaimable, + count(*) number_of_files + from ( select recid, + case when ceilasm = 1 and handle like '+%' + then ceil((bytes+1)/1048576)*1048576 + else bytes + end file_size + from v$backup_piece, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + and handle is not null + ) bp, + x$kccagf dl + where bp.recid = dl.recid(+) + and dl.rectype(+) = 13 + union all + select 'IMAGECOPY' file_type, + sum(dc.file_size) space_used, + sum( case when dl.rectype = 16 + then dc.file_size + else 0 end + ) space_reclaimable, + count(*) number_of_files + from ( select recid, + case when ceilasm = 1 and name like '+%' + then ceil(((blocks*block_size)+1)/1048576)*1048576 + else blocks * block_size + end file_size + from v$datafile_copy, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + and name is not null + ) dc, + x$kccagf dl + where dc.recid = dl.recid(+) + and dl.rectype(+) = 16 + union all + select 'FLASHBACKLOG' file_type, + nvl(fl.space_used, 0) space_used, + nvl(fb.reclsiz, 0) space_reclaimable, + nvl(fl.number_of_files, 0) number_of_files + from ( select sum( case when ceilasm = 1 and name like '+%' + then ceil((fl.bytes+1)/1048576)*1048576 + else bytes + end + ) space_used, + count(*) number_of_files + from v$flashback_database_logfile fl, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + ) fl, + ( select sum(to_number(fblogreclsiz)) reclsiz + from x$krfblog + ) fb + ) fusg + + + diff --git a/vdh/flush_pool.sql b/vdh/flush_pool.sql new file mode 100644 index 0000000..986d765 --- /dev/null +++ b/vdh/flush_pool.sql @@ -0,0 +1 @@ +alter system flush shared_pool; diff --git a/vdh/flush_sql.sql b/vdh/flush_sql.sql new file mode 100644 index 0000000..7add960 --- /dev/null +++ b/vdh/flush_sql.sql @@ -0,0 +1,20 @@ +set serveroutput on +set pagesize 9999 +set linesize 155 +var name varchar2(50) +accept sql_id - + prompt 'Enter value for sql_id: ' + +BEGIN + +select address||','||hash_value into :name +from v$sqlarea +where sql_id like '&&sql_id'; + +dbms_shared_pool.purge(:name,'C',1); + +END; +/ + +undef sql_id +undef name diff --git a/vdh/fra_usage.sql b/vdh/fra_usage.sql new file mode 100644 index 0000000..d5dcee1 --- /dev/null +++ b/vdh/fra_usage.sql @@ -0,0 +1,146 @@ +set linesize 150 + +column space_limit_mb format 9G999G999D99 +column space_used_mb format 9G999G999D99 +column space_reclaimable_mb format 9G999G999D99 +column percent_space_used format 00D99 +column percent_space_reclaimable format 00D99 + +compute sum of space_used_mb on report +compute sum of space_reclaimable_mb on report +compute sum of percent_space_used on report +compute sum of percent_space_reclaimable on report +compute sum of number_of_files on report; + +break on space_limit_mb on report + +select fusg.file_type, decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, nvl(ra.space_limit, 0))/1048576 space_limit_mb, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, nvl(fusg.space_used, 0))/1048576 space_used_mb, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, round(nvl(fusg.space_used, 0)/ra.space_limit, 4) * 100) percent_space_used, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, nvl(fusg.space_reclaimable, 0))/1048576 space_reclaimable_mb, + decode(nvl2(ra.name, ra.space_limit, 0), 0, 0, round(nvl(fusg.space_reclaimable, 0)/ra.space_limit, 4) * 100) percent_space_reclaimable, + nvl2(ra.name, fusg.number_of_files, 0) number_of_files +from v$recovery_file_dest ra, + ( select 'CONTROLFILE' file_type, + sum( case when ceilasm = 1 and name like '+%' + then ceil(((block_size*file_size_blks)+1)/1048576)*1048576 + else block_size*file_size_blks + end + ) space_used, + 0 space_reclaimable, count(*) number_of_files + from v$controlfile, + ( select /*+ no_merge*/ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + union all + select 'ONLINELOG' file_type, + sum( case when ceilasm = 1 and member like '+%' + then ceil((l.bytes+1)/1048576)*1048576 + else l.bytes + end + ) space_used, + 0 space_reclaimable, count(*) number_of_files + from ( select group#, bytes + from v$log + union + select group#, bytes + from v$standby_log + ) l, v$logfile lf, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where l.group# = lf.group# + and lf.is_recovery_dest_file = 'YES' + union all + select 'ARCHIVELOG' file_type, + sum(al.file_size) space_used, + sum( case when dl.rectype = 11 + then al.file_size + else 0 + end + ) space_reclaimable, + count(*) number_of_files + from ( select recid, + case when ceilasm = 1 and name like '+%' + then ceil(((blocks*block_size)+1)/1048576)*1048576 + else blocks * block_size + end file_size + from v$archived_log, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + and name is not null + ) al, + x$kccagf dl + where al.recid = dl.recid(+) + and dl.rectype(+) = 11 + union all + select 'BACKUPPIECE' file_type, + sum(bp.file_size) space_used, + sum ( case when dl.rectype = 13 + then bp.file_size + else 0 + end + ) space_reclaimable, + count(*) number_of_files + from ( select recid, + case when ceilasm = 1 and handle like '+%' + then ceil((bytes+1)/1048576)*1048576 + else bytes + end file_size + from v$backup_piece, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + and handle is not null + ) bp, + x$kccagf dl + where bp.recid = dl.recid(+) + and dl.rectype(+) = 13 + union all + select 'IMAGECOPY' file_type, + sum(dc.file_size) space_used, + sum( case when dl.rectype = 16 + then dc.file_size + else 0 end + ) space_reclaimable, + count(*) number_of_files + from ( select recid, + case when ceilasm = 1 and name like '+%' + then ceil(((blocks*block_size)+1)/1048576)*1048576 + else blocks * block_size + end file_size + from v$datafile_copy, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + where is_recovery_dest_file = 'YES' + and name is not null + ) dc, + x$kccagf dl + where dc.recid = dl.recid(+) + and dl.rectype(+) = 16 + union all + select 'FLASHBACKLOG' file_type, + nvl(fl.space_used, 0) space_used, + nvl(fb.reclsiz, 0) space_reclaimable, + nvl(fl.number_of_files, 0) number_of_files + from ( select sum( case when ceilasm = 1 and name like '+%' + then ceil((fl.bytes+1)/1048576)*1048576 + else bytes + end + ) space_used, + count(*) number_of_files + from v$flashback_database_logfile fl, + ( select /*+ no_merge */ ceilasm + from x$krasga + ) + ) fl, + ( select sum(to_number(fblogreclsiz)) reclsiz + from x$krfblog + ) fb + ) fusg +order by file_type; diff --git a/vdh/free.sql b/vdh/free.sql new file mode 100644 index 0000000..3802fac --- /dev/null +++ b/vdh/free.sql @@ -0,0 +1,55 @@ +-------------------------------------------------------- +-- free.sql +-- +-- This SQL Plus script lists freespace by tablespace +-------------------------------------------------------- + +column dummy noprint +column pct_used format 999.9 heading "%|Used" +column name format a16 heading "Tablespace Name" +column Kbytes format 999,999,999 heading "KBytes" +column used format 999,999,999 heading "Used" +column free format 999,999,999 heading "Free" +column largest format 999,999,999 heading "Largest" +column max_size format 999,999,999 heading "MaxPoss|Kbytes" +column pct_max_used format 999.9 heading "%|Max|Used" +break on report +compute sum of kbytes on report +compute sum of free on report +compute sum of used on report +select name, kbytes, used, free, pct_used, largest + from ( +select (select decode(extent_management,'LOCAL','*','') from dba_tablespaces +where tablespace_name = +b.tablespace_name) || nvl(b.tablespace_name, + nvl(a.tablespace_name,'UNKOWN')) name, + kbytes_alloc kbytes, + kbytes_alloc-nvl(kbytes_free,0) used, + nvl(kbytes_free,0) free, + ((kbytes_alloc-nvl(kbytes_free,0))/ + kbytes_alloc)*100 pct_used, + nvl(largest,0) largest, + nvl(kbytes_max,kbytes_alloc) Max_Size, + decode( kbytes_max, 0, 0, (kbytes_alloc/kbytes_max)*100) pct_max_used +from ( select sum(bytes)/1024 Kbytes_free, + max(bytes)/1024 largest, + tablespace_name + from sys.dba_free_space + group by tablespace_name ) a, + ( select sum(bytes)/1024 Kbytes_alloc, + sum(maxbytes)/1024 Kbytes_max, + tablespace_name + from sys.dba_data_files + group by tablespace_name + union all + select sum(bytes)/1024 Kbytes_alloc, + sum(maxbytes)/1024 Kbytes_max, + tablespace_name + from sys.dba_temp_files + group by tablespace_name )b +where a.tablespace_name (+) = b.tablespace_name + ) + where name like upper('%&2%') +order by &1 +/ + diff --git a/vdh/free_space.sql b/vdh/free_space.sql new file mode 100644 index 0000000..e79089b --- /dev/null +++ b/vdh/free_space.sql @@ -0,0 +1,40 @@ +-------------------------------------------------------- +-- free.sql +-- +-- This SQL Plus script lists freespace by tablespace +-------------------------------------------------------- + +column dummy noprint +column pct_used format 999.9 heading "%|Used" +column name format a16 heading "Tablespace Name" +column Kbytes format 999,999,999 heading "KBytes" +column used format 999,999,999 heading "Used" +column free format 999,999,999 heading "Free" +column largest format 999,999,999 heading "Largest" +column max_size format 999,999,999 heading "MaxPoss|Kbytes" +column pct_max_used format 999.9 heading "%|Max|Used" +break on report +compute sum of kbytes on report +compute sum of free on report +compute sum of used on report + +select nvl(b.tablespace_name, + nvl(a.tablespace_name,'UNKOWN')) name, + kbytes_alloc kbytes, + kbytes_alloc-nvl(kbytes_free,0) used, + nvl(kbytes_free,0) free, + ((kbytes_alloc-nvl(kbytes_free,0))/ + kbytes_alloc)*100 pct_used, + nvl(largest,0) largest +from ( select sum(bytes)/1024 Kbytes_free, + max(bytes)/1024 largest, + tablespace_name + from sys.dba_free_space + group by tablespace_name ) a, + ( select sum(bytes)/1024 Kbytes_alloc, + tablespace_name + from sys.dba_data_files + group by tablespace_name )b +where a.tablespace_name (+) = b.tablespace_name +order by &1 +/ \ No newline at end of file diff --git a/vdh/free_space_in_tempfile.sql b/vdh/free_space_in_tempfile.sql new file mode 100644 index 0000000..dc8fc26 --- /dev/null +++ b/vdh/free_space_in_tempfile.sql @@ -0,0 +1,38 @@ +col size_temp_files format 999G999G999G999 Heading "Size|Temp|Files" +col free_space_in_temp_files format 999G999G999G999 Heading "Free|Space|In|Temp|Files" +col free_space_in_sort_segment format 999G999G999G999 Heading "Free|Space|In|Sort|Segment" +col used_space_in_sort_segment format 999G999G999G999 Heading "Used|Space|In|Sort|Segment" +col total_free format 999G999G999G999 Heading "Total|Free" + +select tsh.tablespace_name, + dtf.omvang size_temp_files, + tsh.free_space_space_header free_space_in_temp_files, + nvl(ss.free_space_sort_segment,tsh.used_space_space_header) free_space_in_sort_segment, -- could be empty + nvl(ss.used_space_sort_segment,0) used_space_in_sort_segment, + tsh.free_space_space_header+nvl(ss.free_space_sort_segment,tsh.used_space_space_header) TOTAL_FREE +from ( select tablespace_name, + sum(bytes)/1024/1024 omvang + from dba_temp_files + group by tablespace_name + ) dtf, + ( select tablespace_name, + sum(BYTES_USED)/1024/1024 USED_SPACE_SPACE_HEADER, + sum(BYTES_FREE)/1024/1024 FREE_SPACE_SPACE_HEADER + from v$temp_space_header + group by tablespace_name + ) tsh, + ( select tablespace_name, + sum(USED_BLOCKS)/1024/1024 USED_SPACE_SORT_SEGMENT, + sum(FREE_BLOCKS)* par.value/1024/1024 FREE_SPACE_SORT_SEGMENT + from v$sort_segment ss, + v$parameter par + where par.name = 'db_block_size' + group by tablespace_name, value + ) ss +where dtf.tablespace_name = tsh.tablespace_name + and ss.tablespace_name (+) = dtf.tablespace_name +/ + + + + diff --git a/vdh/freq_histogram.sql b/vdh/freq_histogram.sql new file mode 100644 index 0000000..2bd0e36 --- /dev/null +++ b/vdh/freq_histogram.sql @@ -0,0 +1,13 @@ +select endpoint_value row_value, + curr_num - nvl(prev_num,0) row_count +from ( select endpoint_value, + endpoint_number curr_num, + lag(endpoint_number,1) over + ( order by endpoint_number + ) prev_num + from dba_tab_histograms + where owner = '&T_OWNER' + and table_name = '&T_TABLE' + and column_name = '&T_COLUMN' + ) +order by endpoint_value; diff --git a/vdh/fs.sql b/vdh/fs.sql new file mode 100644 index 0000000..4519a98 --- /dev/null +++ b/vdh/fs.sql @@ -0,0 +1,24 @@ +col sql_text for a60 wrap +set verify off +set pagesize 999 +set lines 155 +col username format a13 +col prog format a22 +col sid format 999 +col child_number format 99999 heading CHILD +col ocategory format a10 +col avg_etime format 9,999,999.99 +col avg_pio format 9,999,999.99 +col avg_lio format 999,999,999 +col etime format 9,999,999.99 + +select sql_id, child_number, plan_hash_value plan_hash, executions execs, +(elapsed_time/1000000)/decode(nvl(executions,0),0,1,executions) avg_etime, +buffer_gets/decode(nvl(executions,0),0,1,executions) avg_lio, +sql_text +from v$sql s +where upper(sql_text) like upper(nvl('&sql_text',sql_text)) +and sql_text not like '%from v$sql where sql_text like nvl(%' +and sql_id like nvl('&sql_id',sql_id) +order by 1, 2, 3 +/ diff --git a/vdh/fsx.sql b/vdh/fsx.sql new file mode 100644 index 0000000..1d82373 --- /dev/null +++ b/vdh/fsx.sql @@ -0,0 +1,61 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: fsx.sql +-- +-- Purpose: Find SQL and report whether it was Offloaded and % of I/O saved. +-- +-- Author: Kerry Osborne +-- +-- Usage: This scripts prompts for two values. +-- +-- sql_text: a piece of a SQL statement like %select col1, col2 from skew% +-- +-- sql_id: the sql_id of the statement if you know it (leave blank to ignore) +-- +-- Description: +-- +-- This script can be used to locate statements in the shared pool and +-- determine whether they have been executed via Smart Scans. +-- +-- It is based on the observation that the IO_CELL_OFFLOAD_ELIGIBLE_BYTES +-- column in V$SQL is only greater than 0 when a statement is executed +-- using a Smart Scan. The IO_SAVED_% column attempts to show the ratio of +-- of data received from the storage cells to the actual amount of data +-- that would have had to be retrieved on non-Exadata storage. Note that +-- as of 11.2.0.2, there are issues calculating this value with some queries. +-- +-- Note that the AVG_ETIME will not be acurate for parallel queries. The +-- ELAPSED_TIME column contains the sum of all parallel slaves. So the +-- script divides the value by the number of PX slaves used which gives an +-- approximation. +-- +-- Note also that if parallel slaves are spread across multiple nodes on +-- a RAC database the PX_SERVERS_EXECUTIONS column will not be set. +-- +-- See kerryosborne.oracle-guy.com for additional information. +--------------------------------------------------------------------------------------- +set pagesize 999 +set lines 190 +col sql_text format a70 trunc +col child format 99999 +col execs format 9,999 +col avg_etime format 99,999.99 +col "IO_SAVED_%" format 999.99 +col avg_px format 999 +col offload for a7 + +select sql_id, child_number child, plan_hash_value plan_hash, executions execs, +(elapsed_time/1000000)/decode(nvl(executions,0),0,1,executions)/ +decode(px_servers_executions,0,1,px_servers_executions/decode(nvl(executions,0),0,1,executions)) avg_etime, +px_servers_executions/decode(nvl(executions,0),0,1,executions) avg_px, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,'No','Yes') Offload, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,0,100*(IO_CELL_OFFLOAD_ELIGIBLE_BYTES-IO_INTERCONNECT_BYTES) +/decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,1,IO_CELL_OFFLOAD_ELIGIBLE_BYTES)) "IO_SAVED_%", +sql_text +from v$sql s +where upper(sql_text) like upper(nvl('&sql_text',sql_text)) +and sql_text not like 'BEGIN :sql_text := %' +and sql_text not like '%IO_CELL_OFFLOAD_ELIGIBLE_BYTES%' +and sql_id like nvl('&sql_id',sql_id) +order by 1, 2, 3 +/ diff --git a/vdh/fsx2.sql b/vdh/fsx2.sql new file mode 100644 index 0000000..5010c0a --- /dev/null +++ b/vdh/fsx2.sql @@ -0,0 +1,33 @@ +set verify off +set pagesize 999 +set lines 190 +col sql_text format a40 word_wrap +col child format 99999 +col execs format 9,999 +col avg_etime format 99,999.99 +col avg_cpu format 9,999.99 +col avg_lio format 9,999,999 +col avg_pio format 9,999,999 +col "IO_SAVED_%" format 999.99 +col avg_px format 999 +col offload for a7 + +select sql_id, avg_etime, px, Offload, sql_text from ( +select sql_id, child_number child, plan_hash_value plan_hash, executions execs, +(elapsed_time/1000000)/decode(nvl(executions,0),0,1,executions) avg_etime, +--decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,buffer_gets/decode(nvl(executions,0),0,1,executions),null) avg_lio, +--decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,disk_reads/decode(nvl(executions,0),0,1,executions),null) avg_pio, +px_servers_executions/decode(nvl(executions,0),0,1,executions) px, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,'No','Yes') Offload, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,0, +100*(IO_CELL_OFFLOAD_ELIGIBLE_BYTES-IO_INTERCONNECT_BYTES) +/decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,1,IO_CELL_OFFLOAD_ELIGIBLE_BYTES)) "IO_SAVED_%", +sql_text +from v$sql s +where upper(sql_text) like upper(nvl('&sql_text',sql_text)) +and sql_text not like 'BEGIN :sql_text := %' +and sql_text not like '%IO_CELL_OFFLOAD_ELIGIBLE_BYTES%' +and sql_id like nvl('&sql_id',sql_id) +) +order by 1, 2, 3 +/ diff --git a/vdh/fsx3.sql b/vdh/fsx3.sql new file mode 100644 index 0000000..a9b7995 --- /dev/null +++ b/vdh/fsx3.sql @@ -0,0 +1,25 @@ +set verify off +set pagesize 999 +set lines 190 +col sql_text format a20 trunc +col child format 99999 +col execs format 9,999 +col avg_etime format 9,999,999.99 +col avg_cpu format 9,999,999.99 +col avg_lio format 999,999,999 +col avg_pio format 999,999,999 +col "IO_SAVED_%" format 999.99 +col avg_px format 999 +col offload for a7 + +select sql_id, child_number child, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,'No','Yes') Offload, +executions execs, +IO_CELL_OFFLOAD_ELIGIBLE_BYTES eligible_bytes, sql_text +from v$sql s +where upper(sql_text) like upper(nvl('&sql_text',sql_text)) +and sql_text not like 'BEGIN :sql_text := %' +and sql_text not like '%IO_CELL_OFFLOAD_ELIGIBLE_BYTES%' +and sql_id like nvl('&sql_id',sql_id) +order by 1, 2, 3 +/ diff --git a/vdh/fsx4.sql b/vdh/fsx4.sql new file mode 100644 index 0000000..54b3eda --- /dev/null +++ b/vdh/fsx4.sql @@ -0,0 +1,30 @@ +set verify off +set pagesize 999 +set lines 190 +col sql_text format a40 trunc +col child format 99999 heading CHILD +col execs format 9,999,999 +col avg_etime format 99,999.99 +col avg_cpu format 9,999,999.99 +col avg_lio format 999,999,999 +col avg_pio format 999,999,999 +col "IO_SAVED_%" format 999.99 +col avg_px format 999 +col offload for a7 + +select sql_id, child_number child, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,'No','Yes') Offload, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,0, +100*(IO_CELL_OFFLOAD_ELIGIBLE_BYTES-IO_INTERCONNECT_BYTES) +/decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,1,IO_CELL_OFFLOAD_ELIGIBLE_BYTES)) "IO_SAVED_%", +(elapsed_time/1000000)/decode(nvl(executions,0),0,1,executions) avg_etime, +--decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,buffer_gets/decode(nvl(executions,0),0,1,executions),null) avg_lio, +--decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,disk_reads/decode(nvl(executions,0),0,1,executions),null) avg_pio, +sql_text +from v$sql s +where upper(sql_text) like upper(nvl('&sql_text',sql_text)) +and sql_text not like 'BEGIN :sql_text := %' +and sql_text not like '%IO_CELL_OFFLOAD_ELIGIBLE_BYTES%' +and sql_id like nvl('&sql_id',sql_id) +order by 1, 2, 3 +/ diff --git a/vdh/fsxo.sql b/vdh/fsxo.sql new file mode 100644 index 0000000..7eac264 --- /dev/null +++ b/vdh/fsxo.sql @@ -0,0 +1,62 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: fsx.sql +-- +-- Purpose: Find SQL and report whether it was Offloaded and % of I/O saved. +-- +-- Author: Kerry Osborne +-- +-- Usage: This scripts prompts for two values. +-- +-- sql_text: a piece of a SQL statement like %select col1, col2 from skew% +-- +-- sql_id: the sql_id of the statement if you know it (leave blank to ignore) +-- +-- Description: +-- +-- This script can be used to locate statements in the shared pool and +-- determine whether they have been executed via Smart Scans. +-- +-- It is based on the observation that the IO_CELL_OFFLOAD_ELIGIBLE_BYTES +-- column in V$SQL is only greater than 0 when a statement is executed +-- using a Smart Scan. The IO_SAVED_% column attempts to show the ratio of +-- of data received from the storage cells to the actual amount of data +-- that would have had to be retrieved on non-Exadata storage. Note that +-- as of 11.2.0.2, there are issues calculating this value with some queries. +-- +-- Note that the AVG_ETIME will not be acurate for parallel queries. The +-- ELAPSED_TIME column contains the sum of all parallel slaves. So the +-- script divides the value by the number of PX slaves used which gives an +-- approximation. +-- +-- Note also that if parallel slaves are spread across multiple nodes on +-- a RAC database the PX_SERVERS_EXECUTIONS column will not be set. +-- +-- See kerryosborne.oracle-guy.com for additional information. +--------------------------------------------------------------------------------------- +set pagesize 999 +set lines 190 +col sql_text format a70 trunc +col child format 99999 +col execs format 9,999 +col avg_etime format 99,999.99 +col "IO_SAVED_%" format 999.99 +col avg_px format 999 +col offload for a7 + +select sql_id, child_number child, plan_hash_value plan_hash, executions execs, +(elapsed_time/1000000)/decode(nvl(executions,0),0,1,executions)/ +decode(px_servers_executions,0,1,px_servers_executions/decode(nvl(executions,0),0,1,executions)) avg_etime, +px_servers_executions/decode(nvl(executions,0),0,1,executions) avg_px, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,'No','Yes') Offload, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,0,100*(IO_CELL_OFFLOAD_ELIGIBLE_BYTES-IO_INTERCONNECT_BYTES) +/decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,1,IO_CELL_OFFLOAD_ELIGIBLE_BYTES)) "IO_SAVED_%", +sql_text +from v$sql s +where upper(sql_text) like upper(nvl('&sql_text',sql_text)) +and sql_text not like 'BEGIN :sql_text := %' +and sql_text not like '%IO_CELL_OFFLOAD_ELIGIBLE_BYTES%' +and sql_id like nvl('&sql_id',sql_id) +and IO_CELL_OFFLOAD_ELIGIBLE_BYTES > 0 +order by 1, 2, 3 +/ diff --git a/vdh/gather_table_stats.sql b/vdh/gather_table_stats.sql new file mode 100644 index 0000000..5bfb5b6 --- /dev/null +++ b/vdh/gather_table_stats.sql @@ -0,0 +1,8 @@ +begin + dbms_stats.gather_table_stats( + '&owner','&table_name', + degree => 7, + method_opt => '&method_opt' + ); +end; +/ diff --git a/vdh/gen_load_paratel.txt b/vdh/gen_load_paratel.txt new file mode 100644 index 0000000..6e90bb5 --- /dev/null +++ b/vdh/gen_load_paratel.txt @@ -0,0 +1,109 @@ +create tablespace failover_test +datafile '+ASMDATA01' size 500M +extent management local autoallocate +segment space management auto; + +create user fdh +identified by fdh123 +default tablespace failover_test +temporary tablespace temp +quota unlimited on failover_test +account unlock; + +create table fdh.failover_testing +( veld1 char(2000)) +tablespace failover_test; + +insert into fdh.failover_testing +select 'x' +from dba_objects; + +commit; + +create or replace procedure fdh.p_failover_testing +as + +begin + + update fdh.failover_testing + set veld1 = 'x'; + + commit; + + execute immediate 'alter system checkpoint'; + + insert into fdh.failover_testing + select * + from fdh.failover_testing + where rownum <= 1000; + + commit; + + delete + from fdh.failover_testing + where mod(rownum,500) = 0; + + commit; + +end p_failover_testing; +/ + + + +create user fdh2 +identified by fdh123 +default tablespace failover_test +temporary tablespace temp +quota unlimited on failover_test +account unlock; + +create table fdh2.failover_testing +( veld1 char(2000)) +tablespace failover_test; + +insert into fdh2.failover_testing +select 'x' +from dba_objects; + +commit; + +create or replace procedure fdh2.p_failover_testing +as + +begin + + update fdh2.failover_testing + set veld1 = 'x'; + + commit; + + execute immediate 'alter system checkpoint'; + + insert into fdh2.failover_testing + select * + from fdh2.failover_testing + where rownum <= 1000; + + commit; + + delete + from fdh2.failover_testing + where mod(rownum,500) = 0; + + commit; + +end p_failover_testing; +/ + +BEGIN +for i in 1 .. 5000 +loop + BEGIN + p_failover_testing; + EXCEPTION + when others then + null; + END; +end loop; +END; +/ diff --git a/vdh/gen_recompile.sql b/vdh/gen_recompile.sql new file mode 100644 index 0000000..6e5aba2 --- /dev/null +++ b/vdh/gen_recompile.sql @@ -0,0 +1,43 @@ +/********************************************************************** + * File: gen_recompile.sql + * Type: SQL*Plus script + * Author: Tim Gorman (SageLogix, Inc.) + * Date: 10-Oct-98 + * + * Description: + * SQL*Plus script to use the technique of "SQL-generating-SQL" + * to generate another SQL*Plus script to recompile any invalid + * objects. Then, the generated script is run...w + * + * Modifications: + *********************************************************************/ +whenever oserror exit failure +whenever sqlerror exit failure + +set echo off feedb off time off timi off pages 0 lines 80 pau off verify off + +select 'alter ' || decode(object_type, + 'PACKAGE BODY', 'PACKAGE', + 'TYPE BODY', 'TYPE', + object_type) || + ' "' || owner || '"."' || object_name || '" compile' || + decode(object_type, + 'PACKAGE BODY', ' body;', + 'TYPE BODY', ' body;', + ';') cmd +from all_objects +where status = 'INVALID' + +spool run_recompile.sql +/ +spool off + +set echo on feedback on timing on + +spool run_recompile +start run_recompile +spool off + +REM host /bin/rm -f run_recompile.* + +exit success \ No newline at end of file diff --git a/vdh/get_certificate.sh b/vdh/get_certificate.sh new file mode 100644 index 0000000..d7ebaa8 --- /dev/null +++ b/vdh/get_certificate.sh @@ -0,0 +1,8 @@ +#!/bin/bash +### get the ssl certificate send to the browser and store it in a file (for distribution) +### usage: first parameter is the hostname of the remote server, second is its port number and third is the output file + +hostname=$1 +port=$2 +certfile=$3 +echo -n | openssl s_client -connect ${hostname}:${port} | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ${certfile} diff --git a/vdh/get_compression_ratio.sql b/vdh/get_compression_ratio.sql new file mode 100644 index 0000000..04ddc5d --- /dev/null +++ b/vdh/get_compression_ratio.sql @@ -0,0 +1,69 @@ +set sqlblanklines on +set feedback off +accept owner - + prompt 'Enter Value for owner: ' - + default 'KSO' +accept table_name - + prompt 'Enter Value for table_name: ' - + default 'SKEW' +accept comp_type - + prompt 'Enter Value for compression_type (OLTP): ' - + default 'OLTP' + +DECLARE + + l_blkcnt_cmp BINARY_INTEGER; + l_blkcnt_uncmp BINARY_INTEGER; + l_row_cmp BINARY_INTEGER; + l_row_uncmp BINARY_INTEGER; + l_cmp_ratio NUMBER; + l_comptype_str VARCHAR2 (200); + l_comptype number; +BEGIN + +case '&&comp_type' + when 'OLTP' then l_comptype := DBMS_COMPRESSION.comp_for_oltp; + when 'QUERY' then l_comptype := DBMS_COMPRESSION.comp_for_query_low; + when 'QUERY_LOW' then l_comptype := DBMS_COMPRESSION.comp_for_query_low; + when 'QUERY_HIGH' then l_comptype := DBMS_COMPRESSION.comp_for_query_high; + when 'ARCHIVE' then l_comptype := DBMS_COMPRESSION.comp_for_archive_low; + when 'ARCHIVE_LOW' then l_comptype := DBMS_COMPRESSION.comp_for_archive_low; + when 'ARCHIVE_HIGH' then l_comptype := DBMS_COMPRESSION.comp_for_archive_high; + END CASE; + + DBMS_COMPRESSION.get_compression_ratio ( + scratchtbsname => 'USERS', + ownname => '&owner', + tabname => '&table_name', + partname => NULL, + comptype => l_comptype, +-- comptype => DBMS_COMPRESSION.comp_for_oltp, +-- comptype => DBMS_COMPRESSION.comp_for_query_low, +-- comptype => DBMS_COMPRESSION.comp_for_query_high, +-- comptype => DBMS_COMPRESSION.comp_for_archive_low, +-- comptype => DBMS_COMPRESSION.comp_for_archive_high, + blkcnt_cmp => l_blkcnt_cmp, + blkcnt_uncmp => l_blkcnt_uncmp, + row_cmp => l_row_cmp, + row_uncmp => l_row_uncmp, + cmp_ratio => l_cmp_ratio, + comptype_str => l_comptype_str + ); +/* + DBMS_OUTPUT.put_line ('DBMS_COMPRESSION.comp_for_oltp=' || DBMS_COMPRESSION.comp_for_oltp); + DBMS_OUTPUT.put_line ('l_blkcnt_cmp=' || l_blkcnt_cmp); + DBMS_OUTPUT.put_line ('l_blkcnt_uncmp=' || l_blkcnt_uncmp); + DBMS_OUTPUT.put_line ('l_row_cmp=' || l_row_cmp); + DBMS_OUTPUT.put_line ('l_row_uncmp=' || l_row_uncmp); + DBMS_OUTPUT.put_line ('l_comptype_str=' || l_comptype_str); +*/ +dbms_output.put_line(' '); + DBMS_OUTPUT.put_line ('Estimated Compression Ratio using '||l_comptype_str||': '|| round(l_cmp_ratio,3)); +dbms_output.put_line(' '); + +END; +/ +undef owner +undef table_name +undef comp_type +set feedback on diff --git a/vdh/get_curr_undo_span.sql b/vdh/get_curr_undo_span.sql new file mode 100644 index 0000000..1f92950 --- /dev/null +++ b/vdh/get_curr_undo_span.sql @@ -0,0 +1,20 @@ +column curr_undo_span format a30 heading "Flasback Query Possible Until" + +select + to_char(systimestamp - numtodsinterval (min(tuned_undoretention), 'second'), 'DD/MM/YYYY HH24:MI:SS TZR') curr_undo_span +from + ( select + inst_id, + tuned_undoretention, + row_number() over + ( partition by inst_id + order by begin_time desc + ) as rn + from + gv$undostat + ) +where + rn = 1 +order by + inst_id +; diff --git a/vdh/get_db_overview.sql b/vdh/get_db_overview.sql new file mode 100644 index 0000000..b44a0db --- /dev/null +++ b/vdh/get_db_overview.sql @@ -0,0 +1,729 @@ +/* run this script as a dba user, passing the logfile as parameter + This script has been created to assist in the migrations of the 9i databases at OLV + + @get_db_overview.sql + + this will generate a logfile in the current directory + +*/ + + +set pagesize 9999 +set linesize 150 +set serveroutput on +set trimspool on +set echo off +set feedback 1 + +spool &1 + +--------------------------------------------- DB ---------------------------------------------------------------------- + +column platform_name format a40 +column name format a15 +column db_unique_name format a20 + +select dbid, name, created, log_mode +from v$database; + +--------------------------------------------- DB PARAMETERS ------------------------------------------------------------ +prompt +prompt PARAMETERS +prompt __________ + + +set linesize 180 +set pagesize 9999 + + +COLUMN display_value FORMAT a15 word_wrapped +COLUMN value FORMAT a75 word_wrapped +COLUMN name FORMAT a35 +column type format 999 + +select x.inst_id inst_id,ksppinm name,ksppity type, + ksppstvl value, ksppstdf isdefault +from x$ksppi x, x$ksppcv y +where (x.indx = y.indx) + and ( ksppstdf = 'FALSE' + or translate(ksppinm,'_','#') like '##%' + -- or translate(ksppinm,'_','#') like '#%' + ) +order by x.inst_id, ksppinm; + +--------------------------------------------- DB PROPERTIES ------------------------------------------------------------ +prompt +prompt DB PROPERTIES +prompt _____________ + +column property_value format a40 + +select property_name, property_value +from database_properties +order by property_name; + +--------------------------------------------- INSTALLED OPTIONS -------------------------------------------------------- + +prompt +prompt INSTALLED OPTIONS +prompt _________________ + + +column comp_name format a50 + +select comp_name, version, status +from dba_registry +order by comp_name; + +--------------------------------------------- DB SIZES ------------------------------------------------------------------ +prompt +prompt DB - Sizes +prompt __________ + +column name format a25 heading "tablespace name" +column space_mb format 99g999g990D99 heading "curr df mbytes" +column maxspace_mb format 99g999g990D99 heading "max df mbytes" +column used format 99g999g990D99 heading "used mbytes" +column df_free format 99g999g990D99 heading "curr df free mbytes" +column maxdf_free format 99g999g990D99 heading "max df free mbytes" +column pct_free format 990D99 heading "% free" +column pct_maxfile_free format 990D99 heading "% maxfile free" + +break on report + +compute sum of space_mb on report +compute sum of maxspace_mb on report +compute sum of df_free on report +compute sum of maxdf_free on report +compute sum of used on report + + +select df.tablespace_name name, df.space space_mb, df.maxspace maxspace_mb, (df.space - nvl(fs.freespace,0)) used, + nvl(fs.freespace,0) df_free, (nvl(fs.freespace,0) + df.maxspace - df.space) maxdf_free, + 100 * (nvl(fs.freespace,0) / df.space) pct_free, + 100 * ((nvl(fs.freespace,0) + df.maxspace - df.space) / df.maxspace) pct_maxfile_free +from ( select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_temp_files + group by tablespace_name + ) df, + ( select tablespace_name, sum(bytes)/1024/1024 freespace + from dba_free_space + group by tablespace_name + ) fs +where df.tablespace_name = fs.tablespace_name(+) +order by name; + +clear breaks + + +--------------------------------------------- TABLESPACE INFO -------------------------------------------------------------- + +prompt +prompt tablespace info +prompt _______________ + +column max_mb format 9G999G990D99 +column curr_mb format 9G999G990D99 +column free_mb format 9G999G990D99 +column pct_free format 900D99 heading "%FREE" +column NE format 9G999G999D99 +column SSM format a6 +column AT format a8 +column tablespace_name format a20 +column EM format a10 +column contents format a15 +column block_size format 99999 heading bsize + +select A.tablespace_name, block_size, A.contents, extent_management EM, allocation_type AT, + segment_space_management ssm, decode(allocation_type, 'UNIFORM',next_extent/1024,'') NE, + B.max_mb, B.curr_mb, + (B.max_mb - B.curr_mb) + nvl(c.free_mb,0) free_mb, + ((100/B.max_mb)*(B.max_mb - B.curr_mb + nvl(c.free_mb,0))) pct_free +from dba_tablespaces A, + ( select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_temp_files + group by tablespace_name + ) B, + ( select tablespace_name, sum(bytes)/1024/1024 free_mb + from dba_free_space + group by tablespace_name + ) C +where A.tablespace_name = B.tablespace_name + and A.tablespace_name = C.tablespace_name(+) +order by tablespace_name; + +--------------------------------------------- DF DETAILS ------------------------------------------------------------------ + +column curr_mb format 9G999G990D99 +column max_mb format 9G9999990D99 +column incr_mb format 9G999G990D99 +column file_name format a75 +--column file_name format a60 +column tablespace_name format a20 +break on tablespace_name skip 1 +set linesize 160 +set pagesize 999 + +prompt +prompt datafiles info +prompt ______________ + +select A.tablespace_name, file_id, file_name, bytes/1024/1024 curr_mb, autoextensible, + maxbytes/1024/1024 max_mb, (increment_by * block_size)/1024/1024 incr_mb +from ( select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_data_files + union all + select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_temp_files + ) A, dba_tablespaces B +where A.tablespace_name = B.tablespace_name +order by A.tablespace_name, file_name; + +clear breaks; + +--------------------------------------------- OWNER / TBS MATRIX ------------------------------------------------------------------ + +prompt +prompt OWNER / TBS MATRIX +prompt __________________ + +column mb format 9G999G999D99 + +break on owner skip 1 +compute sum of mb on owner + +select owner, tablespace_name, sum(bytes)/1024/1024 mb, count(*) counted +from dba_segments +group by owner, tablespace_name +order by owner, tablespace_name; + +clear breaks + +--------------------------------------------- OBJECTS ------------------------------------------------------------------ + +prompt +prompt OBJECTS +prompt __________________ + +break on owner skip 1 on object_type +compute sum of counted on owner +column counted format 9G999G999G999 + +select owner, object_type, status, count(*) counted +from dba_objects +where owner not in + ( 'DBSNMP','ORACLE_OCM','OUTLN','PUBLIC','SYS','SYSMAN','SYSTEM', 'TSMSYS','WMSYS','APPQOSSYS', + 'CTXSYS','EXFSYS','MDSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA','XDB' + ) +group by owner, object_type, status +order by owner, object_type, status; + +clear breaks + +--------------------------------------------- ONLINE REDO INFO ---------------------------------------------------------------- + +prompt +prompt ONLINE REDO INFO +prompt ________________ + +column member format a65 +column type format a10 +column status format a15 +column arch format a4 +column mb format 9G999G999 + +break on type on thread# nodup skip 1 on type nodup on GROUP# nodup + +select type, A.thread#, A.group#, B.member, A.bytes/1024/1024 mb,A.status, arch +from ( select group#, thread#, bytes, status, archived arch + from v$log + union all + select group#, thread#, bytes, status, archived arch + from v$standby_log + ) A, v$logfile B +where A.group# = B.group# +order by type, A.thread#, A.group#, B.member; + +clear breaks + + +--------------------------------------------- REDO SIZES ------------------------------------------------------------------ + +prompt +prompt REDO STATISTICS +prompt _______________ + +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +column start_day format a22 +column end_day format a22 +column days_between format 99 +column avg_archived_per_day format a13 heading avg_gen + +select to_char(min(dag), 'DD/MM/YYYY HH24:MI:SS') start_day, to_char(max(dag) + 1 - 1/(24*60*60), 'DD/MM/YYYY HH24:MI:SS') end_day, + (max(dag) - min(dag) + 1) days_between, + to_char(avg(gen_archived_size),'9G999G999D99') avg_archived_per_day +from ( select trunc(completion_time) dag, sum(blocks * block_size)/1024/1024 gen_archived_size + from v$archived_log + where standby_dest = 'NO' + and months_between(trunc(sysdate), trunc(completion_time)) <= 1 + and completion_time < trunc(sysdate) + group by trunc(completion_time) + ); + +/* +archived redo over the (max) last 10 days +*/ +column day_arch_size format 99G999D99 +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +select to_char(day, 'DD/MM/YYYY') day, to_char(day,'DAY') dayname, day_arch_size, day_arch#, graph +from ( select trunc(completion_time) day, sum(blocks * block_size)/1024/1024 day_arch_size, count(*) day_arch#, + rpad('*',floor(count(*)/10),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 10 + group by trunc(completion_time) + order by day + ); + +/* +archived redo per hour over the (max) last 2 days +*/ +column hour_arch_size format 99G999D99 +column hour_arch# format 9G999 +column graph format a15 +column dayname format a12 +column dayhour format a18 +break on dayname skip 1 + +select to_char(dayhour,'DAY') dayname, to_char(dayhour, 'DD/MM/YYYY HH24:MI') dayhour, hour_arch_size, hour_arch#, graph +from ( select trunc(completion_time, 'HH') dayhour, sum(blocks * block_size)/1024/1024 hour_arch_size, count(*) hour_arch#, + rpad('*',floor(count(*)/4),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 2 + group by trunc(completion_time, 'HH') + order by dayhour + ); + +clear breaks; + +--------------------------------------------- USERS ------------------------------------------------------------------ + +prompt +prompt USERS +prompt _____ + + +column username format a20 +column password format a20 +column account_status format a20 +column default_tablespace format a20 +column temporary_tablespace format a20 +column profile format a15 + +select username, password, account_status, lock_date, expiry_date, default_tablespace, temporary_tablespace, created, profile +from dba_users +order by username; + +--------------------------------------------- TS QUOTA ------------------------------------------------------------------ + +prompt +prompt TS QUOTA +prompt __________ +prompt(0 = unlimited) + +column mb format 9G999G999D99 + +select username, tablespace_name, (decode (max_bytes, -1,0, max_bytes))/1024/1024 mb +from dba_ts_quotas +order by username, tablespace_name; + +--------------------------------------------- PRIVILEGES ------------------------------------------------------------------ + +prompt +prompt SYS PRIVILEGES +prompt ______________ + +column grantee format a30 +break on grantee skip 1 + +select grantee, privilege, admin_option +from dba_sys_privs +where grantee not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP','APPQOSSYS', 'ANONYMOUS', + 'CTXSYS','EXFSYS','MDSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA','XDB','DATAPUMP_EXP_FULL_DATABASE', + 'DATAPUMP_IMP_FULL_DATABASE','XDBADMIN','XDB_SET_INVOKER','XDB_WEBSERVICES','XDB_WEBSERVICES_OVER_HTTP','XDB_WEBSERVICES_WITH_PUBLIC' + ) +order by grantee, privilege; + + + +clear breaks + +prompt +prompt ROLE PRIVILEGES +prompt _______________ + +column grantee format a30 +break on grantee skip 1 + +select grantee, granted_role, admin_option, default_role +from dba_role_privs +where grantee not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP', 'CTXSYS', 'DATAPUMP_EXP_FULL_DATABASE', + 'DATAPUMP_IMP_FULL_DATABASE','EXFSYS','MDSYS','ORDSYS','XDB','XDBADMIN','XDB_SET_INVOKER','XDB_WEBSERVICES','XDB_WEBSERVICES_OVER_HTTP','XDB_WEBSERVICES_WITH_PUBLIC' + ) +order by grantee, granted_role; + +clear breaks + +prompt +prompt OBJECT PRIVILEGES +prompt _________________ + +column grantee format a30 +column privilege format a30 + +break on grantee skip 1 + +select grantee, owner, table_name, privilege, grantable, hierarchy +from dba_tab_privs +where grantee not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP','APPQOSSYS', 'ANONYMOUS', + 'CTXSYS','EXFSYS','MDSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA','XDB','DATAPUMP_EXP_FULL_DATABASE', + 'DATAPUMP_IMP_FULL_DATABASE','ADM_PARALLEL_EXECUTE_TASK','CTXAPP','DBFS_ROLE','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_SELECT_ROLE', + 'ORDADMIN','XDBADMIN','XDB_SET_INVOKER','XDB_WEBSERVICES','XDB_WEBSERVICES_OVER_HTTP','XDB_WEBSERVICES_WITH_PUBLIC' + ) +order by grantee, owner, table_name, privilege; + +clear breaks + +prompt +prompt NON STANDARD ROLES +prompt __________________ + +column grantee format a30 +column privilege format a30 + +break on grantee skip 1 + +select role, password_required +from dba_roles +where role not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP','APPQOSSYS', 'ANONYMOUS', + 'CTXSYS','EXFSYS','MDSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA','XDB','DATAPUMP_EXP_FULL_DATABASE', + 'DATAPUMP_IMP_FULL_DATABASE','ADM_PARALLEL_EXECUTE_TASK','CTXAPP','DBFS_ROLE','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_SELECT_ROLE', + 'ORDADMIN','XDBADMIN','XDB_SET_INVOKER','XDB_WEBSERVICES','XDB_WEBSERVICES_OVER_HTTP','XDB_WEBSERVICES_WITH_PUBLIC', + 'AUTHENTICATEDUSER','JMXSERVER' + ) +order by role; + +clear breaks + +--------------------------------------------- SYNONYMS ------------------------------------------------------------------ + +prompt +prompt SYNONYMS +prompt _________ + +break on owner skip 1 + +select owner, synonym_name, table_owner, table_name +from dba_synonyms +where owner not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP','APPQOSSYS', 'ANONYMOUS', + 'CTXSYS','EXFSYS','MDSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA','XDB','DATAPUMP_EXP_FULL_DATABASE', + 'DATAPUMP_IMP_FULL_DATABASE','ADM_PARALLEL_EXECUTE_TASK','CTXAPP','DBFS_ROLE','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_SELECT_ROLE', + 'ORDADMIN','XDBADMIN','XDB_SET_INVOKER','XDB_WEBSERVICES','XDB_WEBSERVICES_OVER_HTTP','XDB_WEBSERVICES_WITH_PUBLIC', + 'AUTHENTICATEDUSER','JMXSERVER' + ) +order by owner, synonym_name; + +clear breaks + +prompt +prompt NON DEFAULT PUBLIC SYNONYMS +prompt ____________________________ + +break on table_owner skip 1 + +select table_owner, table_name, synonym_name +from dba_synonyms +where owner = 'PUBLIC' + and table_owner not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP','APPQOSSYS', 'ANONYMOUS', + 'CTXSYS','EXFSYS','MDSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA','XDB','DATAPUMP_EXP_FULL_DATABASE', + 'DATAPUMP_IMP_FULL_DATABASE','ADM_PARALLEL_EXECUTE_TASK','CTXAPP','DBFS_ROLE','HS_ADMIN_EXECUTE_ROLE','HS_ADMIN_SELECT_ROLE', + 'ORDADMIN','XDBADMIN','XDB_SET_INVOKER','XDB_WEBSERVICES','XDB_WEBSERVICES_OVER_HTTP','XDB_WEBSERVICES_WITH_PUBLIC', + 'AUTHENTICATEDUSER','JMXSERVER' + ) +order by table_owner, table_name; + +clear breaks + +--------------------------------------------- JOBS ------------------------------------------------------------------ + +prompt +prompt JOBS +prompt ____ + +column what format a60 word_wrapped +column interval format a30 word_wrapped + +break on job skip 1 + +select job, what, interval, failures, broken, schema_user +from dba_jobs; + +clear breaks + +--------------------------------------------- SCHEDULER ------------------------------------------------------------------ + +prompt +prompt SCHEDULER +prompt _________ + +prompt JOBS +prompt ----- + +set linesize 200 + +column interval format a30 word_wrapped +column what format a50 word_wrapped +column failures format 999 +column broken format a1 +column schema_user format a20 +column last_date format a10 +column last_sec format a10 + +select + job, schema_user, what, last_date, last_sec, interval, broken, failures +from + dba_jobs +order by + job +; + +prompt +prompt +prompt DEFINED SCHEDULER JOBS +prompt ----------------------- + +set linesize 150 +column owner format a15 +column state format a10 +column failure_count format 999 heading FC +column run_count format 99999 heading RC +column job_name format a28 +column next_run_date format a35 +column last_start_date format a35 + +select + owner, job_name, state, run_count, failure_count, + to_char(last_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') last_start_date, + to_char(next_run_date, 'DD/MM/YYYY HH24:MI:SS TZR') next_run_date +from + dba_scheduler_jobs +order by + owner, job_name +; + +prompt +prompt +prompt LAST 10 RUNS PER SCHEDULER JOB +prompt ------------------------------- + +clear breaks +set linesize 150 +column log_date format a20 +column req_start_date format a35 +column actual_start_date format a35 +column run_duration format a14 +column status format a10 +column owner format a15 +column job_name format a28 +break on owner skip 1 on job_name skip 1 + +select + owner, job_name, -- to_char(log_date, 'DD/MM/YYYY HH24:MI:SS') log_date, + to_char(req_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') req_start_date, + to_char(actual_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') actual_start_date, + run_duration, status +from + ( select + owner, job_name, log_date, req_start_date, actual_start_date, + run_duration, status, + row_number () over + ( partition by owner, job_name + order by log_date desc + ) rn + from + dba_scheduler_job_run_details + where + job_name not like 'ORA$AT_%' -- filter out autotasks + ) jrd +where + rn <= 10 +order by + owner, job_name, jrd.log_date desc +; + +prompt +prompt +prompt 10 MOST RECENT JOB RUNS +prompt ------------------------ + +clear breaks +set linesize 150 +column start_date format a20 +column run_duration format a14 +column status format a10 +column owner format a15 +column job_name format a30 + +select + to_char(actual_start_date, 'DD/MM/YYYY HH24:MI:SS') start_date, + owner, job_name, run_duration, status +from + ( select + actual_start_date, owner, job_name, run_duration, status + from + dba_scheduler_job_run_details + where + job_name not like 'ORA$AT_%' -- filter out autotasks + order by + actual_start_date desc + ) jrd +where + rownum <= 10 +; + +prompt +prompt +prompt DEFINED AUTOTASKS +prompt ------------------ + +clear breaks +column client_name format a35 + +select + client_name, status +from + dba_autotask_operation +order by + client_name +; + +prompt +prompt +prompt AUTOTASK WINDOWS +prompt ----------------- + +clear breaks +set linesize 150 +column window_next_time format a45 + +select + * +from + dba_autotask_window_clients +; + +prompt +prompt +prompt LAST 10 RUNS PER AUTOTASK +prompt -------------------------- + +column client_name format a35 +column job_duration format a14 +column job_start_time format a45 +column job_status format a10 + +break on client_name skip 1 + +select + client_name, job_start_time, job_duration, job_status, job_error +from + ( select + client_name, job_status, job_start_time, job_duration, job_error, + row_number () over + ( partition by client_name + order by job_start_time desc + ) rn + from + dba_autotask_job_history + ) +where + rn <= 10 +order by + client_name, job_start_time desc +; + +clear breaks + + +--------------------------------------------- THE END ------------------------------------------------------------------ +spool off + diff --git a/vdh/get_escaped_pwd.sh b/vdh/get_escaped_pwd.sh new file mode 100644 index 0000000..9654b1f --- /dev/null +++ b/vdh/get_escaped_pwd.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# grep the user passed as script parameter in /etc/shadow and prints is escaped encrypted password. +# to be used when recreating users with the encrypted password (when the actual password is not known) +# execute as root + +grep $1 /etc/shadow | awk -F':' '{ gsub(/\$/,"\\$",$2); print $1 ": " $2 }' \ No newline at end of file diff --git a/vdh/get_granted_roles.sql b/vdh/get_granted_roles.sql new file mode 100644 index 0000000..a2c7497 --- /dev/null +++ b/vdh/get_granted_roles.sql @@ -0,0 +1,31 @@ +-- give a tree view of the directly / indirectly granted roles +-- pass the grantee name (user or role) as first argument + +set verify off + +set pages 50000 +set linesize 250 + +column role format a200 heading "Role" + +select + lpad(' ', 2*level-1) || sys_connect_by_path(usr.name, '/') role +from + sys.sysauth$ sau, + sys.user$ usr +where + sau.privilege# = usr.user# +connect by + prior privilege# = grantee# +start with + grantee# = + ( select + user# + from + sys.user$ + where + name = '&1' + ) +; + +undef 1 diff --git a/vdh/get_job_overview.sql b/vdh/get_job_overview.sql new file mode 100644 index 0000000..a5f6822 --- /dev/null +++ b/vdh/get_job_overview.sql @@ -0,0 +1,196 @@ +/* Give an overview of the jobs in dba_jobs, scheduler_jobs and autotask jobs +*/ +clear breaks +set pagesize 9999 +set serveroutput on +set trimspool on +set echo off +set feedback 1 + +prompt +prompt +prompt JOBS +prompt ----- + +set linesize 200 + +break on instance + +column interval format a30 word_wrapped +column what format a50 word_wrapped +column failures format 999 +column broken format a1 +column schema_user format a20 +column last_date format a10 +column last_sec format a10 + +select + instance, job, schema_user, what, last_date, last_sec, interval, broken, failures +from + dba_jobs +order by + instance, + job +; + +clear breaks + +prompt +prompt +prompt DEFINED SCHEDULER JOBS +prompt ----------------------- + +set linesize 150 +column owner format a15 +column state format a10 +column failure_count format 999 heading FC +column run_count format 99999 heading RC +column job_name format a28 +column next_run_date format a35 +column last_start_date format a35 + +select + owner, job_name, state, run_count, failure_count, + to_char(last_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') last_start_date, + to_char(next_run_date, 'DD/MM/YYYY HH24:MI:SS TZR') next_run_date +from + dba_scheduler_jobs +order by + owner, job_name +; + +prompt +prompt +prompt LAST 10 RUNS PER SCHEDULER JOB +prompt ------------------------------- + +clear breaks +set linesize 150 +column log_date format a20 +column req_start_date format a35 +column actual_start_date format a35 +column run_duration format a14 +column status format a10 +column owner format a15 +column job_name format a28 +break on owner skip 1 on job_name skip 1 + +select + owner, job_name, -- to_char(log_date, 'DD/MM/YYYY HH24:MI:SS') log_date, + to_char(req_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') req_start_date, + to_char(actual_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') actual_start_date, + run_duration, status +from + ( select + owner, job_name, log_date, req_start_date, actual_start_date, + run_duration, status, + row_number () over + ( partition by owner, job_name + order by log_date desc + ) rn + from + dba_scheduler_job_run_details + where + job_name not like 'ORA$AT_%' -- filter out autotasks + ) jrd +where + rn <= 10 +order by + owner, job_name, jrd.log_date desc +; + +prompt +prompt +prompt 10 MOST RECENT JOB RUNS +prompt ------------------------ + +clear breaks +set linesize 150 +column start_date format a20 +column run_duration format a14 +column status format a10 +column owner format a15 +column job_name format a30 + +select + to_char(actual_start_date, 'DD/MM/YYYY HH24:MI:SS') start_date, + owner, job_name, run_duration, status +from + ( select + actual_start_date, owner, job_name, run_duration, status + from + dba_scheduler_job_run_details + where + job_name not like 'ORA$AT_%' -- filter out autotasks + order by + actual_start_date desc + ) jrd +where + rownum <= 10 +; + +prompt +prompt +prompt DEFINED AUTOTASKS +prompt ------------------ + +clear breaks +column client_name format a35 + +select + client_name, status +from + dba_autotask_operation +order by + client_name +; + +prompt +prompt +prompt AUTOTASK WINDOWS +prompt ----------------- + +clear breaks +set linesize 150 +column window_next_time format a45 +column window_name format a30 + +select + * +from + dba_autotask_window_clients +; + +prompt +prompt +prompt LAST 10 RUNS PER AUTOTASK +prompt -------------------------- + +column client_name format a35 +column job_duration format a14 +column job_start_time format a45 +column job_status format a10 + +break on client_name skip 1 + +select + client_name, job_start_time, job_duration, job_status, job_error +from + ( select + client_name, job_status, job_start_time, job_duration, job_error, + row_number () over + ( partition by client_name + order by job_start_time desc + ) rn + from + dba_autotask_job_history + ) +where + rn <= 10 +order by + client_name, job_start_time desc +; + +clear breaks + +--spool off diff --git a/vdh/get_job_overview_synergics.sql b/vdh/get_job_overview_synergics.sql new file mode 100644 index 0000000..fa97399 --- /dev/null +++ b/vdh/get_job_overview_synergics.sql @@ -0,0 +1,248 @@ +/* Give an overview of the jobs in dba_jobs, scheduler_jobs and autotask jobs +*/ +clear breaks +set pagesize 9999 +set serveroutput on +set trimspool on +set echo off +set feedback 1 + +----------------------------------------- the following bit is added for Synergics +----------------------------------------- either specify a logfile name yourself or one will be generated for you + +set verify off +set feedback off +column dcol new_value spoolname noprint +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; + +select + nvl('&1', db_unique_name || '_' || to_char(sysdate,'YYYYMMDDHH24MISS') || '_job_overview.log') dcol +from + v$database +; + +undefine 1 + +spool &spoolname + +-- db and platform identification +prompt +prompt DB IDENTIFICATION +prompt ------------------ + +set linesize 200 +column platform_name format a40 +column name format a15 +column db_unique_name format a20 + +select + dbid, name, db_unique_name, database_role, platform_name +from + v$database +; + +column host_name format a40 + +select + instance_number, instance_name, host_name, version +from + gv$instance +order by + instance_number +; + +prompt +prompt TIMEZONE AND TIMESTAMP INFO +prompt ---------------------------- + +column systimestamp format a50 + +select + dbtimezone, systimestamp +from + dual +; + +----------------------------------------- end synergics specific section + + +prompt +prompt +prompt JOBS +prompt ----- + +set linesize 200 + +column interval format a30 word_wrapped +column what format a50 word_wrapped +column failures format 999 +column broken format a1 +column schema_user format a20 + +select + job, schema_user, what, last_date, last_sec, interval, broken, failures +from + dba_jobs +order by + job +; + +prompt +prompt +prompt DEFINED SCHEDULER JOBS +prompt ----------------------- + +set linesize 150 +column owner format a15 +column state format a10 +column failure_count format 999 heading FC +column run_count format 99999 heading RC +column job_name format a28 +column next_run_date format a35 +column last_start_date format a35 + +select + owner, job_name, state, run_count, failure_count, + to_char(last_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') last_start_date, + to_char(next_run_date, 'DD/MM/YYYY HH24:MI:SS TZR') next_run_date +from + dba_scheduler_jobs +order by + owner, job_name +; + +prompt +prompt +prompt LAST 10 RUNS PER SCHEDULER JOB +prompt ------------------------------- + +clear breaks +set linesize 150 +column log_date format a20 +column req_start_date format a35 +column actual_start_date format a35 +column run_duration format a14 +column status format a10 +column owner format a15 +column job_name format a28 +break on owner skip 1 on job_name skip 1 + +select + owner, job_name, -- to_char(log_date, 'DD/MM/YYYY HH24:MI:SS') log_date, + to_char(req_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') req_start_date, + to_char(actual_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') actual_start_date, + run_duration, status +from + ( select + owner, job_name, log_date, req_start_date, actual_start_date, + run_duration, status, + row_number () over + ( partition by owner, job_name + order by log_date desc + ) rn + from + dba_scheduler_job_run_details + where + job_name not like 'ORA$AT_%' -- filter out autotasks + ) jrd +where + rn <= 10 +order by + owner, job_name, jrd.log_date desc +; + +prompt +prompt +prompt 10 MOST RECENT JOB RUNS +prompt ------------------------ + +clear breaks +set linesize 150 +column start_date format a20 +column run_duration format a14 +column status format a10 +column owner format a15 +column job_name format a30 + +select + to_char(actual_start_date, 'DD/MM/YYYY HH24:MI:SS') start_date, + owner, job_name, run_duration, status +from + ( select + actual_start_date, owner, job_name, run_duration, status + from + dba_scheduler_job_run_details + where + job_name not like 'ORA$AT_%' -- filter out autotasks + order by + actual_start_date desc + ) jrd +where + rownum <= 10 +; + +prompt +prompt +prompt DEFINED AUTOTASKS +prompt ------------------ + +clear breaks +column client_name format a35 + +select + client_name, status +from + dba_autotask_operation +order by + client_name +; + +prompt +prompt +prompt AUTOTASK WINDOWS +prompt ----------------- + +clear breaks +set linesize 150 +column window_next_time format a45 + +select + * +from + dba_autotask_window_clients +; + +prompt +prompt +prompt LAST 10 RUNS PER AUTOTASK +prompt -------------------------- + +column client_name format a35 +column job_duration format a14 +column job_start_time format a45 +column job_status format a10 + +break on client_name skip 1 + +select + client_name, job_start_time, job_duration, job_status, job_error +from + ( select + client_name, job_status, job_start_time, job_duration, job_error, + row_number () over + ( partition by client_name + order by job_start_time desc + ) rn + from + dba_autotask_job_history + ) +where + rn <= 10 +order by + client_name, job_start_time desc +; + +clear breaks + +spool off diff --git a/vdh/get_last_recovery_scn.sql b/vdh/get_last_recovery_scn.sql new file mode 100644 index 0000000..01691c5 --- /dev/null +++ b/vdh/get_last_recovery_scn.sql @@ -0,0 +1,25 @@ +set linesize 150 +set pages 999 +column name format a50 + +select thread#, sequence#, to_char(next_time, 'DD/MM/YYYY HH24:MI:SS') ntime, next_change#, status, name +from v$archived_log +where (thread#, next_change#) in + ( select thread#, max(next_change#) + from v$archived_log + where archived = 'YES' + and status = 'A' + and resetlogs_id = + ( select resetlogs_id + from v$database_incarnation + where status = 'CURRENT' + ) + group by thread# + ) + and status = 'A' + and resetlogs_id = + ( select resetlogs_id + from v$database_incarnation + where status = 'CURRENT' + ) +order by next_change# asc; diff --git a/vdh/get_last_recovery_scn_9i.sql b/vdh/get_last_recovery_scn_9i.sql new file mode 100644 index 0000000..e8b0395 --- /dev/null +++ b/vdh/get_last_recovery_scn_9i.sql @@ -0,0 +1,9 @@ +select thread#, sequence#, next_change#, to_char(next_time, 'DD/MM/YYYY HH24:MI:SS') ntime +from ( select thread#, sequence#, next_change#, next_time, + row_number() over + ( partition by thread# + order by sequence# desc + ) rn + from v$backup_redolog + ) +where rn = 1 \ No newline at end of file diff --git a/vdh/get_last_recovery_scn_in_backup.sql b/vdh/get_last_recovery_scn_in_backup.sql new file mode 100644 index 0000000..b8564c4 --- /dev/null +++ b/vdh/get_last_recovery_scn_in_backup.sql @@ -0,0 +1,13 @@ +column next_change# format 999999999999999 +select * +from ( select thread#, max(sequence#) sequence#, max(next_change#) next_change#, to_char(max(next_time), 'DD/MM/YYYY HH24:MI:SS') next_time + from v$backup_archivelog_details + where resetlogs_time = + ( select resetlogs_time + from v$database_incarnation + where status = 'CURRENT' + ) + group by thread# + order by next_change# + ) +where rownum = 1; \ No newline at end of file diff --git a/vdh/get_root_ca.sh b/vdh/get_root_ca.sh new file mode 100644 index 0000000..5ec984d --- /dev/null +++ b/vdh/get_root_ca.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +### check which root CA was used to sign the certificate of a given https website +### get that root certificate from the Mozilla certificate bundle on the server +### and store it in the current working directory +### +### this certificate can then be imported into an oracle wallet or used for other purposes + +chain=$(openssl s_client -connect ${1}:443 <<< . 2>&1|awk '/^Certificate chain$/,/---/') +echo "${chain}" +root_ca=$(echo "${chain}" | tail -2 | head -1 | awk -F '=' '{print $(NF)}') +echo "root CA: " ${root_ca} +awk "/^# ${root_ca}$/,/END TRUSTED CERTIFICATE/" /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt | head -n -1 | tail -n +3 | awk 'BEGIN {print "-----BEGIN CERTIFICATE-----"} {print $0} END{print "-----END CERTIFICATE-----"}' | tee $(echo "${root_ca}" | tr ' ' '_').crt + diff --git a/vdh/getallcode.sql b/vdh/getallcode.sql new file mode 100644 index 0000000..d942693 --- /dev/null +++ b/vdh/getallcode.sql @@ -0,0 +1,21 @@ +set termout off +set heading off +set feedback off +set linesize 50 +spool xtmpx.sql +select '@getcode ' || object_name +from user_objects +where object_type in ( 'PROCEDURE', 'FUNCTION', 'PACKAGE' ) +/ +spool off +spool getallcode_INSTALL +select '@' || object_name +from user_objects +where object_type in ( 'PROCEDURE', 'FUNCTION', 'PACKAGE' ) +/ +spool off +set heading on +set feedback on +set linesize 130 +set termout on +@xtmpx.sql diff --git a/vdh/getallviews.sql b/vdh/getallviews.sql new file mode 100644 index 0000000..168f1a3 --- /dev/null +++ b/vdh/getallviews.sql @@ -0,0 +1,19 @@ +set heading off +set feedback off +set linesize 1000 +set trimspool on +set verify off +set termout off +set embedded on + +spool tmp.sql +select '@getaview ' || view_name +from user_views +/ +spool off + +set termout on +set heading on +set feedback on +set verify on +@tmp diff --git a/vdh/getaview.sql b/vdh/getaview.sql new file mode 100644 index 0000000..452c881 --- /dev/null +++ b/vdh/getaview.sql @@ -0,0 +1,31 @@ +set heading off +set feedback off +set linesize 1000 +set trimspool on +set verify off +set termout off +set embedded on +set long 50000 + +column column_name format a1000 +column text format a1000 + +spool &1..sql +prompt create or replace view &1 ( +select decode(column_id,1,'',',') || column_name column_name + from user_tab_columns + where table_name = upper('&1') + order by column_id +/ +prompt ) as +select text + from user_views + where view_name = upper('&1') +/ +prompt / +spool off + +set heading on +set feedback on +set verify on +set termout on \ No newline at end of file diff --git a/vdh/getcode.sql b/vdh/getcode.sql new file mode 100644 index 0000000..45df2f4 --- /dev/null +++ b/vdh/getcode.sql @@ -0,0 +1,23 @@ +set feedback off +set heading off +set termout off +set linesize 1000 +set trimspool on +set verify off +spool &1..sql +prompt set define off +select decode( type||'-'||to_char(line,'fm99999'), + 'PACKAGE BODY-1', '/'||chr(10), + null) || + decode(line,1,'create or replace ', '' ) || + text text + from user_source + where name = upper('&&1') + order by type, line; +prompt / +prompt set define on +spool off +set feedback on +set heading on +set termout on +set linesize 100 diff --git a/vdh/hangfg.tar b/vdh/hangfg.tar new file mode 100644 index 0000000..48c72f4 Binary files /dev/null and b/vdh/hangfg.tar differ diff --git a/vdh/heapdump_dissect_ksh b/vdh/heapdump_dissect_ksh new file mode 100644 index 0000000..95a5146 --- /dev/null +++ b/vdh/heapdump_dissect_ksh @@ -0,0 +1,75 @@ +#!/bin/ksh +################################################################################ +## +## File name: heapdump_dissect +## Purpose: Dissecting heapdump +## +## Author: Riyaj Shamsudeen +## Copyright: GNU public license +## +## Uage 2) run ./heapdump_dissect +## For example: ./heapdump_dissect ORCL_ora_4345.trc +## +## Other: Only take heapdumps when you know what you're doing! +## Taking a heapdump on shared pool (when bit 2 in heapdump event +## level is enabled) can hang your database for a while as it +## holds shared pool latches for a long time if your shared pool +## is big and heavily active. +## +## Thanks to: Tanel Poder for his original tool heapdump_analyzer +## +## +################################################################################ +echo +echo " -- Heapdump dissect v1.00 by Riyaj Shamsudeen" +echo " -- Based upon Tanel's script heapdump_analyzer http://www.tanelpoder.com/files/scripts/heapdump_analyzer " +echo +echo " This script creates two files in /tmp/ directory " +echo " 1. /tmp/heapdump_dissect.lst - temporary file " +echo " 2. /tmp/heapdump_summary.lst - heap dump summary " + +cat $1 | awk ' + /^HEAP DUMP heap name=/ { split($0,ht,"\""); HTYPE=ht[2]; doPrintOut = 1; } + /^EXTENT/ { EXT=$1" " $2; } + /Chunk/{ if ( doPrintOut == 1 ) { + split($0,sf,"\""); + printf "%16s| %16s| %16s| %16s| %10d\n", HTYPE, EXT, $5, sf[2], $4; + } + } + /Total heap size/ { + printf "%10d , %16s, %16s, %16s\n", $5, HTYPE, "TOTAL", "Total heap size"; + doPrintOut=0; + } + ' |grep EXTENT|sort >/tmp/heapdump_dissect.lst + +echo "Sub heap/type summary " > /tmp/heapdump_summary.lst +echo "----------------------" >>/tmp/heapdump_summary.lst +echo "Sub heap Type Size" >>/tmp/heapdump_summary.lst +echo "---------------- ----------------- ---------" >>/tmp/heapdump_summary.lst + +cat /tmp/heapdump_dissect.lst | grep EXTENT|awk ' + BEGIN { FS="|"} + { SizeOfElem [ $1 " " $3 ]+=$5;} + END { for ( i in SizeOfElem ) { print i " " SizeOfElem [i]; } } +'|sort >> /tmp/heapdump_summary.lst +echo "Sub heap level summary " >> /tmp/heapdump_summary.lst +echo "----------------------" >>/tmp/heapdump_summary.lst +echo "Sub heap Type Allocation cmt Size" >>/tmp/heapdump_summary.lst +echo "---------------- ----------------- --------------- --------" >>/tmp/heapdump_summary.lst + +cat /tmp/heapdump_dissect.lst | grep EXTENT|awk ' + BEGIN { FS="|"} + { SizeOfElem [ $1 " " $3 " " $4 ]+=$5;} + END { for ( i in SizeOfElem ) { print i " " SizeOfElem [i]; } } +'|sort >> /tmp/heapdump_summary.lst +echo "Extent level summary " >> /tmp/heapdump_summary.lst +echo "------------------ " >> /tmp/heapdump_summary.lst +echo "Sub heap Extent Type Allocation cmt Size" >>/tmp/heapdump_summary.lst +echo "---------------- ----------------- --------------- -------------- --------" >>/tmp/heapdump_summary.lst + +cat /tmp/heapdump_dissect.lst | awk ' + BEGIN { FS="|"} + { SizeOfElem [ $1 " " $2 " " $3 " " $4 ]+=$5;} + END { for ( i in SizeOfElem ) { print i " " SizeOfElem [i]; } } +'|sort >> /tmp/heapdump_summary.lst +echo diff --git a/vdh/highest_scn_in_backup.sql b/vdh/highest_scn_in_backup.sql new file mode 100644 index 0000000..87105cf --- /dev/null +++ b/vdh/highest_scn_in_backup.sql @@ -0,0 +1,20 @@ +-- This query returns the latest archivelog in the archivelog rman backup sets up to which can be recoverd. +-- For rac environments, it first gets the highest sequence number per thread and then the thread#, sequence with +-- the lowest next_change# + +select * +from ( select bad.thread#, bad.sequence#, bad.next_change#, to_char(bad.next_time, 'DD/MM/YYYY HH24:MI:SS') next_time + from v$backup_archivelog_details bad + where (thread#, sequence#) in + ( select bad2.thread#, max(bad2.sequence#) last_sequence# + from v$backup_archivelog_details bad2 + group by bad2.thread# + ) + and resetlogs_time = + ( select resetlogs_time + from v$database_incarnation + where status = 'CURRENT' + ) + order by bad.next_change# + ) +where rownum = 1; diff --git a/vdh/inactive_sessions.sql b/vdh/inactive_sessions.sql new file mode 100644 index 0000000..8fda736 --- /dev/null +++ b/vdh/inactive_sessions.sql @@ -0,0 +1,13 @@ +set linesize 150 +column username format a30 +column logon format a20, +column idle format a15 +column program format a30 + +select sid, username, to_char(logon_time, 'DD/MM/YYYY HH24:MI:SS') logon, last_call_et, + floor(last_call_et/3600)||':'|| floor(mod(last_call_et,3600)/60)||':'|| mod(mod(last_call_et,3600),60) idle, + program +from v$session +where status = 'INACTIVE' + and username is not null +order by last_call_et; \ No newline at end of file diff --git a/vdh/index_efficiency_3.sql b/vdh/index_efficiency_3.sql new file mode 100644 index 0000000..179cd08 --- /dev/null +++ b/vdh/index_efficiency_3.sql @@ -0,0 +1,147 @@ +rem +rem Script: index_efficiency_3.sql +rem Author: Jonathan Lewis +rem Dated: Sept 2003 +rem Purpose: Example of how to check leaf block packing +rem +rem Last tested +rem 11.1.0.7 +rem 10.2.0.3 +rem 9.2.0.8 +rem Not tested +rem 11.2.0.1 +rem 10.2.0.4 +rem Not applicable +rem 8.1.7.4 -- no sys_op_lbid() +rem +rem Notes +rem Example of analyzing index entries per leaf block. +rem +rem Set up the schema, table name, and index name before +rem running the query. +rem +rem The code assumes you have no more than 10 columns in +rem the index for the purposes of generating "is not null" +rem clauses to force the necessary index-only execution path. +rem This limit can easily be extended by cloning and editing +rem the lines of the "setup" statement. +rem +rem For a simple b-tree index, the first parameter to the +rem sys_op_lbid() function has to be the object_id of the +rem index. +rem +rem The query will work with a sample clause if you are +rem worried that the index you want to investigate is too +rem large to analyze in a reasonable time. (I take 100 blocks +rem per second as a conservative estimate for the I/O rate +rem when running this script on very large indexes but have +rem seen it running three or four times faster that.) +rem +rem This version of the code is suitable only for simple +rem B-tree indexes - although that index may be reversed, +rem have descending columns or virtual (function-based) +rem columns, or be a global index on a partitioned table. +rem + +define m_owner = &m_schema +define m_table_name = &m_table +define m_index_name = &m_index + +column ind_id new_value m_ind_id + +select + object_id ind_id +from + dba_objects +where + owner = upper('&m_owner') +and object_name = upper('&m_index_name') +and object_type = 'INDEX' +; + +column col01 new_value m_col01 +column col02 new_value m_col02 +column col03 new_value m_col03 +column col04 new_value m_col04 +column col05 new_value m_col05 +column col06 new_value m_col06 +column col07 new_value m_col07 +column col08 new_value m_col08 +column col09 new_value m_col09 + +select + nvl(max(decode(column_position, 1,column_name)),'null') col01, + nvl(max(decode(column_position, 2,column_name)),'null') col02, + nvl(max(decode(column_position, 3,column_name)),'null') col03, + nvl(max(decode(column_position, 4,column_name)),'null') col04, + nvl(max(decode(column_position, 5,column_name)),'null') col05, + nvl(max(decode(column_position, 6,column_name)),'null') col06, + nvl(max(decode(column_position, 7,column_name)),'null') col07, + nvl(max(decode(column_position, 8,column_name)),'null') col08, + nvl(max(decode(column_position, 9,column_name)),'null') col09 +from + dba_ind_columns +where table_owner = upper('&m_owner') +and table_name = upper('&m_table_name') +and index_name = upper('&m_index_name') +order by + column_position +; + +break on report skip 1 +compute sum of blocks on report +compute sum of row_ct on report + +spool index_efficiency_3 + +prompt Owner &m_owner +prompt Table &m_table_name +prompt Index &m_index_name + +set verify off + +select + rows_per_block, + blocks, + rows_per_block * blocks row_ct, + sum(blocks) over (order by rows_per_block) cumulative_blocks +from ( + select + rows_per_block, + count(*) blocks + from ( + select + /*+ + cursor_sharing_exact + dynamic_sampling(0) + no_monitoring + no_expand + index_ffs(t1, &m_index_name) + noparallel_index(t1, &m_index_name) + */ + sys_op_lbid( &m_ind_id ,'L',t1.rowid) as block_id, + count(*) as rows_per_block + from + &m_owner..&m_table_name t1 + -- &m_owner..&m_table_name sample block (5) t1 + where + &m_col01 is not null + or &m_col02 is not null + or &m_col03 is not null + or &m_col04 is not null + or &m_col05 is not null + or &m_col06 is not null + or &m_col07 is not null + or &m_col08 is not null + or &m_col09 is not null + group by + sys_op_lbid( &m_ind_id ,'L',t1.rowid) + ) + group by + rows_per_block + ) +order by + rows_per_block +; + +spool off diff --git a/vdh/index_info.sql b/vdh/index_info.sql new file mode 100644 index 0000000..65ccc58 --- /dev/null +++ b/vdh/index_info.sql @@ -0,0 +1,23 @@ +set linesize 300 +set long 100 +set verify off + +column owner format a20 +column index_type format a15 +column partition_name format a15 +column subpartition_name format a15 + +select ind.owner,ind.index_name, ind.index_type, ind.visibility, inp.partition_name, inps.subpartition_name, + ind.status index_status, inp.status part_status, inps.status subpart_status +from dba_indexes ind, dba_ind_partitions inp, dba_ind_subpartitions inps +where ind.index_name = inp.index_name(+) + and ind.owner = inp.index_owner(+) + and inp.index_name = inps.index_name(+) + and inp.index_owner = inps.index_owner(+) + and inp.partition_name = inps.partition_name(+) + and ind.table_owner='&owner' + and ind.table_name = '&table_name' + and ind.dropped = 'NO' +order by 1,2,4,5; + +set verify on diff --git a/vdh/index_info_2.sql b/vdh/index_info_2.sql new file mode 100644 index 0000000..8bbaf7b --- /dev/null +++ b/vdh/index_info_2.sql @@ -0,0 +1,29 @@ +set linesize 300 +set long 100 +set verify off + +column index_name format a30 +column column_name format a30 +column column_position format 99 heading CP +column uniqueness format a1 heading U +column visibility format a10 +column column_expression format a100 +column descend format a10 + +break on index_name skip 1 on index_type on uniqueness on status on visibility + +select ind.index_name, ind.index_type, decode(ind.uniqueness,'UNIQUE', 'Y', 'N') uniqueness, ind.status, + ind.visibility, inc.column_name, inc.column_position, inc.descend, ine.column_expression +from dba_indexes ind, dba_ind_columns inc, dba_ind_expressions ine +where ind.owner = inc.index_owner + and ind.index_name = inc.index_name + and inc.index_owner = ine.index_owner(+) + and inc.index_name = ine.index_name(+) + and inc.column_position = ine.column_position(+) + and ind.table_owner = '&T_OWNER' + and ind.table_name = '&T_NAME' + and ind.dropped = 'NO' +order by ind.index_name, inc.column_position; + +clear breaks +set verify on diff --git a/vdh/index_info_3.sql b/vdh/index_info_3.sql new file mode 100644 index 0000000..9a98e7d --- /dev/null +++ b/vdh/index_info_3.sql @@ -0,0 +1,58 @@ +set linesize 300 +set long 100 +set verify off + +column index_name format a30 +column column_name format a30 +column column_position format 99 heading CP +column uniqueness format a1 heading U +column visibility format a10 +column column_expression format a50 +column descend format a10 +column part_type format a12 +column subpart_type format a12 +column locality format a10 +column alignment format a12 + +break on index_name skip 1 on index_type on uniqueness on status on visibility on part_type on subpart_type on locality on alignment + +select + ind.index_name, + ind.index_type, + decode(ind.uniqueness,'UNIQUE', 'Y', 'N') uniqueness, + ind.status, + ind.visibility, + pin.partitioning_type as part_type, + pin.subpartitioning_type as subpart_type, + pin.locality, + pin.alignment, + inc.column_name, + inc.column_position, + inc.descend, + ine.column_expression +from + dba_indexes ind + join dba_ind_columns inc + on ( ind.owner = inc.index_owner + and ind.index_name = inc.index_name + ) + left outer join dba_part_indexes pin + on ( ind.owner = pin.owner + and ind.index_name = pin.index_name + ) + left outer join dba_ind_expressions ine + on ( inc.index_owner = ine.index_owner + and inc.index_name = ine.index_name + and inc.column_position = ine.column_position + ) +where + ind.table_owner = '&T_OWNER' + and ind.table_name = '&T_NAME' + and ind.dropped = 'NO' +order by + ind.index_name, + inc.column_position +; + +clear breaks +set verify on diff --git a/vdh/investigate_blocking_locks.sql b/vdh/investigate_blocking_locks.sql new file mode 100644 index 0000000..b26803d --- /dev/null +++ b/vdh/investigate_blocking_locks.sql @@ -0,0 +1,63 @@ + +-- who is blocked +set linesize 120 +column lmode format 99 heading LM +column request format 99 heading RQ + +select A.sid, serial#, B.type, lmode, request, block, ctime, row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row# +from v$session A, v$lock B +where A.sid = B.sid + and lockwait is not null +order by A.sid, B.type; + + +-- who is blocking +select A.sid, serial#, B.type, lmode, request, block, ctime, row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row# +from v$session A, v$lock B +where A.sid = B.sid + and A.sid in + ( select sid + from v$lock + where block != 0 + ) +order by A.sid, B.type; + + +-- blocking session info +set linesize 170 +set verify off + +column username format a20 +column program format a15 +column osuser format a15 +column machine format a25 +column inac format a10 + +select sess.sid, sess.serial#, sess.username, sess.program, sess.osuser, + sess.machine, sess.sql_id, sess.sql_child_number, + extract(hour from (systimestamp + last_call_et/24/60/60 - systimestamp)) || ':' || + extract(minute from (systimestamp + last_call_et/24/60/60 - systimestamp)) || ':' || + round(extract(second from (systimestamp + last_call_et/24/60/60 - systimestamp))) inac +from v$session sess +where sess.sid in + ( select sid + from v$lock + where block != 0 + ) +order by sess.sid; + +-- object involved +select object_type, owner, object_name +from dba_objects +where object_id = &1; + +-- which sql statement (current sql, not necessary the statement that caused the lock) +select sql_text +from v$sqltext_with_newlines +where (address, hash_value) + = ( select sql_address, sql_hash_value + from v$session + where sid = &sid + ) +order by piece; + diff --git a/vdh/io_calibration.sql b/vdh/io_calibration.sql new file mode 100644 index 0000000..01a50b5 --- /dev/null +++ b/vdh/io_calibration.sql @@ -0,0 +1,34 @@ +set serveroutput on +set timing on + +DECLARE + + l_actual_latency integer; + l_max_iops integer; + l_max_mbps integer; + +BEGIN + + dbms_resource_manager.calibrate_io + ( num_physical_disks => 30, + max_latency => 15, + max_iops => l_max_iops, + max_mbps => l_max_mbps, + actual_latency => l_actual_latency + ); + + dbms_output.put_line ('max_iops = ' || l_max_iops); + dbms_output.put_line ('actual_latency = ' || l_actual_latency); + dbms_output.put_line('max_mbps = ' || l_max_mbps); + +END; +/ + + +select * from gv$io_calibration_status; + +set linesize 150 +column start_time format a30 +column end_time format a30 +column num_physical_disks format 9999 heading NPD +select * from dba_rsrc_io_calibrate; diff --git a/vdh/io_history_stats.sql b/vdh/io_history_stats.sql new file mode 100644 index 0000000..1ee3c8e --- /dev/null +++ b/vdh/io_history_stats.sql @@ -0,0 +1,24 @@ +set linesize 200 + +column snap_time format a20 +column instance_number format 99 heading IN +column snap_id format 99999 heading ID +column tsname format a10 +column wait_count format 99999 heading WC +column time format 999999 + +break on instance_number skip 2 on snap_time skip 1 on snap_id + +select to_char(snap.begin_interval_time, 'DD/MM/YYYY HH24:MI:SS') snap_time, + snap.instance_number, snap.snap_id, + stat.tsname, stat.file#, stat.block_size, stat.phyrds, stat.phywrts, + stat.singleblkrds, stat.readtim, stat.writetim, stat.singleblkrdtim, + stat.phyblkrd, stat.phyblkwrt, stat.wait_count, stat.time +from dba_hist_snapshot snap, dba_hist_filestatxs stat +where snap.snap_id = stat.snap_id + and snap.instance_number = stat.instance_number + and snap.dbid = stat.dbid + and begin_interval_time between + to_timestamp('15/10/2008 00:00', 'DD/MM/YYYY HH24:MI') + and to_timestamp('15/10/2008 12:00', 'DD/MM/YYYY HH24:MI') +order by snap.dbid, snap.instance_number, snap.snap_id; diff --git a/vdh/io_history_stats_wip.sql b/vdh/io_history_stats_wip.sql new file mode 100644 index 0000000..d4973dc --- /dev/null +++ b/vdh/io_history_stats_wip.sql @@ -0,0 +1,82 @@ +-- TOEVOEGEN AVG READ TIME VOOR SINGLE BLOCK READS EN MULTIBLOCK READS + +set linesize 300 +set pages 50000 + +column snap_time format a20 +column instance_number format 99 heading IN +column snap_id format 99999 heading ID +column tsname format a25 + +column phyrds format 99G999G999G999 +column phywrts format 99G999G999G999 +column singleblkrds format 99G999G999G999 +column readtim_hs format 99G999G999G999 +column writetim_hs format 99G999G999G999 +column singleblkrdtim_hs format 99G999G999G999 +column avg_singleblkrdtim_ms format 999G990D99 +column phyblkrd format 99G999G999G999 +column phyblkwrt format 99G999G999G999 +column wait_count format 99G999 heading wc +column wait_time format 999G999 heading wt + + +break on snap_time skip page on snap_id on tsname skip 1 on file# + +with snap as + ( select + dbid, + instance_number, + snap_id, + lag(snap_id, 1, snap_id) over + ( partition by dbid, instance_number + order by snap_id + ) prev_snap_id, + begin_interval_time, + end_interval_time + from + dba_hist_snapshot + where + begin_interval_time between + systimestamp -1 + and systimestamp + ) +select + to_char(snap.end_interval_time, 'DD/MM/YYYY HH24:MI:SS') snap_time, + snap.snap_id, + state.tsname, + state.file#, + snap.instance_number, + (state.phyrds - statb.phyrds) phyrds, + (state.phywrts - statb.phywrts) phywrts, + (state.singleblkrds - statb.singleblkrds) singleblkrds, + (state.readtim - statb.readtim) readtim_hs, + (state.writetim - statb.writetim) writetim_hs, + (state.singleblkrdtim - statb.singleblkrdtim) singleblkrdtim_hs, + ((state.singleblkrdtim - statb.singleblkrdtim) / greatest((state.singleblkrds - statb.singleblkrds),1) * 10) avg_singleblkrdtim_ms, + (state.phyblkrd - statb.phyblkrd) phyblkrd, + (state.phyblkwrt - statb.phyblkwrt) phyblkwrt, + (state.wait_count - statb.wait_count) wait_count, + (state.time - statb.time) wait_time +from + snap, + dba_hist_filestatxs statb, + dba_hist_filestatxs state +where + snap.dbid = state.dbid + and snap.instance_number = state.instance_number + and snap.snap_id = state.snap_id + and snap.dbid = statb.dbid + and snap.instance_number = statb.instance_number + and snap.prev_snap_id = statb.snap_id + and statb.file# = state.file# +order by + snap.dbid, + snap_time, + snap.snap_id, + state.tsname, + state.file#, + snap.instance_number +; + +clear breaks diff --git a/vdh/iostat.sql b/vdh/iostat.sql new file mode 100644 index 0000000..c6c3d8c --- /dev/null +++ b/vdh/iostat.sql @@ -0,0 +1,41 @@ +select + snap_id, + small_read_megabytes, + small_write_megabytes, + large_read_megabytes, + large_write_megabytes, + small_read_reqs, + small_write_reqs, + small_sync_read_reqs, + large_read_reqs, + large_write_reqs, + small_read_servicetime, + small_write_servicetime, + small_sync_read_latency, + large_read_servicetime, + large_write_servicetime, + retries_on_error +from + dba_hist_iostat_filetype +where + filetype_name = 'Data File' +order by + snap_id, + filetype_name +; + +select + snap_id, + small_read_servicetime, + small_write_servicetime, + large_read_servicetime, + large_write_servicetime, + retries_on_error +from + dba_hist_iostat_filetype +where + filetype_name = 'Data File' +order by + snap_id, + filetype_name +; diff --git a/vdh/ip_overview.awk b/vdh/ip_overview.awk new file mode 100644 index 0000000..448ba69 --- /dev/null +++ b/vdh/ip_overview.awk @@ -0,0 +1,10 @@ +ifconfig -a | awk -F '[ :]+' ' +BEGIN { + printf "%10-s %15-s %15-s\n", "Interface", "IP Adress", "Mask" + printf "%10-s %15-s %15-s\n", "----------", "---------------", "---------------" +} +{ if ($0 ~ "Link encap:") + { interface = $1 } + if ($0 ~ "inet addr") + { printf "%10-s %15-s %15-s\n", interface, $4, $8 } +}' diff --git a/vdh/ip_overview.sh b/vdh/ip_overview.sh new file mode 100644 index 0000000..804e091 --- /dev/null +++ b/vdh/ip_overview.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +echo +echo "Interfaces" +echo "----------" +echo + +ifconfig -a | awk ' +BEGIN { + printf "%10-s %20-s\n", "Interface", "Mac Address" + printf "%10-s %20-s\n", "----------", "--------------------" +} +{ if ($0 ~ "eth") + { printf "%10-s %20-s\n", $1,$5 + } +}' + +echo +echo "IP Adresses" +echo "-----------" +echo + +ifconfig -a | awk ' +BEGIN { + printf "%10-s %15-s %15-s\n", "Interface", "IP Adress", "Mask" + printf "%10-s %15-s %15-s\n", "----------", "---------------", "---------------" +} +{ if ($0 ~ "Link encap:") + { interface = $1 } + if ($0 ~ "inet addr") + { split($2,addr,":") + split($4,mask,":") + printf "%10-s %15-s %15-s\n", interface, addr[2], mask[2] + } +}' + +echo +echo "Network bonds" +echo "-------------" + +cd /proc/net/bonding/ +for i in `ls -1 bond*`; do echo; echo $i; egrep "Bonding Mode|MII Status|Slave Interface" $i; done + +echo +echo "Routing table" +echo "-------------" +echo + +route -n diff --git a/vdh/ip_overview_full.sh b/vdh/ip_overview_full.sh new file mode 100644 index 0000000..30042fb --- /dev/null +++ b/vdh/ip_overview_full.sh @@ -0,0 +1,95 @@ +#!/bin/bash + +IFCONFIG=/sbin/ifconfig +ROUTE=/sbin/route + +echo +echo "Interfaces" +echo "----------" +echo + +${IFCONFIG} -a | awk ' +BEGIN { + printf "%10-s %20-s\n", "Interface", "Mac Address" + printf "%10-s %20-s\n", "----------", "--------------------" +} +{ if ($0 ~ "eth") + { printf "%10-s %20-s\n", $1,$5 + } +}' + +echo +echo "IP Adresses" +echo "-----------" +echo + +${IFCONFIG} -a | awk ' +BEGIN { + printf "%10-s %15-s %15-s\n", "Interface", "IP Adress", "Mask" + printf "%10-s %15-s %15-s\n", "----------", "---------------", "---------------" +} +{ if ($0 ~ "Link encap:") + { interface = $1 } + if ($0 ~ "inet addr") + { split($2,addr,":") + split($4,mask,":") + printf "%10-s %15-s %15-s\n", interface, addr[2], mask[2] + } +}' + +echo +echo "Network bonds" +echo "-------------" + +cd /proc/net/bonding/ +for i in `ls -1 bond*`; do echo; echo $i; egrep "Bonding Mode|MII Status|Slave Interface" $i; done + +echo +echo "modprobe.conf" +echo "-------------" + +if [ -r /etc/modprobe.conf ] +then + cat /etc/modprobe.conf +elif [ -r /etc/modprobe.d/bonding.conf ] ### new Redhat / OL 6 specification +then + cat /etc/modprobe.d/bonding.conf +fi + +echo +echo "Routing table" +echo "-------------" +echo + +${ROUTE} -n + + +echo +echo "Network" +echo "-------" +echo + +cat /etc/sysconfig/network + +echo +echo "/etc/hosts" +echo "----------" +echo + +cat /etc/hosts + +echo +echo "Names servers" +echo "-------------" +echo + +cat /etc/resolv.conf + +echo +echo "Network Scripts" +echo "---------------" +echo + +cd /etc/sysconfig/network-scripts/ +for i in `ls -1 ifcfg-*` ; do echo $i; cat $i; echo ; done + diff --git a/vdh/latches.sql b/vdh/latches.sql new file mode 100644 index 0000000..ccbf63c --- /dev/null +++ b/vdh/latches.sql @@ -0,0 +1,55 @@ +/********************************************************************** + * File: latches.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 20-Sep-99 + * + * Description: + * Query to find the latches which are being waited on the longest. + * GETS is the total number of times the latch is acquired. + * IMMEDIATE_GETS is the number of times the latch was acquired + * without waiting at all. SPIN_GETS is the number of times that + * the latch was not acquired immediately, but was acquired after + * 1-6 "spins" or "non-pre-emptive waits". SLEEPS is the number + * of times the latch was neither acquired immediately nor acquired + * by non-pre-emptive waits, but instead required one or more + * "pre-emptive waits" (i.e. the process went to "sleep", + * relinquishing the CPU). The latches with the most SLEEPS are + * the site of the most contention... + * + * Mind you, none of this is a problem unless the wait-event + * "latch free" is one of the top five or ten problems in the + * V$SYSTEM_EVENT view, when queried and sorted according to + * the column TIME_WAITED. If "latch free" is not a problem + * overall, then it makes little sense to worry about the results + * of this report... + * + * Modifications: + **********************************************************************/ +set echo off feedback off timing off trimspool on pages 1000 lines 500 + +col name format a25 heading "Latch Name" truncate +col gets format 9,999,999,990 heading "Total Gets" +col immediate_gets format 9,999,999,990 heading "Immediate|Gets" +col spin_gets format 999,990 heading "Spin Gets" +col sleeps format 9,999,990 heading "Sleeps" +col instance new_value V_INSTANCE noprint + +select lower(replace(t.instance,chr(0),'')) instance +from v$thread t, + v$parameter p +where p.name = 'thread' +and t.thread# = to_number(decode(p.value,'0','1',p.value)); + +select name, + gets, + immediate_gets, + spin_gets, + sleeps +from v$latch +where gets > 0 +order by sleeps desc + +spool latches_&&V_INSTANCE +/ +spool off diff --git a/vdh/latchfree.sql b/vdh/latchfree.sql new file mode 100644 index 0000000..a79325b --- /dev/null +++ b/vdh/latchfree.sql @@ -0,0 +1,49 @@ +/******************************************************************** + * File: latchfree.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 01-Dec-99 + * + * Description: + * Script to display more session-level and SQL-level information + * about sessions waiting on a "latch free" wait event. + * + * Modification: + * + ********************************************************************/ +set echo off feedback off timing off pause off +set pages 100 lines 500 trimspool on trimout on space 1 recsep each + +col sid format 990 +col program format a15 word_wrap +col latch format a10 word_wrap +col process format a8 word_wrap heading "Clnt|PID" +col ospid format 9999990 heading "Srvr|PID" +col sql_text format a30 word_wrap +col instance new_value V_INSTANCE noprint +select lower(replace(t.instance,chr(0),'')) instance +from sys.v_$thread t, + sys.v_$parameter p +where p.name = 'thread' +and t.thread# = to_number(decode(p.value,'0','1',p.value)); + +select w.sid, + c.name || ' (child #' || c.child# || ')' latch, + s.program, + s.machine || ', ' || s.process process, + p.spid ospid, + a.sql_text +from v$session_wait w, + v$latch_children c, + v$session s, + v$process p, + v$sqlarea a +where w.event = 'latch free' +and c.addr = w.p1raw +and s.sid = w.sid +and p.addr = s.paddr +and a.address (+) = s.sql_address + +spool latchfree_&&V_INSTANCE +/ +spool off diff --git a/vdh/lgwr_perf.sql b/vdh/lgwr_perf.sql new file mode 100644 index 0000000..01a9ee0 --- /dev/null +++ b/vdh/lgwr_perf.sql @@ -0,0 +1,6 @@ +column event format a30 +column time_waited_micro format 999999999999999999 +column time_waited_micro_fg format 999999999999999999 + +select to_char(sysdate, 'DD/MM/YYYY HH24:MI:SS') my_time, event, total_waits, total_timeouts, time_waited_micro, time_waited_micro_fg from v$system_event where event in ('log file sync', 'log file parallel write'); +select to_char(sysdate, 'DD/MM/YYYY HH24:MI:SS') my_time, name, value from v$sysstat where name in ('redo write time', 'user commits') order by name; diff --git a/vdh/list.sql b/vdh/list.sql new file mode 100644 index 0000000..abb5caa --- /dev/null +++ b/vdh/list.sql @@ -0,0 +1,23 @@ +-- list all files which names containing the passed string and ending in .sql, found in the current directory +-- or in the directories found in the $SQLPATH environment variable +-- the optional second parameter determines how many subdirectories will be searched and defaults to 1 (only the directories itself) + +set termout off +set verify off + +-- check if a second parameter has been passed to define te depth of the search +column 2 new_value 2 + +select '' "2" from dual where rownum = 0; +define ldepth = '&2' + +set termout on + + +-- actual search, if no depth has been given, the depth is set to 1 +!depth=&ldepth; for i in `echo ./ ${ORACLE_PATH:-${SQLPATH}} | tr ':' ' '`; do echo ; echo $i; echo ; cd $i ; find ./ -maxdepth "${depth:-1}" -iname "*&1*.sql" -printf " * %P\n" 2> /dev/null; done + + +-- cleanup +undefine 1 +undefine 2 diff --git a/vdh/list_acl_config.sql b/vdh/list_acl_config.sql new file mode 100644 index 0000000..bfd2bbf --- /dev/null +++ b/vdh/list_acl_config.sql @@ -0,0 +1,45 @@ +column host format a30 +column acl format a50 +column acl_owner format a30 + +select + aclid, + acl, + host, + lower_port, + upper_port, + acl_owner +from + dba_network_acls +order by + host, + acl +; + + +column principal format a30 +column sdate format a20 +column edate format a20 +column privilege format a20 + +break on aclid skip 1 + +select + aclid, + acl, + principal, + privilege, + is_grant, + invert, + to_char(start_date, 'DD/MM/YYYY HH24:MI') sdate, + to_char(end_date, 'DD/MM/YYYY HH24:MI') edate, + acl_owner +from + dba_network_acl_privileges +order by + aclid, + principal, + privilege +; + +clear breaks diff --git a/vdh/list_acl_config_12c.sql b/vdh/list_acl_config_12c.sql new file mode 100644 index 0000000..b3e4a24 --- /dev/null +++ b/vdh/list_acl_config_12c.sql @@ -0,0 +1,47 @@ +column host format a30 +column principal format a30 +column sdate format a20 +column edate format a20 +column privilege format a20 +column acl format a50 +column acl_owner format a30 + + +select + host, + lower_port, + upper_port, + acl, + aclid, + acl_owner +from + dba_host_acls +order by + host, + lower_port, + upper_port +; + + +break on host + +select + host, + ace_order, + lower_port, + upper_port, + principal, + principal_type, + privilege, + to_char(start_date, 'DD/MM/YYYY HH24:MI') sdate, + to_char(end_date, 'DD/MM/YYYY HH24:MI') edate, + grant_type, + inverted_principal +from + dba_host_aces +order by + host, + ace_order +; + +clear breaks diff --git a/vdh/list_apply.sql b/vdh/list_apply.sql new file mode 100644 index 0000000..096f3b9 --- /dev/null +++ b/vdh/list_apply.sql @@ -0,0 +1,34 @@ +set linesize 300 +set pages 50000 + +column apply_name format a30 +column queue_name format a30 +column queue_owner format a30 +column rule_set_owner format a30 +column rule_set_name format a20 +column apply_user format a30 +column apply_database_link format a20 +column ddl_handler format a45 +column status format a10 +column status_change_time_str format a20 +column error_number format 99999 + + +select + apply_name, +-- queue_name, +-- queue_owner, + apply_captured, + rule_set_name, + rule_set_owner, + apply_user, + apply_database_link, + ddl_handler, + status, + to_char(status_change_time, 'DD/MM/YYYY HH24:MI:SS') status_change_time_str, + error_number +from + dba_apply +order by + apply_name +; diff --git a/vdh/list_apply_error_details.sql b/vdh/list_apply_error_details.sql new file mode 100644 index 0000000..6fcea40 --- /dev/null +++ b/vdh/list_apply_error_details.sql @@ -0,0 +1,27 @@ +set linesize 300 +set pages 50000 + + +column source_database format a15 +column error_message format a100 word_wrapped +column rror_crea_time_str format a20 +column message_count format 9G999G999 + +break on apply_name skip page + +select + apply_name, + source_database, + local_transaction_id, + message_count, + error_type, + to_char(error_creation_time, 'DD/MM/YYYY HH24:MI:SS') error_crea_time_str, + error_message +from + dba_apply_error +order by + apply_name, + error_creation_time +; + +clear breaks diff --git a/vdh/list_apply_errors_tables.sql b/vdh/list_apply_errors_tables.sql new file mode 100644 index 0000000..0b4ca29 --- /dev/null +++ b/vdh/list_apply_errors_tables.sql @@ -0,0 +1,25 @@ +set linesize 300 +set pages 50000 + +column error_table format a30 + +select + T.*, + count(*) counted +from + ( select + apply_name, + error_number, + substr(regexp_substr(error_message, 'in table .*'),10) error_table + from + dba_apply_error + ) T +group by + apply_name, + error_number, + error_table +order by + apply_name, + error_number, + error_table + ; diff --git a/vdh/list_arch_dest.sql b/vdh/list_arch_dest.sql new file mode 100644 index 0000000..3ef9e26 --- /dev/null +++ b/vdh/list_arch_dest.sql @@ -0,0 +1,35 @@ +set linesize 150 +set pages 9999 + +column destination format a40 +column status format a15 +column valid_now format a10 +column dest_id heading ID format 99 +column process heading RPROC format a5 +column archiver heading LPROC format a5 +--column lc format 99 +--column la format 99 +column dm format 9999 +column valid_type heading VT format a2 +column valid_role heading VR format a2 +column valid_now format a10 +column seq# format 999999999 + +select lad.dest_id, lad.status, lad.destination, lad.archiver, lad.process, las.recovery_mode, + lad.schedule, + decode(valid_type, 'ONLINE_LOGFILE', 'OL', + 'STANDBY_LOGFILE', 'SL', + 'ALL_LOGFILES', 'AL', + valid_type + ) valid_type, + decode(valid_role, 'PRIMARY_ROLE', 'PR', + 'STANDBY_ROLE', 'SR', + 'ALL_ROLES', 'AR', + valid_role + ) valid_role, + valid_now, lad.delay_mins dm, lad.log_sequence seq# +-- ,las.standby_logfile_count lc, las.standby_logfile_active la +from v$archive_dest lad, v$archive_dest_status las +where lad.dest_id = las.dest_id + and lad.destination is not null +order by lad.dest_id; diff --git a/vdh/list_archivelog_containing_scn.sql b/vdh/list_archivelog_containing_scn.sql new file mode 100644 index 0000000..8b293c0 --- /dev/null +++ b/vdh/list_archivelog_containing_scn.sql @@ -0,0 +1,4 @@ +select resetlogs_id, thread#, sequence#, to_char(next_time, 'DD/MM/YYYY HH24:MI:SS') nexttime, name +from v$archived_log +where &scn between first_change# and next_change# +order by resetlogs_id, thread#, sequence#, name; \ No newline at end of file diff --git a/vdh/list_backups_for_archivelog_range.sql b/vdh/list_backups_for_archivelog_range.sql new file mode 100644 index 0000000..4c626d2 --- /dev/null +++ b/vdh/list_backups_for_archivelog_range.sql @@ -0,0 +1,17 @@ +select last_handle +from ( select br.thread#, br.sequence#, bp.handle, + last_value(bp.handle) over + ( partition by br.thread#, br.sequence# + order by bp.start_time + rows between unbounded preceding and unbounded following + ) last_handle + from rc_backup_redolog br, + rc_backup_piece bp + where br.db_key = bp.db_key + and br.bs_key = bp.bs_key + and br.db_name = 'QDOC' + and br.sequence# between 2671 and 2850 + and br.thread# = 1 + ) +group by last_handle +order by last_handle diff --git a/vdh/list_capture.sql b/vdh/list_capture.sql new file mode 100644 index 0000000..d4df082 --- /dev/null +++ b/vdh/list_capture.sql @@ -0,0 +1,29 @@ +set linesize 300 +set pages 50000 + +column capture_name format a30 +column queue_name format a30 +column status format a10 +column capture_type format a30 +column rule_set_name format a25 +column negative_rule_set_name format a25 +column captured_scn format 999999999999999 +column applied_scn format 999999999999999 +column filtered_scn format 999999999999999 +column last_enqueued_scn format 999999999999999 + +select + capture_name, + queue_name, + status, + start_time, + capture_type, + rule_set_name, + negative_rule_set_name, + captured_scn, + applied_scn, + filtered_scn, + last_enqueued_scn +from + dba_capture +; diff --git a/vdh/list_child_tab.sql b/vdh/list_child_tab.sql new file mode 100644 index 0000000..a855d09 --- /dev/null +++ b/vdh/list_child_tab.sql @@ -0,0 +1,71 @@ +set linesize 150 +set verify off + +column c_constraint_name format a20 +column c_column_name format a25 +column c_owner format a15 +column p_constraint_name format a20 +column c_table_name format a20 +column p_column_name format a25 + +break on c_owner on c_table_name skip 1 on c_constraint_name on p_constraint_name + +select + con.owner c_owner, c_col.table_name c_table_name, con.constraint_name c_constraint_name, + con.r_constraint_name p_constraint_name, c_col.column_name c_column_name, + p_col.column_name p_column_name +from + dba_constraints con, + dba_cons_columns c_col, + dba_cons_columns p_col +where + con.owner = c_col.owner + and con.constraint_name = c_col.constraint_name + and con.r_owner = p_col.owner + and con.r_constraint_name = p_col.constraint_name + and c_col.position = p_col.position + and con.constraint_type = 'R' + and p_col.owner = '&PARENT_TABLE_OWNER' + and p_col.table_name = '&PARENT_TABLE_NAME' +order by + c_owner, c_table_name, c_constraint_name, c_col.position, + p_constraint_name, p_col.position +; + +-- volgende werkt ook en is misschien beter te begrijpen, maar bovenstaand lijkt iets performanter +--with +-- ref_rel as +-- ( select +-- c_con.owner c_owner, c_con.constraint_name c_constraint_name, +-- p_con.owner p_owner, p_con.constraint_name p_constraint_name, +-- c_con.table_name c_table_name +-- from +-- dba_constraints c_con, +-- dba_constraints p_con +-- where +-- c_con.r_owner = p_con.owner +-- and c_con.r_constraint_name = p_con.constraint_name +-- and c_con.constraint_type = 'R' +-- and p_con.owner = '&PARENT_TABLE_OWNER' +-- and p_con.table_name = '&PARENT_TABLE_NAME' +-- ) +--select +-- ref_rel.c_owner, ref_rel.c_table_name, ref_rel.c_constraint_name, +-- ref_rel.p_constraint_name, c_con_col.column_name c_column_name, +-- p_con_col.column_name p_column_name +--from +-- ref_rel, +-- dba_cons_columns c_con_col, +-- dba_cons_columns p_con_col +--where +-- ref_rel.c_owner = c_con_col.owner +-- and ref_rel.c_constraint_name = c_con_col.constraint_name +-- and ref_rel.p_owner = p_con_col.owner +-- and ref_rel.p_constraint_name = p_con_col.constraint_name +-- and c_con_col.position = p_con_col.position +--order by +-- c_owner, c_table_name, c_constraint_name, c_con_col.position, +-- p_constraint_name, p_con_col.position +--; + +clear breaks diff --git a/vdh/list_client_driver_info.sql b/vdh/list_client_driver_info.sql new file mode 100644 index 0000000..943dec9 --- /dev/null +++ b/vdh/list_client_driver_info.sql @@ -0,0 +1,77 @@ +with + sci as + ( select + distinct + inst_id, + sid, + serial#, + client_charset, + client_driver + from + gv$session_connect_info + ) +select + sci.client_charset, + sci.client_driver, + ses.program, + ses.machine, + count(*) counted +from + sci + inner join gv$session ses + on ( sci.inst_id = ses.inst_id + and sci.sid = ses.sid + and sci.serial# = ses.serial# + ) +where + ses.type != 'BACKGROUND' +group by + sci.client_charset, + sci.client_driver, + ses.program, + ses.machine +order by + sci.client_charset, + sci.client_driver, + ses.program, + ses.machine +; + + + + + +with + sci as + ( select + distinct + inst_id, + sid, + serial#, + client_oci_library + from + gv$session_connect_info + ) +select + sci.client_oci_library, + ses.program, + ses.machine, + count(*) counted +from + sci + join gv$session ses + on ( sci.inst_id = ses.inst_id + and sci.sid = ses.sid + and sci.serial# = ses.serial# + ) +where + ses.type != 'BACKGROUND' +group by + sci.client_oci_library, + ses.program, + ses.machine +order by + sci.client_oci_library, + ses.program, + ses.machine +; diff --git a/vdh/list_compressions.sql b/vdh/list_compressions.sql new file mode 100644 index 0000000..5fb44dd --- /dev/null +++ b/vdh/list_compressions.sql @@ -0,0 +1,75 @@ +set verify off + +column counted format 9G999G999 +column mb format 9G999G999G999D99 + +compute sum of counted on owner +compute sum of counted on report +compute sum of mb on owner +compute sum of mb on report + +break on owner on report + +with tabseg as +( select + tab.owner, + tab.compression, + tab.compress_for, + seg.bytes + from + dba_tables tab, + dba_segments seg + where + tab.owner = seg.owner + and tab.table_name = seg.segment_name + and tab.partitioned = 'NO' + and seg.tablespace_name = '&&tbs' + union all + select + part.table_owner, + part.compression, + part.compress_for, + seg.bytes + from + dba_tab_partitions part, + dba_segments seg + where + part.table_owner = seg.owner + and part.table_name = seg.segment_name + and part.partition_name = seg.partition_name + and part.subpartition_count = 0 + and seg.tablespace_name = '&&tbs' + union all + select + spart.table_owner, + spart.compression, + spart.compress_for, + seg.bytes + from + dba_tab_subpartitions spart, + dba_segments seg + where + spart.table_owner = seg.owner + and spart.table_name = seg.segment_name + and spart.subpartition_name = seg.partition_name + and seg.tablespace_name = '&&tbs' +) +select + owner, + compression, + compress_for, + count(*) counted, + sum(bytes)/1024/1024 MB +from + tabseg +group by + owner, + compression, + compress_for +order by + owner, + compression, + compress_for +; + +undef tbs diff --git a/vdh/list_context_indexes.txt b/vdh/list_context_indexes.txt new file mode 100644 index 0000000..3fd6934 --- /dev/null +++ b/vdh/list_context_indexes.txt @@ -0,0 +1,25 @@ +column idx_owner format a30 +column idx_name format a30 +column idx_table format a30 +column idx_text_name format a30 +column idx_sync_interval format a30 +column idx_sync_jobname format a30 + +select + idx_owner, + idx_name, + idx_table, + idx_text_name, + idx_status, + idx_type, + idx_sync_type, + idx_sync_interval, + idx_sync_jobname +from + ctxsys.ctx_indexes +where + idx_table_owner not in ('CTXSYS') +order by + idx_owner, + idx_name +; \ No newline at end of file diff --git a/vdh/list_db_patches.sql b/vdh/list_db_patches.sql new file mode 100644 index 0000000..11e1ffe --- /dev/null +++ b/vdh/list_db_patches.sql @@ -0,0 +1,21 @@ +set linesize 250 +column bundle_series format a15 +column status format a15 +column description format a65 +column action_time format a20 + +select + to_char(action_time, 'DD/MM/YYYY HH24:MI') action_time_str, + action, + bundle_series, + patch_id, + patch_uid, + version, status, + description +from + dba_registry_sqlpatch +order + by action_time, + bundle_series, + patch_id +; diff --git a/vdh/list_db_patches18c.sql b/vdh/list_db_patches18c.sql new file mode 100644 index 0000000..028513c --- /dev/null +++ b/vdh/list_db_patches18c.sql @@ -0,0 +1,32 @@ +set linesize 250 +column name format a15 +column patch_type format a15 +column status format a15 +column description format a65 +column action_time format a20 + +break on name skip page + +select + con.name, + to_char(sqlp.action_time, 'DD/MM/YYYY HH24:MI') action_time_str, + sqlp.action, + sqlp.patch_type, + sqlp.patch_id, + sqlp.patch_uid, + sqlp.source_version, + sqlp.target_version, + sqlp.status, + sqlp.description +from + cdb_registry_sqlpatch sqlp + left outer join v$containers con + on ( sqlp.con_id = con.con_id ) +order by + con.name, + action_time, + patch_type, + patch_id +; + +clear breaks diff --git a/vdh/list_event_triggers.sql b/vdh/list_event_triggers.sql new file mode 100644 index 0000000..496915a --- /dev/null +++ b/vdh/list_event_triggers.sql @@ -0,0 +1,36 @@ +-- list triggers where trigger_type is either after event or before event + +set linesize 250 + +column owner format a30 +column trigger_name format a30 +column trigger_type format a30 +column triggering_event format a30 +column trigger_body format a200 +column table_name format a30 + +break on trigger_name skip page + + +select + owner, + table_name, + trigger_name, + trigger_type, + triggering_event, + status, + trigger_body +from + dba_triggers +where + trigger_type in ('AFTER EVENT', 'BEFORE EVENT') +order by + owner, + trigger_type, + triggering_event, + table_name, + trigger_name +; + + +clear breaks diff --git a/vdh/list_fg_audit_policies.sql b/vdh/list_fg_audit_policies.sql new file mode 100644 index 0000000..c1737f3 --- /dev/null +++ b/vdh/list_fg_audit_policies.sql @@ -0,0 +1,31 @@ +column object_schema format a15 +column object_name format a30 +column policy_owner format a15 +column policy_name format a20 +column policy_text format a65 + +select + object_schema, + object_name, + policy_owner, + policy_name, + policy_text, +-- policy_column, +-- pf_schema, +-- pf_package, +-- pf_function, + sel, + ins, + upd, + del, + audit_trail, + policy_column_options +from + dba_audit_policies +where + enabled= 'YES' +order by + object_schema, + object_name +; + diff --git a/vdh/list_fragmentation.sql b/vdh/list_fragmentation.sql new file mode 100644 index 0000000..1cd05b7 --- /dev/null +++ b/vdh/list_fragmentation.sql @@ -0,0 +1,36 @@ +/* + gives the total_amount of mb free space and the 10 biggest extents + per tablespace of type PERMANENT (with the number of times this extent size extists) + + This query can be used to verify the fragmentation of a tablespace +*/ + +set linesize 120 +set pagesize 9999 +column tablespace_name format a30 +column total_free_mb format 9G999G990D999 +column extent_mb format 9G999G990D999 +column counted format 9G999G990 +break on tablespace_name skip 1 on total_free_mb + +select A.tablespace_name, total_free/1024/1024 total_free_mb, bytes/1024/1024 extent_MB, + counted +from ( select tablespace_name, bytes, counted, + row_number() + over ( partition by tablespace_name + order by bytes desc + ) rn + from ( select A.tablespace_name, A.bytes , count(*) counted + from dba_free_space A, dba_tablespaces B + where A.tablespace_name = B.tablespace_name + and B.contents = 'PERMANENT' + group by A.tablespace_name, bytes + ) + ) A, + ( select tablespace_name, sum(bytes) total_free + from dba_free_space + group by tablespace_name + ) B +where A.tablespace_name = B.tablespace_name + and A.rn <= 10 +order by tablespace_name, rn; diff --git a/vdh/list_freq_histogram_endpoints.sql b/vdh/list_freq_histogram_endpoints.sql new file mode 100644 index 0000000..41babd5 --- /dev/null +++ b/vdh/list_freq_histogram_endpoints.sql @@ -0,0 +1,49 @@ +-- WIP + +select endpoint_actual_value row_value, + curr_num - nvl(prev_num,0) row_count +from ( select endpoint_actual_value, + endpoint_number curr_num, + lag(endpoint_number,1) over + ( order by endpoint_number + ) prev_num + from dba_tab_histograms + where owner = 'FDH' + and table_name = 'F4102' + and column_name = 'IBMCU' + ) +order by endpoint_actual_value +; + + + +select endpoint_actual_value row_value, + curr_num - nvl(prev_num,0) row_count +from ( select endpoint_actual_value, + endpoint_number curr_num, + lag(endpoint_number,1) over + ( order by endpoint_number + ) prev_num + from dba_tab_histograms + where owner = 'SYS' + and table_name = 'QUICKY' + and column_name = 'VELD1' + ) +order by endpoint_actual_value +; + + +select to_date(endpoint_actual_value, 'DD-MON-YY') row_value, + curr_num - nvl(prev_num,0) row_count +from ( select endpoint_actual_value, + endpoint_number curr_num, + lag(endpoint_number,1) over + ( order by endpoint_number + ) prev_num + from dba_tab_histograms + where owner = 'DWHMANAGER' + and table_name = 'SIGNALITIEK' + and column_name = 'SNAPSHOTDATUM' + ) +order by row_value +; \ No newline at end of file diff --git a/vdh/list_implicit_indexes.sql b/vdh/list_implicit_indexes.sql new file mode 100644 index 0000000..7cd1ec9 --- /dev/null +++ b/vdh/list_implicit_indexes.sql @@ -0,0 +1,22 @@ +set verify off + +set linesize 150 + +column table_owner format a30 +column table_name format a30 +column index_owner format a30 +column index_name format a30 + +select obj_t.owner table_owner, + obj_t.object_name table_name, + obj_i.owner index_owner, + obj_i.object_name index_name +from dba_objects obj_t, + dba_objects obj_i, + sys.ind$ ind +where ind.bo# = obj_t.object_id + and ind.obj# = obj_i.object_id + and bitand(ind.property,4096) = 4096 -- index is system generated + and bitand(ind.property,1) = 1 -- index is unique + and obj_i.owner = '&OWNER' +order by table_name, index_name; diff --git a/vdh/list_incarnations.sql b/vdh/list_incarnations.sql new file mode 100644 index 0000000..e49ff36 --- /dev/null +++ b/vdh/list_incarnations.sql @@ -0,0 +1,11 @@ +set linesize 120 +set pages 999 +column incarnation format a15 +column fdo format a5 + +select rpad(' ', level) || incarnation# incarnation, prior_incarnation#, resetlogs_id, resetlogs_change#, + to_char(resetlogs_time, 'DD/MM/YYYY HH24:MI:SS') resetlogstime, status, flashback_database_allowed fdo +from v$database_incarnation +connect by prior_incarnation# = prior incarnation# + start with prior_incarnation# = 0 +order siblings by incarnation#, resetlogs_time; \ No newline at end of file diff --git a/vdh/list_incoming_db_links.sql b/vdh/list_incoming_db_links.sql new file mode 100644 index 0000000..646730c --- /dev/null +++ b/vdh/list_incoming_db_links.sql @@ -0,0 +1,52 @@ +-- uses the aud$ data to generate a list of all incoming database links +-- the accurateness of the list depends on how long the audit data is stored and inactive db links will not show up in this list + +set linesize 250 + +column source_globalname format a30 +column dblink_name format a50 +column source_host format a40 +column dest_schema format a30 +column first_connection format a20 +column last_connection format a20 +column cnt_connections format 9G999G999G999 + +break on source_globalname on dblink_name on userhost + +with + incoming as + ( select + regexp_replace(comment$text, '.*SOURCE_GLOBAL_NAME=(([^,]+)),.*', '\1') source_globalname, + regexp_replace(comment$text, '.*DBLINK_NAME=(([^,]+)),.*', '\1') dblink_name, + userhost source_host, + userid dest_schema, + ntimestamp# + from + sys.aud$ + where + comment$text like 'DBLINK%' + ) +select + source_globalname, + dblink_name, + source_host, + dest_schema, + to_char(min(ntimestamp#),'DD/MM/YYYY HH24:MI') first_connection, + to_char(max(ntimestamp#), 'DD/MM/YYYY HH24:MI') last_connection, + count(*) cnt_connections +from + incoming +group by + source_globalname, + dblink_name, + source_host, + dest_schema +order by + source_globalname, + dblink_name, + source_host, + dest_schema +; + +clear breaks + diff --git a/vdh/list_job_execution_details.sql b/vdh/list_job_execution_details.sql new file mode 100644 index 0000000..bb67c8d --- /dev/null +++ b/vdh/list_job_execution_details.sql @@ -0,0 +1,42 @@ +-- list the execution details for a given job. +-- parameters asked for are the job owner, the job name and the number of past executions that need to be listed + +set linesize 250 + +column log_date format a20 +column req_start_date format a35 +column actual_start_date format a35 +column run_duration format a14 +column status format a10 +column owner format a15 +column job_name format a28 + +select + instance_id, + -- to_char(log_date, 'DD/MM/YYYY HH24:MI:SS') log_date, + to_char(req_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') req_start_date, + to_char(actual_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') actual_start_date, + run_duration, status, error# +from + ( select + owner, job_name, instance_id, log_date, req_start_date, actual_start_date, + run_duration, status, error#, + row_number () over + ( partition by owner, job_name + order by log_date desc + ) rn + from + dba_scheduler_job_run_details + where + owner = '&job_owner' + and job_name = '&job_name' + ) jrd +where + rn <= &nbr_executions +order by + jrd.log_date desc +; + +undef job_owner +undef job_name +undef nbr_executions diff --git a/vdh/list_lun_wwid.sh b/vdh/list_lun_wwid.sh new file mode 100644 index 0000000..267005c --- /dev/null +++ b/vdh/list_lun_wwid.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +### list the netapp lun and the corresponding WWID and serial +### it's ugly but does the trick +### when I have some time, I should convert this to perl + +for i in `sanlun lun show | awk '{if (NR > 1) { print $1$2}}' | sort -u` +do + echo $i `sanlun lun show -p $i | grep DM-MP | awk '{gsub(/[()]/,""); print $5; print $3; print $4}'` +done | \ +awk ' +BEGIN { + printf "%80-s %7-s %25-s %40-s %12-s\n", "LUN", "DM", "ALIAS", "WWID", "SERIAL" + printf "%80-s %7-s %25-s %40-s %12-s\n", "--------------------------------------------------------------------------------", "-------", "-------------------------", "----------------------------------------", "------------" +} +{ + cmd="sanlun lun show " $1 " -v | grep \"Serial number\" | sort -u | tr -s \" \" | cut -d\" \" -f3" + cmd | getline serial + close(cmd) + printf "%80-s %7-s %25-s %40-s %12-s\n", $1, $2, $3, $4, serial +}' + diff --git a/vdh/list_na_luns.sh b/vdh/list_na_luns.sh new file mode 100644 index 0000000..6af4c39 --- /dev/null +++ b/vdh/list_na_luns.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +### list the netapp lun and the corresponding WWID and serial +### it's ugly but does the trick +### when I have some time, I should convert this to perl + +for i in `sanlun lun show | awk '{if (NR > 3) { print $1":"$2}}' | sort -u` +do + echo $i `sanlun lun show -p $i | grep "Host Device" | awk '{gsub(/[()]/," "); print $3; print $4}'` +done | \ +awk ' +{ + cmd="sanlun lun show "$1" -v | grep \"Serial number\" | sort -u | tr -s \" \" | cut -d\" \" -f5" + cmd | getline serial + close(cmd) + cmd="sanlun lun show -p "$1" | grep \"LUN:\" | tr -s \" \" | cut -d\" \" -f3" + cmd | getline lunid + close(cmd) + printf "%3-s %110-s %25-s %40-s %12-s\n", lunid, $1, $2, $3, serial +}' | sort -n | awk ' +BEGIN { + printf "%3-s %110-s %25-s %40-s %12-s\n", "ID", "LUN", "DM", "WWID", "SERIAL" + printf "%3-s %110-s %25-s %40-s %12-s\n", "---", "--------------------------------------------------------------------------------------------------------------", "-------------------------", "----------------------------------------", "------------" +} +{ + print $0 +}' diff --git a/vdh/list_nagios_notifications.sql b/vdh/list_nagios_notifications.sql new file mode 100644 index 0000000..9584ba3 --- /dev/null +++ b/vdh/list_nagios_notifications.sql @@ -0,0 +1,13 @@ +set linesize 130 +set pages 999 + +column datum format a10 +column client format a15 +column tijd format a5 +column bericht format a90 word_wrapped + +select to_char(date_time, 'DD/MM/YYYY') datum, client, to_char(date_time, 'HH24:MI') tijd, trim(checkname) || ': ' || trim(message) bericht +from notifications +where weeknr = &weeknr + and year = &year +order by date_time; \ No newline at end of file diff --git a/vdh/list_optstat_history.sql b/vdh/list_optstat_history.sql new file mode 100644 index 0000000..067402b --- /dev/null +++ b/vdh/list_optstat_history.sql @@ -0,0 +1,55 @@ +/* list the history of the optimizer statistic operations + optionally filters on the start time in the format DD/MM/YYYY and the target name (which supports wildcards) +*/ + +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +column inputpar02 new_value 2 noprint +select 2 inputpar02 from dual where 1=2; +set feedback 6 + + +column operation format a40 +column target format a64 +column start_time_str format a30 +column end_time_str format a30 +column status format a15 +column duration format a15 +column nbr_tasks format 9G999G999 + +with task_counts +as +( select + opid, + count(*) nbr_tasks + from + dba_optstat_operation_tasks + group by + opid +) +select + op.id, + op.operation, + op.target, + to_char(op.start_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') start_time_str, + to_char(op.end_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') end_time_str, + cast ((op.end_time - op.start_time) as interval day(2) to second(0)) duration, + op.status, + tc.nbr_tasks +from + dba_optstat_operations op + left outer join task_counts tc + on ( op.id = tc.opid + ) +where + start_time >= to_date(nvl('&1','01/01/1970'), 'DD/MM/YYYY') + and nvl(target, ' ') like nvl('&2', '%') +order by + id +; + +undef 1 +undef 2 \ No newline at end of file diff --git a/vdh/list_optstat_tasks.sql b/vdh/list_optstat_tasks.sql new file mode 100644 index 0000000..c986a8a --- /dev/null +++ b/vdh/list_optstat_tasks.sql @@ -0,0 +1,88 @@ +/* list the optimizer statistic operation tasks + + The script will ask for an optionally filter on the operation id (can be listed via the list_optstat_history.sql script) + and an optional filter on the target name (supports wildcards) and the start time (DD/MM/YYYY) + It will also ask if the notes column needs to be displayed (this is a large xml, so best only when filtering) +*/ + +set linesize 300 +set pages 50000 + +set verify off +column target format a64 +column target_type format a25 +column nbr_blocks format 9G999G999G999 +column start_time_str format a30 +column end_time_str format a30 +column status format a15 +column duration format a15 +column estimated_cost format 999G999 +column notes_xml format a220 + +accept opid_filter number prompt "Filter on opertions id: " +accept target_filter char prompt "Filter on target: " +accept starttime_filter char prompt "Filter on start time (DD/MM/YYYY): " +accept display_notes char default 'NO' prompt "Display notes column (YES|NO, default NO): " + +var c_result refcursor +set autoprint on +set serveroutput on + +set feedback off + +DECLARE + + l_filter varchar2(200); + l_where varchar2(10); + l_concat varchar2(10); + l_query clob; + +BEGIN + + if &opid_filter != 0 then + l_where := ' where '; + l_filter := 'opid = &opid_filter'; + l_concat := ' and '; + end if; + + if '&target_filter' is not null then + l_where := ' where '; + l_filter := l_filter || l_concat || 'target like ''&target_filter'''; + l_concat := ' and '; + end if; + + if '&starttime_filter' is not null then + l_where := ' where '; + l_filter := l_filter || l_concat || 'start_time >= to_date(''&starttime_filter'', ''DD/MM/YYYY'')'; + end if; + + l_query := q'[select + opid, + target, + target_type, + target_size nbr_blocks, + to_char(start_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') start_time_str, + to_char(end_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') end_time_str, + cast ((end_time - start_time) as interval day(2) to second(0)) duration, + status, + estimated_cost, + priority ]'; + + if upper('&display_notes') = 'YES' + then + l_query := l_query || q'[ ,xmlserialize(content xmltype(nvl2(notes, notes, '')) as clob indent size = 2) notes_xml ]'; + end if; + + l_query := l_query || 'from dba_optstat_operation_tasks' || l_where || l_filter || ' order by start_time, end_time'; + + open :c_result for + l_query; + +END; +/ + +set feedback 6 + +undef opid_filter +undef target_filter +undef starttime_filter \ No newline at end of file diff --git a/vdh/list_ovm_physical_disks.py b/vdh/list_ovm_physical_disks.py new file mode 100644 index 0000000..200f663 --- /dev/null +++ b/vdh/list_ovm_physical_disks.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python2 + +### uses the OVM CLI to give an overview of the physcial disks known by the ovm manager, together with the WWID, size, ... information +### Can be executed from any host which has ssh (port 10000) access to the ovm manager +### When executed, the script will ask for the OVM hostname or ip address and for the admin password + +import sys +import re +import paramiko +import getpass + +OvmHost=raw_input("OVM hostname or ip address: ") +ovmPwd=getpass.getpass("admin user password: ") + +print +print("{lunid:40s} {state:10s} {size:10s} {shareable:10s} {wwid:60s} {lunname:70s}".format(lunid="OVM Lun ID", state="Status", size="Size (GiB)", shareable='Shareable', wwid="WWID", lunname="OVM LUN Name")) +print("{lunid:40s} {state:10s} {size:10s} {shareable:10s} {wwid:60s} {lunname:70s}".format(lunid="---------------------------------------", state="----------", size="----------", shareable="----------", wwid="-----------------------------------------------------------", lunname="---------------------------------------------------------------------")) + +client=paramiko.SSHClient() +client.load_system_host_keys() +client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + +client.connect(OvmHost, port=10000, username='admin', password=ovmPwd, allow_agent=False,look_for_keys=False) +stdin,stdout,stderr=client.exec_command("list physicaldisk") +PDOutput=stdout.read() + +for PDLine in PDOutput.split('\n'): + if "id:" in PDLine : + PD = re.split('[:\s+]', PDLine.strip(), maxsplit=4) + client.connect(OvmHost, port=10000, username='admin', password=ovmPwd, allow_agent=False,look_for_keys=False) + stdin,stdout,stderr=client.exec_command("show physicaldisk id=" + PD[1]) + PDDetailOutput=stdout.read() + PDWWID='' + PDState='' + PDSize='' + for PDDetailOutputLine in PDDetailOutput.split('\n'): + if 'Page83 ID =' in PDDetailOutputLine: + PDWWID = re.split('=', PDDetailOutputLine.strip()) + if 'State =' in PDDetailOutputLine: + PDState = re.split('=', PDDetailOutputLine.strip()) + if 'Size (GiB) =' in PDDetailOutputLine: + PDSize = re.split('=', PDDetailOutputLine.strip()) + if 'Shareable =' in PDDetailOutputLine: + PDShareable = re.split('=', PDDetailOutputLine.strip()) + print("{lunid:40s} {state:10s} {size:10.2f} {shareable:10s} {wwid:60s} {lunname:70s}".format(lunid=PD[1].strip(), state=PDState[1].strip(), size=float(PDSize[1].strip()), shareable=PDShareable[1].strip(), wwid=PDWWID[1].strip(), lunname=PD[4].strip())) diff --git a/vdh/list_parameters.sql b/vdh/list_parameters.sql new file mode 100644 index 0000000..ecdad28 --- /dev/null +++ b/vdh/list_parameters.sql @@ -0,0 +1,39 @@ +-- alles +select x.inst_id inst_id,x.indx+1 num,ksppinm name,ksppity type, + ksppstvl value, ksppstdvl display_value, ksppstdf isdefault, + decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE') isses_modifiable, + decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',3,'IMMEDIATE','FALSE') issys_modifiable, + decode(bitand(ksppiflg,4),4,'FALSE',decode(bitand(ksppiflg/65536,3), 0, 'FALSE','TRUE')) isinstance_modifiable, + decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismodified, + decode(bitand(ksppstvf,2),2,'TRUE','FALSE') isadjusted, + decode(bitand(ksppilrmflg/64, 1), 1, 'TRUE', 'FALSE') isdeprecated, + ksppdesc description, ksppstcmnt update_comment, ksppihash hash +from x$ksppi x, x$ksppcv y +where (x.indx = y.indx) + + +-- gewijzigde + _ +set linesize 180 +set pagesize 9999 +COLUMN display_value FORMAT a15 word_wrapped +COLUMN value FORMAT a15 word_wrapped +COLUMN name FORMAT a35 +COLUMN update_comment FORMAT a15 word_wrapped +COLUMN description ON FORMAT a20 word_wrapped + +select x.inst_id inst_id,ksppinm name,ksppity type, + ksppstvl value, ksppstdf isdefault, + decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE') isses_modifiable, + decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',3,'IMMEDIATE','FALSE') issys_modifiable, + decode(bitand(ksppiflg,4),4,'FALSE',decode(bitand(ksppiflg/65536,3), 0, 'FALSE','TRUE')) isinstance_modifiable, + decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismodified, + decode(bitand(ksppstvf,2),2,'TRUE','FALSE') isadjusted, + decode(bitand(ksppilrmflg/64, 1), 1, 'TRUE', 'FALSE') isdeprecated, + ksppdesc description, ksppstcmnt update_comment +from x$ksppi x, x$ksppcv y +where (x.indx = y.indx) + and ( ksppstdf = 'FALSE' + or translate(ksppinm,'_','#') like '##%' + -- or translate(ksppinm,'_','#') like '#%' + ) +order by x.inst_id, ksppinm; diff --git a/vdh/list_parameters2.sql b/vdh/list_parameters2.sql new file mode 100644 index 0000000..2436d77 --- /dev/null +++ b/vdh/list_parameters2.sql @@ -0,0 +1,14 @@ +set linesize 180 +set pagesize 9999 +COLUMN value FORMAT a40 word_wrapped +COLUMN name FORMAT a35 +column inst_id format 99999 + +select x.inst_id inst_id, ksppinm name, ksppstvl value, ksppstdf isdefault +from x$ksppi x, x$ksppcv y +where (x.indx = y.indx) + and ( ksppstdf = 'FALSE' + or translate(ksppinm,'_','#') like '##%' + -- or translate(ksppinm,'_','#') like '#%' + ) +order by x.inst_id, ksppinm; diff --git a/vdh/list_parent_tab.sql b/vdh/list_parent_tab.sql new file mode 100644 index 0000000..b9afaae --- /dev/null +++ b/vdh/list_parent_tab.sql @@ -0,0 +1,35 @@ +set linesize 150 +set verify off + +column c_constraint_name format a20 +column c_column_name format a25 +column p_owner format a15 +column p_constraint_name format a20 +column p_table_name format a20 +column p_column_name format a25 + +break on p_owner on p_table_name skip 1 on p_constraint_name on c_constraint_name + +select + con.r_owner p_owner, p_col.table_name p_table_name, con.r_constraint_name p_constraint_name, + con.constraint_name c_constraint_name, p_col.column_name p_column_name, + c_col.column_name c_column_name +from + dba_constraints con, + dba_cons_columns c_col, + dba_cons_columns p_col +where + con.owner = c_col.owner + and con.constraint_name = c_col.constraint_name + and con.r_owner = p_col.owner + and con.r_constraint_name = p_col.constraint_name + and c_col.position = p_col.position + and con.constraint_type = 'R' + and con.owner = '&CHILD_TABLE_OWNER' + and con.table_name = '&CHILD_TABLE_NAME' +order by + p_owner, p_table_name, p_constraint_name, p_col.position, + c_constraint_name, c_col.position +; + +clear breaks diff --git a/vdh/list_pdb_parameters.sql b/vdh/list_pdb_parameters.sql new file mode 100644 index 0000000..76ac712 --- /dev/null +++ b/vdh/list_pdb_parameters.sql @@ -0,0 +1,35 @@ +set pages 50000 +set linesize 300 + +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + +column container_name format a30 +column sid format a30 +column parameter_name format a40 +column parameter_value format a50 word_wrapped + +break on container_name duplicates skip 1 + +select + con.name container_name, + sp.sid, + sp.name parameter_name, + value$ parameter_value +from + pdb_spfile$ sp, + v$containers con +where + sp.pdb_uid = con.con_uid + and con.name like nvl('&1', '%') +order by + con.name, + sp.name +; + +clear breaks +undef 1 diff --git a/vdh/list_pdb_saved_states.sql b/vdh/list_pdb_saved_states.sql new file mode 100644 index 0000000..a616cdd --- /dev/null +++ b/vdh/list_pdb_saved_states.sql @@ -0,0 +1,19 @@ +set pages 50000 +set linesize 300 + +column con_name format a30 +column instance_name format a30 +column state format a14 +column restricted format a10 + +select + con_name, + instance_name, + state, + restricted +from + dba_pdb_saved_states +order by + con_name, + instance_name +; diff --git a/vdh/list_pdb_services.sql b/vdh/list_pdb_services.sql new file mode 100644 index 0000000..aeaf45e --- /dev/null +++ b/vdh/list_pdb_services.sql @@ -0,0 +1,33 @@ +set pages 50000 +set linesize 300 + +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + + +column pdb format a30 +column name format a30 +column network_name format a30 + +break on pdb duplicates skip 1 + +select + pdb, + name, + network_name +from + cdb_services +where + pdb like nvl('&1', '%') +order by + pdb, + name +; + +clear breaks + +undef 1 diff --git a/vdh/list_pdb_violations.sql b/vdh/list_pdb_violations.sql new file mode 100644 index 0000000..d3e3432 --- /dev/null +++ b/vdh/list_pdb_violations.sql @@ -0,0 +1,33 @@ +set pages 50000 +set linesize 300 + +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + +column name format a30 +column time_str format a20 +column status format a10 +column cause format a40 word_wrapped +column message format a110 word_wrapped + +select + name, + to_char(time, 'DD/MM/YYYY HH24:MI:SS') time_str, + status, + cause, + message +from + pdb_plug_in_violations +where + status != 'RESOLVED' + and name like nvl('&1', '%') +order by + name, + time +; + +undef 1 diff --git a/vdh/list_pdbs.sql b/vdh/list_pdbs.sql new file mode 100644 index 0000000..b55bc9b --- /dev/null +++ b/vdh/list_pdbs.sql @@ -0,0 +1,20 @@ +set pages 50000 +set linesize 300 + +column name format a30 +column state format a14 +column restricted format a10 +column open_time_str format a26 +column total_size_gb format 999G999D99 + +select + name, + open_mode, + restricted, + to_char(open_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') open_time_str, + (total_size/1024/1024/1024) total_size_gb +from + v$containers +order by + name +; diff --git a/vdh/list_propagation.sql b/vdh/list_propagation.sql new file mode 100644 index 0000000..14126cb --- /dev/null +++ b/vdh/list_propagation.sql @@ -0,0 +1,35 @@ +set linesize 300 +set pages 50000 + +-- propagations +column propagation_name format a30 +column source_queue_owner format a20 +column source_queue_name format a30 +column destination_queue_owner format a20 +column destination_queue_name format a30 +column destination_dblink format a30 +column queue_to_queue format a10 +column status format a10 +column error_date_str format a20 +column acked_scn format 999999999999999 + +select + propagation_name, + source_queue_owner, + source_queue_name, + destination_queue_owner, + destination_queue_name, + destination_dblink, + queue_to_queue, + acked_scn, + status, + to_char(error_date, 'DD/MM/YYYY HH24:MI:SS') error_date_str +from + dba_propagation +order by + propagation_name, + source_queue_owner, + source_queue_name, + destination_queue_owner, + destination_queue_name +; diff --git a/vdh/list_rls_policies.sql b/vdh/list_rls_policies.sql new file mode 100644 index 0000000..19acfcd --- /dev/null +++ b/vdh/list_rls_policies.sql @@ -0,0 +1,36 @@ +-- list the row level security policies + +set linesize 250 +set pages 50000 + +column object_owner format a30 +column object_name format a30 +column pf_owner format a30 +column function format a30 +column policy_name format a30 +column package format a30 + +select + object_owner, + object_name, + policy_name, + pf_owner, + package, + function, + enable, + sel, + ins, + upd, + del, + idx +from + dba_policies +where + object_owner not in + ( 'SYSTEM', 'XDB', 'MDSYS') +order by + object_owner, + object_name, + policy_name +; + diff --git a/vdh/list_scheduled_jobs.sql b/vdh/list_scheduled_jobs.sql new file mode 100644 index 0000000..e64a4fe --- /dev/null +++ b/vdh/list_scheduled_jobs.sql @@ -0,0 +1,25 @@ +-- list the scheduled jobs + +set linesize 250 +column owner format a15 +column state format a10 +column failure_count format 999 heading FC +column run_count format 99999 heading RC +column job_name format a28 +column next_run_date format a35 +column start_date format a35 +column last_start_date format a35 +column job_class format a30 + +select + owner, job_name, schedule_type,state, run_count, failure_count, + to_char(start_date, 'DD/MM/YYYY HH24:MI:SS TZR') start_date, + to_char(last_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') last_start_date, + to_char(next_run_date, 'DD/MM/YYYY HH24:MI:SS TZR') next_run_date, + job_class +from + dba_scheduler_jobs +order by + owner, job_name +; + diff --git a/vdh/list_schedules.sql b/vdh/list_schedules.sql new file mode 100644 index 0000000..6b35830 --- /dev/null +++ b/vdh/list_schedules.sql @@ -0,0 +1,24 @@ +-- list information on the job scheduler schedules + +set linesize 240 +set pages 50000 + +column owner format a30 +column schedule_name format a30 +column str_start_date format a40 +column repeat_interval format a80 + +select + owner, + schedule_name, + schedule_type, + to_char(start_date, 'DD/MM/YYYY HH24:MI:SS TZR') str_start_date, + repeat_interval +from + dba_scheduler_schedules +order by + owner, + schedule_name +; + + diff --git a/vdh/list_segment_growth_per_day.sql b/vdh/list_segment_growth_per_day.sql new file mode 100644 index 0000000..8d2a324 --- /dev/null +++ b/vdh/list_segment_growth_per_day.sql @@ -0,0 +1,70 @@ +-- show the allocated delta per day for a given segment + +set linesize 200 +set pages 50000 + +column day_str format a10 +column object_name format a30 +column subobject_name format a30 +column owner format a30 +column object_type format a20 +column allocated_delta_mb format 9G999G999 +column tablespace_name format a40 + +accept _owner prompt 'Segment Owner: ' +accept _segment_name prompt 'Segment Name: ' +accept _subsegment_name Prompt 'Sub Segment Name: ' + +select + to_char(day, 'DD/MM/YYYY') day_str, + owner, + object_name, + subobject_name, + object_type, + tablespace_name, + allocated_delta_mb +from + ( select + trunc(snap.end_interval_time) day, + obj.owner, + obj.object_name, + obj.subobject_name, + obj.object_type, + obj.tablespace_name, + sum(hseg.space_allocated_delta/1024/1024) allocated_delta_mb + from + dba_hist_seg_stat hseg + join dba_hist_seg_stat_obj obj + on ( hseg.dbid = obj.dbid + and hseg.obj# = obj.obj# + and hseg.ts# = obj.ts# + ) + join dba_hist_snapshot snap + on ( hseg.snap_id = snap.snap_id + and hseg.instance_number = snap.instance_number + and hseg.dbid = snap.dbid + ) + join v$database db + on ( hseg.dbid = db.dbid ) + where + obj.owner = '&_owner' + and obj.object_name = '&_segment_name' + and ( obj.subobject_name = nvl('&_subsegment_name', obj.subobject_name) + or obj.subobject_name is null + ) + and hseg.instance_number = 1 + group by + trunc(snap.end_interval_time), + obj.owner, + obj.object_name, + obj.subobject_name, + obj.object_type, + tablespace_name + ) +order by + day +; + +undef _owner +undef _segment_name +undef _subsegment_name diff --git a/vdh/list_session_counts.sql b/vdh/list_session_counts.sql new file mode 100644 index 0000000..6e06029 --- /dev/null +++ b/vdh/list_session_counts.sql @@ -0,0 +1,10 @@ +column service_name format a25 +column machine format a35 +column username format a30 +break on inst_id skip 2 on service_name skip 1 + +select inst_id, service_name, machine, username, count(*) counted +from gv$session +where username is not null +group by inst_id, service_name, username, machine +order by inst_id, service_name, username, machine; \ No newline at end of file diff --git a/vdh/list_sessions.sql b/vdh/list_sessions.sql new file mode 100644 index 0000000..d5ffc86 --- /dev/null +++ b/vdh/list_sessions.sql @@ -0,0 +1,11 @@ +set linesize 150 +set pagesize 999 +column sid format 9999 +column machine format a20 +column osuser format a20 +column user format a15 +column program format a30 + +select sid, serial#, username, machine, osuser, program, server, last_call_et +from v$session +where username is not null; diff --git a/vdh/list_sessions_rac.sql b/vdh/list_sessions_rac.sql new file mode 100644 index 0000000..705e0a6 --- /dev/null +++ b/vdh/list_sessions_rac.sql @@ -0,0 +1,15 @@ +set linesize 200 +set pagesize 999 +column sid format 9999 +column machine format a25 +column osuser format a20 +column user format a15 +column program format a35 +column service_name format a20 + + +select instance_name, sid, serial#, username, machine, osuser, program, service_name, failover_type,failover_method,failed_over +from gv$session ses, gv$instance inst +where ses.inst_id = inst.inst_id + and service_name !='SYS$BACKGROUND' +order by instance_name, sid, serial#; diff --git a/vdh/list_stale_or_empty_tab.sql b/vdh/list_stale_or_empty_tab.sql new file mode 100644 index 0000000..fd42fc2 --- /dev/null +++ b/vdh/list_stale_or_empty_tab.sql @@ -0,0 +1,94 @@ +set pages 50000 +set linesize 300 + +column owner heading "Owner" format a30 +column table_name heading "Object Name" format a30 +column partition_name heading "Partition|Name" format a30 +column subpartition_name heading "Sub Partition|Name" format a30 +column object_type heading "Object Type" format a12 +column obj_created_str heading "Creation Date" format a16 +column last_analyzed_str heading "Analyzed Date" format a16 +column stattype_locked heading "Stats|Lock" format a5 +column inserts heading "Inserts" format 999G999G999 +column updates heading "Updated" format 999G999G999 +column deletes heading "Deletes" format 999G999G999 +column truncated heading "Trunc" format a5 +column drop_segments heading "Dropped|Segments" format 9G999G999 + +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + + +break on owner skip 1 + +select + stat.owner, + stat.table_name, + stat.partition_name, + stat.subpartition_name, + stat.object_type, + to_char(obj.created, 'DD/MM/YYYY HH24:MI') obj_created_str, + to_char(stat.last_analyzed, 'DD/MM/YYYY HH24:MI') last_analyzed_str, + stat.stattype_locked, + mod.inserts, + mod.updates, + mod.deletes, + mod.truncated, + mod.drop_segments +from + dba_tab_statistics stat + left outer join dba_tab_modifications mod + on ( stat.owner = mod.table_owner + and stat.table_name = mod.table_name + and ( stat.partition_name = mod.partition_name + or stat.object_type != 'PARTITION' + ) + and ( stat.table_name = mod.table_name + and stat.subpartition_name = mod.subpartition_name + or stat.object_type != 'SUBPARTITION' + ) + ) + join dba_objects obj + on ( stat.owner = obj.owner + and stat.table_name = obj.object_name + and ( nvl(stat.subpartition_name, stat.partition_name) = obj.subobject_name + or ( stat.partition_name is null + and obj.subobject_name is null + ) + ) + ) +where + ( stat.stale_stats = 'YES' + or stat.last_analyzed is null + ) + and stat.owner not in + ( 'SYS', 'SYSTEM', 'WMSYS', 'GSMADMIN_INTERNAL','ANONYMOUS','APEX_030200','APEX_040000','APEX_SSO','APPQOSSYS','CTXSYS','DBSNMP','DIP', + 'EXFSYS','FLOWS_FILES','MDSYS','OLAPSYS','ORACLE_OCM','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWBSYS', 'SI_INFORMTN_SCHEMA', + 'SQLTXADMIN','SQLTXPLAIN','SYS','SYSMAN','SYSTEM','TRCANLZR','WMSYS','XDB','XS$NULL','PERFSTAT','STDBYPERF','MGDSYS','OJVMSYS' + ) + and stat.owner like nvl('&1', '%') + -- filter out temporary and dropped tables + and (stat.owner, stat.table_name) not in + ( select + tab.owner, + tab.table_name + from + dba_tables tab + where + tab.temporary = 'Y' + or tab.dropped = 'YES' + ) +order by + stat.owner, + stat.table_name, + stat.partition_name nulls first, + stat.subpartition_name nulls first +; + +clear breaks + +undef 1 diff --git a/vdh/list_stale_or_empty_tab2.sql b/vdh/list_stale_or_empty_tab2.sql new file mode 100644 index 0000000..db0ca4a --- /dev/null +++ b/vdh/list_stale_or_empty_tab2.sql @@ -0,0 +1,108 @@ +set pages 50000 +set linesize 300 + +column owner heading "Owner" format a30 +column table_name heading "Object Name" format a30 +column partition_name heading "Partition|Name" format a30 +column subpartition_name heading "Sub Partition|Name" format a30 +column object_type heading "Object Type" format a12 +column obj_created_str heading "Creation Date" format a16 +column last_analyzed_str heading "Analyzed Date" format a16 +column stattype_locked heading "Stats|Lock" format a5 +column inserts heading "Inserts" format 999G999G999 +column updates heading "Updated" format 999G999G999 +column deletes heading "Deletes" format 999G999G999 +column truncated heading "Trunc" format a5 +column drop_segments heading "Dropped|Segments" format 9G999G999 + +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + + +break on owner skip 1 + +with tab_stats as +( select + --+ MATERIALIZE no_merge(dba_tables) + owner, + table_name, + partition_name, + subpartition_name, + object_type, + last_analyzed, + stattype_locked + from + dba_tab_statistics + where + ( stale_stats = 'YES' + or last_analyzed is null + ) + and owner not in + ( 'SYS', 'SYSTEM', 'WMSYS', 'GSMADMIN_INTERNAL','ANONYMOUS','APEX_030200','APEX_040000','APEX_SSO','APPQOSSYS','CTXSYS','DBSNMP','DIP', + 'EXFSYS','FLOWS_FILES','MDSYS','OLAPSYS','ORACLE_OCM','ORDDATA','ORDPLUGINS','ORDSYS','OUTLN','OWBSYS', 'SI_INFORMTN_SCHEMA', + 'SQLTXADMIN','SQLTXPLAIN','SYS','SYSMAN','SYSTEM','TRCANLZR','WMSYS','XDB','XS$NULL','PERFSTAT','STDBYPERF','MGDSYS','OJVMSYS' + ) + and owner like nvl('&1', '%') + -- filter out temporary and dropped tables + and (owner, table_name) not in + ( select + tab.owner, + tab.table_name + from + dba_tables tab + where + tab.temporary = 'Y' + or tab.dropped = 'YES' + ) +) +select + --+ no_merge(stat) + stat.owner, + stat.table_name, + stat.partition_name, + stat.subpartition_name, + stat.object_type, + to_char(obj.created, 'DD/MM/YYYY HH24:MI') obj_created_str, + to_char(stat.last_analyzed, 'DD/MM/YYYY HH24:MI') last_analyzed_str, + stat.stattype_locked, + mod.inserts, + mod.updates, + mod.deletes, + mod.truncated, + mod.drop_segments +from + tab_stats stat + left outer join dba_tab_modifications mod + on ( stat.owner = mod.table_owner + and stat.table_name = mod.table_name + and ( stat.partition_name = mod.partition_name + or stat.object_type != 'PARTITION' + ) + and ( stat.table_name = mod.table_name + and stat.subpartition_name = mod.subpartition_name + or stat.object_type != 'SUBPARTITION' + ) + ) + join dba_objects obj + on ( stat.owner = obj.owner + and stat.table_name = obj.object_name + and ( nvl(stat.subpartition_name, stat.partition_name) = obj.subobject_name + or ( stat.partition_name is null + and obj.subobject_name is null + ) + ) + ) +order by + stat.owner, + stat.table_name, + stat.partition_name nulls first, + stat.subpartition_name nulls first +; + +clear breaks + +undef 1 diff --git a/vdh/list_top_segments_growth.sql b/vdh/list_top_segments_growth.sql new file mode 100644 index 0000000..f930ea6 --- /dev/null +++ b/vdh/list_top_segments_growth.sql @@ -0,0 +1,60 @@ +-- list the top 10 segments based on growth in a given tablespace +-- provide the tablespace name as script argument +-- +-- requires the diagnostic pack + +set linesize 200 +set pages 50000 + +column min_snap_time format a30 +column max_snap_time format a30 +column object_name format a30 +column subobject_name format a30 +column owner format a30 +column object_type format a20 +column total_allocated_delta_mb format 9G999G999 + + +select + * +from + ( select + min(snap.begin_interval_time) min_snap_time, + max(snap.end_interval_time) max_snap_time, + obj.owner, + obj.object_name, + obj.subobject_name, + obj.object_type, + sum(hseg.space_allocated_delta)/1024/1024 total_allocated_delta_mb + from + dba_hist_seg_stat hseg + join dba_hist_seg_stat_obj obj + on ( hseg.dbid = obj.dbid + and hseg.obj# = obj.obj# + and hseg.ts# = obj.ts# + ) + join dba_hist_snapshot snap + on ( hseg.snap_id = snap.snap_id + and hseg.instance_number = snap.instance_number + and hseg.dbid = snap.dbid + ) + join v$database db + on ( hseg.dbid = db.dbid ) + where + -- use this contruct to push the tablespace predicate further down + -- using a filter on dba_hist_seg_stat_obj itself would only filter on tablespace name as one of the latest steps + hseg.ts# = (select distinct ts# from dba_hist_seg_stat_obj where tablespace_name = '&1') + and hseg.instance_number = 1 + group by + obj.owner, + obj.object_name, + obj.subobject_name, + obj.object_type + order by + total_allocated_delta_mb desc + ) +where + rownum <= 10 +; + +undef 1 diff --git a/vdh/list_triggers_on_table.sql b/vdh/list_triggers_on_table.sql new file mode 100644 index 0000000..cc2f546 --- /dev/null +++ b/vdh/list_triggers_on_table.sql @@ -0,0 +1,34 @@ +column trigger_name format a30 +column trigger_type format a30 +column triggering_event format a30 +column when_clause format a200 +column trigger_body format a200 +column table_name format a30 + +break on trigger_name skip page + + +select + table_name, + trigger_name, + trigger_type, + triggering_event, + status, + when_clause, + trigger_body +from + dba_triggers +where + owner = '&owner' + and table_name = '&table_name' +order by + table_name, + trigger_name, + trigger_type +; + + +clear breaks + +undef owner +undef table_name \ No newline at end of file diff --git a/vdh/list_uncompleted_optstat_tasks.sql b/vdh/list_uncompleted_optstat_tasks.sql new file mode 100644 index 0000000..ee547bb --- /dev/null +++ b/vdh/list_uncompleted_optstat_tasks.sql @@ -0,0 +1,45 @@ +/* list the optimizer statistic operation tasks that are failed, timed out or skipped + + The script will ask for an optionally filter on the start time (DD/MM/YYYY) +*/ + +set linesize 300 +set pages 50000 + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + +set verify off +column target format a64 +column target_type format a25 +column nbr_blocks format 9G999G999G999 +column start_time_str format a30 +column end_time_str format a30 +column status format a15 +column duration format a15 +column estimated_cost format 999G999 + + +select + opid, + target, + target_type, + target_size nbr_blocks, + to_char(start_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') start_time_str, + to_char(end_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') end_time_str, + cast ((end_time - start_time) as interval day(2) to second(0)) duration, + status, + estimated_cost, + priority +from + dba_optstat_operation_tasks +where + status in ('FAILED', 'TIMED OUT', 'SKIPPED') + and start_time >= to_date(nvl('&1','01/01/1970'), 'DD/MM/YYYY') +order by + start_time, end_time +; + +undef 1 diff --git a/vdh/list_unified_audit_policies.sql b/vdh/list_unified_audit_policies.sql new file mode 100644 index 0000000..1e8a8ed --- /dev/null +++ b/vdh/list_unified_audit_policies.sql @@ -0,0 +1,59 @@ +-- list the enabled unified audit policies and the details of all unified audit policies + +set linesize 300 +set pages 50000 + +column user_name format a30 +column policy_name format a50 +column entity_name format a30 +select + policy_name, + user_name, + enabled_opt, + enabled_option, + entity_name, + entity_type, + success, + failure +from + audit_unified_enabled_policies +order by + policy_name +; + + + +column policy_name format a25 +column audit_condition format a40 +column audit_option format a40 +column audit_option_type format a20 +column object_schema format a30 +column object_name format a30 +column object_type format a15 +column common format a7 +column condition_eval_opt format a10 heading EVAL_OPTS + +break on policy_name skip 1 + +select + policy_name, + common, + audit_option_type, + audit_option, + object_schema, + object_name, + object_type, + audit_condition, + condition_eval_opt +from + audit_unified_policies +--where +-- policy_name in +-- ( 'ORA_SECURECONFIG', 'ORA_LOGON_FAILURES' ) +order by + policy_name, + audit_option_type, + audit_option +; + +clear breaks; diff --git a/vdh/list_users.sql b/vdh/list_users.sql new file mode 100644 index 0000000..142fed9 --- /dev/null +++ b/vdh/list_users.sql @@ -0,0 +1,82 @@ +set linesize 250 +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + +column username format a30 +column created format a10 +column lock_date format a10 +column expiry_date format a11 +column profile format a25 +column account_status format a25 +column default_tablespace format a20 +column temporary_tablespace format a20 +--column password format a20 +--column password_versions format a10 heading "P VERSIONS" +--column default_consumer_group format a25 heading "INITIAL CONSUMER GROUP" +column authentication_type format a10 heading "PWD TYPE" + + +select + u.name username, + to_char(u.ctime, 'DD/MM/YYYY') created, + p.name profile, + m.status account_status, + to_char(decode (u.astatus, 4, u.ltime, 5, u.ltime, 6, u.ltime, 8, u.ltime, 9, u.ltime, 10, u.ltime, to_date(NULL)), 'DD/MM/YYYY') lock_date, + to_char(decode (u.astatus, 1, u.exptime, 2, u.exptime, 5, u.exptime, 6, u.exptime, 9, u.exptime, 10, u.exptime, + decode (u.ptime, + '', to_date(NULL), + decode (pr.limit#, + 2147483647, to_date(NULL), + decode (pr.limit#, + 0, decode (dp.limit#, + 2147483647, to_date(NULL), + u.ptime + dp.limit#/86400 + ), + u.ptime + pr.limit#/86400 + ) + ) + ) + ), 'DD/MM/YYYY') expiry_date, + dts.name default_tablespace, + tts.name tempory_tablespace, + decode(u.password, 'GLOBAL', 'GLOBAL', + 'EXTERNAL', 'EXTERNAL', + 'PASSWORD') authentication_type +-- u.password password, +-- nvl(cgm.consumer_group, 'DEFAULT_CONSUMER_GROUP') initial_rsrc_consumer_group, +-- decode(length(u.password),16,'10G ',NULL)||NVL2(u.spare4, '11G ' ,NULL) password_versions +from + sys.user$ u + left outer join sys.resource_group_mapping$ cgm + on ( cgm.attribute = 'ORACLE_USER' + and cgm.status = 'ACTIVE' + and cgm.value = u.name + ), + sys.ts$ dts, + sys.ts$ tts, + sys.profname$ p, + sys.user_astatus_map m, + sys.profile$ pr, + sys.profile$ dp +where + u.datats# = dts.ts# + and u.resource$ = p.profile# + and u.tempts# = tts.ts# + and u.astatus = m.status# + and u.type# = 1 + and u.resource$ = pr.profile# + and dp.profile# = 0 + and dp.type#=1 + and dp.resource#=1 + and pr.type# = 1 + and pr.resource# = 1 + and u.name like nvl('&1', '%') +order by + username +; + +undef 1 diff --git a/vdh/list_users12c.sql b/vdh/list_users12c.sql new file mode 100644 index 0000000..f9f8b2b --- /dev/null +++ b/vdh/list_users12c.sql @@ -0,0 +1,96 @@ +set linesize 250 +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + +column username format a30 +column created format a10 +column lock_date format a10 +column expiry_date format a11 +column profile format a20 +column account_status format a17 +column default_tablespace format a30 +column temporary_tablespace format a20 +--column password format a20 +column password_versions format a17 heading "PWD VERSIONS" +--column default_consumer_group format a25 heading "INITIAL CONSUMER GROUP" +column authentication_type format a10 heading "PWD TYPE" +column password_change_date format a12 heading "LAST PWD|CHANGE DATE" +column last_login format a22 heading "LAST LOGIN" +column oracle_maintained format a3 heading "D|E|F|A|U|L|T| |U|S|R" +column common format a3 heading "C|O|M|M|O|N" + +select + u.name username, + to_char(u.ctime, 'DD/MM/YYYY') created, + p.name profile, + m.status account_status, + to_char(decode (u.astatus, 4, u.ltime, 5, u.ltime, 6, u.ltime, 8, u.ltime, 9, u.ltime, 10, u.ltime, to_date(NULL)), 'DD/MM/YYYY') lock_date, + to_char(decode (u.astatus, 1, u.exptime, 2, u.exptime, 5, u.exptime, 6, u.exptime, 9, u.exptime, 10, u.exptime, + decode (u.ptime, + '', to_date(NULL), + decode (pr.limit#, + 2147483647, to_date(NULL), + decode (pr.limit#, + 0, decode (dp.limit#, + 2147483647, to_date(NULL), + u.ptime + dp.limit#/86400 + ), + u.ptime + pr.limit#/86400 + ) + ) + ) + ), 'DD/MM/YYYY') expiry_date, + to_char(ptime, 'DD/MM/YYYY') password_change_date, + to_char(from_tz( to_timestamp (to_char(u.spare6, 'DD/MM/YYYY HH24:MI:SS'),'DD/MM/YYYY HH24:MI:SS'), '0:00') at time zone sessiontimezone, 'DD/MM/YYYY HH24:MI TZH') last_login, + dts.name default_tablespace, + tts.name tempory_tablespace, + decode(u.password, 'GLOBAL', 'GLOBAL', + 'EXTERNAL', 'EXTERNAL', + 'PASSWORD') authentication_type, + decode(bitand(u.spare1, 128), 128, 'YES', 'NO') common, + decode(bitand(u.spare1, 256), 256, 'Y', 'N') oracle_maintained, +-- u.password password, +-- nvl(cgm.consumer_group, 'DEFAULT_CONSUMER_GROUP') initial_rsrc_consumer_group, +-- decode(length(u.password),16,'10G ',NULL)||NVL2(u.spare4, '11G ' ,NULL) password_versions + ( decode (regexp_instr (nvl2 (u.password, u.password, ' '), '^ $'), 0, decode(length(u.password), 16, '10G ', NULL), '' ) || + decode (regexp_instr (regexp_replace (nvl2 (u.spare4, u.spare4, ' '),'S:000000000000000000000000000000000000000000000000000000000000', 'not_a_verifier'), 'S:'), 0, '', '11G ') || + decode (regexp_instr (nvl2 (u.spare4, u.spare4, ' '), 'T:'), 0, '', '12C ') || + decode (regexp_instr (regexp_replace ( nvl2(u.spare4, u.spare4, ' '), 'H:00000000000000000000000000000000', 'not_a_verifier'), 'H:'), 0, '', 'HTTP ') + ) password_versions +from + sys.user$ u + left outer join sys.resource_group_mapping$ cgm + on ( cgm.attribute = 'ORACLE_USER' + and cgm.status = 'ACTIVE' + and cgm.value = u.name + ), + sys.ts$ dts, + sys.ts$ tts, + sys.profname$ p, + sys.user_astatus_map m, + sys.profile$ pr, + sys.profile$ dp +where + u.datats# = dts.ts# + and u.resource$ = p.profile# + and u.tempts# = tts.ts# + and ( u.astatus = m.status# + or u.astatus = (m.status# + 16 - BITAND(m.status#, 16)) + ) + and u.type# = 1 + and u.resource$ = pr.profile# + and dp.profile# = 0 + and dp.type#=1 + and dp.resource#=1 + and pr.type# = 1 + and pr.resource# = 1 + and u.name like nvl('&1', '%') +order by + username +; + +undef 1 diff --git a/vdh/list_users12c_nonsysdba.sql b/vdh/list_users12c_nonsysdba.sql new file mode 100644 index 0000000..c139024 --- /dev/null +++ b/vdh/list_users12c_nonsysdba.sql @@ -0,0 +1,44 @@ +set linesize 250 +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + +column username format a30 +column created format a10 +column lock_date format a10 +column expiry_date format a11 +column profile format a25 +column account_status format a25 +column default_tablespace format a20 +column temporary_tablespace format a20 +column authentication_type format a10 heading "PWD TYPE" +column last_login format a22 heading "LAST LOGIN" +column oracle_maintained format a3 heading "DEF" +column common format a3 heading "COM" + + +select + username, + to_char(created, 'DD/MM/YYYY') created, + profile, + account_status, + to_char(lock_date, 'DD/MM/YYYY') lock_date, + to_char(expiry_date, 'DD/MM/YYYY') expiry_date, + to_char(last_login, 'DD/MM/YYYY HH24:MI TZH') last_login , + default_tablespace, + temporary_tablespace, + authentication_type, + common, + oracle_maintained +from + dba_users +where + username like nvl('&1', '%') +order by + username +; + +undef 1 diff --git a/vdh/list_windows.sql b/vdh/list_windows.sql new file mode 100644 index 0000000..bf277bf --- /dev/null +++ b/vdh/list_windows.sql @@ -0,0 +1,27 @@ +-- list information on the job scheduler windows + +set linesize 240 +set pages 50000 + +column owner format a30 +column window_name format a30 +column repeat_interval format a70 +column duration format a15 +column str_start_date format a40 +column str_next_start_date format a40 + +select + owner, + window_name, + enabled, + to_char(start_date, 'DD/MM/YYYY HH24:MI:SS TZR') str_start_date, + repeat_interval, + duration, + to_char(next_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') str_next_start_date +from + dba_scheduler_windows +order by + owner, + window_name +; + diff --git a/vdh/lob_overview.sql b/vdh/lob_overview.sql new file mode 100644 index 0000000..21d960a --- /dev/null +++ b/vdh/lob_overview.sql @@ -0,0 +1,21 @@ +set linesize 130 + +column column_name format a30 +column owner format a20 +column mb format 9G999G999D99 +column tablespace_name format a30 + +break on owner skip 1 on table_name + +select lob.owner, lob.table_name, lob.column_name, seg.tablespace_name, seg.bytes/1024/1024 mb +from dba_segments seg, dba_lobs lob +where lob.owner = seg.owner + and lob.segment_name = seg.segment_name + and lob.owner not in + ( 'CTXSYS', 'DBSNMP', 'DMSYS', 'EXFSYS', 'OUTLN', 'SYS', 'SYSTEM', 'SYSMAN', + 'TSMSYS', 'WKSYS', 'WK_TEST', 'WMSYS', 'WK_TEST', 'XDB', 'ANONYMOUS', 'WKPROXY', 'MGMT_VIEW', + 'DIP' + ) +order by lob.owner, lob.table_name, lob.column_name; + +clear breaks diff --git a/vdh/locks.sql b/vdh/locks.sql new file mode 100644 index 0000000..958c558 --- /dev/null +++ b/vdh/locks.sql @@ -0,0 +1,192 @@ +/********************************************************************** + * File: locks.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 29-Nov-99 + * + * Description: + * Query the V$LOCK view and decode the following columns: + * TYPE + * LMODE + * REQUEST + * Also, summarize by these columns... + * + * Enqueue type-names are a composite of Oracle7, Oracle8, and + * Oracle8i documentation. It is up-to-date as of v8.1.5 and + * should be valid going back to v7.3.x... + * + * Modifications: + *********************************************************************/ +col type format a40 truncate heading "Lock Type" +col mode_held format a14 truncate heading "Mode Held" +col mode_requested format a14 truncate heading "Mode Requested" +col cnt format 9990 heading "#Sess" +col instance new_value V_INSTANCE noprint + +set feedback off echo off timing off pause off verify off + +select lower(replace(t.instance,chr(0),'')) instance +from v$thread t, + v$parameter p +where p.name = 'thread' +and t.thread# = to_number(decode(p.value,'0','1',p.value)); + +SELECT TYPE || + DECODE(TYPE, + 'BL',': Buffer hash table', + 'CF',': Control File Transaction', + 'CI',': Cross Instance Call', + 'CS',': Control File Schema', + 'CU',': Bind Enqueue', + 'DF',': Data File', + 'DL',': Direct-loader index-creation', + 'DM',': Mount/startup db primary/secondary instance', + 'DR',': Distributed Recovery Process', + 'DX',': Distributed Transaction Entry', + 'FI',': SGA Open-File Information', + 'FS',': File Set', + 'IN',': Instance Number', + 'IR',': Instance Recovery Serialization', + 'IS',': Instance State', + 'IV',': Library Cache InValidation', + 'JQ',': Job Queue', + 'KK',': Redo Log "Kick"', + 'LS',': Log Start/Log Switch', + 'MB',': Master Buffer hash table', + 'MM',': Mount Definition', + 'MR',': Media Recovery', + 'PF',': Password File', + 'PI',': Parallel Slaves', + 'PR',': Process Startup', + 'PS',': Parallel Slaves Synchronization', + 'RE',': USE_ROW_ENQUEUE Enforcement', + 'RT',': Redo Thread', + 'RW',': Row Wait', + 'SC',': System Commit Number', + 'SH',': System Commit Number HWM', + 'SM',': SMON', + 'SQ',': Sequence Number', + 'SR',': Synchronized Replication', + 'SS',': Sort Segment', + 'ST',': Space Transaction', + 'SV',': Sequence Number Value', + 'TA',': Transaction Recovery', + 'TD',': DDL enqueue', + 'TE',': Extend-segment enqueue', + 'TM',': DML enqueue', + 'TS',': Temporary Segment', + 'TT',': Temporary Table', + 'TX',': Transaction', + 'UL',': User-defined Lock', + 'UN',': User Name', + 'US',': Undo Segment Serialization', + 'WL',': Being-written redo log instance', + 'WS',': Write-atomic-log-switch global enqueue', + 'XA',': Instance Attribute', + 'XI',': Instance Registration', + decode(substr(type,1,1), + 'L', ': Library Cache ('||substr(type,2,1)||')', + 'N', ': Library Cache Pin ('||substr(type,2,1)||')', + 'Q', ': Row Cache ('||substr(type,2,1)||')', + ': ????')) type, + DECODE(LMODE, + 0, '--Waiting--', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + '') mode_held, + DECODE(REQUEST, + 0, '', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + '') mode_requested, + COUNT(*) cnt +FROM GV$LOCK +WHERE TYPE NOT IN ('MR','RT') +GROUP BY TYPE || + DECODE(TYPE, + 'BL',': Buffer hash table', + 'CF',': Control File Transaction', + 'CI',': Cross Instance Call', + 'CS',': Control File Schema', + 'CU',': Bind Enqueue', + 'DF',': Data File', + 'DL',': Direct-loader index-creation', + 'DM',': Mount/startup db primary/secondary instance', + 'DR',': Distributed Recovery Process', + 'DX',': Distributed Transaction Entry', + 'FI',': SGA Open-File Information', + 'FS',': File Set', + 'IN',': Instance Number', + 'IR',': Instance Recovery Serialization', + 'IS',': Instance State', + 'IV',': Library Cache InValidation', + 'JQ',': Job Queue', + 'KK',': Redo Log "Kick"', + 'LS',': Log Start/Log Switch', + 'MB',': Master Buffer hash table', + 'MM',': Mount Definition', + 'MR',': Media Recovery', + 'PF',': Password File', + 'PI',': Parallel Slaves', + 'PR',': Process Startup', + 'PS',': Parallel Slaves Synchronization', + 'RE',': USE_ROW_ENQUEUE Enforcement', + 'RT',': Redo Thread', + 'RW',': Row Wait', + 'SC',': System Commit Number', + 'SH',': System Commit Number HWM', + 'SM',': SMON', + 'SQ',': Sequence Number', + 'SR',': Synchronized Replication', + 'SS',': Sort Segment', + 'ST',': Space Transaction', + 'SV',': Sequence Number Value', + 'TA',': Transaction Recovery', + 'TD',': DDL enqueue', + 'TE',': Extend-segment enqueue', + 'TM',': DML enqueue', + 'TS',': Temporary Segment', + 'TT',': Temporary Table', + 'TX',': Transaction', + 'UL',': User-defined Lock', + 'UN',': User Name', + 'US',': Undo Segment Serialization', + 'WL',': Being-written redo log instance', + 'WS',': Write-atomic-log-switch global enqueue', + 'XA',': Instance Attribute', + 'XI',': Instance Registration', + decode(substr(type,1,1), + 'L', ': Library Cache ('||substr(type,2,1)||')', + 'N', ': Library Cache Pin ('||substr(type,2,1)||')', + 'Q', ': Row Cache ('||substr(type,2,1)||')', + ': ????')), + DECODE(LMODE, + 0, '--Waiting--', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + ''), + DECODE(REQUEST, + 0, '', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + '') + +spool locks_&&V_INSTANCE +/ +spool off diff --git a/vdh/locks2.sql b/vdh/locks2.sql new file mode 100644 index 0000000..4c87386 --- /dev/null +++ b/vdh/locks2.sql @@ -0,0 +1,66 @@ +column os_user_name format a20 +column process format a10 +column oracle_username format a30 +column owner format a30 +column object_name format a30 +column sid format 99999 +column type format a30 +column lmode format a15 +column request format a15 +column block format a15 +set linesize 120 + +select os_user_name, lo.process, oracle_username, l.sid, s.sid, s.serial#, s.PADDR, + decode( l.TYPE, + 'MR', 'Media Recovery', + 'RT', 'Redo Thread', + 'UN', 'User Name', + 'TX', 'Transaction', + 'TM', 'DML', + 'UL', 'PL/SQL User Lock', + 'DX', 'Distributed Xaction', + 'CF', 'Control File', + 'IS', 'Instance State', + 'FS', 'File Set', + 'IR', 'Instance Recovery', + 'ST', 'Disk Space Transaction', + 'TS', 'Temp Segment', + 'IV', 'Library Cache Invalidation', + 'LS', 'Log Start or Switch', + 'RW', 'Row Wait', + 'SQ', 'Sequence Number', + 'TE', 'Extend Table', + 'TT', 'Temp Table', + l.type + ) type, + decode( l.LMODE, + 0, 'None', + 1, 'Null', + 2, 'Row-S (SS)', + 3, 'Row-X (SX)', + 4, 'Share', + 5, 'S/Row-X (SSX)', + 6, 'Exclusive', + l.lmode + ) lmode, + decode( l.REQUEST, + 0, 'None', + 1, 'Null', + 2, 'Row-S (SS)', + 3, 'Row-X (SX)', + 4, 'Share', + 5, 'S/Row-X (SSX)', + 6, 'Exclusive', + l.request + ) request, + decode( l.BLOCK, + 0, 'Not Blocking', + 1, 'Blocking', + 2, 'Global', + l.block + ) block, + owner, object_name +from sys.v_$locked_object lo, dba_objects do, sys.v_$lock l, v$session s +where lo.OBJECT_ID = do.OBJECT_ID + and l.SID = lo.SESSION_ID + and l.sid = s.sid; \ No newline at end of file diff --git a/vdh/log_history.sql b/vdh/log_history.sql new file mode 100644 index 0000000..a447343 --- /dev/null +++ b/vdh/log_history.sql @@ -0,0 +1,16 @@ +set linesize 140 +set pages 999 + +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +select to_char(day, 'DD/MM/YYYY') day, to_char(day,'DAY') dayname, day_arch#, graph +from ( select trunc(first_time) day, count(*) day_arch#, + rpad('*',floor(count(*)/10),'*') graph + from v$log_history + where first_time >= trunc(sysdate) - 20 + group by trunc(first_time) + order by day + ); \ No newline at end of file diff --git a/vdh/logical_standby.sql b/vdh/logical_standby.sql new file mode 100644 index 0000000..ac1a2ad --- /dev/null +++ b/vdh/logical_standby.sql @@ -0,0 +1,31 @@ +set linesize 150 + +column type format a15 +column status format a80 + +select sid, serial#, type, status +from v$logstdby_process +order by type; + +select applied_scn, applied_sequence#, to_char(applied_time, 'DD/MM/YYYY HH24:MI:SS') applied_time +from dba_logstdby_progress +order by applied_scn; + +column thread# format 99999 +column sequence# format 999999 + +select + thread#, sequence#, first_change#, to_char(first_time, 'DD/MM/YYYY HH24:MI:SS') first_time, + next_change#, to_char(next_time, 'DD/MM/YYYY HH24:MI:SS') next_time, file_name, applied +from + dba_logstdby_log +where + applied = 'NO' + or next_time >= trunc(sysdate) +order by + thread#, sequence#; + +column value format a20 + +select * +from v$dataguard_stats; diff --git a/vdh/login.sql b/vdh/login.sql new file mode 100644 index 0000000..622044e --- /dev/null +++ b/vdh/login.sql @@ -0,0 +1,77 @@ +-- suppress the output to the screen +set termout off + +REM set the editor +define_editor=vi + +REM set general options +set serveroutput on size 1000000 format wrapped +set trimspool on +set tab off +set long 5000 +set linesize 250 +set pagesize 50000 + +REM used by trusted oracle +column rowlabel format a15 + +REM used for the show errors command +column line/col format a8 +column error format a65 word_wrapped + +REM used for the show sga command +column name_col_plus_show_sga format a24 + +REM defaults for show parameters +column name_col_plus_show_param format a36 heading name +column value_col_plus_show_param format a30 heading value + +REM defaults for set autotrace explain report +column id_plus_exp format 990 heading i +column parent_id_plus_exp format 990 heading p +column plan_plus_exp format a100 +column object_node_plus_exp format a8 +column other_tag_plus_exp format a29 +column other_plus_exp format a44 + +REM commonly querried columns +column object_name format a30 +column segment_name format a30 +column file_name format a40 +column name format a30 +column file_name format a30 +column what format a30 word_wrapped +column host_name format a30 +column owner format a30 +column table_name format a30 +column index_name format a30 +column column_name format a30 + +REM set the nls settings +alter session set nls_numeric_characters=',.'; + +REM set timing off +set timing off + +REM set the sqlprompt +define gname=idle +column global_name new_value gname + +select lower(user) || '@' || + substr(global_name, 1, decode(dot, 0,length(global_name), dot -1)) global_name +from ( select global_name, instr(global_name, '.') dot + from global_name ); + +set sqlprompt '&gname> ' + +REM let sqlplus print to the screen again +set termout on + +REM column my_prompt new_value myprompt +REM set termout off +REM define myprompt = 'sql> ' +REM select lower(user) || '@&_connect_identifier> ' my_prompt from dual; +REM set sqlprompt '&myprompt' +select instance_name, host_name, status, (case database_role when 'PRIMARY' then database_role else database_role || ' (PRIM: ' || primary_db_unique_name || ')' end) role +from v$instance, v$database; + diff --git a/vdh/longops.sql b/vdh/longops.sql new file mode 100644 index 0000000..e8e4404 --- /dev/null +++ b/vdh/longops.sql @@ -0,0 +1,19 @@ +select + sid, + serial#, + opname, + sofar, + totalwork, + ((100/totalwork) * sofar) as percentage_complete, + to_char(start_time, 'dd/mm/yyyy hh24:mi:ss') as start_time, + to_char(last_update_time, 'dd/mm/yyyy hh24:mi:ss') as last_update_time, + time_remaining, + elapsed_seconds, +-- trunc( mod( (time_remaining / 60 / 60),60 )) || ':' || trunc( mod( (time_remaining) / 60, 60 ) ) || ':' || trunc( mod( time_remaining, 60 ) ), + message, + sql_address, + sql_hash_value +from + v$session_longops +where + time_remaining > 0; diff --git a/vdh/longops2.sql b/vdh/longops2.sql new file mode 100644 index 0000000..f21d66e --- /dev/null +++ b/vdh/longops2.sql @@ -0,0 +1,29 @@ +set linesize 150 +set pages 9999 + +column sid format 9999999 +column RT format a10 +column ET format a10 +column opname format a30 +column target format a20 +column pct_complete format 09D00 + +select + sid, serial#, sql_id, to_char(start_time, 'DD/MM/YYYY HH24:MI:SS') start_time, opname, + round((100 * sofar)/totalwork, 2) pct_complete, + ( extract(day from (systimestamp + numtodsinterval(elapsed_seconds, 'second') - systimestamp)) || ' ' || + extract(hour from (systimestamp + numtodsinterval(elapsed_seconds, 'second') - systimestamp)) || ':' || + extract(minute from (systimestamp + numtodsinterval(elapsed_seconds, 'second') - systimestamp)) || ':' || + round(extract(second from (systimestamp + numtodsinterval(elapsed_seconds, 'second') - systimestamp))) + ) ET, + ( extract(day from (systimestamp + numtodsinterval(time_remaining, 'second') - systimestamp)) || ' ' || + extract(hour from (systimestamp + numtodsinterval(time_remaining, 'second') - systimestamp)) || ':' || + extract(minute from (systimestamp + numtodsinterval(time_remaining, 'second') - systimestamp)) || ':' || + round(extract(second from (systimestamp + numtodsinterval(time_remaining, 'second') - systimestamp))) + ) RT +from + v$session_longops +where + time_remaining > 0 +; + diff --git a/vdh/managed_standby.sql b/vdh/managed_standby.sql new file mode 100644 index 0000000..26955be --- /dev/null +++ b/vdh/managed_standby.sql @@ -0,0 +1,16 @@ +set linesize 200 +set pages 9999 +column status format a15 + +break on inst_id skip 1 on process on client_process + +select inst_id, process, client_process, status, thread#, sequence#, delay_mins, known_agents, active_agents +from gv$managed_standby +order by inst_id, process, thread#; + +column value format a18 +column datum_time format a20 +column time_computed format a20 + +select * +from v$dataguard_stats; diff --git a/vdh/memstat.sh b/vdh/memstat.sh new file mode 100644 index 0000000..18e33fd --- /dev/null +++ b/vdh/memstat.sh @@ -0,0 +1,64 @@ +#!/bin/bash +#set -x +[ "$1" = '--oneshot' ] && ONESHOT="yes" || ONESHOT="no" +PAGESIZE=30 +SLEEP_TIME=3 +[ $ONESHOT = "no" ] && printf " Free Shmem Mapped+Cached Anon Pagetables KernelStack Buffers Slab SwpCache HP Used HP Rsvd HP Free Unknown %%\n" +ROWCOUNTER=0 +while ( true ); do + # 1 get meminfo + MEMINFO=$( cat /proc/meminfo ) + # 2 get relevant data + MEMTOTAL=$( echo "$MEMINFO" | awk '/^MemTotal/ { print $2 }') + MEMFREE=$( echo "$MEMINFO" | awk '/^MemFree/ { print $2 }') + KERNELSTACK=$( echo "$MEMINFO" | awk '/^KernelStack/ { print $2 }') + BUFFERS=$( echo "$MEMINFO" | awk '/^Buffers/ { print $2 }') + CACHED=$( echo "$MEMINFO" | awk '/^Cached/ { print $2 }') + PAGETABLES=$( echo "$MEMINFO" | awk '/^PageTables/ { print $2 }') + SHMEM=$( echo "$MEMINFO" | awk '/^Shmem:/ { print $2 }') + ANONPAGES=$( echo "$MEMINFO" | awk '/^AnonPages/ { print $2 }') + SLAB=$( echo "$MEMINFO" | awk '/^Slab/ { print $2 }') + SWAPCACHED=$( echo "$MEMINFO" | awk '/^SwapCached/ { print $2 }') + # hugepages are expressed in pages, not KB + HP_TOTAL=$( echo "$MEMINFO" | awk '/^HugePages_Total/ { print $2 }') + HP_RSVD=$( echo "$MEMINFO" | awk '/^HugePages_Rsvd/ { print $2 }') + HP_FREE=$( echo "$MEMINFO" | awk '/^HugePages_Free/ { print $2 }') + HP_SIZE=$( echo "$MEMINFO" | awk '/^Hugepagesize/ { print $2 }') + # swap + SWAP_TOTAL=$( echo "$MEMINFO" | awk '/^SwapTotal/ { print $2 }') + SWAP_FREE=$( echo "$MEMINFO" | awk '/^SwapFree/ { print $2 }') + # 3 define final data + # MEMTOTAL + # MEMFREE + # KERNELSTACK + # BUFFERS + CACHED=$(( $CACHED-$SHMEM )) + # PAGETABLES + # SHMEM + # ANONPAGES + # SLAB + # SWAPCACHED + HP_USED_KB=$(( ($HP_TOTAL-$HP_FREE)*$HP_SIZE )) + HP_RSVD_KB=$(( $HP_RSVD*$HP_SIZE )) + HP_REALFREE_KB=$(( ($HP_FREE-$HP_RSVD)*$HP_SIZE )) + SWAP_USED=$(( $SWAP_TOTAL-$SWAP_FREE )) + SWAP_PCT=$(( ($SWAP_USED*100)/$SWAP_TOTAL )) + # + ACCT_FOR_MEM_TOTAL=$(( $MEMFREE+$KERNELSTACK+$BUFFERS+$CACHED+$PAGETABLES+$SHMEM+$MAPPED+$ANONPAGES+$SLAB+$SWAPCACHED+$HP_USED_KB+$HP_RSVD_KB+$HP_REALFREE_KB )) + UNACCT_FOR=$(( $MEMTOTAL-$ACCT_FOR_MEM_TOTAL )) + UA_PCT=$(( ($UNACCT_FOR*100)/$MEMTOTAL )) + if [ $ONESHOT = "no" ]; then + # visualize + printf "%14d %14d %14d %14d %14d %14d %14d %14d %14d %14d %14d %14d %14d %3d\n" $MEMFREE $SHMEM $CACHED $ANONPAGES $PAGETABLES $KERNELSTACK $BUFFERS $SLAB $SWAPCACHED $HP_USED_KB $HP_RSVD_KB $HP_REALFREE_KB $UNACCT_FOR $UA_PCT + sleep $SLEEP_TIME + let ROWCOUNTER++ + if (( $ROWCOUNTER % $PAGESIZE == 0 )); then + printf " Free Shmem Mapped+Cached Anon Pagetables KernelStack Buffers Slab SwpCache HP Used HP Rsvd HP Free Unknown %%\n" + fi + fi + if [ $ONESHOT = "yes" ]; then + printf "Free %14d\nShmem %14d\nMapped+Cached%14d\nAnon %14d\nPagetables %14d\nKernelStack %14d\nBuffers %14d\nSlab %14d\nSwpCache %14d\nHP Used %14d\nHP Rsvd %14d\nHP Free %14d\nUnknown %14d (%3d%%)\nTotal memory %14d\n---------------------------\nTotal swp %14d\nUsed swp %14d (%3d%%)\n" $MEMFREE $SHMEM $CACHED $ANONPAGES $PAGETABLES $KERNELSTACK $BUFFERS $SLAB $SWAPCACHED $HP_USED_KB $HP_RSVD_KB $HP_REALFREE_KB $UNACCT_FOR $UA_PCT $MEMTOTAL $SWAP_TOTAL $SWAP_USED $SWAP_PCT + break + fi +done + diff --git a/vdh/min_recovery_scn.sql b/vdh/min_recovery_scn.sql new file mode 100644 index 0000000..67deefe --- /dev/null +++ b/vdh/min_recovery_scn.sql @@ -0,0 +1,20 @@ +-- get the scn beyond which you must recover to clear datafile fuzziness + +column beyond_scn format 99999999999999999 + +select + max(checkpoint_change#) beyond_scn, + to_char(max(checkpoint_time), 'DD/MM/YYYY HH24:MI:SS') beyond_time +from + v$backup_datafile +where + resetlogs_time = + ( select + resetlogs_time + from + v$database_incarnation + where + status = 'CURRENT' + ) +; + diff --git a/vdh/move_lobs.sql b/vdh/move_lobs.sql new file mode 100644 index 0000000..9b999ec --- /dev/null +++ b/vdh/move_lobs.sql @@ -0,0 +1,42 @@ +DECLARE + l_tablespace varchar2(30) := 'TEST'; + l_owner varchar2(30) := 'FREEK'; + l_str varchar2(32000); +BEGIN + for r_tab in + ( select distinct owner, table_name + from dba_lobs + where owner = l_owner + ) + loop + l_str := 'alter table "' || r_tab.owner || '"."' || r_tab.table_name || '" move '; + for r_lob in + ( select column_name + from dba_lobs + where owner = r_tab.owner + and table_name = r_tab.table_name + ) + loop + l_str := l_str || 'lob("' || r_lob.column_name || '") store as (tablespace "' || l_tablespace || '") ' ; + end loop; + l_str := l_str || ' tablespace "' || l_tablespace || '"'; + dbms_output.put_line('moving table ' || r_tab.table_name); + execute immediate l_str; + for r_ind in + ( select index_name + from dba_indexes + where owner = r_tab.owner + and table_name = r_tab.table_name + and ( tablespace_name != l_tablespace + or status = 'UNUSABLE' + ) + ) + loop + l_str := 'alter index "' || r_tab.owner || '"."' || r_ind.index_name || '" rebuild tablespace "' || l_tablespace || '"'; + dbms_output.put_line('rebuilding index ' || r_ind.index_name || ' for table ' || r_tab.table_name); + execute immediate l_str; + dbms_output.put_line(l_str); + end loop; + end loop; +END; +/ diff --git a/vdh/moveall.sql b/vdh/moveall.sql new file mode 100644 index 0000000..8108cfc --- /dev/null +++ b/vdh/moveall.sql @@ -0,0 +1,42 @@ +set echo off + +column order_col1 noprint +column order_col2 noprint + +set heading off +set verify off +set feedback off +set echo off + +spool tmp.sql + +select decode( segment_type, 'TABLE', + segment_name, table_name ) order_col1, + decode( segment_type, 'TABLE', 1, 2 ) order_col2, + 'alter ' || segment_type || ' ' || segment_name || + decode( segment_type, 'TABLE', ' move ', ' rebuild ' ) || + chr(10) || + ' tablespace &1 ' || chr(10) || + ' storage ( initial ' || initial_extent || ' next ' || + next_extent || chr(10) || + ' minextents ' || min_extents || ' maxextents ' || + max_extents || chr(10) || + ' pctincrease ' || pct_increase || ' freelists ' || + freelists || ');' + from user_segments, + (select table_name, index_name from user_indexes ) + where segment_type in ( 'TABLE', 'INDEX' ) + and segment_name = index_name (+) + order by 1, 2 +/ + +spool off + +set heading on +set verify on +set feedback on +set echo on + +REM UNCOMMENT TO AUTO RUN the generated commands +REM ELSE edit tmp.sql, modify as needed and run it +REM @tmp diff --git a/vdh/moveall2.sql b/vdh/moveall2.sql new file mode 100644 index 0000000..6f3056d --- /dev/null +++ b/vdh/moveall2.sql @@ -0,0 +1,36 @@ +set echo off + +column order_col1 noprint +column order_col2 noprint + +set heading off +set verify off +set feedback off +set echo off + +spool tmp.sql + +select decode( segment_type, 'TABLE', + segment_name, table_name ) order_col1, + decode( segment_type, 'TABLE', 1, 2 ) order_col2, + 'alter ' || segment_type || ' ' || segment_name || + decode( segment_type, 'TABLE', ' move ', ' rebuild ' ) || + chr(10) || + ' tablespace ' || decode( segment_type, 'TABLE', tablespace_name, 'ARTIS_NDX') || ';' + from user_segments, + (select table_name, index_name from user_indexes ) + where segment_type in ( 'TABLE', 'INDEX' ) + and segment_name = index_name (+) + order by 1, 2 +/ + +spool off + +set heading on +set verify on +set feedback on +set echo on + +REM UNCOMMENT TO AUTO RUN the generated commands +REM ELSE edit tmp.sql, modify as needed and run it +REM @tmp diff --git a/vdh/mystats.sql b/vdh/mystats.sql new file mode 100644 index 0000000..ff6b40a --- /dev/null +++ b/vdh/mystats.sql @@ -0,0 +1,7 @@ +col name for a60 +col value for 99999999999999 +select name, value +from v$mystat s, v$statname n +where n.statistic# = s.statistic# +and name like nvl('&event_name',name) +/ diff --git a/vdh/nagios_notifications_stats.sql b/vdh/nagios_notifications_stats.sql new file mode 100644 index 0000000..6a879c4 --- /dev/null +++ b/vdh/nagios_notifications_stats.sql @@ -0,0 +1,73 @@ +column client format a30 +set linesize 140 + +break on year skip 2 on weeknr skip 1 on weekrank on weeksum + +with weekdays +as ( select 'monday' day, to_char(to_date('12/11/2007', 'DD/MM/YYYY'), 'D') daynbr + from dual + union all + select 'tuesday' day, to_char(to_date('12/11/2007', 'DD/MM/YYYY') + 1, 'D') daynbr + from dual + union all + select 'wednesday' day, to_char(to_date('12/11/2007', 'DD/MM/YYYY') + 2, 'D') daynbr + from dual + union all + select 'thursday' day, to_char(to_date('12/11/2007', 'DD/MM/YYYY') + 3, 'D') daynbr + from dual + union all + select 'friday' day, to_char(to_date('12/11/2007', 'DD/MM/YYYY') + 4, 'D') daynbr + from dual + union all + select 'saturday' day, to_char(to_date('12/11/2007', 'DD/MM/YYYY') + 5, 'D') daynbr + from dual + union all + select 'sunday' day, to_char(to_date('12/11/2007', 'DD/MM/YYYY') + 6, 'D') daynbr + from dual +), +csn +as ( select substr(servicename, 1, instr(servicename, '-', 1, 1) - 1) client, + hostname, date_time, to_number(to_char(date_time, 'yyyy')) year, + case when to_char(date_time, 'D') in ( select daynbr from weekdays where day in ('monday', 'tuesday')) + then to_number(to_char(date_time, 'iw')) -1 + when to_char(date_time, 'D') = (select daynbr from weekdays where day = 'wednesday') + and date_time between trunc(date_time) and trunc(date_time) + 8/21 + then to_number(to_char(date_time, 'iw')) -1 + else to_number(to_char(date_time, 'iw')) + end weeknr + from service_notifications + where hostname like 'dba-standby-no%' + and date_time between add_months(sysdate, -2) + and sysdate +-- and message != 'Passive service check missing.' + ) +select year, weeknr, + dense_rank () + over ( order by weeksum + ) weekrank, + weeksum, + row_number() + over ( partition by year, weeknr + order by aantal desc, client + ) client_rank_per_week, + client, aantal +from ( select csn.year, csn.weeknr, client, count(*) aantal, weeksum + from csn, + ( select year, weeknr, count(*) weeksum + from csn + group by year, weeknr + ) counts + where counts.year = csn.year + and counts.weeknr = csn.weeknr + and csn.client in + ( select client + from ( select client, count(*) counted + from csn + group by client + order by counted desc + ) + where rownum <= 10 + ) + group by csn.year, csn.weeknr, csn.client, counts.weeksum + ) +order by year desc, weeknr desc, aantal desc, client; \ No newline at end of file diff --git a/vdh/nagios_statistics_200804.sql b/vdh/nagios_statistics_200804.sql new file mode 100644 index 0000000..b610f6d --- /dev/null +++ b/vdh/nagios_statistics_200804.sql @@ -0,0 +1,149 @@ +column counted format 9G999G999 + +select to_number(to_char(senddate, 'YYYY')) year, to_number(to_char(senddate, 'WW')) week, count(*) counted +from stats_200804 +where notification_group in + ( 'bvp-sms', 'bvp-sms-bus', 'bvp-sms-nonbus', 'dba-standby-bus', 'dba-standby-nonbus', + 'dba-standby-nonbus-nowarn', 'hosting-standby-bus', 'hosting-standby-nonbus', + 'janssst-sms-nonbus', 'liekejo-sms-bus', 'liekejo-sms-nonbus', 'network-standby-bus', + 'network-standby-nonbus', 'spruyma-bus-sms', 'spruyma-nonbus-sms', 'spruyma-standby-bus', + 'spruyma-standby-nonbus', 'vanropi-bus-sms', 'vanropi-nonbus-sms', 'vermema-sms-nonbus', + 'win-standby-bus', 'win-standby-nonbus' + ) + and senddate >= add_months(trunc(sysdate, 'MM'), -6) +group by to_number(to_char(senddate, 'YYYY')), to_number(to_char(senddate, 'WW')) +order by year, week; + + + +set linesize 120 +set pages 9999 + +column counted format 9G999G999 +column notification_group format a50 +break on begin_date skip 1 on end_date +compute sum of counted on begin_date + +select trunc(senddate, 'MM') begin_date, add_months(trunc(senddate, 'MM'), 1) - 1 end_date, notification_group, count(*) counted +from stats_200804 +where notification_group in + ( 'bvp-sms', 'bvp-sms-bus', 'bvp-sms-nonbus', 'dba-standby-bus', 'dba-standby-nonbus', + 'dba-standby-nonbus-nowarn', 'hosting-standby-bus', 'hosting-standby-nonbus', + 'janssst-sms-nonbus', 'liekejo-sms-bus', 'liekejo-sms-nonbus', 'network-standby-bus', + 'network-standby-nonbus', 'spruyma-bus-sms', 'spruyma-nonbus-sms', 'spruyma-standby-bus', + 'spruyma-standby-nonbus', 'vanropi-bus-sms', 'vanropi-nonbus-sms', 'vermema-sms-nonbus', + 'win-standby-bus', 'win-standby-nonbus' + ) + and senddate >= add_months(trunc(sysdate, 'MM'), -6) +group by notification_group, trunc(senddate, 'MM') +order by begin_date, notification_group; + + + + + + + +set linesize 120 +set pages 9999 + +column counted format 9G999G999 +column month_sum format 9G999G999 +column pct format 990D99 +column notification_group format a50 +break on begin_date skip 1 on end_date skip 1 +compute sum of counted on begin_date + +select sendmonth begin_date, add_months(sendmonth, 1) - 1 end_date, ranking, notification_group, counted, month_sum, + (100/month_sum) * counted pct +from ( select sendmonth, notification_group, counted, + dense_rank () over ( partition by sendmonth order by counted desc) ranking, + sum(counted) over (partition by sendmonth) month_sum + from ( select trunc(senddate, 'MM') sendmonth, notification_group, count(*) counted + from stats_200804 + where notification_group in + ( 'bvp-sms', 'bvp-sms-bus', 'bvp-sms-nonbus', 'dba-standby-bus', 'dba-standby-nonbus', + 'dba-standby-nonbus-nowarn', 'hosting-standby-bus', 'hosting-standby-nonbus', + 'janssst-sms-nonbus', 'liekejo-sms-bus', 'liekejo-sms-nonbus', 'network-standby-bus', + 'network-standby-nonbus', 'spruyma-bus-sms', 'spruyma-nonbus-sms', 'spruyma-standby-bus', + 'spruyma-standby-nonbus', 'vanropi-bus-sms', 'vanropi-nonbus-sms', 'vermema-sms-nonbus', + 'win-standby-bus', 'win-standby-nonbus' + ) + and senddate >= add_months(trunc(sysdate, 'MM'), -6) + group by notification_group, trunc(senddate, 'MM') + ) + ) +where ranking <= 10 +order by sendmonth, ranking, notification_group; + + + + +set linesize 120 +set pages 9999 + +column counted format 9G999G999 +column month_sum format 9G999G999 +column pct format 990D99 +column clientname format a30 +break on begin_date skip 1 on end_date skip 1 +compute sum of counted on begin_date + +select sendmonth begin_date, add_months(sendmonth, 1) - 1 end_date, ranking, clientname, counted, month_sum, + (100/month_sum) * counted pct +from ( select sendmonth, clientname, counted, + dense_rank () over ( partition by sendmonth order by counted desc) ranking, + sum(counted) over (partition by sendmonth) month_sum + from ( select trunc(senddate, 'MM') sendmonth, clientname, count(*) counted + from stats_200804 + where notification_group in + ( 'bvp-sms', 'bvp-sms-bus', 'bvp-sms-nonbus', 'dba-standby-bus', 'dba-standby-nonbus', + 'dba-standby-nonbus-nowarn', 'hosting-standby-bus', 'hosting-standby-nonbus', + 'janssst-sms-nonbus', 'liekejo-sms-bus', 'liekejo-sms-nonbus', 'network-standby-bus', + 'network-standby-nonbus', 'spruyma-bus-sms', 'spruyma-nonbus-sms', 'spruyma-standby-bus', + 'spruyma-standby-nonbus', 'vanropi-bus-sms', 'vanropi-nonbus-sms', 'vermema-sms-nonbus', + 'win-standby-bus', 'win-standby-nonbus' + ) + and senddate >= add_months(trunc(sysdate, 'MM'), -6) + group by clientname, trunc(senddate, 'MM') + ) + ) +where ranking <= 10 +order by sendmonth, ranking, clientname; + + + + + +set linesize 140 +set pages 9999 + +column counted format 9G999G999 +column month_sum format 9G999G999 +column pct format 990D99 +column clientname format a30 +column systemname format a30 +break on begin_date skip 1 on end_date skip 1 +compute sum of counted on begin_date + +select sendmonth begin_date, add_months(sendmonth, 1) - 1 end_date, ranking, clientname, systemname, counted, month_sum, + (100/month_sum) * counted pct +from ( select sendmonth, clientname, systemname, counted, + dense_rank () over ( partition by sendmonth order by counted desc) ranking, + sum(counted) over (partition by sendmonth) month_sum + from ( select trunc(senddate, 'MM') sendmonth, clientname, systemname, count(*) counted + from stats_200804 + where notification_group in + ( 'bvp-sms', 'bvp-sms-bus', 'bvp-sms-nonbus', 'dba-standby-bus', 'dba-standby-nonbus', + 'dba-standby-nonbus-nowarn', 'hosting-standby-bus', 'hosting-standby-nonbus', + 'janssst-sms-nonbus', 'liekejo-sms-bus', 'liekejo-sms-nonbus', 'network-standby-bus', + 'network-standby-nonbus', 'spruyma-bus-sms', 'spruyma-nonbus-sms', 'spruyma-standby-bus', + 'spruyma-standby-nonbus', 'vanropi-bus-sms', 'vanropi-nonbus-sms', 'vermema-sms-nonbus', + 'win-standby-bus', 'win-standby-nonbus' + ) + and senddate >= add_months(trunc(sysdate, 'MM'), -3) + group by clientname, trunc(senddate, 'MM'), systemname + ) + ) +where ranking <= 20 +order by sendmonth, ranking, clientname; diff --git a/vdh/nb_show_policies.sh b/vdh/nb_show_policies.sh new file mode 100644 index 0000000..0b642ac --- /dev/null +++ b/vdh/nb_show_policies.sh @@ -0,0 +1,28 @@ +#!/usr/bin/bash + +_bppllist=/usr/openv/netbackup/bin/admincmd/bppllist +_bpplinfo=/usr/openv/netbackup/bin/admincmd/bpplinfo +_bpplsched=/usr/openv/netbackup/bin/admincmd/bpplsched +_bpplinclude=/usr/openv/netbackup/bin/admincmd/bpplinclude +_bpplclients=/usr/openv/netbackup/bin/admincmd/bpplclients + +for i in `$_bppllist | sort`; do +echo; +echo POLICY: $i; +echo -----------------------------------------------------------------------------;echo; +$_bpplinfo $i -U; +echo; +echo CLIENTS:; +echo --------;echo; +$_bpplclients $i -U; +echo; +echo INCLUDE LIST:; +echo -------------;echo; +$_bpplinclude $i -U; +echo; +echo SCHEDULES:; +echo ----------; +$_bpplsched $i -U; +echo ------------------------------------------------------------------------------; +echo;echo; +done diff --git a/vdh/netapp_ontap8_lun_reporting.txt b/vdh/netapp_ontap8_lun_reporting.txt new file mode 100644 index 0000000..496b669 --- /dev/null +++ b/vdh/netapp_ontap8_lun_reporting.txt @@ -0,0 +1,49 @@ +ssh exitasadmin@10.7.183.249 "lun show -instance" | tr -d ' ' | dos2unix | \ +awk ' +BEGIN { + FS = ":" +} { + if ($1 ~ "LUNName") { + lunname=$2 + } + if ($1 ~ "LUNSize") { + lunsize=$2 + } + if ($1 ~ "SerialNumber") { + lunserial=$2 + cmd="echo -n " lunserial "| od -A n -t x1 |tr -d \" \"" + cmd | getline lunwwid + close(cmd) + printf "%-30s %10s %-15s 3600a0980%-20s\n", lunname, lunsize, lunserial, lunwwid + } +}' + + + + +3600a0980:32:46:67:69:34:2b:47:68:43:4a:63:4e + :32:46:67:69:34:2b:47:68:43:4a:63:4e + + +==> use set commands to set all fields, field separator and disable pagination to make processing via scripting easier +==> set -rows 0 also seems to disable the row jumping when the value is larger then the column width + + +ssh exitasadmin@10.7.183.249 "set -rows 0 ; set -showallfields true ; set -showseparator \";\" ; set -units GB ; lun show -fields vserver,path,lun,size,serial" |\ +awk ' +BEGIN { + FS=";" + printf "%-30s %10s %-15s %-33s\n", "Name", "Size", "Serial", "WWID" + printf "%-30s %10s %-15s %-33s\n", "------------------------------", "----------", "---------------", "---------------------------------" +} +NR > 6 { + if ($3 != "") { + cmd="echo -n " $5 "| od -A n -t x1 |tr -d \" \"" + cmd | getline lunwwid + close(cmd) + printf "%-30s %10s %-15s 3600a0980%-24s\n", $3, $4, $5, lunwwid + } +}' + + +3600a0980 32466769342b4768434a634d diff --git a/vdh/nonshared.sql b/vdh/nonshared.sql new file mode 100644 index 0000000..dd0fe33 --- /dev/null +++ b/vdh/nonshared.sql @@ -0,0 +1,74 @@ +-------------------------------------------------------------------------------- +-- +-- File name: nonshared.sql +-- Purpose: Print reasons for non-shared child cursors from v$sql_shared_cursor +-- in a readable format +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @nonshared +-- @nonshared 7gf6xg9xfv3vb +-- +-- Other: Uses modified version of Tom Kyte's printtab code +-- ( http://asktom.oracle.com ) +-- +-------------------------------------------------------------------------------- + + +--@@saveset +set serverout on size 1000000 +prompt + +def cmd="select * from v$sql_shared_cursor where sql_id = ''&1''" + + +declare + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_descTbl dbms_sql.desc_tab; + l_colCnt number; + procedure execute_immediate( p_sql in varchar2 ) + is + BEGIN + dbms_sql.parse(l_theCursor,p_sql,dbms_sql.native); + l_status := dbms_sql.execute(l_theCursor); + END; +begin + execute_immediate( 'alter session set nls_date_format= + ''dd-mon-yyyy hh24:mi:ss'' '); + dbms_sql.parse( l_theCursor, + replace( '&cmd', '"', ''''), + dbms_sql.native ); + dbms_sql.describe_columns( l_theCursor, + l_colCnt, l_descTbl ); + for i in 1 .. l_colCnt loop + dbms_sql.define_column( l_theCursor, i, + l_columnValue, 4000 ); + end loop; + l_status := dbms_sql.execute(l_theCursor); + while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop + for i in 1 .. l_colCnt loop + dbms_sql.column_value( l_theCursor, i, + l_columnValue ); + if l_columnValue != 'N' then + dbms_output.put_line + ( rpad( l_descTbl(i).col_name, + 30 ) || ': ' || l_columnValue ); + end if; + end loop; + dbms_output.put_line( '-----------------' ); + end loop; + execute_immediate( 'alter session set nls_date_format= + ''dd-MON-yy'' '); +exception + when others then + execute_immediate( 'alter session set + nls_date_format=''dd-MON-yy'' '); + raise; +end; +/ + +--@@loadset +set serverout off \ No newline at end of file diff --git a/vdh/obj_by_hex.sql b/vdh/obj_by_hex.sql new file mode 100644 index 0000000..5173f0d --- /dev/null +++ b/vdh/obj_by_hex.sql @@ -0,0 +1,4 @@ +col object_name for a30 +select owner, object_name, object_type +from dba_objects +where data_object_id = to_number(replace('&hex_value','0x',''),'XXXXXX'); diff --git a/vdh/oem_assign_preferred_sysdba_creds.sql b/vdh/oem_assign_preferred_sysdba_creds.sql new file mode 100644 index 0000000..3c3c224 --- /dev/null +++ b/vdh/oem_assign_preferred_sysdba_creds.sql @@ -0,0 +1,76 @@ +-- Generate emcli (script) commands to set the preferred sysdba credential for databases that have not yet a preferred sysdba credential set +-- The named credential set depends on which admin group the database belongs to +-- (change the mapping to fit your needs. If you also created manual groups, duplicates can occur) +-- No password testing is done, but can be added in the emcli command as parameter + +select + 'set_preferred_credential(set_name="DBCredsSYSDBA", target_name="' + || tgts.target_name + || '",target_type="' + || tgts.target_type + || '",credential_name="' + || ( case gdm.composite_target_name + when 'evol-MIC-Grp' then 'ORADB_DEFEVOPRD_SYS' + when 'evol-PRD-Grp' then 'ORADB_DEFEVOPRD_SYS' + when 'evol-UAT-Grp' then 'ORADB_DEFEVOACC_SYS' + when 'evol-TST-Grp' then 'ORADB_DEFEVOTST_SYS' + when 'evol-DEV-Grp' then 'ORADB_DEFEVODEV_SYS' + when 'bi-MIC-Grp' then 'ORADB_DEFEVOPRD_SYS' + when 'bi-PRD-Grp' then 'ORADB_DEFEVOPRD_SYS' + when 'bi-UAT-Grp' then 'ORADB_DEFEVOACC_SYS' + when 'bi-TST-Grp' then 'ORADB_DEFEVOTST_SYS' + when 'bi-DEV-Grp' then 'ORADB_DEFEVODEV_SYS' + when 'dots-MIC-Grp' then 'ORADB_DEFDOTSPRD_SYS' + when 'dots-PRD-Grp' then 'ORADB_DEFDOTSPRD_SYS' + when 'dots-UAT-Grp' then 'ORADB_DEFDOTSACC_SYS' + when 'dots-TST-Grp' then 'ORADB_DEFDOTSTST_SYS' + when 'dots-DEV-Grp' then 'ORADB_DEFDOTSDEV_SYS' + when 'infra-PRD-Grp' then 'ORADB_DEFEVOPRD_SYS' + when 'infra-TST-Grp' then 'ORADB_DEFEVOPRD_SYS' + when 'misc-MIC-Grp' then 'ORADB_DEFEVOPRD_SYS' + when 'misc-PRD-Grp' then 'ORADB_DEFEVOPRD_SYS' + when 'syn-PRD-Grp' then 'ORADB_DEFEVOPRD_SYS' + end + ) + || '",' + || ')' +-- tgts.target_name, +-- tgts.target_type, +-- tgts.type_qualifier3, +-- nvl(composite_target_name, 'Unassigned') group_name +from + mgmt$target tgts + join mgmt$group_derived_memberships gdm + on ( tgts.target_guid = gdm.member_target_guid + ) +where + tgts.target_type in + ( 'oracle_database', 'oracle_pdb', 'rac_database' + ) + and target_guid not in + ( select + tcreds.target_guid + from + em_nc_creds creds + join em_target_creds_e tcreds + on ( creds.cred_guid = tcreds.cred_guid + ) + where + creds.cred_type_name = 'DBCreds' + and creds.cred_scope = 1 + and tcreds.set_name = 'DBCredsSYSDBA' + and tcreds.is_default = 0 + ) + and ( composite_target_guid is null + or composite_target_guid not in + ( select + composite_target_guid + from + mgmt$group_derived_memberships + where + member_target_type = 'composite' + ) + ) +order by + tgts.target_name +; diff --git a/vdh/oem_list_group_members.sql b/vdh/oem_list_group_members.sql new file mode 100644 index 0000000..8649154 --- /dev/null +++ b/vdh/oem_list_group_members.sql @@ -0,0 +1,33 @@ +column group_name format a30 +column target_type format a30 +column target_name format a60 + +select + trgt.target_name, + trgt.target_type, + nvl(composite_target_name, 'Unassigned') group_name +from + mgmt$group_derived_memberships gdm, + mgmt$target trgt +where + gdm.member_target_guid(+) = trgt.target_guid + and ( ( trgt.target_type = 'oracle_database' + and trgt.type_qualifier3 != 'RACINST' + ) + or trgt.target_type in ('oracle_pdb', 'rac_database', 'host', 'osm_cluster', 'oracle_si_virtual_platform', 'oracle_si_server', 'oracle_exadata_grid') + ) + and ( composite_target_guid is null + or composite_target_guid not in + ( select + composite_target_guid + from + mgmt$group_derived_memberships + where + member_target_type = 'composite' + ) + ) +order by + target_name, + target_type, + group_name +; diff --git a/vdh/oem_list_group_members_by_group.sql b/vdh/oem_list_group_members_by_group.sql new file mode 100644 index 0000000..c1c9dcc --- /dev/null +++ b/vdh/oem_list_group_members_by_group.sql @@ -0,0 +1,37 @@ +column group_name format a30 +column target_type format a30 +column target_name format a60 + +break on group_name skip 1 on target_type + +select + nvl(composite_target_name, 'Unassigned') group_name, + trgt.target_type, + trgt.target_name +from + mgmt$group_derived_memberships gdm, + mgmt$target trgt +where + gdm.member_target_guid(+) = trgt.target_guid + and ( ( trgt.target_type = 'oracle_database' + and trgt.type_qualifier3 != 'RACINST' + ) + or trgt.target_type in ('oracle_pdb', 'rac_database', 'host', 'osm_cluster', 'oracle_si_virtual_platform', 'oracle_si_server', 'oracle_exadata_grid') + ) + and ( composite_target_guid is null + or composite_target_guid not in + ( select + composite_target_guid + from + mgmt$group_derived_memberships + where + member_target_type = 'composite' + ) + ) +order by + group_name, + target_type, + target_name +; + +clear breaks diff --git a/vdh/oem_list_group_members_by_target_type.sql b/vdh/oem_list_group_members_by_target_type.sql new file mode 100644 index 0000000..2aebb26 --- /dev/null +++ b/vdh/oem_list_group_members_by_target_type.sql @@ -0,0 +1,37 @@ +column group_name format a30 +column target_type format a30 +column target_name format a60 + +break on target_type skip 1 + +select + trgt.target_type, + trgt.target_name, + nvl(composite_target_name, 'Unassigned') group_name +from + mgmt$group_derived_memberships gdm, + mgmt$target trgt +where + gdm.member_target_guid(+) = trgt.target_guid + and ( ( trgt.target_type = 'oracle_database' + and trgt.type_qualifier3 != 'RACINST' + ) + or trgt.target_type in ('oracle_pdb', 'rac_database', 'host', 'osm_cluster', 'oracle_si_virtual_platform', 'oracle_si_server', 'oracle_exadata_grid') + ) + and ( composite_target_guid is null + or composite_target_guid not in + ( select + composite_target_guid + from + mgmt$group_derived_memberships + where + member_target_type = 'composite' + ) + ) +order by + target_type, + target_name, + group_name +; + +clear breaks diff --git a/vdh/oem_list_preferred_dbcreds.sql b/vdh/oem_list_preferred_dbcreds.sql new file mode 100644 index 0000000..8d1cde4 --- /dev/null +++ b/vdh/oem_list_preferred_dbcreds.sql @@ -0,0 +1,25 @@ +-- list the default DBCreds credentials for the DB targets + +select + tgts.target_name, + tcreds.set_name, + creds.cred_name, + tcreds.target_type, + tcreds.is_default +from + em_nc_creds creds + join em_target_creds_e tcreds + on ( creds.cred_guid = tcreds.cred_guid + ) + join mgmt$target tgts + on ( tcreds.target_guid = tgts.target_guid + ) +where + creds.cred_type_name = 'DBCreds' + and creds.cred_scope = 1 +-- and tcreds.set_name = 'DBCredsSYSDBA' + and tcreds.is_default = 0 +order by + tgts.target_name, + tcreds.set_name +; diff --git a/vdh/oem_retrieve_secure_credentials.sql b/vdh/oem_retrieve_secure_credentials.sql new file mode 100644 index 0000000..eefa9f2 --- /dev/null +++ b/vdh/oem_retrieve_secure_credentials.sql @@ -0,0 +1,63 @@ +-- list the OEM secure credentials, including the password itself, together with their associated target (if not public) +-- You can use this script to retrieve all credential values, which is usefull when coming in an environment where people have bad memories +-- run this as sysman user on the OEM repository +-- before running this script, the EM Key needs to be stored in the repository, to this via emctl config emkey -copy_to_repos +-- after the script has finished, remove the emkey again with emctl config emkey -remove_from_rep + +-- based upon script from Gokhan Atil http://www.gokhanatil.com/2015/02/em12c-how-to-retrieve-passwords-from-the-named-credentials.html +-- Credits to him ! + + +column cred_owner format a30 +column cred_owner format a10 +column cred_name format a40 +column target_type format a20 +column username format a30 +column rolename format a30 +column credential_pwd format a30 +column target_name format a50 + +select + * +from +( select + creds.cred_owner, + creds.cred_name, + creds.target_type, + creds.cred_scope, + tgts.target_name, + ( select + em_crypto.decrypt(credc.cred_attr_value, credc.cred_salt) + from + em_nc_cred_columns credc + where + creds.cred_guid = credc.cred_guid + and lower(credc.cred_attr_name) like '%user%' + ) username, + ( select + em_crypto.decrypt(credc.cred_attr_value, credc.cred_salt) + from + em_nc_cred_columns credc + where + creds.cred_guid = credc.cred_guid + and lower(credc.cred_attr_name) like '%role%' + ) rolename, + ( select + em_crypto.decrypt(credc.cred_attr_value, credc.cred_salt) + from + em_nc_cred_columns credc + where + creds.cred_guid = credc.cred_guid + and lower(credc.cred_attr_name) like '%password%' + ) credential_pwd + from + em_nc_creds creds + left outer join mgmt$target tgts + on ( creds.target_guid = tgts.target_guid) +) +where + credential_pwd is not null +order by + cred_owner, + cred_name +; diff --git a/vdh/oemrep_att_daily_avg_cpu_usage_prod.sql b/vdh/oemrep_att_daily_avg_cpu_usage_prod.sql new file mode 100644 index 0000000..af9dc2d --- /dev/null +++ b/vdh/oemrep_att_daily_avg_cpu_usage_prod.sql @@ -0,0 +1,137 @@ +/* historic avg cpu usage by the databases in the MIC and PRD groups, hosted on the x4-2 exadata + can be used as template for other customers, but group namings and host names would require changes +*/ + +set linesize 600 + +column host_name format a30 heading "Host Name" +--column cpu_count format 999 heading "Num OS CPUs" +column virtual format a7 heading "Virtual|Guest" +column cpu_sockets format 999 heading "Num CPU|Sockets" +column cpu_cores format 999 heading "Num CPU|Cores" +column logical_cpus format 999 heading "Num CPU|Threads" +column rollup_timestamp_s format a10 heading "Date" +column bi_mic_avg_cpups format 999G990D000 heading "BI-Mic|ps (cs)" +column dots_mic_avg_cpups format 999G990D000 heading "Dotc-Mic|ps (cs)" +column dots_prd_avg_cpups format 999G990D000 heading "Dots-Prd|ps (cs)" +column evol_mic_avg_cpups format 999G990D000 heading "Evol-Mic|ps (cs)" +column eval_prd_avg_cpups format 999G990D000 heading "Evol-Prd|ps (cs)" +column infra_prd_avg_cpups format 999G990D000 heading "Infra-Prd|ps (cs)" +column misc_mic_avg_cpups format 999G990D000 heading "Misc-Mic|ps (cs)" +column misc_prd_avg_cpups format 999G990D000 heading "Misc-Prd|ps (cs)" +column syn_prd_avg_cpups format 999G990D000 heading "Syn-Prd|ps (cs)" +column total_avg_cpups format 999G990D000 heading "Total|ps (cs)" +column avg_cpu_load format 990D00 heading "Avg CPU|Load %" + +break on host_name dup skip page + +with +prd_db_usage as +( select + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + met.rollup_timestamp, + gdm.composite_target_name group_name, + -- tgt.target_guid, + -- tgt.target_name, + sum(met.average) sum_avg_cpuusage_ps + -- sum(met.minimum) sum_min_cpuusage_ps, + -- sum(met.maximum) sum_max_cpuusage_ps + from + mgmt$target tgt + join mgmt$os_hw_summary hws + on ( hws.host_name = tgt.host_name ) + join mgmt$metric_daily met + on ( tgt.target_guid = met.target_guid) + join mgmt$group_derived_memberships gdm + on ( tgt.target_guid = gdm.member_target_guid) + where + tgt.target_type = 'oracle_database' + and met.metric_name = 'instance_efficiency' + and met.metric_column = 'cpuusage_ps' + and ( gdm.composite_target_name like '%-MIC-Grp' + or gdm.composite_target_name like '%-PRD-Grp' + ) + and tgt.host_name in ('sdtcsynx4adb01.localwan.net', 'sdtcsynx4adb02.localwan.net') + group by + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + gdm.composite_target_name, + met.rollup_timestamp +), +prd_db_usage_p as +( select + * + from + prd_db_usage + pivot + ( sum(sum_avg_cpuusage_ps) as avg_cpups + -- sum(sum_min_cpuusage_ps) as min_cpups, + -- sum(sum_max_cpuusage_ps) as max_cpups + for group_name in + ( 'bi-MIC-Grp' as BI_MIC, + --'bi-PRD-Grp' as BI_PRD, + 'dots-MIC-Grp' as DOTS_MIC, 'dots-PRD-Grp' as DOTS_PRD, 'evol-MIC-Grp' as EVOL_MIC, + 'evol-PRD-Grp' as EVAL_PRD, + -- 'infra-MIC-Grp' as INFRA_MIC, + 'infra-PRD-Grp' as INFRA_PRD, 'misc-MIC-Grp' as MISC_MIC, + 'misc-PRD-Grp' as MISC_PRD, + -- 'syn-MIC-Grp' as SYN_MIC, + 'syn-PRD-Grp' as SYN_PRD + ) + ) +) +select + host_name, +-- cpu_count, + virtual, + physical_cpu_count cpu_sockets, + total_cpu_cores cpu_cores, + logical_cpu_count logical_cpus, + to_char(rollup_timestamp, 'DD/MM/YYYY') rollup_timestamp_s, + bi_mic_avg_cpups, + dots_mic_avg_cpups, + dots_prd_avg_cpups, + evol_mic_avg_cpups, + eval_prd_avg_cpups, + infra_prd_avg_cpups, + misc_mic_avg_cpups, + misc_prd_avg_cpups, + syn_prd_avg_cpups, + ( nvl(bi_mic_avg_cpups,0) + + nvl(dots_mic_avg_cpups,0) + + nvl(dots_prd_avg_cpups,0) + + nvl(evol_mic_avg_cpups,0) + + nvl(eval_prd_avg_cpups,0) + + nvl(infra_prd_avg_cpups,0) + + nvl(misc_mic_avg_cpups,0) + + nvl(misc_prd_avg_cpups,0) + + nvl(syn_prd_avg_cpups,0) + ) total_avg_cpups, + ( ( nvl(bi_mic_avg_cpups,0) + + nvl(dots_mic_avg_cpups,0) + + nvl(dots_prd_avg_cpups,0) + + nvl(evol_mic_avg_cpups,0) + + nvl(eval_prd_avg_cpups,0) + + nvl(infra_prd_avg_cpups,0) + + nvl(misc_mic_avg_cpups,0) + + nvl(misc_prd_avg_cpups,0) + + nvl(syn_prd_avg_cpups,0) + ) / total_cpu_cores + ) avg_cpu_load +from + prd_db_usage_p +order by + host_name, + rollup_timestamp +; + +clear breaks diff --git a/vdh/oemrep_att_daily_max_cpu_usage_prod.sql b/vdh/oemrep_att_daily_max_cpu_usage_prod.sql new file mode 100644 index 0000000..a8b4fe4 --- /dev/null +++ b/vdh/oemrep_att_daily_max_cpu_usage_prod.sql @@ -0,0 +1,136 @@ +/* historic max cpu usage by the databases in the MIC and PRD groups, hosted on the x4-2 exadata + can be used as template for other customers, but group namings and host names would require changes +*/ + +set linesize 600 + +column host_name format a30 heading "Host Name" +--column cpu_count format 999 heading "Num OS CPUs" +column virtual format a7 heading "Virtual|Guest" +column cpu_sockets format 999 heading "Num CPU|Sockets" +column cpu_cores format 999 heading "Num CPU|Cores" +column logical_cpus format 999 heading "Num CPU|Threads" +column rollup_timestamp_s format a10 heading "Date" +column bi_mic_max_cpups format 999G990D000 heading "BI-Mic|ps (cs)" +column dots_mic_max_cpups format 999G990D000 heading "Dotc-Mic|ps (cs)" +column dots_prd_max_cpups format 999G990D000 heading "Dots-Prd|ps (cs)" +column evol_mic_max_cpups format 999G990D000 heading "Evol-Mic|ps (cs)" +column eval_prd_max_cpups format 999G990D000 heading "Evol-Prd|ps (cs)" +column infra_prd_max_cpups format 999G990D000 heading "Infra-Prd|ps (cs)" +column misc_mic_max_cpups format 999G990D000 heading "Misc-Mic|ps (cs)" +column misc_prd_max_cpups format 999G990D000 heading "Misc-Prd|ps (cs)" +column syn_prd_max_cpups format 999G990D000 heading "Syn-Prd|ps (cs)" +column total_max_cpups format 999G990D000 heading "Total|ps (cs)" +column avg_cpu_load format 990D00 heading "Max CPU|Load %" +break on host_name dup skip page + +with +prd_db_usage as +( select + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + met.rollup_timestamp, + gdm.composite_target_name group_name, + -- tgt.target_guid, + -- tgt.target_name, + -- sum(met.average) sum_avg_cpuusage_ps, + -- sum(met.minimum) sum_min_cpuusage_ps, + sum(met.maximum) sum_max_cpuusage_ps + from + mgmt$target tgt + join mgmt$os_hw_summary hws + on ( hws.host_name = tgt.host_name ) + join mgmt$metric_daily met + on ( tgt.target_guid = met.target_guid) + join mgmt$group_derived_memberships gdm + on ( tgt.target_guid = gdm.member_target_guid) + where + tgt.target_type = 'oracle_database' + and met.metric_name = 'instance_efficiency' + and met.metric_column = 'cpuusage_ps' + and ( gdm.composite_target_name like '%-MIC-Grp' + or gdm.composite_target_name like '%-PRD-Grp' + ) + and tgt.host_name in ('sdtcsynx4adb01.localwan.net', 'sdtcsynx4adb02.localwan.net') + group by + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + gdm.composite_target_name, + met.rollup_timestamp +), +prd_db_usage_p as +( select + * + from + prd_db_usage + pivot + ( -- sum(sum_avg_cpuusage_ps) as avg_cpups, + -- sum(sum_min_cpuusage_ps) as min_cpups, + sum(sum_max_cpuusage_ps) as max_cpups + for group_name in + ( 'bi-MIC-Grp' as BI_MIC, + --'bi-PRD-Grp' as BI_PRD, + 'dots-MIC-Grp' as DOTS_MIC, 'dots-PRD-Grp' as DOTS_PRD, 'evol-MIC-Grp' as EVOL_MIC, + 'evol-PRD-Grp' as EVAL_PRD, + -- 'infra-MIC-Grp' as INFRA_MIC, + 'infra-PRD-Grp' as INFRA_PRD, 'misc-MIC-Grp' as MISC_MIC, + 'misc-PRD-Grp' as MISC_PRD, + -- 'syn-MIC-Grp' as SYN_MIC, + 'syn-PRD-Grp' as SYN_PRD + ) + ) +) +select + host_name, +-- cpu_count, + virtual, + physical_cpu_count cpu_sockets, + total_cpu_cores cpu_cores, + logical_cpu_count logical_cpus, + to_char(rollup_timestamp, 'DD/MM/YYYY') rollup_timestamp_s, + bi_mic_max_cpups, + dots_mic_max_cpups, + dots_prd_max_cpups, + evol_mic_max_cpups, + eval_prd_max_cpups, + infra_prd_max_cpups, + misc_mic_max_cpups, + misc_prd_max_cpups, + syn_prd_max_cpups, + ( nvl(bi_mic_max_cpups,0) + + nvl(dots_mic_max_cpups,0) + + nvl(dots_prd_max_cpups,0) + + nvl(evol_mic_max_cpups,0) + + nvl(eval_prd_max_cpups,0) + + nvl(infra_prd_max_cpups,0) + + nvl(misc_mic_max_cpups,0) + + nvl(misc_prd_max_cpups,0) + + nvl(syn_prd_max_cpups,0) + ) total_max_cpups, + ( ( nvl(bi_mic_max_cpups,0) + + nvl(dots_mic_max_cpups,0) + + nvl(dots_prd_max_cpups,0) + + nvl(evol_mic_max_cpups,0) + + nvl(eval_prd_max_cpups,0) + + nvl(infra_prd_max_cpups,0) + + nvl(misc_mic_max_cpups,0) + + nvl(misc_prd_max_cpups,0) + + nvl(syn_prd_max_cpups,0) + ) / total_cpu_cores + ) avg_cpu_load +from + prd_db_usage_p +order by + host_name, + rollup_timestamp +; + +clear breaks diff --git a/vdh/oemrep_att_hourly_avg_cpu_usage_prod.sql b/vdh/oemrep_att_hourly_avg_cpu_usage_prod.sql new file mode 100644 index 0000000..b63e4e9 --- /dev/null +++ b/vdh/oemrep_att_hourly_avg_cpu_usage_prod.sql @@ -0,0 +1,136 @@ +/* hourly avg cpu usage by the databases in the MIC and PRD groups, hosted on the x4-2 exadata + can be used as template for other customers, but group namings and host names would require changes +*/ + +set linesize 600 + +column host_name format a30 heading "Host Name" +--column cpu_count format 999 heading "Num OS CPUs" +column virtual format a7 heading "Virtual|Guest" +column cpu_sockets format 999 heading "Num CPU|Sockets" +column cpu_cores format 999 heading "Num CPU|Cores" +column logical_cpus format 999 heading "Num CPU|Threads" +column rollup_timestamp_s format a20 heading "Date" +column bi_mic_avg_cpups format 999G990D000 heading "BI-Mic|ps (cs)" +column dots_mic_avg_cpups format 999G990D000 heading "Dotc-Mic|ps (cs)" +column dots_prd_avg_cpups format 999G990D000 heading "Dots-Prd|ps (cs)" +column evol_mic_avg_cpups format 999G990D000 heading "Evol-Mic|ps (cs)" +column eval_prd_avg_cpups format 999G990D000 heading "Evol-Prd|ps (cs)" +column infra_prd_avg_cpups format 999G990D000 heading "Infra-Prd|ps (cs)" +column misc_mic_avg_cpups format 999G990D000 heading "Misc-Mic|ps (cs)" +column misc_prd_avg_cpups format 999G990D000 heading "Misc-Prd|ps (cs)" +column syn_prd_avg_cpups format 999G990D000 heading "Syn-Prd|ps (cs)" +column total_avg_cpups format 999G990D000 heading "Total|ps (cs)" +column avg_cpu_load format 990D00 heading "Avg CPU|Load %" +break on host_name dup skip page + +with +prd_db_usage as +( select + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + met.rollup_timestamp, + gdm.composite_target_name group_name, + -- tgt.target_guid, + -- tgt.target_name, + sum(met.average) sum_avg_cpuusage_ps + -- sum(met.minimum) sum_min_cpuusage_ps, + -- sum(met.maximum) sum_max_cpuusage_ps + from + mgmt$target tgt + join mgmt$os_hw_summary hws + on ( hws.host_name = tgt.host_name ) + join mgmt$metric_hourly met + on ( tgt.target_guid = met.target_guid) + join mgmt$group_derived_memberships gdm + on ( tgt.target_guid = gdm.member_target_guid) + where + tgt.target_type = 'oracle_database' + and met.metric_name = 'instance_efficiency' + and met.metric_column = 'cpuusage_ps' + and ( gdm.composite_target_name like '%-MIC-Grp' + or gdm.composite_target_name like '%-PRD-Grp' + ) + and tgt.host_name in ('sdtcsynx4adb01.localwan.net', 'sdtcsynx4adb02.localwan.net') + group by + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + gdm.composite_target_name, + met.rollup_timestamp +), +prd_db_usage_p as +( select + * + from + prd_db_usage + pivot + ( sum(sum_avg_cpuusage_ps) as avg_cpups + -- sum(sum_min_cpuusage_ps) as min_cpups, + -- sum(sum_max_cpuusage_ps) as max_cpups + for group_name in + ( 'bi-MIC-Grp' as BI_MIC, + --'bi-PRD-Grp' as BI_PRD, + 'dots-MIC-Grp' as DOTS_MIC, 'dots-PRD-Grp' as DOTS_PRD, 'evol-MIC-Grp' as EVOL_MIC, + 'evol-PRD-Grp' as EVAL_PRD, + -- 'infra-MIC-Grp' as INFRA_MIC, + 'infra-PRD-Grp' as INFRA_PRD, 'misc-MIC-Grp' as MISC_MIC, + 'misc-PRD-Grp' as MISC_PRD, + -- 'syn-MIC-Grp' as SYN_MIC, + 'syn-PRD-Grp' as SYN_PRD + ) + ) +) +select + host_name, +-- cpu_count, + virtual, + physical_cpu_count cpu_sockets, + total_cpu_cores cpu_cores, + logical_cpu_count logical_cpus, + to_char(rollup_timestamp, 'DD/MM/YYYY HH24:MI:SS') rollup_timestamp_s, + bi_mic_avg_cpups, + dots_mic_avg_cpups, + dots_prd_avg_cpups, + evol_mic_avg_cpups, + eval_prd_avg_cpups, + infra_prd_avg_cpups, + misc_mic_avg_cpups, + misc_prd_avg_cpups, + syn_prd_avg_cpups, + ( nvl(bi_mic_avg_cpups,0) + + nvl(dots_mic_avg_cpups,0) + + nvl(dots_prd_avg_cpups,0) + + nvl(evol_mic_avg_cpups,0) + + nvl(eval_prd_avg_cpups,0) + + nvl(infra_prd_avg_cpups,0) + + nvl(misc_mic_avg_cpups,0) + + nvl(misc_prd_avg_cpups,0) + + nvl(syn_prd_avg_cpups,0) + ) total_avg_cpups, + ( ( nvl(bi_mic_avg_cpups,0) + + nvl(dots_mic_avg_cpups,0) + + nvl(dots_prd_avg_cpups,0) + + nvl(evol_mic_avg_cpups,0) + + nvl(eval_prd_avg_cpups,0) + + nvl(infra_prd_avg_cpups,0) + + nvl(misc_mic_avg_cpups,0) + + nvl(misc_prd_avg_cpups,0) + + nvl(syn_prd_avg_cpups,0) + ) / total_cpu_cores + ) avg_cpu_load +from + prd_db_usage_p +order by + host_name, + rollup_timestamp +; + +clear breaks diff --git a/vdh/oemrep_att_hourly_max_cpu_usage_prod.sql b/vdh/oemrep_att_hourly_max_cpu_usage_prod.sql new file mode 100644 index 0000000..18db3e3 --- /dev/null +++ b/vdh/oemrep_att_hourly_max_cpu_usage_prod.sql @@ -0,0 +1,136 @@ +/* hourly max cpu usage by the databases in the MIC and PRD groups, hosted on the x4-2 exadata + can be used as template for other customers, but group namings and host names would require changes +*/ + +set linesize 600 + +column host_name format a30 heading "Host Name" +--column cpu_count format 999 heading "Num OS CPUs" +column virtual format a7 heading "Virtual|Guest" +column cpu_sockets format 999 heading "Num CPU|Sockets" +column cpu_cores format 999 heading "Num CPU|Cores" +column logical_cpus format 999 heading "Num CPU|Threads" +column rollup_timestamp_s format a16 heading "Date" +column bi_mic_max_cpups format 999G990D000 heading "BI-Mic|ps (cs)" +column dots_mic_max_cpups format 999G990D000 heading "Dotc-Mic|ps (cs)" +column dots_prd_max_cpups format 999G990D000 heading "Dots-Prd|ps (cs)" +column evol_mic_max_cpups format 999G990D000 heading "Evol-Mic|ps (cs)" +column eval_prd_max_cpups format 999G990D000 heading "Evol-Prd|ps (cs)" +column infra_prd_max_cpups format 999G990D000 heading "Infra-Prd|ps (cs)" +column misc_mic_max_cpups format 999G990D000 heading "Misc-Mic|ps (cs)" +column misc_prd_max_cpups format 999G990D000 heading "Misc-Prd|ps (cs)" +column syn_prd_max_cpups format 999G990D000 heading "Syn-Prd|ps (cs)" +column total_max_cpups format 999G990D000 heading "Total|ps (cs)" +column avg_cpu_load format 990D00 heading "Max CPU|Load %" +break on host_name dup skip page + +with +prd_db_usage as +( select + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + met.rollup_timestamp, + gdm.composite_target_name group_name, + -- tgt.target_guid, + -- tgt.target_name, + -- sum(met.average) sum_avg_cpuusage_ps, + -- sum(met.minimum) sum_min_cpuusage_ps, + sum(met.maximum) sum_max_cpuusage_ps + from + mgmt$target tgt + join mgmt$os_hw_summary hws + on ( hws.host_name = tgt.host_name ) + join mgmt$metric_hourly met + on ( tgt.target_guid = met.target_guid) + join mgmt$group_derived_memberships gdm + on ( tgt.target_guid = gdm.member_target_guid) + where + tgt.target_type = 'oracle_database' + and met.metric_name = 'instance_efficiency' + and met.metric_column = 'cpuusage_ps' + and ( gdm.composite_target_name like '%-MIC-Grp' + or gdm.composite_target_name like '%-PRD-Grp' + ) + and tgt.host_name in ('sdtcsynx4adb01.localwan.net', 'sdtcsynx4adb02.localwan.net') + group by + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + gdm.composite_target_name, + met.rollup_timestamp +), +prd_db_usage_p as +( select + * + from + prd_db_usage + pivot + ( -- sum(sum_avg_cpuusage_ps) as avg_cpups, + -- sum(sum_min_cpuusage_ps) as min_cpups, + sum(sum_max_cpuusage_ps) as max_cpups + for group_name in + ( 'bi-MIC-Grp' as BI_MIC, + --'bi-PRD-Grp' as BI_PRD, + 'dots-MIC-Grp' as DOTS_MIC, 'dots-PRD-Grp' as DOTS_PRD, 'evol-MIC-Grp' as EVOL_MIC, + 'evol-PRD-Grp' as EVAL_PRD, + -- 'infra-MIC-Grp' as INFRA_MIC, + 'infra-PRD-Grp' as INFRA_PRD, 'misc-MIC-Grp' as MISC_MIC, + 'misc-PRD-Grp' as MISC_PRD, + -- 'syn-MIC-Grp' as SYN_MIC, + 'syn-PRD-Grp' as SYN_PRD + ) + ) +) +select + host_name, +-- cpu_count, + virtual, + physical_cpu_count cpu_sockets, + total_cpu_cores cpu_cores, + logical_cpu_count logical_cpus, + to_char(rollup_timestamp, 'DD/MM/YYYY HH24:MI') rollup_timestamp_s, + bi_mic_max_cpups, + dots_mic_max_cpups, + dots_prd_max_cpups, + evol_mic_max_cpups, + eval_prd_max_cpups, + infra_prd_max_cpups, + misc_mic_max_cpups, + misc_prd_max_cpups, + syn_prd_max_cpups, + ( nvl(bi_mic_max_cpups,0) + + nvl(dots_mic_max_cpups,0) + + nvl(dots_prd_max_cpups,0) + + nvl(evol_mic_max_cpups,0) + + nvl(eval_prd_max_cpups,0) + + nvl(infra_prd_max_cpups,0) + + nvl(misc_mic_max_cpups,0) + + nvl(misc_prd_max_cpups,0) + + nvl(syn_prd_max_cpups,0) + ) total_max_cpups, + ( ( nvl(bi_mic_max_cpups,0) + + nvl(dots_mic_max_cpups,0) + + nvl(dots_prd_max_cpups,0) + + nvl(evol_mic_max_cpups,0) + + nvl(eval_prd_max_cpups,0) + + nvl(infra_prd_max_cpups,0) + + nvl(misc_mic_max_cpups,0) + + nvl(misc_prd_max_cpups,0) + + nvl(syn_prd_max_cpups,0) + ) / total_cpu_cores + ) avg_cpu_load +from + prd_db_usage_p +order by + host_name, + rollup_timestamp +; + +clear breaks diff --git a/vdh/oemrep_db_current_size.sql b/vdh/oemrep_db_current_size.sql new file mode 100644 index 0000000..cb9ef23 --- /dev/null +++ b/vdh/oemrep_db_current_size.sql @@ -0,0 +1,63 @@ +-- for each database in the repository get the current allocated and used database size +-- run this as sysman user on the OEM repository database +-- tested with 12c R1 BP1 + +set linesize 300 +set pages 50000 +set tab off +set echo off + +column target_name format a30 heading "Database" +column rollup_timestamp_s format a16 heading "Date" +column used_gb format 9G999G999D99 heading "Used Space (GB)" +column allocated_gb format 9G999G999D99 heading "Allocated Space (GB)" + +with latest_sample +as +( select + target_name, + rollup_timestamp, + metric_column, + maximum + from + ( select + target_name, + rollup_timestamp, + metric_column, + maximum, + row_number() over + ( partition by target_name, metric_column + order by rollup_timestamp desc + ) rn + from + mgmt$metric_hourly + where + target_guid in + ( select + target_guid + from + mgmt$target + where + ( target_type = 'oracle_database' + and type_qualifier3 != 'RACINST' + ) + or target_type = 'rac_database' + ) + and metric_name = 'DATABASE_SIZE' + ) + where + rn = 1 +) +select + target_name, + to_char(rollup_timestamp, 'DD/MM/YYYY HH24:MI') rollup_timestamp_s, + allocated_gb, + used_gb +from + ( latest_sample + ) +pivot + ( max(maximum) for metric_column in ('USED_GB' as USED_GB, 'ALLOCATED_GB' as ALLOCATED_GB)) +order by + target_name +; diff --git a/vdh/oemrep_db_current_size_per_group.sql b/vdh/oemrep_db_current_size_per_group.sql new file mode 100644 index 0000000..ced186d --- /dev/null +++ b/vdh/oemrep_db_current_size_per_group.sql @@ -0,0 +1,98 @@ +-- for each database in the repository get the current allocated and used database size +-- run this as sysman user on the OEM repository database +-- tested with 12c R1 BP1 + +set linesize 300 +set pages 50000 +set tab off +set echo off + +column group_name format a20 heading "Group" +column target_name format a40 heading "Database" +column rollup_timestamp_s format a16 heading "Date" +column used_gb format 9G999G999D99 heading "Used Space (GB)" +column allocated_gb format 9G999G999D99 heading "Allocated Space (GB)" + +break on group_name skip page on report + +compute sum of used_gb on group_name +compute sum of used_gb on report +compute sum of allocated_gb on group_name +compute sum of allocated_gb on report + +with latest_sample +as +( select + target_guid, + target_name, + rollup_timestamp, + metric_column, + maximum + from + ( select + target_guid, + target_name, + rollup_timestamp, + metric_column, + maximum, + row_number() over + ( partition by target_guid, target_name, metric_column + order by rollup_timestamp desc + ) rn + from + mgmt$metric_hourly + where + target_guid in + ( select + target_guid + from + mgmt$target + where + ( target_type = 'oracle_database' + and type_qualifier3 != 'RACINST' + ) + or target_type = 'rac_database' + ) + and metric_name = 'DATABASE_SIZE' + ) + where + rn = 1 +) +select + group_name, + target_name, + to_char(rollup_timestamp, 'DD/MM/YYYY HH24:MI') rollup_timestamp_s, + allocated_gb, + used_gb +from + ( select + nvl(gdm.composite_target_name, 'Unassigned') group_name, + ls.target_name, + ls.rollup_timestamp, + ls.metric_column, + ls.maximum + from + latest_sample ls + left outer join mgmt$group_derived_memberships gdm + on ( ls.target_guid = gdm.member_target_guid) + where + ( gdm.composite_target_guid is null + or gdm.composite_target_guid not in + ( select + cmp.composite_target_guid + from + mgmt$group_derived_memberships cmp + where + cmp.member_target_type = 'composite' + ) + ) + ) +pivot + ( max(maximum) for metric_column in ('USED_GB' as USED_GB, 'ALLOCATED_GB' as ALLOCATED_GB)) +order by + group_name, + target_name +; + +clear breaks +clear computes diff --git a/vdh/oemrep_db_growth_per_group.sql b/vdh/oemrep_db_growth_per_group.sql new file mode 100644 index 0000000..5dc9224 --- /dev/null +++ b/vdh/oemrep_db_growth_per_group.sql @@ -0,0 +1,203 @@ +-- for each database in the repository get the current allocated and used database size +-- run this as sysman user on the OEM repository database +-- tested with 12c R1 BP1 + +set linesize 300 +set pages 50000 +set tab off +set echo off + +column group_name format a20 heading "Group" +column target_name format a30 heading "Database" +column last_collection_s format a16 heading "Last Collection" +column first_collection_s format a16 heading "First Collection" +column last_used_gb format 9G999G990D00 heading "Last Used| Space (GB)" +column last_allocated_gb format 9G999G990D00 heading "Last Allocated| Space (GB)" +column first_used_gb format 9G999G990D00 heading "First Used| Space (GB)" +column first_allocated_gb format 9G999G990D00 heading "First Allocated| Space (GB)" +column days_between format 9990D00 heading "Days Between" +column diff_allocated_gb format 9G999G990D00 heading "Diff Allocated|Space (GB)" +column diff_used_gb format 9G999G990D00 heading "Diff Used Space (GB)" +column diff_allocated_per_day_gb format 9G999G990D00 heading "Daily Diff|Allocated Space (GB)" +column diff_used_per_day_gb format 9G999G990D00 heading "Daily Diff|Used Space (GB)" + + +break on group_name skip page on report + +compute sum of last_used_gb on group_name +compute sum of last_used_gb on report +compute sum of last_allocated_gb on group_name +compute sum of last_allocated_gb on report +compute sum of first_used_gb on group_name +compute sum of first_used_gb on report +compute sum of first_allocated_gb on group_name +compute sum of first_allocated_gb on report +compute sum of diff_used_gb on group_name +compute sum of diff_used_gb on report +compute sum of diff_allocated_gb on group_name +compute sum of diff_allocated_gb on report +compute sum of diff_used_per_day_gb on group_name +compute sum of diff_used_per_day_gb on report +compute sum of diff_allocated_per_day_gb on group_name +compute sum of diff_allocated_per_day_gb on report + + +with +latest_sample +as +( select + target_guid, + target_name, + rollup_timestamp, + metric_column, + maximum + from + ( select + target_guid, + target_name, + rollup_timestamp, + metric_column, + maximum, + row_number() over + ( partition by target_guid, target_name, metric_column + order by rollup_timestamp desc + ) rn + from + mgmt$metric_hourly + where + target_guid in + ( select + target_guid + from + mgmt$target + where + ( target_type = 'oracle_database' + and type_qualifier3 != 'RACINST' + ) + or target_type = 'rac_database' + ) + and metric_name = 'DATABASE_SIZE' + ) + where + rn = 1 +), +first_sample +as +( select + target_guid, + target_name, + rollup_timestamp, + metric_column, + maximum + from + ( select + target_guid, + target_name, + rollup_timestamp, + metric_column, + maximum, + row_number() over + ( partition by target_guid, target_name, metric_column + order by rollup_timestamp asc + ) rn + from + mgmt$metric_daily + where + target_guid in + ( select + target_guid + from + mgmt$target + where + ( target_type = 'oracle_database' + and type_qualifier3 != 'RACINST' + ) + or target_type = 'rac_database' + ) + and metric_name = 'DATABASE_SIZE' + ) + where + rn = 1 +), +latest_sample_p +as +( select + target_guid, + target_name, + rollup_timestamp, + allocated_gb, + used_gb + from + latest_sample ls + pivot + ( max(maximum) for metric_column in ('USED_GB' as USED_GB, 'ALLOCATED_GB' as ALLOCATED_GB)) +), +first_sample_p +as +( select + target_guid, + target_name, + rollup_timestamp, + allocated_gb, + used_gb + from + first_sample fs + pivot + ( max(maximum) for metric_column in ('USED_GB' as USED_GB, 'ALLOCATED_GB' as ALLOCATED_GB)) +), +target_samples +as +( select + lsp.target_guid, + lsp.target_name, + lsp.rollup_timestamp last_collection, + fsp.rollup_timestamp first_collection, + lsp.allocated_gb last_allocated_gb, + fsp.allocated_gb first_allocated_gb, + lsp.used_gb last_used_gb, + fsp.used_gb first_used_gb, + nvl2(fsp.target_guid, (lsp.rollup_timestamp - fsp.rollup_timestamp), null) days_between, + nvl2(fsp.target_guid, (lsp.allocated_gb - fsp.allocated_gb), null) diff_allocated_gb, + nvl2(fsp.target_guid, (lsp.used_gb - fsp.used_gb), null) diff_used_gb, + nvl2(fsp.target_guid, (lsp.allocated_gb - fsp.allocated_gb)/(lsp.rollup_timestamp - fsp.rollup_timestamp), null) diff_allocated_per_day_gb, + nvl2(fsp.target_guid, (lsp.used_gb - fsp.used_gb)/(lsp.rollup_timestamp - fsp.rollup_timestamp), null) diff_used_per_day_gb + from + latest_sample_p lsp + left outer join first_sample_p fsp + on ( lsp.target_guid = fsp.target_guid ) +) +select + nvl(gdm.composite_target_name, 'Unassigned') group_name, + ts.target_name, + to_char(ts.last_collection, 'DD/MM/YYYY HH24:MI') last_collection_s, + to_char(ts.first_collection, 'DD/MM/YYYY HH24:MI') first_collection_s, + ts.last_allocated_gb, + ts.first_allocated_gb, + ts.last_used_gb, + ts.first_used_gb, + ts.days_between, + ts.diff_allocated_gb, + ts.diff_used_gb, + ts.diff_allocated_per_day_gb, + ts.diff_used_per_day_gb +from + target_samples ts + left outer join mgmt$group_derived_memberships gdm + on ( ts.target_guid = gdm.member_target_guid) +where + gdm.composite_target_guid is null + or gdm.composite_target_guid not in + ( select + cmp.composite_target_guid + from + mgmt$group_derived_memberships cmp + where + cmp.member_target_type = 'composite' + ) +order by + group_name, + target_name +; + +clear breaks +clear computes diff --git a/vdh/oemrep_db_mem_per_host_group.sql b/vdh/oemrep_db_mem_per_host_group.sql new file mode 100644 index 0000000..4b43a28 --- /dev/null +++ b/vdh/oemrep_db_mem_per_host_group.sql @@ -0,0 +1,83 @@ +set linesize 300 + +column host_name format a30 heading "Host Name" +column mem format 999G999G999 heading "Physical Mem" +column group_name format a20 heading "Group" +column cpu_count format 999 heading "Num OS CPUs" +column db_instance format a40 heading "DB Instance" +column sga_total format 9G999G999D99 heading "SGA (MB)" +column pga_total format 9G999G999D99 heading "PGA (MB)" + + +break on host_name skip page on group_name skip 1 on mem on cpu_count + +compute sum of sga_total on host_name +compute sum of pga_total on host_name +compute sum of sga_total on group_name +compute sum of pga_total on group_name + + +with pga_total +as +( select + target_guid, + to_number(value) pga_total, + collection_timestamp + from + mgmt$metric_current mcur + where + metric_name = 'memory_usage_sga_pga' + and metric_column = 'pga_total' + and target_type = 'oracle_database' +), +sga_total +as +( select + target_guid, + to_number(value) sga_total, + collection_timestamp + from + mgmt$metric_current mcur + where + metric_name = 'memory_usage_sga_pga' + and metric_column = 'sga_total' + and target_type = 'oracle_database' +) +select + h.host_name, + h.mem, + h.cpu_count, + nvl(gdm.composite_target_name, 'Unassigned') group_name, + t.target_name db_instance, + st.sga_total, + pt.pga_total +from + mgmt$target t + join pga_total pt + on ( t.target_guid = pt.target_guid ) + join sga_total st + on ( t.target_guid = st.target_guid ) + join mgmt$os_hw_summary h + on ( h.host_name = t.host_name ) + left outer join mgmt$group_derived_memberships gdm + on ( t.target_guid = gdm.member_target_guid) +where + t.target_type = 'oracle_database' + and ( gdm.composite_target_guid is null + or gdm.composite_target_guid not in + ( select + cmp.composite_target_guid + from + mgmt$group_derived_memberships cmp + where + cmp.member_target_type = 'composite' + ) + ) +order by + h.host_name, + group_name, + t.target_name +; + +clear breaks +clear computes diff --git a/vdh/oemrep_db_size_per_day.sql b/vdh/oemrep_db_size_per_day.sql new file mode 100644 index 0000000..955b4ee --- /dev/null +++ b/vdh/oemrep_db_size_per_day.sql @@ -0,0 +1,53 @@ +-- for each database in the repository list per day in the past month the allocated and used database size +-- run this as sysman user on the OEM repository database +-- tested with 12c R1 BP1 + +set linesize 300 +set pages 50000 +set tab off +set echo off + +column target_name format a30 heading "Database" +column rollup_timestamp_s format a10 heading "Day" +column used_gb format 9G999G999D99 heading "Used Space (GB)" +column allocated_gb format 9G999G999D99 heading "Allocated Space (GB)" + +break on target_name skip page + +select + target_name, + to_char(rollup_timestamp, 'DD/MM/YYYY') rollup_timestamp_s, + allocated_gb, + used_gb +from + ( select + target_name, + rollup_timestamp, + metric_column, + maximum + from + mgmt$metric_daily + where + target_guid in + ( select + target_guid + from + mgmt$target + where + ( target_type = 'oracle_database' + and type_qualifier3 != 'RACINST' + ) + or target_type = 'rac_database' + ) + and metric_name = 'DATABASE_SIZE' + and trunc(rollup_timestamp) > add_months(sysdate, -1) + ) +pivot + ( max(maximum) for metric_column in ('USED_GB' as USED_GB, 'ALLOCATED_GB' as ALLOCATED_GB)) +order by + target_name, + rollup_timestamp +; + +clear computes +clear breaks diff --git a/vdh/oemrep_db_size_per_month.sql b/vdh/oemrep_db_size_per_month.sql new file mode 100644 index 0000000..2f21de0 --- /dev/null +++ b/vdh/oemrep_db_size_per_month.sql @@ -0,0 +1,131 @@ +-- for each database in the repository, get the allocated and used diskspace at the beginning and end of the month over the past year and calculate the difference between and the (running) average difference +-- run this as sysman user on the OEM repository database +-- tested with 12c R1 BP1 + +set linesize 300 +set pages 50000 +set tab off +set echo off + +column target_name format a30 heading "Database" +column rollup_month_s format a10 heading "Month" +column first_used_gb format 9G999G990D99 heading "First Used Space (GB)" +column last_used_gb format 9G999G990D99 heading "Last Used Space (GB)" +column first_allocated_gb format 9G999G990D99 heading "First Allocated Space (GB)" +column last_allocated_gb format 9G999G990D99 heading "Last Allocated Space (GB)" +column allocated_diff_gb format 99G990D99 heading "Diff Allocated (GB)" +column used_diff_gb format 99G990D99 heading "Diff Used (GB)" +column avg_allocated_diff_gb format 99G990D99 heading "Avg Diff Allocated (GB)" +column avg_used_diff_gb format 99G990D99 heading "Avg Diff used (GB)" + +break on target_name skip page + +with daily_stats +as +( select + target_name, + rollup_timestamp, + allocated_gb, + used_gb + from + ( select + target_name, + rollup_timestamp, + metric_column, + maximum + from + mgmt$metric_daily + where + target_guid in + ( select + target_guid + from + mgmt$target + where + ( target_type = 'oracle_database' + and type_qualifier3 != 'RACINST' + ) + or target_type = 'rac_database' + ) + and metric_name = 'DATABASE_SIZE' + and trunc(rollup_timestamp) > add_months(sysdate, -12) + ) + pivot + ( max(maximum) for metric_column in ('USED_GB' as USED_GB, 'ALLOCATED_GB' as ALLOCATED_GB)) +) +select + target_name, + to_char(rollup_month, 'DD/MM/YYYY') rollup_month_s, + first_allocated_gb, + last_allocated_gb, + (last_allocated_gb - first_allocated_gb) allocated_diff_gb, + avg(last_allocated_gb - first_allocated_gb) over + ( partition by target_name + order by rollup_month + rows between unbounded preceding and current row + ) avg_allocated_diff_gb, + first_used_gb, + last_used_gb, + (last_used_gb - first_used_gb) used_diff_gb, + avg(last_used_gb - first_used_gb) over + ( partition by target_name + order by rollup_month + rows between unbounded preceding and current row + ) avg_used_diff_gb +from + ( select + target_name, + rollup_month, + first_allocated_gb, +-- last_allocated_gb, + lead(first_allocated_gb, 1) over + ( partition by target_name + order by rollup_month + ) last_allocated_gb, + first_used_gb, +-- last_used_gb + lead(first_used_gb, 1) over + ( partition by target_name + order by rollup_month + ) last_used_gb + from + ( select + target_name, + trunc(rollup_timestamp, 'MM') rollup_month, + first_value(allocated_gb) over + ( partition by target_name, trunc(rollup_timestamp, 'MM') + order by rollup_timestamp + rows between unbounded preceding and unbounded following + ) first_allocated_gb, +-- last_value(allocated_gb) over +-- ( partition by target_name, trunc(rollup_timestamp, 'MM') +-- order by rollup_timestamp +-- rows between unbounded preceding and unbounded following +-- ) last_allocated_gb, + first_value(used_gb) over + ( partition by target_name, trunc(rollup_timestamp, 'MM') + order by rollup_timestamp + rows between unbounded preceding and unbounded following + ) first_used_gb +-- last_value(used_gb) over +-- ( partition by target_name, trunc(rollup_timestamp, 'MM') +-- order by rollup_timestamp +-- rows between unbounded preceding and unbounded following +-- ) last_used_gb + from + daily_stats + ) + group by + target_name, + rollup_month, + first_allocated_gb, +-- last_allocated_gb, + first_used_gb +-- last_used_gb + ) +order by + target_name, + rollup_month +; + +clear breaks; diff --git a/vdh/oemrep_db_size_per_week.sql b/vdh/oemrep_db_size_per_week.sql new file mode 100644 index 0000000..4034c51 --- /dev/null +++ b/vdh/oemrep_db_size_per_week.sql @@ -0,0 +1,133 @@ +-- for each database in the repository, get the allocated and used diskspace at the beginning and end of the week over the past month and calculate the difference between and the (running) average difference +-- run this as sysman user on the OEM repository database +-- tested with 12c R1 BP1 + +set linesize 300 +set pages 50000 +set tab off +set echo off + +column target_name format a30 heading "Database" +column rollup_week_s format a10 heading "Week" +column rollup_week_nbr format 99 heading "Nr" +column first_used_gb format 9G999G990D99 heading "First Used Space (GB)" +column last_used_gb format 9G999G990D99 heading "Last Used Space (GB)" +column first_allocated_gb format 9G999G990D99 heading "First Allocated Space (GB)" +column last_allocated_gb format 9G999G990D99 heading "Last Allocated Space (GB)" +column allocated_diff_gb format 99G990D99 heading "Diff Allocated (GB)" +column used_diff_gb format 99G990D99 heading "Diff Used (GB)" +column avg_allocated_diff_gb format 99G990D99 heading "Avg Diff Allocated (GB)" +column avg_used_diff_gb format 99G990D99 heading "Avg Diff used (GB)" + +break on target_name skip page + +with daily_stats +as +( select + target_name, + rollup_timestamp, + allocated_gb, + used_gb + from + ( select + target_name, + rollup_timestamp, + metric_column, + maximum + from + mgmt$metric_daily + where + target_guid in + ( select + target_guid + from + mgmt$target + where + ( target_type = 'oracle_database' + and type_qualifier3 != 'RACINST' + ) + or target_type = 'rac_database' + ) + and metric_name = 'DATABASE_SIZE' + and trunc(rollup_timestamp) > add_months(sysdate, -1) + ) + pivot + ( max(maximum) for metric_column in ('USED_GB' as USED_GB, 'ALLOCATED_GB' as ALLOCATED_GB)) +) +select + target_name, + to_char(rollup_week, 'DD/MM/YYYY') rollup_week_s, + to_char(rollup_week, 'IW') rollup_week_nbr, + first_allocated_gb, + last_allocated_gb, + (last_allocated_gb - first_allocated_gb) allocated_diff_gb, + avg(last_allocated_gb - first_allocated_gb) over + ( partition by target_name + order by rollup_week + rows between unbounded preceding and current row + ) avg_allocated_diff_gb, + first_used_gb, + last_used_gb, + (last_used_gb - first_used_gb) used_diff_gb, + avg(last_used_gb - first_used_gb) over + ( partition by target_name + order by rollup_week + rows between unbounded preceding and current row + ) avg_used_diff_gb +from + ( select + target_name, + rollup_week, + first_allocated_gb, +-- last_allocated_gb, + lead(first_allocated_gb, 1) over + ( partition by target_name + order by rollup_week + ) last_allocated_gb, + first_used_gb, +-- last_used_gb + lead(first_used_gb, 1) over + ( partition by target_name + order by rollup_week + ) last_used_gb + from + ( select + target_name, + trunc(rollup_timestamp, 'IW') rollup_week, + first_value(allocated_gb) over + ( partition by target_name, trunc(rollup_timestamp, 'IW') + order by rollup_timestamp + rows between unbounded preceding and unbounded following + ) first_allocated_gb, +-- last_value(allocated_gb) over +-- ( partition by target_name, trunc(rollup_timestamp, 'MM') +-- order by rollup_timestamp +-- rows between unbounded preceding and unbounded following +-- ) last_allocated_gb, + first_value(used_gb) over + ( partition by target_name, trunc(rollup_timestamp, 'IW') + order by rollup_timestamp + rows between unbounded preceding and unbounded following + ) first_used_gb +-- last_value(used_gb) over +-- ( partition by target_name, trunc(rollup_timestamp, 'MM') +-- order by rollup_timestamp +-- rows between unbounded preceding and unbounded following +-- ) last_used_gb + from + daily_stats + ) + group by + target_name, + rollup_week, + first_allocated_gb, +-- last_allocated_gb, + first_used_gb +-- last_used_gb + ) +order by + target_name, + rollup_week +; + +clear breaks; diff --git a/vdh/oemrep_hist_cpu_runqueue_per_day.sql b/vdh/oemrep_hist_cpu_runqueue_per_day.sql new file mode 100644 index 0000000..693cca9 --- /dev/null +++ b/vdh/oemrep_hist_cpu_runqueue_per_day.sql @@ -0,0 +1,73 @@ +/* historic daily cpu run queue statistics +*/ + +column host_name format a30 heading "Host Name" +column virtual format a7 heading "Virtual|Guest" +column cpu_sockets format 999 heading "Num CPU|Sockets" +column cpu_cores format 999 heading "Num CPU|Cores" +column logical_cpus format 999 heading "Num CPU|Threads" +column rollup_timestamp_s format a16 heading "Date" +column cpuload_1min format 990D00 heading 'CPU Run Queue 1 min|per thread' +column cpuload_5min format 990D00 heading 'CPU Run Queue 5 min|per thread' +column cpuload_15min format 990D00 heading 'CPU Run Queue 15 min|per thread' + +break on host_name dup skip page + +with +cpu_runqueue as +( select + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + met.rollup_timestamp, + -- tgt.target_guid, + -- tgt.target_name, + met.metric_column, + met.maximum + from + mgmt$target tgt + join mgmt$os_hw_summary hws + on ( hws.host_name = tgt.host_name ) + join mgmt$metric_daily met + on ( tgt.target_guid = met.target_guid) + where + tgt.target_type = 'host' + and met.metric_name = 'Load' + and met.metric_column in ('cpuLoad', 'cpuLoad_1min', 'cpuLoad_15min') + and tgt.host_name in ('sdtcsynx4adb01.localwan.net', 'sdtcsynx4adb02.localwan.net') +), +cpu_runqueue_p as +( select + * + from + cpu_runqueue + pivot + ( sum(maximum) + for metric_column in + ( 'cpuLoad' as CPULOAD, + 'cpuLoad_1min' as CPULOAD_1MIN, + 'cpuLoad_15min' as CPULOAD_15MIN + ) + ) +) +select + host_name, + virtual, + physical_cpu_count cpu_sockets, + total_cpu_cores cpu_cores, + logical_cpu_count logical_cpus, + to_char(rollup_timestamp, 'DD/MM/YYYY') rollup_timestamp_s, + cpuload_1min, + cpuload cpuload_5min, + cpuload_15min +from + cpu_runqueue_p +order by + host_name, + rollup_timestamp +; + +clear breaks diff --git a/vdh/oemrep_hist_cpu_runqueue_per_hour.sql b/vdh/oemrep_hist_cpu_runqueue_per_hour.sql new file mode 100644 index 0000000..608b7e2 --- /dev/null +++ b/vdh/oemrep_hist_cpu_runqueue_per_hour.sql @@ -0,0 +1,73 @@ +/* historic hourly cpu run queue (per logical cpu) statistics +*/ + +column host_name format a30 heading "Host Name" +column virtual format a7 heading "Virtual|Guest" +column cpu_sockets format 999 heading "Num CPU|Sockets" +column cpu_cores format 999 heading "Num CPU|Cores" +column logical_cpus format 999 heading "Num CPU|Threads" +column rollup_timestamp_s format a16 heading "Date" +column cpuload_1min format 990D00 heading 'CPU Run Queue 1 min|per thread' +column cpuload_5min format 990D00 heading 'CPU Run Queue 5 min|per thread' +column cpuload_15min format 990D00 heading 'CPU Run Queue 15 min|per thread' + +break on host_name dup skip page + +with +cpu_runqueue as +( select + hws.host_name, +-- hws.cpu_count, + hws.virtual, + hws.physical_cpu_count, + hws.total_cpu_cores, + hws.logical_cpu_count, + met.rollup_timestamp, + -- tgt.target_guid, + -- tgt.target_name, + met.metric_column, + met.maximum + from + mgmt$target tgt + join mgmt$os_hw_summary hws + on ( hws.host_name = tgt.host_name ) + join mgmt$metric_hourly met + on ( tgt.target_guid = met.target_guid) + where + tgt.target_type = 'host' + and met.metric_name = 'Load' + and met.metric_column in ('cpuLoad', 'cpuLoad_1min', 'cpuLoad_15min') + and tgt.host_name in ('sdtcsynx4adb01.localwan.net', 'sdtcsynx4adb02.localwan.net') +), +cpu_runqueue_p as +( select + * + from + cpu_runqueue + pivot + ( sum(maximum) + for metric_column in + ( 'cpuLoad' as CPULOAD, + 'cpuLoad_1min' as CPULOAD_1MIN, + 'cpuLoad_15min' as CPULOAD_15MIN + ) + ) +) +select + host_name, + virtual, + physical_cpu_count cpu_sockets, + total_cpu_cores cpu_cores, + logical_cpu_count logical_cpus, + to_char(rollup_timestamp, 'DD/MM/YYYY HH24:MI') rollup_timestamp_s, + cpuload_1min, + cpuload cpuload_5min, + cpuload_15min +from + cpu_runqueue_p +order by + host_name, + rollup_timestamp +; + +clear breaks diff --git a/vdh/oemrep_sessions_past_month.sql b/vdh/oemrep_sessions_past_month.sql new file mode 100644 index 0000000..8491308 --- /dev/null +++ b/vdh/oemrep_sessions_past_month.sql @@ -0,0 +1,72 @@ +-- for each database in the repository, get the logons and average active sessions for the past month +-- summate these per database as well in case of rac databases +--- +-- run this as sysman user on the OEM repository database +-- tested with 12c R1 BP1 + +set linesize 300 +set pages 50000 +set tab off +set echo off + +column db_name format a40 heading "Database" +column rollup_timestamp_s format a10 heading "Day" +column inst_name format a45 heading "Instance" +column inst_logons format 9G999G999 +column db_logons format 999G999G999 +column inst_avg_active_sess format 9G999G990D99 +column db_avg_active_sess format 999G999G990D99 + +break on db_name skip page on rollup_timestamp_s + +select + db_name, + to_char(rollup_timestamp, 'DD/MM/YYYY') rollup_timestamp_s, + inst_name, + inst_logons, + inst_avg_active_sess, + sum(inst_logons) over + ( partition by db_name, rollup_timestamp + ) db_logons, + sum(inst_avg_active_sess) over + ( partition by db_name, rollup_timestamp + ) db_avg_active_sess +from + ( select + db_name, + rollup_timestamp, + inst_name, + inst_logons, + inst_avg_active_sess + from + ( select + nvl(rac.composite_target_name, met.target_name) db_name, + met.target_name inst_name, + met.rollup_timestamp, + met.metric_column, + met.maximum + from + mgmt$metric_daily met, + mgmt$rac_memberships rac + where + met.target_guid = rac.member_target_guid (+) + and ( ( met.metric_name = 'Database_Resource_Usage' + and met.metric_column = 'logons' + ) + or ( met.metric_name = 'instance_throughput' + and met.metric_column = 'avg_active_sessions' + ) + ) + and met.target_type = 'oracle_database' + and rollup_timestamp >= add_months(trunc(sysdate), - 1) + ) + pivot + ( max(maximum) for metric_column in ('logons' as inst_logons, 'avg_active_sessions' as inst_avg_active_sess)) + ) +order by + db_name, + rollup_timestamp, + inst_name +; + +clear breaks diff --git a/vdh/oemrep_tbs_size_per_week.sql b/vdh/oemrep_tbs_size_per_week.sql new file mode 100644 index 0000000..30d21f8 --- /dev/null +++ b/vdh/oemrep_tbs_size_per_week.sql @@ -0,0 +1,127 @@ +-- for each database in the repository, get the allocated and used size per tablespace at the beginning and end of the week over the past month and calculate the difference between and the (running) average difference +-- run this as sysman user on the OEM repository database +-- tested with 12c R1 BP1 + +set linesize 300 +set pages 50000 +set tab off +set echo off + +column target_name format a30 heading "Database" +column rollup_week_s format a10 heading "Week" +column rollup_week_nbr format 99 heading "Nr" +column tbs_name format a30 heading "Tablespace" +column first_used_mb format 9G999G990D99 heading "First Used|Space (MB)" +column last_used_mb format 9G999G990D99 heading "Last Used|Space (MB)" +column first_allocated_mb format 9G999G990D99 heading "First Allocated|Space (MB)" +column last_allocated_mb format 9G999G990D99 heading "Last Allocated|Space (MB)" +column allocated_diff_mb format 999G990D99 heading "Diff Allocated|(MB)" +column used_diff_mb format 999G990D99 heading "Diff Used|(MB)" +column avg_allocated_diff_mb format 999G990D99 heading "Avg Diff|Allocated (MB)" +column avg_used_diff_mb format 999G990D99 heading "Avg Diff|Used (MB)" + +break on target_name skip page on tbs_name skip 1 + +with daily_stats +as +( select + target_name, + rollup_timestamp, + tbs_name, + allocated_mb, + used_mb + from + ( select + target_name, + rollup_timestamp, + key_value tbs_name, + metric_column, + maximum + from + mgmt$metric_daily + where + target_guid in + ( select + target_guid + from + mgmt$target + where + ( target_type = 'oracle_database' + and type_qualifier3 != 'RACINST' + ) + or target_type = 'rac_database' + ) + and metric_name = 'tbspAllocation' + and trunc(rollup_timestamp) > add_months(sysdate, -1) + ) + pivot + ( max(maximum) for metric_column in ('spaceUsed' as USED_MB, 'spaceAllocated' as ALLOCATED_MB)) +) +select + target_name, + tbs_name, + to_char(rollup_week, 'DD/MM/YYYY') rollup_week_s, + to_char(rollup_week, 'IW') rollup_week_nbr, + first_allocated_mb, + last_allocated_mb, + (last_allocated_mb - first_allocated_mb) allocated_diff_mb, + avg(last_allocated_mb - first_allocated_mb) over + ( partition by target_name, tbs_name + order by rollup_week + rows between unbounded preceding and current row + ) avg_allocated_diff_mb, + first_used_mb, + last_used_mb, + (last_used_mb - first_used_mb) used_diff_mb, + avg(last_used_mb - first_used_mb) over + ( partition by target_name, tbs_name + order by rollup_week + rows between unbounded preceding and current row + ) avg_used_diff_mb +from + ( select + target_name, + tbs_name, + rollup_week, + first_allocated_mb, + lead(first_allocated_mb, 1) over + ( partition by target_name, tbs_name + order by rollup_week + ) last_allocated_mb, + first_used_mb, + lead(first_used_mb, 1) over + ( partition by target_name, tbs_name + order by rollup_week + ) last_used_mb + from + ( select + target_name, + trunc(rollup_timestamp, 'IW') rollup_week, + tbs_name, + first_value(allocated_mb) over + ( partition by target_name, tbs_name, trunc(rollup_timestamp, 'IW') + order by rollup_timestamp + rows between unbounded preceding and unbounded following + ) first_allocated_mb, + first_value(used_mb) over + ( partition by target_name, tbs_name, trunc(rollup_timestamp, 'IW') + order by rollup_timestamp + rows between unbounded preceding and unbounded following + ) first_used_mb + from + daily_stats + ) + group by + target_name, + rollup_week, + tbs_name, + first_allocated_mb, + first_used_mb + ) +order by + target_name, + tbs_name, + rollup_week +; + +clear breaks; diff --git a/vdh/offload_percent.sql b/vdh/offload_percent.sql new file mode 100644 index 0000000..95babe8 --- /dev/null +++ b/vdh/offload_percent.sql @@ -0,0 +1,75 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: offload_percent.sql +-- +-- Purpose: Caclulate % of long running statements that were offloaded. +-- +-- Author: Kerry Osborne +-- +-- Usage: This scripts prompts for three values. +-- +-- sql_text: a piece of a SQL statement like %select col1, col2 from skew% +-- The default is to return all statements. +-- +-- min_etime: the minimum avg. elapsed time in seconds +-- This parameter allows limiting the output to long running statements. +-- The default is 0 which returns all statements. +-- +-- min_avg_lio: the minimum avg. elapsed time in seconds +-- This parameter allows limiting the output to long running statements. +-- The default is 500,000. +-- +-- Description: +-- +-- This script can be used to provide a quick check on whether statements +-- are being offloaded or not on Exadata platforms. +-- +-- It is based on the observation that the IO_CELL_OFFLOAD_ELIGIBLE_BYTES +-- column in V$SQL is only greater than 0 when a statement is executed +-- using a Smart Scan. +-- +-- The default values will aggregate data for all statements that have an +-- avg_lio value of greater than 500,000. You can change this minimum value +-- or further limit the set of statements that will be evaluated by providing +-- a piece of SQL text, 'select%' for example, or setting a minimum avg. +-- elapsed time value. +-- +-- See kerryosborne.oracle-guy.com for additional information. +--------------------------------------------------------------------------------------- +set pagesize 999 +set lines 190 +col sql_text format a70 trunc +col child format 99999 +col execs format 9,999 +col avg_etime format 99,999.99 +col "OFFLOADED_%" format a11 +col avg_px format 999 +col offload for a7 + +select +offloaded+not_offloaded total, offloaded, +lpad(to_char(round(100*offloaded/ (offloaded+not_offloaded),2))||'%',11,' ') "OFFLOADED_%" +from ( +select sum(decode(offload,'Yes',1,0)) offloaded, + sum(decode(offload,'No',1,0)) not_offloaded +from ( +select * from ( +select sql_id, child_number child, plan_hash_value plan_hash, executions execs, +(elapsed_time/1000000)/decode(nvl(executions,0),0,1,executions)/ +decode(px_servers_executions,0,1,px_servers_executions/decode(nvl(executions,0),0,1,executions)) avg_etime, +px_servers_executions/decode(nvl(executions,0),0,1,executions) avg_px, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,'No','Yes') Offload, +decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,0,100*(IO_CELL_OFFLOAD_ELIGIBLE_BYTES-IO_INTERCONNECT_BYTES) +/decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,1,IO_CELL_OFFLOAD_ELIGIBLE_BYTES)) "IO_SAVED_%", +-- buffer_gets lio, +buffer_gets/decode(nvl(executions,0),0,1,executions) avg_lio, +sql_text +from v$sql s +where upper(sql_text) like upper(nvl('&sql_text',sql_text)) +and sql_text not like 'BEGIN :sql_text := %' +and sql_text not like '%IO_CELL_OFFLOAD_ELIGIBLE_BYTES%') +where avg_etime > nvl('&min_etime','0') +) +where avg_lio > nvl('&min_avg_lio','500000') +) +/ diff --git a/vdh/olv_get_db_overview.sql b/vdh/olv_get_db_overview.sql new file mode 100644 index 0000000..e5aac71 --- /dev/null +++ b/vdh/olv_get_db_overview.sql @@ -0,0 +1,589 @@ +/* run this script as a dba user, passing the logfile as parameter + This script has been created to assist in the migrations of the 9i databases at OLV + + @olv_get_db_overview.sql + + this will generate a logfile in the current directory + +*/ + + +set pagesize 9999 +set linesize 150 +set serveroutput on +set trimspool on +set echo off +set feedback 1 + +spool &1 + +--------------------------------------------- DB ---------------------------------------------------------------------- + +column platform_name format a40 +column name format a15 +column db_unique_name format a20 + +select dbid, name, created, log_mode +from v$database; + +--------------------------------------------- DB PARAMETERS ------------------------------------------------------------ +prompt +prompt PARAMETERS +prompt __________ + + +set linesize 180 +set pagesize 9999 + + +COLUMN display_value FORMAT a15 word_wrapped +COLUMN value FORMAT a75 word_wrapped +COLUMN name FORMAT a35 +column type format 999 + +select x.inst_id inst_id,ksppinm name,ksppity type, + ksppstvl value, ksppstdf isdefault +from x$ksppi x, x$ksppcv y +where (x.indx = y.indx) + and ( ksppstdf = 'FALSE' + or translate(ksppinm,'_','#') like '##%' + -- or translate(ksppinm,'_','#') like '#%' + ) +order by x.inst_id, ksppinm; + +--------------------------------------------- DB PROPERTIES ------------------------------------------------------------ +prompt +prompt DB PROPERTIES +prompt _____________ + +column property_value format a40 + +select property_name, property_value +from database_properties +order by property_name; + +--------------------------------------------- INSTALLED OPTIONS -------------------------------------------------------- + +prompt +prompt INSTALLED OPTIONS +prompt _________________ + + +column comp_name format a50 + +select comp_name, version, status +from dba_registry +order by comp_name; + +--------------------------------------------- DB SIZES ------------------------------------------------------------------ +prompt +prompt DB - Sizes +prompt __________ + +column name format a25 heading "tablespace name" +column space_mb format 99g999g990D99 heading "curr df mbytes" +column maxspace_mb format 99g999g990D99 heading "max df mbytes" +column used format 99g999g990D99 heading "used mbytes" +column df_free format 99g999g990D99 heading "curr df free mbytes" +column maxdf_free format 99g999g990D99 heading "max df free mbytes" +column pct_free format 990D99 heading "% free" +column pct_maxfile_free format 990D99 heading "% maxfile free" + +break on report + +compute sum of space_mb on report +compute sum of maxspace_mb on report +compute sum of df_free on report +compute sum of maxdf_free on report +compute sum of used on report + + +select df.tablespace_name name, df.space space_mb, df.maxspace maxspace_mb, (df.space - nvl(fs.freespace,0)) used, + nvl(fs.freespace,0) df_free, (nvl(fs.freespace,0) + df.maxspace - df.space) maxdf_free, + 100 * (nvl(fs.freespace,0) / df.space) pct_free, + 100 * ((nvl(fs.freespace,0) + df.maxspace - df.space) / df.maxspace) pct_maxfile_free +from ( select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 space, sum(greatest(maxbytes,bytes))/1024/1024 maxspace + from dba_temp_files + group by tablespace_name + ) df, + ( select tablespace_name, sum(bytes)/1024/1024 freespace + from dba_free_space + group by tablespace_name + ) fs +where df.tablespace_name = fs.tablespace_name(+) +order by name; + +clear breaks + + +--------------------------------------------- TABLESPACE INFO -------------------------------------------------------------- + +prompt +prompt tablespace info +prompt _______________ + +column max_mb format 9G999G990D99 +column curr_mb format 9G999G990D99 +column free_mb format 9G999G990D99 +column pct_free format 900D99 heading "%FREE" +column NE format 999999D99 +column SSM format a6 +column AT format a8 +column tablespace_name format a20 +column EM format a10 +column contents format a15 +column block_size format 99999 heading bsize + +select A.tablespace_name, block_size, A.contents, extent_management EM, allocation_type AT, + segment_space_management ssm, decode(allocation_type, 'UNIFORM',next_extent/1024,'') NE, + B.max_mb, B.curr_mb, + (B.max_mb - B.curr_mb) + nvl(c.free_mb,0) free_mb, + ((100/B.max_mb)*(B.max_mb - B.curr_mb + nvl(c.free_mb,0))) pct_free +from dba_tablespaces A, + ( select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_temp_files + group by tablespace_name + ) B, + ( select tablespace_name, sum(bytes)/1024/1024 free_mb + from dba_free_space + group by tablespace_name + ) C +where A.tablespace_name = B.tablespace_name + and A.tablespace_name = C.tablespace_name(+) +order by tablespace_name; + +--------------------------------------------- DF DETAILS ------------------------------------------------------------------ + +column curr_mb format 9G999G990D99 +column max_mb format 9G9999990D99 +column incr_mb format 9G999G990D99 +column file_name format a70 +--column file_name format a60 +column tablespace_name format a20 +break on tablespace_name skip 1 +set linesize 150 +set pagesize 999 + +prompt +prompt datafiles info +prompt ______________ + +select A.tablespace_name, file_id, file_name, bytes/1024/1024 curr_mb, autoextensible, + maxbytes/1024/1024 max_mb, (increment_by * block_size)/1024/1024 incr_mb +from ( select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_data_files + union all + select tablespace_name, file_id, file_name, bytes, autoextensible, maxbytes, + increment_by + from dba_temp_files + ) A, dba_tablespaces B +where A.tablespace_name = B.tablespace_name +order by A.tablespace_name, file_name; + +clear breaks; + +--------------------------------------------- OWNER / TBS MATRIX ------------------------------------------------------------------ + +prompt +prompt OWNER / TBS MATRIX +prompt __________________ + +column mb format 9G999G999D99 + +break on owner skip 1 +compute sum of mb on owner + +select owner, tablespace_name, sum(bytes)/1024/1024 mb, count(*) counted +from dba_segments +group by owner, tablespace_name +order by owner, tablespace_name; + +clear breaks + +--------------------------------------------- OBJECTS ------------------------------------------------------------------ + +prompt +prompt OBJECTS +prompt __________________ + +break on owner skip 1 on object_type +compute sum of counted on owner +column counted format 9G999G999G999 + +select owner, object_type, status, count(*) counted +from dba_objects +where owner not in ('DBSNMP','ORACLE_OCM','OUTLN','PUBLIC','SYS','SYSMAN','SYSTEM', 'TSMSYS','WMSYS') +group by owner, object_type, status +order by owner, object_type, status; + +clear breaks + +--------------------------------------------- ONLINE REDO INFO ---------------------------------------------------------------- + +prompt +prompt ONLINE REDO INFO +prompt ________________ + +column member format a55 +column type format a10 +column status format a20 +column arch format a4 + +break on type on thread# nodup skip 1 on type nodup on GROUP# nodup + +select type, A.thread#, A.group#, B.member, A.bytes/1024/1024 mb,A.status, arch +from ( select group#, thread#, bytes, status, archived arch + from v$log + union all + select group#, thread#, bytes, status, archived arch + from v$standby_log + ) A, v$logfile B +where A.group# = B.group# +order by type, A.thread#, A.group#, B.member; + +clear breaks + + +--------------------------------------------- REDO SIZES ------------------------------------------------------------------ + +prompt +prompt REDO STATISTICS +prompt _______________ + +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +column start_day format a22 +column end_day format a22 +column days_between format 99 +column avg_archived_per_day format a13 heading avg_gen + +select to_char(min(dag), 'DD/MM/YYYY HH24:MI:SS') start_day, to_char(max(dag) + 1 - 1/(24*60*60), 'DD/MM/YYYY HH24:MI:SS') end_day, + (max(dag) - min(dag) + 1) days_between, + to_char(avg(gen_archived_size),'9G999G999D99') avg_archived_per_day +from ( select trunc(completion_time) dag, sum(blocks * block_size)/1024/1024 gen_archived_size + from v$archived_log + where standby_dest = 'NO' + and months_between(trunc(sysdate), trunc(completion_time)) <= 1 + and completion_time < trunc(sysdate) + group by trunc(completion_time) + ); + +/* +archived redo over the (max) last 10 days +*/ +column day_arch_size format 99G999D99 +column day_arch# format 999G999 +column graph format a15 +column dayname format a12 +column day format a12 + +select to_char(day, 'DD/MM/YYYY') day, to_char(day,'DAY') dayname, day_arch_size, day_arch#, graph +from ( select trunc(completion_time) day, sum(blocks * block_size)/1024/1024 day_arch_size, count(*) day_arch#, + rpad('*',floor(count(*)/10),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 10 + group by trunc(completion_time) + order by day + ); + +/* +archived redo per hour over the (max) last 2 days +*/ +column hour_arch_size format 99G999D99 +column hour_arch# format 9G999 +column graph format a15 +column dayname format a12 +column dayhour format a18 +break on dayname skip 1 + +select to_char(dayhour,'DAY') dayname, to_char(dayhour, 'DD/MM/YYYY HH24:MI') dayhour, hour_arch_size, hour_arch#, graph +from ( select trunc(completion_time, 'HH') dayhour, sum(blocks * block_size)/1024/1024 hour_arch_size, count(*) hour_arch#, + rpad('*',floor(count(*)/4),'*') graph + from v$archived_log + where standby_dest = 'NO' + and completion_time >= trunc(sysdate) - 2 + group by trunc(completion_time, 'HH') + order by dayhour + ); + +clear breaks; + +--------------------------------------------- USERS ------------------------------------------------------------------ + +prompt +prompt USERS +prompt _____ + + +column username format a20 +column password format a20 +column account_status format a15 +column default_tablespace format a20 +column temporary_tablespace format a20 +column profile format a15 + +select username, password, account_status, lock_date, expiry_date, default_tablespace, temporary_tablespace, created, profile +from dba_users +order by username; + +--------------------------------------------- TS QUOTA ------------------------------------------------------------------ + +prompt +prompt TS QUOTA +prompt __________ +prompt(0 = unlimited) + +column mb format 9G999G999D99 + +select username, tablespace_name, (decode (max_bytes, -1,0, max_bytes))/1024/1024 mb +from dba_ts_quotas +order by username, tablespace_name; + +--------------------------------------------- PRIVILEGES ------------------------------------------------------------------ + +prompt +prompt SYS PRIVILEGES +prompt ______________ + +column grantee format a30 +break on grantee skip 1 + +select grantee, privilege, admin_option +from dba_sys_privs +where grantee not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP' + ) +order by grantee, privilege; + + + +clear breaks + +prompt +prompt ROLE PRIVILEGES +prompt _______________ + +column grantee format a30 +break on grantee skip 1 + +select grantee, granted_role, admin_option, default_role +from dba_role_privs +where grantee not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP' + ) +order by grantee, granted_role; + +clear breaks + +prompt +prompt OBJECT PRIVILEGES +prompt _________________ + +column grantee format a30 +column privilege format a30 + +break on grantee skip 1 + +select grantee, owner, table_name, privilege, grantable, hierarchy +from dba_tab_privs +where grantee not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP' + ) +order by grantee, owner, table_name, privilege; + +clear breaks + +prompt +prompt NON STANDARD ROLES +prompt __________________ + +column grantee format a30 +column privilege format a30 + +break on grantee skip 1 + +select role, password_required +from dba_roles +where role not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP' + ) +order by role; + +clear breaks + +--------------------------------------------- SYNONYMS ------------------------------------------------------------------ + +prompt +prompt SYNONYMS +prompt _________ + +break on owner skip 1 + +select owner, synonym_name, table_owner, table_name +from dba_synonyms +where owner not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP' + ) +order by owner, synonym_name; + +clear breaks + +prompt +prompt NON DEFAULT PUBLIC SYNONYMS +prompt ____________________________ + +break on table_owner skip 1 + +select table_owner, table_name, synonym_name +from dba_synonyms +where owner = 'PUBLIC' + and table_owner not in + ( 'SYS', 'SYSTEM', 'TSMSYS', 'WMSYS','SYSMAN', 'OUTLN', 'DBSNMP', 'PERFSTAT', 'UPTIME', + 'ANALYZETHIS', 'AQ_ADMINISTRATOR_ROLE', 'AQ_USER_ROLE', 'DBA', 'DELETE_CATALOG_ROLE', + 'EXECUTE_CATALOG_ROLE', 'EXP_FULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', + 'IMP_FULL_DATABASE', 'LOGSTDBY_ADMINISTRATOR', 'OEM_MONITOR', 'OUTLN', 'PANDORA', 'PERFSTAT', + 'PUBLIC', 'SELECT_CATALOG_ROLE', 'SYS', 'SYSTEM', 'WMSYS', 'WM_ADMIN_ROLE', 'TIVOLI_ROLE', + 'CONNECT', 'JAVADEBUGPRIV', 'RECOVERY_CATALOG_OWNER', 'RESOURCE', 'TIVOLI', 'JAVASYSPRIV', + 'GLOBAL_AQ_USER_ROLE', 'JAVAUSERPRIV', 'JAVAIDPRIV', 'EJBCLIENT', 'JAVA_ADMIN', 'JAVA_DEPLOY', + 'MGMT_USER','MGMT_VIEW','OEM_ADVISOR','ORACLE_OCM','SCHEDULER_ADMIN','DIP' + ) +order by table_owner, table_name; + +clear breaks + +--------------------------------------------- JOBS ------------------------------------------------------------------ + +prompt +prompt JOBS +prompt ____ + +column what format a60 word_wrapped +column interval format a30 word_wrapped + +break on job skip 1 + +select job, what, interval, failures, broken, schema_user +from dba_jobs; + +clear breaks + +--------------------------------------------- SCHEDULER ------------------------------------------------------------------ + +prompt +prompt SCHEDULER +prompt _________ + +clear breaks +set pagesize 999 + +set linesize 150 +column owner format a15 +column state format a10 +column failure_count format 999 heading FC +column run_count format 9999 heading RC +column job_name format a28 +column next_run_date format a35 +column last_start_date format a35 + +select owner, job_name, state, run_count, failure_count, + to_char(last_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') last_start_date, + to_char(next_run_date, 'DD/MM/YYYY HH24:MI:SS TZR') next_run_date +from dba_scheduler_jobs +order by owner, job_name; + +clear breaks +set linesize 150 +column log_date format a20 +column req_start_date format a35 +column actual_start_date format a35 +column run_duration format a14 +column status format a10 +column owner format a15 +column job_name format a28 +break on owner skip 1 on job_name skip 1 + +select owner, job_name, -- to_char(log_date, 'DD/MM/YYYY HH24:MI:SS') log_date, + to_char(req_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') req_start_date, + to_char(actual_start_date, 'DD/MM/YYYY HH24:MI:SS TZR') actual_start_date, + run_duration, status +from ( select owner, job_name, log_date, req_start_date, actual_start_date, + run_duration, status, + row_number () over + ( partition by owner, job_name + order by log_date desc + ) rn + from dba_scheduler_job_run_details + ) jrd +where rn <= 10 +order by owner, job_name, jrd.log_date desc; + +clear breaks +set linesize 150 +column start_date format a20 +column run_duration format a14 +column status format a10 +column owner format a15 +column job_name format a30 + +select to_char(actual_start_date, 'DD/MM/YYYY HH24:MI:SS') start_date, + owner, job_name, run_duration, status +from ( select actual_start_date, owner, job_name, run_duration, status + from dba_scheduler_job_run_details + order by actual_start_date desc + ) jrd +where rownum <= 10; + + +--------------------------------------------- THE END ------------------------------------------------------------------ +spool off + diff --git a/vdh/olv_oazis_batch_sessions.sql b/vdh/olv_oazis_batch_sessions.sql new file mode 100644 index 0000000..65e68aa --- /dev/null +++ b/vdh/olv_oazis_batch_sessions.sql @@ -0,0 +1,13 @@ +column machine format a20 +column osuser format a15 + +select + sid, serial#, machine, osuser, to_char(logon_time, 'DD/MM/YYYY HH24:MI') logon_time, + last_call_et, sql_id, sql_trace, sql_trace_binds, sql_trace_waits, sql_trace_plan_stats +from + v$session +where + service_name = 'oazis_batch' +order by + v$session.logon_time desc +; diff --git a/vdh/olv_oazis_tracing_trigger.sql b/vdh/olv_oazis_tracing_trigger.sql new file mode 100644 index 0000000..d028919 --- /dev/null +++ b/vdh/olv_oazis_tracing_trigger.sql @@ -0,0 +1,29 @@ +create or replace trigger trace_facturatie +after logon on database +BEGIN + + if ( sysdate between + to_date('19/07/2012 12:00','DD/MM/YYYY HH24:MI') + and to_date('19/07/2012 17:00','DD/MM/YYYY HH24:MI') + and ( sys_context('USERENV', 'IP_ADDRESS') = '172.16.254.102' + or sys_context('USERENV', 'IP_ADDRESS') = '172.16.247.15' + ) + and upper(trim(sys_context('USERENV', 'OS_USER'))) = 'FACTURATIE' + ) + then + + dbms_monitor.session_trace_enable + ( waits => true, + binds => true, + plan_stat => 'ALL_EXECUTIONS' + ); + + end if; + +EXCEPTION + when others + then + null; + +END; +/ \ No newline at end of file diff --git a/vdh/olvz_cursors_check.sql b/vdh/olvz_cursors_check.sql new file mode 100644 index 0000000..41aae9f --- /dev/null +++ b/vdh/olvz_cursors_check.sql @@ -0,0 +1,223 @@ +set echo off +set pages 9999 +set linesize 200 + +column dcol new_value spoolname noprint + +select db_unique_name || '_' || to_char(sysdate,'YYYYMMDDHH24MISS') dcol from v$database; + +set feedback on + +spool &spoolname._ora04031_monitoring.txt + +prompt indications of shared pool space pressure +prompt ----------------------------------------- + +select * +from ( select to_char(first_value(run_date) over (partition by name order by run_date rows between unbounded preceding and unbounded following), 'DD/MM/YYYY HH24:MI') start_run_date, + to_char(last_value(run_date) over (partition by name order by run_date rows between unbounded preceding and unbounded following), 'DD/MM/YYYY HH24:MI') end_run_date, + name, + ( nvl(last_value(value) over (partition by name order by run_date rows between unbounded preceding and unbounded following),0) + - nvl(first_value(value) over (partition by name order by run_date rows between unbounded preceding and unbounded following),0) + ) delta + from sp_pressure + ) +group by start_run_date, end_run_date, name, delta +order by name; + +prompt sizes of selected shared pool heaps +prompt ----------------------------------- + +column mb format 9G999G999D99 + +select name, bytes/1024/1024 MB +from v$sgastat +where pool = 'shared pool' + and name in ('KGLH0', 'free memory', 'SQLA'); + + +prompt KGLH0 / PCUR chunk information +prompt ------------------------------ + +column kb format 999G999G999D99 +column max_kb format 999G999G999D99 +column kb format 9G999G999D99 +column max_kb format 999G999G999D99 + +select substr(ksmchcom, 1, instr(ksmchcom, '^') -1) subpool, + ksmchcls, sum(ksmchsiz)/1024 KB, max(ksmchsiz)/1024 max_kb +from x$ksmsp +where ksmchcom like 'KGLH0%' + or ksmchcom like 'PCUR%' +group by substr(ksmchcom, 1, instr(ksmchcom, '^') -1), ksmchcls +order by 1, 2; + +prompt top sql by sharable mem +prompt ----------------------- + +column sharable_mem format 9G999G999G999 +column users_opening format 9G999 heading "USERS|OPENING" +column executions format 999G999 +column version_count format 99G999 heading "VERSION|COUNT" +column loaded_versions format 99G999 heading "LOADED|VERSIONS" +column open_versions format 99G999 heading "OPEN|VERSIONS" +column kept_versions format 99G999 heading "KEPT|VERSIONS" +column parsing_user_id format 999 heading "P USER" + +select * +from ( select sql_id, substr(sql_text,1,40) stm, sharable_mem, users_opening, + executions, version_count, loaded_versions, open_versions, + kept_versions, parsing_user_id + from v$sqlarea + order by sharable_mem desc + ) +where rownum <= 10; + +prompt top sql by version_count +prompt ------------------------ + +column sharable_mem format 9G999G999G999 +column persistent_mem format 9G999G999G999 +column sql_fulltext format a100 word_wrapped + +select * +from ( select sql_id, version_count, loaded_versions, sharable_mem, persistent_mem, runtime_mem, optimizer_mode, invalidations, sql_fulltext + from v$sqlarea + order by version_count desc + ) +where rownum <= 10; + +prompt mismatch reasons for top sql by number of child cursors +prompt ------------------------------------------------------- + +set linesize 200 +break on sql_id skip 1 + +select * +from ( select a.*, + dense_rank() over (order by nbr_child_cursors desc) dr + from ( select sql_id, child_number, sql_type_mismatch, optimizer_mismatch, outline_mismatch, stats_row_mismatch, literal_mismatch, + force_hard_parse, explain_plan_cursor, buffered_dml_mismatch, pdml_env_mismatch, inst_drtld_mismatch, slave_qc_mismatch, + typecheck_mismatch, auth_check_mismatch, bind_mismatch, describe_mismatch, language_mismatch, translation_mismatch, + bind_equiv_failure, insuff_privs, insuff_privs_rem, remote_trans_mismatch, logminer_session_mismatch, incomp_ltrl_mismatch, + overlap_time_mismatch, edition_mismatch, mv_query_gen_mismatch, user_bind_peek_mismatch, typchk_dep_mismatch, no_trigger_mismatch, + flashback_cursor, anydata_transformation, pddl_env_mismatch, top_level_rpi_cursor, different_long_length, logical_standby_apply, + diff_call_durn, bind_uacs_diff, plsql_cmp_switchs_diff, cursor_parts_mismatch, stb_object_mismatch, crossedition_trigger_mismatch, + pq_slave_mismatch, top_level_ddl_mismatch, multi_px_mismatch, bind_peeked_pq_mismatch, mv_rewrite_mismatch, roll_invalid_mismatch, + optimizer_mode_mismatch, px_mismatch, mv_staleobj_mismatch, flashback_table_mismatch, litrep_comp_mismatch, plsql_debug, + load_optimizer_stats, acl_mismatch, flashback_archive_mismatch, lock_user_schema_failed, remote_mapping_mismatch, + load_runtime_heap_failed, hash_match_failed, purged_cursor, bind_length_upgradeable, use_feedback_stats, + count(*) over (partition by sql_id) nbr_child_cursors + from v$sql_shared_cursor + ) A + ) +where dr <= 5 +order by sql_id, child_number; + +clear breaks + +prompt counts per mismatch reason +prompt --------------------------- + +set linesize 2000 + +select +sum(decode(sql_type_mismatch, 'Y', 1, 0)) sql_type_mismatch +,sum(decode(optimizer_mismatch, 'Y', 1, 0)) optimizer_mismatch +,sum(decode(outline_mismatch, 'Y', 1, 0)) outline_mismatch +,sum(decode(stats_row_mismatch, 'Y', 1, 0)) stats_row_mismatch +,sum(decode(literal_mismatch, 'Y', 1, 0)) literal_mismatch +,sum(decode(force_hard_parse, 'Y', 1, 0)) force_hard_parse +,sum(decode(explain_plan_cursor, 'Y', 1, 0)) explain_plan_cursor +,sum(decode(buffered_dml_mismatch, 'Y', 1, 0)) buffered_dml_mismatch +,sum(decode(pdml_env_mismatch, 'Y', 1, 0)) pdml_env_mismatch +,sum(decode(inst_drtld_mismatch, 'Y', 1, 0)) inst_drtld_mismatch +,sum(decode(slave_qc_mismatch, 'Y', 1, 0)) slave_qc_mismatch +,sum(decode(typecheck_mismatch, 'Y', 1, 0)) typecheck_mismatch +,sum(decode(auth_check_mismatch, 'Y', 1, 0)) auth_check_mismatch +,sum(decode(bind_mismatch, 'Y', 1, 0)) bind_mismatch +,sum(decode(describe_mismatch, 'Y', 1, 0)) describe_mismatch +,sum(decode(language_mismatch, 'Y', 1, 0)) language_mismatch +,sum(decode(translation_mismatch, 'Y', 1, 0)) translation_mismatch +,sum(decode(bind_equiv_failure, 'Y', 1, 0)) bind_equiv_failure +,sum(decode(insuff_privs, 'Y', 1, 0)) insuff_privs +,sum(decode(insuff_privs_rem, 'Y', 1, 0)) insuff_privs_rem +,sum(decode(remote_trans_mismatch, 'Y', 1, 0)) remote_trans_mismatch +,sum(decode(logminer_session_mismatch, 'Y', 1, 0)) logminer_session_mismatch +,sum(decode(incomp_ltrl_mismatch, 'Y', 1, 0)) incomp_ltrl_mismatch +,sum(decode(overlap_time_mismatch, 'Y', 1, 0)) overlap_time_mismatch +,sum(decode(edition_mismatch, 'Y', 1, 0)) edition_mismatch +,sum(decode(mv_query_gen_mismatch, 'Y', 1, 0)) mv_query_gen_mismatch +,sum(decode(user_bind_peek_mismatch, 'Y', 1, 0)) user_bind_peek_mismatch +,sum(decode(typchk_dep_mismatch, 'Y', 1, 0)) typchk_dep_mismatch +,sum(decode(no_trigger_mismatch, 'Y', 1, 0)) no_trigger_mismatch +,sum(decode(flashback_cursor, 'Y', 1, 0)) flashback_cursor +,sum(decode(anydata_transformation, 'Y', 1, 0)) anydata_transformation +,sum(decode(pddl_env_mismatch, 'Y', 1, 0)) pddl_env_mismatch +,sum(decode(top_level_rpi_cursor, 'Y', 1, 0)) top_level_rpi_cursor +,sum(decode(different_long_length, 'Y', 1, 0)) different_long_length +,sum(decode(logical_standby_apply, 'Y', 1, 0)) logical_standby_apply +,sum(decode(diff_call_durn, 'Y', 1, 0)) diff_call_durn +,sum(decode(bind_uacs_diff, 'Y', 1, 0)) bind_uacs_diff +,sum(decode(plsql_cmp_switchs_diff, 'Y', 1, 0)) plsql_cmp_switchs_diff +,sum(decode(cursor_parts_mismatch, 'Y', 1, 0)) cursor_parts_mismatch +,sum(decode(stb_object_mismatch, 'Y', 1, 0)) stb_object_mismatch +,sum(decode(crossedition_trigger_mismatch, 'Y', 1, 0)) crossedition_trigger_mismatch +,sum(decode(pq_slave_mismatch, 'Y', 1, 0)) pq_slave_mismatch +,sum(decode(top_level_ddl_mismatch, 'Y', 1, 0)) top_level_ddl_mismatch +,sum(decode(multi_px_mismatch, 'Y', 1, 0)) multi_px_mismatch +,sum(decode(bind_peeked_pq_mismatch, 'Y', 1, 0)) bind_peeked_pq_mismatch +,sum(decode(mv_rewrite_mismatch, 'Y', 1, 0)) mv_rewrite_mismatch +,sum(decode(roll_invalid_mismatch, 'Y', 1, 0)) roll_invalid_mismatch +,sum(decode(optimizer_mode_mismatch, 'Y', 1, 0)) optimizer_mode_mismatch +,sum(decode(px_mismatch, 'Y', 1, 0)) px_mismatch +,sum(decode(mv_staleobj_mismatch, 'Y', 1, 0)) mv_staleobj_mismatch +,sum(decode(flashback_table_mismatch, 'Y', 1, 0)) flashback_table_mismatch +,sum(decode(litrep_comp_mismatch, 'Y', 1, 0)) litrep_comp_mismatch +,sum(decode(plsql_debug, 'Y', 1, 0)) plsql_debug +,sum(decode(load_optimizer_stats, 'Y', 1, 0)) load_optimizer_stats +,sum(decode(acl_mismatch, 'Y', 1, 0)) acl_mismatch +,sum(decode(flashback_archive_mismatch, 'Y', 1, 0)) flashback_archive_mismatch +,sum(decode(lock_user_schema_failed, 'Y', 1, 0)) lock_user_schema_failed +,sum(decode(remote_mapping_mismatch, 'Y', 1, 0)) remote_mapping_mismatch +,sum(decode(load_runtime_heap_failed, 'Y', 1, 0)) load_runtime_heap_failed +,sum(decode(hash_match_failed, 'Y', 1, 0)) hash_match_failed +,sum(decode(purged_cursor, 'Y', 1, 0)) purged_cursor +,sum(decode(bind_length_upgradeable, 'Y', 1, 0)) bind_length_upgradeable +,sum(decode(use_feedback_stats, 'Y', 1, 0)) use_feedback_stats +from v$sql_shared_cursor; + + +prompt average cursors per session +prompt --------------------------- + +column avg_per_session format 9G999D99 + +select avg(counted) avg_per_session +from ( select count(*) counted + from v$open_cursor + group by sid + ); + +prompt average cursors per session split by cursor type +prompt ------------------------------------------------ + +column avg_per_session format 9G999D99 + +select cursor_type, (count(*)/(select count(distinct sid) from v$open_cursor)) avg_per_session +from v$open_cursor +group by cursor_type; + +prompt sharable memory per namespace, type and status +prompt ---------------------------------------------- + +column namespace format a35 +column type format a35 +column kb format 999G999G999D99 + +select namespace, type, status, sum(sharable_mem)/1024 KB +from v$db_object_cache +group by namespace, type, status +order by namespace, type, status; + +spool off diff --git a/vdh/online_logfiles_info.sql b/vdh/online_logfiles_info.sql new file mode 100644 index 0000000..f0bcf6a --- /dev/null +++ b/vdh/online_logfiles_info.sql @@ -0,0 +1,22 @@ +set pagesize 9999 +set linesize 150 +column member format a80 +column type format a10 +column status format a10 +column arch format a4 +column thread# format 99 heading THREAD# +column group# format 999 heading GROUP# + +break on type on thread# nodup skip 1 on type nodup on GROUP# nodup + +select type, A.thread#, A.group#, B.member, A.bytes/1024/1024 mb,A.status, arch +from ( select group#, thread#, bytes, status, archived arch + from v$log + union all + select group#, thread#, bytes, status, archived arch + from v$standby_log + ) A, v$logfile B +where A.group# = B.group# +order by type, A.thread#, A.group#, B.member; + +clear breaks diff --git a/vdh/ora04031_monitoring.sh b/vdh/ora04031_monitoring.sh new file mode 100644 index 0000000..fd76471 --- /dev/null +++ b/vdh/ora04031_monitoring.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# +export ORACLE_HOME=/opt/oracle/oraglims/product/11.2.0.2/db_1 +export ORACLE_SID=glims +SPOOLFILE=${ORACLE_SID}_`date '+%Y%m%d%H%M%S'`_ora04031_monitoring.txt + +cd /home/oraglims/uptime +$ORACLE_HOME/bin/sqlplus / as sysdba @/home/oraglims/uptime/ora04031_monitoring.sql ${SPOOLFILE} + +mutt -s "${ORACLE_SID} ora-04031 monitoring" -a ${SPOOLFILE} freek.dhooge@uptime.be 50 + and (dfu.df_curr_size - dfu.df_used) > 10 * 1024 * 1024 * 1024 +order by + df_headspace_bytes desc +; + +clear breaks +clear computes diff --git a/vdh/overview.sql b/vdh/overview.sql new file mode 100644 index 0000000..f61e656 --- /dev/null +++ b/vdh/overview.sql @@ -0,0 +1,173 @@ +column xdb new_value xxdb noprint +select to_char(sysdate,'YYYYMMDDhh24miss')||'_'||name xdb from v$database; + +set pagesize 9999 +set linesize 180 +set feedback on +set trimspool on +set echo off + +spool overview_&&xxdb..txt + +PROMPT instance_name: +PROMPT +select instance_name from v$instance; + +PROMPT date report: +PROMPT +select to_char(sysdate, 'DD/MM/YYYY HH24:MI:SS') from dual; +PROMPT + +PROMPT oracle version: +PROMPT +select banner from v$version; +PROMPT + +PROMPT +PROMPT tablespace used and free space +PROMPT +column dummy noprint +column pct_used format 999.9 heading "%|Used" +column name format a16 heading "Tablespace Name" +column Kbytes format 999,999,999 heading "KBytes" +column used format 999,999,999 heading "Used" +column free format 999,999,999 heading "Free" +column largest format 999,999,999 heading "Largest" +column max_size format 999,999,999 heading "MaxPoss|Kbytes" +column pct_max_used format 999.9 heading "%|Max|Used" +break on report +compute sum of kbytes on report +compute sum of free on report +compute sum of used on report + +select nvl(b.tablespace_name, + nvl(a.tablespace_name,'UNKOWN')) name, + kbytes_alloc kbytes, + kbytes_alloc-nvl(kbytes_free,0) used, + nvl(kbytes_free,0) free, + ((kbytes_alloc-nvl(kbytes_free,0))/ + kbytes_alloc)*100 pct_used, + nvl(largest,0) largest +from ( select sum(bytes)/1024 Kbytes_free, + max(bytes)/1024 largest, + tablespace_name + from sys.dba_free_space + group by tablespace_name ) a, + ( select sum(bytes)/1024 Kbytes_alloc, + tablespace_name + from sys.dba_data_files + group by tablespace_name )b +where a.tablespace_name (+) = b.tablespace_name +order by 1; + + +PROMPT +PROMPT segment within 20 extents of their max extents +PROMPT +select tablespace_name, owner, segment_type, segment_name, extents, + max_extents - extents delta +from dba_segments +where max_extents <= extents + 20 +order by tablespace_name, owner, segment_type; + +PROMPT +PROMPT segments that can't allocate their next extent +PROMPT +select A.tablespace_name, max_bytes_free/1024, max_next/1024, (max_next - max_bytes_free)/1024 delta +from ( select tablespace_name, max(bytes) max_bytes_free + from dba_free_space + group by tablespace_name + ) A, + ( select tablespace_name, max(next_extent) max_next + from dba_segments + group by tablespace_name + ) B +where A.tablespace_name = B.tablespace_name + and B.max_next >= A.max_bytes_free +order by 1; + +PROMPT +PROMPT non system objects in system tablespace +PROMPT +select owner, count(*) counted, sum(bytes)/1024 kb_used +from dba_segments +where tablespace_name = 'SYSTEM' + and owner not in ('SYSTEM', 'SYS') +group by owner +order by owner; + +PROMPT +PROMPT permanent objects in temporary tablespace +PROMPT +select tablespace_name, segment_type, count(*) counted +from dba_segments +where tablespace_name in + ( select tablespace_name + from dba_tablespaces + where contents = 'TEMPORARY' + ) + and segment_type != 'TEMPORARY' +group by tablespace_name, segment_type +order by tablespace_name, segment_type; + +PROMPT +PROMPT archived redo logs per day (max last 10 days) +PROMPT +column gen_archived_size format 9G999G999D99 + +select to_char(completion_time, 'DD/MM/YYYY') day, count(*) switches, + sum(blocks * block_size)/1024/1024 gen_archived_size +from v$archived_log +where first_time >= sysdate - 10 +group by trunc(completion_time), to_char(completion_time, 'DD/MM/YYYY') +order by trunc(completion_time); + +PROMPT +PROMPT average per day +PROMPT +select to_char(min(dag), 'DD/MM/YYYY HH24:MI:SS') start_day, + to_char(max(dag) + 1 - 1/(24*60*60), 'DD/MM/YYYY HH24:MI:SS') end_day, + (max(dag) - min(dag) + 1) days_between, + to_char(avg(gen_archived_size),'9G999G999D99') avg_archived_per_day +from ( select trunc(completion_time) dag, + sum(blocks * block_size)/1024/1024 gen_archived_size + from v$archived_log + where months_between(trunc(sysdate), trunc(completion_time)) <= 1 + and completion_time < trunc(sysdate) + group by trunc(completion_time) + ); + +PROMPT +PROMPT invalid objects +PROMPT +select owner, object_type, count(*) counted +from dba_objects +where status = 'INVALID' +group by owner, object_type +order by 1,2; + +PROMPT +PROMPT overview db users: +PROMPT +column temporary_tablespace format a30 heading T_TBS +column default_tablespace format a30 heading D_TBS +column account_status format a15 word_wrapped heading STATUS +colum username format a30 +column created format a12 +column dba format a3 +column ops$ format a4 +select A.username, default_tablespace, temporary_tablespace, + to_char(created, 'DD/MM/YYYY') created, + decode(password, 'EXTERNAL', 'Y', 'N') as OPS$, + decode(B.granted_role, 'DBA', 'Y', 'N') as dba, + account_status +from dba_users A, + ( select grantee, granted_role + from dba_role_privs + where granted_role = 'DBA' + ) B +where A.username = B.grantee(+) +order by A.created; + +spool off +exit \ No newline at end of file diff --git a/vdh/p_rebuild_indexes_to_ts.sql b/vdh/p_rebuild_indexes_to_ts.sql new file mode 100644 index 0000000..aa772d5 --- /dev/null +++ b/vdh/p_rebuild_indexes_to_ts.sql @@ -0,0 +1,44 @@ +create or replace procedure + p_rebuild_indexes_to_ts (schema IN dba_extents.owner%type, + ts_name IN dba_tablespaces.tablespace_name%type) + as + v_cursorid integer; + status integer; + cursor c_dba_extents is + select owner,segment_name, + tablespace_name,count(*) + from dba_extents + where owner=upper(schema) + and segment_type='INDEX' + group by owner,segment_name,tablespace_name; + v_dba_extents c_dba_extents%rowtype; + begin + open c_dba_extents; + v_cursorid:=dbms_sql.open_cursor; + fetch c_dba_extents into v_dba_extents; + if (c_dba_extents%notfound) then + dbms_output.put_line('Owner '|| + upper(schema)||' : '|| + 'Noindexes were to be found for this user.'); + end if; + while ( c_dba_extents%found ) loop + dbms_sql.parse(v_cursorid, + 'ALTER INDEX '||v_dba_extents.owner||'.'|| + v_dba_extents.segment_name|| + ' REBUILD TABLESPACE '||ts_name, + dbms_sql.native); + status:=dbms_sql.execute(v_cursorid); + dbms_output.put_line('Index Rebuild: '|| + v_dba_extents.owner||'.'|| + v_dba_extents.segment_name||' '||ts_name); + fetch c_dba_extents into v_dba_extents; + end loop; + close c_dba_extents; + dbms_sql.close_cursor(v_cursorid); + exception + when others then + dbms_output.put_line('Error...... '); + dbms_sql.close_cursor(v_cursorid); + raise; + end p_rebuild_indexes_to_ts; +/ diff --git a/vdh/parallel_query_stats.sql b/vdh/parallel_query_stats.sql new file mode 100644 index 0000000..8242161 --- /dev/null +++ b/vdh/parallel_query_stats.sql @@ -0,0 +1,61 @@ +set linesize 200 +set pages 9999 + +column bdummy noprint + +col qcinst_id format 999 heading "Coordinator|Instance" +col qcsid format 9999 heading "Coordinator|Sid" +col qcserial# format 99999 heading "Coordinator|Serial#" +col username format a20 heading "Username" +col sql_id format a20 heading "SQL id" +col resource_consumer_group format a30 heading "Consumer Group" +col inst_id format 999 heading "Slave|Instance" +col server_group format 9999 heading "Slave|Group" +col server_set format 9999 heading "Slave|Set" +col req_degree format 9999 heading "Req|Degree" +col degree format 9999 heading "Degree" +col queued format a16 heading "Queued" + +break on resource_consumer_group skip 1 - + on bdummy - + on qcinst_id - + on qcsid - + on qcserial# - + on username - + on sql_id - + on inst_id - + on server_group - + on server_set + +select + distinct + sess.resource_consumer_group, + (pxs.qcinst_id || pxs.qcsid || pxs.qcserial#) bdummy, + pxs.qcinst_id, + pxs.qcsid, + pxs.qcserial#, + sess.username, + sess.sql_id, + pxs.server_group, + pxs.inst_id, + pxs.server_set, + pxs.req_degree, + pxs.degree +from + gv$px_session pxs, + gv$session sess +where + pxs.qcinst_id = sess.inst_id + and pxs.qcsid = sess.sid + and qcinst_id is not null +order by + resource_consumer_group, + qcinst_id, + qcsid, + inst_id, + server_group, + server_set +; + +clear breaks +column bdummy clear diff --git a/vdh/parallel_query_stats2.sql b/vdh/parallel_query_stats2.sql new file mode 100644 index 0000000..5bf04cb --- /dev/null +++ b/vdh/parallel_query_stats2.sql @@ -0,0 +1,45 @@ +select + px.sid, p.pid, p.spid, px.inst_id, + px.server_group, px.server_set, px.degree, + px.req_degree, w.event +from + gv$session s, + gv$px_session px, + gv$process p, + gv$session_wait w +where + s.sid (+) = px.sid + and s.inst_id (+) = px.inst_id + and s.sid = w.sid (+) + and s.inst_id = w.inst_id (+) + and s.paddr = p.addr (+) + and s.inst_id = p.inst_id (+) +order by + decode(px.qcinst_id, null, px.inst_id, px.qcinst_id), + px.qcsid, + decode(px.server_group, null, 0, px.server_group), + px.server_set, + px.inst_id; + + +col inst_id format 999 heading "Inst ID" +col name format a50 heading "Name" +col value format 9G999G999 heading "Value" + +break on inst_id skip 1 + +select + inst_id, + name, + value +from + gv$sysstat +where + name like '%Parallel operations %' + or name like '%parallelized%' +order by + inst_id, + name +; + +clear breaks diff --git a/vdh/parallel_slaves_used_for_statement.sql b/vdh/parallel_slaves_used_for_statement.sql new file mode 100644 index 0000000..917e1f9 --- /dev/null +++ b/vdh/parallel_slaves_used_for_statement.sql @@ -0,0 +1,70 @@ +--WIP + +select + to_char(hsnp.begin_interval_time, 'DD/MM/YYYY HH24:MI') begin_interval_time_str, + to_char(hsnp.end_interval_time, 'DD/MM/YYYY HH24:MI') end_interval_time_str, + hsnp.instance_number, + hsnp.snap_id, + hsql.version_count, + hsql.plan_hash_value, + hsql.executions_total, + hsql.executions_delta, + hsql.parse_calls_total, + hsql.parse_calls_delta, + hsql.px_servers_execs_total, + hsql.px_servers_execs_delta +from + dba_hist_sqlstat hsql + join dba_hist_snapshot hsnp + on ( hsql.snap_id = hsnp.snap_id + and hsql.instance_number = hsnp.instance_number + ) +where + sql_id = '3vk9k0uczhm9q' + and hsnp.begin_interval_time >= sysdate - 1 +order by + hsnp.begin_interval_time, + hsnp.instance_number, + hsql.plan_hash_value +; + + +select + to_char(begin_interval_time, 'DD/MM/YYYY HH24:MI') begin_interval_time_str, + to_char(end_interval_time, 'DD/MM/YYYY HH24:MI') end_interval_time_str, + instance_number, + snap_id, +-- sum_px_server_exec_total, + sum_px_server_exec_delta, + total_elapsed_time, + parallel_statements_cnt +from + ( select + hsnp.begin_interval_time, + hsnp.end_interval_time, + hsnp.instance_number, + hsnp.snap_id, +-- sum(hsql.px_servers_execs_total) sum_px_server_exec_total, + sum(hsql.px_servers_execs_delta) sum_px_server_exec_delta, + sum(hsql.elapsed_time_delta) total_elapsed_time, + count(*) parallel_statements_cnt + from + dba_hist_sqlstat hsql + join dba_hist_snapshot hsnp + on ( hsql.snap_id = hsnp.snap_id + and hsql.instance_number = hsnp.instance_number + ) + where + hsql.px_servers_execs_delta > 0 + and hsnp.begin_interval_time >= sysdate - 1 + group by + hsnp.begin_interval_time, + hsnp.end_interval_time, + hsnp.instance_number, + hsnp.snap_id + ) +order by + trunc(begin_interval_time, 'MI'), + instance_number +; + \ No newline at end of file diff --git a/vdh/param_value.sql b/vdh/param_value.sql new file mode 100644 index 0000000..e846360 --- /dev/null +++ b/vdh/param_value.sql @@ -0,0 +1,15 @@ +set verify off + +column name format a40 +column value format a25 +column default_value format a25 +column description format a40 word_wrapped +set linesize 250 + +select ksppinm name, ksppstvl value, ksppstdf isdefault, ksppstdfl default_value, x.inst_id inst_id, ksppdesc description +from x$ksppi x, x$ksppcv y +where (x.indx = y.indx) + and ksppinm like '&name' +order by ksppinm, x.inst_id; + +undef name diff --git a/vdh/parms.sql b/vdh/parms.sql new file mode 100644 index 0000000..6efb239 --- /dev/null +++ b/vdh/parms.sql @@ -0,0 +1,46 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: parms.sql +-- Purpose: Display parameters and values. +- +-- Author: Kerry Osborne +-- +-- Usage: This scripts prompts for three values, all of which can be left blank. +-- +-- name: the name (or piece of a name) of the parameter(s) you wish to see +-- +-- isset: "TRUE" or "T" to see only nondefault parameters +-- +-- show_hidden: "Y" to show hidden parameters as well +-- +--------------------------------------------------------------------------------------- +set lines 155 +col name for a50 +col value for a70 +col isdefault for a8 +col ismodified for a10 +col isset for a10 +select name, value, isdefault, ismodified, isset +from +( +select flag,name,value,isdefault,ismodified, +case when isdefault||ismodified = 'TRUEFALSE' then 'FALSE' else 'TRUE' end isset +from + ( + select + decode(substr(i.ksppinm,1,1),'_',2,1) flag + , i.ksppinm name + , sv.ksppstvl value + , sv.ksppstdf isdefault +-- , decode(bitand(sv.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismodified + , decode(bitand(sv.ksppstvf,7),1,'TRUE',4,'TRUE','FALSE') ismodified + from sys.x$ksppi i + , sys.x$ksppsv sv + where i.indx = sv.indx + ) +) +where name like nvl('%¶meter%',name) +and upper(isset) like upper(nvl('%&isset%',isset)) +and flag not in (decode('&show_hidden','Y',3,2)) +order by flag,replace(name,'_','') +/ diff --git a/vdh/parmsd.sql b/vdh/parmsd.sql new file mode 100644 index 0000000..263e5d6 --- /dev/null +++ b/vdh/parmsd.sql @@ -0,0 +1,45 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: parmsd.sql +-- Purpose: Display parameters and descriptions. +- +-- Author: Kerry Osborne +-- +-- Usage: This scripts prompts for one value which can be left blank. +-- +-- name: the name (or piece of a name) of the parameter(s) you wish to see +-- +--------------------------------------------------------------------------------------- +set lines 155 +col name for a50 +col value for a30 trunc +col description for a50 wrap +col isdefault for a8 +col ismodified for a10 +col isset for a10 +select name, value, description +from +( +select flag,name,value,isdefault,ismodified, +case when isdefault||ismodified = 'TRUEFALSE' then 'FALSE' else 'TRUE' end isset , +description +from + ( + select + decode(substr(i.ksppinm,1,1),'_',2,1) flag + , i.ksppinm name + , sv.ksppstvl value + , sv.ksppstdf isdefault +-- , decode(bitand(sv.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismodified + , decode(bitand(sv.ksppstvf,7),1,'TRUE',4,'TRUE','FALSE') ismodified +, i.KSPPDESC description + from sys.x$ksppi i + , sys.x$ksppsv sv + where i.indx = sv.indx + ) +) +where name like nvl('%¶meter%',name) +and upper(isset) like upper(nvl('%&isset%',isset)) +and flag not in (decode('&show_hidden','Y',3,2)) +order by flag,replace(name,'_','') +/ diff --git a/vdh/part_info.sql b/vdh/part_info.sql new file mode 100644 index 0000000..1efe358 --- /dev/null +++ b/vdh/part_info.sql @@ -0,0 +1,186 @@ +-- show information about a partitoned table + +set verify off +set linesize 300 + +column owner format a30 +column table_name format a30 +column column_name format a30 +column interval format a40 +#column high_value format a25 +column high_value format a85 +column interval format a3 +column subpartition_count format 9999999 heading "#SUBPART" +column partition_name format a30 +column subpartition_name format a30 +column column_position format 99999 +column interval format a3 +column subpartition_position format 99999 heading "POS" +column partition_position format 99999 heading "POS" +column MB format 9G999G990D99 + +accept OWNER prompt 'Owner: ' +accept TABLE prompt 'Table Name: ' + + +prompt +prompt ###basic info + +select + owner, + table_name, + partitioning_type, + subpartitioning_type, + status, + interval +from + dba_part_tables +where + owner = '&&OWNER' + and table_name = '&&TABLE' +; + + +prompt +prompt ###info on partition columns + +select + column_position, + column_name +from + dba_part_key_columns +where + owner = '&&OWNER' + and name = '&&TABLE' +order by + column_position +; + + +prompt +prompt ###info on sub-partition columns + +select + column_position, + column_name +from + dba_subpart_key_columns +where + owner = '&&OWNER' + and name = '&&TABLE' +order by + column_position +; + + +prompt +prompt ###details on partitions + +compute sum of mb on report + +select + part.partition_name, + part.composite, + part.subpartition_count, + part.high_value, + part.partition_position, + part.tablespace_name, + part.compression, + part.compress_for, + part.interval, + part.segment_created, + (seg.bytes/1024/1024) MB +from + dba_tab_partitions part, + dba_segments seg +where + part.table_owner = seg.owner(+) + and part.table_name = seg.segment_name(+) + and part.partition_name = seg.partition_name(+) + and part.table_owner = '&&OWNER' + and part.table_name = '&&TABLE' +order by + part.partition_position +; + +clear computes + + +prompt +prompt ###details on sub-partitions + +break on partition_name skip page duplicates +compute sum of mb on partition_name +compute sum of mb on report +/* +select + spart.partition_name, + spart.subpartition_name, + spart.high_value, + spart.subpartition_position, + spart.tablespace_name, + spart.compression, + spart.compress_for, + spart.interval, + spart.segment_created, + (seg.bytes/1024/1024) MB +from + dba_tab_subpartitions spart, + dba_tab_partitions part, + dba_segments seg +where + spart.table_owner = part.table_owner + and spart.table_name = part.table_name + and spart.partition_name = part.partition_name + and spart.table_owner = seg.owner(+) + and spart.table_name = seg.segment_name(+) + and spart.subpartition_name = seg.partition_name(+) + and spart.table_owner = '&&OWNER' + and spart.table_name = '&&TABLE' +order by + part.partition_position, + spart.subpartition_position +; + +*/ + +--switched to ansi join syntax (as excercise ;-) +select + spart.partition_name, + spart.subpartition_name, + spart.high_value, + spart.subpartition_position, + spart.tablespace_name, + spart.compression, + spart.compress_for, + spart.interval, + spart.segment_created, + (seg.bytes/1024/1024) MB +from + dba_tab_subpartitions spart + join dba_tab_partitions part + on ( part.table_owner = spart.table_owner + and part.table_name = spart.table_name + and part.partition_name = spart.partition_name + ) + left outer join dba_segments seg + on ( seg.owner = spart.table_owner + and seg.segment_name = spart.table_name + and seg.partition_name = spart.subpartition_name + ) +where + spart.table_owner = '&&OWNER' + and spart.table_name = '&&TABLE' +order by + part.partition_position, + spart.subpartition_position +; + + +clear breaks +clear computes + + +undef OWNER +undef TABLE + diff --git a/vdh/part_size2.sql b/vdh/part_size2.sql new file mode 100644 index 0000000..0c29d84 --- /dev/null +++ b/vdh/part_size2.sql @@ -0,0 +1,75 @@ +set lines 300 + + +column owner format a30 +column table_name format a30 +column partition_name format a30 +column subpartition_name format a30 +column segment_type for a20 +column mb for 999G999G999D9 + +--compute sum of mb on partition_name +compute sum of mb on report +--break on partition_name duplicates on report +break on report + +undef owner +undef table_name + +with +all_partitions as +( select + tpart.table_owner, + tpart.table_name, + tpart.partition_position, + tpart.partition_name, + tsub.subpartition_position, + tsub.subpartition_name, +-- nvl(tsub.tablespace_name, tpart.tablespace_name) tablespace_name, +-- nvl(tsub.compression, tpart.compression) compression, + nvl(tsub.compress_for, tpart.compress_for) compress_for + from + dba_tab_partitions tpart + left outer join dba_tab_subpartitions tsub + on ( tpart.table_owner = tsub.table_owner + and tpart.table_name = tsub.table_name + and tpart.partition_name = tsub.partition_name + ) + where + tpart.table_owner = '&&owner' + and tpart.table_name = '&&table_name' +) +select + seg.owner, + seg.segment_name table_name, +-- part.partition_position, + part.partition_name, +-- part.subpartition_position, + part.subpartition_name, +-- seg.segment_type, + seg.tablespace_name, +-- part.compression, + part.compress_for, + bytes/1024/1024 mb +from + dba_segments seg + left outer join all_partitions part + on ( seg.owner = part.table_owner + and seg.segment_name = part.table_name + and ( seg.partition_name = part.partition_name + or seg.partition_name = part.subpartition_name + ) + ) +where + seg.owner = '&&owner' + and segment_name = '&&table_name' +order by + part.partition_position nulls last, + part.subpartition_position nulls last +; + +clear computes +clear breaks + +undef owner +undef table_name diff --git a/vdh/pgastat.sql b/vdh/pgastat.sql new file mode 100644 index 0000000..73786ae --- /dev/null +++ b/vdh/pgastat.sql @@ -0,0 +1,38 @@ +column name format a40 +column value_h format 9G999G999G999G999G999D99 + +break on name skip 1 + +select + name, + inst_id, + case + when unit = 'bytes' then + case + when value >= 1099511627776 then value/1024/1024/1024/1024 + when value >= 1073741824 then value/1024/1024/1024 + when value >= 1048576 then value/1024/1024 + when value >= 1024 then value/1024 + else value + end + else + value + end as value_h, + case + when unit = 'bytes' then + case + when value >= 1099511627776 then 'TB' + when value >= 1073741824 then 'GB' + when value >= 1048576 then 'MB' + when value >= 1024 then 'KB' + else 'B' + end + else + unit + end as unit_h +from + gv$pgastat +order by + name, + inst_id +; diff --git a/vdh/plato_49_10gR2.zip b/vdh/plato_49_10gR2.zip new file mode 100644 index 0000000..7e8d52c Binary files /dev/null and b/vdh/plato_49_10gR2.zip differ diff --git a/vdh/plustrce.sql b/vdh/plustrce.sql new file mode 100644 index 0000000..e58f64d --- /dev/null +++ b/vdh/plustrce.sql @@ -0,0 +1,30 @@ +-- +-- Copyright (c) Oracle Corporation 1995, 2000. All Rights Reserved. +-- +-- NAME +-- plustrce.sql +-- +-- DESCRIPTION +-- Creates a role with access to Dynamic Performance Tables +-- for the SQL*Plus SET AUTOTRACE ... STATISTICS command. +-- After this script has been run, each user requiring access to +-- the AUTOTRACE feature should be granted the PLUSTRACE role by +-- the DBA. +-- +-- USAGE +-- sqlplus "/ as sysdba" @plustrce +-- +-- Catalog.sql must have been run before this file is run. +-- This file must be run while connected to a DBA schema. + +set echo on + +drop role plustrace; +create role plustrace; + +grant select on v_$sesstat to plustrace; +grant select on v_$statname to plustrace; +grant select on v_$session to plustrace; +grant plustrace to dba with admin option; + +set echo off diff --git a/vdh/pool_mem.sql b/vdh/pool_mem.sql new file mode 100644 index 0000000..446ceb2 --- /dev/null +++ b/vdh/pool_mem.sql @@ -0,0 +1,12 @@ +col area for a30 +col megs for 999,999.0 +compute sum of megs on report +break on report +select area,sum(megs) megs from ( +select case when name in ('fixed_sga','free memory', 'buffer_cache','log_buffer') + then name + else pool end Area +,(bytes/(1024*1024)) Megs from v$sgastat) +group by area +/ + diff --git a/vdh/pool_usage.sql b/vdh/pool_usage.sql new file mode 100644 index 0000000..b7c77f4 --- /dev/null +++ b/vdh/pool_usage.sql @@ -0,0 +1,5 @@ +compute sum of bytes on pool +break on pool skip 1 +select pool, name, bytes +from v$sgastat +order by pool, name; diff --git a/vdh/pq_hist_stats.sql b/vdh/pq_hist_stats.sql new file mode 100644 index 0000000..6566bd4 --- /dev/null +++ b/vdh/pq_hist_stats.sql @@ -0,0 +1,14 @@ +-- Monitor historical statistics for Parallel Statement Queuing. +-- The following query lists the number of parallel statements run, the average run time, +-- the number of parallel statements queued, and the average queue time by consumer group. + +select + name, + sum(pqs_completed) pqs_completed, + sum(decode(pqs_completed, 0, 0, pq_active_time / pqs_completed)) avg_pq_run_time, + sum(pqs_queued) pqs_queued, + sum(decode(pqs_queued, 0, 0, pq_queued_time / pqs_queued)) avg_pq_queue_time +from + gv$rsrc_consumer_group +group by name +; diff --git a/vdh/pq_stats.sql b/vdh/pq_stats.sql new file mode 100644 index 0000000..744bc85 --- /dev/null +++ b/vdh/pq_stats.sql @@ -0,0 +1,13 @@ +-- The following query lists the number of parallel statements that are currently running or queued per consumer group. +-- It also lists the number of parallel servers currently used per consumer group. + +select + name, + sum(current_pqs_active) pqs_active, + sum(current_pq_servers_active) pq_servers_active, + sum(current_pqs_queued) pqs_queued +from + gv$rsrc_consumer_group +group by + name +; diff --git a/vdh/print_table.sql b/vdh/print_table.sql new file mode 100644 index 0000000..f625856 --- /dev/null +++ b/vdh/print_table.sql @@ -0,0 +1,44 @@ +/* +create user utils identified by utils; + +grant create session, create procedure to utils; + +connect utils/utils; +*/ +create or replace +procedure print_table( p_query in varchar2 ) +AUTHID CURRENT_USER +is + l_theCursor integer default dbms_sql.open_cursor; + l_columnValue varchar2(4000); + l_status integer; + l_descTbl dbms_sql.desc_tab; + l_colCnt number; +begin + dbms_sql.parse( l_theCursor, p_query, dbms_sql.native ); + dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl); + + for i in 1 .. l_colCnt loop + dbms_sql.define_column(l_theCursor, i, l_columnValue, 4000); + end loop; + + l_status := dbms_sql.execute(l_theCursor); + + dbms_output.put_line('.'); + while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop + for i in 1 .. l_colCnt loop + dbms_sql.column_value( l_theCursor, i, l_columnValue ); + dbms_output.put_line( rpad( l_descTbl(i).col_name, 30 ) + || ': ' || + l_columnValue ); + end loop; + dbms_output.put_line( '-----------------' ); + end loop; +exception + when others then + dbms_sql.close_cursor( l_theCursor ); + RAISE; +end; +/ + +--grant execute on print_table to public; diff --git a/vdh/privs.sql b/vdh/privs.sql new file mode 100644 index 0000000..98f8fbd --- /dev/null +++ b/vdh/privs.sql @@ -0,0 +1,60 @@ +/********************************************************************** + * File: privs.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 17Dec01 + * + * Description: + * SQL*Plus script to display complete information about the + * privileges and roles granted to a user or role. + * + * Modifications: + *********************************************************************/ +set echo off feedback off timing off pagesize 66 verify off trimspool on linesize 100 +set recsep off + +col sort0 noprint +col priv format a65 word_wrap heading "Granted" +col admin_option heading "Adm|Opt" +col dflt heading "Dflt" + +undef user + +spool privs_&&user + +select 1 sort0, + granted_role priv, + admin_option, + default_role dflt +from dba_role_privs +where grantee = decode('&&user','dbo','dbo',upper('&&user')) +union +select 2 sort0, + privilege priv, + admin_option, + '' dflt +from dba_sys_privs +where grantee = decode('&&user','dbo','dbo',upper('&&user')) +union +select 3 sort0, + privilege || ' on ' || owner || '.' || table_name || ' (by ' || grantor || ')' priv, + grantable admin_option, + '' dflt +from dba_tab_privs +where grantee = decode('&&user','dbo','dbo',upper('&&user')) +union +select 4 sort0, + 'QUOTA: ' || + decode(q.max_bytes, + -1, 'UNLIMITED', + ltrim(to_char(q.max_bytes/1048576,'999,999,990.00')) || 'M') || + ' on ' || q.tablespace_name priv, + '' admin_option, + decode(u.default_tablespace, q.tablespace_name, 'YES', 'NO') dflt +from dba_ts_quotas q, + dba_users u +where u.username = decode('&&user','dbo','dbo',upper('&&user')) +and q.username = u.username +order by 1, 2, 3, 4; + +spool off diff --git a/vdh/proc_info.sql b/vdh/proc_info.sql new file mode 100644 index 0000000..b9e213b --- /dev/null +++ b/vdh/proc_info.sql @@ -0,0 +1,10 @@ +select + prc.spid, ses.sid, ses.serial#, ses.machine, ses.osuser, to_char(ses.logon_time, 'DD/MM/YYYY HH24:MI') logon_time, + ses.last_call_et, ses.sql_id, ses.sql_trace, ses.sql_trace_binds, ses.sql_trace_waits, ses.sql_trace_plan_stats +from + v$process prc, + v$session ses +where + ses.paddr = prc.addr + and ses.sid = &sid +; diff --git a/vdh/queued_parallel_statements.sql b/vdh/queued_parallel_statements.sql new file mode 100644 index 0000000..0591061 --- /dev/null +++ b/vdh/queued_parallel_statements.sql @@ -0,0 +1,35 @@ +set linesize 200 +set pages 9999 + +col resource_consumer_group format a25 heading "Consumer Group Name" +col username format a20 heading "Username" +col inst_id format 999 heading "Instance" +col sql_id format a20 heading "SQL id" +col sid format 99999 heading "Sid" +column queued format a25 heading "Queue" +column seconds_in_wait format 9G999G999 heading "Seconds|Waited" + +break on resource_consumer_group skip 1 on queued + +select + resource_consumer_group, + ( case event + when 'resmgr:pq queued' then 'RSRC Queue' + when 'PX Queuing: statement queue' then 'Statement Queue, Next' + when 'ENQ JX SQL statement queue' then 'Statement Queue' + end + ) queued, + seconds_in_wait, + username, inst_id, sid, sql_id +from + gv$session +where + event in + ( 'resmgr:pq queued', 'PX Queuing: statement queue', 'ENQ JX SQL statement queue') +order by + resource_consumer_group, + queued, + seconds_in_wait desc +; + +clear breaks diff --git a/vdh/queued_sql.sql b/vdh/queued_sql.sql new file mode 100644 index 0000000..af00bd7 --- /dev/null +++ b/vdh/queued_sql.sql @@ -0,0 +1,14 @@ +break on sql_text on sql_id +col sql_text for a60 trunc + +select + inst_id, sid, sql_id, sql_exec_id, sql_text, queuing_time +from + gv$sql_monitor +where + status='QUEUED' +order by + sql_id +; + +clear break diff --git a/vdh/racdiag.sql b/vdh/racdiag.sql new file mode 100644 index 0000000..dd75888 --- /dev/null +++ b/vdh/racdiag.sql @@ -0,0 +1,572 @@ +-- NAME: RACDIAG.SQL +-- SYS OR INTERNAL USER, CATPARR.SQL ALREADY RUN, PARALLEL QUERY OPTION ON +-- ------------------------------------------------------------------------ +-- AUTHOR: +-- Michael Polaski - Oracle Support Services +-- Copyright 2002, Oracle Corporation +-- ------------------------------------------------------------------------ +-- PURPOSE: +-- This script is intended to provide a user friendly guide to troubleshoot +-- RAC hung sessions or slow performance scenerios. The script includes +-- information to gather a variety of important debug information to determine +-- the cause of a RAC session level hang. The script will create a file +-- called racdiag_.out in your local directory while dumping hang analyze +-- dumps in the user_dump_dest(s) and background_dump_dest(s) on all nodes. +-- +-- ------------------------------------------------------------------------ +-- DISCLAIMER: +-- This script is provided for educational purposes only. It is NOT +-- supported by Oracle World Wide Technical Support. +-- The script has been tested and appears to work as intended. +-- You should always run new scripts on a test instance initially. +-- ------------------------------------------------------------------------ +-- Script output is as follows: + +set echo off +set feedback off +column timecol new_value timestamp +column spool_extension new_value suffix +select to_char(sysdate,'Mondd_hhmi') timecol, +'.out' spool_extension from sys.dual; +column output new_value dbname +select value || '_' output +from v$parameter where name = 'db_name'; +spool racdiag_&&dbname&×tamp&&suffix +set lines 200 +set pagesize 35 +set trim on +set trims on +alter session set nls_date_format = 'MON-DD-YYYY HH24:MI:SS'; +alter session set timed_statistics = true; +set feedback on +select to_char(sysdate) time from dual; + +set numwidth 5 +column host_name format a20 tru +select inst_id, instance_name, host_name, version, status, startup_time +from gv$instance +order by inst_id; + +set echo on + +-- WAIT CHAINS +-- 11.x+ Only (This will not work in < v11 +-- See Note 1428210.1 for instructions on interpreting. +set pages 1000 +set lines 120 +set heading off +column w_proc format a50 tru +column instance format a20 tru +column inst format a28 tru +column wait_event format a50 tru +column p1 format a16 tru +column p2 format a16 tru +column p3 format a15 tru +column Seconds format a50 tru +column sincelw format a50 tru +column blocker_proc format a50 tru +column waiters format a50 tru +column chain_signature format a100 wra +column blocker_chain format a100 wra +SELECT * +FROM (SELECT 'Current Process: '||osid W_PROC, 'SID '||i.instance_name INSTANCE, +'INST #: '||instance INST,'Blocking Process: '||decode(blocker_osid,null,'',blocker_osid)|| +' from Instance '||blocker_instance BLOCKER_PROC,'Number of waiters: '||num_waiters waiters, +'Wait Event: ' ||wait_event_text wait_event, 'P1: '||p1 p1, 'P2: '||p2 p2, 'P3: '||p3 p3, +'Seconds in Wait: '||in_wait_secs Seconds, 'Seconds Since Last Wait: '||time_since_last_wait_secs sincelw, +'Wait Chain: '||chain_id ||': '||chain_signature chain_signature,'Blocking Wait Chain: '||decode(blocker_chain_id,null, +'',blocker_chain_id) blocker_chain +FROM v$wait_chains wc, +v$instance i +WHERE wc.instance = i.instance_number (+) +AND ( num_waiters > 0 +OR ( blocker_osid IS NOT NULL +AND in_wait_secs > 10 ) ) +ORDER BY chain_id, +num_waiters DESC) +WHERE ROWNUM < 101; + +-- Taking Hang Analyze dumps +-- This may take a little while... +oradebug setmypid +oradebug unlimit +oradebug -g all hanganalyze 3 +-- This part may take the longest, you can monitor bdump or udump to see if +-- the file is being generated. +oradebug -g all dump systemstate 258 + +-- WAITING SESSIONS: +-- The entries that are shown at the top are the sessions that have +-- waited the longest amount of time that are waiting for non-idle wait +-- events (event column). You can research and find out what the wait +-- event indicates (along with its parameters) by checking the Oracle +-- Server Reference Manual or look for any known issues or documentation +-- by searching Metalink for the event name in the search bar. Example +-- (include single quotes): [ 'buffer busy due to global cache' ]. +-- Metalink and/or the Server Reference Manual should return some useful +-- information on each type of wait event. The inst_id column shows the +-- instance where the session resides and the SID is the unique identifier +-- for the session (gv$session). The p1, p2, and p3 columns will show +-- event specific information that may be important to debug the problem. +-- To find out what the p1, p2, and p3 indicates see the next section. +-- Items with wait_time of anything other than 0 indicate we do not know +-- how long these sessions have been waiting. +-- +set numwidth 10 +column state format a7 tru +column event format a25 tru +column last_sql format a40 tru +select sw.inst_id, sw.sid, sw.state, sw.event, sw.seconds_in_wait seconds, +sw.p1, sw.p2, sw.p3, sa.sql_text last_sql +from gv$session_wait sw, gv$session s, gv$sqlarea sa +where sw.event not in +('rdbms ipc message','smon timer','pmon timer', +'SQL*Net message from client','lock manager wait for remote message', +'ges remote message', 'gcs remote message', 'gcs for action', 'client message', +'pipe get', 'null event', 'PX Idle Wait', 'single-task message', +'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue', +'listen endpoint status','slave wait','wakeup time manager') +and sw.seconds_in_wait > 0 +and (sw.inst_id = s.inst_id and sw.sid = s.sid) +and (s.inst_id = sa.inst_id and s.sql_address = sa.address) +order by seconds desc; + +-- EVENT PARAMETER LOOKUP: +-- This section will give a description of the parameter names of the +-- events seen in the last section. p1test is the parameter value for +-- p1 in the WAITING SESSIONS section while p2text is the parameter +-- value for p3 and p3 text is the parameter value for p3. The +-- parameter values in the first section can be helpful for debugging +-- the wait event. +-- +column event format a30 tru +column p1text format a25 tru +column p2text format a25 tru +column p3text format a25 tru +select distinct event, p1text, p2text, p3text +from gv$session_wait sw +where sw.event not in ('rdbms ipc message','smon timer','pmon timer', +'SQL*Net message from client','lock manager wait for remote message', +'ges remote message', 'gcs remote message', 'gcs for action', 'client message', +'pipe get', 'null event', 'PX Idle Wait', 'single-task message', +'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue', +'listen endpoint status','slave wait','wakeup time manager') +and seconds_in_wait > 0 +order by event; + +-- GES LOCK BLOCKERS: +-- This section will show us any sessions that are holding locks that +-- are blocking other users. The inst_id will show us the instance that +-- the session resides on while the sid will be a unique identifier for +-- the session. The grant_level will show us how the GES lock is granted to +-- the user. The request_level will show us what status we are trying to +-- obtain. The lockstate column will show us what status the lock is in. +-- The last column shows how long this session has been waiting. +-- +set numwidth 5 +column state format a16 tru; +column event format a30 tru; +select dl.inst_id, s.sid, p.spid, dl.resource_name1, +decode(substr(dl.grant_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-S (SS)', +'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)', +'KJUSEREX','Exclusive',request_level) as grant_level, +decode(substr(dl.request_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-S (SS)', +'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)', +'KJUSEREX','Exclusive',request_level) as request_level, +decode(substr(dl.state,1,8),'KJUSERGR','Granted','KJUSEROP','Opening', +'KJUSERCA','Canceling','KJUSERCV','Converting') as state, +s.sid, sw.event, sw.seconds_in_wait sec +from gv$ges_enqueue dl, gv$process p, gv$session s, gv$session_wait sw +where blocker = 1 +and (dl.inst_id = p.inst_id and dl.pid = p.spid) +and (p.inst_id = s.inst_id and p.addr = s.paddr) +and (s.inst_id = sw.inst_id and s.sid = sw.sid) +order by sw.seconds_in_wait desc; + +-- GES LOCK WAITERS: +-- This section will show us any sessions that are waiting for locks that +-- are blocked by other users. The inst_id will show us the instance that +-- the session resides on while the sid will be a unique identifier for +-- the session. The grant_level will show us how the GES lock is granted to +-- the user. The request_level will show us what status we are trying to +-- obtain. The lockstate column will show us what status the lock is in. +-- The last column shows how long this session has been waiting. +-- +set numwidth 5 +column state format a16 tru; +column event format a30 tru; +select dl.inst_id, s.sid, p.spid, dl.resource_name1, +decode(substr(dl.grant_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-S (SS)', +'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)', +'KJUSEREX','Exclusive',request_level) as grant_level, +decode(substr(dl.request_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-S (SS)', +'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)', +'KJUSEREX','Exclusive',request_level) as request_level, +decode(substr(dl.state,1,8),'KJUSERGR','Granted','KJUSEROP','Opening', +'KJUSERCA','Cancelling','KJUSERCV','Converting') as state, +s.sid, sw.event, sw.seconds_in_wait sec +from gv$ges_enqueue dl, gv$process p, gv$session s, gv$session_wait sw +where blocked = 1 +and (dl.inst_id = p.inst_id and dl.pid = p.spid) +and (p.inst_id = s.inst_id and p.addr = s.paddr) +and (s.inst_id = sw.inst_id and s.sid = sw.sid) +order by sw.seconds_in_wait desc; + +-- LOCAL ENQUEUES: +-- This section will show us if there are any local enqueues. The inst_id will +-- show us the instance that the session resides on while the sid will be a +-- unique identifier for. The addr column will show the lock address. The type +-- will show the lock type. The id1 and id2 columns will show specific +-- parameters for the lock type. +-- +set numwidth 12 +column event format a12 tru +select l.inst_id, l.sid, l.addr, l.type, l.id1, l.id2, +decode(l.block,0,'blocked',1,'blocking',2,'global') block, +sw.event, sw.seconds_in_wait sec +from gv$lock l, gv$session_wait sw +where (l.sid = sw.sid and l.inst_id = sw.inst_id) +and l.block in (0,1) +order by l.type, l.inst_id, l.sid; + +-- LATCH HOLDERS: +-- If there is latch contention or 'latch free' wait events in the WAITING +-- SESSIONS section we will need to find out which proceseses are holding +-- latches. The inst_id will show us the instance that the session resides +-- on while the sid will be a unique identifier for. The username column +-- will show the session's username. The os_user column will show the os +-- user that the user logged in as. The name column will show us the type +-- of latch being waited on. You can search Metalink for the latch name in +-- the search bar. Example (include single quotes): +-- [ 'library cache' latch ]. Metalink should return some useful information +-- on the type of latch. +-- +set numwidth 5 +select distinct lh.inst_id, s.sid, s.username, p.username os_user, lh.name +from gv$latchholder lh, gv$session s, gv$process p +where (lh.sid = s.sid and lh.inst_id = s.inst_id) +and (s.inst_id = p.inst_id and s.paddr = p.addr) +order by lh.inst_id, s.sid; + +-- LATCH STATS: +-- This view will show us latches with less than optimal hit ratios +-- The inst_id will show us the instance for the particular latch. The +-- latch_name column will show us the type of latch. You can search Metalink +-- for the latch name in the search bar. Example (include single quotes): +-- [ 'library cache' latch ]. Metalink should return some useful information +-- on the type of latch. The hit_ratio shows the percentage of time we +-- successfully acquired the latch. +-- +column latch_name format a30 tru +select inst_id, name latch_name, +round((gets-misses)/decode(gets,0,1,gets),3) hit_ratio, +round(sleeps/decode(misses,0,1,misses),3) "SLEEPS/MISS" +from gv$latch +where round((gets-misses)/decode(gets,0,1,gets),3) < .99 +and gets != 0 +order by round((gets-misses)/decode(gets,0,1,gets),3); + +-- No Wait Latches: +-- +select inst_id, name latch_name, +round((immediate_gets/(immediate_gets+immediate_misses)), 3) hit_ratio, +round(sleeps/decode(immediate_misses,0,1,immediate_misses),3) "SLEEPS/MISS" +from gv$latch +where round((immediate_gets/(immediate_gets+immediate_misses)), 3) < .99 +and immediate_gets + immediate_misses > 0 +order by round((immediate_gets/(immediate_gets+immediate_misses)), 3); + +-- GLOBAL CACHE CR PERFORMANCE +-- This shows the average latency of a consistent block request. +-- AVG CR BLOCK RECEIVE TIME should typically be about 15 milliseconds +-- depending on your system configuration and volume, is the average +-- latency of a consistent-read request round-trip from the requesting +-- instance to the holding instance and back to the requesting instance. If +-- your CPU has limited idle time and your system typically processes +-- long-running queries, then the latency may be higher. However, it is +-- possible to have an average latency of less than one millisecond with +-- User-mode IPC. Latency can be influenced by a high value for the +-- DB_MULTI_BLOCK_READ_COUNT parameter. This is because a requesting process +-- can issue more than one request for a block depending on the setting of +-- this parameter. Correspondingly, the requesting process may wait longer. +-- Also check interconnect badwidth, OS tcp settings, and OS udp settings if +-- AVG CR BLOCK RECEIVE TIME is high. +-- +set numwidth 20 +column "AVG CR BLOCK RECEIVE TIME (ms)" format 9999999.9 +select b1.inst_id, b2.value "GCS CR BLOCKS RECEIVED", +b1.value "GCS CR BLOCK RECEIVE TIME", +((b1.value / b2.value) * 10) "AVG CR BLOCK RECEIVE TIME (ms)" +from gv$sysstat b1, gv$sysstat b2 +where b1.name = 'global cache cr block receive time' and +b2.name = 'global cache cr blocks received' and b1.inst_id = b2.inst_id +or b1.name = 'gc cr block receive time' and +b2.name = 'gc cr blocks received' and b1.inst_id = b2.inst_id ; + +-- GLOBAL CACHE LOCK PERFORMANCE +-- This shows the average global enqueue get time. +-- Typically AVG GLOBAL LOCK GET TIME should be 20-30 milliseconds. the +-- elapsed time for a get includes the allocation and initialization of a +-- new global enqueue. If the average global enqueue get (global cache +-- get time) or average global enqueue conversion times are excessive, +-- then your system may be experiencing timeouts. See the 'WAITING SESSIONS', +-- 'GES LOCK BLOCKERS', GES LOCK WAITERS', and 'TOP 10 WAIT EVENTS ON SYSTEM' +-- sections if the AVG GLOBAL LOCK GET TIME is high. +-- +set numwidth 20 +column "AVG GLOBAL LOCK GET TIME (ms)" format 9999999.9 +select b1.inst_id, (b1.value + b2.value) "GLOBAL LOCK GETS", +b3.value "GLOBAL LOCK GET TIME", +(b3.value / (b1.value + b2.value) * 10) "AVG GLOBAL LOCK GET TIME (ms)" +from gv$sysstat b1, gv$sysstat b2, gv$sysstat b3 +where b1.name = 'global lock sync gets' and +b2.name = 'global lock async gets' and b3.name = 'global lock get time' +and b1.inst_id = b2.inst_id and b2.inst_id = b3.inst_id +or b1.name = 'global enqueue gets sync' and +b2.name = 'global enqueue gets async' and b3.name = 'global enqueue get time' +and b1.inst_id = b2.inst_id and b2.inst_id = b3.inst_id; + +-- RESOURCE USAGE +-- This section will show how much of our resources we have used. +-- +set numwidth 8 +select inst_id, resource_name, current_utilization, max_utilization, +initial_allocation +from gv$resource_limit +where max_utilization > 0 +order by inst_id, resource_name; + +-- DLM TRAFFIC INFORMATION +-- This section shows how many tickets are available in the DLM. If the +-- TCKT_WAIT columns says "YES" then we have run out of DLM tickets which +-- could cause a DLM hang. Make sure that you also have enough TCKT_AVAIL. +-- +set numwidth 5 +select * from gv$dlm_traffic_controller +order by TCKT_AVAIL; + +-- DLM MISC +-- +set numwidth 10 +select * from gv$dlm_misc; + +-- LOCK CONVERSION DETAIL: +-- This view shows the types of lock conversion being done on each instance. +-- +select * from gv$lock_activity; + +-- TOP 10 WRITE PINGING/FUSION OBJECTS +-- This view shows the top 10 objects for write pings accross instances. +-- The inst_id column shows the node that the block was pinged on. The name +-- column shows the object name of the offending object. The file# shows the +-- offending file number (gc_files_to_locks). The STATUS column will show the +-- current status of the pinged block. The READ_PINGS will show us read +-- converts and the WRITE_PINGS will show us objects with write converts. +-- Any rows that show up are objects that are concurrently accessed across +-- more than 1 instance. +-- +set numwidth 8 +column name format a20 tru +column kind format a10 tru +select inst_id, name, kind, file#, status, BLOCKS, +READ_PINGS, WRITE_PINGS +from (select p.inst_id, p.name, p.kind, p.file#, p.status, +count(p.block#) BLOCKS, sum(p.forced_reads) READ_PINGS, +sum(p.forced_writes) WRITE_PINGS +from gv$ping p, gv$datafile df +where p.file# = df.file# (+) +group by p.inst_id, p.name, p.kind, p.file#, p.status +order by sum(p.forced_writes) desc) +where rownum < 11 +order by WRITE_PINGS desc; + +-- TOP 10 READ PINGING/FUSION OBJECTS +-- This view shows the top 10 objects for read pings. The inst_id column shows +-- the node that the block was pinged on. The name column shows the object +-- name of the offending object. The file# shows the offending file number +-- (gc_files_to_locks). The STATUS column will show the current status of the +-- pinged block. The READ_PINGS will show us read converts and the WRITE_PINGS +-- will show us objects with write converts. Any rows that show up are objects +-- that are concurrently accessed across more than 1 instance. +-- +set numwidth 8 +column name format a20 tru +column kind format a10 tru +select inst_id, name, kind, file#, status, BLOCKS, +READ_PINGS, WRITE_PINGS +from (select p.inst_id, p.name, p.kind, p.file#, p.status, +count(p.block#) BLOCKS, sum(p.forced_reads) READ_PINGS, +sum(p.forced_writes) WRITE_PINGS +from gv$ping p, gv$datafile df +where p.file# = df.file# (+) +group by p.inst_id, p.name, p.kind, p.file#, p.status +order by sum(p.forced_reads) desc) +where rownum < 11 +order by READ_PINGS desc; + +-- TOP 10 FALSE PINGING OBJECTS +-- This view shows the top 10 objects for false pings. This can be avoided by +-- better gc_files_to_locks configuration. The inst_id column shows the node +-- that the block was pinged on. The name column shows the object name of the +-- offending object. The file# shows the offending file number +-- (gc_files_to_locks). The STATUS column will show the current status of the +-- pinged block. The READ_PINGS will show us read converts and the WRITE_PINGS +-- will show us objects with write converts. Any rows that show up are objects +-- that are concurrently accessed across more than 1 instance. +-- +set numwidth 8 +column name format a20 tru +column kind format a10 tru +select inst_id, name, kind, file#, status, BLOCKS, +READ_PINGS, WRITE_PINGS +from (select p.inst_id, p.name, p.kind, p.file#, p.status, +count(p.block#) BLOCKS, sum(p.forced_reads) READ_PINGS, +sum(p.forced_writes) WRITE_PINGS +from gv$false_ping p, gv$datafile df +where p.file# = df.file# (+) +group by p.inst_id, p.name, p.kind, p.file#, p.status +order by sum(p.forced_writes) desc) +where rownum < 11 +order by WRITE_PINGS desc; + +-- INITIALIZATION PARAMETERS: +-- Non-default init parameters for each node. +-- +set numwidth 5 +column name format a30 tru +column value format a50 wra +column description format a60 tru +select inst_id, name, value, description +from gv$parameter +where isdefault = 'FALSE' +order by inst_id, name; + +-- TOP 10 WAIT EVENTS ON SYSTEM +-- This view will provide a summary of the top wait events in the db. +-- +set numwidth 10 +column event format a25 tru +select inst_id, event, time_waited, total_waits, total_timeouts +from (select inst_id, event, time_waited, total_waits, total_timeouts +from gv$system_event where event not in ('rdbms ipc message','smon timer', +'pmon timer', 'SQL*Net message from client','lock manager wait for remote message', +'ges remote message', 'gcs remote message', 'gcs for action', 'client message', +'pipe get', 'null event', 'PX Idle Wait', 'single-task message', +'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue', +'listen endpoint status','slave wait','wakeup time manager') +order by time_waited desc) +where rownum < 11 +order by time_waited desc; + +-- SESSION/PROCESS REFERENCE: +-- This section is very important for most of the above sections to find out +-- which user/os_user/process is identified to which session/process. +-- +set numwidth 7 +column event format a30 tru +column program format a25 tru +column username format a15 tru +select p.inst_id, s.sid, s.serial#, p.pid, p.spid, p.program, s.username, +p.username os_user, sw.event, sw.seconds_in_wait sec +from gv$process p, gv$session s, gv$session_wait sw +where (p.inst_id = s.inst_id and p.addr = s.paddr) +and (s.inst_id = sw.inst_id and s.sid = sw.sid) +order by p.inst_id, s.sid; + +-- SYSTEM STATISTICS: +-- All System Stats with values of > 0. These can be referenced in the +-- Server Reference Manual +-- +set numwidth 5 +column name format a60 tru +column value format 9999999999999999999999999 +select inst_id, name, value +from gv$sysstat +where value > 0 +order by inst_id, name; + +-- CURRENT SQL FOR WAITING SESSIONS: +-- Current SQL for any session in the WAITING SESSIONS list +-- +set numwidth 5 +column sql format a80 wra +select sw.inst_id, sw.sid, sw.seconds_in_wait sec, sa.sql_text sql +from gv$session_wait sw, gv$session s, gv$sqlarea sa +where sw.sid = s.sid (+) +and sw.inst_id = s.inst_id (+) +and s.sql_address = sa.address +and sw.event not in ('rdbms ipc message','smon timer','pmon timer', +'SQL*Net message from client','lock manager wait for remote message', +'ges remote message', 'gcs remote message', 'gcs for action', 'client message', +'pipe get', 'null event', 'PX Idle Wait', 'single-task message', +'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue', +'listen endpoint status','slave wait','wakeup time manager') +and sw.seconds_in_wait > 0 +order by sw.seconds_in_wait desc; + +-- WAIT CHAINS +-- 11.x+ Only (This will not work in < v11 +-- See Note 1428210.1 for instructions on interpreting. +set pages 1000 +set lines 120 +set heading off +column w_proc format a50 tru +column instance format a20 tru +column inst format a28 tru +column wait_event format a50 tru +column p1 format a16 tru +column p2 format a16 tru +column p3 format a15 tru +column seconds format a50 tru +column sincelw format a50 tru +column blocker_proc format a50 tru +column waiters format a50 tru +column chain_signature format a100 wra +column blocker_chain format a100 wra +SELECT * +FROM (SELECT 'Current Process: '||osid W_PROC, 'SID '||i.instance_name INSTANCE, +'INST #: '||instance INST,'Blocking Process: '||decode(blocker_osid,null,'',blocker_osid)|| +' from Instance '||blocker_instance BLOCKER_PROC,'Number of waiters: '||num_waiters waiters, +'Wait Event: ' ||wait_event_text wait_event, 'P1: '||p1 p1, 'P2: '||p2 p2, 'P3: '||p3 p3, +'Seconds in Wait: '||in_wait_secs Seconds, 'Seconds Since Last Wait: '||time_since_last_wait_secs sincelw, +'Wait Chain: '||chain_id ||': '||chain_signature chain_signature,'Blocking Wait Chain: '||decode(blocker_chain_id,null, +'',blocker_chain_id) blocker_chain +FROM v$wait_chains wc, +v$instance i +WHERE wc.instance = i.instance_number (+) +AND ( num_waiters > 0 +OR ( blocker_osid IS NOT NULL +AND in_wait_secs > 10 ) ) +ORDER BY chain_id, +num_waiters DESC) +WHERE ROWNUM < 101; + +-- Taking Hang Analyze dumps +-- This may take a little while... +oradebug setmypid +oradebug unlimit +oradebug -g all hanganalyze 3 +-- This part may take the longest, you can monitor bdump or udump to see +-- if the file is being generated. +oradebug -g all dump systemstate 258 + +set echo off + +select to_char(sysdate) time from dual; + +spool off + +-- --------------------------------------------------------------------------- +Prompt; +Prompt racdiag output files have been written to:; +Prompt; +host pwd +Prompt alert log and trace files are located in:; +column host_name format a12 tru +column name format a20 tru +column value format a60 tru +select distinct i.host_name, p.name, p.value +from gv$instance i, gv$parameter p +where p.inst_id = i.inst_id (+) +and p.name like '%_dump_dest' +and p.name != 'core_dump_dest'; \ No newline at end of file diff --git a/vdh/real_time.pl b/vdh/real_time.pl new file mode 100644 index 0000000..ac5290c --- /dev/null +++ b/vdh/real_time.pl @@ -0,0 +1,1172 @@ +#!/usr/bin/env perl +# +# Author: Bertrand Drouvot +# Visit my blog : http://bdrouvot.wordpress.com/ +# V1.0 (2013/01) +# V1.1 (2013/02): Adding the asmiostat type +# V1.2 (2013/03): Adding IP to asmiostat (For Exadata Cells) +# +# Description: +# Utility used to display real time informations based on cumulative views +# It does not create objects into the database +# It basically takes a snapshot each second (default interval) of the cumulative view and computes the differences +# with the previous snapshot +# It is oracle RAC aware : you can work on all the instances, a subset or the local one +# You have to set oraenv on one instance of the database you want to diagnose first +# You can choose the number of snapshots to display and the time to wait between snapshots +# +# Usage: +# ./real_time.pl -help +# +# Chek for new version : http://bdrouvot.wordpress.com/perl-scripts-2/ +# +#----------------------------------------------------------------# + +BEGIN { + die "ORACLE_HOME not set\n" unless $ENV{ORACLE_HOME}; + unless ($ENV{OrAcLePeRl}) { + $ENV{OrAcLePeRl} = "$ENV{ORACLE_HOME}/perl"; + $ENV{PERL5LIB} = "$ENV{PERL5LIB}:$ENV{OrAcLePeRl}/lib:$ENV{OrAcLePeRl}/lib/site_perl"; + $ENV{LD_LIBRARY_PATH} = "$ENV{LD_LIBRARY_PATH}:$ENV{ORACLE_HOME}/lib32:$ENV{ORACLE_HOME}/lib"; + exec "$ENV{OrAcLePeRl}/bin/perl", $0, @ARGV; + } +} + +use strict; +use DBI; +use DBD::Oracle qw(:ora_session_modes); + +use Getopt::Long; + +our $real_time_type=''; +our %options; +our $debug=0; +our $interval=1; +our $count=999999; +our $topn=10; +our $showinst=0; +our $rac=0; +our $inst_type='rdbms'; +our $dbh; +our $instpattern='all'; +our $stat_pattern=''; +our $owner_pattern=''; +our $seg_pattern=''; +our $include_sys_pattern='N'; +our $waitclass_pattern=''; +our $event_pattern=''; +our $name_pattern=''; +our $pool_pattern=''; +our $eq_pattern=''; +our $eqtype_pattern=''; +our $reqreason_pattern=''; +our $space_pattern=''; +our $sid_pattern=''; +our $sqlid_pattern=''; +our $fg_pattern=''; +our $ip_pattern=''; +our $dg_pattern=''; +our $show_pattern='dg'; +our $dgid_sql_pattern=''; +our $fg_sql_pattern=''; +our $dg_suffixe=''; +our $instid_pattern='inst_id'; +our $sqlsuffixe; +our $sql1; +our $main_sql=''; +our %instances; +our %asm_dg; +our %asm_fg; +our %showinstances=(); +our %sql_patterns; +our %diffsnaps; +our %rtvalues; +our %pkeys; +our $bkey; +our @ekey; +our %ckeys=(); +our @array_of_ckeys_description=(); +our @array_of_display_keys=(); +our @array_of_ckey=(); +our @delta_fields; +our $global_sql_pattern=''; +our @array_of_report_header; +our $report_format_values; +our @report_fields_values; +our $seconds; +our $minuts; +our $hours; +our %sort_fields; +our $sort_field_pattern=''; + +sub main { +&get_the_options(@ARGV); + +if ($real_time_type =~ m/^sysstat$/i ) { + $sql_patterns{'name'}=$stat_pattern; + $main_sql="select inst_id,name,value from gv\$sysstat where 1=1 "; + $pkeys{0}='%30s'; + $pkeys{1}='%70s'; + @array_of_display_keys=({0=>'y',1=>'y'}); + @delta_fields=(2); + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %5s %-60s %5s %-20s\n",'','INST_NAME','','NAME','','VALUE']); + $report_format_values="%02d:%02d:%02d %1s %-10s %5s %-60s %5s %-20s\n"; + @report_fields_values=(1,2); + $sort_fields{2}='VALUE'; + %sort_fields = reverse %sort_fields; + if (!$sort_field_pattern) {$sort_field_pattern='VALUE'}; + &go_sql_real_time; +} + +if ($real_time_type =~ m/^system_event$/i ) { + $sql_patterns{'event'}=$event_pattern; + $sql_patterns{'wait_class'}=$waitclass_pattern; + $main_sql="select inst_id,EVENT, TIME_WAITED_MICRO,TOTAL_WAITS from gv\$system_event where 1=1 "; + $pkeys{0}='%30s'; + $pkeys{1}='%70s'; + @array_of_display_keys=({0=>'y',1=>'y'}); + @delta_fields=(2,3); + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %2s %-65s %2s %-20s %2s %-20s %2s %-10s\n",'','INST_NAME','','EVENT','','NB_WAITS','','TIME_WAITED_MICRO','','ms/Wait']); + $report_format_values="%02d:%02d:%02d %1s %-10s %2s %-65s %2s %-20s %2s %-20s %2s %.3f\n"; + @report_fields_values=(1,3,2,"2/3/1000"); + $sort_fields{2}='TIME_WAITED_MICRO'; + $sort_fields{3}='NB_WAITS'; + %sort_fields = reverse %sort_fields; + if (!$sort_field_pattern) {$sort_field_pattern='NB_WAITS'}; + &go_sql_real_time; +} + +if ($real_time_type =~ m/^sess_event$/i ) { + $sql_patterns{'ev.event'}=$event_pattern; + $sql_patterns{'s.sid'}=$sid_pattern; + $sql_patterns{'s.sql_id'}=$sqlid_pattern; + $instid_pattern="ev.inst_id"; + $main_sql="select ev.inst_id,s.sql_id,ev.EVENT,ev.TIME_WAITED_MICRO,ev.TOTAL_WAITS,s.sid,s.serial# from gv\$session_event ev,gv\$session s where ev.wait_class !='Idle' and s.sid=ev.sid and ev.inst_id=s.inst_id and (s.sid,s.inst_id) not in (select distinct sid,inst_id from gv\$mystat) "; + $pkeys{0}='%30s'; + $pkeys{1}='%30s'; + $pkeys{2}='%70s'; + $pkeys{5}='%30s'; + $pkeys{6}='%30s'; + @array_of_display_keys=({0=>'y',1=>'y',2=>'y',5=>'y',6=>'y'}); + # Remove sid,serial# from the key to sum on all sid + @array_of_ckeys_description=({0=>'%30s',1=>'%30s',2=>'%70s'}); + + @delta_fields=(3,4); + + if ($sid_pattern) + { + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %2s %-8s %1s %-15s %2s %-40s %2s %-20s %2s %-20s %2s %-10s\n",'','INST_NAME','','SID','','SQL_ID','','EVENT','','NB_WAITS','','TIME_WAITED_MICRO','','ms/Wait']); + $report_format_values="%02d:%02d:%02d %1s %-10s %2s %-8s %1s %-15s %2s %-40s %2s %-20s %2s %-20s %2s %.3f\n"; + @report_fields_values=(5,1,2,4,3,"3/4/1000"); + } + else + { + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %2s %-15s %2s %-50s %2s %-20s %2s %-20s %2s %-10s\n",'','INST_NAME','','SQL_ID','','EVENT','','NB_WAITS','','TIME_WAITED_MICRO','','ms/Wait']); + $report_format_values="%02d:%02d:%02d %1s %-10s %2s %-15s %2s %-50s %2s %-20s %2s %-20s %2s %.3f\n"; + @report_fields_values=(1,2,4,3,"3/4/1000"); + } + + $sort_fields{3}='TIME_WAITED_MICRO'; + $sort_fields{4}='NB_WAITS'; + %sort_fields = reverse %sort_fields; + if (!$sort_field_pattern) {$sort_field_pattern='NB_WAITS'}; + &go_sql_real_time; +} + +if ($real_time_type =~ m/^sess_stat/i ) { + $sql_patterns{'sn.name'}=$stat_pattern; + $sql_patterns{'ss.sid'}=$sid_pattern; + $sql_patterns{'ss.sql_id'}=$sqlid_pattern; + $instid_pattern="ss.inst_id"; + $main_sql=" + select ss.inst_id, ss.sql_id, sn.name,se.VALUE,ss.sid,ss.serial# + from gv\$session ss, + gv\$sesstat se, + gv\$statname sn + where se.STATISTIC# = sn.STATISTIC# + and ss.inst_id = se.inst_id + and se.inst_id = sn.Inst_id + and se.SID = ss.SID + and se.value > 0 + and (ss.sid,ss.inst_id) not in (select distinct sid,inst_id from gv\$mystat) "; + $pkeys{0}='%30s'; + $pkeys{1}='%30s'; + $pkeys{2}='%70s'; + $pkeys{4}='%30s'; + $pkeys{5}='%30s'; + @array_of_display_keys=({0=>'y',1=>'y',2=>'y',5=>'y'}); + # Remove sid,serial# from the key to sum on all sid + @array_of_ckeys_description=({0=>'%30s',1=>'%30s',2=>'%70s'}); + + @delta_fields=(3); + + if ($sid_pattern) + { + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %2s %-10s %2s %-13s %2s %-70s %2s %-20s\n",'','INST_NAME','','SID','','SQL_ID','','NAME','','VALUE']); + $report_format_values="%02d:%02d:%02d %1s %-10s %2s %-10s %2s %-13s %2s %-70s %2s %-20s\n"; + @report_fields_values=(4,1,2,3); + } + else + { + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %2s %-13s %2s %-70s %2s %-20s\n",'','INST_NAME','','SQL_ID','','NAME','','VALUE']); + $report_format_values="%02d:%02d:%02d %1s %-10s %2s %-13s %2s %-70s %2s %-20s\n"; + @report_fields_values=(1,2,3); + } + + $sort_fields{3}='VALUE'; + %sort_fields = reverse %sort_fields; + if (!$sort_field_pattern) {$sort_field_pattern='VALUE'}; + &go_sql_real_time; +} + +if ($real_time_type =~ m/^event_histogram$/i ) { + $sql_patterns{'event'}=$event_pattern; + $main_sql="select inst_id,event, wait_time_milli, wait_count from gv\$event_histogram where 1=1 "; + $pkeys{0}='%30s'; + $pkeys{1}='%70s'; + $pkeys{2}='%30s'; + @array_of_display_keys=({0=>'y',1=>'y',2=>'y'}); + @delta_fields=(3); + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %5s %-60s %5s %-20s %5s %-20s\n",'','INST_NAME','','EVENT','','WAIT_TIME_MS','','COUNT']); + $report_format_values="%02d:%02d:%02d %1s %-10s %5s %-60s %5s %-20s %5s %-20s\n"; + @report_fields_values=(1,2,3); + $sort_fields{2}='WAIT_TIME_MS'; + $sort_fields{3}='COUNT'; + %sort_fields = reverse %sort_fields; + if (!$sort_field_pattern) {$sort_field_pattern='COUNT'}; + &go_sql_real_time; +} + +if ($real_time_type =~ m/^sgastat$/i ) { + $sql_patterns{'pool'}=$pool_pattern; + $sql_patterns{'name'}=$name_pattern; + $main_sql="select inst_id,pool,name,bytes from gv\$sgastat where 1=1 "; + $pkeys{0}='%30s'; + $pkeys{1}='%30s'; + $pkeys{2}='%30s'; + @array_of_display_keys=({0=>'y',1=>'y',2=>'y'}); + @delta_fields=(3); + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %5s %-30s %5s %-30s %5s %-30s\n",'','INST_NAME','','POOL','','NAME','','BYTES']); + $report_format_values="%02d:%02d:%02d %1s %-10s %5s %-30s %5s %-30s %5s %-30s\n"; + @report_fields_values=(1,2,3); + $sort_fields{3}='BYTES'; + %sort_fields = reverse %sort_fields; + if (!$sort_field_pattern) {$sort_field_pattern='BYTES'}; + &go_sql_real_time; +} + +if ($real_time_type =~ m/^asmiostat$/i ) { + $inst_type='asm'; + my $ckey_cpt=0; + # The failgroup case (default one) + $main_sql="select inst_id,group_number,disk_number,failgroup,reads,writes,read_errs,write_errs,read_time*1000,write_time*1000,bytes_read/1024,bytes_written/1024,regexp_replace(path,\'.*/\',\'\'),$interval from gv\$asm_disk_stat where mount_status ='CACHED'"; + $pkeys{0}='%30s'; + $pkeys{1}='%30s'; + $pkeys{2}='%30s'; + $pkeys{3}='%30s'; + # What need to be show + my @show_fields = split (/,/,$show_pattern); + # The IP case + if (grep (/^ip$/i,@show_fields)) { + if (grep (/^fg$/i,@show_fields)) { + &usage_asmiostat(); + } else { + $main_sql="select inst_id,group_number,disk_number,regexp_substr(path,'([[:digit:]]{1,3}\.[[:digit:]]{1,3})\.[[:digit:]]{1,3}(\.[[:digit:]]{1,3})'),reads,writes,read_errs,write_errs,read_time*1000,write_time*1000,bytes_read/1024,bytes_written/1024,regexp_replace(path,\'.*/\',\'\'),$interval from gv\$asm_disk_stat where mount_status ='CACHED'"; + $sql_patterns{"regexp_substr(path,'([[:digit:]]{1,3}\.[[:digit:]]{1,3})\.[[:digit:]]{1,3}(\.[[:digit:]]{1,3})')"}=$ip_pattern; + } + } + foreach my $show (@show_fields) { + if ($show =~ m/^inst$/i ){ + # group by ASM instance + $array_of_ckeys_description[$ckey_cpt]{0}='%30s'; + $array_of_ckeys_description[$ckey_cpt]{13}='%10s'; + $array_of_display_keys[$ckey_cpt]{0}='y'; + $array_of_display_keys[$ckey_cpt]{13}='y'; + $ckey_cpt=$ckey_cpt+1; + } + if ($show =~ m/^dg$/i ){ + # group by DG + $array_of_ckeys_description[$ckey_cpt]{13}='%10s'; + $array_of_display_keys[$ckey_cpt]{13}='y'; + if (grep (/^inst$/i,@show_fields)) { + $array_of_ckeys_description[$ckey_cpt]{0}='%30s'; + $array_of_display_keys[$ckey_cpt]{0}='y'; + } + $array_of_ckeys_description[$ckey_cpt]{1}='%30s'; + $array_of_display_keys[$ckey_cpt]{1}='y'; + $ckey_cpt=$ckey_cpt+1; + } + if ($show =~ m/^(fg|ip)$/i ){ + # group by FG or IP + $array_of_ckeys_description[$ckey_cpt]{13}='%10s'; + $array_of_display_keys[$ckey_cpt]{13}='y'; + if (grep (/^inst$/i,@show_fields)) { + $array_of_ckeys_description[$ckey_cpt]{0}='%30s'; + $array_of_display_keys[$ckey_cpt]{0}='y'; + } + if (grep (/^dg$/i,@show_fields)) { + $array_of_ckeys_description[$ckey_cpt]{1}='%30s'; + $array_of_display_keys[$ckey_cpt]{1}='y'; + } + $array_of_ckeys_description[$ckey_cpt]{3}='%30s'; + $array_of_display_keys[$ckey_cpt]{3}='y'; + $ckey_cpt=$ckey_cpt+1; + } + if ($show =~ m/^dsk$/i ){ + # group per disk + $array_of_ckeys_description[$ckey_cpt]{13}='%10s'; + $array_of_display_keys[$ckey_cpt]{13}='y'; + if (grep (/^inst$/i,@show_fields)) { + $array_of_ckeys_description[$ckey_cpt]{0}='%30s'; + $array_of_display_keys[$ckey_cpt]{0}='y'; + } + if (grep (/^dg$/i,@show_fields)) { + $array_of_ckeys_description[$ckey_cpt]{1}='%30s'; + $array_of_display_keys[$ckey_cpt]{1}='y'; + } + if (grep (/^(fgi|ip)$/i,@show_fields)) { + $array_of_ckeys_description[$ckey_cpt]{3}='%30s'; + $array_of_display_keys[$ckey_cpt]{3}='y'; + } + $array_of_ckeys_description[$ckey_cpt]{12}='%30s'; + $array_of_display_keys[$ckey_cpt]{12}='y'; + $ckey_cpt=$ckey_cpt+1; + } + } + + @delta_fields=(4,5,6,7,8,9,10,11); + $report_format_values="%02d:%02d:%02d %1s %-6s %1s %-11s %1s %-11s %1s %-10s %1s %-7.0f %1s %-6.0f %1s %-7.1f %1s %-7.0f %1s %-6.0f %1s %-8.0f %1s %-7.0f %1s %-8.1f %1s %-7.0f %1s %-5s \n"; + @report_fields_values=(3,12,"4/13","10/13","8/4","10*1024/4",6,"5/13","11/13","9/5","11*1024/5",7); + @array_of_report_header=(["%02d:%02d:%02d %51s %-7s %1s %-6s %1s %-7s %1s %-7s %1s %-6s %1s %-8s %1s %-7s %1s %-8s %1s %-7s %1s %-6s\n",'','','','Kby','','Avg','','AvgBy/','','Read','','','','Kby','','Avg','','AvgBy/','','Write'],["%02d:%02d:%02d %1s %-6s %1s %-11s %1s %-11s %1s %-10s %1s %-7s %1s %-6s %1s %-7s %1s %-7s %1s %-6s %1s %-8s %1s %-7s %1s %-8s %1s %-7s %1s %-6s\n",'','INST','','DG','','FG','','DSK','','Reads/s','','Read/s','','ms/Read','','Read','','Errors','','Writes/s','','Write/s','','ms/Write','','Write','','Errors'],["%02d:%02d:%02d %1s %-6s %1s %-11s %1s %-11s %1s %-10s %1s %-7s %1s %-6s %1s %-7s %1s %-7s %1s %-6s %1s %-8s %1s %-7s %1s %-8s %1s %-7s %1s %-6s\n",'','------','','-----------','','-----------','','----------','','-------','','------','','-------','','------','','------','','--------','','-------','','--------','','------','','------']); + # The IP case + if (grep (/^ip$/i,@show_fields)) { + $report_format_values="%02d:%02d:%02d %1s %-6s %1s %-9s %1s %-15s %1s %-8s %1s %-7.0f %1s %-6.0f %1s %-7.1f %1s %-7.0f %1s %-6.0f %1s %-8.0f %1s %-7.0f %1s %-8.1f %1s %-7.0f %1s %-5s \n"; + @array_of_report_header=(["%02d:%02d:%02d %51s %-7s %1s %-6s %1s %-7s %1s %-7s %1s %-6s %1s %-8s %1s %-7s %1s %-8s %1s %-7s %1s %-6s\n",'','','','Kby','','Avg','','AvgBy/','','Read','','','','Kby','','Avg','','AvgBy/','','Write'],["%02d:%02d:%02d %1s %-6s %1s %-9s %1s %-15s %1s %-8s %1s %-7s %1s %-6s %1s %-7s %1s %-7s %1s %-6s %1s %-8s %1s %-7s %1s %-8s %1s %-7s %1s %-6s\n",'','INST','','DG','','IP (Cells)','','DSK','','Reads/s','','Read/s','','ms/Read','','Read','','Errors','','Writes/s','','Write/s','','ms/Write','','Write','','Errors'],["%02d:%02d:%02d %1s %-6s %1s %-9s %1s %-15s %1s %-8s %1s %-7s %1s %-6s %1s %-7s %1s %-7s %1s %-6s %1s %-8s %1s %-7s %1s %-8s %1s %-7s %1s %-6s\n",'','------','','---------','','---------------','','--------','','-------','','------','','-------','','------','','------','','--------','','-------','','--------','','------','','------']); + } + &go_sql_real_time; +} + +if ($real_time_type =~ m/^librarycache$/i ) { + $sql_patterns{'namespace'}=$space_pattern; + $main_sql="select inst_id,namespace,reloads,INVALIDATIONS,GETS,GETHITS,PINS,PINHITS from gv\$librarycache where 1=1 "; + $pkeys{0}='%30s'; + $pkeys{1}='%30s'; + @array_of_display_keys=({0=>'y',1=>'y'}); + @delta_fields=(2,3,4,5,6,7); + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %5s %-15s %5s %-10s %5s %-13s %5s %-7s %5s %-8s %5s %-7s %5s %-8s\n",'','INST_NAME','','NAMESPACE','','RELOADS','','INVALIDATIONS','','GETS','','GETRATIO','','PINS','','PINRATIO']); + $report_format_values="%02d:%02d:%02d %1s %-10s %5s %-15s %5s %-10s %5s %-13s %5s %-7s %5s %-8.1f %5s %-7s %5s %-8.1f\n"; + @report_fields_values=(1,2,3,5,"5*100/4",7,"7*100/6"); + $sort_fields{2}='RELOADS'; + $sort_fields{3}='INVALIDATIONS'; + $sort_fields{4}='GETS'; + $sort_fields{6}='PINS'; + %sort_fields = reverse %sort_fields; + if (!$sort_field_pattern) {$sort_field_pattern='GETS'}; + &go_sql_real_time; +} + +if ($real_time_type =~ m/^segments_stats$/i ) { + $sql_patterns{'d.object_name'}=$seg_pattern; + $sql_patterns{'d.owner'}=$owner_pattern; + $sql_patterns{'s.STATISTIC_NAME'}=$stat_pattern; + if ($include_sys_pattern =~ m/N/i) { + $main_sql="select /*+ RULE */ s.inst_id,d.owner,d.object_name,d.subobject_name,d.object_type,s.STATISTIC_NAME,s.value,s.DATAOBJ# from gv\$segstat s,dba_objects d where s.DATAOBJ#=d.DATA_OBJECT_ID and s.obj#=d.object_id and d.owner <> 'SYS'"; + } + else + { + if ($include_sys_pattern =~ m/Y/i) {$main_sql="select /*+ RULE */ s.inst_id,d.owner,d.object_name,d.subobject_name,d.object_type,s.STATISTIC_NAME,s.value,s.DATAOBJ# from gv\$segstat s,dba_objects d where s.DATAOBJ#=d.DATA_OBJECT_ID and s.obj#=d.object_id"}; + } + $pkeys{0}='%30s'; + $pkeys{7}='%30s'; + $pkeys{1}='%30s'; + $pkeys{2}='%128s'; + $pkeys{5}='%64s'; + @array_of_display_keys=({0=>'y',7=>'y',1=>'y',2=>'y',5=>'y'}); + @delta_fields=(6); + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %3s %-15s %3s %-40s %3s %-40s %3s %-10s\n",'','INST_NAME','','OWNER','','OBJECT_NAME','','STAT_NAME','','VALUE']); + $report_format_values="%02d:%02d:%02d %1s %-10s %3s %-15s %3s %-40s %3s %-40s %3s %-10s\n"; + @report_fields_values=(1,2,5,6); + $sort_fields{6}='VALUE'; + %sort_fields = reverse %sort_fields; + if (!$sort_field_pattern) {$sort_field_pattern='VALUE'}; + &go_sql_real_time; +} + +if ($real_time_type =~ m/^enqueue_statistics$/i ) { + $sql_patterns{'EQ_NAME'}=$eq_pattern; + $sql_patterns{'EQ_TYPE'}=$eqtype_pattern; + $sql_patterns{'REQ_REASON'}=$reqreason_pattern; + $main_sql="select inst_id,EQ_NAME,EQ_TYPE,REQ_REASON,TOTAL_REQ#,TOTAL_WAIT#,SUCC_REQ#,FAILED_REQ#,CUM_WAIT_TIME from gv\$enqueue_statistics where 1=1 "; + $pkeys{0}='%30s'; + $pkeys{1}='%70s'; + $pkeys{2}='%10s'; + $pkeys{3}='%70s'; + @array_of_display_keys=({0=>'y',1=>'y',2=>'y',3=>'y'}); + @delta_fields=(4,5,6,7,8); + @array_of_report_header=(["%02d:%02d:%02d %1s %-10s %2s %-40s %2s %-5s %2s %-40s %2s %-10s %2s %-10s %2s %-10s %2s %-10s %2s %-10s\n",'','INST_NAME','','EQ_NAME','','EQ_TYPE','','REQ_REASON','','TOTAL_REQ','','TOTAL_WAIT','','SUCC_REQ','','FAILED_REQ','','WAIT_TIME']); + $report_format_values="%02d:%02d:%02d %1s %-10s %2s %-40s %2s %-7s %2s %-40s %2s %-10s %2s %-10s %2s %-10s %2s %-10s %2s %-10s\n"; + @report_fields_values=(1,2,3,4,5,6,7,8); + $sort_fields{4}='TOTAL_REQ'; + $sort_fields{5}='TOTAL_WAIT'; + $sort_fields{6}='SUCC_REQ'; + $sort_fields{7}='FAILED_REQ'; + $sort_fields{8}='WAIT_TIME'; + %sort_fields = reverse %sort_fields; + if (!$sort_field_pattern) {$sort_field_pattern='TOTAL_REQ'}; + &go_sql_real_time; +} +} +# +# Ctrl+C signal +# +$SIG{INT}= \&close; + +sub close { + print "Disconnecting from RDBMS...\n"; + $sql1->finish; + $dbh->disconnect(); + exit 0; +} + +sub get_the_options { + my $help; + GetOptions('help|h' => \$help, + 'interval=i'=>\$interval, + 'count=i'=>\$count, + 'type=s' => \$real_time_type, + 'top:i' => \$topn, + 'inst:s' => \$instpattern, + 'waitclass:s' => \$waitclass_pattern, + 'event:s' => \$event_pattern, + 'name:s' => \$name_pattern, + 'pool:s' => \$pool_pattern, + 'eq_name:s' => \$eq_pattern, + 'eq_type:s' => \$eqtype_pattern, + 'namespace:s' => \$space_pattern, + 'req_reason:s' => \$reqreason_pattern, + 'sort_field:s' => \$sort_field_pattern, + 'segment:s' => \$seg_pattern, + 'owner:s' => \$owner_pattern, + 'sid:s' => \$sid_pattern, + 'sql_id:s' => \$sqlid_pattern, + 'fg:s' => \$fg_pattern, + 'ip:s' => \$ip_pattern, + 'dg:s' => \$dg_pattern, + 'show:s' => \$show_pattern, + 'include_sys:s' => \$include_sys_pattern, + 'statname:s' => \$stat_pattern) or &usage(); + + &usage($real_time_type) if ((!$real_time_type) or $help ); +} + +sub go_sql_real_time { +&connect_db; +&check_instance_type($inst_type); +&check_rac; +&build_instances; +if ( $inst_type =~ /asm/i) {&build_asm_dg_fg}; +&build_rac_pattern; +&build_glob_sql_pattern; +&build_glob_sql; +&initialise_arrays; +&launch_loop; +} + +sub connect_db { +$dbh = DBI->connect('dbi:Oracle:',"", "", { ora_session_mode => ORA_SYSDBA }); +} + +sub check_instance_type { +my $inst_type=$_[0]; +debug("Instance Type: ".$inst_type); +my $sql1 = $dbh->prepare('select value from v$parameter where name=\'instance_type\' '); +$sql1->execute; + +if ( $sql1->fetchrow_array =~ /$inst_type/i) { + $sql1->finish; +} +else { + print "\n\n ERROR : You must connect to a ".$inst_type." instance \n\n"; + $sql1->finish; + $dbh->disconnect(); + exit 1; +} +} + +sub check_rac { +my $sql1 = $dbh->prepare('select value from v$parameter where name = \'cluster_database\''); +$sql1->execute; +if ( $sql1->fetchrow_array =~ /true/i) { + $rac=1; +} +$sql1->finish; +} + +sub build_instances { +my $sql1 = $dbh->prepare('select inst_id,instance_name, host_name from gv$instance'); +$sql1->execute; +while ( my ($instid, $instname,$host) = $sql1->fetchrow_array) { + $instances{$instname} = $instid; +} +$sql1->finish; +} + +sub build_asm_dg_fg { +&build_asm_dg; +&build_asm_fg; +} + +sub build_asm_dg { +my $sql1 = $dbh->prepare('select group_number,name from v$asm_diskgroup_stat'); +$sql1->execute; +while ( my ($dgid, $dgname) = $sql1->fetchrow_array) { + $asm_dg{$dgid} = $dgname; +} +$sql1->finish; +$dgid_sql_pattern=&build_in_pattern($dg_pattern,'group_number',%asm_dg); +} + +sub build_asm_fg { +my $sql1 = $dbh->prepare('select distinct(failgroup) from v$asm_disk_stat'); +$sql1->execute; +while ( my ($fgname) = $sql1->fetchrow_array) { + $asm_fg{$fgname} = $fgname; +} +$sql1->finish; +$fg_sql_pattern=&build_in_pattern($fg_pattern,'failgroup',%asm_fg); +} + +sub build_in_pattern { + my $pattern=shift; + my $column=shift; + my %list_of_field=@_; + my %reverse_list_of_field = reverse %list_of_field; + my @fields = split (/,/,$pattern); + my $output_in_pattern=''; + foreach my $field (@fields) { + if (!exists $reverse_list_of_field{uc($field)}) { + print "\n\n ERROR : $field $column is not found !! \n"; + exit 1; + } else { + if (!$output_in_pattern) { + $output_in_pattern=" and $column in ('"."$reverse_list_of_field{uc($field)}'"; + } else { + $output_in_pattern=$output_in_pattern.",'$reverse_list_of_field{uc($field)}'"; + } + } + } + ($output_in_pattern)?$output_in_pattern=$output_in_pattern.")":""; + return $output_in_pattern; +} + +sub build_rac_pattern +{ +if ($rac & ! ($instpattern =~ /all|current/i)) { + my @fields = split (/,/,$instpattern); + + foreach my $instname (@fields) { + + if (!exists $instances{uc($instname)}) { + print "\n\n ERROR : The instance $instname is not found !! \n"; + $dbh->disconnect(); + exit 1; + } else { + $showinstances{$instname}=$instances{$instname};; + } + } +} + +# If not rac put pattern as current + +if (! $rac) { +$instpattern = 'current'; +} + +if ($instpattern =~ /current/i) { + +my $sql1_sql = "select inst_id,instance_name, host_name from gv\$instance where inst_id = userenv('instance')"; + +my $sql1 = $dbh->prepare($sql1_sql); +$sql1->execute; +while ( my ($instid, $instname,$host) = $sql1->fetchrow_array) { + $instances{$instname} = $instid; +} +$sql1->finish; +} + +if (($rac & ($instpattern =~ /all|current/i)) | (! $rac & ($instpattern =~ /current/i))) { + %showinstances = %instances; +} + +# RAC : Create the SQL suffixe based on the instances to request on + +# Case 1 : The current instance or list of instances +$sqlsuffixe = ((! $rac) | ($rac & $instpattern =~ /current/i) ? " and ".$instid_pattern. " = userenv('instance')" : ""); + +# Case 2 : All the instances +# Nothing to do + +if ($rac & ! ($instpattern =~ /all|current/i)) { + + foreach my $inst (keys %showinstances) { + + my $inst_id = $showinstances{$inst}; + + if ($sqlsuffixe) { + $sqlsuffixe = $sqlsuffixe." or ".$instid_pattern. " = $inst_id"; + } + else + { + $sqlsuffixe = $sqlsuffixe." and (".$instid_pattern. " = $inst_id"; + } + } + $sqlsuffixe = $sqlsuffixe.")"; + +} +debug("sqlsuffixe: ".$sqlsuffixe); +# Reverse the hash for display usage (Report Section) +%showinstances = reverse %showinstances; +} + +sub build_glob_sql_pattern { + + foreach my $column (keys %sql_patterns) { + debug("column: ".$column); + debug("pattern: ".$sql_patterns{$column}); + if ($sql_patterns{$column}) {$global_sql_pattern = $global_sql_pattern." and ".$column." like '".$sql_patterns{$column}."' "} + } + debug("global_sql_pattern: ".$global_sql_pattern); +} + +sub build_glob_sql { + $main_sql = $main_sql.$global_sql_pattern.$sqlsuffixe.$dgid_sql_pattern.$fg_sql_pattern; + debug("Main sql: ".$main_sql); +} + +sub build_the_key { + my @tab1 = @_; + $bkey=''; + @ekey=(); + foreach my $id (sort { $a <=> $b }(keys %pkeys)) { + if ($bkey) {$bkey = $bkey.".".$pkeys{$id}}; + if (!$bkey) {$bkey = $pkeys{$id}}; + push(@ekey,$tab1[$id]); + } +} + +sub build_compute_key { + my @tab1 = @_; + for my $i ( 0 .. $#array_of_ckeys_description ) { + my $bckey=''; + my @eckey=(); + for my $j ( sort { $a <=> $b } (keys %{ $array_of_ckeys_description[$i] }) ) { + ($bckey)?($bckey = $bckey.".".$array_of_ckeys_description[$i]{$j}):($bckey = $array_of_ckeys_description[$i]{$j}); + push(@eckey,$tab1[$j]); + } + my $ckey = sprintf($bckey,@eckey); + $array_of_ckey[$i]=$ckey; + } +} + +sub initialise_arrays { + $sql1 = $dbh->prepare($main_sql); + my $key; + $sql1->execute; + while ( my @tab1 = $sql1->fetchrow_array) { + &build_the_key(@tab1); + $key = sprintf($bkey,@ekey); + @{$rtvalues{$key}}=@tab1; + @{$diffsnaps{$key}}=@tab1; + debug("key is : ".$key); + } +} + +sub launch_loop { + my $key; + my $ckey; + for (my $nb=0;$nb < $count;$nb++) { + print "............................\n"; + print "Collecting $interval sec....\n"; + print "............................\n"; + sleep $interval; + $sql1->execute; + ($seconds, $minuts, $hours) = localtime(time); + # Empty diffsnaps + %diffsnaps = (); + while ( my @tab1 = $sql1->fetchrow_array) { + &build_the_key(@tab1); + $key = sprintf($bkey,@ekey); + + # Is there a compute key ? + + if(@array_of_ckeys_description){ + &build_compute_key(@tab1); + } else + { + $ckey=$key; + } + + # Initialise non delta fields + for (my $tabid=0;$tabid < scalar(@tab1);$tabid++) { + if(@array_of_ckeys_description){ + for my $i ( 0 .. $#array_of_ckeys_description ) { + my $ckey=$array_of_ckey[$i]; + $diffsnaps{$ckey}->[$tabid]=($array_of_display_keys[$i]{$tabid}?"$tab1[$tabid]":"") unless (grep (/^$tabid$/,@delta_fields)); + debug("Non delta fields: for display_keys $array_of_display_keys[$i]{$tabid} and tabid $tabid ".$diffsnaps{$ckey}->[$tabid]); + } + } + else + { + $diffsnaps{$ckey}->[$tabid]=($array_of_display_keys[0]{$tabid}?"$tab1[$tabid]":"") unless (grep (/^$tabid$/,@delta_fields)); + debug("Non delta fields: for display_keys $array_of_display_keys[0]{$tabid}} and tabid $tabid ".$diffsnaps{$ckey}->[$tabid]); + } + } + + # get the list of delta fields + foreach my $deltaid (@delta_fields) { + if(@array_of_ckeys_description){ + for my $i ( 0 .. $#array_of_ckeys_description ) { + my $ckey=$array_of_ckey[$i]; + debug("deltaid : ".$deltaid); + $diffsnaps{$ckey}->[$deltaid] = $diffsnaps{$ckey}->[$deltaid] + $tab1[$deltaid] - $rtvalues{$key}->[$deltaid]; + debug("Previous : ".$rtvalues{$key}->[$deltaid]); + debug("Current : ".$tab1[$deltaid]); + debug("Diff is : ".$diffsnaps{$ckey}->[$deltaid]); + } + } else { + $diffsnaps{$ckey}->[$deltaid] = $diffsnaps{$ckey}->[$deltaid] + $tab1[$deltaid] - $rtvalues{$key}->[$deltaid]; + } + } + @{$rtvalues{$key}} = @tab1; + debug("key is : ".$key); + debug("ckey is : ".$ckey); + } + # Report now + &report_header; + &report_values; + } +} + +sub report_header { + foreach my $report_ligne (0..@array_of_report_header-1) { + my @header=($hours,$minuts,$seconds); + foreach my $report_column (1..@{$array_of_report_header[$report_ligne]}) { + push(@header,$array_of_report_header[$report_ligne][$report_column]); + } + printf ($array_of_report_header[$report_ligne][0],@header); + } +} + +sub report_resultset { + + my $pk=shift; + my %resultset=@_; + + my @values = ($hours,$minuts,$seconds); + if (%showinstances) {push(@values,'',$showinstances{$resultset{$pk}->[0]})}; + if (%asm_dg) {push(@values,'',$asm_dg{$resultset{$pk}->[1]})}; + + foreach my $id (@report_fields_values) { + + push(@values,''); + + my @need_div=split(/\//,$id); + my @need_mult=split(/\*/,$id); + + if (@need_mult > 1) { + $need_mult[1] =~ s/\/.*//; + $resultset{$pk}->[$need_mult[0]] = ($resultset{$pk}->[$need_mult[0]]) * $need_mult[1]; + debug("Mult is needed for id : ".$id); + debug("Mult[0] is : ".$need_mult[0]); + debug("Mult[1] is : ".$need_mult[1]); + } + + if (@need_div > 1) { + $need_div[0] =~ s/\*.*//; + debug("Div is needed for id : ".$id); + debug("div[0] is : ".$need_div[0]); + debug("div[1] is : ".$need_div[1]); + if (@need_div==3) { + if ($resultset{$pk}->[$need_div[1]] > 0) {push(@values,$resultset{$pk}->[$need_div[0]]/$need_div[2]/$resultset{$pk}->[$need_div[1]])}; + if ($resultset{$pk}->[$need_div[1]] == 0) {push(@values,0)}; + } + if (@need_div==2) { + if ($resultset{$pk}->[$need_div[1]] > 0) {push(@values,$resultset{$pk}->[$need_div[0]]/$resultset{$pk}->[$need_div[1]])}; + if ($resultset{$pk}->[$need_div[1]] == 0) {push(@values,0)}; + } + } + else + { + push(@values,$resultset{$pk}->[$id]); + } + } + printf ($report_format_values,@values); +} + +sub report_values { + my $nb =1; + my %resultset = (); + + if ($sort_field_pattern) + { + # Sort descending and keep the topn first rows + + foreach my $pk (sort {$diffsnaps{$b}[$sort_fields{uc($sort_field_pattern)}] <=> $diffsnaps{$a}[$sort_fields{uc($sort_field_pattern)}] } (keys(%diffsnaps))) { + + if ($nb <= $topn ) + { + $nb=$nb+1; + @{$resultset{$pk}}=@{$diffsnaps{$pk}}; + } + + # Break the foreach + last if ($nb > $topn); + } + + # Display the topn rows in ascending order by value + foreach my $pk (sort {$resultset{$a}[$sort_fields{uc($sort_field_pattern)}] <=> $resultset{$b}[$sort_fields{uc($sort_field_pattern)}] } (keys(%resultset))) { + &report_resultset($pk,%resultset); + } + } + else + { + foreach my $pk (reverse sort (keys(%diffsnaps))) { + &report_resultset($pk,%diffsnaps); + } + } +} + + +sub usage { + +# Main Usage +if (!$real_time_type) {&usage_global()};; + +# Usage for sysstat +if ($real_time_type =~ m/^sysstat$/i ) {&usage_sysstat()}; + +# Usage for system_event +if ($real_time_type =~ m/^system_event$/i ) {&usage_system_event()}; + +# Usage for event_histogram +if ($real_time_type =~ m/^event_histogram$/i ) {&usage_event_histogram()}; + +# Usage for sgastat +if ($real_time_type =~ m/^sgastat$/i ) {&usage_sgastat()}; + +# Usage for enqueue_statistics +if ($real_time_type =~ m/^enqueue_statistics$/i ) {&usage_enqueue_statistics()}; + +# Usage for librarycache +if ($real_time_type =~ m/^librarycache$/i ) {&usage_librarycache()}; + +# Usage for segments_stats +if ($real_time_type =~ m/^segments_stats$/i ) {&usage_segments_stats()}; + +# Usage for sess_event +if ($real_time_type =~ m/^sess_event$/i ) {&usage_sess_event()}; + +# Usage for sess_stat +if ($real_time_type =~ m/^sess_stat$/i ) {&usage_sess_stat()}; + +# Usage for asmiostat +if ($real_time_type =~ m/^asmiostat$/i ) {&usage_asmiostat()}; + +} + + +sub usage_global { + +print " \nUsage: $0 [-interval] [-count] [-type] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-15s %-30s %-100s \n",'Parameter','Value','Comment'); +printf (" %-15s %-30s %-100s \n",'---------','-------','-------'); +printf (" %-15s %-30s %-100s \n",'-type','sysstat','Real-Time snaps extracted from gv$sysstat'); +printf (" %-15s %-30s %-100s \n",'','system_event','Real-Time snaps extracted from gv$system_event'); +printf (" %-15s %-30s %-100s \n",'','event_histogram','Real-Time snaps extracted from gv$event_histogram'); +printf (" %-15s %-30s %-100s \n",'','sgastat','Real-Time snaps extracted from gv$sgastat'); +printf (" %-15s %-30s %-100s \n",'','enqueue_statistics','Real-Time snaps extracted from gv$enqueue_statistics'); +printf (" %-15s %-30s %-100s \n",'','librarycache','Real-Time snaps extracted from gv$librarycache'); +printf (" %-15s %-30s %-100s \n",'','segments_stats','Real-Time snaps extracted from gv$segstat'); +printf (" %-15s %-30s %-100s \n",'','sess_event','Real-Time snaps extracted from gv$session_event and gv$session'); +printf (" %-15s %-30s %-100s \n",'','sess_stat','Real-Time snaps extracted from gv$sesstat and gv$session'); +printf (" %-15s %-30s %-100s \n",'','asmiostat','Real-Time snaps extracted from gv$asm_disk_stat'); +print ("\n"); +printf (" %-15s %-30s %-100s \n",'-help','Print the main help or related to a type (if not empty)',''); +print ("\n"); +printf (" %-15s\n",'Description:'); +printf (" %-15s\n",'-----------'); +print (" Utility used to display real time informations based on cumulative views\n"); +print (" It basically takes a snapshot each second (default interval) of the cumulative view and computes the differences\n"); +print (" with the previous snapshot\n"); +print (" It is oracle RAC aware: you can work on all the instances, a subset or the local one\n"); +print (" You have to set oraenv on one instance of the database you want to diagnose first\n"); +print (" You can choose the number of snapshots to display and the time to wait between snapshots\n"); +print ("\n"); +print ("Example: $0 -type=sysstat -help\n"); +print ("Example: $0 -type=system_event -help\n"); +print "\n\n"; +exit 1; +} + + +sub usage_sysstat { + +print " \nUsage: $0 -type=sysstat [-interval] [-count] [-inst] [-top] [-statname] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-15s %-60s %-10s \n",'Parameter','Comment','Default'); +printf (" %-15s %-60s %-10s \n",'---------','-------','-------'); +printf (" %-15s %-60s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-15s %-60s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-15s %-60s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-15s %-60s %-10s \n",'-TOP=','Number of rows to display','10'); +printf (" %-15s %-60s %-10s \n",'-STATNAME=','ALL - Show all STATS (wildcard allowed)','ALL'); +print ("\n"); +print ("Example: $0 -type=sysstat\n"); +print ("Example: $0 -type=sysstat -inst=BDTO_1,BDTO_2\n"); +print ("Example: $0 -type=sysstat -statname='bytes sent via SQL*Net to client'\n"); +print ("Example: $0 -type=sysstat -statname='%bytes%'\n"); +print "\n\n"; +exit 1; +} + +sub usage_sess_stat { + +print " \nUsage: $0 -type=sess_stat [-interval] [-count] [-inst] [-top] [-statname] [-sid] [-sql_id] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-15s %-60s %-10s \n",'Parameter','Comment','Default'); +printf (" %-15s %-60s %-10s \n",'---------','-------','-------'); +printf (" %-15s %-60s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-15s %-60s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-15s %-60s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-15s %-60s %-10s \n",'-TOP=','Number of rows to display','10'); +printf (" %-15s %-60s %-10s \n",'-STATNAME=','ALL - Show all STATS (wildcard allowed)','ALL'); +printf (" %-15s %-60s %-10s \n",'-SID=','ALL - STAT Agregated for all SID ','ALL'); +printf (" %-15s %-60s %-10s \n",'-SQL_ID=','ALL - Show all sql_id','ALL'); +print ("\n"); +print ("Example: $0 -type=sess_stat\n"); +print ("Example: $0 -type=sess_stat -sid=160\n"); +print ("Example: $0 -type=sess_stat -inst=BDTO_1,BDTO_2\n"); +print ("Example: $0 -type=sess_stat -statname='bytes sent via SQL*Net to client'\n"); +print ("Example: $0 -type=sess_stat -statname='%bytes%' -sid=115\n"); +print "\n\n"; +exit 1; +} + +sub usage_sgastat { + +print " \nUsage: $0 -type=sgastat [-interval] [-count] [-inst] [-top] [-pool] [-name] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-10s %-60s %-10s \n",'Parameter','Comment','Default'); +printf (" %-10s %-60s %-10s \n",'---------','-------','-------'); +printf (" %-10s %-60s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-10s %-60s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-10s %-60s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-10s %-60s %-10s \n",'-TOP=','Number of rows to display','10'); +printf (" %-10s %-60s %-10s \n",'-POOL=','ALL - Show all POOL (wildcard allowed)','ALL'); +printf (" %-10s %-60s %-10s \n",'-NAME=','ALL - Show all NAME (wildcard allowed)','ALL'); +print ("\n"); +print ("Example: $0 -type=sgastat\n"); +print ("Example: $0 -type=sgastat -inst=BDTO_1,BDTO_2\n"); +print ("Example: $0 -type=sgastat -pool='%shared%'\n"); +print ("Example: $0 -type=sgastat -name='%free%'\n"); +print ("Example: $0 -type=sgastat -pool='%shared%' -name='%free%'\n"); +print "\n\n"; +exit 1; +} + +sub usage_asmiostat { + +print " \nUsage: $0 -type=asmiostat [-interval] [-count] [-inst] [-dg] [-fg] [-ip] [-show] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-10s %-60s %-10s \n",'Parameter','Comment','Default'); +printf (" %-10s %-60s %-10s \n",'---------','-------','-------'); +printf (" %-10s %-60s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-10s %-60s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-10s %-60s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-10s %-60s %-10s \n",'-DG=','Diskgroup to collect (comma separated list)','ALL'); +printf (" %-10s %-60s %-10s \n",'-FG=','Failgroup to collect (comma separated list)','ALL'); +printf (" %-10s %-60s %-10s \n",'-IP=','IP (Exadata Cells) to collect (Wildcard allowed)','ALL'); +printf (" %-10s %-60s %-10s \n",'-SHOW=','What to show: inst,fg|ip,dg,dsk (comma separated list)','DG'); +print ("\n"); +print ("Example: $0 -type=asmiostat\n"); +print ("Example: $0 -type=asmiostat -inst=+ASM1\n"); +print ("Example: $0 -type=asmiostat -dg=DATA -show=dg\n"); +print ("Example: $0 -type=asmiostat -dg=data -show=inst,dg,fg\n"); +print ("Example: $0 -type=asmiostat -show=dg,dsk\n"); +print ("Example: $0 -type=asmiostat -show=inst,dg,fg,dsk\n"); +print ("Example: $0 -type=asmiostat -show=ip -ip='%10%'\n"); +print "\n\n"; +exit 1; +} + +sub usage_event_histogram { + +print " \nUsage: $0 -type=event_histogram [-interval] [-count] [-inst] [-top] [-event] [-sort_field] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-15s %-60s %-10s \n",'Parameter','Comment','Default'); +printf (" %-15s %-60s %-10s \n",'---------','-------','-------'); +printf (" %-15s %-60s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-15s %-60s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-15s %-60s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-15s %-60s %-10s \n",'-TOP=','Number of rows to display','10'); +printf (" %-15s %-60s %-10s \n",'-EVENT=','ALL - Show all EVENTS (wildcard allowed)','ALL'); +printf (" %-15s %-60s %-10s \n",'-SORT_FIELD=','WAIT_TIME_MS|COUNT','COUNT'); +print ("\n"); +print ("Example: $0 -type=event_histogram\n"); +print ("Example: $0 -type=event_histogram -inst=BDTO_1,BDTO_2\n"); +print ("Example: $0 -type=event_histogram -event='direct path read temp'\n"); +print ("Example: $0 -type=event_histogram -event='%file%'\n"); +print ("Example: $0 -type=event_histogram -sort_field=WAIT_TIME_MS\n"); +print "\n\n"; +exit 1; +} + +sub usage_librarycache { + +print " \nUsage: $0 -type=librarycache [-interval] [-count] [-inst] [-top] [-namespace] [-sort_field] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-12s %-65s %-10s \n",'Parameter','Comment','Default'); +printf (" %-12s %-65s %-10s \n",'---------','-------','-------'); +printf (" %-12s %-65s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-12s %-65s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-12s %-65s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-12s %-65s %-10s \n",'-TOP=','Number of rows to display','10'); +printf (" %-12s %-65s %-10s \n",'-NAMESPACE=','ALL - Show all NAMESPACE (wildcard allowed)','ALL'); +printf (" %-12s %-65s %-10s \n",'-SORT_FIELD=','RELOADS|INVALIDATIONS|GETS|PINS','GETS'); +print ("\n"); +print ("Example: $0 -type=librarycache\n"); +print ("Example: $0 -type=librarycache -inst=BDTO_1,BDTO_2\n"); +print ("Example: $0 -type=librarycache -sort_field='PINS'\n"); +print ("Example: $0 -type=librarycache -namespace='%TRI%'\n"); +print "\n\n"; +exit 1; +} + +sub usage_sess_event { + +print " \nUsage: $0 -type=sess_event [-interval] [-count] [-inst] [-top] [-event] [-sid] [-sql_id] [-sort_field] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-12s %-65s %-10s \n",'Parameter','Comment','Default'); +printf (" %-12s %-65s %-10s \n",'---------','-------','-------'); +printf (" %-12s %-65s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-12s %-65s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-12s %-65s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-12s %-65s %-10s \n",'-TOP=','Number of rows to display','10'); +printf (" %-12s %-65s %-10s \n",'-EVENT=','ALL - Show all EVENTS (wildcard allowed)','ALL'); +printf (" %-12s %-65s %-10s \n",'-SID=','ALL - EVENT Agregated for all SID','ALL'); +printf (" %-12s %-65s %-10s \n",'-SQL_ID=','ALL - Show all SQL_ID','ALL'); +printf (" %-12s %-65s %-10s \n",'-SORT_FIELD=','NB_WAITS|TIME_WAITED_MICRO','NB_WAITS'); +print ("\n"); +print ("Example: $0 -type=sess_event\n"); +print ("Example: $0 -type=sess_event -sid=160\n"); +print ("Example: $0 -type=sess_event -SORT_FIELD=TIME_WAITED_MICRO\n"); +print ("Example: $0 -type=sess_event -inst=BDTO_1,BDTO_2\n"); +print ("Example: $0 -type=sess_event -event='direct path read temp'\n"); +print ("Example: $0 -type=sess_event -event='%file%' sid=195\n"); +print "\n\n"; +exit 1; +} + +sub usage_segments_stats { + +print " \nUsage: $0 -type=segments_stats [-interval] [-count] [-inst] [-top] [-owner] [-segment] [-statname] [-include_sys] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-15s %-60s %-10s \n",'Parameter','Comment','Default'); +printf (" %-15s %-60s %-10s \n",'---------','-------','-------'); +printf (" %-15s %-60s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-15s %-60s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-15s %-60s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-15s %-60s %-10s \n",'-TOP=','Number of rows to display','10'); +printf (" %-15s %-60s %-10s \n",'-OWNER=','ALL - Show all OWNER','ALL'); +printf (" %-15s %-60s %-10s \n",'-SEGMENT=','ALL - Show all SEGMENTS (wildcard allowed)','ALL'); +printf (" %-15s %-60s %-10s \n",'-STATNAME=','ALL - Show all Stats (wildcard allowed)','ALL'); +printf (" %-15s %-60s %-10s \n",'-INCLUDE_SYS=','Show SYS OBJECTS','N'); +print ("\n"); +print ("Example: $0 -type=segments_stats\n"); +print ("Example: $0 -type=segments_stats -inst=BDTO_1,BDTO_2\n"); +print ("Example: $0 -type=segments_stats -segment='AQ%' -statname='physical%'\n"); +print ("Example: $0 -type=segments_stats -segment='AQ%' -statname='physical writes direct'\n"); +print "\n\n"; +exit 1; +} + +sub usage_enqueue_statistics { + +print " \nUsage: $0 -type=enqueue_statistics [-interval] [-count] [-inst] [-top] [-eq_name] [-eq_type] [-req_reason] [-sort_field] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-15s %-60s %-10s \n",'Parameter','Comment','Default'); +printf (" %-15s %-60s %-10s \n",'---------','-------','-------'); +printf (" %-15s %-60s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-15s %-60s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-15s %-60s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-15s %-60s %-10s \n",'-TOP=','Number of rows to display','10'); +printf (" %-15s %-60s %-10s \n",'-EQ_NAME=','ALL - Show all ENQ NAME (wildcard allowed)','ALL'); +printf (" %-15s %-60s %-10s \n",'-EQ_TYPE=','ALL - Show all ENQ TYPE (wildcard allowed)','ALL'); +printf (" %-15s %-60s %-10s \n",'-REQ_REASON=','ALL - Show all REASONS (wildcard allowed)','ALL'); +printf (" %-15s %-60s %-10s \n",'-SORT_FIELD=','TOTAL_REQ|TOTAL_WAIT|SUCC_REQ|FAILED_REQ|WAIT_TIME','TOTAL_REQ'); +print ("\n"); +print ("Example: $0 -type=enqueue_statistics\n"); +print ("Example: $0 -type=enqueue_statistics -inst=BDTO_1,BDTO_2\n"); +print ("Example: $0 -type=enqueue_statistics -sort_field=WAIT_TIME\n"); +print ("Example: $0 -type=enqueue_statistics -eq_name='%sactio%'\n"); +print ("Example: $0 -type=enqueue_statistics -req_reason='contention'\n"); +print "\n\n"; +exit 1; +} + +sub usage_system_event { + +&connect_db; +my $sqlwait_class = $dbh->prepare('select distinct(WAIT_CLASS) from v$system_event'); +my $wait_class_list; + +$sqlwait_class->execute; +my $wait_id=0; +while ( my ($wait_class) = $sqlwait_class->fetchrow_array) { +$wait_class_list = $wait_class_list."|".$wait_class; +} +# Supress first | +$wait_class_list =~ s/^\|// ; + +print " \nUsage: $0 -type=system_event [-interval] [-count] [-inst] [-top] [-waitclass] [-event] [-sort_field] [-help]\n"; +print " Default Interval : 1 second.\n"; +print " Default Count : Unlimited\n\n"; +printf (" %-15s %-107s %-10s \n",'Parameter','Comment','Default'); +printf (" %-15s %-107s %-10s \n",'---------','-------','-------'); +printf (" %-15s %-107s %-10s \n",'-INST=','ALL - Show all Instance(s) ','ALL'); +printf (" %-15s %-107s %-10s \n",'','CURRENT - Show Current Instance ',''); +printf (" %-15s %-107s %-10s \n\n",'','INSTANCE_NAME,... - choose Instance(s) to display ',''); +printf (" %-15s %-107s %-10s \n",'-TOP=','Number of rows to display ','10'); +printf (" %-15s %-107s %-10s \n",'-WAITCLASS=',$wait_class_list,'ALL'); +printf (" %-15s %-107s %-10s \n",'-EVENT=','ALL - Show all EVENTS (wilcard allowed)','ALL'); +printf (" %-15s %-107s %-10s \n",'-SORT_FIELD=','NB_WAITS|TIME_WAITED_MICRO','NB_WAITS'); +print ("\n"); +print ("Example: $0 -type=system_event\n"); +print ("Example: $0 -type=system_event -inst=BDTO_1,BDTO_2\n"); +print ("Example: $0 -type=system_event -sort_field=TIME_WAITED_MICRO\n"); +print ("Example: $0 -type=system_event -waitclass='User I/O'\n"); +print ("Example: $0 -type=system_event -event='%file%'\n"); +print "\n\n"; +exit 1; +} + +sub debug { + if ($debug==1) { + print $_[0]."\n"; + } +} + + +&main(@ARGV); + diff --git a/vdh/redo_stats.sql b/vdh/redo_stats.sql new file mode 100644 index 0000000..ccb0662 --- /dev/null +++ b/vdh/redo_stats.sql @@ -0,0 +1,114 @@ +set pages 0 +set lines 132 +set pause off +set feedback off +set verify off +col dsnbr noprint + +/* is the archiver falling behind, count should be 1 or 0 */ +select decode(count(*),0,'Archiver is current', + 1,'Archiver is archiving ' || count(*) || ' log...', + 'Archiver has fallen behind by ' || count(*) || ' logs!') + from v$log + where status != 'CURRENT' + and archived = 'NO'; + +/* what is the current log COL::::<# members> */ +select 'Current Online Log:' || chr(9) || + substr(f.member,1,(instr(f.member,'/',1,2) -1)) + || '/.../' || + substr(f.member,(instr(f.member,'/',-1,1)+1)) + || chr(9) || 'Sequence #' || + l.sequence# + from v$logfile f, v$log l + where l.group# = f.group# + and l.status = 'CURRENT' + and l.archived = 'NO' + and rownum = 1; + +/* what are the previous online logs */ +select lc_1.sequence# dsnbr, + 'Previous Online Logs:' || chr(9) || + substr(f.member,1,(instr(f.member,'/',1,2) -1)) + || '/.../' || + substr(f.member,(instr(f.member,'/',-1,1)+1)) + || chr(9) || 'Sequence #' || + lc_1.sequence# + from v$log lc, v$log lc_1, v$logfile f + where lc.sequence# = (select max(l.sequence#) from v$log l) + and lc_1.sequence# = lc.sequence# -1 + and f.group# = lc_1.group# +union +select lc_2.sequence# dsnbr, + ' ' || chr(9) || + substr(f.member,1,(instr(f.member,'/',1,2) -1)) + || '/.../' || + substr(f.member,(instr(f.member,'/',-1,1)+1)) + || chr(9) || 'Sequence #' || + lc_2.sequence# + from v$log lc, v$log lc_2, v$logfile f + where lc.sequence# = (select max(l.sequence#) from v$log l) + and lc_2.sequence# = lc.sequence# -2 + and f.group# = lc_2.group# +union +select lc_3.sequence# dsnbr, + ' ' || chr(9) || + substr(f.member,1,(instr(f.member,'/',1,2) -1)) + || '/.../' || + substr(f.member,(instr(f.member,'/',-1,1)+1)) + || chr(9) || 'Sequence #' || + lc_3.sequence# + from v$log lc, v$log lc_3, v$logfile f + where lc.sequence# = (select max(l.sequence#) from v$log l) + and lc_3.sequence# = lc.sequence# -3 + and f.group# = lc_3.group# +order by 1 desc; + +/* what is the latest archived log LAL:: */ +select 'Latest Archived Log:' || chr(9) || + substr(h.name,(instr(h.name,'/',-1,1)+1)) + || chr(9) || 'Sequence #' || + max(h.sequence#) + from v$archived_log h + where h.sequence# = (select max(l.sequence#) + from v$log l + where l.archived = 'YES' + and l.status = 'INACTIVE') +group by 'Latest Archived Log:' || chr(9) || + substr(h.name,(instr(h.name,'/',-1,1)+1)); + +/* how many minutes since the last log switch MSL: */ +select 'Elapsed Minutes Since Last Log Switch:' || chr(9) || + trunc((sysdate - first_time) * 24 * 60) +from v$log +where status = 'CURRENT' +and sequence# = (select max(sequence#) + 1 + from v$log_history); + +/* what are the last 3 individual switch intervals L3I:<1>:<2>:<3> */ +select 'Prior 3 Actual Switch Intervals:' || chr(9) || '[' || + round((lc.first_time - lc_1.first_time) * 24 * 60,2) + || ']' || chr(9) || '[' || + round((lc_1.first_time - lc_2.first_time) * 24 * 60,2) + || ']' || chr(9) || '[' || + round((lc_2.first_time - lc_3.first_time) * 24 * 60,2) + || ']' +from v$log lc, v$log_history lc_1, v$log_history lc_2, v$log_history lc_3 +where lc.sequence# = (select max(l.sequence#) from v$log l) +and lc_1.sequence# = lc.sequence# -1 +and lc_2.sequence# = lc.sequence# -2 +and lc_3.sequence# = lc.sequence# -3; + +/* what is the avg interval for last 3 log switches L3S: */ +select 'Prior 3 Average Switch Interval:' || chr(9) || +round( ( + round((lc.first_time - lc_1.first_time) * 24 * 60,2) + + round((lc_1.first_time - lc_2.first_time) * 24 * 60,2) + + round((lc_2.first_time - lc_3.first_time) * 24 * 60,2) ) / 3, 1) +from v$log lc, v$log_history lc_1, v$log_history lc_2, v$log_history lc_3 +where lc.sequence# = (select max(l.sequence#) from v$log l) +and lc_1.sequence# = lc.sequence# -1 +and lc_2.sequence# = lc.sequence# -2 +and lc_3.sequence# = lc.sequence# -3; + +set pages 24 diff --git a/vdh/redundant_indexes.sql b/vdh/redundant_indexes.sql new file mode 100644 index 0000000..1f062db --- /dev/null +++ b/vdh/redundant_indexes.sql @@ -0,0 +1,124 @@ +set linesize 165 +set pagesize 54 +set feedback off +set trimspool on +spool RedundantIndex.lst + +COLUMN table_owner FORMAT a10 HEADING 'Table|Owner' +COLUMN table_name FORMAT a30 word_wrapped HEADING 'Table Name' +COLUMN index_name FORMAT a30 word_wrapped HEADING 'Index Name' +COLUMN index_cols FORMAT a30 word_wrapped HEADING 'Index Columns' +column redun_index FORMAT a30 word_wrapped HEADING 'Redundant Index' +COLUMN redun_cols FORMAT a30 word_wrapped HEADING 'Redundant Columns' + +clear breaks + +break on owner skip 0 + +TTITLE - + center 'Redundant Index Analysis' skip 1 - + center '~~~~~~~~~~~~~~~~~~~~~~~~' skip 2 + +SELECT ai.table_owner table_owner, + ai.table_name table_name, + ai.index_name index_name, + ai.columns index_cols, + bi.index_name redun_index, + bi.columns redun_cols +FROM +( SELECT a.table_owner, + a.table_name, + a.index_name, + MAX(DECODE(column_position, 1, +SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 2,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 3,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 4,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 5,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 6,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 7,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 8,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 9,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,10,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,11,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,12,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,13,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,14,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,15,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,16,', +'||SUBSTR(column_name,1,30),NULL)) columns + FROM dba_ind_columns a + WHERE a.index_owner not in ('SYS','SYSTEM') + GROUP BY a.table_owner, + a.table_name, + a.index_owner, + a.index_name) ai, +( SELECT b.table_owner, + b.table_name, + b.index_name, + MAX(DECODE(column_position, 1, +SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 2,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 3,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 4,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 5,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 6,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 7,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 8,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position, 9,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,10,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,11,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,12,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,13,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,14,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,15,', +'||SUBSTR(column_name,1,30),NULL)) || + MAX(DECODE(column_position,16,', +'||SUBSTR(column_name,1,30),NULL)) columns + FROM dba_ind_columns b + GROUP BY b.table_owner, + b.table_name, + b.index_owner, + b.index_name ) bi +WHERE ai.table_owner = bi.table_owner + AND ai.table_name = bi.table_name + AND ai.columns LIKE bi.columns || ',%' + AND ai.columns <> bi.columns +ORDER BY ai.table_owner, + ai.table_name, + bi.index_name +/ +spool off +ttitle off +clear breaks +clear columns +set linesize 96 +set pagesize 60 +set feedback on diff --git a/vdh/report_corrupted_blocks.sql b/vdh/report_corrupted_blocks.sql new file mode 100644 index 0000000..fe452c2 --- /dev/null +++ b/vdh/report_corrupted_blocks.sql @@ -0,0 +1,72 @@ +--- lists the corrupted blocks (as found by RMAN), with the owner and segment information (or indication if these are free blocks) +-- taken from blog post by Michael Dinh (https://www.pythian.com/blog/oracle-free-block-corruption-test-case/) + +column owner format a30 heading "Owner" +column segment_type format a25 heading "Segment Type" +column segment_name format a30 heading "Segment Name" +column partition_name format a30 heading "Partition" +column file# format 9999999 heading "File" +column s_blk# format 999999 heading "Start|Block" +column e_dblk# format 999999 heading "End|Block" +column blk_corrupt format 999G999G999 heading "Blocks|Corrupt" +column description format a15 heading "Description" + +select + e.owner, + e.segment_name, + e.partition_name, + e.segment_type, + c.file#, + greatest(e.block_id, c.block#) s_blk#, + least(e.block_id+e.blocks-1, c.block#+c.blocks-1) e_dblk#, + least(e.block_id+e.blocks-1, c.block#+c.blocks-1) - greatest(e.block_id, c.block#) + 1 blk_corrupt, + null description +from + dba_extents e, + v$database_block_corruption c +where + e.file_id = c.file# + and e.block_id <= c.block# + c.blocks - 1 + and e.block_id + e.blocks - 1 >= c.block# +union +select + s.owner, + s.segment_name, + s.partition_name, + s.segment_type, + c.file#, + header_block s_blk#, + header_block e_blk#, + 1 blk_corrupt, + 'Segment Header' description +from + dba_segments s, + v$database_block_corruption c +where + s.header_file = c.file# + and s.header_block between c.block# and c.block# + c.blocks - 1 +union +SELECT + null owner, + null segment_name, + null partition_name, + null segment_type, + c.file#, + greatest(f.block_id, c.block#) s_blk#, + least(f.block_id+f.blocks-1, c.block#+c.blocks-1) e_blk#, + least(f.block_id+f.blocks-1, c.block#+c.blocks-1)- greatest(f.block_id, c.block#) + 1 blk_corrupt, + 'Free Block' description +from + dba_free_space f, + v$database_block_corruption c +where + f.file_id = c.file# + and f.block_id <= c.block# + c.blocks - 1 + and f.block_id + f.blocks - 1 >= c.block# +order by + owner nulls last, + segment_name nulls last, + partition_name nulls last, + file#, + s_blk# +; diff --git a/vdh/reports.sql b/vdh/reports.sql new file mode 100644 index 0000000..97a9685 --- /dev/null +++ b/vdh/reports.sql @@ -0,0 +1,72 @@ +column dcol new_value mydate noprint + +select to_char(sysdate,'YYYYMMDD') dcol from dual; + +set pagesize 9999 +set trimspool on +set feedback off +set linesize 100 + +column owner format A15 +column segment_name format A20 +column segment_type format A20 +column extends format 9G999 +column max_extents format 9G999 + +spool &mydate._extents_report.txt + +select + owner, + segment_name, + segment_type, + extents, + max_extents +from + dba_segments +where + max_extents - extents <= 3 +order by + owner, + segment_name, + segment_type; + +spool off + + +column dummy noprint +column pct_used format 999D9 heading "%|Used" +column name format a16 heading "Tablespace Name" +column Kbytes format 999G999G999 heading "KBytes" +column used format 999G999G999 heading "Used" +column free format 999G999G999 heading "Free" +column largest format 999G999G999 heading "Largest" +break on report +compute sum of kbytes on report +compute sum of free on report +compute sum of used on report + +spool &mydate._space_report.txt + +select nvl(b.tablespace_name, + nvl(a.tablespace_name,'UNKOWN')) name, + kbytes_alloc kbytes, + kbytes_alloc-nvl(kbytes_free,0) used, + nvl(kbytes_free,0) free, + ((kbytes_alloc-nvl(kbytes_free,0))/ + kbytes_alloc)*100 pct_used, + nvl(largest,0) largest +from ( select sum(bytes)/1024 Kbytes_free, + max(bytes)/1024 largest, + tablespace_name + from sys.dba_free_space + group by tablespace_name ) a, + ( select sum(bytes)/1024 Kbytes_alloc, + tablespace_name + from sys.dba_data_files + group by tablespace_name )b +where a.tablespace_name (+) = b.tablespace_name +order by 1 +/ + +spool off +exit; diff --git a/vdh/reset_expired_users.sql b/vdh/reset_expired_users.sql new file mode 100644 index 0000000..4518e0c --- /dev/null +++ b/vdh/reset_expired_users.sql @@ -0,0 +1,71 @@ +/* Reset the password of expired users to their current value, to open the account again without having the actually change the password + Accepts a username (with wildcards) as input parameter. If no input parameter was given, it will run for all users with status expired / expired(grace) + Note that if in the profile a password_reuse_max is set, the profile for that user needs to be changed before this procedure will work + + Need to run as a sysdba user + Passwords of common users need to be changed on CDB level, PDB users from within the PDB + + Tested on 12cR1 +*/ + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + +pause Unless a username was given as parameter, this script will reset the password for all users with an account status of expired / expired(grace), if this is not what you want: ctrl+c + + +DECLARE + + l_sep varchar2(1); + +BEGIN + + for r_users in + ( select + u.name, + u.password, + u.spare4 + from + sys.user$ u, + sys.user_astatus_map m + where + ( u.astatus = m.status# + or u.astatus = (m.status# + 16 - BITAND(m.status#, 16)) + ) + and m.status in ('EXPIRED', 'EXPIRED(GRACE)') + -- skip oracle maintained users + -- and decode(bitand(u.spare1, 256), 256, 'Y', 'N') = 'N' + and u.name like nvl('&1', '%') + order by + u.name + ) + loop + + BEGIN + + if ( r_users.spare4 is not null + and r_users.password is not null + ) + then + l_sep := ';'; + else + l_sep := ''; + end if; + + execute immediate 'alter user "' || r_users.name || '" identified by values ''' || r_users.spare4 || l_sep || r_users.password || ''''; + dbms_output.put_line('SUCCESS - Password reset for user ' || r_users.name); + + EXCEPTION + when others then + dbms_output.put_line('FAILURE - Could not reset password for user: ' || r_users.name); + dbms_output.put_line(SQLERRM); + END; + + end loop; + +END; +/ + +undef 1 diff --git a/vdh/rman_backup_overview.sql b/vdh/rman_backup_overview.sql new file mode 100644 index 0000000..be2719c --- /dev/null +++ b/vdh/rman_backup_overview.sql @@ -0,0 +1,20 @@ +with backup_set_details +as +( select set_count, set_stamp, session_recid, session_stamp + from v$backup_set_details + group by set_count, set_stamp, set_count, session_recid, session_stamp +) +select rbjd.session_key, rbjd.session_stamp, bs.set_stamp, bs.set_count, bs.backup_type, bs.incremental_level, bs.start_time, + bs.completion_time, bs.elapsed_seconds, bp.piece#, bp.status, bp.start_time, + bp.completion_time, bp.elapsed_seconds, bp.deleted, bp.bytes/1024/1024 mb, bp.compressed +from v$backup_set bs, v$backup_piece bp, backup_set_details bsd, v$rman_backup_job_details rbjd +where bs.set_stamp = bp.set_stamp + and bs.set_count = bp.set_count + and bs.set_stamp = bsd.set_stamp + and bs.set_count = bsd.set_count + and bsd.session_recid = rbjd.session_recid + and bsd.session_stamp = rbjd.session_stamp + and bp.status != 'D' +order by bs.start_time, bp.piece#; + + diff --git a/vdh/rman_backup_overview2.sql b/vdh/rman_backup_overview2.sql new file mode 100644 index 0000000..28949c6 --- /dev/null +++ b/vdh/rman_backup_overview2.sql @@ -0,0 +1,31 @@ +set linesize 200 + +column bjob format a15 +column recid format 99999 +column start_time format a20 +column handle format a25 +column mb format 9G999G999D99 +column media format a50 + +break on bjob skip 1 on recid on backup_type on start_time + +compute sum of mb on bjob + +with backup_set_details +as +( select set_count, set_stamp, session_recid, session_stamp + from v$backup_set_details + group by set_count, set_stamp, set_count, session_recid, session_stamp +) +select rbjd.session_key ||',' || rbjd.session_stamp bjob, bs.recid recid, bs.backup_type, + to_char(bs.start_time, 'DD/MM/YYYY HH24:MI:SS') start_time, + bp.piece#, bp.bytes/1024/1024 mb, bp.compressed, bp.handle, bp.media +from v$backup_set bs, v$backup_piece bp, backup_set_details bsd, v$rman_backup_job_details rbjd +where bs.set_stamp = bp.set_stamp + and bs.set_count = bp.set_count + and bs.set_stamp = bsd.set_stamp + and bs.set_count = bsd.set_count + and bsd.session_recid = rbjd.session_recid + and bsd.session_stamp = rbjd.session_stamp + and bp.status != 'D' +order by bs.start_time, bs.recid, bp.piece#; diff --git a/vdh/rman_backup_overview3.sql b/vdh/rman_backup_overview3.sql new file mode 100644 index 0000000..e9097a1 --- /dev/null +++ b/vdh/rman_backup_overview3.sql @@ -0,0 +1,31 @@ +set linesize 200 + +column bjob format a15 +column recid format 99999 +column start_time format a20 +column handle format a55 +column mb format 9G999G999D99 +column media format a15 + +break on bjob skip 1 on recid on backup_type on start_time + +compute sum of mb on bjob + +with backup_set_details +as +( select set_count, set_stamp, session_recid, session_stamp + from v$backup_set_details + group by set_count, set_stamp, set_count, session_recid, session_stamp +) +select rbjd.session_recid ||',' || rbjd.session_stamp bjob, bs.recid recid, bs.backup_type, + to_char(bs.start_time, 'DD/MM/YYYY HH24:MI:SS') start_time, + bp.piece#, bp.bytes/1024/1024 mb, bp.compressed, bp.handle, bp.media +from v$backup_set bs, v$backup_piece bp, backup_set_details bsd, v$rman_backup_job_details rbjd +where bs.set_stamp = bp.set_stamp + and bs.set_count = bp.set_count + and bs.recid = bsd.recid + and bs.stamp = bsd.stamp + and bsd.session_recid = rbjd.session_recid + and bsd.session_stamp = rbjd.session_stamp + and bp.status != 'D' +order by bjob, bs.start_time, bs.recid, bp.piece#; diff --git a/vdh/rman_backup_sizes.sql b/vdh/rman_backup_sizes.sql new file mode 100644 index 0000000..3d415f3 --- /dev/null +++ b/vdh/rman_backup_sizes.sql @@ -0,0 +1,47 @@ +column mb format 999G999G999D99 +column backup_job format a20 +column backup_type format a10 heading TYPE +column start_time format a25 +column end_time format a25 +column incremental_level format 999 heading IL +compute sum of mb on backup_job +compute sum of mb on report + +break on backup_job skip 1 on start_time on end_time on report + +with backup_set_details +as +( select + distinct + set_count, set_stamp, session_recid, session_stamp, backup_type, incremental_level, compressed + from + v$backup_set_details +) +select + rbjd.session_key || ',' || rbjd.session_stamp backup_job, + to_char(rbjd.start_time, 'DY DD/MM/YYYY HH24:MI:SS') start_time, + to_char(rbjd.end_time, 'DY DD/MM/YYYY HH24:MI:SS') end_time, + decode(bsd.backup_type,'L','ARCHIVE', 'DATA') backup_type, + bsd.incremental_level, + bsd.compressed, + sum(bp.bytes)/1024/1024 mb +from + v$backup_piece bp, + backup_set_details bsd, + v$rman_backup_job_details rbjd +where + bsd.set_stamp = bp.set_stamp + and bsd.set_count = bp.set_count + and bsd.session_recid = rbjd.session_recid + and bsd.session_stamp = rbjd.session_stamp + and bp.status != 'D' +group by + rbjd.session_key, + rbjd.session_stamp, + rbjd.start_time, + rbjd.end_time, + decode(bsd.backup_type,'L','ARCHIVE', 'DATA'), + bsd.incremental_level, + bsd.compressed +order by + rbjd.start_time; diff --git a/vdh/rmancat_all_available_backupsets.sql b/vdh/rmancat_all_available_backupsets.sql new file mode 100644 index 0000000..1ccae6a --- /dev/null +++ b/vdh/rmancat_all_available_backupsets.sql @@ -0,0 +1,134 @@ +-- list all available backupsets with summations per report, device type, (unique) database and backupjob session +-- this query can be used to give a good idea about the active size of the backups (either on tape or on disk) +-- note that this does not take in account any compression or deduplication (or duplication for that matter) done by the storage or backup software +-- There is grouping done on the backup pieces to combine the output of multiple sessions / pieces to limit the output but keep track of the different stages of the backups +-- The report shows for instance different lines within 1 backup session for the backup archive logs, backup of the database, backup of the new archivelogs and finally backup of the controlfile, but +-- it would not show seperate lines for each of the backup pieces or channels +-- +-- The elapsed time reflects the wall clock time, but can be misleading as a for instance part of the backup is no longer available +-- (eg archivelog backups before and after a db backup are available, but the db backup itself not, in which case the time spend on the db backup would still be included in the archivelog backup) + +-- This query needs to run against the rman repository catalog + + + +set linesize 300 +set pages 50000 + +column db_id format 9999999999999 +column name format a8 +column db_unique_name format a15 +column device_type format a10 +column subjob_mb format 999G999G999D99 +column elapsed_time format a12 +column subjob_start_time format a16 +column subjob_end_time format a16 + +break on device_type skip page on dbid on name skip 1 on db_unique_name on session_key skip 1 on report + +compute sum of subjob_mb on session_key +compute sum of subjob_mb on db_unique_name +compute sum of subjob_mb on device_type +compute sum of subjob_mb on report + +with available_bs as +( select + distinct + db_key, + site_key, + session_key, + ( case backup_type + when 'D' then 'Full' + when 'L' then 'Logfile' + when 'I' then 'Incremental' + end + ) as long_backup_type, + incremental_level, + device_type, + subjob_start_time, + subjob_completion_time, +-- subjob_elapsed_sec, + ((subjob_completion_time - subjob_start_time) * 24 * 60 * 60) subjob_elapsed_sec, + subjob_bytes/1024/1024 subjob_mb + from + ( select + db_key, + site_key, + session_key, + backup_type, + incremental_level, + device_type, + min(start_time) over (partition by session_key, backup_type, change_grp) subjob_start_time, + max(completion_time) over (partition by session_key, backup_type, change_grp) subjob_completion_time, +-- sum(elapsed_seconds) over (partition by session_key, backup_type, change_grp) subjob_elapsed_sec, + sum(bytes) over (partition by session_key, backup_type, change_grp) subjob_bytes + from + ( select + db_key, + site_key, + session_key, + backup_type, + incremental_level, + device_type, + start_time, + completion_time, +-- elapsed_seconds, + bytes, + -- create a running total of the change marks, which gives a grouping + -- as the change mark is 0 when the backup type does not change, the total only increases when the backup type has changed between 2 subsequent records + -- this grouping id can now be used to split a group when the backup type has changed in between + sum(change_mark) over (partition by session_key, backup_type order by start_time) change_grp + from + ( select + db_key, + site_key, + session_key, + backup_type, + incremental_level, + device_type, + start_time, + completion_time, +-- elapsed_seconds, + bytes, + -- mark where the backup type changes with a 1, when the backup type does not change set the value to 0 + (case when backup_type = (lag(backup_type) over (partition by session_key order by start_time)) then 0 else 1 end) as change_mark + from + rc_backup_piece_details + ) + ) + ) +) +select + abs.device_type, + db.dbid, + db.name, + st.db_unique_name, + abs.session_key, + to_char(abs.subjob_start_time, 'DD/MM/YYYY HH24:MI') subjob_start_time, + to_char(abs.subjob_completion_time, 'DD/MM/YYYY HH24:MI') subjob_end_time, + ( decode(abs.subjob_elapsed_sec, 0, 0, extract(day from (systimestamp + numtodsinterval(abs.subjob_elapsed_sec,'second') - systimestamp))) || ' ' || + decode(abs.subjob_elapsed_sec, 0, 0, extract(hour from (systimestamp + numtodsinterval(abs.subjob_elapsed_sec,'second') - systimestamp))) || ':' || + decode(abs.subjob_elapsed_sec, 0, 0, extract(minute from (systimestamp + numtodsinterval(abs.subjob_elapsed_sec,'second') - systimestamp))) || ':' || + decode(abs.subjob_elapsed_sec, 0, 0, floor(extract(second from (systimestamp + numtodsinterval(abs.subjob_elapsed_sec,'second') - systimestamp)))) + ) as elapsed_time, + abs.long_backup_type, + abs.incremental_level, + abs.subjob_mb +from + available_bs abs, + rc_site st, + rc_database db +where + abs.site_key = st.site_key + and db.db_key = abs.db_key +order by + abs.device_type, + db.dbid, + db.name, + st.db_unique_name, + abs.subjob_start_time, + long_backup_type +; + +clear breaks; +clear computes; diff --git a/vdh/rmancat_historic_backup_report.sql b/vdh/rmancat_historic_backup_report.sql new file mode 100644 index 0000000..d4e0ebc --- /dev/null +++ b/vdh/rmancat_historic_backup_report.sql @@ -0,0 +1,53 @@ +-- gives an historical overview of the backups for all the databases in the past year (whether or not they are still available) +-- the reported sizes and timings are for the entire (original) set and may not reflect the real status +-- +-- needs to be executed against the rman catalog schema + +set linesize 300 +set pages 50000 + +column time_taken_display format a15 +column GB format 999G999D99 +column db_unique_name format a15 +column start_time format a18 +column end_time format a18 + +break on db_unique_name skip 1 on dbid + +with + rman_history as + ( select + distinct + rs.session_key, + rs.db_key, + rs.site_key + from + rc_rman_status rs + ) +select + site.db_unique_name, + db.dbid, + jobd.session_key, + to_char(jobd.start_time,'DD/MM/YYYY HH24:MI') start_time , + to_char(jobd.end_time,'DD/MM/YYYY HH24:MI') end_time, + jobd.time_taken_display, + jobd.input_type, + jobd.status, + jobd.output_device_type, + (jobd.output_bytes/1024/1024/1024) GB +from + rman_history rh, + rc_site site, + rc_database db, + rc_rman_backup_job_details jobd +where + site.site_key = rh.site_key + and db.db_key = rh.db_key + and rh.session_key = jobd.session_key + and jobd.start_time >= add_months(trunc(sysdate),-12) +order by + site.db_unique_name, + jobd.start_time +; + +clear breaks; diff --git a/vdh/rmancat_report_backups.sql b/vdh/rmancat_report_backups.sql new file mode 100644 index 0000000..e52d5a4 --- /dev/null +++ b/vdh/rmancat_report_backups.sql @@ -0,0 +1,68 @@ +-- gives an historical overview of the past backups (both backupset and backup copy), for which at least a part exists on disk for all databases +-- the reported sizes and timings are for the entire (original) set and may not reflect the real status +-- +-- needs to be executed against the rman catalog schema + +set linesize 300 +set pages 50000 + +column time_taken_display format a15 +column GB format 999G999D99 +column db_unique_name format a15 +column start_time format a18 +column end_time format a18 + +break on db_unique_name skip 1 on dbid on output_device_type on report + +compute sum of GB on output_device_type +compute sum of GB on report + +with + rman_history as + ( select + distinct + rs.session_key, + rs.db_key, + rs.site_key + from + rc_rman_status rs + ) +select + site.db_unique_name, + db.dbid, + jobd.session_key, + jobd.output_device_type, + to_char(jobd.start_time,'DD/MM/YYYY HH24:MI') start_time , + to_char(jobd.end_time,'DD/MM/YYYY HH24:MI') end_time, + jobd.time_taken_display, + jobd.input_type, + jobd.status, + (jobd.output_bytes/1024/1024/1024) GB +from + rman_history rh, + rc_site site, + rc_database db, + rc_rman_backup_job_details jobd +where + site.site_key = rh.site_key + and db.db_key = rh.db_key + and rh.session_key = jobd.session_key + and jobd.session_key in + ( select + session_key + from + rc_backup_set_details + union all + select + session_key + from + rc_backup_copy_details + ) +order by + site.db_unique_name, + jobd.output_device_type, + jobd.start_time +; + +clear breaks; +clear computes; diff --git a/vdh/rmancat_reports.sql b/vdh/rmancat_reports.sql new file mode 100644 index 0000000..17f59ca --- /dev/null +++ b/vdh/rmancat_reports.sql @@ -0,0 +1,110 @@ +set linesize 300 +column object_type format a15 +column row_type format a10 +column db_unique_name format a15 +column status format a25 +column mb_in format 999G999G999 +column mb_out format 999G999G999 + +break on db_unique_name skip 2 on dbid on session_key skip 1 + +select + site.db_unique_name, + db.dbid, + rs.session_key, + rs.row_type, + rs.row_level, + to_char(rs.start_time, 'DD/MM/YYYY HH24:MI:SS') s_start_time, + to_char(rs.end_time, 'DD/MM/YYYY HH24:MI:SS') s_end_time, + rs.operation, + rs.status, + rs.object_type, + rs.input_bytes/1024/1024 mb_in, + rs.output_bytes/1024/1024 mb_out, + rs.output_device_type +from + rc_rman_status rs, + rc_site site, + rc_database db +where + rs.site_key = site.site_key + and rs.db_key = db.db_key + and rs.session_key in + ( select + session_key + from + rc_rman_status + where + operation = 'BACKUP' + ) + and rs.session_key in + ( select + session_key + from + rc_rman_status + where + operation = 'RMAN' + and start_time > sysdate -1 + ) +order by + db_unique_name, + session_key, + row_level, + start_time +; + +clear breaks + + + +break on s_start_date skip 1 on report + +compute sum of mb_in on s_start_date report +comput sum of mb_out on s_start_date report + +select + to_char(start_day, 'DD/MM/YYYY') s_start_date, + db_unique_name, + dbid, + mb_in, + mb_out +from + ( select + site.db_unique_name, + db.dbid, + trunc(rs.start_time) start_day, + rs.output_device_type, + sum(rs.input_bytes)/1024/1024 mb_in, + sum(rs.output_bytes)/1024/1024 mb_out + from + rc_rman_status rs, + rc_site site, + rc_database db + where + rs.site_key = site.site_key + and rs.db_key = db.db_key + and rs.row_level = 0 + and rs.operation = 'RMAN' + and rs.session_key in + ( select + session_key + from + rc_rman_status + where + operation = 'BACKUP' + ) + and start_time > sysdate -7 + group by + db_unique_name, + dbid, + trunc(rs.start_time), + rs.output_device_type + ) +order by + start_day, + db_unique_name, + output_device_type +; + +clear breaks +clear computes diff --git a/vdh/rsrc_cg_ru.sql b/vdh/rsrc_cg_ru.sql new file mode 100644 index 0000000..4d9c5e0 --- /dev/null +++ b/vdh/rsrc_cg_ru.sql @@ -0,0 +1,77 @@ +set linesize 200 +set pages 99999 + +col name format a30 heading "Name" +col active_sessions format 999 heading "Active|Sessions" +col execution_waiters format 999 heading "Execution|Waiters" +col requests format 9G999G999 heading "Requests" +col cpu_wait_time_sec format 999G999G999 heading "Waited|CPU Sec" +col cpu_waits format 99G999G999 heading "CPU|Waits" +col consumed_cpu_time_sec format 99G999G999 heading "Consumed|CPU Sec" +col yields format 9G999G999 heading "Yields" +col cpu_pct_used format 999D99 heading "CPU %|Used " +col pqs_completed format 999G999 heading "Completed|PQ Stat" +col pq_servers_used format 999G999G999 heading "Tot Servers|used" +col pqs_queued format 9G999 heading "PQ|queued" +col current_pqs_queued format 9G999 heading "PQ Curr|queued" +col pq_active_time_sec format 999G999G999 heading "PQ|Active sec" +col pq_queued_time_sec format 999G999G999 heading "PQ|Queued sec" +col pq_queue_time_outs format 999G999 heading "PQ|Timeouts" + +compute sum of consumed_cpu_time_sec on report +compute sum of cpu_pct_used on report +compute sum of cpu_wait_time_sec on report +compute sum of pqs_completed on report +compute sum of pq_servers_used on report +compute sum of pqs_queued on report +compute sum of pq_active_time_sec on report +compute sum of pq_queued_time_sec on report +compute sum of pq_queue_time_outs on report + +break on report + +select + decode (name, '_ORACLE_BACKGROUND_GROUP_', 'BACKGROUND', name) name, + active_sessions, + execution_waiters, + requests, + (consumed_cpu_time/1000) consumed_cpu_time_sec, + cpu_waits, + (cpu_wait_time/1000) cpu_wait_time_sec, + (ratio_to_report(consumed_cpu_time) over () * 100) cpu_pct_used, + yields, + pqs_completed, + pq_servers_used, + pqs_queued, + current_pqs_queued, + pq_active_time/1000 pq_active_time_sec, + pq_queued_time/1000 pq_queued_time_sec, + pq_queue_time_outs +from + ( select + name, + sum(active_sessions) active_sessions, + sum(execution_waiters) execution_waiters, + sum(requests) requests, + sum(consumed_cpu_time) consumed_cpu_time, + sum(cpu_waits) cpu_waits, + sum(cpu_wait_time) cpu_wait_time, + sum(yields) yields, + sum(pqs_completed) pqs_completed, + sum(pq_servers_used) pq_servers_used, + sum(pqs_queued) pqs_queued, + sum(current_pqs_queued) current_pqs_queued, + sum(pq_active_time) pq_active_time, + sum(pq_queued_time) pq_queued_time, + sum(pq_queue_time_outs) pq_queue_time_outs + from + gv$rsrc_consumer_group + group by + name + ) +order by + name +; + +clear breaks +clear computes diff --git a/vdh/rsrc_cg_ru_hist.sql b/vdh/rsrc_cg_ru_hist.sql new file mode 100644 index 0000000..7ae22a0 --- /dev/null +++ b/vdh/rsrc_cg_ru_hist.sql @@ -0,0 +1,77 @@ +set linesize 250 +set pages 50000 + +col sequence# format 999 heading "Seq" +col plan_name format a25 heading "Plan Name" +col start_time format a22 heading "Start Time" +col end_time format a22 heading "End Time" +col enabled_by_scheduler format a10 heading "Enabled by|scheduler" +col consumer_group format a25 heading "Consumer Group Name" +col cpu_wait_time_sec format 999G999G999 heading "Waited|CPU Sec" +col cpu_waits format 99G999G999 heading "CPU|Waits" +col consumed_cpu_time_sec format 99G999G999 heading "Consumed|CPU Sec" +col yields format 9G999G999 heading "Yields" +col cpu_pct_used format 999D99 heading "CPU %|Used " +col pqs_completed format 999G999 heading "Completed|PQ Stat" +col pq_servers_used format 999G999G999 heading "Tot Servers|used" +col pqs_queued format 9G999 heading "PQ|queued" +col pq_active_time_sec format 999G999G999 heading "PQ|Active sec" +col pq_queued_time_sec format 999G999G999 heading "PQ|Queued sec" +col pq_queue_time_outs format 999G999 heading "PQ|Timeouts" +col active_sess_limit_hits format 999G999 heading "A Sess|Limits" + +compute sum of consumed_cpu_time_sec on start_time +compute sum of cpu_pct_used on start_time +compute sum of cpu_wait_time_sec on start_time +compute sum of pqs_completed on start_time +compute sum of pq_servers_used on start_time +compute sum of pqs_queued on start_time +compute sum of pq_active_time_sec on start_time +compute sum of pq_queued_time_sec on start_time +compute sum of pq_queue_time_outs on start_time + +break on start_time skip page on plan_name on enabled_by_scheduler on window_name + +select + to_char(start_time, 'DD/MM/YYYY HH24:MI:SS') start_time, + plan_name, + decode (consumer_group, '_ORACLE_BACKGROUND_GROUP_', 'BACKGROUND', consumer_group) consumer_group, + consumed_cpu_time_sec, cpu_waits, cpu_wait_time_sec, + (ratio_to_report(consumed_cpu_time_sec) over (partition by start_time) * 100) cpu_pct_used, + yields, pqs_completed, pq_servers_used, pqs_queued, pq_active_time_sec, pq_queued_time_sec, + pq_queue_time_outs,active_sess_limit_hits +from + ( select + ph.start_time, + ph.name plan_name, + cgh.name consumer_group, + sum(cgh.consumed_cpu_time)/1000 consumed_cpu_time_sec, + sum(cgh.cpu_waits) cpu_waits, + sum(cgh.cpu_wait_time)/1000 cpu_wait_time_sec, + sum(cgh.yields) yields, + sum(cgh.pqs_completed) pqs_completed, + sum(cgh.pq_servers_used) pq_servers_used, + sum(cgh.pqs_queued) pqs_queued, + sum(cgh.pq_active_time)/1000 pq_active_time_sec, + sum(cgh.pq_queued_time)/1000 pq_queued_time_sec, + sum(cgh.pq_queue_time_outs) pq_queue_time_outs, + sum(cgh.active_sess_limit_hit) active_sess_limit_hits + from + gv$rsrc_cons_group_history cgh, + gv$rsrc_plan_history ph + where + cgh.inst_id = ph.inst_id + and cgh.sequence# = ph.sequence# + group by + ph.start_time, + ph.name, + cgh.name + ) a +order by + a.start_time, + plan_name, + consumer_group +; + +clear breaks +clear computes diff --git a/vdh/rsrc_cg_ru_hist_per_inst.sql b/vdh/rsrc_cg_ru_hist_per_inst.sql new file mode 100644 index 0000000..3e75abe --- /dev/null +++ b/vdh/rsrc_cg_ru_hist_per_inst.sql @@ -0,0 +1,62 @@ +set linesize 200 +set pages 50000 + +col inst_id format 999 heading "Inst" +--col sequence# format 999 heading "Seq" +col plan_name format a25 heading "Plan Name" +col start_time format a22 heading "Start Time" +col end_time format a22 heading "End Time" +col enabled_by_scheduler format a10 heading "Enabled by|scheduler" +col consumer_group format a25 heading "Consumer Group Name" +col cpu_wait_time_sec format 999G999G999 heading "Waited|CPU Sec" +col cpu_waits format 99G999G999 heading "CPU|Waits" +col consumed_cpu_time_sec format 99G999G999 heading "Consumed|CPU Sec" +col yields format 9G999G999 heading "Yields" +col cpu_pct_used format 999D99 heading "CPU %|Used " +col pqs_completed format 999G999 heading "Completed|PQ Stat" +col pq_servers_used format 999G999G999 heading "Tot Servers|used" +col pqs_queued format 9G999 heading "PQ|queued" +col pq_active_time_sec format 999G999G999 heading "PQ|Active sec" +col pq_queued_time_sec format 999G999G999 heading "PQ|Queued sec" +col pq_queue_time_outs format 999G999 heading "PQ|Timeouts" + +compute sum of consumed_cpu_time_sec on inst_id +compute sum of cpu_pct_used on inst_id +compute sum of cpu_wait_time_sec on inst_id +compute sum of pqs_completed on inst_id +compute sum of pq_servers_used on inst_id +compute sum of pqs_queued on inst_id +compute sum of pq_active_time_sec on inst_id +compute sum of pq_queued_time_sec on inst_id +compute sum of pq_queue_time_outs on inst_id + +break on start_time skip page on inst_id skip 1 on plan_name on start_time on enabled_by_scheduler on window_name + +select + to_char(ph.start_time, 'DD/MM/YYYY HH24:MI:SS') start_time, + ph.inst_id, + ph.name plan_name, +-- to_char(ph.end_time, 'DD/MM/YYYY HH24:MI:SS') end_time, + decode (cgh.name, '_ORACLE_BACKGROUND_GROUP_', 'BACKGROUND', cgh.name) consumer_group, + cgh.consumed_cpu_time/1000 consumed_cpu_time_sec, + cgh.cpu_waits, + cgh.cpu_wait_time/1000 cpu_wait_time_sec, + (ratio_to_report(cgh.consumed_cpu_time) over (partition by cgh.inst_id, cgh.sequence#) * 100) cpu_pct_used, + cgh.yields, cgh.pqs_completed, cgh.pq_servers_used, cgh.pqs_queued, + cgh.pq_active_time/1000 pq_active_time_sec, + cgh.pq_queued_time/1000 pq_queued_time_sec, + cgh.pq_queue_time_outs +from + gv$rsrc_cons_group_history cgh, + gv$rsrc_plan_history ph +where + cgh.inst_id = ph.inst_id + and cgh.sequence# = ph.sequence# +order by + ph.start_time, + ph.inst_id, + consumer_group +; + +clear breaks +clear computes diff --git a/vdh/rsrc_cg_ru_per_inst.sql b/vdh/rsrc_cg_ru_per_inst.sql new file mode 100644 index 0000000..83b8adf --- /dev/null +++ b/vdh/rsrc_cg_ru_per_inst.sql @@ -0,0 +1,61 @@ +set linesize 200 +set pages 99999 + +ttitle left "Instance ID:" instid skip 2 + +col inst_id new_value instid noprint + +col name format a30 heading "Name" +col active_sessions format 999 heading "Active|Sessions" +col execution_waiters format 999 heading "Execution|Waiters" +col requests format 9G999G999 heading "Requests" +col cpu_wait_time_sec format 999G999G999 heading "Waited|CPU Sec" +col cpu_waits format 99G999G999 heading "CPU|Waits" +col consumed_cpu_time_sec format 99G999G999 heading "Consumed|CPU Sec" +col yields format 9G999G999 heading "Yields" +col cpu_pct_used format 999D99 heading "CPU %|Used " +col pqs_completed format 999G999 heading "Completed|PQ Stat" +col pq_servers_used format 999G999G999 heading "Tot Servers|used" +col pqs_queued format 9G999 heading "PQ|queued" +col pq_active_time_sec format 999G999G999 heading "PQ|Active sec" +col pq_queued_time_sec format 999G999G999 heading "PQ|Queued sec" +col pq_queue_time_outs format 999G999 heading "PQ|Timeouts" + +compute sum of consumed_cpu_time_sec on inst_id +compute sum of cpu_pct_used on inst_id +compute sum of cpu_wait_time_sec on inst_id +compute sum of pqs_completed on inst_id +compute sum of pq_servers_used on inst_id +compute sum of pqs_queued on inst_id +compute sum of pq_active_time_sec on inst_id +compute sum of pq_queued_time_sec on inst_id +compute sum of pq_queue_time_outs on inst_id + +break on inst_id skip page + +select + inst_id, + decode (name, '_ORACLE_BACKGROUND_GROUP_', 'BACKGROUND', name) name, + active_sessions, execution_waiters, requests, + consumed_cpu_time/1000 consumed_cpu_time_sec, + cpu_waits, + cpu_wait_time/1000 cpu_wait_time_sec, + (ratio_to_report(consumed_cpu_time) over (partition by inst_id) * 100) cpu_pct_used, + yields + pqs_completed, + pq_servers_used, + pqs_queued, + pq_active_time/1000 pq_active_time_sec, + pq_queued_time/1000 pq_queued_time_sec, + pq_queue_time_outs +from + gv$rsrc_consumer_group +order by + inst_id, + name +; + +clear breaks +clear computes +ttitle off +column inst_id clear diff --git a/vdh/rsrc_metric.sql b/vdh/rsrc_metric.sql new file mode 100644 index 0000000..1c0fb28 --- /dev/null +++ b/vdh/rsrc_metric.sql @@ -0,0 +1,23 @@ +select + to_char(begin_time, 'DD/MM/YYYY HH24:MI:SS') begin_time, + to_char(end_time, 'DD/MM/YYYY HH24:MI:SS') end_time, + consumer_group_name, cpu_wait_time, num_cpus, cpu_utilization_limit, + avg_cpu_utilization, avg_running_sessions, avg_waiting_sessions +from + v$rsrcmgrmetric +order by + consumer_group_name +; + + +select + to_char(begin_time, 'DD/MM/YYYY HH24:MI:SS') begin_time, + to_char(end_time, 'DD/MM/YYYY HH24:MI:SS') end_time, + consumer_group_name, cpu_wait_time, num_cpus, cpu_utilization_limit, + avg_cpu_utilization, avg_running_sessions, avg_waiting_sessions +from + v$rsrcmgrmetric_history +order by + begin_time, + consumer_group_name +; diff --git a/vdh/rsrc_plan_history.sql b/vdh/rsrc_plan_history.sql new file mode 100644 index 0000000..940f841 --- /dev/null +++ b/vdh/rsrc_plan_history.sql @@ -0,0 +1,32 @@ +col start_time format a22 heading "Start Time" +col end_time format a22 heading "End Time" +col inst_id format 999 heading "Inst" +col name format a30 heading "Name" +col enabled_by_scheduler format a10 heading "Enabled by|scheduler" +col window_name format a20 heading "Window" +col allowed_automated_switches format a8 heading "Switches|allowed" +col cpu_managed format a7 heading "CPU|Managed" +col instance_caging format a7 heading "Inst|Caging" +col parallel_execution_managed format a10 heading "PXE|Managed" + +break on start_time skip 1 on end_time + +select + to_char(start_time, 'DD/MM/YYYY HH24:MI:SS') start_time, + to_char(end_time, 'DD/MM/YYYY HH24:MI:SS') end_time, + inst_id, + name, + enabled_by_scheduler, + window_name, + allowed_automated_switches, + cpu_managed, + instance_caging, + parallel_execution_managed +from + gv$rsrc_plan_history ph +order by + ph.start_time, + inst_id +; + +clear breaks diff --git a/vdh/rsrc_sessinfo.sql b/vdh/rsrc_sessinfo.sql new file mode 100644 index 0000000..469deb4 --- /dev/null +++ b/vdh/rsrc_sessinfo.sql @@ -0,0 +1,51 @@ +set linesize 200 +set pages 9999 + +col username format a20 heading "Username" +col service_name format a15 heading "Service" +col original_cg format a30 heading "Original|Consumer Group" +col mapped_cg format a30 heading "Mapped|Consumer Group" +col current_cg format a30 heading "Current|Consumer Group" +col mapping_attribute format a20 heading "Mapping|Attribute" +col state format a15 heading "State" +col counted format 9G999 heading "Counted" + +break on username on service_name + +select + sess.username, + sess.service_name, + cg2.consumer_group original_cg, + rsess.mapped_consumer_group mapped_cg, + cg1.consumer_group current_cg, + rsess.mapping_attribute, + rsess.state, + count(*) counted +from + gv$rsrc_session_info rsess, + gv$session sess, + dba_rsrc_consumer_groups cg1, + dba_rsrc_consumer_groups cg2 +where + rsess.inst_id = sess.inst_id + and rsess.sid = sess.sid + and rsess.current_consumer_group_id = cg1.consumer_group_id + and rsess.orig_consumer_group_id = cg2.consumer_group_id +group by + sess.username, + sess.service_name, + rsess.mapping_attribute, + cg1.consumer_group, + cg2.consumer_group, + rsess.mapped_consumer_group, + rsess.state +order by + sess.username, + sess.service_name, + original_cg, + mapped_cg, + current_cg, + state +; + +clear breaks diff --git a/vdh/rsrc_show_config.sql b/vdh/rsrc_show_config.sql new file mode 100644 index 0000000..9181a53 --- /dev/null +++ b/vdh/rsrc_show_config.sql @@ -0,0 +1,260 @@ +set linesize 250 +set pages 50000 + +col plan format a30 heading "Plan Name" +col mgmt_method format a10 heading "MGMT|Method" +col status format a10 heading "Status" +col sub_plan format a8 heading "Sub Plan" +col num_plan_directives format 999 heading "Directives" +col comments format a50 word_wrapped heading "Comments" + +select + plan, + mgmt_method, + status, + sub_plan, + num_plan_directives, + comments +from + dba_rsrc_plans +order by + plan +; + +col name format a25 heading "Category Name" +col status format a10 heading "Status" +col mandatory format a5 heading "Mandatory" +col comments format a100 word_wrapped heading "Comment" + +select + name, + status, + mandatory, + comments +from + dba_rsrc_categories +order by + name +; + +col consumer_group_id format 999999 heading "Consumer|ID" +col consumer_group format a30 heading "Consumer|Group" +col mgmt_method format a15 heading "MGMT Method" +col internal_use format a8 heading "Internal|Only" +col category format a25 heading "Category Name" +col status format a10 heading "Status" +col mandatory format a9 heading "Mandatory" +col comments format a70 word_wrapped heading "Comment" + +select + consumer_group, + mgmt_method, + internal_use, + category, + mandatory, + status, + comments +from + dba_rsrc_consumer_groups +order by + consumer_group +; + +col plan format a30 heading "Plan Name" +col group_or_subplan format a30 heading "Consumer Group|Sub-Plan" +col mgmt_p1 format 999 heading "MGMT|P1" +col mgmt_p2 format 999 heading "MGMT|P2" +col mgmt_p3 format 999 heading "MGMT|P3" +col mgmt_p4 format 999 heading "MGMT|P4" +col mgmt_p5 format 999 heading "MGMT|P5" +col mgmt_p6 format 999 heading "MGMT|P6" +col mgmt_p7 format 999 heading "MGMT|P7" +col mgmt_p8 format 999 heading "MGMT|P8" +col utilization_limit format 999 heading "UTL|LIM" +col queueing_p1 format 99999 heading "Queueing|TimeOut" +col parallel_target_percentage format 999 heading "Parallel|Target %" +col parallel_degree_limit_p1 format 99999 heading "Parallel|Limit" +col active_sess_pool_p1 format 999999 heading "Session|Limit" +col status format a10 heading "Status" + +break on plan skip page + +select + plan, + type, + group_or_subplan, +-- cpu_p1, +-- cpu_p2, +-- cpu_p3, +-- cpu_p4, +-- cpu_p5, +-- cpu_p6, +-- cpu_p7, +-- cpu_p8, + mgmt_p1, + mgmt_p2, + mgmt_p3, + mgmt_p4, + mgmt_p5, + mgmt_p6, + mgmt_p7, + mgmt_p8, + utilization_limit, + parallel_degree_limit_p1, + parallel_target_percentage, + queueing_p1, + active_sess_pool_p1, + status +from + dba_rsrc_plan_directives +order by + plan, + type desc, + group_or_subplan +; + +clear breaks + +column plan format a40 heading "Plan Name or Consumer Group" +column type format a15 heading "Type" + +column break1 noprint + +break on break1 skip page + +with plan_directives as + ( select + plan, group_or_subplan, type + from + dba_rsrc_plan_directives + union + select + plan, plan, 'TOP' + from + dba_rsrc_plans + where + sub_plan = 'NO' + ) +select + lpad(' ',(level -1)*2, '-') || decode (pd.type, 'TOP', pd.plan, pd.group_or_subplan) plan, + decode(type, 'TOP', NULL, type) type, + level, + connect_by_root(pd.plan) break1 +from + plan_directives pd +start with + pd.type = 'TOP' +connect by nocycle + pd.plan = prior pd.group_or_subplan +order siblings by + pd.plan, + pd.type desc +; + +clear breaks +column break1 clear + +col priority format 9999 heading "Priority" +col attribute format a25 heading "Session Attribute" +col status format a10 heading "Status" + +select + priority, + attribute, + status +from + dba_rsrc_mapping_priority +order by + priority, + attribute +; + +col consumer_group format a30 heading "Consumer Group" +col attribute format a25 heading "Session Attribute" +col value format a30 heading "Attribute Value" +col status format a10 heading "Status" + +break on consumer_group skip 1 + +select + consumer_group, + attribute, + value, + status +from + dba_rsrc_group_mappings +order by + consumer_group, + attribute, + value +; + +clear breaks + +column grantee format a30 heading "User" +column granted_group format a30 heading "Consumer Group" +column grant_option format a6 heading "Grant|Option" +column initial_group format a7 heading "Initial|Group" + +break on grantee + +select + grantee, + granted_group, + grant_option, + initial_group +from + dba_rsrc_consumer_group_privs +order by + grantee, + granted_group +; + +clear breaks + +column grantee format a30 heading "User|Role" +column privilege format a40 heading "Privilege" +column admin_option format a6 heading "Admin|Option" + +select + grantee, + privilege, + admin_option +from + dba_rsrc_manager_system_privs +order by + grantee, + privilege +; + +column inst_id format 9999 heading "Instance" +column value format a30 heading "Plan Name" + +select + inst_id, value +from + gv$parameter +where + name = 'resource_manager_plan' +order by + inst_id +; + +-- job classes + +column job_class_name format a30 +column resource_consumer_group format a40 +column service format a40 +select + job_class_name, + resource_consumer_group, + service +from + dba_scheduler_job_classes +where + job_class_name not like 'ORA$AT%' + and job_class_name not in + ( 'AQ$_PROPAGATION_JOB_CLASS', 'XMLDB_NFS_JOBCLASS', 'SCHED$_LOG_ON_ERRORS_CLASS', 'DBMS_JOB$', 'DEFAULT_JOB_CLASS') +order by + job_class_name +/ diff --git a/vdh/run_enqwaits.sql b/vdh/run_enqwaits.sql new file mode 100644 index 0000000..a771ea2 --- /dev/null +++ b/vdh/run_enqwaits.sql @@ -0,0 +1,24 @@ +/********************************************************************** + * File: run_enqwaits.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 05Feb01 + * + * Description: + * Script to execute the ENQWAITS stored procedure. + * + * Modifications: + * TGorman 05feb01 written + *********************************************************************/ +set serveroutput on size 1000000 feedback off trimspool on termout off +col instance new_value V_INSTANCE noprint +select lower(replace(t.instance,chr(0),'')) instance +from sys.v_$thread t, + sys.v_$parameter p +where p.name = 'thread' +and t.thread# = to_number(decode(p.value,'0','1',p.value)); +spool enqwaits_&&V_INSTANCE +execute enqwaits +spool off +set termout on +ed enqwaits_&&V_INSTANCE..lst diff --git a/vdh/securefile_space_usage.sql b/vdh/securefile_space_usage.sql new file mode 100644 index 0000000..cc825ee --- /dev/null +++ b/vdh/securefile_space_usage.sql @@ -0,0 +1,56 @@ +-- get the size, used, expired and unexpired blocks/bytes for a given securefile lob segment +-- type can be LOB, LOB PARTITION or LOB SUBPARTITION + +set serveroutput on +set verify off + +accept segment_owner char prompt "Owner: "; +accept segment_name char prompt "Name: "; +accept segment_type char prompt "Type: "; +accept partition_name char prompt "Partition Name: "; + +DECLARE + + l_segment_size_blocks number; + l_segment_size_bytes number; + l_used_blocks number; + l_used_bytes number; + l_expired_blocks number; + l_expired_bytes number; + l_unexpired_blocks number; + l_unexpired_bytes number; + +BEGIN + + dbms_space.space_usage + ( segment_owner => '&segment_owner', + segment_name => '&segment_name', + segment_type => '&segment_type', + segment_size_blocks => l_segment_size_blocks, + segment_size_bytes => l_segment_size_bytes, + used_blocks => l_used_blocks, + used_bytes => l_used_bytes, + expired_blocks => l_expired_blocks, + expired_bytes => l_expired_bytes, + unexpired_blocks => l_unexpired_blocks, + unexpired_bytes => l_unexpired_bytes, + partition_name => '&partition_name' + ); + + dbms_output.new_line; + dbms_output.put_line('size (blocks): ' || l_segment_size_blocks); + dbms_output.put_line('size (bytes): ' || l_segment_size_bytes); + dbms_output.put_line('used (blocks): ' || l_used_blocks); + dbms_output.put_line('used (bytes): ' || l_used_bytes); + dbms_output.put_line('expired (blocks): ' || l_expired_blocks); + dbms_output.put_line('expired (bytes): ' || l_expired_bytes); + dbms_output.put_line('unexpired (blocks): ' || l_unexpired_blocks); + dbms_output.put_line('unexpired (bytes): ' || l_unexpired_bytes); + +END; +/ + +undefine segment_owner +undefine segment_name +undefine segment_type +undefine partition_name diff --git a/vdh/segment_space_usage.sql b/vdh/segment_space_usage.sql new file mode 100644 index 0000000..191974a --- /dev/null +++ b/vdh/segment_space_usage.sql @@ -0,0 +1,130 @@ +set serveroutput on +set verify off + +DECLARE + + l_segment_owner varchar2(30); + l_segment_name varchar2(30); + l_partition_name varchar2(30); + l_segment_type varchar2(30); + l_unformatted_blocks number; + l_unformatted_bytes number; + l_fs1_blocks number; -- Number of blocks that has at least 0 to 25% free space + l_fs1_bytes number; -- Number of bytes that has at least 0 to 25% free space + l_fs2_blocks number; -- Number of blocks that has at least 25 to 50% free space + l_fs2_bytes number; -- Number of bytes that has at least 25 to 50% free space + l_fs3_blocks number; -- Number of blocks that has at least 50 to 75% free space + l_fs3_bytes number; -- Number of bytes that has at least 50 to 75% free space + l_fs4_blocks number; -- Number of blocks that has at least 75 to 100% free space + l_fs4_bytes number; -- Number of bytes that has at least 75 to 100% free space + l_full_blocks number; -- Total number of blocks that are full in the segment + l_full_bytes number; -- Total number of bytes that are full in the segment + l_total_blocks number; + l_total_bytes number; + l_unused_blocks number; + l_unused_bytes number; + l_last_used_extent_file_id number; + l_last_used_extent_block_id number; + l_last_used_block number; + l_free_blks number; + l_segment_space_management varchar2(30); + +BEGIN + + select ts.segment_space_management + into l_segment_space_management + from dba_segments seg, dba_tablespaces ts + where seg.owner = '&&segment_owner' + and seg.segment_name = '&&segment_name' + and ( '&&partition_name' is null + or seg.partition_name = '&&partition_name' + ) + and seg.tablespace_name = ts.tablespace_name; + + if l_segment_space_management = 'AUTO' + then + + dbms_space.space_usage + ( segment_owner => '&&segment_owner', + segment_name => '&&segment_name', + segment_type => '&&segment_type', + partition_name => '&&partition_name', + unformatted_blocks => l_unformatted_blocks, + unformatted_bytes => l_unformatted_bytes, + fs1_blocks => l_fs1_blocks, + fs1_bytes => l_fs1_bytes, + fs2_blocks => l_fs2_blocks, + fs2_bytes => l_fs2_bytes, + fs3_blocks => l_fs3_blocks, + fs3_bytes => l_fs3_bytes, + fs4_blocks => l_fs4_blocks, + fs4_bytes => l_fs4_bytes, + full_blocks => l_full_blocks, + full_bytes => l_full_bytes + ); + + dbms_output.put_line('blocks'); + dbms_output.put_line(' unformatted : ' || to_char(l_unformatted_blocks, '9G999G999G999G999G999')); + dbms_output.put_line(' 0 to 25% free space : ' || to_char(l_fs1_blocks, '9G999G999G999G999G999')); + dbms_output.put_line(' 25 to 50% free space : ' || to_char(l_fs2_blocks, '9G999G999G999G999G999')); + dbms_output.put_line(' 50 to 75% free space : ' || to_char(l_fs3_blocks, '9G999G999G999G999G999')); + dbms_output.put_line(' 75 to 100% free space : ' || to_char(l_fs4_blocks, '9G999G999G999G999G999')); + dbms_output.put_line(' full : ' || to_char(l_full_blocks, '9G999G999G999G999G999')); + dbms_output.new_line; + dbms_output.put_line('bytes'); + dbms_output.put_line(' unformatted : ' || to_char(l_unformatted_bytes, '9G999G999G999G999G999')); + dbms_output.put_line(' 0 to 25% free space : ' || to_char(l_fs1_bytes, '9G999G999G999G999G999')); + dbms_output.put_line(' 25 to 50% free space : ' || to_char(l_fs2_bytes, '9G999G999G999G999G999')); + dbms_output.put_line(' 50 to 75% free space : ' || to_char(l_fs3_bytes, '9G999G999G999G999G999')); + dbms_output.put_line(' 75 to 100% free space : ' || to_char(l_fs4_bytes, '9G999G999G999G999G999')); + dbms_output.put_line(' full : ' || to_char(l_full_bytes, '9G999G999G999G999G999')); + + else + + dbms_space.free_blocks + ( segment_owner => '&&segment_owner', + segment_name => '&&segment_name', + segment_type => '&&segment_type', + freelist_group_id => 0, + free_blks => l_free_blks + ); + + dbms_output.put_line('free blocks : ' || to_char(l_free_blks, '9G999G999G999G999G999')); + + end if; + + dbms_space.unused_space + ( segment_owner => '&&segment_owner', + segment_name => '&&segment_name', + segment_type => '&&segment_type', + partition_name => '&&partition_name', + total_blocks => l_total_blocks, + total_bytes => l_total_bytes, + unused_blocks => l_unused_blocks, + unused_bytes => l_unused_bytes, + last_used_extent_file_id => l_last_used_extent_file_id, + last_used_extent_block_id => l_last_used_extent_block_id, + last_used_block => l_last_used_block + ); + + dbms_output.put_line('blocks'); + dbms_output.put_line(' total : ' || to_char(l_total_blocks, '9G999G999G999G999G999')); + dbms_output.put_line(' unused : ' || to_char(l_unused_blocks, '9G999G999G999G999G999')); + dbms_output.new_line; + dbms_output.put_line('bytes'); + dbms_output.put_line(' total : ' || to_char(l_total_bytes, '9G999G999G999G999G999')); + dbms_output.put_line(' unused : ' || to_char(l_unused_bytes, '9G999G999G999G999G999')); + dbms_output.new_line; + dbms_output.put_line('last used extent'); + dbms_output.put_line(' file id : ' || to_char(l_last_used_extent_file_id, '9G999G999G999G999G999')); + dbms_output.put_line(' starting block id : ' || to_char(l_last_used_extent_block_id, '9G999G999G999G999G999')); + dbms_output.put_line(' last block : ' || to_char(l_last_used_block, '9G999G999G999G999G999')); + +END; +/ + +undefine segment_owner +undefine segment_name +undefine segment_type +undefine partition_name + diff --git a/vdh/segment_statistics.sql b/vdh/segment_statistics.sql new file mode 100644 index 0000000..36ebf3c --- /dev/null +++ b/vdh/segment_statistics.sql @@ -0,0 +1,24 @@ +set linesize 130 +set pagesize 9999 + +break on statistic_name skip 1 + +column tablespace_name format a20 +column object_type format a10 +column object_name format a30 +column statistic_name format a34 +column owner format a15 +column rn format 99 + +select statistic_name, value, rn,owner, object_name, object_type, tablespace_name +from ( select owner, object_name, object_type, tablespace_name, + statistic_name, value, + dense_rank() over + ( partition by statistic_name + order by value desc + ) rn + from v$segment_statistics + ) +where rn <= 5 + and value != 0 +order by statistic_name, value desc, owner, object_name, object_type; \ No newline at end of file diff --git a/vdh/segment_type_per_tbs.sql b/vdh/segment_type_per_tbs.sql new file mode 100644 index 0000000..f17e6f1 --- /dev/null +++ b/vdh/segment_type_per_tbs.sql @@ -0,0 +1,20 @@ +set linesize 120 +set pages 9999 + +column counted format 99G999 +column mb format 9G999G999D99 + +compute sum of mb on owner report +compute sum of counted on owner report + +break on owner skip 1 on tablespace_name on report + +select owner, tablespace_name, segment_type, sum(bytes)/1024/1024 MB, count(*) counted +from dba_segments +where owner not in ( 'DBSNMP', 'DIP', 'MGMT_VIEW', 'ORACLE_OCM', 'OUTLN', 'SYS', + 'SYSMAN', 'SYSTEM', 'TSMSYS', 'WMSYS' + ) +group by owner, tablespace_name, segment_type +order by owner, tablespace_name, segment_type; + +clear breaks diff --git a/vdh/segments_near_hwm.sql b/vdh/segments_near_hwm.sql new file mode 100644 index 0000000..aaffd0d --- /dev/null +++ b/vdh/segments_near_hwm.sql @@ -0,0 +1,31 @@ +set linesize 150 + +column owner format a20 +column file_name format a60 +column file_id format 999 heading ID +column high_water_mark format 99G999D99 heading HWM +column segment_type format a15 + +break on file_id skip 1 on file_name + +with +maxext as +( select /*+ MATERIALIZE */ + file_id, owner, block_id, blocks, segment_name, segment_type, ranking + from ( select file_id, owner, block_id, blocks, segment_name, segment_type, + rank() over + ( partition by file_id + order by (block_id + blocks -1) desc + ) ranking + from dba_extents + where tablespace_name = '&tablespace' + ) + where ranking <= 5 +) +select df.file_name, maxext.file_id, maxext.owner, maxext.segment_name, maxext.segment_type, + ((maxext.block_id + maxext.blocks - 1) * 8192 / 1024/1024) high_water_mark +from maxext, dba_data_files df +where df.file_id = maxext.file_id +order by maxext.file_id, ranking; + + diff --git a/vdh/sessinfo.sql b/vdh/sessinfo.sql new file mode 100644 index 0000000..c8979cc --- /dev/null +++ b/vdh/sessinfo.sql @@ -0,0 +1,22 @@ +set linesize 150 +set verify off + +column username format a20 +column program format a15 +column osuser format a15 +column machine format a25 +column sql_id new_value v_sql_id +column sql_child_number new_value v_sql_child_number + +select sess.sid, sess.serial#, prc.spid, sess.username, sess.program, sess.osuser, + sess.machine, sess.sql_id, sess.sql_child_number +from v$session sess, v$process prc +where sess.paddr = prc.addr + and prc.spid = '&processid'; + +select sql_fulltext +from v$sqlarea +where sql_id = '&v_sql_id'; + +select * +from table(dbms_xplan.display_cursor('&v_sql_id', &v_sql_child_number)); diff --git a/vdh/sessinfo2.sql b/vdh/sessinfo2.sql new file mode 100644 index 0000000..369502c --- /dev/null +++ b/vdh/sessinfo2.sql @@ -0,0 +1,27 @@ +set linesize 150 +set verify off +set long 50000 + +column username format a20 +column program format a15 +column osuser format a15 +column machine format a25 +column sql_id new_value v_sql_id +column spid format a6 +column sql_child_number new_value v_sql_child_number + +select sess.sid, sess.serial#, prc.spid, sess.username, sess.program, sess.osuser, + sess.machine, sess.sql_id, sess.sql_child_number +from gv$session sess, gv$process prc +where sess.inst_id = prc.inst_id + and sess.paddr = prc.addr + and sess.sid = '&sid' + and sess.inst_id = &inst; + +select sql_fulltext +from gv$sqlarea +where sql_id = '&v_sql_id'; + +select * +from table(dbms_xplan.display_cursor('&v_sql_id', &v_sql_child_number)); + diff --git a/vdh/sessinfo_by_process_id.sql b/vdh/sessinfo_by_process_id.sql new file mode 100644 index 0000000..737b3c9 --- /dev/null +++ b/vdh/sessinfo_by_process_id.sql @@ -0,0 +1,7 @@ +select B.sid, B.serial#, C.spid, B.username, B.program, B.osuser, B.machine, A.value +from v$sesstat A, v$session B, v$process C, v$statname D +where A.sid = B.sid + and B.paddr = C.addr + and C.spid = '&processid' + and A.statistic# = D.statistic# + and D.name = 'CPU used by this session'; \ No newline at end of file diff --git a/vdh/set_rsrc_p_degree_limit.sql b/vdh/set_rsrc_p_degree_limit.sql new file mode 100644 index 0000000..86a1ef9 --- /dev/null +++ b/vdh/set_rsrc_p_degree_limit.sql @@ -0,0 +1,46 @@ +BEGIN + + dbms_resource_manager.clear_pending_area; + dbms_resource_manager.create_pending_area; + + dbms_resource_manager.update_plan_directive + ( plan => 'PERF_PLAN', + group_or_subplan => 'ETL', + new_parallel_degree_limit_p1 => 64 + ); + + dbms_resource_manager.update_plan_directive + ( plan => 'PERF_PLAN', + group_or_subplan => 'MAINTENANCE', + new_parallel_degree_limit_p1 => 64 + ); + + dbms_resource_manager.update_plan_directive + ( plan => 'PERF_PLAN', + group_or_subplan => 'OTHER_GROUPS', + new_parallel_degree_limit_p1 => 64 + ); + + dbms_resource_manager.update_plan_directive + ( plan => 'PERF_PLAN', + group_or_subplan => 'QUERYHIGH', + new_parallel_degree_limit_p1 => 64 + ); + + dbms_resource_manager.update_plan_directive + ( plan => 'PERF_PLAN', + group_or_subplan => 'QUERYLOW', + new_parallel_degree_limit_p1 => 64 + ); + + dbms_resource_manager.update_plan_directive + ( plan => 'PERF_PLAN', + group_or_subplan => 'SYS_GROUP', + new_parallel_degree_limit_p1 => 64 + ); + + dbms_resource_manager.validate_pending_area; + dbms_resource_manager.submit_pending_area; + +END; +/ diff --git a/vdh/set_temporary.sql b/vdh/set_temporary.sql new file mode 100644 index 0000000..f1178b6 --- /dev/null +++ b/vdh/set_temporary.sql @@ -0,0 +1,31 @@ +alter user SYS temporary tablespace temp; +alter user SYSTEM temporary tablespace temp; +alter user DBSNMP temporary tablespace temp; +alter user SCOTT temporary tablespace temp; +alter user OUTLN temporary tablespace temp; +alter user WMSYS temporary tablespace temp; +alter user ORDSYS temporary tablespace temp; +alter user ORDPLUGINS temporary tablespace temp; +alter user MDSYS temporary tablespace temp; +alter user CTXSYS temporary tablespace temp; +alter user XDB temporary tablespace temp; +alter user ANONYMOUS temporary tablespace temp; +alter user WKSYS temporary tablespace temp; +alter user WKPROXY temporary tablespace temp; +alter user ODM temporary tablespace temp; +alter user ODM_MTR temporary tablespace temp; +alter user OLAPSYS temporary tablespace temp; +alter user RMAN temporary tablespace temp; +alter user HR temporary tablespace temp; +alter user OE temporary tablespace temp; +alter user PM temporary tablespace temp; +alter user SH temporary tablespace temp; +alter user QS_ADM temporary tablespace temp; +alter user QS temporary tablespace temp; +alter user QS_WS temporary tablespace temp; +alter user QS_ES temporary tablespace temp; +alter user QS_OS temporary tablespace temp; +alter user QS_CBADM temporary tablespace temp; +alter user QS_CB temporary tablespace temp; +alter user QS_CS temporary tablespace temp; + diff --git a/vdh/setup_audit_mgmt.sql b/vdh/setup_audit_mgmt.sql new file mode 100644 index 0000000..e67d8d9 --- /dev/null +++ b/vdh/setup_audit_mgmt.sql @@ -0,0 +1,213 @@ +-- setup the maintanance of the audit logs using the dbms_audit_mgmt package +-- a purge_audit_logs job is created which uses the dbms_audit_mgmt to purge the audit records from both the db as the os that are older then 31 days +-- the job is scheduled to run each day at 21:00 hours +-- The purge procedure and scheduled job will be created under a new auditmgmt user (which will be locked and password expired) +-- +-- The script needs to be executed as a dba user +-- +-- interesting views are: +-- DBA_AUDIT_MGMT_CLEAN_EVENTS +-- DBA_AUDIT_MGMT_CONFIG_PARAMS +-- DBA_AUDIT_MGMT_LAST_ARCH_TS +-- +-- also check MOS Note 2068066.1 - "Cleaning of FGA or Unified Audit Trail Records Not Working in 12C" + +set serveroutput on +set heading on +set tab off +set pages 50000 +set linesize 300 +set trimspool on + + +/* + +-- change the tablespace holding the standard and the fine grained audit trail +BEGIN + + dbms_audit_mgmt.set_audit_trail_location + ( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD, + audit_trail_location_value => 'ORAAUDIT' + ); + +END; +/ + +*/ + + +--- Report current settings and initialize the cleanup + +-- report the current parameters +column parameter_name format a30 +column parameter_value format a20 +column audit_trail format a20 + +break on con_id skip page + +select + con_id, + audit_trail, + parameter_name, + parameter_value +from + cdb_audit_mgmt_config_params +order by + con_id, + audit_trail, + parameter_name +; + +clear breaks + +-- Set the initial cleanup of the audit trails (standard, fine grained, OS and XML) +BEGIN + + dbms_audit_mgmt.init_cleanup + ( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD, + default_cleanup_interval => 24, + container => DBMS_AUDIT_MGMT.CONTAINER_ALL + ); + + dbms_audit_mgmt.init_cleanup + ( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FILES, + default_cleanup_interval => 24, + container => DBMS_AUDIT_MGMT.CONTAINER_ALL + ); + +END; +/ + +-- report on the parameters again +column parameter_name format a30 +column parameter_value format a20 +column audit_trail format a20 + +break on con_id skip page + +select + con_id, + audit_trail, + parameter_name, + parameter_value +from + cdb_audit_mgmt_config_params +order by + con_id, + audit_trail, + parameter_name +; + +clear breaks + + + +-- setup a user that will hold the procedure and job that will progress the last archived timestamp + +create user c##auditmgmt +identified by "welcome24Here!?" +password expire +account lock +/ + +grant execute on dbms_audit_mgmt to c##auditmgmt; +grant audit_admin to c##auditmgmt; +grant select on sys.gv_$instance to c##auditmgmt; + + +--- create the procedure to set the archival timestamp and perform the purging + +-- this procedure will progress the last archived timestamp for all audit records and purge the records older then that timestamp +-- The p_retention input parameter is used to determine how many days of audit records must be kept + +create or replace procedure +c##auditmgmt.purge_audit_logs + ( p_retention in number default 180 , --general number of days that the audit traces must be kept + p_std_retention in number default NULL, --number of days that the audit records in the standard audit table must be kept. overrides p_retention + p_fga_retention in number default NULL, --number of days that the audit records in the fine grained audit table must be kept. overrides p_retention + p_os_retention in number default NULL, --number of days that the os audit records must be kept. overrides p_retention + p_xml_retention in number default NULL --number of days that the xml audit records must be kept. overrides p_retention + ) + +as + +begin + + -- set the last archived timestamp for the standard audit trail + dbms_audit_mgmt.set_last_archive_timestamp + ( audit_trail_type => dbms_audit_mgmt.audit_trail_aud_std, + last_archive_time => systimestamp - nvl(p_std_retention, p_retention), + container => DBMS_AUDIT_MGMT.CONTAINER_ALL + ); + + -- set the last archived timestamp for the fine grained audit trail + dbms_audit_mgmt.set_last_archive_timestamp + ( audit_trail_type => dbms_audit_mgmt.audit_trail_fga_std, + last_archive_time => systimestamp - nvl(p_fga_retention, p_retention), + container => DBMS_AUDIT_MGMT.CONTAINER_ALL + ); + + -- set the last archived timestamp for the unified grained audit trail + dbms_audit_mgmt.set_last_archive_timestamp + ( audit_trail_type => dbms_audit_mgmt.audit_trail_unified, + last_archive_time => systimestamp - nvl(p_fga_retention, p_retention), + container => DBMS_AUDIT_MGMT.CONTAINER_ALL + ); + + -- set the last archived timestamp for the os audit records on each of the instances + for r_inst in + ( select + inst_id + from + gv$instance + ) + loop + + -- for the normal os audit records + dbms_audit_mgmt.set_last_archive_timestamp + ( audit_trail_type => dbms_audit_mgmt.audit_trail_os, + last_archive_time => systimestamp - nvl(p_os_retention, p_retention), + rac_instance_number => r_inst.inst_id, + container => DBMS_AUDIT_MGMT.CONTAINER_ALL + ); + + -- for the xml audit records + dbms_audit_mgmt.set_last_archive_timestamp + ( audit_trail_type => dbms_audit_mgmt.audit_trail_xml, + last_archive_time => systimestamp - nvl(p_xml_retention, p_retention), + rac_instance_number => r_inst.inst_id, + container => DBMS_AUDIT_MGMT.CONTAINER_ALL + ); + + end loop; + + -- do the actual cleaning on all audit trails + dbms_audit_mgmt.clean_audit_trail + ( audit_trail_type => dbms_audit_mgmt.audit_trail_all, + use_last_arch_timestamp => TRUE, + container => DBMS_AUDIT_MGMT.CONTAINER_ALL + ); + + +end purge_audit_logs; +/ + + + +--- create the job to execute the daily purge + +BEGIN + + dbms_scheduler.create_job + ( job_name => 'c##auditmgmt.purge_audit', + job_type => 'PLSQL_BLOCK', + job_action => 'BEGIN c##auditmgmt.purge_audit_logs(31); END;', + start_date => to_timestamp_tz(to_char(systimestamp, 'DDMMYYYY HH24:MI:SS') || ' Europe/Brussels', 'DDMMYYYY HH24:MI:SS TZR'), + repeat_interval => 'freq=daily; byhour=21; byminute=0; bysecond=0;', + end_date => NULL, + enabled => TRUE + ); + +END; +/ + diff --git a/vdh/sga_overview_10g.sql b/vdh/sga_overview_10g.sql new file mode 100644 index 0000000..df08842 --- /dev/null +++ b/vdh/sga_overview_10g.sql @@ -0,0 +1,20 @@ +set linesize 120 +set pagesize 9999 + +column component format a40 +column curr_mb format 99G999D99 +column min_mb format 99G999D99 +column max_mb format 99G999D99 +column user_mb format 99G999D99 +column granule_mb format 99G999D99 + +compute sum of curr_mb on report + +break on report + +select component, current_size/1024/1024 curr_mb, min_size/1024/1024 min_mb, max_size/1024/1024 max_mb, + user_specified_size/1024/1024 user_mb, granule_size/1024/1024 granule_mb +from v$sga_dynamic_components +order by component; + +clear breaks diff --git a/vdh/sga_report.sql b/vdh/sga_report.sql new file mode 100644 index 0000000..2552e15 --- /dev/null +++ b/vdh/sga_report.sql @@ -0,0 +1,260 @@ +/* This script generates an overview of the memory settings and usage of a database + Run the script as an admin user (eg SYS) from within sqlplus. + A logfile will be created in the current working directory +*/ + +--- set layout options +clear breaks +set pagesize 9999 +set linesize 150 +set verify off +set echo off +set feedback off +set trimspool on + + +-- initialize spoolfile +--column dcol new_value spoolname noprint +--column inputpar01 new_value 1 noprint +--select 1 inputpar01 from dual where 1=2; + +--select +-- nvl('&1', db_unique_name || '_' || to_char(sysdate,'YYYYMMDDHH24MISS') || '_memory_report.log') dcol +--from +-- v$database +--; + +--undefine 1 + +--spool &spoolname + + +--- db and platform identification +prompt +prompt DB IDENTIFICATION +prompt ------------------ + +set linesize 200 +column platform_name format a40 +column name format a15 +column db_unique_name format a20 + +select + dbid, name, db_unique_name, database_role, platform_name +from + v$database +; + +column host_name format a40 +prompt + +select + instance_number, instance_name, host_name, version +from + gv$instance +order by + instance_number +; + +--- sga spfile parameter +prompt +prompt +prompt SGA PARAMETERS +prompt -------------- + +column name format a40 +column value format a25 +column description format a40 word_wrapped +set linesize 150 + +select ksppinm name, ksppstvl value, ksppstdf isdefault, x.inst_id inst_id, ksppdesc description +from x$ksppi x, x$ksppcv y +where (x.indx = y.indx) + and ksppinm in + ( 'sga_target', 'sga_max_target', 'memory_target', 'db_cache_size', + 'db_2k_cache_size', 'db_4k_cache_size', 'db_8k_cache_size', + 'db_16k_cache_size', 'db_32k_cache_size', 'db_keep_cache_size', + 'db_recycle_cache_size', 'java_pool_size', 'large_pool_size', + 'olap_page_pool_size' + ) +order by ksppinm, x.inst_id; + + +--- sga overview +prompt +prompt +prompt SGA OVERVIEW +prompt ------------ + +set linesize 120 +set pagesize 9999 + +column component format a40 +column curr_mb format 99G999D99 +column min_mb format 99G999D99 +column max_mb format 99G999D99 +column user_mb format 99G999D99 +column granule_mb format 99G999D99 + +compute sum of curr_mb on report + +break on report + +select component, current_size/1024/1024 curr_mb, min_size/1024/1024 min_mb, max_size/1024/1024 max_mb, + user_specified_size/1024/1024 user_mb, granule_size/1024/1024 granule_mb +from v$sga_dynamic_components +order by component; + +clear breaks + +--- sga resizes +prompt +prompt +prompt SGA RESIZE OPERATIONS +prompt --------------------- + +set linesize 250 +set pages 9999 + +column start_time format a20 +column end_time format a20 + +column initial_mb format 999G999D99 +column target_mb format 999G999D99 +column final_mb format 999G999D99 +column component format a30 + +select * +from ( select to_char(start_time, 'DD/MM/YYYY HH24:MI:SS') start_time, to_char(end_time, 'DD/MM/YYYY HH24:MI:SS') end_time, + component, oper_type, oper_mode, initial_size/1024/1024 initial_mb, target_size/1024/1024 target_mb, + final_size/1024/1024 final_mb, status + from v$sga_resize_ops a + order by a.start_time desc + ) +where rownum <= 40; + + +--- sqlcursor memory usage per parsing schema +prompt +prompt +prompt SQL CURSOR MEMORY +prompt ----------------- + +set linesize 150 + +column sharable_mem_kb format 99G999G999D00 +column persistent_mem_kb format 99G999G999D00 +column runtime_mem_kb format 99G999G999D00 +column cursor_cnt format 999G999G990 +column unique_cursor_cnt format 999G999G990 + +compute sum of sharable_mem_kb on report +compute sum of persistent_mem_kb on report +compute sum of runtime_mem_kb on report +compute sum of cursor_cnt on report +compute sum of unique_cursor_cnt on report + +break on report + +with + childs as + ( select + parsing_schema_id, + sql_id, + count(*) child_cnt + from + v$sql + group by + parsing_schema_id, + sql_id + ), + mchild as + ( select + parsing_schema_id, + max(child_cnt) max_child_cnt + from + childs + group by + parsing_schema_id + ), + vsql as + ( select + parsing_schema_id, + count(*) cursor_cnt, + count(distinct sql_id) unique_cursor_cnt, + sum(sharable_mem)/1024 sharable_mem_kb, + sum(persistent_mem)/1024 persistent_mem_kb, + sum(runtime_mem)/1024 runtime_mem_kb + from + v$sql + group by + parsing_schema_id + ) +select + username, cursor_cnt, unique_cursor_cnt, max_child_cnt, + sharable_mem_kb, persistent_mem_kb, runtime_mem_kb +from + mchild, + vsql, + dba_users usr +where + vsql.parsing_schema_id = mchild.parsing_schema_id + and vsql.parsing_schema_id = usr.user_id +order by + username +; + +clear breaks +clear computes + +--- Top sql cursors by shared memory +prompt +prompt +prompt TOP SQL CURSORS (by shared memory) +prompt ---------------------------------- + +set linesize 150 + +column sharable_mem_kb format 99G999G999D00 +column persistent_mem_kb format 99G999G999D00 +column runtime_mem_kb format 99G999G999D00 + +select + * +from + ( select + sql_id, + sum(sharable_mem)/1024 sharable_mem_kb, + sum(persistent_mem)/1024 persistent_mem_kb, + sum(runtime_mem)/1024 runtime_mem_kb, + count(*) child_cnt, + parsing_schema_name + from + v$sql + group by + sql_id, + parsing_schema_name + order by + sharable_mem_kb desc, + parsing_schema_name + ) +where + rownum <= 10 +; + +--- memory usage by pool +prompt +prompt +prompt POOL OVERVIEW +prompt ------------- + +column bytes format 999G999G999G999 + +compute sum of bytes on pool +break on pool skip 1 +select pool, name, bytes +from v$sgastat +order by pool, name; + +--- END OF SCRIPT +--spool off diff --git a/vdh/sga_resize_ops.sql b/vdh/sga_resize_ops.sql new file mode 100644 index 0000000..9dc20e6 --- /dev/null +++ b/vdh/sga_resize_ops.sql @@ -0,0 +1,16 @@ +set linesize 140 +set pages 9999 + +column initial_mb format 9G999D99 +column target_mb format 9G999D99 +column final_mb format 9G999D99 +column component format a30 + +select * +from ( select to_char(start_time, 'DD/MM/YYYY HH24:MI:SS') start_time, to_char(end_time, 'DD/MM/YYYY HH24:MI:SS') end_time, + component, oper_type, oper_mode, initial_size/1024/1024 initial_mb, target_size/1024/1024 target_mb, + final_size/1024/1024 final_mb, status + from v$sga_resize_ops a + order by a.start_time desc + ) +where rownum <= 40; \ No newline at end of file diff --git a/vdh/shared_pool_advice.sql b/vdh/shared_pool_advice.sql new file mode 100644 index 0000000..e215d95 --- /dev/null +++ b/vdh/shared_pool_advice.sql @@ -0,0 +1,35 @@ +set linesize 300 +set pagesize 50000 +set tab off + +break on inst_id dup skip page + +column shared_pool_size_for_estimate format 9G999G999 +column shared_pool_size_factor format 0D0000 +column estd_lc_size format 9G999G999 +column estd_lc_memory_objects format 9G999G999 +column estd_lc_time_saved format 999G999G999 +column est_lc_time_saved_factor format 0D0000 +column estd_lc_load_time format 9G999G999G999 +column estd_lc_load_time_factor format 9990D0000 +Column estd_lc_memory_object_hits format 999G999G999G999 + +select + inst_id, + shared_pool_size_for_estimate, + shared_pool_size_factor, + estd_lc_size, + estd_lc_memory_objects, + estd_lc_time_saved, + estd_lc_time_saved_factor, + estd_lc_load_time, + estd_lc_load_time_factor, + estd_lc_memory_object_hits +from + gv$shared_pool_advice +order by + inst_id, + shared_pool_size_factor +; + +clear breaks diff --git a/vdh/show_active_undo.sql b/vdh/show_active_undo.sql new file mode 100644 index 0000000..da0812b --- /dev/null +++ b/vdh/show_active_undo.sql @@ -0,0 +1,31 @@ +-- show per active transaction the size of the undo and some session information +-- more session information can be retrieved by sessinfo2.sql + +set linesize 250 +set pages 50000 + +column username format a30 +column osuser format a30 +column machine format a30 +column program format a50 +column used_undo_mb format 9G999G999D99 +column start_date_str format a14 + +select + ses.inst_id, + ses.sid, + ses.serial#, + ses.username, + ses.osuser, + ses.machine, + ses.program, + to_char(tra.start_date, 'DD/MM HH24:MI:SS') as start_date_str, + tra.used_ublk * 8 / 1024 as used_undo_mb, + tra.status +from + gv$session ses + join gv$transaction tra + on ( ses.inst_id = tra.inst_id + and ses.taddr = tra.addr + ) +; \ No newline at end of file diff --git a/vdh/show_apply_progress.sql b/vdh/show_apply_progress.sql new file mode 100644 index 0000000..f6eb20a --- /dev/null +++ b/vdh/show_apply_progress.sql @@ -0,0 +1,52 @@ +-- Apply Coordinator information and apply progress +set linesize 250 +set pages 50000 + +column apply_name format a30 +column total_received format 9G999G999G999 +column total_applied format 9G999G999G999 +column total_errors format 9G999G999G999 + +prompt +prompt Coordinator Info +prompt ================ +prompt + + select + inst_id, + sid, + serial#, + apply_name, + state, + total_received, + total_applied, + total_errors +from + gv$streams_apply_coordinator +order by + apply_name +; + + +prompt +prompt Apply Progress +prompt ============== +prompt + +column apply_name format a30 +column source_database format a15 +column applied_message_number format 99999999999999999 +column applied_msg_crea_time format a20 +column applied_message_time format a20 + + +select + apply_name, + source_database, + applied_message_number, + to_char(applied_message_create_time, 'DD/MM/YYYY HH24:MI:SS') applied_msg_crea_time, + to_char(apply_time, 'DD/MM/YYYY HH24:MI:SS') applied_message_time +from + dba_apply_progress +order by apply_name +; diff --git a/vdh/show_autotasks.sql b/vdh/show_autotasks.sql new file mode 100644 index 0000000..f4f669f --- /dev/null +++ b/vdh/show_autotasks.sql @@ -0,0 +1,242 @@ +-- show information regarding the autotasks and their windows + +set linesize 250 + +column client_name format a35 heading "Client Name" +column task_name format a25 heading "Task Name" +column operation_name format a30 heading "Operation Name" +column status format a10 heading "Status" +column current_job_name format a25 heading "Current Job Name" +column last_good_date_str format a26 heading "Last Good Date" +column last_try_date_str format a26 heading "Last Try Date" +column next_try_date_str format a26 heading "Next Try Date" +column last_good_duration_str format a12 heading "Last Good|Duration" +column mean_good_duration_str format a12 heading "Mean Good|Duration" + +column client_tag format a10 heading "Client|Tag" +column consumer_group format a30 heading "Consumer Group" +column window_group format a20 heading "Window Group" +column service_name format a30 heading "Service Name" +column last_change_str format a30 heading "Last Change" + +column operation_tag format a10 heading "Operation|Tag" +column attributes format a55 heading "Attributes" +column use_resource_estimates format a10 heading "Resource|Estimates" +column priority_override format a10 heading "Priority|Override" + +column window_name format a20 heading "Window Name" +column window_next_time_str format a30 heading "Next Time" +column window_active format a6 heading "Active" +column autotask_status format a11 heading "Task Status" +column optimizer_stats format a10 heading "Optimizer|Status" +column segment_advisor format a10 heading "Segment|Advisor" +column sql_tune_advisor format a10 heading "SQL Tune|Advisor" +column health_monitor format a10 heading "Health|Monitor" + +column window_start_time_str format a30 heading "Start Time" +column window_end_time_str format a30 heading "End Time" +column duration format a30 heading "Duration" + +column task_target_type format a30 heading "Target Type" +column task_target_name format a50 heading "Target Name" +column task_priority format a10 heading "Priority" +column job_scheduler_status format a15 heading "Job Status" + +column job_duration format a15 heading "Duration" +column job_start_time format a30 heading "Start Time" +column job_status format a10 heading "Status" +column job_error format 99999999 heading "Error" + +column job_name format a30 + +prompt +prompt Defined Autotask Operations +prompt =========================== +prompt + +prompt autotask task: + +select + client_name, + task_name, + operation_name, + status, + current_job_name, + to_char(last_good_date, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') last_good_date_str, + ( to_char(decode(last_good_duration, 0, 0, extract(day from (systimestamp + numtodsinterval(last_good_duration,'second') - systimestamp))), 'FM990') || ' ' || + to_char(decode(last_good_duration, 0, 0, extract(hour from (systimestamp + numtodsinterval(last_good_duration,'second') - systimestamp))), 'FM00') || ':' || + to_char(decode(last_good_duration, 0, 0, extract(minute from (systimestamp + numtodsinterval(last_good_duration,'second') - systimestamp))), 'FM00') || ':' || + to_char(decode(last_good_duration, 0, 0, floor(extract(second from (systimestamp + numtodsinterval(last_good_duration,'second') - systimestamp)))), 'FM00') + ) last_good_duration_str, + ( to_char(decode(mean_good_duration, 0, 0, extract(day from (systimestamp + numtodsinterval(mean_good_duration,'second') - systimestamp))), 'FM990') || ' ' || + to_char(decode(mean_good_duration, 0, 0, extract(hour from (systimestamp + numtodsinterval(mean_good_duration,'second') - systimestamp))), 'FM00') || ':' || + to_char(decode(mean_good_duration, 0, 0, extract(minute from (systimestamp + numtodsinterval(mean_good_duration,'second') - systimestamp))), 'FM00') || ':' || + to_char(decode(mean_good_duration, 0, 0, floor(extract(second from (systimestamp + numtodsinterval(mean_good_duration,'second') - systimestamp)))), 'FM00') + ) mean_good_duration_str, + to_char(last_try_date, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') last_try_date_str, + to_char(next_try_date, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') next_try_date_str +from + dba_autotask_task +order by + client_name +; + +prompt autotask client: + +select + client_name, + client_tag, + status, + consumer_group, + window_group, + service_name, + to_char(last_change, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') last_change_str +from + dba_autotask_client +order by + client_name +; + +prompt autotask operation: + +select + client_name, + operation_name, + operation_tag, + priority_override, + attributes, + use_resource_estimates, + status, + to_char(last_change, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') last_change_str +from + dba_autotask_operation +order by + client_name +; + + +prompt +prompt Autotask Windows +prompt ================ +prompt + +select + window_name, + to_char(window_next_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') window_next_time_str, + window_active, + autotask_status, + optimizer_stats, + segment_advisor, + sql_tune_advisor, + health_monitor +from + dba_autotask_window_clients +order by + window_next_time +; + + +prompt +prompt Autotask Window History +prompt ======================= +prompt + +select + to_char(window_start_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') window_start_time_str, + to_char(window_end_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') window_end_time_str, + nvl2(window_end_time, window_end_time - window_start_time, null) duration, + window_name +from + dba_autotask_window_history +order by + window_start_time +; + + +prompt +prompt Autotask client History +prompt ======================= +prompt + + +break on window_start_time_str on window_end_time_str on duration on window_name skip 1 + +select + window_name, + to_char(window_start_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') window_start_time_str, + to_char(window_end_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') window_end_time_str, + window_duration duration, + client_name, + jobs_created, + jobs_started, + jobs_completed +from + dba_autotask_client_history +order by + window_start_time, + window_name, + client_name +; + +clear breaks + + +prompt +prompt Current Running Autotasks +prompt ========================= +prompt + + +select + client_name, + task_name, + task_target_type, + task_target_name, + task_priority, + task_operation, + job_name, + job_scheduler_status +from + dba_autotask_client_job +order by + client_name +; + + +prompt +prompt Last 10 Job Runs Per Autotask +prompt ============================= +prompt + +break on client_name skip 1 + +select + client_name, + job_name, + to_char(job_start_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') job_start_time_str, + job_duration, + job_status, + job_error +from + ( select + client_name, + job_name, + job_status, + job_start_time, + job_duration, + job_error, + row_number () over + ( partition by client_name + order by job_start_time desc + ) rn + from + dba_autotask_job_history + ) +where + rn <= 10 +order by + client_name, + job_start_time +; + +clear breaks diff --git a/vdh/show_backups.sh b/vdh/show_backups.sh new file mode 100644 index 0000000..5ba8337 --- /dev/null +++ b/vdh/show_backups.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +CLIENT=$1 ; shift +DB=$1 ; shift +FILE_LIST=$@ +for FILE in $FILE_LIST +do + awk 'BEGIN {printf "%-19s", "File:"}'; echo $FILE; + for BACKUP_ID in `bpflist -d 01/01/1970 00:00:00 -pt Oracle -pattern $FILE -client $CLIENT -keyword $DB -U | grep "Backup ID:" |awk '{print $3}'` + do + bpimagelist -media -backupid $BACKUP_ID -L | egrep "Backup ID:|Backup Time:|Copy number:|Fragment:|Media Type:|Expiration Time:|^[ ]*ID"; + done + echo +done diff --git a/vdh/show_buffer_cache_contents.sql b/vdh/show_buffer_cache_contents.sql new file mode 100644 index 0000000..f1c59a9 --- /dev/null +++ b/vdh/show_buffer_cache_contents.sql @@ -0,0 +1,68 @@ +set pagesize 50000 +set linesize 300 + +column c0 heading "Owner" format a30 +column c1 heading "Object Name" format a30 +column c2 heading "Object Type" format a12 +column c3 heading "#Blocks in|Buffer Cache" format 999G999G999 +column c4 heading "Object blocks|in Buffer %" format 999D99 +column c5 heading "Buffer Pool" format a15 +column c6 heading "Block Size" format 99G999 + + + +with buffer_contents as +( +/*+ MATERIALIZE */ +select + o.owner owner, + o.object_name object_name, + o.subobject_name subobject_name, + o.object_type object_type, + count(distinct file# || block#) num_blocks +from + dba_objects o, + v$bh bh +where + o.data_object_id = bh.objd +and + o.owner not in ('SYS','SYSTEM') +and + bh.status != 'free' +group by + o.owner, + o.object_name, + o.subobject_name, + o.object_type +) +select + t1.owner c0, + object_name c1, + case when object_type = 'TABLE PARTITION' then 'TAB PART' + when object_type = 'INDEX PARTITION' then 'IDX PART' + else object_type end c2, + sum(num_blocks) c3, + (sum(num_blocks)/greatest(sum(blocks), .001))*100 c4, + buffer_pool c5, + sum(bytes)/sum(blocks) c6 +from + buffer_contents t1, + dba_segments s +where + s.segment_name = t1.object_name +and + s.owner = t1.owner +and + s.segment_type = t1.object_type +and + nvl(s.partition_name,'-') = nvl(t1.subobject_name,'-') +group by + t1.owner, + object_name, + object_type, + buffer_pool +having + sum(num_blocks) > 10 +order by + sum(num_blocks) desc +; \ No newline at end of file diff --git a/vdh/show_cbo_stats.sql b/vdh/show_cbo_stats.sql new file mode 100644 index 0000000..eb2c777 --- /dev/null +++ b/vdh/show_cbo_stats.sql @@ -0,0 +1,302 @@ +set echo off +set scan on +set lines 150 +set pages 66 +set verify off +set feedback off +set termout off +column uservar new_value Table_Owner noprint +select user uservar from dual; +set termout on +column TABLE_NAME heading "Tables owned by &Table_Owner" format a30 +select table_name from dba_tables where owner=upper('&Table_Owner') order by 1 +/ +undefine table_name +undefine owner +prompt +accept owner prompt 'Please enter Name of Table Owner (Null = &Table_Owner): ' +accept table_name prompt 'Please enter Table Name to show Statistics for: ' +column TABLE_NAME heading "Table|Name" format a15 +column PARTITION_NAME heading "Partition|Name" format a15 +column SUBPARTITION_NAME heading "SubPartition|Name" format a15 +column NUM_ROWS heading "Number|of Rows" format 9,999,990 +column BLOCKS heading "Blocks" format 999,990 +column EMPTY_BLOCKS heading "Empty|Blocks" format 999,990 + +column AVG_SPACE heading "Average|Space" format 9,990 +column CHAIN_CNT heading "Chain|Count" format 990 +column AVG_ROW_LEN heading "Average|Row Len" format 990 +column COLUMN_NAME heading "Column|Name" format a25 +column NULLABLE heading Null|able format a4 +column NUM_DISTINCT heading "Distinct|Values" format 99,990 +column NUM_NULLS heading "Number|Nulls" format 99,990 +column NUM_BUCKETS heading "Number|Buckets" format 990 +column DENSITY heading "Density" format 990 +column INDEX_NAME heading "Index|Name" format a15 +column UNIQUENESS heading "Unique" format a9 +column BLEV heading "B|Tree|Level" format 90 +column LEAF_BLOCKS heading "Leaf|Blks" format 990 +column DISTINCT_KEYS heading "Distinct|Keys" format 9,999,990 +column AVG_LEAF_BLOCKS_PER_KEY heading "Average|Leaf Blocks|Per Key" format 99,990 +column AVG_DATA_BLOCKS_PER_KEY heading "Average|Data Blocks|Per Key" format 99,990 +column CLUSTERING_FACTOR heading "Cluster|Factor" format 999,990 +column COLUMN_POSITION heading "Col|Pos" format 990 +column col heading "Column|Details" format a24 +column COLUMN_LENGTH heading "Col|Len" format 990 +column GLOBAL_STATS heading "Global|Stats" format a6 +column USER_STATS heading "User|Stats" format a6 +column SAMPLE_SIZE heading "Sample|Size" format 9,999,990 +column to_char(t.last_analyzed,'MM-DD-YYYY') heading "Date|MM-DD-YYYY" format a10 + +prompt +prompt *********** +prompt Table Level +prompt *********** +prompt +select + TABLE_NAME, + NUM_ROWS, + BLOCKS, + EMPTY_BLOCKS, + AVG_SPACE, + CHAIN_CNT, + AVG_ROW_LEN, + GLOBAL_STATS, + USER_STATS, + SAMPLE_SIZE, + to_char(t.last_analyzed,'MM-DD-YYYY') +from dba_tables t +where + owner = upper(nvl('&&Owner',user)) +and table_name = upper('&&Table_name') +/ +select + COLUMN_NAME, + decode(t.DATA_TYPE, + 'NUMBER',t.DATA_TYPE||'('|| + decode(t.DATA_PRECISION, + null,t.DATA_LENGTH||')', + t.DATA_PRECISION||','||t.DATA_SCALE||')'), + 'DATE',t.DATA_TYPE, + 'LONG',t.DATA_TYPE, + 'LONG RAW',t.DATA_TYPE, + 'ROWID',t.DATA_TYPE, + 'MLSLABEL',t.DATA_TYPE, + t.DATA_TYPE||'('||t.DATA_LENGTH||')') ||' '|| + decode(t.nullable, + 'N','NOT NULL', + 'n','NOT NULL', + NULL) col, + NUM_DISTINCT, + DENSITY, + NUM_BUCKETS, + NUM_NULLS, + GLOBAL_STATS, + USER_STATS, + SAMPLE_SIZE, + to_char(t.last_analyzed,'MM-DD-YYYY') +from dba_tab_columns t +where + table_name = upper('&Table_name') +and owner = upper(nvl('&Owner',user)) +/ + +select + INDEX_NAME, + UNIQUENESS, + BLEVEL BLev, + LEAF_BLOCKS, + DISTINCT_KEYS, + NUM_ROWS, + AVG_LEAF_BLOCKS_PER_KEY, + AVG_DATA_BLOCKS_PER_KEY, + CLUSTERING_FACTOR, + GLOBAL_STATS, + USER_STATS, + SAMPLE_SIZE, + to_char(t.last_analyzed,'MM-DD-YYYY') +from + dba_indexes t +where + table_name = upper('&Table_name') +and table_owner = upper(nvl('&Owner',user)) +/ +break on index_name +select + i.INDEX_NAME, + i.COLUMN_NAME, + i.COLUMN_POSITION, + decode(t.DATA_TYPE, + 'NUMBER',t.DATA_TYPE||'('|| + decode(t.DATA_PRECISION, + null,t.DATA_LENGTH||')', + t.DATA_PRECISION||','||t.DATA_SCALE||')'), + 'DATE',t.DATA_TYPE, + 'LONG',t.DATA_TYPE, + 'LONG RAW',t.DATA_TYPE, + 'ROWID',t.DATA_TYPE, + 'MLSLABEL',t.DATA_TYPE, + t.DATA_TYPE||'('||t.DATA_LENGTH||')') ||' '|| + decode(t.nullable, + 'N','NOT NULL', + 'n','NOT NULL', + NULL) col +from + dba_ind_columns i, + dba_tab_columns t +where + i.table_name = upper('&Table_name') +and owner = upper(nvl('&Owner',user)) +and i.table_name = t.table_name +and i.column_name = t.column_name +order by index_name,column_position +/ + +prompt +prompt *************** +prompt Partition Level +prompt *************** + +select + PARTITION_NAME, + NUM_ROWS, + BLOCKS, + EMPTY_BLOCKS, + AVG_SPACE, + CHAIN_CNT, + AVG_ROW_LEN, + GLOBAL_STATS, + USER_STATS, + SAMPLE_SIZE, + to_char(t.last_analyzed,'MM-DD-YYYY') +from + dba_tab_partitions t +where + table_owner = upper(nvl('&&Owner',user)) +and table_name = upper('&&Table_name') +order by partition_position +/ + + +break on partition_name +select + PARTITION_NAME, + COLUMN_NAME, + NUM_DISTINCT, + DENSITY, + NUM_BUCKETS, + NUM_NULLS, + GLOBAL_STATS, + USER_STATS, + SAMPLE_SIZE, + to_char(t.last_analyzed,'MM-DD-YYYY') +from + dba_PART_COL_STATISTICS t +where + table_name = upper('&Table_name') +and owner = upper(nvl('&Owner',user)) +/ + +break on partition_name +select + t.INDEX_NAME, + t.PARTITION_NAME, + t.BLEVEL BLev, + t.LEAF_BLOCKS, + t.DISTINCT_KEYS, + t.NUM_ROWS, + t.AVG_LEAF_BLOCKS_PER_KEY, + t.AVG_DATA_BLOCKS_PER_KEY, + t.CLUSTERING_FACTOR, + t.GLOBAL_STATS, + t.USER_STATS, + t.SAMPLE_SIZE, + to_char(t.last_analyzed,'MM-DD-YYYY') +from + dba_ind_partitions t, + dba_indexes i +where + i.table_name = upper('&Table_name') +and i.table_owner = upper(nvl('&Owner',user)) +and i.owner = t.index_owner +and i.index_name=t.index_name +/ + + +prompt +prompt *************** +prompt SubPartition Level +prompt *************** + +select + PARTITION_NAME, + SUBPARTITION_NAME, + NUM_ROWS, + BLOCKS, + EMPTY_BLOCKS, + AVG_SPACE, + CHAIN_CNT, + AVG_ROW_LEN, + GLOBAL_STATS, + USER_STATS, + SAMPLE_SIZE, + to_char(t.last_analyzed,'MM-DD-YYYY') +from + dba_tab_subpartitions t +where + table_owner = upper(nvl('&&Owner',user)) +and table_name = upper('&&Table_name') +order by SUBPARTITION_POSITION +/ +break on partition_name +select + p.PARTITION_NAME, + t.SUBPARTITION_NAME, + t.COLUMN_NAME, + t.NUM_DISTINCT, + t.DENSITY, + t.NUM_BUCKETS, + t.NUM_NULLS, + t.GLOBAL_STATS, + t.USER_STATS, + t.SAMPLE_SIZE, + to_char(t.last_analyzed,'MM-DD-YYYY') +from + dba_SUBPART_COL_STATISTICS t, + dba_tab_subpartitions p +where + t.table_name = upper('&Table_name') +and t.owner = upper(nvl('&Owner',user)) +and t.subpartition_name = p.subpartition_name +and t.owner = p.table_owner +and t.table_name=p.table_name +/ + +break on partition_name +select + t.INDEX_NAME, + t.PARTITION_NAME, + t.SUBPARTITION_NAME, + t.BLEVEL BLev, + t.LEAF_BLOCKS, + t.DISTINCT_KEYS, + t.NUM_ROWS, + t.AVG_LEAF_BLOCKS_PER_KEY, + t.AVG_DATA_BLOCKS_PER_KEY, + t.CLUSTERING_FACTOR, + t.GLOBAL_STATS, + t.USER_STATS, + t.SAMPLE_SIZE, + to_char(t.last_analyzed,'MM-DD-YYYY') +from + dba_ind_subpartitions t, + dba_indexes i +where + i.table_name = upper('&Table_name') +and i.table_owner = upper(nvl('&Owner',user)) +and i.owner = t.index_owner +and i.index_name=t.index_name +/ + +clear breaks +set echo on \ No newline at end of file diff --git a/vdh/show_cbo_stats11g.sql b/vdh/show_cbo_stats11g.sql new file mode 100644 index 0000000..239a660 --- /dev/null +++ b/vdh/show_cbo_stats11g.sql @@ -0,0 +1,611 @@ +-- setup the reporting environment +set linesize 250 +set pagesize 50000 +set tab off +set long 50000 +set scan on + +column alignment heading "Alignment" format a12 +column avg_data_blocks_per_key heading "Average|Data Blocks|Per Key" format 999G999G990 +column avg_leaf_blocks_per_key heading "Average|Leaf Blocks|Per Key" format 999G999G990 +column avg_row_len heading "Average|Row Len" format 990 +column avg_space heading "Average|Space" format 9G990 +column blev heading "B|Tree|Level" format 90 +column blevel heading "Blevel" format 999999 +column blocks heading "Blocks" format 9G999G990 +column chain_cnt heading "Chain|Count" format 990 +column clustering_factor heading "Cluster|Factor" format 999G999G990 +column col heading "Column|Details" format a25 +column column_expression heading "Expression" format a40 +column column_length heading "Col|Len" format 990 +column column_name heading "Column|Name" format a30 +column column_position heading "Col|Pos" format 990 +column creator heading "Creator" format a7 +column density heading "Density" format 990 +column distinct_keys heading "Distinct|Keys" format 999G999G990 +column droppable heading "Dropable" format a8 +column empty_blocks heading "Empty|Blocks" format 999G990 +column extension heading "Extension" format a100 +column extension_name heading "Name" format a35 +column global_stats heading "Global|Stats" format a6 +column histogram heading "Histogram" format a15 +column index_name heading "Index|Name" format a30 +column index_type heading "Index Type" format a15 +column last_analyzed_str heading "Date|DD/MM/YYYY" format a10 +column leaf_blocks heading "Leaf|Blks" format 999G999G990 +column locality heading "Locality" format a8 +column nbr_directives heading "#Directives" format 9G999G999 +column nullable heading "Null|Table" format a4 +column num_buckets heading "Number|Buckets" format 990 +column num_distinct heading "Distinct|Values" format 999G999G990 +column num_nulls heading "Number|Nulls" format 999G999G990 +column num_rows heading "Number|Of Rows" format 999G999G990 +column object_name heading "Object Name" format a30 +column object_type heading "Object Type" format a15 +column partition_name heading "Partition|Name" format a30 +column partition_type heading "Partition|Type" format a9 +column sample_size heading "Sample|Size" format 999G999G990 +column stale_stats heading "Stale" format a5 +column stattype_locked heading "Stats|Lock" format a5 +column status heading "Status" format a6 +column subobject_name heading "Sub Object Name" format a30 +column subpartition_name heading "Subpartition|Name" format a30 +column subpartition_type heading "Sub Partition|Type" format a13 +column table_name heading "Table|Name" format a30 +column uniqueness heading "Unique" format a9 +column user_stats heading "User|Stats" format a6 + +-- cleanup any dangling variables +undefine _owner +undefine _table_name +undefine _table_stats +undefine _tab_part_name +undefine _tab_subpart_name +undefine _column_stats +undefine _index_stats +undefine _index_name +undefine _ind_part_name +undefine _ind_subpart_name +undefine _cbo_directives +undefine _default_owner + +-- grab the curent user +set verify off +set feedback off +set termout off +column uservar new_value _default_owner noprint +select user uservar from dual; +set termout on + +-- get the user options on which part of the report should be shown and the filters to be applied +prompt +accept _owner default &_default_owner prompt 'Table owner (default &_default_owner): ' +accept _table_name prompt 'Table name: ' +accept _table_stats default 'YES' prompt 'Display table stats (YES|NO, default YES): ' +accept _tab_part_name default '' prompt 'Table partition name (default = no filter, / = none): ' +accept _tab_subpart_name default '' prompt 'Table sub partition name (default = no filter, / = none): ' +accept _column_stats default 'YES' prompt 'Display column statistics (YES|NO, default YES): ' +accept _index_stats default 'NO' prompt 'Display index statistics (YES|NO, default NO): ' +accept _index_name default '' prompt 'Index name (default = no filter): ' +accept _ind_part_name default '' prompt 'Index partition name (default = no filter, / = none): ' +accept _ind_subpart_name default '' prompt 'Index sub partition name (default = no filter, / = none): ' +prompt + +-- use a refcursor and autoprint to allow parts of the report to be toggled on and off +var c_result refcursor +set autoprint on +set serveroutput on + +-- actual reporting starts here + + +-- table statistics +break on object_type skip 1 duplicates +BEGIN + + if upper('&_table_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('********************************************'); + dbms_output.put_line('Table \ Partition \ Subpartition Statistics'); + dbms_output.put_line('********************************************'); + + open :c_result for + select + table_name, + partition_name, + subpartition_name, + object_type, + num_rows, + blocks, + empty_blocks, + avg_space, + chain_cnt, + avg_row_len, + global_stats, + user_stats, + sample_size, + stattype_locked, + to_char(last_analyzed,'DD/MM/YYYY') last_analyzed_str, + stale_stats + from + dba_tab_statistics + where + --filter the table stats on the given owner and table name + owner = '&_owner' + and table_name = '&_table_name' + --apply optional filter on the partitions listed + and ( partition_name = nvl('&_tab_part_name', partition_name) + or partition_name is null + or subpartition_name = nvl('&_tab_subpart_name', subpartition_name) + ) + --apply optional filter on the sub partitions listed + and ( subpartition_name = nvl('&_tab_subpart_name', subpartition_name) + or subpartition_name is null + ) + order by + partition_position nulls first, + subpartition_position nulls first + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + +-- extented statistics definitions +BEGIN + + if upper('&_column_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('********************************'); + dbms_output.put_line('Extented Statistics Definitions'); + dbms_output.put_line('********************************'); + + open :c_result for + select + extension_name, + extension, + creator, + droppable + from + dba_stat_extensions + where + --filter the extented stats def on the given owner and table name + owner = '&_owner' + and table_name = '&_table_name' + order by + extension_name + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + + +-- column statistics +BEGIN + + if upper('&_column_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('******************************'); + dbms_output.put_line('Table level Column Statistics'); + dbms_output.put_line('******************************'); + + -- unlike the *_(sub)part_tab_col_statistics views, the *_tab_col_statistics view only contains records + -- for the columns with statistics, requiring the dba_tab_columns to be used instead. + -- but dba_tab_columns does not include the "columns" of extented statistics + -- that is why a full outer join is done between dba_tab_columns and dba_tab_col_statistics + open :c_result for + select + nvl(atc.column_name, atcs.column_name) column_name, + nvl2(atc.column_name, decode( atc.data_type, + 'NUMBER', atc.data_type || '(' || decode(atc.data_precision,null, data_length || ')', atc.data_precision || ',' || atc.data_scale ||')'), + 'DATE', atc.data_type, + 'LONG', atc.data_type, + 'LONG RAW', atc.data_type, + 'ROWID', atc.data_type, + 'MLSLABEL', atc.data_type, + atc.data_type || '(' || atc.data_length || ')' + ) ||' ' || decode(atc.nullable, 'N', 'NOT NULL', 'n', 'NOT NULL', ''), '') col, + nvl(atc.num_distinct, atcs.num_distinct) num_distinct, + nvl(atc.density,atcs.density) density, + nvl(atc.histogram,atcs.histogram) histogram, + nvl(atc.num_buckets,atcs.num_buckets) num_buckets, + nvl(atc.num_nulls,atcs.num_nulls) num_nulls, + nvl(atc.global_stats,atcs.global_stats) global_stats, + nvl(atc.user_stats,atcs.user_stats) user_stats, + nvl(atc.sample_size,atcs.sample_size) sample_size, + to_char(nvl(atc.last_analyzed, atcs.last_analyzed),'DD/MM/YYYY') last_analyzed_str + from + dba_tab_columns atc + full outer join dba_tab_col_statistics atcs + on ( atc.owner = atcs.owner + and atc.table_name = atcs.table_name + and atc.column_name = atcs.column_name + ) + where + --filter the column statistics on the given owner and table name (for both tables due to the full outer join) + ( ( atcs.owner = '&_owner' + and atcs.table_name = '&_table_name' + ) + or atcs.owner is null + ) + and ( ( atc.owner = '&_owner' + and atc.table_name = '&_table_name' + ) + or atc.owner is null + ) + order by + atc.column_id nulls last, + atcs.column_name + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + + +-- partition level column statistics +break on partition_name skip 1 + +BEGIN + + if upper('&_column_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('**********************************'); + dbms_output.put_line('Partition Level Column Statistics'); + dbms_output.put_line('**********************************'); + + open :c_result for + select + atp.partition_name, + apcs.column_name, + apcs.num_distinct, + apcs.density, + apcs.histogram, + apcs.num_buckets, + apcs.num_nulls, + apcs.global_stats, + apcs.user_stats, + apcs.sample_size, + to_char(apcs.last_analyzed,'DD/MM/YYYY') last_analyzed_str + from + dba_tab_partitions atp + join dba_part_col_statistics apcs + on ( atp.table_owner = apcs.owner + and atp.table_name = apcs.table_name + and atp.partition_name = apcs.partition_name + ) + left outer join dba_tab_columns atc + on ( apcs.owner = atc.owner + and apcs.table_name = atc.table_name + and apcs.column_name = atc.column_name + ) + where + --filter the column statistics on the given owner and table name + atp.table_owner = '&_owner' + and atp.table_name = '&_table_name' + --apply optional filter on the partitions listed + and atp.partition_name = nvl('&_tab_part_name', atp.partition_name) + order by + atp.partition_position, + atc.column_id nulls last, + apcs.column_name + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + + +-- sub partition level column statistics +break on partition_name skip 2 on subpartition_name skip 1 + +BEGIN + + if upper('&_column_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('**************************************'); + dbms_output.put_line('Sub Partition Level Column Statistics'); + dbms_output.put_line('**************************************'); + + open :c_result for + select + atsp.partition_name, + atsp.subpartition_name, + ascs.column_name, + ascs.num_distinct, + ascs.density, + ascs.histogram, + ascs.num_buckets, + ascs.num_nulls, + ascs.global_stats, + ascs.user_stats, + ascs.sample_size, + to_char(ascs.last_analyzed,'DD/MM/YYYY') last_analyzed_str + from + dba_tab_partitions atp + join dba_tab_subpartitions atsp + on ( atp.table_owner = atsp.table_owner + and atp.table_name = atsp.table_name + and atp.partition_name = atsp.partition_name + ) + join dba_subpart_col_statistics ascs + on ( atsp.table_owner = ascs.owner + and atsp.table_name = ascs.table_name + and atsp.subpartition_name = ascs.subpartition_name + ) + left outer join dba_tab_columns atc + on ( ascs.owner = atc.owner + and ascs.table_name = atc.table_name + and ascs.column_name = atc.column_name + ) + where + --filter the column statistics on the given owner and table name + atp.table_owner = '&_owner' + and atp.table_name = '&_table_name' + --apply optional filter on the partitions listed + and ( atsp.partition_name = nvl('&_tab_part_name', atsp.partition_name) + or atsp.subpartition_name = nvl('&_tab_subpart_name', atsp.subpartition_name) + ) + --apply optional filter on the sub partitions listed + and atsp.subpartition_name = nvl('&_tab_subpart_name', atsp.subpartition_name) + order by + atp.partition_position, + atsp.subpartition_position, + atc.column_id nulls last, + ascs.column_name + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + + +-- index definitions +break on index_name skip page + +BEGIN + + if upper('&_index_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.put_line('*********************************************'); + dbms_output.put_line('Index (Partition \ Subpartition) Statistics'); + dbms_output.put_line('*********************************************'); + dbms_output.new_line; + + dbms_output.put_line('Index Definitions'); + dbms_output.put_line('------------------'); + + open :c_result for + select + ind.index_name, + ind.index_type, + decode(ind.uniqueness,'UNIQUE', 'Y', 'N') uniqueness, + ind.status, + inc.column_position, + inc.column_name, + ine.column_expression, + inp.partitioning_type, + inp.subpartitioning_type, + inp.locality, + inp.alignment + from + dba_indexes ind + join dba_ind_columns inc + on ( inc.index_owner = ind.owner + and inc.index_name = ind.index_name + ) + left outer join dba_ind_expressions ine + on ( ine.index_owner = inc.index_owner + and ine.index_name = inc.index_name + and ine.column_position = inc.column_position + ) + left outer join dba_part_indexes inp + on ( inp.owner = ind.owner + and inp.index_name = ind.index_name + ) + where + --filter the indexes on the given owner and table name + ind.table_owner = '&_owner' + and ind.table_name = '&_table_name' + --apply optional filter on the indexes listed + and ind.index_name = nvl('&_index_name', ind.index_name) + order by + ind.index_name, + inc.column_position + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + + +-- index statistics +break on index_name skip page on partition_name skip 1 + +BEGIN + + if upper('&_index_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('Index Statistics'); + dbms_output.put_line('-----------------'); + + open :c_result for + select + index_name, + partition_name, + subpartition_name, + blevel, + leaf_blocks, + distinct_keys, + avg_leaf_blocks_per_key, + avg_data_blocks_per_key, + clustering_factor, + num_rows, + sample_size, + to_char(last_analyzed, 'DD/MM/YYYY') last_analyzed_str, + user_stats, + global_stats, + stattype_locked, + stale_stats + from + dba_ind_statistics + where + --filter the indexes on the given owner and table name + table_owner = '&_owner' + and table_name = '&_table_name' + --apply optional filter on the indexes listed + and index_name = nvl('&_index_name', index_name) + --apply optional filter on the partitions listed + and ( partition_name = nvl('&_ind_part_name', partition_name) + or partition_name is null + or subpartition_name = '&_ind_subpart_name' + ) + --apply optional filter on the sub partitions listed + and ( subpartition_name = nvl('&_ind_subpart_name', subpartition_name) + or subpartition_name is null + ) + order by + index_name, + partition_position nulls first, + subpartition_position nulls first + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + + +prompt + +-- cleanup the environment +undefine _owner +undefine _table_name +undefine _table_stats +undefine _tab_part_name +undefine _tab_subpart_name +undefine _column_stats +undefine _index_stats +undefine _index_name +undefine _ind_part_name +undefine _ind_subpart_name +undefine _cbo_directives +undefine _default_owner + +set autoprint off + +-- the end diff --git a/vdh/show_cbo_stats12c.sql b/vdh/show_cbo_stats12c.sql new file mode 100644 index 0000000..8ac9a04 --- /dev/null +++ b/vdh/show_cbo_stats12c.sql @@ -0,0 +1,792 @@ +-- setup the reporting environment +set linesize 250 +set pagesize 50000 +set tab off +set long 50000 +set scan on + +column alignment heading "Alignment" format a12 +column avg_data_blocks_PER_KEY heading "Average|Data Blocks|Per Key" format 99G990 +column avg_leaf_blocks_PER_KEY heading "Average|Leaf Blocks|Per Key" format 99G990 +column avg_row_len heading "Average|Row Len" format 9G990 +column avg_space heading "Average|Space" format 9G990 +column blev heading "B|Tree|Level" format 90 +column blevel heading "Blevel" format 999999 +column blocks heading "Blocks" format 999G999G990 +column chain_cnt heading "Chain|Count" format 990 +column clustering_factor heading "Cluster|Factor" format 999G999G990 +column col heading "Column|Details" format a24 +column column_expression heading "Expression" format a40 +column column_length heading "Col|Len" format 990 +column column_name heading "Column|Name" format a30 +column column_position heading "Col|Pos" format 990 +column creator heading "Creator" format a7 +column density heading "Density" format 990 +column directive_auto_drop heading "Auto|Drop" format a4 +column directive_crea_str heading "Created" format a16 +column directive_enabled heading "Enabled" format a7 +column directive_id heading "Directive ID" format 999999999999999999999 +column directive_mod_str heading "Modified" format a16 +column directive_notes heading "Notes" format a200 word_wrapped +column directive_reason heading "Reason" format a30 word_wrapped +column directive_state heading "State" format a10 +column directive_type heading "Type" format a16 +column directive_used_str heading "Used" format a16 +column distinct_keys heading "Distinct|Keys" format 999G999G990 +column droppable heading "Dropable" format a8 +column empty_blocks heading "Empty|Blocks" format 999G990 +column extension heading "Extension" format a100 +column extension_name heading "Name" format a35 +column global_stats heading "Global|Stats" format a6 +column histogram heading "Histogram" format a15 +column index_name heading "Index|Name" format a30 +column index_type heading "Index Type" format a15 +column last_analyzed_str heading "Date|DD/MM/YYYY" format a10 +column leaf_blocks heading "Leaf|Blks" format 999G999G990 +column locality heading "Locality" format a8 +column nbr_directives heading "#Directives" format 9G999G999 +column notes heading "Notes" format a30 +column nullable heading "Null|Table" format a4 +column num_buckets heading "Number|Buckets" format 990 +column num_distinct heading "Distinct|Values" format 999G999G990 +column num_nulls heading "Number|Nulls" format 999G999G990 +column num_rows heading "Number|Of Rows" format 999G999G990 +column object_name heading "Object Name" format a30 +column object_type heading "Object Type" format a15 +column partition_name heading "Partition|Name" format a30 +column partition_type heading "Partition|Type" format a9 +column sample_size heading "Sample|Size" format 999G999G990 +column scope heading "Scope" format a8 +column stale_stats heading "Stale" format a5 +column stattype_locked heading "Stats|Lock" format a5 +column status heading "Status" format a6 +column subobject_name heading "Sub Object Name" format a30 +column subpartition_name heading "Subpartition|Name" format a30 +column subpartition_type heading "Sub Partition|Type" format a13 +column table_name heading "Table|Name" format a30 +column uniqueness heading "Unique" format a9 +column user_stats heading "User|Stats" format a6 +column preference_name heading "Preference" format a30 +column preference_value heading "Value" format a200 + +-- cleanup any dangling variables +undefine _owner +undefine _table_name +undefine _show_tab_prefs +undefine _table_stats +undefine _tab_part_name +undefine _tab_subpart_name +undefine _column_stats +undefine _index_stats +undefine _index_name +undefine _ind_part_name +undefine _ind_subpart_name +undefine _cbo_directives +undefine _default_owner + +-- grab the curent user +set verify off +set feedback off +set termout off +column uservar new_value _default_owner noprint +select user uservar from dual; +set termout on + +-- get the user options on which part of the report should be shown and the filters to be applied +prompt +accept _owner default &_default_owner prompt 'Table owner (default &_default_owner): ' +accept _table_name prompt 'Table name: ' +accept _show_tab_prefs default 'NO' prompt 'Display table prefs (YES|NO, default NO): ' +accept _table_stats default 'YES' prompt 'Display table stats (YES|NO, default YES): ' +accept _tab_part_name default '' prompt 'Table partition name (default = no filter, / = none): ' +accept _tab_subpart_name default '' prompt 'Table sub partition name (default = no filter, / = none): ' +accept _column_stats default 'YES' prompt 'Display column statistics (YES|NO, default YES): ' +accept _index_stats default 'NO' prompt 'Display index statistics (YES|NO, default NO): ' +accept _index_name default '' prompt 'Index name (default = no filter): ' +accept _ind_part_name default '' prompt 'Index partition name (default = no filter, / = none): ' +accept _ind_subpart_name default '' prompt 'Index sub partition name (default = no filter, / = none): ' +accept _cbo_directives default 'NO' prompt 'Display CBO directives details (YES|NO, default NO): ' +prompt + +-- use a refcursor and autoprint to allow parts of the report to be toggled on and off +var c_result refcursor +set autoprint on +set serveroutput on + +-- actual reporting starts here + +-- table stat preferences +BEGIN + + if upper('&_show_tab_prefs') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('******************'); + dbms_output.put_line('Table Preferences'); + dbms_output.put_line('******************'); + + open :c_result for + select + preference_name, + preference_value + from + dba_tab_stat_prefs + where + owner = '&_owner' + and table_name = '&_table_name' + order by + preference_name + ; + + else + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +-- table statistics +break on object_type skip 1 duplicates +BEGIN + + if upper('&_table_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('********************************************'); + dbms_output.put_line('Table \ Partition \ Subpartition Statistics'); + dbms_output.put_line('********************************************'); + + open :c_result for + select + table_name, + partition_name, + subpartition_name, + object_type, + num_rows, + blocks, + empty_blocks, + avg_space, + chain_cnt, + avg_row_len, + global_stats, + user_stats, + sample_size, + scope, + stattype_locked, + to_char(last_analyzed,'DD/MM/YYYY') last_analyzed_str, + stale_stats + from + dba_tab_statistics + where + --filter the table stats on the given owner and table name + owner = '&_owner' + and table_name = '&_table_name' + --apply optional filter on the partitions listed + and ( partition_name like nvl('&_tab_part_name', partition_name) + or partition_name is null + or subpartition_name like nvl('&_tab_subpart_name', subpartition_name) + ) + --apply optional filter on the sub partitions listed + and ( subpartition_name like nvl('&_tab_subpart_name', subpartition_name) + or subpartition_name is null + ) + order by + partition_position nulls first, + subpartition_position nulls first + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + +-- extented statistics definitions +BEGIN + + if upper('&_column_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('********************************'); + dbms_output.put_line('Extented Statistics Definitions'); + dbms_output.put_line('********************************'); + + open :c_result for + select + extension_name, + extension, + creator, + droppable + from + dba_stat_extensions + where + --filter the extented stats def on the given owner and table name + owner = '&_owner' + and table_name = '&_table_name' + order by + extension_name + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + + +-- column statistics +BEGIN + + if upper('&_column_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('******************************'); + dbms_output.put_line('Table level Column Statistics'); + dbms_output.put_line('******************************'); + + -- unlike the *_(sub)part_tab_col_statistics views, the *_tab_col_statistics view only contains records + -- for the columns with statistics, requiring the dba_tab_columns to be used instead. + -- but dba_tab_columns does not include the "columns" of extented statistics + -- that is why a full outer join is done between dba_tab_columns and dba_tab_col_statistics + open :c_result for + select + nvl(atc.column_name, atcs.column_name) column_name, + nvl2(atc.column_name, decode( atc.data_type, + 'NUMBER', atc.data_type || '(' || decode(atc.data_precision,null, data_length || ')', atc.data_precision || ',' || atc.data_scale ||')'), + 'DATE', atc.data_type, + 'LONG', atc.data_type, + 'LONG RAW', atc.data_type, + 'ROWID', atc.data_type, + 'MLSLABEL', atc.data_type, + atc.data_type || '(' || atc.data_length || ')' + ) ||' ' || decode(atc.nullable, 'N', 'NOT NULL', 'n', 'NOT NULL', ''), '') col, + nvl(atc.num_distinct, atcs.num_distinct) num_distinct, + nvl(atc.density,atcs.density) density, + nvl(atc.histogram,atcs.histogram) histogram, + nvl(atc.num_buckets,atcs.num_buckets) num_buckets, + nvl(atc.num_nulls,atcs.num_nulls) num_nulls, + nvl(atc.global_stats,atcs.global_stats) global_stats, + nvl(atc.user_stats,atcs.user_stats) user_stats, + nvl(atc.sample_size,atcs.sample_size) sample_size, + to_char(nvl(atc.last_analyzed, atcs.last_analyzed),'DD/MM/YYYY') last_analyzed_str, + atcs.notes + from + dba_tab_columns atc + full outer join dba_tab_col_statistics atcs + on ( atc.owner = atcs.owner + and atc.table_name = atcs.table_name + and atc.column_name = atcs.column_name + ) + where + --filter the column statistics on the given owner and table name (for both tables due to the full outer join) + ( ( atcs.owner = '&_owner' + and atcs.table_name = '&_table_name' + ) + or atcs.owner is null + ) + and ( ( atc.owner = '&_owner' + and atc.table_name = '&_table_name' + ) + or atc.owner is null + ) + order by + atc.column_id nulls last, + atcs.column_name + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + + +-- partition level column statistics +break on partition_name skip 1 + +BEGIN + + if upper('&_column_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('**********************************'); + dbms_output.put_line('Partition Level Column Statistics'); + dbms_output.put_line('**********************************'); + + open :c_result for + select + atp.partition_name, + apcs.column_name, + apcs.num_distinct, + apcs.density, + apcs.histogram, + apcs.num_buckets, + apcs.num_nulls, + apcs.global_stats, + apcs.user_stats, + apcs.sample_size, + to_char(apcs.last_analyzed,'DD/MM/YYYY') last_analyzed_str, + apcs.notes + from + dba_tab_partitions atp + join dba_part_col_statistics apcs + on ( atp.table_owner = apcs.owner + and atp.table_name = apcs.table_name + and atp.partition_name = apcs.partition_name + ) + left outer join dba_tab_columns atc + on ( apcs.owner = atc.owner + and apcs.table_name = atc.table_name + and apcs.column_name = atc.column_name + ) + where + --filter the column statistics on the given owner and table name + atp.table_owner = '&_owner' + and atp.table_name = '&_table_name' + --apply optional filter on the partitions listed + and atp.partition_name like nvl('&_tab_part_name', atp.partition_name) + order by + atp.partition_position, + atc.column_id nulls last, + apcs.column_name + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + + +-- sub partition level column statistics +break on partition_name skip 2 on subpartition_name skip 1 + +BEGIN + + if upper('&_column_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('**************************************'); + dbms_output.put_line('Sub Partition Level Column Statistics'); + dbms_output.put_line('**************************************'); + + open :c_result for + select + atsp.partition_name, + atsp.subpartition_name, + ascs.column_name, + ascs.num_distinct, + ascs.density, + ascs.histogram, + ascs.num_buckets, + ascs.num_nulls, + ascs.global_stats, + ascs.user_stats, + ascs.sample_size, + to_char(ascs.last_analyzed,'DD/MM/YYYY') last_analyzed_str, + ascs.notes + from + dba_tab_partitions atp + join dba_tab_subpartitions atsp + on ( atp.table_owner = atsp.table_owner + and atp.table_name = atsp.table_name + and atp.partition_name = atsp.partition_name + ) + join dba_subpart_col_statistics ascs + on ( atsp.table_owner = ascs.owner + and atsp.table_name = ascs.table_name + and atsp.subpartition_name = ascs.subpartition_name + ) + left outer join dba_tab_columns atc + on ( ascs.owner = atc.owner + and ascs.table_name = atc.table_name + and ascs.column_name = atc.column_name + ) + where + --filter the column statistics on the given owner and table name + atp.table_owner = '&_owner' + and atp.table_name = '&_table_name' + --apply optional filter on the partitions listed + and ( atsp.partition_name like nvl('&_tab_part_name', atsp.partition_name) + or atsp.subpartition_name like nvl('&_tab_subpart_name', atsp.subpartition_name) + ) + --apply optional filter on the sub partitions listed + and atsp.subpartition_name like nvl('&_tab_subpart_name', atsp.subpartition_name) + order by + atp.partition_position, + atsp.subpartition_position, + atc.column_id nulls last, + ascs.column_name + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + + +-- index definitions +break on index_name skip page + +BEGIN + + if upper('&_index_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.put_line('*********************************************'); + dbms_output.put_line('Index (Partition \ Subpartition) Statistics'); + dbms_output.put_line('*********************************************'); + dbms_output.new_line; + + dbms_output.put_line('Index Definitions'); + dbms_output.put_line('------------------'); + + open :c_result for + select + ind.index_name, + ind.index_type, + decode(ind.uniqueness,'UNIQUE', 'Y', 'N') uniqueness, + ind.status, + inc.column_position, + inc.column_name, + ine.column_expression, + inp.partitioning_type, + inp.subpartitioning_type, + inp.locality, + inp.alignment + from + dba_indexes ind + join dba_ind_columns inc + on ( inc.index_owner = ind.owner + and inc.index_name = ind.index_name + ) + left outer join dba_ind_expressions ine + on ( ine.index_owner = inc.index_owner + and ine.index_name = inc.index_name + and ine.column_position = inc.column_position + ) + left outer join dba_part_indexes inp + on ( inp.owner = ind.owner + and inp.index_name = ind.index_name + ) + where + --filter the indexes on the given owner and table name + ind.table_owner = '&_owner' + and ind.table_name = '&_table_name' + --apply optional filter on the indexes listed + and ind.index_name like nvl('&_index_name', ind.index_name) + order by + ind.index_name, + inc.column_position + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + + +-- index statistics +break on index_name skip page on partition_name skip 1 + +BEGIN + + if upper('&_index_stats') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('Index Statistics'); + dbms_output.put_line('-----------------'); + + open :c_result for + select + index_name, + partition_name, + subpartition_name, + blevel, + leaf_blocks, + distinct_keys, + avg_leaf_blocks_per_key, + avg_data_blocks_per_key, + clustering_factor, + num_rows, + sample_size, + to_char(last_analyzed, 'DD/MM/YYYY') last_analyzed_str, + user_stats, + global_stats, + stattype_locked, + stale_stats, + scope + from + dba_ind_statistics + where + --filter the indexes on the given owner and table name + table_owner = '&_owner' + and table_name = '&_table_name' + --apply optional filter on the indexes listed + and index_name like nvl('&_index_name', index_name) + --apply optional filter on the partitions listed + and ( partition_name like nvl('&_ind_part_name', partition_name) + or partition_name is null + or subpartition_name like '&_ind_subpart_name' + ) + --apply optional filter on the sub partitions listed + and ( subpartition_name like nvl('&_ind_subpart_name', subpartition_name) + or subpartition_name is null + ) + order by + index_name, + partition_position nulls first, + subpartition_position nulls first + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + + +-- CBO Directives +BEGIN + + dbms_output.new_line; + dbms_output.put_line('***************'); + dbms_output.put_line('CBO Directives'); + dbms_output.put_line('***************'); + + open :c_result for + select + count(*) nbr_directives + from + dba_sql_plan_dir_objects pdo + join dba_sql_plan_directives pd + on ( pdo.directive_id = pd.directive_id + ) + where + --filter the CBO directives on the given owner and table name + pdo.owner = '&_owner' + and pdo.object_name = '&_table_name' + ; + +END; +/ + +BEGIN + + open :c_result for + select + pd.type directive_type, + pd.enabled directive_enabled, + pd.state directive_state, + count(*) nbr_directives + from + dba_sql_plan_dir_objects pdo + join dba_sql_plan_directives pd + on ( pdo.directive_id = pd.directive_id + ) + where + --filter the CBO directives on the given owner and table name + pdo.owner = '&_owner' + and pdo.object_name = '&_table_name' + group by + pd.type, + pd.enabled, + pd.state + order by + pd.type, + pd.enabled, + pd.state + ; + +END; +/ + + +break on directive_id skip page + +BEGIN + + if upper('&_cbo_directives') = 'YES' + then + + dbms_output.new_line; + dbms_output.new_line; + dbms_output.put_line('Directive Details'); + dbms_output.put_line('------------------'); + + open :c_result for + select + pd.directive_id, + pdo.object_type, + pdo.object_name, + pdo.subobject_name, + pd.type directive_type, + pd.enabled directive_enabled, + pd.state directive_state, + pd.auto_drop directive_auto_drop, + pd.reason directive_reason, + to_char(pd.created, 'DD/MM/YYYY HH24:MI') directive_crea_str, + to_char(pd.last_modified, 'DD/MM/YYYY HH24:MI') directive_mod_str, + to_char(pd.last_used, 'DD/MM/YYYY HH24:MI') directive_used_str, + pd.notes directive_notes + from + dba_sql_plan_dir_objects pdo + join dba_sql_plan_directives pd + on ( pdo.directive_id = pd.directive_id + ) + where + --filter the CBO directives on the given owner and table name + pdo.owner = '&_owner' + and pdo.object_name = '&_table_name' + order by + pd.directive_id, + pdo.object_type, + pdo.object_name, + pdo.subobject_name + ; + + else + + open :c_result for + select + * + from + dual + where + 1 = 0 + ; + + end if; + +END; +/ + +clear breaks + + + +prompt + +-- cleanup the environment +undefine _owner +undefine _table_name +undefine _table_stats +undefine _tab_part_name +undefine _tab_subpart_name +undefine _column_stats +undefine _index_stats +undefine _index_name +undefine _ind_part_name +undefine _ind_subpart_name +undefine _cbo_directives +undefine _default_owner + +set autoprint off +set feedback on + +-- the end diff --git a/vdh/show_compression_counts.sql b/vdh/show_compression_counts.sql new file mode 100644 index 0000000..5f6f376 --- /dev/null +++ b/vdh/show_compression_counts.sql @@ -0,0 +1,83 @@ +-- report on the number of compressed objects (per owner, object_type and compression type) + +column owner format a30 +column object_type format a20 +column compress_for format a30 +column counted format 9G999G999G999 + +break on owner skip 1 on page + +select + owner, + compress_for, + object_type, + count(*) counted +from + ( select + owner, + 'TABLE' as object_type, + compress_for + from + dba_tables + where + nvl(compression, 'DISABLED') != 'DISABLED' + union all + select + table_owner, + 'TABLE_PART' as object_type, + compress_for + from + dba_tab_partitions + where + nvl(compression, 'DISABLED') != 'DISABLED' + and compression != 'NONE' + union all + select + table_owner, + 'TABLE_SUBPART' as object_type, + compress_for + from + dba_tab_subpartitions + where + nvl(compression, 'DISABLED') != 'DISABLED' + union all + select + owner, + 'INDEX' as object_type, + decode(compression, 'ENABLED', 'BASIC', compression) + from + dba_indexes + where + nvl(compression, 'DISABLED') != 'DISABLED' + union all + select + index_owner, + 'INDEX_PART' as object_type, + decode(compression, 'ENABLED', 'BASIC', compression) + from + dba_ind_partitions + where + nvl(compression, 'DISABLED') != 'DISABLED' + and compression != 'NONE' + union all + select + index_owner, + 'INDEX_SUBPART' as object_type, + decode(compression, 'ENABLED', 'BASIC', compression) + from + dba_ind_subpartitions + where + nvl(compression, 'DISABLED') != 'DISABLED' + ) +group by + owner, + object_type, + compress_for +order by + owner, + compress_for, + object_type +; + +clear computes +clear breaks diff --git a/vdh/show_flashback_size_history.sql b/vdh/show_flashback_size_history.sql new file mode 100644 index 0000000..a43359e --- /dev/null +++ b/vdh/show_flashback_size_history.sql @@ -0,0 +1,22 @@ +-- shows the recent history of flashback log generation in 1 hour time periods +-- db data is the number of database bytes read / written during that time period + +column begin_time_str format a18 +column end_time_str format a18 +column flashback_data_mb format 999G990D99 +column db_data_gb format 990D99 +column redo_data_mb format 999G990D99 +column estimated_flashback_size_gb format 990D99 + +select + to_char(begin_time, 'DD/MM/YYYY HH24:MI') begin_time_str, + to_char(end_time, 'DD/MM/YYYY HH24:MI') end_time_str, + flashback_data/1024/1024 flashback_data_mb, + db_data/1024/1024/1024 db_data_gb, + redo_data/1024/1024 redo_data_mb, + estimated_flashback_size/1024/1024/1024 estimated_flashback_size_gb +from + v$flashback_database_stat +order by + begin_time +; diff --git a/vdh/show_latest_arch.sql b/vdh/show_latest_arch.sql new file mode 100644 index 0000000..cb51790 --- /dev/null +++ b/vdh/show_latest_arch.sql @@ -0,0 +1,15 @@ +select thread#, sequence#, next_change#, to_char(next_time, 'DD/MM/YYYY HH24:MI:SS') next_time +from ( select thread#, sequence#, next_time, next_change#, + row_number() over + ( partition by thread# + order by sequence# desc + ) rn + from v$archived_log + where resetlogs_id = + ( select resetlogs_id + from v$database_incarnation + where status = 'CURRENT' + ) + ) +where rn = 1 +order by thread#; diff --git a/vdh/show_outline_hints.sql b/vdh/show_outline_hints.sql new file mode 100644 index 0000000..ba59085 --- /dev/null +++ b/vdh/show_outline_hints.sql @@ -0,0 +1,28 @@ +select + hint as outline_hints +from + ( select + p.name, + p.signature, + p.category, + row_number() over + ( partition by + sd.signature, + sd.category + order by + sd.signature + ) row_num, + extractValue(value(t), '/hint') hint + from + sys.sqlobj$data sd, + dba_sql_profiles p, + table(xmlsequence(extract(xmltype(sd.comp_data), '/outline_data/hint'))) t + where + sd.obj_type = 1 + and p.signature = sd.signature + and p.category = sd.category + and p.name like ('%&profile_name%) + ) +order by + row_num +; diff --git a/vdh/show_privs.sql b/vdh/show_privs.sql new file mode 100644 index 0000000..a90b154 --- /dev/null +++ b/vdh/show_privs.sql @@ -0,0 +1,147 @@ +set verify off + +prompt +accept grantee prompt Grantee: +prompt + +column account_status format a20 +column creation_date format a20 +column tablespac_name format a20 +column profile format a15 + +select + to_char(created, 'DD/MM/YYYY HH24:MI:SS') creation_date, + account_status, profile, default_tablespace, authentication_type, + to_char(expiry_date, 'DD/MM/YYYY') expiry_date +from + dba_users +where + username = '&&grantee' +; + + +prompt +prompt System Privileges +prompt ----------------- + +select + privilege, admin_option +from + dba_sys_privs +where + grantee = '&&grantee' +order by + privilege +; + +prompt +prompt Object Privileges +prompt ----------------- + +select + owner, table_name, privilege, grantable, hierarchy +from + dba_tab_privs +where + grantee = '&&grantee' +order by + owner, table_name, privilege +; + +prompt +prompt Direclty Granted Roles +prompt ----------------------- + +select + granted_role, admin_option, default_role +from + dba_role_privs +where + grantee = '&&grantee' +order by + granted_role +; + +prompt +prompt All Granted Roles +prompt ----------------- + +with user_role_hierarchy +as ( select + t2.name username, t1.granted_role + from + ( select + distinct sa.userid, u.name granted_role + from + ( select + t.*, connect_by_root grantee# userid + from + sys.sysauth$ t + connect by + prior privilege# = grantee# + ) sa, + sys.user$ u + where + u.user# = sa.privilege# + and sa.userid in + ( select + user# + from + sys.user$ + where + type# = 1 -- normal users + or user# = 1 -- PUBLIC + ) + ) t1, + sys.user$ t2 + where + t1.userid = t2.user# + ) +select + * +from + user_role_hierarchy +where + username = '&&grantee' +order by + granted_role +; + + +prompt +prompt TS Quotas +prompt ----------------- + +select + tablespace_name, max_bytes, dropped +from + dba_ts_quotas +where + username = '&&grantee' +order by + tablespace_name +; + + +prompt +prompt Objects +prompt ------- + +break on tablespace_name skip 1 + +select + seg.tablespace_name, obj.object_type, count(*) counted +from + dba_objects obj, + dba_segments seg +where + obj.owner = seg.owner(+) + and obj.object_name = seg.segment_name(+) + and obj.owner = '&&grantee' +group by + seg.tablespace_name, obj.object_type +order by + seg.tablespace_name nulls last, obj.object_type +; + +clear breaks; diff --git a/vdh/show_privs2.sql b/vdh/show_privs2.sql new file mode 100644 index 0000000..837132b --- /dev/null +++ b/vdh/show_privs2.sql @@ -0,0 +1,224 @@ +set verify off + +set linesize 200 +set pages 50000 + +prompt +accept grantee prompt Grantee: +prompt + +column account_status format a20 +column creation_date format a20 +column tablespac_name format a20 +column profile format a15 + +select + to_char(created, 'DD/MM/YYYY HH24:MI:SS') creation_date, + account_status, profile, default_tablespace, authentication_type, + to_char(expiry_date, 'DD/MM/YYYY') expiry_date +from + dba_users +where + username = '&&grantee' +; + + +prompt +prompt All System Privileges +prompt --------------------- + +column grantee format a30 heading "Grantee" +column grantee_type format a10 heading "Type" +column privilege format a40 heading "Privilege" +column admin_option format a10 heading "Admin" + +break on grantee skip 1 on grantee_type + +with grantees as + ( select + distinct + connect_by_root(usr.name) username, + r_usr.name name, + 'Role' grantee_type + from + sys.sysauth$ sau, + sys.user$ r_usr, + sys.user$ usr + where + sau.privilege# = r_usr.user# + and sau.grantee# = usr.user# + connect by + prior privilege# = grantee# + start with + grantee# in + ( select + user# + from + sys.user$ + where + name = '&&grantee' + ) + union all + select + name, name, 'User' + from + sys.user$ + where + name = '&&grantee' + ) +select + sp.grantee, grt.grantee_type, sp.privilege, sp.admin_option +from + grantees grt, + dba_sys_privs sp +where + grt.name = sp.grantee +order by + sp.grantee, + sp.privilege +; + +clear breaks + +prompt +prompt All Object Privileges +prompt --------------------- + +column grantee format a30 heading "Grantee" +column grantee_type format a10 heading "Type" +column owner format a30 heading "Owner" +column table_name format a40 heading "Object" +column privilege format a40 heading "Privilege" +column admin_option format a10 heading "Admin" + +break on grantee skip 1 on grantee_type on owner on table_name + +with grantees as + ( select + distinct + connect_by_root(usr.name) username, + r_usr.name name, + 'Role' grantee_type + from + sys.sysauth$ sau, + sys.user$ r_usr, + sys.user$ usr + where + sau.privilege# = r_usr.user# + and sau.grantee# = usr.user# + connect by + prior privilege# = grantee# + start with + grantee# in + ( select + user# + from + sys.user$ + where + name = '&&grantee' + ) + union all + select + name, name, 'User' + from + sys.user$ + where + name = '&&grantee' + ) +select + tp.grantee, grt.grantee_type, tp.owner, tp.table_name, + tp.privilege, tp.grantable, tp.hierarchy +from + grantees grt, + dba_tab_privs tp +where + grt.name = tp.grantee +order by + tp.grantee, + tp.owner, + tp.table_name, + tp.privilege +; + +clear breaks + +prompt +prompt Directly Granted Roles +prompt ----------------------- + +select + granted_role, admin_option, default_role +from + dba_role_privs +where + grantee = '&&grantee' +order by + granted_role +; + +prompt +prompt All Granted Roles +prompt ----------------- + +column role format a200 heading "Role" + +select + lpad(' ', 2*level-1) || sys_connect_by_path(usr.name, '/') role +from + sys.sysauth$ sau, + sys.user$ usr +where + sau.privilege# = usr.user# +connect by + prior privilege# = grantee# +start with + grantee# = + ( select + user# + from + sys.user$ + where + name = '&&grantee' + ) +; + + +prompt +prompt TS Quotas +prompt ----------------- + +select + tablespace_name, max_bytes, dropped +from + dba_ts_quotas +where + username = '&&grantee' +order by + tablespace_name +; + + +prompt +prompt Objects +prompt ------- + +break on tablespace_name skip 1 + +select + seg.tablespace_name, obj.object_type, count(*) counted +from + dba_objects obj, + dba_segments seg +where + obj.owner = seg.owner(+) + and obj.object_name = seg.segment_name(+) + and obj.owner = '&&grantee' +group by + seg.tablespace_name, obj.object_type +order by + seg.tablespace_name nulls last, obj.object_type +; + +clear breaks; + +undef grantee diff --git a/vdh/show_restore_points.sql b/vdh/show_restore_points.sql new file mode 100644 index 0000000..0989278 --- /dev/null +++ b/vdh/show_restore_points.sql @@ -0,0 +1,10 @@ +column sz_mb format 9G999G999D99 +column name format a30 + +set linesize 140 +set pages 9999 + +select to_char(time, 'DD/MM/YYYY HH24:MI:SS') time, scn,name, database_incarnation# db_inc#, + guarantee_flashback_database gfd, storage_size/1024/1024 sz_mb +from v$restore_point rstp +order by scn desc; diff --git a/vdh/show_space.sql b/vdh/show_space.sql new file mode 100644 index 0000000..7922153 --- /dev/null +++ b/vdh/show_space.sql @@ -0,0 +1,54 @@ +create table object_storage_space( obj_owner varchar2(30), + obj_name varchar2(30), + obj_type varchar2(20), + total_bytes number(30), + unused_bytes number(30), + used_bytes number(30)); + +Create or Replace Procedure Object_Space_Check(obj_owner in +varchar2,obj_type in varchar2) +is + + total_blocks number; + total_bytes number; + unused_blocks number; + unused_bytes number; + last_used_extent_File_id number; + last_used_extentblock_id number; + last_used_block number; + Trun_Cur Number; + Out_value Number; + Cursor Space_Chk_Cur is select object_name from dba_objects +where object_type = obj_type and + owner = obj_owner; + +Begin + +Trun_Cur := DBMS_SQL.OPEN_CURSOR; +DBMS_SQL.PARSE(Trun_Cur,'Truncate Table +Object_Storage_Space',DBMS_SQL.V7); +Out_Value := DBMS_SQL.Execute(Trun_Cur); +DBMS_SQL.CLOSE_CURSOR(Trun_Cur); + +For Space_Chk_Rec in Space_Chk_Cur Loop + +sys.dbms_space.unused_space(obj_owner,Space_Chk_Rec.object_name, + obj_type,total_blocks, + total_bytes, + unused_blocks, + unused_bytes, + last_used_extent_File_id, + last_used_extentblock_id, + last_used_block, + NULL); + +Insert into object_storage_space +values (obj_owner, + Space_Chk_Rec.object_name, + obj_type, + total_bytes, + unused_bytes, + total_bytes-unused_bytes); + commit; + End Loop; +End; diff --git a/vdh/show_space2.sql b/vdh/show_space2.sql new file mode 100644 index 0000000..dc06015 --- /dev/null +++ b/vdh/show_space2.sql @@ -0,0 +1,123 @@ +create or replace type show_space_type +as object +( owner varchar2(30), + segment_name varchar2(30), + partition_name varchar2(30), + segment_type varchar2(30), + free_blocks number, + total_blocks number, + unused_blocks number, + last_used_ext_fileid number, + last_used_ext_blockid number, + last_used_block number +) +/ +create or replace type show_space_table_type +as table of show_space_type +/ + + +And then the function: + +create or replace +function show_space_for +( p_segname in varchar2, + p_owner in varchar2 default user, + p_type in varchar2 default 'TABLE', + p_partition in varchar2 default NULL ) +return show_space_table_type +authid CURRENT_USER +as + pragma autonomous_transaction; + type rc is ref cursor; + l_cursor rc; + + l_free_blks number; + l_total_blocks number; + l_total_bytes number; + l_unused_blocks number; + l_unused_bytes number; + l_LastUsedExtFileId number; + l_LastUsedExtBlockId number; + l_last_used_block number; + l_sql long; + l_conj varchar2(7) default ' where '; + l_data show_space_table_type := +show_space_table_type(); + l_owner varchar2(30); + l_segment_name varchar2(30); + l_segment_type varchar2(30); + l_partition_name varchar2(30); + + procedure add_predicate( p_name in varchar2, p_value in varchar2 ) + as + begin + if ( instr( p_value, '%' ) > 0 ) + then + l_sql := l_sql || l_conj || p_name || + ' like ''' || upper(p_value) || ''''; + l_conj := ' and '; + elsif ( p_value is not null ) + then + l_sql := l_sql || l_conj || p_name || + ' = ''' || upper(p_value) || ''''; + l_conj := ' and '; + end if; + end; +begin + l_sql := 'select owner, segment_name, segment_type, partition_name + from dba_segments '; + + add_predicate( 'segment_name', p_segname ); + add_predicate( 'owner', p_owner ); + add_predicate( 'segment_type', p_type ); + add_predicate( 'partition', p_partition ); + + execute immediate 'alter session set cursor_sharing=force'; + open l_cursor for l_sql; + execute immediate 'alter session set cursor_sharing=exact'; + + loop + fetch l_cursor into l_owner, l_segment_name, l_segment_type, +l_partition_name; + exit when l_cursor%notfound; + begin + dbms_space.free_blocks + ( segment_owner => l_owner, + segment_name => l_segment_name, + segment_type => l_segment_type, + partition_name => l_partition_name, + freelist_group_id => 0, + free_blks => l_free_blks ); + + dbms_space.unused_space + ( segment_owner => l_owner, + segment_name => l_segment_name, + segment_type => l_segment_type, + partition_name => l_partition_name, + total_blocks => l_total_blocks, + total_bytes => l_total_bytes, + unused_blocks => l_unused_blocks, + unused_bytes => l_unused_bytes, + LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId, + LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId, + LAST_USED_BLOCK => l_LAST_USED_BLOCK ); + + l_data.extend; + l_data(l_data.count) := + show_space_type( l_owner, l_segment_name, l_partition_name, + l_segment_type, l_free_blks, l_total_blocks, l_unused_blocks, + l_lastUsedExtFileId, l_LastUsedExtBlockId, l_last_used_block +); + exception + when others then null; + end; + end loop; + close l_cursor; + + return l_data; +end; +/ + + + \ No newline at end of file diff --git a/vdh/show_tab_stats.sql b/vdh/show_tab_stats.sql new file mode 100644 index 0000000..014c8e4 --- /dev/null +++ b/vdh/show_tab_stats.sql @@ -0,0 +1,48 @@ +set verify off + +set linesize 200 +set pages 9999 + + +column data_type format a12 +column num_rows format 999G999G999 +column num_nulls format 999G999G999 +column sample_size format 999G999G999 +column num_distinct format 999G999G999 +column num_buckets format 999 heading BUC# +column density format 0D999999999 + +select + tab.last_analyzed, tab.num_rows, tab.sample_size, tab.stale_stats +from + dba_tab_statistics tab +where + tab.owner = '&&TABLE_OWNER' + and tab.table_name = '&&TABLE_NAME' +; + +column data_type format a12 +column num_rows format 999G999G999 +column num_nulls format 999G999G999 +column sample_size format 999G999G999 +column num_distinct format 999G999G999 +column num_buckets format 999 heading BUC# +column density format 0D999999999 + +select + col.column_name, col.last_analyzed, col.data_type, tab.num_rows, col.num_nulls, + col.sample_size, col.num_distinct, col.histogram, num_buckets, col.density +from + dba_tables tab, + dba_tab_columns col +where + tab.owner = col.owner + and tab.table_name = col.table_name + and tab.owner = '&&TABLE_OWNER' + and tab.table_name = '&&TABLE_NAME' +order by + col.column_id +; + +undefine TABLE_OWNER +undefine TABLE_NAME diff --git a/vdh/showsql.sql b/vdh/showsql.sql new file mode 100644 index 0000000..c578f05 --- /dev/null +++ b/vdh/showsql.sql @@ -0,0 +1,69 @@ +------ begin of showsql.sql -------------------------- + +column status format a10 +set feedback off +set serveroutput on + +select username, sid, serial#, process, status +from v$session +where username is not null +/ + +column username format a20 +column sql_text format a55 word_wrapped + +set serveroutput on size 1000000 +declare + x number; +begin + for x in + ( select username||'('||sid||','||serial#|| + ') ospid = ' || process || + ' program = ' || program username, + to_char(LOGON_TIME,' Day HH24:MI') logon_time, + to_char(sysdate,' Day HH24:MI') current_time, + sql_address, LAST_CALL_ET + from v$session + where status = 'ACTIVE' + and rawtohex(sql_address) <> '00' + and username is not null order by last_call_et ) + loop + for y in ( select max(decode(piece,0,sql_text,null)) || + max(decode(piece,1,sql_text,null)) || + max(decode(piece,2,sql_text,null)) || + max(decode(piece,3,sql_text,null)) + sql_text + from v$sqltext_with_newlines + where address = x.sql_address + and piece < 4) + loop + if ( y.sql_text not like '%listener.get_cmd%' and + y.sql_text not like '%RAWTOHEX(SQL_ADDRESS)%') + then + dbms_output.put_line( '--------------------' ); + dbms_output.put_line( x.username ); + dbms_output.put_line( x.logon_time || ' ' || + x.current_time|| + ' last et = ' || + x.LAST_CALL_ET); + dbms_output.put_line( + substr( y.sql_text, 1, 250 ) ); + end if; + end loop; + end loop; +end; +/ + +column username format a15 word_wrapped +column module format a15 word_wrapped +column action format a15 word_wrapped +column client_info format a30 word_wrapped + +select username||'('||sid||','||serial#||')' username, + module, + action, + client_info +from v$session +where module||action||client_info is not null; + +------------------------ eof -------------------------- \ No newline at end of file diff --git a/vdh/si.sql b/vdh/si.sql new file mode 100644 index 0000000..a0d688b --- /dev/null +++ b/vdh/si.sql @@ -0,0 +1,8 @@ +col name for a70 +col value for 99999999999999 +select name, value +from v$mystat s, v$statname n +where n.statistic# = s.statistic# +and name like '%storage%'; +col name clear +col value clear diff --git a/vdh/smu_list_clones.sh b/vdh/smu_list_clones.sh new file mode 100644 index 0000000..d511d7a --- /dev/null +++ b/vdh/smu_list_clones.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss -T oracle@sdtcsynoda02-rac -p 8002 <<< "backups list" | rev | grep -v -e '^ -' | rev + diff --git a/vdh/snapper.sql b/vdh/snapper.sql new file mode 100644 index 0000000..dc26115 --- /dev/null +++ b/vdh/snapper.sql @@ -0,0 +1,2306 @@ +------------------------------------------------------------------------------ +-- +-- +-- +-- File name: snapper.sql (Oracle Session Snapper v4) +-- Purpose: An easy to use Oracle session-level performance measurement tool +-- which does NOT require any database changes nor creation of any +-- database objects! +-- +-- This is very useful for ad-hoc performance diagnosis in environments +-- with restrictive change management processes, where creating +-- even temporary tables and PL/SQL packages is not allowed or would +-- take too much time to get approved. +-- +-- All processing is done by a few sqlplus commands and an anonymous +-- PL/SQL block, all that's needed is SQLPLUS access (and if you want +-- to output data to server-side tracefile then execute rights on +-- DBMS_SYSTEM). Snapper only queries some V$ views (and in advanced +-- mode some X$ fixed tables, but it does not enable any traces nor +-- use oradebug. +-- +-- The output is formatted the way it could be easily post-processed +-- by either Unix string manipulation tools or loaded to spreadsheet. +-- +-- Snapper v4.20 Oracle 12c CDB and PDB grouping +-- Snapper v4 supports RAC and requires Oracle 10.1 or a newer DB version. +-- Snapper v3.5 works on Oracle versions starting from Oracle 9.2 (no RAC support) +-- +-- Note1: The "ASH" functionality in Snapper just samples GV$SESSION view, +-- so you do NOT need Diagnostics Pack licenses to use Snapper's +-- "ASH" output +-- +-- Note2: Snapper just reports you performance metric deltas in a snapsphot +-- and does not attempt to solve any performance problems for you. +-- You still need to interpret and understand these standard Oracle +-- metrics yourself +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- Copyright: (c) Tanel Poder - http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", so no warranties or guarantees are +-- made about its correctness, reliability and safety. Use it at your +-- own risk! +-- +-- Copyright: Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +-- +-- Thanks to: Adrian Billington, Jamey Johnston, Marcus Mönnig, Hans-Peter Sloot, +-- Ronald Rood and Peter Bach for bugfixes, additions and improvements +-- +-------------------------------------------------------------------------------- +-- +-- The Session Snapper v4.30 ( USE AT YOUR OWN RISK !!! ) +-- (c) Tanel Poder ( http://blog.tanelpoder.com ) +-- +-- +-- +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a cheap ASCII +-- / imitation of a fish and a fishing rod. +-- | Nevertheless the PL/SQL code below the +-- | fish itself should be helpful for quick +-- | catching of relevant Oracle performance +-- | information. +-- | So I wish you happy... um... snapping? +-- | ) +-- | ...... +-- | iittii,,.... +-- ¿ iiffffjjjjtttt,, +-- ..;;ttffLLLLffLLLLLLffjjtt;;.. +-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,, +-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;.... +-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;.. +-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,, +-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;.. +-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii.. +-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;.. +-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,, +-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii.. +-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;.. +-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;; +-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;.. +-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. .... +-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii.. +-- ..;;ttttii;;.... ..;;;;.... +-- ..iiii;;.. +-- ..;;,, +-- .... +-- +-- +-- Usage: +-- +-- snapper.sql [,out][,trace][,pagesize=X][,gather=[s][t][w][l][e][b][a]]> +-- +-- ash - sample session activity ASH style, waits and SQL_IDs from gv$session and +-- print a TOP SQL/wait report from these samples (this is the default from +-- Snapper 3.0). The columns chosen for TOP calculation are defined in CONFIG +-- section below. +-- +-- ash=sql_id+event+wait_class +-- - the above example illustrates that you can also specify the gv$session +-- columns for TOP report yourself. The above example will show a TOP +-- activity report grouped by SQL_ID + EVENT + WAIT_CLASS +-- Note that the columns are separated by a "+" sign (as comma is a snapper +-- parameter separator, not ASH column separator) +-- +-- ash1 +-- ash2 +-- ash3 - in addition to "ash" report you can have 3 more reported during the same +-- snapper sampling snapshot. Just include ash1=col1+col2,ash2=col3+col4,... +-- parameters if you want multiple TOP reports per Snapper snapshot +-- +-- stats - sample gv$sesstat,gv$sess_time_model,gv$session_event performance counters +-- and report how much these stats increased (deltas) during Snapper run +-- all - report both ASH and stats sections +-- +-- out - use dbms_output.put_line() for output. output will be seen only when +-- Snapper run completes due to dbms_output limitations. This is the default. +-- trace - write output to server process tracefile +-- (you must have execute permission on sys.dbms_system.ksdwrt() for that, +-- you can use both out and trace parameters together if you like ) +-- +-- pagesize - display header lines after X snapshots. if pagesize=0 don't display +-- any headers. pagesize=-1 will display a terse header only once +-- +-- gather - if omitted, gathers s,t,w statistics (see below) +-- - if specified, then gather following: +-- +-- Session-level stats: +-- s - Session Statistics from gv$sesstat +-- t - Session Time model info from gv$sess_time_model +-- w - Session Wait statistics from gv$session_event and gv$session_wait +-- +-- Instance-level stats: +-- l - instance Latch get statistics ( gets + immediate_gets ) +-- e - instance Enqueue lock get statistics +-- b - buffer get Where statistics -- useful in versions up to 10.2.x +-- a - All above +-- +-- sinclude - if specified, then show only GV$SESSTAT stats which match the +-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+) +-- linclude - if specified, then show only GV$LATCH latch stats which match the +-- LIKE pattern of linclude (REGEXP_LIKE in 10g+) +-- tinclude - if specified, then show only GV$SESS_TIME_MODEL stats which match the +-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+) +-- winclude - if specified, then show only GV$SESSION_EVENT wait stats which match the +-- LIKE pattern of winclude (REGEXP_LIKE in 10g+) +-- +-- you can combine above parameters in any order, separate them by commas +-- !!!don't use spaces as otherwise they are treated as next parameters by sqlplus !!! +-- !!!if you want to use spaces, enclose the whole sqlplus parameter in doublequotes !!! +-- +-- - the number of seconds between taking snapshots +-- - the number of snapshots to take ( maximum value is power(2,31)-1 ) +-- +-- can be either one sessionid, multiple sessionids separated by +-- commas or a SQL statement which returns a list of SIDs (if you need spaces +-- in that parameter text, enclose it in double quotes). +-- +-- if you want to snap ALL sids, use "all" as value for +-- parameter +-- +-- alternatively you can use "select inst_id,sid from gv$session" as value for +-- parameter to capture all SIDs. you can write any query (with multiple and/or) +-- conditions to specify complex rules for capturing only the SIDs you want +-- +-- starting from version 3.0 there are further session_id selection options available in +-- instead of sid you can write such expressions for snapper's parameter: +-- +-- sid=123 -- take sid 123 only (the same as just writing 123) +-- user=tanel -- take all sessions where username is 'tanel' (case insensitive) +-- -- this is the same as writing following subquery for the +-- -- parameter: +-- select inst_id,sid from gv$session where lower(username) like lower('tanel') +-- +-- user=tanel% -- take all sessions where username begins with 'tanel%' (case insensitive) +-- -- the = means actually LIKE in SQL terms in this script +-- +-- spid=1234 -- all these 3 parameters do the same thing: +-- ospid=1234 -- they look up the sessions(s) where the processes OS PID=1234 +-- pid=1234 -- this is useful for quickly looking up what some OS process is doing +-- -- if it consumes too much of some resource +-- qc=123 +-- qcsid=123 -- show query coordinator and all PX slave sessions +-- +-- program=sqlplus% -- the following examples filter by corresponding gv$session coulmns +-- machine=linux01 -- machine +-- osuser=oracle -- os username +-- module=HR -- module +-- "action=Find Order" -- note the quotes because there is a space inside the parameter +-- -- value +-- client_id=tanelpoder -- show only sessions where client_identifier is set to tanelpoder +-- -- this is very useful in cases with (properly instrumented) +-- -- connection pools +-- +-- +-- Note that if you want to change some "advanced" snapper configuration parameters +-- or default values then search for CONFIG in this file to see configurable +-- variable section +-- +-- +-- Examples: +-- NB! Read the online examples, these are more detailed and list script output too! +-- +-- http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper +-- +-- @snapper ash,stats 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- Wait, gv$sesstat and gv$sess_time_model statistics are reported by default +-- Starting from V3 the ASH style session activity report is shown as well) +-- +-- @snapper stats,gather=w 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only Wait event statistics are reported, no ASH) +-- +-- @snapper ash,gather=st 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only gv$sesstat and gv$sess_Time_model statistics are gathered + ASH) +-- +-- @snapper trace,ash,gather=stw,pagesize=0 10 90 117,210,313 +-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313 +-- all statistics are reported, do not print any headers) +-- +-- @snapper trace,ash 900 999999999 all +-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace, +-- loop (almost) forever ) +-- +-- @snapper out,trace 300 12 "select inst_id,sid from gv$session where username='APPS'" +-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write +-- output to both dbms_output and tracefile) +-- +-- Notes: +-- +-- Snapper does not currently detect if a session with given SID has +-- ended and been recreated between snapshots, thus it may report bogus +-- statistics for such sessions. The check and warning for that will be +-- implemented in a future version. +-- +-------------------------------------------------------------------------------- + +set termout off tab off verify off linesize 999 trimspool on trimout on null "" + +--debug: +-- set termout on serveroutput on + +-- Get parameters (future snapper v4.x extended syntax: @snapper <"begin"|"end"|sleep#> <"snap_name"|snap_count> ) +define snapper_options="&1" +define snapper_sleep="&2" +define snapper_count="&3" +define snapper_sid="&4" + + +-- The following code is required for making this script "dynamic" as due to +-- different Oracle versions, script parameters or granted privileges some +-- statements might not compile if not adjusted properly. + +define _IF_ORA12_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA12="--" +define _IF_ORA11_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA11="--" +define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" +-- /*dummy*/ -- this "dummy" is here just for avoiding VIM syntax highlighter going crazy due to previous line +define _IF_X_ACCESSIBLE="--" + +-- plsql_object_id columns available in v$session (from 10.2.0.3) +define _YES_PLSQL_OBJ_ID="--" +define _NO_PLSQL_OBJ_ID="" +-- blocking_instance available in v$session (from 10.2) +define _YES_BLK_INST="--" +define _NO_BLK_INST="" + +-- snapper v4 manual before/after snapshotting +define _MANUAL_SNAPSHOT="--" +define _USE_DBMS_LOCK="" + +-- set the noprint's value to "noprint" if you don't want these temporary variables to show up in a sqlplus spool file +-- however, setting noprint="noprint" can cause errors in Oracle SQL Developer v4.0.x for some reason (OK in v4.1) +DEF noprint="" +col snapper_ora12higher &noprint new_value _IF_ORA12_OR_HIGHER +col snapper_ora12lower &noprint new_value _IF_LOWER_THAN_ORA12 +col snapper_ora12 &noprint new_value _IF_ORA12_OR_HIGHER +col snapper_ora11higher &noprint new_value _IF_ORA11_OR_HIGHER +col snapper_ora11lower &noprint new_value _IF_LOWER_THAN_ORA11 +col dbms_system_accessible &noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLE +col x_accessible &noprint new_value _IF_X_ACCESSIBLE +col no_plsql_obj_id &noprint new_value _NO_PLSQL_OBJ_ID +col yes_plsql_obj_id &noprint new_value _YES_PLSQL_OBJ_ID +col no_blk_inst &noprint new_value _NO_BLK_INST +col yes_blk_inst &noprint new_value _YES_BLK_INST +col manual_snapshot &noprint new_value _MANUAL_SNAPSHOT +col use_dbms_lock &noprint new_value _USE_DBMS_LOCK + +col snapper_sid &noprint new_value snapper_sid + +-- sid_filter and inst_filter are the new RAC gv$ friendly way to filter sessions in Snapper v4 +def sid_filter="/**/" +def inst_filter="/**/" +col sid_filter &noprint new_value sid_filter +col inst_filter &noprint new_value inst_filter + + +-- initialize, precompute and determine stuff +var v varchar2(100) +var x varchar2(10) +var sid_filter varchar2(4000) +var inst_filter varchar2(4000) + +-- this is here for a reason +-- im extracting the first word of the snapper_sid (if its a complex expression, not just a single SID) +-- by relying on how DEF and & assignment treat spaces in strings +def ssid_begin=&snapper_sid + +declare + + o sys.dbms_describe.number_table; + p sys.dbms_describe.number_table; + l sys.dbms_describe.number_table; + a sys.dbms_describe.varchar2_table; + dty sys.dbms_describe.number_table; + def sys.dbms_describe.number_table; + inout sys.dbms_describe.number_table; + len sys.dbms_describe.number_table; + prec sys.dbms_describe.number_table; + scal sys.dbms_describe.number_table; + rad sys.dbms_describe.number_table; + spa sys.dbms_describe.number_table; + + tmp number; + lv_sid_filter varchar2(4000); + lv_inst_filter varchar2(4000); + + function get_filter(str in varchar2) return varchar2 + is + ret varchar2(1000); + begin + if str like '%@%' then + --dbms_output.put_line('get_filter:1 str= '||str); + ret := lower(trim(regexp_replace(substr(str,instr(str,'=')+1), '^(.+)@([[:digit:]\*]+)(.*)', '\1'))); + else + --dbms_output.put_line('get_filter:2 str= '||str); + ret := lower(trim(substr(str,instr(str,'=')+1))); + end if; + --dbms_output.put_line('get_filter = ' || ret); + return ret; + end get_filter; + +begin + -- compute inst_filter + case + when regexp_instr('&ssid_begin','@') = 0 then + lv_inst_filter := '/* inst_filter */ s.inst_id=USERENV(''Instance'')'; + when regexp_instr('&ssid_begin','@\*') > 0 or '&ssid_begin' like '(%' then + lv_inst_filter := '/* inst_filter */ 1=1'; + when regexp_instr('&ssid_begin','@\d+') > 0 then + lv_inst_filter := 's.inst_id = ' || regexp_replace('&ssid_begin', '^(.+)@(\d+)(.*)', '\2'); + else + lv_inst_filter := 's.inst_id=USERENV(''Instance'')'; + --when regexp_instr('&ssid_begin','@\d+') > 0 then regexp_replace(snapper_sid, '^(.+)@\d+', '\1') || ' AND inst_id = ' || regexp_replace(snapper_sid, '^(.+)@(\d+)(.*)', '\2') + end case; + + -- compute sid_filter + case + when trim(lower('&ssid_begin')) like 'con_id=%' then lv_sid_filter := 's.con_id in ('||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'sid=%' then lv_sid_filter := 's.sid in (' ||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'audsid=%' then lv_sid_filter := 's.audsid in ('||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'user=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'username=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'machine=%' then lv_sid_filter := 'lower(machine) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'program=%' then lv_sid_filter := 'lower(program) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'service=%' then lv_sid_filter := 'lower(service_name) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'module=%' then lv_sid_filter := 'lower(module) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'action=%' then lv_sid_filter := 'lower(action) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'osuser=%' then lv_sid_filter := 'lower(osuser) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'client_id=%' then lv_sid_filter := 'lower(client_identifier) like '''||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'spid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'ospid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'pid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qcsid=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qc=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'all%' then lv_sid_filter := '1=1'; + when trim(lower('&ssid_begin')) like 'bg%' then lv_sid_filter := 'type=''BACKGROUND'''; + when trim(lower('&ssid_begin')) like 'fg%' then lv_sid_filter := 'type=''USER'''; + when trim(lower('&ssid_begin')) like 'smon%' then lv_sid_filter := 'program like ''%(SMON)%'''; + when trim(lower('&ssid_begin')) like 'pmon%' then lv_sid_filter := 'program like ''%(PMON)%'''; + when trim(lower('&ssid_begin')) like 'ckpt%' then lv_sid_filter := 'program like ''%(CKPT)%'''; + when trim(lower('&ssid_begin')) like 'lgwr%' then lv_sid_filter := 'program like ''%(LG__)%'''; -- 12c multiple adaptive LGWR workers + when trim(lower('&ssid_begin')) like 'dbwr%' then lv_sid_filter := 'regexp_like(program, ''.*\((DBW.|BW..)\).*'', ''i'')'; + when trim(lower('&ssid_begin')) like 'select%' then lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; + when trim(lower('&ssid_begin')) like '(%' then lv_inst_filter := '/* inst_filter2 */ 1=1'; lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; + else lv_sid_filter := '/* sid_filter_else_cond */ s.sid in ('||get_filter('&ssid_begin')||')'; + end case; + + :inst_filter := lv_inst_filter; + :sid_filter := lv_inst_filter||' and '||lv_sid_filter; + + -- this block determines whether dbms_system.ksdwrt is accessible to us + -- dbms_describe is required as all_procedures/all_objects may show this object + -- even if its not executable by us (thanks to o7_dictionary_accessibility=false) + begin + execute immediate 'select count(*) from x$kcbwh where rownum = 1' into tmp; + :x:= ' '; -- x$ tables are accessible, so dont comment any lines out + exception + when others then null; + end; + + sys.dbms_describe.describe_procedure( + 'DBMS_SYSTEM.KSDWRT', null, null, + o, p, l, a, dty, def, inout, len, prec, scal, rad, spa + ); + + -- we never get to following statement if dbms_system is not accessible + -- as sys.dbms_describe will raise an exception + :v:= '-- dbms_system is accessible'; + +exception + when others then null; +end; +/ + +-- this query populates some sqlplus variables required for dynamic compilation used below +with mod_banner as ( + select + replace(banner,' 9.','09.') banner + from + v$version + where rownum = 1 +) +select + case when substr(banner, instr(banner, 'Release ')+8,2) >= '12' then '' else '--' end snapper_ora12higher, + case when substr(banner, instr(banner, 'Release ')+8,2) < '12' then '' else '--' end snapper_ora12lower, + case when substr(banner, instr(banner, 'Release ')+8,2) = '11' then '' else '--' end snapper_ora11higher, + case when substr(banner, instr(banner, 'Release ')+8,2) < '11' then '' else '--' end snapper_ora11lower, + nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible, + nvl(:x, '--') x_accessible, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '' else '--' end yes_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '--' else '' end no_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '' else '--' end yes_plsql_obj_id, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '--' else '' end no_plsql_obj_id, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '' else '--' end manual_snapshot, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '--' else '' end use_dbms_lock, + :sid_filter sid_filter, + :inst_filter inst_filter +from + mod_banner +/ + +-- current workaround: 1st serveroutput command below is for sql developer compatibility +-- 2nd is for sqlplus, so that newlines and leading spaces get properly printed +set termout off +set serveroutput on size 1000000 +set serveroutput on size 1000000 format wrapped +set termout on + +prompt Sampling SID &4 with interval &snapper_sleep seconds, taking &snapper_count snapshots... + +-- let the Snapping start!!! +-- main() +declare + -- Snapper start + -- forward declarations + procedure output(p_txt in varchar2); + procedure fout; + + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, + p_grouplen in number default 3 + ) + return varchar2; + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) + return varchar2; + + + -- type, constant, variable declarations + + -- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_INTEGER + pls_adjust constant number(10,0) := power(2,31) - 1; + + type srec is record (ts timestamp, stype varchar2(4), inst_id number, sid number, statistic# number, value number, event_count number ); + type stab is table of srec index by pls_integer; + type ltab is table of srec index by varchar2(100); -- lookup tab for various average calculation + s1 stab; + s2 stab; + l1 ltab; + l2 ltab; + + type snrec is record (stype varchar2(4), statistic# number, name varchar2(100)); + type sntab is table of snrec index by pls_integer; + sn_tmp sntab; + sn sntab; + + type sntab_reverse is table of snrec index by varchar2(100); -- used for looking up stat id from stat name + sn_reverse sntab_reverse; + + tmp_varchar2 varchar2(1000); -- misc + + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2; + + type tmp_sestab is table of gv$session%rowtype index by pls_integer; + type sestab is table of gv$session%rowtype index by varchar2(20); + + g_sessions sestab; + g_empty_sessions sestab; + + type hc_tab is table of number index by pls_integer; -- index is sql hash value + type ses_hash_tab is table of hc_tab index by pls_integer; -- index is SID + + g_ses_hash_tab ses_hash_tab; + g_empty_ses_hash_tab ses_hash_tab; + + -- dbms_debug_vc2coll is a built-in collection present in every oracle db + g_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_empty_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_snap1 sys.dbms_debug_vc2coll; + g_snap2 sys.dbms_debug_vc2coll; + + g_ash_samples_taken number := 0; + + g_count_statname number; + g_count_eventname number; + + g_mysid number; + + top_n number; + + i number; + a number; + b number; + + c number; + delta number; + evcnt number; + changed_values number; + pagesize number:=99999999999999; + missing_values_s1 number := 0; + missing_values_s2 number := 0; + disappeared_sid number := 0; + lv_curr_sid number := 0; -- used for determining whether to print an empty line between session stats + d1 timestamp(6); + d2 timestamp(6); + ash_date1 date; + ash_date2 date; + lv_gather varchar2(1000); + gv_header_string varchar2(1000); + lv_data_string varchar2(1000); + + lv_ash varchar2(1000); + lv_stats varchar2(1000); + + gather_stats number := 0; + gather_ash number := 0; + + g_snap_begin varchar2(1000); + g_snap_end varchar2(1000); + + -- CONFIGURABLE STUFF -- + + -- this sets what are the default ash sample TOP reporting group by columns + g_ash_columns varchar2(1000) := 'inst_id + sql_id + sql_child_number + event + wait_class'; + g_ash_columns1 varchar2(1000) := 'inst_id + event + p1 + wait_class'; + g_ash_columns2 varchar2(1000) := 'inst_id + sid + user + machine + program'; + g_ash_columns3 varchar2(1000) := 'inst_id + plsql_object_id + plsql_subprogram_id + sql_id'; + g_ash_columns4 varchar2(1000) := 'con_id + inst_id + sql_id + sql_child_number + event + wait_class'; + g_ash_columns5 varchar2(1000) := 'con_id + inst_id + event + p1 + wait_class'; + g_ash_columns6 varchar2(1000) := 'con_id + inst_id + sid + user + machine + program'; + + -- output column configuration + output_header number := 0; -- 1=true 0=false + output_username number := 1; -- v$session.username + output_inst number := 0; -- inst + output_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 0 ELSE 1 END; -- just sid + output_inst_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 1 ELSE 0 END; -- inst_id and sid together + output_time number := 0; -- time of snapshot start + output_seconds number := 0; -- seconds in snapshot (shown in footer of each snapshot too) + output_stype number := 1; -- statistic type (WAIT,STAT,TIME,ENQG,LATG,...) + output_sname number := 1; -- statistic name + output_delta number := 1; -- raw delta + output_delta_s number := 0; -- raw delta normalized to per second + output_hdelta number := 0; -- human readable delta + output_hdelta_s number := 1; -- human readable delta normalized to per second + output_percent number := 1; -- percent of total time/samples + output_eventcnt number := 1; -- wait event count + output_eventcnt_s number := 1; -- wait event count + output_eventavg number := 1; -- average wait duration + output_pcthist number := 1; -- percent of total visual bar (histogram) -- Histograms seem to work for me on 9.2.0.7 + - JBJ2) + + output_actses number := 1; -- show Average Active Sessions (AAS) in "ASH" activity section + output_actses_pct number := 1; -- show AAS as a percentage of a single thread time + + -- column widths in ASH report output + w_inst_id number := 4; + w_sid number := 6; + w_username number := 20; + w_machine number := 20; + w_terminal number := 20; + w_program number := 25; + w_event number := 35; + w_wait_class number := 15; + w_state number := 8; + w_p1 number := 20; + w_p2 number := 20; + w_p3 number := 20; + w_row_wait_obj# number := 10; + w_row_wait_file# number := 6; + w_row_wait_block# number := 10; + w_row_wait_row# number := 6; + w_blocking_session_status number := 15; + w_blocking_instance number := 12; + w_blocking_session number := 12; + w_sql_hash_value number := 12; + w_sql_id number := 15; + w_sql_child_number number := 9; + w_plsql_entry_object_id number := 10; + w_plsql_entry_subprogram_id number := 10; + w_plsql_object_id number := 10; + w_plsql_subprogram_id number := 10; + w_module number := 25; + w_action number := 25; + w_client_identifier number := 25; + w_service_name number := 25; + w_con_id number := 6; + + w_actses number := 8; + w_actses_pct number := 10; + + -- END CONFIGURABLE STUFF -- + + -- constants for ash collection extraction from the vc2 collection + s_inst_id constant number := 1 ; + s_sid constant number := 2 ; + s_username constant number := 3 ; + s_machine constant number := 4 ; + s_terminal constant number := 5 ; + s_program constant number := 6 ; + s_event constant number := 7 ; + s_wait_class constant number := 8 ; + s_state constant number := 9 ; + s_p1 constant number := 10 ; + s_p2 constant number := 11 ; + s_p3 constant number := 12 ; + s_row_wait_obj# constant number := 13 ; + s_row_wait_file# constant number := 14 ; + s_row_wait_block# constant number := 15 ; + s_row_wait_row# constant number := 16 ; + s_blocking_session_status constant number := 17 ; + s_blocking_instance constant number := 18 ; + s_blocking_session constant number := 19 ; + s_sql_hash_value constant number := 20 ; + s_sql_id constant number := 21 ; + s_sql_child_number constant number := 22 ; + s_plsql_entry_object_id constant number := 23 ; + s_plsql_entry_subprogram_id constant number := 24 ; + s_plsql_object_id constant number := 25 ; + s_plsql_subprogram_id constant number := 26 ; + s_module constant number := 27 ; + s_action constant number := 28 ; + s_client_identifier constant number := 29 ; + s_service_name constant number := 30 ; + s_con_id constant number := 31 ; + + -- constants for ash collection reporting, which columns to show in report + c_inst_id constant number := power(2, s_inst_id ); + c_sid constant number := power(2, s_sid ); + c_username constant number := power(2, s_username ); + c_machine constant number := power(2, s_machine ); + c_terminal constant number := power(2, s_terminal ); + c_program constant number := power(2, s_program ); + c_event constant number := power(2, s_event ); + c_wait_class constant number := power(2, s_wait_class ); + c_state constant number := power(2, s_state ); + c_p1 constant number := power(2, s_p1 ); + c_p2 constant number := power(2, s_p2 ); + c_p3 constant number := power(2, s_p3 ); + c_row_wait_obj# constant number := power(2, s_row_wait_obj# ); + c_row_wait_file# constant number := power(2, s_row_wait_file# ); + c_row_wait_block# constant number := power(2, s_row_wait_block# ); + c_row_wait_row# constant number := power(2, s_row_wait_row# ); + c_blocking_session_status constant number := power(2, s_blocking_session_status ); + c_blocking_instance constant number := power(2, s_blocking_instance ); + c_blocking_session constant number := power(2, s_blocking_session ); + c_sql_hash_value constant number := power(2, s_sql_hash_value ); + c_sql_id constant number := power(2, s_sql_id ); + c_sql_child_number constant number := power(2, s_sql_child_number ); + c_plsql_entry_object_id constant number := power(2, s_plsql_entry_object_id ); + c_plsql_entry_subprogram_id constant number := power(2, s_plsql_entry_subprogram_id); + c_plsql_object_id constant number := power(2, s_plsql_object_id ); + c_plsql_subprogram_id constant number := power(2, s_plsql_subprogram_id ); + c_module constant number := power(2, s_module ); + c_action constant number := power(2, s_action ); + c_client_identifier constant number := power(2, s_client_identifier ); + c_service_name constant number := power(2, s_service_name ); + c_con_id constant number := power(2, s_con_id ); + + + /*--------------------------------------------------- + -- proc for outputting data to trace or dbms_output + ---------------------------------------------------*/ + procedure output(p_txt in varchar2) is + begin + + if (getopt('&snapper_options', 'out') is not null) + or + (getopt('&snapper_options', 'out') is null and getopt('&snapper_options', 'trace') is null) + then + dbms_output.put_line(p_txt); + end if; + + -- The block below is a sqlplus trick for conditionally commenting out PL/SQL code + &_IF_DBMS_SYSTEM_ACCESSIBLE + if getopt('&snapper_options', 'trace') is not null then + sys.dbms_system.ksdwrt(1, p_txt); + sys.dbms_system.ksdfls; + end if; + -- */ + end; -- output + + /*--------------------------------------------------- + -- function for converting interval datatype to microseconds + ---------------------------------------------------*/ + function get_seconds(i interval day to second) return number + as + s NUMBER; + begin + s := to_number(extract(second from i)) + + to_number(extract(minute from i)) * 60 + + to_number(extract(hour from i)) * 60 * 60 + + to_number(extract(day from i)) * 60 * 60 * 24; + --output('get_seconds '||to_char(i)||' = '||to_char(s)); + return s; + end get_seconds; + + /*--------------------------------------------------- + -- proc for outputting data, utilizing global vars + ---------------------------------------------------*/ + procedure fout is + l_output_username VARCHAR2(100); + gsid varchar2(20); + begin + --if s2(b).stype='WAIT' then output( 'DEBUG WAIT ' || sn(s2(b).statistic#).name || ' ' || delta ); end if; + --output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# ); + --output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + gsid := trim(to_char(s2(b).inst_id))||','||trim(to_char(s2(b).sid)); + + if output_username = 1 then + begin + l_output_username := nvl( g_sessions(gsid).username, substr(g_sessions(gsid).program, instr(g_sessions(gsid).program,'(')) ); + exception + when no_data_found then l_output_username := 'error'; + when others then raise; + end; + end if; + + -- DEBUG + --output('before'); + --output (CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END); + --output('after'); + + output( CASE WHEN output_header = 1 THEN 'SID= ' END + || CASE WHEN output_inst = 1 THEN to_char(s2(b).inst_id, '9999')||', ' END + || CASE WHEN output_sid = 1 THEN to_char(s2(b).sid,'999999')||', ' END + || CASE WHEN output_inst_sid = 1 THEN to_char(s2(b).sid,'99999')||' '||lpad('@'||trim(to_char(s2(b).inst_id, '99')),3)||', ' END + || CASE WHEN output_username = 1 THEN rpad(CASE s2(b).sid WHEN -1 THEN ' ' ELSE NVL(l_output_username, ' ') END, 10)||', ' END + || CASE WHEN output_time = 1 THEN to_char(d1, 'YYYYMMDD HH24:MI:SS')||', ' END + || CASE WHEN output_seconds = 1 THEN to_char(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end, '9999999')||', ' END + || CASE WHEN output_stype = 1 THEN s2(b).stype||', ' END + || CASE WHEN output_sname = 1 THEN rpad(sn(s2(b).statistic#).name, 58, ' ')||', ' END + || CASE WHEN output_delta = 1 THEN to_char(delta, '999999999999')||', ' END + || CASE WHEN output_delta_s = 1 THEN to_char(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end),'999999999')||', ' END + || CASE WHEN output_hdelta = 1 THEN lpad(tptformat(delta, s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_hdelta_s = 1 THEN lpad(tptformat(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_percent = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN to_char(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 10000, '9999.9')||'%' ELSE ' ' END END||', ' + || CASE WHEN output_pcthist = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN rpad(rpad('[', ceil(round(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 100000,1))+1, CASE WHEN s2(b).stype IN ('WAIT') THEN 'W' WHEN sn(s2(b).statistic#).name = 'DB CPU' THEN '@' ELSE '#' END),11,' ')||']' ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN to_char(evcnt, '99999999') ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt_s = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat((evcnt / case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), 'STAT' ), 10, ' ') ELSE ' ' END END||', ' + || CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END + ); + + end; + + + /*--------------------------------------------------- + -- lookup stat delta helper calculator (l2.value - l1.value) + ---------------------------------------------------*/ + function get_delta(metric_id in varchar2) return number + is + rec1 srec; + rec2 srec; + + val1 number; + val2 number; + + d number; + begin + begin + val1 := l1(metric_id).value; + exception + when no_data_found then val1 := 0; + end; + + begin + val2 := l2(metric_id).value; + exception + when no_data_found then val2 := 0; + end; + + d := val2 - NVL(val1, 0); + return d; + end get_delta; + + /*--------------------------------------------------- + -- delta helper function for convenience - it allows to specify any metric delta, if not specified then get current one + ---------------------------------------------------*/ + function gd(c in srec, metric_type in varchar2 DEFAULT NULL, metric_name in varchar2 DEFAULT NULL) return number + is + str varchar2(1000); + tmp_delta number; + begin + if metric_type || metric_name is null then + str := c.stype||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(c.statistic#,'999999999999999999999999')); + else + begin + str := trim(metric_type)||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(sn_reverse(metric_type||','||metric_name).statistic#)); + exception + when no_data_found then return 0; + end; + end if; + tmp_delta := get_delta(str); + --output('tmp_delta '||c.stype||' '||tmp_delta); + return tmp_delta; + -- return get_delta(str); + end; + + /*--------------------------------------------------- + -- function for calculating useful averages and ratios between metrics + -- it is totally OK to show ratios together with raw values they have been derived from + ---------------------------------------------------*/ + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2 + is + ret varchar2(1000); + mt varchar2(100) := c.stype; -- metric_type + mn varchar2(100) := sn(c.statistic#).name; -- metric_name + begin + case + when mt = 'STAT' then + case + when mn LIKE 'session _ga memory%' then ret := lpad( tptformat(gd(c), 'STAT'), 10) || ' actual value in end of snapshot'; + when mn LIKE '%ed%cursors current' then ret := lpad( tptformat(gd(c), 'STAT'), 10) || ' actual value in end of snapshot'; + when mn = 'file io service time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'physical read total IO requests')+gd(c, 'STAT', 'physical write total IO requests'),0), 'TIME'), 10) || ' bad guess of IO service time per IO request'; + when mn = 'file io wait time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'physical read total IO requests')+gd(c, 'STAT', 'physical write total IO requests'),0), 'TIME'), 10) || ' bad guess of IO wait time per IO request'; + when mn = 'redo synch time overhead (usec)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo synch writes' ),0), 'TIME'), 10) || ' FG wakeup overhead per log file sync'; + when mn = 'redo write time' then ret := lpad( tptformat(gd(c) * 10000 / nullif(gd(c, 'STAT', 'redo writes' ),0), 'TIME'), 10) || ' per redo write'; + when mn = 'recursive calls' then ret := lpad( tptformat(gd(c, 'STAT', 'recursive cpu usage') * 10000 / nullif(gd(c), 0), 'TIME'), 10) || ' recursive CPU per recursive call'; + when mn = 'recursive cpu usage' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total recursive CPU usage'; + when mn = 'parse time cpu' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total parse time CPU'; + when mn = 'parse time elapsed' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total parse time elapsed'; + when mn = 'CPU used when call started' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total CPU used when call started'; + when mn = 'CPU used by this session' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total CPU used by this session'; + when mn = 'DB Time' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total DB Time'; + when mn = 'physical write IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical write bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical write total IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical write total bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read total IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical write total multi block requests' then ret:= lpad( tptformat(gd(c, 'STAT', 'physical write total IO requests') - gd(c), mt), 10) || ' total single block write requests' ; + when mn = 'physical read total multi block requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total IO requests') - gd(c), mt), 10) || ' total single block read requests' ; + when mn = 'physical read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read bytes' ) / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total bytes' ) / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'bytes sent via SQL*Net to client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes received via SQL*Net from client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes sent via SQL*Net to dblink' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from dblink'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes received via SQL*Net from dblink' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from dblink'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'redo size' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'user commits' ),0), mt), 10) || ' bytes per user commit'; + when mn = 'execute count' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (total)' ),0), mt), 10) || ' executions per parse'; + when mn = 'parse count (total)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (hard)' ),0), mt), 10) || ' softparses per hardparse'; + when mn = 'session cursor cache hits' then ret := lpad( tptformat(gd(c) - (gd(c, 'STAT', 'parse count (total)' ) ), mt), 10) || ' softparses avoided thanks to cursor cache'; + when mn = 'session logical reads' then ret := lpad( tptformat(gd(c) + (gd(c, 'STAT', 'buffer is pinned count' ) ), mt), 10) || ' total buffer visits'; + when mn = 'buffer is pinned count' then ret := lpad( tptformat(gd(c) / nullif(gd(c) + gd(c, 'STAT', 'session logical reads'),0) * 100, mt), 10) || ' % buffer gets avoided thanks to buffer pin caching'; + else ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'execute count'),0), mt), 10) || ' per execution' ; + end case; -- mt=stat, mn + when mt = 'TIME' then + -- this is ugly and wrong at the moment - will refactor some day + case + when mn = 'DB time' or mn= 'background elapsed time' then ret := lpad(tptformat((get_seconds(d2 - d1)*1000000 - ( + gd(c) + /*+ gd(c, 'DB CPU', 'TIME') */ + + gd(c, 'WAIT', 'pmon timer') + + gd(c, 'WAIT', 'VKTM Logical Idle Wait') + + gd(c, 'WAIT', 'VKTM Init Wait for GSGA') + + gd(c, 'WAIT', 'IORM Scheduler Slave Idle Wait') + + gd(c, 'WAIT', 'rdbms ipc message') + + gd(c, 'WAIT', 'OFS idle') + + gd(c, 'WAIT', 'i/o slave wait') + + gd(c, 'WAIT', 'VKRM Idle') + + gd(c, 'WAIT', 'wait for unread message on broadcast channel') + + gd(c, 'WAIT', 'wait for unread message on multiple broadcast channels') + + gd(c, 'WAIT', 'class slave wait') + + gd(c, 'WAIT', 'PING') + + gd(c, 'WAIT', 'watchdog main loop') + + gd(c, 'WAIT', 'process in prespawned state') + + gd(c, 'WAIT', 'DIAG idle wait') + + gd(c, 'WAIT', 'ges remote message') + + gd(c, 'WAIT', 'gcs remote message') + + gd(c, 'WAIT', 'heartbeat monitor sleep') + + gd(c, 'WAIT', 'GCR sleep') + + gd(c, 'WAIT', 'SGA: MMAN sleep for component shrink') + + gd(c, 'WAIT', 'MRP redo arrival') + + gd(c, 'WAIT', 'LNS ASYNC archive log') + + gd(c, 'WAIT', 'LNS ASYNC dest activation') + + gd(c, 'WAIT', 'LNS ASYNC end of log') + + gd(c, 'WAIT', 'simulated log write delay') + + gd(c, 'WAIT', 'heartbeat redo informer') + + gd(c, 'WAIT', 'LGWR real time apply sync') + + gd(c, 'WAIT', 'LGWR worker group idle') + + gd(c, 'WAIT', 'parallel recovery slave idle wait') + + gd(c, 'WAIT', 'Backup Appliance waiting for work') + + gd(c, 'WAIT', 'Backup Appliance waiting restore start') + + gd(c, 'WAIT', 'Backup Appliance Surrogate wait') + + gd(c, 'WAIT', 'Backup Appliance Servlet wait') + + gd(c, 'WAIT', 'Backup Appliance Comm SGA setup wait') + + gd(c, 'WAIT', 'LogMiner builder: idle') + + gd(c, 'WAIT', 'LogMiner builder: branch') + + gd(c, 'WAIT', 'LogMiner preparer: idle') + + gd(c, 'WAIT', 'LogMiner reader: log (idle)') + + gd(c, 'WAIT', 'LogMiner reader: redo (idle)') + + gd(c, 'WAIT', 'LogMiner client: transaction') + + gd(c, 'WAIT', 'LogMiner: other') + + gd(c, 'WAIT', 'LogMiner: activate') + + gd(c, 'WAIT', 'LogMiner: reset') + + gd(c, 'WAIT', 'LogMiner: find session') + + gd(c, 'WAIT', 'LogMiner: internal') + + gd(c, 'WAIT', 'Logical Standby Apply Delay') + + gd(c, 'WAIT', 'parallel recovery coordinator waits for slave cleanup') + + gd(c, 'WAIT', 'parallel recovery coordinator idle wait') + + gd(c, 'WAIT', 'parallel recovery control message reply') + + gd(c, 'WAIT', 'parallel recovery slave next change') + + gd(c, 'WAIT', 'recovery sender idle wait') + + gd(c, 'WAIT', 'recovery receiver idle wait') + + gd(c, 'WAIT', 'recovery merger idle wait ') + + gd(c, 'WAIT', 'PX Deq: Txn Recovery Start') + + gd(c, 'WAIT', 'PX Deq: Txn Recovery Reply') + + gd(c, 'WAIT', 'fbar timer') + + gd(c, 'WAIT', 'smon timer') + + gd(c, 'WAIT', 'PX Deq: Metadata Update') + + gd(c, 'WAIT', 'Space Manager: slave idle wait') + + gd(c, 'WAIT', 'PX Deq: Index Merge Reply') + + gd(c, 'WAIT', 'PX Deq: Index Merge Execute') + + gd(c, 'WAIT', 'PX Deq: Index Merge Close') + + gd(c, 'WAIT', 'PX Deq: kdcph_mai') + + gd(c, 'WAIT', 'PX Deq: kdcphc_ack') + + gd(c, 'WAIT', 'imco timer') + + gd(c, 'WAIT', 'virtual circuit next request') + + gd(c, 'WAIT', 'shared server idle wait') + + gd(c, 'WAIT', 'dispatcher timer') + + gd(c, 'WAIT', 'cmon timer') + + gd(c, 'WAIT', 'pool server timer') + + gd(c, 'WAIT', 'lreg timer') + + gd(c, 'WAIT', 'JOX Jit Process Sleep') + + gd(c, 'WAIT', 'jobq slave wait') + + gd(c, 'WAIT', 'pipe get') + + gd(c, 'WAIT', 'PX Deque wait') + + gd(c, 'WAIT', 'PX Idle Wait') + + gd(c, 'WAIT', 'PX Deq: Join ACK') + + gd(c, 'WAIT', 'PX Deq Credit: need buffer') + + gd(c, 'WAIT', 'PX Deq Credit: send blkd') + + gd(c, 'WAIT', 'PX Deq: Msg Fragment') + + gd(c, 'WAIT', 'PX Deq: Parse Reply') + + gd(c, 'WAIT', 'PX Deq: Execute Reply') + + gd(c, 'WAIT', 'PX Deq: Execution Msg') + + gd(c, 'WAIT', 'PX Deq: Table Q Normal') + + gd(c, 'WAIT', 'PX Deq: Table Q Sample') + + gd(c, 'WAIT', 'REPL Apply: txns') + + gd(c, 'WAIT', 'REPL Capture/Apply: messages') + + gd(c, 'WAIT', 'REPL Capture: archive log') + + gd(c, 'WAIT', 'single-task message') + + gd(c, 'WAIT', 'SQL*Net message from client') + + gd(c, 'WAIT', 'SQL*Net vector message from client') + + gd(c, 'WAIT', 'SQL*Net vector message from dblink') + + gd(c, 'WAIT', 'PL/SQL lock timer') + + gd(c, 'WAIT', 'Streams AQ: emn coordinator idle wait') + + gd(c, 'WAIT', 'EMON slave idle wait') + + gd(c, 'WAIT', 'Emon coordinator main loop') + + gd(c, 'WAIT', 'Emon slave main loop') + + gd(c, 'WAIT', 'Streams AQ: waiting for messages in the queue') + + gd(c, 'WAIT', 'Streams AQ: waiting for time management or cleanup tasks') + + gd(c, 'WAIT', 'Streams AQ: delete acknowledged messages') + + gd(c, 'WAIT', 'Streams AQ: deallocate messages from Streams Pool') + + gd(c, 'WAIT', 'Streams AQ: qmn coordinator idle wait') + + gd(c, 'WAIT', 'Streams AQ: qmn slave idle wait') + + gd(c, 'WAIT', 'AQ: 12c message cache init wait') + + gd(c, 'WAIT', 'AQ Cross Master idle') + + gd(c, 'WAIT', 'AQPC idle') + + gd(c, 'WAIT', 'Streams AQ: load balancer idle') + + gd(c, 'WAIT', 'Sharded Queues : Part Maintenance idle') + + gd(c, 'WAIT', 'REPL Capture/Apply: RAC AQ qmn coordinator') + + gd(c, 'WAIT', 'HS message to agent') + + gd(c, 'WAIT', 'ASM background timer') + + gd(c, 'WAIT', 'iowp msg') + + gd(c, 'WAIT', 'iowp file id') + + gd(c, 'WAIT', 'netp network') + + gd(c, 'WAIT', 'gopp msg') + + gd(c, 'WAIT', 'auto-sqltune: wait graph update') + + gd(c, 'WAIT', 'WCR: replay client notify') + + gd(c, 'WAIT', 'WCR: replay clock') + + gd(c, 'WAIT', 'WCR: replay paused') + + gd(c, 'WAIT', 'JS external job') + + gd(c, 'WAIT', 'cell worker idle') + )) / (get_seconds(d2 - d1)*1000000) * 100 + , 'STAT'), 10) || ' % unaccounted time' ; + else null; + end case; -- mt=time, mn + else null; + end case; -- mt + return ret; + end get_useful_average; + + /*--------------------------------------------------- + -- function for converting large numbers to human-readable format + ---------------------------------------------------*/ + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, -- for KiB/MiB formatting use + p_grouplen in number default 3 -- p_base=2 and p_grouplen=10 + ) + return varchar2 + is + begin + if p_num = 0 then return '0'; end if; + if p_num IS NULL then return '~'; end if; + + if p_stype in ('WAIT','TIME') then + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then 'us' + when 1 then 'us' + when p_grouplen*1 then 'ms' + when p_grouplen*2 then 's' + when p_grouplen*3 then 'ks' + when p_grouplen*4 then 'Ms' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us' + end; + + else + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then '' + when 1 then '' + when p_grouplen*1 then 'k' + when p_grouplen*2 then 'M' + when p_grouplen*3 then 'G' + when p_grouplen*4 then 'T' + when p_grouplen*5 then 'P' + when p_grouplen*6 then 'E' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ) + end; + + end if; + + end; -- tptformat + + /*--------------------------------------------------- + -- simple function for parsing arguments from parameter string + ---------------------------------------------------*/ + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) return varchar2 + is + ret varchar(1000) := NULL; + begin + + -- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' ); + -- dbms_output.put('p_extract = ['||p_extract||'] ' ); + + if lower(p_parvalues) like lower(p_extract)||'%' + or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then + + ret := + nvl ( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract), + case + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) + when 0 then length(p_parvalues) + else + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) - 1 + end + ) + , chr(0) -- in case parameter was specified but with no value + ); + + else + ret := null; -- no parameter found + end if; + + -- dbms_output.put_line('ret = ['||replace(ret,chr(0),'\0')||']'); + + return ret; + + end; -- getopt + + /*--------------------------------------------------- + -- proc for getting session list with username, osuser, machine etc + ---------------------------------------------------*/ + procedure get_sessions is + tmp_sessions tmp_sestab; + begin + + select /*+ unnest */ /* get_session_list:1 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and ( + &sid_filter + ) ; + + g_sessions := g_empty_sessions; + + for i in 1..tmp_sessions.count loop + g_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + end; -- get_sessions + + /*--------------------------------------------------- + -- function for getting session list with username, osuser, machine etc + -- this func does not update the g_sessions global array but returns session info as return value + ---------------------------------------------------*/ + function get_sessions return sestab is + tmp_sessions tmp_sestab; + l_return_sessions sestab; + begin + + select /*+ unnest */ /* get_session_list:2 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and (&sid_filter) ; + + for i in 1..tmp_sessions.count loop + --output('get_sessions i='||i||' sid='||tmp_sessions(i).sid); + l_return_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + return l_return_sessions; + + end; -- get_sessions + + + /*--------------------------------------------------- + -- functions for extracting and converting gv$session + -- records to varchar2 + ---------------------------------------------------*/ + function sitem(p in varchar2) return varchar2 as + begin + return '<'||translate(p, '<>', '__')||'>'; + end; -- sitem varchar2 + + function sitem(p in number) return varchar2 as + begin + return '<'||to_char(p)||'>'; + end; -- sitem number + + function sitem(p in date) return varchar2 as + begin + return '<'||to_char(p, 'YYYY-MM-DD HH24:MI:SS')||'>'; + end; -- sitem date + + function sitem_raw(p in raw) return varchar2 as + begin + return '<'||upper(rawtohex(p))||'>'; + end; -- sitem_raw + + + /*--------------------------------------------------- + -- proc for resetting the snapper ash array + ---------------------------------------------------*/ + procedure reset_ash is + begin + g_ash_samples_taken := 0; + -- clear g_ash + g_ash := new sys.dbms_debug_vc2coll(); + end; -- reset_ash + + + /*--------------------------------------------------- + -- proc for getting ash style samples from gv$session + ---------------------------------------------------*/ + procedure extract_ash is + ash_i varchar2(30); + s gv$session%rowtype; + + begin + -- keep track how many times we sampled gv$session so we could calculate averages later on + g_ash_samples_taken := g_ash_samples_taken + 1; + --output('g_sessions.count='||g_sessions.count); + ash_i := g_sessions.first; + + while ash_i is not null loop + + s := g_sessions(ash_i); + if -- active, on cpu + (s.status = 'ACTIVE' and s.state != 'WAITING' and s.sid != g_mysid) + or -- active, waiting for non-idle wait + (s.status = 'ACTIVE' and s.state = 'WAITING' and s.wait_class != 'Idle' and s.sid != g_mysid) + then + --output('extract_ash: i='||i||' sid='||s.sid||' hv='||s.sql_hash_value||' sqlid='||s.sql_id); + -- if not actually waiting for anything, clear the past wait event details + if s.state != 'WAITING' then + s.state:='ON CPU'; + s.event:='ON CPU'; + s.wait_class:='ON CPU'; --TODO: What do we need to do for 9i here? + s.p1:=NULL; + s.p2:=NULL; + s.p3:=NULL; + end if; + + g_ash.extend; + + -- max length 1000 bytes (due to dbms_debug_vc2coll) + g_ash(g_ash.count) := substr( + sitem(s.inst_id) -- 1 + ||sitem(s.sid) -- 2 + ||sitem(s.username) -- 3 -- 30 bytes + ||sitem(s.machine) -- 4 -- 64 bytes + ||sitem(s.terminal) -- 5 -- 30 bytes + ||sitem(s.program) -- 6 -- 48 bytes + ||sitem(s.event) -- 7 -- 64 bytes + ||sitem(s.wait_class) -- 8 -- 64 bytes, 10g+ + ||sitem(s.state) -- 9 + ||sitem(s.p1) -- 10 + ||sitem(s.p2) -- 11 + ||sitem(s.p3) -- 12 + ||sitem(s.row_wait_obj#) -- 13 + ||sitem(s.row_wait_file#) -- 14 + ||sitem(s.row_wait_block#) -- 15 + ||sitem(s.row_wait_row#) -- 16 + ||sitem(s.blocking_session_status) -- 17 -- 10g+ + &_NO_BLK_INST ||sitem('N/A') -- 17 -- 10gR2+ + &_YES_BLK_INST ||sitem(s.blocking_instance) -- 18 -- 10gR2+ + ||sitem(s.blocking_session) -- 19 -- 10g+ + ||sitem(s.sql_hash_value) -- 20 + ||sitem(s.sql_id) -- 21 -- 10g+ + ||sitem(s.sql_child_number) -- 22 -- 10g+ + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 23 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 24 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 25 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 26 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_object_id) -- 23 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_subprogram_id) -- 24 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_object_id) -- 25 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_subprogram_id) -- 26 + ||sitem(s.module) -- 27 -- 48 bytes + ||sitem(s.action) -- 28 -- 32 bytes + ||sitem(s.client_identifier) -- 29 -- 64 bytes + ||sitem(s.service_name) -- 30 -- 64 bytes, 10g+ + &_IF_ORA12_OR_HIGHER ||sitem(s.con_id) -- 31 -- 12c+ + &_IF_LOWER_THAN_ORA12 ||sitem('N/A') -- 31 + , 1, 1000); + + end if; -- sample is of an active session + + ash_i := g_sessions.next(ash_i); + + end loop; + + exception + when no_data_found then output('error in extract_ash(): no_data_found for item '||i); + end; -- extract_ash + + + /*--------------------------------------------------- + -- proc for querying performance data into collections + ---------------------------------------------------*/ + procedure snap( p_snapdate out timestamp, p_stats out stab, l_stats out ltab, p_stats_string out sys.dbms_debug_vc2coll) is + + lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options', 'sinclude=' )), '%'); + lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options', 'linclude=' )), '%'); + lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options', 'tinclude=' )), '%'); + lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options', 'winclude=' )), '%'); + + lstr varchar2(1000); + + begin + + p_snapdate := systimestamp; + + select /* get_session_stats */ p_snapdate ts, snapper_stats.* + bulk collect into p_stats + from ( + select 'STAT' stype, s.inst_id, s.sid, ss.statistic# - pls_adjust statistic#, ss.value, null event_count + from gv$session s, gv$sesstat ss + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = ss.inst_id + and s.sid = ss.sid + and (lv_gather like '%s%' or lv_gather like '%a%') + and ss.statistic# in (select statistic# from v$statname + where lower(name) like '%'||lv_include_stat||'%' + or regexp_like (name, lv_include_stat, 'i') + ) + -- + union all + select + 'WAIT', s.inst_id, s.sid, + en.event# + (select count(*) from v$statname) + 1 - pls_adjust, + nvl(se.time_waited_micro,0) + ( decode(se.event||s.state, s.event||'WAITING', + CASE WHEN s.seconds_in_wait > 1300000000 THEN 0 ELSE s.seconds_in_wait END -- bug in v$session + , 0) * 1000000 ) value, total_waits event_count + from gv$session s, gv$session_event se, v$event_name en + where &sid_filter + and s.sid = se.sid + and s.inst_id = se.inst_id + and se.event = en.name + --and (se.inst_id, se.sid) in (&snapper_sid) + and (lv_gather like '%w%' or lv_gather like '%a%') + and en.event# in (select event# from v$event_name + where lower(name) like '%'||lv_include_wait||'%' + or regexp_like (name, lv_include_wait, 'i') + ) + -- + union all + select 'TIME' stype, s.inst_id, s.sid, st.stat_id - pls_adjust statistic#, st.value, null event_count + from gv$session s, gv$sess_time_model st + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = st.inst_id + and s.sid = st.sid + and (lv_gather like '%t%' or lv_gather like '%a%') + and st.stat_id in (select stat_id from gv$sys_time_model + where lower(stat_name) like '%'||lv_include_time||'%' + or regexp_like (stat_name, lv_include_time, 'i') + ) + -- + union all + select 'LATG', s.inst_id, -1 sid, + s.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + s.gets + s.immediate_gets value, null event_count + from gv$latch s + where &inst_filter + and (lv_gather like '%l%' or lv_gather like '%a%') + and latch# in (select latch# from v$latchname + where lower(name) like '%'||lv_include_latch||'%' + or regexp_like (name, lv_include_latch, 'i') + ) + -- + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 union all + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.why0+s.why1+s.why2 value, null event_count + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 from x$kcbsw s, x$kcbwh w + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 where + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx = w.indx + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and s.why0+s.why1+s.why2 > 0 + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and (lv_gather like '%b%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER union all + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER sw.indx + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.why0+why.why1+why.why2+sw.other_wait value, null event_count + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER from + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbuwhy why, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbwh dsc, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbsw sw + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER where + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.indx = dsc.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = dsc.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.why0 + why.why1 + why.why2 + sw.other_wait > 0 + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER -- deliberate cartesian join + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', s.inst_id, -1 sid, + ascii(substr(s.eq_type,1,1))*256 + ascii(substr(s.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + s.total_req# value, null event_count + from gv$enqueue_stat s + where &inst_filter + and (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_stats + order by inst_id, sid, stype, statistic#; + + if p_stats.COUNT > 0 then + -- l_stats is an associative array for stats lookup, used for the useful averages calculation + -- p_stats_string is a dbms_debug_vc2coll collection datatype for "persisting" stats values across snapper DB calls (for "before" and "after" snaps) + p_stats_string := sys.dbms_debug_vc2coll(); + for s in p_stats.first..p_stats.last loop + -- type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + + if g_snap_begin is not null then + p_stats_string.extend(); + p_stats_string(s) := TO_CHAR(p_stats(s).ts, 'YYYY-MM-DD HH24:MI:SS.FF') ||','|| + p_stats(s).stype ||','|| + TO_CHAR(p_stats(s).inst_id) ||','|| + TO_CHAR(p_stats(s).sid) ||','|| + TRIM(TO_CHAR(p_stats(s).statistic#, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).value, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).event_count,'999999999999999999999999')); + --output('p_stats.p_stats_string='||p_stats_string(s)); + end if; + end loop; -- s in (p_stats) + end if; -- p.stats.COUNT > 0 + end snap; + + + /*--------------------------------------------------- + -- proc for reversing the string-normalized + -- stats array into lookup tables/collections + ---------------------------------------------------*/ + procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out timestamp, p_stats out stab, l_stats out ltab) + is + lstr varchar2(1000); + lv_rec srec; + begin + p_snapdate := NULL; + --type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + for s in p_string_stats.first .. p_string_stats.last loop + lv_rec.ts := TO_TIMESTAMP(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 1),',',''), 'YYYY-MM-DD HH24:MI:SS.FF'); + lv_rec.stype := replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 2),',',''); + lv_rec.inst_id := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 3),',','')); + lv_rec.sid := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 4),',','')); + lv_rec.statistic# := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 5),',','')); + lv_rec.value := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 6),',','')); + lv_rec.event_count := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 7),',','')); + --output('snap_from_stats_string.event_count = '||to_char(lv_rec.event_count)); + + p_stats(s) := lv_rec; + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + end loop; + + p_snapdate := lv_rec.ts; + end snap_from_stats_string; + + /*--------------------------------------------------- + -- proc for dumping ASH data out in grouped + -- and ordered fashion + ---------------------------------------------------*/ + procedure out_ash( p_ash_columns in varchar2, p_topn in number := 10 ) as + + -- whether to print given column or not + p_inst_id number := 0; + p_sid number := 0; + p_username number := 0; + p_machine number := 0; + p_terminal number := 0; + p_program number := 0; + p_event number := 0; + p_wait_class number := 0; + p_state number := 0; + p_p1 number := 0; + p_p2 number := 0; + p_p3 number := 0; + p_row_wait_obj# number := 0; + p_row_wait_file# number := 0; + p_row_wait_block# number := 0; + p_row_wait_row# number := 0; + p_blocking_session_status number := 0; + p_blocking_instance number := 0; + p_blocking_session number := 0; + p_sql_hash_value number := 0; + p_sql_id number := 0; + p_sql_child_number number := 0; + p_plsql_entry_object_id number := 0; + p_plsql_entry_subprogram_id number := 0; + p_plsql_object_id number := 0; + p_plsql_subprogram_id number := 0; + p_module number := 0; + p_action number := 0; + p_client_identifier number := 0; + p_service_name number := 0; + p_con_id number := 0; + + -- temporary variables for holding session details (for later formatting) + o_inst_id varchar2(100); + o_sid varchar2(100); + o_username varchar2(100); + o_machine varchar2(100); + o_terminal varchar2(100); + o_program varchar2(100); + o_event varchar2(100); + o_wait_class varchar2(100); + o_state varchar2(100); + o_p1 varchar2(100); + o_p2 varchar2(100); + o_p3 varchar2(100); + o_row_wait_obj# varchar2(100); + o_row_wait_file# varchar2(100); + o_row_wait_block# varchar2(100); + o_row_wait_row# varchar2(100); + o_blocking_session_status varchar2(100); + o_blocking_instance varchar2(100); + o_blocking_session varchar2(100); + o_sql_hash_value varchar2(100); + o_sql_id varchar2(100); + o_sql_child_number varchar2(100); + o_plsql_entry_object_id varchar2(100); + o_plsql_entry_subprogram_id varchar2(100); + o_plsql_object_id varchar2(100); + o_plsql_subprogram_id varchar2(100); + o_module varchar2(100); + o_action varchar2(100); + o_client_identifier varchar2(100); + o_service_name varchar2(100); + o_con_id varchar2(100); + + -- helper local vars + l_ash_grouping number := 0; + l_output_line varchar2(4000); + l_ash_header_line varchar2(4000); + + begin + + -- bail out if no ASH samples recorded + if g_ash.count = 0 then + output(' '); + return; + end if; + + + l_ash_header_line := ''; + if output_actses = 1 then l_ash_header_line := l_ash_header_line || ' ActSes'; end if; + if output_actses_pct = 1 then l_ash_header_line := l_ash_header_line || ' %Thread'; end if; + + -- ash,ash1,ash2,ash3,ash4,ash5,ash6 parameter column group tokenizer + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + -- supported ASH column names + case s.token + -- actual column names in gv$session + when 'inst_id' then l_ash_grouping := l_ash_grouping + c_inst_id ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('INST_ID' , w_inst_id , ' '); + when 'con_id' then l_ash_grouping := l_ash_grouping + c_con_id ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('CON_ID' , w_con_id , ' '); + when 'sid' then l_ash_grouping := l_ash_grouping + c_sid ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('SID' , w_sid , ' '); + when 'username' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'machine' then l_ash_grouping := l_ash_grouping + c_machine ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MACHINE' , w_machine , ' '); + when 'terminal' then l_ash_grouping := l_ash_grouping + c_terminal ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('TERMINAL' , w_terminal , ' '); + when 'program' then l_ash_grouping := l_ash_grouping + c_program ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PROGRAM' , w_program , ' '); + when 'event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_class' then l_ash_grouping := l_ash_grouping + c_wait_class ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('WAIT_CLASS' , w_wait_class , ' '); + when 'state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + when 'p1' then l_ash_grouping := l_ash_grouping + c_p1 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P1' , w_p1 , ' '); + when 'p2' then l_ash_grouping := l_ash_grouping + c_p2 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P2' , w_p2 , ' '); + when 'p3' then l_ash_grouping := l_ash_grouping + c_p3 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P3' , w_p3 , ' '); + when 'row_wait_obj#' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'row_wait_file#' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'row_wait_block#' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row_wait_row#' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'blocking_session_status' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'blocking_instance' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'blocking_session' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql_hash_value' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sql_id' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'sql_child_number' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_entry_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_entry_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'module' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'action' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'client_identifier' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service_name' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'obj' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'file' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'block' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'bss' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'bsi' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'bs' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sqlid' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'child' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_eoid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_esubpid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_oid' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subpid' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'mod' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'act' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'cid' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + when 'wait_event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + else + null; + raise_application_error(-20001, 'Snapper: Invalid ASH column name, search for "ASH column name"'||chr(10)||'in snapper.sql script to see supported column names.'||chr(10)||sqlerrm); + end case; -- case s.token + + end loop; -- tokenizer + + output(' '); + output(lpad('-',length(l_ash_header_line),'-')); + output(l_ash_header_line); + output(lpad('-',length(l_ash_header_line),'-')); + + -- this is needed for "easy" sorting and group by ops (without any custom stored object types!) + for i in ( + with /* get_aggregates_from_ash */ raw_records as ( + select column_value rec from table(cast(g_ash as sys.dbms_debug_vc2coll)) + ), + ash_records as ( + select + substr(r.rec, instr(r.rec, '<', 1, 1)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 1)+1), '>')-1) inst_id + , substr(r.rec, instr(r.rec, '<', 1, 2)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 2)+1), '>')-1) sid + , substr(r.rec, instr(r.rec, '<', 1, 3)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 3)+1), '>')-1) username + , substr(r.rec, instr(r.rec, '<', 1, 4)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 4)+1), '>')-1) machine + , substr(r.rec, instr(r.rec, '<', 1, 5)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 5)+1), '>')-1) terminal + , substr(r.rec, instr(r.rec, '<', 1, 6)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 6)+1), '>')-1) program + , substr(r.rec, instr(r.rec, '<', 1, 7)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 7)+1), '>')-1) event + , substr(r.rec, instr(r.rec, '<', 1, 8)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 8)+1), '>')-1) wait_class + , substr(r.rec, instr(r.rec, '<', 1, 9)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 9)+1), '>')-1) state + , substr(r.rec, instr(r.rec, '<', 1, 10)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 10)+1), '>')-1) p1 + , substr(r.rec, instr(r.rec, '<', 1, 11)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 11)+1), '>')-1) p2 + , substr(r.rec, instr(r.rec, '<', 1, 12)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 12)+1), '>')-1) p3 + , substr(r.rec, instr(r.rec, '<', 1, 13)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 13)+1), '>')-1) row_wait_obj# + , substr(r.rec, instr(r.rec, '<', 1, 14)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 14)+1), '>')-1) row_wait_file# + , substr(r.rec, instr(r.rec, '<', 1, 15)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 15)+1), '>')-1) row_wait_block# + , substr(r.rec, instr(r.rec, '<', 1, 16)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 16)+1), '>')-1) row_wait_row# + , substr(r.rec, instr(r.rec, '<', 1, 17)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 17)+1), '>')-1) blocking_session_status + , substr(r.rec, instr(r.rec, '<', 1, 18)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 18)+1), '>')-1) blocking_instance + , substr(r.rec, instr(r.rec, '<', 1, 19)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 19)+1), '>')-1) blocking_session + , substr(r.rec, instr(r.rec, '<', 1, 20)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 20)+1), '>')-1) sql_hash_value + , substr(r.rec, instr(r.rec, '<', 1, 21)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 21)+1), '>')-1) sql_id + , substr(r.rec, instr(r.rec, '<', 1, 22)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 22)+1), '>')-1) sql_child_number + , substr(r.rec, instr(r.rec, '<', 1, 23)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 23)+1), '>')-1) plsql_entry_object_id + , substr(r.rec, instr(r.rec, '<', 1, 24)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 24)+1), '>')-1) plsql_entry_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 25)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 25)+1), '>')-1) plsql_object_id + , substr(r.rec, instr(r.rec, '<', 1, 26)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 26)+1), '>')-1) plsql_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 27)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 27)+1), '>')-1) module + , substr(r.rec, instr(r.rec, '<', 1, 28)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 28)+1), '>')-1) action + , substr(r.rec, instr(r.rec, '<', 1, 29)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 29)+1), '>')-1) client_identifier + , substr(r.rec, instr(r.rec, '<', 1, 30)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 30)+1), '>')-1) service_name + , substr(r.rec, instr(r.rec, '<', 1, 31)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 31)+1), '>')-1) con_id + from + raw_records r + ) + select * from ( + select + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) as inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) as sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) as username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) as machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) as terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) as program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) as event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) as wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) as state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) as p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) as p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) as p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) as row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) as row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) as row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) as row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) as blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) as blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) as blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) as sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) as sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) as sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) as plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) as plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) as plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) as plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) as module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) as action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) as client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) as service_name + , decode(bitand(l_ash_grouping, power(2, s_con_id )), 0, chr(0), con_id ) as con_id + , count(*)/g_ash_samples_taken average_active_samples + from + ash_records a + group by + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) -- inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) -- sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) -- username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) -- machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) -- terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) -- program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) -- event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) -- wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) -- state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) -- p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) -- p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) -- p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) -- row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) -- row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) -- row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) -- row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) -- blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) -- blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) -- blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) -- sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) -- sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) -- sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) -- plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) -- plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) -- plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) -- plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) -- module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) -- action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) -- client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) -- service_name + , decode(bitand(l_ash_grouping, power(2, s_con_id )), 0, chr(0), con_id ) -- con_id + order by + count(*)/g_ash_samples_taken desc + ) + where rownum <= p_topn + ) loop + + l_output_line := ''; + + o_inst_id := CASE WHEN i.inst_id = chr(0) THEN null ELSE nvl(i.inst_id , ' ') END; + o_sid := CASE WHEN i.sid = chr(0) THEN null ELSE nvl(i.sid , ' ') END; + o_username := CASE WHEN i.username = chr(0) THEN null ELSE nvl(i.username , ' ') END; + o_machine := CASE WHEN i.machine = chr(0) THEN null ELSE nvl(i.machine , ' ') END; + o_terminal := CASE WHEN i.terminal = chr(0) THEN null ELSE nvl(i.terminal , ' ') END; + o_program := CASE WHEN i.program = chr(0) THEN null ELSE nvl(i.program , ' ') END; + o_event := CASE WHEN i.event = chr(0) THEN null ELSE nvl(i.event , ' ') END; + o_wait_class := CASE WHEN i.wait_class = chr(0) THEN null ELSE nvl(i.wait_class , ' ') END; + o_state := CASE WHEN i.state = chr(0) THEN null ELSE nvl(i.state , ' ') END; + o_p1 := CASE WHEN i.p1 = chr(0) THEN null ELSE nvl(i.p1 , ' ') END; + o_p2 := CASE WHEN i.p2 = chr(0) THEN null ELSE nvl(i.p2 , ' ') END; + o_p3 := CASE WHEN i.p3 = chr(0) THEN null ELSE nvl(i.p3 , ' ') END; + o_row_wait_obj# := CASE WHEN i.row_wait_obj# = chr(0) THEN null ELSE nvl(i.row_wait_obj# , ' ') END; + o_row_wait_file# := CASE WHEN i.row_wait_file# = chr(0) THEN null ELSE nvl(i.row_wait_file# , ' ') END; + o_row_wait_block# := CASE WHEN i.row_wait_block# = chr(0) THEN null ELSE nvl(i.row_wait_block# , ' ') END; + o_row_wait_row# := CASE WHEN i.row_wait_row# = chr(0) THEN null ELSE nvl(i.row_wait_row# , ' ') END; + o_blocking_session_status := CASE WHEN i.blocking_session_status = chr(0) THEN null ELSE nvl(i.blocking_session_status , ' ') END; + o_blocking_instance := CASE WHEN i.blocking_instance = chr(0) THEN null ELSE nvl(i.blocking_instance , ' ') END; + o_blocking_session := CASE WHEN i.blocking_session = chr(0) THEN null ELSE nvl(i.blocking_session , ' ') END; + o_sql_hash_value := CASE WHEN i.sql_hash_value = chr(0) THEN null ELSE nvl(i.sql_hash_value , ' ') END; + o_sql_id := CASE WHEN i.sql_id = chr(0) THEN null ELSE nvl(i.sql_id , ' ') END; + o_sql_child_number := CASE WHEN i.sql_child_number = chr(0) THEN null ELSE nvl(i.sql_child_number , ' ') END; + o_plsql_entry_object_id := CASE WHEN i.plsql_entry_object_id = chr(0) THEN null ELSE nvl(i.plsql_entry_object_id , ' ') END; + o_plsql_entry_subprogram_id := CASE WHEN i.plsql_entry_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_entry_subprogram_id , ' ') END; + o_plsql_object_id := CASE WHEN i.plsql_object_id = chr(0) THEN null ELSE nvl(i.plsql_object_id , ' ') END; + o_plsql_subprogram_id := CASE WHEN i.plsql_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_subprogram_id , ' ') END; + o_module := CASE WHEN i.module = chr(0) THEN null ELSE nvl(i.module , ' ') END; + o_action := CASE WHEN i.action = chr(0) THEN null ELSE nvl(i.action , ' ') END; + o_client_identifier := CASE WHEN i.client_identifier = chr(0) THEN null ELSE nvl(i.client_identifier , ' ') END; + o_service_name := CASE WHEN i.service_name = chr(0) THEN null ELSE nvl(i.service_name , ' ') END; + o_con_id := CASE WHEN i.con_id = chr(0) THEN null ELSE nvl(i.con_id , ' ') END; + + -- print the AAS and activity % as the first columns + l_output_line := ''; + if output_actses = 1 then l_output_line := l_output_line || lpad(to_char(round(i.average_active_samples,2),'9999.99'), w_actses, ' '); end if; + if output_actses_pct = 1 then l_output_line := l_output_line || lpad('('||to_char(round(i.average_active_samples*100))||'%)', w_actses_pct, ' '); end if; + + -- loop through ash columns to find what to print and in which order + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + l_output_line := l_output_line || ' | ' || + case s.token + -- actual column names in gv$session + when 'inst_id' then lpad(o_inst_id , w_inst_id , ' ') + when 'con_id' then lpad(o_con_id , w_con_id , ' ') + when 'sid' then lpad(o_sid , w_sid , ' ') + when 'username' then rpad(o_username , w_username , ' ') + when 'machine' then rpad(o_machine , w_machine , ' ') + when 'terminal' then rpad(o_terminal , w_terminal , ' ') + when 'program' then rpad(o_program , w_program , ' ') + when 'event' then rpad(o_event , w_event , ' ') + when 'wait_class' then rpad(o_wait_class , w_wait_class , ' ') + when 'state' then rpad(o_state , w_state , ' ') + when 'p1' then rpad(o_p1 , w_p1 , ' ') + when 'p2' then rpad(o_p2 , w_p2 , ' ') + when 'p3' then rpad(o_p3 , w_p3 , ' ') + when 'row_wait_obj#' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'row_wait_file#' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'row_wait_block#' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row_wait_row#' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'blocking_session_status' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'blocking_instance' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'blocking_session' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql_hash_value' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sql_id' then rpad(o_sql_id , w_sql_id , ' ') + when 'sql_child_number' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_entry_object_id' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_entry_subprogram_id' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_object_id' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subprogram_id' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'module' then rpad(o_module , w_module , ' ') + when 'action' then rpad(o_action , w_action , ' ') + when 'client_identifier' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service_name' then rpad(o_service_name , w_service_name , ' ') + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then rpad(o_username , w_username , ' ') + when 'obj' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'file' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'block' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'bss' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'bsi' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'bs' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sqlid' then rpad(o_sql_id , w_sql_id , ' ') + when 'child' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_eoid' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_esubpid' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_oid' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subpid' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'mod' then rpad(o_module , w_module , ' ') + when 'act' then rpad(o_action , w_action , ' ') + when 'cid' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service' then rpad(o_service_name , w_service_name , ' ') + when 'wait_event' then rpad(o_event , w_event , ' ') + when 'wait_state' then rpad(o_state , w_state , ' ') + else + '' + end; -- case s.token + + end loop; -- ash parameter tokenizer + + output(l_output_line); + + end loop; -- grouped ash samples + + end out_ash; + +-- and it begins!!! +begin + + -- get snappers own sid into g_mysid + select sid into g_mysid from v$mystat where rownum = 1; + + pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize); + --output ( 'Pagesize='||pagesize ); + + lv_ash := getopt('&snapper_options', 'ash'); + lv_stats := getopt('&snapper_options', 'stat'); + + if lv_ash is not null then gather_ash := 1; end if; + if lv_stats is not null then gather_stats := 1; end if; + + --output('all='||case when getopt('&snapper_options', 'all') = chr(0) then 'chr(0)' when getopt('&snapper_options', 'all') is null then 'null' else (getopt('&snapper_options','all')) end); + -- some additional default value logic + if getopt('&snapper_options', 'all') is not null then + --output('setting stats to all due to option = all'); + gather_stats := 1; + gather_ash := 1; + else + if (lv_ash is null and lv_stats is null) then + gather_stats := 0; + gather_ash := 1; + end if; + end if; + + -- determine which performance counters and stats to collect + lv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + when 'all' then 'stw' + else nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + end; + + --lv_gather:=getopt ('&snapper_options', 'gather='); + --output('lv_gather='||lv_gather); + + g_snap_begin := lower(getopt('&snapper_options', 'begin' )); + g_snap_end := lower(getopt('&snapper_options', 'end' )); + --output('g_snap_begin = '||g_snap_begin); + --output('g_snap_end = '||g_snap_end); + + if pagesize > 0 then + output(' '); + output('-- Session Snapper v4.30 - by Tanel Poder ( http://blog.tanelpoder.com/snapper ) - Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :)'); + output(' '); + end if; + + -- initialize statistic and event name array + -- fetch statistic names with their adjusted IDs + select /* get_stat_names */ * + bulk collect into sn_tmp + from ( + select 'STAT' stype, statistic# - pls_adjust statistic#, name + from v$statname + where (lv_gather like '%s%' or lv_gather like '%a%') + -- + union all + select 'WAIT', + event# + (select count(*) from v$statname) + 1 - pls_adjust, name + from v$event_name + where (lv_gather like '%w%' or lv_gather like '%a%') + -- + union all + select 'TIME' stype, stat_id - pls_adjust statistic#, stat_name name + from gv$sys_time_model + where (lv_gather like '%t%' or lv_gather like '%a%') + -- + union all + select 'LATG', + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + name + from gv$latch l + where (lv_gather like '%l%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE union all + &_IF_X_ACCESSIBLE select 'BUFG', + &_IF_X_ACCESSIBLE indx + + &_IF_X_ACCESSIBLE (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE kcbwhdes name + &_IF_X_ACCESSIBLE from x$kcbwh + &_IF_X_ACCESSIBLE where (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + eq_type + from ( + select es.eq_type + ||' - '||lt.name + eq_type, + total_req# + from + gv$enqueue_stat es + , gv$lock_type lt + where es.eq_type = lt.type + ) e + where (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_statnames + order by stype, statistic#; + + -- store these into an index_by array organized by statistic# for fast lookup + for i in 1..sn_tmp.count loop + sn(sn_tmp(i).statistic#) := sn_tmp(i); + sn_reverse(sn_tmp(i).stype||','||sn_tmp(i).name) := sn_tmp(i); + end loop; + + + -- main sampling loop + for c in 1..&snapper_count loop + + -- sesstat and other performance counter sampling + if gather_stats = 1 then + + -- print header if required + gv_header_string := + CASE WHEN output_header = 1 THEN 'HEAD,' END + || CASE WHEN output_inst = 1 THEN ' INST,' END + || CASE WHEN output_sid = 1 THEN ' SID,' END + || CASE WHEN output_inst_sid = 1 THEN ' SID @INST,' END + || CASE WHEN output_username = 1 THEN ' USERNAME ,' END + || CASE WHEN output_time = 1 THEN ' SNAPSHOT START ,' END + || CASE WHEN output_seconds = 1 THEN ' SECONDS,' END + || CASE WHEN output_stype = 1 THEN ' TYPE,' END + || CASE WHEN output_sname = 1 THEN rpad(' STATISTIC',59,' ')||',' END + || CASE WHEN output_delta = 1 THEN ' DELTA,' END + || CASE WHEN output_delta_s = 1 THEN ' DELTA/SEC,' END + || CASE WHEN output_hdelta = 1 THEN ' HDELTA,' END + || CASE WHEN output_hdelta_s = 1 THEN ' HDELTA/SEC,' END + || CASE WHEN output_percent = 1 THEN ' %TIME,' END + || CASE WHEN output_pcthist = 1 THEN ' GRAPH ,' END + || CASE WHEN output_eventcnt = 1 THEN ' NUM_WAITS,' END + || CASE WHEN output_eventcnt_s = 1 THEN ' WAITS/SEC,' END + || CASE WHEN output_eventavg = 1 THEN ' AVERAGES ' END + ; + + + if g_snap_begin is null then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(rpad('-',length(gv_header_string),'-')); + output(gv_header_string); + output(rpad('-',length(gv_header_string),'-')); + else + if pagesize = -1 and c = 1 then + output(gv_header_string); + end if; + end if; + else + output('Taking BEGIN sample ...'); + end if; + + -- TODO raise an error if both begin and end are used together + -- TODO conditionally comment out the refcursor use unless begin and end is used + + -- manual before/after snapshots (snapper v4) + if g_snap_begin is not null or g_snap_end is not null then + if g_snap_begin is not null then + get_sessions; + snap(d1,s1,l1,g_snap1); +&_MANUAL_SNAPSHOT open :snapper for select column_value rec from table(g_snap1); -- if you see this error then run: "VAR SNAPPER REFCURSOR" first! + exit; + end if; + + if g_snap_end is not null then +&_MANUAL_SNAPSHOT fetch :snapper bulk collect into g_snap1; -- You should run snapper with BEGIN option first! + -- procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out date, p_stats out stab, l_stats out ltab) + snap_from_stats_string(g_snap1, d1, s1, l1); + end if; + else -- normal interval sampling + if c = 1 then + get_sessions; + snap(d1,s1,l1,g_snap1); + else + get_sessions; + d1 := d2; + s1 := s2; + g_snap1 := g_snap2; + end if; -- c = 1 + end if; + + end if; -- gather_stats = 1 + + + + -- ASH style sampling +&_USE_DBMS_LOCK ash_date1 := sysdate; +&_USE_DBMS_LOCK if gather_ash = 1 then +&_USE_DBMS_LOCK while sysdate < (ash_date1 + (&snapper_sleep/86400)) loop +&_USE_DBMS_LOCK -- get active session records from g_sessions +&_USE_DBMS_LOCK get_sessions; +&_USE_DBMS_LOCK extract_ash(); +&_USE_DBMS_LOCK -- sleep timeout backoff depending on the duration sampled (for up to 10 seconds total sampling time will get max 100 Hz sampling) +&_USE_DBMS_LOCK -- for longer duration sampling the algorithm will back off and for long durations (over 100 sec) the sampling rate will stabilize +&_USE_DBMS_LOCK -- at 1Hz +&_USE_DBMS_LOCK dbms_lock.sleep( greatest(0.1,(least(1,&snapper_sleep*&snapper_count/100))) ); +&_USE_DBMS_LOCK end loop; +&_USE_DBMS_LOCK else +&_USE_DBMS_LOCK dbms_lock.sleep( ((ash_date1+(&snapper_sleep/86400)) - sysdate)*86400 ); +&_USE_DBMS_LOCK null; +&_USE_DBMS_LOCK end if; +&_USE_DBMS_LOCK ash_date2 := sysdate; + + -- sesstat new sample and delta calculation + if gather_stats = 1 then + + get_sessions; + snap(d2,s2,l2,g_snap2); + + -- manually coded nested loop outer join for calculating deltas: + -- why not use a SQL join? this would require creation of PL/SQL + -- collection object types, but Snapper does not require any changes + -- to the database, so any custom object types are out! + changed_values := 0; + missing_values_s1 := 0; + missing_values_s2 := 0; + + -- remember last disappeared SID so we wouldn't need to output a warning + -- message for each statistic row of that disappeared sid + disappeared_sid := 0; + + i :=1; -- iteration counter (for debugging) + a :=1; -- s1 array index + b :=1; -- s2 array index + + if s2.count > 0 then lv_curr_sid := s2(b).sid; end if; + + while ( a <= s1.count and b <= s2.count ) loop + + if lv_curr_sid != 0 and lv_curr_sid != s2(b).sid then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + -- if filtering specific stats, assuming that it's better to not leave spaces between every session data + + if getopt('&snapper_options', 'sinclude=')||getopt('&snapper_options', 'tinclude=' )||getopt('&snapper_options', 'winclude=' ) is null then + output(' '); + -- output(rpad('-',length(gv_header_string),'-')); + -- output(gv_header_string); + -- output(rpad('-',length(gv_header_string),'-')); + end if; + end if; + lv_curr_sid := s2(b).sid; + end if; + + delta := 0; -- don't print + + case + when s1(a).sid = s2(b).sid then + + case + when s1(a).statistic# = s2(b).statistic# then + + delta := s2(b).value - s1(a).value; + evcnt := s2(b).event_count - s1(a).event_count; + --output('DEBUG, s1(a).statistic# s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + if delta != 0 then fout(); end if; + + a := a + 1; + b := b + 1; + + when s1(a).statistic# > s2(b).statistic# then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).statistic# < s2(b).statistic# then + + output('ERROR, s1(a).statistic# < s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + else + output('ERROR, s1(a).statistic# ? s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + end case; -- s1(a).statistic# ... s2(b).statistic# + + when s1(a).sid > s2(b).sid then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).sid < s2(b).sid then + + if disappeared_sid != s1(a).sid then + output('WARN, Session has disappeared since previous snapshot, ignoring SID='||to_char(s1(a).sid)||' debug(a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count||')'); + end if; + disappeared_sid := s1(a).sid; + a := a + 1; + + else + output('ERROR, Should not be here, SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + end case; -- s1(a).sid ... s2(b).sid + + i:=i+1; + + if delta != 0 then + + changed_values := changed_values + 1; + + end if; -- delta != 0 + + end loop; -- while ( a <= s1.count and b <= s2.count ) + + if pagesize > 0 and changed_values > 0 then + output(' '); + output('-- End of Stats snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||round(get_seconds(d2-d1), 1)); + end if; + + output(' '); + + end if; -- gather_stats = 1 + + if gather_ash = 1 then + + -- get ASH sample grouping details + g_ash_columns := nvl( getopt('&snapper_options', 'ash=' ), g_ash_columns ); + + -- optional additional ASH groupings + g_ash_columns1 := case when getopt('&snapper_options', 'ash1' ) is null then null when getopt('&snapper_options', 'ash1' ) = chr(0) then g_ash_columns1 else getopt('&snapper_options', 'ash1=' ) end; + g_ash_columns2 := case when getopt('&snapper_options', 'ash2' ) is null then null when getopt('&snapper_options', 'ash2' ) = chr(0) then g_ash_columns2 else getopt('&snapper_options', 'ash2=' ) end; + g_ash_columns3 := case when getopt('&snapper_options', 'ash3' ) is null then null when getopt('&snapper_options', 'ash3' ) = chr(0) then g_ash_columns3 else getopt('&snapper_options', 'ash3=' ) end; + g_ash_columns4 := case when getopt('&snapper_options', 'ash4' ) is null then null when getopt('&snapper_options', 'ash4' ) = chr(0) then g_ash_columns4 else getopt('&snapper_options', 'ash4=' ) end; + g_ash_columns5 := case when getopt('&snapper_options', 'ash5' ) is null then null when getopt('&snapper_options', 'ash5' ) = chr(0) then g_ash_columns5 else getopt('&snapper_options', 'ash5=' ) end; + g_ash_columns6 := case when getopt('&snapper_options', 'ash6' ) is null then null when getopt('&snapper_options', 'ash6' ) = chr(0) then g_ash_columns6 else getopt('&snapper_options', 'ash6=' ) end; + + -- group ASH records and print report + top_n := nvl( getopt('&snapper_options', 'topn=' ), 10 ); + out_ash( g_ash_columns, top_n ); + -- group and print optional ASH reports + if g_ash_columns1 is not null then out_ash( g_ash_columns1, top_n ); end if; + if g_ash_columns2 is not null then out_ash( g_ash_columns2, top_n ); end if; + if g_ash_columns3 is not null then out_ash( g_ash_columns3, top_n ); end if; + if g_ash_columns4 is not null then out_ash( g_ash_columns4, top_n ); end if; + if g_ash_columns5 is not null then out_ash( g_ash_columns5, top_n ); end if; + if g_ash_columns6 is not null then out_ash( g_ash_columns6, top_n ); end if; + + + if pagesize > 0 then + output(' '); + output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken||', AAS='||CASE WHEN g_ash_samples_taken = 0 THEN '(No ASH sampling in begin/end snapshot mode)' ELSE TO_CHAR(ROUND(g_ash.COUNT/NULLIF(g_ash_samples_taken,0),1)) END ); + --output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken||', AAS='||TO_CHAR(ROUND(g_ash.COUNT/g_ash_samples_taken,1))||', Active%='||TO_CHAR(ROUND(g_ash.COUNT/g_ash_samples_taken*100,1))||'%' ); + + output(' '); + end if; + + reset_ash(); + + end if; -- gather_ash = 1 + + end loop; -- for c in 1..snapper_count + + exception when others then + raise_application_error(-20000, 'Snapper: Probably bad syntax or no execute rights on SYS.DBMS_LOCK'||chr(10)||'Check http://blog.tanelpoder.com/snapper for instructions'||chr(10)||sqlerrm||chr(10)||'Stack Trace:'||chr(10)||dbms_utility.format_error_backtrace); + +end; +/ + +undefine snapper_sleep +undefine snapper_count +undefine snapper_sid +undefine ssid_begin +undefine _IF_ORA12_OR_HIGHER +undefine _IF_ORA11_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11 +undefine _IF_LOWER_THAN_ORA12 +undefine _NO_BLK_INST +undefine _YES_BLK_INST +undefine _NO_PLSQL_OBJ_ID +undefine _YES_PLSQL_OBJ_ID +undefine _IF_DBMS_SYSTEM_ACCESSIBLE +undefine _IF_X_ACCESSIBLE +undefine _MANUAL_SNAPSHOT +undefine _USE_DBMS_LOCK +col snapper_ora12higher clear +col snapper_ora12lower clear +col snapper_ora11higher clear +col snapper_ora11lower clear +col dbms_system_accessible clear +col x_accessible clear +col no_plsql_obj_id clear +col yes_plsql_obj_id clear +col no_blk_inst clear +col yes_blk_inst clear +col manual_snapshot clear +col use_dbms_lock clear +col snapper_sid clear +col sid_filter clear +col inst_filter clear + +set serveroutput off + diff --git a/vdh/snapper4.sql b/vdh/snapper4.sql new file mode 100644 index 0000000..6700f43 --- /dev/null +++ b/vdh/snapper4.sql @@ -0,0 +1,2211 @@ +------------------------------------------------------------------------------ +-- +-- File name: snapper4.sql (Oracle Session Snapper v4) +-- Purpose: An easy to use Oracle session-level performance measurement tool +-- which does NOT require any database changes nor creation of any +-- database objects! +-- +-- This is very useful for ad-hoc performance diagnosis in environments +-- with restrictive change management processes, where creating +-- even temporary tables and PL/SQL packages is not allowed or would +-- take too much time to get approved. +-- +-- All processing is done by a few sqlplus commands and an anonymous +-- PL/SQL block, all that's needed is SQLPLUS access (and if you want +-- to output data to server-side tracefile then execute rights on +-- DBMS_SYSTEM). Snapper only queries some V$ views (and in advanced +-- mode some X$ fixed tables, but it does not enable any traces nor +-- use oradebug. +-- +-- The output is formatted the way it could be easily post-processed +-- by either Unix string manipulation tools or loaded to spreadsheet. +-- +-- Snapper v4 supports RAC and requires Oracle 10.1 or a newer DB version. +-- Snapper v3.5 works on Oracle versions starting from Oracle 9.2 (no RAC support) +-- +-- Note1: The "ASH" functionality in Snapper just samples GV$SESSION view, +-- so you do NOT need Diagnostics Pack licenses to use Snapper's +-- "ASH" output +-- +-- Note2: Snapper just reports you performance metric deltas in a snapsphot +-- and does not attempt to solve any performance problems for you. +-- You still need to interpret and understand these standard Oracle +-- metrics yourself +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- Copyright: (c) Tanel Poder - http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", so no warranties or guarantees are +-- made about its correctness, reliability and safety. Use it at your +-- own risk! +-- +-- License: 1) You may use this script for your (or your businesses) purposes for free +-- 2) You may modify this script as you like for your own (or your businesses) purpose, +-- but you must always leave this script header (the entire comment section), including the +-- author, copyright and license sections as the first thing in the beginning of this file +-- 3) You may NOT publish or distribute this script or any variation of it PUBLICLY +-- (including, but not limited to uploading it to your public website or ftp server), +-- instead just link to its location in blog.tanelpoder.com +-- 4) You may distribute this script INTERNALLY in your company, for internal use only, +-- for example when building a standard DBA toolset to be deployed to all +-- servers or DBA workstations +-- +-- +-- Thanks to: Adrian Billington, Jamey Johnston, Marcus Mönnig, Hans-Peter Sloot +-- and Ronald Rood for bugfixes, additions and improvements +-- +-------------------------------------------------------------------------------- +-- +-- The Session Snapper v4.09 BETA ( USE AT YOUR OWN RISK !!! ) +-- (c) Tanel Poder ( http://blog.tanelpoder.com ) +-- +-- +-- +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a cheap ASCII +-- / imitation of a fish and a fishing rod. +-- | Nevertheless the PL/SQL code below the +-- | fish itself should be helpful for quick +-- | catching of relevant Oracle performance +-- | information. +-- | So I wish you happy... um... snapping? +-- | ) +-- | ...... +-- | iittii,,.... +-- ¿ iiffffjjjjtttt,, +-- ..;;ttffLLLLffLLLLLLffjjtt;;.. +-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,, +-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;.... +-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;.. +-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,, +-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;.. +-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii.. +-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;.. +-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,, +-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii.. +-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;.. +-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;; +-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;.. +-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. .... +-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii.. +-- ..;;ttttii;;.... ..;;;;.... +-- ..iiii;;.. +-- ..;;,, +-- .... +-- +-- +-- Usage: +-- +-- snapper.sql [,out][,trace][,pagesize=X][,gather=[s][t][w][l][e][b][a]]> +-- +-- ash - sample session activity ASH style, waits and SQL_IDs from gv$session and +-- print a TOP SQL/wait report from these samples (this is the default from +-- Snapper 3.0). The columns chosen for TOP calculation are defined in CONFIG +-- section below. +-- +-- ash=sql_id+event+wait_class +-- - the above example illustrates that you can also specify the gv$session +-- columns for TOP report yourself. The above example will show a TOP +-- activity report grouped by SQL_ID + EVENT + WAIT_CLASS +-- Note that the columns are separated by a "+" sign (as comma is a snapper +-- parameter separator, not ASH column separator) +-- +-- ash1 +-- ash2 +-- ash3 - in addition to "ash" report you can have 3 more reported during the same +-- snapper sampling snapshot. Just include ash1=col1+col2,ash2=col3+col4,... +-- parameters if you want multiple TOP reports per Snapper snapshot +-- +-- stats - sample gv$sesstat,gv$sess_time_model,gv$session_event performance counters +-- and report how much these stats increased (deltas) during Snapper run +-- all - report both ASH and stats sections +-- +-- out - use dbms_output.put_line() for output. output will be seen only when +-- Snapper run completes due to dbms_output limitations. This is the default. +-- trace - write output to server process tracefile +-- (you must have execute permission on sys.dbms_system.ksdwrt() for that, +-- you can use both out and trace parameters together if you like ) +-- +-- pagesize - display header lines after X snapshots. if pagesize=0 don't display +-- any headers. pagesize=-1 will display a terse header only once +-- +-- gather - if omitted, gathers s,t,w statistics (see below) +-- - if specified, then gather following: +-- +-- Session-level stats: +-- s - Session Statistics from gv$sesstat +-- t - Session Time model info from gv$sess_time_model +-- w - Session Wait statistics from gv$session_event and gv$session_wait +-- +-- Instance-level stats: +-- l - instance Latch get statistics ( gets + immediate_gets ) +-- e - instance Enqueue lock get statistics +-- b - buffer get Where statistics -- useful in versions up to 10.2.x +-- a - All above +-- +-- sinclude - if specified, then show only GV$SESSTAT stats which match the +-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+) +-- linclude - if specified, then show only GV$LATCH latch stats which match the +-- LIKE pattern of linclude (REGEXP_LIKE in 10g+) +-- tinclude - if specified, then show only GV$SESS_TIME_MODEL stats which match the +-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+) +-- winclude - if specified, then show only GV$SESSION_EVENT wait stats which match the +-- LIKE pattern of winclude (REGEXP_LIKE in 10g+) +-- +-- you can combine above parameters in any order, separate them by commas +-- !!!don't use spaces as otherwise they are treated as next parameters by sqlplus !!! +-- !!!if you want to use spaces, enclose the whole sqlplus parameter in doublequotes !!! +-- +-- - the number of seconds between taking snapshots +-- - the number of snapshots to take ( maximum value is power(2,31)-1 ) +-- +-- can be either one sessionid, multiple sessionids separated by +-- commas or a SQL statement which returns a list of SIDs (if you need spaces +-- in that parameter text, enclose it in double quotes). +-- +-- if you want to snap ALL sids, use "all" as value for +-- parameter +-- +-- alternatively you can used "select sid from gv$session" as value for +-- parameter to capture all SIDs. you can write any query (with multiple and/or) +-- conditions to specify complex rules for capturing only the SIDs you want +-- +-- starting from version 3.0 there are further session_id selection options available in +-- instead of sid you can write such expressions for snapper's parameter: +-- +-- sid=123 -- take sid 123 only (the same as just writing 123) +-- user=tanel -- take all sessions where username is 'tanel' (case insensitive) +-- -- this is the same as writing following subquery for the +-- -- parameter: +-- select sid from gv$session where lower(username) like lower('tanel') +-- +-- user=tanel% -- take all sessions where username begins with 'tanel%' (case insensitive) +-- -- the = means actually LIKE in SQL terms in this script +-- +-- spid=1234 -- all these 3 parameters do the same thing: +-- ospid=1234 -- they look up the sessions(s) where the processes OS PID=1234 +-- pid=1234 -- this is useful for quickly looking up what some OS process is doing +-- -- if it consumes too much of some resource +-- qc=123 +-- qcsid=123 -- show query coordinator and all PX slave sessions +-- +-- program=sqlplus% -- the following examples filter by corresponding gv$session coulmns +-- machine=linux01 -- machine +-- osuser=oracle -- os username +-- module=HR -- module +-- "action=Find Order" -- note the quotes because there is a space inside the parameter +-- -- value +-- client_id=tanelpoder -- show only sessions where client_identifier is set to tanelpoder +-- -- this is very useful in cases with (properly instrumented) +-- -- connection pools +-- +-- +-- Note that if you want to change some "advanced" snapper configuration parameters +-- or default values then search for CONFIG in this file to see configurable +-- variable section +-- +-- +-- Examples: +-- NB! Read the online examples, these are more detailed and list script output too! +-- +-- http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper +-- +-- @snapper ash,stats 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- Wait, gv$sesstat and gv$sess_time_model statistics are reported by default +-- Starting from V3 the ASH style session activity report is shown as well) +-- +-- @snapper stats,gather=w 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only Wait event statistics are reported, no ASH) +-- +-- @snapper ash,gather=st 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only gv$sesstat and gv$sess_Time_model statistics are gathered + ASH) +-- +-- @snapper trace,ash,gather=stw,pagesize=0 10 90 117,210,313 +-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313 +-- all statistics are reported, do not print any headers) +-- +-- @snapper trace,ash 900 999999999 "select sid from v$session" +-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace, +-- loop (almost) forever ) +-- +-- @snapper out,trace 300 12 "select sid from v$session where username='APPS'" +-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write +-- output to both dbms_output and tracefile) +-- +-- Notes: +-- +-- Snapper does not currently detect if a session with given SID has +-- ended and been recreated between snapshots, thus it may report bogus +-- statistics for such sessions. The check and warning for that will be +-- implemented in a future version. +-- +-------------------------------------------------------------------------------- + +set termout off tab off verify off linesize 999 trimspool on trimout on null "" + +--debug: +-- set termout on serveroutput on + +-- Get parameters (future snapper v4.x extended syntax: @snapper <"begin"|"end"|sleep#> <"snap_name"|snap_count> ) +define snapper_options="&1" +define snapper_sleep="&2" +define snapper_count="&3" +define snapper_sid="&4" + + +-- The following code is required for making this script "dynamic" as due to +-- different Oracle versions, script parameters or granted privileges some +-- statements might not compile if not adjusted properly. + +define _IF_ORA11_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA11="--" +define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" +-- /*dummy*/ -- this "dummy" is here just for avoiding VIM syntax highlighter going crazy due to previous line +define _IF_X_ACCESSIBLE="--" + +-- plsql_object_id columns available in v$session (from 10.2.0.3) +define _YES_PLSQL_OBJ_ID="--" +define _NO_PLSQL_OBJ_ID="" +-- blocking_instance available in v$session (from 10.2) +define _YES_BLK_INST="--" +define _NO_BLK_INST="" + +-- snapper v4 manual before/after snapshotting +define _MANUAL_SNAPSHOT="--" +define _USE_DBMS_LOCK="" + +-- set the noprint's value to "noprint" if you don't want these temporary variables to show up in a sqlplus spool file +DEF noprint="" +col snapper_ora11higher &noprint new_value _IF_ORA11_OR_HIGHER +col snapper_ora11lower &noprint new_value _IF_LOWER_THAN_ORA11 +col dbms_system_accessible &noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLE +col x_accessible &noprint new_value _IF_X_ACCESSIBLE +col no_plsql_obj_id &noprint new_value _NO_PLSQL_OBJ_ID +col yes_plsql_obj_id &noprint new_value _YES_PLSQL_OBJ_ID +col no_blk_inst &noprint new_value _NO_BLK_INST +col yes_blk_inst &noprint new_value _YES_BLK_INST +col manual_snapshot &noprint new_value _MANUAL_SNAPSHOT +col use_dbms_lock &noprint new_value _USE_DBMS_LOCK + +col snapper_sid &noprint new_value snapper_sid + +-- sid_filter and inst_filter are the new RAC gv$ friendly way to filter sessions in Snapper v4 +def sid_filter="/**/" +def inst_filter="/**/" +col sid_filter &noprint new_value sid_filter +col inst_filter &noprint new_value inst_filter + + +-- initialize, precompute and determine stuff +var v varchar2(100) +var x varchar2(10) +var sid_filter varchar2(4000) +var inst_filter varchar2(4000) + +-- this is here for a reason +-- im extracting the first word of the snapper_sid (if its a complex expression, not just a single SID) +-- by relying on how DEF and & assignment treat spaces in strings +def ssid_begin=&snapper_sid + +declare + + o sys.dbms_describe.number_table; + p sys.dbms_describe.number_table; + l sys.dbms_describe.number_table; + a sys.dbms_describe.varchar2_table; + dty sys.dbms_describe.number_table; + def sys.dbms_describe.number_table; + inout sys.dbms_describe.number_table; + len sys.dbms_describe.number_table; + prec sys.dbms_describe.number_table; + scal sys.dbms_describe.number_table; + rad sys.dbms_describe.number_table; + spa sys.dbms_describe.number_table; + + tmp number; + lv_sid_filter varchar2(4000); + lv_inst_filter varchar2(4000); + + function get_filter(str in varchar2) return varchar2 + is + ret varchar2(1000); + begin + if str like '%@%' then + --dbms_output.put_line('get_filter:1 str= '||str); + ret := lower(trim(regexp_replace(substr(str,instr(str,'=')+1), '^(.+)@([[:digit:]\*]+)(.*)', '\1'))); + else + --dbms_output.put_line('get_filter:2 str= '||str); + ret := lower(trim(substr(str,instr(str,'=')+1))); + end if; + --dbms_output.put_line('get_filter = ' || ret); + return ret; + end get_filter; + +begin + -- compute inst_filter + case + when regexp_instr('&ssid_begin','@') = 0 then + lv_inst_filter := '/* inst_filter */ s.inst_id=USERENV(''Instance'')'; + when regexp_instr('&ssid_begin','@\*') > 0 or '&ssid_begin' like '(%' then + lv_inst_filter := '/* inst_filter */ 1=1'; + when regexp_instr('&ssid_begin','@\d+') > 0 then + lv_inst_filter := 's.inst_id = ' || regexp_replace('&ssid_begin', '^(.+)@(\d+)(.*)', '\2'); + else + lv_inst_filter := 's.inst_id=USERENV(''Instance'')'; + --when regexp_instr('&ssid_begin','@\d+') > 0 then regexp_replace(snapper_sid, '^(.+)@\d+', '\1') || ' AND inst_id = ' || regexp_replace(snapper_sid, '^(.+)@(\d+)(.*)', '\2') + end case; + + -- compute sid_filter + case + when trim(lower('&ssid_begin')) like 'sid=%' then lv_sid_filter := 's.sid in ('||get_filter('&ssid_begin')||')'; --||trim(replace('&ssid_begin','sid=',''))||')'; + when trim(lower('&ssid_begin')) like 'user=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'username=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'machine=%' then lv_sid_filter := 'lower(machine) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'program=%' then lv_sid_filter := 'lower(program) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'service=%' then lv_sid_filter := 'lower(service_name) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'module=%' then lv_sid_filter := 'lower(module) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'action=%' then lv_sid_filter := 'lower(action) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'osuser=%' then lv_sid_filter := 'lower(osuser) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'client_id=%' then lv_sid_filter := 'lower(client_identifier) like '''||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'spid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'ospid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'pid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ NO_UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qcsid=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qc=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'all%' then lv_sid_filter := '1=1'; + when trim(lower('&ssid_begin')) like 'bg%' then lv_sid_filter := 'type=''BACKGROUND'''; + when trim(lower('&ssid_begin')) like 'fg%' then lv_sid_filter := 'type=''USER'''; + when trim(lower('&ssid_begin')) like 'smon%' then lv_sid_filter := 'program like ''%(SMON)%'''; + when trim(lower('&ssid_begin')) like 'pmon%' then lv_sid_filter := 'program like ''%(PMON)%'''; + when trim(lower('&ssid_begin')) like 'ckpt%' then lv_sid_filter := 'program like ''%(CKPT)%'''; + when trim(lower('&ssid_begin')) like 'lgwr%' then lv_sid_filter := 'program like ''%(LGWR)%'''; + when trim(lower('&ssid_begin')) like 'dbwr%' then lv_sid_filter := 'program like ''%(DBW%)%'''; + when trim(lower('&ssid_begin')) like 'select%' then /*lv_inst_filter := '/* inst_filter2 1=1'; */ lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; + --when trim(lower('&ssid_begin')) like 'select%' then lv_sid_filter := '(s.inst_id,s.sid) in ('||regexp_replace(replace(q'{&snapper_sid}','',''''''), '^select ', 'select /*+ unnest */ ', 1, 1, 'i')||')'; -- '1=1'; lv_inst_filter := '1=1'; + --when trim(lower('&ssid_begin')) like 'with%' then lv_sid_filter := '(s.inst_id,s.sid) in (&snapper_sid)'; -- '1=1'; lv_inst_filter := '1=1'; + when trim(lower('&ssid_begin')) like '(%' then lv_inst_filter := '/* inst_filter2 */ 1=1'; lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; -- '1=1'; lv_inst_filter := '1=1'; + else lv_sid_filter := '/* sid_filter_else_cond */ s.sid in ('||get_filter('&ssid_begin')||')'; --lv_sid_filter := '/* sid_filter_else_cond */ s.sid in (&ssid_begin)'; + end case; + + :inst_filter := lv_inst_filter; + :sid_filter := lv_inst_filter||' and '||lv_sid_filter; + + -- this block determines whether dbms_system.ksdwrt is accessible to us + -- dbms_describe is required as all_procedures/all_objects may show this object + -- even if its not executable by us (thanks to o7_dictionary_accessibility=false) + begin + execute immediate 'select count(*) from x$kcbwh where rownum = 1' into tmp; + :x:= ' '; -- x$ tables are accessible, so dont comment any lines out + exception + when others then null; + end; + + sys.dbms_describe.describe_procedure( + 'DBMS_SYSTEM.KSDWRT', null, null, + o, p, l, a, dty, def, inout, len, prec, scal, rad, spa + ); + + -- we never get to following statement if dbms_system is not accessible + -- as sys.dbms_describe will raise an exception + :v:= '-- dbms_system is accessible'; + +exception + when others then null; +end; +/ + +-- this query populates some sqlplus variables required for dynamic compilation used below +with mod_banner as ( + select + replace(banner,'9.','09.') banner + from + v$version + where rownum = 1 +) +select + decode(substr(banner, instr(banner, 'Release ')+8,2), '09', '--', '') snapper_ora10lower, + decode(substr(banner, instr(banner, 'Release ')+8,2), '09', '', '--') snapper_ora9, + decode(substr(banner, instr(banner, 'Release ')+8,1), '1', '', '--') snapper_ora10higher, + case when substr(banner, instr(banner, 'Release ')+8,2) >= '11' then '' else '--' end snapper_ora11higher, + case when substr(banner, instr(banner, 'Release ')+8,2) < '11' then '' else '--' end snapper_ora11lower, + nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible, + nvl(:x, '--') x_accessible, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '' else '--' end yes_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '--' else '' end no_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '' else '--' end yes_plsql_obj_id, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '--' else '' end no_plsql_obj_id, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '' else '--' end manual_snapshot, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '--' else '' end use_dbms_lock, + :sid_filter sid_filter, + :inst_filter inst_filter +from + mod_banner +/ + +set termout on serveroutput on size 1000000 format wrapped + +prompt Sampling SID &4 with interval &snapper_sleep seconds, taking &snapper_count snapshots... + +-- let the Snapping start!!! +-- main() +declare + -- Snapper start + -- forward declarations + procedure output(p_txt in varchar2); + procedure fout; + + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, + p_grouplen in number default 3 + ) + return varchar2; + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) + return varchar2; + + + -- type, constant, variable declarations + + -- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_INTEGER + pls_adjust constant number(10,0) := power(2,31) - 1; + + type srec is record (ts timestamp, stype varchar2(4), inst_id number, sid number, statistic# number, value number, event_count number ); + type stab is table of srec index by pls_integer; + type ltab is table of srec index by varchar2(100); -- lookup tab for various average calculation + s1 stab; + s2 stab; + l1 ltab; + l2 ltab; + + type snrec is record (stype varchar2(4), statistic# number, name varchar2(100)); + type sntab is table of snrec index by pls_integer; + sn_tmp sntab; + sn sntab; + + type sntab_reverse is table of snrec index by varchar2(100); -- used for looking up stat id from stat name + sn_reverse sntab_reverse; + + tmp_varchar2 varchar2(1000); -- misc + + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2; + + type tmp_sestab is table of gv$session%rowtype index by pls_integer; + type sestab is table of gv$session%rowtype index by varchar2(20); + + g_sessions sestab; + g_empty_sessions sestab; + + type hc_tab is table of number index by pls_integer; -- index is sql hash value + type ses_hash_tab is table of hc_tab index by pls_integer; -- index is SID + + g_ses_hash_tab ses_hash_tab; + g_empty_ses_hash_tab ses_hash_tab; + + -- dbms_debug_vc2coll is a built-in collection present in every oracle db + g_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_empty_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_snap1 sys.dbms_debug_vc2coll; + g_snap2 sys.dbms_debug_vc2coll; + + g_ash_samples_taken number := 0; + + g_count_statname number; + g_count_eventname number; + + g_mysid number; + + i number; + a number; + b number; + + c number; + delta number; + evcnt number; + changed_values number; + pagesize number:=99999999999999; + missing_values_s1 number := 0; + missing_values_s2 number := 0; + disappeared_sid number := 0; + lv_curr_sid number := 0; -- used for determining whether to print an empty line between session stats + d1 timestamp(6); + d2 timestamp(6); + ash_date1 date; + ash_date2 date; + lv_gather varchar2(1000); + gv_header_string varchar2(1000); + lv_data_string varchar2(1000); + + lv_ash varchar2(1000); + lv_stats varchar2(1000); + + gather_stats number := 0; + gather_ash number := 0; + + g_snap_begin varchar2(1000); + g_snap_end varchar2(1000); + + -- CONFIGURABLE STUFF -- + + -- this sets what are the default ash sample TOP reporting group by columns + g_ash_columns varchar2(1000) := 'inst_id + sql_id + sql_child_number + event + wait_class'; + g_ash_columns1 varchar2(1000) := 'inst_id + event + p1 + wait_class'; + g_ash_columns2 varchar2(1000) := 'inst_id + sid + user + machine + program'; + g_ash_columns3 varchar2(1000) := 'inst_id + plsql_object_id + plsql_subprogram_id + sql_id'; + + -- output column configuration + output_header number := 0; -- 1=true 0=false + output_username number := 1; -- v$session.username + output_inst number := 0; -- inst + output_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 0 ELSE 1 END; -- just sid + output_inst_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 1 ELSE 0 END; -- inst_id and sid together + output_time number := 0; -- time of snapshot start + output_seconds number := 0; -- seconds in snapshot (shown in footer of each snapshot too) + output_stype number := 1; -- statistic type (WAIT,STAT,TIME,ENQG,LATG,...) + output_sname number := 1; -- statistic name + output_delta number := 1; -- raw delta + output_delta_s number := 0; -- raw delta normalized to per second + output_hdelta number := 0; -- human readable delta + output_hdelta_s number := 1; -- human readable delta normalized to per second + output_percent number := 1; -- percent of total time/samples + output_eventcnt number := 1; -- wait event count + output_eventcnt_s number := 1; -- wait event count + output_eventavg number := 1; -- average wait duration + output_pcthist number := 1; -- percent of total visual bar (histogram) -- Histograms seem to work for me on 9.2.0.7 + - JBJ2) + + -- column widths in ASH report output + w_inst_id number := 4; + w_sid number := 6; + w_username number := 20; + w_machine number := 20; + w_terminal number := 20; + w_program number := 25; + w_event number := 35; + w_wait_class number := 15; + w_state number := 8; + w_p1 number := 20; + w_p2 number := 20; + w_p3 number := 20; + w_row_wait_obj# number := 10; + w_row_wait_file# number := 6; + w_row_wait_block# number := 10; + w_row_wait_row# number := 6; + w_blocking_session_status number := 15; + w_blocking_instance number := 12; + w_blocking_session number := 12; + w_sql_hash_value number := 12; + w_sql_id number := 15; + w_sql_child_number number := 9; + w_plsql_entry_object_id number := 10; + w_plsql_entry_subprogram_id number := 10; + w_plsql_object_id number := 10; + w_plsql_subprogram_id number := 10; + w_module number := 25; + w_action number := 25; + w_client_identifier number := 25; + w_service_name number := 25; + + w_activity_pct number := 7; + + -- END CONFIGURABLE STUFF -- + + -- constants for ash collection extraction from the vc2 collection + s_inst_id constant number := 1 ; + s_sid constant number := 2 ; + s_username constant number := 3 ; + s_machine constant number := 4 ; + s_terminal constant number := 5 ; + s_program constant number := 6 ; + s_event constant number := 7 ; + s_wait_class constant number := 8 ; + s_state constant number := 9 ; + s_p1 constant number := 10 ; + s_p2 constant number := 11 ; + s_p3 constant number := 12 ; + s_row_wait_obj# constant number := 13 ; + s_row_wait_file# constant number := 14 ; + s_row_wait_block# constant number := 15 ; + s_row_wait_row# constant number := 16 ; + s_blocking_session_status constant number := 17 ; + s_blocking_instance constant number := 18 ; + s_blocking_session constant number := 19 ; + s_sql_hash_value constant number := 20 ; + s_sql_id constant number := 21 ; + s_sql_child_number constant number := 22 ; + s_plsql_entry_object_id constant number := 23 ; + s_plsql_entry_subprogram_id constant number := 24 ; + s_plsql_object_id constant number := 25 ; + s_plsql_subprogram_id constant number := 26 ; + s_module constant number := 27 ; + s_action constant number := 28 ; + s_client_identifier constant number := 29 ; + s_service_name constant number := 30 ; + + -- constants for ash collection reporting, which columns to show in report + c_inst_id constant number := power(2, s_inst_id ); + c_sid constant number := power(2, s_sid ); + c_username constant number := power(2, s_username ); + c_machine constant number := power(2, s_machine ); + c_terminal constant number := power(2, s_terminal ); + c_program constant number := power(2, s_program ); + c_event constant number := power(2, s_event ); + c_wait_class constant number := power(2, s_wait_class ); + c_state constant number := power(2, s_state ); + c_p1 constant number := power(2, s_p1 ); + c_p2 constant number := power(2, s_p2 ); + c_p3 constant number := power(2, s_p3 ); + c_row_wait_obj# constant number := power(2, s_row_wait_obj# ); + c_row_wait_file# constant number := power(2, s_row_wait_file# ); + c_row_wait_block# constant number := power(2, s_row_wait_block# ); + c_row_wait_row# constant number := power(2, s_row_wait_row# ); + c_blocking_session_status constant number := power(2, s_blocking_session_status ); + c_blocking_instance constant number := power(2, s_blocking_instance ); + c_blocking_session constant number := power(2, s_blocking_session ); + c_sql_hash_value constant number := power(2, s_sql_hash_value ); + c_sql_id constant number := power(2, s_sql_id ); + c_sql_child_number constant number := power(2, s_sql_child_number ); + c_plsql_entry_object_id constant number := power(2, s_plsql_entry_object_id ); + c_plsql_entry_subprogram_id constant number := power(2, s_plsql_entry_subprogram_id); + c_plsql_object_id constant number := power(2, s_plsql_object_id ); + c_plsql_subprogram_id constant number := power(2, s_plsql_subprogram_id ); + c_module constant number := power(2, s_module ); + c_action constant number := power(2, s_action ); + c_client_identifier constant number := power(2, s_client_identifier ); + c_service_name constant number := power(2, s_service_name ); + + + /*--------------------------------------------------- + -- proc for outputting data to trace or dbms_output + ---------------------------------------------------*/ + procedure output(p_txt in varchar2) is + begin + + if (getopt('&snapper_options', 'out') is not null) + or + (getopt('&snapper_options', 'out') is null and getopt('&snapper_options', 'trace') is null) + then + dbms_output.put_line(p_txt); + end if; + + -- The block below is a sqlplus trick for conditionally commenting out PL/SQL code + &_IF_DBMS_SYSTEM_ACCESSIBLE + if getopt('&snapper_options', 'trace') is not null then + sys.dbms_system.ksdwrt(1, p_txt); + sys.dbms_system.ksdfls; + end if; + -- */ + end; -- output + + /*--------------------------------------------------- + -- function for converting interval datatype to microseconds + ---------------------------------------------------*/ + function get_seconds(i interval day to second) return number + as + begin + return to_number(extract(second from i)) + + to_number(extract(minute from i)) * 60 + + to_number(extract(hour from i)) * 60 * 60 + + to_number(extract(day from i)) * 60 * 60 * 24; + end get_seconds; + + /*--------------------------------------------------- + -- proc for outputting data, utilizing global vars + ---------------------------------------------------*/ + procedure fout is + l_output_username VARCHAR2(100); + gsid varchar2(20); + begin + --if s2(b).stype='WAIT' then output( 'DEBUG WAIT ' || sn(s2(b).statistic#).name || ' ' || delta ); end if; + --output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# ); + --output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + gsid := trim(to_char(s2(b).inst_id))||','||trim(to_char(s2(b).sid)); + + if output_username = 1 then + begin + l_output_username := nvl( g_sessions(gsid).username, substr(g_sessions(gsid).program, instr(g_sessions(gsid).program,'(')) ); + exception + when no_data_found then l_output_username := 'error'; + when others then raise; + end; + end if; + + -- DEBUG + --output('before'); + --output (CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END); + --output('after'); + + output( CASE WHEN output_header = 1 THEN 'SID= ' END + || CASE WHEN output_inst = 1 THEN to_char(s2(b).inst_id, '9999')||', ' END + || CASE WHEN output_sid = 1 THEN to_char(s2(b).sid,'999999')||', ' END + || CASE WHEN output_inst_sid = 1 THEN to_char(s2(b).sid,'99999')||' '||lpad('@'||trim(to_char(s2(b).inst_id, '99')),3)||', ' END + || CASE WHEN output_username = 1 THEN rpad(CASE s2(b).sid WHEN -1 THEN ' ' ELSE NVL(l_output_username, ' ') END, 10)||', ' END + || CASE WHEN output_time = 1 THEN to_char(d1, 'YYYYMMDD HH24:MI:SS')||', ' END + || CASE WHEN output_seconds = 1 THEN to_char(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end, '9999999')||', ' END + || CASE WHEN output_stype = 1 THEN s2(b).stype||', ' END + || CASE WHEN output_sname = 1 THEN rpad(sn(s2(b).statistic#).name, 58, ' ')||', ' END + || CASE WHEN output_delta = 1 THEN to_char(delta, '999999999999')||', ' END + || CASE WHEN output_delta_s = 1 THEN to_char(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end),'999999999')||', ' END + || CASE WHEN output_hdelta = 1 THEN lpad(tptformat(delta, s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_hdelta_s = 1 THEN lpad(tptformat(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_percent = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN to_char(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 10000, '9999.9')||'%' ELSE ' ' END END||', ' + || CASE WHEN output_pcthist = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN rpad(rpad('[', ceil(round(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 100000,1))+1, CASE WHEN s2(b).stype IN ('WAIT') THEN 'W' WHEN sn(s2(b).statistic#).name = 'DB CPU' THEN '@' ELSE '#' END),11,' ')||']' ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN to_char(evcnt, '99999999') ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt_s = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat((evcnt / case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), 'STAT' ), 10, ' ') ELSE ' ' END END||', ' + || CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END + ); + + end; + + + /*--------------------------------------------------- + -- lookup stat delta helper calculator (l2.value - l1.value) + ---------------------------------------------------*/ + function get_delta(metric_id in varchar2) return number + is + rec1 srec; + rec2 srec; + + val1 number; + val2 number; + + d number; + begin + begin + val1 := l1(metric_id).value; + exception + when no_data_found then val1 := 0; + end; + + begin + val2 := l2(metric_id).value; + exception + when no_data_found then val2 := 0; + end; + + d := val2 - NVL(val1, 0); + return d; + end get_delta; + + /*--------------------------------------------------- + -- delta helper function for convenience - it allows to specify any metric delta, if not specified then get current one + ---------------------------------------------------*/ + function gd(c in srec, metric_type in varchar2 DEFAULT NULL, metric_name in varchar2 DEFAULT NULL) return number + is + str varchar2(1000); + tmp_delta number; + begin + if metric_type || metric_name is null then + str := c.stype||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(c.statistic#,'999999999999999999999999')); + else + begin + str := trim(metric_type)||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(sn_reverse(metric_type||','||metric_name).statistic#)); + exception + when no_data_found then return 0; + end; + end if; + tmp_delta := get_delta(str); + --output('tmp_delta '||c.stype||' '||tmp_delta); + return tmp_delta; + -- return get_delta(str); + end; + + /*--------------------------------------------------- + -- function for calculating useful averages and ratios between metrics + ---------------------------------------------------*/ + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2 + is + ret varchar2(1000); + mt varchar2(100) := c.stype; -- metric_type + mn varchar2(100) := sn(c.statistic#).name; -- metric_name + begin + case + when mt = 'STAT' then + case + when mn = 'bytes sent via SQL*Net to client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes receive via SQL*Net from client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'redo size' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'user commits' ),0), mt), 10) || ' bytes per user commit'; + when mn = 'execute count' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (total)' ),0), mt), 10) || ' executions per parse'; + when mn = 'parse count (total)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (hard)' ),0), mt), 10) || ' softparses per hardparse'; + when mn = 'session cursor cache hits' then ret := lpad( tptformat(gd(c) - (gd(c, 'STAT', 'parse count (total)' ) ), mt), 10) || ' softparses avoided thanks to cursor cache'; + when mn = 'session logical reads' then ret := lpad( tptformat(gd(c) + (gd(c, 'STAT', 'buffer is pinned count' ) ), mt), 10) || ' total buffer visits'; + when mn = 'buffer is pinned count' then ret := lpad( tptformat(gd(c) / nullif(gd(c) + gd(c, 'STAT', 'session logical reads'),0) * 100, mt), 10) || ' % buffer gets avoided thanks to buffer pin caching'; + else ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'execute count'),0), mt), 10) || ' per execution' ; + end case; -- mt=stat, mn + when mt = 'TIME' then + -- this is ugly and wrong at the moment - will refactor some day + case + when mn = 'DB time' then ret := lpad(tptformat(get_seconds(d2 - d1)*1000000 - gd(c) - nullif(gd(c, 'DB CPU', 'TIME') + - gd(c, 'WAIT', 'pmon timer') + - gd(c, 'WAIT', 'VKTM Logical Idle Wait') + - gd(c, 'WAIT', 'VKTM Init Wait for GSGA') + - gd(c, 'WAIT', 'IORM Scheduler Slave Idle Wait') + - gd(c, 'WAIT', 'rdbms ipc message') + - gd(c, 'WAIT', 'i/o slave wait') + - gd(c, 'WAIT', 'VKRM Idle') + - gd(c, 'WAIT', 'wait for unread message on broadcast channel') + - gd(c, 'WAIT', 'wait for unread message on multiple broadcast channels') + - gd(c, 'WAIT', 'class slave wait') + - gd(c, 'WAIT', 'KSV master wait') + - gd(c, 'WAIT', 'PING') + - gd(c, 'WAIT', 'watchdog main loop') + - gd(c, 'WAIT', 'DIAG idle wait') + - gd(c, 'WAIT', 'ges remote message') + - gd(c, 'WAIT', 'gcs remote message') + - gd(c, 'WAIT', 'heartbeat monitor sleep') + - gd(c, 'WAIT', 'GCR sleep') + - gd(c, 'WAIT', 'SGA: MMAN sleep for component shrink') + - gd(c, 'WAIT', 'MRP redo arrival') + - gd(c, 'WAIT', 'LNS ASYNC archive log') + - gd(c, 'WAIT', 'LNS ASYNC dest activation') + - gd(c, 'WAIT', 'LNS ASYNC end of log') + - gd(c, 'WAIT', 'simulated log write delay') + - gd(c, 'WAIT', 'LGWR real time apply sync') + - gd(c, 'WAIT', 'parallel recovery slave idle wait') + - gd(c, 'WAIT', 'LogMiner builder: idle') + - gd(c, 'WAIT', 'LogMiner builder: branch') + - gd(c, 'WAIT', 'LogMiner preparer: idle') + - gd(c, 'WAIT', 'LogMiner reader: log (idle)') + - gd(c, 'WAIT', 'LogMiner reader: redo (idle)') + - gd(c, 'WAIT', 'LogMiner client: transaction') + - gd(c, 'WAIT', 'LogMiner: other') + - gd(c, 'WAIT', 'LogMiner: activate') + - gd(c, 'WAIT', 'LogMiner: reset') + - gd(c, 'WAIT', 'LogMiner: find session') + - gd(c, 'WAIT', 'LogMiner: internal') + - gd(c, 'WAIT', 'Logical Standby Apply Delay') + - gd(c, 'WAIT', 'parallel recovery coordinator waits for slave cleanup') + - gd(c, 'WAIT', 'parallel recovery control message reply') + - gd(c, 'WAIT', 'parallel recovery slave next change') + - gd(c, 'WAIT', 'PX Deq: Txn Recovery Start') + - gd(c, 'WAIT', 'PX Deq: Txn Recovery Reply') + - gd(c, 'WAIT', 'fbar timer') + - gd(c, 'WAIT', 'smon timer') + - gd(c, 'WAIT', 'PX Deq: Metadata Update') + - gd(c, 'WAIT', 'Space Manager: slave idle wait') + - gd(c, 'WAIT', 'PX Deq: Index Merge Reply') + - gd(c, 'WAIT', 'PX Deq: Index Merge Execute') + - gd(c, 'WAIT', 'PX Deq: Index Merge Close') + - gd(c, 'WAIT', 'PX Deq: kdcph_mai') + - gd(c, 'WAIT', 'PX Deq: kdcphc_ack') + - gd(c, 'WAIT', 'shared server idle wait') + - gd(c, 'WAIT', 'dispatcher timer') + - gd(c, 'WAIT', 'cmon timer') + - gd(c, 'WAIT', 'pool server timer') + - gd(c, 'WAIT', 'JOX Jit Process Sleep') + - gd(c, 'WAIT', 'jobq slave wait') + - gd(c, 'WAIT', 'pipe get') + - gd(c, 'WAIT', 'PX Deque wait') + - gd(c, 'WAIT', 'PX Idle Wait') + - gd(c, 'WAIT', 'PX Deq: Join ACK') + - gd(c, 'WAIT', 'PX Deq Credit: need buffer') + - gd(c, 'WAIT', 'PX Deq Credit: send blkd') + - gd(c, 'WAIT', 'PX Deq: Msg Fragment') + - gd(c, 'WAIT', 'PX Deq: Parse Reply') + - gd(c, 'WAIT', 'PX Deq: Execute Reply') + - gd(c, 'WAIT', 'PX Deq: Execution Msg') + - gd(c, 'WAIT', 'PX Deq: Table Q Normal') + - gd(c, 'WAIT', 'PX Deq: Table Q Sample') + - gd(c, 'WAIT', 'Streams fetch slave: waiting for txns') + - gd(c, 'WAIT', 'Streams: waiting for messages') + - gd(c, 'WAIT', 'Streams capture: waiting for archive log') + - gd(c, 'WAIT', 'single-task message') + - gd(c, 'WAIT', 'SQL*Net message from client') + - gd(c, 'WAIT', 'SQL*Net vector message from client') + - gd(c, 'WAIT', 'SQL*Net vector message from dblink') + - gd(c, 'WAIT', 'PL/SQL lock timer') + - gd(c, 'WAIT', 'Streams AQ: emn coordinator idle wait') + - gd(c, 'WAIT', 'EMON slave idle wait') + - gd(c, 'WAIT', 'Streams AQ: waiting for messages in the queue') + - gd(c, 'WAIT', 'Streams AQ: waiting for time management or cleanup tasks') + - gd(c, 'WAIT', 'Streams AQ: delete acknowledged messages') + - gd(c, 'WAIT', 'Streams AQ: deallocate messages from Streams Pool') + - gd(c, 'WAIT', 'Streams AQ: qmn coordinator idle wait') + - gd(c, 'WAIT', 'Streams AQ: qmn slave idle wait') + - gd(c, 'WAIT', 'Streams AQ: RAC qmn coordinator idle wait') + - gd(c, 'WAIT', 'HS message to agent') + - gd(c, 'WAIT', 'ASM background timer') + - gd(c, 'WAIT', 'auto-sqltune: wait graph update') + - gd(c, 'WAIT', 'WCR: replay client notify') + - gd(c, 'WAIT', 'WCR: replay clock') + - gd(c, 'WAIT', 'WCR: replay paused') + - gd(c, 'WAIT', 'JS external job') + - gd(c, 'WAIT', 'cell worker idle') + ,0) , mt), 10) || ' unaccounted time' ; + else null; + end case; -- mt=time, mn + else null; + end case; -- mt + return ret; + end get_useful_average; + + /*--------------------------------------------------- + -- function for converting large numbers to human-readable format + ---------------------------------------------------*/ + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, -- for KiB/MiB formatting use + p_grouplen in number default 3 -- p_base=2 and p_grouplen=10 + ) + return varchar2 + is + begin + if p_num = 0 then return '0'; end if; + if p_num IS NULL then return '~'; end if; + + if p_stype in ('WAIT','TIME') then + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then 'us' + when 1 then 'us' + when p_grouplen*1 then 'ms' + when p_grouplen*2 then 's' + when p_grouplen*3 then 'ks' + when p_grouplen*4 then 'Ms' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us' + end; + + else + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then '' + when 1 then '' + when p_grouplen*1 then 'k' + when p_grouplen*2 then 'M' + when p_grouplen*3 then 'G' + when p_grouplen*4 then 'T' + when p_grouplen*5 then 'P' + when p_grouplen*6 then 'E' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ) + end; + + end if; + + end; -- tptformat + + /*--------------------------------------------------- + -- simple function for parsing arguments from parameter string + ---------------------------------------------------*/ + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) return varchar2 + is + ret varchar(1000) := NULL; + begin + + -- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' ); + -- dbms_output.put('p_extract = ['||p_extract||'] ' ); + + if lower(p_parvalues) like lower(p_extract)||'%' + or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then + + ret := + nvl ( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract), + case + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) + when 0 then length(p_parvalues) + else + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) - 1 + end + ) + , chr(0) -- in case parameter was specified but with no value + ); + + else + ret := null; -- no parameter found + end if; + + -- dbms_output.put_line('ret = ['||replace(ret,chr(0),'\0')||']'); + + return ret; + + end; -- getopt + + /*--------------------------------------------------- + -- proc for getting session list with username, osuser, machine etc + ---------------------------------------------------*/ + procedure get_sessions is + tmp_sessions tmp_sestab; + begin + + select /*+ unnest */ /* get_session_list:1 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and ( + &sid_filter + ) ; + --(inst_id,sid) in (&snapper_sid); + + g_sessions := g_empty_sessions; + + for i in 1..tmp_sessions.count loop + g_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + end; -- get_sessions + + /*--------------------------------------------------- + -- function for getting session list with username, osuser, machine etc + -- this func does not update the g_sessions global array but returns session info as return value + ---------------------------------------------------*/ + function get_sessions return sestab is + tmp_sessions tmp_sestab; + l_return_sessions sestab; + begin + + select /*+ unnest */ /* get_session_list:2 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and (&sid_filter) ; + --(inst_id,sid) in (&snapper_sid); + + for i in 1..tmp_sessions.count loop + --output('get_sessions i='||i||' sid='||tmp_sessions(i).sid); + l_return_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + return l_return_sessions; + + end; -- get_sessions + + + + /*--------------------------------------------------- + -- functions for extracting and converting gv$session + -- records to varchar2 + ---------------------------------------------------*/ + function sitem(p in varchar2) return varchar2 as + begin + return '<'||translate(p, '<>', '__')||'>'; + end; -- sitem varchar2 + + function sitem(p in number) return varchar2 as + begin + return '<'||to_char(p)||'>'; + end; -- sitem number + + function sitem(p in date) return varchar2 as + begin + return '<'||to_char(p, 'YYYY-MM-DD HH24:MI:SS')||'>'; + end; -- sitem date + + function sitem_raw(p in raw) return varchar2 as + begin + return '<'||upper(rawtohex(p))||'>'; + end; -- sitem_raw + + + /*--------------------------------------------------- + -- proc for resetting the snapper ash array + ---------------------------------------------------*/ + procedure reset_ash is + begin + g_ash_samples_taken := 0; + -- clear g_ash + g_ash := new sys.dbms_debug_vc2coll(); + end; -- reset_ash + + + /*--------------------------------------------------- + -- proc for getting ash style samples from gv$session + ---------------------------------------------------*/ + procedure extract_ash is + ash_i varchar2(30); + s gv$session%rowtype; + + begin + -- keep track how many times we sampled gv$session so we could calculate averages later on + g_ash_samples_taken := g_ash_samples_taken + 1; + --output('g_sessions.count='||g_sessions.count); + ash_i := g_sessions.first; + + while ash_i is not null loop + + s := g_sessions(ash_i); + if -- active, on cpu + (s.status = 'ACTIVE' and s.state != 'WAITING' and s.sid != g_mysid) + or -- active, waiting for non-idle wait + (s.status = 'ACTIVE' and s.state = 'WAITING' and s.wait_class != 'Idle' and s.sid != g_mysid) + then + --output('extract_ash: i='||i||' sid='||s.sid||' hv='||s.sql_hash_value||' sqlid='||s.sql_id); + -- if not actually waiting for anything, clear the past wait event details + if s.state != 'WAITING' then + s.state:='ON CPU'; + s.event:='ON CPU'; + s.wait_class:='ON CPU'; --TODO: What do we need to do for 9i here? + s.p1:=NULL; + s.p2:=NULL; + s.p3:=NULL; + end if; + + g_ash.extend; + + -- max length 1000 bytes (due to dbms_debug_vc2coll) + g_ash(g_ash.count) := substr( + sitem(s.inst_id) -- 1 + ||sitem(s.sid) -- 2 + ||sitem(s.username) -- 3 -- 30 bytes + ||sitem(s.machine) -- 4 -- 64 bytes + ||sitem(s.terminal) -- 5 -- 30 bytes + ||sitem(s.program) -- 6 -- 48 bytes + ||sitem(s.event) -- 7 -- 64 bytes + ||sitem(s.wait_class) -- 8 -- 64 bytes, 10g+ + ||sitem(s.state) -- 9 + ||sitem(s.p1) -- 10 + ||sitem(s.p2) -- 11 + ||sitem(s.p3) -- 12 + ||sitem(s.row_wait_obj#) -- 13 + ||sitem(s.row_wait_file#) -- 14 + ||sitem(s.row_wait_block#) -- 15 + ||sitem(s.row_wait_row#) -- 16 + ||sitem(s.blocking_session_status) -- 17 -- 10g+ + &_NO_BLK_INST ||sitem('N/A') -- 17 -- 10gR2+ + &_YES_BLK_INST ||sitem(s.blocking_instance) -- 18 -- 10gR2+ + ||sitem(s.blocking_session) -- 19 -- 10g+ + ||sitem(s.sql_hash_value) -- 20 + ||sitem(s.sql_id) -- 21 -- 10g+ + ||sitem(s.sql_child_number) -- 22 -- 10g+ + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 23 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 24 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 25 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 22 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_object_id) -- 23 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_subprogram_id) -- 24 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_object_id) -- 25 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_subprogram_id) -- 26 + ||sitem(s.module) -- 27 -- 48 bytes + ||sitem(s.action) -- 28 -- 32 bytes + ||sitem(s.client_identifier) -- 29 -- 64 bytes + ||sitem(s.service_name) -- 30 -- 64 bytes, 10g+ + , 1, 1000); + + end if; -- sample is of an active session + + ash_i := g_sessions.next(ash_i); + + end loop; + + exception + when no_data_found then output('error in extract_ash(): no_data_found for item '||i); + end; -- extract_ash + + + /*--------------------------------------------------- + -- proc for querying performance data into collections + ---------------------------------------------------*/ + procedure snap( p_snapdate out timestamp, p_stats out stab, l_stats out ltab, p_stats_string out sys.dbms_debug_vc2coll) is + + lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options', 'sinclude=' )), '%'); + lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options', 'linclude=' )), '%'); + lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options', 'tinclude=' )), '%'); + lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options', 'winclude=' )), '%'); + + lstr varchar2(1000); + + begin + + p_snapdate := systimestamp; + + select /* get_session_stats */ p_snapdate ts, snapper_stats.* + bulk collect into p_stats + from ( + select 'STAT' stype, s.inst_id, s.sid, ss.statistic# - pls_adjust statistic#, ss.value, null event_count + from gv$session s, gv$sesstat ss + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = ss.inst_id + and s.sid = ss.sid + and (lv_gather like '%s%' or lv_gather like '%a%') + and ss.statistic# in (select /*+ no_unnest */ statistic# from v$statname + where lower(name) like '%'||lv_include_stat||'%' + or regexp_like (name, lv_include_stat, 'i') + ) + -- + union all + select + 'WAIT', s.inst_id, s.sid, + en.event# + (select count(*) from v$statname) + 1 - pls_adjust, + nvl(se.time_waited_micro,0) + ( decode(se.event||s.state, s.event||'WAITING', s.seconds_in_wait, 0) * 1000000 ) value, total_waits event_count + from gv$session s, gv$session_event se, v$event_name en + where &sid_filter + and s.sid = se.sid + and s.inst_id = se.inst_id + and se.event = en.name + --and (se.inst_id, se.sid) in (&snapper_sid) + and (lv_gather like '%w%' or lv_gather like '%a%') + and en.event# in (select event# from v$event_name + where lower(name) like '%'||lv_include_wait||'%' + or regexp_like (name, lv_include_wait, 'i') + ) + -- + union all + select 'TIME' stype, s.inst_id, s.sid, st.stat_id - pls_adjust statistic#, st.value, null event_count + from gv$session s, gv$sess_time_model st + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = st.inst_id + and s.sid = st.sid + and (lv_gather like '%t%' or lv_gather like '%a%') + and st.stat_id in (select stat_id from gv$sys_time_model + where lower(stat_name) like '%'||lv_include_time||'%' + or regexp_like (stat_name, lv_include_time, 'i') + ) + -- + union all + select 'LATG', s.inst_id, -1 sid, + s.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + s.gets + s.immediate_gets value, null event_count + from gv$latch s + where &inst_filter + and (lv_gather like '%l%' or lv_gather like '%a%') + and latch# in (select latch# from v$latchname + where lower(name) like '%'||lv_include_latch||'%' + or regexp_like (name, lv_include_latch, 'i') + ) + -- + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 union all + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.why0+s.why1+s.why2 value, null event_count + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 from x$kcbsw s, x$kcbwh w + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 where + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx = w.indx + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and s.why0+s.why1+s.why2 > 0 + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and (lv_gather like '%b%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER union all + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER sw.indx + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.why0+why.why1+why.why2+sw.other_wait value, null event_count + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER from + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbuwhy why, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbwh dsc, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbsw sw + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER where + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.indx = dsc.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = dsc.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.why0 + why.why1 + why.why2 + sw.other_wait > 0 + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER -- deliberate cartesian join + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', s.inst_id, -1 sid, + ascii(substr(s.eq_type,1,1))*256 + ascii(substr(s.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + s.total_req# value, null event_count + from gv$enqueue_stat s + where &inst_filter + and (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_stats + order by inst_id, sid, stype, statistic#; + + if p_stats.COUNT > 0 then + -- l_stats is an associative array for stats lookup, used for the useful averages calculation + -- p_stats_string is a dbms_debug_vc2coll collection datatype for "persisting" stats values across snapper DB calls (for "before" and "after" snaps) + p_stats_string := sys.dbms_debug_vc2coll(); + for s in p_stats.first..p_stats.last loop + -- type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + + if g_snap_begin is not null then + p_stats_string.extend(); + p_stats_string(s) := TO_CHAR(p_stats(s).ts, 'YYYY-MM-DD HH24:MI:SS.FF') ||','|| + p_stats(s).stype ||','|| + TO_CHAR(p_stats(s).inst_id) ||','|| + TO_CHAR(p_stats(s).sid) ||','|| + TRIM(TO_CHAR(p_stats(s).statistic#, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).value, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).event_count,'999999999999999999999999')); + --output('p_stats.p_stats_string='||p_stats_string(s)); + end if; + end loop; -- s in (p_stats) + end if; -- p.stats.COUNT > 0 + end snap; + + + /*--------------------------------------------------- + -- proc for reversing the string-normalized + -- stats array into lookup tables/collections + ---------------------------------------------------*/ + procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out timestamp, p_stats out stab, l_stats out ltab) + is + lstr varchar2(1000); + lv_rec srec; + begin + p_snapdate := NULL; + --type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + for s in p_string_stats.first .. p_string_stats.last loop + lv_rec.ts := TO_TIMESTAMP(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 1),',',''), 'YYYY-MM-DD HH24:MI:SS.FF'); + lv_rec.stype := replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 2),',',''); + lv_rec.inst_id := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 3),',','')); + lv_rec.sid := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 4),',','')); + lv_rec.statistic# := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 5),',','')); + lv_rec.value := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 6),',','')); + lv_rec.event_count := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 7),',','')); + --output('snap_from_stats_string.event_count = '||to_char(lv_rec.event_count)); + + p_stats(s) := lv_rec; + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + end loop; + + p_snapdate := lv_rec.ts; + end snap_from_stats_string; + + /*--------------------------------------------------- + -- proc for dumping ASH data out in grouped + -- and ordered fashion + ---------------------------------------------------*/ + procedure out_ash( p_ash_columns in varchar2, p_topn in number := 10 ) as + + -- whether to print given column or not + p_inst_id number := 0; + p_sid number := 0; + p_username number := 0; + p_machine number := 0; + p_terminal number := 0; + p_program number := 0; + p_event number := 0; + p_wait_class number := 0; + p_state number := 0; + p_p1 number := 0; + p_p2 number := 0; + p_p3 number := 0; + p_row_wait_obj# number := 0; + p_row_wait_file# number := 0; + p_row_wait_block# number := 0; + p_row_wait_row# number := 0; + p_blocking_session_status number := 0; + p_blocking_instance number := 0; + p_blocking_session number := 0; + p_sql_hash_value number := 0; + p_sql_id number := 0; + p_sql_child_number number := 0; + p_plsql_entry_object_id number := 0; + p_plsql_entry_subprogram_id number := 0; + p_plsql_object_id number := 0; + p_plsql_subprogram_id number := 0; + p_module number := 0; + p_action number := 0; + p_client_identifier number := 0; + p_service_name number := 0; + + -- temporary variables for holding session details (for later formatting) + o_inst_id varchar2(100); + o_sid varchar2(100); + o_username varchar2(100); + o_machine varchar2(100); + o_terminal varchar2(100); + o_program varchar2(100); + o_event varchar2(100); + o_wait_class varchar2(100); + o_state varchar2(100); + o_p1 varchar2(100); + o_p2 varchar2(100); + o_p3 varchar2(100); + o_row_wait_obj# varchar2(100); + o_row_wait_file# varchar2(100); + o_row_wait_block# varchar2(100); + o_row_wait_row# varchar2(100); + o_blocking_session_status varchar2(100); + o_blocking_instance varchar2(100); + o_blocking_session varchar2(100); + o_sql_hash_value varchar2(100); + o_sql_id varchar2(100); + o_sql_child_number varchar2(100); + o_plsql_entry_object_id varchar2(100); + o_plsql_entry_subprogram_id varchar2(100); + o_plsql_object_id varchar2(100); + o_plsql_subprogram_id varchar2(100); + o_module varchar2(100); + o_action varchar2(100); + o_client_identifier varchar2(100); + o_service_name varchar2(100); + + -- helper local vars + l_ash_grouping number := 0; + l_output_line varchar2(4000); + l_ash_header_line varchar2(4000); + + begin + + -- bail out if no ASH samples recorded + if g_ash.count = 0 then + output(' '); + return; + end if; + + + l_ash_header_line := 'Active%'; + + -- ash,ash1,ash2,ash3 parameter column group tokenizer + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + + case s.token + -- actual column names in gv$session + when 'inst_id' then l_ash_grouping := l_ash_grouping + c_inst_id ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('INST_ID' , w_inst_id , ' '); + when 'sid' then l_ash_grouping := l_ash_grouping + c_sid ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('SID' , w_sid , ' '); + when 'username' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'machine' then l_ash_grouping := l_ash_grouping + c_machine ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MACHINE' , w_machine , ' '); + when 'terminal' then l_ash_grouping := l_ash_grouping + c_terminal ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('TERMINAL' , w_terminal , ' '); + when 'program' then l_ash_grouping := l_ash_grouping + c_program ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PROGRAM' , w_program , ' '); + when 'event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_class' then l_ash_grouping := l_ash_grouping + c_wait_class ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('WAIT_CLASS' , w_wait_class , ' '); + when 'state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + when 'p1' then l_ash_grouping := l_ash_grouping + c_p1 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P1' , w_p1 , ' '); + when 'p2' then l_ash_grouping := l_ash_grouping + c_p2 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P2' , w_p2 , ' '); + when 'p3' then l_ash_grouping := l_ash_grouping + c_p3 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P3' , w_p3 , ' '); + when 'row_wait_obj#' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'row_wait_file#' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'row_wait_block#' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row_wait_row#' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'blocking_session_status' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'blocking_instance' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'blocking_session' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql_hash_value' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sql_id' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'sql_child_number' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_entry_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_entry_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'module' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'action' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'client_identifier' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service_name' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'obj' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'file' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'block' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'bss' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'bsi' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'bs' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sqlid' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'child' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_eoid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_esubpid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_oid' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subpid' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'mod' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'act' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'cid' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + when 'wait_event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + else + null; + -- raise_application_error(-20000, 'Invalid ASH column name'); + end case; -- case s.token + + end loop; -- tokenizer + + output(' '); + output(lpad('-',length(l_ash_header_line),'-')); + output(l_ash_header_line); + output(lpad('-',length(l_ash_header_line),'-')); + + -- this is needed for "easy" sorting and group by ops (without any custom stored object types!) + for i in ( + with /* get_aggregates_from_ash */ raw_records as ( + select column_value rec from table(cast(g_ash as sys.dbms_debug_vc2coll)) + ), + ash_records as ( + select + substr(r.rec, instr(r.rec, '<', 1, 1)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 1)+1), '>')-1) inst_id + , substr(r.rec, instr(r.rec, '<', 1, 2)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 2)+1), '>')-1) sid + , substr(r.rec, instr(r.rec, '<', 1, 3)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 3)+1), '>')-1) username + , substr(r.rec, instr(r.rec, '<', 1, 4)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 4)+1), '>')-1) machine + , substr(r.rec, instr(r.rec, '<', 1, 5)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 5)+1), '>')-1) terminal + , substr(r.rec, instr(r.rec, '<', 1, 6)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 6)+1), '>')-1) program + , substr(r.rec, instr(r.rec, '<', 1, 7)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 7)+1), '>')-1) event + , substr(r.rec, instr(r.rec, '<', 1, 8)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 8)+1), '>')-1) wait_class + , substr(r.rec, instr(r.rec, '<', 1, 9)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 9)+1), '>')-1) state + , substr(r.rec, instr(r.rec, '<', 1, 10)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 10)+1), '>')-1) p1 + , substr(r.rec, instr(r.rec, '<', 1, 11)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 11)+1), '>')-1) p2 + , substr(r.rec, instr(r.rec, '<', 1, 12)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 12)+1), '>')-1) p3 + , substr(r.rec, instr(r.rec, '<', 1, 13)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 13)+1), '>')-1) row_wait_obj# + , substr(r.rec, instr(r.rec, '<', 1, 14)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 14)+1), '>')-1) row_wait_file# + , substr(r.rec, instr(r.rec, '<', 1, 15)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 15)+1), '>')-1) row_wait_block# + , substr(r.rec, instr(r.rec, '<', 1, 16)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 16)+1), '>')-1) row_wait_row# + , substr(r.rec, instr(r.rec, '<', 1, 17)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 17)+1), '>')-1) blocking_session_status + , substr(r.rec, instr(r.rec, '<', 1, 18)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 18)+1), '>')-1) blocking_instance + , substr(r.rec, instr(r.rec, '<', 1, 19)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 19)+1), '>')-1) blocking_session + , substr(r.rec, instr(r.rec, '<', 1, 20)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 20)+1), '>')-1) sql_hash_value + , substr(r.rec, instr(r.rec, '<', 1, 21)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 21)+1), '>')-1) sql_id + , substr(r.rec, instr(r.rec, '<', 1, 22)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 22)+1), '>')-1) sql_child_number + , substr(r.rec, instr(r.rec, '<', 1, 23)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 23)+1), '>')-1) plsql_entry_object_id + , substr(r.rec, instr(r.rec, '<', 1, 24)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 24)+1), '>')-1) plsql_entry_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 25)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 25)+1), '>')-1) plsql_object_id + , substr(r.rec, instr(r.rec, '<', 1, 26)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 26)+1), '>')-1) plsql_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 27)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 27)+1), '>')-1) module + , substr(r.rec, instr(r.rec, '<', 1, 28)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 28)+1), '>')-1) action + , substr(r.rec, instr(r.rec, '<', 1, 29)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 29)+1), '>')-1) client_identifier + , substr(r.rec, instr(r.rec, '<', 1, 30)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 30)+1), '>')-1) service_name + from + raw_records r + ) + select * from ( + select + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) as inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) as sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) as username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) as machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) as terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) as program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) as event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) as wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) as state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) as p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) as p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) as p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) as row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) as row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) as row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) as row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) as blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) as blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) as blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) as sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) as sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) as sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) as plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) as plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) as plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) as plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) as module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) as action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) as client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) as service_name + , count(*)/g_ash_samples_taken average_active_samples + from + ash_records a + group by + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) -- inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) -- sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) -- username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) -- machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) -- terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) -- program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) -- event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) -- wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) -- state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) -- p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) -- p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) -- p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) -- row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) -- row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) -- row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) -- row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) -- blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) -- blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) -- blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) -- sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) -- sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) -- sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) -- plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) -- plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) -- plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) -- plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) -- module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) -- action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) -- client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) -- service_name + order by + count(*)/g_ash_samples_taken desc + ) + where rownum <= p_topn + ) loop + + l_output_line := ''; + + o_inst_id := CASE WHEN i.inst_id = chr(0) THEN null ELSE nvl(i.inst_id , ' ') END; + o_sid := CASE WHEN i.sid = chr(0) THEN null ELSE nvl(i.sid , ' ') END; + o_username := CASE WHEN i.username = chr(0) THEN null ELSE nvl(i.username , ' ') END; + o_machine := CASE WHEN i.machine = chr(0) THEN null ELSE nvl(i.machine , ' ') END; + o_terminal := CASE WHEN i.terminal = chr(0) THEN null ELSE nvl(i.terminal , ' ') END; + o_program := CASE WHEN i.program = chr(0) THEN null ELSE nvl(i.program , ' ') END; + o_event := CASE WHEN i.event = chr(0) THEN null ELSE nvl(i.event , ' ') END; + o_wait_class := CASE WHEN i.wait_class = chr(0) THEN null ELSE nvl(i.wait_class , ' ') END; + o_state := CASE WHEN i.state = chr(0) THEN null ELSE nvl(i.state , ' ') END; + o_p1 := CASE WHEN i.p1 = chr(0) THEN null ELSE nvl(i.p1 , ' ') END; + o_p2 := CASE WHEN i.p2 = chr(0) THEN null ELSE nvl(i.p2 , ' ') END; + o_p3 := CASE WHEN i.p3 = chr(0) THEN null ELSE nvl(i.p3 , ' ') END; + o_row_wait_obj# := CASE WHEN i.row_wait_obj# = chr(0) THEN null ELSE nvl(i.row_wait_obj# , ' ') END; + o_row_wait_file# := CASE WHEN i.row_wait_file# = chr(0) THEN null ELSE nvl(i.row_wait_file# , ' ') END; + o_row_wait_block# := CASE WHEN i.row_wait_block# = chr(0) THEN null ELSE nvl(i.row_wait_block# , ' ') END; + o_row_wait_row# := CASE WHEN i.row_wait_row# = chr(0) THEN null ELSE nvl(i.row_wait_row# , ' ') END; + o_blocking_session_status := CASE WHEN i.blocking_session_status = chr(0) THEN null ELSE nvl(i.blocking_session_status , ' ') END; + o_blocking_instance := CASE WHEN i.blocking_instance = chr(0) THEN null ELSE nvl(i.blocking_instance , ' ') END; + o_blocking_session := CASE WHEN i.blocking_session = chr(0) THEN null ELSE nvl(i.blocking_session , ' ') END; + o_sql_hash_value := CASE WHEN i.sql_hash_value = chr(0) THEN null ELSE nvl(i.sql_hash_value , ' ') END; + o_sql_id := CASE WHEN i.sql_id = chr(0) THEN null ELSE nvl(i.sql_id , ' ') END; + o_sql_child_number := CASE WHEN i.sql_child_number = chr(0) THEN null ELSE nvl(i.sql_child_number , ' ') END; + o_plsql_entry_object_id := CASE WHEN i.plsql_entry_object_id = chr(0) THEN null ELSE nvl(i.plsql_entry_object_id , ' ') END; + o_plsql_entry_subprogram_id := CASE WHEN i.plsql_entry_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_entry_subprogram_id , ' ') END; + o_plsql_object_id := CASE WHEN i.plsql_object_id = chr(0) THEN null ELSE nvl(i.plsql_object_id , ' ') END; + o_plsql_subprogram_id := CASE WHEN i.plsql_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_subprogram_id , ' ') END; + o_module := CASE WHEN i.module = chr(0) THEN null ELSE nvl(i.module , ' ') END; + o_action := CASE WHEN i.action = chr(0) THEN null ELSE nvl(i.action , ' ') END; + o_client_identifier := CASE WHEN i.client_identifier = chr(0) THEN null ELSE nvl(i.client_identifier , ' ') END; + o_service_name := CASE WHEN i.service_name = chr(0) THEN null ELSE nvl(i.service_name , ' ') END; + + + -- print the activity % as the first column + l_output_line := lpad(to_char(round(i.average_active_samples*100))||'%', w_activity_pct, ' '); + + -- loop through ash columns to find what to print and in which order + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + l_output_line := l_output_line || ' | ' || + case s.token + -- actual column names in gv$session + when 'inst_id' then lpad(o_inst_id , w_inst_id , ' ') + when 'sid' then lpad(o_sid , w_sid , ' ') + when 'username' then rpad(o_username , w_username , ' ') + when 'machine' then rpad(o_machine , w_machine , ' ') + when 'terminal' then rpad(o_terminal , w_terminal , ' ') + when 'program' then rpad(o_program , w_program , ' ') + when 'event' then rpad(o_event , w_event , ' ') + when 'wait_class' then rpad(o_wait_class , w_wait_class , ' ') + when 'state' then rpad(o_state , w_state , ' ') + when 'p1' then rpad(o_p1 , w_p1 , ' ') + when 'p2' then rpad(o_p2 , w_p2 , ' ') + when 'p3' then rpad(o_p3 , w_p3 , ' ') + when 'row_wait_obj#' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'row_wait_file#' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'row_wait_block#' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row_wait_row#' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'blocking_session_status' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'blocking_instance' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'blocking_session' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql_hash_value' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sql_id' then rpad(o_sql_id , w_sql_id , ' ') + when 'sql_child_number' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_entry_object_id' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_entry_subprogram_id' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_object_id' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subprogram_id' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'module' then rpad(o_module , w_module , ' ') + when 'action' then rpad(o_action , w_action , ' ') + when 'client_identifier' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service_name' then rpad(o_service_name , w_service_name , ' ') + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then rpad(o_username , w_username , ' ') + when 'obj' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'file' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'block' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'bss' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'bsi' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'bs' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sqlid' then rpad(o_sql_id , w_sql_id , ' ') + when 'child' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_eoid' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_esubpid' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_oid' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subpid' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'mod' then rpad(o_module , w_module , ' ') + when 'act' then rpad(o_action , w_action , ' ') + when 'cid' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service' then rpad(o_service_name , w_service_name , ' ') + when 'wait_event' then rpad(o_event , w_event , ' ') + when 'wait_state' then rpad(o_state , w_state , ' ') + else + '' + end; -- case s.token + + end loop; -- ash parameter tokenizer + + output(l_output_line); + + end loop; -- grouped ash samples + + end out_ash; + + +-- and it begins!!! +begin + + -- get snappers own sid into g_mysid + select sid into g_mysid from v$mystat where rownum = 1; + + pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize); + --output ( 'Pagesize='||pagesize ); + + lv_ash := getopt('&snapper_options', 'ash'); + lv_stats := getopt('&snapper_options', 'stat'); + + if lv_ash is not null then gather_ash := 1; end if; + if lv_stats is not null then gather_stats := 1; end if; + + --output('all='||case when getopt('&snapper_options', 'all') = chr(0) then 'chr(0)' when getopt('&snapper_options', 'all') is null then 'null' else (getopt('&snapper_options','all')) end); + -- some additional default value logic + if getopt('&snapper_options', 'all') is not null then + --output('setting stats to all due to option = all'); + gather_stats := 1; + gather_ash := 1; + else + if (lv_ash is null and lv_stats is null) then + gather_stats := 0; + gather_ash := 1; + end if; + end if; + + -- determine which performance counters and stats to collect + lv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + when 'all' then 'stw' + else nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + end; + + --lv_gather:=getopt ('&snapper_options', 'gather='); + --output('lv_gather='||lv_gather); + + g_snap_begin := lower(getopt('&snapper_options', 'begin' )); + g_snap_end := lower(getopt('&snapper_options', 'end' )); + --output('g_snap_begin = '||g_snap_begin); + --output('g_snap_end = '||g_snap_end); + + if pagesize > 0 then + output(' '); + output('-- Session Snapper v4.09 BETA - by Tanel Poder ( http://blog.tanelpoder.com ) - Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :)'); + output(' '); + end if; + + -- initialize statistic and event name array + -- fetch statistic names with their adjusted IDs + select /* get_stat_names */ * + bulk collect into sn_tmp + from ( + select 'STAT' stype, statistic# - pls_adjust statistic#, name + from v$statname + where (lv_gather like '%s%' or lv_gather like '%a%') + -- + union all + select 'WAIT', + event# + (select count(*) from v$statname) + 1 - pls_adjust, name + from v$event_name + where (lv_gather like '%w%' or lv_gather like '%a%') + -- + union all + select 'TIME' stype, stat_id - pls_adjust statistic#, stat_name name + from gv$sys_time_model + where (lv_gather like '%t%' or lv_gather like '%a%') + -- + union all + select 'LATG', + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + name + from gv$latch l + where (lv_gather like '%l%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE union all + &_IF_X_ACCESSIBLE select 'BUFG', + &_IF_X_ACCESSIBLE indx + + &_IF_X_ACCESSIBLE (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE kcbwhdes name + &_IF_X_ACCESSIBLE from x$kcbwh + &_IF_X_ACCESSIBLE where (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + eq_type + from ( + select es.eq_type + ||' - '||lt.name + eq_type, + total_req# + from + gv$enqueue_stat es + , gv$lock_type lt + where es.eq_type = lt.type + ) e + where (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_statnames + order by stype, statistic#; + + -- store these into an index_by array organized by statistic# for fast lookup + for i in 1..sn_tmp.count loop + sn(sn_tmp(i).statistic#) := sn_tmp(i); + sn_reverse(sn_tmp(i).stype||','||sn_tmp(i).name) := sn_tmp(i); + end loop; + + + -- main sampling loop + for c in 1..&snapper_count loop + + -- sesstat and other performance counter sampling + if gather_stats = 1 then + + -- print header if required + gv_header_string := + CASE WHEN output_header = 1 THEN 'HEAD,' END + || CASE WHEN output_inst = 1 THEN ' INST,' END + || CASE WHEN output_sid = 1 THEN ' SID,' END + || CASE WHEN output_inst_sid = 1 THEN ' SID @INST,' END + || CASE WHEN output_username = 1 THEN ' USERNAME ,' END + || CASE WHEN output_time = 1 THEN ' SNAPSHOT START ,' END + || CASE WHEN output_seconds = 1 THEN ' SECONDS,' END + || CASE WHEN output_stype = 1 THEN ' TYPE,' END + || CASE WHEN output_sname = 1 THEN rpad(' STATISTIC',59,' ')||',' END + || CASE WHEN output_delta = 1 THEN ' DELTA,' END + || CASE WHEN output_delta_s = 1 THEN ' DELTA/SEC,' END + || CASE WHEN output_hdelta = 1 THEN ' HDELTA,' END + || CASE WHEN output_hdelta_s = 1 THEN ' HDELTA/SEC,' END + || CASE WHEN output_percent = 1 THEN ' %TIME,' END + || CASE WHEN output_pcthist = 1 THEN ' GRAPH ,' END + || CASE WHEN output_eventcnt = 1 THEN ' NUM_WAITS,' END + || CASE WHEN output_eventcnt_s = 1 THEN ' WAITS/SEC,' END + || CASE WHEN output_eventavg = 1 THEN ' AVERAGES ' END + ; + + + if g_snap_begin is null then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(rpad('-',length(gv_header_string),'-')); + output(gv_header_string); + output(rpad('-',length(gv_header_string),'-')); + else + if pagesize = -1 and c = 1 then + output(gv_header_string); + end if; + end if; + else + output('Taking BEGIN sample ...'); + end if; + + -- TODO raise an error if both begin and end are used together + -- TODO conditionally comment out the refcursor use unless begin and end is used + + -- manual before/after snapshots (snapper v4) + if g_snap_begin is not null or g_snap_end is not null then + if g_snap_begin is not null then + get_sessions; + snap(d1,s1,l1,g_snap1); +&_MANUAL_SNAPSHOT open :snapper for select column_value rec from table(g_snap1); -- if you see this error then run: "VAR SNAPPER REFCURSOR" first! + exit; + end if; + + if g_snap_end is not null then +&_MANUAL_SNAPSHOT fetch :snapper bulk collect into g_snap1; -- You should run snapper with BEGIN option first! + -- procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out date, p_stats out stab, l_stats out ltab) + snap_from_stats_string(g_snap1, d1, s1, l1); + end if; + else -- normal interval sampling + if c = 1 then + get_sessions; + snap(d1,s1,l1,g_snap1); + else + get_sessions; + d1 := d2; + s1 := s2; + g_snap1 := g_snap2; + end if; -- c = 1 + end if; + + end if; -- gather_stats = 1 + + + + -- ASH style sampling +&_USE_DBMS_LOCK ash_date1 := sysdate; +&_USE_DBMS_LOCK if gather_ash = 1 then +&_USE_DBMS_LOCK while sysdate < (ash_date1 + (&snapper_sleep/86400)) loop +&_USE_DBMS_LOCK -- get active session records from g_sessions +&_USE_DBMS_LOCK get_sessions; +&_USE_DBMS_LOCK extract_ash(); +&_USE_DBMS_LOCK -- sleep timeout backoff depending on the duration sampled (for up to 10 seconds total sampling time will get max 100 Hz sampling) +&_USE_DBMS_LOCK -- for longer duration sampling the algorithm will back off and for long durations (over 100 sec) the sampling rate will stabilize +&_USE_DBMS_LOCK -- at 1Hz +&_USE_DBMS_LOCK dbms_lock.sleep( greatest(0.1,(least(1,&snapper_sleep*&snapper_count/100))) ); +&_USE_DBMS_LOCK end loop; +&_USE_DBMS_LOCK else +&_USE_DBMS_LOCK dbms_lock.sleep( ((ash_date1+(&snapper_sleep/86400)) - sysdate)*86400 ); +&_USE_DBMS_LOCK null; +&_USE_DBMS_LOCK end if; +&_USE_DBMS_LOCK ash_date2 := sysdate; + + -- sesstat new sample and delta calculation + if gather_stats = 1 then + + get_sessions; + snap(d2,s2,l2,g_snap2); + + -- manually coded nested loop outer join for calculating deltas: + -- why not use a SQL join? this would require creation of PL/SQL + -- collection object types, but Snapper does not require any changes + -- to the database, so any custom object types are out! + changed_values := 0; + missing_values_s1 := 0; + missing_values_s2 := 0; + + -- remember last disappeared SID so we wouldn't need to output a warning + -- message for each statistic row of that disappeared sid + disappeared_sid := 0; + + i :=1; -- iteration counter (for debugging) + a :=1; -- s1 array index + b :=1; -- s2 array index + + if s2.count > 0 then lv_curr_sid := s2(b).sid; end if; + + while ( a <= s1.count and b <= s2.count ) loop + + if lv_curr_sid != 0 and lv_curr_sid != s2(b).sid then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + -- if filtering specific stats, assuming that it's better to not leave spaces between every session data + + if getopt('&snapper_options', 'sinclude=')||getopt('&snapper_options', 'tinclude=' )||getopt('&snapper_options', 'winclude=' ) is null then + output(' '); + -- output(rpad('-',length(gv_header_string),'-')); + -- output(gv_header_string); + -- output(rpad('-',length(gv_header_string),'-')); + end if; + end if; + lv_curr_sid := s2(b).sid; + end if; + + delta := 0; -- don't print + + case + when s1(a).sid = s2(b).sid then + + case + when s1(a).statistic# = s2(b).statistic# then + + delta := s2(b).value - s1(a).value; + evcnt := s2(b).event_count - s1(a).event_count; + --output('DEBUG, s1(a).statistic# s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + if delta != 0 then fout(); end if; + + a := a + 1; + b := b + 1; + + when s1(a).statistic# > s2(b).statistic# then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).statistic# < s2(b).statistic# then + + output('ERROR, s1(a).statistic# < s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + else + output('ERROR, s1(a).statistic# ? s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + end case; -- s1(a).statistic# ... s2(b).statistic# + + when s1(a).sid > s2(b).sid then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).sid < s2(b).sid then + + if disappeared_sid != s1(a).sid then + output('WARN, Session has disappeared since previous snapshot, ignoring SID='||to_char(s1(a).sid)||' debug(a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count||')'); + end if; + disappeared_sid := s1(a).sid; + a := a + 1; + + else + output('ERROR, Should not be here, SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + end case; -- s1(a).sid ... s2(b).sid + + i:=i+1; + + if delta != 0 then + + changed_values := changed_values + 1; + + end if; -- delta != 0 + + end loop; -- while ( a <= s1.count and b <= s2.count ) + + if pagesize > 0 and changed_values > 0 then + output(' '); + --output('-- End of Stats snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(case get_seconds(d2-d1) when 0 then (&snapper_sleep) else round(get_seconds(d2-d1), 1) end)); + output('-- End of Stats snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||round(get_seconds(d2-d1), 1)); + end if; + + output(' '); + + end if; -- gather_stats = 1 + + if gather_ash = 1 then + + -- get ASH sample grouping details + g_ash_columns := nvl( getopt('&snapper_options', 'ash=' ), g_ash_columns ); + + -- optional additional ASH groupings + g_ash_columns1 := case when getopt('&snapper_options', 'ash1' ) is null then null when getopt('&snapper_options', 'ash1' ) = chr(0) then g_ash_columns1 else getopt('&snapper_options', 'ash1=' ) end; + g_ash_columns2 := case when getopt('&snapper_options', 'ash2' ) is null then null when getopt('&snapper_options', 'ash2' ) = chr(0) then g_ash_columns2 else getopt('&snapper_options', 'ash2=' ) end; + g_ash_columns3 := case when getopt('&snapper_options', 'ash3' ) is null then null when getopt('&snapper_options', 'ash3' ) = chr(0) then g_ash_columns3 else getopt('&snapper_options', 'ash3=' ) end; + + -- group ASH records and print report + out_ash( g_ash_columns, 10 ); + -- group and print optional ASH reports + if g_ash_columns1 is not null then out_ash( g_ash_columns1, 10 ); end if; + if g_ash_columns2 is not null then out_ash( g_ash_columns2, 10 ); end if; + if g_ash_columns3 is not null then out_ash( g_ash_columns3, 10 ); end if; + + + if pagesize > 0 then + output(' '); + --output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(case (ash_date2-ash_date1) when 0 then (&snapper_sleep) else round((ash_date2-ash_date1) * 86400, 1) end)||', samples_taken='||g_ash_samples_taken); + output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken); + output(' '); + end if; + + reset_ash(); + + end if; -- gather_ash = 1 + + end loop; -- for c in 1..snapper_count + +end; +/ + +undefine snapper_oraversion +undefine snapper_sleep +undefine snapper_count +undefine snapper_sid +undefine ssid_begin +undefine _IF_ORA11_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11 +undefine _NO_BLK_INST +undefine _YES_BLK_INST +undefine _NO_PLSQL_OBJ_ID +undefine _YES_PLSQL_OBJ_ID +undefine _IF_DBMS_SYSTEM_ACCESSIBLE +undefine _IF_X_ACCESSIBLE +undefine _MANUAL_SNAPSHOT +undefine _USE_DBMS_LOCK +col snapper_ora11higher clear +col snapper_ora11lower clear +col dbms_system_accessible clear +col x_accessible clear +col no_plsql_obj_id clear +col yes_plsql_obj_id clear +col no_blk_inst clear +col yes_blk_inst clear +col manual_snapshot clear +col use_dbms_lock clear +col snapper_sid clear +col sid_filter clear +col inst_filter clear + +set serveroutput off +undef 1 +undef 2 diff --git a/vdh/snapper45.sql b/vdh/snapper45.sql new file mode 100644 index 0000000..17d8fc2 --- /dev/null +++ b/vdh/snapper45.sql @@ -0,0 +1,2304 @@ +------------------------------------------------------------------------------ +-- +-- +-- +-- File name: snapper.sql (Oracle Session Snapper v4) +-- Purpose: An easy to use Oracle session-level performance measurement tool +-- which does NOT require any database changes nor creation of any +-- database objects! +-- +-- This is very useful for ad-hoc performance diagnosis in environments +-- with restrictive change management processes, where creating +-- even temporary tables and PL/SQL packages is not allowed or would +-- take too much time to get approved. +-- +-- All processing is done by a few sqlplus commands and an anonymous +-- PL/SQL block, all that's needed is SQLPLUS access (and if you want +-- to output data to server-side tracefile then execute rights on +-- DBMS_SYSTEM). Snapper only queries some V$ views (and in advanced +-- mode some X$ fixed tables, but it does not enable any traces nor +-- use oradebug. +-- +-- The output is formatted the way it could be easily post-processed +-- by either Unix string manipulation tools or loaded to spreadsheet. +-- +-- Snapper v4.20 Oracle 12c CDB and PDB grouping +-- Snapper v4 supports RAC and requires Oracle 10.1 or a newer DB version. +-- Snapper v3.5 works on Oracle versions starting from Oracle 9.2 (no RAC support) +-- +-- Note1: The "ASH" functionality in Snapper just samples GV$SESSION view, +-- so you do NOT need Diagnostics Pack licenses to use Snapper's +-- "ASH" output +-- +-- Note2: Snapper just reports you performance metric deltas in a snapsphot +-- and does not attempt to solve any performance problems for you. +-- You still need to interpret and understand these standard Oracle +-- metrics yourself +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- Copyright: (c) Tanel Poder - http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", so no warranties or guarantees are +-- made about its correctness, reliability and safety. Use it at your +-- own risk! +-- +-- Copyright: Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com +-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions. +-- +-- Thanks to: Adrian Billington, Jamey Johnston, Marcus Mönnig, Hans-Peter Sloot, +-- Ronald Rood and Peter Bach for bugfixes, additions and improvements +-- +-------------------------------------------------------------------------------- +-- +-- The Session Snapper v4.50 ( USE AT YOUR OWN RISK !!! ) +-- (c) Tanel Poder ( http://blog.tanelpoder.com ) +-- +-- +-- +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a cheap ASCII +-- / imitation of a fish and a fishing rod. +-- | Nevertheless the PL/SQL code below the +-- | fish itself should be helpful for quick +-- | catching of relevant Oracle performance +-- | information. +-- | So I wish you happy... um... snapping? +-- | ) +-- | ...... +-- | iittii,,.... +-- ¿ iiffffjjjjtttt,, +-- ..;;ttffLLLLffLLLLLLffjjtt;;.. +-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,, +-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;.... +-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;.. +-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,, +-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;.. +-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii.. +-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;.. +-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,, +-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii.. +-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;.. +-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;; +-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;.. +-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. .... +-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii.. +-- ..;;ttttii;;.... ..;;;;.... +-- ..iiii;;.. +-- ..;;,, +-- .... +-- +-- +-- Usage: +-- +-- snapper.sql [,out][,trace][,pagesize=X][,gather=[s][t][w][l][e][b][a]]> +-- +-- ash - sample session activity ASH style, waits and SQL_IDs from gv$session and +-- print a TOP SQL/wait report from these samples (this is the default from +-- Snapper 3.0). The columns chosen for TOP calculation are defined in CONFIG +-- section below. +-- +-- ash=sql_id+event+wait_class +-- - the above example illustrates that you can also specify the gv$session +-- columns for TOP report yourself. The above example will show a TOP +-- activity report grouped by SQL_ID + EVENT + WAIT_CLASS +-- Note that the columns are separated by a "+" sign (as comma is a snapper +-- parameter separator, not ASH column separator) +-- +-- ash1 +-- ash2 +-- ash3 - in addition to "ash" report you can have 3 more reported during the same +-- snapper sampling snapshot. Just include ash1=col1+col2,ash2=col3+col4,... +-- parameters if you want multiple TOP reports per Snapper snapshot +-- +-- stats - sample gv$sesstat,gv$sess_time_model,gv$session_event performance counters +-- and report how much these stats increased (deltas) during Snapper run +-- all - report both ASH and stats sections +-- +-- out - use dbms_output.put_line() for output. output will be seen only when +-- Snapper run completes due to dbms_output limitations. This is the default. +-- trace - write output to server process tracefile +-- (you must have execute permission on sys.dbms_system.ksdwrt() for that, +-- you can use both out and trace parameters together if you like ) +-- +-- pagesize - display header lines after X snapshots. if pagesize=0 don't display +-- any headers. pagesize=-1 will display a terse header only once +-- +-- gather - if omitted, gathers s,t,w statistics (see below) +-- - if specified, then gather following: +-- +-- Session-level stats: +-- s - Session Statistics from gv$sesstat +-- t - Session Time model info from gv$sess_time_model +-- w - Session Wait statistics from gv$session_event and gv$session_wait +-- +-- Instance-level stats: +-- l - instance Latch get statistics ( gets + immediate_gets ) +-- e - instance Enqueue lock get statistics +-- b - buffer get Where statistics -- useful in versions up to 10.2.x +-- a - All above +-- +-- sinclude - if specified, then show only GV$SESSTAT stats which match the +-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+) +-- linclude - if specified, then show only GV$LATCH latch stats which match the +-- LIKE pattern of linclude (REGEXP_LIKE in 10g+) +-- tinclude - if specified, then show only GV$SESS_TIME_MODEL stats which match the +-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+) +-- winclude - if specified, then show only GV$SESSION_EVENT wait stats which match the +-- LIKE pattern of winclude (REGEXP_LIKE in 10g+) +-- +-- you can combine above parameters in any order, separate them by commas +-- !!!don't use spaces as otherwise they are treated as next parameters by sqlplus !!! +-- !!!if you want to use spaces, enclose the whole sqlplus parameter in doublequotes !!! +-- +-- - the number of seconds between taking snapshots +-- - the number of snapshots to take ( maximum value is power(2,31)-1 ) +-- +-- can be either one sessionid, multiple sessionids separated by +-- commas or a SQL statement which returns a list of SIDs (if you need spaces +-- in that parameter text, enclose it in double quotes). +-- +-- if you want to snap ALL sids, use "all" as value for +-- parameter +-- +-- alternatively you can use "select inst_id,sid from gv$session" as value for +-- parameter to capture all SIDs. you can write any query (with multiple and/or) +-- conditions to specify complex rules for capturing only the SIDs you want +-- +-- starting from version 3.0 there are further session_id selection options available in +-- instead of sid you can write such expressions for snapper's parameter: +-- +-- sid=123 -- take sid 123 only (the same as just writing 123) +-- user=tanel -- take all sessions where username is 'tanel' (case insensitive) +-- -- this is the same as writing following subquery for the +-- -- parameter: +-- select inst_id,sid from gv$session where lower(username) like lower('tanel') +-- +-- user=tanel% -- take all sessions where username begins with 'tanel%' (case insensitive) +-- -- the = means actually LIKE in SQL terms in this script +-- +-- spid=1234 -- all these 3 parameters do the same thing: +-- ospid=1234 -- they look up the sessions(s) where the processes OS PID=1234 +-- pid=1234 -- this is useful for quickly looking up what some OS process is doing +-- -- if it consumes too much of some resource +-- qc=123 +-- qcsid=123 -- show query coordinator and all PX slave sessions +-- +-- program=sqlplus% -- the following examples filter by corresponding gv$session coulmns +-- machine=linux01 -- machine +-- osuser=oracle -- os username +-- module=HR -- module +-- "action=Find Order" -- note the quotes because there is a space inside the parameter +-- -- value +-- client_id=tanelpoder -- show only sessions where client_identifier is set to tanelpoder +-- -- this is very useful in cases with (properly instrumented) +-- -- connection pools +-- +-- +-- Note that if you want to change some "advanced" snapper configuration parameters +-- or default values then search for CONFIG in this file to see configurable +-- variable section +-- +-- +-- Examples: +-- NB! Read the online examples, these are more detailed and list script output too! +-- +-- http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper +-- +-- @snapper ash,stats 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- Wait, gv$sesstat and gv$sess_time_model statistics are reported by default +-- Starting from V3 the ASH style session activity report is shown as well) +-- +-- @snapper stats,gather=w 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only Wait event statistics are reported, no ASH) +-- +-- @snapper ash,gather=st 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only gv$sesstat and gv$sess_Time_model statistics are gathered + ASH) +-- +-- @snapper trace,ash,gather=stw,pagesize=0 10 90 117,210,313 +-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313 +-- all statistics are reported, do not print any headers) +-- +-- @snapper trace,ash 900 999999999 all +-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace, +-- loop (almost) forever ) +-- +-- @snapper out,trace 300 12 "select inst_id,sid from gv$session where username='APPS'" +-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write +-- output to both dbms_output and tracefile) +-- +-- Notes: +-- +-- Snapper does not currently detect if a session with given SID has +-- ended and been recreated between snapshots, thus it may report bogus +-- statistics for such sessions. The check and warning for that will be +-- implemented in a future version. +-- +-------------------------------------------------------------------------------- + +set termout off tab off verify off linesize 999 trimspool on trimout on null "" + +--debug: +-- set termout on serveroutput on + +-- Get parameters (future snapper v4.x extended syntax: @snapper <"begin"|"end"|sleep#> <"snap_name"|snap_count> ) +define snapper_options="&1" +define snapper_sleep="&2" +define snapper_count="&3" +define snapper_sid="&4" + + +-- The following code is required for making this script "dynamic" as due to +-- different Oracle versions, script parameters or granted privileges some +-- statements might not compile if not adjusted properly. + +define _IF_ORA12_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA12="--" +define _IF_ORA11_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA11="--" +define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" +-- /*dummy*/ -- this "dummy" is here just for avoiding VIM syntax highlighter going crazy due to previous line +define _IF_X_ACCESSIBLE="--" + +-- plsql_object_id columns available in v$session (from 10.2.0.3) +define _YES_PLSQL_OBJ_ID="--" +define _NO_PLSQL_OBJ_ID="" +-- blocking_instance available in v$session (from 10.2) +define _YES_BLK_INST="--" +define _NO_BLK_INST="" + +-- snapper v4 manual before/after snapshotting +define _MANUAL_SNAPSHOT="--" +define _USE_DBMS_LOCK="" + +-- set the noprint's value to "noprint" if you don't want these temporary variables to show up in a sqlplus spool file +-- however, setting noprint="noprint" can cause errors in Oracle SQL Developer v4.0.x for some reason (OK in v4.1) +DEF noprint="" +col snapper_ora12higher &noprint new_value _IF_ORA12_OR_HIGHER +col snapper_ora12lower &noprint new_value _IF_LOWER_THAN_ORA12 +col snapper_ora12 &noprint new_value _IF_ORA12_OR_HIGHER +col snapper_ora11higher &noprint new_value _IF_ORA11_OR_HIGHER +col snapper_ora11lower &noprint new_value _IF_LOWER_THAN_ORA11 +col dbms_system_accessible &noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLE +col x_accessible &noprint new_value _IF_X_ACCESSIBLE +col no_plsql_obj_id &noprint new_value _NO_PLSQL_OBJ_ID +col yes_plsql_obj_id &noprint new_value _YES_PLSQL_OBJ_ID +col no_blk_inst &noprint new_value _NO_BLK_INST +col yes_blk_inst &noprint new_value _YES_BLK_INST +col manual_snapshot &noprint new_value _MANUAL_SNAPSHOT +col use_dbms_lock &noprint new_value _USE_DBMS_LOCK + +col snapper_sid &noprint new_value snapper_sid + +-- sid_filter and inst_filter are the new RAC gv$ friendly way to filter sessions in Snapper v4 +def sid_filter="/**/" +def inst_filter="/**/" +col sid_filter &noprint new_value sid_filter +col inst_filter &noprint new_value inst_filter + + +-- initialize, precompute and determine stuff +var v varchar2(100) +var x varchar2(10) +var sid_filter varchar2(4000) +var inst_filter varchar2(4000) + +-- this is here for a reason +-- im extracting the first word of the snapper_sid (if its a complex expression, not just a single SID) +-- by relying on how DEF and & assignment treat spaces in strings +def ssid_begin=&snapper_sid + +declare + + o sys.dbms_describe.number_table; + p sys.dbms_describe.number_table; + l sys.dbms_describe.number_table; + a sys.dbms_describe.varchar2_table; + dty sys.dbms_describe.number_table; + def sys.dbms_describe.number_table; + inout sys.dbms_describe.number_table; + len sys.dbms_describe.number_table; + prec sys.dbms_describe.number_table; + scal sys.dbms_describe.number_table; + rad sys.dbms_describe.number_table; + spa sys.dbms_describe.number_table; + + tmp number; + lv_sid_filter varchar2(4000); + lv_inst_filter varchar2(4000); + + function get_filter(str in varchar2) return varchar2 + is + ret varchar2(1000); + begin + if str like '%@%' then + --dbms_output.put_line('get_filter:1 str= '||str); + ret := lower(trim(regexp_replace(substr(str,instr(str,'=')+1), '^(.+)@([[:digit:]\*]+)(.*)', '\1'))); + else + --dbms_output.put_line('get_filter:2 str= '||str); + ret := lower(trim(substr(str,instr(str,'=')+1))); + end if; + --dbms_output.put_line('get_filter = ' || ret); + return ret; + end get_filter; + +begin + -- compute inst_filter + case + when regexp_instr('&ssid_begin','@') = 0 then + lv_inst_filter := '/* inst_filter */ s.inst_id=USERENV(''Instance'')'; + when regexp_instr('&ssid_begin','@\*') > 0 or '&ssid_begin' like '(%' then + lv_inst_filter := '/* inst_filter */ 1=1'; + when regexp_instr('&ssid_begin','@\d+') > 0 then + lv_inst_filter := 's.inst_id = ' || regexp_replace('&ssid_begin', '^(.+)@(\d+)(.*)', '\2'); + else + lv_inst_filter := 's.inst_id=USERENV(''Instance'')'; + --when regexp_instr('&ssid_begin','@\d+') > 0 then regexp_replace(snapper_sid, '^(.+)@\d+', '\1') || ' AND inst_id = ' || regexp_replace(snapper_sid, '^(.+)@(\d+)(.*)', '\2') + end case; + + -- compute sid_filter + case + when trim(lower('&ssid_begin')) like 'con_id=%' then lv_sid_filter := 's.con_id in ('||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'sid=%' then lv_sid_filter := 's.sid in (' ||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'audsid=%' then lv_sid_filter := 's.audsid in ('||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'user=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'username=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'machine=%' then lv_sid_filter := 'lower(machine) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'program=%' then lv_sid_filter := 'lower(program) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'service=%' then lv_sid_filter := 'lower(service_name) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'module=%' then lv_sid_filter := 'lower(module) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'action=%' then lv_sid_filter := 'lower(action) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'osuser=%' then lv_sid_filter := 'lower(osuser) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'client_id=%' then lv_sid_filter := 'lower(client_identifier) like '''||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'spid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'ospid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'pid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qcsid=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qc=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'all%' then lv_sid_filter := '1=1'; + when trim(lower('&ssid_begin')) like 'bg%' then lv_sid_filter := 'type=''BACKGROUND'''; + when trim(lower('&ssid_begin')) like 'fg%' then lv_sid_filter := 'type=''USER'''; + when trim(lower('&ssid_begin')) like 'smon%' then lv_sid_filter := 'program like ''%(SMON)%'''; + when trim(lower('&ssid_begin')) like 'pmon%' then lv_sid_filter := 'program like ''%(PMON)%'''; + when trim(lower('&ssid_begin')) like 'ckpt%' then lv_sid_filter := 'program like ''%(CKPT)%'''; + when trim(lower('&ssid_begin')) like 'lgwr%' then lv_sid_filter := 'program like ''%(LG__)%'''; -- 12c multiple adaptive LGWR workers + when trim(lower('&ssid_begin')) like 'dbwr%' then lv_sid_filter := 'regexp_like(program, ''.*\((DBW.|BW..)\).*'', ''i'')'; + when trim(lower('&ssid_begin')) like 'select%' then lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; + when trim(lower('&ssid_begin')) like '(%' then lv_inst_filter := '/* inst_filter2 */ 1=1'; lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; + else lv_sid_filter := '/* sid_filter_else_cond */ s.sid in ('||get_filter('&ssid_begin')||')'; + end case; + + :inst_filter := lv_inst_filter; + :sid_filter := lv_inst_filter||' and '||lv_sid_filter; + + -- this block determines whether dbms_system.ksdwrt is accessible to us + -- dbms_describe is required as all_procedures/all_objects may show this object + -- even if its not executable by us (thanks to o7_dictionary_accessibility=false) + begin + execute immediate 'select count(*) from x$kcbwh where rownum = 1' into tmp; + :x:= ' '; -- x$ tables are accessible, so dont comment any lines out + exception + when others then null; + end; + + sys.dbms_describe.describe_procedure( + 'DBMS_SYSTEM.KSDWRT', null, null, + o, p, l, a, dty, def, inout, len, prec, scal, rad, spa + ); + + -- we never get to following statement if dbms_system is not accessible + -- as sys.dbms_describe will raise an exception + :v:= '-- dbms_system is accessible'; + +exception + when others then null; +end; +/ + +-- this query populates some sqlplus variables required for dynamic compilation used below +with mod_banner as ( + select + replace(banner,'9.','09.') banner + from + v$version + where rownum = 1 +) +select + case when substr(banner, instr(banner, 'Release ')+8,2) >= '12' then '' else '--' end snapper_ora12higher, + case when substr(banner, instr(banner, 'Release ')+8,2) < '12' then '' else '--' end snapper_ora12lower, + case when substr(banner, instr(banner, 'Release ')+8,2) = '11' then '' else '--' end snapper_ora11higher, + case when substr(banner, instr(banner, 'Release ')+8,2) < '11' then '' else '--' end snapper_ora11lower, + nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible, + nvl(:x, '--') x_accessible, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '' else '--' end yes_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '--' else '' end no_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '' else '--' end yes_plsql_obj_id, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '--' else '' end no_plsql_obj_id, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '' else '--' end manual_snapshot, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '--' else '' end use_dbms_lock, + :sid_filter sid_filter, + :inst_filter inst_filter +from + mod_banner +/ + +-- current workaround: 1st serveroutput command below is for sql developer compatibility +-- 2nd is for sqlplus, so that newlines and leading spaces get properly printed +set termout off +set serveroutput on size 1000000 +set serveroutput on size 1000000 format wrapped +set termout on + +prompt Sampling SID &4 with interval &snapper_sleep seconds, taking &snapper_count snapshots... + +-- let the Snapping start!!! +-- main() +declare + -- Snapper start + -- forward declarations + procedure output(p_txt in varchar2); + procedure fout; + + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, + p_grouplen in number default 3 + ) + return varchar2; + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) + return varchar2; + + + -- type, constant, variable declarations + + -- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_INTEGER + pls_adjust constant number(10,0) := power(2,31) - 1; + + type srec is record (ts timestamp, stype varchar2(4), inst_id number, sid number, statistic# number, value number, event_count number ); + type stab is table of srec index by pls_integer; + type ltab is table of srec index by varchar2(100); -- lookup tab for various average calculation + s1 stab; + s2 stab; + l1 ltab; + l2 ltab; + + type snrec is record (stype varchar2(4), statistic# number, name varchar2(100)); + type sntab is table of snrec index by pls_integer; + sn_tmp sntab; + sn sntab; + + type sntab_reverse is table of snrec index by varchar2(100); -- used for looking up stat id from stat name + sn_reverse sntab_reverse; + + tmp_varchar2 varchar2(1000); -- misc + + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2; + + type tmp_sestab is table of gv$session%rowtype index by pls_integer; + type sestab is table of gv$session%rowtype index by varchar2(20); + + g_sessions sestab; + g_empty_sessions sestab; + + type hc_tab is table of number index by pls_integer; -- index is sql hash value + type ses_hash_tab is table of hc_tab index by pls_integer; -- index is SID + + g_ses_hash_tab ses_hash_tab; + g_empty_ses_hash_tab ses_hash_tab; + + -- dbms_debug_vc2coll is a built-in collection present in every oracle db + g_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_empty_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_snap1 sys.dbms_debug_vc2coll; + g_snap2 sys.dbms_debug_vc2coll; + + g_ash_samples_taken number := 0; + + g_count_statname number; + g_count_eventname number; + + g_mysid number; + + i number; + a number; + b number; + + c number; + delta number; + evcnt number; + changed_values number; + pagesize number:=99999999999999; + missing_values_s1 number := 0; + missing_values_s2 number := 0; + disappeared_sid number := 0; + lv_curr_sid number := 0; -- used for determining whether to print an empty line between session stats + d1 timestamp(6); + d2 timestamp(6); + ash_date1 date; + ash_date2 date; + lv_gather varchar2(1000); + gv_header_string varchar2(1000); + lv_data_string varchar2(1000); + + lv_ash varchar2(1000); + lv_stats varchar2(1000); + + gather_stats number := 0; + gather_ash number := 0; + + g_snap_begin varchar2(1000); + g_snap_end varchar2(1000); + + -- CONFIGURABLE STUFF -- + + -- this sets what are the default ash sample TOP reporting group by columns + g_ash_columns varchar2(1000) := 'inst_id + sql_id + sql_child_number + event + wait_class'; + g_ash_columns1 varchar2(1000) := 'inst_id + event + p1 + wait_class'; + g_ash_columns2 varchar2(1000) := 'inst_id + sid + user + machine + program'; + g_ash_columns3 varchar2(1000) := 'inst_id + plsql_object_id + plsql_subprogram_id + sql_id'; + g_ash_columns4 varchar2(1000) := 'con_id + inst_id + sql_id + sql_child_number + event + wait_class'; + g_ash_columns5 varchar2(1000) := 'con_id + inst_id + event + p1 + wait_class'; + g_ash_columns6 varchar2(1000) := 'con_id + inst_id + sid + user + machine + program'; + + -- output column configuration + output_header number := 0; -- 1=true 0=false + output_username number := 1; -- v$session.username + output_inst number := 0; -- inst + output_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 0 ELSE 1 END; -- just sid + output_inst_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 1 ELSE 0 END; -- inst_id and sid together + output_time number := 0; -- time of snapshot start + output_seconds number := 0; -- seconds in snapshot (shown in footer of each snapshot too) + output_stype number := 1; -- statistic type (WAIT,WIDL(idle wait),STAT,TIME,ENQG,LATG,...) + output_sname number := 1; -- statistic name + output_delta number := 1; -- raw delta + output_delta_s number := 0; -- raw delta normalized to per second + output_hdelta number := 0; -- human readable delta + output_hdelta_s number := 1; -- human readable delta normalized to per second + output_percent number := 1; -- percent of total time/samples + output_eventcnt number := 1; -- wait event count + output_eventcnt_s number := 1; -- wait event count + output_eventavg number := 1; -- average wait duration + output_pcthist number := 1; -- percent of total visual bar (histogram) -- Histograms seem to work for me on 9.2.0.7 + - JBJ2) + + output_actses number := 1; -- show Average Active Sessions (AAS) in "ASH" activity section + output_actses_pct number := 1; -- show AAS as a percentage of a single thread time + + -- column widths in ASH report output + w_inst_id number := 4; + w_sid number := 6; + w_username number := 20; + w_machine number := 20; + w_terminal number := 20; + w_program number := 25; + w_event number := 35; + w_wait_class number := 15; + w_state number := 8; + w_p1 number := 20; + w_p2 number := 20; + w_p3 number := 20; + w_row_wait_obj# number := 10; + w_row_wait_file# number := 6; + w_row_wait_block# number := 10; + w_row_wait_row# number := 6; + w_blocking_session_status number := 15; + w_blocking_instance number := 12; + w_blocking_session number := 12; + w_sql_hash_value number := 12; + w_sql_id number := 15; + w_sql_child_number number := 9; + w_plsql_entry_object_id number := 10; + w_plsql_entry_subprogram_id number := 10; + w_plsql_object_id number := 10; + w_plsql_subprogram_id number := 10; + w_module number := 25; + w_action number := 25; + w_client_identifier number := 25; + w_service_name number := 25; + w_con_id number := 6; + + w_actses number := 8; + w_actses_pct number := 10; + + -- END CONFIGURABLE STUFF -- + + -- constants for ash collection extraction from the vc2 collection + s_inst_id constant number := 1 ; + s_sid constant number := 2 ; + s_username constant number := 3 ; + s_machine constant number := 4 ; + s_terminal constant number := 5 ; + s_program constant number := 6 ; + s_event constant number := 7 ; + s_wait_class constant number := 8 ; + s_state constant number := 9 ; + s_p1 constant number := 10 ; + s_p2 constant number := 11 ; + s_p3 constant number := 12 ; + s_row_wait_obj# constant number := 13 ; + s_row_wait_file# constant number := 14 ; + s_row_wait_block# constant number := 15 ; + s_row_wait_row# constant number := 16 ; + s_blocking_session_status constant number := 17 ; + s_blocking_instance constant number := 18 ; + s_blocking_session constant number := 19 ; + s_sql_hash_value constant number := 20 ; + s_sql_id constant number := 21 ; + s_sql_child_number constant number := 22 ; + s_plsql_entry_object_id constant number := 23 ; + s_plsql_entry_subprogram_id constant number := 24 ; + s_plsql_object_id constant number := 25 ; + s_plsql_subprogram_id constant number := 26 ; + s_module constant number := 27 ; + s_action constant number := 28 ; + s_client_identifier constant number := 29 ; + s_service_name constant number := 30 ; + s_con_id constant number := 31 ; + + -- constants for ash collection reporting, which columns to show in report + c_inst_id constant number := power(2, s_inst_id ); + c_sid constant number := power(2, s_sid ); + c_username constant number := power(2, s_username ); + c_machine constant number := power(2, s_machine ); + c_terminal constant number := power(2, s_terminal ); + c_program constant number := power(2, s_program ); + c_event constant number := power(2, s_event ); + c_wait_class constant number := power(2, s_wait_class ); + c_state constant number := power(2, s_state ); + c_p1 constant number := power(2, s_p1 ); + c_p2 constant number := power(2, s_p2 ); + c_p3 constant number := power(2, s_p3 ); + c_row_wait_obj# constant number := power(2, s_row_wait_obj# ); + c_row_wait_file# constant number := power(2, s_row_wait_file# ); + c_row_wait_block# constant number := power(2, s_row_wait_block# ); + c_row_wait_row# constant number := power(2, s_row_wait_row# ); + c_blocking_session_status constant number := power(2, s_blocking_session_status ); + c_blocking_instance constant number := power(2, s_blocking_instance ); + c_blocking_session constant number := power(2, s_blocking_session ); + c_sql_hash_value constant number := power(2, s_sql_hash_value ); + c_sql_id constant number := power(2, s_sql_id ); + c_sql_child_number constant number := power(2, s_sql_child_number ); + c_plsql_entry_object_id constant number := power(2, s_plsql_entry_object_id ); + c_plsql_entry_subprogram_id constant number := power(2, s_plsql_entry_subprogram_id); + c_plsql_object_id constant number := power(2, s_plsql_object_id ); + c_plsql_subprogram_id constant number := power(2, s_plsql_subprogram_id ); + c_module constant number := power(2, s_module ); + c_action constant number := power(2, s_action ); + c_client_identifier constant number := power(2, s_client_identifier ); + c_service_name constant number := power(2, s_service_name ); + c_con_id constant number := power(2, s_con_id ); + + + /*--------------------------------------------------- + -- proc for outputting data to trace or dbms_output + ---------------------------------------------------*/ + procedure output(p_txt in varchar2) is + begin + + if (getopt('&snapper_options', 'out') is not null) + or + (getopt('&snapper_options', 'out') is null and getopt('&snapper_options', 'trace') is null) + then + dbms_output.put_line(p_txt); + end if; + + -- The block below is a sqlplus trick for conditionally commenting out PL/SQL code + &_IF_DBMS_SYSTEM_ACCESSIBLE + if getopt('&snapper_options', 'trace') is not null then + sys.dbms_system.ksdwrt(1, p_txt); + sys.dbms_system.ksdfls; + end if; + -- */ + end; -- output + + /*--------------------------------------------------- + -- function for converting interval datatype to microseconds + ---------------------------------------------------*/ + function get_seconds(i interval day to second) return number + as + s NUMBER; + begin + s := to_number(extract(second from i)) + + to_number(extract(minute from i)) * 60 + + to_number(extract(hour from i)) * 60 * 60 + + to_number(extract(day from i)) * 60 * 60 * 24; + --output('get_seconds '||to_char(i)||' = '||to_char(s)); + return s; + end get_seconds; + + /*--------------------------------------------------- + -- proc for outputting data, utilizing global vars + ---------------------------------------------------*/ + procedure fout is + l_output_username VARCHAR2(100); + gsid varchar2(20); + begin + --if s2(b).stype='WAIT' then output( 'DEBUG WAIT ' || sn(s2(b).statistic#).name || ' ' || delta ); end if; + --output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# ); + --output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + gsid := trim(to_char(s2(b).inst_id))||','||trim(to_char(s2(b).sid)); + + if output_username = 1 then + begin + l_output_username := nvl( g_sessions(gsid).username, substr(g_sessions(gsid).program, instr(g_sessions(gsid).program,'(')) ); + exception + when no_data_found then l_output_username := 'error'; + when others then raise; + end; + end if; + + -- DEBUG + --output('before'); + --output (CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END); + --output('after'); + + output( CASE WHEN output_header = 1 THEN 'SID= ' END + || CASE WHEN output_inst = 1 THEN to_char(s2(b).inst_id, '9999')||', ' END + || CASE WHEN output_sid = 1 THEN to_char(s2(b).sid,'999999')||', ' END + || CASE WHEN output_inst_sid = 1 THEN to_char(s2(b).sid,'99999')||' '||lpad('@'||trim(to_char(s2(b).inst_id, '99')),3)||', ' END + || CASE WHEN output_username = 1 THEN rpad(CASE s2(b).sid WHEN -1 THEN ' ' ELSE NVL(l_output_username, ' ') END, 10)||', ' END + || CASE WHEN output_time = 1 THEN to_char(d1, 'YYYYMMDD HH24:MI:SS')||', ' END + || CASE WHEN output_seconds = 1 THEN to_char(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end, '9999999')||', ' END + || CASE WHEN output_stype = 1 THEN s2(b).stype||', ' END + || CASE WHEN output_sname = 1 THEN rpad(sn(s2(b).statistic#).name, 58, ' ')||', ' END + || CASE WHEN output_delta = 1 THEN to_char(delta, '999999999999')||', ' END + || CASE WHEN output_delta_s = 1 THEN to_char(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end),'999999999')||', ' END + || CASE WHEN output_hdelta = 1 THEN lpad(tptformat(delta, s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_hdelta_s = 1 THEN lpad(tptformat(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_percent = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT','WIDL') THEN to_char(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 10000, '9999.9')||'%' ELSE ' ' END END||', ' + || CASE WHEN output_pcthist = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT','WIDL') THEN rpad(rpad('[', ceil(round(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 100000,1))+1, CASE WHEN s2(b).stype IN ('WAIT','WIDL') THEN 'W' WHEN sn(s2(b).statistic#).name = 'DB CPU' THEN '@' ELSE '#' END),11,' ')||']' ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt = 1 THEN CASE WHEN s2(b).stype IN ('WAIT','WIDL') THEN to_char(evcnt, '99999999') ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt_s = 1 THEN CASE WHEN s2(b).stype IN ('WAIT','WIDL') THEN lpad(tptformat((evcnt / case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), 'STAT' ), 10, ' ') ELSE ' ' END END||', ' + || CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT','WIDL') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END + ); + + end; + + + /*--------------------------------------------------- + -- lookup stat delta helper calculator (l2.value - l1.value) + ---------------------------------------------------*/ + function get_delta(metric_id in varchar2) return number + is + rec1 srec; + rec2 srec; + + val1 number; + val2 number; + + d number; + begin + begin + val1 := l1(metric_id).value; + exception + when no_data_found then val1 := 0; + end; + + begin + val2 := l2(metric_id).value; + exception + when no_data_found then val2 := 0; + end; + + d := val2 - NVL(val1, 0); + return d; + end get_delta; + + /*--------------------------------------------------- + -- delta helper function for convenience - it allows to specify any metric delta, if not specified then get current one + ---------------------------------------------------*/ + function gd(c in srec, metric_type in varchar2 DEFAULT NULL, metric_name in varchar2 DEFAULT NULL) return number + is + str varchar2(1000); + tmp_delta number; + begin + if metric_type || metric_name is null then + str := c.stype||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(c.statistic#,'999999999999999999999999')); + else + begin + str := trim(metric_type)||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(sn_reverse(metric_type||','||metric_name).statistic#)); + exception + when no_data_found then return 0; + end; + end if; + tmp_delta := get_delta(str); + --output('tmp_delta '||c.stype||' '||tmp_delta); + return tmp_delta; + -- return get_delta(str); + end; + + /*--------------------------------------------------- + -- function for calculating useful averages and ratios between metrics + -- it is totally OK to show ratios together with raw values they have been derived from + ---------------------------------------------------*/ + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2 + is + ret varchar2(1000); + mt varchar2(100) := c.stype; -- metric_type + mn varchar2(100) := sn(c.statistic#).name; -- metric_name + begin + case + when mt = 'STAT' then + case + when mn LIKE 'session _ga memory%' then ret := lpad( tptformat(gd(c), 'STAT'), 10) || ' actual value in end of snapshot'; + when mn LIKE '%ed%cursors current' then ret := lpad( tptformat(gd(c), 'STAT'), 10) || ' actual value in end of snapshot'; + when mn = 'file io service time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'physical read total IO requests')+gd(c, 'STAT', 'physical write total IO requests'),0), 'TIME'), 10) || ' bad guess of IO service time per IO request'; + when mn = 'file io wait time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'physical read total IO requests')+gd(c, 'STAT', 'physical write total IO requests'),0), 'TIME'), 10) || ' bad guess of IO wait time per IO request'; + when mn = 'redo synch time overhead (usec)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo synch writes' ),0), 'TIME'), 10) || ' FG wakeup overhead per log file sync'; + when mn = 'redo write time' then ret := lpad( tptformat(gd(c) * 10000 / nullif(gd(c, 'STAT', 'redo writes' ),0), 'TIME'), 10) || ' per redo write'; + when mn = 'recursive calls' then ret := lpad( tptformat(gd(c, 'STAT', 'recursive cpu usage') * 10000 / nullif(gd(c), 0), 'TIME'), 10) || ' recursive CPU per recursive call'; + when mn = 'recursive cpu usage' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total recursive CPU usage'; + when mn = 'parse time cpu' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total parse time CPU'; + when mn = 'parse time elapsed' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total parse time elapsed'; + when mn = 'CPU used when call started' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total CPU used when call started'; + when mn = 'CPU used by this session' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total CPU used by this session'; + when mn = 'DB Time' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total DB Time'; + when mn = 'physical write IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical write bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical write total IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical write total bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read total IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical write total multi block requests' then ret:= lpad( tptformat(gd(c, 'STAT', 'physical write total IO requests') - gd(c), mt), 10) || ' total single block write requests' ; + when mn = 'physical read total multi block requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total IO requests') - gd(c), mt), 10) || ' total single block read requests' ; + when mn = 'physical read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read bytes' ) / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total bytes' ) / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'bytes sent via SQL*Net to client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes received via SQL*Net from client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes sent via SQL*Net to dblink' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from dblink'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes received via SQL*Net from dblink' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from dblink'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'redo size' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'user commits' ),0), mt), 10) || ' bytes per user commit'; + when mn = 'execute count' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (total)' ),0), mt), 10) || ' executions per parse'; + when mn = 'parse count (total)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (hard)' ),0), mt), 10) || ' softparses per hardparse'; + when mn = 'session cursor cache hits' then ret := lpad( tptformat(gd(c) - (gd(c, 'STAT', 'parse count (total)' ) ), mt), 10) || ' softparses avoided thanks to cursor cache'; + when mn = 'session logical reads' then ret := lpad( tptformat(gd(c) + (gd(c, 'STAT', 'buffer is pinned count' ) ), mt), 10) || ' total buffer visits'; + when mn = 'buffer is pinned count' then ret := lpad( tptformat(gd(c) / nullif(gd(c) + gd(c, 'STAT', 'session logical reads'),0) * 100, mt), 10) || ' % buffer gets avoided thanks to buffer pin caching'; + else ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'execute count'),0), mt), 10) || ' per execution' ; + end case; -- mt=stat, mn + when mt = 'TIME' then + -- this is ugly and wrong at the moment - will refactor some day + case + when mn = 'DB time' or mn= 'background elapsed time' then ret := lpad(tptformat((get_seconds(d2 - d1)*1000000 - ( + gd(c) + /*+ gd(c, 'DB CPU', 'TIME') */ + + gd(c, 'WAIT', 'pmon timer') + + gd(c, 'WAIT', 'VKTM Logical Idle Wait') + + gd(c, 'WAIT', 'VKTM Init Wait for GSGA') + + gd(c, 'WAIT', 'IORM Scheduler Slave Idle Wait') + + gd(c, 'WAIT', 'rdbms ipc message') + + gd(c, 'WAIT', 'OFS idle') + + gd(c, 'WAIT', 'i/o slave wait') + + gd(c, 'WAIT', 'VKRM Idle') + + gd(c, 'WAIT', 'wait for unread message on broadcast channel') + + gd(c, 'WAIT', 'wait for unread message on multiple broadcast channels') + + gd(c, 'WAIT', 'class slave wait') + + gd(c, 'WAIT', 'PING') + + gd(c, 'WAIT', 'watchdog main loop') + + gd(c, 'WAIT', 'process in prespawned state') + + gd(c, 'WAIT', 'DIAG idle wait') + + gd(c, 'WAIT', 'ges remote message') + + gd(c, 'WAIT', 'gcs remote message') + + gd(c, 'WAIT', 'heartbeat monitor sleep') + + gd(c, 'WAIT', 'GCR sleep') + + gd(c, 'WAIT', 'SGA: MMAN sleep for component shrink') + + gd(c, 'WAIT', 'MRP redo arrival') + + gd(c, 'WAIT', 'LNS ASYNC archive log') + + gd(c, 'WAIT', 'LNS ASYNC dest activation') + + gd(c, 'WAIT', 'LNS ASYNC end of log') + + gd(c, 'WAIT', 'simulated log write delay') + + gd(c, 'WAIT', 'heartbeat redo informer') + + gd(c, 'WAIT', 'LGWR real time apply sync') + + gd(c, 'WAIT', 'LGWR worker group idle') + + gd(c, 'WAIT', 'parallel recovery slave idle wait') + + gd(c, 'WAIT', 'Backup Appliance waiting for work') + + gd(c, 'WAIT', 'Backup Appliance waiting restore start') + + gd(c, 'WAIT', 'Backup Appliance Surrogate wait') + + gd(c, 'WAIT', 'Backup Appliance Servlet wait') + + gd(c, 'WAIT', 'Backup Appliance Comm SGA setup wait') + + gd(c, 'WAIT', 'LogMiner builder: idle') + + gd(c, 'WAIT', 'LogMiner builder: branch') + + gd(c, 'WAIT', 'LogMiner preparer: idle') + + gd(c, 'WAIT', 'LogMiner reader: log (idle)') + + gd(c, 'WAIT', 'LogMiner reader: redo (idle)') + + gd(c, 'WAIT', 'LogMiner client: transaction') + + gd(c, 'WAIT', 'LogMiner: other') + + gd(c, 'WAIT', 'LogMiner: activate') + + gd(c, 'WAIT', 'LogMiner: reset') + + gd(c, 'WAIT', 'LogMiner: find session') + + gd(c, 'WAIT', 'LogMiner: internal') + + gd(c, 'WAIT', 'Logical Standby Apply Delay') + + gd(c, 'WAIT', 'parallel recovery coordinator waits for slave cleanup') + + gd(c, 'WAIT', 'parallel recovery coordinator idle wait') + + gd(c, 'WAIT', 'parallel recovery control message reply') + + gd(c, 'WAIT', 'parallel recovery slave next change') + + gd(c, 'WAIT', 'recovery sender idle wait') + + gd(c, 'WAIT', 'recovery receiver idle wait') + + gd(c, 'WAIT', 'recovery merger idle wait ') + + gd(c, 'WAIT', 'PX Deq: Txn Recovery Start') + + gd(c, 'WAIT', 'PX Deq: Txn Recovery Reply') + + gd(c, 'WAIT', 'fbar timer') + + gd(c, 'WAIT', 'smon timer') + + gd(c, 'WAIT', 'PX Deq: Metadata Update') + + gd(c, 'WAIT', 'Space Manager: slave idle wait') + + gd(c, 'WAIT', 'PX Deq: Index Merge Reply') + + gd(c, 'WAIT', 'PX Deq: Index Merge Execute') + + gd(c, 'WAIT', 'PX Deq: Index Merge Close') + + gd(c, 'WAIT', 'PX Deq: kdcph_mai') + + gd(c, 'WAIT', 'PX Deq: kdcphc_ack') + + gd(c, 'WAIT', 'imco timer') + + gd(c, 'WAIT', 'virtual circuit next request') + + gd(c, 'WAIT', 'shared server idle wait') + + gd(c, 'WAIT', 'dispatcher timer') + + gd(c, 'WAIT', 'cmon timer') + + gd(c, 'WAIT', 'pool server timer') + + gd(c, 'WAIT', 'lreg timer') + + gd(c, 'WAIT', 'JOX Jit Process Sleep') + + gd(c, 'WAIT', 'jobq slave wait') + + gd(c, 'WAIT', 'pipe get') + + gd(c, 'WAIT', 'PX Deque wait') + + gd(c, 'WAIT', 'PX Idle Wait') + + gd(c, 'WAIT', 'PX Deq: Join ACK') + + gd(c, 'WAIT', 'PX Deq Credit: need buffer') + + gd(c, 'WAIT', 'PX Deq Credit: send blkd') + + gd(c, 'WAIT', 'PX Deq: Msg Fragment') + + gd(c, 'WAIT', 'PX Deq: Parse Reply') + + gd(c, 'WAIT', 'PX Deq: Execute Reply') + + gd(c, 'WAIT', 'PX Deq: Execution Msg') + + gd(c, 'WAIT', 'PX Deq: Table Q Normal') + + gd(c, 'WAIT', 'PX Deq: Table Q Sample') + + gd(c, 'WAIT', 'REPL Apply: txns') + + gd(c, 'WAIT', 'REPL Capture/Apply: messages') + + gd(c, 'WAIT', 'REPL Capture: archive log') + + gd(c, 'WAIT', 'single-task message') + + gd(c, 'WAIT', 'SQL*Net message from client') + + gd(c, 'WAIT', 'SQL*Net vector message from client') + + gd(c, 'WAIT', 'SQL*Net vector message from dblink') + + gd(c, 'WAIT', 'PL/SQL lock timer') + + gd(c, 'WAIT', 'Streams AQ: emn coordinator idle wait') + + gd(c, 'WAIT', 'EMON slave idle wait') + + gd(c, 'WAIT', 'Emon coordinator main loop') + + gd(c, 'WAIT', 'Emon slave main loop') + + gd(c, 'WAIT', 'Streams AQ: waiting for messages in the queue') + + gd(c, 'WAIT', 'Streams AQ: waiting for time management or cleanup tasks') + + gd(c, 'WAIT', 'Streams AQ: delete acknowledged messages') + + gd(c, 'WAIT', 'Streams AQ: deallocate messages from Streams Pool') + + gd(c, 'WAIT', 'Streams AQ: qmn coordinator idle wait') + + gd(c, 'WAIT', 'Streams AQ: qmn slave idle wait') + + gd(c, 'WAIT', 'AQ: 12c message cache init wait') + + gd(c, 'WAIT', 'AQ Cross Master idle') + + gd(c, 'WAIT', 'AQPC idle') + + gd(c, 'WAIT', 'Streams AQ: load balancer idle') + + gd(c, 'WAIT', 'Sharded Queues : Part Maintenance idle') + + gd(c, 'WAIT', 'REPL Capture/Apply: RAC AQ qmn coordinator') + + gd(c, 'WAIT', 'HS message to agent') + + gd(c, 'WAIT', 'ASM background timer') + + gd(c, 'WAIT', 'iowp msg') + + gd(c, 'WAIT', 'iowp file id') + + gd(c, 'WAIT', 'netp network') + + gd(c, 'WAIT', 'gopp msg') + + gd(c, 'WAIT', 'auto-sqltune: wait graph update') + + gd(c, 'WAIT', 'WCR: replay client notify') + + gd(c, 'WAIT', 'WCR: replay clock') + + gd(c, 'WAIT', 'WCR: replay paused') + + gd(c, 'WAIT', 'JS external job') + + gd(c, 'WAIT', 'cell worker idle') + )) / (get_seconds(d2 - d1)*1000000) * 100 + , 'STAT'), 10) || ' % unaccounted time' ; + else null; + end case; -- mt=time, mn + else null; + end case; -- mt + return ret; + end get_useful_average; + + /*--------------------------------------------------- + -- function for converting large numbers to human-readable format + ---------------------------------------------------*/ + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, -- for KiB/MiB formatting use + p_grouplen in number default 3 -- p_base=2 and p_grouplen=10 + ) + return varchar2 + is + begin + if p_num = 0 then return '0'; end if; + if p_num IS NULL then return '~'; end if; + + if p_stype in ('WAIT','WIDL','TIME') then + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then 'us' + when 1 then 'us' + when p_grouplen*1 then 'ms' + when p_grouplen*2 then 's' + when p_grouplen*3 then 'ks' + when p_grouplen*4 then 'Ms' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us' + end; + + else + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then '' + when 1 then '' + when p_grouplen*1 then 'k' + when p_grouplen*2 then 'M' + when p_grouplen*3 then 'G' + when p_grouplen*4 then 'T' + when p_grouplen*5 then 'P' + when p_grouplen*6 then 'E' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ) + end; + + end if; + + end; -- tptformat + + /*--------------------------------------------------- + -- simple function for parsing arguments from parameter string + ---------------------------------------------------*/ + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) return varchar2 + is + ret varchar(1000) := NULL; + begin + + -- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' ); + -- dbms_output.put('p_extract = ['||p_extract||'] ' ); + + if lower(p_parvalues) like lower(p_extract)||'%' + or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then + + ret := + nvl ( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract), + case + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) + when 0 then length(p_parvalues) + else + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) - 1 + end + ) + , chr(0) -- in case parameter was specified but with no value + ); + + else + ret := null; -- no parameter found + end if; + + -- dbms_output.put_line('ret = ['||replace(ret,chr(0),'\0')||']'); + + return ret; + + end; -- getopt + + /*--------------------------------------------------- + -- proc for getting session list with username, osuser, machine etc + ---------------------------------------------------*/ + procedure get_sessions is + tmp_sessions tmp_sestab; + begin + + select /*+ unnest */ /* get_session_list:1 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and ( + &sid_filter + ) ; + + g_sessions := g_empty_sessions; + + for i in 1..tmp_sessions.count loop + g_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + end; -- get_sessions + + /*--------------------------------------------------- + -- function for getting session list with username, osuser, machine etc + -- this func does not update the g_sessions global array but returns session info as return value + ---------------------------------------------------*/ + function get_sessions return sestab is + tmp_sessions tmp_sestab; + l_return_sessions sestab; + begin + + select /*+ unnest */ /* get_session_list:2 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and (&sid_filter) ; + + for i in 1..tmp_sessions.count loop + --output('get_sessions i='||i||' sid='||tmp_sessions(i).sid); + l_return_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + return l_return_sessions; + + end; -- get_sessions + + + /*--------------------------------------------------- + -- functions for extracting and converting gv$session + -- records to varchar2 + ---------------------------------------------------*/ + function sitem(p in varchar2) return varchar2 as + begin + return '<'||translate(p, '<>', '__')||'>'; + end; -- sitem varchar2 + + function sitem(p in number) return varchar2 as + begin + return '<'||to_char(p)||'>'; + end; -- sitem number + + function sitem(p in date) return varchar2 as + begin + return '<'||to_char(p, 'YYYY-MM-DD HH24:MI:SS')||'>'; + end; -- sitem date + + function sitem_raw(p in raw) return varchar2 as + begin + return '<'||upper(rawtohex(p))||'>'; + end; -- sitem_raw + + + /*--------------------------------------------------- + -- proc for resetting the snapper ash array + ---------------------------------------------------*/ + procedure reset_ash is + begin + g_ash_samples_taken := 0; + -- clear g_ash + g_ash := new sys.dbms_debug_vc2coll(); + end; -- reset_ash + + + /*--------------------------------------------------- + -- proc for getting ash style samples from gv$session + ---------------------------------------------------*/ + procedure extract_ash is + ash_i varchar2(30); + s gv$session%rowtype; + + begin + -- keep track how many times we sampled gv$session so we could calculate averages later on + g_ash_samples_taken := g_ash_samples_taken + 1; + --output('g_sessions.count='||g_sessions.count); + ash_i := g_sessions.first; + + while ash_i is not null loop + + s := g_sessions(ash_i); + if -- active, on cpu + (s.status = 'ACTIVE' and s.state != 'WAITING' and s.sid != g_mysid) + or -- active, waiting for non-idle wait + (s.status = 'ACTIVE' and s.state = 'WAITING' and s.wait_class != 'Idle' and s.sid != g_mysid) + then + --output('extract_ash: i='||i||' sid='||s.sid||' hv='||s.sql_hash_value||' sqlid='||s.sql_id); + -- if not actually waiting for anything, clear the past wait event details + if s.state != 'WAITING' then + s.state:='ON CPU'; + s.event:='ON CPU'; + s.wait_class:='ON CPU'; --TODO: What do we need to do for 9i here? + s.p1:=NULL; + s.p2:=NULL; + s.p3:=NULL; + end if; + + g_ash.extend; + + -- max length 1000 bytes (due to dbms_debug_vc2coll) + g_ash(g_ash.count) := substr( + sitem(s.inst_id) -- 1 + ||sitem(s.sid) -- 2 + ||sitem(s.username) -- 3 -- 30 bytes + ||sitem(s.machine) -- 4 -- 64 bytes + ||sitem(s.terminal) -- 5 -- 30 bytes + ||sitem(s.program) -- 6 -- 48 bytes + ||sitem(s.event) -- 7 -- 64 bytes + ||sitem(s.wait_class) -- 8 -- 64 bytes, 10g+ + ||sitem(s.state) -- 9 + ||sitem(s.p1) -- 10 + ||sitem(s.p2) -- 11 + ||sitem(s.p3) -- 12 + ||sitem(s.row_wait_obj#) -- 13 + ||sitem(s.row_wait_file#) -- 14 + ||sitem(s.row_wait_block#) -- 15 + ||sitem(s.row_wait_row#) -- 16 + ||sitem(s.blocking_session_status) -- 17 -- 10g+ + &_NO_BLK_INST ||sitem('N/A') -- 17 -- 10gR2+ + &_YES_BLK_INST ||sitem(s.blocking_instance) -- 18 -- 10gR2+ + ||sitem(s.blocking_session) -- 19 -- 10g+ + ||sitem(s.sql_hash_value) -- 20 + ||sitem(s.sql_id) -- 21 -- 10g+ + ||sitem(s.sql_child_number) -- 22 -- 10g+ + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 23 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 24 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 25 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 26 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_object_id) -- 23 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_subprogram_id) -- 24 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_object_id) -- 25 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_subprogram_id) -- 26 + ||sitem(s.module) -- 27 -- 48 bytes + ||sitem(s.action) -- 28 -- 32 bytes + ||sitem(s.client_identifier) -- 29 -- 64 bytes + ||sitem(s.service_name) -- 30 -- 64 bytes, 10g+ + &_IF_ORA12_OR_HIGHER ||sitem(s.con_id) -- 31 -- 12c+ + &_IF_LOWER_THAN_ORA12 ||sitem('N/A') -- 31 + , 1, 1000); + + end if; -- sample is of an active session + + ash_i := g_sessions.next(ash_i); + + end loop; + + exception + when no_data_found then output('error in extract_ash(): no_data_found for item '||i); + end; -- extract_ash + + + /*--------------------------------------------------- + -- proc for querying performance data into collections + ---------------------------------------------------*/ + procedure snap( p_snapdate out timestamp, p_stats out stab, l_stats out ltab, p_stats_string out sys.dbms_debug_vc2coll) is + + lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options', 'sinclude=' )), '%'); + lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options', 'linclude=' )), '%'); + lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options', 'tinclude=' )), '%'); + lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options', 'winclude=' )), '%'); + + lstr varchar2(1000); + + begin + + p_snapdate := systimestamp; + + select /* get_session_stats */ p_snapdate ts, snapper_stats.* + bulk collect into p_stats + from ( + select 'STAT' stype, s.inst_id, s.sid, ss.statistic# - pls_adjust statistic#, ss.value, null event_count + from gv$session s, gv$sesstat ss + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = ss.inst_id + and s.sid = ss.sid + and (lv_gather like '%s%' or lv_gather like '%a%') + and ss.statistic# in (select statistic# from v$statname + where lower(name) like '%'||lv_include_stat||'%' + or regexp_like (name, lv_include_stat, 'i') + ) + -- + union all + select + CASE WHEN en.wait_class = 'Idle' THEN 'WIDL' ELSE 'WAIT' END, s.inst_id, s.sid, + en.event# + (select count(*) from v$statname) + 1 - pls_adjust, + nvl(se.time_waited_micro,0) + ( decode(se.event||s.state, s.event||'WAITING', + CASE WHEN s.seconds_in_wait > 1300000000 THEN 0 ELSE s.seconds_in_wait END -- bug in v$session + , 0) * 1000000 ) value, total_waits event_count + from gv$session s, gv$session_event se, v$event_name en + where &sid_filter + and s.sid = se.sid + and s.inst_id = se.inst_id + and se.event = en.name + --and (se.inst_id, se.sid) in (&snapper_sid) + and (lv_gather like '%w%' or lv_gather like '%a%') + and en.event# in (select event# from v$event_name + where lower(name) like '%'||lv_include_wait||'%' + or regexp_like (name, lv_include_wait, 'i') + ) + -- + union all + select 'TIME' stype, s.inst_id, s.sid, st.stat_id - pls_adjust statistic#, st.value, null event_count + from gv$session s, gv$sess_time_model st + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = st.inst_id + and s.sid = st.sid + and (lv_gather like '%t%' or lv_gather like '%a%') + and st.stat_id in (select stat_id from gv$sys_time_model + where lower(stat_name) like '%'||lv_include_time||'%' + or regexp_like (stat_name, lv_include_time, 'i') + ) + -- + union all + select 'LATG', s.inst_id, -1 sid, + s.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + s.gets + s.immediate_gets value, null event_count + from gv$latch s + where &inst_filter + and (lv_gather like '%l%' or lv_gather like '%a%') + and latch# in (select latch# from v$latchname + where lower(name) like '%'||lv_include_latch||'%' + or regexp_like (name, lv_include_latch, 'i') + ) + -- + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 union all + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.why0+s.why1+s.why2 value, null event_count + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 from x$kcbsw s, x$kcbwh w + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 where + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx = w.indx + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and s.why0+s.why1+s.why2 > 0 + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and (lv_gather like '%b%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER union all + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER sw.indx + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.why0+why.why1+why.why2+sw.other_wait value, null event_count + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER from + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbuwhy why, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbwh dsc, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbsw sw + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER where + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.indx = dsc.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = dsc.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.why0 + why.why1 + why.why2 + sw.other_wait > 0 + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER -- deliberate cartesian join + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', s.inst_id, -1 sid, + ascii(substr(s.eq_type,1,1))*256 + ascii(substr(s.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + s.total_req# value, null event_count + from gv$enqueue_stat s + where &inst_filter + and (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_stats + order by inst_id, sid, stype, statistic#; + + if p_stats.COUNT > 0 then + -- l_stats is an associative array for stats lookup, used for the useful averages calculation + -- p_stats_string is a dbms_debug_vc2coll collection datatype for "persisting" stats values across snapper DB calls (for "before" and "after" snaps) + p_stats_string := sys.dbms_debug_vc2coll(); + for s in p_stats.first..p_stats.last loop + -- type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + + if g_snap_begin is not null then + p_stats_string.extend(); + p_stats_string(s) := TO_CHAR(p_stats(s).ts, 'YYYY-MM-DD HH24:MI:SS.FF') ||','|| + p_stats(s).stype ||','|| + TO_CHAR(p_stats(s).inst_id) ||','|| + TO_CHAR(p_stats(s).sid) ||','|| + TRIM(TO_CHAR(p_stats(s).statistic#, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).value, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).event_count,'999999999999999999999999')); + --output('p_stats.p_stats_string='||p_stats_string(s)); + end if; + end loop; -- s in (p_stats) + end if; -- p.stats.COUNT > 0 + end snap; + + + /*--------------------------------------------------- + -- proc for reversing the string-normalized + -- stats array into lookup tables/collections + ---------------------------------------------------*/ + procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out timestamp, p_stats out stab, l_stats out ltab) + is + lstr varchar2(1000); + lv_rec srec; + begin + p_snapdate := NULL; + --type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + for s in p_string_stats.first .. p_string_stats.last loop + lv_rec.ts := TO_TIMESTAMP(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 1),',',''), 'YYYY-MM-DD HH24:MI:SS.FF'); + lv_rec.stype := replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 2),',',''); + lv_rec.inst_id := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 3),',','')); + lv_rec.sid := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 4),',','')); + lv_rec.statistic# := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 5),',','')); + lv_rec.value := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 6),',','')); + lv_rec.event_count := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 7),',','')); + --output('snap_from_stats_string.event_count = '||to_char(lv_rec.event_count)); + + p_stats(s) := lv_rec; + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + end loop; + + p_snapdate := lv_rec.ts; + end snap_from_stats_string; + + /*--------------------------------------------------- + -- proc for dumping ASH data out in grouped + -- and ordered fashion + ---------------------------------------------------*/ + procedure out_ash( p_ash_columns in varchar2, p_topn in number := 10 ) as + + -- whether to print given column or not + p_inst_id number := 0; + p_sid number := 0; + p_username number := 0; + p_machine number := 0; + p_terminal number := 0; + p_program number := 0; + p_event number := 0; + p_wait_class number := 0; + p_state number := 0; + p_p1 number := 0; + p_p2 number := 0; + p_p3 number := 0; + p_row_wait_obj# number := 0; + p_row_wait_file# number := 0; + p_row_wait_block# number := 0; + p_row_wait_row# number := 0; + p_blocking_session_status number := 0; + p_blocking_instance number := 0; + p_blocking_session number := 0; + p_sql_hash_value number := 0; + p_sql_id number := 0; + p_sql_child_number number := 0; + p_plsql_entry_object_id number := 0; + p_plsql_entry_subprogram_id number := 0; + p_plsql_object_id number := 0; + p_plsql_subprogram_id number := 0; + p_module number := 0; + p_action number := 0; + p_client_identifier number := 0; + p_service_name number := 0; + p_con_id number := 0; + + -- temporary variables for holding session details (for later formatting) + o_inst_id varchar2(100); + o_sid varchar2(100); + o_username varchar2(100); + o_machine varchar2(100); + o_terminal varchar2(100); + o_program varchar2(100); + o_event varchar2(100); + o_wait_class varchar2(100); + o_state varchar2(100); + o_p1 varchar2(100); + o_p2 varchar2(100); + o_p3 varchar2(100); + o_row_wait_obj# varchar2(100); + o_row_wait_file# varchar2(100); + o_row_wait_block# varchar2(100); + o_row_wait_row# varchar2(100); + o_blocking_session_status varchar2(100); + o_blocking_instance varchar2(100); + o_blocking_session varchar2(100); + o_sql_hash_value varchar2(100); + o_sql_id varchar2(100); + o_sql_child_number varchar2(100); + o_plsql_entry_object_id varchar2(100); + o_plsql_entry_subprogram_id varchar2(100); + o_plsql_object_id varchar2(100); + o_plsql_subprogram_id varchar2(100); + o_module varchar2(100); + o_action varchar2(100); + o_client_identifier varchar2(100); + o_service_name varchar2(100); + o_con_id varchar2(100); + + -- helper local vars + l_ash_grouping number := 0; + l_output_line varchar2(4000); + l_ash_header_line varchar2(4000); + + begin + + -- bail out if no ASH samples recorded + if g_ash.count = 0 then + output(' '); + return; + end if; + + + l_ash_header_line := ''; + if output_actses = 1 then l_ash_header_line := l_ash_header_line || ' ActSes'; end if; + if output_actses_pct = 1 then l_ash_header_line := l_ash_header_line || ' %Thread'; end if; + + -- ash,ash1,ash2,ash3,ash4,ash5,ash6 parameter column group tokenizer + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + -- supported ASH column names + case s.token + -- actual column names in gv$session + when 'inst_id' then l_ash_grouping := l_ash_grouping + c_inst_id ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('INST_ID' , w_inst_id , ' '); + when 'con_id' then l_ash_grouping := l_ash_grouping + c_con_id ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('CON_ID' , w_con_id , ' '); + when 'sid' then l_ash_grouping := l_ash_grouping + c_sid ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('SID' , w_sid , ' '); + when 'username' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'machine' then l_ash_grouping := l_ash_grouping + c_machine ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MACHINE' , w_machine , ' '); + when 'terminal' then l_ash_grouping := l_ash_grouping + c_terminal ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('TERMINAL' , w_terminal , ' '); + when 'program' then l_ash_grouping := l_ash_grouping + c_program ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PROGRAM' , w_program , ' '); + when 'event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_class' then l_ash_grouping := l_ash_grouping + c_wait_class ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('WAIT_CLASS' , w_wait_class , ' '); + when 'state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + when 'p1' then l_ash_grouping := l_ash_grouping + c_p1 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P1' , w_p1 , ' '); + when 'p2' then l_ash_grouping := l_ash_grouping + c_p2 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P2' , w_p2 , ' '); + when 'p3' then l_ash_grouping := l_ash_grouping + c_p3 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P3' , w_p3 , ' '); + when 'row_wait_obj#' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'row_wait_file#' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'row_wait_block#' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row_wait_row#' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'blocking_session_status' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'blocking_instance' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'blocking_session' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql_hash_value' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sql_id' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'sql_child_number' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_entry_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_entry_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'module' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'action' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'client_identifier' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service_name' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'obj' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'file' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'block' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'bss' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'bsi' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'bs' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sqlid' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'child' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_eoid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_esubpid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_oid' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subpid' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'mod' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'act' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'cid' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + when 'wait_event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + else + null; + raise_application_error(-20001, 'Snapper: Invalid ASH column name, search for "ASH column name"'||chr(10)||'in snapper.sql script to see supported column names.'||chr(10)||sqlerrm); + end case; -- case s.token + + end loop; -- tokenizer + + output(' '); + output(lpad('-',length(l_ash_header_line),'-')); + output(l_ash_header_line); + output(lpad('-',length(l_ash_header_line),'-')); + + -- this is needed for "easy" sorting and group by ops (without any custom stored object types!) + for i in ( + with /* get_aggregates_from_ash */ raw_records as ( + select column_value rec from table(cast(g_ash as sys.dbms_debug_vc2coll)) + ), + ash_records as ( + select + substr(r.rec, instr(r.rec, '<', 1, 1)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 1)+1), '>')-1) inst_id + , substr(r.rec, instr(r.rec, '<', 1, 2)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 2)+1), '>')-1) sid + , substr(r.rec, instr(r.rec, '<', 1, 3)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 3)+1), '>')-1) username + , substr(r.rec, instr(r.rec, '<', 1, 4)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 4)+1), '>')-1) machine + , substr(r.rec, instr(r.rec, '<', 1, 5)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 5)+1), '>')-1) terminal + , substr(r.rec, instr(r.rec, '<', 1, 6)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 6)+1), '>')-1) program + , substr(r.rec, instr(r.rec, '<', 1, 7)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 7)+1), '>')-1) event + , substr(r.rec, instr(r.rec, '<', 1, 8)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 8)+1), '>')-1) wait_class + , substr(r.rec, instr(r.rec, '<', 1, 9)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 9)+1), '>')-1) state + , substr(r.rec, instr(r.rec, '<', 1, 10)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 10)+1), '>')-1) p1 + , substr(r.rec, instr(r.rec, '<', 1, 11)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 11)+1), '>')-1) p2 + , substr(r.rec, instr(r.rec, '<', 1, 12)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 12)+1), '>')-1) p3 + , substr(r.rec, instr(r.rec, '<', 1, 13)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 13)+1), '>')-1) row_wait_obj# + , substr(r.rec, instr(r.rec, '<', 1, 14)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 14)+1), '>')-1) row_wait_file# + , substr(r.rec, instr(r.rec, '<', 1, 15)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 15)+1), '>')-1) row_wait_block# + , substr(r.rec, instr(r.rec, '<', 1, 16)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 16)+1), '>')-1) row_wait_row# + , substr(r.rec, instr(r.rec, '<', 1, 17)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 17)+1), '>')-1) blocking_session_status + , substr(r.rec, instr(r.rec, '<', 1, 18)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 18)+1), '>')-1) blocking_instance + , substr(r.rec, instr(r.rec, '<', 1, 19)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 19)+1), '>')-1) blocking_session + , substr(r.rec, instr(r.rec, '<', 1, 20)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 20)+1), '>')-1) sql_hash_value + , substr(r.rec, instr(r.rec, '<', 1, 21)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 21)+1), '>')-1) sql_id + , substr(r.rec, instr(r.rec, '<', 1, 22)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 22)+1), '>')-1) sql_child_number + , substr(r.rec, instr(r.rec, '<', 1, 23)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 23)+1), '>')-1) plsql_entry_object_id + , substr(r.rec, instr(r.rec, '<', 1, 24)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 24)+1), '>')-1) plsql_entry_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 25)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 25)+1), '>')-1) plsql_object_id + , substr(r.rec, instr(r.rec, '<', 1, 26)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 26)+1), '>')-1) plsql_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 27)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 27)+1), '>')-1) module + , substr(r.rec, instr(r.rec, '<', 1, 28)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 28)+1), '>')-1) action + , substr(r.rec, instr(r.rec, '<', 1, 29)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 29)+1), '>')-1) client_identifier + , substr(r.rec, instr(r.rec, '<', 1, 30)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 30)+1), '>')-1) service_name + , substr(r.rec, instr(r.rec, '<', 1, 31)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 31)+1), '>')-1) con_id + from + raw_records r + ) + select * from ( + select + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) as inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) as sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) as username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) as machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) as terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) as program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) as event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) as wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) as state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) as p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) as p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) as p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) as row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) as row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) as row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) as row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) as blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) as blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) as blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) as sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) as sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) as sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) as plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) as plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) as plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) as plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) as module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) as action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) as client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) as service_name + , decode(bitand(l_ash_grouping, power(2, s_con_id )), 0, chr(0), con_id ) as con_id + , count(*)/g_ash_samples_taken average_active_samples + from + ash_records a + group by + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) -- inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) -- sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) -- username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) -- machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) -- terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) -- program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) -- event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) -- wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) -- state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) -- p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) -- p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) -- p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) -- row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) -- row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) -- row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) -- row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) -- blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) -- blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) -- blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) -- sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) -- sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) -- sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) -- plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) -- plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) -- plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) -- plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) -- module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) -- action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) -- client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) -- service_name + , decode(bitand(l_ash_grouping, power(2, s_con_id )), 0, chr(0), con_id ) -- con_id + order by + count(*)/g_ash_samples_taken desc + ) + where rownum <= p_topn + ) loop + + l_output_line := ''; + + o_inst_id := CASE WHEN i.inst_id = chr(0) THEN null ELSE nvl(i.inst_id , ' ') END; + o_sid := CASE WHEN i.sid = chr(0) THEN null ELSE nvl(i.sid , ' ') END; + o_username := CASE WHEN i.username = chr(0) THEN null ELSE nvl(i.username , ' ') END; + o_machine := CASE WHEN i.machine = chr(0) THEN null ELSE nvl(i.machine , ' ') END; + o_terminal := CASE WHEN i.terminal = chr(0) THEN null ELSE nvl(i.terminal , ' ') END; + o_program := CASE WHEN i.program = chr(0) THEN null ELSE nvl(i.program , ' ') END; + o_event := CASE WHEN i.event = chr(0) THEN null ELSE nvl(i.event , ' ') END; + o_wait_class := CASE WHEN i.wait_class = chr(0) THEN null ELSE nvl(i.wait_class , ' ') END; + o_state := CASE WHEN i.state = chr(0) THEN null ELSE nvl(i.state , ' ') END; + o_p1 := CASE WHEN i.p1 = chr(0) THEN null ELSE nvl(i.p1 , ' ') END; + o_p2 := CASE WHEN i.p2 = chr(0) THEN null ELSE nvl(i.p2 , ' ') END; + o_p3 := CASE WHEN i.p3 = chr(0) THEN null ELSE nvl(i.p3 , ' ') END; + o_row_wait_obj# := CASE WHEN i.row_wait_obj# = chr(0) THEN null ELSE nvl(i.row_wait_obj# , ' ') END; + o_row_wait_file# := CASE WHEN i.row_wait_file# = chr(0) THEN null ELSE nvl(i.row_wait_file# , ' ') END; + o_row_wait_block# := CASE WHEN i.row_wait_block# = chr(0) THEN null ELSE nvl(i.row_wait_block# , ' ') END; + o_row_wait_row# := CASE WHEN i.row_wait_row# = chr(0) THEN null ELSE nvl(i.row_wait_row# , ' ') END; + o_blocking_session_status := CASE WHEN i.blocking_session_status = chr(0) THEN null ELSE nvl(i.blocking_session_status , ' ') END; + o_blocking_instance := CASE WHEN i.blocking_instance = chr(0) THEN null ELSE nvl(i.blocking_instance , ' ') END; + o_blocking_session := CASE WHEN i.blocking_session = chr(0) THEN null ELSE nvl(i.blocking_session , ' ') END; + o_sql_hash_value := CASE WHEN i.sql_hash_value = chr(0) THEN null ELSE nvl(i.sql_hash_value , ' ') END; + o_sql_id := CASE WHEN i.sql_id = chr(0) THEN null ELSE nvl(i.sql_id , ' ') END; + o_sql_child_number := CASE WHEN i.sql_child_number = chr(0) THEN null ELSE nvl(i.sql_child_number , ' ') END; + o_plsql_entry_object_id := CASE WHEN i.plsql_entry_object_id = chr(0) THEN null ELSE nvl(i.plsql_entry_object_id , ' ') END; + o_plsql_entry_subprogram_id := CASE WHEN i.plsql_entry_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_entry_subprogram_id , ' ') END; + o_plsql_object_id := CASE WHEN i.plsql_object_id = chr(0) THEN null ELSE nvl(i.plsql_object_id , ' ') END; + o_plsql_subprogram_id := CASE WHEN i.plsql_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_subprogram_id , ' ') END; + o_module := CASE WHEN i.module = chr(0) THEN null ELSE nvl(i.module , ' ') END; + o_action := CASE WHEN i.action = chr(0) THEN null ELSE nvl(i.action , ' ') END; + o_client_identifier := CASE WHEN i.client_identifier = chr(0) THEN null ELSE nvl(i.client_identifier , ' ') END; + o_service_name := CASE WHEN i.service_name = chr(0) THEN null ELSE nvl(i.service_name , ' ') END; + o_con_id := CASE WHEN i.con_id = chr(0) THEN null ELSE nvl(i.con_id , ' ') END; + + -- print the AAS and activity % as the first columns + l_output_line := ''; + if output_actses = 1 then l_output_line := l_output_line || lpad(to_char(round(i.average_active_samples,2),'9999.99'), w_actses, ' '); end if; + if output_actses_pct = 1 then l_output_line := l_output_line || lpad('('||to_char(round(i.average_active_samples*100))||'%)', w_actses_pct, ' '); end if; + + -- loop through ash columns to find what to print and in which order + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + l_output_line := l_output_line || ' | ' || + case s.token + -- actual column names in gv$session + when 'inst_id' then lpad(o_inst_id , w_inst_id , ' ') + when 'con_id' then lpad(o_con_id , w_con_id , ' ') + when 'sid' then lpad(o_sid , w_sid , ' ') + when 'username' then rpad(o_username , w_username , ' ') + when 'machine' then rpad(o_machine , w_machine , ' ') + when 'terminal' then rpad(o_terminal , w_terminal , ' ') + when 'program' then rpad(o_program , w_program , ' ') + when 'event' then rpad(o_event , w_event , ' ') + when 'wait_class' then rpad(o_wait_class , w_wait_class , ' ') + when 'state' then rpad(o_state , w_state , ' ') + when 'p1' then rpad(o_p1 , w_p1 , ' ') + when 'p2' then rpad(o_p2 , w_p2 , ' ') + when 'p3' then rpad(o_p3 , w_p3 , ' ') + when 'row_wait_obj#' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'row_wait_file#' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'row_wait_block#' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row_wait_row#' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'blocking_session_status' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'blocking_instance' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'blocking_session' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql_hash_value' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sql_id' then rpad(o_sql_id , w_sql_id , ' ') + when 'sql_child_number' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_entry_object_id' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_entry_subprogram_id' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_object_id' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subprogram_id' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'module' then rpad(o_module , w_module , ' ') + when 'action' then rpad(o_action , w_action , ' ') + when 'client_identifier' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service_name' then rpad(o_service_name , w_service_name , ' ') + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then rpad(o_username , w_username , ' ') + when 'obj' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'file' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'block' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'bss' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'bsi' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'bs' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sqlid' then rpad(o_sql_id , w_sql_id , ' ') + when 'child' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_eoid' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_esubpid' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_oid' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subpid' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'mod' then rpad(o_module , w_module , ' ') + when 'act' then rpad(o_action , w_action , ' ') + when 'cid' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service' then rpad(o_service_name , w_service_name , ' ') + when 'wait_event' then rpad(o_event , w_event , ' ') + when 'wait_state' then rpad(o_state , w_state , ' ') + else + '' + end; -- case s.token + + end loop; -- ash parameter tokenizer + + output(l_output_line); + + end loop; -- grouped ash samples + + end out_ash; + + +-- and it begins!!! +begin + + -- get snappers own sid into g_mysid + select sid into g_mysid from v$mystat where rownum = 1; + + pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize); + --output ( 'Pagesize='||pagesize ); + + lv_ash := getopt('&snapper_options', 'ash'); + lv_stats := getopt('&snapper_options', 'stat'); + + if lv_ash is not null then gather_ash := 1; end if; + if lv_stats is not null then gather_stats := 1; end if; + + --output('all='||case when getopt('&snapper_options', 'all') = chr(0) then 'chr(0)' when getopt('&snapper_options', 'all') is null then 'null' else (getopt('&snapper_options','all')) end); + -- some additional default value logic + if getopt('&snapper_options', 'all') is not null then + --output('setting stats to all due to option = all'); + gather_stats := 1; + gather_ash := 1; + else + if (lv_ash is null and lv_stats is null) then + gather_stats := 0; + gather_ash := 1; + end if; + end if; + + -- determine which performance counters and stats to collect + lv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + when 'all' then 'stw' + else nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + end; + + --lv_gather:=getopt ('&snapper_options', 'gather='); + --output('lv_gather='||lv_gather); + + g_snap_begin := lower(getopt('&snapper_options', 'begin' )); + g_snap_end := lower(getopt('&snapper_options', 'end' )); + --output('g_snap_begin = '||g_snap_begin); + --output('g_snap_end = '||g_snap_end); + + if pagesize > 0 then + output(' '); + output('-- Session Snapper v4.50 - by Tanel Poder ( https://blog.tanelpoder.com/ ) - Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :)'); + output(' '); + end if; + + -- initialize statistic and event name array + -- fetch statistic names with their adjusted IDs + select /* get_stat_names */ * + bulk collect into sn_tmp + from ( + select 'STAT' stype, statistic# - pls_adjust statistic#, name + from v$statname + where (lv_gather like '%s%' or lv_gather like '%a%') + -- + union all + select CASE WHEN wait_class = 'Idle' THEN 'WIDL' ELSE 'WAIT' END, + event# + (select count(*) from v$statname) + 1 - pls_adjust, name + from v$event_name + where (lv_gather like '%w%' or lv_gather like '%a%') + -- + union all + select 'TIME' stype, stat_id - pls_adjust statistic#, stat_name name + from gv$sys_time_model + where (lv_gather like '%t%' or lv_gather like '%a%') + -- + union all + select 'LATG', + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + name + from gv$latch l + where (lv_gather like '%l%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE union all + &_IF_X_ACCESSIBLE select 'BUFG', + &_IF_X_ACCESSIBLE indx + + &_IF_X_ACCESSIBLE (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE kcbwhdes name + &_IF_X_ACCESSIBLE from x$kcbwh + &_IF_X_ACCESSIBLE where (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + eq_type + from ( + select es.eq_type + ||' - '||lt.name + eq_type, + total_req# + from + gv$enqueue_stat es + , gv$lock_type lt + where es.eq_type = lt.type + ) e + where (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_statnames + order by stype, statistic#; + + -- store these into an index_by array organized by statistic# for fast lookup + for i in 1..sn_tmp.count loop + sn(sn_tmp(i).statistic#) := sn_tmp(i); + sn_reverse(sn_tmp(i).stype||','||sn_tmp(i).name) := sn_tmp(i); + end loop; + + + -- main sampling loop + for c in 1..&snapper_count loop + + -- sesstat and other performance counter sampling + if gather_stats = 1 then + + -- print header if required + gv_header_string := + CASE WHEN output_header = 1 THEN 'HEAD,' END + || CASE WHEN output_inst = 1 THEN ' INST,' END + || CASE WHEN output_sid = 1 THEN ' SID,' END + || CASE WHEN output_inst_sid = 1 THEN ' SID @INST,' END + || CASE WHEN output_username = 1 THEN ' USERNAME ,' END + || CASE WHEN output_time = 1 THEN ' SNAPSHOT START ,' END + || CASE WHEN output_seconds = 1 THEN ' SECONDS,' END + || CASE WHEN output_stype = 1 THEN ' TYPE,' END + || CASE WHEN output_sname = 1 THEN rpad(' STATISTIC',59,' ')||',' END + || CASE WHEN output_delta = 1 THEN ' DELTA,' END + || CASE WHEN output_delta_s = 1 THEN ' DELTA/SEC,' END + || CASE WHEN output_hdelta = 1 THEN ' HDELTA,' END + || CASE WHEN output_hdelta_s = 1 THEN ' HDELTA/SEC,' END + || CASE WHEN output_percent = 1 THEN ' %TIME,' END + || CASE WHEN output_pcthist = 1 THEN ' GRAPH ,' END + || CASE WHEN output_eventcnt = 1 THEN ' NUM_WAITS,' END + || CASE WHEN output_eventcnt_s = 1 THEN ' WAITS/SEC,' END + || CASE WHEN output_eventavg = 1 THEN ' AVERAGES ' END + ; + + + if g_snap_begin is null then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(rpad('-',length(gv_header_string),'-')); + output(gv_header_string); + output(rpad('-',length(gv_header_string),'-')); + else + if pagesize = -1 and c = 1 then + output(gv_header_string); + end if; + end if; + else + output('Taking BEGIN sample ...'); + end if; + + -- TODO raise an error if both begin and end are used together + -- TODO conditionally comment out the refcursor use unless begin and end is used + + -- manual before/after snapshots (snapper v4) + if g_snap_begin is not null or g_snap_end is not null then + if g_snap_begin is not null then + get_sessions; + snap(d1,s1,l1,g_snap1); +&_MANUAL_SNAPSHOT open :snapper for select column_value rec from table(g_snap1); -- if you see this error then run: "VAR SNAPPER REFCURSOR" first! + exit; + end if; + + if g_snap_end is not null then +&_MANUAL_SNAPSHOT fetch :snapper bulk collect into g_snap1; -- You should run snapper with BEGIN option first! + -- procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out date, p_stats out stab, l_stats out ltab) + snap_from_stats_string(g_snap1, d1, s1, l1); + end if; + else -- normal interval sampling + if c = 1 then + get_sessions; + snap(d1,s1,l1,g_snap1); + else + get_sessions; + d1 := d2; + s1 := s2; + g_snap1 := g_snap2; + end if; -- c = 1 + end if; + + end if; -- gather_stats = 1 + + + + -- ASH style sampling +&_USE_DBMS_LOCK ash_date1 := sysdate; +&_USE_DBMS_LOCK if gather_ash = 1 then +&_USE_DBMS_LOCK while sysdate < (ash_date1 + (&snapper_sleep/86400)) loop +&_USE_DBMS_LOCK -- get active session records from g_sessions +&_USE_DBMS_LOCK get_sessions; +&_USE_DBMS_LOCK extract_ash(); +&_USE_DBMS_LOCK -- sleep timeout backoff depending on the duration sampled (for up to 10 seconds total sampling time will get max 100 Hz sampling) +&_USE_DBMS_LOCK -- for longer duration sampling the algorithm will back off and for long durations (over 100 sec) the sampling rate will stabilize +&_USE_DBMS_LOCK -- at 1Hz +&_USE_DBMS_LOCK dbms_lock.sleep( greatest(0.1,(least(1,&snapper_sleep*&snapper_count/100))) ); +&_USE_DBMS_LOCK end loop; +&_USE_DBMS_LOCK else +&_USE_DBMS_LOCK dbms_lock.sleep( ((ash_date1+(&snapper_sleep/86400)) - sysdate)*86400 ); +&_USE_DBMS_LOCK null; +&_USE_DBMS_LOCK end if; +&_USE_DBMS_LOCK ash_date2 := sysdate; + + -- sesstat new sample and delta calculation + if gather_stats = 1 then + + get_sessions; + snap(d2,s2,l2,g_snap2); + + -- manually coded nested loop outer join for calculating deltas: + -- why not use a SQL join? this would require creation of PL/SQL + -- collection object types, but Snapper does not require any changes + -- to the database, so any custom object types are out! + changed_values := 0; + missing_values_s1 := 0; + missing_values_s2 := 0; + + -- remember last disappeared SID so we wouldn't need to output a warning + -- message for each statistic row of that disappeared sid + disappeared_sid := 0; + + i :=1; -- iteration counter (for debugging) + a :=1; -- s1 array index + b :=1; -- s2 array index + + if s2.count > 0 then lv_curr_sid := s2(b).sid; end if; + + while ( a <= s1.count and b <= s2.count ) loop + + if lv_curr_sid != 0 and lv_curr_sid != s2(b).sid then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + -- if filtering specific stats, assuming that it's better to not leave spaces between every session data + + if getopt('&snapper_options', 'sinclude=')||getopt('&snapper_options', 'tinclude=' )||getopt('&snapper_options', 'winclude=' ) is null then + output(' '); + -- output(rpad('-',length(gv_header_string),'-')); + -- output(gv_header_string); + -- output(rpad('-',length(gv_header_string),'-')); + end if; + end if; + lv_curr_sid := s2(b).sid; + end if; + + delta := 0; -- don't print + + case + when s1(a).sid = s2(b).sid then + + case + when s1(a).statistic# = s2(b).statistic# then + + delta := s2(b).value - s1(a).value; + evcnt := s2(b).event_count - s1(a).event_count; + --output('DEBUG, s1(a).statistic# s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + if delta != 0 then fout(); end if; + + a := a + 1; + b := b + 1; + + when s1(a).statistic# > s2(b).statistic# then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).statistic# < s2(b).statistic# then + + output('ERROR, s1(a).statistic# < s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + else + output('ERROR, s1(a).statistic# ? s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + end case; -- s1(a).statistic# ... s2(b).statistic# + + when s1(a).sid > s2(b).sid then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).sid < s2(b).sid then + + if disappeared_sid != s1(a).sid then + output('WARN, Session has disappeared since previous snapshot, ignoring SID='||to_char(s1(a).sid)||' debug(a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count||')'); + end if; + disappeared_sid := s1(a).sid; + a := a + 1; + + else + output('ERROR, Should not be here, SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + end case; -- s1(a).sid ... s2(b).sid + + i:=i+1; + + if delta != 0 then + + changed_values := changed_values + 1; + + end if; -- delta != 0 + + end loop; -- while ( a <= s1.count and b <= s2.count ) + + if pagesize > 0 and changed_values > 0 then + output(' '); + output('-- End of Stats snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||round(get_seconds(d2-d1), 1)); + end if; + + output(' '); + + end if; -- gather_stats = 1 + + if gather_ash = 1 then + + -- get ASH sample grouping details + g_ash_columns := nvl( getopt('&snapper_options', 'ash=' ), g_ash_columns ); + + -- optional additional ASH groupings + g_ash_columns1 := case when getopt('&snapper_options', 'ash1' ) is null then null when getopt('&snapper_options', 'ash1' ) = chr(0) then g_ash_columns1 else getopt('&snapper_options', 'ash1=' ) end; + g_ash_columns2 := case when getopt('&snapper_options', 'ash2' ) is null then null when getopt('&snapper_options', 'ash2' ) = chr(0) then g_ash_columns2 else getopt('&snapper_options', 'ash2=' ) end; + g_ash_columns3 := case when getopt('&snapper_options', 'ash3' ) is null then null when getopt('&snapper_options', 'ash3' ) = chr(0) then g_ash_columns3 else getopt('&snapper_options', 'ash3=' ) end; + g_ash_columns4 := case when getopt('&snapper_options', 'ash4' ) is null then null when getopt('&snapper_options', 'ash4' ) = chr(0) then g_ash_columns4 else getopt('&snapper_options', 'ash4=' ) end; + g_ash_columns5 := case when getopt('&snapper_options', 'ash5' ) is null then null when getopt('&snapper_options', 'ash5' ) = chr(0) then g_ash_columns5 else getopt('&snapper_options', 'ash5=' ) end; + g_ash_columns6 := case when getopt('&snapper_options', 'ash6' ) is null then null when getopt('&snapper_options', 'ash6' ) = chr(0) then g_ash_columns6 else getopt('&snapper_options', 'ash6=' ) end; + + -- group ASH records and print report + out_ash( g_ash_columns, 10 ); + -- group and print optional ASH reports + if g_ash_columns1 is not null then out_ash( g_ash_columns1, 10 ); end if; + if g_ash_columns2 is not null then out_ash( g_ash_columns2, 10 ); end if; + if g_ash_columns3 is not null then out_ash( g_ash_columns3, 10 ); end if; + if g_ash_columns4 is not null then out_ash( g_ash_columns4, 10 ); end if; + if g_ash_columns5 is not null then out_ash( g_ash_columns5, 10 ); end if; + if g_ash_columns6 is not null then out_ash( g_ash_columns6, 10 ); end if; + + + if pagesize > 0 then + output(' '); + output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken||', AAS='||CASE WHEN g_ash_samples_taken = 0 THEN '(No ASH sampling in begin/end snapshot mode)' ELSE TO_CHAR(ROUND(g_ash.COUNT/NULLIF(g_ash_samples_taken,0),1)) END ); + --output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken||', AAS='||TO_CHAR(ROUND(g_ash.COUNT/g_ash_samples_taken,1))||', Active%='||TO_CHAR(ROUND(g_ash.COUNT/g_ash_samples_taken*100,1))||'%' ); + + output(' '); + end if; + + reset_ash(); + + end if; -- gather_ash = 1 + + end loop; -- for c in 1..snapper_count + + exception when others then + raise_application_error(-20000, 'Snapper: Probably bad syntax or no execute rights on SYS.DBMS_LOCK'||chr(10)||'Check http://blog.tanelpoder.com/snapper for instructions'||chr(10)||sqlerrm); + +end; +/ + +undefine snapper_sleep +undefine snapper_count +undefine snapper_sid +undefine ssid_begin +undefine _IF_ORA12_OR_HIGHER +undefine _IF_ORA11_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11 +undefine _IF_LOWER_THAN_ORA12 +undefine _NO_BLK_INST +undefine _YES_BLK_INST +undefine _NO_PLSQL_OBJ_ID +undefine _YES_PLSQL_OBJ_ID +undefine _IF_DBMS_SYSTEM_ACCESSIBLE +undefine _IF_X_ACCESSIBLE +undefine _MANUAL_SNAPSHOT +undefine _USE_DBMS_LOCK +col snapper_ora12higher clear +col snapper_ora12lower clear +col snapper_ora11higher clear +col snapper_ora11lower clear +col dbms_system_accessible clear +col x_accessible clear +col no_plsql_obj_id clear +col yes_plsql_obj_id clear +col no_blk_inst clear +col yes_blk_inst clear +col manual_snapshot clear +col use_dbms_lock clear +col snapper_sid clear +col sid_filter clear +col inst_filter clear + +set serveroutput off + diff --git a/vdh/sort_use.sql b/vdh/sort_use.sql new file mode 100644 index 0000000..f1dbe0e --- /dev/null +++ b/vdh/sort_use.sql @@ -0,0 +1,47 @@ +/********************************************************************** + * File: sort_use.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 20-May-99 + * + * Description: + * Query the V$SORT_USAGE view to determine what sessions (and + * what SQL statements) are using sorting resources... + * + * Modifications: + *********************************************************************/ +break on report +compute sum of mb on report +compute sum of pct on report + +col sid format a10 heading "Session ID" +col username format a10 heading "User Name" +col sql_text format a8 heading "SQL" +col tablespace format a10 heading "Temporary|TS Name" +col mb format 999,999,990 heading "Mbytes|Used" +col pct format 990.00 heading "% Avail|TS Spc" + +select s.sid || ',' || s.serial# sid, + s.username, + u.tablespace, + substr(a.sql_text, 1, (instr(a.sql_text, ' ')-1)) sql_text, + u.blocks/128 mb, + ((u.blocks/128)/(sum(f.blocks)/128))*100 pct +from v$sort_usage u, + v$session s, + v$sqlarea a, + dba_data_files f +where s.saddr = u.session_addr +and a.address (+) = s.sql_address +and a.hash_value (+) = s.sql_hash_value +and f.tablespace_name = u.tablespace +group by + s.sid || ',' || s.serial#, + s.username, + substr(a.sql_text, 1, (instr(a.sql_text, ' ')-1)), + u.tablespace, + u.blocks/128 + +spool sort_use +/ +spool off diff --git a/vdh/sql_ash_stats_wip.sql b/vdh/sql_ash_stats_wip.sql new file mode 100644 index 0000000..5ec4b4e --- /dev/null +++ b/vdh/sql_ash_stats_wip.sql @@ -0,0 +1,47 @@ +set linesize 210 +set pages 50000 + +column inst_id format 9999 heading "inst" +column sample_id format 999999 heading "sample" +column sample_time format a20 heading "sample time" +column session_id format 99999 heading "sess" +column qc_instance_id format 9999 heading "qc|inst" +column qc_session_id format 99999 heading "qc|sess" +column session_state format a7 heading "state" +column event format a35 heading "event" +column par1 format a30 heading "p1" +column par2 format a30 heading "p2" +column par3 format a30 heading "p3" +column time_waited format 999G999G999G999 heading "time waited µs" + +break on instance_id skip 1 on sample_id on sample_time + +select + ash.inst_id, + ash.sample_id, + to_char(ash.sample_time, 'DD/MM/YYYY HH24:MI:SS') sample_time, + ash.qc_instance_id, + ash.qc_session_id, + ash.session_id, + ash.session_state, + ash.event, + (ash.p1text || ': ' || ash.p1) par1, + (ash.p2text || ': ' || ash.p2) par2, + (ash.p3text || ': ' || ash.p3) par3, + ash.time_waited +from + gv$active_session_history ash +where + ash.sql_id = '&sql_id' + and ash.sample_time between + to_date('&bdate', 'DD/MM/YYYY HH24:MI') + and to_date('&edate', 'DD/MM/YYYY HH24:MI') +order by + ash.inst_id, + ash.sample_id, + ash.qc_instance_id, + ash.qc_session_id, + ash.session_id +; + +clear breaks diff --git a/vdh/sql_awr_stats.sql b/vdh/sql_awr_stats.sql new file mode 100644 index 0000000..0cae7a3 --- /dev/null +++ b/vdh/sql_awr_stats.sql @@ -0,0 +1,55 @@ +set pages 999 +set linesize 200 + +column nbr_exec format 99G999G999 +column ela_sec format 999G999G999 +column dreads format 999G999G999 +column bgets format 999G999G999 +column avg_ela_sec format 9G999G999D99 +column avg_dreads format 99G999G999 +column avg_bgets format 999G999G999 + +with exec_stats as + ( select + instance_number, + sqlstat.sql_id, + sqlstat.plan_hash_value phash_value, + min(sqlstat.snap_id) min_snap_id, + max(sqlstat.snap_id) max_snap_id, + sum(sqlstat.executions_delta) nbr_exec, + sum(sqlstat.elapsed_time_delta)/1000000 ela_sec, + sum(sqlstat.disk_reads_delta) dreads, + sum(sqlstat.buffer_gets_delta) bgets + from + dba_hist_sqlstat sqlstat + where + sql_id = '&sql_id' + group by + instance_number, + sql_id, + plan_hash_value + ) +select + exec_stats.instance_number, + to_char(snap1.begin_interval_time, 'DD/MM/YYYY HH24:MI') earliest_occur, + to_char(snap2.end_interval_time, 'DD/MM/YYYY HH24:MI') latest_occur, + sql_id, + phash_value, + nbr_exec, + ela_sec, + dreads, + bgets, + (ela_sec/nbr_exec) avg_ela_sec, + (dreads/nbr_exec) avg_dreads, + (bgets/nbr_exec) avg_bgets +from + exec_stats, + dba_hist_snapshot snap1, + dba_hist_snapshot snap2 +where + exec_stats.min_snap_id = snap1.snap_id + and exec_stats.instance_number = snap1.instance_number + and exec_stats.max_snap_id = snap2.snap_id + and exec_stats.instance_number = snap2.instance_number +; + \ No newline at end of file diff --git a/vdh/sql_exec_freq.sql b/vdh/sql_exec_freq.sql new file mode 100644 index 0000000..09dc517 --- /dev/null +++ b/vdh/sql_exec_freq.sql @@ -0,0 +1,26 @@ +set linesize 150 +set pages 999 +column avg_elapsed_sec format 99G999D99 +column disk_reads format 9G999G999G999 +column buffer_gets format 999G999G999 + +select + to_char(snap.begin_interval_time, 'DD/MM/YYYY HH24:MI:SS') btime, + to_char(snap.end_interval_time, 'DD/MM/YYYY HH24:MI:SS') etime, + snap.snap_id, + plan_hash_value, + snap.instance_number, sqlstat.executions_delta nbr_executions, + (sqlstat.elapsed_time_delta / decode(sqlstat.executions_delta, 0, 1, executions_delta)/1000000) avg_elapsed_sec, + (sqlstat.disk_reads_delta / decode(sqlstat.executions_delta, 0, 1, executions_delta)) disk_reads, + (sqlstat.buffer_gets_delta / decode(sqlstat.executions_delta, 0, 1, executions_delta)) buffer_gets +from + dba_hist_snapshot snap, + dba_hist_sqlstat sqlstat +where + snap.snap_id = sqlstat.snap_id(+) + and snap.instance_number = sqlstat.instance_number(+) + and sql_id = '&sql_id' +order by + snap.snap_id, + snap.instance_number +; \ No newline at end of file diff --git a/vdh/sql_exec_stats.sql b/vdh/sql_exec_stats.sql new file mode 100644 index 0000000..45074b5 --- /dev/null +++ b/vdh/sql_exec_stats.sql @@ -0,0 +1,19 @@ +-- list execution statistics about a sql statement + +set linesize 200 +column first_load_time format a20 +column child_number format 999 heading CN +column elapsed_time format 999G999G999G999 + +select + inst_id, sql_id, child_number, plan_hash_value, to_char(sysdate, 'DD/MM/YYYY HH24:MI:SS') now, + first_load_time, fetches, executions, disk_reads, buffer_gets, + rows_processed, elapsed_time +from + gv$sql +where + sql_id = '&sql_id' +order by + inst_id, + child_number +; diff --git a/vdh/sql_history_stats2_wip.sql b/vdh/sql_history_stats2_wip.sql new file mode 100644 index 0000000..70ac76a --- /dev/null +++ b/vdh/sql_history_stats2_wip.sql @@ -0,0 +1,85 @@ +set linesize 200 +set pages 50000 +set verify off + +column snap_id format 99999999 heading "snap id" +column begin_time format a12 heading "begin time" +column end_time format a12 heading "end time" +column sql_id format a15 heading "sql id" +column executions_delta format 999G999G999 heading "executions|delta" +column elapsed_time_delta format 999G999G999G999 heading "elapsed time|delta (µs)" +column disk_reads_delta format 999G999G999 heading "disk reads|delta" +column buffer_gets_delta format 999G999G999 heading "buffer gets|delta" +column iowait_delta format 999G999G999G999 heading "io wait|delta (µs)" +column clwait_delta format 999G999G999G999 heading "cluster wait|delta (µs)" + +prompt Enter the begindate in the format DD/MM/YYYY HH24:MI +accept start_time prompt 'begin date: ' + +prompt Enter the enddate in the format DD/MM/YYYY HH24:MI +accept end_time prompt 'end date: ' + +prompt Enter the name of the program +accept program prompt "program: " + + +break on snap_id skip 1 on begin_time on end_time + +compute sum of elapsed_time_delta on snap_id + +with +stat as + ( select + snap_id, + sql_id, + executions_delta, + elapsed_time_delta, + disk_reads_delta, + buffer_gets_delta, + iowait_delta, + clwait_delta + from + dba_hist_sqlstat + where + sql_id in + ( select + sql_id + from + v$active_session_history ash + where + ash.program = '&program' + and ash.sample_time between + to_date('&start_time', 'DD/MM/YYYY HH24:MI') + and to_date('&end_time', 'DD/MM/YYYY HH24:MI') + ) + ) +select + snap.snap_id, + to_char(snap.begin_interval_time, 'DD/MM HH24:MI') begin_time, + to_char(snap.end_interval_time, 'DD/MM HH24:MI') end_time, + stat.sql_id, + stat.executions_delta, + stat.elapsed_time_delta, + stat.disk_reads_delta, + stat.buffer_gets_delta, + stat.iowait_delta, + stat.clwait_delta +from + dba_hist_snapshot snap, + stat +where + snap.snap_id = stat.snap_id(+) + and snap.begin_interval_time between + to_date('&start_time', 'DD/MM/YYYY HH24:MI') + and to_date('&end_time', 'DD/MM/YYYY HH24:MI') +order by + snap.snap_id, + stat.sql_id +; + +clear breaks +clear computes + +undefine start_time +undefine end_time +undefine program diff --git a/vdh/sql_history_stats_wip.sql b/vdh/sql_history_stats_wip.sql new file mode 100644 index 0000000..f090eeb --- /dev/null +++ b/vdh/sql_history_stats_wip.sql @@ -0,0 +1,44 @@ +set linesize 200 +set pages 50000 + +column instance_number format 99 heading "inst" +column snap_id format 99999999 heading "snap id" +column begin_time format a12 heading "begin time" +column end_time format a12 heading "end time" +column executions_delta format 999G999G999 heading "executions|delta" +column elapsed_time_delta format 999G999G999G999 heading "elapsed time|delta (µs)" +column disk_reads_delta format 999G999G999 heading "disk reads|delta" +column buffer_gets_delta format 999G999G999 heading "buffer gets|delta" +column iowait_delta format 999G999G999G999 heading "io wait|delta (µs)" +column clwait_delta format 999G999G999G999 heading "cluster wait|delta (µs)" + +break on instance_number skip 1 + + +select + snap.instance_number, + snap.snap_id, + to_char(snap.begin_interval_time, 'DD/MM HH24:MI') begin_time, + to_char(snap.end_interval_time, 'DD/MM HH24:MI') end_time, + stat.executions_delta, + stat.elapsed_time_delta, + stat.disk_reads_delta, + stat.buffer_gets_delta, + stat.iowait_delta, + stat.clwait_delta +from + dba_hist_snapshot snap, + dba_hist_sqlstat stat +where + snap.snap_id = stat.snap_id(+) + and snap.instance_number = stat.instance_number(+) + and stat.sql_id(+) = '&sql_id' + and snap.begin_interval_time between + to_date('&begin_time', 'DD/MM/YYYY HH24:MI') + and to_date('&end_time', 'DD/MM/YYYY HH24:MI') +order by + snap.instance_number, + snap.snap_id +; + +clear breaks; diff --git a/vdh/sqlcur_mem_usage.sql b/vdh/sqlcur_mem_usage.sql new file mode 100644 index 0000000..9754976 --- /dev/null +++ b/vdh/sqlcur_mem_usage.sql @@ -0,0 +1,66 @@ +set linesize 150 + +column sharable_mem_kb format 99G999G999D00 +column persistent_mem_kb format 99G999G999D00 +column runtime_mem_kb format 99G999G999D00 +column cursor_cnt format 999G999G990 +column unique_cursor_cnt format 999G999G990 + +compute sum of sharable_mem_kb on report +compute sum of persistent_mem_kb on report +compute sum of runtime_mem_kb on report +compute sum of cursor_cnt on report +compute sum of unique_cursor_cnt on report + +break on report + +with + childs as + ( select + parsing_schema_id, + sql_id, + count(*) child_cnt + from + v$sql + group by + parsing_schema_id, + sql_id + ), + mchild as + ( select + parsing_schema_id, + max(child_cnt) max_child_cnt + from + childs + group by + parsing_schema_id + ), + vsql as + ( select + parsing_schema_id, + count(*) cursor_cnt, + count(distinct sql_id) unique_cursor_cnt, + sum(sharable_mem)/1024 sharable_mem_kb, + sum(persistent_mem)/1024 persistent_mem_kb, + sum(runtime_mem)/1024 runtime_mem_kb + from + v$sql + group by + parsing_schema_id + ) +select + username, cursor_cnt, unique_cursor_cnt, max_child_cnt, + sharable_mem_kb, persistent_mem_kb, runtime_mem_kb +from + mchild, + vsql, + dba_users usr +where + vsql.parsing_schema_id = mchild.parsing_schema_id + and vsql.parsing_schema_id = usr.user_id +order by + username +; + +clear breaks +clear computes diff --git a/vdh/sqltext_by_extract.sql b/vdh/sqltext_by_extract.sql new file mode 100644 index 0000000..59f339d --- /dev/null +++ b/vdh/sqltext_by_extract.sql @@ -0,0 +1,13 @@ +column hash_value format 99999999999 +column piece format 999 +column sql_text format a64 +break on hash_value skip 1 + +select hash_value, piece, sql_text +from v$sqltext_with_newlines +where hash_value in + ( select hash_value + from v$sqltext_with_newlines + where upper(sql_text) like '%KRUIDVAT_AUDITRECORD%' + ) +order by hash_value, piece; \ No newline at end of file diff --git a/vdh/sqltext_by_sid.sql b/vdh/sqltext_by_sid.sql new file mode 100644 index 0000000..87e7e6b --- /dev/null +++ b/vdh/sqltext_by_sid.sql @@ -0,0 +1,9 @@ +select sql_text +from v$sqltext_with_newlines +where (address, hash_value) + = ( select sql_address, sql_hash_value + from v$session + where sid = &sid + and serial# = '&serial' + ) +order by piece; \ No newline at end of file diff --git a/vdh/sqltext_by_spid.sql b/vdh/sqltext_by_spid.sql new file mode 100644 index 0000000..4a74f02 --- /dev/null +++ b/vdh/sqltext_by_spid.sql @@ -0,0 +1,9 @@ +select sql_text +from v$sqltext_with_newlines +where (address, hash_value) + = ( select sql_address, sql_hash_value + from v$session, v$process + where paddr = addr + and spid = '&processid' + ) +order by piece; \ No newline at end of file diff --git a/vdh/sqltext_by_spid_10g.sql b/vdh/sqltext_by_spid_10g.sql new file mode 100644 index 0000000..519cc9c --- /dev/null +++ b/vdh/sqltext_by_spid_10g.sql @@ -0,0 +1,8 @@ +select sql_id, sql_fulltext +from v$sql +where sql_id + = ( select sql_id + from v$session, v$process + where paddr = addr + and spid = '&processid' + ); \ No newline at end of file diff --git a/vdh/ss_off.sql b/vdh/ss_off.sql new file mode 100644 index 0000000..f56af74 --- /dev/null +++ b/vdh/ss_off.sql @@ -0,0 +1,5 @@ +alter session set "_serial_direct_read"=always; +set echo on +alter session set cell_offload_processing=false; +alter session set "_kcfis_storageidx_disabled"=true; +set echo off diff --git a/vdh/ss_on.sql b/vdh/ss_on.sql new file mode 100644 index 0000000..b98dfe7 --- /dev/null +++ b/vdh/ss_on.sql @@ -0,0 +1,4 @@ +set echo on +alter session set "_serial_direct_read"=always; +alter session set cell_offload_processing=true; +set echo off diff --git a/vdh/stale_stats.sql b/vdh/stale_stats.sql new file mode 100644 index 0000000..d67e154 --- /dev/null +++ b/vdh/stale_stats.sql @@ -0,0 +1,29 @@ +drop table t; +create table t (x int primary key, y int); +insert into t(x, y) values (1,1); +commit; +alter table t monitoring; +analyze table t compute statistics; +insert into t(x) select rownum + 1 from all_objects; +commit; + +DECLARE + + l_objlist dbms_stats.objecttab; + +BEGIN + + dbms_stats.gather_schema_Stats + ( + ownname => USER, + options => 'LIST STALE', + objlist => l_objlist + ); + dbms_output.put_line('going to output all stale objects: '); + for i in 1 .. l_objlist.count loop + dbms_output.put_line('objtype ' || i || ': ' || l_objlist(i).objtype); + dbms_output.put_line('objname ' || i || ': ' || l_objlist(i).objname); + end loop; + +END; +/ diff --git a/vdh/stats.sql b/vdh/stats.sql new file mode 100644 index 0000000..eddf98d --- /dev/null +++ b/vdh/stats.sql @@ -0,0 +1,12 @@ +set echo on +drop table t; +create table t (x int primary key, y int); +insert into t values(1,1); +commit; +BEGIN +dbms_stats.gather_schema_stats('TEST', NULL, FALSE, 'FOR ALL INDEXED COLUMNS', NULL, 'DEFAULT', TRUE); +END; +/ +select count(*) from user_tables where num_rows is not null; +select count(*) from user_indexes where num_rows is not null; +select count(distinct column_name) from user_tab_histograms; diff --git a/vdh/stats_snapping.txt b/vdh/stats_snapping.txt new file mode 100644 index 0000000..0a814ed --- /dev/null +++ b/vdh/stats_snapping.txt @@ -0,0 +1,166 @@ +rem +rem Script: c_mystats.sql +rem Author: Jonathan Lewis +rem Dated: March 2001 +rem Purpose: Put names to v$mystat +rem +rem Note: +rem Should be run by SYS - which means it has to be re-run +rem on a full database export/import +rem +rem Use first_rows and ordered to avoid a sort/merge join, and +rem to allow faster elimination of the 'value = 0' rows. +rem + +create or replace view v$my_stats +as +select + /*+ + first_rows + ordered + */ + sn.statistic#, + sn.name, + sn.class, + ms.value +from + v$mystat ms, + v$statname sn +where + sn.statistic# = ms.statistic# +; + +drop public synonym v$my_stats; +create public synonym v$my_stats for v$my_stats; +grant select on v$my_stats to public; + + +rem +rem Script: snap_myst.sql +rem Author: Jonathan Lewis +rem Dated: March 2001 +rem Purpose: Package to get snapshot start and delta of v$mystat +rem +rem Notes +rem Has to be run by SYS to create the package +rem Depends on view v$my_stats (see c_my_stats.sql) +rem +rem Usage: +rem set serveroutput on size 1000000 format wrapped +rem set linesize 120 +rem set trimspool on +rem execute snap_my_stats.start_snap +rem -- do something +rem execute snap_my_stats.end_snap +rem + +create or replace package snap_my_stats as + procedure start_snap; + procedure end_snap; +end; +/ + +create or replace package body snap_my_stats as + +cursor c1 is + select + statistic#, + name, + value + from + v$my_stats + where + value != 0 + ; + + type w_type is table of c1%rowtype index by binary_integer; + w_list w_type; + m_start_time date; + m_start_flag char(1); + m_end_time date; + +procedure start_snap is +begin + + m_start_time := sysdate; + m_start_flag := 'U'; + + for r in c1 loop + w_list(r.statistic#).value := r.value; + end loop; + +end start_snap; + +procedure end_snap is +begin + + m_end_time := sysdate; + + dbms_output.put_line('---------------------------------'); + dbms_output.put_line('Session stats - ' || + to_char(m_end_time,'dd-Mon hh24:mi:ss') + ); + + if m_start_flag = 'U' then + dbms_output.put_line('Interval:- ' || + trunc(86400 * (m_end_time - m_start_time)) || + ' seconds' + ); + else + dbms_output.put_line('Since Startup:- ' || + to_char(m_start_time,'dd-Mon hh24:mi:ss') + ); + end if; + + dbms_output.put_line('---------------------------------'); + + dbms_output.put_line( + rpad('Name',60) || + lpad('Value',18) + ); + + dbms_output.put_line( + rpad('----',60) || + lpad('-----',18) + ); + + for r in c1 loop + if (not w_list.exists(r.statistic#)) then + w_list(r.statistic#).value := 0; + end if; + + if ( + (w_list(r.statistic#).value != r.value) + ) then + dbms_output.put(rpad(r.name,60)); + dbms_output.put(to_char( + r.value - w_list(r.statistic#).value, + '9,999,999,999,990') + ); + dbms_output.new_line; + end if; + end loop; + +end end_snap; + +-- +-- Instantiation code - get system startup time just +-- in case the user wants stats since session started +-- + +begin + select + logon_time, 'S' + into + m_start_time, m_start_flag + from + v$session + where + sid = ( + select /*+ no_unnest */ sid + from v$mystat + where rownum = 1 + ); + +end snap_my_stats; +/ \ No newline at end of file diff --git a/vdh/statspack_load_history.sql b/vdh/statspack_load_history.sql new file mode 100644 index 0000000..fffb6d7 --- /dev/null +++ b/vdh/statspack_load_history.sql @@ -0,0 +1,116 @@ +/* when using statspack, this query shows the statspack summary (same values as 'Load Profile' in statspack report) + for each snapshot during the last week. + + Thus you can quickly check the database load history and then run statspack report on desired snap_id if you want further details. + + It shows following columns for each timestamp: + + Redo size (in blocks) per second + Logical reads per second + Block changes per second + Physical reads per second (disk io/secs) + Physical writes per second + User calls per second + Parses per second + Hard parses per second + Sorts per second + Logons per second + Executes per second + Transactions per second + Blocks changed per Read % + Recursive Call % + Rollback per transaction % + Rows per Sort % + cpu per elapsed % + Buffer hit ratio % + + This query shows history for the seven last days. + You can modify it on the first lines +*/ + +set linesize 400 +set pagesize 9999 +alter session set nls_numeric_characters=',.'; +set trimspool on + +WITH p as + ( select dbid, instance_number, snap_id, + lag(snap_id, 1, snap_id) over + ( partition by dbid, instance_number + order by snap_id + ) prev_snap_id, + lag(snap_time, 1, snap_time) over + ( partition by dbid, instance_number + order by snap_id + ) begin_interval_time, + snap_time end_interval_time + from stats$snapshot + where snap_time between + to_timestamp ('15/09/2008 00:00', 'DD/MM/YYYY HH24:MI') and to_timestamp ('04/10/2008 00:00', 'DD/MM/YYYY HH24:MI') + ), + s as + ( select d.name database, p.dbid, p.instance_number, p.prev_snap_id bsnap_id, p.snap_id esnap_id, p.end_interval_time bsnap_time, + p.end_interval_time esnap_time, bs.name, + round((es.value-bs.value)/((p.end_interval_time - p.begin_interval_time) * 24 * 60 * 60),6) valuepersecond + from v$database d, p, + stats$sysstat bs, stats$sysstat es + where d.dbid = p.dbid + and ( p.dbid = bs.dbid + and p.instance_number = bs.instance_number + and p.prev_snap_id = bs.snap_id + ) + and ( p.dbid = es.dbid + and p.instance_number = es.instance_number + and p.snap_id = es.snap_id + ) + and ( bs.statistic# = es.statistic# + and bs.name = es.name + ) + and bs.name in + ( 'redo size','redo blocks written','session logical reads','db block changes','physical reads','physical writes','user calls', + 'parse count (total)','parse count (hard)','sorts (memory)','sorts (disk)','logons cumulative','execute count','user rollbacks', + 'user commits', 'recursive calls','sorts (rows)','CPU used by this session','recursive cpu usage','parse time cpu', + 'rollback changes - undo records applied' + ) + and p.snap_id != p.prev_snap_id + ), +g as + ( select database, instance_number, bsnap_time, + sum(decode( name, 'redo size' , valuepersecond, 0 )) redo_size, + sum(decode( name, 'redo blocks written' , valuepersecond, 0 )) redo_blocks, + sum(decode( name, 'session logical reads' , valuepersecond, 0 )) logical_reads, + sum(decode( name, 'db block changes' , valuepersecond, 0 )) block_changes, + sum(decode( name, 'physical reads' , valuepersecond, 0 )) physical_reads , + sum(decode( name, 'physical writes' , valuepersecond, 0 )) physical_writes, + sum(decode( name, 'user calls' , valuepersecond, 0 )) user_calls, + sum(decode( name, 'recursive calls' , valuepersecond, 0 )) recursive_calls, + sum(decode( name, 'parse count (total)' , valuepersecond, 0 )) parses , + sum(decode( name, 'parse count (hard)' , valuepersecond, 0 )) hard_parses , + sum(decode( name, 'sorts (rows)' , valuepersecond, 0 )) sort_rows , + sum(decode( name, 'sorts (memory)' , valuepersecond, + 'sorts (disk)' , valuepersecond, 0 )) sorts , + sum(decode( name, 'logons cumulative' , valuepersecond, 0 )) logons , + sum(decode( name, 'execute count' , valuepersecond, 0 )) executes , + sum(decode( name, 'user rollbacks' , valuepersecond, + 'user commits' , valuepersecond, 0 )) transactions, + sum(decode( name, 'user rollbacks' , valuepersecond, 0 )) rollbacks, + sum(decode( name, 'rollback changes - undo records applied' , valuepersecond, 0 )) undo_records, + sum(decode( name, 'CPU used by this session' , valuepersecond/100, 0 )) cpusecs, + sum(decode( name, 'recursive cpu usage' , valuepersecond/100, 0 )) rec_cpusecs, + sum(decode( name, 'parse time cpu' , valuepersecond/100, 0 )) parse_cpusecs + from s + group by database,instance_number, bsnap_time + ) +select to_char(bsnap_time,'DD-MON-YY HH24:MI') snap_time, instance_number, redo_blocks, logical_reads, block_changes, physical_reads, + physical_writes, user_calls, parses, hard_parses, sorts, logons, executes, transactions, + to_char(100 * (block_changes / decode(logical_reads,0,1,logical_reads)),'909D90')||'%' changes_per_read, + to_char(100 * (recursive_calls / decode(user_calls + recursive_calls, 0, 1,user_calls + recursive_calls)),'909D90') ||'%' recursive, + to_char(100 * (rollbacks / decode(transactions,0,1,transactions)),'909D90') ||'%' rollback, + to_char(decode(sorts, 0, NULL, (sort_rows/sorts)),'999999') rows_per_sort, + 100 * cpusecs cpusecs_pct, + 100 * rec_cpusecs rec_cpusecs_pct, + 100 * parse_cpusecs parse_cpusecs_pct, + to_char(100 * (1 - physical_reads / decode(logical_reads, 0, 1,logical_reads)),'909D90') ||'%' buffer_hit, + undo_records, rollbacks +from g +order by instance_number, bsnap_time; \ No newline at end of file diff --git a/vdh/streams_hc_10GR2.sql b/vdh/streams_hc_10GR2.sql new file mode 100644 index 0000000..b078ad4 --- /dev/null +++ b/vdh/streams_hc_10GR2.sql @@ -0,0 +1,3215 @@ +REM +REM This healthcheck script is for use on Oracle10gR2 databases only. +REM +REM +REM Do not use this script on Oracle9iR2 or Oracle 10gR1 Streams configurations. +REM +REM It is recommended to run with markup html ON (default is on) and generate an HTML file for web viewing. +REM Please provide the output in HTML format when Oracle (support or development) requests healthcheck output. +REM To convert output to a text file viewable with a text editor, +REM change the HTML ON to HTML OFF in the set markup command +REM Remember to set up a spool file to capture the output +REM + +--connect / as sysdba +set markup HTML ON entmap off + + +alter session set nls_date_format='HH24:Mi:SS MM/DD/YY'; +set heading off + +select 'STREAMS Health Check (V3.0.26) for '||global_name||' on Instance='||instance_name||' generated: '||sysdate o from global_name, v$instance; +set heading on timing off + + +prompt Configuration: Queue Capture Propagation Apply Database + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors + + + +set lines 180 +set numf 9999999999999999 +set pages 9999 +col apply_database_link HEAD 'Database Link|for Remote|Apply' format a15 + +prompt ============================================================================================ +prompt +prompt ++ DATABASE INFORMATION ++ +COL MIN_LOG FORMAT A7 +COL PK_LOG FORMAT A6 +COL UI_LOG FORMAT A6 +COL FK_LOG FORMAT A6 +COL ALL_LOG FORMAT A6 +COL FORCE_LOG FORMAT A10 +col archive_change# format 999999999999999999 +col archivelog_change# format 999999999999999999 +COL NAME HEADING 'Name' +col platform_name format a30 wrap +col current_scn format 99999999999999999 + +SELECT DBid,name,created, +SUPPLEMENTAL_LOG_DATA_MIN MIN_LOG,SUPPLEMENTAL_LOG_DATA_PK PK_LOG, +SUPPLEMENTAL_LOG_DATA_UI UI_LOG, +SUPPLEMENTAL_LOG_DATA_FK FK_LOG, +SUPPLEMENTAL_LOG_DATA_ALL ALL_LOG, + FORCE_LOGGING FORCE_LOG, +resetlogs_time,log_mode, archive_change#, +open_mode,database_role,archivelog_change# , current_scn, platform_id, platform_name from v$database; + + +prompt ============================================================================================ +prompt +prompt ++ INSTANCE INFORMATION ++ +col host format a20 wrap +select instance_number INSTANCE, instance_name NAME, HOST_NAME HOST, VERSION, +STARTUP_TIME, STATUS, PARALLEL, ARCHIVER,LOGINS, SHUTDOWN_PENDING, INSTANCE_ROLE, ACTIVE_STATE from gv$instance; +prompt +prompt ============================================================================================ + +prompt +++ Current Database Incarnation +++ +prompt + +col incarnation# HEADING 'Current|Incarnation' format 9999999999999999 +col resetlogs_id HEADING 'ResetLogs|Id' format 9999999999999999 +col resetlogs_change# HEADING 'ResetLogs|Change Number' format 9999999999999999 + +Select Incarnation#, resetlogs_id,resetlogs_change# from v$database_incarnation where status = 'CURRENT'; + +prompt ============================================================================================ +prompt +prompt ++ REGISTRY INFORMATION ++ +col comp_id format a10 wrap +col comp_name format a35 wrap +col version format a10 wrap +col schema format a10 + +select comp_id, comp_name,version,status,modified,schema from DBA_REGISTRY; + +prompt ============================================================================================ +prompt +prompt ++ NLS DATABASE PARAMETERS ++ +col parameter format a30 wrap +col value format a30 wrap + +select * from NLS_DATABASE_PARAMETERS; + +prompt ============================================================================================ +prompt +prompt ++ GLOBAL NAME ++ + + +select global_name from global_name; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Key Init.ORA parameters ++ +prompt +col name HEADING 'Parameter|Name' format a30 +col value HEADING 'Parameter|Value' format a15 +col description HEADING 'Description' format a60 word + +select name,value,description from v$parameter where name in + ('aq_tm_processes', 'archive_lag_target', 'job_queue_processes','_job_queue_interval', + 'shared_pool_size', 'sga_max_size', 'sga_target','streams_pool_size', + 'global_names', 'compatible','log_parallelism', 'logmnr_max_persistent_sessions', + 'parallel_max_servers', 'processes', 'sessions' + ); + +prompt +prompt ============================================================================================ + +prompt +prompt ++ STREAMS QUEUES IN DATABASE ++ +prompt ========================================================================================== + +prompt +COLUMN OWNER HEADING 'Owner' FORMAT A10 +COLUMN NAME HEADING 'Queue Name' FORMAT A30 +COLUMN QUEUE_TABLE HEADING 'Queue Table' FORMAT A30 +COLUMN ENQUEUE_ENABLED HEADING 'Enqueue|Enabled' FORMAT A7 +COLUMN DEQUEUE_ENABLED HEADING 'Dequeue|Enabled' FORMAT A7 +COLUMN USER_COMMENT HEADING 'Comment' FORMAT A20 +COLUMN PRIMARY_INSTANCE HEADING 'Primary|Instance|Owner'FORMAT 999999 +column SECONDARY_INSTANCE HEADING 'Secondary|Instance|Owner' FORMAT 999999 +COLUMN OWNER_INSTANCE HEADING 'Owner|Instance' FORMAT 999999 +column NETWORK_NAME HEADING 'Network|Name' FORMAT A30 + +SELECT q.OWNER, q.NAME, t.QUEUE_TABLE, q.enqueue_enabled, + q.dequeue_enabled,t.primary_instance,t.secondary_instance, t.owner_instance,network_name, q.USER_COMMENT + FROM DBA_QUEUES q, DBA_QUEUE_TABLES t + WHERE t.OBJECT_TYPE = 'SYS.ANYDATA' AND + q.QUEUE_TABLE = t.QUEUE_TABLE AND + q.OWNER = t.OWNER; +prompt + +prompt +prompt +++ Queue Subscribers ++ +prompt + +column subscriber HEADING 'Subscriber' format a35 wrap +column name HEADING 'Queue|Name' format a35 wrap +column delivery_mode HEADING 'Delivery|Mode' format a23 +column queue_to_queue HEADING 'Queue to|Queue' format a5 +column protocol HEADING 'Protocol' +SELECT qs.owner||'.'||qs.queue_name name, qs.queue_table, + NVL2(qs.consumer_name,'CONSUMER: ','ADDRESS : ') || + NVL(qs.consumer_name,qs.address) Subscriber, + qs.delivery_mode,qs.queue_to_queue,qs.protocol +FROM dba_queue_subscribers qs, dba_queue_tables qt +WHERE qt.OBJECT_TYPE = 'SYS.ANYDATA' AND + qs.QUEUE_TABLE = qt.QUEUE_TABLE AND + qs.OWNER = qt.OWNER +ORDER BY qs.owner,qs.queue_name; + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors + +prompt ========================================================================================= +prompt +prompt ++ Minimum Archive Log Necessary to Restart Capture ++ +prompt Note: This query is valid for databases where the capture processes exist for the same source database. +prompt + +set serveroutput on +DECLARE + hScn number := 0; + lScn number := 0; + sScn number; + ascn number; + alog varchar2(1000); +begin + select min(start_scn), min(applied_scn) into sScn, ascn + from dba_capture; + + + DBMS_OUTPUT.ENABLE(2000); + + for cr in (select distinct(a.ckpt_scn) + from system.logmnr_restart_ckpt$ a + where a.ckpt_scn <= ascn and a.valid = 1 + and exists (select * from system.logmnr_log$ l + where a.ckpt_scn between l.first_change# and l.next_change#) + order by a.ckpt_scn desc) + loop + if (hScn = 0) then + hScn := cr.ckpt_scn; + else + lScn := cr.ckpt_scn; + exit; + end if; + end loop; + + if lScn = 0 then + lScn := sScn; + end if; + + dbms_output.put_line('Capture will restart from SCN ' || lScn ||' in the following file:'); + for cr in (select name, first_time + from DBA_REGISTERED_ARCHIVED_LOG + where lScn between first_scn and next_scn order by thread#) + loop + + dbms_output.put_line(cr.name||' ('||cr.first_time||')'); + + end loop; +end; +/ + + +prompt ============================================================================================ + +prompt +prompt ++ CAPTURE PROCESSES IN DATABASE ++ +-- col start_scn format 9999999999999999 +-- col applied_scn format 9999999999999999 +col capture_name HEADING 'Capture|Name' format a30 wrap +col status HEADING 'Status' format a10 wrap + +col QUEUE HEADING 'Queue' format a25 wrap +col RSN HEADING 'Positive|Rule Set' format a25 wrap +col RSN2 HEADING 'Negative|Rule Set' format a25 wrap +col capture_type HEADING 'Capture|Type' format a10 wrap +col error_message HEADING 'Capture|Error Message' format a60 word +col logfile_assignment HEADING 'Logfile|Assignment' +col checkpoint_retention_time HEADING 'Days to |Retain|Checkpoints' +col Status_change_time HEADING 'Status|Timestamp' +col error_number HEADING 'Error|Number' +col version HEADING 'Version' + +SELECT capture_name, queue_owner||'.'||queue_name QUEUE, capture_type, status, +rule_set_owner||'.'||rule_set_name RSN, negative_rule_set_owner||'.'||negative_rule_set_name RSN2, +checkpoint_retention_time, +version, logfile_assignment,error_number, status_change_time, error_message +FROM DBA_CAPTURE; + + +prompt ++ CAPTURE PROCESS SOURCE INFORMATION ++ + +col QUEUE HEADING 'Queue' format a25 wrap +col RSN HEADING 'Positive|Rule Set' format a25 wrap +col RSN2 HEADING 'Negative|Rule Set' format a25 wrap +col capture_type HEADING 'Capture|Type' format a10 wrap +col source_database HEADING 'Source|Database' format a30 wrap +col first_scn HEADING 'First|SCN' +col start_scn HEADING 'Start|SCN' +col captured_scn HEADING 'Captured|SCN' +col applied_scn HEADING 'Applied|SCN' +col last_enqueued_scn HEADING 'Last|Enqueued|SCN' +col required_checkpoint_scn HEADING 'Required|Checkpoint|SCN' +col max_checkpoint_scn HEADING 'Maximum|Checkpoint|SCN' +col source_dbid HEADING 'Source|Database|ID' +col source_resetlogs_scn HEADING 'Source|ResetLogs|SCN' +col logminer_id HEADING 'Logminer|Session|ID' +col source_resetlogs_time HEADING 'Source|ResetLogs|Time' + + + + +SELECT capture_name, capture_type, source_database, +first_scn, start_scn, captured_scn, applied_scn, last_enqueued_scn, +required_checkpoint_scn, +max_checkpoint_scn, source_dbid, source_resetlogs_scn, +source_resetlogs_time, logminer_id +FROM DBA_CAPTURE; + +prompt +prompt ++ CAPTURE PROCESS PARAMETERS ++ +col CAPTURE_NAME HEADING 'Capture|Name' format a30 wrap +col parameter HEADING 'Parameter|Name' format a25 +col value HEADING 'Parameter|Value' format a20 +col set_by_user HEADING 'User|Set?'format a5 + +break on capture_name + +select * from dba_capture_parameters order by capture_name,PARAMETER; + +prompt ============================================================================================ +prompt +prompt ++ STREAMS CAPTURE RULES CONFIGURED WITH DBMS_STREAMS_ADM PACKAGE ++ +col NAME Heading 'Capture|Name' format a25 wrap +col object format a45 wrap heading 'Object' + +col source_database format a15 wrap +col rule_set_type heading 'Rule Set|Type' +col RULE format a45 wrap heading 'Rule |Name' +col TYPE format a15 wrap heading 'Rule |Type' +col dml_condition format a40 wrap heading 'Rule|Condition' +col include_tagged_lcr heading 'Tagged|Rules?' format a7 + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +rule_set_type, +SOURCE_DATABASE, +STREAMS_RULE_TYPE ||' '||Rule_type TYPE , +INCLUDE_TAGGED_LCR, +rule_owner||'.'||rule_name RULE +from dba_streams_rules where streams_type = 'CAPTURE' +order by name,object, source_database, rule_set_type,rule; + + + +prompt ++ STREAMS TABLE SUBSETTING RULES ++ +col NAME Heading 'Capture Name' format a25 wraP +col object format A25 WRAP +col source_database format a15 wrap +col RULE format a35 wrap +col TYPE format a15 wrap +col dml_condition format a40 wrap + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +RULE_TYPE || 'TABLE RULE' TYPE, +rule_owner||'.'||rule_name RULE, +DML_CONDITION , SUBSETTING_OPERATION +from dba_streams_rules where streams_type = 'CAPTURE' and (dml_condition is not null or subsetting_operation is not null); + +prompt +prompt ++ CAPTURE RULES BY RULE SET ++ +col capture_name format a25 wrap heading 'Capture|Name' +col RULE_SET format a25 wrap heading 'Rule Set|Name' +col RULE_NAME format a25 wrap heading 'Rule|Name' +col condition format a50 wrap heading 'Rule|Condition' +set long 4000 +REM break on rule_set + +select c.capture_name, rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, DBA_RULES r ,DBA_CAPTURE c +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and +rsr.rule_set_owner=c.rule_set_owner and rsr.rule_set_name=c.rule_set_name and rsr.rule_set_name in +(select rule_set_name from dba_capture) order by rsr.rule_set_owner,rsr.rule_set_name; + +prompt +** CAPTURE RULES IN NEGATIVE RULE SET **+ +prompt +select c.capture_name, rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, DBA_RULES r ,DBA_CAPTURE c +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and +rsr.rule_set_owner=c.negative_rule_set_owner and rsr.rule_set_name=c.negative_rule_set_name + and rsr.rule_set_name in +(select negative_rule_set_name rule_set_name from dba_capture) order by rsr.rule_set_owner,rsr.rule_set_name; + +prompt +prompt ++ CAPTURE RULE TRANSFORMATIONS BY RULE SET ++ +col RULE_SET format a25 wrap heading 'Rule Set|Name' +col RULE_NAME format a25 wrap heading 'Rule|Name' +col condition format a60 wrap heading 'Rule|Condition' +set long 4000 +REM break on RULE_SET + +col action_context_name format a32 wrap +col action_context_value format a32 wrap +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET , r.* from + dba_rule_set_rules rsr, dba_streams_transformations r +where + r.rule_name = rsr.rule_name and r.rule_owner = rsr.rule_owner and rule_set_name in + (select rule_set_name from dba_capture) +order by rsr.rule_set_owner,rsr.rule_set_name, r.rule_owner, r.rule_name,transform_type desc, step_number, precedence; + +prompt ============================================================================================ +prompt +prompt ++ Registered Log Files for Capture ++ + +COLUMN CONSUMER_NAME HEADING 'Capture|Process|Name' FORMAT A15 +COLUMN SOURCE_DATABASE HEADING 'Source|Database' FORMAT A10 +COLUMN SEQUENCE# HEADING 'Sequence|Number' FORMAT 999999 +COLUMN NAME HEADING 'Archived Redo Log|File Name' format a35 +column first_scn HEADING 'Archived Log|First SCN' +COLUMN FIRST_TIME HEADING 'Archived Log Begin|Timestamp' +column next_scn HEADING 'Archived Log|Last SCN' +COLUMN NEXT_TIME HEADING 'Archived Log Last|Timestamp' +COLUMN MODIFIED_TIME HEADING 'Archived Log|Registered Time' +COLUMN DICTIONARY_BEGIN HEADING 'Dictionary|Build|Begin' format A6 +COLUMN DICTIONARY_END HEADING 'Dictionary|Build|End' format A6 +COLUMN PURGEABLE HEADING 'Purgeable|Archive|Log' format a9 + +SELECT r.CONSUMER_NAME, + r.SOURCE_DATABASE, + r.SEQUENCE#, + r.NAME, + r.first_scn, + r.FIRST_TIME, + r.next_scn, + r.next_time, + r.MODIFIED_TIME, + r.DICTIONARY_BEGIN, + r.DICTIONARY_END, + r.purgeable + FROM DBA_REGISTERED_ARCHIVED_LOG r, DBA_CAPTURE c + WHERE r.CONSUMER_NAME = c.CAPTURE_NAME + ORDER BY source_database, consumer_name, r.first_scn; + +prompt ============================================================================================ +prompt +prompt ++ CAPTURE EXTRA ATTRIBUTES ++ + +COLUMN CAPTURE_NAME HEADING 'Capture Process' FORMAT A20 +COLUMN ATTRIBUTE_NAME HEADING 'Attribute Name' FORMAT A15 +COLUMN INCLUDE HEADING 'Include Attribute in LCRs?' FORMAT A30 + +SELECT CAPTURE_NAME, ATTRIBUTE_NAME, INCLUDE + FROM DBA_CAPTURE_EXTRA_ATTRIBUTES + ORDER BY CAPTURE_NAME; + + + + +prompt ============================================================================================ +prompt +prompt ++ TABLES PREPARED FOR CAPTURE ++ + +col table_owner format a30 HEADING 'Table|Owner' +col table_name format a30 HEADING 'Table|Name' +col timestamp heading 'Timestamp' +col supplemental_log_data_pk HEADING 'PK|Logging' +col supplemental_log_data_ui HEADING 'UI|Logging' +col supplemental_log_data_fk HEADING 'FK|Logging' +col supplemental_log_data_all HEADING 'All|Logging' + +select * from dba_capture_prepared_tables order by table_owner,table_name; + +prompt ++ SCHEMAS PREPARED FOR CAPTURE ++ +col schema_name heading 'Schema|Name' + +select * from dba_capture_prepared_schemas order by schema_name; + +prompt ++ DATABASE PREPARED FOR CAPTURE ++ + +select * from dba_capture_prepared_database; + +prompt ============================================================================================ +prompt +prompt ++ TABLES WITH SUPPLEMENTAL LOGGING ++ +col OWNER format a30 wrap +col table_name format a30 wrap + +select distinct owner,table_name from dba_log_groups; + + +prompt +prompt ++ TABLE LEVEL SUPPLEMENTAL LOG GROUPS ENABLED FOR CAPTURE ++ +col object format a40 wrap +col column_name format a30 wrap +col log_group_name format a25 wrap + +select owner||'.'||table_name OBJECT, log_group_name, log_group_type, + decode(always,'ALWAYS','Unconditional','CONDITIONAL','Conditional',NULL,'Conditional') ALWAYS, generated from dba_log_groups; + +prompt ++ SUPPLEMENTALLY LOGGED COLUMNS ++ +col logging_property heading 'Logging|Property' format a9 + +select owner||'.'||table_name OBJECT, log_group_name, column_name,position,LOGGING_PROPERTY from dba_log_group_columns; + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors + + +prompt +prompt ========================================================================================== +prompt +prompt ++ MESSAGING CLIENTS IN DATABASE ++ +prompt ========================================================================================= +prompt + +COLUMN STREAMS_NAME HEADING 'Messaging|Client' FORMAT A25 +COLUMN QUEUE_OWNER HEADING 'Queue Owner' FORMAT A10 +COLUMN QUEUE_NAME HEADING 'Queue Name' FORMAT A20 +COLUMN RULE_SET_NAME HEADING 'Positive|Rule Set' FORMAT A11 +COLUMN NEGATIVE_RULE_SET_NAME HEADING 'Negative|Rule Set' FORMAT A11 + + +SELECT STREAMS_NAME, + QUEUE_OWNER, + QUEUE_NAME, + RULE_SET_NAME, + NEGATIVE_RULE_SET_NAME + FROM DBA_STREAMS_MESSAGE_CONSUMERS + order by queue_owner, queue_name,streams_name; + +prompt +prompt ++ MESSAGE CLIENT NOTIFICATIONS ++ +prompt +COLUMN STREAMS_NAME HEADING 'Messaging|Client' FORMAT A25 +COLUMN QUEUE_OWNER HEADING 'Queue|Owner' FORMAT A10 +COLUMN QUEUE_NAME HEADING 'Queue Name' FORMAT A20 +COLUMN NOTIFICATION_TYPE HEADING 'Notification|Type' FORMAT A15 +COLUMN NOTIFICATION_ACTION HEADING 'Notification|Action' FORMAT A35 + +SELECT STREAMS_NAME, + QUEUE_OWNER, + QUEUE_NAME, + NOTIFICATION_TYPE, + NOTIFICATION_ACTION + FROM DBA_STREAMS_MESSAGE_CONSUMERS + WHERE NOTIFICATION_TYPE IS NOT NULL +order by queue_owner,queue_name,streams_name; + + +prompt +prompt ========================================================================================== +prompt +prompt ++ PROPAGATIONS IN DATABASE ++ +prompt ========================================================================================= +prompt +COLUMN 'Source Queue' FORMAT A39 +COLUMN 'Destination Queue' FORMAT A39 +COLUMN PROPAGATION_NAME HEADING 'Propagation' FORMAT A35 +column queue_to_queue HEADING 'Q-2-Q' +column error_message HEADING 'Error Message' +column error_date HEADING 'Error Date' + +SELECT p.propagation_name, p.SOURCE_QUEUE_OWNER ||'.'|| + p.SOURCE_QUEUE_NAME ||'@'|| + g.GLOBAL_NAME "Source Queue", + p.DESTINATION_QUEUE_OWNER ||'.'|| + p.DESTINATION_QUEUE_NAME ||'@'|| + p.DESTINATION_DBLINK "Destination Queue", + p.queue_to_queue, + p.status, + p.error_date, + p.error_message + FROM DBA_PROPAGATION p, GLOBAL_NAME g; + +prompt +prompt ++ PROPAGATION RULE SETS IN DATABASE ++ +prompt +COLUMN PROPAGATION_NAME HEADING 'Propagation' FORMAT A35 +COLUMN Positive HEADING 'Positive|Rule Set' FORMAT A35 +COLUMN Negative HEADING 'Negative|Rule Set' FORMAT A35 + +SELECT PROPAGATION_NAME, RULE_SET_OWNER||'.'||RULE_SET_NAME Positive, + NEGATIVE_RULE_SET_OWNER||'.'||NEGATIVE_RULE_SET_NAME Negative + FROM DBA_PROPAGATION; + +prompt ============================================================================================ +prompt +prompt ++ STREAMS PROPAGATION RULES CONFIGURED ++ +col NAME Heading 'Name' format a25 wrap +col PropNAME format a25 Heading 'Propagation Name' +col object format a25 wrap +col source_database format a15 wrap +col RULE format a35 wrap +col TYPE format a15 wrap +col dml_condition format a40 wrap + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +rule_set_type, +SOURCE_DATABASE, +STREAMS_RULE_TYPE ||' '||Rule_type TYPE , +INCLUDE_TAGGED_LCR, +rule_owner||'.'||rule_name RULE +from dba_streams_rules where streams_type = 'PROPAGATION' +order by name,object, source_database, rule_set_type,rule; + + + + +prompt ++ STREAMS TABLE SUBSETTING RULES ++ +col NAME format a25 wraP +col object format A25 WRAP +col source_database format a15 wrap +col RULE format a35 wrap +col TYPE format a15 wrap +col dml_condition format a40 wrap + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +RULE_TYPE || 'TABLE RULE' TYPE, +rule_owner||'.'||rule_name RULE, +DML_CONDITION , SUBSETTING_OPERATION +from dba_streams_rules where streams_type = 'PROPAGATION' and (dml_condition is not null or subsetting_operation is not null); + +prompt +prompt ++ PROPAGATION RULES BY RULE SET ++ +prompt +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col condition format a60 wrap +set long 4000 +REM break on RULE_SET + +set long 4000 +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, dba_rules r +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and rule_set_name in +(select rule_set_name from dba_propagation) order by rsr.rule_set_owner,rsr.rule_set_name; + + +prompt +** PROPAGATION RULES IN NEGATIVE RULE SET **+ +prompt +select c.propagation_name, rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, DBA_RULES r ,DBA_PROPAGATION c +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and +rsr.rule_set_owner=c.negative_rule_set_owner and rsr.rule_set_name=c.negative_rule_set_name + and rsr.rule_set_name in +(select negative_rule_set_name rule_set_name from dba_propagation) order by rsr.rule_set_owner,rsr.rule_set_name; + + +prompt +prompt ++ PROPAGATION RULE TRANSFORMATIONS BY RULE SET ++ +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col action_context_name format a32 wrap +col action_context_value format a32 wrap +REM break on RULE_SET + +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET , r.* from + dba_rule_set_rules rsr, dba_streams_transformations r +where + r.rule_name = rsr.rule_name and r.rule_owner = rsr.rule_owner and rule_set_name in + (select rule_set_name from dba_propagation) +order by rsr.rule_set_owner,rsr.rule_set_name, r.rule_owner, r.rule_name,transform_type desc, step_number, precedence; + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors + +prompt +prompt ============================================================================================ + +prompt +prompt ++ APPLY INFORMATION ++ +col apply_name format a25 wrap heading 'Apply|Name' +col queue format a25 wrap heading 'Queue|Name' +col apply_tag format a7 wrap heading 'Apply|Tag' +col ruleset format a25 wrap heading 'Rule Set|Name' +col apply_user format a15 wrap heading 'Apply|User' +col apply_captured format a15 wrap heading 'Captured or|User Enqueued' +col RSN HEADING 'Positive|Rule Set' format a25 wrap +col RSN2 HEADING 'Negative|Rule Set' format a25 wrap +col apply_database_link HEADING 'Remote Apply|Database Link' format a25 wrap + +Select apply_name,queue_owner||'.'||queue_name QUEUE, +DECODE(APPLY_CAPTURED, + 'YES', 'Captured', + 'NO', 'User-Enqueued') APPLY_CAPTURED,status, +apply_user, apply_tag, rule_set_owner||'.'||rule_set_name RSN, +negative_rule_set_owner||'.'||negative_rule_set_name RSN2, +apply_database_link from DBA_APPLY; + +prompt ++ APPLY PROCESS INFORMATION ++ +col max_applied_message_number HEADING 'Maximum Applied|Message Number' +col error_message HEADING 'Apply|Error Message' format a60 wrap + +select apply_name, max_applied_message_number,status, status_change_time,error_number, error_message from dba_apply; + + +prompt ++ APPLY PROCESS HANDLERS ++ + +select apply_name, ddl_handler, message_handler, precommit_handler from dba_apply; + +prompt +prompt ++ APPLY PROCESS PARAMETERS ++ + +col APPLY_NAME format a30 +col parameter format a20 +col value format a20 +break on apply_name + +select * from dba_apply_parameters order by apply_name,parameter; + +prompt ============================================================================================ +prompt +prompt ++ STREAMS APPLY RULES CONFIGURED ++ +col NAME format a25 wrap heading 'Streams|Name' +col object format a25 wrap heading 'Database|Object' +col source_database format a15 wrap heading 'Source|Database' +col RULE format a35 wrap heading 'Rule|Name' +col RULE format a35 wrap heading 'Rule|Name' +col TYPE format a15 wrap heading 'Rule|Type' +col dml_condition format a40 wrap heading 'Rule|Condition' + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +rule_set_type, +SOURCE_DATABASE, +STREAMS_RULE_TYPE ||' '||Rule_type TYPE , +INCLUDE_TAGGED_LCR, +rule_owner||'.'||rule_name RULE +from dba_streams_rules where streams_type = 'APPLY' +order by name,object, source_database, rule_set_type,rule; + +prompt ++ STREAMS TABLE SUBSETTING RULES ++ +col NAME format a25 wraP +col object format A25 WRAP +col source_database format a15 wrap +col RULE format a35 wrap +col TYPE format a15 wrap +col dml_condition format a40 wrap + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +RULE_TYPE || 'TABLE RULE' TYPE, +rule_owner||'.'||rule_name RULE, +DML_CONDITION , SUBSETTING_OPERATION +from dba_streams_rules where streams_type = 'APPLY' and (dml_condition is not null or subsetting_operation is not null); + +prompt + +prompt ++ APPLY Rules ++ +prompt +prompt ++ APPLY RULES BY RULE SET ++ +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col condition format a60 wrap +set long 4000 +REM break on RULE_SET + +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, dba_rules r +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and rule_set_name in +(select rule_set_name from dba_apply) order by rsr.rule_set_owner,rsr.rule_set_name; + + +prompt +** APPLY RULES IN NEGATIVE RULE SET **+ +prompt +select c.apply_name, rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, DBA_RULES r ,DBA_APPLY c +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and +rsr.rule_set_owner=c.negative_rule_set_owner and rsr.rule_set_name=c.negative_rule_set_name + and rsr.rule_set_name in +(select negative_rule_set_name rule_set_name from dba_apply) order by rsr.rule_set_owner,rsr.rule_set_name; + + + +prompt +prompt ++ APPLY RULE TRANSFORMATIONS BY RULE SET ++ +col action_context_name format a32 wrap +col action_context_value format a32 wrap +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col condition format a60 wrap +set long 4000 +REM break on RULE_SET + +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET , r.* from + dba_rule_set_rules rsr, dba_streams_transformations r +where + r.rule_name = rsr.rule_name and r.rule_owner = rsr.rule_owner and rule_set_name in + (select rule_set_name from dba_apply) +order by rsr.rule_set_owner,rsr.rule_set_name, r.rule_owner, r.rule_name,transform_type desc, step_number, precedence; + + +prompt ============================================================================================ +prompt +prompt ++ APPLY HANDLERS ++ +col apply_name format a25 wrap +col message_handler format a25 wrap +col ddl_handler format a25 wrap + +select apply_name, message_handler, ddl_handler from dba_apply where message_handler is not null or ddl_handler is not null; + +prompt +prompt ++ APPLY DML HANDLERS ++ +col object format a35 wrap +col user_procedure HEADING 'User |Procedure' format a40 wrap +col dblink Heading 'Apply|DBLink' format a15 wrap +col apply_database_link HEAD 'Database Link|for Remote|Apply' format a25 wrap +col operation_name HEADING 'Operation|Name' format a13 +col typ Heading 'Handler|Type' format a5 wrap +col lob_assemble HEADING 'Assemble|Lob?' format a8 + +select object_owner||'.'||object_name OBJECT, operation_name , +user_procedure, +apply_name, +decode(error_handler,'Y','Error','N','DML','UNKNOWN') TYP, +decode(assemble_lobs,'Y','Yes','N','No','UNKNOWN') lob_assemble, +APPLY_Database_link +from dba_apply_dml_handlers +order by object_owner,object_name,apply_name; + +prompt +prompt ++ DML HANDLER STATUS ++ +prompt +col user_procedure format a40 wrap + + select o.owner||'.'||o.object_name OBJECT, o.status,o.object_type,o.created, o.last_ddl_time from dba_objects o, + (select distinct user_procedure from dba_apply_dml_handlers where user_procedure is not null) h + where o.owner=replace(substr(h.user_procedure,1,instr(h.user_procedure,'.',1,1)-1),'"',null) + and o.object_name = replace(substr(h.user_procedure,instr(h.user_procedure,'.',-1,1)+1),'"',null); + + +prompt +prompt ++ RULE TRANSFORMATIONS STATUS ++ +col action_context_name format a32 wrap +col action_context_value format a32 wrap head 'Transformation Name' +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col condition format a60 wrap +set long 4000 +REM break on RULE_SET + +select ac.owner||'.'||ac.object_name ACTION_CONTEXT_VALUE, + o.status, o.object_type, o.created, o.last_ddl_time +from dba_objects o, +(select distinct replace(substr(transform_function_name,1,instr(transform_function_name,'.',1,1)-1),'"') owner +, replace(substr(transform_function_name,instr(transform_function_name,'.',-1,1)+1),'"') object_name + from dba_streams_transform_function ) ac +where o.owner = ac.owner and o.object_name = ac.object_name; + + +prompt +prompt ++ APPLY ENQUEUE directives ++ + +select * from dba_apply_enqueue; + +prompt +prompt ++ APPLY EXECUTE directives ++ + +select * from dba_apply_execute; + +prompt + +prompt ++ Conflict Detection Control ++ +prompt + +select * From dba_apply_table_columns; + + +prompt ============================================================================================ +prompt +prompt ++ UPDATE CONFLICT RESOLUTION COLUMNS ++ + +col object format a25 wrap +col method_name heading 'Method' format a12 +col resolution_column heading 'Resolution|Column' format a13 +col column heading 'Column Name' format a30 + +select object_owner||'.'||object_name object, method_name, +resolution_column, column_name , apply_database_link +from dba_apply_conflict_columns order by object_owner,object_name; + + +prompt ============================================================================================ +prompt +prompt ++ KEY COLUMNS SET FOR APPLY ++ + +select * from dba_apply_key_columns; + +prompt ============================================================================================ +prompt +prompt ++ OBJECT DEPENDENCIES SET FOR APPLY ++ + +select * from dba_apply_object_dependencies; + +prompt ============================================================================================ +prompt +prompt ++ VALUE DEPENDENCIES SET FOR APPLY ++ + +select * from dba_apply_value_dependencies; + + + +prompt ++ APPLY PROGRESS ++ +col oldest_message_number HEADING 'Oldest|Message|SCN' +col apply_time HEADING 'Apply|Timestamp' +select * from dba_apply_progress; + + + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors + + + +prompt ============================================================================================ +prompt +prompt ++ ERROR QUEUE ++ +col source_commit_scn HEADING 'Source|Commit|Scn' +col message_number HEADING 'Message in| Txn causing|Error' +col message_count HEADING 'Total|Messages|in Txn' +col local_transaction_id HEADING 'Local|Transaction| ID' +col error_message HEADING 'Apply|Error|Message' +col ERROR_CREATION_TIME HEADING 'Error|Creation|Timestamp' +col source_transaction_id HEADING 'Source|Transaction| ID' + +Select apply_name, source_database,source_commit_scn, + message_number, message_count, + local_transaction_id, + error_message , error_creation_time, + source_transaction_id +from DBA_APPLY_ERROR order by apply_name ,source_commit_scn ; + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors +prompt +prompt ============================================================================================ +prompt +prompt ++ INSTANTIATION SCNs for APPLY TABLES ++ +col source_database format a25 wrap +col object HEADING 'Database|Object' format a45 +col instantiation_scn format 9999999999999999 +col apply_database_link HEAD 'Database Link|for Remote|Apply' format a25 wrap + +select source_database, source_object_owner||'.'||source_object_name OBJECT, + ignore_scn, instantiation_scn, apply_database_link DBLINK +from dba_apply_instantiated_objects order by source_database, object; + +prompt +prompt ++ INSTANTIATION SCNs for APPLY SCHEMA and DATABASE (DDL) ++ +col OBJECT HEADING 'Database|Object' format a45 +col dblink HEADING 'Database|Link' +col inst_scn HEADING 'Instantiation|SCN' +col global_flag HEADING 'Schema or |Database' + + +select source_db_name source_database, name OBJECT, + DBLINK, inst_scn, decode(global_flag,0,'SCHEMA',1,'DATABASE') global_flag + from sys.apply$_source_schema order by source_database, object; + +prompt +prompt ============================================================================================ +prompt +prompt ++ DBA OBJECTS - Rules, and Streams Processes ++ +prompt +col OBJECT format a45 wrap heading 'Object' + +select owner||'.'||object_name OBJECT, + object_id,object_type,created,last_ddl_time, status from + dba_objects +WHERE object_type in ('RULE','RULE SET','CAPTURE','APPLY') + order by object_type, object; + + +prompt +prompt ============================================================================================ +prompt + +prompt ++ Check RECOVERABLE tables populated by MAINTAIN_{TABLE|SCHEMA|GLOBAL} scripts +prompt + +set long 100 +col progress format a28 +select sysdate,rs.creation_time, +rs.invoking_package||'.'||rs.invoking_procedure PROCEDURE, +rs.status, +rs.done_block_num||' of '||rs.total_blocks||' Steps Completed' PROGRESS, +to_number(sysdate-rs.creation_time)*86400 ELAPSED_SECONDS, +rs.script_id, +rsb.forward_block CURRENT_STEP +from dba_recoverable_script rs, +dba_recoverable_script_blocks rsb +where rs.script_id = rsb.script_id and rsb.block_num = rs.done_block_num + 1; + +prompt +prompt ++ Check RECOVERABLE error ++ + +SELECT * FROM DBA_RECOVERABLE_SCRIPT_ERRORS; + +prompt +prompt ++ Identify Script Blocks ++ + +set long 4000 +select + script_id, block_num, status, + forward_block_dblink,forward_block + from dba_recoverable_script_blocks order by script_id, block_num; + +set long 4000 + + + + +prompt +prompt ++ History ++ +prompt + +set numf '' + +col snap_id format 999999 HEADING 'Snap ID' +col BEGIN_INTERVAL_TIME format a28 HEADING 'Interval|Begin|Time' +col END_INTERVAL_TIME format a28 HEADING 'Interval|End|Time' +col INSTANCE_NUMBER HEADING 'Instance|Number' +col Queue format a28 wrap Heading 'Queue|Name' +col num_msgs HEADING 'Current|Number of Msgs|in Queue' +col cnum_msgs HEADING 'Cumulative|Total Msgs|for Queue' +col spill_msgs HEADING 'Current|Spilled Msgs|in Queue' +col cspill_msgs HEADING 'Cumulative|Total Spilled|for Queue' +col dbid HEADING 'Database|Identifier' +col total_spilled_msg HEADING 'Cumulative|Total Spilled|Messages' + +prompt +prompt ++ Streams Buffered Queue History for last day ++ + +select s.begin_interval_time,s.end_interval_time , + bq.snap_id, + bq.num_msgs, bq.spill_msgs, bq.cnum_msgs, bq.cspill_msgs, + bq.queue_schema||'.'||bq.queue_name Queue, + bq.queue_id, bq.startup_time,bq.instance_number,bq.dbid +from dba_hist_buffered_queues bq, dba_hist_snapshot s +where bq.snap_id=s.snap_id and s.end_interval_time >= systimestamp-1 +order by bq.queue_schema,bq.queue_name,s.end_interval_time; + + +prompt +prompt ++ Streams Buffered Subscriber History for last day ++ + +select s.begin_interval_time,s.end_interval_time , + bs.snap_id,bs.subscriber_id, + bs.num_msgs, bs.cnum_msgs, bs.total_spilled_msg, + bs.subscriber_name,subscriber_address, + bs.queue_schema||'.'||bs.queue_name Queue, + bs.startup_time,bs.instance_number,bs.dbid +from dba_hist_buffered_subscribers bs, dba_hist_snapshot s +where bs.snap_id=s.snap_id and s.end_interval_time >= systimestamp-1 +order by bs.queue_schema,bs.queue_name,bs.subscriber_id,s.end_interval_time; + +prompt +prompt ++ Streams Pool Advice History for last day ++ + +select s.begin_interval_time,s.end_interval_time , + pa.snap_id, + pa.size_for_estimate, pa.size_factor, pa.estd_spill_count, pa.estd_spill_time, + pa.estd_unspill_count,pa.estd_unspill_time, + pa.instance_number,pa.dbid +from dba_hist_streams_pool_advice pa, dba_hist_snapshot s +where pa.snap_id=s.snap_id and s.end_interval_time >= systimestamp-1 +order by s.end_interval_time, pa.size_factor; + + +prompt +prompt ++ Streams Capture History for last day ++ +column total_messages_created HEADING 'Total|Messages|Created' +column total_messages_enqueued HEADING 'Total Messages|Enqueued' +column lag HEADING 'Capture|Lag|(Seconds)' +column elapsed_capture HEADING 'Elapsed Time|Capture|(centisecs' +column elapsed_rule_time HEADING 'Elapsed Time|Rule Evaluation|(centisecs)' +column elapsed_enqueue_time HEADING 'Elapsed Time|Enqueuing Messages|(centisecs)' +column elapsed_lcr HEADING 'Elapsed Time|LCR Creation|(centisecs)' +column elapsed_redo_wait_time HEADING 'Elapsed Time|Redo Wait|(centisecs)' +column elapsed_Pause_time HEADING 'Elapsed Time|Paused|(centisecs)' + + + +select s.begin_interval_time,s.end_interval_time , + sc.capture_name,sc.lag, + sc.total_messages_captured,sc.total_messages_enqueued, + sc.elapsed_pause_time, + sc.elapsed_redo_wait_time, + sc.elapsed_rule_time, sc.elapsed_enqueue_time, + sc.startup_time,sc.instance_number,sc.dbid +from dba_hist_streams_capture sc, dba_hist_snapshot s +where sc.snap_id=s.snap_id and s.end_interval_time >= systimestamp-1 +order by sc.capture_name,s.end_interval_time; + + + + +prompt +prompt ++ Streams Apply History for last day ++ +col reader_total_messages_dequeued HEADING 'Reader|Total Msgs|Dequeued' +col reader_lag HEADING 'Reader|Lag|(Seconds)' +col coord_total_received HEADING 'Coordinator|Total Txn|Received' +col coord_total_applied HEADING 'Coordinator|Total Txn|Applied' +col coord_total_rollbacks HEADING 'Coordinator|Total Txn|Rollbacks' +col coord_total_wait_deps HEADING 'Coordinator|Total Txn|Wait-Dep' +col coord_total_wait_cmts HEADING 'Coordinator|Total Txn|Wait-Cmt' +col coord_lwm_lag HEADING 'Coordinator|LWM Lag|(seconds)' +col server_total_messages_applied HEADING 'Server|Total Msgs|Applied' +col server_elapsed_dequeue_time HEADING 'Server|Elapsed Dequeue|Time (cs)' +col server_elapsed_apply_time HEADING 'Server|Elapsed Apply|Time (cs)' + + + +select s.begin_interval_time,s.end_interval_time , + sa.apply_name,sa.reader_lag, + sa.reader_total_messages_dequeued, + sa.coord_lwm_lag, + sa.coord_total_received,sa.coord_total_applied, + sa.coord_total_rollbacks, + sa.coord_total_wait_deps,sa.coord_total_wait_cmts, + sa.server_total_messages_applied, + sa.server_elapsed_dequeue_time, + sa.server_elapsed_apply_time, + sa.startup_time,sa.instance_number,sa.dbid +from dba_hist_streams_apply_sum sa, dba_hist_snapshot s +where sa.snap_id=s.snap_id and s.end_interval_time >= systimestamp-1 +order by sa.apply_name,s.end_interval_time; + + +prompt +prompt ++ SUSPICIOUS RULES ++ +prompt +col object format a45 wrap +col rule format a45 wrap + + +REM This script does sanity checking of STREAMS objects compared to the underlying RULES. +REM It is assumed that the DBMS_STREAMS_ADM package procedures +REM ADD_TABLE_RULES +REM ADD_SCHEMA_RULES +REM ADD_GLOBAL_RULES +REM have been used to configure streams. +prompt +prompt ++ Check for MISSING RULES IN DBA_RULES ++ +prompt . Rows are returned if a rule is defined in DBA_STREAMS_TABLE_RULES (or SCHEMA, GLOBAL, too) +prompt . but does not exist in the DBA_RULES view. +prompt + +select rule_owner,rule_name from dba_streams_rules +MINUS +select rule_owner,rule_name from dba_rules; + +prompt +prompt ++ Check for EXTRA RULES IN DBA_RULES ++ +prompt . Rows are returned if a rule is defined in the DBA_RULES view +prompt . but does not exist in the DBA_STREAMS_RULES view. +prompt +col rule_name format a30 + +select rule_owner,rule_name from dba_rules +MINUS +select rule_owner,rule_name from dba_streams_rules; + +prompt +prompt ++ Check for RULE_CONDITIONS DO NOT MATCH BETWEEN STREAMS AND RULES ++ +prompt . Rows are returned if the rule condition is different between the DBA_STREAMS_TABLE_RULES view +prompt . and the DBA_RULES view. This indicates that a manual modification has been performed on the +prompt . underlying rule. DBA_STREAMS_TABLE_RULES always shows the initial configuration rule condition. +prompt + +select s.streams_type, s.streams_name, r.rule_owner||'.'||r.rule_name RULE,r.rule_condition + from dba_streams_rules s, dba_rules r + where r.rule_name=s.rule_name and r.rule_owner=s.rule_owner and + dbms_lob.substr(s.rule_condition) != dbms_lob.substr(r.rule_condition); + +prompt +prompt ++ Check for SOURCE DATABASE NAME DOES NOT MATCH FOR CAPTURE OR PROPAGATION RULES ++ + +prompt . Rows are returned if the source database column in the DBA_STREAMS_ RULES view +prompt . for capture and/or propagation defined at this site does not match the +prompt . global_name of this site. For capture rules, the source database must match the global_name +prompt . of database. For propagation rules, the source database name will typically be the +prompt . global name of the database. In some cases, it may be correct to have a different source +prompt . database name from the global name. For example, at an intermediate node between a source site +prompt . and the ultimate target site OR when using a downstream capture configuration, the rule source database +prompt . name field will be diferent from the local. global name of the intermediate site. +prompt + +select streams_type, streams_name, r.rule_owner||'.'||r.rule_name RULE from dba_streams_rules r +where source_database is not null and source_database != (select global_name from global_name) and streams_type in ('CAPTURE','PROPAGATION'); + +prompt +prompt ++ Check for GLOBAL RULE FOR CAPTURE SPECIFIED BUT CONDITION NOT MODIFIED ++ +rem - It is assumed that GLOBAL rules for CAPTURE must be modified because of the unsupported datatypes in 9iR2. +prompt . Rows are returned if a global rule is defined in the DBA_STREAMS_GLOBAL_RULES view +prompt . and the rule condition in the DBA_RULES view has not been modified. +prompt . In 9iR2, the GLOBAL rule must be modified to eliminate any unsupported datatypes. For example, +prompt . the streams administrator schema must be eliminated from the capture rules. Failure to do +prompt . this will result in the abort of the capture process. + +select streams_name, r.rule_owner||'.'||r.rule_name RULE from dba_streams_rules s , dba_rules r +where streams_type = 'CAPTURE' and +rule_type='GLOBAL' and +r.rule_name=s.rule_name and +r.rule_owner=s.rule_owner and +dbms_lob.substr(s.rule_condition) = dbms_lob.substr(r.rule_condition); + +prompt +prompt ++ Check for No RULE SET DEFINED FOR CAPTURE ++ +prompt +Prompt Capture requires a rule set to be defined to assure that only supported datatypes are captured. +prompt + +select capture_name, capture_type, source_database from dba_capture where rule_set_name is null and negative_rule_set_name is null; + +prompt +prompt ++ Check for APPLY RULES WITH NO SOURCE DATABASE SPECIFIED +prompt . Rows are returned if no source database is specified in the DBA_STREAMS_TABLE_RULES +prompt . (SCHEMA,GLOBAL) view. An apply process can perform transactions from a single source database. +prompt . In a typical replication environment, the source database name must be specified. In the single +prompt . site case where captured events from the source database are handled by an apply process on the +prompt . same database, the source database column does not need to be specified. +prompt + +select streams_name, s.rule_owner||'.'||s.rule_name RULE, s.schema_name||'.'|| s.object_name OBJECT +from dba_streams_rules s, dba_rules r +where s.streams_type = 'APPLY' and s.source_database is null and +r.rule_name=s.rule_name and +r.rule_owner=s.rule_owner and +dbms_lob.substr(s.rule_condition) = dbms_lob.substr(r.rule_condition); + +prompt +prompt ++ Check for SCHEMA RULES FOR NON_EXISTANT SCHEMA ++ + +select s.streams_type, s.streams_name, s.rule_owner||'.'||s.rule_name RULE, s.schema_name, +ac.nvn_name ACTION_CONTEXT_NAME, ac.nvn_value.accessvarchar2() ACTION_CONTEXT_VALUE +from dba_streams_rules s , dba_rules r, dba_users u, table(r.rule_action_context.actx_list) ac +where s.schema_name is null and u.username=s.schema_name +and r.rule_owner=s.rule_owner and r.rule_name = s.rule_name and ac.nvn_value.accessvarchar2() is null; + + + +prompt +prompt +++ Fast Evaluation Rule Set Rules for queues +++ +prompt +col RULE_SET Heading 'Rule Set' format a25 wrap +col RULE_NAME Heading 'Rule' format a25 wrap +col condition Heading 'Rule Condition' format a60 wrap +set long 4000 + + select rsr.rule_set_owner||'.'||rsr.rule_set_name Rule_set,rsr.rule_owner||'.'||rsr.rule_name rule, r.rule_condition + from dba_rule_set_rules rsr , dba_rules r + where rsr.rule_set_name like '%_R' and rsr.rule_name=r.rule_name and rsr.rule_owner=r.rule_owner + order by rsr.rule_set_owner,rsr.rule_set_name,rsr.rule_owner,rsr.rule_name; + + +prompt + + +prompt ++ Check for CONSTRAINTS ON TABLES CONFIGURED IN STREAMS +prompt +col LAST_CHANGE format a11 word heading 'Last|Change' +col search_condition format a25 wrap heading 'Search|Condition' +col ref_constraint HEADING 'Reference|Constraint' + +select c.owner||'.'||c.table_name object,c.constraint_name,c.constraint_type, + status, LAST_CHANGE, + search_condition,r_owner||'.'||r_constraint_name Ref_constraint + from dba_constraints c,dba_apply_instantiated_objects p where + c.owner=p.source_object_owner and c.table_name=p.source_object_name and c.constraint_type in ('P','U','R','C') + and constraint_name not like 'SYS_IOT%' order by c.owner,c.table_name; + +prompt ++ List INDEXES on TABLES ++ +col object format a40 HEADING 'Table' +col index_name format a40 +col funcidx_status format a10 +col index_type format a10 + +select table_owner||'.'||table_name object, table_type, index_name,index_type,funcidx_status + from dba_indexes i, dba_apply_instantiated_objects p + where + i.owner=p.source_object_owner and i.table_name=p.source_object_name + order by i.owner, i.table_name; + +prompt +prompt ++ List UNSUPPORTED TABLES IN STREAMS +prompt + +select * from dba_streams_unsupported; + +prompt +prompt ++ STREAMS DICTIONARY INFORMATION ++ +prompt Capture processes defined on system +prompt + +col queue format a30 wrap heading 'Queue|Name' +col capture_name format a20 wrap heading 'Capture|Name' +col capture# format 9999 heading 'Capture|Number' +col ruleset format a30 wrap heading 'Positive|Rule Set' +col ruleset2 format a30 wrap heading 'Negative|Rule Set' + + + +select queue_owner||'.'||queue_name queue,capture_name,capture#, + ruleset_owner||'.'||ruleset_name ruleset, + negative_ruleset_owner||'.'||negative_ruleset_name ruleset2 + from sys.streams$_capture_process; + +prompt +prompt Apply processes defined on system +prompt +col apply_name format a20 wrap heading 'Apply|Name' +col apply# format 9999 heading 'Apply|Number' + +select queue_owner||'.'||queue_name queue,apply_name,apply#, + ruleset_owner||'.'||ruleset_name ruleset , + negative_ruleset_owner||'.'||negative_ruleset_name ruleset2 from sys.streams$_apply_process; + +prompt +prompt Propagations defined on system +prompt +col source_queue format a30 wrap heading 'Queue|Name' +col destination format a35 wrap heading 'Destination' + +select source_queue_schema||'.'||source_queue source_queue, + destination_queue_schema||'.'||destination_queue||'@'|| + destination_dblink destination, + ruleset_schema||'.'||ruleset ruleset, + negative_ruleset_schema||'.'||negative_ruleset ruleset2 + from sys.STREAMS$_PROPAGATION_PROCESS; + +prompt +prompt Streams rules defined on system +prompt +col nbr format 9999999999999999 heading 'Number of|Rules' +col streams_name HEADING 'Streams Name' +col streams_type HEADING 'Streams Type' + + +select streams_name,streams_type,count(*) nbr From sys.streams$_rules group by streams_name,streams_type; + +prompt +prompt ++ +prompt ++ LOGMINER DATABASE MAP ++ +prompt Databases with information in logminer tables +prompt +col global_name format a30 wrap heading 'Global|Name' +col logmnr_uid format 99999999 heading 'Logminer|Identifier'; + +select global_name,logmnr_uid,flags,'MAP' SRC from system.logmnrc_dbname_uid_map +union +select s.global_db_name,u.logmnr_uid,null,'UID$' SRC from system.logmnr_uid$ u , system.logmnr_session$ s + where u.session#=s.session# order by 2; +select * from system.logmnr_uid$; +select * from system.logmnr_session$; + +prompt +prompt ++ LOGMINER STATISTICS +prompt +select c.capture_name, name, value from gv$streams_capture c, gv$logmnr_stats l + where c.logminer_id = l.session_id + order by capture_name,name; + + +prompt ++ LOGMINER SESSION STATISTICS +prompt +select * from gv$logmnr_session + order by session_name; + +prompt +prompt ++ LOGMINER CACHE OBJECTS ++ +prompt Objects of interest to Streams from each source database +prompt +col count(*) format 9999999999999999 heading 'Number of|Interesting|DB Objects'; + +select logmnr_uid, count(*) from system.logmnrc_gtlo group by logmnr_uid; + +prompt +prompt Intcol Verification +prompt + +select logmnr_uid, obj#, objv#, intcol# + from system.logmnrc_gtcs + group by logmnr_uid, obj#, objv#, intcol# + having count(1) > 1 + order by 1,2,3,4; + +prompt +prompt Segcol Verification +prompt Check bug 7033630 if rows returned + +select a.logmnr_uid,a.obj#,a.objv#,a.segcol#, a.intcol# from system.logmnrc_gtcs a + where exists ( select 1 from system.logmnrc_gtcs b where + a.logmnr_uid = b.logmnr_uid and + a.obj# = b.obj# and + a.objv# = b.objv# and + a.segcol# = b.segcol# and + a.segcol# <> 0 and + a.intcol# <> b.intcol#); +prompt +prompt ++ LCR Cache Information ++ +prompt Internal LCRs +select * from x$kngfl; +prompt +prompt External LCRs +select * from x$kngfle; +prompt + + +prompt +prompt ++ Streams Pool memory Information ++ +prompt +select * from x$knlasg; +prompt + +prompt +prompt ++ Queue Memory and Flow Control Values ++ +select * from x$kwqbpmt; + +prompt +Prompt ++ JOBS in Database ++ +prompt +set recsep each +set recsepchar = +select * from dba_jobs; + +set recsep off + +prompt ++ DBA_QUEUE_SCHEDULES ++ +prompt +select * from dba_queue_schedules +order by schema,qname,destination,message_delivery_mode; +prompt + +prompt +prompt ++ Agents ++ +prompt +select * from dba_aq_agents; +prompt + + +prompt +prompt ++ Agent Privileges ++ +prompt +select * from dba_aq_agent_privs; + + +prompt +prompt ++ Current Long Running Transactions ++ +prompt Current transactions open for more than 20 minutes +prompt +col runlength HEAD 'Txn Open|Minutes' format 9999.99 +col sid HEAD 'Session' format a13 +col xid HEAD 'Transaction|ID' format a18 +col terminal HEAD 'Terminal' format a10 +col program HEAD 'Program' format a27 wrap + +select t.inst_id, sid||','||serial# sid,xidusn||'.'||xidslot||'.'||xidsqn xid, +(sysdate - start_date ) * 1440 runlength ,terminal,program from gv$transaction t, gv$session s +where t.addr=s.taddr and (sysdate - start_date) * 1440 > 20; + +prompt +prompt ++ Streams Pool Advice ++ +prompt +col streams_pool_size_factor format 999.99 HEADING 'Stream Pool Size|Factor' +col streams_pool_size_for_estimate HEADING 'Stream Pool Size|Estimate' +col estd_spill_count HEADING 'Spill Count|Estimated' +col estd_spill_time HEADING 'Spill Time |Estimated' +col estd_unspill_count HEADING 'UnSpill Count|Estimated' +col estd_unspill_time HEADING 'UnSpill Time |Estimated' + +select streams_pool_size_factor,streams_pool_size_for_estimate, + estd_spill_count, estd_spill_time, + estd_unspill_count, estd_unspill_time +from v$streams_pool_advice; + + +prompt ++ STREAMS ALERTS History (10.2.0.3+) +prompt +prompt +++ Most recent Streams alerts(max=10) occuring within last 10 days +++ +prompt +column Instance Heading 'Instance Name|(Instance Number)' +select message_Type,creation_time, reason,suggested_action, + module_id,object_type, host_id, + instance_name||' ( '||instance_number||' )' Instance, + resolution,time_suggested +from dba_alert_history where message_group ='Streams' + and creation_time >= sysdate -10 and rownum < 11 +order by creation_time desc; +prompt +prompt +REM prompt ++ Current Contents of the STREAMS Pool ++ +REM prompt Applies only to versions 10.1.0.4+, and to this instance only +REM prompt + +REM col comm HEAD 'Allocation Comment' format A18 +REM col alloc_size HEAD 'Bytes Allocated' format 9999999999999999 +REM select ksmchcom comm, sum(ksmchsiz) alloc_size from x$ksmsst group by ksmchcom order by 2 desc; + +prompt +prompt ++ init.ora parameters ++ +Prompt Key parameters are aq_tm_processes, job_queue_processes +prompt streams_pool_size, sga_max_size, global_name, compatible +prompt + +show parameters + +set serveroutput on +prompt +++ STREAMS STATISTICS +++ +prompt +alter session set nls_date_format='HH24:Mi:SS MM/DD/YY'; +set heading off +select 'STREAMS Health Check (V3.0.26) for '||global_name||' on Instance='||instance_name||' generated: '||sysdate o from global_name, v$instance; +set heading on + +prompt ========================================================================================= +prompt +prompt ++ MESSAGES IN BUFFER QUEUE ++ +col QUEUE format a50 wrap +col "Message Count" format 9999999999999999 heading 'Current Number of|Outstanding|Messages|in Queue' +col "Spilled Msgs" format 9999999999999999 heading 'Current Number of|Spilled|Messages|in Queue' +col "TOtal Messages" format 9999999999999999 heading 'Cumulative |Number| of Messages|in Queue' +col "Total Spilled Msgs" format 9999999999999999 heading 'Cumulative Number|of Spilled|Messages|in Queue' +col "Expired_Msgs" heading 'Current Number of|Expired|Messages|in Queue' + + +SELECT queue_schema||'.'||queue_name Queue, startup_time, num_msgs "Message Count", spill_msgs "Spilled Msgs", cnum_msgs "Total Messages", cspill_msgs "Total Spilled Msgs", expired_msgs FROM gv$buffered_queues; + +prompt Configuration: Queue Capture Propagation Apply Database + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis + +prompt ============================================================================================ +prompt +prompt ++ CAPTURE STATISTICS ++ +COLUMN PROCESS_NAME HEADING "Capture|Process|Number" FORMAT A7 +COLUMN CAPTURE_NAME HEADING 'Capture|Name' FORMAT A10 +COLUMN SID HEADING 'Session|ID' FORMAT 99999999999999 +COLUMN SERIAL# HEADING 'Session|Serial|Number' +COLUMN STATE HEADING 'State' FORMAT A17 +column STATE_CHANGED_TIME HEADING 'Last|State Change|Time' +COLUMN TOTAL_MESSAGES_CAPTURED HEADING 'Redo Entries|Scanned' +COLUMN TOTAL_MESSAGES_ENQUEUED HEADING 'Total|LCRs|Enqueued' +COLUMN TOTAL_MESSAGES_CREATED HEADING 'Total|Messages|Created' + +COLUMN LATENCY_SECONDS HEADING 'Latency|Seconds' FORMAT 9999999999999999 +COLUMN CREATE_TIME HEADING 'Event Creation|Time' FORMAT A19 +COLUMN ENQUEUE_TIME HEADING 'Last|Enqueue |Time' FORMAT A19 +COLUMN ENQUEUE_MESSAGE_NUMBER HEADING 'Last Queued|Message Number' FORMAT 9999999999999999 +COLUMN ENQUEUE_MESSAGE_CREATE_TIME HEADING 'Last Queued|Message|Create Time'FORMAT A19 +COLUMN CAPTURE_MESSAGE_CREATE_TIME HEADING 'Last Redo|Message|Create Time' FORMAT A19 +COLUMN CAPTURE_MESSAGE_NUMBER HEADING 'Last Redo|Message Number' FORMAT 9999999999999999 +COLUMN AVAILABLE_MESSAGE_CREATE_TIME HEADING 'Available|Message|Create Time' FORMAT A19 +COLUMN AVAILABLE_MESSAGE_NUMBER HEADING 'Available|Message Number' FORMAT 9999999999999999 +COLUMN STARTUP_TIME HEADING 'Startup Timestamp' FORMAT A19 + +COLUMN MSG_STATE HEADING 'Message State' FORMAT A13 +COLUMN CONSUMER_NAME HEADING 'Consumer' FORMAT A30 + +COLUMN PROPAGATION_NAME HEADING 'Propagation' FORMAT A8 +COLUMN START_DATE HEADING 'Start Date' +COLUMN PROPAGATION_WINDOW HEADING 'Duration' FORMAT 99999 +COLUMN NEXT_TIME HEADING 'Next|Time' FORMAT A8 +COLUMN LATENCY HEADING 'Latency|Seconds' FORMAT 99999999 + + +-- ALTER session set nls_date_format='HH24:MI:SS MM/DD/YY'; + +SELECT SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS_NAME, + c.CAPTURE_NAME, + C.STARTUP_TIME, + c.SID, + c.SERIAL#, + c.STATE, + c.state_changed_time, + c.TOTAL_MESSAGES_CAPTURED, + c.TOTAL_MESSAGES_ENQUEUED, total_messages_created + FROM gV$STREAMS_CAPTURE c, gV$SESSION s + WHERE c.SID = s.SID AND + c.SERIAL# = s.SERIAL#; + +SELECT capture_name, + SYSDATE "Current Time", + capture_time "Capture Process TS", + capture_message_number, + capture_message_create_time , + enqueue_time , + enqueue_message_number, + enqueue_message_create_time , + available_message_number, + available_message_create_time +FROM gV$STREAMS_CAPTURE; + +COLUMN processed_scn HEADING 'Logminer Last|Processed Message' FORMAT 9999999999999999 +COLUMN AVAILABLE_MESSAGE_NUMBER HEADING 'Last Message|Written to Redo' FORMAT 9999999999999999 +SELECT c.capture_name, l.processed_scn, c.available_message_number +FROM gV$LOGMNR_SESSION l, gv$STREAMS_CAPTURE c +WHERE c.logminer_id = l.session_id; + +COLUMN CAPTURE_NAME HEADING 'Capture|Name' FORMAT A15 +COLUMN TOTAL_PREFILTER_DISCARDED HEADING 'Prefilter|Events|Discarded' FORMAT 9999999999999999 +COLUMN TOTAL_PREFILTER_KEPT HEADING 'Prefilter|Events|Kept' FORMAT 9999999999999999 +COLUMN TOTAL_PREFILTER_EVALUATIONS HEADING 'Prefilter|Evaluations' FORMAT 9999999999999999 +COLUMN UNDECIDED HEADING 'Undecided|After|Prefilter' FORMAT 9999999999999999 +COLUMN TOTAL_FULL_EVALUATIONS HEADING 'Full|Evaluations' FORMAT 9999999999999999 + +SELECT CAPTURE_NAME, + TOTAL_PREFILTER_DISCARDED, + TOTAL_PREFILTER_KEPT, + TOTAL_PREFILTER_EVALUATIONS, + (TOTAL_PREFILTER_EVALUATIONS - + (TOTAL_PREFILTER_KEPT + TOTAL_PREFILTER_DISCARDED)) UNDECIDED, + TOTAL_FULL_EVALUATIONS + FROM gV$STREAMS_CAPTURE; + +column elapsed_capture HEADING 'Elapsed Time|Capture|(centisecs)' +column elapsed_rule HEADING 'Elapsed Time|Rule Evaluation|(centisecs)' +column elapsed_enqueue HEADING 'Elapsed Time|Enqueuing Messages|(centisecs)' +column elapsed_lcr HEADING 'Elapsed Time|LCR Creation|(centisecs)' +column elapsed_redo HEADING 'Elapsed Time|Redo Wait|(centisecs)' +column elapsed_Pause HEADING 'Elapsed Time|Paused|(centisecs)' + +SELECT CAPTURE_NAME, ELAPSED_CAPTURE_TIME elapsed_capture, + elapsed_rule_time elapsed_rule, + ELAPSED_ENQUEUE_TIME + elapsed_enqueue, + ELAPSED_LCR_TIME elapsed_lcr, + ELAPSED_REDO_WAIT_TIME elapsed_redo, + ELAPSED_PAUSE_TIME elapsed_pause, + total_messages_created, total_messages_enqueued, total_full_evaluations + from gv$streams_capture; + + +prompt +prompt ++ LOGMINER STATISTICS ++ +prompt ++ (pageouts imply logminer spill) ++ +COLUMN CAPTURE_NAME HEADING 'Capture|Name' FORMAT A32 +COLUMN NAME HEADING 'Statistic' FORMAT A32 +COLUMN VALUE HEADING 'Value' FORMAT 9999999999999999 + +select c.capture_name, name, value from gv$streams_capture c, gv$logmnr_stats l + where c.logminer_id = l.session_id + and name in ('bytes paged out', 'microsecs spent in pageout', + 'bytes of redo processed', 'bytes checkpointed', + 'seconds spent in checkpoint', + 'resume from low memory', + 'DDL txns mined', 'CTAS txns mined' ,'rolled back txns mined', + 'DDL txns delivered', 'DML txns delivered','CTAS txns delivered', + 'recursive txns delivered'); + +prompt +prompt ++ BUFFERED PUBLISHERS ++ +select * from gv$buffered_publishers; + + + + +prompt ============================================================================================ +prompt +prompt ++ OPEN STREAMS CAPTURE TRANSACTIONS ++ +prompt +prompt +** Count **+ +select streams_name, count(*) "Open Transactions",sum(cumulative_message_count) "Total LCRs" from gv$streams_transaction where streams_type='CAPTURE' group by streams_name; +prompt +prompt +** Detail **+ +select * from gv$streams_transaction where streams_type='CAPTURE' order by streams_name,first_message_number; + +prompt Configuration: Queue Capture Propagation Apply Database + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis +prompt Statistics Quick Link: Queue Capture Propagation Apply Errors + +prompt ========================================================================================= +prompt +prompt ++ SCHEDULE FOR EACH PROPAGATION++ +prompt ========================================================================================= +prompt +COLUMN PROPAGATION_NAME Heading 'Propagation|Name' format a17 wrap +COLUMN START_DATE HEADING 'Start Date' +COLUMN PROPAGATION_WINDOW HEADING 'Duration|in Seconds' FORMAT 9999999999999999 +COLUMN NEXT_TIME HEADING 'Next|Time' FORMAT A8 +COLUMN LATENCY HEADING 'Latency|in Seconds' FORMAT 9999999999999999 +COLUMN SCHEDULE_DISABLED HEADING 'Status' FORMAT A8 +COLUMN PROCESS_NAME HEADING 'Process' FORMAT A8 +COLUMN FAILURES HEADING 'Number of|Failures' FORMAT 99 +COLUMN LAST_ERROR_MSG HEADING 'Error Message' FORMAT A50 +COLUMN TOTAL_BYTES HEADING 'Total Bytes|Propagated' FORMAT 9999999999999999 +COLUMN CURRENT_START_DATE HEADING 'Current|Start' FORMAT A17 +COLUMN LAST_RUN_DATE HEADING 'Last|Run' FORMAT A17 +COLUMN NEXT_RUN_DATE HEADING 'Next|Run' FORMAT A17 +COLUMN LAST_ERROR_DATE HEADING 'Last|Error' FORMAT A17 +column message_delivery_mode HEADING 'Message|Delivery|Mode' +column queue_to_queue HEADING 'Q-2-Q' + +SELECT p.propagation_name,TO_CHAR(s.START_DATE, 'HH24:MI:SS MM/DD/YY') START_DATE, + s.PROPAGATION_WINDOW, + s.NEXT_TIME, + s.LATENCY, + DECODE(s.SCHEDULE_DISABLED, + 'Y', 'Disabled', + 'N', 'Enabled') SCHEDULE_DISABLED, + s.PROCESS_NAME, s.total_bytes, + s.FAILURES, + s.message_delivery_mode, + p.queue_to_queue, + s.LAST_ERROR_MSG + FROM DBA_QUEUE_SCHEDULES s, DBA_PROPAGATION p + WHERE p.DESTINATION_DBLINK = + NVL(REGEXP_SUBSTR(s.destination, '[^@]+', 1, 2), s.destination) + AND s.SCHEMA = p.SOURCE_QUEUE_OWNER + AND s.QNAME = p.SOURCE_QUEUE_NAME order by message_delivery_mode, propagation_name; + +SELECT p.propagation_name, message_delivery_mode, TO_CHAR(s.LAST_RUN_DATE, 'HH24:MI:SS MM/DD/YY') LAST_RUN_DATE, + TO_CHAR(s.CURRENT_START_DATE, 'HH24:MI:SS MM/DD/YY') CURRENT_START_DATE, + TO_CHAR(s.NEXT_RUN_DATE, 'HH24:MI:SS MM/DD/YY') NEXT_RUN_DATE, + TO_CHAR(s.LAST_ERROR_DATE, 'HH24:MI:SS MM/DD/YY') LAST_ERROR_DATE + FROM DBA_QUEUE_SCHEDULES s, DBA_PROPAGATION p + WHERE p.DESTINATION_DBLINK = + NVL(REGEXP_SUBSTR(s.destination, '[^@]+', 1, 2), s.destination) + AND s.SCHEMA = p.SOURCE_QUEUE_OWNER + AND s.QNAME = p.SOURCE_QUEUE_NAME order by message_delivery_mode, propagation_name; + +prompt +prompt ++ EVENTS AND BYTES PROPAGATED FOR EACH PROPAGATION++ +prompt +COLUMN Elapsed_propagation_TIME HEADING 'Elapsed |Propagation Time|(Seconds)' FORMAT 9999999999999999 +COLUMN TOTAL_NUMBER HEADING 'Total |Events|Propagated' FORMAT 9999999999999999 +COLUMN TOTAL_BYTES HEADING 'Total Bytes|Propagated' FORMAT 9999999999999999 +COLUMN SCHEDULE_STATUS HEADING 'Schedule|Status' +column elapsed_dequeue_time HEADING 'Elapsed|Dequeue Time|(Seconds)' +column elapsed_pickle_time HEADING 'Total Time|(Seconds)' +column total_time HEADING 'Elapsed|Pickle Time|(Seconds)' +column high_water_mark HEADING 'High|Water|Mark' +column acknowledgement HEADING 'Target |Ack' + + +SELECT p.propagation_name,q.message_delivery_mode, DECODE(p.STATUS, + 'DISABLED', 'Disabled', + 'ENABLED', 'Enabled') SCHEDULE_STATUS, + q.instance, + q.total_number TOTAL_NUMBER, q.TOTAL_BYTES , + q.elapsed_dequeue_time/100 elapsed_dequeue_time, q.elapsed_pickle_time/100 elapsed_pickle_time, + q.total_time/100 total_time + FROM DBA_PROPAGATION p, dba_queue_schedules q + WHERE p.DESTINATION_DBLINK = + NVL(REGEXP_SUBSTR(q.destination, '[^@]+', 1, 2), q.destination) + AND q.SCHEMA = p.SOURCE_QUEUE_OWNER + AND q.QNAME = p.SOURCE_QUEUE_NAME + order by q.message_delivery_mode, p.propagation_name; + + + +prompt ++ PROPAGATION SENDER STATISTICS ++ +prompt +col queue_id HEADING 'Queue ID' +col queue_schema HEADING 'Source|Queue|Owner' +col queue_name HEADING 'Source|Queue|Name' +col dst_queue_schema HEADING 'Destination|Queue|Owner' +col dst_queue_name HEADING 'Destination|Queue|Name' +col dblink Heading 'Destination|Database|Link' +col total_msgs HEADING 'Total|Messages' +col max_num_per_win HEADING 'Max Msgs|per|Window' +col max_size HEADING 'Max|Size' +col src_queue_schema HEADING 'Source|Queue|Owner' +col src_queue_name HEADING 'Source|Queue|Name' +column elapsed_dequeue_time HEADING 'Elapsed|Dequeue Time|(CentiSecs)' +column elapsed_pickle_time HEADING 'Total Time|(CentiSecs)' +column total_time HEADING 'Elapsed|Pickle Time|(CentiSecs)' + + +SELECT * from v$propagation_sender; + +prompt Statistics Quick Link: Queue Capture Propagation Apply Errors + +prompt +prompt ++ PROPAGATION RECEIVER STATISTICS++ +prompt + +column src_queue_name HEADING 'Source|Queue|Name' +column src_dbname HEADING 'Source|Database|Name' +column startup_time HEADING 'Startup|Time' +column elapsed_unpickle_time HEADING 'Elapsed|Unpickle Time|(CentiSeconds' +column elapsed_rule_time HEADING 'Elapsed|Rule Time|(CentiSeconds)' +column elapsed_enqueue_time HEADING 'Elapsed|Enqueue Time|(CentiSeconds)' + +SELECT * from gv$propagation_receiver; + +prompt +prompt ++ BUFFERED SUBSCRIBERS ++ + +select * from gv$buffered_subscribers; + +prompt Configuration: Queue Capture Propagation Apply Database + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis + +prompt Statistics Quick Link: Queue Capture Propagation Apply Errors + +prompt ============================================================================================ +prompt +prompt ++ APPLY STATISTICS ++ +prompt +prompt ============================================================================================ + + + +prompt +prompt ++ APPLY Reader Statistics ++ +col oldest_scn_num HEADING 'Oldest|SCN' +col apply_name HEADING 'Apply Name' +col apply_captured HEADING 'Captured or|User-Enqueued LCRs' +col process_name HEADING 'Process' +col state HEADING 'STATE' +col total_messages_dequeued HEADING 'Total Messages|Dequeued' +col total_messages_spilled Heading 'Total Messages|Spilled' +col sga_used HEADING 'SGA Used' +col oldest_transaction_id HEADING 'Oldest|Transaction' + +SELECT ap.APPLY_NAME, + DECODE(ap.APPLY_CAPTURED, + 'YES','Captured LCRS', + 'NO','User-Enqueued','UNKNOWN') APPLY_CAPTURED, + SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS_NAME, + r.STATE, + r.TOTAL_MESSAGES_DEQUEUED, + r.TOTAL_MESSAGES_SPILLED, + r.SGA_USED, + oldest_scn_num, + oldest_xidusn||'.'||oldest_xidslt||'.'||oldest_xidsqn + oldest_transaction_id + FROM gV$STREAMS_APPLY_READER r, gV$SESSION s, DBA_APPLY ap + WHERE r.SID = s.SID AND + r.SERIAL# = s.SERIAL# AND + r.APPLY_NAME = ap.APPLY_NAME; + +col creation HEADING 'Dequeued Message|Creation|Timestamp' +col last_dequeue HEADING 'Dequeue |Timestamp' +col dequeued_message_number HEADING 'Last |Dequeued Message|Number' +col last_browse_num HEADING 'Last|Browsed Message|Number' +col latency HEADING 'Apply Reader|Latency|(Seconds)' + +SELECT APPLY_NAME, + (DEQUEUE_TIME-DEQUEUED_MESSAGE_CREATE_TIME)*86400 LATENCY, + TO_CHAR(DEQUEUED_MESSAGE_CREATE_TIME,'HH24:MI:SS MM/DD') CREATION, + TO_CHAR(DEQUEUE_TIME,'HH24:MI:SS MM/DD') LAST_DEQUEUE, + DEQUEUED_MESSAGE_NUMBER, + last_browse_num + FROM gV$STREAMS_APPLY_READER; + +col elapsed_dequeue HEADING 'Elapsed Time|Dequeue|(centisecs)' +col elapsed_schedule HEADING 'Elapsed Time|Schedule|(centisecs)' +col elapsed_spill HEADING 'Elapsed Time|Spill|(centisecs)' +col elapsed_idle HEADING 'Elapsed Time|Idle|(centisecs)' + +Select APPLY_NAME, total_messages_dequeued, total_messages_spilled, Elapsed_dequeue_time Elapsed_dequeue, + elapsed_schedule_time elapsed_schedule, + elapsed_spill_time elapsed_spill + from gv$STREAMS_APPLY_READER; + +prompt ============================================================================================ +prompt +prompt ++ APPLY SPILLED TRANSACTIONS ++ + +col APPLY_NAME Head 'Apply Name' +col txn_id HEAD 'Transaction|ID' +col FIRST_SCN Head 'SCN of First| Message in Txn' +col MESSAGE_COUNT Head 'Count of |Messages in Txn' +col FIRST_MESSAGE_CREATE_TIME Head 'First Message|Creation Time' +col SPILL_CREATION_TIME Head ' Spill |Creation Time' + +select Apply_name, + xidusn||'.'||xidslt||'.'||xidsqn txn_id, + first_scn, + first_message_create_time, + message_count, + spill_creation_time + from dba_apply_SPILL_TXN; + + +prompt ============================================================================================ +prompt +prompt ++ APPLY Coordinator Statistics ++ +col apply_name HEADING 'Apply Name' format a22 wrap +col process HEADING 'Process' format a7 +col RECEIVED HEADING 'Total|Txns|Received' +col ASSIGNED HEADING 'Total|Txns|Assigned' +col APPLIED HEADING 'Total|Txns|Applied' +col ERRORS HEADING 'Total|Txns|w/ Error' +col total_ignored HEADING 'Total|Txns|Ignored' +col total_rollbacks HEADING 'Total|Txns|Rollback' +col WAIT_DEPS HEADING 'Total|Txns|Wait_Deps' +col WAIT_COMMITS HEADING 'Total|Txns|Wait_Commits' +col STATE HEADING 'State' format a10 word + +SELECT ap.APPLY_NAME, + SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS, + c.STATE, + c.TOTAL_RECEIVED RECEIVED, + c.TOTAL_ASSIGNED ASSIGNED, + c.TOTAL_APPLIED APPLIED, + c.TOTAL_ERRORS ERRORS, + c.total_ignored, + c.total_rollbacks, + c.TOTAL_WAIT_DEPS WAIT_DEPS, c.TOTAL_WAIT_COMMITS WAIT_COMMITS + FROM gV$STREAMS_APPLY_COORDINATOR c, gV$SESSION s, DBA_APPLY ap + WHERE c.SID = s.SID AND + c.SERIAL# = s.SERIAL# AND + c.APPLY_NAME = ap.APPLY_NAME; + +col lwm_msg_ts HEADING 'LWM Message|Creation|Timestamp' +col lwm_msg_nbr HEADING 'LWM Message|SCN' +col lwm_updated HEADING 'LWM Updated|Timestamp' +col hwm_msg_ts HEADING 'HWM Message|Creation|Timestamp' +col hwm_msg_nbr HEADING 'HWM Message|SCN' +col hwm_updated HEADING 'HWM Updated|Timestamp' + + +SELECT APPLY_NAME, + LWM_MESSAGE_CREATE_TIME LWM_MSG_TS , + LWM_MESSAGE_NUMBER LWM_MSG_NBR , + LWM_TIME LWM_UPDATED, + HWM_MESSAGE_CREATE_TIME HWM_MSG_TS, + HWM_MESSAGE_NUMBER HWM_MSG_NBR , + HWM_TIME HWM_UPDATED + FROM gV$STREAMS_APPLY_COORDINATOR; + +SELECT APPLY_NAME, TOTAL_RECEIVED,TOTAL_ASSIGNED,TOTAL_APPLIED, + STARTUP_TIME, + ELAPSED_SCHEDULE_TIME elapsed_schedule, + ELAPSED_IDLE_TIME elapsed_idle +from gv$streams_apply_coordinator; + +prompt ============================================================================================ +prompt +prompt ++ APPLY Server Statistics ++ +col SRVR format 9999 +col ASSIGNED format 9999999999999999 Heading 'Total|Transactions|Assigned' +col MSG_APPLIED heading 'Total|Messages|Applied' FORMAT 9999999999999999 +col MESSAGE_SEQUENCE FORMAT 9999999999999999 +col applied_message_create_time HEADING 'Applied Message|Creation|Timestamp' +col applied_message_number HEADING 'Last Applied|Message|SCN' +col lwm_updated HEADING 'Applied|Timestamp' +col message_sequence HEADING 'Message|Sequence' +col elapsed_apply_time HEADING 'Elapsed|Apply|Time (cs)' +col elapsed_dequeue_time HEADING 'Elapsed|Dequeue|Time (cs)' +col apply_time Heading 'Apply Time' + +SELECT ap.APPLY_NAME, + SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS_NAME, + a.server_id SRVR, + a.STATE, + a.TOTAL_ASSIGNED ASSIGNED, + a.TOTAL_MESSAGES_APPLIED msg_APPLIED, + a.APPLIED_MESSAGE_NUMBER, + a.APPLIED_MESSAGE_CREATE_TIME , + a.MESSAGE_SEQUENCE, a.elapsed_dequeue_time, a.elapsed_apply_time, a.apply_time + FROM gV$STREAMS_APPLY_SERVER a, gV$SESSION s, DBA_APPLY ap + WHERE a.SID = s.SID AND + a.SERIAL# = s.SERIAL# AND + a.APPLY_NAME = ap.APPLY_NAME order by a.apply_name, a.server_id; + + +Col apply_name Heading 'Apply Name' FORMAT A30 +Col server_id Heading 'Apply Server Number' FORMAT 99999999 +Col sqltext Heading 'Current SQL' FORMAT A64 + +select a.inst_id, a.apply_name, a.server_id, q.sql_text sqltext + from gv$streams_apply_server a, gv$sqltext q, gv$session s + where a.sid = s.sid and s.sql_hash_value = q.hash_value + and s.sql_address = q.address and s.sql_id = q.sql_id + order by a.apply_name, a.server_id, q.piece; + +Col apply_name Heading 'Apply Name' FORMAT A30 +Col server_id Heading 'Apply Server Number' FORMAT 99999999 +Col event Heading 'Wait Event' FORMAT A64 +Col secs Heading 'Seconds Waiting' FORMAT 9999999999999999 + +select a.inst_id, a.apply_name, a.server_id, w.event, w.seconds_in_wait secs + from gv$streams_apply_server a, gv$session_wait w + where a.sid = w.sid order by a.apply_name, a.server_id; + +Col apply_name Heading 'Apply Name' FORMAT A30 +Col server_id Heading 'Apply Server Number' FORMAT 99999999 +Col event Heading 'Wait Event' FORMAT 99999999 +Col total_waits Heading 'Total Waits' FORMAT 9999999999999999 +Col total_timeouts Heading 'Total Timeouts' FORMAT 9999999999999999 +Col time_waited Heading 'Time Waited' FORMAT 9999999999999999 +Col average_wait Heading 'Average Wait' FORMAT 9999999999999999 +Col max_wait Heading 'Maximum Wait' FORMAT 9999999999999999 + +select a.inst_id, a.apply_name, a.server_id, e.event, e.total_waits, e.total_timeouts, + e.time_waited, e.average_wait, e.max_wait + from gv$streams_apply_server a, gv$session_event e + where a.sid = e.sid order by a.apply_name, a.server_id,e.time_waited desc; + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors + +col current_txn format a15 wrap +col dependent_txn format a15 wrap + +select APPLY_NAME, server_id SRVR, +xidusn||'.'||xidslt||'.'||xidsqn CURRENT_TXN, +commitscn, +dep_xidusn||'.'||dep_xidslt||'.'||dep_xidsqn DEPENDENT_TXN, +dep_commitscn +from gv$streams_apply_server order by apply_name,server_id; + + +prompt ++ APPLY PROGRESS ++ +col oldest_message_number HEADING 'Oldest|Message|SCN' +col apply_time HEADING 'Apply|Timestamp' +select * from dba_apply_progress; + +prompt ============================================================================================ +prompt +prompt ++ OPEN STREAMS APPLY TRANSACTIONS ++ +prompt +prompt +** Count **+ +select streams_name, count(*) "Open Transactions",sum(cumulative_message_count) "Total LCRs" from gv$streams_transaction where streams_type='APPLY' group by streams_name; + +prompt +prompt +** Detail **+ +select * from gv$streams_transaction where streams_type='APPLY' order by streams_name,first_message_number; +prompt + + + +prompt Configuration: Queue Capture Propagation Apply Database + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis + +prompt Statistics Quick Link: Queue Capture Propagation Apply Errors + + +prompt +prompt ++ STATISTICS on RULES and RULE SETS +prompt ++ +prompt ++ RULE SET STATISTICS +prompt + +col name HEADING 'Name' + +select * from gv$rule_set; + + +prompt +prompt ++ RULE STATISTICS +prompt + +select * from gv$rule; + +prompt + + +-- note: this function is vulnerable to SQL injection, please do not copy it +create or replace function get_parameter( + param_name IN varchar2, + param_value IN OUT varchar2, + table_name IN varchar2, + table_param_name IN varchar2, + table_value IN varchar2 +) return boolean is + statement varchar2(4000); +begin + -- construct query + statement := 'select ' || table_value || ' from ' || table_name || ' where ' + || table_param_name || '=''' || param_name || ''''; + + begin + execute immediate statement into param_value; + exception when no_data_found then + -- data is not found, so return FALSE + return FALSE; + end; + -- data found, so return TRUE + return TRUE; +end get_parameter; +/ +show errors; + +create or replace procedure verify_init_parameter( + param_name IN varchar2, + expected_value IN varchar2, + verbose IN boolean, + more_info IN varchar2 := NULL, + more_info2 IN varchar2 := NULL, + at_least IN boolean := FALSE, + is_error IN boolean := FALSE, + use_like IN boolean := FALSE, + -- may not be necessary + alert_if_not_found IN boolean := TRUE +) +is + current_val_num NUMBER; + expected_val_num NUMBER; + current_value varchar2(512); + prefix varchar2(20); + matches boolean := FALSE; + comparison_str varchar2(20); +begin + -- Set prefix as warning or error + if is_error then + prefix := '+ ERROR: '; + else + prefix := '+ WARNING: '; + end if; + + -- Set comparison string + if at_least then + comparison_str := ' at least '; + elsif use_like then + comparison_str := ' like '; + else + comparison_str := ' set to '; + end if; + + -- Get value + if get_parameter(param_name, current_value, 'v$parameter', 'name', 'value') = FALSE + and alert_if_not_found then + -- Value isn't set, so output alert + dbms_output.put_line(prefix || 'The parameter ''' || param_name || ''' should be' + || comparison_str || '''' || expected_value + || ''', instead it has been left to its default value.'); + if verbose and more_info is not null then + dbms_output.put_line(more_info); + if more_info2 is not null then + dbms_output.put_line(more_info2); + end if; + end if; + dbms_output.put_line('+'); + return; + end if; + + -- See if the expected value is what is actually set + if use_like then + -- Compare with 'like' + if current_value like '%'||expected_value||'%' then + matches := TRUE; + end if; + elsif at_least then + -- Do at least + current_val_num := to_number(current_value); + expected_val_num := to_number(expected_value); + if current_val_num >= expected_val_num then + matches := TRUE; + end if; + else + -- Do normal comparison + if current_value = expected_value then + matches := TRUE; + end if; + end if; + + if matches = FALSE then + -- The values don't match, so alert + dbms_output.put_line(prefix || 'The parameter ''' || param_name || ''' should be' + || comparison_str || '''' || expected_value + || ''', instead it has the value ''' || current_value || '''.'); + if verbose and more_info is not null then + dbms_output.put_line(more_info); + if more_info2 is not null then + dbms_output.put_line(more_info2); + end if; + end if; + dbms_output.put_line('+'); + end if; + +end verify_init_parameter; +/ +show errors; + +prompt +prompt ============================================================================================ +prompt ==================================== Summary =============================================== +prompt ============================================================================================ + +prompt +prompt +prompt ++ +prompt ++ Notifications ++ +prompt ++ +prompt + +set serveroutput on size 50000 +declare + -- Change the variable below to FALSE if you just want the warnings and errors, not the advice + verbose boolean := TRUE; + -- By default any errors in dba_apply_error will result in output + apply_error_threshold number := 0; + -- By default a streams pool usage above 95% will result in output + streams_pool_usage_threshold number := 95; + -- The total number of registered archive logs to have before reporting an error + registered_logs_threshold number := 1000; + -- The total number of days old the oldest archived log should be before reporting an error + registered_age_threshold number := 60; -- days + + row_count number; + days_old number; + failed boolean; + streams_pool_usage number; + streams_pool_size varchar2(512); + + cursor apply_error is select distinct apply_name from dba_apply_error; + cursor aborted_apply is + select apply_name, error_number, error_message from dba_apply where status='ABORTED'; + cursor aborted_capture is + select capture_name, error_number, error_message from dba_capture where status='ABORTED'; + cursor aborted_prop is + select propagation_name, last_error_date, last_error_msg from dba_propagation, dba_queue_schedules + where schema = source_queue_owner and qname = source_queue_name and destination = destination_dblink + and schedule_disabled = 'Y' and message_delivery_mode = 'BUFFERED'; + cursor disabled_apply is select apply_name from dba_apply where status='DISABLED'; + cursor disabled_capture is select capture_name from dba_capture where status='DISABLED'; + + +begin + -- Check for aborted capture processes + for rec in aborted_capture loop + dbms_output.put_line('+ ERROR: Capture ''' || rec.capture_name || ''' has aborted with message ' || + rec.error_message); + end loop; + + dbms_output.put_line('+'); + + -- Check for aborted apply processes + for rec in aborted_apply loop + dbms_output.put_line('+ ERROR: Apply ''' || rec.apply_name || ''' has aborted with message ' || + rec.error_message); + if verbose then + -- Try to give some suggestions + -- TODO: include other errors, suggest how to recover + if rec.error_number = 26714 then + dbms_output.put_line('+ This apply aborted because a non-fatal user error has occurred and the ''disable_on_error'' parameter is ''Y''.'); + dbms_output.put_line('+ Please resolve the errors and restart the apply. Setting the ''disable_on_error'' parameter to ''N'' will prevent'); + dbms_output.put_line('+ apply from aborting on user errors in the future. Note the errors should still be resolved though.'); + dbms_output.put_line('+'); + elsif rec.error_number = 26688 then + dbms_output.put_line('+ This apply aborted because a column value in a particular change record belonging to a key was not found. '); + dbms_output.put_line('+ For more information, search the trace files for ''26688'' and view the relevant trace file.'); + dbms_output.put_line('+'); + end if; + end if; + end loop; + + dbms_output.put_line('+'); + + -- Check for apply errors in the error queue + for rec in apply_error loop + select count(*) into row_count from dba_apply_error where rec.apply_name = apply_name; + if row_count > apply_error_threshold then + dbms_output.put_line('+ ERROR: Apply ''' || rec.apply_name || ''' has placed ' || + row_count || ' transactions in the error queue! Please check the dba_apply_error view.'); + end if; + end loop; + + dbms_output.put_line('+'); + + -- Check for aborted propagation + for rec in aborted_prop loop + dbms_output.put_line('+ ERROR: Propagation ''' || rec.propagation_name + || ''' has aborted with most recent error message:'); + dbms_output.put_line('+ ''' || rec.last_error_msg || ''''); + dbms_output.put_line('+'); + end loop; + + -- Check for disabled capture processes + for rec in disabled_capture loop + dbms_output.put_line('+ WARNING: Capture ''' || rec.capture_name || ''' is disabled'); + end loop; + + dbms_output.put_line('+'); + + -- Check for disabled apply processes + for rec in disabled_apply loop + dbms_output.put_line('+ WARNING: Apply ''' || rec.apply_name || ''' is disabled'); + end loop; + + dbms_output.put_line('+'); + + + + -- Check for too many registered archive logs + begin + failed := FALSE; + select count(*) into row_count from dba_registered_archived_log where purgeable = 'NO'; + select (sysdate - min(modified_time)) into days_old from dba_registered_archived_log where purgeable = 'NO'; + if row_count > registered_logs_threshold then + failed := TRUE; + dbms_output.put_line('+ WARNING: ' || row_count || ' archived logs registered.'); + end if; + if days_old > registered_age_threshold then + failed := TRUE; + dbms_output.put_line('+ WARNING: The oldest archived log is ' || round(days_old) || ' days old!'); + end if; + select count(*) into row_count from dba_registered_archived_log where purgeable = 'YES'; + if row_count > registered_logs_threshold/2 then + dbms_output.put_line('+ WARNING: There are '|| row_count ||' archived logs ready to be purged from disk.'); + dbms_output.put_line('+ Use the following select to identify unneeded logfiles:'); + dbms_output.put_line('+ select name from dba_registered_archived_log where purgeable = "YES" '); + end if; + + if failed then + dbms_output.put_line('+ A restarting Capture process must mine through each registered archive log.'); + dbms_output.put_line('+ To speedup Capture restart, reduce the amount of disk space taken by the archived'); + dbms_output.put_line('+ logs, and reduce Capture metadata, consider moving the first_scn automatically by '); + dbms_output.put_line('+ altering the checkpoint_retention_time capture parameter to a lower value '); + dbms_output.put_line('+ (See the Documentation for more information). '); + dbms_output.put_line('+ Note that once the first scn is increased, Capture will no longer be able to mine before'); + dbms_output.put_line('+ this new scn value.'); + dbms_output.put_line('+ Successive moves of the first_scn will remove unneeded registered archive'); + dbms_output.put_line('+ logs only if the files have been removed from disk'); + end if; + end; +end; +/ +prompt +prompt ++ +prompt ++ SYS Checks +prompt ++ +prompt +declare + -- Change the variable below to FALSE if you just want the warnings and errors, not the advice + verbose boolean := TRUE; + -- By default a streams pool usage above 95% will result in output + streams_pool_usage_threshold number := 95; + + row_count number; + days_old number; + failed boolean; + streams_pool_usage number; + streams_pool_size varchar2(512); + + cursor unrecovered_queue is select queue_schema,queue_name from x$buffered_queues where flags=1; + +begin + -- Check high streams pool usage + begin + select FRUSED_KWQBPMT into streams_pool_usage from x$kwqbpmt; + select value into streams_pool_size from v$parameter where name = 'streams_pool_size'; + if streams_pool_usage > streams_pool_usage_threshold then + dbms_output.put_line('+ WARNING: Streams pool usage for this instance is ' || streams_pool_usage || + '% of ' || streams_pool_size || ' bytes!'); + dbms_output.put_line('+ If this system is processing a typical workload, and no ' || + 'other errors exist, consider increasing the streams pool size.'); + end if; + exception when others then null; + end; + + + dbms_output.put_line('+'); + +-- Check unrecovered queues + + for rec in unrecovered_queue loop + dbms_output.put_line('+ ERROR: Queue ''' || rec.queue_schema || '.'||rec.queue_name||' has not been recovered normally ' ); + dbms_output.put_line('+ Force recovery by altering the queue ownership to another instance. '); + dbms_output.put_line('+ Use the DBMS_AQADM.ALTER_QUEUE_TABLE procedure to specify a different instance.'); + end loop; + + dbms_output.put_line('+'); + +end; +/ + + +prompt +prompt ++ +prompt ++ init.ora checks ++ +prompt ++ +declare + -- Change the variable below to FALSE if you just want the warnings and errors, not the advice + verbose boolean := TRUE; + row_count number; + num_downstream_cap number; + capture_procs number; + apply_procs number; + newline varchar2(1) := ' +'; +begin + -- Error checks first + verify_init_parameter('global_names', 'TRUE', verbose, is_error=>TRUE); + verify_init_parameter('job_queue_processes', '4', verbose, at_least=> TRUE, is_error=>TRUE); + verify_init_parameter('open_links', '4', verbose, at_least=> TRUE, is_error=>TRUE, alert_if_not_found=>FALSE); + -- Get minimum number of parallel_max_servers to set + select NVL(sum(to_number(value)+2), 0) into capture_procs from dba_capture_parameters where parameter = 'PARALLELISM'; + select NVL(sum(to_number(value)+2), 0) into apply_procs from dba_apply_parameters where parameter = 'PARALLELISM'; + + verify_init_parameter('parallel_max_servers', to_char(capture_procs + apply_procs), verbose, + '+ If you have stray Capture or Apply processes on the system, you can ignore this error.', + at_least=> TRUE, is_error=>TRUE); + + -- Do downstream capture checks + select count(*) into num_downstream_cap from dba_capture where capture_type = 'DOWNSTREAM'; + if num_downstream_cap > 0 then + -- We have a downstream capture, so do specific checks + verify_init_parameter('remote_archive_enable', 'TRUE', verbose, is_error=>TRUE); + end if; + + -- Then warnings + verify_init_parameter('_job_queue_interval', '1', verbose, + '+ This parameter when set properly will allow propagation ' || + 'processes to send messages more frequently.'); + verify_init_parameter('compatible', '10.2.0', verbose, + '+ To use the new Streams features introduced in Oracle Database 10g Release 2, '|| + 'this parameter must be set to a value greater than ''10.2.0''', + use_like => TRUE); + + +-- explictly check if aq_tm_processes has been manually set to 0. If so, raise error. + declare + mycheck number; + begin + select 1 into mycheck from v$parameter where name = 'aq_tm_processes' and value = '0' + and (ismodified <> 'FALSE' OR isdefault='FALSE'); + if mycheck = 1 then + dbms_output.put_line('+ ERROR: The parameter ''aq_tm_processes'' should not be explicitly set to 0!'); + dbms_output.put_line('+ Queue monitoring is disabled for all queues.'); + dbms_output.put_line('+ To resolve this problem, set the value to 1 using: ALTER SYSTEM SET AQ_TM_PROCESSES=1; '); + end if; + exception when no_data_found then null; + end; + +-- explictly check if aq_tm_processes has been manually set to 10. If so, raise error. + declare + mycheck number; + begin + select 1 into mycheck from v$parameter where name = 'aq_tm_processes' and isdefault = 'FALSE' + and value = '10'; + if mycheck = 1 then + dbms_output.put_line('+ ERROR: The parameter ''aq_tm_processes'' should not be explicitly set to 10!'); + dbms_output.put_line('+ With this setting, queue monitoring is disabled for buffered queues.'); + dbms_output.put_line('+ To resolve this problem, set the value to 1 using: ALTER SYSTEM SET AQ_TM_PROCESSES=1; '); + end if; + exception when no_data_found then null; + end; + + verify_init_parameter('streams_pool_size', '0', TRUE, + '+ If this parameter is 0 and sga_target is non-zero, then autotuning of the streams pool is implied.'||newline|| + '+ If the sga_target parameter is set to 0 and streams_pool_size is 0,'|| newline|| + '+ 10% of the shared pool will be used for Streams.' || newline || + '+ If sga_target is 0, the minimum recommendation for streams_pool_size is 200M.'|| newline|| + '+ Note you must bounce the database if changing the ', + '+ value from zero to a nonzero value. But if simply increasing this' || newline || + '+ value from an already nonzero value, the database need not be bounced.', + at_least=> TRUE); +end; +/ + +prompt +prompt ++ +prompt ++ Configuration checks ++ +prompt ++ +declare + current_value varchar2(4000); + + cursor propagation_latency is + select propagation_name, latency from dba_propagation, dba_queue_schedules + where schema = source_queue_owner and qname = source_queue_name and destination = destination_dblink + and latency >= 60 and message_delivery_mode = 'BUFFERED'; + cursor multiqueues is + select c.capture_name capture_name, a.apply_name apply_name, + c.queue_owner queue_owner, c.queue_name queue_name + from dba_capture c, dba_apply a + where c.queue_name = a.queue_name and c.queue_owner = a.queue_owner + and c.capture_type != 'DOWNSTREAM'; + + cursor nonlogged_tables is + select table_owner owner,table_name name from dba_capture_prepared_tables t + where supplemental_log_data_pk='NO' and supplemental_log_data_fk='NO' and supplemental_log_data_ui='NO' and + supplemental_log_data_all='NO' + and not exists ( + select 'X' from dba_log_groups l where t.table_owner = l.owner and t.table_name = l.table_name + UNION + select 'x' from dba_capture_prepared_schemas s where s.schema_name =t.table_owner + UNION + select 'x' from dba_capture_prepared_database); + + + + cursor overlapping_rules is + select a.streams_name sname, a.streams_type stype, + a.rule_set_owner rule_set_owner, a.rule_set_name rule_set_name, + a.rule_owner owner1, a.rule_name name1, a.streams_rule_type type1, + b.rule_owner owner2, b.rule_name name2, b.streams_rule_type type2 + from dba_streams_rules a, dba_streams_rules b + where a.rule_set_owner = b.rule_set_owner + and a.rule_set_name = b.rule_set_name + and a.streams_name = b.streams_name and a.streams_type = b.streams_type + and a.rule_type = b.rule_type + and (a.subsetting_operation is null or b.subsetting_operation is null) + and (a.rule_owner != b.rule_owner or a.rule_name != b.rule_name) + and ((a.streams_rule_type = 'GLOBAL' and b.streams_rule_type + in ('SCHEMA', 'TABLE') and a.schema_name = b.schema_name) + or (a.streams_rule_type = 'SCHEMA' and b.streams_rule_type = 'TABLE' + and a.schema_name = b.schema_name) + or (a.streams_rule_type = 'TABLE' and b.streams_rule_type = 'TABLE' + and a.schema_name = b.schema_name and a.object_name = b.object_name + and a.rule_name < b.rule_name) + or (a.streams_rule_type = 'SCHEMA' and b.streams_rule_type = 'SCHEMA' + and a.schema_name = b.schema_name and a.rule_name < b.rule_name) + or (a.streams_rule_type = 'GLOBAL' and b.streams_rule_type = 'GLOBAL' + and a.rule_name < b.rule_name)) + order by a.rule_name; + cursor spilled_apply is + select a.apply_name + from dba_apply_parameters p, dba_apply a, gv$buffered_queues q + where a.queue_owner = q.queue_schema and a.queue_name = q.queue_name + and a.apply_name = p.apply_name and p.parameter = 'PARALLELISM' + and p.value > 1 and (q.cspill_msgs/DECODE(q.cnum_msgs, 0, 1, q.cnum_msgs) * 100) > 25; + + cursor bad_source_db is + select rule_owner||'.'||rule_name Rule_name, source_database from dba_streams_rules where source_database not in + (select global_name from system.logmnrc_dbname_uid_map); + + + cursor qtab_too_long is + select queue_table name, length(queue_table) len from dba_queues q , dba_apply a where + length(queue_table)>24 and q.owner=a.queue_owner and q.name=a.queue_name; + + cursor reginfo_invalid is + select comp_id,status from dba_registry where comp_id in ('CATALOG','CATPROC') and status <> 'VALID'; + + cursor version_diff is + select i.version inst_version,r.version reg_version from v$instance i, dba_registry r where + r.comp_id in ('CATALOG','CATPROC') and i.version <> r.version; + + row_count number; + capture_count number; + verbose boolean := TRUE; + overlap_rules boolean := FALSE; + latency number; +begin + -- Check that propagation latency is not 60 + for rec in propagation_latency loop + dbms_output.put_line('+ WARNING: the Propagation process ''' || rec.propagation_name || + ''' has latency ' || rec.latency || ', it should be 5 or less!'); + if verbose then + dbms_output.put_line('+ Set the latency by calling ' || + 'dbms_aqadm.alter_schedule(queue_name,destination,latency=>5)'); + end if; + dbms_output.put_line('+'); + end loop; + + -- Check source database names on rules + for rec in bad_source_db loop + dbms_output.put_line('+ ERROR: The rule '||rec.rule_name||' specifies an unknown source database: '||rec.source_database||'.'); + end loop; + + -- Check queue table name length + for rec in qtab_too_long loop + dbms_output.put_line('+ ERROR: The queue table name '''||rec.name||''' has length of '||rec.len|| + ' bytes, it should be 24 bytes or less!'); + dbms_output.put_line('+'); + end loop; + + -- Check Registry Info STATUS + for rec in reginfo_invalid loop + dbms_output.put_line('+ ERROR: The DBA_REGISTRY status information for component '''||rec.comp_id|| + ''' requires attention. Status is '||rec.status|| + '. Please recompile the component '); + dbms_output.put_line('+'); + end loop; + + -- Check consistent Instance and Registry Info + for rec in version_diff loop + dbms_output.put_line('+ ERROR: The ORACLE_HOME software is '''||rec.inst_version||''' but the database catalog is '||rec.reg_version|| + '. CATPATCH must be run successfully to complete the upgrade'); + dbms_output.put_line('+'); + end loop; + + + -- Separate queues for capture and apply + for rec in multiqueues loop + dbms_output.put_line('+ WARNING: the Capture process ''' || rec.capture_name || + ''' and Apply process ''' || rec.apply_name || ''''); + dbms_output.put_line('+ share the same queue ''' || rec.queue_owner || '.' + || rec.queue_name || '''. If the Apply process is receiving changes'); + dbms_output.put_line('+ from a remote site, a separate queue should be created for' + || ' the Apply process.'); + end loop; + + dbms_output.put_line('+'); + + -- Make sure it is in archivelog mode + select count(*) into capture_count from dba_capture where capture_type != 'DOWNSTREAM'; + select count(*) into row_count from v$database where log_mode = 'NOARCHIVELOG'; + if row_count > 0 and capture_count > 0 then + dbms_output.put_line('+ ERROR: ARCHIVELOG mode must be enabled for this database.'); + if verbose then + dbms_output.put_line('+ For a Streams Capture process to function correctly, it' + || ' must be able to read the archive logs.'); + dbms_output.put_line('+ Please refer to the documentation to restart the database' + || ' in ARCHIVELOG format.'); + dbms_output.put_line('+'); + end if; + end if; + + -- Basic supplemental logging checks + -- #1. If minimal supplemental logging is not enabled, this is an error + select count(*) into row_count from v$database where SUPPLEMENTAL_LOG_DATA_MIN = 'NO'; + if row_count > 0 and capture_count > 0 then + dbms_output.put_line('+ ERROR: Minimal supplemental logging not enabled.'); + if verbose then + dbms_output.put_line('+ For a Streams Capture process to function correctly, at' + || ' least minimal supplemental logging should be enabled.'); + dbms_output.put_line('+ Execute ''ALTER DATABASE ADD SUPPLEMENTAL LOG DATA''' + || ' to fix this issue. Note you may need to specify further'); + dbms_output.put_line('+ levels of supplemental logging, see the documentation' + || ' for more details.'); + dbms_output.put_line('+'); + end if; + end if; + + -- #2. If Primary key database level logging not enabled, there better be some + -- log data per prepared table + select count(*) into row_count from v$database where SUPPLEMENTAL_LOG_DATA_PK = 'NO'; + if row_count > 0 and capture_count > 0 then + for rec in nonlogged_tables loop + dbms_output.put_line('+ ERROR: No supplemental logging specified for table ''' + || rec.owner || '.' || rec.name || '''.'); + if verbose then + dbms_output.put_line('+ In order for Streams to work properly, it must' || + ' have key information supplementally logged'); + dbms_output.put_line('+ for each table whose changes are being captured. ' || + 'This system does not have database level primary key information '); + dbms_output.put_line('logged, thus for each interested table manual logging ' + || 'must be specified. Please see the documentation for more info.'); + dbms_output.put_line('+'); + end if; + end loop; + end if; + + -- Rules checks + -- TODO: intergrate existing rules checks found above + for rec in overlapping_rules loop + overlap_rules := TRUE; + dbms_output.put_line('+ WARNING: The rule ''' || rec.owner1 || '''.''' || rec.name1 + || ''' and ''' || rec.owner2 || '''.''' || rec.name2 + || ''' from rule set ''' || rec.rule_set_owner || '''.''' + || rec.rule_set_name || ''' overlap.'); + end loop; + + if overlap_rules and verbose then + dbms_output.put_line('+ Overlapping rules are a problem especially when rule-based transformations exist.'); + dbms_output.put_line('+ Streams makes no guarantees of which rule in a rule set will evaluate to TRUE,'); + dbms_output.put_line('+ thus overlapping rules will cause inconsistent behavior, and should be avoided.'); + end if; + dbms_output.put_line('+'); + + -- + -- Suggestions. These might help speedup performance. + -- + + if verbose then + -- Propagation has a rule set + select count(*) into row_count from dba_propagation where rule_set_owner is not null + and rule_set_name is not null; + if row_count > 0 then + dbms_output.put_line('+ SUGGESTION: One or more propagation processes contain rule sets.'); + dbms_output.put_line('+ If a Propagation process will unconditionally forward all incoming'); + dbms_output.put_line('+ messages to its destination queue, and no rule-based transformations are'); + dbms_output.put_line('+ performed by the Propagation process, you should consider removing'); + dbms_output.put_line('+ the rule set for the Propagation process via dbms_propagation_adm.alter_propagation.'); + dbms_output.put_line('+ This will improve Propagation performance.'); + dbms_output.put_line('+'); + end if; + + -- Apply has a rule set + select count(*) into row_count from dba_apply where rule_set_owner is not null + and rule_set_name is not null; + if row_count > 0 then + dbms_output.put_line('+ SUGGESTION: One or more apply processes contain rule sets.'); + dbms_output.put_line('+ If an Apply process will unconditionally apply all incoming'); + dbms_output.put_line('+ messages and no rule-based transformations or apply enqueues are '); + dbms_output.put_line('+ performed by the Apply process, you should consider removing '); + dbms_output.put_line('+ the rule set for via dbms_apply_adm.alter_apply.'); + dbms_output.put_line('+ This will improve Apply performance.'); + dbms_output.put_line('+'); + end if; + + -- Apply has parallelism 1 + select count(*) into row_count from dba_apply_parameters where parameter='PARALLELISM' + and to_number(value) = 1; + if row_count > 0 then + dbms_output.put_line('+ SUGGESTION: One or more Apply processes have parallelism 1'); + dbms_output.put_line('+ If your workload consists of many independent transactions'); + dbms_output.put_line('+ and you notice that apply is the bottleneck of your system, '); + dbms_output.put_line('+ you might consider increasing the parallelism of the apply process'); + dbms_output.put_line('+ to a multiple of 4 via dbms_apply_adm.set_parameter.'); + dbms_output.put_line('+'); + end if; + + -- If apply parallelism > 1, and spills exist in queue, and _txn_buffer_size + -- hasn't been set, suggest reducing it to 10 or less. + for rec in spilled_apply loop + begin + select value into current_value from dba_apply_parameters where parameter='_TXN_BUFFER_SIZE' + and apply_name = rec.apply_name; + exception when no_data_found then + -- default parameter, output warning + dbms_output.put_line('+ SUGGESTION: Apply ''' || rec.apply_name || ''' has parallelism > 1 and spilled data.'); + dbms_output.put_line('+ If the transaction workload is mainly medium size transactions (thousands of row changes per transaction),'); + dbms_output.put_line('+ consider reducing the ''_TXN_BUFFER_SIZE'' apply parameter to 10*parallelism to limit the'); + dbms_output.put_line('+ number of transactions stored in the Apply hash table, and memory consumption.'); + dbms_output.put_line('+ If your workload contains very large transactions (>10000 rows), consider'); + dbms_output.put_line('+ reducing this parameter even further, to 2*parallelism for example. Note by reducing this'); + dbms_output.put_line('+ parameter you are trading off memory usage for performance.'); + dbms_output.put_line('+'); + end; + + if current_value > 50 then + dbms_output.put_line('+ SUGGESTION: Apply ''' || rec.apply_name || ''' has parallelism > 1 and spilled data.'); + dbms_output.put_line('+ Consider reducing the ''_TXN_BUFFER_SIZE'' apply parameter to 10+parallelism to limit the'); + dbms_output.put_line('+ number of transactions stored in the Apply hash table, and memory consumption.'); + dbms_output.put_line('+ If your workload contains very large transactions (>100000 rows), consider'); + dbms_output.put_line('+ reducing this parameter even further, to 2+parallelism for example. Note by reducing this'); + dbms_output.put_line('+ parameter you are trading off memory usage for performance.'); + dbms_output.put_line('+'); + end if; + end loop; + + -- Both transformation function and dml handler defined for apply + select count(*) into row_count + from dba_apply a, dba_streams_rules r, dba_streams_transform_function t, + dba_apply_dml_handlers d + where a.rule_set_owner = r.rule_set_owner and a.rule_set_name = r.rule_set_name + and r.rule_owner = t.rule_owner and r.rule_name = t.rule_name + and t.transform_function_name is not null + and (a.apply_name = d.apply_name or d.apply_name is null) + and (r.schema_name = d.object_owner or r.schema_name is null) + and (r.object_name = d.object_name or r.object_name is null) + and r.subsetting_operation is null and d.error_handler = 'N' + and d.user_procedure is not null; + + if row_count > 0 then + dbms_output.put_line('+ SUGGESTION: One or more Apply processes have both DML handlers and transformation'); + dbms_output.put_line('+ functions defined. Both DML handlers and transformations involve expensive'); + dbms_output.put_line('+ PL/SQL operations. If you notice slow Apply performance, consider performing'); + dbms_output.put_line('+ all PL/SQL operations in either a transformation function or dml handler.'); + dbms_output.put_line('+'); + end if; + + -- Database-level supplemental logging defined but only a few tables replicated + select count(*) into row_count from v$database where supplemental_log_data_pk = 'YES'; + select count(*) into capture_count from dba_capture_prepared_tables; + if row_count > 0 and capture_count < 10 then + dbms_output.put_line('+ SUGGESTION: Database-level supplemental logging enabled but only a few tables'); + dbms_output.put_line('+ prepared for capture. Database-level supplemental logging could write more'); + dbms_output.put_line('+ information to the redo logs for every update statement in the system.'); + dbms_output.put_line('+ If the number of tables you are interested in is small, you might consider'); + dbms_output.put_line('+ specifying supplemental logging of keys and columns on a per-table basis.'); + dbms_output.put_line('+ See the documentation for more information on per-table supplemental logging.'); + dbms_output.put_line('+'); + end if; + end if; +end; +/ + +prompt +prompt ++ +prompt ++ Performance Checks ++ +prompt ++ +prompt ++ Note: Performance only checked for enabled Streams processes! +prompt ++ Aborted and disabled processes will not report performance warnings! +prompt +declare + verbose boolean := TRUE; + + -- how far back capture must be before we generate a warning + capture_latency_threshold number := 300; -- seconds + -- how far back the apply reader must be before we generate a warning + applyrdr_latency_threshold number := 600; -- seconds + -- how far back the apply coordinator's LWM must be before we generate a warning + applylwm_latency_threshold number := 1200; -- seconds + -- how many messages should be unconsumed before generating a warning + unconsumed_msgs_threshold number := 300000; + -- percentage of messages spilled before generating a warning + spill_ratio_threshold number := 25; + -- how long queue can be up before signalling a warning + spill_startup_threshold number := 3600; -- seconds + -- how long logminer can spend spilling before generating a warning + logminer_spill_threshold number := 30000000; -- microseconds + + complex_rules boolean := FALSE; + + cursor capture_latency (threshold NUMBER) is + select capture_name, 86400 *(available_message_create_time - capture_message_create_time) latency + from gv$streams_capture + where 86400 *(available_message_create_time - capture_message_create_time) > threshold; + + cursor apply_reader_latency (threshold NUMBER) is + select apply_name, 86400 *(dequeue_time - dequeued_message_create_time) latency + from gv$streams_apply_reader + where 86400 *(dequeue_time - dequeued_message_create_time) > threshold; + + cursor apply_lwm_latency (threshold NUMBER) is + select r.apply_name, 86400 *(r.dequeue_time - c.lwm_message_create_time) latency + from gv$streams_apply_reader r, gv$streams_apply_coordinator c + where r.apply# = c.apply# and r.apply_name = c.apply_name + and 86400 *(r.dequeue_time - c.lwm_message_create_time) > threshold; + + cursor queue_stats is + select queue_schema, queue_name, num_msgs, spill_msgs, cnum_msgs, cspill_msgs, + (cspill_msgs/DECODE(cnum_msgs, 0, 1, cnum_msgs) * 100) spill_ratio, 86400 *(sysdate - startup_time) alive + from gv$buffered_queues; + + cursor logminer_spill_time (threshold NUMBER) is + select c.capture_name, l.name, l.value from gv$streams_capture c, gv$logmnr_stats l + where c.logminer_id = l.session_id + and name = 'microsecs spent in pageout' and value > threshold; + + cursor complex_rule_sets_cap is + select capture_name, owner, name from gv$rule_set r, dba_capture c + where c.rule_set_owner = r.owner and c.rule_set_name = r.name + and r.sql_executions > 0; + + cursor complex_rule_sets_prop is + select propagation_name, owner, name from gv$rule_set r, dba_propagation p + where p.rule_set_owner = r.owner and p.rule_set_name = r.name + and r.sql_executions > 0; + + cursor complex_rule_sets_apply is + select apply_name, owner, name from gv$rule_set r, dba_apply a + where a.rule_set_owner = r.owner and a.rule_set_name = r.name + and r.sql_executions > 0; +begin + for rec in capture_latency(capture_latency_threshold) loop + dbms_output.put_line('+ WARNING: The latency of the Capture process ''' || rec.capture_name + || ''' is ' || to_char(rec.latency, '99999999') || ' seconds!'); + if verbose then + dbms_output.put_line('+ This measurement shows how far behind the Capture process is in processing the'); + dbms_output.put_line('+ redo log. This may be due to slowdown in any of the common Streams components:'); + dbms_output.put_line('+ Capture, Propagation, and/or Apply. If this latency is chronic and not due'); + dbms_output.put_line('+ to errors, consider the above suggestions for improving Capture, Propagation,'); + dbms_output.put_line('+ and Apply performance.'); + dbms_output.put_line('+'); + end if; + end loop; + + for rec in apply_reader_latency(applyrdr_latency_threshold) loop + dbms_output.put_line('+ WARNING: The latency of the reader process for Apply ''' || rec.apply_name + || ''' is ' || to_char(rec.latency, '99999999') || ' seconds!'); + if verbose then + dbms_output.put_line('+ This measurement shows how far behind the Apply reader is from when the message was'); + dbms_output.put_line('+ created, which in the normal case is by a Capture process. In other words, '); + dbms_output.put_line('+ the time between message creation and message dequeue by the Apply reader is too large.'); + dbms_output.put_line('+ If this latency is chronic and not due to errors, consider the above suggestions '); + dbms_output.put_line('+ for improving Capture and Propagation performance.'); + dbms_output.put_line('+'); + end if; + end loop; + + for rec in apply_lwm_latency(applylwm_latency_threshold) loop + dbms_output.put_line('+ WARNING: The latency of the coordinator process for Apply ''' || rec.apply_name + || ''' is ' || to_char(rec.latency, '99999999') || ' seconds!'); + if verbose then + dbms_output.put_line('+ This measurement shows how far behind the low-watermark of the Apply process is'); + dbms_output.put_line('+ from when the message was first created, which in the normal case is by a Capture process.'); + dbms_output.put_line('+ The low-watermark is the most recent transaction (in terms of SCN) that has been'); + dbms_output.put_line('+ successfully applied, for which all previous transactions have also been applied.'); + dbms_output.put_line('+ A high latency can be due to long-running tranactions, many dependent transactions,'); + dbms_output.put_line('+ or slow Capture, Propagation, or Apply processes.'); + dbms_output.put_line('+'); + end if; + end loop; + + -- check queue performance + for rec in queue_stats loop + if rec.num_msgs > unconsumed_msgs_threshold then + dbms_output.put_line('+ WARNING: There are ' || rec.num_msgs || ' unconsumed messages in queue ''' || rec.queue_schema || + '''.''' || rec.queue_name || '''!'); + dbms_output.put_line('+'); + end if; + + if rec.spill_ratio > spill_ratio_threshold and rec.alive > spill_startup_threshold then + dbms_output.put_line('+ WARNING: The queue ''' || rec.queue_schema || '''.''' || rec.queue_name || ''' has spilled ' || + round(rec.spill_ratio) || '% of its messages!'); + if verbose then + dbms_output.put_line('+ Since the queue has been started, some large ratio of messages '); + dbms_output.put_line('+ have been spilled to disk. If no errors have occurred which might '); + dbms_output.put_line('+ have caused the spills in the past (such as an aborted Apply or'); + dbms_output.put_line('+ Propagation process), and if you do not have long running transactions'); + dbms_output.put_line('+ in your workload, consider increasing the size of the Streams Pool'); + dbms_output.put_line('+ or increasing Apply parallelism.'); + end if; + dbms_output.put_line('+'); + end if; + +/* + if rec.cspill_msgs > cum_spilled_msgs_threshold then + dbms_output.put_line('+ WARNING: There are ' || rec.cspill_msgs || + ' cumulatively spilled messages in queue ''' || rec.queue_schema || + '''.''' || rec.queue_name || '''!'); + if verbose then + dbms_output.put_line('+ Since the queue has been started, some large number of messages '); + dbms_output.put_line('+ have been spilled to disk. If no errors have occurred which might '); + dbms_output.put_line('+ have caused the spills in the past (such as an aborted Apply or'); + dbms_output.put_line('+ Propagation process), and if you do not have long running transactions'); + dbms_output.put_line('+ in your workload, consider increasing the size of the Streams Pool'); + end if; + dbms_output.put_line('+'); + end if; +*/ + end loop; + + -- logminer spill time + for rec in logminer_spill_time(logminer_spill_threshold) loop + dbms_output.put_line('+ WARNING: Excessive spill time for Capture process ''' + || rec.capture_name || '''!'); + if verbose then + dbms_output.put_line('+ Spill time implies that the Logminer component used by Capture '); + dbms_output.put_line('+ does not have enough memory allocated to it. This condition '); + dbms_output.put_line('+ occurs when the system workload contains many DDLs and/or LOB'); + dbms_output.put_line('+ transactions. Consider increasing the size of memory allocated to the'); + dbms_output.put_line('+ Capture process by increasing the ''_SGA_SIZE'' Capture parameter.'); + end if; + dbms_output.put_line('+'); + end loop; + + -- sql executions in rule sets + for rec in complex_rule_sets_cap loop + complex_rules := TRUE; + dbms_output.put_line('+ WARNING: Complex rules exist for Capture process ''' + || rec.capture_name || ' and rule set ''' + || rec.owner || '''.''' || rec.name || '''!'); + end loop; + + for rec in complex_rule_sets_prop loop + complex_rules := TRUE; + dbms_output.put_line('+ WARNING: Complex rules exist for Propagation process ''' + || rec.propagation_name || ' and rule set ''' + || rec.owner || '''.''' || rec.name || '''!'); + end loop; + + for rec in complex_rule_sets_apply loop + complex_rules := TRUE; + dbms_output.put_line('+ WARNING: Complex rules exist for Apply process ''' + || rec.apply_name || ' and rule set ''' + || rec.owner || '''.''' || rec.name || '''!'); + end loop; + + if verbose and complex_rules then + dbms_output.put_line('+ Complex rules require SQL evaluations per message by a Streams '); + dbms_output.put_line('+ process. This slows down performance and should be avoided '); + dbms_output.put_line('+ if possible. Examine the rules in the rule set (for example'); + dbms_output.put_line('+ by looking at DBA_RULE_SET_RULES and DBA_RULES) and avoid uses'); + dbms_output.put_line('+ of the ''like'' operator and function/procedure calls in rule'); + dbms_output.put_line('+ conditions unless absolutely necessary.'); + end if; + dbms_output.put_line('+'); +end; +/ +prompt ================================================================================ +prompt ++ STREAMS Process Wait Analysis ++ + + +prompt +set lines 180 +set numf 9999999999999 +set pages 9999 +set verify OFF + +COL BUSY FORMAT A4 +COL PERCENTAGE FORMAT 999D9 +COL event wrapped + +-- This variable controls how many minutes in the past to analyze +DEFINE minutes_to_analyze = 30 + +prompt Analysis of last &minutes_to_analyze minutes of Streams processes +prompt + +PROMPT Note: When computing the busiest component, be sure to subtract the percentage where BUSY = 'NO' +PROMPT Note: 'no rows selected' means that the process was performing no busy work, or that no such process exists on the system. +PROMPT Note: A null Wait Event implies running - either on the cpu or waiting for cpu + +prompt +prompt ++ LOGMINER READER PROCESSES ++ + +COL LOGMINER_READER_NAME FORMAT A30 WRAP +BREAK ON LOGMINER_READER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON LOGMINER_READER_NAME; +SELECT c.capture_name || ' - reader' as logminer_reader_name, + ash_capture.event_count, ash_total.total_count, + ash_capture.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash_capture.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash_capture, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$logmnr_process lp, v$streams_capture c +WHERE lp.SID = ash_capture.SESSION_ID + AND lp.serial# = ash_capture.SESSION_SERIAL# + AND lp.role = 'reader' and lp.session_id = c.logminer_id +ORDER BY logminer_reader_name, percentage; + +prompt +prompt ++ LOGMINER PREPARER PROCESSES ++ + +COL LOGMINER_PREPARER_NAME FORMAT A30 WRAP +BREAK ON LOGMINER_PREPARER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON LOGMINER_PREPARER_NAME; +SELECT c.capture_name || ' - preparer' || lp.spid as logminer_preparer_name, + ash_capture.event_count, ash_total.total_count, + ash_capture.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash_capture.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash_capture, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$logmnr_process lp, v$streams_capture c +WHERE lp.SID = ash_capture.SESSION_ID + AND lp.serial# = ash_capture.SESSION_SERIAL# + AND lp.role = 'preparer' and lp.session_id = c.logminer_id +ORDER BY logminer_preparer_name, percentage; + +prompt +prompt ++ LOGMINER BUILDER PROCESSES ++ + +COL LOGMINER_BUILDER_NAME FORMAT A30 WRAP +BREAK ON LOGMINER_BUILDER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON LOGMINER_BUILDER_NAME; +SELECT c.capture_name || ' - builder' as logminer_builder_name, + ash_capture.event_count, ash_total.total_count, + ash_capture.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash_capture.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash_capture, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$logmnr_process lp, v$streams_capture c +WHERE lp.SID = ash_capture.SESSION_ID + AND lp.serial# = ash_capture.SESSION_SERIAL# + AND lp.role = 'builder' and lp.session_id = c.logminer_id +ORDER BY logminer_builder_name, percentage; + + +prompt +prompt ++ CAPTURE PROCESSES ++ + +COL CAPTURE_NAME FORMAT A30 WRAP +BREAK ON CAPTURE_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON CAPTURE_NAME; +SELECT c.capture_name, + ash_capture.event_count, ash_total.total_count, + ash_capture.event_count*100/ash_total.total_count percentage, + DECODE(ash_capture.event, + 'Streams capture: waiting for subscribers to catch up', 'NO', + 'Streams capture: resolve low memory condition', 'NO', + 'Streams capture: waiting for archive log', 'NO', + 'YES') busy, + ash_capture.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash_capture, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$streams_capture c +WHERE c.SID = ash_capture.SESSION_ID and c.serial# = ash_capture.SESSION_SERIAL# +ORDER BY capture_name, percentage; + + + +prompt +prompt ++ PROPAGATION SENDER PROCESSES ++ + +COL PROPAGATION_NAME FORMAT A30 WRAP +BREAK ON PROPAGATION_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON PROPAGATION_NAME; +SELECT ('"'||vps.queue_schema||'"."'||vps.queue_name|| + '"=>'||vps.dblink) as propagation_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + DECODE(ash.event, + 'SQL*Net more data to dblink', 'NO', + 'SQL*Net message from dblink', 'NO', + 'YES') busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$propagation_sender vps, x$kwqps xps +WHERE xps.kwqpssid = ash.SESSION_ID and xps.kwqpsser = ash.SESSION_SERIAL# + AND xps.kwqpsqid = vps.queue_id and vps.dblink = xps.KWQPSDBN +ORDER BY propagation_name, percentage; + + + +prompt +prompt ++ PROPAGATION RECEIVER PROCESSES ++ + +COL PROPAGATION_RECEIVER_NAME FORMAT A30 WRAP +BREAK ON PROPAGATION_RECEIVER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON PROPAGATION_RECEIVER_NAME; +SELECT ('"'||vpr.src_queue_schema||'"."'||vpr.src_queue_name|| + '@' || vpr.src_dbname|| '"=>'||global_name) + as propagation_receiver_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + DECODE(ash.event, + 'Streams AQ: enqueue blocked on low memory', 'NO', + 'Streams AQ: enqueue blocked due to flow control', 'NO', + 'YES') busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$propagation_receiver vpr, x$kwqpd xpd, global_name +WHERE xpd.kwqpdsid = ash.SESSION_ID and xpd.kwqpdser = ash.SESSION_SERIAL# + AND xpd.kwqpdsqn = vpr.src_queue_name + AND xpd.kwqpdsqs = vpr.src_queue_schema and xpd.kwqpddbn = vpr.src_dbname +ORDER BY propagation_receiver_name, percentage; + + + +prompt +prompt ++ APPLY READER PROCESSES ++ + +COL APPLY_READER_NAME FORMAT A30 WRAP +BREAK ON APPLY_READER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON APPLY_READER_NAME; +SELECT a.apply_name as apply_reader_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + DECODE(ash.event, + 'rdbms ipc message', 'NO', + 'YES') busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$streams_apply_reader a +WHERE a.sid = ash.SESSION_ID and a.serial# = ash.SESSION_SERIAL# +ORDER BY apply_reader_name, percentage; + + + +prompt +prompt ++ APPLY COORDINATOR PROCESSES ++ + +COL APPLY_COORDINATOR_NAME FORMAT A30 WRAP +BREAK ON APPLY_COORDINATOR_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON APPLY_COORDINATOR_NAME; +SELECT a.apply_name as apply_coordinator_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$streams_apply_coordinator a +WHERE a.sid = ash.SESSION_ID and a.serial# = ash.SESSION_SERIAL# +ORDER BY apply_coordinator_name, percentage; + + + +prompt +prompt ++ APPLY SERVER PROCESSES ++ + +COL APPLY_SERVER_NAME FORMAT A30 WRAP +BREAK ON APPLY_SERVER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON APPLY_SERVER_NAME; +SELECT a.apply_name || ' - ' || a.server_id as apply_server_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$streams_apply_server a +WHERE a.sid = ash.SESSION_ID and a.serial# = ash.SESSION_SERIAL# +ORDER BY apply_server_name, percentage; + +set timing off +set markup html off +clear col +clear break +spool +prompt Turning Spool OFF!!! +spool off + + diff --git a/vdh/streams_hc_12_1_0_1.sql b/vdh/streams_hc_12_1_0_1.sql new file mode 100644 index 0000000..307f40c --- /dev/null +++ b/vdh/streams_hc_12_1_0_1.sql @@ -0,0 +1,4599 @@ +REM +REM This healthcheck script is for use on Oracle12cR1 databases only. (12.1.0.1) +REM +REM +REM Do not use this script on Oracle9iR2 Oracle 10g, or Oracle 11g Streams configurations. +REM +REM It is recommended to run with markup html ON (default is on) and generate an HTML file for web viewing. +REM Please provide the output in HTML format when Oracle (support or development) requests healthcheck output. +REM To convert output to a text file viewable with a text editor, +REM change the HTML ON to HTML OFF in the set markup command +REM Remember to set up a spool file to capture the output +REM + +--connect / as sysdba +define hcversion = 'v7.0.3'; +set truncate off +set numwidth 15 +set lines 240 +set markup HTML ON entmap off +alter session set nls_date_format='YYYY-MM-DD HH24:Mi:SS'; +alter session set nls_language=american; +set heading off + +select 'STREAMS Health Check (&hcversion) for '||global_name||' on Instance='||instance_name||' generated: '||sysdate o from global_name, v$instance; +set heading on timing off + + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + +prompt +prompt ==================================================== +prompt =====================Summary ============================== +prompt ==================================================== +prompt +prompt ++ Summary Overview ++ +prompt +COL NAME HEADING 'Name' +col platform_name format a30 wrap +col current_scn format 99999999999999999 +col host Heading 'Host' +col version heading 'Version' +col startup_time heading 'Startup|Time' +col database_role Heading 'Database|Role' + +SELECT db.DBid,db.name, db.platform_name ,i.HOST_NAME HOST, i.VERSION, i.instance_number instance,db.cdb,db.database_role,db.current_scn, db.min_required_capture_change# from v$database db,v$instance i; + +prompt + +prompt Summary of Streams Capture configured in database (ConfigDetails StatsDetails) +prompt + + +col capture_name format a20 heading 'Capture|Name' +col capture_type format a10 heading 'Capture|Type' +col real_time_mine format a8 heading 'RealTime|Mine?' +col source_database format a20 heading 'Source DB|Name' +col purpose format a25 heading 'Purpose' +col status Heading 'Status' +col state Heading 'Current|Capture|State' +col capture_user format a12 Heading 'Capture|User' +col required_checkpoint_scn format 999999999999999999 heading 'Required|Checkpoint|SCN' +col inst_id Heading 'Instance' +col version format a12 Heading 'Capture|Version' +col startup_time heading 'Process|Startup|Time' +col mined_MB Heading 'Redo|Mined|MB' format 99999999.999 +col sent_MB Heading 'Sent to|Extract|Mb' format 99999999.999 +col STATE_CHANGED_TIME Heading 'Last |State Changed|Time' +col Current_time Heading 'Current|Time' +col capture_lag Heading 'Capture|Lag|seconds' + +select SYSDATE Current_time, + c.capture_name, + c.capture_user, + c.capture_type, + decode(cp.value,'N','NO', 'YES') Real_time_mine, + c.required_checkpoint_scn, + c.purpose, + c.version, + c.logminer_id, + c.status, + DECODE (g.STATE,null,' WAITING FOR CLIENT REQUESTS ', + 'WAITING FOR INACTIVE DEQUEUERS',''||g.state||'', + g.state) State, + (SYSDATE- g.capture_message_create_time)*86400 capture_lag, + g.bytes_of_redo_mined/1024/1024 mined_MB, + g.startup_time, + g.inst_id, + c.source_database +from dba_capture c, + gv$streams_capture g, + dba_capture_parameters cp +where + c.capture_name=g.capture_name + and c.purpose != 'GoldenGate Capture' + and c.capture_name=cp.capture_name and cp.parameter='DOWNSTREAM_REAL_TIME_MINE' + and c.status='ENABLED' +union all +select SYSDATE Current_time, + c.capture_name, + c.capture_user, + c.capture_type, + decode(cp.value, 'N','NO', 'YES') Real_time_mine, + c.required_checkpoint_scn, + c.purpose, + c.version, + c.logminer_id, + c.status, + 'Unavailable', + NULL, + NULL, + NULL, + NULL, + c.source_database +from dba_capture c, + dba_capture_parameters cp +where + c.status in ('DISABLED','ABORTED') and c.purpose != 'GoldenGate Capture' + and c.capture_name=cp.capture_name and cp.parameter='DOWNSTREAM_REAL_TIME_MINE' +order by capture_name; +prompt + +prompt +prompt +prompt Capture key parameters (Details) +prompt + +col parallelism format a11 +col sga_size format a12 +col max_sga_size format a12 +col excludetag format a20 +col excludeuser format a20 +col getapplops format a10 +col getreplicates format a13 +col checkpoint_frequency format a20 + +select cp.capture_name, + max(case when parameter='PARALLELISM' then value end) parallelism + ,max(case when parameter='_SGA_SIZE' then value end) sga_size + ,max(case when parameter='MAX_SGA_SIZE' then value end) max_sga_size + ,max(case when parameter='_CHECKPOINT_FREQUENCY' then value end) checkpoint_frequency + from dba_capture_parameters cp, dba_capture c where c.capture_name=cp.capture_name + and c.purpose !='GoldenGate Capture' + group by cp.capture_name; + +prompt +prompt Capture Logminer session info (Details) +prompt +col session_name Heading 'Capture|Name' +col available_txn Heading 'Available|Chunks' +col delivered_txn Heading 'Delivered|Chunks' +col difference Heading 'Ready to Send|Chunks' +col builder_work_size Heading 'Builder|WorkSize' +col prepared_work_size Heading 'Prepared|WorkSize' +col used_memory_size Heading 'Used|Memory' +col max_memory_size Heading 'Max|Memory' +col used_mem_pct Heading 'Used|Memory|Percent' + +select session_name, available_txn, delivered_txn, + available_txn-delivered_txn as difference, + builder_work_size, prepared_work_size, + used_memory_size , max_memory_size, + (used_memory_size/max_memory_size)*100 as used_mem_pct + FROM v$logmnr_session order by session_name; +prompt +prompt +prompt Summary of Apply processes configured in this database(ConfigDetails StatsDetails) +prompt + + +col server_name format a20 heading 'Server|Name' +col status Heading 'Status' +col state format a30 Heading 'Current|Apply|State' +col active_server_count Heading 'Active|Server|Count' +col inst_id Heading 'Instance' +col unassigned_complete_txns Heading 'Unassigned|Complete|Txns' +col apply_user format a12 Heading 'Apply|User' +col startup_time heading 'Process|Startup|Time' +col lwm heading 'Low Watermark|Message|Create Time' +col apply_tag heading 'Apply|Tag' format a20 + + +select sysdate Current_time, ib.apply_name, + ib.apply_user, + ib.status, + ib.purpose, + ib.apply_tag, + g.state, + g.unassigned_complete_txns, + g.lwm_message_create_time lwm, + g.startup_time, + g.inst_id, + pg.source_database +from dba_apply ib, + gv$streams_apply_coordinator g, + dba_apply_progress pg +where + ib.apply_name=g.apply_name and ib.apply_name=pg.apply_name + and ib.purpose not like 'GoldenGate%' + and ib.status in ('ATTACHED','ENABLED') +union all +select sysdate Current_time, ib.apply_name, + ib.apply_user, + ib.status, + ib.purpose, + ib.apply_tag, + 'Unavailable', + null, + null, + null, + null, + pg.source_database +from dba_apply ib, + dba_apply_progress pg +where + ib.apply_name=pg.apply_name + and ib.status not in ('ATTACHED','ENABLED') + and ib.purpose not like 'GoldenGate%' +order by apply_name; + +prompt +prompt Apply key parameters (Details) +prompt +col max_parallelism format a15 +col parallelism format a11 +col hash_table_size format a15 +col txn_buffer_size format a15 +col max_sga_size format a12 +col commit_serialization format a25 +col optimize_progress_table format a23 +col trace_level format a11 + +select ap.apply_name, + max(case when parameter='PARALLELISM' then value end) parallelism + ,max(case when parameter='COMMIT_SERIALIZATION' then value end) commit_serialization + ,max(case when parameter='_HASH_TABLE_SIZE' then value end) hash_table_size + ,max(case when parameter='_TXN_BUFFER_SIZE' then value end) txn_buffer_size + ,max(case when parameter='TRACE_LEVEL' then value end) trace_level + ,max(case when parameter='MAX_PARALLELISM' then value end) max_parallelism + ,max(case when parameter='OPTIMIZE_PROGRESS_TABLE' then value end) optimize_progress_table + ,max(case when parameter='MAX_SGA_SIZE' then value end) max_sga_size + from dba_apply_parameters ap, dba_apply ib where ib.apply_name=ap.apply_name and ib.purpose not like 'GoldenGate%' + group by ap.apply_name; +prompt +prompt +++ Outstanding alerts (Details) +prompt +set feedback on + +select message_type,creation_time,reason, suggested_action, + module_id,object_type, + instance_name||' (' ||instance_number||' )' Instance, + time_suggested +from dba_outstanding_alerts + where creation_time >= sysdate -10 and rownum < 11 + order by creation_time desc; +prompt +prompt Count of Capture and Apply processes configured in database by purpose + + + +col nmbr heading 'Count' +col type heading 'Process|Type' +select purpose,count(*) nmbr, 'CAPTURE' type from dba_capture group by purpose +union all +select purpose, count(*) nmbr, 'APPLY' type from dba_apply group by purpose +order by purpose; + +prompt + + +-- note: this function is vulnerable to SQL injection, please do not copy it +create or replace function get_parameter( + param_name IN varchar2, + param_value IN OUT varchar2, + table_name IN varchar2, + table_param_name IN varchar2, + table_value IN varchar2 +) return boolean is + statement varchar2(4000); +begin + -- construct query + statement := 'select ' || table_value || ' from ' || table_name || ' where ' + || table_param_name || '=''' || param_name || ''''; + + begin + execute immediate statement into param_value; + exception when no_data_found then + -- data is not found, so return FALSE + return FALSE; + end; + -- data found, so return TRUE + return TRUE; +end get_parameter; +/ +show errors; + +create or replace procedure verify_init_parameter( + param_name IN varchar2, + expected_value IN varchar2, + verbose IN boolean, + more_info IN varchar2 := NULL, + more_info2 IN varchar2 := NULL, + at_least IN boolean := FALSE, + is_error IN boolean := FALSE, + use_like IN boolean := FALSE, + -- may not be necessary + alert_if_not_found IN boolean := TRUE +) +is + current_val_num NUMBER; + expected_val_num NUMBER; + current_value varchar2(512); + prefix varchar2(20); + matches boolean := FALSE; + comparison_str varchar2(20); +begin + -- Set prefix as warning or error + if is_error then + prefix := '+ ERROR: '; + else + prefix := '+ WARNING: '; + end if; + + -- Set comparison string + if at_least then + comparison_str := ' at least '; + elsif use_like then + comparison_str := ' like '; + else + comparison_str := ' set to '; + end if; + + -- Get value + if get_parameter(param_name, current_value, 'v$parameter', 'name', 'value') = FALSE + and alert_if_not_found then + -- Value isn't set, so output alert + dbms_output.put_line(prefix || 'The parameter ''' || param_name || ''' should be' + || comparison_str || '''' || expected_value + || ''', instead it has been left to its default value.'); + if verbose and more_info is not null then + dbms_output.put_line(more_info); + if more_info2 is not null then + dbms_output.put_line(more_info2); + end if; + end if; + dbms_output.put_line('+'); + return; + end if; + + -- See if the expected value is what is actually set + if use_like then + -- Compare with 'like' + if current_value like '%'||expected_value||'%' then + matches := TRUE; + end if; + elsif at_least then + -- Do at least + current_val_num := to_number(current_value); + expected_val_num := to_number(expected_value); + if current_val_num >= expected_val_num then + matches := TRUE; + end if; + else + -- Do normal comparison + if current_value = expected_value then + matches := TRUE; + end if; + end if; + + if matches = FALSE then + -- The values don't match, so alert + dbms_output.put_line(prefix || 'The parameter ''' || param_name || ''' should be' + || comparison_str || '''' || expected_value + || ''', instead it has the value ''' || current_value || '''.'); + if verbose and more_info is not null then + dbms_output.put_line(more_info); + if more_info2 is not null then + dbms_output.put_line(more_info2); + end if; + end if; + dbms_output.put_line('+'); + end if; + +end verify_init_parameter; +/ +show errors; + + +prompt +prompt +prompt ++ +prompt ++ Notifications ++ +prompt ++ +prompt + +set serveroutput on size 50000 +declare + -- Change the variable below to FALSE if you just want the warnings and errors, not the advice + verbose boolean := TRUE; + -- By default any errors in dba_apply_error will result in output + apply_error_threshold number := 0; + -- By default a streams pool usage above 95% will result in output + streams_pool_usage_threshold number := 95; + -- The total number of registered archive logs to have before reporting an error + registered_logs_threshold number := 1000; + -- The total number of days old the oldest archived log should be before reporting an error + registered_age_threshold number := 60; -- days + + row_count number; + days_old number; + failed boolean; + streams_pool_usage number; + streams_pool_size varchar2(512); + + cursor apply_error is select distinct apply_name from dba_apply_error; + cursor aborted_apply is + select apply_name, error_number, error_message from dba_apply where status='ABORTED'; + cursor aborted_capture is + select capture_name, error_number, error_message from dba_capture where status='ABORTED'; + cursor aborted_prop is + select propagation_name, last_error_date, last_error_msg from dba_propagation, dba_queue_schedules + where schema = source_queue_owner and qname = source_queue_name and destination = destination_dblink + and schedule_disabled = 'Y' and message_delivery_mode = 'BUFFERED'; + cursor disabled_apply is select apply_name from dba_apply where status='DISABLED'; + cursor disabled_capture is select capture_name from dba_capture where status='DISABLED'; + cursor unattached_capture is select capture_name from gv$streams_capture where state='WAITING FOR INACTIVE DEQUEUERS'; + cursor classic_capture is select capture_name from dba_capture where capture_name like 'OGG%$%' and purpose='Streams'; +-- check if state_changed_time is older than 3 minutes (approx .00211 * 86400) + cursor old_state_time is select capture_name,state,state_changed_time,to_char( (SYSDATE- state_changed_time)*1440,'99990.99') mins from gv$streams_capture where (SYSDATE - state_changed_time ) >.00211; + + cursor ckpt_retention_time is select capture_name, + DECODE(checkpoint_retention_time,60,'WARNING: Checkpoint Retention time is set too high (60 days) for capture ', + 'INFO: Checkpoint Retention time set to '||checkpoint_retention_time||' days ') msg + from dba_capture where purpose != 'GoldenGate Capture'; + + + +begin + -- Check for aborted capture processes + for rec in aborted_capture loop + dbms_output.put_line('+ ERROR: Capture ''' || rec.capture_name || ''' has aborted with message ' || + rec.error_message); + end loop; + + dbms_output.put_line('+'); + + -- Check for aborted apply processes + for rec in aborted_apply loop + dbms_output.put_line('+ ERROR: Apply ''' || rec.apply_name || ''' has aborted with message ' || + rec.error_message); + if verbose then + -- Try to give some suggestions + -- TODO: include other errors, suggest how to recover + if rec.error_number = 26714 then + dbms_output.put_line('+ This apply aborted because a non-fatal user error has occurred and the ''disable_on_error'' parameter is ''Y''.'); + dbms_output.put_line('+ Please resolve the errors and restart the apply. Setting the ''disable_on_error'' parameter to ''N'' will prevent'); + dbms_output.put_line('+ apply from aborting on user errors in the future. Note the errors should still be resolved though.'); + dbms_output.put_line('+'); + elsif rec.error_number = 26688 then + dbms_output.put_line('+ This apply aborted because a column value in a particular change record belonging to a key was not found. '); + dbms_output.put_line('+ For more information, search the trace files for ''26688'' and view the relevant trace file.'); + dbms_output.put_line('+'); + end if; + end if; + end loop; + + dbms_output.put_line('+'); + + -- Check for apply errors in the error queue + for rec in apply_error loop + select count(*) into row_count from dba_apply_error where rec.apply_name = apply_name; + if row_count > apply_error_threshold then + dbms_output.put_line('+ ERROR: Apply ''' || rec.apply_name || ''' has placed ' || + row_count || ' transactions in the error queue! Please check the dba_apply_error view.'); + end if; + end loop; + + dbms_output.put_line('+'); + + -- Check for aborted propagation + for rec in aborted_prop loop + dbms_output.put_line('+ ERROR: Propagation ''' || rec.propagation_name + || ''' has aborted with most recent error message:'); + dbms_output.put_line('+ ''' || rec.last_error_msg || ''''); + dbms_output.put_line('+'); + end loop; + + -- Check for disabled capture processes + for rec in disabled_capture loop + dbms_output.put_line('+ WARNING: Capture ''' || rec.capture_name || ''' is disabled'); + end loop; + + dbms_output.put_line('+'); + + -- Check for disabled apply processes + for rec in disabled_apply loop + dbms_output.put_line('+ WARNING: Apply ''' || rec.apply_name || ''' is disabled'); + end loop; + + dbms_output.put_line('+'); + + -- Check for classic capture processes + for rec in classic_capture loop + dbms_output.put_line('+ WARNING: Capture ''' || rec.capture_name || ''' is Oracle GoldenGate classic capture with LOGRETENTION enabled'); + end loop; + dbms_output.put_line('+'); + +--- capture is started but extract is not attached + for rec in unattached_capture loop + dbms_output.put_line('+ ERROR: Capture '''||rec.capture_name||''' is not attached to client. State is WAITING FOR INACTIVE DEQUEUERS'); + dbms_output.put_line('+ Start the XStream Outbound Server client application'); + dbms_output.put_line('+'); + end loop; + dbms_output.put_line('+'); + + --- capture state has not changed for at least 3 minutes + for rec in old_state_time loop + dbms_output.put_line('+ WARNING: Capture State for '||rec.capture_name||' has not changed for over '|| rec.mins||' minutes.'); + dbms_output.put_line('+ Last Capture state change timestamp is '||rec.state_changed_time||' State is '||rec.state); + dbms_output.put_line('+ '); + end loop; + + + -- Check for too many registered archive logs + begin + failed := FALSE; + select count(*) into row_count from dba_registered_archived_log where purgeable = 'NO'; + select (sysdate - min(modified_time)) into days_old from dba_registered_archived_log where purgeable = 'NO'; + if row_count > registered_logs_threshold then + failed := TRUE; + dbms_output.put_line('+ WARNING: ' || row_count || ' archived logs registered.'); + end if; + if days_old > registered_age_threshold then + failed := TRUE; + dbms_output.put_line('+ WARNING: The oldest archived log is ' || round(days_old) || ' days old!'); + end if; + select count(*) into row_count from dba_registered_archived_log where purgeable = 'YES'; + if row_count > registered_logs_threshold/2 then + dbms_output.put_line('+ WARNING: There are '|| row_count ||' archived logs ready to be purged from disk.'); + dbms_output.put_line('+ Use the following select to identify unneeded logfiles:'); + dbms_output.put_line('+ select name from dba_registered_archived_log where purgeable = "YES" '); + end if; + + if failed then + dbms_output.put_line('+ A restarting Capture process must mine through each registered archive log.'); + dbms_output.put_line('+ To speedup Capture restart, reduce the amount of disk space taken by the archived'); + dbms_output.put_line('+ logs, and reduce Capture metadata, consider moving the first_scn automatically by '); + dbms_output.put_line('+ altering the checkpoint_retention_time capture parameter to a lower value '); + dbms_output.put_line('+ (See the Documentation for more information). '); + dbms_output.put_line('+ Note that once the first scn is increased, Capture will no longer be able to mine before'); + dbms_output.put_line('+ this new scn value.'); + dbms_output.put_line('+ Successive moves of the first_scn will remove unneeded registered archive'); + dbms_output.put_line('+ logs only if the files have been removed from disk'); + end if; + end; +end; +/ +prompt +prompt ++ +prompt ++ SYS Checks +prompt ++ +prompt +declare + -- Change the variable below to FALSE if you just want the warnings and errors, not the advice + verbose boolean := TRUE; + -- By default a streams pool usage above 95% will result in output + streams_pool_usage_threshold number := 95; + + row_count number; + days_old number; + failed boolean; + streams_pool_usage number; + streams_pool_size varchar2(512); + + cursor unrecovered_queue is select queue_schema,queue_name from x$buffered_queues where flags=1; + +begin + -- Check high streams pool usage + begin + select FRUSED_KWQBPMT into streams_pool_usage from x$kwqbpmt; + select value into streams_pool_size from v$parameter where name = 'streams_pool_size'; + if streams_pool_usage > streams_pool_usage_threshold then + dbms_output.put_line('+ WARNING: Streams pool usage for this instance is ' || streams_pool_usage || + '% of ' || streams_pool_size || ' bytes!'); + dbms_output.put_line('+ If this system is processing a typical workload, and no ' || + 'other errors exist, consider increasing the streams pool size.'); + end if; + exception when others then null; + end; + + + dbms_output.put_line('+'); + +-- Check unrecovered queues + + for rec in unrecovered_queue loop + dbms_output.put_line('+ ERROR: Queue ''' || rec.queue_schema || '.'||rec.queue_name||' has not been recovered normally ' ); + dbms_output.put_line('+ Force recovery by altering the queue ownership to another instance. '); + dbms_output.put_line('+ Use the DBMS_AQADM.ALTER_QUEUE_TABLE procedure to specify a different instance.'); + end loop; + + dbms_output.put_line('+'); + +end; +/ + + +prompt +prompt ++ +prompt ++ init.ora checks ++ +prompt ++ +declare + -- Change the variable below to FALSE if you just want the warnings and errors, not the advice + verbose boolean := TRUE; + row_count number; + num_downstream_cap number; + capture_procs number; + apply_procs number; + newline varchar2(1) := ' +'; +begin + -- Error checks first + verify_init_parameter('global_names', 'TRUE', verbose, is_error=>FALSE); + + verify_init_parameter('open_links', '4', verbose, at_least=> TRUE, is_error=>TRUE, alert_if_not_found=>FALSE); + -- Get minimum number of parallel_max_servers to set + + -- Do downstream capture checks + select count(*) into num_downstream_cap from dba_capture where capture_type = 'DOWNSTREAM'; + if num_downstream_cap > 0 then + -- We have a downstream capture, so do specific checks + verify_init_parameter('remote_archive_enable', 'TRUE', verbose, is_error=>TRUE); + end if; + + -- Then warnings + + verify_init_parameter('compatible', '12.', verbose, + '+ To use the new features introduced in Oracle Database 12g Release 1, '|| + 'this parameter must be set to a value greater than ''12.''', + use_like => TRUE); + + +-- explictly check if aq_tm_processes has been manually set to 0. If so, raise error. + declare + mycheck number; + begin + select 1 into mycheck from v$parameter where name = 'aq_tm_processes' and value = '0' + and (ismodified <> 'FALSE' OR isdefault='FALSE'); + if mycheck = 1 then + dbms_output.put_line('+ ERROR: The parameter ''aq_tm_processes'' should not be explicitly set to 0!'); + dbms_output.put_line('+ Queue monitoring is disabled for all queues.'); + dbms_output.put_line('+ To resolve this problem, set the value to 1 using: ALTER SYSTEM SET AQ_TM_PROCESSES=1; '); + end if; + exception when no_data_found then null; + end; + +-- explictly check if aq_tm_processes has been manually set to 10. If so, raise error. + declare + mycheck number; + begin + select 1 into mycheck from v$parameter where name = 'aq_tm_processes' and isdefault = 'FALSE' + and value = '10'; + if mycheck = 1 then + dbms_output.put_line('+ ERROR: The parameter ''aq_tm_processes'' should not be explicitly set to 10!'); + dbms_output.put_line('+ With this setting, queue monitoring is disabled for buffered queues.'); + dbms_output.put_line('+ To resolve this problem, set the value to 1 using: ALTER SYSTEM SET AQ_TM_PROCESSES=1; '); + end if; + exception when no_data_found then null; + end; + + verify_init_parameter('streams_pool_size', '0', TRUE, + '+ If this parameter is 0 and sga_target is non-zero, then autotuning of the streams pool is implied.'||newline|| + '+ If the sga_target parameter is set to 0 and streams_pool_size is 0,'|| newline|| + '+ 10% of the shared pool will be used for Streams.' || newline || + '+ If sga_target is 0, the minimum recommendation for streams_pool_size is 200M.'|| newline|| + '+ Note you must bounce the database if changing the ', + '+ value from zero to a nonzero value. But if simply increasing this' || newline || + '+ value from an already nonzero value, the database need not be bounced.', + at_least=> TRUE); +end; +/ + +prompt +prompt ++ +prompt ++ Configuration checks ++ +prompt ++ +declare + current_value varchar2(4000); + + cursor propagation_latency is + select propagation_name, latency from dba_propagation, dba_queue_schedules + where schema = source_queue_owner and qname = source_queue_name and destination = destination_dblink + and latency >= 60 and message_delivery_mode = 'BUFFERED'; + cursor multiqueues is + select c.capture_name capture_name, a.apply_name apply_name, + c.queue_owner queue_owner, c.queue_name queue_name + from dba_capture c, dba_apply a + where c.queue_name = a.queue_name and c.queue_owner = a.queue_owner + and c.capture_type != 'DOWNSTREAM' and a.purpose ='STREAMS APPLY' and c.capture_name not like 'CDC$%'; + + cursor nonlogged_tables is + select table_owner owner,table_name name from dba_capture_prepared_tables t + where table_owner in + (select distinct(table_owner) from dba_capture_prepared_tables where + supplemental_log_data_pk='NO' and supplemental_log_data_fk='NO' and + supplemental_log_data_ui='NO' and + supplemental_log_data_all='NO' + minus + select schema_name from dba_capture_prepared_schemas) + and not exists + (select 'X' from dba_log_groups l where t.table_owner = l.owner and t.table_name = l.table_name + UNION + select 'x' from dba_capture_prepared_database); + + + cursor overlapping_rules is + select a.streams_name sname, a.streams_type stype, + a.rule_set_owner rule_set_owner, a.rule_set_name rule_set_name, + a.rule_owner owner1, a.rule_name name1, a.streams_rule_type type1, + b.rule_owner owner2, b.rule_name name2, b.streams_rule_type type2 + from dba_streams_rules a, dba_streams_rules b + where a.rule_set_owner = b.rule_set_owner + and a.rule_set_name = b.rule_set_name + and a.streams_name = b.streams_name and a.streams_type = b.streams_type + and a.rule_type = b.rule_type + and (a.subsetting_operation is null or b.subsetting_operation is null) + and (a.rule_owner != b.rule_owner or a.rule_name != b.rule_name) + and ((a.streams_rule_type = 'GLOBAL' and b.streams_rule_type + in ('SCHEMA', 'TABLE') and a.schema_name = b.schema_name) + or (a.streams_rule_type = 'SCHEMA' and b.streams_rule_type = 'TABLE' + and a.schema_name = b.schema_name) + or (a.streams_rule_type = 'TABLE' and b.streams_rule_type = 'TABLE' + and a.schema_name = b.schema_name and a.object_name = b.object_name + and a.rule_name < b.rule_name) + or (a.streams_rule_type = 'SCHEMA' and b.streams_rule_type = 'SCHEMA' + and a.schema_name = b.schema_name and a.rule_name < b.rule_name) + or (a.streams_rule_type = 'GLOBAL' and b.streams_rule_type = 'GLOBAL' + and a.rule_name < b.rule_name)) + order by a.rule_name; + + cursor spilled_apply is + select a.apply_name + from dba_apply_parameters p, dba_apply a, gv$buffered_queues q + where a.queue_owner = q.queue_schema and a.queue_name = q.queue_name + and a.apply_name = p.apply_name and p.parameter = 'PARALLELISM' + and p.value > 1 and (q.cspill_msgs/DECODE(q.cnum_msgs, 0, 1, q.cnum_msgs) * 100) > 25; + + cursor bad_source_db is + select rule_owner||'.'||rule_name Rule_name, source_database from dba_streams_rules where source_database not in + (select global_name from system.logmnrc_dbname_uid_map); + + + cursor qtab_too_long is + select queue_table name, length(queue_table) len from dba_queues q , dba_apply a where + length(queue_table)>24 and q.owner=a.queue_owner and q.name=a.queue_name; + + cursor reginfo_invalid is + select comp_id,status from dba_registry where comp_id in ('CATALOG','CATPROC') and status <> 'VALID'; + + cursor version_diff is + select i.version inst_version,r.version reg_version from v$instance i, dba_registry r where + r.comp_id in ('CATALOG','CATPROC') and i.version <> r.version; + + + row_count number; + capture_count number; + local_capture_count number := 0; + verbose boolean := TRUE; + overlap_rules boolean := FALSE; + latency number; +begin + + -- Check that propagation latency is not 60 + for rec in propagation_latency loop + dbms_output.put_line('+ WARNING: the Propagation process ''' || rec.propagation_name || + ''' has latency ' || rec.latency || ', it should be 5 or less!'); + if verbose then + dbms_output.put_line('+ Set the latency by calling ' || + 'dbms_aqadm.alter_schedule(queue_name,destination,latency=>5)'); + end if; + dbms_output.put_line('+'); + end loop; + + -- Check source database names on rules + for rec in bad_source_db loop + dbms_output.put_line('+ ERROR: The rule '||rec.rule_name||' specifies an unknown source database: '||rec.source_database||'.'); + dbms_output.put_line('+ Make sure that the associated capture process has completed processing through the initial dictionary load.'); + + end loop; + + -- Check queue table name length + for rec in qtab_too_long loop + dbms_output.put_line('+ ERROR: The queue table name '''||rec.name||''' has length of '||rec.len|| + ' bytes, it should be 24 bytes or less!'); + dbms_output.put_line('+'); + end loop; + + -- Check Registry Info STATUS + for rec in reginfo_invalid loop + dbms_output.put_line('+ ERROR: The DBA_REGISTRY status information for component '''||rec.comp_id|| + ''' requires attention. Status is '||rec.status|| + '. Please recompile the component '); + dbms_output.put_line('+'); + end loop; + + -- Check consistent Instance and Registry Info + for rec in version_diff loop + dbms_output.put_line('+ ERROR: The ORACLE_HOME software is '''||rec.inst_version||''' but the database catalog is '||rec.reg_version|| + '. CATPATCH must be run successfully to complete the upgrade'); + dbms_output.put_line('+'); + end loop; + + + -- Separate queues for capture and apply + for rec in multiqueues loop + dbms_output.put_line('+ WARNING: the Capture process ''' || rec.capture_name || + ''' and Apply process ''' || rec.apply_name || ''''); + dbms_output.put_line('+ share the same queue ''' || rec.queue_owner || '.' + || rec.queue_name || '''. If the Apply process is receiving changes'); + dbms_output.put_line('+ from a remote site, a separate queue should be created for' + || ' the Apply process.'); + end loop; + + dbms_output.put_line('+'); + + -- Make sure it is in archivelog mode + select count(*) into capture_count from dba_capture where capture_type != 'DOWNSTREAM'; + select count(*) into row_count from v$database where log_mode = 'NOARCHIVELOG'; + if row_count > 0 and capture_count > 0 then + dbms_output.put_line('+ ERROR: ARCHIVELOG mode must be enabled for this database.'); + if verbose then + dbms_output.put_line('+ For a Streams Capture process to function correctly, it' + || ' must be able to read the archive logs.'); + dbms_output.put_line('+ Please refer to the documentation to restart the database' + || ' in ARCHIVELOG format.'); + dbms_output.put_line('+'); + end if; + end if; + + -- Basic supplemental logging checks + -- #1. If minimal supplemental logging is not enabled, this is an error + select count(*) into row_count from v$database where SUPPLEMENTAL_LOG_DATA_MIN = 'NO'; + select count(*) into local_capture_count from dba_capture where capture_type = 'LOCAL'; + if row_count > 0 and local_capture_count > 0 then + + dbms_output.put_line('+ ERROR: Minimal supplemental logging not enabled.'); + if verbose then + dbms_output.put_line('+ For a Streams Capture process to function correctly, at' + || ' least minimal supplemental logging should be enabled.'); + dbms_output.put_line('+ Execute ''ALTER DATABASE ADD SUPPLEMENTAL LOG DATA''' + || ' to fix this issue. Note you may need to specify further'); + dbms_output.put_line('+ levels of supplemental logging, see the documentation' + || ' for more details.'); + dbms_output.put_line('+'); + end if; + end if; + + -- #2. If Primary key database level logging not enabled, there better be some + -- log data per prepared table + select count(*) into row_count from v$database where SUPPLEMENTAL_LOG_DATA_PK = 'NO'; + if row_count > 0 and local_capture_count > 0 then + for rec in nonlogged_tables loop + dbms_output.put_line('+ ERROR: No supplemental logging specified for table ''' + || rec.owner || '.' || rec.name || '''.'); + if verbose then + dbms_output.put_line('+ In order for Streams to work properly, it must' || + ' have key information supplementally logged'); + dbms_output.put_line('+ for each table whose changes are being captured. ' || + 'This system does not have database level primary key information '); + dbms_output.put_line('logged, thus for each interested table manual logging ' + || 'must be specified. Please see the documentation for more info.'); + dbms_output.put_line('+'); + end if; + end loop; + end if; + + -- Rules checks + -- TODO: intergrate existing rules checks found above + for rec in overlapping_rules loop + overlap_rules := TRUE; + dbms_output.put_line('+ WARNING: The rule ''' || rec.owner1 || '''.''' || rec.name1 + || ''' and ''' || rec.owner2 || '''.''' || rec.name2 + || ''' from rule set ''' || rec.rule_set_owner || '''.''' + || rec.rule_set_name || ''' overlap.'); + end loop; + + if overlap_rules and verbose then + dbms_output.put_line('+ Overlapping rules are a problem especially when rule-based transformations exist.'); + dbms_output.put_line('+ Streams makes no guarantees of which rule in a rule set will evaluate to TRUE,'); + dbms_output.put_line('+ thus overlapping rules will cause inconsistent behavior, and should be avoided.'); + end if; + dbms_output.put_line('+'); + + -- + -- Suggestions. These might help speedup performance. + -- + + if verbose then + -- Propagation has a rule set + select count(*) into row_count from dba_propagation where rule_set_owner is not null + and rule_set_name is not null; + if row_count > 0 then + dbms_output.put_line('+ SUGGESTION: One or more propagation processes contain rule sets.'); + dbms_output.put_line('+ If a Propagation process will unconditionally forward all incoming'); + dbms_output.put_line('+ messages to its destination queue, and no rule-based transformations are'); + dbms_output.put_line('+ performed by the Propagation process, you should consider removing'); + dbms_output.put_line('+ the rule set for the Propagation process via dbms_propagation_adm.alter_propagation.'); + dbms_output.put_line('+ This will improve Propagation performance.'); + dbms_output.put_line('+'); + end if; + + -- Apply has a rule set + select count(*) into row_count from dba_apply where rule_set_owner is not null + and rule_set_name is not null; + if row_count > 0 then + dbms_output.put_line('+ SUGGESTION: One or more apply processes contain rule sets.'); + dbms_output.put_line('+ If an Apply process will unconditionally apply all incoming'); + dbms_output.put_line('+ messages and no rule-based transformations or apply enqueues are '); + dbms_output.put_line('+ performed by the Apply process, you should consider removing '); + dbms_output.put_line('+ the rule set for via dbms_apply_adm.alter_apply.'); + dbms_output.put_line('+ This will improve Apply performance.'); + dbms_output.put_line('+'); + end if; + + -- Apply has parallelism 1 + select count(*) into row_count from dba_apply_parameters where parameter='PARALLELISM' + and to_number(value) = 1; + if row_count > 0 then + dbms_output.put_line('+ SUGGESTION: One or more Apply processes have parallelism 1'); + dbms_output.put_line('+ If your workload consists of many independent transactions'); + dbms_output.put_line('+ and the apply is the bottleneck of your system, '); + dbms_output.put_line('+ Review the following:'); + dbms_output.put_line('+ If the PURPOSE column of the apply is "Streams",'); + dbms_output.put_line('+ Increase the parallelism of the apply process to a multiple of 4 via dbms_apply_adm.set_parameter.'); + dbms_output.put_line('+'); + end if; + + -- If apply parallelism > 1, and spills exist in queue, and _txn_buffer_size + -- hasn't been set, suggest reducing it to 10 or less. + -- Please note: _txn_buffer_size has no meaning in 11.2.0.2 and above + -- Please note: there is no queue spill in CCA mode. + + for rec in spilled_apply loop + begin + select value into current_value from dba_apply_parameters where parameter='_TXN_BUFFER_SIZE' + and apply_name = rec.apply_name; + exception when no_data_found then + -- default parameter, output warning + dbms_output.put_line('+ SUGGESTION: Apply ''' || rec.apply_name || ''' has parallelism > 1 and queue spilled data.'); + + dbms_output.put_line('+'); + end; + + end loop; + + -- Both transformation function and dml handler defined for apply + select count(*) into row_count + from dba_apply a, dba_streams_rules r, dba_streams_transform_function t, + dba_apply_dml_handlers d + where a.rule_set_owner = r.rule_set_owner and a.rule_set_name = r.rule_set_name + and r.rule_owner = t.rule_owner and r.rule_name = t.rule_name + and t.transform_function_name is not null + and (a.apply_name = d.apply_name or d.apply_name is null) + and (r.schema_name = d.object_owner or r.schema_name is null) + and (r.object_name = d.object_name or r.object_name is null) + and r.subsetting_operation is null and d.error_handler = 'N' + and d.user_procedure is not null; + + if row_count > 0 then + dbms_output.put_line('+ SUGGESTION: One or more Apply processes have both DML handlers and transformation'); + dbms_output.put_line('+ functions defined. Both DML handlers and transformations involve expensive'); + dbms_output.put_line('+ PL/SQL operations. If you notice slow Apply performance, consider performing'); + dbms_output.put_line('+ all PL/SQL operations in either a transformation function or dml handler.'); + dbms_output.put_line('+'); + end if; + + -- Database-level supplemental logging defined but only a few tables replicated + select count(*) into row_count from v$database where supplemental_log_data_pk = 'YES'; + select count(*) into capture_count from dba_capture_prepared_tables; + if row_count > 0 and capture_count < 10 and local_capture_count > 0 then + dbms_output.put_line('+ SUGGESTION: Database-level supplemental logging enabled but only a few tables'); + dbms_output.put_line('+ prepared for capture. Database-level supplemental logging could write more'); + dbms_output.put_line('+ information to the redo logs for every update statement in the system.'); + dbms_output.put_line('+ If the number of tables you are interested in is small, you might consider'); + dbms_output.put_line('+ specifying supplemental logging of keys and columns on a per-table basis.'); + dbms_output.put_line('+ See the documentation for more information on per-table supplemental logging.'); + dbms_output.put_line('+'); + end if; + end if; +end; +/ + +prompt +prompt ++ +prompt ++ Performance Checks ++ +prompt ++ +prompt ++ Note: Performance only checked for enabled Streams processes! +prompt ++ Aborted and disabled processes will not report performance warnings! +prompt +declare + verbose boolean := TRUE; + + -- how far back capture must be before we generate a warning + capture_latency_threshold number := 300; -- seconds + -- how far back the apply reader must be before we generate a warning + applyrdr_latency_threshold number := 600; -- seconds + -- how far back the apply coordinator's LWM must be before we generate a warning + applylwm_latency_threshold number := 1200; -- seconds + -- how many messages should be unconsumed before generating a warning + unconsumed_msgs_threshold number := 300000; + -- percentage of messages spilled before generating a warning + spill_ratio_threshold number := 25; + -- how long queue can be up before signalling a warning + spill_startup_threshold number := 3600; -- seconds + -- how long logminer can spend spilling before generating a warning + logminer_spill_threshold number := 30000000; -- microseconds + + complex_rules boolean := FALSE; + slow_clients boolean := FALSE; + + cursor capture_latency (threshold NUMBER) is + select capture_name, 86400 *(available_message_create_time - capture_message_create_time) latency + from gv$streams_capture + where 86400 *(available_message_create_time - capture_message_create_time) > threshold; + + cursor apply_reader_latency (threshold NUMBER) is + select apply_name, 86400 *(dequeue_time - dequeued_message_create_time) latency + from gv$streams_apply_reader + where 86400 *(dequeue_time - dequeued_message_create_time) > threshold; + + cursor apply_lwm_latency (threshold NUMBER) is + select r.apply_name, 86400 *(r.dequeue_time - c.lwm_message_create_time) latency + from gv$streams_apply_reader r, gv$streams_apply_coordinator c + where r.apply# = c.apply# and r.apply_name = c.apply_name + and 86400 *(r.dequeue_time - c.lwm_message_create_time) > threshold; + + cursor queue_stats is + select queue_schema, queue_name, num_msgs, spill_msgs, cnum_msgs, cspill_msgs, + (cspill_msgs/DECODE(cnum_msgs, 0, 1, cnum_msgs) * 100) spill_ratio, 86400 *(sysdate - startup_time) alive + from gv$buffered_queues; + + cursor logminer_spill_time (threshold NUMBER) is + select c.capture_name, l.name, l.value from gv$streams_capture c, gv$logmnr_stats l + where c.logminer_id = l.session_id + and name = 'microsecs spent in pageout' and value > threshold; + + cursor complex_rule_sets_cap is + select capture_name, owner, name from gv$rule_set r, dba_capture c + where c.rule_set_owner = r.owner and c.rule_set_name = r.name + and r.sql_executions > 0; + + cursor complex_rule_sets_prop is + select propagation_name, owner, name from gv$rule_set r, dba_propagation p + where p.rule_set_owner = r.owner and p.rule_set_name = r.name + and r.sql_executions > 0; + + cursor complex_rule_sets_apply is + select apply_name, owner, name from gv$rule_set r, dba_apply a + where a.rule_set_owner = r.owner and a.rule_set_name = r.name + and r.sql_executions > 0; + + cursor client_slow is + select c.capture_name, c.state,l.available_txn-l.delivered_txn difference from + gv$goldengate_capture c, + gv$logmnr_session l + where c.capture_name = l.session_name + and c.state in (NULL, 'WAITING FOR CLIENT REQUESTS', 'WAITING FOR TRANSACTION;WAITING FOR CLIENT'); + +begin + + for rec in client_slow loop + dbms_output.put_line('+ WARNING: Client is slow to request changes ('||rec.difference||' chunks available) from capture '||rec.capture_name); + dbms_output.put_line('+ Investigate why the client application is slow'); + slow_clients := TRUE; + end loop; + if slow_clients then + dbms_output.put_line('+ The WAITING FOR CLIENT REQUESTS state is an indicator to investigate the client application rather than the capture server when there are chunks available from capture.'); + dbms_output.put_line('+'); + end if; + + + for rec in capture_latency(capture_latency_threshold) loop + dbms_output.put_line('+ WARNING: The latency of the Capture process ''' || rec.capture_name + || ''' is ' || to_char(rec.latency, '99999999') || ' seconds!'); + if verbose then + dbms_output.put_line('+ This measurement shows how far behind the Capture process is in processing the'); + dbms_output.put_line('+ redo log. This may be due to slowdown in any of the common Streams components:'); + dbms_output.put_line('+ Capture, Propagation, and/or Apply. If this latency is chronic and not due'); + dbms_output.put_line('+ to errors, consider the above suggestions for improving Capture, Propagation,'); + dbms_output.put_line('+ and Apply performance.'); + dbms_output.put_line('+'); + end if; + end loop; + + for rec in apply_reader_latency(applyrdr_latency_threshold) loop + dbms_output.put_line('+ WARNING: The latency of the reader process for Apply ''' || rec.apply_name + || ''' is ' || to_char(rec.latency, '99999999') || ' seconds!'); + if verbose then + dbms_output.put_line('+ This measurement shows how far behind the Apply reader is from when the message was'); + dbms_output.put_line('+ created, which in the normal case is by a Capture process. In other words, '); + dbms_output.put_line('+ the time between message creation and message dequeue by the Apply reader is too large.'); + dbms_output.put_line('+ If this latency is chronic and not due to errors, consider the above suggestions '); + dbms_output.put_line('+ for improving Capture and Propagation performance.'); + dbms_output.put_line('+'); + end if; + end loop; + + for rec in apply_lwm_latency(applylwm_latency_threshold) loop + dbms_output.put_line('+ WARNING: The latency of the coordinator process for Apply ''' || rec.apply_name + || ''' is ' || to_char(rec.latency, '99999999') || ' seconds!'); + if verbose then + dbms_output.put_line('+ This measurement shows how far behind the low-watermark of the Apply process is'); + dbms_output.put_line('+ from when the message was first created, which in the normal case is by a Capture process.'); + dbms_output.put_line('+ The low-watermark is the most recent transaction (in terms of SCN) that has been'); + dbms_output.put_line('+ successfully applied, for which all previous transactions have also been applied.'); + dbms_output.put_line('+ A high latency can be due to long-running tranactions, many dependent transactions,'); + dbms_output.put_line('+ or slow Capture, Propagation, or Apply processes.'); + dbms_output.put_line('+'); + end if; + end loop; + + -- check queue performance + for rec in queue_stats loop + if rec.num_msgs > unconsumed_msgs_threshold then + dbms_output.put_line('+ WARNING: There are ' || rec.num_msgs || ' unconsumed messages in queue ''' || rec.queue_schema || + '''.''' || rec.queue_name || '''!'); + dbms_output.put_line('+'); + end if; + + if rec.spill_ratio > spill_ratio_threshold and rec.alive > spill_startup_threshold then + dbms_output.put_line('+ WARNING: The queue ''' || rec.queue_schema || '''.''' || rec.queue_name || ''' has spilled ' || + round(rec.spill_ratio) || '% of its messages!'); + if verbose then + dbms_output.put_line('+ Since the queue has been started, some large ratio of messages '); + dbms_output.put_line('+ have been spilled to disk. If no errors have occurred which might '); + dbms_output.put_line('+ have caused the spills in the past (such as an aborted Apply or'); + dbms_output.put_line('+ Propagation process), and if you do not have long running transactions'); + dbms_output.put_line('+ in your workload, consider increasing the size of the Streams Pool'); + dbms_output.put_line('+ or increasing Apply parallelism.'); + end if; + dbms_output.put_line('+'); + end if; + +/* + if rec.cspill_msgs > cum_spilled_msgs_threshold then + dbms_output.put_line('+ WARNING: There are ' || rec.cspill_msgs || + ' cumulatively spilled messages in queue ''' || rec.queue_schema || + '''.''' || rec.queue_name || '''!'); + if verbose then + dbms_output.put_line('+ Since the queue has been started, some large number of messages '); + dbms_output.put_line('+ have been spilled to disk. If no errors have occurred which might '); + dbms_output.put_line('+ have caused the spills in the past (such as an aborted Apply or'); + dbms_output.put_line('+ Propagation process), and if you do not have long running transactions'); + dbms_output.put_line('+ in your workload, consider increasing the size of the Streams Pool'); + end if; + dbms_output.put_line('+'); + end if; +*/ + end loop; + + -- logminer spill time + for rec in logminer_spill_time(logminer_spill_threshold) loop + dbms_output.put_line('+ WARNING: Excessive spill time for Capture process ''' + || rec.capture_name || '''!'); + if verbose then + dbms_output.put_line('+ Spill time implies that the Logminer component used by Capture '); + dbms_output.put_line('+ does not have enough memory allocated to it. This condition '); + dbms_output.put_line('+ occurs when the system workload contains many DDLs and/or LOB'); + dbms_output.put_line('+ transactions. Consider increasing the size of memory allocated to the'); + dbms_output.put_line('+ Capture process by increasing the ''_SGA_SIZE'' Capture parameter.'); + end if; + dbms_output.put_line('+'); + end loop; + + -- sql executions in rule sets + for rec in complex_rule_sets_cap loop + complex_rules := TRUE; + dbms_output.put_line('+ WARNING: Complex rules exist for Capture process ''' + || rec.capture_name || ' and rule set ''' + || rec.owner || '''.''' || rec.name || '''!'); + end loop; + + for rec in complex_rule_sets_prop loop + complex_rules := TRUE; + dbms_output.put_line('+ WARNING: Complex rules exist for Propagation process ''' + || rec.propagation_name || ' and rule set ''' + || rec.owner || '''.''' || rec.name || '''!'); + end loop; + + for rec in complex_rule_sets_apply loop + complex_rules := TRUE; + dbms_output.put_line('+ WARNING: Complex rules exist for Apply process ''' + || rec.apply_name || ' and rule set ''' + || rec.owner || '''.''' || rec.name || '''!'); + end loop; + + if verbose and complex_rules then + dbms_output.put_line('+ Complex rules require SQL evaluations per message by a Streams '); + dbms_output.put_line('+ process. This slows down performance and should be avoided '); + dbms_output.put_line('+ if possible. Examine the rules in the rule set (for example'); + dbms_output.put_line('+ by looking at DBA_RULE_SET_RULES and DBA_RULES) and avoid uses'); + dbms_output.put_line('+ of the ''like'' operator and function/procedure calls in rule'); + dbms_output.put_line('+ conditions unless absolutely necessary.'); + end if; + dbms_output.put_line('+'); +end; +/ + + +set numf 9999999999999999999 +set pages 9999 +col apply_database_link HEAD 'Database Link|for Remote|Apply' format a15 +set feedback on + +prompt ============================================================================================ +prompt +prompt ++ DATABASE INFORMATION ++ +COL MIN_LOG FORMAT A7 +COL PK_LOG FORMAT A6 +COL UI_LOG FORMAT A6 +COL FK_LOG FORMAT A6 +COL ALL_LOG FORMAT A6 +COL FORCE_LOG FORMAT A10 +col archive_change# format 999999999999999999 +col archivelog_change# format 999999999999999999 +COL NAME HEADING 'Name' +col platform_name format a30 wrap +col current_scn format 99999999999999999 + +SELECT DBid,name,created, +SUPPLEMENTAL_LOG_DATA_MIN MIN_LOG,SUPPLEMENTAL_LOG_DATA_PK PK_LOG, +SUPPLEMENTAL_LOG_DATA_UI UI_LOG, +SUPPLEMENTAL_LOG_DATA_FK FK_LOG, +SUPPLEMENTAL_LOG_DATA_ALL ALL_LOG, + FORCE_LOGGING FORCE_LOG, +resetlogs_time,log_mode, archive_change#, +open_mode,database_role,archivelog_change# , current_scn, min_required_capture_change#, platform_id, platform_name from v$database; + + +prompt ============================================================================================ +prompt +prompt ++ INSTANCE INFORMATION ++ +col host format a20 wrap +col blocked heading 'Blocked?' format a8 +col shutdown_pending Heading 'Shutdown|Pending?' format a8 +col parallel Heading 'Parallel' format a8 +col archiver Heading 'Archiver' +col active_state Heading 'Active|State' +col instance heading 'Instance' +col name heading 'Name' +col host Heading 'Host' +col version heading 'Version' +col startup_time heading 'Startup|Time' +col status Heading 'Status' +col logins Heading 'Logins' +col instance_role Heading 'Instance|Role' + +select instance_number INSTANCE, instance_name NAME, HOST_NAME HOST, VERSION, +STARTUP_TIME, STATUS, PARALLEL, ARCHIVER, LOGINS, SHUTDOWN_PENDING, INSTANCE_ROLE, ACTIVE_STATE, BLOCKED from gv$instance; +prompt +prompt ============================================================================================ + +prompt +++ Current Database Incarnation +++ +prompt + +col incarnation# HEADING 'Current|Incarnation' format 9999999999999999 +col resetlogs_id HEADING 'ResetLogs|Id' format 9999999999999999 +col resetlogs_change# HEADING 'ResetLogs|Change Number' format 9999999999999999 + +Select Incarnation#, resetlogs_id,resetlogs_change# from v$database_incarnation where status = 'CURRENT'; + +prompt ============================================================================================ +prompt +prompt ++ REGISTRY INFORMATION ++ +col comp_id format a10 wrap Head 'Comp_ID' +col comp_name format a35 wrap Head 'Comp_Name' +col version format a10 wrap Head Version +col schema format a10 Head Schema +col modified Head Modified + +select comp_id, comp_name,version,status,modified,schema from DBA_REGISTRY; + +prompt +++ REGISTRY HISTORY +++ +prompt +select * from dba_registry_history; +prompt + +prompt ============================================================================================ +prompt +prompt ++ NLS DATABASE PARAMETERS ++ +col parameter format a30 wrap +col value format a30 wrap + +select * from NLS_DATABASE_PARAMETERS; + +prompt ============================================================================================ +prompt +prompt ++ GLOBAL NAME ++ + + +select global_name from global_name; + +prompt +prompt ============================================================================================ +prompt +prompt ++ Key Init.ORA parameters ++ +prompt +col name HEADING 'Parameter|Name' format a30 +col value HEADING 'Parameter|Value' format a15 +col description HEADING 'Description' format a60 word + +select name,value,description from v$parameter where name in + ('aq_tm_processes', 'archive_lag_target', + 'job_queue_processes','_job_queue_interval', + 'shared_pool_size', 'sga_max_size', + 'memory_max_target','memory_target', + 'sga_target','streams_pool_size', + 'global_names', 'compatible','log_parallelism', + 'logmnr_max_persistent_sessions', + 'processes', 'sessions' + ); + + + + + + +prompt +prompt ============================================================================================ +prompt +prompt ++ Streams Administrator ++ +column username heading 'Administrator|Name' +column local_privileges Heading 'Local|Privileges' format a10 +column access_from_remote Heading 'Remote|Access' format a10 + + +select * from dba_streams_administrator; + +prompt +prompt ============================================================================================ + +prompt +prompt ++ STREAMS QUEUES IN DATABASE ++ +prompt ========================================================================================== + +prompt +COLUMN OWNER HEADING 'Owner' FORMAT A10 +COLUMN NAME HEADING 'Queue Name' FORMAT A30 +COLUMN QUEUE_TABLE HEADING 'Queue Table' FORMAT A30 +COLUMN ENQUEUE_ENABLED HEADING 'Enqueue|Enabled' FORMAT A7 +COLUMN DEQUEUE_ENABLED HEADING 'Dequeue|Enabled' FORMAT A7 +COLUMN USER_COMMENT HEADING 'Comment' FORMAT A20 +COLUMN PRIMARY_INSTANCE HEADING 'Primary|Instance|Owner'FORMAT 999999 +column SECONDARY_INSTANCE HEADING 'Secondary|Instance|Owner' FORMAT 999999 +COLUMN OWNER_INSTANCE HEADING 'Owner|Instance' FORMAT 999999 +column NETWORK_NAME HEADING 'Network|Name' FORMAT A30 + +SELECT q.OWNER, q.NAME, t.QUEUE_TABLE, q.enqueue_enabled, + q.dequeue_enabled,t.primary_instance,t.secondary_instance, t.owner_instance,network_name, q.USER_COMMENT + FROM DBA_QUEUES q, DBA_QUEUE_TABLES t + WHERE t.OBJECT_TYPE = 'SYS.ANYDATA' AND + q.QUEUE_TABLE = t.QUEUE_TABLE AND + q.OWNER = t.OWNER + order by owner,queue_table,name; +prompt + +prompt +prompt +++ Queue Subscribers ++ +prompt + +column protocol HEADING 'Protocol' +column subscriber HEADING 'Subscriber' format a35 wrap +column name HEADING 'Queue|Name' format a35 wrap +column delivery_mode HEADING 'Delivery|Mode' format a23 +column queue_to_queue HEADING 'Queue to|Queue' format a5 +column protocol HEADING 'Protocol' +SELECT qs.owner||'.'||qs.queue_name name, qs.queue_table, + NVL2(qs.consumer_name,'CONSUMER: ','ADDRESS : ') || + NVL(qs.consumer_name,qs.address) Subscriber, + qs.delivery_mode,qs.queue_to_queue,qs.protocol +FROM dba_queue_subscribers qs, dba_queue_tables qt +WHERE qt.OBJECT_TYPE = 'SYS.ANYDATA' AND + qs.QUEUE_TABLE = qt.QUEUE_TABLE AND + qs.OWNER = qt.OWNER +ORDER BY qs.owner,qs.queue_name; + + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + +prompt ========================================================================================= +prompt +prompt ++ Minimum Archive Log Necessary to Restart Capture ++ +prompt Note: This query is valid for databases where the capture processes exist for the same source database. +prompt + +set serveroutput on +DECLARE + hScn number := 0; + lScn number := 0; + sScn number; + ascn number; + alog varchar2(1000); +begin + select min(start_scn), min(applied_scn) into sScn, ascn + from dba_capture; + + + DBMS_OUTPUT.ENABLE(2000); + + for cr in (select distinct(a.ckpt_scn) + from system.logmnr_restart_ckpt$ a + where a.ckpt_scn <= ascn and a.valid = 1 + and exists (select * from system.logmnr_log$ l + where a.ckpt_scn between l.first_change# and l.next_change#) + order by a.ckpt_scn desc) + loop + if (hScn = 0) then + hScn := cr.ckpt_scn; + else + lScn := cr.ckpt_scn; + exit; + end if; + end loop; + + if lScn = 0 then + lScn := sScn; + end if; + + dbms_output.put_line('Capture will restart from SCN ' || lScn ||' in the following file:'); + for cr in (select name, first_time + from DBA_REGISTERED_ARCHIVED_LOG + where lScn between first_scn and next_scn order by thread#) + loop + + dbms_output.put_line(cr.name||' ('||cr.first_time||')'); + + end loop; +end; +/ + + +prompt +prompt ++ Replication Bundle ++ +prompt +col name format A30 +col value$ format A30 HEADing 'Bundled Patch version' +select value$ from sys.props$ where name ='REPLICATION_BUNDLE'; +prompt + + +prompt ============================================================================================ + +prompt +prompt ++ CAPTURE PROCESSES IN DATABASE ++ +-- col start_scn format 9999999999999999 +-- col applied_scn format 9999999999999999 +col capture_name HEADING 'Capture|Name' format a30 wrap +col status HEADING 'Status' format a10 wrap + +col QUEUE HEADING 'Queue' format a25 wrap +col RSN HEADING 'Positive|Rule Set' format a25 wrap +col RSN2 HEADING 'Negative|Rule Set' format a25 wrap +col capture_type HEADING 'Capture|Type' format a10 wrap +col error_message HEADING 'Capture|Error Message' format a60 word +col logfile_assignment HEADING 'Logfile|Assignment' +col checkpoint_retention_time HEADING 'Days to |Retain|Checkpoints' +col Status_change_time HEADING 'Status|Timestamp' +col error_number HEADING 'Error|Number' +col version HEADING 'Version' +col purpose HEADING 'Purpose' + +SELECT capture_name, queue_owner||'.'||queue_name QUEUE, capture_type, purpose,status, +rule_set_owner||'.'||rule_set_name RSN, negative_rule_set_owner||'.'||negative_rule_set_name RSN2, +checkpoint_retention_time, +version, logfile_assignment,error_number, status_change_time, error_message +FROM DBA_CAPTURE order by capture_name; + + +prompt ++ CAPTURE PROCESS SOURCE INFORMATION ++ + +col QUEUE HEADING 'Queue' format a25 wrap +col RSN HEADING 'Positive|Rule Set' format a25 wrap +col RSN2 HEADING 'Negative|Rule Set' format a25 wrap +col capture_type HEADING 'Capture|Type' format a10 wrap +col source_database HEADING 'Source|Database' format a30 wrap +col first_scn HEADING 'First|SCN' +col start_scn HEADING 'Start|SCN' +col captured_scn HEADING 'Captured|SCN' +col applied_scn HEADING 'Applied|SCN' +col last_enqueued_scn HEADING 'Last|Enqueued|SCN' +col required_checkpoint_scn HEADING 'Required|Checkpoint|SCN' +col max_checkpoint_scn HEADING 'Maximum|Checkpoint|SCN' +col source_dbid HEADING 'Source|Database|ID' +col source_resetlogs_scn HEADING 'Source|ResetLogs|SCN' +col logminer_id HEADING 'Logminer|Session|ID' +col source_resetlogs_time HEADING 'Source|ResetLogs|Time' + + +SELECT capture_name, capture_type, source_database, + captured_scn, applied_scn, last_enqueued_scn, +required_checkpoint_scn, +max_checkpoint_scn, +first_scn, start_scn ||' ('||start_time||') ' start_scn, source_dbid, source_resetlogs_scn, +source_resetlogs_time, logminer_id +FROM DBA_CAPTURE order by capture_name; + +prompt Return to Summary + +prompt +prompt ++ Non-Default CAPTURE PROCESS PARAMETERS ++ +col CAPTURE_NAME HEADING 'Capture|Name' format a30 wrap +col parameter HEADING 'Parameter|Name' format a28 +col value HEADING 'Parameter|Value' format a20 +col set_by_user HEADING 'Usr|Set?' format a3 + +-- break on capture_name + +select * from dba_capture_parameters where set_by_user='YES' order by capture_name,PARAMETER; + +prompt Return to Summary +prompt ============================================================================================ +prompt +prompt ++ STREAMS CAPTURE RULES CONFIGURED WITH DBMS_STREAMS_ADM PACKAGE ++ +col NAME Heading 'Capture|Name' format a25 wrap +col object format a45 wrap heading 'Object' + +col source_database format a15 wrap +col rule_set_type heading 'Rule Set|Type' +col RULE format a45 wrap heading 'Rule |Name' +col TYPE format a15 wrap heading 'Rule |Type' +col dml_condition format a40 wrap heading 'Rule|Condition' +col include_tagged_lcr heading 'Tagged|LCRs?' format a7 +col same_rule_condition Head 'Rule Condition|Same as Orig?' format a14 + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +rule_set_type, +SOURCE_DATABASE, +STREAMS_RULE_TYPE ||' '||Rule_type TYPE , +INCLUDE_TAGGED_LCR, same_rule_condition, +rule_owner||'.'||rule_name RULE +from dba_streams_rules where streams_type ='CAPTURE' +order by name,object, source_database, rule_set_type,rule; + + + +prompt ++ STREAMS TABLE SUBSETTING RULES ++ +col NAME Heading 'Capture Name' format a25 wraP +col object format A25 WRAP +col source_database format a15 wrap +col RULE format a35 wrap +col TYPE format a15 wrap +col dml_condition format a40 wrap + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +RULE_TYPE || 'TABLE RULE' TYPE, +rule_owner||'.'||rule_name RULE, +DML_CONDITION , SUBSETTING_OPERATION +from dba_streams_rules where streams_type = 'CAPTURE' and (dml_condition is not null or subsetting_operation is not null); + +prompt +prompt ++ CAPTURE RULES BY RULE SET ++ +col capture_name format a25 wrap heading 'Capture|Name' +col RULE_SET format a25 wrap heading 'Rule Set|Name' +col RULE_NAME format a25 wrap heading 'Rule|Name' +col condition format a50 wrap heading 'Rule|Condition' +set long 4000 + + +select c.capture_name, rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, DBA_RULES r ,DBA_CAPTURE c +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and +rsr.rule_set_owner=c.rule_set_owner and rsr.rule_set_name=c.rule_set_name and rsr.rule_set_name in +(select rule_set_name from dba_capture) order by rsr.rule_set_owner,rsr.rule_set_name; + +prompt +** CAPTURE RULES IN NEGATIVE RULE SET **+ +prompt +select c.capture_name, rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, DBA_RULES r ,DBA_CAPTURE c +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and +rsr.rule_set_owner=c.negative_rule_set_owner and rsr.rule_set_name=c.negative_rule_set_name + and rsr.rule_set_name in +(select negative_rule_set_name rule_set_name from dba_capture) order by rsr.rule_set_owner,rsr.rule_set_name; + + +prompt +prompt ++ CAPTURE RULE TRANSFORMATIONS BY RULE SET ++ +col RULE_SET format a25 wrap heading 'Rule Set|Name' +col RULE_NAME format a25 wrap heading 'Rule|Name' +col condition format a60 wrap heading 'Rule|Condition' +set long 4000 + + +col action_context_name format a32 wrap +col action_context_value format a32 wrap +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET , r.* from + dba_rule_set_rules rsr, dba_streams_transformations r +where + r.rule_name = rsr.rule_name and r.rule_owner = rsr.rule_owner and rule_set_name in + (select rule_set_name from dba_capture) +order by rsr.rule_set_owner,rsr.rule_set_name, r.rule_owner, r.rule_name,transform_type desc, step_number, precedence; + +prompt + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound +prompt +prompt ============================================================================================ +prompt +prompt ++ Registered Log Files for Capture ++ + +COLUMN CONSUMER_NAME HEADING 'Capture|Process|Name' FORMAT A15 +COLUMN SOURCE_DATABASE HEADING 'Source|Database' FORMAT A10 +COLUMN SEQUENCE# HEADING 'Sequence|Number' FORMAT 999999 +COLUMN NAME HEADING 'Archived Redo Log|File Name' format a35 +column first_scn HEADING 'Archived Log|First SCN' +COLUMN FIRST_TIME HEADING 'Archived Log Begin|Timestamp' +column next_scn HEADING 'Archived Log|Last SCN' +COLUMN NEXT_TIME HEADING 'Archived Log Last|Timestamp' +COLUMN MODIFIED_TIME HEADING 'Archived Log|Registered Time' +COLUMN DICTIONARY_BEGIN HEADING 'Dictionary|Build|Begin' format A6 +COLUMN DICTIONARY_END HEADING 'Dictionary|Build|End' format A6 +COLUMN PURGEABLE HEADING 'Purgeable|Archive|Log' format a9 + +SELECT r.CONSUMER_NAME, + r.SOURCE_DATABASE, + r.SEQUENCE#, + r.NAME, + r.first_scn, + r.FIRST_TIME, + r.next_scn, + r.next_time, + r.MODIFIED_TIME, + r.DICTIONARY_BEGIN, + r.DICTIONARY_END, + r.purgeable + FROM DBA_REGISTERED_ARCHIVED_LOG r, DBA_CAPTURE c + WHERE r.CONSUMER_NAME = c.CAPTURE_NAME + ORDER BY source_database, consumer_name, r.first_scn; + +prompt ============================================================================================ +prompt +prompt ++ CAPTURE EXTRA ATTRIBUTES ++ + +COLUMN CAPTURE_NAME HEADING 'Capture Process' FORMAT A30 +COLUMN ATTRIBUTE_NAME HEADING 'Attribute Name' FORMAT A15 +COLUMN INCLUDE HEADING 'Include Attribute in LCRs?' FORMAT A30 +COLUMN ROW_ATTRIBUTE HEADING 'Row' format A3 +COLUMN DDL_ATTRIBUTE Heading 'DDL' format A3 + +SELECT CAPTURE_NAME, ATTRIBUTE_NAME, ROW_ATTRIBUTE, DDL_ATTRIBUTE, INCLUDE + FROM DBA_CAPTURE_EXTRA_ATTRIBUTES + ORDER BY CAPTURE_NAME; + + + + +prompt ============================================================================================ +prompt +prompt ++ TABLES PREPARED FOR CAPTURE ++ + +col table_owner format a30 HEADING 'Table|Owner' +col table_name format a30 HEADING 'Table|Name' +col timestamp heading 'Timestamp' +col supplemental_log_data_pk HEADING 'PK|Logging' +col supplemental_log_data_ui HEADING 'UI|Logging' +col supplemental_log_data_fk HEADING 'FK|Logging' +col supplemental_log_data_all HEADING 'All|Logging' + +select * from dba_capture_prepared_tables order by table_owner,table_name; + +prompt ++ SCHEMAS PREPARED FOR CAPTURE ++ +col schema_name heading 'Schema|Name' + +select * from dba_capture_prepared_schemas order by schema_name; + +prompt ++ SCHEMAS PREPARED ALLKEY FOR GG CAPTURE ++ + +select * from SYS.LOGMNR$SCHEMA_ALLKEY_SUPLOG order by 1; + +prompt ++ DATABASE PREPARED FOR CAPTURE ++ + +select * from dba_capture_prepared_database; + +prompt ============================================================================================ +prompt +prompt ++ TABLES WITH SUPPLEMENTAL LOGGING ++ +col OWNER format a30 wrap +col table_name format a30 wrap + +select distinct owner,table_name from dba_log_groups order by 1,2; + + +prompt +prompt ++ TABLE LEVEL SUPPLEMENTAL LOG GROUPS ENABLED FOR CAPTURE ++ +col object format a40 wrap +col column_name format a30 wrap +col log_group_name format a25 wrap + +select owner||'.'||table_name OBJECT, log_group_name, log_group_type, decode(always,'ALWAYS','Unconditional','CONDITIONAL','Conditional',NULL,'Conditional') ALWAYS, generated from dba_log_groups order by 1,2; + +prompt ++ SUPPLEMENTALLY LOGGED COLUMNS ++ +col logging_property heading 'Logging|Property' format a9 + +select owner||'.'||table_name OBJECT, log_group_name, column_name,position,LOGGING_PROPERTY from dba_log_group_columns order by 1,2; + + + +prompt +prompt ++ Sync Capture Processes ++ +prompt +select * from dba_sync_capture order by capture_name ; + +PROMPT +PROMPT +** Sync Capture TABLES **+ +select * from dba_sync_capture_tables order by 1,2; + +Prompt +Prompt +** Sync Capture TABLE Rules **+ +prompt If Object or Type is not populated, then a manually constructed rule has been added to the rule set +prompt + +COLUMN STREAMS_NAME HEADING 'Synchronous|Capture Name' FORMAT A15 +COLUMN RULE_NAME HEADING 'Rule Name' FORMAT A15 +COLUMN SUBSETTING_OPERATION HEADING 'Subsetting|Operation' FORMAT A10 +COLUMN ENABLED HEADING 'Enabled?' FORMAT A8 + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +rule_set_type, +SOURCE_DATABASE, +STREAMS_RULE_TYPE ||' '||Rule_type TYPE , +INCLUDE_TAGGED_LCR, same_rule_condition, +rule_owner||'.'||rule_name RULE +from dba_streams_rules where streams_type ='SYNC_CAPTURE' +order by name,object, source_database, rule_set_type,rule; + + +prompt ++ SYNC CAPTURE TABLE SUBSETTING RULES ++ +col NAME Heading 'Capture Name' format a25 wraP +col object format A25 WRAP +col source_database format a15 wrap +col RULE format a35 wrap +col TYPE format a15 wrap +col dml_condition format a40 wrap + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +RULE_TYPE || 'TABLE RULE' TYPE, +rule_owner||'.'||rule_name RULE, +DML_CONDITION , SUBSETTING_OPERATION +from dba_streams_rules where streams_type = 'SYNC_CAPTURE' and (dml_condition is not null or subsetting_operation is not null); + +prompt +prompt ++ SYNC CAPTURE RULES BY RULE SET ++ +prompt +col capture_name format a25 wrap heading 'Capture|Name' +col RULE_SET format a25 wrap heading 'Rule Set|Name' +col RULE_NAME format a25 wrap heading 'Rule|Name' +col condition format a50 wrap heading 'Rule|Condition' +set long 4000 + + +select c.capture_name, rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, DBA_RULES r ,DBA_SYNC_CAPTURE c +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and +rsr.rule_set_owner=c.rule_set_owner and rsr.rule_set_name=c.rule_set_name and rsr.rule_set_name in +(select rule_set_name from dba_sync_capture) order by rsr.rule_set_owner,rsr.rule_set_name; + +prompt +prompt ++ SYNC CAPTURE RULE TRANSFORMATIONS BY RULE SET ++ +prompt +col RULE_SET format a25 wrap heading 'Rule Set|Name' +col RULE_NAME format a25 wrap heading 'Rule|Name' +col condition format a60 wrap heading 'Rule|Condition' +set long 4000 + + +col action_context_name format a32 wrap +col action_context_value format a32 wrap +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET , r.* from + dba_rule_set_rules rsr, dba_streams_transformations r +where + r.rule_name = rsr.rule_name and r.rule_owner = rsr.rule_owner and rule_set_name in + (select rule_set_name from dba_sync_capture) +order by rsr.rule_set_owner,rsr.rule_set_name, r.rule_owner, r.rule_name,transform_type desc, step_number, precedence; + +prompt +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + + +prompt +prompt ========================================================================================== +prompt +prompt ++ MESSAGING CLIENTS IN DATABASE ++ +prompt ========================================================================================= +prompt + +COLUMN STREAMS_NAME HEADING 'Messaging|Client' FORMAT A25 +COLUMN QUEUE_OWNER HEADING 'Queue Owner' FORMAT A10 +COLUMN QUEUE_NAME HEADING 'Queue Name' FORMAT A20 +COLUMN RULE_SET_NAME HEADING 'Positive|Rule Set' FORMAT A11 +COLUMN NEGATIVE_RULE_SET_NAME HEADING 'Negative|Rule Set' FORMAT A11 + + +SELECT STREAMS_NAME, + QUEUE_OWNER, + QUEUE_NAME, + RULE_SET_NAME, + NEGATIVE_RULE_SET_NAME + FROM DBA_STREAMS_MESSAGE_CONSUMERS + order by queue_owner, queue_name,streams_name; + +prompt +prompt ++ MESSAGE CLIENT NOTIFICATIONS ++ +prompt +COLUMN STREAMS_NAME HEADING 'Messaging|Client' FORMAT A25 +COLUMN QUEUE_OWNER HEADING 'Queue|Owner' FORMAT A10 +COLUMN QUEUE_NAME HEADING 'Queue Name' FORMAT A20 +COLUMN NOTIFICATION_TYPE HEADING 'Notification|Type' FORMAT A15 +COLUMN NOTIFICATION_ACTION HEADING 'Notification|Action' FORMAT A35 + +SELECT STREAMS_NAME, + QUEUE_OWNER, + QUEUE_NAME, + NOTIFICATION_TYPE, + NOTIFICATION_ACTION + FROM DBA_STREAMS_MESSAGE_CONSUMERS + WHERE NOTIFICATION_TYPE IS NOT NULL +order by queue_owner,queue_name,streams_name; + + +prompt +prompt ========================================================================================== +prompt +prompt ++ PROPAGATIONS IN DATABASE ++ +prompt ========================================================================================= +prompt +COLUMN 'Source Queue' FORMAT A39 +COLUMN 'Destination Queue' FORMAT A39 +COLUMN PROPAGATION_NAME HEADING 'Propagation' FORMAT A35 +column queue_to_queue HEADING 'Q-2-Q' +column acked_scn HEADING 'Acknowledged SCN' +column error_message HEADING 'Error Message' +column error_date HEADING 'Error Date' + +SELECT p.propagation_name, p.SOURCE_QUEUE_OWNER ||'.'|| + p.SOURCE_QUEUE_NAME ||'@'|| + g.GLOBAL_NAME "Source Queue", + p.DESTINATION_QUEUE_OWNER ||'.'|| + p.DESTINATION_QUEUE_NAME ||'@'|| + p.DESTINATION_DBLINK "Destination Queue", + p.queue_to_queue, + p.status, p.acked_scn, + p.error_date, + p.error_message + FROM DBA_PROPAGATION p, GLOBAL_NAME g; + +prompt +prompt ++ PROPAGATION RULE SETS IN DATABASE ++ +prompt +COLUMN PROPAGATION_NAME HEADING 'Propagation' FORMAT A35 +COLUMN Positive HEADING 'Positive|Rule Set' FORMAT A35 +COLUMN Negative HEADING 'Negative|Rule Set' FORMAT A35 + +SELECT PROPAGATION_NAME, RULE_SET_OWNER||'.'||RULE_SET_NAME Positive, + NEGATIVE_RULE_SET_OWNER||'.'||NEGATIVE_RULE_SET_NAME Negative + FROM DBA_PROPAGATION; + +prompt ============================================================================================ +prompt +prompt ++ STREAMS PROPAGATION RULES CONFIGURED ++ +col NAME Heading 'Name' format a25 wrap +col PropNAME format a25 Heading 'Propagation Name' +col object format a25 wrap +col source_database format a15 wrap +col RULE format a35 wrap +col TYPE format a15 wrap +col dml_condition format a40 wrap +col same_rule_condition Head 'Rule Condition|Same as Orig?' format a14 + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +rule_set_type, +SOURCE_DATABASE, +STREAMS_RULE_TYPE ||' '||Rule_type TYPE , +INCLUDE_TAGGED_LCR, same_rule_condition, +rule_owner||'.'||rule_name RULE +from dba_streams_rules where streams_type = 'PROPAGATION' +order by name,object, source_database, rule_set_type,rule; + + + + +prompt ++ STREAMS TABLE SUBSETTING RULES ++ +col NAME format a25 wraP +col object format A25 WRAP +col source_database format a15 wrap +col RULE format a35 wrap +col TYPE format a15 wrap +col dml_condition format a40 wrap + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +RULE_TYPE || 'TABLE RULE' TYPE, +rule_owner||'.'||rule_name RULE, +DML_CONDITION , SUBSETTING_OPERATION +from dba_streams_rules where streams_type = 'PROPAGATION' and (dml_condition is not null or subsetting_operation is not null); + +prompt +prompt ++ PROPAGATION RULES BY RULE SET ++ +prompt +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col condition format a60 wrap +set long 4000 +REM break on RULE_SET + +set long 4000 +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, dba_rules r +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and rule_set_name in +(select rule_set_name from dba_propagation) order by rsr.rule_set_owner,rsr.rule_set_name; + + +prompt +** PROPAGATION RULES IN NEGATIVE RULE SET **+ +prompt +select c.propagation_name, rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, DBA_RULES r ,DBA_PROPAGATION c +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and +rsr.rule_set_owner=c.negative_rule_set_owner and rsr.rule_set_name=c.negative_rule_set_name + and rsr.rule_set_name in +(select negative_rule_set_name rule_set_name from dba_propagation) order by rsr.rule_set_owner,rsr.rule_set_name; + + +prompt +prompt ++ PROPAGATION RULE TRANSFORMATIONS BY RULE SET ++ +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col action_context_name format a32 wrap +col action_context_value format a32 wrap +REM break on RULE_SET + +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET , r.* from + dba_rule_set_rules rsr, dba_streams_transformations r +where + r.rule_name = rsr.rule_name and r.rule_owner = rsr.rule_owner and rule_set_name in + (select rule_set_name from dba_propagation) +order by rsr.rule_set_owner,rsr.rule_set_name, r.rule_owner, r.rule_name,transform_type desc, step_number, precedence; + + + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound +prompt +prompt +prompt ============================================================================================ + +prompt +prompt ++ APPLY INFORMATION ++ + +col apply_name format a25 wrap heading 'Apply|Name' +col queue format a25 wrap heading 'Queue|Name' +col apply_tag format a7 wrap heading 'Apply|Tag' +col ruleset format a25 wrap heading 'Rule Set|Name' +col apply_user format a15 wrap heading 'Apply|User' +col apply_captured format a15 wrap heading 'Captured or|User Enqueued' +col RSN HEADING 'Positive|Rule Set' format a25 wrap +col RSN2 HEADING 'Negative|Rule Set' format a25 wrap +col message_delivery_mode HEADING 'Message|Delivery' format a15 +col apply_database_link HEADING 'Remote Apply|Database Link' format a25 wrap +col purpose HEADING Purpose format a25 + +Select apply_name,purpose,status,queue_owner||'.'||queue_name QUEUE, +DECODE(APPLY_CAPTURED, + 'YES', 'Captured', + 'NO', 'User-Enqueued') APPLY_CAPTURED, +apply_user, apply_tag, rule_set_owner||'.'||rule_set_name RSN, +negative_rule_set_owner||'.'||negative_rule_set_name RSN2, message_delivery_mode, +apply_database_link from DBA_APPLY order by apply_name; + +prompt ++ APPLY PROCESS INFORMATION ++ +col max_applied_message_number HEADING 'Maximum Applied|Message Number' +col error_message HEADING 'Apply|Error Message' format a60 wrap + +select apply_name, max_applied_message_number,status, status_change_time,error_number, error_message from dba_apply order by apply_name; + +prompt Return to Summary +prompt ++ APPLY PROCESS HANDLERS ++ + +select apply_name, ddl_handler, message_handler, precommit_handler from dba_apply order by apply_name; + +prompt +prompt ++ Non-Default APPLY PROCESS PARAMETERS ++ + +col APPLY_NAME format a30 +col parameter format a28 +col value format a28 +REM break on apply_name + +select * from dba_apply_parameters where set_by_user = 'YES' or parameter in ('PARALLELISM','MAX_PARALLELISM') order by apply_name,parameter; + +prompt ============================================================================================ +prompt +prompt ++ STREAMS APPLY RULES CONFIGURED ++ +col NAME format a25 wrap heading 'Streams|Name' +col object format a25 wrap heading 'Database|Object' +col source_database format a15 wrap heading 'Source|Database' +col RULE format a35 wrap heading 'Rule|Name' +col RULE format a35 wrap heading 'Rule|Name' +col TYPE format a15 wrap heading 'Rule|Type' +col dml_condition format a40 wrap heading 'Rule|Condition' +col same_rule_condition Head 'Rule Condition|Same as Orig?' format a14 + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +rule_set_type, +SOURCE_DATABASE, +STREAMS_RULE_TYPE ||' '||Rule_type TYPE , +INCLUDE_TAGGED_LCR, same_rule_condition, +rule_owner||'.'||rule_name RULE +from dba_streams_rules where streams_type = 'APPLY' +order by name,object, source_database, rule_set_type,rule; + +prompt ++ STREAMS TABLE SUBSETTING RULES ++ +col NAME format a25 wraP +col object format A25 WRAP +col source_database format a15 wrap +col RULE format a35 wrap +col TYPE format a15 wrap +col dml_condition format a40 wrap + + +select streams_name NAME,schema_name||'.'||object_name OBJECT, +RULE_TYPE || 'TABLE RULE' TYPE, +rule_owner||'.'||rule_name RULE, +DML_CONDITION , SUBSETTING_OPERATION +from dba_streams_rules where streams_type = 'APPLY' and (dml_condition is not null or subsetting_operation is not null) order by 1,2,3; + +prompt + +prompt ++ APPLY Rules ++ +prompt +prompt ++ APPLY RULES BY RULE SET ++ +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col condition format a60 wrap +set long 4000 +REM break on RULE_SET + +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, dba_rules r +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and rule_set_name in +(select rule_set_name from dba_apply) order by rsr.rule_set_owner,rsr.rule_set_name; + + +prompt ++ APPLY RULES IN NEGATIVE RULE SET ++ +prompt +select c.apply_name, rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET ,rsr.rule_owner||'.'||rsr.rule_name RULE_NAME, +r.rule_condition CONDITION from +dba_rule_set_rules rsr, DBA_RULES r ,DBA_APPLY c +where rsr.rule_name = r.rule_name and rsr.rule_owner = r.rule_owner and +rsr.rule_set_owner=c.negative_rule_set_owner and rsr.rule_set_name=c.negative_rule_set_name + and rsr.rule_set_name in +(select negative_rule_set_name rule_set_name from dba_apply) order by rsr.rule_set_owner,rsr.rule_set_name; + + + +prompt +prompt ++ APPLY RULE TRANSFORMATIONS BY RULE SET ++ +col action_context_name format a32 wrap +col action_context_value format a32 wrap +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col condition format a60 wrap +set long 4000 +REM break on RULE_SET + +select rsr.rule_set_owner||'.'||rsr.rule_set_name RULE_SET , r.* from + dba_rule_set_rules rsr, dba_streams_transformations r +where + r.rule_name = rsr.rule_name and r.rule_owner = rsr.rule_owner and rule_set_name in + (select rule_set_name from dba_apply) +order by rsr.rule_set_owner,rsr.rule_set_name, r.rule_owner, r.rule_name,transform_type desc, step_number, precedence; + + +prompt +prompt +prompt ++ RULE TRANSFORMATIONS STATUS ++ +col action_context_name format a32 wrap +col action_context_value format a32 wrap head 'Transformation Name' +col RULE_SET format a25 wrap +col RULE_NAME format a25 wrap +col condition format a60 wrap +set long 4000 +REM break on RULE_SET + +select ac.owner||'.'||ac.object_name ACTION_CONTEXT_VALUE, + o.status, o.object_type, o.created, o.last_ddl_time +from dba_objects o, +(select distinct replace(substr(transform_function_name,1,instr(transform_function_name,'.',1,1)-1),'"') owner +, replace(substr(transform_function_name,instr(transform_function_name,'.',-1,1)+1),'"') object_name + from dba_streams_transform_function ) ac +where o.owner = ac.owner and o.object_name = ac.object_name; + +prompt ============================================================================================ +prompt +prompt ++ APPLY HANDLERS ++ +col apply_name format a25 wrap +col message_handler format a25 wrap +col ddl_handler format a25 wrap + +select apply_name, message_handler, ddl_handler from dba_apply where message_handler is not null or ddl_handler is not null; + +prompt +prompt ++ APPLY DML HANDLERS ++ +col object format a35 wrap +col user_procedure HEADING 'User |Procedure' format a40 wrap +col handler_name HEADING 'Stmt |Handler' format a40 wrap +col dblink Heading 'Apply|DBLink' format a15 wrap +col apply_database_link HEAD 'Database Link|for Remote|Apply' format a25 wrap +col operation_name HEADING 'Operation|Name' format a13 +col typ Heading 'Handler|Type' format a17 wrap +col lob_assemble HEADING 'Assemble|Lob?' format a8 + +select object_owner||'.'||object_name OBJECT, operation_name , +handler_type TYP, +decode(assemble_lobs,'Y','Yes','N','No','UNKNOWN') lob_assemble, +apply_name, +user_procedure, +handler_name, +APPLY_Database_link +from dba_apply_dml_handlers +order by object_owner,object_name,apply_name; + + +prompt +prompt ++ DML STATEMENT HANDLER STATUS ++ +prompt +col handler_name format a40 wrap +col handler_comment format a40 wrap + +select * from dba_streams_stmt_handlers order by 1; + +prompt +prompt ** DML Statement Handler Statements ** +prompt + +select * from dba_streams_stmts order by 1,2; + +prompt +prompt ++ DML PROCEDURE HANDLER STATUS ++ +prompt +col user_procedure format a40 wrap + + select o.owner||'.'||o.object_name OBJECT, o.status,o.object_type,o.created, o.last_ddl_time from dba_objects o, + (select distinct user_procedure from dba_apply_dml_handlers where user_procedure is not null) h + where +o.owner=replace(substr(h.user_procedure,1, instr(h.user_procedure,'.',1,1)-1),'"',null) + and o.object_name = replace(substr(h.user_procedure,instr(h.user_procedure,'.',-1,1)+1),'"',null) order by 1; + +prompt +prompt ++ Apply Change Handlers ++ +prompt +prompt Change handlers are created using the Streams MAINTAIN_CHANGE_TABLE procedure + +select * from dba_apply_change_handlers order by source_table_owner, source_table_name, change_table_owner, apply_name,change_table_name, handler_name; + + + +prompt ============================================================================================ + + +prompt +prompt ++ APPLY ENQUEUE directives ++ + +select * from dba_apply_enqueue; + +prompt +prompt ++ APPLY EXECUTE directives ++ + +select * from dba_apply_execute; + +prompt + +prompt ++ Conflict Detection Control ++ +prompt + +select * From dba_apply_table_columns order by 1,2,3; + + +prompt ============================================================================================ +prompt +prompt ++ UPDATE CONFLICT RESOLUTION COLUMNS ++ + +col object format a25 wrap +col method_name heading 'Method' format a12 +col resolution_column heading 'Resolution|Column' format a13 +col column heading 'Column Name' format a30 + +select object_owner||'.'||object_name object, method_name, +resolution_column, column_name , apply_database_link +from dba_apply_conflict_columns order by object_owner,object_name; + + +prompt ============================================================================================ +prompt +prompt ++ KEY COLUMNS SET FOR APPLY ++ + +select * from dba_apply_key_columns order by 1,2; + +prompt ============================================================================================ +prompt +prompt ++ OBJECT DEPENDENCIES SET FOR APPLY ++ + +select * from dba_apply_object_dependencies; + +prompt ============================================================================================ +prompt +prompt ++ VALUE DEPENDENCIES SET FOR APPLY ++ + +select * from dba_apply_value_dependencies; + + + +prompt ++ APPLY PROGRESS ++ +col oldest_message_number HEADING 'Oldest|Message|SCN' +col apply_time HEADING 'Apply|Timestamp' +select * from dba_apply_progress order by apply_name; + + + + + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + + + +prompt ============================================================================================ +prompt +prompt ++ ERROR QUEUE ++ +col source_commit_scn HEADING 'Source|Commit|Scn' +col message_number HEADING 'Message in| Txn causing|Error' +col message_count HEADING 'Total|Messages|in Txn' +col local_transaction_id HEADING 'Local|Transaction| ID' +col error_message HEADING 'Apply|Error|Message' +col ERROR_CREATION_TIME HEADING 'Error|Creation|Timestamp' +col source_transaction_id HEADING 'Source|Transaction| ID' + +Select apply_name, source_database,source_commit_scn, + message_number, message_count, + local_transaction_id, error_type, + error_message , error_creation_time, + source_transaction_id, source_commit_position +from DBA_APPLY_ERROR order by apply_name ,source_commit_scn ; + +prompt ++ Tables by Error Type ++ +prompt + +select m.error_number,object_owner,object_name, operation,count(*) from dba_apply_error_messages m group by m.error_number,object_owner,object_name,operation order by 1,2,3,4; + +prompt + +prompt ++ Failed txn PK for multiple transactions ++ +prompt Shown only if PK column in view is not null (ie, populated) and count>1 +prompt + select m.error_number,object_owner,object_name, primary_key,count(*) from dba_apply_error_messages m where primary_key is not null having count(*) > 1 group by + m.error_number,object_owner,object_name,primary_key order by 1,2,3; +prompt + + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound +prompt +prompt ============================================================================================ +prompt +prompt ++ INSTANTIATION SCNs for APPLY TABLES ++ +col source_database format a25 wrap +col object HEADING 'Database|Object' format a45 +col instantiation_scn format 9999999999999999 +col apply_database_link HEAD 'Database Link|for Remote|Apply' format a25 wrap + +select source_database, source_object_owner||'.'||source_object_name OBJECT, + ignore_scn, instantiation_scn, apply_database_link DBLINK +from dba_apply_instantiated_objects order by source_database, object; + +prompt +prompt ++ INSTANTIATION SCNs for APPLY SCHEMA and DATABASE (DDL) ++ +col source_database HEADING 'Source|Database' format a30 +col OBJECT HEADING 'Database|Object' format a45 +col DBLINK HEADING 'Database|Link' +col inst_scn HEADING 'Instantiation|SCN' +col global_flag HEADING 'Schema or |Database' + +select source_database, source_schema OBJECT, + apply_database_link DBLINK, instantiation_Scn INST_SCN, + 'SCHEMA' global_flag from dba_apply_instantiated_schemas +UNION +select source_database, '' OBJECT, + apply_database_link DBLINK, instantiation_Scn INST_SCN, + 'GLOBAL' global_flag from dba_apply_instantiated_global order by source_database,object; + +prompt +prompt ================================================================================= +prompt +prompt ++ XSTREAM CONFIGURATION ++ +prompt +col source_database format a40 wrap Heading 'Source|Database' +COLUMN SERVER_NAME HEADING 'Server|Name' +COLUMN CAPTURE_NAME HEADING 'Capture|Process' +COLUMN CAPTURE_USER HEADING 'Capture|User' +COLUMN committed_data_only HEADING 'Committed|Data Only' +COLUMN Start_scn Heading 'Start SCN' format 9999999999999999 +COLUMN Connect_user Heading 'Connect|User' +Column Create_date Heading 'Create|Date' +Column Start_time Heading 'Start Time' +column username heading 'Administrator|Name' +column local_privileges Heading 'Local|Privileges' format a10 +column access_from_remote Heading 'Remote|Access' format a10 +column queue_owner Heading 'Queue|Owner' +column queue_name Heading 'Queue|Name' +column apply_user Heading 'Apply|User' +column User_comment Heading 'User|Comment' + + + +prompt ++ XStream Administrator ++ + +select * from dba_xstream_administrator; + +select * from dba_goldengate_privileges; + +prompt +prompt ++ XStream Outbound Servers ++ +prompt + +Select SERVER_NAME, STATUS, CONNECT_USER, CAPTURE_NAME, SOURCE_DATABASE, +START_SCN ||' ('|| START_TIME||')', CAPTURE_USER, QUEUE_OWNER, +QUEUE_NAME, USER_COMMENT, CREATE_DATE, COMMITTED_DATA_ONLY +from dba_xstream_outbound order by server_name; + + +prompt +prompt ++ XStream Inbound Servers ++ +prompt + +select * from dba_xstream_inbound order by server_name; + +prompt +prompt ++ XStream Rules ++ +prompt +col streams_name Head 'Name' +col streams_type head 'Process|Type' +col schema_name Head 'Schema|Name' +col streams_rule_type Head 'Rule|Granularity' +col rule_set_owner Head 'Rule Set|Owner' +col rule_set_name Head 'Rule Set|Name' +col rule_owner Head 'Rule|Owner' +col rule_name Head 'Rule|Name' +col Rule_set_type Head 'Rule Set|Type' +col Rule_type head 'Rule|Type' +col Rule_condition Head 'Rule|Condition' +col object_name Head 'Object|Name' +col dml_condition Head 'DML|Condition' +col original_rule_condition Head 'Orig Rule|Condition' +col same_rule_condition Head 'Rule Condition|Same as Orig?' format a14 +col include_tagged_lcr Head 'Include|Tagged?' format a8 +col subsetting_operation Head 'Subsetting|Operation' format a10 + +select * from dba_xstream_rules order by streams_name, streams_type desc, streams_rule_type asc,schema_name,object_name; + + +prompt +prompt ** DML Conflict Handlers Details ** +prompt +select * from DBA_APPLY_DML_CONF_HANDLERS order by 1,2,3,4,5,6; +prompt +prompt ** Handle Collisions Details ** +prompt +select * from DBA_APPLY_HANDLE_COLLISIONS order by 1,2,3,4; +prompt +prompt ** Reperror Handlers Details ** +prompt +select * from DBA_APPLY_REPERROR_HANDLERS order by 1,2,3,4,5,6; + + +prompt +prompt +prompt ++ XSTREAM Outbound Progress Table ++ +prompt +col processed_low_position format a40 wrap +col applied_low_position format a40 wrap +col applied_high_position format a40 wrap +col spill_position format a40 wrap + +select * From dba_xstream_outbound_progress order by server_name; +prompt +prompt ++ XSTREAM Inbound Progress Table ++ +prompt +select * From dba_xstream_inbound_progress order by server_name; +prompt +prompt ============================================================================================ +prompt +prompt ++ DBA OBJECTS - Rules, and Streams Processes ++ +prompt +col OBJECT format a45 wrap heading 'Object' + +select owner||'.'||object_name OBJECT, + object_id,object_type,created,last_ddl_time, status from + dba_objects +WHERE object_type in ('RULE','RULE SET','CAPTURE','APPLY') + order by object_type, object; + + +prompt +prompt ============================================================================================ + +prompt +prompt ============================================================================================ +prompt + +prompt ++ Check RECOVERABLE tables ++ +prompt Automation from MAINTAIN_* scripts and SPLIT/MERGE jobs +prompt + + +set long 100 +col progress format a28 +select sysdate,rs.creation_time, +rs.invoking_package||'.'||rs.invoking_procedure PROCEDURE, +rs.status, +rs.done_block_num||' of '||rs.total_blocks||' Steps Completed' PROGRESS, +to_number(sysdate-rs.creation_time)*86400 ELAPSED_SECONDS, +rs.script_id, +rsb.forward_block CURRENT_STEP +from dba_recoverable_script rs, +dba_recoverable_script_blocks rsb +where rs.script_id = rsb.script_id and rsb.block_num = rs.done_block_num + 1; + +prompt +prompt ++ Check RECOVERABLE ERROR view ++ +prompt + +SELECT e.* FROM DBA_RECOVERABLE_SCRIPT_ERRORS e, dba_recoverable_script s where e.script_id = s.script_id order by e.script_id; + +prompt +prompt ++ Identify Current Script Blocks ++ +prompt + +set long 4000 +select + b.script_id, b.block_num, b.status, + forward_block_dblink,forward_block + from dba_recoverable_script_blocks b, dba_recoverable_script s where b.script_id =s.script_id order by b.script_id, block_num ; + + +prompt +prompt ++ History of Recoverable Scripts in last 30 days ++ +prompt + +set long 4000 + +select rs.creation_time, +rs.invoking_package||'.'||rs.invoking_procedure PROCEDURE, +rs.status, +rs.done_block_num||' of '||rs.total_blocks||' Steps Completed' PROGRESS, +rs.script_id, +rs.script_comment +from dba_recoverable_script_hist rs where sysdate-creation_time < 30 +order by creation_time; + +prompt +prompt ++ Recoverable Script Parameters ++ +prompt +set long 4000 +select * from dba_recoverable_script_params order by 1,2,3; + + +prompt +prompt ++ Defined Comparisons ++ +prompt +select * from dba_comparison order by owner,comparison_name,comparison_mode; + +prompt +prompt ++ Comparison Information ++ +prompt +select * From dba_comparison_scan order by owner,comparison_name,parent_scan_id,scan_id; +prompt +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + +prompt +prompt ++ History ++ +prompt + +col snap_id format 999999 HEADING 'Snap ID' +col BEGIN_INTERVAL_TIME format a28 HEADING 'Interval|Begin|Time' +col END_INTERVAL_TIME format a28 HEADING 'Interval|End|Time' +col INSTANCE_NUMBER HEADING 'Instance|Number' +col Queue format a28 wrap Heading 'Queue|Name' +col num_msgs HEADING 'Current|Number of Msgs|in Queue' +col cnum_msgs HEADING 'Cumulative|Total Msgs|for Queue' +col spill_msgs HEADING 'Current|Spilled Msgs|in Queue' +col cspill_msgs HEADING 'Cumulative|Total Spilled|for Queue' +col dbid HEADING 'Database|Identifier' +col total_spilled_msg HEADING 'Cumulative|Total Spilled|Messages' + +prompt +prompt ++ Streams Buffered Queue History for last day ++ + +select s.begin_interval_time,s.end_interval_time , + bq.snap_id, + bq.num_msgs, bq.spill_msgs, bq.cnum_msgs, bq.cspill_msgs, + bq.queue_schema||'.'||bq.queue_name Queue, + bq.queue_id, bq.startup_time,bq.instance_number,bq.dbid +from dba_hist_buffered_queues bq, dba_hist_snapshot s +where bq.snap_id=s.snap_id and s.end_interval_time >= systimestamp-1 +order by bq.queue_schema,bq.queue_name,s.end_interval_time; + + +prompt +prompt ++ Streams Buffered Subscriber History for last day ++ + +select s.begin_interval_time,s.end_interval_time , + bs.snap_id,bs.subscriber_id, + bs.num_msgs, bs.cnum_msgs, bs.total_spilled_msg, + bs.subscriber_name,subscriber_address, + bs.queue_schema||'.'||bs.queue_name Queue, + bs.startup_time,bs.instance_number,bs.dbid +from dba_hist_buffered_subscribers bs, dba_hist_snapshot s +where bs.snap_id=s.snap_id and s.end_interval_time >= systimestamp-1 +order by bs.queue_schema,bs.queue_name,bs.subscriber_id,s.end_interval_time; + + + +prompt +prompt ++ Streams Capture History for last day ++ +column total_messages_created HEADING 'Total|Messages|Created' +column total_messages_enqueued HEADING 'Total Messages|Enqueued' +column lag HEADING 'Capture|Lag|(Seconds)' +column elapsed_capture HEADING 'Elapsed Time|Capture|(centisecs' +column elapsed_rule_time HEADING 'Elapsed Time|Rule Evaluation|(centisecs)' +column elapsed_enqueue_time HEADING 'Elapsed Time|Enqueuing Messages|(centisecs)' +column elapsed_lcr HEADING 'Elapsed Time|LCR Creation|(centisecs)' +column elapsed_redo_wait_time HEADING 'Elapsed Time|Redo Wait|(centisecs)' +column elapsed_Pause_time HEADING 'Elapsed Time|Paused|(centisecs)' + + + +select s.begin_interval_time,s.end_interval_time , + sc.capture_name,sc.lag, + sc.total_messages_captured,sc.total_messages_enqueued, + sc.elapsed_pause_time, + sc.elapsed_redo_wait_time, + sc.elapsed_rule_time, sc.elapsed_enqueue_time, + sc.startup_time,sc.instance_number,sc.dbid +from dba_hist_streams_capture sc, dba_hist_snapshot s +where sc.snap_id=s.snap_id and s.end_interval_time >= systimestamp-1 +order by sc.capture_name,s.end_interval_time; + + + + +prompt +prompt ++ Streams Apply History for last day ++ +col reader_total_messages_dequeued HEADING 'Reader|Total Msgs|Dequeued' +col reader_lag HEADING 'Reader|Lag|(Seconds)' +col coord_total_received HEADING 'Coordinator|Total Txn|Received' +col coord_total_applied HEADING 'Coordinator|Total Txn|Applied' +col coord_total_rollbacks HEADING 'Coordinator|Total Txn|Rollbacks' +col coord_total_wait_deps HEADING 'Coordinator|Total Txn|Wait-Dep' +col coord_total_wait_cmts HEADING 'Coordinator|Total Txn|Wait-Cmt' +col coord_lwm_lag HEADING 'Coordinator|LWM Lag|(seconds)' +col server_total_messages_applied HEADING 'Server|Total Msgs|Applied' +col server_elapsed_dequeue_time HEADING 'Server|Elapsed Dequeue|Time (cs)' +col server_elapsed_apply_time HEADING 'Server|Elapsed Apply|Time (cs)' + + + +select s.begin_interval_time,s.end_interval_time , + sa.apply_name,sa.reader_lag, + sa.reader_total_messages_dequeued, + sa.coord_lwm_lag, + sa.coord_total_received,sa.coord_total_applied, + sa.coord_total_rollbacks, + sa.coord_total_wait_deps,sa.coord_total_wait_cmts, + sa.server_total_messages_applied, + sa.server_elapsed_dequeue_time, + sa.server_elapsed_apply_time, + sa.startup_time,sa.instance_number,sa.dbid +from dba_hist_streams_apply_sum sa, dba_hist_snapshot s +where sa.snap_id=s.snap_id and s.end_interval_time >= systimestamp-1 +order by sa.apply_name,s.end_interval_time; + + +prompt +prompt ++ SUSPICIOUS RULES ++ +prompt +col object format a45 wrap +col rule format a45 wrap + + +REM This script does sanity checking of STREAMS objects compared to the underlying RULES. +REM It is assumed that the DBMS_STREAMS_ADM package procedures +REM ADD_TABLE_RULES +REM ADD_SCHEMA_RULES +REM ADD_GLOBAL_RULES +REM have been used to configure streams. +prompt +prompt ++ Check for MISSING RULES IN DBA_RULES ++ +prompt . Rows are returned if a rule is defined in DBA_STREAMS_TABLE_RULES (or SCHEMA, GLOBAL, too) +prompt . but does not exist in the DBA_RULES view. +prompt + +select rule_owner,rule_name from dba_streams_rules +MINUS +select rule_owner,rule_name from dba_rules; + +prompt +prompt ++ Check for EXTRA RULES IN DBA_RULES ++ +prompt . Rows are returned if a rule is defined in the DBA_RULES view +prompt . but does not exist in the DBA_STREAMS_RULES view. +prompt +col rule_name format a30 + +select rule_owner,rule_name from dba_rules +MINUS +select rule_owner,rule_name from dba_streams_rules; + +prompt +prompt ++ Check for RULE_CONDITIONS DO NOT MATCH BETWEEN STREAMS AND RULES ++ +prompt . Rows are returned if the rule condition is different between the DBA_STREAMS_TABLE_RULES view +prompt . and the DBA_RULES view. This indicates that a manual modification has been performed on the +prompt . underlying rule. DBA_STREAMS_TABLE_RULES always shows the initial configuration rule condition. +prompt + +select s.streams_type, s.streams_name, r.rule_owner||'.'||r.rule_name RULE,r.rule_condition + from dba_streams_rules s, dba_rules r + where r.rule_name=s.rule_name and r.rule_owner=s.rule_owner and + dbms_lob.substr(s.rule_condition) != dbms_lob.substr(r.rule_condition); + +prompt +prompt ++ Check for SOURCE DATABASE NAME DOES NOT MATCH FOR CAPTURE OR PROPAGATION RULES ++ + +prompt . Rows are returned if the source database column in the DBA_STREAMS_ RULES view +prompt . for capture and/or propagation defined at this site does not match the +prompt . global_name of this site. For capture rules, the source database must match the global_name +prompt . of database. For propagation rules, the source database name will typically be the +prompt . global name of the database. In some cases, it may be correct to have a different source +prompt . database name from the global name. For example, at an intermediate node between a source site +prompt . and the ultimate target site OR when using a downstream capture configuration, the rule source database +prompt . name field will be diferent from the local. global name of the intermediate site. +prompt + +select streams_type, streams_name, r.rule_owner||'.'||r.rule_name RULE from dba_streams_rules r +where source_database is not null and source_database != (select global_name from global_name) and streams_type in ('CAPTURE','PROPAGATION'); + +prompt +prompt ++ Check for GLOBAL RULE FOR CAPTURE SPECIFIED BUT CONDITION NOT MODIFIED ++ +rem - It is assumed that GLOBAL rules for CAPTURE must be modified because of the unsupported datatypes in 9iR2. +prompt . Rows are returned if a global rule is defined in the DBA_STREAMS_GLOBAL_RULES view +prompt . and the rule condition in the DBA_RULES view has not been modified. +prompt . In 9iR2, the GLOBAL rule must be modified to eliminate any unsupported datatypes. For example, +prompt . the streams administrator schema must be eliminated from the capture rules. Failure to do +prompt . this will result in the abort of the capture process. + +select streams_name, r.rule_owner||'.'||r.rule_name RULE from dba_streams_rules s , dba_rules r +where streams_type = 'CAPTURE' and +rule_type='GLOBAL' and +r.rule_name=s.rule_name and +r.rule_owner=s.rule_owner and +dbms_lob.substr(s.rule_condition) = dbms_lob.substr(r.rule_condition); + +prompt +prompt ++ Check for No RULE SET DEFINED FOR CAPTURE ++ +prompt +Prompt Capture requires a rule set to be defined to assure that only supported datatypes are captured. +prompt + +select capture_name, capture_type, source_database from dba_capture where rule_set_name is null and negative_rule_set_name is null; + +prompt +prompt ++ Check for APPLY RULES WITH NO SOURCE DATABASE SPECIFIED ++ +prompt . Rows are returned if no source database is specified in the DBA_STREAMS_TABLE_RULES +prompt . (SCHEMA,GLOBAL) view. An apply process can perform transactions from a single source database. +prompt . In a typical replication environment, the source database name must be specified. In the single +prompt . site case where captured events from the source database are handled by an apply process on the +prompt . same database, the source database column does not need to be specified. +prompt + +select streams_name, s.rule_owner||'.'||s.rule_name RULE, s.schema_name||'.'|| s.object_name OBJECT +from dba_streams_rules s, dba_rules r +where s.streams_type = 'APPLY' and s.source_database is null and +r.rule_name=s.rule_name and +r.rule_owner=s.rule_owner and +dbms_lob.substr(s.rule_condition) = dbms_lob.substr(r.rule_condition); + +prompt +prompt ++ Check for SCHEMA RULES FOR NON_EXISTANT SCHEMA ++ + +select s.streams_type, s.streams_name, s.rule_owner||'.'||s.rule_name RULE, s.schema_name, +ac.nvn_name ACTION_CONTEXT_NAME, ac.nvn_value.accessvarchar2() ACTION_CONTEXT_VALUE +from dba_streams_rules s , dba_rules r, dba_users u, table(r.rule_action_context.actx_list) ac +where s.schema_name is null and u.username=s.schema_name +and r.rule_owner=s.rule_owner and r.rule_name = s.rule_name and ac.nvn_value.accessvarchar2() is null; + + + +prompt +prompt ++ Fast Evaluation Rule Set Rules for queues ++ +prompt +col RULE_SET Heading 'Rule Set' format a25 wrap +col RULE_NAME Heading 'Rule' format a25 wrap +col condition Heading 'Rule Condition' format a60 wrap +set long 4000 + + select rsr.rule_set_owner||'.'||rsr.rule_set_name Rule_set,rsr.rule_owner||'.'||rsr.rule_name rule, r.rule_condition + from dba_rule_set_rules rsr , dba_rules r + where rsr.rule_set_name like '%_R' and rsr.rule_name=r.rule_name and rsr.rule_owner=r.rule_owner + order by rsr.rule_set_owner,rsr.rule_set_name,rsr.rule_owner,rsr.rule_name; + + +prompt +-- To improve time in getting constraint infocompute Stats on sys.APPLY$_SOURCE_OBJ ; SYS only + +-- analyze table SYS.APPLY$_SOURCE_OBJ compute statistics; + +prompt ++ Check for CONSTRAINTS ON TABLES CONFIGURED IN STREAMS ++ +prompt +col LAST_CHANGE format a11 word heading 'Last|Change' +col search_condition format a25 wrap heading 'Search|Condition' +col ref_constraint HEADING 'Reference|Constraint' format a62 +col object format a62 +col constraint_name format a30 + +select distinct object,constraint_name,constraint_type, +status, LAST_CHANGE, rely, Ref_constraint from +( +select c.owner||'.'||c.table_name object,c.constraint_name,c.constraint_type, +status, LAST_CHANGE, rely,r_owner||'.'||r_constraint_name Ref_constraint +from dba_constraints c,dba_capture_prepared_tables p +where c.owner=p.table_owner +and c.table_name=p.table_name +and c.constraint_type in ('P','U','R') +and constraint_name not like 'SYS_IOT%' +UNION ALL +select c.owner||'.'||c.table_name object,c.constraint_name,c.constraint_type, + status, LAST_CHANGE, rely, + r_owner||'.'||r_constraint_name Ref_constraint + from dba_constraints c,dba_apply_instantiated_objects p where + c.owner=p.source_object_owner and c.table_name=p.source_object_name and c.constraint_type in ('P','U','R') + and constraint_name not like 'SYS_IOT%' order by object); + +prompt ++ List INDEXES on TABLES ++ +col object format a40 HEADING 'Table' +col index_name format a40 +col funcidx_status format a10 +col index_type format a10 +col column_name format a30 + +select ic.table_owner||'.'||ic.table_name object, table_type, ic.column_name,i.uniqueness,i.index_type,funcidx_status + from dba_indexes i, dba_apply_instantiated_objects p, dba_ind_columns ic + where + i.owner=p.source_object_owner and i.table_name=p.source_object_name + and ic.index_owner= i.owner and ic.index_name = i.index_name + order by i.owner, i.table_name; + +prompt +prompt ++ List UNSUPPORTED TABLES IN STREAMS ++ +prompt + +select * from dba_streams_unsupported; + + +prompt +prompt ++ XStream Out Support Mode ++ +prompt Lists Streams unsupported tables that can be supported with XStream + +select * from DBA_XSTREAM_OUT_SUPPORT_MODE where support_mode = 'ID KEY'; + + + + +prompt +prompt ++ STREAMS DICTIONARY INFORMATION ++ +prompt Capture processes defined on system +prompt + +col queue format a30 wrap heading 'Queue|Name' +col capture_name format a20 wrap heading 'Capture|Name' +col capture# format 9999 heading 'Capture|Number' +col ruleset format a30 wrap heading 'Positive|Rule Set' +col ruleset2 format a30 wrap heading 'Negative|Rule Set' + +select capture_name,status,purpose, checkpoint_retention_time,logminer_id,capture_type,first_scn, +required_checkpoint_scn from dba_capture order by capture_name; + +select capture_name,capture#,queue_owner||'.'||queue_name queue, + version,first_scn, + ruleset_owner||'.'||ruleset_name ruleset, + negative_ruleset_owner||'.'||negative_ruleset_name ruleset2 + from sys.streams$_capture_process; + +prompt +prompt Apply processes defined on system +prompt +col apply_name format a20 wrap heading 'Apply|Name' +col apply# format 9999 heading 'Apply|Number' + +select apply_name,status,purpose, apply_tag,apply_user,message_delivery_mode,error_number,error_message from dba_apply order by apply_name; + + +select apply_name,apply#,queue_owner||'.'||queue_name queue, + ruleset_owner||'.'||ruleset_name ruleset , + negative_ruleset_owner||'.'||negative_ruleset_name ruleset2 from sys.streams$_apply_process order by apply_name; + +prompt +prompt Propagations defined on system +prompt +col source_queue format a30 wrap heading 'Queue|Name' +col destination format a35 wrap heading 'Destination' + +select source_queue_schema||'.'||source_queue source_queue, + destination_queue_schema||'.'||destination_queue||'@'|| + destination_dblink destination, + ruleset_schema||'.'||ruleset ruleset, + negative_ruleset_schema||'.'||negative_ruleset ruleset2 + from sys.STREAMS$_PROPAGATION_PROCESS; + +prompt +prompt Streams rules defined on system +prompt +col nbr format 9999999999999999 heading 'Number of|Rules' +col streams_name HEADING 'Streams Name' +col streams_type HEADING 'Streams Type' + + +select streams_name,streams_type,count(*) nbr From sys.streams$_rules group by streams_name,streams_type; +prompt +prompt ++ Streams sessions order by action +prompt +prompt SVR is server connection type: DED=DEDICATED; SHR=SHARED +prompt +col module format a30 wrap +col action format a40 wrap +col program format a30 +col process format a15 wrap +col SVR format a3 Heading 'SVR' + +select inst_id,logon_time,sid,serial#,module,action,process, program,status, +decode(server,'DEDICATED','DED','SHR') SVR,event From gv$session where (module = 'GoldenGate' or module like '%tream%' or module like 'OGG%') order by inst_id,module,action; + +prompt +prompt ++ Standby Redo Logs +prompt ordered by thread#, sequence# +select * from v$standby_log order by thread#,sequence#,first_change#; + +prompt order by first_change#, thread#, sequence# +select * from v$standby_log order by first_change#,thread#,sequence#; + +prompt +prompt +prompt ++ +prompt ++ LOGMINER DATABASE MAP ++ +prompt Databases with information in logminer tables +prompt +col global_name format a30 wrap heading 'Global|Name' +col logmnr_uid format 99999999 heading 'Logminer|Identifier'; +col pdb_name format a30 wrap heading 'PDB|Name' + +select global_name,pdb_name,logmnr_uid, flags, logmnr_mdh from system.logmnrc_dbname_uid_map; +prompt +prompt Return to Summary + +prompt +prompt LOGMNR_UID$ table +prompt +select * from system.logmnr_uid$; +prompt +prompt Return to Summary + +prompt +prompt LOGMNR_SESSION$ table +prompt +prompt +select * from system.logmnr_session$; + +prompt ++ LOGMINER PARAMETERS ++ +REM select * from system.logmnr_parameter$; + SELECT session#, type, scn, name, value + FROM SYSTEM.logmnr_parameter$ + ORDER BY session#, name; +prompt +prompt Return to Summary +prompt +prompt ++ LOGMINER STATISTICS ++ +prompt +select c.capture_name, name, value from gv$streams_capture c, gv$logmnr_stats l + where c.logminer_id = l.session_id + order by capture_name,name; +prompt x$krvxsv stats (2times) +col capture_name format a15 +column name format a40 +column value format a30 +select x.inst_id, x.con_id, c.capture_name, x.name,x .value from x$krvxsv x, cdb_capture c where value != '0' and c.logminer_id=x.session_id and c.con_id = x.con_id order by capture_name, name; +prompt +select x.inst_id, x.con_id, c.capture_name, x.name,x .value from x$krvxsv x, cdb_capture c where value != '0' and c.logminer_id=x.session_id and c.con_id = x.con_id order by capture_name, name; + + +prompt Return to Summary + + + +prompt ++ LOGMINER SESSION STATISTICS ++ +prompt +select * from gv$logmnr_session + order by session_name; + +prompt +REM prompt ordered by available_txn +REM select session_name, USED_MEMORY_SIZE, AVAILABLE_TXN,DELIVERED_TXN, BUILDER_WORK_SIZE, PREPARED_WORK_SIZE from gv$logmnr_session order by available_txn; + +prompt +prompt calculate difference, order by session_name +SELECT sysdate, session_name,available_txn, delivered_txn, + available_txn-delivered_txn as difference, + max_memory_size, used_memory_size + FROM gv$logmnr_session order by session_name; + + +prompt +prompt ++ LOGMINER CACHE OBJECTS ++ +prompt Objects of interest to Streams from each source database +prompt +col count(*) format 9999999999999999 heading 'Number of|Interesting|DB Objects'; + +select logmnr_uid, count(*) from system.logmnrc_gtlo group by logmnr_uid; + +prompt +prompt Intcol Verification +prompt + +select logmnr_uid, obj#, objv#, intcol# + from system.logmnrc_gtcs + group by logmnr_uid, obj#, objv#, intcol# + having count(1) > 1 + order by 1,2,3,4; + +prompt +prompt Segcol Verification +prompt Check bug 7033630 if rows returned + +select a.logmnr_uid,a.obj#,a.objv#,a.segcol#, a.intcol# from system.logmnrc_gtcs a + where exists ( select 1 from system.logmnrc_gtcs b where + a.logmnr_uid = b.logmnr_uid and + a.obj# = b.obj# and + a.objv# = b.objv# and + a.segcol# = b.segcol# and + a.segcol# <> 0 and + a.intcol# <> b.intcol#); + +prompt +prompt ++ LCR Cache Information ++ +prompt Internal LCRs +select * from x$kngfl order by streams_name_kngfl,colcount_kngfl; +prompt +prompt External LCRs +select * from x$kngfle order by streams_name_kngfl,colcount_kngfl; +prompt + +prompt +prompt ++ Streams Pool memory Information ++ +prompt +col name heading 'NAME' +col value heading 'VALUE' + +select * from x$knlasg; +prompt +prompt ++ Cache statistics summary ++ +prompt valid only if executed on instance running capture + + +select CAPNAME_KNSTCAPCACHE as capture, CACHENAME_KNSTCAPCACHE as cache, NUM_LCRS_KNSTCAPCACHE as lcrs, NUM_COLS_KNSTCAPCACHE as cols, TOTAL_MEM_KNSTCAPCACHE/(1024*1024) as mem from x$knstcapcache order by 1,2; +prompt +prompt ++ Cache statistics ++ +select * from x$knstcapcache; + +prompt +prompt ++ Queue Memory and Flow Control Values ++ +prompt FLCP_KWQBPMT is threshold for capture flow control +prompt +select * from x$kwqbpmt; + +prompt +prompt ++ PGA Memory ++ +prompt +prompt +col value format 999999999999999999 +select * from gv$pgastat; +prompt + +prompt +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + +prompt +Prompt ++ JOBS in Database ++ +prompt +set recsep each +set recsepchar = +select instance,job,what,log_user,priv_user,schema_user + ,total_time,broken,interval,failures + ,last_date,last_sec,this_date,this_sec,next_date,next_sec + from dba_jobs; + +Prompt ++ Scheduler Jobs in Database ++ +prompt +select OWNER,JOB_NAME,JOB_SUBNAME,JOB_STYLE,JOB_CREATOR +,PROGRAM_OWNER,PROGRAM_NAME,JOB_TYPE,JOB_ACTION +,NUMBER_OF_ARGUMENTS +,SCHEDULE_OWNER,SCHEDULE_NAME,SCHEDULE_TYPE +,START_DATE,REPEAT_INTERVAL,END_DATE +,JOB_CLASS +,ENABLED +,AUTO_DROP +,RESTARTABLE +,STATE +,JOB_PRIORITY +,RUN_COUNT,MAX_RUNS,FAILURE_COUNT,MAX_FAILURES,RETRY_COUNT +,LAST_START_DATE,LAST_RUN_DURATION,NEXT_RUN_DATE,SCHEDULE_LIMIT,MAX_RUN_DURATION +,LOGGING_LEVEL +,STOP_ON_WINDOW_CLOSE +,INSTANCE_STICKINESS +,RAISE_EVENTS +,SYSTEM +,JOB_WEIGHT +,SOURCE +,NUMBER_OF_DESTINATIONS +,DESTINATION_OWNER +,DESTINATION +,CREDENTIAL_OWNER +,CREDENTIAL_NAME +,INSTANCE_ID +,DEFERRED_DROP +,ALLOW_RUNS_IN_RESTRICTED_MODE + from dba_scheduler_jobs; + +set recsep off + +prompt ++ DBA_QUEUE_SCHEDULES ++ +prompt +col start_time heading 'Start Time' +col start_date Heading 'Start Date' +col next_time heading 'Next Time' +col propagation_window Heading 'Propagation|Window' + +select * from dba_queue_schedules +order by schema,qname,destination,message_delivery_mode; +prompt + +prompt +prompt ++ Agents ++ +prompt +select * from dba_aq_agents; +prompt + + +prompt +prompt ++ Agent Privileges ++ +prompt +select * from dba_aq_agent_privs; + + +prompt +prompt ++ Current Long Running Transactions ++ +prompt Current Database transactions open for more than 20 minutes +prompt +col runlength HEAD 'Txn Open|Minutes' format 9999.99 +col sid HEAD 'Session' format a13 +col xid HEAD 'Transaction|ID' format a18 +col terminal HEAD 'Terminal' format a10 +col program HEAD 'Program' format a27 wrap + +select t.inst_id, sid||','||serial# sid,xidusn||'.'||xidslot||'.'||xidsqn xid, +(sysdate - start_date ) * 1440 runlength ,terminal, +program from gv$transaction t, gv$session s +where t.addr=s.taddr and (sysdate - start_date) * 1440 > 20 order by runlength desc; + +prompt +prompt ++ Streams Pool Advice ++ +prompt This info is not populated in CCA-only environments +prompt For CCA, see Streams Pool Statistics section + +col streams_pool_size_factor format 999.99 HEADING 'Stream Pool Size|Factor' +col streams_pool_size_for_estimate HEADING 'Stream Pool Size|Estimate' +col estd_spill_count HEADING 'Spill Count|Estimated' +col estd_spill_time HEADING 'Spill Time |Estimated' +col estd_unspill_count HEADING 'UnSpill Count|Estimated' +col estd_unspill_time HEADING 'UnSpill Time |Estimated' + +select streams_pool_size_factor,streams_pool_size_for_estimate, + estd_spill_count, estd_spill_time, + estd_unspill_count, estd_unspill_time +from v$streams_pool_advice; + +prompt +prompt ++ Streams Pool Statistics ++ +prompt +col Total_memory_allocated Head 'Total MB Memory |Allocated' +col current_size Head 'Streams Pool|Size' +col SGA_TARGET_value Head 'SGA_TARGET|Value' +col shrink_phase Head 'Shrink|Phase' +col Advice_disabled Head 'Advice|Disabled' + +select * from gv$streams_pool_statistics; + + +prompt +select TOTAL_MEMORY_ALLOCATED/(1024*1024) as used_MB, CURRENT_SIZE/(1024*1024) as max_MB, decode(current_size, 0,to_number(null),(total_memory_allocated/current_size)*100) as pct_Streams_pool from gv$streams_pool_statistics; + + +prompt +prompt ++ Streams Pool Statistics for capture ++ +set serveroutput on +select capture_name,sga_used/(1024*1024) as used_MB, sga_allocated/(1024*1024) as alloced_MB, total_messages_captured as msgs_captured, total_messages_enqueued as msgs_enqueued from gv$streams_capture; + + +prompt +prompt ++ Memory Used by Logminer Sessions ++ +select session_name, l.USED_MEMORY_SIZE/(1024*1024) as used_MB, l.MAX_MEMORY_SIZE/(1024*1024) as max_MB, (l.USED_MEMORY_SIZE/l.MAX_MEMORY_SIZE)*100 as pct_logminer_mem_used, decode(s.current_size, 0,to_number(null),(l.max_memory_size/s.current_size)*100) pct_streams_pool from gv$logmnr_session l, gv$streams_pool_statistics s where l.inst_id=s.inst_id order by session_name; + +prompt + +prompt ++ ALERTS History (10.2.0.3+) +prompt +prompt +++ Outstanding alerts +prompt + +select message_type,creation_time,reason, suggested_action, + module_id,object_type, + instance_name||' (' ||instance_number||' )' Instance, + time_suggested +from dba_outstanding_alerts + where creation_time >= sysdate -10 and rownum < 11 + order by creation_time desc; + +prompt +prompt +++ Most recent alerts(max=10) occuring within last 10 days +++ +prompt +column Instance Heading 'Instance Name|(Instance Number)' +select message_Type,creation_time, reason,suggested_action, + module_id,object_type, host_id, + instance_name||' ( '||instance_number||' )' Instance, + resolution,time_suggested +from dba_alert_history where message_group in ('Streams','XStream','GoldenGate') + and creation_time >= sysdate -10 and rownum < 11 +order by creation_time desc; +prompt +prompt +REM prompt ++ Current Contents of the STREAMS Pool ++ +REM prompt Applies only to versions 10.1.0.4+, and to this instance only +REM prompt Do not use this query - can cause database to hang or crash + +REM col comm HEAD 'Allocation Comment' format A18 +REM col alloc_size HEAD 'Bytes Allocated' format 9999999999999999 +REM select ksmchcom comm, sum(ksmchsiz) alloc_size from x$ksmsst group by ksmchcom order by 2 desc; + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + +prompt +prompt ++ init.ora parameters ++ +Prompt Key parameters are aq_tm_processes, job_queue_processes +prompt streams_pool_size, sga_max_size, global_name, compatible +prompt +col type heading 'TYPE' + +show parameters + +set serveroutput on +prompt ++ STREAMS STATISTICS ++ +prompt +alter session set nls_date_format='YYYY-MM-DD HH24:Mi:SS'; +set heading off +set feedback off +select 'STREAMS Health Check (&hcversion) for '||global_name||' on Instance='||instance_name||' generated: '||sysdate o from global_name, v$instance; +set heading on +set feedback on + +prompt ========================================================================================= +prompt +prompt ++ MESSAGES IN BUFFER QUEUE ++ +prompt Check the capture/apply statistics to determine if CCA is in effect for a specific queue +prompt +prompt +col QUEUE format a50 wrap +col "Message Count" format 9999999999999999 heading 'Current Number of|Outstanding|Messages|in Queue' +col "Spilled Msgs" format 9999999999999999 heading 'Current Number of|Spilled|Messages|in Queue' +col "TOtal Messages" format 9999999999999999 heading 'Cumulative |Number| of Messages|in Queue' +col "Total Spilled Msgs" format 9999999999999999 heading 'Cumulative Number|of Spilled|Messages|in Queue' +col "Expired_Msgs" heading 'Current Number of|Expired|Messages|in Queue' + + +SELECT queue_schema||'.'||queue_name Queue, startup_time, num_msgs "Message Count", spill_msgs "Spilled Msgs", cnum_msgs "Total Messages", cspill_msgs "Total Spilled Msgs", expired_msgs FROM gv$buffered_queues order by 1; + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + + +prompt ============================================================================================ +prompt +prompt ++ CAPTURE STATISTICS ++ +COLUMN PROCESS_NAME HEADING "Capture|Process|Number" FORMAT A7 +COLUMN CAPTURE_NAME HEADING 'Capture|Name' FORMAT A10 +COLUMN SID HEADING 'Session|ID' FORMAT 99999999999999 +COLUMN SERIAL# HEADING 'Session|Serial|Number' +COLUMN STATE HEADING 'State' FORMAT A17 +column STATE_CHANGED_TIME HEADING 'Last|State Change|Time' +COLUMN TOTAL_MESSAGES_CAPTURED HEADING 'Redo Entries|Scanned' +COLUMN TOTAL_MESSAGES_ENQUEUED HEADING 'Total|LCRs|Enqueued' +COLUMN TOTAL_MESSAGES_CREATED HEADING 'Total|Messages|Created' +COLUMN CAPTURE_TIME HEADING 'Capture Update|Timestamp' +Column PURPOSE HEADING 'Capture|Purpose' +column CCA Heading 'CCA?' +column SGA_USED Heading 'Streams Pool|Used|MB' +column SGA_ALLOCATED Heading 'Streams Pool| Allocated|MB' +column BYTES_MINED Heading 'Redo|Mined|MB ' +column SESSION_RESTART_SCN Heading 'SCN at |Startup' + +COLUMN LATENCY_SECONDS HEADING 'Latency|Seconds' FORMAT 9999999999999999 +COLUMN CREATE_TIME HEADING 'Event Creation|Time' FORMAT A19 +COLUMN ENQUEUE_TIME HEADING 'Last|Enqueue |Time' FORMAT A19 +COLUMN ENQUEUE_MESSAGE_NUMBER HEADING 'Last Queued|Message Number' FORMAT 9999999999999999 +COLUMN ENQUEUE_MESSAGE_CREATE_TIME HEADING 'Last Queued|Message|Create Time'FORMAT A19 +COLUMN CAPTURE_MESSAGE_CREATE_TIME HEADING 'Last Redo|Message|Create Time' FORMAT A19 +COLUMN CAPTURE_MESSAGE_NUMBER HEADING 'Last Redo|Message Number' FORMAT 9999999999999999 +COLUMN AVAILABLE_MESSAGE_CREATE_TIME HEADING 'Available|Message|Create Time' FORMAT A19 +COLUMN AVAILABLE_MESSAGE_NUMBER HEADING 'Available|Message Number' FORMAT 9999999999999999 +COLUMN STARTUP_TIME HEADING 'Startup Timestamp' FORMAT A19 + +COLUMN MSG_STATE HEADING 'Message State' FORMAT A13 +COLUMN CONSUMER_NAME HEADING 'Consumer' FORMAT A30 + +COLUMN PROPAGATION_NAME HEADING 'Propagation' FORMAT A8 +COLUMN START_DATE HEADING 'Start Date' +COLUMN PROPAGATION_WINDOW HEADING 'Duration' FORMAT 99999 +COLUMN NEXT_TIME HEADING 'Next|Time' FORMAT A8 +COLUMN LATENCY HEADING 'Latency|Seconds' FORMAT 99999999 + + +-- ALTER session set nls_date_format='YYYY-MM-DD HH24:Mi:SS'; + +SELECT SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS_NAME, + c.CAPTURE_NAME, + C.STARTUP_TIME, + c.SID, + c.SERIAL#, + c.purpose, + c.STATE, + c.state_changed_time, + DECODE(c.optimization,0,'NO','YES') cca, + c.TOTAL_MESSAGES_CAPTURED, + c.TOTAL_MESSAGES_ENQUEUED, total_messages_created, + c.sga_used/1024/1024 sga_used, + c.sga_allocated/1024/1024 sga_allocated, + c.bytes_of_redo_mined/1024/1024 bytes_mined, + c.session_restart_scn + FROM gV$STREAMS_CAPTURE c, gV$SESSION s + WHERE c.SID = s.SID AND + c.SERIAL# = s.SERIAL# order by c.capture_name; + +SELECT capture_name, + SYSDATE "Current Time", + capture_time "Capture Process TS", + capture_message_number, + capture_message_create_time , + enqueue_time , + enqueue_message_number, + enqueue_message_create_time , + available_message_number, + available_message_create_time +FROM gV$STREAMS_CAPTURE order by capture_name; +prompt Return to Summary + +COLUMN processed_scn HEADING 'Logminer Last|Processed Message' FORMAT 9999999999999999 +COLUMN AVAILABLE_MESSAGE_NUMBER HEADING 'Last Message|Written to Redo' FORMAT 9999999999999999 +SELECT c.capture_name, l.processed_scn, c.available_message_number +FROM gV$LOGMNR_SESSION l, gv$STREAMS_CAPTURE c +WHERE c.logminer_id = l.session_id order by c.capture_name; + +COLUMN CAPTURE_NAME HEADING 'Capture|Name' FORMAT A15 +COLUMN TOTAL_PREFILTER_DISCARDED HEADING 'Prefilter|Events|Discarded' FORMAT 9999999999999999 +COLUMN TOTAL_PREFILTER_KEPT HEADING 'Prefilter|Events|Kept' FORMAT 9999999999999999 +COLUMN TOTAL_PREFILTER_EVALUATIONS HEADING 'Prefilter|Evaluations' FORMAT 9999999999999999 +COLUMN UNDECIDED HEADING 'Undecided|After|Prefilter' FORMAT 9999999999999999 +COLUMN TOTAL_FULL_EVALUATIONS HEADING 'Full|Evaluations' FORMAT 9999999999999999 + +SELECT CAPTURE_NAME, + TOTAL_PREFILTER_DISCARDED, + TOTAL_PREFILTER_KEPT, + TOTAL_PREFILTER_EVALUATIONS, + (TOTAL_PREFILTER_EVALUATIONS - + (TOTAL_PREFILTER_KEPT + TOTAL_PREFILTER_DISCARDED)) UNDECIDED, + TOTAL_FULL_EVALUATIONS + FROM gV$STREAMS_CAPTURE order by capture_name; + +column elapsed_capture HEADING 'Elapsed Time|Capture|(centisecs)' +column elapsed_rule HEADING 'Elapsed Time|Rule Evaluation|(centisecs)' +column elapsed_enqueue HEADING 'Elapsed Time|Enqueuing Messages|(centisecs)' +column elapsed_lcr HEADING 'Elapsed Time|LCR Creation|(centisecs)' +column elapsed_redo HEADING 'Elapsed Time|Redo Wait|(centisecs)' +column elapsed_Pause HEADING 'Elapsed Time|Paused|(centisecs)' + +SELECT CAPTURE_NAME, ELAPSED_CAPTURE_TIME elapsed_capture, + elapsed_rule_time elapsed_rule, + ELAPSED_ENQUEUE_TIME + elapsed_enqueue, + ELAPSED_LCR_TIME elapsed_lcr, + ELAPSED_REDO_WAIT_TIME elapsed_redo, + ELAPSED_PAUSE_TIME elapsed_pause, + total_messages_created, total_messages_enqueued, total_full_evaluations + from gv$streams_capture order by capture_name; +prompt + +prompt Total Memory (Allocated and Used) for Capture processing (capture+logminer) + +select capture_name, + (c.sga_allocated + l.max_memory_size)/(1024*1024) Tot_MB_Alloc, + (c.sga_used + l.used_memory_size)/(1024*1024) Tot_MB_Used +from gv$streams_capture c, gv$logmnr_session l +where + c.capture_name = l.session_name order by c.capture_name; +prompt Return to Summary + +prompt ========================================================================================= +prompt +prompt ++ Capture CCA Statistics ++ +prompt CCA= Combined Capture and Apply automatic optimization +prompt CCA is in effect if optimization > 0. +prompt Apply message sent statistic info populated if appy is local to capture and there is a 1-1 +prompt correspondence between capture and local apply. +prompt Otherwise, see PROPAGATION Statistics section for message statistics +prompt ========================================================================================= +prompt + + +Column APPLY_NAME HEADING 'Apply|Name' format a20 +COLUMN APPLY_DBLINK HEADING 'Target|DbLink' format a30 +COLUMN APPLY_MESSAGES_SENT Heading 'Msgs Sent|to Apply' +COLUMN APPLY_BYTES_SENT HEADING 'Bytes Sent|to Apply' + + +select capture_name,capture_time,state,optimization, apply_messages_sent,apply_bytes_sent, sid,serial#, apply_name,apply_dblink from gv$streams_capture order by capture_name; + +prompt ============================================================================================ +prompt +prompt ++ LOGMINER STATISTICS ++ +prompt ++ (pageouts imply logminer spill) ++ +COLUMN CAPTURE_NAME HEADING 'Capture|Name' FORMAT A32 +COLUMN NAME HEADING 'Statistic' FORMAT A32 +COLUMN VALUE HEADING 'Value' FORMAT 9999999999999999 + +select c.capture_name, name, value from gv$streams_capture c, gv$logmnr_stats l + where c.logminer_id = l.session_id + and name in ('bytes paged out', 'pageout time (seconds)', + 'bytes of redo mined', 'bytes checkpointed', + 'checkpoint time (seconds)', + 'resume from low memory', 'distinct txns in queue' + ) + order by c.capture_name; + +prompt Return to Summary +prompt +prompt ++ BUFFERED PUBLISHERS ++ +prompt +prompt +select * from gv$buffered_publishers; + + + + +prompt +prompt ++ OPEN STREAMS CAPTURE TRANSACTIONS ++ +prompt + +prompt +** Count **+ +select streams_name, count(*) "Open Transactions",sum(cumulative_message_count) "Total LCRs" from gv$streams_transaction where streams_type='CAPTURE' group by streams_name; +prompt + +prompt +** Count of large transactions (lcrs>10000) **+ +select streams_name, count(*) "Open Transactions",sum(cumulative_message_count) "Total LCRs" from gv$streams_transaction where streams_type='CAPTURE' and cumulative_message_count > 10000 group by streams_name; + +prompt +prompt ++ OPEN STREAMS CAPTURE TRANSACTION DETAILS ++ +select * from gv$streams_transaction where streams_type='CAPTURE' order by streams_name,first_message_number; + +prompt + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + + +prompt ========================================================================== +prompt +prompt ++ XStream Outbound Server Statistics ++ +prompt +prompt ========================================================================== +prompt +prompt + +col sid HEADING 'Session id' +col serial# HEADING 'Serial#' +col state HEADING 'State' +col spid HEADING 'Spid' +col total_messages_sent HEADING 'Total|Messages|Sent' +col Server_name HEADING 'Outbound|Server|Name' format a22 wrap +col total_messages_sent heading 'Total|Messages|Sent' FORMAT 9999999999999999 +col MESSAGE_SEQUENCE Heading 'Message within|Current transaction' +col message_sequence FORMAT 9999999999999999 +col last_sent_message_create_time HEADING 'Last Sent Message|Creation|Time' +col last_sent_message_number HEADING 'Last Sent|Message|SCN' +col last_sent_position HEADING 'Last Sent|Position' +col commitscn Heading 'Source|Commit|SCN' +col commit_position Heading 'Source|Commit|Position' +col bytes_sent Heading 'Total Bytes|Sent' +col committed_data_only Heading 'Committed|Data|Only' +col startup_time Heading 'Server|Startup|Time' +col elapsed_send_time HEADING 'Elapsed|Send|Time' +col Send_time Heading 'Send Time' + +select * from gv$xstream_outbound_server order by server_name; + +prompt +prompt ++ XSTREAM Outbound Progress Table ++ +prompt +col processed_low_position format a40 wrap +col oldest_position format a40 wrap + + +select * From dba_xstream_outbound_progress order by server_name; + +prompt Outbound apply progress +col oldest_message_number HEADING 'Oldest|Message|SCN' +col apply_time HEADING 'Apply|Timestamp' +select ap.* from dba_apply_progress ap, dba_apply a where a.purpose ='XStream Out' and ap.apply_name=a.apply_name order by 1; + +prompt +prompt +prompt ========================================================================================= +prompt +prompt ++ SCHEDULE FOR EACH PROPAGATION ++ +prompt +prompt ========================================================================================= + + +prompt +COLUMN PROPAGATION_NAME Heading 'Propagation|Name' format a17 wrap +COLUMN START_DATE HEADING 'Start Date' +COLUMN PROPAGATION_WINDOW HEADING 'Duration|in Seconds' FORMAT 9999999999999999 +COLUMN NEXT_TIME HEADING 'Next|Time' FORMAT A8 +COLUMN LATENCY HEADING 'Latency|in Seconds' FORMAT 9999999999999999 +COLUMN SCHEDULE_DISABLED HEADING 'Status' FORMAT A8 +COLUMN PROCESS_NAME HEADING 'Process' FORMAT A8 +COLUMN FAILURES HEADING 'Number of|Failures' FORMAT 99 +COLUMN LAST_ERROR_MSG HEADING 'Error Message' FORMAT A50 +COLUMN TOTAL_BYTES HEADING 'Total Bytes|Propagated' FORMAT 9999999999999999 +COLUMN CURRENT_START_DATE HEADING 'Current|Start' FORMAT A17 +COLUMN LAST_RUN_DATE HEADING 'Last|Run' FORMAT A17 +COLUMN NEXT_RUN_DATE HEADING 'Next|Run' FORMAT A17 +COLUMN LAST_ERROR_DATE HEADING 'Last|Error' FORMAT A17 +column message_delivery_mode HEADING 'Message|Delivery|Mode' +column queue_to_queue HEADING 'Q-2-Q' + +SELECT p.propagation_name,TO_CHAR(s.START_DATE, 'HH24:MI:SS MM/DD/YY') START_DATE, + s.PROPAGATION_WINDOW, + s.NEXT_TIME, + s.LATENCY, + DECODE(s.SCHEDULE_DISABLED, + 'Y', 'Disabled', + 'N', 'Enabled') SCHEDULE_DISABLED, + s.PROCESS_NAME, s.total_bytes, + s.FAILURES, + s.message_delivery_mode, + p.queue_to_queue, + s.LAST_ERROR_MSG + FROM DBA_QUEUE_SCHEDULES s, DBA_PROPAGATION p + WHERE p.DESTINATION_DBLINK = + NVL(REGEXP_SUBSTR(s.destination, '[^@]+', 1, 2), s.destination) + AND s.SCHEMA = p.SOURCE_QUEUE_OWNER + AND s.QNAME = p.SOURCE_QUEUE_NAME + AND NVL(REGEXP_SUBSTR(s.destination, '[^@]+', 1, 1), s.destination)='"'||p.destination_queue_owner||'"."'||p.destination_queue_name||'"' + order by message_delivery_mode, propagation_name; + +SELECT p.propagation_name, message_delivery_mode, TO_CHAR(s.LAST_RUN_DATE, 'HH24:MI:SS MM/DD/YY') LAST_RUN_DATE, + TO_CHAR(s.CURRENT_START_DATE, 'HH24:MI:SS MM/DD/YY') CURRENT_START_DATE, + TO_CHAR(s.NEXT_RUN_DATE, 'HH24:MI:SS MM/DD/YY') NEXT_RUN_DATE, + TO_CHAR(s.LAST_ERROR_DATE, 'HH24:MI:SS MM/DD/YY') LAST_ERROR_DATE + FROM DBA_QUEUE_SCHEDULES s, DBA_PROPAGATION p + WHERE p.DESTINATION_DBLINK = + NVL(REGEXP_SUBSTR(s.destination, '[^@]+', 1, 2), s.destination) + AND s.SCHEMA = p.SOURCE_QUEUE_OWNER + AND s.QNAME = p.SOURCE_QUEUE_NAME + AND NVL(REGEXP_SUBSTR(s.destination, '[^@]+', 1, 1), s.destination)='"'||p.destination_queue_owner||'"."'||p.destination_queue_name||'"' + order by message_delivery_mode, propagation_name; + +prompt +prompt ++ EVENTS AND BYTES PROPAGATED FOR EACH PROPAGATION ++ +prompt +COLUMN Elapsed_propagation_TIME HEADING 'Elapsed |Propagation Time|(Seconds)' FORMAT 9999999999999999 +COLUMN TOTAL_NUMBER HEADING 'Total |Events|Propagated' FORMAT 9999999999999999 +COLUMN TOTAL_BYTES HEADING 'Total Bytes|Propagated' FORMAT 9999999999999999 +COLUMN SCHEDULE_STATUS HEADING 'Schedule|Status' +column elapsed_dequeue_time HEADING 'Elapsed|Dequeue Time|(Seconds)' +column elapsed_pickle_time HEADING 'Total Time|(Seconds)' +column total_time HEADING 'Elapsed|Pickle Time|(Seconds)' +column high_water_mark HEADING 'High|Water|Mark' +column acknowledgement HEADING 'Target |Ack' + + +SELECT p.propagation_name,q.message_delivery_mode, DECODE(p.STATUS, + 'DISABLED', 'Disabled', + 'ENABLED', 'Enabled') SCHEDULE_STATUS, + q.instance, + q.total_number TOTAL_NUMBER, q.TOTAL_BYTES , + q.elapsed_dequeue_time/100 elapsed_dequeue_time, q.elapsed_pickle_time/100 elapsed_pickle_time, + q.total_time/100 total_time + FROM DBA_PROPAGATION p, dba_queue_schedules q + WHERE p.DESTINATION_DBLINK = + NVL(REGEXP_SUBSTR(q.destination, '[^@]+', 1, 2), q.destination) + AND q.SCHEMA = p.SOURCE_QUEUE_OWNER + AND q.QNAME = p.SOURCE_QUEUE_NAME + AND NVL(REGEXP_SUBSTR(q.destination, '[^@]+', 1, 1), q.destination)='"'||p.destination_queue_owner||'"."'||p.destination_queue_name||'"' + order by q.message_delivery_mode, p.propagation_name; + +prompt +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + + +prompt ++ PROPAGATION SENDER STATISTICS ++ +prompt +col queue_id HEADING 'Queue ID' +col queue_schema HEADING 'Source|Queue|Owner' +col queue_name HEADING 'Source|Queue|Name' +col dst_queue_schema HEADING 'Destination|Queue|Owner' +col dst_queue_name HEADING 'Destination|Queue|Name' +col dblink Heading 'Destination|Database|Link' +col total_msgs HEADING 'Total|Messages|Sent' +col max_num_per_win HEADING 'Max Msgs|per|Window' +col max_size HEADING 'Max|Size' +col src_queue_schema HEADING 'Source|Queue|Owner' +col src_queue_name HEADING 'Source|Queue|Name' +column elapsed_dequeue_time HEADING 'Elapsed|Dequeue Time|(CentiSecs)' +column elapsed_pickle_time HEADING 'Total Time|(CentiSecs)' +column total_time HEADING 'Elapsed|Pickle Time|(CentiSecs)' +col last_received_msg HEADING 'Last Received|Message|SCN' +col last_received_msg_position HEADING 'Last Received|Message|Position' +column acknowledgement HEADING 'Target |Acknowledgement|SCN' +column acknowledgement_position HEADING 'Target |Acknowledgement|Position' +col session_id HEADING 'Session_id' +col serial# HEADING 'Serial#' +col state HEADING 'State' +col spid HEADING 'Spid' +col elapsed_propagation_time HEADING 'Elapsed|Propagation|Time' +col last_msg_latency HEADING 'Last Message|Latency' +col last_msg_enqueue_time HEADING 'Last Message|Enqueue Time' +col last_msg_propagation_time HEADING 'Last Message|Propagation Time' +col last_lcr_latency HEADING 'Last LCR|Latency' +col last_lcr_creation_time HEADING 'Last LCR|Creation Time' +col last_lcr_propagation_time HEADING 'Last LCR|Propagation Time' +col dst_database_name HEADING 'Destination|Database|Name' + + +SELECT * from v$propagation_sender; + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + +prompt +prompt ++ PROPAGATION RECEIVER STATISTICS ++ +prompt + +column src_queue_name HEADING 'Source|Queue|Name' +column src_dbname HEADING 'Source|Database|Name' +column startup_time HEADING 'Startup|Time' +column elapsed_unpickle_time HEADING 'Elapsed|Unpickle Time|(CentiSeconds' +column elapsed_rule_time HEADING 'Elapsed|Rule Time|(CentiSeconds)' +column elapsed_enqueue_time HEADING 'Elapsed|Enqueue Time|(CentiSeconds)' +col propagation_name HEADING 'Source|Propagation|Name' +col last_received_msg_position HEADING 'Last Received|Message|Position' +column acknowledgement HEADING 'Target |Acknowledgement|SCN' +column acknowledgement_position HEADING 'Target |Acknowledgement|Position' +col session_id HEADING 'Session_id' +col serial# HEADING 'Serial#' +col state HEADING 'State' +col spid HEADING 'Spid' +col total_msgs HEADING 'Total|Messages|Received' + +SELECT src_dbname,propagation_name, +src_queue_schema,src_queue_name, dst_queue_schema,dst_queue_name, +state, total_msgs,high_water_mark, acknowledgement,last_received_msg, +session_id,serial#,spid,startup_time, +elapsed_unpickle_time, elapsed_rule_time, elapsed_enqueue_time +from gv$propagation_receiver order by src_dbname,propagation_name,src_queue_name,dst_queue_name; + +prompt +prompt ++ BUFFERED SUBSCRIBERS ++ +prompt +prompt + +select * from gv$buffered_subscribers order by subscriber_name; + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + + +prompt =========================================================================== +prompt +prompt ++ XStream Inbound Server Statistics ++ +prompt +prompt ============================================================================ +prompt +prompt ++ XStream IN Table Statistics summaries + +select con_id,apply_name, +sum(total_inserts),sum(total_updates),sum(total_deletes), +sum(insert_collisions),sum(update_collisions),sum(delete_collisions), +sum(reperror_records),sum(reperror_ignores), +sum(wait_dependencies), +sum(cdr_insert_row_exists), +sum(cdr_update_row_exists),sum(cdr_update_row_missing), +sum(cdr_delete_row_exists),sum(cdr_delete_row_missing), +sum(cdr_successful_resolutions),sum(cdr_failed_resolutions),sum(cdr_successful_resolutions+cdr_failed_resolutions) cdr_total_resolutions +from gv$xstream_table_stats group by con_id, apply_name; + +prompt ++ XSTREAM IN TABLE STATISTICS by TABLE ++ + +prompt +select con_id,apply_name, +source_table_owner,source_table_name,destination_table_owner,destination_table_name, +sum(total_inserts),sum(total_updates),sum(total_deletes), +sum(insert_collisions),sum(update_collisions),sum(delete_collisions), +sum(reperror_records),sum(reperror_ignores), +sum(wait_dependencies), +sum(cdr_insert_row_exists), +sum(cdr_update_row_exists),sum(cdr_update_row_missing), +sum(cdr_delete_row_exists),sum(cdr_delete_row_missing), +sum(cdr_successful_resolutions),sum(cdr_failed_resolutions),sum(cdr_successful_resolutions+cdr_failed_resolutions) cdr_total_resolutions +from gv$xstream_table_stats group by con_id,apply_name, server_id,source_table_owner,source_table_name,destination_table_owner,destination_table_name; + +prompt + +prompt + + +prompt ** XSTREAM Inbound Progress Table ** +prompt +select * From dba_xstream_inbound_progress order by server_name; +prompt +prompt ============================================================================ +prompt +prompt ++ APPLY STATISTICS ++ +prompt +prompt ============================================================================================ + + +prompt +prompt ++ APPLY Reader Statistics ++ +col oldest_scn_num HEADING 'Oldest|SCN' +col apply_name HEADING 'Apply Name' +col apply_captured HEADING 'Captured or|User-Enqueued LCRs' +col process_name HEADING 'Process' +col state HEADING 'STATE' +col total_messages_dequeued HEADING 'Total Messages|Dequeued' +col total_messages_spilled Heading 'Total Messages|Spilled' +col sga_used HEADING 'SGA Used|MB' +col sga_allocated HEADING 'SGA Allocated|MB' +col oldest_transaction_id HEADING 'Oldest|Transaction' +col total_lcrs_with_dep HEADING 'Total|LCRs with|Dependencies' +col total_lcrs_with_wmdep HEADING 'Total|LCRs with|WM Dependency' +col total_in_memory_lcrs HEADING 'Total|in-Memory|LCRs' +col unassigned_complete_txns HEADING 'Unassigned|Complete|Txns' +col auto_txn_buffer_size HEADING 'Auto|TXN Buffer|Size' + +SELECT ap.APPLY_NAME, + DECODE(ap.APPLY_CAPTURED, + 'YES','Captured LCRS', + 'NO','User-Enqueued','UNKNOWN') APPLY_CAPTURED, + SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS_NAME, + r.STATE, + r.TOTAL_MESSAGES_DEQUEUED, + r.TOTAL_MESSAGES_SPILLED, + r.SGA_USED/1024/1024 sga_used, + r.sga_allocated/1024/1024 sga_allocated, + oldest_scn_num, + oldest_xidusn||'.'||oldest_xidslt||'.'||oldest_xidsqn + oldest_transaction_id, + total_lcrs_with_dep, + total_lcrs_with_wmdep, + total_in_memory_lcrs + FROM gV$STREAMS_APPLY_READER r, gV$SESSION s, DBA_APPLY ap + WHERE r.SID = s.SID AND + r.SERIAL# = s.SERIAL# AND + r.APPLY_NAME = ap.APPLY_NAME order by ap.apply_name; +prompt Return to Summary + +col creation HEADING 'Dequeued Message|Creation|Timestamp' +col last_dequeue HEADING 'Dequeue |Timestamp' +col dequeued_message_number HEADING 'Last |Dequeued Message|Number' +col last_browse_num HEADING 'Last|Browsed Message|Number' +col latency HEADING 'Apply Reader|Latency|(Seconds)' + +SELECT APPLY_NAME, + (DEQUEUE_TIME-DEQUEUED_MESSAGE_CREATE_TIME)*86400 LATENCY, + TO_CHAR(DEQUEUED_MESSAGE_CREATE_TIME,'HH24:MI:SS MM/DD') CREATION, + TO_CHAR(DEQUEUE_TIME,'HH24:MI:SS MM/DD') LAST_DEQUEUE, + DEQUEUED_MESSAGE_NUMBER, + last_browse_num + FROM gV$STREAMS_APPLY_READER order by apply_name; + +col elapsed_dequeue HEADING 'Elapsed Time|Dequeue|(centisecs)' +col elapsed_schedule HEADING 'Elapsed Time|Schedule|(centisecs)' +col elapsed_spill HEADING 'Elapsed Time|Spill|(centisecs)' +col elapsed_idle HEADING 'Elapsed Time|Idle|(centisecs)' + +Select APPLY_NAME, total_messages_dequeued, total_messages_spilled, Elapsed_dequeue_time Elapsed_dequeue, + elapsed_schedule_time elapsed_schedule, + elapsed_spill_time elapsed_spill + from gv$STREAMS_APPLY_READER order by apply_name; +prompt Return to Summary +prompt ========================================================================================= +prompt +prompt ++ Apply CCA Statistics ++ +prompt ========================================================================================= +prompt + + +Column APPLY_NAME HEADING 'Apply|Name' +COLUMN proxy_sid HEADING 'SID of |Apply Receiver' +COLUMN proxy_serial HEADING 'Serial# of |Apply Receiver' +column proxy_spid HEADING'OS PID of|Apply Receiver' format a14 +COLUMN CAPTURE_BYTES_RECEIVED HEADING 'Bytes Recvd|From Capture' + + +select apply_name,state,capture_bytes_received,proxy_spid, proxy_sid,proxy_serial from gv$streams_apply_reader order by apply_name; + + +prompt ============================================================================================ +prompt +prompt ++ APPLY SPILLED TRANSACTIONS ++ + +col APPLY_NAME Head 'Apply Name' +col txn_id HEAD 'Transaction|ID' +col FIRST_SCN Head 'SCN of First| Message in Txn' +col MESSAGE_COUNT Head 'Count of |Messages in Txn' +col FIRST_MESSAGE_CREATE_TIME Head 'First Message|Creation Time' +col SPILL_CREATION_TIME Head ' Spill |Creation Time' +col transaction_id Head 'XStream|Txn ID' +col first_position Head 'XStream|Position' + +select Apply_name, + xidusn||'.'||xidslt||'.'||xidsqn txn_id, + first_scn, + first_message_create_time, + message_count, + spill_creation_time , + first_position, + transaction_id + from dba_apply_SPILL_TXN order by apply_name; + + +prompt ============================================================================================ +prompt +prompt ++ APPLY Coordinator Statistics ++ +col apply_name HEADING 'Apply Name' format a22 wrap +col process HEADING 'Process' format a7 +col RECEIVED HEADING 'Total|Txns|Received' +col ASSIGNED HEADING 'Total|Txns|Assigned' +col APPLIED HEADING 'Total|Txns|Applied' +col ERRORS HEADING 'Total|Txns|w/ Error' +col total_ignored HEADING 'Total|Txns|Ignored' +col total_rollbacks HEADING 'Total|Txns|Rollback' +col WAIT_DEPS HEADING 'Total|Txns|Wait_Deps' +col WAIT_COMMITS HEADING 'Total|Txns|Wait_Commits' +col STATE HEADING 'State' format a10 word + +SELECT ap.APPLY_NAME, + SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS, + c.STATE, + c.TOTAL_RECEIVED RECEIVED, + c.TOTAL_ASSIGNED ASSIGNED, + c.TOTAL_APPLIED APPLIED, + c.TOTAL_ERRORS ERRORS, + c.total_ignored, + c.total_rollbacks, + c.TOTAL_WAIT_DEPS WAIT_DEPS, c.TOTAL_WAIT_COMMITS WAIT_COMMITS, + c.unassigned_complete_txns, + c.auto_txn_buffer_size + FROM gV$STREAMS_APPLY_COORDINATOR c, gV$SESSION s, DBA_APPLY ap + WHERE c.SID = s.SID AND + c.SERIAL# = s.SERIAL# AND + c.APPLY_NAME = ap.APPLY_NAME order by ap.apply_name; + +col lwm_msg_ts HEADING 'LWM Message|Creation|Timestamp' +col lwm_msg_nbr HEADING 'LWM Message|SCN' +col lwm_updated HEADING 'LWM Updated|Timestamp' +col hwm_msg_ts HEADING 'HWM Message|Creation|Timestamp' +col hwm_msg_nbr HEADING 'HWM Message|SCN' +col hwm_updated HEADING 'HWM Updated|Timestamp' +col LWM_POSITION HEADING 'XStream LWM|Position' +col HWM_POSITION HEADING 'XStream HWM|Position' +col PROCESSED_MESSAGE_NUMBER HEADING 'XStream Processed|Position' + +prompt Return to Summary + +SELECT APPLY_NAME, + LWM_MESSAGE_CREATE_TIME LWM_MSG_TS , + LWM_MESSAGE_NUMBER LWM_MSG_NBR , + LWM_TIME LWM_UPDATED, + HWM_MESSAGE_CREATE_TIME HWM_MSG_TS, + HWM_MESSAGE_NUMBER HWM_MSG_NBR , + HWM_TIME HWM_UPDATED, + LWM_POSITION, + HWM_POSITION, + PROCESSED_MESSAGE_NUMBER + FROM gV$STREAMS_APPLY_COORDINATOR; + +SELECT APPLY_NAME, TOTAL_RECEIVED,TOTAL_ASSIGNED,TOTAL_APPLIED, + STARTUP_TIME, + ELAPSED_SCHEDULE_TIME elapsed_schedule, + ELAPSED_IDLE_TIME elapsed_idle +from gv$streams_apply_coordinator order by apply_name; + +prompt ============================================================================================ +prompt +prompt ++ APPLY Server Statistics ++ +col SRVR format 9999 +col ASSIGNED format 9999999999999999 Heading 'Total|Transactions|Assigned' +col MSG_APPLIED heading 'Total|Messages|Applied' FORMAT 9999999999999999 +col MESSAGE_SEQUENCE FORMAT 9999999999999999 +col applied_message_create_time HEADING 'Applied Message|Creation|Timestamp' +col applied_message_number HEADING 'Last Applied|Message|SCN' +col lwm_updated HEADING 'Applied|Timestamp' +col message_sequence HEADING 'Message|Sequence' +col elapsed_apply_time HEADING 'Elapsed|Apply|Time (cs)' +col elapsed_dequeue_time HEADING 'Elapsed|Dequeue|Time (cs)' +col apply_time Heading 'Apply Time' +col total_lcrs_retried HEADING 'Total|LCRs|Retried' +col total_txns_retried HEADING 'Total|TXNs|Retried' +col total_txns_recorded HEADING 'Total|TXNs|Recorded' +col lcr_retry_iteration HEADING 'LCR Retry|Iteration' +col txn_retry_iteration HEADING 'TXN Retry|Iteration' +col TOTAL_ASSIGNED format 9999999999999999 Heading 'Total|Transactions|Assigned' +col TOTAL_MESSAGES_APPLIED heading 'Total|Messages|Applied' FORMAT 9999999999999999 +col cnt HEADING 'Total|Apply|Servers' + +prompt +prompt Apply Server TOTALs Summary +prompt +select apply_name, count(*) cnt, sum(a.total_assigned) total_assigned, sum(a.total_messages_applied) total_messages_applied, + sum(a.total_lcrs_retried) total_lcrs_retried, + sum(a.total_txns_retried) total_txns_retried, + sum(a.total_txns_recorded) total_txns_recorded + FROM gV$STREAMS_APPLY_SERVER a + group by apply_name ; + +prompt +prompt Apply Server Details +SELECT ap.APPLY_NAME, + SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS_NAME, + a.server_id SRVR, + a.STATE, + a.TOTAL_ASSIGNED ASSIGNED, + a.TOTAL_MESSAGES_APPLIED msg_APPLIED, + a.APPLIED_MESSAGE_NUMBER, + a.APPLIED_MESSAGE_CREATE_TIME , + a.MESSAGE_SEQUENCE, + a.lcr_retry_iteration, + a.txn_retry_iteration, + a.total_lcrs_retried, + a.total_txns_retried, + a.total_txns_recorded, + a.elapsed_dequeue_time, a.elapsed_apply_time, a.apply_time + FROM gV$STREAMS_APPLY_SERVER a, gV$SESSION s, DBA_APPLY ap + WHERE a.SID = s.SID AND + a.SERIAL# = s.SERIAL# AND + a.APPLY_NAME = ap.APPLY_NAME order by a.apply_name, a.server_id; + + +Col apply_name Heading 'Apply Name' FORMAT A30 +Col server_id Heading 'Apply Server Number' FORMAT 99999999 +Col sqltext Heading 'Current SQL' FORMAT A64 + +prompt Using V$SQL +select a.inst_id, a.apply_name, a.server_id, q.sql_id,q.sql_fulltext sqltext + from gv$streams_apply_server a, gv$sql q, gv$session s + where a.sid = s.sid and s.sql_hash_value = q.hash_value + and s.sql_address = q.address and s.sql_id = q.sql_id + order by a.apply_name, a.server_id; +prompt + +Col apply_name Heading 'Apply Name' FORMAT A30 +Col server_id Heading 'Apply Server Number' FORMAT 99999999 +Col event Heading 'Wait Event' FORMAT A64 +Col secs Heading 'Seconds Waiting' FORMAT 9999999999999999 +prompt Top Wait event per server +select a.inst_id, a.apply_name, a.server_id, w.event, w.seconds_in_wait secs + from gv$streams_apply_server a, gv$session_wait w + where a.sid = w.sid order by a.apply_name, a.server_id; +prompt + +Col apply_name Heading 'Apply Name' FORMAT A30 +Col server_id Heading 'Apply Server Number' FORMAT 99999999 +Col event Heading 'Wait Event' FORMAT 99999999 +Col total_waits Heading 'Total Waits' FORMAT 9999999999999999 +Col total_timeouts Heading 'Total Timeouts' FORMAT 9999999999999999 +Col time_waited Heading 'Time Waited' FORMAT 9999999999999999 +Col average_wait Heading 'Average Wait' FORMAT 9999999999999999 +Col max_wait Heading 'Maximum Wait' FORMAT 9999999999999999 + +prompt Wait events per server +select a.inst_id, a.apply_name, a.server_id, e.event, e.total_waits, e.total_timeouts, + e.time_waited, e.average_wait, e.max_wait + from gv$streams_apply_server a, gv$session_event e + where a.sid = e.sid order by a.apply_name, a.server_id,e.time_waited desc; + + +col current_txn format a15 wrap +col dependent_txn Heading 'Dependent|Transaction' format a15 wrap +col dep_commitscn Heading 'Dependent|Commit SCN' + +prompt + +prompt Apply server transactions ordered by server_id +prompt +select a.APPLY_NAME, + SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS_NAME, + server_id SRVR,a.state, + a.TOTAL_ASSIGNED ASSIGNED, + a.TOTAL_MESSAGES_APPLIED msg_APPLIED, + xidusn||'.'||xidslt||'.'||xidsqn CURRENT_TXN, + commitscn, + dep_xidusn||'.'||dep_xidslt||'.'||dep_xidsqn DEPENDENT_TXN, + dep_commitscn, + message_sequence, + applied_message_number, + APPLIED_MESSAGE_CREATE_TIME, + apply_time +FROM gV$STREAMS_APPLY_SERVER a, gV$SESSION s +WHERE a.SID = s.SID AND +a.SERIAL# = s.SERIAL# +order by a.apply_name,a.server_id; + +prompt + +prompt Apply server transactions ordered by souce commitscn and dependent transaction scns. +prompt +select a.APPLY_NAME, + SUBSTR(s.PROGRAM,INSTR(S.PROGRAM,'(')+1,4) PROCESS_NAME, + server_id SRVR,a.state, + a.TOTAL_ASSIGNED ASSIGNED, + a.TOTAL_MESSAGES_APPLIED msg_APPLIED, + xidusn||'.'||xidslt||'.'||xidsqn CURRENT_TXN, + commitscn, + dep_xidusn||'.'||dep_xidslt||'.'||dep_xidsqn DEPENDENT_TXN, + dep_commitscn, + message_sequence, + applied_message_number, + APPLIED_MESSAGE_CREATE_TIME, + apply_time +FROM gV$STREAMS_APPLY_SERVER a, gV$SESSION s +WHERE a.SID = s.SID AND +a.SERIAL# = s.SERIAL# + order by a.apply_name,a.commitscn, a.dep_commitscn; + +prompt + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + +prompt +prompt ++ APPLY PROGRESS ++ +col oldest_message_number HEADING 'Oldest|Message|SCN' +col apply_time HEADING 'Apply|Timestamp' +select * from dba_apply_progress order by apply_name; + + +prompt ============================================================================================ +prompt +prompt ++ OPEN STREAMS APPLY TRANSACTIONS ++ +prompt +prompt +** Count **+ +select streams_name, count(*) "Open Transactions",sum(cumulative_message_count) "Total LCRs" from gv$streams_transaction where streams_type='APPLY' group by streams_name; + +prompt +prompt +** Detail **+ +select * from gv$streams_transaction where streams_type='APPLY' order by streams_name,first_message_number; +prompt + + + +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + + +prompt +prompt ++ Split/Merge Activity ++ +prompt + +COLUMN ORIGINAL_CAPTURE_NAME HEADING 'Original|Capture|Process' +column CLONED_CAPTURE_NAME HEADING 'Cloned|Capture|Process' +column original_queue_owner Heading 'Original|Queue|Owner' +column original_queue_name Heading 'Original|Queue|Name' +column cloned_queue_owner Heading 'Cloned|Queue|Owner' +column cloned_queue_name Heading 'Cloned|Queue|Name' +column Original_capture_status HEADING 'Original|Capture|Status' +column Cloned_capture_status Heading 'Cloned|Capture|Status' +column ORiGINAL_STREAMS_NAME HEADING 'Original|Streams|Name' +column Cloned_Streams_name Heading 'Cloned|Streams|Name' +column Streams_type Heading 'Streams|Type' +Column Recoverable_script_id Heading 'Recoverable|Script|ID' +Column Script_status Heading 'Script|Status' +column LAG Heading 'Lag' +column Job_owner Heading 'Job|Owner' +Column Job_name Heading 'Job|Name' +Column Job_state Heading 'Job|State' +Column Error_number Heading 'Error|Number' +Column Error_message Heading 'Error|Message' +COLUMN ACTION_TYPE HEADING 'Action|Type' +COLUMN STATUS_UPDATE_TIME HEADING 'Status|Update|Time' +COLUMN STATUS HEADING 'Status' +COLUMN JOB_NEXT_RUN_DATE HEADING 'Next Job|Run Date' +column creation_time Heading 'Creation|Time' +column Action_threshold Heading 'Action|Threshold' + +Select * + FROM DBA_STREAMS_SPLIT_MERGE + ORDER BY STATUS_UPDATE_TIME DESC; + + +prompt +prompt ++ Split/Merge History (last 10 days) ++ +prompt + +select * From dba_streams_split_merge_hist where creation_time > systimestamp-10order by creation_time desc ; + +prompt + +prompt +prompt ++ Streams Topology ++ +prompt + +exec dbms_streams_advisor_adm.ANALYZE_CURRENT_PERFORMANCE ; +exec dbms_lock.sleep(5); +exec dbms_streams_advisor_adm.ANALYZE_CURRENT_PERFORMANCE; +exec dbms_lock.sleep(5); +exec dbms_streams_advisor_adm.ANALYZE_CURRENT_PERFORMANCE; + +REM exec utl_spadv.show_stats + +column global_name format a50 + +column component_id format 9999999 +column component_name format a25 wrap +column component_db format a25 wrap +column component_type format a20 wrap + +column fromm Heading 'FROM|Component' format 99999 +column source_component_id format 9999999 +column source_component_name HEADING 'Source|Component' format a25 wrap +column source_component_db HEADING 'Source |Database' format a25 wrap +column source_component_type HEADING 'Type' format a20 wrap +column destination_component_id format 9999999 +column destination_component_name HEADING 'Destination|Component' format a25 wrap +column destination_component_db HEADING 'Destination|Database' format a25 wrap +column destination_component_type Heading 'Type' format a20 wrap +column too heading 'TO |Component' format 99999 +column top_session_id HEADING 'Top|Session SID' format 999999 +column top_session_serial# HEADING 'Top|Session Serial#' format 999999 + +prompt ++ Topology Databases ++ +prompt +select * from dba_streams_tp_database; + +prompt +prompt ++ Streams Components ++ +prompt +select * from dba_streams_tp_component order by component_id; + +prompt ++ Streams Component Statistics ++ +prompt +select advisor_run_id +, component_id, component_name, component_db, component_type, sub_component_type +, statistic_time, statistic_name, statistic_value, statistic_unit +, session_id, session_serial# +, advisor_run_time + from dba_streams_tp_component_stat order by component_id, advisor_run_id,statistic_name; + +prompt +prompt ++ Streams Active Paths ++ +prompt +select path_id,position,source_component_id fromm,source_component_db,source_component_name,source_component_type, +destination_component_id too,destination_component_db, destination_component_name,destination_component_type + from dba_streams_tp_component_link order by path_id,position; + +prompt +-- prompt +-- prompt ++ Streams Path Highest Activity Process (Bottleneck) ++ +-- prompt + +select * from dba_streams_tp_path_bottleneck where bottleneck_identified='YES' and advisor_run_id =(select max(advisor_run_id) from dba_streams_tp_path_bottleneck )order by path_id, advisor_run_id; + + +prompt ++ Streams Path Statistics ++ +prompt +col latency format a15 +col transaction_rate format a40 +col message_rate format a40 +select path_id,advisor_run_id,advisor_run_time + ,max(case when statistic_name='LATENCY' then statistic_value||' '||statistic_unit end) latency + ,max(case when statistic_name='TRANSACTION RATE' then statistic_value||' '||statistic_unit end) transaction_rate + ,max(case when statistic_name='MESSAGE RATE' then statistic_value||' '||statistic_unit end) message_rate +from dba_streams_tp_path_stat +group by path_id,advisor_run_id,advisor_run_time +order by 1,2,3; + + + +prompt +prompt ++ Streams Message Tracking ++ +prompt +col message_number Heading 'Message|Number' +col tracking_label Heading 'Tracking|Label' +col Component_name Heading 'Component|Name' +col Component_type Heading 'Component|Type' +col action Heading 'Action' +col action_details Heading 'Action|Details' +col Message_creation_time Heading 'Message Creation|Time' +col tracking_id Heading 'Tracking|ID' +col source_database_name Heading 'Source|Database' +col object_owner Heading 'Owner|Name' +col object_name Heading 'Object|Name' +col command_type Heading 'Command|Type' +col message_position Heading 'Message|Position' + +select * from gv$streams_message_tracking order by tracking_label,timestamp; +prompt + +prompt +prompt ++ STATISTICS on RULES and RULE SETS ++ +prompt ++ +prompt ++ RULE SET STATISTICS ++ +prompt + +col name HEADING 'Name' + +select * from gv$rule_set; + + + + +prompt +prompt ++ RULE STATISTICS ++ +prompt + +select * from gv$rule; +prompt +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + + +prompt ================================================================================ +prompt ++ STREAMS Process Wait Analysis ++ + + +prompt + +set numf 9999999999999 +set pages 9999 +set verify OFF + +COL BUSY FORMAT A4 +COL PERCENTAGE FORMAT 999D9 +COL event wrapped + +-- This variable controls how many minutes in the past to analyze +DEFINE minutes_to_analyze = 30 + +prompt Analysis of last &minutes_to_analyze minutes of Streams processes +prompt + +PROMPT Note: When computing the busiest component, be sure to subtract the percentage where BUSY = 'NO' +PROMPT Note: 'no rows selected' means that the process was performing no busy work, or that no such process exists on the system. +PROMPT Note: A null Wait Event implies running - either on the cpu or waiting for cpu + +prompt +prompt ++ LOGMINER READER PROCESSES ++ + +COL LOGMINER_READER_NAME FORMAT A30 WRAP +BREAK ON LOGMINER_READER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON LOGMINER_READER_NAME; +SELECT c.capture_name || ' - reader' as logminer_reader_name, + ash_capture.event_count, ash_total.total_count, + ash_capture.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash_capture.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash_capture, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$logmnr_process lp, v$streams_capture c +WHERE lp.SID = ash_capture.SESSION_ID + AND lp.serial# = ash_capture.SESSION_SERIAL# + AND lp.role = 'reader' and lp.session_id = c.logminer_id +ORDER BY logminer_reader_name, percentage; + +prompt +prompt ++ LOGMINER PREPARER PROCESSES ++ + +COL LOGMINER_PREPARER_NAME FORMAT A30 WRAP +BREAK ON LOGMINER_PREPARER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON LOGMINER_PREPARER_NAME; +SELECT c.capture_name || ' - preparer' || lp.spid as logminer_preparer_name, + ash_capture.event_count, ash_total.total_count, + ash_capture.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash_capture.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash_capture, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$logmnr_process lp, v$streams_capture c +WHERE lp.SID = ash_capture.SESSION_ID + AND lp.serial# = ash_capture.SESSION_SERIAL# + AND lp.role = 'preparer' and lp.session_id = c.logminer_id +ORDER BY logminer_preparer_name, percentage; + +prompt +prompt ++ LOGMINER BUILDER PROCESSES ++ + +COL LOGMINER_BUILDER_NAME FORMAT A30 WRAP +BREAK ON LOGMINER_BUILDER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON LOGMINER_BUILDER_NAME; +SELECT c.capture_name || ' - builder' as logminer_builder_name, + ash_capture.event_count, ash_total.total_count, + ash_capture.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash_capture.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash_capture, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$logmnr_process lp, v$streams_capture c +WHERE lp.SID = ash_capture.SESSION_ID + AND lp.serial# = ash_capture.SESSION_SERIAL# + AND lp.role = 'builder' and lp.session_id = c.logminer_id +ORDER BY logminer_builder_name, percentage; + + +prompt +prompt ++ CAPTURE PROCESSES ++ + +COL CAPTURE_NAME FORMAT A30 WRAP +BREAK ON CAPTURE_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON CAPTURE_NAME; +SELECT c.capture_name, + ash_capture.event_count, ash_total.total_count, + ash_capture.event_count*100/ash_total.total_count percentage, + DECODE(ash_capture.event, + 'Streams capture: waiting for subscribers to catch up', 'NO', + 'Streams capture: resolve low memory condition', 'NO', + 'Streams capture: waiting for archive log', 'NO', + 'YES') busy, + ash_capture.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash_capture, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$streams_capture c +WHERE c.SID = ash_capture.SESSION_ID and c.serial# = ash_capture.SESSION_SERIAL# +ORDER BY capture_name, percentage; + + + +prompt +prompt ++ PROPAGATION SENDER PROCESSES ++ + +COL PROPAGATION_NAME FORMAT A30 WRAP +BREAK ON PROPAGATION_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON PROPAGATION_NAME; +SELECT ('"'||vps.queue_schema||'"."'||vps.queue_name|| + '"=>'||vps.dblink) as propagation_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + DECODE(ash.event, + 'SQL*Net more data to dblink', 'NO', + 'SQL*Net message from dblink', 'NO', + 'YES') busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$propagation_sender vps, x$kwqps xps +WHERE xps.kwqpssid = ash.SESSION_ID and xps.kwqpsser = ash.SESSION_SERIAL# + AND xps.kwqpsqid = vps.queue_id and vps.dblink = xps.KWQPSDBN +ORDER BY propagation_name, percentage; + + + +prompt +prompt ++ PROPAGATION RECEIVER PROCESSES ++ + +COL PROPAGATION_RECEIVER_NAME FORMAT A30 WRAP +BREAK ON PROPAGATION_RECEIVER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON PROPAGATION_RECEIVER_NAME; +SELECT ('"'||vpr.src_queue_schema||'"."'||vpr.src_queue_name|| + '@' || vpr.src_dbname|| '"=>'||global_name) + as propagation_receiver_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + DECODE(ash.event, + 'Streams AQ: enqueue blocked on low memory', 'NO', + 'Streams AQ: enqueue blocked due to flow control', 'NO', + 'YES') busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$propagation_receiver vpr, x$kwqpd xpd, global_name +WHERE xpd.kwqpdsid = ash.SESSION_ID and xpd.kwqpdser = ash.SESSION_SERIAL# + AND xpd.kwqpdsqn = vpr.src_queue_name + AND xpd.kwqpdsqs = vpr.src_queue_schema and xpd.kwqpddbn = vpr.src_dbname +ORDER BY propagation_receiver_name, percentage; + + + +prompt +prompt ++ APPLY READER PROCESSES ++ + +COL APPLY_READER_NAME FORMAT A30 WRAP +BREAK ON APPLY_READER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON APPLY_READER_NAME; +SELECT a.apply_name as apply_reader_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + DECODE(ash.event, + 'rdbms ipc message', 'NO', + 'YES') busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$streams_apply_reader a +WHERE a.sid = ash.SESSION_ID and a.serial# = ash.SESSION_SERIAL# +ORDER BY apply_reader_name, percentage; + + + +prompt +prompt ++ APPLY COORDINATOR PROCESSES ++ + +COL APPLY_COORDINATOR_NAME FORMAT A30 WRAP +BREAK ON APPLY_COORDINATOR_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON APPLY_COORDINATOR_NAME; +SELECT a.apply_name as apply_coordinator_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$streams_apply_coordinator a +WHERE a.sid = ash.SESSION_ID and a.serial# = ash.SESSION_SERIAL# +ORDER BY apply_coordinator_name, percentage; + + + +prompt +prompt ++ APPLY SERVER PROCESSES ++ + +COL APPLY_SERVER_NAME FORMAT A30 WRAP +BREAK ON APPLY_SERVER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON APPLY_SERVER_NAME; +SELECT a.apply_name || ' - ' || a.server_id as apply_server_name, + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$streams_apply_server a +WHERE a.sid = ash.SESSION_ID and a.serial# = ash.SESSION_SERIAL# +ORDER BY apply_server_name, percentage; + +prompt +prompt ++ XStream OUTBOUND SERVER PROCESSES ++ + +COL SERVER_NAME FORMAT A30 WRAP +BREAK ON SERVER_NAME; +COMPUTE SUM LABEL 'TOTAL' OF PERCENTAGE ON SERVER_NAME; +SELECT a.server_name , + ash.event_count, ash_total.total_count, + ash.event_count*100/ash_total.total_count percentage, + 'YES' busy, + ash.event +FROM (SELECT SESSION_ID, + SESSION_SERIAL#, + EVENT, + COUNT(sample_time) AS EVENT_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60 + GROUP BY session_id, session_serial#, event) ash, + (SELECT COUNT(DISTINCT sample_time) AS TOTAL_COUNT + FROM v$active_session_history + WHERE sample_time > sysdate - &minutes_to_analyze/24/60) ash_total, + v$xstream_outbound_server a +WHERE a.sid = ash.SESSION_ID and a.serial# = ash.SESSION_SERIAL# +ORDER BY server_name, percentage; + +prompt +prompt Configuration: Database Queue Capture Propagation Apply XStream + +prompt Analysis: History Rules Notifications Configuration Performance Wait Analysis Topology + + + +prompt Statistics: Streams Statistics Queue Capture Propagation Apply Apply_Errors XStream Outbound XStream Inbound + +prompt +set heading off +select 'STREAMS Health Check (&hcversion) for '||global_name||' on Instance='||instance_name||' generated: '||sysdate o from global_name, v$instance; +set heading on + +set timing off +set markup html off +clear col +clear break +spool +prompt Turning Spool OFF!!! +spool off + + diff --git a/vdh/streams_summary.sql b/vdh/streams_summary.sql new file mode 100644 index 0000000..6977d72 --- /dev/null +++ b/vdh/streams_summary.sql @@ -0,0 +1,20 @@ +prompt +prompt CAPTURE INFO +prompt ============= +@list_capture + +prompt +prompt PROPAGATION INFO +prompt ================ +@list_propagation + +prompt +prompt APPLY INFO +prompt ========== +@list_apply + + +prompt +prompt APPLY ERRORS (SUMMARY PER TABLE) +prompt ================================ +@list_apply_errors_tables diff --git a/vdh/strip_characters.sql b/vdh/strip_characters.sql new file mode 100644 index 0000000..c7932aa --- /dev/null +++ b/vdh/strip_characters.sql @@ -0,0 +1,41 @@ +create or replace package body utils + +as + + g_bad_chars varchar2(256); + g_a_bad_char varchar2(256); + + function strip_bad( p_string in varchar2 ) return varchar2 + + is + + begin + + return replace( translate( p_string, + g_bad_chars, + g_a_bad_char + ), + substr( g_a_bad_char, + 1, + 1 + ), + '' + ); + end; + + + begin + for i in 0..255 loop + if ( i not between ascii('a') and ascii('z') AND + i not between ascii('A') and ascii('Z') AND + i not between ascii('0') and ascii('9') ) + then + g_bad_chars := g_bad_chars || chr(i); + end if; + end loop; + g_a_bad_char := rpad( + substr(g_bad_chars,1,1), + length(g_bad_chars), + substr(g_bad_chars,1,1)); + end; + / diff --git a/vdh/su.sql b/vdh/su.sql new file mode 100644 index 0000000..569af88 --- /dev/null +++ b/vdh/su.sql @@ -0,0 +1,22 @@ +whenever sqlerror exit +column password new_value pw + +declare + l_passwd varchar2(45); +begin + select password into l_passwd + from sys.dba_users + where username = upper('&1'); +end; +/ + +select password + from sys.dba_users + where username = upper( '&1' ) +/ + +alter user &1 identified by Hello; +connect &1/hello +alter user &1 identified by values '&pw'; +show user +whenever sqlerror continue diff --git a/vdh/switch_job_class_services.sql b/vdh/switch_job_class_services.sql new file mode 100644 index 0000000..8069a9b --- /dev/null +++ b/vdh/switch_job_class_services.sql @@ -0,0 +1,36 @@ +accept l_source_db char prompt 'Source database name: ' +accept l_dest_db char prompt 'Target database name: ' + +set verify off + +DECLARE + + l_source_str varchar2(30) := '(.*)&l_source_db.(.*)'; + l_replace_str varchar2(30) := '\1&l_dest_db.\2'; + +BEGIN + + for job_class in + ( select + owner || '.' || job_class_name as name, + service, + regexp_replace(service, l_source_str, l_replace_str) new_service + from + dba_scheduler_job_classes + where + service is not null + ) + loop + + dbms_output.put_line('job_class ' || job_class.name || ' old service name: ' || job_class.service || ' new service name ' || job_class.new_service); + + dbms_scheduler.set_attribute + ( name => job_class.name, + attribute => 'service', + value => job_class.new_service + ); + + end loop; + +END; +/ diff --git a/vdh/table_size.sql b/vdh/table_size.sql new file mode 100644 index 0000000..43450ce --- /dev/null +++ b/vdh/table_size.sql @@ -0,0 +1,20 @@ +set lines 155 +compute sum of totalsize_megs on report +break on report +col owner for a20 +col segment_name for a30 +col segment_type for a10 +col totalsize_megs for 999,999.9 +select * from ( +select owner, segment_name, segment_type type, +sum(bytes/1024/1024) as totalsize_megs, +tablespace_name +from dba_segments +where owner like nvl('&owner',owner) +and segment_name like nvl('&table_name',segment_name) +and segment_type like nvl('&type',segment_type) +group by owner, segment_name, tablespace_name, segment_type +order by 4 desc +) +where rownum < 30 +order by 4; diff --git a/vdh/table_size2.sql b/vdh/table_size2.sql new file mode 100644 index 0000000..02abfaa --- /dev/null +++ b/vdh/table_size2.sql @@ -0,0 +1,16 @@ +set lines 155 +compute sum of totalsize_megs on report +break on report +col owner for a20 +col segment_name for a30 +col segment_type for a10 +col totalsize_megs for 999,999.9 +select s.owner, segment_name, +sum(bytes/1024/1024) as totalsize_megs, compress_for +from dba_segments s, dba_tables t +where s.owner = t.owner +and t.table_name = s.segment_name +and s.owner like nvl('&owner',s.owner) +and t.table_name like nvl('&table_name',segment_name) +group by s.owner, segment_name, compress_for +order by 3; diff --git a/vdh/tablespace_info_pre_9.sql b/vdh/tablespace_info_pre_9.sql new file mode 100644 index 0000000..ff41d4c --- /dev/null +++ b/vdh/tablespace_info_pre_9.sql @@ -0,0 +1,24 @@ +select A.tablespace_name, A.contents, extent_management EM, allocation_type AT, + decode(allocation_type, 'UNIFORM',next_extent/1024,'') NE, + B.max_mb, B.curr_mb, + (B.max_mb - B.curr_mb) + nvl(c.free_mb,0) free_mb, + ((100/B.max_mb)*(B.max_mb - B.curr_mb + nvl(c.free_mb,0))) pct_free +from dba_tablespaces A, + ( select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_temp_files + group by tablespace_name + ) B, + ( select tablespace_name, sum(bytes)/1024/1024 free_mb + from dba_free_space + group by tablespace_name + ) C +where A.tablespace_name = B.tablespace_name + and A.tablespace_name = C.tablespace_name(+) +order by tablespace_name +/ diff --git a/vdh/tablespace_usage.sql b/vdh/tablespace_usage.sql new file mode 100644 index 0000000..c889d9b --- /dev/null +++ b/vdh/tablespace_usage.sql @@ -0,0 +1,22 @@ +set linesize 120 +set pagesize 999 + +column max_mb format 9G999G999D99 +column used_mb format 9G999G999D99 +column curr_mb format 9G999G999D99 +column pct_max_used format 999D99 +column pct_curr_used format 999D99 + +select B.tablespace_name, max_mb, B.curr_mb, nvl(used_mb,0) used_mb, + nvl2(used_mb,((100/max_mb)*used_mb),0) pct_max_used, + nvl2(used_mb,((100/curr_mb)*used_mb),0) pct_curr_used +from ( select tablespace_name, sum(bytes)/1024/1024 used_mb + from dba_segments + group by tablespace_name + ) A, + ( select tablespace_name, sum(greatest(bytes, maxbytes))/1024/1024 max_mb, sum(bytes)/1024/1024 curr_mb + from dba_data_files + group by tablespace_name + ) B +where A.tablespace_name(+) = B.tablespace_name +order by tablespace_name; diff --git a/vdh/tblspace_growth.sql b/vdh/tblspace_growth.sql new file mode 100644 index 0000000..2e25338 --- /dev/null +++ b/vdh/tblspace_growth.sql @@ -0,0 +1,12 @@ +column tbs_mb format 9G999G999D99 +column tbs_max_mb format 9G999G999D99 +column tbs_used_mb format 9G999G999D99 +break on name skip 1 + +select name, rtime, tablespace_size * tbs.block_size/1024/1024 tbs_mb, tablespace_maxsize * tbs.block_size/1024/1024 tbs_max_mb, + tablespace_usedsize * tbs.block_size/1024/1024 tbs_used_mb +from dba_hist_tbspc_space_usage tbssp, v$tablespace ts, dba_tablespaces tbs +where tbssp.tablespace_id = ts.ts# + and ts.name = tbs.tablespace_name + and tbs.tablespace_name = '&tablespace_name' +order by name, snap_id; diff --git a/vdh/tblspace_growth_per_day.sql b/vdh/tblspace_growth_per_day.sql new file mode 100644 index 0000000..4c1a104 --- /dev/null +++ b/vdh/tblspace_growth_per_day.sql @@ -0,0 +1,39 @@ +column tbs_mb format 9G999G999G999D99 +column tbs_max_mb format 9G999G999G999D99 +column tbs_used_mb format 9G999G999G999D99 + +break on tablespace_name skip 1 + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + + +with hist_per_day +as +( select /*+ MATERIALIZE */ + tablespace_id, day, first_snap + from ( select tablespace_id, trunc(to_date(rtime, 'MM/DD/YYYY HH24:MI:SS')) day, + first_value(snap_id) + over ( partition by tablespace_id, trunc(to_date(rtime, 'MM/DD/YYYY HH24:MI:SS')) + order by to_date(rtime, 'MM/DD/YYYY HH24:MI:SS') + ) first_snap + from dba_hist_tbspc_space_usage + ) + group by tablespace_id, day, first_snap +) +select tbs.tablespace_name, hpd.day, tbssp.tablespace_size * tbs.block_size/1024/1024 tbs_mb, + tbssp.tablespace_maxsize * tbs.block_size/1024/1024 tbs_max_mb, + tbssp.tablespace_usedsize * tbs.block_size/1024/1024 tbs_used_mb +from hist_per_day hpd, dba_hist_tbspc_space_usage tbssp, v$tablespace ts, dba_tablespaces tbs +where hpd.first_snap = tbssp.snap_id + and hpd.tablespace_id = tbssp.tablespace_id + and tbssp.tablespace_id = ts.ts# + and ts.name = tbs.tablespace_name + and tbs.tablespace_name like nvl('&1', '%') +order by tbs.tablespace_name, snap_id; + +clear breaks + +undef 1 diff --git a/vdh/tbs_free_space_warning.sql b/vdh/tbs_free_space_warning.sql new file mode 100644 index 0000000..c8c22af --- /dev/null +++ b/vdh/tbs_free_space_warning.sql @@ -0,0 +1,18 @@ +select A.tablespace_name, b_allocated/1024/1024 mb_allocated, b_max/1024/1024 mb_max, + (b_free + (b_max - b_allocated))/1024/1024 mb_free, + round(((100 * (b_free + (b_max - b_allocated))) / b_max), 2) pct_free, + C.autoextensible +from ( select tablespace_name, sum(bytes) as b_free + from dba_free_space + group by tablespace_name + ) B, + ( select tablespace_name, sum(bytes) as b_allocated, sum(greatest(bytes, maxbytes)) b_max, + max(autoextensible) autoextensible + from dba_data_files + group by tablespace_name + ) C, dba_tablespaces A +where A.tablespace_name = B.tablespace_name + and A.tablespace_name = C.tablespace_name + and A.contents = 'PERMANENT' + -- and round(((100 * (b_free + (b_max - b_allocated))) / b_max), 2) <= 20 +order by pct_free asc; diff --git a/vdh/tbs_info.sql b/vdh/tbs_info.sql new file mode 100644 index 0000000..912d313 --- /dev/null +++ b/vdh/tbs_info.sql @@ -0,0 +1,48 @@ +set verify off + +set feedback off +column inputpar01 new_value 1 noprint +select 1 inputpar01 from dual where 1=2; +set feedback 6 + + +set linesize 250 +set pagesize 9999 +column max_mb format 999G999G990D99 +column curr_mb format 999G999G990D99 +column free_mb format 999G999G990D99 +column pct_free format 900D99 heading "%FREE" +column NE format 9G999G999D99 +column SSM format a6 +column AT format a8 +column tablespace_name format a30 +column EM format a10 +column contents format a15 +column block_size format 99999 heading BSIZE + +select A.tablespace_name, A.bigfile, A.plugged_in, A.status, block_size, A.contents, extent_management EM, allocation_type AT, + segment_space_management ssm, decode(allocation_type, 'UNIFORM',next_extent/1024,'') NE, + B.max_mb, B.curr_mb, + (B.max_mb - B.curr_mb) + nvl(c.free_mb,0) free_mb, + ((100/B.max_mb)*(B.max_mb - B.curr_mb + nvl(c.free_mb,0))) pct_free +from dba_tablespaces A, + ( select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_data_files + group by tablespace_name + union all + select tablespace_name, sum(bytes)/1024/1024 curr_mb, + sum(greatest(bytes, maxbytes))/1024/1024 max_mb + from dba_temp_files + group by tablespace_name + ) B, + ( select tablespace_name, sum(bytes)/1024/1024 free_mb + from dba_free_space + group by tablespace_name + ) C +where A.tablespace_name = B.tablespace_name + and A.tablespace_name = C.tablespace_name(+) + and A.tablespace_name like nvl('&1', '%') +order by tablespace_name; + +undef 1 diff --git a/vdh/temp_enqwaits.sql b/vdh/temp_enqwaits.sql new file mode 100644 index 0000000..33547c3 --- /dev/null +++ b/vdh/temp_enqwaits.sql @@ -0,0 +1,475 @@ +/********************************************************************** + * File: temp_enqwaits.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 05Feb01 + * + * Description: + * Script to execute the ENQWAITS stored procedure as a "PL/SQL + * anonymous block", so that the procedure can be run under SYS + * without creating any permanent objects (like a stored procedure)... + * + * Modifications: + * TGorman 05Feb01 written + * TGorman 21May01 adapted from "run_enqwaits.sql" and "enqwaits.sql" + * + *********************************************************************/ +set serveroutput on size 1000000 +set echo off feedback off trimspool on verify off +col instance new_value V_INSTANCE noprint +select lower(replace(t.instance,chr(0),'')) instance +from sys.v_$thread t, + sys.v_$parameter p +where p.name = 'thread' +and t.thread# = to_number(decode(p.value,'0','1',p.value)); + +REM +REM If your installation is running Oracle Apps R11+, then leave the following +REM two substitution variables containing blank values. +REM +REM If your database is not running Oracle Apps, then assign the string "/*" +REM (i.e. start comment) to the substitution variable START_ORACLE_APPS_CODE and +REM the string "*/" (i.e. end comment) to the substitution variables +REM END_ORACLE_APPS_CODE. +REM +define START_ORACLE_APPS_CODE="--" +define END_ORACLE_APPS_CODE="--" + +spool enqwaits_&&V_INSTANCE + +declare + -- + b_GetRelatedSessions boolean := FALSE; + -- + cursor get_sqltext(in_address in raw) + is + select SQL_TEXT + from SYS.V_$SQLTEXT + where ADDRESS = in_address + order by PIECE; + -- + cursor get_waiters + is + select SID, + TYPE, + DECODE(TYPE, + 'BL','Buffer hash table', + 'CF','Control File Transaction', + 'CI','Cross Instance Call', + 'CS','Control File Schema', + 'CU','Bind Enqueue', + 'DF','Data File', + 'DL','Direct-loader index-creation', + 'DM','Mount/startup db primary/secondary instance', + 'DR','Distributed Recovery Process', + 'DX','Distributed Transaction Entry', + 'FI','SGA Open-File Information', + 'FS','File Set', + 'IN','Instance Number', + 'IR','Instance Recovery Serialization', + 'IS','Instance State', + 'IV','Library Cache InValidation', + 'JQ','Job Queue', + 'KK','Redo Log "Kick"', + 'LS','Log Start/Log Switch', + 'MB','Master Buffer hash table', + 'MM','Mount Definition', + 'MR','Media Recovery', + 'PF','Password File', + 'PI','Parallel Slaves', + 'PR','Process Startup', + 'PS','Parallel Slaves Synchronization', + 'RE','USE_ROW_ENQUEUE Enforcement', + 'RT','Redo Thread', + 'RW','Row Wait', + 'SC','System Commit Number', + 'SH','System Commit Number HWM', + 'SM','SMON', + 'SQ','Sequence Number', + 'SR','Synchronized Replication', + 'SS','Sort Segment', + 'ST','Space Transaction', + 'SV','Sequence Number Value', + 'TA','Transaction Recovery', + 'TD','DDL enqueue', + 'TE','Extend-segment enqueue', + 'TM','DML enqueue', + 'TS','Temporary Segment', + 'TT','Temporary Table', + 'TX','Transaction', + 'UL','User-defined Lock', + 'UN','User Name', + 'US','Undo Segment Serialization', + 'WL','Being-written redo log instance', + 'WS','Write-atomic-log-switch global enqueue', + 'XA','Instance Attribute', + 'XI','Instance Registration', + decode(substr(TYPE,1,1), + 'L','Library Cache ('||substr(TYPE,2,1)||')', + 'N','Library Cache Pin ('||substr(TYPE,2,1)||')', + 'Q','Row Cache ('||substr(TYPE,2,1)||')', + '????')) LOCK_TYPE, + REQUEST, + DECODE(REQUEST, + 0, '', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + '') MODE_REQUESTED, + ID1, + ID2 + from SYS.V_$LOCK + where REQUEST > 0 + and LMODE = 0; + -- + cursor get_blockers(in_type in varchar2, + in_id1 in number, + in_id2 in number, + in_sid in number) + is + select SID, + TYPE, + DECODE(TYPE, + 'BL','Buffer hash table', + 'CF','Control File Transaction', + 'CI','Cross Instance Call', + 'CS','Control File Schema', + 'CU','Bind Enqueue', + 'DF','Data File', + 'DL','Direct-loader index-creation', + 'DM','Mount/startup db primary/secondary instance', + 'DR','Distributed Recovery Process', + 'DX','Distributed Transaction Entry', + 'FI','SGA Open-File Information', + 'FS','File Set', + 'IN','Instance Number', + 'IR','Instance Recovery Serialization', + 'IS','Instance State', + 'IV','Library Cache InValidation', + 'JQ','Job Queue', + 'KK','Redo Log "Kick"', + 'LS','Log Start/Log Switch', + 'MB','Master Buffer hash table', + 'MM','Mount Definition', + 'MR','Media Recovery', + 'PF','Password File', + 'PI','Parallel Slaves', + 'PR','Process Startup', + 'PS','Parallel Slaves Synchronization', + 'RE','USE_ROW_ENQUEUE Enforcement', + 'RT','Redo Thread', + 'RW','Row Wait', + 'SC','System Commit Number', + 'SH','System Commit Number HWM', + 'SM','SMON', + 'SQ','Sequence Number', + 'SR','Synchronized Replication', + 'SS','Sort Segment', + 'ST','Space Transaction', + 'SV','Sequence Number Value', + 'TA','Transaction Recovery', + 'TD','DDL enqueue', + 'TE','Extend-segment enqueue', + 'TM','DML enqueue', + 'TS','Temporary Segment', + 'TT','Temporary Table', + 'TX','Transaction', + 'UL','User-defined Lock', + 'UN','User Name', + 'US','Undo Segment Serialization', + 'WL','Being-written redo log instance', + 'WS','Write-atomic-log-switch global enqueue', + 'XA','Instance Attribute', + 'XI','Instance Registration', + decode(substr(TYPE,1,1), + 'L','Library Cache ('||substr(TYPE,2,1)||')', + 'N','Library Cache Pin ('||substr(TYPE,2,1)||')', + 'Q','Row Cache ('||substr(TYPE,2,1)||')', + '????')) LOCK_TYPE, + LMODE, + DECODE(LMODE, + 0, '--Waiting--', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + '') MODE_HELD, + ID1, + ID2 + from SYS.V_$LOCK + where TYPE = in_type + and ID1 = in_id1 + and ID2 = in_id2 + and SID <> in_sid + and LMODE > 0 + and REQUEST = 0; + -- + cursor get_related_sessions(in_sid in number) + is + select S.SID, + S.SERIAL# SNBR, + S.LOGON_TIME, + S.USERNAME, + S.SQL_ADDRESS, + S.STATUS, + S.OSUSER, + P.SPID, + T.XIDUSN || '.' || T.XIDSLOT || '.' || T.XIDSQN TXN_ID, + T.STATUS TXN_STATUS, + T.START_TIME TXN_START_TIME, + T.USED_UBLK, + T.USED_UREC + from SYS.V_$SESSION S1, + SYS.V_$SESSION S, + SYS.V_$PROCESS P, + SYS.V_$TRANSACTION T + where S1.SID = in_sid + and S.PADDR = S1.PADDR + and P.ADDR = S1.PADDR + and T.ADDR (+) = S1.TADDR + order by decode(S.SID, in_sid, 0, S.SID); + -- + cursor get_dml_locks(in_sid in number) + is + select o.OWNER, + o.OBJECT_TYPE type, + o.OBJECT_NAME name, + decode(l.LMODE, + 0, 'REQUESTED=' || + DECODE(l.REQUEST, + 0, '--Waiting--', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + ''), + 'HELD=' || + DECODE(l.LMODE, + 0, '--Waiting--', + 1, 'Null', + 2, 'Sub-Share', + 3, 'Sub-Exclusive', + 4, 'Share', + 5, 'Share/Sub-Excl', + 6, 'Exclusive', + '')) lmode + from sys.V_$LOCK l, + sys.DBA_OBJECTS o + where l.sid = in_sid + and l.type = 'TM' + and o.object_id = l.id1; + -- + v_waiter_username varchar2(30); + v_blocker_username varchar2(30); + v_errcontext varchar2(80); + v_errmsg varchar2(300); + -- +begin +-- +v_errcontext := 'open/fetch get_waiters'; +for w in get_waiters loop + -- + dbms_output.put_line('.'); + v_errcontext := 'open/fetch get_related_sessions (waiters)'; + for rw in get_related_sessions(w.sid) loop + -- + if w.sid = rw.sid then + -- + v_waiter_username := rw.username; + -- +&&START_ORACLE_APPS_CODE + v_errcontext := 'query waiters OraApps user info'; + begin + select u.user_name + into v_waiter_username + from apps.fnd_logins l, + apps.fnd_user u + where l.spid = rw.spid + and l.login_name = rw.osuser + and l.end_time is null + and l.start_time = + (select max(ll.start_time) + from apps.fnd_logins ll + where ll.spid = l.spid + and ll.end_time is null) + and u.user_id = l.user_id; + exception + when no_data_found then + v_waiter_username := ''; + when too_many_rows then + null; + end; +&&END_ORACLE_APPS_CODE + -- + v_errcontext := 'PUT_LINE waiters session/lock info'; + dbms_output.put_line(substr('Waiter: SID=' || rw.sid || + ' (' || rw.status || '), Logged on at ' || + to_char(rw.logon_time,'DD-MON HH24:MI'),1,78)); + dbms_output.put_line('....... REQUESTED LOCK|MODE=' || + w.type || ' (' || w.lock_type || + ') | ' || w.mode_requested || + ' (' || w.id1 || ',' || w.id2 || ')'); + dbms_output.put_line('....... AppsUser=' || v_waiter_username); + dbms_output.put_line('....... OS PID=' || rw.spid); + -- + else + -- + if b_GetRelatedSessions = FALSE then + -- + exit; -- ...exit from "get_related_sessions" cursor loop + -- + end if; + -- + v_errcontext := 'PUT_LINE related waiters session info'; + dbms_output.put_line(substr('... Related waiting SID=' || + rw.sid || ' (' || rw.status || + '), Logged on at ' || + to_char(rw.logon_time,'DD-MON HH24:MI'),1,78)); + -- + end if; + -- + dbms_output.put_line('.... TXN ID=' || rw.txn_id || + ' (' || rw.txn_status || ') started=' || + rw.txn_start_time || ' undo=' || rw.used_ublk || 'b/' || + rw.used_urec || 'r'); + -- + v_errcontext := 'open/fetch get_dml_locks (waiters)'; + for d in get_dml_locks(rw.sid) loop + -- + dbms_output.put_line(substr('....... DML Lock: ' || + d.owner || '.' || d.name || ' (' || d.type || ') - LOCK ' || + d.lmode,1,78)); + -- + v_errcontext := 'fetch/close get_dml_locks (waiters)'; + -- + end loop; /* end of "get_dml_locks (waiters)" cursor loop */ + -- + dbms_output.put_line('.... SQL Statement currently executing:'); + v_errcontext := 'open/fetch waiters get_sqltext'; + for t in get_sqltext(rw.sql_address) loop + -- + dbms_output.put_line('....... ' || t.sql_text); + -- + v_errcontext := 'fetch/close waiters get_sqltext'; + -- + end loop; /* end of "get_sqltext" cursor loop */ + -- + v_errcontext := 'fetch/close get_related_sessions (waiters)'; + -- + end loop; /* end of "get_related_sessions (waiters)" cursor loop */ + -- + v_errcontext := 'open/fetch get_blockers'; + for b in get_blockers(w.type, w.id1, w.id2, w.sid) loop + -- + v_errcontext := 'open/fetch get_related_sessions (blockers)'; + for rb in get_related_sessions(b.sid) loop + -- + if b.sid = rb.sid then + -- + v_blocker_username := rb.username; + -- + &&START_ORACLE_APPS_CODE + v_errcontext := 'query blockers OraApps user info'; + begin + select u.user_name + into v_blocker_username + from apps.fnd_logins l, + apps.fnd_user u + where l.spid = rb.spid + and l.login_name = rb.osuser + and l.end_time is null + and l.start_time = + (select max(ll.start_time) + from apps.fnd_logins ll + where ll.spid = l.spid + and ll.end_time is null) + and u.user_id = l.user_id; + exception + when no_data_found then + v_blocker_username := ''; + when too_many_rows then + null; + end; + &&END_ORACLE_APPS_CODE + -- + v_errcontext := 'PUT_LINE blockers session/lock info'; + dbms_output.put_line(substr('==>BLOCKER: SID=' || rb.sid || + ',' || rb.snbr || + ' (' || rb.status || '), Logged on at ' || + to_char(rb.logon_time,'DD-MON HH24:MI'),1,78)); + dbms_output.put_line('........... HELD LOCK|MODE=' || + b.type || ' (' || b.lock_type || + ') | ' || b.mode_held); + dbms_output.put_line('........... AppsUser=' || + v_blocker_username); + dbms_output.put_line('........... OS PID=' || rb.spid); + -- + else + -- + if b_GetRelatedSessions = FALSE then + -- + exit; -- ...exit from "get_related_sessions" cursor loop + -- + end if; + -- + v_errcontext := 'PUT_LINE related blockers session info'; + dbms_output.put_line(substr('...... Related BLOCKER: SID=' + || rb.sid || ' (' || rb.status || + '), Logged on at ' || + to_char(rb.logon_time,'DD-MON HH24:MI'),1,78)); + -- + end if; + -- + dbms_output.put_line('....... TXN ID=' || rb.txn_id || + ' (' || rb.txn_status || ') started=' || + rb.txn_start_time || ' undo=' || rb.used_ublk || 'b/' || + rb.used_urec || 'r'); + -- + v_errcontext := 'open/fetch get_dml_locks (blockers)'; + for d in get_dml_locks(rb.sid) loop + -- + dbms_output.put_line(substr('........... DML Lock: ' || + d.owner || '.' || d.name || ' (' || d.type || ') - LOCK ' || + d.lmode,1,78)); + -- + v_errcontext := 'fetch/close get_dml_locks (blockers)'; + -- + end loop; /* end of "get_dml_locks (blockers)" cursor loop */ + -- + dbms_output.put_line('....... SQL currently executing (not necessarily the blocking SQL):'); + v_errcontext := 'open/fetch get_sqltext (blockers)'; + for t in get_sqltext(rb.sql_address) loop + -- + dbms_output.put_line('........... ' || t.sql_text); + -- + v_errcontext := 'fetch/close get_sqltext (blockers)'; + -- + end loop; /* end of "get_sqltext (blockers)" cursor loop */ + -- + v_errcontext := 'fetch/close get_related_sessions (blockers)'; + -- + end loop; /* end of "get_related_sessions (blockers)" cursor loop */ + -- + v_errcontext := 'fetch/close get_blockers'; + -- + end loop; /* end of "get_blockers" cursor loop */ + -- + v_errcontext := 'fetch/close get_waiters'; + -- +end loop; /* end of "get_waiters" cursor loop */ +-- +exception + when others then + v_errmsg := substr(sqlerrm, 1, 300); + raise_application_error(-20001, v_errcontext||': '||v_errmsg); +end; +/ +spool off +ed enqwaits_&&V_INSTANCE..lst diff --git a/vdh/temp_usage.sql b/vdh/temp_usage.sql new file mode 100644 index 0000000..4de186b --- /dev/null +++ b/vdh/temp_usage.sql @@ -0,0 +1,32 @@ +set linesize 250 +set pagesize 999 + +column sid format a15 +column sql_text format a50 word_wrapped +column size_mb format 999G999D99 + + +select + u.inst_id, + s.sid || ',' || s.serial# sid, + s.username, u.tablespace, a.sql_text, + round(((u.blocks*p.value)/1024/1024),2) size_mb +from + gv$sort_usage u, + gv$session s, + gv$sqlarea a, + v$parameter p +where + s.saddr = u.session_addr + and s.inst_id = u.inst_id + and a.address (+) = s.sql_address + and a.hash_value (+) = s.sql_hash_value + and a.inst_id (+) = s.inst_id + and p.name = 'db_block_size' + and s.username != 'SYSTEM' +group by + u.inst_id, + s.sid || ',' || s.serial#, + s.username, a.sql_text, u.tablespace, + round(((u.blocks*p.value)/1024/1024),2) +; diff --git a/vdh/test_pxq_hint.sql b/vdh/test_pxq_hint.sql new file mode 100644 index 0000000..3d75ec9 --- /dev/null +++ b/vdh/test_pxq_hint.sql @@ -0,0 +1,8 @@ +-- this should cause queueing, but the hinted statements in test_pxq_hint2.sql should jump the queue +alter system set "_parallel_statement_queuing"=true; +alter system set parallel_force_local=true; +alter system set parallel_servers_target=32; +!ss.sh test_pxq_hint1.sql 10 kso/kso +!ss.sh test_pxq_hint2.sql 2 kso/kso +-- select /*+ parallel (a 16) */ avg(pk_col) from kso.skew a where col1 > 0; +-- select /*+ NO_STMT_QUEUING parallel (a 16) */ avg(pk_col) from kso.skew a where col1 > 0; diff --git a/vdh/test_pxq_hint1.sql b/vdh/test_pxq_hint1.sql new file mode 100644 index 0000000..ead2721 --- /dev/null +++ b/vdh/test_pxq_hint1.sql @@ -0,0 +1 @@ +select /*+ parallel (a 16) */ avg(pk_col) from kso.skew3 a where col1 > 0; diff --git a/vdh/test_pxq_hint2.sql b/vdh/test_pxq_hint2.sql new file mode 100644 index 0000000..1367f75 --- /dev/null +++ b/vdh/test_pxq_hint2.sql @@ -0,0 +1 @@ +select /*+ NO_STATEMENT_QUEUING parallel (a 16) */ avg(pk_col) from kso.skew3 a where col1 > 0; diff --git a/vdh/test_retrieving_bind_variables.txt b/vdh/test_retrieving_bind_variables.txt new file mode 100644 index 0000000..3183572 --- /dev/null +++ b/vdh/test_retrieving_bind_variables.txt @@ -0,0 +1,63 @@ +declare + + b_myadr VARCHAR2(20); + b_myadr1 VARCHAR2(20); + qstring VARCHAR2(100); + b_anybind NUMBER; + + cursor my_statement is + select address from v$sql + group by address; + + cursor getsqlcode is + select substr(sql_text,1,60) + from v$sql + where address = b_myadr; + + cursor kglcur is + select kglhdadr from x$kglcursor + where kglhdpar = b_myadr + and kglhdpar != kglhdadr + and kglobt09 = 0; + + cursor isthisliteral is + select kkscbndt + from x$kksbv + where kglhdadr = b_myadr1; + +begin + + dbms_output.enable(10000000); + + open my_statement; + loop + Fetch my_statement into b_myadr; + open kglcur; + fetch kglcur into b_myadr1; + if kglcur%FOUND Then + open isthisliteral; + fetch isthisliteral into b_anybind; + if isthisliteral%NOTFOUND Then + open getsqlcode; + fetch getsqlcode into qstring; + dbms_output.put_line('Literal:'||qstring||' address: '||b_myadr); + close getsqlcode; + else + open getsqlcode; + fetch getsqlcode into qstring; + if instr(qstring, 'employees') > 0 then + dbms_output.put_line('var:'||qstring||' kkscbndt: ' || b_anybind ||' address: '||b_myadr); + end if; + close getsqlcode; + end if; + close isthisliteral; + end if; + close kglcur; + Exit When my_statement%NOTFOUND; + End loop; + close my_statement; +end; +/ + + +. \ No newline at end of file diff --git a/vdh/timezone_convert.sql b/vdh/timezone_convert.sql new file mode 100644 index 0000000..7d96280 --- /dev/null +++ b/vdh/timezone_convert.sql @@ -0,0 +1,12 @@ +create or replace function timezone_convert (UnixTimeA in number,UnixTimeZoneA in varchar2) return Date +is + JulDate date := to_date('01-JAN-1970 00:00:00','DD-MON-YYYY HH24:MI:SS'); + LocalTimeZone varchar(6); +begin + select dbtimezone into LocalTimeZone from dual ; + return CAST(FROM_TZ(CAST(JulDate+(UnixTimeA/86400) AS TIMESTAMP), UnixTimeZoneA) AT TIME ZONE LocalTimeZone AS DATE); +exception + when OTHERS then raise_application_error(-20015,'Error in timezone_convert',true); +end; +/ +sho errors function timezone_convert diff --git a/vdh/tmp.sql b/vdh/tmp.sql new file mode 100644 index 0000000..1e12d68 --- /dev/null +++ b/vdh/tmp.sql @@ -0,0 +1,2236 @@ + +alter TABLE ACCOUNTS move + tablespace ARTIS_OBJ; + +alter INDEX ACC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ADDRESS_CHANGES_I move + tablespace ARTIS_OBJ; + +alter INDEX ACI_BATCH_NR_I rebuild + tablespace ARTIS_NDX; + +alter INDEX ACI_LOAD_DATE_I rebuild + tablespace ARTIS_NDX; + +alter INDEX ACI_U rebuild + tablespace ARTIS_NDX; + +alter TABLE ADDRESS_DED move + tablespace ARTIS_OBJ; + +alter INDEX ADD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ADDRESS_DED_OLD move + tablespace ARTIS_OBJ; + +alter TABLE ADDRESS_ENHANCE_STATUSES move + tablespace ARTIS_OBJ; + +alter INDEX AES_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ADDRESS_ENH_RUN_LOG move + tablespace ARTIS_OBJ; + +alter INDEX AEL_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ADDRESS_KEYWORDS move + tablespace ARTIS_OBJ; + +alter INDEX AKW_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ADDRESS_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX ATY_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ARCHIVE_DETAILS move + tablespace ARTIS_OBJ; + +alter INDEX ARD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ARCHIVE_LOG move + tablespace ARTIS_OBJ; + +alter INDEX ARL_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ARTIS_ARTICLES move + tablespace ARTIS_OBJ; + +alter INDEX AAT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ARTIS_ARTICLE_SALES move + tablespace ARTIS_OBJ; + +alter INDEX AAS_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX AAS_TICKET_NO_I rebuild + tablespace ARTIS_NDX; + +alter TABLE ARTIS_PROMOTIONS move + tablespace ARTIS_OBJ; + +alter INDEX APM_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX APM_TICKET_NO_I rebuild + tablespace ARTIS_NDX; + +alter TABLE ARTIS_VISITS move + tablespace ARTIS_OBJ; + +alter INDEX AVI_CARD_NO_I rebuild + tablespace ARTIS_NDX; + +alter INDEX AVI_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ATTRIBUTE_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX ATT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE BAD_WORDS move + tablespace ARTIS_OBJ; + +alter INDEX BDW_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE BRANDS move + tablespace ARTIS_OBJ; + +alter INDEX BRA_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE BRIDGE_REF_CODES move + tablespace ARTIS_OBJ; + +alter INDEX BRC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE CAMPAIGNS move + tablespace ARTIS_OBJ; + +alter INDEX CAM_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX CAM_UK rebuild + tablespace ARTIS_NDX; + +alter TABLE CELL_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX CET_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE CHANNELS move + tablespace ARTIS_OBJ; + +alter INDEX CHA_CHT_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX CHA_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE CHANNEL_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX CHT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE CHA_COSTS move + tablespace ARTIS_OBJ; + +alter INDEX CHX_COC_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX CHX_COT_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX CHX_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COMMUNICATIONS move + tablespace ARTIS_OBJ; + +alter INDEX COM_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX COM_UK rebuild + tablespace ARTIS_NDX; + +alter TABLE COMMUNICATION_CHANNELS move + tablespace ARTIS_OBJ; + +alter INDEX COC_CVE_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX COC_UK rebuild + tablespace ARTIS_NDX; + +alter INDEX COC_DC_CODE_I rebuild + tablespace ARTIS_NDX; + +alter INDEX COC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COMMUNICATION_VEHICLES move + tablespace ARTIS_OBJ; + +alter INDEX CVE_COM_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX CVE_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX CVE_VET_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX CVE_UK rebuild + tablespace ARTIS_NDX; + +alter TABLE COMPANIES move + tablespace ARTIS_OBJ; + +alter INDEX CNY_EXT_REF_I rebuild + tablespace ARTIS_NDX; + +alter INDEX CNY_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COMPANY_CST_RELATIONS move + tablespace ARTIS_OBJ; + +alter INDEX CCR_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COMPANY_FLEX_FIELDS move + tablespace ARTIS_OBJ; + +alter INDEX CFF_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COMPANY_IDS_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX CIT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COMPANY_STRUCTURE move + tablespace ARTIS_OBJ; + +alter INDEX CST_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COMPANY_VARIATIONS move + tablespace ARTIS_OBJ; + +alter INDEX CMV_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COM_COSTS move + tablespace ARTIS_OBJ; + +alter INDEX COX_COM_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX COX_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX COX_COT_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE CORRECTED_LANGUAGES move + tablespace ARTIS_OBJ; + +alter INDEX CRL_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COST_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX COT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COUNT_COMMON_CONDITIONS move + tablespace ARTIS_OBJ; + +alter INDEX CCD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE COUNT_TABLE_CONDITIONS move + tablespace ARTIS_OBJ; + +alter INDEX CTC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE CS_EXPORT_LOGS move + tablespace ARTIS_OBJ; + +alter INDEX CEL_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE CUMULATION_PER_CARD move + tablespace ARTIS_OBJ; + +alter INDEX CPC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DATA_EXTRACTS move + tablespace ARTIS_OBJ; + +alter INDEX DEX_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DATA_EXTRACT_COLUMNS move + tablespace ARTIS_OBJ; + +alter INDEX DEC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DATA_EXTRACT_CONDITIONS move + tablespace ARTIS_OBJ; + +alter INDEX DECO_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DEBUGTAB move + tablespace ARTIS_OBJ; + +alter INDEX SYS_C0018682 rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_ANALYSIS move + tablespace ARTIS_OBJ; + +alter INDEX ANAL_DRL_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX ANAL_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_COMPARE_FIELDS move + tablespace ARTIS_OBJ; + +alter INDEX COMP_FLD_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX COMP_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_COMPARE_PROCESSES move + tablespace ARTIS_OBJ; + +alter INDEX CPRO_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX CPRO_PROC_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_COPY_CHILD_TABLES move + tablespace ARTIS_OBJ; + +alter INDEX CCT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_DEDUPLICATION_MASTERS move + tablespace ARTIS_OBJ; + +alter INDEX FLD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_DEDUPLICATION_RUN_LOG move + tablespace ARTIS_OBJ; + +alter INDEX DRL_FLD_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX DRL_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_INDIVIDUAL move + tablespace ARTIS_OBJ; + +alter INDEX MATCHKEY_1_NDX rebuild + tablespace ARTIS_NDX; + +alter INDEX URN_NDX rebuild + tablespace ARTIS_NDX; + +alter INDEX PARENT_URN_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_MATCHKEY_DETAILS move + tablespace ARTIS_OBJ; + +alter INDEX MDET_FLD_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX MDET_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_MAYBE_DATA move + tablespace ARTIS_OBJ; + +alter TABLE DED_MAYBE_POINTS move + tablespace ARTIS_OBJ; + +alter INDEX REC_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX REC_UK1 rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_PROCESSES move + tablespace ARTIS_OBJ; + +alter INDEX PROC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_RECORD_POINTS move + tablespace ARTIS_OBJ; + +alter INDEX REC_CHILD_URN_UI rebuild + tablespace ARTIS_NDX; + +alter INDEX REC_UID_UK rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_SOURCE_KEY_MAPPINGS move + tablespace ARTIS_OBJ; + +alter INDEX SKM_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_T_ANALYSIS_SUMMARY move + tablespace ARTIS_OBJ; + +alter TABLE DED_T_IND_STRUCTURE move + tablespace ARTIS_OBJ; + +alter INDEX STC_PARENT_URN_I rebuild + tablespace ARTIS_NDX; + +alter TABLE DED_T_MATCHKEYS_VALUE move + tablespace ARTIS_OBJ; + +alter TABLE DED_T_MATCHKEY_ROWS move + tablespace ARTIS_OBJ; + +alter TABLE DED_T_MKEY_SQL_STMT move + tablespace ARTIS_OBJ; + +alter TABLE DED_T_MKEY_STMT move + tablespace ARTIS_OBJ; + +alter TABLE DED_T_URN move + tablespace ARTIS_OBJ; + +alter TABLE DEPARTMENTS move + tablespace ARTIS_OBJ; + +alter INDEX DEP_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DEPARTMENT_VARIATIONS move + tablespace ARTIS_OBJ; + +alter INDEX DPV_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DEX_TEMPLATES move + tablespace ARTIS_OBJ; + +alter INDEX DEXT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DEX_TEMPLATE_DETAILS move + tablespace ARTIS_OBJ; + +alter INDEX DTD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DFM_DETAILS move + tablespace ARTIS_OBJ; + +alter INDEX DFD_U rebuild + tablespace ARTIS_NDX; + +alter TABLE DFM_HEADER move + tablespace ARTIS_OBJ; + +alter INDEX DFH_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DFM_MEMBERS move + tablespace ARTIS_OBJ; + +alter INDEX DMM_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DFM_RESULTS move + tablespace ARTIS_OBJ; + +alter INDEX DFR_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX DFR_UK rebuild + tablespace ARTIS_NDX; + +alter TABLE DM_200310 move + tablespace ARTIS_OBJ; + +alter INDEX DM_200310_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE DRINK_GIFT_VOLUME move + tablespace ARTIS_OBJ; + +alter TABLE EDUCARD_TRANS move + tablespace ARTIS_OBJ; + +alter INDEX EDT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE EMAIL_ERROR_LOG move + tablespace ARTIS_OBJ; + +alter INDEX EEL_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE EMAIL_RESPONSES move + tablespace ARTIS_OBJ; + +alter INDEX EMR_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ENHANCEMENTS move + tablespace ARTIS_OBJ; + +alter INDEX ENH_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE ENHANCEMENTS_LOG move + tablespace ARTIS_OBJ; + +alter INDEX ENL_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX ENL_UK rebuild + tablespace ARTIS_NDX; + +alter TABLE ENHANCEMENTS_RESULTS move + tablespace ARTIS_OBJ; + +alter INDEX ERE_ENC_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX ERE_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX ERE_ENL_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE ENHANCEMENTS_RUN move + tablespace ARTIS_OBJ; + +alter INDEX ENR_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE FAMILY_CARD move + tablespace ARTIS_OBJ; + +alter INDEX FAMILY_CARD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE FS_CELL_74 move + tablespace ARTIS_OBJ; + +alter INDEX FS_CELL_74_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE FS_CELL_75 move + tablespace ARTIS_OBJ; + +alter INDEX FS_CELL_75_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE FS_CELL_78 move + tablespace ARTIS_OBJ; + +alter INDEX FS_CELL_78_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE FS_CELL_79 move + tablespace ARTIS_OBJ; + +alter INDEX FS_CELL_79_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE FULFILMENT_ITEMS move + tablespace ARTIS_OBJ; + +alter INDEX FUI_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE GIFT_HABIT_CODES move + tablespace ARTIS_OBJ; + +alter INDEX GHC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE GRADES move + tablespace ARTIS_OBJ; + +alter TABLE IMP_ARTIS_10 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_10_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_100 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_100_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_101 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_101_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_102 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_102_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_103 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_103_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_104 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_104_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_105 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_105_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_106 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_106_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_107 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_107_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_108 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_108_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_109 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_109_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_11 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_11_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_110 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_110_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_111 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_111_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_112 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_112_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_113 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_113_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_114 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_114_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_115 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_115_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_116 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_116_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_12 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_12_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_13 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_13_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_14 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_14_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_15 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_15_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_16 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_16_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_18 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_18_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_19 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_19_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_20 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_20_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_21 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_21_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_22 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_22_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_23 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_23_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_24 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_24_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_25 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_25_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_26 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_26_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_27 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_27_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_28 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_28_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_29 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_29_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_3 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_3_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_30 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_30_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_31 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_31_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_32 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_32_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_33 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_33_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_34 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_34_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_35 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_36 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_37 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_38 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_39 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_4 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_4_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_40 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_41 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_41_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_42 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_42_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_43 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_43_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_44 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_44_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_45 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_45_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_46 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_46_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_47 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_47_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_48 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_48_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_49 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_49_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_5 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_5_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_50 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_50_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_51 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_52 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_52_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_53 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_53_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_54 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_54_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_55 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_56 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_57 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_57_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_58 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_58_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_59 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_6 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_60 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_60_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_61 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_61_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_62 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_62_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_63 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_63_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_64 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_64_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_65 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_65_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_66 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_66_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_67 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_67_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_68 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_68_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_69 move + tablespace ARTIS_IMP; + +alter TABLE IMP_ARTIS_7 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_7_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IMP_ARTIS_7_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_70 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_70_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_71 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_71_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_72 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_72_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_73 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_73_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_74 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_74_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_75 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_75_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_76 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_76_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_77 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_77_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_78 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_78_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_79 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_79_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_8 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_8_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_80 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_80_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_81 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_81_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_82 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_82_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_83 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_83_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_84 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_84_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_85 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_85_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_86 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_86_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_87 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_87_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_88 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_88_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_89 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_89_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_9 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_9_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_90 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_90_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_91 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_91_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_92 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_92_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_93 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_93_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_94 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_94_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_95 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_95_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_96 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_96_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_97 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_97_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_98 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_98_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE IMP_ARTIS_99 move + tablespace ARTIS_IMP; + +alter INDEX IMP_ARTIS_99_NDX rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUALS move + tablespace ARTIS_OBJ; + +alter INDEX IND_ACC_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IND_PARENT_URN_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IND_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX IND_LBR_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IND_EXTERNAL_REF_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IND_CUSTOMER_ID_I rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUALS_JN move + tablespace ARTIS_OBJ; + +alter TABLE INDIVIDUALS_ORG_ADDR move + tablespace ARTIS_OBJ; + +alter INDEX IOA_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_ADDR_ENH_HIS move + tablespace ARTIS_OBJ; + +alter INDEX IEH_IND_I rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_ANSWERS move + tablespace ARTIS_OBJ; + +alter INDEX INA_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX INA_QUA_ANSWER_UID_I rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_ATTRIBUTES move + tablespace ARTIS_OBJ; + +alter INDEX IAT_ATT_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IAT_INR_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IAT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_CARS move + tablespace ARTIS_OBJ; + +alter INDEX INC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_FAMILY move + tablespace ARTIS_OBJ; + +alter INDEX INF_INF_UID_I rebuild + tablespace ARTIS_NDX; + +alter INDEX INF_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX INF_REL_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX INF_UK rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_FLEX_FIELDS move + tablespace ARTIS_OBJ; + +alter INDEX IFF_FIELD10_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IFF_ID_FAM rebuild + tablespace ARTIS_NDX; + +alter INDEX IFF_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_OTHER_CARS move + tablespace ARTIS_OBJ; + +alter INDEX INO_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_PREFERENCES move + tablespace ARTIS_OBJ; + +alter INDEX PPR_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX PPR_PRO_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_PROD_CATS move + tablespace ARTIS_OBJ; + +alter INDEX ICA_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX IPC_CAT_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IPC_GHC_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IPC_PHC_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_RESPONSES move + tablespace ARTIS_OBJ; + +alter INDEX INR_BATCH_NUMBER_I rebuild + tablespace ARTIS_NDX; + +alter INDEX INR_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX INR_PARENT_URN_I rebuild + tablespace ARTIS_NDX; + +alter INDEX INR_IND_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX INR_FUI_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX INR_COC_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_SEGMENTS move + tablespace ARTIS_OBJ; + +alter INDEX INS_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX INS_SET_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_SUPPRESSIONS move + tablespace ARTIS_OBJ; + +alter INDEX ISU_COM_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX ISU_SUT_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX ISU_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE INDIVIDUAL_VALUE move + tablespace ARTIS_OBJ; + +alter INDEX INV_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX INV_VCA_I rebuild + tablespace ARTIS_NDX; + +alter TABLE INDUSTRIES move + tablespace ARTIS_OBJ; + +alter INDEX IDS_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE IND_CNY move + tablespace ARTIS_OBJ; + +alter INDEX ICM_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE JOB_NUMBERS move + tablespace ARTIS_OBJ; + +alter INDEX JNM_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE JOB_TITLES move + tablespace ARTIS_OBJ; + +alter INDEX JBT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE JOB_TITLE_VARIATIONS move + tablespace ARTIS_OBJ; + +alter INDEX JTV_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LANGUAGES move + tablespace ARTIS_OBJ; + +alter INDEX LAN_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_20030409 move + tablespace ARTIS_OBJ; + +alter INDEX LB_20030409_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_20030409B move + tablespace ARTIS_OBJ; + +alter INDEX LB_20030409B_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_20030527 move + tablespace ARTIS_OBJ; + +alter INDEX LB_20030527_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_20030527B move + tablespace ARTIS_OBJ; + +alter INDEX LB_20030527B_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_20031020 move + tablespace ARTIS_OBJ; + +alter INDEX LB_20031020_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX LB_20031204 rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_ARTICLE move + tablespace ARTIS_OBJ; + +alter INDEX LB_ARTICLE_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_ARTICLE_E move + tablespace ARTIS_OBJ; + +alter TABLE LB_DIM_GROUPS move + tablespace ARTIS_OBJ; + +alter INDEX LB_DIM_GROUPS_CARD_NR_U rebuild + tablespace ARTIS_NDX; + +alter INDEX LB_DIM_GROUPS_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_DIM_THEMES move + tablespace ARTIS_OBJ; + +alter INDEX LB_DIM_THEMES_CARD_U rebuild + tablespace ARTIS_NDX; + +alter INDEX LB_DIM_THEMES_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_FACTS move + tablespace ARTIS_OBJ; + +alter INDEX LB_FACTS_CARD_U rebuild + tablespace ARTIS_NDX; + +alter INDEX LB_FACTS_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LB_ORDERS move + tablespace ARTIS_OBJ; + +alter INDEX LB_ORDERS_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_BATCH_DETAILS move + tablespace ARTIS_OBJ; + +alter INDEX LBD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_BATCH_HEADERS move + tablespace ARTIS_OBJ; + +alter INDEX LBH_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_BATCH_RECORDS move + tablespace ARTIS_OBJ; + +alter INDEX LBR_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX LBR_QUS_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_COLUMN_ALIAS move + tablespace ARTIS_OBJ; + +alter INDEX LCA_COLUMN_ALIAS_NDX rebuild + tablespace ARTIS_NDX; + +alter INDEX LCA_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_COLUMN_REFS move + tablespace ARTIS_OBJ; + +alter INDEX LCR_LTR_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX LCR_UK rebuild + tablespace ARTIS_NDX; + +alter INDEX LCR_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX LCR_LVP_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_ERROR_LOG move + tablespace ARTIS_OBJ; + +alter INDEX LEG_LBR_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX LEG_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX LEG_URN_REC_GRP_I rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_SESSION_ERRORS move + tablespace ARTIS_OBJ; + +alter TABLE LOAD_SPEC_DETAILS move + tablespace ARTIS_OBJ; + +alter INDEX LSD_ATT_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX LSD_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX LSD_LOS_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_SQL_TEXT move + tablespace ARTIS_OBJ; + +alter INDEX LST_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_STATUS move + tablespace ARTIS_OBJ; + +alter INDEX LSS_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_TABLE_REFS move + tablespace ARTIS_OBJ; + +alter INDEX LTR_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE LOAD_VALID_PROCS move + tablespace ARTIS_OBJ; + +alter INDEX LVP_LVP2_UK rebuild + tablespace ARTIS_NDX; + +alter INDEX LVP_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE MATCH_ADDRESS_POINTS move + tablespace ARTIS_OBJ; + +alter TABLE MATCH_PREF move + tablespace ARTIS_OBJ; + +alter INDEX MAT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE MF03_DG_RESP move + tablespace ARTIS_OBJ; + +alter INDEX MF03_DG_RESP_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE MF03_LG_RESP move + tablespace ARTIS_OBJ; + +alter INDEX MF03_LG_FAM_ID rebuild + tablespace ARTIS_NDX; + +alter INDEX MF03_LG_RESP_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX MF03_LG_PROMO_ID rebuild + tablespace ARTIS_NDX; + +alter TABLE MF03_STATS move + tablespace ARTIS_OBJ; + +alter INDEX MF03_STATS_DG_RESP rebuild + tablespace ARTIS_NDX; + +alter INDEX MF03_STATS_FAM_ID rebuild + tablespace ARTIS_NDX; + +alter INDEX MF03_STATS_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX MF03_STATS_LG_RESP rebuild + tablespace ARTIS_NDX; + +alter INDEX MF03_STATS_URN rebuild + tablespace ARTIS_NDX; + +alter TABLE NEW_APPLICATIONS_I move + tablespace ARTIS_OBJ; + +alter INDEX NAI_BATCH_NR_I rebuild + tablespace ARTIS_NDX; + +alter INDEX NAI_LOAD_DATE_I rebuild + tablespace ARTIS_NDX; + +alter INDEX NAI_U rebuild + tablespace ARTIS_NDX; + +alter TABLE NEW_SUPPRESSIONS_I move + tablespace ARTIS_OBJ; + +alter INDEX NSI_BATCH_NR_I rebuild + tablespace ARTIS_NDX; + +alter INDEX NSI_LOAD_DATE_I rebuild + tablespace ARTIS_NDX; + +alter INDEX NSI_U rebuild + tablespace ARTIS_NDX; + +alter TABLE OBJECT_STORAGE_SPACE move + tablespace ARTIS_OBJ; + +alter TABLE OPPORTUNITIES move + tablespace ARTIS_OBJ; + +alter INDEX OPP_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE OUTPUTS move + tablespace ARTIS_OBJ; + +alter INDEX OUH_OUP_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX OUH_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE OUTPUT_DATA move + tablespace ARTIS_OBJ; + +alter INDEX OUD_OUH_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX OUD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE OUTPUT_EXTRACT_LOG move + tablespace ARTIS_OBJ; + +alter INDEX OUO_OUH_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX OUO_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE OUTPUT_FIELDS move + tablespace ARTIS_OBJ; + +alter INDEX OUF_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE OUTPUT_FORMAT_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX OFT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE OUTPUT_SAMPLE_INDIVIDUALS move + tablespace ARTIS_OBJ; + +alter INDEX OSI_OUH_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX OSI_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE OUTPUT_SEED_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX OUP_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE OUTPUT_TRANSLATE move + tablespace ARTIS_OBJ; + +alter INDEX OUT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE OUT_ARTIS_1 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_10 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_11 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_12 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_13 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_14 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_15 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_16 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_2 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_3 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_4 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_5 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_6 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_7 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_8 move + tablespace ARTIS_OBJ; + +alter TABLE OUT_ARTIS_9 move + tablespace ARTIS_OBJ; + +alter TABLE PERSONAL_HABIT_CODES move + tablespace ARTIS_OBJ; + +alter INDEX PHC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE PLAN_TABLE move + tablespace ARTIS_OBJ; + +alter TABLE POSTCODE_GEM move + tablespace ARTIS_OBJ; + +alter INDEX POG_CITY_I rebuild + tablespace ARTIS_NDX; + +alter INDEX POG_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE POSTCODE_PROVINCE move + tablespace ARTIS_OBJ; + +alter INDEX POP_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX POP_U rebuild + tablespace ARTIS_NDX; + +alter TABLE PRODUCTS move + tablespace ARTIS_OBJ; + +alter INDEX PRO_CAT_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX PRO_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE PROD_CAT_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX CAT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE QUALITY_CATEGORIES move + tablespace ARTIS_OBJ; + +alter INDEX QCAT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE QUALITY_CHECKS move + tablespace ARTIS_OBJ; + +alter INDEX QCH_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX QCH_QCAT_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE QUEST_ANSWERS move + tablespace ARTIS_OBJ; + +alter INDEX QUA_FUI_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX QUA_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE QUEST_DETAILS move + tablespace ARTIS_OBJ; + +alter INDEX QUT_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX QUT_QUS_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE QUEST_SPEC move + tablespace ARTIS_OBJ; + +alter INDEX QUS_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE QUEST_STD move + tablespace ARTIS_OBJ; + +alter INDEX QSD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE QUEST_STD_ANSWERS move + tablespace ARTIS_OBJ; + +alter INDEX QSA_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE RECENT_ORDERS move + tablespace ARTIS_OBJ; + +alter INDEX REC_ORDERS_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE RELATIVES move + tablespace ARTIS_OBJ; + +alter INDEX REL_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE REPRINT_CARDS_I move + tablespace ARTIS_OBJ; + +alter INDEX RCI_BATCH_NR_I rebuild + tablespace ARTIS_NDX; + +alter INDEX RCI_LOAD_DATE_I rebuild + tablespace ARTIS_NDX; + +alter INDEX RCI_U rebuild + tablespace ARTIS_NDX; + +alter TABLE SEGMENT_GROUP move + tablespace ARTIS_OBJ; + +alter INDEX SGR_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE SEGMENT_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX SEG_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE SEL_MERKENFESTIVAL move + tablespace ARTIS_OBJ; + +alter INDEX SMF_IND_CARD_NR_I rebuild + tablespace ARTIS_NDX; + +alter INDEX SMF_IND_FAMILY_ID_I rebuild + tablespace ARTIS_NDX; + +alter INDEX SMF_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE SMF_PRIOR_RESPONDENTS move + tablespace ARTIS_OBJ; + +alter INDEX SPR_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE SOP_ARCHIVED_CARDS move + tablespace ARTIS_OBJ; + +alter INDEX SAC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE SQLN_EXPLAIN_PLAN move + tablespace ARTIS_OBJ; + +alter TABLE STATS move + tablespace ARTIS_OBJ; + +alter INDEX STATS rebuild + tablespace ARTIS_NDX; + +alter TABLE STRIP_AREA_DISTRICTS move + tablespace ARTIS_OBJ; + +alter TABLE STRIP_AREA_DISTRICTS_QC move + tablespace ARTIS_OBJ; + +alter TABLE STRIP_BUILDINGS move + tablespace ARTIS_OBJ; + +alter TABLE STRIP_BUILDINGS_QC move + tablespace ARTIS_OBJ; + +alter TABLE STRIP_CHARACTERS move + tablespace ARTIS_OBJ; + +alter INDEX SCH_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE STRIP_STREETS move + tablespace ARTIS_OBJ; + +alter TABLE STRIP_STREETS_QC move + tablespace ARTIS_OBJ; + +alter TABLE SUPPRESSION_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX SUT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE TARGET_CELLS move + tablespace ARTIS_OBJ; + +alter INDEX TAC_CET_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX TAC_SHORT_NAME_I rebuild + tablespace ARTIS_NDX; + +alter INDEX TAC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE TARGET_CELL_FUNCTION move + tablespace ARTIS_OBJ; + +alter INDEX TCF_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE TARGET_CELL_INCEXC move + tablespace ARTIS_OBJ; + +alter INDEX TIE_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE TARGET_CELL_INDIVIDUALS move + tablespace ARTIS_OBJ; + +alter INDEX TCI_IND_URN_I rebuild + tablespace ARTIS_NDX; + +alter INDEX TCI_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX TCI_TAC_UID_I rebuild + tablespace ARTIS_NDX; + +alter TABLE TARGET_CELL_WORK move + tablespace ARTIS_OBJ; + +alter INDEX TCW_TAC_IND rebuild + tablespace ARTIS_NDX; + +alter TABLE TARGET_DEFINITIONS move + tablespace ARTIS_OBJ; + +alter INDEX TAD_PCT_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX TAD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE TARGET_SQL_COUNTS move + tablespace ARTIS_OBJ; + +alter INDEX TSC_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE TEST move + tablespace ARTIS_OBJ; + +alter TABLE TEST_FREEK move + tablespace ARTIS_OBJ; + +alter TABLE TITLES move + tablespace ARTIS_OBJ; + +alter INDEX TIT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE TMP_VALUE_ANALYSIS move + tablespace ARTIS_OBJ; + +alter TABLE TRANS_SEG_2003 move + tablespace ARTIS_OBJ; + +alter INDEX TS_2003_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE T_CAMPAIGN_ANALYSIS_COUNTS move + tablespace ARTIS_OBJ; + +alter INDEX TMP_IDX_CCC rebuild + tablespace ARTIS_NDX; + +alter TABLE T_INDIVIDUAL_BAD_WORDS move + tablespace ARTIS_OBJ; + +alter INDEX IBW_BAD_WORD_CODE_I rebuild + tablespace ARTIS_NDX; + +alter INDEX IBW_UK rebuild + tablespace ARTIS_NDX; + +alter INDEX IBW_IND_URN_I rebuild + tablespace ARTIS_NDX; + +alter TABLE T_IND_ANS move + tablespace ARTIS_OBJ; + +alter TABLE T_IND_ANS2 move + tablespace ARTIS_OBJ; + +alter INDEX TI2_BATCH_RG_I rebuild + tablespace ARTIS_NDX; + +alter TABLE T_IND_ANSWER_SUMMARY move + tablespace ARTIS_OBJ; + +alter TABLE T_NESTH_BUS_RULE move + tablespace ARTIS_OBJ; + +alter INDEX T_IND_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE T_OUTPUT_SAMPLE_REP move + tablespace ARTIS_OBJ; + +alter TABLE T_QUALITY_CHECK_COUNTS move + tablespace ARTIS_OBJ; + +alter INDEX QCC_QCH_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE T_QUEST_RESP_MILD7 move + tablespace ARTIS_OBJ; + +alter TABLE T_REPORT_JOB move + tablespace ARTIS_OBJ; + +alter TABLE T_SEGMENT_COUNTS move + tablespace ARTIS_OBJ; + +alter TABLE VALID_RACE move + tablespace ARTIS_OBJ; + +alter INDEX VAR_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VALUE_ANSWERS move + tablespace ARTIS_OBJ; + +alter INDEX VAA_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VALUE_ANSWER_HEADER move + tablespace ARTIS_OBJ; + +alter INDEX VAH_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VALUE_ATTRIBUTES move + tablespace ARTIS_OBJ; + +alter INDEX VAT_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VALUE_CATEGORY move + tablespace ARTIS_OBJ; + +alter INDEX VCA_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VALUE_CATEGORY_GROUPS move + tablespace ARTIS_OBJ; + +alter INDEX VCG_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VALUE_DETAILS move + tablespace ARTIS_OBJ; + +alter INDEX VAD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VALUE_HEADER move + tablespace ARTIS_OBJ; + +alter INDEX VHD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VALUE_PARAMETERS move + tablespace ARTIS_OBJ; + +alter INDEX VAP_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VEHICLE_TYPES move + tablespace ARTIS_OBJ; + +alter INDEX VET_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE VEH_COSTS move + tablespace ARTIS_OBJ; + +alter INDEX VEX_COT_FK_I rebuild + tablespace ARTIS_NDX; + +alter INDEX VEX_PK rebuild + tablespace ARTIS_NDX; + +alter INDEX VEX_CVE_FK_I rebuild + tablespace ARTIS_NDX; + +alter TABLE XML_DOCUMENTS move + tablespace ARTIS_OBJ; + +alter INDEX XML_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE XML_DTD_ATTRIBUTES move + tablespace ARTIS_OBJ; + +alter INDEX DTDA_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE XML_DTD_DETAILS move + tablespace ARTIS_OBJ; + +alter INDEX DDTD_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE XML_DTD_HEADER move + tablespace ARTIS_OBJ; + +alter INDEX DTDH_PK rebuild + tablespace ARTIS_NDX; + +alter TABLE XML_ERROR_LOG move + tablespace ARTIS_OBJ; + +alter TABLE XML_LOAD_STATUS move + tablespace ARTIS_OBJ; + +alter INDEX XLS_PK rebuild + tablespace ARTIS_NDX; + diff --git a/vdh/tmpspace_testing.sql b/vdh/tmpspace_testing.sql new file mode 100644 index 0000000..79d5a32 --- /dev/null +++ b/vdh/tmpspace_testing.sql @@ -0,0 +1,10 @@ +create table t1 as +with generator as + ( select --+ materialize + rownum id, substr(dbms_random.string('U',4),1,4) sortcode + from all_objects + where rownum <= 5000 + ) +select /*+ ordered use_nl(v2) */ substr(v2.sortcode,1,4) || substr(v1.sortcode,1,2) sortcode +from generator v1, generator v2 +where rownum <= 10 * 1048576; diff --git a/vdh/top_10_swap_users.sh b/vdh/top_10_swap_users.sh new file mode 100644 index 0000000..afef297 --- /dev/null +++ b/vdh/top_10_swap_users.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +for proc in `ls -1 /proc/*/smaps`; do procnbr=`echo $proc | tr -d '[:alpha:]/'`; grep Swap $proc |awk -v proc=$procnbr 'BEGIN {total=0} {total += $2} END {print proc " " total}'; done | sort -nrk 2 | head -n 10 \ No newline at end of file diff --git a/vdh/top_consistent_gets_per_session.sql b/vdh/top_consistent_gets_per_session.sql new file mode 100644 index 0000000..3e7a8fd --- /dev/null +++ b/vdh/top_consistent_gets_per_session.sql @@ -0,0 +1,17 @@ +set linesize 120 +column username format a30 +column logon format a20 +column idle format a15 +column program format a30 +column status format a1 trunc + +select * +from ( select A.sid, consistent_gets, B.username, B.logon_time, B.program, B.status, + floor(last_call_et/3600)||':'|| floor(mod(last_call_et,3600)/60)||':'|| mod(mod(last_call_et,3600),60) idle + from v$sess_io A, v$session B + where A.sid= B.sid + and program not like 'oracle@v880%' + order by consistent_gets desc + ) +where rownum <= 20 +order by consistent_gets desc; diff --git a/vdh/top_free_pieces.sql b/vdh/top_free_pieces.sql new file mode 100644 index 0000000..908b473 --- /dev/null +++ b/vdh/top_free_pieces.sql @@ -0,0 +1,8 @@ +column free_mb format 999G999G999D99 +select * +from ( select bytes/1024/1024 free_mb + from dba_free_space + where tablespace_name = '&1' + order by free_mb desc + ) +where rownum <= 10; diff --git a/vdh/top_next_extents.sql b/vdh/top_next_extents.sql new file mode 100644 index 0000000..934bfbd --- /dev/null +++ b/vdh/top_next_extents.sql @@ -0,0 +1,12 @@ +column curr_mb format 999G999G999D99 +column next_mb format 999G999D99 + +select * +from ( select segment_name, segment_type, round(bytes/1024/1024,2) curr_mb, + round(next_extent/1024/1024,2) next_mb, pct_increase + from dba_segments + where tablespace_name = '&1' + order by next_mb desc + ) +where rownum <= 10; + diff --git a/vdh/top_optstat_durations.sql b/vdh/top_optstat_durations.sql new file mode 100644 index 0000000..65f00a9 --- /dev/null +++ b/vdh/top_optstat_durations.sql @@ -0,0 +1,44 @@ +/* list the top 10 cbo stats gathering durations +*/ + +set linesize 300 +set pages 50000 + +column target format a64 +column target_type format a25 +column nbr_blocks format 9G999G999G999 +column start_time_str format a30 +column end_time_str format a30 +column status format a15 +column duration format a15 +column estimated_cost format 999G999 +column notes_xml format a220 + + +with stat_tasks +as +( select + target, + target_type, + target_size nbr_blocks, + to_char(start_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') start_time_str, + to_char(end_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') end_time_str, + cast ((end_time - start_time) as interval day(2) to second(0)) duration, + status, + estimated_cost + from + dba_optstat_operation_tasks +) +select + * +from + ( select + * + from + stat_tasks + order by + duration desc + ) +where + rownum <= 10 +; diff --git a/vdh/top_optstat_targets.sql b/vdh/top_optstat_targets.sql new file mode 100644 index 0000000..1a7fc11 --- /dev/null +++ b/vdh/top_optstat_targets.sql @@ -0,0 +1,92 @@ +/* top 10 targets based upon the cbo calculation duration + + The sql statement checks for the 10 ranked segments based upon their longest cbo stats collection duration +*/ + +set linesize 300 +set pages 50000 + +column operation format a30 +column target format a50 +column target_type format a25 +column nbr_blocks format 9G999G999G999 +column start_time_str format a30 +column end_time_str format a30 +column status format a15 +column duration format a15 +column estimated_cost format 999G999 +column target_notes_xml format a200 +column ops_notes_xml format a200 +column nbr_blocks format 9G999G999G999 + +-- rank the different collection duration per target +with +target_ranking +as +( select + opid, + target, + target_type, + target_size, + start_time, + end_time, + cast ((end_time - start_time) as interval day(2) to second(0)) duration, + status, + estimated_cost, + notes, + dense_rank() over + ( partition by target, target_type + order by cast ((end_time - start_time) as interval day(2) to second(0)) desc + ) trgt_rank + from + dba_optstat_operation_tasks +), +-- take the longest duration for each target and order these targets on duration, selecting the top 10 targets +filtered_targets +as +( select + --+ MATERIALIZE + * + from + ( select + opid, + target, + target_type, + target_size, + start_time, + end_time, + duration, + status, + estimated_cost, + notes + from + target_ranking + where + trgt_rank = 1 + order by + duration desc + ) + where + rownum <= 10 +) +-- join the filtered targets with the parent operation +select + tgt.opid, + ops.operation, + tgt.target, + tgt.target_type, + tgt.target_size nbr_blocks, + to_char(tgt.start_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') start_time_str, + to_char(tgt.end_time, 'DD/MM/YYYY HH24:MI:SS TZH:TZM') end_time_str, + tgt.duration, + tgt.status, +-- tgt.estimated_cost, + xmlserialize(content xmltype(nvl2(tgt.notes, tgt.notes, '')) as clob indent size = 2) target_notes_xml, + xmlserialize(content xmltype(nvl2(ops.notes, ops.notes, '')) as clob indent size = 2) ops_notes_xml +from + filtered_targets tgt + join dba_optstat_operations ops + on ( tgt.opid = ops.id) +order by + duration desc +; diff --git a/vdh/top_pga_consumers.sql b/vdh/top_pga_consumers.sql new file mode 100644 index 0000000..5a794ba --- /dev/null +++ b/vdh/top_pga_consumers.sql @@ -0,0 +1,36 @@ +set linesize 150 +set pagesize 999 + +column name format a25 +column mb format 9G999D99 +column sid format 99999 +column serial# format 99999 +column machine format a20 +column username format a15 +column program format a25 +column logon_time format a10 + +break on name skip 1 + +with toppga +as +( select /*+ MATERIALIZE */ sid, name, value + from ( select sid, name, value, + row_number() over + ( partition by name + order by value desc + ) rn + from v$statname stname, v$sesstat stat + where stat.STATISTIC# = stname.STATISTIC# + and name like 'session pga memory%' + ) + where rn <= 10 +) +select tpga.name, sess.sid, sess.serial#, tpga.value/1024/1024 mb, + sess.username, sess.machine, sess.program, + sess.sql_id, sess.logon_time +from toppga tpga, v$session sess +where tpga.sid = sess.sid +order by tpga.name, mb desc; + +clear breaks diff --git a/vdh/top_pga_consumers_9i.sql b/vdh/top_pga_consumers_9i.sql new file mode 100644 index 0000000..74db901 --- /dev/null +++ b/vdh/top_pga_consumers_9i.sql @@ -0,0 +1,34 @@ +set linesize 150 +set pagesize 999 + +column name format a25 +column mb format 9G999G999D99 +column sid format 9999 +column machine format a15 +column osuser format a10 +column username format a15 +column program format a25 + +break on name skip 1 + +with toppga +as +( select /*+ MATERIALIZE */ sid, name, value + from ( select sid, name, value, + row_number() over + ( partition by name + order by value desc + ) rn + from v$statname stname, v$sesstat stat + where stat.STATISTIC# = stname.STATISTIC# + and name like 'session pga memory%' + ) + where rn <= 3 +) +select tpga.name, sess.sid, sess.serial#, tpga.value/1024/1024 mb, + sess.username, sess.machine, sess.osuser, sess.program +from toppga tpga, v$session sess +where tpga.sid = sess.sid +order by tpga.name, mb; + +clear breaks diff --git a/vdh/top_redo_generators.sql b/vdh/top_redo_generators.sql new file mode 100644 index 0000000..d3ba4c7 --- /dev/null +++ b/vdh/top_redo_generators.sql @@ -0,0 +1,29 @@ +set linesize 150 +set pages 9999 + +column sid format 9999 +column serial# format 99999 +column name format a20 +column username format a15 +column logon format a20 +column idle format a10 +column value format 9G999G999G999 +column program format a50 + +select sid, serial#, username, program, name, value, logon, idle +from ( select sess.sid, sess.serial#, sess.username, program, statn.name, sesst.value, + to_char(sess.logon_time, 'DD/MM/YYYY HH24:MI:SS') logon, + floor(sess.last_call_et/3600)||':'|| floor(mod(sess.last_call_et,3600)/60)||':'|| mod(mod(sess.last_call_et,3600),60) idle, + row_number() over + ( partition by statn.name + order by sesst.value desc + ) rn + from v$session sess, v$sesstat sesst, v$statname statn + where sess.sid = sesst.sid + and sesst.statistic# = statn.statistic# + and statn.name in + ('redo blocks written', 'redo size', 'redo wastage') + and sesst.value > 0 + ) +where rn <= 5 +order by name, value desc; diff --git a/vdh/top_seg_history.sql b/vdh/top_seg_history.sql new file mode 100644 index 0000000..c908c52 --- /dev/null +++ b/vdh/top_seg_history.sql @@ -0,0 +1,87 @@ +-- for the current top 10 segments (by size) list the history of the space used / allocated delta per day for the past month. +-- as dba_hist_seg_stat does not contain all segments, but only the ones that oracle determines to to be interesting, the history may be lacking or incomplete for some of the segments +-- also, default the history in dba_hist_seg_stat is only kept for 7 days + +column owner format a30 heading "Owner" +column segment_name format a30 heading "Segment" +column segment_type format a18 heading "Type" +column tablespace_name format a30 heading "Tablespace" +column begin_interval_day_s format a10 heading "Day" +column current_size_mb format 999G999G990D99 heading "Curr Size (MB)" +column space_used_delta_mb format 999G999G990D99 heading "Space Used Delta (MB)" +column space_allocated_delta_mb format 999G999G990D99 heading "Space Alloc Delta (MB)" + +break on owner on segment_name skip 1 on segment_type on tablespace_name on current_size_mb + +with ctop +as +( select + * + from + ( select + owner, + segment_name, + partition_name, + segment_type, + tablespace_name, + bytes + from + dba_segments + where + segment_type not in ('ROLLBACK', 'TEMPORARY', 'TYPE2 UNDO') + order by + bytes desc + ) + where + rownum <= 10 +), +segstat +as +( select + trunc(snap.begin_interval_time) begin_interval_day, + obj.owner, + obj.object_name, + obj.subobject_name, + sum(stat.space_used_delta) space_used_delta, + sum(stat.space_allocated_delta) space_allocated_delta + from + dba_hist_snapshot snap, + dba_hist_seg_stat stat, + dba_hist_seg_stat_obj obj + where + snap.dbid = stat.dbid + and snap.snap_id = stat.snap_id + and snap.instance_number = stat.instance_number + and stat.dbid = obj.dbid + and stat.obj# = obj.obj# + and snap.begin_interval_time >= add_months(trunc(sysdate), -1) + group by + trunc(snap.begin_interval_time), + obj.owner, + obj.object_name, + obj.subobject_name +) +select + ctop.owner, + ctop.segment_name, + ctop.segment_type, + ctop.tablespace_name, + ctop.bytes/1024/1024 current_size_mb, + to_char(segstat.begin_interval_day, 'DD/MM/YYYY') begin_interval_day_s, + segstat.space_used_delta/1024/1024 space_used_delta_mb, + segstat.space_allocated_delta/1024/1024 space_allocated_delta_mb +from + ctop, + segstat +where + ctop.segment_name = segstat.object_name(+) + and nvl(ctop.partition_name, 'x') = nvl(segstat.subobject_name,'x') +order by + ctop.bytes desc, + ctop.owner, + ctop.segment_name, + ctop.partition_name, + segstat.begin_interval_day +; + +clear breaks diff --git a/vdh/top_segments_io.sql b/vdh/top_segments_io.sql new file mode 100644 index 0000000..221ffa7 --- /dev/null +++ b/vdh/top_segments_io.sql @@ -0,0 +1,49 @@ +column owner format a30 +column object_name format a30 +column subobject_name format a30 +column statistic_name format a30 +column object_type format a20 +column value format 9G999G999G999G990D00 +column name format a30 heading "(P)DB NAME" + +break on statistic_name skip 1 + +select + statistic_name, + name, + owner, + object_name, + subobject_name, + object_type, + value +from + ( select + segstat.statistic_name, + con.name, + segstat.owner, + segstat.object_name, + segstat.subobject_name, + segstat.object_type, + segstat.value, + row_number() + over ( partition by statistic_name + order by value desc + ) rn + from + v$segment_statistics segstat + join v$containers con + on ( segstat.con_id = con.con_id ) + where + statistic_name in + ( 'physical writes', 'physical reads', 'physical reads direct', 'physical writes direct', + 'logical reads', 'segment scans' + ) + ) +where + rn <= 5 +order by + statistic_name, + rn +; + +clear breaks diff --git a/vdh/top_segments_size.sql b/vdh/top_segments_size.sql new file mode 100644 index 0000000..ef3ab16 --- /dev/null +++ b/vdh/top_segments_size.sql @@ -0,0 +1,30 @@ +/* Get the biggest 10 tables/indexes per tablespace +*/ + +set linesize 120 +set pagesize 9999 +column owner format a25 +column segment_name format a30 +column mb format 9G999G990D999 +column tablespace_name format a25 +column rn format 99 +column segment_type format a15 +break on tablespace_name skip 1 + +select tablespace_name, segment_type, owner, segment_name, bytes/1024/1024 mb, rn +from ( select tablespace_name, segment_type, owner, segment_name, bytes, + row_number () + over ( partition by tablespace_name + order by bytes desc + ) rn + from dba_segments +-- where segment_type in ('TABLE', 'INDEX') +-- and tablespace_name in + where tablespace_name in + ( select tablespace_name + from dba_tablespaces + where contents = 'PERMANENT' + ) + ) +where rn <= 10 +order by tablespace_name, rn; \ No newline at end of file diff --git a/vdh/top_sess_by_cpu.sql b/vdh/top_sess_by_cpu.sql new file mode 100644 index 0000000..37376ae --- /dev/null +++ b/vdh/top_sess_by_cpu.sql @@ -0,0 +1,9 @@ +select * +from ( select C.sid, C.serial#, A.value, C.program + from v$sesstat A, v$statname B, v$session C + where A.statistic# = B.statistic# + and B.name = 'CPU used by this session' + and A.sid = C.sid + order by value desc + ) +where rownum <= 10; \ No newline at end of file diff --git a/vdh/top_sqlcur_by_shm.sql b/vdh/top_sqlcur_by_shm.sql new file mode 100644 index 0000000..d025ce6 --- /dev/null +++ b/vdh/top_sqlcur_by_shm.sql @@ -0,0 +1,28 @@ +set linesize 150 + +column sharable_mem_kb format 99G999G999D00 +column persistent_mem_kb format 99G999G999D00 +column runtime_mem_kb format 99G999G999D00 + +select + * +from + ( select + sql_id, + sum(sharable_mem)/1024 sharable_mem_kb, + sum(persistent_mem)/1024 persistent_mem_kb, + sum(runtime_mem)/1024 runtime_mem_kb, + count(*) child_cnt, + parsing_schema_name + from + v$sql + group by + sql_id, + parsing_schema_name + order by + sharable_mem_kb desc, + parsing_schema_name + ) +where + rownum <= 10 +; diff --git a/vdh/top_statements_by_hard_parse_time.sql b/vdh/top_statements_by_hard_parse_time.sql new file mode 100644 index 0000000..7c7adce --- /dev/null +++ b/vdh/top_statements_by_hard_parse_time.sql @@ -0,0 +1,25 @@ +column avg_hard_parse_time_ms format 9G999G990D00 + +select + sql_id, + plan_hash_value, + executions, + parse_calls, + avg_hard_parse_time_ms +from + ( select + sql_id, + plan_hash_value, + executions, + parse_calls, + avg_hard_parse_time/1000 avg_hard_parse_time_ms + from + v$sqlstats + order by + avg_hard_parse_time desc + ) +where + rownum <= 20 +order by + plan_hash_value +; diff --git a/vdh/top_temp_tbs_usage.sql b/vdh/top_temp_tbs_usage.sql new file mode 100644 index 0000000..bd2af4d --- /dev/null +++ b/vdh/top_temp_tbs_usage.sql @@ -0,0 +1,83 @@ +column temp_used_mb format 999G999G999D99 + +set verify off + +prompt Enter the begindate in the format DD/MM/YYYY HH24:MI +accept bdate prompt 'begin date: ' + +prompt Enter the enddate in the format DD/MM/YYYY HH24:MI +accept edate prompt 'end date: ' + + +with samples +as + ( select + sample_time, + nvl(qc_instance_id, instance_number) inst_id, + nvl(qc_session_id, session_id) sess_id, + nvl(qc_session_serial#, session_serial#) sess_serial#, + sql_id, + temp_space_allocated + from + dba_hist_active_sess_history + where + temp_space_allocated is not null + and sample_time between to_date('&bdate', 'DD/MM/YYYY HH24:MI') and to_date('&edate', 'DD/MM/YYYY HH24:MI') + union + select + sample_time, + nvl(qc_instance_id, inst_id) inst_id, + nvl(qc_session_id, session_id) sess_id, + nvl(qc_session_serial#, session_serial#) sess_serial#, + sql_id, + temp_space_allocated + from + gv$active_session_history + where + temp_space_allocated is not null + and sample_time between to_date('&bdate', 'DD/MM/YYYY HH24:MI') and to_date('&edate', 'DD/MM/YYYY HH24:MI') + ), +grouped_samples +as + ( select + sample_time, + inst_id, + sess_id, + sess_serial#, + sql_id, + sum(temp_space_allocated)/1024/1024 temp_used_mb + from + samples + group by + sample_time, + inst_id, + sess_id, + sess_serial#, + sql_id + ) +select + to_char(sample_time,'DD/MM/YYYY HH24:MI:SS') datestr, + inst_id, + sess_id, + sess_serial#, + sql_id, + temp_used_mb +from + ( select + sample_time, + inst_id, + sess_id, + sess_serial#, + sql_id, + temp_used_mb + from + grouped_samples + order by + temp_used_mb desc + ) +where + rownum <= 30 +; + +undef bdate +undef edate diff --git a/vdh/tracetrg.sql b/vdh/tracetrg.sql new file mode 100644 index 0000000..a32664b --- /dev/null +++ b/vdh/tracetrg.sql @@ -0,0 +1,27 @@ +/********************************************************************** + * File: tracetrg.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 01Dec01 + * + * Description: + * SQL*Plus script containing the DDL to create a database-level + * AFTER LOGON event trigger to enable SQL Trace for a specific + * user account only. Very useful diagnostic tool... + * + * Modifications: + *********************************************************************/ +set echo on feedback on timing on + +spool tracetrg + +create or replace trigger tracetrg + after logon + on database +begin + dbms_session.set_sql_trace(TRUE); +end; +/ +show errors + +spool off diff --git a/vdh/tree.sh b/vdh/tree.sh new file mode 100644 index 0000000..8649591 --- /dev/null +++ b/vdh/tree.sh @@ -0,0 +1,47 @@ +#!/bin/sh + +####################################################### +# UNIX TREE # +# Version: 2.2 # +# By Dem Pilafian # +# File: ~/apps/tree/tree.sh # +# # +# Displays Structure of Directory Hierarchy # +# ------------------------------------------------- # +# This tiny script uses "ls", "grep", and "sed" # +# in a single command to show the nesting of # +# sub-directories. # +# # +# Setup: # +# % cd ~/apps/tree # +# % chmod u+x tree.sh # +# % ln -s ~/apps/tree/tree.sh ~/bin/tree # +# # +# Usage: # +# % tree [directory] # +# # +# Examples: # +# % tree # +# % tree /etc/opt # +# % tree .. # +# # +# Public Domain Software -- Free to Use as You Like # +# http://www.centerkey.com/tree # +####################################################### + +echo +if [ "$1" != "" ] #if parameter exists, use as base folder + then cd "$1" + fi +pwd +ls -R | grep ":$" | \ + sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/' +# 1st sed: remove colons +# 2nd sed: replace higher level folder names with dashes +# 3rd sed: indent graph three spaces +# 4th sed: replace first dash with a vertical bar +if [ `ls -F -1 | grep "/" | wc -l` = 0 ] # check if no folders + then echo " -> no sub-directories" + fi +echo +exit \ No newline at end of file diff --git a/vdh/trigger_trace_batch_jobs.sql b/vdh/trigger_trace_batch_jobs.sql new file mode 100644 index 0000000..1796d1a --- /dev/null +++ b/vdh/trigger_trace_batch_jobs.sql @@ -0,0 +1,18 @@ +create or replace trigger trace_carenet +after logon on database +BEGIN + + if sys_context('USERENV', 'IP_ADDRESS') = '10.10.6.185' + and trunc(sysdate) = to_date('09/09/2005') + then + execute immediate 'alter session set max_dump_file_size=''1000M'''; + execute immediate 'alter session set events ''10046 trace name context forever, level 12'''; + end if; + +EXCEPTION + when others + then + null; + +END; +/ diff --git a/vdh/uga_usage.sql b/vdh/uga_usage.sql new file mode 100644 index 0000000..48b4337 --- /dev/null +++ b/vdh/uga_usage.sql @@ -0,0 +1,11 @@ +select + a.name, + avg(b.value) +from + v$statname a, + v$sesstat b +where + a.statistic# = b.statistic# + and a.name like '%uga%' +group by + a.name diff --git a/vdh/undo_usage.sql b/vdh/undo_usage.sql new file mode 100644 index 0000000..c9dbf46 --- /dev/null +++ b/vdh/undo_usage.sql @@ -0,0 +1,78 @@ +set linesize 120 +set pagesize 9999 +set echo off +set verify off + +prompt Enter the begindate in the format DD/MM/YYYY HH24:MI +accept bdate prompt 'begin date: ' + +prompt Enter the enddate in the format DD/MM/YYYY HH24:MI +accept edate prompt 'end date: ' + +column undo_retention_time format a20 + +select value undo_retention_time +from v$parameter +where name = 'undo_retention'; + + +column undo_space format 999G999G999D99 +column max_undo_space format 999G999G999D99 +column undo_tbs format a15 + +select sum(bytes)/1024/1024 undo_space, sum(maxbytes)/1024/1024 max_undo_space +from dba_data_files +where tablespace_name = + ( select value + from v$parameter + where name = 'undo_tablespace' + ); + +column begin_time format a17 +column end_time format a17 +column retention_undo_usage format 9G999G999D99 heading "Undo ret period" +column curr_undo_usage format 9G999D99 heading "undo usage" +column pct_used format 999D99 +column ts_ss format 99D99 + +select to_char(begin_time,'DD/MM/YYYY HH24:MI') begin_time, + to_char(end_time,'DD/MM/YYYY HH24:MI') end_time, + (select name from v$tablespace where ts# = undotsn) undo_tbs, + curr_undo_usage, retention_undo_usage, + (100 * retention_undo_usage / + ( select sum(greatest(bytes,maxbytes))/1024/1024 + from dba_data_files + where tablespace_name = (select name from v$tablespace where ts# = undotsn) + ) + ) pct_used, + ts_hh, + ts_mi, + ts_ss +from ( +select undotsn, + begin_time, end_time, + undoblks * + ( select block_size + from dba_tablespaces + where tablespace_name = (select name from v$tablespace where ts# = undotsn) + ) /1024/1024 curr_undo_usage, + sum(undoblks) + over + ( order by end_time + range ( select value/24/60/60 + from v$parameter + where name = 'undo_retention' + ) preceding + ) + * ( select block_size + from dba_tablespaces + where tablespace_name = (select name from v$tablespace where ts# = undotsn) + ) /1024/1024 retention_undo_usage, + decode(maxquerylen, 0, 0, extract(hour from (systimestamp + maxquerylen/24/60/60 - systimestamp))) ts_hh, + decode(maxquerylen, 0, 0, extract(minute from (systimestamp + maxquerylen/24/60/60 - systimestamp))) ts_mi, + decode(maxquerylen, 0, 0, extract(second from (systimestamp + maxquerylen/24/60/60 - systimestamp))) ts_ss +from v$undostat +) U +where begin_time >= to_date('&bdate', 'DD/MM/YYYY HH24:MI') + and end_time <= to_date('&edate', 'DD/MM/YYYY HH24:MI') +order by U.begin_time; \ No newline at end of file diff --git a/vdh/undo_usage_10gR2.sql b/vdh/undo_usage_10gR2.sql new file mode 100644 index 0000000..4974fca --- /dev/null +++ b/vdh/undo_usage_10gR2.sql @@ -0,0 +1,107 @@ +set linesize 150 +set pagesize 9999 +set echo off +set verify off + +prompt Enter the begindate in the format DD/MM/YYYY HH24:MI +accept bdate prompt 'begin date: ' + +prompt Enter the enddate in the format DD/MM/YYYY HH24:MI +accept edate prompt 'end date: ' + +column undo_retention_time format a20 + +select + inst_id, + value undo_retention_time +from + gv$parameter +where + name = 'undo_retention' +order by + inst_id +; + + +column undo_space format 999G999G999D99 +column max_undo_space format 999G999G999D99 +column undo_tbs format a15 +column q_length format a12 +column tu_length format a12 + +select + tablespace_name, + sum(bytes)/1024/1024 undo_space, + sum(maxbytes)/1024/1024 max_undo_space +from + dba_data_files +where + tablespace_name in (select value from gv$parameter where name = 'undo_tablespace') +group by + tablespace_name +order by + tablespace_name +; + +column begin_time format a17 +column end_time format a17 +column retention_undo_usage format 9G999G999D99 heading "Undo ret period" +column curr_undo_usage format 9G999D99 heading "undo usage" +column pct_used format 999D99 +column ts_ss format 99D99 +column err format a12 +column maxqueryid format a15 +column inst_id format 999 + +prompt err: unxpblkreucnt / ssolderrcnt / nospaceerrcnt + +break on inst_id skip 1 + +select + inst_id, + to_char(begin_time,'DD/MM/YYYY HH24:MI') begin_time, + to_char(end_time,'DD/MM/YYYY HH24:MI') end_time, + ( select + name + from + v$tablespace + where + ts# = undotsn + ) undo_tbs, + curr_undo_usage, + retention_undo_usage, + (100 * retention_undo_usage / (select sum(greatest(bytes,maxbytes))/1024/1024 from dba_data_files where tablespace_name = (select name from v$tablespace where ts# = undotsn))) pct_used, + ts_dd || ' ' || ts_hh || ':' || ts_mi || ':' || ts_ss q_length, + tund_dd || ' ' || tund_hh || ':' || tund_mi || ':' || tund_ss tu_length, + maxqueryid, + err +from + ( select + inst_id, + undotsn, + begin_time, + end_time, + undoblks * (select block_size from dba_tablespaces where tablespace_name = (select name from v$tablespace where ts# = undotsn)) /1024/1024 curr_undo_usage, + ((activeblks + unexpiredblks) * (select block_size from dba_tablespaces where tablespace_name = (select name from v$tablespace where ts# = undotsn)) /1024/1024) retention_undo_usage, + decode(maxquerylen, 0, 0, extract(day from (systimestamp + numtodsinterval(maxquerylen,'second') - systimestamp))) ts_dd, + decode(maxquerylen, 0, 0, extract(hour from (systimestamp + numtodsinterval(maxquerylen,'second') - systimestamp))) ts_hh, + decode(maxquerylen, 0, 0, extract(minute from (systimestamp + numtodsinterval(maxquerylen,'second') - systimestamp))) ts_mi, + decode(maxquerylen, 0, 0, floor(extract(second from (systimestamp + numtodsinterval(maxquerylen,'second') - systimestamp)))) ts_ss, + decode(tuned_undoretention, 0, 0, extract(day from (systimestamp + numtodsinterval(tuned_undoretention,'second') - systimestamp))) tund_dd, + decode(tuned_undoretention, 0, 0, extract(hour from (systimestamp + numtodsinterval(tuned_undoretention,'second') - systimestamp))) tund_hh, + decode(tuned_undoretention, 0, 0, extract(minute from (systimestamp + numtodsinterval(tuned_undoretention,'second') - systimestamp))) tund_mi, + decode(tuned_undoretention, 0, 0, floor(extract(second from (systimestamp + numtodsinterval(tuned_undoretention,'second') - systimestamp)))) tund_ss, + maxqueryid, + unxpblkreucnt || '/' || ssolderrcnt || '/' || nospaceerrcnt err + from + gv$undostat + ) U +where + begin_time >= to_date('&bdate', 'DD/MM/YYYY HH24:MI') + and end_time <= to_date('&edate', 'DD/MM/YYYY HH24:MI') +order by + inst_id, + U.begin_time +; + +clear breaks diff --git a/vdh/undo_usage_10gR2_old.sql b/vdh/undo_usage_10gR2_old.sql new file mode 100644 index 0000000..0ece93a --- /dev/null +++ b/vdh/undo_usage_10gR2_old.sql @@ -0,0 +1,89 @@ +set linesize 150 +set pagesize 9999 +set echo off +set verify off + +prompt Enter the begindate in the format DD/MM/YYYY HH24:MI +accept bdate prompt 'begin date: ' + +prompt Enter the enddate in the format DD/MM/YYYY HH24:MI +accept edate prompt 'end date: ' + +column undo_retention_time format a20 + +select value undo_retention_time +from v$parameter +where name = 'undo_retention'; + + +column undo_space format 999G999G999D99 +column max_undo_space format 999G999G999D99 +column undo_tbs format a15 +column q_length format a10 +column tu_length format a12 + +select sum(bytes)/1024/1024 undo_space, sum(maxbytes)/1024/1024 max_undo_space +from dba_data_files +where tablespace_name = + ( select value + from v$parameter + where name = 'undo_tablespace' + ); + +column begin_time format a17 +column end_time format a17 +column retention_undo_usage format 9G999G999D99 heading "Undo ret period" +column curr_undo_usage format 9G999D99 heading "undo usage" +column pct_used format 999D99 +column ts_ss format 99D99 +column err format a12 +column maxqueryid format a15 + +prompt err: unxpstealcnt / ssolderrcnt / nospaceerrcnt + +select to_char(begin_time,'DD/MM/YYYY HH24:MI') begin_time, + to_char(end_time,'DD/MM/YYYY HH24:MI') end_time, + (select name from v$tablespace where ts# = undotsn) undo_tbs, + curr_undo_usage, retention_undo_usage, + (100 * retention_undo_usage / + ( select sum(greatest(bytes,maxbytes))/1024/1024 + from dba_data_files + where tablespace_name = (select name from v$tablespace where ts# = undotsn) + ) + ) pct_used, + ts_hh || ':' || ts_mi || ':' || ts_ss q_length, + tund_dd || ' ' || tund_hh || ':' || tund_mi || ':' || tund_ss tu_length, + maxqueryid, err +from ( select undotsn, + begin_time, end_time, + undoblks * + ( select block_size + from dba_tablespaces + where tablespace_name = (select name from v$tablespace where ts# = undotsn) + ) /1024/1024 curr_undo_usage, + sum(undoblks) + over + ( order by end_time + range ( tuned_undoretention/24/60/60 +-- from v$parameter +-- where name = 'undo_retention' + ) preceding + ) + * ( select block_size + from dba_tablespaces + where tablespace_name = (select name from v$tablespace where ts# = undotsn) + ) /1024/1024 retention_undo_usage, + decode(maxquerylen, 0, 0, extract(hour from (systimestamp + maxquerylen/24/60/60 - systimestamp))) ts_hh, + decode(maxquerylen, 0, 0, extract(minute from (systimestamp + maxquerylen/24/60/60 - systimestamp))) ts_mi, + decode(maxquerylen, 0, 0, floor(extract(second from (systimestamp + maxquerylen/24/60/60 - systimestamp)))) ts_ss, + decode(tuned_undoretention, 0, 0, extract(day from (systimestamp + tuned_undoretention/24/60/60 - systimestamp))) tund_dd, + decode(tuned_undoretention, 0, 0, extract(hour from (systimestamp + tuned_undoretention/24/60/60 - systimestamp))) tund_hh, + decode(tuned_undoretention, 0, 0, extract(minute from (systimestamp + tuned_undoretention/24/60/60 - systimestamp))) tund_mi, + decode(tuned_undoretention, 0, 0, floor(extract(second from (systimestamp + tuned_undoretention/24/60/60 - systimestamp)))) tund_ss, + maxqueryid, unxpstealcnt || '/' || ssolderrcnt || '/' || nospaceerrcnt err + from v$undostat +) U +where begin_time >= to_date('&bdate', 'DD/MM/YYYY HH24:MI') + and end_time <= to_date('&edate', 'DD/MM/YYYY HH24:MI') +order by U.begin_time; + diff --git a/vdh/undo_usage_24window.sql b/vdh/undo_usage_24window.sql new file mode 100644 index 0000000..7eb50dc --- /dev/null +++ b/vdh/undo_usage_24window.sql @@ -0,0 +1,102 @@ +set linesize 150 +set pagesize 9999 +set echo off +set verify off + +column undo_retention_time format a20 + +select + inst_id, + value undo_retention_time +from + gv$parameter +where + name = 'undo_retention' +order by + inst_id +; + + +column undo_space format 999G999G999D99 +column max_undo_space format 999G999G999D99 +column undo_tbs format a15 +column q_length format a12 +column tu_length format a12 + +select + tablespace_name, + sum(bytes)/1024/1024 undo_space, + sum(maxbytes)/1024/1024 max_undo_space, + max(autoextensible) +from + dba_data_files +where + tablespace_name in (select value from gv$parameter where name = 'undo_tablespace') +group by + tablespace_name +order by + tablespace_name +; + +column begin_time format a17 +column end_time format a17 +column retention_undo_usage format 9G999G999D99 heading "Undo ret period" +column curr_undo_usage format 9G999D99 heading "undo usage" +column pct_used format 999D99 +column ts_ss format 99D99 +column err format a12 +column maxqueryid format a15 +column inst_id format 999 + +prompt err: unxpblkreucnt / ssolderrcnt / nospaceerrcnt + +break on inst_id skip 1 + +select + inst_id, + to_char(begin_time,'DD/MM/YYYY HH24:MI') begin_time, + to_char(end_time,'DD/MM/YYYY HH24:MI') end_time, + ( select + name + from + v$tablespace + where + ts# = undotsn + ) undo_tbs, + curr_undo_usage, + retention_undo_usage, + (100 * retention_undo_usage / (select sum(greatest(bytes,maxbytes))/1024/1024 from dba_data_files where tablespace_name = (select name from v$tablespace where ts# = undotsn))) pct_used, + ts_dd || ' ' || ts_hh || ':' || ts_mi || ':' || ts_ss q_length, + tund_dd || ' ' || tund_hh || ':' || tund_mi || ':' || tund_ss tu_length, + maxqueryid, + err +from + ( select + inst_id, + undotsn, + begin_time, + end_time, + undoblks * (select block_size from dba_tablespaces where tablespace_name = (select name from v$tablespace where ts# = undotsn)) /1024/1024 curr_undo_usage, + ((activeblks + unexpiredblks) * (select block_size from dba_tablespaces where tablespace_name = (select name from v$tablespace where ts# = undotsn)) /1024/1024) retention_undo_usage, + decode(maxquerylen, 0, 0, extract(day from (systimestamp + numtodsinterval(maxquerylen,'second') - systimestamp))) ts_dd, + decode(maxquerylen, 0, 0, extract(hour from (systimestamp + numtodsinterval(maxquerylen,'second') - systimestamp))) ts_hh, + decode(maxquerylen, 0, 0, extract(minute from (systimestamp + numtodsinterval(maxquerylen,'second') - systimestamp))) ts_mi, + decode(maxquerylen, 0, 0, floor(extract(second from (systimestamp + numtodsinterval(maxquerylen,'second') - systimestamp)))) ts_ss, + decode(tuned_undoretention, 0, 0, extract(day from (systimestamp + numtodsinterval(tuned_undoretention,'second') - systimestamp))) tund_dd, + decode(tuned_undoretention, 0, 0, extract(hour from (systimestamp + numtodsinterval(tuned_undoretention,'second') - systimestamp))) tund_hh, + decode(tuned_undoretention, 0, 0, extract(minute from (systimestamp + numtodsinterval(tuned_undoretention,'second') - systimestamp))) tund_mi, + decode(tuned_undoretention, 0, 0, floor(extract(second from (systimestamp + numtodsinterval(tuned_undoretention,'second') - systimestamp)))) tund_ss, + maxqueryid, + unxpblkreucnt || '/' || ssolderrcnt || '/' || nospaceerrcnt err + from + gv$undostat + ) U +where + begin_time >= sysdate -1 + and end_time <= sysdate +order by + inst_id, + U.begin_time +; + +clear breaks diff --git a/vdh/undo_usage_9i.sql b/vdh/undo_usage_9i.sql new file mode 100644 index 0000000..84ae23f --- /dev/null +++ b/vdh/undo_usage_9i.sql @@ -0,0 +1,81 @@ +set linesize 130 +set pagesize 9999 +set echo off +set verify off + +prompt Enter the begindate in the format DD/MM/YYYY HH24:MI +accept bdate prompt 'begin date: ' + +prompt Enter the enddate in the format DD/MM/YYYY HH24:MI +accept edate prompt 'end date: ' + +column undo_retention_time format a20 + +select value undo_retention_time +from v$parameter +where name = 'undo_retention'; + + +column undo_space format 999G999G999D99 +column max_undo_space format 999G999G999D99 +column undo_tbs format a15 +column qtime format a8 + +select sum(bytes)/1024/1024 undo_space, sum(maxbytes)/1024/1024 max_undo_space +from dba_data_files +where tablespace_name = + ( select value + from v$parameter + where name = 'undo_tablespace' + ); + +column begin_time format a17 +column end_time format a17 +column retention_undo_usage format 9G999G999D99 heading "Undo ret period" +column curr_undo_usage format 9G999D99 heading "undo usage" +column pct_used format 999D99 +column ts_ss format 99D99 + +select to_char(begin_time,'DD/MM/YYYY HH24:MI') begin_time, + to_char(end_time,'DD/MM/YYYY HH24:MI') end_time, + (select name from v$tablespace where ts# = undotsn) undo_tbs, + curr_undo_usage, retention_undo_usage, + (100 * retention_undo_usage / + ( select sum(greatest(bytes,maxbytes))/1024/1024 + from dba_data_files + where tablespace_name = (select name from v$tablespace where ts# = undotsn) + ) + ) pct_used, + lpad(ts_hh,2,'0') || ':' || lpad(ts_mi,2,'0') || ':' || lpad(ts_ss,2,'0') qtime, + ssolderrcnt, + nospaceerrcnt +from ( +select undotsn, + begin_time, end_time, + undoblks * + ( select block_size + from dba_tablespaces + where tablespace_name = (select name from v$tablespace where ts# = undotsn) + ) /1024/1024 curr_undo_usage, + sum(undoblks) + over + ( order by end_time + range ( select value/24/60/60 + from v$parameter + where name = 'undo_retention' + ) preceding + ) + * ( select block_size + from dba_tablespaces + where tablespace_name = (select name from v$tablespace where ts# = undotsn) + ) /1024/1024 retention_undo_usage, + floor(maxquerylen/3600) ts_hh, + floor(mod(maxquerylen,3600)/60) ts_mi, + mod(mod(maxquerylen,3600),60) ts_ss, + ssolderrcnt, + nospaceerrcnt +from v$undostat +) U +where begin_time >= to_date('&bdate', 'DD/MM/YYYY HH24:MI') + and end_time <= to_date('&edate', 'DD/MM/YYYY HH24:MI') +order by U.begin_time; diff --git a/vdh/unindex_fk.sql b/vdh/unindex_fk.sql new file mode 100644 index 0000000..5685d44 --- /dev/null +++ b/vdh/unindex_fk.sql @@ -0,0 +1,51 @@ +column columns format a30 word_wrapped +column owner format a20 +column r_owner format a20 + +select + owner, + table_name, + constraint_name, + r_owner, + r_constraint_name, + cname1 || nvl2(cname2,','||cname2,null) || nvl2(cname3,','||cname3,null) || nvl2(cname4,','||cname4,null) || nvl2(cname5,','||cname5,null) || nvl2(cname6,','||cname6,null) || nvl2(cname7,','||cname7,null) || nvl2(cname8,','||cname8,null) columns +from + ( select + b.owner, + b.table_name, + b.constraint_name, + b.r_owner, + b.r_constraint_name, + max(decode( position, 1, column_name, null )) cname1, + max(decode( position, 2, column_name, null )) cname2, + max(decode( position, 3, column_name, null )) cname3, + max(decode( position, 4, column_name, null )) cname4, + max(decode( position, 5, column_name, null )) cname5, + max(decode( position, 6, column_name, null )) cname6, + max(decode( position, 7, column_name, null )) cname7, + max(decode( position, 8, column_name, null )) cname8, + count(*) col_cnt + from dba_cons_columns a, + dba_constraints b + where + a.owner = B.owner + and a.constraint_name = b.constraint_name + and b.constraint_type = 'R' + and b.owner not in ('SYS', 'SYSTEM', 'MDSYS','SYSMAN', 'EXFSYS', 'DBSNMP', 'ORDDATA') + group by b.owner, b.table_name, b.constraint_name, b.r_owner, b.r_constraint_name + ) cons +where + col_cnt > ALL ( select + count(*) + from + dba_ind_columns i + where + i.table_owner = cons.owner + and i.table_name = cons.table_name + and i.column_name in + ( cname1, cname2, cname3, cname4, cname5, cname6, cname7, cname8 ) + and i.column_position <= cons.col_cnt + group by i.index_name + ) +order by owner, table_name, constraint_name +; diff --git a/vdh/unwrap.py b/vdh/unwrap.py new file mode 100644 index 0000000..6671dbe --- /dev/null +++ b/vdh/unwrap.py @@ -0,0 +1,49 @@ +#!/usr/bin/python +# +# This script unwraps Oracle wrapped plb packages, does not support 9g +# Contact: niels at teusink net / blog.teusink.net +# +# License: Public domain +# +import re +import base64 +import zlib +import sys + +# simple substitution table +charmap = [0x3d, 0x65, 0x85, 0xb3, 0x18, 0xdb, 0xe2, 0x87, 0xf1, 0x52, 0xab, 0x63, 0x4b, 0xb5, 0xa0, 0x5f, 0x7d, 0x68, 0x7b, 0x9b, 0x24, 0xc2, 0x28, 0x67, 0x8a, 0xde, 0xa4, 0x26, 0x1e, 0x03, 0xeb, 0x17, 0x6f, 0x34, 0x3e, 0x7a, 0x3f, 0xd2, 0xa9, 0x6a, 0x0f, 0xe9, 0x35, 0x56, 0x1f, 0xb1, 0x4d, 0x10, 0x78, 0xd9, 0x75, 0xf6, 0xbc, 0x41, 0x04, 0x81, 0x61, 0x06, 0xf9, 0xad, 0xd6, 0xd5, 0x29, 0x7e, 0x86, 0x9e, 0x79, 0xe5, 0x05, 0xba, 0x84, 0xcc, 0x6e, 0x27, 0x8e, 0xb0, 0x5d, 0xa8, 0xf3, 0x9f, 0xd0, 0xa2, 0x71, 0xb8, 0x58, 0xdd, 0x2c, 0x38, 0x99, 0x4c, 0x48, 0x07, 0x55, 0xe4, 0x53, 0x8c, 0x46, 0xb6, 0x2d, 0xa5, 0xaf, 0x32, 0x22, 0x40, 0xdc, 0x50, 0xc3, 0xa1, 0x25, 0x8b, 0x9c, 0x16, 0x60, 0x5c, 0xcf, 0xfd, 0x0c, 0x98, 0x1c, 0xd4, 0x37, 0x6d, 0x3c, 0x3a, 0x30, 0xe8, 0x6c, 0x31, 0x47, 0xf5, 0x33, 0xda, 0x43, 0xc8, 0xe3, 0x5e, 0x19, 0x94, 0xec, 0xe6, 0xa3, 0x95, 0x14, 0xe0, 0x9d, 0x64, 0xfa, 0x59, 0x15, 0xc5, 0x2f, 0xca, 0xbb, 0x0b, 0xdf, 0xf2, 0x97, 0xbf, 0x0a, 0x76, 0xb4, 0x49, 0x44, 0x5a, 0x1d, 0xf0, 0x00, 0x96, 0x21, 0x80, 0x7f, 0x1a, 0x82, 0x39, 0x4f, 0xc1, 0xa7, 0xd7, 0x0d, 0xd1, 0xd8, 0xff, 0x13, 0x93, 0x70, 0xee, 0x5b, 0xef, 0xbe, 0x09, 0xb9, 0x77, 0x72, 0xe7, 0xb2, 0x54, 0xb7, 0x2a, 0xc7, 0x73, 0x90, 0x66, 0x20, 0x0e, 0x51, 0xed, 0xf8, 0x7c, 0x8f, 0x2e, 0xf4, 0x12, 0xc6, 0x2b, 0x83, 0xcd, 0xac, 0xcb, 0x3b, 0xc4, 0x4e, 0xc0, 0x69, 0x36, 0x62, 0x02, 0xae, 0x88, 0xfc, 0xaa, 0x42, 0x08, 0xa6, 0x45, 0x57, 0xd3, 0x9a, 0xbd, 0xe1, 0x23, 0x8d, 0x92, 0x4a, 0x11, 0x89, 0x74, 0x6b, 0x91, 0xfb, 0xfe, 0xc9, 0x01, 0xea, 0x1b, 0xf7, 0xce] + +def decode_base64_package(base64str): + base64dec = base64.decodestring(base64str)[20:] # we strip the first 20 chars (SHA1 hash, I don't bother checking it at the moment) + decoded = '' + for byte in range(0, len(base64dec)): + decoded += chr(charmap[ord(base64dec[byte])]) + return zlib.decompress(decoded) + + +sys.stderr.write("=== Oracle 10g/11g PL/SQL unwrapper 0.2 - by Niels Teusink - blog.teusink.net ===\n\n" ) +if len(sys.argv) < 2: + sys.stderr.write("Usage: %s infile.plb [outfile]\n" % sys.argv[0]) + sys.exit(1) + +infile = open(sys.argv[1]) +outfile = None +if len(sys.argv) == 3: + outfile = open(sys.argv[2], 'w') + +lines = infile.readlines() +for i in range(0, len(lines)): + # this is really naive parsing, but works on every package I've thrown at it + matches = re.compile(r"^[0-9a-f]+ ([0-9a-f]+)$").match(lines[i]) + if matches: + base64len = int(matches.groups()[0], 16) + base64str = '' + j = 0 + while len(base64str) < base64len: + j+=1 + base64str += lines[i+j] + base64str = base64str.replace("\n","") + if outfile: + outfile.write(decode_base64_package(base64str) + "\n") + else: + print(decode_base64_package(base64str)) diff --git a/vdh/use_space.sql b/vdh/use_space.sql new file mode 100644 index 0000000..73ea667 --- /dev/null +++ b/vdh/use_space.sql @@ -0,0 +1,54 @@ +DECLARE + total_blocks number; + total_bytes number; + unused_blocks number; + unused_bytes number; + last_used_extent_File_id number; + last_used_extentblock_id number; + last_used_block number; + Trun_Cur Number; + Out_value Number; + l_owner varchar2(30) := 'FULFILLMENT'; + +BEGIN + + For Space_Chk_Rec in (select + object_name, + object_type + from + dba_objects + where + object_type in ('TABLE', 'INDEX', 'LOB') + and owner = l_owner + and temporary = 'N' + order by + object_type, + object_name + ) loop + +-- dbms_output.put_line(Space_Chk_Rec.object_name || ' ' || Space_Chk_Rec.object_type); + sys.dbms_space.unused_space( l_owner, + Space_Chk_Rec.object_name, + Space_Chk_Rec.object_type, + total_blocks, + total_bytes, + unused_blocks, + unused_bytes, + last_used_extent_File_id, + last_used_extentblock_id, + last_used_block, + NULL + ); + + dbms_output.put_line('object_owner: ' || l_owner); + dbms_output.put_line('object_name: ' || Space_Chk_Rec.object_name); + dbms_output.put_line('object_type: ' || Space_Chk_Rec.object_type); + dbms_output.put_line('total_bytes: ' || total_bytes || ' bytes'); + dbms_output.put_line('unused_bytes: ' || unused_bytes || ' bytes'); + dbms_output.put_line('used_bytes: ' || (total_bytes - unused_bytes) || ' bytes'); + dbms_output.put_line('---------------------------------------------------------------------------'); + dbms_output.put_line(' '); + + End Loop; + +END; diff --git a/vdh/users_without_db_link_priv.sql b/vdh/users_without_db_link_priv.sql new file mode 100644 index 0000000..0e2879f --- /dev/null +++ b/vdh/users_without_db_link_priv.sql @@ -0,0 +1,59 @@ +with grantees as + ( select + distinct + connect_by_root(usr.name) username, + r_usr.name name + from + sys.sysauth$ sau, + sys.user$ r_usr, + sys.user$ usr + where + sau.privilege# = r_usr.user# + and sau.grantee# = usr.user# + connect by + prior privilege# = grantee# + start with + grantee# in + ( select + user# + from + sys.user$ + where + name in + ( select + owner + from + dba_objects + where + object_type = 'DATABASE LINK' + ) + ) + union all + select + distinct + owner, + owner + from + dba_objects + where + object_type = 'DATABASE LINK' + ) +select + distinct + owner +from + dba_objects +where + object_type = 'DATABASE LINK' +minus +select + grt.username +from + grantees grt, + dba_sys_privs sp +where + grt.name = sp.grantee + and privilege = 'CREATE DATABASE LINK' +order by + owner +; diff --git a/vdh/utl_plan_table.sql b/vdh/utl_plan_table.sql new file mode 100644 index 0000000..c4e5bef --- /dev/null +++ b/vdh/utl_plan_table.sql @@ -0,0 +1,52 @@ +CREATE GLOBAL TEMPORARY TABLE uptime.plan_table + (statement_id VARCHAR2(30), + timestamp DATE, + remarks VARCHAR2(80), + operation VARCHAR2(30), + options VARCHAR2(255), + object_node VARCHAR2(128), + object_owner VARCHAR2(30), + object_name VARCHAR2(30), + object_instance NUMBER(*,0), + object_type VARCHAR2(30), + optimizer VARCHAR2(255), + search_columns NUMBER, + id NUMBER(*,0), + parent_id NUMBER(*,0), + position NUMBER(*,0), + cost NUMBER(*,0), + cardinality NUMBER(*,0), + bytes NUMBER(*,0), + other_tag VARCHAR2(255), + partition_start VARCHAR2(255), + partition_stop VARCHAR2(255), + partition_id NUMBER(*,0), + other LONG, + distribution VARCHAR2(30), + cpu_cost NUMBER(*,0), + io_cost NUMBER(*,0), + temp_space NUMBER(*,0), + access_predicates VARCHAR2(4000), + filter_predicates VARCHAR2(4000)) +ON COMMIT PRESERVE ROWS +/ + +GRANT DELETE ON uptime.plan_table TO public +/ +GRANT INSERT ON uptime.plan_table TO public +/ +GRANT SELECT ON uptime.plan_table TO public +/ +GRANT UPDATE ON uptime.plan_table TO public +/ +GRANT REFERENCES ON uptime.plan_table TO public +/ +GRANT ON COMMIT REFRESH ON uptime.plan_table TO public +/ +GRANT QUERY REWRITE ON uptime.plan_table TO public +/ + +CREATE PUBLIC SYNONYM plan_table + FOR uptime.plan_table +/ + diff --git a/vdh/utlxplan_9i.sql b/vdh/utlxplan_9i.sql new file mode 100644 index 0000000..d5925a9 --- /dev/null +++ b/vdh/utlxplan_9i.sql @@ -0,0 +1,58 @@ +rem +rem $Header: utlxplan.sql 29-oct-2001.20:28:58 mzait Exp $ xplainpl.sql +rem +Rem Copyright (c) 1988, 2001, Oracle Corporation. All rights reserved. +Rem NAME +REM UTLXPLAN.SQL +Rem FUNCTION +Rem NOTES +Rem MODIFIED +Rem mzait 10/26/01 - add keys and filter predicates to the plan table +Rem ddas 05/05/00 - increase length of options column +Rem ddas 04/17/00 - add CPU, I/O cost, temp_space columns +Rem mzait 02/19/98 - add distribution method column +Rem ddas 05/17/96 - change search_columns to number +Rem achaudhr 07/23/95 - PTI: Add columns partition_{start, stop, id} +Rem glumpkin 08/25/94 - new optimizer fields +Rem jcohen 11/05/93 - merge changes from branch 1.1.710.1 - 9/24 +Rem jcohen 09/24/93 - #163783 add optimizer column +Rem glumpkin 10/25/92 - Renamed from XPLAINPL.SQL +Rem jcohen 05/22/92 - #79645 - set node width to 128 (M_XDBI in gendef) +Rem rlim 04/29/91 - change char to varchar2 +Rem Peeler 10/19/88 - Creation +Rem +Rem This is the format for the table that is used by the EXPLAIN PLAN +Rem statement. The explain statement requires the presence of this +Rem table in order to store the descriptions of the row sources. + +create global temporary table PLAN_TABLE ( + statement_id varchar2(30), + timestamp date, + remarks varchar2(80), + operation varchar2(30), + options varchar2(255), + object_node varchar2(128), + object_owner varchar2(30), + object_name varchar2(30), + object_instance numeric, + object_type varchar2(30), + optimizer varchar2(255), + search_columns number, + id numeric, + parent_id numeric, + position numeric, + cost numeric, + cardinality numeric, + bytes numeric, + other_tag varchar2(255), + partition_start varchar2(255), + partition_stop varchar2(255), + partition_id numeric, + other long, + distribution varchar2(30), + cpu_cost numeric, + io_cost numeric, + temp_space numeric, + access_predicates varchar2(4000), + filter_predicates varchar2(4000)); + diff --git a/vdh/uza_verify_raw.sh b/vdh/uza_verify_raw.sh new file mode 100644 index 0000000..92543d7 --- /dev/null +++ b/vdh/uza_verify_raw.sh @@ -0,0 +1,24 @@ +#!/bin/bash +OLSNODES=/opt/crs/bin/olsnodes +KFED=/opt/oracle/product/10.2.0/asm/bin/kfed +hformat="%-10s %-15s %-30s %-65s %-15s %-15s\n" +dformat="%-10s %-15s %-30s %-65s %-15s %-15s\n" + +rw=$1 + +echo +echo RAW Device: $rw +echo +printf "$hformat" "server" "emc device" "san info" "emc info" "kfed diskgroup" "kfed failgroup" +printf "$hformat" "----------" "---------------" "------------------------------" "-----------------------------------------------------------------" "---------------" "---------------" +for srv in `$OLSNODES` +do + ### for some reason I could not get \b to work with grep when called over ssh + emcpart=`ssh $srv grep "$rw[[:space:]]" /etc/sysconfig/rawdevices | grep -v '^#' | tr "\t" " " | tr -s " " | cut -d' ' -f2 | cut -d'/' -f3` + emc=`echo $emcpart | tr -d [0-9]` + emcinfo=`ssh $srv sudo /sbin/powermt display dev=$emc | grep "Logical device" | cut -d' ' -f3,4` + saninfo=`ssh $srv sudo /sbin/powermt display dev=$emc | egrep -i "clariion|ess|hitachi|hphsx|hpxp|invista|symm" | tr -s " " | cut -d' ' -f1,2` + grpname=`ssh $srv $KFED read /dev/raw/$rw | grep grpname | cut -d':' -f2 | cut -d';' -f1 | tr -d ' '` + fgname=`ssh $srv $KFED read /dev/raw/$rw | grep fgname | cut -d':' -f2 | cut -d';' -f1 | tr -d ' '` + printf "$dformat" "$srv" "$emcpart" "$saninfo" "$emcinfo" "$grpname" "$fgname" +done diff --git a/vdh/valid_events.sql b/vdh/valid_events.sql new file mode 100644 index 0000000..f07d83f --- /dev/null +++ b/vdh/valid_events.sql @@ -0,0 +1,4 @@ +select KSLEDNAM event from x$ksled +where KSLEDNAM like nvl('&event_name',KSLEDNAM) +order by 1 +/ diff --git a/vdh/view_auditing.sql b/vdh/view_auditing.sql new file mode 100644 index 0000000..e76d285 --- /dev/null +++ b/vdh/view_auditing.sql @@ -0,0 +1,86 @@ +create table audit_trail +( + username varchar2(30), + pk number, + attribute varchar2(30), + dataum varchar2(255), + timestamp date +) +/ + + +create or replace package audit_trail_pkg +as + function record ( p_pk in number, + p_attr in varchar2, + p_dataum in number) return number; + + function record ( p_pk in number, + p_attr in varchar2, + p_dataum in varchar2) return varchar2; + + function record ( p_pk in number, + p_attr in varchar2, + p_dataum in date) return date; +end; +/ + +create or replace package body audit_trail_pkg +as + + procedure log ( p_pk in number, + p_attr in varchar2, + p_dataum in varchar2 ) + + as + + pragma autonomous_transaction; + + begin + + insert into audit_trail + values ( user, p_pk, p_attr, p_dataum, sysdate); + commit; + + end; + + function record ( p_pk in number, + p_attr in varchar2, + p_dataum in number ) return number + is + + begin + + log(p_pk, p_attr, p_dataum); + return p_dataum; + + end; + + function record ( p_pk in number, + p_attr in varchar2, + p_dataum in varchar2) return varchar2 + + is + + begin + + log(p_pk, p_attr, p_dataum); + return p_dataum; + + end; + + function record ( p_pk in number, + p_attr in varchar2, + p_dataum in date) return date + + is + + begin + + log (p_pk, p_attr, to_char(p_dataum, 'dd/mm/yyyy hh24:mi:ss')); + return p_dataum; + + end; + +end; +/ diff --git a/vdh/wait_chains.sql b/vdh/wait_chains.sql new file mode 100644 index 0000000..2ed1b9a --- /dev/null +++ b/vdh/wait_chains.sql @@ -0,0 +1,84 @@ +set pages 50000 +set lines 200 +set heading off + +column w_proc format a50 tru +column instance format a20 tru +column inst format a28 tru +column wait_event format a50 tru +column p1 format a16 tru +column p2 format a16 tru +column p3 format a15 tru +column seconds format a50 tru +column sincelw format a50 tru +column blocker_proc format a50 tru +column fblocker_proc format a50 tru +column waiters format a50 tru +column chain_signature format a100 wra +column blocker_chain format a100 wra + +select + * +from + ( select + 'Current Process: ' || osid w_proc, + 'SID ' || i.instance_name instance, + 'INST #: ' || instance inst, + 'Blocking Process: ' || decode(blocker_osid,null,'',blocker_osid) || ' from Instance ' ||blocker_instance blocker_proc, + 'Number of waiters: ' || num_waiters waiters, + 'Final Blocking Process: ' || decode(p.spid,null, '', p.spid) || ' from Instance ' || s.final_blocking_instance fblocker_proc, + 'Program: ' ||p.program image, + 'Wait Event: ' || wait_event_text wait_event, + 'P1: ' || wc.p1 p1, + 'P2: ' ||wc.p2 p2, + 'P3: ' ||wc.p3 p3, + 'Seconds in Wait: ' || in_wait_secs seconds, + 'Seconds Since Last Wait: ' || time_since_last_wait_secs sincelw, + 'Wait Chain: ' || chain_id || ': ' || chain_signature chain_signature, + 'Blocking Wait Chain: ' || decode(blocker_chain_id,null, '',blocker_chain_id) blocker_chain + from + v$wait_chains wc, + gv$session s, + gv$session bs, + gv$instance i, + gv$process p + where + wc.instance = i.instance_number (+) + and ( wc.instance = s.inst_id (+) and wc.sid = s.sid (+) + and wc.sess_serial# = s.serial# (+) + ) + and ( s.inst_id = bs.inst_id (+) + and s.final_blocking_session = bs.sid (+) + ) + and ( bs.inst_id = p.inst_id (+) + and bs.paddr = p.addr (+) + ) + and ( num_waiters > 0 + or ( blocker_osid is not null + and in_wait_secs > 10 + ) + ) + order by + chain_id, + num_waiters desc + ) +where + rownum < 101 +; + +set heading on + +column w_proc clear +column instance clear +column inst clear +column wait_event clear +column p1 clear +column p2 clear +column p3 clear +column seconds clear +column sincelw clear +column blocker_proc clear +column fblocker_proc clear +column waiters clear +column chain_signature clear +column blocker_chain clear diff --git a/vdh/whoami.sql b/vdh/whoami.sql new file mode 100644 index 0000000..73f583b --- /dev/null +++ b/vdh/whoami.sql @@ -0,0 +1,31 @@ +-- give information on the own session without needing additional privs +-- credits to Uwe Hesse +-- +-- changed to use select from dual instead of dbms_output + +column username format a30 +column sid format a8 +column current_schema format a30 +column instance_name format a15 +column pdb_name format a15 +column database_role format a20 +column os_user format a20 +column client_ip format a20 +column server_hostname format a20 +column client_hostname format a20 + +select + sys_context('userenv','session_user') as username, + sys_context('userenv','sid') as sid, + sys_context('userenv','current_schema') as current_schema, + sys_context('userenv','instance_name') as instance_name, + sys_context('userenv','con_name') as pdb_name, + sys_context('userenv','database_role') as database_role, + sys_context('userenv','os_user') as os_user, + sys_context('userenv','ip_address') as client_ip, + sys_context('userenv','host') as client_hostname, + sys_context('userenv','server_host') as server_hostname +from + dual +; + diff --git a/vdh/why_mismatch.sql b/vdh/why_mismatch.sql new file mode 100644 index 0000000..7a71693 --- /dev/null +++ b/vdh/why_mismatch.sql @@ -0,0 +1,157 @@ +set linesize 201 + +set echo on +/* +01 sql_type_mismatch 02 optimizer_mismatch 03 outline_mismatch 04 stats_row_mismatch 05 literal_mismatch +06 force_hard_parse 07 explain_plan_cursor 08 buffered_dml_mismatch 09 pdml_env_mismatch 10 inst_drtld_mismatch +11 slave_qc_mismatch 12 typecheck_mismatch 13 auth_check_mismatch 14 bind_mismatch 15 describe_mismatch +16 language_mismatch 17 translation_mismatch 18 bind_equiv_failure 19 insuff_privs 20 insuff_privs_rem +21 remote_trans_mismatch 22 logminer_session_mismatch 23 incomp_ltrl_mismatch 24 overlap_time_mismatch 25 edition_mismatch +26 mv_query_gen_mismatch 27 user_bind_peek_mismatch 28 typchk_dep_mismatch 29 no_trigger_mismatch 30 flashback_cursor +31 anydata_transformation 32 pddl_env_mismatch 33 top_level_rpi_cursor 34 different_long_length 35 logical_standby_apply +36 diff_call_durn 37 bind_uacs_diff 38 plsql_cmp_switchs_diff 39 cursor_parts_mismatch 40 stb_object_mismatch +41 crossedition_trigger_mismatch 42 pq_slave_mismatch 43 top_level_ddl_mismatch 44 multi_px_mismatch 45 bind_peeked_pq_mismatch +46 mv_rewrite_mismatch 47 roll_invalid_mismatch 48 optimizer_mode_mismatch 49 px_mismatch 50 mv_staleobj_mismatch +51 flashback_table_mismatch 52 litrep_comp_mismatch 53 plsql_debug 54 load_optimizer_stats 55 acl_mismatch +56 flashback_archive_mismatch 57 lock_user_schema_failed 58 remote_mapping_mismatch 59 load_runtime_heap_failed 60 hash_match_failed +61 purged_cursor 62 bind_length_upgradeable 63 use_feedback_stats +*/ +set echo off + +column 01 format a2 +column 02 format a2 +column 03 format a2 +column 04 format a2 +column 05 format a2 +column 06 format a2 +column 07 format a2 +column 08 format a2 +column 09 format a2 +column 10 format a2 +column 11 format a2 +column 12 format a2 +column 13 format a2 +column 14 format a2 +column 15 format a2 +column 16 format a2 +column 17 format a2 +column 18 format a2 +column 19 format a2 +column 20 format a2 +column 21 format a2 +column 22 format a2 +column 23 format a2 +column 24 format a2 +column 25 format a2 +column 26 format a2 +column 27 format a2 +column 28 format a2 +column 29 format a2 +column 30 format a2 +column 31 format a2 +column 32 format a2 +column 33 format a2 +column 34 format a2 +column 35 format a2 +column 36 format a2 +column 37 format a2 +column 38 format a2 +column 39 format a2 +column 40 format a2 +column 41 format a2 +column 42 format a2 +column 43 format a2 +column 44 format a2 +column 45 format a2 +column 46 format a2 +column 47 format a2 +column 48 format a2 +column 49 format a2 +column 50 format a2 +column 51 format a2 +column 52 format a2 +column 53 format a2 +column 54 format a2 +column 55 format a2 +column 56 format a2 +column 57 format a2 +column 58 format a2 +column 59 format a2 +column 60 format a2 +column 61 format a2 +column 62 format a2 +column 63 format a2 + + +select + child_number + ,sql_type_mismatch "01" + ,optimizer_mismatch "02" + ,outline_mismatch "03" + ,stats_row_mismatch "04" + ,literal_mismatch "05" + ,force_hard_parse "06" + ,explain_plan_cursor "07" + ,buffered_dml_mismatch "08" + ,pdml_env_mismatch "09" + ,inst_drtld_mismatch "10" + ,slave_qc_mismatch "11" + ,typecheck_mismatch "12" + ,auth_check_mismatch "13" + ,bind_mismatch "14" + ,describe_mismatch "15" + ,language_mismatch "16" + ,translation_mismatch "17" + ,bind_equiv_failure "18" + ,insuff_privs "19" + ,insuff_privs_rem "20" + ,remote_trans_mismatch "21" + ,logminer_session_mismatch "22" + ,incomp_ltrl_mismatch "23" + ,overlap_time_mismatch "24" + ,edition_mismatch "25" + ,mv_query_gen_mismatch "26" + ,user_bind_peek_mismatch "27" + ,typchk_dep_mismatch "28" + ,no_trigger_mismatch "29" + ,flashback_cursor "30" + ,anydata_transformation "31" + ,pddl_env_mismatch "32" + ,top_level_rpi_cursor "33" + ,different_long_length "34" + ,logical_standby_apply "35" + ,diff_call_durn "36" + ,bind_uacs_diff "37" + ,plsql_cmp_switchs_diff "38" + ,cursor_parts_mismatch "39" + ,stb_object_mismatch "40" + ,crossedition_trigger_mismatch "41" + ,pq_slave_mismatch "42" + ,top_level_ddl_mismatch "43" + ,multi_px_mismatch "44" + ,bind_peeked_pq_mismatch "45" + ,mv_rewrite_mismatch "46" + ,roll_invalid_mismatch "47" + ,optimizer_mode_mismatch "48" + ,px_mismatch "49" + ,mv_staleobj_mismatch "50" + ,flashback_table_mismatch "51" + ,litrep_comp_mismatch "52" + ,plsql_debug "53" + ,load_optimizer_stats "54" + ,acl_mismatch "55" + ,flashback_archive_mismatch "56" + ,lock_user_schema_failed "57" + ,remote_mapping_mismatch "58" + ,load_runtime_heap_failed "59" + ,hash_match_failed "60" + ,purged_cursor "61" + ,bind_length_upgradeable "62" + ,use_feedback_stats "63" +from + v$sql_shared_cursor +where + sql_id = '&sql_id' +order by + child_number +; diff --git a/vdh/workarea_histogram.sql b/vdh/workarea_histogram.sql new file mode 100644 index 0000000..a4d0dd3 --- /dev/null +++ b/vdh/workarea_histogram.sql @@ -0,0 +1,40 @@ +-- overview of the number of optimal / onepass / multipass sorts per workarea histogram bucket +-- translating the low / high_optimal_size number into human readable units + +column low_optimal_size_h format a15 justify right +column high_optimal_size_h format a15 justify right +column optimal_executions format 999G999G999G999 +column onepass_executions format 999G999G999G999 +column multipass_executions format 999G999G999G999 +column total_executions format 999G999G999G999 + +break on inst_id skip 1 + +select + inst_id, + case + when low_optimal_size >= 1099511627776 then to_char(low_optimal_size/1024/1024/1024/1024, '999G990D99') || ' TB' + when low_optimal_size >= 1073741824 then to_char(low_optimal_size/1024/1024/1024, '999G990D99') || ' GB' + when low_optimal_size >= 1048576 then to_char(low_optimal_size/1024/1024, '999G990D99') || ' MB' + when low_optimal_size >= 1024 then to_char(low_optimal_size/1024, '999G990D99') || ' KB' + else to_char(low_optimal_size, '999G990D99') + end as low_optimal_size_h, + case + when high_optimal_size >= 1099511627776 then to_char(high_optimal_size/1024/1024/1024/1024, '999G990D99') || ' TB' + when high_optimal_size >= 1073741824 then to_char(high_optimal_size/1024/1024/1024, '999G990D99') || ' GB' + when high_optimal_size >= 1048576 then to_char(high_optimal_size/1024/1024, '999G990D99') || ' MB' + when high_optimal_size >= 1024 then to_char(high_optimal_size/1024, '999G990D99') || ' KB' + else to_char(high_optimal_size, '999G990D99') + end as high_optimal_size_h, + optimal_executions, + onepass_executions, + multipasses_executions, + total_executions +from + gv$sql_workarea_histogram +order by + inst_id, + low_optimal_size +; + +clear breaks diff --git a/vdh/xplain.sql b/vdh/xplain.sql new file mode 100644 index 0000000..d3c04c7 --- /dev/null +++ b/vdh/xplain.sql @@ -0,0 +1,4 @@ +set linesize 170 +set pages 9999 + +select * from table(dbms_xplan.display); \ No newline at end of file diff --git a/vdh/xplan_ash.sql b/vdh/xplan_ash.sql new file mode 100644 index 0000000..7380bfb --- /dev/null +++ b/vdh/xplan_ash.sql @@ -0,0 +1,14573 @@ +-- Store current SQL*Plus environment +-- This requires at least a 10.2 SQL*Plus version to work +store set .xplan_settings replace +set echo off verify off termout off timing off define "&" concat "." null "" trimspool on +-- If you need to debug, uncomment the following line +-- set echo on verify on termout on +set doc off +doc +-- ---------------------------------------------------------------------------------------------- +-- +-- Script: xplan_ash.sql +-- +-- Version: 4.23 +-- June 2016 +-- +-- Author: Randolf Geist +-- http://oracle-randolf.blogspot.com +-- +-- Description: Single SQL statement execution analysis using ASH (from 10.2 on) +-- +-- Furthermore a free-standing SQL wrapper over DBMS_XPLAN. Provides access to the +-- DBMS_XPLAN.DISPLAY_CURSOR / DISPLAY_AWR pipelined function for a given SQL_ID and CHILD_NUMBER (PLAN_HASH_VALUE for DISPLAY_AWR) +-- +-- This is a tool for an extended analysis of the data provided by the +-- Runtime Profile (aka. Rowsource Statistics enabled via +-- SQL_TRACE = TRUE, STATISTICS_LEVEL = ALL or GATHER_PLAN_STATISTICS hint) +-- and reported via the ALLSTATS/MEMSTATS/IOSTATS formatting option of +-- DBMS_XPLAN.DISPLAY_CURSOR +-- +-- In addition ASH data can be reported for the following purposes: +-- +-- 1. Show general information about SQL execution activity +-- 2. Provide activity information per SQL plan line id (11g+) +-- 3. Show distribution of work between Parallel Workers / Query Coordinator / RAC Nodes based on ASH data +-- +-- The ASH data options make this a kind of "real time" monitoring tool. Unfortunately the +-- free ASH implementations (and 10g versions) lack the correlation to the SQL plan line id, hence information on plan line level is only +-- possible with the original ASH implementation from 11g onwards +-- +-- Note that this script supports in principle other ASH sources - everything can be configured below (S-ASH is now also supported) +-- +-- A second configuration set is provided that is based on DBA_HIST_ACTIVE_SESS_HISTORY for running analysis on historic ASH data +-- Although the sample frequency of 10 seconds limits the significance of the analysis it might be much better than nothing at all +-- +-- !! The (built-in) ASH reporting requires at least Enterprise Edition plus the Diagnostic Pack license !! +-- +-- Versions: This utility will work from version 10.2 and later +-- The ASH based information on plan line level is only available from 11g on (10g has ASH but no relation to SQL execution instances or SQL plan lines) +-- +-- Tested with database versions 10.2.0.4, 10.2.0.5, 11.1.0.7, 11.2.0.1, 11.2.0.2 and 11.2.0.3, 11.2.0.4, 12.1.0.1, 12.1.0.2 +-- +-- Tested with SQL*Plus / client versions 10.2.0.4, 11.1.0.7, 11.2.0.1, 11.2.0.2, 12.1.0.1 including InstantClient 11.2.0.1 +-- +-- Required: The same access as DBMS_XPLAN.DISPLAY_CURSOR (DISPLAY_AWR) requires. See the documentation +-- of the DBMS_XPLAN package for your Oracle version for more information +-- +-- !! The ASH reporting requires at least Enterprise Edition plus the Diagnostic Pack license !! +-- +-- In addition the script directly queries +-- 1) (G)V$SESSION +-- 2) GV$SQL_PLAN / GV$SQL_PLAN_STATISTICS_ALL (DBA_HIST_SQL_PLAN) +-- 3) GV$SQL +-- 4) GV$SQL_MONITOR / optionally GV$SQL_PLAN_MONITOR +-- 5) GV$ACTIVE_SESSION_HISTORY (DBA_HIST_ACTIVE_SESS_HISTORY) +-- 6) V$DATABASE +-- 7) GV$SQLSTATS (DBA_HIST_SQLTEXT, SASH_SQLTXT) +-- 8) GV$ASH_INFO (fallback to GV$ACTIVE_SESSION_HISTORY if unavailable) +-- +-- Note: This script writes two files during execution (.xplan_ash_temp and .xplan_ash_settings), hence it requires write access to the current working directory +-- +-- If you see some error messages similar to the following during execution: +-- +-- SP2-0103: Nothing in SQL buffer to run. +-- +-- SP2-0110: Cannot create save file ".xplan_ash_temp" +-- +-- plan_operations as +-- * +-- ERROR at line 14: +-- ORA-00933: SQL command not properly ended +-- +-- plan_operations as +-- * +-- ERROR at line 2: +-- ORA-00900: invalid SQL statement +-- +-- then you cannot write to your current working directory +-- +-- Credits: Based on the original XPLAN implementation by Adrian Billington (http://www.oracle-developer.net/utilities.php +-- resp. http://www.oracle-developer.net/content/utilities/xplan.zip) +-- and inspired by Kyle Hailey's TCF query (http://dboptimizer.com/2011/09/20/display_cursor/) +-- +-- Features: A lot of information about a single SQL execution from Active Session History (and Real-Time SQL Monitoring if available and requested) +-- See below for a more detailed description of the information sections based on ASH / SQL Monitoring +-- +-- Furthermore additional columns on execution plan line level, injected into the DBMS_XPLAN.DISPLAY* output +-- +-- There are two sources for the additional columns on execution plan line level: Extended Rowsource Statistics and Active Session History/Real-Time SQL Monitoring +-- +-- Extended Rowsource Statistics: +-- +-- In addition to the PID (The PARENT_ID) and ORD (The order of execution, note that this doesn't account for the special cases so it might be wrong) +-- columns added by Adrian's wrapper the following additional execution plan columns over ALLSTATS are available (see column configuration where it can be customized which to show): +-- +-- A_TIME_SELF : The time taken by the operation itself - this is the operation's cumulative time minus the direct descendants operation's cumulative time +-- LIO_SELF : The LIOs done by the operation itself - this is the operation's cumulative LIOs minus the direct descendants operation's cumulative LIOs +-- READS_SELF : The reads performed the operation itself - this is the operation's cumulative reads minus the direct descendants operation's cumulative reads +-- WRITES_SELF : The writes performed the operation itself - this is the operation's cumulative writes minus the direct descendants operation's cumulative writes +-- A_TIME_SELF_GRAPH : A graphical representation of A_TIME_SELF relative to the total A_TIME +-- LIO_SELF_GRAPH : A graphical representation of LIO_SELF relative to the total LIO +-- READS_SELF_GRAPH : A graphical representation of READS_SELF relative to the total READS +-- WRITES_SELF_GRAPH : A graphical representation of WRITES_SELF relative to the total WRITES +-- LIO_RATIO : Ratio of LIOs per row generated by the row source - the higher this ratio the more likely there could be a more efficient way to generate those rows (be aware of aggregation steps though) +-- TCF_GRAPH : Each "+"/"-" sign represents one order of magnitude based on ratio between E_ROWS_TIMES_START and A-ROWS. Note that this will be misleading with Parallel Execution (see E_ROWS_TIMES_START) +-- E_ROWS_TIMES_START : The E_ROWS multiplied by STARTS - this is useful for understanding the actual cardinality estimate for related combine child operations getting executed multiple times. Note that this will be misleading with Parallel Execution +-- +-- For the special Rowsource Statistics mode 3 ("_rowsource_statistics_sampfreq" = 3) where only actual cardinalities are measured, XPLAN_ASH from version 3.0 on supports a special FORMAT option "AROWS". +-- This adds a column "A-Rows" (similar to what DISPLAY_CURSOR does when using the *STATS formatting option) since DISPLAY_CURSOR doesn't support this mode properly +-- - it doesn't show the A-Rows in that case although the columns are populated in GV$SQL_PLAN_STATISTICS_ALL +-- Note that you usually want to use "AROWS LAST" similar to "ALLSTATS LAST" if you want to see the actual cardinalities of the last execution +-- +-- More information including demos can be found online at http://oracle-randolf.blogspot.com/2011/12/extended-displaycursor-with-rowsource.html +-- +-- Active Session History: +-- +-- The following information is available based on ASH data (from 11g on). Note that this can be configured in two ways: +-- - The "options" determine what information will be queried / shown in general (see below for more details) +-- - The column configuration can be used to customize exactly which columns to show as part the execution plan output (if available) +-- +-- Act : Indicates the most recent active plan lines according to ASH (only applicable if the statement is currently executing) +-- Start : The second this the plan line was active for the first time +-- Dur(T) : Show the number of seconds the plan line is/was active (first sample to last sample) +-- Dur(A) : Show the number of seconds the plan line is/was active (active samples) +-- Time Active Graph : Show a graphical representation of the activity timeline of the plan line +-- Parallel Distribution ASH : Show the Top N processes names along with the number of samples found per SQL plan line id. A trailing "..." indicates that there are more than N processes found (only applicable when Parallel Execution detected). The leading number (for example "5:...") shows the unique number of processes (five in this case) found in the ASH samples for this plan line +-- Parallel Execution Skew ASH : Indicator of data distribution skew - the bigger this graph the more relevant the skew of this execution plan line is to the overall execution time (only applicable when Parallel Execution detected) +-- Avg Act Sess Graph (T) ASH : Show the Average Active Sessions per execution plan line (based on first sample to sample time). This allows to detect temporal skew and data distribution skew, but you need to look at all plan lines that are active at the same time to see if there is skew or not (only applicable when Parallel Execution detected, hidden by default from 4.0 on) +-- Avg Act Sess Graph (A) ASH : Show the Average Active Sessions per execution plan line (based on active samples). This allows to detect temporal skew and data distribution skew, but you need to look at all plan lines that are active at the same time to see if there is skew or not (only applicable when Parallel Execution detected, hidden by default from 4.0 on) +-- Med Act Sess Graph ASH : Show the Median Active Sessions per execution plan line (based on active samples). This allows to detect temporal skew and data distribution skew, but you need to look at all plan lines that are active at the same time to see if there is skew or not (only applicable when Parallel Execution detected, hidden by default from 4.0 on) +-- Activity Graph ASH : Show a graphical representation (CPU + Other activity) of the number of samples against that SQL plan line id relative to the total number of samples +-- Top N Activity ASH : Show the Top N activities (waits or ON CPU) from ASH for that SQL plan line id. A trailing "..." indicates that there are more than N activities found +-- +-- The default value for N is 5, but can be changed in the configuration section below, for both "Parallel Distribution ASH" and the "Top N Activity ASH". +-- You can also configure the width of the ASH graphs and the character used for the "Graphs" and "Act" column +-- +-- Since version 4.0 Real-Time SQL Monitoring info will be added on execution plan line level if available and requested (see the ASH options below) +-- +-- The following columns are available: +-- +-- Execs : The number of times this execution plan line was started +-- A-Rows : The actual number of rows generated by this execution plan line +-- PGA : Max. PGA usage of this execution plan operation if applicable, in (K,M,G,E)bytes +-- Temp : Max. Temp usage of this execution plan operation if applicable, in (K,M,G,E)bytes +-- ReadB : Physical I/O read volume of this execution plan operation if applicable, in (K,M,G,E)bytes +-- WriteB : Physical I/O write volume of this execution plan operation if applicable, in (K,M,G,E)bytes +-- CellO% : The Cell Offload Percentage of this operation if applicable +-- +-- Row distribution for Parallel Execution +-- +-- The column "Parallel Distribution ASH" will have also the Rowcount per Parallel Execution Server added if monitoring info gets used and is available. +-- The Rowcount is added in square brackets to the process, after the number of samples in paranthesis, something like this: +-- +-- P012(44)[183K] +-- +-- This means process P012 was sampled 44 times for this execution plan line and produced 183K rows according to Real-Time SQL Monitoring +-- +-- Note that this information is crucial in understanding Data Distribution Skew and not available from the official Real-Time SQL Monitoring report up to 11.2 +-- 12c SQL Monitoring allows to extract this information via the report +-- +-- If Real-Time SQL Monitoring information is available (and requested) this column will now show process and rows information even for those processes that are not sampled in ASH +-- In such a case these processes will show up with a sample count of 0 and the leading number indicating the number of processes sampled for this plan line can be less than the processes shown +-- since it refers to ASH sample data, not Real-Time SQL Monitoring +-- +-- So this can look like this for example: +-- +-- 0:P007(0)[666K],P000(0)[0],P001(0)[0],P002(0)[0],P003(0)[0],... +-- +-- Which means that for this plan line no processes were found in the ASH samples, but Real-Time SQL Monitoring information is available - and the processes will be sorted by sample count descending, rows descending +-- Since in above example no ASH samples are found, the processes are effectively sorted by rows descending +-- +-- If you find this output messy and want to return to previous behaviour (show only processes from ASH samples) by setting the configuration switch "show_monitor_rowcount" to anything else than the default of "YES" +-- +-- Usage: @xplan_ash.sql 1[sql_id|sid=[@]] 2[SQL_EXEC_START] 3[SQL_EXEC_ID (SQL_EXEC_END for pre-11g)] 4[*AUTO*|CURR|HIST|MIXED] 5[ON|*OFF*] 6[MONITOR|*ASH*] 7[[*ASH*|LIMITED_ASH][,][*DISTRIB*][,][*MONITOR*][,][*TIMELINE*]|[NONE]] 8[cursor_child_number (plan_hash_value for the historic ASH)] 9[DBMS_XPLAN_format_option] 10[comma_sep_column_list_to_show/hide] +-- +-- Parameter 1+8: +-- +-- Specify the SQL_ID to be analyzed +-- +-- If the SQL_ID is omitted the previously executed SQL_ID and CHILD_NUMBER/PLAN_HASH_VALUE of the current session will be used +-- +-- This will be taken either from GV$SESSION (when according to Parameter 7 no ASH should be used) or from Real-Time SQL Monitoring/ASH according to Parameter 6 +-- +-- Specify a CHILD_NUMBER when referring to CURRent ASH (Parameter 4), specify a PLAN_HASH_VALUE when using the MIXED/HISToric ASH configuration +-- +-- Note that when using the ASH functionality (Parameter 7) you usually don't need to specify this parameter: +-- +-- If the SQL_ID is specified but the CHILD_NUMBER / PLAN_HASH_VALUE (Parameter 8) is omitted then +-- - If the ASH options are disabled then CHILD_NUMBER 0 is assumed +-- - If ASH / Real-Time SQL Monitoring should be queried, the corresponding CHILD_NUMBER / PLAN_HASH_VALUE will be looked up based on the remaining options specified +-- +-- This means that the CHILD_NUMBER should only be specified when using the Rowsource Statistics mode only without ASH +-- +-- If instead of a SQL_ID SID=[@] is specified as first argument, the most recently executed SQL_ID of the corresponding SID will be taken from either: +-- - Active Session History or Real-Time SQL Monitoring (see Parameter 6 below) when ASH functionality should be used (Parameter 7) +-- - GV$SESSION when ASH functionality should not be used (NONE as Parameter 7) +-- +-- Optionally the SID's instance can be specified for RAC +-- +-- Note that the SID needs to be either a Query Coordinator's SID for Parallel Execution or a normal, serial session +-- SIDs of Parallel Execution Servers won't work +-- +-- This version does not support processing multiple child cursors like DISPLAY_CURSOR / AWR is capable of +-- when passing NULL as CHILD_NUMBER / PLAN_HASH_VALUE to DISPLAY_CURSOR / AWR. Hence a CHILD_NUMBER / PLAN_HASH_VALUE is mandatory, either +-- implicitly generated (see above) or explicitly passed +-- +-- RAC: A note to RAC users below 11.2.0.2: If the current instance was *not* involved in executing the SQL, and the execution plan should be displayed from the Shared Pool (CURR option), in best case the execution plan cannot be found +-- In worst case an incorrect plan will be associated from the local instance Shared Pool (You could have the same SQL_ID / CHILD_NUMBER with different plans in different RAC instances). +-- Therefore you need to be careful with cross-instance / remote-instance executions in RAC +-- Why? The tool relies on DBMS_XPLAN.DISPLAY_CURSOR for showing the execution plan from the Shared Pool - but DISPLAY_CURSOR is limited to the local Shared Pool +-- +-- From 11.2.0.2 on a workaround is implemented that can "remotely" execute DBMS_XPLAN.DISPLAY_CURSOR on the RAC instance where the correct plan should be in the Library Cache +-- +-- Parameter 2+3: +-- +-- For 11g+: +-- SQL_EXEC_START: This is required if you're looking for a specific execution instance of a statement in ASH instead of the most recent. It is a date in format "YYYY-MM-DD-HH24:MI:SS" (date mask can be changed in the configuration section, and optional date masks are now supported, see "dm_opt1"/"dm_opt2" configuration parameter) +-- SQL_EXEC_ID : Also required for the same purpose (defaults to 16777216 if omitted and SQL_EXEC_START is specified, this default can be changed in the configuration section) +-- +-- Note that since version 4.0 XPLAN_ASH tries different optional date masks if the default mask doesn't work, this is just to simplify copy&pasting of dates +-- The list of optional date masks can be found in the configuration parameter "dm_opt1/dm_opt2". Feel free to add your favorite date masks there +-- +-- Furthermore since version 4.0, if SQL_EXEC_START was specified but SQL_EXEC_ID is left blank and version is 11g+, then a default SQL_EXEC_ID of 16777216 will be used +-- This default SQL_EXEC_ID can be changed - if you have a RAC environment with multiple instances this might make sense to change (configuration parameter "default_sql_exec_id") +-- +-- If these two are omitted and the SID and previous session execution cases don't apply then the last execution is searched in either GV$SQL_MONITOR (MONITOR) or GV$ACTIVE_SESSION_HISTORY (the default ASH option, see Parameter 6) +-- The latter option is required if no Tuning Pack license is available, the former option can be used to make sure that the script finds the same latest execution instance as the Real-Time SQL Monitoring +-- +-- This information is used as filter on SQL_EXEC_START and SQL_EXEC_ID in ASH. Together with the SQL_ID it uniquely identifies an execution instance of that SQL +-- +-- For 10.2: +-- SQL_EXEC_START: This is always mandatory and determines the start samples in ASH. It is a date in format "YYYY-MM-DD-HH24:MI:SS" (date mask can be changed in the configuration section) +-- SQL_EXEC_END : This is always mandatory and determines the end samples in ASH. It is a date in format "YYYY-MM-DD-HH24:MI:SS" (date mask can be changed in the configuration section) +-- +-- For 10.2 these two are mandatory since an exact SQL execution instance cannot be identified in pre-11g ASH data +-- +-- See above for SQL_EXEC_START - version 4.0 tries the same optional date masks at SQL_EXEC_END in case of 10g +-- +-- Note that from version 3.0 on by default XPLAN_ASH searches for the earliest / latest sample of the identified SQL_ID within the given SQL_EXEC_START / SQL_EXEC_END time period +-- This means you can be lazy and specify a "rough range" of time where you believe the SQL_ID was active and XPLAN_ASH will automatically determine the exact range +-- However, since there is no concept of distinguishing different executions the range identified automatically by XPLAN_ASH might cover multiple executions of the same SQL_ID +-- +-- This behaviour can be controlled via the configuration switch "find_min_sample_10g", see the configuration section below +-- When setting that switch != YES the pre-3.0 behaviour will be used that uses the exact given SQL_EXEC_START / SQL_EXEC_END for further processing +-- +-- Parameter 4: +-- +-- This determines the configuration set to use. The default is AUTO, which means that the script automatically chooses either CURR (V$ACTIVE_SESSION_HISTORY / V$SQL_PLAN) or HIST (DBA_HIST_ACTIVE_SESS_HISTORY / DBA_HIST_SQL_PLAN). +-- +-- AUTO at present only works if an SQL_EXEC_START (Parameter 2) is specified. If SQL_EXEC_START is left blank, AUTO means search in CURR for the last execution. +-- +-- If SQL_EXEC_START is specified AUTO determines the earliest sample in V$ACTIVE_SESSION_HISTORY and uses either CURR or HIST. +-- +-- Other options include: +-- +-- Specify CURR if the current ASH from GV$ACTIVE_SESSION_HISTORY should be used or the historic information from DBA_HIST_ACTIVE_SESS_HISTORY (HIST) +-- +-- This also means that the CURRent configuration will use the Library Cache to get the plan (DBMS_XPLAN.DISPLAY_CURSOR), but the HIST configuration will use DBMS_XPLAN.DISPLAY_AWR to obtain the execution plan +-- +-- There is also a configuration for taking the plan from AWR (DBMS_XPLAN.DISPLAY_AWR) but taking the sample data from current ASH (GV$ACTIVE_SESSION_HISTORY): MIXED +-- +-- Note that you can abbreviate this option (e.g. a or A for AUTO, cu for CURR etc.) +-- +-- Parameter 5: +-- +-- Allows to enable/disable the EXPERIMENTAL stuff (see below for a detailed description) +-- Default is don't show EXPERIMENTAL (OFF), specify ON to have it shown +-- +-- Note that you can abbreviate this option (e.g. y for YES) +-- +-- Parameter 6: +-- +-- For 11g+: +-- MONITOR or ASH: Determines where to search for the last execution. By default the script uses ASH. +-- +-- This is only applicable if no SQL_EXEC_START / SQL_EXEC_ID is specified, or no SQL_ID at all (or a SID is specified in Parameter 1 and ASH should be used according to Parameter 7, see next argument) +-- +-- Note that the scripts queries both GV$SQL_MONITOR and GV$ACTIVE_SESSION_HISTORY to determine the last execution if no SQL_EXEC_START / SQL_EXEC_ID was specified +-- +-- !! If you don't have a Tuning Pack license but haven't disabled it in the CONTROL_MANAGEMENT_PACK_ACCESS parameter this query might show up as a Tuning Pack feature usage !! +-- +-- Note that you can abbreviate this option (e.g. m for MONITOR) +-- +-- Parameter 7: +-- +-- The next argument allows specifying if ASH activity, Parallel Distribution and/or Activity Timeline information as well as Real-Time SQL Monitoring info on execution plan line level should be displayed: +-- +-- [[*ASH*|LIMITED_ASH][,][*DISTRIB*][,][*MONITOR*][,][*TIMELINE*]|[NONE]] +-- +-- Use the LIMITED_ASH option to avoid long running XPLAN_ASH queries when analyzing long running statements - usually only required when the session lacks the ALTER SESSION privilege +-- This will avoid the two sections that take most of the time, see below +-- +-- Note that you can abbreviate this option (e.g. a,d,t for ASH,DISTRIB,TIMELINE) +-- +-- The following sections of the output will always be shown if any of options ASH, DISTRIB or TIMELINE is specified: +-- - SQL statement execution ASH Summary +-- - SQL statement execution ASH Summary per Instance (if Cross Instance Parallel Execution is detected) +-- - Activity on execution plan line level (Enterprise Edition + Diagnostics Pack + 11g+) +-- +-- ASH specific output: +-- - Summary of this session's other activity +-- - Other activity details +-- - Global ASH Summary for concurrent activity ==> skipped in case of the LIMITED_ASH option +-- - Concurrent activity Summary (not this execution) ==> skipped in case of the LIMITED_ASH option +-- - Concurrent activity top SQL_IDs ==> skipped in case of the LIMITED_ASH option +-- - Concurrent activity I/O Summary based on ASH (only if Experimental mode enabled and 11.2+, enabled by default from 11.2.0.3 on) ==> skipped in case of the LIMITED_ASH option +-- - Concurrent activity I/O Summary per Instance based on ASH (only if Experimental mode enabled and 11.2+, enabled by default from 11.2.0.3 on) ==> skipped in case of the LIMITED_ASH option +-- - SQL Statement I/O Summary based on ASH (only if Experimental mode enabled and 11.2+, enabled by default from 11.2.0.3 on) +-- - SQL Statement I/O Summary per Instance based on ASH (only if Cross Instance Parallel Execution is detected and Experimental mode enabled and 11.2+, enabled by default from 11.2.0.3 on) +-- - Activity Class Summary +-- - Activity Class Summary per Instance (if Cross Instance Parallel Execution is detected) +-- - Activity Summary +-- - Activity Summary per Instance (if Cross Instance Parallel Execution is detected) +-- +-- DISTRIB specific output: +-- - Information on Parallel Degree based on ASH (only if execution plan is available) +-- - Parallel Worker activity overview based on ASH (only if Parallel Execution is detected) +-- - Activity Timeline based on ASH (both DISTRIB or TIMELINE) +-- +-- TIMELINE specific output: +-- - Activity Timeline based on ASH (both DISTRIB or TIMELINE) +-- +-- MONITOR specific output: +-- - Real-Time SQL Monitoring Execution Summary +-- - Actual bind values from Real-Time SQL Monitoring +-- +-- The options specified also determine the additional columns available on execution plan line level: +-- +-- ASH : Show "Act", "Activity Graph ASH" and "Top N Activity ASH" columns per SQL plan line id (default) +-- +-- DISTRIB : Show Parallel Distribution info based on ASH: Top N Parallel Processes, Parallel Distribution Graph and Average/Median Active Sessions Graphs per SQL plan line id +-- +-- TIMELINE : Show the Start Active, Duration and Time Active Graph columns based on ASH data (default) +-- +-- MONITOR : Show the "Execs", "A-Rows", "CellO%", "PGA", "TEMP", "ReadB", "WriteB" (the latter four in bytes) columns. These are taken from Real-Time SQL Monitoring info if available +-- +-- NONE : Do nothing of above (for example if you only want the Rowsource Statistics information) +-- +-- Note that Parameter 10 allows finer control over which columns should be shown on execution plan line level +-- +-- Parameter 9: +-- +-- The default formatting option for the call to DBMS_XPLAN.DISPLAY_CURSOR / AWR is TYPICAL +OUTLINE +ALIAS +PEEKED_BINDS +-- +-- For the special Rowsource Statistics mode 3 ("_rowsource_statistics_sampfreq" = 3) where only actual cardinalities are measured, XPLAN_ASH from version 3.0 on supports a special FORMAT option: +-- +-- AROWS +-- +-- This adds a column "A-Rows" (similar to what DISPLAY_CURSOR does when using the *STATS formatting option) since DISPLAY_CURSOR doesn't support this mode properly +-- - it doesn't show the A-Rows in that case although the columns are populated in GV$SQL_PLAN_STATISTICS_ALL +-- +-- Note that you usually want to use "AROWS LAST" similar to "ALLSTATS LAST" if you want to see the actual cardinalities of the last execution. +-- +-- Parameter 10: +-- +-- Defines the column list to show on execution plan line level. Use a comma-separated list of columns with no whitespace inbetween. +-- The available list of columns can be found below in the configuration section. +-- +-- Alternatively you can also specify which columns *not* to show by using a minus sign in front of the column names +-- +-- Since version 4.0 there is a new option to the column list parameter: Column names can be preceded with a + sign, which means that these columns will be shown +-- in addition to the default column list, for example "+MAS_GRF" would show the median active sessions column in addition to the default columns on execution plan line level +-- +-- The default is to show all columns that are configured in the configuration sections of the script (by default all columns except "average active sessions (active)" and "median active sessions") +-- +-- Note: You need a veeery wide terminal setting for this if you want to make use of all available columns on execution plan line level (e.g. format option ALLSTATS ALL), something like linesize 800 should suffice +-- +-- Some ideas how you can handle these long lines: +-- +-- - If you're on Windows the CMD.EXE does a good job - just set the "Width" in "Screen Buffer Size" under "Properties" to 800 and you should be fine. The columnar selection of CMD.EXE is also helpful for tracking +-- the long lines, for example if you are on the right hand side of the execution plan output and want to see which operations belong to that, just highlight the line and while highlighting move to the left +-- +-- So the easiest way to handle the long lines is to use SQLPLUS.EXE from a Windows client under CMD.EXE to connect to the target database and run XPLAN_ASH +-- +-- - PuTTy and most other terminal emulators don't offer horizontal scrolling, so under Unix/Linux things are bit more complicated +-- +-- - Again under Windows you could use Cygwin (32bit) and run the "Bash shell" under the CMD.EXE interface, so you can follow above "Properties" settings and you should be fine. +-- You could use then command line SSH instead of PuTTy to benefit from that interface on remote SSH sessions +-- +-- - "Terminator" (https://code.google.com/p/jessies/wiki/Terminator) is one of the few terminal emulators that offers horizontal scrolling. Since it offers some other cool features and is free, why not give it a try? +-- +-- - If you need to handle long lines when using a terminal emulator/interface not capable of horizontal scrolling, you can make use of the following tips: +-- +-- - Since version 4 of XPLAN_ASH you can spool the output to a file using the SQLPLUS SPOOL command. Starting with version 4.1 XPLAN_ASH itself does a SET TRIMSPOOL ON, in version 4.0(1) you should do that yourself, although not required +-- The spooled file can the be transferred to a machine where you can handle long lines, or be opened with some text editor capable of handling long lines on the target machine +-- +-- - If the Unix LESS command is available - use LESS -S to handle long lines. You can use the cursor keys to scroll to left / right in that mode +-- +-- - You could also do some fancy Unix stuff, for example copy the SQLPLUS terminal output via TEE to a file, and open the file using LESS -S +F in another session. +-- Running LESS in that mode allows switching between scroll right/left mode using cursor keys and tailing the file via Control+C / Shift+F +-- +-- This tool is free but comes with no warranty at all - use at your own risk +-- +-- The official blog post for version 1.0 of the tool can be found here: +-- +-- http://oracle-randolf.blogspot.com/2012/08/parallel-execution-analysis-using-ash.html +-- +-- It contains a complete description along with the command line reference, notes and examples +-- +-- The official blog post for version 2.0 of the tool can be found here: +-- +-- http://oracle-randolf.blogspot.com/2012/10/new-version-of-xplanash-utility.html +-- +-- It explains all the new sections and features of 2.0 +-- +-- The official blog post for version 3.0 of the tool can be found here: +-- +-- http://oracle-randolf.blogspot.com/2013/05/new-version-of-xplanash-tool-video.html +-- +-- It includes links to a multi-part video tutorial explaining version 3.0 +-- +-- The official blog post for version 4.0 of the tool can be found here: +-- +-- http://oracle-randolf.blogspot.com/2013/12/new-version-of-xplanash-utility.html +-- +-- It includes a link to a video tutorial explaining the new features of version 4.0 +-- +-- You can find all related posts following this link: +-- http://oracle-randolf.blogspot.com/search/label/XPLAN_ASH +-- +-- The latest version can be downloaded here: +-- https://github.com/randolfgeist/oracle_scripts/raw/master/xplan_ash.sql +-- +-- Experimental: There is a global switch _EXPERIMENTAL at the beginning of the configuration section below. +-- By default this is disabled because the stuff shown could be called "unreliable" and potentially "misleading" information. +-- +-- From version 3.0 on this can be now controlled via an additional command line parameter specifying one of (ON, TRUE, YES) should do the job of enabling it +-- +-- If you enable it (either by setting the configuration switch to an empty string or via command line), the I/O figures from the ASH data (only from 11.2+ on) +-- will be shown at various places of the report. Note that this data is unreliable and usually falls short of +-- the actual activity (I've never seen it reporting more than the actual activities). Since sometimes unreliable +-- figures can be much better than nothing at all you can enable it that in cases where you want for example get an +-- idea if the I/O was in the range of MBs or GBs - this is something you should be able to tell from the ASH data. +-- +-- Note that from version 11.2.0.3 on the I/O figures are shown by default since it looks like the data got more reliable with that release +-- You'll still see missing data for short running queries but for longer running queries the data seems to be pretty accurate +-- +-- Likewise the average and median wait times from ASH will be shown at different places of the report if experimental is turned on. +-- Note that these sampled wait times tend to emphasize longer lasting wait events, so you need to be aware of that this never corresponds to +-- to the true aggregated values you would see from tracing - the aggregated sampled wait times always will show (much) higher averages etc. +-- Doing statistical analysis based on such sampled wait times is sometimes called "Bad ASH math", but again, if you know what you are doing +-- and keep telling yourself what you're looking at, there might be cases where this information could be useful, for example, if you see that +-- hundreds or thousands of those waits were sampled with a typical wait time of 0.5 secs where you expect a typical wait time of 0.005 secs. +-- This might be a good indication that something was broken or went wrong and could be worth further investigation. +-- +-- Change Log: +-- +-- 4.23: June 2016 +-- - Finally corrected the very old and wrong description of "wait times" in the script comments, where it was talking about "in-flight" wait events but that is not correct +-- ASH performs a "fix-up" of the last 255 samples or so and updates them with the time waited, so these wait events are not "in-flight" +-- +-- - Removed some of the clean up code added in 4.22 to the beginning of the script, because it doesn't really help much but spooled script output always contained these error messages about non-existent column definitions being cleared +-- +-- - The "Concurrent I/O" sections will now also be skipped in LIMITED_ASH mode +-- +-- - Some more fixes to the I/O figures in the "Activity Timeline based on ASH" - the spreading introduced in 4.22 needed some further refinement (see 4.22 change log for more details) +-- +-- +-- 4.22: November 2015 +-- - Fixed a funny bug that in 12c they have forgotton to add the DELTA_READ_MEM_BYTES to DBA_HIST_ACTIVE_SESS_HISTORY, so in HIST mode with 12c prior XPLAN_ASH versions could error out with invalid column name +-- +-- - Change the way the I/O figures are treated in the "Activity Timeline based on ASH". Now the I/O per second is spread over the (previous) samples covered by DELTA_TIME +-- This should give a smoother representation of the I/O performed and much closer to what you see in Real-Time SQL Monitoring reports +-- The difference to prior versions is only visible in cases where a session wasn't sampled for quite a while and hence has a DELTA_TIME spanning multiple previous sample points +-- This also means that the I/O related columns in the "Activity Timeline based on ASH" now show only the PER SECOND values, no longer to the totals like prior versions +-- +-- - Added a SET NULL "" in the configuration and initialization section for SQL*Plus environments that use a non-default SET NULL setting +-- This screwed up some internal switches so that XPLAN_ASH for example thought it's running in a S-ASH repository +-- +-- - Added a note to the end of the output if no execution plan could be found and falling back to retrieving plan operation details from ASH. Also added the note to use MIXED or HIST ASH source option +-- if no execution plan could be found in CURR mode, so execution plan has been purged from Shared Pool in the meanwhile +-- +-- - Cloned the "cleanup" section from the end to the beginning of the script to ensure no current SQL*Plus environment settings influence the script execution +-- This is particularly relevant if the script execution gets cancelled before the final cleanup section is reached or some other, previous scripts left a mess behind +-- +-- 4.21: January 2015 +-- - Forgot to address a minor issue where the SET_COUNT determined per DFO_TREE (either one or two slave sets) is incorrect in the special case of DFO trees having only S->P distributions (pre-12c style) +-- Previous versions used a SET_COUNT of 2 in such a case which is incorrect, since there is only one slave set. 12c changes this behaviour with the new PX SELECTOR operator and requires again two sets. +-- +-- - For RAC Cross Instance Parallel Execution specific output some formatting and readability was improved (more linebreaks etc.) +-- +-- - Minor SQL issue fixed in "SQL statement execution ASH Summary" that prevented execution in 10.2 (ORA-32035) +-- +-- - The NO_STATEMENT_QUEUING hint prevented the "OPTIMIZER_FEATURES_ENABLE" hint from being recognized, therefore some queries failed in 11.2.0.1 again with ORA-03113. Fixed +-- +-- - "ON CPU" now distinguishes between "ON CPU INMEMORY" and "ON CPU" for inmemory scans +-- +-- 4.2: December 2014 +-- - New sections "Concurrent activity I/O Summary based on ASH" and "Concurrent activity I/O Summary per Instance based on ASH" to see the I/O activity summary for concurrent activity +-- +-- - Bug fixed: When using MONITOR as source for searching for the most recent SQL_ID executed by a given SID due to some filtering on date no SQL_ID was found. This is now fixed +-- +-- - Bug fixed: In RAC GV$ASH_INFO should be used to determine available samples +-- +-- - The "Parallel Execution Skew ASH" indicator is now weighted - so far any activity level per plan line and sample below the actual DOP counted as one, and the same if the activity level was above +-- The sum of the "ones" was then set relative to the total number of samples the plan line was active to determine the "skewness" indicator +-- +-- Now the actual difference between the activity level and the actual DOP is calculated and compared to the number of total samples active times the actual DOP +-- This should give a better picture of the actual impact the skew has on the overall execution +-- +-- - Most queries now use a NO_STATEMENT_QUEUING hint for environments where AUTO DOP is enabled and the XPLAN_ASH queries could get queued otherwise +-- +-- - The physical I/O bytes on execution plan line level taken from "Real-Time SQL Monitoring" has now the more appropriate heading "ReadB" and "WriteB", I never liked the former misleading "Reads"/"Writes" heading +-- +-- - Many averages and medians now also have accompanying minimum and maximum values shown. This isn't as good as having histograms but gives a better idea of the range of values, +-- and how outliers might influence the averages and deserve further investigations +-- +-- 4.1: June 2014 +-- - GV$SQL_MONITOR and GV$SQL_PLAN_MONITOR can now be customized in the settings as table names in case you want to use your own custom monitoring repository that copies data +-- from GV$SQL_MONITOR and GV$SQL_PLAN_MONITOR in order to keep/persist monitoring data. The tables need to have at least those columns that are used by XPLAN_ASH from the original views +-- +-- - The "Activity Timeline based on ASH" for RAC Cross Instance Parallel Execution shows an additional line break for the GLOBAL summary +-- +-- - Fixed various bugs related to some figures when analyzing Cross Instance RAC Parallel Execution +-- +-- - The new "GLOBAL" aggregation level for Cross Instance RAC Parallel Execution (see version 4.0 change log below) is now also shown in the "Information on Parallel Degree based on ASH" section +-- +-- - The "Parallel Distribution ASH" column on execution plan line level now can show process information taken from Real-Time SQL Monitoring for those processes that are not found in ASH samples +-- This effectively means that with monitoring information available for every plan line every involved process will now be shown along with its ASH sample count and rows produced +-- So some processes will show up now with a sample count of 0. +-- The idea behind this is to provide more information about row distribution even for those lines/processes that are not covered in the ASH samples +-- Previously the rowcount produced was only shown for those processes covered in ASH samples +-- See above section "Row distribution for Parallel Execution" for more details +-- +-- The new behaviour is default - if you find the output messy you can return to previous behaviour (show only rowcounts for processes found in ASH samples) by setting the new configuration switch +-- "show_monitor_rowcount" to any other value than the default of "YES" +-- +-- - The "Real-Time SQL Monitoring" information on execution plan line level now includes the read and write request information ("ReadReq", "WriteReq") +-- +-- - The I/O figures based on ASH now include the new "DELTA_READ_MEM_BYTES" information that was added in 12c. This applies to the following sections: +-- - SQL Statement I/O Summary based on ASH +-- - Parallel Worker activity overview based on ASH +-- - Activity Timeline based on ASH +-- +-- The "Read Mem Bytes" seems to correspond to the "logical read bytes from cache" statistics, so any direct path reads are not covered by this value +-- +-- - Added some more verbose description above in the "Note" sections how to handle long lines. XPLAN_ASH now does a SET TRIMSPOOL ON if you want to spool the output to a file +-- +-- - Whenever the output referred to DFOs this was changed to "DFO TREE", which is the correct term +-- +-- - The "Parallel Worker activity overview based on ASH" section now shows a blank line between the sections which should make this section more readable +-- +-- - Adaptive plans are now supported by XPLAN_ASH +-- +-- Note they don't work well with previous versions, the formatting of the inactive lines breaks and the overall information can +-- be misleading if you don't add manually the "ADAPTIVE" formatting option +-- +-- If XPLAN_ASH detects an adaptive plan, it will always force the ADAPTIVE formatting option +-- This also means that Adaptive plans for the time being won't work with SASH as SASH doesn't collect the OTHER_XML column from GV$SQL_PLAN +-- You could manually add that column to SASH_SQLPLANS and add the column to the "sash_pkg.get_sqlplans" procedure - this is a CLOB column, but INSERT / SELECT should work I think +-- The view SASH_PLAN_TABLE needs also to be modified to select the OTHER_XML column instead of a dummy NULL +-- +-- Although this output is less readable than the "faked" output that shows only the plan operations that are actually in use, +-- it is the only simple way how ASH/MONITOR data can be related to execution plan lines, as these hold the information with the actual plan line +-- not the one that is made up by DBMS_XPLAN.DISPLAY* based on the DISPLAY_MAP information in the OTHER_XML column +-- +-- Hence I decided for the time being to use the same approach as 12c Real-Time SQL Monitoring and always show the full/adaptive shape of the plan +-- +-- Another challenge for XPLAN_ASH with adaptive plans is the possibly changing PLAN_HASH_VALUE during execution +-- +-- XPLAN_ASH extracts the PLAN_HASH_VALUE from ASH/MONITOR when trying to get the plan from DBA_HIST_SQL_PLAN +-- +-- Hence XPLAN_ASH now needs to take care to extract the most recent PLAN_HASH_VALUE, previously it didn't matter as it wasn't supposed to change during execution +-- This seems to work based on my tests, but it's something to keep in mind +-- +-- - The new "gather stats on load" 12c feature implies for INSERT...SELECT statements that the cursor will immediately be invalidated/removed from the Library Cache +-- after (successful) execution. So now such INSERT...SELECT behave like CTAS which also gets removed immediately. This is a pity as you won't be able to pick up +-- the plan from the Library Cache after the execution completes using XPLAN_ASH (or any other tool using DBMS_XPLAN.DISPLAY*). +-- +-- Although V$SQL_PLAN_MONITOR might keep plan for some time after the execution, it can't be used as input to DBMS_XPLAN.DISPLAY*, hence this isn't a viable workaround +-- In principle however this isn't a good thing as the SQL and plan information might be missing from AWR / STATSPACK reports due to the immediate invalidation/removal +-- +-- At the time being the only viable workaround known to me for this is to prevent the "gather stats on load" feature either via parameter "_optimizer_gather_stats_on_load" +-- or hint "no_gather_optimizer_statistics", or via using pre-12c optimizer feature settings which implicitly disables the feature +-- which is of course not really a good workaround as the feature itself might be rather desirable +-- +-- +-- 4.01: March 2014 +-- - More info for RAC Cross Instance Parallel Execution: Many sections now show a GLOBAL aggregate info in addition to instance-specific data +-- +-- - The Parallel Execution Server Set detection and ASSUMED_DEGREE info now makes use of the undocumented PX_STEP_ID and PX_STEPS_ARG info (bit mask part of the PX_FLAGS column) +-- on 11.2.0.2+ +-- +-- - Since version 4.0 added from 11.2.0.2 on the PX *MAX* DOP in the "SQL statement execution ASH Summary" based on new PX_FLAGS column of ASH +-- it makes sense to add a PX *MIN* DOP in the summary to see at one glance if different DOPs were used or not +-- +-- - The "Active DOPs" column in the "Activity Timeline based on ASH" was extended/modified: The number in parantheses is no longer the simple count of samples +-- but the Average Active Sessions (AAS) per DFO / bucket. From 11.2.0.2 it now shows also the DOP of the DFO in brackets, so the output could look now like this: +-- +-- 1[16] (14.5) +-- +-- which means DFO 1 at a DOP of 16 had an AAS value of 14.5 for this time bucket. If there are multiple DFOs active in the time bucket, they are separated by commas: +-- +-- +-- 1[16] (3.5),2[4] (1.5) +-- +-- which means DFO 1 at a DOP of 16 had an AAS value of 3.5 and DFO 2 at a DOP of 4 had an AAS value of 1.5 for this time bucket +-- +-- - The "Real-Time SQL Monitoring Execution Summary" section now shows a PX *MIN* DOP information, too, based on the monitoring information. +-- Note that from version 11.2 on there is a column PX_MAXDOP, but no PX_MINDOP column. So from version 11.2 on for PX_MAXDOP the column value will be used. +-- For pre-11.2 versions the PX_MAXDOP is calculated using an analytic function on the monitoring data +-- In the same way the PX_MINDOP information is now calculated in all versions that support monitoring +-- +-- Please note that both PX_MAXDOP and PX_MINDOP can be unreliable in 11.1 when the execution plan consists of multiple DFOs +-- I just realized that my wording might be misleading - "DFOs" are probably better called "DFO trees" - so please consider "DFO trees" whenever reading "DFOs" here +-- +-- 4.0: December 2013 +-- - New MIN/MAX figures when showing I/O related analysis. Useful if you want to see peak throughput information (e.g. Exadata) +-- +-- - Determining the start time of the script execution was changed. The previous implementation lead to misleading results when the execution of the initialization steps +-- took extraordinarily long +-- +-- - The version specific code switches were actually not working correctly with version 12. This is fixed now +-- +-- - The different DISTRIB* parameters are all now deprecated. There is a common handling of the Parallel Distribution Graph based on the former DISTRIB_TIM option +-- The Graph now is turned into a simple "indicator" that hopefully gives a reasonable indication how much that execution plan line is affected by skew of any kind +-- Note that this now includes temporal skew - you no longer need to check the Average/Median Active Sessions on execution plan line level for that +-- +-- For the same reason the column on execution plan line level is now called "Parallel Execution Skew ASH" instead of "Parallel Distribution Graph ASH" +-- +-- - The command line parameters were reordered: All ASH related parameters come now first, all Rowsource Statistics related come last +-- +-- - The default formatting for DBMS_XPLAN was changed to "TYPICAL +OUTLINE +ALIAS +PEEKED_BINDS" +-- +-- - The default date formatting mask was changed to have no spaces so that the date literals can be typed at the command line without the need to add double quotes around +-- +-- - New ASH sections for activities of the current session that are not related to the SQL_ID analyzed but happen during first sample to last sample of the given SQL_ID +-- - Summary of this session's other activity +-- - Other activity details +-- This should cover recursive SQL activity (typically issued by user-defined PL/SQL functions called as part of SQL execution, but could also be SYS recursive stuff) +-- But could also be caused by multiple open cursors of the session, executing/fetching from one or the other +-- +-- - New "Top N SQL_IDs" ASH section for concurrent activity +-- +-- This section shows the SQL text (if available) along with some more details about the top N SQL_IDs found (according to sample count) +-- +-- The N can be configured in the configuration section: "topn_sqlid" +-- +-- This section requires to query either GV$SQLSTATS resp. DBA_HIST_SQLTEXT to obtain the SQL text +-- +-- - The Median Active Sessions is now available in addition to the Average (Mean) Active Sessions indicator +-- If these two differ significantly then you should carefully check the analysis as it might indicate that the Mean is misleading +-- Note that there are still cases where both don't clearly indicate a problem with Parallel Execution Skew +-- +-- Median usually shows the "typical" active sessions and therefore is often more useful than the arithmetic Mean +-- +-- - There are new columns available in the ASH sections that report the percentage of Ys in the following columns of ASH data (only available from 11g on): +-- IS_SQLID_CURRENT Only available from 11.2 on. Can be used as an additional indicator how much activity was caused by some action not related to the current SQL_ID. See also new "other activity" sections +-- +-- IN_CONNECTION_MGMT These columns can be used as some kind of TIME_MODEL information, however they don't need to add up to 100% +-- IN_PARSE Each of them could theoretically reach 100% +-- IN_HARD_PARSE +-- IN_SQL_EXECUTION +-- IN_PLSQL_EXECUTION +-- IN_PLSQL_RPC +-- IN_PLSQL_COMPILATION +-- IN_JAVA_EXECUTION +-- IN_BIND +-- IN_CURSOR_CLOSE +-- IN_SEQUENCE_LOAD This column is only available from 11.2 on +-- +-- - The "Information on Parallel Degree based on ASH" section now tries to group the processes by DFO and SET_ID (from 11g on if execution plan is available) +-- Since the SET_ID information is not directly available from ASH data it is a rather obscure way of determining the sets and therefore can be wrong. +-- If XPLAN_ASH identifies more than two sets in the ASH data (which isn't possible) those samples will show up in the *NULL* SET_ID section. +-- +-- Furthermore if ASH samples do not contain a relation an execution plan line ID, they will be shown as separate group with NULL DFO / SET_ID +-- +-- This feature can be disabled via the switch "show_px_sets" in the configuration section +-- +-- - Some columns that have been added, particularly the MEDIAN Active Sessions related info, is hidden since it only adds value at some places +-- +-- If you want to have them shown, you can change the configuration switch "show_median" to blank "", the default is "NO" and is used as a NOPRINT column formatting +-- +-- - The default column shown on execution plan line level are no longer "all columns" for the same reason - +-- the average active sessions (active), average active sessions (total) and median active sessions columns are not shown by default +-- +-- The reason for that is that the new logic to calculate the "Parallel Distribution Graph ASH" should now cover all "skew" cases, data distribution and temporal skew +-- Hence these columns should no longer be required to troubleshoot temporal skew (which was their main purpose in the past) +-- +-- There is therefore a new option to the column list parameter: column names can be preceded with a + sign, which means that these columns will be shown +-- in addition to the default column list, for example "+MAS_GRF" would show the median active sessions column in addition to the default columns on execution plan line level +-- +-- - For some parameters abbreviations are now supported, for example instead of typing HIST at the ASH SOURCE parameter, just "h" is sufficient +-- +-- This appplies to Parameters 4 (ASH SOURCE), 5 (Experimental), 6 (Search last exec) and 7 (ASH Options) +-- +-- - The ASH Source parameter now supports an AUTO option. This automatically deteremines whether to use the current ASH or historic ASH configuration +-- Note that this only works when Parameter 2 (SQL_EXEC_START) is explicitly specified, otherwise AUTO is the same as CURR, so the last execution +-- will be searched by default using the CURRent ASH configuration set. The default can be changed in the script configuration using the "default_ash" parameter +-- (if you for example have added another configuration set that should be used by default), and when explicitly specifying a configuration set +-- then the AUTO selection doesn't apply. +-- +-- AUTO queries GV$ASH_INFO (available from 11.2 on) or the local V$ACTIVE_SESSION_HISTORY (more costly) for the oldest sample available and compares that to the SQL_EXEC_START specified +-- +-- - Finally Real-Time SQL Monitoring info on execution plan line level is now supported. There are seven new columns that are taken from the monitoring info: +-- +-- Execs (number of executions of that plan line), A-Rows (Actual output rows, cardinality), CellO% (Cell Offload Percentage if applicable) PGA, TEMP, Reads and Writes. The latter four are in bytes +-- +-- The column "Parallel Distribution ASH" will have also the Rowcount per Parallel Execution Server added if monitoring info gets used and is available. +-- The Rowcount is added in square brackets to the process, after the number of samples in paranthesis, something like this: +-- +-- P012(44)[183K] +-- +-- This means process P012 was sampled 44 times for this execution plan line and produced 183K rows according to Real-Time SQL Monitoring +-- +-- Note that this information is crucial in understanding Data Distribution Skew and not available from the official Real-Time SQL Monitoring report up to 11.2 +-- 12c SQL Monitoring allows to extract this information via the report +-- +-- Whether monitoring info will be shown depends obviously on the version (from 11g on) and availability of such information. +-- Furthermore this can be controlled via the ASH options - the MONITOR keyword enables this features +-- Finally as usual the columns shown on execution plan line level can be configured via the columns configuration +-- +-- - XPLAN_ASH now tries different optional date masks for SQL_EXEC_START / END if the default mask doesn't work, this is just to simplify copy&pasting of dates +-- The list of optional date masks can be found in the configuration parameters "dm_opt1" and "dm_opt2". Feel free to add your favorite date masks there +-- +-- - If SQL_EXEC_START was specified but SQL_EXEC_ID is left blank and version is 11g+, then a default SQL_EXEC_ID of 16777216 will be used +-- This default SQL_EXEC_ID can be changed - if you have a RAC environment with multiple instances this might make sense to change (configuration parameter "default_sql_exec_id") +-- +-- - The queries now make use of the (up to 11.2 undocumented, from 12c on documented) LATERAL views - this is to get rid of the inefficient range joins that could cause some of the +-- queries to run for minutes if larger time frames are observed +-- The downside of this is that it now makes use of (yet another) undocumented feature +-- +-- The script automatically detects if the session lacks the ALTER SESSION privilege and falls back to a different code path. +-- This is because LATERAL views require to enable an undocumented event. +-- This code path is now optimized, too, and no longer uses the inefficient joins used in version 3. +-- It uses now a MERGE JOIN that performs an efficient index-like lookup into the second row source. +-- It performs probably worse than the LATERAL view variant but should still be much more efficient than before +-- +-- - There is a new option LIMITED_ASH that skips the two ASH related sections that can take very long when analyzing long running queries +-- When the LATERAL query variant can be used (ALTER SESSION privilege) this is usually not required +-- +-- - A "Real-Time SQL Monitoring Execution Summary" section was added that shows a summary similar to the header of the official reports +-- +-- This shows only up if that information is requested, available and version 11g+ +-- +-- - Another new section has been added: "Actual bind values from Real-Time SQL Monitoring" +-- This only available if: +-- +-- * Real-Time SQL Monitoring info is available +-- * Real-Time SQL Monitoring info requested (ASH options includes MONITOR) +-- * 11.2+ +-- +-- These are the bind variable values used for this particular execution - not to confuse with the "Peeked Binds" that are shown by DBMS_XPLAN and are those bind variables values +-- the optimizer peeked at / saw when generating the execution plan +-- +-- - In 11g the wait event "PX Deq Credit: send blkd" was turned into an "idle" wait event, which isn't entirely true. But for consistency purposes from version 4.0 +-- in 10g this wait event is handled as "idle" event, too. This can be configured using the "ignore_PX_credit_blkd_10g" configuration switch +-- +-- - In the special case of executing the same SQL_ID multiple times and having multiple of these executions active in turns (e.g. fetching from multiple open cursors by the same session) +-- the implementation now correctly distinguishes between these different executions - these other executions should now show up in the "Other" activity sections +-- This is only possible from 11g on with the help of SQL_EXEC_START / SQL_EXEC_ID +-- +-- - The calculation of the so called "virtual timeline" is now simplified and gives more consistent results for sample frequencies > 1s (e.g. DBA_HIST_ACTIVE_SESS_HISTORY) +-- With the prior implementation it could happen that for example a spurious "last bucket" with no related activity showed up in the "Activity Timeline" +-- +-- - There was an inconsistency with how the different sample times in RAC environments were handled which could lead to incorrect results for some of the measures. +-- This was only relevant with sample frequencies > 1s (e.g. DBA_HIST_ACTIVE_SESS_HISTORY). This is now fixed and handled consistently. +-- +-- - In the SQL Execution Summary there are four new columns related to PX SEND / RECEIVE activity - only available from 11g on with Diagnostics Pack license. +-- The idea of these columns is to give an idea how much database time and CPU time went into the overhead of re-distributing the data with Parallel Execution +-- When having many joins and re-distributions the overhead can become significant. Note that in the special case of applying CPU intensive expressions / functions +-- to the columns/expressions used for re-distributing the evaluation of those expressions/functions will take place at the corresponding PX SEND operation (except for BROADCAST distributions). +-- This means that you'll very likely end up with a lot of CPU activity shown with these PX SEND operations, but this isn't really overhead, as serial execution +-- would have to evaluate the same CPU intensive expressions as part of serial operation +-- +-- These columns are called +-- "PX SEND/RECEIVE COUNT" The number of samples related to PX SEND/RECEIVE operations +-- "PX SEND/RECEIVE PERCENT" The same as percentage of the total number of samples +-- "PX SEND/RECEIVE CPU COUNT" The number of samples related to PX SEND/RECEIVE operations that were on CPU +-- "PX SEND/RECEIVE CPU PERCENT" The same as percentage of the total number of *CPU* samples +-- +-- - There are now two columns "PX WORKER COUNT" and "PX WORKER UNIQUE COUNT": The first (PX WORKER COUNT) is the number of different Parallel Execution Server (Pxxx) processes found in the ASH samples +-- The second one (PX WORKER UNIQUE COUNT) combines the process identifier (Pxxx) with the SESSION_ID and SESSION_SERIAL# - if DFOs are started multiple times, the PX Servers are re-acquired / re-initialized each time +-- This can be seen from getting different SESSION identifiers for the same Pxxx processes, and allows getting an idea about the frequency of those re-acquisitions +-- For DFOs started only once, PX WORKER UNIQUE COUNT should be equal to the PX WORKER COUNT +-- +-- The columns PROCESS COUNT and PROCESS UNIQUE COUNT are pretty much the same, but may include the Query Coordinator process, hence they are not called PX WORKER only +-- +-- - The columns DURATION_SECS_T / DURATION_T / DURATION_SECS / DURATION / AVERAGE_AS_T / AVERAGE_AS now have more meaningful headings +-- "DURATION SECS TOTAL" +-- "DURATION TOTAL" +-- "DURATION SECS ACTIVE" +-- "DURATION ACTIVE" +-- "AVERAGE AS TOTAL" +-- "AVERAGE AS ACTIVE" +-- +-- - From 11g on the TOP_LEVEL_SQL_ID will be shown at different places: In the "SQL Execution Summary", the "Other activities details" and the "Concurrent activity top SQL_IDs" +-- +-- - For those interested the Standard Deviation for the Average Active Sessions calculation is also shown as STDDEV_AS at various places +-- +-- - From 11.2.0.2 on the PX *MAX* DOP will be shown in the "SQL statement execution ASH Summary" as found in the new PX_FLAGS column of ASH +-- +-- - If Parallel Execution is detected and an execution plan can be found the "Activity Timeline based on ASH" shows an additional "Active DFO(s)" column +-- so that you can follow the activity of DFOs - in particular helpful for parallel execution plans with multiple DFOs +-- +-- - The internal queries are now by default all set to "quiet" mode so that the output of XPLAN_ASH can be spooled to a file +-- You will still see some spurious blank lines but the output is much more useful than in previous releases +-- Use the settings "debug_internalp" and "debug_internalf" to control the output of the internal queries for debugging +-- +-- +-- 3.01: May 2013 +-- - Some column widths increased and cosmetics changed for some recently renamed headers +-- +-- 3.0: March 2013 +-- - The "Active" plan lines indicator sometimes was missing for still running statements (same problem as for the "ACTIVE"/"INACTIVE" indicator fixed in 2.02) +-- - The PGA/TEMP figures (available from 11.2 on) in the "Activity Timeline" are now "smoothened" for Parallel Execution using some artificially generated rows +-- (based on the new DELTA_TIME column) for missing samples of PX Workers +-- - All byte related numbers are now formatted using KiB/MiB etc. (base of 2) rather than to the base of 10, so 1M bytes correspond now to 1048576 bytes etc. +-- - Average Active Sessions calculations are now based on MIN(SAMPLE_TIME) instead of SQL_EXEC_START for those cases where execution start is prior to first ASH sample +-- - The "Activity Timeline" query now uses a common approach for historic and current ASH data, also an inconsistency how data was grouped by buckets was addressed +-- These changes were required due to the introduction of the artificial PGA/TEMP rows as mentioned above +-- - The "SQL statement execution ASH Summary" now includes the MACHINE (from 11.2 on) and (Coordinator) session / instance identified +-- - The Graphs used for Extended Rowsource Statistics (A-Time Self Graph, LIO Self Graph, Reads Self Graph and Writes Self Graph) also scale now relative to the MAXimum +-- rather than the total which makes the graph hopefully a bit more useful (can be configured via "ext_rowsource_graphs_maxrel" in configuration section) +-- - Initial support for S-ASH (tested with version 2.3, but this requires some minor modifications to the current S-ASH 2.3 version, modifications can be provided on request) +-- The script automatically detects if it is executed in the S-ASH repository owner by checking for a configured target in the SASH_TARGET table +-- - The Extended Rowsource Statistics now get also pulled from the correct (remote) node in case of RAC and 11.2.0.2+ +-- - Improved "Average Active Sessions" calculation - the graph is now scaled if AAS is larger than the defined size +-- - Improved "Parallel Distribution Graph" calculation, new option DISTRIB_TIM hopefully now reflects properly the relevance of skewed work distribution per execution plan line +-- - From 11.2 on MAX PGA/TEMP usage on different summary levels (Global/Instance/Concurrent activity) +-- - Improved "Time Active Graph" calculation on DFO and execution plan line level +-- - New "Average Active Sessions Graph" on execution plan line level that should make it more obvious which execution plan lines are affected by Parallel Execution distribution skew +-- This should now also allow to identify temporal skew where only a few Parallel Workers are active at the same time but at the end do a similar amount of work +-- - Experimental stuff can be controlled via the command line +-- - The graphs now consistently indicate CPU, non-CPU and general activity, and a corresponding legend was added to the header output +-- - The good, old Rowsource statistics have been polished to have now percentages shown, too +-- - The "Ord" column on execution plan line level (Order of execution) by default will not be shown when Parallel Execution gets detected. +-- This is because it will be wrong in many cases except for the most trivial Parallel Execution execution plans. +-- I haven't found the time yet to come up with a more sensible implementation that: +-- - Covers the special cases (the "Ord" column can also be wrong for serial execution if these special cases apply) +-- - Covers the case of Parallel Execution where the order of execution usually doesn't correspond to the serial execution order +-- Hint: Follow the TQ entries in increasing order +-- +-- I've decided to keep it for serial execution as it is correct there for the majority of cases (but watch out for those special cases) +-- Hiding it when Parallel Execution is detected can be controlled via the configuration switch "no_ord_on_px" +-- +-- - The logic how the script gathers information if no SQL_ID is specified as first argument is now more consistent when using the ASH based options. Instead of getting the SQL_ID information from GV$SESSION +-- for the current or explicitly given SID, it queries now either Active Session History (ASH option) or Real-Time SQL Monitoring (MONITOR option) for the last SQL_ID mentioned there +-- for that session. +-- This probably makes more sense as it automatically selects those queries that are available from ASH/MONITORing and hence worth to analyze rather than taking strictly the most recent execution +-- from GV$SESSION. +-- It also means that the ASH/MONITOR parameter acts now consistently for all possible inputs for the first parameter (SQL_ID, SID, nothing at all). +-- Prior to this change that ASH/MONITOR option was only relevant when specifying a SQL_ID without SQL_EXEC_START / SQL_EXEC_ID +-- +-- Note that if no ASH options are selected (specifying NONE at the ASH,DISTRIB,TIMELINE default parameter) then the SQL_ID related information is still taken from GV$SESSION +-- +-- - There are now two Average Active Sessions figures, AVERAGE_AS and AVERAGE_AS_T. +-- AVERAGE_AS is the Average Active Sessions across all ASH samples where there was at least one sample +-- AVERAGE_AS_T is the Average Active Sessions across the time the corresponding part was active (from first sample to last sample on statement level, instance level, DFO level, execution plan line level) +-- If AVERAGE_AS_T is significantly lower than AVERAGE_AS this means that the affected part was idle for a significant amount of time during execution +-- AVERAGE_AS_T should never be higher than AVERAGE_AS +-- +-- - Likewise there is now also a DURATION_SECS and DURATION_SECS_T +-- DURATION_SECS is the number of seconds actually active +-- DURATION_SECS_T is the number of seconds from first sample (SQL_EXEC_START) to last sample +-- If there is a significant difference then there was some idle time in between +-- +-- - The DURATION_SECS and DURATION_SECS_T are now also displayed as INTERVAL for better human readability in case of long running queries +-- +-- - For the special Rowsource Statistics mode 3 ("_rowsource_statistics_sampfreq" = 3) where only actual cardinalities are measured, XPLAN_ASH from version 3.0 on supports a special FORMAT option "AROWS". +-- This adds a column "A-Rows" (similar to what DISPLAY_CURSOR does when using the *STATS formatting option) since DISPLAY_CURSOR doesn't support this mode properly +-- - it doesn't show the A-Rows in that case although the columns are populated in GV$SQL_PLAN_STATISTICS_ALL +-- Note that you usually want to use "AROWS LAST" similar to "ALLSTATS LAST" if you want to see the actual cardinalities of the last execution +-- +-- 2.03: January 2013 +-- - The Activity Graph in "Parallel Worker Activity" now differentiates between "CPU" and "Other" activity +-- Furthermore it is scaled now relative to the MAXimum count rather than relative to total activity so that differences in sample count show up more clearly +-- - The "Top N Activity ASH" Activity Graph on execution plan line level is now also relative to the MAX activity, no longer relative to the total activity, for the same reason +-- - Some inconsistencies in ASHs SQL_EXEC_START column addressed - It no longer uses simply the MIN SQL_EXEC_START found but the most occurring one among the set identified +-- There were some inconsistent entries encountered in 11.2.0.x ASH data +-- +-- 2.02: October 2012 +-- - Running the script on 10g is more sensitive how the session information is populated in the ASH data +-- Therefore the query to define the session predicates was modified +-- - The INACTIVE / ACTIVE indicator in the "Global ASH summary" was sometimes incorrectly showing "INACTIVE" status although the statement was still running +-- +-- 2.01: October 2012 +-- - The NONE option did not populate a substitution variable properly that is required from 11.2.0.2 on +-- for running the DBMS_XPLAN function on the target node via the GV$() function +-- +-- 2.0: October 2012 +-- - Access check +-- - Conditional compilation for different database versions +-- - Additional activity summary (when enabling "experimenal" including average and median wait times) +-- - Concurrent activity information (what is going on at the same time as this SQL statement executes) +-- - Experimental stuff: Additional I/O summary +-- - More pretty printing +-- - Experimental stuff: I/O added to Average Active Session Graph (renamed to Activity Timeline) +-- - Top Execution Plan Lines and Top Activities added to Activity Timeline +-- - Activity Timeline is now also shown for serial execution when TIMELINE option is specified +-- - From 11.2.0.2 on: We get the ACTUAL DOP from the undocumented PX_FLAGS column added to ASH +-- - All relevant XPLAN_ASH queries are now decorated so it should be easy to identify them in the Library Cache +-- - More samples are now covered and a kind of "read consistency" across queries on ASH is introduced +-- - From 11.2.0.2 on: Executions plans are now pulled from the remote RAC instance Library Cache if necessary +-- - Separate Parallel Worker activity overview +-- - Limited support for Oracle 10.2 ASH +-- +-- 1.0: August 2012 +-- Initial release +-- +-- Ideas: - Include GV$SESSION_LONGOPS information +-- - Show breakdown of objects accessed based on ASHs CURRENT_OBJ# information +-- +# + +--------------------------------------------------------------------------------- +-- Clean up SQL*Plus environment, prevents side effects of current environment -- +--------------------------------------------------------------------------------- + +undefine _EXPERIMENTAL +undefine duplicator +undefine dist_sample_count +undefine default_fo +undefine default_source +undefine default_operation +undefine default_ash +undefine prev_sql_id +undefine prev_cn +undefine prev_sql_exec_start +undefine prev_sql_exec_id +undefine last_exec_start +undefine last_exec_id +undefine last_exec_second_id +undefine last +undefine child_ad +undefine slave_count +undefine topnp +undefine topnw +undefine topnl +undefine topna +undefine pgs +undefine aas +undefine wgs +undefine si +undefine cn +undefine fo +undefine so +undefine ls +undefine li +undefine op +undefine ah +undefine co +undefine gc +undefine gc2 +undefine gc3 +undefine sid_sql_id +undefine sid_child_no +undefine sid_sql_exec_start +undefine sid_sql_exec_id +undefine _IF_ORA11_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11 +undefine _IF_ORA112_OR_HIGHER +undefine _IF_LOWER_THAN_ORA112 +undefine _IF_ORA11202_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11202 +undefine _IF_ORA11203_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11203 +undefine _IF_ORA12_OR_HIGHER +undefine _IF_ORA12_READ_MEM +undefine _IF_ORA_NO_READ_MEM +undefine _IF_LOWER_THAN_ORA12 +undefine _IF_ORA12102_OR_HIGHER +undefine _IF_LOWER_THAN_ORA12102 +undefine _IF_ORA11202_OR_HIGHERP +undefine _IF_ORA112_OR_HIGHERP +undefine _IF_ORA11_OR_HIGHERP +undefine _IF_ORA12_OR_HIGHERP +undefine _IF_ORA12_READ_MEMP +undefine _IF_CROSS_INSTANCE +undefine _IS_CROSS_INSTANCE +undefine _IS_SINGL_INSTANCE +undefine _SQL_EXEC2 +undefine plan_table_name +undefine las +undefine active_ind +undefine ic +undefine dm +undefine all_cols +undefine default_cols +undefine curr_global_ash +undefine curr_inst_id +undefine curr_plan_table +undefine curr_plan_table_stats +undefine curr_second_id +undefine curr_second_id_monitor +undefine curr_sample_freq +undefine curr_plan_function +undefine curr_par_fil +undefine curr_third_id +undefine curr_sqltext +undefine curr_sqltext_join +undefine curr_sqltext_join_col +undefine curr_sql_monitor +undefine curr_sql_plan_monitor +undefine hist_global_ash +undefine hist_inst_id +undefine hist_plan_table +undefine hist_plan_table_stats +undefine hist_second_id +undefine hist_second_id_monitor +undefine hist_sample_freq +undefine hist_plan_function +undefine hist_par_fil +undefine hist_third_id +undefine hist_sqltext +undefine hist_sqltext_join +undefine hist_sqltext_join_col +undefine hist_sql_monitor +undefine hist_sql_plan_monitor +undefine mixed_global_ash +undefine mixed_inst_id +undefine mixed_plan_table +undefine mixed_plan_table_stats +undefine mixed_second_id +undefine mixed_second_id_monitor +undefine mixed_sample_freq +undefine mixed_plan_function +undefine mixed_par_fil +undefine mixed_third_id +undefine mixed_sqltext +undefine mixed_sqltext_join +undefine mixed_sqltext_join_col +undefine mixed_sql_monitor +undefine mixed_sql_plan_monitor +undefine sash_global_ash +undefine sash_inst_id +undefine sash_plan_table +undefine sash_plan_table_stats +undefine sash_second_id +undefine sash_second_id_monitor +undefine sash_sample_freq +undefine sash_plan_function +undefine sash_par_fil +undefine sash_third_id +undefine sash_sqltext +undefine sash_sqltext_join +undefine sash_sqltext_join_col +undefine sash_sql_monitor +undefine sash_sql_plan_monitor +undefine _IS_SASH_REPO +undefine SASH_DB_VERSION +undefine global_ash +undefine inst_id +undefine plan_table +undefine plan_table_stats +undefine second_id +undefine second_id_monitor +undefine sample_freq +undefine plan_function +undefine par_fil +undefine third_id +undefine sqltext +undefine sqltext_join +undefine sqltext_join_col +undefine sql_monitor +undefine sql_plan_monitor +undefine third_id_sqltext +undefine c_pid +undefine c_ord +undefine c_act +undefine c_a_time_self +undefine c_lio_self +undefine c_reads_self +undefine c_writes_self +undefine c_a_time_self_graph +undefine c_lio_self_graph +undefine c_reads_self_graph +undefine c_writes_self_graph +undefine c_lio_ratio +undefine c_tcf_graph +undefine c_e_rows_times_start +undefine c_start_active +undefine c_duration_secs +undefine c_duration_secs_t +undefine c_time_active_graph +undefine c_procs +undefine c_procs_graph +undefine c_average_as_graph +undefine c_median_as_graph +undefine c_average_as_t_graph +undefine c_activity_graph +undefine c_activity +undefine c_execs +undefine c_a_rows_m +undefine c_pga +undefine c_temp +undefine c_io_read +undefine c_io_write +undefine c_co +undefine c_io_read_req +undefine c_io_write_req +undefine ds +undefine tgs +undefine avg_as_bkts +undefine rnd_thr +undefine no_ord_on_px +undefine find_min_sample_10g +undefine pc +undefine plan_exists +undefine _SHOW_LINE_ACTIVE +undefine _SHOW_PROCS +undefine _SHOW_PROCS_GRAPH +undefine _SHOW_AVERAGE_AS_GRAPH +undefine _SHOW_MEDIAN_AS_GRAPH +undefine _SHOW_AVERAGE_AS_T_GRAPH +undefine _SHOW_ACTIVITY +undefine _SHOW_ACTIVITY_GRAPH +undefine _SHOW_START_ACTIVE +undefine _SHOW_DURATION_SECS +undefine _SHOW_DURATION_SECS_T +undefine _SHOW_TIME_ACTIVE_GRAPH +undefine _SHOW_EXECS +undefine _SHOW_A_ROWS_M +undefine _SHOW_PGA +undefine _SHOW_TEMP +undefine _SHOW_IO_READ +undefine _SHOW_IO_WRITE +undefine _SHOW_CO +undefine _SHOW_IO_READ_REQ +undefine _SHOW_IO_WRITE_REQ +undefine ash_pred1 +undefine ash_pred2 +undefine ash_ln_pred1 +undefine ash_ln_pred2 +undefine ash_min_sample_time +undefine ash_max_sample_time +undefine ash_current_time +undefine ext_rowsource_graphs_maxrel +undefine show_monitor_rowcount +undefine ca_sc +undefine plan_inst_id +undefine ignore_PX_credit_blkd_10g +undefine show_median +undefine topn_sqlid +undefine show_px_sets +undefine use_monitor +undefine use_no_monitor +undefine dm_opt1 +undefine dm_opt2 +undefine default_sql_exec_id +undefine use_lateral +undefine use_no_lateral +undefine ash_sample_count_threshold +undefine debug_internalp +undefine debug_internalf +undefine is_adaptive_plan + +-- Script start + +col plan_table_output format a800 +col plan_table_count noprint new_value pc + +set linesize 800 pagesize 0 tab off feedback off sqlterminator on underline on + +----------------------------------- +-- Configuration, default values -- +----------------------------------- + +/* Configure EXPERIMENTAL stuff (currently I/O summary and figures added to Activity Timeline as well as average / median wait times for Activity Summaries) */ +/* Set this to "" for enabling experimental stuff */ +/* Set this to "--" for disabling experimental stuff */ +define _EXPERIMENTAL = "--" + +/* The graph character used for CPU in the graphs */ +define gc = "@" + +/* The graph character used for non-CPU in the graphs */ +define gc2 = "*" + +/* The graph character used for graphs that don't differentiate between CPU and non-CPU */ +define gc3 = "#" + +/* Threshold for rounding averages */ +define rnd_thr = "10" + +/* By default don't show the "Ord" (order of execution) column in the execution plan when Parallel Execution is detected */ +/* Set to YES for hiding it with Parallel Execution */ +/* Set to NO or anything != YES for showing it */ +define no_ord_on_px = "YES" + +/* In pre-11g there is no SQL_EXEC_START information available. By default the script now searches within the given timeframe (between SQL_EXEC_START and SQL_EXEC_END) + for the mininum sample time of the identified SQL_ID. If this switch is set to anything != YES then the given SQL_EXEC_START is used as is. + This default behaviour allows to specify some rough start / end dates and the script takes care of finding the actual start in ASH data. + Note that this means that multiple executions could be mixed up if you don't carefully define the SQL_EXEC_START date */ +define find_min_sample_10g = "YES" + +/* In 11g Oracle made the "PX Deq Credit: send blkd" wait event idle, by default do the same to 10g */ +/* If you want to see the event as it is recorded in 10g, set this to "--" */ +define ignore_PX_credit_blkd_10g = "" + +/* Some medians usually don't add much value to the already available averages, therefore they are not shown by default */ +/* If you want to have them shown, change this to "" */ +define show_median = "NO" + +/* The Top N SQL_IDs of concurrent activity */ +define topn_sqlid = "5" + +/* In the "Parallel Worker activity overview based on ASH" section the PX Execution Server Set information can be shown from 11g on */ +/* Since it is derived information it can be wrong and misleading, therefore this switch can be set to anything != YES to hide this info */ +define show_px_sets = "YES" + +/* By default supress output of internal queries */ +/* Set this to "" for seeing the output */ +define debug_internalp = "no" + +/* Set this to "on" to get feedback on for internal queries */ +define debug_internalf = "off" + +/* The Top N Processes */ +define topnp = "5" + +/* The Top N Activities */ +define topnw = "5" + +/* The Top N Plan lines in the Activity Timeline */ +define topnl = "3" + +/* The Top N Activities in the Activity Timeline */ +define topna = "3" + +/* The Parallel Distribution Graph Size */ +define pgs = "32" + +/* The Average Active Sessions Graph Size */ +define aas = "20" + +/* The Activities Graph Size */ +define wgs = "20" + +/* The Time Active Graph Size */ +define tgs = "20" + +/* The number of seconds for the last active plan lines from ASH */ +define las = "10" + +/* The characters used for the last active plan lines from ASH */ +define active_ind = "==>" + +/* Number of rows / buckets used in the Average Active Session Graph */ +define avg_as_bkts = "100" + +/* TYPICAL +OUTLINE +ALIAS +PEEKED_BINDS is assumed as the default formatting option for DBMS_XPLAN.DISPLAY_CURSOR */ +define default_fo = "TYPICAL +OUTLINE +ALIAS +PEEKED_BINDS" + +/* Get the info about last execution by default from ASH, alternative is Real-Time SQL Monitoring */ +define default_source = "ASH" + +/* Determine the ASH source automatically if an SQL_EXEC_START is explicitly provided */ +/* If SQL_EXEC_START is not specified then get the ASH info from current ASH, alternative is historic ASH */ +define default_ash = "AUTO" + +/* Default operation is to show all, Activity, Parallel Distribution and Timeline info based on ASH */ +/* Possible values are: [ASH][,][DISTRIB][,][MONITOR][,][TIMELINE]|[NONE]*/ +define default_operation = "ASH,DISTRIB,MONITOR,TIMELINE" + +/* The default SQL_EXEC_ID if a SQL_EXEC_START is specified but SQL_EXEC_ID is left blank */ +define default_sql_exec_id = "16777216" + +/* The ASH sample count threshold for the LIMITED_ASH warning message */ +define ash_sample_count_threshold = 100000 + +/* Date mask */ +define dm = "YYYY-MM-DD-HH24:MI:SS" + +/* Optional date masks to try */ +/* Due to the 240 chars limit of SQL*Plus defines this is split into multiple defines */ +define dm_opt1 = "'FX&dm.','DD.MM.RR HH24:MI:SS','DD-MON-RR HH:MI:SS PM','DD-MON-RR HH24:MI:SS','MM/DD/RR HH24:MI:SS','DD.MM.YYYY HH24:MI:SS','MM/DD/YYYY HH24:MI:SS','DD-MON-YYYY HH24:MI:SS','DD.MM.YYYY HH:MI:SS PM'," +define dm_opt2 = "'MM/DD/YYYY HH:MI:SS PM', '&dm'" + +/* Extended Rowsource Statistics Graphs (A-Time Self Graph, LIO Self Graph, Reads Self Graph and Writes Self Graph) relative to MAX or TOTAL */ +/* Default is relative to MAXimum (YES), set to anything else for relative to TOTAL */ +define ext_rowsource_graphs_maxrel = "YES" + +/* By default show on execution plan line level in the column "Parallel Distribution ASH" processes from monitoring along with rowcounts that are not showing up in ASH samples */ +/* Set this to anything else than YES to return to previous behaviour where only processes will be shown that are sampled in ASH */ +define show_monitor_rowcount = "YES" + +/* List of all available columns */ +/* Note that you cannot change the column order (yet), only which columns to show */ +/* Keep this list unchanged for reference, change default below */ +define all_cols = "pid,ord,act,a_time,lio,reads,writes,a_time_grf,lio_grf,rea_grf,wri_grf,lio_ratio,tcf_grf,e_rows_t,start,dur_t,dur,time_act_grf,procs,procs_grf,act_grf,act,aas_t_grf,aas_grf,mas_grf,execs,a_rows_m,pga,temp,io_read,io_write,co,io_rreq,io_wreq" + +/* Default columns to show */ +/* Specify here your custom configuration */ +define default_cols = "pid,ord,act,a_time,lio,reads,writes,a_time_grf,lio_grf,rea_grf,wri_grf,lio_ratio,tcf_grf,e_rows_t,start,dur_t,dur,time_act_grf,procs,procs_grf,act_grf,act,execs,a_rows_m,pga,temp,io_read,io_write,co,io_rreq,io_wreq" + +/* ASH configuration */ + +/* Configuration for recent ASH */ + +/* ASH repository */ +define curr_global_ash = "gv$active_session_history" + +/* Instance identifier */ +define curr_inst_id = "inst_id" + +/* Plan tables */ +define curr_plan_table = "gv$sql_plan" + +define curr_plan_table_stats = "gv$sql_plan_statistics_all" + +/* Plan table second identifier */ +define curr_second_id = "child_number" + +/* Real-Time SQL Monitor second identifier */ +define curr_second_id_monitor = "child_address" + +/* Sample frequency of ASH, 1 second for recent */ +define curr_sample_freq = "1" + +/* Where to get the formatted plan output from */ +define curr_plan_function = "dbms_xplan.display_cursor" + +/* In 10g we can't use named parameters for function calls */ +/* So we need a bit of flexibility here when using different plan functions */ +define curr_par_fil = "" + +/* For current ASH we need the instance_id in addition for remote instance executions */ +define curr_third_id = "''''p.inst_id = '''' || :inst_id" + +/* For current ASH we take SQL text from GV$SQLSTATS */ +define curr_sqltext = "gv$sqlstats" + +/* For GV$SQLSTATS we need to join on instance_id in addition */ +define curr_sqltext_join = "a.min_instance_id = sql.inst_id (+)" + +/* For GV$SQLSTATS we need to join on instance_id in addition */ +define curr_sqltext_join_col = "inst_id" + +/* Real-Time SQL Monitoring views - customize if you want to use your own repository */ +define curr_sql_monitor = "gv$sql_monitor" + +define curr_sql_plan_monitor = "gv$sql_plan_monitor" + +/* Configuration for historical ASH */ + +/* Global ASH repository */ +define hist_global_ash = "(select ash.* from dba_hist_active_sess_history ash, v$database db where db.dbid = ash.dbid)" + +/* Instance identifier */ +define hist_inst_id = "instance_number" + +/* Plan tables */ +define hist_plan_table = "(select p.* from dba_hist_sql_plan p, v$database db where p.dbid = db.dbid)" + +define hist_plan_table_stats = "(select p.* from dba_hist_sql_plan p, v$database db where p.dbid = db.dbid)" + +/* Plan table second identifier */ +define hist_second_id = "plan_hash_value" + +/* Real-Time SQL Monitor second identifier */ +define hist_second_id_monitor = "plan_hash_value" + +/* Sample frequency of ASH, 10 seconds for retained history */ +define hist_sample_freq = "10" + +/* Where to get the formatted plan output from */ +define hist_plan_function = "dbms_xplan.display_awr" + +/* In 10g we can't use named parameters for function calls */ +/* So we need a bit of flexibility here when using different plan functions */ +/* DISPLAY_AWR has an additional parameter DB_ID */ +define hist_par_fil = "null," + +/* For historic ASH we don't need the instance_id in addition for remote instance executions */ +define hist_third_id = "''''1 = 1 --'''' || :inst_id" + +/* For historic ASH we take SQL text from DBA_HIST_SQLTEXT */ +define hist_sqltext = "(select t.* from dba_hist_sqltext t, v$database db where t.dbid = db.dbid)" + +/* For DBA_HIST_SQL_TEXT we don't need to join on instance_id in addition */ +define hist_sqltext_join = "1 = 1" + +/* For DBA_HIST_SQL_TEXT we don't need to join on instance_id in addition */ +define hist_sqltext_join_col = "1 as inst_id" + +/* Real-Time SQL Monitoring views - customize if you want to use your own repository */ +define hist_sql_monitor = "gv$sql_monitor" + +define hist_sql_plan_monitor = "gv$sql_plan_monitor" + +/* Configuration for mixed execution plan from AWR but data from recent ASH / */ + +/* ASH repository */ +define mixed_global_ash = "gv$active_session_history" + +/* Instance identifier */ +define mixed_inst_id = "inst_id" + +/* Plan tables */ +define mixed_plan_table = "(select p.* from dba_hist_sql_plan p, v$database db where p.dbid = db.dbid)" + +define mixed_plan_table_stats = "(select p.* from dba_hist_sql_plan p, v$database db where p.dbid = db.dbid)" + +/* Plan table second identifier */ +define mixed_second_id = "plan_hash_value" + +/* Real-Time SQL Monitor second identifier */ +define mixed_second_id_monitor = "plan_hash_value" + +/* Sample frequency of ASH, 1 second for recent */ +define mixed_sample_freq = "1" + +/* Where to get the formatted plan output from */ +define mixed_plan_function = "dbms_xplan.display_awr" + +/* In 10g we can't use named parameters for function calls */ +/* So we need a bit of flexibility here when using different plan functions */ +define mixed_par_fil = "null," + +/* For mixed ASH we don't need the instance_id in addition for remote instance executions */ +define mixed_third_id = "''''1 = 1 --'''' || :inst_id" + +/* For mixed ASH we take SQL text from DBA_HIST_SQLTEXT */ +define mixed_sqltext = "(select t.* from dba_hist_sqltext t, v$database db where t.dbid = db.dbid)" + +/* For DBA_HIST_SQL_TEXT we don't need to join on instance_id in addition */ +define mixed_sqltext_join = "1 = 1" + +/* For DBA_HIST_SQL_TEXT we don't need to join on instance_id in addition */ +define mixed_sqltext_join_col = "1 as inst_id" + +/* Real-Time SQL Monitoring views - customize if you want to use your own repository */ +define mixed_sql_monitor = "gv$sql_monitor" + +define mixed_sql_plan_monitor = "gv$sql_plan_monitor" + +/* Configuration for S-ASH / */ + +/* ASH repository */ +define sash_global_ash = "v$active_session_history" + +/* Instance identifier */ +define sash_inst_id = "inst_id" + +/* Plan tables */ +define sash_plan_table = "v$sql_plan" + +define sash_plan_table_stats = "v$sql_plan" + +/* Plan table second identifier */ +define sash_second_id = "plan_hash_value" + +/* Real-Time SQL Monitor second identifier */ +define sash_second_id_monitor = "plan_hash_value" + +/* Sample frequency of S-ASH, 1 second default */ +define sash_sample_freq = "1" + +/* Where to get the formatted plan output from */ +define sash_plan_function = "sash_xplan.display" + +/* In 10g we can't use named parameters for function calls */ +/* So we need a bit of flexibility here when using different plan functions */ +define sash_par_fil = "" + +/* For S-ASH we don't need the instance_id */ +define sash_third_id = "''''1 = 1 --'''' || :inst_id" + +/* For mixed ASH we take SQL text from SASH_SQLTXT */ +define sash_sqltext = "sash_sqltxt" + +/* For SASH_SQL_TXT we don't need to join on instance_id in addition */ +define sash_sqltext_join = "1 = 1" + +/* For SASH_SQL_TXT we don't need to join on instance_id in addition */ +define sash_sqltext_join_col = "1 as inst_id" + +/* Real-Time SQL Monitoring views - customize if you want to use your own repository */ +define sash_sql_monitor = "gv$sql_monitor" + +define sash_sql_plan_monitor = "gv$sql_plan_monitor" + +----------------------- +-- Preparation steps -- +----------------------- + +column prev_sql_id new_value prev_sql_id &debug_internalp.print +column prev_child_number new_value prev_cn &debug_internalp.print +column prev_sql_exec_start new_value prev_sql_exec_start &debug_internalp.print +column prev_sql_exec_id new_value prev_sql_exec_id &debug_internalp.print +column dt_now new_value dt_now &debug_internalp.print + +variable prev_sql_id varchar2(20) +variable prev_child_number number +variable prev_sql_exec_start varchar2(50) +variable prev_sql_exec_id number +variable dt_now varchar2(21) + +/* Get the previous command as default + if no SQL_ID / CHILD_NUMBER is passed */ +begin + $IF DBMS_DB_VERSION.VERSION < 11 $THEN + execute immediate ' + select + prev_sql_id + , prev_child_number + , to_char(to_date(''01.01.1970'', ''DD.MM.YYYY''), ''&dm'') as prev_sql_exec_start + , 0 as prev_sql_exec_id + , to_char(sysdate, ''YYYY-MM-DD HH24:MI:SS'') as dt_now + from + v$session + where + sid = userenv(''sid'')' + $ELSE + execute immediate ' + select + prev_sql_id + , prev_child_number + , to_char(prev_exec_start, ''&dm'') as prev_sql_exec_start + , prev_exec_id as prev_sql_exec_id + , to_char(sysdate, ''YYYY-MM-DD HH24:MI:SS'') as dt_now + from + v$session + where + sid = userenv(''sid'')' + $END + into :prev_sql_id, :prev_child_number, :prev_sql_exec_start, :prev_sql_exec_id, :dt_now; +end; +/ + +select + :prev_sql_id as prev_sql_id + , to_char(:prev_child_number, 'TM') as prev_child_number + , :prev_sql_exec_start as prev_sql_exec_start + , to_char(:prev_sql_exec_id, 'TM') as prev_sql_exec_id +/* Remember the time when searching ASH for recent execution of this particular session (avoid that activity of XPLAN_ASH leads to wrong results) */ + , :dt_now as dt_now +from + dual +; + +column prev_sql_id clear +column prev_child_number clear +column prev_sql_exec_start clear +column prev_sql_exec_id clear +column dt_now clear + +/* Is this a S-ASH repository? */ +variable is_sash_repo varchar2(1) +variable sash_db_version varchar2(20) + +begin + execute immediate ' + select + ''Y'' as is_sash_repo + , version as sash_db_version + from + sash_target a + , sash_targets b + where + a.dbid = b.dbid' + into :is_sash_repo, :sash_db_version; +exception +when others then + :is_sash_repo := null; + :sash_db_version := null; +end; +/ + +column is_sash_repo new_value _IS_SASH_REPO &debug_internalp.print +column sash_db_version new_value SASH_DB_VERSION &debug_internalp.print + +select + :is_sash_repo as is_sash_repo + , :sash_db_version as sash_db_version +from + dual +; + +column is_sash_repo clear +column sash_db_version clear + +/* Perform an access check on all objects that might be used and cause a failure */ +variable access_check varchar2(4000) + +declare + type t_check_list is table of varchar2(30); + $IF '&_IS_SASH_REPO' IS NOT NULL $THEN + a_check_list t_check_list := t_check_list('DUAL', 'V$ACTIVE_SESSION_HISTORY', 'V$SQL_PLAN', 'V$VERSION', 'V$SQL', 'GV$SQL_PLAN_STATISTICS_ALL', 'GV$SQL_MONITOR', 'SASH_SQLTXT'); + $ELSIF DBMS_DB_VERSION.VERSION < 11 $THEN + a_check_list t_check_list := t_check_list('DUAL', 'V$SESSION', 'GV$SESSION', 'V$DATABASE', 'GV$ACTIVE_SESSION_HISTORY', 'GV$SQL_PLAN', 'GV$SQL_PLAN_STATISTICS_ALL', 'V$VERSION', 'GV$SQL', 'DBA_HIST_ACTIVE_SESS_HISTORY', 'DBA_HIST_SQL_PLAN', 'GV$SQLSTATS', 'DBA_HIST_SQLTEXT'); + $ELSE + a_check_list t_check_list := t_check_list('DUAL', 'V$SESSION', 'GV$SESSION', 'V$DATABASE', 'GV$ACTIVE_SESSION_HISTORY', 'GV$SQL_PLAN', 'GV$SQL_PLAN_STATISTICS_ALL', 'V$VERSION', 'GV$SQL_MONITOR', 'GV$SQL', 'DBA_HIST_ACTIVE_SESS_HISTORY', 'DBA_HIST_SQL_PLAN', 'GV$SQLSTATS', 'DBA_HIST_SQLTEXT', 'GV$SQL_PLAN_MONITOR'); + $END + s_dummy varchar2(1); + s_result varchar2(4000); +begin + for i in a_check_list.first..a_check_list.last loop + begin + execute immediate 'select to_char(null) as dummy from ' || a_check_list(i) || ' where 1 = 2' into s_dummy; + exception + when NO_DATA_FOUND then + null; + when others then + s_result := s_result || chr(10) || 'Error ORA' || to_char(SQLCODE, '00000') || ' when accessing ' || a_check_list(i); + end; + end loop; + s_result := ltrim(s_result, chr(10)); + :access_check := s_result; +end; +/ + +set termout on + +set heading off feedback off + +column message format a100 + +select + '----------------------------------------------------------------------------------------------' as message +from + dual +where + :access_check is not null +--------- +union all +--------- +select + '!!Access Check failed!!' +from + dual +where + :access_check is not null +--------- +union all +--------- +select + '----------------------------------------------------------------------------------------------' +from + dual +where + :access_check is not null +--------- +union all +--------- +select + :access_check +from + dual +where + :access_check is not null +; + +column message clear + +set heading on feedback &debug_internalf + +set termout off + +-- Default some defines that cause the script appear to "hang" in case of missing privileges +-- This is just to avoid the "hang" (waiting for input with termout off) - +-- these will be populated when operating with proper privileges +define last_exec_second_id = "" +define last_exec_start = "" +define sid_sql_id = "" +define sid_child_no = "" +define sid_sql_exec_start = "" +define child_ad = "" +define sid_sql_exec_id = "" +define last_exec_id = "" +define slave_count = "" +define ic = "" +define ds = "" +define plan_exists = "" +define plan_inst_id = "" +define ash_pred1 = "1 = " +define ash_pred2 = "2" +define ash_ln_pred1 = "1 = " +define ash_ln_pred2 = "2" +define ash_min_sample_time = "" +define ash_max_sample_time = "" +define ash_current_time = "" +define ca_sc = "" +define duplicator = "0" +define dist_sample_count = "0" +define pc = "0" +define sid_child_no_ = "" +define last_exec_second_id_ = "" +define has_binds_xml = "" +define use_monitor = "--" +define use_no_monitor = "" +define is_adaptive_plan = "" +define ash_sample_count = "" + +-- The following is a hack to use default +-- values for defines +column 1 new_value 1 &debug_internalp.print +column 2 new_value 2 &debug_internalp.print +column 3 new_value 3 &debug_internalp.print +column 4 new_value 4 &debug_internalp.print +column 5 new_value 5 &debug_internalp.print +column 6 new_value 6 &debug_internalp.print +column 7 new_value 7 &debug_internalp.print +column 8 new_value 8 &debug_internalp.print +column 9 new_value 9 &debug_internalp.print +column 10 new_value 10 &debug_internalp.print + +select + '' as "1" + , '' as "2" + , '' as "3" + , '' as "4" + , '' as "5" + , '' as "6" + , '' as "7" + , '' as "8" + , '' as "9" + , '' as "10" +from + dual +where + rownum = 0 +; + +-- Some version dependent code switches +col ora11_higher new_value _IF_ORA11_OR_HIGHER &debug_internalp.print +col ora11_lower new_value _IF_LOWER_THAN_ORA11 &debug_internalp.print +col ora112_higher new_value _IF_ORA112_OR_HIGHER &debug_internalp.print +col ora112_lower new_value _IF_LOWER_THAN_ORA112 &debug_internalp.print +col ora11202_higher new_value _IF_ORA11202_OR_HIGHER &debug_internalp.print +col ora11202_lower new_value _IF_LOWER_THAN_ORA11202 &debug_internalp.print +col ora11203_higher new_value _IF_ORA11203_OR_HIGHER &debug_internalp.print +col ora11203_lower new_value _IF_LOWER_THAN_ORA11203 &debug_internalp.print +col ora12_higher new_value _IF_ORA12_OR_HIGHER &debug_internalp.print +col ora12_lower new_value _IF_LOWER_THAN_ORA12 &debug_internalp.print +col ora12102_higher new_value _IF_ORA12102_OR_HIGHER &debug_internalp.print +col ora12102_lower new_value _IF_LOWER_THAN_ORA12102 &debug_internalp.print + +select + case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11' then '' else '--' end as ora11_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11' then '--' else '' end as ora11_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2' then '' else '--' end as ora112_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2' then '--' else '' end as ora112_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2.0.2' then '' else '--' end as ora11202_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2.0.2' then '--' else '' end as ora11202_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2.0.3' then '' else '--' end as ora11203_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2.0.3' then '--' else '' end as ora11203_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12' then '' else '--' end as ora12_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12' then '--' else '' end as ora12_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12.1.0.2' then '' else '--' end as ora12102_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12.1.0.2' then '--' else '' end as ora12102_lower +from + (select coalesce(case when '&SASH_DB_VERSION' is not null then 'Release &SASH_DB_VERSION ' end, banner) as banner from v$version) +where + rownum = 1 +; + +column is_ora11202_or_higher new_value _IF_ORA11202_OR_HIGHERP &debug_internalp.print +column is_ora112_or_higher new_value _IF_ORA112_OR_HIGHERP &debug_internalp.print +column is_ora11_or_higher new_value _IF_ORA11_OR_HIGHERP &debug_internalp.print +column is_ora12_or_higher new_value _IF_ORA12_OR_HIGHERP &debug_internalp.print + +select + case when '&_IF_ORA11202_OR_HIGHER' is null then '' else 'no' end as is_ora11202_or_higher + , case when '&_IF_ORA112_OR_HIGHER' is null then '' else 'no' end as is_ora112_or_higher + , case when '&_IF_ORA11_OR_HIGHER' is null then '' else 'no' end as is_ora11_or_higher + , case when '&_IF_ORA12_OR_HIGHER' is null then '' else 'no' end as is_ora12_or_higher +from + dual +; + +column is_ora11202_or_higher clear +column is_ora112_or_higher clear +column is_ora11_or_higher clear +column is_ora12_or_higher clear + +/* For versions prior to 11g there is no concept of SQL_EXEC_START / SQL_EXEC_ID */ +/* Hence we require the user to enter simply a start and end date for the ASH samples to use */ +column sql_exec2 new_value _SQL_EXEC2 &debug_internalp.print +column experimental_mode new_value experimental_mode &debug_internalp.print + +select +&_IF_LOWER_THAN_ORA11 'SQL_EXEC_END (format "&dm")' as sql_exec2 +&_IF_ORA11_OR_HIGHER 'SQL_EXEC_ID (default &default_sql_exec_id)' as sql_exec2 + , case when '&_EXPERIMENTAL' is null then 'YES' else 'NO' end as experimental_mode +from + dual; + +column sql_exec2 clear +column experimental_mode clear + +/* If you prefer to be prompted for the various options, activate this code block */ +/* --- START --- */ +--set doc off +--doc +/* Anything you pass on the command line will be used as default here, so you can simply add/amend/overwrite the option you like at the prompts */ + +set termout on + +prompt +prompt Anything you pass on the command line will be used as default here +prompt +prompt Command-line parameter value: &1 +accept 1 default '&1' prompt 'SQL_ID (or SID=[@]): ' +prompt Command-line parameter value: &2 +accept 2 default '&2' prompt 'SQL_EXEC_START (format "&dm"): ' +prompt Command-line parameter value: &3 +accept 3 default '&3' prompt '&_SQL_EXEC2: ' +prompt Command-line parameter value: &4 +accept 4 default '&4' prompt 'ASH source (CURR|HIST|MIXED, default &default_ash): ' +prompt Command-line parameter value: &5 +accept 5 default '&5' prompt 'Enable EXPERIMENTAL mode (YES|NO, default &experimental_mode): ' +prompt Command-line parameter value: &6 +accept 6 default '&6' prompt 'Source for last exec search (MONITOR/ASH, default &default_source): ' +prompt Command-line parameter value: &7 +accept 7 default '&7' prompt 'ASH options (default &default_operation): ' +prompt Command-line parameter value: &8 +accept 8 default '&8' prompt 'CHILD_NUMBER (or PLAN_HASH_VALUE): ' +prompt Command-line parameter value: &9 +accept 9 default '&9' prompt 'DBMS_XPLAN.DISPLAY* format option (default &default_fo): ' +prompt Command-line parameter value: &10 +accept 10 default '&10' prompt 'Comma separated list of columns to show/hide (default show all configured columns): ' + +-- If you need to debug, comment the following line +set termout off + +/* If you prefer to be prompted for the various options, activate this code block */ +/* --- END --- */ +--# + +set termout on + +prompt +prompt +prompt XPLAN_ASH V4.23 (C) 2012-2016 Randolf Geist +prompt http://oracle-randolf.blogspot.com +prompt +prompt Legend for graphs: +prompt &gc: CPU +prompt &gc2: Non-CPU +prompt &gc3: General activity indicator +prompt +prompt Initializing... +prompt ------------------------------------------------ + +-- If you need to debug, comment the following line +set termout off + +-- Enable LATERAL views - required for being able to use the LATERAL view syntax in pre-12c +variable no_alter_session_priv varchar2(1) + +exec :no_alter_session_priv := null + +declare + e_insuff_priv exception; + pragma exception_init(e_insuff_priv, -1031); +begin + execute immediate 'alter session set events ''22829 trace name context forever'''; +exception +when e_insuff_priv then + :no_alter_session_priv := 'Y'; +end; +/ + +column use_lateral new_value use_lateral &debug_internalp.print +column use_no_lateral new_value use_no_lateral &debug_internalp.print + +select + case when :no_alter_session_priv is null then '' else '--' end as use_lateral + , case when :no_alter_session_priv is not null then '' else '--' end as use_no_lateral +from + dual +; + +column use_lateral clear +column use_no_lateral clear + +-- If SQL_EXEC_ID is left blank and SQL_EXEC_START is not null and we have 11g or later, then use the default SQL_EXEC_ID +select + coalesce('&3', '&default_sql_exec_id') as "3" +from + dual +where + '&_IF_ORA11_OR_HIGHER' is null and '&2' is not null; + +-- Evaluate optional date masks for SQL_EXEC_START +variable sql_exec_start_format varchar2(100) + +exec :sql_exec_start_format := null + +declare + type t_varchar2_list is table of varchar2(100); + a_date_format t_varchar2_list := t_varchar2_list(&dm_opt1.&dm_opt2); +begin + for i in a_date_format.first..a_date_format.last loop + begin + :sql_exec_start_format := to_char(to_date('&2', a_date_format(i)), '&dm'); + exception + when others then + --dbms_output.put_line('Mask failed: ' || a_date_format(i)); + null; + end; + if :sql_exec_start_format is not null then + --dbms_output.put_line('Mask used: ' || a_date_format(i)); + exit; + end if; + end loop; +end; +/ + +select + :sql_exec_start_format as "2" +from + dual +where + '&2' is not null; + +-- If SQL_EXEC_END gets used in 10g, apply the same optional date masks here, too +exec :sql_exec_start_format := null + +declare + type t_varchar2_list is table of varchar2(100); + a_date_format t_varchar2_list := t_varchar2_list(&dm_opt1.&dm_opt2); +begin + if '&_IF_LOWER_THAN_ORA11' is null then + for i in a_date_format.first..a_date_format.last loop + begin + :sql_exec_start_format := to_char(to_date('&3', a_date_format(i)), '&dm'); + exception + when others then + --dbms_output.put_line('Mask failed: ' || a_date_format(i)); + null; + end; + if :sql_exec_start_format is not null then + --dbms_output.put_line('Mask used: ' || a_date_format(i)); + exit; + end if; + end loop; + end if; +end; +/ + +select + :sql_exec_start_format as "3" +from + dual +where + '&3' is not null and '&_IF_LOWER_THAN_ORA11' is null; + +-- If SQL_EXEC_START is specified and ASH source is AUTO then determine CURR / HIST automatically +variable ash_min_sample_time varchar2(17) + +declare + e_table_or_view_not_exists exception; + pragma exception_init(e_table_or_view_not_exists, -942); +begin + execute immediate ' + select + max(to_char(oldest_sample_time, ''YYYYMMDD HH24:MI:SS'')) + from + gv$ash_info + where + ''&_IS_SASH_REPO'' is null + and coalesce(case when substr(''AUTO'' , 1, length(''&4'')) = upper(''&4'') then ''AUTO'' else ''&4'' end, ''&default_ash'') = ''AUTO''' + into + :ash_min_sample_time; +exception +when e_table_or_view_not_exists then + begin + execute immediate ' + select + to_char(min(sample_time), ''YYYYMMDD HH24:MI:SS'') + from + gv$active_session_history + where + ''&_IS_SASH_REPO'' is null + and inst_id = USERENV(''INSTANCE'') + and coalesce(case when substr(''AUTO'' , 1, length(''&4'')) = upper(''&4'') then ''AUTO'' else ''&4'' end, ''&default_ash'') = ''AUTO''' + into + :ash_min_sample_time; + exception + when e_table_or_view_not_exists then + :ash_min_sample_time := null; + when NO_DATA_FOUND then + :ash_min_sample_time := null; + end; +when NO_DATA_FOUND then + :ash_min_sample_time := null; +end; +/ + +select + case + when :ash_min_sample_time is null or '&2' is null then 'CURR' + when to_date(:ash_min_sample_time, 'YYYYMMDD HH24:MI:SS') <= to_date('&2', '&dm') then 'CURR' + else 'HIST' + end + as "4" +from + dual +where + coalesce(case when substr('AUTO' , 1, length('&4')) = upper('&4') then 'AUTO' else '&4' end, '&default_ash') = 'AUTO' +; + +-- Allow and evaluate shortcuts for some of the parameters +with +a as +( + select + ',' || replace(ltrim(upper(nvl('&7', '&default_operation')), ' ,'), ' ', '') as par7 + from dual +), +b as +( + select + a.* + , instr(par7, ',A') as a_start_ + , instr(par7, ',D') as d_start_ + , instr(par7, ',M') as m_start_ + , instr(par7, ',T') as t_start_ + , instr(par7, ',N') as n_start_ + , instr(par7, ',L') as l_start_ + from + a +), +c as +( + select + b.* + , length(par7) as last_char + , instr(par7, ',', a_start_ + 1) as a_end_ + , instr(par7, ',', d_start_ + 1) as d_end_ + , instr(par7, ',', m_start_ + 1) as m_end_ + , instr(par7, ',', t_start_ + 1) as t_end_ + , instr(par7, ',', n_start_ + 1) as n_end_ + , instr(par7, ',', l_start_ + 1) as l_end_ + from + b +), +d as +( + select + par7 + , case when a_start_ > 0 then a_start_ + 1 else 0 end as a_start + , case when d_start_ > 0 then d_start_ + 1 else 0 end as d_start + , case when m_start_ > 0 then m_start_ + 1 else 0 end as m_start + , case when t_start_ > 0 then t_start_ + 1 else 0 end as t_start + , case when n_start_ > 0 then n_start_ + 1 else 0 end as n_start + , case when l_start_ > 0 then l_start_ + 1 else 0 end as l_start + , case when a_start_ > 0 then case a_end_ when 0 then last_char else a_end_ - 1 end else 0 end as a_end + , case when d_start_ > 0 then case d_end_ when 0 then last_char else d_end_ - 1 end else 0 end as d_end + , case when m_start_ > 0 then case m_end_ when 0 then last_char else m_end_ - 1 end else 0 end as m_end + , case when t_start_ > 0 then case t_end_ when 0 then last_char else t_end_ - 1 end else 0 end as t_end + , case when n_start_ > 0 then case n_end_ when 0 then last_char else n_end_ - 1 end else 0 end as n_end + , case when l_start_ > 0 then case l_end_ when 0 then last_char else l_end_ - 1 end else 0 end as l_end + from + c +), +e as +( + select + a_start + , d_start + , m_start + , t_start + , n_start + , l_start + , a_end + , d_end + , m_end + , t_end + , n_end + , l_end + , par7 + , case when a_start > 0 then a_end - a_start + 1 else 0 end as a_length + , case when d_start > 0 then d_end - d_start + 1 else 0 end as d_length + , case when m_start > 0 then m_end - m_start + 1 else 0 end as m_length + , case when t_start > 0 then t_end - t_start + 1 else 0 end as t_length + , case when n_start > 0 then n_end - n_start + 1 else 0 end as n_length + , case when l_start > 0 then l_end - l_start + 1 else 0 end as l_length + from + d +), +f as +( + select + e.* + , case when a_start > 0 then case when substr(par7, a_start, a_length) = substr('ASH', 1, a_length) then 'ASH' else substr(par7, a_start, a_length) end else '' end as a_opt + from + e +), +g as +( + select + f.* + , case when d_start > 0 then case when substr(par7, d_start, d_length) = substr('DISTRIB', 1, d_length) then 'DISTRIB' else substr(par7, d_start, d_length) end else '' end as d_opt + from + f +), +h as +( + select + g.* + , case when t_start > 0 then case when substr(par7, t_start, t_length) = substr('TIMELINE', 1, t_length) then 'TIMELINE' else substr(par7, t_start, t_length) end else '' end as t_opt + from + g +), +i as +( + select + h.* + , case when m_start > 0 then case when substr(par7, m_start, m_length) = substr('MONITOR', 1, m_length) then 'MONITOR' else substr(par7, m_start, m_length) end else '' end as m_opt + from + h +), +j as +( + select + i.* + , case when n_start > 0 then case when substr(par7, n_start, n_length) = substr('NONE', 1, n_length) then 'NONE' else substr(par7, n_start, n_length) end else '' end as n_opt + from + i +), +k as +( + select + j.* + , case when l_start > 0 then case when substr(par7, l_start, l_length) = substr('LIMITED_ASH', 1, l_length) then 'LIMITED_ASH' else substr(par7, l_start, l_length) end else '' end as l_opt + from + j +) +select + case + when substr('CURR' , 1, length('&4')) = upper('&4') then 'CURR' + when substr('HIST' , 1, length('&4')) = upper('&4') then 'HIST' + when substr('MIXED', 1, length('&4')) = upper('&4') then 'MIXED' + else '&4' + end as "4" + , case + when substr('YES' , 1, length('&5')) = upper('&5') then 'YES' + when substr('NO' , 1, length('&5')) = upper('&5') then 'NO' + when substr('TRUE' , 1, length('&5')) = upper('&5') then 'TRUE' + when substr('FALSE', 1, length('&5')) = upper('&5') then 'FALSE' + else '&5' + end as "5" + , case + when substr('MONITOR', 1, length('&6')) = upper('&6') then 'MONITOR' + when substr('ASH' , 1, length('&6')) = upper('&6') then 'ASH' + else '&6' + end as "6" + , ltrim(a_opt || case when l_opt is not null then ',' end || l_opt || case when d_opt is not null then ',' end || d_opt || case when m_opt is not null then ',' end || m_opt || case when t_opt is not null then ',' end || t_opt || case when n_opt is not null then ',' end || n_opt, ',') as "7" +from + k; + +column fo new_value fo &debug_internalp.print +column so new_value so &debug_internalp.print +column op new_value op &debug_internalp.print +column ah new_value ah &debug_internalp.print +column co new_value co &debug_internalp.print +column EXPERIMENTAL new_value _EXPERIMENTAL &debug_internalp.print + +/* Use passed parameters else use defaults */ +select + upper(nvl('&9', '&default_fo')) as fo + , upper(nvl(case when upper('&6') in ('MONITOR', 'ASH') then '&6' end, '&default_source')) as so + , upper(nvl('&7', '&default_operation')) as op + , upper(nvl(case when '&_IS_SASH_REPO' is not null then 'SASH' else case when upper('&4') in ('CURR', 'HIST', 'MIXED') then '&4' end end, '&default_ash')) as ah + , ',' || upper(trim(both ',' from nvl('&10', '&default_cols'))) || ',' as co + , case when upper(nvl('&5', '&experimental_mode')) in ('ON', 'TRUE', 'YES') then '' else '--' end as EXPERIMENTAL +from + dual +; + +column EXPERIMENTAL clear +undefine experimental_mode + +/* Determine ASH source */ + +column global_ash new_value global_ash &debug_internalp.print +column inst_id new_value inst_id &debug_internalp.print +column plan_table new_value plan_table &debug_internalp.print +column plan_table_stats new_value plan_table_stats &debug_internalp.print +column second_id new_value second_id &debug_internalp.print +column second_id_monitor new_value second_id_monitor &debug_internalp.print +column sample_freq new_value sample_freq &debug_internalp.print +column plan_function new_value plan_function &debug_internalp.print +column par_fil new_value par_fil &debug_internalp.print +column third_id new_value third_id &debug_internalp.print +column sqltext new_value sqltext &debug_internalp.print +column sqltext_join new_value sqltext_join &debug_internalp.print +column sqltext_join_col new_value sqltext_join_col &debug_internalp.print +column sql_monitor new_value sql_monitor &debug_internalp.print +column sql_plan_monitor new_value sql_plan_monitor &debug_internalp.print + +select + '&curr_global_ash' as global_ash + , '&curr_inst_id' as inst_id + , '&curr_plan_table' as plan_table + , '&curr_plan_table_stats' as plan_table_stats + , '&curr_second_id' as second_id + , '&curr_second_id_monitor' as second_id_monitor + , '&curr_sample_freq' as sample_freq + , '&curr_plan_function' as plan_function + , '&curr_par_fil' as par_fil + , '&curr_third_id' as third_id + , '&curr_sqltext' as sqltext + , '&curr_sqltext_join' as sqltext_join + , '&curr_sqltext_join_col' as sqltext_join_col + , '&curr_sql_monitor' as sql_monitor + , '&curr_sql_plan_monitor' as sql_plan_monitor +from + dual +where + '&ah' = 'CURR' +--------- +union all +--------- +select + '&hist_global_ash' as global_ash + , '&hist_inst_id' as inst_id + , '&hist_plan_table' as plan_table + , '&hist_plan_table_stats' as plan_table_stats + , '&hist_second_id' as second_id + , '&hist_second_id_monitor' as second_id_monitor + , '&hist_sample_freq' as sample_freq + , '&hist_plan_function' as plan_function + , '&hist_par_fil' as par_fil + , '&hist_third_id' as third_id + , '&hist_sqltext' as sqltext + , '&hist_sqltext_join' as sqltext_join + , '&hist_sqltext_join_col' as sqltext_join_col + , '&hist_sql_monitor' as sql_monitor + , '&hist_sql_plan_monitor' as sql_plan_monitor +from + dual +where + '&ah' = 'HIST' +--------- +union all +--------- +select + '&mixed_global_ash' as global_ash + , '&mixed_inst_id' as inst_id + , '&mixed_plan_table' as plan_table + , '&mixed_plan_table_stats' as plan_table_stats + , '&mixed_second_id' as second_id + , '&mixed_second_id_monitor' as second_id_monitor + , '&mixed_sample_freq' as sample_freq + , '&mixed_plan_function' as plan_function + , '&mixed_par_fil' as par_fil + , '&mixed_third_id' as third_id + , '&mixed_sqltext' as sqltext + , '&mixed_sqltext_join' as sqltext_join + , '&mixed_sqltext_join_col' as sqltext_join_col + , '&mixed_sql_monitor' as sql_monitor + , '&mixed_sql_plan_monitor' as sql_plan_monitor +from + dual +where + '&ah' = 'MIXED' +--------- +union all +--------- +select + '&sash_global_ash' as global_ash + , '&sash_inst_id' as inst_id + , '&sash_plan_table' as plan_table + , '&sash_plan_table_stats' as plan_table_stats + , '&sash_second_id' as second_id + , '&sash_second_id_monitor' as second_id_monitor + , '&sash_sample_freq' as sample_freq + , '&sash_plan_function' as plan_function + , '&sash_par_fil' as par_fil + , '&sash_third_id' as third_id + , '&sash_sqltext' as sqltext + , '&sash_sqltext_join' as sqltext_join + , '&sash_sqltext_join_col' as sqltext_join_col + , '&sash_sql_monitor' as sql_monitor + , '&sash_sql_plan_monitor' as sql_plan_monitor +from + dual +where + '&ah' = 'SASH' +; + +/* Search for SQL_ID and related information in either ASH or Real-Time SQL Monitoring + for either this session (no SQL_ID specified) or a specified SID if a SID was specified */ + +/* One of the following statements will be short-circuited by the optimizer if the ASH / MONITOR condition is not true */ +/* So effectively only one of them will run, the other will not return any data (due to the GROUP BY clause) */ + +column sid_sql_id new_value sid_sql_id &debug_internalp.print +column sid_child_no new_value sid_child_no &debug_internalp.print +column sid_sql_exec_start new_value sid_sql_exec_start &debug_internalp.print +column sid_sql_exec_id new_value sid_sql_exec_id &debug_internalp.print + +select /* XPLAN_ASH GET_SESSION_SQL */ /*+ NO_STATEMENT_QUEUING */ +&_IF_ORA11_OR_HIGHER max(sql_id) keep (dense_rank last order by last_refresh_time, sql_exec_start, sql_exec_id nulls first) as sid_sql_id +&_IF_LOWER_THAN_ORA11 '0' as sid_sql_id +&_IF_ORA11_OR_HIGHER , cast(max(sql_&second_id_monitor) keep (dense_rank last order by last_refresh_time, sql_exec_start, sql_exec_id nulls first) as varchar2(30)) as sid_child_no +&_IF_LOWER_THAN_ORA11 , '0' as sid_child_no +&_IF_ORA11_OR_HIGHER , max(to_char(sql_exec_start, '&dm')) keep (dense_rank last order by last_refresh_time, sql_exec_start, sql_exec_id nulls first) as sid_sql_exec_start +&_IF_LOWER_THAN_ORA11 , '' as sid_sql_exec_start +&_IF_ORA11_OR_HIGHER , max(to_char(sql_exec_id, 'TM')) keep (dense_rank last order by last_refresh_time, sql_exec_start, sql_exec_id nulls first) as sid_sql_exec_id +&_IF_LOWER_THAN_ORA11 , to_char(null, 'TM') as sid_sql_exec_id +from +&_IF_ORA11_OR_HIGHER &sql_monitor +&_IF_LOWER_THAN_ORA11 dual +where +&_IF_LOWER_THAN_ORA11 1 = 2 +&_IF_ORA11_OR_HIGHER sid = coalesce(to_number(substr('&1', 5, case when instr('&1', '@') > 0 then instr('&1', '@') - 5 else length('&1') end)), to_number(USERENV('SID'))) +&_IF_ORA11_OR_HIGHER and inst_id = case when instr('&1', '@') > 0 then to_number(substr('&1', instr('&1', '@') + 1)) else userenv('instance') end +&_IF_ORA11_OR_HIGHER and px_qcsid is null +&_IF_ORA11_OR_HIGHER and '&so' = 'MONITOR' +&_IF_ORA11_OR_HIGHER and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +&_IF_ORA11_OR_HIGHER and ('&1' is null +&_IF_ORA11_OR_HIGHER or upper(substr('&1', 1, 4)) = 'SID=') +-- &_IF_ORA11_OR_HIGHER and last_refresh_time <= to_date('&dt_now', 'YYYY-MM-DD HH24:MI:SS') +group by + 1 +--------- +union all +--------- +select + max(sql_id) keep (dense_rank last order by sample_time nulls first) as sid_sql_id + , to_char(max(sql_&second_id) keep (dense_rank last order by sample_time nulls first), 'TM') as sid_child_no +&_IF_ORA11_OR_HIGHER , max(to_char(sql_exec_start, '&dm')) keep (dense_rank last order by sample_time nulls first) as sid_sql_exec_start +&_IF_LOWER_THAN_ORA11 , '' as sid_sql_exec_start +&_IF_ORA11_OR_HIGHER , max(to_char(sql_exec_id, 'TM')) keep (dense_rank last order by sample_time nulls first) as sid_sql_exec_id +&_IF_LOWER_THAN_ORA11 , to_char(null, 'TM') as sid_sql_exec_id +from + &global_ash +where + ((session_id = coalesce(to_number(substr('&1', 5, case when instr('&1', '@') > 0 then instr('&1', '@') - 5 else length('&1') end)), to_number(userenv('sid'))) +and &inst_id = case when instr('&1', '@') > 0 then to_number(substr('&1', instr('&1', '@') + 1)) else userenv('instance') end +and qc_session_id is null) +--and regexp_instr(regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c'), '^P[[:alnum:]][[:alnum:]][[:alnum:]]$') != 1) +or (qc_session_id = coalesce(to_number(substr('&1', 5, case when instr('&1', '@') > 0 then instr('&1', '@') - 5 else length('&1') end)), to_number(userenv('sid'))) +and qc_instance_id = case when instr('&1', '@') > 0 then to_number(substr('&1', instr('&1', '@') + 1)) else userenv('instance') end)) +--and regexp_instr(regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c'), '^P[[:alnum:]][[:alnum:]][[:alnum:]]$') = 1)) +and '&so' = 'ASH' +and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and ('&1' is null +or upper(substr('&1', 1, 4)) = 'SID=') +and sample_time <= to_date('&dt_now', 'YYYY-MM-DD HH24:MI:SS') +and sql_id is not null +&_IF_ORA11_OR_HIGHER and sql_exec_start is not null +&_IF_ORA11_OR_HIGHER and sql_exec_id is not null +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +group by + 1 +; + +undefine dt_now + +column sid_child_no_ new_value sid_child_no_ &debug_internalp.print + +select /* XPLAN_ASH CHILD_ADDRESS_TO_CHILD_NUMBER */ /*+ NO_STATEMENT_QUEUING */ + to_char(child_number, 'TM') as sid_child_no_ +from + gv$sql +where + sql_id = '&sid_sql_id' +and child_address = hextoraw('&sid_child_no') +and inst_id = case when instr('&1', '@') > 0 then to_number(substr('&1', instr('&1', '@') + 1)) else userenv('instance') end +and '&so' = 'MONITOR' +and upper('&second_id_monitor') = 'CHILD_ADDRESS' +and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and ('&1' is null +or upper(substr('&1', 1, 4)) = 'SID=') +and '&_IF_ORA11_OR_HIGHER' is null +; + +column sid_child_no_ clear + +-- In case nothing could be found in GV$SQL assign default child number as it doesn't matter anyway +select + coalesce('&sid_child_no_', '-1') as sid_child_no +from + dual +where + '&so' = 'MONITOR' +and upper('&second_id_monitor') = 'CHILD_ADDRESS' +and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and ('&1' is null +or upper(substr('&1', 1, 4)) = 'SID=') +and '&_IF_ORA11_OR_HIGHER' is null +; + +undefine sid_child_no_ + +--column sid_sql_id new_value sid_sql_id +--column sid_child_no new_value sid_child_no +--column sid_sql_exec_start new_value sid_sql_exec_start +--column sid_sql_exec_id new_value sid_sql_exec_id + +/* Get SQL details from GV$SESSION if a SID is specified */ +select /* XPLAN_ASH GET_SESSION_DETAILS */ /*+ NO_STATEMENT_QUEUING */ +&_IF_ORA11_OR_HIGHER nvl2(sql_exec_start, sql_id, prev_sql_id) as sid_sql_id +&_IF_LOWER_THAN_ORA11 nvl2(sql_id, sql_id, prev_sql_id) as sid_sql_id +&_IF_ORA11_OR_HIGHER , to_char(nvl2(sql_exec_start, sql_child_number, prev_child_number), 'TM') as sid_child_no +&_IF_LOWER_THAN_ORA11 , to_char(nvl2(sql_id, sql_child_number, prev_child_number), 'TM') as sid_child_no +&_IF_ORA11_OR_HIGHER , to_char(nvl2(sql_exec_start, sql_exec_start, prev_exec_start), '&dm') as sid_sql_exec_start +&_IF_LOWER_THAN_ORA11 , '' as sid_sql_exec_start +&_IF_ORA11_OR_HIGHER , to_char(nvl2(sql_exec_start, sql_exec_id, prev_exec_id), 'TM') as sid_sql_exec_id +&_IF_LOWER_THAN_ORA11 , to_char(null, 'TM') as sid_sql_exec_id +from + gv$session +where + upper(substr('&1', 1, 4)) = 'SID=' +/* +and sid = to_number(substr('&1', case when instr('&1', ',') > 0 then instr('&1', ',') + 1 else 5 end)) +and regexp_like(trim(substr('&1', case when instr('&1', ',') > 0 then instr('&1', ',') + 1 else 5 end)), '^\d+$') +and inst_id = case when instr('&1', ',') > 0 then to_number(substr('&1', 5, instr('&1', ',') - 5)) else userenv('instance') end +and (instr('&1', ',') < 1 or regexp_like(trim(substr('&1', 5, instr('&1', ',') - 5)), '^\d+$')) +*/ +and sid = to_number(substr('&1', 5, case when instr('&1', '@') > 0 then instr('&1', '@') - 5 else length('&1') end)) +and regexp_like(trim(substr('&1', 5, case when instr('&1', '@') > 0 then instr('&1', '@') - 5 else length('&1') end)), '^\d+$') +and inst_id = case when instr('&1', '@') > 0 then to_number(substr('&1', instr('&1', '@') + 1)) else userenv('instance') end +and (instr('&1', '@') < 1 or regexp_like(trim(substr('&1', instr('&1', '@') + 1)), '^\d+$')) +-- Only run this if ASH options are not specified +and not (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +; + +column last_exec_second_id new_value last_exec_second_id &debug_internalp.print +column instance_id new_value plan_inst_id &debug_internalp.print + +/* Identify the CHILD_NUMBER / PLAN_HASH_VALUE if first parameter identifies a SQL_ID and second parameter is null and ASH / Real-Time SQL Monitoring should be queried */ + +/* One of the following statements will be short-circuited by the optimizer if the ASH / MONITOR condition is not true */ +/* So effectively only one of them will run, the other will not return any data (due to the GROUP BY clause) */ + +select /* XPLAN_ASH IDENTIFY_SECOND_ID */ /*+ NO_STATEMENT_QUEUING */ +&_IF_ORA11_OR_HIGHER cast(max(sql_&second_id_monitor) keep (dense_rank last order by sql_exec_start, sql_exec_id nulls first) as varchar2(30)) as last_exec_second_id +&_IF_LOWER_THAN_ORA11 '0' as last_exec_second_id +&_IF_ORA11_OR_HIGHER , to_char(cast(max(inst_id) keep (dense_rank last order by sql_exec_start, sql_exec_id nulls first) as varchar2(30)), 'TM') as instance_id +&_IF_LOWER_THAN_ORA11 , '0' as instance_id +from +&_IF_ORA11_OR_HIGHER &sql_monitor +&_IF_LOWER_THAN_ORA11 dual +where +&_IF_LOWER_THAN_ORA11 1 = 2 +&_IF_ORA11_OR_HIGHER sql_id = '&1' +&_IF_ORA11_OR_HIGHER and px_qcsid is null +&_IF_ORA11_OR_HIGHER and '&so' = 'MONITOR' +&_IF_ORA11_OR_HIGHER and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +&_IF_ORA11_OR_HIGHER and sql_exec_start = nvl(to_date('&2', '&dm'), sql_exec_start) +&_IF_ORA11_OR_HIGHER and sql_exec_id = nvl(trim('&3'), sql_exec_id) +&_IF_ORA11_OR_HIGHER and '&1' is not null +&_IF_ORA11_OR_HIGHER and upper(substr('&1', 1, 4)) != 'SID=' +&_IF_ORA11_OR_HIGHER and '&8' is null +group by + 1 +--------- +union all +--------- +select +&_IF_ORA11_OR_HIGHER to_char(max(sql_&second_id) keep (dense_rank last order by sql_exec_start, sql_exec_id, sample_time nulls first), 'TM') as last_exec_second_id +&_IF_LOWER_THAN_ORA11 to_char(max(sql_&second_id) keep (dense_rank first order by sample_time - to_timestamp('&2 ', '&dm') nulls last), 'TM') as last_exec_second_id +&_IF_ORA11_OR_HIGHER , to_char(cast(max(case when qc_instance_id is not null then qc_instance_id else &inst_id end) keep (dense_rank last order by sql_exec_start, sql_exec_id, sample_time nulls first) as varchar2(30)), 'TM') as instance_id +&_IF_LOWER_THAN_ORA11 , to_char(cast(max(case when qc_instance_id is not null then qc_instance_id else &inst_id end) keep (dense_rank first order by sample_time - to_timestamp('&2 ', '&dm') nulls last) as varchar2(30)), 'TM') as instance_id +from + &global_ash +where + sql_id = '&1' +and '&so' = 'ASH' +and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +&_IF_ORA11_OR_HIGHER and sql_exec_start = nvl(to_date('&2', '&dm'), sql_exec_start) +&_IF_ORA11_OR_HIGHER and sql_exec_id = nvl(trim('&3'), sql_exec_id) +&_IF_LOWER_THAN_ORA11 and sample_time between to_timestamp('&2', '&dm') and to_timestamp('&3', '&dm') + interval '1' second +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +and '&1' is not null +and upper(substr('&1', 1, 4)) != 'SID=' +and '&8' is null +group by + 1 +; + +select + nvl('&plan_inst_id', sys_context('USERENV', 'INSTANCE')) as instance_id +from + dual; + +column instance_id clear + +/* Turn the Real-Time SQL Monitoring CHILD_ADDRESS into a CHILD_NUMBER */ + +column last_exec_second_id_ new_value last_exec_second_id_ &debug_internalp.print + +select /* XPLAN_ASH CHILD_ADDRESS_TO_CHILD_NUMBER */ /*+ NO_STATEMENT_QUEUING */ + to_char(child_number, 'TM') as last_exec_second_id_ +from + gv$sql +where + sql_id = '&1' +and child_address = hextoraw('&last_exec_second_id') +and inst_id = &plan_inst_id +and '&so' = 'MONITOR' +and upper('&second_id_monitor') = 'CHILD_ADDRESS' +and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and '&1' is not null +and upper(substr('&1', 1, 4)) != 'SID=' +and '&8' is null +and '&_IF_ORA11_OR_HIGHER' is null +; + +column last_exec_second_id_ clear + +-- In case nothing could be found in GV$SQL assign default child number as it doesn't matter anyway +select + coalesce('&last_exec_second_id_', '-1') as last_exec_second_id +from + dual +where + '&so' = 'MONITOR' +and upper('&second_id_monitor') = 'CHILD_ADDRESS' +and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and '&1' is not null +and upper(substr('&1', 1, 4)) != 'SID=' +and '&8' is null +and '&_IF_ORA11_OR_HIGHER' is null +; + +undefine last_exec_second_id_ + +column si new_value si &debug_internalp.print +column cn new_value cn &debug_internalp.print + +/* Use passed parameters else refer to previous SQL_ID / CHILD_NUMBER or SQL details of given SID */ +select + coalesce('&sid_sql_id', '&1', '&prev_sql_id') as si + , coalesce('&sid_child_no', nvl2('&1', coalesce('&8', '&last_exec_second_id', '0'), coalesce('&8', '&prev_cn', '0'))) as cn +from + dual +; + +--select +-- coalesce('&sid_sql_id', '&1') as si +-- , coalesce('&sid_child_no', nvl2('&1', coalesce('&8', '&last_exec_second_id', '0'), coalesce('&8', '0'))) as cn +--from +-- dual +--; + +column c_pid new_value c_pid &debug_internalp.print +column c_ord new_value c_ord &debug_internalp.print +column c_act new_value c_act &debug_internalp.print +column c_a_time_self new_value c_a_time_self &debug_internalp.print +column c_lio_self new_value c_lio_self &debug_internalp.print +column c_reads_self new_value c_reads_self &debug_internalp.print +column c_writes_self new_value c_writes_self &debug_internalp.print +column c_a_time_self_graph new_value c_a_time_self_graph &debug_internalp.print +column c_lio_self_graph new_value c_lio_self_graph &debug_internalp.print +column c_reads_self_graph new_value c_reads_self_graph &debug_internalp.print +column c_writes_self_graph new_value c_writes_self_graph &debug_internalp.print +column c_lio_ratio new_value c_lio_ratio &debug_internalp.print +column c_tcf_graph new_value c_tcf_graph &debug_internalp.print +column c_e_rows_times_start new_value c_e_rows_times_start &debug_internalp.print +column c_start_active new_value c_start_active &debug_internalp.print +column c_duration_secs new_value c_duration_secs &debug_internalp.print +column c_duration_secs_t new_value c_duration_secs_t &debug_internalp.print +column c_time_active_graph new_value c_time_active_graph &debug_internalp.print +column c_procs new_value c_procs &debug_internalp.print +column c_procs_graph new_value c_procs_graph &debug_internalp.print +column c_activity_graph new_value c_activity_graph &debug_internalp.print +column c_activity new_value c_activity &debug_internalp.print +column c_average_as_graph new_value c_average_as_graph &debug_internalp.print +column c_median_as_graph new_value c_median_as_graph &debug_internalp.print +column c_average_as_t_graph new_value c_average_as_t_graph &debug_internalp.print +column c_execs new_value c_execs &debug_internalp.print +column c_a_rows_m new_value c_a_rows_m &debug_internalp.print +column c_pga new_value c_pga &debug_internalp.print +column c_temp new_value c_temp &debug_internalp.print +column c_io_read new_value c_io_read &debug_internalp.print +column c_io_write new_value c_io_write &debug_internalp.print +column c_co new_value c_co &debug_internalp.print +column c_io_read_req new_value c_io_read_req &debug_internalp.print +column c_io_write_req new_value c_io_write_req &debug_internalp.print + +-- Determine which columns to hide +-- if the column string contains a minus +select + case when instr(col_list, ',PID,') > 0 or instr(defcol_list, ',PID,') < 1 then null else '1' end as c_pid + , case when instr(col_list, ',ORD,') > 0 or instr(defcol_list, ',ORD,') < 1 then null else '1' end as c_ord + , case when instr(col_list, ',ACT,') > 0 or instr(defcol_list, ',ACT,') < 1 then null else '1' end as c_act + , case when instr(col_list, ',A_TIME,') > 0 or instr(defcol_list, ',A_TIME,') < 1 then null else '1' end as c_a_time_self + , case when instr(col_list, ',LIO,') > 0 or instr(defcol_list, ',LIO,') < 1 then null else '1' end as c_lio_self + , case when instr(col_list, ',READS,') > 0 or instr(defcol_list, ',READS,') < 1 then null else '1' end as c_reads_self + , case when instr(col_list, ',WRITES,') > 0 or instr(defcol_list, ',WRITES,') < 1 then null else '1' end as c_writes_self + , case when instr(col_list, ',A_TIME_GRF,') > 0 or instr(defcol_list, ',A_TIME_GRF,') < 1 then null else '1' end as c_a_time_self_graph + , case when instr(col_list, ',LIO_GRF,') > 0 or instr(defcol_list, ',LIO_GRF,') < 1 then null else '1' end as c_lio_self_graph + , case when instr(col_list, ',REA_GRF,') > 0 or instr(defcol_list, ',REA_GRF,') < 1 then null else '1' end as c_reads_self_graph + , case when instr(col_list, ',WRI_GRF,') > 0 or instr(defcol_list, ',WRI_GRF,') < 1 then null else '1' end as c_writes_self_graph + , case when instr(col_list, ',LIO_RATIO,') > 0 or instr(defcol_list, ',LIO_RATIO,') < 1 then null else '1' end as c_lio_ratio + , case when instr(col_list, ',TCF_GRF,') > 0 or instr(defcol_list, ',TCF_GRF,') < 1 then null else '1' end as c_tcf_graph + , case when instr(col_list, ',E_ROWS_T,') > 0 or instr(defcol_list, ',E_ROWS_T,') < 1 then null else '1' end as c_e_rows_times_start + , case when instr(col_list, ',START,') > 0 or instr(defcol_list, ',START,') < 1 then null else '1' end as c_start_active + , case when instr(col_list, ',DUR,') > 0 or instr(defcol_list, ',DUR,') < 1 then null else '1' end as c_duration_secs + , case when instr(col_list, ',DUR_T,') > 0 or instr(defcol_list, ',DUR_T,') < 1 then null else '1' end as c_duration_secs_t + , case when instr(col_list, ',TIME_ACT_GRF,') > 0 or instr(defcol_list, ',TIME_ACT_GRF,') < 1 then null else '1' end as c_time_active_graph + , case when instr(col_list, ',PROCS,') > 0 or instr(defcol_list, ',PROCS,') < 1 then null else '1' end as c_procs + , case when instr(col_list, ',PROCS_GRF,') > 0 or instr(defcol_list, ',PROCS_GRF,') < 1 then null else '1' end as c_procs_graph + , case when instr(col_list, ',ACT_GRF,') > 0 or instr(defcol_list, ',ACT_GRF,') < 1 then null else '1' end as c_activity_graph + , case when instr(col_list, ',ACT,') > 0 or instr(defcol_list, ',ACT,') < 1 then null else '1' end as c_activity + , case when instr(col_list, ',AAS_GRF,') > 0 or instr(defcol_list, ',AAS_GRF,') < 1 then null else '1' end as c_average_as_graph + , case when instr(col_list, ',MAS_GRF,') > 0 or instr(defcol_list, ',MAS_GRF,') < 1 then null else '1' end as c_median_as_graph + , case when instr(col_list, ',AAS_T_GRF,') > 0 or instr(defcol_list, ',AAS_T_GRF,') < 1 then null else '1' end as c_average_as_t_graph + , case when instr(col_list, ',EXECS,') > 0 or instr(defcol_list, ',EXECS,') < 1 then null else '1' end as c_execs + , case when instr(col_list, ',A_ROWS_M,') > 0 or instr(defcol_list, ',A_ROWS_M,') < 1 then null else '1' end as c_a_rows_m + , case when instr(col_list, ',PGA,') > 0 or instr(defcol_list, ',PGA,') < 1 then null else '1' end as c_pga + , case when instr(col_list, ',TEMP,') > 0 or instr(defcol_list, ',TEMP,') < 1 then null else '1' end as c_temp + , case when instr(col_list, ',IO_READ,') > 0 or instr(defcol_list, ',IO_READ,') < 1 then null else '1' end as c_io_read + , case when instr(col_list, ',IO_WRITE,') > 0 or instr(defcol_list, ',IO_WRITE,') < 1 then null else '1' end as c_io_write + , case when instr(col_list, ',CO,') > 0 or instr(defcol_list, ',CO,') < 1 then null else '1' end as c_co + , case when instr(col_list, ',IO_RREQ,') > 0 or instr(defcol_list, ',IO_RREQ,') < 1 then null else '1' end as c_io_read_req + , case when instr(col_list, ',IO_WREQ,') > 0 or instr(defcol_list, ',IO_WREQ,') < 1 then null else '1' end as c_io_write_req +from + ( + select + replace('&co', '-', '') as col_list, ',' || upper(trim(both ',' from '&default_cols')) || ',' as defcol_list + from + dual + ) +where + instr('&co', '-') > 0 +and instr('&co', '+') < 1 +--------- +union all +--------- +-- Determine columns to show +select + case when instr('&co', ',PID,') > 0 then '1' end as c_pid + , case when instr('&co', ',ORD,') > 0 then '1' end as c_ord + , case when instr('&co', ',ACT,') > 0 then '1' end as c_act + , case when instr('&co', ',A_TIME,') > 0 then '1' end as c_a_time_self + , case when instr('&co', ',LIO,') > 0 then '1' end as c_lio_self + , case when instr('&co', ',READS,') > 0 then '1' end as c_reads_self + , case when instr('&co', ',WRITES,') > 0 then '1' end as c_writes_self + , case when instr('&co', ',A_TIME_GRF,') > 0 then '1' end as c_a_time_self_graph + , case when instr('&co', ',LIO_GRF,') > 0 then '1' end as c_lio_self_graph + , case when instr('&co', ',REA_GRF,') > 0 then '1' end as c_reads_self_graph + , case when instr('&co', ',WRI_GRF,') > 0 then '1' end as c_writes_self_graph + , case when instr('&co', ',LIO_RATIO,') > 0 then '1' end as c_lio_ratio + , case when instr('&co', ',TCF_GRF,') > 0 then '1' end as c_tcf_graph + , case when instr('&co', ',E_ROWS_T,') > 0 then '1' end as c_e_rows_times_start + , case when instr('&co', ',START,') > 0 then '1' end as c_start_active + , case when instr('&co', ',DUR,') > 0 then '1' end as c_duration_secs + , case when instr('&co', ',DUR_T,') > 0 then '1' end as c_duration_secs_t + , case when instr('&co', ',TIME_ACT_GRF,') > 0 then '1' end as c_time_active_graph + , case when instr('&co', ',PROCS,') > 0 then '1' end as c_procs + , case when instr('&co', ',PROCS_GRF,') > 0 then '1' end as c_procs_graph + , case when instr('&co', ',ACT_GRF,') > 0 then '1' end as c_activity_graph + , case when instr('&co', ',ACT,') > 0 then '1' end as c_activity + , case when instr('&co', ',AAS_GRF,') > 0 then '1' end as c_average_as_graph + , case when instr('&co', ',MAS_GRF,') > 0 then '1' end as c_median_as_graph + , case when instr('&co', ',AAS_T_GRF,') > 0 then '1' end as c_average_as_t_graph + , case when instr('&co', ',EXECS,') > 0 then '1' end as c_execs + , case when instr('&co', ',A_ROWS_M,') > 0 then '1' end as c_a_rows_m + , case when instr('&co', ',PGA,') > 0 then '1' end as c_pga + , case when instr('&co', ',TEMP,') > 0 then '1' end as c_temp + , case when instr('&co', ',IO_READ,') > 0 then '1' end as c_io_read + , case when instr('&co', ',IO_WRITE,') > 0 then '1' end as c_io_write + , case when instr('&co', ',CO,') > 0 then '1' end as c_co + , case when instr('&co', ',IO_RREQ,') > 0 then '1' end as c_io_read_req + , case when instr('&co', ',IO_WREQ,') > 0 then '1' end as c_io_write_req +from + dual +where + instr('&co', '-') < 1 +and instr('&co', '+') < 1 +--------- +union all +--------- +-- Determine columns to show +select + case when instr(col_list, ',PID,') > 0 then '1' end as c_pid + , case when instr(col_list, ',ORD,') > 0 then '1' end as c_ord + , case when instr(col_list, ',ACT,') > 0 then '1' end as c_act + , case when instr(col_list, ',A_TIME,') > 0 then '1' end as c_a_time_self + , case when instr(col_list, ',LIO,') > 0 then '1' end as c_lio_self + , case when instr(col_list, ',READS,') > 0 then '1' end as c_reads_self + , case when instr(col_list, ',WRITES,') > 0 then '1' end as c_writes_self + , case when instr(col_list, ',A_TIME_GRF,') > 0 then '1' end as c_a_time_self_graph + , case when instr(col_list, ',LIO_GRF,') > 0 then '1' end as c_lio_self_graph + , case when instr(col_list, ',REA_GRF,') > 0 then '1' end as c_reads_self_graph + , case when instr(col_list, ',WRI_GRF,') > 0 then '1' end as c_writes_self_graph + , case when instr(col_list, ',LIO_RATIO,') > 0 then '1' end as c_lio_ratio + , case when instr(col_list, ',TCF_GRF,') > 0 then '1' end as c_tcf_graph + , case when instr(col_list, ',E_ROWS_T,') > 0 then '1' end as c_e_rows_times_start + , case when instr(col_list, ',START,') > 0 then '1' end as c_start_active + , case when instr(col_list, ',DUR,') > 0 then '1' end as c_duration_secs + , case when instr(col_list, ',DUR_T,') > 0 then '1' end as c_duration_secs_t + , case when instr(col_list, ',TIME_ACT_GRF,') > 0 then '1' end as c_time_active_graph + , case when instr(col_list, ',PROCS,') > 0 then '1' end as c_procs + , case when instr(col_list, ',PROCS_GRF,') > 0 then '1' end as c_procs_graph + , case when instr(col_list, ',ACT_GRF,') > 0 then '1' end as c_activity_graph + , case when instr(col_list, ',ACT,') > 0 then '1' end as c_activity + , case when instr(col_list, ',AAS_GRF,') > 0 then '1' end as c_average_as_graph + , case when instr(col_list, ',MAS_GRF,') > 0 then '1' end as c_median_as_graph + , case when instr(col_list, ',AAS_T_GRF,') > 0 then '1' end as c_average_as_t_graph + , case when instr(col_list, ',EXECS,') > 0 then '1' end as c_execs + , case when instr(col_list, ',A_ROWS_M,') > 0 then '1' end as c_a_rows_m + , case when instr(col_list, ',PGA,') > 0 then '1' end as c_pga + , case when instr(col_list, ',TEMP,') > 0 then '1' end as c_temp + , case when instr(col_list, ',IO_READ,') > 0 then '1' end as c_io_read + , case when instr(col_list, ',IO_WRITE,') > 0 then '1' end as c_io_write + , case when instr(col_list, ',CO,') > 0 then '1' end as c_co + , case when instr(col_list, ',IO_RREQ,') > 0 then '1' end as c_io_read_req + , case when instr(col_list, ',IO_WREQ,') > 0 then '1' end as c_io_write_req +from + ( + select + ',' || upper(trim(both ',' from '&default_cols')) || replace('&co', '+', '') as col_list + from + dual + ) +where + instr('&co', '-') < 1 +and instr('&co', '+') > 0 +; + +column last new_value last &debug_internalp.print + +/* Last or all execution for Rowsource execution statistics */ +select + case + when instr('&fo', 'LAST') > 0 + then 'last_' + end as last +from + dual +; + +column plan_table_name new_value plan_table_name &debug_internalp.print + +/* Get plan info from GV$SQL_PLAN_STATISTICS_ALL or GV$SQL_PLAN */ +select + case + when instr('&fo', 'STATS') > 0 + then '&plan_table_stats' + else '&plan_table' + end as plan_table_name +from + dual +; + +column child_ad new_value child_ad &debug_internalp.print + +-- Get child address for querying GV$SQL_MONITOR +select /* XPLAN_ASH CHILD_NUMBER_TO_CHILD_ADDRESS */ /*+ NO_STATEMENT_QUEUING */ + rawtohex(child_address) as child_ad +from + gv$sql +where + sql_id = '&si' +and child_number = &cn +and inst_id = &plan_inst_id +and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and coalesce('&sid_sql_exec_start', '&2') is null and '&1' is not null +and upper('&second_id_monitor') = 'CHILD_ADDRESS' +; + +column last_exec_start new_value last_exec_start &debug_internalp.print +column last_exec_id new_value last_exec_id &debug_internalp.print + +/* Search for the last execution of the statement if no SQL_EXEC_START is specified and no other option provides the information */ + +/* One of the following statements will be short-circuited by the optimizer if the ASH / MONITOR condition is not true */ +/* So effectively only one of them will run, the other will not return any data (due to the GROUP BY clause) */ + +/* This statement is effectively turned into a NOOP in versions below 11g */ +select /* XPLAN_ASH SEARCH_LAST_EXECUTION */ /*+ NO_STATEMENT_QUEUING */ +&_IF_ORA11_OR_HIGHER to_char(max(sql_exec_start), '&dm') as last_exec_start +&_IF_ORA11_OR_HIGHER , to_char(max(sql_exec_id) keep (dense_rank last order by sql_exec_start nulls first), 'TM') as last_exec_id +&_IF_LOWER_THAN_ORA11 '' as last_exec_start +&_IF_LOWER_THAN_ORA11 , '0' as last_exec_id +from +&_IF_ORA11_OR_HIGHER &sql_monitor +&_IF_LOWER_THAN_ORA11 dual +where +&_IF_LOWER_THAN_ORA11 1 = 2 +&_IF_ORA11_OR_HIGHER sql_id = '&si' +&_IF_ORA11_OR_HIGHER and sql_&second_id_monitor = case when upper('&second_id_monitor') = 'CHILD_ADDRESS' then '&child_ad' else '&cn' end +&_IF_ORA11_OR_HIGHER and px_qcsid is null +&_IF_ORA11_OR_HIGHER and '&so' = 'MONITOR' +&_IF_ORA11_OR_HIGHER and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +&_IF_ORA11_OR_HIGHER and coalesce('&sid_sql_exec_start', '&2') is null and '&1' is not null +and '&_IF_ORA11_OR_HIGHER' is null +group by + 1 +--------- +union all +--------- +select +&_IF_ORA11_OR_HIGHER to_char(max(sql_exec_start), '&dm') as last_exec_start +&_IF_ORA11_OR_HIGHER , to_char(max(sql_exec_id) keep (dense_rank last order by sql_exec_start nulls first), 'TM') as last_exec_id +&_IF_LOWER_THAN_ORA11 '' as last_exec_start +&_IF_LOWER_THAN_ORA11 , '0' as last_exec_id +from +&_IF_ORA11_OR_HIGHER &global_ash ash +&_IF_LOWER_THAN_ORA11 dual +where +&_IF_LOWER_THAN_ORA11 1 = 2 +&_IF_ORA11_OR_HIGHER sql_id = '&si' +&_IF_ORA11_OR_HIGHER and sql_&second_id = &cn +&_IF_ORA11_OR_HIGHER and '&so' = 'ASH' +&_IF_ORA11_OR_HIGHER and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +&_IF_ORA11_OR_HIGHER and coalesce('&sid_sql_exec_start', '&2') is null and '&1' is not null +and '&_IF_ORA11_OR_HIGHER' is null +group by + 1 +; + +column ls new_value ls &debug_internalp.print +column li new_value li &debug_internalp.print + +/* Use passed parameters else refer to last execution found / SQL details of given SID */ +select + coalesce('&sid_sql_exec_start', '&2', case when '&1' is null then '&prev_sql_exec_start' end, '&last_exec_start') as ls + -- , coalesce('&sid_sql_exec_id', '&3', '&last_exec_id', '-1') as li + , case + when '&sid_sql_exec_start' is not null + then '&sid_sql_exec_id' + when '&2' is not null + then nvl(trim('&3'), '-1') + when '&1' is null + then '&prev_sql_exec_id' + else coalesce('&last_exec_id', '-1') + end as li +from + dual +; + +--select +-- coalesce('&sid_sql_exec_start', '&2', '&last_exec_start') as ls +-- -- , coalesce('&sid_sql_exec_id', '&3', '&last_exec_id', '-1') as li +-- , case +-- when '&sid_sql_exec_start' is not null +-- then '&sid_sql_exec_id' +-- when '&2' is not null +-- then nvl(trim('&3'), '-1') +-- else coalesce('&last_exec_id', '-1') +-- end as li +--from +-- dual +--; + +/* Determine any additional filters on the SQL_TEXT views for remote RAC executions */ +variable out_third_id varchar2(100) + +exec execute immediate 'select &third_id as add_filter from dual' into :out_third_id using '&plan_inst_id' + +column third_id_sqltext new_value third_id_sqltext &debug_internalp.print + +select + :out_third_id as third_id_sqltext +from + dual; + +column third_id_sqltext clear + +/* Define the actual query on ASH for samples */ +/* Not all samples for a SQL execution are marked with SQL_EXEC_START / SQL_EXEC_ID */ +/* So in order to include those samples a little bit of logic is required */ +/* This logic here is inspired by Real-Time SQL Monitoring */ +/* In order to support other ASH sources this query needs to be adjusted along with + the parameters that define the valid ASH samples */ +/* This query here restricts the ASH data to the session information identified */ +/* The actual ASH queries will use the clauses determined here along with the SQL_ID plus start / end sample time */ +column pred1 new_value ash_pred1 &debug_internalp.print +column pred2 new_value ash_pred2 &debug_internalp.print +column ln_pred1 new_value ash_ln_pred1 &debug_internalp.print +column ln_pred2 new_value ash_ln_pred2 &debug_internalp.print +column instance_id new_value plan_inst_id &debug_internalp.print +column min_sample_time new_value ash_min_sample_time &debug_internalp.print +column max_sample_time new_value ash_max_sample_time &debug_internalp.print +column current_time new_value ash_current_time &debug_internalp.print + +select /* XPLAN_ASH DEFINE_ASH_SAMPLES */ /*+ NO_STATEMENT_QUEUING */ + pred1 + , pred2 + , ln_pred1 + , ln_pred2 + , instance_id + , to_char(sql_exec_start, 'YYYY-MM-DD HH24:MI:SS') as min_sample_time + , to_char(max_sample_time, 'YYYY-MM-DD HH24:MI:SS') as max_sample_time + , to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') as current_time +from + ( + select + max_sample_time + /* For versions that support the GV$() special table function we can actually refer to the instance where the execution was started */ + /* For prior versions this is deliberately limited to the current instance to get at least a consistent behaviour */ + /* Although this might mean either getting no plan at all or in worst case getting a wrong plan from the local Library Cache */ +&_IF_ORA11202_OR_HIGHER , to_char(case when qc_instance_id is not null then qc_instance_id else instance_id end, 'TM') as instance_id +&_IF_LOWER_THAN_ORA11202 , sys_context('USERENV', 'INSTANCE') as instance_id + , '((ash.&inst_id = ' || to_char(nvl(case when qc_instance_id is not null then qc_instance_id else instance_id end, 0), 'TM') || + ' and ash.session_id = ' || to_char(nvl(case when qc_instance_id is not null then qc_session_id else session_id end, -1), 'TM') || +&_IF_ORA11_OR_HIGHER case when (qc_instance_id is not null and qc_session_serial# is not null) or (qc_instance_id is null and session_serial# is not null) then ' and ash.session_serial# = ' || to_char(case when qc_instance_id is not null then qc_session_serial# else session_serial# end, 'TM') end || + ')' as pred1 + , 'or (ash.qc_instance_id = ' || to_char(nvl(case when qc_instance_id is not null then qc_instance_id else instance_id end, 0), 'TM') || + ' and ash.qc_session_id = ' || to_char(nvl(case when qc_instance_id is not null then qc_session_id else session_id end, -1), 'TM') || +&_IF_ORA11_OR_HIGHER case when qc_instance_id is not null and qc_session_serial# is not null then ' and ash.qc_session_serial# = ' || to_char(case when qc_instance_id is not null then qc_session_serial# else session_serial# end, 'TM') end || + '))' as pred2 + , '((lnnvl(ash.&inst_id = ' || to_char(nvl(case when qc_instance_id is not null then qc_instance_id else instance_id end, 0), 'TM') || ')' || + ' or lnnvl(ash.session_id = ' || to_char(nvl(case when qc_instance_id is not null then qc_session_id else session_id end, -1), 'TM') || ')' || +&_IF_ORA11_OR_HIGHER case when (qc_instance_id is not null and qc_session_serial# is not null) or (qc_instance_id is null and session_serial# is not null) then ' or lnnvl(ash.session_serial# = ' || to_char(case when qc_instance_id is not null then qc_session_serial# else session_serial# end, 'TM') || ')' end || + ')' as ln_pred1 + , 'and (lnnvl(ash.qc_instance_id = ' || to_char(nvl(case when qc_instance_id is not null then qc_instance_id else instance_id end, 0), 'TM') || ')' || + ' or lnnvl(ash.qc_session_id = ' || to_char(nvl(case when qc_instance_id is not null then qc_session_id else session_id end, -1), 'TM') || ')' || +&_IF_ORA11_OR_HIGHER case when qc_instance_id is not null and qc_session_serial# is not null then ' or lnnvl(ash.qc_session_serial# = ' || to_char(case when qc_instance_id is not null then qc_session_serial# else session_serial# end, 'TM') || ')' end || + '))' as ln_pred2 + , sql_exec_start + from + ( + select + min(sql_exec_start) as sql_exec_start + , max(cast(sample_time as date)) as max_sample_time +&_IF_ORA11_OR_HIGHER , max(instance_id) keep (dense_rank last order by cnt, sample_time nulls first) as instance_id +&_IF_LOWER_THAN_ORA11 , max(instance_id) keep (dense_rank first order by sample_time - to_timestamp('&ls ', '&dm') nulls last) as instance_id +&_IF_ORA11_OR_HIGHER , max(session_id) keep (dense_rank last order by cnt, sample_time nulls first) as session_id +&_IF_LOWER_THAN_ORA11 , max(session_id) keep (dense_rank first order by sample_time - to_timestamp('&ls ', '&dm') nulls last) as session_id +&_IF_ORA11_OR_HIGHER , max(session_serial#) keep (dense_rank last order by cnt, sample_time nulls first) as session_serial# +&_IF_LOWER_THAN_ORA11 , max(session_serial#) keep (dense_rank first order by sample_time - to_timestamp('&ls ', '&dm') nulls last) as session_serial# +&_IF_ORA11_OR_HIGHER , max(qc_instance_id) keep (dense_rank last order by cnt, sample_time nulls first) as qc_instance_id +&_IF_LOWER_THAN_ORA11 , max(qc_instance_id) keep (dense_rank first order by sample_time - to_timestamp('&ls ', '&dm') nulls last) as qc_instance_id +&_IF_ORA11_OR_HIGHER , max(qc_session_id) keep (dense_rank last order by cnt, sample_time nulls first) as qc_session_id +&_IF_LOWER_THAN_ORA11 , max(qc_session_id) keep (dense_rank first order by sample_time - to_timestamp('&ls ', '&dm') nulls last) as qc_session_id +&_IF_ORA11_OR_HIGHER , max(qc_session_serial#) keep (dense_rank last order by cnt, sample_time nulls first) as qc_session_serial# +&_IF_LOWER_THAN_ORA11 , null as qc_session_serial# + from + ( + select +&_IF_ORA11_OR_HIGHER sql_exec_start +&_IF_LOWER_THAN_ORA11 case when coalesce('&find_min_sample_10g', 'NO') = 'YES' then cast(sample_time as date) else to_date('&ls', '&dm') end as sql_exec_start + , sample_time + , &inst_id as instance_id + , session_id + , session_serial# + , qc_instance_id + , qc_session_id +&_IF_ORA11_OR_HIGHER , qc_session_serial# + /* There seem to be sometimes inconsistencies in the ASH data (spurious serial#) therefore with 11g versions the "most occuring" session data will be used */ + , count(*) over (partition by + case when qc_instance_id is not null + then qc_instance_id || ',' || qc_session_id +&_IF_ORA11_OR_HIGHER || ',' || qc_session_serial# + else &inst_id || ',' || session_id || ',' || session_serial# end) as cnt + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and sql_exec_start = to_date('&ls', '&dm') +&_IF_ORA11_OR_HIGHER and sql_exec_id = &li +&_IF_LOWER_THAN_ORA11 and sample_time >= to_timestamp('&ls', '&dm') and sample_time < to_timestamp('&li', '&dm') + interval '1' second +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + ) + ) + ) +; + +select + nvl('&plan_inst_id', sys_context('USERENV', 'INSTANCE')) as instance_id +from + dual; + +column pred1 clear +column pred2 clear +column ln_pred1 clear +column ln_pred2 clear +column instance_id clear +column min_sample_time clear +column max_sample_time clear +column current_time clear + +/* In case of pre-11g use the min sample time found as SQL_EXEC_START from here on */ +/* See the description of "find_min_sample_10g" in the configuration section for more info */ + +select + to_char(to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'), '&dm') as ls +from + dual +where + coalesce('&find_min_sample_10g', 'NO') = 'YES' +and '&_IF_LOWER_THAN_ORA11' is null; + +/* Determine any additional filters on the plan tables for remote RAC executions */ +variable out_third_id varchar2(100) + +exec execute immediate 'select &third_id as add_filter from dual' into :out_third_id using '&plan_inst_id' + +column third_id new_value third_id &debug_internalp.print + +select + :out_third_id as third_id +from + dual; + +column third_id clear + +/* Check if a plan can be found */ +column plan_exists new_value plan_exists &debug_internalp.print + +select + max(sql_id) as plan_exists +from + &plan_table p +where + p.sql_id = '&si' +and p.&second_id = &cn +and &third_id +and rownum <= 1 +; + +------------------------------- +-- Actual output starts here -- +------------------------------- + +set termout on pagesize 49999 heading on feedback off newpage 1 numwidth 10 numformat "" null "" colsep "|" headsep "|" + +set heading off + +column message format a50 + +/* Just a quick notice if we could not find anything for a given SID */ +select + 'No SQL information for &1 found!' as message +from + dual +where + upper(substr('&1', 1, 4)) = 'SID=' +/* +and regexp_like(trim(substr('&1', case when instr('&1', ',') > 0 then instr('&1', ',') + 1 else 5 end)), '^\d+$') +and (instr('&1', ',') < 1 or regexp_like(trim(substr('&1', 5, instr('&1', ',') - 5)), '^\d+$')) +*/ +and regexp_like(trim(substr('&1', 5, case when instr('&1', '@') > 0 then instr('&1', '@') - 5 else length('&1') end)), '^\d+$') +and (instr('&1', '@') < 1 or regexp_like(trim(substr('&1', instr('&1', '@') + 1)), '^\d+$')) +and '&sid_sql_id' is null +; + +column message clear + +set heading on + +prompt +prompt +prompt General information +prompt ------------------------------------------------ + +column sql_id format a13 +column sql_exec_start format a19 +column sql_exec_end format a19 +column format_option format a40 +column last_exec_source format a20 +column ash_options format a40 +column ash_source format a10 + +select + '&si' as sql_id + , &cn as &second_id + , '&ls' as sql_exec_start +&_IF_ORA11_OR_HIGHER , &li as sql_exec_id +&_IF_LOWER_THAN_ORA11 , case when coalesce('&find_min_sample_10g', 'NO') = 'YES' then '&ash_max_sample_time' else '&li' end as sql_exec_end + , '&fo' as format_option + , case + when '&sid_sql_id' is not null and '&1' is not null + then upper('&1') || case when instr('&op', 'NONE') = 0 then ' (&so)' end +&_IF_ORA11_OR_HIGHER when '&1' is null and '&2' is null +&_IF_LOWER_THAN_ORA11 when '&1' is null + then 'PREV_SQL' || case when instr('&op', 'NONE') = 0 then ' (&so)' end + when '&2' is not null or instr('&op', 'NONE') > 0 + then 'N/A' + else '&so' + end as last_exec_source + , '&op' as ash_options + , case when instr('&op', 'NONE') > 0 then 'N/A' else '&ah' end as ash_source +from + dual +; + +column sql_id clear +column sql_exec_start clear +column sql_exec_end clear +column format_option clear +column last_exec_source clear +column ash_options clear +column ash_source clear + +set heading off + +set termout off + +-------------------------------------------------------------------------------------------------------------- +-- Clean up passed parameters to avoid side effects for upcoming scripts if script execution gets cancelled -- +-------------------------------------------------------------------------------------------------------------- + +undefine 1 +undefine 2 +undefine 3 +undefine 4 +undefine 5 +undefine 6 +undefine 7 +undefine 8 +undefine 9 +undefine 10 + +-- If this is S-ASH, from here on only 10g features/columns will be used +col ora11_higher new_value _IF_ORA11_OR_HIGHER &debug_internalp.print +col ora11_lower new_value _IF_LOWER_THAN_ORA11 &debug_internalp.print +col ora112_higher new_value _IF_ORA112_OR_HIGHER &debug_internalp.print +col ora112_lower new_value _IF_LOWER_THAN_ORA112 &debug_internalp.print +col ora11202_higher new_value _IF_ORA11202_OR_HIGHER &debug_internalp.print +col ora11202_lower new_value _IF_LOWER_THAN_ORA11202 &debug_internalp.print +col ora11203_higher new_value _IF_ORA11203_OR_HIGHER &debug_internalp.print +col ora11203_lower new_value _IF_LOWER_THAN_ORA11203 &debug_internalp.print +col ora12_higher new_value _IF_ORA12_OR_HIGHER &debug_internalp.print +col ora12_lower new_value _IF_LOWER_THAN_ORA12 &debug_internalp.print +col ora12102_higher new_value _IF_ORA12102_OR_HIGHER &debug_internalp.print +col ora12102_lower new_value _IF_LOWER_THAN_ORA12102 &debug_internalp.print +col ora12_read_mem new_value _IF_ORA12_READ_MEM &debug_internalp.print +col ora_no_read_mem new_value _IF_ORA_NO_READ_MEM &debug_internalp.print + +select + case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11' then '' else '--' end as ora11_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11' then '--' else '' end as ora11_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2' then '' else '--' end as ora112_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2' then '--' else '' end as ora112_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2.0.2' then '' else '--' end as ora11202_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2.0.2' then '--' else '' end as ora11202_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2.0.3' then '' else '--' end as ora11203_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '11.2.0.3' then '--' else '' end as ora11203_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12' then '' else '--' end as ora12_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12' then '--' else '' end as ora12_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12.1.0.2' then '' else '--' end as ora12102_higher + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12.1.0.2' then '--' else '' end as ora12102_lower + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12.1.0.2' and '&ah' in ('CURR', 'MIXED') then '' else '--' end as ora12_read_mem + , case when substr( banner, instr(banner, 'Release ') + 8, instr(substr(banner,instr(banner,'Release ') + 8),' ') ) >= '12.1.0.2' and '&ah' in ('CURR', 'MIXED') then '--' else '' end as ora_no_read_mem +from + (select coalesce(case when '&SASH_DB_VERSION' is not null then 'Release 10.2.0.4 ' end, banner) as banner from v$version) +where + rownum = 1 +; + +column is_ora11202_or_higher new_value _IF_ORA11202_OR_HIGHERP &debug_internalp.print +column is_ora112_or_higher new_value _IF_ORA112_OR_HIGHERP &debug_internalp.print +column is_ora11_or_higher new_value _IF_ORA11_OR_HIGHERP &debug_internalp.print +column is_ora12_or_higher new_value _IF_ORA12_OR_HIGHERP &debug_internalp.print +column is_ora12_read_mem new_value _IF_ORA12_READ_MEMP &debug_internalp.print + +select + case when '&_IF_ORA11202_OR_HIGHER' is null then '' else 'no' end as is_ora11202_or_higher + , case when '&_IF_ORA112_OR_HIGHER' is null then '' else 'no' end as is_ora112_or_higher + , case when '&_IF_ORA11_OR_HIGHER' is null then '' else 'no' end as is_ora11_or_higher + , case when '&_IF_ORA12_OR_HIGHER' is null then '' else 'no' end as is_ora12_or_higher + , case when '&_IF_ORA12_READ_MEM' is null then '' else 'no' end as is_ora12_read_mem +from + dual +; + +column is_ora11202_or_higher clear +column is_ora112_or_higher clear +column is_ora11_or_higher clear +column is_ora12_or_higher clear +column is_ora12_read_mem clear + +/* Check for the ASH sample count threshold if: */ +/* - ASH option is specified */ +/* - LIMITED_ASH option is not specified */ + +column ash_sample_count new_value ash_sample_count &debug_internalp.print + +select + to_char(count(*), 'TM') as ash_sample_count +from + &global_ash +where + 1 = 1 --'&_IF_ORA112_OR_HIGHER' is null +and instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +; + +column ash_sample_count clear + +set termout on + +set heading off feedback off + +column message format a80 + +select + chr(10) || chr(10) || + '------------------------------------------------------------' || chr(10) || + 'Note: The ASH sample count warning threshold (&ash_sample_count_threshold) is' || chr(10) || + 'exceeded. Some XPLAN_ASH queries can take longer with that' || chr(10) || + 'amount of ASH data. Use the LIMITED_ASH option to skip the ' || chr(10) || + 'usually longest running XPLAN_ASH queries.' || chr(10) || + '------------------------------------------------------------' +from + dual +where + 1 = 1 --'&_IF_ORA112_OR_HIGHER' is null +and instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +and to_number(trim('&ash_sample_count')) > &ash_sample_count_threshold +; + +set heading on + +column message clear + +undefine ash_sample_count + +-- If you need to debug, comment the following line +set termout off + +set termout on + +set heading off feedback off + +column message format a80 + +select + chr(10) || chr(10) || + '------------------------------------------------------------' || chr(10) || + 'Note: This session lacks the ALTER SESSION privilege' || chr(10) || + 'XPLAN_ASH will use a different code path that can be slower' || chr(10) || + 'when analyzing longer running statements. To skip the ' || chr(10) || + 'usually longest running queries use the LIMITED_ASH option' || chr(10) || + '------------------------------------------------------------' +from + dual +where + :no_alter_session_priv = 'Y' +--and '&_IF_ORA112_OR_HIGHER' is null +and instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +; + +set heading on + +column message clear + +-- If you need to debug, comment the following line +set termout off + +/* Check if Real-Time SQL Monitoring info should be used or not */ +column use_monitor new_value use_monitor &debug_internalp.print +column use_no_monitor new_value use_no_monitor &debug_internalp.print + +select + case + when '&_IF_ORA11_OR_HIGHER' is null + and instr('&op', 'MONITOR') > 0 +&_IF_ORA11_OR_HIGHER and exists (select null from &sql_monitor where sql_id = '&si' and sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li and px_qcsid is null) + then '' + else '--' end as use_monitor + , case + when '&_IF_ORA11_OR_HIGHER' is not null + or instr('&op', 'MONITOR') <= 0 +&_IF_ORA11_OR_HIGHER or not exists (select null from &sql_monitor where sql_id = '&si' and sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li and px_qcsid is null) + then '' + else '--' end as use_no_monitor +from + dual +; + +column use_monitor clear +column use_no_monitor clear + +set termout on + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + '&use_monitor' is null +--------- +union all +--------- +select + 'Real-Time SQL Monitoring Execution Summary' as message +from + dual +where + '&use_monitor' is null +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + '&use_monitor' is null +; + +column message clear + +set heading on + +column status null "UNAVAILABLE" +column username &_IF_ORA112_OR_HIGHERP.print +column px_is_cross_instance heading "PX IS|CROSS|INST" format a5 &_IF_ORA112_OR_HIGHERP.print null "N/A" +column px_mindop heading "PX|MIN|DOP" just left null "N/A" +column px_maxdop heading "PX|MAX|DOP" just left null "N/A" +column px_instances heading "PX|INSTANCES" just left &_IF_ORA112_OR_HIGHERP.print null "N/A" +column px_servers_requested heading "PX|SERVERS|REQUESTED" just left &_IF_ORA112_OR_HIGHERP.print null "N/A" +column px_servers_allocated heading "PX|SERVERS|ALLOCATED" just left &_IF_ORA112_OR_HIGHERP.print null "N/A" +column time_graph heading "DURATION AND|DATABASE TIME|GRAPH" format a&wgs +column duration null "UNAVAILABLE" +column elapsed_time heading "DATABASE|TIME" +column cpu_time heading "CPU|TIME" +column user_io_wait_time heading "IO|WAIT|TIME" +column concurrency_wait_time heading "CONCURRENY|WAIT|TIME" +column cluster_wait_time heading "CLUSTER|WAIT|TIME" +column application_wait_time heading "APPLICATION|WAIT|TIME" +column queuing_time heading "QUEUING|TIME" &_IF_ORA112_OR_HIGHERP.print +column plsql_java_time heading "PLSQL|JAVA|TIME" +column other_time heading "OTHER|TIME" +column buffer_gets_format heading "BUFFER|GETS" format a8 +column read_reqs_format heading "READ|REQ" format a8 +column read_bytes_format heading "READ|BYTES" format a8 &_IF_ORA112_OR_HIGHERP.print +column write_reqs_format heading "WRITE|REQ" format a8 +column write_bytes_format heading "WRITE|BYTES" format a8 &_IF_ORA112_OR_HIGHERP.print +column cell_offload_percent heading "CELL|OFFL|PERC" format a6 &_IF_ORA112_OR_HIGHERP.print +column service_name heading "SERVICE" format a30 &_IF_ORA112_OR_HIGHERP.print +column program format a50 &_IF_ORA112_OR_HIGHERP.print +column error_message heading "ERROR|MESSAGE" format a128 &_IF_ORA112_OR_HIGHERP.print + +with /* XPLAN_ASH SQL_STATEMENT_EXECUTION_RTSM_SUMMARY SQL_ID: &si */ +monitor_info1 as +( + select +&use_monitor max(case when px_qcsid is null then status end) as status +&use_no_monitor cast(NULL as varchar2(30)) as status +&use_monitor &_IF_ORA112_OR_HIGHER , max(case when px_qcsid is null then username end) as username +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as varchar2(30)) as username +&use_no_monitor , cast(NULL as varchar2(30)) as username +&use_monitor &_IF_ORA112_OR_HIGHER , max(case when px_qcsid is null then service_name end) as service_name +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as varchar2(30)) as service_name +&use_no_monitor , cast(NULL as varchar2(30)) as service_name +&use_monitor &_IF_ORA112_OR_HIGHER , max(case when px_qcsid is null then coalesce(program, 'NULL') end) as program +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as varchar2(30)) as program +&use_no_monitor , cast(NULL as varchar2(30)) as program +&use_monitor &_IF_ORA112_OR_HIGHER , max(case when px_qcsid is null then px_is_cross_instance end) as px_is_cross_instance +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as varchar2(1)) as px_is_cross_instance +&use_no_monitor , cast(NULL as varchar2(1)) as px_is_cross_instance +&use_monitor , min(case when px_qcsid is not null then cnt_px_server end) as px_mindop +&use_no_monitor , cast(NULL as number) as px_mindop +&use_monitor &_IF_ORA112_OR_HIGHER , max(case when px_qcsid is null then px_maxdop end) as px_maxdop +&use_monitor &_IF_LOWER_THAN_ORA112 , max(case when px_qcsid is not null then cnt_px_server end) as px_maxdop +&use_no_monitor , cast(NULL as number) as px_maxdop +&use_monitor &_IF_ORA112_OR_HIGHER , max(case when px_qcsid is null then px_maxdop_instances end) as px_instances +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as number) as px_instances +&use_no_monitor , cast(NULL as number) as px_instances +&use_monitor &_IF_ORA112_OR_HIGHER , max(case when px_qcsid is null then px_servers_requested end) as px_servers_requested +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as number) as px_servers_requested +&use_no_monitor , cast(NULL as number) as px_servers_requested +&use_monitor &_IF_ORA112_OR_HIGHER , max(case when px_qcsid is null then px_servers_allocated end) as px_servers_allocated +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as number) as px_servers_allocated +&use_no_monitor , cast(NULL as number) as px_servers_allocated +&use_monitor , round((max(case when px_qcsid is null then case when status = 'EXECUTING' then sysdate else last_refresh_time end end) - max(sql_exec_start)) * 86400) as duration +&use_no_monitor , cast(NULL as number) as duration +&use_monitor , round(sum(elapsed_time) / 1e6) as elapsed_time +&use_no_monitor , cast(NULL as number) as elapsed_time +&use_monitor , round(sum(cpu_time) / 1e6) as cpu_time +&use_no_monitor , cast(NULL as number) as cpu_time +&use_monitor , round(sum(user_io_wait_time) / 1e6) as user_io_wait_time +&use_no_monitor , cast(NULL as number) as user_io_wait_time +&use_monitor , round(sum(concurrency_wait_time) / 1e6) as concurrency_wait_time +&use_no_monitor , cast(NULL as number) as concurrency_wait_time +&use_monitor , round(sum(cluster_wait_time) / 1e6) as cluster_wait_time +&use_no_monitor , cast(NULL as number) as cluster_wait_time +&use_monitor , round(sum(application_wait_time) / 1e6) as application_wait_time +&use_no_monitor , cast(NULL as number) as application_wait_time +&use_monitor &_IF_ORA112_OR_HIGHER , round(sum(queuing_time) / 1e6) as queuing_time +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as number) as queuing_time +&use_no_monitor , cast(NULL as number) as queuing_time +&use_monitor , round(sum(plsql_exec_time + java_exec_time) / 1e6) as plsql_java_time +&use_no_monitor , cast(NULL as number) as plsql_java_time +&use_monitor , sum(buffer_gets) as buffer_gets +&use_no_monitor , cast(NULL as number) as buffer_gets +&use_monitor &_IF_ORA112_OR_HIGHER , sum(physical_read_requests) as read_reqs +&use_monitor &_IF_LOWER_THAN_ORA112 , sum(disk_reads) as read_reqs +&use_no_monitor , cast(NULL as number) as read_reqs +&use_monitor &_IF_ORA112_OR_HIGHER , sum(physical_read_bytes) as read_bytes +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as number) as read_bytes +&use_no_monitor , cast(NULL as number) as read_bytes +&use_monitor &_IF_ORA112_OR_HIGHER , sum(physical_write_requests) as write_reqs +&use_monitor &_IF_LOWER_THAN_ORA112 , sum(direct_writes) as write_reqs +&use_no_monitor , cast(NULL as number) as write_reqs +&use_monitor &_IF_ORA112_OR_HIGHER , sum(physical_write_bytes) as write_bytes +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as number) as write_bytes +&use_no_monitor , cast(NULL as number) as write_bytes +&use_monitor &_IF_ORA112_OR_HIGHER , 100 - round(sum(io_interconnect_bytes) / nullif(sum(physical_read_bytes + physical_write_bytes), 0) * 100) as cell_offload_percent +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as number) as cell_offload_percent +&use_no_monitor , cast(NULL as number) as cell_offload_percent +&use_monitor &_IF_ORA112_OR_HIGHER , max(case when px_qcsid is null then error_message end) as error_message +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(NULL as varchar2(30)) as error_message +&use_no_monitor , cast(NULL as varchar2(30)) as error_message + from +&use_monitor (select count(*) over (partition by px_server_group, px_server_set) as cnt_px_server, a.* from &sql_monitor a +&use_no_monitor dual + where +&use_no_monitor 1 = 2 +&use_monitor 1 = 1 +&use_monitor and sql_id = '&si' +&use_monitor and sql_exec_start = to_date('&ls', '&dm') +&use_monitor and sql_exec_id = &li) +), +monitor_info2 as +( + select + status + , username + , service_name + , program + , px_is_cross_instance + , px_mindop + , px_maxdop + , px_instances + , px_servers_requested + , px_servers_allocated + , duration + , greatest(elapsed_time, cpu_time + user_io_wait_time + concurrency_wait_time + cluster_wait_time + application_wait_time + coalesce(queuing_time, 0)) as elapsed_time + , cpu_time + , user_io_wait_time + , concurrency_wait_time + , cluster_wait_time + , application_wait_time + , queuing_time + , plsql_java_time + , greatest(elapsed_time - (cpu_time + user_io_wait_time + concurrency_wait_time + cluster_wait_time + application_wait_time + coalesce(queuing_time, 0)), 0) as other_time + , buffer_gets + , read_reqs + , read_bytes + , write_reqs + , write_bytes + , cell_offload_percent + , error_message + from + monitor_info1 +), +monitor_info3 as +( + select + status + , username + , service_name + , program + , px_is_cross_instance + , px_mindop + , px_maxdop + , px_instances + , px_servers_requested + , px_servers_allocated + , rpad('&gc3', round(greatest(case when duration < elapsed_time then duration / nullif(elapsed_time, 0) else 1 end * (&wgs - 1), 1)), '&gc3') || chr(10) || + rpad('&gc', round((cpu_time / nullif(elapsed_time, 0)) * case when elapsed_time < duration then elapsed_time / nullif(duration, 0) else 1 end * (&wgs - 1)), '&gc') || + rpad('&gc2', round(((user_io_wait_time + concurrency_wait_time + cluster_wait_time + application_wait_time + coalesce(queuing_time, 0)) / nullif(elapsed_time, 0)) * case when elapsed_time < duration then elapsed_time / nullif(duration, 0) else 1 end * (&wgs - 1)), '&gc2') || + rpad('&gc3', round((other_time / nullif(elapsed_time, 0)) * case when elapsed_time < duration then elapsed_time / nullif(duration, 0) else 1 end * (&wgs - 1)), '&gc3') + as time_graph + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration + , cast(nullif('+' || to_char(extract(day from numtodsinterval(elapsed_time, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(elapsed_time, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as elapsed_time + , cast(nullif('+' || to_char(extract(day from numtodsinterval(cpu_time, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(cpu_time, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as cpu_time + , cast(nullif('+' || to_char(extract(day from numtodsinterval(user_io_wait_time, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(user_io_wait_time, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as user_io_wait_time + , cast(nullif('+' || to_char(extract(day from numtodsinterval(concurrency_wait_time, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(concurrency_wait_time, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as concurrency_wait_time + , cast(nullif('+' || to_char(extract(day from numtodsinterval(cluster_wait_time, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(cluster_wait_time, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as cluster_wait_time + , cast(nullif('+' || to_char(extract(day from numtodsinterval(application_wait_time, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(application_wait_time, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as application_wait_time + , cast(nullif('+' || to_char(extract(day from numtodsinterval(queuing_time, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(queuing_time, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as queuing_time + , cast(nullif('+' || to_char(extract(day from numtodsinterval(plsql_java_time, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(plsql_java_time, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as plsql_java_time + , cast(nullif('+' || to_char(extract(day from numtodsinterval(other_time, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(other_time, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as other_time + , buffer_gets + , trunc(log(10, abs(case buffer_gets when 0 then 1 else buffer_gets end))) as power_10_buffer_gets + , trunc(mod(log(10, abs(case buffer_gets when 0 then 1 else buffer_gets end)), 3)) as power_10_buffer_gets_mod_3 + , read_reqs + , trunc(log(10, abs(case read_reqs when 0 then 1 else read_reqs end))) as power_10_read_reqs + , trunc(mod(log(10, abs(case read_reqs when 0 then 1 else read_reqs end)), 3)) as power_10_read_reqs_mod_3 + , read_bytes + , trunc(log(2, abs(case read_bytes when 0 then 1 else read_bytes end))) as power_2_read_bytes + , trunc(mod(log(2, abs(case read_bytes when 0 then 1 else read_bytes end)) ,10)) as power_2_read_bytes_mod_10 + , write_reqs + , trunc(log(10, abs(case write_reqs when 0 then 1 else write_reqs end))) as power_10_write_reqs + , trunc(mod(log(10, abs(case write_reqs when 0 then 1 else write_reqs end)), 3)) as power_10_write_reqs_mod_3 + , write_bytes + , trunc(log(2, abs(case write_bytes when 0 then 1 else write_bytes end))) as power_2_write_bytes + , trunc(mod(log(2, abs(case write_bytes when 0 then 1 else write_bytes end)) ,10)) as power_2_write_bytes_mod_10 + , cell_offload_percent + , error_message + from + monitor_info2 +) +select + status + , username + , px_is_cross_instance + , px_mindop + , px_maxdop + , px_instances + , px_servers_requested + , px_servers_allocated + , time_graph + , duration + , elapsed_time + , cpu_time + , user_io_wait_time + , concurrency_wait_time + , cluster_wait_time + , application_wait_time + , queuing_time + , plsql_java_time + , other_time + , lpad(to_char(round(buffer_gets / power(10, power_10_buffer_gets - case when power_10_buffer_gets > 0 and power_10_buffer_gets_mod_3 = 0 then 3 else power_10_buffer_gets_mod_3 end)), 'FM99999'), 6) || + case power_10_buffer_gets - case when power_10_buffer_gets > 0 and power_10_buffer_gets_mod_3 = 0 then 3 else power_10_buffer_gets_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when buffer_gets is null + then null + else '*10^'||to_char(power_10_buffer_gets - case when power_10_buffer_gets > 0 and power_10_buffer_gets_mod_3 = 0 then 3 else power_10_buffer_gets_mod_3 end) + end + end as buffer_gets_format + , lpad(to_char(round(read_reqs / power(10, power_10_read_reqs - case when power_10_read_reqs > 0 and power_10_read_reqs_mod_3 = 0 then 3 else power_10_read_reqs_mod_3 end)), 'FM99999'), 6) || + case power_10_read_reqs - case when power_10_read_reqs > 0 and power_10_read_reqs_mod_3 = 0 then 3 else power_10_read_reqs_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when read_reqs is null + then null + else '*10^'||to_char(power_10_read_reqs - case when power_10_read_reqs > 0 and power_10_read_reqs_mod_3 = 0 then 3 else power_10_read_reqs_mod_3 end) + end + end as read_reqs_format + , lpad(to_char(round(read_bytes / power(2, power_2_read_bytes - case when power_2_read_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes))),3)) = 0 then power_2_read_bytes_mod_10 + 10 else power_2_read_bytes_mod_10 end)), 'FM99999'), 6) || + case power_2_read_bytes - case when power_2_read_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes))),3)) = 0 then power_2_read_bytes_mod_10 + 10 else power_2_read_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when read_bytes is null + then null + else '*2^'||to_char(power_2_read_bytes - case when power_2_read_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes))),3)) = 0 then power_2_read_bytes_mod_10 + 10 else power_2_read_bytes_mod_10 end) + end + end as read_bytes_format + , lpad(to_char(round(write_reqs / power(10, power_10_write_reqs - case when power_10_write_reqs > 0 and power_10_write_reqs_mod_3 = 0 then 3 else power_10_write_reqs_mod_3 end)), 'FM99999'), 6) || + case power_10_write_reqs - case when power_10_write_reqs > 0 and power_10_write_reqs_mod_3 = 0 then 3 else power_10_write_reqs_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when write_reqs is null + then null + else '*10^'||to_char(power_10_write_reqs - case when power_10_write_reqs > 0 and power_10_write_reqs_mod_3 = 0 then 3 else power_10_write_reqs_mod_3 end) + end + end as write_reqs_format + , lpad(to_char(round(write_bytes / power(2, power_2_write_bytes - case when power_2_write_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes))),3)) = 0 then power_2_write_bytes_mod_10 + 10 else power_2_write_bytes_mod_10 end)), 'FM99999'), 6) || + case power_2_write_bytes - case when power_2_write_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes))),3)) = 0 then power_2_write_bytes_mod_10 + 10 else power_2_write_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when write_bytes is null + then null + else '*2^'||to_char(power_2_write_bytes - case when power_2_write_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes))),3)) = 0 then power_2_write_bytes_mod_10 + 10 else power_2_write_bytes_mod_10 end) + end + end as write_bytes_format + , case when cell_offload_percent is not null then lpad(cell_offload_percent, 4) || '%' end as cell_offload_percent + , service_name + , program + , error_message +from + monitor_info3 +; + +column status clear +column username clear +column px_is_cross_instance clear +column px_mindop clear +column px_maxdop clear +column px_instances clear +column px_servers_requested clear +column px_servers_allocated clear +column time_graph clear +column duration clear +column elapsed_time clear +column cpu_time clear +column user_io_wait_time clear +column concurrency_wait_time clear +column cluster_wait_time clear +column application_wait_time clear +column queuing_time clear +column plsql_java_time clear +column other_time clear +column buffer_gets_format clear +column read_reqs_format clear +column read_bytes_format clear +column write_reqs_format clear +column write_bytes_format clear +column cell_offload_percent clear +column service_name clear +column program clear +column error_message clear + +set termout on + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +--------- +union all +--------- +select + 'SQL statement execution ASH Summary' as message +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +; + +column message clear + +set heading on + +/* Summary information based on ASH */ + +column inst_count new_value ic noprint +column duration_secs_covered new_value ds noprint + +column first_sample format a19 +column last_sample format a19 +column status format a8 +column duration_secs_t heading "DURATION SECS|TOTAL" +column duration_t heading "DURATION|TOTAL" +column duration_secs heading "DURATION SECS|ACTIVE" +column duration heading "DURATION|ACTIVE" +column average_as_t heading "AVERAGE AS|TOTAL" +column average_as heading "AVERAGE AS|ACTIVE" +column median_as heading "MEDIAN AS" +column stddev_as heading "AVERAGE AS|STDDEV" +column max_as heading "AVERAGE AS|MAX" +column min_as heading "AVERAGE AS|ACTIVE MIN" +column px_maxdop heading "PX MAX|DOP" null "N/A" &_IF_ORA11202_OR_HIGHERP.print +column px_mindop heading "PX MIN|DOP" null "N/A" &_IF_ORA11202_OR_HIGHERP.print +column px_worker_count new_value slave_count heading "PX WORKER|COUNT" +column px_worker_unique_count heading "PX WORKER|UNIQUE COUNT" +column top_level_sql_id format a16 heading "TOP_LEVEL_SQL_ID" &_IF_ORA11_OR_HIGHERP.print +column pga format a10 heading "MAX_PGA" &_IF_ORA112_OR_HIGHERP.print +column temp format a10 heading "MAX_TEMP" &_IF_ORA112_OR_HIGHERP.print +column px_send_rec_count heading "PX SEND/RECEIVE|COUNT" &_IF_ORA11_OR_HIGHERP.print +column perc_px_send_rec heading "PX SEND/RECEIVE|PERCENT" &_IF_ORA11_OR_HIGHERP.print +column px_send_rec_cpu_count heading "PX SEND/RECEIVE|CPU COUNT" &_IF_ORA11_OR_HIGHERP.print +column perc_px_send_rec_cpu heading "PX SEND/RECEIVE|CPU PERCENT" &_IF_ORA11_OR_HIGHERP.print +column is_sqlid_current format a7 heading "IS|SQLID|CURRENT" &_IF_ORA112_OR_HIGHERP.print +column in_connection_mgmt format a7 heading "IN|CONNECT|MGMT" &_IF_ORA11_OR_HIGHERP.print +column in_parse format a7 heading "IN|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_hard_parse format a7 heading "IN|HARD|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_sql_execution format a7 heading "IN|SQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_execution format a7 heading "IN|PLSQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_rpc format a7 heading "IN|PLSQL|RPC" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_compilation format a7 heading "IN|PLSQL|COMP" &_IF_ORA11_OR_HIGHERP.print +column in_java_execution format a7 heading "IN|JAVA|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_bind format a7 heading "IN|BIND" &_IF_ORA11_OR_HIGHERP.print +column in_cursor_close format a7 heading "IN|CURSOR|CLOSE" &_IF_ORA11_OR_HIGHERP.print +column in_sequence_load format a7 heading "IN|SEQ|LOAD" &_IF_ORA112_OR_HIGHERP.print + +with /* XPLAN_ASH SQL_STATEMENT_EXECUTION_ASH_SUMMARY SQL_ID: &si */ +ash_base as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time + , sql_id + , case + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- when regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) is null + when regexp_instr(regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c'), '^P[[:alnum:]][[:alnum:]][[:alnum:]]$') != 1 + then null + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- else &inst_id || '-' || regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) + else &inst_id || '-' || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') + end as process + , case when session_state = 'ON CPU' then 1 else 0 end as is_on_cpu + , module + , action +&_IF_ORA112_OR_HIGHER , machine + , session_id +&_IF_ORA11_OR_HIGHER , top_level_sql_id + , session_serial# + , user_id +&_IF_ORA11202_OR_HIGHER , px_flags +&_IF_LOWER_THAN_ORA11202 , null as px_flags + , qc_session_id + , qc_instance_id +&_IF_ORA11_OR_HIGHER , case when sql_plan_operation in ('PX SEND', 'PX RECEIVE') then 1 else 0 end as px_send_receive +&_IF_LOWER_THAN_ORA11 , 0 as px_send_receive +&_IF_ORA112_OR_HIGHER , case when is_sqlid_current = 'Y' then 1 else 0 end as is_sqlid_current +&_IF_LOWER_THAN_ORA112 , 0 as is_sqlid_current +&_IF_ORA11_OR_HIGHER , case when in_connection_mgmt = 'Y' then 1 else 0 end as in_connection_mgmt +&_IF_LOWER_THAN_ORA11 , 0 as in_connection_mgmt +&_IF_ORA11_OR_HIGHER , case when in_parse = 'Y' then 1 else 0 end as in_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_parse +&_IF_ORA11_OR_HIGHER , case when in_hard_parse = 'Y' then 1 else 0 end as in_hard_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_hard_parse +&_IF_ORA11_OR_HIGHER , case when in_sql_execution = 'Y' then 1 else 0 end as in_sql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_sql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_execution = 'Y' then 1 else 0 end as in_plsql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_rpc = 'Y' then 1 else 0 end as in_plsql_rpc +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_rpc +&_IF_ORA11_OR_HIGHER , case when in_plsql_compilation = 'Y' then 1 else 0 end as in_plsql_compilation +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_compilation +&_IF_ORA11_OR_HIGHER , case when in_java_execution = 'Y' then 1 else 0 end as in_java_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_java_execution +&_IF_ORA11_OR_HIGHER , case when in_bind = 'Y' then 1 else 0 end as in_bind +&_IF_LOWER_THAN_ORA11 , 0 as in_bind +&_IF_ORA11_OR_HIGHER , case when in_cursor_close = 'Y' then 1 else 0 end as in_cursor_close +&_IF_LOWER_THAN_ORA11 , 0 as in_cursor_close +&_IF_ORA112_OR_HIGHER , case when in_sequence_load = 'Y' then 1 else 0 end as in_sequence_load +&_IF_LOWER_THAN_ORA112 , 0 as in_sequence_load +&_IF_ORA112_OR_HIGHER , nullif(pga_allocated, 0) as pga_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as pga_allocated +&_IF_ORA112_OR_HIGHER , nullif(temp_space_allocated, 0) as temp_space_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as temp_space_allocated + -- According to DELTA_TIME the time the previous sample took place + -- DELTA_TIME is only available from 11.2 on +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_exec_id + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +/* Instances found in ASH sample data */ +instance_data +as +( + select + distinct + instance_id + from + ash_base +), +/* Simply the cartesian product of timeline and instances */ +/* Our driving rowsource */ +timeline_inst +as +( + select + t.timeline as sample_time + , i.instance_id as instance_id + , t.sql_exec_start + -- Buckets of the official timeline + , bucket + , duration_secs +-- , trunc(round((t.timeline - t.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as bucket +-- , round((t.timeline - t.sql_exec_start) * 86400) + &sample_freq as duration_secs + from + timeline t + , instance_data i +), +driver as +( + select + b.instance_id + , b.sample_time as timeline + , b.bucket + from + timeline_inst b +), +--base_data as +--( +-- select +-- count(a.sample_time) as active_sessions +-- , driver.timeline +-- , driver.instance_id +-- from +-- driver +-- , ash_base a +-- where +-- a.ash_bucket (+) = driver.bucket +-- and a.instance_id (+) = driver.instance_id +-- group by +-- driver.instance_id +-- , driver.timeline +-- --order by +-- -- driver.instance_id +-- -- , driver.timeline +--), +base_data_g as +( + select + count(a.sample_time) as active_sessions + , driver.timeline + from + driver + , ash_base a + where + a.ash_bucket (+) = driver.bucket + and a.instance_id (+) = driver.instance_id + group by + driver.timeline + --order by + -- driver.instance_id + -- , driver.timeline +), +median_as as +( + select + median(active_sessions) as median_as + , stddev_samp(active_sessions) as stddev_as + , max(active_sessions) as max_as + , coalesce(min(case when active_sessions > 0 then active_sessions end), 0) as min_as + from + base_data_g +), +/* Outer join the ASH samples to the timeline / instance rowsource */ +ash_data as +( + /* The 11.2 ASH data has a DELTA_TIME indicator that allows telling how long the previous sample of that particular session was ago */ + /* This is expressed in the PREV_SAMPLE_TIME information calculated based on SAMPLE_TIME and DELTA_TIME */ + /* So for PGA/TEMP figures we can produce "artificial" rows for those sample_times where no actual sampling of that particular session took place */ + /* But according to DELTA_TIME that particular sample was still "valid" in the past */ + /* The purpose of this is to get a "smoother" picture of PGA/TEMP allocation for Parallel Execution where not every sample time */ + /* all involved Parallel Workers will be sampled */ + /* Since this results in a poorly performing outer range join, this is now divided into two parts */ + -- + /* Part one: The data that covers exactly one bucket can be equi-joined, no artificial rows here */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + , ash.pga_allocated + , ash.temp_space_allocated + , cast(to_char(null) as varchar2(1)) as artificial_indicator + from + timeline_inst t + , ash_base ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id + -- Rows that at most cover one bucket (or even fall within the same bucket) + and ash.ash_prev_bucket >= ash.ash_bucket - &sample_freq + --------- + union all + --------- + /* Part two: The data spanning more than a bucket needs to be range joined */ + /* But we can dramatically lower the size of the row source to join by restricting to those spanning more than a single bucket */ + /* Here the artificial rows will be generated */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + /* Only use remaining fields for those non-artificial rows (see below for an explanation) */ + , ash.pga_allocated + , ash.temp_space_allocated + , ash.artificial_indicator + from + timeline_inst t + , ( +&use_no_lateral select /*+ use_merge(ash dup) no_merge */ +&use_lateral select /*+ no_merge */ + ash.sample_time + , ash_bucket - lvl + &sample_freq as ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , ash.pga_allocated + , ash.temp_space_allocated + , ash.instance_id + , case when lvl > &sample_freq then 'Y' else null end as artificial_indicator + from + ash_base ash +&use_lateral , lateral(select level * &sample_freq as lvl from dual connect by level <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq) +&use_no_lateral , (select /*+ cardinality(1e5) */ level * &sample_freq as lvl from dual connect by level <= 1e5) dup + where + ash.ash_prev_bucket < ash.ash_bucket - &sample_freq +&use_no_lateral and dup.lvl <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq + --and ash_bucket - lvl + &sample_freq >= 0 + ) ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id +), +ash_pga_temp1 as +( + select + sum(pga_allocated) as pga_per_bucket + , sum(temp_space_allocated) as temp_per_bucket + , bucket + from + ash_data + group by + bucket +), +ash_pga_temp as +( + select + max(pga_per_bucket) as pga_mem + , max(temp_per_bucket) as temp_space + from + ash_pga_temp1 +), +ash_pga_temp_prefmt as +( + select + pga_mem + , trunc(log(2, abs(case pga_mem when 0 then 1 else pga_mem end))) as power_2_pga_mem + , trunc(mod(log(2, abs(case pga_mem when 0 then 1 else pga_mem end)) ,10)) as power_2_pga_mem_mod_10 + , temp_space + , trunc(log(2, abs(case temp_space when 0 then 1 else temp_space end))) as power_2_temp_space + , trunc(mod(log(2, abs(case temp_space when 0 then 1 else temp_space end)), 10)) as power_2_temp_space_mod_10 + from + ash_pga_temp +), +ash_pga_temp_fmt as +( + select + to_char(round(pga_mem / power(2, power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end)), 'FM99999') || + case power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when pga_mem is null + then null + else '*2^'||to_char(power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end) + end + end as pga_mem_format + , to_char(round(temp_space / power(2, power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end)), 'FM99999') || + case power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when temp_space is null + then null + else '*2^'||to_char(power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end) + end + end as temp_space_format + from + ash_pga_temp_prefmt +) +select /* XPLAN_ASH SQL_STATEMENT_EXECUTION_ASH_SUMMARY SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + instance_count + , inst_count + , session_id + , a.instance_id + , user_id +&_IF_ORA11_OR_HIGHER , top_level_sql_id + , first_sample + , last_sample + , duration_secs_t + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs_t, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs_t, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration_t + , duration_secs + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration + , duration_secs_covered + , status + , sample_count + , cpu_sample_count + , round(cpu_sample_count / nullif(sample_count, 0) * 100) as percentage_cpu + , px_send_receive_count as px_send_rec_count + , round(px_send_receive_count / nullif(sample_count, 0) * 100) as perc_px_send_rec + , px_send_receive_on_cpu_count as px_send_rec_cpu_count + , round(px_send_receive_on_cpu_count / nullif(cpu_sample_count, 0) * 100) as perc_px_send_rec_cpu + , case when min_actual_degree <= 1 then null else min_actual_degree end as px_mindop + , case when actual_degree <= 1 then null else actual_degree end as px_maxdop + , slave_count as px_worker_count + , slave_unique_count as px_worker_unique_count + , case when average_as_t >= &rnd_thr then round(average_as_t) else average_as_t end as average_as_t + , case when average_as >= &rnd_thr then round(average_as) else average_as end as average_as + , case when median_as >= &rnd_thr then round(median_as) else round(median_as, 1) end as median_as + , case when max_as >= &rnd_thr then round(max_as) else round(max_as, 1) end as max_as + , case when min_as >= &rnd_thr then round(min_as) else round(min_as, 1) end as min_as + , case when stddev_as >= &rnd_thr then round(stddev_as) else round(stddev_as, 1) end as stddev_as + , lpad(ash_pga_temp_fmt.pga_mem_format, 10) as pga + , lpad(ash_pga_temp_fmt.temp_space_format, 10) as temp + , module + , action +&_IF_ORA112_OR_HIGHER , machine + , lpad(to_char(round(is_sqlid_current / sample_count * 100), 'TM'), 6) || '%' as is_sqlid_current + , lpad(to_char(round(in_connection_mgmt / sample_count * 100), 'TM'), 6) || '%' as in_connection_mgmt + , lpad(to_char(round(in_parse / sample_count * 100), 'TM'), 6) || '%' as in_parse + , lpad(to_char(round(in_hard_parse / sample_count * 100), 'TM'), 6) || '%' as in_hard_parse + , lpad(to_char(round(in_sql_execution / sample_count * 100), 'TM'), 6) || '%' as in_sql_execution + , lpad(to_char(round(in_plsql_execution / sample_count * 100), 'TM'), 6) || '%' as in_plsql_execution + , lpad(to_char(round(in_plsql_rpc / sample_count * 100), 'TM'), 6) || '%' as in_plsql_rpc + , lpad(to_char(round(in_plsql_compilation / sample_count * 100), 'TM'), 6) || '%' as in_plsql_compilation + , lpad(to_char(round(in_java_execution / sample_count * 100), 'TM'), 6) || '%' as in_java_execution + , lpad(to_char(round(in_bind / sample_count * 100), 'TM'), 6) || '%' as in_bind + , lpad(to_char(round(in_cursor_close / sample_count * 100), 'TM'), 6) || '%' as in_cursor_close + , lpad(to_char(round(in_sequence_load / sample_count * 100), 'TM'), 6) || '%' as in_sequence_load +from + ( + select + to_char(count(distinct instance_id), 'TM') as inst_count + , count(distinct instance_id) as instance_count + , to_char(min(sample_time), '&dm') as first_sample + , to_char(max(sample_time), '&dm') as last_sample + , round(((max(sample_time) - min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first)) * 86400)) + &sample_freq as duration_secs_t + , round(max(ash_bucket) - min(ash_bucket) + &sample_freq) as duration_secs_covered + , count(distinct ash_bucket) * &sample_freq as duration_secs + , case + when max(sample_time) >= to_date('&ash_current_time', 'YYYY-MM-DD HH24:MI:SS') - 2 * &sample_freq / 86400 + then 'ACTIVE' + else 'INACTIVE' + end as status + , count(*) as sample_count + , sum(is_on_cpu) as cpu_sample_count + , max(trunc(px_flags / 2097152)) as actual_degree + , min(nullif(trunc(px_flags / 2097152), 0)) as min_actual_degree + , count(distinct process) as slave_count + , count(distinct case when process is not null then process || '-' || session_id || '-' || session_serial# end) as slave_unique_count + , nvl(max(module), 'NULL') as module + , nvl(max(action), 'NULL') as action + , max(user_id) as user_id +&_IF_ORA112_OR_HIGHER , nvl(max(machine), 'NULL') as machine +&_IF_ORA11_OR_HIGHER , nvl(max(top_level_sql_id), 'NULL') as top_level_sql_id + , sum(px_send_receive) as px_send_receive_count + , sum(case when px_send_receive = 1 and is_on_cpu = 1 then 1 else 0 end) as px_send_receive_on_cpu_count + , sum(is_sqlid_current) as is_sqlid_current + , sum(in_connection_mgmt) as in_connection_mgmt + , sum(in_parse) as in_parse + , sum(in_hard_parse) as in_hard_parse + , sum(in_sql_execution) as in_sql_execution + , sum(in_plsql_execution) as in_plsql_execution + , sum(in_plsql_rpc) as in_plsql_rpc + , sum(in_plsql_compilation) as in_plsql_compilation + , sum(in_java_execution) as in_java_execution + , sum(in_bind) as in_bind + , sum(in_cursor_close) as in_cursor_close + , sum(in_sequence_load) as in_sequence_load + , coalesce(max(qc_session_id), max(session_id)) as session_id + , coalesce(max(qc_instance_id), max(instance_id)) as instance_id + , round(count(*) / nullif((max(ash_bucket) - min(ash_bucket) + &sample_freq) / &sample_freq, 0), 1) as average_as_t + , round(count(*) / nullif(count(distinct ash_bucket), 0), 1) as average_as + from + ash_base + where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) + -- This prevents the aggregate functions to produce a single row + -- in case of no rows generated to aggregate + group by + 1 + ) a + , ash_pga_temp_fmt + , median_as m +; + +column duration_secs_t clear +column duration_t clear +column duration_secs clear +column duration clear +column average_as_t clear +column average_as clear +column median_as clear +column stddev_as clear +column max_as clear +column min_as clear +column top_level_sql_id clear +column px_send_rec_count clear +column perc_px_send_rec clear +column px_send_rec_cpu_count clear +column perc_px_send_rec_cpu clear + +column is_sqlid_current clear +column in_connection_mgmt clear +column in_parse clear +column in_hard_parse clear +column in_sql_execution clear +column in_plsql_execution clear +column in_plsql_rpc clear +column in_plsql_compilation clear +column in_java_execution clear +column in_bind clear +column in_cursor_close clear +column in_sequence_load clear + +column px_maxdop clear +column px_mindop clear +column px_worker_count clear +column px_worker_unique_count clear + +-- If you need to debug, comment the following line +set termout off + +column slave_count new_value slave_count &debug_internalp.print + +select + case when to_number('&slave_count') = 0 then '' else trim('&slave_count') end as slave_count +from + dual +; + +column slave_count clear + +column duration_secs_covered clear + +column first_sample clear +column last_sample clear +column status clear +column pga clear +column temp clear + +column is_cross_instance_p new_value _IF_CROSS_INSTANCE &debug_internalp.print +column is_cross_instance new_value _IS_CROSS_INSTANCE &debug_internalp.print +column is_single_instance new_value _IS_SINGL_INSTANCE &debug_internalp.print + +select + case when to_number(nvl('&ic', '0')) > 1 then '' else 'no' end as is_cross_instance_p + , case when to_number(nvl('&ic', '0')) > 1 then '' else '--' end as is_cross_instance + , case when to_number(nvl('&ic', '0')) > 1 then '--' else '' end as is_single_instance +from + dual +; + +column is_cross_instance_p clear +column is_cross_instance clear +column is_single_instance clear + +set termout on + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and to_number(nvl('&ic', '0')) > 1 +--------- +union all +--------- +select + 'SQL statement execution ASH Summary per Instance' as message +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and to_number(nvl('&ic', '0')) > 1 +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and to_number(nvl('&ic', '0')) > 1 +; + +column message clear + +-- If you need to debug, comment the following line +set termout off + +/* The following query is only run separately as integrating it into other queries leads to ORA-03113 core dumps during optimization at least on 11.2.0.1 versions */ +/* It determines two important figures used later on: + 1. A scaling factor for the TIME_ACTIVE_GRAPH if there are less sample points than the defined size of such a graph + 2. The number of distinct sample points for determining the Average Active Sessions information */ +/* Had to revert to 11.1 optimizer features anyway since this query now also causes an ORA-03113 on 11.2.0.1, so it could be re-integrated but kept it separate */ + +column duplicator new_value duplicator &debug_internalp.print +column dist_sample_count new_value dist_sample_count &debug_internalp.print + +with /* XPLAN_ASH DETERMINE_DUPLICATOR SQL_ID: &si */ +ash_base as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time + -- According to DELTA_TIME the time the previous sample took place + -- DELTA_TIME is only available from 11.2 on +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') + and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , min(ash_bucket) as min_ash_bucket + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +dist_count as +( + select + count(*) as dist_sample_count + from + timeline t + , dates d + where + t.bucket >= d.min_ash_bucket +), +duplicator as +( + select + coalesce(ceil(&tgs / nullif(count(*), 0)), 0) as duplicator + --, coalesce(count(distinct timeline), 0) as dist_sample_count + from + timeline +) +select /* XPLAN_ASH DETERMINE_DUPLICATOR SQL_ID: &si */ /*+ optimizer_features_enable('11.1.0.7') NO_STATEMENT_QUEUING */ + duplicator + , dist_sample_count +from + dist_count + , duplicator +; + +column duplicator clear +column dist_sample_count clear + +set termout on + +set heading on + +/* Summary information per RAC instance based on ASH (for cross-instance SQL execution) */ + +column first_sample format a19 +column last_sample format a19 +column time_active_graph format a&tgs +column duration_secs_t heading "DURATION SECS|TOTAL" +column duration_t heading "DURATION|TOTAL" +column duration_secs heading "DURATION SECS|ACTIVE" +column duration heading "DURATION|ACTIVE" +column average_as_t heading "AVERAGE AS|TOTAL" +column average_as heading "AVERAGE AS|ACTIVE" +column median_as heading "MEDIAN AS" +column stddev_as heading "AVERAGE AS|STDDEV" +column max_as heading "AVERAGE AS|MAX" +column min_as heading "AVERAGE AS|ACTIVE MIN" +column pga format a10 heading "MAX_PGA" &_IF_ORA112_OR_HIGHERP.print +column temp format a10 heading "MAX_TEMP" &_IF_ORA112_OR_HIGHERP.print +column px_send_rec_count heading "PX SEND/RECEIVE|COUNT" &_IF_ORA11_OR_HIGHERP.print +column perc_px_send_rec heading "PX SEND/RECEIVE|PERCENT" &_IF_ORA11_OR_HIGHERP.print +column px_send_rec_cpu_count heading "PX SEND/RECEIVE|CPU COUNT" &_IF_ORA11_OR_HIGHERP.print +column perc_px_send_rec_cpu heading "PX SEND/RECEIVE|CPU PERCENT" &_IF_ORA11_OR_HIGHERP.print +column px_worker_count heading "PX WORKER|COUNT" +column px_worker_unique_count heading "PX WORKER|UNIQUE COUNT" +column is_sqlid_current format a7 heading "IS|SQLID|CURRENT" &_IF_ORA112_OR_HIGHERP.print +column in_connection_mgmt format a7 heading "IN|CONNECT|MGMT" &_IF_ORA11_OR_HIGHERP.print +column in_parse format a7 heading "IN|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_hard_parse format a7 heading "IN|HARD|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_sql_execution format a7 heading "IN|SQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_execution format a7 heading "IN|PLSQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_rpc format a7 heading "IN|PLSQL|RPC" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_compilation format a7 heading "IN|PLSQL|COMP" &_IF_ORA11_OR_HIGHERP.print +column in_java_execution format a7 heading "IN|JAVA|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_bind format a7 heading "IN|BIND" &_IF_ORA11_OR_HIGHERP.print +column in_cursor_close format a7 heading "IN|CURSOR|CLOSE" &_IF_ORA11_OR_HIGHERP.print +column in_sequence_load format a7 heading "IN|SEQ|LOAD" &_IF_ORA112_OR_HIGHERP.print + +with /* XPLAN_ASH SQL_STATEMENT_EXECUTION_ASH_SUMMARY_CROSS_INSTANCE SQL_ID: &si */ +ash_base as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time + , regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') as process + , sql_id + , case when session_state = 'ON CPU' then 1 else 0 end as is_on_cpu +&_IF_ORA11_OR_HIGHER , case when sql_plan_operation in ('PX SEND', 'PX RECEIVE') then 1 else 0 end as px_send_receive +&_IF_LOWER_THAN_ORA11 , 0 as px_send_receive +&_IF_ORA112_OR_HIGHER , case when is_sqlid_current = 'Y' then 1 else 0 end as is_sqlid_current +&_IF_LOWER_THAN_ORA112 , 0 as is_sqlid_current +&_IF_ORA11_OR_HIGHER , case when in_connection_mgmt = 'Y' then 1 else 0 end as in_connection_mgmt +&_IF_LOWER_THAN_ORA11 , 0 as in_connection_mgmt +&_IF_ORA11_OR_HIGHER , case when in_parse = 'Y' then 1 else 0 end as in_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_parse +&_IF_ORA11_OR_HIGHER , case when in_hard_parse = 'Y' then 1 else 0 end as in_hard_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_hard_parse +&_IF_ORA11_OR_HIGHER , case when in_sql_execution = 'Y' then 1 else 0 end as in_sql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_sql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_execution = 'Y' then 1 else 0 end as in_plsql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_rpc = 'Y' then 1 else 0 end as in_plsql_rpc +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_rpc +&_IF_ORA11_OR_HIGHER , case when in_plsql_compilation = 'Y' then 1 else 0 end as in_plsql_compilation +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_compilation +&_IF_ORA11_OR_HIGHER , case when in_java_execution = 'Y' then 1 else 0 end as in_java_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_java_execution +&_IF_ORA11_OR_HIGHER , case when in_bind = 'Y' then 1 else 0 end as in_bind +&_IF_LOWER_THAN_ORA11 , 0 as in_bind +&_IF_ORA11_OR_HIGHER , case when in_cursor_close = 'Y' then 1 else 0 end as in_cursor_close +&_IF_LOWER_THAN_ORA11 , 0 as in_cursor_close +&_IF_ORA112_OR_HIGHER , case when in_sequence_load = 'Y' then 1 else 0 end as in_sequence_load +&_IF_LOWER_THAN_ORA112 , 0 as in_sequence_load +&_IF_ORA112_OR_HIGHER , nullif(pga_allocated, 0) as pga_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as pga_allocated +&_IF_ORA112_OR_HIGHER , nullif(temp_space_allocated, 0) as temp_space_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as temp_space_allocated + -- According to DELTA_TIME the time the previous sample took place + -- DELTA_TIME is only available from 11.2 on +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_exec_id + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') + and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) + and to_number(nvl('&ic', '0')) > 1 +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +/* Instances found in ASH sample data */ +instance_data +as +( + select + distinct + instance_id + from + ash_base +), +/* Simply the cartesian product of timeline and instances */ +/* Our driving rowsource */ +timeline_inst +as +( + select + t.timeline as sample_time + , i.instance_id as instance_id + , t.sql_exec_start + -- Buckets of the official timeline + , bucket + , duration_secs +-- , trunc(round((t.timeline - t.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as bucket +-- , round((t.timeline - t.sql_exec_start) * 86400) + &sample_freq as duration_secs + from + timeline t + , instance_data i +), +driver as +( + select + b.instance_id + , b.sample_time as timeline + , b.bucket + from + timeline_inst b +), +base_data as +( + select + case when count(a.sample_time) > 0 then '&gc3' else ' ' end as act_ind + , count(a.sample_time) as active_sessions + , driver.timeline + , driver.instance_id + from + driver + , ash_base a + where + a.ash_bucket (+) = driver.bucket + and a.instance_id (+) = driver.instance_id + group by + driver.instance_id + , driver.timeline + --order by + -- driver.instance_id + -- , driver.timeline +), +median_as as +( + select + instance_id + , median(active_sessions) as median_as + , stddev_samp(active_sessions) as stddev_as + , max(active_sessions) as max_as + , coalesce(min(case when active_sessions > 0 then active_sessions end), 0) as min_as + from + base_data + group by + instance_id +), +bucket_data as +( + select + ntile(&tgs) over (partition by instance_id order by timeline) as bucket + , x.* + from + base_data x + -- In case we have less sample times as size of the Time Active Graph + -- this here will duplicate the data accordingly + , (select /*+ cardinality(&duplicator) */ null from dual connect by level <= to_number(trim('&duplicator'))) dups +), +grouped_buckets as +( + select + max(act_ind) as act_ind + , bucket + , instance_id + from + bucket_data + group by + instance_id + , bucket +-- order by +-- instance_id +-- , bucket +), +time_active_graph as +( + select + instance_id +&_IF_ORA112_OR_HIGHER , listagg(act_ind) within group (order by bucket) as time_active_graph + /* leading spaces are trimmed by the XML operation, hence we need to temporarily replace them with something else */ +&_IF_LOWER_THAN_ORA112 , replace(extract(xmlagg(xmlelement("V", replace(act_ind, ' ', '?')) order by bucket), '/V/text()').getstringval(), '?', ' ') as time_active_graph + from + grouped_buckets + group by + instance_id +-- order by +-- instance_id +), +/* Outer join the ASH samples to the timeline / instance rowsource */ +ash_data as +( + /* The 11.2 ASH data has a DELTA_TIME indicator that allows telling how long the previous sample of that particular session was ago */ + /* This is expressed in the PREV_SAMPLE_TIME information calculated based on SAMPLE_TIME and DELTA_TIME */ + /* So for PGA/TEMP figures we can produce "artificial" rows for those sample_times where no actual sampling of that particular session took place */ + /* But according to DELTA_TIME that particular sample was still "valid" in the past */ + /* The purpose of this is to get a "smoother" picture of PGA/TEMP allocation for Parallel Execution where not every sample time */ + /* all involved Parallel Workers will be sampled */ + /* Since this results in a poorly performing outer range join, this is now divided into two parts */ + -- + /* Part one: The data that covers exactly one bucket can be equi-joined, no artificial rows here */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + , ash.pga_allocated + , ash.temp_space_allocated + , cast(to_char(null) as varchar2(1)) as artificial_indicator + from + timeline_inst t + , ash_base ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id + -- Rows that at most cover one bucket (or even fall within the same bucket) + and ash.ash_prev_bucket >= ash.ash_bucket - &sample_freq + --------- + union all + --------- + /* Part two: The data spanning more than a bucket needs to be range joined */ + /* But we can dramatically lower the size of the row source to join by restricting to those spanning more than a single bucket */ + /* Here the artificial rows will be generated */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + /* Only use remaining fields for those non-artificial rows (see below for an explanation) */ + , ash.pga_allocated + , ash.temp_space_allocated + , ash.artificial_indicator + from + timeline_inst t + , ( +&use_no_lateral select /*+ use_merge(ash dup) no_merge */ +&use_lateral select /*+ no_merge */ + ash.sample_time + , ash_bucket - lvl + &sample_freq as ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , ash.pga_allocated + , ash.temp_space_allocated + , ash.instance_id + , case when lvl > &sample_freq then 'Y' else null end as artificial_indicator + from + ash_base ash +&use_lateral , lateral(select level * &sample_freq as lvl from dual connect by level <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq) +&use_no_lateral , (select /*+ cardinality(1e5) */ level * &sample_freq as lvl from dual connect by level <= 1e5) dup + where + ash.ash_prev_bucket < ash.ash_bucket - &sample_freq +&use_no_lateral and dup.lvl <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq + --and ash_bucket - lvl + &sample_freq >= 0 + ) ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id +), +ash_pga_temp1 as +( + select + sum(pga_allocated) as pga_per_bucket + , sum(temp_space_allocated) as temp_per_bucket + , bucket + , instance_id + from + ash_data + group by + instance_id + , bucket +), +ash_pga_temp as +( + select + max(pga_per_bucket) as pga_mem + , max(temp_per_bucket) as temp_space + , instance_id + from + ash_pga_temp1 + group by + instance_id +), +ash_pga_temp_prefmt as +( + select + pga_mem + , trunc(log(2, abs(case pga_mem when 0 then 1 else pga_mem end))) as power_2_pga_mem + , trunc(mod(log(2, abs(case pga_mem when 0 then 1 else pga_mem end)) ,10)) as power_2_pga_mem_mod_10 + , temp_space + , trunc(log(2, abs(case temp_space when 0 then 1 else temp_space end))) as power_2_temp_space + , trunc(mod(log(2, abs(case temp_space when 0 then 1 else temp_space end)), 10)) as power_2_temp_space_mod_10 + , instance_id + from + ash_pga_temp +), +ash_pga_temp_fmt as +( + select + to_char(round(pga_mem / power(2, power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end)), 'FM99999') || + case power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when pga_mem is null + then null + else '*2^'||to_char(power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end) + end + end as pga_mem_format + , to_char(round(temp_space / power(2, power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end)), 'FM99999') || + case power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when temp_space is null + then null + else '*2^'||to_char(power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end) + end + end as temp_space_format + , instance_id + from + ash_pga_temp_prefmt +) +select /* XPLAN_ASH SQL_STATEMENT_EXECUTION_ASH_SUMMARY_CROSS_INSTANCE SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + a.instance_id + , first_sample + , last_sample + , start_active + , duration_secs_t + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs_t, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs_t, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration_t + , duration_secs + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration + , sample_count + , process_count + , case when average_as_t >= &rnd_thr then round(average_as_t) else average_as_t end as average_as_t + , case when average_as >= &rnd_thr then round(average_as) else average_as end as average_as + , case when median_as >= &rnd_thr then round(median_as) else round(median_as, 1) end as median_as + , case when max_as >= &rnd_thr then round(max_as) else round(max_as, 1) end as max_as + , case when min_as >= &rnd_thr then round(min_as) else round(min_as, 1) end as min_as + , case when stddev_as >= &rnd_thr then round(stddev_as) else round(stddev_as, 1) end as stddev_as + , lpad(pt.pga_mem_format, 10) as pga + , lpad(pt.temp_space_format, 10) as temp + , px_send_receive_count as px_send_rec_count + , round(px_send_receive_count / nullif(sample_count, 0) * 100) as perc_px_send_rec + , px_send_receive_on_cpu_count as px_send_rec_cpu_count + , round(px_send_receive_on_cpu_count / nullif(cpu_sample_count, 0) * 100) as perc_px_send_rec_cpu + --, substr(rpad(' ', round(start_active / to_number('&ds') * &tgs)) || rpad('&gc3', round(duration_secs / to_number('&ds') * &tgs), '&gc3'), 1, &tgs) as time_active_graph + , t.time_active_graph + , lpad(to_char(round(is_sqlid_current / sample_count * 100), 'TM'), 6) || '%' as is_sqlid_current + , lpad(to_char(round(in_connection_mgmt / sample_count * 100), 'TM'), 6) || '%' as in_connection_mgmt + , lpad(to_char(round(in_parse / sample_count * 100), 'TM'), 6) || '%' as in_parse + , lpad(to_char(round(in_hard_parse / sample_count * 100), 'TM'), 6) || '%' as in_hard_parse + , lpad(to_char(round(in_sql_execution / sample_count * 100), 'TM'), 6) || '%' as in_sql_execution + , lpad(to_char(round(in_plsql_execution / sample_count * 100), 'TM'), 6) || '%' as in_plsql_execution + , lpad(to_char(round(in_plsql_rpc / sample_count * 100), 'TM'), 6) || '%' as in_plsql_rpc + , lpad(to_char(round(in_plsql_compilation / sample_count * 100), 'TM'), 6) || '%' as in_plsql_compilation + , lpad(to_char(round(in_java_execution / sample_count * 100), 'TM'), 6) || '%' as in_java_execution + , lpad(to_char(round(in_bind / sample_count * 100), 'TM'), 6) || '%' as in_bind + , lpad(to_char(round(in_cursor_close / sample_count * 100), 'TM'), 6) || '%' as in_cursor_close + , lpad(to_char(round(in_sequence_load / sample_count * 100), 'TM'), 6) || '%' as in_sequence_load +from + ( + select + instance_id + , to_char(min(sample_time), '&dm') as first_sample + , to_char(max(sample_time), '&dm') as last_sample + , min(ash_bucket) + &sample_freq as start_active + , round(max(ash_bucket) - min(ash_bucket) + &sample_freq) as duration_secs_t + , count(distinct ash_bucket) * &sample_freq as duration_secs + , count(*) as sample_count + , count(distinct process) as process_count + , round(count(*) / nullif((max(ash_bucket) - min(ash_bucket) + &sample_freq) / &sample_freq, 0), 1) as average_as_t + , round(count(*) / nullif(count(distinct ash_bucket), 0), 1) as average_as + , sum(is_on_cpu) as cpu_sample_count + , sum(px_send_receive) as px_send_receive_count + , sum(case when px_send_receive = 1 and is_on_cpu = 1 then 1 else 0 end) as px_send_receive_on_cpu_count + , sum(is_sqlid_current) as is_sqlid_current + , sum(in_connection_mgmt) as in_connection_mgmt + , sum(in_parse) as in_parse + , sum(in_hard_parse) as in_hard_parse + , sum(in_sql_execution) as in_sql_execution + , sum(in_plsql_execution) as in_plsql_execution + , sum(in_plsql_rpc) as in_plsql_rpc + , sum(in_plsql_compilation) as in_plsql_compilation + , sum(in_java_execution) as in_java_execution + , sum(in_bind) as in_bind + , sum(in_cursor_close) as in_cursor_close + , sum(in_sequence_load) as in_sequence_load + from + ( + select + a.* + , min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) over () as min_sql_exec_start + from + ash_base a + ) + where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) + and to_number(nvl('&ic', '0')) > 1 + group by + instance_id + , min_sql_exec_start + ) a + , ash_pga_temp_fmt pt + , time_active_graph t + , median_as m +where + a.instance_id = pt.instance_id +and a.instance_id = t.instance_id +and a.instance_id = m.instance_id +order by + a.instance_id +; + +column first_sample clear +column last_sample clear +column time_active_graph clear +column pga clear +column temp clear +column duration_secs_t clear +column duration_t clear +column duration_secs clear +column duration clear +column average_as_t clear +column average_as clear +column median_as clear +column stddev_as clear +column max_as clear +column min_as clear +column px_send_rec_count clear +column perc_px_send_rec clear +column px_send_rec_cpu_count clear +column perc_px_send_rec_cpu clear + +column is_sqlid_current clear +column in_connection_mgmt clear +column in_parse clear +column in_hard_parse clear +column in_sql_execution clear +column in_plsql_execution clear +column in_plsql_rpc clear +column in_plsql_compilation clear +column in_java_execution clear +column in_bind clear +column in_cursor_close clear +column in_sequence_load clear + +column px_worker_count clear +column px_worker_unique_count clear + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +--------- +union all +--------- +select + 'Summary of this sessions'' other activity' as message +from + dual +where + instr('&op', 'ASH') > 0 +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +; + +column message clear + +set heading on + +/* Summary information of other activity for the same session (e.g. recursive SQL, other cursors) during execution of main SQL based on ASH */ + +column instance_id &_IF_CROSS_INSTANCE.print null "GLOBAL" +column sample_count new_value ca_sc +column duration_secs_t heading "DURATION SECS|TOTAL" +column duration_t heading "DURATION|TOTAL" +column duration_secs heading "DURATION SECS|ACTIVE" +column duration heading "DURATION|ACTIVE" +column average_as_t heading "AVERAGE AS|TOTAL" +column average_as heading "AVERAGE AS|ACTIVE" +column median_as heading "MEDIAN AS" +column stddev_as heading "AVERAGE AS|STDDEV" +column max_as heading "AVERAGE AS|MAX" +column min_as heading "AVERAGE AS|ACTIVE MIN" +--column pga format a10 heading "MAX_PGA" &_IF_ORA112_OR_HIGHERP.print +--column temp format a10 heading "MAX_TEMP" &_IF_ORA112_OR_HIGHERP.print +-- For the time being, do not print PGA/TEMP as it is more confusing that helpful if you don't know on what it is based +column pga format a10 heading "MAX_PGA" noprint +column temp format a10 heading "MAX_TEMP" noprint +column px_worker_count heading "PX WORKER|COUNT" +column px_worker_unique_count heading "PX WORKER|UNIQUE COUNT" +column is_sqlid_current format a7 heading "IS|SQLID|CURRENT" &_IF_ORA112_OR_HIGHERP.print +column in_connection_mgmt format a7 heading "IN|CONNECT|MGMT" &_IF_ORA11_OR_HIGHERP.print +column in_parse format a7 heading "IN|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_hard_parse format a7 heading "IN|HARD|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_sql_execution format a7 heading "IN|SQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_execution format a7 heading "IN|PLSQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_rpc format a7 heading "IN|PLSQL|RPC" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_compilation format a7 heading "IN|PLSQL|COMP" &_IF_ORA11_OR_HIGHERP.print +column in_java_execution format a7 heading "IN|JAVA|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_bind format a7 heading "IN|BIND" &_IF_ORA11_OR_HIGHERP.print +column in_cursor_close format a7 heading "IN|CURSOR|CLOSE" &_IF_ORA11_OR_HIGHERP.print +column in_sequence_load format a7 heading "IN|SEQ|LOAD" &_IF_ORA112_OR_HIGHERP.print + +break on instance_id skip 1 + +with /* XPLAN_ASH ASH_SESSION_SUMMARY_OTHER_ACTIVITY SQL_ID: &si */ +ash_base as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +/* Instances found in ASH sample data */ +instance_data +as +( + select + distinct + instance_id + from + ash_base +), +/* Simply the cartesian product of timeline and instances */ +/* Our driving rowsource */ +timeline_inst +as +( + select + t.timeline as sample_time + , i.instance_id as instance_id + , t.sql_exec_start + -- Buckets of the official timeline + , bucket + , duration_secs +-- , trunc(round((t.timeline - t.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as bucket +-- , round((t.timeline - t.sql_exec_start) * 86400) + &sample_freq as duration_secs + from + timeline t + , instance_data i +), +ash_base_other as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time + , sql_id + , case + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- when regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) is null + when regexp_instr(regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c'), '^P[[:alnum:]][[:alnum:]][[:alnum:]]$') != 1 + then null + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- else &inst_id || '-' || regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) + else &inst_id || '-' || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') + end as process + , case when session_state = 'ON CPU' then 1 else 0 end as is_on_cpu + , coalesce(program, 'NULL') as program + , session_id + , session_serial# + , xid +&_IF_ORA11_OR_HIGHER , sql_id || '|' || to_char(ash.sql_exec_start, 'DD.MM.YYYY HH24:MI:SS') || '|' || to_char(sql_exec_id, 'TM') as sql_exec_unique + , module + , action +&_IF_ORA112_OR_HIGHER , case when is_sqlid_current = 'Y' then 1 else 0 end as is_sqlid_current +&_IF_LOWER_THAN_ORA112 , 0 as is_sqlid_current +&_IF_ORA11_OR_HIGHER , case when in_connection_mgmt = 'Y' then 1 else 0 end as in_connection_mgmt +&_IF_LOWER_THAN_ORA11 , 0 as in_connection_mgmt +&_IF_ORA11_OR_HIGHER , case when in_parse = 'Y' then 1 else 0 end as in_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_parse +&_IF_ORA11_OR_HIGHER , case when in_hard_parse = 'Y' then 1 else 0 end as in_hard_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_hard_parse +&_IF_ORA11_OR_HIGHER , case when in_sql_execution = 'Y' then 1 else 0 end as in_sql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_sql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_execution = 'Y' then 1 else 0 end as in_plsql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_rpc = 'Y' then 1 else 0 end as in_plsql_rpc +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_rpc +&_IF_ORA11_OR_HIGHER , case when in_plsql_compilation = 'Y' then 1 else 0 end as in_plsql_compilation +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_compilation +&_IF_ORA11_OR_HIGHER , case when in_java_execution = 'Y' then 1 else 0 end as in_java_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_java_execution +&_IF_ORA11_OR_HIGHER , case when in_bind = 'Y' then 1 else 0 end as in_bind +&_IF_LOWER_THAN_ORA11 , 0 as in_bind +&_IF_ORA11_OR_HIGHER , case when in_cursor_close = 'Y' then 1 else 0 end as in_cursor_close +&_IF_LOWER_THAN_ORA11 , 0 as in_cursor_close +&_IF_ORA112_OR_HIGHER , case when in_sequence_load = 'Y' then 1 else 0 end as in_sequence_load +&_IF_LOWER_THAN_ORA112 , 0 as in_sequence_load +&_IF_ORA112_OR_HIGHER , nullif(pga_allocated, 0) as pga_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as pga_allocated +&_IF_ORA112_OR_HIGHER , nullif(temp_space_allocated, 0) as temp_space_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as temp_space_allocated + -- According to DELTA_TIME the time the previous sample took place + -- DELTA_TIME is only available from 11.2 on +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - dates.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - dates.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_ORA11_OR_HIGHER , ash.sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_exec_id + from + &global_ash ash + , dates + where + (lnnvl(sql_id = '&si') and &ash_pred1 &ash_pred2) + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + and &inst_id in + ( + select + distinct + &inst_id + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + ) +), +driver as +( + select + b.instance_id + , b.sample_time as timeline + , b.bucket + from + timeline_inst b +), +base_data as +( + select + count(a.sample_time) as active_sessions + , driver.timeline + , decode(grouping(driver.instance_id), 1, -1, driver.instance_id) as instance_id + from + driver + , ash_base_other a + where + a.ash_bucket (+) = driver.bucket + and a.instance_id (+) = driver.instance_id + group by +&_IS_SINGL_INSTANCE driver.instance_id +&_IS_CROSS_INSTANCE grouping sets(driver.instance_id, ()) + , driver.timeline + --order by + -- driver.instance_id + -- , driver.timeline +), +median_as as +( + select + instance_id + , median(active_sessions) as median_as + , stddev_samp(active_sessions) as stddev_as + , max(active_sessions) as max_as + , coalesce(min(case when active_sessions > 0 then active_sessions end), 0) as min_as + from + base_data + group by + instance_id +), +/* Outer join the ASH samples to the timeline / instance rowsource */ +ash_data as +( + /* The 11.2 ASH data has a DELTA_TIME indicator that allows telling how long the previous sample of that particular session was ago */ + /* This is expressed in the PREV_SAMPLE_TIME information calculated based on SAMPLE_TIME and DELTA_TIME */ + /* So for PGA/TEMP figures we can produce "artificial" rows for those sample_times where no actual sampling of that particular session took place */ + /* But according to DELTA_TIME that particular sample was still "valid" in the past */ + /* The purpose of this is to get a "smoother" picture of PGA/TEMP allocation for Parallel Execution where not every sample time */ + /* all involved Parallel Workers will be sampled */ + /* Since this results in a poorly performing outer range join, this is now divided into two parts */ + -- + /* Part one: The data that covers exactly one bucket can be equi-joined, no artificial rows here */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + , ash.pga_allocated + , ash.temp_space_allocated + , cast(to_char(null) as varchar2(1)) as artificial_indicator + from + timeline_inst t + , ash_base_other ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id + -- Rows that at most cover one bucket (or even fall within the same bucket) + and ash.ash_prev_bucket >= ash.ash_bucket - &sample_freq + --------- + union all + --------- + /* Part two: The data spanning more than a bucket needs to be range joined */ + /* But we can dramatically lower the size of the row source to join by restricting to those spanning more than a single bucket */ + /* Here the artificial rows will be generated */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + /* Only use remaining fields for those non-artificial rows (see below for an explanation) */ + , ash.pga_allocated + , ash.temp_space_allocated + , ash.artificial_indicator + from + timeline_inst t + , ( +&use_no_lateral select /*+ use_merge(ash dup) no_merge */ +&use_lateral select /*+ no_merge */ + ash.sample_time + , ash_bucket - lvl + &sample_freq as ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , ash.pga_allocated + , ash.temp_space_allocated + , ash.instance_id + , case when lvl > &sample_freq then 'Y' else null end as artificial_indicator + from + ash_base_other ash +&use_lateral , lateral(select level * &sample_freq as lvl from dual connect by level <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq) +&use_no_lateral , (select /*+ cardinality(1e5) */ level * &sample_freq as lvl from dual connect by level <= 1e5) dup + where + ash.ash_prev_bucket < ash.ash_bucket - &sample_freq +&use_no_lateral and dup.lvl <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq + --and ash_bucket - lvl + &sample_freq >= 0 + ) ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id +), +ash_pga_temp1 as +( + select + sum(pga_allocated) as pga_per_bucket + , sum(temp_space_allocated) as temp_per_bucket + , bucket + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + from + ash_data + group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , bucket +), +ash_pga_temp as +( + select + max(pga_per_bucket) as pga_mem + , max(temp_per_bucket) as temp_space + , instance_id + from + ash_pga_temp1 + group by + instance_id +), +ash_pga_temp_prefmt as +( + select + pga_mem + , trunc(log(2, abs(case pga_mem when 0 then 1 else pga_mem end))) as power_2_pga_mem + , trunc(mod(log(2, abs(case pga_mem when 0 then 1 else pga_mem end)) ,10)) as power_2_pga_mem_mod_10 + , temp_space + , trunc(log(2, abs(case temp_space when 0 then 1 else temp_space end))) as power_2_temp_space + , trunc(mod(log(2, abs(case temp_space when 0 then 1 else temp_space end)), 10)) as power_2_temp_space_mod_10 + , instance_id + from + ash_pga_temp +), +ash_pga_temp_fmt as +( + select + to_char(round(pga_mem / power(2, power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end)), 'FM99999') || + case power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when pga_mem is null + then null + else '*2^'||to_char(power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end) + end + end as pga_mem_format + , to_char(round(temp_space / power(2, power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end)), 'FM99999') || + case power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when temp_space is null + then null + else '*2^'||to_char(power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end) + end + end as temp_space_format + , instance_id + from + ash_pga_temp_prefmt +) +select /* XPLAN_ASH ASH_SESSION_SUMMARY_OTHER_ACTIVITY SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + nullif(a.instance_id, -1) as instance_id + , duration_secs_t + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs_t, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs_t, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration_t + , duration_secs + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration + , sample_count + , cpu_sample_count + , round(cpu_sample_count / sample_count * 100) as percentage_cpu + , case when average_as_t >= &rnd_thr then round(average_as_t) else average_as_t end as average_as_t + , case when average_as >= &rnd_thr then round(average_as) else average_as end as average_as + , case when median_as >= &rnd_thr then round(median_as) else round(median_as, 1) end as median_as + , case when max_as >= &rnd_thr then round(max_as) else round(max_as, 1) end as max_as + , case when min_as >= &rnd_thr then round(min_as) else round(min_as, 1) end as min_as + , case when stddev_as >= &rnd_thr then round(stddev_as) else round(stddev_as, 1) end as stddev_as + , lpad(ash_pga_temp_fmt.pga_mem_format, 10) as pga + , lpad(ash_pga_temp_fmt.temp_space_format, 10) as temp + , slave_count as px_worker_count + , slave_unique_count as px_worker_unique_count + , process_count + , transact_count + , sql_id_count +&_IF_ORA11_OR_HIGHER , sql_execution_count + , module_count + , action_count + , lpad(to_char(round(is_sqlid_current / sample_count * 100), 'TM'), 6) || '%' as is_sqlid_current + , lpad(to_char(round(in_connection_mgmt / sample_count * 100), 'TM'), 6) || '%' as in_connection_mgmt + , lpad(to_char(round(in_parse / sample_count * 100), 'TM'), 6) || '%' as in_parse + , lpad(to_char(round(in_hard_parse / sample_count * 100), 'TM'), 6) || '%' as in_hard_parse + , lpad(to_char(round(in_sql_execution / sample_count * 100), 'TM'), 6) || '%' as in_sql_execution + , lpad(to_char(round(in_plsql_execution / sample_count * 100), 'TM'), 6) || '%' as in_plsql_execution + , lpad(to_char(round(in_plsql_rpc / sample_count * 100), 'TM'), 6) || '%' as in_plsql_rpc + , lpad(to_char(round(in_plsql_compilation / sample_count * 100), 'TM'), 6) || '%' as in_plsql_compilation + , lpad(to_char(round(in_java_execution / sample_count * 100), 'TM'), 6) || '%' as in_java_execution + , lpad(to_char(round(in_bind / sample_count * 100), 'TM'), 6) || '%' as in_bind + , lpad(to_char(round(in_cursor_close / sample_count * 100), 'TM'), 6) || '%' as in_cursor_close + , lpad(to_char(round(in_sequence_load / sample_count * 100), 'TM'), 6) || '%' as in_sequence_load +from + ( + select + decode(grouping(a.instance_id), 1, -1, a.instance_id) as instance_id + , count(*) as sample_count + , round(max(ash_bucket) - min(ash_bucket) + &sample_freq) as duration_secs_t + , count(distinct ash_bucket) * &sample_freq as duration_secs + , round(count(*) / nullif(cast(to_number('&ds') as number), 0) * &sample_freq, 1) as average_as_t + --, count(*) / (((b.max_sample_time - b.min_sample_time) * 86400) + &sample_freq) * &sample_freq as average_as + --, round(count(*) / nullif(coalesce(to_number(trim('&dist_sample_count')), 0), 0), 1) as average_as + , round(count(*) / nullif(count(distinct ash_bucket), 0), 1) as average_as + -- This can be used if getting dist_sample_count causes problems on 11.2.0.1 above + --, round(count(*) / nullif(round(cast(to_number('&ds') as number) / &sample_freq), 0), 1) as average_as + , sum(is_on_cpu) as cpu_sample_count + , count(distinct process) as slave_count + , count(distinct case when process is not null then process || '-' || session_id || '-' || session_serial# end) as slave_unique_count + , count(distinct program) as process_count + , count(distinct xid) as transact_count + , count(distinct coalesce(sql_id, 'NULL')) as sql_id_count +&_IF_ORA11_OR_HIGHER , count(distinct sql_exec_unique) as sql_execution_count + , count(distinct module) as module_count + , count(distinct action) as action_count + , sum(is_sqlid_current) as is_sqlid_current + , sum(in_connection_mgmt) as in_connection_mgmt + , sum(in_parse) as in_parse + , sum(in_hard_parse) as in_hard_parse + , sum(in_sql_execution) as in_sql_execution + , sum(in_plsql_execution) as in_plsql_execution + , sum(in_plsql_rpc) as in_plsql_rpc + , sum(in_plsql_compilation) as in_plsql_compilation + , sum(in_java_execution) as in_java_execution + , sum(in_bind) as in_bind + , sum(in_cursor_close) as in_cursor_close + , sum(in_sequence_load) as in_sequence_load + from + ash_base_other a + where + instr('&op', 'ASH') > 0 + -- This prevents the aggregate functions to produce a single row + -- in case of no rows generated to aggregate + group by +&_IS_SINGL_INSTANCE a.instance_id +&_IS_CROSS_INSTANCE grouping sets(a.instance_id, ()) + ) a + , ash_pga_temp_fmt + , median_as m +where + a.instance_id = ash_pga_temp_fmt.instance_id +and a.instance_id = m.instance_id +order by + instance_id nulls first +; + +column instance_id clear +column sample_count clear +column pga clear +column temp clear + +column duration_secs_t clear +column duration_t clear +column duration_secs clear +column duration clear +column average_as_t clear +column average_as clear +column median_as clear +column stddev_as clear +column max_as clear +column min_as clear + +column is_sqlid_current clear +column in_connection_mgmt clear +column in_parse clear +column in_hard_parse clear +column in_sql_execution clear +column in_plsql_execution clear +column in_plsql_rpc clear +column in_plsql_compilation clear +column in_java_execution clear +column in_bind clear +column in_cursor_close clear +column in_sequence_load clear + +column px_worker_count clear +column px_worker_unique_count clear + +clear breaks + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and '&ca_sc' is null +--------- +union all +--------- +select + 'No other activity detected' as message +from + dual +where + instr('&op', 'ASH') > 0 +and '&ca_sc' is null +; + +column message clear + +set heading on + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and '&ca_sc' is not null +--------- +union all +--------- +select + 'Other activity details' as message +from + dual +where + instr('&op', 'ASH') > 0 +and '&ca_sc' is not null +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and '&ca_sc' is not null +; + +column message clear + +set heading on + +/* Detailed information on this session's other activity based on ASH */ + +column first_sample format a19 +column last_sample format a19 +column time_active_graph format a&tgs +column duration_secs_t heading "DURATION SECS|TOTAL" +column duration_t heading "DURATION|TOTAL" +column duration_secs heading "DURATION SECS|ACTIVE" +column duration heading "DURATION|ACTIVE" +column average_as_t heading "AVERAGE AS|TOTAL" +column average_as heading "AVERAGE AS|ACTIVE" +column median_as heading "MEDIAN AS" +column stddev_as heading "AVERAGE AS|STDDEV" +column max_as heading "AVERAGE AS|MAX" +column min_as heading "AVERAGE AS|ACTIVE MIN" +--column pga format a10 heading "MAX_PGA" &_IF_ORA112_OR_HIGHERP.print +--column temp format a10 heading "MAX_TEMP" &_IF_ORA112_OR_HIGHERP.print +-- For the time being, do not print PGA/TEMP as it is more confusing that helpful if you don't know what it is based on +column pga format a10 heading "MAX_PGA" noprint +column temp format a10 heading "MAX_TEMP" noprint +column px_worker_count heading "PX WORKER|COUNT" +column px_worker_unique_count heading "PX WORKER|UNIQUE COUNT" +column instance_id &_IF_CROSS_INSTANCE.print null "GLOBAL" +column is_sqlid_current format a7 heading "IS|SQLID|CURRENT" &_IF_ORA112_OR_HIGHERP.print +column in_connection_mgmt format a7 heading "IN|CONNECT|MGMT" &_IF_ORA11_OR_HIGHERP.print +column in_parse format a7 heading "IN|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_hard_parse format a7 heading "IN|HARD|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_sql_execution format a7 heading "IN|SQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_execution format a7 heading "IN|PLSQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_rpc format a7 heading "IN|PLSQL|RPC" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_compilation format a7 heading "IN|PLSQL|COMP" &_IF_ORA11_OR_HIGHERP.print +column in_java_execution format a7 heading "IN|JAVA|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_bind format a7 heading "IN|BIND" &_IF_ORA11_OR_HIGHERP.print +column in_cursor_close format a7 heading "IN|CURSOR|CLOSE" &_IF_ORA11_OR_HIGHERP.print +column in_sequence_load format a7 heading "IN|SEQ|LOAD" &_IF_ORA112_OR_HIGHERP.print +column top_level_sql_id format a16 heading "TOP_LEVEL_SQL_ID" &_IF_ORA11_OR_HIGHERP.print + +break on instance_id skip 1 + +with /* XPLAN_ASH ASH_SESSION_DETAILS_OTHER_ACTIVITY SQL_ID: &si */ +ash_base as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and '&ca_sc' is not null + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +/* Instances found in ASH sample data */ +instance_data +as +( + select + distinct + instance_id + from + ash_base +), +/* Simply the cartesian product of timeline and instances */ +/* Our driving rowsource */ +timeline_inst +as +( + select + t.timeline as sample_time + , i.instance_id as instance_id + , t.sql_exec_start + -- Buckets of the official timeline + , bucket + , duration_secs +-- , trunc(round((t.timeline - t.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as bucket +-- , round((t.timeline - t.sql_exec_start) * 86400) + &sample_freq as duration_secs + from + timeline t + , instance_data i +), +ash_base_other as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time + , coalesce(sql_id, 'NULL') as sql_id + , case + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- when regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) is null + when regexp_instr(regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c'), '^P[[:alnum:]][[:alnum:]][[:alnum:]]$') != 1 + then null + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- else &inst_id || '-' || regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) + else &inst_id || '-' || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') + end as process + , session_id + , session_serial# + , case when session_state = 'ON CPU' then 1 else 0 end as is_on_cpu +&_IF_ORA11_OR_HIGHER , top_level_sql_id +&_IF_ORA112_OR_HIGHER , case when is_sqlid_current = 'Y' then 1 else 0 end as is_sqlid_current +&_IF_LOWER_THAN_ORA112 , 0 as is_sqlid_current +&_IF_ORA11_OR_HIGHER , case when in_connection_mgmt = 'Y' then 1 else 0 end as in_connection_mgmt +&_IF_LOWER_THAN_ORA11 , 0 as in_connection_mgmt +&_IF_ORA11_OR_HIGHER , case when in_parse = 'Y' then 1 else 0 end as in_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_parse +&_IF_ORA11_OR_HIGHER , case when in_hard_parse = 'Y' then 1 else 0 end as in_hard_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_hard_parse +&_IF_ORA11_OR_HIGHER , case when in_sql_execution = 'Y' then 1 else 0 end as in_sql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_sql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_execution = 'Y' then 1 else 0 end as in_plsql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_rpc = 'Y' then 1 else 0 end as in_plsql_rpc +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_rpc +&_IF_ORA11_OR_HIGHER , case when in_plsql_compilation = 'Y' then 1 else 0 end as in_plsql_compilation +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_compilation +&_IF_ORA11_OR_HIGHER , case when in_java_execution = 'Y' then 1 else 0 end as in_java_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_java_execution +&_IF_ORA11_OR_HIGHER , case when in_bind = 'Y' then 1 else 0 end as in_bind +&_IF_LOWER_THAN_ORA11 , 0 as in_bind +&_IF_ORA11_OR_HIGHER , case when in_cursor_close = 'Y' then 1 else 0 end as in_cursor_close +&_IF_LOWER_THAN_ORA11 , 0 as in_cursor_close +&_IF_ORA112_OR_HIGHER , case when in_sequence_load = 'Y' then 1 else 0 end as in_sequence_load +&_IF_LOWER_THAN_ORA112 , 0 as in_sequence_load +&_IF_ORA112_OR_HIGHER , nullif(pga_allocated, 0) as pga_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as pga_allocated +&_IF_ORA112_OR_HIGHER , nullif(temp_space_allocated, 0) as temp_space_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as temp_space_allocated + -- According to DELTA_TIME the time the previous sample took place + -- DELTA_TIME is only available from 11.2 on +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - dates.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - dates.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_ORA11_OR_HIGHER , ash.sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_exec_id + from + &global_ash ash + , dates + where + (lnnvl(sql_id = '&si') and &ash_pred1 &ash_pred2) + and '&ca_sc' is not null + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + and &inst_id in + ( + select + distinct + &inst_id + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and '&ca_sc' is not null + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + ) +), +driver as +( + select + b.instance_id + , ash_sql_ids.sql_id + , b.sample_time as timeline + , b.bucket + from + timeline_inst b, (select distinct sql_id from ash_base_other) ash_sql_ids +), +base_data as +( + select + case when count(a.sample_time) > 0 then '&gc3' else ' ' end as act_ind + , count(a.sample_time) as active_sessions + , driver.sql_id + , driver.timeline + , decode(grouping(driver.instance_id), 1, -1, driver.instance_id) as instance_id + from + driver + , ash_base_other a + where + a.ash_bucket (+) = driver.bucket + and a.instance_id (+) = driver.instance_id + and a.sql_id (+) = driver.sql_id + group by +&_IS_SINGL_INSTANCE driver.instance_id +&_IS_CROSS_INSTANCE grouping sets(driver.instance_id, ()) + , driver.sql_id + , driver.timeline + --order by + -- driver.instance_id + -- , driver.timeline +), +bucket_data as +( + select + ntile(&tgs) over (partition by instance_id, sql_id order by timeline) as bucket + , x.* + from + base_data x + -- In case we have less sample times as size of the Time Active Graph + -- this here will duplicate the data accordingly + , (select /*+ cardinality(&duplicator) */ null from dual connect by level <= to_number(trim('&duplicator'))) dups +), +grouped_buckets as +( + select + max(act_ind) as act_ind + , bucket + , instance_id + , sql_id + from + bucket_data + group by + instance_id + , sql_id + , bucket +-- order by +-- instance_id +-- , bucket +), +time_active_graph as +( + select + instance_id + , sql_id +&_IF_ORA112_OR_HIGHER , listagg(act_ind) within group (order by bucket) as time_active_graph + /* leading spaces are trimmed by the XML operation, hence we need to temporarily replace them with something else */ +&_IF_LOWER_THAN_ORA112 , replace(extract(xmlagg(xmlelement("V", replace(act_ind, ' ', '?')) order by bucket), '/V/text()').getstringval(), '?', ' ') as time_active_graph + from + grouped_buckets + group by + instance_id + , sql_id +-- order by +-- instance_id +), +/* Outer join the ASH samples to the timeline / instance rowsource */ +ash_data as +( + /* The 11.2 ASH data has a DELTA_TIME indicator that allows telling how long the previous sample of that particular session was ago */ + /* This is expressed in the PREV_SAMPLE_TIME information calculated based on SAMPLE_TIME and DELTA_TIME */ + /* So for PGA/TEMP figures we can produce "artificial" rows for those sample_times where no actual sampling of that particular session took place */ + /* But according to DELTA_TIME that particular sample was still "valid" in the past */ + /* The purpose of this is to get a "smoother" picture of PGA/TEMP allocation for Parallel Execution where not every sample time */ + /* all involved Parallel Workers will be sampled */ + /* Since this results in a poorly performing outer range join, this is now divided into two parts */ + -- + /* Part one: The data that covers exactly one bucket can be equi-joined, no artificial rows here */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + , ash.pga_allocated + , ash.temp_space_allocated + , ash.sql_id + , cast(to_char(null) as varchar2(1)) as artificial_indicator + from + timeline_inst t + , ash_base_other ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id + -- Rows that at most cover one bucket (or even fall within the same bucket) + and ash.ash_prev_bucket >= ash.ash_bucket - &sample_freq + --------- + union all + --------- + /* Part two: The data spanning more than a bucket needs to be range joined */ + /* But we can dramatically lower the size of the row source to join by restricting to those spanning more than a single bucket */ + /* Here the artificial rows will be generated */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + /* Only use remaining fields for those non-artificial rows (see below for an explanation) */ + , ash.pga_allocated + , ash.temp_space_allocated + , ash.sql_id + , ash.artificial_indicator + from + timeline_inst t + , ( +&use_no_lateral select /*+ use_merge(ash dup) no_merge */ +&use_lateral select /*+ no_merge */ + ash.sample_time + , ash_bucket - lvl + &sample_freq as ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , ash.pga_allocated + , ash.temp_space_allocated + , ash.instance_id + , ash.sql_id + , case when lvl > &sample_freq then 'Y' else null end as artificial_indicator + from + ash_base_other ash +&use_lateral , lateral(select level * &sample_freq as lvl from dual connect by level <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq) +&use_no_lateral , (select /*+ cardinality(1e5) */ level * &sample_freq as lvl from dual connect by level <= 1e5) dup + where + ash.ash_prev_bucket < ash.ash_bucket - &sample_freq +&use_no_lateral and dup.lvl <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq + --and ash_bucket - lvl + &sample_freq >= 0 + ) ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id +), +ash_pga_temp1 as +( + select + sum(pga_allocated) as pga_per_bucket + , sum(temp_space_allocated) as temp_per_bucket + , bucket + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , sql_id + from + ash_data + group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , sql_id + , bucket +), +ash_pga_temp as +( + select + max(pga_per_bucket) as pga_mem + , max(temp_per_bucket) as temp_space + , instance_id + , sql_id + from + ash_pga_temp1 + group by + instance_id + , sql_id +), +ash_pga_temp_prefmt as +( + select + pga_mem + , trunc(log(2, abs(case pga_mem when 0 then 1 else pga_mem end))) as power_2_pga_mem + , trunc(mod(log(2, abs(case pga_mem when 0 then 1 else pga_mem end)) ,10)) as power_2_pga_mem_mod_10 + , temp_space + , trunc(log(2, abs(case temp_space when 0 then 1 else temp_space end))) as power_2_temp_space + , trunc(mod(log(2, abs(case temp_space when 0 then 1 else temp_space end)), 10)) as power_2_temp_space_mod_10 + , instance_id + , sql_id + from + ash_pga_temp +), +ash_pga_temp_fmt as +( + select + to_char(round(pga_mem / power(2, power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end)), 'FM99999') || + case power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when pga_mem is null + then null + else '*2^'||to_char(power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end) + end + end as pga_mem_format + , to_char(round(temp_space / power(2, power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end)), 'FM99999') || + case power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when temp_space is null + then null + else '*2^'||to_char(power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end) + end + end as temp_space_format + , instance_id + , sql_id + from + ash_pga_temp_prefmt +), +median_as as +( + select + instance_id + , sql_id + , median(active_sessions) as median_as + , stddev_samp(active_sessions) as stddev_as + , max(active_sessions) as max_as + , coalesce(min(case when active_sessions > 0 then active_sessions end), 0) as min_as + from + ( + select + sample_time + , sql_id + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , count(*) as active_sessions + from + ash_base_other + group by + sample_time +&_IS_SINGL_INSTANCE , instance_id +&_IS_CROSS_INSTANCE , grouping sets(instance_id, ()) + , sql_id + ) + group by + instance_id + , sql_id +) +select /* XPLAN_ASH ASH_SESSION_DETAILS_OTHER_ACTIVITY SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + nullif(a.instance_id, -1) as instance_id + , a.sql_id + , coalesce(sql.sql_text, '') as sql_text +&_IF_ORA11_OR_HIGHER , a.top_level_sql_id + , first_sample + , last_sample + , start_active + , duration_secs_t + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs_t, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs_t, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration_t + , duration_secs + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration + , sample_count + , cpu_sample_count + , round(cpu_sample_count / sample_count * 100) as percentage_cpu + , slave_count as px_worker_count + , slave_unique_count as px_worker_unique_count + , case when average_as_t >= &rnd_thr then round(average_as_t) else average_as_t end as average_as_t + , case when average_as >= &rnd_thr then round(average_as) else average_as end as average_as + , case when median_as >= &rnd_thr then round(median_as) else round(median_as, 1) end as median_as + , case when max_as >= &rnd_thr then round(max_as) else round(max_as, 1) end as max_as + , case when min_as >= &rnd_thr then round(min_as) else round(min_as, 1) end as min_as + , case when stddev_as >= &rnd_thr then round(stddev_as) else round(stddev_as, 1) end as stddev_as + , lpad(pt.pga_mem_format, 10) as pga + , lpad(pt.temp_space_format, 10) as temp + --, substr(rpad(' ', round(start_active / to_number('&ds') * &tgs)) || rpad('&gc3', round(duration_secs / to_number('&ds') * &tgs), '&gc3'), 1, &tgs) as time_active_graph + , t.time_active_graph + , lpad(to_char(round(is_sqlid_current / sample_count * 100), 'TM'), 6) || '%' as is_sqlid_current + , lpad(to_char(round(in_connection_mgmt / sample_count * 100), 'TM'), 6) || '%' as in_connection_mgmt + , lpad(to_char(round(in_parse / sample_count * 100), 'TM'), 6) || '%' as in_parse + , lpad(to_char(round(in_hard_parse / sample_count * 100), 'TM'), 6) || '%' as in_hard_parse + , lpad(to_char(round(in_sql_execution / sample_count * 100), 'TM'), 6) || '%' as in_sql_execution + , lpad(to_char(round(in_plsql_execution / sample_count * 100), 'TM'), 6) || '%' as in_plsql_execution + , lpad(to_char(round(in_plsql_rpc / sample_count * 100), 'TM'), 6) || '%' as in_plsql_rpc + , lpad(to_char(round(in_plsql_compilation / sample_count * 100), 'TM'), 6) || '%' as in_plsql_compilation + , lpad(to_char(round(in_java_execution / sample_count * 100), 'TM'), 6) || '%' as in_java_execution + , lpad(to_char(round(in_bind / sample_count * 100), 'TM'), 6) || '%' as in_bind + , lpad(to_char(round(in_cursor_close / sample_count * 100), 'TM'), 6) || '%' as in_cursor_close + , lpad(to_char(round(in_sequence_load / sample_count * 100), 'TM'), 6) || '%' as in_sequence_load +from + ( + select + decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , min(instance_id) as min_instance_id + , sql_id + , to_char(min(sample_time), '&dm') as first_sample + , to_char(max(sample_time), '&dm') as last_sample + , round(min(ash_bucket) + &sample_freq) as start_active + , round(max(ash_bucket) - min(ash_bucket) + &sample_freq) as duration_secs_t + , count(distinct ash_bucket) * &sample_freq as duration_secs + , count(*) as sample_count + , count(distinct process) as slave_count + , count(distinct case when process is not null then process || '-' || session_id || '-' || session_serial# end) as slave_unique_count + , sum(is_on_cpu) as cpu_sample_count + , round(count(*) / nullif((max(ash_bucket) - min(ash_bucket) + &sample_freq) / &sample_freq, 0), 1) as average_as_t + , round(count(*) / nullif(count(distinct ash_bucket), 0), 1) as average_as +&_IF_ORA11_OR_HIGHER , nvl(max(top_level_sql_id), 'NULL') as top_level_sql_id + , sum(is_sqlid_current) as is_sqlid_current + , sum(in_connection_mgmt) as in_connection_mgmt + , sum(in_parse) as in_parse + , sum(in_hard_parse) as in_hard_parse + , sum(in_sql_execution) as in_sql_execution + , sum(in_plsql_execution) as in_plsql_execution + , sum(in_plsql_rpc) as in_plsql_rpc + , sum(in_plsql_compilation) as in_plsql_compilation + , sum(in_java_execution) as in_java_execution + , sum(in_bind) as in_bind + , sum(in_cursor_close) as in_cursor_close + , sum(in_sequence_load) as in_sequence_load + from + ash_base_other a + , dates + where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) + and '&ca_sc' is not null + group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , sql_id + , dates.sql_exec_start + ) a + , ash_pga_temp_fmt pt + , time_active_graph t + , median_as m + , ( + select + sql_id + , &sqltext_join_col + , cast(substr(sql_text, 1, 80) as varchar2(80)) as sql_text + from + &sqltext p + --where + -- &third_id_sqltext + ) sql +where + a.sql_id = pt.sql_id +and a.instance_id = pt.instance_id +and a.sql_id = t.sql_id +and a.instance_id = t.instance_id +and a.sql_id = m.sql_id +and a.instance_id = m.instance_id +and a.sql_id = sql.sql_id (+) +and &sqltext_join +order by + instance_id nulls first + , a.sample_count desc +; + +column first_sample clear +column last_sample clear +column time_active_graph clear +column pga clear +column temp clear +column instance_id clear + +column duration_secs_t clear +column duration_t clear +column duration_secs clear +column duration clear +column average_as_t clear +column average_as clear +column median_as clear +column stddev_as clear +column max_as clear +column min_as clear + +column is_sqlid_current clear +column in_connection_mgmt clear +column in_parse clear +column in_hard_parse clear +column in_sql_execution clear +column in_plsql_execution clear +column in_plsql_rpc clear +column in_plsql_compilation clear +column in_java_execution clear +column in_bind clear +column in_cursor_close clear +column in_sequence_load clear + +column px_worker_count clear +column px_worker_unique_count clear +column top_level_sql_id clear + +clear breaks + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +--------- +union all +--------- +select + 'Global ASH Summary for concurrent activity' as message +from + dual +where + instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +; + +column message clear + +set heading on + +/* Summary information for concurrent activity based on ASH */ + +define ca_sc = "" + +column instance_id &_IF_CROSS_INSTANCE.print null "GLOBAL" +column sample_count new_value ca_sc +column average_as_t heading "AVERAGE AS|TOTAL" +column average_as heading "AVERAGE AS|ACTIVE" +column median_as heading "MEDIAN AS" +column stddev_as heading "AVERAGE AS|STDDEV" +column max_as heading "AVERAGE AS|MAX" +column min_as heading "AVERAGE AS|ACTIVE MIN" +column px_worker_count heading "PX WORKER|COUNT" +column px_worker_unique_count heading "PX WORKER|UNIQUE COUNT" +column pga format a10 heading "MAX_PGA" &_IF_ORA112_OR_HIGHERP.print +column temp format a10 heading "MAX_TEMP" &_IF_ORA112_OR_HIGHERP.print +column is_sqlid_current format a7 heading "IS|SQLID|CURRENT" &_IF_ORA112_OR_HIGHERP.print +column in_connection_mgmt format a7 heading "IN|CONNECT|MGMT" &_IF_ORA11_OR_HIGHERP.print +column in_parse format a7 heading "IN|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_hard_parse format a7 heading "IN|HARD|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_sql_execution format a7 heading "IN|SQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_execution format a7 heading "IN|PLSQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_rpc format a7 heading "IN|PLSQL|RPC" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_compilation format a7 heading "IN|PLSQL|COMP" &_IF_ORA11_OR_HIGHERP.print +column in_java_execution format a7 heading "IN|JAVA|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_bind format a7 heading "IN|BIND" &_IF_ORA11_OR_HIGHERP.print +column in_cursor_close format a7 heading "IN|CURSOR|CLOSE" &_IF_ORA11_OR_HIGHERP.print +column in_sequence_load format a7 heading "IN|SEQ|LOAD" &_IF_ORA112_OR_HIGHERP.print + +with /* XPLAN_ASH GLOBAL_ASH_SUMMARY_CONCURRENT_EXECUTION SQL_ID: &si */ +ash_base as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and instr('&op', 'ASH') > 0 + and instr('&op', 'LIMITED_ASH') = 0 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +/* Instances found in ASH sample data */ +instance_data +as +( + select + distinct + instance_id + from + ash_base +), +/* Simply the cartesian product of timeline and instances */ +/* Our driving rowsource */ +timeline_inst +as +( + select + t.timeline as sample_time + , i.instance_id as instance_id + , t.sql_exec_start + -- Buckets of the official timeline + , bucket + , duration_secs +-- , trunc(round((t.timeline - t.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as bucket +-- , round((t.timeline - t.sql_exec_start) * 86400) + &sample_freq as duration_secs + from + timeline t + , instance_data i +), +ash_base_conc as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time + , sql_id + , case + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- when regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) is null + when regexp_instr(regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c'), '^P[[:alnum:]][[:alnum:]][[:alnum:]]$') != 1 or session_type != 'FOREGROUND' or program is null + then null + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- else &inst_id || '-' || regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) + else &inst_id || '-' || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') + end as process + , session_id + , session_serial# + , case when session_state = 'ON CPU' then 1 else 0 end as is_on_cpu + , case when session_type = 'FOREGROUND' then 1 else null end as is_foreground + , case when session_type = 'BACKGROUND' then 1 else null end as is_background +&_IF_ORA112_OR_HIGHER , case when is_sqlid_current = 'Y' then 1 else 0 end as is_sqlid_current +&_IF_LOWER_THAN_ORA112 , 0 as is_sqlid_current +&_IF_ORA11_OR_HIGHER , case when in_connection_mgmt = 'Y' then 1 else 0 end as in_connection_mgmt +&_IF_LOWER_THAN_ORA11 , 0 as in_connection_mgmt +&_IF_ORA11_OR_HIGHER , case when in_parse = 'Y' then 1 else 0 end as in_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_parse +&_IF_ORA11_OR_HIGHER , case when in_hard_parse = 'Y' then 1 else 0 end as in_hard_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_hard_parse +&_IF_ORA11_OR_HIGHER , case when in_sql_execution = 'Y' then 1 else 0 end as in_sql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_sql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_execution = 'Y' then 1 else 0 end as in_plsql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_rpc = 'Y' then 1 else 0 end as in_plsql_rpc +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_rpc +&_IF_ORA11_OR_HIGHER , case when in_plsql_compilation = 'Y' then 1 else 0 end as in_plsql_compilation +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_compilation +&_IF_ORA11_OR_HIGHER , case when in_java_execution = 'Y' then 1 else 0 end as in_java_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_java_execution +&_IF_ORA11_OR_HIGHER , case when in_bind = 'Y' then 1 else 0 end as in_bind +&_IF_LOWER_THAN_ORA11 , 0 as in_bind +&_IF_ORA11_OR_HIGHER , case when in_cursor_close = 'Y' then 1 else 0 end as in_cursor_close +&_IF_LOWER_THAN_ORA11 , 0 as in_cursor_close +&_IF_ORA112_OR_HIGHER , case when in_sequence_load = 'Y' then 1 else 0 end as in_sequence_load +&_IF_LOWER_THAN_ORA112 , 0 as in_sequence_load +&_IF_ORA112_OR_HIGHER , machine + , coalesce(program, 'NULL') as program + , xid +&_IF_ORA11_OR_HIGHER , sql_id || '|' || to_char(ash.sql_exec_start, 'DD.MM.YYYY HH24:MI:SS') || '|' || to_char(sql_exec_id, 'TM') as sql_exec_unique + , module + , action +&_IF_ORA112_OR_HIGHER , nullif(pga_allocated, 0) as pga_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as pga_allocated +&_IF_ORA112_OR_HIGHER , nullif(temp_space_allocated, 0) as temp_space_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as temp_space_allocated + -- According to DELTA_TIME the time the previous sample took place + -- DELTA_TIME is only available from 11.2 on +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - dates.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - dates.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_ORA11_OR_HIGHER , ash.sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_exec_id + from + &global_ash ash + , dates + where + (&ash_ln_pred1 &ash_ln_pred2) + and instr('&op', 'ASH') > 0 + and instr('&op', 'LIMITED_ASH') = 0 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + and &inst_id in + ( + select + distinct + &inst_id + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + ) +), +driver as +( + select + b.instance_id + , b.sample_time as timeline + , b.bucket + from + timeline_inst b +), +base_data as +( + select + count(a.sample_time) as active_sessions + , driver.timeline + , decode(grouping(driver.instance_id), 1, -1, driver.instance_id) as instance_id + from + driver + , ash_base_conc a + where + a.ash_bucket (+) = driver.bucket + and a.instance_id (+) = driver.instance_id + group by +&_IS_SINGL_INSTANCE driver.instance_id +&_IS_CROSS_INSTANCE grouping sets(driver.instance_id, ()) + , driver.timeline + --order by + -- driver.instance_id + -- , driver.timeline +), +median_as as +( + select + instance_id + , median(active_sessions) as median_as + , stddev_samp(active_sessions) as stddev_as + , max(active_sessions) as max_as + , coalesce(min(case when active_sessions > 0 then active_sessions end), 0) as min_as + from + base_data + group by + instance_id +), +/* Outer join the ASH samples to the timeline / instance rowsource */ +ash_data as +( + /* The 11.2 ASH data has a DELTA_TIME indicator that allows telling how long the previous sample of that particular session was ago */ + /* This is expressed in the PREV_SAMPLE_TIME information calculated based on SAMPLE_TIME and DELTA_TIME */ + /* So for PGA/TEMP figures we can produce "artificial" rows for those sample_times where no actual sampling of that particular session took place */ + /* But according to DELTA_TIME that particular sample was still "valid" in the past */ + /* The purpose of this is to get a "smoother" picture of PGA/TEMP allocation for Parallel Execution where not every sample time */ + /* all involved Parallel Workers will be sampled */ + /* Since this results in a poorly performing outer range join, this is now divided into two parts */ + -- + /* Part one: The data that covers exactly one bucket can be equi-joined, no artificial rows here */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + , ash.pga_allocated + , ash.temp_space_allocated + , cast(to_char(null) as varchar2(1)) as artificial_indicator + from + timeline_inst t + , ash_base_conc ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id + -- Rows that at most cover one bucket (or even fall within the same bucket) + and ash.ash_prev_bucket >= ash.ash_bucket - &sample_freq + --------- + union all + --------- + /* Part two: The data spanning more than a bucket needs to be range joined */ + /* But we can dramatically lower the size of the row source to join by restricting to those spanning more than a single bucket */ + /* Here the artificial rows will be generated */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + /* Only use remaining fields for those non-artificial rows (see below for an explanation) */ + , ash.pga_allocated + , ash.temp_space_allocated + , ash.artificial_indicator + from + timeline_inst t + , ( +&use_no_lateral select /*+ use_merge(ash dup) no_merge */ +&use_lateral select /*+ no_merge */ + ash.sample_time + , ash_bucket - lvl + &sample_freq as ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , ash.pga_allocated + , ash.temp_space_allocated + , ash.instance_id + , case when lvl > &sample_freq then 'Y' else null end as artificial_indicator + from + ash_base_conc ash +&use_lateral , lateral(select level * &sample_freq as lvl from dual connect by level <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq) +&use_no_lateral , (select /*+ cardinality(1e5) */ level * &sample_freq as lvl from dual connect by level <= 1e5) dup + where + ash.ash_prev_bucket < ash.ash_bucket - &sample_freq +&use_no_lateral and dup.lvl <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq + --and ash_bucket - lvl + &sample_freq >= 0 + ) ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id +), +ash_pga_temp1 as +( + select + sum(pga_allocated) as pga_per_bucket + , sum(temp_space_allocated) as temp_per_bucket + , bucket + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + from + ash_data + group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , bucket +), +ash_pga_temp as +( + select + max(pga_per_bucket) as pga_mem + , max(temp_per_bucket) as temp_space + , instance_id + from + ash_pga_temp1 + group by + instance_id +), +ash_pga_temp_prefmt as +( + select + pga_mem + , trunc(log(2, abs(case pga_mem when 0 then 1 else pga_mem end))) as power_2_pga_mem + , trunc(mod(log(2, abs(case pga_mem when 0 then 1 else pga_mem end)) ,10)) as power_2_pga_mem_mod_10 + , temp_space + , trunc(log(2, abs(case temp_space when 0 then 1 else temp_space end))) as power_2_temp_space + , trunc(mod(log(2, abs(case temp_space when 0 then 1 else temp_space end)), 10)) as power_2_temp_space_mod_10 + , instance_id + from + ash_pga_temp +), +ash_pga_temp_fmt as +( + select + to_char(round(pga_mem / power(2, power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end)), 'FM99999') || + case power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when pga_mem is null + then null + else '*2^'||to_char(power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end) + end + end as pga_mem_format + , to_char(round(temp_space / power(2, power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end)), 'FM99999') || + case power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when temp_space is null + then null + else '*2^'||to_char(power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end) + end + end as temp_space_format + , instance_id + from + ash_pga_temp_prefmt +) +select /* XPLAN_ASH GLOBAL_ASH_SUMMARY_CONCURRENT_EXECUTION SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + nullif(a.instance_id, -1) as instance_id + , sample_count + , cpu_sample_count + , round(cpu_sample_count / sample_count * 100) as percentage_cpu + , case when average_as_t >= &rnd_thr then round(average_as_t) else average_as_t end as average_as_t + , case when average_as >= &rnd_thr then round(average_as) else average_as end as average_as + , case when median_as >= &rnd_thr then round(median_as) else round(median_as, 1) end as median_as + , case when max_as >= &rnd_thr then round(max_as) else round(max_as, 1) end as max_as + , case when min_as >= &rnd_thr then round(min_as) else round(min_as, 1) end as min_as + , case when stddev_as >= &rnd_thr then round(stddev_as) else round(stddev_as, 1) end as stddev_as + , lpad(ash_pga_temp_fmt.pga_mem_format, 10) as pga + , lpad(ash_pga_temp_fmt.temp_space_format, 10) as temp + , foreground_count + , background_count + , slave_count as px_worker_count + , slave_unique_count as px_worker_unique_count +&_IF_ORA112_OR_HIGHER , client_count + , process_count + , transact_count + , sql_id_count +&_IF_ORA11_OR_HIGHER , sql_execution_count + , module_count + , action_count + , lpad(to_char(round(is_sqlid_current / sample_count * 100), 'TM'), 6) || '%' as is_sqlid_current + , lpad(to_char(round(in_connection_mgmt / sample_count * 100), 'TM'), 6) || '%' as in_connection_mgmt + , lpad(to_char(round(in_parse / sample_count * 100), 'TM'), 6) || '%' as in_parse + , lpad(to_char(round(in_hard_parse / sample_count * 100), 'TM'), 6) || '%' as in_hard_parse + , lpad(to_char(round(in_sql_execution / sample_count * 100), 'TM'), 6) || '%' as in_sql_execution + , lpad(to_char(round(in_plsql_execution / sample_count * 100), 'TM'), 6) || '%' as in_plsql_execution + , lpad(to_char(round(in_plsql_rpc / sample_count * 100), 'TM'), 6) || '%' as in_plsql_rpc + , lpad(to_char(round(in_plsql_compilation / sample_count * 100), 'TM'), 6) || '%' as in_plsql_compilation + , lpad(to_char(round(in_java_execution / sample_count * 100), 'TM'), 6) || '%' as in_java_execution + , lpad(to_char(round(in_bind / sample_count * 100), 'TM'), 6) || '%' as in_bind + , lpad(to_char(round(in_cursor_close / sample_count * 100), 'TM'), 6) || '%' as in_cursor_close + , lpad(to_char(round(in_sequence_load / sample_count * 100), 'TM'), 6) || '%' as in_sequence_load +from + ( + select + decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , count(*) as sample_count + , round(count(*) / nullif(cast(to_number('&ds') as number), 0) * &sample_freq, 1) as average_as_t + --, count(*) / (((b.max_sample_time - b.min_sample_time) * 86400) + &sample_freq) * &sample_freq as average_as + , round(count(*) / nullif(coalesce(to_number(trim('&dist_sample_count')), 0), 0), 1) as average_as + -- This can be used if getting dist_sample_count causes problems on 11.2.0.1 above + --, round(count(*) / nullif(round(cast(to_number('&ds') as number) / &sample_freq), 0), 1) as average_as + , sum(is_on_cpu) as cpu_sample_count + , count(distinct process) as slave_count + , count(distinct case when process is not null then process || '-' || session_id || '-' || session_serial# end) as slave_unique_count + , count(is_foreground) as foreground_count + , count(is_background) as background_count +&_IF_ORA112_OR_HIGHER , count(distinct machine) as client_count + , count(distinct program) as process_count + , count(distinct xid) as transact_count + , count(distinct sql_id) as sql_id_count +&_IF_ORA11_OR_HIGHER , count(distinct sql_exec_unique) as sql_execution_count + , count(distinct module) as module_count + , count(distinct action) as action_count + , sum(is_sqlid_current) as is_sqlid_current + , sum(in_connection_mgmt) as in_connection_mgmt + , sum(in_parse) as in_parse + , sum(in_hard_parse) as in_hard_parse + , sum(in_sql_execution) as in_sql_execution + , sum(in_plsql_execution) as in_plsql_execution + , sum(in_plsql_rpc) as in_plsql_rpc + , sum(in_plsql_compilation) as in_plsql_compilation + , sum(in_java_execution) as in_java_execution + , sum(in_bind) as in_bind + , sum(in_cursor_close) as in_cursor_close + , sum(in_sequence_load) as in_sequence_load + from + ash_base_conc a + where + instr('&op', 'ASH') > 0 + and instr('&op', 'LIMITED_ASH') = 0 + -- This prevents the aggregate functions to produce a single row + -- in case of no rows generated to aggregate + group by +&_IS_SINGL_INSTANCE a.instance_id +&_IS_CROSS_INSTANCE grouping sets(a.instance_id, ()) + ) a + , ash_pga_temp_fmt + , median_as m +where + a.instance_id = ash_pga_temp_fmt.instance_id +and a.instance_id = m.instance_id +order by + instance_id nulls first +; + +column instance_id clear +column sample_count clear +column average_as_t clear +column average_as clear +column median_as clear +column stddev_as clear +column max_as clear +column min_as clear +column pga clear +column temp clear + +column is_sqlid_current clear +column in_connection_mgmt clear +column in_parse clear +column in_hard_parse clear +column in_sql_execution clear +column in_plsql_execution clear +column in_plsql_rpc clear +column in_plsql_compilation clear +column in_java_execution clear +column in_bind clear +column in_cursor_close clear +column in_sequence_load clear + +column px_worker_count clear +column px_worker_unique_count clear + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +and '&ca_sc' is null +--------- +union all +--------- +select + 'No concurrent activity detected' as message +from + dual +where + instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +and '&ca_sc' is null +; + +column message clear + +set heading on + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and '&ca_sc' is not null +--------- +union all +--------- +select + 'Concurrent activity Summary (not this execution)' as message +from + dual +where + instr('&op', 'ASH') > 0 +and '&ca_sc' is not null +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and '&ca_sc' is not null +; + +column message clear + +set heading on + +-- If you need to debug, comment the following line +set termout off + +/* Determine if wait times should be shown or not (Bad ASH math, so don't show that by default) */ + +column show_wait_times new_value _SHOW_WAIT_TIMES &debug_internalp.print + +select + case when '&_EXPERIMENTAL' is null then '' else 'no' end as show_wait_times +from + dual +; + +column show_wait_times clear + +set termout on + +column instance_id &_IF_CROSS_INSTANCE.print null "GLOBAL" +column activity format a50 +column activity_class format a20 +column activity_graph format a&wgs +column avg_tim_wait_ms &_SHOW_WAIT_TIMES.print +column med_tim_wait_ms &_SHOW_WAIT_TIMES.print +column min_tim_wait_ms &_SHOW_WAIT_TIMES.print +column max_tim_wait_ms &_SHOW_WAIT_TIMES.print +break on instance_id skip 1 + +select /* XPLAN_ASH CONCURRENT_ACTIVITY_CONCURRENT_EXECUTION SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + instance_id + , activity + , activity_class + , round(avg(time_waited) / 1000, 1) as avg_tim_wait_ms + , round(median(time_waited) / 1000, 1) as med_tim_wait_ms + , round(min(time_waited) / 1000, 1) as min_tim_wait_ms + , round(max(time_waited) / 1000, 1) as max_tim_wait_ms + , count(*) as sample_count + , round(count(*) / total_cnt * 100) as percentage + , rpad('&gc3', nvl(round(count(*) / nullif(total_cnt, 0) * &wgs), 0), '&gc3') as activity_graph +from + ( + select + &inst_id as instance_id + , case when session_state = 'WAITING' then nvl(wait_class, '') else session_state +-- &_IF_ORA12102_OR_HIGHER || case when in_inmemory_query = 'Y' then ' INMEMORY' end + end as activity_class + , case when session_state = 'WAITING' then nvl(event, '') else session_state +&_IF_ORA12102_OR_HIGHER || case when in_inmemory_query = 'Y' then ' INMEMORY' end + end as activity + , case when session_state = 'WAITING' then nullif(time_waited, 0) else null end as time_waited + , count(*) over () as total_cnt + from + &global_ash ash + where + (&ash_ln_pred1 &ash_ln_pred2) + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + and &inst_id in + ( + select + distinct + &inst_id + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + ) + and instr('&op', 'ASH') > 0 + and '&ca_sc' is not null + ) +group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , activity + , activity_class + , total_cnt +order by + instance_id nulls first + , sample_count desc +; + +column instance_id clear +column activity clear +column activity_class clear +column activity_graph clear +column avg_tim_wait_ms clear +column med_tim_wait_ms clear +column min_tim_wait_ms clear +column max_tim_wait_ms clear + +clear breaks + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +and '&ca_sc' is not null +--------- +union all +--------- +select + 'Concurrent activity top SQL_IDs' as message +from + dual +where + instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +and '&ca_sc' is not null +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and instr('&op', 'LIMITED_ASH') = 0 +and '&ca_sc' is not null +; + +column message clear + +set heading on + +/* Information about the top SQL_IDs of concurrent activity based on ASH */ + +column first_sample format a19 +column last_sample format a19 +column time_active_graph format a&tgs +column duration_secs_t heading "DURATION SECS|TOTAL" +column duration_t heading "DURATION|TOTAL" +column duration_secs heading "DURATION SECS|ACTIVE" +column duration heading "DURATION|ACTIVE" +column average_as_t heading "AVERAGE AS|TOTAL" +column average_as heading "AVERAGE AS|ACTIVE" +column median_as heading "MEDIAN AS" +column stddev_as heading "AVERAGE AS|STDDEV" +column max_as heading "AVERAGE AS|MAX" +column min_as heading "AVERAGE AS|ACTIVE MIN" +column px_worker_count heading "PX WORKER|COUNT" +column px_worker_unique_count heading "PX WORKER|UNIQUE COUNT" +column pga format a10 heading "MAX_PGA" &_IF_ORA112_OR_HIGHERP.print +column temp format a10 heading "MAX_TEMP" &_IF_ORA112_OR_HIGHERP.print +-- For the time being, do not print PGA/TEMP as it is more confusing that helpful if you don't know what it is based on +--column pga format a10 heading "MAX_PGA" noprint +--column temp format a10 heading "MAX_TEMP" noprint +column instance_id &_IF_CROSS_INSTANCE.print null "GLOBAL" +column is_sqlid_current format a7 heading "IS|SQLID|CURRENT" &_IF_ORA112_OR_HIGHERP.print +column in_connection_mgmt format a7 heading "IN|CONNECT|MGMT" &_IF_ORA11_OR_HIGHERP.print +column in_parse format a7 heading "IN|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_hard_parse format a7 heading "IN|HARD|PARSE" &_IF_ORA11_OR_HIGHERP.print +column in_sql_execution format a7 heading "IN|SQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_execution format a7 heading "IN|PLSQL|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_rpc format a7 heading "IN|PLSQL|RPC" &_IF_ORA11_OR_HIGHERP.print +column in_plsql_compilation format a7 heading "IN|PLSQL|COMP" &_IF_ORA11_OR_HIGHERP.print +column in_java_execution format a7 heading "IN|JAVA|EXECUTE" &_IF_ORA11_OR_HIGHERP.print +column in_bind format a7 heading "IN|BIND" &_IF_ORA11_OR_HIGHERP.print +column in_cursor_close format a7 heading "IN|CURSOR|CLOSE" &_IF_ORA11_OR_HIGHERP.print +column in_sequence_load format a7 heading "IN|SEQ|LOAD" &_IF_ORA112_OR_HIGHERP.print +column top_level_sql_id format a16 heading "TOP_LEVEL_SQL_ID" &_IF_ORA11_OR_HIGHERP.print + +break on instance_id skip 1 + +with /* XPLAN_ASH ASH_SQLID_DETAILS_CONCURRENT_ACTIVITY SQL_ID: &si */ +ash_base as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and '&ca_sc' is not null + and instr('&op', 'ASH') > 0 + and instr('&op', 'LIMITED_ASH') = 0 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +/* Instances found in ASH sample data */ +instance_data +as +( + select + distinct + instance_id + from + ash_base +), +/* Simply the cartesian product of timeline and instances */ +/* Our driving rowsource */ +timeline_inst +as +( + select + t.timeline as sample_time + , i.instance_id as instance_id + , t.sql_exec_start + -- Buckets of the official timeline + , bucket + , duration_secs +-- , trunc(round((t.timeline - t.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as bucket +-- , round((t.timeline - t.sql_exec_start) * 86400) + &sample_freq as duration_secs + from + timeline t + , instance_data i +), +ash_base_conc as +( + select + &inst_id as instance_id + , cast(sample_time as date) as sample_time + , coalesce(sql_id, 'NULL') as sql_id + , case + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- when regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) is null + when regexp_instr(regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c'), '^P[[:alnum:]][[:alnum:]][[:alnum:]]$') != 1 or session_type != 'FOREGROUND' or program is null + then null + -- REGEXP_SUBSTR lacks the subexpr parameter in 10.2 + -- else &inst_id || '-' || regexp_substr(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', 1, 1, 'c', 1) + else &inst_id || '-' || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') + end as process + , session_id + , session_serial# +&_IF_ORA11_OR_HIGHER , nvl(top_level_sql_id, 'NULL') as top_level_sql_id + , case when session_state = 'ON CPU' then 1 else 0 end as is_on_cpu + , case when session_type = 'FOREGROUND' then 1 else null end as is_foreground + , case when session_type = 'BACKGROUND' then 1 else null end as is_background +&_IF_ORA112_OR_HIGHER , case when is_sqlid_current = 'Y' then 1 else 0 end as is_sqlid_current +&_IF_LOWER_THAN_ORA112 , 0 as is_sqlid_current +&_IF_ORA11_OR_HIGHER , case when in_connection_mgmt = 'Y' then 1 else 0 end as in_connection_mgmt +&_IF_LOWER_THAN_ORA11 , 0 as in_connection_mgmt +&_IF_ORA11_OR_HIGHER , case when in_parse = 'Y' then 1 else 0 end as in_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_parse +&_IF_ORA11_OR_HIGHER , case when in_hard_parse = 'Y' then 1 else 0 end as in_hard_parse +&_IF_LOWER_THAN_ORA11 , 0 as in_hard_parse +&_IF_ORA11_OR_HIGHER , case when in_sql_execution = 'Y' then 1 else 0 end as in_sql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_sql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_execution = 'Y' then 1 else 0 end as in_plsql_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_execution +&_IF_ORA11_OR_HIGHER , case when in_plsql_rpc = 'Y' then 1 else 0 end as in_plsql_rpc +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_rpc +&_IF_ORA11_OR_HIGHER , case when in_plsql_compilation = 'Y' then 1 else 0 end as in_plsql_compilation +&_IF_LOWER_THAN_ORA11 , 0 as in_plsql_compilation +&_IF_ORA11_OR_HIGHER , case when in_java_execution = 'Y' then 1 else 0 end as in_java_execution +&_IF_LOWER_THAN_ORA11 , 0 as in_java_execution +&_IF_ORA11_OR_HIGHER , case when in_bind = 'Y' then 1 else 0 end as in_bind +&_IF_LOWER_THAN_ORA11 , 0 as in_bind +&_IF_ORA11_OR_HIGHER , case when in_cursor_close = 'Y' then 1 else 0 end as in_cursor_close +&_IF_LOWER_THAN_ORA11 , 0 as in_cursor_close +&_IF_ORA112_OR_HIGHER , case when in_sequence_load = 'Y' then 1 else 0 end as in_sequence_load +&_IF_LOWER_THAN_ORA112 , 0 as in_sequence_load +&_IF_ORA112_OR_HIGHER , machine + , coalesce(program, 'NULL') as program + , xid +&_IF_ORA11_OR_HIGHER , sql_id || '|' || to_char(ash.sql_exec_start, 'DD.MM.YYYY HH24:MI:SS') || '|' || to_char(sql_exec_id, 'TM') as sql_exec_unique + , module + , action +&_IF_ORA112_OR_HIGHER , nullif(pga_allocated, 0) as pga_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as pga_allocated +&_IF_ORA112_OR_HIGHER , nullif(temp_space_allocated, 0) as temp_space_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as temp_space_allocated + -- According to DELTA_TIME the time the previous sample took place + -- DELTA_TIME is only available from 11.2 on +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - dates.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - dates.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_ORA11_OR_HIGHER , ash.sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_exec_id + from + &global_ash ash + , dates + where + (&ash_ln_pred1 &ash_ln_pred2) + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') + and instr('&op', 'ASH') > 0 + and instr('&op', 'LIMITED_ASH') = 0 + and '&ca_sc' is not null +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + and &inst_id in + ( + select + distinct + &inst_id + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + ) +), +top_sqlid1 as +( + select + sql_id + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , count(*) as cnt + from + ash_base_conc + group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , sql_id +), +top_sqlid as +( + select + sql_id + , instance_id + from + ( + select + sql_id + , instance_id + , row_number() over (partition by instance_id order by cnt desc) as rn + from + top_sqlid1 + ) + where + rn <= &topn_sqlid +), +driver as +( + select /*+ cardinality(1000) */ + b.instance_id + , ash_sql_ids.sql_id + , b.sample_time as timeline + , b.bucket + from + timeline_inst b, (select /*+ cardinality(&topn_sqlid) */ sql_id, instance_id from top_sqlid) ash_sql_ids + where + b.instance_id = ash_sql_ids.instance_id +), +base_data as +( + select /*+ cardinality(1000) */ + case when count(a.sample_time) > 0 then '&gc3' else ' ' end as act_ind + , count(a.sample_time) as active_sessions + , driver.sql_id + , driver.timeline + , decode(grouping(driver.instance_id), 1, -1, driver.instance_id) as instance_id + from + driver + , ash_base_conc a + where + a.ash_bucket (+) = driver.bucket + and a.instance_id (+) = driver.instance_id + and a.sql_id (+) = driver.sql_id + group by +&_IS_SINGL_INSTANCE driver.instance_id +&_IS_CROSS_INSTANCE grouping sets(driver.instance_id, ()) + , driver.sql_id + , driver.timeline + --order by + -- driver.instance_id + -- , driver.timeline +), +bucket_data as +( + select + ntile(&tgs) over (partition by instance_id, sql_id order by timeline) as bucket + , x.* + from + base_data x + -- In case we have less sample times as size of the Time Active Graph + -- this here will duplicate the data accordingly + , (select /*+ cardinality(&duplicator) */ null from dual connect by level <= to_number(trim('&duplicator'))) dups +), +grouped_buckets as +( + select + max(act_ind) as act_ind + , bucket + , instance_id + , sql_id + from + bucket_data + group by + instance_id + , sql_id + , bucket +-- order by +-- instance_id +-- , bucket +), +time_active_graph as +( + select + instance_id + , sql_id +&_IF_ORA112_OR_HIGHER , listagg(act_ind) within group (order by bucket) as time_active_graph + /* leading spaces are trimmed by the XML operation, hence we need to temporarily replace them with something else */ +&_IF_LOWER_THAN_ORA112 , replace(extract(xmlagg(xmlelement("V", replace(act_ind, ' ', '?')) order by bucket), '/V/text()').getstringval(), '?', ' ') as time_active_graph + from + grouped_buckets + group by + instance_id + , sql_id +-- order by +-- instance_id +), +topn_ash_base_conc as +( + select /*+ cardinality(s &topn_sqlid) no_merge */ + a.* + from + ash_base_conc a + , top_sqlid s + where + a.sql_id = s.sql_id + and a.instance_id = s.instance_id +), +/* Outer join the ASH samples to the timeline / instance rowsource */ +ash_data as +( + /* The 11.2 ASH data has a DELTA_TIME indicator that allows telling how long the previous sample of that particular session was ago */ + /* This is expressed in the PREV_SAMPLE_TIME information calculated based on SAMPLE_TIME and DELTA_TIME */ + /* So for PGA/TEMP figures we can produce "artificial" rows for those sample_times where no actual sampling of that particular session took place */ + /* But according to DELTA_TIME that particular sample was still "valid" in the past */ + /* The purpose of this is to get a "smoother" picture of PGA/TEMP allocation for Parallel Execution where not every sample time */ + /* all involved Parallel Workers will be sampled */ + /* Since this results in a poorly performing outer range join, this is now divided into two parts */ + -- + /* Part one: The data that covers exactly one bucket can be equi-joined, no artificial rows here */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + , ash.pga_allocated + , ash.temp_space_allocated + , ash.sql_id + , cast(to_char(null) as varchar2(1)) as artificial_indicator + from + timeline_inst t + , topn_ash_base_conc ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id + -- Rows that at most cover one bucket (or even fall within the same bucket) + and ash.ash_prev_bucket >= ash.ash_bucket - &sample_freq + --------- + union all + --------- + /* Part two: The data spanning more than a bucket needs to be range joined */ + /* But we can dramatically lower the size of the row source to join by restricting to those spanning more than a single bucket */ + /* Here the artificial rows will be generated */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.sql_exec_start + /* Only use remaining fields for those non-artificial rows (see below for an explanation) */ + , ash.pga_allocated + , ash.temp_space_allocated + , ash.sql_id + , ash.artificial_indicator + from + timeline_inst t + , ( +&use_no_lateral select /*+ use_merge(ash dup) no_merge */ +&use_lateral select /*+ no_merge */ + ash.sample_time + , ash_bucket - lvl + &sample_freq as ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , ash.pga_allocated + , ash.temp_space_allocated + , ash.instance_id + , ash.sql_id + , case when lvl > &sample_freq then 'Y' else null end as artificial_indicator + from + topn_ash_base_conc ash +&use_lateral , lateral(select level * &sample_freq as lvl from dual connect by level <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq) +&use_no_lateral , (select /*+ cardinality(1e5) */ level * &sample_freq as lvl from dual connect by level <= 1e5) dup + where + ash.ash_prev_bucket < ash.ash_bucket - &sample_freq +&use_no_lateral and dup.lvl <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq + --and ash_bucket - lvl + &sample_freq >= 0 + ) ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id +), +ash_pga_temp1 as +( + select + sum(pga_allocated) as pga_per_bucket + , sum(temp_space_allocated) as temp_per_bucket + , bucket + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , sql_id + from + ash_data + group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , sql_id + , bucket +), +ash_pga_temp as +( + select + max(pga_per_bucket) as pga_mem + , max(temp_per_bucket) as temp_space + , instance_id + , sql_id + from + ash_pga_temp1 + group by + instance_id + , sql_id +), +ash_pga_temp_prefmt as +( + select + pga_mem + , trunc(log(2, abs(case pga_mem when 0 then 1 else pga_mem end))) as power_2_pga_mem + , trunc(mod(log(2, abs(case pga_mem when 0 then 1 else pga_mem end)) ,10)) as power_2_pga_mem_mod_10 + , temp_space + , trunc(log(2, abs(case temp_space when 0 then 1 else temp_space end))) as power_2_temp_space + , trunc(mod(log(2, abs(case temp_space when 0 then 1 else temp_space end)), 10)) as power_2_temp_space_mod_10 + , instance_id + , sql_id + from + ash_pga_temp +), +ash_pga_temp_fmt as +( + select + to_char(round(pga_mem / power(2, power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end)), 'FM99999') || + case power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when pga_mem is null + then null + else '*2^'||to_char(power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end) + end + end as pga_mem_format + , to_char(round(temp_space / power(2, power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end)), 'FM99999') || + case power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when temp_space is null + then null + else '*2^'||to_char(power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end) + end + end as temp_space_format + , instance_id + , sql_id + from + ash_pga_temp_prefmt +), +median_as as +( + select + instance_id + , sql_id + , median(active_sessions) as median_as + , stddev_samp(active_sessions) as stddev_as + , max(active_sessions) as max_as + , coalesce(min(case when active_sessions > 0 then active_sessions end), 0) as min_as +from + ( + select + sample_time + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , sql_id + , count(*) as active_sessions + from + topn_ash_base_conc + group by + sample_time +&_IS_SINGL_INSTANCE , instance_id +&_IS_CROSS_INSTANCE , grouping sets(instance_id, ()) + , sql_id + ) + group by + instance_id + , sql_id +), +sql_details1 as +( + select + decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , min(instance_id) as min_instance_id + , sql_id + , to_char(min(sample_time), '&dm') as first_sample + , to_char(max(sample_time), '&dm') as last_sample + , round(min(ash_bucket) + &sample_freq) as start_active + , round(max(ash_bucket) - min(ash_bucket) + &sample_freq) as duration_secs_t + , count(distinct ash_bucket) * &sample_freq as duration_secs +&_IF_ORA11_OR_HIGHER , max(top_level_sql_id) as top_level_sql_id + , count(*) as sample_count + , count(distinct process) as slave_count + , count(distinct case when process is not null then process || '-' || session_id || '-' || session_serial# end) as slave_unique_count + , sum(is_on_cpu) as cpu_sample_count + , round(count(*) / nullif((max(ash_bucket) - min(ash_bucket) + &sample_freq) / &sample_freq, 0), 1) as average_as_t + , round(count(*) / nullif(count(distinct ash_bucket), 0), 1) as average_as + , sum(is_sqlid_current) as is_sqlid_current + , sum(in_connection_mgmt) as in_connection_mgmt + , sum(in_parse) as in_parse + , sum(in_hard_parse) as in_hard_parse + , sum(in_sql_execution) as in_sql_execution + , sum(in_plsql_execution) as in_plsql_execution + , sum(in_plsql_rpc) as in_plsql_rpc + , sum(in_plsql_compilation) as in_plsql_compilation + , sum(in_java_execution) as in_java_execution + , sum(in_bind) as in_bind + , sum(in_cursor_close) as in_cursor_close + , sum(in_sequence_load) as in_sequence_load + from + topn_ash_base_conc a + , dates + where + instr('&op', 'ASH') > 0 + and instr('&op', 'LIMITED_ASH') = 0 + and '&ca_sc' is not null + group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , sql_id + , dates.sql_exec_start +), +sql_details as +( + select + nullif(a.instance_id, -1) as instance_id + , a.sql_id +&_IF_ORA11_OR_HIGHER , top_level_sql_id + , row_number() over (partition by a.instance_id order by sample_count desc) as rn + , coalesce(sql.sql_text, '') as sql_text + , first_sample + , last_sample + , start_active + , duration_secs_t + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs_t, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs_t, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration_t + , duration_secs + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration + , sample_count + , cpu_sample_count + , round(cpu_sample_count / sample_count * 100) as percentage_cpu + , slave_count as px_worker_count + , slave_unique_count as px_worker_unique_count + , case when average_as_t >= &rnd_thr then round(average_as_t) else average_as_t end as average_as_t + , case when average_as >= &rnd_thr then round(average_as) else average_as end as average_as + , case when median_as >= &rnd_thr then round(median_as) else round(median_as, 1) end as median_as + , case when max_as >= &rnd_thr then round(max_as) else round(max_as, 1) end as max_as + , case when min_as >= &rnd_thr then round(min_as) else round(min_as, 1) end as min_as + , case when stddev_as >= &rnd_thr then round(stddev_as) else round(stddev_as, 1) end as stddev_as + , lpad(pt.pga_mem_format, 10) as pga + , lpad(pt.temp_space_format, 10) as temp + --, substr(rpad(' ', round(start_active / to_number('&ds') * &tgs)) || rpad('&gc3', round(duration_secs / to_number('&ds') * &tgs), '&gc3'), 1, &tgs) as time_active_graph + , t.time_active_graph + , lpad(to_char(round(is_sqlid_current / sample_count * 100), 'TM'), 6) || '%' as is_sqlid_current + , lpad(to_char(round(in_connection_mgmt / sample_count * 100), 'TM'), 6) || '%' as in_connection_mgmt + , lpad(to_char(round(in_parse / sample_count * 100), 'TM'), 6) || '%' as in_parse + , lpad(to_char(round(in_hard_parse / sample_count * 100), 'TM'), 6) || '%' as in_hard_parse + , lpad(to_char(round(in_sql_execution / sample_count * 100), 'TM'), 6) || '%' as in_sql_execution + , lpad(to_char(round(in_plsql_execution / sample_count * 100), 'TM'), 6) || '%' as in_plsql_execution + , lpad(to_char(round(in_plsql_rpc / sample_count * 100), 'TM'), 6) || '%' as in_plsql_rpc + , lpad(to_char(round(in_plsql_compilation / sample_count * 100), 'TM'), 6) || '%' as in_plsql_compilation + , lpad(to_char(round(in_java_execution / sample_count * 100), 'TM'), 6) || '%' as in_java_execution + , lpad(to_char(round(in_bind / sample_count * 100), 'TM'), 6) || '%' as in_bind + , lpad(to_char(round(in_cursor_close / sample_count * 100), 'TM'), 6) || '%' as in_cursor_close + , lpad(to_char(round(in_sequence_load / sample_count * 100), 'TM'), 6) || '%' as in_sequence_load + from + sql_details1 a + , ash_pga_temp_fmt pt + , time_active_graph t + , median_as m + , ( + select + sql_id + , &sqltext_join_col + , cast(substr(sql_text, 1, 80) as varchar2(80)) as sql_text + from + &sqltext p + --where + -- &third_id_sqltext + ) sql + where + a.sql_id = pt.sql_id + and a.instance_id = pt.instance_id + and a.sql_id = t.sql_id + and a.instance_id = t.instance_id + and a.sql_id = m.sql_id + and a.instance_id = m.instance_id + and a.sql_id = sql.sql_id (+) + and &sqltext_join +) +select /* XPLAN_ASH ASH_SQLID_DETAILS_CONCURRENT_ACTIVITY SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + instance_id + , sql_id + , sql_text +&_IF_ORA11_OR_HIGHER , top_level_sql_id + , first_sample + , last_sample + , start_active + , duration_secs_t + , duration_t + , duration_secs + , duration + , sample_count + , cpu_sample_count + , percentage_cpu + , px_worker_count + , px_worker_unique_count + , average_as_t + , average_as + , median_as + , max_as + , min_as + , stddev_as + , pga + , temp + , time_active_graph + , is_sqlid_current + , in_connection_mgmt + , in_parse + , in_hard_parse + , in_sql_execution + , in_plsql_execution + , in_plsql_rpc + , in_plsql_compilation + , in_java_execution + , in_bind + , in_cursor_close + , in_sequence_load +from + sql_details +--where +-- rn <= &topn_sqlid +order by + instance_id nulls first + , sample_count desc +; + +column first_sample clear +column last_sample clear +column time_active_graph clear +column pga clear +column temp clear +column instance_id clear + +column duration_secs_t clear +column duration_t clear +column duration_secs clear +column duration clear +column average_as_t clear +column average_as clear +column median_as clear +column stddev_as clear +column max_as clear +column min_as clear + +column is_sqlid_current clear +column in_connection_mgmt clear +column in_parse clear +column in_hard_parse clear +column in_sql_execution clear +column in_plsql_execution clear +column in_plsql_rpc clear +column in_plsql_compilation clear +column in_java_execution clear +column in_bind clear +column in_cursor_close clear +column in_sequence_load clear + +column px_worker_count clear +column px_worker_unique_count clear +column top_level_sql_id clear + +clear breaks + +/* I/O Summary information based on ASH */ + +/* The following query will be used multiple times with different parameters and therefore written to a temporary file */ + +select /* XPLAN_ASH IO_SUMMARY SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + instance_id + , duration_secs_t + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs_t, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs_t, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration_t + , lpad(to_char(round(total_read_io_req / power(10, power_10_total_read_io_req - case when power_10_total_read_io_req > 0 and power_10_total_read_io_req_3 = 0 then 3 else power_10_total_read_io_req_3 end)), 'FM99999'), 5) || + case power_10_total_read_io_req - case when power_10_total_read_io_req > 0 and power_10_total_read_io_req_3 = 0 then 3 else power_10_total_read_io_req_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when total_read_io_req is null + then null + else '*10^'||to_char(power_10_total_read_io_req - case when power_10_total_read_io_req > 0 and power_10_total_read_io_req_3 = 0 then 3 else power_10_total_read_io_req_3 end) + end + end as total_read_io_req + , lpad(to_char(round(total_write_io_req / power(10, power_10_total_write_io_req - case when power_10_total_write_io_req > 0 and power_10_total_write_io_req_3 = 0 then 3 else power_10_total_write_io_req_3 end)), 'FM99999'), 5) || + case power_10_total_write_io_req - case when power_10_total_write_io_req > 0 and power_10_total_write_io_req_3 = 0 then 3 else power_10_total_write_io_req_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when total_write_io_req is null + then null + else '*10^'||to_char(power_10_total_write_io_req - case when power_10_total_write_io_req > 0 and power_10_total_write_io_req_3 = 0 then 3 else power_10_total_write_io_req_3 end) + end + end as total_write_io_req + , lpad(to_char(round(read_io_req_per_sec / power(10, power_10_read_io_req_per_sec - case when power_10_read_io_req_per_sec > 0 and power_10_read_io_req_per_sec_3 = 0 then 3 else power_10_read_io_req_per_sec_3 end)), 'FM99999'), 5) || + case power_10_read_io_req_per_sec - case when power_10_read_io_req_per_sec > 0 and power_10_read_io_req_per_sec_3 = 0 then 3 else power_10_read_io_req_per_sec_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when read_io_req_per_sec is null + then null + else '*10^'||to_char(power_10_read_io_req_per_sec - case when power_10_read_io_req_per_sec > 0 and power_10_read_io_req_per_sec_3 = 0 then 3 else power_10_read_io_req_per_sec_3 end) + end + end as read_io_req_per_sec + , lpad(to_char(round(write_io_req_per_sec / power(10, power_10_write_io_req_per_sec - case when power_10_write_io_req_per_sec > 0 and power_10_write_io_req_persec_3 = 0 then 3 else power_10_write_io_req_persec_3 end)), 'FM99999'), 5) || + case power_10_write_io_req_per_sec - case when power_10_write_io_req_per_sec > 0 and power_10_write_io_req_persec_3 = 0 then 3 else power_10_write_io_req_persec_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when write_io_req_per_sec is null + then null + else '*10^'||to_char(power_10_write_io_req_per_sec - case when power_10_write_io_req_per_sec > 0 and power_10_write_io_req_persec_3 = 0 then 3 else power_10_write_io_req_persec_3 end) + end + end as write_io_req_per_sec + , lpad(to_char(round(total_read_io_bytes / power(2, power_2_t_read_io_bytes - case when power_2_t_read_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_read_io_bytes))),3)) = 0 then power_2_t_read_io_bytes_10 + 10 else power_2_t_read_io_bytes_10 end)), 'FM99999'), 5) || + case power_2_t_read_io_bytes - case when power_2_t_read_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_read_io_bytes))),3)) = 0 then power_2_t_read_io_bytes_10 + 10 else power_2_t_read_io_bytes_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when total_read_io_bytes is null + then null + else '*2^'||to_char(power_2_t_read_io_bytes - case when power_2_t_read_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_read_io_bytes))),3)) = 0 then power_2_t_read_io_bytes_10 + 10 else power_2_t_read_io_bytes_10 end) + end + end as total_read_io_bytes + , lpad(to_char(round(total_write_io_bytes / power(2, power_2_t_write_io_bytes - case when power_2_t_write_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_write_io_bytes))),3)) = 0 then power_2_t_write_io_bytes_10 + 10 else power_2_t_write_io_bytes_10 end)), 'FM99999'), 5) || + case power_2_t_write_io_bytes - case when power_2_t_write_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_write_io_bytes))),3)) = 0 then power_2_t_write_io_bytes_10 + 10 else power_2_t_write_io_bytes_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when total_write_io_bytes is null + then null + else '*2^'||to_char(power_2_t_write_io_bytes - case when power_2_t_write_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_write_io_bytes))),3)) = 0 then power_2_t_write_io_bytes_10 + 10 else power_2_t_write_io_bytes_10 end) + end + end as total_write_io_bytes + , lpad(to_char(round(total_intercon_io_bytes / power(2, power_2_t_intcon_io_bytes - case when power_2_t_intcon_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_intcon_io_bytes))),3)) = 0 then power_2_t_intcon_io_bytes_10 + 10 else power_2_t_intcon_io_bytes_10 end)), 'FM99999'), 5) || + case power_2_t_intcon_io_bytes - case when power_2_t_intcon_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_intcon_io_bytes))),3)) = 0 then power_2_t_intcon_io_bytes_10 + 10 else power_2_t_intcon_io_bytes_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when total_intercon_io_bytes is null + then null + else '*2^'||to_char(power_2_t_intcon_io_bytes - case when power_2_t_intcon_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_intcon_io_bytes))),3)) = 0 then power_2_t_intcon_io_bytes_10 + 10 else power_2_t_intcon_io_bytes_10 end) + end + end as total_intercon_io_bytes + , lpad(to_char(round(total_read_mem_bytes / power(2, power_2_t_read_mem_bytes - case when power_2_t_read_mem_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_read_mem_bytes))),3)) = 0 then power_2_t_read_mem_bytes_10 + 10 else power_2_t_read_mem_bytes_10 end)), 'FM99999'), 5) || + case power_2_t_read_mem_bytes - case when power_2_t_read_mem_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_read_mem_bytes))),3)) = 0 then power_2_t_read_mem_bytes_10 + 10 else power_2_t_read_mem_bytes_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when total_read_mem_bytes is null + then null + else '*2^'||to_char(power_2_t_read_mem_bytes - case when power_2_t_read_mem_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_t_read_mem_bytes))),3)) = 0 then power_2_t_read_mem_bytes_10 + 10 else power_2_t_read_mem_bytes_10 end) + end + end as total_read_mem_bytes + , lpad(to_char(round(read_io_bytes_per_sec / power(2, power_2_read_io_bytes_ps - case when power_2_read_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_io_bytes_ps))),3)) = 0 then power_2_read_io_bytes_ps_10 + 10 else power_2_read_io_bytes_ps_10 end)), 'FM99999'), 5) || + case power_2_read_io_bytes_ps - case when power_2_read_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_io_bytes_ps))),3)) = 0 then power_2_read_io_bytes_ps_10 + 10 else power_2_read_io_bytes_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when read_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_read_io_bytes_ps - case when power_2_read_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_io_bytes_ps))),3)) = 0 then power_2_read_io_bytes_ps_10 + 10 else power_2_read_io_bytes_ps_10 end) + end + end as read_io_bytes_per_sec + , lpad(to_char(round(write_io_bytes_per_sec / power(2, power_2_write_io_bytes_ps - case when power_2_write_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_io_bytes_ps))),3)) = 0 then power_2_write_io_bytes_ps_10 + 10 else power_2_write_io_bytes_ps_10 end)), 'FM99999'), 5) || + case power_2_write_io_bytes_ps - case when power_2_write_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_io_bytes_ps))),3)) = 0 then power_2_write_io_bytes_ps_10 + 10 else power_2_write_io_bytes_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when write_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_write_io_bytes_ps - case when power_2_write_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_io_bytes_ps))),3)) = 0 then power_2_write_io_bytes_ps_10 + 10 else power_2_write_io_bytes_ps_10 end) + end + end as write_io_bytes_per_sec + , lpad(to_char(round(intercon_io_bytes_per_sec / power(2, power_2_intercon_io_bytes_ps - case when power_2_intercon_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_intercon_io_bytes_ps))),3)) = 0 then power_2_intercon_io_byte_ps_10 + 10 else power_2_intercon_io_byte_ps_10 end)), 'FM99999'), 5) || + case power_2_intercon_io_bytes_ps - case when power_2_intercon_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_intercon_io_bytes_ps))),3)) = 0 then power_2_intercon_io_byte_ps_10 + 10 else power_2_intercon_io_byte_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when intercon_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_intercon_io_bytes_ps - case when power_2_intercon_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_intercon_io_bytes_ps))),3)) = 0 then power_2_intercon_io_byte_ps_10 + 10 else power_2_intercon_io_byte_ps_10 end) + end + end as intercon_io_bytes_per_sec + , lpad(to_char(round(read_mem_bytes_per_sec / power(2, power_2_read_mem_bytes_ps - case when power_2_read_mem_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes_ps))),3)) = 0 then power_2_read_mem_bytes_ps_10 + 10 else power_2_read_mem_bytes_ps_10 end)), 'FM99999'), 5) || + case power_2_read_mem_bytes_ps - case when power_2_read_mem_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes_ps))),3)) = 0 then power_2_read_mem_bytes_ps_10 + 10 else power_2_read_mem_bytes_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when read_mem_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_read_mem_bytes_ps - case when power_2_read_mem_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes_ps))),3)) = 0 then power_2_read_mem_bytes_ps_10 + 10 else power_2_read_mem_bytes_ps_10 end) + end + end as read_mem_bytes_per_sec + , lpad(to_char(round(avg_read_req_size / power(2, power_2_avg_read_req_size - case when power_2_avg_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_read_req_size))),3)) = 0 then power_2_avg_read_req_size_10 + 10 else power_2_avg_read_req_size_10 end)), 'FM99999'), 5) || + case power_2_avg_read_req_size - case when power_2_avg_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_read_req_size))),3)) = 0 then power_2_avg_read_req_size_10 + 10 else power_2_avg_read_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when avg_read_req_size is null + then null + else '*2^'||to_char(power_2_avg_read_req_size - case when power_2_avg_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_read_req_size))),3)) = 0 then power_2_avg_read_req_size_10 + 10 else power_2_avg_read_req_size_10 end) + end + end as avg_read_req_size + , lpad(to_char(round(med_read_req_size / power(2, power_2_med_read_req_size - case when power_2_med_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_read_req_size))),3)) = 0 then power_2_med_read_req_size_10 + 10 else power_2_med_read_req_size_10 end)), 'FM99999'), 5) || + case power_2_med_read_req_size - case when power_2_med_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_read_req_size))),3)) = 0 then power_2_med_read_req_size_10 + 10 else power_2_med_read_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when med_read_req_size is null + then null + else '*2^'||to_char(power_2_med_read_req_size - case when power_2_med_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_read_req_size))),3)) = 0 then power_2_med_read_req_size_10 + 10 else power_2_med_read_req_size_10 end) + end + end as med_read_req_size + , lpad(to_char(round(avg_write_req_size / power(2, power_2_avg_write_req_size - case when power_2_avg_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_write_req_size))),3)) = 0 then power_2_avg_write_req_size_10 + 10 else power_2_avg_write_req_size_10 end)), 'FM99999'), 5) || + case power_2_avg_write_req_size - case when power_2_avg_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_write_req_size))),3)) = 0 then power_2_avg_write_req_size_10 + 10 else power_2_avg_write_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when avg_write_req_size is null + then null + else '*2^'||to_char(power_2_avg_write_req_size - case when power_2_avg_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_write_req_size))),3)) = 0 then power_2_avg_write_req_size_10 + 10 else power_2_avg_write_req_size_10 end) + end + end as avg_write_req_size + , lpad(to_char(round(med_write_req_size / power(2, power_2_med_write_req_size - case when power_2_med_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_write_req_size))),3)) = 0 then power_2_med_write_req_size_10 + 10 else power_2_med_write_req_size_10 end)), 'FM99999'), 5) || + case power_2_med_write_req_size - case when power_2_med_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_write_req_size))),3)) = 0 then power_2_med_write_req_size_10 + 10 else power_2_med_write_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when med_write_req_size is null + then null + else '*2^'||to_char(power_2_med_write_req_size - case when power_2_med_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_write_req_size))),3)) = 0 then power_2_med_write_req_size_10 + 10 else power_2_med_write_req_size_10 end) + end + end as med_write_req_size + , lpad(to_char(round(max_read_io_req_per_sec / power(10, power_10_max_read_io_req_ps - case when power_10_max_read_io_req_ps > 0 and power_10_max_read_io_req_ps_3 = 0 then 3 else power_10_max_read_io_req_ps_3 end)), 'FM99999'), 5) || + case power_10_max_read_io_req_ps - case when power_10_max_read_io_req_ps > 0 and power_10_max_read_io_req_ps_3 = 0 then 3 else power_10_max_read_io_req_ps_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when max_read_io_req_per_sec is null + then null + else '*10^'||to_char(power_10_max_read_io_req_ps - case when power_10_max_read_io_req_ps > 0 and power_10_max_read_io_req_ps_3 = 0 then 3 else power_10_max_read_io_req_ps_3 end) + end + end as max_read_io_req_per_sec + , lpad(to_char(round(min_read_io_req_per_sec / power(10, power_10_min_read_io_req_ps - case when power_10_min_read_io_req_ps > 0 and power_10_min_read_io_req_ps_3 = 0 then 3 else power_10_min_read_io_req_ps_3 end)), 'FM99999'), 5) || + case power_10_min_read_io_req_ps - case when power_10_min_read_io_req_ps > 0 and power_10_min_read_io_req_ps_3 = 0 then 3 else power_10_min_read_io_req_ps_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when min_read_io_req_per_sec is null + then null + else '*10^'||to_char(power_10_min_read_io_req_ps - case when power_10_min_read_io_req_ps > 0 and power_10_min_read_io_req_ps_3 = 0 then 3 else power_10_min_read_io_req_ps_3 end) + end + end as min_read_io_req_per_sec + , lpad(to_char(round(max_write_io_req_per_sec / power(10, power_10_max_write_io_req_ps - case when power_10_max_write_io_req_ps > 0 and power_10_max_write_io_req_ps_3 = 0 then 3 else power_10_max_write_io_req_ps_3 end)), 'FM99999'), 5) || + case power_10_max_write_io_req_ps - case when power_10_max_write_io_req_ps > 0 and power_10_max_write_io_req_ps_3 = 0 then 3 else power_10_max_write_io_req_ps_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when max_write_io_req_per_sec is null + then null + else '*10^'||to_char(power_10_max_write_io_req_ps - case when power_10_max_write_io_req_ps > 0 and power_10_max_write_io_req_ps_3 = 0 then 3 else power_10_max_write_io_req_ps_3 end) + end + end as max_write_io_req_per_sec + , lpad(to_char(round(min_write_io_req_per_sec / power(10, power_10_min_write_io_req_ps - case when power_10_min_write_io_req_ps > 0 and power_10_min_write_io_req_ps_3 = 0 then 3 else power_10_min_write_io_req_ps_3 end)), 'FM99999'), 5) || + case power_10_min_write_io_req_ps - case when power_10_min_write_io_req_ps > 0 and power_10_min_write_io_req_ps_3 = 0 then 3 else power_10_min_write_io_req_ps_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when min_write_io_req_per_sec is null + then null + else '*10^'||to_char(power_10_min_write_io_req_ps - case when power_10_min_write_io_req_ps > 0 and power_10_min_write_io_req_ps_3 = 0 then 3 else power_10_min_write_io_req_ps_3 end) + end + end as min_write_io_req_per_sec + , lpad(to_char(round(max_read_io_bytes_per_sec / power(2, power_2_max_read_io_bytes_ps - case when power_2_max_read_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_read_io_bytes_ps))),3)) = 0 then power_2_max_read_io_byte_ps_10 + 10 else power_2_max_read_io_byte_ps_10 end)), 'FM99999'), 5) || + case power_2_max_read_io_bytes_ps - case when power_2_max_read_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_read_io_bytes_ps))),3)) = 0 then power_2_max_read_io_byte_ps_10 + 10 else power_2_max_read_io_byte_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when max_read_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_max_read_io_bytes_ps - case when power_2_max_read_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_read_io_bytes_ps))),3)) = 0 then power_2_max_read_io_byte_ps_10 + 10 else power_2_max_read_io_byte_ps_10 end) + end + end as max_read_io_bytes_per_sec + , lpad(to_char(round(min_read_io_bytes_per_sec / power(2, power_2_min_read_io_bytes_ps - case when power_2_min_read_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_read_io_bytes_ps))),3)) = 0 then power_2_min_read_io_byte_ps_10 + 10 else power_2_min_read_io_byte_ps_10 end)), 'FM99999'), 5) || + case power_2_min_read_io_bytes_ps - case when power_2_min_read_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_read_io_bytes_ps))),3)) = 0 then power_2_min_read_io_byte_ps_10 + 10 else power_2_min_read_io_byte_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when min_read_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_min_read_io_bytes_ps - case when power_2_min_read_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_read_io_bytes_ps))),3)) = 0 then power_2_min_read_io_byte_ps_10 + 10 else power_2_min_read_io_byte_ps_10 end) + end + end as min_read_io_bytes_per_sec + , lpad(to_char(round(max_write_io_bytes_per_sec / power(2, power_2_max_write_io_bytes_ps - case when power_2_max_write_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_write_io_bytes_ps))),3)) = 0 then power_2_max_write_io_byt_ps_10 + 10 else power_2_max_write_io_byt_ps_10 end)), 'FM99999'), 5) || + case power_2_max_write_io_bytes_ps - case when power_2_max_write_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_write_io_bytes_ps))),3)) = 0 then power_2_max_write_io_byt_ps_10 + 10 else power_2_max_write_io_byt_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when max_write_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_max_write_io_bytes_ps - case when power_2_max_write_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_write_io_bytes_ps))),3)) = 0 then power_2_max_write_io_byt_ps_10 + 10 else power_2_max_write_io_byt_ps_10 end) + end + end as max_write_io_bytes_per_sec + , lpad(to_char(round(min_write_io_bytes_per_sec / power(2, power_2_min_write_io_bytes_ps - case when power_2_min_write_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_write_io_bytes_ps))),3)) = 0 then power_2_min_write_io_byt_ps_10 + 10 else power_2_min_write_io_byt_ps_10 end)), 'FM99999'), 5) || + case power_2_min_write_io_bytes_ps - case when power_2_min_write_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_write_io_bytes_ps))),3)) = 0 then power_2_min_write_io_byt_ps_10 + 10 else power_2_min_write_io_byt_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when min_write_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_min_write_io_bytes_ps - case when power_2_min_write_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_write_io_bytes_ps))),3)) = 0 then power_2_min_write_io_byt_ps_10 + 10 else power_2_min_write_io_byt_ps_10 end) + end + end as min_write_io_bytes_per_sec + , lpad(to_char(round(max_intercon_io_bytes_per_sec / power(2, power_2_max_inter_io_bytes_ps - case when power_2_max_inter_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_inter_io_bytes_ps))),3)) = 0 then power_2_max_inter_io_byt_ps_10 + 10 else power_2_max_inter_io_byt_ps_10 end)), 'FM99999'), 5) || + case power_2_max_inter_io_bytes_ps - case when power_2_max_inter_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_inter_io_bytes_ps))),3)) = 0 then power_2_max_inter_io_byt_ps_10 + 10 else power_2_max_inter_io_byt_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when max_intercon_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_max_inter_io_bytes_ps - case when power_2_max_inter_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_inter_io_bytes_ps))),3)) = 0 then power_2_max_inter_io_byt_ps_10 + 10 else power_2_max_inter_io_byt_ps_10 end) + end + end as max_intercon_io_bytes_per_sec + , lpad(to_char(round(min_intercon_io_bytes_per_sec / power(2, power_2_min_inter_io_bytes_ps - case when power_2_min_inter_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_inter_io_bytes_ps))),3)) = 0 then power_2_min_inter_io_byt_ps_10 + 10 else power_2_min_inter_io_byt_ps_10 end)), 'FM99999'), 5) || + case power_2_min_inter_io_bytes_ps - case when power_2_min_inter_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_inter_io_bytes_ps))),3)) = 0 then power_2_min_inter_io_byt_ps_10 + 10 else power_2_min_inter_io_byt_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when min_intercon_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_min_inter_io_bytes_ps - case when power_2_min_inter_io_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_inter_io_bytes_ps))),3)) = 0 then power_2_min_inter_io_byt_ps_10 + 10 else power_2_min_inter_io_byt_ps_10 end) + end + end as min_intercon_io_bytes_per_sec + , lpad(to_char(round(max_read_mem_bytes_per_sec / power(2, power_2_max_read_mem_bytes_ps - case when power_2_max_read_mem_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_read_mem_bytes_ps))),3)) = 0 then power_2_max_read_mem_byt_ps_10 + 10 else power_2_max_read_mem_byt_ps_10 end)), 'FM99999'), 5) || + case power_2_max_read_mem_bytes_ps - case when power_2_max_read_mem_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_read_mem_bytes_ps))),3)) = 0 then power_2_max_read_mem_byt_ps_10 + 10 else power_2_max_read_mem_byt_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when max_read_mem_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_max_read_mem_bytes_ps - case when power_2_max_read_mem_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_max_read_mem_bytes_ps))),3)) = 0 then power_2_max_read_mem_byt_ps_10 + 10 else power_2_max_read_mem_byt_ps_10 end) + end + end as max_read_mem_bytes_per_sec + , lpad(to_char(round(min_read_mem_bytes_per_sec / power(2, power_2_min_read_mem_bytes_ps - case when power_2_min_read_mem_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_read_mem_bytes_ps))),3)) = 0 then power_2_min_read_mem_byt_ps_10 + 10 else power_2_min_read_mem_byt_ps_10 end)), 'FM99999'), 5) || + case power_2_min_read_mem_bytes_ps - case when power_2_min_read_mem_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_read_mem_bytes_ps))),3)) = 0 then power_2_min_read_mem_byt_ps_10 + 10 else power_2_min_read_mem_byt_ps_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when min_read_mem_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_min_read_mem_bytes_ps - case when power_2_min_read_mem_bytes_ps >= 10 and trunc(mod(log(10,abs(power(2, power_2_min_read_mem_bytes_ps))),3)) = 0 then power_2_min_read_mem_byt_ps_10 + 10 else power_2_min_read_mem_byt_ps_10 end) + end + end as min_read_mem_bytes_per_sec + , to_char(nvl(cell_offload_efficiency, 0), '999') || '%' as cell_offload_efficiency +from + ( + select + instance_id + , duration_secs_t + , total_read_io_req + , total_write_io_req + , read_io_req_per_sec + , write_io_req_per_sec + , min_read_io_req_per_sec + , min_write_io_req_per_sec + , max_read_io_req_per_sec + , max_write_io_req_per_sec + , total_read_mem_bytes + , total_read_io_bytes + , total_write_io_bytes + , total_intercon_io_bytes + , avg_read_req_size + , med_read_req_size + , avg_write_req_size + , med_write_req_size + , 100 - round(total_intercon_io_bytes / nullif((total_read_io_bytes + total_write_io_bytes), 0) * 100) as cell_offload_efficiency + , read_mem_bytes_per_sec + , read_io_bytes_per_sec + , write_io_bytes_per_sec + , intercon_io_bytes_per_sec + , min_read_mem_bytes_per_sec + , min_read_io_bytes_per_sec + , min_write_io_bytes_per_sec + , min_intercon_io_bytes_per_sec + , max_read_mem_bytes_per_sec + , max_read_io_bytes_per_sec + , max_write_io_bytes_per_sec + , max_intercon_io_bytes_per_sec + , trunc(log(2, abs(case total_read_mem_bytes when 0 then 1 else total_read_mem_bytes end))) as power_2_t_read_mem_bytes + , trunc(mod(log(2, abs(case total_read_mem_bytes when 0 then 1 else total_read_mem_bytes end)), 10)) as power_2_t_read_mem_bytes_10 + , trunc(log(2, abs(case total_read_io_bytes when 0 then 1 else total_read_io_bytes end))) as power_2_t_read_io_bytes + , trunc(mod(log(2, abs(case total_read_io_bytes when 0 then 1 else total_read_io_bytes end)), 10)) as power_2_t_read_io_bytes_10 + , trunc(log(2, abs(case total_write_io_bytes when 0 then 1 else total_write_io_bytes end))) as power_2_t_write_io_bytes + , trunc(mod(log(2, abs(case total_write_io_bytes when 0 then 1 else total_write_io_bytes end)), 10)) as power_2_t_write_io_bytes_10 + , trunc(log(10, abs(case total_read_io_req when 0 then 1 else total_read_io_req end))) as power_10_total_read_io_req + , trunc(mod(log(10, abs(case total_read_io_req when 0 then 1 else total_read_io_req end)), 3)) as power_10_total_read_io_req_3 + , trunc(log(10, abs(case total_write_io_req when 0 then 1 else total_write_io_req end))) as power_10_total_write_io_req + , trunc(mod(log(10, abs(case total_write_io_req when 0 then 1 else total_write_io_req end)), 3)) as power_10_total_write_io_req_3 + , trunc(log(10, abs(case read_io_req_per_sec when 0 then 1 else read_io_req_per_sec end))) as power_10_read_io_req_per_sec + , trunc(mod(log(10, abs(case read_io_req_per_sec when 0 then 1 else read_io_req_per_sec end)), 3)) as power_10_read_io_req_per_sec_3 + , trunc(log(10, abs(case write_io_req_per_sec when 0 then 1 else write_io_req_per_sec end))) as power_10_write_io_req_per_sec + , trunc(mod(log(10, abs(case write_io_req_per_sec when 0 then 1 else write_io_req_per_sec end)), 3)) as power_10_write_io_req_persec_3 + -- + , trunc(log(10, abs(case max_read_io_req_per_sec when 0 then 1 else max_read_io_req_per_sec end))) as power_10_max_read_io_req_ps + , trunc(mod(log(10, abs(case max_read_io_req_per_sec when 0 then 1 else max_read_io_req_per_sec end)), 3)) as power_10_max_read_io_req_ps_3 + , trunc(log(10, abs(case max_write_io_req_per_sec when 0 then 1 else max_write_io_req_per_sec end))) as power_10_max_write_io_req_ps + , trunc(mod(log(10, abs(case max_write_io_req_per_sec when 0 then 1 else max_write_io_req_per_sec end)), 3)) as power_10_max_write_io_req_ps_3 + , trunc(log(10, abs(case min_read_io_req_per_sec when 0 then 1 else min_read_io_req_per_sec end))) as power_10_min_read_io_req_ps + , trunc(mod(log(10, abs(case min_read_io_req_per_sec when 0 then 1 else min_read_io_req_per_sec end)), 3)) as power_10_min_read_io_req_ps_3 + , trunc(log(10, abs(case min_write_io_req_per_sec when 0 then 1 else min_write_io_req_per_sec end))) as power_10_min_write_io_req_ps + , trunc(mod(log(10, abs(case min_write_io_req_per_sec when 0 then 1 else min_write_io_req_per_sec end)), 3)) as power_10_min_write_io_req_ps_3 + -- + , trunc(log(2, abs(case total_intercon_io_bytes when 0 then 1 else total_intercon_io_bytes end))) as power_2_t_intcon_io_bytes + , trunc(mod(log(2, abs(case total_intercon_io_bytes when 0 then 1 else total_intercon_io_bytes end)), 10)) as power_2_t_intcon_io_bytes_10 + , trunc(log(2, abs(case read_mem_bytes_per_sec when 0 then 1 else read_mem_bytes_per_sec end))) as power_2_read_mem_bytes_ps + , trunc(mod(log(2, abs(case read_mem_bytes_per_sec when 0 then 1 else read_mem_bytes_per_sec end)), 10)) as power_2_read_mem_bytes_ps_10 + , trunc(log(2, abs(case read_io_bytes_per_sec when 0 then 1 else read_io_bytes_per_sec end))) as power_2_read_io_bytes_ps + , trunc(mod(log(2, abs(case read_io_bytes_per_sec when 0 then 1 else read_io_bytes_per_sec end)), 10)) as power_2_read_io_bytes_ps_10 + , trunc(log(2, abs(case write_io_bytes_per_sec when 0 then 1 else write_io_bytes_per_sec end))) as power_2_write_io_bytes_ps + , trunc(mod(log(2, abs(case write_io_bytes_per_sec when 0 then 1 else write_io_bytes_per_sec end)), 10)) as power_2_write_io_bytes_ps_10 + , trunc(log(2, abs(case intercon_io_bytes_per_sec when 0 then 1 else intercon_io_bytes_per_sec end))) as power_2_intercon_io_bytes_ps + , trunc(mod(log(2, abs(case intercon_io_bytes_per_sec when 0 then 1 else intercon_io_bytes_per_sec end)), 10)) as power_2_intercon_io_byte_ps_10 + -- + , trunc(log(2, abs(case max_read_mem_bytes_per_sec when 0 then 1 else max_read_mem_bytes_per_sec end))) as power_2_max_read_mem_bytes_ps + , trunc(mod(log(2, abs(case max_read_mem_bytes_per_sec when 0 then 1 else max_read_mem_bytes_per_sec end)), 10)) as power_2_max_read_mem_byt_ps_10 + , trunc(log(2, abs(case max_read_io_bytes_per_sec when 0 then 1 else max_read_io_bytes_per_sec end))) as power_2_max_read_io_bytes_ps + , trunc(mod(log(2, abs(case max_read_io_bytes_per_sec when 0 then 1 else max_read_io_bytes_per_sec end)), 10)) as power_2_max_read_io_byte_ps_10 + , trunc(log(2, abs(case max_write_io_bytes_per_sec when 0 then 1 else max_write_io_bytes_per_sec end))) as power_2_max_write_io_bytes_ps + , trunc(mod(log(2, abs(case max_write_io_bytes_per_sec when 0 then 1 else max_write_io_bytes_per_sec end)), 10)) as power_2_max_write_io_byt_ps_10 + , trunc(log(2, abs(case max_intercon_io_bytes_per_sec when 0 then 1 else max_intercon_io_bytes_per_sec end))) as power_2_max_inter_io_bytes_ps + , trunc(mod(log(2, abs(case max_intercon_io_bytes_per_sec when 0 then 1 else max_intercon_io_bytes_per_sec end)), 10)) as power_2_max_inter_io_byt_ps_10 + , trunc(log(2, abs(case min_read_mem_bytes_per_sec when 0 then 1 else min_read_mem_bytes_per_sec end))) as power_2_min_read_mem_bytes_ps + , trunc(mod(log(2, abs(case min_read_mem_bytes_per_sec when 0 then 1 else min_read_mem_bytes_per_sec end)), 10)) as power_2_min_read_mem_byt_ps_10 + , trunc(log(2, abs(case min_read_io_bytes_per_sec when 0 then 1 else min_read_io_bytes_per_sec end))) as power_2_min_read_io_bytes_ps + , trunc(mod(log(2, abs(case min_read_io_bytes_per_sec when 0 then 1 else min_read_io_bytes_per_sec end)), 10)) as power_2_min_read_io_byte_ps_10 + , trunc(log(2, abs(case min_write_io_bytes_per_sec when 0 then 1 else min_write_io_bytes_per_sec end))) as power_2_min_write_io_bytes_ps + , trunc(mod(log(2, abs(case min_write_io_bytes_per_sec when 0 then 1 else min_write_io_bytes_per_sec end)), 10)) as power_2_min_write_io_byt_ps_10 + , trunc(log(2, abs(case min_intercon_io_bytes_per_sec when 0 then 1 else min_intercon_io_bytes_per_sec end))) as power_2_min_inter_io_bytes_ps + , trunc(mod(log(2, abs(case min_intercon_io_bytes_per_sec when 0 then 1 else min_intercon_io_bytes_per_sec end)), 10)) as power_2_min_inter_io_byt_ps_10 + -- + , trunc(log(2, abs(case avg_read_req_size when 0 then 1 else avg_read_req_size end))) as power_2_avg_read_req_size + , trunc(mod(log(2, abs(case avg_read_req_size when 0 then 1 else avg_read_req_size end)), 10)) as power_2_avg_read_req_size_10 + , trunc(log(2, abs(case med_read_req_size when 0 then 1 else med_read_req_size end))) as power_2_med_read_req_size + , trunc(mod(log(2, abs(case med_read_req_size when 0 then 1 else med_read_req_size end)), 10)) as power_2_med_read_req_size_10 + , trunc(log(2, abs(case avg_write_req_size when 0 then 1 else avg_write_req_size end))) as power_2_avg_write_req_size + , trunc(mod(log(2, abs(case avg_write_req_size when 0 then 1 else avg_write_req_size end)), 10)) as power_2_avg_write_req_size_10 + , trunc(log(2, abs(case med_write_req_size when 0 then 1 else med_write_req_size end))) as power_2_med_write_req_size + , trunc(mod(log(2, abs(case med_write_req_size when 0 then 1 else med_write_req_size end)), 10)) as power_2_med_write_req_size_10 + from + ( + select + instance_id + , duration_secs_t + , sum_delta_read_io_req as total_read_io_req + , sum_delta_write_io_req as total_write_io_req + , sum_delta_read_io_bytes as total_read_io_bytes + , sum_delta_read_mem_bytes as total_read_mem_bytes + , sum_delta_write_io_bytes as total_write_io_bytes + , sum_delta_interc_io_bytes as total_intercon_io_bytes + , round(avg_delta_read_req_size) as avg_read_req_size + , round(med_delta_read_req_size) as med_read_req_size + , round(avg_delta_write_req_size) as avg_write_req_size + , round(med_delta_write_req_size) as med_write_req_size + , round(sum_delta_read_io_req / duration_secs_t) as read_io_req_per_sec + , round(sum_delta_write_io_req / duration_secs_t) as write_io_req_per_sec + , round(sum_delta_read_mem_bytes / duration_secs_t) as read_mem_bytes_per_sec + , round(sum_delta_read_io_bytes / duration_secs_t) as read_io_bytes_per_sec + , round(sum_delta_write_io_bytes / duration_secs_t) as write_io_bytes_per_sec + , round(sum_delta_interc_io_bytes / duration_secs_t) as intercon_io_bytes_per_sec + , round(max_delta_read_io_req_p_s) as max_read_io_req_per_sec + , round(max_delta_write_io_req_p_s) as max_write_io_req_per_sec + , round(max_delta_read_mem_bytes_p_s) as max_read_mem_bytes_per_sec + , round(max_delta_read_io_bytes_p_s) as max_read_io_bytes_per_sec + , round(max_delta_write_io_bytes_p_s) as max_write_io_bytes_per_sec + , round(max_delta_interc_io_bytes_p_s) as max_intercon_io_bytes_per_sec + , round(min_delta_read_io_req_p_s) as min_read_io_req_per_sec + , round(min_delta_write_io_req_p_s) as min_write_io_req_per_sec + , round(min_delta_read_mem_bytes_p_s) as min_read_mem_bytes_per_sec + , round(min_delta_read_io_bytes_p_s) as min_read_io_bytes_per_sec + , round(min_delta_write_io_bytes_p_s) as min_write_io_bytes_per_sec + , round(min_delta_interc_io_bytes_p_s) as min_intercon_io_bytes_per_sec + from + ( + select + &GROUP_CROSS_INSTANCE as instance_id + /* Should this be the actual duration from start of execution to last sample or the duration according to the distinct number of sample times */ + --, count(distinct sample_time) * &sample_freq as duration_secs +&THIS_STATEMENT , round(((max(sample_time) - min_sql_exec_start) * 86400)) + &sample_freq as duration_secs_t +&CONCU_ACTIVITY , round(((max(sample_time) - min(sample_time)) * 86400)) + &sample_freq as duration_secs_t + , sum(delta_read_io_requests) as sum_delta_read_io_req + , sum(delta_write_io_requests) as sum_delta_write_io_req + , sum(delta_read_io_bytes) as sum_delta_read_io_bytes + , sum(delta_read_mem_bytes) as sum_delta_read_mem_bytes + , sum(delta_write_io_bytes) as sum_delta_write_io_bytes + , sum(delta_interconnect_io_bytes) as sum_delta_interc_io_bytes + , max(sum_delta_read_io_requests_sp) as max_delta_read_io_req_p_s + , max(sum_delta_write_io_requests_sp) as max_delta_write_io_req_p_s + , max(sum_delta_read_mem_bytes_sp) as max_delta_read_mem_bytes_p_s + , max(sum_delta_read_io_bytes_sp) as max_delta_read_io_bytes_p_s + , max(sum_delta_write_io_bytes_sp) as max_delta_write_io_bytes_p_s + , max(sum_delta_interct_io_bytes_sp) as max_delta_interc_io_bytes_p_s + , min(sum_delta_read_io_requests_sp) as min_delta_read_io_req_p_s + , min(sum_delta_write_io_requests_sp) as min_delta_write_io_req_p_s + , min(sum_delta_read_mem_bytes_sp) as min_delta_read_mem_bytes_p_s + , min(sum_delta_read_io_bytes_sp) as min_delta_read_io_bytes_p_s + , min(sum_delta_write_io_bytes_sp) as min_delta_write_io_bytes_p_s + , min(sum_delta_interct_io_bytes_sp) as min_delta_interc_io_bytes_p_s + , avg(delta_read_request_size) as avg_delta_read_req_size + , median(delta_read_request_size) as med_delta_read_req_size + , avg(delta_write_request_size) as avg_delta_write_req_size + , median(delta_write_request_size) as med_delta_write_req_size + from + ( + select + a.* + , min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) over () as min_sql_exec_start + , sum(delta_read_io_requests / delta_time * 1000000) over (partition by &GROUP_CROSS_INSTANCE, ash_bucket) as sum_delta_read_io_requests_sp + , sum(delta_write_io_requests / delta_time * 1000000) over (partition by &GROUP_CROSS_INSTANCE, ash_bucket) as sum_delta_write_io_requests_sp + , sum(delta_read_mem_bytes / delta_time * 1000000) over (partition by &GROUP_CROSS_INSTANCE, ash_bucket) as sum_delta_read_mem_bytes_sp + , sum(delta_read_io_bytes / delta_time * 1000000) over (partition by &GROUP_CROSS_INSTANCE, ash_bucket) as sum_delta_read_io_bytes_sp + , sum(delta_write_io_bytes / delta_time * 1000000) over (partition by &GROUP_CROSS_INSTANCE, ash_bucket) as sum_delta_write_io_bytes_sp + , sum(delta_interconnect_io_bytes / delta_time * 1000000) over (partition by &GROUP_CROSS_INSTANCE, ash_bucket) as sum_delta_interct_io_bytes_sp + from + ( + select + &inst_id as instance_id + , sql_id + , cast(sample_time as date) as sample_time +&_IF_ORA112_OR_HIGHER , delta_time +&_IF_LOWER_THAN_ORA112 , null as delta_time +&_IF_ORA112_OR_HIGHER , delta_read_io_requests +&_IF_LOWER_THAN_ORA112 , 0 as delta_read_io_requests +&_IF_ORA112_OR_HIGHER , delta_write_io_requests +&_IF_LOWER_THAN_ORA112 , 0 as delta_write_io_requests +&_IF_ORA112_OR_HIGHER , delta_read_io_bytes +&_IF_LOWER_THAN_ORA112 , 0 as delta_read_io_bytes +&_IF_ORA112_OR_HIGHER , delta_write_io_bytes +&_IF_LOWER_THAN_ORA112 , 0 as delta_write_io_bytes +&_IF_ORA112_OR_HIGHER , delta_read_io_bytes / nullif(delta_read_io_requests, 0) as delta_read_request_size +&_IF_LOWER_THAN_ORA112 , 0 as delta_read_request_size +&_IF_ORA112_OR_HIGHER , delta_write_io_bytes / nullif(delta_write_io_requests, 0) as delta_write_request_size +&_IF_LOWER_THAN_ORA112 , 0 as delta_write_request_size +&_IF_ORA112_OR_HIGHER , delta_interconnect_io_bytes +&_IF_LOWER_THAN_ORA112 , 0 as delta_interconnect_io_bytes +&_IF_ORA12_READ_MEM , delta_read_mem_bytes +&_IF_ORA_NO_READ_MEM , 0 as delta_read_mem_bytes +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('01.01.1970', 'DD.MM.YYYY') as sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_exec_id + , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + from + &global_ash ash + where +&THIS_STATEMENT sql_id = '&si' +&THIS_STATEMENT &_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) +&THIS_STATEMENT and &ash_pred1 &ash_pred2 +&THIS_STATEMENT and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&THIS_STATEMENT &_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +&CONCU_ACTIVITY (&ash_ln_pred1 &ash_ln_pred2) +&CONCU_ACTIVITY and instr('&op', 'ASH') > 0 +&CONCU_ACTIVITY and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&CONCU_ACTIVITY &_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +&CONCU_ACTIVITY and &inst_id in +&CONCU_ACTIVITY ( +&CONCU_ACTIVITY select +&CONCU_ACTIVITY distinct +&CONCU_ACTIVITY &inst_id +&CONCU_ACTIVITY from +&CONCU_ACTIVITY &global_ash ash +&CONCU_ACTIVITY where +&CONCU_ACTIVITY sql_id = '&si' +&CONCU_ACTIVITY &_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) +&CONCU_ACTIVITY and &ash_pred1 &ash_pred2 +&CONCU_ACTIVITY and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&CONCU_ACTIVITY &_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') +&CONCU_ACTIVITY ) + ) a + ) ash + where + -- only include samples that cover a time period within the execution time period of the SQL statement +&_IF_ORA112_OR_HIGHER ash.sample_time - round(ash.delta_time / 1000000) / 86400 >= ash.sql_exec_start - &sample_freq / 86400 +&_IF_LOWER_THAN_ORA112 1 = 1 + and instr('&op', 'ASH') > 0 +&CONCU_ACTIVITY and instr('&op', 'LIMITED_ASH') = 0 + and (('&_IF_ORA112_OR_HIGHER' is null + and '&_EXPERIMENTAL' is null) or '&_IF_ORA11203_OR_HIGHER' is null) + and to_number(nvl('&ic', '0')) > &INSTANCE_THRESHOLD + -- This prevents the aggregate functions to produce a single row + -- in case of no rows generated to aggregate + group by + &GROUP_CROSS_INSTANCE + , min_sql_exec_start + ) + ) + ) +order by + instance_id +. + +-- If you need to debug, comment the following line +set termout off + +save .xplan_ash_temp replace + +set termout on + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +and ('&ca_sc' is not null and instr('&op', 'LIMITED_ASH') = 0) +--------- +union all +--------- +select + 'Concurrent activity I/O Summary based on ASH' as message +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +and ('&ca_sc' is not null and instr('&op', 'LIMITED_ASH') = 0) +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +and ('&ca_sc' is not null and instr('&op', 'LIMITED_ASH') = 0) +; + +column message clear + +set heading on + +-- If you need to debug, comment the following line +set termout off + +get .xplan_ash_temp nolist + +set termout on + +column instance_id noprint + +column duration_secs_t heading 'DURATION SECS|TOTAL' +column duration_t heading 'DURATION|TOTAL' +column total_read_io_req format a6 heading 'TOTAL|READ|IO|REQS' justify left +column total_write_io_req format a6 heading 'TOTAL|WRITE|IO|REQS' justify left +column read_io_req_per_sec format a6 heading 'AVG|READ|IO|REQS|PERSEC' justify left +column write_io_req_per_sec format a6 heading 'AVG|WRITE|IO|REQS|PERSEC' justify left +column min_read_io_req_per_sec format a6 heading 'MIN|READ|IO|REQS|PERSEC' justify left +column min_write_io_req_per_sec format a6 heading 'MIN|WRITE|IO|REQS|PERSEC' justify left +column max_read_io_req_per_sec format a6 heading 'MAX|READ|IO|REQS|PERSEC' justify left +column max_write_io_req_per_sec format a6 heading 'MAX|WRITE|IO|REQS|PERSEC' justify left +column total_read_io_bytes format a6 heading 'TOTAL|READ|IO|BYTES' justify left +column total_write_io_bytes format a6 heading 'TOTAL|WRITE|IO|BYTES' justify left +column avg_read_req_size format a6 heading 'AVG|READ|REQ|SIZE' justify left +column med_read_req_size format a6 heading 'MEDIAN|READ|REQ|SIZE' justify left +column avg_write_req_size format a6 heading 'AVG|WRITE|REQ|SIZE' justify left +column med_write_req_size format a6 heading 'MEDIAN|WRITE|REQ|SIZE' justify left +column total_intercon_io_bytes format a6 heading 'TOTAL|IO|LAYER|BYTES' justify left +column cell_offload_efficiency format a5 heading 'CELL|OFFL|EFF' justify left +column read_io_bytes_per_sec format a6 heading 'AVG|READ|IO|BYTES|PERSEC' justify left +column write_io_bytes_per_sec format a6 heading 'AVG|WRITE|IO|BYTES|PERSEC' justify left +column intercon_io_bytes_per_sec format a6 heading 'AVG|IO|LAYER|BYTES|PERSEC' justify left +column min_read_io_bytes_per_sec format a6 heading 'MIN|READ|IO|BYTES|PERSEC' justify left +column min_write_io_bytes_per_sec format a6 heading 'MIN|WRITE|IO|BYTES|PERSEC' justify left +column min_intercon_io_bytes_per_sec format a6 heading 'MIN|IO|LAYER|BYTES|PERSEC' justify left +column max_read_io_bytes_per_sec format a6 heading 'MAX|READ|IO|BYTES|PERSEC' justify left +column max_write_io_bytes_per_sec format a6 heading 'MAX|WRITE|IO|BYTES|PERSEC' justify left +column max_intercon_io_bytes_per_sec format a6 heading 'MAX|IO|LAYER|BYTES|PERSEC' justify left +-- Read Mem Bytes was added in 12c to ASH +column read_mem_bytes_per_sec format a6 heading 'AVG|READ|MEM|BYTES|PERSEC' justify left &_IF_ORA12_READ_MEMP.print +column min_read_mem_bytes_per_sec format a6 heading 'MIN|READ|MEM|BYTES|PERSEC' justify left &_IF_ORA12_READ_MEMP.print +column max_read_mem_bytes_per_sec format a6 heading 'MAX|READ|MEM|BYTES|PERSEC' justify left &_IF_ORA12_READ_MEMP.print +column total_read_mem_bytes format a6 heading 'TOTAL|READ|MEM|BYTES' justify left &_IF_ORA12_READ_MEMP.print + +define INSTANCE_THRESHOLD = "0" +define GROUP_CROSS_INSTANCE = "1" +define THIS_STATEMENT = "--" +define CONCU_ACTIVITY = "" + +/ + +set heading off + +column message format a52 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +and to_number(nvl('&ic', '0')) > 1 +and ('&ca_sc' is not null and instr('&op', 'LIMITED_ASH') = 0) +--------- +union all +--------- +select + 'Concurrent activity I/O Summary per Instance ASH' as message +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +and to_number(nvl('&ic', '0')) > 1 +and ('&ca_sc' is not null and instr('&op', 'LIMITED_ASH') = 0) +--------- +union all +--------- +select + '----------------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +and to_number(nvl('&ic', '0')) > 1 +and ('&ca_sc' is not null and instr('&op', 'LIMITED_ASH') = 0) +; + +column message clear + +set heading on + +set termout off + +get .xplan_ash_temp nolist + +set termout on + +column instance_id print + +define INSTANCE_THRESHOLD = "1" +define GROUP_CROSS_INSTANCE = "instance_id" +define THIS_STATEMENT = "--" +define CONCU_ACTIVITY = "" + +/ + +undefine INSTANCE_THRESHOLD +undefine GROUP_CROSS_INSTANCE +undefine THIS_STATEMENT +undefine CONCU_ACTIVITY + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +--------- +union all +--------- +select + 'SQL Statement I/O Summary based on ASH' as message +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +; + +column message clear + +set heading on + +-- If you need to debug, comment the following line +set termout off + +get .xplan_ash_temp nolist + +set termout on + +column instance_id noprint + +define INSTANCE_THRESHOLD = "0" +define GROUP_CROSS_INSTANCE = "1" +define THIS_STATEMENT = "" +define CONCU_ACTIVITY = "--" + +/ + +set heading off + +column message format a52 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +and to_number(nvl('&ic', '0')) > 1 +--------- +union all +--------- +select + 'SQL Statement I/O Summary per Instance based on ASH' as message +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +and to_number(nvl('&ic', '0')) > 1 +--------- +union all +--------- +select + '----------------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and (('&_IF_ORA112_OR_HIGHER' is null +and '&_EXPERIMENTAL' is null) +or '&_IF_ORA11203_OR_HIGHER' is null) +and to_number(nvl('&ic', '0')) > 1 +; + +column message clear + +set heading on + +set termout off + +get .xplan_ash_temp nolist + +set termout on + +column instance_id print + +define INSTANCE_THRESHOLD = "1" +define GROUP_CROSS_INSTANCE = "instance_id" +define THIS_STATEMENT = "" +define CONCU_ACTIVITY = "--" + +/ + +undefine INSTANCE_THRESHOLD +undefine GROUP_CROSS_INSTANCE +undefine THIS_STATEMENT +undefine CONCU_ACTIVITY + +column duration_secs_t clear +column duration_t clear +column total_read_io_req clear +column total_write_io_req clear +column read_io_req_per_sec clear +column write_io_req_per_sec clear +column total_read_io_bytes clear +column total_write_io_bytes clear +column avg_read_req_size clear +column med_read_req_size clear +column avg_write_req_size clear +column med_write_req_size clear +column total_intercon_io_bytes clear +column cell_offload_efficiency clear +column read_io_bytes_per_sec clear +column write_io_bytes_per_sec clear +column intercon_io_bytes_per_sec clear +column min_read_io_req_per_sec clear +column min_write_io_req_per_sec clear +column max_read_io_req_per_sec clear +column max_write_io_req_per_sec clear +column min_read_io_bytes_per_sec clear +column min_write_io_bytes_per_sec clear +column min_intercon_io_bytes_per_sec clear +column max_read_io_bytes_per_sec clear +column max_write_io_bytes_per_sec clear +column max_intercon_io_bytes_per_sec clear +column read_mem_bytes_per_sec clear +column min_read_mem_bytes_per_sec clear +column max_read_mem_bytes_per_sec clear +column total_read_mem_bytes clear + +set heading off + +-- If you need to debug, comment the following line +set termout off + +/* Determine whether skip 1 on DFO or not */ + +column dfo_skip new_value _DFO_SKIP &debug_internalp.print + +select + case when '&_IF_CROSS_INSTANCE' is null then 'skip 1' else '' end as dfo_skip +from + dual +; + +column dfo_skip clear + +set termout on + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'DISTRIB') > 0 +and '&plan_exists' is not null +and '&_IF_ORA11_OR_HIGHER' is null +--------- +union all +--------- +select + 'Information on Parallel Degree based on ASH' as message +from + dual +where + instr('&op', 'DISTRIB') > 0 +and '&plan_exists' is not null +and '&_IF_ORA11_OR_HIGHER' is null +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'DISTRIB') > 0 +and '&plan_exists' is not null +and '&_IF_ORA11_OR_HIGHER' is null +; + +column message clear + +set heading on + +/* Provide summary info on Instance / DFO level if a plan is available */ + +column dfo heading "DFO|TREE" +column time_active_graph format a&tgs +column instance_id &_IF_CROSS_INSTANCE.print null "GLOBAL" +column duration_secs_t heading "DURATION SECS|TOTAL" +column duration_t heading "DURATION|TOTAL" +column duration_secs heading "DURATION SECS|ACTIVE" +column duration heading "DURATION|ACTIVE" +column average_as_t heading "AVERAGE AS|TOTAL" +column average_as heading "AVERAGE AS|ACTIVE" +column median_as heading "MEDIAN AS" +column stddev_as heading "AVERAGE AS|STDDEV" +column max_as heading "AVERAGE AS|MAX" +column min_as heading "AVERAGE AS|ACTIVE MIN" +column process_count heading "PROCESS|COUNT" +column process_unique_count heading "PROCESS|UNIQUE COUNT" + +break on dfo &_DFO_SKIP on set_count on assumed_degree on actual_degree + +undefine _DFO_SKIP + +/* This statement is effectively turned into a NOOP in versions below 11g */ +with /* XPLAN_ASH PARALLEL_DEGREE_INFO SQL_ID: &si */ +set_count +as +( + select + dfo + --, max(set_count) as set_count + , least(count(distinct tq_id), 2) as set_count + from + ( + select + to_number(cast(substr(p.object_node, 3, length(p.object_node) - 5) as varchar2(6))) as dfo + --, case when p.operation = 'PX RECEIVE' then 2 else 1 end as set_count + , to_number(substr(p.object_node, 3 + length(p.object_node) - 5)) as tq_id + from + &plan_table p + where + p.sql_id = '&si' + and p.&second_id = &cn + and &third_id + and p.object_node like ':Q%' + and instr('&op', 'DISTRIB') > 0 + and '&plan_exists' is not null + and '&_IF_ORA11_OR_HIGHER' is null + ) + group by + dfo +), +ash_base as +( + select /*+ cardinality(1000) cardinality(ash 100) use_hash(ash p) no_merge(p) */ + ash.&inst_id as instance_id + , cast(ash.sample_time as date) as sample_time + , ash.&inst_id || '-' || regexp_replace(coalesce(ash.program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') as process + , session_id + , session_serial# +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_ORA11202_OR_HIGHER , px_flags +&_IF_LOWER_THAN_ORA11202 , null as px_flags +&_IF_ORA11202_OR_HIGHER , trunc(mod(px_flags/65536, 32)) as px_step_id +&_IF_LOWER_THAN_ORA11202 , null as px_step_id +&_IF_ORA11202_OR_HIGHER , mod(px_flags, 65536) as px_step_arg +&_IF_LOWER_THAN_ORA11202 , null as px_step_arg +&_IF_ORA11_OR_HIGHER , ash.sql_exec_start +&_IF_ORA11_OR_HIGHER , count(*) over (partition by ash.sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('01.01.1970', 'DD.MM.YYYY') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_plan_line_id +&_IF_LOWER_THAN_ORA11 , null as sql_plan_line_id + from + &global_ash ash + where + ash.sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(ash.sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') + -- and regexp_like(coalesce(ash.program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$') + and instr('&op', 'DISTRIB') > 0 + and '&plan_exists' is not null + and '&_IF_ORA11_OR_HIGHER' is null +), +dfo_info as +( + select + to_number(cast(substr(p.object_node, 3, length(p.object_node) - 5) as varchar2(6))) as dfo + , to_number(substr(p.object_node, 3 + length(p.object_node) - 5)) as tq_id + , id + from + &plan_table p + where p.sql_id = '&si' + and p.&second_id = &cn + and &third_id + and p.object_node like ':Q%' + and '&plan_exists' is not null + and '&_IF_ORA11_OR_HIGHER' is null +), +/* Parallel Degree DOP info taken from Real-Time SQL Monitoring if available / requested (only from 11.2 on reliable) */ +monitor_dop_info as +( + select +&use_monitor &_IF_ORA112_OR_HIGHER inst_id +&use_monitor &_IF_LOWER_THAN_ORA112 0 as inst_id +&use_no_monitor 0 as inst_id +&use_monitor &_IF_ORA112_OR_HIGHER , sid +&use_monitor &_IF_LOWER_THAN_ORA112 , 0 as sid +&use_no_monitor , 0 as sid +&use_monitor &_IF_ORA112_OR_HIGHER , session_serial# +&use_monitor &_IF_LOWER_THAN_ORA112 , 0 as session_serial# +&use_no_monitor , 0 as session_serial# +&use_monitor &_IF_ORA112_OR_HIGHER , count(*) over (partition by px_server_group, px_server_set) as monitor_dop +&use_monitor &_IF_LOWER_THAN_ORA112 , 0 as monitor_dop +&use_no_monitor , 0 as monitor_dop + from +&use_monitor &_IF_ORA112_OR_HIGHER &sql_monitor m +&use_monitor &_IF_LOWER_THAN_ORA112 dual +&use_no_monitor dual + where +&use_monitor &_IF_ORA112_OR_HIGHER 1 = 1 +&use_monitor &_IF_LOWER_THAN_ORA112 1 = 2 +&use_no_monitor 1 = 2 +&use_monitor &_IF_ORA112_OR_HIGHER and m.sql_id = '&si' +&use_monitor &_IF_ORA112_OR_HIGHER and m.sql_exec_start = to_date('&ls', '&dm') +&use_monitor &_IF_ORA112_OR_HIGHER and m.sql_exec_id = &li +&use_monitor &_IF_ORA112_OR_HIGHER and m.px_qcsid is not null +), +ash_dfo as +( + select + instance_id + , sample_time + , process + , session_id + , ash.session_serial# + , px_flags + , sql_exec_start + , ash_bucket + , cnt_sql_exec_start + , min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) over () as min_sql_exec_start + , p.dfo +&_IF_LOWER_THAN_ORA11202 , count(distinct instance_id || '-' || process) over (partition by p.dfo, p.tq_id) as cnt_process +&_IF_ORA11202_OR_HIGHER , count(distinct instance_id || '-' || process) over (partition by p.dfo, ash.px_step_id, ash.px_step_arg) as cnt_process + , m.monitor_dop + from + ash_base ash + , dfo_info p + , monitor_dop_info m + where + p.id = ash.sql_plan_line_id + and ash.instance_id = m.inst_id (+) + and ash.session_id = m.sid (+) + and ash.session_serial# = m.session_serial# (+) +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +/* Instances found in ASH sample data */ +instance_data +as +( + select + distinct + instance_id + from + ash_base +), +/* Simply the cartesian product of timeline and instances */ +/* Our driving rowsource */ +timeline_inst +as +( + select + t.timeline as sample_time + , i.instance_id as instance_id + , t.sql_exec_start + -- Buckets of the official timeline + , bucket + , duration_secs +-- , trunc(round((t.timeline - t.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as bucket +-- , round((t.timeline - t.sql_exec_start) * 86400) + &sample_freq as duration_secs + from + timeline t + , instance_data i +), +driver as +( + select + b.instance_id + , b.sample_time as timeline + , b.bucket + , ash_dfo.dfo + from + timeline_inst b, (select distinct instance_id, dfo from ash_dfo) ash_dfo + where + b.instance_id = ash_dfo.instance_id +), +base_data as +( + select + case when count(a.dfo) > 0 then '&gc3' else ' ' end as act_ind + , count(a.dfo) as active_sessions + , driver.dfo + , driver.timeline + , decode(grouping(driver.instance_id), 1, -1, driver.instance_id) as instance_id + , driver.bucket as d_bucket + from + driver + , ash_dfo a + where + a.ash_bucket (+) = driver.bucket + and a.dfo (+) = driver.dfo + and a.instance_id (+) = driver.instance_id + group by +&_IS_SINGL_INSTANCE driver.instance_id +&_IS_CROSS_INSTANCE grouping sets(driver.instance_id, ()) + , driver.dfo + , driver.bucket + , driver.timeline + --order by + -- driver.instance_id + -- , driver.dfo + -- , driver.timeline +), +dfo_activity +as +( + select /*+ no_merge */ + min(ash_bucket) as min_bucket + , max(ash_bucket) as max_bucket + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , dfo + from + ash_dfo + group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , dfo +), +median_as as +( + select + b.instance_id + , b.dfo + , median(b.active_sessions) as median_as + , stddev_samp(active_sessions) as stddev_as + , max(active_sessions) as max_as + , coalesce(min(case when active_sessions > 0 then active_sessions end), 0) as min_as + from + base_data b + , dfo_activity a + where + a.instance_id = b.instance_id + and a.dfo = b.dfo + and b.d_bucket between a.min_bucket and a.max_bucket + group by + b.instance_id + , b.dfo +), +bucket_data as +( + select + ntile(&tgs) over (partition by instance_id, dfo order by timeline) as bucket + , x.* + from + base_data x + -- In case we have less sample times as size of the Time Active Graph + -- this here will duplicate the data accordingly + , (select /*+ cardinality(&duplicator) */ null from dual connect by level <= to_number(trim('&duplicator'))) dups +), +grouped_buckets as +( + select + max(act_ind) as act_ind + , bucket + , dfo + , instance_id + from + bucket_data + group by + instance_id + , dfo + , bucket +-- order by +-- instance_id +-- , dfo +-- , bucket +), +time_active_graph as +( + select + instance_id + , dfo +&_IF_ORA112_OR_HIGHER , listagg(act_ind) within group (order by bucket) as time_active_graph + /* leading spaces are trimmed by the XML operation, hence we need to temporarily replace them with something else */ +&_IF_LOWER_THAN_ORA112 , replace(extract(xmlagg(xmlelement("V", replace(act_ind, ' ', '?')) order by bucket), '/V/text()').getstringval(), '?', ' ') as time_active_graph + from + grouped_buckets + group by + instance_id + , dfo +-- order by +-- instance_id +-- , dfo +) +select /* XPLAN_ASH PARALLEL_DEGREE_INFO SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + nullif(a.instance_id, -1) as instance_id + , a.dfo + , start_active + , duration_secs_t + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs_t, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs_t, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration_t + , duration_secs + , cast(nullif('+' || to_char(extract(day from numtodsinterval(duration_secs, 'SECOND')), 'TM') || ' ' || substr(to_char(numtodsinterval(duration_secs, 'SECOND')), 12, 8), '+ ') as varchar2(12)) as duration + , sample_count + , process_count + , process_unique_count + , set_count + , assumed_degree +&_IF_ORA11202_OR_HIGHER , actual_degree /* / to_number('&ic') */ as actual_degree + , case when average_as_t >= &rnd_thr then round(average_as_t) else average_as_t end as average_as_t + , case when average_as >= &rnd_thr then round(average_as) else average_as end as average_as + , case when median_as >= &rnd_thr then round(median_as) else round(median_as, 1) end as median_as + , case when max_as >= &rnd_thr then round(max_as) else round(max_as, 1) end as max_as + , case when min_as >= &rnd_thr then round(min_as) else round(min_as, 1) end as min_as + , case when stddev_as >= &rnd_thr then round(stddev_as) else round(stddev_as, 1) end as stddev_as + --, substr(rpad(' ', round(start_active / to_number('&ds') * &tgs)) || rpad('&gc3', round(duration_secs / to_number('&ds') * &tgs), '&gc3'), 1, &tgs) as time_active_graph + , t.time_active_graph +from + ( + select /*+ cardinality(100) */ + decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , sc.dfo +&_IF_ORA11_OR_HIGHER , round(min(ash_bucket) + &sample_freq) as start_active +&_IF_LOWER_THAN_ORA11 , 0 as start_active + , round(max(ash_bucket) - min(ash_bucket) + &sample_freq) as duration_secs_t + , count(distinct ash_bucket) * &sample_freq as duration_secs + , count(process) as sample_count + , count(distinct process) as process_count + , count(distinct case when process is not null then process || '-' || session_id || '-' || session_serial# end) as process_unique_count + , sc.set_count as set_count + --, ceil(count(distinct process) / sc.set_count) as assumed_degree + , max(coalesce(monitor_dop, cnt_process)) as assumed_degree +&_IF_ORA11202_OR_HIGHER , max(trunc(px_flags / 2097152)) as actual_degree + , round(count(*) / nullif((max(ash_bucket) - min(ash_bucket) + &sample_freq) / &sample_freq, 0), 1) as average_as_t + , round(count(*) / nullif(count(distinct ash_bucket), 0), 1) as average_as + from + ash_dfo pr + , set_count sc + where + sc.dfo = pr.dfo (+) + group by +&_IS_SINGL_INSTANCE instance_id +&_IS_CROSS_INSTANCE grouping sets(instance_id, ()) + , sc.dfo + , sc.set_count + , min_sql_exec_start + ) a + , time_active_graph t + , median_as m +where + t.instance_id (+) = a.instance_id +and t.dfo (+) = a.dfo +and m.instance_id (+) = a.instance_id +and m.dfo (+) = a.dfo +order by + a.dfo --to_number(substr(a.dfo, 2)) + , coalesce(a.instance_id, -1) +; + +column dfo clear +column time_active_graph clear +column instance_id clear +column duration_secs_t clear +column duration_t clear +column duration_secs clear +column duration clear +column average_as_t clear +column average_as clear +column median_as clear +column stddev_as clear +column max_as clear +column min_as clear +column process_count clear +column process_unique_count clear + +clear breaks + +/* If DISTRIB option was used and Parallel Execution was expected + show a message here that no Parallel Execution activity could be found in ASH */ + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + '&slave_count' is null and instr('&op', 'DISTRIB') > 0 +and '&plan_exists' is not null +and '&_IF_ORA11_OR_HIGHER' is null +--------- +union all +--------- +select + 'No Parallel Worker activity found in ASH!' as message +from + dual +where + '&slave_count' is null and instr('&op', 'DISTRIB') > 0 +and '&plan_exists' is not null +and '&_IF_ORA11_OR_HIGHER' is null; + +column message clear + +set heading on + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + '&slave_count' is not null and instr('&op', 'DISTRIB') > 0 +--------- +union all +--------- +select + 'Parallel Worker activity overview based on ASH' as message +from + dual +where + '&slave_count' is not null and instr('&op', 'DISTRIB') > 0 +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + '&slave_count' is not null and instr('&op', 'DISTRIB') > 0 +; + +column message clear + +set heading on + +-- If you need to debug, comment the following line +set termout off + +-- Check if this an adaptive plan or not +-- If this is an adaptive plan, always force ADAPTIVE as format option +column is_adaptive_plan new_value is_adaptive_plan &debug_internalp.print +-- This is still set +--column fo new_value fo &debug_internalp.print + +select + case when instr(other_xml, 'adaptive_plan') > 0 then 'YES' else 'NO' end as is_adaptive_plan + , '&fo' || case when instr(other_xml, 'adaptive_plan') > 0 then ' +ADAPTIVE' end as fo +from + &plan_table_name p +where + sql_id = '&si' +and &second_id = &cn +and &third_id +and id = 1 +; + +column is_adaptive_plan clear + +/* Determine if I/O figures / DFO / SET_ID info should be shown or not */ +/* Also determines if the ORD(er of execution) column should be shown or not */ +/* If we have Parallel Execution and option "no_ord_on_px" set to "YES" (default) or an adaptive plan (12c) then don't show the ORD column */ + +column show_io_cols new_value _SHOW_IO_COLS &debug_internalp.print +column show_12c_io_cols new_value _SHOW_12C_IO_COLS &debug_internalp.print +column show_set_id new_value _SHOW_SET_ID &debug_internalp.print +column show_dfo new_value _SHOW_DFO &debug_internalp.print +-- Column C_ORD should still be declared +-- column c_ord new_value c_ord noprint + +select + case when (('&_EXPERIMENTAL' is null and '&_IF_ORA112_OR_HIGHER' is null) or '&_IF_ORA11203_OR_HIGHER' is null) then '' else 'no' end as show_io_cols + , case when '&_IF_ORA12_READ_MEMP' is null then '' else 'no' end as show_12c_io_cols + , case when ('&slave_count' is not null and coalesce('&no_ord_on_px', 'NO') = 'YES') or '&is_adaptive_plan' = 'YES' then null else '&c_ord' end as c_ord + , case when '&plan_exists' is not null and '&_IF_ORA11_OR_HIGHER' is null and coalesce('&show_px_sets', 'NO') = 'YES' then '' else 'no' end as show_set_id + , case when '&plan_exists' is not null and '&_IF_ORA11_OR_HIGHER' is null and coalesce('&show_px_sets', 'NO') = 'YES' then '' else 'no' end as show_dfo +from + dual +; + +column show_io_cols clear +column show_12c_io_cols clear +column show_set_id clear +column show_dfo clear +-- Column C_ORD will be cleared at the end +-- column c_ord clear + +set termout on + +column instance_id &_IF_CROSS_INSTANCE.print +-- break on instance_id on dfo on set_id skip 1 +break on dfo on set_id skip 1 on instance_id + +column process format a64 +column dfo heading 'DFO|TREE' &_SHOW_DFO.print null N/A +column set_id &_SHOW_SET_ID.print null N/A +column cnt heading 'SAMPLE|COUNT' +column cnt_cpu heading 'SAMPLE|COUNT|CPU' +column cnt_other heading 'SAMPLE|COUNT|OTHER' +column percentage_cpu heading 'PERCENT|CPU' +column pga format a6 heading 'MAX|PGA' &_IF_ORA112_OR_HIGHERP.print +column temp format a6 heading 'MAX|TEMP' &_IF_ORA112_OR_HIGHERP.print +column rd_req format a6 heading 'READ|REQS' &_SHOW_IO_COLS.print +column wr_req format a6 heading 'WRITE|REQS' &_SHOW_IO_COLS.print +column rd_byt format a6 heading 'READ|BYTES' &_SHOW_IO_COLS.print +column wr_byt format a6 heading 'WRITE|BYTES' &_SHOW_IO_COLS.print +column io_byt format a6 heading 'IO|LAYER|BYTES' &_SHOW_IO_COLS.print +column rm_byt format a6 heading 'READ|MEM|BYTES' &_SHOW_12C_IO_COLS.print +column rd_r_s format a6 heading 'READ|REQ|PERSEC' &_SHOW_IO_COLS.print +column wr_r_s format a6 heading 'WRITE|REQ|PERSEC' &_SHOW_IO_COLS.print +column rd_b_s format a6 heading 'READ|BYTES|PERSEC' &_SHOW_IO_COLS.print +column wr_b_s format a6 heading 'WRITE|BYTES|PERSEC' &_SHOW_IO_COLS.print +column io_b_s format a6 heading 'IO_LAY|BYTES|PERSEC' &_SHOW_IO_COLS.print +column rm_b_s format a6 heading 'READ|MEM|BYTES|PERSEC' &_SHOW_12C_IO_COLS.print +column a_rr_s format a6 heading 'AVG|RE_REQ|SIZE' &_SHOW_IO_COLS.print +column m_rr_s format a6 heading 'MEDIAN|RE_REQ|SIZE' &_SHOW_IO_COLS.print +column a_wr_s format a6 heading 'AVG|WR_REQ|SIZE' &_SHOW_IO_COLS.print +column m_wr_s format a6 heading 'MEDIAN|WR_REQ|SIZE' &_SHOW_IO_COLS.print +column plan_lines format a40 heading 'TOP|ACTIVE|PLAN LINES' &_IF_ORA11_OR_HIGHERP.print +column activities format a120 heading 'TOP|ACTIVITIES' +column activity_graph format a&wgs + +with /* XPLAN_ASH PARALLEL_SLAVE_ACTIVITY SQL_ID: &si */ +/* Base ASH data */ +ash_base as +( + select /*+ materialize */ + &inst_id as instance_id +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_plan_line_id +&_IF_LOWER_THAN_ORA11 , 0 as sql_plan_line_id +&_IF_ORA11202_OR_HIGHER , trunc(mod(px_flags/65536, 32)) as px_step_id +&_IF_LOWER_THAN_ORA11202 , null as px_step_id +&_IF_ORA11202_OR_HIGHER , mod(px_flags, 65536) as px_step_arg +&_IF_LOWER_THAN_ORA11202 , null as px_step_arg + , cast(sample_time as date) as sample_time + , session_state + , case when session_state = 'WAITING' then nvl(event, '') else session_state +&_IF_ORA12102_OR_HIGHER || case when in_inmemory_query = 'Y' then ' INMEMORY' end + end as activity + , case when to_number(nvl('&ic', '0')) > 1 then &inst_id || '-' end || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') as process + , count(*) over () as total_cnt +&_IF_ORA112_OR_HIGHER , nullif(pga_allocated, 0) as pga_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as pga_allocated +&_IF_ORA112_OR_HIGHER , nullif(temp_space_allocated, 0) as temp_space_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as temp_space_allocated +&_IF_ORA112_OR_HIGHER , delta_time +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_time +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_read_io_requests else null end as delta_read_io_requests +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_read_io_requests +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_write_io_requests else null end as delta_write_io_requests +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_write_io_requests +&_IF_ORA12_READ_MEM , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_read_mem_bytes else null end as delta_read_mem_bytes +&_IF_ORA_NO_READ_MEM , to_number(null) as delta_read_mem_bytes +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_read_io_bytes else null end as delta_read_io_bytes +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_read_io_bytes +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_write_io_bytes else null end as delta_write_io_bytes +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_write_io_bytes +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_read_io_bytes / nullif(delta_read_io_requests, 0) else null end as delta_read_request_size +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_read_request_size +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_write_io_bytes / nullif(delta_write_io_requests, 0) else null end as delta_write_request_size +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_write_request_size +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_interconnect_io_bytes else null end as delta_interconnect_io_bytes +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_interconnect_io_bytes + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + and '&slave_count' is not null and instr('&op', 'DISTRIB') > 0 +), +set_count as +( + select + dfo + --, max(set_count) as set_count + , least(count(distinct tq_id), 2) as set_count + from + ( + select + to_number(cast(substr(p.object_node, 3, length(p.object_node) - 5) as varchar2(6))) as dfo + --, case when p.operation = 'PX RECEIVE' then 2 else 1 end as set_count + , to_number(substr(p.object_node, 3 + length(p.object_node) - 5)) as tq_id + from + &plan_table p + where + p.sql_id = '&si' + and p.&second_id = &cn + and &third_id + and p.object_node like ':Q%' + and instr('&op', 'DISTRIB') > 0 + and '&plan_exists' is not null + and coalesce('&show_px_sets', 'NO') = 'YES' + and '&_IF_ORA11_OR_HIGHER' is null + ) + group by + dfo +), +dfo_info as +( + select + to_number(cast(substr(coalesce(p.object_node, p.next_object_node), 3, length(coalesce(p.object_node, p.next_object_node)) - 5) as varchar2(6))) as dfo + --to_number(cast(substr(p.object_node, 3, length(p.object_node) - 5) as varchar2(6))) as dfo + , to_number(substr(p.object_node, 3 + length(p.object_node) - 5)) as tq_id + , id + from + ( + select + p.* + , lead(object_node) over (order by id) as next_object_node + from + &plan_table p + where + p.sql_id = '&si' + and p.&second_id = &cn + and &third_id + and (p.object_node like ':Q%' or p.operation = 'PX COORDINATOR') + and instr('&op', 'DISTRIB') > 0 + and '&plan_exists' is not null + and coalesce('&show_px_sets', 'NO') = 'YES' + and '&_IF_ORA11_OR_HIGHER' is null + ) p +), +ash_dfo1 as +( + select + ash.* + , p.dfo + , p.tq_id + , sc.set_count + from + ash_base ash + , dfo_info p + , set_count sc + where + p.id (+) = ash.sql_plan_line_id + and sc.dfo (+) = p.dfo +), +ash_dfo2 as +( + select + distinct + instance_id + , dfo + , process + , px_step_id + , px_step_arg + , tq_id + , set_count + from + ash_dfo1 + where + (regexp_like(process, '^P[[:alnum:]][[:alnum:]][[:alnum:]]$') or regexp_like(process, '^[[:digit:]]+-P[[:alnum:]][[:alnum:]][[:alnum:]]$')) + and dfo is not null + and tq_id is not null +), +px_sets1 as +( + -- Take advantage of the knowledge about the number of sets per DFO + -- If we have two sets, we need a more complex logic to arrive at the Slaves per set + select + min(process) as min_process + , max(process) as max_process + , count(distinct process) as cnt_proc + , instance_id + , dfo + --, tq_id + --, px_step_id + --, px_step_arg + from + ash_dfo2 + --where + -- set_count > 1 + group by + instance_id + , dfo +&_IF_LOWER_THAN_ORA11202 , tq_id +&_IF_ORA11202_OR_HIGHER , px_step_id +&_IF_ORA11202_OR_HIGHER , px_step_arg +-- --------- +-- union all +-- --------- +-- -- If we have just one set, we can simplify the whole logic a lot +-- select +-- min(process) as min_process +-- , max(process) as max_process +-- , count(distinct process) as cnt_proc +-- , instance_id +-- , dfo +-- , tq_id +-- , null as px_step_id +-- , null as px_step_arg +-- from +-- ash_dfo2 +-- where +-- set_count = 1 +-- group by +-- instance_id +-- , dfo +), +-- Let's jump through hoops to extract set info... +-- First: Let's eliminate any similar sets that are contained in other sets +px_sets2 as +( + select distinct + min_process + , max_process + , cnt_proc + , instance_id + , dfo + from + px_sets1 a + where + not exists + ( + select + null + from + px_sets1 b + where + b.instance_id = a.instance_id + and b.dfo = a.dfo + and b.cnt_proc > a.cnt_proc + and b.min_process <= a.min_process + and b.max_process >= a.max_process + ) +), +-- Second: Merge sets that overlap by identifying previous max_process +px_sets3 as +( + select + lag(max_process, 1, case when to_number(nvl('&ic', '0')) > 1 then '0' else 'P' end) over (partition by instance_id, dfo order by max_process) as prev_max_process + , a.* + from + px_sets2 a + order by + instance_id + , dfo + , prev_max_process +), +-- and check if current min is larger than previous max, if yes, mark as new set +px_sets4 as +( + select + case when prev_max_process < min_process then rownum end as set_indicator1 + , a.* + from + px_sets3 a +), +-- Fill in the NULL markers in between for all members of the identified sets +px_sets5 as +( + select + last_value(set_indicator1 ignore nulls) over (partition by instance_id, dfo order by prev_max_process, max_process) as set_indicator + , a.* + from + px_sets4 a +), +-- The actual merge of the identified sets +px_sets6 as +( + select + min(min_process) as min_process + , max(max_process) as max_process + , set_indicator + , instance_id + , dfo + from + px_sets5 + group by + instance_id + , dfo + , set_indicator +), +-- Turn the set indicator into a number starting at 1 increasing by 1 +px_sets7 as +( + select + min_process + , max_process + , row_number() over (partition by instance_id, dfo order by set_indicator) as set_id + , instance_id + , dfo + from + px_sets6 +), +-- Final Sanity check +-- Discard set info for a DFO if we arrive anywhere at more than two sets +-- +-- This can happen if we end up with non overlapping min/max processes per PX step for the same sets +px_sets as +( + select + * + from + px_sets7 a + where + set_id < 3 +-- not exists +-- ( +-- select +-- null +-- from +-- px_sets7 b +-- where +-- a.dfo = b.dfo +-- and a.instance_id = b.instance_id +-- and b.set_id > 2 +-- ) +), +ash_dfo as +( + select + ash_dfo1.* + , case when ash_dfo1.tq_id is not null then px_sets.set_id end as set_id + from + ash_dfo1 + , px_sets + where + ash_dfo1.instance_id = px_sets.instance_id (+) + and ash_dfo1.dfo = px_sets.dfo (+) + and ash_dfo1.process between px_sets.min_process (+) and px_sets.max_process (+) +), +/* The most active plan lines */ +/* Count occurrence per process and execution plan line */ +ash_plan_lines as +( + select + cnt + , instance_id + , dfo + , set_id + , process + , sql_plan_line_id + from + ( + select + count(*) as cnt + , instance_id + , dfo + , set_id + , process + , sql_plan_line_id + from + ash_dfo + group by + instance_id + , dfo + , set_id + , process + , sql_plan_line_id + ) +), +/* The Top N execution plan lines */ +ash_plan_lines_rn as +( + select + cnt + , sql_plan_line_id + , instance_id + , dfo + , set_id + , process + , row_number() over (partition by instance_id, dfo, set_id, process order by cnt desc, sql_plan_line_id) as rn + from + ash_plan_lines +), +/* Aggregate the Top N execution plan lines */ +/* This will be joined later to the remaining data */ +ash_plan_lines_agg as +( + select + instance_id + , process + , dfo + , set_id +&_IF_ORA112_OR_HIGHER , listagg(case when rn > &topnl + 1 then null when rn = &topnl + 1 then '...' else coalesce(to_char(sql_plan_line_id), 'NULL') || '(' || cnt || ')' end, ',') within group (order by rn) as plan_lines +&_IF_LOWER_THAN_ORA112 , ltrim(extract(xmlagg(xmlelement("V", case when rn > &topnl + 1 then null when rn = &topnl + 1 then ',' || '...' else ',' || coalesce(to_char(sql_plan_line_id), 'NULL') || '(' || cnt || ')' end) order by rn), '/V/text()'), ',') as plan_lines + from + ash_plan_lines_rn + group by + instance_id + , dfo + , set_id + , process +), +/* Count occurrence per process and ASH activity */ +ash_activity as +( + select + cnt + , activity + , instance_id + , dfo + , set_id + , process + from + ( + select + instance_id + , dfo + , set_id + , process + , count(*) as cnt + , activity + from + ash_dfo + group by + instance_id + , dfo + , set_id + , process + , activity + ) +), +/* The Top N activities per bucket */ +ash_activity_rn as +( + select + cnt + , activity + , instance_id + , dfo + , set_id + , process + , row_number() over (partition by instance_id, dfo, set_id, process order by cnt desc, activity) as rn + from + ash_activity +), +/* Aggregate the Top N activity */ +/* This will be joined later to the remaining data */ +ash_activity_agg as +( + select + instance_id + , dfo + , set_id + , process +&_IF_ORA112_OR_HIGHER , listagg(case when rn > &topna + 1 then null when rn = &topna + 1 then '...' else case when activity is null then null else activity || '(' || cnt || ')' end end, ',') within group (order by rn) as activities +&_IF_LOWER_THAN_ORA112 , ltrim(extract(xmlagg(xmlelement("V", case when rn > &topna + 1 then null when rn = &topna + 1 then ',' || '...' else case when activity is null then null else ',' || activity || '(' || cnt || ')' end end) order by rn), '/V/text()'), ',') as activities + from + ash_activity_rn + group by + instance_id + , dfo + , set_id + , process +), +/* Group the ASH data by process */ +ash_process as +( + select + instance_id + , process + , total_cnt + , set_id + , dfo + , cnt + , max(cnt) over () as max_cnt + , cnt_cpu + , cnt_other + , pga_mem + , temp_space + , read_req + , write_req + , read_mem_bytes + , read_bytes + , write_bytes + , total_io_bytes + , read_req_per_sec + , write_req_per_sec + , read_mem_bytes_per_sec + , read_bytes_per_sec + , write_bytes_per_sec + , tot_io_bytes_per_sec + , avg_read_req_size + , med_read_req_size + , avg_write_req_size + , med_write_req_size + from ( + select + process + , count(session_state) as cnt + , count(case when session_state = 'ON CPU' then 1 end) as cnt_cpu + , count(case when session_state != 'ON CPU' then 1 end) as cnt_other + , max(pga_allocated) as pga_mem + , max(temp_space_allocated) as temp_space + , sum(delta_read_io_requests) as read_req + , sum(delta_write_io_requests) as write_req + , sum(delta_read_mem_bytes) as read_mem_bytes + , sum(delta_read_io_bytes) as read_bytes + , sum(delta_write_io_bytes) as write_bytes + , sum(delta_interconnect_io_bytes) as total_io_bytes +-- , round(sum(delta_read_io_requests) / &sample_freq / count(session_state)) as read_req_per_sec +-- , round(sum(delta_write_io_requests) / &sample_freq / count(session_state)) as write_req_per_sec +-- , round(sum(delta_read_io_bytes) / &sample_freq / count(session_state)) as read_bytes_per_sec +-- , round(sum(delta_write_io_bytes) / &sample_freq / count(session_state)) as write_bytes_per_sec +-- , round(sum(delta_interconnect_io_bytes) / &sample_freq / count(session_state)) as tot_io_bytes_per_sec + , round(avg(delta_read_io_requests / delta_time * 1000000)) as read_req_per_sec + , round(avg(delta_write_io_requests / delta_time * 1000000)) as write_req_per_sec + , round(avg(delta_read_mem_bytes / delta_time * 1000000)) as read_mem_bytes_per_sec + , round(avg(delta_read_io_bytes / delta_time * 1000000)) as read_bytes_per_sec + , round(avg(delta_write_io_bytes / delta_time * 1000000)) as write_bytes_per_sec + , round(avg(delta_interconnect_io_bytes / delta_time * 1000000)) as tot_io_bytes_per_sec + , round(avg(delta_read_request_size)) as avg_read_req_size + , round(median(delta_read_request_size)) as med_read_req_size + , round(avg(delta_write_request_size)) as avg_write_req_size + , round(median(delta_write_request_size)) as med_write_req_size + , instance_id + , total_cnt + , set_id + , dfo + from + ash_dfo + group by + instance_id + , dfo + , set_id + , process + , total_cnt + ) +), +/* We need some log based data for formatting the figures */ +ash_process_prefmt as +( + select + instance_id + , process + , pga_mem + , trunc(log(2, abs(case pga_mem when 0 then 1 else pga_mem end))) as power_2_pga_mem + , trunc(mod(log(2, abs(case pga_mem when 0 then 1 else pga_mem end)) ,10)) as power_2_pga_mem_mod_10 + , temp_space + , trunc(log(2, abs(case temp_space when 0 then 1 else temp_space end))) as power_2_temp_space + , trunc(mod(log(2, abs(case temp_space when 0 then 1 else temp_space end)), 10)) as power_2_temp_space_mod_10 + , read_req + , trunc(log(10, abs(case read_req when 0 then 1 else read_req end))) as power_10_read_req + , trunc(mod(log(10, abs(case read_req when 0 then 1 else read_req end)), 3)) as power_10_read_req_mod_3 + , write_req + , trunc(log(10, abs(case write_req when 0 then 1 else write_req end))) as power_10_write_req + , trunc(mod(log(10, abs(case write_req when 0 then 1 else write_req end)), 3)) as power_10_write_req_mod_3 + , avg_read_req_size + , trunc(log(2, abs(case avg_read_req_size when 0 then 1 else avg_read_req_size end))) as power_2_avg_read_req_size + , trunc(mod(log(2, abs(case avg_read_req_size when 0 then 1 else avg_read_req_size end)), 10)) as power_2_avg_read_req_size_10 + , med_read_req_size + , trunc(log(2, abs(case med_read_req_size when 0 then 1 else med_read_req_size end))) as power_2_med_read_req_size + , trunc(mod(log(2, abs(case med_read_req_size when 0 then 1 else med_read_req_size end)), 10)) as power_2_med_read_req_size_10 + , avg_write_req_size + , trunc(log(2, abs(case avg_write_req_size when 0 then 1 else avg_write_req_size end))) as power_2_avg_write_req_size + , trunc(mod(log(2, abs(case avg_write_req_size when 0 then 1 else avg_write_req_size end)), 10)) as power_2_avg_write_req_size_10 + , med_write_req_size + , trunc(log(2, abs(case med_write_req_size when 0 then 1 else med_write_req_size end))) as power_2_med_write_req_size + , trunc(mod(log(2, abs(case med_write_req_size when 0 then 1 else med_write_req_size end)), 10)) as power_2_med_write_req_size_10 + , read_mem_bytes + , trunc(log(2, abs(case read_mem_bytes when 0 then 1 else read_mem_bytes end))) as power_2_read_mem_bytes + , trunc(mod(log(2, abs(case read_mem_bytes when 0 then 1 else read_mem_bytes end)), 10)) as power_2_read_mem_bytes_mod_10 + , read_bytes + , trunc(log(2, abs(case read_bytes when 0 then 1 else read_bytes end))) as power_2_read_bytes + , trunc(mod(log(2, abs(case read_bytes when 0 then 1 else read_bytes end)), 10)) as power_2_read_bytes_mod_10 + , write_bytes + , trunc(log(2, abs(case write_bytes when 0 then 1 else write_bytes end))) as power_2_write_bytes + , trunc(mod(log(2, abs(case write_bytes when 0 then 1 else write_bytes end)), 10)) as power_2_write_bytes_mod_10 + , total_io_bytes + , trunc(log(2, abs(case total_io_bytes when 0 then 1 else total_io_bytes end))) as power_2_total_io_bytes + , trunc(mod(log(2, abs(case total_io_bytes when 0 then 1 else total_io_bytes end)), 10)) as power_2_total_io_bytes_mod_10 + , read_req_per_sec + , trunc(log(10, abs(case read_req_per_sec when 0 then 1 else read_req_per_sec end))) as power_10_read_req_per_sec + , trunc(mod(log(10, abs(case read_req_per_sec when 0 then 1 else read_req_per_sec end)), 3)) as power_10_read_req_ps_mod_3 + , write_req_per_sec + , trunc(log(10, abs(case write_req_per_sec when 0 then 1 else write_req_per_sec end))) as power_10_write_req_per_sec + , trunc(mod(log(10, abs(case write_req_per_sec when 0 then 1 else write_req_per_sec end)), 3)) as power_10_write_req_ps_mod_3 + , read_mem_bytes_per_sec + , trunc(log(2, abs(case read_mem_bytes_per_sec when 0 then 1 else read_mem_bytes_per_sec end))) as power_2_read_mem_bytes_per_sec + , trunc(mod(log(2, abs(case read_mem_bytes_per_sec when 0 then 1 else read_mem_bytes_per_sec end)), 10)) as power_2_read_mem_byt_ps_mod_10 + , read_bytes_per_sec + , trunc(log(2, abs(case read_bytes_per_sec when 0 then 1 else read_bytes_per_sec end))) as power_2_read_bytes_per_sec + , trunc(mod(log(2, abs(case read_bytes_per_sec when 0 then 1 else read_bytes_per_sec end)), 10)) as power_2_read_bytes_ps_mod_10 + , write_bytes_per_sec + , trunc(log(2, abs(case write_bytes_per_sec when 0 then 1 else write_bytes_per_sec end))) as power_2_write_bytes_per_sec + , trunc(mod(log(2, abs(case write_bytes_per_sec when 0 then 1 else write_bytes_per_sec end)), 10)) as power_2_write_bytes_ps_mod_10 + , tot_io_bytes_per_sec + , trunc(log(2, abs(case tot_io_bytes_per_sec when 0 then 1 else tot_io_bytes_per_sec end))) as power_2_tot_io_bytes_per_sec + , trunc(mod(log(2, abs(case tot_io_bytes_per_sec when 0 then 1 else tot_io_bytes_per_sec end)), 10)) as power_2_tot_io_bytes_ps_mod_10 + , cnt + , cnt_cpu + , cnt_other + , total_cnt + , max_cnt + , set_id + , dfo + , round(cnt_cpu / cnt * 100) as percentage_cpu + from + ash_process +), +/* Format the figures */ +ash_process_fmt as +( + select + instance_id + , process + , to_char(round(pga_mem / power(2, power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end)), 'FM99999') || + case power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when pga_mem is null + then null + else '*2^'||to_char(power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end) + end + end as pga_mem_format + , to_char(round(temp_space / power(2, power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end)), 'FM99999') || + case power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when temp_space is null + then null + else '*2^'||to_char(power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end) + end + end as temp_space_format + , to_char(round(read_req / power(10, power_10_read_req - case when power_10_read_req > 0 and power_10_read_req_mod_3 = 0 then 3 else power_10_read_req_mod_3 end)), 'FM99999') || + case power_10_read_req - case when power_10_read_req > 0 and power_10_read_req_mod_3 = 0 then 3 else power_10_read_req_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when read_req is null + then null + else '*10^'||to_char(power_10_read_req - case when power_10_read_req > 0 and power_10_read_req_mod_3 = 0 then 3 else power_10_read_req_mod_3 end) + end + end as read_req + , to_char(round(avg_read_req_size / power(2, power_2_avg_read_req_size - case when power_2_avg_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_read_req_size))),3)) = 0 then power_2_avg_read_req_size_10 + 10 else power_2_avg_read_req_size_10 end)), 'FM99999') || + case power_2_avg_read_req_size - case when power_2_avg_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_read_req_size))),3)) = 0 then power_2_avg_read_req_size_10 + 10 else power_2_avg_read_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when avg_read_req_size is null + then null + else '*2^'||to_char(power_2_avg_read_req_size - case when power_2_avg_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_read_req_size))),3)) = 0 then power_2_avg_read_req_size_10 + 10 else power_2_avg_read_req_size_10 end) + end + end as avg_read_req_size + , to_char(round(med_read_req_size / power(2, power_2_med_read_req_size - case when power_2_med_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_read_req_size))),3)) = 0 then power_2_med_read_req_size_10 + 10 else power_2_med_read_req_size_10 end)), 'FM99999') || + case power_2_med_read_req_size - case when power_2_med_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_read_req_size))),3)) = 0 then power_2_med_read_req_size_10 + 10 else power_2_med_read_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when med_read_req_size is null + then null + else '*2^'||to_char(power_2_med_read_req_size - case when power_2_med_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_read_req_size))),3)) = 0 then power_2_med_read_req_size_10 + 10 else power_2_med_read_req_size_10 end) + end + end as med_read_req_size + , to_char(round(avg_write_req_size / power(2, power_2_avg_write_req_size - case when power_2_avg_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_write_req_size))),3)) = 0 then power_2_avg_write_req_size_10 + 10 else power_2_avg_write_req_size_10 end)), 'FM99999') || + case power_2_avg_write_req_size - case when power_2_avg_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_write_req_size))),3)) = 0 then power_2_avg_write_req_size_10 + 10 else power_2_avg_write_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when avg_write_req_size is null + then null + else '*2^'||to_char(power_2_avg_write_req_size - case when power_2_avg_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_write_req_size))),3)) = 0 then power_2_avg_write_req_size_10 + 10 else power_2_avg_write_req_size_10 end) + end + end as avg_write_req_size + , to_char(round(med_write_req_size / power(2, power_2_med_write_req_size - case when power_2_med_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_write_req_size))),3)) = 0 then power_2_med_write_req_size_10 + 10 else power_2_med_write_req_size_10 end)), 'FM99999') || + case power_2_med_write_req_size - case when power_2_med_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_write_req_size))),3)) = 0 then power_2_med_write_req_size_10 + 10 else power_2_med_write_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when med_write_req_size is null + then null + else '*2^'||to_char(power_2_med_write_req_size - case when power_2_med_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_write_req_size))),3)) = 0 then power_2_med_write_req_size_10 + 10 else power_2_med_write_req_size_10 end) + end + end as med_write_req_size + , to_char(round(write_req / power(10, power_10_write_req - case when power_10_write_req > 0 and power_10_write_req_mod_3 = 0 then 3 else power_10_write_req_mod_3 end)), 'FM99999') || + case power_10_write_req - case when power_10_write_req > 0 and power_10_write_req_mod_3 = 0 then 3 else power_10_write_req_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when write_req is null + then null + else '*10^'||to_char(power_10_write_req - case when power_10_write_req > 0 and power_10_write_req_mod_3 = 0 then 3 else power_10_write_req_mod_3 end) + end + end as write_req + , to_char(round(read_mem_bytes / power(2, power_2_read_mem_bytes - case when power_2_read_mem_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes))),3)) = 0 then power_2_read_mem_bytes_mod_10 + 10 else power_2_read_mem_bytes_mod_10 end)), 'FM99999') || + case power_2_read_mem_bytes - case when power_2_read_mem_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes))),3)) = 0 then power_2_read_mem_bytes_mod_10 + 10 else power_2_read_mem_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when read_mem_bytes is null + then null + else '*2^'||to_char(power_2_read_mem_bytes - case when power_2_read_mem_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes))),3)) = 0 then power_2_read_mem_bytes_mod_10 + 10 else power_2_read_mem_bytes_mod_10 end) + end + end as read_mem_bytes + , to_char(round(read_bytes / power(2, power_2_read_bytes - case when power_2_read_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes))),3)) = 0 then power_2_read_bytes_mod_10 + 10 else power_2_read_bytes_mod_10 end)), 'FM99999') || + case power_2_read_bytes - case when power_2_read_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes))),3)) = 0 then power_2_read_bytes_mod_10 + 10 else power_2_read_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when read_bytes is null + then null + else '*2^'||to_char(power_2_read_bytes - case when power_2_read_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes))),3)) = 0 then power_2_read_bytes_mod_10 + 10 else power_2_read_bytes_mod_10 end) + end + end as read_bytes + , to_char(round(write_bytes / power(2, power_2_write_bytes - case when power_2_write_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes))),3)) = 0 then power_2_write_bytes_mod_10 + 10 else power_2_write_bytes_mod_10 end)), 'FM99999') || + case power_2_write_bytes - case when power_2_write_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes))),3)) = 0 then power_2_write_bytes_mod_10 + 10 else power_2_write_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when write_bytes is null + then null + else '*2^'||to_char(power_2_write_bytes - case when power_2_write_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes))),3)) = 0 then power_2_write_bytes_mod_10 + 10 else power_2_write_bytes_mod_10 end) + end + end as write_bytes + , to_char(round(total_io_bytes / power(2, power_2_total_io_bytes - case when power_2_total_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_total_io_bytes))),3)) = 0 then power_2_total_io_bytes_mod_10 + 10 else power_2_total_io_bytes_mod_10 end)), 'FM99999') || + case power_2_total_io_bytes - case when power_2_total_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_total_io_bytes))),3)) = 0 then power_2_total_io_bytes_mod_10 + 10 else power_2_total_io_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when total_io_bytes is null + then null + else '*2^'||to_char(power_2_total_io_bytes - case when power_2_total_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_total_io_bytes))),3)) = 0 then power_2_total_io_bytes_mod_10 + 10 else power_2_total_io_bytes_mod_10 end) + end + end as total_io_bytes + , to_char(round(read_req_per_sec / power(10, power_10_read_req_per_sec - case when power_10_read_req_per_sec > 0 and power_10_read_req_ps_mod_3 = 0 then 3 else power_10_read_req_ps_mod_3 end)), 'FM99999') || + case power_10_read_req_per_sec - case when power_10_read_req_per_sec > 0 and power_10_read_req_ps_mod_3 = 0 then 3 else power_10_read_req_ps_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when read_req_per_sec is null + then null + else '*10^'||to_char(power_10_read_req_per_sec - case when power_10_read_req_per_sec > 0 and power_10_read_req_ps_mod_3 = 0 then 3 else power_10_read_req_ps_mod_3 end) + end + end as read_req_per_sec + , to_char(round(write_req_per_sec / power(10, power_10_write_req_per_sec - case when power_10_write_req_per_sec > 0 and power_10_write_req_ps_mod_3 = 0 then 3 else power_10_write_req_ps_mod_3 end)), 'FM99999') || + case power_10_write_req_per_sec - case when power_10_write_req_per_sec > 0 and power_10_write_req_ps_mod_3 = 0 then 3 else power_10_write_req_ps_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when write_req_per_sec is null + then null + else '*10^'||to_char(power_10_write_req_per_sec - case when power_10_write_req_per_sec > 0 and power_10_write_req_ps_mod_3 = 0 then 3 else power_10_write_req_ps_mod_3 end) + end + end as write_req_per_sec + , to_char(round(read_mem_bytes_per_sec / power(2, power_2_read_mem_bytes_per_sec - case when power_2_read_mem_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes_per_sec))),3)) = 0 then power_2_read_mem_byt_ps_mod_10 + 10 else power_2_read_mem_byt_ps_mod_10 end)), 'FM99999') || + case power_2_read_mem_bytes_per_sec - case when power_2_read_mem_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes_per_sec))),3)) = 0 then power_2_read_mem_byt_ps_mod_10 + 10 else power_2_read_mem_byt_ps_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when read_mem_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_read_mem_bytes_per_sec - case when power_2_read_mem_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes_per_sec))),3)) = 0 then power_2_read_mem_byt_ps_mod_10 + 10 else power_2_read_mem_byt_ps_mod_10 end) + end + end as read_mem_bytes_per_sec + , to_char(round(read_bytes_per_sec / power(2, power_2_read_bytes_per_sec - case when power_2_read_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes_per_sec))),3)) = 0 then power_2_read_bytes_ps_mod_10 + 10 else power_2_read_bytes_ps_mod_10 end)), 'FM99999') || + case power_2_read_bytes_per_sec - case when power_2_read_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes_per_sec))),3)) = 0 then power_2_read_bytes_ps_mod_10 + 10 else power_2_read_bytes_ps_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when read_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_read_bytes_per_sec - case when power_2_read_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes_per_sec))),3)) = 0 then power_2_read_bytes_ps_mod_10 + 10 else power_2_read_bytes_ps_mod_10 end) + end + end as read_bytes_per_sec + , to_char(round(write_bytes_per_sec / power(2, power_2_write_bytes_per_sec - case when power_2_write_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes_per_sec))),3)) = 0 then power_2_write_bytes_ps_mod_10 + 10 else power_2_write_bytes_ps_mod_10 end)), 'FM99999') || + case power_2_write_bytes_per_sec - case when power_2_write_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes_per_sec))),3)) = 0 then power_2_write_bytes_ps_mod_10 + 10 else power_2_write_bytes_ps_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when write_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_write_bytes_per_sec - case when power_2_write_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes_per_sec))),3)) = 0 then power_2_write_bytes_ps_mod_10 + 10 else power_2_write_bytes_ps_mod_10 end) + end + end as write_bytes_per_sec + , to_char(round(tot_io_bytes_per_sec / power(2, power_2_tot_io_bytes_per_sec - case when power_2_tot_io_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_tot_io_bytes_per_sec))),3)) = 0 then power_2_tot_io_bytes_ps_mod_10 + 10 else power_2_tot_io_bytes_ps_mod_10 end)), 'FM99999') || + case power_2_tot_io_bytes_per_sec - case when power_2_tot_io_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_tot_io_bytes_per_sec))),3)) = 0 then power_2_tot_io_bytes_ps_mod_10 + 10 else power_2_tot_io_bytes_ps_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when tot_io_bytes_per_sec is null + then null + else '*2^'||to_char(power_2_tot_io_bytes_per_sec - case when power_2_tot_io_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_tot_io_bytes_per_sec))),3)) = 0 then power_2_tot_io_bytes_ps_mod_10 + 10 else power_2_tot_io_bytes_ps_mod_10 end) + end + end as tot_io_bytes_per_sec + , cnt + , cnt_cpu + , cnt_other + , percentage_cpu + , set_id + , dfo + , substr(rpad('&gc', nvl(round(cnt_cpu / nullif(max_cnt, 0) * &wgs), 0), '&gc') || rpad('&gc2', nvl(round(cnt_other / nullif(max_cnt, 0) * &wgs), 0), '&gc2'), 1, &wgs) as activity_graph + from + ash_process_prefmt +) +/* The final set including the Top N plan lines and Top N activities */ +select /* XPLAN_ASH PARALLEL_SLAVE_ACTIVITY SQL_ID: &si */ /*+ optimizer_features_enable('11.1.0.7') NO_STATEMENT_QUEUING */ + /* 11.2.0.1 again generates a ORA-03113 during parse due to the COUNT(DISTINCT...), so falling back to 11.1.0.7 optimizer features */ + a.instance_id + , a.dfo + , a.set_id + , a.process + , cnt + , activity_graph + , cnt_cpu + , cnt_other + , percentage_cpu + , lpad(pga_mem_format, 6) as pga + , lpad(temp_space_format, 6) as temp + , b.plan_lines + , c.activities + , lpad(read_req, 6) as rd_req + , lpad(write_req, 6) as wr_req + , lpad(read_req_per_sec, 6) as rd_r_s + , lpad(write_req_per_sec, 6) as wr_r_s + , lpad(read_bytes, 6) as rd_byt + , lpad(write_bytes, 6) as wr_byt + , lpad(total_io_bytes, 6) as io_byt + , lpad(read_mem_bytes, 6) as rm_byt + , lpad(read_bytes_per_sec, 6) as rd_b_s + , lpad(write_bytes_per_sec, 6) as wr_b_s + , lpad(tot_io_bytes_per_sec, 6) as io_b_s + , lpad(read_mem_bytes_per_sec, 6) as rm_b_s + , lpad(avg_read_req_size, 6) as a_rr_s + , lpad(med_read_req_size, 6) as m_rr_s + , lpad(avg_write_req_size, 6) as a_wr_s + , lpad(med_write_req_size, 6) as m_wr_s +from + ash_process_fmt a + , ash_plan_lines_agg b + , ash_activity_agg c +where + a.instance_id = b.instance_id (+) +and coalesce(a.dfo, -1) = coalesce(b.dfo (+), -1) +and coalesce(a.set_id, -1) = coalesce(b.set_id (+), -1) +and a.process = b.process (+) +and a.instance_id = c.instance_id (+) +and coalesce(a.dfo, -1) = coalesce(c.dfo (+), -1) +and coalesce(a.set_id, -1) = coalesce(c.set_id (+), -1) +and a.process = c.process (+) +order by + a.dfo --coalesce(to_number(substr(a.dfo, 2)), -1) + , coalesce(set_id, -1) + , coalesce(a.instance_id, -1) + , process +; + +column process clear +column cnt clear +column cnt_cpu clear +column cnt_other clear +column percentage_cpu clear +column pga clear +column temp clear +column rd_req clear +column wr_req clear +column rm_byt clear +column rd_byt clear +column wr_byt clear +column io_byt clear +column rd_r_s clear +column wr_r_s clear +column rm_b_s clear +column rd_b_s clear +column wr_b_s clear +column io_b_s clear +column a_rr_s clear +column m_rr_s clear +column a_wr_s clear +column m_wr_s clear +column plan_lines clear +column activities clear +column instance_id clear +column activity_graph clear +column set_id clear +column dfo clear + +clear breaks + +undefine _SHOW_12C_IO_COLS +undefine _SHOW_IO_COLS +undefine _SHOW_SET_ID +undefine _SHOW_DFO + +set heading on + +/* Various activity summaries */ + +/* The following query will be used multiple times with different parameters and therefore written to a temporary file */ + +select /* XPLAN_ASH ACTIVITY_SUMMARY SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + &GROUP_CROSS_INSTANCE as instance_id +&INCLUDE_ACTIVITY , activity + , activity_class + , round(avg(time_waited) / 1000, 1) as avg_tim_wait_ms + , round(median(time_waited) / 1000, 1) as med_tim_wait_ms + , round(min(time_waited) / 1000, 1) as min_tim_wait_ms + , round(max(time_waited) / 1000, 1) as max_tim_wait_ms + , count(*) as sample_count + , round(count(*) / total_cnt * 100) as percentage + , rpad('&gc3', nvl(round(count(*) / nullif(total_cnt, 0) * &wgs), 0), '&gc3') as activity_graph +from + ( + select + &inst_id as instance_id + , case when session_state = 'WAITING' then nvl(wait_class, '') else session_state +-- &_IF_ORA12102_OR_HIGHER || case when in_inmemory_query = 'Y' then ' INMEMORY' end + end as activity_class + , case when session_state = 'WAITING' then nvl(event, '') else session_state +&_IF_ORA12102_OR_HIGHER || case when in_inmemory_query = 'Y' then ' INMEMORY' end + end as activity + , case when session_state = 'WAITING' then nullif(time_waited, 0) else null end as time_waited + , count(*) over () as total_cnt + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + and instr('&op', 'ASH') > 0 + and to_number(nvl('&ic', '0')) > &INSTANCE_THRESHOLD + ) +group by + &GROUP_CROSS_INSTANCE +&INCLUDE_ACTIVITY , activity + , activity_class + , total_cnt +order by + &GROUP_CROSS_INSTANCE + , sample_count desc +. + +-- If you need to debug, comment the following line +set termout off + +save .xplan_ash_temp replace + +set termout on + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +--------- +union all +--------- +select + 'Activity Class Summary' as message +from + dual +where + instr('&op', 'ASH') > 0 +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +; + +column message clear + +set heading on + +column activity_class format a20 +column activity_graph format a&wgs +column instance_id noprint +column avg_tim_wait_ms &_SHOW_WAIT_TIMES.print +column med_tim_wait_ms &_SHOW_WAIT_TIMES.print +column min_tim_wait_ms &_SHOW_WAIT_TIMES.print +column max_tim_wait_ms &_SHOW_WAIT_TIMES.print + +-- If you need to debug, comment the following line +set termout off + +get .xplan_ash_temp nolist + +set termout on + +define INSTANCE_THRESHOLD = "0" +define GROUP_CROSS_INSTANCE = "1" +define INCLUDE_ACTIVITY = "--" + +/ + +column activity_class clear +column activity_graph clear +column instance_id clear +column avg_tim_wait_ms clear +column med_tim_wait_ms clear +column min_tim_wait_ms clear +column max_tim_wait_ms clear + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and to_number(nvl('&ic', '0')) > 1 +--------- +union all +--------- +select + 'Activity Class Summary per Instance' as message +from + dual +where + instr('&op', 'ASH') > 0 +and to_number(nvl('&ic', '0')) > 1 +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and to_number(nvl('&ic', '0')) > 1 +; + +column message clear + +set heading on + +column activity_class format a20 +column activity_graph format a&wgs +column avg_tim_wait_ms &_SHOW_WAIT_TIMES.print +column med_tim_wait_ms &_SHOW_WAIT_TIMES.print +column min_tim_wait_ms &_SHOW_WAIT_TIMES.print +column max_tim_wait_ms &_SHOW_WAIT_TIMES.print +break on instance_id skip 1 + +-- If you need to debug, comment the following line +set termout off + +get .xplan_ash_temp nolist + +set termout on + +define INSTANCE_THRESHOLD = "1" +define GROUP_CROSS_INSTANCE = "instance_id" +define INCLUDE_ACTIVITY = "--" + +/ + +column activity_class clear +column activity_graph clear +column avg_tim_wait_ms clear +column med_tim_wait_ms clear +column min_tim_wait_ms clear +column max_tim_wait_ms clear + +clear breaks + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +--------- +union all +--------- +select + 'Activity Summary' as message +from + dual +where + instr('&op', 'ASH') > 0 +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +; + +column message clear + +set heading on + +column activity format a50 +column activity_class format a20 +column activity_graph format a&wgs +column avg_tim_wait_ms &_SHOW_WAIT_TIMES.print +column med_tim_wait_ms &_SHOW_WAIT_TIMES.print +column min_tim_wait_ms &_SHOW_WAIT_TIMES.print +column max_tim_wait_ms &_SHOW_WAIT_TIMES.print +column instance_id noprint + +-- If you need to debug, comment the following line +set termout off + +get .xplan_ash_temp nolist + +set termout on + +define INSTANCE_THRESHOLD = "0" +define GROUP_CROSS_INSTANCE = "1" +define INCLUDE_ACTIVITY = "" + +/ + +column activity clear +column activity_class clear +column activity_graph clear +column instance_id clear +column avg_tim_wait_ms clear +column med_tim_wait_ms clear +column min_tim_wait_ms clear +column max_tim_wait_ms clear + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + instr('&op', 'ASH') > 0 +and to_number(nvl('&ic', '0')) > 1 +--------- +union all +--------- +select + 'Activity Summary per Instance' as message +from + dual +where + instr('&op', 'ASH') > 0 +and to_number(nvl('&ic', '0')) > 1 +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + instr('&op', 'ASH') > 0 +and to_number(nvl('&ic', '0')) > 1 +; + +column message clear + +set heading on + +column activity format a50 +column activity_class format a20 +column activity_graph format a&wgs +column avg_tim_wait_ms &_SHOW_WAIT_TIMES.print +column med_tim_wait_ms &_SHOW_WAIT_TIMES.print +column min_tim_wait_ms &_SHOW_WAIT_TIMES.print +column max_tim_wait_ms &_SHOW_WAIT_TIMES.print +break on instance_id skip 1 + +-- If you need to debug, comment the following line +set termout off + +get .xplan_ash_temp nolist + +set termout on + +define INSTANCE_THRESHOLD = "1" +define GROUP_CROSS_INSTANCE = "instance_id" +define INCLUDE_ACTIVITY = "" + +/ + +column activity clear +column activity_class clear +column activity_graph clear +column avg_tim_wait_ms clear +column med_tim_wait_ms clear +column min_tim_wait_ms clear +column max_tim_wait_ms clear + +clear breaks + +undefine INSTANCE_THRESHOLD +undefine GROUP_CROSS_INSTANCE +undefine INCLUDE_ACTIVITY +undefine _SHOW_WAIT_TIMES + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + (('&slave_count' is not null and instr('&op', 'DISTRIB') > 0) or instr('&op', 'TIMELINE') > 0) +--------- +union all +--------- +select + 'Activity Timeline based on ASH' as message +from + dual +where + (('&slave_count' is not null and instr('&op', 'DISTRIB') > 0) or instr('&op', 'TIMELINE') > 0) +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + (('&slave_count' is not null and instr('&op', 'DISTRIB') > 0) or instr('&op', 'TIMELINE') > 0) +; + +column message clear + +set heading on + +/* Activity Timeline */ + +-- If you need to debug, comment the following line +set termout off + +/* Determine if I/O figures should be shown or not */ + +column show_12c_io_cols new_value _SHOW_12C_IO_COLS &debug_internalp.print +column show_io_cols new_value _SHOW_IO_COLS &debug_internalp.print +column aas_size new_value aas_size &debug_internalp.print +column show_dfo_col new_value _SHOW_DFO_COL &debug_internalp.print +column dop_header new_value _DOP_HEADER &debug_internalp.print +column break_cross_instance new_value _BREAK_CI &debug_internalp.print + +select + case when (('&_EXPERIMENTAL' is null and '&_IF_ORA112_OR_HIGHER' is null) or '&_IF_ORA11203_OR_HIGHER' is null) then '' else 'no' end as show_io_cols + , case when '&_IF_ORA12_READ_MEMP' is null then '' else 'no' end as show_12c_io_cols + , to_char(&aas + 8, 'TM') as aas_size + , case when '&slave_count' is not null and '&plan_exists' is not null and '&_IF_ORA11_OR_HIGHER' is null then '' else 'no' end as show_dfo_col + , case when '&_IF_ORA11202_OR_HIGHER' is null then ' [DOP]' else '' end as dop_header + , case when '&_IF_CROSS_INSTANCE' is null then 'on break_instance_id skip 1' else '' end as break_cross_instance +from + dual +; + +column show_12c_io_cols clear +column show_io_cols clear +column aas_size clear +column show_dfo_col clear +column dop_header clear +column break_cross_instance clear + +set termout on + +column average_as_graph format a&aas_size heading 'AVERAGE|ACTIVE SESSIONS|GRAPH' +-- Hide this column as it usually doesn't add much value +column median_as_graph format a&aas_size heading 'MEDIAN|ACTIVE SESSIONS|GRAPH' &show_median.print +column instance_id &_IF_CROSS_INSTANCE.print null "GLOBAL" + +column pga format a6 &_IF_ORA112_OR_HIGHERP.print +column temp format a6 &_IF_ORA112_OR_HIGHERP.print +column rd_req format a6 heading 'READ|REQ|PERSEC' &_SHOW_IO_COLS.print +column wr_req format a6 heading 'WRITE|REQ|PERSEC' &_SHOW_IO_COLS.print +column rd_byt format a6 heading 'READ|BYTES|PERSEC' &_SHOW_IO_COLS.print +column wr_byt format a6 heading 'WRITE|BYTES|PERSEC' &_SHOW_IO_COLS.print +column io_byt format a6 heading 'IO_LAY|BYTES|PERSEC' &_SHOW_IO_COLS.print +column rm_byt format a6 heading 'READ|MEM|BYTES|PERSEC' &_SHOW_12C_IO_COLS.print +--column rd_r_s format a6 heading 'READ|REQ|PERSEC' &_SHOW_IO_COLS.print +--column wr_r_s format a6 heading 'WRITE|REQ|PERSEC' &_SHOW_IO_COLS.print +--column rd_b_s format a6 heading 'READ|BYTES|PERSEC' &_SHOW_IO_COLS.print +--column wr_b_s format a6 heading 'WRITE|BYTES|PERSEC' &_SHOW_IO_COLS.print +--column io_b_s format a6 heading 'IO_LAY|BYTES|PERSEC' &_SHOW_IO_COLS.print +--column rm_b_s format a6 heading 'READ|MEM|BYTES|PERSEC' &_SHOW_12C_IO_COLS.print +column a_rr_s format a6 heading 'AVG|RE_REQ|SIZE' &_SHOW_IO_COLS.print +column m_rr_s format a6 heading 'MEDIAN|RE_REQ|SIZE' &_SHOW_IO_COLS.print +column a_wr_s format a6 heading 'AVG|WR_REQ|SIZE' &_SHOW_IO_COLS.print +column m_wr_s format a6 heading 'MEDIAN|WR_REQ|SIZE' &_SHOW_IO_COLS.print +column plan_lines format a40 heading 'TOP|ACTIVE|PLAN LINES' &_IF_ORA11_OR_HIGHERP.print +column dfo_active format a25 heading 'ACTIVE|DFO|TREES&_DOP_HEADER (AAS)' &_SHOW_DFO_COL.print +column activities format a120 heading 'TOP|ACTIVITIES' +column processes format a85 heading 'TOP|PROCESSES' +column average_as heading 'AVERAGE|ACTIVE|SESSIONS' +column median_as heading 'MEDIAN|ACTIVE|SESSIONS' +column stddev_as heading 'STDDEV|ACTIVE|SESSIONS' +-- Hide this column as it usually doesn't add much value +column cpu_median &show_median.print +-- Hide this column as it usually doesn't add much value +column other_median &show_median.print +column break_instance_id noprint +break on duration_secs &_BREAK_CI + +with /* XPLAN_ASH ACTIVITY_TIMELINE SQL_ID: &si */ +/* Base ASH data */ +ash_base as +( + select /*+ materialize */ + &inst_id as instance_id +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start +&_IF_ORA11_OR_HIGHER , sql_plan_line_id +&_IF_LOWER_THAN_ORA11 , 0 as sql_plan_line_id + , cast(sample_time as date) as sample_time + , session_state + , session_id + , session_serial# + -- According to DELTA_TIME the time the previous sample took place + -- DELTA_TIME is only available from 11.2 on +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket + , case when session_state = 'WAITING' then nvl(event, '') else session_state +&_IF_ORA12102_OR_HIGHER || case when in_inmemory_query = 'Y' then ' INMEMORY' end + end as activity + , case when to_number(nvl('&ic', '0')) > 1 then &inst_id || '-' end || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') as process +&_IF_ORA112_OR_HIGHER , delta_time +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_time +&_IF_ORA112_OR_HIGHER , nullif(pga_allocated, 0) as pga_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as pga_allocated +&_IF_ORA112_OR_HIGHER , nullif(temp_space_allocated, 0) as temp_space_allocated +&_IF_LOWER_THAN_ORA112 , to_number(null) as temp_space_allocated +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_read_io_requests else null end as delta_read_io_requests +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_read_io_requests +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_write_io_requests else null end as delta_write_io_requests +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_write_io_requests +&_IF_ORA12_READ_MEM , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_read_mem_bytes else null end as delta_read_mem_bytes +&_IF_ORA_NO_READ_MEM , to_number(null) as delta_read_mem_bytes +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_read_io_bytes else null end as delta_read_io_bytes +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_read_io_bytes +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_write_io_bytes else null end as delta_write_io_bytes +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_write_io_bytes +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_read_io_bytes / nullif(delta_read_io_requests, 0) else null end as delta_read_request_size +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_read_request_size +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_write_io_bytes / nullif(delta_write_io_requests, 0) else null end as delta_write_request_size +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_write_request_size +&_IF_ORA112_OR_HIGHER , case when cast(sample_time as date) - round(delta_time / 1000000) / 86400 >= coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS')) - &sample_freq / 86400 then delta_interconnect_io_bytes else null end as delta_interconnect_io_bytes +&_IF_LOWER_THAN_ORA112 , to_number(null) as delta_interconnect_io_bytes +&_IF_ORA11202_OR_HIGHER , trunc(px_flags / 2097152) as actual_degree +&_IF_LOWER_THAN_ORA11202 , to_number(null) as actual_degree + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') +-- For versions before 11g, consider the event "PX Deq Credit: send blkd" to be idle (as it is done from 11g on) +&_IF_LOWER_THAN_ORA11 &ignore_PX_credit_blkd_10g and (event is null or event != 'PX Deq Credit: send blkd') + and (('&slave_count' is not null and instr('&op', 'DISTRIB') > 0) or instr('&op', 'TIMELINE') > 0) +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +/* Instances found in ASH sample data */ +instance_data +as +( + select + distinct + instance_id + from + ash_base +), +/* Simply the cartesian product of timeline and instances */ +/* Our driving rowsource */ +timeline_inst +as +( + select + t.timeline as sample_time + , i.instance_id as instance_id + , t.sql_exec_start + -- Buckets of the official timeline + , bucket + , duration_secs +-- , trunc(round((t.timeline - t.sql_exec_start) * 86400) / &sample_freq) * &sample_freq as bucket +-- , round((t.timeline - t.sql_exec_start) * 86400) + &sample_freq as duration_secs + from + timeline t + , instance_data i +), +/* Outer join the ASH samples to the timeline / instance rowsource */ +ash_data1 as +( + /* The 11.2 ASH data has a DELTA_TIME indicator that allows telling how long the previous sample of that particular session was ago */ + /* This is expressed in the PREV_SAMPLE_TIME information calculated based on SAMPLE_TIME and DELTA_TIME */ + /* So for PGA/TEMP figures we can produce "artificial" rows for those sample_times where no actual sampling of that particular session took place */ + /* But according to DELTA_TIME that particular sample was still "valid" in the past */ + /* The purpose of this is to get a "smoother" picture of PGA/TEMP allocation for Parallel Execution where not every sample time */ + /* all involved Parallel Workers will be sampled */ + /* Since this results in a poorly performing outer range join, this is now divided into three parts */ + -- + /* Part one: The data that covers exactly one bucket can be equi-joined, no artificial rows here */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + , t.duration_secs + , t.sql_exec_start + , ash.pga_allocated + , ash.temp_space_allocated + , ash.session_state + , ash.activity + , ash.process + , ash.sql_plan_line_id + , ash.delta_time + , round(ash.delta_read_io_requests / delta_time * 1000000) as delta_read_io_requests + , round(ash.delta_write_io_requests / delta_time * 1000000) as delta_write_io_requests + , round(ash.delta_read_mem_bytes / delta_time * 1000000) as delta_read_mem_bytes + , round(ash.delta_read_io_bytes / delta_time * 1000000) as delta_read_io_bytes + , round(ash.delta_write_io_bytes / delta_time * 1000000) as delta_write_io_bytes + , ash.delta_read_request_size + , ash.delta_write_request_size + , round(ash.delta_interconnect_io_bytes / delta_time * 1000000) as delta_interconnect_io_bytes + , ash.actual_degree + , cast(to_char(null) as varchar2(1)) as artificial_indicator + from + timeline_inst t + , ash_base ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id + -- Rows that at most cover one bucket (or even fall within the same bucket) + and ash.ash_prev_bucket >= ash.ash_bucket - &sample_freq + --------- + union all + --------- + /* Part two: The data spanning more than a bucket needs to be range joined */ + /* But we can dramatically lower the size of the row source to join by restricting to those spanning more than a single bucket */ + /* Here the artificial rows will be generated */ + select + t.sample_time + , t.bucket + , ash.sample_time as ash_sample_time + , ash.ash_bucket + , ash.prev_sample_time + , ash.ash_prev_bucket + , t.instance_id + /* Only use remaining fields for those non-artificial rows (see below for an explanation) */ + , t.duration_secs + , t.sql_exec_start + , ash.pga_allocated + , ash.temp_space_allocated + , ash.session_state + , ash.activity + , ash.process + , ash.sql_plan_line_id + , ash.delta_time + , ash.delta_read_io_requests + , ash.delta_write_io_requests + , ash.delta_read_mem_bytes + , ash.delta_read_io_bytes + , ash.delta_write_io_bytes + , ash.delta_read_request_size + , ash.delta_write_request_size + , ash.delta_interconnect_io_bytes + , ash.actual_degree + , ash.artificial_indicator + from + timeline_inst t + , ( +&use_no_lateral select /*+ use_merge(ash dup) no_merge */ +&use_lateral select /*+ no_merge */ + ash.sample_time + , ash_bucket - lvl + &sample_freq as ash_bucket + , ash.instance_id + , ash.prev_sample_time + , ash.ash_prev_bucket + , ash.pga_allocated + , ash.temp_space_allocated + , case when lvl = &sample_freq then ash.session_state end as session_state + , case when lvl = &sample_freq then ash.activity end as activity + , case when lvl = &sample_freq then ash.process end as process + , case when lvl = &sample_freq then ash.sql_plan_line_id end as sql_plan_line_id + , case when lvl = &sample_freq then ash.delta_time end as delta_time + -- +-- , case when lvl = &sample_freq then ash.delta_read_io_requests end as delta_read_io_requests +-- , case when lvl = &sample_freq then ash.delta_write_io_requests end as delta_write_io_requests +-- , case when lvl = &sample_freq then ash.delta_read_mem_bytes end as delta_read_mem_bytes +-- , case when lvl = &sample_freq then ash.delta_read_io_bytes end as delta_read_io_bytes +-- , case when lvl = &sample_freq then ash.delta_write_io_bytes end as delta_write_io_bytes +-- , case when lvl = &sample_freq then ash.delta_read_request_size end as delta_read_request_size +-- , case when lvl = &sample_freq then ash.delta_write_request_size end as delta_write_request_size +-- , case when lvl = &sample_freq then ash.delta_interconnect_io_bytes end as delta_interconnect_io_bytes + -- + , round(ash.delta_read_io_requests / delta_time * 1000000) as delta_read_io_requests + , round(ash.delta_write_io_requests / delta_time * 1000000) as delta_write_io_requests + , round(ash.delta_read_mem_bytes / delta_time * 1000000) as delta_read_mem_bytes + , round(ash.delta_read_io_bytes / delta_time * 1000000) as delta_read_io_bytes + , round(ash.delta_write_io_bytes / delta_time * 1000000) as delta_write_io_bytes + , ash.delta_read_request_size as delta_read_request_size + , ash.delta_write_request_size as delta_write_request_size + , round(ash.delta_interconnect_io_bytes / delta_time * 1000000) as delta_interconnect_io_bytes + -- + , case when lvl = &sample_freq then ash.actual_degree end as actual_degree + , case when lvl > &sample_freq then 'Y' else null end as artificial_indicator + from + ash_base ash +&use_lateral , lateral(select level * &sample_freq as lvl from dual connect by level <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq) +&use_no_lateral , (select /*+ cardinality(1e5) */ level * &sample_freq as lvl from dual connect by level <= 1e5) dup + where + ash.ash_prev_bucket < ash.ash_bucket - &sample_freq +&use_no_lateral and dup.lvl <= (ash.ash_bucket - greatest(ash.ash_prev_bucket, -&sample_freq)) / &sample_freq + --and ash_bucket - lvl + &sample_freq >= 0 + ) ash + where + 1 = 1 + and ash.ash_bucket = t.bucket + and ash.instance_id = t.instance_id +), +ash_data as +( + /* Part one and two from prior subquery expression */ + select + * + from + ash_data1 + --------- + union all + --------- + /* Part three: The rows from the driving row source that don't have a match in the previous data set (The outer join part) */ + select + t.sample_time + , t.bucket + , null as ash_sample_time + , null as ash_bucket + , null as prev_sample_time + , null as ash_prev_bucket + , t.instance_id + , t.duration_secs + , t.sql_exec_start + , null as pga_allocated + , null as temp_space_allocated + , null as session_state + , null as activity + , null as process + , null as sql_plan_line_id + , null as delta_time + , null as delta_read_io_requests + , null as delta_write_io_requests + , null as delta_read_mem_bytes + , null as delta_read_io_bytes + , null as delta_write_io_bytes + , null as delta_read_request_size + , null as delta_write_request_size + , null as delta_interconnect_io_bytes + , null as actual_degree + , null as artificial_indicator + from + timeline_inst t + where + not exists + ( + select + null + from + ash_data1 x + where + t.instance_id = x.instance_id + and t.bucket = x.bucket + ) +) +, +/* Define the target buckets */ +ash_bkts1 as +( + select + instance_id + , duration_secs + , ntile(&avg_as_bkts) over (partition by instance_id order by duration_secs) as bkt + from + ( + select + distinct + instance_id + , duration_secs + from + ash_data + ) +), +ash_bkts as +( + select + decode(grouping(instance_id), 1, -1, instance_id) as instance_id + , duration_secs + , bkt + from + ash_bkts1 + group by + duration_secs +&_IS_SINGL_INSTANCE , instance_id +&_IS_CROSS_INSTANCE , grouping sets(instance_id, ()) + , bkt +), +/* The most active plan lines */ +/* Count occurrence per sample_time and execution plan line */ +ash_plan_lines as +( + select + cnt + , sql_plan_line_id + , instance_id + , duration_secs + from + ( + select + duration_secs + , count(*) as cnt + , case when session_state is null then null else nvl(to_char(sql_plan_line_id, 'TM'), 'NULL') end as sql_plan_line_id + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + from + ash_data + /* Ignore PGA/TEMP artificial rows here */ + where + artificial_indicator is null + group by + duration_secs +&_IS_SINGL_INSTANCE , instance_id +&_IS_CROSS_INSTANCE , grouping sets(instance_id, ()) + , case when session_state is null then null else nvl(to_char(sql_plan_line_id, 'TM'), 'NULL') end + ) +), +/* Group by bucket and execution plan line */ +ash_plan_lines_bkts as +( + select + sum(a.cnt) as cnt +-- , max(a.duration_secs) as duration_secs + , a.sql_plan_line_id + , a.instance_id + , b.bkt + from + ash_plan_lines a + , ash_bkts b + where + a.instance_id = b.instance_id + and a.duration_secs = b.duration_secs + group by + a.sql_plan_line_id + , a.instance_id + , b.bkt +), +/* The Top N execution plan lines per bucket */ +ash_plan_lines_bkts_rn as +( + select + cnt + , sql_plan_line_id + , instance_id + , bkt +-- , duration_secs + , row_number() over (partition by bkt, instance_id order by cnt desc, sql_plan_line_id) as rn + from + ash_plan_lines_bkts +), +/* Aggregate per bucket the Top N execution plan lines */ +/* This will be joined later to the remaining bucket data */ +ash_plan_lines_bkts_agg as +( + select + instance_id +-- , max(duration_secs) as duration_secs + , bkt +&_IF_ORA112_OR_HIGHER , listagg(case when rn > &topnl + 1 then null when rn = &topnl + 1 then '...' else case when sql_plan_line_id is null then null else sql_plan_line_id || '(' || cnt || ')' end end, ',') within group (order by rn) as plan_lines +&_IF_LOWER_THAN_ORA112 , ltrim(extract(xmlagg(xmlelement("V", case when rn > &topnl + 1 then null when rn = &topnl + 1 then ',' || '...' else case when sql_plan_line_id is null then null else ',' || sql_plan_line_id || '(' || cnt || ')' end end) order by rn), '/V/text()'), ',') as plan_lines + from + ash_plan_lines_bkts_rn + group by + instance_id + , bkt +), +/* Count occurrence per sample_time and ASH activity */ +ash_activity as +( + select + cnt + , activity + , instance_id + , duration_secs + from + ( + select + duration_secs + , count(*) as cnt + , case when session_state is null then null else activity end as activity + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + from + ash_data + /* Ignore PGA/TEMP artificial rows here */ + where + artificial_indicator is null + group by + duration_secs +&_IS_SINGL_INSTANCE , instance_id +&_IS_CROSS_INSTANCE , grouping sets(instance_id, ()) + , case when session_state is null then null else activity end + ) +), +/* Group by bucket and activity */ +ash_activity_bkts as +( + select + sum(a.cnt) as cnt +-- , max(a.duration_secs) as duration_secs + , a.activity + , a.instance_id + , b.bkt + from + ash_activity a + , ash_bkts b + where + a.instance_id = b.instance_id + and a.duration_secs = b.duration_secs + group by + a.activity + , a.instance_id + , b.bkt +), +/* The Top N activities per bucket */ +ash_activity_bkts_rn as +( + select + cnt + , activity + , instance_id + , bkt +-- , duration_secs + , row_number() over (partition by bkt, instance_id order by cnt desc, activity) as rn + from + ash_activity_bkts +), +/* Aggregate per bucket the Top N activity */ +/* This will be joined later to the remaining bucket data */ +ash_activity_bkts_agg as +( + select + instance_id +-- , max(duration_secs) as duration_secs + , bkt +&_IF_ORA112_OR_HIGHER , listagg(case when rn > &topna + 1 then null when rn = &topna + 1 then '...' else case when activity is null then null else activity || '(' || cnt || ')' end end, ',') within group (order by rn) as activities +&_IF_LOWER_THAN_ORA112 , ltrim(extract(xmlagg(xmlelement("V", case when rn > &topna + 1 then null when rn = &topna + 1 then ',' || '...' else case when activity is null then null else ',' || activity || '(' || cnt || ')' end end) order by rn), '/V/text()'), ',') as activities + from + ash_activity_bkts_rn + group by + instance_id + , bkt +), +/* Count occurrence per sample_time and ASH process */ +ash_process as +( + select + cnt + , process + , instance_id + , duration_secs + from + ( + select + duration_secs + , count(*) as cnt + , case when session_state is null then null else process end as process + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + from + ash_data + /* Ignore PGA/TEMP artificial rows here */ + where + artificial_indicator is null + group by + duration_secs +&_IS_SINGL_INSTANCE , instance_id +&_IS_CROSS_INSTANCE , grouping sets(instance_id, ()) + , case when session_state is null then null else process end + ) +), +/* Group by bucket and process */ +ash_process_bkts as +( + select + sum(a.cnt) as cnt +-- , max(a.duration_secs) as duration_secs + , a.process + , a.instance_id + , b.bkt + from + ash_process a + , ash_bkts b + where + a.instance_id = b.instance_id + and a.duration_secs = b.duration_secs + group by + a.process + , a.instance_id + , b.bkt +), +/* The Top N processes per bucket */ +ash_process_bkts_rn as +( + select + cnt + , process + , instance_id + , bkt +-- , duration_secs + , row_number() over (partition by bkt, instance_id order by cnt desc, process) as rn + from + ash_process_bkts +), +/* Aggregate per bucket the Top N processes */ +/* This will be joined later to the remaining bucket data */ +ash_process_bkts_agg as +( + select + instance_id +-- , max(duration_secs) as duration_secs + , bkt +&_IF_ORA112_OR_HIGHER , listagg(case when rn > &topnp + 1 then null when rn = &topnp + 1 then '...' else case when process is null then null else process || '(' || cnt || ')' end end, ',') within group (order by rn) as processes +&_IF_LOWER_THAN_ORA112 , ltrim(extract(xmlagg(xmlelement("V", case when rn > &topnp + 1 then null when rn = &topnp + 1 then ',' || '...' else case when process is null then null else ',' || process || '(' || cnt || ')' end end) order by rn), '/V/text()'), ',') as processes + from + ash_process_bkts_rn + group by + instance_id + , bkt +), +dfo_info as +( + select + to_number(cast(substr(coalesce(p.object_node, p.next_object_node), 3, length(coalesce(p.object_node, p.next_object_node)) - 5) as varchar2(6))) as dfo + --to_number(cast(substr(p.object_node, 3, length(p.object_node) - 5) as varchar2(6))) as dfo + , to_number(substr(p.object_node, 3 + length(p.object_node) - 5)) as tq_id + , id + from + ( + select + p.* + , lead(object_node) over (order by id) as next_object_node + from + &plan_table p + where + p.sql_id = '&si' + and p.&second_id = &cn + and &third_id + and (p.object_node like ':Q%' or p.operation = 'PX COORDINATOR') + and '&plan_exists' is not null + and '&_IF_ORA11_OR_HIGHER' is null + and (('&slave_count' is not null and instr('&op', 'DISTRIB') > 0) or instr('&op', 'TIMELINE') > 0) + ) p +), +ash_dfo1 as +( + select + ash.* + , p.dfo + from + ash_data ash + , dfo_info p + where + p.id = ash.sql_plan_line_id +), +/* Group the active DFOs */ +ash_dfo2 as +( + select + cnt + , dop + , dfo + , instance_id + , duration_secs + from + ( + select + duration_secs + , count(*) as cnt + , max(actual_degree) as dop + , dfo + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + from + ash_dfo1 + /* Ignore PGA/TEMP artificial rows here */ + where + artificial_indicator is null + group by + duration_secs +&_IS_SINGL_INSTANCE , instance_id +&_IS_CROSS_INSTANCE , grouping sets(instance_id, ()) + , dfo + ) +), +/* Group by bucket and dfo */ +ash_dfo_bkts as +( + select + avg(a.cnt) as cnt + , max(a.dop) as dop +-- , max(a.duration_secs) as duration_secs + , a.dfo + , a.instance_id + , b.bkt + from + ash_dfo2 a + , ash_bkts b + where + a.instance_id = b.instance_id + and a.duration_secs = b.duration_secs + group by + a.dfo + , a.instance_id + , b.bkt +), +/* The Top dfos per bucket */ +ash_dfo_bkts_rn as +( + select + cnt + , dop + , dfo + , instance_id + , bkt +-- , duration_secs + , row_number() over (partition by bkt, instance_id order by cnt desc, dfo) as rn + from + ash_dfo_bkts +), +/* Aggregate per bucket the DFOs */ +/* This will be joined later to the remaining bucket data */ +ash_dfo_bkts_agg as +( + select + instance_id +-- , max(duration_secs) as duration_secs + , bkt +&_IF_ORA112_OR_HIGHER , listagg(dfo || case when dop is not null then '[' || dop || '] ' end || '(' || case when cnt >= &rnd_thr then round(cnt) else round(cnt, 1) end || ')', ',') within group (order by rn) as dfo_active +&_IF_LOWER_THAN_ORA112 , ltrim(extract(xmlagg(xmlelement("V", ',' || dfo || '(' || case when cnt >= &rnd_thr then round(cnt) else round(cnt, 1) end || ')') order by rn), '/V/text()'), ',') as dfo_active + from + ash_dfo_bkts_rn + group by + instance_id + , bkt +), +/* Group the ASH data by sample_time */ +ash_distrib as +( + select + instance_id + , duration_secs + , cnt + , cnt_cpu + , cnt_other + , pga_mem + , temp_space_alloc + , read_req + , write_req + , read_mem_bytes + , read_bytes + , write_bytes + , total_io_bytes +/* + , read_req_per_sec + , write_req_per_sec + , read_mem_bytes_per_sec + , read_bytes_per_sec + , write_bytes_per_sec + , tot_io_bytes_per_sec + , avg_read_request_size + , med_read_request_size + , avg_write_request_size + , med_write_request_size +*/ + , ntile(&avg_as_bkts) over (partition by instance_id order by duration_secs) as bkt + from ( + select + duration_secs + , count(session_state) as cnt + , count(case when session_state = 'ON CPU' then 1 end) as cnt_cpu + , count(case when session_state != 'ON CPU' then 1 end) as cnt_other + , sum(pga_allocated) as pga_mem + , sum(temp_space_allocated) as temp_space_alloc + , sum(delta_read_io_requests) as read_req + , sum(delta_write_io_requests) as write_req + , sum(delta_read_mem_bytes) as read_mem_bytes + , sum(delta_read_io_bytes) as read_bytes + , sum(delta_write_io_bytes) as write_bytes + , sum(delta_interconnect_io_bytes) as total_io_bytes +/* + , sum(delta_read_io_requests / delta_time * 1000000) as read_req_per_sec + , sum(delta_write_io_requests / delta_time * 1000000) as write_req_per_sec + , sum(delta_read_mem_bytes / delta_time * 1000000) as read_mem_bytes_per_sec + , sum(delta_read_io_bytes / delta_time * 1000000) as read_bytes_per_sec + , sum(delta_write_io_bytes / delta_time * 1000000) as write_bytes_per_sec + , sum(delta_interconnect_io_bytes / delta_time * 1000000) as tot_io_bytes_per_sec + , avg(delta_read_request_size) as avg_read_req_size + , median(delta_read_request_size) as med_read_req_size + , avg(delta_write_request_size) as avg_write_req_size + , median(delta_write_request_size) as med_write_req_size +*/ + , decode(grouping(instance_id), 1, -1, instance_id) as instance_id + from + ash_data + group by + duration_secs +&_IS_SINGL_INSTANCE , instance_id +&_IS_CROSS_INSTANCE , grouping sets(instance_id, ()) + ) +), +/* and compress into the target number of buckets */ +ash_distrib_bkts1 as +( + select + instance_id +-- , max(duration_secs) as duration_secs + , bkt + , round(avg(pga_mem)) as pga_mem + , round(avg(temp_space_alloc)) as temp_space + , round(avg(read_req)) as read_req + , round(avg(write_req)) as write_req + , round(avg(read_mem_bytes)) as read_mem_bytes + , round(avg(read_bytes)) as read_bytes + , round(avg(write_bytes)) as write_bytes + , round(avg(total_io_bytes)) as total_io_bytes +/* + , round(avg(read_req_per_sec)) as read_req_per_sec + , round(avg(write_req_per_sec)) as write_req_per_sec + , round(avg(read_mem_bytes_per_sec)) as read_mem_bytes_per_sec + , round(avg(read_bytes_per_sec)) as read_bytes_per_sec + , round(avg(write_bytes_per_sec)) as write_bytes_per_sec + , round(avg(tot_io_bytes_per_sec)) as tot_io_bytes_per_sec + , round(avg(avg_read_req_size)) as avg_read_req_size + , round(median(avg_read_req_size)) as med_read_req_size + , round(avg(avg_write_req_size)) as avg_write_req_size + , round(median(avg_write_req_size)) as med_write_req_size +*/ + , round(avg(cnt_cpu), 1) as cpu + , round(avg(cnt_other), 1) as other + , round(avg(cnt), 1) as average_as + , round(median(cnt_cpu), 1) as cpu_median + , round(median(cnt_other), 1) as other_median + , round(median(cnt), 1) as median_as + , round(stddev_samp(cnt), 1) as stddev_as + --, substr(cast(rpad('&gc', round(avg(cnt_cpu)), '&gc') || rpad('&gc2', round(avg(cnt_other)), '&gc2') as varchar2(256)), 1, &wgs) as average_as_graph + from + ash_distrib + group by + bkt + , instance_id + -- order by + -- bkt + -- , instance_id +), +max_aas as +( + select + round(max(average_as) over ()) as max_aas + , round(max(median_as) over ()) as max_mas + , a.* + from + ash_distrib_bkts1 a +), +ash_distrib_bkts as +( + select + cast(rpad(coalesce(substr(cast(rpad('&gc', round(cpu * case when max_aas > &aas then &aas / max_aas else 1 end), '&gc') || rpad('&gc2', round(other * case when max_aas > &aas then &aas / max_aas else 1 end), '&gc2') as varchar2(&aas)), 1, round(average_as * case when max_aas > &aas then &aas / max_aas else 1 end)), ' '), least(&aas, max_aas)) || ' (' || case when average_as >= &rnd_thr then round(average_as) else average_as end || ')' as varchar2(&aas_size)) as average_as_graph + , cast(rpad(coalesce(substr(cast(rpad('&gc', round(cpu_median * case when max_mas > &aas then &aas / max_mas else 1 end), '&gc') || rpad('&gc2', round(other_median * case when max_mas > &aas then &aas / max_mas else 1 end), '&gc2') as varchar2(&aas)), 1, round(median_as * case when max_aas > &aas then &aas / max_aas else 1 end)), ' '), least(&aas, max_mas)) || ' (' || case when median_as >= &rnd_thr then round(median_as) else median_as end || ')' as varchar2(&aas_size)) as median_as_graph + , a.* + from + max_aas a +), +/* Some data can be directly averaged on the buckets for higher precision results */ +ash_distrib_per_bkt as +( + select + decode(grouping(a.instance_id), 1, -1, a.instance_id) as instance_id + , b.bkt + , max(a.duration_secs) as duration_secs + , round(avg(delta_read_request_size)) as avg_read_req_size + , round(median(delta_read_request_size)) as med_read_req_size + , round(avg(delta_write_request_size)) as avg_write_req_size + , round(median(delta_write_request_size)) as med_write_req_size + from + ash_data a + , ash_bkts b + where + a.instance_id = b.instance_id + and a.duration_secs = b.duration_secs + group by +&_IS_SINGL_INSTANCE a.instance_id +&_IS_CROSS_INSTANCE grouping sets(a.instance_id, ()) + , b.bkt +), +/* We need some log based data for formatting the figures */ +ash_distrib_bkts_prefmt as +( + select + a.instance_id + , b.duration_secs + , a.bkt + , pga_mem + , trunc(log(2, abs(case pga_mem when 0 then 1 else pga_mem end))) as power_2_pga_mem + , trunc(mod(log(2, abs(case pga_mem when 0 then 1 else pga_mem end)) ,10)) as power_2_pga_mem_mod_10 + , temp_space + , trunc(log(2, abs(case temp_space when 0 then 1 else temp_space end))) as power_2_temp_space + , trunc(mod(log(2, abs(case temp_space when 0 then 1 else temp_space end)), 10)) as power_2_temp_space_mod_10 + , read_req + , trunc(log(10, abs(case read_req when 0 then 1 else read_req end))) as power_10_read_req + , trunc(mod(log(10, abs(case read_req when 0 then 1 else read_req end)), 3)) as power_10_read_req_mod_3 + , write_req + , trunc(log(10, abs(case write_req when 0 then 1 else write_req end))) as power_10_write_req + , trunc(mod(log(10, abs(case write_req when 0 then 1 else write_req end)), 3)) as power_10_write_req_mod_3 + , avg_read_req_size + , trunc(log(2, abs(case avg_read_req_size when 0 then 1 else avg_read_req_size end))) as power_2_avg_read_req_size + , trunc(mod(log(2, abs(case avg_read_req_size when 0 then 1 else avg_read_req_size end)), 10)) as power_2_avg_read_req_size_10 + , med_read_req_size + , trunc(log(2, abs(case med_read_req_size when 0 then 1 else med_read_req_size end))) as power_2_med_read_req_size + , trunc(mod(log(2, abs(case med_read_req_size when 0 then 1 else med_read_req_size end)), 10)) as power_2_med_read_req_size_10 + , avg_write_req_size + , trunc(log(2, abs(case avg_write_req_size when 0 then 1 else avg_write_req_size end))) as power_2_avg_write_req_size + , trunc(mod(log(2, abs(case avg_write_req_size when 0 then 1 else avg_write_req_size end)), 10)) as power_2_avg_write_req_size_10 + , med_write_req_size + , trunc(log(2, abs(case med_write_req_size when 0 then 1 else med_write_req_size end))) as power_2_med_write_req_size + , trunc(mod(log(2, abs(case med_write_req_size when 0 then 1 else med_write_req_size end)), 10)) as power_2_med_write_req_size_10 + , read_bytes + , trunc(log(2, abs(case read_bytes when 0 then 1 else read_bytes end))) as power_2_read_bytes + , trunc(mod(log(2, abs(case read_bytes when 0 then 1 else read_bytes end)), 10)) as power_2_read_bytes_mod_10 + , read_mem_bytes + , trunc(log(2, abs(case read_mem_bytes when 0 then 1 else read_mem_bytes end))) as power_2_read_mem_bytes + , trunc(mod(log(2, abs(case read_mem_bytes when 0 then 1 else read_mem_bytes end)), 10)) as power_2_read_mem_bytes_mod_10 + , write_bytes + , trunc(log(2, abs(case write_bytes when 0 then 1 else write_bytes end))) as power_2_write_bytes + , trunc(mod(log(2, abs(case write_bytes when 0 then 1 else write_bytes end)), 10)) as power_2_write_bytes_mod_10 + , total_io_bytes + , trunc(log(2, abs(case total_io_bytes when 0 then 1 else total_io_bytes end))) as power_2_total_io_bytes + , trunc(mod(log(2, abs(case total_io_bytes when 0 then 1 else total_io_bytes end)), 10)) as power_2_total_io_bytes_mod_10 +-- , read_req_per_sec +-- , trunc(log(10, abs(case read_req_per_sec when 0 then 1 else read_req_per_sec end))) as power_10_read_req_per_sec +-- , trunc(mod(log(10, abs(case read_req_per_sec when 0 then 1 else read_req_per_sec end)), 3)) as power_10_read_req_ps_mod_3 +-- , write_req_per_sec +-- , trunc(log(10, abs(case write_req_per_sec when 0 then 1 else write_req_per_sec end))) as power_10_write_req_per_sec +-- , trunc(mod(log(10, abs(case write_req_per_sec when 0 then 1 else write_req_per_sec end)), 3)) as power_10_write_req_ps_mod_3 +-- , read_mem_bytes_per_sec +-- , trunc(log(2, abs(case read_mem_bytes_per_sec when 0 then 1 else read_mem_bytes_per_sec end))) as power_2_read_mem_bytes_per_sec +-- , trunc(mod(log(2, abs(case read_mem_bytes_per_sec when 0 then 1 else read_mem_bytes_per_sec end)), 10)) as power_2_read_mem_byt_ps_mod_10 +-- , read_bytes_per_sec +-- , trunc(log(2, abs(case read_bytes_per_sec when 0 then 1 else read_bytes_per_sec end))) as power_2_read_bytes_per_sec +-- , trunc(mod(log(2, abs(case read_bytes_per_sec when 0 then 1 else read_bytes_per_sec end)), 10)) as power_2_read_bytes_ps_mod_10 +-- , write_bytes_per_sec +-- , trunc(log(2, abs(case write_bytes_per_sec when 0 then 1 else write_bytes_per_sec end))) as power_2_write_bytes_per_sec +-- , trunc(mod(log(2, abs(case write_bytes_per_sec when 0 then 1 else write_bytes_per_sec end)), 10)) as power_2_write_bytes_ps_mod_10 +-- , tot_io_bytes_per_sec +-- , trunc(log(2, abs(case tot_io_bytes_per_sec when 0 then 1 else tot_io_bytes_per_sec end))) as power_2_tot_io_bytes_per_sec +-- , trunc(mod(log(2, abs(case tot_io_bytes_per_sec when 0 then 1 else tot_io_bytes_per_sec end)), 10)) as power_2_tot_io_bytes_ps_mod_10 + , case when cpu >= &rnd_thr then round(cpu) else cpu end as cpu + , case when other >= &rnd_thr then round(other) else other end as other + , case when average_as >= &rnd_thr then round(average_as) else average_as end as average_as + , case when cpu_median >= &rnd_thr then round(cpu_median) else cpu end as cpu_median + , case when other_median >= &rnd_thr then round(other_median) else other end as other_median + , case when median_as >= &rnd_thr then round(median_as) else median_as end as median_as + , case when stddev_as >= &rnd_thr then round(stddev_as) else stddev_as end as stddev_as + , average_as_graph + , median_as_graph + from + ash_distrib_bkts a + , ash_distrib_per_bkt b + where + a.instance_id = b.instance_id + and a.bkt = b.bkt +), +/* Format the figures */ +ash_distrib_bkts_fmt as +( + select + instance_id + , duration_secs + , bkt + , to_char(round(pga_mem / power(2, power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end)), 'FM99999') || + case power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when pga_mem is null + then null + else '*2^'||to_char(power_2_pga_mem - case when power_2_pga_mem >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga_mem))),3)) = 0 then power_2_pga_mem_mod_10 + 10 else power_2_pga_mem_mod_10 end) + end + end as pga_mem_format + , to_char(round(temp_space / power(2, power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end)), 'FM99999') || + case power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when temp_space is null + then null + else '*2^'||to_char(power_2_temp_space - case when power_2_temp_space >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp_space))),3)) = 0 then power_2_temp_space_mod_10 + 10 else power_2_temp_space_mod_10 end) + end + end as temp_space_format + , to_char(round(read_req / power(10, power_10_read_req - case when power_10_read_req > 0 and power_10_read_req_mod_3 = 0 then 3 else power_10_read_req_mod_3 end)), 'FM99999') || + case power_10_read_req - case when power_10_read_req > 0 and power_10_read_req_mod_3 = 0 then 3 else power_10_read_req_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when read_req is null + then null + else '*10^'||to_char(power_10_read_req - case when power_10_read_req > 0 and power_10_read_req_mod_3 = 0 then 3 else power_10_read_req_mod_3 end) + end + end as read_req + , to_char(round(avg_read_req_size / power(2, power_2_avg_read_req_size - case when power_2_avg_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_read_req_size))),3)) = 0 then power_2_avg_read_req_size_10 + 10 else power_2_avg_read_req_size_10 end)), 'FM99999') || + case power_2_avg_read_req_size - case when power_2_avg_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_read_req_size))),3)) = 0 then power_2_avg_read_req_size_10 + 10 else power_2_avg_read_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when avg_read_req_size is null + then null + else '*2^'||to_char(power_2_avg_read_req_size - case when power_2_avg_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_read_req_size))),3)) = 0 then power_2_avg_read_req_size_10 + 10 else power_2_avg_read_req_size_10 end) + end + end as avg_read_req_size + , to_char(round(med_read_req_size / power(2, power_2_med_read_req_size - case when power_2_med_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_read_req_size))),3)) = 0 then power_2_med_read_req_size_10 + 10 else power_2_med_read_req_size_10 end)), 'FM99999') || + case power_2_med_read_req_size - case when power_2_med_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_read_req_size))),3)) = 0 then power_2_med_read_req_size_10 + 10 else power_2_med_read_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when med_read_req_size is null + then null + else '*2^'||to_char(power_2_med_read_req_size - case when power_2_med_read_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_read_req_size))),3)) = 0 then power_2_med_read_req_size_10 + 10 else power_2_med_read_req_size_10 end) + end + end as med_read_req_size + , to_char(round(avg_write_req_size / power(2, power_2_avg_write_req_size - case when power_2_avg_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_write_req_size))),3)) = 0 then power_2_avg_write_req_size_10 + 10 else power_2_avg_write_req_size_10 end)), 'FM99999') || + case power_2_avg_write_req_size - case when power_2_avg_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_write_req_size))),3)) = 0 then power_2_avg_write_req_size_10 + 10 else power_2_avg_write_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when avg_write_req_size is null + then null + else '*2^'||to_char(power_2_avg_write_req_size - case when power_2_avg_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_avg_write_req_size))),3)) = 0 then power_2_avg_write_req_size_10 + 10 else power_2_avg_write_req_size_10 end) + end + end as avg_write_req_size + , to_char(round(med_write_req_size / power(2, power_2_med_write_req_size - case when power_2_med_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_write_req_size))),3)) = 0 then power_2_med_write_req_size_10 + 10 else power_2_med_write_req_size_10 end)), 'FM99999') || + case power_2_med_write_req_size - case when power_2_med_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_write_req_size))),3)) = 0 then power_2_med_write_req_size_10 + 10 else power_2_med_write_req_size_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when med_write_req_size is null + then null + else '*2^'||to_char(power_2_med_write_req_size - case when power_2_med_write_req_size >= 10 and trunc(mod(log(10,abs(power(2, power_2_med_write_req_size))),3)) = 0 then power_2_med_write_req_size_10 + 10 else power_2_med_write_req_size_10 end) + end + end as med_write_req_size + , to_char(round(write_req / power(10, power_10_write_req - case when power_10_write_req > 0 and power_10_write_req_mod_3 = 0 then 3 else power_10_write_req_mod_3 end)), 'FM99999') || + case power_10_write_req - case when power_10_write_req > 0 and power_10_write_req_mod_3 = 0 then 3 else power_10_write_req_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when write_req is null + then null + else '*10^'||to_char(power_10_write_req - case when power_10_write_req > 0 and power_10_write_req_mod_3 = 0 then 3 else power_10_write_req_mod_3 end) + end + end as write_req + , to_char(round(read_mem_bytes / power(2, power_2_read_mem_bytes - case when power_2_read_mem_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes))),3)) = 0 then power_2_read_mem_bytes_mod_10 + 10 else power_2_read_mem_bytes_mod_10 end)), 'FM99999') || + case power_2_read_mem_bytes - case when power_2_read_mem_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes))),3)) = 0 then power_2_read_mem_bytes_mod_10 + 10 else power_2_read_mem_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when read_mem_bytes is null + then null + else '*2^'||to_char(power_2_read_mem_bytes - case when power_2_read_mem_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes))),3)) = 0 then power_2_read_mem_bytes_mod_10 + 10 else power_2_read_mem_bytes_mod_10 end) + end + end as read_mem_bytes + , to_char(round(read_bytes / power(2, power_2_read_bytes - case when power_2_read_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes))),3)) = 0 then power_2_read_bytes_mod_10 + 10 else power_2_read_bytes_mod_10 end)), 'FM99999') || + case power_2_read_bytes - case when power_2_read_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes))),3)) = 0 then power_2_read_bytes_mod_10 + 10 else power_2_read_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when read_bytes is null + then null + else '*2^'||to_char(power_2_read_bytes - case when power_2_read_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes))),3)) = 0 then power_2_read_bytes_mod_10 + 10 else power_2_read_bytes_mod_10 end) + end + end as read_bytes + , to_char(round(write_bytes / power(2, power_2_write_bytes - case when power_2_write_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes))),3)) = 0 then power_2_write_bytes_mod_10 + 10 else power_2_write_bytes_mod_10 end)), 'FM99999') || + case power_2_write_bytes - case when power_2_write_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes))),3)) = 0 then power_2_write_bytes_mod_10 + 10 else power_2_write_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when write_bytes is null + then null + else '*2^'||to_char(power_2_write_bytes - case when power_2_write_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes))),3)) = 0 then power_2_write_bytes_mod_10 + 10 else power_2_write_bytes_mod_10 end) + end + end as write_bytes + , to_char(round(total_io_bytes / power(2, power_2_total_io_bytes - case when power_2_total_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_total_io_bytes))),3)) = 0 then power_2_total_io_bytes_mod_10 + 10 else power_2_total_io_bytes_mod_10 end)), 'FM99999') || + case power_2_total_io_bytes - case when power_2_total_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_total_io_bytes))),3)) = 0 then power_2_total_io_bytes_mod_10 + 10 else power_2_total_io_bytes_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when total_io_bytes is null + then null + else '*2^'||to_char(power_2_total_io_bytes - case when power_2_total_io_bytes >= 10 and trunc(mod(log(10,abs(power(2, power_2_total_io_bytes))),3)) = 0 then power_2_total_io_bytes_mod_10 + 10 else power_2_total_io_bytes_mod_10 end) + end + end as total_io_bytes +-- , to_char(round(read_req_per_sec / power(10, power_10_read_req_per_sec - case when power_10_read_req_per_sec > 0 and power_10_read_req_ps_mod_3 = 0 then 3 else power_10_read_req_ps_mod_3 end)), 'FM99999') || +-- case power_10_read_req_per_sec - case when power_10_read_req_per_sec > 0 and power_10_read_req_ps_mod_3 = 0 then 3 else power_10_read_req_ps_mod_3 end +-- when 0 then ' ' +-- when 1 then ' ' +-- when 3*1 then 'K' +-- when 3*2 then 'M' +-- when 3*3 then 'G' +-- when 3*4 then 'T' +-- when 3*5 then 'P' +-- when 3*6 then 'E' +-- else case +-- when read_req_per_sec is null +-- then null +-- else '*10^'||to_char(power_10_read_req_per_sec - case when power_10_read_req_per_sec > 0 and power_10_read_req_ps_mod_3 = 0 then 3 else power_10_read_req_ps_mod_3 end) +-- end +-- end as read_req_per_sec +-- , to_char(round(write_req_per_sec / power(10, power_10_write_req_per_sec - case when power_10_write_req_per_sec > 0 and power_10_write_req_ps_mod_3 = 0 then 3 else power_10_write_req_ps_mod_3 end)), 'FM99999') || +-- case power_10_write_req_per_sec - case when power_10_write_req_per_sec > 0 and power_10_write_req_ps_mod_3 = 0 then 3 else power_10_write_req_ps_mod_3 end +-- when 0 then ' ' +-- when 1 then ' ' +-- when 3*1 then 'K' +-- when 3*2 then 'M' +-- when 3*3 then 'G' +-- when 3*4 then 'T' +-- when 3*5 then 'P' +-- when 3*6 then 'E' +-- else case +-- when write_req_per_sec is null +-- then null +-- else '*10^'||to_char(power_10_write_req_per_sec - case when power_10_write_req_per_sec > 0 and power_10_write_req_ps_mod_3 = 0 then 3 else power_10_write_req_ps_mod_3 end) +-- end +-- end as write_req_per_sec +-- , to_char(round(read_mem_bytes_per_sec / power(2, power_2_read_mem_bytes_per_sec - case when power_2_read_mem_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes_per_sec))),3)) = 0 then power_2_read_mem_byt_ps_mod_10 + 10 else power_2_read_mem_byt_ps_mod_10 end)), 'FM99999') || +-- case power_2_read_mem_bytes_per_sec - case when power_2_read_mem_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes_per_sec))),3)) = 0 then power_2_read_mem_byt_ps_mod_10 + 10 else power_2_read_mem_byt_ps_mod_10 end +-- when 0 then ' ' +-- when 1 then ' ' +-- when 10*1 then 'K' +-- when 10*2 then 'M' +-- when 10*3 then 'G' +-- when 10*4 then 'T' +-- when 10*5 then 'P' +-- when 10*6 then 'E' +-- else case +-- when read_mem_bytes_per_sec is null +-- then null +-- else '*2^'||to_char(power_2_read_mem_bytes_per_sec - case when power_2_read_mem_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_mem_bytes_per_sec))),3)) = 0 then power_2_read_mem_byt_ps_mod_10 + 10 else power_2_read_mem_byt_ps_mod_10 end) +-- end +-- end as read_mem_bytes_per_sec +-- , to_char(round(read_bytes_per_sec / power(2, power_2_read_bytes_per_sec - case when power_2_read_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes_per_sec))),3)) = 0 then power_2_read_bytes_ps_mod_10 + 10 else power_2_read_bytes_ps_mod_10 end)), 'FM99999') || +-- case power_2_read_bytes_per_sec - case when power_2_read_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes_per_sec))),3)) = 0 then power_2_read_bytes_ps_mod_10 + 10 else power_2_read_bytes_ps_mod_10 end +-- when 0 then ' ' +-- when 1 then ' ' +-- when 10*1 then 'K' +-- when 10*2 then 'M' +-- when 10*3 then 'G' +-- when 10*4 then 'T' +-- when 10*5 then 'P' +-- when 10*6 then 'E' +-- else case +-- when read_bytes_per_sec is null +-- then null +-- else '*2^'||to_char(power_2_read_bytes_per_sec - case when power_2_read_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_read_bytes_per_sec))),3)) = 0 then power_2_read_bytes_ps_mod_10 + 10 else power_2_read_bytes_ps_mod_10 end) +-- end +-- end as read_bytes_per_sec +-- , to_char(round(write_bytes_per_sec / power(2, power_2_write_bytes_per_sec - case when power_2_write_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes_per_sec))),3)) = 0 then power_2_write_bytes_ps_mod_10 + 10 else power_2_write_bytes_ps_mod_10 end)), 'FM99999') || +-- case power_2_write_bytes_per_sec - case when power_2_write_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes_per_sec))),3)) = 0 then power_2_write_bytes_ps_mod_10 + 10 else power_2_write_bytes_ps_mod_10 end +-- when 0 then ' ' +-- when 1 then ' ' +-- when 10*1 then 'K' +-- when 10*2 then 'M' +-- when 10*3 then 'G' +-- when 10*4 then 'T' +-- when 10*5 then 'P' +-- when 10*6 then 'E' +-- else case +-- when write_bytes_per_sec is null +-- then null +-- else '*2^'||to_char(power_2_write_bytes_per_sec - case when power_2_write_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_write_bytes_per_sec))),3)) = 0 then power_2_write_bytes_ps_mod_10 + 10 else power_2_write_bytes_ps_mod_10 end) +-- end +-- end as write_bytes_per_sec +-- , to_char(round(tot_io_bytes_per_sec / power(2, power_2_tot_io_bytes_per_sec - case when power_2_tot_io_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_tot_io_bytes_per_sec))),3)) = 0 then power_2_tot_io_bytes_ps_mod_10 + 10 else power_2_tot_io_bytes_ps_mod_10 end)), 'FM99999') || +-- case power_2_tot_io_bytes_per_sec - case when power_2_tot_io_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_tot_io_bytes_per_sec))),3)) = 0 then power_2_tot_io_bytes_ps_mod_10 + 10 else power_2_tot_io_bytes_ps_mod_10 end +-- when 0 then ' ' +-- when 1 then ' ' +-- when 10*1 then 'K' +-- when 10*2 then 'M' +-- when 10*3 then 'G' +-- when 10*4 then 'T' +-- when 10*5 then 'P' +-- when 10*6 then 'E' +-- else case +-- when tot_io_bytes_per_sec is null +-- then null +-- else '*2^'||to_char(power_2_tot_io_bytes_per_sec - case when power_2_tot_io_bytes_per_sec >= 10 and trunc(mod(log(10,abs(power(2, power_2_tot_io_bytes_per_sec))),3)) = 0 then power_2_tot_io_bytes_ps_mod_10 + 10 else power_2_tot_io_bytes_ps_mod_10 end) +-- end +-- end as tot_io_bytes_per_sec + , cpu + , other + , cpu_median + , other_median + , median_as + , stddev_as + , average_as + , average_as_graph + , median_as_graph + from + ash_distrib_bkts_prefmt +) +/* The final set including the Top N plan lines and Top N activities */ +select /* XPLAN_ASH ACTIVITY_TIMELINE SQL_ID: &si */ /*+ optimizer_features_enable('11.1.0.7') NO_STATEMENT_QUEUING */ + /* Very long hard parse times with 11.2.0.1 optimizer features and S-ASH views */ + /* Therefore falling back to 11.1.0.7 optimizer features */ + nullif(a.instance_id, -1) as instance_id + , case when a.instance_id = -1 then 1 else 0 end as break_instance_id + , a.duration_secs + , lpad(pga_mem_format, 6) as pga + , lpad(temp_space_format, 6) as temp + , cpu + , other + , average_as + , average_as_graph + , cpu_median + , other_median + , median_as + , stddev_as + , median_as_graph + , b.plan_lines + , e.dfo_active + , c.activities + , d.processes + , lpad(read_req, 6) as rd_req + , lpad(write_req, 6) as wr_req +-- , lpad(read_req_per_sec, 6) as rd_r_s +-- , lpad(write_req_per_sec, 6) as wr_r_s + , lpad(read_bytes, 6) as rd_byt + , lpad(write_bytes, 6) as wr_byt + , lpad(total_io_bytes, 6) as io_byt + , lpad(read_mem_bytes, 6) as rm_byt +-- , lpad(read_bytes_per_sec, 6) as rd_b_s +-- , lpad(write_bytes_per_sec, 6) as wr_b_s +-- , lpad(tot_io_bytes_per_sec, 6) as io_b_s +-- , lpad(read_mem_bytes_per_sec, 6) as rm_b_s + , lpad(avg_read_req_size, 6) as a_rr_s + , lpad(med_read_req_size, 6) as m_rr_s + , lpad(avg_write_req_size, 6) as a_wr_s + , lpad(med_write_req_size, 6) as m_wr_s +from + ash_distrib_bkts_fmt a + , ash_plan_lines_bkts_agg b + , ash_activity_bkts_agg c + , ash_process_bkts_agg d + , ash_dfo_bkts_agg e +where + a.instance_id = b.instance_id (+) +and a.bkt = b.bkt (+) +and a.instance_id = c.instance_id (+) +and a.bkt = c.bkt (+) +and a.instance_id = d.instance_id (+) +and a.bkt = d.bkt (+) +and a.instance_id = e.instance_id (+) +and a.bkt = e.bkt (+) +order by + duration_secs + , instance_id nulls first +; + +column pga clear +column temp clear +column rd_req clear +column wr_req clear +column rm_byt clear +column rd_byt clear +column wr_byt clear +column io_byt clear +--column rd_r_s clear +--column wr_r_s clear +--column rm_b_s clear +--column rd_b_s clear +--column wr_b_s clear +--column io_b_s clear +column a_rr_s clear +column m_rr_s clear +column a_wr_s clear +column m_wr_s clear +column plan_lines clear +column dfo_active clear +column activities clear +column processes clear +column average_as clear +column median_as clear +column stddev_as clear +column average_as_graph clear +column median_as_graph clear +column instance_id clear +column break_instance_id clear +column cpu_median clear +column other_median clear + +clear breaks + +undefine _SHOW_12C_IO_COLS +undefine _SHOW_IO_COLS +undefine aas_size +undefine _SHOW_DFO_COL +undefine _DOP_HEADER +undefine _BREAK_CI + +-- If you need to debug, comment the following line +set termout off + +column has_binds_xml new_value has_binds_xml &debug_internalp.print + +select +&use_monitor &_IF_ORA112_OR_HIGHER nvl2(binds_xml, 'Y', null) as has_binds_xml +&use_monitor &_IF_LOWER_THAN_ORA112 cast(null as varchar2(1)) as has_binds_xml +&use_no_monitor cast(null as varchar2(1)) as has_binds_xml +from +&use_monitor &sql_monitor +&use_no_monitor dual +&use_monitor where +&use_monitor px_qcsid is null +&use_monitor and sql_id = '&si' +&use_monitor and sql_exec_start = to_date('&ls', '&dm') +&use_monitor and sql_exec_id = &li +; + +column has_binds_xml clear + +set termout on + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + '&has_binds_xml' = 'Y' +--------- +union all +--------- +select + 'Actual bind values from Real-Time SQL Monitoring' as message +from + dual +where + '&has_binds_xml' = 'Y' +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + '&has_binds_xml' = 'Y' +; + +column message clear + +set heading on + +column name format a30 +column datatype format a30 +column value format a100 + +select + x.* +from +&use_monitor &sql_monitor +&use_no_monitor dual x +&use_monitor , xmltable +&use_monitor ( +&use_monitor '//bind' +&use_monitor &_IF_ORA112_OR_HIGHER passing xmltype(binds_xml) +&use_monitor &_IF_LOWER_THAN_ORA112 passing xmltype('') +&use_monitor columns +&use_monitor "POSITION" integer path '/bind/@pos', +&use_monitor "NAME" varchar2(128) path '/bind/@name', +&use_monitor "DATATYPE" varchar2(30) path '/bind/@dtystr', +&use_monitor "VALUE" varchar2(4000) path '/bind' +&use_monitor ) x +where +&use_no_monitor 1 = 2 +&use_monitor px_qcsid is null +&use_monitor and sql_id = '&si' +&use_monitor and sql_exec_start = to_date('&ls', '&dm') +&use_monitor and sql_exec_id = &li +&use_monitor and '&has_binds_xml' = 'Y' +&use_monitor order by position +; + +column name clear +column datatype clear +column value clear + +undefine has_binds_xml + +set heading off + +column message format a50 + +select + chr(10) || chr(10) as message +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0 or instr('&op', 'NONE') > 0 or instr('&op', 'MONITOR') > 0) +--------- +union all +--------- +select + 'Activity on execution plan line level' as message +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0 or instr('&op', 'NONE') > 0 or instr('&op', 'MONITOR') > 0) +and '&_IF_ORA11_OR_HIGHER' is null +--------- +union all +--------- +select + 'Execution plan details' as message +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0 or instr('&op', 'NONE') > 0 or instr('&op', 'MONITOR') > 0) +and '&_IF_LOWER_THAN_ORA11' is null +--------- +union all +--------- +select + '-----------------------------------------------' +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0 or instr('&op', 'NONE') > 0 or instr('&op', 'MONITOR') > 0) +; + +column message clear + +set heading on + +set pagesize 0 feedback on + +/* The following code snippet represents the core ASH based information for the plan line related ASH info */ +/* It will be re-used if no execution plan could be found */ +/* Therefore it will be saved to a file and re-loaded into the SQL buffer after execution of this statement */ + +/* Activity details on execution plan line level */ + +/* No read consistency on V$ views, therefore we materialize here the ASH content required */ +with /* XPLAN_ASH ACTIVITY_PLAN_LINE SQL_ID: &si */ +ash_base as +( + select /*+ materialize */ + &inst_id +&_IF_ORA11_OR_HIGHER , nvl(sql_plan_line_id, 0) as sql_plan_line_id +&_IF_LOWER_THAN_ORA11 , 0 as sql_plan_line_id +&_IF_ORA11_OR_HIGHER , sql_plan_operation || ' ' || sql_plan_options as plan_operation +&_IF_LOWER_THAN_ORA11 , '' as plan_operation + , case + when session_state = 'WAITING' then nvl(event, '') else session_state +&_IF_ORA12102_OR_HIGHER || case when in_inmemory_query = 'Y' then ' INMEMORY' end + end as event + , coalesce(program, 'NULL') as program + , case when to_number(nvl('&ic', '0')) > 1 then &inst_id || '-' end || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') as process +&_IF_ORA11202_OR_HIGHER , px_flags +&_IF_LOWER_THAN_ORA11202 , null as px_flags + , session_id + , session_serial# + , sql_plan_hash_value + , sample_time + , session_state +&_IF_ORA112_OR_HIGHER , cast(sample_time as date) - delta_time / 1000000 / 86400 as prev_sample_time +&_IF_LOWER_THAN_ORA112 , cast(sample_time as date) - &sample_freq / 86400 as prev_sample_time + -- Assign the sample to a particular bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_bucket + -- Likewise Assign the previous sample to a bucket according to the sample frequency +&_IF_ORA11_OR_HIGHER , trunc(round((cast(sample_time as date) +&_IF_ORA112_OR_HIGHER - delta_time / 1000000 / 86400 +&_IF_ORA11_OR_HIGHER &_IF_LOWER_THAN_ORA112 - &sample_freq / 86400 +&_IF_ORA11_OR_HIGHER - coalesce(sql_exec_start, to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS'))) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_LOWER_THAN_ORA11 , trunc(round((cast(sample_time as date) - &sample_freq / 86400 - to_date('&ls', '&dm')) * 86400) / &sample_freq) * &sample_freq as ash_prev_bucket +&_IF_ORA11_OR_HIGHER , sql_exec_start +&_IF_ORA11_OR_HIGHER , count(sql_exec_start) over (partition by sql_exec_start) as cnt_sql_exec_start +&_IF_LOWER_THAN_ORA11 , to_date('&ls', '&dm') as sql_exec_start +&_IF_LOWER_THAN_ORA11 , 1 as cnt_sql_exec_start + from + &global_ash ash + where + sql_id = '&si' +&_IF_ORA11_OR_HIGHER and ((sql_exec_start = to_date('&ls', '&dm') and sql_exec_id = &li) or (sql_exec_start is null and sql_exec_id is null)) + and &ash_pred1 &ash_pred2 + and cast(sample_time as date) between to_date('&ash_min_sample_time', 'YYYY-MM-DD HH24:MI:SS') and to_date('&ash_max_sample_time', 'YYYY-MM-DD HH24:MI:SS') + and '&_IF_ORA11_OR_HIGHER' is null + and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +), +/* Three different points in time: The actual start, the first and last ASH sample */ +dates as +( + select + min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) as sql_exec_start + , min(sample_time) as min_sample_time + , max(sample_time) as max_sample_time + , max(ash_bucket) as max_ash_bucket + from + ash_base +), +/* Calculate a virtual timeline that should correspond to the samples */ +/* Just in case we had no activity at all at a specific sample time */ +/* Together with the instances this will be our driving rowsource for the activity calculation */ +timeline as +( + select + (rownum - 1) * &sample_freq as bucket + , rownum * &sample_freq as duration_secs + , sql_exec_start + (rownum - 1) * &sample_freq as timeline + , sql_exec_start + from + dates + connect by + level <= (max_ash_bucket / &sample_freq) + 1 +-- /* Calculate backwards from first sample to actual start of execution */ +-- select +-- min_sample_time - rownum * &sample_freq / 86400 as timeline +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- connect by +-- min_sample_time - rownum * &sample_freq / 86400 >= sql_exec_start +-- --------- +-- union all +-- --------- +-- /* Calculate forward from first sample to last sample */ +-- select +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 +-- , sql_exec_start +-- from +-- dates +-- start with +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- connect by +-- min_sample_time + (rownum - 1) * &sample_freq / 86400 < max_sample_time + &sample_freq / 86400 +-- -- order by +-- -- timeline +), +driver as +( + select + ash_lines.sql_plan_line_id + , b.timeline + , b.bucket + from + timeline b, (select distinct sql_plan_line_id from ash_base) ash_lines +), +base_data as +( + select + case when count(a.sql_plan_line_id) > 0 then '&gc3' else ' ' end as act_ind + , count(a.sql_plan_line_id) as active_sessions + , driver.sql_plan_line_id + , driver.timeline + , driver.bucket as d_bucket + from + driver + , ash_base a + where + a.ash_bucket (+) = driver.bucket + and a.sql_plan_line_id (+) = driver.sql_plan_line_id + group by + driver.sql_plan_line_id + , driver.bucket + , driver.timeline +-- order by +-- driver.sql_plan_line_id +-- , driver.timeline +), +plan_line_activity +as +( + select /*+ no_merge */ + min(ash_bucket) as min_bucket + , max(ash_bucket) as max_bucket + , sql_plan_line_id + from + ash_base + group by + sql_plan_line_id +), +median_as as +( + select + b.sql_plan_line_id + , median(b.active_sessions) as median_as + from + base_data b + , plan_line_activity a + where + a.sql_plan_line_id = b.sql_plan_line_id + and b.d_bucket between a.min_bucket and a.max_bucket + group by + b.sql_plan_line_id +), +bucket_data as +( + select + ntile(&tgs) over (partition by sql_plan_line_id order by timeline) as bucket + , x.* + from + base_data x + -- In case we have less sample times as size of the Time Active Graph + -- this here will duplicate the data accordingly + , (select /*+ cardinality(&duplicator) */ null from dual connect by level <= to_number(trim('&duplicator'))) dups +), +grouped_buckets as +( + select + max(act_ind) as act_ind + , bucket + , sql_plan_line_id + from + bucket_data + group by + sql_plan_line_id + , bucket +-- order by +-- sql_plan_line_id +-- , bucket +), +time_active_graph as +( + select + sql_plan_line_id +&_IF_ORA112_OR_HIGHER , listagg(act_ind) within group (order by bucket) as time_active_graph + /* leading spaces are trimmed by the XML operation, hence we need to temporarily replace them with something else */ +&_IF_LOWER_THAN_ORA112 , replace(extract(xmlagg(xmlelement("V", replace(act_ind, ' ', '?')) order by bucket), '/V/text()').getstringval(), '?', ' ') as time_active_graph + from + grouped_buckets + group by + sql_plan_line_id +-- order by +-- sql_plan_line_id +), +/* Row distribution per process / plan_line taken from Real-Time SQL Monitoring - fed into parallel procs info following */ +row_distrib_info0 as +( + select +&use_monitor &_IF_ORA112_OR_HIGHER case when to_number(nvl('&ic', '0')) > 1 then p_m.inst_id || '-' end || coalesce(m.program, case when upper(p_m.process_name) = 'ORA' then 'QC' else upper(p_m.process_name) end) as process +&use_monitor &_IF_LOWER_THAN_ORA112 case when to_number(nvl('&ic', '0')) > 1 then p_m.inst_id || '-' end || case when upper(p_m.process_name) = 'ORA' then 'QC' else upper(p_m.process_name) end as process +&use_no_monitor '' as process +&use_monitor , case when to_number(nvl('&ic', '0')) > 1 then p_m.inst_id || '-' end || p_m.sid as sess_id +&use_no_monitor , '' as sess_id +&use_monitor , plan_line_id +&use_no_monitor , 0 as plan_line_id +&use_monitor , output_rows as a_rows +&use_no_monitor , 0 as a_rows + from +&use_monitor &sql_plan_monitor p_m +&use_monitor , &sql_monitor m +&use_no_monitor dual + where +&use_monitor 1 = 1 +&use_no_monitor 1 = 2 +&use_monitor and m.sql_id = '&si' +&use_monitor and m.sql_exec_start = to_date('&ls', '&dm') +&use_monitor and m.sql_exec_id = &li +&use_monitor and p_m.sql_id = '&si' +&use_monitor and p_m.sql_exec_start = to_date('&ls', '&dm') +&use_monitor and p_m.sql_exec_id = &li +&use_monitor and p_m.inst_id = m.inst_id +&use_monitor and p_m.sid = m.sid +), +/* If a query has multiple DFO Trees, above query will return duplicates - not really monitoring bug but due to the multiple child cursors generated per DFO Tree typically */ +row_distrib_info1 as +( + select + max(a_rows) as a_rows + , plan_line_id + , sess_id + , process + from + row_distrib_info0 + group by + plan_line_id + , sess_id + , process +), +row_distrib_prefmt as +( + select + process as m_process + , sess_id + , plan_line_id + , a_rows + , trunc(log(10, abs(case a_rows when 0 then 1 else a_rows end))) as power_10_a_rows + , trunc(mod(log(10, abs(case a_rows when 0 then 1 else a_rows end)), 3)) as power_10_a_rows_mod_3 + from + row_distrib_info1 +), +row_distrib_fmt as +( + select + m_process + , sess_id + , plan_line_id + , a_rows + , to_char(round(a_rows / power(10, power_10_a_rows - case when power_10_a_rows > 0 and power_10_a_rows_mod_3 = 0 then 3 else power_10_a_rows_mod_3 end)), 'FM99999') || + case power_10_a_rows - case when power_10_a_rows > 0 and power_10_a_rows_mod_3 = 0 then 3 else power_10_a_rows_mod_3 end + when 0 then '' + when 1 then '' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when a_rows is null + then null + else '*10^'||to_char(power_10_a_rows - case when power_10_a_rows > 0 and power_10_a_rows_mod_3 = 0 then 3 else power_10_a_rows_mod_3 end) + end + end as a_rows_format + from + row_distrib_prefmt +), +dfo_info as +( + select + to_number(cast(substr(p.object_node, 3, length(p.object_node) - 5) as varchar2(6))) as dfo + , to_number(substr(p.object_node, 3 + length(p.object_node) - 5)) as tq_id + , id + from + &plan_table p + where p.sql_id = '&si' + and p.&second_id = &cn + and &third_id + and p.object_node like ':Q%' + and '&plan_exists' is not null + and '&_IF_ORA11_OR_HIGHER' is null +), +ash_dfo1 as +( + select + ash.* + , case when p.id is not null then count(distinct process) over (partition by p.dfo, p.tq_id) end as cnt_process + , trunc(px_flags / 2097152) as actual_degree + , p.dfo + from + ash_base ash + , dfo_info p + where + p.id (+) = ash.sql_plan_line_id +), +/* Parallel Degree DOP info taken from Real-Time SQL Monitoring if available / requested */ +monitor_dop_info as +( + select +&use_monitor inst_id +&use_no_monitor 0 as inst_id +&use_monitor , sid +&use_no_monitor , 0 as sid +&use_monitor , session_serial# +&use_no_monitor , 0 as session_serial# +&use_monitor , count(*) over (partition by px_server_group, px_server_set) as monitor_dop +&use_no_monitor , 0 as monitor_dop + from +&use_monitor &sql_monitor m +&use_no_monitor dual + where +&use_monitor 1 = 1 +&use_no_monitor 1 = 2 +&use_monitor and m.sql_id = '&si' +&use_monitor and m.sql_exec_start = to_date('&ls', '&dm') +&use_monitor and m.sql_exec_id = &li +&use_monitor and m.px_qcsid is not null +), +ash_dfo as +( + select + ash.* + , max(cnt_process) over (partition by dfo) as assumed_degree + , m.monitor_dop + from + ash_dfo1 ash + , monitor_dop_info m + where + ash.&inst_id = m.inst_id (+) + and ash.session_id = m.sid (+) + and ash.session_serial# = m.session_serial# (+) +), +plan_line_skew1 as ( + select + count(*) over (partition by ash_bucket, dfo) as active_sessions + --, greatest(coalesce(actual_degree, 0), coalesce(monitor_dop, 0), coalesce(assumed_degree, 0)) as dop + --, coalesce(actual_degree, monitor_dop, assumed_degree, 1) as dop + , coalesce(actual_degree, greatest(coalesce(monitor_dop, 0), coalesce(assumed_degree, 0)), 1) as dop + , a.* + from + ash_dfo a +), +plan_line_skew2 as ( + select + max(active_sessions) as active_sessions + , max(dop - active_sessions) as diff_aas + , count(*) as plan_line_cnt + , max(dop) as dop + , sql_plan_line_id + , ash_bucket + from + plan_line_skew1 + group by + ash_bucket + , sql_plan_line_id + --order by ash_bucket, sql_plan_line_id +), +plan_line_skew as +( + select + sql_plan_line_id + --, round(greatest(sum(diff_aas / (active_sessions / plan_line_cnt)), 0)) as skew_plan_line + , greatest(sum(case when diff_aas > 0 then 1 when diff_aas < 0 then -1 else 0 end), 0) as skew_plan_line + , greatest(sum(diff_aas), 0) as skew_plan_line_weighted + --, min(dop) as dop + , max(dop) as dop + , count(distinct dop) as dist_dop + from + plan_line_skew2 + group by + sql_plan_line_id + --order by skew_plan_line desc +), +/* Distribution of Parallel Slaves (including QC) based on ASH */ +/* This statement is effectively turned into a NOOP in versions below 11g */ +parallel_procs1 as +( + select + distinct + sql_plan_line_id as plan_line + --, case when to_number(nvl('&ic', '0')) > 1 then &inst_id || '-' end || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c') as process + , process + , case when to_number(nvl('&ic', '0')) > 1 then &inst_id || '-' end || session_id as ash_sess_id + , count(*) over (partition by sql_plan_line_id, &inst_id || '-' || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c')) as cnt + , count(distinct &inst_id || '-' || regexp_replace(coalesce(program, 'NULL'), '^.*\((P[[:alnum:]][[:alnum:]][[:alnum:]])\)$', '\1', 1, 1, 'c')) over (partition by sql_plan_line_id) as proc_cnt + --, count(*) over (partition by sql_plan_line_id) as total_cnt_plan_line + --, count(*) over () as total_cnt + , count(distinct ash_bucket) over (partition by sql_plan_line_id) as samples_active + , count(distinct ash_bucket) over () as total_samples_active + , min(ash_bucket) over (partition by sql_plan_line_id) as min_sample_time + , max(ash_bucket) over (partition by sql_plan_line_id) as max_sample_time + from + ash_base + where '&_IF_ORA11_OR_HIGHER' is null + and instr('&op', 'DISTRIB') > 0 +), +parallel_procs1a as +( + select + plan_line + , process + , ash_sess_id + , cnt + , proc_cnt + , samples_active + , total_samples_active + , min_sample_time + , max_sample_time + , b.a_rows_format + , b.a_rows + from + parallel_procs1 a + , row_distrib_fmt b + where + a.plan_line = b.plan_line_id (+) + -- and a.process = b.m_process (+) + and a.ash_sess_id = b.sess_id (+) + union all + select + plan_line_id as plan_line + , m_process as process + , sess_id as ash_sess_id + , 0 as cnt + , 0 as proc_cnt + , 0 as samples_active + , 0 as total_samples_active + , cast(null as number) as min_sample_time + , cast(null as number) as max_sample_time + , a_rows_format + , a_rows + from + row_distrib_fmt a + where + not exists + ( + select + null + from + parallel_procs1 b + where + a.sess_id = b.ash_sess_id + and a.plan_line_id = b.plan_line + ) + and coalesce('&show_monitor_rowcount', 'NO') = 'YES' +), +parallel_procs2 as +( + select + plan_line + , process + , proc_cnt + , cnt + --, avg(cnt) over (partition by plan_line) as avg_cnt + --, cnt / nullif(case when instr('&op', 'DISTRIB_TOT') > 0 then total_cnt when instr('&op', 'DISTRIB_REL') > 0 then max(total_cnt_plan_line) over () when instr('&op', 'DISTRIB_TIM') > 0 then total_cnt_plan_line / (samples_active / total_samples_active) else total_cnt_plan_line end, 0) as ratio + --, cnt / nullif(total_cnt_plan_line / (samples_active / total_samples_active), 0) as ratio + , cnt / nullif(samples_active, 0) as average_as + , cnt / nullif((max_sample_time - min_sample_time + &sample_freq) / &sample_freq, 0) as average_as_t + --, cnt / nullif((((max_sample_time - min_sample_time) * 86400) + &sample_freq), 0) * &sample_freq as average_as_t + , row_number() over (partition by plan_line order by cnt desc, a_rows desc, process) as rn + --, avg(cnt / nullif(total_cnt_plan_line / (samples_active / total_samples_active), 0)) over (partition by plan_line) as avg_ratio + , a_rows_format + , row_number() over (partition by plan_line order by cnt desc) as rnk + , cnt - lag(cnt, 1, case when proc_cnt = 1 then 0 else cnt end) over (partition by plan_line order by cnt) as diff + , samples_active + , total_samples_active + from + parallel_procs1a +), +/* Use LISTAGG() from 11.2 on, in 11.1 use XMLAGG() instead for string aggregation */ +parallel_procs3 as +( + select + plan_line +&_IF_ORA112_OR_HIGHER , lpad(to_char(max(proc_cnt), 'TM'), 3) || ':' || listagg(case when rn > &topnp + 1 then null when rn = &topnp + 1 then '...' else process || '(' || cnt || ')' || case when a_rows_format is not null then '[' || a_rows_format || ']' end end, ',') within group (order by rn) as procs +&_IF_LOWER_THAN_ORA112 , lpad(to_char(max(proc_cnt), 'TM'), 3) || ':' || ltrim(extract(xmlagg(xmlelement("V", case when rn > &topnp + 1 then null when rn = &topnp + 1 then ',' || '...' else ',' || process || '(' || cnt || ')' || case when a_rows_format is not null then '[' || a_rows_format || ']' end end) order by rn), '/V/text()'), ',') as procs +--&_IF_ORA112_OR_HIGHER , listagg(rpad(case when mod(rn - 1, 16) > 9 then chr(65 + mod(rn - 1, 16) - 10) else chr(48 + mod(rn - 1, 16)) end, /*case when round(ratio * &pgs) < 1 then 1 else*/ round(ratio * &pgs) /*end*/, case when mod(rn - 1, 16) > 9 then chr(65 + mod(rn - 1, 16) - 10) else chr(48 + mod(rn - 1, 16)) end)) within group (order by rn) as procs_graph +--&_IF_LOWER_THAN_ORA112 , ltrim(extract(xmlagg(xmlelement("V", rpad(case when mod(rn - 1, 16) > 9 then chr(65 + mod(rn - 1, 16) - 10) else chr(48 + mod(rn - 1, 16)) end, /*case when round(ratio * &pgs) < 1 then 1 else*/ round(ratio * &pgs) /*end*/, case when mod(rn - 1, 16) > 9 then chr(65 + mod(rn - 1, 16) - 10) else chr(48 + mod(rn - 1, 16)) end)) order by rn), '/V/text()'), ',') as procs_graph +--&_IF_ORA112_OR_HIGHER , listagg(rpad('&gc3', case when proc_cnt = 1 or cnt > avg_cnt + avg_cnt / 10 then round((ratio - case when proc_cnt = 1 then 0 else /*avg_ratio*/ 0 end) * &pgs) end, '&gc3')) within group (order by rn) as procs_graph +--&_IF_LOWER_THAN_ORA112 , ltrim(extract(xmlagg(xmlelement("V", rpad('&gc3', case when proc_cnt = 1 or ratio > avg_ratio + avg_ratio / 10 then round((ratio - case when proc_cnt = 1 then 0 else /*avg_ratio*/ 0 end) * &pgs) end, '&gc3')) order by rn), '/V/text()'), ',') as procs_graph + --, rpad('&gc3', sum(case when proc_cnt = 1 or ratio > avg_ratio + avg_ratio / 10 /*or ratio < avg_ratio + avg_ratio / 10*/ then (ratio - case when proc_cnt = 1 then 0 else /*avg_ratio*/ 0 end) * &pgs end), '&gc3') as procs_graph + --, rpad('&gc3', least(sum(diff / rnk / nullif(samples_active, 0) * (samples_active / nullif(total_samples_active, 0))), 1) * &pgs, '&gc3') as procs_graph + --, rpad('&gc3', least(max(skew_plan_line / nullif(total_samples_active, 0)), 1) * &pgs, '&gc3') as procs_graph + --, rpad('&gc3', greatest(coalesce(least(max(skew_plan_line / nullif(total_samples_active, 0)), 1), -1), least(sum(diff / rnk / nullif(samples_active, 0) * (samples_active / nullif(total_samples_active, 0))), 1)) * &pgs, '&gc3') as procs_graph + --, rpad('&gc3', round(case when coalesce(max(dop), 1) > 1 then least(max(least(skew_plan_line, samples_active) / nullif(total_samples_active, 0)), 1) else least(sum(diff / rnk / nullif(samples_active, 0) * (samples_active / nullif(total_samples_active, 0))), 1) end * &pgs), '&gc3') as procs_graph + --, rpad('&gc3', round(greatest(least(max(least(skew_plan_line, samples_active) / nullif(total_samples_active, 0)), 1), least(sum(diff / rnk / nullif(samples_active, 0) * (samples_active / nullif(total_samples_active, 0))), 1)) * &pgs), '&gc3') as procs_graph + , rpad('&gc3', round(case when coalesce(max(dist_dop), 1) > 1 or coalesce(max(dop), 1) <= 1 then greatest(least(max(least(skew_plan_line, samples_active) / nullif(total_samples_active, 0)), 1), least(sum(diff / rnk / nullif(samples_active, 0) * (samples_active / nullif(total_samples_active, 0))), 1)) else least(max(least(skew_plan_line_weighted, samples_active * dop) / nullif(total_samples_active * dop, 0)), 1) end * &pgs), '&gc3') as procs_graph + , case when sum(average_as) >= &rnd_thr then round(sum(average_as)) else round(sum(average_as), 1) end as average_as + , case when sum(average_as_t) >= &rnd_thr then round(sum(average_as_t)) else round(sum(average_as_t), 1) end as average_as_t + from + parallel_procs2 a + , plan_line_skew b + where + a.plan_line = b.sql_plan_line_id (+) + --where + -- rn <= &pgs + 1 + group by + plan_line +), +parallel_procs4 as +( + select + plan_line + , procs + , average_as_t + , average_as + , case when length(procs_graph) > &pgs then substr(procs_graph, 1, &pgs) || '...' else procs_graph end as procs_graph + from + parallel_procs3 +), +max_aas as +( + select + round(max(average_as) over ()) as max_aas + , round(max(average_as_t) over ()) as max_aas_t + , p.* + from + parallel_procs4 p +), +max_mas as +( + select + round(max(median_as) over ()) as max_mas + , m.* + from + median_as m +), +parallel_procs as +( + select + plan_line + , procs + , procs_graph + , rpad(coalesce(rpad('&gc3', round(average_as * &aas / nullif(max_aas, 0)), '&gc3'), ' '), &aas) || ' (' || lpad(to_char(average_as, 'TM'), 3) || ')' as average_as_graph + , rpad(coalesce(rpad('&gc3', round(average_as_t * &aas / nullif(max_aas_t, 0)), '&gc3'), ' '), &aas) || ' (' || lpad(to_char(average_as_t, 'TM'), 3) || ')' as average_as_t_graph + , rpad(coalesce(rpad('&gc3', round(median_as * &aas / nullif(max_mas, 0)), '&gc3'), ' '), &aas) || ' (' || lpad(to_char(median_as, 'TM'), 3) || ')' as median_as_graph +-- , rpad(coalesce(rpad('&gc3', round(average_as * case when max_aas > &aas then &aas / max_aas else 1 end), '&gc3'), ' '), least(&aas, max_aas)) || ' (' || lpad(to_char(average_as, 'TM'), 3) || ')' as average_as_graph +-- , rpad(coalesce(rpad('&gc3', round(average_as_t * case when max_aas_t > &aas then &aas / max_aas_t else 1 end), '&gc3'), ' '), least(&aas, max_aas_t)) || ' (' || lpad(to_char(average_as_t, 'TM'), 3) || ')' as average_as_t_graph +-- , rpad(coalesce(rpad('&gc3', round(median_as * case when max_mas > &aas then &aas / max_mas else 1 end), '&gc3'), ' '), least(&aas, max_mas)) || ' (' || lpad(to_char(median_as, 'TM'), 3) || ')' as median_as_graph + from + max_aas + , max_mas + where + max_aas.plan_line = max_mas.sql_plan_line_id (+) +), +/* Activity from ASH */ +ash as +( + select + plan_line +&_IF_ORA112_OR_HIGHER , listagg(case when rn > &topnw + 1 then null when rn = &topnw + 1 then '...' else event || '(' || cnt || ')' end, ',') within group (order by rn) as activity +&_IF_LOWER_THAN_ORA112 , ltrim(extract(xmlagg(xmlelement("V", case when rn > &topnw + 1 then null when rn = &topnw + 1 then ',' || '...' else ',' || event || '(' || cnt || ')' end) order by rn), '/V/text()'), ',') as activity + --, rpad(' ', nvl(round(sum_cnt / nullif(max(sum_cnt) over (), 0) * &wgs), 0) + 1, '&gc3') as activity_graph + , rpad(coalesce(rpad('&gc', nvl(round(sum_cnt_cpu / nullif(max(sum_cnt) over (), 0) * &wgs), 0), '&gc') || rpad('&gc2', nvl(round(sum_cnt_other / nullif(max(sum_cnt) over (), 0) * &wgs), 0), '&gc2'), ' '), &wgs) || ' (' || lpad(case when sum_cnt / nullif(total_cnt, 0) * 100 < 10 then round(sum_cnt / nullif(total_cnt, 0) * 100, 1) else round(sum_cnt / nullif(total_cnt, 0) * 100) end, 3) || '%)' as activity_graph + from ( + select + plan_line + , event + , cnt + , total_cnt + , row_number() over (partition by plan_line order by cnt desc, event) as rn + , sum(cnt) over (partition by plan_line) as sum_cnt + , sum(cnt_cpu) over (partition by plan_line) as sum_cnt_cpu + , sum(cnt_other) over (partition by plan_line) as sum_cnt_other + from ( + select + distinct + sql_plan_line_id as plan_line + , event + , count(*) over (partition by sql_plan_line_id, event) as cnt + , count(case when session_state = 'ON CPU' then 1 end) over (partition by sql_plan_line_id, event) as cnt_cpu + , count(case when session_state != 'ON CPU' then 1 end) over (partition by sql_plan_line_id, event) as cnt_other + , count(*) over () as total_cnt + from + ash_base + where '&_IF_ORA11_OR_HIGHER' is null + and instr('&op', 'ASH') > 0 + ) + ) + where + rn <= &topnw + 1 + group by + plan_line + , total_cnt + , sum_cnt_cpu + , sum_cnt_other + , sum_cnt +), +/* The last active plan lines from ASH, if SQL is currently executing */ +active_plan_lines as +( + select + distinct + sql_plan_line_id as plan_line + from + ash_base + where sample_time >= to_date('&ash_current_time', 'YYYY-MM-DD HH24:MI:SS') - &las / 86400 + and '&_IF_ORA11_OR_HIGHER' is null + and instr('&op', 'ASH') > 0 +), +/* Activity time line per SQL plan line */ +plan_line_timelines as +( + /* This query causes a wrong ORA-00979 error on 11.2.0.1, or even a core dump on parse therefore falling back to 11.1.0.7 optimizer features */ + select /*+ optimizer_features_enable('11.1.0.7') */ + -- '+' || to_char(start_active, 'TM') as start_active + to_char(start_active, 'TM') as start_active + , to_char(duration_secs, 'TM') as duration_secs + , to_char(duration_secs_t, 'TM') as duration_secs_t + , plan_line + --, substr(rpad(' ', round(start_active / to_number('&ds') * &tgs)) || rpad('&gc3', round(duration_secs / to_number('&ds') * &tgs), '&gc3'), 1, &tgs) as time_active_graph + , t.time_active_graph + from + ( + select + min(ash_bucket) + &sample_freq as start_active + , max(ash_bucket) - min(ash_bucket) + &sample_freq as duration_secs_t + , count(distinct ash_bucket) * &sample_freq as duration_secs + , sql_plan_line_id as plan_line + from + ( + select + --cast(sample_time as date) as sample_time + ash_bucket + --, sql_exec_start + --, cnt_sql_exec_start + , sql_plan_line_id + --, min(sql_exec_start) keep (dense_rank last order by cnt_sql_exec_start nulls first) over () as min_sql_exec_start + from + ash_base + where '&_IF_ORA11_OR_HIGHER' is null + and instr('&op', 'TIMELINE') > 0 + ) + group by + sql_plan_line_id + --, min_sql_exec_start + ) a + , time_active_graph t + where + a.plan_line = t.sql_plan_line_id +), +monitor_info1 as +( + select +&use_monitor plan_line_id +&use_no_monitor 0 as plan_line_id +&use_monitor , sum(starts) as execs +&use_no_monitor , 0 as execs +&use_monitor , sum(output_rows) as a_rows +&use_no_monitor , 0 as a_rows +&use_monitor , sum(workarea_max_mem) as pga +&use_no_monitor , 0 as pga +&use_monitor , sum(workarea_max_tempseg) as temp +&use_no_monitor , 0 as temp +&use_monitor &_IF_ORA112_OR_HIGHER , nullif(sum(physical_read_bytes), 0) as io_read +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(null as number) as io_read +&use_no_monitor , 0 as io_read +&use_monitor &_IF_ORA112_OR_HIGHER , nullif(sum(physical_write_bytes), 0) as io_write +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(null as number) as io_write +&use_no_monitor , 0 as io_write +&use_monitor &_IF_ORA112_OR_HIGHER , nullif(100 - round(sum(io_interconnect_bytes) / nullif(sum(physical_read_bytes) + sum(physical_write_bytes), 0) * 100), 0) as co_percent +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(null as number) as co_percent +&use_no_monitor , 0 as co_percent +&use_monitor &_IF_ORA112_OR_HIGHER , nullif(sum(physical_read_requests), 0) as io_read_req +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(null as number) as io_read_req +&use_no_monitor , 0 as io_read_req +&use_monitor &_IF_ORA112_OR_HIGHER , nullif(sum(physical_write_requests), 0) as io_write_req +&use_monitor &_IF_LOWER_THAN_ORA112 , cast(null as number) as io_write_req +&use_no_monitor , 0 as io_write_req + from +&use_monitor &sql_plan_monitor +&use_no_monitor dual + where +&use_no_monitor 1 = 2 +&use_monitor sql_id = '&si' +&use_monitor and sql_exec_start = to_date('&ls', '&dm') +&use_monitor and sql_exec_id = &li +&use_monitor group by +&use_monitor plan_line_id +), +monitor_info_prefmt as +( + select + plan_line_id + , pga + , trunc(log(2, abs(case pga when 0 then 1 else pga end))) as power_2_pga + , trunc(mod(log(2, abs(case pga when 0 then 1 else pga end)), 10)) as power_2_pga_mod_10 + , temp + , trunc(log(2, abs(case temp when 0 then 1 else temp end))) as power_2_temp + , trunc(mod(log(2, abs(case temp when 0 then 1 else temp end)), 10)) as power_2_temp_mod_10 + , io_read + , trunc(log(2, abs(case io_read when 0 then 1 else io_read end))) as power_2_io_read + , trunc(mod(log(2, abs(case io_read when 0 then 1 else io_read end)), 10)) as power_2_io_read_mod_10 + , io_write + , trunc(log(2, abs(case io_write when 0 then 1 else io_write end))) as power_2_io_write + , trunc(mod(log(2, abs(case io_write when 0 then 1 else io_write end)), 10)) as power_2_io_write_mod_10 + , execs + , trunc(log(10, abs(case execs when 0 then 1 else execs end))) as power_10_execs + , trunc(mod(log(10, abs(case execs when 0 then 1 else execs end)), 3)) as power_10_execs_mod_3 + , a_rows + , trunc(log(10, abs(case a_rows when 0 then 1 else a_rows end))) as power_10_a_rows + , trunc(mod(log(10, abs(case a_rows when 0 then 1 else a_rows end)), 3)) as power_10_a_rows_mod_3 + , io_read_req + , trunc(log(10, abs(case io_read_req when 0 then 1 else io_read_req end))) as power_10_io_read_req + , trunc(mod(log(10, abs(case io_read_req when 0 then 1 else io_read_req end)), 3)) as power_10_io_read_req_mod_3 + , io_write_req + , trunc(log(10, abs(case io_write_req when 0 then 1 else io_write_req end))) as power_10_io_write_req + , trunc(mod(log(10, abs(case io_write_req when 0 then 1 else io_write_req end)), 3)) as power_10_io_write_req_mod_3 + , case when co_percent is not null then co_percent || '%' end as co_percent + from + monitor_info1 +), +monitor_info_fmt as +( + select + plan_line_id + , to_char(round(pga / power(2, power_2_pga - case when power_2_pga >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga))),3)) = 0 then power_2_pga_mod_10 + 10 else power_2_pga_mod_10 end)), 'FM99999') || + case power_2_pga - case when power_2_pga >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga))),3)) = 0 then power_2_pga_mod_10 + 10 else power_2_pga_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when pga is null + then null + else '*2^'||to_char(power_2_pga - case when power_2_pga >= 10 and trunc(mod(log(10,abs(power(2, power_2_pga))),3)) = 0 then power_2_pga_mod_10 + 10 else power_2_pga_mod_10 end) + end + end as pga_format + , to_char(round(temp / power(2, power_2_temp - case when power_2_temp >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp))),3)) = 0 then power_2_temp_mod_10 + 10 else power_2_temp_mod_10 end)), 'FM99999') || + case power_2_temp - case when power_2_temp >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp))),3)) = 0 then power_2_temp_mod_10 + 10 else power_2_temp_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when temp is null + then null + else '*2^'||to_char(power_2_temp - case when power_2_temp >= 10 and trunc(mod(log(10,abs(power(2, power_2_temp))),3)) = 0 then power_2_temp_mod_10 + 10 else power_2_temp_mod_10 end) + end + end as temp_format + , to_char(round(io_read / power(2, power_2_io_read - case when power_2_io_read >= 10 and trunc(mod(log(10,abs(power(2, power_2_io_read))),3)) = 0 then power_2_io_read_mod_10 + 10 else power_2_io_read_mod_10 end)), 'FM99999') || + case power_2_io_read - case when power_2_io_read >= 10 and trunc(mod(log(10,abs(power(2, power_2_io_read))),3)) = 0 then power_2_io_read_mod_10 + 10 else power_2_io_read_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when io_read is null + then null + else '*2^'||to_char(power_2_io_read - case when power_2_io_read >= 10 and trunc(mod(log(10,abs(power(2, power_2_io_read))),3)) = 0 then power_2_io_read_mod_10 + 10 else power_2_io_read_mod_10 end) + end + end as io_read_format + , to_char(round(io_write / power(2, power_2_io_write - case when power_2_io_write >= 10 and trunc(mod(log(10,abs(power(2, power_2_io_write))),3)) = 0 then power_2_io_write_mod_10 + 10 else power_2_io_write_mod_10 end)), 'FM99999') || + case power_2_io_write - case when power_2_io_write >= 10 and trunc(mod(log(10,abs(power(2, power_2_io_write))),3)) = 0 then power_2_io_write_mod_10 + 10 else power_2_io_write_mod_10 end + when 0 then ' ' + when 1 then ' ' + when 10*1 then 'K' + when 10*2 then 'M' + when 10*3 then 'G' + when 10*4 then 'T' + when 10*5 then 'P' + when 10*6 then 'E' + else case + when io_write is null + then null + else '*2^'||to_char(power_2_io_write - case when power_2_io_write >= 10 and trunc(mod(log(10,abs(power(2, power_2_io_write))),3)) = 0 then power_2_io_write_mod_10 + 10 else power_2_io_write_mod_10 end) + end + end as io_write_format + , to_char(round(execs / power(10, power_10_execs - case when power_10_execs > 0 and power_10_execs_mod_3 = 0 then 3 else power_10_execs_mod_3 end)), 'FM99999') || + case power_10_execs - case when power_10_execs > 0 and power_10_execs_mod_3 = 0 then 3 else power_10_execs_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when execs is null + then null + else '*10^'||to_char(power_10_execs - case when power_10_execs > 0 and power_10_execs_mod_3 = 0 then 3 else power_10_execs_mod_3 end) + end + end as execs_format + , to_char(round(a_rows / power(10, power_10_a_rows - case when power_10_a_rows > 0 and power_10_a_rows_mod_3 = 0 then 3 else power_10_a_rows_mod_3 end)), 'FM99999') || + case power_10_a_rows - case when power_10_a_rows > 0 and power_10_a_rows_mod_3 = 0 then 3 else power_10_a_rows_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when a_rows is null + then null + else '*10^'||to_char(power_10_a_rows - case when power_10_a_rows > 0 and power_10_a_rows_mod_3 = 0 then 3 else power_10_a_rows_mod_3 end) + end + end as a_rows_format + , to_char(round(io_read_req / power(10, power_10_io_read_req - case when power_10_io_read_req > 0 and power_10_io_read_req_mod_3 = 0 then 3 else power_10_io_read_req_mod_3 end)), 'FM99999') || + case power_10_io_read_req - case when power_10_io_read_req > 0 and power_10_io_read_req_mod_3 = 0 then 3 else power_10_io_read_req_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when io_read_req is null + then null + else '*10^'||to_char(power_10_io_read_req - case when power_10_io_read_req > 0 and power_10_io_read_req_mod_3 = 0 then 3 else power_10_io_read_req_mod_3 end) + end + end as io_read_req_format + , to_char(round(io_write_req / power(10, power_10_io_write_req - case when power_10_io_write_req > 0 and power_10_io_write_req_mod_3 = 0 then 3 else power_10_io_write_req_mod_3 end)), 'FM99999') || + case power_10_io_write_req - case when power_10_io_write_req > 0 and power_10_io_write_req_mod_3 = 0 then 3 else power_10_io_write_req_mod_3 end + when 0 then ' ' + when 1 then ' ' + when 3*1 then 'K' + when 3*2 then 'M' + when 3*3 then 'G' + when 3*4 then 'T' + when 3*5 then 'P' + when 3*6 then 'E' + else case + when io_write_req is null + then null + else '*10^'||to_char(power_10_io_write_req - case when power_10_io_write_req > 0 and power_10_io_write_req_mod_3 = 0 then 3 else power_10_io_write_req_mod_3 end) + end + end as io_write_req_format + , co_percent + from + monitor_info_prefmt +), +. + +-- If you need to debug, comment the following line +-- set termout off + +save .xplan_ash_temp replace + +-- set termout on + +i +-- The next three queries are based on the original XPLAN wrapper by Adrian Billington +-- to determine the PID and ORD information, only slightly modified to deal with +-- the 10g special case that V$SQL_PLAN_STATISTICS_ALL doesn't include the ID = 0 operation +-- and starts with 1 instead for Rowsource Statistics +sql_plan_data as +( + select + id + , parent_id + from + &plan_table_name p + where + sql_id = '&si' + and &second_id = &cn + and &third_id +), +hierarchy_data as +( + select + id + , parent_id + from + sql_plan_data + start with + id in + ( + select + id + from + sql_plan_data p1 + where + not exists + ( + select + null + from + sql_plan_data p2 + where + p2.id = p1.parent_id + ) + ) + connect by + prior id = parent_id + order siblings by + id desc +), +ordered_hierarchy_data as +( + select + id + , parent_id as pid + , row_number() over (order by rownum desc) as oid + , max(id) over () as maxid + , min(id) over () as minid + from + hierarchy_data +), +-- The following query uses the MAX values +-- rather than taking the values of PLAN OPERATION_ID = 0 (or 1 for 10g V$SQL_PLAN_STATISTICS_ALL) +-- for determining the grand totals +-- +-- This is because queries that get cancelled do not +-- necessarily have yet sensible values in the root plan operation +-- +-- Furthermore with Parallel Execution the elapsed time accumulated +-- with the ALLSTATS option for operations performed in parallel +-- will be greater than the wallclock elapsed time shown for the Query Coordinator +-- +-- Note that if you use GATHER_PLAN_STATISTICS with the default +-- row sampling frequency the (LAST_)ELAPSED_TIME will be very likely +-- wrong and hence the time-based graphs and self-statistics will be misleading +-- +-- Similar things might happen when cancelling queries +-- +-- For queries running with STATISTICS_LEVEL = ALL (or sample frequency set to 1) +-- the A-TIME is pretty reliable +totals as +( + select + max(&last.cu_buffer_gets + &last.cr_buffer_gets) as total_lio + , max(&last.elapsed_time) as total_elapsed + , max(&last.disk_reads) as total_reads + , max(&last.disk_writes) as total_writes + from + gv$sql_plan_statistics_all + where + sql_id = '&si' + and child_number = &cn + and inst_id = &plan_inst_id + and (instr('&fo', 'STATS') > 0 or instr('&fo', 'AROWS') > 0) + group by + 1 +), +-- The totals for the direct descendants of an operation +-- These are required for calculating the work performed +-- by a (parent) operation itself +-- Basically this is the SUM grouped by PARENT_ID +direct_desc_totals as +( + select + sum(&last.cu_buffer_gets + &last.cr_buffer_gets) as lio + , sum(&last.elapsed_time) as elapsed + , sum(&last.disk_reads) as reads + , sum(&last.disk_writes) as writes + , parent_id + from + gv$sql_plan_statistics_all + where + sql_id = '&si' + and child_number = &cn + and inst_id = &plan_inst_id + and (instr('&fo', 'STATS') > 0 or instr('&fo', 'AROWS') > 0) + group by + parent_id +), +-- Putting the three together +-- The statistics, direct descendant totals plus totals +extended_stats as +( + select + stats.id + , stats.parent_id + , stats.&last.elapsed_time as elapsed + , (stats.&last.cu_buffer_gets + stats.&last.cr_buffer_gets) as lio + , stats.&last.starts as starts + , stats.&last.output_rows as a_rows + , stats.cardinality as e_rows + , stats.&last.disk_reads as reads + , stats.&last.disk_writes as writes + , ddt.elapsed as ddt_elapsed + , ddt.lio as ddt_lio + , ddt.reads as ddt_reads + , ddt.writes as ddt_writes + , t.total_elapsed + , t.total_lio + , t.total_reads + , t.total_writes + from + gv$sql_plan_statistics_all stats + , direct_desc_totals ddt + , totals t + where + stats.sql_id='&si' + and stats.child_number = &cn + and stats.inst_id = &plan_inst_id + and ddt.parent_id (+) = stats.id + and (instr('&fo', 'STATS') > 0 or instr('&fo', 'AROWS') > 0) +), +-- Further information derived from above +derived_stats1 as +( + select + id + , greatest(elapsed - nvl(ddt_elapsed , 0), 0) as elapsed_self + , greatest(lio - nvl(ddt_lio, 0), 0) as lio_self + , trunc((greatest(lio - nvl(ddt_lio, 0), 0)) / nullif(a_rows, 0)) as lio_ratio + , greatest(reads - nvl(ddt_reads, 0), 0) as reads_self + , greatest(writes - nvl(ddt_writes,0) ,0) as writes_self + , total_elapsed + , total_lio + , total_reads + , total_writes + , a_rows + , trunc(log(10, nullif(starts * e_rows / nullif(a_rows, 0), 0))) as tcf_ratio + , starts * e_rows as e_rows_times_start + from + extended_stats +), +-- Add the analytic MAX() function +derived_stats as +( + select + id + , elapsed_self + , lio_self + , lio_ratio + , reads_self + , writes_self + , total_elapsed + , total_lio + , total_reads + , total_writes + , a_rows + , max(elapsed_self) over () as max_elapsed_self + , max(lio_self) over () as max_lio_self + , max(reads_self) over () as max_reads_self + , max(writes_self) over () as max_writes_self + , tcf_ratio + , e_rows_times_start + from + derived_stats1 +), +/* Format the data as required */ +formatted_data1 as +( + select + id + , lio_ratio + , total_elapsed + , total_lio + , total_reads + , total_writes + , a_rows + , to_char(numtodsinterval(round(elapsed_self / 10000) * 10000 / 1000000, 'SECOND')) as e_time_interval + /* Imitate the DBMS_XPLAN number formatting */ + , case + when lio_self >= 18000000000000000000 then to_char(18000000000000000000/1000000000000000000, 'FM99999') || 'E' + when lio_self >= 10000000000000000000 then to_char(lio_self/1000000000000000000, 'FM99999') || 'E' + when lio_self >= 10000000000000000 then to_char(lio_self/1000000000000000, 'FM99999') || 'P' + when lio_self >= 10000000000000 then to_char(lio_self/1000000000000, 'FM99999') || 'T' + when lio_self >= 10000000000 then to_char(lio_self/1000000000, 'FM99999') || 'G' + when lio_self >= 10000000 then to_char(lio_self/1000000, 'FM99999') || 'M' + when lio_self >= 100000 then to_char(lio_self/1000, 'FM99999') || 'K' + else to_char(lio_self, 'FM99999') || ' ' + end as lio_self_format + , case + when reads_self >= 18000000000000000000 then to_char(18000000000000000000/1000000000000000000, 'FM99999') || 'E' + when reads_self >= 10000000000000000000 then to_char(reads_self/1000000000000000000, 'FM99999') || 'E' + when reads_self >= 10000000000000000 then to_char(reads_self/1000000000000000, 'FM99999') || 'P' + when reads_self >= 10000000000000 then to_char(reads_self/1000000000000, 'FM99999') || 'T' + when reads_self >= 10000000000 then to_char(reads_self/1000000000, 'FM99999') || 'G' + when reads_self >= 10000000 then to_char(reads_self/1000000, 'FM99999') || 'M' + when reads_self >= 100000 then to_char(reads_self/1000, 'FM99999') || 'K' + else to_char(reads_self, 'FM99999') || ' ' + end as reads_self_format + , case + when writes_self >= 18000000000000000000 then to_char(18000000000000000000/1000000000000000000, 'FM99999') || 'E' + when writes_self >= 10000000000000000000 then to_char(writes_self/1000000000000000000, 'FM99999') || 'E' + when writes_self >= 10000000000000000 then to_char(writes_self/1000000000000000, 'FM99999') || 'P' + when writes_self >= 10000000000000 then to_char(writes_self/1000000000000, 'FM99999') || 'T' + when writes_self >= 10000000000 then to_char(writes_self/1000000000, 'FM99999') || 'G' + when writes_self >= 10000000 then to_char(writes_self/1000000, 'FM99999') || 'M' + when writes_self >= 100000 then to_char(writes_self/1000, 'FM99999') || 'K' + else to_char(writes_self, 'FM99999') || ' ' + end as writes_self_format + , case + when e_rows_times_start >= 18000000000000000000 then to_char(18000000000000000000/1000000000000000000, 'FM99999') || 'E' + when e_rows_times_start >= 10000000000000000000 then to_char(e_rows_times_start/1000000000000000000, 'FM99999') || 'E' + when e_rows_times_start >= 10000000000000000 then to_char(e_rows_times_start/1000000000000000, 'FM99999') || 'P' + when e_rows_times_start >= 10000000000000 then to_char(e_rows_times_start/1000000000000, 'FM99999') || 'T' + when e_rows_times_start >= 10000000000 then to_char(e_rows_times_start/1000000000, 'FM99999') || 'G' + when e_rows_times_start >= 10000000 then to_char(e_rows_times_start/1000000, 'FM99999') || 'M' + when e_rows_times_start >= 100000 then to_char(e_rows_times_start/1000, 'FM99999') || 'K' + else to_char(e_rows_times_start, 'FM99999') || ' ' + end as e_rows_times_start_format + , case + when a_rows >= 18000000000000000000 then to_char(18000000000000000000/1000000000000000000, 'FM99999') || 'E' + when a_rows >= 10000000000000000000 then to_char(a_rows/1000000000000000000, 'FM99999') || 'E' + when a_rows >= 10000000000000000 then to_char(a_rows/1000000000000000, 'FM99999') || 'P' + when a_rows >= 10000000000000 then to_char(a_rows/1000000000000, 'FM99999') || 'T' + when a_rows >= 10000000000 then to_char(a_rows/1000000000, 'FM99999') || 'G' + when a_rows >= 10000000 then to_char(a_rows/1000000, 'FM99999') || 'M' + when a_rows >= 100000 then to_char(a_rows/1000, 'FM99999') || 'K' + else to_char(a_rows, 'FM99999') || ' ' + end as a_rows_format + , rpad(coalesce(rpad(' ', nvl(round(elapsed_self / nullif(case when '&ext_rowsource_graphs_maxrel' = 'YES' then max_elapsed_self else total_elapsed end, 0) * 12), 0) + 1, '&gc3'), ' '), 12) || case when elapsed_self > 0 then ' (' || lpad(round(elapsed_self / nullif(total_elapsed, 0) * 100), 3) || '%)' end as elapsed_self_graph + , rpad(coalesce(rpad(' ', nvl(round(lio_self / nullif(case when '&ext_rowsource_graphs_maxrel' = 'YES' then max_lio_self else total_lio end, 0) * 12), 0) + 1, '&gc3'), ' '), 12) || case when lio_self > 0 then ' (' || lpad(round(lio_self / nullif(total_lio, 0) * 100), 3) || '%)' end as lio_self_graph + , rpad(coalesce(rpad(' ', nvl(round(reads_self / nullif(case when '&ext_rowsource_graphs_maxrel' = 'YES' then max_reads_self else total_reads end, 0) * 12), 0) + 1, '&gc3'), ' '), 12) || case when reads_self > 0 then ' (' || lpad(round(reads_self / nullif(total_reads, 0) * 100), 3) || '%)' end as reads_self_graph + , rpad(coalesce(rpad(' ', nvl(round(writes_self / nullif(case when '&ext_rowsource_graphs_maxrel' = 'YES' then max_writes_self else total_writes end, 0) * 12), 0) + 1, '&gc3'), ' '), 12) || case when writes_self > 0 then ' (' || lpad(round(writes_self / nullif(total_writes, 0) * 100), 3) || '%)' end as writes_self_graph + , ' ' || + case + when tcf_ratio > 0 + then rpad('-', tcf_ratio, '-') + else rpad('+', tcf_ratio * -1, '+') + end as tcf_graph + from + derived_stats +), +/* The final formatted data */ +formatted_data as +( + select + /*+ Convert the INTERVAL representation to the A-TIME representation used by DBMS_XPLAN + by turning the days into hours */ + to_char(to_number(substr(e_time_interval, 2, 9)) * 24 + to_number(substr(e_time_interval, 12, 2)), 'FM900') || + substr(e_time_interval, 14, 9) + as a_time_self + , a.* + from + formatted_data1 a +), +/* Combine the information with the original DBMS_XPLAN output */ +xplan_data as ( + select + x.plan_table_output + , o.id + , o.pid + , o.oid + , o.maxid + , o.minid + , a.a_time_self + , a.lio_self_format + , a.reads_self_format + , a.writes_self_format + , a.a_rows_format + , cast(a.elapsed_self_graph as varchar2(20)) as elapsed_self_graph + , cast(a.lio_self_graph as varchar2(20)) as lio_self_graph + , cast(a.reads_self_graph as varchar2(20)) as reads_self_graph + , cast(a.writes_self_graph as varchar2(20)) as writes_self_graph + , a.lio_ratio + , cast(a.tcf_graph as varchar2(20)) as tcf_graph + , a.total_elapsed + , a.total_lio + , a.total_reads + , a.total_writes + , a.a_rows + , a.e_rows_times_start_format + , cast(p.procs as varchar2(200)) as procs + , cast(p.procs_graph as varchar2(100)) as procs_graph + , cast(p.average_as_graph as varchar2(100)) as average_as_graph + , cast(p.average_as_t_graph as varchar2(100)) as average_as_t_graph + , cast(p.median_as_graph as varchar2(100)) as median_as_graph + , cast(w.activity as varchar2(200)) as activity + , cast(w.activity_graph as varchar2(100)) as activity_graph + , case when l.plan_line is not null then '&active_ind' end as line_active + , t.start_active + , t.duration_secs + , t.duration_secs_t + , cast(t.time_active_graph as varchar2(100)) as time_active_graph + , cast(m.pga_format as varchar2(10)) as pga + , cast(m.temp_format as varchar2(10)) as temp + , cast(m.io_read_format as varchar2(10)) as io_read + , cast(m.io_write_format as varchar2(10)) as io_write + , cast(m.io_read_req_format as varchar2(10)) as io_read_req + , cast(m.io_write_req_format as varchar2(10)) as io_write_req + , cast(m.execs_format as varchar2(10)) as execs + , cast(m.a_rows_format as varchar2(10)) as a_rows_m + , cast(m.co_percent as varchar2(5)) as co + , x.rn + from + ( + select /* Take advantage of 11g table function dynamic sampling */ + /*+ dynamic_sampling(dc, 2) */ + /* This ROWNUM determines the order of the output/processing */ + rownum as rn + , plan_table_output + from + /* From 11.2.0.2 on this will execute the given cursor on all RAC instances but effectively only on that instance where the plan should reside */ + /* The GV$ table function is undocumented but used for a similar purpose by 11.2.0.2+ Real-Time SQL Monitoring */ +&_IF_ORA11202_OR_HIGHER table(gv$(cursor(select * from table(&plan_function('&si',&cn, &par_fil.replace('&fo', 'AROWS', ''))) where USERENV('INSTANCE') = &plan_inst_id))) dc + /* Prior to 11.2.0.2 this problem is not solved yet as GV$() is not supported and DBMS_XPLAN.DISPLAY cannot show Rowsource statistics and would require a different parameter set to call */ +&_IF_LOWER_THAN_ORA11202 table(&plan_function('&si',&cn, &par_fil.replace('&fo', 'AROWS', ''))) dc + ) x + , ordered_hierarchy_data o + , formatted_data a + , parallel_procs p + , ash w + , active_plan_lines l + , plan_line_timelines t + , monitor_info_fmt m + where + o.id (+) = case + when regexp_like(x.plan_table_output, '^\|-?[\* 0-9]+\|') + then to_number(regexp_substr(x.plan_table_output, '[0-9]+')) + end + and a.id (+) = case + when regexp_like(x.plan_table_output, '^\|-?[\* 0-9]+\|') + then to_number(regexp_substr(x.plan_table_output, '[0-9]+')) + end + and p.plan_line (+) = case + when regexp_like(x.plan_table_output, '^\|-?[\* 0-9]+\|') + then to_number(regexp_substr(x.plan_table_output, '[0-9]+')) + end + and w.plan_line (+) = case + when regexp_like(x.plan_table_output, '^\|-?[\* 0-9]+\|') + then to_number(regexp_substr(x.plan_table_output, '[0-9]+')) + end + and l.plan_line (+) = case + when regexp_like(x.plan_table_output, '^\|-?[\* 0-9]+\|') + then to_number(regexp_substr(x.plan_table_output, '[0-9]+')) + end + and t.plan_line (+) = case + when regexp_like(x.plan_table_output, '^\|-?[\* 0-9]+\|') + then to_number(regexp_substr(x.plan_table_output, '[0-9]+')) + end + and m.plan_line_id (+) = case + when regexp_like(x.plan_table_output, '^\|-?[\* 0-9]+\|') + then to_number(regexp_substr(x.plan_table_output, '[0-9]+')) + end +) +/* Inject the additional data into the original DBMS_XPLAN output + by using the MODEL clause */ +select /* XPLAN_ASH ACTIVITY_PLAN_LINE SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + plan_table_output + , plan_table_count +from + xplan_data +model + dimension by (rn as r) + measures + ( + cast(plan_table_output as varchar2(1000)) as plan_table_output + , id + , maxid + , minid + , pid + , oid + , a_time_self + , lio_self_format + , reads_self_format + , writes_self_format + , e_rows_times_start_format + , a_rows_format + , elapsed_self_graph + , lio_self_graph + , reads_self_graph + , writes_self_graph + , lio_ratio + , tcf_graph + , total_elapsed + , total_lio + , total_reads + , total_writes + , a_rows + , a_rows_m + , execs + , pga + , temp + , io_read + , io_write + , io_read_req + , io_write_req + , co + , greatest(max(length(maxid)) over () + 3, 6) as csize + , cast(null as varchar2(200)) as inject + , cast(null as varchar2(300)) as inject2 + , cast(null as varchar2(500)) as inject3 + , greatest(max(length(a_rows_m)) over () + 3, 8) as a_rows_m_size + , greatest(max(length(execs)) over () + 3, 8) as execs_size + , greatest(max(length(pga)) over () + 3, 8) as pga_size + , greatest(max(length(temp)) over () + 3, 8) as temp_size + , greatest(max(length(io_read)) over () + 3, 8) as io_read_size + , greatest(max(length(io_write)) over () + 3, 8) as io_write_size + , greatest(max(length(io_read_req)) over () + 3, 10) as io_read_req_size + , greatest(max(length(io_write_req)) over () + 3, 10) as io_write_req_size + , greatest(max(length(co)) over () + 3, 7) as co_size + , greatest(max(length(procs)) over () + 3, 28) as procs_size + , greatest(max(length(procs_graph)) over () + 3, 29) as procs_graph_size + , greatest(max(length(average_as_graph)) over () + 3, 28) as average_as_graph_size + , greatest(max(length(average_as_t_graph)) over () + 3, 28) as average_as_t_graph_size + , greatest(max(length(median_as_graph)) over () + 3, 24) as median_as_graph_size + , greatest(max(length(activity)) over () + 3, 22) as activity_size + , greatest(max(length(activity_graph)) over () + 3, 22) as activity_graph_size + , greatest(max(length(line_active)) over () + 3, 6) as line_active_size + , greatest(max(length(start_active)) over () + 3, 8) as start_active_size + , greatest(max(length(duration_secs)) over () + 3, 8) as duration_secs_size + , greatest(max(length(duration_secs_t)) over () + 3, 8) as duration_secs_t_size + , greatest(max(length(time_active_graph)) over () + 3, 20) as time_active_graph_size + , case when instr('&op', 'DISTRIB') > 0 and '&slave_count' is not null then max(length(procs)) over () end as procs_is_not_null + , case when instr('&op', 'DISTRIB') > 0 and '&slave_count' is not null then max(length(procs_graph)) over () end as procs_graph_is_not_null + , case when instr('&op', 'DISTRIB') > 0 and '&slave_count' is not null then max(length(average_as_graph)) over () end as average_as_graph_is_not_null + , case when instr('&op', 'DISTRIB') > 0 and '&slave_count' is not null then max(length(average_as_t_graph)) over () end as average_as_t_graph_is_not_null + , case when instr('&op', 'DISTRIB') > 0 and '&slave_count' is not null then max(length(median_as_graph)) over () end as median_as_graph_is_not_null + , case when instr('&op', 'ASH') > 0 then max(length(activity)) over () end as activity_is_not_null + , case when instr('&op', 'ASH') > 0 then max(length(activity_graph)) over () end as activity_graph_is_not_null + , case when instr('&op', 'ASH') > 0 then max(length(line_active)) over () end as line_active_is_not_null + , case when instr('&op', 'TIMELINE') > 0 then max(length(start_active)) over () end as start_active_is_not_null + , case when instr('&op', 'TIMELINE') > 0 then max(length(duration_secs)) over () end as duration_secs_is_not_null + , case when instr('&op', 'TIMELINE') > 0 then max(length(duration_secs_t)) over () end as duration_secs_t_is_not_null + , case when instr('&op', 'TIMELINE') > 0 then max(length(time_active_graph)) over () end as time_active_graph_is_not_null + , case when instr('&fo', 'AROWS') > 0 then max(length(a_rows_format)) over () end as a_rows_format_is_not_null + , case when instr('&op', 'MONITOR') > 0 then max(length(a_rows_m)) over () end as a_rows_m_is_not_null + , case when instr('&op', 'MONITOR') > 0 then max(length(execs)) over () end as execs_is_not_null + , case when instr('&op', 'MONITOR') > 0 then max(length(pga)) over () end as pga_is_not_null + , case when instr('&op', 'MONITOR') > 0 then max(length(temp)) over () end as temp_is_not_null + , case when instr('&op', 'MONITOR') > 0 then max(length(io_read)) over () end as io_read_is_not_null + , case when instr('&op', 'MONITOR') > 0 then max(length(io_write)) over () end as io_write_is_not_null + , case when instr('&op', 'MONITOR') > 0 then max(length(io_read_req)) over () end as io_read_req_is_not_null + , case when instr('&op', 'MONITOR') > 0 then max(length(io_write_req)) over () end as io_write_req_is_not_null + , case when instr('&op', 'MONITOR') > 0 then max(length(co)) over () end as co_is_not_null + , procs + , procs_graph + , average_as_graph + , average_as_t_graph + , median_as_graph + , activity + , activity_graph + , line_active + , start_active + , duration_secs + , duration_secs_t + , time_active_graph + , count(*) over () as plan_table_count + ) + rules sequential order + ( + /* Prepare the injection of the OID / PID / ACT info */ + inject[r] = case + /* MINID/MAXID are the same for all rows + so it doesn't really matter + which offset we refer to */ + when id[cv(r)+1] = minid[cv(r)+1] + or id[cv(r)+3] = minid[cv(r)+3] + or id[cv(r)-1] = maxid[cv(r)-1] + then rpad('-', case when '&c_pid' is not null then csize[cv()] else 0 end + case when '&c_ord' is not null then csize[cv()] else 0 end + case when line_active_is_not_null[cv()] is not null and '&c_act' is not null then line_active_size[cv()] else 0 end, '-') + when id[cv(r)+2] = minid[cv(r)+2] + then '|' || case when '&c_pid' is not null then lpad('Pid |', csize[cv()]) end || case when '&c_ord' is not null then lpad('Ord |', csize[cv()]) end || case when line_active_is_not_null[cv()] is not null and '&c_act' is not null then lpad('Act |', line_active_size[cv()]) end + when id[cv()] is not null + then '|' || case when '&c_pid' is not null then lpad(pid[cv()] || ' |', csize[cv()]) end || case when '&c_ord' is not null then lpad(oid[cv()] || ' |', csize[cv()]) end || case when line_active_is_not_null[cv()] is not null and '&c_act' is not null then lpad(line_active[cv()] || ' |', line_active_size[cv()]) end + end + /* Prepare the injection of the remaining info */ + , inject2[r] = case + when id[cv(r)+1] = minid[cv(r)+1] + or id[cv(r)+3] = minid[cv(r)+3] + or id[cv(r)-1] = maxid[cv(r)-1] + -- Determine the line width for the three rows where we have horizontal lines + then rpad('-', + case when coalesce(a_rows_format_is_not_null[cv(r)+1], a_rows_format_is_not_null[cv(r)+3], a_rows_format_is_not_null[cv(r)-1]) is not null then + 9 else 0 end /* A_ROWS */ + + case when coalesce(total_elapsed[cv(r)+1], total_elapsed[cv(r)+3], total_elapsed[cv(r)-1]) > 0 and '&c_a_time_self' is not null then + 14 else 0 end /* A_TIME_SELF */ + + case when coalesce(total_lio[cv(r)+1], total_lio[cv(r)+3], total_lio[cv(r)-1]) > 0 and '&c_lio_self' is not null then + 11 else 0 end /* LIO_SELF */ + + case when coalesce(total_reads[cv(r)+1], total_reads[cv(r)+3], total_reads[cv(r)-1]) > 0 and '&c_reads_self' is not null then + 11 else 0 end /* READS_SELF */ + + case when coalesce(total_writes[cv(r)+1], total_writes[cv(r)+3], total_writes[cv(r)-1]) > 0 and '&c_writes_self' is not null then + 11 else 0 end /* WRITES_SELF */ + + case when coalesce(total_elapsed[cv(r)+1], total_elapsed[cv(r)+3], total_elapsed[cv(r)-1]) > 0 and '&c_a_time_self_graph' is not null then + 21 else 0 end /* A_TIME_SELF_GRAPH */ + + case when coalesce(total_lio[cv(r)+1], total_lio[cv(r)+3], total_lio[cv(r)-1]) > 0 and '&c_lio_self_graph' is not null then + 21 else 0 end /* LIO_SELF_GRAPH */ + + case when coalesce(total_reads[cv(r)+1], total_reads[cv(r)+3], total_reads[cv(r)-1]) > 0 and '&c_reads_self_graph' is not null then + 21 else 0 end /* READS_SELF_GRAPH */ + + case when coalesce(total_writes[cv(r)+1], total_writes[cv(r)+3], total_writes[cv(r)-1]) > 0 and '&c_writes_self_graph' is not null then + 21 else 0 end /* WRITES_SELF_GRAPH */ + + case when coalesce(total_lio[cv(r)+1], total_lio[cv(r)+3], total_lio[cv(r)-1]) > 0 and '&c_lio_ratio' is not null then + 11 else 0 end /* LIO_RATIO */ + + case when coalesce(total_lio[cv(r)+1], total_lio[cv(r)+3], total_lio[cv(r)-1]) > 0 and '&c_tcf_graph' is not null then + 11 else 0 end /* TCF_GRAPH */ + + case when coalesce(total_lio[cv(r)+1], total_lio[cv(r)+3], total_lio[cv(r)-1]) > 0 and '&c_e_rows_times_start' is not null then + 11 else 0 end /* E_ROWS_TIMES_START */ + , '-') + -- The additional headings + when id[cv(r)+2] = minid[cv(r)+2] + then + case when a_rows_format_is_not_null[cv(r)+2] is not null then + lpad('A-Rows |' , 9) end || + case when total_elapsed[cv(r)+2] > 0 and '&c_a_time_self' is not null then + lpad('A-Time Self |' , 14) end || + case when total_lio[cv(r)+2] > 0 and '&c_lio_self' is not null then + lpad('Bufs Self |' , 11) end || + case when total_reads[cv(r)+2] > 0 and '&c_reads_self' is not null then + lpad('Reads Self|' , 11) end || + case when total_writes[cv(r)+2] > 0 and '&c_writes_self' is not null then + lpad('Write Self|' , 11) end || + case when total_elapsed[cv(r)+2] > 0 and '&c_a_time_self_graph' is not null then + rpad(' A-Ti S-Graph', 20) || '|' end || + case when total_lio[cv(r)+2] > 0 and '&c_lio_self_graph' is not null then + rpad(' Bufs S-Graph', 20) || '|' end || + case when total_reads[cv(r)+2] > 0 and '&c_reads_self_graph' is not null then + rpad(' Reads S-Graph', 20) || '|' end || + case when total_writes[cv(r)+2] > 0 and '&c_writes_self_graph' is not null then + rpad(' Write S-Graph', 20) || '|' end || + case when total_lio[cv(r)+2] > 0 and '&c_lio_ratio' is not null then + lpad('LIO Ratio |' , 11) end || + case when total_lio[cv(r)+2] > 0 and '&c_tcf_graph' is not null then + lpad('TCF Graph |' , 11) end || + case when total_lio[cv(r)+2] > 0 and '&c_e_rows_times_start' is not null then + lpad('E-Rows*Sta|' , 11) end + -- The actual data + when id[cv()] is not null + then + case when a_rows_format_is_not_null[cv()] is not null then + lpad(a_rows_format[cv()] || '|', 9) end || + case when total_elapsed[cv()] > 0 and '&c_a_time_self' is not null then + lpad(a_time_self[cv()] || ' |', 14) end || + case when total_lio[cv()] > 0 and '&c_lio_self' is not null then + lpad(lio_self_format[cv()] || '|', 11) end || + case when total_reads[cv()] > 0 and '&c_reads_self' is not null then + lpad(reads_self_format[cv()] || '|', 11) end || + case when total_writes[cv()] > 0 and '&c_writes_self' is not null then + lpad(writes_self_format[cv()] || '|', 11) end || + case when total_elapsed[cv()] > 0 and '&c_a_time_self_graph' is not null then + rpad(elapsed_self_graph[cv()], 20) || '|' end || + case when total_lio[cv()] > 0 and '&c_lio_self_graph' is not null then + rpad(lio_self_graph[cv()], 20) || '|' end || + case when total_reads[cv()] > 0 and '&c_reads_self_graph' is not null then + rpad(reads_self_graph[cv()], 20) || '|' end || + case when total_writes[cv()] > 0 and '&c_writes_self_graph' is not null then + rpad(writes_self_graph[cv()], 20) || '|' end || + case when total_lio[cv()] > 0 and '&c_lio_ratio' is not null then + lpad(lio_ratio[cv()] || ' |', 11) end || + case when total_lio[cv()] > 0 and '&c_tcf_graph' is not null then + rpad(tcf_graph[cv()], 9) || ' |' end || + case when total_lio[cv()] > 0 and '&c_e_rows_times_start' is not null then + lpad(e_rows_times_start_format[cv()] || '|', 11) end + end + /* The additional ASH / Real-Time SQL Monitoring based info (except Active which is part of inject) */ + , inject3[r] = case + when id[cv(r)+1] = minid[cv(r)+1] + or id[cv(r)+3] = minid[cv(r)+3] + or id[cv(r)-1] = maxid[cv(r)-1] + -- Determine the line width for the three rows where we have horizontal lines + then rpad('-', + case when coalesce(execs_is_not_null[cv(r)+1], execs_is_not_null[cv(r)+3], execs_is_not_null[cv(r)-1]) is not null and '&c_execs' is not null then + execs_size[cv(r)+1] else 0 end /* EXECS */ + + case when coalesce(a_rows_m_is_not_null[cv(r)+1], a_rows_m_is_not_null[cv(r)+3], a_rows_m_is_not_null[cv(r)-1]) is not null and '&c_a_rows_m' is not null then + a_rows_m_size[cv(r)+1] else 0 end /* A_ROWS_M */ + + case when coalesce(pga_is_not_null[cv(r)+1], pga_is_not_null[cv(r)+3], pga_is_not_null[cv(r)-1]) is not null and '&c_pga' is not null then + pga_size[cv(r)+1] else 0 end /* PGA */ + + case when coalesce(temp_is_not_null[cv(r)+1], temp_is_not_null[cv(r)+3], temp_is_not_null[cv(r)-1]) is not null and '&c_temp' is not null then + temp_size[cv(r)+1] else 0 end /* TEMP */ + + case when coalesce(io_read_is_not_null[cv(r)+1], io_read_is_not_null[cv(r)+3], io_read_is_not_null[cv(r)-1]) is not null and '&c_io_read' is not null then + io_read_size[cv(r)+1] else 0 end /* IO_READ */ + + case when coalesce(io_write_is_not_null[cv(r)+1], io_write_is_not_null[cv(r)+3], io_write_is_not_null[cv(r)-1]) is not null and '&c_io_write' is not null then + io_write_size[cv(r)+1] else 0 end /* IO_WRITE */ + + case when coalesce(co_is_not_null[cv(r)+1], co_is_not_null[cv(r)+3], co_is_not_null[cv(r)-1]) is not null and '&c_co' is not null then + co_size[cv(r)+1] else 0 end /* CO */ + + case when coalesce(io_read_req_is_not_null[cv(r)+1], io_read_req_is_not_null[cv(r)+3], io_read_req_is_not_null[cv(r)-1]) is not null and '&c_io_read_req' is not null then + io_read_req_size[cv(r)+1] else 0 end /* IO_READ_REQ */ + + case when coalesce(io_write_req_is_not_null[cv(r)+1], io_write_req_is_not_null[cv(r)+3], io_write_req_is_not_null[cv(r)-1]) is not null and '&c_io_write_req' is not null then + io_write_req_size[cv(r)+1] else 0 end /* IO_WRITE_REQ */ + + case when coalesce(start_active_is_not_null[cv(r)+1], start_active_is_not_null[cv(r)+3], start_active_is_not_null[cv(r)-1]) is not null and '&c_start_active' is not null then + start_active_size[cv(r)+1] else 0 end /* START_ACTIVE */ + + case when coalesce(duration_secs_t_is_not_null[cv(r)+1], duration_secs_t_is_not_null[cv(r)+3], duration_secs_t_is_not_null[cv(r)-1]) is not null and '&c_duration_secs_t' is not null then + duration_secs_t_size[cv(r)+1] else 0 end /* DURATION_SECS_T */ + + case when coalesce(duration_secs_is_not_null[cv(r)+1], duration_secs_is_not_null[cv(r)+3], duration_secs_is_not_null[cv(r)-1]) is not null and '&c_duration_secs' is not null then + duration_secs_size[cv(r)+1] else 0 end /* DURATION_SECS */ + + case when coalesce(time_active_graph_is_not_null[cv(r)+1], time_active_graph_is_not_null[cv(r)+3], time_active_graph_is_not_null[cv(r)-1]) is not null and '&c_time_active_graph' is not null then + time_active_graph_size[cv(r)+1] else 0 end /* TIME_ACTIVE_GRAPH */ + + case when coalesce(procs_is_not_null[cv(r)+1], procs_is_not_null[cv(r)+3], procs_is_not_null[cv(r)-1]) is not null and '&c_procs' is not null then + procs_size[cv(r)+1] else 0 end /* PROCS */ + + case when coalesce(procs_graph_is_not_null[cv(r)+1], procs_graph_is_not_null[cv(r)+3], procs_graph_is_not_null[cv(r)-1]) is not null and '&c_procs_graph' is not null then + procs_graph_size[cv(r)+1] else 0 end /* PROCS_GRAPH */ + + case when coalesce(average_as_t_graph_is_not_null[cv(r)+1], average_as_t_graph_is_not_null[cv(r)+3], average_as_t_graph_is_not_null[cv(r)-1]) is not null and '&c_average_as_t_graph' is not null then + average_as_t_graph_size[cv(r)+1] else 0 end /* AVERAGE_AS_T_GRAPH */ + + case when coalesce(average_as_graph_is_not_null[cv(r)+1], average_as_graph_is_not_null[cv(r)+3], average_as_graph_is_not_null[cv(r)-1]) is not null and '&c_average_as_graph' is not null then + average_as_graph_size[cv(r)+1] else 0 end /* AVERAGE_AS_GRAPH */ + + case when coalesce(median_as_graph_is_not_null[cv(r)+1], median_as_graph_is_not_null[cv(r)+3], median_as_graph_is_not_null[cv(r)-1]) is not null and '&c_median_as_graph' is not null then + median_as_graph_size[cv(r)+1] else 0 end /* MEDIAN_AS_GRAPH */ + + case when coalesce(activity_graph_is_not_null[cv(r)+1], activity_graph_is_not_null[cv(r)+3], activity_graph_is_not_null[cv(r)-1]) is not null and '&c_activity_graph' is not null then + activity_graph_size[cv(r)+1] else 0 end /* ACTIVITY_GRAPH */ + + case when coalesce(activity_is_not_null[cv(r)+1], activity_is_not_null[cv(r)+3], activity_is_not_null[cv(r)-1]) is not null and '&c_activity' is not null then + activity_size[cv(r)+1] else 0 end /* ACTIVITY */ + , '-') + -- The additional headings + when id[cv(r)+2] = minid[cv(r)+2] + then + case when execs_is_not_null[cv(r)+2] is not null and '&c_execs' is not null then + rpad(' Execs', execs_size[cv(r)+2] - 1) || '|' end || + case when a_rows_m_is_not_null[cv(r)+2] is not null and '&c_a_rows_m' is not null then + rpad(' A-Rows', a_rows_m_size[cv(r)+2] - 1) || '|' end || + case when pga_is_not_null[cv(r)+2] is not null and '&c_pga' is not null then + rpad(' PGA', pga_size[cv(r)+2] - 1) || '|' end || + case when temp_is_not_null[cv(r)+2] is not null and '&c_temp' is not null then + rpad(' Temp', temp_size[cv(r)+2] - 1) || '|' end || + case when io_read_is_not_null[cv(r)+2] is not null and '&c_io_read' is not null then + rpad(' ReadB', io_read_size[cv(r)+2] - 1) || '|' end || + case when io_write_is_not_null[cv(r)+2] is not null and '&c_io_write' is not null then + rpad(' WriteB', io_write_size[cv(r)+2] - 1) || '|' end || + case when co_is_not_null[cv(r)+2] is not null and '&c_co' is not null then + rpad(' CellO%', co_size[cv(r)+2] - 1) || '|' end || + case when io_read_is_not_null[cv(r)+2] is not null and '&c_io_read_req' is not null then + rpad(' ReadReq', io_read_req_size[cv(r)+2] - 1) || '|' end || + case when io_write_is_not_null[cv(r)+2] is not null and '&c_io_write_req' is not null then + rpad(' WriteReq', io_write_req_size[cv(r)+2] - 1) || '|' end || + case when start_active_is_not_null[cv(r)+2] is not null and '&c_start_active' is not null then + rpad(' Start', start_active_size[cv(r)+2] - 1) || '|' end || + case when duration_secs_t_is_not_null[cv(r)+2] is not null and '&c_duration_secs_t' is not null then + rpad(' Dur(T)', duration_secs_t_size[cv(r)+2] - 1) || '|' end || + case when duration_secs_is_not_null[cv(r)+2] is not null and '&c_duration_secs' is not null then + rpad(' Dur(A)', duration_secs_size[cv(r)+2] - 1) || '|' end || + case when time_active_graph_is_not_null[cv(r)+2] is not null and '&c_time_active_graph' is not null then + rpad(' Time Active Graph', time_active_graph_size[cv(r)+2] - 1) || '|' end || + case when procs_is_not_null[cv(r)+2] is not null and '&c_procs' is not null then + rpad(' Parallel Distribution ASH', procs_size[cv(r)+2] - 1) || '|' end || + case when procs_graph_is_not_null[cv(r)+2] is not null and '&c_procs_graph' is not null then + rpad(' Parallel Execution Skew ASH', procs_graph_size[cv(r)+2] - 1) || '|' end || + case when average_as_t_graph_is_not_null[cv(r)+2] is not null and '&c_average_as_t_graph' is not null then + rpad(' Avg Act Sess Graph (T) ASH', average_as_t_graph_size[cv(r)+2] - 1) || '|' end || + case when average_as_graph_is_not_null[cv(r)+2] is not null and '&c_average_as_graph' is not null then + rpad(' Avg Act Sess Graph (A) ASH', average_as_graph_size[cv(r)+2] - 1) || '|' end || + case when median_as_graph_is_not_null[cv(r)+2] is not null and '&c_median_as_graph' is not null then + rpad(' Med Act Sess Graph ASH', median_as_graph_size[cv(r)+2] - 1) || '|' end || + case when activity_graph_is_not_null[cv(r)+2] is not null and '&c_activity_graph' is not null then + rpad(' Activity Graph ASH', activity_graph_size[cv(r)+2] - 1) || '|' end || + case when activity_is_not_null[cv(r)+2] is not null and '&c_activity' is not null then + rpad(' Top &topnw Activity ASH', activity_size[cv(r)+2] - 1) || '|' end + -- The actual data + when id[cv()] is not null + then + case when execs_is_not_null[cv()] is not null and '&c_execs' is not null then + lpad(execs[cv()] || ' |', execs_size[cv()]) end || + case when a_rows_m_is_not_null[cv()] is not null and '&c_a_rows_m' is not null then + lpad(a_rows_m[cv()] || ' |', a_rows_m_size[cv()]) end || + case when pga_is_not_null[cv()] is not null and '&c_pga' is not null then + lpad(pga[cv()] || ' |', pga_size[cv()]) end || + case when temp_is_not_null[cv()] is not null and '&c_temp' is not null then + lpad(temp[cv()] || ' |', temp_size[cv()]) end || + case when io_read_is_not_null[cv()] is not null and '&c_io_read' is not null then + lpad(io_read[cv()] || ' |', io_read_size[cv()]) end || + case when io_write_is_not_null[cv()] is not null and '&c_io_write' is not null then + lpad(io_write[cv()] || ' |', io_write_size[cv()]) end || + case when co_is_not_null[cv()] is not null and '&c_co' is not null then + lpad(co[cv()] || ' |', co_size[cv()]) end || + case when io_read_req_is_not_null[cv()] is not null and '&c_io_read_req' is not null then + lpad(io_read_req[cv()] || ' |', io_read_req_size[cv()]) end || + case when io_write_req_is_not_null[cv()] is not null and '&c_io_write_req' is not null then + lpad(io_write_req[cv()] || ' |', io_write_req_size[cv()]) end || + case when start_active_is_not_null[cv()] is not null and '&c_start_active' is not null then + lpad(start_active[cv()] || ' |', start_active_size[cv()]) end || + case when duration_secs_t_is_not_null[cv()] is not null and '&c_duration_secs_t' is not null then + lpad(duration_secs_t[cv()] || ' |', duration_secs_t_size[cv()]) end || + case when duration_secs_is_not_null[cv()] is not null and '&c_duration_secs' is not null then + lpad(duration_secs[cv()] || ' |', duration_secs_size[cv()]) end || + case when time_active_graph_is_not_null[cv()] is not null and '&c_time_active_graph' is not null then + rpad(' ' || time_active_graph[cv()], time_active_graph_size[cv()] - 1) || '|' end || + case when procs_is_not_null[cv()] is not null and '&c_procs' is not null then + rpad(' ' || procs[cv()], procs_size[cv()] - 1) || '|' end || + case when procs_graph_is_not_null[cv()] is not null and '&c_procs_graph' is not null then + rpad(' ' || procs_graph[cv()], procs_graph_size[cv()] - 1) || '|' end || + case when average_as_t_graph_is_not_null[cv()] is not null and '&c_average_as_t_graph' is not null then + rpad(' ' || average_as_t_graph[cv()], average_as_t_graph_size[cv()] - 1) || '|' end || + case when average_as_graph_is_not_null[cv()] is not null and '&c_average_as_graph' is not null then + rpad(' ' || average_as_graph[cv()], average_as_graph_size[cv()] - 1) || '|' end || + case when median_as_graph_is_not_null[cv()] is not null and '&c_median_as_graph' is not null then + rpad(' ' || median_as_graph[cv()], median_as_graph_size[cv()] - 1) || '|' end || + case when activity_graph_is_not_null[cv()] is not null and '&c_activity_graph' is not null then + rpad(' ' || substr(activity_graph[cv()], 2), activity_graph_size[cv()] - 1) || '|' end || + case when activity_is_not_null[cv()] is not null and '&c_activity' is not null then + rpad(' ' || activity[cv()], activity_size[cv()] - 1) || '|' end + end + /* Putting it all together */ + , plan_table_output[r] = case + when inject[cv()] like '---%' + then inject[cv()] || plan_table_output[cv()] || inject2[cv()] || inject3[cv()] + when inject[cv()] is present + then regexp_replace(plan_table_output[cv()], '\|', inject[cv()], 1, 2) || inject2[cv()] || inject3[cv()] + else plan_table_output[cv()] + end + ) +order by + r +; + +set heading off feedback off + +column message format a80 + +select + chr(10) || chr(10) || + '------------------------------------------------------------' || chr(10) || + 'Note: Execution plan could not be found - falling back to' || chr(10) || + 'plan operation details from ASH.' || chr(10) || + case when '&ah' = 'CURR' then 'Use the MIXED or HIST ASH source option for trying to get' || chr(10) end || + case when '&ah' = 'CURR' then 'the execution plan from AWR.' || chr(10) end || + '------------------------------------------------------------' +from + dual +where + (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0 or instr('&op', 'NONE') > 0 or instr('&op', 'MONITOR') > 0) +and ('&plan_exists' is null or coalesce(to_number('&pc'), 0) = 0) +; + +column message clear + +set heading on + +set heading on pagesize 49999 feedback off + +-- If you need to debug, comment the following line +set termout off + +/* Determine which columns to show in the output following */ + +column show_line_active new_value _SHOW_LINE_ACTIVE &debug_internalp.print +column show_procs new_value _SHOW_PROCS &debug_internalp.print +column show_procs_graph new_value _SHOW_PROCS_GRAPH &debug_internalp.print +column show_average_as_graph new_value _SHOW_AVERAGE_AS_GRAPH &debug_internalp.print +column show_average_as_t_graph new_value _SHOW_AVERAGE_AS_T_GRAPH &debug_internalp.print +column show_median_as_graph new_value _SHOW_MEDIAN_AS_GRAPH &debug_internalp.print +column show_activity new_value _SHOW_ACTIVITY &debug_internalp.print +column show_activity_graph new_value _SHOW_ACTIVITY_GRAPH &debug_internalp.print +column show_start_active new_value _SHOW_START_ACTIVE &debug_internalp.print +column show_duration_secs new_value _SHOW_DURATION_SECS &debug_internalp.print +column show_duration_secs_t new_value _SHOW_DURATION_SECS_T &debug_internalp.print +column show_time_active_graph new_value _SHOW_TIME_ACTIVE_GRAPH &debug_internalp.print +column show_execs new_value _SHOW_EXECS &debug_internalp.print +column show_a_rows_m new_value _SHOW_A_ROWS_M &debug_internalp.print +column show_pga new_value _SHOW_PGA &debug_internalp.print +column show_temp new_value _SHOW_TEMP &debug_internalp.print +column show_io_read new_value _SHOW_IO_READ &debug_internalp.print +column show_io_write new_value _SHOW_IO_WRITE &debug_internalp.print +column show_io_read_req new_value _SHOW_IO_READ_REQ &debug_internalp.print +column show_io_write_req new_value _SHOW_IO_WRITE_REQ &debug_internalp.print +column show_co new_value _SHOW_CO &debug_internalp.print +column pgs_size new_value pgs_size &debug_internalp.print +column aas_size new_value aas_size &debug_internalp.print +column wgs_size new_value wgs_size &debug_internalp.print +column tgs_size new_value tgs_size &debug_internalp.print + +select + case when '&c_act' is not null and instr('&op', 'ASH') > 0 then '' else 'no' end as show_line_active + , case when '&c_procs' is not null and instr('&op', 'DISTRIB') > 0 then '' else 'no' end as show_procs + , case when '&c_procs_graph' is not null and instr('&op', 'DISTRIB') > 0 then '' else 'no' end as show_procs_graph + , to_char(&pgs + 8, 'TM') as pgs_size + , case when '&c_average_as_graph' is not null and instr('&op', 'DISTRIB') > 0 then '' else 'no' end as show_average_as_graph + , case when '&c_average_as_t_graph' is not null and instr('&op', 'DISTRIB') > 0 then '' else 'no' end as show_average_as_t_graph + , case when '&c_median_as_graph' is not null and instr('&op', 'DISTRIB') > 0 then '' else 'no' end as show_median_as_graph + , to_char(&aas + 8, 'TM') as aas_size + , case when '&c_activity' is not null and instr('&op', 'ASH') > 0 then '' else 'no' end as show_activity + , case when '&c_activity_graph' is not null and instr('&op', 'ASH') > 0 then '' else 'no' end as show_activity_graph + , to_char(&wgs + 8, 'TM') as wgs_size + , case when '&c_start_active' is not null and instr('&op', 'TIMELINE') > 0 then '' else 'no' end as show_start_active + , case when '&c_duration_secs' is not null and instr('&op', 'TIMELINE') > 0 then '' else 'no' end as show_duration_secs + , case when '&c_duration_secs_t' is not null and instr('&op', 'TIMELINE') > 0 then '' else 'no' end as show_duration_secs_t + , case when '&c_time_active_graph' is not null and instr('&op', 'TIMELINE') > 0 then '' else 'no' end as show_time_active_graph + , to_char(&tgs + 8, 'TM') as tgs_size + , case when '&c_execs' is not null and '&use_monitor' is null then '' else 'no' end as show_execs + , case when '&c_a_rows_m' is not null and '&use_monitor' is null then '' else 'no' end as show_a_rows_m + , case when '&c_pga' is not null and '&use_monitor' is null then '' else 'no' end as show_pga + , case when '&c_temp' is not null and '&use_monitor' is null then '' else 'no' end as show_temp + , case when '&c_io_read' is not null and '&use_monitor' is null then '' else 'no' end as show_io_read + , case when '&c_io_write' is not null and '&use_monitor' is null then '' else 'no' end as show_io_write + , case when '&c_co' is not null and '&use_monitor' is null then '' else 'no' end as show_co + , case when '&c_io_read_req' is not null and '&use_monitor' is null then '' else 'no' end as show_io_read_req + , case when '&c_io_write_req' is not null and '&use_monitor' is null then '' else 'no' end as show_io_write_req +from + dual +; + +column show_line_active clear +column show_procs clear +column show_procs_graph clear +column show_average_as_graph clear +column show_average_as_t_graph clear +column show_median_as_graph clear +column show_activity clear +column show_activity_graph clear +column show_start_active clear +column show_duration_secs clear +column show_duration_secs_t clear +column show_time_active_graph clear +column pgs_size clear +column aas_size clear +column wgs_size clear +column tgs_size clear +column show_execs clear +column show_a_rows_m clear +column show_pga clear +column show_temp clear +column show_io_read clear +column show_io_write clear +column show_co clear +column show_io_read_req clear +column show_io_write_req clear + +set termout on + +column plan_operation format a35 +column line_active format a5 heading "Act" &_SHOW_LINE_ACTIVE.print +column execs format a8 heading "Execs" &_SHOW_EXECS.print +column a_rows_m format a8 heading "A-Rows" &_SHOW_A_ROWS_M.print +column pga format a8 heading "PGA" &_SHOW_PGA.print +column temp format a8 heading "Temp" &_SHOW_TEMP.print +column io_read format a8 heading "ReadB" &_SHOW_IO_READ.print +column io_write format a8 heading "WriteB" &_SHOW_IO_WRITE.print +column co_percent format a7 heading "CellO%" &_SHOW_CO.print +column io_read_req format a9 heading "ReadReq" &_SHOW_IO_READ_REQ.print +column io_write_req format a9 heading "WriteReq" &_SHOW_IO_WRITE_REQ.print +column procs format a90 heading "Parallel Distribution ASH" &_SHOW_PROCS.print +column procs_graph format a&pgs_size heading "Parallel Execution Skew ASH" &_SHOW_PROCS_GRAPH.print +column average_as_graph format a&aas_size heading "Avg Act Sess Graph (A) ASH" &_SHOW_AVERAGE_AS_GRAPH.print +column average_as_t_graph format a&aas_size heading "Avg Act Sess Graph (T) ASH" &_SHOW_AVERAGE_AS_T_GRAPH.print +column median_as_graph format a&aas_size heading "Med Act Sess Graph ASH" &_SHOW_MEDIAN_AS_GRAPH.print +column activity format a90 heading "Top &topnw Activity ASH" &_SHOW_ACTIVITY.print +column activity_graph format a&wgs_size heading "Activity Graph ASH" &_SHOW_ACTIVITY_GRAPH.print +column start_active format a15 heading "Start" &_SHOW_START_ACTIVE.print +column duration_secs format a15 heading "Dur (Active)" &_SHOW_DURATION_SECS.print +column duration_secs_t format a15 heading "Dur (Total)" &_SHOW_DURATION_SECS_T.print +column time_active_graph format a&tgs_size heading "Time Active Graph" &_SHOW_TIME_ACTIVE_GRAPH.print + +undefine pgs_size +undefine aas_size +undefine wgs_size +undefine tgs_size + +/* If no plan could be found, provide mininum information based on ASH about plan line activity */ + +/* Get the previously saved buffer contents */ + +-- If you need to debug, comment the following line +set termout off + +get .xplan_ash_temp nolist + +set termout on + +i +/* Info about the plan operation from ASH */ +plan_operations as +( + select + distinct + sql_plan_line_id as plan_line + , sql_plan_hash_value as plan_hash_value + , plan_operation + from + ash_base + where + '&_IF_ORA11_OR_HIGHER' is null + and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +) +select /* XPLAN_ASH ACTIVITY_PLAN_LINE SQL_ID: &si */ /*+ NO_STATEMENT_QUEUING */ + o.plan_hash_value + , o.plan_line + , o.plan_operation + , case when l.plan_line is not null then '&active_ind' end as line_active + , lpad(cast(m.execs_format as varchar2(10)), 7) as execs + , lpad(cast(m.a_rows_format as varchar2(10)), 7) as a_rows_m + , lpad(cast(m.pga_format as varchar2(10)), 7) as pga + , lpad(cast(m.temp_format as varchar2(10)), 7) as temp + , lpad(cast(m.io_read_format as varchar2(10)), 7) as io_read + , lpad(cast(m.io_write_format as varchar2(10)), 7) as io_write + , lpad(cast(m.co_percent as varchar2(10)), 7) as co_percent + , lpad(cast(m.io_read_req_format as varchar2(10)), 8) as io_read_req + , lpad(cast(m.io_write_req_format as varchar2(10)), 8) as io_write_req + , t.start_active + , t.duration_secs_t + , t.duration_secs + , t.time_active_graph + , p.procs + , p.procs_graph + , p.average_as_t_graph + , p.average_as_graph + , p.median_as_graph + , a.activity_graph + , a.activity +from + plan_operations o + , parallel_procs p + , ash a + , plan_line_timelines t + , active_plan_lines l + , monitor_info_fmt m +where + o.plan_line = p.plan_line (+) +and o.plan_line = a.plan_line (+) +and o.plan_line = t.plan_line (+) +and o.plan_line = l.plan_line (+) +and o.plan_line = m.plan_line_id (+) +and '&_IF_ORA11_OR_HIGHER' is null +and (instr('&op', 'ASH') > 0 or instr('&op', 'DISTRIB') > 0 or instr('&op', 'TIMELINE') > 0) +and ('&plan_exists' is null or coalesce(to_number('&pc'), 0) = 0) +order by + plan_line +; + +column plan_operation clear +column line_active clear +column procs clear +column procs_graph clear +column average_as_t_graph clear +column average_as_graph clear +column median_as_graph clear +column activity clear +column activity_graph clear +column start_active clear +column duration_secs_t clear +column duration_secs clear +column time_active_graph clear +column execs clear +column a_rows_m clear +column pga clear +column temp clear +column io_read clear +column io_write clear +column co_percent clear +column io_read_req clear +column io_write_req clear + +----------------------------------- +-- Clean up SQL*Plus environment -- +----------------------------------- + +undefine _EXPERIMENTAL +undefine duplicator +undefine dist_sample_count +undefine default_fo +undefine default_source +undefine default_operation +undefine default_ash +undefine prev_sql_id +undefine prev_cn +undefine prev_sql_exec_start +undefine prev_sql_exec_id +undefine last_exec_start +undefine last_exec_id +undefine last_exec_second_id +undefine last +undefine child_ad +undefine slave_count +undefine topnp +undefine topnw +undefine topnl +undefine topna +undefine pgs +undefine aas +undefine wgs +undefine si +undefine cn +undefine fo +undefine so +undefine ls +undefine li +undefine op +undefine ah +undefine co +undefine gc +undefine gc2 +undefine gc3 +undefine 1 +undefine 2 +undefine 3 +undefine 4 +undefine 5 +undefine 6 +undefine 7 +undefine 8 +undefine 9 +undefine 10 +undefine sid_sql_id +undefine sid_child_no +undefine sid_sql_exec_start +undefine sid_sql_exec_id +undefine _IF_ORA11_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11 +undefine _IF_ORA112_OR_HIGHER +undefine _IF_LOWER_THAN_ORA112 +undefine _IF_ORA11202_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11202 +undefine _IF_ORA11203_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11203 +undefine _IF_ORA12_OR_HIGHER +undefine _IF_ORA12_READ_MEM +undefine _IF_ORA_NO_READ_MEM +undefine _IF_LOWER_THAN_ORA12 +undefine _IF_ORA12102_OR_HIGHER +undefine _IF_LOWER_THAN_ORA12102 +undefine _IF_ORA11202_OR_HIGHERP +undefine _IF_ORA112_OR_HIGHERP +undefine _IF_ORA11_OR_HIGHERP +undefine _IF_ORA12_OR_HIGHERP +undefine _IF_ORA12_READ_MEMP +undefine _IF_CROSS_INSTANCE +undefine _IS_CROSS_INSTANCE +undefine _IS_SINGL_INSTANCE +undefine _SQL_EXEC2 +undefine plan_table_name +undefine las +undefine active_ind +undefine ic +undefine dm +undefine all_cols +undefine default_cols +undefine curr_global_ash +undefine curr_inst_id +undefine curr_plan_table +undefine curr_plan_table_stats +undefine curr_second_id +undefine curr_second_id_monitor +undefine curr_sample_freq +undefine curr_plan_function +undefine curr_par_fil +undefine curr_third_id +undefine curr_sqltext +undefine curr_sqltext_join +undefine curr_sqltext_join_col +undefine curr_sql_monitor +undefine curr_sql_plan_monitor +undefine hist_global_ash +undefine hist_inst_id +undefine hist_plan_table +undefine hist_plan_table_stats +undefine hist_second_id +undefine hist_second_id_monitor +undefine hist_sample_freq +undefine hist_plan_function +undefine hist_par_fil +undefine hist_third_id +undefine hist_sqltext +undefine hist_sqltext_join +undefine hist_sqltext_join_col +undefine hist_sql_monitor +undefine hist_sql_plan_monitor +undefine mixed_global_ash +undefine mixed_inst_id +undefine mixed_plan_table +undefine mixed_plan_table_stats +undefine mixed_second_id +undefine mixed_second_id_monitor +undefine mixed_sample_freq +undefine mixed_plan_function +undefine mixed_par_fil +undefine mixed_third_id +undefine mixed_sqltext +undefine mixed_sqltext_join +undefine mixed_sqltext_join_col +undefine mixed_sql_monitor +undefine mixed_sql_plan_monitor +undefine sash_global_ash +undefine sash_inst_id +undefine sash_plan_table +undefine sash_plan_table_stats +undefine sash_second_id +undefine sash_second_id_monitor +undefine sash_sample_freq +undefine sash_plan_function +undefine sash_par_fil +undefine sash_third_id +undefine sash_sqltext +undefine sash_sqltext_join +undefine sash_sqltext_join_col +undefine sash_sql_monitor +undefine sash_sql_plan_monitor +undefine _IS_SASH_REPO +undefine SASH_DB_VERSION +undefine global_ash +undefine inst_id +undefine plan_table +undefine plan_table_stats +undefine second_id +undefine second_id_monitor +undefine sample_freq +undefine plan_function +undefine par_fil +undefine third_id +undefine sqltext +undefine sqltext_join +undefine sqltext_join_col +undefine sql_monitor +undefine sql_plan_monitor +undefine third_id_sqltext +undefine c_pid +undefine c_ord +undefine c_act +undefine c_a_time_self +undefine c_lio_self +undefine c_reads_self +undefine c_writes_self +undefine c_a_time_self_graph +undefine c_lio_self_graph +undefine c_reads_self_graph +undefine c_writes_self_graph +undefine c_lio_ratio +undefine c_tcf_graph +undefine c_e_rows_times_start +undefine c_start_active +undefine c_duration_secs +undefine c_duration_secs_t +undefine c_time_active_graph +undefine c_procs +undefine c_procs_graph +undefine c_average_as_graph +undefine c_median_as_graph +undefine c_average_as_t_graph +undefine c_activity_graph +undefine c_activity +undefine c_execs +undefine c_a_rows_m +undefine c_pga +undefine c_temp +undefine c_io_read +undefine c_io_write +undefine c_co +undefine c_io_read_req +undefine c_io_write_req +undefine ds +undefine tgs +undefine avg_as_bkts +undefine rnd_thr +undefine no_ord_on_px +undefine find_min_sample_10g +undefine pc +undefine plan_exists +undefine _SHOW_LINE_ACTIVE +undefine _SHOW_PROCS +undefine _SHOW_PROCS_GRAPH +undefine _SHOW_AVERAGE_AS_GRAPH +undefine _SHOW_MEDIAN_AS_GRAPH +undefine _SHOW_AVERAGE_AS_T_GRAPH +undefine _SHOW_ACTIVITY +undefine _SHOW_ACTIVITY_GRAPH +undefine _SHOW_START_ACTIVE +undefine _SHOW_DURATION_SECS +undefine _SHOW_DURATION_SECS_T +undefine _SHOW_TIME_ACTIVE_GRAPH +undefine _SHOW_EXECS +undefine _SHOW_A_ROWS_M +undefine _SHOW_PGA +undefine _SHOW_TEMP +undefine _SHOW_IO_READ +undefine _SHOW_IO_WRITE +undefine _SHOW_CO +undefine _SHOW_IO_READ_REQ +undefine _SHOW_IO_WRITE_REQ +undefine ash_pred1 +undefine ash_pred2 +undefine ash_ln_pred1 +undefine ash_ln_pred2 +undefine ash_min_sample_time +undefine ash_max_sample_time +undefine ash_current_time +undefine ext_rowsource_graphs_maxrel +undefine show_monitor_rowcount +undefine ca_sc +undefine plan_inst_id +undefine ignore_PX_credit_blkd_10g +undefine show_median +undefine topn_sqlid +undefine show_px_sets +undefine use_monitor +undefine use_no_monitor +undefine dm_opt1 +undefine dm_opt2 +undefine default_sql_exec_id +undefine use_lateral +undefine use_no_lateral +undefine ash_sample_count_threshold +undefine debug_internalp +undefine debug_internalf +undefine is_adaptive_plan + +col plan_table_output clear +col last_exec_start clear +col last_exec_id clear +col last_exec_second_id clear +col si clear +col cn clear +col fo clear +col so clear +col op clear +col ah clear +col co clear +col last clear +col li clear +col ls clear +col child_ad clear +col 1 clear +col 2 clear +col 3 clear +col 4 clear +col 5 clear +col 6 clear +col 7 clear +col 8 clear +col 9 clear +col 10 clear +col sid_sql_id clear +col sid_child_no clear +col sid_sql_exec_start clear +col sid_sql_exec_id clear +col ora11_higher clear +col ora11_lower clear +col ora112_higher clear +col ora112_lower clear +col ora11202_higher clear +col ora11202_lower clear +col ora11203_higher clear +col ora11203_lower clear +col ora12_higher clear +col ora12_lower clear +col ora12102_higher clear +col ora12102_lower clear +col ora12_read_mem clear +col ora_no_read_mem clear +col global_ash clear +col inst_id clear +col plan_table clear +col plan_table_stats clear +col second_id clear +col second_id_monitor clear +col sample_freq clear +col plan_function clear +col par_fil clear +col sqltext clear +col sqltext_join clear +col sqltext_join_col clear +col sql_monitor clear +col sql_plan_monitor clear +col plan_table_name clear +col inst_count clear +col c_pid clear +col c_ord clear +col c_act clear +col c_a_time_self clear +col c_lio_self clear +col c_reads_self clear +col c_writes_self clear +col c_a_time_self_graph clear +col c_lio_self_graph clear +col c_reads_self_graph clear +col c_writes_self_graph clear +col c_lio_ratio clear +col c_tcf_graph clear +col c_e_rows_times_start clear +col c_start_active clear +col c_duration_secs clear +col c_duration_secs_t clear +col c_time_active_graph clear +col c_procs clear +col c_procs_graph clear +col c_average_as_graph clear +col c_median_as_graph clear +col c_average_as_t_graph clear +col c_activity_graph clear +col c_activity clear +col c_execs clear +col c_a_rows_m clear +col c_pga clear +col c_temp clear +col c_io_read clear +col c_io_write clear +col c_co clear +col c_io_read_req clear +col c_io_write_req clear +col plan_table_count clear +col plan_exists clear + +-- Disable LATERAL views +begin + execute immediate 'alter session set events ''22829 trace name context off'''; +exception +when others then + null; +end; +/ + +-- Restore previous SQL*Plus environment +@.xplan_settings \ No newline at end of file diff --git a/vdh/zfs_storage_overview.sh b/vdh/zfs_storage_overview.sh new file mode 100644 index 0000000..b14addb --- /dev/null +++ b/vdh/zfs_storage_overview.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +### check all the ZFS pools and shares +### pass the admin hostname (or ip) for the ZFS you want to check + +if [ "$#" -ne 1 ] +then + echo "usage: $0 " + exit 1 +fi + +ssh -T root@${1} < 800 mAh) +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuCapacityInfo -a0 | grep "Full Charge" ' + +#-- Check current Battery erors (Should be < 10%) +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -a0 | grep "Max Error"' + + +#-- FlashCache +dcli -l root -g cell_group " cellcli -e \"LIST GRIDDISK ATTRIBUTES name,cachingPolicy where name like '.*RECO.*' \" " +dcli -l root -g cell_group " cellcli -e \"LIST GRIDDISK ATTRIBUTES name,cachingPolicy where cachingPolicy != 'default' \" " +dcli -l root -g cell_group " cellcli -e \"LIST METRICCURRENT WHERE name = 'GD_BY_FC_DIRTY' and metricObjectName like '.*RECO.*' \" " +dcli -l root -g cell_group " cellcli -e \"LIST METRICCURRENT WHERE name = 'GD_IO_BY_R_LG' and metricObjectName like '.*RECO.*' \" " +dcli -l root -g cell_group " cellcli -e \"LIST METRICCURRENT WHERE name = 'GD_IO_BY_R_SM' and metricObjectName like '.*RECO.*' \" " + + +############################# +# Exadata Version Checks +############################# + +#-- Exadata Software +dcli -l root -g all_group imageinfo --image-version +dcli -l root -g all_group imageinfo --image-status +dcli -l root -g all_group imageinfo --kernel-version +dcli -l root -g cell_group imageinfo --cell-version +dcli -l root -g cell_group imageinfo --cell-rpm-version + +#-- Kernel Version +dcli -l root -g all_group 'uname -r' +dcli -l root -g all_group 'rpm -q kernel' +dcli -l root -g all_group 'rpm -q kernel-uek' + +#-- Check Firmwares +dcli -l root -g all_group '/opt/oracle.SupportTools/CheckHWnFWProfile -d ' > /tmp/CheckHWnFWProfile.txt + +for i in SystemModel BIOSVersion ILOMVersion LightsOutFirmwareVersion \ +DiskControllerModel DiskControllerFirmwareRevision DiskControllerBatteryBackupUnitVersion DiskControllerPCIeSlotWidth \ +MinimumSASExpanderFirmware SASBackplaneFirmwareVersion \ +BackplaneFirmwareVersion InfinibandHCAChipRevision InfinibandHCAFirmwareVersion InfinibandHCAHardwareRev InfinibandHCAPCIeSlotWidth \ +MinimumCPLDFirmware \ +FansAndFanCount PowersuppliesAndCount \ +PhysicalMemoryGB ProcessorInformation +do + echo "-------------- $i ---------------------" + grep -A1 $i /tmp/CheckHWnFWProfile.txt |egrep -v "^--|$i" +done |less + +# For 11.2.3.3.0 and above +for i in Server_Model BIOSVendor BIOSVersion ProcessorModel SocketCount ILOMVersion PhysicalMemoryGB \ +DiskControllerModel DiskControllerPCIeSlotWidth DiskControllerSilicon DiskControllerFirmwareRevision \ +DiskControllerPCIeSlotNumber DiskControllerBatteryBackupUnitVersion FanCount Powersupply_Info \ +InfinibandHCA InfinibandHCAImageType InfinibandHCAPCIeSlotSpeed InfinibandHCAPCIeSlotWidth InfinibandHCAChipRevision \ +InfinibandHCADeviceID InfinibandHCAFirmwareVersion InfinibandHCAPCIeSlotNumber InfinibandHCAHardwareRev InfinibandHCAPSID \ +Ether10GCount Ether10GModel +do + echo "-------------- $i ---------------------" + grep -h $i /tmp/CheckHWnFWProfile.txt +done |less + + + +#-- Check FDOM version +grep MARVELL /tmp/CheckHWnFWProfile.txt +grep /dev/ /tmp/CheckHWnFWProfile.txt + #-- Check Disks firmware + egrep 'SAS|SATA' /tmp/CheckHWnFWProfile.txt + +############################# +# Exadata Patching Checks +############################# + +#-- Check startup check failures +dcli -l root -g all_group "cat /var/log/cellos/validations.log |egrep 'FAILED|ERROR'" + + + +# Alert Log +##################### +less $ORACLE_BASE/diag/rdbms/`echo $ORACLE_SID|cut -b 1-8`/$ORACLE_SID/trace/alert_$ORACLE_SID.log +dcli -l oracle -g dbs_group 'egrep -A10 "Aug 01.*2012" $ORACLE_BASE/diag/rdbms/`echo $ORACLE_SID|cut -b 1-8`/$ORACLE_SID/trace/alert_$ORACLE_SID.log |egrep "2012|ORA-00600|trc" | grep -B1 ORA- |egrep -v "^--" ' + +# Search listener Log on Exadata +##################################### +less $ORACLE_BASE/diag/tnslsnr/`hostname -s`/listener/trace/listener.log +dcli -l oracle -g dbs_group "grep 31-JUL-2012 /u01/app/oracle/diag/tnslsnr/\`hostname -s\`/listener/trace/listener.log |egrep 'ORA-00060'" + +######################## +# Compute node details +######################## + + +DBMCLI> describe dbserver + name modifiable + bbuStatus + comment modifiable + coreCount + cpuCount + diagHistoryDays modifiable + emailFormat modifiable + emailSubscriber modifiable + fanCount + fanStatus + iaasIdleInUse modifiable + iaasMode modifiable + iaasReason modifiable + id + interconnectCount + interconnect1 modifiable + interconnect2 modifiable + interconnect3 modifiable + interconnect4 modifiable + interconnect5 modifiable + interconnect6 modifiable + interconnect7 modifiable + interconnect8 modifiable + ipaddress1 + ipaddress2 + ipaddress3 + ipaddress4 + ipaddress5 + ipaddress6 + ipaddress7 + ipaddress8 + kernelVersion + locatorLEDStatus + location modifiable + makeModel + metricCollection modifiable + metricHistoryDays modifiable + msVersion + notificationMethod modifiable + notificationPolicy modifiable + pendingCoreCount modifiable + powerCount + powerStatus + realmName modifiable + releaseImageStatus + releaseVersion + releaseTrackingBug + smtpFrom modifiable + smtpFromAddr modifiable + smtpPort modifiable + smtpPwd modifiable + smtpServer modifiable + smtpToAddr modifiable + smtpUser modifiable + smtpUseSSL modifiable + snmpEngineID modifiable + snmpSubscriber modifiable + snmpUser modifiable + status + syslogConf modifiable + temperatureReading + temperatureStatus + traceLevel modifiable + upTime + msStatus + rsStatus + + +dcli -l root -g dbs_group " dbmcli -e 'list dbserver attributes name,coreCount,cpuCount,pendingCoreCount' " + + + +######################## +# Cell Details +######################## +dcli -l root -g cell_group " cellcli -e ' LIST CELL ATTRIBUTES name,cellNumber,status,flashCacheMode,flashCacheCompress,fanStatus,powerStatus,temperatureStatus,cellsrvStatus,msStatus,rsStatus,releaseVersion,releaseTrackingBug ' " + +# FlashCache Compression +########################## + + #If disabled, then value is FALSE or NULL + dcli -l root -g cell_group "cellcli -e LIST CELL attributes name,flashCacheCompress " + dcli -l root -g cell_group 'grep flashCacheCompress $OSSCONF/cell_disk_config.xml' + + +# Physical Disk Details +######################## +cellcli -e ' DESCRIBE PHYSICALDISK ' + +dcli -l root -g cell_group " cellcli -e \"LIST PHYSICALDISK ATTRIBUTES name,status,diskType,physicalSize,errorcount,physicalInsertTime,lastFailureReason where disktype=harddisk AND status != 'normal' \" " +dcli -l root -g cell_group " cellcli -e \"LIST PHYSICALDISK ATTRIBUTES name,status,diskType,physicalSize,errorcount,physicalInsertTime,lastFailureReason where disktype=flashdisk AND status != 'normal' \" " + +dcli -l root -g cell_group " cellcli -e ' LIST PHYSICALDISK ATTRIBUTES name,status,diskType,physicalSize,errorcount,physicalInsertTime,physicalSize,errCmdTimeoutCount,errHardReadCount,errHardWriteCount,errMediaCount,errOtherCount,errSeekCount,errorCount,notPresentSince,lastFailureReason where disktype=harddisk ' " +dcli -l root -g cell_group " cellcli -e ' LIST PHYSICALDISK ATTRIBUTES name,status,diskType,physicalSize,errorcount,physicalInsertTime,lastFailureReason where disktype=flashdisk ' " + +# Should display count=0 +dcli -l root -g dbs_group /opt/MegaRAID/MegaCli/MegaCli64 -PdList -a0 | grep "Predictive Failure Count" + + +# LUN Details +##################### +cellcli -e ' DESCRIBE LUN ' + +dcli -l root -g cell_group " cellcli -e \"LIST LUN ATTRIBUTES name,status,diskType,deviceName,raidLevel,isSystemLun,lunSize,physicalDrives,lunWriteCacheMode,errorCount where disktype=harddisk AND status != 'normal' \" " +dcli -l root -g cell_group " cellcli -e \"LIST LUN ATTRIBUTES name,status,diskType,deviceName,raidLevel,isSystemLun,lunSize,physicalDrives,lunWriteCacheMode,errorCount where disktype=flashdisk AND status != 'normal' \" " + +dcli -l root -g cell_group " cellcli -e LIST LUN ATTRIBUTES name,status,diskType,deviceName,raidLevel,isSystemLun,lunSize,physicalDrives,lunWriteCacheMode,errorCount where disktype=harddisk " +dcli -l root -g cell_group " cellcli -e LIST LUN ATTRIBUTES name,status,diskType,deviceName,raidLevel,isSystemLun,lunSize,physicalDrives,lunWriteCacheMode,errorCount where disktype=flashdisk " + + + +# CELL DISK Details +#################### +cellcli -e ' DESCRIBE CELLDISK ' + +dcli -l root -g cell_group " cellcli -e \"LIST celldisk ATTRIBUTES name,status,diskType,lun,size,freespace,errorcount,creationTime,interleaving,raidlevel where status !='normal' \" " + +dcli -l root -g cell_group " cellcli -e ' LIST celldisk ATTRIBUTES name,status,diskType,lun,size,freespace,errorcount,creationTime,interleaving,raidlevel ' " + + +# GridDisk Details +################## +cellcli -e ' DESCRIBE griddisk ' + +dcli -l root -g cell_group " cellcli -e \"LIST GRIDDISK ATTRIBUTES name,status,diskType,size,offset,errorcount,creationTime,asmmodestatus,asmdeactivationoutcome,comment where status != 'active' \" " +dcli -l root -g cell_group " cellcli -e \"LIST GRIDDISK ATTRIBUTES name,status,diskType,size,offset,errorcount,creationTime,asmmodestatus,asmdeactivationoutcome,comment where asmmodestatus != 'ONLINE' \" " + +dcli -l root -g cell_group " cellcli -e ' LIST GRIDDISK ATTRIBUTES name,status,diskType,size,offset,errorcount,creationTime,asmmodestatus,asmdeactivationoutcome,comment ' " + +dcli -l root -g cell_group " cellcli -e \"LIST GRIDDISK ATTRIBUTES name,cachingPolicy where cachingPolicy = 'none' \" " + + + +# FlashDisk Details +################### + +#If disabled, then value is FALSE or NULL +dcli -l root -g cell_group "cellcli -e LIST CELL attributes name,flashCacheCompress " +dcli -l root -g cell_group 'grep flashCacheCompress $OSSCONF/cell_disk_config.xml' + +dcli -l root -g cell_group " cellcli -e ' LIST PHYSICALDISK ATTRIBUTES name,status,diskType,physicalSize,errorcount,physicalInsertTime,lastFailureReason where disktype=flashdisk ' " +dcli -l root -g cell_group " cellcli -e ' LIST lun ATTRIBUTES name,status,diskType,raidLevel,isSystemLun,lunSize,physicalDrives,lunWriteCacheMode,errorCount where disktype=flashdisk ' " +dcli -l root -g cell_group " cellcli -e ' LIST celldisk ATTRIBUTES name,status,diskType,lun,size,freespace,errorcount,creationTime,interleaving,raidlevel where disktype=flashdisk ' " +dcli -l root -g cell_group " cellcli -e ' LIST flashcache attributes name,status,size,creationTime,degradedCelldisks,effectiveCacheSize ' " +dcli -l root -g cell_group " cellcli -e ' LIST flashlog attributes name,status,size,creationTime,degradedCelldisks,effectiveSize,efficiency ' " + +# FlashCache Contents +####################### +dcli -l root -g cell_group " cellcli -e ' LIST FLASHCACHECONTENT ATTRIBUTES dbUniqueName,dbID,objectNumber,tableSpaceNumber,cachedSize,cachedKeepSize,hitCount,missCount,hoursToExpiration ' " + +# Reset FlashCache +alter cell events = "immediate cellsrv.cellsrv_flashcache(Reset,0,0,0)" + + +# For Exadata Server Software 11.2.3.2.0 onwards +################################################ +#-- Flush FlashCache +CELLCLI> alter flashcache all fush + +#-- Convert FlashCache Mode +CELLCLI> alter flashcache all fush +CELLCLI> drop flashcache +CELLCLI> list flashcache +CELLCLI> alter cell flashCacheMode=WriteThrough +or +CELLCLI> alter cell flashCacheMode=WriteBack +CELLCLI> create flashcache all +CELLCLI> list flashcache + + + + +# How to find which cell node is a SQL or session is running on and what it is doing? +####################################################################################### +cellcli -e ' LIST ACTIVEREQUEST where dbName = mydb and instanceNumber = 1 ' +cellcli -e ' LIST ACTIVEREQUEST where sessionID=1271 and sessionSerNumber=31026 detail ' + + + + +########################## +# Serial Numbers +########################## +#-- Exadata Rack serial number +/usr/bin/ipmitool sunoem cli "show /SP system_identifier" +#-- Exadata Compute/Cell node - serial number +/usr/bin/ipmitool sunoem cli "show /SYS product_serial_number" +#-- Rack level and Individual Serial Numbers +/opt/oracle.SupportTools/CheckHwnFWProfile -S + + +################################################################# +# IPMI Tool (ILOM) Commands +################################################################# + +############################### +#-- ILOM (SP - Service Processor) Commands +############################### +/usr/bin/ipmitool sunoem cli "reset -script /SP" + +#-- Restart ILOM +cellcli -e ' alter cell restart bmc ' +or +/usr/bin/ipmitool sunoem cli "reset -script /SP" + +#-- Force restarting ILOM +/usr/bin/ipmitool bmc reset cold + +#-- If still unable to restart ILOM, try SSH to ILOM and issue follwoing. +reset -script /SP + +############################### +# ILOM Server Commands +############################### +/usr/bin/ipmitool sunoem cli "reset -script /SYS" +/usr/bin/ipmitool sunoem cli "stop -script /SYS" +/usr/bin/ipmitool sunoem cli "start -script /SYS" +#-- Server Power (chassis power Commands: status, on, off, cycle, reset, diag, soft) +/usr/bin/ipmitool power status +/usr/bin/ipmitool power on +/usr/bin/ipmitool power soft +/usr/bin/ipmitool power off +/usr/bin/ipmitool power cycle +/usr/bin/ipmitool power reset +/usr/bin/ipmitool power diag + +/usr/bin/ipmitool chassis power off + + +############################### +# ILOM Console +############################### +#-- Start Console +start -script /SP/Console + +#-- Stop Console +Prese ESC and ( + +#-- Show ILOM Version & Firmware +/usr/bin/ipmitool sunoem cli "version" + + +#-- ILOM Cli +/usr/bin/ipmitool sunoem cli + +#-- Show System properties +show -d properties -level 1 /SYS +show -d properties -level 1 /SP +show -d properties -level 2 /SP +show -d properties -o table -level all /SYS + +#-- Show Targets +show -d targets /SP +show -d targets /SYS + + +#-- Show system faults + +# +/usr/bin/ipmitool sunoem cli " show -level all /SP/faultmgmt" + +# Show as table +/usr/bin/ipmitool sunoem cli "show -o table -level all /SP/faultmgmt" + +/usr/bin/ipmitool sunoem cli "show -o table -level all /SP/faultmgmt" + + +/usr/bin/ipmitool sunoem cli "start -script /SP/faultmgmt/shell +fmadm faulty -a +" + + +/usr/bin/ipmitool sunoem cli "show -d properties -o table -level all /SYS/FAN_FAULT" +/usr/bin/ipmitool sunoem cli "show -d properties -o table -level all /SYS/PS_FAULT" +/usr/bin/ipmitool sunoem cli "show -d properties -o table -level all /SYS/TEMP_FAULT" +/usr/bin/ipmitool sunoem cli "show -d properties -o table -level all /SYS Target Type==(Indicator) Target==(*FAULT)" + +#-- Show event log +/usr/bin/ipmitool sel list +/usr/bin/ipmitool sunoem cli "show /SP/logs/event/list Class<>(Audit)" +/usr/bin/ipmitool sunoem cli "show /SP/logs/event/list Class==(ASR)" +/usr/bin/ipmitool sunoem cli "show /SP/logs/event/list Severity==(critical)" +/usr/bin/ipmitool sunoem cli "show /SP/logs/event/list Severity==(critical) -level all -output table" +/usr/bin/ipmitool sunoem cli "show /SP/logs/event/list Class==(value) Type==(value) Severity==(value)" +/usr/bin/ipmitool sunoem cli "show /SP/session" + +/usr/bin/ipmitool sunoem cli "show /SP/logs/event/list Class==Sensor " +/usr/bin/ipmitool sunoem cli "show /SP/logs/event/list Class==Fault " +/usr/bin/ipmitool sunoem cli "show /SP/logs/event/list Class==Power " +/usr/bin/ipmitool sunoem cli "show /SP/logs/event/list Class==IPMI " + + +#-- Show Console history +/usr/bin/ipmitool sunoem cli "show /SP/console/history" + +#-- Clear event log (when it gets full) +/usr/bin/ipmitool sunoem cli +--> set /SP/logs/event clear=true + +#Get LED Light Status +dcli -l root -g all_group '/usr/bin/ipmitool sunoem led get all |egrep -v "OFF|na|OK.*ON" ' +dcli -l root -g all_group '/usr/bin/ipmitool sunoem led get SERVICE' +dcli -l root -g all_group '/usr/bin/ipmitool sunoem led get /SP/SERVICE' + + + +########################## +# Boot Order +########################## + +#-- Get current boot order +/usr/bin/biosconfig -get_boot_order + +#-- Change next boot device +#-- (Boot Order file can be obtained by -get_boot_order, and then change FIRST tag under BOOt_ORDER_OVERRISDE +biosconfig -set_boot_override + + +################################## +# Disk Controller Commmands +################################## +#-- Help +/opt/MegaRAID/MegaCli/MegaCli64 -help + +#-- Get all the information +/opt/MegaRAID/MegaCli/MegaCli64 -AdpAllInfo -a0 + + +#-- Get disk controller log and event +/opt/MegaRAID/MegaCli/MegaCli64 -AdpEventLog -GetEvents -info -aALL +/opt/MegaRAID/MegaCli/MegaCli64 -AdpEventLog -GetEvents -info -aALL +/opt/MegaRAID/MegaCli/MegaCli64 -AdpEventLog -GetEvents -info -aALL +/opt/MegaRAID/MegaCli/MegaCli64 -AdpEventLog -GetEvents -info -aALL +/opt/MegaRAID/MegaCli/MegaCli64 -AdpEventLog -GetEvents -info -aALL +/opt/MegaRAID/MegaCli/MegaCli64 -AdpEventLog -GetLatest 100 -aALL + + +#-- Check Disk Controller Cache Policy (Should be Disabled) +dcli -l root -g all_group "/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -a0 |grep 'Disk Cache Policy'" + +#-- Check cache policy at Individual Disks level (Should be WriteBack) +dcli -l root -g all_group "/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -a0 |grep 'Cache Policy:'" +dcli -l root -g all_group "/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -a0 |grep 'Cache Policy:' |grep Through" + +#-- Check Battery Type +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -a0 | grep BatteryType' + +#-- Check Battery Charging status +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -a0 | grep "Charging Status" ' +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -a0 | grep "Discharging" ' + + +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -a0 | while read line ; do echo ' + + +Upgrade Disk Firmware +####################### +/opt/oracle.SupportTools/CheckHWnFWProfile -action updatefw -component HardDisk -attribute all_fw -slot 8:1 -caller MS +/opt/MegaRAID/MegaCli/MegaCli64 -PdFwDownload -PhysDrv[8:1] -f /var/log/exadatatmp/firmware/ActualFirmwareFiles/H7240AS60.A2D2.fw -a0 + + + +################################ +#-- Check Battery Learn Cycle +############################### +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -a0 | grep "Auto-Learn Mode" ' +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuProperties -a0'|grep 'Auto Learn Period' +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -a0 | grep "Learn Cycle Active" ' +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -a0 | grep "Learn Cycle Requested" ' +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -a0 | grep "Learn Cycle Status" ' + + +#-- Initiate Battery Learn Cycle +/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -BbuLearn -a0 + +#-- Check auto learn mode, Should be enabled on compute node and disabled on cell node. +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuProperties -a0'|grep 'Auto-Learn Mode' +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuProperties -a0'|grep 'Auto Learn Period' + + + +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuProperties -a0' + + +#-- Check current battery temperature (Should be < 60 C) +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -a0 | grep Temperature:' + + +#-- Check current Battery Charge Capacity (Should be > 800 mAh) +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuCapacityInfo -a0 | grep "Full Charge" ' + +#-- Check current Battery erors (Should be < 10%) +dcli -l root -g all_group '/opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -a0 | grep "Max Error"' + + +#-- Display all information on Disk Controller +/opt/MegaRAID/MegaCli/MegaCli64 -AdpAllInfo -aALL + +#-- Display Summary +/opt/MegaRAID/MegaCli/MegaCli64 -ShowSummary -aALL + + + + +########################## +# Recreate the Cell +########################## + +#-- Drop disks from ASM diskgroup +sqlplus / as sysasm +alter diskgroup DATA drop disks in failgroup LABCELL03 force; +alter diskgroup RECO drop disks in failgroup LABCELL03 force; +alter diskgroup DBFS_DG drop disks in failgroup LABCELL03 force; + +#-- Create celldisk and griddisks +cellcli -e ' create celldisk all ' +cellcli -e ' CREATE GRIDDISK ALL HARDDISK PREFIX=DATA , size=212G ' +cellcli -e ' CREATE GRIDDISK ALL HARDDISK PREFIX=RECO , size=29.125G ' +cellcli -e ' CREATE GRIDDISK ALL HARDDISK PREFIX=DBFS_DG , size=29.125G ' + +cellcli -e ' CREATE GRIDDISK ALL FlashDisk PREFIX=FLASH_DM01 , size=212G ' +cellcli -e ' CREATE GRIDDISK ALL HARDDISK PREFIX=RECO , size=29.125G ' + + + +#-- Add disk to ASM diskgroup +sqlplus / as sysasm +alter diskgroup DATA add failgroup LABCELL03 disk 'o/192.168.10.5/DATA*' rebalance power 11 nowait; +alter diskgroup RECO add failgroup LABCELL03 disk 'o/192.168.10.5/RECO*' rebalance power 11 nowait; +alter diskgroup DBFS_DG add failgroup LABCELL03 disk 'o/192.168.10.5/DBFS_DG*' rebalance power 11 nowait; + + +########################## +# Exadata Cell Metrics +########################## + +# Metric definition + cellcli -e describe METRICDEFINITION + cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where name like 'FC.*' " + cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where name like 'DB.*' " + cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where description like '.*flash.*' " + cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where description like '.*read.*' " + cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where description like '.*write.*per.*sec.*' " + + + + +Cluster wide metrics + +#--------------------------- +# Smart IO Metrics +#--------------------------- +cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where name like 'SIO.*' " +dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'SIO_IO_EL_OF' " #The cumulative number of megabytes eligible for offload by smart I/O. +dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'SIO_IO_OF_RE' " #The cumulative number of interconnect megabytes returned by smart I/O. +dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'SIO_IO_EL_OF_SEC' " +dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'SIO_IO_OF_RE_SEC' " +dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'SIO_IO_RD_FC_SEC' " #Number of megabytes per second read from flash cache by smart IO +dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'SIO_IO_RD_HD_SEC' " #Number of megabytes per second read from hard disk by smart IO +dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'SIO_IO_SI_SV_SEC' " #Number of megabytes per second saved by storage index + +#--------------------------- +# FlashCache Metrics +#--------------------------- + cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where name like '.*FC.*' " + cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where description like '.*flash.*' " + cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where name like '.*FC.*' and description like '.*read.*' " + cellcli -e "list METRICDEFINITION attributes name,metricType,objectType,persistencePolicy,unit,description where name like '.*FC.*' and description like '.*writ.*' " + + FC_BY_ALLOCATED Instantaneous FLASHCACHE MB "Number of megabytes allocated in flash cache" + FC_BY_DIRTY Instantaneous FLASHCACHE MB "Number of unflushed megabytes in FlashCache" + FC_BY_STALE_DIRTY Instantaneous FLASHCACHE MB "Number of unflushed megabytes in FlashCache which cannot be flushed because cached disks are not accessible" + FC_BY_USED Instantaneous FLASHCACHE MB "Number of megabytes used on FlashCache" + FC_IO_BY_R Cumulative FLASHCACHE MB "Number of megabytes read from FlashCache" + FC_IO_BY_R_SEC Rate FLASHCACHE MB/sec "Number of megabytes read per second from FlashCache" + FC_IO_RQ_R Cumulative FLASHCACHE "IO requests" "Number of requests read from FlashCache" + FC_IO_RQ_R_SEC Rate FLASHCACHE IO/sec "Number of requests read per second from FlashCache" + FC_IO_BY_W Cumulative FLASHCACHE MB "Number of megabytes written to FlashCache" + FC_IO_BY_W_SEC Rate FLASHCACHE MB/sec "Number of megabytes per second written to FlashCache" + + FC_IO_BY_W_POPULATE_SEC Rate FLASHCACHE MB/sec "Number of megabytes per second that are population writes into flash cache due to read miss" + + # FlashCache Bytes Used Across the cluster + dcli -l root -g cell_group "cellcli -e list metriccurrent where name LIKE 'FC_BY_.*' " |sort -k2,2 + dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'FC_BY_ALLOCATED' " + dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'FC_BY_DIRTY' " + dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'FC_BY_STALE_DIRTY' " + dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'FC_BY_USED' " + dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'FC_IO_BY_R_SEC' " + dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'FC_IO_BY_W_SEC' " + dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'FC_IO_RQ_R_SEC' " + dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'FC_IO_RQ_W_SEC' " + dcli -l root -g cell_group "cellcli -e list metriccurrent where name = 'FC_IO_BY_W_SEC' " + +#--------------------------- +# Database IO per second +#--------------------------- + + # Current Metric + cellcli -e "describe metriccurrent" + + cellcli -e list metriccurrent where name = 'DB_IO_BY_SEC' + cellcli -e list metriccurrent where name = 'DB_FC_IO_BY_SEC' + cellcli -e list metriccurrent where name = 'FC_BY_USED' + + ###################### + #-- Metric History + ###################### + cellcli -e "describe metrichistory" + + #------------------- + # Last 10 minutes + #------------------- + cellcli -e "list metrichistory where name = 'DB_IO_BY_SEC' and collectionTime > '`date --date=\" 10 min ago \" +%Y-%m-%dT%H:%M:%S%z`' " + + #---------------------------- + # Last 1 hour for a database + #---------------------------- + cellcli -e "list metrichistory attributes collectionTime,metricObjectName,name,metricValue,metricValueAvg,metricValueMax,metricValueMin where name = 'DB_IO_BY_SEC' \ + and collectionTime > '`date --date=\" 1 hour ago \" +%Y-%m-%dT%H:%M:%S%z`' " + + and metricObjectName = 'STBY52_PR01HSTI' + + + + + + + cellcli -e "list metrichistory attributes collectionTime,name,metricValue,metricValueAvg,metricValueMax,metricValueMin \ + where name = 'FC_BY_USED' and collectionTime > '`date --date=\" 24 hours ago \" +%Y-%m-%dT%H:%M:%S%z`' " + + #---------------------------- + # Specific Time Window + #---------------------------- + cellcli -e "list metrichistory where name = 'DB_IO_BY_SEC' and metricObjectName = 'STBY52_PR01PIMI' and collectionTime > '2015-04-16T14:00:00-08:00' and collectionTime < '2015-04-16T18:00:00-08:00' " + + + + ########################################## + # Storage Server Metric By database + ########################################### + + DB_FC_IO_BY_SEC The number of megabytes of I/O per second for this database to flash cache. + DB_FC_IO_RQ The number of I/O requests issued by a database to flash cache. + DB_FC_IO_RQ_SEC The number of I/O requests issued by a database to flash cache per second. + + DB_FD_IO_BY_SEC The number of megabytes of I/O per second for this database to flash disks. + DB_FD_IO_LOAD The average I/O load from this database for flash disks. + DB_FD_IO_RQ_LG The number of large I/O requests issued by a database to flash disks. + DB_FD_IO_RQ_LG_SEC The number of large I/O requests issued by a database to flash disks per second. + DB_FD_IO_RQ_SM The number of small I/O requests issued by a database to flash disks. + DB_FD_IO_RQ_SM_SEC The number of small I/O requests issued by a database to flash disks per second. + DB_FD_IO_TM The cumulative latency of reading blocks by a database from flash disks. + DB_FD_IO_TM_RQ The rate which is the average latency of reading blocks per request by a database from flash disks. + DB_FD_IO_UTIL The percentage of flash resources utilized from this database. + + DB_FL_IO_BY The number of megabytes written to Oracle Exadata Smart Flash Log. + DB_FL_IO_BY_SEC The number of megabytes written per second to Oracle Exadata Smart Flash Log. + DB_FL_IO_RQ The number of I/O requests issued to Oracle Exadata Smart Flash Log. + DB_FL_IO_RQ_SEC The number of I/O requests per second issued to Oracle Exadata Smart Flash Log. + FL_IO_DB_BY_W The number of megabytes written to hard disk by Oracle Exadata Smart Flash Log. + FL_IO_DB_BY_W_SEC The number of megabytes written per second were written to hard disk by Oracle Exadata Smart Flash Log. + + DB_IO_BY_SEC The number of megabytes of I/O per second for this database to hard disks. + DB_IO_LOAD The average I/O load from this database for hard disks. + DB_IO_RQ_LG The cumulative number of large I/O requests issued by the database. A large value indicates a heavy large I/O workload from this database. + DB_IO_RQ_LG_SEC The rate of large I/O requests issued by a consumer group per second over the past minute. A large value indicates a heavy large I/O workload from this database in the past minute. + DB_IO_RQ_SM The cumulative number of small I/O requests issued by the database. A large value indicates a heavy small I/O workload from this database. + DB_IO_RQ_SM_SEC The rate of small I/O requests issued by a consumer group per second over the past minute. A large value indicates a heavy small I/O workload issued by this database in the past minute. + DB_IO_TM_LG The cumulative latency of reading large blocks by a database from hard disks. + DB_IO_TM_LG_RQ The rate which is the average latency of reading large blocks per request by a database from hard disks. + DB_IO_TM_SM The cumulative latency of reading small blocks by a database from hard disks. + DB_IO_TM_SM_RQ The rate which is the average latency of reading small blocks per request by a database from hard disks. + DB_IO_UTIL_LG The percentage of disk resources utilized by large requests from this database. + DB_IO_UTIL_SM The percentage of disk resources utilized by small requests from this database. + DB_IO_WT_LG The cumulative number of milliseconds that large I/O requests issued by the database have waited to be scheduled by IORM. A large value indicates that the I/O workload from this database is exceeding the allocation specified for it in the interdatabase plan. + DB_IO_WT_LG_RQ The average number of milliseconds that large I/O requests issued by the database have waited to be scheduled by IORM in the past minute. A large value indicates that the I/O workload from this database is exceeding the allocation specified for it in the interdatabase plan. + DB_IO_WT_SM The cumulative number of milliseconds that small I/O requests issued by the database have waited to be scheduled by IORM. A large value indicates that the I/O workload from this database is exceeding the allocation specified for it in the interdatabase plan. + DB_IO_WT_SM_RQ The average number of milliseconds that small I/O requests issued by the database have waited to be scheduled by IORM in the past minute. A large value indicates that the I/O workload from this database is exceeding the allocation specified for it in the interdatabase plan. + + + ############################################### + # Tabular IO per database (MB/sec) on a cell + ################################################ + #fromtime="`date --date=\" 30 min ago \" +%Y-%m-%dT%H:%M:%S%z`" + #totime="`date +%Y-%m-%dT%H:%M:%S%z`" + fromtime='2016-02-16T07:30:00-08:00' + totime='2016-02-16T10:30:00-08:00' + # DB_IO_BY_SEC + # DB_IO_RQ_SM_SEC + # DB_IO_RQ_LG_SEC + # DB_IO_UTIL_SM + # DB_IO_UTIL_LG + # DB_FD_IO_RQ_SM_SEC + # DB_FD_IO_RQ_LG_SEC + + declare -a DB=(`cellcli -e "list metriccurrent attributes metricObjectName where name = 'DB_IO_LOAD' " |awk '{print $1} ' |xargs echo`) + for ((i=-1; i<${#DB[@]}; i++)) + do + if [ "$i" == -1 ]; then + printf "\n"; + printf "%25s" "collectionTime" + else + printf "%$(expr ${#DB[$i]} + 1)s" "${DB[$i]}" + fi + if [ "$i" == `expr ${#DB[@]} - 1` ]; then printf " Total \n"; fi; + done; \ + i=0; \ + total=0; \ + cellcli -e "list metrichistory attributes collectionTime,metricObjectName,metricValue where name = 'DB_IO_LOAD' + and collectionTime > '$fromtime' and collectionTime < '$totime' and metricObjectName like '.*.*' " | + while read LINE + do + collectionTime=`echo $LINE |awk '{print $1}'` + metricObjectName=`echo $LINE |awk '{print $2}'` + metricValue=`echo $LINE |awk '{print $3}'| tr -d ','` # Remove commas + #if [ "$metricObjectName" == "${DB[$(expr ${#DB[@]} - 1 )]}" ] + if [ "$i" -eq 0 ] + then + printf "%25s " "$collectionTime" + fi; + #Round off decimals + printf "%$(expr ${#DB[$i]} + 1)s" $(printf '%.*f' 0 "$metricValue") + total=$(awk "BEGIN {print $total + $metricValue; exit}") + #printf "%6s" "$metricValue" + i=$(expr $i + 1) + if [ $i -eq ${#DB[@]} ] ; then + i=0; + printf "%10s" $(printf '%.*f' 0 "$total"); + printf "\n"; + total=0; + fi + done; printf "\n"; + + + +cellcli -e "list metrichistory attributes collectionTime,metricObjectName,name,metricValue where collectionTime > '2015-05-21T05:36:46-0700' and collectionTime < '2015-05-21T05:40:46-0700' and name like '.*DB.*' and metricObjectName = 'STBY02_PR01MTGI' " |sort -k1,2,3 + + + + ########################################## + # Tabular database IO on a cell + # (Multiple metrics for a database) + ########################################### + + # cellcli -e "list metriccurrent attributes metricObjectName where name = 'DB_IO_BY_SEC' " |awk '{print $1} ' + + #fromtime="`date --date=\" 30 min ago \" +%Y-%m-%dT%H:%M:%S%z`" + #totime="`date --date=\" 1 min ago \" +%Y-%m-%dT%H:%M:%S%z`" + fromtime='2015-11-08T00:00:00-08:00' + totime='2015-11-08T03:00:00-08:00' + DBNAME=ST01PIMI + + #Order the metriclist in Alphabetical order + declare -a METRICLIST="DB_FC_IO_BY_SEC DB_FC_IO_RQ_SEC DB_FD_IO_UTIL DB_IO_BY_SEC DB_IO_LOAD DB_IO_RQ_LG_SEC DB_IO_RQ_SM_SEC DB_IO_WT_LG_RQ DB_IO_WT_SM_RQ " ; \ + declare -a METRICLIST=(${METRICLIST}) ; \ + echo "" ; \ + echo "#############################################" ; \ + echo "#### Database - $DBNAME " ; \ + echo "#############################################" ; \ + echo "" ; \ + PRINT_FORMAT="%25s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s %12s" ; \ + printf "${PRINT_FORMAT}" "--------------" "------" "-------" "---------" "------" "-------" "--------" "--------" "--------" "--------" ; printf "\n" ; \ + printf "${PRINT_FORMAT}" "collectionTime" "Flash" "Flash" "FlashDisk" "Total" "" "" "" "Large IO" "Small IO" ; printf "\n" ; \ + printf "${PRINT_FORMAT}" " " "Cache" "Cache" "Load" "IO" "IO Load" "Large IO" "Small IO" "AvgWait" "AvgWait" ; printf "\n" ; \ + printf "${PRINT_FORMAT}" " " "MB/Sec" "Req/Sec" "(%)" "MB/Sec" "(%)" "Req/Sec" "Req/Sec" "(ms)" "(ms)" ; printf "\n" ; \ + printf "${PRINT_FORMAT}" "--------------" "------" "-------" "---------" "------" "-------" "--------" "--------" "--------" "--------" ; printf "\n" ; \ + printf "\n" ; \ + i=0; \ + cellcli -e "list metrichistory attributes collectionTime,metricObjectName,name,metricValue where + collectionTime > '$fromtime' and collectionTime < '$totime' + and metricObjectName like '$DBNAME' + and name like '$(echo ${METRICLIST[*]} | tr " " "|" )' + " | sort -k1,3 | while read LINE + do + collectionTime=`echo $LINE |awk '{print $1}'` + metricObjectName=`echo $LINE |awk '{print $2}'` + metricName=`echo $LINE |awk '{print $3}'` + if [ "$i" -eq 0 ] + then + printf "%25s" "$collectionTime" + fi + while [ $i -lt ${#METRICLIST[@]} ] + do + if [ "${METRICLIST[$i]}" == "$metricName" ] + then + metricValue=`echo $LINE |awk '{print $4}'` + break + else + metricValue="" + printf "%13s" "$metricValue" + i=$(expr $i + 1) + continue + fi + done; + # Remove commas + metricValue=$(echo $metricValue | tr -d ',' ) + # Round off decimals + if [ "$metricName" != "DB_IO_LOAD" ] && [[ "$metricName" != DB_IO_WT* ]] + then + metricValue=$(printf '%.*f' 0 "$metricValue"|awk '{print $1}') + fi + printf "%13s" "$metricValue" + #printf "%30s" "$metricName $metricValue" + i=$(expr $i + 1) + if [ $i -ge ${#METRICLIST[@]} ] ; then + i=0; + printf "\n" + fi + done; printf "\n" ; + + +########################## +# colleclt Commands +########################## +collectl -scdmnfx -o T -i 2 + + +########################## +# Colmux Commands +########################## +colmux -command -scdmnf -reverse -column 0 -addr + +#-- For Exadata +colmux -command -scdmnf -reverse -column 0 -port 64000 -addr all_group + +#--------------------------------------------- +# Collectl top or Colmux top +# Show cluster wide top (order by CPU Pct) +#--------------------------------------------- +colmux -command "-sZ -i:2 " -column 12 -lines 50 -port 64123 -addr dbs_group +colmux -command "-sZ -i:2 --procfilt=fora_smon " -column 12 -lines 50 -port 64123 -addr dbs_group +colmux -command "-sZ -i:2 --procfilt=fbt01pimi " -column 12 -lines 50 -port 64123 -addr dbs_group_bt01pimi + +#------------------------- +# Hard Disk Statistics +#------------------------- +sudo colmux -command '-sD ' -lines 100 -reverse -column 1 -port 64002 -addr dm02cel01 + + + +# Show individual disk details +# Exadata spinning disks - sd[a-l] +# Exadata Flashdisks - sd[m-z] & sda[a-c] +colmux -command '-sD --dskfilt sd[a-b]$' -reverse -column 0 -port 64123 -addr cell_group + + + +########################## +# Colplot commands +########################## +colplot -dir /var/log/collectl/consolidated -contains dm01db01 -date "20120909" -time "00:00-24:00" -plots cpu,mem,disk,net,nfssum,ib,paging,swap,inode,proc,tcp -filetype pdf -email emailaddress -subject "DM01 Plots" +colplot -dir /var/log/collectl/consolidated -contains dm01db01 -date "20120909-20120910" -time "00:00-24:00" -plots cpu,mem,disk,net,nfssum,ib,paging,swap,inode,proc,tcp -filetype pdf -email vishal@vishalgupta.com -subject "DM01 Plots" + +colplot -dir /export/ora_stage/colplot -contains dm51cel01 -date "20130303" -time "00:00-24:00" -plots disk -filetype pdf -email vishal@vishalgupta.com -subject "DM51 Plots" + +colplot -dir /usr/share/collectl/plotfiles -plots cpu -filetype png -email vishal@vishalgupta.com -email "/export/ora_stage/colplot_graphs/dm02db01.png" + +colplot -dir /var/log/collectl -contains dm02db01 -date "20130325-20130325" -time "18:19-19:19" -plots cpu -width 0.7 -height 0.3 -filetype png -filedir "/export/ora_stage/colplot_graphs/hourly" + + + for i in {1..9}; do mkdir dm01db0$i; done + for i in {0..6}; do mkdir dm01db1$i; done + + for i in {1..9}; do mkdir dm01db0$i; done + for i in {0..6}; do mkdir dm01db1$i; done + + + for i in {1..9}; do mkdir dm01cel0$i; done + for i in {0..9}; do mkdir dm01cel1$i; done + for i in {0..8}; do mkdir dm01cel2$i; done + + + +########################## +# Install Collectl +########################## + +#-- ColPlot require the http to installed on the server. +#-- Follwoign RPMs are needed for colplot to work + - httpd + - mailcap (For emails) + - sharutils (For /usr/bin/uuencode for emails) + - gnuplot + - ghostscript (For PDFs) + - cups-libs + - cairo + - libtiff + - urw-fonts + - chkfontpath + - xorg-x11-font-utils + - ghostscript-fonts (For PDFs) + +dcli -l root -g ~/all_group -f /export/ora_stage/vishal/collectl/collectl-3.6.1-4.noarch.rpm -d /var/tmp/ +dcli -l root -g ~/all_group -f /export/ora_stage/vishal/collectl/collectl-utils-3.1.0-1.noarch.rpm -d /var/tmp/ +dcli -l root -g ~/all_group rpm -Uvh /var/tmp/collectl-3.6.1-4.noarch.rpm /var/tmp/collectl-utils-3.1.0-1.noarch.rpm +dcli -l root -g ~/all_group service collectl start +dcli -l root -g ~/all_group service collectl status + +dcli -l root -g ~/dbs_group mkdir /var/www/html/colplot +dcli -l root -g ~/dbs_group ln -s /usr/share/doc/collectl-utils-3.2.1/FAQ-colplot.html /var/www/html/colplot/FAQ-colplot.html +dcli -l root -g ~/dbs_group ln -s /usr/share/doc/collectl-utils-3.2.1/FAQ-colgui.html /var/www/html/colplot/FAQ-colgui.html +dcli -l root -g ~/dbs_group ln -s /usr/share/doc/collectl-utils-3.2.1/colplot-help.html /var/www/html/colplot/colplot-help.html + +########################## +# Setup Colplot +########################## +#-- Add "-P -oz" to following line in /etc/collectl.conf +DaemonCommands = -f /var/log/collectl -r00:00,7 -m -F60 -s+YZ -P -oz + +dcli -l root -g all_group grep ^DaemonCommands /etc/collectl.conf +dcli -l root -g all_group -f /etc/collectl.conf -d /etc +dcli -l root -g all_group grep ^DaemonCommands /etc/collectl.conf + +#-- Restart collectl +dcli -l root -g all_group service collectl status +dcli -l root -g all_group service collectl stop +dcli -l root -g all_group service collectl start +dcli -l root -g all_group service collectl status + +dcli -l root -g all_group 'ls /var/log/collectl/*tab*' + + +#-- Remove older file stored in compressed format. +dcli -l root -g all_group 'rm /var/log/collectl/*raw*' +dcli -l root -g all_group 'rm /var/log/collectl/*log*' + +#-- Transfer existing files +for i in `cat all_group` +do + scp -p $i:/var/log/collectl/*tab /export/ora_stage/colplot/ + scp -p $i:/var/log/collectl/*prc /export/ora_stage/colplot/ + scp -p $i:/var/log/collectl/*slb /export/ora_stage/colplot/ +done + +#-- Setup collectl consolidation +# Added by Vishal Gupta for Ron Reimer +# It consolidates today's collectl statistics files from all nodes to single node +# so that graphs could be generated in a single browser +* * * * * /export/u02/dba/monitoring/scripts/collectl_consolidation.sh > /tmp/collectl_consolidation.log 2>&1 +5 0 * * * /export/u02/dba/monitoring/scripts/collectl_consolidation_daily.sh > /tmp/collectl_consolidation_daily.log 2>&1 + +#-- Check Colplot default directory +dcli -l root -g dbs_group ' grep PlotDir /etc/colplot.conf' + + +########################################### +# Collectl Changes/Customizatons +########################################### + +######### collectl ########### + +- /etc/collectl.conf + - Gather configuration to store data in plottable format + + # START - Changed by Vishal + #DaemonCommands = -f /var/log/collectl -r00:00,7 -m -F60 -sYZ + DaemonCommands = -f /var/log/collectl -r00:00,7 -m -F60 -P -oz -sbcdfijmnstxDN + # END - Changed by Vishal + +######### colplot ########### + +- /usr/bin/colplot + - Change colplot home page cgi script to stop it from trying to find earlier and latest file. + + my $pparams= {fdate=>20010101, tdate=>29991231, contains=>'', unique=>$uniqueFlag }; + #Changed by Vishal + #findFiles(3, $mycfg, $pparams, "$dir$sep*", undef) || + # error("No plottable files match your selection criteria. Are your dir and/or file protections right?"); + + - Default the output radio button to last 30 mintues. + + # START - Changed by Vishal + #print "\n"; + #print "OR\n"; + #print "Last: Minutes\n"; + #print "\n"; + print "\n"; + print "OR\n"; + print "Last: Minutes\n"; + print "\n"; + # END - Changed by Vishal + + - Change Display to PlotSys (Plot-System). + + #Start of Changes by Vishal + + + #End Changes by Vishal + + dcli -l root -g ~/all_group -d /usr/bin -f /usr/bin/colplot + + +- /etc/colplot.conf + - Change default PlotDir + PlotDir = /export/ora_stage/colplot + +- /usr/share/collectl/colplotlib.defs + + - Define DiskRead and DiskWrite plots + + diskread { title=DiskReadMB yname=[DSK]ReadKBTot } + diskwrite { title=DiskWriteMB yname=[DSK]WriteKBTot } + diskread { cat=disk type=s desc=Disk Read (MB) } + diskwrite { cat=disk type=s desc=Disk Write (MB) } + + dcli -l root -g ~/all_group -d /usr/share/collectl/ -f /usr/share/collectl/colplotlib.defs + + +######### colmux ########### +- Changes in /usr/bin/colmux + + - Add "-o ServerAliveInterval=3600". This helps to remove the cell servers dropping off from colmux output. + + # START - Changed by Vishal + #my $Ssh='/usr/bin/ssh -o StrictHostKeyChecking=no -o BatchMode=yes'; + my $Ssh='/usr/bin/ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ServerAliveInterval=60'; + # END - Changed by Vishal + + + %s/ssh \-n/ssh \-n \-o ServerAliveInterval=3600/g + grep ssh /usr/bin/colmux + dcli -l root -g ~/all_group -d /usr/bin/ -f /usr/bin/colmux + grep ssh /usr/bin/colmux + ps -ef|grep collectl + + + - Change default age from 2 to 10 + + # START - Changed by Vishal + #my $age=2; + my $age=10; + # END - Changed by Vishal + + + - Change the interface to use for communication. + + # Modified by Vishal + #$myaddr=`$Ifconfig $interface | grep addr:`; + $myaddr=`$Ifconfig eth0| grep addr:`; + + + dcli -l root -g ~/all_group -d /usr/bin -f /usr/bin/colmux + + +########################## +# Disable Collectl +########################## +dcli -l root -g ~/all_group service collectl stop +dcli -l root -g ~/all_group chkconfig collectl off +dcli -l root -g ~/all_group chkconfig --list collectl + +########################## +# Enable Collectl +########################## +dcli -l root -g ~/all_group service collectl start +dcli -l root -g ~/all_group chkconfig collectl on +dcli -l root -g ~/all_group chkconfig --list collectl + +########################## +# De-Install Collectl +########################## +dcli -l root -g ~/all_group service collectl stop +dcli -l root -g ~/all_group rpm -e collectl collectl-utils + +##################################### +# Install collectl on all nodes +###################################### +dcli -l root -g all_group cp -p /etc/collectl.conf /tmp/ + +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-3.6.5-2.noarch.rpm -d /var/tmp/ +dcli -l root -g all_group rpm -e collectl +dcli -l root -g all_group rpm -Uvh /var/tmp/collectl-3.6.5-2.noarch.rpm +dcli -l root -g all_group rm /var/tmp/collectl-3.6.5-2.noarch.rpm +dcli -l root -g all_group cp -p /tmp/collectl.conf /etc/ +dcli -l root -g all_group service collectl start +dcli -l root -g all_group service collectl status +dcli -l root -g all_group chkconfig collectl on +dcli -l root -g all_group chkconfig --list collectl +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave + + +############################################# +# Install collectl-utils on all nodes +############################################ +dcli -l root -g dbs_group cp -p /etc/colplot.conf /tmp/ +dcli -l root -g all_group '/usr/bin/collectl -v |head -1' +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-3.7.4.src.tar.gz -d /var/tmp/ +dcli -l root -g all_group "cd /var/tmp/ ; gunzip -c collectl-3.7.4.src.tar.gz |tar xvf - > /dev/null" +dcli -l root -g all_group service collectl status +dcli -l root -g all_group service collectl stop +dcli -l root -g all_group chkconfig collectl off +dcli -l root -g all_group chkconfig --list collectl +dcli -l root -g all_group rpm -e collectl +dcli -l root -g all_group rpm -q collectl +dcli -l root -g all_group "cd /var/tmp/collectl-3.7.4; sh INSTALL" +dcli -l root -g all_group '/usr/bin/collectl -v |head -1' +dcli -l root -g all_group -f /tmp/collectl.conf -d /tmp/ +dcli -l root -g all_group cp -p /tmp/collectl.conf /etc/ +dcli -l root -g all_group service collectl start +dcli -l root -g all_group service collectl status +dcli -l root -g all_group chkconfig collectl on +dcli -l root -g all_group chkconfig --list collectl +dcli -l root -g all_group rm /var/tmp/collectl-3.7.4.src.tar.gz +dcli -l root -g all_group rm -fR /var/tmp/collectl-3.7.4 +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave + + +##################################### +# Upgrade collectl to 3.6.5-2 +###################################### +dcli -l root -g all_group rpm -q collectl +dcli -l root -g all_group cp -p /etc/collectl.conf /tmp/ +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-3.6.5-2.noarch.rpm -d /var/tmp/ +dcli -l root -g all_group service collectl stop +dcli -l root -g all_group rpm -Uvh /var/tmp/collectl-3.6.5-2.noarch.rpm +dcli -l root -g all_group rpm -q collectl +dcli -l root -g all_group cp -p /tmp/collectl.conf /etc/ +dcli -l root -g all_group service collectl start +dcli -l root -g all_group service collectl status +dcli -l root -g all_group chkconfig collectl on +dcli -l root -g all_group chkconfig --list collectl +dcli -l root -g all_group rm /var/tmp/collectl-3.6.5-2.noarch.rpm +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave + + +##################################### +# Downgrade collectl to 3.6.5-2 +###################################### +dcli -l root -g all_group cp -p /etc/collectl.conf /tmp/ +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-3.6.5-2.noarch.rpm -d /var/tmp/ +dcli -l root -g all_group rpm -e collectl +dcli -l root -g all_group rpm -Uvh /var/tmp/collectl-3.6.5-2.noarch.rpm +dcli -l root -g all_group rm /var/tmp/collectl-3.6.5-2.noarch.rpm +dcli -l root -g all_group cp -p /tmp/collectl.conf /etc/ +dcli -l root -g all_group service collectl start +dcli -l root -g all_group service collectl status +dcli -l root -g all_group chkconfig collectl on +dcli -l root -g all_group chkconfig --list collectl +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave + + +##################################### +# Upgrade collectl to 3.6.9-1 +###################################### +dcli -l root -g all_group rpm -q collectl +dcli -l root -g all_group cp -p /etc/collectl.conf /tmp/ +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-3.6.9-1.noarch.rpm -d /var/tmp/ +dcli -l root -g all_group service collectl stop +dcli -l root -g all_group rpm -Uvh /var/tmp/collectl-3.6.9-1.noarch.rpm +dcli -l root -g all_group rpm -q collectl +dcli -l root -g all_group cp -p /tmp/collectl.conf /etc/ +dcli -l root -g all_group service collectl start +dcli -l root -g all_group service collectl status +dcli -l root -g all_group chkconfig collectl on +dcli -l root -g all_group chkconfig --list collectl +dcli -l root -g all_group rm /var/tmp/collectl-3.6.9-1.noarch.rpm +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave + +##################################### +# Upgrade collectl to 3.7.4-1 +###################################### +dcli -l root -g all_group cp -p /etc/collectl.conf /tmp/ +dcli -l root -g all_group '/usr/bin/collectl -v |head -1' +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-3.7.4.src.tar.gz -d /var/tmp/ +dcli -l root -g all_group "cd /var/tmp/ ; gunzip -c collectl-3.7.4.src.tar.gz |tar xvf - > /dev/null" +dcli -l root -g all_group service collectl status +dcli -l root -g all_group service collectl stop +dcli -l root -g all_group chkconfig collectl off +dcli -l root -g all_group chkconfig --list collectl +dcli -l root -g all_group rpm -e collectl +dcli -l root -g all_group rpm -q collectl +dcli -l root -g all_group "cd /var/tmp/collectl-3.7.4; sh INSTALL" +dcli -l root -g all_group '/usr/bin/collectl -v |head -1' +dcli -l root -g all_group cp -p /tmp/collectl.conf /etc/ +dcli -l root -g all_group -d /etc/ -f /etc/collectl.conf +dcli -l root -g all_group service collectl start +dcli -l root -g all_group service collectl status +dcli -l root -g all_group chkconfig collectl on +dcli -l root -g all_group chkconfig --list collectl +dcli -l root -g all_group rm /var/tmp/collectl-3.7.4.src.tar.gz +dcli -l root -g all_group rm -fR /var/tmp/collectl-3.7.4 +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave + + +##################################### +# Upgrade collectl-utils to 3.1.0-1 +###################################### +dcli -l root -g all_group rpm -q collectl-utils +dcli -l root -g all_group cp -p /etc/colplot.conf /usr/bin/colplot /tmp/ +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-utils-3.1.0-1.noarch.rpm -d /var/tmp/ +dcli -l root -g all_group rpm -e collectl-utils +dcli -l root -g all_group rpm -Uvh /var/tmp/collectl-utils-3.1.0-1.noarch.rpm +dcli -l root -g all_group rm /var/tmp/collectl-utils-3.1.0-1.noarch.rpm +dcli -l root -g all_group cp -p /tmp/colplot.conf /etc/ +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave /etc/colplot.conf.rpmsave +dcli -l root -g all_group rpm -q collectl-utils +#dcli -l root -g all_group cp -p /tmp/colplot /usr/bin/colplot +#dcli -l root -g all_group cp -p /tmp/colmux /usr/bin/colmux + +##################################### +# Upgrade collectl-utils to 3.2.1-1 +###################################### +dcli -l root -g all_group rpm -q collectl-utils +dcli -l root -g all_group cp -p /etc/colplot.conf /usr/bin/colplot /usr/bin/colmux /tmp/ +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-utils-3.2.1-1.noarch.rpm -d /var/tmp/ +dcli -l root -g all_group rpm -e collectl-utils +dcli -l root -g all_group rpm -Uvh /var/tmp/collectl-utils-3.2.1-1.noarch.rpm +dcli -l root -g all_group rm /var/tmp/collectl-utils-3.2.1-1.noarch.rpm +dcli -l root -g all_group cp -p /tmp/colplot.conf /etc/ +dcli -l root -g all_group cp -p /tmp/colplot /usr/bin/colplot +dcli -l root -g all_group cp -p /tmp/colmux /usr/bin/colmux +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave /etc/colplot.conf.rpmsave +dcli -l root -g all_group rpm -q collectl-utils +dcli -l root -g all_group service httpd restart + +######################################## +# Downgrade collectl-utils to 3.2.1-1 +######################################## +dcli -l root -g all_group rpm -q collectl-utils +dcli -l root -g all_group cp -p /etc/colplot.conf /usr/bin/colplot /usr/bin/colmux /tmp/ +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-utils-3.2.1-1.noarch.rpm -d /var/tmp/ +dcli -l root -g all_group rpm -e collectl-utils +dcli -l root -g all_group rpm -Uvh /var/tmp/collectl-utils-3.2.1-1.noarch.rpm +dcli -l root -g all_group rm /var/tmp/collectl-utils-3.2.1-1.noarch.rpm +dcli -l root -g all_group cp -p /tmp/colplot.conf /etc/ +dcli -l root -g all_group cp -p /tmp/colplot /usr/bin/colplot +dcli -l root -g all_group cp -p /tmp/colmux /usr/bin/colmux +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave /etc/colplot.conf.rpmsave +dcli -l root -g all_group rpm -q collectl-utils +dcli -l root -g all_group service httpd restart + + +###################################### +# Upgrade collectl-utils to 4.7.1-1 +###################################### +dcli -l root -g all_group rpm -q collectl-utils +dcli -l root -g all_group cp -p /etc/colplot.conf /usr/bin/colplot /usr/bin/colmux /tmp/ +dcli -l root -g all_group -f /export/ora_stage/vishal/collectl/collectl-utils-4.7.1-1.noarch.rpm -d /var/tmp/ +dcli -l root -g all_group rpm -e collectl-utils +dcli -l root -g all_group rpm -Uvh /var/tmp/collectl-utils-4.7.1-1.noarch.rpm +dcli -l root -g all_group rm /var/tmp/collectl-utils-4.7.1-1.noarch.rpm +dcli -l root -g all_group -f /tmp/colplot.conf -d /etc/ +dcli -l root -g all_group -f /tmp/colmux -d /usr/bin/ +dcli -l root -g all_group rm -f /etc/collectl.conf.rpmsave /etc/colplot.conf.rpmsave +dcli -l root -g all_group rpm -q collectl-utils +dcli -l root -g all_group service httpd restart + +############################## +# Install after cell patching (Collectl 3.7.4, collectl-utils 4.7.1-1 ) +############################### +dcli -l root -g cell_group '/usr/bin/collectl -v |head -1' +dcli -l root -g cell_group -f /export/ora_stage/vishal/collectl/collectl-3.7.4.src.tar.gz -d /var/tmp/ +dcli -l root -g cell_group "cd /var/tmp/ ; gunzip -c collectl-3.7.4.src.tar.gz |tar xvf - > /dev/null" +dcli -l root -g cell_group "cd /var/tmp/collectl-3.7.4; sh INSTALL" +dcli -l root -g cell_group '/usr/bin/collectl -v |head -1' +dcli -l root -g cell_group -f /export/ora_stage/vishal/collectl/collectl-utils-4.7.1-1.noarch.rpm -d /var/tmp/ +dcli -l root -g cell_group rpm -Uvh /var/tmp/collectl-utils-4.7.1-1.noarch.rpm +dcli -l root -g cell_group rpm -q collectl-utils +dcli -l root -g cell_group rm /var/tmp/collectl-3.7.4.src.tar.gz +dcli -l root -g cell_group rm -fR /var/tmp/collectl-3.7.4 +dcli -l root -g cell_group rm -f /etc/collectl.conf.rpmsave +dcli -l root -g cell_group rm /var/tmp/collectl-utils-4.7.1-1.noarch.rpm +dcli -l root -g cell_group -d /etc -f /etc/collectl.conf +dcli -l root -g cell_group -d /etc -f /etc/colplot.conf +dcli -l root -g cell_group -d /usr/bin/ -f /usr/bin/colmux +dcli -l root -g cell_group service collectl start +dcli -l root -g cell_group service collectl status +dcli -l root -g cell_group chkconfig collectl on +dcli -l root -g cell_group chkconfig --list collectl + + +########################################## +# Collect & Collectl-utils Verification +########################################## +dcli -l root -g all_group rpm -q collectl +dcli -l root -g all_group rpm -q collectl-utils +dcli -l root -g all_group service collectl status +dcli -l root -g all_group chkconfig --list collectl + +#Customization Verification +# (Needs to have -P -oz at the end of the line) +dcli -l root -g all_group 'grep ^DaemonCommands /etc/collectl.conf' +# (PlotDir needs to be /export/ora_stage/colplot) +dcli -l root -g dbs_group 'grep PlotDir /etc/colplot.conf' +# Should be 10 +dcli -l root -g all_group "grep '^my \$age' /usr/bin/colmux" +# Should have ServerAliveInterval=60 in it +dcli -l root -g all_group "grep '^my \$Ssh' /usr/bin/colmux" + +# Should be commented +dcli -l root -g all_group "egrep 'findFiles.*undef' /var/www/html/colplot/index.cgi |head -1" + +- /var/www/html/colplot/index.cgi + - Change colplot home page cgi script to stop it from trying to find earlier and latest file. + + my $pparams= {fdate=>20010101, tdate=>29991231, contains=>'', unique=>$uniqueFlag }; + #Changed by Vishal + #findFiles(3, $mycfg, $pparams, "$dir$sep*", undef) || + # error("No plottable files match your selection criteria. Are your dir and/or file protections right?"); + + - Default the output radio button to last 30 mintues. + + #Changed by Vishal + #print "\n"; + print "\n"; + print "OR\n"; + print "Last: Minutes\n"; + #Changed by Vishal + #print "\n"; + print "\n"; + + +################################### +# Troubleshooting +################################### + +################################### +# Infiniband Troubleshooting +################################### + +# Infinicheck +################### +/opt/oracle.SupportTools/ibdiagtools/infinicheck -g ~/dbs_ib_group + + +# infiniband commands +###################### +ibswitches +ibhosts +ibnodes +ibstatus +iblinkinfo + + +# From first node +################### +uname -a +cat /etc/hosts +dcli -g all_group -l root 'imageinfo;rds-info -I|head -40;ibstat;ibstatus;ibnetdiscover;ibclearcounters;ibcheckstate -v;rpm -qa|grep -i ofa;' + +# From ALL IB Switches +########################## +uname -a +version +env_test +listlinkup +getmaster +ibnetdiscover +#ibclearcounters +ibcheckstate -v + + +# Check whether link is physically present or not +cat /sys/class/net/ib0/carrier +cat /sys/class/net/ib1/carrier + +## +export SUBNET_MGR_GID=`sminfo | cut -d" " -f7 | cut -c3-16`; +export SUBNET_MGR_LOC="OTHER"; +for IB_NODE_GID in `ibswitches | cut -c14-27`; +do + if [ $SUBNET_MGR_GID = $IB_NODE_GID ]; + then + export SUBNET_MGR_LOC="IB_SWITCH"; + fi; +done; +echo $SUBNET_MGR_LOC; + + +################################### +# OS Watcher Commands +################################### + +############################################################# +#-- Get IO Statistics on a hardisk from OS Watcher +############################################################# + +File Format +############### +zzz ***Tue Feb 11 09:01:54 PST 2014 Sample interval: 5 secconds +Linux 2.6.32-400.11.1.el5uek (servername) 02/11/14 + +Time: 09:01:54 +avg-cpu: %user %nice %system %iowait %steal %idle + 1.56 0.00 1.46 1.43 0.00 95.55 + +Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util +sda 2.64 13.87 7.62 37.58 5994.46 4488.26 231.91 2.53 55.87 1.75 7.89 +sda1 0.00 0.00 0.01 0.00 1.21 0.00 125.98 0.00 65.33 59.17 0.06 + + +cd /opt/oracle.oswatcher/osw/archive/oswiostat + +bunzip2 -cf *iostat_13.10.01.0400*.dat* | egrep -v Device | awk ' +BEGIN { +date=""; +time=""; +} +{ + if ($1 == "zzz") + { + date=$4 "-" $3 "-" $7 + } + if ($1 == "Time:") + { + time=$2 + } + # print entire line if svctm ($11) is greater than 50ms + #if ( $11 > 50) { + # print date " Time: " time " " $0 ; + # } + # + # print entire line if %util ($12) is greater than 50% + if ( $12 > 50) { + print date " Time: " time " " $0 ; + } +} +' + + +################################################################################### +#-- Get IO Statistics on a hardisk from OS Watcher (TABULAR for each disk device) +################################################################################### + +### HardDisks ########## +cd /opt/oracle.oswatcher/osw/archive/oswiostat +bunzip2 -cf *iostat_14.02.22*.dat* | egrep -v Device | awk ' +BEGIN { +date=""; time=""; +printf "Date\t Time \tsda\tsdb\tsdc\tsdd\tsde\tsdf\tsdg\tsdh\tsdi\tsdj\tsdk\tsdl\n" ; +sda_val=""; sdb_val=""; sdc_val=""; sdd_val=""; +sde_val=""; sdf_val=""; sdg_val=""; sdh_val=""; +sdi_val=""; sdj_val=""; sdk_val=""; sdl_val=""; +} +{ + if ($1 == "zzz") {date=$4 "-" $3 "-" $7} + if ($1 == "Time:") {time=$2 } + # %util ($12) + if ( $1 == "sda") { sda_val= $12 }; + if ( $1 == "sdb") { sdb_val= $12 }; + if ( $1 == "sdc") { sdc_val= $12 }; + if ( $1 == "sdd") { sdd_val= $12 }; + if ( $1 == "sde") { sde_val= $12 }; + if ( $1 == "sdf") { sdf_val= $12 }; + if ( $1 == "sdg") { sdg_val= $12 }; + if ( $1 == "sdh") { sdh_val= $12 }; + if ( $1 == "sdi") { sdi_val= $12 }; + if ( $1 == "sdj") { sdj_val= $12 }; + if ( $1 == "sdk") { sdk_val= $12 }; + if ( $1 == "sdl") { sdl_val= $12 }; + if ($1 == "Time:") { + printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" ,date,time,sda_val,sdb_val,sdc_val,sdd_val,sde_val,sdf_val,sdg_val,sdh_val,sdi_val,sdj_val,sdk_val,sdl_val; + } +} +' + + +### Flash Disks ########## +cd /opt/oracle.oswatcher/osw/archive/oswiostat +bunzip2 -cf *iostat_13.10.01.0400*.dat* | egrep -v Device | awk ' +BEGIN { +date=""; time=""; +printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n","Date ","Time ","sdn","sdo","sdp","sdq","sdr","sds","sdt","sdu","sdv","sdw","sdx","sdy","sdz","sdaa","sdab","sdac" ; +sdn_val=""; sdo_val=""; sdp_val=""; sdq_val=""; +sdr_val=""; sds_val=""; sdt_val=""; sdu_val=""; +sdv_val=""; sdw_val=""; sdx_val=""; sdy_val=""; +sdz_val=""; sdaa_val=""; sdab_val=""; sdac_val=""; +} +{ + if ($1 == "zzz") {date=$4 "-" $3 "-" $7} + if ($1 == "Time:") {time=$2 } + # %util ($12) + if ( $1 == "sdn") { sdn_val= $12 }; + if ( $1 == "sdo") { sdo_val= $12 }; + if ( $1 == "sdp") { sdp_val= $12 }; + if ( $1 == "sdq") { sdq_val= $12 }; + if ( $1 == "sdr") { sdr_val= $12 }; + if ( $1 == "sds") { sds_val= $12 }; + if ( $1 == "sdt") { sdt_val= $12 }; + if ( $1 == "sdu") { sdu_val= $12 }; + if ( $1 == "sdv") { sdv_val= $12 }; + if ( $1 == "sdw") { sdw_val= $12 }; + if ( $1 == "sdx") { sdx_val= $12 }; + if ( $1 == "sdy") { sdy_val= $12 }; + if ( $1 == "sdz") { sdz_val= $12 }; + if ( $1 == "sdaa") { sdaa_val= $12 }; + if ( $1 == "sdab") { sdab_val= $12 }; + if ( $1 == "sdac") { sdac_val= $12 }; + if ($1 == "Time:") { + printf ("%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\n" ,date,time,sdn_val,sdo_val,sdp_val,sdq_val,sdr_val,sds_val,sdt_val,sdu_val,sdv_val,sdw_val,sdx_val,sdy_val,sdz_val,sdaa_val,sdab_val,sdac_val); + } +} +' + +############################################################# +#-- Filter the OS Watcher Top output for a particular process +############################################################# + +cd /opt/oracle.oswatcher/osw/archive/oswtop/ +for i in `ls *14.04.24.0500.dat*`; +do + bunzip2 -c $i |egrep -h '^zzz|^top|tnslsnr LISTENER -inherit' | awk ' +BEGIN { date="";time="";} +{ + if ($1 == "zzz") + { + date=$4 "-" $3 "-" $7 + } + else { + if ($1 == "top") + { + time=$3 + } + else { + print date " " time " " $0 ; + } + } +} +' +done + +####################################################################### +#-- Filter the OS Watcher Top output for high CPU usage processes +####################################################################### + + PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND + + 1 - PID + 2 - USER + 3 - PRIORITY + 4 - Nice + 5 - Virtual Memory + 6 - Resident Memory + 7 - Shared Memory + 8 - Status + 9 - %CPU + 10 - %Memory + 11 - Time + 12 - Command + +cd /opt/oracle.oswatcher/osw/archive/oswtop/ +for i in `ls *14.04.29.2000*.dat.bz2` +do + bunzip2 -c $i | egrep -v '^Tasks|^Mem|^Swap' | awk ' +BEGIN { date=""; time=""; } +{ + if ($1 == "zzz") { date=$4 "-" $3 "-" $7 } + else { if ($1 == "top") { time=$3 } + else { if ($9 >= 80) #Resource Usage + { print date " " time " " $0 ; } + } + } +} +' +done + +####################################################################### +#-- Filter the OS Watcher Top output for high CPU usage processes +####################################################################### + + PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND + + 1 - PID + 2 - USER + 3 - PRIORITY + 4 - Nice + 5 - Virtual Memory + 6 - Resident Memory + 7 - Shared Memory + 8 - Status + 9 - %CPU + 10 - %Memory + 11 - Time + 12 - Command + +cd /opt/oracle.oswatcher/osw/archive/oswtop/ +for i in `ls *14.04.29.2000*.dat.bz2` +do + bunzip2 -c $i | egrep -v '^Tasks|^Mem|^Swap' | awk ' +BEGIN { date=""; time=""; } +{ + if ($1 == "zzz") { date=$4 "-" $3 "-" $7 } + else { if ($1 == "top") { time=$3 } + else { if ($9 >= 80) #Resource Usage + { print date " " time " " $0 ; } + } + } +} +' +done + + +####################################################################### +#-- Expect script +####################################################################### + +# Add ssh keys between nodes +expect -c ' +spawn dcli -l root -g all_group -k +while {1} { + expect "(yes/no)?" { send "yes\n"} + expect "password:" { send "welcome1\n"} +} +' + + + + +dcli -l root -g all_group hostname + + +dcli -l root -g dbs_group "dcli -l root -g all_group hostname |wc -l" + + + + + +dcli -l root -g /tmp/vishal/newgroups/cell_group "cellcli -e 'LIST flashcache attributes name,status,size,creationTime,degradedCelldisks,effectiveCacheSize '" +dcli -l root -g /tmp/vishal/newgroups/cell_group "cellcli -e LIST FLASHLOG" +dcli -l root -g /tmp/vishal/newgroups/cell_group "cellcli -e DROP FLASHCACHE" +dcli -l root -g /tmp/vishal/newgroups/cell_group "cellcli -e ' CREATE GRIDDISK ALL FlashDisk PREFIX=FLASH_DM01 , size=20G '" +dcli -l root -g /tmp/vishal/newgroups/cell_group "cellcli -e ' CREATE FLASHLOG ALL FLASHDISK '" +dcli -l root -g /tmp/vishal/newgroups/cell_group "cellcli -e ' CREATE flashcache ALL '" +dcli -l root -g /tmp/vishal/newgroups/cell_group " cellcli -e 'LIST flashcache attributes name,status,size,creationTime,degradedCelldisks,effectiveCacheSize ' " +dcli -l root -g /tmp/vishal/newgroups/cell_group "cellcli -e LIST FLASHLOG" + + + +create diskgroup DATA_DM02_EXT NORMAL REDUNDANCY +disk 'o/*/DATA_DM02_EXT*' +ATTRIBUTE 'COMPATIBLE.ASM'='11.2.0.2.0' +, 'COMPATIBLE.RDBMS'='11.2.0.2' +, 'AU_SIZE'='4194304' +,'cell.smart_scan_capable'='TRUE' +; + + + + +########################################## +# Exadata Cell Parameters & Events +########################################## + +Exadata Cell Events +###################### + immediate cellsrv.cellsrv_statedump + immediate cellsrv.cellsrv_dump + immediate cellsrv.cellsrv_flashcache + immediate cellsrv.cellsrv_resetstats + immediate cellsrv.cellsrv_setparam + immediate cellsrv.cellsrv_storidx + trace[cellsrv.cellsrv_events_layer] + + +# Cell server system state dump + + + alter cell events = "immediate cellsrv.cellsrv_statedump(2,0)"; + + or issue kill -12 on cellsrv OS pid. + + alter cell events = "immediate cellsrv.cellsrv_statedump(0,0)"; + alter cell events = "immediate cellsrv.cellsrv_statedump(1,0)"; + alter cell events = "immediate cellsrv.cellsrv_statedump(2,0)"; + +Reference - http://progeeking.com/2013/10/28/exadata-io-statistics/ +##################################################################### +# I/O latency statistics (Note the IO L stats) + alter cell events="immediate cellsrv.cellsrv_dump('iolstats',0)"; + alter cell events="immediate cellsrv.cellsrv_resetstats('iolstats')"; + + alter cell events="immediate cellsrv.cellsrv_dump('iolhiststats',0)"; + +# I/O reason statistics: + alter cell events="immediate cellsrv.cellsrv_dump('ioreasons',0)"; + alter cell events="immediate cellsrv.cellsrv_resetstats('ioreasons')"; + +# Basic I/O statistics: + alter cell events="immediate cellsrv.cellsrv_dump('devio_stats',0)"; + +# Predicate I/O statistics: + alter cell events="immediate cellsrv.cellsrv_dump('predicateio',0)"; + +# Reset FlashCache Contents + alter cell events = "immediate cellsrv.cellsrv_flashcache(Reset,0,0,0)"; + + + +# Clear cellsrv statistics + alter cell events = "immediate cellsrv.cellsrv_resetstats()"; + +# + alter cell events = "immediate cellsrv.cellsrv_setparam('_cell_gen_time_stats_level','1')"; + alter cell events = "immediate cellsrv.cellsrv_setparam('_cell_gen_time_stats_level','0')"; + +# To enable tracing of the auto disk management modules on a storage cell, run cellcli and enter the following: + alter cell events='trace[cellsrv.cellsrv_events_layer] memory=highest,disk=highest' + +# To disable tracing of the auto disk management modules on a storage cell, run cellcli and enter the following: + alter cell events='trace[cellsrv.cellsrv_events_layer] off'; + +# Storage index - Diagnose Storage index id in Exadata cell server. + + alter cell events = "immediate cellsrv.cellsrv_storidx(dumpridx, all, 0, 0, 0); + + alter cell events="immediate cellsrv.cellsrv_storidx('dumpridx|purge|disable|enable','all|GridDiskName', objd, tsn, dbid)"; + + dumpridx - dump storage indexes + purge - purge storage indexes for specified disk/db/object + disable - disable storage indexes for specified disk/db/object + enable - disable storage indexes for specified disk/db/object + + all/griddiskname - dump for all griddisk/dump for specific griddisk + + objd - data_object_id from all_objects + tsn - tablespace number – ts# from ts$ + dbid - ksqdngunid from x$ksqdn + + + +# Dump cell memory (http://progeeking.com/2013/10/28/exadata-cellsrv-memory-usage/) + + # Memory usage summary + alter cell events="immediate cellsrv.cellsrv_dump('memsummary',0)" + + # SGA Memory Summary + alter cell events="immediate cellsrv.cellsrv_dump('sgaheapsummary',0)"; + + # PGA Memory Details + alter cell events="immediate cellsrv.cellsrv_dump('pgaheap',0)"; + +# Dump cell parameters + alter cell events="immediate cellsrv.cellsrv_dump('cellparams',0)"; + +# Setting $OSSCONF/cellinit.ora parameters dynamically. + alter cell events="immediate cellsrv.cellsrv_setparam('_cell_io_hang_time','90')" + alter cell events="immediate cellsrv.cellsrv_setparam('_cell_io_hang_kill_time','95')" + alter cell events="immediate cellsrv.cellsrv_setparam('_cellrsdef_heartbeat_timeout','10')" (default 6s) + + + Possible parameter + _cell_1mb_buffers_hugepage_support=false + _cell_disable_ant_check_reid=true + _cell_io_hang_reboot=false + _cell_io_hang_time=60 + _cell_num_16k_buffers=2000 + _cell_num_1mb_brr_buffers=5 + _cell_num_1mb_buffers=200 + _cell_num_1mb_bwr_buffers=5 + _cell_num_32k_buffers=1000 + _cell_num_64k_buffers=1000 + _cell_num_8k_buffers=5000 + _cell_num_buffers=1200 + _cell_print_all_params=true + _cellrsbkp_poll_invl=15 + _cellrsdef_fast_restart=0 + _cellrsdef_heartbeat_timeout=6 + _cellrsdef_srvc_cleanup_time=5 + _cellrsdef_srvc_dump=30 + _cellrsms_poll_invl=60 + _cellrsos_poll_invl=15 + _cellrssrv_poll_invl=15 + _ms_cell_ioctl_timeout=60000 + _reconnect_to_cell_attempts=4 + _reonnect_to_cell_freq_in_sec=4 + _skgxp_gen_ant_off_rpc_timeout_in_sec=300 + _skgxp_gen_rpc_timeout_in_sec=90 + _skgxp_udp_use_tcb=false + _skgxp_udp_use_tcb=false + + # Storage Index parameters + _cell_enable_storage_index_for_loads=TRUE + _cell_enable_storage_index_for_writes=TRUE + _cell_si_max_num_diag_mode_dumps=20 + _cell_storage_index_columns=0 + _cell_storage_index_diag_mode=false + _cell_storage_index_partial_rd_sectors=512 + _cell_storage_index_partial_reads_threshold_percent=85 + _cell_storage_index_sizing_factor=2 + + + + +alter cell events="immediate cellsrv.cellsrv_dump('cellparams',0)"; + +Dumping configuration parameter values +version = 0.0 (default = ) +_cell_max_pll_pred_writes = 36 +_cell_pred_writes_autotune_enabled = TRUE +_cell_max_pll_pred_reads = 36 +_cell_pred_reads_autotune_enabled = TRUE +_cell_max_cellsup_time_in_sec = 60 +_cell_max_flash_largeios = 48 +_cell_num_threads_in_short_wait = 40 +_cell_max_pll_pred_filters = 24 (default = 0) +_cell_pred_filters_autotune_enabled = TRUE +_cell_num_threads = 100 +_cell_num_buffers = 5000 +_cell_num_1mb_buffers = 5000 (default = 0) +_cell_num_1mb_bwr_buffers = 180 +_cell_num_1mb_brr_buffers = 180 +_cell_max_dynbufs_memsize = 3072 (default = 0) +_cell_listener_port = 5042 +_cell_listener_backlog = 1000 +_cell_listener_pll_jobs = 23 +_cell_listener_req_batch = 100 +_cell_num_0_byte_recv_ports = 4 +_cell_num_512_byte_recv_ports = 1 +_cell_num_2_kb_recv_ports = 1 +_cell_num_4_kb_recv_ports = 2 +_cell_num_8_kb_recv_ports = 4 +_cell_num_16_kb_recv_ports = 2 +_cell_num_32_kb_recv_ports = 2 +_cell_num_64_kb_recv_ports = 1 +_cell_num_1_mb_recv_ports = 2 (default = 1) +_ms_cell_ioctl_timeout = 600000 +_cell_cd_metadata_slow_list = +_cell_cd_metadata_prepare_timeout_in_sec = 5 +_cell_iorm_test_mode = FALSE +_cell_iorm_perf_stats = FALSE +_cell_iorm_wl_mode = 0 +_cell_iorm_hipri_alloc = 0 +_cell_iorm_medpri_alloc = 0 +_cell_iorm_lowpri_alloc = 0 +_cell_iorm_asm_alloc = 0 +_cell_iorm_lutil_limit = 0 +_cell_iorm_hints_enabled = FALSE +_iorm_hint0 = -1 +_iorm_priority0 = -1 +_iorm_hint1 = -1 +_iorm_priority1 = -1 +_iorm_hint2 = -1 +_iorm_priority2 = -1 +_iorm_hint3 = -1 +_iorm_priority3 = -1 +_iorm_hint4 = -1 +_iorm_priority4 = -1 +_iorm_hint5 = -1 +_iorm_priority5 = -1 +_iorm_hint6 = -1 +_iorm_priority6 = -1 +_iorm_hint7 = -1 +_iorm_priority7 = -1 +_cell_iorm_pri_catidx = -1 +_cell_iorm_pri_dbidx = -1 +_cell_iorm_pri_cgidx = -1 +_cell_iorm_enable = TRUE +_cell_iorm_max_io = 0 +_cell_iorm_max_lio = 0 +_cell_iorm_conc_writes = 0 +_cell_iorm_deadline = 0 +_cell_iorm_fake_dbs = 0 +_cell_iorm_busy_util = 15 +_cell_hard_disable = FALSE +_cell_raise_softassert_on_harderr = FALSE +_cell_enable_ossnet_checksum = 2 +_cell_enable_skgxp_stats = TRUE +_skgxp_udp_use_tcb = TRUE +_skgxp_udp_use_tcb_client = TRUE +_cell_memory_tracing = TRUE +_cell_dmpsga_enabled = FALSE +_cell_enable_dynamic_credits = TRUE +_cell_num_ios_per_predjob = 10 +_cell_num_pred_flashio_corrupt_retries = 1000 +_cell_pred_polling_ctl_enabled = TRUE +_cell_pred_sim_block_byteord_conv = FALSE +_cell_max_kuty_failure_diagnostics = 0 +_cell_print_all_params = FALSE +_cell_pred_disable_destbuf_refill = FALSE +_cell_smartio_passthru_enabled = FALSE +_cell_pred_no_predio_limit = FALSE +_cell_pred_enable_io_buffer_eviction = TRUE +_cell_pred_enable_dest_buffer_eviction = TRUE +_cell_pred_enable_flashio = TRUE +_cell_snapshot_bufsize = 1 +_cell_snapshot_interval = 100 +_cell_gen_time_stats_level = 1 +_cell_gen_time_stats_timer_level = 0 +_cell_force_split_gdisk = FALSE +_cell_testlevel = 0 +_cell_max_receive_buffers_per_port = 600 +_cell_num_8k_buffers = 10000 +_cell_num_16k_buffers = 5000 +_cell_num_32k_buffers = 5000 +_cell_num_64k_buffers = 5000 +_cell_max_receive_buffers_8k_port = 1000 +_cell_max_receive_buffers_1mb_port = 50 +_cell_crash_on_error = 0 +_cell_crash_on_error_skip_n = 0 +_cell_safefile_sync_enabled = FALSE +_cell_1mb_buffers_hugepage_support = TRUE +_skgxp_udp_interface_detection_time_secs = 1 +_skgxp_gen_ant_ping_misscount = 8 +_skgxp_gen_ant_ping_misscount_delay = 225 +_disable_diskmon_tcp_monitor = FALSE +_disable_diskmon_subnet_manager_query = FALSE +_skgxp_min_zcpy_len = 2147483647 +_skgxp_min_rpc_rcv_zcpy_len = 2147483647 +_skgxp_zcpy_flags = 2147483647 +_skgxp_ctx_flags1 = 0 +_skgxp_ctx_flags1mask = 0 +_skgxp_dynamic_protocol = 0 +_skgxp_inets = 0 +_skgxpg_last_parameter = 27 +_skgxp_ant_options = 0 +_libcell_enable_libcell_interrupts = 1 +_cell_rcvport_hist_size = 0 +_skgxp_gen_rpc_no_path_check_in_sec = 1 +_skgxp_gen_rpc_timeout_in_sec = 300 +_skgxp_gen_ant_off_rpc_timeout_in_sec = 10 +_reconnect_to_cell_freq_in_sec = 2 +_reconnect_to_cell_attempts = 7 +_disconnect_to_cell_attempts = 2 +_reconnect_controls_reset_interval = 60 +_dskm_disable_reconnect_to_cell = FALSE +_cell_disable_resource_leak_check = FALSE +_cell_disable_ant_check_reid = FALSE +_cell_disable_proactive_drop = FALSE +_cell_server_event = +_cell_client_event = +_cell_offloadserver_event = +_cell_reserve_hugepage_memory_mb = 24 +_cell_tolerates_max_backward_drift_microsecs = 300000 +_cell_num_sched_log_entries = 8192 +_cell_storage_index_columns = 8 (default = 0) +_cell_storage_index_partial_reads_threshold_percent = 85 +_cell_storage_index_partial_rd_sectors = 512 +_cell_enable_storage_index_for_loads = TRUE +_cell_enable_storage_index_for_writes = TRUE +_cell_storage_index_diag_mode = 0 +_cell_storage_index_sizing_factor = 2 +_cell_pred_max_smartio_sessions = 2320 (default = 0) +_cell_pred_max_core_exec_threads = 23 (default = 14) +_cell_core_exec_ctl_level = 0 +_cell_pred_num_ios_toissue_flashobj = 2 +_cell_max_topheap_references = 50 +_cell_pred_max_cus_per_filter = 1 +_cell_load_timezone_during_boot = TRUE +_cell_sendport_private_rqh_pool_size = 10 +_cell_sendport_global_rqh_num_pools = 512 +_cell_sendport_global_rqh_pool_maxincr = 150 +_cell_capability_version = 0 +_cell_iolat_stats_disable = FALSE +_cell_pred_mapelem_split_size = -1 +_cell_perf_flags = 0 +_cell_enable_sbuf_check = FALSE +_cell_disable_crash_dump_enhancement = FALSE +_cell_object_expiration_hours = 24 +_cell_mutex_stats = 0 +_cell_port_activity_threshold = 300000 +_cell_ant_port_activity_threshold = 1800000 +_cell_ant_port_noopen_threshold = 60000 +_cell_in_lrg_testing = FALSE +_cell_write_simulate_hard_error_freq = 0 +_cell_assert_on_flash_data_corruption = 0 +_cell_flashcache_diag_reads_frequency = 0 +_cell_flashcache_enable_coalescing = TRUE +_cell_flashcache_mdextent_chksum = 2 +_cell_read_flash_data_verif_level = 3 +_cell_flashcache_data_verif_aura1 = TRUE +_cell_flashcache_data_verif_aura2 = FALSE +_cell_read_flash_gdisk_verif_level = 3 +_cell_max_retry_on_read_flash_gdisk_verif_err = 2 +_cell_enable_read_verif_on_these_gdisks = +_cell_enable_read_verif_on_gdisk_first_N_MB = -1 +_cell_flash_cache_sanity_checking = 0 +_cell_fc_force_caching_for_nocache_ios = FALSE +_cellrsdef_fast_restart = 1 +_cell_max_memory = 22171 (default = 0) +_cell_max_dump_objects = 300000 +_cell_max_connections = 1500 (default = 0) +_cell_sga_lowmem_threshold_size = 1024 (default = 0) +_cell_nomem_threshold_enabled = TRUE +_cell_sga_lowmem_threshold_enabled = TRUE +_cell_disable_heap_summary = FALSE +_cell_flashcache_max_FDOM_outst_ios = 70 +_cell_flashcache_dsync_jobs = 4 +_cell_wait_gdisk_refcnt_timeout_in_sec = 600 +_cell_gd_io_quiescent_timeout = 10 +_cell_auto_close_fd_interval = 120 +_cell_dump_sga_on_oom_exception = FALSE +_cell_quarantine_manager_disabled = FALSE +_cell_qm_disable_sql_step_quarantine = FALSE +_cell_qm_disable_disk_region_quarantine = FALSE +_cell_qm_db_quarantine_threshold = 3 +_cell_qm_offload_quarantine_threshold = 3 +_cell_thread_max_trace_file_size = -1 +_cell_redolog_fast_ack = FALSE +_cell_disable_flashcache_db_blk_chksum = FALSE +_cell_disable_platform_decryption = FALSE +_cell_disable_flash_gdisk_db_blk_chksum = FALSE +_cell_auto_dump_errstack = TRUE +_cell_auto_dump_errstack_interval = 900 +_cell_si_max_num_diag_mode_dumps = 20 +_cell_fc_persistence_max_io_retry = 1 +_cell_fc_slowflush_sleep_interval = 500 +_cell_fc_persistence_state = 0 +_cell_fc_md_shadow_paging_enabled = TRUE +_cell_fc_use_32k_cachelines = FALSE +_cell_fc_scan_tc_blksize = 4 +_cell_fc_autocache_scans = TRUE +_cell_fc_scan_elgblty_threshold = 1 +_cell_fc_scan_tc_threshold = 2 +_cell_fc_scan_tc_cooling_threshold = 10 +_cell_disable_crash_dump_enhancement = FALSE +_cell_object_expiration_hours = 24 +_cell_mutex_stats = 0 +_cell_port_activity_threshold = 300000 +_cell_ant_port_activity_threshold = 1800000 +_cell_ant_port_noopen_threshold = 60000 +_cell_in_lrg_testing = FALSE +_cell_write_simulate_hard_error_freq = 0 +_cell_assert_on_flash_data_corruption = 0 +_cell_flashcache_diag_reads_frequency = 0 +_cell_flashcache_enable_coalescing = TRUE +_cell_flashcache_mdextent_chksum = 2 +_cell_read_flash_data_verif_level = 3 +_cell_flashcache_data_verif_aura1 = TRUE +_cell_flashcache_data_verif_aura2 = FALSE +_cell_read_flash_gdisk_verif_level = 3 +_cell_max_retry_on_read_flash_gdisk_verif_err = 2 +_cell_enable_read_verif_on_these_gdisks = +_cell_enable_read_verif_on_gdisk_first_N_MB = -1 +_cell_flash_cache_sanity_checking = 0 +_cell_fc_force_caching_for_nocache_ios = FALSE +_cellrsdef_fast_restart = 1 +_cell_max_memory = 22171 (default = 0) +_cell_max_dump_objects = 300000 +_cell_max_connections = 1500 (default = 0) +_cell_sga_lowmem_threshold_size = 1024 (default = 0) +_cell_nomem_threshold_enabled = TRUE +_cell_sga_lowmem_threshold_enabled = TRUE +_cell_disable_heap_summary = FALSE +_cell_flashcache_max_FDOM_outst_ios = 70 +_cell_flashcache_dsync_jobs = 4 +_cell_wait_gdisk_refcnt_timeout_in_sec = 600 +_cell_gd_io_quiescent_timeout = 10 +_cell_auto_close_fd_interval = 120 +_cell_dump_sga_on_oom_exception = FALSE +_cell_quarantine_manager_disabled = FALSE +_cell_qm_disable_sql_step_quarantine = FALSE +_cell_qm_disable_disk_region_quarantine = FALSE +_cell_qm_db_quarantine_threshold = 3 +_cell_qm_offload_quarantine_threshold = 3 +_cell_thread_max_trace_file_size = -1 +_cell_redolog_fast_ack = FALSE +_cell_disable_flashcache_db_blk_chksum = FALSE +_cell_disable_platform_decryption = FALSE +_cell_disable_flash_gdisk_db_blk_chksum = FALSE +_cell_auto_dump_errstack = TRUE +_cell_auto_dump_errstack_interval = 900 +_cell_si_max_num_diag_mode_dumps = 20 +_cell_fc_persistence_max_io_retry = 1 +_cell_fc_slowflush_sleep_interval = 500 +_cell_fc_persistence_state = 0 +_cell_fc_md_shadow_paging_enabled = TRUE +_cell_fc_use_32k_cachelines = FALSE +_cell_fc_scan_tc_blksize = 4 +_cell_fc_autocache_scans = TRUE +_cell_fc_scan_elgblty_threshold = 1 +_cell_fc_scan_tc_threshold = 2 +_cell_fc_scan_tc_cooling_threshold = 10 +_cell_fc_scan_tc_decay_zone_sz = 4 +_cell_fc_scan_tc_num_decay_zones = 6 +_cell_fc_scan_threshold_timeout = 1 +_cell_fc_oltp_resv_pcntg = 50 +_cell_fc_cache_unkept_tbls = TRUE +_cell_fc_num_hashbuckets = 0 +_cell_fc_aura2_md_shadow_paging_enabled = FALSE +_cell_fc_bootstrap_timeout = 5000000 +_cell_fc_cache_mirror_writes = 1 +_cell_fc_dw_batch_size = 1 +_cell_fc_lru_scan4freeable_depth = 128 +_cell_fc_enable_opread = TRUE +_cell_fc_replacement_threshold = 94 +_cell_fc_trim_threshold = 97 +_cell_fc_lrg_compression_ratio = 5 +_cell_fc_outstanding_trim_ios = 32 +_cell_simulate_railroad_crashes = FALSE +_cell_fc_toresilver_limit_chdrs = 390000 +_cell_qm_max_simulated_railroad_crashes = 2 +_cell_latency_warning_threshold = +_cell_latency_threshold_check_interval = 360000 +_cell_latency_threshold_print_warning = FALSE +_cell_si_expensive_debug_tracing = FALSE +_cell_si_lock_pool_num_locks = 1024 +_cell_poor_perf_schedule_time = 5000 +_cell_iohang_schedule_time = 500 +_cell_assert_unsafe_allocmem = FALSE +_cell_fplib_fix_control = 0 +Unable to lookup value for parameter _lost_cache_detect +_cell_num_vers_check_fail_messages = 0 +_cell_qm_db_quarantine_time_threshold = 86400 +_cell_pthread_stacksize = 10485760 +_cell_flashlog_flags = 0 +_cell_flashlog_max_active_table_size = 8191 +_cell_secure_erase_power = 5 +_cell_mpp_cpu_freq = 2 +_ms_listener_port = 5043 +_cell_mpp_threshold = 90 +_cell_mpp_max_pushback = 50 +_si_write_diag_disable = FALSE +_cell_max_cellsrvstat_sessions = 3 +_cell_si_diag_mode_force = FALSE +_cell_tracefile_max_size = 1610612736 +_cell_state_dump_options = 0 +_cell_num_offload_processes = 0 (default = 1) +_cell_num_offload_groupmsg_threads = 0 +_cell_in_debug_mode = FALSE +_cell_oflsrv_heartbeat_timeout_sec = 6 +ERROR: _gentimestats_rut_thresh has invalid ossp_conf size of 8 +_skgxp_diag_bucket_size = 32 +_cell_diag_bucket_size = 131072 (default = 128) +Unable to lookup value for parameter _gentimestats_rut_disable_stkdmp +_ms_mprotect_corrupt_buf = TRUE +_cell_perf_action = +_cell_perf_tests = +_cell_fc_enable_resilvering = TRUE +_cell_netsend_out_jobq_count = 10 +_cell_cache_out_jobq_count = 50 +_cell_aio_ctx_count = 5 +_cell_iops_perf_testing = FALSE +_cell_flashcache_dsync_jobs = 4 +_cell_wait_gdisk_refcnt_timeout_in_sec = 600 +_cell_gd_io_quiescent_timeout = 10 +_cell_auto_close_fd_interval = 120 +_cell_dump_sga_on_oom_exception = FALSE +_cell_quarantine_manager_disabled = FALSE +_cell_qm_disable_sql_step_quarantine = FALSE +_cell_qm_disable_disk_region_quarantine = FALSE +_cell_qm_db_quarantine_threshold = 3 +_cell_qm_offload_quarantine_threshold = 3 +_cell_thread_max_trace_file_size = -1 +_cell_redolog_fast_ack = FALSE +_cell_disable_flashcache_db_blk_chksum = FALSE +_cell_disable_platform_decryption = FALSE +_cell_disable_flash_gdisk_db_blk_chksum = FALSE +_cell_auto_dump_errstack = TRUE +_cell_auto_dump_errstack_interval = 900 +_cell_si_max_num_diag_mode_dumps = 20 +_cell_fc_persistence_max_io_retry = 1 +_cell_fc_slowflush_sleep_interval = 500 +_cell_fc_persistence_state = 0 +_cell_fc_md_shadow_paging_enabled = TRUE +_cell_fc_use_32k_cachelines = FALSE +_cell_fc_scan_tc_blksize = 4 +_cell_fc_autocache_scans = TRUE +_cell_fc_scan_elgblty_threshold = 1 +_cell_fc_scan_tc_threshold = 2 +_cell_fc_scan_tc_cooling_threshold = 10 +_cell_fc_scan_tc_decay_zone_sz = 4 +_cell_fc_scan_tc_num_decay_zones = 6 +_cell_fc_scan_threshold_timeout = 1 +_cell_fc_oltp_resv_pcntg = 50 +_cell_fc_cache_unkept_tbls = TRUE +_cell_fc_num_hashbuckets = 0 +_cell_fc_aura2_md_shadow_paging_enabled = FALSE +_cell_fc_bootstrap_timeout = 5000000 +_cell_fc_cache_mirror_writes = 1 +_cell_fc_dw_batch_size = 1 +_cell_fc_lru_scan4freeable_depth = 128 +_cell_fc_enable_opread = TRUE +_cell_fc_replacement_threshold = 94 +_cell_fc_trim_threshold = 97 +_cell_fc_lrg_compression_ratio = 5 +_cell_fc_outstanding_trim_ios = 32 +_cell_simulate_railroad_crashes = FALSE +_cell_fc_toresilver_limit_chdrs = 390000 +_cell_qm_max_simulated_railroad_crashes = 2 +_cell_latency_warning_threshold = +_cell_latency_threshold_check_interval = 360000 +_cell_latency_threshold_print_warning = FALSE +_cell_si_expensive_debug_tracing = FALSE +_cell_si_lock_pool_num_locks = 1024 +_cell_poor_perf_schedule_time = 5000 +_cell_iohang_schedule_time = 500 +_cell_assert_unsafe_allocmem = FALSE +_cell_fplib_fix_control = 0 +Unable to lookup value for parameter _lost_cache_detect +_cell_num_vers_check_fail_messages = 0 +_cell_qm_db_quarantine_time_threshold = 86400 +_cell_pthread_stacksize = 10485760 +_cell_flashlog_flags = 0 +_cell_flashlog_max_active_table_size = 8191 +_cell_secure_erase_power = 5 +_cell_mpp_cpu_freq = 2 +_ms_listener_port = 5043 +_cell_mpp_threshold = 90 +_cell_mpp_max_pushback = 50 +_si_write_diag_disable = FALSE +_cell_max_cellsrvstat_sessions = 3 +_cell_si_diag_mode_force = FALSE +_cell_tracefile_max_size = 1610612736 +_cell_state_dump_options = 0 +_cell_num_offload_processes = 0 (default = 1) +_cell_num_offload_groupmsg_threads = 0 +_cell_in_debug_mode = FALSE +_cell_oflsrv_heartbeat_timeout_sec = 6 +ERROR: _gentimestats_rut_thresh has invalid ossp_conf size of 8 +_skgxp_diag_bucket_size = 32 +_cell_diag_bucket_size = 131072 (default = 128) +Unable to lookup value for parameter _gentimestats_rut_disable_stkdmp +_ms_mprotect_corrupt_buf = TRUE +_cell_perf_action = +_cell_perf_tests = +_cell_fc_enable_resilvering = TRUE +_cell_netsend_out_jobq_count = 10 +_cell_cache_out_jobq_count = 50 +_cell_aio_ctx_count = 5 +_cell_iops_perf_testing = FALSE +_cell_netsend_returnjob_thres_for_8Kbuf = 500 +_kse_snap_ring_size = 0 +_kse_snap_ring_record_stack = FALSE +_cell_num_priv_fsa_8k_buffers = 0 +_cell_num_dynamic_priv_fsa_8k_buffers = 60 +_cell_num_dynamic_priv_fsa_cachegets = 50 +_cell_num_dynamic_priv_fsa_bids = 50 +_cell_dynamic_priv_fsa_8k_iops_threshold = 160000 +_cell_assert_on_diagmode_catching_wrong_results = FALSE +_cell_cd_scrubbing_exclude_list = +_cell_receiveport_buf_alloc_incr = 10 +_cell_num_qos_1_mb_recv_ports = 1 +_cell_max_receive_buffers_qos_1mb_port = 10 +_cell_oob_max_growth_percent = 20 +_cell_oob_max_growth_qos = 250 +_oss_enable_scrub_repair = TRUE +_cell_system_thread_max_trace_file_size = 6291456 +_cell_timer_granularity_msec = 5 +_cell_ffi_flush_interval = 2000 +_cell_ffi_max_memory_usage_in_mb = 2000 +_cell_netsend_queue_thresh = 500 +_cell_port_frozen_threshold = 3600000 +_dskm_test_fence_postpone = 0 +_cell_rslv_poor_health = TRUE +_cell_hugetlbtext_relocate = TRUE +_cell_allow_write_cancellation_upon_hair_trigger = FALSE +_cell_enable_buffer_owner_hist = FALSE +Cellsrv Default Trace Size Limit 15042511 + + + +################################### +ZFS Tuning +############## + +NFS parameter listen_backlog=128 +ZFS52-2# ndd -set /dev/tcp tcp_conn_req_max_q 1024 +ZFS52-2# ndd -set /dev/tcp tcp_conn_req_max_q0 8192 + + +################################### +Exadata Network Interface Check +################################### + +##-- Check bonded interface slaves +dcli -l root -g ~/dbs_group cat /sys/class/net/bond0/bonding/slaves +dcli -l root -g ~/dbs_group cat /sys/class/net/bond1/bonding/slaves +dcli -l root -g ~/dbs_group cat /sys/class/net/bond2/bonding/slaves +dcli -l root -g ~/dbs_group cat /sys/class/net/bondeth0/bonding/slaves +dcli -l root -g ~/dbs_group cat /sys/class/net/bondeth1/bonding/slaves +dcli -l root -g ~/dbs_group cat /sys/class/net/bondib0/bonding/slaves + + + +##-- Check network interface status +dcli -l root -g ~/dbs_group ethtool eth0|egrep 'detected|Speed'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth1|egrep 'detected|Speed'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth2|egrep 'detected|Speed'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth3|egrep 'detected|Speed'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth4|egrep 'detected|Speed'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth5|egrep 'detected|Speed'|sort -k2 + + +##-- Check supported network interface speed +dcli -l root -g ~/dbs_group ethtool eth0|egrep -A2 ' Supported link modes'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth1|egrep -A2 ' Supported link modes'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth2|egrep -A2 ' Supported link modes'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth3|egrep -A2 ' Supported link modes'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth4|egrep -A2 ' Supported link modes'|sort -k2 +dcli -l root -g ~/dbs_group ethtool eth5|egrep -A2 ' Supported link modes'|sort -k2 + +##-- Check IP Address +dcli -l root -g ~/dbs_group ifconfig bond0|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig bond1|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig bond2|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig bondeth0|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig bondeth1|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig bondib0|grep 'inet addr' + +dcli -l root -g ~/dbs_group ifconfig eth0|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig eth1|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig eth2|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig eth3|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig eth4|grep 'inet addr' +dcli -l root -g ~/dbs_group ifconfig eth5|grep 'inet addr' + + +############################### +Exadata Unix Account Creation +############################### + +dcli -l root -g ~/dbs_group mkdir -p /home/vgupta +dcli -l root -g ~/dbs_group useradd -u 24117 -g techdept -G dbapm -d /home/vgupta -s /bin/bash vgupta +## change user password expiry information +dcli -l root -g ~/dbs_group chage -E -1 -m 0 -M 99999 -W 7 vgupta +dcli -l root -g ~/dbs_group chown vgupta:vgupta /home/vgupta + +dcli -l root -g ~/dbs_group "passwd vgupta < /proc/sys/vm/max_map_count' + dcli -l root -g dbs_group 'echo vm.max_map_count=200000 >> /etc/sysctl.conf' + +########################## +Exadata Disk Scrubbing +########################## + +# Check Disk scrubbing schedule +dcli -l root -g ~/cell_group ' grep hardDiskScrubInterval $OSSCONF/cell_disk_config.xml' +dcli -l root -g ~/cell_group ' grep hardDiskScrubStartTime $OSSCONF/cell_disk_config.xml' + +# Stop disk scrubbing +dcli -l root -g ~/cell_group " cellcli -e ALTER CELL hardDiskScrubInterval=none " + +# Schedule disk scrubbing time +dcli -l root -g ~/cell_group " \" cellcli -e ALTER CELL hardDiskScrubStartTime='2015-08-23T00:00:00-07:00' \" " + +# Set disk scrubbing interval (Valid options are daily, weekly, biweekly and none). Time is in ms. +# 14 days = 1209600000 ms +# 7 days = 604800000 ms +# 1 day = 86400000 ms +dcli -l root -g ~/cell_group " cellcli -e ALTER CELL hardDiskScrubInterval=biweekly " + + + + +------------------------------------------------------------------- +-- ASM Disk Errors +------------------------------------------------------------------- + +SELECT failgroup + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_00',read_errs+write_errs,0)) CD_00 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_01',read_errs+write_errs,0)) CD_01 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_02',read_errs+write_errs,0)) CD_02 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_03',read_errs+write_errs,0)) CD_03 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_04',read_errs+write_errs,0)) CD_04 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_05',read_errs+write_errs,0)) CD_05 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_06',read_errs+write_errs,0)) CD_06 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_07',read_errs+write_errs,0)) CD_07 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_08',read_errs+write_errs,0)) CD_08 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_09',read_errs+write_errs,0)) CD_09 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_10',read_errs+write_errs,0)) CD_10 + , sum(DECODE(substr(name,INSTR(name,'_',-1,3)+1,5), 'CD_11',read_errs+write_errs,0)) CD_11 +FROM gv$asm_disk_stat +where name like '%CD%' +GROUP BY failgroup +ORDER BY 1; + + +########################## +# Exadata Rsync backup +########################## + +BACKUP_DIR=/u23/oraback/exadata/`hostname -s`/ +rsync -a -v --one-file-system --delete /app ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /bin ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /boot ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /etc ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /lib ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /lib64 ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /mnt ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /opt ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /root ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /sbin ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /selinux ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /srv ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /usr ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /var ${BACKUP_DIR} +rsync -a -v --one-file-system --delete /u01 ${BACKUP_DIR} --exclude='/u01/patches/' --exclude='*.aud' --exclude='*.trc' --exclude='*.trm' + + + +BACKUP_DIR=/u23/oraback/exadata/`hostname -s`/ +rsync -a -v --one-file-system --delete /u01 ${BACKUP_DIR} --exclude='/u01/patches/' --exclude='*.aud' --exclude='*.trc' --exclude='*.trm' + diff --git a/vg/Incremental_Cube_Build_UNIX.sql b/vg/Incremental_Cube_Build_UNIX.sql new file mode 100644 index 0000000..51ce1aa --- /dev/null +++ b/vg/Incremental_Cube_Build_UNIX.sql @@ -0,0 +1,114 @@ +-------------------------------------------------------------------------------- +-- ENABLLING LOGGING + +BEGIN +SYS.DBMS_CUBE_LOG.ENABLE(NULL, NULL, 3, 'CUBE_BUILD_LOG'); +END ; +/ + +-------------------------------------------------------------------------------- +-- LOAD DIMENSIONS + +BEGIN + +EXECUTE IMMEDIATE ' ALTER SESSION ENABLE PARALLEL DML ' ; +EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.DIM_CONTACT_PARTNERSHIP PARALLEL 12 ' ; + + DBMS_CUBE.BUILD( + ' + CRM_DW_OWN.CONTACT_PARTNERSHIPS_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + ), + CRM_DW_OWN.FIRM_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + ), + CRM_DW_OWN.OFFICE_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + ), + CRM_DW_OWN.RETAILPRODUCT_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + ), + CRM_DW_OWN.TERRITORY_2_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + ), + CRM_DW_OWN.TERRITORY_3_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + ), + CRM_DW_OWN.TERRITORY_4_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + ), + CRM_DW_OWN.TERRITORY_5_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + ), + CRM_DW_OWN.TERRITORY_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + )', + 'CCCCCCCCC', -- refresh method +false, -- refresh after errors + 2, -- parallelism +false, -- atomic refresh +false, -- automatic order +false -- add dimensions +); + +EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.DIM_CONTACT_PARTNERSHIP NOPARALLEL ' ; + +END; +/ + +-------------------------------------------------------------------------------- +-- LOAD TRANSCTION_CUBE + +BEGIN + +EXECUTE IMMEDIATE ' ALTER SESSION ENABLE PARALLEL DML ' ; +EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.FACT_TRANSACTIONS PARALLEL 8 ' ; + +DBMS_CUBE.BUILD( +' CRM_DW_OWN.TRANSACTION_CUBE USING + ( LOAD PRUNE, + SOLVE + )', +'S', -- refresh method +false, -- refresh after errors +6, -- parallelism +false, -- atomic refresh +true, -- automatic order +false -- add dimensions +); + +EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.FACT_TRANSACTIONS NOPARALLEL ' ; + +END; +/ + +-------------------------------------------------------------------------------- +-- UPDATE BUILD_TYPE + +UPDATE CRM_DW_OWN.BUILD_TYPE +SET BUILD_FLAG = 'T', +UPDATE_DT = SYSTIMESTAMP +WHERE (TARGET_NAME = 'CRM_DW_OWN.DIM_FIRM' AND BUILD_FLAG = 'F') +OR (TARGET_NAME = 'CRM_DW_OWN.DIM_OFFICE' AND BUILD_FLAG = 'F') +OR (TARGET_NAME = 'CRM_DW_OWN.DIM_CONTACT_PARTNERSHIP' AND BUILD_FLAG = 'F') +OR (TARGET_NAME = 'CRM_DW_OWN.FACT_TRANSACTIONS' AND BUILD_FLAG = 'F'); + +COMMIT ; diff --git a/vg/TPT_public.zip b/vg/TPT_public.zip new file mode 100644 index 0000000..045c4cb Binary files /dev/null and b/vg/TPT_public.zip differ diff --git a/vg/TimesTen_commands.txt b/vg/TimesTen_commands.txt new file mode 100644 index 0000000..48df62b --- /dev/null +++ b/vg/TimesTen_commands.txt @@ -0,0 +1,42 @@ +Check for connection DSN name in following odbc.ini files. + +############################ +# ODBC ini file locations +############################ +/opt/TimesTen/tt112230/info/sys.odbc.ini + + +############################ +# Start/Stop/Restart Timesten MAIN daemon +# -force Starts or stops the TimesTen main daemon, even when warnings are returned. +ttDaemonAdmin [-force] {-start | -stop | -restart} + + +############################ +# Start/Stop/Restart Timesten Server daemon +# -force immediately stops the server processes. +ttDaemonAdmin [ -startserver | -restartserver ] +ttDaemonAdmin [-force] -stopserver +ttDaemonAdmin + +############################ +# Display Timesten status +ttStatus {-h | -help | -?} +ttStatus {-V | -version} +ttStatus [-v] [-r secs] [-[no]pretty] +ttStatus [-r secs] [-[no]pretty] {DSN | -connStr connection_string | dspath} + + + +############################ +# Transaction +############################ +ttIsql -connStr "DSN=aceds;" +Command> call ttLogHolds; +Command> + +############################ +# Display Query Plan +############################ +ttIsql -connStr "DSN=aceds;" +Command> call ttSQLCmdQueryPlan(25215090200); \ No newline at end of file diff --git a/vg/_README.htm b/vg/_README.htm new file mode 100644 index 0000000..48b10aa --- /dev/null +++ b/vg/_README.htm @@ -0,0 +1,3854 @@ + + + + + + + + + +Vishal Gupta's SQL Scripts + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CategoryFileNameDescriptionParametersParameter
    + Default
    + Value
    ExampleSample Output
    Memoryamm_info.sqlDisplay + Automatic Memory Management (AMM) details   amm_info.txt
    Memoryasmm_info.sqlDisplay + Automatic Shared Memory Management (ASMM) details   asmm_info.txt
    ArchiveLogsarchivelog_gap.sqlDisplay + archivelog gap   archivelog_gap.txt
    ASHash.sqlDisplay + session from ASH   ash.txt
    ASHash_info.sqlDisplay + ASH Info   ash_info.txt
    ASHash_report.sqlGenerate + ASH report for instances passed    ash_report.txt
    ASHash_report_html.sqlGenerate + ASH report for instances passed    ash_report_html.txt
    ASHash_sid_sqlids.sqlDisplay + Session's SQL IDs from ASH   ash_sid_sqlids.txt
    ASHash_top_actions.sqlDisplay + top actions from ASH   ash_top_actions.txt
    ASHash_top_activity.sqlDisplay + top activity from ASH   ash_top_activity.txt
    ASHash_top_clients.sqlDisplay + top user from ASH   ash_top_clients.txt
    ASHash_top_modules.sqlDisplay + top activity from ASH   ash_top_modules.txt
    ASHash_top_services.sqlDisplay + top activity from ASH   ash_top_services.txt
    ASHash_top_sessions.sqlDisplay + top user from ASH   ash_top_sessions.txt
    ASHash_top_users.sqlDisplay + top user from ASH   ash_top_users.txt
    ASMasm_disk.sqlDisplayASM + Disks   asm_disk.txt
    ASMasm_disk_count.sqlASM + Disk Count   asm_disk_count.txt
    ASMasm_disk_stats.sqlDisplayASM + Disk Statistics   asm_disk_stats.txt
    ASMasm_diskgroup.sqlASM + DiskGroup Info   asm_diskgroup.txt
    ASMasm_diskgroup_size.sqlASM + DiskGroup Sizes and Space Usage   asm_diskgroup_size.txt
    ASMasm_diskgroup_usage_by_database.sqlASM + DiskGroup usage by database for all mounted diskgroups (including other + databases)   asm_diskgroup_usage_by_database.txt
    ASMasm_diskgroup_usage_by_directory.sqlDisplayASM + diskgroup usage by directory   asm_diskgroup_usage_by_directory.txt
    ASMasm_diskgroup_usage_by_filetype.sqlASM + usage by file type for all mounted diskgroups (including other databases)   asm_diskgroup_usage_by_filetype.txt
    ASMasm_diskgroup_usage_currentdb.sqlDisplayASM + diskgroup usage by Filetype for current database.   asm_diskgroup_usage_currentdb.txt
    ASMasm_failgroup.sqlDisplayASM + Disk Failgroups   asm_failgroup.txt
    ASMasm_filetype_usage.sqlASM + usage by file type for all mounted diskgroups (including other databases)   asm_filetype_usage.txt
    ASMasm_operation.sqlDisplayASM + Operations   asm_operation.txt
    Analytic Workspaceaw_sessions.sqlDisplay + OLAP Sessions   aw_sessions.txt
    Analytic Workspaceaw_size.sqlDisplay + Analytic Workspace (AW) Size   aw_size.txt
    AWRawr_buffer_hit_ratio_trend.sqlDisplay + Buffer Hit Ratio from AWR data   awr_buffer_hit_ratio_trend.txt
    AWRawr_config.sqlDisplay + AWR Configuration   awr_config.txt
    AWRawr_index_usage_monitoring.sqlDisplay + index usage from AWR data.   awr_index_usage_monitoring.txt
    AWRawr_instance.sqlDisplay + database parameter changes from AWR Repository   awr_instance.txt
    AWRawr_loadprofile.sqlDisplay + load profile from AWR   awr_loadprofile.txt
    AWRawr_loadprofile_by_statname.sqlDisplay + hourly load profile from AWR for statistics passed as input   awr_loadprofile_by_statname.txt
    AWRawr_loadprofile_by_statname_delta.sqlDisplay + hourly load profile from AWR for statistics passed as input   awr_loadprofile_by_statname_delta.txt
    AWRawr_loadprofile_by_statname_hourlybreakdown.sqlDisplay + hourly load profile from AWR for statistics passed as input   awr_loadprofile_by_statname_hourlybreakdown.txt
    AWRawr_loadprofile_by_statname_hourlybreakdown_delta.sqlDisplay + hourly load profile from AWR for statistics passed as input   awr_loadprofile_by_statname_hourlybreakdown_delta.txt
    AWRawr_loadprofile_logicalreads.sqlDisplay + load profile from AWR   awr_loadprofile_logicalreads.txt
    AWRawr_loadprofile_physicalreads.sqlDisplay + load profile from AWR   awr_loadprofile_physicalreads.txt
    AWRawr_loadprofile_physicalwrites.sqlDisplay + load profile from AWR   awr_loadprofile_physicalwrites.txt
    AWRawr_osstat_by_statname.sqlDisplay + hourly OS Statistics from AWR    awr_osstat_by_statname.txt
    AWRawr_parameter.sqlDisplay + database parameter changes from AWR Repository   awr_parameter.txt
    AWRawr_pga_stats_by_statname.sqlDisplay + PGA statistics   awr_pga_stats_by_statname.txt
    AWRawr_pga_stats_delta_by_statname.sqlDisplay + PGA statistics   awr_pga_stats_delta_by_statname.txt
    AWRawr_pgausage.sqlDisplay + instance level PGA usage from AWR Repository   awr_pgausage.txt
    AWRawr_report_rac.sqlGenerate + AWR Report for RAC   awr_report_rac.txt
    AWRawr_segstat.sqlDisplay + segment statistics from AWR   awr_segstat.txt
    AWRawr_service_stats.sqlDisplay + Service statistics from AWR   awr_service_stats.txt
    AWRawr_service_waits.sqlDisplay + Service Waits from AWR   awr_service_waits.txt
    AWRawr_sid_sqlids.sqlDisplay + Session's SQL IDs from AWR   awr_sid_sqlids.txt
    AWRawr_sql_hints.sqlDisplay + Hints in a SQL Statement   awr_sql_hints.txt
    AWRawr_sqlid_tree.sqlDisplay + SQL ID Heirarchy from AWR   awr_sqlid_tree.txt
    AWRawr_sqlplan_flips.sqlDisplay + all SQL Ids with degraded execution plan flips   awr_sqlplan_flips.txt
    AWRawr_sqlstats.sqlDisplay + SQLStats from AWR   awr_sqlstats.txt
    AWRawr_sqlstats_delta.sqlDisplay + SQLStats from AWR   awr_sqlstats_delta.txt
    AWRawr_sqlstats_delta_per_exec.sqlDisplay + SQLStats per execution from AWR   awr_sqlstats_delta_per_exec.txt
    AWRawr_sqlstats_per_exec.sqlDisplay + SQLStats per execution from AWR   awr_sqlstats_per_exec.txt
    AWRawr_sqlstats_per_exec_new.sqlDisplay + SQLStats per execution from AWR   awr_sqlstats_per_exec_new.txt
    AWRawr_sqltext.sqlDisplay + SQL Text from AWR repository   awr_sqltext.txt
    AWRawr_sqltext_search.sqlSearch + SQL Text from AWR repository to find SQLId   awr_sqltext_search.txt
    AWRawr_statistics.sqlDisplay + AWR Statistics values   awr_statistics.txt
    AWRawr_statistics_delta.sqlDisplay + AWR Statistics value delta   awr_statistics_delta.txt
    AWRawr_sysmetric_per_sec.sqlDisplay + system metric per sec from AWR repository   awr_sysmetric_per_sec.txt
    AWRawr_tbs.sqlDisplay + Tablespace usage history from AWR repository   awr_tbs.txt
    AWRawr_tempstats.sqlDisplay + Temporary tablespace stats from AWR Repository   awr_tempstats.txt
    AWRawr_top_segment.sqlDisplay + top segment from AWR   awr_top_segment.txt
    AWRawr_top_sql.sqlDisplay + top SQLs from AWR   awr_top_sql.txt
    AWRawr_top_sql_by_all.sqlDisplay + top SQLs from AWR - by CPU Time   awr_top_sql_by_all.txt
    AWRawr_top_sql_by_buffer_gets.sqlDisplay + top SQLs from AWR - by Buffer Gets Total   awr_top_sql_by_buffer_gets.txt
    AWRawr_top_sql_by_cpu.sqlDisplay + top SQLs from AWR - by CPU Time   awr_top_sql_by_cpu.txt
    AWRawr_top_sql_by_elapsed_time.sqlDisplay + top SQLs from AWR - by CPU Time   awr_top_sql_by_elapsed_time.txt
    AWRawr_top_sql_by_exec.sqlDisplay + top SQLs from AWR - by Execution count   awr_top_sql_by_exec.txt
    AWRawr_top_sql_by_physicalchange.sqlDisplay + top SQLs from AWR - by Buffer Gets Total   awr_top_sql_by_physicalchange.txt
    AWRawr_top_sql_by_physicalread.sqlDisplay + top SQLs from AWR - by Buffer Gets Total   awr_top_sql_by_physicalread.txt
    AWRawr_top_sql_by_physicalwrite.sqlDisplay + top SQLs from AWR - by Buffer Gets Total   awr_top_sql_by_physicalwrite.txt
    AWRawr_top_sql_by_weight.sqlDisplay + top SQLs from AWR (By Weight)   awr_top_sql_by_weight.txt
    AWRawr_top_sql_old.sqlDisplay + top SQLs from AWR   awr_top_sql_old.txt
    AWRawr_xplan.sqlDisplay + Execution plan from AWR   awr_xplan.txt
    AWRawr_xplan_diff.sqlDisplay + different in execution plan from AWR   awr_xplan_diff.txt
    AWRawr_xplan_unstable.sqlDisplay + unstable execution plan from AWR   awr_xplan_unstable.txt
    Exadata Cellcell_celldisks.sqlDisplay + Cell Configuration   cell_celldisks.txt
    Exadata Cellcell_check.sqlDisplay + Cell Configuration   cell_check.txt
    Exadata Cellcell_config.sqlDisplay + Cell Configuration   cell_config.txt
    Exadata Cellcell_griddisks.sqlDisplay + Cell Configuration   cell_griddisks.txt
    Exadata Cellcell_luns.sqlDisplay + Cell Configuration   cell_luns.txt
    Exadata Cellcell_physicaldisks.sqlDisplay + Cell Configuration   cell_physicaldisks.txt
    Exadata Cellcell_stats.sqlDisplay + Cell Configuration   cell_stats.txt
    Exadata Cellcell_status.sqlDisplay + Cell Configuration   cell_status.txt
    Data Dictionarycolumns.sqlSearch + for column_name   columns.txt
     columns_diff.sqlSearch + for column_name   columns_diff.txt
    Data Dictionarycomments.sqlDisplay + Table/Column Comments   comments.txt
     create_1_hint_sql_profile.sql     Prompts for a hint + and makes a profile out of it.   create_1_hint_sql_profile.txt
     cube_log_setting.sqlDisplay + OLAP Sessions   cube_log_setting.txt
    DataPumpdatapump_dumpfile_info.sqlDisplay + datapump job status   datapump_dumpfile_info.txt
    DataPumpdatapump_log.sqlDisplay + datapump job status   datapump_log.txt
    DataPumpdatapump_sessions.sqlDisplay + datapump sessions   datapump_sessions.txt
    DataPumpdatapump_status.sqlDisplay + datapump job status   datapump_status.txt
     db_info.sqlDisplay + DB Information   db_info.txt
     dblinks.sqlDisplay + database links   dblinks.txt
     ddlgen.sqlGenerate + Object's DDL   ddlgen.txt
     dependency.sqlSearch + for objects   dependency.txt
    Data Dictionarydesc.sqlDescribe + an object   desc.txt
    DataGuarddg_dest_status.sqlDisplay + DataGuard Destination Status   dg_dest_status.txt
    DataGuarddg_fal.sqlDisplay + breakdown of archivelogs fetched using dataguard FAL calls   dg_fal.txt
    DataGuarddg_lag.sqlDisplay + DataGuard Lag   dg_lag.txt
    DataGuarddg_mrp.sqlDisplay + MRP (Managed Recovery Process) Status   dg_mrp.txt
    DataGuarddg_rfs.sqlDisplay + Standby RFS archive log fetch details   dg_rfs.txt
    DataGuarddg_stats.sqlDisplay + DataGuard Statistics   dg_stats.txt
     dictionary_cache_effectiveness.sql    dictionary_cache_effectiveness.txt
    dNFSdnfs_channels.sqlDisplay + dNFS Channels   dnfs_channels.txt
    dNFSdnfs_files.sqlDisplay + dNFS Files   dnfs_files.txt
    dNFSdnfs_servers.sqlDisplay + dNFS Server   dnfs_servers.txt
    dNFSdnfs_stats.sqlDisplay + dNFS Files   dnfs_stats.txt
    dNFSdnfs_stats_summary.sqlDisplay + dNFS Files   dnfs_stats_summary.txt
     errors.sqlDisplay + object errors   errors.txt
     eventname.sqlDisplay + the event name   eventname.txt
     footer.sql This script is called at end of every + other script   footer.txt
     genuserdef.sql    genuserdef.txt
     genuserdef.sql    genuserdef.txt
     header.sql This script is called at start of every + other script   header.txt
     html.sqlDisplay + results in HTML   html.txt
     index_similar.sqlDisplay + Similar Tables indexes   index_similar.txt
     index_unusable.sqlDisplay + unusable indexes   index_unusable.txt
     index_usage_monitoring.sqlDisplay + unusable indexes   index_usage_monitoring.txt
     instances.sqlDisplay + all instance details in a RAC database   instances.txt
     internal_schemas.sqlDisplay + Internal Schemas   internal_schemas.txt
     invalid_objects.sqlSearch + for INVALID objects   invalid_objects.txt
     jobs.sqlDisplay + DBMS Jobs   jobs.txt
    Sessionskill_session.sqlDisplay + Session Details   kill_session.txt
    Sessionskill_session_generate.sqlGenerate + kill session list   kill_session_generate.txt
     latchname.sqlDisplay + the Latch names   latchname.txt
     latchprof.sql     Perform + high-frequency sampling on V$LATCHHOLDER   latchprof.txt
     latchprofx.sql     Perform + high-frequency sampling on V$LATCHHOLDER   latchprofx.txt
    Lockslock_type.sqlDisplays + lock types   lock_type.txt
    Lockslocked_objects.sqlDisplays + currently locked objects in database   locked_objects.txt
    Lockslocks.sqlDisplays + currently locked objects in database   locks.txt
    Lockslocks_blocking.sqlDisplays + blocking locks in database   locks_blocking.txt
     login.sql Script is run once at connection + creation time   login.txt
    Archiveloglogswitchfreq.sqlDisplay + houly and daily redolog switches by frequency   logswitchfreq.txt
    Archiveloglogswitchsize.sqlDisplay + houly and daily redolog switches by size   logswitchsize.txt
     long_sessions.sqlDisplay + long running sessions   long_sessions.txt
     longops.sqlDisplay + Long running operations   longops.txt
     metricname.sqlDisplay + the metric names   metricname.txt
     mrp.sqlDisplay + MRP (Managed Recovery Process) Status   mrp.txt
     mviewtext.sqlDisplay + view's query   mviewtext.txt
     night_cycle_job_heirarchy.sqlDisplay + Session Hierarchy   night_cycle_job_heirarchy.txt
     nls_parameters.sqlDisplay + Tablespace usage   nls_parameters.txt
     objects.sqlSearch + for objects   objects.txt
     osstatname.sqlDisplay + the OS statistic name   osstatname.txt
     parallel_servers_summary.sqlDisplay + Parallel Servers Statisitcs Summary   parallel_servers_summary.txt
     parallel_session.sqlDisplay + Session Hierarchy   parallel_session.txt
     parallel_session_summary.sqlDisplay + Parallel Session Statisitcs Summary   parallel_session_summary.txt
     parameter.sqlDisplay + all parameters   parameter.txt
     parameter_hidden.sqlDisplay + all hidden parameters   parameter_hidden.txt
     parameter_spfile.sqlDisplay + all parameters from spfile   parameter_spfile.txt
     pga_details.sqlDisplay + pga details of various sessions   pga_details.txt
     pga_memory_details.sqlDisplay + PGA Memory Details   pga_memory_details.txt
     pga_stats.sqlDisplay + PGA statistics   pga_stats.txt
     pgausage.sqlDisplay + pga usage   pgausage.txt
     pid_details.sqlDisplay + Session Details   pid_details.txt
     piddetails.sqlDisplay + Session Details   piddetails.txt
     privs.sqlDisplay + priviledges   privs.txt
     process_details.sqlDisplay + Client Process Details   process_details.txt
    Dictionaryprocs.sqlSearch + for stored procedures/packages/functions/types etc.   procs.txt
    Dictionaryprocs_args.sqlDisplay + stored procedure arguments   procs_args.txt
     profiles.sqlDisplays + database profile information   profiles.txt
     recovery_area_usage.sqlDisplay + Recovery Area Usage   recovery_area_usage.txt
     recovery_progress.sqlDisplay + DataGuard Lag   recovery_progress.txt
     recovery_progress2.sqlDisplay + DataGuard Lag   recovery_progress2.txt
     resumable.sqlDisplay + resumable sessions   resumable.txt
    RMANrman_backup_job_details.sqlDisplay + RMAN Backup job Details   rman_backup_job_details.txt
    RMAN Catalogrmancat_backup_size_daily_breakdown.sqlDisplay + RMAN Backup size for a database   rmancat_backup_size_daily_breakdown.txt
    RMAN Catalogrmancat_backup_size_history.sqlDisplay + RMAN backup size from catalog   rmancat_backup_size_history.txt
    RMAN Catalogrmancat_backup_size_overall_breakdown.sqlDisplay + RMAN Backup size for a database   rmancat_backup_size_overall_breakdown.txt
    RMAN Catalogrmancat_backup_sizes.sqlDisplay + RMAN backup size from catalog   rmancat_backup_sizes.txt
    RMAN Catalogrmancat_backups_witherrors.sqlDisplay + RMAN backup with errors   rmancat_backups_witherrors.txt
    RMAN Catalogrmancat_last_backupdate.sqlDisplay + last date of RMAN backup   rmancat_last_backupdate.txt
    RMAN Catalogrmancat_missing_arch_backups.sqlDisplay + missing archivelog backups for a database.   rmancat_missing_arch_backups.txt
     rollback_monitor.sql Monitoring rollback currently occuring + in database.   rollback_monitor.txt
     rowcount.sqlDisplay + row count in table or partition   rowcount.txt
     rsrc_plan.sqlDisplay + resource plan details   rsrc_plan.txt
     scheduler_jobs.sqlDisplay + DBMS Scheduler Jobs   scheduler_jobs.txt
     schema_size.sqlDisplay + schema sizes1 + - SchemaOwner (User % as wildcard)No + default value@schema_size + %OWN
    + @schema_size ABC
    schema_size.txt
     services.sqlDisplay + Service configuration in the database   services.txt
     services_active.sqlDisplay + Active Service configuration    services_active.txt
     services_distribution.sqlDisplay + Service Distribution among RAC instance   services_distribution.txt
     session.sqlDisplay + database sessions   session.txt
     session_active.sqlDisplay + database sessions in ACTIVE status.   session_active.txt
     session_active_tree.sqlDisplay + Session Hierarchy   session_active_tree.txt
     session_breakdown.sqlDisplay + session breakdown by inst_id   session_breakdown.txt
     sga_summary.sql    sga_summary.txt
     sga_summary.sql    sga_summary.txt
     sid_details.sqlDisplay + Session Details   sid_details.txt
     sid_sqlids.sqlDisplay + Session's SQL IDs   sid_sqlids.txt
     sid_stats.sqlDisplay + Session Statistics   sid_stats.txt
     sleep.sqlExecute + password input in a loop.   sleep.txt
    TempSpacesortsegment.sqlDisplay + Sort Segment usage   sortsegment.txt
    TempSpacesortusage.sqlDisplay + temporary space usage   sortusage.txt
    SourceCodesourcecode.sqlDisplay + view's query   sourcecode.txt
    SourceCodesourcecode_search.sqlSearch + source code   sourcecode_search.txt
    Statspacksp_bhr.sqlDisplay + load profile from STATSPACK   sp_bhr.txt
    Statspacksp_loadprofile.sqlDisplay + load profile from STATSPACK   sp_loadprofile.txt
    Statspacksp_loadprofile_persec.sqlDisplay + load profile from STATSPACK   sp_loadprofile_persec.txt
    Statspacksp_merge.sql Merge statspack from multiple sources + into single database   sp_merge.txt
    Statspacksp_merge_convert_to_partitions.sql To convert statspack tables into + partitioned tables (based on DBID).    sp_merge_convert_to_partitions.txt
    Statspacksp_merge_create_partition_tables_10g.sql Create STATSPACK repository with + partition table to    sp_merge_create_partition_tables_10g.txt
    Statspacksp_merge_create_partition_tables_9i.sql Create STATSPACK repository with + partition table to    sp_merge_create_partition_tables_9i.txt
    Statspacksp_merge_single.sql Merge statspack from multiple sources + into single database   sp_merge_single.txt
    Statspacksp_merge_split_partitions.sql To split default parition of statspack + tables based on DBID   sp_merge_split_partitions.txt
    Statspacksp_merge_sql_manual_cleanup_10g.sqlDisplay + Tablespace usage   sp_merge_sql_manual_cleanup_10g.txt
    Statspacksp_merge_sql_manual_cleanup_9i.sqlDisplay + Tablespace usage   sp_merge_sql_manual_cleanup_9i.txt
    Statspacksp_sga_sizedetails.sqlDisplay + SGA breakdown history from statspack data   sp_sga_sizedetails.txt
    Statspacksp_sql_capture_histograms.sqlDisplay + sql capture histograms (equi-width buckets) from statspack repository   sp_sql_capture_histograms.txt
    Statspacksp_top_events.sqlDisplay + top wait events from STATSPACK   sp_top_events.txt
    Statspacksp_ts_stats_10g.sqlDisplay + Tablespace IO statistics from statspack data   sp_ts_stats_10g.txt
    Statspacksp_ts_stats_9i.sqlDisplay + Tablespace IO statistics from statspack data   sp_ts_stats_9i.txt
    SQLsql_hints.sqlDisplay + Hints in a SQL Statement   sql_hints.txt
    SQLsql_monitor.sqlDisplay + SQL Monitor Report   sql_monitor.txt
    SQLsql_monitor_active.sqlDisplay + SQL Monitor Report   sql_monitor_active.txt
    SQLsql_plan_baselines.sqlDisplay + all SQL PLAN Baselines   sql_plan_baselines.txt
    SQLsql_plan_hints.sqlDisplay + Hints in a SQL Statement   sql_plan_hints.txt
    SQLsql_profile_commands.sqlSQL + Profile Commands   sql_profile_commands.txt
    SQLsql_profile_create.sqlCreate + SQL Profile   sql_profile_create.txt
    SQLsql_profile_create_fromawr.sqlCreate + SQL Profile from AWR Repository   sql_profile_create_fromawr.txt
    SQLsql_profile_create_fromcursor.sql Create SQL Profile   sql_profile_create_fromcursor.txt
    SQLsql_profile_hints.sql Create SQL Profile   sql_profile_hints.txt
    SQLsql_profiles.sqlDisplay + all SQL Profiles   sql_profiles.txt
    SQLsql_profiles_withsqlid.sqlDisplay + all SQL Profiles   sql_profiles_withsqlid.txt
    SQLsql_shared_cursor_reason.sqlDisplay + top SQL statements creating child cursors   sql_shared_cursor_reason.txt
    SQLsql_shared_cursor_top.sqlDisplay + top SQL statements creating child cursors   sql_shared_cursor_top.txt
    SQLsql_similar.sqlDisplay + similar SQLs not using bind varaibles   sql_similar.txt
    SQLsqlid_object_stats.sqlDisplay + Statistics of a table (including part   sqlid_object_stats.txt
    SQLsqlid_waitevents.sqlDisplay + all wait events for a SQL_ID from all sessions   sqlid_waitevents.txt
    SQLsqlstats.sqlDisplay + SQLStats from AWR   sqlstats.txt
     sqltext.sqlDisplay + SQL Text from AWR repository   sqltext.txt
     sqltext_search.sqlSearch + SQL Text from AWR repository to find SQLId   sqltext_search.txt
     startup.sqlDisplay + instance startup times from AWR   startup.txt
     statname.sqlDisplay + the statistic names   statname.txt
    Optimizer Statisticsstats.sqlDisplay + Statistics of a table (including part   stats.txt
    Optimizer Statisticsstats_check_incremental.sql Check if incremental stats have been + used   stats_check_incremental.txt
    Optimizer Statisticsstats_col.sqlDisplay + Statistics of a table (including part   stats_col.txt
    Optimizer Statisticsstats_gather_history.sqlDisplay + Statistics gathering operations history   stats_gather_history.txt
    Optimizer Statisticsstats_gather_history_old.sqlDisplay + Statistics gathering operations history   stats_gather_history_old.txt
    Optimizer Statisticsstats_history.sqlDisplay + table statistics history   stats_history.txt
    Optimizer Statisticsstats_missing.sqlDisplay + Statistics of a table (including part   stats_missing.txt
    Optimizer Statisticsstats_pref.sqlDisplay + statistics gathering preferences   stats_pref.txt
    Optimizer Statisticsstats_stale.sqlDisplay + STALE Statistics of a table (including part   stats_stale.txt
    Optimizer Statisticsstats_tab_pref.sqlDisplay + statistics gathering preferences   stats_tab_pref.txt
    Statspackstatspack_consolidation.sql Merge statspack from multiple sources + into single database   statspack_consolidation.txt
    Statspackstatspack_consolidation_vg.sql Merge statspack from multiple sources + into single database   statspack_consolidation_vg.txt
    Dictionarysynonym.sqlDisplay + Synonyms    synonym.txt
    Dictionarytab_details.sqlDisplay + Tables details   tab_details.txt
    Dictionarytab_indexes.sqlDisplay + Tables indexes   tab_indexes.txt
    Statisticstab_modifications.sqlDisplay + STALE Statistics of a table (including part   tab_modifications.txt
    Dictionarytab_parts.sqlDisplay + table partitions   tab_parts.txt
    Dictionarytbs.sqlDisplay + Tablespace usage   tbs.txt
    Dictionarytbs_file.sqlDisplay + datafile usage information   tbs_file.txt
     tbs_file_withouthwm.sqlDisplay + datafile usage information (without high water mark)   tbs_file_withouthwm.txt
     tempusage.sqlDisplay + temporary space usage   tempusage.txt
     top_service_by_statname.sqlDisplay + top session by statname   top_service_by_statname.txt
     top_session_by_all.sqlDisplay + top session by various statistics   top_session_by_all.txt
     top_session_by_cpu.sqlDisplay + top session by statname   top_session_by_cpu.txt
     top_session_by_statname.sqlDisplay + top session by statname   top_session_by_statname.txt
     transactions.sqlDisplays + current transactions sizes   transactions.txt
     undostat.sqlDisplay + Undo statistics   undostat.txt
     undostat_9i.sqlDisplay + Undo statistics   undostat_9i.txt
     unused_space.sqlDisplay + Unused space in a segment   unused_space.txt
     uptime.sqlDisplay + startup time for all instances   uptime.txt
     user_info.sqlDisplay + DB User Information   user_info.txt
     viewtext.sqlDisplay + view's query   viewtext.txt
     viewtext_search.sqlDisplay + view's query   viewtext_search.txt
     wait.sql Execute password input in a loop.   wait.txt
     watch.sql Execute password input in a loop.   watch.txt
     watch2.sql Execute password input in a loop.   watch2.txt
     whoami.sqlDisplay + current session's details   whoami.txt
     xplan.sqlDisplay + Execution plan from cursor cache   xplan.txt
     xplan2.sqlDisplay + Execution plan from cursor cache   xplan2.txt
     xplan_bysqltext.sqlDisplay + Execution plan from cursor cache   xplan_bysqltext.txt
    + + + + diff --git a/vg/_README.xls b/vg/_README.xls new file mode 100644 index 0000000..4e4145c Binary files /dev/null and b/vg/_README.xls differ diff --git a/vg/amm_info.sql b/vg/amm_info.sql new file mode 100644 index 0000000..ad03df8 --- /dev/null +++ b/vg/amm_info.sql @@ -0,0 +1,338 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------- +* 26-Jan-15 Vishal Gupta Renamed oper_count heading to "Resize Oper Count" +* 24-FEB-14 Vishal Gupta Modified to make instance specific columns dynamic. +* 28-MAY-12 Vishal Gupta Fixed to differentiate between instance specific +* and generic (*.param) parameter values in spfile +* 14-MAR-12 Vishal Gupta Modified to make it RAC friendly +* 15-SEP-08 Vishal Gupta Created +* +*/ + +set term on + + +define _IF_INST1_EXISTS="--" +define _IF_INST2_EXISTS="--" +define _IF_INST3_EXISTS="--" +define _IF_INST4_EXISTS="--" +define _IF_INST5_EXISTS="--" +define _IF_INST6_EXISTS="--" +define _IF_INST7_EXISTS="--" +define _IF_INST8_EXISTS="--" +define _IF_INST9_EXISTS="--" +define _IF_INST10_EXISTS="--" +define _IF_INST11_EXISTS="--" +define _IF_INST12_EXISTS="--" +define _IF_INST13_EXISTS="--" +define _IF_INST14_EXISTS="--" +define _IF_INST15_EXISTS="--" +define _IF_INST16_EXISTS="--" + +col INST1_EXISTS new_value _IF_INST1_EXISTS noprint +col INST2_EXISTS new_value _IF_INST2_EXISTS noprint +col INST3_EXISTS new_value _IF_INST3_EXISTS noprint +col INST4_EXISTS new_value _IF_INST4_EXISTS noprint +col INST5_EXISTS new_value _IF_INST5_EXISTS noprint +col INST6_EXISTS new_value _IF_INST6_EXISTS noprint +col INST7_EXISTS new_value _IF_INST7_EXISTS noprint +col INST8_EXISTS new_value _IF_INST8_EXISTS noprint +col INST9_EXISTS new_value _IF_INST9_EXISTS noprint +col INST10_EXISTS new_value _IF_INST10_EXISTS noprint +col INST11_EXISTS new_value _IF_INST11_EXISTS noprint +col INST12_EXISTS new_value _IF_INST12_EXISTS noprint +col INST13_EXISTS new_value _IF_INST13_EXISTS noprint +col INST14_EXISTS new_value _IF_INST14_EXISTS noprint +col INST15_EXISTS new_value _IF_INST15_EXISTS noprint +col INST16_EXISTS new_value _IF_INST16_EXISTS noprint + +set term off +SELECT MIN(DECODE(inst_id,1,' ', '--')) INST1_EXISTS + , MIN(DECODE(inst_id,2,' ', '--')) INST2_EXISTS + , MIN(DECODE(inst_id,3,' ', '--')) INST3_EXISTS + , MIN(DECODE(inst_id,4,' ', '--')) INST4_EXISTS + , MIN(DECODE(inst_id,5,' ', '--')) INST5_EXISTS + , MIN(DECODE(inst_id,6,' ', '--')) INST6_EXISTS + , MIN(DECODE(inst_id,7,' ', '--')) INST7_EXISTS + , MIN(DECODE(inst_id,8,' ', '--')) INST8_EXISTS + , MIN(DECODE(inst_id,9,' ', '--')) INST9_EXISTS + , MIN(DECODE(inst_id,10,' ', '--')) INST10_EXISTS + , MIN(DECODE(inst_id,11,' ', '--')) INST11_EXISTS + , MIN(DECODE(inst_id,12,' ', '--')) INST12_EXISTS + , MIN(DECODE(inst_id,13,' ', '--')) INST13_EXISTS + , MIN(DECODE(inst_id,14,' ', '--')) INST14_EXISTS + , MIN(DECODE(inst_id,15,' ', '--')) INST15_EXISTS + , MIN(DECODE(inst_id,16,' ', '--')) INST16_EXISTS + FROM gv$instance + GROUP BY version +; +set term on + +PROMPT +PROMPT ############################################################# +PROMPT ####### ####### +PROMPT ####### Automatic Memory Management Settings ####### +PROMPT ####### ####### +PROMPT ############################################################# +PROMPT + +COLUMN inst_id HEADING "Inst#" FORMAT 99999 +COLUMN name HEADING "Name" FORMAT a21 + +COLUMN current_value1 HEADING "Current" FORMAT a7 +COLUMN current_value2 HEADING "Current" FORMAT a7 +COLUMN current_value3 HEADING "Current" FORMAT a7 +COLUMN current_value4 HEADING "Current" FORMAT a7 +COLUMN current_value5 HEADING "Current" FORMAT a7 +COLUMN current_value6 HEADING "Current" FORMAT a7 +COLUMN current_value7 HEADING "Current" FORMAT a7 +COLUMN current_value8 HEADING "Current" FORMAT a7 +COLUMN current_value9 HEADING "Current" FORMAT a7 +COLUMN current_value10 HEADING "Current" FORMAT a7 +COLUMN current_value11 HEADING "Current" FORMAT a7 +COLUMN current_value12 HEADING "Current" FORMAT a7 +COLUMN current_value13 HEADING "Current" FORMAT a7 +COLUMN current_value14 HEADING "Current" FORMAT a7 +COLUMN current_value15 HEADING "Current" FORMAT a7 +COLUMN current_value16 HEADING "Current" FORMAT a7 + +COLUMN spfile_value1 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value2 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value3 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value4 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value5 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value6 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value7 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value8 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value9 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value10 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value11 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value12 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value13 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value14 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value15 HEADING "SPFile" FORMAT a7 +COLUMN spfile_value16 HEADING "SPFile" FORMAT a7 + +COLUMN end_column HEADING " " FORMAT a1 + +set colsep '|' + +set head off + SELECT '- ' +&&_IF_INST1_EXISTS || ' <---Inst 1 --->' +&&_IF_INST2_EXISTS || ' <---Inst 2 --->' +&&_IF_INST3_EXISTS || ' <---Inst 3 --->' +&&_IF_INST4_EXISTS || ' <---Inst 4 --->' +&&_IF_INST5_EXISTS || ' <---Inst 5 --->' +&&_IF_INST6_EXISTS || ' <---Inst 6 --->' +&&_IF_INST7_EXISTS || ' <---Inst 7 --->' +&&_IF_INST8_EXISTS || ' <---Inst 8 --->' + FROM DUAL; +set head on + +select RPAD(pp.name,20) name +&&_IF_INST1_EXISTS , MAX(DECODE(pp.inst_id, 1, pp.display_value,NULL)) current_value1 +&&_IF_INST1_EXISTS , MAX(DECODE(pp.inst_id, 1, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value1 +&&_IF_INST2_EXISTS , MAX(DECODE(pp.inst_id, 2, pp.display_value,NULL)) current_value2 +&&_IF_INST2_EXISTS , MAX(DECODE(pp.inst_id, 2, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value2 +&&_IF_INST3_EXISTS , MAX(DECODE(pp.inst_id, 3, pp.display_value,NULL)) current_value3 +&&_IF_INST3_EXISTS , MAX(DECODE(pp.inst_id, 3, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value3 +&&_IF_INST4_EXISTS , MAX(DECODE(pp.inst_id, 4, pp.display_value,NULL)) current_value4 +&&_IF_INST4_EXISTS , MAX(DECODE(pp.inst_id, 4, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value4 +&&_IF_INST5_EXISTS , MAX(DECODE(pp.inst_id, 5, pp.display_value,NULL)) current_value5 +&&_IF_INST5_EXISTS , MAX(DECODE(pp.inst_id, 5, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value5 +&&_IF_INST6_EXISTS , MAX(DECODE(pp.inst_id, 6, pp.display_value,NULL)) current_value6 +&&_IF_INST6_EXISTS , MAX(DECODE(pp.inst_id, 6, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value6 +&&_IF_INST7_EXISTS , MAX(DECODE(pp.inst_id, 7, pp.display_value,NULL)) current_value7 +&&_IF_INST7_EXISTS , MAX(DECODE(pp.inst_id, 7, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value7 +&&_IF_INST8_EXISTS , MAX(DECODE(pp.inst_id, 8, pp.display_value,NULL)) current_value8 +&&_IF_INST8_EXISTS , MAX(DECODE(pp.inst_id, 8, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value8 + , ' ' end_column +from gv$system_parameter pp + JOIN gv$instance i ON pp.inst_id = i.inst_id + LEFT OUTER JOIN gv$spparameter sp ON pp.inst_id = sp.inst_id AND sp.sid = i.instance_name and pp.name = sp.name + LEFT OUTER JOIN gv$spparameter sp_generic ON sp_generic.inst_id = pp.inst_id AND sp_generic.sid = '*' and sp_generic.name = pp.name +WHERE ( pp.name in ('memory_target','memory_max_target' + ,'sga_target','sga_max_size' + ,'lock_sga','pre_page_sga','use_large_pages' + ,'pga_aggregate_target' + ,'java_pool_size','shared_pool_size','large_pool_size' + ,'db_cache_size' + ) + ) +GROUP BY pp.name +UNION ALL +-- Get Host physical memory +select RPAD(os.stat_name,20) name +&&_IF_INST1_EXISTS , MAX(DECODE(os.inst_id, 1, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value1 +&&_IF_INST1_EXISTS , NULL spfile_value1 +&&_IF_INST2_EXISTS , MAX(DECODE(os.inst_id, 2, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value2 +&&_IF_INST2_EXISTS , NULL spfile_value2 +&&_IF_INST3_EXISTS , MAX(DECODE(os.inst_id, 3, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value3 +&&_IF_INST3_EXISTS , NULL spfile_value3 +&&_IF_INST4_EXISTS , MAX(DECODE(os.inst_id, 4, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value4 +&&_IF_INST4_EXISTS , NULL spfile_value4 +&&_IF_INST5_EXISTS , MAX(DECODE(os.inst_id, 5, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value5 +&&_IF_INST5_EXISTS , NULL spfile_value5 +&&_IF_INST6_EXISTS , MAX(DECODE(os.inst_id, 6, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value6 +&&_IF_INST6_EXISTS , NULL spfile_value6 +&&_IF_INST7_EXISTS , MAX(DECODE(os.inst_id, 7, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value7 +&&_IF_INST7_EXISTS , NULL spfile_value7 +&&_IF_INST8_EXISTS , MAX(DECODE(os.inst_id, 8, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value8 +&&_IF_INST8_EXISTS , NULL spfile_value8 + , ' ' end_column +from gv$osstat os +where os.stat_name = 'PHYSICAL_MEMORY_BYTES' +GROUP BY os.stat_name +ORDER BY 1 +/ + + + +set head off + SELECT '- ' +&&_IF_INST9_EXISTS || ' <---Inst 9 --->' +&&_IF_INST10_EXISTS || ' <---Inst 10--->' +&&_IF_INST11_EXISTS || ' <---Inst 11--->' +&&_IF_INST12_EXISTS || ' <---Inst 12--->' +&&_IF_INST13_EXISTS || ' <---Inst 13--->' +&&_IF_INST14_EXISTS || ' <---Inst 14--->' +&&_IF_INST15_EXISTS || ' <---Inst 15--->' +&&_IF_INST16_EXISTS || ' <---Inst 16--->' + FROM DUAL; +set head on + +select RPAD(pp.name,20) name +&&_IF_INST9_EXISTS , MAX(DECODE(pp.inst_id, 9, pp.display_value,NULL)) current_value9 +&&_IF_INST9_EXISTS , MAX(DECODE(pp.inst_id, 9, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value9 +&&_IF_INST10_EXISTS , MAX(DECODE(pp.inst_id, 10, pp.display_value,NULL)) current_value10 +&&_IF_INST10_EXISTS , MAX(DECODE(pp.inst_id, 10, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value10 +&&_IF_INST11_EXISTS , MAX(DECODE(pp.inst_id, 11, pp.display_value,NULL)) current_value11 +&&_IF_INST11_EXISTS , MAX(DECODE(pp.inst_id, 11, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value11 +&&_IF_INST12_EXISTS , MAX(DECODE(pp.inst_id, 12, pp.display_value,NULL)) current_value12 +&&_IF_INST12_EXISTS , MAX(DECODE(pp.inst_id, 12, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value12 +&&_IF_INST13_EXISTS , MAX(DECODE(pp.inst_id, 13, pp.display_value,NULL)) current_value13 +&&_IF_INST13_EXISTS , MAX(DECODE(pp.inst_id, 13, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value13 +&&_IF_INST14_EXISTS , MAX(DECODE(pp.inst_id, 14, pp.display_value,NULL)) current_value14 +&&_IF_INST14_EXISTS , MAX(DECODE(pp.inst_id, 14, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value14 +&&_IF_INST15_EXISTS , MAX(DECODE(pp.inst_id, 15, pp.display_value,NULL)) current_value15 +&&_IF_INST15_EXISTS , MAX(DECODE(pp.inst_id, 15, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value15 +&&_IF_INST16_EXISTS , MAX(DECODE(pp.inst_id, 16, pp.display_value,NULL)) current_value16 +&&_IF_INST16_EXISTS , MAX(DECODE(pp.inst_id, 16, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value16 + , ' ' end_column +from gv$system_parameter pp + JOIN gv$instance i ON pp.inst_id = i.inst_id + LEFT OUTER JOIN gv$spparameter sp ON pp.inst_id = sp.inst_id AND sp.sid = i.instance_name and pp.name = sp.name + LEFT OUTER JOIN gv$spparameter sp_generic ON sp_generic.inst_id = pp.inst_id AND sp_generic.sid = '*' and sp_generic.name = pp.name +WHERE ( pp.name in ('memory_target','memory_max_target' + ,'sga_target','sga_max_size' + ,'lock_sga','pre_page_sga','use_large_pages' + ,'pga_aggregate_target' + ,'java_pool_size','shared_pool_size','large_pool_size' + ) + ) + AND i.inst_id > 8 +GROUP BY pp.name +UNION ALL +-- Get Host physical memory +select RPAD(os.stat_name,20) name +&&_IF_INST9_EXISTS , MAX(DECODE(os.inst_id, 9, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value9 +&&_IF_INST9_EXISTS , NULL spfile_value9 +&&_IF_INST10_EXISTS , MAX(DECODE(os.inst_id, 10, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value10 +&&_IF_INST10_EXISTS , NULL spfile_value10 +&&_IF_INST11_EXISTS , MAX(DECODE(os.inst_id, 11, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value11 +&&_IF_INST11_EXISTS , NULL spfile_value11 +&&_IF_INST12_EXISTS , MAX(DECODE(os.inst_id, 12, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value12 +&&_IF_INST12_EXISTS , NULL spfile_value12 +&&_IF_INST13_EXISTS , MAX(DECODE(os.inst_id, 13, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value13 +&&_IF_INST13_EXISTS , NULL spfile_value13 +&&_IF_INST14_EXISTS , MAX(DECODE(os.inst_id, 14, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value14 +&&_IF_INST14_EXISTS , NULL spfile_value14 +&&_IF_INST15_EXISTS , MAX(DECODE(os.inst_id, 15, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value15 +&&_IF_INST15_EXISTS , NULL spfile_value15 +&&_IF_INST16_EXISTS , MAX(DECODE(os.inst_id, 16, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value16 +&&_IF_INST16_EXISTS , NULL spfile_value16 + , ' ' end_column +from gv$osstat os +where os.stat_name = 'PHYSICAL_MEMORY_BYTES' + AND os.inst_id > 8 +GROUP BY os.stat_name +ORDER BY 1 +/ + + + +set colsep " " + + +COLUMN component HEADING "Component" FORMAT a24 +COLUMN user_specified_size HEADING "User|Specified|(MB)" FORMAT 99,999,999 +COLUMN current_size HEADING "Current|(MB)" FORMAT 99,999,999 +COLUMN free_size HEADING "Free|(MB)" FORMAT 99,999,999 +COLUMN min_size HEADING "Min|(MB)" FORMAT 99,999,999 +COLUMN max_size HEADING "Max|(MB)" FORMAT 99,999,999 +COLUMN GRANULE_SIZE HEADING "Granule|(MB)" FORMAT 9,999 +COLUMN last_oper_type HEADING "Last|Operation|Type" FORMAT a12 +COLUMN oper_count HEADING "Resize|Oper|Count" FORMAT 99,999 +COLUMN last_oper_time HEADING "Last|Operation|Time" FORMAT a18 + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF current_size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF free_size FORMAT 99,999,999 ON REPORT + +BREAK ON inst_id SKIP 1 + +SELECT c.inst_id + , c.component + , ROUND(c.user_specified_size / power(1024,2)) user_specified_size + , ROUND(c.current_size / power(1024,2)) current_size + , ROUND(DECODE(c.component + ,'PGA Target',NVL(p.value,0) + , ROUND(NVL(s.bytes,0)) + ) + / power(1024,2) + ) free_size + , ROUND(c.min_size / power(1024,2)) min_size + , ROUND(c.max_size / power(1024,2)) max_size + , ROUND(c.GRANULE_SIZE / power(1024,2)) GRANULE_SIZE + , c.oper_count + , c.last_oper_type + , to_char(c.last_oper_time,'DD-MON-YY hh24:mi:Ss') last_oper_time +FROM gv$memory_dynamic_components c + LEFT OUTER JOIN GV$SGASTAT s ON s.inst_id = c.inst_id AND s.pool = c.component AND s.name = 'free memory' + LEFT OUTER JOIN gv$pgastat p ON p.inst_id = c.inst_id AND p.name = 'total freeable PGA memory' +WHERE c.current_size <> 0 +ORDER BY c.inst_id, c.component +/ + + + +undefine _IF_INST1_EXISTS +undefine _IF_INST2_EXISTS +undefine _IF_INST3_EXISTS +undefine _IF_INST4_EXISTS +undefine _IF_INST5_EXISTS +undefine _IF_INST6_EXISTS +undefine _IF_INST7_EXISTS +undefine _IF_INST8_EXISTS +undefine _IF_INST9_EXISTS +undefine _IF_INST10_EXISTS +undefine _IF_INST11_EXISTS +undefine _IF_INST12_EXISTS +undefine _IF_INST13_EXISTS +undefine _IF_INST14_EXISTS +undefine _IF_INST15_EXISTS +undefine _IF_INST16_EXISTS + + +@@footer diff --git a/vg/apex_queries.sql b/vg/apex_queries.sql new file mode 100644 index 0000000..2ee0232 --- /dev/null +++ b/vg/apex_queries.sql @@ -0,0 +1,75 @@ +-------------------------------------------------------------------------------------------- +-- Apex Activity Logs +-------------------------------------------------------------------------------------------- +select * From apex_040100.WWV_FLOW_ACTIVITY_LOG1$ order by TIME_STAMP desc; +select * From apex_040100.WWV_FLOW_ACTIVITY_LOG2$ order by TIME_STAMP desc; + + +--------------- +-- Hourly Hits +--------------- +select TRUNC(al.time_stamp,'HH24'), count(1) +From (select * from apex_040100.WWV_FLOW_ACTIVITY_LOG1$ + union all + select * from apex_040100.WWV_FLOW_ACTIVITY_LOG2$ + )al +group by TRUNC(al.time_stamp,'HH24') +order by TRUNC(al.time_stamp,'HH24') desc; + + + +----------------------------------- +-- Apex Mail test +----------------------------------- +declare + l_workspace_id apex_workspaces.workspace_id%type; +begin + SELECT app.workspace_id + into l_workspace_id + FROM apex_applications app + WHERE app.application_id = 508; + wwv_flow_api.set_security_group_id(l_workspace_id); + + apex_mail.send(p_to => 'vishal@vishalgupta.com (Vishal Gupta),email@domain.com (Firstname Surname)', + p_from => 'from@domain.com', + p_body => 'Testing', + p_body_html => 'This is testing', + p_subj => 'Testing Email', + p_cc => 'cc@domain.com', + p_bcc => null); + APEX_MAIL.PUSH_QUEUE; +end; +/ + +----------------------------------- +-- Apex Mail Log +----------------------------------- +SELECT * from APEX_040100.WWV_FLOW_MAIL_LOG ORDER BY last_updated_on desc; +SELECT * from APEX_040100.WWV_FLOW_MAIL_QUEUE ORDER BY last_updated_on desc; +SELECT * from APEX_040100.WWV_FLOW_MAIL_ATTACHMENTS ORDER BY last_updated_on desc; + + + +SELECT last_updated_on, last_updated_by, mail_from, mail_to, mail_bcc, mail_cc, mail_subj from APEX_040100.WWV_FLOW_MAIL_LOG ORDER BY LAST_UPDATED_ON DESC; + + + +-------------------------------------------------------------------------------------------- +-- Apex email settings +-------------------------------------------------------------------------------------------- + +- Login to Apex INTERNAL workspace using admin user +- Manage Instances +- Instance settings +- Click on Email tab + SMTP Host Address + SMTP Host Port + SMTP Authentication Username + SMTP Authentication Password + Use SSL/TLS + Administration Email Address + Notification Email Address + Maximum Emails per Workspace + + + diff --git a/vg/archive_dest.sql b/vg/archive_dest.sql new file mode 100644 index 0000000..ff7bc5d --- /dev/null +++ b/vg/archive_dest.sql @@ -0,0 +1,102 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Archive Destination Configuration +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 21-Apr-15 Vishal Gupta Conditional multiple Oracle version output +* 09-May-14 Vishal Gupta Output layout changes +* 19-Mar-14 Vishal Gupta Created +* +*/ + +PROMPT ***************************************************************** +PROMPT * Archive Destinations +PROMPT ***************************************************************** + +COLUMN dest_id HEADING "Dest|Id" FORMAT 99 +COLUMN dest_name HEADING "Dest Name" FORMAT a20 +COLUMN db_unique_name HEADING "UniqueName" FORMAT a15 +COLUMN destination HEADING "Destination" FORMAT a25 +COLUMN name_space HEADING "Name|Space" FORMAT a8 +COLUMN compression HEADING "Compress" FORMAT a8 +COLUMN archiver HEADING "Arch|iver" FORMAT a4 +COLUMN transmit_mode HEADING "Transmit|Mode" +COLUMN affirm HEADING "AFFIRM" FORMAT a6 + +COLUMN reopen_secs HEADING "Reopen|(sec)" FORMAT 999999 +COLUMN delay_mins HEADING "Delay|(min)" FORMAT 99999 +COLUMN max_connections HEADING "Max|Conns" FORMAT 99999 +COLUMN net_timeout HEADING "Net|Time|Out|(sec)" FORMAT 9999 +COLUMN alternate HEADING "Alertnate" FORMAT a10 +COLUMN dependency HEADING "Dependency" FORMAT a10 + +COLUMN register HEADING "Regi|ster" FORMAT a4 +COLUMN log_sequence HEADING "LogSeq" FORMAT 9999999 + +COLUMN async_blocks HEADING "ASYNC|Blocks" FORMAT 999999 +COLUMN valid_now HEADING "Valid|Now" FORMAT a7 +COLUMN verify HEADING "Verify" FORMAT a6 + +COLUMN applied_scn HEADING "Applied SCN" FORMAT 99999999999999 +COLUMN applied_time HEADING "Applied Time" FORMAT a18 + +COLUMN fail_date HEADING "FailDate" FORMAT a15 +COLUMN fail_sequence HEADING "FailSeq" FORMAT 9999999 +COLUMN failure_count HEADING "Fail|Count" FORMAT 99999 +COLUMN max_failure HEADING "Max|Fail" FORMAT 99999 +COLUMN error HEADING "Error" FORMAT a30 + +SELECT ad.dest_id + , ad.dest_name +&&_IF_ORA_10gR1_OR_HIGHER , ad.db_unique_name + , ad.destination + , ad.status + , ad.schedule + , ad.target +&&_IF_ORA_10gR1_OR_HIGHER , ad.valid_type +&&_IF_ORA_10gR1_OR_HIGHER , ad.valid_role + , ad.binding + , ad.name_space +&&_IF_ORA_11gR1_OR_HIGHER , ad.compression + , ad.archiver + , ad.transmit_mode + , ad.affirm + FROM v$archive_dest ad +WHERE status <> 'INACTIVE' +; + +SELECT ad.dest_id + , ad.delay_mins +&&_IF_ORA_10gR2_OR_HIGHER , ad.max_connections + , ad.max_failure + , ad.reopen_secs + , ad.net_timeout + , ad.process + , ad.register + , ad.log_sequence + , ad.alternate + , ad.dependency + , ad.async_blocks + , ad.type +&&_IF_ORA_10gR1_OR_HIGHER , ad.valid_now +&&_IF_ORA_10gR1_OR_HIGHER , ad.verify +&&_IF_ORA_11202_OR_HIGHER , ad.applied_scn +--&&_IF_ORA_11202_OR_HIGHER , TO_CHAR(SCN_TO_TIMESTAMP(ad.applied_scn),'DD-MON-YY HH24:MI') applied_time +&&_IF_ORA_11202_OR_HIGHER , TO_CHAR(ad.fail_date,'DD-MON-YY HH24:MI') fail_date + , ad.fail_sequence + , ad.failure_count + , ad.error + FROM v$archive_dest ad +WHERE status <> 'INACTIVE' +; + + + +@@footer diff --git a/vg/archivelog_gap.sql b/vg/archivelog_gap.sql new file mode 100644 index 0000000..c8f97c6 --- /dev/null +++ b/vg/archivelog_gap.sql @@ -0,0 +1,109 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Display archivelog gap +* Parameter : 1 - Thread Number (Default '%') +* 2 - From Sequence (Default '%') +* 3 - To Sequence (Default '%') +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Apr-10 Vishal Gupta Created +* +*/ + + + + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE thread="&&1" +DEFINE from_sequence="&2" +DEFINE to_sequence="&3" + +set term off +COLUMN _thread NEW_VALUE thread NOPRINT +COLUMN _from_sequence NEW_VALUE from_sequence NOPRINT +COLUMN _to_sequence NEW_VALUE to_sequence NOPRINT + +SELECT DECODE('&&thread','','%','&&thread') "_thread" + , DECODE('&&from_sequence','','%','&&from_sequence') "_from_sequence" + , DECODE('&&to_sequence','','%','&&to_sequence') "_to_sequence" +FROM DUAL; +set term on + + +/************************************ +* M A I N S C R I P T +************************************/ + +COLUMN sequence# HEADING "SEQUENCE#" FORMAT 99999999 + +/* +* Not using WITH clause (aka CTE aka sub-query refactorying +* , as it does not work on standby database in MOUNT mode and not in OPEN mode. +*/ + +select minmax.thread# + , i.sequence# + minmax.min_sequence# - 1 sequence# + --, l.thread# + --, l.sequence# + , l.applied + , l.deleted + , l.status + , l.archived + , NVL(TO_CHAR(l.first_time,'DD-MON-YY HH24:MI:SS'),' Missing ') first_time + , TO_CHAR(l.next_time,'DD-MON-YY HH24:MI:SS') next_time + , l.fal + , l.creator + , l.registrar + , TO_CHAR(l.completion_time,'DD-MON-YY HH24:MI:SS') completion_time +from (select rownum sequence# + from dual + connect by level <= 1500 + ) i + join (select dest_id + , thread# + , max(DECODE(applied, 'YES',sequence#,0)) - 3 min_sequence# + , max(sequence#) max_sequence# + --, min(first_time) + --, max(first_time) + From v$archived_log + where dest_id = 1 + AND thread# like '&&thread' + and first_time > trunc(sysdate - 1) + group by dest_id, thread# + order by thread# + ) minmax on 1 = 1 + LEFT OUTER JOIN v$archived_log l on l.thread# = minmax.thread# and l.sequence# = i.sequence# + minmax.min_sequence# - 1 +WHERE 1=1 + --AND (l.thread# IS NULL OR l.sequence# IS NULL) + and i.sequence# + minmax.min_sequence# - 1 <= minmax.max_sequence# + AND minmax.thread# like '&&thread' + AND i.sequence# + minmax.min_sequence# - 1 + BETWEEN DECODE('&&from_sequence','%',minmax.min_sequence#,'&&from_sequence') + AND DECODE('&&to_sequence','%',minmax.max_sequence#,'&&to_sequence') +order by minmax.thread# + , i.sequence# +--order by l.first_change# +; + + +SELECT l.thread# + , TO_CHAR(sysdate,'DD-MON-YY HH24:MI:SS') current_time + , TO_CHAR(max(l.next_time) ,'DD-MON-YY HH24:MI:SS') max_next_time + FROM v$archived_log l +GROUP BY l.thread# +ORDER BY l.thread# +; + + +@@footer \ No newline at end of file diff --git a/vg/archivelog_gap2.sql b/vg/archivelog_gap2.sql new file mode 100644 index 0000000..a339363 --- /dev/null +++ b/vg/archivelog_gap2.sql @@ -0,0 +1,95 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Display archivelog gap +* Parameter : 1 - Thread Number (Default '%') +* 2 - From Sequence (Default '%') +* 3 - To Sequence (Default '%') +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Apr-10 Vishal Gupta Created +* +*/ + + + + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE thread="&&1" +DEFINE from_sequence="&2" +DEFINE to_sequence="&3" + +set term off +COLUMN _thread NEW_VALUE thread NOPRINT +COLUMN _from_sequence NEW_VALUE from_sequence NOPRINT +COLUMN _to_sequence NEW_VALUE to_sequence NOPRINT + +SELECT DECODE('&&thread','','%','&&thread') "_thread" + , DECODE('&&from_sequence','','%','&&from_sequence') "_from_sequence" + , DECODE('&&to_sequence','','%','&&to_sequence') "_to_sequence" +FROM DUAL; +set term on + + +/************************************ +* M A I N S C R I P T +************************************/ + +COLUMN sequence# HEADING "SEQUENCE#" FORMAT 99999999 + +select minmax.thread# + , i.sequence# + minmax.min_sequence# - 1 sequence# + --, l.thread# + --, l.sequence# + , l.applied + , l.deleted + , l.status + , l.archived + , NVL(TO_CHAR(l.first_time,'DD-MON-YY HH24:MI:SS'),' Missing ') first_time + , TO_CHAR(l.next_time,'DD-MON-YY HH24:MI:SS') next_time + , l.fal + , l.creator + , l.registrar + , TO_CHAR(l.completion_time,'DD-MON-YY HH24:MI:SS') completion_time +from (select rownum sequence# + from dual + connect by level <= 1500 + ) i + join (select dest_id + , thread# + , max(DECODE(applied, 'YES',sequence#,0)) - 3 min_sequence# + , max(sequence#) max_sequence# + --, min(first_time) + --, max(first_time) + From v$archived_log + where dest_id = 1 + AND thread# like '&&thread' + and first_time > trunc(sysdate - 1) + group by dest_id, thread# + order by thread# + ) minmax on 1 = 1 + LEFT OUTER JOIN v$archived_log l on l.thread# = minmax.thread# and l.sequence# = i.sequence# + minmax.min_sequence# - 1 +WHERE 1=1 + --AND (l.thread# IS NULL OR l.sequence# IS NULL) + and i.sequence# + minmax.min_sequence# - 1 <= minmax.max_sequence# + AND minmax.thread# like '&&thread' + AND i.sequence# + minmax.min_sequence# - 1 + BETWEEN DECODE('&&from_sequence','%',minmax.min_sequence#,'&&from_sequence') + AND DECODE('&&to_sequence','%',minmax.max_sequence#,'&&to_sequence') +order by minmax.thread# + , i.sequence# +--order by l.first_change# +; + + +@@footer \ No newline at end of file diff --git a/vg/archivelog_size_hourly.sql b/vg/archivelog_size_hourly.sql new file mode 100644 index 0000000..4881fe2 --- /dev/null +++ b/vg/archivelog_size_hourly.sql @@ -0,0 +1,134 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display hourly and daily redolog switches by size +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Dec-14 Vishal Gupta Added number of days as input parameter +* 18-Mar-14 Vishal Gupta Added separator columns for daily total +* 27-Feb-12 Vishal Gupta Formated the output and parameterized size granuality +* 05-Aug-04 Vishal Gupta First Draft +* +*/ +set term on + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE days +DEFINE days="&&1" + +set term off +COLUMN _DAYS NEW_VALUE DAYS NOPRINT + +SELECT UPPER(DECODE('&&days','','15','&&days')) "_DAYS" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE size_label=GB +DEFINE size_divider="1024/1024/1024" +DEFINE round_precision=2 + + +PROMPT +PROMPT ************************************************************************ +PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Size) +PROMPT * (Hourly and Daily figures in &&size_label) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Days = '&&days' +PROMPT ************************************************************************ +PROMPT +PROMPT - <-------------------------------------------------------- hourly total -----------------------------------------------> +/* + Total h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 + Date Day (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) + --------- --- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +*/ + +SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000 + +COLUMN separator HEADING "!|!|!" FORMAT A1 + +COLUMN "Date" HEADING "Date" FORMAT A9 +COLUMN "Total" HEADING "Day|Total|(&size_label)" FORMAT 99999 +COLUMN "Day" HEADING "Day" FORMAT A3 +COLUMN h0 HEADING "h0|(&size_label)" FORMAT 9999 +COLUMN h1 HEADING "h1|(&size_label)" FORMAT 9999 +COLUMN h2 HEADING "h2|(&size_label)" FORMAT 9999 +COLUMN h3 HEADING "h3|(&size_label)" FORMAT 9999 +COLUMN h4 HEADING "h4|(&size_label)" FORMAT 9999 +COLUMN h5 HEADING "h5|(&size_label)" FORMAT 9999 +COLUMN h6 HEADING "h6|(&size_label)" FORMAT 9999 +COLUMN h7 HEADING "h7|(&size_label)" FORMAT 9999 +COLUMN h8 HEADING "h8|(&size_label)" FORMAT 9999 +COLUMN h9 HEADING "h9|(&size_label)" FORMAT 9999 +COLUMN h10 HEADING "h10|(&size_label)" FORMAT 9999 +COLUMN h11 HEADING "h11|(&size_label)" FORMAT 9999 +COLUMN h12 HEADING "h12|(&size_label)" FORMAT 9999 +COLUMN h13 HEADING "h13|(&size_label)" FORMAT 9999 +COLUMN h14 HEADING "h14|(&size_label)" FORMAT 9999 +COLUMN h15 HEADING "h15|(&size_label)" FORMAT 9999 +COLUMN h16 HEADING "h16|(&size_label)" FORMAT 9999 +COLUMN h17 HEADING "h17|(&size_label)" FORMAT 9999 +COLUMN h18 HEADING "h18|(&size_label)" FORMAT 9999 +COLUMN h19 HEADING "h19|(&size_label)" FORMAT 9999 +COLUMN h20 HEADING "h20|(&size_label)" FORMAT 9999 +COLUMN h21 HEADING "h21|(&size_label)" FORMAT 9999 +COLUMN h22 HEADING "h22|(&size_label)" FORMAT 9999 +COLUMN h23 HEADING "h23|(&size_label)" FORMAT 9999 + + + + +SELECT to_char(trunc(COMPLETION_TIME),'DD-Mon-YY') "Date", + to_char(COMPLETION_TIME, 'Dy') "Day", + '|' separator, + ROUND(SUM(((BLOCKS * BLOCK_SIZE)/&size_divider))) "Total", + '|' separator, + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'00',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h0", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'01',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h1", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'02',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h2", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'03',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h3", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'04',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h4", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'05',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h5", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'06',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h6", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'07',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h7", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'08',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h8", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'09',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h9", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'10',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h10", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'11',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h11", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'12',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h12", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'13',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h13", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'14',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h14", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'15',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h15", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'16',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h16", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'17',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h17", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'18',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h18", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'19',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h19", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'20',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h20", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'21',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h21", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'22',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h22", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'23',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h23" + from v$archived_log + where standby_dest = 'NO' + AND CREATOR IN ('ARCH' , 'FGRD','LGWR','RFS') + AND completion_time > sysdate - &days + group by trunc(COMPLETION_TIME), to_char(COMPLETION_TIME, 'Dy') + order by trunc(COMPLETION_TIME) +/ + +@@footer diff --git a/vg/archivelog_size_hourly_detail.sql b/vg/archivelog_size_hourly_detail.sql new file mode 100644 index 0000000..baa47cf --- /dev/null +++ b/vg/archivelog_size_hourly_detail.sql @@ -0,0 +1,96 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display hourly and daily redolog switches by size +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Dec-14 Vishal Gupta Added number of days as input parameter +* 18-Mar-14 Vishal Gupta Added separator columns for daily total +* 27-Feb-12 Vishal Gupta Formated the output and parameterized size granuality +* 05-Aug-04 Vishal Gupta First Draft +* +*/ +set term on + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE days +DEFINE days="&&1" + +set term off +COLUMN _DAYS NEW_VALUE DAYS NOPRINT + +SELECT UPPER(DECODE('&&days','','2','&&days')) "_DAYS" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE size_label=MB +DEFINE size_divider="1024/1024" +--DEFINE size_label=GB +--DEFINE size_divider="1024/1024/1024" +DEFINE round_precision=2 + + +PROMPT +PROMPT ************************************************************************ +PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Size) +PROMPT * (Hourly and Daily figures in &&size_label) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Days = '&&days' +PROMPT ************************************************************************ +PROMPT + +SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000 + +COLUMN separator HEADING "!|!|!" FORMAT A1 + +COLUMN "Date" HEADING "Date" FORMAT A12 +COLUMN "Day" HEADING "Day" FORMAT A3 +COLUMN "Total" HEADING "Hourly|Total|(&size_label)" FORMAT 9,999,999 +COLUMN "M00" HEADING "Minutes|01-10 |(&size_label) " FORMAT 999,999 +COLUMN "M10" HEADING "Minutes|11-20 |(&size_label) " FORMAT 999,999 +COLUMN "M20" HEADING "Minutes|21-30 |(&size_label) " FORMAT 999,999 +COLUMN "M30" HEADING "Minutes|31-40 |(&size_label) " FORMAT 999,999 +COLUMN "M40" HEADING "Minutes|41-50 |(&size_label) " FORMAT 999,999 +COLUMN "M50" HEADING "Minutes|51-60 |(&size_label) " FORMAT 999,999 + + + + +SELECT TO_CHAR(trunc(COMPLETION_TIME,'HH24'),'DD-MON-YY HH24') "Date", + to_char(COMPLETION_TIME, 'Dy') "Day", + '|' separator, + ROUND(SUM(((BLOCKS * BLOCK_SIZE)/&&size_divider))) "Total", + '|' separator, + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 01 AND 10 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M00", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 11 AND 20 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M10", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 21 AND 30 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M20", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 31 AND 40 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M30", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 41 AND 50 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M40", + ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 51 AND 60 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M50", + '|' separator + from v$archived_log + where standby_dest = 'NO' + and CREATOR IN ('ARCH' , 'FGRD') + AND completion_time > sysdate - &days +group by trunc(COMPLETION_TIME,'HH24'), to_char(COMPLETION_TIME, 'Dy') +order by trunc(COMPLETION_TIME,'HH24') +; + + +@@footer diff --git a/vg/ash.sql b/vg/ash.sql new file mode 100644 index 0000000..86c0b03 --- /dev/null +++ b/vg/ash.sql @@ -0,0 +1,123 @@ +@@header + +PROMPT ****** NOT FINISHED *********** + +/* +* +* Author : Vishal Gupta +* Purpose : Display session from ASH +* Version : +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Sep-12 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" +DEFINE days="&&3" + + +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _days NEW_VALUE days NOPRINT + +set term on +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&days','','7','&&days') "_days" +FROM DUAL; +set term off + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=9,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + + + +DEFINE COUNT_FORMAT=9,999,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" + +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 + +--DEFINE TIME_DIVIDER="0.001" +--DEFINE TIME_HEADING="msec" +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" + + +Prompt +Prompt ****************************************************************** +Prompt * A S H I N F O +Prompt * +PROMPT * Input Parameters +PROMPT * - +Prompt ****************************************************************** + + +SELECT ash.sample_time + , ash.inst_id + , u.username + , sn.name service_name + , ash.machine + , ash.program + , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_exec_start + , ash.top_sql_id + , ash.module + , ash.action + , ash.event + FROM gv$active_session_history ash + , dba_users u + , dba_services sn + WHERE ash.service_hash = sn.name_hash + AND ash.user_id = u.user_id + AND ash.sample_time > systimestamp - 5/24 +-- and ash.service_hash = '1859414386' +-- and ash.sql_id like '9m4qqj5uzzn3k' +-- AND ash.top_level_sql_id LIKE '%' + and u.username like '%ATTRIB%' +-- and upper(ash.machine) like upper('%beta%') +-- AND upper(sn.name) like upper('SYS$USERS') -- service_name +-- and upper(ash.program) like upper('%SQL%') +-- and upper(ash.module) like upper('%PiNT%') +-- ORDER BY s.end_interval_time + ORDER BY ash.sample_time + +@@footer diff --git a/vg/ash_info.sql b/vg/ash_info.sql new file mode 100644 index 0000000..f21fc17 --- /dev/null +++ b/vg/ash_info.sql @@ -0,0 +1,65 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display ASH Info +* Compatibility : 11.2 and above +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Aug-12 Vishal Gupta First cut +* 27-Sep-12 Vishal Gupta Updated output formatting +* +*/ + +PROMPT +PROMPT ******************* +PROMPT * ASH Info +PROMPT ******************* + + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN total_size HEADING "Total|Size" FORMAT 999,999,999 +COLUMN fixed_size HEADING "Fixed|Size" FORMAT 999,999,999 +COLUMN sampling_interval HEADING "Sampling|Interval|(ms)" FORMAT 99999 +COLUMN avg_sample_time HEADING "Avg|Sample|Time|(ms)" FORMAT 99999 +COLUMN disk_filter_ratio HEADING "Disk|Filter|Ratio" FORMAT 99 +COLUMN oldest_sample_time HEADING "Oldest|SampleTime" FORMAT a18 +COLUMN latest_sample_time HEADING "Latest|SampleTime" FORMAT a18 +COLUMN duration HEADING "Duration" FORMAT a12 +COLUMN sampled_bytes HEADING "Sampled|MB" FORMAT 999,999,999 +COLUMN sample_count HEADING "Sample|Count" FORMAT 999,999,999 +COLUMN sampler_elapsed_time HEADING "Sampler|Elapsed|Time|(ms)" FORMAT 999,999,999,999 +COLUMN awr_flush_count HEADING "AWR|Flush|Count" FORMAT 999,999 +COLUMN awr_flush_emergency_count HEADING "AWR|Emer|Flush|Count" FORMAT 999,999 +COLUMN awr_flush_bytes HEADING "AWR|Flush|MB" FORMAT 999,999 + +SELECT i.inst_id + , i.total_size + , i.fixed_size + , i.sampling_interval + , ROUND(i.sampler_elapsed_time/i.sample_count) avg_sample_time + , i.disk_filter_ratio + , to_char(i.oldest_sample_time,'DD-MON-YY HH24:MI:SS') oldest_sample_time + , to_char(i.latest_sample_time,'DD-MON-YY HH24:MI:SS') latest_sample_time + , REPLACE(SUBSTR((i.latest_sample_time - i.oldest_sample_time) + ,1,INSTR((i.latest_sample_time - i.oldest_sample_time),'.')-1 + ) + ,'+0000000','+' + ) duration + , i.sample_count + , ROUND(i.sampled_bytes/1024/1024) sampled_bytes + , i.sampler_elapsed_time + , i.awr_flush_count + , i.awr_flush_emergency_count + , ROUND(i.awr_flush_bytes/1024/1024) awr_flush_bytes + FROM gv$ash_info i +ORDER BY i.inst_id +; + +@@footer diff --git a/vg/ash_report.sql b/vg/ash_report.sql new file mode 100644 index 0000000..4a02314 --- /dev/null +++ b/vg/ash_report.sql @@ -0,0 +1,98 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Generate ASH report for instances passed +* Parameters : 1 - From Time ( YYYY-MM-DD HH24:MI:SS format) +* 2 - To Time ( YYYY-MM-DD HH24:MI:SS format) +* 3 - Instance Number ( % for all or comma separated list of instance numbers). +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 17-Feb-14 Vishal Gupta Changed order of input parameters +* 18Feb-12 Vishal Gupta Created +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE INSTANCE_LIST + +DEFINE FROM_TIMESTAMP="&&1" +DEFINE TO_TIMESTAMP="&&2" +DEFINE INSTANCE_LIST="&&3" + + + +COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT +COLUMN _TO_TIME NEW_VALUE TO_TIMESTAMP NOPRINT +COLUMN _INSTANCE_LIST NEW_VALUE INSTANCE_LIST NOPRINT + +set term off +SELECT DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1/24,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP','',to_char(sysdate ,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIME" + , DECODE('&&INSTANCE_LIST','','%','&&INSTANCE_LIST') "_INSTANCE_LIST" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * A S H R E P O R T (Text) +PROMPT * +PROMPT * Input Parameters +PROMPT * - From Timestamp = '&&FROM_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format, default sysdate - 1/24) +PROMPT * - To Timestamp = '&&TO_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format, default sysdate)) +PROMPT * - Instance List = '&&INSTANCE_LIST' ( % for ALL or comma separated list of instance numbers) +PROMPT *********************************************************************** + +set pages 0 + +/* + +DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_TEXT( + l_dbid IN VARCHAR2(1023), + l_inst_num IN VARCHAR2, + l_btime IN DATE, + l_etime IN DATE, + l_options IN NUMBER DEFAULT 0, -- Not currently used by Oracle + l_slot_width IN NUMBER DEFAULT 0, -- Not currently used by Oracle + l_sid IN NUMBER DEFAULT NULL, -- v$session.sid + l_sql_id IN VARCHAR2 DEFAULT NULL, -- V$SQL.SQL_ID (Wildcard allowed) + l_wait_class IN VARCHAR2 DEFAULT NULL, -- v$event_name.wait_class (Wildcard allowed) + l_service_hash IN NUMBER DEFAULT NULL, -- v$active_services.name_hash + l_module IN VARCHAR2 DEFAULT NULL, -- v$session.module (Wildcard allowed) + l_action IN VARCHAR2 DEFAULT NULL, -- v$session.action (Wildcard allowed) + l_client_id IN VARCHAR2 DEFAULT NULL, -- v$session.client_identifier (Wildcard allowed) + l_plsql_entry IN VARCHAR2 DEFAULT NULL, + l_data_src IN NUMBER DEFAULT 0) + RETURN awrrpt_text_type_table PIPELINED; + +*/ + +SELECT * from table(dbms_workload_repository.ash_global_report_text + ( l_dbid => (select dbid from v$database) + , l_inst_num => DECODE(upper('&INSTANCE_LIST'),'%',NULL,'&INSTANCE_LIST') + , l_btime => TO_DATE('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + , l_etime => TO_DATE('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + , l_sid => NULL + , l_sql_id => NULL + , l_wait_class => NULL + , l_service_hash => NULL + , l_module => NULL + , l_action => NULL + , l_client_id => NULL + ) + ); + +UNDEFINE NO_OF_HOURS +UNDEFINE INSTANCE_LIST + +@@footer diff --git a/vg/ash_report_html.sql b/vg/ash_report_html.sql new file mode 100644 index 0000000..fff9a02 --- /dev/null +++ b/vg/ash_report_html.sql @@ -0,0 +1,136 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Generate ASH report for instances passed +* Parameters : 1 - From Time (Optional) ( YYYY-MM-DD HH24:MI:SS format) - Default is (sysdate - 1/24) +* 2 - To Time (Optional) ( YYYY-MM-DD HH24:MI:SS format) - Default is sysdate +* 2 - INST_ID (Optional) ( % for all or comma separated list of instance numbers). +* 4 - ServiceName (Optional) Default is NULL +* 5 - SID (Optional) Default is NULL +* 6 - SQL_ID (Optional) Default is NULL +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 17-Feb-14 Vishal Gupta Changed order of input parameters +* 28-Jan-15 Vishal Gupta Added SID, SQL_ID, ServiceName input parameters +* 04-Oct-12 Vishal Gupta Added default input parameter values +* 18-Feb-12 Vishal Gupta Created +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE INSTANCE_LIST +UNDEFINE SERVICE_NAME +UNDEFINE SID +UNDEFINE SQL_ID + +DEFINE FROM_TIMESTAMP="&&1" +DEFINE TO_TIMESTAMP="&&2" +DEFINE INSTANCE_LIST="&&3" +DEFINE SERVICE_NAME="&&4" +DEFINE SID="&&5" +DEFINE SQL_ID="&&6" + + + +COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT +COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT +COLUMN _INSTANCE_LIST NEW_VALUE INSTANCE_LIST NOPRINT +COLUMN _SID NEW_VALUE SID NOPRINT +COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT +COLUMN _SERVICE_NAME NEW_VALUE SERVICE_NAME NOPRINT +COLUMN _SERVICE_HASH NEW_VALUE SERVICE_HASH NOPRINT + +set term off +SELECT DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1/24,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP','',to_char(sysdate ,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&INSTANCE_LIST','','%','&&INSTANCE_LIST') "_INSTANCE_LIST" + , DECODE('&&SERVICE_NAME','','%','&&SERVICE_NAME') "_SERVICE_NAME" + , DECODE('&&SERVICE_HASH','','%','&&SERVICE_HASH') "_SERVICE_HASH" + , DECODE('&&SID','','%','&&SID') "_SID" + , DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID" +FROM DUAL; + +set term on + +set term off +SELECT s.name_hash "_SERVICE_HASH" + FROM dba_services s +WHERE s.name = '&&SERVICE_NAME'; + +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * A S H R E P O R T (HTML) +PROMPT * +PROMPT * Input Parameters +PROMPT * - From Timestamp = '&&FROM_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format) - Default is (sysdate - 1/24) +PROMPT * - To Timestamp = '&&TO_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format) - Default is (sysdate) +PROMPT * - Instance List = '&&INSTANCE_LIST' ( % for ALL or comma separated list of instance numbers) - Default is % +PROMPT * - SERVICE_NAME = '&&SERVICE_NAME' - Default is % +PROMPT * - SID = '&&SID' - Default is % +PROMPT * - SQL_ID = '&&SQL_ID' - Default is % +PROMPT *********************************************************************** + +set pages 0 + +/* + +DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_TEXT( + l_dbid IN VARCHAR2(1023), + l_inst_num IN VARCHAR2, + l_btime IN DATE, + l_etime IN DATE, + l_options IN NUMBER DEFAULT 0, -- Not currently used by Oracle + l_slot_width IN NUMBER DEFAULT 0, -- Not currently used by Oracle + l_sid IN NUMBER DEFAULT NULL, -- v$session.sid + l_sql_id IN VARCHAR2 DEFAULT NULL, -- V$SQL.SQL_ID (Wildcard allowed) + l_wait_class IN VARCHAR2 DEFAULT NULL, -- v$event_name.wait_class (Wildcard allowed) + l_service_hash IN NUMBER DEFAULT NULL, -- v$active_services.name_hash + l_module IN VARCHAR2 DEFAULT NULL, -- v$session.module (Wildcard allowed) + l_action IN VARCHAR2 DEFAULT NULL, -- v$session.action (Wildcard allowed) + l_client_id IN VARCHAR2 DEFAULT NULL, -- v$session.client_identifier (Wildcard allowed) + l_plsql_entry IN VARCHAR2 DEFAULT NULL, + l_data_src IN NUMBER DEFAULT 0) + RETURN awrrpt_text_type_table PIPELINED; + +*/ + +set term off +spool ash_report.html + SELECT * from table(dbms_workload_repository.ash_global_report_html + ( l_dbid => (select dbid from v$database) + , l_inst_num => DECODE(upper('&INSTANCE_LIST'),'%',NULL,'&INSTANCE_LIST') + , l_btime => TO_DATE('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + , l_etime => TO_DATE('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + , l_sid => DECODE('&&SID','%',NULL,'&&SID') + , l_sql_id => DECODE('&&SQL_ID','%',NULL,'&&SQL_ID') + , l_wait_class => NULL + , l_service_hash => DECODE('&&SERVICE_HASH','%',NULL,'&&SERVICE_HASH') + , l_module => NULL + , l_action => NULL + , l_client_id => NULL + ) + ); + +spool off +set term on +PROMPT +PROMPT Report generated as ash_report.html file. It will automatically open in your default browser. + +set pages 5000 +host ash_report.html + +@@footer diff --git a/vg/ash_sessions.sql b/vg/ash_sessions.sql new file mode 100644 index 0000000..42593e4 --- /dev/null +++ b/vg/ash_sessions.sql @@ -0,0 +1,132 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session details from ASH +* Compatibility : 10.1 and above +* Parameters : 1 - Number of hours (Default 1 hour) +* 2 - SQLExec Duration (in Seconds) (Default 60 sec) +* 3 - DB User Name (Default '%') +* 4 - Program (Default '%') +* 5 - Service Name (Default '%') +* 6 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-MAR-15 Vishal Gupta Modified input parameter and renamed script +* from ash_sid_details.sql to ash_sessions.sql +* 03-FEB-14 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE HOURS +UNDEFINE DURATION +UNDEFINE USERNAME +UNDEFINE PROGRAM +UNDEFINE SERVICE_NAME +UNDEFINE WHERECLAUSE + +DEFINE HOURS="&&1" +DEFINE DURATION="&&2" +DEFINE USERNAME="&&3" +DEFINE PROGRAM="&&4" +DEFINE SERVICE_NAME="&&5" +DEFINE WHERECLAUSE="&&6" + +COLUMN _HOURS NEW_VALUE HOURS NOPRINT +COLUMN _DURATION NEW_VALUE DURATION NOPRINT +COLUMN _USERNAME NEW_VALUE USERNAME NOPRINT +COLUMN _PROGRAM NEW_VALUE PROGRAM NOPRINT +COLUMN _SERVICE_NAME NEW_VALUE SERVICE_NAME NOPRINT +COLUMN _SERVICE_NAME NEW_VALUE SERVICE_NAME NOPRINT + +set term off +SELECT DECODE(UPPER('&&HOURS'),'','1',UPPER('&&HOURS')) "_HOURS" + , DECODE(UPPER('&&DURATION'),'','60',UPPER(DURATION)) "_DURATION" + , DECODE(UPPER('&&USERNAME'),'','%',UPPER('&&USERNAME')) "_USERNAME" + , DECODE(UPPER('&&PROGRAM'),'','%',UPPER('&&PROGRAM')) "_PROGRAM" + , DECODE(UPPER('&&SERVICE_NAME'),'','%',UPPER('&&SERVICE_NAME')) "_SERVICE_NAME" +FROM DUAL; + +set term on +/***********************************/ + + +PROMPT *************************************************** +PROMPT * ASH SQL Details +PROMPT * +PROMPT * Input Parameter: +PROMPT * Number of Hours = "&&HOURS" +PROMPT * SQLExec Duration = "&&DURATION" seconds +PROMPT * DB UserName = "&&USERNAME" +PROMPT * Program = "&&PROGRAM" +PROMPT * ServiceName = "&&SERVICE_NAME" +PROMPT * WhereClause = "&&WHERECLAUSE" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN sample_time_min FORMAT a18 +COLUMN sample_time_max FORMAT a18 +COLUMN username HEADING "DBUser" FORMAT a18 +COLUMN service_name HEADING "ServiceName" FORMAT a21 +COLUMN program HEADING "Program" FORMAT a25 TRUNCATE +COLUMN machine HEADING "Machine" FORMAT a25 TRUNCATE +COLUMN module HEADING "Module" FORMAT a25 TRUNCATE + +-- Get the SQL Statements from ASH +SELECT /*+ parallel(ash, 10) */ + --ash.sql_exec_id, + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max + , u.username + , s.name service_name + , NVL(ash_parent.program,ash.program) program + , ash.machine + , ash.module + FROM gv$active_session_history ash + JOIN dba_users u ON u.user_id = ash.user_id + JOIN dba_services s ON s.name_hash = ash.service_hash + LEFT OUTER JOIN gv$active_session_history ash_parent + ON ash_parent.inst_id = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + WHERE ash.sql_id IS NOT NULL +-- AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID' +-- AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID' +-- AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL' + AND ash.sample_time > sysdate - (&&HOURS/24) + AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24)) + AND ash.sql_exec_id IS NOT NULL + AND (cast(ash.sample_time as date) - ash.sql_exec_start)* 24*60*60 > '&&DURATION' +-- AND ash.user_id = (select user_id from dba_users where username LIKE '&&USERNAME') +-- AND ash.service_hash = (select name_hash from dba_services where name LIKE '&&SERVICE_NAME') + AND ash.program LIKE '&&PROGRAM' + &&WHERECLAUSE +GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , u.username + , s.name + , NVL(ash_parent.program,ash.program) + , ash.machine + , ash.module +ORDER BY MIN(ash.sample_time) ASC + , max(ash.sample_time) asc +; + + +@@footer diff --git a/vg/ash_sid_details.sql b/vg/ash_sid_details.sql new file mode 100644 index 0000000..58a277e --- /dev/null +++ b/vg/ash_sid_details.sql @@ -0,0 +1,116 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session details from ASH +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* 3 - Serial# (Default %) +* 4 - Number of hours (Default 24) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 31-Dec-15 Vishal Gupta Added duration in the output +* 03-FEB-14 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE SID +UNDEFINE INST_ID +UNDEFINE SERIAL +UNDEFINE HOURS + +DEFINE SID="&&1" +DEFINE INST_ID="&&2" +DEFINE SERIAL="&&3" +DEFINE HOURS="&&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN _SID NEW_VALUE SID NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT +COLUMN _HOURS NEW_VALUE HOURS NOPRINT + +set term off +SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID" + , DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID" + , DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL" + , DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS" +FROM DUAL; +set term on +/***********************************/ + + +PROMPT *************************************************** +PROMPT * ASH SQL Details +PROMPT * +PROMPT * Input Parameter: +PROMPT * SID = "&&SID" +PROMPT * Instance ID = "&&INST_ID" +PROMPT * Serial# = "&&SERIAL" +PROMPT * Number of Hours = "&&HOURS" +PROMPT * WhereClause = "&&WHERECLAUSE" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN sample_time_min FORMAT a18 +COLUMN sample_time_max FORMAT a18 +COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12 +COLUMN username HEADING "DBUser" FORMAT a18 +COLUMN service_name HEADING "ServiceName" FORMAT a21 +COLUMN program HEADING "Program" FORMAT a25 TRUNCATE +COLUMN machine HEADING "Machine" FORMAT a25 TRUNCATE + +-- Get the SQL Statements from ASH +SELECT /*+ parallel(ash, 10) */ + --ash.sql_exec_id, + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max + , SUBSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+') + ,1,INSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+'),'.')-1 + ) duration + , u.username + , s.name service_name + , NVL(ash_parent.program,ash.program) program + , ash.machine + FROM gv$active_session_history ash + JOIN dba_users u ON u.user_id = ash.user_id + JOIN dba_services s ON s.name_hash = ash.service_hash + LEFT OUTER JOIN gv$active_session_history ash_parent + ON ash_parent.inst_id = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + WHERE NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID' + AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID' + AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL' + AND ash.sample_time > sysdate - (&&HOURS/24) + AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24)) + &&WHERECLAUSE +GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , u.username + , s.name + , NVL(ash_parent.program,ash.program) + , ash.machine +ORDER BY MIN(ash.sample_time) ASC + , max(ash.sample_time) asc +; + + +@@footer diff --git a/vg/ash_sid_events.sql b/vg/ash_sid_events.sql new file mode 100644 index 0000000..402a970 --- /dev/null +++ b/vg/ash_sid_events.sql @@ -0,0 +1,122 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session's events from ASH +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* 3 - Serial# (Default %) +* 4 - Number of hours (Default 24) +* 5 - WhereClause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-MAY-14 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE SID +UNDEFINE INST_ID +UNDEFINE SERIAL +UNDEFINE HOURS +UNDEFINE SQL_ID +UNDEFINE WHERECLAUSE + +DEFINE SID="&&1" +DEFINE INST_ID="&&2" +DEFINE SERIAL="&&3" +DEFINE HOURS="&&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN _SID NEW_VALUE SID NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT +COLUMN _HOURS NEW_VALUE HOURS NOPRINT + +set term off +SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID" + , DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID" + , DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL" + , DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS" +FROM DUAL; +set term on +/***********************************/ + + +PROMPT *************************************************** +PROMPT * ASH Session Events +PROMPT * +PROMPT * Input Parameter: +PROMPT * SID = "&&SID" +PROMPT * Instance ID = "&&INST_ID" +PROMPT * Serial# = "&&SERIAL" +PROMPT * Number of Hours = "&&HOURS" +PROMPT * Where Clause = "&&WHERECLAUSE" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a20 +COLUMN sql_exec_end FORMAT a20 +COLUMN duration FORMAT a15 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a15 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN event HEADING "Event" FORMAT a40 TRUNCATE +COLUMN event_count HEADING "EventCount" FORMAT 99999999999 + +BREAK ON session_id ON inst_id ON session_serial# ON sql_exec_start ON sql_id ON sql_child_number ON sql_plan_hash_value + +-- Get the session events from ASH +SELECT /*+ parallel(ash, 10) */ + --ash.sql_exec_id, + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , count(1) event_count + , ash.event + FROM gv$active_session_history ash + WHERE ash.sql_id IS NOT NULL + AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID' + AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID' + AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL' + AND ash.sample_time > sysdate - (&&HOURS/24) + AND ash.sql_exec_id IS NOT NULL + &&WHERECLAUSE + GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , ash.sql_exec_id + , ash.sql_exec_start +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.force_matching_signature + , ash.event + ORDER BY --max(ash.sample_time) asc + --, + NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC + , ash.sql_id + , count(1) desc +; + + +@@footer diff --git a/vg/ash_sid_list.sql b/vg/ash_sid_list.sql new file mode 100644 index 0000000..220368a --- /dev/null +++ b/vg/ash_sid_list.sql @@ -0,0 +1,127 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session's from ASH +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* 3 - Serial# (Default %) +* 4 - Number of hours (Default 24) +* 5 - SQL_ID (Default %) +* 6 - WhereClause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-SEP-14 Vishal Gupta Removed filter for SQL_EXEC_START IS NOT NULL +* 03-FEB-14 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE SID +UNDEFINE INST_ID +UNDEFINE SERIAL +UNDEFINE HOURS +UNDEFINE SQL_ID +UNDEFINE WHERECLAUSE + +DEFINE SID="&&1" +DEFINE INST_ID="&&2" +DEFINE SERIAL="&&3" +DEFINE HOURS="&&4" +DEFINE SQL_ID="&&5" +DEFINE WHERECLAUSE="&&6" + +COLUMN _SID NEW_VALUE SID NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT +COLUMN _HOURS NEW_VALUE HOURS NOPRINT +COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT + +set term off +SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID" + , DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID" + , DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL" + , DECODE(UPPER('&&HOURS'),'','0.01',UPPER('&&HOURS')) "_HOURS" + , DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID" +FROM DUAL; +set term on +/***********************************/ + + +PROMPT *************************************************** +PROMPT * ASH SQL Details +PROMPT * +PROMPT * Input Parameter: +PROMPT * SID = "&&SID" +PROMPT * Instance ID = "&&INST_ID" +PROMPT * Serial# = "&&SERIAL" +PROMPT * Number of Hours = "&&HOURS" +PROMPT * SQL Id = "&&SQL_ID" +PROMPT * Where Clause = "&&WHERECLAUSE" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN sample_time_min FORMAT a18 +COLUMN sample_time_max FORMAT a18 +COLUMN username HEADING "DBUser" FORMAT a20 +COLUMN service_name HEADING "ServiceName" FORMAT a22 +COLUMN program HEADING "Program" FORMAT a25 TRUNCATE +COLUMN machine HEADING "Machine" FORMAT a25 +COLUMN pga_allocated HEADING "PGA(MB)" FORMAT 999,999 + +-- Get the SQL Statements from ASH +SELECT /*+ parallel(ash, 10) */ + --ash.sql_exec_id, + TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max + , NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , u.username + , s.name service_name + , NVL(ash_parent.program,ash.program) program + , SUBSTR(NVL(ash_parent.machine,ash.machine) + ,1,DECODE(INSTR(NVL(ash_parent.machine,ash.machine),'.')-1,-1,LENGTH(NVL(ash_parent.machine,ash.machine))) + ) machine + , ROUND(MAX(ash.pga_allocated + NVL(ash_parent.pga_allocated,0))/power(1024,2)) pga_allocated + FROM gv$active_session_history ash + JOIN dba_users u ON u.user_id = ash.user_id + JOIN dba_services s ON s.name_hash = ash.service_hash + LEFT OUTER JOIN gv$active_session_history ash_parent + ON ash_parent.inst_id = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + WHERE ash.sql_id IS NOT NULL + AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID' + AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID' + AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL' + AND ash.sql_id LIKE '&&SQL_ID' + AND ash.sample_time > sysdate - (&&HOURS/24) + AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24)) + --AND ash.sql_exec_start IS NOT NULL + &&WHERECLAUSE +GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , u.username + , s.name + , NVL(ash_parent.program,ash.program) + , SUBSTR(NVL(ash_parent.machine,ash.machine),1,DECODE(INSTR(NVL(ash_parent.machine,ash.machine),'.')-1,-1,LENGTH(NVL(ash_parent.machine,ash.machine)))) +ORDER BY MIN(ash.sample_time) ASC + , max(ash.sample_time) asc +; + + +@@footer diff --git a/vg/ash_sid_sqlids.sql b/vg/ash_sid_sqlids.sql new file mode 100644 index 0000000..a74e001 --- /dev/null +++ b/vg/ash_sid_sqlids.sql @@ -0,0 +1,229 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session's SQL IDs from ASH +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* 3 - Serial# (Default %) +* 4 - Number of hours (Default 24) +* 5 - SQL_ID (Default %) +* 6 - WhereClause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-JUL-15 Vishal Gupta Added logic to sum up temp/page space for all parallel slaves +* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parameter +* 28-JUN-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE SID +UNDEFINE INST_ID +UNDEFINE SERIAL +UNDEFINE HOURS +UNDEFINE SQL_ID +UNDEFINE WHERECLAUSE +UNDEFINE WHERECLAUSE2 +UNDEFINE HAVINGCLAUSE + +DEFINE SID="&&1" +DEFINE INST_ID="&&2" +DEFINE SERIAL="&&3" +DEFINE HOURS="&&4" +DEFINE SQL_ID="&&5" +DEFINE WHERECLAUSE="&&6" +DEFINE WHERECLAUSE2="&&7" +DEFINE HAVINGCLAUSE="&&8" + +COLUMN _SID NEW_VALUE SID NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT +COLUMN _HOURS NEW_VALUE HOURS NOPRINT +COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT + +set term off +SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID" + , DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID" + , DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL" + , DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS" + , DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID" +FROM DUAL; +set term on +/***********************************/ + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +DEFINE COUNT_FORMAT=99,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + + +DEFINE BYTES_FORMAT=99,999 +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +/************************************/ + + + +PROMPT *************************************************** +PROMPT * ASH SQL Ids +PROMPT * +PROMPT * Input Parameter: +PROMPT * SID = "&&SID" +PROMPT * Instance ID = "&&INST_ID" +PROMPT * Serial# = "&&SERIAL" +PROMPT * Number of Hours = "&&HOURS" +PROMPT * SQL Id = "&&SQL_ID" +PROMPT * Where Clause = "&&WHERECLAUSE" +PROMPT * Where Clause2 = "&&WHERECLAUSE2" +PROMPT * Having Clause = "&&HAVINGCLAUSE" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a18 +COLUMN sql_exec_end FORMAT a18 +COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN phyread_requests HEADING "Phy|Read|Reqs|(&&COUNT_HEADING)" FORMAT 999999 +COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(&&COUNT_HEADING)" FORMAT 999999 +COLUMN phyread HEADING "Phy|Read|(&&BYTES_HEADING)" FORMAT 9999 +COLUMN phywrite HEADING "Phy|Write|(&&BYTES_HEADING)" FORMAT 9999 +COLUMN interconnect_io HEADING "Inter|Connect|IO|(&&BYTES_HEADING)" FORMAT 9999 +COLUMN pga_allocated HEADING "PGA|(&&BYTES_HEADING)" FORMAT 999.00 +COLUMN temp_space_allocated HEADING "Temp|Space|(&&BYTES_HEADING)" FORMAT 9999.00 + +-- Get the SQL Statements from ASH +SELECT + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end + , SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000','') + ,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000',''),'.')-1 + ) duration +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + --, ash.sql_exec_id + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value +&&_IF_ORA_11202_OR_HIGHER , max(current_dop) current_dop + , ash.force_matching_signature + , ash.top_level_sql_id +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_requests)/&&COUNT_DIVIDER) phyread_requests +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_requests)/&&COUNT_DIVIDER) phywrite_requests +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/&&BYTES_DIVIDER) phyread +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/&&BYTES_DIVIDER) phywrite +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/&&BYTES_DIVIDER) interconnect_io +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.pga_allocated)/&&BYTES_DIVIDER,2) pga_allocated +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.temp_space_allocated)/&&BYTES_DIVIDER,2) temp_space_allocated +FROM +( + SELECT /*+ parallel(ash, 10) LEADING(ash) */ + ash.session_id + , ash.inst_id + , ash.session_serial# + , ash.qc_session_id + , ash.qc_instance_id + , ash.qc_session_serial# + , NVL(ash.sql_exec_start,MIN(ash.sample_time)) sql_exec_start + , max(ash.sample_time) sample_time +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.sql_exec_id + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value +&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop + , ash.force_matching_signature + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_requests) delta_read_io_requests +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_requests) delta_write_io_requests +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_bytes) delta_read_io_bytes +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_bytes) delta_write_io_bytes +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_interconnect_io_bytes) delta_interconnect_io_bytes +&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.pga_allocated) pga_allocated +&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.temp_space_allocated) temp_space_allocated + FROM gv$active_session_history ash + LEFT OUTER JOIN gv$active_session_history ash_parent + ON ash_parent.inst_id = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + AND ash_parent.sample_time > sysdate - (&&HOURS/24) + WHERE ash.sql_id IS NOT NULL + AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID' + AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID' + AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL' + AND NVL(ash.sql_id,' ') LIKE '&&SQL_ID' + AND ash.sample_time > sysdate - (&&HOURS/24) + AND ash.sql_exec_id IS NOT NULL + &&WHERECLAUSE &&WHERECLAUSE2 + GROUP BY ash.session_id + , ash.inst_id + , ash.session_serial# + , ash.qc_session_id + , ash.qc_instance_id + , ash.qc_session_serial# + , ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.force_matching_signature +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) +) ash +WHERE 1=1 + GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + --, ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.force_matching_signature +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.top_level_sql_id + &&HAVINGCLAUSE + --having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 20 -- Physical Read + Write GBs + --having (SUM(ash.delta_read_io_bytes) ) / power(1024,3) > 100 -- Physical Write GBs + --having (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 100 -- Interconnect IO GBs + --having (SUM(ash.pga_allocated) ) / power(1024,3) > 2 -- PGA GBs + --having (SUM(ash.temp_space_allocated) ) / power(1024,3) > 10 -- Temp Space GBs + ORDER BY --max(ash.sample_time) asc + --, + max(ash.sample_time) asc + , NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC +; + + +@@footer diff --git a/vg/ash_temp_usage.sql b/vg/ash_temp_usage.sql new file mode 100644 index 0000000..312f3c4 --- /dev/null +++ b/vg/ash_temp_usage.sql @@ -0,0 +1,212 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display tempspace usage from ASH +* Compatibility : 10.1 and above +* Parameters : 1 - Number of hours (Default 24) +* 2 - SPACE_MB (Default 500MB) +* 3 - TEMPORARY_TABLESPACE (Default %) +* 4 - WhereClause +* 5 - WhereClause2 +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-JUL-16 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE HOURS +UNDEFINE SPACE_MB +UNDEFINE TEMP_TABLESPACE +UNDEFINE WHERECLAUSE +UNDEFINE WHERECLAUSE2 + +DEFINE HOURS="&&1" +DEFINE SPACE_MB="&&2" +DEFINE TEMP_TABLESPACE="&&3" +DEFINE WHERECLAUSE="&&4" +DEFINE WHERECLAUSE2="&&5" + +COLUMN _HOURS NEW_VALUE HOURS NOPRINT +COLUMN _SPACE_MB NEW_VALUE SPACE_MB NOPRINT +COLUMN _TEMP_TABLESPACE NEW_VALUE TEMP_TABLESPACE NOPRINT + +set term off +SELECT DECODE('&&HOURS' ,'','24' ,'&&HOURS') "_HOURS" + , DECODE('&&SPACE_MB' ,'','500','&&SPACE_MB') "_SPACE_MB" + , DECODE('&&TEMP_TABLESPACE','','%' ,UPPER('&&TEMP_TABLESPACE')) "_TEMP_TABLESPACE" +FROM DUAL; +set term on +/***********************************/ + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +DEFINE COUNT_FORMAT=99,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + + +DEFINE BYTES_FORMAT=99,999 +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +/************************************/ + + + +PROMPT *************************************************** +PROMPT * ASH - High Temp space using SQL statements +PROMPT * +PROMPT * Input Parameter: +PROMPT * Number of Hours = "&&HOURS" +PROMPT * Space Threshold (MB) = "&&SPACE_MB" +PROMPT * Temporary Tablespace = "&&TEMP_TABLESPACE" +PROMPT * Where Clause = "&&WHERECLAUSE" +PROMPT * Where Clause2 = "&&WHERECLAUSE2" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a18 +COLUMN sql_exec_end FORMAT a18 +COLUMN duration FORMAT a12 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN phyread_requests HEADING "Phy|Read|Reqs|(&&COUNT_HEADING)" FORMAT 999999 +COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(&&COUNT_HEADING)" FORMAT 999999 +COLUMN phyread HEADING "Phy|Read|(&&BYTES_HEADING)" FORMAT 9999 +COLUMN phywrite HEADING "Phy|Write|(&&BYTES_HEADING)" FORMAT 9999 +COLUMN interconnect_io HEADING "Inter|Connect|IO|(&&BYTES_HEADING)" FORMAT 9999 +COLUMN pga_allocated HEADING "PGA|(&&BYTES_HEADING)" FORMAT 999.00 +COLUMN temp_space_allocated HEADING "Temp|Space|(&&BYTES_HEADING)" FORMAT 9999.00 +COLUMN temp_tbs HEADING "Temp TBS" FORMAT A30 + +-- Get the SQL Statements from ASH +SELECT + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end + , SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000','') + ,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000',''),'.')-1 + ) duration + , (select temporary_tablespace from dba_users where user_id = ash.user_id) temp_tbs +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.temp_space_allocated)/&&BYTES_DIVIDER,2) temp_space_allocated +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.pga_allocated)/&&BYTES_DIVIDER,2) pga_allocated +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_requests)/&&COUNT_DIVIDER) phyread_requests +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_requests)/&&COUNT_DIVIDER) phywrite_requests +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/&&BYTES_DIVIDER) phyread +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/&&BYTES_DIVIDER) phywrite +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/&&BYTES_DIVIDER) interconnect_io +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + --, ash.sql_exec_id + , ash.sql_id +-- , ash.sql_child_number +-- , ash.sql_plan_hash_value +--&&_IF_ORA_11202_OR_HIGHER , max(current_dop) current_dop +-- , ash.force_matching_signature +-- , ash.top_level_sql_id +FROM +( + SELECT /*+ parallel(ash, 10) LEADING(ash) */ + ash.session_id + , ash.inst_id + , ash.session_serial# + , ash.qc_session_id + , ash.qc_instance_id + , ash.qc_session_serial# + , NVL(ash.sql_exec_start,MIN(ash.sample_time)) sql_exec_start + , max(ash.sample_time) sample_time +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.user_id + , ash.sql_exec_id + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value +&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop + , ash.force_matching_signature + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_requests) delta_read_io_requests +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_requests) delta_write_io_requests +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_bytes) delta_read_io_bytes +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_bytes) delta_write_io_bytes +&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_interconnect_io_bytes) delta_interconnect_io_bytes +&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.pga_allocated) pga_allocated +&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.temp_space_allocated) temp_space_allocated + FROM gv$active_session_history ash + LEFT OUTER JOIN gv$active_session_history ash_parent + ON ash_parent.inst_id = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + AND ash_parent.sample_time > sysdate - (&&HOURS/24) + WHERE ash.sql_id IS NOT NULL + AND ash.sample_time > sysdate - (&&HOURS/24) + AND ('&&TEMP_TABLESPACE' = '%' + OR ('&&TEMP_TABLESPACE' != '%' + AND ash.user_id IN (select user_id from dba_users where temporary_tablespace LIKE '&&TEMP_TABLESPACE') + ) + ) + AND ash.sql_exec_id IS NOT NULL + &&WHERECLAUSE &&WHERECLAUSE2 + GROUP BY ash.session_id + , ash.inst_id + , ash.session_serial# + , ash.qc_session_id + , ash.qc_instance_id + , ash.qc_session_serial# + , ash.user_id + , ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.force_matching_signature +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) +) ash +WHERE 1=1 + GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , ash.user_id + , ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.force_matching_signature +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.top_level_sql_id + HAVING MAX(ash.temp_space_allocated)/power(1024,2) > &&SPACE_MB -- Temp Space MBs + ORDER BY max(ash.sample_time) asc + , NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC +; + + +@@footer diff --git a/vg/ash_top_actions.sql b/vg/ash_top_actions.sql new file mode 100644 index 0000000..ea30643 --- /dev/null +++ b/vg/ash_top_actions.sql @@ -0,0 +1,82 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top actions from ASH +* Parameters : 1 - Number of MINUTES (Default 5min)) +* 2 - Top Row Count Default 10) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Apr-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE MINUTES +UNDEFINE TOPROWCOUNT +UNDEFINE INST_ID + +DEFINE MINUTES="&&1" +DEFINE TOPROWCOUNT="&&2" +DEFINE INST_ID='&&3' + + +set term off +COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT +COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES" + , DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +from dual; + +set term on + + +PROMPT ***************************************************************** +PROMPT * ASH - Top &&TOPROWCOUNT Active Actions (Over Last &&MINUTES min) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Minutes = '&&MINUTES' +PROMPT * - Top Row Count = '&&TOPROWCOUNT' +PROMPT * - Instance ID = '&&INST_ID' +PROMPT ***************************************************************** + + +COLUMN action HEADING "Action" FORMAT a40 +COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99 +COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999 + +WITH ash as + (SELECT /*+ NO_MERGE */ + ash.action + , count(1) session_count + FROM gv$active_session_history ash + WHERE ash.sample_time > systimestamp - (&&MINUTES/(24*60)) + AND ash.session_type <> 'BACKGROUND' + AND ash.inst_id LIKE '&&INST_ID' + GROUP BY ash.action + ) +, ash_total as + (SELECT /*+ NO_MERGE */ SUM(session_count) session_total + FROM ash + ) +SELECT * FROM ( +SELECT ash.action + , LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent + , ash.session_count + FROM ash , ash_total + ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc + ) + WHERE ROWNUM <= &&TOPROWCOUNT +; + +@@footer diff --git a/vg/ash_top_activity.sql b/vg/ash_top_activity.sql new file mode 100644 index 0000000..ad923cb --- /dev/null +++ b/vg/ash_top_activity.sql @@ -0,0 +1,66 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top activity from ASH +* Parameters : 1 - Number of MINUTES (Default 5min)) +* 2 - Top Row Count Default 10) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Apr-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE MINUTES +UNDEFINE TOPROWCOUNT +UNDEFINE INST_ID + +DEFINE MINUTES="&&1" +DEFINE TOPROWCOUNT="&&2" +DEFINE INST_ID='&&3' + + +set term off +COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT +COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES" + , DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +from dual; + +set term on + + +PROMPT ***************************************************************** +PROMPT * ASH - Top Activity +PROMPT * +PROMPT * Input Parameters +PROMPT * - Minutes = '&&MINUTES' +PROMPT * - Top Row Count = '&&TOPROWCOUNT' +PROMPT * - Instance ID = '&&INST_ID' +PROMPT ***************************************************************** + +PROMPT +@@ash_top_services '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID' +PROMPT +@@ash_top_users '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID' +PROMPT +@@ash_top_modules '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID' +PROMPT +@@ash_top_actions '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID' +PROMPT +@@ash_top_clients '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID' +PROMPT +@@ash_top_sessions '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID' + +@@footer diff --git a/vg/ash_top_clients.sql b/vg/ash_top_clients.sql new file mode 100644 index 0000000..1ce903c --- /dev/null +++ b/vg/ash_top_clients.sql @@ -0,0 +1,82 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top user from ASH +* Parameters : 1 - Number of MINUTES (Default 5min)) +* 2 - Top Row Count Default 10) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Apr-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE MINUTES +UNDEFINE TOPROWCOUNT +UNDEFINE INST_ID + +DEFINE MINUTES="&&1" +DEFINE TOPROWCOUNT="&&2" +DEFINE INST_ID='&&3' + + +set term off +COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT +COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES" + , DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +from dual; + +set term on + +PROMPT ***************************************************************** +PROMPT * ASH - Top &&TOPROWCOUNT Active Clients (Over Last &&MINUTES min) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Minutes = '&&MINUTES' +PROMPT * - Top Row Count = '&&TOPROWCOUNT' +PROMPT * - Instance ID = '&&INST_ID' +PROMPT ***************************************************************** + + +COLUMN client_id HEADING "Client ID" FORMAT a40 +COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99 +COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999 + +WITH ash as + (SELECT /*+ NO_MERGE */ + ash.client_id + , count(1) session_count + FROM gv$active_session_history ash + WHERE ash.sample_time > systimestamp - (&&MINUTES/(24*60)) + AND ash.session_type <> 'BACKGROUND' + AND ash.inst_id LIKE '&&INST_ID' + GROUP BY ash.client_id + ) +, ash_total as + (SELECT /*+ NO_MERGE */ SUM(session_count) session_total + FROM ash + ) +SELECT * FROM ( +SELECT ash.client_id + , LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent + , ash.session_count + FROM ash , ash_total + ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc + ) + WHERE ROWNUM <= &&TOPROWCOUNT +; + + +@@footer diff --git a/vg/ash_top_modules.sql b/vg/ash_top_modules.sql new file mode 100644 index 0000000..9004a78 --- /dev/null +++ b/vg/ash_top_modules.sql @@ -0,0 +1,83 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top activity from ASH +* Parameters : 1 - Number of MINUTES (Default 5min)) +* 2 - Top Row Count Default 10) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Apr-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE MINUTES +UNDEFINE TOPROWCOUNT +UNDEFINE INST_ID + +DEFINE MINUTES="&&1" +DEFINE TOPROWCOUNT="&&2" +DEFINE INST_ID='&&3' + + +set term off +COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT +COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES" + , DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +from dual; + +set term on + + +PROMPT ***************************************************************** +PROMPT * ASH - Top &&TOPROWCOUNT Active Modules (Over Last &&MINUTES min) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Minutes = '&&MINUTES' +PROMPT * - Top Row Count = '&&TOPROWCOUNT' +PROMPT * - Instance ID = '&&INST_ID' +PROMPT ***************************************************************** + + +COLUMN module HEADING "Module" FORMAT a50 +COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99 +COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999 + +WITH ash as + (SELECT /*+ NO_MERGE */ + ash.module + , count(1) session_count + FROM gv$active_session_history ash + WHERE ash.sample_time > systimestamp - (&&MINUTES/(24*60)) + AND ash.session_type <> 'BACKGROUND' + AND ash.inst_id LIKE '&&INST_ID' + GROUP BY ash.module + ) +, ash_total as + (SELECT /*+ NO_MERGE */ SUM(session_count) session_total + FROM ash + ) +SELECT * FROM ( +SELECT ash.module + , LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent + , ash.session_count + FROM ash , ash_total + ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc + ) + WHERE ROWNUM <= &&TOPROWCOUNT +; + + +@@footer diff --git a/vg/ash_top_services.sql b/vg/ash_top_services.sql new file mode 100644 index 0000000..ff1ad17 --- /dev/null +++ b/vg/ash_top_services.sql @@ -0,0 +1,93 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top activity from ASH +* Parameters : 1 - Number of MINUTES (Default 5min) +* 2 - Top Row Count (Default 5 rows) +* 3 - INST_ID (Default %) +* 3 - TO_MINUTES (Default 0min) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Apr-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE FROM_MINUTES +UNDEFINE TOPROWCOUNT +UNDEFINE INST_ID +UNDEFINE TO_MINUTES + +DEFINE FROM_MINUTES="&&1" +DEFINE TOPROWCOUNT="&&2" +DEFINE INST_ID='&&3' +DEFINE TO_MINUTES="&&4" + + +set term off +COLUMN _FROM_MINUTES NEW_VALUE FROM_MINUTES NOPRINT +COLUMN _TO_MINUTES NEW_VALUE TO_MINUTES NOPRINT +COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +SELECT DECODE('&&FROM_MINUTES','','5','&&FROM_MINUTES') "_FROM_MINUTES" + , DECODE('&&TO_MINUTES','','0','&&TO_MINUTES') "_TO_MINUTES" + , DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +from dual; + +set term on + +PROMPT ***************************************************************** +PROMPT * ASH - Top &&TOPROWCOUNT Active Services (Over Last &&FROM_MINUTES min) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Minutes = '&&FROM_MINUTES' +PROMPT * - Top Row Count = '&&TOPROWCOUNT' +PROMPT * - Instance ID = '&&INST_ID' +PROMPT * - To Minutes = '&&TO_MINUTES' +PROMPT ***************************************************************** + + +COLUMN service_name HEADING "ServiceName" FORMAT a30 +COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99 +COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999 + +WITH ash as + (SELECT /*+ NO_MERGE */ + sn.name service_name + , count(1) session_count + FROM gv$active_session_history ash + , dba_services sn + WHERE ash.service_hash = sn.name_hash + AND ash.session_type <> 'BACKGROUND' + AND ash.inst_id LIKE '&&INST_ID' + AND ash.sample_time > systimestamp - (&&FROM_MINUTES/(24*60)) + AND ash.sample_time > systimestamp - (&&TO_MINUTES/(24*60)) + GROUP BY sn.name + ) +, ash_total as + (SELECT /*+ NO_MERGE */ SUM(session_count) session_total + FROM ash + ) +SELECT * FROM ( +SELECT ash.service_name + , LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent + , ash.session_count + FROM ash , ash_total + ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc + ) + WHERE ROWNUM <= &&TOPROWCOUNT +; + + + +@@footer diff --git a/vg/ash_top_services_breakdown.sql b/vg/ash_top_services_breakdown.sql new file mode 100644 index 0000000..a40ba68 --- /dev/null +++ b/vg/ash_top_services_breakdown.sql @@ -0,0 +1,117 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top activity from ASH +* Parameters : 1 - Number of MINUTES (Default 5min) +* 2 - Top Row Count (Default 5 rows) +* 3 - INST_ID (Default %) +* 3 - TO_MINUTES (Default 0min) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Apr-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE FROM_MINUTES +UNDEFINE TOPROWCOUNT +UNDEFINE INST_ID +UNDEFINE TO_MINUTES + +DEFINE FROM_MINUTES="&&1" +DEFINE TOPROWCOUNT="&&2" +DEFINE INST_ID='&&3' +DEFINE TO_MINUTES="&&4" + + +set term off +COLUMN _FROM_MINUTES NEW_VALUE FROM_MINUTES NOPRINT +COLUMN _TO_MINUTES NEW_VALUE TO_MINUTES NOPRINT +COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +SELECT DECODE('&&FROM_MINUTES','','5','&&FROM_MINUTES') "_FROM_MINUTES" + , DECODE('&&TO_MINUTES','','0','&&TO_MINUTES') "_TO_MINUTES" + , DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +from dual; + +set term on + +PROMPT ***************************************************************** +PROMPT * ASH - Top &&TOPROWCOUNT Active Services (Over Last &&FROM_MINUTES min) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Minutes = '&&FROM_MINUTES' +PROMPT * - Top Row Count = '&&TOPROWCOUNT' +PROMPT * - Instance ID = '&&INST_ID' +PROMPT * - To Minutes = '&&TO_MINUTES' +PROMPT ***************************************************************** + + +COLUMN service_name HEADING "ServiceName" FORMAT a30 +COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99 +COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999 + +WITH ash_session_summary AS +( + select TRUNC(ash.sample_time,'MI') sample_time + , s.name service_name + , count(1) session_count + from gv$active_session_history ash + JOIN dba_services s ON s.name_hash = ash.service_hash + where 1=1 + AND s.name NOT IN ('SYS$BACKGROUND') + --and s.name = 'pr01pimi_sas_con' + and ash.sample_time > sysdate - (1/24) + group by TRUNC(ash.sample_time,'MI'), s.name +) +, ash_rank AS +( + SELECT service_name + , RANK() OVER (ORDER BY SUM(session_count) desc) rank + FROM ash_session_summary + GROUP BY service_name +) +, graph_unit AS +( + SELECT GREATEST(CEIL(MAX(SUM(session_count))/100),1) divider + FROM ash_session_summary + GROUP BY sample_time +) +SELECT a.sample_time + , MAX(DECODE(r.rank,1,a.service_name,' ')) rank1_service + , MAX(DECODE(r.rank,2,a.service_name,' ')) rank2_service + , MAX(DECODE(r.rank,3,a.service_name,' ')) rank3_service + , MAX(DECODE(r.rank,4,a.service_name,' ')) rank4_service + , SUM(DECODE(r.rank,1,a.session_count,0)) rank1 + , SUM(DECODE(r.rank,2,a.session_count,0)) rank2 + , SUM(DECODE(r.rank,3,a.session_count,0)) rank3 + , SUM(DECODE(r.rank,4,a.session_count,0)) rank4 + , SUM(CASE WHEN r.rank >= 5 THEN a.session_count ELSE 0 END) rank_others + , TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,1,a.session_count,0))/g.divider),'#')) + || TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,2,a.session_count,0))/g.divider),'%')) + || TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,3,a.session_count,0))/g.divider),'&')) + || TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,4,a.session_count,0))/g.divider),'^')) + || TRIM(RPAD(' ',ROUND(SUM(CASE WHEN r.rank >= 5 THEN a.session_count ELSE 0 END)/g.divider),'*')) + Graph + FROM ash_session_summary a + JOIN ash_rank r ON r.service_name = a.service_name + JOIN graph_unit g on g.divider >= 1 +WHERE 1=1 +GROUP BY a.sample_time, g.divider +ORDER BY a.sample_Time +; + + + + +@@footer diff --git a/vg/ash_top_sessions.sql b/vg/ash_top_sessions.sql new file mode 100644 index 0000000..bf6c42e --- /dev/null +++ b/vg/ash_top_sessions.sql @@ -0,0 +1,105 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top user from ASH +* Parameters : 1 - Number of MINUTES (Default 5min)) +* 2 - Top Row Count Default 10) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Apr-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE MINUTES +UNDEFINE TOPROWCOUNT +UNDEFINE INST_ID + +DEFINE MINUTES="&&1" +DEFINE TOPROWCOUNT="&&2" +DEFINE INST_ID='&&3' + + +set term off +COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT +COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES" + , DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +from dual; + +set term on + + +PROMPT ***************************************************************** +PROMPT * ASH - Top &&TOPROWCOUNT Active Sesssions (Over Last &&MINUTES min) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Minutes = '&&MINUTES' +PROMPT * - Top Row Count = '&&TOPROWCOUNT' +PROMPT * - Instance ID = '&&INST_ID' +PROMPT ***************************************************************** + + +COLUMN inst_id HEADING "Instance|Number" FORMAT 9999999 +COLUMN sid HEADING "SID" FORMAT a6 +COLUMN session_serial# HEADING "Serial#" FORMAT 9999999 +COLUMN username HEADING "UserName" FORMAT a30 +COLUMN program HEADING "Program" FORMAT a15 TRUNC +COLUMN machine HEADING "Machine" FORMAT a20 TRUNC +COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99 +COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999 + +WITH ash as + (SELECT /*+ NO_MERGE */ + ash.inst_id + , ash.session_id + , ash.session_serial# + , u.username + , ash.program + , ash.machine + , count(1) session_count + FROM gv$active_session_history ash + , dba_users u + WHERE ash.user_id = u.user_id + AND ash.session_type <> 'BACKGROUND' + AND ash.inst_id LIKE '&&INST_ID' + AND ash.sample_time > systimestamp - (&&MINUTES/(24*60)) + GROUP BY ash.inst_id + , ash.session_id + , ash.session_serial# + , u.username + , ash.program + , ash.machine + ) +, ash_total as + (SELECT /*+ NO_MERGE */ SUM(session_count) session_total + FROM ash + ) +SELECT * FROM ( +SELECT inst_id + , session_id + , session_serial# + , username + , program + , machine + , LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent + , ash.session_count + FROM ash , ash_total + ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc + ) + WHERE ROWNUM <= &&TOPROWCOUNT +; + + +@@footer diff --git a/vg/ash_top_sqlids.sql b/vg/ash_top_sqlids.sql new file mode 100644 index 0000000..1e2c971 --- /dev/null +++ b/vg/ash_top_sqlids.sql @@ -0,0 +1,156 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLs above certain thresholds from ASH repository +* Compatibility : 11.1 and above +* Parameters : 1 - Number of hours (Default 1) +* 2 - Physical IO in GBs (Default 100) +* 3 - Physical Read in GBs (Default 0) +* 4 - Physical Write in GBs (Default 0) +* 5 - Interconnect IO in GBs (Default 0) +* 6 - WhereClause +* 7 - WhereClause2 +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parmaeter +* 28-JUN-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE HOURS +UNDEFINE PHYIO +UNDEFINE PHYREAD +UNDEFINE PHYWRITE +UNDEFINE INTERCONNECT_IO +UNDEFINE WHERECLAUSE +UNDEFINE WHERECLAUSE2 +UNDEFINE INST_ID + +DEFINE HOURS="&&1" +DEFINE PHYIO="&&2" +DEFINE PHYREAD="&&3" +DEFINE PHYWRITE="&&4" +DEFINE INTERCONNECT_IO="&&5" +DEFINE WHERECLAUSE="&&6" +DEFINE WHERECLAUSE2="&&7" + +DEFINE INST_ID="" + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _HOURS NEW_VALUE HOURS NOPRINT +COLUMN _PHYIO NEW_VALUE PHYIO NOPRINT +COLUMN _PHYREAD NEW_VALUE PHYREAD NOPRINT +COLUMN _PHYWRITE NEW_VALUE PHYWRITE NOPRINT +COLUMN _INTERCONNECT_IO NEW_VALUE INTERCONNECT_IO NOPRINT + +set term off +SELECT DECODE('&&HOURS','','1','%','1','&&HOURS') "_HOURS" + , DECODE('&&PHYIO','','100','%','100','&&PHYIO') "_PHYIO" + , DECODE('&&PHYREAD','','0','%','0','&&PHYREAD') "_PHYREAD" + , DECODE('&&PHYWRITE','','0','%','0','&&PHYWRITE') "_PHYWRITE" + , DECODE('&&INTERCONNECT_IO','','0','%','0','&&INTERCONNECT_IO') "_INTERCONNECT_IO" +FROM DUAL +; + +set term on +/***********************************/ + + +PROMPT *************************************************** +PROMPT * ASH SQL Ids +PROMPT * +PROMPT * Input Parameter: +PROMPT * Number of Hours = "&&HOURS" +PROMPT * Physical IO (GB) = "&&PHYIO" +PROMPT * Physical Read (GB) = "&&PHYREAD" +PROMPT * Physical Write (GB) = "&&PHYWRITE" +PROMPT * Interconnect IO (GB) = "&&INTERCONNECT_IO" +PROMPT * Where Clause = "&&WHERECLAUSE" +PROMPT * Where Clause2 = "&&WHERECLAUSE2" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a18 +COLUMN sql_exec_end FORMAT a18 +COLUMN duration FORMAT a12 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999 +COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999 +COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999 +COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 999.00 +COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 9999.00 + +-- Get the SQL Statements from ASH +SELECT /*+ parallel(ash, 10) LEADING(ash) */ + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end + , SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'+00000000','+') + ,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'+00000000','+'),'.')-1 + ) duration +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + --, ash.sql_exec_id + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value +&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop + , ash.force_matching_signature + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/power(1024,3)) phyread +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/power(1024,3)) phywrite +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/power(1024,3)) interconnect_io +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(ash.pga_allocated)/power(1024,3),2) pga_allocated +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(ash.temp_space_allocated)/power(1024,3),2) temp_space_allocated + FROM gv$active_session_history ash + LEFT OUTER JOIN gv$active_session_history ash_parent + ON ash_parent.inst_id = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + AND ash_parent.sample_time > sysdate - (&&HOURS/24) + WHERE ash.sql_id IS NOT NULL + AND ash.sample_time > sysdate - (&&HOURS/24) + AND ash.sql_exec_id IS NOT NULL + &&WHERECLAUSE &&WHERECLAUSE2 +GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.force_matching_signature +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) +having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_write_io_bytes) ) / power(1024,3) >= &&PHYIO + AND (SUM(ash.delta_read_io_bytes) ) / power(1024,3) >= &&PHYREAD + AND (SUM(ash.delta_write_io_bytes) ) / power(1024,3) >= &&PHYWRITE + AND (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) >= &&INTERCONNECT_IO +ORDER BY --max(ash.sample_time) asc + --, + NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC + , max(ash.sample_time) asc +; + + +@@footer diff --git a/vg/ash_top_users.sql b/vg/ash_top_users.sql new file mode 100644 index 0000000..538c510 --- /dev/null +++ b/vg/ash_top_users.sql @@ -0,0 +1,86 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top user from ASH +* Parameters : 1 - Number of MINUTES (Default 5min)) +* 2 - Top Row Count Default 10) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Apr-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE MINUTES +UNDEFINE TOPROWCOUNT +UNDEFINE INST_ID + +DEFINE MINUTES="&&1" +DEFINE TOPROWCOUNT="&&2" +DEFINE INST_ID='&&3' + + +set term off +COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT +COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES" + , DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +from dual; + +set term on + + +PROMPT ***************************************************************** +PROMPT * ASH - Top &&TOPROWCOUNT Active Users (Over Last &&MINUTES min) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Minutes = '&&MINUTES' +PROMPT * - Top Row Count = '&&TOPROWCOUNT' +PROMPT * - Instance ID = '&&INST_ID' +PROMPT ***************************************************************** + + +COLUMN username HEADING "UserName" FORMAT a30 +COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99 +COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999 + +WITH ash as + (SELECT /*+ NO_MERGE */ + u.username + , count(1) session_count + FROM gv$active_session_history ash + , dba_users u + WHERE ash.user_id = u.user_id + AND ash.session_type <> 'BACKGROUND' + AND ash.inst_id LIKE '&&INST_ID' + AND ash.sample_time > systimestamp - (&&MINUTES/(24*60)) + GROUP BY u.username + ) +, ash_total as + (SELECT /*+ NO_MERGE */ SUM(session_count) session_total + FROM ash + ) +SELECT * FROM ( +SELECT ash.username + , LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent + , ash.session_count + FROM ash , ash_total + ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc + ) + WHERE ROWNUM <= &&TOPROWCOUNT +; + + + +@@footer diff --git a/vg/asm_database_size.sql b/vg/asm_database_size.sql new file mode 100644 index 0000000..fee558a --- /dev/null +++ b/vg/asm_database_size.sql @@ -0,0 +1,217 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : ASM usage by file type for all mounted diskgroups (including other databases) +* Parameters : 1 - DBName (% - wildchar, \ - escape char, default is '%') +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------------------------------------ +* 24-Dec-14 Vishal Gupta Enhanced script to display file only in alias directory if alias is present +* 21-Jan-14 Vishal Gupta Commented out unmirrored figures from output +* 18-Jul-13 Vishal Gupta Created + +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DBNAME + +DEFINE DBNAME="&&1" + +set term off +COLUMN _DBNAME NEW_VALUE DBNAME NOPRINT + +SELECT UPPER(DECODE('&&DBNAME','','%',UPPER('&&DBNAME'))) "_DBNAME" +FROM DUAL; +set term on + + +PROMPT +PROMPT ******************************************************************* +PROMPT * A S M S P A C E U S A G E B Y D A T A B A S E * +PROMPT * * +PROMPT * - For all diskgroups mounted in current instance * +PROMPT * - Including files for other databases * +PROMPT * * +PROMPT * Input Parameters * +PROMPT * - DB Name = '&&DBNAME' +PROMPT ******************************************************************* + +DEFINE size_label=GB +DEFINE size_divider="1024/1024/1024" + + +COLUMN diskgroup_name HEADING "DiskGroup" FORMAT A16 +COLUMN DBNAME HEADING "DBName" FORMAT A15 + +COLUMN DISKGROUP_MirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999 +COLUMN DATAFILE_MirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999 +COLUMN TEMPFILE_MirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999 +COLUMN ONLINELOG_MirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 99,999 +COLUMN ARCHIVELOG_MirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999 +COLUMN BACKUPSET_MirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999 +COLUMN FLASHBACK_MirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999 +COLUMN OCRFILE_MirroredSize HEADING "OCR|(&&size_label)" FORMAT 999 +COLUMN AUTOBACKUP_MirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999 +COLUMN CONTROLFILE_MirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999 +COLUMN PARAMFILE_MirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999 + +COLUMN DISKGROUP_UnMirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999 +COLUMN DATAFILE_UnMirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999 +COLUMN TEMPFILE_UnMirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999 +COLUMN ONLINELOG_UnMirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999 +COLUMN ARCHIVELOG_UnMirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999 +COLUMN BACKUPSET_UnMirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999 +COLUMN FLASHBACK_UnMirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999 +COLUMN OCRFILE_UnMirroredSize HEADING "OCR|(&&size_label)" FORMAT 999 +COLUMN AUTOBACKUP_UnMirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999 +COLUMN CONTROLFILE_UnMirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999 +COLUMN PARAMFILE_UnMirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999 + +BREAK ON REPORT + +/* +BREAK ON diskgroup_name SKIP 1 DUPLICATES ON REPORT + +COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +*/ + +COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON REPORT + +COMPUTE SUM LABEL 'Total' OF DISKGROUP_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF DATAFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF TEMPFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ONLINELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF BACKUPSET_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF FLASHBACK_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF OCRFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF CONTROLFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF PARAMFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT + + +/* +PROMPT +PROMPT +PROMPT - <------------------------ Mirrored (GB) --------------------------------> <------------------------- UnMirrored (GB) -----------------------------> +*/ + + +WITH asm_alias AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_alias ) + , asm_diskgroup_stat AS (SELECT /*+ NO_MERGE */ * FROM v$asm_diskgroup ) + , asm_file AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_file ) + , files AS (SELECT /*+ NO_MERGE MATERIALIZE */ + diskgroup_name + , SUBSTR(SYS_CONNECT_BY_PATH(alias_name, '/'),2) File_Path + , alias_name + , type + , alias_directory + , space + , bytes + , system_created + , file_number + , incarnation + FROM (SELECT dg.name diskgroup_name + , a.parent_index parent_index + , a.name alias_name + , a.reference_index reference_index + , a.system_created + , a.alias_directory + , f.type + , f.space + , f.bytes + , f.file_number + , f.incarnation + FROM asm_diskgroup_stat dg + JOIN asm_alias a ON a.group_number = dg.group_number + /* Outer join because alias could be a directory */ + LEFT OUTER JOIN asm_file f ON f.group_number = a.group_number + AND f.file_number = a.file_number + AND f.incarnation = a.file_incarnation + -- WHERE dg.name LIKE '&&DISKGROUP_NAME' + ) + CONNECT BY NOCYCLE PRIOR reference_index = parent_index + START WITH mod(parent_index, power(2, 24)) = 0 /*Parent level database directory e.g. +DATA/MYDB etc */ + AND alias_name LIKE '&&DBNAME' + +/* + AND reference_index IN (SELECT a2.reference_index + FROM asm_alias a2 + WHERE (mod(a2.parent_index, power(2, 24))) = 0 + ) +*/ + ) + +SELECT UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1)) dbname + , ROUND(SUM(f.bytes)/&&size_divider) DISKGROUP_MirroredSize + , ROUND(SUM(DECODE(f.type, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_MirroredSize + , ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_MirroredSize + , ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_MirroredSize + , ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_MirroredSize + , ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_MirroredSize + , ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_MirroredSize + , ROUND(SUM(DECODE(f.type, 'OCRFILE',f.bytes,0))/&&size_divider) OCRFILE_MirroredSize + , ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.bytes,0))/&&size_divider) AUTOBACKUP_MirroredSize + , ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.bytes,0))/&&size_divider) CONTROLFILE_MirroredSize + --, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.bytes,'ASMPARAMETERFILE',f.bytes,0))/&&size_divider) PARAMFILE_MirroredSize +/* + , ROUND(SUM(f.space)/&&size_divider) DISKGROUP_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'DATAFILE',f.space,0))/&&size_divider) DATAFILE_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.space,0))/&&size_divider) TEMPFILE_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.space,0))/&&size_divider) ONLINELOG_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.space,0))/&&size_divider) ARCHIVELOG_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.space,0))/&&size_divider) BACKUPSET_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.space,0))/&&size_divider) FLASHBACK_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'OCRFILE',f.space,0))/&&size_divider) OCRFILE_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.space,0))/&&size_divider) AUTOBACKUP_UnMirroredSize + --, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.space,0))/&&size_divider) CONTROLFILE_UnMirroredSize + --, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.space,'ASMPARAMETERFILE',f.space,0))/&&size_divider) PARAMFILE_UnMirroredSize +*/ + FROM files f /* System created files */ + LEFT OUTER JOIN files f2 /* File alias */ + ON f2.diskgroup_name = f.diskgroup_name + AND f2.file_number = f.file_number + AND f2.incarnation = f.incarnation + AND f2.system_created = 'N' + AND f2.alias_directory = 'N' + AND f.system_created = 'Y' + AND f.alias_directory = 'N' +WHERE 1=1 + AND f.system_created = 'Y' /* Dont remove this condition */ + AND f.alias_directory = 'N' + AND UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1)) LIKE '&&DBNAME' ESCAPE '\' +GROUP BY UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,INSTR(NVL(f2.File_Path,f.file_path),'/')-1)) /*dbname*/ +ORDER BY dbname +; + + +@@footer diff --git a/vg/asm_debug.sql b/vg/asm_debug.sql new file mode 100644 index 0000000..cd2dc2b --- /dev/null +++ b/vg/asm_debug.sql @@ -0,0 +1,95 @@ +set newpage none +spool /tmp/asmdebug.out +-- +-- Get a timestamp +select rpad('>', 10, '>'), to_char(sysdate, 'MON DD HH24:MM:SS') from dual; +-- +-- Diskgroup information +set head off +select 'Diskgroup Information' from dual; +set head on +column name format a15 +column DG# format 99 +select group_number DG#, name, state, type, total_mb, free_mb from +v$asm_diskgroup_stat; +-- +-- Get the # of Allocation Units per DG +set head off +select 'Number of AUs per diskgroup' from dual; +set head on +select count(number_kfdat) AU_count, group_kfdat DG# from x$kfdat +group by group_kfdat; +-- +-- Get the # of Allocation Units per DiskGroup and Disk +set head off +select 'Number of AUs per Diskgroup,Disk' from dual; +col "group#,disk#" for a30 +set head on +select count(*)AU_count, GROUP_KFDAT||','||number_kfdat "group#,disk#" from x$kfdat group by GROUP_KFDAT,number_kfdat; +-- +-- Get the # of allocated (V) and free (F) Allocation Units +set head off +select 'Number of allocated (V) and free (F) Allocation Units' from dual; +col "VF" for a2 +set head on +select GROUP_KFDAT "group#", number_kfdat "disk#", v_kfdat "VF", count(*) +from x$kfdat +group by GROUP_KFDAT, number_kfdat, v_kfdat; + + +-- +-- Get the # of Allocation Units per ASM file +set head off +select 'Number of AUs per ASM file ordered by AU count for metadata only' +from dual; +set head on +select count(XNUM_KFFXP) AU_count, NUMBER_KFFXP file#, GROUP_KFFXP DG# from x$kffxp where NUMBER_KFFXP < 256 +group by NUMBER_KFFXP, GROUP_KFFXP +order by count(XNUM_KFFXP) ; +-- +-- Get the # of Allocation Units per ASM file by file alias. Change the +-- system_created Y|N depending if you want the short or long ASM name +set head off +select 'Number of AUs per ASM file ordered by AU count. This is for non +metadata' from dual; +set head on +select GROUP_KFFXP, NUMBER_KFFXP, name, count(*) +from x$kffxp, v$asm_alias +where GROUP_KFFXP=GROUP_NUMBER and NUMBER_KFFXP=FILE_NUMBER and +system_created='Y' + group by GROUP_KFFXP, NUMBER_KFFXP, name + order by GROUP_KFFXP, NUMBER_KFFXP; +-- +-- Get partner information. This is really only useful if redundancy is other than +-- external. +set head off +select 'The following shows the disk to partner relationship. This is really only +useful if using normal or high redundancy.' from dual; +set head on +select grp DG#, disk, NUMBER_KFDPARTNER partner, PARITY_KFDPARTNER parity, ACTIVE_KFDPARTNER active +from x$kfdpartner; +-- +-- Another look at file utilization. +set head off +select 'bytes is the sum of AUs with data in them * 1024^2 +space is the sum of all AUs allocated for this file * 1024^2' +from dual; +set head on +select f.group_number, f.file_number, bytes, space, space/(1024*1024) "InMB", a.name +from v$asm_file f, v$asm_alias a +where f.group_number=a.group_number and f.file_number=a.file_number + and system_created='Y' + order by f.group_number, f.file_number; +-- +-- Get robust disk information +set linesize 1500 +set head off +select 'Robust disk information' from dual; +set head on +select GROUP_NUMBER, DISK_NUMBER, INCARNATION, MOUNT_STATUS, HEADER_STATUS, MODE_STATUS, STATE, LIBRARY, TOTAL_MB, FREE_MB, +NAME, FAILGROUP, LABEL, PATH, CREATE_DATE, MOUNT_DATE, READS, +WRITES, READ_ERRS, WRITE_ERRS, READ_TIME, WRITE_TIME, BYTES_READ, BYTES_WRITTEN +from v$asm_disk_stat; +-- +spool off + diff --git a/vg/asm_disk.sql b/vg/asm_disk.sql new file mode 100644 index 0000000..134f12b --- /dev/null +++ b/vg/asm_disk.sql @@ -0,0 +1,100 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display ASM Disks +* Parameter : 1 - DiskGroup Name (Default % , use / as escape character) +* 2 - FailGroup (Default % , use / as escape character) +* 3 - DiskName (Default % , use / as escape character) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 21-Apr-13 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DISKGROUP_NAME +UNDEFINE FAILGROUP +UNDEFINE DISK_NAME + +DEFINE DISKGROUP_NAME="&&1" +DEFINE FAILGROUP="&&2" +DEFINE DISK_NAME="&&3" + +set term off +COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT +COLUMN _FAILGROUP NEW_VALUE FAILGROUP NOPRINT +COLUMN _DISK_NAME NEW_VALUE DISK_NAME NOPRINT + +SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME" + , UPPER(DECODE('&&FAILGROUP','','%','&&FAILGROUP')) "_FAILGROUP" + , UPPER(DECODE('&&DISK_NAME','','%','&&DISK_NAME')) "_DISK_NAME" +FROM DUAL; +set term on + +PROMPT ******************************************* +PROMPT A S M D I S K S +PROMPT * +PROMPT * Input Parameters +PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME' +PROMPT * - FailGroup = '&&FAILGROUP' +PROMPT * - DiskName = '&&DISK_NAME' +PROMPT ******************************************* + +COLUMN DiskGroup HEAD "DiskGroup" FORMAT A15 +COLUMN failgroup HEAD "FailGroup" FORMAT A10 +COLUMN name HEAD "ASM Disk Name" FORMAT A30 +COLUMN preferred_read HEAD "Pref|Read" FORMAT A4 +COLUMN mount_status HEAD "Mount|Status" FORMAT A8 +COLUMN header_status HEAD "Header|Status" FORMAT A8 +COLUMN mode_status HEAD "Mode|Status" FORMAT A8 +COLUMN repair_timer HEAD "Repair|Timer|(sec)" FORMAT 9,999 +COLUMN library HEAD "Library" FORMAT A7 +COLUMN label HEAD "Label" FORMAT A30 +COLUMN path HEAD "Path" FORMAT A50 +COLUMN total_gb HEAD "Total|(GB)" FORMAT 9,999 +COLUMN free_gb HEAD "Free|(GB)" FORMAT 9,999 +COLUMN free_gb HEAD "Free|(GB)" FORMAT 9,999 +COLUMN hot_used_gb HEAD "Hot|Used|(GB)" FORMAT 9,999 +COLUMN cold_used_gb HEAD "Cold|Used|(GB)" FORMAT 9,999 + + +SELECT dg.NAME DiskGroup + , d.failgroup + , d.name + , d.preferred_read + , d.voting_file + , d.mount_status + , d.header_status + , d.mode_status + , d.state + , d.repair_timer + , d.library + --, d.label + , d.total_mb /1024 total_gb + , d.free_mb/1024 free_gb + , d.hot_used_mb/1024 hot_used_gb + , d.cold_used_mb/1024 cold_used_gb + --, d.path + -- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view. + FROM v$asm_disk_stat d + , v$asm_diskgroup_stat dg +WHERE d.group_number = dg.group_number + AND dg.name LIKE '&&DISKGROUP_NAME' + AND NVL(d.failgroup,'%') LIKE '&&FAILGROUP' + AND NVL(d.name,'%') LIKE '&&DISK_NAME' +ORDER BY dg.NAME + , d.FAILGROUP + , d.name +; + + +@@footer diff --git a/vg/asm_disk_count.sql b/vg/asm_disk_count.sql new file mode 100644 index 0000000..3931089 --- /dev/null +++ b/vg/asm_disk_count.sql @@ -0,0 +1,63 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : ASM Disk Count +* Parameter : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Jul-11 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DISKGROUP_NAME +DEFINE DISKGROUP_NAME="&&1" + +set term off +COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT + +SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME" +FROM DUAL; +set term on + +PROMPT ******************************************* +PROMPT A S M D I S K C O U N T +PROMPT * +PROMPT * Input Parameters +PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME' +PROMPT ******************************************* + +COLUMN DiskGroup HEAD "DiskGroup" FORMAT A20 + +SELECT dg.NAME DiskGroup + , d.FAILGROUP + , d.MOUNT_STATUS + , d.HEADER_STATUS + , d.MODE_STATUS + , d.STATE + , COUNT(1) DiskCOunt + -- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view. + FROM v$asm_disk_stat d + , v$asm_diskgroup_stat dg +WHERE d.group_number = dg.group_number + AND dg.name like '&&DISKGROUP_NAME' +GROUP BY dg.NAME + , d.FAILGROUP + , d.MOUNT_STATUS + , d.HEADER_STATUS + , d.MODE_STATUS + , d.STATE +ORDER BY dg.NAME + , d.FAILGROUP +; + + +@@footer diff --git a/vg/asm_disk_iostats.sql b/vg/asm_disk_iostats.sql new file mode 100644 index 0000000..072079a --- /dev/null +++ b/vg/asm_disk_iostats.sql @@ -0,0 +1,169 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display ASM Disk Statistics +* Parameter : 1 - DiskGroup Name (Default % , use / as escape character) +* 2 - FailGroup (Default % , use / as escape character) +* 3 - DiskName (Default % , use / as escape character) +* 4 - DBNAME (Default % , use / as escape character) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Jan-15 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DISKGROUP_NAME +UNDEFINE FAILGROUP +UNDEFINE DISK_NAME +UNDEFINE DB_NAME + +DEFINE DISKGROUP_NAME="&&1" +DEFINE FAILGROUP="&&2" +DEFINE DISK_NAME="&&3" +DEFINE DB_NAME="&&4" + +set term off +COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT +COLUMN _FAILGROUP NEW_VALUE FAILGROUP NOPRINT +COLUMN _DISK_NAME NEW_VALUE DISK_NAME NOPRINT +COLUMN _DB_NAME NEW_VALUE DB_NAME NOPRINT + +SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME" + , UPPER(DECODE('&&FAILGROUP','','%','&&FAILGROUP')) "_FAILGROUP" + , UPPER(DECODE('&&DISK_NAME','','%','&&DISK_NAME')) "_DISK_NAME" + , UPPER(DECODE('&&DB_NAME','','%','&&DB_NAME')) "_DB_NAME" +FROM DUAL; +set term on + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=999,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" + +DEFINE COUNT_FORMAT=9,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE COUNT_LARGE_FORMAT=999,999 +--DEFINE COUNT_LARGE_DIVIDER="1" +--DEFINE COUNT_LARGE_HEADING="#" +DEFINE COUNT_LARGE_DIVIDER="1000" +DEFINE COUNT_LARGE_HEADING="#1000" +--DEFINE COUNT_LARGE_DIVIDER="1000000" +--DEFINE COUNT_LARGE_HEADING="million" +--DEFINE COUNT_LARGE_DIVIDER="1000000000" +--DEFINE COUNT_LARGE_HEADING="billion" +--DEFINE COUNT_LARGE_DIVIDER="1000000000000" +--DEFINE COUNT_LARGE_HEADING="trillion" + + + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +--DEFINE TIME_DIVIDER="1" +--DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" +DEFINE TIME_DIVIDER="3600" +DEFINE TIME_HEADING="hr" + +/************************************/ + +PROMPT ************************************************** +PROMPT * A S M D I S K I O S T A T I S T I C S +PROMPT * +PROMPT * Input Parameters +PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME' +PROMPT * - FailGroup = '&&FAILGROUP' +PROMPT * - DiskName = '&&DISK_NAME' +PROMPT * - DB Name = '&&DB_NAME' +PROMPT ************************************************** + +COLUMN DiskGroup HEAD "DiskGroup" FORMAT A15 +COLUMN failgroup HEAD "FailGroup" FORMAT A10 +COLUMN name HEAD "ASM Disk Name" FORMAT A30 +COLUMN dbname HEAD "DB Name" FORMAT A10 +COLUMN repair_timer HEAD "Repair|Timer|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN read_time HEAD "Read|Time|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN reads HEAD "Total|Read|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT +COLUMN hot_reads HEAD "Hot|Read|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT +COLUMN cold_reads HEAD "Cold|Read|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT +COLUMN read_errs HEAD "Read|Errors|(&&COUNT_SMALL_HEADING)" FORMAT &&COUNT_SMALL_FORMAT +COLUMN bytes_read HEAD "Reads|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN cold_bytes_read HEAD "Reads|Cold|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN hot_bytes_read HEAD "Reads|Hot|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN write_time HEAD "Write|Time|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN writes HEAD "Total|Write|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT +COLUMN hot_writes HEAD "Hot|Write|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT +COLUMN cold_writes HEAD "Cold|Write|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT +COLUMN write_errs HEAD "Write|Errors|(&&COUNT_SMALL_HEADING)" FORMAT &&COUNT_SMALL_FORMAT +COLUMN bytes_written HEAD "Writes|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN hot_bytes_written HEAD "Writes|Cold|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN cold_bytes_written HEAD "Writes|Hot|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT + + +SELECT dg.NAME DiskGroup + , i.failgroup + , d.name + , i.dbname + --, i.repair_timer + , i.read_time/&&TIME_DIVIDER read_time + , i.reads/&&COUNT_LARGE_DIVIDER reads + , i.hot_reads/&&COUNT_LARGE_DIVIDER hot_reads + , i.cold_reads/&&COUNT_LARGE_DIVIDER cold_reads + , i.read_errs/&&COUNT_SMALL_DIVIDER read_errs + , ROUND(i.bytes_read/ &&BYTES_DIVIDER,2) bytes_read + , ROUND(i.hot_bytes_read/ &&BYTES_DIVIDER ,2) hot_bytes_read + , ROUND(i.cold_bytes_read/ &&BYTES_DIVIDER ,2) cold_bytes_read + , i.writes/&&COUNT_LARGE_DIVIDER writes + , i.hot_writes/&&COUNT_LARGE_DIVIDER hot_writes + , i.cold_writes/&&COUNT_LARGE_DIVIDER cold_writes + , i.write_time/&&TIME_DIVIDER write_time + , i.write_errs/&&COUNT_SMALL_DIVIDER write_errs + , ROUND(i.bytes_written / &&BYTES_DIVIDER ,2) bytes_written + , ROUND(i.hot_bytes_written / &&BYTES_DIVIDER ,2) hot_bytes_written + , ROUND(i.cold_bytes_written / &&BYTES_DIVIDER ,2) cold_bytes_written + --, i.path + -- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view. + FROM v$asm_disk_iostat i + JOIN v$asm_diskgroup_stat dg ON i.group_number = dg.group_number + JOIN v$asm_disk_stat d ON d.group_number = i.group_number AND d.disk_number = i.disk_number +WHERE 1=1 + AND dg.name LIKE '&&DISKGROUP_NAME' + AND NVL(i.failgroup,'%') LIKE '&&FAILGROUP' + AND NVL(d.name,'%') LIKE '&&DISK_NAME' + AND NVL(i.dbname,'%') LIKE '&&DB_NAME' +ORDER BY dg.NAME + , i.FAILGROUP + , d.name + , i.dbname +; + + +@@footer diff --git a/vg/asm_disk_stats.sql b/vg/asm_disk_stats.sql new file mode 100644 index 0000000..70a68af --- /dev/null +++ b/vg/asm_disk_stats.sql @@ -0,0 +1,110 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display ASM Disk Statistics +* Parameter : 1 - DiskGroup Name (Default % , use / as escape character) +* 2 - FailGroup (Default % , use / as escape character) +* 3 - DiskName (Default % , use / as escape character) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 07-MAY-14 Vishal Gupta Commented repair_timer, as its not disk io-statistics +* 21-Apr-13 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DISKGROUP_NAME +UNDEFINE FAILGROUP +UNDEFINE DISK_NAME + +DEFINE DISKGROUP_NAME="&&1" +DEFINE FAILGROUP="&&2" +DEFINE DISK_NAME="&&3" + +set term off +COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT +COLUMN _FAILGROUP NEW_VALUE FAILGROUP NOPRINT +COLUMN _DISK_NAME NEW_VALUE DISK_NAME NOPRINT + +SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME" + , UPPER(DECODE('&&FAILGROUP','','%','&&FAILGROUP')) "_FAILGROUP" + , UPPER(DECODE('&&DISK_NAME','','%','&&DISK_NAME')) "_DISK_NAME" +FROM DUAL; +set term on + +PROMPT ******************************************* +PROMPT A S M D I S K S T A T I S T I C S +PROMPT * +PROMPT * Input Parameters +PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME' +PROMPT * - FailGroup = '&&FAILGROUP' +PROMPT * - DiskName = '&&DISK_NAME' +PROMPT ******************************************* + +COLUMN DiskGroup HEAD "DiskGroup" FORMAT A15 +COLUMN failgroup HEAD "FailGroup" FORMAT A10 +COLUMN name HEAD "ASM Disk Name" FORMAT A30 +COLUMN repair_timer HEAD "Repair|Timer|(sec)" FORMAT 9,999 +COLUMN read_time HEAD "Read|Time|(sec)" FORMAT 9,999 +COLUMN reads HEAD "Total|Read|Requests|(#)" FORMAT 9,999,999 +COLUMN hot_reads HEAD "Hot|Read|Requests|(#)" FORMAT 99,999 +COLUMN cold_reads HEAD "Cold|Read|Requests|(#)" FORMAT 9,999,999 +COLUMN read_errs HEAD "Read|Errors|(#)" FORMAT 9,999 +COLUMN bytes_read HEAD "Reads|(GB)" FORMAT 9,999.99 +COLUMN cold_bytes_read HEAD "Reads|Cold|(GB)" FORMAT 9,999.99 +COLUMN hot_bytes_read HEAD "Reads|Hot|(GB)" FORMAT 9,999.99 +COLUMN write_time HEAD "Write|Time|(sec)" FORMAT 9,999 +COLUMN writes HEAD "Total|Write|Requests|(#)" FORMAT 9,999,999 +COLUMN hot_writes HEAD "Hot|Write|Requests|(#)" FORMAT 99,999 +COLUMN cold_writes HEAD "Cold|Write|Requests|(#)" FORMAT 9,999,999 +COLUMN write_errs HEAD "Write|Errors|(#)" FORMAT 9,999 +COLUMN bytes_written HEAD "Writes|(GB)" FORMAT 9,999.99 +COLUMN hot_bytes_written HEAD "Writes|Cold|(GB)" FORMAT 9,999.99 +COLUMN cold_bytes_written HEAD "Writes|Hot|(GB)" FORMAT 9,999.99 + + +SELECT dg.NAME DiskGroup + , d.failgroup + , d.name + --, d.repair_timer + , d.preferred_read + , d.read_time + , d.reads + , d.hot_reads + , d.cold_reads + , d.read_errs + , ROUND(d.bytes_read/ 1024/1024/1024,2) bytes_read + , ROUND(d.hot_bytes_read/ 1024/1024/1024 ,2) hot_bytes_read + , ROUND(d.cold_bytes_read/ 1024/1024/1024 ,2) cold_bytes_read + , d.writes + , d.hot_writes + , d.cold_writes + , d.write_time + , d.write_errs + , ROUND(d.bytes_written / 1024/1024/1024 ,2) bytes_written + , ROUND(d.hot_bytes_written / 1024/1024/1024 ,2) hot_bytes_written + , ROUND(d.cold_bytes_written / 1024/1024/1024 ,2) cold_bytes_written + --, d.path + -- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view. + FROM v$asm_disk_stat d + , v$asm_diskgroup_stat dg +WHERE d.group_number = dg.group_number + AND dg.name LIKE '&&DISKGROUP_NAME' + AND NVL(d.failgroup,'%') LIKE '&&FAILGROUP' + AND NVL(d.name,'%') LIKE '&&DISK_NAME' +ORDER BY dg.NAME + , d.FAILGROUP + , d.name +; + + +@@footer diff --git a/vg/asm_diskgroup.sql b/vg/asm_diskgroup.sql new file mode 100644 index 0000000..d5ac920 --- /dev/null +++ b/vg/asm_diskgroup.sql @@ -0,0 +1,105 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : ASM DiskGroup Info +* Parameter : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------ +* 13-Feb-14 Vishal Gupta Added following additional fields in the output +* - sector_size,block_size,voting_files +* 13-Dec-12 Vishal Gupta Added additional query to display ASM attributes +* 27-Jan-10 Vishal Gupta Created +* +*/ +set term on + + +SET numf 999,999 + +DEFINE size_label=GB +DEFINE size_divider="1024/1024/1024" + + + +PROMPT +PROMPT ************************************************ +PROMPT * A S M D I S K G R O U P D E T A I L S * +PROMPT ************************************************ + +COLUMN diskgroup_name HEAD "DiskGroup" FORMAT A16 +COLUMN group_number HEAD "G#" FORMAT 99 +COLUMN type HEAD "Redundancy|Type" FORMAT A6 +COLUMN compatibility HEAD "ASM|Compat" FORMAT A10 +COLUMN database_compatibility HEAD "RDBMS|Compat" FORMAT A10 +COLUMN allocation_unit_size_MB HEAD "AU|Size|(MB)" FORMAT 999 +COLUMN sector_size HEAD "Sector|Size" FORMAT 999999 +COLUMN block_size HEAD "Block|Size" FORMAT 99,999 +COLUMN offline_disks HEAD "Offline|Disks" +COLUMN voting_files HEAD "Voting|Files" FORMAT a6 +COLUMN TOTAL_GB HEAD "(A)||Total|Avail|(&size_label)" +COLUMN used_GB HEAD "(B)||Total|Used|(&size_label)" +COLUMN hot_used_GB HEAD "Hot|Used|(&size_label)" +COLUMN cold_used_GB HEAD "Cold|Used|(&size_label)" +COLUMN FREE_GB HEAD "(C)||Total|Free|(&size_label)" +COLUMN REQUIRED_MIRROR_FREE_GB HEAD "(D)|Required|Free|ForMirror|(&size_label)" JUSTIFY RIGHT +COLUMN mirrored_total_GB HEAD "(E)||Mirrored|Avail|(&size_label)" +COLUMN mirrored_used_GB HEAD "(F)||Mirrored|Used|(&size_label)" +COLUMN mirrored_free_GB HEAD "Mirrored|Free|(&size_label)" +COLUMN USABLE_GB HEAD "(C-D)/REDUN||Usable|Free|(&size_label)" + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF TOTAL_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF USED_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF HOT_USED_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF COLD_USED_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF FREE_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF REQUIRED_MIRROR_FREE_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF MIRRORED_TOTAL_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF MIRRORED_USED_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF MIRRORED_FREE_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF USABLE_GB FORMAT 9,999,999 ON REPORT + +SELECT d.NAME diskgroup_name + , d.group_number + , d.state + , d.type + , d.compatibility + , d.database_compatibility + , d.allocation_unit_size/1024/1024 allocation_unit_size_MB + , d.sector_size + , d.block_size + , d.offline_disks + , d.voting_files + FROM v$asm_diskgroup_stat d; + +PROMPT +PROMPT ****************************************************** +PROMPT * A S M D I S K G R O U P A T T R I B U T E S * +PROMPT ****************************************************** + +COLUMN attribute HEAD "Attribute" FORMAT A25 +COLUMN system_created HEAD "System|Created" FORMAT A10 +COLUMN read_only HEAD "Read|Only" FORMAT A5 +COLUMN value HEAD "Value" FORMAT A15 + +SELECT d.name diskgroup_name + , a.name attribute + , DECODE(a.system_created,'N','No','Y','Yes',a.read_only) system_created + , DECODE(a.read_only,'N','No','Y','Yes',a.read_only) read_only + , a.value + FROM v$asm_diskgroup_stat d + , v$asm_attribute a + WHERE a.group_number = d.group_number + AND a.name not like 'template%' + ORDER BY attribute + , diskgroup_name + ; + + +@@footer diff --git a/vg/asm_diskgroup_size.sql b/vg/asm_diskgroup_size.sql new file mode 100644 index 0000000..2d4307a --- /dev/null +++ b/vg/asm_diskgroup_size.sql @@ -0,0 +1,139 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : ASM DiskGroup Sizes and Space Usage +* Parameter : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 17-JUN-13 Vishal Gupta Changed output layout, also switch from v$asm_diskgroup +* to v$asm_diskgroup_stat view to avoid diskgroup discovery +* 14-Dec-12 Vishal Gupta Added Usable %age +* 27-Jan-10 Vishal Gupta Created +* +* +*/ +set term on + + +SET numf 999,999 + +DEFINE size_label=GB +DEFINE size_divider="1024/1024/1024" + +PROMPT ********************************************************************** +PROMPT * A S M D I S K G R O U P S P A C E U S A G E R E P O R T * +PROMPT ********************************************************************** + + +COLUMN NAME HEAD "DiskGroup" FORMAT A16 +COLUMN group_number HEAD "G#" FORMAT 99 +COLUMN type HEAD "Redundancy|Type" FORMAT A6 +COLUMN compatibility HEAD "ASM|Compat" FORMAT A10 +COLUMN database_compatibility HEAD "RDBMS|Compat" FORMAT A10 +COLUMN allocation_unit_size_MB HEAD "AU|Size|(MB)" FORMAT 999 +COLUMN offline_disks HEAD "Offline|Disks" + +COLUMN separator HEAD "!|!|!|!|!|!" FORMAT a1 + +COLUMN mirrored_total_GB HEAD "(E)||Mirrored|Total|(&size_label)" +COLUMN USABLE_TOTAL_GB HEAD "(A-D)|/REDUN||Safely|Usable|Total|(&size_label)" +COLUMN USABLE_USED_GB HEAD "(B-D)|/REDUN||Safely|Usable|Used|(&size_label)" +COLUMN USABLE_FREE_GB HEAD "(C-D)|/REDUN||Safely|Usable|Free|(&size_label)" +COLUMN USABLE_USED_PERCENT HEAD "Safely|Usable|Used|(%)" FORMAT 999.99 +COLUMN USABLE_FREE_PERCENT HEAD "Safely|Usable|Free|(%)" FORMAT 999.99 +COLUMN mirrored_free_GB HEAD "Mirrored|Free|(&size_label)" + + +COLUMN REQUIRED_MIRROR_FREE_GB HEAD "(D)|Required|Free|ForMirror|(&size_label)" JUSTIFY RIGHT +COLUMN TOTAL_GB HEAD "(A)||Total|Avail|(&size_label)" +COLUMN used_GB HEAD "(B)||Total|Used|(&size_label)" +COLUMN hot_used_GB HEAD "Hot|Used|(&size_label)" +COLUMN cold_used_GB HEAD "Cold|Used|(&size_label)" +COLUMN FREE_GB HEAD "(C)||Total|Free|(&size_label)" + + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF TOTAL_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF USED_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF HOT_USED_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF COLD_USED_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF FREE_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF REQUIRED_MIRROR_FREE_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF MIRRORED_TOTAL_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF MIRRORED_USED_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF MIRRORED_FREE_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF USABLE_GB FORMAT 9,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF USABLE_TOTAL_GB FORMAT 9,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF USABLE_USED_GB FORMAT 9,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF USABLE_FREE_GB FORMAT 9,999,999 ON REPORT + + +/* + +SAMPLE OUTPUT + +********************************************************************** +* A S M D I S K G R O U P S P A C E U S A G E R E P O R T * +********************************************************************** + +. <----------------------- With Mirroring ----------------------> <-------------------- Without Mirroring ----------------> + + (A-D) (B-D) (C-D) + ! /REDUN /REDUN /REDUN ! ! + ! (E) ! (D) (A) (B) (C) ! + ! Safely Safely Safely Safely Safely ! Required ! + ! Mirrored Usable Usable Usable Mirrored Usable Usable ! Free Total Total Hot Cold Total ! + Redund ! Avail Total Used Free Free Used Free ! ForMirror Avail Used Used Used Free ! +DiskGroup G# Type ! (GB) (GB) (GB) (GB) (GB) (%) (%) ! (GB) (GB) (GB) (GB) (GB) (GB) ! +------------ --- ------ - -------- -------- -------- -------- -------- ------- ------- - --------- -------- -------- -------- -------- -------- - +DATA_DM01 1 NORMAL ! 92,736 86,112 44,488 41,624 48,248 51.66 48.34 ! 13,248 185,472 88,977 0 88,977 96,495 ! +DATA 2 NORMAL ! 18,480 17,160 8,145 9,015 10,335 47.47 52.53 ! 2,640 36,960 16,291 0 16,291 20,669 ! +DBFS_DG 3 NORMAL ! 2,366 2,197 2 2,195 2,364 .07 99.93 ! 338 4,732 3 0 3 4,728 ! +FLASH_DM01 4 NORMAL ! 2,240 2,080 892 1,188 1,348 42.88 57.12 ! 320 4,480 1,784 0 1,784 2,696 ! +RECO_DM01 5 NORMAL ! 139,113 129,177 38,516 90,660 100,597 29.82 70.18 ! 19,873 278,226 77,033 0 77,033 201,194 ! +RECO 6 NORMAL ! 25,929 24,077 21,893 2,184 4,036 90.93 9.07 ! 3,704 51,857 43,786 0 43,786 8,071 ! +SYSTEMDG 7 NORMAL ! 2,039 1,893 2 1,891 2,036 .11 99.89 ! 291 4,077 4 0 4 4,073 ! + -------- -------- -------- -------- -------- --------- -------- -------- -------- -------- -------- +Total 282,903 262,696 113,938 148,757 168,964 40,414 565,804 227,878 0 227,878 337,926 + + + +*/ + + +PROMPT +PROMPT . <----------------------- With Mirroring ----------------------> <-------------------- Without Mirroring ----------------> + +-- Note: +-- The GROUP_NUMBER, TOTAL_MB, and FREE_MB columns are only +-- meaningful if the disk group is mounted by the instance. Otherwise, their values will be 0. + +SELECT NAME + , group_number + , type + , '!' separator + , ROUND(TOTAL_MB/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)/1024) mirrored_TOTAL_GB + , ROUND((TOTAL_MB - REQUIRED_MIRROR_FREE_MB )/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)/1024) USABLE_TOTAL_GB + , ROUND((hot_used_mb + cold_used_mb)/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3) /1024) USABLE_USED_GB + , ROUND(USABLE_FILE_MB /1024) USABLE_FREE_GB + , ROUND((USABLE_FILE_MB + ROUND(REQUIRED_MIRROR_FREE_MB/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)) ) /1024) mirrored_free_GB + , ROUND( (hot_used_mb + cold_used_mb) / (TOTAL_MB - REQUIRED_MIRROR_FREE_MB ) * 100 , 2) USABLE_USED_PERCENT + , ROUND(USABLE_FILE_MB /((TOTAL_MB - REQUIRED_MIRROR_FREE_MB )/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)) * 100 ,2) USABLE_FREE_PERCENT + , '!' separator + , ROUND(REQUIRED_MIRROR_FREE_MB/1024) REQUIRED_MIRROR_FREE_GB + , ROUND(TOTAL_MB/1024) TOTAL_GB + , ROUND((hot_used_mb + cold_used_mb) /1024) USED_GB + , ROUND(hot_used_mb/1024) HOT_USED_GB + , ROUND(cold_used_mb/1024) COLD_USED_GB + , ROUND(FREE_MB/1024) FREE_GB + , '!' separator + FROM v$asm_diskgroup_stat; + + +@@footer diff --git a/vg/asm_diskgroup_usage_by_database.sql b/vg/asm_diskgroup_usage_by_database.sql new file mode 100644 index 0000000..eef9c83 --- /dev/null +++ b/vg/asm_diskgroup_usage_by_database.sql @@ -0,0 +1,226 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : ASM usage by file type for all mounted diskgroups (including other databases) +* Parameters : 1 - DBName (% - wildchar, \ - escape char, default is '%') +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------------------------------------ +* 15-Jul-15 Vishal Gupta Make alias filter case-insensitive +* 24-Dec-14 Vishal Gupta Enhanced script to display file only in alias directory if alias is present +* 21-Jan-14 Vishal Gupta Commented out unmirrored figures from output +* 18-Jul-13 Vishal Gupta Created + +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DISKGROUP_NAME +UNDEFINE DBNAME + +DEFINE DISKGROUP_NAME="&&1" +DEFINE DBNAME="&&2" + +set term off +COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT +COLUMN _DBNAME NEW_VALUE DBNAME NOPRINT + +SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%',UPPER('&&DISKGROUP_NAME'))) "_DISKGROUP_NAME" + , UPPER(DECODE('&&DBNAME','','%',UPPER('&&DBNAME'))) "_DBNAME" +FROM DUAL; +set term on + + +PROMPT +PROMPT ******************************************************************* +PROMPT * A S M S P A C E U S A G E B Y D A T A B A S E * +PROMPT * * +PROMPT * - For all diskgroups mounted in current instance * +PROMPT * - Including files for other databases * +PROMPT * * +PROMPT * Input Parameters * +PROMPT * - DiskGroup = '&&DISKGROUP_NAME' +PROMPT * - DB Name = '&&DBNAME' +PROMPT ******************************************************************* + +DEFINE size_label=GB +DEFINE size_divider="1024/1024/1024" + + +COLUMN diskgroup_name HEADING "DiskGroup" FORMAT A16 +COLUMN DBNAME HEADING "DBName" FORMAT A15 + +COLUMN DISKGROUP_MirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999 +COLUMN DATAFILE_MirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999 +COLUMN TEMPFILE_MirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999 +COLUMN ONLINELOG_MirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 99,999 +COLUMN ARCHIVELOG_MirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999 +COLUMN BACKUPSET_MirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999 +COLUMN FLASHBACK_MirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999 +COLUMN OCRFILE_MirroredSize HEADING "OCR|(&&size_label)" FORMAT 999 +COLUMN AUTOBACKUP_MirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999 +COLUMN CONTROLFILE_MirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999 +COLUMN PARAMFILE_MirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999 + +COLUMN DISKGROUP_UnMirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999 +COLUMN DATAFILE_UnMirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999 +COLUMN TEMPFILE_UnMirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999 +COLUMN ONLINELOG_UnMirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999 +COLUMN ARCHIVELOG_UnMirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999 +COLUMN BACKUPSET_UnMirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999 +COLUMN FLASHBACK_UnMirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999 +COLUMN OCRFILE_UnMirroredSize HEADING "OCR|(&&size_label)" FORMAT 999 +COLUMN AUTOBACKUP_UnMirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999 +COLUMN CONTROLFILE_UnMirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999 +COLUMN PARAMFILE_UnMirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999 + +BREAK ON REPORT + +/* +BREAK ON diskgroup_name SKIP 1 DUPLICATES ON REPORT + +COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name +*/ + +COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON REPORT + +COMPUTE SUM LABEL 'Total' OF DISKGROUP_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF DATAFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF TEMPFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ONLINELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF BACKUPSET_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF FLASHBACK_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF OCRFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF CONTROLFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF PARAMFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT + + +/* +PROMPT +PROMPT +PROMPT - <------------------------ Mirrored (GB) --------------------------------> <------------------------- UnMirrored (GB) -----------------------------> +*/ + + +WITH asm_alias AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_alias ) + , asm_diskgroup_stat AS (SELECT /*+ NO_MERGE */ * FROM v$asm_diskgroup WHERE name LIKE '&&DISKGROUP_NAME' ) + , asm_file AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_file ) + , files AS (SELECT /*+ NO_MERGE MATERIALIZE */ + diskgroup_name + , SUBSTR(SYS_CONNECT_BY_PATH(alias_name, '/'),2) File_Path + , alias_name + , type + , alias_directory + , space + , bytes + , system_created + , file_number + , incarnation + FROM (SELECT dg.name diskgroup_name + , a.parent_index parent_index + , a.name alias_name + , a.reference_index reference_index + , a.system_created + , a.alias_directory + , f.type + , f.space + , f.bytes + , f.file_number + , f.incarnation + FROM asm_diskgroup_stat dg + JOIN asm_alias a ON a.group_number = dg.group_number + /* Outer join because alias could be a directory */ + LEFT OUTER JOIN asm_file f ON f.group_number = a.group_number + AND f.file_number = a.file_number + AND f.incarnation = a.file_incarnation + -- WHERE dg.name LIKE '&&DISKGROUP_NAME' + ) + CONNECT BY NOCYCLE PRIOR reference_index = parent_index + START WITH mod(parent_index, power(2, 24)) = 0 /*Parent level database directory e.g. +DATA/MYDB etc */ + AND UPPER(alias_name) LIKE '&&DBNAME' + +/* + AND reference_index IN (SELECT a2.reference_index + FROM asm_alias a2 + WHERE (mod(a2.parent_index, power(2, 24))) = 0 + ) +*/ + ) + +SELECT f.diskgroup_name + , SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1) dbname + , ROUND(SUM(f.bytes)/&&size_divider) DISKGROUP_MirroredSize + , ROUND(SUM(DECODE(f.type, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_MirroredSize + , ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_MirroredSize + , ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_MirroredSize + , ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_MirroredSize + , ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_MirroredSize + , ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_MirroredSize + , ROUND(SUM(DECODE(f.type, 'OCRFILE',f.bytes,0))/&&size_divider) OCRFILE_MirroredSize + , ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.bytes,0))/&&size_divider) AUTOBACKUP_MirroredSize + , ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.bytes,0))/&&size_divider) CONTROLFILE_MirroredSize + --, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.bytes,'ASMPARAMETERFILE',f.bytes,0))/&&size_divider) PARAMFILE_MirroredSize +/* + , ROUND(SUM(f.space)/&&size_divider) DISKGROUP_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'DATAFILE',f.space,0))/&&size_divider) DATAFILE_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.space,0))/&&size_divider) TEMPFILE_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.space,0))/&&size_divider) ONLINELOG_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.space,0))/&&size_divider) ARCHIVELOG_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.space,0))/&&size_divider) BACKUPSET_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.space,0))/&&size_divider) FLASHBACK_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'OCRFILE',f.space,0))/&&size_divider) OCRFILE_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.space,0))/&&size_divider) AUTOBACKUP_UnMirroredSize + --, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.space,0))/&&size_divider) CONTROLFILE_UnMirroredSize + --, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.space,'ASMPARAMETERFILE',f.space,0))/&&size_divider) PARAMFILE_UnMirroredSize +*/ + FROM files f /* System created files */ + LEFT OUTER JOIN files f2 /* File alias */ + ON f2.diskgroup_name = f.diskgroup_name + AND f2.file_number = f.file_number + AND f2.incarnation = f.incarnation + AND f2.system_created = 'N' + AND f2.alias_directory = 'N' + AND f.system_created = 'Y' + AND f.alias_directory = 'N' +WHERE 1=1 + AND f.system_created = 'Y' /* Dont remove this condition */ + AND f.alias_directory = 'N' + AND UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1)) LIKE '&&DBNAME' ESCAPE '\' +GROUP BY f.diskgroup_name + , SUBSTR(NVL(f2.File_Path,f.file_path),1,INSTR(NVL(f2.File_Path,f.file_path),'/')-1) /*dbname*/ +ORDER BY f.diskgroup_name + , UPPER(dbname) +; + + +@@footer diff --git a/vg/asm_diskgroup_usage_by_directory.sql b/vg/asm_diskgroup_usage_by_directory.sql new file mode 100644 index 0000000..9850682 --- /dev/null +++ b/vg/asm_diskgroup_usage_by_directory.sql @@ -0,0 +1,112 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display ASM diskgroup usage by directory +* Parameters : 1 - DiskGroup (% - wildchar, \ - escape char, default is '%') +* 2 - Directory (% - wildchar, \ - escape char, default is '%') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 17-Apr-12 Vishal Gupta First Draft +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DISKGROUP_NAME +UNDEFINE DISK_NAME + +DEFINE DISKGROUP_NAME="&&1" +DEFINE DIRECTORY="&&2" + +set term off +COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT +COLUMN _DIRECTORY NEW_VALUE DIRECTORY NOPRINT + +SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME" + , UPPER(DECODE('&&DIRECTORY','','%','&&DIRECTORY')) "_DIRECTORY" +FROM DUAL; +set term on + +PROMPT +PROMPT ********************************************************************** +PROMPT * A S M D I S K G R O U P S P A C E U S A G E * +PROMPT * (By FileType and Directory) * +PROMPT * +PROMPT * Input Parameters +PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME' +PROMPT * - Directory = '&&DIRECTORY' +PROMPT ********************************************************************** + +COLUMN DiskGroup HEADING "DiskGroup" FORMAT a20 +COLUMN file_type HEADING "FileType" FORMAT a20 +COLUMN Mirrored_UsedSize HEADING "Mirrored|UsedSize|(GB)" FORMAT 999,999,999 +COLUMN UnMirrored_UsedSize HEADING "UnMirrored|UsedSize|(GB)" FORMAT 999,999,999 +COLUMN parent_directory HEADING "Directory" FORMAT a60 + + +WITH asm_alias AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_alias ) + , asm_diskgroup_stat AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_diskgroup_stat ) + , asm_file AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_file ) + , aliases as (SELECT /*+ no_merge materialize */ + SYS_CONNECT_BY_PATH(a.name, '/') File_Path + , level hierarchy_level + , CONNECT_BY_ISLEAF + , a.* + FROM asm_alias a + CONNECT BY NOCYCLE + PRIOR a.group_number = a.group_number + AND PRIOR a.reference_index = a.parent_index + START WITH mod(parent_index, power(2, 24)) = 0 + AND reference_index IN (SELECT a2.reference_index + FROM asm_alias a2 + WHERE (mod(a2.parent_index, power(2, 24))) = 0 + /*Parent level database directory e.g. +DATA/MYDB etc */ + ) + ) +, files as + ( + SELECT SUBSTR('+' || g.name || a.file_path,1, INSTR('+' || g.name || a.file_path,'/',-1) ) as parent_directory + , '+' || g.name || a.file_path as file_path + , g.name DiskGroup + , f.type + , f.block_size + , f.space + , f.redundancy + , f.redundancy_lowered + , f.striped + , f.bytes + , f.creation_date + , f.modification_date + FROM asm_diskgroup_stat g + JOIN aliases a ON a.group_number = g.group_number + LEFT OUTER JOIN asm_file f ON f.group_number = a.group_number + AND f.file_number = a.file_number + AND f.incarnation = a.file_incarnation + ) +SELECT af.DiskGroup + , af.type file_type + , ROUND(sum(af.bytes)/1024/1024/1024) Mirrored_UsedSize + , ROUND(sum(af.space)/1024/1024/1024) UnMirrored_UsedSize + , af.parent_directory + FROM files af + WHERE af.diskgroup like '&&DISKGROUP_NAME' ESCAPE '\' + AND af.file_path LIKE '&&DIRECTORY' ESCAPE '\' +GROUP BY af.DiskGroup + , af.type + , af.parent_directory +ORDER BY af.DiskGroup + , af.type + , af.parent_directory +; + + +@@footer diff --git a/vg/asm_diskgroup_usage_by_filetype.sql b/vg/asm_diskgroup_usage_by_filetype.sql new file mode 100644 index 0000000..114d3f7 --- /dev/null +++ b/vg/asm_diskgroup_usage_by_filetype.sql @@ -0,0 +1,148 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : ASM usage by file type for all mounted diskgroups (including other databases) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Jan-10 Vishal Gupta First Draft +* +* +*/ + + +DEFINE size_label=GB +DEFINE size_divider="1024/1024/1024" + +PROMPT +PROMPT ******************************************************************* +PROMPT * A S M S P A C E U S A G E B Y F I L E T Y P E * +PROMPT * * +PROMPT * - For all diskgroups mounted in current instance * +PROMPT * - Including files for other databases * +PROMPT ******************************************************************* + + +COLUMN NAME HEADING "DiskGroup" FORMAT A15 + +COLUMN DISKGROUP_UnMirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999 +COLUMN DATAFILE_UnMirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999 +COLUMN TEMPFILE_UnMirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999 +COLUMN ONLINELOG_UnMirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999 +COLUMN ARCHIVELOG_UnMirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999 +COLUMN BACKUPSET_UnMirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999 +COLUMN FLASHBACK_UnMirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999 +COLUMN OCRFILE_UnMirroredSize HEADING "OCR|(&&size_label)" FORMAT 999 +COLUMN AUTOBACKUP_UnMirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999 +COLUMN CONTROLFILE_UnMirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999 +COLUMN PARAMFILE_UnMirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999 + +COLUMN DISKGROUP_MirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999 +COLUMN DATAFILE_MirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999 +COLUMN TEMPFILE_MirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999 +COLUMN ONLINELOG_MirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999 +COLUMN ARCHIVELOG_MirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999 +COLUMN BACKUPSET_MirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999 +COLUMN FLASHBACK_MirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999 +COLUMN OCRFILE_MirroredSize HEADING "OCR|(&&size_label)" FORMAT 999 +COLUMN AUTOBACKUP_MirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999 +COLUMN CONTROLFILE_MirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999 +COLUMN PARAMFILE_MirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999 + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON REPORT + +COMPUTE SUM LABEL 'Total' OF DISKGROUP_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF DATAFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF TEMPFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ONLINELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF BACKUPSET_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF FLASHBACK_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF OCRFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF CONTROLFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF PARAMFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT + + + +/* +Sample Output + +******************************************************************* +* A S M S P A C E U S A G E B Y F I L E T Y P E * +* * +* - For all diskgroups mounted in current instance * +* - Including files for other databases * +******************************************************************* + + +- <----------------------- Mirrored (GB) ---------------------------------------> <----------------------- UnMirrored (GB) -------------------------------------> + + Redo Arch Backup Auto Control Param Redo Arch Auto Control Param + Total DataFile TempFile Log Log Set OCR Backup File File Total DataFile TempFile Log Log BackupSet OCR Backup File File +DiskGroup (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) +--------------- -------- -------- -------- ------ -------- -------- ---- -------- ------- ----- -------- -------- -------- ------ -------- --------- ---- -------- ------- ----- +DATA 8,129 5,698 0 94 2,328 0 0 8 0 0 16,273 11,397 0 189 4,667 0 0 17 1 0 +DATA_DM01 44,472 43,727 0 745 0 0 0 0 0 0 88,973 87,480 0 1,492 0 0 0 0 1 0 +FLASH_DM01 881 0 881 0 0 0 0 0 0 0 1,764 0 1,764 0 0 0 0 0 0 0 +RECO 21,883 21,629 164 88 0 0 0 0 1 0 43,782 43,273 329 176 0 0 0 0 4 0 +RECO_DM01 38,510 4,442 23 121 33,923 0 0 1 0 0 77,186 8,885 46 243 68,011 0 0 2 1 0 +SYSTEMDG 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 + -------- -------- -------- ------ -------- -------- ---- -------- ------- ----- -------- -------- -------- ------ -------- --------- ---- -------- ------- ----- +Total 113,875 75,496 1,068 1,048 36,251 0 0 9 1 0 227,979 151,035 2,139 2,100 72,678 0 1 19 7 0 + +*/ + +PROMPT +PROMPT +PROMPT - <----------------------- Mirrored (GB) ----------------------------------> <----------------------- UnMirrored (GB) ------------------------------------> + +select dg.name + , ROUND(SUM(f.bytes)/&&size_divider) DISKGROUP_MirroredSize + , ROUND(SUM(DECODE(f.type, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_MirroredSize + , ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_MirroredSize + , ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_MirroredSize + , ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_MirroredSize + , ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_MirroredSize + , ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_MirroredSize + , ROUND(SUM(DECODE(f.type, 'OCRFILE',f.bytes,0))/&&size_divider) OCRFILE_MirroredSize + , ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.bytes,0))/&&size_divider) AUTOBACKUP_MirroredSize + --, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.bytes,0))/&&size_divider) CONTROLFILE_MirroredSize + --, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.bytes,'ASMPARAMETERFILE',f.bytes,0))/&&size_divider) PARAMFILE_MirroredSize + + , ROUND(SUM(f.space)/&&size_divider) DISKGROUP_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'DATAFILE',f.space,0))/&&size_divider) DATAFILE_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.space,0))/&&size_divider) TEMPFILE_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.space,0))/&&size_divider) ONLINELOG_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.space,0))/&&size_divider) ARCHIVELOG_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.space,0))/&&size_divider) BACKUPSET_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.space,0))/&&size_divider) FLASHBACK_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'OCRFILE',f.space,0))/&&size_divider) OCRFILE_UnMirroredSize + , ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.space,0))/&&size_divider) AUTOBACKUP_UnMirroredSize + --, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.space,0))/&&size_divider) CONTROLFILE_UnMirroredSize + --, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.space,'ASMPARAMETERFILE',f.space,0))/&&size_divider) PARAMFILE_UnMirroredSize +from v$asm_file f + , v$asm_diskgroup_stat dg +where dg.group_number = f.group_number +group by dg.name +ORDER BY dg.name +; + + +@@footer diff --git a/vg/asm_diskgroup_usage_currentdb.sql b/vg/asm_diskgroup_usage_currentdb.sql new file mode 100644 index 0000000..a94aff7 --- /dev/null +++ b/vg/asm_diskgroup_usage_currentdb.sql @@ -0,0 +1,59 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display ASM diskgroup usage by Filetype for current database. +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-Mar-12 Vishal Gupta First Draft +*/ + +set lines 200 +COLUMN FileType FORMAT a20 +COLUMN DiskGroup FORMAT a20 +COLUMN SizeGB FORMAT 999,999,999.99 + +BREAK ON REPORT + +COMPUTE SUM LABEL "Total" OF SizeGB FORMAT 99,999,999,999.99 ON REPORT + +SelECt Diskgroup, FileType , SizeGB +FROM +( +select 'DATAFILE' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2) SizeGB +from v$datafile +group by SUBSTR(name,1, instr(name,'/') -1) +UNION ALL +select 'TEMPFILE' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2) +from v$tempfile +group by SUBSTR(name,1, instr(name,'/') -1) +UNION ALL +select 'ONLINE REDO' FileType, SUBSTR(member,1, instr(member,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2) +from v$log l , v$logfile lf +where l.group# = lf.group# +group by SUBSTR(member,1, instr(member,'/') -1) +UNION ALL +select 'ARCHIVE LOG' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(blocks* block_size)/1024/1024/1024,2) +from v$archived_log +where dest_id = 1 and DELETED = 'NO' and status = 'A' +group by SUBSTR(name,1, instr(name,'/') -1) +UNION ALL +SELECT 'CONTROLFILE' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(file_size_blks* block_size)/1024/1024/1024,2) +from v$controlfile +group by SUBSTR(name,1, instr(name,'/') -1) +UNION ALL +select 'BCT_FILE' FileType, SUBSTR(filename,1, instr(filename,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2) +from v$block_change_tracking where status = 'ENABLED' +group by SUBSTR(filename,1, instr(filename,'/') -1) +ORDER BY FileType, DISKGROUP +) +ORDER BY DiskGroup,FileType +; + +@@footer \ No newline at end of file diff --git a/vg/asm_failgroup.sql b/vg/asm_failgroup.sql new file mode 100644 index 0000000..b2b67e6 --- /dev/null +++ b/vg/asm_failgroup.sql @@ -0,0 +1,47 @@ +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display ASM Disk Failgroups +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Apr-11 Vishal Gupta First cut +*/ +set term on + +set lines 250 +set pages 50 + +COLUMN DiskGroup FORMAT A10 +COLUMN Disk FORMAT A30 +COLUMN Partner_Disk FORMAT A30 +COLUMN DiskGroup FORMAT A0 +COLUMN FAILGROUP FORMAT A20 +COLUMN PARTNER_FAILGROUP FORMAT A20 +COLUMN path FORMAT A30 +COLUMN PARTNER_PATH FORMAT A30 + +SELECT dg1.name DiskGroup + , d1.NAME Disk +-- , d1.path + , d1.FAILGROUP + , d2.name Partner_Disk + , d2.FAILGROUP PARTNER_FAILGROUP +-- , d2.path PARTNER_PATH +FROM x$kfdpartner p + , v$asm_disk_stat d1 + , v$asm_diskgroup_stat dg1 + , v$asm_disk_stat d2 +WHERE dg1.group_number = d1.group_number + AND p.GRP = dg1.group_number + AND p.disk = d1.DISK_NUMBER + AND p.GRP = d2.group_number (+) + AND p.NUMBER_KFDPARTNER = d2.DISK_NUMBER (+) + AND dg1.name like '%%' --DiskGroup Name + AND d1.name like '%%' --Disk Name +ORDER BY dg1.name + , d1.NAME; + diff --git a/vg/asm_imbalance.sql b/vg/asm_imbalance.sql new file mode 100644 index 0000000..8d2d364 --- /dev/null +++ b/vg/asm_imbalance.sql @@ -0,0 +1,30 @@ +@@header + +COLUMN diskgroup_name HEADING "DiskGroup Name" FORMAT a20 +COLUMN Imbalance_percent HEADING "Imbalance|(%)" FORMAT 99999999.99 +COLUMN Variance HEADING "Variance" FORMAT 999.99999 +COLUMN MinFree HEADING "MinFree|(%)" FORMAT 999.99 +COLUMN DiskCnt HEADING "Disk Count" FORMAT 99999 +COLUMN Type HEADING "Redundancy|Typet" FORMAT a10 + +select g.name diskgroup_name + , 100*(max((d.total_mb-d.free_mb + (128*g.allocation_unit_size/1048576))/(d.total_mb + (128*g.allocation_unit_size/1048576))) + -min((d.total_mb-d.free_mb + (128*g.allocation_unit_size/1048576))/(d.total_mb + (128*g.allocation_unit_size/1048576))) + ) /max((d.total_mb-d.free_mb + (128*g.allocation_unit_size/1048576))/(d.total_mb + (128*g.allocation_unit_size/1048576))) + Imbalance_percent + , 100*(max(d.total_mb)-min(d.total_mb))/max(d.total_mb) Variance /* Percent difference between largest and smallest disk */ + , 100*(min(d.free_mb/d.total_mb)) MinFree /* The disk with the least free space as a percent of total space */ + , count(*) DiskCnt /* Number of disks in the diskgroup */ + , g.type Type /* Diskgroup redundancy */ +FROM v$asm_disk_stat d + , v$asm_diskgroup_stat g +WHERE d.group_number = g.group_number +AND d.group_number <> 0 +AND d.state = 'NORMAL' +AND d.mount_status = 'CACHED' +GROUP BY g.name + , g.type +ORDER BY g.name +; + +@@footer \ No newline at end of file diff --git a/vg/asm_imbalance2.sql b/vg/asm_imbalance2.sql new file mode 100644 index 0000000..2d62fc3 --- /dev/null +++ b/vg/asm_imbalance2.sql @@ -0,0 +1,51 @@ + + +/* + +********************************************************** +********* Needs to be run on ASM instance **************** +********************************************************** + +Max and min columns should be close to each other for balanced files. + +file# max min +=== === === +3013 57 941 +3018 58 942 +3021 59 942 +3043 940 942 +3053 938 941 + +** All the disks in this example are having the same total capacity. + +From the output above, files with imbalanced extents are file# 3013, 3018 and 3021. For example, for file# 3013 there are 59 extents in one disk and 942 extents in another disk. + + +File# 3043 and 3053 have extents almost equally balanced. Small imbalances are expected. + +*/ + +DEFINE diskgroup_number="&&1" + +set pagesize 55 +set linesize 90 + +SELECT group_kffxp Group# + , number_kffxp file# + , MAX(count1) MAX + , MIN(count1) MIN +FROM + (SELECT group_kffxp + , number_kffxp + , disk_kffxp + , COUNT(XNUM_KFFXP) count1 + FROM sys.x$kffxp + WHERE group_kffxp = &diskgroup_number + ANd disk_kffxp != 65534 + GROUP BY group_kffxp, number_kffxp, disk_kffxp + ) +GROUP BY group_kffxp, number_kffxp; +ORDER BY group_kffxp + , number_kffxp + +UNDEFINE diskgroup_number \ No newline at end of file diff --git a/vg/asm_operation.sql b/vg/asm_operation.sql new file mode 100644 index 0000000..4168062 --- /dev/null +++ b/vg/asm_operation.sql @@ -0,0 +1,45 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display ASM Operations +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-APR-13 Vishal Gupta Created +* +*/ + + +PROMPT ************************************ +PROMPT *** A S M O P E R A T I O N S *** +PROMPT ************************************ + +COLUMN name HEADING "DiskGroup" FORMAT a20 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN group_number HEADING "G#" FORMAT 99 +COLUMN operation HEADING "Operation" FORMAT a10 +COLUMN state HEADING "State" FORMAT a8 +COLUMN power HEADING "Power" FORMAT 99999 +COLUMN actual HEADING "Actual" FORMAT 999999 +COLUMN sofar HEADING "SoFar" FORMAT 9,999,999,999 +COLUMN est_work HEADING "Estimated|Work" FORMAT 9,999,999,999 +COLUMN est_rate HEADING "Estimated|Rate" FORMAT 999,999 +COLUMN est_minutes HEADING "Estimated|Minutes" FORMAT 999,999 +COLUMN error_code HEADING "Error Code" FORMAT a20 + +SELECT g.name + , o.* + FROM gv$asm_operation o + , v$asm_diskgroup_stat g + WHERE g.group_number = o.group_number + AND o.state = 'RUN' + ORDER BY o.inst_id + , g.name + +; + +@@footer diff --git a/vg/asmm_info.sql b/vg/asmm_info.sql new file mode 100644 index 0000000..3a5a3b0 --- /dev/null +++ b/vg/asmm_info.sql @@ -0,0 +1,150 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 26-Jan-15 Vishal Gupta Renamed oper_count heading to "Resize Oper Count" +* 28-MAY-12 Vishal Gupta Fixed to differentiate between instance specific +* and generic (*.param) parameter values in spfile +* 14-MAR-12 Vishal Gupta Modified to make it RAC friendly +* 15-SEP-08 Vishal Gupta First Draft +* +*/ + +set term on + +COLUMN inst_id HEADING "Inst#" FORMAT 99999 +COLUMN name HEADING "Name" FORMAT a21 +COLUMN current_value1 HEADING "Current" FORMAT a10 +COLUMN spfile_value1 HEADING "SPFile" FORMAT a10 +COLUMN current_value2 HEADING "Current" FORMAT a10 +COLUMN spfile_value2 HEADING "SPFile" FORMAT a10 +COLUMN current_value3 HEADING "Current" FORMAT a10 +COLUMN spfile_value3 HEADING "SPFile" FORMAT a10 +COLUMN current_value4 HEADING "Current" FORMAT a10 +COLUMN spfile_value4 HEADING "SPFile" FORMAT a10 +COLUMN current_value5 HEADING "Current" FORMAT a10 +COLUMN spfile_value5 HEADING "SPFile" FORMAT a10 +COLUMN current_value6 HEADING "Current" FORMAT a10 +COLUMN spfile_value6 HEADING "SPFile" FORMAT a10 +COLUMN current_value7 HEADING "Current" FORMAT a10 +COLUMN spfile_value7 HEADING "SPFile" FORMAT a10 +COLUMN current_value8 HEADING "Current" FORMAT a10 +COLUMN spfile_value8 HEADING "SPFile" FORMAT a10 + + +COLUMN component HEADING "Component" FORMAT a24 +COLUMN user_specified_size HEADING "User|Specified|(MB)" FORMAT 99,999,999 +COLUMN current_size HEADING "Current|(MB)" FORMAT 99,999,999 +COLUMN free_size HEADING "Free|(MB)" FORMAT 99,999,999 +COLUMN min_size HEADING "Min|(MB)" FORMAT 99,999,999 +COLUMN max_size HEADING "Max|(MB)" FORMAT 99,999,999 +COLUMN GRANULE_SIZE HEADING "Granule|(MB)" FORMAT 9,999 +COLUMN last_oper_type HEADING "Last|Operation|Type" FORMAT a12 +COLUMN oper_count HEADING "Resize|Oper|Count" FORMAT 99,999,999 +COLUMN last_oper_time HEADING "Last|Operation|Time" FORMAT a18 + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF current_size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF free_size FORMAT 99,999,999 ON REPORT + +PROMPT +PROMPT #################################################################### +PROMPT ####### ####### +PROMPT ####### Automatic Shared Memory Management Settings ####### +PROMPT ####### ####### +PROMPT #################################################################### +PROMPT + + +PROMPT - <---- Instance 1 ---> <---- Instance 2 ---> <---- Instance 3 ---> <---- Instance 4 ---> <---- Instance 5 ---> <---- Instance 6 ---> <---- Instance 7 ---> <---- Instance 8 ---> +select RPAD(pp.name,20) || '|' name + , MAX(DECODE(pp.inst_id, 1, pp.display_value,NULL)) current_value1 + , MAX(DECODE(pp.inst_id, 1, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value1 + , MAX(DECODE(pp.inst_id, 2, pp.display_value,NULL)) current_value2 + , MAX(DECODE(pp.inst_id, 2, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value2 + , MAX(DECODE(pp.inst_id, 3, pp.display_value,NULL)) current_value3 + , MAX(DECODE(pp.inst_id, 3, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value3 + , MAX(DECODE(pp.inst_id, 4, pp.display_value,NULL)) current_value4 + , MAX(DECODE(pp.inst_id, 4, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value4 + , MAX(DECODE(pp.inst_id, 5, pp.display_value,NULL)) current_value5 + , MAX(DECODE(pp.inst_id, 5, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value5 + , MAX(DECODE(pp.inst_id, 6, pp.display_value,NULL)) current_value6 + , MAX(DECODE(pp.inst_id, 6, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value6 + , MAX(DECODE(pp.inst_id, 7, pp.display_value,NULL)) current_value7 + , MAX(DECODE(pp.inst_id, 7, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value7 + , MAX(DECODE(pp.inst_id, 8, pp.display_value,NULL)) current_value8 + , MAX(DECODE(pp.inst_id, 8, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value8 +from gv$system_parameter pp + JOIN gv$instance i ON pp.inst_id = i.inst_id + LEFT OUTER JOIN gv$spparameter sp ON pp.inst_id = sp.inst_id AND sp.sid = i.instance_name and pp.name = sp.name + LEFT OUTER JOIN gv$spparameter sp_generic ON sp_generic.inst_id = pp.inst_id AND sp_generic.sid = '*' and sp_generic.name = pp.name +WHERE ( pp.name in ('memory_target' + ,'memory_max_target' + ,'sga_target' + ,'sga_max_size' + ,'lock_sga' + ,'pre_page_sga' + ,'pga_aggregate_target' + ,'large_pool_size' + ,'use_large_pages' + ) + ) +GROUP BY pp.name +UNION ALL +-- Get Host physical memory +select RPAD(os.stat_name,20) || '|' name + , MAX(DECODE(os.inst_id, 1, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value1 + , MAX(DECODE(os.inst_id, 1, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value1 + , MAX(DECODE(os.inst_id, 2, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value2 + , MAX(DECODE(os.inst_id, 2, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value2 + , MAX(DECODE(os.inst_id, 3, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value3 + , MAX(DECODE(os.inst_id, 3, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value3 + , MAX(DECODE(os.inst_id, 4, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value4 + , MAX(DECODE(os.inst_id, 4, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value4 + , MAX(DECODE(os.inst_id, 5, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value5 + , MAX(DECODE(os.inst_id, 5, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value5 + , MAX(DECODE(os.inst_id, 6, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value6 + , MAX(DECODE(os.inst_id, 6, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value6 + , MAX(DECODE(os.inst_id, 7, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value7 + , MAX(DECODE(os.inst_id, 7, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value7 + , MAX(DECODE(os.inst_id, 8, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value8 + , MAX(DECODE(os.inst_id, 8, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value8 +from gv$osstat os +where os.stat_name = 'PHYSICAL_MEMORY_BYTES' +GROUP BY os.stat_name +ORDER BY 1 +/ + + +BREAK ON inst_id SKIP 1 + +SELECT c.inst_id + , c.component + , ROUND(c.user_specified_size / 1024 / 1024) user_specified_size + , ROUND(c.current_size / 1024 / 1024) current_size + , ROUND(NVL(s.bytes,0) / 1024 / 1024) free_size + , ROUND(c.min_size / 1024 / 1024) min_size + , ROUND(c.max_size / 1024 / 1024) max_size + , ROUND(c.GRANULE_SIZE / 1024 / 1024) GRANULE_SIZE + , c.oper_count + , c.last_oper_type + , to_char(c.last_oper_time,'DD-MON-YY hh24:mi:Ss') last_oper_time +FROM gv$sga_dynamic_components c + , GV$SGASTAT s +WHERE c.inst_id = s.inst_id (+) + AND c.component = s.pool (+) + AND s.name (+) = 'free memory' + AND c.current_size <> 0 +ORDER BY c.inst_id , c.component +/ + + +@@footer diff --git a/vg/assyst.sql b/vg/assyst.sql new file mode 100644 index 0000000..f8589a9 --- /dev/null +++ b/vg/assyst.sql @@ -0,0 +1,38 @@ +SELECT DISTINCT(assyst_usr_b.assyst_usr_n) AS "DBA Name", + COUNT(*) "Total Closed Calls" + FROM incident , + product , + item item_a , + serv_dept serv_dept_b , + assyst_usr assyst_usr_b, + usr usr_b , + bldng_room , + inc_cat inc_cat_a , + inc_serious , + supplier , + hplan_head hplan_head_a, + inc_data + WHERE incident.item_id = item_a.item_id +AND item_a.product_id = product.product_id +AND incident.ass_usr_id = assyst_usr_b.assyst_usr_id +AND incident.ass_svd_id = serv_dept_b.serv_dept_id +AND incident.aff_usr_id = usr_b.usr_id +AND incident.inc_cat_id = inc_cat_a.inc_cat_id +AND incident.inc_serious_id = inc_serious.inc_serious_id +AND incident.ass_supp_id = supplier.supplier_id +AND incident.bldng_room_id = bldng_room.bldng_room_id +AND incident.hplan_head_id = hplan_head_a.hplan_head_id +AND incident.incident_id = inc_data.incident_id +AND (incident.incident_id >9999999 +AND inc_data.u_num2 =0 +OR incident.incident_id >0 +AND incident.incident_id <5000000 +OR incident.incident_id >4999999 +AND incident.incident_id <10000000 +OR (incident.incident_id >9999999 +AND inc_data.u_num2 >0)) +AND (incident.inc_status ='c' ) +AND incident.ass_svd_id IN(16) +AND incident.inc_close_date > GETDATE()-29 +GROUP BY (assyst_usr_b.assyst_usr_n) +ORDER BY "Total Closed Calls" DESC \ No newline at end of file diff --git a/vg/autotask_windows.sql b/vg/autotask_windows.sql new file mode 100644 index 0000000..2a05935 --- /dev/null +++ b/vg/autotask_windows.sql @@ -0,0 +1,45 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Auto Task Windows +* Compatibility : +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 14-Dec-16 Vishal Gupta Created +* +*/ + + +PROMPT ************************************************** +PROMPT * DB Auto Task Windows +PROMPT ************************************************** + +COLUMN window_name HEADING "Window Name" FORMAT a35 +COLUMN autotask_status HEADING "Status" FORMAT a8 +COLUMN window_active HEADING "Window|Active" FORMAT a6 +COLUMN optimizer_stats HEADING "Optimizer|Stats" FORMAT a8 +COLUMN segment_advisor HEADING "Segment|Advisor" FORMAT a8 +COLUMN sql_tune_advisor HEADING "SQL|Tune" FORMAT a8 +COLUMN health_monitor HEADING "Health|Monitor" FORMAT a8 +COLUMN window_next_time HEADING "Window|Next Time" FORMAT a40 TRUNC + +SELECT a.window_name + , a.autotask_status + , a.window_active + , a.optimizer_stats + , a.segment_advisor + , a.sql_tune_advisor + , a.health_monitor + , a.window_next_time + FROM dba_autotask_window_clients a +order by a.window_next_time +; + +@@footer + diff --git a/vg/autotasks.sql b/vg/autotasks.sql new file mode 100644 index 0000000..6cbd6f7 --- /dev/null +++ b/vg/autotasks.sql @@ -0,0 +1,43 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Auto Tasks +* Compatibility : +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 28-Jun-16 Vishal Gupta Created +* +*/ + + +PROMPT ************************************************** +PROMPT * Database Auto Tasks +PROMPT ************************************************** + + +COLUMN client_name HEADING "Client Name" FORMAT a35 +COLUMN client_tag HEADING "Client|Tag" FORMAT a6 +COLUMN window_group HEADING "Scheduler|Window|Group" FORMAT a15 +COLUMN resource_percentage HEADING "Res(%)" FORMAT 99999 + + + +SELECT a.client_name + , a.status + , a.consumer_group + , a.client_tag + , a.priority_override + , a.window_group + , a.resource_percentage + , a.service_name + , a. + FROM dba_autotask_client a +; + +@@footer diff --git a/vg/aw_sessions.sql b/vg/aw_sessions.sql new file mode 100644 index 0000000..b6d5606 --- /dev/null +++ b/vg/aw_sessions.sql @@ -0,0 +1,71 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display OLAP Sessions +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Jul-12 Vishal Gupta Created +* +*/ + +PROMPT ********************************** +PROMPT * Analytic Workspace Sessions +PROMPT ********************************** + +COLUMN owner HEADING "" FORMAT a20 +COLUMN aw_name HEADING "AW Name" FORMAT a27 +COLUMN aw_version HEADING "AW|Ver" FORMAT a5 +COLUMN attach_mode HEADING "Attach|Mode" FORMAT a6 +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN session_handle HEADING "Session|Handle" FORMAT 99999999 +COLUMN session_state HEADING "Session|State" FORMAT a10 +COLUMN userid HEADING "User" FORMAT a10 +COLUMN total_transaction HEADING "Total|Tran" FORMAT 99999 +COLUMN total_transaction_cpu_time HEADING "Total|Tran|CPUTime" FORMAT 999999999 +COLUMN total_transaction_time HEADING "Total|Tran|Time" FORMAT 999999999 + +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED +COLUMN process HEADING "Process" FORMAT a11 +COLUMN program HEADING "Program" FORMAT a18 TRUNCATED +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999 +--COLUMN last_call_et HEADING "LastCall" FORMAT a12 +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +select a.owner || '.' || a.aw_name aw_name + , a.aw_version + , DECODE(o.attach_mode,'READ WRITE','RW','MULTIWRITE','MW','READ ONLY','RO',o.attach_mode) attach_mode + , o.session_id + , o.inst_id + , s.status + , s.last_call_et + , s.username + , s.osuser + , s.program + , s.machine + , s.sql_id + , s.sql_child_number +from gv$aw_olap o + , dba_aws a + , gv$aw_session_info aws + , gv$session s +WHERE a.aw_number = o.aw_number + AND o.inst_id = aws.inst_id + AND o.session_id = aws.session_id + AND aws.inst_id = s.inst_id + AND aws.session_id = s.sid +ORDER BY aw_name, o.session_id +; + + +@@footer diff --git a/vg/aw_size.sql b/vg/aw_size.sql new file mode 100644 index 0000000..2612418 --- /dev/null +++ b/vg/aw_size.sql @@ -0,0 +1,60 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Analytic Workspace (AW) Size +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Jul-12 Vishal Gupta Created +* +*/ + +PROMPT ********************************** +PROMPT * Analytic Workspace Size +PROMPT ********************************** + +COLUMN owner HEADING "" FORMAT a20 +COLUMN aw_name HEADING "AW Name" FORMAT a25 +COLUMN aw_version HEADING "AW|Ver" FORMAT a5 +COLUMN attach_mode HEADING "Attach|Mode" FORMAT a5 +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN session_handle HEADING "Session|Handle" FORMAT 99999999 +COLUMN session_state HEADING "Session|State" FORMAT a10 +COLUMN userid HEADING "User" FORMAT a10 +COLUMN total_transaction HEADING "Total|Tran" FORMAT 99999 +COLUMN total_transaction_cpu_time HEADING "Total|Tran|CPUTime" FORMAT 999999999 +COLUMN total_transaction_time HEADING "Total|Tran|Time" FORMAT 999999999 + +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED +COLUMN process HEADING "Process" FORMAT a11 +COLUMN program HEADING "Program" FORMAT a18 TRUNCATED +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999 +--COLUMN last_call_et HEADING "LastCall" FORMAT a12 +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +SELECT l.owner || '.' || substr(l.table_name,4) aw_name + , s.tablespace_name + , sum(s.bytes)/1024/1024 as mb + FROM dba_lobs l + , dba_segments s +WHERE l.column_name = 'AWLOB' + AND l.segment_name = s.segment_name +GROUP BY l.owner + , l.table_name + , s.tablespace_name +ORDER BY l.owner + , l.table_name +; + + +@@footer diff --git a/vg/awr_buffer_hit_ratio_trend.sql b/vg/awr_buffer_hit_ratio_trend.sql new file mode 100644 index 0000000..d88fbb9 --- /dev/null +++ b/vg/awr_buffer_hit_ratio_trend.sql @@ -0,0 +1,42 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Buffer Hit Ratio from AWR data +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-06 Vishal Gupta First Draft +* 15-May-07 Vishal Gupta Formatted the output +*/ + +set pages 10000 + +COLUMN mydate HEADING 'YYYY-MM-DD HH24' +COLUMN bhr HEADING 'Buffer Hit|Ratio (%)' FORMAT 999 + +select + to_char(sn.END_INTERVAL_TIME,'yyyy-mm-dd HH24') mydate, + new.name buffer_pool_name, + (((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))-(new.physical_reads-old.physical_reads)) + /((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))*100 bhr +from DBA_HIST_buffer_pool_stat old, + DBA_HIST_buffer_pool_stat new, + DBA_HIST_snapshot sn +where sn.dbid = (select dbid from v$database) + AND sn.dbid = new.dbid + AND sn.instance_number = new.instance_number + AND new.dbid = old.dbid + AND new.instance_number = old.instance_number + and new.name = old.name + and new.snap_id = sn.snap_id + AND old.snap_id = sn.snap_id-1 + and sn.END_INTERVAL_TIME > sysdate - &&1 +order by 1 asc +/ + + +@@footer diff --git a/vg/awr_commands.sql b/vg/awr_commands.sql new file mode 100644 index 0000000..1e8bb88 --- /dev/null +++ b/vg/awr_commands.sql @@ -0,0 +1,361 @@ + + +---------------------------------------------------------------- +-- Take Snapshot +---------------------------------------------------------------- +exec dbms_workload_repository.create_snapshot('TYPICAL'); +exec dbms_workload_repository.create_snapshot('ALL'); + + +---------------------------------------------------------------- +-- Modify AWR Configuration +---------------------------------------------------------------- +BEGIN + DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 60*24*95 -- In Minutes (1 year = 525600) + , interval => 15 -- In Minutes + --, topnsql => NULL + --, dbid => NULL + ); +END; +/ + + + +---------------------------------------------------------------- +-- AWR - Gather Stats +---------------------------------------------------------------- +BEGIN +-- AWR Table partitions with STALE/MISSING stats +FOR i in ( +select STALE_STATS, last_analyzed, +'BEGIN dbms_stats.gather_table_stats(''' || owner || ''',''' || table_name || ''',partname=>''' || partition_name|| ''',GRANULARITY=>''PARTITION'',DEGREE=>16,CASCADE =>TRUE); END;' sqltext +from DBA_TAB_STATISTICS +where owner = 'SYS' +and table_name like 'WRH$%' +and (STALE_STATS = 'YES' OR last_analyzed is null) +and partition_name is not null +ORDER BY owner, table_name, partition_name +) +LOOP + execute immediate i.sqltext ; +END LOOP; +-- AWR Table with STALE/MISSING stats +FOR i in ( +select STALE_STATS, last_analyzed, +'exec dbms_stats.gather_table_stats(''' || owner || ''',''' || table_name || ''',DEGREE=>16,CASCADE =>TRUE);' +from DBA_TAB_STATISTICS +where owner = 'SYS' +and table_name like 'WRH$%' +and (STALE_STATS = 'YES' OR last_analyzed is null) +and partition_name is null +order by num_rows asc +) +LOOP + execute immediate i.sqltext ; +END LOOP; +END; +/ + + + +---------------------------------------------------------------- +-- Split AWR table partitions +---------------------------------------------------------------- +alter session set "_swrf_test_action" = 72; + + +---------------------------------------------------------------- +-- Purge AWR Repository +---------------------------------------------------------------- +Doc ID 1478615.1: How to Purge WRH$_SQL_PLAN Table in AWR Repository, Occupying Large Space in SYSAUX Tablespace. + +---------------------------------------------------------------- +-- Purge AWR Snapshots ( 1 day at time) +---------------------------------------------------------------- +SELECT 'exec dbms_workload_repository.drop_snapshot_range(low_snap_id=>' || min(snap_id) + ||' , high_snap_id=>' + || max(snap_id) + || ' , dbid=>' || min(dbid) + ||');' +from dba_hist_snapshot s +WHERE 1=1 + AND TO_CHAR(s.begin_interval_time,'HH24:MI') NOT LIKE '00:0%' -- Exclude midnight snapshots + and s.begin_interval_time < sysdate - 45 +group by trunc(begin_interval_time) +order by trunc(begin_interval_time) asc +; + + + + +---------------------------------------------------------------- +-- Purge AWR Snapshots ( 1 snap at a time) +---------------------------------------------------------------- +SELECT begin_interval_time + , 'exec dbms_workload_repository.drop_snapshot_range(low_snap_id=>' || snap_id + ||' , high_snap_id=>' + || snap_id + || ' , dbid=>' || dbid + ||');' +from dba_hist_snapshot s +WHERE 1=1 + AND TO_CHAR(s.begin_interval_time,'HH24:MI') NOT LIKE '00:0%' -- Exclude midnight snapshots +order by begin_interval_time asc +; + + +---------------------------------------------------------------- +-- Purge AWR Snapshots ( 1 snap at a time) +---------------------------------------------------------------- +DECLARE + lv_days_to_keep NUMBER := 90; + lv_sqltext VARCHAR2(4000); +BEGIN + execute immediate 'alter session enable parallel DDL'; + execute immediate 'alter session enable parallel DML'; + + FOR snap in ( SELECT distinct s.snap_id + , s.dbid + , TRUNC(s.begin_interval_time,'MI') begin_interval_time + from dba_hist_snapshot s + WHERE 1=1 + -- Exclude midnight snapshots + AND TO_CHAR(s.begin_interval_time,'HH24:MI') NOT LIKE '00:0%' + -- Exclude Baseline snaphosts + AND NOT EXISTS (select 1 from sys.WRM$_BASELINE b where s.dbid = b.dbid and s.snap_id BETWEEN b.start_snap_id AND b.end_snap_id ) + and s.begin_interval_time <= systimestamp - lv_days_to_keep + order by TRUNC(s.begin_interval_time,'MI') asc + ) + LOOP + FOR t IN ( select t.owner, t.table_name + from dba_tables t + where 1=1 + and t.owner = 'SYS' + and t.table_name like 'WRH%' + and exists (select 1 from dba_tab_columns c where c.owner = t.owner and c.table_name = t.table_name and c.column_name = 'SNAP_ID') + order by t.owner, t.table_name + ) + LOOP + lv_sqltext := 'delete /*+ parallel(8) */ from ' || t.owner || '.' || t.table_name || ' a where a.dbid = :DBID and a.snap_id = :SNAP_ID '; + IF t.table_name = 'WRH$_SQLTEXT' THEN + lv_sqltext := lv_sqltext || ' and not exists (select 1 from sys.wri$_sqltext_refcount r where r.dbid = a.dbid and r.sql_id = a.sql_id and r.ref_count > 0 ) '; + END IF; + execute immediate lv_sqltext USING snap.dbid , snap.snap_id; + --commit; + END LOOP; + --execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_DATABASE_INSTANCE a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id; + execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_SNAP_ERROR a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id; + execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_SNAPSHOT_DETAILS a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id; + execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_SNAPSHOT a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id; + commit; + END LOOP; +END; +/ + + +---------------------------------------------------------------- +-- AWR - Purge Orphaned ASH rows +-- +-- Doc ID 1478615.1: How to Purge WRH$_SQL_PLAN Table in AWR Repository, Occupying Large Space in SYSAUX Tablespace. +---------------------------------------------------------------- +SELECT COUNT(1) Orphaned_ASH_Rows +FROM sys.wrh$_active_session_history a +WHERE NOT EXISTS + (SELECT 1 + FROM sys.wrm$_snapshot + WHERE snap_id = a.snap_id + AND dbid = a.dbid + AND instance_number = a.instance_number + ) +; + + +DECLARE + lv_batch_count NUMBER := 10000; +BEGIN +LOOP + delete + FROM sys.wrh$_active_session_history a + WHERE NOT EXISTS + (SELECT 1 + FROM sys.wrm$_snapshot + WHERE snap_id = a.snap_id + AND dbid = a.dbid + AND instance_number = a.instance_number + ) + AND ROWNUM <= lv_batch_count; + EXIT WHEN SQL%ROWCOUNT = 0 ; + commit; +END LOOP; +END; +/ + + +---------------------------------------------------------------- +-- AWR - Purge Event Histogram +-- +-- Doc ID 1912201.1: Excessive AWR Growth From Partitioned Objects Such as SYS.WRH$_EVENT_HISTOGRAM Causing Sysaux to Grow +---------------------------------------------------------------- + + + +---------------------------------------------------------------- +-- AWR - Purge Older Partitions +---------------------------------------------------------------- + +exec dbms_workload_repository.create_snapshot; + +-- Split partitions +alter session set "_swrf_test_action" = 72; + +-- Create snapshot +exec dbms_workload_repository.create_snapshot; + +-- Check Tablespace size +@tbs SYSAUX + +-- Find older partitions +set lines 1000 +set numf 999,999,999,999 +SELECT bytes,segment_name, partition_name FROM dba_segments where owner = 'SYS' and segment_name like 'WR%' order by bytes asc; + + +select min(snap_id), min(BEGIN_INTERVAL_TIME) , MAX(snap_id) , max(END_INTERVAL_TIME) from dba_hist_snapshot; + +-- Drop partitions from another DBID +BEGIN +FOR i in ( +SELECT 'alter table sys.' || table_name || ' drop partition ' || partition_name sqltext +FROM dba_tab_partitions where table_owner ='SYS' and table_name like 'WRH$%' + and partition_name NOT like '%' || (select dbid from v$database) || '%' + and partition_name not LIKE '%MXDB_MXSN%' +) +LOOP + execute immediate i.sqltext; +END LOOP; +END; +/ + + + +-- Drop partitions +BEGIN +FOR I IN ( +select table_owner, table_name, partition_name, p.HIGH_VALUE + , substr(partition_name,INSTR(p.partition_name,'_',-1)+1) snap_id + , 'alter table ' || table_owner || '.' || table_name || ' drop partition ' || p.partition_name sqltext +from v$database d + JOIN dba_tab_partitions p ON 1=1 +where table_owner = 'SYS' +and table_name like 'WRH$_%' +and partition_name like '%' || d.dbid || '%' +and substr(partition_name,INSTR(p.partition_name,'_',-1)+1) + < (select max(snap_id) from dba_hist_snapshot s where s.dbid = d.dbid and s.END_INTERVAL_TIME < sysdate - 1) +order by table_owner, table_name, partition_position +) +LOOP + execute immediate i.sqltext; +END LOOP; +END; +/ + + +-- Check Tablespace size +@tbs SYSAUX + +-- Create snapshot +exec dbms_workload_repository.create_snapshot; + +-- Split partitions +alter session set "_swrf_test_action" = 72; + + + +-- Drop partitions +BEGIN +FOR i in ( +SELECT 'alter table sys.' || table_name || ' drop partition ' || partition_name sqltext +FROM dba_tab_partitions where table_owner ='SYS' and table_name like 'WRH$%' and partition_name like '%218469294%' +) +LOOP + execute immediate i.sqltext; +END LOOP; +END; +/ + + + +---------------------------------------------------------------- +-- AWR Extract +---------------------------------------------------------------- +sqlplus / as sysdba +spool awr_extract.log +DECLARE + l_days NUMBER := 90; + l_dbid SYS.DBA_HIST_SNAPSHOT.DBID%TYPE; + l_bid SYS.DBA_HIST_SNAPSHOT.SNAP_ID%TYPE; + l_eid SYS.DBA_HIST_SNAPSHOT.SNAP_ID%TYPE; +begin + SELECT s.dbid, min(s.snap_id) bid, max(s.snap_id) eid + INTO l_dbid, l_bid, l_eid + FROM dba_hist_snapshot s + WHERE s.dbid = (select dbid from v$database) + and begin_interval_time > sysdate - l_days + group by s.dbid ; + /* call PL/SQL routine to extract the data */ + sys.dbms_swrf_internal.awr_extract(dmpfile => 'AWR_exp' + , dmpdir => 'BETA_REFRESH' + , bid => l_bid + , eid=> l_eid + , dbid=> l_dbid + ); + sys.dbms_swrf_internal.clear_awr_dbid; +end; +/ +spool off + + + +---------------------------------------------------------------- +-- Drop AWR +---------------------------------------------------------------- +sqlplus / as sysdba +spool awr_drop.log +alter system set "_awr_restrict_mode" = TRUE scope=spfile sid='*'; +shutdown immediate +startup +@?/rdbms/admin/catnoawr.sql +alter system flush shared_pool; +spool off + +---------------------------------------------------------------- +-- Create AWR +---------------------------------------------------------------- +sqlplus / as sysdba +spool awr_create.log +@?/rdbms/admin/catawr.sql +@ ?/rdbms/admin/utlrp.sql +@ ?/rdbms/admin/execsvrm.sql +spool off + +---------------------------------------------------------------- +-- Import AWR Data +---------------------------------------------------------------- +TRUNCATE TABLE sys.wrm$_wr_control; +TRUNCATE TABLE sys.wrm$_wr_usage; +TRUNCATE TABLE sys.wrm$_snapshot_details; +impdp "'/ as sysdba'" parallel=16 directory=BETA_REFRESH dumfile=AWR_exp.dmp logfile=AWR.imp.log + +---------------------------------------------------------------- +-- Enable AWR Data +---------------------------------------------------------------- +sqlplus / as sysdba +spool awr_drop.log +alter system reset "_awr_restrict_mode" = TRUE scope=spfile sid='*'; +shutdown immediate +startup +exec dbms_workload_repository.create_snapshot; +exec dbms_workload_repository.create_snapshot; +select max(snap_id), max(end_interval_time) max_time, min(snap_id), min(end_interval_time) min_time +from dba_hist_snapshot; + diff --git a/vg/awr_config.sql b/vg/awr_config.sql new file mode 100644 index 0000000..1ba6569 --- /dev/null +++ b/vg/awr_config.sql @@ -0,0 +1,43 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display AWR Configuration +* Parameter : None +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 10-Apr-12 Vishal Gupta First Draft +* +*/ + +PROMPT +PROMPT ################################################################## +PROMPT A W R R E P O S I T O R Y C O N F I G U R A T I O N +PROMPT ################################################################## + +COLUMN snap_interval HEADING "Snapshot Interval" FORMAT a20 +COLUMN retention HEADING "Snapshot Retention" FORMAT a20 +COLUMN topnsql HEADING "Top N SQL" FORMAT a60 + +SELECT c.snap_interval + , c.retention + , DECODE(c.topnsql + ,'DEFAULT',DECODE(p.value + ,'TYPICAL','DEFAULT - 30 for current statistic_level=TYPICAL' + ,'ALL','DEFAULT - 100 for current statistic_level=ALL' + ,c.topnsql + ) + ,c.topnsql) topnsql + FROM DBA_HIST_WR_CONTROL c + JOIN v$database d ON c.dbid = d.dbid + LEFT OUTER JOIN v$system_parameter p ON p.name = 'statistics_level' +WHERE 1=1 +; + + +@@footer diff --git a/vg/awr_index_usage_monitoring.sql b/vg/awr_index_usage_monitoring.sql new file mode 100644 index 0000000..5f995ef --- /dev/null +++ b/vg/awr_index_usage_monitoring.sql @@ -0,0 +1,73 @@ +@@header + +PROMPT ********************* +PROMPT SCRIPT INCOMPLETE +PROMPT ********************* + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display index usage from AWR data. +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 26-May-12 Vishal Gupta Created +* +* +*/ +set term on + +COLUMN table_owner HEADING "Table Owner" FORMAT a20 +COLUMN table_name HEADING "Table Name" FORMAT a20 +COLUMN index_name HEADING "Index Name" FORMAT a20 +COLUMN Monitoring HEADING "Monitoring" FORMAT a10 +COLUMN Used HEADING "Used" FORMAT a4 + + +SELECT object_name + , sql_id + , ROUND(avg(daily_exections)) avg_daily_exections +FROM +( + SELECT p.object_name + , p.sql_id + --, p.plan_hash_value + , to_char(end_interval_time,'YYYY-MM-DD') Day + , SUM(ss.executions_delta) daily_exections + FROM dba_hist_sql_plan p + , dba_hist_sqlstat ss + , dba_hist_snapshot s + WHERE s.dbid = ss.dbid + AND s.instance_number = ss.instance_number + AND s.snap_id = ss.snap_id + AND ss.plan_hash_value = p.plan_hash_value + AND ss.dbid = p.dbid + AND ss.sql_id = p.sql_id + AND (p.object_name LIKE 'TRN_IX%' OR p.object_name = 'TRN_UK1') + AND p.object_name = 'TRN_IX13' + --AND s.end_interval_time BETWEEN TO_DATE('01-Jun-12','DD-Mon-YY') and TO_DATE('30-Jun-12','DD-Mon-YY') + GROUP BY p.object_name + , p.sql_id + --, p.plan_hash_value + , to_char(end_interval_time,'YYYY-MM-DD') +-- having sum(ss.executions_delta) > 1 + ORDER BY p.object_name + , p.sql_id + --, p.plan_hash_value + , sum(ss.executions_delta) desc +) +GROUP BY object_name + , sql_id +--HAVING ROUND(avg(daily_exections)) > 10 +ORDER BY object_name + , sql_id + , avg_daily_exections desc + ; + + +@@footer diff --git a/vg/awr_instance.sql b/vg/awr_instance.sql new file mode 100644 index 0000000..a2d2ba1 --- /dev/null +++ b/vg/awr_instance.sql @@ -0,0 +1,88 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display instance startup details from AWR repository +* Parameters : 1 - Instance Number ( Use % to query for all instances) +* 2 - Number of days to query ( Default 30) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Nov-12 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +VARIABLE INST_ID VARCHAR2(100) +VARIABLE DAYS VARCHAR2(100) + +BEGIN + :INST_ID := '&&1'; + :DAYS := '&&2'; + :INST_ID := CASE WHEN NVL(:INST_ID,'x') = 'x' THEN '%' ELSE :INST_ID END; + :DAYS := CASE WHEN NVL(:DAYS,'x') = 'x' THEN '30' ELSE :DAYS END; +END; +/ + + +set head off +SELECT '**********************************************' || chr(10) || + '* Instance History' || chr(10) || + '* (From AWR Repository)' || chr(10) || + '*' || chr(10) || + '* Input Parameters' || chr(10) || + '* - Instance# = "' || :INST_ID || '"' || chr(10) || + '* - Days = "' || :DAYS || '"' || chr(10) || + '**********************************************' || chr(10) || + '' +FROM DUAL; +set head on + + +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN db_name HEADING "DBName" FORMAT a10 +COLUMN instance_name HEADING "Instance|Name" FORMAT a10 +COLUMN startup_time HEADING "StartupTime" FORMAT a18 +COLUMN last_uptime HEADING "Last Uptime" FORMAT a16 +COLUMN version HEADING "Version" FORMAT a10 +COLUMN parallel HEADING "Parallel" FORMAT a10 +COLUMN host_name HEADING "Host Name" FORMAT a10 TRUNCATE +COLUMN platform_name HEADING "Platform Name" FORMAT a18 TRUNCATE + +SELECT i.db_name + , i.instance_number + , i.host_name + , i.instance_name + , to_char(i.startup_time,'DD-MON-YY HH24:MI:SS') startup_time + , NVL2(i.last_uptime + , LPAD( EXTRACT(DAY FROM i.last_uptime) || 'd ' + || LPAD(EXTRACT(HOUR FROM i.last_uptime),2) || 'h ' + || LPAD(EXTRACT(MINUTE FROM i.last_uptime),2) || 'm ' + || LPAD(EXTRACT(SECOND FROM i.last_uptime),2) || 's' + , 16) + , '') + last_uptime + , i.version + , i.parallel + , i.platform_name +FROM + ( select a.* + , a.startup_time + - LAG(a.startup_time) OVER (PARTITION BY a.dbid, a.instance_number ORDER BY a.dbid, a.instance_number, a.startup_time) last_uptime + from dba_hist_database_instance a + , v$database d + WHERE a.dbid = d.dbid + AND a.instance_number like :INST_ID +) i +WHERE i.startup_time > systimestamp - :DAYS +ORDER BY i.startup_time +; + +@@footer \ No newline at end of file diff --git a/vg/awr_loadprofile.sql b/vg/awr_loadprofile.sql new file mode 100644 index 0000000..37c9e75 --- /dev/null +++ b/vg/awr_loadprofile.sql @@ -0,0 +1,174 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display load profile from AWR +* All figures delta between two consecutive snapshots +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Apr-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" + +COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT +COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP','',to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE SNAP_TIME_FORMAT="YYYY-MM-DD HH24:MI:SS" + +DEFINE COUNT_FORMAT="9,999,999" +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="'000s" +--DEFINE COUNT_DIVIDER="1000000" +--DEFINE COUNT_HEADING="'000,000s" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + + +DEFINE TIME_FORMAT=9,999 +--DEFINE TIME_DIVIDER="1" +--DEFINE TIME_HEADING="sec" +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + + + +PROMPT +PROMPT #################################################################################### +PROMPT # L O A D P R O F I L E T R E N D +PROMPT # +PROMPT # From AWR Repository +PROMPT # - For Instance ID - &INST_ID +PROMPT # - From Time - &&FROM_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT # - To Time - &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT #################################################################################### + + +COLUMN end_interval_time HEADING "Snap Time|(&&SNAP_TIME_FORMAT)" FORMAT a22 +COLUMN cpu_time HEADING "CPU|Time|(&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN redo_size HEADING "RedoSize|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN logical_reads HEADING "Logical|Reads|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN block_changes HEADING "Block|Changes|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN phy_read_bytes HEADING "Physical|Read|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN phy_write_bytes HEADING "Physical|Write|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN phy_reads HEADING "Physical|Reads|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN phy_writes HEADING "Physical|Writes|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN user_calls HEADING "User|Calls|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN parses HEADING "Parses|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN hard_parses_reads HEADING "Hard|Parses|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN sorts_mem HEADING "Sorts|Memory|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN sorts_disk HEADING "Sorts|Disk|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN logons HEADING "Logons|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN commits HEADING "Commits|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN rollbacks HEADING "Rollbacks|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + ) +SELECT /*+ USE_NL(s ss ss_prev) */ + TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT') end_interval_time + , ROUND(SUM(DECODE(ss.stat_name, 'CPU used by this session', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/100/&TIME_DIVIDER)))) cpu_time + , ROUND(SUM(DECODE(ss.stat_name, 'redo size' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) redo_size + , ROUND(SUM(DECODE(ss.stat_name, 'session logical reads', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) logical_reads + , ROUND(SUM(DECODE(ss.stat_name, 'db block changes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) block_changes + , ROUND(SUM(DECODE(ss.stat_name, 'physical read total bytes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) phy_read_bytes + , ROUND(SUM(DECODE(ss.stat_name, 'physical write total bytes', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) phy_write_bytes + , ROUND(SUM(DECODE(ss.stat_name, 'physical reads' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) phy_reads + , ROUND(SUM(DECODE(ss.stat_name, 'physical writes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) phy_writes + , ROUND(SUM(DECODE(ss.stat_name, 'user calls' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) user_calls + , ROUND(SUM(DECODE(ss.stat_name, 'parse count (total)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) parses + , ROUND(SUM(DECODE(ss.stat_name, 'parse count (hard)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) hard_parses_reads + , ROUND(SUM(DECODE(ss.stat_name, 'sorts (memory)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) sorts_mem + , ROUND(SUM(DECODE(ss.stat_name, 'sorts (disk)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) sorts_disk + , ROUND(SUM(DECODE(ss.stat_name, 'logons cumulative' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) logons + , ROUND(SUM(DECODE(ss.stat_name, 'user commits' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) commits + , ROUND(SUM(DECODE(ss.stat_name, 'user rollbacks' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) rollbacks +FROM snap s + , dba_hist_sysstat ss + , dba_hist_sysstat ss_prev +where s.prev_snap_id IS NOT NULL +and s.dbid = ss_prev.dbid +and s.instance_number = ss_prev.instance_number +and s.prev_snap_id = ss_prev.snap_id +and s.dbid = ss.dbid +and s.instance_number = ss.instance_number +and s.snap_id = ss.snap_id +and ss_prev.stat_name = ss.stat_name +and ss.stat_name in ( + 'redo size' + ,'session logical reads' + ,'db block changes' + ,'physical reads' + ,'physical read total bytes' + ,'physical read bytes' + ,'physical writes' + ,'physical write total bytes' + ,'physical write bytes' + ,'user calls' + ,'parse count (total)' + ,'parse count (hard)' + ,'sorts (memory)' + ,'sorts (disk)' + ,'logons cumulative' + ,'execute count' + ,'user commits' + ,'user rollbacks' + ,'CPU used by this session' + ) +GROUP BY TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT') +ORDER BY TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT') asc +/ + + +@@footer diff --git a/vg/awr_loadprofile_by_statname.sql b/vg/awr_loadprofile_by_statname.sql new file mode 100644 index 0000000..eb77d07 --- /dev/null +++ b/vg/awr_loadprofile_by_statname.sql @@ -0,0 +1,116 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display hourly load profile from AWR for statistics passed as input +* All figures delta between two consecutive snapshots +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - Statistics Name (Exact Name, use @statname script to find exact name) +* +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 25-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE FROM_TIMESTAMP +UNDEFINE STAT_NAME + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE STAT_NAME="&4" + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +set pages 50000 + +DEFINE FORMAT="999,999,999,999" +DEFINE TOTAL_FORMAT="999,999,999,999" + +DEFINE HEADING="#" +DEFINE DIVIDER="1" +--DEFINE HEADING="'1000s" +--DEFINE DIVIDER="1000" + +--DEFINE HEADING="min" +--DEFINE DIVIDER="60/100" +--DEFINE HEADING="hr" +--DEFINE DIVIDER="60/60/100" + +--DEFINE HEADING="'KB" +--DEFINE DIVIDER="1024" +--DEFINE HEADING="'MB" +--DEFINE DIVIDER="1024/1024" +--DEFINE HEADING="'GB" +--DEFINE DIVIDER="1024/1024/1024" + + + + +PROMPT +PROMPT #################################################################################### +PROMPT # +PROMPT # S Y S T E M S T A T I S T I C S T R E N D +PROMPT # +PROMPT # From AWR Repository (Absolute figures , not delta) +PROMPT # - For Instance ID - &INST_ID +PROMPT # - Snap Between - &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT # - Statistic Name - "&&STAT_NAME" +PROMPT # +PROMPT # (All Figures are in &&HEADING) +PROMPT # +PROMPT #################################################################################### + + +COLUMN end_interval_time HEADING "SnapTime" FORMAT A15 +COLUMN all_inst_value HEADING "All Inst|Value" FORMAT &&TOTAL_FORMAT +COLUMN inst1_value HEADING "Inst 1|Value" FORMAT &&FORMAT +COLUMN inst2_value HEADING "Inst 2|Value" FORMAT &&FORMAT +COLUMN inst3_value HEADING "Inst 3|Value" FORMAT &&FORMAT +COLUMN inst4_value HEADING "Inst 4|Value" FORMAT &&FORMAT +COLUMN inst5_value HEADING "Inst 5|Value" FORMAT &&FORMAT +COLUMN inst6_value HEADING "Inst 6|Value" FORMAT &&FORMAT +COLUMN inst7_value HEADING "Inst 7|Value" FORMAT &&FORMAT +COLUMN inst8_value HEADING "Inst 8|Value" FORMAT &&FORMAT + +SELECT /*+ USE_NL(s ss) */ + TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , ROUND(SUM(ss.value) / &&DIVIDER ) all_inst_value + , ROUND(SUM(DECODE(ss.instance_number,1,ss.value,0)) / &&DIVIDER ) inst1_value + , ROUND(SUM(DECODE(ss.instance_number,2,ss.value,0)) / &&DIVIDER ) inst2_value + , ROUND(SUM(DECODE(ss.instance_number,3,ss.value,0)) / &&DIVIDER ) inst3_value + , ROUND(SUM(DECODE(ss.instance_number,4,ss.value,0)) / &&DIVIDER ) inst4_value + , ROUND(SUM(DECODE(ss.instance_number,5,ss.value,0)) / &&DIVIDER ) inst5_value + , ROUND(SUM(DECODE(ss.instance_number,6,ss.value,0)) / &&DIVIDER ) inst6_value + , ROUND(SUM(DECODE(ss.instance_number,7,ss.value,0)) / &&DIVIDER ) inst7_value + , ROUND(SUM(DECODE(ss.instance_number,8,ss.value,0)) / &&DIVIDER ) inst8_value +FROM dba_hist_snapshot s + , dba_hist_sysstat ss +where s.dbid = ss.dbid + and s.instance_number = ss.instance_number + and s.snap_id = ss.snap_id + and ss.stat_name = '&&STAT_NAME' + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS') +GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') +ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc +/ + +@@footer diff --git a/vg/awr_loadprofile_by_statname_delta.sql b/vg/awr_loadprofile_by_statname_delta.sql new file mode 100644 index 0000000..3943b81 --- /dev/null +++ b/vg/awr_loadprofile_by_statname_delta.sql @@ -0,0 +1,135 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display hourly load profile from AWR for statistics passed as input +* All figures delta between two consecutive snapshots +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - Statistics Name (Exact Name, use @statname script to find exact name) +* +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 25-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE FROM_TIMESTAMP +UNDEFINE STAT_NAME + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE STAT_NAME="&4" + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +set pages 50000 + + +DEFINE FORMAT="999,999,999,999" +DEFINE TOTAL_FORMAT="999,999,999,999" + +DEFINE HEADING="#" +DEFINE DIVIDER="1" +--DEFINE HEADING="'1000s" +--DEFINE DIVIDER="1000" + +--DEFINE HEADING="min" +--DEFINE DIVIDER="60/100" +--DEFINE HEADING="hr" +--DEFINE DIVIDER="60/60/100" + +--DEFINE HEADING="'KB" +--DEFINE DIVIDER="1024" +--DEFINE HEADING="'MB" +--DEFINE DIVIDER="1024/1024" +--DEFINE HEADING="'GB" +--DEFINE DIVIDER="1024/1024/1024" + + + + +PROMPT +PROMPT ************************************************************************************ +PROMPT * +PROMPT * S Y S T E M S T A T I S T I C S T R E N D +PROMPT * +PROMPT * From AWR Repository (Delta Figures) +PROMPT * - For Instance ID - &INST_ID +PROMPT * - Between &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT * - Statistic Name - "&&STAT_NAME" +PROMPT * +PROMPT * (All Figures are in &&HEADING) +PROMPT * +PROMPT ************************************************************************************ + + +COLUMN end_interval_time HEADING "SnapTime" FORMAT A15 +COLUMN all_inst_value HEADING "All Inst|Value" FORMAT &&TOTAL_FORMAT +COLUMN inst1_value HEADING "Inst 1|Value" FORMAT &&FORMAT +COLUMN inst2_value HEADING "Inst 2|Value" FORMAT &&FORMAT +COLUMN inst3_value HEADING "Inst 3|Value" FORMAT &&FORMAT +COLUMN inst4_value HEADING "Inst 4|Value" FORMAT &&FORMAT +COLUMN inst5_value HEADING "Inst 5|Value" FORMAT &&FORMAT +COLUMN inst6_value HEADING "Inst 6|Value" FORMAT &&FORMAT +COLUMN inst7_value HEADING "Inst 7|Value" FORMAT &&FORMAT +COLUMN inst8_value HEADING "Inst 8|Value" FORMAT &&FORMAT + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS') + ) +SELECT /*+ USE_NL(s1 ss1 ss_prev) */ + TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , ROUND(SUM(ss.value - LEAST(ss_prev.value,ss.value)) / &&DIVIDER ) all_inst_value + , ROUND(SUM(DECODE(ss.instance_number,1,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst1_value + , ROUND(SUM(DECODE(ss.instance_number,2,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst2_value + , ROUND(SUM(DECODE(ss.instance_number,3,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst3_value + , ROUND(SUM(DECODE(ss.instance_number,4,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst4_value + , ROUND(SUM(DECODE(ss.instance_number,5,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst5_value + , ROUND(SUM(DECODE(ss.instance_number,6,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst6_value + , ROUND(SUM(DECODE(ss.instance_number,7,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst7_value + , ROUND(SUM(DECODE(ss.instance_number,8,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst8_value +FROM snap s + , dba_hist_sysstat ss + , dba_hist_sysstat ss_prev +where s.next_snap_id IS NOT NULL +and s.dbid = ss_prev.dbid +and s.instance_number = ss_prev.instance_number +and s.snap_id = ss_prev.snap_id +and s.dbid = ss.dbid +and s.instance_number = ss.instance_number +and s.next_snap_id = ss.snap_id +and ss_prev.stat_name = ss.stat_name +and ss.stat_name = '&&STAT_NAME' +GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') +ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc +/ + + +@@footer diff --git a/vg/awr_loadprofile_by_statname_hourlybreakdown.sql b/vg/awr_loadprofile_by_statname_hourlybreakdown.sql new file mode 100644 index 0000000..f390204 --- /dev/null +++ b/vg/awr_loadprofile_by_statname_hourlybreakdown.sql @@ -0,0 +1,152 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display hourly load profile from AWR for statistics passed as input +* All figures delta between two consecutive snapshots +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - Statistics Name (Exact Name, use @statname script to find exact name) +* +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 25-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE FROM_TIMESTAMP +UNDEFINE STAT_NAME + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE STAT_NAME="&4" + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + + +DEFINE FORMAT="9999" +DEFINE TOTAL_FORMAT="999,999" + +--DEFINE HEADING="#" +--DEFINE DIVIDER="1" +--DEFINE HEADING="'1000s" +--DEFINE DIVIDER="1000" + +--DEFINE HEADING="min" +--DEFINE DIVIDER="60/100" +--DEFINE HEADING="hr" +--DEFINE DIVIDER="60/60/100" + +--DEFINE HEADING="KB" +--DEFINE DIVIDER="1024" +--DEFINE HEADING="MB" +--DEFINE DIVIDER="1024/1024" +DEFINE HEADING="GB" +DEFINE DIVIDER="1024/1024/1024" + + + + +PROMPT +PROMPT #################################################################################### +PROMPT # +PROMPT # S Y S T E M S T A T I S T I C S T R E N D +PROMPT # +PROMPT # From AWR Repository (Absolute figures , not delta) +PROMPT # - Statistic Name - "&&STAT_NAME" +PROMPT # - For Instance ID - &INST_ID +PROMPT # - Snap Between - &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT # +PROMPT # (All Figures are in &&HEADING) +PROMPT # +PROMPT #################################################################################### + + +COLUMN "Date" HEADING "Date" FORMAT A9 +COLUMN "Day" HEADING "Day" FORMAT A3 +COLUMN Day_Max HEADING "Day|Max" FORMAT &&TOTAL_FORMAT +COLUMN h0 HEADING "h0" FORMAT &&FORMAT +COLUMN h1 HEADING "h1" FORMAT &&FORMAT +COLUMN h2 HEADING "h2" FORMAT &&FORMAT +COLUMN h3 HEADING "h3" FORMAT &&FORMAT +COLUMN h4 HEADING "h4" FORMAT &&FORMAT +COLUMN h5 HEADING "h5" FORMAT &&FORMAT +COLUMN h6 HEADING "h6" FORMAT &&FORMAT +COLUMN h7 HEADING "h7" FORMAT &&FORMAT +COLUMN h8 HEADING "h8" FORMAT &&FORMAT +COLUMN h9 HEADING "h9" FORMAT &&FORMAT +COLUMN h10 HEADING "h10" FORMAT &&FORMAT +COLUMN h11 HEADING "h11" FORMAT &&FORMAT +COLUMN h12 HEADING "h12" FORMAT &&FORMAT +COLUMN h13 HEADING "h13" FORMAT &&FORMAT +COLUMN h14 HEADING "h14" FORMAT &&FORMAT +COLUMN h15 HEADING "h15" FORMAT &&FORMAT +COLUMN h16 HEADING "h16" FORMAT &&FORMAT +COLUMN h17 HEADING "h17" FORMAT &&FORMAT +COLUMN h18 HEADING "h18" FORMAT &&FORMAT +COLUMN h19 HEADING "h19" FORMAT &&FORMAT +COLUMN h20 HEADING "h20" FORMAT &&FORMAT +COLUMN h21 HEADING "h21" FORMAT &&FORMAT +COLUMN h22 HEADING "h22" FORMAT &&FORMAT +COLUMN h23 HEADING "h23" FORMAT &&FORMAT + +SELECT /*+ USE_NL(s ss) */ + TO_CHAR(trunc(s.end_interval_time),'DD-Mon-YY') "Date" + , TO_CHAR(trunc(s.end_interval_time), 'Dy') "Day" + , ROUND(MAX(ss.value) / &&DIVIDER ) Day_Max + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'00',(ss.value),0)) / &&DIVIDER ) "h0" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'01',(ss.value),0)) / &&DIVIDER ) "h1" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'02',(ss.value),0)) / &&DIVIDER ) "h2" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'03',(ss.value),0)) / &&DIVIDER ) "h3" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'04',(ss.value),0)) / &&DIVIDER ) "h4" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'05',(ss.value),0)) / &&DIVIDER ) "h5" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'06',(ss.value),0)) / &&DIVIDER ) "h6" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'07',(ss.value),0)) / &&DIVIDER ) "h7" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'08',(ss.value),0)) / &&DIVIDER ) "h8" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'09',(ss.value),0)) / &&DIVIDER ) "h9" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'10',(ss.value),0)) / &&DIVIDER ) "h10" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'11',(ss.value),0)) / &&DIVIDER ) "h11" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'12',(ss.value),0)) / &&DIVIDER ) "h12" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'13',(ss.value),0)) / &&DIVIDER ) "h13" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'14',(ss.value),0)) / &&DIVIDER ) "h14" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'15',(ss.value),0)) / &&DIVIDER ) "h15" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'16',(ss.value),0)) / &&DIVIDER ) "h16" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'17',(ss.value),0)) / &&DIVIDER ) "h17" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'18',(ss.value),0)) / &&DIVIDER ) "h18" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'19',(ss.value),0)) / &&DIVIDER ) "h19" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'20',(ss.value),0)) / &&DIVIDER ) "h20" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'21',(ss.value),0)) / &&DIVIDER ) "h21" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'22',(ss.value),0)) / &&DIVIDER ) "h22" + , ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'23',(ss.value),0)) / &&DIVIDER ) "h23" +FROM dba_hist_snapshot s + , dba_hist_sysstat ss +where s.dbid = ss.dbid + and s.instance_number = ss.instance_number + and s.snap_id = ss.snap_id + and ss.stat_name = '&&STAT_NAME' + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS') +GROUP BY trunc(s.end_interval_time) +-- , to_char(COMPLETION_TIME, 'Dy') +ORDER BY trunc(s.end_interval_time) asc +/ + + +@@footer diff --git a/vg/awr_loadprofile_by_statname_hourlybreakdown_delta.sql b/vg/awr_loadprofile_by_statname_hourlybreakdown_delta.sql new file mode 100644 index 0000000..5cc7d08 --- /dev/null +++ b/vg/awr_loadprofile_by_statname_hourlybreakdown_delta.sql @@ -0,0 +1,211 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display hourly load profile from AWR for statistics passed as input +* All figures delta between two consecutive snapshots +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - Statistics Name (Exact Name, use @statname script to find exact name) +* +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 25-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE FROM_TIMESTAMP +UNDEFINE STAT_NAME + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE STAT_NAME="&4" + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE FORMAT="99999" +DEFINE TOTAL_FORMAT="999,999" + +DEFINE HEADING="" +DEFINE DIVIDER="" + + +COLUMN _HEADING NEW_VALUE HEADING NOPRINT +COLUMN _DIVIDER NEW_VALUE DIVIDER NOPRINT + +set term off +SELECT CASE + --WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '#' + WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN 'thousands' + --WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN 'millions' + + --WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN 'sec' + --WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN 'min' + WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN 'hour' + + --WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN 'KB' + --WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN 'MB' + WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN 'GB' + + ELSE '#' + END "_HEADING" + , CASE + + --WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '1' + WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '1000' + --WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '1000000' + + --WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN '100' + --WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN '60/100' + WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN '60/60/100' + + --WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN '1024' + --WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN '1024/1024' + WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN '1024/1024/1024' + + ELSE '1' + END "_DIVIDER" +FROM DUAL; +set term on + + + +--DEFINE HEADING="#" +--DEFINE DIVIDER="1" +--&&_IF_COUNT_METRIC DEFINE HEADING="'1000s" +--&&_IF_COUNT_METRIC DEFINE DIVIDER="1000" + +--&&_IF_TIME_METRIC DEFINE HEADING="minutes" +--&&_IF_TIME_METRIC DEFINE DIVIDER="60/100" +--&&_IF_TIME_METRIC DEFINE HEADING="hour" +--&&_IF_TIME_METRIC DEFINE DIVIDER="60/60/100" + +--DEFINE HEADING="KB" +--DEFINE DIVIDER="1024" +--DEFINE HEADING="MB" +--DEFINE DIVIDER="1024/1024" +--&&_IF_BYTES_METRIC DEFINE HEADING="GB" +--&&_IF_BYTES_METRIC DEFINE DIVIDER="1024/1024/1024" + + +PROMPT +PROMPT #################################################################################### +PROMPT # +PROMPT # S Y S T E M S T A T I S T I C S T R E N D +PROMPT # +PROMPT # From AWR Repository (Delta Figures) +PROMPT # - Statistic Name - "&&STAT_NAME" +PROMPT # - For Instance ID - &INST_ID +PROMPT # - Snap Between - &&FROM_TIMESTAMP AND &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT # +PROMPT # (All Figures are in &&HEADING) +PROMPT # +PROMPT #################################################################################### + + +COLUMN "Date" HEADING "Date" FORMAT A9 +COLUMN "Day" HEADING "Day" FORMAT A3 +COLUMN "Total" HEADING "Day|Total" FORMAT &&TOTAL_FORMAT +COLUMN h0 HEADING "h0" FORMAT &&FORMAT +COLUMN h1 HEADING "h1" FORMAT &&FORMAT +COLUMN h2 HEADING "h2" FORMAT &&FORMAT +COLUMN h3 HEADING "h3" FORMAT &&FORMAT +COLUMN h4 HEADING "h4" FORMAT &&FORMAT +COLUMN h5 HEADING "h5" FORMAT &&FORMAT +COLUMN h6 HEADING "h6" FORMAT &&FORMAT +COLUMN h7 HEADING "h7" FORMAT &&FORMAT +COLUMN h8 HEADING "h8" FORMAT &&FORMAT +COLUMN h9 HEADING "h9" FORMAT &&FORMAT +COLUMN h10 HEADING "h10" FORMAT &&FORMAT +COLUMN h11 HEADING "h11" FORMAT &&FORMAT +COLUMN h12 HEADING "h12" FORMAT &&FORMAT +COLUMN h13 HEADING "h13" FORMAT &&FORMAT +COLUMN h14 HEADING "h14" FORMAT &&FORMAT +COLUMN h15 HEADING "h15" FORMAT &&FORMAT +COLUMN h16 HEADING "h16" FORMAT &&FORMAT +COLUMN h17 HEADING "h17" FORMAT &&FORMAT +COLUMN h18 HEADING "h18" FORMAT &&FORMAT +COLUMN h19 HEADING "h19" FORMAT &&FORMAT +COLUMN h20 HEADING "h20" FORMAT &&FORMAT +COLUMN h21 HEADING "h21" FORMAT &&FORMAT +COLUMN h22 HEADING "h22" FORMAT &&FORMAT +COLUMN h23 HEADING "h23" FORMAT &&FORMAT + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') - 1/24 + AND TO_TIMESTAMP('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + ) +SELECT /*+ LEADING(s sn) USE_NL(s sn ss ss_prev) */ + TO_CHAR(trunc(s.end_interval_time),'DD-Mon-YY') "Date" + , TO_CHAR(trunc(s.end_interval_time), 'Dy') "Day" + , ROUND(SUM(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)) / &&DIVIDER ) Total + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'00',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h0" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'01',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h1" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'02',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h2" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'03',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h3" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'04',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h4" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'05',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h5" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'06',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h6" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'07',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h7" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'08',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h8" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'09',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h9" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'10',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h10" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'11',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h11" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'12',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h12" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'13',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h13" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'14',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h14" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'15',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h15" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'16',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h16" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'17',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h17" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'18',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h18" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'19',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h19" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'20',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h20" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'21',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h21" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'22',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h22" + , ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'23',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h23" +FROM snap s + , dba_hist_stat_name sn + , dba_hist_sysstat ss + , dba_hist_sysstat ss_prev +WHERE ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND ss_prev.dbid = s.dbid + AND ss_prev.instance_number = s.instance_number + AND ss_prev.snap_id = s.prev_snap_id + AND ss_prev.stat_id = ss.stat_id + AND sn.dbid = s.dbid + AND sn.stat_id = ss.stat_id + AND UPPER(sn.stat_name) = UPPER('&&STAT_NAME') +GROUP BY trunc(s.end_interval_time) +ORDER BY trunc(s.end_interval_time) asc +/ + + + +@@footer diff --git a/vg/awr_loadprofile_logicalreads.sql b/vg/awr_loadprofile_logicalreads.sql new file mode 100644 index 0000000..be7bcf4 --- /dev/null +++ b/vg/awr_loadprofile_logicalreads.sql @@ -0,0 +1,221 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display load profile from AWR +* All figures delta between two consecutive snapshots +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - No of days +* +* dbid and instancenumber are optional. +* If not passes then it takes current instance's dbid and instancenumber +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Apr-12 Vishal Gupta First Draft +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE days + +DEFINE INST_ID="&&1" +DEFINE days="&&2" + + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _days NEW_VALUE days NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&days','','7','&&days') "_days" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +set pages 2000 + +DEFINE COUNT_FORMAT="999,999" + +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="'000s" + +DEFINE BYTES_FORMAT="9999" + +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" + + +PROMPT +PROMPT ################################################################# +PROMPT L O G I C A L ( C A C H E D ) R E A D S T R E N D +PROMPT ################################################################# + + +COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14 +COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)" FORMAT 999,999 +COLUMN h00 HEADING "h00|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h01 HEADING "h01|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h02 HEADING "h02|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h03 HEADING "h03|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h04 HEADING "h04|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h05 HEADING "h05|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h06 HEADING "h06|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h07 HEADING "h07|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h08 HEADING "h08|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h09 HEADING "h09|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h10 HEADING "h10|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h11 HEADING "h11|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h12 HEADING "h12|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h13 HEADING "h13|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h14 HEADING "h14|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h15 HEADING "h15|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h16 HEADING "h16|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h17 HEADING "h17|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h18 HEADING "h18|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h19 HEADING "h19|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h20 HEADING "h20|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h21 HEADING "h21|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h22 HEADING "h22|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h23 HEADING "h23|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT + +BREAK ON REPORT + +COMPUTE MIN MAX AVG OF DayTotal ON REPORT +COMPUTE MIN MAX AVG OF h00 ON REPORT +COMPUTE MIN MAX AVG OF h01 ON REPORT +COMPUTE MIN MAX AVG OF h02 ON REPORT +COMPUTE MIN MAX AVG OF h03 ON REPORT +COMPUTE MIN MAX AVG OF h04 ON REPORT +COMPUTE MIN MAX AVG OF h05 ON REPORT +COMPUTE MIN MAX AVG OF h06 ON REPORT +COMPUTE MIN MAX AVG OF h07 ON REPORT +COMPUTE MIN MAX AVG OF h08 ON REPORT +COMPUTE MIN MAX AVG OF h09 ON REPORT +COMPUTE MIN MAX AVG OF h10 ON REPORT +COMPUTE MIN MAX AVG OF h11 ON REPORT +COMPUTE MIN MAX AVG OF h12 ON REPORT +COMPUTE MIN MAX AVG OF h13 ON REPORT +COMPUTE MIN MAX AVG OF h14 ON REPORT +COMPUTE MIN MAX AVG OF h15 ON REPORT +COMPUTE MIN MAX AVG OF h16 ON REPORT +COMPUTE MIN MAX AVG OF h17 ON REPORT +COMPUTE MIN MAX AVG OF h18 ON REPORT +COMPUTE MIN MAX AVG OF h19 ON REPORT +COMPUTE MIN MAX AVG OF h20 ON REPORT +COMPUTE MIN MAX AVG OF h21 ON REPORT +COMPUTE MIN MAX AVG OF h22 ON REPORT +COMPUTE MIN MAX AVG OF h23 ON REPORT + + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&inst_id' + AND s.end_interval_time > TRUNC(systimestamp) - &days + ) +, awr_stats as +( +SELECT TRUNC(s1.end_interval_time) end_interval_day + , TO_CHAR(s1.end_interval_time,'hh24') end_interval_hour + , ROUND((ss2.value - NVL(ss1.value,ss2.value))*p.value/&BYTES_DIVIDER) value +FROM snap s1 + , dba_hist_sysstat ss1 + , dba_hist_sysstat ss2 + , dba_hist_stat_name sn + , v$system_parameter p +where p.name = 'db_block_size' +and s1.dbid = ss1.dbid +and s1.instance_number = ss1.instance_number +and s1.prev_snap_id = ss1.snap_id +and s1.dbid = ss2.dbid +and s1.instance_number = ss2.instance_number +and s1.snap_id = ss2.snap_id +and ss1.stat_id = ss2.stat_id +and ss1.dbid = sn.dbid +and ss1.stat_id = sn.stat_id +and sn.stat_name in ( + 'consistent gets' +/* + 'redo size' + ,'session logical reads' + ,'db block changes' + ,'physical reads' + ,'physical writes' + ,'user calls' + ,'parse count (total)' + ,'parse count (hard)' + ,'sorts (memory)' + ,'sorts (disk)' + ,'logons cumulative' + ,'execute count' + ,'user commits' + ,'user rollbacks' +*/ + ) +) +SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day + , SUM(s.value) DayTotal + , SUM(DECODE(s.end_interval_hour,'00',s.value,0)) h00 + , SUM(DECODE(s.end_interval_hour,'01',s.value,0)) h01 + , SUM(DECODE(s.end_interval_hour,'02',s.value,0)) h02 + , SUM(DECODE(s.end_interval_hour,'03',s.value,0)) h03 + , SUM(DECODE(s.end_interval_hour,'04',s.value,0)) h04 + , SUM(DECODE(s.end_interval_hour,'05',s.value,0)) h05 + , SUM(DECODE(s.end_interval_hour,'06',s.value,0)) h06 + , SUM(DECODE(s.end_interval_hour,'07',s.value,0)) h07 + , SUM(DECODE(s.end_interval_hour,'08',s.value,0)) h08 + , SUM(DECODE(s.end_interval_hour,'09',s.value,0)) h09 + , SUM(DECODE(s.end_interval_hour,'10',s.value,0)) h10 + , SUM(DECODE(s.end_interval_hour,'11',s.value,0)) h11 + , SUM(DECODE(s.end_interval_hour,'12',s.value,0)) h12 + , SUM(DECODE(s.end_interval_hour,'13',s.value,0)) h13 + , SUM(DECODE(s.end_interval_hour,'14',s.value,0)) h14 + , SUM(DECODE(s.end_interval_hour,'15',s.value,0)) h15 + , SUM(DECODE(s.end_interval_hour,'16',s.value,0)) h16 + , SUM(DECODE(s.end_interval_hour,'17',s.value,0)) h17 + , SUM(DECODE(s.end_interval_hour,'18',s.value,0)) h18 + , SUM(DECODE(s.end_interval_hour,'19',s.value,0)) h19 + , SUM(DECODE(s.end_interval_hour,'20',s.value,0)) h20 + , SUM(DECODE(s.end_interval_hour,'21',s.value,0)) h21 + , SUM(DECODE(s.end_interval_hour,'22',s.value,0)) h22 + , SUM(DECODE(s.end_interval_hour,'23',s.value,0)) h23 + FROM awr_stats s +GROUP BY s.end_interval_day +ORDER BY s.end_interval_day +/ + +UNDEFINE days +UNDEFINE INST_ID + + +@@footer diff --git a/vg/awr_loadprofile_physicalreads.sql b/vg/awr_loadprofile_physicalreads.sql new file mode 100644 index 0000000..6324b80 --- /dev/null +++ b/vg/awr_loadprofile_physicalreads.sql @@ -0,0 +1,207 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display load profile from AWR +* All figures delta between two consecutive snapshots +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - No of days +* +* dbid and instancenumber are optional. +* If not passes then it takes current instance's dbid and instancenumber +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Apr-12 Vishal Gupta First Draft +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE days + +DEFINE INST_ID="&&1" +DEFINE days="&&2" + + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _days NEW_VALUE days NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&days','','7','&&days') "_days" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +set pages 2000 + + +DEFINE COUNT_FORMAT="999,999" + +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="'000s" + +DEFINE BYTES_FORMAT="99999" + +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" + + +PROMPT +PROMPT ***************************************************** +PROMPT *** P H Y S I C A L R E A D S T R E N D *** +PROMPT ***************************************************** + +COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14 +COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)" FORMAT 9,999,999 +COLUMN h00 HEADING "h00|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h01 HEADING "h01|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h02 HEADING "h02|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h03 HEADING "h03|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h04 HEADING "h04|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h05 HEADING "h05|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h06 HEADING "h06|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h07 HEADING "h07|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h08 HEADING "h08|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h09 HEADING "h09|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h10 HEADING "h10|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h11 HEADING "h11|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h12 HEADING "h12|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h13 HEADING "h13|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h14 HEADING "h14|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h15 HEADING "h15|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h16 HEADING "h16|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h17 HEADING "h17|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h18 HEADING "h18|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h19 HEADING "h19|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h20 HEADING "h20|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h21 HEADING "h21|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h22 HEADING "h22|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h23 HEADING "h23|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT + +BREAK ON REPORT + +COMPUTE MIN MAX AVG OF DayTotal ON REPORT +COMPUTE MIN MAX AVG OF h00 ON REPORT +COMPUTE MIN MAX AVG OF h01 ON REPORT +COMPUTE MIN MAX AVG OF h02 ON REPORT +COMPUTE MIN MAX AVG OF h03 ON REPORT +COMPUTE MIN MAX AVG OF h04 ON REPORT +COMPUTE MIN MAX AVG OF h05 ON REPORT +COMPUTE MIN MAX AVG OF h06 ON REPORT +COMPUTE MIN MAX AVG OF h07 ON REPORT +COMPUTE MIN MAX AVG OF h08 ON REPORT +COMPUTE MIN MAX AVG OF h09 ON REPORT +COMPUTE MIN MAX AVG OF h10 ON REPORT +COMPUTE MIN MAX AVG OF h11 ON REPORT +COMPUTE MIN MAX AVG OF h12 ON REPORT +COMPUTE MIN MAX AVG OF h13 ON REPORT +COMPUTE MIN MAX AVG OF h14 ON REPORT +COMPUTE MIN MAX AVG OF h15 ON REPORT +COMPUTE MIN MAX AVG OF h16 ON REPORT +COMPUTE MIN MAX AVG OF h17 ON REPORT +COMPUTE MIN MAX AVG OF h18 ON REPORT +COMPUTE MIN MAX AVG OF h19 ON REPORT +COMPUTE MIN MAX AVG OF h20 ON REPORT +COMPUTE MIN MAX AVG OF h21 ON REPORT +COMPUTE MIN MAX AVG OF h22 ON REPORT +COMPUTE MIN MAX AVG OF h23 ON REPORT + + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&inst_id' + AND s.end_interval_time > TRUNC(systimestamp) - &days + ) +, awr_stats as +( +SELECT TRUNC(snap.end_interval_time) end_interval_day + , TO_CHAR(snap.end_interval_time,'hh24') end_interval_hour + , ROUND(( GREATEST(ss2.value,NVL(ss1.value,0)) -- In case of instance bounce ss2.value will be lower than ss1.value + - NVL(ss1.value,ss2.value) -- In cases where there is no previous snapshot, ss1.value will be null. + ) * p.value / &BYTES_DIVIDER) value_delta +FROM snap + , dba_hist_sysstat ss1 + , dba_hist_sysstat ss2 + , dba_hist_stat_name sn + , v$system_parameter p +where p.name = 'db_block_size' +and ss1.dbid = snap.dbid +and ss1.instance_number = snap.instance_number +and ss1.snap_id = snap.prev_snap_id +and ss2.dbid = snap.dbid +and ss2.instance_number = snap.instance_number +and ss2.snap_id = snap.snap_id +and ss1.stat_id = ss2.stat_id +and ss1.dbid = sn.dbid +and ss1.stat_id = sn.stat_id +and sn.stat_name in ( + 'physical reads' + ) +) +SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day + , SUM(s.value_delta) DayTotal + , SUM(DECODE(s.end_interval_hour,'00',s.value_delta,0)) h00 + , SUM(DECODE(s.end_interval_hour,'01',s.value_delta,0)) h01 + , SUM(DECODE(s.end_interval_hour,'02',s.value_delta,0)) h02 + , SUM(DECODE(s.end_interval_hour,'03',s.value_delta,0)) h03 + , SUM(DECODE(s.end_interval_hour,'04',s.value_delta,0)) h04 + , SUM(DECODE(s.end_interval_hour,'05',s.value_delta,0)) h05 + , SUM(DECODE(s.end_interval_hour,'06',s.value_delta,0)) h06 + , SUM(DECODE(s.end_interval_hour,'07',s.value_delta,0)) h07 + , SUM(DECODE(s.end_interval_hour,'08',s.value_delta,0)) h08 + , SUM(DECODE(s.end_interval_hour,'09',s.value_delta,0)) h09 + , SUM(DECODE(s.end_interval_hour,'10',s.value_delta,0)) h10 + , SUM(DECODE(s.end_interval_hour,'11',s.value_delta,0)) h11 + , SUM(DECODE(s.end_interval_hour,'12',s.value_delta,0)) h12 + , SUM(DECODE(s.end_interval_hour,'13',s.value_delta,0)) h13 + , SUM(DECODE(s.end_interval_hour,'14',s.value_delta,0)) h14 + , SUM(DECODE(s.end_interval_hour,'15',s.value_delta,0)) h15 + , SUM(DECODE(s.end_interval_hour,'16',s.value_delta,0)) h16 + , SUM(DECODE(s.end_interval_hour,'17',s.value_delta,0)) h17 + , SUM(DECODE(s.end_interval_hour,'18',s.value_delta,0)) h18 + , SUM(DECODE(s.end_interval_hour,'19',s.value_delta,0)) h19 + , SUM(DECODE(s.end_interval_hour,'20',s.value_delta,0)) h20 + , SUM(DECODE(s.end_interval_hour,'21',s.value_delta,0)) h21 + , SUM(DECODE(s.end_interval_hour,'22',s.value_delta,0)) h22 + , SUM(DECODE(s.end_interval_hour,'23',s.value_delta,0)) h23 + FROM awr_stats s +GROUP BY s.end_interval_day +ORDER BY s.end_interval_day +/ + +UNDEFINE days +UNDEFINE INST_ID + + +@@footer diff --git a/vg/awr_loadprofile_physicalwrites.sql b/vg/awr_loadprofile_physicalwrites.sql new file mode 100644 index 0000000..12812ca --- /dev/null +++ b/vg/awr_loadprofile_physicalwrites.sql @@ -0,0 +1,219 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display load profile from AWR +* All figures delta between two consecutive snapshots +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - No of days +* +* dbid and instancenumber are optional. +* If not passes then it takes current instance's dbid and instancenumber +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Apr-12 Vishal Gupta First Draft +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE days + +DEFINE INST_ID="&&1" +DEFINE days="&&2" + + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _days NEW_VALUE days NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&days','','7','&&days') "_days" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +set pages 2000 + +DEFINE COUNT_FORMAT="999,999" + +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="'000s" + +DEFINE BYTES_FORMAT="9999" + +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" + + +PROMPT +PROMPT ################################################################# +PROMPT P H Y S I C A L W R I T E S T R E N D +PROMPT ################################################################# + + +COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14 +COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)" FORMAT 999,999 +COLUMN h00 HEADING "h00|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h01 HEADING "h01|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h02 HEADING "h02|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h03 HEADING "h03|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h04 HEADING "h04|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h05 HEADING "h05|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h06 HEADING "h06|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h07 HEADING "h07|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h08 HEADING "h08|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h09 HEADING "h09|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h10 HEADING "h10|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h11 HEADING "h11|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h12 HEADING "h12|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h13 HEADING "h13|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h14 HEADING "h14|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h15 HEADING "h15|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h16 HEADING "h16|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h17 HEADING "h17|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h18 HEADING "h18|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h19 HEADING "h19|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h20 HEADING "h20|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h21 HEADING "h21|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h22 HEADING "h22|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN h23 HEADING "h23|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT + +BREAK ON REPORT + +COMPUTE MIN MAX AVG OF DayTotal ON REPORT +COMPUTE MIN MAX AVG OF h00 ON REPORT +COMPUTE MIN MAX AVG OF h01 ON REPORT +COMPUTE MIN MAX AVG OF h02 ON REPORT +COMPUTE MIN MAX AVG OF h03 ON REPORT +COMPUTE MIN MAX AVG OF h04 ON REPORT +COMPUTE MIN MAX AVG OF h05 ON REPORT +COMPUTE MIN MAX AVG OF h06 ON REPORT +COMPUTE MIN MAX AVG OF h07 ON REPORT +COMPUTE MIN MAX AVG OF h08 ON REPORT +COMPUTE MIN MAX AVG OF h09 ON REPORT +COMPUTE MIN MAX AVG OF h10 ON REPORT +COMPUTE MIN MAX AVG OF h11 ON REPORT +COMPUTE MIN MAX AVG OF h12 ON REPORT +COMPUTE MIN MAX AVG OF h13 ON REPORT +COMPUTE MIN MAX AVG OF h14 ON REPORT +COMPUTE MIN MAX AVG OF h15 ON REPORT +COMPUTE MIN MAX AVG OF h16 ON REPORT +COMPUTE MIN MAX AVG OF h17 ON REPORT +COMPUTE MIN MAX AVG OF h18 ON REPORT +COMPUTE MIN MAX AVG OF h19 ON REPORT +COMPUTE MIN MAX AVG OF h20 ON REPORT +COMPUTE MIN MAX AVG OF h21 ON REPORT +COMPUTE MIN MAX AVG OF h22 ON REPORT +COMPUTE MIN MAX AVG OF h23 ON REPORT + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&inst_id' + AND s.end_interval_time > TRUNC(systimestamp) - &days + ) +, awr_stats as +( +SELECT TRUNC(s1.end_interval_time) end_interval_day + , TO_CHAR(s1.end_interval_time,'hh24') end_interval_hour + , ROUND((ss2.value - NVL(ss1.value,ss2.value))*p.value/&BYTES_DIVIDER) value +FROM snap s1 + , dba_hist_sysstat ss1 + , dba_hist_sysstat ss2 + , dba_hist_stat_name sn + , v$system_parameter p +where p.name = 'db_block_size' +and s1.dbid = ss1.dbid +and s1.instance_number = ss1.instance_number +and s1.prev_snap_id = ss1.snap_id +and s1.dbid = ss2.dbid +and s1.instance_number = ss2.instance_number +and s1.snap_id = ss2.snap_id +and ss1.stat_id = ss2.stat_id +and ss1.dbid = sn.dbid +and ss1.stat_id = sn.stat_id +and sn.stat_name in ( + 'physical writes' +/* + 'redo size' + ,'session logical reads' + ,'db block changes' + ,'physical reads' + ,'physical writes' + ,'user calls' + ,'parse count (total)' + ,'parse count (hard)' + ,'sorts (memory)' + ,'sorts (disk)' + ,'logons cumulative' + ,'execute count' + ,'user commits' + ,'user rollbacks' +*/ + ) +) +SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day + , SUM(s.value) DayTotal + , SUM(DECODE(s.end_interval_hour,'00',s.value,0)) h00 + , SUM(DECODE(s.end_interval_hour,'01',s.value,0)) h01 + , SUM(DECODE(s.end_interval_hour,'02',s.value,0)) h02 + , SUM(DECODE(s.end_interval_hour,'03',s.value,0)) h03 + , SUM(DECODE(s.end_interval_hour,'04',s.value,0)) h04 + , SUM(DECODE(s.end_interval_hour,'05',s.value,0)) h05 + , SUM(DECODE(s.end_interval_hour,'06',s.value,0)) h06 + , SUM(DECODE(s.end_interval_hour,'07',s.value,0)) h07 + , SUM(DECODE(s.end_interval_hour,'08',s.value,0)) h08 + , SUM(DECODE(s.end_interval_hour,'09',s.value,0)) h09 + , SUM(DECODE(s.end_interval_hour,'10',s.value,0)) h10 + , SUM(DECODE(s.end_interval_hour,'11',s.value,0)) h11 + , SUM(DECODE(s.end_interval_hour,'12',s.value,0)) h12 + , SUM(DECODE(s.end_interval_hour,'13',s.value,0)) h13 + , SUM(DECODE(s.end_interval_hour,'14',s.value,0)) h14 + , SUM(DECODE(s.end_interval_hour,'15',s.value,0)) h15 + , SUM(DECODE(s.end_interval_hour,'16',s.value,0)) h16 + , SUM(DECODE(s.end_interval_hour,'17',s.value,0)) h17 + , SUM(DECODE(s.end_interval_hour,'18',s.value,0)) h18 + , SUM(DECODE(s.end_interval_hour,'19',s.value,0)) h19 + , SUM(DECODE(s.end_interval_hour,'20',s.value,0)) h20 + , SUM(DECODE(s.end_interval_hour,'21',s.value,0)) h21 + , SUM(DECODE(s.end_interval_hour,'22',s.value,0)) h22 + , SUM(DECODE(s.end_interval_hour,'23',s.value,0)) h23 + FROM awr_stats s +GROUP BY s.end_interval_day +ORDER BY s.end_interval_day +/ + +UNDEFINE days +UNDEFINE INST_ID + + +@@footer diff --git a/vg/awr_osstat.sql b/vg/awr_osstat.sql new file mode 100644 index 0000000..3d16d05 --- /dev/null +++ b/vg/awr_osstat.sql @@ -0,0 +1,212 @@ + +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display hourly OS Statistics from AWR +* +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - Statistics Name (Exact Name, use @osstatname script to find exact name) +* +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Feb-15 Vishal Gupta Change input parameter order +* 25-May-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE STAT_NAME="&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE INST_ID="&&4" + + +DEFINE IF_NON_CUMULATIVE_VALUE="--" +DEFINE IF_CUMULATIVE_VALUE="--" + +set term off + +COLUMN "_STAT_NAME" new_value STAT_NAME NOPRINT +COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT +COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT +COLUMN "_INST_ID" new_value INST_ID NOPRINT + +SELECT DECODE('&&STAT_NAME','','BUSY_TIME','&&STAT_NAME') "_STAT_NAME" + , DECODE('&&FROM_TIMESTAMP','',TO_CHAR(sysdate - 1,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP','',TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +FROM DUAL +; + +COLUMN "_IF_CUMULATIVE_VALUE" new_value IF_CUMULATIVE_VALUE NOPRINT +COLUMN "_IF_NON_CUMULATIVE_VALUE" new_value IF_NON_CUMULATIVE_VALUE NOPRINT + +SELECT DECODE(cumulative,'YES','','--') "_IF_CUMULATIVE_VALUE" + , DECODE(cumulative,'NO','','--') "_IF_NON_CUMULATIVE_VALUE" + FROM v$osstat + WHERE stat_name = '&&STAT_NAME' +; + +COLUMN "_HEADING" new_value "HEADING" NOPRINT +COLUMN "_DIVIDER" new_value "DIVIDER" NOPRINT +COLUMN "_STAT_DESCRIPTION" new_value "STAT_DESCRIPTION" NOPRINT + +SELECT DECODE('&&STAT_NAME' + ,'BUSY_TIME','(s)' + ,'USER_TIME','(s)' + ,'IOWAIT_TIME','(s)' + ,'SYS_TIME','(s)' + ,'IDLE_TIME','(s)' + ,'NICE_TIME','(s)' + ,'RSRC_MGR_CPU_WAIT_TIME','(s)' + ,'VM_IN_BYTES','MB' + ,'VM_OUT_BYTES','MB' + ,'' + ) "_HEADING" + , DECODE('&&STAT_NAME' + ,'BUSY_TIME','100' + ,'USER_TIME','100' + ,'IOWAIT_TIME','100' + ,'SYS_TIME','100' + ,'IDLE_TIME','100' + ,'NICE_TIME','100' + ,'RSRC_MGR_CPU_WAIT_TIME','100' + ,'VM_IN_BYTES','power(1024,2)' + ,'VM_OUT_BYTES','power(1024,2)' + ,1 + ) "_DIVIDER" + , DECODE('&&STAT_NAME' + ,'BUSY_TIME','Time stat CPUs have been in busy state' + ,'USER_TIME','Time spent in user code' + ,'IOWAIT_TIME','Time spent waiting for IO' + ,'SYS_TIME','Time spent in the kernel' + ,'IDLE_TIME','Time that CPUs have been in idle state' + ,'NICE_TIME','100' + ,'RSRC_MGR_CPU_WAIT_TIME','100' + ,'VM_IN_BYTES','power(1024,2)' + ,'VM_OUT_BYTES','power(1024,2)' + ,'' + ) "_STAT_DESCRIPTION" + FROM v$osstat + WHERE stat_name = '&&STAT_NAME' +; + + +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +set pages 50000 + +DEFINE FORMAT="999,999,999,999" +DEFINE TOTAL_FORMAT="999,999,999,999" + +DEFINE HEADING="#" +DEFINE DIVIDER="1" +--DEFINE HEADING="'1000s" +--DEFINE DIVIDER="1000" + +--DEFINE HEADING="min" +--DEFINE DIVIDER="60/100" +--DEFINE HEADING="hr" +--DEFINE DIVIDER="60/60/100" + +--DEFINE HEADING="'KB" +--DEFINE DIVIDER="1024" +--DEFINE HEADING="'MB" +--DEFINE DIVIDER="1024/1024" +--DEFINE HEADING="'GB" +--DEFINE DIVIDER="1024/1024/1024" + +PROMPT +PROMPT ############################################################################# +PROMPT # AWR Operation System Statistics +PROMPT # +PROMPT # From AWR Repository +PROMPT # - Statistic Name - "&&STAT_NAME" - &&STAT_DESCRIPTION +PROMPT # - From Timestamp - "&&FROM_TIMESTAMP" (YYYY-MM-DD HH24:MI:SS) +PROMPT # - To Timestamp - "&&TO_TIMESTAMP" (YYYY-MM-DD HH24:MI:SS) +PROMPT # - For Instance ID - "&&INST_ID" +PROMPT ############################################################################# + +COLUMN end_interval_time HEADING "SnapTime" FORMAT A15 +COLUMN all_inst_value HEADING "All Inst|Value" FORMAT &&TOTAL_FORMAT +COLUMN inst1_value HEADING "Inst 1|Value" FORMAT &&FORMAT +COLUMN inst2_value HEADING "Inst 2|Value" FORMAT &&FORMAT +COLUMN inst3_value HEADING "Inst 3|Value" FORMAT &&FORMAT +COLUMN inst4_value HEADING "Inst 4|Value" FORMAT &&FORMAT +COLUMN inst5_value HEADING "Inst 5|Value" FORMAT &&FORMAT +COLUMN inst6_value HEADING "Inst 6|Value" FORMAT &&FORMAT +COLUMN inst7_value HEADING "Inst 7|Value" FORMAT &&FORMAT +COLUMN inst8_value HEADING "Inst 8|Value" FORMAT &&FORMAT + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS') + ) +SELECT /*+ USE_NL(s1 ss1 ss_prev) */ + TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time +&&IF_CUMULATIVE_VALUE , ROUND(SUM(ss.value - LEAST(ss_prev.value,ss.value)) / &&DIVIDER ) all_inst_value +&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,1,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst1_value +&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,2,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst2_value +&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,3,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst3_value +&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,4,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst4_value +&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,5,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst5_value +&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,6,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst6_value +&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,7,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst7_value +&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,8,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst8_value +&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(ss.value) / &&DIVIDER ) all_inst_value +&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,1,ss.value,0)) / &&DIVIDER ) inst1_value +&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,2,ss.value,0)) / &&DIVIDER ) inst2_value +&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,3,ss.value,0)) / &&DIVIDER ) inst3_value +&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,4,ss.value,0)) / &&DIVIDER ) inst4_value +&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,5,ss.value,0)) / &&DIVIDER ) inst5_value +&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,6,ss.value,0)) / &&DIVIDER ) inst6_value +&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,7,ss.value,0)) / &&DIVIDER ) inst7_value +&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,8,ss.value,0)) / &&DIVIDER ) inst8_value +FROM snap s + , dba_hist_osstat ss + , dba_hist_osstat ss_prev +where s.next_snap_id IS NOT NULL +and s.dbid = ss_prev.dbid +and s.instance_number = ss_prev.instance_number +and s.snap_id = ss_prev.snap_id +and s.dbid = ss.dbid +and s.instance_number = ss.instance_number +and s.next_snap_id = ss.snap_id +and ss_prev.stat_name = ss.stat_name +and ss.stat_name = '&&STAT_NAME' +GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') +ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc +; + + +UNDEFINE IF_NON_CUMULATIVE_VALUE +UNDEFINE IF_CUMULATIVE_VALUE + + +@@footer diff --git a/vg/awr_parameter.sql b/vg/awr_parameter.sql new file mode 100644 index 0000000..652ac88 --- /dev/null +++ b/vg/awr_parameter.sql @@ -0,0 +1,97 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display database parameter changes from AWR Repository +* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character) +* 2 - Instance Number ( Use % to query for all instances) +* 3 - Number of days to query ( Default 30) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Jul-12 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +VARIABLE PARAM_NAME VARCHAR2(100) +VARIABLE INST_ID VARCHAR2(100) +VARIABLE DAYS VARCHAR2(100) +VARIABLE WHERECLAUSE VARCHAR2(4000) + +BEGIN + :PARAM_NAME:= '&&1'; + :INST_ID := '&&2'; + :DAYS := '&&3'; + :WHERECLAUSE := '&&4'; + :PARAM_NAME := CASE WHEN NVL(:PARAM_NAME,'x') = 'x' THEN '%' ELSE :PARAM_NAME END; + :INST_ID := CASE WHEN NVL(:INST_ID,'x') = 'x' THEN '%' ELSE :INST_ID END; + :DAYS := CASE WHEN NVL(:DAYS,'x') = 'x' THEN '7' ELSE :DAYS END; +END; +/ + + +set head off +SELECT '**********************************************' || chr(10) || + '* init.ora Parameter Change History' || chr(10) || + '* (From AWR Repository)' || chr(10) || + '*' || chr(10) || + '* Input Parameters' || chr(10) || + '* - Parameter Name = "' || :PARAM_NAME || '"' || chr(10) || + '* - Instance# = "' || :INST_ID || '"' || chr(10) || + '* - Days = "' || :DAYS || '"' || chr(10) || + '**********************************************' || chr(10) || + '' +FROM DUAL; +set head on + + +COLUMN end_interval_time HEADING "Snapshot Time" FORMAT a18 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN parameter_name HEADING "ParameterName" FORMAT a31 +COLUMN value HEADING "Current Value" FORMAT a50 +COLUMN prev_value HEADING "Previous Value" FORMAT a50 + + +select TO_CHAR(a.end_interval_time,'DD-MON-YY HH24:MI:SS') end_interval_time + , a.instance_number + , a.parameter_name + --, a.ordinal + , a.value + , a.prev_value +FROM + (SELECT /*+ LEADING(s pn) parallel(s,4) parallel(pn,4) */ + s.end_interval_time + , p.instance_number + , p.parameter_name + , p.VALUE + , lag(p.VALUE) OVER (PARTITION BY p.dbid, p.instance_number, p.parameter_hash + ORDER BY p.dbid, p.snap_id, p.instance_number, p.parameter_hash) prev_value + FROM v$database d + JOIN dba_hist_snapshot s ON s.dbid = d.dbid + JOIN dba_hist_parameter p ON p.dbid = s.dbid AND p.snap_id = s.snap_id AND p.instance_number = s.instance_number + WHERE 1=1 + AND s.instance_number LIKE :INST_ID + AND s.end_interval_time > SYSDATE - :DAYS - (5/24) -- Check for 5 extra hours in past + AND p.parameter_name LIKE :PARAM_NAME + --AND REPLACE(p.parameter_name,'_','!') NOT LIKE '!!%' -- Filter AMM or ASMM modified parameters if in AWR. + AND p.parameter_name NOT LIKE '\_\_%' ESCAPE '\' -- Filter AMM or ASMM modified parameters if in AWR. + AND p.parameter_name NOT IN ('service_names') + AND NVL(p.VALUE,'x') NOT LIKE '%SYS.KUPC$%' -- Ignore DataPump export/import service name change + ) a +WHERE 1=1 + AND LOWER(NVL(a.value,'x')) <> LOWER(NVL(a.prev_value,'x')) + AND a.end_interval_time > sysdate - :DAYS +ORDER BY TO_DATE(TO_CHAR(a.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') + , a.parameter_name + , a.instance_number +; + +@@footer \ No newline at end of file diff --git a/vg/awr_parameter2.sql b/vg/awr_parameter2.sql new file mode 100644 index 0000000..de5048f --- /dev/null +++ b/vg/awr_parameter2.sql @@ -0,0 +1,105 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display database parameter changes from AWR Repository +* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character) +* 2 - Instance Number ( Use % to query for all instances) +* 3 - Number of days to query ( Default 30) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Nov-13 Vishal Gupta Modified to use multiple value view +* (DBA_HIST_PARAMETER -> DBA_HIST_MVPARAMETER) +* 05-Jul-12 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +VARIABLE PARAM_NAME VARCHAR2(100) +VARIABLE INST_ID VARCHAR2(100) +VARIABLE DAYS VARCHAR2(100) + +BEGIN + :PARAM_NAME:= '&&1'; + :INST_ID := '&&2'; + :DAYS := '&&3'; + :PARAM_NAME := CASE WHEN NVL(:PARAM_NAME,'x') = 'x' THEN '%' ELSE :PARAM_NAME END; + :INST_ID := CASE WHEN NVL(:INST_ID,'x') = 'x' THEN '%' ELSE :INST_ID END; + :DAYS := CASE WHEN NVL(:DAYS,'x') = 'x' THEN '7' ELSE :DAYS END; +END; +/ + + +set head off +SELECT '**********************************************' || chr(10) || + '* init.ora Parameter Change History' || chr(10) || + '* (From AWR Repository)' || chr(10) || + '*' || chr(10) || + '* Input Parameters' || chr(10) || + '* - Parameter Name = "' || :PARAM_NAME || '"' || chr(10) || + '* - Instance# = "' || :INST_ID || '"' || chr(10) || + '* - Days = "' || :DAYS || '"' || chr(10) || + '**********************************************' || chr(10) || + '' +FROM DUAL; +set head on + + +COLUMN end_interval_time HEADING "Snapshot Time" FORMAT a18 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN parameter_name HEADING "ParameterName" FORMAT a30 +COLUMN value HEADING "Current Value" FORMAT a50 +COLUMN prev_value HEADING "Previous Value" FORMAT a50 + + +WITH snapshots +AS +( + SELECT s.dbid + , s.instance_number + , s.snap_id + , s.end_interval_time + , lag(s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number + ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + FROM v$database d + JOIN dba_hist_snapshot s ON s.dbid = d.dbid + WHERE s.end_interval_time > SYSDATE - :DAYS - 5/24 -- Check for 5 extra hours in past + AND s.instance_number LIKE :INST_ID +) +select TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI:SS') end_interval_time + , p.instance_number + , pn.parameter_name + --, p.ordinal + , p.VALUE + , prev.value prev_value + FROM snapshots s + JOIN dba_hist_parameter_name pn ON s.dbid = pn.dbid + -- multi value parameter view + LEFT OUTER JOIN dba_hist_mvparameter prev ON prev.dbid = s.dbid + AND prev.instance_number = s.instance_number + AND prev.snap_id = s.prev_snap_id + AND prev.parameter_hash = pn.parameter_hash + OUTER JOIN dba_hist_mvparameter p ON p.dbid = s.dbid + AND p.instance_number = s.instance_number + AND p.snap_id = s.snap_id + AND p.parameter_hash = pn.parameter_hash + AND NVL(p.value,'x') = NVL(prev.value,'x') + WHERE NVL(pn.parameter_name,'x') LIKE :PARAM_NAME + --AND REPLACE(pn.parameter_name,'_','!') NOT LIKE '!!%' -- Filter AMM or ASMM modified parameters if in AWR. + AND pn.parameter_name NOT LIKE '\_\_%' ESCAPE '\' -- Filter AMM or ASMM modified parameters if in AWR. + AND NVL(p.VALUE,'x') NOT LIKE '%SYS.KUPC$%' -- Ignore DataPump export/import service name change + AND NVL(p.value,'x') <> NVL(prev.value,'x') +ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') + , pn.parameter_name + , s.instance_number +; + +@@footer \ No newline at end of file diff --git a/vg/awr_pga_stats_by_statname.sql b/vg/awr_pga_stats_by_statname.sql new file mode 100644 index 0000000..6aa4f85 --- /dev/null +++ b/vg/awr_pga_stats_by_statname.sql @@ -0,0 +1,121 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display PGA statistics +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - PGA Statistics Name (For exact name, use @pga_stats script to find exact name) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Jun-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE STAT_NAME="&4" + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +set pages 50000 + +DEFINE COUNT_FORMAT=999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + + + + + + +PROMPT +PROMPT *************************************************** +PROMPT * PGA Statistics from AWR +PROMPT * +PROMPT * From AWR Repository +PROMPT * - For Instance ID - &INST_ID +PROMPT * - Between &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT * - Statistic Name - "&&STAT_NAME" +PROMPT *************************************************** + + + +COLUMN end_interval_time HEADING "SnapTime" FORMAT a18 +COLUMN name HEADING "Name" FORMAT a40 +COLUMN unit HEADING "Unit" FORMAT a10 +COLUMN all_inst_value HEADING "AllInst" FORMAT &&COUNT_FORMAT +COLUMN inst1_value HEADING "Inst1" FORMAT &&COUNT_FORMAT +COLUMN inst2_value HEADING "Inst2" FORMAT &&COUNT_FORMAT +COLUMN inst3_value HEADING "Inst3" FORMAT &&COUNT_FORMAT +COLUMN inst4_value HEADING "Inst4" FORMAT &&COUNT_FORMAT +COLUMN inst5_value HEADING "Inst5" FORMAT &&COUNT_FORMAT +COLUMN inst6_value HEADING "Inst6" FORMAT &&COUNT_FORMAT +COLUMN inst7_value HEADING "Inst7" FORMAT &&COUNT_FORMAT +COLUMN inst8_value HEADING "Inst8" FORMAT &&COUNT_FORMAT + +SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , p.name + , DECODE(pn.unit + , 'bytes','&&BYTES_HEADING' + , pn.unit) unit + , SUM(DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value)) all_inst_value + , SUM(DECODE(p.instance_number, 1, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst1_value + , SUM(DECODE(p.instance_number, 2, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst2_value + , SUM(DECODE(p.instance_number, 3, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst3_value + , SUM(DECODE(p.instance_number, 4, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst4_value + , SUM(DECODE(p.instance_number, 5, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst5_value + , SUM(DECODE(p.instance_number, 6, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst6_value + , SUM(DECODE(p.instance_number, 7, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst7_value + , SUM(DECODE(p.instance_number, 8, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst8_value + FROM dba_hist_pgastat p + , dba_hist_snapshot s + , v$pgastat pn +WHERE p.dbid = s.dbid + AND p.instance_number = s.instance_number + AND p.snap_id = s.snap_id + AND p.name = pn.name + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS') + AND p.name = '&&STAT_NAME' +GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') + , p.name + , pn.unit +ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') + , p.name + , pn.unit +; + + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE STAT_NAME + + +@@footer diff --git a/vg/awr_pga_stats_delta_by_statname.sql b/vg/awr_pga_stats_delta_by_statname.sql new file mode 100644 index 0000000..c850ac5 --- /dev/null +++ b/vg/awr_pga_stats_delta_by_statname.sql @@ -0,0 +1,136 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display PGA statistics +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - PGA Statistics Name (For exact name, use @pga_stats script to find exact name) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Jun-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE STAT_NAME="&4" + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +set pages 50000 + +DEFINE COUNT_FORMAT=999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + + + + + + +PROMPT +PROMPT *************************************************** +PROMPT * P G A S T A T I S T I C S +PROMPT * +PROMPT * From AWR Repository (Delta Figures) +PROMPT * - For Instance ID - &INST_ID +PROMPT * - Between &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT * - Statistic Name - "&&STAT_NAME" +PROMPT *************************************************** + + + +COLUMN end_interval_time HEADING "SnapTime" FORMAT a18 +COLUMN name HEADING "Name" FORMAT a40 +COLUMN unit HEADING "Unit" FORMAT a10 +COLUMN all_inst_value HEADING "AllInst" FORMAT &&COUNT_FORMAT +COLUMN inst1_value HEADING "Inst1" FORMAT &&COUNT_FORMAT +COLUMN inst2_value HEADING "Inst2" FORMAT &&COUNT_FORMAT +COLUMN inst3_value HEADING "Inst3" FORMAT &&COUNT_FORMAT +COLUMN inst4_value HEADING "Inst4" FORMAT &&COUNT_FORMAT +COLUMN inst5_value HEADING "Inst5" FORMAT &&COUNT_FORMAT +COLUMN inst6_value HEADING "Inst6" FORMAT &&COUNT_FORMAT +COLUMN inst7_value HEADING "Inst7" FORMAT &&COUNT_FORMAT +COLUMN inst8_value HEADING "Inst8" FORMAT &&COUNT_FORMAT + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS') + ) +SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , p.name + , DECODE(pn.unit + , 'bytes','&&BYTES_HEADING' + , pn.unit) unit + , SUM(DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value)))) all_inst_value + , SUM(DECODE(p.instance_number, 1, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst1_value + , SUM(DECODE(p.instance_number, 2, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst2_value + , SUM(DECODE(p.instance_number, 3, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst3_value + , SUM(DECODE(p.instance_number, 4, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst4_value + , SUM(DECODE(p.instance_number, 5, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst5_value + , SUM(DECODE(p.instance_number, 6, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst6_value + , SUM(DECODE(p.instance_number, 7, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst7_value + , SUM(DECODE(p.instance_number, 8, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst8_value + FROM snap s + , dba_hist_pgastat p + , dba_hist_pgastat p_prev + , v$pgastat pn +WHERE p.dbid = s.dbid + AND p.instance_number = s.instance_number + AND p.snap_id = s.next_snap_id + AND p.name = pn.name + AND p_prev.dbid = s.dbid + AND p_prev.instance_number = s.instance_number + AND p_prev.snap_id = s.snap_id + AND p_prev.name = pn.name + AND p_prev.name = p.name + AND p.name = '&&STAT_NAME' +GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') + , p.name + , pn.unit +ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') + , p.name + , pn.unit +; + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE STAT_NAME + +@@footer diff --git a/vg/awr_pgausage.sql b/vg/awr_pgausage.sql new file mode 100644 index 0000000..ea3a68c --- /dev/null +++ b/vg/awr_pgausage.sql @@ -0,0 +1,112 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display instance level PGA usage from AWR Repository +* Compability: 10.x, 11.x +* Parameters : 1 - DAYS - Default Value - 7 +* 2 - INST_ID - Default Value - %, (Use % as wildcard) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Sep-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DAYS +UNDEFINE INST_ID + +DEFINE DAYS="&&1" +DEFINE INST_ID="&&2" + + +set term off +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _DAYS NEW_VALUE DAYS NOPRINT +SELECT TRIM(DECODE('&&DAYS','',7,'&&DAYS')) "_DAYS" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +FROM DUAL; +set term on + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE BYTES_LARGE_FORMAT="9,999,999" +DEFINE BYTES_FORMAT="99,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + + + +PROMPT *-------------------------------------------------------------------* +PROMPT * I N S T A N C E L E V E L P G A U S A G E S U M M A R Y * +PROMPT * (From AWR Repository) * +PROMPT * * +PROMPT * Input Parameters * +PROMPT * - Days = '&&DAYS' +PROMPT * - INST_ID = '&&INST_ID' +PROMPT *-------------------------------------------------------------------* + + +COLUMN seperator HEADING "!|!|!" FORMAT a1 + +COLUMN total_allocated HEADING "Total|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT +COLUMN freeable_allocated HEADING "Freeable|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN sql_allocated HEADING "SQL|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN plsql_allocated HEADING "PL/SQL|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN olap_allocated HEADING "OLAP|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN java_allocated HEADING "Java|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN other_allocated HEADING "Other|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT + +COLUMN total_used HEADING "Total|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT +COLUMN freeable_used HEADING "Freeable|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN sql_used HEADING "SQL|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN plsql_used HEADING "PL/SQL|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN olap_used HEADING "OLAP|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN java_used HEADING "Java|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN other_used HEADING "Other|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT + +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN instance_number HEADING "Instance" FORMAT 9999999 + +SELECT /*+ USE_NL(d s p) */ + TO_CHAR(TRUNC(s.end_interval_time,'MI'),'DD-MON-YY HH24:MI') end_interval_time + , s.instance_number + , ROUND(SUM(p.allocated_total)/ &&BYTES_DIVIDER) total_allocated + , ROUND(SUM(p.used_total)/ &&BYTES_DIVIDER) total_used + , ROUND(MAX(DECODE(p.category,'Freeable',p.allocated_total,0))/ &&BYTES_DIVIDER) freeable_allocated + , ROUND(MAX(DECODE(p.category,'Freeable',p.used_total,0))/ &&BYTES_DIVIDER) freeable_used + , ROUND(MAX(DECODE(p.category,'SQL',p.allocated_total,0))/ &&BYTES_DIVIDER) sql_allocated + , ROUND(MAX(DECODE(p.category,'SQL',p.used_total,0))/ &&BYTES_DIVIDER) sql_used + , ROUND(MAX(DECODE(p.category,'PL/SQL',p.allocated_total,0))/ &&BYTES_DIVIDER) plsql_allocated + , ROUND(MAX(DECODE(p.category,'PL/SQL',p.used_total,0))/ &&BYTES_DIVIDER) plsql_used + , ROUND(MAX(DECODE(p.category,'OLAP',p.allocated_total,0))/ &&BYTES_DIVIDER) olap_allocated + , ROUND(MAX(DECODE(p.category,'OLAP',p.used_total,0))/ &&BYTES_DIVIDER) olap_used + , ROUND(MAX(DECODE(p.category,'Other',p.allocated_total,0))/ &&BYTES_DIVIDER) other_allocated + , ROUND(MAX(DECODE(p.category,'Other',p.used_total,0))/ &&BYTES_DIVIDER) other_used + FROM dba_hist_snapshot s + JOIN v$database d ON s.dbid = d.dbid + JOIN dba_hist_process_mem_summary p ON p.dbid = s.dbid + AND p.instance_number = s.instance_number + AND p.snap_id = s.snap_id +WHERE s.end_interval_time > sysdate - &&DAYS + AND s.instance_number LIKE '&&INST_ID' +GROUP BY TRUNC(s.end_interval_time,'MI') + , s.instance_number +ORDER BY TRUNC(s.end_interval_time,'MI') + , s.instance_number +; + +@@footer diff --git a/vg/awr_queries.sql b/vg/awr_queries.sql new file mode 100644 index 0000000..ff77910 --- /dev/null +++ b/vg/awr_queries.sql @@ -0,0 +1,488 @@ +/* +********************************************** +AWR Queries +********************************************** +Contents + - AWR SQL Stats Query + - AWR SQL Statistics (Daily/Weekly/Monthly Totals) + - AWR Segment Statistics Query + - AWR Active Session History (ASH) queries + - AWR ASH Largest TEMP and PGA Users + +*/ + +--************************************************** +-- AWR SQL Stats Query +--************************************************** +SELECT s.end_interval_time + , ss.instance_number + , ss.sql_id + , (ss.elapsed_time_total/1000000) "ElapsedTime (Total)" + , (ss.elapsed_time_total/1000000) / ss.executions_total "ElapsedTime/Exec" + , ss.executions_total + , ss.parsing_schema_name + , ss.* + FROM dba_hist_sqlstat ss + JOIN dba_hist_snapshot s ON s.dbid = ss.dbid AND s.instance_number = ss.instance_number AND s.snap_id = ss.snap_id + JOIN v$database d ON d.dbid = s.dbid +WHERE 1=1 +-- AND s.end_interval_time BETWEEN TO_TIMESTAMP('2012-04-10 00:00:00','YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2012-10-18 00:00:00','YYYY-MM-DD HH24:MI:SS') +-- AND ss.sql_id = '' +-- AND upper(ss.module) like upper('bum%') +-- AND upper(ss.action) like upper('%%') +-- AND ss.sql_profile IS NOT NULL +-- AND ss.parsing_schema_name LIKE '%%' +-- AND (ss.elapsed_time_total/1000000) / ss.executions_total > 10 -- ElapsedTime/Exec > 10s +-- AND ss.executions_delta > 0 +-- AND (ss.elapsed_time_total/1000000) > 100 +--ORDER BY (ss.elapsed_time_total/1000000) / ss.executions_total DESC +ORDER BY (ss.elapsed_time_total/1000000) DESC +; + + +-- ********************************************** +-- AWR SQL Statistics (Daily/Weekly/Monthly Totals) +-- ********************************************** + +SELECT TO_CHAR(s.end_interval_time,'YYYY-MM-DD') "Day" /* Daily */ +--SELECT TO_CHAR(s.end_interval_time,'IYYY-IW') "Week" /* Weekly */ +--SELECT TO_CHAR(s.end_interval_time,'YYYY-MM') "Month" /* Monthly */ + , ss.sql_id "SQLId" + , MIN(s.end_interval_time) "StartTimestamp" + , MAX(s.end_interval_time) "EndTimeStamp" + , ROUND(SUM(ss.executions_delta)) "Executions" + , ROUND(SUM(ss.iowait_delta/1000000)) "IO Wait (Sec)" + , ROUND(SUM(ss.apwait_delta/1000000)) "App Wait (Sec)" + , ROUND(SUM(ss.ccwait_delta/1000000)) "Concurrency Wait (Sec)" + , ROUND(SUM(ss.clwait_delta/1000000)) "Cluster Wait (Sec)" + , ROUND(SUM(ss.plsexec_time_delta/1000000)) "PL/SQL Exec (Sec)" + , ROUND(SUM(ss.cpu_time_delta/1000000)) "CPU Time (Sec)" + , ROUND(SUM(ss.elapsed_time_delta/1000000)) "Elapsed Time (Sec)" + , ROUND(SUM(ss.rows_processed_delta)) "RowsProcessed (#)" + , ROUND(SUM(ss.sorts_delta)) "Sorts" + , ROUND(SUM(ss.buffer_gets_delta)) "Buffer Gets" + , ROUND(SUM(ss.direct_writes_delta)/1024/1024/1024) "DirectWrite (GB)" + , ROUND(SUM(ss.physical_read_bytes_delta)/1024/1024/1024) "PhyReads (GB)" + , ROUND(SUM(ss.physical_write_bytes_delta)/1024/1024/1024) "PhyWrites (GB)" + , ROUND(SUM(ss.optimized_physical_reads_delta)/1024/1024/1024) "PhyReads Optimized (GB)" + , ROUND(SUM(ss.io_offload_elig_bytes_delta)/1024/1024/1024) "PhyReads IO Offload Elig (GB)" + , ROUND(SUM(ss.io_offload_return_bytes_delta)/1024/1024/1024) "PhyReads Offload Return (GB)" + , ROUND(SUM(ss.io_interconnect_bytes_delta)/1024/1024/1024) "IO Interconnect (GB)" + FROM dba_hist_sqlstat ss + JOIN dba_hist_snapshot s ON s.dbid = ss.dbid AND s.instance_number = ss.instance_number AND s.snap_id = ss.snap_id +WHERE 1=1 +-- AND ss.sql_id = '1awt7p3ua5tnz' +-- AND TO_CHAR(s.end_interval_time,'Dy') NOT IN ('Sat','Sun') +-- AND s.end_interval_time > sysdate - 30 +GROUP BY TO_CHAR(s.end_interval_time,'YYYY-MM-DD') /* Daily */ +--- GROUP BY TO_CHAR(s.end_interval_time,'IYYY-IW') /* Weekly */ +--GROUP BY TO_CHAR(s.end_interval_time,'YYYY-MM') /* Monthly */ + , ss.sql_id +ORDER BY 1 DESC +; + + +--************************************************** +-- AWR Segment Statistics Query +-- - Captures only top segment's statistics. +--************************************************** +SELECT s.end_interval_time + , ss.instance_number + , o.owner + , o.object_name + , o.subobject_name + , o.object_type + , o.tablespace_name + , o.partition_type + , ss.space_allocated_delta + , ss.space_used_delta + , ss.physical_reads_delta + , ss.physical_reads_direct_delta + , ss.physical_read_requests_delta + , ss.optimized_physical_reads_delta + , ss.physical_writes_delta + , ss.physical_writes_direct_delta + , ss.physical_write_requests_delta + , ss.itl_waits_delta + , ss.row_lock_waits_delta + , ss.gc_buffer_busy_delta + , ss.gc_cr_blocks_served_delta + , ss.gc_cu_blocks_served_delta + , ss.gc_cr_blocks_received_delta + , ss.gc_cu_blocks_received_delta + , ss.buffer_busy_waits_delta + , ss.db_block_changes_delta + , ss.table_scans_delta + , ss.chain_row_excess_delta + FROM v$database d + JOIN dba_hist_snapshot s USING (dbid) + JOIN dba_hist_seg_stat ss USING (dbid, instance_number, + , dba_hist_snapshot s + , dba_hist_seg_stat_obj o + WHERE d.dbid = s.dbid + AND ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND o.dbid = o.dbid + AND o.obj# = o.obj# + AND o.dataobj# = o.dataobj# + AND o.owner like 'PM_OWN' + AND o.object_name LIKE 'PMA_A' + AND o.subobject_name LIKE '%%' + AND s.end_interval_time > systimestamp - 30 +ORDER BY s.end_interval_time desc + , ss.instance_number +; + + +SELECT MAX(s.end_interval_time) end_interval_time + , o.owner + , o.object_name + , o.subobject_name + , o.object_type + , o.tablespace_name + , o.partition_type + , SUM(ss.space_allocated_delta) + , SUM(ss.space_used_delta) + , SUM(ss.physical_reads_delta) + , SUM(ss.physical_reads_direct_delta) + , SUM(ss.physical_read_requests_delta) + , SUM(ss.optimized_physical_reads_delta) + , SUM(ss.physical_writes_delta) + , SUM(ss.physical_writes_direct_delta) + , SUM(ss.physical_write_requests_delta) + , SUM(ss.itl_waits_delta) + , SUM(ss.row_lock_waits_delta) + , SUM(ss.gc_buffer_busy_delta) + , SUM(ss.gc_cr_blocks_served_delta) + , SUM(ss.gc_cu_blocks_served_delta) + , SUM(ss.gc_cr_blocks_received_delta) + , SUM(ss.gc_cu_blocks_received_delta) + , SUM(ss.buffer_busy_waits_delta) + , SUM(ss.db_block_changes_delta) + , SUM(ss.table_scans_delta) + , SUM(ss.chain_row_excess_delta) + FROM v$database d + , dba_hist_seg_stat ss + , dba_hist_snapshot s + , dba_hist_seg_stat_obj o + WHERE d.dbid = s.dbid + AND s.dbid = ss.dbid + AND s.instance_number = ss.instance_number + AND s.snap_id = ss.snap_id + AND ss.dbid = o.dbid + AND ss.obj# = o.obj# + AND ss.dataobj# = o.dataobj# + AND o.owner like 'PM_OWN' + AND o.object_name LIKE 'PMA_A' + AND o.subobject_name LIKE '%%' + AND s.end_interval_time > systimestamp - 30 +GROUP BY o.owner + , o.object_name + , o.subobject_name + , o.object_type + , o.tablespace_name + , o.partition_type +ORDER BY end_interval_time desc +--ORDER BY SUM(ss.space_allocated_delta) desc +--ORDER BY SUM(ss.space_used_delta) desc +--ORDER BY SUM(ss.physical_reads_delta) desc +--ORDER BY SUM(ss.physical_reads_direct_delta) desc +--ORDER BY SUM(ss.physical_read_requests_delta) desc +--ORDER BY SUM(ss.optimized_physical_reads_delta) desc +--ORDER BY SUM(ss.physical_writes_delta) desc +--ORDER BY SUM(ss.physical_writes_direct_delta) desc +--ORDER BY SUM(ss.physical_write_requests_delta) desc +--ORDER BY SUM(ss.itl_waits_delta) desc +--ORDER BY SUM(ss.row_lock_waits_delta) desc +--ORDER BY SUM(ss.gc_buffer_busy_delta) desc +--ORDER BY SUM(ss.gc_cr_blocks_served_delta) desc +--ORDER BY SUM(ss.gc_cu_blocks_served_delta) desc +--ORDER BY SUM(ss.gc_cr_blocks_received_delta) desc +--ORDER BY SUM(ss.gc_cu_blocks_received_delta) desc +--ORDER BY SUM(ss.buffer_busy_waits_delta) desc +--ORDER BY SUM(ss.db_block_changes_delta) desc +--ORDER BY SUM(ss.table_scans_delta) desc +--ORDER BY SUM(ss.chain_row_excess_delta) desc +; + + + + +--************************************************** +-- AWR Active Session History (ASH) queries +--************************************************** + +SELECT ash.sample_time + , ash.instance_number I# + , ash.session_id + , ash.session_serial# + , ash.session_type + , sn.service_name + , u.username + , ash.machine + , ash.PROGRAM + , ash.client_id + , ash.sql_exec_start + , ash.force_matching_signature + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.top_level_sql_id +-- , ash.plsql_entry_object_id +-- , ash.plsql_entry_subprogram_id +-- , ash.plsql_object_id +-- , ash.plsql_subprogram_id + , NVL2(p2.owner,p2.owner || '.' || p2.object_name || nvl2(p2.procedure_name,'.' || p2.procedure_name, ''),'') plsql_program + , NVL2(p1.owner, p1.owner || '.' || p1.object_name || nvl2(p1.procedure_name,'.' || p1.procedure_name, ''),'') plsql_entry_program + , ash.module + , ash.action + , ash.event + , ash.blocking_session_status + , ash.blocking_session + , ash.blocking_session_serial# + , ash.blocking_inst_id + , ash.blocking_hangchain_info + , ash.tm_delta_time + , ash.tm_delta_cpu_time + , ash.tm_delta_db_time + , ash.delta_time + , ash.delta_read_io_requests + , ash.delta_read_io_bytes + , ash.delta_write_io_requests + , ash.delta_write_io_bytes + , ash.delta_interconnect_io_bytes + , ash.pga_allocated + , ash.temp_space_allocated + FROM dba_hist_snapshot s + , dba_hist_active_sess_history ash + , dba_users u + , dba_hist_service_name sn + , v$database d + , dba_procedures p1 + , dba_procedures p2 + WHERE d.dbid = s.dbid + AND s.dbid = ash.dbid + AND s.instance_number = ash.instance_number + and s.snap_id = ash.snap_id + AND ash.dbid = sn.dbid + and ash.service_hash = sn.service_name_hash + AND ash.user_id = u.user_id + AND ash.plsql_entry_object_id = p1.object_id (+) + AND ash.plsql_entry_subprogram_id = p1.subprogram_id (+) + AND ash.plsql_object_id = p2.object_id (+) + AND ash.plsql_subprogram_id = p2.subprogram_id (+) +-- and s.end_interval_time between TO_TIMESTAMP('2012-06-09 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-06-09 23:00:07','YYYY-MM-DD HH24:MI:SS') +--and ash.sample_time between TO_TIMESTAMP('2013-02-19 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2013-02-19 17:51:00','YYYY-MM-DD HH24:MI:SS') +AND ash.sample_time > SYSTIMESTAMP - 2/24 +-- AND ash.instance_number = '7' +-- AND ash.session_id = '1923' +-- AND ash.session_serial# = '12265' +-- and ash.service_hash = '1859414386' +-- and ash.sql_id like '1u585mt959ub3' +-- AND ash.top_level_sql_id LIKE '%' +-- and u.username like 'KQIU' +-- and upper(ash.machine) like upper('%beta%') +-- AND upper(sn.service_name) like upper('SYS$USERS') +-- and upper(ash.program) like upper('%SQL%') +-- and upper(ash.module) like upper('%PiNT%') +-- ORDER BY s.end_interval_time + ORDER BY ash.sample_time +; + + + +SELECT ash.sql_id + , ROUND(SUM(ash.tm_delta_time)/1000000) "Total Time (sec)" + , ROUND(SUM(ash.tm_delta_cpu_time)/1000000) "CPU Time (sec)" + , ROUND(SUM(ash.tm_delta_db_time)/1000000) "DB Time (sec)" + , ROUND(SUM(ash.delta_time)/1000000) "Time (sec)" + , SUM(ash.delta_read_io_requests) "PhyRead Requests" + , ROUND(SUM(ash.delta_read_io_bytes)/1024/1024/1024) "PhyRead (GB)" + , SUM(ash.delta_write_io_requests) "PhyWrite Requests" + , ROUND(SUM(ash.delta_write_io_bytes)/1024/1024/1024) "PhyWrite (GB)" + , ROUND(SUM(ash.delta_interconnect_io_bytes)/1024/1024/1024) "InterConnectIO (GB)" + , ROUND(SUM(ash.pga_allocated)/1024/1024) "PGA (MB)" + , ROUND(SUM(ash.temp_space_allocated)/1024/1024) "TempSpace (MB)" + FROM dba_hist_snapshot s + , dba_hist_active_sess_history ash + , dba_users u + , dba_hist_service_name sn + , v$database d + WHERE d.dbid = s.dbid + AND s.dbid = ash.dbid + AND s.instance_number = ash.instance_number + and s.snap_id = ash.snap_id + AND ash.dbid = sn.dbid + and ash.service_hash = sn.service_name_hash + AND ash.user_id = u.user_id +-- and s.end_interval_time between TO_TIMESTAMP('2012-06-09 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-06-09 23:00:07','YYYY-MM-DD HH24:MI:SS') +--and ash.sample_time between TO_TIMESTAMP('2013-02-19 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2013-02-19 17:51:00','YYYY-MM-DD HH24:MI:SS') +and ash.sample_time > systimestamp - 10 +-- AND ash.instance_number = '5' +-- AND ash.session_id = '2471' +-- AND ash.session_serial# = '38281' +-- and ash.service_hash = '1859414386' +-- and ash.sql_id like '9m4qqj5uzzn3k' +-- AND ash.top_level_sql_id LIKE '%' + and u.username like 'username' +-- and upper(ash.machine) like upper('%beta%') +-- AND upper(sn.service_name) like upper('SYS$USERS') +-- and upper(ash.program) like upper('%SQL%') +-- and upper(ash.module) like upper('%PiNT%') +GROUP BY ash.sql_id +-- ORDER BY SUM(ash.tm_delta_time) nulls last +-- ORDER BY SUM(ash.tm_delta_cpu_time) nulls last +-- ORDER BY SUM(ash.tm_delta_db_time) nulls last +-- ORDER BY SUM(ash.delta_time) nulls last +-- ORDER BY SUM(ash.delta_read_io_requests) nulls last +-- ORDER BY SUM(ash.delta_read_io_bytes) nulls last +-- ORDER BY SUM(ash.delta_write_io_requests) nulls last +-- ORDER BY SUM(ash.delta_write_io_bytes) nulls last +-- ORDER BY SUM(ash.delta_interconnect_io_bytes) nulls last +-- ORDER BY SUM(ash.pga_allocated) nulls last + ORDER BY SUM(ash.temp_space_allocated) desc nulls last +; + + + + + + + + + + +SELECT ash.sample_time + , ash.inst_id I# + , ash.session_id + , ash.session_serial# + , ash.session_type + , sn.name service_name + , u.username + , ash.machine + , ash.program + , ash.sql_opname + , ash.force_matching_signature + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.top_level_sql_id + , ash.sql_exec_start +-- , ash.plsql_entry_object_id +-- , ash.plsql_entry_subprogram_id +-- , ash.plsql_object_id +-- , ash.plsql_subprogram_id + , NVL2(p2.owner,p2.owner || '.' || p2.object_name || nvl2(p2.procedure_name,'.' || p2.procedure_name, ''),'') plsql_program + , NVL2(p1.owner, p1.owner || '.' || p1.object_name || nvl2(p1.procedure_name,'.' || p1.procedure_name, ''),'') plsql_entry_program + , ash.module + , ash.action + , ash.event + , ash.blocking_session_status + , ash.blocking_session + , ash.blocking_session_serial# + , ash.blocking_inst_id + , ash.blocking_hangchain_info + , ash.TM_DELTA_TIME + , ash.TM_DELTA_CPU_TIME + , ash.TM_DELTA_DB_TIME + , ash.DELTA_TIME + , ash.DELTA_READ_IO_REQUESTS + , ash.DELTA_WRITE_IO_REQUESTS + , ash.DELTA_READ_IO_BYTES + , ash.DELTA_WRITE_IO_BYTES + , ash.DELTA_INTERCONNECT_IO_BYTES + , ash.PGA_ALLOCATED + , ash.TEMP_SPACE_ALLOCATED + FROM gv$active_session_history ash + , dba_users u + , dba_services sn + , dba_procedures p1 + , dba_procedures p2 + WHERE ash.service_hash = sn.name_hash + AND ash.user_id = u.user_id + AND ash.plsql_entry_object_id = p1.object_id (+) + AND ash.plsql_entry_subprogram_id = p1.subprogram_id (+) + AND ash.plsql_object_id = p2.object_id (+) + AND ash.plsql_subprogram_id = p2.subprogram_id (+) +--and ash.sample_time between TO_TIMESTAMP('2012-09-18 23:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-09-19 15:00:00','YYYY-MM-DD HH24:MI:SS') +and ash.sample_time > systimestamp - 5/24 +-- AND ash.inst_id = '2' +-- AND ash.session_id = '1781' +-- AND ash.session_serial# = '12265' +-- and ash.service_hash = '1859414386' +-- and ash.sql_id like '9m4qqj5uzzn3k' +-- and ash.sql_id IS NOT NULL +-- AND ash.top_level_sql_id LIKE '0bxc9a7r0vczs' +-- and u.username like '%ATTRIB%' +-- and upper(ash.machine) like upper('%beta%') +-- AND upper(sn.name) like upper('SYS$USERS') -- service_name +-- and upper(ash.program) like upper('%SQL%') +-- and upper(ash.module) like upper('%PiNT%') +-- AND ash.inst_id = 3 +-- AND ash.SESSION_ID = 1057 +-- AND ash.SESSION_SERIAL# = 10989 +-- ORDER BY s.end_interval_time + ORDER BY ash.sample_time +; + + +------------------------------------------ +-- AWR ASH Largest TEMP and PGA Users +------------------------------------------ +SELECT service_name, username, max(temp_space_allocated), max(PGA_ALLOCATED) +FROM +( +SELECT ash.instance_number, ash.session_id, session_serial#, sn.service_name, u.username, max(NVL(temp_space_allocated,0)) temp_space_allocated, max(NVL(PGA_ALLOCATED,0)) PGA_ALLOCATED + FROM dba_hist_snapshot s + , dba_hist_active_sess_history ash + , dba_users u + , dba_hist_service_name sn + , v$database d + WHERE d.dbid = s.dbid + AND s.dbid = ash.dbid + AND s.instance_number = ash.instance_number + and s.snap_id = ash.snap_id + and s.end_interval_time between TO_TIMESTAMP('2012-04-01 00:04:25','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-05-03 00:49:30','YYYY-MM-DD HH24:MI:SS') + AND ash.dbid = sn.dbid + and ash.service_hash = sn.service_name_hash + AND ash.user_id = u.user_id +-- AND sn.service_name LIKE '%%' +-- and ash.sql_id = '7c3kd9m29awf8' +-- and ash.program = 'BumPlusCacheJob.exe' +group by ash.instance_number, ash.session_id,session_serial#, sn.service_name, u.username +) +GROUP BY service_name, username +order by max(temp_space_allocated) desc nulls last +--order by max(PGA_ALLOCATED) desc nulls last +; + + +select ash.instance_number + , ash.session_id + , ash.sql_id + , ash.SQL_PLAN_HASH_VALUE + , ash.SQL_EXEC_ID + , ash.sql_exec_start + , max(ash.sample_time) end_time + --, ROUNd(max(ash.wait_time)/100/60) "dur(min)" + , ( max(ash.sample_time) - ash.sql_exec_start) "Duration (D hh:mm:ss.fff)" + FROM dba_hist_snapshot s + , dba_hist_active_sess_history ash + , dba_users u + , dba_services sn + WHERE s.dbid = ash.dbid + AND s.instance_number = ash.instance_number + and s.snap_id = ash.snap_id + and s.end_interval_time between TO_TIMESTAMP('2012-04-01 00:04:25','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-05-03 00:49:30','YYYY-MM-DD HH24:MI:SS') + and ash.service_hash = '1859414386' + and ash.sql_id = '7c3kd9m29awf8' + and ash.program = 'BumPlusCacheJob.exe' +--ORDER BY ash.WAIT_TIME desc +group by ash.instance_number, ash.session_id + ,ash.sql_id,ash.SQL_PLAN_HASH_VALUE, ash.SQL_EXEC_ID, ash.sql_exec_start +order by ( max(ash.sample_time) - ash.sql_exec_start) desc nulls last + , ash.sql_exec_start desc nulls last + ; + + diff --git a/vg/awr_report.sql b/vg/awr_report.sql new file mode 100644 index 0000000..4ffbc26 --- /dev/null +++ b/vg/awr_report.sql @@ -0,0 +1,105 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Generate AWR Report for RAC +* Parameters : 1 - From Time ( YYYY-MM-DD HH24:MI:SS format) (Default = sysdate-1) +* 2 - To Time ( YYYY-MM-DD HH24:MI:SS format) (Default = sysdate) +* 3 - Instance ID List separated by comma( default value - All instances) +* 4 - Report Type ( text/html, default value - html) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 17-Feb-14 Vishal Gupta Changed order of input parameters +* 18-Oct-12 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE FROM_TIME +UNDEFINE TO_TIME +UNDEFINE REPORT_TYPE +UNDEFINE INST_ID_LIST +UNDEFINE begin_snap_id +UNDEFINE end_snap_id +--UNDEFINE DBID + +DEFINE FROM_TIME="&&1" +DEFINE TO_TIME="&&2" +DEFINE INST_ID_LIST="&&3" +DEFINE REPORT_TYPE="&&4" +DEFINE begin_snap_id="" +DEFINE end_snap_id="" +--DEFINE DBID="" + +COLUMN _FROM_TIME NEW_VALUE FROM_TIME NOPRINT +COLUMN _TO_TIME NEW_VALUE TO_TIME NOPRINT +COLUMN _INST_ID_LIST NEW_VALUE INST_ID_LIST NOPRINT +COLUMN _REPORT_TYPE NEW_VALUE REPORT_TYPE NOPRINT + +set term off +SELECT DECODE('&&FROM_TIME','',to_char(sysdate - 1 - (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIME') "_FROM_TIME" + , DECODE('&&TO_TIME','',to_char(sysdate + (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIME') "_TO_TIME" + , DECODE('&&INST_ID_LIST','',NULL,'&&INST_ID_LIST') "_INST_ID_LIST" + , DECODE('&&REPORT_TYPE','','html','&&REPORT_TYPE') "_REPORT_TYPE" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * A W R R E P O R T ( R A C ) +PROMPT * +PROMPT * Input Parameters +PROMPT * - From Timestamp = '&&FROM_TIME' ( YYYY-MM-DD HH24:MI:SS format) +PROMPT * - To Timestamp = '&&TO_TIME' ( YYYY-MM-DD HH24:MI:SS format) +PROMPT * - INST_ID_LIST = '&&INST_ID_LIST' +PROMPT * - Report Type = '&&REPORT_TYPE' +PROMPT *********************************************************************** + + +COLUMN _begin_snap_id NEW_VALUE begin_snap_id NOPRINT +COLUMN _end_snap_id NEW_VALUE end_snap_id NOPRINT +COLUMN _dbid NEW_VALUE dbid NOPRINT + +set term off +SELECT min(s.snap_id) "_begin_snap_id" + , max(s.snap_id) "_end_snap_id" + , d.dbid "_dbid" + FROM dba_hist_snapshot s, v$database d + WHERE d.dbid = s.dbid + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIME','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_time','YYYY-MM-DD HH24:MI:SS') +GROUP BY d.dbid +; +set term on + + +set pages 0 +set lines 1500 +PROMPT spooling to file &&_CONNECT_IDENTIFIER._awr_report.html +set term off +spool &&_CONNECT_IDENTIFIER._awr_report.html +SELECT * from table(dbms_workload_repository.awr_global_report_html + ( l_dbid => &&DBID + , l_inst_num => '&&INST_ID_LIST' + , l_bid => &&begin_snap_id + , l_eid => &&end_snap_id + , l_options => 1 -- Currently not used used (as of v11.2.0.3) + ) + ); +spool off +set term on +PROMPT report generated as &&_CONNECT_IDENTIFIER._awr_report.html file. +host &&_CONNECT_IDENTIFIER._awr_report.html + +set pages 5000 + +@@footer diff --git a/vg/awr_segstat.sql b/vg/awr_segstat.sql new file mode 100644 index 0000000..5198e55 --- /dev/null +++ b/vg/awr_segstat.sql @@ -0,0 +1,147 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display segment statistics from AWR +* Parameters : 1 - Number of Days +* 2 - Owner +* 3 - Object Name +* 4 - SubObject Name +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 14-Sep-12 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE no_of_days="&&1" +DEFINE owner="&&2" +DEFINE object_name="&&3" +DEFINE subobject_name="&&4" + +COLUMN _no_of_days NEW_VALUE no_of_days NOPRINT +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT DECODE('&&no_of_days','','30','&&no_of_days') "_no_of_days" + , DECODE('&&owner','','%',UPPER('&&owner')) "_owner" + , DECODE('&&object_name','','%',UPPER('&&object_name')) "_object_name" + , DECODE('&&subobject_name','','%',UPPER('&&subobject_name')) "_subobject_name" +FROM DUAL +; + +set term on + + +PROMPT ************************************************************************ +PROMPT * AWR Segment Statistics +PROMPT * +PROMPT * Input Parameters +PROMPT * - NoOfDays - "&&no_of_days" +PROMPT * - Owner - "&&owner" +PROMPT * - ObjectName - "&&object_name" +PROMPT * - SubObjectName - "&&subobject_name" +PROMPT ************************************************************************ + +COLUMN end_interval_time HEADING "SnapTime" FORMAT a15 +COLUMN object HEADING "Object" FORMAT a40 +COLUMN subobject_name HEADING "SubObject" FORMAT a25 +COLUMN object_type HEADING "ObjectType" FORMAT a20 +COLUMN tablespace_name HEADING "Tablespace|Name" FORMAT a15 +COLUMN partition_type HEADING "Partition|Type" FORMAT a10 + +COLUMN changes_delta HEADING "Changes|Delta|(MB)" FORMAT 999,999,999 +COLUMN used_delta HEADING "Used|Delta|(MB)" FORMAT 999,999,999 +COLUMN allocated_delta HEADING "Alloc|Delta|(MB)" FORMAT 999,999,999 +COLUMN itl_waits_delta HEADING "ITL|Waits|Delta" FORMAT 999,999,999 +COLUMN row_lock_waits_delta HEADING "Row|Lock|Waits|Delta" FORMAT 999,999,999 +COLUMN physical_reads_delta HEADING "Phy|Reads|Delta" FORMAT 999,999,999 +COLUMN physical_writes_delta HEADING "Phy|Write|Delta" FORMAT 999,999,999 +COLUMN physical_reads_direct_delta HEADING "Phy|Reads|Direct|Delta" FORMAT 999,999,999 +COLUMN physical_writes_direct_delta HEADING "Phy|Writes|Direct|Delta" FORMAT 999,999,999 +COLUMN gc_cr_blocks_served_delta HEADING "GC CR|Blocks|Served|Delta" FORMAT 999,999,999 +COLUMN gc_cu_blocks_served_delta HEADING "GC CU|Blocks|Served|Delta" FORMAT 999,999,999 +COLUMN gc_buffer_busy_delta HEADING "GC|Buffer|Busy|Delta" FORMAT 999,999,999 +COLUMN gc_cr_blocks_received_delta HEADING "GC CR|Blocks|Recvd|Delta" FORMAT 999,999,999 +COLUMN gc_cu_blocks_received_delta HEADING "GC CU|Blocks|Recvd|Delta" FORMAT 999,999,999 +COLUMN table_scans_delta HEADING "Table|Scans|Delta" FORMAT 999,999,999 +COLUMN chain_row_excess_delta HEADING "Chain|Row|Excess|Delta" FORMAT 999,999,999 +COLUMN physical_read_requests_delta HEADING "Phy|Read|Reqs|Delta" FORMAT 999,999,999 +COLUMN physical_write_requests_delta HEADING "Phy|Write|Reqs|Delta" FORMAT 999,999,999 +COLUMN optimized_physical_reads_delta HEADING "Opt'z|Phy|Reads||Delta" FORMAT 999,999,999 + +COLUMN changes_total HEADING "Changes|Total|(MB)" FORMAT 999,999,999 +COLUMN used_total HEADING "Used|Total|(MB)" FORMAT 999,999,999 +COLUMN allocated_total HEADING "Alloc|Total|(MB)" FORMAT 999,999,999 +COLUMN itl_waits_total HEADING "ITL|Waits|Total" FORMAT 999,999,999,999 + +set lines 4000 + +SELECT /*+ parallel(8) */ + to_char(TRUNC(s.end_interval_time,'MI'),'DD-MON-YY HH24:MI') end_interval_time + --, o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name,'') object + , o.owner || '.' || o.object_name object + --, o.subobject_name + --, o.object_type + --, o.tablespace_name + --, o.partition_type + , ROUND(SUM(ss.db_block_changes_delta * p.value)/1024/1024) changes_delta + , ROUND(SUM(ss.space_used_delta )/1024/1024) used_delta + , ROUND(SUM(ss.space_allocated_delta )/1024/1024) allocated_delta + , ROUND(SUM(ss.itl_waits_delta )) itl_waits_delta + , ROUND(SUM(ss.row_lock_waits_delta )) row_lock_waits_delta + , ROUND(SUM(ss.physical_reads_delta )) physical_reads_delta + , ROUND(SUM(ss.physical_writes_delta )) physical_writes_delta + , ROUND(SUM(ss.physical_reads_direct_delta )) physical_reads_direct_delta + , ROUND(SUM(ss.physical_writes_direct_delta )) physical_writes_direct_delta +-- , ROUND(SUM(ss.gc_cr_blocks_served_delta )) gc_cr_blocks_served_delta +-- , ROUND(SUM(ss.gc_cu_blocks_served_delta )) gc_cu_blocks_served_delta + , ROUND(SUM(ss.gc_buffer_busy_delta )) gc_buffer_busy_delta + , ROUND(SUM(ss.gc_cr_blocks_received_delta )) gc_cr_blocks_received_delta + , ROUND(SUM(ss.gc_cu_blocks_received_delta )) gc_cu_blocks_received_delta + , ROUND(SUM(ss.table_scans_delta )) table_scans_delta + , ROUND(SUM(ss.chain_row_excess_delta )) chain_row_excess_delta + , ROUND(SUM(ss.physical_read_requests_delta )) physical_read_requests_delta + , ROUND(SUM(ss.physical_write_requests_delta )) physical_write_requests_delta + , ROUND(SUM(ss.optimized_physical_reads_delta )) optimized_physical_reads_delta + +-- , ROUND(MAX(ss.db_block_changes_total * p.value)/1024/1024) changes_total +-- , ROUND(MAX(ss.space_used_total )/1024/1024) used_total +-- , ROUND(MAX(ss.space_allocated_total )/1024/1024) allocated_total +-- , ROUND(SUM(ss.itl_waits_total )) itl_waits_total +FROM v$database d + JOIN dba_hist_snapshot s ON d.dbid = s.dbid + JOIN sys.WRH$_SEG_STAT ss ON s.dbid = ss.dbid + AND s.instance_number = ss.instance_number + AND s.snap_id = ss.snap_id + JOIN v$system_parameter p ON p.name = 'db_block_size' + JOIN dba_hist_seg_stat_obj o ON o.dbid = ss.dbid + AND o.ts# = ss.ts# + AND o.obj# = ss.obj# + AND o.dataobj# = ss.dataobj# +WHERE s.end_interval_time > systimestamp - INTERVAL '&&no_of_days' DAY + AND o.owner LIKE '&&owner' ESCAPE '\' + AND o.object_name LIKE '&&object_name' ESCAPE '\' + AND NVL(o.subobject_name,'x') LIKE '&&subobject_name' ESCAPE '\' +GROUP BY ss.dbid + , TRUNC(s.end_interval_time,'MI') + --, o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name,'') + , o.owner || '.' || o.object_name + --, o.subobject_name + --, o.object_type + --, o.tablespace_name + --, o.partition_type +ORDER BY TRUNC(s.end_interval_time,'MI') +; + +@@footer diff --git a/vg/awr_service_stats.sql b/vg/awr_service_stats.sql new file mode 100644 index 0000000..bdcfc9e --- /dev/null +++ b/vg/awr_service_stats.sql @@ -0,0 +1,152 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Service statistics from AWR +* Parameters : 1 - Statistic Name (Use % as wildcard, escape with \) +* 2 - SERVICE_NAME (Use % as wildcard, escape with \) +* 3 - From timestamp (YYYY-MM-DD HH24:MI:SS format, Default value sysdate - 2 hours) +* 4 - To timstamp (YYYY-MM-DD HH24:MI:SS format, Default value sysdate) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 19-Mar-12 Vishal Gupta Intial version +* 15-May-12 Vishal Gupta Change from/to relative hours to absolute timestamp +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE service_name +UNDEFINE stat_name +UNDEFINE from_timestamp +UNDEFINE to_timestamp + +DEFINE stat_name="&&1" +DEFINE service_name="&&2" +DEFINE from_timestamp="&&3" +DEFINE to_timestamp="&&4" + +set term off +COLUMN _stat_name NEW_VALUE stat_name NOPRINT +COLUMN _service_name NEW_VALUE service_name NOPRINT +COLUMN _from_timestamp NEW_VALUE from_timestamp NOPRINT +COLUMN _to_timestamp NEW_VALUE to_timestamp NOPRINT + +SELECT UPPER(DECODE('&&stat_name','','physical reads','&&stat_name')) "_stat_name" + , UPPER(DECODE('&&service_name','','%','&&service_name')) "_service_name" + , UPPER(DECODE('&&from_timestamp','',TO_CHAR(sysdate - 120/(24*60),'YYYY-MM-DD HH24:MI:SS'),'&&from_timestamp')) "_from_timestamp" + , UPPER(DECODE('&&to_timestamp','',TO_CHAR(sysdate ,'YYYY-MM-DD HH24:MI:SS'),'&&to_timestamp')) "_to_timestamp" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +DEFINE FORMAT=999,999,999 +DEFINE DIVIDER="1" +DEFINE HEADING="#s" +--DEFINE DIVIDER="1000" +--DEFINE HEADING="#1000s" +--DEFINE DIVIDER="1000000" +--DEFINE HEADING="#1000000s" + +DEFINE TOTAL_FORMAT=999,999,999,999 +DEFINE TOTAL_HEADING="#1000s" + + +PROMPT *************************************************************************************************** +PROMPT * AWR Service Statistics (Delta) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Service Name = '&&service_name' +PROMPT * - Statistic Name = '&&stat_name' +PROMPT * - From Timestamp = '&&from_timestamp' +PROMPT * - To Timestamp = '&&to_timestamp' +PROMPT *************************************************************************************************** + + +COLUMN end_interval_time HEADING "SnapTime" FORMAT a15 +COLUMN service_name HEADING "ServiceName" FORMAT a25 +COLUMN stat_name HEADING "StatisticName" FORMAT a25 +COLUMN value_clusterwide HEADING "RAC Wide|Value|(&&TOTAL_HEADING)" FORMAT &&TOTAL_FORMAT +COLUMN value_inst1 HEADING "Inst 1|Value|(&&HEADING)" FORMAT &&FORMAT +COLUMN value_inst2 HEADING "Inst 2|Value|(&&HEADING)" FORMAT &&FORMAT +COLUMN value_inst3 HEADING "Inst 3|Value|(&&HEADING)" FORMAT &&FORMAT +COLUMN value_inst4 HEADING "Inst 4|Value|(&&HEADING)" FORMAT &&FORMAT +COLUMN value_inst5 HEADING "Inst 5|Value|(&&HEADING)" FORMAT &&FORMAT +COLUMN value_inst6 HEADING "Inst 6|Value|(&&HEADING)" FORMAT &&FORMAT +COLUMN value_inst7 HEADING "Inst 7|Value|(&&HEADING)" FORMAT &&FORMAT +COLUMN value_inst8 HEADING "Inst 8|Value|(&&HEADING)" FORMAT &&FORMAT + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF value_clusterwide FORMAT &&TOTAL_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF value_inst1 FORMAT &&TOTAL_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF value_inst2 FORMAT &&TOTAL_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF value_inst3 FORMAT &&TOTAL_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF value_inst4 FORMAT &&TOTAL_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF value_inst5 FORMAT &&TOTAL_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF value_inst6 FORMAT &&TOTAL_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF value_inst7 FORMAT &&TOTAL_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF value_inst8 FORMAT &&TOTAL_FORMAT ON REPORT + +WITH snap as +( + SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER(PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE d.dbid = s.dbid + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') +) +SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , ss.service_name + , ss.stat_name + , SUM( ss.value-LEAST(ss_prev.value,ss.value))/&&DIVIDER value_clusterwide + , SUM(DECODE(ss.instance_number, 1, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst1 + , SUM(DECODE(ss.instance_number, 2, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst2 + , SUM(DECODE(ss.instance_number, 3, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst3 + , SUM(DECODE(ss.instance_number, 4, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst4 + , SUM(DECODE(ss.instance_number, 5, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst5 + , SUM(DECODE(ss.instance_number, 6, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst6 + , SUM(DECODE(ss.instance_number, 7, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst7 + , SUM(DECODE(ss.instance_number, 8, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst8 +FROM snap s + , dba_hist_service_stat ss + , dba_hist_service_stat ss_prev +WHERE s.dbid = ss.dbid +AND s.instance_number = ss.instance_number +AND s.snap_id = ss.snap_id +AND s.dbid = ss_prev.dbid +AND s.instance_number = ss_prev.instance_number +AND s.prev_snap_id = ss_prev.snap_id +AND ss.service_name = ss_prev.service_name +AND ss.stat_name = ss_prev.stat_name +AND UPPER(ss.service_name) LIKE UPPER('&&service_name') ESCAPE '\' +AND UPPER(ss.stat_name) LIKE UPPER('&&stat_name') ESCAPE '\' +GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') + , ss.service_name + , ss.stat_name +ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') + , ss.service_name + , ss.stat_name + ; + +UNDEFINE service_name +UNDEFINE stat_name +UNDEFINE from_timestamp +UNDEFINE to_timestamp + + +@@footer diff --git a/vg/awr_service_waits.sql b/vg/awr_service_waits.sql new file mode 100644 index 0000000..4553737 --- /dev/null +++ b/vg/awr_service_waits.sql @@ -0,0 +1,143 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Service Waits from AWR +* Parameters : 1 - SERVICE_NAME (Use % as wildcard, escape with \) +* 2 - Instance (Use % for all instances in the RAC database) +* 3 - From timestamp (YYYY-MM-DD HH24:MI:SS format) +* 4 - To timstamp (YYYY-MM-DD HH24:MI:SS format) +* +* Wait Classes are as follows:- +* Concurrency +* User I/O +* System I/O +* Administrative +* Other +* Configuration +* Scheduler +* Cluster +* Application +* Queueing +* Idle +* Network +* Commit +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 17-May-12 Vishal Gupta Intial version +* +*/ + + +DEFINE service_name="&&1" +DEFINE instance_number="&2" +DEFINE from_timestamp="&3" +DEFINE to_timestamp="&4" + +DEFINE COUNT_FORMAT=999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="(#)" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE TIME_FORMAT=999,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="1000" +--DEFINE TIME_HEADING="1000s" + + +DEFINE TOTAL_FORMAT=999,999,999,999 +DEFINE TOTAL_DIVIDER="1000" +DEFINE TOTAL_HEADING="'1000" + +COLUMN end_interval_time HEADING "SnapTime" FORMAT a15 +COLUMN service_name HEADING "ServiceName" FORMAT a25 + +COLUMN Concurrency_total_waits HEADING "Concurr|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN user_io_total_waits HEADING "UserIO|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN system_io_total_waits HEADING "SystemIO|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN application_total_waits HEADING "App|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN network_total_waits HEADING "Network|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN commit_total_waits HEADING "Commit|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN idle_total_waits HEADING "Idle|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN cluster_total_waits HEADING "Cluster|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN scheduler_total_waits HEADING "Scheduler|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN Concurrency_time_waited HEADING "Concurr|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN user_io_time_waited HEADING "UserIO|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN system_io_time_waited HEADING "SystemIO|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN application_time_waited HEADING "App|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN network_time_waited HEADING "Network|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN commit_time_waited HEADING "Commit|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN idle_time_waited HEADING "Idle|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN cluster_time_waited HEADING "Cluster|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN scheduler_time_waited HEADING "Scheduler|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT + + + +WITH snap as +( + SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER(PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + WHERE s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') +) +SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , swc.service_name + -- Total Waits in centisecs + , SUM(DECODE(swc.wait_class, 'Concurrency', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER Concurrency_total_waits + , SUM(DECODE(swc.wait_class, 'User I/O', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER user_io_total_waits + , SUM(DECODE(swc.wait_class, 'System I/O', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER system_io_total_waits + , SUM(DECODE(swc.wait_class, 'Application', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER application_total_waits + , SUM(DECODE(swc.wait_class, 'Network', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER network_total_waits + , SUM(DECODE(swc.wait_class, 'Commit', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER commit_total_waits + , SUM(DECODE(swc.wait_class, 'Idle', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER idle_total_waits + , SUM(DECODE(swc.wait_class, 'Cluster', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER cluster_total_waits + , SUM(DECODE(swc.wait_class, 'Scheduler', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER scheduler_total_waits + -- Time Waited in centisecs + , SUM(DECODE(swc.wait_class, 'Concurrency', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER Concurrency_time_waited + , SUM(DECODE(swc.wait_class, 'User I/O', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER user_io_time_waited + , SUM(DECODE(swc.wait_class, 'System I/O', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER system_io_time_waited + , SUM(DECODE(swc.wait_class, 'Application', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER application_time_waited + , SUM(DECODE(swc.wait_class, 'Network', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER network_time_waited + , SUM(DECODE(swc.wait_class, 'Commit', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER commit_time_waited + , SUM(DECODE(swc.wait_class, 'Idle', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER idle_time_waited + , SUM(DECODE(swc.wait_class, 'Cluster', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER cluster_time_waited + , SUM(DECODE(swc.wait_class, 'Scheduler', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER scheduler_time_waited +FROM snap s + , dba_hist_service_wait_class swc + , dba_hist_service_wait_class swc_prev +WHERE s.dbid = swc.dbid +AND s.instance_number = swc.instance_number +AND s.snap_id = swc.snap_id +AND s.dbid = swc_prev.dbid +AND s.instance_number = swc_prev.instance_number +AND s.prev_snap_id = swc_prev.snap_id +AND swc.service_name = swc_prev.service_name +AND swc.wait_class = swc_prev.wait_class +AND UPPER(swc.service_name) LIKE UPPER('&&service_name') ESCAPE '\' +AND swc.instance_number LIKE '&&instance_number' +GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') + , swc.service_name +ORDER BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') + , swc.service_name + ; + + PROMPT '&&from_timestamp' + +UNDEFINE service_name +UNDEFINE instance_number +UNDEFINE from_timestamp +UNDEFINE to_timestamp + + +@@footer diff --git a/vg/awr_sga_sizedetails.sql b/vg/awr_sga_sizedetails.sql new file mode 100644 index 0000000..1bbbb91 --- /dev/null +++ b/vg/awr_sga_sizedetails.sql @@ -0,0 +1,21 @@ +@@header + +SELECT TO_CHAR(A.END_INTERVAL_TIME,'DD-Mon-YY HH24:MI:SS') "Time" + , ROUND(sum(b.bytes)/1024/1024) total + , ROUND(sum(DECODE(b.pool,null, DECODE(b.name,'buffer_cache',b.bytes,0),0))/1024/1024) buffercache + , ROUND(sum(DECODE(b.pool,'shared pool', b.bytes,0))/1024/1024) sharedpooltotal + , ROUND(sum(DECODE(b.name,'free memory',b.bytes,0))/1024/1024) sharedpoolfree + , ROUND(sum(DECODE(b.pool,'java pool', b.bytes,0))/1024/1024) javapool + , ROUND(sum(DECODE(b.pool,'large pool', b.bytes,0))/1024/1024) largepool + , ROUND(sum(DECODE(b.pool,'streams pool', b.bytes,0))/1024/1024) streamspool + , ROUND(sum(DECODE(b.pool,null, DECODE(b.name,'fixed_sga',b.bytes,0),0))/1024/1024) fixedsga + , ROUND(sum(DECODE(b.pool,null, DECODE(b.name,'log_buffer',b.bytes,0),0))/1024/1024) logbuffer +FROM v$database d + JOIN DBA_HIST_SNAPSHOT A ON A.DBID = d.DBID + JOIN DBA_HIST_SGAstat B ON A.DBID = B.DBID AND A.INSTANCE_NUMBER = B.INSTANCE_NUMBER AND A.SNAP_ID = B.SNAP_ID +WHERE 1=1 +and a.END_INTERVAL_TIME > sysdate - 3 +group by a.end_interval_time +ORDER BY a.end_interval_time ASC; + +@@footer diff --git a/vg/awr_sid_details.sql b/vg/awr_sid_details.sql new file mode 100644 index 0000000..09c0c35 --- /dev/null +++ b/vg/awr_sid_details.sql @@ -0,0 +1,116 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session details from AWR ASH data +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* 3 - Serial# (Default %) +* 4 - Number of hours (Default 24) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 31-Dec-15 Vishal Gupta Added duration in the output +* 03-FEB-14 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE SID +UNDEFINE INST_ID +UNDEFINE SERIAL +UNDEFINE HOURS + +DEFINE SID="&&1" +DEFINE INST_ID="&&2" +DEFINE SERIAL="&&3" +DEFINE HOURS="&&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN _SID NEW_VALUE SID NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT +COLUMN _HOURS NEW_VALUE HOURS NOPRINT + +set term off +SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID" + , DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID" + , DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL" + , DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS" +FROM DUAL; +set term on +/***********************************/ + + +PROMPT *************************************************** +PROMPT * AWR ASH Session Details +PROMPT * +PROMPT * Input Parameter: +PROMPT * SID = "&&SID" +PROMPT * Instance ID = "&&INST_ID" +PROMPT * Serial# = "&&SERIAL" +PROMPT * Number of Hours = "&&HOURS" +PROMPT * WhereClause = "&&WHERECLAUSE" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN sample_time_min FORMAT a18 +COLUMN sample_time_max FORMAT a18 +COLUMN duration FORMAT a12 +COLUMN username HEADING "DBUser" FORMAT a18 +COLUMN service_name HEADING "ServiceName" FORMAT a21 +COLUMN program HEADING "Program" FORMAT a25 TRUNCATE +COLUMN machine HEADING "Machine" FORMAT a25 + +-- Get the SQL Statements from ASH +SELECT /*+ parallel(ash, 10) */ + --ash.sql_exec_id, + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.instance_number) instance_number + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max + , SUBSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+') + ,1,INSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+'),'.')-1 + ) duration + , u.username + , s.name service_name + , NVL(ash_parent.program,ash.program) program + , ash.machine + FROM dba_hist_active_sess_history ash + JOIN dba_users u ON u.user_id = ash.user_id + JOIN dba_services s ON s.name_hash = ash.service_hash + LEFT OUTER JOIN dba_hist_active_sess_history ash_parent + ON ash_parent.instance_number = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + WHERE NVL(ash.qc_instance_id,ash.instance_number) LIKE '&&INST_ID' + AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID' + AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL' + AND ash.sample_time > sysdate - (&&HOURS/24) + AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24)) + &&WHERECLAUSE +GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.instance_number) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , u.username + , s.name + , NVL(ash_parent.program,ash.program) + , ash.machine +ORDER BY MIN(ash.sample_time) ASC + , max(ash.sample_time) asc +; + + +@@footer diff --git a/vg/awr_sid_events.sql b/vg/awr_sid_events.sql new file mode 100644 index 0000000..f64205b --- /dev/null +++ b/vg/awr_sid_events.sql @@ -0,0 +1,122 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session's events from ASH +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* 3 - Serial# (Default %) +* 4 - Number of hours (Default 24) +* 5 - WhereClause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-MAY-14 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE SID +UNDEFINE INST_ID +UNDEFINE SERIAL +UNDEFINE HOURS +UNDEFINE SQL_ID +UNDEFINE WHERECLAUSE + +DEFINE SID="&&1" +DEFINE INST_ID="&&2" +DEFINE SERIAL="&&3" +DEFINE HOURS="&&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN _SID NEW_VALUE SID NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT +COLUMN _HOURS NEW_VALUE HOURS NOPRINT + +set term off +SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID" + , DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID" + , DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL" + , DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS" +FROM DUAL; +set term on +/***********************************/ + + +PROMPT *************************************************** +PROMPT * AWR ASH Session Events +PROMPT * +PROMPT * Input Parameter: +PROMPT * SID = "&&SID" +PROMPT * Instance ID = "&&INST_ID" +PROMPT * Serial# = "&&SERIAL" +PROMPT * Number of Hours = "&&HOURS" +PROMPT * Where Clause = "&&WHERECLAUSE" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a20 +COLUMN sql_exec_end FORMAT a20 +COLUMN duration FORMAT a15 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a15 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN event HEADING "Event" FORMAT a40 TRUNCATE +COLUMN event_count HEADING "EventCount" FORMAT 99999999999 + +BREAK ON session_id ON inst_id ON session_serial# ON sql_exec_start ON sql_opname ON sql_id ON sql_child_number ON sql_plan_hash_value + +-- Get the session events from ASH +SELECT /*+ parallel(ash, 10) */ + --ash.sql_exec_id, + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.instance_number) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , count(1) event_count + , ash.event + FROM dba_hist_active_sess_history ash + WHERE ash.sql_id IS NOT NULL + AND NVL(ash.qc_instance_id,ash.instance_number) LIKE '&&INST_ID' + AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID' + AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL' + AND ash.sample_time > sysdate - (&&HOURS/24) + AND ash.sql_exec_id IS NOT NULL + &&WHERECLAUSE + GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.instance_number) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.force_matching_signature + , ash.event + ORDER BY --max(ash.sample_time) asc + --, + NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC + , ash.sql_id + , count(1) desc +; + + +@@footer diff --git a/vg/awr_sid_sqlids.sql b/vg/awr_sid_sqlids.sql new file mode 100644 index 0000000..a48a55c --- /dev/null +++ b/vg/awr_sid_sqlids.sql @@ -0,0 +1,170 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session's SQL IDs from AWR +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* 3 - Serial# (Default %) +* 4 - Number of hours (Default 24) +* 5 - SQL_ID (Default %) +* 6 - WhereClause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 31-DEC-15 Vishal Gupta Change logic of query to start with parent session to optimize performance +* 28-JAN-14 Vishal Gupta Added grand parent logic +* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parameter +* 28-Jun-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE SID +UNDEFINE INST_ID +UNDEFINE SERIAL +UNDEFINE HOURS +UNDEFINE SQL_ID +UNDEFINE WHERECLAUSE +UNDEFINE WHERECLAUSE2 +UNDEFINE HAVINGCLAUSE + +DEFINE SID="&&1" +DEFINE INST_ID="&&2" +DEFINE SERIAL="&&3" +DEFINE HOURS="&&4" +DEFINE SQL_ID="&&5" +DEFINE WHERECLAUSE="&&6" +DEFINE WHERECLAUSE2="&&7" +DEFINE HAVINGCLAUSE="&&8" + +COLUMN _SID NEW_VALUE SID NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT +COLUMN _HOURS NEW_VALUE HOURS NOPRINT +COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT + +set term off +SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID" + , DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID" + , DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL" + , DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS" + , DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID" +FROM DUAL; +set term on +/***********************************/ + + +PROMPT *************************************************** +PROMPT * AWR - ASH SQL Ids +PROMPT * +PROMPT * Input Parameter: +PROMPT * SID = "&&SID" +PROMPT * Instance ID = "&&INST_ID" +PROMPT * Serial# = "&&SERIAL" +PROMPT * Number of Hours = "&&HOURS" +PROMPT * SQL Id = "&&SQL_ID" +PROMPT * Where Clause = "&&WHERECLAUSE" +PROMPT * Where Clause2 = "&&WHERECLAUSE2" +PROMPT * Having Clause = "&&HAVINGCLAUSE" +PROMPT *************************************************** + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a18 +COLUMN sql_exec_end FORMAT a18 +COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN phyread_requests HEADING "Phy|Read|Reqs|(#1000)" FORMAT 999999 +COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(#1000)" FORMAT 999999 +COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999 +COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999 +COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999 +COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 999.00 +COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 9999.00 + + +-- Get the SQL Statements from ASH +SELECT /*+ parallel(ash,8) parallel(ash_child,8) */ + decode(ash_child.qc_session_id, 0, ash_child.session_id, ash.session_id) session_id + , decode(ash_child.qc_session_id, 0, ash_child.instance_number, ash.instance_number) instance_number + , decode(ash_child.qc_session_id, 0, ash_child.session_serial#, ash.session_serial#) session_serial# +&&_IF_ORA_11gR1_OR_HIGHER , TO_CHAR(NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))),'DD-MON-YY HH24:MI:SS') sql_exec_start + , TO_CHAR(max(NVL(ash_child.sample_time,ash.sample_time)) ,'DD-MON-YY HH24:MI:SS') sql_exec_end + , SUBSTR(REPLACE( max(NVL(ash_child.sample_time,ash.sample_time)) - NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))) ,'+00000000','+') + ,1,INSTR(REPLACE( max(NVL(ash_child.sample_time,ash.sample_time)) - NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))),'+00000000','+'),'.')-1 + ) duration +--&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value +&&_IF_ORA_11202_OR_HIGHER , max(trunc(NVL(ash_child.px_flags,ash.px_flags) / 2097152)) current_dop + , ash.force_matching_signature +&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash.top_level_sql_id,ash_child.top_level_sql_id) top_level_sql_id +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_read_io_requests,0) + NVL(ash_child.delta_read_io_requests,0) )/power(1000,1)) phyread_requests +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_write_io_requests,0) + NVL(ash_child.delta_write_io_requests,0) )/power(1000,1)) phywrite_requests +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_read_io_bytes,0) + NVL(ash_child.delta_read_io_bytes,0) )/power(1024,3)) phyread +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_write_io_bytes,0) + NVL(ash_child.delta_write_io_bytes,0) )/power(1024,3)) phywrite +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_interconnect_io_bytes,0) + NVL(ash_child.delta_interconnect_io_bytes,0) )/power(1024,3)) interconnect_io +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(NVL(ash.pga_allocated,0) + NVL(ash_child.pga_allocated,0) )/power(1024,3),2) pga_allocated +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(NVL(ash.temp_space_allocated,0) + NVL(ash_child.temp_space_allocated,0) )/power(1024,3),2) temp_space_allocated + FROM v$database d + JOIN sys.wrh$_active_session_history ash + ON ash.dbid = d.dbid + AND ash.instance_number LIKE '&&INST_ID' + AND ash.session_id LIKE '&&SID' + AND ash.session_serial# LIKE '&&SERIAL' + AND ash.sql_id LIKE '&&SQL_ID' + AND ash.sample_time > sysdate - (&&HOURS/24) + &&WHERECLAUSE + LEFT OUTER JOIN sys.wrh$_active_session_history ash_child + ON ash_child.dbid = ash.dbid + AND ash_child.qc_instance_id = ash.instance_number + AND ash_child.qc_session_id = ash.session_id + AND ash_child.qc_session_serial# = ash.session_serial# + AND ash_child.qc_session_id <> 0 +&&_IF_ORA_11gR1_OR_HIGHER AND ash_child.sql_exec_start = ash.sql_exec_start + AND ash_child.sample_time > sysdate - (&&HOURS/24) + AND ash_child.qc_instance_id LIKE '&&INST_ID' + AND ash_child.qc_session_id LIKE '&&SID' + AND ash_child.qc_session_serial# LIKE '&&SERIAL' + AND ash_child.sql_id LIKE '&&SQL_ID' + &&WHERECLAUSE2 +GROUP BY decode(ash_child.qc_session_id, 0, ash_child.session_id, ash.session_id) + , decode(ash_child.qc_session_id, 0, ash_child.instance_number, ash.instance_number) + , decode(ash_child.qc_session_id, 0, ash_child.session_serial#, ash.session_serial#) +&&_IF_ORA_11gR1_OR_HIGHER , ash.sql_exec_id +&&_IF_ORA_11gR1_OR_HIGHER , ash.sql_exec_start +--&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.force_matching_signature +&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash.top_level_sql_id,ash_child.top_level_sql_id) + &&HAVINGCLAUSE + --having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 20 -- Physical Read + Write GBs + --having (SUM(ash.delta_read_io_bytes) ) / power(1024,3) > 100 -- Physical Write GBs + --having (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 100 -- Interconnect IO GBs + --having (SUM(ash.pga_allocated) ) / power(1024,3) > 2 -- PGA GBs + --having (SUM(ash.temp_space_allocated) ) / power(1024,3) > 10 -- Temp Space GBs +ORDER BY + max(ash.sample_time) asc +&&_IF_ORA_11gR1_OR_HIGHER, NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))) ASC +; + + +@@footer diff --git a/vg/awr_signature_stats_delta.sql b/vg/awr_signature_stats_delta.sql new file mode 100644 index 0000000..a23573b --- /dev/null +++ b/vg/awr_signature_stats_delta.sql @@ -0,0 +1,189 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats from AWR +* Version : 10.1.0.4 and above +* Parameters : 1 - SQL_ID (Use % as wildcard) +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Number of Days (Default 7 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable +* 09-Oct-12 Vishal Gupta Removed the instance_number from output and +* aggregated stats for all instances in output. +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE force_matching_signature +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE whereclause + + +DEFINE force_matching_signature="&&1" +DEFINE plan_hash_value="&&2" +DEFINE days="&&3" +DEFINE whereclause="&&4" + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _days NEW_VALUE days NOPRINT + +set term off +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&days','','7','&&days') "_days" +FROM DUAL; +set term on + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=99,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" +--DEFINE COUNT_SMALL_DIVIDER="1000000" +--DEFINE COUNT_SMALL_HEADING="#mill" + + +DEFINE COUNT_FORMAT=999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" +--DEFINE COUNT_DIVIDER="1000000" +--DEFINE COUNT_HEADING="million" + +DEFINE BYTES_FORMAT=999,999 +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" + + +Prompt +Prompt *************************************************************************************************** +Prompt * AWR SQL Executions Statistics (Delta) - By FORCE_MATCHING_SIGNATURE +PROMPT * +PROMPT * Input Parameters +PROMPT * - Force Matching Signature = '&&force_matching_signature' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt *************************************************************************************************** + + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN force_matching_signature HEADING "Force|Matching|Signature" FORMAT 99999999999999999999 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta" FORMAT 999 +COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + SELECT TO_CHAR(MAX(s.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time + , ss.force_matching_signature + , ss.plan_hash_value + , ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta + , ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta + , ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta + , ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta + , ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta + , ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta + , ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta + , '|' seperator + , SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta +--&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta) px_servers_execs_delta + -- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta + , SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta + , SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta + , SUM(ss.buffer_gets_delta)/&&COUNT_DIVIDER buffer_gets_delta + , SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta + , ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta + , '|' seperator +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta + , '|' seperator + --, ss.sql_profile + from dba_hist_sqlstat ss + , dba_hist_snapshot s + , v$database d + , v$system_parameter p + where p.name = 'db_block_size' + AND ss.instance_number = s.instance_number + AND ss.dbid = s.dbid + AND ss.snap_id = s.snap_id + AND ss.dbid = d.dbid + AND s.end_interval_time > SYSDATE - &&days + AND ss.force_matching_signature LIKE '&&force_matching_signature' + AND ss.plan_hash_value LIKE '&&plan_hash_value' + --AND ss.executions_delta > 0 + &&whereclause + GROUP BY ss.dbid + , ss.snap_id + , ss.force_matching_signature + , ss.plan_hash_value + --, ss.sql_profile + ORDER BY TO_CHAR(MAX(s.end_interval_time),'YYYY-MM-DD HH24:MI') + , ss.force_matching_signature + , ss.plan_hash_value + --, ss.sql_profile +; + +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE force_matching_signature +UNDEFINE whereclause + + +@@footer diff --git a/vg/awr_sql_binds.sql b/vg/awr_sql_binds.sql new file mode 100644 index 0000000..c54211e --- /dev/null +++ b/vg/awr_sql_binds.sql @@ -0,0 +1,133 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Binds from AWR +* Version : 10.2 and above +* Parameters : 1 - SQL_ID +* 2 - Number of Days (Default 7 days) +* 2 - Whereclause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Aug-15 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE days +UNDEFINE whereclause +UNDEFINE force_matching_signature +UNDEFINE use_force_matching_signature + +DEFINE sql_id="&&1" +DEFINE days="&&2" +DEFINE whereclause="&&3" +DEFINE force_matching_signature="" + +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&days','','7','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL +; + +set term on + + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from v$database d + , dba_hist_sqlstat ss2 + where d.dbid = ss2.dbid + AND ss2.sql_id = '&&sql_id' and rownum = 1; + +select CASE WHEN '&&force_matching_signature' IS NULL THEN '0' + WHEN '&&force_matching_signature' = '' THEN '0' + ELSE '&&force_matching_signature' + END "_force_matching_signature" + from dual +; + +set term on + +/************************************/ + +Prompt +Prompt ************************************************************** +Prompt * AWR SQL Bind Values +Prompt * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt ************************************************************** + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN bind_values HEADING "Bind Values" FORMAT a100 +COLUMN bind_datatype HEADING "Bind DataType" FORMAT a80 + +SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , ss.instance_number + , ss.sql_id + , ss.plan_hash_value + , (select listagg(NVL(name,':B' || position) + ||'[' + || datatype_string || NVL2(scale + ,'(' || scale || NVL2(precision,','|| precision,'') || ')' + ,'' + ) + || ']' + ||'=' + || CASE + WHEN datatype_string <> 'TIMESTAMP' THEN NVL(value_string,'NULL') + ELSE TO_CHAR(ANYDATA.ACCESStimestamp(VALUE_ANYDATA)) + END + ,',' + ) WITHIN GROUP (order by position) + from table(dbms_sqltune.extract_binds(ss.BIND_DATA)) + ) bind_values +/* + , (select listagg(NVL(name,':B' || position) || '=' + || datatype_string || NVL2(scale,'(' || scale || NVL2(precision,','|| precision, '') || ')' ,'' ) + ,',' + ) WITHIN GROUP (order by position) + from table(dbms_sqltune.extract_binds(ss.BIND_DATA)) + ) bind_datatype +*/ + from v$database d + JOIN dba_hist_snapshot s ON s.dbid = d.dbid + JOIN dba_hist_sqlstat ss ON ss.dbid = s.dbid AND ss.instance_number = s.instance_number AND ss.snap_id = s.snap_id + AND ss.executions_delta > 0 + where s.end_interval_time > SYSDATE - &&days + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature = '&&force_matching_signature' + &&whereclause +ORDER BY s.end_interval_time + , ss.instance_number +; + + +@@footer diff --git a/vg/awr_sql_hints.sql b/vg/awr_sql_hints.sql new file mode 100644 index 0000000..02008aa --- /dev/null +++ b/vg/awr_sql_hints.sql @@ -0,0 +1,38 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Hints in a SQL Statement +* Parameters : 1 - SQLID +* 2 - Child Number +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-May-12 Vishal Gupta First Draft +* +*/ + + +set pages 50 + +DEFINE sql_id="&&1" +DEFINE child_no="&&2" + + +SELECT extractvalue(value(d), '/hint') AS outline_hints + FROM xmltable('/*/outline_data/hint' + passing ( SELECT xmltype(other_xml) AS xmlval + FROM v$sql_plan + WHERE sql_id LIKE NVL('&sql_id',sql_id) + AND child_number = &child_no + AND other_xml IS NOT NULL + ) + ) d +; + +UNDEFINE sql_id +UNDEFINE child_no + +@@footer \ No newline at end of file diff --git a/vg/awr_sql_signature_search.sql b/vg/awr_sql_signature_search.sql new file mode 100644 index 0000000..c81996f --- /dev/null +++ b/vg/awr_sql_signature_search.sql @@ -0,0 +1,88 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Search SQL Text from AWR repository to find SQLId +* Parameters : 1 - SQLText to search (Use % as wild card) +* 2 - Number of days history to search (Default 7 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-JUL-14 Vishal Gupta Added plan_hash_value to output +* 12-JUN-13 Vishal Gupta Added force_matching_signature to output +* 08-MAR-12 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE FORCE_MATCHING_SINGATURE +UNDEFINE no_of_days + +DEFINE FORCE_MATCHING_SINGATURE="&&1" +DEFINE no_of_days="&&2" + +COLUMN _no_of_days NEW_VALUE no_of_days NOPRINT + +set term off +SELECT DECODE('&&no_of_days','','7','&&no_of_days') "_no_of_days" +FROM DUAL; +set term on + + +PROMPT ************************************************************************ +PROMPT * AWR SQL Text Search by using FORCE_MATCHING_SINGATURE +PROMPT * +PROMPT * Input Parameters +PROMPT * - FORCE_MATCHING_SINGATURE - "&&FORCE_MATCHING_SINGATURE" +PROMPT * - NoOfDays - "&&no_of_days" +PROMPT ************************************************************************ + +COLUMN END_INTERVAL_TIME HEADING "Max Snap Time" FORMAT a18 +COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP +COLUMN force_matching_signature HEADING "FORCE_MATCHING_SIGNATURE" FORMAT 999999999999999999999 + +set timing on + +/* +SELECT --+ FULL(sql) parallel(12) + sql.sql_id + FROM dba_hist_sqltext sql + WHERE upper(sql.sql_text) like upper(q'[&&sqltext]') + AND upper(SQL.sql_text) NOT LIKE upper('%dba_hist_sqltext%') +; +*/ + +SELECT --+ FIRST_ROWS LEADING(s) USE_NL(sql ss s ) INDEX(ss.sn) FULL(s) + -- FULL(s) FULL(ss) FULL(sql) parallel(12) + TO_CHAR(max(s.END_INTERVAL_TIME),'DD-MON-YY HH24:MI:SS') END_INTERVAL_TIME + , ss.sql_id + , ss.plan_hash_value + , ss.force_matching_signature + FROM v$database d + , dba_hist_snapshot s + , dba_hist_sqlstat ss + , dba_hist_sqltext sql + WHERE d.dbid = s.dbid + AND s.end_interval_time > sysdate - &&no_of_days + AND s.dbid = ss.dbid + AND s.instance_number = ss.instance_number + AND s.snap_id = ss.snap_id + AND ss.dbid = sql.dbid + AND ss.sql_id = sql.sql_id + AND ss.force_matching_signature = &&FORCE_MATCHING_SINGATURE +GROUP BY ss.sql_id + , ss.plan_hash_value + , ss.force_matching_signature +ORDER BY max(s.END_INTERVAL_TIME) desc +; + +set timing off + +@@footer diff --git a/vg/awr_sqlid_object_stats.sql b/vg/awr_sqlid_object_stats.sql new file mode 100644 index 0000000..b8ad2fb --- /dev/null +++ b/vg/awr_sqlid_object_stats.sql @@ -0,0 +1,169 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - SQLId +* 2 - SQL Child Number +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------------------- +* 14-Jul-15 Vishal Gupta Added last_ddl_time, last_spec_change and created columns to output +* 01-Oct-12 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE plan_hash_value + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" + + + +COLUMN _child_number NEW_VALUE child_number NOPRINT + +set term off + +SELECT DECODE('&&child_number','','0','&&child_number') "_child_number" +FROM DUAL +/ + +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * AWR - SQL Statement Object Statistics +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT *********************************************************************** + +COLUMN object_name HEADING "TableName" FORMAT a50 +COLUMN Object_type HEADING "Object|Type" FORMAT a6 +COLUMN stale_stats HEADING "Stale|Stats" FORMAT a5 +COLUMN stattype_locked HEADING "Locked|Stats" FORMAT a5 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN user_stats HEADING "U|s|e|r" FORMAT a1 TRUNCATE +COLUMN sample_size HEADING "SampleSize" FORMAT 9,999,999,999 +COLUMN num_rows HEADING "RowCount" FORMAT 9,999,999,999 +COLUMN blocks HEADING "Blocks" FORMAT 9,999,999,999 +COLUMN Size_MB HEADING "Size(MB)" FORMAT 9,999,999,999 +COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18 +COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18 +COLUMN created HEADING "Created" FORMAT a18 + + +WITH objects AS +( + SELECT /*+ ALL_ROWS NO_MERGE LEADING (sp) MATERIALIZE */ + DISTINCT + o.owner + , o.object_name + , o.subobject_name + , REPLACE(o.object_type,'MATERIALIZED','MAT') object_type + , sp.partition_id + , TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time + , TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change + , TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created + FROM dba_hist_sql_plan sp + JOIN dba_objects o ON o.owner = sp.object_owner AND o.object_name = sp.object_name + /* Dont join by object id, as it does not cover cases when object has been dropped and recreated*/ + WHERE sp.object_type IS NOT NULL + AND sp.sql_id = '&&sql_id' + AND sp.plan_hash_value = '&&plan_hash_value' +) +,stats AS +( + SELECT /*+ ALL_ROWS NO_MERGE LEADING(o) MATERIALIZE */ + s.owner + || '.' || s.table_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + object_name + , o.object_type + , s.stale_stats + , s.stattype_locked + , s.last_analyzed + , s.sample_size + , s.num_rows + , s.blocks + , (seg.bytes)/1024/1024 Size_MB + , o.last_ddl_time + , o.last_specification_change + , o.created + FROM objects o + JOIN dba_tab_statistics s ON o.owner = s.owner + AND o.object_name = s.table_name + AND NVL(s.partition_name,'%') LIKE NVL(o.subobject_name,'%') + AND NVL(s.partition_position,0) LIKE NVL(o.partition_id,0) + JOIN dba_segments seg ON seg.owner = o.owner + AND seg.segment_name = o.object_name + --AND seg.segment_type = o.object_type + AND NVL(o.subobject_name,'%') LIKE NVL(seg.partition_name,'%') + AND NVL(s.partition_position,0) = NVL(o.partition_id,0) + WHERE s.table_name NOT LIKE 'BIN$%' + AND s.table_name NOT LIKE '%==%' + UNION ALL + SELECT /*+ ALL_ROWS NO_MERGE LEADING(o) MATERIALIZE */ + s.owner + || '.' || s.index_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + object_name + , o.object_type + , s.stale_stats + , s.stattype_locked + , s.last_analyzed + , s.sample_size + , s.num_rows + , s.leaf_blocks blocks + , (seg.bytes)/1024/1024 Size_MB + , o.last_ddl_time + , o.last_specification_change + , o.created + FROM objects o + JOIN dba_ind_statistics s ON o.owner = s.owner + AND o.object_name = s.index_name + AND NVL(o.subobject_name,'%') = NVL(s.partition_name,'%') + JOIN dba_segments seg ON seg.owner = o.owner + AND seg.segment_name = o.object_name + -- AND seg.segment_type = o.object_type + AND NVL(seg.partition_name,'%') = NVL(o.subobject_name,'%') + WHERE s.table_name NOT LIKE 'BIN$%' + AND s.index_name NOT LIKE 'BIN$%' + AND s.table_name NOT LIKE '%==%' + AND s.index_name NOT LIKE '%==%' +) +SELECT /*+ ALL_ROWS */ + object_name + , object_type + , stale_stats + , stattype_locked + , to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , sample_size + , num_rows + , blocks + , Size_MB + , last_ddl_time + , last_specification_change + , created + FROM stats s +--ORDER BY s.last_analyzed ASC +ORDER BY object_name +; + + + +@@footer diff --git a/vg/awr_sqlid_objects.sql b/vg/awr_sqlid_objects.sql new file mode 100644 index 0000000..5b31135 --- /dev/null +++ b/vg/awr_sqlid_objects.sql @@ -0,0 +1,64 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display objects used in a SQL Id +* Parameters : 1 - SQLId +* 2 - SQL Child Number +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------------------- +* 22-Jul-15 Vishal Gupta Created +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE plan_hash_value + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" + + + +PROMPT +PROMPT *********************************************************************** +PROMPT * Objects Used in a SQL Statement +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT *********************************************************************** + +COLUMN object_name HEADING "TableName" FORMAT a50 +COLUMN Object_type HEADING "Object|Type" FORMAT a15 +COLUMN Size_MB HEADING "Size(MB)" FORMAT 9,999,999,999 +COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18 +COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18 +COLUMN created HEADING "Created" FORMAT a18 + +SELECT DISTINCT + o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name, '') object_name + , REPLACE(o.object_type,'MATERIALIZED','MAT') object_type + , TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time + , TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change + , TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created + FROM dba_hist_sql_plan sp + JOIN dba_objects o ON o.owner = sp.object_owner AND o.object_name = sp.object_name AND ( sp.object# = o.object_ID OR o.object_type not like '%PARTITION') + /* Dont join by object id, as it does not cover cases when object has been dropped and recreated*/ +WHERE sp.object_type IS NOT NULL + AND sp.sql_id = '&&sql_id' + AND sp.plan_hash_value = '&&plan_hash_value' +ORDER BY 1 +; + + + +@@footer diff --git a/vg/awr_sqlid_tree.sql b/vg/awr_sqlid_tree.sql new file mode 100644 index 0000000..93f977b --- /dev/null +++ b/vg/awr_sqlid_tree.sql @@ -0,0 +1,125 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL ID Heirarchy from AWR +* Version : 10.1 and above +* Parameters : 1 - SQL_ID +* 2 - Number of Days (Default 7 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 07-Mar-13 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE days +UNDEFINE whereclause + +DEFINE sql_id="&&1" +DEFINE days="&&2" +DEFINE whereclause="&&3" + +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&days','','7','&&days') "_days" +FROM DUAL; +set term on + + + +Prompt +Prompt ************************************************************** +Prompt * AWR SQL Execution Hierarchy +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt ************************************************************** + +/* + +COLUMN sample_time HEADING "SampleTime" FORMAT a18 +COLUMN SQL_ID HEADING "SQLId" FORMAT a50 +COLUMN sql_opname HEADING "SQL Opname" FORMAT a10 + + +SELECT --+ parallel(ash 10) + TO_CHAR(ash.sample_time,'DD-MON-YY HH24:MI:SS') sample_time + , LPAD(' ',level*4,'`---') || ash.sql_id sql_id + , ash.sql_opname + FROM dba_hist_active_sess_history ash + WHERE ash.sample_time > sysdate - '&&days' + &&whereclause +START WITH ash.top_level_sql_id = '&&sql_id' +CONNECT BY PRIOR ash.top_level_sql_id = ash.sql_id +ORDER BY ash.sample_time +; +*/ + + +COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999 +COLUMN sql_exec_start FORMAT a20 +COLUMN sql_exec_end FORMAT a27 +COLUMN duration FORMAT a23 +COLUMN sql_opname FORMAT a20 + +SELECT DISTINCT + ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.FORCE_MATCHING_SIGNATURE + , ash.top_level_sql_id + FROM dba_hist_active_sess_history ash + , v$database d + WHERE ash.dbid = d.dbid + AND ash.top_level_sql_id = '&&sql_id' + AND ash.sample_time > sysdate - '&&days' +; + + + +SELECT --ash.sql_exec_id, + TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + , max(ash.sample_time) sql_exec_end + , max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)) duration + , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.FORCE_MATCHING_SIGNATURE + , ash.top_level_sql_id + FROM dba_hist_active_sess_history ash + , v$database d + WHERE ash.dbid = d.dbid + AND ash.top_level_sql_id = '&&sql_id' + AND ash.sample_time > sysdate - '&&days' +GROUP BY ash.FORCE_MATCHING_SIGNATURE + , ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_opname + , ash.top_level_sql_id +ORDER BY max(ash.sample_time) asc + , NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC +; + + + + +@@footer diff --git a/vg/awr_sqlplan_flips.sql b/vg/awr_sqlplan_flips.sql new file mode 100644 index 0000000..b933f22 --- /dev/null +++ b/vg/awr_sqlplan_flips.sql @@ -0,0 +1,42 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all SQL Ids with degraded execution plan flips +* Parameters : 1 - Number of days +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 11-Oct-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DAYS +DEFINE DAYS="&&1" + +COLUMN _DAYS NEW_VALUE DAYS NOPRINT + +set term off +SELECT DECODE('&&DAYS','','7','&&DAYS') "_DAYS" +FROM DUAL; +set term on + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +DEFINE elapsed_time_threshold= + + + + +@@footer \ No newline at end of file diff --git a/vg/awr_sqlstats.sql b/vg/awr_sqlstats.sql new file mode 100644 index 0000000..5f05789 --- /dev/null +++ b/vg/awr_sqlstats.sql @@ -0,0 +1,244 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats from AWR +* Version : 10.1 and above +* Parameters : 1 - SQL_ID +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Number of Days (Default 7 days) +* 4 - Whereclause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 10-Feb-16 Vishal Gupta Add following columns to output +* - End of Fetch Count +* - Phy Read Requests +* - Phy Write Requests +* Added conditional use of follwoing based on version +* - Force matching signature +* 13-Feb-14 Vishal Gupta Add PX_SERVERS to output +* 09-Oct-12 Vishal Gupta Removed the instance_number from output and +* aggregated stats for all instances in output. +* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* 08-Mar-12 Vishal Gupta Intial version +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE whereclause +UNDEFINE force_matching_signature +UNDEFINE use_force_matching_signature + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" +DEFINE days="&&3" +DEFINE whereclause="&&4" +DEFINE force_matching_signature="" + +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&days','','7','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=99,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" + +DEFINE COUNT_FORMAT=99,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE COUNT_LARGE_FORMAT=99,999 +--DEFINE COUNT_LARGE_DIVIDER="1" +--DEFINE COUNT_LARGE_HEADING="#" +DEFINE COUNT_LARGE_DIVIDER="1000" +DEFINE COUNT_LARGE_HEADING="#1000" +--DEFINE COUNT_LARGE_DIVIDER="1000000" +--DEFINE COUNT_LARGE_HEADING="million" + + + +DEFINE BYTES_FORMAT=99,999 +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + +/************************************/ + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off + select NULL +&&_IF_ORA_10gR2_OR_HIGHER , to_char(ss2.force_matching_signature) "_force_matching_signature" + from v$database d + , dba_hist_sqlstat ss2 + where d.dbid = ss2.dbid + AND ss2.sql_id = '&&sql_id' + and rownum = 1 +; + +select CASE WHEN '&&force_matching_signature' IS NULL THEN '0' + WHEN '&&force_matching_signature' = '' THEN '0' + ELSE '&&force_matching_signature' + END "_force_matching_signature" + from dual +; +set term on + +/************************************/ + +Prompt +Prompt ************************************************************** +Prompt * AWR SQL Executions Statistics (Cummulative) +Prompt * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt ************************************************************** + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN iowait_total HEADING "IO|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN apwait_total HEADING "Appl|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN ccwait_total HEADING "Conc|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN clwait_total HEADING "Cluster|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN plsexec_time_total HEADING "PLsexec|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN cpu_time_total HEADING "CPU|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN elapsed_time_total HEADING "Elapsed|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN executions_delta HEADING "Exec|Delta|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN executions_total HEADING "Exec|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN end_of_fetch_count_total HEADING "End Of|Fetch|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN invalidations_total HEADING "Invalid|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT 999 +--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed_total HEADING "Rows|Total|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT +COLUMN sorts_total HEADING "Sorts|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN buffer_gets_total HEADING "Buffer|Gets|Total|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT +COLUMN physical_read_requests_total HEADING "Phy|Read|Req|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT +COLUMN physical_write_requests_total HEADING "Phy|Write|Req|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT +COLUMN direct_writes_total HEADING "Direct|Path|Write|Total|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT +COLUMN optimized_physical_reads_total HEADING "Optim'd|Phy|Read|Req|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT +COLUMN physical_read_bytes_total HEADING "Phy|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_write_bytes_total HEADING "Phy|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN cell_uncompressed_bytes_total HEADING "Cell|UnComp|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + SELECT TO_CHAR(MAX(ss.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time + --, ss.instance_number + , ss.sql_id + , ss.plan_hash_value + , ROUND(SUM(ss.iowait_total)/1000000/&TIME_DIVIDER) iowait_total + , ROUND(SUM(ss.apwait_total)/1000000/&TIME_DIVIDER) apwait_total + , ROUND(SUM(ss.ccwait_total)/1000000/&TIME_DIVIDER) ccwait_total + , ROUND(SUM(ss.clwait_total)/1000000/&TIME_DIVIDER) clwait_total + --, ROUND(SUM(ss.plsexec_time_total)/1000000/&TIME_DIVIDER) plsexec_time_total + , ROUND(SUM(ss.cpu_time_total)/1000000/&TIME_DIVIDER) cpu_time_total + , ROUND(SUM(ss.elapsed_time_total)/1000000/&TIME_DIVIDER) elapsed_time_total + , '|' seperator + , SUM(ss.executions_total)/&COUNT_DIVIDER executions_total +&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_total)/&COUNT_SMALL_DIVIDER px_servers_execs_total + , SUM(ss.sorts_total)/&COUNT_SMALL_DIVIDER sorts_total + , SUM(ss.end_of_fetch_count_total )/&COUNT_DIVIDER end_of_fetch_count_total + --, SUM(ss.invalidations_total)/&COUNT_DIVIDER invalidations_total + , SUM(ss.rows_processed_total)/&COUNT_LARGE_DIVIDER rows_processed_total + , SUM(ss.buffer_gets_total)/&COUNT_LARGE_DIVIDER buffer_gets_total +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ROUND(ss.physical_read_requests_total)/&COUNT_LARGE_DIVIDER) physical_read_requests_total +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ROUND(ss.physical_write_requests_total)/&COUNT_LARGE_DIVIDER) physical_write_requests_total + , SUM(ROUND(ss.direct_writes_total)/&COUNT_LARGE_DIVIDER) direct_writes_total +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ROUND(ss.optimized_physical_reads_total)/&COUNT_LARGE_DIVIDER) optimized_physical_reads_total + , '|' seperator + -- , SUM(ss.buffer_gets_delta* ss.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_total)/&BYTES_DIVIDER io_interconnect_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_total)/&BYTES_DIVIDER physical_read_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_total)/&BYTES_DIVIDER physical_write_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_total)/&BYTES_DIVIDER io_offload_elig_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_total)/&BYTES_DIVIDER io_offload_return_bytes_total +--&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.cell_uncompressed_bytes_total)/&BYTES_DIVIDER cell_uncompressed_bytes_total + , '|' seperator + , ss.sql_profile + -- , ss.module + -- , ss.action + FROM + ( + SELECT s.end_interval_time + , ss.* + , p.value + , NVL(LEAD (ss.snap_id) OVER (ORDER BY ss.dbid, ss.instance_number, ss.snap_id),0) next_snap_id + from dba_hist_sqlstat ss + , dba_hist_snapshot s + , v$database d + , v$system_parameter p + where p.name = 'db_block_size' + AND s.dbid = d.dbid + AND ss.instance_number = s.instance_number + AND ss.dbid = s.dbid + AND ss.snap_id = s.snap_id + AND s.end_interval_time > SYSDATE - &&days +&&_IF_ORA_10gR1_OR_LOWER AND ss.sql_id = '&&sql_id' +&&_IF_ORA_10gR2_OR_HIGHER AND ss.sql_id LIKE CASE ss.force_matching_signature +&&_IF_ORA_10gR2_OR_HIGHER WHEN 0 THEN '&&sql_id' +&&_IF_ORA_10gR2_OR_HIGHER ELSE '%' +&&_IF_ORA_10gR2_OR_HIGHER END +&&_IF_ORA_10gR2_OR_HIGHER AND ss.force_matching_signature = '&&force_matching_signature' + AND ss.plan_hash_value LIKE '&&plan_hash_value' + &&whereclause + ) ss + WHERE (ss.executions_delta > 0 OR ss.snap_id + 1 <> ss.next_snap_id) + GROUP BY ss.dbid + , ss.snap_id + , ss.sql_id + , ss.plan_hash_value + , ss.sql_profile + ORDER BY TO_CHAR(MAX(ss.end_interval_time),'YYYY-MM-DD HH24:MI') + , ss.plan_hash_value + , ss.sql_profile +; + + +@@footer diff --git a/vg/awr_sqlstats_daily.sql b/vg/awr_sqlstats_daily.sql new file mode 100644 index 0000000..df2c19b --- /dev/null +++ b/vg/awr_sqlstats_daily.sql @@ -0,0 +1,206 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats from AWR +* Version : 10.1 and above +* Parameters : 1 - SQL_ID +* 2 - Number of Days (Default 30 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable +* 09-Oct-12 Vishal Gupta Removed the instance_number from output and +* aggregated stats for all instances in output. +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE days +UNDEFINE whereclause +UNDEFINE force_matching_signature + +DEFINE sql_id="&&1" +DEFINE days="&&2" +DEFINE whereclause="&&4" +DEFINE force_matching_signature="" + +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&days','','30','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=999,999 +--DEFINE COUNT_SMALL_DIVIDER="1" +--DEFINE COUNT_SMALL_HEADING="#" +DEFINE COUNT_SMALL_DIVIDER="1000" +DEFINE COUNT_SMALL_HEADING="#1000" +--DEFINE COUNT_SMALL_DIVIDER="1000000" +--DEFINE COUNT_SMALL_HEADING="#mill" + + +DEFINE COUNT_FORMAT=99,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" +--DEFINE COUNT_DIVIDER="1000000" +--DEFINE COUNT_HEADING="million" + +DEFINE COUNT_LARGE_FORMAT=99,999,999 +--DEFINE COUNT_LARGE_DIVIDER="1" +--DEFINE COUNT_LARGE_HEADING="#" +DEFINE COUNT_LARGE_DIVIDER="1000" +DEFINE COUNT_LARGE_HEADING="#1000" +--DEFINE COUNT_LARGE_DIVIDER="1000000" +--DEFINE COUNT_LARGE_HEADING="million" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=999,999 +--DEFINE TIME_DIVIDER="1" +--DEFINE TIME_HEADING="sec" +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + + + +/************************************/ + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +set term off +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from v$database d + JOIN sys.WRH$_SQLSTAT ss2 on ss2.dbid = d.dbid + where ss2.sql_id = '&&sql_id' and rownum = 1; +set term on +/************************************/ + +Prompt +Prompt *************************************************************************************************** +Prompt * AWR SQL Executions Statistics (Daily - Delta) +Prompt * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt *************************************************************************************************** + + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Date" FORMAT a9 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN force_matching_signature HEADING "Force Matching Signature" FORMAT 999999999999999999999 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&&COUNT_HEADING)" FORMAT 999 +COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT +COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + SELECT TO_CHAR(TRUNC(s.end_interval_time,'DD'),'DD-MON-YY') end_interval_time + , ss.force_matching_signature + , max(ss.sql_id) sql_id + --, ss.plan_hash_value + , ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta + , ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta + , ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta + , ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta + , ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta + , ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta + , ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta + , '|' seperator + , SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta +--&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta)/&&COUNT_DIVIDER px_servers_execs_delta + -- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta + , SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta + , SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta + , SUM(ss.buffer_gets_delta)/&&COUNT_LARGE_DIVIDER buffer_gets_delta + , SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta + , ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta + , '|' seperator +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta + , '|' seperator + from dba_hist_sqlstat ss + , dba_hist_snapshot s + , v$database d + , v$system_parameter p + where p.name = 'db_block_size' + AND ss.instance_number = s.instance_number + AND ss.dbid = s.dbid + AND ss.snap_id = s.snap_id + AND ss.dbid = d.dbid + AND s.end_interval_time > SYSDATE - &&days + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature LIKE '&&force_matching_signature' + --AND ss.executions_delta > 0 + &&whereclause + GROUP BY ss.dbid + , TRUNC(s.end_interval_time,'DD') + , ss.force_matching_signature + --, ss.plan_hash_value + ORDER BY TRUNC(s.end_interval_time,'DD') + , ss.force_matching_signature + --, ss.plan_hash_value +; + +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE force_matching_signature +UNDEFINE whereclause + + +@@footer diff --git a/vg/awr_sqlstats_delta.sql b/vg/awr_sqlstats_delta.sql new file mode 100644 index 0000000..4dc1b1c --- /dev/null +++ b/vg/awr_sqlstats_delta.sql @@ -0,0 +1,201 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats from AWR +* Version : 10.1 and above +* Parameters : 1 - SQL_ID (Use % as wildcard) +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Number of Days (Default 7 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable +* 09-Oct-12 Vishal Gupta Removed the instance_number from output and +* aggregated stats for all instances in output. +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" +DEFINE days="&&3" +DEFINE whereclause="&&4" +DEFINE force_matching_signature="" + +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&days','','7','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL; +set term on + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=99,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" +--DEFINE COUNT_SMALL_DIVIDER="1000000" +--DEFINE COUNT_SMALL_HEADING="#mill" + + +DEFINE COUNT_FORMAT=999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" +--DEFINE COUNT_HEADING="#1000" +--DEFINE COUNT_DIVIDER="1000000" +--DEFINE COUNT_HEADING="million" + +DEFINE BYTES_FORMAT=999,999 +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +--DEFINE TIME_DIVIDER="1" +--DEFINE TIME_HEADING="sec" +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + + + +/************************************/ + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +set term off +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from dba_hist_sqlstat ss2 + where ss2.sql_id = '&&sql_id' and rownum = 1; +set term on +/************************************/ + +Prompt +Prompt *************************************************************************************************** +Prompt * AWR SQL Executions Statistics (Delta) +Prompt * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt *************************************************************************************************** + + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta" FORMAT 999 +COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + SELECT TO_CHAR(MAX(s.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time + , ss.sql_id + , ss.plan_hash_value + , ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta + , ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta + , ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta + , ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta + , ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta + , ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta + , ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta + , '|' seperator + , SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta +&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta) px_servers_execs_delta + -- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta + , SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta + , SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta + , SUM(ss.buffer_gets_delta)/&&COUNT_DIVIDER buffer_gets_delta + , SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta + , ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta + , '|' seperator +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta + , '|' seperator + , ss.sql_profile + from dba_hist_sqlstat ss + , dba_hist_snapshot s + , v$database d + , v$system_parameter p + where p.name = 'db_block_size' + AND ss.instance_number = s.instance_number + AND ss.dbid = s.dbid + AND ss.snap_id = s.snap_id + AND ss.dbid = d.dbid + AND s.end_interval_time > SYSDATE - &&days + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature LIKE '&&force_matching_signature' + AND ss.plan_hash_value LIKE '&&plan_hash_value' + --AND ss.executions_delta > 0 + &&whereclause + GROUP BY ss.dbid + , ss.snap_id + , ss.sql_id + , ss.plan_hash_value + , ss.sql_profile + ORDER BY TO_CHAR(MAX(s.end_interval_time),'YYYY-MM-DD HH24:MI') + , ss.sql_id + , ss.plan_hash_value + , ss.sql_profile +; + +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE force_matching_signature +UNDEFINE whereclause + + +@@footer diff --git a/vg/awr_sqlstats_delta_per_exec.sql b/vg/awr_sqlstats_delta_per_exec.sql new file mode 100644 index 0000000..2790600 --- /dev/null +++ b/vg/awr_sqlstats_delta_per_exec.sql @@ -0,0 +1,201 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats per execution from AWR +* Version : 10.1 and above +* Parameters : 1 - SQL_ID +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Number of Days (Default 7 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE force_matching_signature +UNDEFINE whereclause + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" +DEFINE days="&&3" +DEFINE whereclause="&&4" +DEFINE force_matching_signature="" + +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term on +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&days','','7','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL; +set term off + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=9,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + + + +DEFINE COUNT_FORMAT=999,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" + +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 + +--DEFINE TIME_DIVIDER="0.001" +--DEFINE TIME_HEADING="msec" +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" + + +/************************************/ + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +set term off +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from dba_hist_sqlstat ss2 + where ss2.sql_id = '&&sql_id' and rownum = 1; +set term on +/************************************/ + + +Prompt +Prompt ****************************************************************** +Prompt * AWR SQL Executions Statistics (All Figures Delta are per execution) +Prompt * (Force Matching Signature = '&&force_matching_signature') +Prompt * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt ****************************************************************** + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations_delta HEADING "Invalid|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999 +COLUMN iowait_delta HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN apwait_delta HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN ccwait_delta HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN clwait_delta HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN plsexec_time_delta HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN cpu_time_delta HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN elapsed_time_delta HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT 9,999 +COLUMN executions_total HEADING "Total|Exec|(&&COUNT_HEADING)" FORMAT 9,999 +COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT 999 +--COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT +COLUMN rows_processed_delta HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN sorts_delta HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT +COLUMN buffer_gets_delta HEADING "Buffer|Gets|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN direct_writes_delta HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN physical_read_bytes_delta HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN physical_write_bytes_delta HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + + + SELECT TO_CHAR(MAX(s.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time + --, ss.instance_number + , ss.sql_id + , ss.plan_hash_value + , '|' seperator + , ROUND(SUM(ss.iowait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) iowait_delta + , ROUND(SUM(ss.apwait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) apwait_delta + , ROUND(SUM(ss.ccwait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) ccwait_delta + , ROUND(SUM(ss.clwait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) clwait_delta + , ROUND(SUM(ss.plsexec_time_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) plsexec_time_delta + , ROUND(SUM(ss.cpu_time_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) cpu_time_delta + , ROUND(SUM(ss.elapsed_time_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) elapsed_time_delta + , '|' seperator + , SUM(GREATEST(ss.executions_total,1))/&&COUNT_DIVIDER executions_total +&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER px_servers_execs_delta + -- , ss.invalidations_delta/GREATEST(ss.executions_delta,1)/&&COUNT_DIVIDER invalidations_delta + , SUM(ss.rows_processed_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER rows_processed_delta + , SUM(ss.sorts_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_SMALL_DIVIDER sorts_delta + , SUM(ss.buffer_gets_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER buffer_gets_delta + , ROUND(SUM(ss.direct_writes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER) direct_writes_delta + , '|' seperator +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER io_interconnect_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER physical_read_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER physical_write_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER optimized_physical_reads_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER io_offload_elig_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER io_offload_return_bytes_delta + , '|' seperator + , ss.sql_profile + from dba_hist_sqlstat ss + , dba_hist_snapshot s + , v$database d + where ss.instance_number = s.instance_number + AND ss.dbid = s.dbid + AND ss.snap_id = s.snap_id + AND ss.dbid = d.dbid + AND s.end_interval_time > SYSDATE - &&days + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature LIKE '&&force_matching_signature' + AND ss.plan_hash_value LIKE '&&plan_hash_value' + --AND ss.executions_delta > 0 + &&whereclause + GROUP BY ss.dbid + , ss.snap_id + , ss.sql_id + , ss.plan_hash_value + , ss.sql_profile + ORDER BY TO_CHAR(MAX(s.end_interval_time),'YYYY-MM-DD HH24:MI') + , ss.sql_id + , ss.plan_hash_value + , ss.sql_profile +; + + +@@footer diff --git a/vg/awr_sqlstats_per_exec.sql b/vg/awr_sqlstats_per_exec.sql new file mode 100644 index 0000000..edcfb44 --- /dev/null +++ b/vg/awr_sqlstats_per_exec.sql @@ -0,0 +1,201 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats per execution from AWR +* Version : 10.1 and above +* Parameters : 1 - SQL_ID (Use % as wildcard) +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Number of Days (Default 7 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE force_matching_signature +UNDEFINE whereclause + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" +DEFINE days="&&3" +DEFINE whereclause="&&4" +DEFINE force_matching_signature="" + + +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&days','','7','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=9,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + + + +DEFINE COUNT_FORMAT=999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="100" +--DEFINE COUNT_HEADING="#100" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" + +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9999 + +--DEFINE TIME_DIVIDER="0.001" +--DEFINE TIME_HEADING="msec" +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" + + +/************************************/ + +set term off +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from dba_hist_sqlstat ss2 + where ss2.sql_id = '&&sql_id' and rownum = 1; +set term on +/************************************/ + + +Prompt +Prompt ****************************************************************** +Prompt * AWR SQL Executions Statistics (All Figures are per execution) +Prompt * (Force Matching Signature = '&&force_matching_signature') +Prompt * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt ****************************************************************** + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations_total HEADING "Invalid|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999 +COLUMN iowait_total HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN apwait_total HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN ccwait_total HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN clwait_total HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN plsexec_time_total HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN cpu_time_total HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN elapsed_time_total HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT 999,999 +COLUMN executions_total HEADING "Total|Exec|(&&COUNT_HEADING)" FORMAT 999,999 +COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT 999 +--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed_total HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN sorts_total HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT +COLUMN buffer_gets_total HEADING "Buffer|Gets|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999,999 +COLUMN direct_writes_total HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN physical_read_bytes_total HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN physical_write_bytes_total HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + + + SELECT TO_CHAR(ss.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , ss.instance_number + , ss.sql_id + , ss.plan_hash_value + , '|' seperator + , ROUND(ss.iowait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) iowait_total + , ROUND(ss.apwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) apwait_total + , ROUND(ss.ccwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) ccwait_total + , ROUND(ss.clwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) clwait_total + , ROUND(ss.plsexec_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) plsexec_time_total + , ROUND(ss.cpu_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) cpu_time_total + , ROUND(ss.elapsed_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) elapsed_time_total + , '|' seperator + , ss.executions_delta/&&COUNT_DIVIDER executions_delta + , ss.executions_total/&&COUNT_DIVIDER executions_total +&&_IF_ORA_10gR2_OR_HIGHER , ss.px_servers_execs_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER px_servers_execs_total + -- , ss.invalidations_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER invalidations_total + , ss.rows_processed_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER rows_processed_total + , ss.sorts_total/GREATEST(ss.executions_total,1)/&&COUNT_SMALL_DIVIDER sorts_total + , ss.buffer_gets_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER buffer_gets_total + , ROUND(ss.direct_writes_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER) direct_writes_total + , '|' seperator +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_interconnect_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_interconnect_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_read_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_read_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_write_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_write_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.optimized_physical_reads_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER optimized_physical_reads_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_elig_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_elig_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_return_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_return_bytes_total + , '|' seperator + , ss.sql_profile + FROM + ( + SELECT s.end_interval_time + , ss.* + , LEAD (ss.snap_id) OVER (ORDER BY ss.dbid, ss.instance_number, ss.snap_id) next_snap_id + from dba_hist_sqlstat ss + , dba_hist_snapshot s + , v$database d + where ss.instance_number = s.instance_number + AND ss.dbid = s.dbid + AND ss.snap_id = s.snap_id + AND ss.dbid = d.dbid + AND s.end_interval_time > SYSDATE - &&days + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature LIKE '&&force_matching_signature' + AND ss.plan_hash_value LIKE '&&plan_hash_value' + &&whereclause + ) ss + WHERE (ss.executions_delta > 0 OR ss.snap_id + 1 <> ss.next_snap_id) + ORDER BY TO_CHAR(ss.end_interval_time,'YYYY-MM-DD HH24:MI') + , ss.instance_number + ; + +@@footer diff --git a/vg/awr_sqlstats_per_exec_b.sql b/vg/awr_sqlstats_per_exec_b.sql new file mode 100644 index 0000000..c9286b1 --- /dev/null +++ b/vg/awr_sqlstats_per_exec_b.sql @@ -0,0 +1,201 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats per execution from AWR +* Version : 10.1 and above +* Parameters : 1 - SQL_ID (Use % as wildcard) +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Number of Days (Default 7 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE force_matching_signature +UNDEFINE whereclause + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" +DEFINE days="&&3" +DEFINE whereclause="&&4" +DEFINE force_matching_signature="" + + +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&days','','7','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=9,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + + + +DEFINE COUNT_FORMAT=999,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="100" +--DEFINE COUNT_HEADING="#100" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" + +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9999 + +--DEFINE TIME_DIVIDER="0.001" +--DEFINE TIME_HEADING="msec" +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" + + +/************************************/ + +set term off +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from dba_hist_sqlstat ss2 + where ss2.sql_id = '&&sql_id' and rownum = 1; +set term on +/************************************/ + + +Prompt +Prompt ****************************************************************** +Prompt * AWR SQL Executions Statistics (All Figures are per execution) +Prompt * (Force Matching Signature = '&&force_matching_signature') +Prompt * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt ****************************************************************** + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations_total HEADING "Invalid|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999 +COLUMN iowait_total HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN apwait_total HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN ccwait_total HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN clwait_total HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN plsexec_time_total HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN cpu_time_total HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT 9999999 +COLUMN elapsed_time_total HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT 99999999 +COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT 9,999,999,999 +COLUMN executions_total HEADING "Total|Exec|(&&COUNT_HEADING)" FORMAT 9,999,999,999 +COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT 999 +--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed_total HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" 9999999999 +COLUMN sorts_total HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT +COLUMN buffer_gets_total HEADING "Buffer|Gets|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999,999 +COLUMN direct_writes_total HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN physical_read_bytes_total HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN physical_write_bytes_total HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + + + SELECT TO_CHAR(ss.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , ss.instance_number + , ss.sql_id + , ss.plan_hash_value + , '|' seperator + , ROUND(ss.iowait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) iowait_total + , ROUND(ss.apwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) apwait_total + , ROUND(ss.ccwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) ccwait_total + , ROUND(ss.clwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) clwait_total + , ROUND(ss.plsexec_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) plsexec_time_total + , ROUND(ss.cpu_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) cpu_time_total + , ROUND(ss.elapsed_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) elapsed_time_total + , '|' seperator + , ss.executions_delta/&&COUNT_DIVIDER executions_delta + , ss.executions_total/&&COUNT_DIVIDER executions_total +&&_IF_ORA_10gR2_OR_HIGHER , ss.px_servers_execs_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER px_servers_execs_total + -- , ss.invalidations_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER invalidations_total + , ss.rows_processed_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER rows_processed_total + , ss.sorts_total/GREATEST(ss.executions_total,1)/&&COUNT_SMALL_DIVIDER sorts_total + , ss.buffer_gets_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER buffer_gets_total + , ROUND(ss.direct_writes_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER) direct_writes_total + , '|' seperator +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_interconnect_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_interconnect_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_read_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_read_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_write_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_write_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.optimized_physical_reads_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER optimized_physical_reads_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_elig_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_elig_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_return_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_return_bytes_total + , '|' seperator + , ss.sql_profile + FROM + ( + SELECT s.end_interval_time + , ss.* + , LEAD (ss.snap_id) OVER (ORDER BY ss.dbid, ss.instance_number, ss.snap_id) next_snap_id + from dba_hist_sqlstat ss + , dba_hist_snapshot s + , v$database d + where ss.instance_number = s.instance_number + AND ss.dbid = s.dbid + AND ss.snap_id = s.snap_id + AND ss.dbid = d.dbid + AND s.end_interval_time > SYSDATE - &&days + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature LIKE '&&force_matching_signature' + AND ss.plan_hash_value LIKE '&&plan_hash_value' + &&whereclause + ) ss + WHERE (ss.executions_delta > 0 OR ss.snap_id + 1 <> ss.next_snap_id) + ORDER BY TO_CHAR(ss.end_interval_time,'YYYY-MM-DD HH24:MI') + , ss.instance_number + ; + +@@footer diff --git a/vg/awr_sqlstats_per_exec_new.sql b/vg/awr_sqlstats_per_exec_new.sql new file mode 100644 index 0000000..c891ffc --- /dev/null +++ b/vg/awr_sqlstats_per_exec_new.sql @@ -0,0 +1,155 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats per execution from AWR +* Version : 10.1 and above +* Parameters : 1 - SQL_ID +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Number of Days (Default 7 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* +* +*/ + + +DEFINE sqlid="&&1" +DEFINE plan_hash_value="&&2" +DEFINE days="&&3" + + +DEFINE COUNT_FORMAT=9,999,999,999 + +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" + +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 + +--DEFINE TIME_DIVIDER="0.001" +--DEFINE TIME_HEADING="msec" +--DEFINE TIME_DIVIDER="1" +--DEFINE TIME_HEADING="sec" +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Snap Time" FORMAT a18 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations_delta HEADING "Invalid|(&COUNT_HEADING)|PerExec" FORMAT 9,999 +COLUMN iowait_delta HEADING "IO|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT +COLUMN apwait_delta HEADING "Appl|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT +COLUMN ccwait_delta HEADING "Conc|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT +COLUMN clwait_delta HEADING "Cluster|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT +COLUMN plsexec_time_delta HEADING "PLsexec|Time|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT +COLUMN cpu_time_delta HEADING "CPU|Time|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT +COLUMN elapsed_time_delta HEADING "Elapsed|Time|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT +COLUMN executions_delta HEADING "Exec|(&COUNT_HEADING)" FORMAT 9,999 +COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)|PerExec" FORMAT 999 +--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|(&COUNT_SMALL_HEADING)|PerExec" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed_delta HEADING "Rows|(&COUNT_HEADING)|PerExec" FORMAT &COUNT_FORMAT +COLUMN sorts_delta HEADING "Sorts|(&COUNT_HEADING)|PerExec" FORMAT &COUNT_FORMAT +COLUMN buffer_gets_delta HEADING "Buffer|Gets|(&COUNT_HEADING)|PerExec" FORMAT &COUNT_FORMAT +COLUMN direct_writes_delta HEADING "Direct|Write|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT +COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT +COLUMN physical_read_bytes_delta HEADING "Phy|Read|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT +COLUMN physical_write_bytes_delta HEADING "Phy|Write|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT +COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT +COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + +Prompt +Prompt *************************************************************************************************** +Prompt * AWR SQL Executions Statistics (All Figures are per execution) +Prompt * SQLID = &&sqlid , plan_hash_value = &plan_hash_value over last &days days +Prompt *************************************************************************************************** + + WITH snaps AS + ( + SELECT ss.dbid + , ss.instance_number + , ss.snap_id + , LAG(ss.snap_id) OVER (PARTITION BY s.dbid, s.instance_number, ss.sql_id, ss.plan_hash_value ORDER BY ss.dbid, ss.instance_number, ss.snap_id , ss.sql_id, ss.plan_hash_value) prev_snap_id + , ss.sql_id + , ss.plan_hash_value + , s.end_interval_time + from dba_hist_sqlstat ss + , dba_hist_snapshot s + , v$database d + where ss.instance_number = s.instance_number + AND ss.dbid = s.dbid + AND ss.snap_id = s.snap_id + AND ss.dbid = d.dbid + AND s.end_interval_time > SYSDATE - &&days + AND ss.sql_id = '&&sqlid' + AND ss.plan_hash_value LIKE '&&plan_hash_value' + AND ss.executions_delta > 0 + ) + SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI:SS') end_interval_time + , ss.instance_number + , ss.sql_id + , ss.plan_hash_value + , '|' seperator + , ROUND((ss.iowait_total-ss_prev.iowait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) iowait_delta + , ROUND((ss.apwait_total-ss_prev.apwait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) apwait_delta + , ROUND((ss.ccwait_total-ss_prev.ccwait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) ccwait_delta + , ROUND((ss.clwait_total-ss_prev.clwait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) clwait_delta + , ROUND((ss.plsexec_time_total-ss_prev.plsexec_time_total)/1000000/ss.executions_delta/&TIME_DIVIDER) plsexec_time_delta + , ROUND((ss.cpu_time_total-ss_prev.cpu_time_total)/1000000/ss.executions_delta/&TIME_DIVIDER) cpu_time_delta + , ROUND((ss.elapsed_time_total-ss_prev.elapsed_time_total)/1000000/ss.executions_delta/&TIME_DIVIDER) elapsed_time_delta + , '|' seperator + , ss.executions_delta/&COUNT_DIVIDER executions_delta +&&_IF_ORA_10gR2_OR_HIGHER , (ss.px_servers_execs_total-ss_prev.px_servers_execs_total)/ss.executions_total/&COUNT_DIVIDER px_servers_execs_delta + -- , (ss.invalidations_total-ss_prev.invalidations_total)/ss.executions_total/&COUNT_DIVIDER invalidations_delta + , (ss.rows_processed_total-ss_prev.rows_processed_total)/ss.executions_delta/&COUNT_DIVIDER rows_processed_delta + , (ss.buffer_gets_total-ss_prev.buffer_gets_total)/ss.executions_delta/&COUNT_DIVIDER buffer_gets_delta + , ROUND((ss.direct_writes_total-ss_prev.direct_writes_total)/ss.executions_delta/&BYTES_DIVIDER) direct_writes_delta + , '|' seperator +&&_IF_ORA_11gR2_OR_HIGHER , (ss.io_interconnect_bytes_total-ss_prev.io_interconnect_bytes_total)/ss.executions_delta/&BYTES_DIVIDER io_interconnect_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , (ss.physical_read_bytes_total-ss_prev.physical_read_bytes_total)/ss.executions_delta/&BYTES_DIVIDER physical_read_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , (ss.physical_write_bytes_total-ss_prev.physical_write_bytes_total)/ss.executions_delta/&BYTES_DIVIDER physical_write_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , (ss.io_offload_elig_bytes_total-ss_prev.io_offload_elig_bytes_total)/ss.executions_delta/&BYTES_DIVIDER io_offload_elig_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , (ss.io_offload_return_bytes_total-ss_prev.io_offload_return_bytes_total)/ss.executions_delta/&BYTES_DIVIDER io_offload_return_bytes_delta + , ss.sql_profile + from dba_hist_sqlstat ss + , dba_hist_sqlstat ss_prev + , snaps s + where ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND ss.sql_id = s.sql_id + AND ss.plan_hash_value = s.plan_hash_value + AND ss_prev.dbid (+) = s.dbid + AND ss_prev.instance_number (+) = s.instance_number + AND ss_prev.snap_id (+) = s.prev_snap_id + AND ss_prev.sql_id (+) = s.sql_id + AND ss_prev.plan_hash_value (+) = s.plan_hash_value + order by s.end_interval_time , s.instance_number +; + +UNDEFINE sqlid +UNDEFINE days + + +@@footer diff --git a/vg/awr_sqlstats_weekly.sql b/vg/awr_sqlstats_weekly.sql new file mode 100644 index 0000000..77c008d --- /dev/null +++ b/vg/awr_sqlstats_weekly.sql @@ -0,0 +1,198 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats from AWR +* Version : 10.1 and above +* Parameters : 1 - SQL_ID +* 2 - Number of Days (Default 30 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable +* 09-Oct-12 Vishal Gupta Removed the instance_number from output and +* aggregated stats for all instances in output. +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE days +UNDEFINE whereclause +UNDEFINE force_matching_signature + +DEFINE sql_id="&&1" +DEFINE days="&&2" +DEFINE whereclause="&&4" +DEFINE force_matching_signature="" + +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&days','','30','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=999,999 +--DEFINE COUNT_SMALL_DIVIDER="1" +--DEFINE COUNT_SMALL_HEADING="#" +DEFINE COUNT_SMALL_DIVIDER="1000" +DEFINE COUNT_SMALL_HEADING="#1000" +--DEFINE COUNT_SMALL_DIVIDER="1000000" +--DEFINE COUNT_SMALL_HEADING="#mill" + + +DEFINE COUNT_FORMAT=99,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" +--DEFINE COUNT_DIVIDER="1000000" +--DEFINE COUNT_HEADING="million" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=999,999 +--DEFINE TIME_DIVIDER="1" +--DEFINE TIME_HEADING="sec" +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + + + +/************************************/ + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +set term off +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from v$database d + JOIN sys.WRH$_SQLSTAT ss2 on ss2.dbid = d.dbid + where ss2.sql_id = '&&sql_id' and rownum = 1; +set term on +/************************************/ + +Prompt +Prompt *************************************************************************************************** +Prompt * AWR SQL Executions Statistics (Delta) +Prompt * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt *************************************************************************************************** + + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN end_interval_time HEADING "Week|Starting" FORMAT a9 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN force_matching_signature HEADING "Force Matching Signature" FORMAT 999999999999999999999 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&&COUNT_HEADING)" FORMAT 999 +COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + SELECT TO_CHAR(TRUNC(s.end_interval_time,'IW'),'DD-MON-YY') end_interval_time + , ss.force_matching_signature + , max(ss.sql_id) sql_id + --, ss.plan_hash_value + , ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta + , ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta + , ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta + , ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta + , ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta + , ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta + , ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta + , '|' seperator + , SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta +--&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta)/&&COUNT_DIVIDER px_servers_execs_delta + -- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta + , SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta + , SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta + , SUM(ss.buffer_gets_delta)/&&COUNT_DIVIDER buffer_gets_delta + , SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta + , ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta + , '|' seperator +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta + , '|' seperator + from dba_hist_sqlstat ss + , dba_hist_snapshot s + , v$database d + , v$system_parameter p + where p.name = 'db_block_size' + AND ss.instance_number = s.instance_number + AND ss.dbid = s.dbid + AND ss.snap_id = s.snap_id + AND ss.dbid = d.dbid + AND s.end_interval_time > SYSDATE - &&days + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature LIKE '&&force_matching_signature' + --AND ss.executions_delta > 0 + &&whereclause + GROUP BY ss.dbid + , TRUNC(s.end_interval_time,'IW') + , ss.force_matching_signature + --, ss.plan_hash_value + ORDER BY TRUNC(s.end_interval_time,'IW') + , ss.force_matching_signature + --, ss.plan_hash_value +; + +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE force_matching_signature +UNDEFINE whereclause + + +@@footer diff --git a/vg/awr_sqltext.sql b/vg/awr_sqltext.sql new file mode 100644 index 0000000..3b25704 --- /dev/null +++ b/vg/awr_sqltext.sql @@ -0,0 +1,60 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Text from AWR repository +* Parameters : 1 - SQL_ID +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Oct-15 Vishal Gupta Added FORCE_MATCHING_SIGNATURE in the output heading +* 08-Mar-12 Vishal Gupta Initial version +* +* +*/ + +UNDEFINE sqlid +UNDEFINE force_matching_signature + + +DEFINE sqlid="&&1" +DEFINE force_matching_signature="" + +SET long 4000000 +SET longchunksize 400000 +SET pages 0 +set lines 300 + + + + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from v$database d + , dba_hist_sqlstat ss2 + where d.dbid = ss2.dbid + AND ss2.sql_id = '&&sqlid' + and rownum = 1 +; + +Prompt ******************************************************** +Prompt * SQL Text for SQLID = &&sqlid +Prompt * Force Matching Signature = &&force_matching_signature +Prompt ******************************************************** + +COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP + +SELECT s.sql_text +FROM dba_hist_sqltext s + , v$database d +WHERE d.dbid = s.dbid + AND s.sql_id = '&&sqlid' +; + + +@@footer diff --git a/vg/awr_sqltext_expand.sql b/vg/awr_sqltext_expand.sql new file mode 100644 index 0000000..ffbeceb --- /dev/null +++ b/vg/awr_sqltext_expand.sql @@ -0,0 +1,53 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Expanded SQL Text from AWR repository +* Parameters : 1 - SQL_ID +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 29-Jul-15 Vishal Gupta Created +* +* +*/ + +DEFINE sqlid="&&1" + +SET long 4000000 +SET longchunksize 400000 +SET pages 0 +set lines 300 + +COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP + +Prompt *********************************************** +Prompt * Expanded SQL Text for SQLID = &&sqlid +Prompt *********************************************** + +VARIABLE EXPANDED_SQLTEXT CLOB; + +DECLARE + L_SQLTEXT CLOB; +BEGIN + SELECT s.sql_text + INTO L_SQLTEXT + FROM dba_hist_sqltext s + , v$database d + WHERE d.dbid = s.dbid + AND s.sql_id = '&&sqlid' + ; + sys.dbms_sql2.expand_sql_text(L_SQLTEXT,:EXPANDED_SQLTEXT); +EXCEPTION + WHEN NO_DATA_FOUND THEN + NULL; +END; +/ + +print :EXPANDED_SQLTEXT + +@@footer diff --git a/vg/awr_sqltext_search.sql b/vg/awr_sqltext_search.sql new file mode 100644 index 0000000..5c5dbe2 --- /dev/null +++ b/vg/awr_sqltext_search.sql @@ -0,0 +1,89 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Search SQL Text from AWR repository to find SQLId +* Parameters : 1 - SQLText to search (Use % as wild card) +* 2 - Number of days history to search (Default 7 days) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-JUL-14 Vishal Gupta Added plan_hash_value to output +* 12-JUN-13 Vishal Gupta Added force_matching_signature to output +* 08-MAR-12 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sqltext +UNDEFINE no_of_days + +DEFINE sqltext="&&1" +DEFINE no_of_days="&&2" + +COLUMN _no_of_days NEW_VALUE no_of_days NOPRINT + +set term off +SELECT DECODE('&&no_of_days','','7','&&no_of_days') "_no_of_days" +FROM DUAL; +set term on + + +PROMPT ************************************************************************ +PROMPT * AWR SQL Text Search +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQLText to Search - "&&sqltext" +PROMPT * - NoOfDays - "&&no_of_days" +PROMPT ************************************************************************ + +COLUMN END_INTERVAL_TIME HEADING "Max Snap Time" FORMAT a18 +COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP +COLUMN force_matching_signature HEADING "FORCE_MATCHING_SIGNATURE" FORMAT 999999999999999999999 + +set timing on + +/* +SELECT --+ FULL(sql) parallel(12) + sql.sql_id + FROM dba_hist_sqltext sql + WHERE upper(sql.sql_text) like upper(q'[&&sqltext]') + AND upper(SQL.sql_text) NOT LIKE upper('%dba_hist_sqltext%') +; +*/ + +SELECT --+ FIRST_ROWS LEADING(s) USE_NL(sql ss s ) INDEX(ss.sn) FULL(s) + -- FULL(s) FULL(ss) FULL(sql) parallel(12) + TO_CHAR(max(s.END_INTERVAL_TIME),'DD-MON-YY HH24:MI:SS') END_INTERVAL_TIME + , ss.sql_id + , ss.plan_hash_value + , ss.force_matching_signature + FROM v$database d + , dba_hist_snapshot s + , dba_hist_sqlstat ss + , dba_hist_sqltext sql + WHERE d.dbid = s.dbid + AND s.end_interval_time > sysdate - &&no_of_days + AND s.dbid = ss.dbid + AND s.instance_number = ss.instance_number + AND s.snap_id = ss.snap_id + AND ss.dbid = sql.dbid + AND ss.sql_id = sql.sql_id + AND upper(sql.sql_text) like upper(q'[&&sqltext]') + AND upper(SQL.sql_text) NOT LIKE upper('%dba_hist_sqltext%') +GROUP BY ss.sql_id + , ss.plan_hash_value + , ss.force_matching_signature +ORDER BY max(s.END_INTERVAL_TIME) desc +; + +set timing off + +@@footer diff --git a/vg/awr_statistics.sql b/vg/awr_statistics.sql new file mode 100644 index 0000000..c5ebde8 --- /dev/null +++ b/vg/awr_statistics.sql @@ -0,0 +1,88 @@ +@@header + +PROMPT +PROMPT #################################################################################### +PROMPT NOT COMPLETED YET +PROMPT #################################################################################### + + +/* +* +* Author : Vishal Gupta +* Purpose : Display AWR Statistics values +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - Statistic Name (Use % as wildcard, \ as escape) +* +* dbid AND instancenumber are optional. +* If not passes then it takes current instance's dbid AND instancenumber +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Apr-12 Vishal Gupta Created +* +*/ + + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE statname="&4" + +set pages 100 + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_FORMAT=9,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + + + +PROMPT +PROMPT #################################################################################### +PROMPT # S Y S T E M S T A T I S T I C S (From AWR Repository) +PROMPT # +PROMPT # - For Instance ID - &INST_ID +PROMPT # - Between &&FROM_TIMESTAMP AND &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT # - Statistic - &&statname +PROMPT # +PROMPT #################################################################################### + + +COLUMN end_interval_time HEADING "Snap Time" FORMAT a18 +COLUMN stat_name HEADING "Statistic Name" FORMAT a30 +COLUMN value HEADING "Statistic Value" FORMAT 999,999,999,999,999,999,999 + +SELECT MAX(TO_CHAR(s.end_interval_time,'DD-MON-YY hh24')) end_interval_time + , ss.stat_name + , SUM(ss.value) value +FROM dba_hist_snapshot s + , dba_hist_sysstat ss + , v$database d +where s.dbid = d.dbid + AND s.dbid = ss.dbid + AND s.instance_number = ss.instance_number + AND s.snap_id = ss.snap_id + AND upper(ss.stat_name) LIKE UPPER('&&statname') ESCAPE '\' + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') +GROUP BY s.dbid, TO_CHAR(s.end_interval_time,'DD-MON-YY hh24'), ss.stat_name +ORDER BY TO_DATE(MAX(TO_CHAR(s.end_interval_time,'DD-MON-YY hh24')),'DD-Mon-YY hh24') asc +/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE FROM_TIMESTAMP + + +@@footer \ No newline at end of file diff --git a/vg/awr_statistics_delta.sql b/vg/awr_statistics_delta.sql new file mode 100644 index 0000000..7a37793 --- /dev/null +++ b/vg/awr_statistics_delta.sql @@ -0,0 +1,123 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display AWR Statistics value delta +* All figures delta between two consecutive snapshots +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - Statistic Name (Use % as wildcard, \ as escape) +* +* If not passes then it takes current instance's dbid and instancenumber +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Apr-12 Vishal Gupta First Draft +* +*/ + + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE STAT_NAME + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE STAT_NAME="&4" + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_FORMAT=9,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +--DEFINE COUNT_DIVIDER="1024" +--DEFINE COUNT_HEADING="KB" +--DEFINE COUNT_DIVIDER="1024/1024" +--DEFINE COUNT_HEADING="MB" + + + +PROMPT +PROMPT *********************************************************************** +PROMPT * System Statistics Delta (From AWR Repository) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Instance Number = &INST_ID +PROMPT * - From Timestamp = "&&from_timestamp" (YYYY-MM-DD HH24:MI:SS) +PROMPT * - To Timestamp = "&&to_timestamp" (YYYY-MM-DD HH24:MI:SS) +PROMPT * - Statistic Name = "&&STAT_NAME" +PROMPT *********************************************************************** + +COLUMN end_interval_time HEADING "Snap Time|(DD-MON-YY HH24:MI)" FORMAT a19 +COLUMN stat_name HEADING "Statistic Name" FORMAT a30 +COLUMN value_delta_all HEADING "Total|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta1 HEADING "Inst1|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta2 HEADING "Inst2|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta3 HEADING "Inst3|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta4 HEADING "Inst4|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta5 HEADING "Inst5|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta6 HEADING "Inst6|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta7 HEADING "Inst7|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta8 HEADING "Inst8|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta9 HEADING "Inst9|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta10 HEADING "Inst10|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN value_delta11 HEADING "Inst11|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + ) +SELECT /*+ USE_NL(s1 ss1 ss_prev) */ + TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + --, ss.stat_name + , SUM(ss.value - LEAST(ss_prev.value,ss.value))/&&COUNT_DIVIDER value_delta_all + , SUM(DECODE(ss.instance_number,1,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta1 + , SUM(DECODE(ss.instance_number,2,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta2 + , SUM(DECODE(ss.instance_number,3,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta3 + , SUM(DECODE(ss.instance_number,4,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta4 + , SUM(DECODE(ss.instance_number,5,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta5 + , SUM(DECODE(ss.instance_number,6,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta6 + , SUM(DECODE(ss.instance_number,7,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta7 + , SUM(DECODE(ss.instance_number,8,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta8 + , SUM(DECODE(ss.instance_number,9,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta9 + , SUM(DECODE(ss.instance_number,10,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta10 + , SUM(DECODE(ss.instance_number,11,ss.value - LEAST(ss_prev.value,ss.value)))/&&COUNT_DIVIDER value_delta11 +FROM snap s + , dba_hist_sysstat ss + , dba_hist_sysstat ss_prev +where s.prev_snap_id IS NOT NULL +and s.dbid = ss_prev.dbid +and s.instance_number = ss_prev.instance_number +and s.prev_snap_id = ss_prev.snap_id +and s.dbid = ss.dbid +and s.instance_number = ss.instance_number +and s.snap_id = ss.snap_id +and ss_prev.stat_name = ss.stat_name +and upper(ss.stat_name) LIKE UPPER('&&STAT_NAME') ESCAPE '\' +GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') + , ss.stat_name +ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc +/ + +@@footer \ No newline at end of file diff --git a/vg/awr_sysmetric_per_sec.sql b/vg/awr_sysmetric_per_sec.sql new file mode 100644 index 0000000..8705347 --- /dev/null +++ b/vg/awr_sysmetric_per_sec.sql @@ -0,0 +1,108 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display system metric per sec from AWR repository +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - Statistics Name (Exact Name, use @statname script to find exact name) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE STAT_NAME="&4" + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + + +DEFINE FORMAT="9999" +DEFINE TOTAL_FORMAT="999,999" + +--DEFINE HEADING="#" +--DEFINE DIVIDER="1" +--DEFINE HEADING="'1000s" +--DEFINE DIVIDER="1000" + +--DEFINE HEADING="min" +--DEFINE DIVIDER="60/100" +--DEFINE HEADING="hr" +--DEFINE DIVIDER="60/60/100" + +--DEFINE HEADING="KB" +--DEFINE DIVIDER="1024" +--DEFINE HEADING="MB" +--DEFINE DIVIDER="1024/1024" +DEFINE HEADING="GB" +DEFINE DIVIDER="1024/1024/1024" + +DEFINE TIME_FORMAT="DD-MON-YY HH24:MI" +--DEFINE TIME_FORMAT="DD-MON-YY HH24" + +PROMPT +PROMPT #################################################################################### +PROMPT # +PROMPT # S Y S T E M S T A T I S T I C S T R E N D +PROMPT # +PROMPT # From AWR Repository (Absolute figures , not delta) +PROMPT # - Statistic Name - "&&STAT_NAME" +PROMPT # - For Instance ID - &INST_ID +PROMPT # - Snap Between - &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS) +PROMPT # +PROMPT # (All Figures are in &&HEADING) +PROMPT # +PROMPT #################################################################################### + +COLUMN time HEADING "Time|&&TIME_FORMAT" FORMAT a18 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN average_active_session HEADING "Avg|Active|Session" FORMAT 9999999 +COLUMN redo HEADING "Redo|PerSec" FORMAT 9999999 +COLUMN logons HEADING "Logons|PerSec" FORMAT 9999999 +COLUMN user_calls HEADING "UserCalls|PerSec" FORMAT 9999999 +COLUMN executions HEADING "Exec|PerSec" FORMAT 9999999 +COLUMN physical_reads HEADING "PhyReads|PerSec" FORMAT 9999999 +COLUMN physical_writes HEADING "PhyWrites|PerSec" FORMAT 9999999 +COLUMN network_traffic_volume HEADING "Network|Traffic|Bytes|PerSec" FORMAT 9999999 +COLUMN user_transactions HEADING "Transactions|PerSec" FORMAT 9999999 + +SELECT TO_CHAR(m.end_time,'&&TIME_FORMAT') Time + , m.instance_number + , AVG(DECODE(m.metric_name,'Average Active Sessions',m.value,0)) average_active_session + , AVG(DECODE(m.metric_name,'Redo Generated Per Sec',m.value,0)) redo + , AVG(DECODE(m.metric_name,'Logons Per Sec',m.value,0)) logons + , AVG(DECODE(m.metric_name,'User Calls Per Sec',m.value,0)) user_calls + , AVG(DECODE(m.metric_name,'Executions Per Sec',m.value,0)) executions + , AVG(DECODE(m.metric_name,'Physical Reads Per Sec',m.value,0)) physical_reads + , AVG(DECODE(m.metric_name,'Physical Writes Per Sec',m.value,0)) physical_writes + , AVG(DECODE(m.metric_name,'Network Traffic Volume Per Sec',m.value,0)) network_traffic_volume + , AVG(DECODE(m.metric_name,'User Transaction Per Sec',m.value,0)) user_transactions + FROM dba_hist_sysmetric_history m + JOIN v$database d ON d.dbid = m.dbid +GROUP BY TO_CHAR(m.end_time,'&&TIME_FORMAT') + , m.instance_number +ORDER BY TO_DATE(TO_CHAR(m.end_time,'&&TIME_FORMAT'),'&&TIME_FORMAT') +; + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE FROM_TIMESTAMP +UNDEFINE STAT_NAME + + +@@footer diff --git a/vg/awr_system_event_time.sql b/vg/awr_system_event_time.sql new file mode 100644 index 0000000..851f0bb --- /dev/null +++ b/vg/awr_system_event_time.sql @@ -0,0 +1,103 @@ +@@header +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display system event times from AWR +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-MAY-14 Vishal Gupta Created +*/ +set term on + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE event_name +UNDEFINE days + +DEFINE event_name="&&1" +DEFINE days="&&2" + +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&days','','3','&&days') "_days" +FROM DUAL; +set term on + + +Prompt +Prompt ************************************************************** +Prompt * AWR System Wide Wait Events (In seconds) +PROMPT * (Only snapshots with non-zero values are displayed) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Event Name = '&&event_name' +PROMPT * - Days = '&&days' +Prompt ************************************************************** + +COLUMN end_interval_time HEADING "Snap Time" FORMAT a15 +COLUMN all_Inst HEADING "All|Inst|(sec)" FORMAT 999,999,999,999 +COLUMN inst1 HEADING "inst1|(sec)" FORMAT 999,999,999 +COLUMN inst2 HEADING "inst2|(sec)" FORMAT 999,999,999 +COLUMN inst3 HEADING "inst3|(sec)" FORMAT 999,999,999 +COLUMN inst4 HEADING "inst4|(sec)" FORMAT 999,999,999 +COLUMN inst5 HEADING "inst5|(sec)" FORMAT 999,999,999 +COLUMN inst6 HEADING "inst6|(sec)" FORMAT 999,999,999 +COLUMN inst7 HEADING "inst7|(sec)" FORMAT 999,999,999 +COLUMN inst8 HEADING "inst8|(sec)" FORMAT 999,999,999 +COLUMN event_name HEADING "Event Name" FORMAT a40 TRUNCATE + +WITH snapshots AS + (SELECT /*+ NO_MERGE */ + s.dbid + , s.instance_number + , s.snap_id + , s.end_interval_time + , lag(s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.snap_id) prev_snap_id + FROM v$database d + JOIN dba_hist_snapshot s ON s.dbid = d.dbid + WHERE 1=1 + AND s.END_INTERVAL_TIME > sysdate - &days - (1/24) + ) +SELECT /*+ USE_NL(s e e_prev) */ + TO_CHAR(TRUNC(s.end_interval_time,'MI'),'DD-MON-YY HH24:MI') end_interval_time + , ROUND(SUM(DECODE(e.instance_number,1,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) All_Inst + , ROUND(SUM(DECODE(e.instance_number,1,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) inst1 + , ROUND(SUM(DECODE(e.instance_number,2,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) inst2 + , ROUND(SUM(DECODE(e.instance_number,3,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) inst3 + , ROUND(SUM(DECODE(e.instance_number,4,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) inst4 + , ROUND(SUM(DECODE(e.instance_number,5,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) inst5 + , ROUND(SUM(DECODE(e.instance_number,6,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) inst6 + , ROUND(SUM(DECODE(e.instance_number,7,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) inst7 + , ROUND(SUM(DECODE(e.instance_number,8,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) inst8 + , e.event_name + FROM snapshots s + JOIN DBA_HIST_SYSTEM_EVENT e ON e.dbid = s.dbid and e.instance_number = s.instance_number and e.snap_id = s.snap_id + JOIN DBA_HIST_SYSTEM_EVENT prev_e ON prev_e.dbid = s.dbid and prev_e.instance_number = s.instance_number and prev_e.snap_id = s.prev_snap_id and e.event_id = prev_e.event_id +WHERE 1=1 +and e.event_name like '&&event_name' +GROUP BY e.dbid + , TRUNC(s.end_interval_time,'MI') + , e.event_name +having + ROUND(SUM(DECODE(e.instance_number,1,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) > 0 + OR ROUND(SUM(DECODE(e.instance_number,2,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) > 0 + OR ROUND(SUM(DECODE(e.instance_number,3,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) > 0 + OR ROUND(SUM(DECODE(e.instance_number,4,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) > 0 + OR ROUND(SUM(DECODE(e.instance_number,5,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) > 0 + OR ROUND(SUM(DECODE(e.instance_number,6,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) > 0 + OR ROUND(SUM(DECODE(e.instance_number,7,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) > 0 + OR ROUND(SUM(DECODE(e.instance_number,8,(e.time_waited_micro - NVL( prev_e.time_waited_micro,0) )/1000000 ,0) )) > 0 +ORDER BY e.dbid + , TRUNC(s.end_interval_time,'MI') + , e.event_name +; + +@@footer diff --git a/vg/awr_tbs.sql b/vg/awr_tbs.sql new file mode 100644 index 0000000..ff36880 --- /dev/null +++ b/vg/awr_tbs.sql @@ -0,0 +1,143 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage history from AWR repository +* Parameters : 1 - tablespace_name (Use % as wildcard, Default value '%') +* 2 - Number of days (Default value '3') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Apr-16 Vishal Gupta Changed script to make it compatible with 10g +* 03-Sep-14 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE tablespace_name +UNDEFINE days +UNDEFINE WHERECLAUSE + +DEFINE tablespace_name="&&1" +DEFINE days="&&2" +DEFINE WHERECLAUSE="&&3" + +set term off +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT +COLUMN _DAYS NEW_VALUE DAYS NOPRINT + +SELECT UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME" + , UPPER(DECODE('&&DAYS','','3','&&DAYS')) "_DAYS" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024" +DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="GB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" + +DEFINE LARGE_BYTES_FORMAT="9,999,999" +--DEFINE LARGE_BYTES_HEADING="KB" +--DEFINE LARGE_BYTES_DIVIDER="1024" +DEFINE LARGE_BYTES_HEADING="MB" +DEFINE LARGE_BYTES_DIVIDER="1024/1024" +--DEFINE LARGE_BYTES_HEADING="GB" +--DEFINE LARGE_BYTES_DIVIDER="1024/1024/1024" + + +PROMPT ***************************************************************** +PROMPT * T A B L E S P A C E U S A G E H I S T O R Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - Tablespace Name = '&&TABLESPACE_NAME' +PROMPT * - Days = '&&DAYS' +PROMPT * - WHERECLAUSE = "&&WHERECLAUSE" +PROMPT ***************************************************************** + + +COLUMN end_interval_time HEADING "Timestamp" FORMAT a15 +COLUMN tsname HEADING "Tablespace Name" FORMAT a30 +COLUMN alloc HEADING "Alloc|(&&LARGE_BYTES_HEADING)" FORMAT &&LARGE_BYTES_FORMAT ON +COLUMN used HEADING "Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN free HEADING "Free|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN MAXAlloc HEADING "Max|Alloc|(&&LARGE_BYTES_HEADING)" FORMAT &&LARGE_BYTES_FORMAT ON +COLUMN MAXUsed HEADING "Max|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN MAXFree HEADING "Max|Free|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN used_percent HEADING "Used|(%)" FORMAT 999.9 ON +COLUMN free_percent HEADING "Free|(%)" FORMAT 999.9 ON +COLUMN max_used_percent HEADING "Max|Used|(%)" FORMAT 999.9 ON +COLUMN max_free_percent HEADING "Max|Free|(%)" FORMAT 999.9 ON +COLUMN prev_alloc HEADING "Prev|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN prev_Used HEADING "Prev|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN prev_MAXSize HEADING "Prev|MaxSize|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN size_diff HEADING "Alloc|Increase|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN usedsize_diff HEADING "Used|Increase|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN maxsize_diff HEADING "MaxSize|Increase|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN separator HEADING "!|!|!" FORMAT A1 ON + +WITH tbspc_space_usage AS +(SELECT su.* + , t.tsname + , p.VALUE block_size + , LAG (su.tablespace_size) OVER (PARTITION BY su.dbid, su.tablespace_id ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') ) prev_tablespace_size + , LAG (su.tablespace_usedsize) OVER (PARTITION BY su.dbid, su.tablespace_id ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') ) prev_tablespace_usedsize + , LAG (su.tablespace_maxsize) OVER (PARTITION BY su.dbid, su.tablespace_id ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') ) prev_tablespace_maxsize +FROM dba_hist_tbspc_space_usage su + , dba_hist_tablespace t + , v$system_parameter p + , v$database d +WHERE su.dbid = d.dbid +AND su.dbid = t.dbid +AND su.tablespace_id = t.ts# +AND p.NAME = 'db_block_size' +AND UPPER(t.tsname) LIKE UPPER('&&TABLESPACE_NAME') ESCAPE '\' +AND TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') > SYSDATE - &&DAYS +) +SELECT /* Not using hints --FIRST_ROWS NO_MERGE USE_NL(su t ) LEADING(su) */ + TO_CHAR(TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS'),'DD-MON-YY HH24:MI') end_interval_time + , su.tsname + , '!' separator + , (ROUND(su.tablespace_size*su.block_size/&&LARGE_BYTES_DIVIDER)) alloc + , (ROUND(su.tablespace_usedsize*su.block_size/&&BYTES_DIVIDER)) Used + , (ROUND((su.tablespace_size - su.tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER)) free + , ROUND((su.tablespace_usedsize/su.tablespace_size)*100,2) used_percent + , ROUND(((su.tablespace_size - su.tablespace_usedsize)/su.tablespace_size)*100,2) free_percent + , '!' separator + , (ROUND(su.tablespace_maxsize*su.block_size/&&LARGE_BYTES_DIVIDER)) MAXAlloc + , (ROUND((su.tablespace_maxsize - su.tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER)) MAXFree + , ROUND((su.tablespace_usedsize/su.tablespace_maxsize)*100,2) max_used_percent + , ROUND(((su.tablespace_maxsize - su.tablespace_usedsize)/su.tablespace_maxsize)*100,2) max_free_percent + --, (ROUND(su.prev_tablespace_size*su.block_size/&&BYTES_DIVIDER)) prev_alloc + --, (ROUND(su.prev_tablespace_usedsize*su.block_size/&&BYTES_DIVIDER)) prev_Used + --, (ROUND(su.prev_tablespace_maxsize*su.block_size/&&BYTES_DIVIDER)) prev_MAXSize + , '!' separator + , ROUND((su.tablespace_size - su.prev_tablespace_size)*su.block_size/&&BYTES_DIVIDER) size_diff + , ROUND((su.tablespace_usedsize - su.prev_tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER) usedsize_diff + , ROUND((su.tablespace_maxsize - su.prev_tablespace_maxsize)*su.block_size/&&BYTES_DIVIDER) maxsize_diff +FROM tbspc_space_usage su +WHERE 1=1 + AND ( ( ROUND((su.tablespace_size - su.prev_tablespace_size)*su.block_size/1024/1024) <> 0 + OR ROUND((su.tablespace_usedsize - su.prev_tablespace_usedsize)*su.block_size/1024/1024) <> 0 + OR ROUND((su.tablespace_maxsize - su.prev_tablespace_maxsize)*su.block_size/1024/1024) <> 0 + ) + OR + TO_CHAR(TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS'),'HH24:MI') = '00:00' + ) + &&WHERECLAUSE +ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') +; + +@@footer diff --git a/vg/awr_tbs2.sql b/vg/awr_tbs2.sql new file mode 100644 index 0000000..20a60be --- /dev/null +++ b/vg/awr_tbs2.sql @@ -0,0 +1,130 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage history from AWR repository +* Parameters : 1 - tablespace_name (Use % as wildcard, Default value '%') +* 2 - Number of days (Default value '3') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 03-Sep-14 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE tablespace_name +UNDEFINE days +UNDEFINE WHERECLAUSE + +DEFINE tablespace_name="&&1" +DEFINE days="&&2" +DEFINE WHERECLAUSE="&&3" + +set term off +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT +COLUMN _DAYS NEW_VALUE DAYS NOPRINT + +SELECT UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME" + , UPPER(DECODE('&&DAYS','','3','&&DAYS')) "_DAYS" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="GB" +DEFINE BYTES_DIVIDER="1024/1024/1024" + + +PROMPT ***************************************************************** +PROMPT * T A B L E S P A C E U S A G E H I S T O R Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - Tablespace Name = '&&TABLESPACE_NAME' +PROMPT * - Days = '&&DAYS' +PROMPT * - WHERECLAUSE = "&&WHERECLAUSE" +PROMPT ***************************************************************** + + +COLUMN end_interval_time HEADING "Timestamp" FORMAT a15 +COLUMN tsname HEADING "Tablespace Name" FORMAT a23 +COLUMN alloc HEADING "Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN used HEADING "Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN free HEADING "Free|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN MAXAlloc HEADING "Max|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN MAXUsed HEADING "Max|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN MAXFree HEADING "Max|Free|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN used_percent HEADING "Used|(%)" FORMAT 999.9 ON +COLUMN free_percent HEADING "Free|(%)" FORMAT 999.9 ON +COLUMN max_used_percent HEADING "Max|Used|(%)" FORMAT 999.9 ON +COLUMN max_free_percent HEADING "Max|Free|(%)" FORMAT 999.9 ON +COLUMN prev_alloc HEADING "Prev|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN prev_Used HEADING "Prev|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN prev_MAXSize HEADING "Prev|MaxSize|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN size_diff HEADING "Alloc|Increase|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN usedsize_diff HEADING "Used|Increase|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN maxsize_diff HEADING "MaxSize|Increase|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN separator HEADING "!|!|!" FORMAT A1 ON + +WITH tbspc_space_usage AS +(SELECT su.* + , t.tsname + , p.VALUE block_size + , LAG (su.tablespace_size) OVER (PARTITION BY su.dbid, su.tablespace_id ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') ) prev_tablespace_size + , LAG (su.tablespace_usedsize) OVER (PARTITION BY su.dbid, su.tablespace_id ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') ) prev_tablespace_usedsize + , LAG (su.tablespace_maxsize) OVER (PARTITION BY su.dbid, su.tablespace_id ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') ) prev_tablespace_maxsize +FROM dba_hist_tbspc_space_usage su + , dba_hist_tablespace t + , v$system_parameter p + , v$database d +WHERE su.dbid = d.dbid +AND su.dbid = t.dbid +AND su.tablespace_id = t.ts# +AND p.NAME = 'db_block_size' +AND UPPER(t.tsname) LIKE UPPER('&&TABLESPACE_NAME') ESCAPE '\' +AND TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') > SYSDATE - &&DAYS +) +SELECT /* Not using hints --FIRST_ROWS NO_MERGE USE_NL(su t ) LEADING(su) */ + TO_CHAR(TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS'),'DD-MON-YY HH24:MI') end_interval_time + , su.tsname + , '!' separator + , (ROUND(su.tablespace_size*su.block_size/&&BYTES_DIVIDER)) alloc + , (ROUND(su.tablespace_usedsize*su.block_size/&&BYTES_DIVIDER)) Used + , (ROUND((su.tablespace_size - su.tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER)) free + , ROUND((su.tablespace_usedsize/su.tablespace_size)*100,2) used_percent + , ROUND(((su.tablespace_size - su.tablespace_usedsize)/su.tablespace_size)*100,2) free_percent + , '!' separator + , (ROUND(su.tablespace_maxsize*su.block_size/&&BYTES_DIVIDER)) MAXAlloc + , (ROUND((su.tablespace_maxsize - su.tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER)) MAXFree + , ROUND((su.tablespace_usedsize/su.tablespace_maxsize)*100,2) max_used_percent + , ROUND(((su.tablespace_maxsize - su.tablespace_usedsize)/su.tablespace_maxsize)*100,2) max_free_percent + --, (ROUND(su.prev_tablespace_size*su.block_size/&&BYTES_DIVIDER)) prev_alloc + --, (ROUND(su.prev_tablespace_usedsize*su.block_size/&&BYTES_DIVIDER)) prev_Used + --, (ROUND(su.prev_tablespace_maxsize*su.block_size/&&BYTES_DIVIDER)) prev_MAXSize + , '!' separator + , ROUND((su.tablespace_size - su.prev_tablespace_size)*su.block_size/&&BYTES_DIVIDER) size_diff + , ROUND((su.tablespace_usedsize - su.prev_tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER) usedsize_diff + , ROUND((su.tablespace_maxsize - su.prev_tablespace_maxsize)*su.block_size/&&BYTES_DIVIDER) maxsize_diff +FROM tbspc_space_usage su +WHERE ( ROUND((su.tablespace_size - su.prev_tablespace_size)*su.block_size/&&BYTES_DIVIDER) <> 0 + OR ROUND((su.tablespace_usedsize - su.prev_tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER) <> 0 + OR ROUND((su.tablespace_maxsize - su.prev_tablespace_maxsize)*su.block_size/&&BYTES_DIVIDER) <> 0 + ) + &&WHERECLAUSE +ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') +; + +@@footer diff --git a/vg/awr_tbs_daily.sql b/vg/awr_tbs_daily.sql new file mode 100644 index 0000000..4261c70 --- /dev/null +++ b/vg/awr_tbs_daily.sql @@ -0,0 +1,145 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage history from AWR repository +* Parameters : 1 - tablespace_name (Use % as wildcard, Default value '%') +* 2 - Number of days (Default value '3') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Jan-17 Vishal Gupta Create copy from awr_tbs.sql to show midnight sizes +* 12-Apr-16 Vishal Gupta Changed script to make it compatible with 10g +* 03-Sep-14 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE tablespace_name +UNDEFINE days +UNDEFINE WHERECLAUSE + +DEFINE tablespace_name="&&1" +DEFINE days="&&2" +DEFINE WHERECLAUSE="&&3" + +set term off +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT +COLUMN _DAYS NEW_VALUE DAYS NOPRINT + +SELECT UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME" + , UPPER(DECODE('&&DAYS','','3','&&DAYS')) "_DAYS" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024" +DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="GB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" + +DEFINE LARGE_BYTES_FORMAT="9,999,999" +--DEFINE LARGE_BYTES_HEADING="KB" +--DEFINE LARGE_BYTES_DIVIDER="1024" +DEFINE LARGE_BYTES_HEADING="MB" +DEFINE LARGE_BYTES_DIVIDER="1024/1024" +--DEFINE LARGE_BYTES_HEADING="GB" +--DEFINE LARGE_BYTES_DIVIDER="1024/1024/1024" + + +PROMPT ***************************************************************** +PROMPT * T A B L E S P A C E U S A G E H I S T O R Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - Tablespace Name = '&&TABLESPACE_NAME' +PROMPT * - Days = '&&DAYS' +PROMPT * - WHERECLAUSE = "&&WHERECLAUSE" +PROMPT ***************************************************************** + + +COLUMN end_interval_time HEADING "Timestamp" FORMAT a15 +COLUMN tsname HEADING "Tablespace Name" FORMAT a30 +COLUMN alloc HEADING "Alloc|(&&LARGE_BYTES_HEADING)" FORMAT &&LARGE_BYTES_FORMAT ON +COLUMN used HEADING "Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN free HEADING "Free|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN MAXAlloc HEADING "Max|Alloc|(&&LARGE_BYTES_HEADING)" FORMAT &&LARGE_BYTES_FORMAT ON +COLUMN MAXUsed HEADING "Max|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN MAXFree HEADING "Max|Free|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN used_percent HEADING "Used|(%)" FORMAT 999.9 ON +COLUMN free_percent HEADING "Free|(%)" FORMAT 999.9 ON +COLUMN max_used_percent HEADING "Max|Used|(%)" FORMAT 999.9 ON +COLUMN max_free_percent HEADING "Max|Free|(%)" FORMAT 999.9 ON +COLUMN prev_alloc HEADING "Prev|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN prev_Used HEADING "Prev|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN prev_MAXSize HEADING "Prev|MaxSize|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN size_diff HEADING "Alloc|Increase|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN usedsize_diff HEADING "Used|Increase|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN maxsize_diff HEADING "MaxSize|Increase|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT ON +COLUMN separator HEADING "!|!|!" FORMAT A1 ON + +WITH tbspc_space_usage AS +(SELECT su.* + , t.tsname + , p.VALUE block_size + , LAG (su.tablespace_size) OVER (PARTITION BY su.dbid, su.tablespace_id ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') ) prev_tablespace_size + , LAG (su.tablespace_usedsize) OVER (PARTITION BY su.dbid, su.tablespace_id ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') ) prev_tablespace_usedsize + , LAG (su.tablespace_maxsize) OVER (PARTITION BY su.dbid, su.tablespace_id ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') ) prev_tablespace_maxsize +FROM dba_hist_tbspc_space_usage su + , dba_hist_tablespace t + , v$system_parameter p + , v$database d +WHERE su.dbid = d.dbid +AND su.dbid = t.dbid +AND su.tablespace_id = t.ts# +AND p.NAME = 'db_block_size' +AND UPPER(t.tsname) LIKE UPPER('&&TABLESPACE_NAME') ESCAPE '\' +AND TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') > SYSDATE - &&DAYS +) +SELECT /* Not using hints --FIRST_ROWS NO_MERGE USE_NL(su t ) LEADING(su) */ + TO_CHAR(TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS'),'DD-MON-YY HH24:MI') end_interval_time + , su.tsname + , '!' separator + , (ROUND(su.tablespace_size*su.block_size/&&LARGE_BYTES_DIVIDER)) alloc + , (ROUND(su.tablespace_usedsize*su.block_size/&&BYTES_DIVIDER)) Used + , (ROUND((su.tablespace_size - su.tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER)) free + , ROUND((su.tablespace_usedsize/su.tablespace_size)*100,2) used_percent + , ROUND(((su.tablespace_size - su.tablespace_usedsize)/su.tablespace_size)*100,2) free_percent + , '!' separator + , (ROUND(su.tablespace_maxsize*su.block_size/&&LARGE_BYTES_DIVIDER)) MAXAlloc + , (ROUND((su.tablespace_maxsize - su.tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER)) MAXFree + , ROUND((su.tablespace_usedsize/su.tablespace_maxsize)*100,2) max_used_percent + , ROUND(((su.tablespace_maxsize - su.tablespace_usedsize)/su.tablespace_maxsize)*100,2) max_free_percent + --, (ROUND(su.prev_tablespace_size*su.block_size/&&BYTES_DIVIDER)) prev_alloc + --, (ROUND(su.prev_tablespace_usedsize*su.block_size/&&BYTES_DIVIDER)) prev_Used + --, (ROUND(su.prev_tablespace_maxsize*su.block_size/&&BYTES_DIVIDER)) prev_MAXSize + , '!' separator + , ROUND((su.tablespace_size - su.prev_tablespace_size)*su.block_size/&&BYTES_DIVIDER) size_diff + , ROUND((su.tablespace_usedsize - su.prev_tablespace_usedsize)*su.block_size/&&BYTES_DIVIDER) usedsize_diff + , ROUND((su.tablespace_maxsize - su.prev_tablespace_maxsize)*su.block_size/&&BYTES_DIVIDER) maxsize_diff +FROM tbspc_space_usage su +WHERE 1=1 + AND ( + --( ROUND((su.tablespace_size - su.prev_tablespace_size)*su.block_size/1024/1024) <> 0 + -- OR ROUND((su.tablespace_usedsize - su.prev_tablespace_usedsize)*su.block_size/1024/1024) <> 0 + -- OR ROUND((su.tablespace_maxsize - su.prev_tablespace_maxsize)*su.block_size/1024/1024) <> 0 + -- ) + --OR + TO_CHAR(TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS'),'HH24:MI') = '00:00' + ) + &&WHERECLAUSE +ORDER BY TO_DATE(su.rtime,'MM/DD/YYYY HH24:MI:SS') +; + +@@footer diff --git a/vg/awr_temp_usage.sql b/vg/awr_temp_usage.sql new file mode 100644 index 0000000..76d920b --- /dev/null +++ b/vg/awr_temp_usage.sql @@ -0,0 +1,154 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display tempspace usage from AWR +* Compatibility : 10.1 and above +* Parameters : 1 - Number of hours (Default 24) +* 2 - SPACE_MB (Default 500MB) +* 3 - TEMPORARY_TABLESPACE (Default %) +* 4 - WhereClause +* 5 - WhereClause2 +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Jul-16 Vishal Gupta Created by copying query from awr_sid_sqlids.sql +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE HOURS +UNDEFINE SPACE_MB +UNDEFINE TEMP_TABLESPACE +UNDEFINE WHERECLAUSE +UNDEFINE WHERECLAUSE2 + +DEFINE HOURS="&&1" +DEFINE SPACE_MB="&&2" +DEFINE TEMP_TABLESPACE="&&3" +DEFINE WHERECLAUSE="&&4" +DEFINE WHERECLAUSE2="&&5" + +COLUMN _HOURS NEW_VALUE HOURS NOPRINT +COLUMN _SPACE_MB NEW_VALUE SPACE_MB NOPRINT +COLUMN _TEMP_TABLESPACE NEW_VALUE TEMP_TABLESPACE NOPRINT + +set term off +SELECT DECODE('&&HOURS' ,'','24' ,'&&HOURS') "_HOURS" + , DECODE('&&SPACE_MB' ,'','500','&&SPACE_MB') "_SPACE_MB" + , DECODE('&&TEMP_TABLESPACE','','%' ,UPPER('&&TEMP_TABLESPACE')) "_TEMP_TABLESPACE" +FROM DUAL; +set term on +/***********************************/ + + + +PROMPT *************************************************** +PROMPT * AWR - High Temp space using SQL statements +PROMPT * +PROMPT * Input Parameter: +PROMPT * Number of Hours = "&&HOURS" +PROMPT * Space Threshold (MB) = "&&SPACE_MB" +PROMPT * Temporary Tablespace = "&&TEMP_TABLESPACE" +PROMPT * Where Clause = "&&WHERECLAUSE" +PROMPT * Where Clause2 = "&&WHERECLAUSE2" +PROMPT *************************************************** + + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a18 +COLUMN sql_exec_end FORMAT a18 +COLUMN duration FORMAT a12 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN phyread_requests HEADING "Phy|Read|Reqs|(#1000)" FORMAT 999999 +COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(#1000)" FORMAT 999999 +COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999 +COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999 +COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999 +COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 999.00 +COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 9999.00 +COLUMN temp_tbs HEADING "Temp TBS" FORMAT A30 + + +-- Get the SQL Statements from ASH +SELECT /*+ parallel(ash,8) parallel(ash_parent,8) */ + NVL(ash.qc_session_id, ash.session_id) session_id + , NVL(ash.qc_instance_id, ash.instance_number) instance_number + , NVL(ash.qc_session_serial# , ash.session_serial# ) session_serial# + --, ash.sql_exec_id +&&_IF_ORA_11gR1_OR_HIGHER , TO_CHAR(NVL(ash_parent.sql_exec_start,ash.sql_exec_start),'DD-MON-YY HH24:MI:SS') sql_exec_start + , TO_CHAR(max(NVL(ash_parent.sample_time,ash.sample_time)) ,'DD-MON-YY HH24:MI:SS') sql_exec_end + , SUBSTR(REPLACE( max(NVL(ash_parent.sample_time,ash.sample_time) - NVL(ash_parent.sql_exec_start,ash.sql_exec_start) ) ,'+00000000','+') + ,1,INSTR( REPLACE( max(NVL(ash_parent.sample_time,ash.sample_time) - NVL(ash_parent.sql_exec_start,ash.sql_exec_start) ) ,'+00000000','+') + ,'.')-1 + ) duration + , (select temporary_tablespace from dba_users where user_id = ash.user_id) temp_tbs +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(NVL(ash_parent.temp_space_allocated,0) + NVL(ash.temp_space_allocated,0) )/power(1024,3),2) temp_space_allocated +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(NVL(ash_parent.pga_allocated,0) + NVL(ash.pga_allocated,0) )/power(1024,3),2) pga_allocated +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash_parent.delta_read_io_requests,0) + NVL(ash.delta_read_io_requests,0) )/power(1000,1)) phyread_requests +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash_parent.delta_write_io_requests,0) + NVL(ash.delta_write_io_requests,0) )/power(1000,1)) phywrite_requests +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash_parent.delta_read_io_bytes,0) + NVL(ash.delta_read_io_bytes,0) )/power(1024,3)) phyread +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash_parent.delta_write_io_bytes,0) + NVL(ash.delta_write_io_bytes,0) )/power(1024,3)) phywrite +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash_parent.delta_interconnect_io_bytes,0) + NVL(ash.delta_interconnect_io_bytes,0) )/power(1024,3)) interconnect_io +--&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.sql_id +-- , ash.sql_child_number +-- , ash.sql_plan_hash_value +--&&_IF_ORA_11202_OR_HIGHER , max(trunc(NVL(ash_child.px_flags,ash.px_flags) / 2097152)) current_dop +-- , ash.force_matching_signature +--&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash.top_level_sql_id,ash_child.top_level_sql_id) top_level_sql_id + FROM v$database d + JOIN sys.wrh$_active_session_history ash + ON ash.dbid = d.dbid + AND ash.sample_time > sysdate - (&&HOURS/24) + &&WHERECLAUSE + LEFT OUTER JOIN sys.wrh$_active_session_history ash_parent + ON ash.dbid = ash_parent.dbid + AND ash.qc_instance_id = ash_parent.instance_number + AND ash.qc_session_id = ash_parent.session_id + AND ash.qc_session_serial# = ash_parent.session_serial# + AND ash_parent.qc_session_id <> 0 +&&_IF_ORA_11gR1_OR_HIGHER AND ash.sql_exec_start = ash_parent.sql_exec_start + AND ash_parent.sample_time > sysdate - (&&HOURS/24) + &&WHERECLAUSE2 + WHERE 1=1 + AND ('&&TEMP_TABLESPACE' = '%' + OR ('&&TEMP_TABLESPACE' != '%' + AND ash.user_id IN (select user_id from dba_users where temporary_tablespace LIKE '&&TEMP_TABLESPACE') + ) + ) +GROUP BY NVL(ash.qc_session_id, ash.session_id) + , NVL(ash.qc_instance_id, ash.instance_number) + , NVL(ash.qc_session_serial#, ash.session_serial#) + , ash.user_id +&&_IF_ORA_11gR1_OR_HIGHER , ash.sql_exec_id +&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash_parent.sql_exec_start,ash.sql_exec_start) +--&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.force_matching_signature +&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) +HAVING MAX(ash.temp_space_allocated)/power(1024,2) > &&SPACE_MB -- Temp Space MBs +ORDER BY + max(ash.sample_time) asc +&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash_parent.sql_exec_start,ash.sql_exec_start) ASC +; + + +@@footer diff --git a/vg/awr_tempstats.sql b/vg/awr_tempstats.sql new file mode 100644 index 0000000..738dccc --- /dev/null +++ b/vg/awr_tempstats.sql @@ -0,0 +1,159 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Temporary tablespace stats from AWR Repository +* Parameter : 1 - InstanceNumber (Use % for all instances) +* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format) +* 4 - TablespaceName (Use % as wild card) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Jul-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE tablespace_name="&4" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_FORMAT=999,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=99,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" + +PROMPT ****************************************************************** +PROMPT * T E M P O R A R Y T A B L E S P A C E S T A T I S T I C S +PROMPT * (From AWR Repository) +PROMPT * +PROMPT * Input Parameters +PROMPT * - For Instance ID - '&INST_ID' +PROMPT * - Snap Between - '&&FROM_TIMESTAMP' and '&&TO_TIMESTAMP' (YYYY-MM-DD HH24:MI:SS) +PROMPT * - Tablespace Name - '&&tablespace_name' +PROMPT ****************************************************************** + +set pages 50000 + +COLUMN end_interval_time HEADING "SnapTime" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN tsname HEADING "Tablespace|Name" FORMAT a20 +COLUMN phyrds HEADING "Phy|Reads|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN phywrts HEADING "Phy|Writes|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN readtim HEADING "Read|Time|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN writetim HEADING "Write|Time|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN singleblkrds HEADING "SingleBlock|PhyReads|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN singleblkrdtim HEADING "SingleBlock|ReadTime|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN phyrd_size HEADING "PhyRead|Size|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN phywrt_size HEADING "PhyWrite|Size|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN wait_count HEADING "Wait Count|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN wait_time HEADING "Wait Time|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT +COLUMN separator HEADING "!|!|!" FORMAT a1 + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id + , s.end_interval_time + FROM dba_hist_snapshot s + , v$database d + WHERE s.dbid = d.dbid + AND s.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS') + ) +, tempstats AS +( + SELECT + s.end_interval_time + , t.instance_number + , t.tsname + , t.block_size + , t.phyrds - LEAST(t_prev.phyrds,t.phyrds) phyrds + , t.phywrts - LEAST(t_prev.phywrts,t.phywrts) phywrts + , t.readtim - LEAST(t_prev.readtim,t.readtim) readtim + , t.writetim - LEAST(t_prev.writetim,t.writetim) writetim + , t.singleblkrds - LEAST(t_prev.singleblkrds,t.singleblkrds) singleblkrds + , t.singleblkrdtim - LEAST(t_prev.singleblkrdtim,t.singleblkrdtim) singleblkrdtim + , t.phyblkrd - LEAST(t_prev.phyblkrd,t.phyblkrd) phyblkrd + , t.phyblkwrt - LEAST(t_prev.phyblkwrt,t.phyblkwrt) phyblkwrt + , t.wait_count - LEAST(t_prev.wait_count,t.wait_count) wait_count + , t.time - LEAST(t_prev.time,t.time) time + FROM snap s + , dba_hist_tempstatxs t + , dba_hist_tempstatxs t_prev + WHERE s.next_snap_id IS NOT NULL + AND s.dbid = t_prev.dbid + AND s.instance_number = t_prev.instance_number + AND s.snap_id = t_prev.snap_id + AND s.dbid = t.dbid + AND s.instance_number = t.instance_number + AND s.next_snap_id = t.snap_id + AND t_prev.file# = t.file# + AND t.tsname LIKE '&&tablespace_name' +) +SELECT TO_CHAR(t.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time + , t.instance_number + , t.tsname + , '|' separator + , SUM(t.phyblkrd * t.block_size)/&&BYTES_DIVIDER phyrd_size + , SUM(t.phyrds)/&&COUNT_DIVIDER phyrds + , ROUND(avg(t.readtim)/100)/&&TIME_DIVIDER readtim + , '|' separator + , SUM(t.singleblkrds)/&&COUNT_DIVIDER singleblkrds + , ROUND(avg(t.singleblkrdtim)/100)/&&TIME_DIVIDER singleblkrdtim + , '|' separator + , SUM(t.phyblkwrt * t.block_size)/&&BYTES_DIVIDER phywrt_size + , SUM(t.phywrts)/&&COUNT_DIVIDER phywrts + , ROUND(avg(t.writetim)/100)/&&TIME_DIVIDER writetim + , '|' separator + , SUM(t.wait_count)/&&COUNT_DIVIDER wait_count + , SUM(t.time)/&&TIME_DIVIDER wait_time +FROM tempstats t +GROUP BY TO_CHAR(t.end_interval_time,'DD-MON-YY HH24:MI') + , t.instance_number + , t.tsname +ORDER BY TO_DATE(TO_CHAR(t.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc + , t.instance_number + , t.tsname +; + + +@@footer diff --git a/vg/awr_top_segment.sql b/vg/awr_top_segment.sql new file mode 100644 index 0000000..2f6c0d8 --- /dev/null +++ b/vg/awr_top_segment.sql @@ -0,0 +1,154 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top segment from AWR +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - ORDER BY column name/number +* 6 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 13-JAN-14 Vishal Gupta Created +* +*/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE ORDER_BY_COLUMN +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE ORDER_BY_COLUMN="&5" +DEFINE WHERECLAUSE="&&6" + + +DEFINE COUNT_SMALL_FORMAT=999,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" +--DEFINE COUNT_SMALL_DIVIDER="1000000" +--DEFINE COUNT_SMALL_HEADING="#million" + +DEFINE COUNT_FORMAT=999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=99,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN object_name HEADING "Object|Name" FORMAT a50 +COLUMN table_scans HEADING "Table|Scans|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN itl_waits HEADING "ITL|Waits|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN row_lock_waits HEADING "Row|Lock|Waits|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN chain_row_excess HEADING "Chain|Row|Excess|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN buffer_busy_waits HEADING "Buffer|Busy|Waits|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN gc_buffer_busy HEADING "GC|Buffer|Busy|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN gc_cr_blocks_served HEADING "Global|Cache|Consistent|Read|Served|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN gc_cu_blocks_served HEADING "Global|Cache|Current|Blocks|Served|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN gc_cr_blocks_received HEADING "Global|Cache|Consistent|Read|Recv|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN gc_cu_blocks_received HEADING "Global|Cache|Current|Blocks|Recv|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN logical_reads HEADING "Logical|Reads|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_reads HEADING "Phy|Reads|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_writes HEADING "Phy|Write|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN db_block_changes HEADING "DB|Block|Changes|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_writes_direct HEADING "Phy|Write|Direct|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_reads_direct HEADING "Phy|Read|Direct|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN space_used HEADING "Space|Used|Delta|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN space_allocated HEADING "Space|Alloc|Delta|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT + +Prompt +Prompt *************************************************************************************************** +Prompt * A W R T O P &&TOP_RECORDCOUNT S E G M E N T S +Prompt * (By &&ORDER_BY_COLUMN) +Prompt * +Prompt * Input Parameters +Prompt * - INST_ID - "&&INST_ID" +Prompt * - From Timestamp - "&&from_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - To Timestamp - "&&to_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - Top RecordCount - "&&TOP_RECORDCOUNT" +Prompt * - Order By - "&&ORDER_BY_COLUMN" +Prompt * - WhereClause - "&&WHERECLAUSE" +Prompt *************************************************************************************************** + + +SELECT * +FROM ( + SELECT /*+ LEADING(d s) USE_NL (d s ss) PARALLEL(s,8) PARALLEL(ss,8)*/ + (SELECT o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name,'') + FROM dba_hist_seg_stat_obj o + WHERE o.dbid = ss.dbid + AND o.ts# = ss.ts# + AND o.obj# = ss.obj# + AND o.dataobj# = ss.dataobj# + ) object_name +--/* + , ROUND(SUM(ss.table_scans_delta) /&COUNT_SMALL_DIVIDER) table_scans + , ROUND(SUM(ss.itl_waits_delta) /&COUNT_SMALL_DIVIDER) itl_waits + , ROUND(SUM(ss.row_lock_waits_delta) /&COUNT_SMALL_DIVIDER) row_lock_waits + -- As per Bug 13621258 , chain_row_excess needs to be divided by 100 + , ROUND(SUM(ss.chain_row_excess_delta/100) /&COUNT_DIVIDER) chain_row_excess + , ROUND(SUM(ss.buffer_busy_waits_delta) /&COUNT_DIVIDER) buffer_busy_waits + , ROUND(SUM(ss.gc_buffer_busy_delta) /&COUNT_DIVIDER) gc_buffer_busy + , ROUND(SUM(ss.gc_cr_blocks_served_delta * p.value) /&BYTES_DIVIDER) gc_cr_blocks_served + , ROUND(SUM(ss.gc_cu_blocks_served_delta * p.value) /&BYTES_DIVIDER) gc_cu_blocks_served + , ROUND(SUM(ss.gc_cr_blocks_received_delta * p.value) /&BYTES_DIVIDER) gc_cr_blocks_received + , ROUND(SUM(ss.gc_cu_blocks_received_delta * p.value) /&BYTES_DIVIDER) gc_cu_blocks_received + , ROUND(SUM(ss.logical_reads_delta * p.value) /&BYTES_DIVIDER) logical_reads + , ROUND(SUM(ss.physical_reads_delta * p.value) /&BYTES_DIVIDER) physical_reads + , ROUND(SUM(ss.physical_writes_delta * p.value) /&BYTES_DIVIDER) physical_writes + , ROUND(SUM(ss.db_block_changes_delta) /&BYTES_DIVIDER) db_block_changes + , ROUND(SUM(ss.physical_writes_direct_delta * p.value) /&BYTES_DIVIDER) physical_writes_direct + , ROUND(SUM(ss.physical_reads_direct_delta * p.value) /&BYTES_DIVIDER) physical_reads_direct + , ROUND(SUM(ss.space_used_delta) /&BYTES_DIVIDER) space_used + , ROUND(SUM(ss.space_allocated_delta) /&BYTES_DIVIDER) space_allocated +--*/ + from v$database d + , dba_hist_snapshot s + , dba_hist_seg_stat ss + , (select value from v$system_parameter where name = 'db_block_size') p + where d.dbid = s.dbid + AND ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND ss.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + &&WHERECLAUSE + GROUP BY ss.dbid + , ss.ts# + , ss.obj# + , ss.dataobj# + order by &&ORDER_BY_COLUMN DESC NULLS LAST + ) +WHERE ROWNUM <= &&TOP_RECORDCOUNT +; + + +@@footer diff --git a/vg/awr_top_sql.sql b/vg/awr_top_sql.sql new file mode 100644 index 0000000..942bef4 --- /dev/null +++ b/vg/awr_top_sql.sql @@ -0,0 +1,185 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - ORDER BY column number +* 6 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------- +* 15-Oct-15 Vishal Gupta Added Phy Read/Write Requests column in output +* 15-May-12 Vishal Gupta Created +* +*/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE ORDER_COLUMN_NUMBER +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE ORDER_COLUMN_NUMBER="&5" +DEFINE WHERECLAUSE="&&6" + + +DEFINE COUNT_SMALL_FORMAT=999,999,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" +--DEFINE COUNT_SMALL_DIVIDER="1000000" +--DEFINE COUNT_SMALL_HEADING="#million" + +DEFINE COUNT_FORMAT=9,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=99,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + +COLUMN min_time HEADING "Snap Time (Min)" FORMAT a15 +COLUMN max_time HEADING "Snap Time (Max)" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN force_matching_signature HEADING "Force|Matching|Signature" FORMAT a25 +COLUMN SQL_ID HEADING "One of|SQLId for|similar SQLs" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" +COLUMN invalidations_total HEADING "Invalid|Total|(&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait_total HEADING "IO|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN apwait_total HEADING "Appl|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN ccwait_total HEADING "Conc|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN clwait_total HEADING "Cluster|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN plsexec_time_total HEADING "PLsexec|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN cpu_time_total HEADING "CPU|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN elapsed_time_total HEADING "Elapsed|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +--COLUMN executions_total HEADING "Exec|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN executions_total HEADING "Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed_total HEADING "Rows|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN sorts_total HEADING "Sorts|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN buffer_gets_total HEADING "Buffer|Gets|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN direct_writes_total HEADING "Direct|Write|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN physical_read_requests_total HEADING "PhyRead|Requests|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN physical_write_requests_total HEADING "PhyWrite|Requests|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN physical_read_bytes_total HEADING "Phy|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_write_bytes_total HEADING "Phy|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN direct_write_bytes_total HEADING "Direct|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_change_bytes_total HEADING "Phy|Change|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT + +Prompt +Prompt *************************************************************************************************** +Prompt * A W R T O P &&TOP_RECORDCOUNT S Q L s +Prompt * (By &&ORDER_COLUMN_NUMBER) +Prompt * +Prompt * Input Parameters +Prompt * - INST_ID - "&&INST_ID" +Prompt * - From Timestamp - "&&from_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - To Timestamp - "&&to_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - Top Record Count - "&&TOP_RECORDCOUNT" +Prompt * - WHERECLAUSE - "&&WHERECLAUSE" +Prompt *************************************************************************************************** + + +SELECT /*+ NO_MERGE NO_UNNEST */ * +FROM ( + SELECT /*+ LEADING(d s) USE_NL (d s ss) PARALLEL(s,8) PARALLEL(ss,8)*/ + CASE WHEN REGEXP_LIKE(DECODE(ss.force_matching_signature,0,ss.sql_id,ss.force_matching_signature), '[a-z]') + THEN '0' + ELSE DECODE(ss.force_matching_signature,0,ss.sql_id,ss.force_matching_signature) + END force_matching_signature + , max(sql_id) sql_id + , ROUND(SUM(ss.iowait_delta)/1000000 /&TIME_DIVIDER) iowait_total + , ROUND(SUM(ss.apwait_delta)/1000000 /&TIME_DIVIDER) apwait_total + , ROUND(SUM(ss.ccwait_delta)/1000000 /&TIME_DIVIDER) ccwait_total + , ROUND(SUM(ss.clwait_delta)/1000000 /&TIME_DIVIDER) clwait_total + , ROUND(SUM(ss.plsexec_time_delta)/1000000 /&TIME_DIVIDER) plsexec_time_total + , ROUND(SUM(ss.cpu_time_delta)/1000000 /&TIME_DIVIDER) cpu_time_total + , ROUND(SUM(ss.elapsed_time_delta)/1000000 /&TIME_DIVIDER) elapsed_time_total + --, ROUND(SUM(ss.executions_delta) /&COUNT_DIVIDER) executions_total + , ROUND(SUM(ss.executions_delta) /&COUNT_SMALL_DIVIDER) executions_total + , ROUND(SUM(ss.rows_processed_delta) /&COUNT_DIVIDER) rows_processed_total + , ROUND(SUM(ss.sorts_delta) /&COUNT_SMALL_DIVIDER) sorts_total + , ROUND(SUM(ss.buffer_gets_delta) /&COUNT_DIVIDER) buffer_gets_total + , ROUND(SUM(ss.direct_writes_delta) /&COUNT_DIVIDER) direct_writes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.physical_read_requests_delta) /&COUNT_DIVIDER) physical_read_requests_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.physical_write_requests_delta) /&COUNT_DIVIDER) physical_write_requests_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.physical_read_bytes_delta) /&BYTES_DIVIDER) physical_read_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.physical_write_bytes_delta) /&BYTES_DIVIDER) physical_write_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_interconnect_bytes_delta) /&BYTES_DIVIDER) io_interconnect_bytes_total + , ROUND(SUM(ss.direct_writes_delta * p.value) /&BYTES_DIVIDER) direct_write_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.physical_write_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER - (ss.direct_writes_delta * p.value)) /&BYTES_DIVIDER) physical_change_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.optimized_physical_reads_delta)/&BYTES_DIVIDER) optimized_physical_reads_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_elig_bytes_delta) /&BYTES_DIVIDER) io_offload_elig_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_return_bytes_delta) /&BYTES_DIVIDER) io_offload_return_bytes_total + -- , MODULE + -- , action + from v$database d + , dba_hist_snapshot s + , dba_hist_sqlstat ss + , (select value from v$system_parameter where name = 'db_block_size') p + where d.dbid = s.dbid + AND ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND ss.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') +/* AND EXISTS (SELECT 1 + FROM dba_hist_active_sess_history ash + , dba_users u + , dba_hist_service_name sn + , v$database d + WHERE ash.dbid = d.dbid + AND ash.user_id = u.user_id + AND ash.dbid = sn.dbid + AND ash.service_hash = sn.service_name_hash + AND ash.dbid = ss.dbid + AND ash.instance_number = ss.instance_number + AND ash.snap_id = ss.snap_id + AND ash.sql_id = ss.sql_id + AND u.username LIKE '%POOL%' ESCAPE '\' + --AND UPPER(ash.program) LIKE UPPER('%') ESCAPE '\' + --AND UPPER(u.service_name) LIKE UPER('%') ESCAPE '\' + AND ash.sample_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + ) + */ + &&WHERECLAUSE + GROUP BY ss.dbid + --, ss.force_matching_signature + , DECODE(ss.force_matching_signature,0,ss.sql_id,ss.force_matching_signature) + order by &&ORDER_COLUMN_NUMBER DESC NULLS LAST + ) +WHERE ROWNUM <= &&TOP_RECORDCOUNT +; + +@@footer diff --git a/vg/awr_top_sql_by_all.sql b/vg/awr_top_sql_by_all.sql new file mode 100644 index 0000000..22fee8d --- /dev/null +++ b/vg/awr_top_sql_by_all.sql @@ -0,0 +1,87 @@ +set echo off +set feed off +set verify off +-- No header and footer needed, as its just a wrapper script giving call to other scripts +-- @@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR - by CPU Time +* Version : "&&RECORDCOUNT".1 and above +* Parameters : 1 - hours (If from and to timestamp are passed , this is ignored) +* 2 - Instance Number (Default is '%' ie ALL) +* 3 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 5 - Top record Count +* 6 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE HOURS +UNDEFINE INST_ID +UNDEFINE RECORDCOUNT +UNDEFINE FROM_TIME +UNDEFINE TO_TIME +UNDEFINE WHERECLAUSE + +DEFINE HOURS="&&1" +DEFINE INST_ID="&&2" +DEFINE FROM_TIME="&&3" +DEFINE TO_TIME="&&4" +DEFINE RECORDCOUNT="&&5" +DEFINE WHERECLAUSE="&&6" + +COLUMN "_from_time" new_value from_time NOPRINT +COLUMN "_to_time" new_value to_time NOPRINT +COLUMN "_INST_ID" new_value INST_ID NOPRINT +COLUMN "_RECORDCOUNT" new_value recordcount NOPRINT +COLUMN "_hours" new_value hours NOPRINT + + +set term off +SELECT DECODE('&&HOURS','','24','&&HOURS') "_hours" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&RECORDCOUNT','','10','&&RECORDCOUNT') "_RECORDCOUNT" + , DECODE('&&FROM_TIME' + ,'',TO_CHAR(sysdate - (DECODE('&&HOURS','','24','&&HOURS')/24) , 'YYYY-MM-DD HH24:MI:SS') + ,'&&FROM_TIME') "_from_time" + , DECODE('&&TO_TIME' + ,'',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') + ,'&&TO_TIME') "_to_time" + FROM DUAL; +set term on + +--@awr_top_sql_by_cpu "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "&&WHERECLAUSE" +--@awr_top_sql_by_exec "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "&&WHERECLAUSE" +--@awr_top_sql_by_elapsed_time "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "&&WHERECLAUSE" +--@awr_top_sql_by_physicalread "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "&&WHERECLAUSE" +--@awr_top_sql_by_physicalwrite "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "&&WHERECLAUSE" +--@awr_top_sql_by_buffer_gets "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "&&WHERECLAUSE" +--@awr_top_sql_by_buffer_gets "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "&&WHERECLAUSE" + + +@@awr_top_sql "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "cpu_time_total" "&&WHERECLAUSE" +@@awr_top_sql "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "elapsed_time_total" "&&WHERECLAUSE" +@@awr_top_sql "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "executions_total" "&&WHERECLAUSE" +@@awr_top_sql "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "physical_read_requests_total" "&&WHERECLAUSE" +@@awr_top_sql "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "physical_write_requests_total" "&&WHERECLAUSE" +@@awr_top_sql "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "physical_read_bytes_total" "&&WHERECLAUSE" +@@awr_top_sql "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "physical_write_bytes_total" "&&WHERECLAUSE" +@@awr_top_sql "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "physical_change_bytes_total" "&&WHERECLAUSE" +@@awr_top_sql "&&INST_ID" "&&from_time" "&&to_time" "&&RECORDCOUNT" "buffer_gets_total" "&&WHERECLAUSE" + + +-- @@footer \ No newline at end of file diff --git a/vg/awr_top_sql_by_buffer_gets.sql b/vg/awr_top_sql_by_buffer_gets.sql new file mode 100644 index 0000000..52b2922 --- /dev/null +++ b/vg/awr_top_sql_by_buffer_gets.sql @@ -0,0 +1,63 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR - by Buffer Gets Total +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT +COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT +COLUMN "_INST_ID" new_value INST_ID NOPRINT +COLUMN "_TOP_RECORDCOUNT" new_value TOP_RECORDCOUNT NOPRINT +COLUMN "_WHERECLAUSE" new_value WHERECLAUSE NOPRINT + + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&FROM_TIMESTAMP' + ,'',TO_CHAR(sysdate - (DECODE('&&FROM_TIMESTAMP','','24','&&FROM_TIMESTAMP')/24) , 'YYYY-MM-DD HH24:MI:SS') + ,'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP' + ,'',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') + ,'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&TOP_RECORDCOUNT','','10','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT" + FROM DUAL +; +set term on + + +@@awr_top_sql "&&INST_ID" "&FROM_TIMESTAMP" "&TO_TIMESTAMP" "&TOP_RECORDCOUNT" "buffer_gets_total" "&&WHERECLAUSE" + +@@footer diff --git a/vg/awr_top_sql_by_cpu.sql b/vg/awr_top_sql_by_cpu.sql new file mode 100644 index 0000000..2e21a83 --- /dev/null +++ b/vg/awr_top_sql_by_cpu.sql @@ -0,0 +1,62 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR - by CPU Time +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - Where Clause +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT +COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT +COLUMN "_INST_ID" new_value INST_ID NOPRINT +COLUMN "_TOP_RECORDCOUNT" new_value TOP_RECORDCOUNT NOPRINT +COLUMN "_WHERECLAUSE" new_value WHERECLAUSE NOPRINT + + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&FROM_TIMESTAMP' + ,'',TO_CHAR(sysdate - (DECODE('&&FROM_TIMESTAMP','','24','&&FROM_TIMESTAMP')/24) , 'YYYY-MM-DD HH24:MI:SS') + ,'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP' + ,'',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') + ,'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&TOP_RECORDCOUNT','','10','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT" + FROM DUAL +; +set term on + + +@@awr_top_sql "&&INST_ID" "&FROM_TIMESTAMP" "&TO_TIMESTAMP" "&TOP_RECORDCOUNT" "cpu_time_total" "&&WHERECLAUSE" + +@@footer diff --git a/vg/awr_top_sql_by_elapsed_time.sql b/vg/awr_top_sql_by_elapsed_time.sql new file mode 100644 index 0000000..ac7fef7 --- /dev/null +++ b/vg/awr_top_sql_by_elapsed_time.sql @@ -0,0 +1,63 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR - by CPU Time +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - Where Clause +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT +COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT +COLUMN "_INST_ID" new_value INST_ID NOPRINT +COLUMN "_TOP_RECORDCOUNT" new_value TOP_RECORDCOUNT NOPRINT +COLUMN "_WHERECLAUSE" new_value WHERECLAUSE NOPRINT + + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&FROM_TIMESTAMP' + ,'',TO_CHAR(sysdate - (DECODE('&&FROM_TIMESTAMP','','24','&&FROM_TIMESTAMP')/24) , 'YYYY-MM-DD HH24:MI:SS') + ,'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP' + ,'',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') + ,'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&TOP_RECORDCOUNT','','10','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT" + FROM DUAL +; +set term on + + +@@awr_top_sql "&&INST_ID" "&FROM_TIMESTAMP" "&TO_TIMESTAMP" "&TOP_RECORDCOUNT" "elapsed_time_total" "&&WHERECLAUSE" + + +@@footer diff --git a/vg/awr_top_sql_by_exec.sql b/vg/awr_top_sql_by_exec.sql new file mode 100644 index 0000000..299f04f --- /dev/null +++ b/vg/awr_top_sql_by_exec.sql @@ -0,0 +1,64 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR - by Execution count +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT +COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT +COLUMN "_INST_ID" new_value INST_ID NOPRINT +COLUMN "_TOP_RECORDCOUNT" new_value TOP_RECORDCOUNT NOPRINT +COLUMN "_WHERECLAUSE" new_value WHERECLAUSE NOPRINT + + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&FROM_TIMESTAMP' + ,'',TO_CHAR(sysdate - (DECODE('&&FROM_TIMESTAMP','','24','&&FROM_TIMESTAMP')/24) , 'YYYY-MM-DD HH24:MI:SS') + ,'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP' + ,'',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') + ,'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&TOP_RECORDCOUNT','','10','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT" + FROM DUAL +; +set term on + + +@@awr_top_sql "&&INST_ID" "&FROM_TIMESTAMP" "&TO_TIMESTAMP" "&TOP_RECORDCOUNT" "executions_total" "&&WHERECLAUSE" + + + +@@footer diff --git a/vg/awr_top_sql_by_physicalchange.sql b/vg/awr_top_sql_by_physicalchange.sql new file mode 100644 index 0000000..6a9913d --- /dev/null +++ b/vg/awr_top_sql_by_physicalchange.sql @@ -0,0 +1,63 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR - by Buffer Gets Total +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT +COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT +COLUMN "_INST_ID" new_value INST_ID NOPRINT +COLUMN "_TOP_RECORDCOUNT" new_value TOP_RECORDCOUNT NOPRINT +COLUMN "_WHERECLAUSE" new_value WHERECLAUSE NOPRINT + + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&FROM_TIMESTAMP' + ,'',TO_CHAR(sysdate - (DECODE('&&FROM_TIMESTAMP','','24','&&FROM_TIMESTAMP')/24) , 'YYYY-MM-DD HH24:MI:SS') + ,'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP' + ,'',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') + ,'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&TOP_RECORDCOUNT','','10','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT" + FROM DUAL +; +set term on + + +@@awr_top_sql "&&INST_ID" "&FROM_TIMESTAMP" "&TO_TIMESTAMP" "&TOP_RECORDCOUNT" "physical_change_bytes_total" "&&WHERECLAUSE" + +@@footer diff --git a/vg/awr_top_sql_by_physicalread.sql b/vg/awr_top_sql_by_physicalread.sql new file mode 100644 index 0000000..5af3635 --- /dev/null +++ b/vg/awr_top_sql_by_physicalread.sql @@ -0,0 +1,63 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR - by Buffer Gets Total +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS, Default sysdate - 1) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS, Default sysdate) +* 4 - Top record Count (Default 10) +* 5 - Where Clause (Default '') +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT +COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT +COLUMN "_INST_ID" new_value INST_ID NOPRINT +COLUMN "_TOP_RECORDCOUNT" new_value TOP_RECORDCOUNT NOPRINT +COLUMN "_WHERECLAUSE" new_value WHERECLAUSE NOPRINT + + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&FROM_TIMESTAMP' + ,'',TO_CHAR(sysdate - (DECODE('&&FROM_TIMESTAMP','','24','&&FROM_TIMESTAMP')/24) , 'YYYY-MM-DD HH24:MI:SS') + ,'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP' + ,'',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') + ,'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&TOP_RECORDCOUNT','','10','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT" + FROM DUAL +; +set term on + + +@@awr_top_sql "&&INST_ID" "&FROM_TIMESTAMP" "&TO_TIMESTAMP" "&TOP_RECORDCOUNT" "physical_read_bytes_total" "&&WHERECLAUSE" + +@@footer diff --git a/vg/awr_top_sql_by_physicalwrite.sql b/vg/awr_top_sql_by_physicalwrite.sql new file mode 100644 index 0000000..6b2507f --- /dev/null +++ b/vg/awr_top_sql_by_physicalwrite.sql @@ -0,0 +1,63 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR - by Buffer Gets Total +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT +COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT +COLUMN "_INST_ID" new_value INST_ID NOPRINT +COLUMN "_TOP_RECORDCOUNT" new_value TOP_RECORDCOUNT NOPRINT +COLUMN "_WHERECLAUSE" new_value WHERECLAUSE NOPRINT + + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&FROM_TIMESTAMP' + ,'',TO_CHAR(sysdate - (DECODE('&&FROM_TIMESTAMP','','24','&&FROM_TIMESTAMP')/24) , 'YYYY-MM-DD HH24:MI:SS') + ,'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP' + ,'',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS') + ,'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&TOP_RECORDCOUNT','','10','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT" + FROM DUAL +; +set term on + + +@@awr_top_sql "&&INST_ID" "&FROM_TIMESTAMP" "&TO_TIMESTAMP" "&TOP_RECORDCOUNT" "physical_write_bytes_total" "&&WHERECLAUSE" + +@@footer diff --git a/vg/awr_top_sql_by_weight.sql b/vg/awr_top_sql_by_weight.sql new file mode 100644 index 0000000..af9323e --- /dev/null +++ b/vg/awr_top_sql_by_weight.sql @@ -0,0 +1,271 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR (By Weight) +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-JAN-14 Vishal Gupta Intial version +* +*/ + +set lines 20000 + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + + +DEFINE COUNT_SMALL_FORMAT=999,999,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" +--DEFINE COUNT_SMALL_DIVIDER="1000000" +--DEFINE COUNT_SMALL_HEADING="#million" + +DEFINE COUNT_FORMAT=999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=99,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + +DEFINE WEIGHT_FORMAT=999,999 +--DEFINE WEIGHT_DIVIDER="1000" +--DEFINE WEIGHT_HEADING="#1000" +DEFINE WEIGHT_DIVIDER="1000000" +DEFINE WEIGHT_HEADING="Million" +--DEFINE WEIGHT_DIVIDER="1000000000" +--DEFINE WEIGHT_HEADING="Billion" + + +DEFINE elapsed_time_weight=10 +DEFINE executions_weight=0.1 +DEFINE buffer_gets_weight=0.00000001 +DEFINE physical_read_bytes_weight=0.000001 +DEFINE physical_write_bytes_weight=0.00001 + +COLUMN min_time HEADING "Snap Time (Min)" FORMAT a15 +COLUMN max_time HEADING "Snap Time (Max)" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" +COLUMN weight HEADING "Weight|(&WEIGHT_HEADING)" FORMAT &&WEIGHT_FORMAT NOPRINT +COLUMN reason HEADING "Top|Reason" FORMAT a11 +COLUMN invalidations_total HEADING "Invalid|Total|(&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait_total HEADING "IO|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN apwait_total HEADING "Appl|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN ccwait_total HEADING "Conc|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN clwait_total HEADING "Cluster|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN plsexec_time_total HEADING "PLsexec|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN cpu_time_total HEADING "CPU|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN elapsed_time_total HEADING "Elapsed|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +--COLUMN executions_total HEADING "Exec|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN executions_total HEADING "Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed_total HEADING "Rows|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN sorts_total HEADING "Sorts|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN buffer_gets_total HEADING "Buffer|Gets|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN direct_writes_total HEADING "Direct|Write|Total|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_read_bytes_total HEADING "Phy|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_write_bytes_total HEADING "Phy|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN direct_write_bytes_total HEADING "Direct|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_change_bytes_total HEADING "Phy|Change|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT + +Prompt +Prompt *************************************************************************************************** +Prompt * A W R T O P &&TOP_RECORDCOUNT S Q L s +Prompt * +Prompt * Input Parameters +Prompt * - Instance Number - "&&INST_ID" +Prompt * - From Timestamp - "&&from_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - To Timestamp - "&&to_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - Top RecordCount - "&&TOP_RECORDCOUNT" +Prompt * - Where Clause - "&&WHERECLAUSE" +Prompt *************************************************************************************************** + + +WITH topsql as +( +SELECT /*+ NO_MERGE NO_UNNEST */ + * +FROM ( + SELECT /*+ LEADING(d s) USE_NL (d s ss) PARALLEL(s,8) PARALLEL(ss,8)*/ + --ss.parsing_schema_name username + --, + ss.sql_id + -- , TO_CHAR(min(s.begin_interval_time),'DD-MON-YY HH24:MI') min_time + -- , TO_CHAR(max(s.end_interval_time),'DD-MON-YY HH24:MI') max_time + -- , ss.plan_hash_value + , DECODE( GREATEST(SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight + , SUM(ss.executions_delta) * &&executions_weight + --, SUM(ss.buffer_gets_delta) * &&buffer_gets_weight + , SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight + , SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight + ) + , SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight ,'CPU/Elapsed' + , SUM(ss.executions_delta) * &&executions_weight ,'Execs' + --, SUM(ss.buffer_gets_delta) * &&buffer_gets_weight ,'BufferGets' + , SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight ,'PhyRead' + , SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight ,'PhyWrite' + ) Reason + , ROUND(( + SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight + + SUM(ss.executions_delta) * &&executions_weight + --+ SUM(ss.buffer_gets_delta) * &&buffer_gets_weight + + SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight + + SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight + )/&WEIGHT_DIVIDER) weight +/* + , ROUND(SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight) elapsed_time_weight + , ROUND(SUM(ss.executions_delta) * &&executions_weight) executions_weight + --, ROUND(SUM(ss.buffer_gets_delta) * &&buffer_gets_weight) buffer_gets_weight + , ROUND(SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight) physical_read_bytes_weight + , ROUND(SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight) physical_write_bytes_weight +*/ + , ROUND(SUM(ss.iowait_delta)/1000000 /&TIME_DIVIDER) iowait_total + , ROUND(SUM(ss.apwait_delta)/1000000 /&TIME_DIVIDER) apwait_total + , ROUND(SUM(ss.ccwait_delta)/1000000 /&TIME_DIVIDER) ccwait_total + , ROUND(SUM(ss.clwait_delta)/1000000 /&TIME_DIVIDER) clwait_total + , ROUND(SUM(ss.plsexec_time_delta)/1000000 /&TIME_DIVIDER) plsexec_time_total + , ROUND(SUM(ss.cpu_time_delta)/1000000 /&TIME_DIVIDER) cpu_time_total + , ROUND(SUM(ss.elapsed_time_delta)/1000000 /&TIME_DIVIDER) elapsed_time_total +--/* + --, ROUND(SUM(ss.executions_delta) /&COUNT_DIVIDER) executions_total + , ROUND(SUM(ss.executions_delta) /&COUNT_SMALL_DIVIDER) executions_total + , ROUND(SUM(ss.rows_processed_delta) /&COUNT_DIVIDER) rows_processed_total + , ROUND(SUM(ss.sorts_delta) /&COUNT_SMALL_DIVIDER) sorts_total + , ROUND(SUM(ss.buffer_gets_delta) /&COUNT_DIVIDER) buffer_gets_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_interconnect_bytes_delta) /&BYTES_DIVIDER) io_interconnect_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.physical_read_bytes_delta) /&BYTES_DIVIDER) physical_read_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.physical_write_bytes_delta) /&BYTES_DIVIDER) physical_write_bytes_total + , ROUND(SUM(ss.direct_writes_delta * p.value) /&BYTES_DIVIDER) direct_write_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.physical_write_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER - (ss.direct_writes_delta * p.value)) /&BYTES_DIVIDER) physical_change_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.optimized_physical_reads_delta)/&BYTES_DIVIDER) optimized_physical_reads_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_elig_bytes_delta) /&BYTES_DIVIDER) io_offload_elig_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_return_bytes_delta) /&BYTES_DIVIDER) io_offload_return_bytes_total + -- , MODULE + -- , action +--*/ + from v$database d + , dba_hist_snapshot s + , dba_hist_sqlstat ss + , (select value from v$system_parameter where name = 'db_block_size') p + where d.dbid = s.dbid + AND ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND ss.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') +/* AND EXISTS (SELECT 1 + FROM dba_hist_active_sess_history ash + , dba_users u + , dba_hist_service_name sn + , v$database d + WHERE ash.dbid = d.dbid + AND ash.user_id = u.user_id + AND ash.dbid = sn.dbid + AND ash.service_hash = sn.service_name_hash + AND ash.dbid = ss.dbid + AND ash.instance_number = ss.instance_number + AND ash.snap_id = ss.snap_id + AND ash.sql_id = ss.sql_id + AND u.username LIKE '%POOL%' ESCAPE '\' + --AND UPPER(ash.program) LIKE UPPER('%') ESCAPE '\' + --AND UPPER(u.service_name) LIKE UPER('%') ESCAPE '\' + AND ash.sample_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + ) +*/ + &&WHERECLAUSE + GROUP BY ss.dbid + -- , ss.parsing_schema_name + , ss.sql_id + order by weight DESC NULLS LAST + ) +WHERE ROWNUM <= &&TOP_RECORDCOUNT +) +SELECT + ( SELECT --+ first_rows + u.username + FROM dba_hist_snapshot s + , dba_hist_active_sess_history ash + , dba_users u + , dba_hist_service_name sn + , v$database d + WHERE d.dbid = s.dbid + AND s.dbid = ash.dbid + AND s.instance_number = ash.instance_number + and s.snap_id = ash.snap_id + AND ash.dbid = sn.dbid + and ash.service_hash = sn.service_name_hash + AND ash.user_id = u.user_id + AND ash.sql_id = ss.sql_id + and ash.sample_time between TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + and TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + and rownum = 1 + ) username +/* + + ,(SELECT --+ first_rows + ash.program + FROM dba_hist_snapshot s + , dba_hist_active_sess_history ash + , dba_users u + , dba_hist_service_name sn + , v$database d + WHERE d.dbid = s.dbid + AND s.dbid = ash.dbid + AND s.instance_number = ash.instance_number + and s.snap_id = ash.snap_id + AND ash.dbid = sn.dbid + and ash.service_hash = sn.service_name_hash + AND ash.user_id = u.user_id + AND ash.sql_id = ss.sql_id + and ash.sample_time between TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + and TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + and rownum = 1 + ) program +*/ + , ss.* +from topsql ss +; + +@@footer diff --git a/vg/awr_top_sql_by_weight2.sql b/vg/awr_top_sql_by_weight2.sql new file mode 100644 index 0000000..80184e0 --- /dev/null +++ b/vg/awr_top_sql_by_weight2.sql @@ -0,0 +1,222 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR (By Weight) +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-JAN-14 Vishal Gupta Intial version +* +*/ + +set lines 20000 + +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + + +DEFINE COUNT_SMALL_FORMAT=999,999,999,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" +--DEFINE COUNT_SMALL_DIVIDER="1000000" +--DEFINE COUNT_SMALL_HEADING="#million" + +DEFINE COUNT_FORMAT=999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=99,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + +DEFINE WEIGHT_FORMAT=999,999 +--DEFINE WEIGHT_DIVIDER="1000" +--DEFINE WEIGHT_HEADING="#1000" +DEFINE WEIGHT_DIVIDER="1000000" +DEFINE WEIGHT_HEADING="Million" +--DEFINE WEIGHT_DIVIDER="1000000000" +--DEFINE WEIGHT_HEADING="Billion" + + +DEFINE elapsed_time_weight=10 +DEFINE executions_weight=0.1 +DEFINE buffer_gets_weight=0.00000001 +DEFINE physical_read_bytes_weight=0.00000015 +DEFINE physical_write_bytes_weight=0.000001 + +COLUMN min_time HEADING "Snap Time (Min)" FORMAT a15 +COLUMN max_time HEADING "Snap Time (Max)" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN force_matching_signature HEADING "Force matching signature" FORMAT a30 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" +COLUMN weight HEADING "Weight|(&WEIGHT_HEADING)" FORMAT &&WEIGHT_FORMAT NOPRINT +COLUMN reason HEADING "Top|Reason" FORMAT a11 +COLUMN invalidations_total HEADING "Invalid|Total|(&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait_total HEADING "IO|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN apwait_total HEADING "Appl|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN ccwait_total HEADING "Conc|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN clwait_total HEADING "Cluster|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN plsexec_time_total HEADING "PLsexec|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN cpu_time_total HEADING "CPU|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN elapsed_time_total HEADING "Elapsed|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +--COLUMN executions_total HEADING "Exec|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN executions_total HEADING "Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed_total HEADING "Rows|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN sorts_total HEADING "Sorts|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN buffer_gets_total HEADING "Buffer|Gets|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN direct_writes_total HEADING "Direct|Write|Total|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_read_bytes_total HEADING "Phy|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_write_bytes_total HEADING "Phy|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN direct_write_bytes_total HEADING "Direct|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_change_bytes_total HEADING "Phy|Change|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT + +Prompt +Prompt *************************************************************************************************** +Prompt * A W R T O P &&TOP_RECORDCOUNT S Q L s +Prompt * +Prompt * Input Parameters +Prompt * - Instance Number - "&&INST_ID" +Prompt * - From Timestamp - "&&from_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - To Timestamp - "&&to_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - Top RecordCount - "&&TOP_RECORDCOUNT" +Prompt * - Where Clause - "&&WHERECLAUSE" +Prompt *************************************************************************************************** + +set timing on + +WITH topsql as +( +SELECT /*+ NO_MERGE NO_UNNEST */ + * +FROM ( + SELECT /*+ LEADING(d s) USE_NL (d s ss) PARALLEL(s,8) PARALLEL(ss,8)*/ + CASE WHEN REGEXP_LIKE(DECODE(ss.force_matching_signature,0,ss.sql_id,ss.force_matching_signature), '[a-z]') + THEN '0' + ELSE DECODE(ss.force_matching_signature,0,ss.sql_id,ss.force_matching_signature) + END force_matching_signature + , max(ss.sql_id) sql_id + , DECODE( GREATEST(SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight + , SUM(ss.executions_delta) * &&executions_weight + --, SUM(ss.buffer_gets_delta) * &&buffer_gets_weight + , SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight + , SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight + ) + , SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight ,'CPU/Elapsed' + , SUM(ss.executions_delta) * &&executions_weight ,'Execs' + --, SUM(ss.buffer_gets_delta) * &&buffer_gets_weight ,'BufferGets' + , SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight ,'PhyRead' + , SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight ,'PhyWrite' + ) Reason + , ROUND(( + SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight + + SUM(ss.executions_delta) * &&executions_weight + --+ SUM(ss.buffer_gets_delta) * &&buffer_gets_weight + + SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight + + SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight + )/&WEIGHT_DIVIDER) weight +/* + , ROUND(SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight) elapsed_time_weight + , ROUND(SUM(ss.executions_delta) * &&executions_weight) executions_weight + --, ROUND(SUM(ss.buffer_gets_delta) * &&buffer_gets_weight) buffer_gets_weight + , ROUND(SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight) physical_read_bytes_weight + , ROUND(SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight) physical_write_bytes_weight +*/ + , ROUND(SUM(ss.iowait_delta)/1000000 /&TIME_DIVIDER) iowait_total + , ROUND(SUM(ss.apwait_delta)/1000000 /&TIME_DIVIDER) apwait_total + , ROUND(SUM(ss.ccwait_delta)/1000000 /&TIME_DIVIDER) ccwait_total + , ROUND(SUM(ss.clwait_delta)/1000000 /&TIME_DIVIDER) clwait_total + , ROUND(SUM(ss.plsexec_time_delta)/1000000 /&TIME_DIVIDER) plsexec_time_total + , ROUND(SUM(ss.cpu_time_delta)/1000000 /&TIME_DIVIDER) cpu_time_total + , ROUND(SUM(ss.elapsed_time_delta)/1000000 /&TIME_DIVIDER) elapsed_time_total + , ROUND(SUM(ss.executions_delta) /&COUNT_SMALL_DIVIDER) executions_total + , ROUND(SUM(ss.rows_processed_delta) /&COUNT_DIVIDER) rows_processed_total + , ROUND(SUM(ss.sorts_delta) /&COUNT_SMALL_DIVIDER) sorts_total + , ROUND(SUM(ss.buffer_gets_delta) /&COUNT_DIVIDER) buffer_gets_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_interconnect_bytes_delta) /&BYTES_DIVIDER) io_interconnect_bytes_total + , ROUND(SUM(ss.physical_read_bytes_delta) /&BYTES_DIVIDER) physical_read_bytes_total + , ROUND(SUM(ss.physical_write_bytes_delta) /&BYTES_DIVIDER) physical_write_bytes_total + , ROUND(SUM(ss.direct_writes_delta * p.value) /&BYTES_DIVIDER) direct_write_bytes_total + , ROUND(SUM(ss.physical_write_bytes_delta + - (ss.direct_writes_delta * p.value)) /&BYTES_DIVIDER) physical_change_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.optimized_physical_reads_delta)/&BYTES_DIVIDER) optimized_physical_reads_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_elig_bytes_delta) /&BYTES_DIVIDER) io_offload_elig_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_return_bytes_delta) /&BYTES_DIVIDER) io_offload_return_bytes_total + from v$database d + , dba_hist_snapshot s + , dba_hist_sqlstat ss + , (select value from v$system_parameter where name = 'db_block_size') p + where d.dbid = s.dbid + AND ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND ss.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + &&WHERECLAUSE + GROUP BY ss.dbid + , DECODE(ss.force_matching_signature,0,ss.sql_id,ss.force_matching_signature) + order by weight DESC NULLS LAST + ) +WHERE ROWNUM <= &&TOP_RECORDCOUNT +) +SELECT /*+ */ +--/* + ( SELECT /*+ first_rows(ash) */ + u.username + FROM dba_hist_active_sess_history ash + , dba_users u + , v$database d + WHERE d.dbid = ash.dbid + AND ash.user_id = u.user_id + AND ash.sql_id = ss.sql_id + and ash.sample_time between TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + and TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + and rownum = 1 + ) username + , +--*/ + ss.* +from topsql ss +; + +set timing off + +@@footer diff --git a/vg/awr_top_sql_old.sql b/vg/awr_top_sql_old.sql new file mode 100644 index 0000000..e054fea --- /dev/null +++ b/vg/awr_top_sql_old.sql @@ -0,0 +1,157 @@ +--@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR +* Version : 10.1 and above +* Parameters : 1 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 2 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - Top record Count +* 4 - ORDER BY column number +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +*/ + + +DEFINE FROM_TIMESTAMP="&&1" +DEFINE TO_TIMESTAMP="&2" +DEFINE TOP_RECORDCOUNT="&3" +DEFINE ORDER_COLUMN_NUMBER="&4" + + +DEFINE COUNT_SMALL_FORMAT=99,999 +--DEFINE COUNT_SMALL_DIVIDER="1" +--DEFINE COUNT_SMALL_HEADING="#" +DEFINE COUNT_SMALL_DIVIDER="1000" +DEFINE COUNT_SMALL_HEADING="#1000" + +DEFINE COUNT_FORMAT=999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=99,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + +COLUMN min_end_interval_time HEADING "Snap Time (Min)" FORMAT a15 +COLUMN max_end_interval_time HEADING "Snap Time (Max)" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" +COLUMN invalidations_total HEADING "Invalid|Total|(&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait_total HEADING "IO|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN apwait_total HEADING "Appl|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN ccwait_total HEADING "Conc|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN clwait_total HEADING "Cluster|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN plsexec_time_total HEADING "PLsexec|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN cpu_time_total HEADING "CPU|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN elapsed_time_total HEADING "Elapsed|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN executions_total HEADING "Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed_total HEADING "Rows|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN sorts_total HEADING "Sorts|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN buffer_gets_total HEADING "Buffer|Gets|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN direct_writes_total HEADING "Direct|Write|Total|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_read_bytes_total HEADING "Phy|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_write_bytes_total HEADING "Phy|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&COUNT_HEADING)|PerExec" FORMAT &TIME_FORMAT +COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT + +Prompt +Prompt *************************************************************************************************** +Prompt * A W R T O P &&TOP_RECORDCOUNT S Q L s +Prompt * +Prompt * - Ordered by Column &&ORDER_COLUMN_NUMBER +Prompt * - Between &&from_timestamp and &&to_timestamp (YYYY-MM-DD HH24:MI:SS) +Prompt * +Prompt *************************************************************************************************** + + +SELECT * +FROM ( + WITH snap as + ( + SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER(PARTITION BY s.dbid, s.instance_number, ss.sql_id ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.end_interval_time + , s.startup_time + FROM dba_hist_snapshot s + , v$database d + WHERE d.dbid = s.dbid + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + ) + SELECT ss.sql_id + , TO_CHAR(min(s.end_interval_time),'DD-MON-YY HH24:MI') min_end_interval_time + , TO_CHAR(max(s.end_interval_time),'DD-MON-YY HH24:MI') max_end_interval_time + -- , ss.plan_hash_value + , ROUND(SUM((ss.iowait_total-LEAST(ss_prev.iowait_total,ss.iowait_total))/1000000/&TIME_DIVIDER)) iowait_total + , ROUND(SUM((ss.apwait_total-LEAST(ss_prev.apwait_total,ss.apwait_total))/1000000/&TIME_DIVIDER)) apwait_total + , ROUND(SUM((ss.ccwait_total-LEAST(ss_prev.ccwait_total,ss.ccwait_total))/1000000/&TIME_DIVIDER)) ccwait_total + , ROUND(SUM((ss.clwait_total-LEAST(ss_prev.clwait_total,ss.clwait_total))/1000000/&TIME_DIVIDER) ) clwait_total + , ROUND(SUM((ss.plsexec_time_total-LEAST(ss_prev.plsexec_time_total,ss.plsexec_time_total))/1000000/&TIME_DIVIDER)) plsexec_time_total + , ROUND(SUM((ss.cpu_time_total-LEAST(ss_prev.cpu_time_total,ss.cpu_time_total))/1000000/&TIME_DIVIDER)) cpu_time_total + , ROUND(SUM((ss.elapsed_time_total-LEAST(ss_prev.elapsed_time_total,ss.elapsed_time_total))/1000000/&TIME_DIVIDER)) elapsed_time_total +--/* + , ROUND(SUM(ss.executions_total-LEAST(ss_prev.executions_total,ss.executions_total))/&COUNT_SMALL_DIVIDER) executions_total + , ROUND(SUM(ss.rows_processed_total-LEAST(ss_prev.rows_processed_total,ss.rows_processed_total))/&COUNT_DIVIDER) rows_processed_total + , ROUND(SUM(ss.sorts_total-LEAST(ss_prev.sorts_total,ss.sorts_total))/&COUNT_SMALL_DIVIDER) sorts_total + , ROUND(SUM(ss.buffer_gets_total-LEAST(ss_prev.buffer_gets_total,ss.buffer_gets_total))/&COUNT_DIVIDER) buffer_gets_total + , ROUND(SUM(ss.direct_writes_total-LEAST(ss_prev.direct_writes_total,ss.direct_writes_total))/&COUNT_DIVIDER) direct_writes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_interconnect_bytes_total-LEAST(ss_prev.io_interconnect_bytes_total,ss.io_interconnect_bytes_total))/&BYTES_DIVIDER) io_interconnect_bytes_total + , ROUND(SUM(ss.physical_read_bytes_total-LEAST(ss_prev.physical_read_bytes_total,ss.physical_read_bytes_total))/&BYTES_DIVIDER) physical_read_bytes_total + , ROUND(SUM(ss.physical_write_bytes_total-LEAST(ss_prev.physical_write_bytes_total,ss.physical_write_bytes_total))/&BYTES_DIVIDER) physical_write_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.optimized_physical_reads_total-LEAST(ss_prev.optimized_physical_reads_total,ss.optimized_physical_reads_total))/&BYTES_DIVIDER) optimized_physical_reads_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_elig_bytes_total-LEAST(ss_prev.io_offload_elig_bytes_total,ss.io_offload_elig_bytes_total))/&BYTES_DIVIDER) io_offload_elig_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_return_bytes_total-LEAST(ss_prev.io_offload_return_bytes_total,ss.io_offload_return_bytes_total))/&BYTES_DIVIDER) io_offload_return_bytes_total + -- , MODULE + -- , action +--*/ + from snap s + , dba_hist_sqlstat ss + , dba_hist_sqlstat ss_prev + where ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND ss_prev.dbid = s.dbid + AND ss_prev.instance_number = s.instance_number + AND ss_prev.snap_id = s.prev_snap_id + AND ss_prev.sql_id = ss.sql_id + AND ss_prev.plan_hash_value = ss.plan_hash_value + AND (ss.executions_delta > 0 + OR ss.snap_id = (select max(snap_id) from dba_hist_snapshot s2 where s2.dbid = s.dbid and s2.instance_number = s.instance_number ) + ) + GROUP BY ss.dbid + , ss.sql_id + order by &&ORDER_COLUMN_NUMBER DESC + ) +WHERE ROWNUM <= &&TOP_RECORDCOUNT +; + +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE ORDER_COLUMN_NUMBER + + +--@@footer diff --git a/vg/awr_top_sql_weekly_client.sql b/vg/awr_top_sql_weekly_client.sql new file mode 100644 index 0000000..7f99bf5 --- /dev/null +++ b/vg/awr_top_sql_weekly_client.sql @@ -0,0 +1,253 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQLs from AWR (By Weight) +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Default is '%' ie ALL) +* 2 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 4 - Top record Count +* 5 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-JAN-14 Vishal Gupta Intial version +* +*/ + +set lines 20000 + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT +UNDEFINE WHERECLAUSE + +DEFINE INST_ID="&&1" +DEFINE FROM_TIMESTAMP="&&2" +DEFINE TO_TIMESTAMP="&3" +DEFINE TOP_RECORDCOUNT="&4" +DEFINE WHERECLAUSE="&&5" + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT +COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT +COLUMN _TOP_RECORDCOUNT NEW_VALUE TOP_RECORDCOUNT NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&FROM_TIMESTAMP','',TO_CHAR(NEXT_DAY(TRUNC(SYSDATE-14),'MONDAY'),'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP','',TO_CHAR(NEXT_DAY(TRUNC(SYSDATE-7),'MONDAY'),'YYYY-MM-DD ') || '00:02:00','&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&TOP_RECORDCOUNT','','30','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT" +FROM DUAL; +set term on + + + +DEFINE COUNT_SMALL_FORMAT=999,999,999,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" +--DEFINE COUNT_SMALL_DIVIDER="1000000" +--DEFINE COUNT_SMALL_HEADING="#million" + +DEFINE COUNT_FORMAT=999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=99,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + +DEFINE WEIGHT_FORMAT=999,999 +--DEFINE WEIGHT_DIVIDER="1000" +--DEFINE WEIGHT_HEADING="#1000" +DEFINE WEIGHT_DIVIDER="1000000" +DEFINE WEIGHT_HEADING="Million" +--DEFINE WEIGHT_DIVIDER="1000000000" +--DEFINE WEIGHT_HEADING="Billion" + + +DEFINE elapsed_time_weight=10 +DEFINE executions_weight=0.1 +DEFINE buffer_gets_weight=0.00000001 +DEFINE physical_read_bytes_weight=0.00000015 +DEFINE physical_write_bytes_weight=0.000001 + +COLUMN min_time HEADING "Snap Time (Min)" FORMAT a15 +COLUMN max_time HEADING "Snap Time (Max)" FORMAT a15 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN force_matching_signature HEADING "Force matching signature" FORMAT a30 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" +COLUMN weight HEADING "Weight|(&WEIGHT_HEADING)" FORMAT &&WEIGHT_FORMAT NOPRINT +COLUMN reason HEADING "Top|Reason" FORMAT a11 +COLUMN invalidations_total HEADING "Invalid|Total|(&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait_total HEADING "IO|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN apwait_total HEADING "Appl|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN ccwait_total HEADING "Conc|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN clwait_total HEADING "Cluster|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN plsexec_time_total HEADING "PLsexec|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN cpu_time_total HEADING "CPU|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN elapsed_time_total HEADING "Elapsed|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +--COLUMN executions_total HEADING "Exec|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN executions_total HEADING "Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed_total HEADING "Rows|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN sorts_total HEADING "Sorts|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN buffer_gets_total HEADING "Buffer|Gets|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN direct_writes_total HEADING "Direct|Write|Total|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_read_bytes_total HEADING "Phy|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_write_bytes_total HEADING "Phy|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN direct_write_bytes_total HEADING "Direct|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_change_bytes_total HEADING "Phy|Change|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT + +Prompt +Prompt *************************************************************************************************** +Prompt * A W R T O P &&TOP_RECORDCOUNT S Q L s +Prompt * +Prompt * Input Parameters +Prompt * - Instance Number - "&&INST_ID" +Prompt * - From Timestamp - "&&from_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - To Timestamp - "&&to_timestamp" (YYYY-MM-DD HH24:MI:SS) +Prompt * - Top RecordCount - "&&TOP_RECORDCOUNT" +Prompt * - Where Clause - "&&WHERECLAUSE" +Prompt *************************************************************************************************** + +set timing on + +WITH topsql as +( +SELECT /*+ NO_MERGE NO_UNNEST */ + * +FROM ( + SELECT /*+ LEADING(d s) USE_NL (d s ss) PARALLEL(s,8) PARALLEL(ss,8)*/ + CASE WHEN REGEXP_LIKE(DECODE(ss.force_matching_signature,0,ss.sql_id,ss.force_matching_signature), '[a-z]') + THEN '0' + ELSE DECODE(ss.force_matching_signature,0,ss.sql_id,ss.force_matching_signature) + END force_matching_signature + , max(ss.sql_id) sql_id + , DECODE( GREATEST(SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight + , SUM(ss.executions_delta) * &&executions_weight + --, SUM(ss.buffer_gets_delta) * &&buffer_gets_weight + , SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight + , SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight + ) + , SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight ,'CPU/Elapsed' + , SUM(ss.executions_delta) * &&executions_weight ,'Execs' + --, SUM(ss.buffer_gets_delta) * &&buffer_gets_weight ,'BufferGets' + , SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight ,'PhyRead' + , SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight ,'PhyWrite' + ) Reason + , ROUND(( + SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight + + SUM(ss.executions_delta) * &&executions_weight + --+ SUM(ss.buffer_gets_delta) * &&buffer_gets_weight + + SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight + + SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight + )/&WEIGHT_DIVIDER) weight +/* + , ROUND(SUM(ss.elapsed_time_delta)/1000000 * &&elapsed_time_weight) elapsed_time_weight + , ROUND(SUM(ss.executions_delta) * &&executions_weight) executions_weight + --, ROUND(SUM(ss.buffer_gets_delta) * &&buffer_gets_weight) buffer_gets_weight + , ROUND(SUM(ss.physical_read_bytes_delta) * &&physical_read_bytes_weight) physical_read_bytes_weight + , ROUND(SUM(ss.physical_write_bytes_delta) * &&physical_write_bytes_weight) physical_write_bytes_weight +*/ + , ROUND(SUM(ss.iowait_delta)/1000000 /&TIME_DIVIDER) iowait_total + , ROUND(SUM(ss.apwait_delta)/1000000 /&TIME_DIVIDER) apwait_total + , ROUND(SUM(ss.ccwait_delta)/1000000 /&TIME_DIVIDER) ccwait_total + , ROUND(SUM(ss.clwait_delta)/1000000 /&TIME_DIVIDER) clwait_total + , ROUND(SUM(ss.plsexec_time_delta)/1000000 /&TIME_DIVIDER) plsexec_time_total + , ROUND(SUM(ss.cpu_time_delta)/1000000 /&TIME_DIVIDER) cpu_time_total + , ROUND(SUM(ss.elapsed_time_delta)/1000000 /&TIME_DIVIDER) elapsed_time_total + , ROUND(SUM(ss.executions_delta) /&COUNT_SMALL_DIVIDER) executions_total + , ROUND(SUM(ss.rows_processed_delta) /&COUNT_DIVIDER) rows_processed_total + , ROUND(SUM(ss.sorts_delta) /&COUNT_SMALL_DIVIDER) sorts_total + , ROUND(SUM(ss.buffer_gets_delta) /&COUNT_DIVIDER) buffer_gets_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_interconnect_bytes_delta) /&BYTES_DIVIDER) io_interconnect_bytes_total + , ROUND(SUM(ss.physical_read_bytes_delta) /&BYTES_DIVIDER) physical_read_bytes_total + , ROUND(SUM(ss.physical_write_bytes_delta) /&BYTES_DIVIDER) physical_write_bytes_total + , ROUND(SUM(ss.direct_writes_delta * p.value) /&BYTES_DIVIDER) direct_write_bytes_total + , ROUND(SUM(ss.physical_write_bytes_delta + - (ss.direct_writes_delta * p.value)) /&BYTES_DIVIDER) physical_change_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.optimized_physical_reads_delta)/&BYTES_DIVIDER) optimized_physical_reads_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_elig_bytes_delta) /&BYTES_DIVIDER) io_offload_elig_bytes_total +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(SUM(ss.io_offload_return_bytes_delta) /&BYTES_DIVIDER) io_offload_return_bytes_total + from v$database d + , dba_hist_snapshot s + , dba_hist_sqlstat ss + , (select value from v$system_parameter where name = 'db_block_size') p + where d.dbid = s.dbid + AND ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND ss.instance_number LIKE '&&INST_ID' + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + and ss.sql_id not in + ('d7y4tdacc7f3j','5ysyjtdsjwsr2','7akf6xvjp5a6d','3s2u15uzjum48','5ysyjtdsjwsr2','4sp1tg6fv1a9p' + ,'bcv9qynmu1nv9','cm5vu20fhtnq1','7wv97t3szuvtd','ar9nmtmd28460','4m7m0t6fjcs5x','2skwhauh2cwky' + ,'12kw3xcxv1qpg','9tgj4g8y4rwy8','d9g3t9zr4v2kb','2ywx7n1p7v2fy','grwydz59pu6mc','8r5um7rpdkdkd' + ,'gx87sann8asuf','5wkhpq3k2ytq8','2jfqzrxhrm93b' + , '1awnrtw3c0v9g' -- Excluded on request of Kurt Vile (04-Jun-15) + , '8z8g8jz1dmrjs' -- Excluded on request of Paul Yip (04-Jun-15) + , '54xk7w1kf3prc' -- Excluded on request of Robert Lee (05-Aug-15) + ) + and ss.parsing_user_id not in ( + 84 --svc_name + , 0 -- SYS + ) + + &&WHERECLAUSE + GROUP BY ss.dbid + , DECODE(ss.force_matching_signature,0,ss.sql_id,ss.force_matching_signature) + order by weight DESC NULLS LAST + ) +WHERE ROWNUM <= &&TOP_RECORDCOUNT +) +SELECT /*+ */ +--/* + ( SELECT /*+ first_rows(ash) */ + u.username + FROM dba_hist_active_sess_history ash + , dba_users u + , v$database d + WHERE d.dbid = ash.dbid + AND ash.user_id = u.user_id + AND ash.sql_id = ss.sql_id + and ash.sample_time between TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + and TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + and rownum = 1 + ) username + , +--*/ + ss.* +from topsql ss +; + +set timing off + +@@footer diff --git a/vg/awr_xplan.sql b/vg/awr_xplan.sql new file mode 100644 index 0000000..8f0a316 --- /dev/null +++ b/vg/awr_xplan.sql @@ -0,0 +1,244 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Execution plan from AWR +* Parameters : 1 - SQL_ID (Use % as wildcard) +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Number of Days (Default 7 days) +* 4 - Whereclause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Jul-13 Vishal Gupta Show other SQLIds with same force_matching_signature +* 18-Mar-12 Vishal Gupta Intial version +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE days +UNDEFINE whereclause +UNDEFINE force_matching_signature + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" +DEFINE days="&&3" +DEFINE whereclause="&&4" +DEFINE force_matching_signature="" + + +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&days','','7','&&days') "_days" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" +FROM DUAL; +set term on + + +/************************************/ + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=9,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_SMALL_DIVIDER="1000" +--DEFINE COUNT_SMALL_HEADING="#1000" + + +DEFINE COUNT_FORMAT=99,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="100" +--DEFINE COUNT_HEADING="#100" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE COUNT_LARGE_FORMAT=9,999 +--DEFINE COUNT_LARGE_DIVIDER="1" +--DEFINE COUNT_LARGE_HEADING="#" +--DEFINE COUNT_LARGE_DIVIDER="1000" +--DEFINE COUNT_LARGE_HEADING="#1000" +DEFINE COUNT_LARGE_DIVIDER="1000000" +DEFINE COUNT_LARGE_HEADING="#mil" + + + +DEFINE BYTES_FORMAT="999,999" + +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=999,999 + +--DEFINE TIME_DIVIDER="0.001" +--DEFINE TIME_HEADING="msec" +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" +--DEFINE TIME_DIVIDER="3600" +--DEFINE TIME_HEADING="hr" + + +/************************************/ + + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +select to_char(ss2.force_matching_signature) "_force_matching_signature" + from v$database d + , dba_hist_sqlstat ss2 + where d.dbid = ss2.dbid + AND ss2.sql_id = '&&sql_id' and rownum = 1; + +select CASE WHEN '&&force_matching_signature' IS NULL THEN '0' + WHEN '&&force_matching_signature' = '' THEN '0' + ELSE '&&force_matching_signature' + END "_force_matching_signature" + from dual +; + +set term on + +/************************************/ + +Prompt ************************************************************** +Prompt * AWR SQL Executions Plans +Prompt * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT * - Days = '&&days' +PROMPT * - WhereClause = '&&whereclause' +Prompt ************************************************************** + + +PROMPT +PROMPT ################################################################# +PROMPT # S Q L P L A N H A S H V A L U E +PROMPT ################################################################# + +COLUMN force_matching_signature HEADING "Force Matching Signature" FORMAT 99999999999999999999999 +COLUMN sql_id HEADING "SQL_ID" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999999 +COLUMN cost HEADING "Cost" FORMAT 9999999999 +COLUMN last_used HEADING "LastUsed" FORMAT a20 +COLUMN first_used HEADING "FirstUsed" FORMAT a20 +COLUMN first_parsed HEADING "FirstParsed" FORMAT a20 + +COLUMN iowait_delta HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN apwait_delta HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN ccwait_delta HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN clwait_delta HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN plsexec_time_delta HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN cpu_time_delta HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN elapsed_time_delta HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT +COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN rows_processed_delta HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN sorts_delta HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT +COLUMN buffer_gets_delta HEADING "Buffer|Gets|(&&COUNT_LARGE_HEADING)|Per|Exec" FORMAT &&COUNT_LARGE_FORMAT +COLUMN direct_writes_delta HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN physical_read_bytes_delta HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN physical_write_bytes_delta HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT +COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a30 + + + +SELECT + p.sql_id + , p.plan_hash_value + , p.cost + , to_char(MAX(s.end_interval_time) ,'DD-MON-YY HH24:MI:SS') last_used + --, to_char(MIN(s.end_interval_time) ,'DD-MON-YY HH24:MI:SS') first_used + , to_char(MIN(p.timestamp) ,'DD-MON-YY HH24:MI:SS') first_parsed + , ROUND(sum(ss.executions_delta)/&&COUNT_DIVIDER) executions_delta + , ROUND(sum(ss.iowait_delta)/1000000/GREATEST(sum(ss.executions_delta),1)/&&TIME_DIVIDER) iowait_delta + , ROUND(sum(ss.cpu_time_delta)/1000000/GREATEST(sum(ss.executions_delta),1)/&&TIME_DIVIDER) cpu_time_delta + , ROUND(sum(ss.elapsed_time_delta)/1000000/GREATEST(sum(ss.executions_delta),1)/&&TIME_DIVIDER) elapsed_time_delta + , ROUND(sum(ss.buffer_gets_delta)/GREATEST(sum(ss.executions_delta),1)/&&COUNT_LARGE_DIVIDER) buffer_gets_delta +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(sum(ss.physical_read_bytes_delta)/GREATEST(sum(ss.executions_delta),1)/&&BYTES_DIVIDER) physical_read_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(sum(ss.physical_write_bytes_delta)/GREATEST(sum(ss.executions_delta),1)/&&BYTES_DIVIDER) physical_write_bytes_delta +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(sum(ss.direct_writes_delta)/GREATEST(sum(ss.executions_delta),1)/&&COUNT_DIVIDER) direct_writes_delta +&&_IF_ORA_11gR2_OR_HIGHER , ROUND(sum(ss.optimized_physical_reads_delta)/GREATEST(sum(ss.executions_delta),1)/&&COUNT_DIVIDER) optimized_physical_reads_delta + FROM v$database d + , dba_hist_sql_plan p + , dba_hist_sqlstat ss + , dba_hist_snapshot s + WHERE d.dbid = p.dbid + AND p.dbid = ss.dbid + AND p.sql_id = ss.sql_id + AND p.plan_hash_value = ss.plan_hash_value + AND ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + AND s.end_interval_time > SYSDATE - &&days + AND p.id = 0 -- Top row of SQL Plan only which has cost as well + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature = '&&force_matching_signature' + AND ss.plan_hash_value LIKE '&&plan_hash_value' + &&whereclause +GROUP BY ss.force_matching_signature + , p.sql_id + , p.plan_hash_value + , p.cost +ORDER BY MAX(s.end_interval_time) desc +/ + +PROMPT +PROMPT +PROMPT ################################################################# +PROMPT # E X E C U T I O N P L A N S +PROMPT ################################################################# +PROMPT + +SET long 4000 +SET longchunksize 4000 +set pages 0 +set lines 250 + +COLUMN plan_table_output HEADING "SQLText" FORMAT a200 WRAP + + +SELECT * +FROM table(DBMS_XPLAN.display_awr( sql_id => '&&sql_id' + , plan_hash_value => DECODE('&&plan_hash_value','%',-1,TO_NUMBER('&&plan_hash_value')) + , db_id => (select dbid from v$database) + , format => 'ADVANCED ALLSTATS PREDICATE PROJECTION ' + ) + ) +; + + +@@footer diff --git a/vg/awr_xplan_diff.sql b/vg/awr_xplan_diff.sql new file mode 100644 index 0000000..c67745a --- /dev/null +++ b/vg/awr_xplan_diff.sql @@ -0,0 +1,103 @@ +@@header + +PROMPT +PROMPT ################################################################# +PROMPT # SCRIPT NOT COMPLETED YET +PROMPT ################################################################# +PROMPT + + +/* +* +* Author : Vishal Gupta +* Purpose : Display different in execution plan from AWR +* Parameters : 1 - SQL_ID +* : 1 - PLAN_HASH_VALUE1 +* : 1 - PLAN_HASH_VALUE2 +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 18-Mar-12 Vishal Gupta Intial version +* +* +*/ + +SET verify OFF + +VARIABLE sql_id VARCHAR2(13) +VARIABLE plan_hash_value1 VARCHAR2(20) +VARIABLE plan_hash_value2 VARCHAR2(20) + +BEGIN + :sql_id := '&&1'; + :plan_hash_value1 := '&&2'; + :plan_hash_value2 := '&&3'; +END; +/ + +PROMPT +PROMPT ################################################################# +PROMPT # A L L S Q L P L A N H A S H V A L U E +PROMPT ################################################################# + +SELECT p.sql_id + , p.plan_hash_value + , p.cost + , to_char(p.timestamp ,'DD-MON-YY HH24:MI:SS') "Date First Used" + FROM dba_hist_sql_plan p + , v$database d + WHERE d.dbid = p.dbid + AND p.sql_id = :sql_id + AND p.id = 0 -- Top row which has cost as well +ORDER BY timestamp desc +/ + + +PROMPT +PROMPT +PROMPT ################################################################# +PROMPT # A L L E X E C U T I O N P L A N S +PROMPT ################################################################# +PROMPT + +SET long 4000 +SET longchunksize 400000 +set pages 0 + +COLUMN plan_table_output HEADING "SQLText" FORMAT a175 WRAP + +print :sql_id +print :plan_hash_value1 +print :plan_hash_value2 +/* +VARIABLE plan_diff VARCHAR2(4000) +BEGIN +:plan_diff := DBMS_XPLAN.diff_plan_awr( sql_id => :sql_id , plan_hash_value1 => :plan_hash_value1 , plan_hash_value2 => :plan_hash_value2) ; +END; +/ + +print :plan_diff + +*/ + +DECLARE + plan_diff VARCHAR2(4000); +BEGIN +plan_diff := DBMS_XPLAN.diff_plan_awr( sql_id => :sql_id , plan_hash_value1 => :plan_hash_value1 , plan_hash_value2 => :plan_hash_value2) ; +DBMS_OUTPUT.put_line(plan_diff); +END; +/ + + +BEGIN + :sql_id := NULL; + :plan_hash_value1 := NULL; + :plan_hash_value2 := NULL; +END; +/ + + +@@footer diff --git a/vg/awr_xplan_unstable.sql b/vg/awr_xplan_unstable.sql new file mode 100644 index 0000000..e713456 --- /dev/null +++ b/vg/awr_xplan_unstable.sql @@ -0,0 +1,110 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display unstable execution plan from AWR +* Version : +* Parameters : 1 - From Timestamp (YYYY-MM-DD HH24:MI:SS) +* 2 - To Timestamp (YYYY-MM-DD HH24:MI:SS) +* 3 - Top record Count +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Jun-12 Vishal Gupta Intial version +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT + +DEFINE FROM_TIMESTAMP="&&1" +DEFINE TO_TIMESTAMP="&2" +DEFINE TOP_RECORDCOUNT="&3" + + +COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT +COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT +COLUMN _TOP_RECORDCOUNT NEW_VALUE TOP_RECORDCOUNT NOPRINT + + +set term off +SELECT DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 7 - (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP" + , DECODE('&&TO_TIMESTAMP','',to_char(sysdate + (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP" + , DECODE('&&TOP_RECORDCOUNT','','20','&&TOP_RECORDCOUNT') "_TOP_RECORDCOUNT" +FROM DUAL +; + +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * Top &&TOP_RECORDCOUNT SQLIds with unstable execution plan +PROMPT *********************************************************************** + + +COLUMN force_matching_signature HEADING "Force Matching Signature" FORMAT 999999999999999999999 +COLUMN elapsed_time_perexec_max HEADING "Max|Elapsed|Time|(sec)" FORMAT 999,999,999.999 +COLUMN elapsed_time_perexec_min HEADING "Min|Elapsed|Time|(sec)" FORMAT 999,999,999.999 +COLUMN elapsed_time_perexec_avg HEADING "Avg|Elapsed|Time|(sec)" FORMAT 999,999,999.999 +COLUMN elapsed_time_perexec_deviation HEADING "Deviation|Elapsed|Time|(sec)" FORMAT 999,999,999.999 + +SELECT * +FROM +( +SELECT ss.force_matching_signature + , max(ss.sql_id) sql_id + , max(ss.elapsed_time_total/1000000/ss.executions_total) elapsed_time_perexec_max + , min(ss.elapsed_time_total/1000000/ss.executions_total) elapsed_time_perexec_min + , avg(ss.elapsed_time_total/1000000/ss.executions_total) elapsed_time_perexec_avg + , (max(ss.elapsed_time_total/1000000/ss.executions_total) + - avg(ss.elapsed_time_total/1000000/ss.executions_total) + ) + / avg(ss.elapsed_time_total/1000000/ss.executions_total) elapsed_time_perexec_deviation + FROM v$database d + , dba_hist_snapshot s + , dba_hist_sqlstat ss + -- , dba_hist_sql_plan p + WHERE d.dbid = s.dbid + AND ss.dbid = s.dbid + AND ss.instance_number = s.instance_number + AND ss.snap_id = s.snap_id + -- AND p.dbid = ss.dbid (+) + -- AND p.sql_id = ss.sql_id (+) + -- AND p.plan_hash_value = ss.plan_hash_value (+) + -- AND p.id = 0 -- Top row which has cost as well + AND s.begin_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS') + AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS') + AND ss.force_matching_signature <> 0 + AND ss.executions_delta > 0 + AND ss.executions_total > 0 + AND ss.elapsed_time_total > 0 +GROUP BY ss.force_matching_signature +/* +HAVING (max(ss.elapsed_time_total/1000000/ss.executions_total) + - avg(ss.elapsed_time_total/1000000/ss.executions_total) + ) + / avg(ss.elapsed_time_total/1000000/ss.executions_total) > 0.1 +*/ +ORDER BY elapsed_time_perexec_deviation desc +) +WHERE ROWNUM <= &&TOP_RECORDCOUNT +/ + +UNDEFINE FROM_TIMESTAMP +UNDEFINE TO_TIMESTAMP +UNDEFINE TOP_RECORDCOUNT + +@@footer diff --git a/vg/backupenv.sql b/vg/backupenv.sql new file mode 100644 index 0000000..58b38fc --- /dev/null +++ b/vg/backupenv.sql @@ -0,0 +1,64 @@ +set appinfo OFF +set appinfo "SQL*Plus" +set arraysize 5000 +set autocommit OFF +set autoprint OFF +set autorecovery OFF +set autotrace OFF +set blockterminator "." +set cmdsep OFF +set colsep " " +set compatibility NATIVE +set concat "." +set copycommit 0 +set copytypecheck ON +set define "&" +set describe DEPTH 1 LINENUM OFF INDENT ON +set echo OFF +set editfile "afiedt.buf" +set embedded OFF +set escape OFF +set escchar OFF +set exitcommit ON +set feedback ON +set flagger OFF +set flush ON +set heading ON +set headsep "|" +set linesize 80 +set logsource "" +set long 80 +set longchunksize 80 +set markup HTML OFF HEAD "SQL*Plus Report" BODY "" TABLE "border='1' width='90%' align='center' summary='Script output'" SPOOL OFF ENTMAP ON PRE OFF +set newpage 1 +set null "" +set numformat "" +set numwidth 10 +set pagesize 80 +set pause OFF +set recsep WRAP +set recsepchar " " +set securedcol OFF +set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED +set shiftinout invisible +set showmode OFF +set sqlblanklines ON +set sqlcase MIXED +set sqlcontinue "> " +set sqlnumber ON +set sqlpluscompatibility 11.2.0 +set sqlprefix "#" +set sqlprompt "bt01pimi1:SQL> " +set sqlterminator ";" +set suffix "sql" +set tab OFF +set termout OFF +set time OFF +set timing OFF +set trimout ON +set trimspool ON +set underline "-" +set verify ON +set wrap ON +set xmloptimizationcheck OFF diff --git a/vg/ccf_test8.sql b/vg/ccf_test8.sql new file mode 100644 index 0000000..aa5d45f --- /dev/null +++ b/vg/ccf_test8.sql @@ -0,0 +1,33 @@ +STARTUP NOMOUNT + +CREATE CONTROLFILE set DATABASE "test8" RESETLOGS NOARCHIVELOG +-- SET STANDBY TO MAXIMIZE PERFORMANCE + MAXLOGFILES 50 + MAXLOGMEMBERS 5 + MAXDATAFILES 100 + MAXINSTANCES 1 + MAXLOGHISTORY 226 +LOGFILE + GROUP 1 '/bms/u04/oradata/test8/redo01.log' SIZE 20M, + GROUP 2 '/bms/u04/oradata/test8/redo02.log' SIZE 20M, + GROUP 3 '/bms/u04/oradata/test8/redo03.log' SIZE 20M +-- STANDBY LOGFILE +DATAFILE + '/bms/u04/oradata/test8/system01.dbf', + '/bms/u04/oradata/test8/undotbs01.dbf', + '/bms/u04/oradata/test8/usr01.dbf', + '/bms/u04/oradata/test8/indx01.dbf' +CHARACTER SET WE8ISO8859P15 +; + +ALTER DATABASE OPEN RESETLOGS; + +ALTER TABLESPACE TEMPORARY ADD TEMPFILE '/bms/u04/oradata/test8/temporary01.dbf' + REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; + +alter database rename global_name to test8.world; + +alter user cramer identified by cramer; +alter user sys identified by syspass; +alter user system identified by syspass; + diff --git a/vg/coe_sqlarea_80.sql b/vg/coe_sqlarea_80.sql new file mode 100644 index 0000000..0c3c5ad --- /dev/null +++ b/vg/coe_sqlarea_80.sql @@ -0,0 +1,499 @@ +set echo off +SET term off ver off feed off trims on; +-- Seeded Parameters +define p_top = 10; +define p_factor_th = 0.0040; + +variable v_count number; +variable v_buffer_gets number; +variable v_disk_reads number; +variable v_executions number; +variable v_bg_per_exec number; +variable v_dr_per_exec number; +variable v_istartup varchar2(15); + +SET term on ver off feed off trims on; +PROMPT Calculating SQL Area totals per category... +SET term off; +BEGIN + SELECT COUNT(*), + TRUNC(SUM(ABS(BUFFER_GETS))), + TRUNC(SUM(ABS(DISK_READS))), + TRUNC(SUM(ABS(EXECUTIONS))), + TRUNC(SUM(ABS(BUFFER_GETS)/ + DECODE(NVL(ABS(EXECUTIONS),0),0,1,ABS(EXECUTIONS)))), + TRUNC(SUM(ABS(DISK_READS)/ + DECODE(NVL(ABS(EXECUTIONS),0),0,1,ABS(EXECUTIONS)))) + INTO :v_count, + :v_buffer_gets, + :v_disk_reads, + :v_executions, + :v_bg_per_exec, + :v_dr_per_exec + FROM V$SQLAREA; + SELECT TO_CHAR(STARTUP_TIME,'DD-MON-YY HH24:MI') + INTO :v_istartup + FROM V$INSTANCE + WHERE ROWNUM = 1; +END; +/ + +SET term on; +PROMPT Creating COE_SQLAREA temp table... +SET term off; +DROP TABLE COE_SQLAREA; +CREATE TABLE COE_SQLAREA + (ROW_NUM NUMBER,HASH_VALUE NUMBER,ADDRESS RAW(4),BUFFER_GETS NUMBER, + DISK_READS NUMBER,EXECUTIONS NUMBER,BG_PER_EXEC NUMBER,DR_PER_EXEC NUMBER, + PARSING_USER_ID NUMBER,MODULE VARCHAR2(64),ACTION VARCHAR2(64), + SQL_TEXT VARCHAR2(64),P_BUFFER_GETS NUMBER,P_DISK_READS NUMBER, + P_EXECUTIONS NUMBER,P_BG_PER_EXEC NUMBER,P_DR_PER_EXEC NUMBER, + USERNAME VARCHAR2(30),T_BUFFER_GETS NUMBER,T_DISK_READS NUMBER, + T_EXECUTIONS NUMBER,T_BG_PER_EXEC NUMBER,T_DR_PER_EXEC NUMBER) NOLOGGING; + +INSERT INTO COE_SQLAREA +SELECT ROWNUM, + HASH_VALUE, + ADDRESS, + ABS(BUFFER_GETS), + ABS(DISK_READS), + ABS(EXECUTIONS), + ROUND(ABS(BUFFER_GETS)/ + DECODE(NVL(ABS(EXECUTIONS),0),0,1,ABS(EXECUTIONS))), + ROUND(ABS(DISK_READS)/ + DECODE(NVL(ABS(EXECUTIONS),0),0,1,ABS(EXECUTIONS))), + PARSING_USER_ID, + MODULE, + ACTION, + SUBSTR(SQL_TEXT,1,64), + ROUND(ABS(BUFFER_GETS)*100/:v_buffer_gets,3), + ROUND(ABS(DISK_READS)*100/:v_disk_reads,3), + ROUND(ABS(EXECUTIONS)*100/:v_executions,3), + ROUND((ABS(BUFFER_GETS)/ + DECODE(NVL(ABS(EXECUTIONS),0),0,1,ABS(EXECUTIONS)))*100/ + :v_bg_per_exec,3), + ROUND((ABS(DISK_READS)/ + DECODE(NVL(ABS(EXECUTIONS),0),0,1,ABS(EXECUTIONS)))*100/ + :v_dr_per_exec,3), + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + FROM V$SQLAREA + WHERE +-- PARSING_USER_ID <> 0 AND + (ABS(BUFFER_GETS) + > TO_NUMBER('&&p_factor_th')*:v_buffer_gets + OR ABS(DISK_READS) + > TO_NUMBER('&&p_factor_th')*:v_disk_reads + OR ABS(EXECUTIONS) + > TO_NUMBER('&&p_factor_th')*:v_executions + OR ABS(BUFFER_GETS)/DECODE(NVL(ABS(EXECUTIONS),0),0,1,ABS(EXECUTIONS)) + > TO_NUMBER('&&p_factor_th')*:v_bg_per_exec + OR ABS(DISK_READS)/DECODE(NVL(ABS(EXECUTIONS),0),0,1,ABS(EXECUTIONS)) + > TO_NUMBER('&&p_factor_th')*:v_dr_per_exec); + +UPDATE COE_SQLAREA CS + SET USERNAME = (SELECT USERNAME + FROM ALL_USERS + WHERE USER_ID=CS.PARSING_USER_ID); + +SET term on; +PROMPT Calculating Top &&p_top SQL per category... +SET term off; +DECLARE + c_top NUMBER; + c_rownum NUMBER; + cursor C1 is + SELECT ROW_NUM + FROM COE_SQLAREA + ORDER BY BUFFER_GETS DESC; + cursor C2 is + SELECT ROW_NUM + FROM COE_SQLAREA + ORDER BY DISK_READS DESC; + cursor C3 is + SELECT ROW_NUM + FROM COE_SQLAREA + ORDER BY EXECUTIONS DESC; + cursor C4 is + SELECT ROW_NUM + FROM COE_SQLAREA + ORDER BY BG_PER_EXEC DESC; + cursor C5 is + SELECT ROW_NUM + FROM COE_SQLAREA + ORDER BY DR_PER_EXEC DESC; +BEGIN + c_top := 1; + OPEN C1; + LOOP + FETCH C1 into c_rownum; + EXIT when C1%NOTFOUND; + EXIT when c_top = TO_NUMBER('&&p_top')+1; + UPDATE COE_SQLAREA + SET T_BUFFER_GETS = c_top + WHERE ROW_NUM = c_rownum + AND BUFFER_GETS > TO_NUMBER('&&p_factor_th')*:v_buffer_gets; + c_top := c_top+1; + END LOOP; + c_top := 1; + OPEN C2; + LOOP + FETCH C2 into c_rownum; + EXIT when C2%NOTFOUND; + EXIT when c_top = TO_NUMBER('&&p_top')+1; + UPDATE COE_SQLAREA + SET T_DISK_READS = c_top + WHERE ROW_NUM = c_rownum + AND DISK_READS > TO_NUMBER('&&p_factor_th')*:v_disk_reads; + c_top := c_top+1; + END LOOP; + c_top := 1; + OPEN C3; + LOOP + FETCH C3 into c_rownum; + EXIT when C3%NOTFOUND; + EXIT when c_top = TO_NUMBER('&&p_top')+1; + UPDATE COE_SQLAREA + SET T_EXECUTIONS = c_top + WHERE ROW_NUM = c_rownum + AND EXECUTIONS > TO_NUMBER('&&p_factor_th')*:v_executions; + c_top := c_top+1; + END LOOP; + c_top := 1; + OPEN C4; + LOOP + FETCH C4 into c_rownum; + EXIT when C4%NOTFOUND; + EXIT when c_top = TO_NUMBER('&&p_top')+1; + UPDATE COE_SQLAREA + SET T_BG_PER_EXEC = c_top + WHERE ROW_NUM = c_rownum + AND BUFFER_GETS/DECODE(NVL(EXECUTIONS,0),0,1,EXECUTIONS) + > TO_NUMBER('&&p_factor_th')*:v_bg_per_exec; + c_top := c_top+1; + END LOOP; + c_top := 1; + OPEN C5; + LOOP + FETCH C5 into c_rownum; + EXIT when C5%NOTFOUND; + EXIT when c_top = TO_NUMBER('&&p_top')+1; + UPDATE COE_SQLAREA + SET T_DR_PER_EXEC = c_top + WHERE ROW_NUM = c_rownum + AND DISK_READS/DECODE(NVL(EXECUTIONS,0),0,1,EXECUTIONS) + > TO_NUMBER('&&p_factor_th')*:v_dr_per_exec; + c_top := c_top+1; + END LOOP; +END; +/ + +UPDATE COE_SQLAREA CS + SET CS.ROW_NUM = ROWNUM + WHERE ( CS.T_BUFFER_GETS < TO_NUMBER('&&p_top')+1 OR + CS.T_DISK_READS < TO_NUMBER('&&p_top')+1 OR + CS.T_EXECUTIONS < TO_NUMBER('&&p_top')+1 OR + CS.T_BG_PER_EXEC < TO_NUMBER('&&p_top')+1 OR + CS.T_DR_PER_EXEC < TO_NUMBER('&&p_top')+1 ); + +COLUMN NAMESPACE FORMAT A15 HEADING 'Component'; +COLUMN GETS FORMAT 999,999,999,999 HEADING 'Get Requests'; +COLUMN GETHITRATIO FORMAT 999.9 HEADING 'Get|Hit|Ratio|Pct'; +COLUMN PINS FORMAT 999,999,999,999 HEADING 'Pin Requests'; +COLUMN PINHITRATIO FORMAT 999.9 HEADING 'Pin|Hit|Ratio|Pct'; +COLUMN RELOADS FORMAT 999,999,999,999 HEADING 'Reloads' +COLUMN PINRELOADRATIO FORMAT 999.9 HEADING 'Pin|Reload|Ratio|Pct'; +COLUMN INVALIDATIONS FORMAT 999,999,999,999 HEADING 'Invalidations'; +COLUMN POOL_NAME FORMAT A20 HEADING 'SGA Structure'; +COLUMN POOL_BYTES FORMAT 99,999,999,999 HEADING 'Size in Bytes'; +COLUMN POOL_MBYTES FORMAT 99,999.9 HEADING 'Size in MB'; +COLUMN SQL_COUNT FORMAT 999,999,999 HEADING 'SQL Count'; +COLUMN S_BUFFER_GETS FORMAT 999,999,999,999 - + HEADING '(A)|SQL Area Sum of|Logical Reads|(Buffer Gets)'; +COLUMN S_DISK_READS FORMAT 999,999,999,999 - + HEADING '(B)|SQL Area Sum of|Physical Reads|(Disk Reads)'; +COLUMN S_EXECUTIONS FORMAT 999,999,999,999 - + HEADING '(C)|SQL Area Sum of|Number of|Executions'; +COLUMN S_BG_PER_EXEC FORMAT 999,999,999,999 - + HEADING '(D)|SQL Area Sum of|Logical Reads|per Execution'; +COLUMN S_DR_PER_EXEC FORMAT 999,999,999,999 - + HEADING '(E)|SQL Area Sum of|Physical Reads|per Execution'; +COLUMN DATE_TIME FORMAT A15 HEADING 'Execution|Date and Time'; +COLUMN ISTARTUP FORMAT A15 HEADING 'Instance|Startup'; +COLUMN T_BUFFER_GETS FORMAT 9999 HEADING 'Top|LR'; +COLUMN T_DISK_READS FORMAT 9999 HEADING 'Top|PR'; +COLUMN T_EXECUTIONS FORMAT 9999 HEADING 'Top|Exec'; +COLUMN T_BG_PER_EXEC FORMAT 9999 HEADING 'Top|LR|per|Exec'; +COLUMN T_DR_PER_EXEC FORMAT 9999 HEADING 'Top|PR|per|Exec'; +COLUMN BUFFER_GETS FORMAT 99,999,999,999 - + HEADING '(F)|Logical Reads|(Buffer Gets)'; +COLUMN DISK_READS FORMAT 99,999,999,999 - + HEADING '(G)|Physical Reads|(Disk Reads)'; +COLUMN EXECUTIONS FORMAT 99,999,999,999 - + HEADING '(H)|Number of|Executions'; +COLUMN BG_PER_EXEC FORMAT 99,999,999,999 - + HEADING '(I)|Logical Reads|per Execution'; +COLUMN DR_PER_EXEC FORMAT 99,999,999,999 - + HEADING '(J)|Physical Reads|per Execution'; +COLUMN P_BUFFER_GETS FORMAT 999.999 - + HEADING 'LR(*)|percent|(F/A)'; +COLUMN P_DISK_READS FORMAT 999.999 - + HEADING 'PR(*)|percent|(G/B)'; +COLUMN P_EXECUTIONS FORMAT 999.999 - + HEADING 'Exec(*)|percent|(H/C)'; +COLUMN P_BG_PER_EXEC FORMAT 999.999 - + HEADING 'LR(*)|per Exe|percent|(I/D)'; +COLUMN P_DR_PER_EXEC FORMAT 999.999 - + HEADING 'PR(*)|per Exe|percent|(J/E)'; +COLUMN ROW_NUM FORMAT 999999 HEADING 'SQL ID'; +COLUMN USERNAME FORMAT A10 HEADING 'User'; +COLUMN MODULE_ACTION FORMAT A40 HEADING 'Source (Module and Action)'; +COLUMN SQL_TEXT_L1 FORMAT A64 HEADING 'SQL Text (first 64 bytes)'; +COLUMN SQL_TEXT FORMAT A64 HEADING 'SQL Text'; +COLUMN HASH_VALUE FORMAT 999999999999999 HEADING 'Hash Value'; +COLUMN PIECE NOPRINT; +COLUMN DUMMY NOPRINT; + +SET term on; +PROMPT Generating SPOOL file... +PROMPT +PROMPT +SET term off; + +SET term on pages 10000 lines 156; +SPOOL coe_sqlarea_80.txt; + +PROMPT Library Cache statistics for SQL and PL/SQL +PROMPT =========================================== + +SELECT NAMESPACE, + GETS, + ROUND(GETHITRATIO*100,1) GETHITRATIO, + PINS, + ROUND(PINHITRATIO*100,1) PINHITRATIO, + RELOADS, + ROUND((PINS-RELOADS)*100/DECODE(NVL(PINS,0),0,1,PINS),1) PINRELOADRATIO, + INVALIDATIONS + FROM V$LIBRARYCACHE + WHERE NAMESPACE IN ('SQL AREA', + 'TABLE/PROCEDURE', + 'BODY', + 'TRIGGER'); +PROMPT +PROMPT +PROMPT Related Shared Pool SGA Structures +PROMPT ================================== + +SELECT NAME POOL_NAME, + BYTES POOL_BYTES, + ROUND(BYTES/1048576,1) POOL_MBYTES + FROM V$SGASTAT + WHERE POOL = 'shared pool' + AND NAME IN ('free memory', + 'sessions', + 'dictionary cache', + 'library cache', + 'sql area') +UNION ALL +SELECT 'Shared Pool Reserved', + TO_NUMBER(VALUE), + ROUND(TO_NUMBER(VALUE)/1048576,1) + FROM V$PARAMETER + WHERE NAME = 'shared_pool_reserved_size' +UNION ALL +SELECT 'Total Shared Pool', + TO_NUMBER(VALUE), + ROUND(TO_NUMBER(VALUE)/1048576,1) + FROM V$PARAMETER + WHERE NAME = 'shared_pool_size'; + +PROMPT +PROMPT +PROMPT SQL Area grand totals per category +PROMPT ================================== + +SELECT :v_count SQL_COUNT, + :v_buffer_gets S_BUFFER_GETS, + :v_disk_reads S_DISK_READS, + :v_executions S_EXECUTIONS, + :v_bg_per_exec S_BG_PER_EXEC, + :v_dr_per_exec S_DR_PER_EXEC, + TO_CHAR(SYSDATE,'DD-MON-YY HH24:MI') DATE_TIME, + :v_istartup ISTARTUP + FROM DUAL; + +PROMPT +PROMPT +PROMPT Top &&p_top most expensive SQL Statements per category +PROMPT ================================================= + +BREAK ON DUMMY; +COMPUTE SUM OF BUFFER_GETS P_BUFFER_GETS ON DUMMY; +SELECT NULL DUMMY, + T_BUFFER_GETS, + ROW_NUM, + BUFFER_GETS, + P_BUFFER_GETS, + SUBSTR(USERNAME,1,10) USERNAME, + SUBSTR(MODULE||' '||ACTION,1,40) MODULE_ACTION, + SQL_TEXT SQL_TEXT_L1 + FROM COE_SQLAREA + WHERE T_BUFFER_GETS < TO_NUMBER('&&p_top')+1 + ORDER BY T_BUFFER_GETS; + +COMPUTE SUM OF DISK_READS P_DISK_READS ON DUMMY; +SELECT NULL DUMMY, + T_DISK_READS, + ROW_NUM, + DISK_READS, + P_DISK_READS, + SUBSTR(USERNAME,1,10) USERNAME, + SUBSTR(MODULE||' '||ACTION,1,40) MODULE_ACTION, + SQL_TEXT SQL_TEXT_L1 + FROM COE_SQLAREA + WHERE T_DISK_READS < TO_NUMBER('&&p_top')+1 + ORDER BY T_DISK_READS; + +COMPUTE SUM OF EXECUTIONS P_EXECUTIONS ON DUMMY; +SELECT NULL DUMMY, + T_EXECUTIONS, + ROW_NUM, + EXECUTIONS, + P_EXECUTIONS, + SUBSTR(USERNAME,1,10) USERNAME, + SUBSTR(MODULE||' '||ACTION,1,40) MODULE_ACTION, + SQL_TEXT SQL_TEXT_L1 + FROM COE_SQLAREA + WHERE T_EXECUTIONS < TO_NUMBER('&&p_top')+1 + ORDER BY T_EXECUTIONS; + +COMPUTE SUM OF BG_PER_EXEC P_BG_PER_EXEC ON DUMMY; +SELECT NULL DUMMY, + T_BG_PER_EXEC, + ROW_NUM, + BG_PER_EXEC, + P_BG_PER_EXEC, + SUBSTR(USERNAME,1,10) USERNAME, + SUBSTR(MODULE||' '||ACTION,1,40) MODULE_ACTION, + SQL_TEXT SQL_TEXT_L1 + FROM COE_SQLAREA + WHERE T_BG_PER_EXEC < TO_NUMBER('&&p_top')+1 + ORDER BY T_BG_PER_EXEC; + +COMPUTE SUM OF DR_PER_EXEC P_DR_PER_EXEC ON DUMMY; +SELECT NULL DUMMY, + T_DR_PER_EXEC, + ROW_NUM, + DR_PER_EXEC, + P_DR_PER_EXEC, + SUBSTR(USERNAME,1,10) USERNAME, + SUBSTR(MODULE||' '||ACTION,1,40) MODULE_ACTION, + SQL_TEXT SQL_TEXT_L1 + FROM COE_SQLAREA + WHERE T_DR_PER_EXEC < TO_NUMBER('&&p_top')+1 + ORDER BY T_DR_PER_EXEC; + +PROMPT +PROMPT Note(*): Percentage of grand total for SQL Area, per resource category +PROMPT + +PROMPT +PROMPT Summary of SQL Statements on the 5 Top &&p_top lists +PROMPT =============================================== + +BREAK ON DUMMY; +COMPUTE SUM OF BUFFER_GETS P_BUFFER_GETS DISK_READS P_DISK_READS - + EXECUTIONS P_EXECUTIONS BG_PER_EXEC P_BG_PER_EXEC - + DR_PER_EXEC P_DR_PER_EXEC ON DUMMY; +SELECT NULL DUMMY, + CS.ROW_NUM, + CS.BUFFER_GETS, + CS.P_BUFFER_GETS, + CS.DISK_READS, + CS.P_DISK_READS, + CS.EXECUTIONS, + CS.P_EXECUTIONS, + CS.BG_PER_EXEC, + CS.P_BG_PER_EXEC, + CS.DR_PER_EXEC, + CS.P_DR_PER_EXEC + FROM COE_SQLAREA CS + WHERE ( CS.T_BUFFER_GETS < TO_NUMBER('&&p_top')+1 OR + CS.T_DISK_READS < TO_NUMBER('&&p_top')+1 OR + CS.T_EXECUTIONS < TO_NUMBER('&&p_top')+1 OR + CS.T_BG_PER_EXEC < TO_NUMBER('&&p_top')+1 OR + CS.T_DR_PER_EXEC < TO_NUMBER('&&p_top')+1 ) + ORDER BY CS.ROW_NUM; + +PROMPT +PROMPT Note(*): Percentage of grand total for SQL Area, per resource category +PROMPT + +SELECT CS.ROW_NUM, + CS.T_BUFFER_GETS, + CS.T_DISK_READS, + CS.T_EXECUTIONS, + CS.T_BG_PER_EXEC, + CS.T_DR_PER_EXEC, + CS.HASH_VALUE, + SUBSTR(CS.USERNAME,1,10) USERNAME, + SUBSTR(CS.MODULE||' '||CS.ACTION,1,40) MODULE_ACTION + FROM COE_SQLAREA CS + WHERE ( CS.T_BUFFER_GETS < TO_NUMBER('&&p_top')+1 OR + CS.T_DISK_READS < TO_NUMBER('&&p_top')+1 OR + CS.T_EXECUTIONS < TO_NUMBER('&&p_top')+1 OR + CS.T_BG_PER_EXEC < TO_NUMBER('&&p_top')+1 OR + CS.T_DR_PER_EXEC < TO_NUMBER('&&p_top')+1 ) + ORDER BY CS.ROW_NUM; + +PROMPT +PROMPT +PROMPT Full text of identified expensive SQL Statements ordered by SQL ID +PROMPT ================================================================== + +BREAK ON ROW_NUM SKIP 1 ON T_BUFFER_GETS ON T_DISK_READS - + ON T_EXECUTIONS ON T_BG_PER_EXEC ON T_DR_PER_EXEC - + ON USERNAME ON MODULE_ACTION; +SELECT CS.ROW_NUM, + ST.PIECE, + ST.SQL_TEXT, + CS.T_BUFFER_GETS, + CS.T_DISK_READS, + CS.T_EXECUTIONS, + CS.T_BG_PER_EXEC, + CS.T_DR_PER_EXEC, + SUBSTR(CS.USERNAME,1,10) USERNAME, + SUBSTR(CS.MODULE||' '||CS.ACTION,1,40) MODULE_ACTION + FROM COE_SQLAREA CS, + V$SQLTEXT ST + WHERE + CS.HASH_VALUE = ST.HASH_VALUE + AND CS.ADDRESS = ST.ADDRESS + AND ( CS.T_BUFFER_GETS < TO_NUMBER('&&p_top')+1 OR + CS.T_DISK_READS < TO_NUMBER('&&p_top')+1 OR + CS.T_EXECUTIONS < TO_NUMBER('&&p_top')+1 OR + CS.T_BG_PER_EXEC < TO_NUMBER('&&p_top')+1 OR + CS.T_DR_PER_EXEC < TO_NUMBER('&&p_top')+1 ) + ORDER BY CS.ROW_NUM, ST.PIECE; + +PROMPT coe_sqlarea_80.txt has been generated. +PROMPT +PROMPT Recover the coe_sqlarea_80.txt spool file, compress into file +PROMPT coesqlarea.zip and send/upload the resulting coesqlarea.zip file for +PROMPT further analysis. +PROMPT +PROMPT If you wish to print the spool file nicely, open it in Wordpad or Word. +PROMPT Use File -> Page Setup (menu option) to change Orientation to Landscape. +PROMPT Using same menu option make all 4 Margins 0.2". Exit this menu option. +PROMPT Do a 'Select All' (Ctrl+A) and change Font to 'Courier New' Size 8. +PROMPT +SPOOL off; +UNDEFINE p_top,p_factor_th; +SET ver on feed on trims off long 80 pages 24 lin 80 feed on; +SET sqlp SQL> sqln on; + + diff --git a/vg/coe_sqlarea_session.sql b/vg/coe_sqlarea_session.sql new file mode 100644 index 0000000..84db4dc --- /dev/null +++ b/vg/coe_sqlarea_session.sql @@ -0,0 +1,1199 @@ +Set echo off +/*$Header: coe_sqlarea_session.sql 8.1-9.2 169630.1 2003/11/21 csierra coe $*/ +SET term off; +SET term off ver off feed off trims on pages 0 lin 4050 long 32767 longc 78; +SET recsep off sqlp '' sqln off serveroutput on size 1000000 num 14; + +DEFINE p_top = 5; + +VARIABLE v_top NUMBER; + +VARIABLE v_saddr VARCHAR2(16); +VARIABLE v_sid NUMBER; +VARIABLE v_serial# NUMBER; +VARIABLE v_paddr VARCHAR2(16); +VARIABLE v_command NUMBER; +VARIABLE v_taddr VARCHAR2(16); +VARIABLE v_lockwait VARCHAR2(16); +VARIABLE v_prev_sql_addr VARCHAR2(16); +VARIABLE v_prev_hash_value NUMBER; +VARIABLE v_sql_address VARCHAR2(16); +VARIABLE v_sql_hash_value NUMBER; +VARIABLE v_row_wait_obj# NUMBER; +VARIABLE v_row_wait_file# NUMBER; +VARIABLE v_row_wait_block# NUMBER; +VARIABLE v_row_wait_row# NUMBER; + +VARIABLE v_latchwait VARCHAR2(16); +VARIABLE v_latchspin VARCHAR2(16); + +VARIABLE v_object_owner VARCHAR2(30); +VARIABLE v_object_name VARCHAR2(128); + +VARIABLE v_blocker_sid NUMBER; +VARIABLE v_blocker_paddr VARCHAR2(16); +VARIABLE v_blocker_taddr VARCHAR2(16); + +ALTER SESSION SET nls_date_format = 'DD-MON-YYYY HH24:MI:SS'; + +SET term on; + +PROMPT +PROMPT ======================================================================== +PROMPT bde_session.sql - Expensive SQL and Resource usage for one Session +PROMPT ======================================================================== +PROMPT +PROMPT Usage: +PROMPT sqlplus apps/apps +PROMPT SQL> START bde_session.sql +PROMPT + +BEGIN + :v_top := TO_NUMBER('&&p_top'); + + SELECT saddr, + sid, + serial#, + paddr, + command, + taddr, + lockwait, + prev_sql_addr, + prev_hash_value, + sql_address, + sql_hash_value, + row_wait_obj#, + row_wait_file#, + row_wait_block#, + row_wait_row# + INTO :v_saddr, + :v_sid, + :v_serial#, + :v_paddr, + :v_command, + :v_taddr, + :v_lockwait, + :v_prev_sql_addr, + :v_prev_hash_value, + :v_sql_address, + :v_sql_hash_value, + :v_row_wait_obj#, + :v_row_wait_file#, + :v_row_wait_block#, + :v_row_wait_row# + FROM v$session + WHERE sid = TO_NUMBER('&&sid') + AND rownum = 1; + + SELECT latchwait, + latchspin + INTO :v_latchwait, + :v_latchspin + FROM v$process + WHERE addr = :v_paddr + AND rownum = 1; + + IF :v_row_wait_obj# = -1 THEN + :v_object_owner := 'SYS'; + :v_object_name := 'DUAL'; + ELSE + SELECT owner, + object_name + INTO :v_object_owner, + :v_object_name + FROM all_objects + WHERE object_id = :v_row_wait_obj# + AND rownum = 1; + END IF; + + IF :v_lockwait IS NOT NULL THEN + SELECT blocker.sid + INTO :v_blocker_sid + FROM v$lock blocker + WHERE blocker.sid <> :v_sid + AND (blocker.type, blocker.id1, blocker.id2) IN + (SELECT locked.type, locked.id1, locked.id2 + FROM v$lock locked + WHERE locked.sid = :v_sid + AND locked.kaddr = :v_lockwait) + AND rownum = 1; + END IF; + + IF :v_blocker_sid IS NOT NULL THEN + SELECT paddr, + taddr + INTO :v_blocker_paddr, + :v_blocker_taddr + FROM v$session + WHERE sid = :v_blocker_sid + AND rownum = 1; + END IF; +END; +/ + +CLEAR BREAKS COLUMNS; + +COLUMN p_saddr NEW_VALUE p_saddr FORMAT A16; +COLUMN p_sid NEW_VALUE p_sid FORMAT A8; +COLUMN p_serial NEW_VALUE p_serial FORMAT A8; +COLUMN p_paddr NEW_VALUE p_paddr FORMAT A16; +COLUMN p_command NEW_VALUE p_command FORMAT A8; +COLUMN p_taddr NEW_VALUE p_taddr FORMAT A16; +COLUMN p_lockwait NEW_VALUE p_lockwait FORMAT A16; +COLUMN p_prev_sql_addr NEW_VALUE p_prev_sql_addr FORMAT A16; +COLUMN p_prev_hash_value NEW_VALUE p_prev_hash_value FORMAT A12; +COLUMN p_sql_address NEW_VALUE p_sql_address FORMAT A16; +COLUMN p_sql_hash_value NEW_VALUE p_sql_hash_value FORMAT A12; +COLUMN p_row_wait_obj NEW_VALUE p_row_wait_obj FORMAT A8; +COLUMN p_row_wait_file NEW_VALUE p_row_wait_file FORMAT A8; +COLUMN p_row_wait_block NEW_VALUE p_row_wait_block FORMAT A8; +COLUMN p_row_wait_row NEW_VALUE p_row_wait_row FORMAT A8; + +COLUMN p_latchwait NEW_VALUE p_latchwait FORMAT A16; +COLUMN p_latchspin NEW_VALUE p_latchspin FORMAT A16; + +COLUMN p_object_owner NEW_VALUE p_object_owner FORMAT A30; +COLUMN p_object_name NEW_VALUE p_object_name FORMAT A128; + +COLUMN p_blocker_sid NEW_VALUE p_blocker_sid FORMAT A8; +COLUMN p_blocker_paddr NEW_VALUE p_blocker_paddr FORMAT A16; +COLUMN p_blocker_taddr NEW_VALUE p_blocker_taddr FORMAT A16; + +COLUMN text FORMAT A78 WOR; + +SELECT TO_CHAR(:v_sid) p_sid, + TO_CHAR(:v_serial#) p_serial, + :v_saddr p_saddr, + :v_paddr p_paddr, + TO_CHAR(:v_command) p_command, + :v_taddr p_taddr, + :v_lockwait p_lockwait, + :v_prev_sql_addr p_prev_sql_addr, + TO_CHAR(:v_prev_hash_value) p_prev_hash_value, + :v_sql_address p_sql_address, + TO_CHAR(:v_sql_hash_value) p_sql_hash_value, + TO_CHAR(:v_row_wait_obj#) p_row_wait_obj, + TO_CHAR(:v_row_wait_file#) p_row_wait_file, + TO_CHAR(:v_row_wait_block#) p_row_wait_block, + TO_CHAR(:v_row_wait_row#) p_row_wait_row, + :v_latchwait p_latchwait, + :v_latchspin p_latchspin, + :v_object_owner p_object_owner, + :v_object_name p_object_name, + TO_CHAR(:v_blocker_sid) p_blocker_sid, + :v_blocker_paddr p_blocker_paddr, + :v_blocker_taddr p_blocker_taddr + FROM dual; + +PROMPT +PROMPT Creating COE staging objects... + +DROP TABLE coe_sqlarea_&&p_sid; +CREATE TABLE coe_sqlarea_&&p_sid + (hash_value NUMBER,address RAW(20),buffer_gets$ NUMBER,disk_reads$ NUMBER, + mem NUMBER,executions$ NUMBER,bg_per_exec NUMBER,dr_per_exec NUMBER, + mem_per_exec NUMBER,parsing_user_id NUMBER,module VARCHAR2(64), + action VARCHAR2(64),sql_text VARCHAR2(64),username VARCHAR2(30), + row_num NUMBER,top_bg NUMBER,top_dr NUMBER,top_mem NUMBER,top_exec NUMBER, + top_bgpe NUMBER,top_drpe NUMBER,top_mempe NUMBER, bde_x VARCHAR2(3)) + NOLOGGING CACHE; + +DROP TABLE coe_sqltext_&&p_sid; +CREATE TABLE coe_sqltext_&&p_sid + (row_num NUMBER,piece NUMBER,sql_text VARCHAR2(64)) NOLOGGING CACHE; + +DROP TABLE coe_text_&&p_sid; +CREATE TABLE coe_text_&&p_sid + (row_num NUMBER,text CLOB) NOLOGGING CACHE; + +DROP TABLE bde_$values_&&p_sid; +CREATE TABLE bde_$values_&&p_sid + (column_id NUMBER,column_name VARCHAR2(30),column_values VARCHAR2(4000)) + NOLOGGING CACHE; + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT * FROM dual; + +PROMPT WARNING: "ORA-00942: table or view does not exist" ARE EXPECTED, PLEASE WAIT... + +INSERT INTO coe_sqlarea_&&p_sid +SELECT sa.hash_value, + sa.address, + ABS(sa.buffer_gets), + ABS(sa.disk_reads), + ABS(sa.sharable_mem)+ABS(sa.persistent_mem)+ABS(sa.runtime_mem), + ABS(sa.executions), + ROUND(ABS(sa.buffer_gets)/ + DECODE(NVL(ABS(sa.executions),0),0,1,ABS(sa.executions))), + ROUND(ABS(sa.disk_reads)/ + DECODE(NVL(ABS(sa.executions),0),0,1,ABS(sa.executions))), + ROUND((ABS(sa.sharable_mem)+ABS(sa.persistent_mem)+ABS(sa.runtime_mem))/ + DECODE(NVL(ABS(sa.executions),0),0,1,ABS(sa.executions))), + sa.parsing_user_id, + sa.module, + sa.action, + SUBSTR(sa.sql_text,1,64), + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + FROM v$sqlarea sa, + v$open_cursor oc + WHERE oc.saddr = :v_saddr + AND oc.sid = :v_sid + AND sa.hash_value = oc.hash_value + AND sa.address = oc.address; + +UPDATE coe_sqlarea_&&p_sid cs + SET username = (SELECT username + FROM all_users + WHERE user_id=cs.parsing_user_id); + +UPDATE coe_sqlarea_&&p_sid cs + SET bde_x = 'YES' + WHERE ( cs.hash_value = TO_NUMBER('&&p_sql_hash_value') + AND cs.address = '&&p_sql_address') + OR ( cs.hash_value = TO_NUMBER('&&p_prev_hash_value') + AND cs.address = '&&p_prev_sql_addr'); + + +DECLARE + c_top NUMBER; + + CURSOR c1 IS + SELECT rowid + FROM coe_sqlarea_&&p_sid + ORDER BY buffer_gets$ DESC; + + CURSOR c2 IS + SELECT rowid + FROM coe_sqlarea_&&p_sid + ORDER BY disk_reads$ DESC, + buffer_gets$ DESC; + + CURSOR c3 IS + SELECT rowid + FROM coe_sqlarea_&&p_sid + ORDER BY mem DESC, + buffer_gets$ DESC; + + CURSOR c4 IS + SELECT rowid + FROM coe_sqlarea_&&p_sid + ORDER BY executions$ DESC, + buffer_gets$ DESC; + + CURSOR c5 IS + SELECT rowid + FROM coe_sqlarea_&&p_sid + ORDER BY bg_per_exec DESC; + + CURSOR c6 IS + SELECT rowid + FROM coe_sqlarea_&&p_sid + ORDER BY dr_per_exec DESC, + buffer_gets$ DESC; + + CURSOR c7 IS + SELECT rowid + FROM coe_sqlarea_&&p_sid + ORDER BY mem_per_exec DESC, + buffer_gets$ DESC; + +BEGIN + c_top := 1; + FOR t IN c1 LOOP + UPDATE coe_sqlarea_&&p_sid cs + SET top_bg = c_top + WHERE rowid = t.rowid; + c_top := c_top+1; + END LOOP; + + c_top := 1; + FOR t IN c2 LOOP + UPDATE coe_sqlarea_&&p_sid cs + SET top_dr = c_top + WHERE rowid = t.rowid; + c_top := c_top+1; + END LOOP; + + c_top := 1; + FOR t IN c3 LOOP + UPDATE coe_sqlarea_&&p_sid cs + SET top_mem = c_top + WHERE rowid = t.rowid; + c_top := c_top+1; + END LOOP; + + c_top := 1; + FOR t IN c4 LOOP + UPDATE coe_sqlarea_&&p_sid cs + SET top_exec = c_top + WHERE rowid = t.rowid; + c_top := c_top+1; + END LOOP; + + c_top := 1; + FOR t IN c5 LOOP + UPDATE coe_sqlarea_&&p_sid cs + SET row_num = c_top, + top_bgpe = c_top + WHERE rowid = t.rowid; + c_top := c_top+1; + END LOOP; + + c_top := 1; + FOR t IN c6 LOOP + UPDATE coe_sqlarea_&&p_sid cs + SET top_drpe = c_top + WHERE rowid = t.rowid; + c_top := c_top+1; + END LOOP; + + c_top := 1; + FOR t IN c7 LOOP + UPDATE coe_sqlarea_&&p_sid cs + SET top_mempe = c_top + WHERE rowid = t.rowid; + c_top := c_top+1; + END LOOP; +END; +/ + +UPDATE coe_sqlarea_&&p_sid cs + SET cs.bde_x = 'YES' + WHERE cs.top_bgpe < :v_top+1 + AND cs.username <> 'SYS' + AND NOT UPPER(cs.sql_text) LIKE '%BEGIN%' + AND NOT UPPER(cs.sql_text) LIKE '%DECLARE%'; + +CREATE OR REPLACE PACKAGE bde_$v2_&&p_sid AS +PROCEDURE format_values +( num_rows_in IN NUMBER, + column_length_in IN NUMBER ); +END bde_$v2_&&p_sid; +/ + +CREATE OR REPLACE PACKAGE BODY bde_$v2_&&p_sid AS +PROCEDURE format_values +( num_rows_in IN NUMBER, + column_length_in IN NUMBER ) +IS + v_sql VARCHAR2(2000); + CURSOR columns_cursor IS + SELECT column_name + FROM bde_$values_&&p_sid; +BEGIN + EXECUTE IMMEDIATE 'ALTER TABLE bde_$selection_&&p_sid CACHE'; + + EXECUTE IMMEDIATE 'TRUNCATE TABLE bde_$values_&&p_sid'; + + EXECUTE IMMEDIATE 'INSERT INTO bde_$values_&&p_sid '|| + 'SELECT column_id, column_name, NULL '|| + 'FROM user_tab_columns '|| + 'WHERE table_name = ''BDE_$SELECTION_&&p_sid'''; + + FOR i IN 1..num_rows_in LOOP + FOR columns_record IN columns_cursor LOOP + v_sql:='UPDATE bde_$values_&&p_sid '|| + 'SET column_values = column_values || '|| + '( SELECT RPAD(SUBSTR("'||columns_record.column_name|| + '",1,'||TO_CHAR(column_length_in)||')||'' '','|| + TO_CHAR(column_length_in+1)||') '|| + 'FROM bde_$selection_&&p_sid '|| + 'WHERE row_$num = '||TO_CHAR(i)||' ) '|| + 'WHERE column_name = '''||columns_record.column_name||''''; + BEGIN + EXECUTE IMMEDIATE v_sql; + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(SUBSTR('*** ERROR: '||v_sql,1,255)); + END; + END LOOP; + END LOOP; +END format_values; +END bde_$v2_&&p_sid; +/ + +SET term on; +PROMPT +PROMPT Storing SQL Text of selected statements into staging table... +SET term off; + +INSERT INTO coe_sqltext_&&p_sid +SELECT DISTINCT + cs.row_num, + st.piece, + st.sql_text + FROM coe_sqlarea_&&p_sid cs, + v$sqltext st + WHERE + ( cs.top_bg <= :v_top + OR cs.top_dr <= :v_top + OR cs.top_mem <= :v_top + OR cs.top_exec <= :v_top + OR cs.top_bgpe <= :v_top + OR cs.top_drpe <= :v_top + OR cs.top_mempe <= :v_top + OR cs.bde_x = 'YES' + ) + AND cs.hash_value = st.hash_value + AND cs.address = st.address; + +SET term on; +PROMPT +PROMPT Massaging SQL Text of expensive SQL (Top LR) to create Text files... +SET term off; + +DECLARE + c_rownum NUMBER; + c_text VARCHAR2(32767); + + CURSOR c1 IS + SELECT row_num + FROM coe_sqlarea_&&p_sid + WHERE bde_x = 'YES' + ORDER BY row_num; + + CURSOR c2 IS + SELECT sql_text + FROM coe_sqltext_&&p_sid + WHERE row_num = c_rownum + ORDER BY piece; +BEGIN + FOR t1 IN c1 LOOP + c_rownum := t1.row_num; + c_text := NULL; + + FOR t2 IN c2 LOOP + c_text := c_text||t2.sql_text; + END LOOP; + + INSERT INTO coe_text_&&p_sid + VALUES (t1.row_num,c_text); + END LOOP; +END; +/ + +COMMIT; + +SET term on; +PROMPT +PROMPT Extracting expensive SQL (Top LR per Exec) into O/S Text files... +PROMPT +SET term off; + +SPOOL coe_sql_txt_&&p_sid..sql; +DECLARE + CURSOR c1 IS + SELECT TO_CHAR(row_num) row_num + FROM coe_sqlarea_&&p_sid + WHERE bde_x = 'YES' + ORDER BY row_num; +BEGIN + FOR t1 IN c1 LOOP + DBMS_OUTPUT.PUT_LINE('SPOOL sql_'|| + TO_CHAR(:v_sid)|| + '_'||t1.row_num||'.txt'); + DBMS_OUTPUT.PUT_LINE('SELECT text '|| + 'FROM coe_text_&&p_sid '|| + 'WHERE row_num = '||t1.row_num||';'); + DBMS_OUTPUT.PUT_LINE('SPOOL OFF;'); + END LOOP; +END; +/ +SPOOL OFF; +START coe_sql_txt_&&p_sid..sql; + +SET term on; +PROMPT +PROMPT Creating bde_start_x.sql script... +PROMPT +SET term off; + +SPOOL bde_start_x_&&p_sid..sql; +DECLARE + CURSOR c1 IS + SELECT TO_CHAR(row_num) row_num + FROM coe_sqlarea_&&p_sid + WHERE bde_x = 'YES' + ORDER BY row_num; +BEGIN + FOR t1 IN c1 LOOP + DBMS_OUTPUT.PUT_LINE('START bde_x.sql sql_'|| + TO_CHAR(:v_sid)|| + '_'||t1.row_num||'.txt;'); + END LOOP; +END; +/ +SPOOL OFF; + + +COLUMN SID FORMAT 99999999; +COLUMN SESSION_ID FORMAT 9999999999; +COLUMN SEQ# FORMAT 99999999; +COLUMN EVENT FORMAT A40; +COLUMN ORACLE_USERNAME FORMAT A15; +COLUMN WAIT_TIME FORMAT 99999999 HEADING 'WAIT|TIME'; +COLUMN SECONDS_IN_WAIT FORMAT 99999999 HEADING 'SECONDS|IN WAIT'; +COLUMN CLASS FORMAT A20; +COLUMN XIDUSN FORMAT 99999999; +COLUMN XIDSLOT FORMAT 99999999; +COLUMN XIDSQN FORMAT 99999999; +COLUMN OBJECT_NAME FORMAT A50; +COLUMN BUFFER_GETS$ FORMAT 99,999,999,999 - + HEADING 'Total|Logical Reads|(Buffer Gets)'; +COLUMN DISK_READS$ FORMAT 99,999,999,999 - + HEADING 'Total|Physical Reads|(Disk Reads)'; +COLUMN MEM FORMAT 99,999,999,999 - + HEADING 'Total|Memory|(bytes)'; +COLUMN EXECUTIONS$ FORMAT 99,999,999,999 - + HEADING 'Total|Number of|Executions'; +COLUMN BG_PER_EXEC FORMAT 99,999,999,999 - + HEADING 'Logical Reads|per Execution|(db blocks)'; +COLUMN DR_PER_EXEC FORMAT 99,999,999,999 - + HEADING 'Physical Reads|per Execution|(db blocks)'; +COLUMN MEM_PER_EXEC FORMAT 99,999,999,999 - + HEADING 'Memory|per Execution|(bytes)'; +COLUMN TOP_BGPE FORMAT 9999 - + HEADING 'Top|LR|per|Exec'; +COLUMN TOP_DRPE FORMAT 9999 - + HEADING 'Top|PR|per|Exec'; +COLUMN TOP_MEMPE FORMAT 9999 - + HEADING 'Top|Mem|per|Exec'; +COLUMN TOP_EXEC FORMAT 9999 - + HEADING 'Top|Num|of|Exec'; +COLUMN TOP_BG FORMAT 9999 - + HEADING 'Top|Logc|Read|LR' +COLUMN TOP_DR FORMAT 9999 - + HEADING 'Top|Phys|Read|PR'; +COLUMN TOP_MEM FORMAT 9999 - + HEADING 'Top|Mem'; +COLUMN ROW_NUM FORMAT 999999 HEADING 'SQL ID'; +COLUMN USERNAME FORMAT A10 HEADING 'User'; +COLUMN MODULE_ACTION FORMAT A50 HEADING 'Source (Module and Action)'; +COLUMN SQL_TEXT_L1 FORMAT A64 HEADING 'SQL Text (first 64 bytes)'; +COLUMN SQL_TEXT FORMAT A64 HEADING 'SQL Text'; +COLUMN HASH_VALUE FORMAT 999999999999999 HEADING 'Hash Value'; +COLUMN SQLADDRESS FORMAT A16 HEADING 'Address'; +COLUMN PIECE NOPRINT; +COLUMN DUMMY NOPRINT; + +SET term on; +PROMPT +PROMPT Generating Report (bde_session_&&p_sid..txt spool file)... +PROMPT +PROMPT +SET term off; + +SPOOL bde_session_&&p_sid..txt; +SET term on recsep wr; + + +SET pages 0; + +PROMPT bde_session.sql 8.1-9.0 169630.1 2002/06/01 SID: &&p_sid + +PROMPT +PROMPT V$SESSION - Session ( &&p_sid &&p_blocker_sid ) +PROMPT =================== +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT 1 row_$num, + v.* + FROM v$session v + WHERE v.saddr = '&&p_saddr' + AND v.sid = TO_NUMBER('&&p_sid') + AND v.serial# = TO_NUMBER('&&p_serial') + UNION ALL + SELECT 2 row_$num, + v.* + FROM v$session v + WHERE v.sid = TO_NUMBER('&&p_blocker_sid'); + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => 2, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + AND column_name <> 'ROW_$NUM' + ORDER BY + column_id; + +PROMPT + +SELECT RPAD('COMMAND (in progress): '||TO_CHAR(action),31)||name + FROM audit_actions + WHERE action = :v_command; + +PROMPT + +SELECT RPAD('ROW_WAIT_OBJ#: '||TO_CHAR(:v_row_wait_obj#),31)|| + owner||'.'||object_name||' ('||object_type||') ROWID: '|| + DBMS_ROWID.ROWID_CREATE(1, + NVL(TO_NUMBER('&&p_row_wait_obj'),0), + NVL(TO_NUMBER('&&p_row_wait_file'),0), + NVL(TO_NUMBER('&&p_row_wait_block'),0), + NVL(TO_NUMBER('&&p_row_wait_row'),0)) + FROM all_objects + WHERE object_id = :v_row_wait_obj#; + +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT rownum row_$num, + v.* + FROM &&p_object_owner..&&p_object_name v + WHERE TO_NUMBER('&&p_row_wait_obj') <> -1 + AND v.rowid = + DBMS_ROWID.ROWID_CREATE(1, + NVL(TO_NUMBER('&&p_row_wait_obj'),0), + NVL(TO_NUMBER('&&p_row_wait_file'),0), + NVL(TO_NUMBER('&&p_row_wait_block'),0), + NVL(TO_NUMBER('&&p_row_wait_row'),0)); + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => 1, column_length_in => 150); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + AND column_name <> 'ROW_$NUM' + ORDER BY + column_id; + + +SET pages 1000; + +PROMPT +PROMPT +PROMPT V$LOCK - Locks ( &&p_lockwait &&p_sid &&p_blocker_sid ) +PROMPT ============== + +SELECT * + FROM v$lock + WHERE sid IN (:v_sid, :v_blocker_sid) + ORDER BY + DECODE(sid,:v_sid,1,2), + type, + id1, + id2; + +PROMPT +PROMPT LMODE/REQUEST on V$LOCK rows ( &&p_sid &&p_blocker_sid ) +PROMPT ============================ +PROMPT 0: None +PROMPT 1: Null (NULL) +PROMPT 2: Row-S (SS) Row Share +PROMPT 3: Row-X (SX) Row Exclusive +PROMPT 4: Share (S) Share +PROMPT 5: S/Row-X (SSX) Share/Row Exclusive +PROMPT 6: Exclusive (X) + + +PROMPT +PROMPT +PROMPT V$LOCKED_OBJECT - Locked Objects ( &&p_sid &&p_blocker_sid ) +PROMPT ================================ + +SELECT l.*, + o.owner||'.'||o.object_name object_name + FROM v$locked_object l, + all_objects o + WHERE l.session_id IN (:v_sid, :v_blocker_sid) + AND l.object_id = o.object_id + ORDER BY + DECODE(l.session_id,:v_sid,1,2), + l.xidusn, + l.xidslot, + l.xidsqn; + + +PROMPT +PROMPT +PROMPT V$SESSION_EVENT - Waits for an Event ( &&p_sid &&p_blocker_sid ) +PROMPT ==================================== + +SELECT * + FROM v$session_event + WHERE sid IN (:v_sid, :v_blocker_sid) + ORDER BY + DECODE(sid,:v_sid,1,2), + event; + + +PROMPT +PROMPT +PROMPT V$SESSION_WAIT - Resources or Events waiting for ( &&p_sid &&p_blocker_sid ) +PROMPT ================================================ + +SELECT sid, + seq#, + event, + p1raw, + p2raw, + p3raw, + p1, + p2, + p3, + wait_time, + seconds_in_wait, + state + FROM v$session_wait + WHERE sid IN (:v_sid, :v_blocker_sid) + ORDER BY + DECODE(sid,:v_sid,1,2), + event; + + +PROMPT +PROMPT +PROMPT V$SESSTAT - Session Statistics ( &&p_sid &&p_blocker_sid ) +PROMPT ============================== + +SELECT s.sid, + s.value, + n.name, + TO_CHAR(n.class)|| + DECODE(n.class,1,' User',2,' Redo',4,' Enqueue',8,' Cache', + 16,' OS',32,' Parallel Server',64,' SQL',128,' Debug', + 72,' Cache + SQL', + NULL) class + FROM v$sesstat s, + v$statname n + WHERE s.statistic# = n.statistic# + AND s.value <> 0 + AND s.sid IN (:v_sid, :v_blocker_sid) + ORDER BY + DECODE(s.sid,:v_sid,1,2), + n.name; + +SET pages 0; + + +PROMPT +PROMPT +PROMPT V$SQLAREA - Currently Executing ( &&p_sql_address &&p_sql_hash_value ) +PROMPT =============================== +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT rownum row_$num, + '&&p_sid' sid, + v.* + FROM v$sqlarea v + WHERE v.address = '&&p_sql_address' + AND v.hash_value = TO_NUMBER('&&p_sql_hash_value'); + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => 1, column_length_in => 1000); + +SELECT column_values text + FROM bde_$values_&&p_sid + WHERE column_name = 'SQL_TEXT'; + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + AND column_name NOT IN ('ROW_$NUM', 'SQL_TEXT') + ORDER BY + column_id; + + +PROMPT +PROMPT +PROMPT V$SQLAREA - Previous Execution ( &&p_prev_sql_addr &&p_prev_hash_value ) +PROMPT ============================== +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT rownum row_$num, + '&&p_sid' sid, + v.* + FROM v$sqlarea v + WHERE v.address = '&&p_prev_sql_addr' + AND v.hash_value = TO_NUMBER('&&p_prev_hash_value'); + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => 1, column_length_in => 1000); + +SELECT column_values text + FROM bde_$values_&&p_sid + WHERE column_name = 'SQL_TEXT'; + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + AND column_name NOT IN ('ROW_$NUM', 'SQL_TEXT') + ORDER BY + column_id; + + +PROMPT +PROMPT +PROMPT V$PROCESS - Process ( &&p_sid &&p_paddr &&p_blocker_sid &&p_blocker_paddr ) +PROMPT =================== +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT 1 row_$num, + '&&p_sid' sid, + v.* + FROM v$process v + WHERE v.addr = '&&p_paddr' + UNION ALL +SELECT 2 row_$num, + '&&p_blocker_sid' sid, + v.* + FROM v$process v + WHERE v.addr = '&&p_blocker_paddr'; + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => 2, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + AND column_name <> 'ROW_$NUM' + ORDER BY + column_id; + + +PROMPT +PROMPT +PROMPT V$TRANSACTION - Transaction ( &&p_sid &&p_taddr &&p_blocker_sid &&p_blocker_taddr ) +PROMPT =========================== +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT 1 row_$num, + '&&p_sid' sid, + v.* + FROM v$transaction v + WHERE v.addr = '&&p_taddr' + UNION ALL +SELECT 2 row_$num, + '&&p_blocker_sid' sid, + v.* + FROM v$transaction v + WHERE v.addr = '&&p_blocker_taddr'; + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => 2, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + AND column_name <> 'ROW_$NUM' + ORDER BY + column_id; + +SET pages 10000; + +PROMPT +PROMPT Summary of SQL Statements linked to Session ( &&p_sid ) +PROMPT =========================================== + +SELECT cs.row_num, + cs.bg_per_exec, + cs.dr_per_exec, + cs.mem_per_exec, + cs.executions$, + cs.buffer_gets$, + cs.disk_reads$, + cs.mem, + cs.top_bgpe, + cs.top_drpe, + cs.top_mempe, + cs.top_exec, + cs.top_bg, + cs.top_dr, + cs.top_mem + FROM coe_sqlarea_&&p_sid cs + ORDER BY cs.row_num; + +SELECT cs.row_num, + sql_text sql_text_l1, + SUBSTR(username,1,10) username, + cs.hash_value, + cs.address sqladdress, + SUBSTR(module||' '||action,1,80) module_action + FROM coe_sqlarea_&&p_sid cs + ORDER BY cs.row_num; + + +SET pages 0; + +PROMPT +PROMPT +PROMPT Top SQL in terms of Logical Reads per Execution ( &&p_sid ) +PROMPT =============================================== +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT cs.top_bgpe row_$num, + cs.bg_per_exec, + cs.row_num sql_id, + v.* + FROM coe_sqlarea_&&p_sid cs, + v$sqlarea v + WHERE cs.top_bgpe <= TO_NUMBER('&&p_top') + AND cs.hash_value = v.hash_value + AND cs.address = v.address + ORDER BY + cs.top_bgpe; + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => :v_top, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + ORDER BY + column_id; + + +PROMPT +PROMPT +PROMPT Top SQL in terms of Physical Reads per Execution ( &&p_sid ) +PROMPT ================================================ +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT cs.top_drpe row_$num, + cs.dr_per_exec, + cs.row_num sql_id, + v.* + FROM coe_sqlarea_&&p_sid cs, + v$sqlarea v + WHERE cs.top_drpe <= TO_NUMBER('&&p_top') + AND cs.hash_value = v.hash_value + AND cs.address = v.address + ORDER BY + cs.top_drpe; + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => :v_top, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + ORDER BY + column_id; + + +PROMPT +PROMPT +PROMPT Top SQL in terms of Memory per Execution ( &&p_sid ) +PROMPT ======================================== +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT cs.top_mempe row_$num, + cs.mem_per_exec, + cs.row_num sql_id, + v.* + FROM coe_sqlarea_&&p_sid cs, + v$sqlarea v + WHERE cs.top_mempe <= TO_NUMBER('&&p_top') + AND cs.hash_value = v.hash_value + AND cs.address = v.address + ORDER BY + cs.top_mempe; + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => :v_top, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + ORDER BY + column_id; + + +PROMPT +PROMPT +PROMPT Top SQL in terms of Total Number of Executions ( &&p_sid ) +PROMPT ============================================== +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT cs.top_exec row_$num, + cs.executions$, + cs.row_num sql_id, + v.* + FROM coe_sqlarea_&&p_sid cs, + v$sqlarea v + WHERE cs.top_exec <= TO_NUMBER('&&p_top') + AND cs.hash_value = v.hash_value + AND cs.address = v.address + ORDER BY + cs.top_exec; + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => :v_top, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + ORDER BY + column_id; + + +PROMPT +PROMPT +PROMPT Top SQL in terms of Total Logical Reads ( &&p_sid ) +PROMPT ======================================= +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT cs.top_bg row_$num, + cs.buffer_gets$, + cs.row_num sql_id, + v.* + FROM coe_sqlarea_&&p_sid cs, + v$sqlarea v + WHERE cs.top_bg <= TO_NUMBER('&&p_top') + AND cs.hash_value = v.hash_value + AND cs.address = v.address + ORDER BY + cs.top_bg; + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => :v_top, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + ORDER BY + column_id; + + +PROMPT +PROMPT +PROMPT Top SQL in terms of Total Physical Reads ( &&p_sid ) +PROMPT ======================================== +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT cs.top_dr row_$num, + cs.disk_reads$, + cs.row_num sql_id, + v.* + FROM coe_sqlarea_&&p_sid cs, + v$sqlarea v + WHERE cs.top_dr <= TO_NUMBER('&&p_top') + AND cs.hash_value = v.hash_value + AND cs.address = v.address + ORDER BY + cs.top_dr; + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => :v_top, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + ORDER BY + column_id; + + +PROMPT +PROMPT +PROMPT Top SQL in terms of Total Memomy ( &&p_sid ) +PROMPT ================================ +PROMPT + +DROP TABLE bde_$selection_&&p_sid; +CREATE TABLE bde_$selection_&&p_sid AS +SELECT cs.top_mem row_$num, + cs.mem, + cs.row_num sql_id, + v.* + FROM coe_sqlarea_&&p_sid cs, + v$sqlarea v + WHERE cs.top_mem <= TO_NUMBER('&&p_top') + AND cs.hash_value = v.hash_value + AND cs.address = v.address + ORDER BY + cs.top_mem; + +EXEC bde_$v2_&&p_sid..format_values(num_rows_in => :v_top, column_length_in => 30); + +SELECT SUBSTR(column_name,1,30) column_name, + column_values + FROM bde_$values_&&p_sid + WHERE TRIM(column_values) IS NOT NULL + ORDER BY + column_id; + + +SET pages 10000; + +PROMPT +PROMPT +PROMPT Full text of identified expensive SQL Statements ordered by SQL ID ( &&p_sid ) +PROMPT ================================================================== + +BREAK ON ROW_NUM SKIP 1; +SELECT csa.row_num, + cst.piece, + cst.sql_text + FROM coe_sqlarea_&&p_sid csa, + coe_sqltext_&&p_sid cst + WHERE csa.row_num = cst.row_num + ORDER BY + csa.row_num, + cst.piece; + + +PROMPT +PROMPT bde_session_&&p_sid..txt has been generated. +PROMPT +PROMPT Recover the bde_session_&&p_sid..txt spool file. +PROMPT Consolidate and compress together with other files generated into same directory. +PROMPT Upload consolidated/compressed file bde_results.zip file for further analysis. +PROMPT On NT, files may get created under $ORACLE_HOME/bin. +PROMPT + +SPOOL off; + +DROP PACKAGE bde_$v2_&&p_sid; +DROP TABLE coe_sqlarea_&&p_sid; +DROP TABLE coe_sqltext_&&p_sid; +DROP TABLE coe_text_&&p_sid; +DROP TABLE bde_$values_&&p_sid; +DROP TABLE bde_$selection_&&p_sid; + +SET ver on feed on trims off long 80 pages 24 lin 80 feed on; +SET sqlp SQL> sqln on serveroutput off num 10; +CLEAR BREAKS COLUMNS; + +PROMPT +PROMPT Executing bde_x.sql for Expensive SQL statements +PROMPT +START bde_start_x_&&p_sid..sql; +PROMPT +COLUMN ENDEDSE FORMAT A21 HEADING 'bde_session.sql ended'; +SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS') endedse FROM sys.dual; diff --git a/vg/columns.sql b/vg/columns.sql new file mode 100644 index 0000000..1ff9043 --- /dev/null +++ b/vg/columns.sql @@ -0,0 +1,111 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Search for column_name +* Parameters : 1 - OWNER (% - wildchar, \ - escape char, Default value '%') +* 2 - table_name (% - wildchar, \ - escape char, Default value '%') +* 3 - column_name (% - wildchar, \ - escape char, Default value '%') +* 3 - ObjectType (% - wildchar, \ - escape char, Default value '%') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +* 02-May-12 Vishal Gupta change input parameters +* 19-Jul-12 Vishal Gupta Added object type as input parameter +* +*/ +set term on + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE column_name="&&3" +DEFINE object_type="&&4" + + +set term off +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _column_name NEW_VALUE column_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END) "_owner" + , CASE WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) ELSE UPPER('&&table_name') END "_table_name" + , CASE INSTR('&&owner','.') WHEN 0 THEN UPPER('&&column_name') ELSE UPPER('&&table_name') END "_column_name" + , CASE INSTR('&&owner','.') WHEN 0 THEN UPPER('&&object_type') ELSE UPPER('&&column_name') END "_object_type" +FROM DUAL +; + +SELECT DECODE(UPPER('&&column_name'),'','%',UPPER('&&column_name')) "_column_name" + , DECODE(UPPER('&&object_type'),'','%',UPPER('&&object_type')) "_object_type" +FROM DUAL +; + +set term on + + + +PROMPT ***************************************************************** +PROMPT * COLUMNS LIST +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Object Name = '&&table_name' +PROMPT * - Column Name = '&&column_name' +PROMPT ***************************************************************** + + + + +COLUMN object_name HEADING "ObjectName" FORMAT a45 +COLUMN object_type HEADING "ObjectType" FORMAT a17 +COLUMN column_name HEADING "ColumnName" FORMAT a30 +COLUMN Type HEADING "ColumnType" FORMAT a30 +COLUMN nullable HEADING "Null?" FORMAT a8 +COLUMN data_default HEADING "Default|Value" FORMAT a30 + + + +SELECT c.owner || '.' || c.table_name object_name + , o.object_type + , c.column_name + , DECODE(c.nullable,'N','NOT NULL','') nullable + , CASE + WHEN c.data_type = 'NUMBER' + THEN c.data_type || NVL2(c.data_precision||c.data_scale, '(' || NVL(c.data_precision,'38') || ',' || NVL(c.data_scale,'127') || ')','') + WHEN c.data_type = 'FLOAT' + THEN c.data_type || NVL2(c.data_precision,'(' || c.data_precision || ')','') + WHEN c.data_type = 'VARCHAR2' OR c.data_type = 'CHAR' + THEN c.data_type || '(' || c.char_length || ' ' || DECODE(c.char_used,'B','BYTE','CHAR') || ')' + WHEN c.data_type = 'NVARCHAR2' OR c.data_type = 'NCHAR' + THEN c.data_type || '(' || c.char_length || ')' + WHEN c.data_type = 'RAW' OR c.data_type = 'UROWID' + THEN c.data_type || '(' || c.data_length || ')' + ELSE c.data_type + END Type +FROM dba_tab_columns c + , dba_objects o +WHERE o.owner = c.owner + AND o.object_name = c.table_name + AND o.SUBOBJECT_NAME IS NULL --Exclude paritions and sub-paritions + AND UPPER(c.owner) like UPPER('&&owner') ESCAPE '\' + AND UPPER(c.table_name) like UPPER('&&table_name') ESCAPE '\' + AND UPPER(c.column_name) like UPPER('&&column_name') ESCAPE '\' + AND UPPER(o.object_type) like UPPER('&&object_type') ESCAPE '\' + AND c.table_name NOT LIKE 'BIN$%' +ORDER BY c.column_name,c.owner, c.table_name ; + +UNDEFINE owner +UNDEFINE table_name +UNDEFINE column_name +UNDEFINE object_type + +@@footer \ No newline at end of file diff --git a/vg/columns_diff.sql b/vg/columns_diff.sql new file mode 100644 index 0000000..86d6076 --- /dev/null +++ b/vg/columns_diff.sql @@ -0,0 +1,119 @@ +@@header + + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display column differences between two tables +* Parameters : 1 - Source Object (In OWNER.OBJECT_NAME format) +* 2 - Target Object (In OWNER.OBJECT_NAME format) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-May-15 Vishal Gupta Converted INNER JOIN to FULL OUTER JOIN +* 21-Dec-12 Vishal Gupta Created +* +*/ +set term on + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE source +UNDEFINE target + +DEFINE source="&&1" +DEFINE target="&&2" + +UNDEFINE source_owner +UNDEFINE source_object +UNDEFINE target_owner +UNDEFINE target_object + +set term off +COLUMN _source_owner NEW_VALUE source_owner NOPRINT +COLUMN _source_object NEW_VALUE source_object NOPRINT +COLUMN _target_owner NEW_VALUE target_owner NOPRINT +COLUMN _target_object NEW_VALUE target_object NOPRINT + +SELECT SUBSTR(UPPER('&&source'), 1 , INSTR('&&source','.') - 1 ) "_source_owner" + , SUBSTR(UPPER('&&source'), INSTR('&&source','.') + 1 ) "_source_object" + , SUBSTR(UPPER('&&target'), 1 , INSTR('&&target','.') - 1 ) "_target_owner" + , SUBSTR(UPPER('&&target'), INSTR('&&target','.') + 1 ) "_target_object" +FROM DUAL; +set term on + +PROMPT ***************************************************************** +PROMPT * COLUMNS DIFFERENCES +PROMPT * +PROMPT * Input Parameters +PROMPT * - Source = '&&source_owner..&&source_object' +PROMPT * - Target = '&&target_owner..&&target_object' +PROMPT ***************************************************************** + + +COLUMN source_object HEADING "SourceObject" FORMAT a40 +COLUMN Target_object HEADING "TargetObject" FORMAT a40 +COLUMN Source_Type HEADING "Source DataType" FORMAT a20 +COLUMN Target_Type HEADING "Target DataType" FORMAT a20 +COLUMN source_nullable HEADING "Source|Null?" FORMAT a8 +COLUMN target_nullable HEADING "Target|Null?" FORMAT a8 +COLUMN source_column_id HEADING "Source|Id" FORMAT 99999 +COLUMN target_column_id HEADING "Target|Id" FORMAT 99999 +COLUMN source_column_name HEADING "Source Column Name" FORMAT A30 +COLUMN target_column_name HEADING "Target Column Name" FORMAT A30 + + +SELECT * FROM +( +SELECT --a.owner || '.' || a.table_name source_object + --, b.owner || '.' || b.table_name target_object + --, + a.column_id source_column_id + , a.column_name source_column_name + , DECODE(a.nullable,'N','NOT NULL','') source_nullable + , CASE + WHEN a.data_type = 'NUMBER' + THEN a.data_type || NVL2(a.data_precision,'(' || a.data_precision || ',' || a.data_scale || ')','') + WHEN a.data_type = 'FLOAT' + THEN a.data_type || NVL2(a.data_precision,'(' || a.data_precision || ')','') + WHEN a.data_type = 'VARCHAR2' OR a.data_type = 'CHAR' + THEN a.data_type || '(' || a.char_length || ' ' || DECODE(a.char_used,'B','BYTE','CHAR') || ')' + WHEN a.data_type = 'NVARCHAR2' OR a.data_type = 'NCHAR' + THEN a.data_type || '(' || a.char_length || ')' + WHEN a.data_type = 'RAW' OR a.data_type = 'UROWID' + THEN a.data_type || '(' || a.data_length || ')' + ELSE a.data_type + END source_Type + , b.column_id target_column_id + , b.column_name target_column_name + , DECODE(b.nullable,'N','NOT NULL','') target_nullable + , CASE + WHEN b.data_type = 'NUMBER' + THEN b.data_type || NVL2(b.data_precision,'(' || b.data_precision || ',' || b.data_scale || ')','') + WHEN b.data_type = 'FLOAT' + THEN b.data_type || NVL2(b.data_precision,'(' || b.data_precision || ')','') + WHEN b.data_type = 'VARCHAR2' OR b.data_type = 'CHAR' + THEN b.data_type || '(' || b.char_length || ' ' || DECODE(b.char_used,'B','BYTE','CHAR') || ')' + WHEN b.data_type = 'NVARCHAR2' OR b.data_type = 'NCHAR' + THEN b.data_type || '(' || b.char_length || ')' + WHEN b.data_type = 'RAW' OR b.data_type = 'UROWID' + THEN b.data_type || '(' || b.data_length || ')' + ELSE b.data_type + END target_type +FROM (SELECT * FROM dba_tab_columns WHERE owner= '&&source_owner' AND TABLE_NAME = '&&source_object') a +FULL OUTER JOIN (SELECT * FROM dba_tab_columns WHERE owner= '&&target_owner' AND TABLE_NAME = '&&target_object') B + ON a.column_name = b.column_name +) +WHERE NVL(source_Type,'x') <> NVL(target_type,'x') + OR NVL(source_nullable,'x') <> NVL(target_nullable,'x') + OR source_column_id <> target_column_id +ORDER BY NVL(source_column_id,target_column_id) +; + +@@footer \ No newline at end of file diff --git a/vg/columns_diff_across_db.sql b/vg/columns_diff_across_db.sql new file mode 100644 index 0000000..2b4d817 --- /dev/null +++ b/vg/columns_diff_across_db.sql @@ -0,0 +1,61 @@ +SELECT c11204.owner + , c11204.table_name + , c11204.column_name + , CASE + WHEN c11204.data_type = 'NUMBER' + THEN c11204.data_type || NVL2(c11204.data_precision||c11204.data_scale, '(' || NVL(c11204.data_precision,'38') || ',' || NVL(c11204.data_scale,'127') || ')','') + WHEN c11204.data_type = 'FLOAT' + THEN c11204.data_type || NVL2(c11204.data_precision,'(' || c11204.data_precision || ')','') + WHEN c11204.data_type = 'VARCHAR2' OR c11204.data_type = 'CHAR' + THEN c11204.data_type || '(' || c11204.char_length || ' ' || DECODE(c11204.char_used,'B','BYTE','CHAR') || ')' + WHEN c11204.data_type = 'NVARCHAR2' OR c11204.data_type = 'NCHAR' + THEN c11204.data_type || '(' || c11204.char_length || ')' + WHEN c11204.data_type = 'RAW' OR c11204.data_type = 'UROWID' + THEN c11204.data_type || '(' || c11204.data_length || ')' + ELSE c11204.data_type + END DATA_TYPE + , NVL2(c11204.column_name,'Y',' ') "11204" + , NVL2(c11203.column_name,'Y',' ') "11203" + , NVL2(c11202.column_name,'Y',' ') "11202" + , NVL2(c11201.column_name,'Y',' ') "11201" + , NVL2(c11107.column_name,'Y',' ') "11107" + , NVL2(c11106.column_name,'Y',' ') "11106" + , NVL2(c10205.column_name,'Y',' ') "10205" + , NVL2(c10204.column_name,'Y',' ') "10204" + , NVL2(c10203.column_name,'Y',' ') "10203" + , NVL2(c10202.column_name,'Y',' ') "10202" + , NVL2(c10201.column_name,'Y',' ') "10201" + , NVL2(c10105.column_name,'Y',' ') "10105" + , NVL2(c10104.column_name,'Y',' ') "10104" + , NVL2(c10103.column_name,'Y',' ') "10103" + , NVL2(c9208.column_name,'Y',' ') "9208" + , NVL2(c9207.column_name,'Y',' ') "9207" + , NVL2(c9206.column_name,'Y',' ') "9206" + , NVL2(c9204.column_name,'Y',' ') "9204" +FROM dba_tab_columns c11204 + LEFT OUTER JOIN dba_tab_columns@"9204" c9204 ON c11204.OWNER = c9204.OWNER AND c11204.TABLE_NAME = c9204.TABLE_NAME AND c11204.COLUMN_NAME = c9204.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"11203" c11203 ON c11204.OWNER = c11203.OWNER AND c11204.TABLE_NAME = c11203.TABLE_NAME AND c11204.COLUMN_NAME = c11203.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"11202" c11202 ON c11204.OWNER = c11202.OWNER AND c11204.TABLE_NAME = c11202.TABLE_NAME AND c11204.COLUMN_NAME = c11202.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"11201" c11201 ON c11204.OWNER = c11201.OWNER AND c11204.TABLE_NAME = c11201.TABLE_NAME AND c11204.COLUMN_NAME = c11201.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"11107" c11107 ON c11204.OWNER = c11107.OWNER AND c11204.TABLE_NAME = c11107.TABLE_NAME AND c11204.COLUMN_NAME = c11107.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"11106" c11106 ON c11204.OWNER = c11106.OWNER AND c11204.TABLE_NAME = c11106.TABLE_NAME AND c11204.COLUMN_NAME = c11106.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"10205" c10205 ON c11204.OWNER = c10205.OWNER AND c11204.TABLE_NAME = c10205.TABLE_NAME AND c11204.COLUMN_NAME = c10205.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"10204" c10204 ON c11204.OWNER = c10204.OWNER AND c11204.TABLE_NAME = c10204.TABLE_NAME AND c11204.COLUMN_NAME = c10204.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"10203" c10203 ON c11204.OWNER = c10203.OWNER AND c11204.TABLE_NAME = c10203.TABLE_NAME AND c11204.COLUMN_NAME = c10203.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"10202" c10202 ON c11204.OWNER = c10202.OWNER AND c11204.TABLE_NAME = c10202.TABLE_NAME AND c11204.COLUMN_NAME = c10202.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"10201" c10201 ON c11204.OWNER = c10201.OWNER AND c11204.TABLE_NAME = c10201.TABLE_NAME AND c11204.COLUMN_NAME = c10201.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"10105" c10105 ON c11204.OWNER = c10105.OWNER AND c11204.TABLE_NAME = c10105.TABLE_NAME AND c11204.COLUMN_NAME = c10105.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"10104" c10104 ON c11204.OWNER = c10104.OWNER AND c11204.TABLE_NAME = c10104.TABLE_NAME AND c11204.COLUMN_NAME = c10104.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"10103" c10103 ON c11204.OWNER = c10103.OWNER AND c11204.TABLE_NAME = c10103.TABLE_NAME AND c11204.COLUMN_NAME = c10103.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"9208" c9208 ON c11204.OWNER = c9208.OWNER AND c11204.TABLE_NAME = c9208.TABLE_NAME AND c11204.COLUMN_NAME = c9208.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"9207" c9207 ON c11204.OWNER = c9208.OWNER AND c11204.TABLE_NAME = c9207.TABLE_NAME AND c11204.COLUMN_NAME = c9207.COLUMN_NAME + LEFT OUTER JOIN dba_tab_columns@"9206" c9206 ON c11204.OWNER = c9206.OWNER AND c11204.TABLE_NAME = c9206.TABLE_NAME AND c11204.COLUMN_NAME = c9206.COLUMN_NAME +WHERE c11204.owner = 'SYS' + AND c11204.table_name = 'V_$DATABASE' +-- AND c11204.column_name LIKE 'SUPP%' +ORDER BY c11204.owner + , c11204.table_name +-- , c11204.column_name + , c11204.column_id +; + diff --git a/vg/comments.sql b/vg/comments.sql new file mode 100644 index 0000000..9113d42 --- /dev/null +++ b/vg/comments.sql @@ -0,0 +1,54 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Table/Column Comments +* Parameters : 1 - owner ( % as wild card, \ as ESCAPE) +* 2 - table_name ( % as wild card, \ as ESCAPE) +* 3 - column_name ( % as wild card, \ as ESCAPE) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 11-May-12 Vishal Gupta First Draft +*/ + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE column_name="&&3" + + +COLUMN owner HEADING "Table Owner" FORMAT a20 +COLUMN table_name HEADING "Table Name" FORMAT a30 +COLUMN column_name HEADING "Column Name" FORMAT a30 +COLUMN comments HEADING "Comments" FORMAT a90 + + +SELECT tc.owner + , tc.table_name + , '' column_name + , tc.comments +FROM dba_tab_comments tc +WHERE tc.owner LIKE upper('&&owner') ESCAPE '\' + AND tc.table_name LIKE upper('&&table_name') ESCAPE '\' +UNION ALL +SELECT cc.owner + , cc.table_name + , cc.column_name + , cc.comments +FROM dba_col_comments cc +WHERE cc.owner LIKE upper('&&owner') ESCAPE '\' + AND cc.table_name LIKE upper('&&table_name') ESCAPE '\' + AND cc.column_name LIKE upper('&&column_name') ESCAPE '\' +ORDER BY 1,2,3 NULLS FIRST +; + + +UNDEFINE owner +UNDEFINE table_name +UNDEFINE column_name + +@@footer diff --git a/vg/controlfile_generate_create.sql b/vg/controlfile_generate_create.sql new file mode 100644 index 0000000..bec44e7 --- /dev/null +++ b/vg/controlfile_generate_create.sql @@ -0,0 +1,52 @@ +@@header + +set pagesize 0 + +SELECT 'CREATE CONTROLFILE DATABASE "' || name || '" NORESETLOGS ' || DECODE(FORCE_LOGGING,'YES','FORCE LOGGING ',' ') || LOG_MODE +FROM v$database +UNION ALL + select ' ' + || DECODE(TYPE + ,'REDO LOG','MAXLOGFILES' + ,'DATAFILE','MAXDATAFILES' + ,'REDO THREAD','MAXINSTANCES' + ,'LOG HISTORY','MAXLOGHISTORY' + ,TYPE) + || ' ' || RECORDS_TOTAL + from v$controlfile_record_section + where type in ('REDO LOG','DATAFILE','REDO THREAD','LOG HISTORY') +UNION ALL + SELECT 'LOGFILE ' + FROM DUAL +UNION ALL + SELECT DECODE(ROWNUM,1 ,' ',',') || sqltext + FROM ( SELECT DISTINCT ' GROUP ' || l.group# + || '( ' || (SELECT LISTAGG( '''' + || lf.member + || '''', ', ') WITHIN GROUP (ORDER BY group#) + FROM v$logfile lf + WHERE lf.group# = l.group#) + || ' )' + || ' SIZE ' || l.BYTES + || ' BLOCKSIZE ' || l.blocksize sqltext + , l.group# + FROM v$log l + ORDER BY l.group#) +UNION ALL + SELECT 'DATAFILE ' + FROM DUAL +UNION ALL + SELECT DECODE(ROWNUM,1 ,' ',',') || sqltext + FROM ( SELECT ' ''' + || name + || '''' sqltext + FROM v$datafile + ) +UNION ALL + SELECT 'CHARACTER SET ' || value + FROM v$nls_parameters + where parameter = 'NLS_CHARACTERSET' +UNION ALL + SELECT ';' + FROM DUAL +; diff --git a/vg/controlfile_sections_reset.sql b/vg/controlfile_sections_reset.sql new file mode 100644 index 0000000..fc98244 --- /dev/null +++ b/vg/controlfile_sections_reset.sql @@ -0,0 +1,62 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Display controlfile record sections +* Parameters : +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Jul-16 Vishal Gupta Created +* +*/ + + + +set serveroutput on +set lines 1000 +set trimspool on + +SELECT type + , (record_size * records_total) TotalSize + , (record_size * records_used) UsedSize + , a.record_size, a.records_total, a.records_used +FROM V$CONTROLFILE_RECORD_SECTION a +where type in ('DATABASE BLOCK CORRUPTION' + ,'COPY CORRUPTION' + ,'DELETED OBJECT' + ,'BACKUP CORRUPTION' + ) +order by type ; + + +BEGIN +for i in (SELECT type + , (record_size * records_total) TotalSize + , (record_size * records_used) UsedSize + , a.record_size, a.records_total, a.records_used + FROM V$CONTROLFILE_RECORD_SECTION a + where type in ('DATABASE BLOCK CORRUPTION' + ,'COPY CORRUPTION' + ,'DELETED OBJECT' + ,'BACKUP CORRUPTION' + ) + and records_used > 0 + ) +LOOP +dbms_output.put_line('Reseting Controlfile section ...'); +/* Reset BACKUP CORRUPTION section */ +dbms_backup_restore.ResetCfileSection(17); + +/* Reset COPY CORRUPTION section */ +dbms_backup_restore.ResetCfileSection(18); + +/* Reset DELETED OBJECTS section */ +dbms_backup_restore.ResetCfileSection(19); + +/* Reset DATABASE BLOCK CORRUPTION section */ +dbms_backup_restore.ResetCfileSection(35); +END LOOP; +END; +/ diff --git a/vg/controlfile_sections_size.sql b/vg/controlfile_sections_size.sql new file mode 100644 index 0000000..8f3c5ed --- /dev/null +++ b/vg/controlfile_sections_size.sql @@ -0,0 +1,28 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display controlfile record sections +* Parameters : +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Jul-16 Vishal Gupta Created +* +*/ + + +SELECT type + , (record_size * records_total) TotalSize + , (record_size * records_used) UsedSize + , a.record_size + , a.records_total + , a.records_used +FROM V$CONTROLFILE_RECORD_SECTION a +order by type ; + + +@@footer diff --git a/vg/create_1_hint_sql_profile.sql b/vg/create_1_hint_sql_profile.sql new file mode 100644 index 0000000..9854eb4 --- /dev/null +++ b/vg/create_1_hint_sql_profile.sql @@ -0,0 +1,105 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: create_1_hint_sql_profile.sql +-- +-- Purpose: Prompts for a hint and makes a profile out of it. +- +-- Author: Kerry Osborne +-- +-- Usage: This scripts prompts for four values. +-- +-- profile_name: the name of the profile to be attached to a new statement +-- +-- sql_id: the sql_id of the statement to attach the profile to +-- (the statement must be in the shared pool) +-- +-- category: the category to assign to the new profile +-- +-- force_macthing: a toggle to turn on or off the force_matching feature +-- +-- hint_text: text to be used as a hint +-- +-- Description: This script prompts for a hint. It does not validate the hint. It creates a +-- SQL Profile with the hint test and attaches it to the provided sql_id. +-- This script should now work with all flavors of 10g and 11g. +-- +-- Updated: This script now allows inclusion of quoted text in the hint. +-- +-- See kerryosborne.oracle-guy.com for additional information. +----------------------------------------------------------------------------------------- + +accept sql_id - + prompt 'Enter value for sql_id: ' - + default 'X0X0X0X0' +accept profile_name - + prompt 'Enter value for profile_name (PROFILE_sqlid_MANUAL): ' - + default 'X0X0X0X0' +accept category - + prompt 'Enter value for category (DEFAULT): ' - + default 'DEFAULT' +accept force_matching - + prompt 'Enter value for force_matching (false): ' - + default 'false' +accept hint_txt - + prompt 'Enter value for hint_text: ' - + default 'comment' + + +set feedback off +set sqlblanklines on +set serveroutput on + +declare +l_profile_name varchar2(30); +cl_sql_text clob; +l_category varchar2(30); +l_force_matching varchar2(3); +b_force_matching boolean; +begin + +select +sql_fulltext +into +cl_sql_text +from +v$sqlarea +where +sql_id = '&&sql_id'; + +select decode('&&profile_name','X0X0X0X0','PROFILE_'||'&&sql_id'||'_MANUAL','&&profile_name') +into l_profile_name +from dual; + +dbms_sqltune.import_sql_profile( +sql_text => cl_sql_text, +profile => sqlprof_attr(q'[&&hint_txt]'), +category => '&&category', +name => l_profile_name, +-- use force_match => true +-- to use CURSOR_SHARING=SIMILAR +-- behaviour, i.e. match even with +-- differing literals +force_match => &&force_matching +); + +dbms_output.put_line(' '); +dbms_output.put_line('Profile '||l_profile_name||' created.'); +dbms_output.put_line(' '); + +EXCEPTION + WHEN NO_DATA_FOUND THEN + dbms_output.put_line(' '); + dbms_output.put_line('ERROR: SQL_ID: '||'&&sql_id'||' does not exist in v$sqlarea.'); + dbms_output.put_line('The SQL statement must be in the shared pool to use this script.'); + dbms_output.put_line(' '); +end; +/ + +undef profile_name +undef sql_id +undef category +undef force_matching +undef hint_txt + +set sqlblanklines off +set feedback on diff --git a/vg/create_db.sql b/vg/create_db.sql new file mode 100644 index 0000000..af40b04 --- /dev/null +++ b/vg/create_db.sql @@ -0,0 +1,30 @@ +CREATE DATABASE "10202" +CONTROLFILE REUSE +USER sys IDENTIFIED BY syspass +USER system IDENTIFIED BY syspass +MAXLOGFILES 50 +MAXLOGMEMBERS 5 +MAXLOGHISTORY 9999 +MAXDATAFILES 100 +MAXINSTANCES 1 +NOARCHIVELOG +CHARACTER SET WE8ISO8859P1 +NATIONAL CHARACTER SET AL16UTF16 +LOGFILE + GROUP 1 '/opt/oracle/oradata/10202/redo01.log' SIZE 30M, + GROUP 2 '/opt/oracle/oradata/10202/redo02.log' SIZE 30M, + GROUP 3 '/opt/oracle/oradata/10202/redo03.log' SIZE 30M, + GROUP 4 '/opt/oracle/oradata/10202/redo04.log' SIZE 30M, + GROUP 5 '/opt/oracle/oradata/10202/redo05.log' SIZE 30M +DATAFILE + '/opt/oracle/oradata/10202/system01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +SYSAUX + DATAFILE '/opt/oracle/oradata/10202/sysaux01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +UNDO TABLESPACE undotbs + DATAFILE '/opt/oracle/oradata/10202/undotbs01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +DEFAULT TABLESPACE users + DATAFILE '/opt/oracle/oradata/10202/users01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +DEFAULT TEMPORARY TABLESPACE temp + TEMPFILE '/opt/oracle/oradata/10202/temp01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +/ + diff --git a/vg/create_sql_profile_awr.sql b/vg/create_sql_profile_awr.sql new file mode 100644 index 0000000..0cc3074 --- /dev/null +++ b/vg/create_sql_profile_awr.sql @@ -0,0 +1,115 @@ +---------------------------------------------------------------------------------------- +-- +-- File name: create_sql_profile_awr.sql +-- +-- Purpose: Create SQL Profile based on Outline hints in V$SQL.OTHER_XML. +-- +-- Author: Kerry Osborne +-- +-- Usage: This scripts prompts for five values. +-- +-- sql_id: the sql_id of the statement to attach the profile to +-- (must be in the shared pool and in AWR history) +-- +-- plan_hash_value: the plan_hash_value of the statement in AWR history +-- +-- profile_name: the name of the profile to be generated +-- +-- category: the name of the category for the profile +-- +-- force_macthing: a toggle to turn on or off the force_matching feature +-- +-- Description: +-- +-- Based on a script by Randolf Giest. +-- +-- Mods: This is the 2nd version of this script which removes dependency on rg_sqlprof2.sql. +-- +-- See kerryosborne.oracle-guy.com for additional information. +--------------------------------------------------------------------------------------- +-- + +-- @rg_sqlprof1 '&&sql_id' &&child_no '&&category' '&force_matching' + +set feedback off +set sqlblanklines on + +accept sql_id - + prompt 'Enter value for sql_id: ' - + default 'X0X0X0X0' +accept plan_hash_value - + prompt 'Enter value for plan_hash_value: ' +accept profile_name - + prompt 'Enter value for profile_name (PROF_sqlid_planhash): ' - + default 'X0X0X0X0' +accept category - + prompt 'Enter value for category (DEFAULT): ' - + default 'DEFAULT' +accept force_matching - + prompt 'Enter value for force_matching (FALSE): ' - + default 'false' + +declare +ar_profile_hints sys.sqlprof_attr; +cl_sql_text clob; +l_profile_name varchar2(30); +begin +select +extractvalue(value(d), '/hint') as outline_hints +bulk collect +into +ar_profile_hints +from +xmltable('/*/outline_data/hint' +passing ( +select +xmltype(other_xml) as xmlval +from +dba_hist_sql_plan +where +sql_id = '&&sql_id' +and plan_hash_value = &&plan_hash_value +and other_xml is not null +) +) d; + +select +sql_text, +decode('&&profile_name','X0X0X0X0','PROF_&&sql_id'||'_'||'&&plan_hash_value','&&profile_name') +into +cl_sql_text, l_profile_name +from +dba_hist_sqltext +where +sql_id = '&&sql_id'; + +dbms_sqltune.import_sql_profile( +sql_text => cl_sql_text, +profile => ar_profile_hints, +category => '&&category', +name => l_profile_name, +force_match => &&force_matching +-- replace => true +); + + dbms_output.put_line(' '); + dbms_output.put_line('SQL Profile '||l_profile_name||' created.'); + dbms_output.put_line(' '); + +exception +when NO_DATA_FOUND then + dbms_output.put_line(' '); + dbms_output.put_line('ERROR: sql_id: '||'&&sql_id'||' Plan: '||'&&plan_hash_value'||' not found in AWR.'); + dbms_output.put_line(' '); + +end; +/ + +undef sql_id +undef plan_hash_value +undef profile_name +undef category +undef force_matching + +set sqlblanklines off +set feedback on diff --git a/vg/createdb_10g.sql b/vg/createdb_10g.sql new file mode 100644 index 0000000..3260f53 --- /dev/null +++ b/vg/createdb_10g.sql @@ -0,0 +1,102 @@ +CREATE DATABASE OIDREP01 +CONTROLFILE REUSE +USER sys IDENTIFIED BY sys_OIDREP01 +USER system IDENTIFIED BY system_OIDREP01 +MAXLOGFILES 50 +MAXLOGMEMBERS 5 +MAXLOGHISTORY 9999 +MAXDATAFILES 100 +MAXINSTANCES 1 +NOARCHIVELOG +CHARACTER SET WE8ISO8859P1 +NATIONAL CHARACTER SET AL16UTF16 +LOGFILE + GROUP 1 '/apps/oid-rep/redo01/OIDREP01/redo01.log' SIZE 50M, + GROUP 2 '/apps/oid-rep/redo01/OIDREP01/redo02.log' SIZE 50M, + GROUP 3 '/apps/oid-rep/redo01/OIDREP01/redo03.log' SIZE 50M, + GROUP 4 '/apps/oid-rep/redo01/OIDREP01/redo04.log' SIZE 50M, + GROUP 5 '/apps/oid-rep/redo01/OIDREP01/redo05.log' SIZE 50M +DATAFILE + '/apps/oid-rep/data01/OIDREP01/system01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +SYSAUX + DATAFILE '/apps/oid-rep/data01/OIDREP01/sysaux01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +UNDO TABLESPACE undotbs + DATAFILE '/apps/oid-rep/data01/OIDREP01/undotbs01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +DEFAULT TABLESPACE users + DATAFILE '/apps/oid-rep/data01/OIDREP01/users01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +DEFAULT TEMPORARY TABLESPACE temp + TEMPFILE '/apps/oid-rep/data01/OIDREP01/temp01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +/ + +conn / as sysdba + +-- Creates data dictionary views. +conn / as sysdba +@?/rdbms/admin/catalog.sql + +-- Run all sql scripts for the procedural option +conn / as sysdba +@?/rdbms/admin/catproc.sql + +-- Catalog Views for locks +conn / as sysdba +@?/rdbms/admin/catblock.sql + +-- catoctk.sql - CATalog - Oracle Cryptographic ToolKit +conn / as sysdba +@?/rdbms/admin/catoctk.sql + + +conn system/manager +-- Script to install the SQL*Plus PRODUCT_USER_PROFILE tables +@?/sqlplus/admin/pupbld.sql +-- SQL*Plus Help +@?/sqlplus/admin/help/hlpbld.sql helpus.sql + + +--Install Java Option +conn / as sysdba +@?/javavm/install/initjvm.sql; +@?/xdk/admin/initxml.sql; +@?/xdk/admin/xmlja.sql; +@?/rdbms/admin/catjava.sql; +@?/rdbms/admin/catexf.sql; + + +-- Data Mining Option +conn / as sysdba +@?/rdbms/admin/dminst.sql SYSAUX TEMP; + + +-- Oracle Context +conn / as sysdba +@?/ctx/admin/catctx change_on_install SYSAUX TEMP NOLOCK; +connect "CTXSYS"/"change_on_install" +@?/ctx/admin/defaults/dr0defin.sql "AMERICAN"; + + +-- XML DB +conn / as sysdba +@?/rdbms/admin/catqm.sql change_on_install SYSAUX TEMP; +@?/rdbms/admin/catxdbj.sql; +@?/rdbms/admin/catrul.sql; + + +-- interMedia +conn / as sysdba +-- ORD components (Creates the schemas and grants the privs needed to run interMedia and Spatial) +@?/ord/admin/ordinst.sql SYSAUX SYSAUX; +@?/ord/im/admin/iminst.sql; + +-- OLAP +conn / as sysdba +@?/olap/admin/olap.sql SYSAUX TEMP; + + +-- Spatial +conn / as sysdba +-- ORD components (Creates the schemas and grants the privs needed to run interMedia and Spatial) +@?/ord/admin/ordinst.sql SYSAUX SYSAUX; +@?/md/admin/mdinst.sql; + + diff --git a/vg/createdb_11gR2.sql b/vg/createdb_11gR2.sql new file mode 100644 index 0000000..3260f53 --- /dev/null +++ b/vg/createdb_11gR2.sql @@ -0,0 +1,102 @@ +CREATE DATABASE OIDREP01 +CONTROLFILE REUSE +USER sys IDENTIFIED BY sys_OIDREP01 +USER system IDENTIFIED BY system_OIDREP01 +MAXLOGFILES 50 +MAXLOGMEMBERS 5 +MAXLOGHISTORY 9999 +MAXDATAFILES 100 +MAXINSTANCES 1 +NOARCHIVELOG +CHARACTER SET WE8ISO8859P1 +NATIONAL CHARACTER SET AL16UTF16 +LOGFILE + GROUP 1 '/apps/oid-rep/redo01/OIDREP01/redo01.log' SIZE 50M, + GROUP 2 '/apps/oid-rep/redo01/OIDREP01/redo02.log' SIZE 50M, + GROUP 3 '/apps/oid-rep/redo01/OIDREP01/redo03.log' SIZE 50M, + GROUP 4 '/apps/oid-rep/redo01/OIDREP01/redo04.log' SIZE 50M, + GROUP 5 '/apps/oid-rep/redo01/OIDREP01/redo05.log' SIZE 50M +DATAFILE + '/apps/oid-rep/data01/OIDREP01/system01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +SYSAUX + DATAFILE '/apps/oid-rep/data01/OIDREP01/sysaux01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +UNDO TABLESPACE undotbs + DATAFILE '/apps/oid-rep/data01/OIDREP01/undotbs01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +DEFAULT TABLESPACE users + DATAFILE '/apps/oid-rep/data01/OIDREP01/users01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +DEFAULT TEMPORARY TABLESPACE temp + TEMPFILE '/apps/oid-rep/data01/OIDREP01/temp01.dbf' SIZE 100M autoextend on next 100M maxsize 2000M +/ + +conn / as sysdba + +-- Creates data dictionary views. +conn / as sysdba +@?/rdbms/admin/catalog.sql + +-- Run all sql scripts for the procedural option +conn / as sysdba +@?/rdbms/admin/catproc.sql + +-- Catalog Views for locks +conn / as sysdba +@?/rdbms/admin/catblock.sql + +-- catoctk.sql - CATalog - Oracle Cryptographic ToolKit +conn / as sysdba +@?/rdbms/admin/catoctk.sql + + +conn system/manager +-- Script to install the SQL*Plus PRODUCT_USER_PROFILE tables +@?/sqlplus/admin/pupbld.sql +-- SQL*Plus Help +@?/sqlplus/admin/help/hlpbld.sql helpus.sql + + +--Install Java Option +conn / as sysdba +@?/javavm/install/initjvm.sql; +@?/xdk/admin/initxml.sql; +@?/xdk/admin/xmlja.sql; +@?/rdbms/admin/catjava.sql; +@?/rdbms/admin/catexf.sql; + + +-- Data Mining Option +conn / as sysdba +@?/rdbms/admin/dminst.sql SYSAUX TEMP; + + +-- Oracle Context +conn / as sysdba +@?/ctx/admin/catctx change_on_install SYSAUX TEMP NOLOCK; +connect "CTXSYS"/"change_on_install" +@?/ctx/admin/defaults/dr0defin.sql "AMERICAN"; + + +-- XML DB +conn / as sysdba +@?/rdbms/admin/catqm.sql change_on_install SYSAUX TEMP; +@?/rdbms/admin/catxdbj.sql; +@?/rdbms/admin/catrul.sql; + + +-- interMedia +conn / as sysdba +-- ORD components (Creates the schemas and grants the privs needed to run interMedia and Spatial) +@?/ord/admin/ordinst.sql SYSAUX SYSAUX; +@?/ord/im/admin/iminst.sql; + +-- OLAP +conn / as sysdba +@?/olap/admin/olap.sql SYSAUX TEMP; + + +-- Spatial +conn / as sysdba +-- ORD components (Creates the schemas and grants the privs needed to run interMedia and Spatial) +@?/ord/admin/ordinst.sql SYSAUX SYSAUX; +@?/md/admin/mdinst.sql; + + diff --git a/vg/createdb_920.sql b/vg/createdb_920.sql new file mode 100644 index 0000000..3147b90 --- /dev/null +++ b/vg/createdb_920.sql @@ -0,0 +1,40 @@ +CREATE DATABASE "9207" +USER sys IDENTIFIED BY syspass +USER system IDENTIFIED BY syspass +--CONTROLFILE REUSE +MAXLOGFILES 50 +MAXLOGMEMBERS 5 +MAXLOGHISTORY 9999 +MAXINSTANCES 1 +MAXDATAFILES 100 +NOARCHIVELOG +--FORCE LOGGING +CHARACTER SET WE8ISO8859P1 +NATIONAL CHARACTER SET AL16UTF16 +EXTENT MANAGEMENT LOCAL +LOGFILE + GROUP 1 '/opt/oracle/oradata/9207/redo01.log' SIZE 30M, + GROUP 2 '/opt/oracle/oradata/9207/redo02.log' SIZE 30M, + GROUP 3 '/opt/oracle/oradata/9207/redo03.log' SIZE 30M, + GROUP 4 '/opt/oracle/oradata/9207/redo04.log' SIZE 30M, + GROUP 5 '/opt/oracle/oradata/9207/redo05.log' SIZE 30M +DATAFILE + '/opt/oracle/oradata/9207/system01.dbf' SIZE 50M AUTOEXTEND ON NEXT 50m MAXSIZE 4001M +UNDO TABLESPACE UNDOTBS + datafile '/opt/oracle/oradata/9207/undo_tbs01.dbf' SIZE 10m AUTOEXTEND ON NEXT 50m MAXSIZE 4001M +DEFAULT TEMPORARY TABLESPACE temp + TEMPFILE '/opt/oracle/oradata/9207/temp01.dbf' SIZE 50M AUTOEXTEND ON NEXT 50m MAXSIZE 4001M +/ + +spool catalog.log +@?/rdbms/admin/catalog.sql +spool off + +spool catproc.log +@?/rdbms/admin/catproc.sql +spool off + + +--@/u01/app/oracle/bin/full_jvminst.sql + + diff --git a/vg/createroll.sql b/vg/createroll.sql new file mode 100644 index 0000000..5230cbd --- /dev/null +++ b/vg/createroll.sql @@ -0,0 +1,3038 @@ + +Create rollback segment _SYSSMU1_153781292$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU2_3457149376$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU3_87901008$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU4_2693370366$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU5_156679035$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU6_3670166248$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU7_2378919308$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU8_4259601258$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU9_1707036994$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU10_2854186366$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU11_865169400$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU12_2946513719$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU13_2151700607$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU14_2685309602$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU15_2296794459$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU16_4050583823$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU17_3992486028$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU18_3092020896$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU19_2947665077$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU20_4277367634$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU21_1571747549$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU24_3100662125$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU25_2799635170$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU26_2149136605$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU27_1775821738$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU28_934903108$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU29_657869998$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU30_2843209501$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU31_513121506$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU32_2434727743$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU33_3676704046$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU34_1565577846$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU35_2837098883$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU37_2655467922$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU38_1217266885$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU39_1635689197$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU40_392198972$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU41_1917652811$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU42_2413209080$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU43_3632330556$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU44_1287829129$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU45_2905153744$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU46_2626029440$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU47_2286474176$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU49_2616155190$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU50_4283342162$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU51_2466798008$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU52_1026804129$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU53_695994527$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU54_3415957428$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU55_1124354481$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU56_3925890205$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU57_3856867491$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU58_2459566361$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU59_3469822094$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU60_4235156972$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU61_651112026$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU62_2428279173$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU63_2681298516$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU64_863541756$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU65_1833115881$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU66_411645588$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU67_593138262$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU68_3399182261$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU69_1771424449$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU70_215307092$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU71_309407115$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU72_1640334098$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU73_1176452723$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU74_3815685802$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU75_2148665996$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU76_4117251836$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU77_1216545448$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU78_392148410$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU79_2988448317$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU80_3078930878$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU81_4197136200$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU82_367822112$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU83_2736193397$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; + +Create rollback segment _SYSSMU84_2215223677$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU85_1128052723$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU86_1878761284$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU87_4209077357$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU88_922931873$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU89_2915328551$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU90_2782569883$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU91_3968089476$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU92_2229253503$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU93_4100637943$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU94_2706433278$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU95_1021393261$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU96_588810595$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU97_1316309840$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU98_2548121504$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU99_1148398224$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU100_2338860747$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU101_2256274637$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU102_118574623$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU103_467753860$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU104_3069731938$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU105_2348840687$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU106_2303917368$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU108_1640948178$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU109_1138777989$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU111_2490979233$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU112_943914320$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU113_3682979642$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU114_2037901477$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU115_756193825$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU116_228578516$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU117_1570842723$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU118_1270666851$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU119_3548112331$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU120_2952564058$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU121_1282304153$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU122_3728514757$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU123_511986310$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU124_3594124284$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU125_2994611712$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU126_3802383132$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU127_2194433607$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU128_1753774208$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU129_33032154$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU130_1383757131$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU131_1028333591$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU132_243706782$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU133_1386698867$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU134_1991835003$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU135_699101963$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU137_1540267712$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU138_3397778693$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU139_3612977265$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU140_3953490362$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU142_1759757109$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU143_2545377982$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU144_3619910757$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU145_3702049714$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU147_3255377716$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU148_2714859646$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU150_1353581595$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU151_489809120$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU152_1075631043$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU153_1428440580$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU154_412150018$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU156_3142404874$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU157_2514401424$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU158_4061392276$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU159_3068797981$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU160_4164587929$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU161_1179046460$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU162_969743622$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU163_3665958770$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU165_4095086121$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU166_702107285$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU167_1162277072$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU168_3226176945$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU170_2865093124$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU171_1354813926$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; + +Create rollback segment _SYSSMU172_4214027203$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU173_3415746108$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU174_4030301407$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU175_3701434027$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU176_3812308782$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU177_1717346609$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU178_4110186916$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU179_401612305$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU180_3092069228$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU181_672169061$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU182_3420083890$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU183_3608356726$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU184_265934022$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU185_3410026586$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU186_2890198098$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU187_792417176$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU188_2812839710$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU189_1499270909$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU190_545168458$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU191_188582904$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU192_4265373644$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU193_641109483$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU194_1951242776$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU195_754377978$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU197_1858205823$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU198_1814949455$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU199_2957037644$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU200_3132579695$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU201_2176554064$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU202_1078927936$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU203_1008409507$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU204_4162177060$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU205_2757872463$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU207_4271819708$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU208_3750649056$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU211_158693400$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU212_1450465848$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU213_2578467096$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU214_1444400592$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU215_1154288411$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU216_615878344$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU217_3297373786$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU218_1765923342$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU219_2996056293$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU220_1683409520$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU221_3613360128$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU222_3854457098$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU223_3123305771$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU224_2633612542$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU225_1342588563$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU226_2582552988$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU227_3114192771$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU228_3861723595$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU229_2947409685$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU230_1207497464$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU231_3196879304$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU232_980827940$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU233_2335944708$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU146_4108299109$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU164_484281106$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU210_3513090808$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU235_4030133066$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU236_3018907452$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU237_2845874452$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU238_3607184931$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU239_1943696309$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU240_1983668624$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU241_1615231124$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU242_2406471764$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU243_303072581$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU244_1024120012$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU245_3260682296$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU246_265863877$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU247_3470823023$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU248_3494798951$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU249_1404511382$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU250_3098687102$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU251_2739146324$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU110_2228424419$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; + +Create rollback segment _SYSSMU196_2603697038$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU252_2781654298$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU253_3134734248$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU254_1020402732$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU255_3792093510$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU256_3358410000$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU257_1774887314$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU258_359390995$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU259_2305257772$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU260_1044829828$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU261_695909223$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU262_3919309842$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU263_1675787822$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU264_1613464204$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU265_277818354$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU266_3283341005$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU267_2256138769$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU268_3755664359$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU269_1609027715$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU270_1396712339$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU271_3137810892$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU272_2342585119$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU273_237623373$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU274_3165297232$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU275_3633905114$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU276_535655931$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU277_3447846433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU278_4280663256$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU279_2239495289$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU280_989669487$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU281_1007989901$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU282_2223209536$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU283_1663230481$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU284_3765586890$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU285_237590868$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU286_240502513$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU287_3413932584$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU288_200707355$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU289_705120399$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU290_3619941614$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU291_478868530$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU292_946569579$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU293_3953055298$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU294_21614686$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU295_515424239$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU296_1623976510$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU297_4065345580$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU298_46725553$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU299_3174633794$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU300_594548691$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU301_2914648898$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU302_3007832111$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU303_1701111294$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU304_1349625144$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU305_3685222303$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU306_515659163$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU308_4068867140$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU309_1587209030$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU310_3141206923$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU311_4250065411$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU312_3750391492$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU313_768436739$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU314_3074091524$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU315_1032980243$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU316_1896581471$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU317_399299150$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU318_3609824991$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU319_2880168419$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU320_3980631532$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU321_3223351739$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU322_4073753038$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU323_3732265738$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU324_1620348005$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU325_2093760041$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU326_2050924969$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU327_2701402188$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU328_1729730711$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU329_663247392$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU330_3252531202$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; + +Create rollback segment _SYSSMU331_636939732$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU332_3208368330$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU333_3980261885$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU334_922151066$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU335_1019126996$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU336_1464867907$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU337_1615024326$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU338_2232037804$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU339_477875038$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU340_2313578862$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU341_3216092303$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU342_3352011945$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU343_2698145199$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU344_2135074244$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU345_1794975470$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU346_4010220277$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU347_2619890608$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU348_2972708994$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU349_324840756$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU350_2851694655$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU351_3917073307$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU352_4120184862$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU353_2058317596$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU354_3333057161$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU355_333389264$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU356_3257596977$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU357_1888020375$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU358_2937792512$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU359_3259590479$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU360_3177047069$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU361_2864133970$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU362_329453616$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU363_3903303170$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU364_1211097231$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU206_433841098$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU366_483601597$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU367_3256494360$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU368_2897943801$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU369_3203616680$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU370_2209512477$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU371_490252895$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU372_981028384$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU373_195244687$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU374_1275830051$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU375_3395216496$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU376_477349776$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU377_2587923211$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU378_1321830056$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU379_1981008372$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU380_399935395$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU381_1941877810$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU383_227982420$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU384_1833361326$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU385_2874720811$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU386_2956387712$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU387_1109039546$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU388_2117011849$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU389_3915372464$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU390_1998404901$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU391_3531971867$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU392_1480031982$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU393_1946731314$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU394_3305939876$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU395_394901141$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU396_259691726$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU397_2780643714$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU398_3208214536$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU399_1128340905$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU400_1121279300$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU107_2936497250$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU401_3137719817$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU402_789027743$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU403_3078146040$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU404_3498434766$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU405_150295545$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU407_2705138623$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU408_823939092$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU409_2374686510$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU410_123860828$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; + +Create rollback segment _SYSSMU411_2820763246$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU412_2139247494$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU413_3204328888$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU415_1258867084$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU416_1476599382$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU417_90984648$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU209_2591476563$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU419_877027956$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU420_1699368588$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU421_1247631247$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU422_623573421$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU423_516904564$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU424_2624549690$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU425_855060007$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU426_4065850004$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU427_4102357684$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU428_973829200$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU429_984754997$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU430_3160292840$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU431_2148464095$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU432_417054455$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU433_560973124$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU434_3685893543$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU435_2194819106$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU436_4109767426$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU437_2697440299$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU438_1897138044$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU439_260562500$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU440_4044998135$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU441_3496741433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU442_671531264$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU443_3759437960$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU444_4055485059$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU445_1506980163$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU446_1690422655$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU447_2803314667$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU448_840460504$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU449_3430855885$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU450_3526922207$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU451_2270558141$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU452_940134340$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU453_21009226$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU454_138784502$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU455_2412831510$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU456_3097384915$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU457_526192223$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU458_1572706624$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU459_4018417162$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU460_2835387337$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU461_598274456$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU462_2643708343$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU463_478140862$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU464_549692416$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU465_1150238983$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU466_200171779$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU467_2245372529$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU468_2339705910$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU469_4092948806$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU470_2888509487$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU471_3180440171$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU472_3747695625$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU474_3221340220$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU475_4101296011$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU476_182137993$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU477_2804765$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU478_2474428060$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU479_3955646508$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU480_3488334401$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU481_3894145474$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU482_1231407343$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU483_2564675835$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU484_3773914283$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU485_1989068069$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU486_4273506186$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU487_3267426848$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU488_2566734381$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU489_390206301$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU490_418750578$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU491_2557901780$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; + +Create rollback segment _SYSSMU492_626135093$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU493_2096571466$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU494_3182731838$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU495_2728713298$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU496_3789096893$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU497_420999935$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU498_1470949373$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU499_1752479574$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU500_3279819433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU501_3238495029$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU502_2745627151$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU503_2969568483$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU504_4210515061$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU505_104092219$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU506_1827676424$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU507_204761504$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU508_3047814558$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU509_1991414782$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU510_1625011005$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU511_816805866$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU512_1992182515$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU513_2233642637$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU514_3284292424$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU515_3483036164$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU516_3933399604$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU517_3568870446$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU518_4130808885$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU519_4137259915$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU520_3277479227$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU521_2199963925$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU522_646375947$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU523_961024297$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU524_1312600489$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU525_3085286262$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU526_853657666$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU527_3605114485$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU528_2550712912$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU529_956489404$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU530_342112548$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU531_3376972877$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU533_467820204$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU534_2006150155$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU535_2823755076$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU536_2001892767$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU538_3024785098$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU539_504825623$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU540_3544278465$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU541_2424155558$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU542_1740361309$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU543_1004141806$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU544_2678538684$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU545_1625407002$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU546_860971871$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU548_458362978$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU549_2448368385$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU550_1146471351$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU551_411482685$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU552_3323245846$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU553_774023067$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU554_1091649468$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU555_2335612083$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU556_1578526894$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU557_580765864$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU558_4072987091$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU559_1164242497$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU560_2592923012$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU561_200020456$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU562_3468702957$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU563_4047242161$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU564_2399947041$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU565_3594304418$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU566_3272628629$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU567_1912022721$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU568_1550463138$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU569_2066866895$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU570_4082804345$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU571_2272224806$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU572_1230235672$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU573_1345084514$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; + +Create rollback segment _SYSSMU574_7948043$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU575_1419451528$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU576_4059010065$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU577_2016400778$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU578_1700109447$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU579_2656034556$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU580_209191373$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU581_2243933015$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU582_1681506371$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU583_1347382126$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU584_1035866949$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU586_2114298547$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU587_166760141$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU588_2132498435$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU589_2754608567$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU590_1084884762$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU591_512188984$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU592_548991874$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU593_257950722$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU595_4141619331$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU596_1738336302$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU598_3256714481$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU599_569953822$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU600_4221889598$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU601_3504369139$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU602_1484480092$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU603_2701863385$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU604_2158696575$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU605_2825241171$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU606_3240273201$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU607_1550570676$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU608_1379345963$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU609_3736342568$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU610_3157721729$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU611_645422301$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU612_3140580389$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU613_3346269788$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU614_1467561873$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU615_3412910443$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU616_3502328938$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU617_2008964475$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU618_4169448065$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU620_3998104841$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU621_1351891915$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU622_3822581313$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU623_3997790982$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU624_758014616$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU625_3315985608$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU626_3659053056$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU628_4288288936$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU629_1003472764$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU630_239694315$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU631_358849739$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU632_2604623268$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU633_4071726973$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU634_2666822880$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU635_4243677334$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU636_781494333$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU637_2747886251$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU638_2549836112$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU639_1781813923$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU640_127890605$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU642_992993884$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU643_309407712$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU644_2127643905$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU645_875567792$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU646_2290235252$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU647_178412487$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU648_2168736401$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU649_2929747790$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU650_4084269328$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU651_4198985347$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU652_113649604$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU654_1297891160$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU655_1131521831$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU656_901074576$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU657_3147373726$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU658_3911183661$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU660_1099539083$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; + +Create rollback segment _SYSSMU661_739971511$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU662_291471612$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU663_2716243438$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU664_3647652747$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU665_3764979366$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU666_3432305633$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU667_812598075$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU668_3863419739$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU669_2138061896$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU670_1550118768$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU671_661329386$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU672_3088303596$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU673_3739967552$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU675_1260503855$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU676_889429075$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU677_1123024728$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU678_3441957374$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU679_3939665895$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU680_3892948235$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU681_3899529109$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU682_321566361$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU683_1573231277$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU684_3316895636$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU685_3333370567$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU687_2612877371$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU688_1408313434$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU689_8772476$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU690_1112860483$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU691_4108652330$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU692_3660061816$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU693_3091727372$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU694_3570206445$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU696_2897163099$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU697_3612902908$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU698_1614376763$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU699_1385728469$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU700_2906030762$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU701_3852441693$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU702_2280442856$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU704_3908403411$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU705_1892183693$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU706_55291815$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU708_2859129207$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU709_3832956278$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU711_2525848134$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU712_3027887688$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU713_4231790481$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU714_301430313$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU715_619587086$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU716_424557085$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU717_4278707925$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU718_802920713$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU719_2006855536$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU721_761726702$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU722_3099333994$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU723_3151073336$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU724_2975775472$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU725_3787213109$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU726_2562247485$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU727_3412233134$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU728_1641690198$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU729_2551749215$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU730_947368266$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU731_2566087054$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU732_4271625986$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU733_369608569$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU734_1348813261$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU735_3695313905$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU736_2168378959$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU737_3709417345$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU738_917355608$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU739_4167880738$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU740_2395819035$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU741_3078121107$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU742_2426729328$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU743_2091603776$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU744_3378290145$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU746_3687269429$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU747_3438695367$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; + +Create rollback segment _SYSSMU748_247202768$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU749_3581801938$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU750_1653025376$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU752_151559474$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU753_2081738101$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU754_4103881288$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU755_2485496593$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU756_3711947473$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU757_3631076634$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU758_1444320232$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU760_1008285806$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU761_4092417779$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU762_1607880053$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU763_3149553897$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU764_105035129$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU765_613982386$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU766_2425799633$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU767_1285301789$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU768_3494985915$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU769_1939877352$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU770_3464529313$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU771_2167149161$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU772_2132303266$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU773_2589433594$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU774_4158637113$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU775_346473712$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU776_716397372$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU777_405581312$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU778_2540161640$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU779_3386201749$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU780_3807314087$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU781_1160262344$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU782_2279603960$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU783_724919354$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU784_4195883020$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU785_3547403313$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU786_140866259$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU787_2743049192$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU788_1140987127$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU790_4143864712$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU791_3246178530$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU792_3530211649$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU794_1491184635$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU795_4201859930$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU796_247159164$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU797_1199018666$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU800_1863478448$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU801_4263409926$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU802_496764470$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU803_3606541153$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU804_209422512$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU805_3972140977$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU806_2642420113$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU807_1790142583$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU808_2507403964$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU809_3336199401$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU810_3416919405$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU811_3846119445$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU812_4110556554$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU813_3307197867$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU814_3205630633$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU815_1324054000$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU816_3837087657$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU818_917790962$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU819_648755019$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU821_3179960097$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU822_3199007917$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU823_666150019$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU824_2181322275$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU825_3796795784$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU826_3277554255$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU827_556577439$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU828_2861153449$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU829_4188596279$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU830_3633839668$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU831_2390955745$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU36_802953032$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU832_247394154$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU833_3190809620$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; + +Create rollback segment _SYSSMU834_2079510619$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU835_46746631$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU836_1898996468$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU837_69405055$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU838_3739686133$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU839_788348303$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU840_206896730$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU841_2248785468$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU843_1478720188$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU844_3882129325$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU845_2431258936$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU846_1426877328$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU847_567590816$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU848_350838685$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU849_2964411361$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU850_3003009924$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU851_3694843134$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU852_2485296718$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU853_90290492$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU854_775308409$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU855_1184876155$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU856_2241522412$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU857_3039951006$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU858_142194281$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU859_1191157093$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU861_1175860541$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU862_678040813$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU863_797302914$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU864_1333930274$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU865_3547253587$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU866_2581516751$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU867_4270691076$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU868_2764295783$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU869_439034410$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU870_2684412843$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU871_1934240550$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU872_2782602153$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU695_2698698144$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU703_616364076$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU710_2710370279$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU793_3174925544$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU799_2860457082$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU873_1838282955$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU874_809045163$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU875_1697192885$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU876_3956076351$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU877_3073197413$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU878_2082918374$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU879_1558275956$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU880_2294461736$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU881_662606797$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU882_3692662778$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU883_1523614318$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU884_583850637$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU885_1555868798$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU886_613541364$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU887_1153900966$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU888_1979452237$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU889_1229531792$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU890_3894832428$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU891_1678335465$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU892_2900969198$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU893_893176858$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU894_160567497$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU895_417950844$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU896_2594519149$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU897_3281698974$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU898_1001788179$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU899_3933987363$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU900_2432739660$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU901_1535486964$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU902_3201640622$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU903_1261886516$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU904_2466599709$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU905_4290027575$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU906_3921447589$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU907_2899596580$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU908_3254369919$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU909_3471577139$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU910_4076019245$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU911_935045789$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU913_1366562238$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU914_278940325$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU915_1999351113$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU916_3162951349$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU917_4134126952$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU918_16242866$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU919_235457911$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU920_890625592$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU921_101281376$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU922_4213451916$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU923_2196495983$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU759_3010080695$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU659_1145718254$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU707_2063056985$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU720_3040438059$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU924_2674869902$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU925_216442420$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU926_2632091558$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU927_2554887216$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU928_3104731223$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU929_2839536440$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU930_46058872$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU931_2094567605$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU932_713355136$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU933_1509360342$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU934_1452382747$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU935_2392770766$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU936_2150717575$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU937_729374320$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU938_1245587396$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU939_205882047$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU940_1526093361$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU941_4140071014$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU942_2489704211$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU943_1418798459$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU944_2144304221$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU945_2370633016$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU946_4121947032$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU947_4009515368$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU948_3344727701$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU949_3652698070$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU950_1930390011$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU951_2657555501$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU952_3546532114$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU953_1828921346$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU954_1611792236$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU955_327173317$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU956_3616743354$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU957_1445682433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU958_232291267$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU959_3412429273$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU960_3948596702$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU961_2665344036$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU962_3532564179$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU963_3566192396$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU964_414436547$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU965_1872784182$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU966_3611460621$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU967_2628096194$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU968_3382485004$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU969_3712026031$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU970_3698595624$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU971_658184115$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU972_2428223118$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU973_1027777800$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU974_3585875434$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU975_89959672$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU976_2441255427$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU977_607376360$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU978_2530687609$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU979_1497492356$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU980_872411113$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU981_2131493372$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU982_3980682425$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU983_3231722515$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU984_2143769360$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU985_2894147401$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; + +Create rollback segment _SYSSMU986_2570569030$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU987_749052842$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU988_1480957844$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU989_598546093$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU990_152134951$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU991_1343513816$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU992_1984051576$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU993_2539962139$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU994_1703764662$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU995_2198484470$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU996_4030726757$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU997_4066538066$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU998_907122050$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU999_304654604$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1000_51777945$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU155_3205771294$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU48_2285869653$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1001_3622274192$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1002_2003664245$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1003_526792199$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1004_1926991739$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1005_3580571720$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1006_536797141$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1007_2517792546$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1008_3795425751$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1009_292526937$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1010_2255610802$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1011_2155514842$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1012_2069055131$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1013_2412353331$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1014_3622413532$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1015_818307682$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1016_527854368$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1017_3155365007$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1018_2427969596$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1019_3163194872$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1020_1835558043$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1021_2363539240$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1022_3544895964$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1023_3147846179$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1024_4142600662$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1025_3124314866$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1026_2747614997$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1027_2622475059$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1028_2035677517$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1029_3517137907$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU751_821832264$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU169_1013939033$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1030_444689284$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1031_1121341040$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1032_331787670$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1033_3307974317$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1034_3126156286$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1035_2221393070$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1036_1900778992$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1037_1621006806$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1038_247607607$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1039_901729755$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1040_501339839$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1041_3225922575$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1042_1559424279$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1043_3389100208$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1044_323068646$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU537_3926564036$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1045_1120225475$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1046_2391895200$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1047_2291284352$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1048_2502610064$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1049_1323305515$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1050_3147746947$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1051_728839237$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1052_2949858083$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1053_4235054793$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1054_3502539466$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1055_4055181562$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1056_717248466$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1057_1582522892$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1058_304242894$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1059_1153905557$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU1060_589843455$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1061_2259291248$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1062_1450390560$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1063_3607223233$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1064_1760646459$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1065_2816441572$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1066_1399031999$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1067_1398826662$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1068_3206909627$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1070_1727411548$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1071_2007461785$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1072_3602544552$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1073_970292770$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1074_267071117$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1075_1323681189$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1076_240275658$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1077_3867291190$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1078_1926686673$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1079_2376536888$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1080_4097004415$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1081_1955877613$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1082_1111362152$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1083_3388576721$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1084_2011997010$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1085_46039329$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1086_1738715322$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1087_1202603946$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1088_3021059379$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1089_3486546671$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1090_1777157679$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1091_2300823235$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1092_4198209240$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1093_4255303376$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1094_4093159488$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1095_579074922$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1096_3944820777$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1097_2637632474$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1098_2755729429$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1099_1840795490$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1100_3957027222$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1101_2364430123$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1102_3874001296$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1103_3585383459$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1104_1483744042$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1105_284326345$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1106_1315953208$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1107_2007008440$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1108_1855313038$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1109_1790307644$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1110_3686599032$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1111_3015972980$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1112_260919982$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1113_709303632$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1114_483861173$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1115_1215646216$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1116_2252392559$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1117_1948495083$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1118_3552385792$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1119_6498338$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1120_1371413984$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1121_1579752374$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1122_3507565081$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1123_2270792501$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1124_3125777986$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1125_160479982$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1126_2803199728$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1127_1843272550$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1128_4162966108$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1129_3313385750$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1130_3706956615$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1131_170021302$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1132_3409076201$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1133_1209682370$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1134_3329730611$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1135_2247474336$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1136_1474320810$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1137_632284913$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1138_4242661982$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1139_3440873424$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; + +Create rollback segment _SYSSMU1140_2520281389$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1141_2604164338$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1142_3610933255$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1143_4061369268$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1144_2623008878$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1145_3117501252$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1146_3851709175$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1147_2509286792$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1148_1541919513$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1149_3757228021$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1150_2271133064$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1151_3728975890$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1152_2724616578$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1153_3872209159$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1154_3136523930$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1155_2499997220$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1156_412415013$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1157_3724717909$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1158_1372439924$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1159_846962752$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1160_3280391880$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1161_83823553$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1162_4270535291$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1163_2661734779$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1164_2926447181$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1165_1050336869$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1166_1641016430$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1167_916516280$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1168_2778667176$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1169_1703689260$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1170_1127040756$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1171_3654219381$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1172_1186064080$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1173_3105181876$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1174_1870034896$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1175_63456729$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1176_1691657064$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1177_1472166525$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1178_1576648296$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1179_1845976519$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1180_2404489540$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU22_1761101773$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1181_891252733$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1182_3520440949$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1183_3658134655$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1184_3105871490$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1185_1212346889$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1186_1031841034$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1187_1863114464$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1188_1813014286$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU627_1504628090$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1189_831705551$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1191_3219329906$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1192_3898026748$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU585_3617325442$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1193_981502815$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1194_1334261400$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1195_413176710$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1196_2682656861$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1197_3353125046$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1198_694290379$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1199_1092511220$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1200_4217830653$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1201_2201703749$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1202_1974432493$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1203_1309171887$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1204_1431146551$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1205_2680628301$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1206_371959791$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1207_4206195319$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1208_2325841016$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1209_1899836184$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1210_1782422064$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1211_1275668738$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1212_1324483693$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1213_3945436591$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1214_437195847$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1215_3712414440$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1216_2662309686$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; + +Create rollback segment _SYSSMU1217_1911541040$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1218_945482047$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1219_1158878768$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1220_296600217$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1221_2238672254$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1222_1305738876$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1223_3481303266$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1224_3576652567$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1225_842751953$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1226_1094290514$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1227_2531356959$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1228_2452841359$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1229_935400590$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1230_4156968424$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1231_3089117548$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1232_2879676093$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1233_1055662141$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1234_3857789242$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1235_2725365493$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1236_2030888920$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1237_1340662104$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1238_2889905212$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1239_2822341026$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1240_3872887111$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1241_1675877181$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1242_2819378308$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1243_507021588$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1244_2935125860$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1245_2110818292$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1246_885261169$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1247_1946498890$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1248_1295713116$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1249_4043574784$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1250_1820133638$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1251_1397493692$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1253_2748155795$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1254_2882001597$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1255_2042932433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1256_797170338$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1257_2804844494$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1258_1507548871$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1259_2637647578$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1260_4125236541$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1261_3760872281$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1262_3989654409$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1263_1834395289$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1264_3809203741$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1265_135171641$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1266_660990975$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1267_1065509237$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1268_1921330188$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1269_1341522962$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1270_3946736415$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1271_3529597524$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1272_914053495$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1274_374221110$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1275_1441647667$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1276_2662412680$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1277_1308447190$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1278_1789404051$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1279_1749817010$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1280_1877466856$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1281_3578069872$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1282_253028430$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1283_2976302674$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1284_3928241153$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1285_3884301210$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1286_3888177122$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1287_539321062$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1288_1673253449$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1289_3564783797$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1290_829916686$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1291_2144219925$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1292_149841098$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1293_3193628541$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1294_445299097$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1295_1914044501$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1296_184520689$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1297_3381163079$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; + +Create rollback segment _SYSSMU1298_2424058001$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1299_2944487077$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1300_3996439334$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1301_1449316326$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1302_3642654070$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1304_511484559$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1305_3148515390$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1306_2315245987$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1307_935034143$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1308_126862669$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1309_265718556$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1310_943788711$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1311_2911947871$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1312_2899236707$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1313_3467854189$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1314_2920983951$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1315_3587891174$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1317_1504880880$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1319_3280449291$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1320_2297819322$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1321_1934880071$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1322_3371617259$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1324_168223962$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1325_2473344988$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1327_419333513$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1328_730958730$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1329_3464757298$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1330_133038985$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1331_1648180980$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1332_1698316023$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1333_3271198906$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1334_4017507353$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1335_527556760$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1336_1760392160$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1337_2781659164$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1338_2997902966$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1339_606817501$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1340_1681980461$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1341_3071042465$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1342_3979366127$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1343_1364841223$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1344_798252438$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1345_3122508185$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1346_486552497$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1348_3348691207$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1349_4280578358$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1350_2674719870$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1351_1340369974$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1352_1639084335$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1353_3254168200$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1354_1329533651$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1355_1670072385$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1356_284886165$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1357_1064691495$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1358_3624319598$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1359_4169656606$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1360_1276616234$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1361_3667480251$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1362_1426302529$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1363_2084456117$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1364_3133053675$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1365_3299139330$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1366_1959157590$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1367_207824009$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1369_2315073515$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1371_4236287122$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1372_3190611859$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1373_3708564076$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1374_2007255361$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1375_1739903421$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1376_3405781035$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1377_3824790519$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1378_4139207409$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1379_2748655493$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1380_2771972910$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1381_1570157996$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1382_3049190540$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1383_1806032664$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1384_3986983049$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; + +Create rollback segment _SYSSMU1385_218648674$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1386_2342318994$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1387_649069090$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1388_2177312540$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1389_342186364$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1390_2748571087$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1391_603964602$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1392_4078190845$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1394_2673270108$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1395_1379838524$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1396_3762889053$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1397_2502189785$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1398_1840888118$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1399_2295140106$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1400_1994294549$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1401_2922248042$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1402_1679680265$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1403_725658619$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1404_4108978418$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1405_3000318179$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1406_525875898$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1407_2536119905$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1408_3338870258$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1410_210866092$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1411_4144391400$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1412_3873355295$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1413_12508630$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1414_3388733407$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1415_391084615$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1416_3535395842$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1417_1167394675$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1418_2084825564$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1419_921694857$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1420_2198163366$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1421_2091871886$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1422_235001141$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1424_4246335956$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1425_511034423$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1426_3867915558$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1427_102408437$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1428_2430856730$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1429_3528871808$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1430_2465335592$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1431_2370846078$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1432_2871371850$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1433_3863760743$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1434_3130790433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1435_2370614036$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1436_2912499912$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1438_855838977$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1439_3175466614$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1440_170744358$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1441_2911594009$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1442_1261064684$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1443_717155646$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1444_2964863935$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1445_3529979747$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1446_3737212858$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1447_2376822005$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1448_4075273898$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1450_184967201$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1451_2767337953$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1452_2248419695$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1453_2704355814$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1454_1786917306$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1455_248136471$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1456_3566045114$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1457_3944279605$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1458_87170567$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1459_3608792087$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1460_1677746320$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1461_1180341474$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1462_842080632$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1463_3496058923$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1464_2846251257$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1466_931511770$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1467_1001729367$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1468_3484976389$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1469_1938606124$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; + +Create rollback segment _SYSSMU1470_223267991$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1471_1301057625$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1472_592693145$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1473_3537377420$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1474_516256066$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1475_3984550669$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1477_1408082430$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1478_3811713686$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1479_1415792609$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1480_16874640$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1481_1058157854$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1482_2033967589$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1483_1013613262$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1484_3049584281$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1485_1278950501$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1486_3167188784$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1487_492370701$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1488_1456731969$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1489_617522183$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1490_3627253827$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1491_3243768818$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1492_2568267503$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1493_2274958477$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1494_1700621383$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1495_2926785842$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1496_3000252092$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1497_1270215820$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1498_1061272966$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1499_1620270396$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1500_3515875678$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1501_950419585$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1502_479298104$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1503_1092072411$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1504_4075262439$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1505_2813993282$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1507_2603929632$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1508_332145571$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1509_4124095327$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1510_72404224$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1511_1635402099$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1512_2730850585$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1513_412620232$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1514_2163252646$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1515_3620975803$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1517_927199607$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1518_3014368816$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1519_591999675$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1520_3502672565$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1521_3777186461$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1522_2474096327$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1523_3544435723$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1524_3894058623$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1525_1431187810$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1526_2662765626$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1527_1479583467$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1528_3352587660$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1529_2919415512$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1531_558088669$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1532_2506715581$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1533_1341868117$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1534_2191515434$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1535_1245031858$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1536_3317468829$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1538_436339111$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1539_2919046846$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1540_2583529997$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1541_2862593136$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1542_848395222$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1543_3942403218$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1544_1415574292$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1545_421597925$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1546_1406093946$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1547_4062810544$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1548_2146492999$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1549_2603578398$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1550_4064019555$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1551_1034051419$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1552_3881023083$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1553_3989165323$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; + +Create rollback segment _SYSSMU1555_136867677$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1556_801191801$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1557_4248052794$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1558_240149513$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1559_1745223010$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1560_3144794657$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1561_2171814066$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1562_577494369$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1563_657852897$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1564_4181182176$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1565_4009542610$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1566_3622790999$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1567_3248255966$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1568_555143315$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1571_4264087091$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1572_1319133139$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1573_1404315006$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1574_1546734277$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1575_2265895968$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1576_1228582596$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1577_2323232793$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1578_3214713006$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1579_2231877069$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1580_1159083058$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1581_1758359677$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1582_2264415373$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1583_3622654519$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1584_3582870908$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1585_3325458482$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1586_3959990721$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1587_1279727064$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1588_3503757590$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1589_2643786299$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1590_4004245410$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1591_3633016424$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1592_1154364552$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1593_307082760$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1594_975283432$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1595_921734126$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1596_2526467441$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1597_2737029400$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1598_1554304960$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1599_3045544172$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1600_2934954154$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1601_687799540$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1602_376901134$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1603_4266384174$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1604_261368603$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1605_2791272875$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1606_2119450225$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1607_2356506946$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1608_3259901126$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1609_2599378018$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1610_2154522364$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1611_435193340$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1612_804572144$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1613_2209732728$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1614_770647$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1615_1311577612$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1616_2846138565$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1617_2213214866$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1618_249636704$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1619_2499886644$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1621_192149222$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1622_1384869644$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1623_90943566$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1624_3086165857$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1625_1120833408$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1626_2750135719$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1627_1973303519$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1628_2973000239$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1629_3055791953$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1630_3034003807$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1631_1779483398$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1632_2109836007$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1633_2767387910$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1634_846751678$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1635_2060252341$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1636_3066508215$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; + +Create rollback segment _SYSSMU1637_1441683134$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1639_1111532314$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1640_2306537031$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1641_4094311015$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1642_3202755837$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1643_2653619584$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1644_2404867656$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1645_969347293$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1646_2133586577$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1647_3820408085$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1648_3350077140$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1649_705269535$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1650_1429153890$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1652_2192961136$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1653_3284971521$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1654_3495737273$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1655_2354754111$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1656_3557040504$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1657_2505414215$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1658_3146698151$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1659_4264217988$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1660_1495938899$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1661_2086544244$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1662_2426221376$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1663_1032424049$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1664_3039651445$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1665_597291672$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1666_3284837310$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1667_398410349$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1668_3219168650$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1669_2973483131$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1670_1233267249$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1671_527853732$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1672_1669571334$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1674_3432297794$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1675_302690896$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1676_1682427228$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1677_3967430719$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1678_2982044938$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1679_2363885965$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1680_1594756476$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1681_1636324966$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1682_2882426224$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1685_3666410320$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1686_3786836048$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1687_2542559365$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1688_2843379059$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1689_3511075457$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1690_1533346925$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1691_4227436791$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1692_1808625928$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1693_3894139429$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1694_807051904$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1695_2264341070$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1696_3824076137$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1697_2862174665$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1699_3982690817$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1700_2309293921$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1702_2101646997$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1703_2943981902$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1704_544698057$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1705_679948139$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1706_1657250529$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1707_2900923571$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1708_1014217174$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1709_479577407$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1710_4157491300$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1711_1401862227$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1712_1219554651$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1713_4100014593$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1714_1065626630$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1715_442140900$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1716_3125592877$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1717_705303136$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1718_854802492$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1719_4046368376$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1720_3520938996$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1721_1757239288$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1722_2633716506$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; + +Create rollback segment _SYSSMU1723_361250422$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1724_2032517043$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1725_2216365152$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1726_1209407716$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1727_2202013763$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1728_2030297544$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1729_1312888828$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1730_2654597326$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1731_2485694188$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1732_1984720836$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1733_662564986$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1734_3647284297$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1735_1984590241$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1736_3430002194$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1737_800388965$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1738_2300535754$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1739_1836904754$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1740_1844245272$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1741_665144970$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU1742_3980178199$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1743_693696544$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1744_683418857$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1745_4071401559$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1746_937835859$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1747_290564145$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1748_2587819362$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1749_659512563$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1750_3394785600$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1751_3770039835$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1752_2861992649$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1753_4284550893$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1754_2070657775$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1755_3315093217$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1756_1352959521$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1757_2830399066$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1758_1403062474$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1759_2529698498$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1760_2225197951$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1763_2421228079$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1764_3332184900$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1765_2628904267$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1767_1057393936$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1768_1029638655$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1769_1120235304$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1770_513204941$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1771_4088056767$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1772_2072510505$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1773_1329309479$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1774_1379550591$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1775_3293266220$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1776_3496435515$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1777_2999261851$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1778_3385633316$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1779_91430672$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1780_2533833629$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1781_3621319550$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1782_366841474$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1784_3734355406$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1785_2384378386$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1786_3109421842$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1787_3393219666$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1789_1908297915$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1790_3864213468$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1792_1534676531$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1793_82008895$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1794_2610089932$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1795_390845684$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1796_759011323$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1798_2358694915$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1799_2675726875$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1801_3838116905$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1802_2528850829$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1803_3086330374$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1804_3952696973$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1806_1183251960$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1807_1089629450$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1808_1701507213$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1809_122702184$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1810_546919206$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; + +Create rollback segment _SYSSMU1811_1620266477$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1812_3949746487$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1813_197399108$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1814_3510408023$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1815_1921180374$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1816_162375827$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1819_3351875947$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1820_2256540545$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1821_2266445916$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1822_4293949168$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1823_845188057$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1824_3315801814$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1825_3240603078$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1826_1351861570$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1827_3091716681$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1828_1899072790$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1829_3222671023$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1830_936547698$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1831_1615580493$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1833_990618896$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1834_3671889045$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1835_3928054655$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1836_4007208163$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1837_4041533369$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1838_173782334$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1839_3624003165$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1840_1864287719$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1841_2619470842$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1842_1621362894$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1843_3247026197$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1844_2169641838$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1845_13643276$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1846_813752010$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1847_1232325930$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1848_3364870086$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1849_111574401$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1850_2813833971$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1851_1675423788$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1852_2317563537$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1853_3502621743$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1854_3238437740$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1855_3564447970$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1856_792223891$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1857_194464326$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1858_3489300687$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1859_3588789723$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1861_24766599$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1862_1022921003$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1863_815905519$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1864_3289751251$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1865_2199071939$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1866_2178617585$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1867_2122074288$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1868_3961853359$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1869_3833074229$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1870_2264846124$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1871_1733409979$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1872_196374304$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1873_2592360373$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1874_3477757452$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1875_4082041717$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1876_2942216922$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1877_3922894903$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1878_2959534591$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1879_58796973$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1880_453830461$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1881_2021539460$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1882_1303480675$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1883_433066650$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1884_3337307350$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1885_485998011$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1886_3743729806$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1887_3905369019$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1888_1702530197$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1889_480480914$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1890_255754085$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1891_1628116952$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1892_560568799$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1893_3940332979$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; + +Create rollback segment _SYSSMU1894_603023110$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1895_4181633786$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1896_2776159349$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1897_4047473670$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1898_3108918396$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1899_582810557$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1900_1235344842$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1901_2649232514$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1902_1631803989$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1903_1740882473$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1904_1835085240$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1905_1192512826$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1906_1975721072$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1907_1760292368$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1908_3016844851$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1909_1014814994$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU1911_1387767718$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1912_3949165210$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1913_1535026133$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1914_1917632978$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1915_1528862759$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1916_2501243299$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1918_4007590368$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1919_569307914$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1920_2596738031$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1921_210634210$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1922_2831295054$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1923_630526636$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1924_1002425070$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1925_740164486$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1926_2428221153$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1927_2790463268$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1928_3024682852$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1929_572493671$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1930_4009491220$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1931_4006029931$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1932_912867242$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1933_4187025630$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1934_567954510$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1935_920222235$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1936_2185455860$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1937_4009177519$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1938_4012531397$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1939_1160135387$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1940_1488895503$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1941_1249199312$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1942_539543982$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1943_210793045$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1944_4119939146$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1945_1125328738$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1946_2029124188$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1947_2329731557$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1948_4222682424$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1949_1309187577$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1950_3865253843$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1951_2506856285$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1952_2625551316$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1953_3149079885$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1954_277714633$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1955_3315925424$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1956_702972830$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1957_2005592069$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1958_4247330358$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1959_4219597206$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1960_4229043420$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1961_3640073606$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1962_566852807$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1963_3359154105$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1964_3235008643$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1965_313692784$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1966_3276349778$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1967_3853967662$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1968_316058049$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1969_828909199$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1970_1747538244$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1971_2608961831$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1516_2460780614$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1537_599796367$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1554_2967855649$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; + +Create rollback segment _SYSSMU1570_3871133040$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1860_3121719047$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU1318_4250713247$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1326_3343323523$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1347_1472849481$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1370_1051005641$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1409_2959217368$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1423_3294910621$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1437_194117528$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1449_3415630179$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1701_3035039315$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1788_3664163671$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1797_1937145221$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1805_2104876100$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1638_2030901393$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1651_2603493268$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1910_1114986114$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1917_2750573589$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1791_932970634$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1972_631189127$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1973_2510776337$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1974_814415392$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1975_1812986502$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1976_1545430625$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1977_2049094534$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1978_3613695294$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1979_950605118$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1980_3011839391$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1981_2143470738$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1982_2540994429$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1983_62157433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1984_3039319800$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1985_1144517273$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1986_1725224641$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1987_3459153556$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1988_4179737792$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1989_2988218364$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1990_3289664589$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1991_2344881027$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1992_3173208200$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1993_1599910532$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1994_311559252$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1995_2509720794$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1996_1587225996$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1997_1681993322$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1998_3609131866$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1999_4150144460$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2000_3355687910$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2001_3653578153$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2002_1233468009$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2003_1006736597$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2004_343802294$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2005_2170459780$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2006_3058907104$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2007_552112499$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2008_3340600812$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2009_1538328479$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2010_2165830071$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2011_2749832081$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2012_2951711847$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2013_3429410455$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2014_626281972$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2015_4266704599$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2016_1846712062$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2017_1006195409$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2018_2504998596$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2019_3656959669$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2020_447666119$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2021_3822993605$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2022_2295809180$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2023_1285083388$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2024_827200675$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2025_1650771963$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2026_4026890114$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2027_3488853536$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2028_1478939652$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2029_3389704566$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2030_805809144$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2031_196234305$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU2032_4207557348$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2033_898189318$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2034_443892213$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2035_1489729849$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2036_3411388991$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2037_369063051$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2038_1794054748$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2039_2569499936$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2040_3438979960$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2041_3558514546$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2042_1574660385$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2043_1113533964$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2044_528263455$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2045_1595854422$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2046_675382036$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2047_247165067$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2048_2400140237$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2049_2163239021$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2050_490246264$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2051_1224329478$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2052_241493129$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2053_597191565$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2054_627589046$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2055_1242251914$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2056_3315440733$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2057_2796527128$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2058_984422180$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2059_4042308375$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2060_3201442247$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2061_769679129$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2062_510967512$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2063_232700579$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2064_3326925704$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2065_2809674295$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2066_4140955953$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2067_3149329456$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2068_2189298612$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2069_303247394$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2070_2409273719$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2071_4170260584$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2072_3985196644$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2073_480486749$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2074_1114345018$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2075_1918706818$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2076_3950189183$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2077_4265166874$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2078_1778338946$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1698_970725880$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1783_1651381202$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU406_3734205411$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU619_2461040214$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1316_2971184402$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU547_2231859300$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU745_2565451925$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU2079_2536240889$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2080_1610214893$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2081_3381763104$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2082_3554037200$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2083_1713500756$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2084_3148801252$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2085_3912027873$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2086_1776040923$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2087_976916813$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2088_1101081146$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2089_2966846909$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2090_1183700135$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2091_3484859507$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2092_1116761465$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2094_201563753$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2095_2338345253$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2096_263822054$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2097_679921764$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2098_910728682$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2100_3222625453$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2101_2943768255$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2102_1628001467$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2103_2838693086$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2104_1139166911$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2105_1670982482$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU2106_1049627880$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2107_836966828$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2108_979225553$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2109_3042417117$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2110_1113393731$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2111_1394088201$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2112_2970709695$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2113_2000686186$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2114_2788500798$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2115_3659966308$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2116_1225084883$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2117_4263304889$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2118_2910948542$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2120_71836782$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2121_799450644$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2122_1342151472$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2123_2814393279$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2124_282229640$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2125_3889230480$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2126_210831953$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2127_774934414$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2128_2643630217$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2129_1601066292$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2131_699255563$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2132_1747876494$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2133_2638708766$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2134_3245283960$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2135_3230622539$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2136_2690837596$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2137_253680833$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2138_1599352367$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2139_2991718913$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2140_2335685810$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2141_23716965$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2142_3679498341$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2143_698528167$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2144_1159559809$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2145_3480659466$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2146_2360283454$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2147_3430141730$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2148_1138683694$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2149_2074568550$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2150_1748452118$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2152_3468627509$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2153_3248214397$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2154_2180506804$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2155_3396494514$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2156_3159968885$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2157_3566107440$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2159_3359369085$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2160_3274850464$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2161_3083970265$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2162_936839594$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2163_2656492174$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2164_3695156032$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2166_3968642851$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2167_706220451$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2168_341450613$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2169_77666844$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2170_3194278922$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2171_1581331695$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2173_4283061770$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2174_685971481$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2175_212049523$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2176_268111862$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2177_3220143848$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2178_2749025613$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2179_1199912814$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2180_2677858057$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2181_2483930122$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2182_3242095351$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2183_927970816$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2184_2033348390$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2185_549426735$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2186_2603400461$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2187_3491711452$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2188_3682017789$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2189_3094765190$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2190_3031745252$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; + +Create rollback segment _SYSSMU2191_1508787664$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2192_3814879669$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2193_3816741840$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2194_2540928384$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2195_312369557$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2196_761651800$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2197_2499259094$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2198_2832537761$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2199_3663301240$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2200_935624806$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2201_2970414413$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2202_2104819417$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2203_2040825156$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2204_2264744449$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2205_3169008284$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2206_991466453$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2207_3360471832$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2208_12335978$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2209_1028921296$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2210_2221164104$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2211_1539675887$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2212_1906625021$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2213_4031287465$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2214_2722695893$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2215_1519294470$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2216_1138518095$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2172_4767068$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2165_3616130164$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2158_2824510281$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2151_3715359610$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1817_1878017740$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1762_4272141942$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1673_2547059768$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1530_4162585979$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2217_108723554$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2218_19933515$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2219_2833425871$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2220_68414830$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2221_2895207152$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2222_3807342338$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2223_2069261832$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2224_3904884776$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2225_2300424661$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2226_2911999265$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2227_2642192203$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2228_1597431819$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2229_2207605785$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2230_922175708$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2231_540525294$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2232_2882060518$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2233_788116045$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2234_1434708761$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2235_613533188$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2236_930449255$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2237_437239905$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2238_835622443$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2239_2843054537$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2240_1369598976$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2241_1284593706$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2242_1451454017$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2243_2756408084$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2244_3466003251$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2245_3078977848$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2246_1733141829$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2247_3508221060$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2248_3288745366$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2249_571155592$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2250_236133255$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2251_29379489$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2252_3047255536$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2253_3358924050$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2254_3727810772$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2255_3860495316$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2256_4076634887$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2257_2549767268$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2258_1261375218$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2259_3647572345$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2260_812716226$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2261_3389690242$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU2262_1614645095$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2263_3895430998$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2264_1117164520$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2265_1354591969$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2266_1784926101$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2267_3007729204$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2268_2415987375$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2269_2559162458$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2270_3725671197$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2271_3725505968$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2272_1239287418$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2273_2995084160$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2274_3059161719$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2275_1283424288$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2276_3061861601$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2278_3409019804$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2279_1924763705$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2280_2347847428$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2281_3764651998$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2282_2594827929$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2283_1977014207$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2285_2692858343$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2286_2105980884$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2287_1053011076$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2288_3010579597$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2289_3466171103$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2291_2466564358$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2293_839995798$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2294_4007700757$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2295_591305864$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2296_582779510$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2297_446085349$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2298_798368758$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2299_2660697434$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2300_734389246$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2301_2910372761$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2302_2532273526$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2303_1472467541$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2304_13085306$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2305_2662924030$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2306_2131323401$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2307_2066314766$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2308_2410081104$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2310_3342052837$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2311_3140315579$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2312_2465749363$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2313_3636511818$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2314_2291252571$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2315_397462506$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2316_2478070616$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2317_3334602332$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2318_933357748$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2319_2869127815$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2320_370129720$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2321_813209285$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2322_2856792728$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2323_3418328778$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2324_1578104481$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2325_3396071003$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2326_2867274636$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2327_724605167$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2328_3148386920$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2329_305212069$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2330_1433750695$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2331_3207422921$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2332_2353246375$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2333_1971180945$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2334_839789296$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2335_3751581247$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2336_3881813200$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2338_4065393976$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2339_708839600$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2340_1636303833$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2341_1891422919$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2342_664382840$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2343_2703166265$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2344_954158541$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2345_1168295616$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2346_1657926441$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU2347_417133740$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2348_1873614029$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2349_1940611678$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2350_195059622$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2351_3951129770$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2352_3373448903$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2353_3785514193$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2354_758979457$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2355_864425821$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2356_1370738579$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2357_3620060064$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2358_1478162307$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2359_3987970619$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2360_571334252$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2361_3755524605$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2362_3113633906$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2363_3020145892$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2364_1490617173$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2365_666428033$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2366_2779130914$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2367_1934793274$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2368_2144114759$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2369_4054104781$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2370_4183724824$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2371_3700621749$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2372_157362844$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2374_1195381203$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2375_2893543921$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2376_4042771512$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2377_3604116047$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2379_1057464762$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2381_2207498565$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2382_534077305$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2383_2746671986$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2384_4013190644$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2385_580314585$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2386_3571157656$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2387_3121602464$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2388_3077545669$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2389_3788178053$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2390_3881973573$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2392_1749080291$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2393_3597134493$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2394_1467631623$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2395_2649378307$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2396_208669171$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2397_1390149423$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2399_4043698896$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2400_3060754900$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2401_2535995169$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2402_3193958514$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2403_354858837$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2404_1078007077$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2405_3421187112$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2406_2741635705$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2407_2062884046$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2408_2688791326$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2410_2985234102$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2411_4286943732$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2412_3923881049$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2413_3181924877$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2414_757618853$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2415_1411675200$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2416_1852094385$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2417_2834070258$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2418_3135686828$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2419_745865044$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2420_2410625430$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2421_1115964076$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2422_4237521214$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2423_1342251474$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2424_1005304206$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2425_2987485409$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2426_1457572710$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2427_485973181$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2428_3873835301$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2429_98561343$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2430_3322815742$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2431_743551233$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU2432_67049460$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2434_3360974254$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2435_888767764$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2437_1257885776$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2438_81330591$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2439_195704682$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2440_652426688$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2441_3926219182$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2442_1461045371$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2443_4044090575$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2444_3884038934$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2445_2845912689$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2446_797958890$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2447_2934192799$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2448_1765967973$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2449_2788469431$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2450_3442771635$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2451_1098831571$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2452_2102928630$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2453_1601793269$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2454_2551122379$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2455_3547258769$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2456_334106464$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2457_4154654513$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2458_3432375961$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2459_1086562461$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2460_4230121072$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2461_578437226$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2462_3883006536$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2463_3876221296$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2464_645046786$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2465_1073942210$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2466_1177390247$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2467_806207943$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2468_1017114947$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2469_2364796539$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2470_1502061138$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2471_779497032$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2472_1276759681$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2473_1765029082$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2474_3831724486$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2475_3085177639$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2476_3455870369$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2477_1253653177$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2478_677326592$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2479_2421966834$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2480_525522545$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2482_3552357098$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2483_3962408887$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2485_1705485814$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2487_1777872904$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2488_2923044530$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2489_1102088864$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2490_2218905121$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2491_2534918485$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2492_2407087805$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2493_2475457093$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2494_3009092492$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2496_3397532555$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2497_3768099234$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2498_2386668785$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2499_3816096624$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2501_3094706093$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2502_2898627186$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2503_2534005376$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2504_944369726$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2505_2232100426$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2506_3436708243$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2507_1132645983$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2508_1392200892$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2510_2536692536$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2511_2524969970$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2512_299678222$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2513_1825726142$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2514_1508749263$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2515_1381809857$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2516_1980095099$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2517_1196801737$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2518_643170966$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU2519_1103085113$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2520_2759834561$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2521_3460980269$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2522_759654723$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2523_339369428$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2524_2925078701$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2525_1204706432$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2526_3403936559$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2527_203269984$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2528_4148732703$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2529_1764025580$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2530_121960555$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2531_352862425$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2532_4279574516$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2534_265165861$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2535_740238747$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2536_1468870401$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2537_496165026$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2538_1569470341$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2539_848833771$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2540_3385333151$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2541_1938218583$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2542_3795145282$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2543_1078495479$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2544_127706732$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2545_2120650959$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2546_3738311296$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2547_1305092618$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2548_1551006450$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2549_4011593407$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2550_1174868215$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2551_3204014339$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2552_3589932173$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2553_1039929338$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2554_3430872047$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2555_2772519701$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2556_2648762382$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2557_1448113977$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2558_1205836181$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2559_473463253$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2560_844379465$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2561_2614516339$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2562_2334148910$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2563_4125814260$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2564_682500108$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2565_160178019$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2566_580358343$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2567_2706786151$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2568_105211077$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2569_2783489310$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2570_867417817$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2571_2516246192$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2572_3006970527$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2573_1396286146$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2574_857429927$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2575_584641311$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2577_12126254$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2578_2283524751$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2579_3776843753$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2580_3601057462$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2581_2626917810$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2582_2092072442$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2584_2589262916$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2585_17714451$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2586_368548577$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2587_3816675655$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2588_1685552161$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2589_736191327$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2590_3051690497$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2591_2447170845$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2592_1363912642$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2594_4254152582$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2596_309368680$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2597_3922504939$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2598_2988663254$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2599_502275213$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2601_1838804$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2602_135367577$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2603_3129078138$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU2604_852390829$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2605_3790115586$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2607_3795871060$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2608_3314184077$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2609_3727742112$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2610_3067514150$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2611_1378295218$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2612_3154654743$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2613_3418114882$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2614_1615732599$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2615_4197188020$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2616_3392402768$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2617_449694310$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2618_2818412561$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2619_1795808045$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2620_2408937344$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2621_813653380$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2622_1990116250$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2623_2627753490$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2624_2599141323$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2625_3467676847$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2626_1831899864$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2627_2395108000$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2628_733104202$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2629_2377106752$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2630_4090994824$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2631_1341334623$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2632_3153697625$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2633_1137034397$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2634_3304382002$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2635_1419491199$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2636_2101635733$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2637_4253406535$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2638_2969774263$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2639_985856886$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2640_2920550642$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2641_3603418189$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2642_3393203578$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2643_4219858326$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2644_2606254085$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2645_2606817832$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2646_1992685305$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2647_1739244209$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2648_2617120876$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2649_2411802691$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2650_3774999624$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2651_326749661$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2652_2806707022$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2653_1220647649$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2654_1158909206$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2655_324403364$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2656_3249094818$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2657_2746423420$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2658_3019708582$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2659_2453315899$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2660_3239187905$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2661_1391185489$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2662_4235396786$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2663_1919062145$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2664_4149272561$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2665_2029138852$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2666_3913831067$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2667_2447398575$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2668_2660472533$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2669_4223915413$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2670_4221578459$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2671_3377649252$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2672_2579855436$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2673_2435848749$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2674_1542063643$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2675_1553370007$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2676_2657610953$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2677_3572933635$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2678_1934150103$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2679_2378498060$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2680_246797210$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2681_763278810$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2682_2342422979$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2683_2125007484$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU2684_1176539841$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2685_180430087$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2686_3845998938$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2687_3686220348$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2688_2644476682$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2689_191854660$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2690_3146812695$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2691_432225730$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2692_1479316062$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2693_3235074349$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2694_2060874948$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2695_1546071485$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2696_2448001824$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2697_376127489$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2699_441474843$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2700_620491704$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2701_8628557$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2702_3475180532$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2703_2055500970$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2704_2577155146$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2706_3213006983$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2707_515075746$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2708_3805393845$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2709_2020765691$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2710_2149395475$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2711_3335905308$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2713_99644226$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2714_1090232258$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2715_531736427$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2716_1992182991$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2717_903451226$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2718_353619070$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2719_1971775413$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2720_4105868525$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2721_4267270666$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2722_2859860738$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2723_3203667455$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2724_3056774887$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2725_3971811104$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2726_3376463787$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2727_581067802$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2728_8286205$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2729_1297088048$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2730_2529578418$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2731_2399587273$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2732_4081398059$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2733_4003417572$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2734_2777408355$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2735_1940519960$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2736_67497687$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2737_406032669$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2738_3288834470$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2739_3830701248$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2740_511521617$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2741_435716999$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2742_3097445437$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2743_504275284$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2744_1618476351$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2745_560765515$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2746_3125454096$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2747_2027957147$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2748_2610913288$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2749_4051798925$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2750_2955182796$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2751_4082037082$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2752_2209592946$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2753_3892206768$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2754_1309604748$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2755_391875301$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2756_1579485914$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2757_3183040753$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2758_2998264869$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2759_1165138066$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2760_1427662655$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2761_287722600$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2762_4210108450$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2763_2200466969$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2764_2789019056$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2765_3234666137$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU2766_4218064750$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2767_762033005$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2768_3764425442$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2769_1002665637$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2770_2188531596$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2771_1347452807$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2772_3322941433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2773_718787112$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2774_2088176320$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2775_262815428$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2776_43390718$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2777_3887559269$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2778_2110903623$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2779_3039122042$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2780_2805601379$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2781_3491585017$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2782_1240817044$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2783_1145646605$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2784_3950279400$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2785_4010798895$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2786_1367701048$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2787_2481520830$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2788_1937754436$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2789_2224189744$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2790_2328978584$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2791_2261722574$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2792_861406851$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2793_996389933$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2794_3897070140$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2795_3474658891$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2796_1797515133$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2797_1121031762$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2798_1329457568$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2799_3804047533$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2800_2365793151$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2801_1921257015$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2802_3565942347$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2803_192114666$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2804_162962289$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2805_4146419106$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2806_666755303$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2807_783642639$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2808_202061961$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2809_2402412373$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2810_401776781$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2811_327983304$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2812_516386267$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2712_4012791889$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2705_3414711991$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2698_390688422$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2606_3732131318$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2600_49956034$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2593_719099657$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2500_1242677986$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2495_271754625$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2484_3473442193$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2398_1087261036$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2391_1105925704$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2380_1406393643$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2290_1718394928$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2284_2627495432$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2277_2085057859$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU307_4128745773$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2378_655227508$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2099_1620631583$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2130_2991846922$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2309_2394725634$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1818_3125878725$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2292_4153810467$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1761_1559725986$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU141_1951320519$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU2373_4087816853$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2433_1095155062$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2093_378678981$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2509_731225245$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU860_3517219784$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2409_84933736$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU789_3613658978$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2119_1916413265$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; + +Create rollback segment _SYSSMU414_4055307372$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU365_547412735$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1476_1608471494$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1506_2031409428$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1683_2139416761$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1832_3129966547$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU1800_4010410987$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU912_2481570610$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU149_4183475211$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU23_1620393082$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU532_443970159$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU597_4191894164$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU473_3381397017$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU136_1824240878$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1252_3064154581$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU798_4261744935$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS8; +Create rollback segment _SYSSMU2436_1074832257$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2481_1640168897$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2486_3606122439$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2533_1235463729$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2576_2236565448$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2595_936024783$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU2337_1827954632$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU641_1176357315$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU234_798395034$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2583_677995753$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU842_1029388625$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU686_2248688394$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1569_968230495$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; +Create rollback segment _SYSSMU2813_1096402627$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2814_1308160873$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2815_4035230723$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2816_1638627900$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2817_1605843663$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2818_404313264$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2819_3505454910$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2820_3538182569$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2821_3186967929$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2822_2042444941$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2823_3368159337$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2824_2406639842$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2825_3922122946$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2826_4249891593$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2827_3702717759$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2828_1023757433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2829_170358439$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2830_362023694$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2831_2871782443$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2832_383915573$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2833_3749318178$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2834_1932553670$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2835_4284642734$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2836_1952340927$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2837_1019120192$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2838_406282747$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2839_1942429382$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2840_1954236713$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2841_943628701$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2842_2939769929$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2843_1659511027$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2844_753616034$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2845_2564500195$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2846_161995513$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2847_4293263691$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2848_1746989339$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2849_730886865$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2850_3990926966$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2851_2274523650$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2852_3698048657$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2853_2535743657$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2854_1410702063$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2855_3599780317$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU2856_1312910467$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1393_339662987$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1368_3395848944$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1684_1090797317$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU1190_748016799$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS3; +Create rollback segment _SYSSMU382_1736015147$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1465_3339476995$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS1; + +Create rollback segment _SYSSMU674_858554837$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU1069_3028992230$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1766_3886620543$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS6; +Create rollback segment _SYSSMU1323_614781492$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS5; +Create rollback segment _SYSSMU594_2769793441$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU820_4136046041$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1273_907194652$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU418_533887197$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU817_1796948811$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1303_1122408868$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS4; +Create rollback segment _SYSSMU1620_2953560027$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS7; +Create rollback segment _SYSSMU653_2794040355$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS2; +Create rollback segment _SYSSMU2857_662839376$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2858_3838552233$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2859_1805534319$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2860_3824228542$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2861_132354352$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2862_3085515689$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2863_4006859992$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2864_1910356101$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2865_1914125616$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2866_3598279787$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2867_3795041943$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2868_3393542243$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2869_1955324919$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2870_1005617234$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2871_3269295162$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2872_831289535$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2873_930488056$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2874_1594588659$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2875_286074302$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2876_3234229373$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2877_1439439557$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2878_3754350316$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2879_642181282$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2880_629158740$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2881_1800439433$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2882_921697479$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2883_2351147575$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2884_3753245208$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2885_205970504$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2886_1236910254$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2887_3774777137$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2888_4044757075$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2889_3139133716$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2890_3885873472$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2891_2739903229$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2892_204415529$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2893_3272163339$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2894_3262896071$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2895_3941023217$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2896_3096004969$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2897_3798665242$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2898_1234824650$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2899_2800483497$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2900_958825769$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2901_3646834815$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2902_1143068658$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2903_1988356748$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2904_249007251$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2905_489845544$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2906_370988927$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2907_3218585681$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2908_459407246$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2909_512906238$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2910_1191744023$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2911_1100080918$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2912_3107893543$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2913_1424406891$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2914_2623239515$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2915_1816172507$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2916_808608856$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2917_631690843$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2918_1676768116$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2919_858653762$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2920_3415264361$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2921_3734237969$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2922_1656311252$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2923_1427966385$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; + +Create rollback segment _SYSSMU2924_684483482$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2925_280028864$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2926_1833554017$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2927_4025812256$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2928_827893950$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2929_2779639168$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2930_3331245744$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2931_1604376541$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2932_905502672$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2933_1050263978$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2934_289629786$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2935_2289343247$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2936_2375650504$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2937_3090346935$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2938_933215259$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2939_674978481$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2940_592860078$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2941_1770589862$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2942_4153669275$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2943_2693449949$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2944_3441038566$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2945_2082901617$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2946_3995758015$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2947_2169651897$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2948_3075369755$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2949_2315566869$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2950_2966330139$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2951_1630147641$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2952_2935935569$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2953_2423676084$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2954_2493184904$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2955_2036673954$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2956_1317357143$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2957_2047370669$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2958_2689997330$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2959_1524377938$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2960_210841287$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2961_936457326$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2962_1272329199$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2963_3687549738$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2964_2758969620$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2965_3230717465$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2966_187927373$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2967_1607810086$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2968_15605772$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2969_3605255663$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2970_2740813411$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2971_170533396$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2972_1192383897$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2973_3053329125$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2974_1754735818$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2975_363352138$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2976_4277001540$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2977_453503436$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2978_435225818$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2979_1396515835$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2980_216394146$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2981_605000663$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2982_2860095423$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS11; +Create rollback segment _SYSSMU2983_3049308964$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2984_3262639947$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2985_1366905679$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2986_1214595858$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2987_2016417970$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2988_3236196027$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2989_3734423846$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2990_3944664401$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2991_2141564902$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2992_2492598782$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2993_4158217133$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2994_335070717$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2995_935930134$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS10; +Create rollback segment _SYSSMU2996_4140560879$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; +Create rollback segment _SYSSMU2997_1193453621$ storage (initial 131072 NEXT 65536 MINEXTENTS 2)TABLESPACE UNDOTBS9; + +2997 rows selected. + diff --git a/vg/cube_log_setting.sql b/vg/cube_log_setting.sql new file mode 100644 index 0000000..53b6e1c --- /dev/null +++ b/vg/cube_log_setting.sql @@ -0,0 +1,82 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display OLAP Sessions +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Nov-12 Vishal Gupta Created +* +*/ + +PROMPT ********************************** +PROMPT * Cube Logging Setttings +PROMPT ********************************** + +COLUMN log_type HEADING "Log Type" FORMAT a20 +COLUMN max_errors HEADING "Max Errors" FORMAT 999999999 +COLUMN flush_interval HEADING "Flush|Interval|(sec)" FORMAT 999999999 +COLUMN log_full_record HEADING "Log Full|Record" FORMAT a20 +COLUMN log_every_n HEADING "Log Every|N records" FORMAT 999999999 +COLUMN allow_errors HEADING "Allow Errors" FORMAT 999999999 + +SELECT 'Build' Log_Type + , 0 max_errors + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_build,2) flush_interval + , CASE sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_build,3) + WHEN 0 THEN 'FULL_RECORD_AUTO' + WHEN 1 THEN 'FULL_RECORD_ALWAYS' + WHEN 2 THEN 'FULL_RECORD_NEVER' + ELSE TO_CHAR(sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_build,3)) + END log_full_record + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_build,4) log_every_n + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_build,5) allow_errors +FROM DUAL +UNION ALL +SELECT 'Operations' Log_Type + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_operations,1) max_errors + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_operations,2) flush_interval + , CASE sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_operations,3) + WHEN 0 THEN 'FULL_RECORD_AUTO' + WHEN 1 THEN 'FULL_RECORD_ALWAYS' + WHEN 2 THEN 'FULL_RECORD_NEVER' + ELSE TO_CHAR(sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_operations,3)) + END log_full_record + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_operations,4) log_every_n + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_operations,5) allow_errors +FROM DUAL +UNION ALL +SELECT 'Dimension Compile' Log_Type + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_dimension_compile,1) max_errors + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_dimension_compile,2) flush_interval + , CASE sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_dimension_compile,3) + WHEN 0 THEN 'FULL_RECORD_AUTO' + WHEN 1 THEN 'FULL_RECORD_ALWAYS' + WHEN 2 THEN 'FULL_RECORD_NEVER' + ELSE TO_CHAR(sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_dimension_compile,3)) + END log_full_record + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_dimension_compile,4) log_every_n + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_dimension_compile,5) allow_errors +FROM DUAL +UNION ALL +SELECT 'Rejected Records' Log_Type + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_rejected_records,1) max_errors + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_rejected_records,2) flush_interval + , CASE sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_rejected_records,3) + WHEN 0 THEN 'FULL_RECORD_AUTO' + WHEN 1 THEN 'FULL_RECORD_ALWAYS' + WHEN 2 THEN 'FULL_RECORD_NEVER' + ELSE TO_CHAR(sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_rejected_records,3)) + END log_full_record + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_rejected_records,4) log_every_n + , sys.dbms_cube_log.get_parameter(sys.dbms_cube_log.type_rejected_records,5) allow_errors +FROM DUAL +; + + +@@footer diff --git a/vg/cursor_pin_wait.sql b/vg/cursor_pin_wait.sql new file mode 100644 index 0000000..ebce20c --- /dev/null +++ b/vg/cursor_pin_wait.sql @@ -0,0 +1,15 @@ + + +/* +MOS Id [ID 786507.1] - How to Determine the Blocking Session for Event: 'cursor: pin S wait on X' + + +*/ + +SELECT s.inst_id + , s.sid + , to_number(substr(to_char(rawtohex(p2raw)),1,8),'XXXXXXXX') Blocking_SID + , s.username + , s.event + FROM gv$session s + WHERE event = 'cursor: pin S wait on X'; diff --git a/vg/database_space_usage.sql b/vg/database_space_usage.sql new file mode 100644 index 0000000..6a0c2ba --- /dev/null +++ b/vg/database_space_usage.sql @@ -0,0 +1,139 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Database space usage by Filesystem and FileType +* Parameters : 1 - Filesystem (% - wildchar, \ - escape char, default is '%') +* 2 - Depth Level (Default value 1) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------------------------------------ +* 27-Jan-16 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE FILESYSTEM +UNDEFINE DEPTH_LEVEL + +DEFINE FILESYSTEM="&&1" +DEFINE DEPTH_LEVEL="&&2" + +set term off +COLUMN _FILESYSTEM NEW_VALUE FILESYSTEM NOPRINT +COLUMN _DEPTH_LEVEL NEW_VALUE DEPTH_LEVEL NOPRINT + +SELECT UPPER(DECODE('&&FILESYSTEM','','%',UPPER('&&FILESYSTEM'))) "_FILESYSTEM" + ,DECODE('&&DEPTH_LEVEL','','1','&&DEPTH_LEVEL') "_DEPTH_LEVEL" +FROM DUAL +/ + + +set term on + + +PROMPT +PROMPT ******************************************************************* +PROMPT * Database Space Usage by Filesystem and FileType * +PROMPT * * +PROMPT * Input Parameters * +PROMPT * - Filesystem = '&&FILESYSTEM' +PROMPT * - Depth Level = '&&DEPTH_LEVEL' +PROMPT ******************************************************************* + +DEFINE size_label=MB +DEFINE size_divider="power(1024,2)" +--DEFINE size_label=GB +--DEFINE size_divider="power(1024,3)" +--DEFINE size_label=TB +--DEFINE size_divider="power(1024,4)" + + +DEFINE size_small_label=KB +DEFINE size_small_divider="1024" +--DEFINE size_small_label=MB +--DEFINE size_small_divider="1024/1024" + + +COLUMN Filesystem HEADING "Filesystem" FORMAT A80 +COLUMN Filesystem_Size HEADING "Total|(&&size_label)" FORMAT 999,999 +COLUMN DATAFILE_Size HEADING "Data|File|(&&size_label)" FORMAT 999,999 +COLUMN TEMPFILE_Size HEADING "Temp|File|(&&size_label)" FORMAT 999,999 +COLUMN ONLINELOG_Size HEADING "Redo|Log|(&&size_label)" FORMAT 99,999 +COLUMN STANDBYLOG_Size HEADING "Standby|Log|(&&size_label)" FORMAT 99,999 +COLUMN ARCHIVELOG_Size HEADING "Arch|Log|(&&size_label)" FORMAT 999,999 +COLUMN CONTROLFILE_Size HEADING "Ctrl|File|(&&size_small_label)" FORMAT 999,999 +COLUMN BACKUPSET_Size HEADING "Backup|Set|(&&size_label)" FORMAT 999,999 +COLUMN DATAFILECOPY_Size HEADING "Data|File|Copy|(&&size_label)" FORMAT 999,999 +COLUMN FLASHBACK_Size HEADING "Flash|Back|Log|(&&size_label)" FORMAT 999,999 +COLUMN OCRFILE_Size HEADING "OCR|(&&size_small_label)" FORMAT 999 +COLUMN AUTOBACKUP_Size HEADING "Auto|Backup|(&&size_small_label)" FORMAT 999,999 +COLUMN CONTROLFILECOPY_Size HEADING "Ctrl|File|Copy|(&&size_small_label)" FORMAT 999,999 +COLUMN PARAMFILE_Size HEADING "Param|File|(&&size_small_label)" FORMAT 999 + + +BREAK ON REPORT ON Filesystem SKIP 0 + +COMPUTE SUM LABEL 'Total' OF bytes FORMAT 9,999,999,999 ON REPORT + +COMPUTE SUM LABEL 'Total' OF Filesystem_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF DATAFILE_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF TEMPFILE_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ONLINELOG_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF STANDBYLOG_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF CONTROLFILE_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF BACKUPSET_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF DATAFILECOPY_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF CONTROLFILECOPY_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF FLASHBACK_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF OCRFILE_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_Size FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF PARAMFILE_Size FORMAT 99,999,999 ON REPORT + +SELECT ROUND(SUM(f.bytes)/&&size_divider) Filesystem_Size + , ROUND(SUM(DECODE(f.filetype, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_Size + , ROUND(SUM(DECODE(f.filetype, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_Size + , ROUND(SUM(DECODE(f.filetype, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_Size + , ROUND(SUM(DECODE(f.filetype, 'STANDBYLOG',f.bytes,0))/&&size_divider) STANDBYLOG_Size + , ROUND(SUM(DECODE(f.filetype, 'CONTROLFILE',f.bytes,0))/&&size_small_divider) CONTROLFILE_Size + , ROUND(SUM(DECODE(f.filetype, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_Size + , ROUND(SUM(DECODE(f.filetype, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_Size + , ROUND(SUM(DECODE(f.filetype, 'DATAFILECOPY',f.bytes,0))/&&size_divider) DATAFILECOPY_Size + , ROUND(SUM(DECODE(f.filetype, 'CONTROLFILECOPY',f.bytes,0))/&&size_small_divider) CONTROLFILECOPY_Size + , ROUND(SUM(DECODE(f.filetype, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_Size + , ROUND(SUM(DECODE(f.filetype, 'OCRFILE',f.bytes,0))/&&size_small_divider) OCRFILE_Size + , ROUND(SUM(DECODE(f.filetype, 'AUTOBACKUP',f.bytes,0))/&&size_small_divider) AUTOBACKUP_Size + , substr(f.file_name,1,DECODE(instr(f.file_name,'/',2,&&DEPTH_LEVEL),0,instr(f.file_name,'/',-1,1),instr(f.file_name,'/',2,&&DEPTH_LEVEL)-1) ) Filesystem +FROM ( + select 'DATAFILE' filetype, name file_name, bytes from v$datafile + UNION ALL + select 'TEMPFILE' filetype, name file_name, bytes from v$tempfile + UNION ALL + select 'CONTROLFILE' filetype, name file_name, bytes from v$tempfile + UNION ALL + select 'ONLINELOG', lf.member file_name, l.bytes from v$log l , v$logfile lf where l.group# = lf.group# + UNION ALL + select 'STANDBYLOG', lf.member file_name, l.bytes from v$standby_log l , v$logfile lf where l.group# = lf.group# + UNION ALL + select 'ARCHIVELOG', al.name file_name, al.blocks * al.block_size bytes from v$archived_log al where al.status = 'A' and al.deleted = 'NO' and al.STANDBY_DEST = 'NO' + UNION ALL + select 'DATAFILECOPY' filetype, name file_name, blocks*block_size bytes from v$datafile_copy where status = 'A' and deleted = 'NO' and file# > 0 + UNION ALL + select 'CONTROLFILECOPY' filetype, name file_name, blocks*block_size bytes from v$datafile_copy where status = 'A' and deleted = 'NO' and file# = 0 + UNION ALL + select 'BACKUPSET' filetype, handle file_name, bytes from v$backup_piece where status = 'A' and deleted ='NO' + ) f +WHERE upper(f.file_name) like UPPER('&&FILESYSTEM') +group by substr(f.file_name,1,DECODE(instr(f.file_name,'/',2,&&DEPTH_LEVEL),0,instr(f.file_name,'/',-1,1),instr(f.file_name,'/',2,&&DEPTH_LEVEL)-1) ) +ORDER BY Filesystem +; + + +@@footer diff --git a/vg/datapump_dumpfile_info.sql b/vg/datapump_dumpfile_info.sql new file mode 100644 index 0000000..7f8144b --- /dev/null +++ b/vg/datapump_dumpfile_info.sql @@ -0,0 +1,148 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display datapump dumpfile information +* Versions : 10.2 and above +* Parameter : 1 - DIRECTORY +* 2 - Datapump dumpfile +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------- +* 19-JUN-14 Vishal Gupta Created +* +*/ + +set serveroutput on + +VARIABLE directory VARCHAR2(30); +VARIABLE dumpfile VARCHAR2(300); + +set term off +BEGIN + :directory := upper('&&1'); + :dumpfile := '&&2'; +END; +/ +set term on + +DECLARE + ind NUMBER; -- Loop index + dumpfile_info KU$_DUMPFILE_INFO; + filetype NUMBER; + value VARCHAR2(2048); +BEGIN + sys.DBMS_DATAPUMP.get_dumpfile_info(filename => :dumpfile + , directory => :directory + , info_table => dumpfile_info + , filetype => filetype + ); + + dbms_output.put_line(' ' ); + dbms_output.put_line('------------------------------------------' ); + dbms_output.put_line('Datapump File Info' ); + dbms_output.put_line('------------------------------------------' ); + + dbms_output.put_line('The information table has ' || TO_CHAR(dumpfile_info.COUNT) || ' entries'); + + ind := dumpfile_info.first; + while ind is not null + loop + -- + -- The following item codes return boolean values in the form + -- of a '1' or a '0'. We'll display them as 'Yes' or 'No'. + -- + value := NVL(dumpfile_info(ind).value, 'NULL'); + IF dumpfile_info(ind).item_code IN + (sys.DBMS_DATAPUMP.KU$_DFHDR_MASTER_PRESENT, + sys.DBMS_DATAPUMP.KU$_DFHDR_DIRPATH, + sys.DBMS_DATAPUMP.KU$_DFHDR_METADATA_COMPRESSED, + sys.DBMS_DATAPUMP.KU$_DFHDR_DATA_COMPRESSED, + sys.DBMS_DATAPUMP.KU$_DFHDR_METADATA_ENCRYPTED, + sys.DBMS_DATAPUMP.KU$_DFHDR_DATA_ENCRYPTED, + sys.DBMS_DATAPUMP.KU$_DFHDR_COLUMNS_ENCRYPTED) + THEN + CASE value + WHEN '1' THEN value := 'Yes'; + WHEN '0' THEN value := 'No'; + END CASE; + END IF; + + -- + -- Display each item code with an appropriate name followed by + -- its value. + -- + CASE dumpfile_info(ind).item_code + -- + -- The following item codes have been available since Oracle Database 10g + -- Release 10.2. + -- + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_FILE_VERSION THEN DBMS_OUTPUT.PUT_LINE('Dump File Version: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_MASTER_PRESENT THEN DBMS_OUTPUT.PUT_LINE('Master Table Present: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_GUID THEN DBMS_OUTPUT.PUT_LINE('Job Guid: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_FILE_NUMBER THEN DBMS_OUTPUT.PUT_LINE('Dump File Number: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_CHARSET_ID THEN DBMS_OUTPUT.PUT_LINE('Character Set ID: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_CREATION_DATE THEN DBMS_OUTPUT.PUT_LINE('Creation Date: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_FLAGS THEN DBMS_OUTPUT.PUT_LINE('Internal Dump Flags: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_JOB_NAME THEN DBMS_OUTPUT.PUT_LINE('Job Name: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_PLATFORM THEN DBMS_OUTPUT.PUT_LINE('Platform Name: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_INSTANCE THEN DBMS_OUTPUT.PUT_LINE('Instance Name: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_LANGUAGE THEN DBMS_OUTPUT.PUT_LINE('Language Name: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_BLOCKSIZE THEN DBMS_OUTPUT.PUT_LINE('Dump File Block Size: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_DIRPATH THEN DBMS_OUTPUT.PUT_LINE('Direct Path Mode: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_METADATA_COMPRESSED THEN DBMS_OUTPUT.PUT_LINE('Metadata Compressed: ' || value); + WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_DB_VERSION THEN DBMS_OUTPUT.PUT_LINE('Database Version: ' || value); + + -- + -- The following item codes were introduced in Oracle Database 11g + -- Release 11.1 + -- +&&_IF_ORA_11gR1_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_MASTER_PIECE_COUNT THEN DBMS_OUTPUT.PUT_LINE('Master Table Piece Count: ' || value); +&&_IF_ORA_11gR1_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_MASTER_PIECE_NUMBER THEN DBMS_OUTPUT.PUT_LINE('Master Table Piece Number: ' || value); +&&_IF_ORA_11gR1_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_DATA_COMPRESSED THEN DBMS_OUTPUT.PUT_LINE('Table Data Compressed: ' || value); +&&_IF_ORA_11gR1_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_METADATA_ENCRYPTED THEN DBMS_OUTPUT.PUT_LINE('Metadata Encrypted: ' || value); +&&_IF_ORA_11gR1_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_DATA_ENCRYPTED THEN DBMS_OUTPUT.PUT_LINE('Table Data Encrypted: ' || value); +&&_IF_ORA_11gR1_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_COLUMNS_ENCRYPTED THEN DBMS_OUTPUT.PUT_LINE('TDE Columns Encrypted: ' || value); + + + -- + -- The following item codes were introduced in Oracle Database 11g + -- Release 11.2.0.4 + -- + -- + -- For the sys.DBMS_DATAPUMP.KU$_DFHDR_ENCRYPTION_MODE item code a + -- numeric value is returned. So examine that numeric value + -- and display an appropriate name value for it. + -- +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCRYPTION_MODE THEN +&&_IF_ORA_11204_OR_HIGHER CASE TO_NUMBER(value) +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCMODE_UNKNOWN THEN DBMS_OUTPUT.PUT_LINE('Encryption Mode: Unknown'); +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCMODE_NONE THEN DBMS_OUTPUT.PUT_LINE('Encryption Mode: None'); +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCMODE_PASSWORD THEN DBMS_OUTPUT.PUT_LINE('Encryption Mode: Password'); +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCMODE_DUAL THEN DBMS_OUTPUT.PUT_LINE('Encryption Mode: Dual'); +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCMODE_TRANS THEN DBMS_OUTPUT.PUT_LINE('Encryption Mode: Transparent'); +&&_IF_ORA_11204_OR_HIGHER END CASE; + +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCPWD_MODE THEN +&&_IF_ORA_11204_OR_HIGHER CASE TO_NUMBER(value) +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCPWD_MODE_UNKNOWN THEN DBMS_OUTPUT.PUT_LINE('Encryption Password Mode: Unknown'); +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCPWD_MODE_NONE THEN DBMS_OUTPUT.PUT_LINE('Encryption Password Mode: None'); +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCPWD_MODE_PASSWORD THEN DBMS_OUTPUT.PUT_LINE('Encryption Password Mode: Password'); +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCPWD_MODE_DUAL THEN DBMS_OUTPUT.PUT_LINE('Encryption Password Mode: Dual'); +&&_IF_ORA_11204_OR_HIGHER WHEN sys.DBMS_DATAPUMP.KU$_DFHDR_ENCPWD_MODE_TRANS THEN DBMS_OUTPUT.PUT_LINE('Encryption Password Mode: Transparent'); +&&_IF_ORA_11204_OR_HIGHER END CASE; + + ELSE + NULL; -- Unrecognized dump file attributes. + DBMS_OUTPUT.PUT_LINE('Item Code ' || dumpfile_info(ind).item_code || ' : ' || value); + END CASE; + ind := dumpfile_info.NEXT(ind); + end loop; +end; +/ + + +@@footer \ No newline at end of file diff --git a/vg/datapump_jobs.sql b/vg/datapump_jobs.sql new file mode 100644 index 0000000..0176769 --- /dev/null +++ b/vg/datapump_jobs.sql @@ -0,0 +1,52 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DataPump Jobs +* Compatibility : +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------- +* 23-Dec-15 Vishal Gupta Combined owner and job_name as owner.job_name in output +* 20-JUN-14 Vishal Gupta Created +* +*/ + + +PROMPT ************************************************** +PROMPT * DataPump Jobs +PROMPT ************************************************** + +COLUMN owner_name HEADING "Owner" FORMAT a20 +COLUMN job_name HEADING "JobName" FORMAT a40 +COLUMN operation HEADING "Operation" FORMAT a10 TRUNCATE +COLUMN state HEADING "State" FORMAT a15 TRUNCATE +COLUMN job_mode HEADING "Mode" FORMAT a15 TRUNCATE +COLUMN degree HEADING "Degree" FORMAT 999 +COLUMN attached_sessions HEADING "Attached|Sessions" FORMAT 9999 +COLUMN datapump_sessions HEADING "DataPump|Sessions" FORMAT 9999 +COLUMN created HEADING "Created" FORMAT a18 + +SELECT j.owner_name || '.' || j.job_name job_name + , j.operation + , j.job_mode + , j.state + , j.degree + , j.attached_sessions + , j.datapump_sessions + , TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created + FROM dba_datapump_jobs j + LEFT OUTER JOIN dba_objects o ON o.owner = j.owner_name + AND o.object_name = j.job_name + AND o.object_type = 'TABLE' +ORDER BY j.owner_name + , j.operation + , j.job_mode + , o.created desc +; + +@@footer diff --git a/vg/datapump_log.sql b/vg/datapump_log.sql new file mode 100644 index 0000000..4ae5c00 --- /dev/null +++ b/vg/datapump_log.sql @@ -0,0 +1,102 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display datapump job status +* Parameter : 1 - Job owner name +* 2 - Datapump Job Name +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 26-Mar-12 Vishal Gupta First Draft +* +* +*/ + +VARIABLE owner VARCHAR2(30); +VARIABLE job_name VARCHAR2(30); + + +BEGIN + :owner := upper('&&1'); + :job_name := upper('&&2'); + IF INSTR(:owner,'.') > 0 THEN + :job_name := SUBSTR(:owner, INSTR(:owner,'.') + 1 ) ; + :owner := SUBSTR(:owner, 1 , INSTR(:owner,'.') - 1 ) ; + END IF; +END; +/ + +set serveroutput on + +DECLARE + ind NUMBER; -- Loop index + h1 NUMBER; -- Data Pump job handle + percent_done NUMBER; -- Percentage of job complete + job_state VARCHAR2(30); -- To keep track of job state + sts ku$_Status; -- The status object returned by get_status + jd KU$_JobDesc; -- Job Description + js ku$_JobStatus; -- The job status from get_status + wsl ku$_WorkerStatusList; -- Worker status + wip ku$_logentry; +BEGIN + h1 := DBMS_DATAPUMP.attach(job_name => :job_name + , job_owner => CASE :owner WHEN '' THEN USER ELSE :owner END + ); + + dbms_datapump.get_status( handle => h1 + , mask => dbms_datapump.ku$_status_job_error + + dbms_datapump.ku$_status_job_desc + + dbms_datapump.ku$_status_job_status + + dbms_datapump.ku$_status_wip + , timeout => 0 + , job_state => job_state + , status => sts); + + js := sts.job_status; + jd := sts.job_description; + wsl := js.worker_status_list; + --wip := sts.wip; + wip := sts.ERROR; + + dbms_output.put_line(' ' ); + dbms_output.put_line('------------------------------------------' ); + dbms_output.put_line('Datapump Job Details' ); + dbms_output.put_line('------------------------------------------' ); + dbms_output.put_line('Job Owner : ' || jd.owner ); + dbms_output.put_line('Job Name : ' || jd.job_name ); + dbms_output.put_line('Operation : ' || jd.operation ); + dbms_output.put_line('Job Mode : ' || jd.job_mode ); + dbms_output.put_line('Remote Link : ' || jd.remote_link ); + dbms_output.put_line('Platform : ' || jd.platform ); + dbms_output.put_line('Exp Platform : ' || jd.exp_platform ); + dbms_output.put_line('Global Name : ' || jd.global_name ); + dbms_output.put_line('Exp Global Name : ' || jd.exp_global_name ); + dbms_output.put_line('Job Start Time : ' || TO_CHAR(jd.start_time,'DD-Mon-YY hh24:mi:ss') ); + dbms_output.put_line('Exp Start Time : ' || TO_CHAR(jd.exp_start_time,'DD-Mon-YY hh24:mi:ss') ); + dbms_output.put_line('SCN : ' || jd.scn ); + dbms_output.put_line('Max Degree : ' || jd.max_degree ); + dbms_output.put_line('Termin Reason : ' || jd.term_reason ); + dbms_output.put_line('Logfile : ' || jd.log_file ); + dbms_output.put_line('SQL File : ' || jd.sql_file ); + + dbms_output.put_line('------------------------------------------' ); + dbms_output.put_line('Datapump Job Log' ); + dbms_output.put_line('------------------------------------------' ); + + ind := wip.first; + while ind is not null + loop + dbms_output.put_line( wip(ind).loglinenumber || ' - ' || wip(ind).logtext || ' , Error Number - ' || wip(ind).errornumber ); + + ind := wip.next(ind); + end loop; + + DBMS_DATAPUMP.detach(h1); +end; +/ + +@@footer \ No newline at end of file diff --git a/vg/datapump_package.sql b/vg/datapump_package.sql new file mode 100644 index 0000000..c1a93df --- /dev/null +++ b/vg/datapump_package.sql @@ -0,0 +1,624 @@ +alter session set current_schema = DBA_OWN; + +CREATE OR REPLACE PACKAGE "DATAPUMP" +AS +/************************************************************************************************************************************ +* Purpose : PL/SQL Wrapper for Datapump Export/Import Utility +* +* +* Modification History +* Date Ver Author Remarks +* --------- --- -------------- ----------------------------------------------- +* 23-Dec-15 0.3 Vishal Gupta Following enhancements +* - Added CLOB support for schema/table/partition list parameters +* - Added METRIC input parameter +* 10-Dec-15 0.2 Vishal Gupta Added following input parameters - include_rows, remap_tablespace +* , partition_name, schema_list, table_list , partition_list +* 12-Jun-14 0.1 Vishal Gupta Created (first version) +* +************************************************************************************************************************************/ + + PROCEDURE EXPORT_IMPORT( + operation IN VARCHAR2 DEFAULT 'EXPORT' , /* Valid values EXPORT, IMPORT */ + job_mode IN VARCHAR2 DEFAULT 'TABLE' , /* Valid values TABLE, SCHEMA */ + schema_name IN VARCHAR2 DEFAULT NULL , /* Schema Name */ + table_name IN VARCHAR2 DEFAULT NULL , /* Table Name */ + partition_name IN VARCHAR2 DEFAULT NULL , /* Partition Name */ + include_metadata IN NUMBER DEFAULT 1 , /* Valid values are 0 or 1 */ + include_rows IN NUMBER DEFAULT 1 , /* Valid values are 0 or 1 */ + directory IN VARCHAR2 DEFAULT NULL , + dumpfile IN VARCHAR2 DEFAULT 'datapump.dmp' , /* If parallelism is used, then include %U to generation multiple files */ + logfile IN VARCHAR2 DEFAULT 'datapump.log' , + parallelism IN NUMBER DEFAULT NULL , + job_name IN VARCHAR2 DEFAULT NULL , + cluster_ok IN NUMBER DEFAULT 1 , /* Valid values are 0 , 1 */ + service_name IN VARCHAR2 DEFAULT NULL , + remap_table IN VARCHAR2 DEFAULT NULL , /* Comma separated list of OLD_TABLENAME:NEW_TABLENAME format mappings */ + remap_schema IN VARCHAR2 DEFAULT NULL , /* Comma separated list of SOURCE_SCHEMA:TARGET_SCHEMA format mappings */ + remap_tablespace IN VARCHAR2 DEFAULT NULL , /* Comma separated list of SOURCE_TABLESPACE:TARGET_TABLESPACE format mappings */ + filesize IN VARCHAR2 DEFAULT NULL , /* e.g 10G */ + reusefile IN NUMBER DEFAULT 0 , /* Valid values are 0 , 1 */ + skip_unusable_indexes IN NUMBER DEFAULT 1 , /* Valid values are 0 , 1 */ + compression IN VARCHAR2 DEFAULT 'NONE' , /* Valid values are NONE, DATA_ONLY, METADATA_ONLY, ALL */ + table_exists_action IN VARCHAR2 DEFAULT 'SKIP' , /* Valid values are TRUNCATE , SKIP , APPEND , REPLACE */ + estimate_only IN NUMBER DEFAULT 0 , /* Valid values are 0 or 1 */ + estimate_method IN VARCHAR2 DEFAULT NULL , /* Valid values are BLOCKS , STATISTICS */ + partition_options IN VARCHAR2 DEFAULT 'NONE' , /* Valid values are NONE , DEPARTITION, MERGE */ + subquery IN VARCHAR2 DEFAULT NULL , /* Specifies a subquery that is added to the end of the SELECT statement for the table. */ + exclude IN VARCHAR2 DEFAULT NULL , /* Comma separated list of object types to EXCLUDE */ + include IN VARCHAR2 DEFAULT NULL , /* Comma separated list of object types to INCLUDE */ + metrics IN VARCHAR2 DEFAULT 0 , /* Valid values are 0,1. With value=1, number of objects and the elapsed time are recorded in the Data Pump log file */ + version IN VARCHAR2 DEFAULT 'COMPATIBLE' /* Valid values are COMPATIBLE, LATEST */ + ); + + PROCEDURE EXPORT_IMPORT( + operation IN VARCHAR2 DEFAULT 'EXPORT' , /* Valid values EXPORT, IMPORT */ + job_mode IN VARCHAR2 DEFAULT 'TABLE' , /* Valid values TABLE, SCHEMA */ + schema_list IN CLOB DEFAULT NULL , /* Comma separated list of Schemas */ + table_list IN CLOB DEFAULT NULL , /* Comma separated list of Tables */ + partition_list IN CLOB DEFAULT NULL , /* Comma separated list of Partitions */ + include_metadata IN NUMBER DEFAULT 1 , /* Valid values are 0 or 1 */ + include_rows IN NUMBER DEFAULT 1 , /* Valid values are 0 or 1 */ + directory IN VARCHAR2 DEFAULT NULL , + dumpfile IN VARCHAR2 DEFAULT 'datapump.dmp' , /* If parallelism is used, then include %U to generation multiple files */ + logfile IN VARCHAR2 DEFAULT 'datapump.log' , + parallelism IN NUMBER DEFAULT NULL , + job_name IN VARCHAR2 DEFAULT NULL , + cluster_ok IN NUMBER DEFAULT 1 , /* Valid values are 0 , 1 */ + service_name IN VARCHAR2 DEFAULT NULL , + remap_table IN VARCHAR2 DEFAULT NULL , /* Comma separated list of OLD_TABLENAME:NEW_TABLENAME format mappings */ + remap_schema IN VARCHAR2 DEFAULT NULL , /* Comma separated list of SOURCE_SCHEMA:TARGET_SCHEMA format mappings */ + remap_tablespace IN VARCHAR2 DEFAULT NULL , /* Comma separated list of SOURCE_TABLESPACE:TARGET_TABLESPACE format mappings */ + filesize IN VARCHAR2 DEFAULT NULL , /* e.g 10G */ + reusefile IN NUMBER DEFAULT 0 , /* Valid values are 0 , 1 */ + skip_unusable_indexes IN NUMBER DEFAULT 1 , /* Valid values are 0 , 1 */ + compression IN VARCHAR2 DEFAULT 'NONE' , /* Valid values are NONE, DATA_ONLY, METADATA_ONLY, ALL */ + table_exists_action IN VARCHAR2 DEFAULT 'SKIP' , /* Valid values are TRUNCATE , SKIP , APPEND , REPLACE */ + estimate_only IN NUMBER DEFAULT 0 , /* Valid values are 0 or 1 */ + estimate_method IN VARCHAR2 DEFAULT NULL , /* Valid values are BLOCKS , STATISTICS */ + partition_options IN VARCHAR2 DEFAULT 'NONE' , /* Valid values are NONE , DEPARTITION, MERGE */ + subquery IN VARCHAR2 DEFAULT NULL , /* Specifies a subquery that is added to the end of the SELECT statement for the table. */ + exclude IN VARCHAR2 DEFAULT NULL , /* Comma separated list of object types to EXCLUDE */ + include IN VARCHAR2 DEFAULT NULL , /* Comma separated list of object types to INCLUDE */ + metrics IN VARCHAR2 DEFAULT 0 , /* Valid values are 0,1. With value=1, number of objects and the elapsed time are recorded in the Data Pump log file */ + version IN VARCHAR2 DEFAULT 'COMPATIBLE' /* Valid values are COMPATIBLE, LATEST */ + ); + +END; +/ + + +CREATE OR REPLACE PACKAGE BODY "DATAPUMP" +AS +/************************************************************************************************************************************ +* Purpose : PL/SQL Wrapper for Datapump Export/Import Utility +* +* +* Modification History +* Date Ver Author Remarks +* --------- --- -------------- ----------------------------------------------- +* 10-Dec-15 0.2 Vishal Gupta Added following input parameters - include_rows, remap_tablespace +* , partition_name, schema_list, table_list , partition_list +* 12-Jun-14 0.1 Vishal Gupta Created (first version) +* +************************************************************************************************************************************/ + + PROCEDURE EXPORT_IMPORT( + operation IN VARCHAR2 DEFAULT 'EXPORT' , /* Valid values EXPORT, IMPORT */ + job_mode IN VARCHAR2 DEFAULT 'TABLE' , /* Valid values TABLE, SCHEMA */ + schema_name IN VARCHAR2 DEFAULT NULL , /* Schema Name */ + table_name IN VARCHAR2 DEFAULT NULL , /* Table Name */ + partition_name IN VARCHAR2 DEFAULT NULL , /* Partition Name */ + include_metadata IN NUMBER DEFAULT 1 , /* Valid values are 0 or 1 */ + include_rows IN NUMBER DEFAULT 1 , /* Valid values are 0 or 1 */ + directory IN VARCHAR2 DEFAULT NULL , + dumpfile IN VARCHAR2 DEFAULT 'datapump.dmp' , /* If parallelism is used, then include %U to generation multiple files */ + logfile IN VARCHAR2 DEFAULT 'datapump.log' , + parallelism IN NUMBER DEFAULT NULL , + job_name IN VARCHAR2 DEFAULT NULL , + cluster_ok IN NUMBER DEFAULT 1 , /* Valid values are 0 , 1 */ + service_name IN VARCHAR2 DEFAULT NULL , + remap_table IN VARCHAR2 DEFAULT NULL , /* Comma separated list of OLD_TABLENAME:NEW_TABLENAME format mappings */ + remap_schema IN VARCHAR2 DEFAULT NULL , /* Comma separated list of SOURCE_SCHEMA:TARGET_SCHEMA format mappings */ + remap_tablespace IN VARCHAR2 DEFAULT NULL , /* Comma separated list of SOURCE_TABLESPACE:TARGET_TABLESPACE format mappings */ + filesize IN VARCHAR2 DEFAULT NULL , /* e.g 10G */ + reusefile IN NUMBER DEFAULT 0 , /* Valid values are 0 , 1 */ + skip_unusable_indexes IN NUMBER DEFAULT 1 , /* Valid values are 0 , 1 */ + compression IN VARCHAR2 DEFAULT 'NONE' , /* Valid values are NONE, DATA_ONLY, METADATA_ONLY, ALL */ + table_exists_action IN VARCHAR2 DEFAULT 'SKIP' , /* Valid values are TRUNCATE , SKIP , APPEND , REPLACE */ + estimate_only IN NUMBER DEFAULT 0 , /* Valid values are 0 or 1 */ + estimate_method IN VARCHAR2 DEFAULT NULL , /* Valid values are BLOCKS , STATISTICS */ + partition_options IN VARCHAR2 DEFAULT 'NONE' , /* Valid values are NONE , DEPARTITION, MERGE */ + subquery IN VARCHAR2 DEFAULT NULL , /* Specifies a subquery that is added to the end of the SELECT statement for the table. */ + exclude IN VARCHAR2 DEFAULT NULL , /* Comma separated list of object types to EXCLUDE */ + include IN VARCHAR2 DEFAULT NULL , /* Comma separated list of object types to INCLUDE */ + metrics IN VARCHAR2 DEFAULT 0 , /* Valid values are 0,1. With value=1, number of objects and the elapsed time are recorded in the Data Pump log file */ + version IN VARCHAR2 DEFAULT 'COMPATIBLE' /* Valid values are COMPATIBLE, LATEST */ + ) + AS + l_schema_list CLOB := schema_name ; + l_table_list CLOB := table_name ; + l_partition_list CLOB := partition_name ; + BEGIN + EXPORT_IMPORT (operation => operation , + job_mode => job_mode , + schema_list => l_schema_list , + table_list => l_table_list , + partition_list => l_partition_list , + include_metadata => include_metadata , + include_rows => include_rows , + directory => directory , + dumpfile => dumpfile , + logfile => logfile , + parallelism => parallelism , + job_name => job_name , + cluster_ok => cluster_ok , + service_name => service_name , + remap_table => remap_table , + remap_schema => remap_schema , + remap_tablespace => remap_tablespace , + filesize => filesize , + reusefile => reusefile , + skip_unusable_indexes => skip_unusable_indexes , + compression => compression , + table_exists_action => table_exists_action , + estimate_only => estimate_only , + estimate_method => estimate_method , + partition_options => partition_options , + subquery => subquery , + exclude => exclude , + include => include , + metrics => metrics , + version => version ); + END; + + PROCEDURE EXPORT_IMPORT( + operation IN VARCHAR2 DEFAULT 'EXPORT' , /* Valid values EXPORT, IMPORT */ + job_mode IN VARCHAR2 DEFAULT 'TABLE' , /* Valid values TABLE, SCHEMA */ + schema_list IN CLOB DEFAULT NULL , /* Comma separated list of Schemas */ + table_list IN CLOB DEFAULT NULL , /* Comma separated list of Tables */ + partition_list IN CLOB DEFAULT NULL , /* Comma separated list of Partitions */ + include_metadata IN NUMBER DEFAULT 1 , /* Valid values are 0 or 1 */ + include_rows IN NUMBER DEFAULT 1 , /* Valid values are 0 or 1 */ + directory IN VARCHAR2 DEFAULT NULL , + dumpfile IN VARCHAR2 DEFAULT 'datapump.dmp' , /* If parallelism is used, then include %U to generation multiple files */ + logfile IN VARCHAR2 DEFAULT 'datapump.log' , + parallelism IN NUMBER DEFAULT NULL , + job_name IN VARCHAR2 DEFAULT NULL , + cluster_ok IN NUMBER DEFAULT 1 , /* Valid values are 0 , 1 */ + service_name IN VARCHAR2 DEFAULT NULL , + remap_table IN VARCHAR2 DEFAULT NULL , /* Comma separated list of OLD_TABLENAME:NEW_TABLENAME format mappings */ + remap_schema IN VARCHAR2 DEFAULT NULL , /* Comma separated list of SOURCE_SCHEMA:TARGET_SCHEMA format mappings */ + remap_tablespace IN VARCHAR2 DEFAULT NULL , /* Comma separated list of SOURCE_TABLESPACE:TARGET_TABLESPACE format mappings */ + filesize IN VARCHAR2 DEFAULT NULL , /* e.g 10G */ + reusefile IN NUMBER DEFAULT 0 , /* Valid values are 0 , 1 */ + skip_unusable_indexes IN NUMBER DEFAULT 1 , /* Valid values are 0 , 1 */ + compression IN VARCHAR2 DEFAULT 'NONE' , /* Valid values are NONE, DATA_ONLY, METADATA_ONLY, ALL */ + table_exists_action IN VARCHAR2 DEFAULT 'SKIP' , /* Valid values are TRUNCATE , SKIP , APPEND , REPLACE */ + estimate_only IN NUMBER DEFAULT 0 , /* Valid values are 0 or 1 */ + estimate_method IN VARCHAR2 DEFAULT NULL , /* Valid values are BLOCKS , STATISTICS */ + partition_options IN VARCHAR2 DEFAULT 'NONE' , /* Valid values are NONE , DEPARTITION, MERGE */ + subquery IN VARCHAR2 DEFAULT NULL , /* Specifies a subquery that is added to the end of the SELECT statement for the table. */ + exclude IN VARCHAR2 DEFAULT NULL , /* Comma separated list of object types to EXCLUDE */ + include IN VARCHAR2 DEFAULT NULL , /* Comma separated list of object types to INCLUDE */ + metrics IN VARCHAR2 DEFAULT 0 , /* Valid values are 0,1. With value=1, number of objects and the elapsed time are recorded in the Data Pump log file */ + version IN VARCHAR2 DEFAULT 'COMPATIBLE' /* Valid values are COMPATIBLE, LATEST */ + ) + AS + ind NUMBER; -- Loop index + h1 NUMBER; -- Data Pump job handle + percent_done NUMBER; -- Percentage of job complete + job_state VARCHAR2(30); -- To keep track of job state + le ku$_LogEntry; -- For WIP and error messages + js ku$_JobStatus; -- The job status from get_status + jd ku$_JobDesc; -- The job description from get_status + sts ku$_Status; -- The status object returned by get_status + l_remap_table_list VARCHAR2(4000); + l_remap_schema_list VARCHAR2(4000); + l_remap_tablespace_list VARCHAR2(4000); + l_table_list CLOB; + l_schema_list CLOB; + l_partition_list CLOB; + BEGIN + dbms_output.enable(1000000); + + -- Create a (user-named) Data Pump job . + dbms_output.put_line('Creating datapump ' || operation || ' job ...'); + h1 := DBMS_DATAPUMP.OPEN(operation => operation + , job_mode => UPPER(job_mode) + , remote_link => NULL + , job_name => job_name + , version => version + ); + + -- Add logfile + dbms_output.put_line('Setting logfile as ' || logfile ); + DBMS_DATAPUMP.ADD_FILE(handle => h1 + , filename => logfile + , directory => directory + , filesize => NULL + , filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE + , reusefile => NULL + ); + + dbms_datapump.log_entry(h1,'Datapump Job started using PL/SQL Wrapper for datapump api.'); + dbms_datapump.log_entry(h1,'Passed/Defaulted input parameter values ...'); + dbms_datapump.log_entry(h1,' OPERATION = ' || NVL(operation,'NULL') ); + dbms_datapump.log_entry(h1,' JOB_MODE = ' || NVL(job_mode,'NULL') ); + --dbms_datapump.log_entry(h1,' SCHEMA_LIST = ' || NVL(schema_list,'NULL') ); + --dbms_datapump.log_entry(h1,' TABLE_LIST = ' || NVL(table_list,'NULL') ); + --dbms_datapump.log_entry(h1,' PARTITION_LIST = ' || NVL(partition_list,'NULL') ); + dbms_datapump.log_entry(h1,' INCLUDE_METADATA = ' || NVL(TO_CHAR(include_metadata),'NULL') ); + dbms_datapump.log_entry(h1,' INCLUDE_ROWS = ' || NVL(TO_CHAR(include_rows),'NULL') ); + dbms_datapump.log_entry(h1,' DIRECTORY = ' || NVL(directory,'NULL') ); + dbms_datapump.log_entry(h1,' DUMPFILE = ' || NVL(dumpfile,'NULL') ); + dbms_datapump.log_entry(h1,' LOGFILE = ' || NVL(logfile,'NULL') ); + dbms_datapump.log_entry(h1,' PARALLELISM = ' || NVL(TO_CHAR(parallelism),'NULL') ); + dbms_datapump.log_entry(h1,' JOB_NAME = ' || NVL(job_name,'NULL') ); + dbms_datapump.log_entry(h1,' CLUSTER_OK = ' || NVL(TO_CHAR(cluster_ok),'NULL') ); + dbms_datapump.log_entry(h1,' SERVICE_NAME = ' || NVL(service_name,'NULL') ); + dbms_datapump.log_entry(h1,' REMAP_TABLE = ' || NVL(remap_table,'NULL') ); + dbms_datapump.log_entry(h1,' REMAP_SCHEMA = ' || NVL(remap_schema,'NULL') ); + dbms_datapump.log_entry(h1,' REMAP_TABLESPACE = ' || NVL(remap_tablespace,'NULL') ); + dbms_datapump.log_entry(h1,' FILESIZE = ' || NVL(filesize,'NULL') ); + dbms_datapump.log_entry(h1,' REUSEFILE = ' || NVL(TO_CHAR(reusefile),'NULL') ); + dbms_datapump.log_entry(h1,' SKIP_UNUSABLE_INDEXES = ' || NVL(TO_CHAR(skip_unusable_indexes),'NULL') ); + dbms_datapump.log_entry(h1,' COMPRESSION = ' || NVL(compression,'NULL') ); + dbms_datapump.log_entry(h1,' TABLE_EXISTS_ACTION = ' || NVL(table_exists_action,'NULL') ); + dbms_datapump.log_entry(h1,' ESTIMATE_ONLY = ' || NVL(TO_CHAR(estimate_only),'NULL') ); + dbms_datapump.log_entry(h1,' ESTIMATE_METHOD = ' || NVL(estimate_method,'NULL') ); + dbms_datapump.log_entry(h1,' PARTITION_OPTIONS = ' || NVL(partition_options,'NULL') ); + dbms_datapump.log_entry(h1,' SUBQUERY = ' || NVL(subquery,'NULL') ); + dbms_datapump.log_entry(h1,' EXCLUDE = ' || NVL(exclude,'NULL') ); + dbms_datapump.log_entry(h1,' INCLUDE = ' || NVL(include,'NULL') ); + dbms_datapump.log_entry(h1,' METRICS = ' || NVL(TO_CHAR(metrics),'NULL') ); + dbms_datapump.log_entry(h1,' VERSION = ' || NVL(version,'NULL') ); + + + + -- Specify parameters + + IF operation = 'EXPORT' THEN + dbms_datapump.log_entry(h1,'Setting export options...'); + + dbms_datapump.log_entry(h1,'Setting ESTIMATE_ONLY = ' || NVL(TO_CHAR(estimate_only),'NULL') ); + DBMS_DATAPUMP.SET_PARAMETER(handle => h1 , name => 'ESTIMATE_ONLY' , value => estimate_only ); + + IF estimate_method IS NOT NULL + THEN + dbms_datapump.log_entry(h1,'Settting ESTIMATE_METHOD = ' || NVL(estimate_method,'NULL') ); + DBMS_DATAPUMP.SET_PARAMETER(handle => h1 , name => 'ESTIMATE' , value => estimate_method ); + END IF; + + dbms_datapump.log_entry(h1,'Setting COMPRESSION as ' || NVL(compression,'NULL') ); + DBMS_DATAPUMP.SET_PARAMETER(handle => h1 , name => 'COMPRESSION' , value => compression ); + + + END IF; + + + IF operation = 'IMPORT' THEN + dbms_datapump.log_entry(h1,'Setting import options '); + + dbms_datapump.log_entry(h1,' TABLE_EXISTS_ACTION = ' || NVL(table_exists_action,'NULL') ); + DBMS_DATAPUMP.SET_PARAMETER(handle => h1 , name => 'TABLE_EXISTS_ACTION' , value => table_exists_action ); + + dbms_datapump.log_entry(h1,' PARTITION_OPTIONS = ' || NVL(partition_options,'NULL') ); + DBMS_DATAPUMP.SET_PARAMETER(handle => h1 , name => 'PARTITION_OPTIONS' , value => partition_options ); + + dbms_datapump.log_entry(h1,' SKIP_UNUSABLE_INDEXES = ' || NVL(TO_CHAR(skip_unusable_indexes),'NULL') ); + DBMS_DATAPUMP.SET_PARAMETER(handle => h1 , name => 'SKIP_UNUSABLE_INDEXES' , value => skip_unusable_indexes ); + + + END IF; + + + -- Enable/Disable Metrics + IF metrics IS NOT NULL THEN + dbms_datapump.log_entry(h1,' METRICS = ' || NVL(TO_CHAR(metrics),'NULL') ); + dbms_output.put_line('metric=' || metrics); + DBMS_DATAPUMP.SET_PARAMETER(handle => h1 , name => 'METRICS' , value => 1); + END IF; + + + -- Include metadata + IF include_metadata IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting INCLUDE_METADATA = ' || NVL(TO_CHAR(include_metadata),'NULL') ); + DBMS_DATAPUMP.SET_PARAMETER(handle => h1 + , name => 'INCLUDE_METADATA' + , value => include_metadata + ); + END IF; + + -- Include Rows + IF include_rows IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting INCLUDE_ROWS = ' || TO_CHAR(include_rows) ); + DBMS_DATAPUMP.DATA_FILTER( handle => h1 + , name => 'INCLUDE_ROWS' + , value => include_rows + ); + END IF; + + + -- Specify parallelism + dbms_datapump.log_entry(h1,'Setting parallelism to ' || NVL(TO_CHAR(parallelism),'NULL') ); + DBMS_DATAPUMP.SET_PARALLEL(handle => h1 , degree => parallelism); + + -- Specify SCHEMA_LIST + IF schema_list IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting SCHEMA_LIST = ' || schema_list); + l_schema_list := ''; + FOR i IN (SELECT regexp_substr(schema_list, '[^,]+', 1, LEVEL) token + FROM dual + CONNECT BY instr(schema_list, ',', 1, LEVEL - 1) > 0 + ) + LOOP + l_schema_list := l_schema_list || '''' || i.token || ''','; + END LOOP; + l_schema_list := UPPER(RTRIM(l_schema_list,',')); + DBMS_DATAPUMP.METADATA_FILTER(handle => h1 + , name => 'SCHEMA_LIST' + , value => l_schema_list + ); + + END IF; + + -- Specify TABLE_LIST + IF table_list IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting TABLE_LIST ' ); + l_table_list := ''; + FOR i IN (SELECT regexp_substr(table_list, '[^,]+', 1, LEVEL) token + FROM dual + CONNECT BY instr(table_list, ',', 1, LEVEL - 1) > 0 + ) + LOOP + dbms_datapump.log_entry(h1,' ' || i.token); + l_table_list := l_table_list || '''' || i.token || ''','; + END LOOP; + l_table_list := UPPER(RTRIM(l_table_list,',')); +--/* + DBMS_DATAPUMP.METADATA_FILTER(handle => h1 + , name => 'NAME_LIST' + , value => l_table_list + ); +--*/ + + END IF; + + + -- Specify Partition List + IF partition_list IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting PARTITION_LIST ' ); + l_partition_list := ''; + FOR i IN (SELECT regexp_substr(partition_list, '[^,]+', 1, LEVEL) token + FROM dual + CONNECT BY instr(partition_list, ',', 1, LEVEL - 1) > 0 + ) + LOOP + dbms_datapump.log_entry(h1,' ' || i.token); + l_partition_list := l_partition_list || '''' || i.token || ''','; + END LOOP; + l_partition_list := UPPER(RTRIM(l_partition_list,',')); + DBMS_DATAPUMP.DATA_FILTER(handle => h1 + , name => 'PARTITION_LIST' + , value => l_partition_list + ); + END IF; + + -- Specify SUBQuery + IF subquery IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting SUBQUERY = ' || subquery ); + DBMS_DATAPUMP.DATA_FILTER( handle => h1 + , name => 'SUBQUERY' + , value => subquery + ); + END IF; + + + -- Specify EXCLUDE + IF exclude IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting EXCLUDE = ' || exclude ); + FOR i IN (SELECT regexp_substr(exclude, '[^,]+', 1, LEVEL) token + FROM dual + CONNECT BY instr(exclude, ',', 1, LEVEL - 1) > 0 + ) + LOOP + DBMS_DATAPUMP.METADATA_FILTER(handle => h1 + , name => 'EXCLUDE_PATH_EXPR' + , value => 'LIKE UPPER(''%' || i.token || '%'')' + ); + END LOOP; + END IF; + + -- Specify INCLUDE + IF include IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting INCLUDE = ' || include ); + FOR i IN (SELECT regexp_substr(include, '[^,]+', 1, LEVEL) token + FROM dual + CONNECT BY instr(include, ',', 1, LEVEL - 1) > 0 + ) + LOOP + DBMS_DATAPUMP.METADATA_FILTER(handle => h1 + , name => 'INCLUDE_PATH_EXPR' + , value => 'LIKE UPPER(''%' || i.token || '%'')' + ); + END LOOP; + END IF; + + + + -- Remap schema + IF operation = 'IMPORT' THEN + IF remap_schema IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting REMAP_SCHEMA as ' || remap_schema ); + FOR i IN (SELECT regexp_substr(remap_schema, '[^,]+', 1, LEVEL) token + FROM dual + CONNECT BY instr(remap_schema, ',', 1, LEVEL - 1) > 0 + ) + LOOP + DBMS_DATAPUMP.METADATA_REMAP( handle => h1 + , name => 'REMAP_SCHEMA' + , old_value => SUBSTR(i.token,1,INSTR(i.token,':')-1) + , value => SUBSTR(i.token,INSTR(i.token,':')+1) + ); + END LOOP; + END IF; + END IF; + + -- Remap table + IF operation = 'IMPORT' THEN + IF remap_table IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting REMAP_TABLE as ' || remap_table ); + FOR i IN (SELECT regexp_substr(remap_table, '[^,]+', 1, LEVEL) token + FROM dual + CONNECT BY instr(remap_table, ',', 1, LEVEL - 1) > 0 + ) + LOOP + DBMS_DATAPUMP.METADATA_REMAP( handle => h1 + , name => 'REMAP_TABLE' + , old_value => SUBSTR(i.token,1,INSTR(i.token,':')-1) + , value => SUBSTR(i.token,INSTR(i.token,':')+1) + ); + END LOOP; + END IF; + END IF; + + -- Remap Tablespace + IF operation = 'IMPORT' THEN + IF remap_tablespace IS NOT NULL THEN + dbms_datapump.log_entry(h1,'Setting REMAP_TABLESPACE as ' || remap_tablespace ); + FOR i IN (SELECT regexp_substr(remap_tablespace, '[^,]+', 1, LEVEL) token + FROM dual + CONNECT BY instr(remap_tablespace, ',', 1, LEVEL - 1) > 0 + ) + LOOP + DBMS_DATAPUMP.METADATA_REMAP( handle => h1 + , name => 'REMAP_TABLESPACE' + , old_value => SUBSTR(i.token,1,INSTR(i.token,':')-1) + , value => SUBSTR(i.token,INSTR(i.token,':')+1) + ); + END LOOP; + END IF; + END IF; + + -- Specify a single dump file for the job (using the handle just returned) + -- and a directory object, which must already be defined and accessible + -- to the user running this procedure. + IF operation = 'EXPORT' THEN + dbms_datapump.log_entry(h1,'Setting dumpfile as ' || dumpfile ); + dbms_datapump.log_entry(h1,'Setting maximum filesize as ' || filesize ); + dbms_datapump.log_entry(h1,'Setting Reuse dumpfile as ' || NVL(TO_CHAR(reusefile),'NULL') ); + DBMS_DATAPUMP.ADD_FILE(handle => h1 + , filename => dumpfile + , directory => directory + , filesize => filesize + , filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_DUMP_FILE + , reusefile => reusefile + ); + END IF; + + -- Add dumpfile + IF operation = 'IMPORT' THEN + dbms_datapump.log_entry(h1,'Setting dumpfile as ' || dumpfile ); + DBMS_DATAPUMP.ADD_FILE(handle => h1 + , filename => dumpfile + , directory => directory + , filesize => NULL + , filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_DUMP_FILE + , reusefile => NULL + ); + END IF; + + -- Start the job. An exception will be generated if something is not set up + -- properly. + dbms_datapump.log_entry(h1,'Starting ' || operation || ' job at ' || TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS') ); + DBMS_DATAPUMP.START_JOB(handle => h1 + , cluster_ok => cluster_ok + , service_name => service_name + ); + + -- The export job should now be running. In the following loop, the job + -- is monitored until it completes. In the meantime, progress information is + -- displayed. + + percent_done := 0; + job_state := 'UNDEFINED'; + WHILE (job_state != 'COMPLETED') and (job_state != 'STOPPED') + LOOP + dbms_datapump.get_status( handle => h1 + , mask => dbms_datapump.ku$_status_job_error + + dbms_datapump.ku$_status_job_status + + dbms_datapump.ku$_status_wip + , timeout => -1 + , job_state => job_state + , status => sts + ); + + js := sts.job_status; + + -- If the percentage done changed, display the new value. + + --if js.percent_done != percent_done + --then + -- dbms_output.put_line('*** Job percent done = ' ||to_char(js.percent_done)); + -- percent_done := js.percent_done; + --end if; + + -- If any work-in-progress (WIP) or error messages were received for the job, + -- display them. + + if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0) + then + le := sts.wip; + else + if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0) + then + le := sts.error; + else + le := null; + end if; + end if; + if le is not null + then + ind := le.FIRST; + while ind is not null + loop + dbms_output.put_line(le(ind).LogText); + ind := le.NEXT(ind); + end loop; + end if; + END LOOP; + + -- Indicate that the job finished and detach from it. + dbms_output.put_line('Job has completed. Final job state = ' || job_state); + dbms_datapump.detach(h1); + + EXCEPTION + WHEN others THEN +-- dbms_output.put_line(DBMS_UTILITY.FORMAT_ERROR_STACK() ); +-- dbms_output.put_line(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); +-- dbms_output.put_line(DBMS_UTILITY.FORMAT_CALL_STACK () ); + dbms_datapump.get_status( handle => h1 + , mask => dbms_datapump.ku$_status_job_error + + dbms_datapump.ku$_status_job_status + + dbms_datapump.ku$_status_wip + , timeout => -1 + , job_state => job_state + , status => sts + ); + IF (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0) + THEN + le := sts.error; + ind := le.FIRST; + while ind is not null + loop + dbms_output.put_line(le(ind).LogText); + ind := le.NEXT(ind); + end loop; + END IF; + DBMS_DATAPUMP.STOP_JOB( handle=> h1, immediate => 1 , keep_master => 0 , delay => 0 ); + RAISE; + END; + +END; +/ diff --git a/vg/datapump_sessions.sql b/vg/datapump_sessions.sql new file mode 100644 index 0000000..9bc33bd --- /dev/null +++ b/vg/datapump_sessions.sql @@ -0,0 +1,58 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display datapump sessions +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 24-Mar-12 Vishal Gupta First Draft +*/ + +COLUMN owner_name HEADING "OwnerName" FORMAT a15 +COLUMN job_name HEADING "JobName" FORMAT a30 +COLUMN job_mode HEADING "JobMode" FORMAT a9 +COLUMN operation HEADING "Oper" FORMAT a6 +COLUMN workers HEADING "Job|Workers" FORMAT 9999 +COLUMN session_type HEADING "SessionType" FORMAT a15 +COLUMN pct_done HEADING "%Done" FORMAT 999.99 +COLUMN sid HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN status HEADING "Session|Status" FORMAT a8 +COLUMN last_call_et HEADING "LastCall|Active|(sec)" FORMAT 99,999 +COLUMN logon_time HEADING "LogonTime" FORMAT a18 +COLUMN username HEADING "DBUser" FORMAT a15 +COLUMN osuser HEADING "OSUser" FORMAT a15 TRUNC +COLUMN machine HEADING "Machine" FORMAT a20 TRUNC + +select d.owner_name || '.' || d.job_name job_name + , j.job_mode + , j.operation + , j.workers + , d.session_type || ' ' || DECODE(d.session_type,'WORKER',SUBSTR(s.program,INSTR(s.program,'(')+3,2),'') session_type + , ROUND(l.sofar / l.totalwork *100, 2) pct_done + , s.sid + , s.inst_id + , p.spid + , s.status + , s.last_call_et + , to_char(s.logon_time,'DD-MON-YY HH24:MI:SS') logon_time + , s.username + , s.osuser + , s.machine +from dba_datapump_sessions d + JOIN gv$datapump_job j ON j.inst_id = d.inst_id AND j.owner_name = d.owner_name AND j.job_name = d.job_name + LEFT OUTER JOIN gv$session s ON s.inst_id = d.inst_id AND s.saddr = d.saddr + LEFT OUTER JOIN gv$process p ON s.inst_id = p.inst_id AND s.paddr = p.addr + LEFT OUTER JOIN gv$session_longops l ON l.inst_id = s.inst_id AND l.sid = s.sid AND l.time_remaining > 0 +ORDER BY 1 + , s.logon_time + , d.session_type || ' ' || DECODE(d.session_type,'WORKER',SUBSTR(s.program,INSTR(s.program,'(')+3,2),'') +; + +@@footer + diff --git a/vg/datapump_status.sql b/vg/datapump_status.sql new file mode 100644 index 0000000..5af2290 --- /dev/null +++ b/vg/datapump_status.sql @@ -0,0 +1,222 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display datapump job status +* Parameter : 1 - Job owner name , this could also be passed as OWNER.JOB_NAME +* 2 - Datapump Job Name +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------------------ +* 12-FEB-16 Vishal Gupta Added conditional display of days to duration field +* 23-SEP-14 Vishal Gupta Added logic to auto-calculate max LPADING length for various outputs +* 14-FEB-13 Vishal Gupta Added more details and some formating +* 17-Dec-12 Vishal Gupta Modified to accept job owner and name separated by comma +* 26-Mar-12 Vishal Gupta Created +* +* +*/ + +set serveroutput on + +VARIABLE owner VARCHAR2(30); +VARIABLE job_name VARCHAR2(30); + +set term off +BEGIN + :owner := upper('&&1'); + :job_name := upper('&&2'); + IF INSTR(:owner,'.') > 0 THEN + :job_name := SUBSTR(:owner, INSTR(:owner,'.') + 1 ) ; + :owner := SUBSTR(:owner, 1 , INSTR(:owner,'.') - 1 ) ; + END IF; +END; +/ +set term on + +DECLARE + ind NUMBER; -- Loop index + h1 NUMBER; -- Data Pump job handle + percent_done NUMBER; -- Percentage of job complete + job_state VARCHAR2(30); -- To keep track of job state + sts ku$_Status; -- The status object returned by get_status + wip ku$_LogEntry; -- WIP + jd ku$_JobDesc; -- Job Description + js ku$_JobStatus; -- The job status from get_status + wsl ku$_WorkerStatusList; -- Worker status + error ku$_LogEntry; + + max_completed_objects_length NUMBER; + max_completed_rows_length NUMBER; + max_completed_bytes_length NUMBER; + + col_pad_len NUMBER := 50; +BEGIN + h1 := DBMS_DATAPUMP.attach(job_name => :job_name + , job_owner => CASE :owner WHEN '' THEN USER ELSE :owner END + ); + + /* Fetch Datapump Job Status */ + dbms_datapump.get_status( handle => h1 + , mask => dbms_datapump.ku$_status_wip + + dbms_datapump.ku$_status_job_desc + + dbms_datapump.ku$_status_job_status + + dbms_datapump.ku$_status_job_error + , timeout => 0 + , job_state => job_state + , status => sts); + + wip := sts.wip; + jd := sts.job_description; + js := sts.job_status; + wsl := js.worker_status_list; + error := sts.error; + + + dbms_output.put_line(' ' ); + dbms_output.put_line('------------------------------------------' ); + dbms_output.put_line('Datapump Job Details' ); + dbms_output.put_line('------------------------------------------' ); + dbms_output.put_line(RPAD('Job Owner : ' || jd.owner,col_pad_len) || RPAD('Remote Link : ' || jd.remote_link,col_pad_len) ); + dbms_output.put_line(RPAD('Job Name : ' || jd.job_name,col_pad_len) || RPAD('Exp Start Time : ' || TO_CHAR(jd.exp_start_time,'DD-Mon-YY hh24:mi:ss'),col_pad_len) ); + dbms_output.put_line(RPAD('Operation : ' || jd.operation,col_pad_len) || RPAD('Exp Global Name : ' || jd.exp_global_name,col_pad_len) ); + dbms_output.put_line(RPAD('Job Mode : ' || jd.job_mode,col_pad_len) || RPAD('Exp Platform : ' || jd.exp_platform,col_pad_len) ); + dbms_output.put_line(RPAD('Max Degree : ' || jd.max_degree,col_pad_len) || RPAD('Exp DB Version : ' || jd.exp_db_version,col_pad_len) ); + dbms_output.put_line(RPAD('Instance : ' || jd.instance,col_pad_len) || RPAD('Creator Privs : ' || jd.creator_privs,col_pad_len) ); + dbms_output.put_line(RPAD('Global Name : ' || jd.global_name,col_pad_len) || RPAD('SCN : ' || jd.scn,col_pad_len) ); + dbms_output.put_line(RPAD('Platform : ' || jd.platform,col_pad_len) ); + dbms_output.put_line(RPAD('DB Version : ' || jd.db_version,col_pad_len) ); + dbms_output.put_line(RPAD('Job StartTime : ' || TO_CHAR(jd.start_time,'DD-Mon-YY hh24:mi:ss'),col_pad_len) ); + dbms_output.put_line(RPAD('Duration : ' || CASE WHEN FLOOR(sysdate - jd.start_time) > 0 THEN FLOOR(sysdate - jd.start_time) || 'd ' ELSE '' END + || FLOOR(MOD((sysdate - jd.start_time) , 1) * 24 ) || 'h ' + || FLOOR(MOD((sysdate - jd.start_time) * 24 , 1) * 60 ) || 'm ' + || FLOOR(MOD((sysdate - jd.start_time) * 24 * 60 , 1) * 60 ) || 's ' + ,col_pad_len) ); + dbms_output.put_line(RPAD('Termin Reason : ' || jd.term_reason,col_pad_len) ); + dbms_output.put_line('Logfile : ' || jd.log_file ); + dbms_output.put_line('SQL File : ' || jd.sql_file ); + + ind := jd.params.first; + while ind is not null + loop + dbms_output.put_line('Parameter ' || ind || ' :' + || ' Op - ' || jd.params(ind).param_op + || ', ' || RPAD(jd.params(ind).param_name,25) + || ' = ' || NVL(jd.params(ind).param_value_t ,jd.params(ind).param_value_n) + ); + ind := jd.params.next(ind); + end loop; + + dbms_output.put_line('------------------------------------------' ); + dbms_output.put_line('Datapump Job Status' ); + dbms_output.put_line('------------------------------------------' ); + dbms_output.put_line(RPAD('State : ' || js.state,col_pad_len ) || RPAD('Total Bytes : ' || to_char(js.total_bytes,'999,999,999,999,999'),col_pad_len ) ); + dbms_output.put_line(RPAD('Degree : ' || js.degree,col_pad_len ) || RPAD('Bytes Processed : ' || to_char(js.bytes_processed,'999,999,999,999,999'),col_pad_len ) ); + dbms_output.put_line(RPAD('% Done : ' || js.percent_done || ' % <----- *****',col_pad_len ) || RPAD('Restart Count : ' || js.restart_count,col_pad_len ) ); + dbms_output.put_line(RPAD('Phase : ' || js.phase,col_pad_len ) || RPAD('Error Count : ' || js.error_count,col_pad_len )); + + ind := js.files.first; + dbms_output.put_line('DumpFiles : ' || SUBSTR(js.files(ind).file_name,1,CASE INSTR(js.files(ind).file_name,'/',-1) + WHEN 0 THEN INSTR(js.files(ind).file_name,'\',-1) - 1 + ELSE INSTR(js.files(ind).file_name,'/',-1) -1 + END + ) + ); + while ind is not null + loop + IF jd.operation = 'EXPORT' THEN + dbms_output.put_line('. : ' + || SUBSTR(js.files(ind).file_name,INSTR(js.files(ind).file_name,'/',-1)+1) + || ' ( Size - ' || LPAD(to_char(ROUND(js.files(ind).file_bytes_written/1024/1024),'999,999,999'),13) || ' MB )' + ); + END IF; + IF jd.operation = 'IMPORT' THEN + -- Odd file number + IF MOD(ind,3) = 1 THEN + dbms_output.put('. : ' || SUBSTR(js.files(ind).file_name,INSTR(js.files(ind).file_name,'/',-1)+1) ); + END IF; + IF MOD(ind,3) = 2 THEN + dbms_output.put(', ' || SUBSTR(js.files(ind).file_name,INSTR(js.files(ind).file_name,'/',-1)+1) ); + END IF; + IF MOD(ind,3) = 0 THEN + dbms_output.put_line(', ' ||SUBSTR(js.files(ind).file_name,INSTR(js.files(ind).file_name,'/',-1)+1) ); + END IF; + END IF; + ind := js.files.next(ind); + end loop; + + dbms_output.put_line(' '); + dbms_output.put_line('------------------------------------------' ); + dbms_output.put_line('Datapump Worker Status' ); + dbms_output.put_line('------------------------------------------' ); + + max_completed_objects_length := 1; + max_completed_rows_length := 1; + max_completed_bytes_length := 1; + ind := wsl.first; + while ind is not null + loop + IF LENGTH(wsl(ind).completed_objects) > max_completed_objects_length THEN + max_completed_objects_length := LENGTH(wsl(ind).completed_objects); + END IF; + IF LENGTH(ROUND(wsl(ind).completed_rows/1000)) > max_completed_rows_length THEN + max_completed_rows_length := LENGTH(ROUND(wsl(ind).completed_rows/1000)); + END IF; + IF LENGTH(ROUND(wsl(ind).completed_bytes/1024/1024)) > max_completed_bytes_length THEN + max_completed_bytes_length := LENGTH(ROUND(wsl(ind).completed_bytes/1024/1024)); + END IF; + ind := wsl.next(ind); + end loop; + + ind := wsl.first; + while ind is not null + loop + + /* + percent_done := 0; + BEGIN + SELECT * + into percent_done + FROM (select ROUND(NVL(l.sofar / l.totalwork,0) *100, 2) pct_done + from dba_datapump_sessions d + LEFT OUTER JOIN gv$session s ON s.inst_id = d.inst_id AND s.saddr = d.saddr + LEFT OUTER JOIN gv$process p ON s.inst_id = p.inst_id AND s.paddr = p.addr + LEFT OUTER JOIN gv$session_longops l ON l.inst_id = s.inst_id AND l.sid = s.sid + WHERE d.owner_name = jd.owner + AND d.job_name = jd.job_name + AND d.session_type = 'WORKER' + AND s.program like '%' || TRIM(wsl(ind).process_name) || '%' + ORDER BY l.start_Time desc) + WHERE ROWNUM=1 + ; + EXCEPTION + WHEN Others THEN + NULL; + END; + */ + dbms_output.put_line('Worker ' || LPAD(wsl(ind).worker_number,2) || ' :' + || ' ' || wsl(ind).process_name -- || '(Inst:' || wsl(ind).instance_id || ')' + || ' , ' || LPAD(wsl(ind).percent_done,2) || '% Done' + --|| ' ,' || LPAD(percent_done,6) || '% Done' + || ' , Deg ' || wsl(ind).degree + || ' , ' || RPAD(wsl(ind).state,9) + || ' , Completed Objects ' || LPAD(wsl(ind).completed_objects,max_completed_objects_length) || '/' || TRIM(wsl(ind).total_objects) + || ' , ' || LPAD(TRIM(to_char(wsl(ind).completed_rows/1000,'999999999')) , max_completed_rows_length) || ' K rows' + || ' , Size ' || LPAD(TRIM(to_char(wsl(ind).completed_bytes/1024/1024,'99999999')), max_completed_bytes_length) || ' MB' + || ' , ' || wsl(ind).schema || '.' || wsl(ind).name + || CASE WHEN wsl(ind).partition IS NULL THEN '' ELSE '(' || wsl(ind).partition || ')' END + || ' , ' || wsl(ind).object_type + ); + ind := wsl.next(ind); + end loop; + DBMS_DATAPUMP.detach(h1); +end; +/ + +UNDEFINE 1 +UNDEFINE 2 + +@@footer \ No newline at end of file diff --git a/vg/datapump_testcase.sql b/vg/datapump_testcase.sql new file mode 100644 index 0000000..89b7d17 --- /dev/null +++ b/vg/datapump_testcase.sql @@ -0,0 +1,256 @@ +drop table TEST_TABLE purge; + +create table TEST_TABLE (col1 date); +grant all on TEST_TABLE TO PUBLIC; + +insert into TEST_TABLE values (sysdate); +BEGIN + for i in 1 .. 10 + LOOP + insert into TEST_TABLE select * from TEST_TABLE; + END LOOP; + commit; +END; +/ + + +SELECT count(1) FROM TEST_TABLE; +select user from dual; + + +set serveroutput on +BEGIN + dba_own.datapump.export_import(operation => 'EXPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'vg_test_table.%U.dmp' + , logfile => 'vg_test_table.exp.log' + , parallelism => 8 + , schema_name => 'DBAVGUPTA' + , table_name => 'TEST_TABLE' + , filesize => '10G' + , reusefile => 1 + , compression => 'NONE' + , include_metadata => 0 + , estimate_method => 'BLOCKS' + ); +END; +/ + +TRUNCATE TABLE TEST_TABLE; + + +BEGIN + dba_own.datapump.export_import(operation => 'IMPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'vg_test_table.%U.dmp' + , logfile => 'vg_test_table.imp.log' + , parallelism => 8 + , schema_name => 'DBAVGUPTA' + , table_name => 'TEST_TABLE' + , table_exists_action => 'TRUNCATE' + , skip_unusable_indexes => 1 + ); +END; +/ + + +SELECT count(1) FROM TEST_TABLE; + + + + + +################################## +# Datapump testing +################################## +drop table DBAVGUPTA.TEST_TABLE purge; +create table DBAVGUPTA.TEST_TABLE (col1 date); +insert into DBAVGUPTA.TEST_TABLE values (sysdate); +insert into DBAVGUPTA.TEST_TABLE values (sysdate); +insert into DBAVGUPTA.TEST_TABLE values (sysdate); +insert into DBAVGUPTA.TEST_TABLE values (sysdate); +commit; + +set serveroutput on +BEGIN + dba_own.datapump.export_import(operation => 'EXPORT' /* Valid values EXPORT, IMPORT */ + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'vg_test_table.%U.dmp' + , logfile => 'vg_test_table.exp.log' + , parallelism => 8 + , schema_name => 'DBAVGUPTA' + , table_name => 'TEST_TABLE' + , filesize => '10G' + , reusefile => 1 + , compression => 'NONE' + , include_metadata => 1 + ); +END; +/ + +set serveroutput on +--drop table DBAVGUPTA.TEST_TABLE_1 purge; +BEGIN + dba_own.datapump.export_import(operation => 'IMPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'vg_test_table.%U.dmp' + , logfile => 'vg_test_table.imp.log' + , parallelism => 8 + , schema_name => 'DBAVGUPTA' + , remap_schema => 'DBAVGUPTA' + , table_name => 'TEST_TABLE' + , remap_table => 'TEST_TABLE_1' + , table_exists_action => 'REPLACE' + ); +END; +/ + +select count(1) from DBAVGUPTA.TEST_TABLE; +select count(1) from DBAVGUPTA.TEST_TABLE_1; +select count(1) from VGUPTA.TEST_TABLE_1; + + +set lines 1000 +set serveroutput on +BEGIN + dba_own.datapump.export_import(operation => 'EXPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'intex_summary_full_vg.%U.dmp' + , logfile => 'intex_summary_full_vg.exp.log' + , parallelism => 12 + , schema_name => 'INTEX_OWN' + , table_name => 'INTEX_SUMMARY_FULL' + , filesize => '10G' + , reusefile => 1 + , compression => 'NONE' + , include_metadata => 1 + , service_name => 'dv03pimi_adv_con' + ); +END; +/ + +set lines 1000 +set serveroutput on +BEGIN + dba_own.datapump.export_import(operation => 'IMPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'intex_summary_full.%U.dmp' + , logfile => 'intex_summary_full_vg.imp2.log' + , parallelism => 12 + , schema_name => 'INTEX_OWN' + , table_name => 'INTEX_SUMMARY_FULL' + , remap_table => 'INTEX_SUMMARY_FULL_VG' + , table_exists_action => 'TRUNCATE' + , service_name => 'dv03pimi_adv_con' + ); +END; +/ + + +impdp dbavgupta tables=INTEX_OWN.INTEX_SUMMARY_FULL \ +table_exists_action=TRUNCATE \ +remap_table=INTEX_SUMMARY_FULL:INTEX_SUMMARY_FULL_VG \ +parallel=12 \ +directory=data_dump_dir2 \ +dumpfile=intex_summary_full.%U.dmp \ +logfile=intex_summary_full_vg.imp2.log + + + +set lines 1000 +set serveroutput on +BEGIN + dba_own.datapump.export_import(operation => 'EXPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'DBAVGUPTA.intex_summary_full.%U.dmp' + , logfile => 'DBAVGUPTA.intex_summary_full.exp.log' + , parallelism => 12 + , schema_name => 'DBAVGUPTA' + , table_name => 'INTEX_SUMMARY_FULL' + , filesize => '10G' + , reusefile => 1 + , compression => 'NONE' + , include_metadata => 1 + , service_name => 'dv03pimi_adv_con' + ); +END; +/ + +set lines 1000 +set serveroutput on +BEGIN + dba_own.datapump.export_import(operation => 'IMPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'DBAVGUPTA.intex_summary_full.%U.dmp' + , logfile => 'DBAVGUPTA.intex_summary_full_truncate.imp.log' + , parallelism => 12 + , schema_name => 'DBAVGUPTA' + , table_name => 'INTEX_SUMMARY_FULL' + , table_exists_action => 'TRUNCATE' + , service_name => 'dv03pimi_adv_con' + ); +END; +/ + + +set lines 1000 +set serveroutput on +BEGIN + dba_own.datapump.export_import(operation => 'IMPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'DBAVGUPTA.intex_summary_full.%U.dmp' + , logfile => 'DBAVGUPTA.intex_summary_full_append.imp.log' + , parallelism => 12 + , schema_name => 'DBAVGUPTA' + , table_name => 'INTEX_SUMMARY_FULL' + , table_exists_action => 'APPEND' + , service_name => 'dv03pimi_adv_con' + ); +END; +/ + +set lines 1000 +set serveroutput on +BEGIN + dba_own.datapump.export_import(operation => 'IMPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'DBAVGUPTA.intex_summary_full.%U.dmp' + , logfile => 'DBAVGUPTA.intex_summary_full_vg2_remap_replace.imp.log' + , parallelism => 12 + , schema_name => 'DBAVGUPTA' + , table_name => 'INTEX_SUMMARY_FULL_VG' + , remap_table => 'INTEX_SUMMARY_FULL_VG2' + , table_exists_action => 'REPLACE' + , service_name => 'dv03pimi_adv_con' + ); +END; +/ + + +set lines 1000 +set serveroutput on +BEGIN + dba_own.datapump.export_import(operation => 'IMPORT' + , job_mode => 'TABLE' + , directory => 'DATA_DUMP_DIR2' + , dumpfile => 'DBAVGUPTA.intex_summary_full.%U.dmp' + , logfile => 'DBAVGUPTA.intex_summary_full_vg2_remap_truncate.imp.log' + , parallelism => 12 + , schema_name => 'DBAVGUPTA' + , table_name => 'INTEX_SUMMARY_FULL_VG' + , remap_table => 'INTEX_SUMMARY_FULL_VG2' + , table_exists_action => 'TRUNCATE' + , service_name => 'dv03pimi_adv_con' + ); +END; +/ diff --git a/vg/db_info.sql b/vg/db_info.sql new file mode 100644 index 0000000..c8b3ac4 --- /dev/null +++ b/vg/db_info.sql @@ -0,0 +1,103 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DB Information +* Versions : 9.2 and above +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Apr-13 Vishal Gupta Created +*/ + + +PROMPT ********************************************* +PROMPT * D A T A B A S E I N F O R M A T I O N +PROMPT ********************************************* +PROMPT +PROMPT + +COLUMN column1 FORMAT a50 +COLUMN column2 FORMAT a50 + +set pages 0 +SELECT /* First Column */ + '[DB Info]' || chr(10) + || TRIM(SUBSTR('DB ID : ' || d.dbid ,1,50)) || chr(10) + || TRIM(SUBSTR('DB Name : ' || d.name ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('DB Unique Name : ' || d.db_unique_name ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('Platform : ' || d.platform_name ,1,50)) || chr(10) + || TRIM(SUBSTR('DB Created : ' || TO_CHAR(d.created,'DD-MON-YYYY HH24:MI:SS') ,1,50)) || chr(10) + || TRIM(SUBSTR('Open Mode : ' || d.open_mode ,1,50)) || chr(10) + || TRIM(SUBSTR('Open Resetlogs : ' || d.open_resetlogs ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('Flashback ON : ' || d.flashback_on ,1,50)) || chr(10) + || TRIM(SUBSTR('ArchiveLog Mode : ' || d.log_mode ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('ArchiveLog Compression : ' || d.archivelog_compression ,1,50)) || chr(10) + || TRIM(SUBSTR('Force Logging : ' || d.force_logging ,1,50)) || chr(10) + || TRIM(SUBSTR('Remote Archive : ' || d.remote_archive ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('Last Open Incarnation# : ' || d.last_open_incarnation# ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('Recovery Target Inc# : ' || d.recovery_target_incarnation# ,1,50)) || chr(10) + || chr(10) + || '[Timestamps]' || chr(10) + || TRIM(SUBSTR('DB Created : ' || TO_CHAR(d.created,'DD-MON-YYYY HH24:MI:SS') ,1,50)) || chr(10) + || TRIM(SUBSTR('Controlfile Created : ' || TO_CHAR(d.controlfile_created,'DD-MON-YYYY HH24:MI:SS') ,1,50)) || chr(10) + || TRIM(SUBSTR('Controlfile Time : ' || TO_CHAR(d.controlfile_time,'DD-MON-YYYY HH24:MI:SS') ,1,50)) || chr(10) + || TRIM(SUBSTR('Version Time : ' || TO_CHAR(d.version_time,'DD-MON-YYYY HH24:MI:SS') ,1,50)) || chr(10) + || TRIM(SUBSTR('Resetlogs Time : ' || TO_CHAR(d.resetlogs_time,'DD-MON-YYYY HH24:MI:SS') ,1,50)) || chr(10) + || TRIM(SUBSTR('Prior Resetlogs Time : ' || TO_CHAR(d.prior_resetlogs_time,'DD-MON-YYYY HH24:MI:SS') ,1,50)) || chr(10) + || chr(10) + || '[System Change Number]' || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('Current SCN : ' || d.current_scn ,1,50)) || chr(10) + || TRIM(SUBSTR('Resetlogs SCN : ' || d.resetlogs_change# ,1,50)) || chr(10) + || TRIM(SUBSTR('Prior Resetlogs SCN : ' || d.prior_resetlogs_change# ,1,50)) || chr(10) + || TRIM(SUBSTR('Checkpoint SCN : ' || d.checkpoint_change# ,1,50)) || chr(10) + || TRIM(SUBSTR('Controlfile SCN : ' || d.controlfile_change# ,1,50)) || chr(10) + || TRIM(SUBSTR('Archivelog Highest NextSCN : ' || d.archivelog_change# ,1,50)) || chr(10) + || TRIM(SUBSTR('Force Archivelog SCN : ' || d.archive_change# ,1,50)) || chr(10) + || TRIM(SUBSTR('Archivelog SCN : ' || d.archive_change# ,1,50)) || chr(10) + || TRIM(SUBSTR('Standby Became Primary SCN : ' || d.standby_became_primary_scn ,1,50)) || chr(10) + || chr(10) + || '[Controlfile Info]' || chr(10) + || TRIM(SUBSTR('Controlfile Type : ' || d.controlfile_type ,1,50)) || chr(10) + || TRIM(SUBSTR('Controlfile Created : ' || TO_CHAR(d.controlfile_created,'DD-MON-YYYY HH24:MI:SS') ,1,50)) || chr(10) +&&_IF_ORA_11gR1_OR_HIGHER || TRIM(SUBSTR('Controlfile Converted : ' || d.controlfile_converted ,1,50)) || chr(10) + || TRIM(SUBSTR('Controlfile SCN : ' || d.controlfile_change# ,1,50)) || chr(10) + || TRIM(SUBSTR('Controlfile Sequence# : ' || d.controlfile_sequence# ,1,50)) || chr(10) + || TRIM(SUBSTR('Controlfile Time : ' || TO_CHAR(d.controlfile_time,'DD-MON-YYYY HH24:MI:SS') ,1,50)) || chr(10) + column1 + , /* Second Column */ + '[DataGuard Information]' || chr(10) +&&_IF_ORA_11gR1_OR_HIGHER || TRIM(SUBSTR('Primary DB Unique Name : ' || d.primary_db_unique_name ,1,50)) || chr(10) + || TRIM(SUBSTR('Standby DB Unique Name : ' || CASE WHEN d.database_role LIKE '%STANDBY%' THEN d.db_unique_name ELSE '' END ,1,50)) || chr(10) + || TRIM(SUBSTR('Database Role : ' || d.database_role ,1,50)) || chr(10) + || TRIM(SUBSTR('Protection Mode : ' || d.protection_mode ,1,50)) || chr(10) + || TRIM(SUBSTR('Protection Level : ' || d.protection_level ,1,50)) || chr(10) + || TRIM(SUBSTR('DataGuard Broker : ' || d.dataguard_broker ,1,50)) || chr(10) + || TRIM(SUBSTR('DataGuard Status : ' || d.guard_status ,1,50)) || chr(10) + || TRIM(SUBSTR('SwitchOver Status : ' || d.switchover_status ,1,50)) || chr(10) + || TRIM(SUBSTR('Activation SCN : ' || d.activation# ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('SwitchOver SCN : ' || d.switchover# ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('Standby Became Primary SCN : ' || d.standby_became_primary_scn ,1,50)) || chr(10) + || TRIM(SUBSTR('Supplemental Log Data MIN : ' || d.supplemental_log_data_min ,1,50)) || chr(10) + || TRIM(SUBSTR('Supplemental Log Data PK : ' || d.supplemental_log_data_pk ,1,50)) || chr(10) + || TRIM(SUBSTR('Supplemental Log Data UI : ' || d.supplemental_log_data_ui ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('Supplemental Log Data FK : ' || d.supplemental_log_data_fk ,1,50)) || chr(10) +&&_IF_ORA_11gR1_OR_HIGHER || TRIM(SUBSTR('Supplemental Log Data PL : ' || d.supplemental_log_data_pl ,1,50)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('Supplemental Log Data ALL : ' || d.supplemental_log_data_all ,1,50)) || chr(10) + || chr(10) +&&_IF_ORA_10gR2_OR_HIGHER || '[Fast Start Failover Info]' || chr(10) +&&_IF_ORA_10gR2_OR_HIGHER || TRIM(SUBSTR('FS Failover Status : ' || d.fs_failover_status ,1,50)) || chr(10) +&&_IF_ORA_10gR2_OR_HIGHER || TRIM(SUBSTR('FS Failover Current Target : ' || d.fs_failover_current_target ,1,50)) || chr(10) +&&_IF_ORA_10gR2_OR_HIGHER || TRIM(SUBSTR('FS Failover Threshold : ' || d.fs_failover_threshold ,1,50)) || chr(10) +&&_IF_ORA_10gR2_OR_HIGHER || TRIM(SUBSTR('FS Failover Observer Present: ' || d.fs_failover_observer_present ,1,50)) || chr(10) +&&_IF_ORA_10gR2_OR_HIGHER || TRIM(SUBSTR('FS Failover Observer Host : ' || d.fs_failover_observer_host ,1,50)) || chr(10) + column2 + FROM v$database d +; + + +@@footer \ No newline at end of file diff --git a/vg/db_writer_stats.sql b/vg/db_writer_stats.sql new file mode 100644 index 0000000..eaee5e7 --- /dev/null +++ b/vg/db_writer_stats.sql @@ -0,0 +1,9 @@ + +SELECT dbwr_num + , SUM(BUF_GOT) + , SUM(SUM_WRT) + , SUM(PREAD) + , SUM(PWRITE) +FROM x$kcbwds +GROUP BY dbwr_num; + diff --git a/vg/dba_to_fileblock.sql b/vg/dba_to_fileblock.sql new file mode 100644 index 0000000..7636b3d --- /dev/null +++ b/vg/dba_to_fileblock.sql @@ -0,0 +1,48 @@ +set echo off +set term off +store set backupenv replace +set term on + +set serveroutput on + +DECLARE +iblock VARCHAR2(50) := '&&1' ; +imode VARCHAR2(1) :='&2'; +x NUMBER; +digits# NUMBER; +results NUMBER := 0; +file# NUMBER := 0; +block# NUMBER := 0; +cur_digit CHAR(1); +cur_digit# NUMBER; +BEGIN + IF upper(imode) = 'H' THEN + digits# := length( iblock ); + FOR x IN 1..digits# LOOP + cur_digit := upper(substr( iblock, x, 1 )); + IF cur_digit IN ('A','B','C','D','E','F') THEN + cur_digit# := ascii( cur_digit ) - ascii('A') +10; + ELSE + cur_digit# := to_number(cur_digit); + END IF; + results := (results *16) + cur_digit#; + END LOOP; + ELSE + IF upper(imode) = 'D' THEN + results := to_number(iblock); + ELSE + dbms_output.put_line('H = Hex Input ... D = Decimal Input'); + RETURN; + END IF; + END IF; + + file# := dbms_utility.data_block_address_file(results); + block# := dbms_utility.data_block_address_block(results); + + dbms_output.put_line('.'); + dbms_output.put_line( 'The file is ' || file# ); + dbms_output.put_line( 'The block is ' || block# ); +END; +/ + + diff --git a/vg/dblinks.sql b/vg/dblinks.sql new file mode 100644 index 0000000..56e6c9c --- /dev/null +++ b/vg/dblinks.sql @@ -0,0 +1,59 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display database links +* Parameters : 1 - DB Link Owner (Use % as wildcard) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Apr-13 Vishal Gupta Created +* +*/ + + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner + +DEFINE owner="&&1" + + + +set term off +COLUMN _owner NEW_VALUE owner NOPRINT +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" +FROM DUAL; +set term on + +PROMPT ***************************************************************** +PROMPT * D A T A B A S E L I N K S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT ***************************************************************** + +COLUMN owner HEADING "Owner" FORMAT a20 +COLUMN db_link HEADING "DB Link Name" FORMAT a45 +COLUMN created HEADING "Created" FORMAT a18 +COLUMN username HEADING "User" FORMAT a15 +COLUMN host HEADING "Host" FORMAT a80 + +SELECT l.owner + , l.db_link + , TO_CHAR(l.created,'DD-MON-YY HH24:MI:SS') created + , l.username + , l.host + FROM dba_db_links l + WHERE owner like '&&owner' + ORDER BY l.owner + , l.db_link +; + +@@footer \ No newline at end of file diff --git a/vg/ddlgen.sql b/vg/ddlgen.sql new file mode 100644 index 0000000..5694538 --- /dev/null +++ b/vg/ddlgen.sql @@ -0,0 +1,76 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Generate Object's DDL +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - SubObject name (% - wildchar, \ - escape char) +* 4 - Object Type (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Mar-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE subobject_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE subobject_name="&&3" +DEFINE object_type="&&4" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&object_name'),'','%','&&object_name') "_object_name" + , DECODE(UPPER('&&subobject_name'),'','%','&&subobject_name') "_subobject_name" + , DECODE(UPPER('&&object_type'),'','%','&&object_type') "_object_type" +FROM DUAL; + +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END) "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" + /*, CASE + WHEN INSTR('&&owner','.') != 0 THEN DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + ELSE DECODE(UPPER('&&object_type'),'','%',UPPER('&&object_type')) + END "_object_type" + */ +FROM DUAL; +set term on + + +PROMPT ***************************************************************** +PROMPT * DDL +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - SubObject Name = '&&subobject_name' +PROMPT * - Object Type = '&&object_type' +PROMPT ***************************************************************** + + +select dbms_metadata.get_ddl('&&object_type','&&object_name','&&owner') from dual; + + +@@footer diff --git a/vg/dependency.sql b/vg/dependency.sql new file mode 100644 index 0000000..561a5b3 --- /dev/null +++ b/vg/dependency.sql @@ -0,0 +1,198 @@ +@@header + +REM +REM N O T F I N I S H E D Y E T +REM + +/* +* +* Author : Vishal Gupta +* Purpose : Search for objects +* Parameters : 1 - owner (% - wildchar, \ - escape char) +* 2 - Object_NAME (% - wildchar, \ - escape char) +* 3 - Object_Type (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 21-Feb-13 Vishal Gupta Fixed hierarchy when parent is not present +* 16-May-12 Vishal Gupta Created +* +*/ + +UNDEFINE owner +UNDEFINE object_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE object_type="&&3" + + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&object_name'),'','%','&&object_name') "_object_name" + , DECODE(UPPER('&&subobject_name'),'','%','&&subobject_name') "_subobject_name" + , DECODE(UPPER('&&object_type'),'','%','&&object_type') "_object_type" +FROM DUAL; + +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END) "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + ELSE DECODE(UPPER('&&object_type'),'','%',UPPER('&&object_type')) + END "_object_type" +FROM DUAL; + +set term on + + +PROMPT +PROMPT *************************************************************************************************** +PROMPT * D E P E N D E N C Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - ObjectName = '&&object_name' +PROMPT * - ObjectType = '&&object_type' +PROMPT *************************************************************************************************** + + + +set pages 1000 + +COLUMN hierarchy HEADING "Hierarchy" FORMAT a70 +COLUMN hierarchy_parent HEADING "Hierarchy (Parents)" FORMAT a60 +COLUMN hierarchy_children HEADING "Hierarchy (Children)" FORMAT a60 +COLUMN type HEADING "ObjectType" FORMAT a20 +COLUMN referenced_type HEADING "ObjectType" FORMAT a20 +COLUMN status HEADING "Status" FORMAT a10 +COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18 +COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18 +COLUMN created HEADING "Created" FORMAT a18 +COLUMN dependency_type HEADING "DepType" FORMAT a7 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN num_rows HEADING "NumRows" FORMAT 99,999,999,999 + + +WITH parent as +( +SELECT /*+ no_merge */ + level hlevel + , d.owner + , d.name + , d.type + , o.status + , o.last_ddl_time + , o.timestamp + , o.created + , d.dependency_type + FROM dba_dependencies d + , dba_objects o + WHERE d.owner = o.owner + AND d.name = o.object_name + AND d.type = o.object_type + CONNECT BY NOCYCLE PRIOR d.owner = d.referenced_owner + AND PRIOR d.name = d.referenced_name + AND PRIOR DECODE(d.type,'MATERIALIZED VIEW','TABLE',d.type) = DECODE(d.referenced_type,'MATERIALIZED VIEW','TABLE',d.referenced_type) +START WITH d.referenced_owner LIKE '&&owner' ESCAPE '\' + AND d.referenced_name LIKE '&&object_name' ESCAPE '\' + AND d.referenced_type LIKE '&&object_type' ESCAPE '\' +) +, parent_level as + (SELECT NVL(min(hlevel),0) min_parent_level + , NVL(max(hlevel),1) max_parent_level + from parent) +, children as +( +SELECT /*+ no_merge */ + level + max_parent_level hlevel + , d.referenced_owner + , d.referenced_name + , d.referenced_type + , o.status + , o.last_ddl_time + , o.timestamp + , o.created + , d.dependency_type + FROM dba_dependencies d + , dba_objects o + , parent_level + WHERE d.referenced_owner = o.owner + AND d.referenced_name = o.object_name + AND d.referenced_type = o.object_type + CONNECT BY NOCYCLE d.owner = PRIOR d.referenced_owner + AND d.name = PRIOR d.referenced_name + -- For materialized views dependency view show dependency on underlying MV table. + AND DECODE(d.type,'MATERIALIZED VIEW','TABLE',d.type) = PRIOR DECODE(d.referenced_type,'MATERIALIZED VIEW','TABLE',d.referenced_type) +START WITH d.owner LIKE '&&owner' ESCAPE '\' + AND d.name LIKE '&&object_name' ESCAPE '\' + AND d.type LIKE '&&object_type' ESCAPE '\' +) +, hierarchy as +( +SELECT /*+ no_merge */ --LPAD('-',(p.hlevel-1) * 4 ,'|---') || p.owner || '.' || p.name hierarchy + p.hlevel + , p.owner + , p.name object_name + , p.type + , p.status + , p.last_ddl_time + , p.timestamp + , p.created + , p.dependency_type + FROM parent p +UNION ALL +SELECT /*+ no_merge */ + --LPAD('-', (min_parent_level ) * 4 ,'|---') || o.owner || '.' || o.object_name + min_parent_level + , o.owner + , o.object_name + , o.object_type + , o.status + , o.last_ddl_time + , o.timestamp + , o.created + , '' + FROM dba_objects o + , parent_level + WHERE o.owner LIKE '&&owner' ESCAPE '\' + AND o.object_name LIKE '&&object_name' ESCAPE '\' +UNION ALL +SELECT /*+ no_merge */ -- LPAD('-',(c.hlevel-1)*4 ,'|---') || c.referenced_owner || '.' || c.referenced_name hierarchy + c.hlevel + , c.referenced_owner + , c.referenced_name + , c.referenced_type type + , c.status + , c.last_ddl_time + , c.timestamp + , c.created + , c.dependency_type + FROM children c +) +SELECT LPAD('-',(h.hlevel-1)*4 ,'|---') || h.owner || '.' || h.object_name hierarchy + , h.type + , h.status + , TO_CHAR(h.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time + , TO_CHAR(TO_DATE(h.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change + , TO_CHAR(h.created,'DD-MON-YY HH24:MI:SS') created + , h.dependency_type + , TO_CHAR(t.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , t.num_rows + FROM hierarchy h + LEFT OUTER JOIN dba_tables t ON t.owner = h.owner AND t.table_name = h.object_name AND h.type = 'TABLE' +; + +@@footer diff --git a/vg/dependency_col.sql b/vg/dependency_col.sql new file mode 100644 index 0000000..6562e5c --- /dev/null +++ b/vg/dependency_col.sql @@ -0,0 +1,122 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Show column dependency +* Versions : 11.1 and above +* Parameters : 1 - Owner (% - wildchar, \ - escape char) +* 2 - Object Name (% - wildchar, \ - escape char) +* 3 - Column Name (% - wildchar, \ - escape char) +* 4 - Dependent Owner (% - wildchar, \ - escape char) +* 5 - Dependent Name (% - wildchar, \ - escape char) +* 6 - Dependent Type (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Nov-15 Vishal Gupta Created +* +*/ + +UNDEFINE referenced_owner +UNDEFINE referenced_name +UNDEFINE referenced_column_name +UNDEFINE dependent_owner +UNDEFINE dependent_name +UNDEFINE dependent_type + +DEFINE referenced_owner="&&1" +DEFINE referenced_name="&&2" +DEFINE referenced_column_name="&&3" +DEFINE dependent_owner="&&4" +DEFINE dependent_name="&&5" +DEFINE dependent_type="&&6" + + + +COLUMN _referenced_owner NEW_VALUE referenced_owner NOPRINT +COLUMN _referenced_name NEW_VALUE referenced_name NOPRINT +COLUMN _referenced_column_name NEW_VALUE referenced_column_name NOPRINT +COLUMN _dependent_owner NEW_VALUE dependent_owner NOPRINT +COLUMN _dependent_name NEW_VALUE dependent_name NOPRINT +COLUMN _dependent_type NEW_VALUE dependent_type NOPRINT + +set term off + +SELECT DECODE(UPPER('&&referenced_owner'),'','%','&&referenced_owner') "_referenced_owner" + , DECODE(UPPER('&&referenced_name'),'','%','&&referenced_name') "_referenced_name" + , DECODE(UPPER('&&referenced_column_name'),'','%','&&referenced_column_name') "_referenced_column_name" + , DECODE(UPPER('&&dependent_owner'),'','%','&&dependent_owner') "_dependent_owner" + , DECODE(UPPER('&&dependent_name'),'','%','&&dependent_name') "_dependent_name" + , DECODE(UPPER('&&dependent_type'),'','%','&&dependent_type') "_dependent_type" +FROM DUAL +; + +set term on + + +PROMPT +PROMPT *************************************************************************************************** +PROMPT * D E P E N D E N C Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&referenced_owner' +PROMPT * - Object Name = '&&referenced_name' +PROMPT * - Column Name = '&&referenced_column_name' +PROMPT * - Dependent Owner = '&&dependent_owner' +PROMPT * - Dependent Name = '&&dependent_name' +PROMPT * - Dependent Type = '&&dependent_type' +PROMPT *************************************************************************************************** + + + + +COLUMN referenced_object_name HEADING "Object Name" FORMAT a40 +COLUMN referenced_column_name HEADING "Column Name" FORMAT a20 +COLUMN referenced_type HEADING "Object Type" FORMAT a20 TRUNCATE +COLUMN object_name HEADING "Dep Object Name" FORMAT a50 +COLUMN type HEADING "DepObject Type" FORMAT a20 TRUNCATE +COLUMN referenced_link_name HEADING "Ref Link Name" FORMAT a20 +COLUMN dependency_type HEADING "Depend|Type" FORMAT a10 + +BREAK ON referenced_object_name ON referenced_column_name + +SELECT d.referenced_owner || '.' || d.referenced_name referenced_object_name + , c.name referenced_column_name + --, d.referenced_type + , d.owner || '.' || d.name object_name + , d.type + , d.referenced_link_name + , d.dependency_type + FROM dba_dependencies d + JOIN dba_objects o ON o.owner = d.owner AND o.object_name = d.name AND o.object_type = d.type + JOIN dba_objects ro ON ro.owner = d.referenced_owner AND ro.object_name = d.referenced_name AND ro.object_type = d.referenced_type + JOIN sys.dependency$ d2 ON d2.d_obj# = o.object_id AND d2.p_obj# = ro.object_id AND d2.d_attrs IS NOT NULL + JOIN sys.col$ c ON c.obj# = d2.p_obj# + /* + - D_ATTRS is raw column containing HEX value. + - First 8 characters are something like 00010000 or 00030000 or 00030100, they can be ignored. + - Digits from 9th character onwards represent the BITAND flag for column in bytes for 8 column pairs + - 9-10 digit represent first 8 columns + - 11-12 digit represent next 8 columns + - and so on. + */ + AND power(2,mod(c.col#,8)) = BITAND( TO_NUMBER(SUBSTR(SUBSTR(d2.d_attrs,9), 1 + 2*TRUNC(c.col#/8) ,2) ,'XX' ) , power(2,mod(c.col#,8)) ) +WHERE 1=1 + AND d.referenced_owner LIKE '&&referenced_owner' + AND d.referenced_name LIKE '&&referenced_name' + AND c.name LIKE '&&referenced_column_name' + AND d.owner LIKE '&&dependent_owner' + AND d.name LIKE '&&dependent_name' + AND d.type LIKE '&&dependent_type' +ORDER BY d.referenced_owner + , d.referenced_name + , c.name + , d.owner + , d.name +; + +@@footer diff --git a/vg/desc.sql b/vg/desc.sql new file mode 100644 index 0000000..b1773eb --- /dev/null +++ b/vg/desc.sql @@ -0,0 +1,52 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Describe an object +* Parameters : 1 - Object Name in OWNER.OBJECT_NAME format. +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 13-Feb-12 Vishal Gupta First cut +*/ + + +DEFINE object_name="&&1" + +COLUMN owner FORMAT a20 +COLUMN object_name FORMAT a30 +COLUMN object_type FORMAT a20 + +VARIABLE object_type VARCHAR2(30) + +------------------------------ +-- Find out the object type +------------------------------ +BEGIN + :object_type := ''; + --FOR i in ( + SELECT + --owner, object_name, + object_type + INTO :object_type + FROM dba_objects + WHERE owner || '.' || object_name = UPPER('&&object_name') ; + --dbms_describe.describe_procedure(object_name => +END; +/ + +print :object_type +------------------------------ +-- Describe the object +------------------------------ + +set lines 80 +desc &object_name +@@header +@@tab_indexes &object_name + +@@footer diff --git a/vg/dg_archivelog_gap.sql b/vg/dg_archivelog_gap.sql new file mode 100644 index 0000000..8bd4226 --- /dev/null +++ b/vg/dg_archivelog_gap.sql @@ -0,0 +1,135 @@ +@@header +/* +* +* Author : Vishal Gupta +* Purpose : Display archivelog gap +* Parameter : 1 - Thread Number (Default '%') +* 2 - From Sequence (Default '%') +* 3 - To Sequence (Default '%') +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-APR-15 Vishal Gupta Added TimeDiff to display diff between current timestamp and max archlog fetched time +* 17-SEP-14 Vishal Gupta Added logic to display 'FETCHING', when file is being fetched current via RFS. +* 04-FEB-14 Vishal Gupta Made output changes +* 04-Apr-10 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE thread="&&1" +DEFINE from_sequence="&2" +DEFINE to_sequence="&3" + +set term off +COLUMN _thread NEW_VALUE thread NOPRINT +COLUMN _from_sequence NEW_VALUE from_sequence NOPRINT +COLUMN _to_sequence NEW_VALUE to_sequence NOPRINT + +SELECT DECODE('&&thread','','%','&&thread') "_thread" + , DECODE('&&from_sequence','','%','&&from_sequence') "_from_sequence" + , DECODE('&&to_sequence','','%','&&to_sequence') "_to_sequence" +FROM DUAL; +set term on + + +/************************************ +* M A I N S C R I P T +************************************/ + +COLUMN thread# HEADING "T#" FORMAT 999 +COLUMN sequence# HEADING "SEQ#" FORMAT 99999999 +COLUMN applied HEADING "APPLIED" FORMAT a9 +COLUMN FIRST_TIME HEADING "FIRST_TIME" FORMAT a20 +COLUMN NEXT_TIME HEADING "NEXT_TIME" FORMAT a20 +COLUMN COMPLETION_TIME HEADING "COMPLETION_TIME" FORMAT a20 +COLUMN size_mb HEADING "SIZE_MB" FORMAT 99,999 +COLUMN delay_in_shipping HEADING "Delay in Shipping" FORMAT a20 + +/* +* Not using WITH clause (aka CTE aka sub-query refactor'ing +* , as it does not work on standby database in MOUNT mode and only works in OPEN mode. +*/ + +select minmax.thread# + , i.sequence# + minmax.min_sequence# - 1 sequence# + --, l.thread# + --, l.sequence# + , l.applied + , l.deleted + , l.status + , l.archived + , NVL(TO_CHAR(l.first_time,'DD-MON-YY HH24:MI:SS'),NVL2(m.sequence#,' Fetching ',' Missing ')) first_time + , TO_CHAR(l.next_time,'DD-MON-YY HH24:MI:SS') next_time + , ROUND((l.blocks * l.block_size)/power(1024,2)) size_mb + , l.fal + , l.creator + , l.registrar + , TO_CHAR(l.completion_time,'DD-MON-YY HH24:MI:SS') completion_time + , LPAD(FLOOR(l.completion_time-l.next_time) ,2) || 'd ' + || LPAD(FLOOR(MOD((l.completion_time-l.next_time) ,1) * 24 ),2) || 'h ' + || LPAD(FLOOR(MOD((l.completion_time-l.next_time)*24 ,1) * 60 ),2) || 'm ' + || LPAD(FLOOR(MOD((l.completion_time-l.next_time)*24*60,1) * 60 ),2) || 's' delay_in_shipping +from (select rownum sequence# + from dual + connect by level <= 1500 + ) i + join (select l2.dest_id + , l2.thread# + , DECODE('&&from_sequence','%',max(DECODE(l2.applied, 'YES',l2.sequence#,0)) - 3,'&&from_sequence') min_sequence# + , max(l2.sequence#) max_sequence# + --, min(l2.first_time) + --, max(l2.first_time) + From v$archived_log l2 + where l2.dest_id = 1 + AND l2.thread# like '&&thread' + group by l2.dest_id, l2.thread# + order by l2.thread# + ) minmax on 1 = 1 + LEFT OUTER JOIN v$archived_log l on l.thread# = minmax.thread# and l.sequence# = i.sequence# + minmax.min_sequence# - 1 and l.status = 'A' + LEFT OUTER JOIN gv$managed_standby m ON m.process in ('RFS') and m.thread# = minmax.thread# AND m.sequence# = i.sequence# + minmax.min_sequence# - 1 +WHERE 1=1 + and i.sequence# + minmax.min_sequence# - 1 <= minmax.max_sequence# + AND minmax.thread# like '&&thread' + AND i.sequence# + minmax.min_sequence# - 1 + BETWEEN DECODE('&&from_sequence','%',minmax.min_sequence#,'&&from_sequence') + AND DECODE('&&to_sequence','%',minmax.max_sequence#,'&&to_sequence') +order by minmax.thread# + , i.sequence# +--order by l.first_change# +; + + +SELECT l.thread# +-- , l.applied +-- , l.deleted +-- , l.status +-- , l.archived + , max(sequence#) + , TO_CHAR(sysdate,'DD-MON-YY HH24:MI:SS') current_time + , TO_CHAR(max(l.next_time) ,'DD-MON-YY HH24:MI:SS') max_next_time + , REPLACE( + REPLACE( + CAST(sysdate as TIMESTAMP) - CAST(max(l.next_time) as TIMESTAMP) + ,'.000000','') + ,'+0000000','+') + time_diff + FROM v$archived_log l +--WHERE +GROUP BY l.thread# +-- , l.applied +-- , l.deleted +-- , l.status +-- , l.archived +ORDER BY --l.applied, +l.thread# +; + + +@@footer \ No newline at end of file diff --git a/vg/dg_dest_status.sql b/vg/dg_dest_status.sql new file mode 100644 index 0000000..174b25d --- /dev/null +++ b/vg/dg_dest_status.sql @@ -0,0 +1,78 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DataGuard Destination Status +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Jul-12 Vishal Gupta Created +* +*/ + +PROMPT ***************************************************************** +PROMPT * DataGuard Destionation Status +PROMPT ***************************************************************** + +COLUMN dest_id HEADING "Dest|Id" FORMAT 9999 +COLUMN destination HEADING "Destination" FORMAT a20 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN type HEADING "Type" FORMAT a10 +COLUMN database_mode HEADING "Database Mode" FORMAT a15 +COLUMN recovery_mode HEADING "Recovery Mode" FORMAT a23 +COLUMN protection_mode HEADING "Protection Mode" FORMAT a20 +COLUMN gap_status HEADING "GAP Status" FORMAT a10 +COLUMN applied HEADING "Applied" FORMAT a9 +COLUMN archived HEADING "Archived" FORMAT a7 +COLUMN deleted HEADING "Deleted" FORMAT a7 +COLUMN max_sequence# HEADING "Max Sequence#" FORMAT 999999 +COLUMN max_next_time HEADING "Max Next Time" FORMAT a18 +COLUMN min_next_time HEADING "Min Next Time" FORMAT a18 +COLUMN max_first_time HEADING "Max First Time" FORMAT a18 + +--BREAK ON applied ON archived ON deleted on status SKIP 1 + +SELECT l.applied + , l.dest_id + , s.destination + , s.status + , s.type + , s.database_mode + , s.recovery_mode + , s.protection_mode + , s.gap_status + , l.archived + , l.deleted + , l.status + --, l.thread# + --, max(l.sequence#) max_sequence# + , TO_CHAR(max(l.next_time),'DD-MON-YY hh24:MI:SS') max_next_time + , TO_CHAR(min(l.next_time),'DD-MON-YY hh24:MI:SS') min_next_time + , ROUND((SUM(l.block_size * l.blocks)/1024/1024/1024),2) redo_size_GB + --, TO_CHAR(max(l.first_time),'DD-MON-YY hh24:MI:SS') max_first_time + FROM v$archived_log l + , v$archive_dest_status s +WHERE l.dest_id = s.dest_id + AND NOT (s.type = 'LOCAL' and s.database_mode = 'UNKNOWN') + GROUP BY l.dest_id + , s.destination + , s.status + , s.type + , s.database_mode + , s.recovery_mode + , s.protection_mode + , s.gap_status + , l.applied + , l.archived + , l.deleted + , l.status + --, l.thread# + ORDER BY l.applied desc + , l.dest_id + ; + +@@footer diff --git a/vg/dg_fal.sql b/vg/dg_fal.sql new file mode 100644 index 0000000..e78b98b --- /dev/null +++ b/vg/dg_fal.sql @@ -0,0 +1,128 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display breakdown of archivelogs fetched using dataguard FAL calls +* Parameters : 1 - Number of days (Default 7) +* 2 - Destination Id (Default %) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------------------- +* 27-Jan-14 Vishal Gupta Added following to output and changed output layout +* - Count of archivelogs +* - Primary total count and sizes +* 22-Nov-13 Vishal Gupta Added destination wise totals +* 08-Nov-12 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE DAYS +UNDEFINE DEST_ID + +DEFINE DAYS="&&1" +DEFINE DEST_ID="&&2" + +COLUMN _DAYS NEW_VALUE DAYS NOPRINT +COLUMN _DEST_ID NEW_VALUE DEST_ID NOPRINT + +set term off +SELECT DECODE('&&DAYS','','7','&&DAYS') "_DAYS" + , DECODE('&&DEST_ID','','%','&&DEST_ID') "_DEST_ID" +FROM DUAL; +set term on + +PROMPT ***************************************************************** +PROMPT * DataGuard FAL Breakdown (RUN ON PRIMARY INSTANCE) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Days = '&&DAYS' +PROMPT * - Destination Id = '&&DEST_ID' +PROMPT ***************************************************************** + +COLUMN dest_id HEADING "DEST_ID" FORMAT 9999999999 +COLUMN name HEADING "DataGuard|DestName" FORMAT a25 +COLUMN destination HEADING "DataGuard|DestName" FORMAT a25 +COLUMN next_time HEADING "ArchLog|Creation|Date" FORMAT a9 +COLUMN total_prim_size_GB HEADING "Total|Primary|(GB)" FORMAT 999,999 +COLUMN total_dest_size_GB HEADING "Total|Dest|(GB)" FORMAT 999,999 +COLUMN NOFAL_size_GB HEADING "NOFAL|(Pushed)|(GB)" FORMAT 999,999 +COLUMN FAL_size_GB HEADING "FAL|(Pulled)|(GB)" FORMAT 999,999 +COLUMN NOFAL_percent HEADING "NOFAL|(Pushed)|(%)" FORMAT 999.99 +COLUMN FAL_percent HEADING "FAL|(Pulled)|(%)" FORMAT 999.99 +COLUMN total_prim_count HEADING "Total|Primary|(#)" FORMAT 99,999 +COLUMN total_dest_count HEADING "Total|Dest|(#)" FORMAT 99,999 +COLUMN NOFAL_count HEADING "FAL|(Pushed)|(#)" FORMAT 99,999 +COLUMN FAL_count HEADING "FAL|(Pulled)|(#)" FORMAT 99,999 +COLUMN separator HEADING "!|!|!" FORMAT a1 + +BREAK ON DEST_ID SKIP 1 DUPLICATES ON REPORT +--BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF total_prim_size_GB FORMAT 99,999,999 ON DEST_ID +COMPUTE SUM LABEL 'Total' OF total_dest_size_GB FORMAT 99,999,999 ON DEST_ID +COMPUTE SUM LABEL 'Total' OF NOFAL_size_GB FORMAT 99,999,999 ON DEST_ID +COMPUTE SUM LABEL 'Total' OF FAL_size_GB FORMAT 99,999,999 ON DEST_ID +COMPUTE SUM LABEL 'Total' OF total_prim_count FORMAT 99,999,999 ON DEST_ID +COMPUTE SUM LABEL 'Total' OF total_dest_count FORMAT 99,999,999 ON DEST_ID +COMPUTE SUM LABEL 'Total' OF NOFAL_count FORMAT 99,999,999 ON DEST_ID +COMPUTE SUM LABEL 'Total' OF FAL_count FORMAT 99,999,999 ON DEST_ID + +COMPUTE SUM LABEL 'Grand Total' OF total_prim_size_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Grand Total' OF total_dest_size_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Grand Total' OF NOFAL_size_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Grand Total' OF FAL_size_GB FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Grand Total' OF total_prim_count FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Grand Total' OF total_dest_count FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Grand Total' OF NOFAL_count FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Grand Total' OF FAL_count FORMAT 99,999,999 ON REPORT + +SELECT l.dest_id + --, lower(l.name) name + , d.destination + , TO_CHAR(TRUNC(l.next_time),'DD-MON-YY') next_time + , '|' separator + , p.total_count total_prim_count + , count(1) total_dest_count + , SUM(DECODE(l.fal,'NO',1,0)) NOFAL_count + , SUM(DECODE(l.fal,'YES',1,0)) FAL_count + , '|' separator + , ROUND(p.total_size/power(1024,3),2) total_prim_size_GB + , ROUND(SUM(l.BLOCKS * l.block_size) /power(1024,3),2) total_dest_size_GB + , ROUND(SUM(DECODE(l.fal,'NO',(l.BLOCKS * l.block_size ),0)) /power(1024,3),2) NOFAL_size_GB + , ROUND(SUM(DECODE(l.fal,'YES',(l.BLOCKS * l.block_size ),0)) /power(1024,3),2) FAL_size_GB + , '|' separator + , ROUND(SUM(DECODE(l.fal,'NO',(l.BLOCKS),0))/SUM(l.BLOCKS)*100,2) NOFAL_percent + , ROUND(SUM(DECODE(l.fal,'YES',(l.BLOCKS),0))/SUM(l.BLOCKS)*100,2) FAL_percent + FROM v$archived_log l + JOIN v$archive_dest d ON d.dest_id = l.dest_id + JOIN (SELECT TO_CHAR(TRUNC(l2.next_time),'DD-MON-YY') next_time + , SUM(l2.BLOCKS * l2.block_size) total_size + , count(1) total_count + FROM v$archived_log l2 + WHERE l2.dest_id = (select dest_id from v$archived_log l3 where l3.standby_dest <> 'YES' and rownum =1) + AND l2.next_time > sysdate - &&days + GROUP BY TO_CHAR(TRUNC(l2.next_time),'DD-MON-YY') + ) p ON p.next_time = TO_CHAR(TRUNC(l.next_time),'DD-MON-YY') + WHERE 1=1 + AND l.standby_dest = 'YES' + AND l.next_time > sysdate - &&days + AND l.dest_id like '&&DEST_ID' +GROUP BY l.dest_id + --, lower(l.name) + , d.destination + , TRUNC(l.next_time) + , p.total_size + , p.total_count +ORDER BY l.dest_id + , TRUNC(l.next_time) ASC +; + +@@footer + + diff --git a/vg/dg_lag.sql b/vg/dg_lag.sql new file mode 100644 index 0000000..8777338 --- /dev/null +++ b/vg/dg_lag.sql @@ -0,0 +1,108 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DataGuard Lag +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Jul-12 Vishal Gupta Created +* +*/ + +PROMPT ***************************************************************** +PROMPT * D A T A G U A R D L A G +PROMPT ***************************************************************** + +COLUMN name HEADING "Name" FORMAT a23 +COLUMN value HEADING "Value" FORMAT a20 +COLUMN unit HEADING "Unit" FORMAT a30 +COLUMN time_computed HEADING "TimeComputed" FORMAT a20 +COLUMN datum_time HEADING "datum_time" FORMAT a20 + + +SELECT ds.name + , ds.value + , ds.unit + , ds.time_computed + , ds.datum_time + FROM v$dataguard_stats ds +; + +/* +COLUMN dest_id HEADING "Dest|Id" FORMAT 9999 +COLUMN destination HEADING "Destination" FORMAT a20 +COLUMN dest_status HEADING "Dest|Status" FORMAT a8 +COLUMN type HEADING "Type" FORMAT a10 +COLUMN database_mode HEADING "Database Mode" FORMAT a15 +COLUMN recovery_mode HEADING "Recovery Mode" FORMAT a23 +COLUMN protection_mode HEADING "Protection Mode" FORMAT a20 +COLUMN gap_status HEADING "GAP|Status" FORMAT a6 +COLUMN applied HEADING "A|p|p|l|i|e|d" FORMAT a1 TRUNCATE +COLUMN archived HEADING "A|r|c|h|e|v|e|d" FORMAT a1 TRUNCATE +COLUMN deleted HEADING "D|e|l|e|t|e|d" FORMAT a1 TRUNCATE +COLUMN archlog_status HEADING "S|t|a|t|u|s" FORMAT a1 TRUNCATE +COLUMN max_sequence# HEADING "Max Sequence#" FORMAT 999999 +COLUMN max_next_time HEADING "Max Next Time" FORMAT a18 +COLUMN max_first_time HEADING "Max First Time" FORMAT a18 + +--BREAK ON applied ON archived ON deleted on status SKIP 1 + +SELECT l.dest_id + , s.destination + , s.status dest_status + , s.type + , s.database_mode + , s.recovery_mode + , s.protection_mode + , s.gap_status + , l.applied + , l.archived + , l.deleted + , l.status archlog_status + --, l.thread# + --, max(l.sequence#) max_sequence# + , TO_CHAR(max(l.next_time),'DD-MON-YY hh24:MI:SS') max_next_time + --, TO_CHAR(max(l.first_time),'DD-MON-YY hh24:MI:SS') max_first_time + , ROUND((SUM(l.block_size * l.blocks)/1024/1024/1024),2) redo_size_GB + FROM v$archived_log l + , v$archive_dest_status s +WHERE l.dest_id = s.dest_id + GROUP BY l.dest_id + , s.destination + , s.status + , s.type + , s.database_mode + , s.recovery_mode + , s.protection_mode + , s.gap_status + , l.applied + , l.archived + , l.deleted + , l.status + --, l.thread# + ORDER BY l.applied desc + , l.dest_id + ; +*/ + +/* +SELECT s.dest_id + , s.destination + , s.status + , s.type + , s.database_mode + , s.recovery_mode + , s.protection_mode + , s.gap_status + , s.SRL + FROM v$archive_dest_status s + WHERE NOT (type = 'LOCAL' AND database_mode = 'UNKNOWN'); +*/ + + +@@footer diff --git a/vg/dg_mrp.sql b/vg/dg_mrp.sql new file mode 100644 index 0000000..2e075e2 --- /dev/null +++ b/vg/dg_mrp.sql @@ -0,0 +1,152 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display MRP (Managed Recovery Process) Status +* Version : +* Parameters : +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 09-MAY-14 Vishal Gupta Modified to display foreground MRP process as well +* 12-Feb-13 Vishal Gupta Created +* +*/ + +Prompt +Prompt ******************* +Prompt * MRP Status +Prompt ******************* + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN SID HEADING "SID" FORMAT 99999 +COLUMN process HEADING "Process" FORMAT a7 +COLUMN pid HEADING "PID" FORMAT 999999 +COLUMN status HEADING "Status" FORMAT a15 +COLUMN delay_mins HEADING "Delay|Mins" FORMAT 9999 +COLUMN client_process HEADING "Client|Process" FORMAT a10 +COLUMN client_pid HEADING "Client|PID" FORMAT a10 +COLUMN machine HEADING "Client|Machine" FORMAT a10 TRUNCATE +COLUMN thread# HEADING "Th#" FORMAT 99 +COLUMN sequence# HEADING "Seq#" FORMAT 999999 +COLUMN block# HEADING "Block#" FORMAT 99999999 +COLUMN blocks HEADING "Blocks" FORMAT 99999999 +COLUMN applied_log HEADING "Current|Log|Applied|(MB)" FORMAT 99,999 +COLUMN log_size HEADING "Log|Size|(MB)" FORMAT 99,999 +COLUMN received_log HEADING "Current|Logs|Received|(MB)" FORMAT 9,999,999 +COLUMN received_total HEADING "Total|Logs|Received|(MB)" FORMAT 9,999,999 +COLUMN speed HEADING "Avg|Speed|(KB/s)" FORMAT 9,999,999 +COLUMN known_agents HEADING "Known|Agents" FORMAT 999999 +COLUMN active_agents HEADING "Active|Agents" FORMAT 999999 +COLUMN archlog_first_Time HEADING "ArchLog|FirstTime" FORMAT a18 +COLUMN last_applied_redo_time HEADING "Last Applied|Redo Time" FORMAT a18 +COLUMN active_apply_rate HEADING "Active|Apply|Rate" FORMAT a15 + +SELECT /*+ RULE */ m.process + , s.sid + , m.inst_id + , m.status + , m.delay_mins + , s.machine + , m.thread# + , m.sequence# + , m.block# + , m.blocks + , ((m.block# - 1) * 512)/power(1024,2) applied_log + , (SELECT MAX((l.blocks * l.block_size)/power(1024,2) ) + from v$archived_log l + WHERE m.thread# = l.thread# AND m.sequence# = l.sequence# + ) log_size + , m.known_agents + , m.active_agents + , rp.last_applied_redo_time + --, rp.active_apply_rate + FROM gv$managed_standby m + JOIN gv$process p ON m.inst_id = p.inst_id AND m.pid = p.spid + JOIN gv$session s ON s.inst_id = p.inst_id AND s.paddr = p.addr + JOIN (SELECT /*+ RULE */ MAX(DECODE(r.item,'Last Applied Redo',TO_CHAR(r.timestamp,'DD-MON-YY HH24:MI:SS'),'')) last_applied_redo_time + --, MAX(DECODE(r.item,'Active Apply Rate',TRIM(TO_CHAR(r.sofar,'999,999,999,999')) || ' ' || r.units ,'')) active_apply_rate + FROM gv$recovery_progress r + WHERE r.start_time = (SELECT MAX(start_time) from gv$recovery_progress) + GROUP BY r.start_Time + ) rp ON 1=1 + --JOIN v$statname sn ON sn.name = 'bytes received via SQL*Net from client' + --JOIN gv$sesstat ss ON ss.inst_id = s.inst_id AND ss.sid = s.sid AND sn.statistic# = ss.statistic# + WHERE 1=1 + AND m.process IN ('MRP0','MR(fg)') +UNION ALL +/* Sometimes MRP0 process does not move, while slave recovery process are reading older archived redo logs so show recovery slaves as well */ +SELECT /*+ RULE */ p.pname + , s.sid + , s.inst_id + , 'Reading' + , NULL + , s.machine + , l2.thread# + , l2.sequence# +-- , l2.first_Time archlog_first_Time + , DECODE(sw.p1text, 'log#',sw.p2 ,'') block# + , DECODE(sw.p1text, 'log#',sw.p3 ,'') blocks + , (sw.p2 * l2.block_size )/power(1024,2) Read_MB + , (l2.block_size * l2.blocks)/power(1024,2) log_size_MB + , NULL + , NULL + , TO_CHAR(l2.first_Time,'DD-MON-YY HH24:MI:SS') archlog_first_Time + FROM gv$session_wait sw + JOIN gv$session s ON s.inst_id = sw.inst_id and sw.sid = s.sid and s.program like '%' + JOIN gv$process p ON s.inst_id = p.inst_id and s.paddr = p.addr + JOIN v$archived_log l2 ON l2.sequence# = sw.p1 + AND l2.first_time = (select max(first_Time) from v$archived_log l where l.sequence# = sw.p1 ) +where 1=1 +and sw.wait_class <> 'Idle' +and sw.event = 'log file sequential read' +and s.program like '%(PR%' +; + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF speed FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF received_log FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF received_total FORMAT 99,999,999 ON REPORT + +Prompt +Prompt ************************* +Prompt * Standby Redo Logs +Prompt ************************* + +SELECT m.process + , s.sid + , m.inst_id + --, m.pid + , m.status + --, m.client_process + --, m.client_pid + , s.machine + , m.thread# + , m.sequence# + , m.block# + , m.blocks + , ((m.block# - 1) * 512)/power(1024,2) received_log + , (ss.value/power(1024,2)) received_total + FROM gv$managed_standby m + JOIN gv$process p ON m.inst_id = p.inst_id AND m.pid = p.spid + JOIN gv$session s ON s.inst_id = p.inst_id AND s.paddr = p.addr + JOIN v$statname sn ON sn.name = 'bytes received via SQL*Net from client' + JOIN gv$sesstat ss ON ss.inst_id = s.inst_id AND ss.sid = s.sid AND sn.statistic# = ss.statistic# + WHERE 1=1 + AND m.process NOT IN ('MRP0','ARCH') + AND m.status IN ('IDLE') + AND m.thread# <> 0 +ORDER BY m.process + , inst_id + , m.thread# + , m.sequence# +; + +PROMPT +--@@recovery_progress + +@@footer \ No newline at end of file diff --git a/vg/dg_rfs.sql b/vg/dg_rfs.sql new file mode 100644 index 0000000..3b10853 --- /dev/null +++ b/vg/dg_rfs.sql @@ -0,0 +1,125 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Standby RFS archive log fetch details +* Version : +* Parameters : +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-NOV-13 Vishal Gupta Added following columns in output. +* Also added the totals at the bottom. +* - SID +* - Client Machine +* - Log Received so far +* - Total Received so far +* - Average Speed +* 22-NOV-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +DEFINE THREAD="&&1" + +set term off +COLUMN _THREAD NEW_VALUE THREAD NOPRINT + +SELECT UPPER(DECODE('&&THREAD','','%','&&THREAD')) "_THREAD" +FROM DUAL; +set term on + + +Prompt +Prompt *********************************************** +Prompt * RFS ArchiveLog Fetch Summary By Thread +Prompt *********************************************** + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN SID HEADING "SID" FORMAT 99999 +COLUMN process HEADING "Process" FORMAT a7 +COLUMN pid HEADING "PID" FORMAT 999999 +COLUMN status HEADING "Status" FORMAT a15 +COLUMN delay_mins HEADING "Delay|Mins" FORMAT 9999 +COLUMN client_process HEADING "Client|Process" FORMAT a10 +COLUMN client_pid HEADING "Client|PID" FORMAT a10 +COLUMN machine HEADING "Client|Machine" FORMAT a10 TRUNCATE +COLUMN thread# HEADING "Th#" FORMAT 999 +COLUMN sequence# HEADING "Seq#" FORMAT 99999999 +COLUMN block# HEADING "Block#" FORMAT 9999999999 +COLUMN blocks HEADING "Blocks" FORMAT 9999999999 +COLUMN received_log HEADING "Current|Logs|Received|(MB)" FORMAT 9,999,999 +COLUMN received_total HEADING "Total|Logs|Received|(MB)" FORMAT 9,999,999 +COLUMN speed HEADING "Avg|Speed|(KB/s)" FORMAT 9,999,999 +COLUMN known_agents HEADING "Known|Agents" FORMAT 999999 +COLUMN active_agents HEADING "Active|Agents" FORMAT 999999 + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF speed FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF received_log FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF received_total FORMAT 99,999,999 ON REPORT + +SELECT m.process + , m.inst_id + , m.thread# + , SUM(((m.block# - 1) * 512)/power(1024,2)) received_log + , SUM((ss.value/power(1024,2))) received_total + , SUM(ROUND((ss.value/power(1024,1))/((sysdate-s.logon_time)*24*60*60))) speed + FROM gv$managed_standby m + JOIN gv$process p ON m.inst_id = p.inst_id AND m.pid = p.spid + JOIN gv$session s ON s.inst_id = p.inst_id AND s.paddr = p.addr + JOIN v$statname sn ON sn.name = 'bytes received via SQL*Net from client' + JOIN gv$sesstat ss ON ss.inst_id = s.inst_id AND ss.sid = s.sid AND sn.statistic# = ss.statistic# + WHERE m.process in ('RFS') + AND m.thread# <> 0 +GROUP BY m.process, m.inst_id, m.thread# +ORDER BY m.process, m.inst_id, m.thread# +; + +Prompt +Prompt ********************************* +Prompt * RFS ArchiveLog Fetch Details +Prompt ********************************* + +SELECT m.process + , s.sid + , m.inst_id + --, m.pid + , m.status + --, m.client_process + --, m.client_pid + , s.machine + , m.thread# + , m.sequence# + , m.block# + , m.blocks + , ((m.block# - 1) * 512)/power(1024,2) received_log + , (ss.value/power(1024,2)) received_total + , ROUND((ss.value/power(1024,1))/((sysdate-s.logon_time)*24*60*60)) speed + FROM gv$managed_standby m + JOIN gv$process p ON m.inst_id = p.inst_id AND m.pid = p.spid + JOIN gv$session s ON s.inst_id = p.inst_id AND s.paddr = p.addr + JOIN v$statname sn ON sn.name = 'bytes received via SQL*Net from client' + JOIN gv$sesstat ss ON ss.inst_id = s.inst_id AND ss.sid = s.sid AND sn.statistic# = ss.statistic# + WHERE 1=1 + AND m.process NOT IN ('MRP0','ARCH') + AND m.status NOT IN ('IDLE') + AND m.thread# <> 0 + AND ( CASE WHEN m.process = 'RFS' THEN TO_CHAR(m.thread#) ELSE '&&THREAD' END) LIKE '&&THREAD' +ORDER BY m.process + --, inst_id + , m.thread# + , m.sequence# +; + + + +@@footer diff --git a/vg/dg_stats.sql b/vg/dg_stats.sql new file mode 100644 index 0000000..0bc8ee0 --- /dev/null +++ b/vg/dg_stats.sql @@ -0,0 +1,85 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DataGuard Statistics +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Jul-12 Vishal Gupta Created +* +*/ + +PROMPT ***************************************************************** +PROMPT * DataGuard Stats +PROMPT ***************************************************************** + +COLUMN name HEADING "Name" FORMAT a23 +COLUMN value HEADING "Value" FORMAT a20 +COLUMN unit HEADING "Unit" FORMAT a30 +COLUMN time_computed HEADING "TimeComputed" FORMAT a20 +COLUMN datum_time HEADING "datum_time" FORMAT a20 + + +SELECT ds.name + , ds.value + , ds.unit + , ds.time_computed + , ds.datum_time + FROM v$dataguard_stats ds +; + +PROMPT +PROMPT +PROMPT ********************************************* +PROMPT * R E C O V E R Y P R O G R E S S * +PROMPT ********************************************* + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN start_time HEADING "Start Time" FORMAT a18 +COLUMN type HEADING "Type" FORMAT a20 +COLUMN item HEADING "Item" FORMAT a25 +COLUMN units HEADING "Units" FORMAT a10 +COLUMN sofar HEADING "SoFar" FORMAT a45 +COLUMN total HEADING "Total" FORMAT 999,999,999,999 +COLUMN timestamp HEADING "Start Time" FORMAT a18 +COLUMN comments HEADING "Comments" FORMAT a18 + +SELECT r.inst_id + --, TO_CHAR(r.start_time,'DD-MON-YY HH24:MI:SS') start_time + --, r.type + , r.item + , CASE r.item + WHEN 'Last Applied Redo' THEN TO_CHAR(r.timestamp,'DD-MON-YY HH24:MI:SS') || ' , ' || r.comments + || chr(10) || 'ApplyLag - ' || REPLACE(REPLACE(TO_CHAR( CAST(sysdate as TIMESTAMP) - CAST( r.timestamp as TIMESTAMP)) + ,'+0000000','+') + ,'.000000','') + WHEN 'Active Time' THEN FLOOR(r.sofar/3600) || 'h ' || FLOOR(MOD(r.sofar,3600)/60) || 'm ' || MOD(r.sofar,60) || 's' + WHEN 'Elapsed Time' THEN FLOOR(r.sofar/3600) || 'h ' || FLOOR(MOD(r.sofar,3600)/60) || 'm ' || MOD(r.sofar,60) || 's' + || chr(10) || 'StartTime: ' || TO_CHAR(r.start_time,'DD-MON-YY HH24:MI:SS') + ELSE TRIM(TO_CHAR(r.sofar,'999,999,999,999')) || ' ' || r.units + END SoFar + --, r.total + FROM gv$recovery_progress r + WHERE r.start_time = (SELECT MAX(start_time) from gv$recovery_progress) + ORDER BY DECODE(r.item + ,'Last Applied Redo',1 + ,'Standby Apply Lag',2 + ,'Active Apply Rate',3 + ,'Average Apply Rate',4 + ,'Maximum Apply Rate',5 + ,'Redo Applied',6 + ,'Log Files',7 + ,'Apply Time per Log',8 + ,'Checkpoint Time per Log',9 + ,'Active Time',21 + ,'Elapsed Time',22 + ,999 + ) +; + +@@footer diff --git a/vg/dg_transport_lag.sql b/vg/dg_transport_lag.sql new file mode 100644 index 0000000..056a70a --- /dev/null +++ b/vg/dg_transport_lag.sql @@ -0,0 +1,91 @@ +@@header +/* +* +* Author : Vishal Gupta +* Purpose : Display "Real" transport lag on DataGuard standby database +* Parameter : 1 - Number of hours (Default '48') +* : 2 - LagMinutes (Default 1 minute) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 14-Jan-15 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE HOURS +UNDEFINE LagMinutes +DEFINE HOURS="&&1" +DEFINE LagMinutes="&&2" + +set term off +COLUMN _HOURS NEW_VALUE HOURS NOPRINT +COLUMN _LagMinutes NEW_VALUE LagMinutes NOPRINT + +SELECT DECODE('&&HOURS','','48','&&HOURS') "_HOURS" + , DECODE('&&LagMinutes','','1','&&LagMinutes') "_LagMinutes" +FROM DUAL; +set term on + + +/************************************ +* M A I N S C R I P T +************************************/ + +PROMPT ************************************************* +PROMPT * DataGuard - Real Transport Lag +PROMPT * +PROMPT * Input Parameter: +PROMPT * Number Of Hours : &&HOURS +PROMPT * Lag Minutes : &&LagMinutes +PROMPT ************************************************* + +COLUMN thread# HEADING "T#" FORMAT 999 +COLUMN sequence# HEADING "SEQ#" FORMAT 99999999 +COLUMN applied HEADING "APPLIED" FORMAT a3 +COLUMN FIRST_TIME HEADING "FIRST_TIME" FORMAT a20 +COLUMN NEXT_TIME HEADING "NEXT_TIME" FORMAT a20 +COLUMN COMPLETION_TIME HEADING "COMPLETION_TIME" FORMAT a20 +COLUMN size_mb HEADING "SIZE_MB" FORMAT 99,999 +COLUMN delay_in_shipping HEADING "Delay in Shipping" FORMAT a20 + +/* +* Not using WITH clause (aka CTE aka sub-query refactor'ing +* , as it does not work on standby database in MOUNT mode and only works in OPEN mode. +*/ + +select l.thread# + , l.sequence# + , l.applied + , l.deleted + , l.status + , l.archived + , TO_CHAR(l.first_time,'DD-MON-YY HH24:MI:SS') first_time + , TO_CHAR(l.next_time,'DD-MON-YY HH24:MI:SS') next_time + , ROUND((l.blocks * l.block_size)/power(1024,2)) size_mb + , l.fal + , l.creator + , l.registrar + , TO_CHAR(l.completion_time,'DD-MON-YY HH24:MI:SS') completion_time + , LPAD(FLOOR(l.completion_time-l.next_time) ,2) || 'd ' + || LPAD(FLOOR(MOD((l.completion_time-l.next_time) ,1) * 24 ),2) || 'h ' + || LPAD(FLOOR(MOD((l.completion_time-l.next_time)*24 ,1) * 60 ),2) || 'm ' + || LPAD(FLOOR(MOD((l.completion_time-l.next_time)*24*60,1) * 60 ),2) || 's' delay_in_shipping +from v$archived_log l +WHERE 1=1 + AND l.dest_id = 1 + AND l.first_time > sysdate - (&&HOURS/24) + AND (l.completion_time-l.next_time) * 24 * 60 > &&LagMinutes +order by l.first_time +; + + + + +@@footer \ No newline at end of file diff --git a/vg/dictionary_cache_effectiveness.sql b/vg/dictionary_cache_effectiveness.sql new file mode 100644 index 0000000..50c5b4b --- /dev/null +++ b/vg/dictionary_cache_effectiveness.sql @@ -0,0 +1,52 @@ +SET ECHO off +REM NAME: TFSDCEFF.SQL +REM USAGE:"@path/tfsdceff" +REM ------------------------------------------------------------------------ +REM REQUIREMENTS: +REM Should be run as SYS +REM ------------------------------------------------------------------------ +REM PURPOSE: +REM Reports dictionary cache parameter effectiveness. It recommends +REM an action based on maintaining more than 80% usage ofthe available +REM cache entries while encountering cache misses no more than 10% of +REM the time. +REM +REM ------------------------------------------------------------------------ +REM Main text of script follows: + +ttitle - + center 'Dictionary Cache Statistics Report' skip 2 + +col parameter heading 'Parameter Name' format a20 justify c trunc +col count heading 'Entries|Allocated' format 9999990 justify c +col usage heading 'Entries|Used' format 9999990 justify c +col gets heading 'Gets' format 9999990 justify c +col getmisses heading 'Get|Misses' format 9999990 justify c +col pctused heading 'Pct|Used' format 990.0 justify c +col pctmisses heading 'Pct|Misses' format 990.0 justify c +col action heading 'Rec''d|Action' format a6 justify c + +select + parameter, + count, + usage, + 100*nvl(usage,0)/decode(count,null,1,0,1,count) pctused, + gets, + getmisses, + 100*nvl(getmisses,0)/decode(gets,null,1,0,1,gets) pctmisses, + decode( + greatest(100*nvl(usage,0)/decode(count,null,1,0,1,count),80), + 80, ' Lower', + decode(least(100*nvl(getmisses,0)/decode(gets,null,1,0,1,gets),10), + 10, '*Raise', ' Ok') + ) action +from + v$rowcache +order by + 1 +/ + +prompt +prompt +prompt Rec'd Action is based on maintaining >80% Entries Used and <10% Gets Missed. + \ No newline at end of file diff --git a/vg/dnfs_channels.sql b/vg/dnfs_channels.sql new file mode 100644 index 0000000..f9ee643 --- /dev/null +++ b/vg/dnfs_channels.sql @@ -0,0 +1,62 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display dNFS Channels +* Version : +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-Aug-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +Prompt ************************ +Prompt * dNFS Channels +Prompt ************************ + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN svrname HEADING "ServerName" FORMAT a20 +COLUMN path HEADING "Path" FORMAT a20 +COLUMN local HEADING "local" FORMAT a20 +COLUMN pnum HEADING "pnum" FORMAT 99999999 +COLUMN ch_id HEADING "ch_id" FORMAT 99999999 +COLUMN svr_id HEADING "svr_id" FORMAT 99999999 +COLUMN sends HEADING "Sends" FORMAT 99999999999 +COLUMN recvs HEADING "Receives" FORMAT 99999999999 +COLUMN pings HEADING "Pings" FORMAT 99999999999 + +BREAK ON inst_id ON svrname ON path + +SELECT inst_id + , svrname + , path + , local + , ch_id + , pnum + , sends + , recvs + , pings +FROM gv$dnfs_channels +ORDER BY inst_id + , svrname + , path +; + +@@footer diff --git a/vg/dnfs_files.sql b/vg/dnfs_files.sql new file mode 100644 index 0000000..c414050 --- /dev/null +++ b/vg/dnfs_files.sql @@ -0,0 +1,56 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display dNFS Files +* Version : +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-Aug-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +Prompt ****************** +Prompt * dNFS Files +Prompt ****************** + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN pnum HEADING "Process|Number" FORMAT 999999 +COLUMN svrname HEADING "ServerName" FORMAT a20 +COLUMN filesize HEADING "FileSize|(GB)" FORMAT 99999.99 +COLUMN filename HEADING "FileName" FORMAT a100 + +BREAK ON inst_id ON svrname SKIP 1 + +SELECT f.inst_id + , s.svrname + , f.pnum + , ROUND(f.filesize/power(1024,3),2) filesize + , f.filename +FROM gv$dnfs_servers s + ,gv$dnfs_files f +WHERE s.inst_id = f.inst_id + AND s.id = f.svr_id +ORDER BY f.inst_id + , s.svrname + , f.filename +; + +@@footer diff --git a/vg/dnfs_paths.sql b/vg/dnfs_paths.sql new file mode 100644 index 0000000..537db20 --- /dev/null +++ b/vg/dnfs_paths.sql @@ -0,0 +1,52 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display dNFS paths +* Version : +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 28-Oct-15 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +Prompt ************************ +Prompt * dNFS Channels +Prompt ************************ + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN svrname HEADING "ServerName" FORMAT a20 +COLUMN path HEADING "Path" FORMAT a20 +COLUMN local HEADING "local" FORMAT a20 + +BREAK ON inst_id ON svrname ON path + +SELECT distinct + inst_id + , svrname + , path + , local +FROM gv$dnfs_channels +ORDER BY inst_id + , svrname + , path +; + +@@footer diff --git a/vg/dnfs_servers.sql b/vg/dnfs_servers.sql new file mode 100644 index 0000000..eef275d --- /dev/null +++ b/vg/dnfs_servers.sql @@ -0,0 +1,58 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display dNFS Server +* Version : +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-Aug-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +Prompt +Prompt ****************** +Prompt * dNFS Servers +Prompt ****************** + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN svrname HEADING "ServerName" FORMAT a20 +COLUMN mntport HEADING "Mount|Port" FORMAT 99999999 +COLUMN nfsport HEADING "NFS|Port" FORMAT 99999999 +COLUMN wtmax HEADING "Write|Max" FORMAT 99999999 +COLUMN rtmax HEADING "Read|Max" FORMAT 99999999 +COLUMN dirname HEADING "Directory" FORMAT a40 + +BREAK ON inst_id ON svrname + +SELECT inst_id + , svrname + , dirname + , mntport + , nfsport + , wtmax + , rtmax +FROM gv$dnfs_servers +ORDER BY inst_id + , svrname + , dirname +; + +@@footer diff --git a/vg/dnfs_stats.sql b/vg/dnfs_stats.sql new file mode 100644 index 0000000..93d6b4a --- /dev/null +++ b/vg/dnfs_stats.sql @@ -0,0 +1,143 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display dNFS Files +* Version : +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-Aug-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +Prompt *********************** +Prompt * dNFS Statistics +Prompt *********************** + +set numf 9,999,999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN pnum HEADING "Process|Number" FORMAT 999999 +COLUMN nfs_null HEADING "Null" +COLUMN nfs_getattr HEADING "GetAttr" +COLUMN nfs_setattr HEADING "SetAttr" +COLUMN nfs_lookup HEADING "Lookup" +COLUMN nfs_readlink HEADING "Read|Link" +COLUMN nfs_access HEADING "Access" +COLUMN nfs_read HEADING "Read" +COLUMN nfs_write HEADING "Write" +COLUMN nfs_create HEADING "Create" +COLUMN nfs_mkdir HEADING "MkDir" +COLUMN nfs_symlink HEADING "SymLink" +COLUMN nfs_mknod HEADING "MKNOD" +COLUMN nfs_remove HEADING "Remove" +COLUMN nfs_rmdir HEADING "RMDIR" +COLUMN nfs_link HEADING "Link" +COLUMN nfs_readdir HEADING "Read|Dir" +COLUMN nfs_readdirplus HEADING "Read|Dir|Plus" +COLUMN nfs_fsstat HEADING "FSStat" +COLUMN nfs_fsinfo HEADING "FSInfo" +COLUMN nfs_pathconf HEADING "Pathconf" +COLUMN nfs_commit HEADING "Commit" +COLUMN nfs_mount HEADING "Mount" + +BREAK ON inst_id SKIP 1 +COMPUTE SUM LABEL "Total" OF nfs_null ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_getattr ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_setattr ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_lookup ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_access ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_read ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_write ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_create ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_write ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_commit ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_fsstat ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_fsinfo ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_symlink ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_mknod ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_remove ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_rename ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_readlink ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_mkdir ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_rmdir ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_link ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_readdir ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_readdirplus ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_pathconf ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_mount ON inst_id + +SELECT st.inst_id + , st.pnum + , st.nfs_null + , st.nfs_getattr + , st.nfs_setattr + , st.nfs_lookup + , st.nfs_access + , st.nfs_read + , st.nfs_write + , st.nfs_create + , st.nfs_commit + , st.nfs_fsstat + , st.nfs_fsinfo +/* , st.nfs_symlink + , st.nfs_mknod + , st.nfs_remove + , st.nfs_rename + , st.nfs_readlink + , st.nfs_mkdir + , st.nfs_rmdir + , st.nfs_link + , st.nfs_readdir + , st.nfs_readdirplus + , st.nfs_pathconf + , st.nfs_mount +*/ +FROM gv$dnfs_stats st + --JOIN gv$dnfs_channels c ON st.inst_id = c.inst_id AND st.pnum = c.pnum +WHERE ( + st.nfs_null ++ st.nfs_getattr ++ st.nfs_setattr ++ st.nfs_lookup ++ st.nfs_access ++ st.nfs_read ++ st.nfs_write ++ st.nfs_create ++ st.nfs_commit ++ st.nfs_fsstat ++ st.nfs_fsinfo ++ st.nfs_symlink ++ st.nfs_mknod ++ st.nfs_remove ++ st.nfs_rename ++ st.nfs_readlink ++ st.nfs_mkdir ++ st.nfs_rmdir ++ st.nfs_link ++ st.nfs_readdir ++ st.nfs_readdirplus ++ st.nfs_pathconf ++ st.nfs_mount +) > 0 +ORDER BY st.inst_id + , st.pnum +; + +@@footer diff --git a/vg/dnfs_stats_summary.sql b/vg/dnfs_stats_summary.sql new file mode 100644 index 0000000..55126b9 --- /dev/null +++ b/vg/dnfs_stats_summary.sql @@ -0,0 +1,117 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display dNFS Files +* Version : +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-Aug-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +Prompt ********************************* +Prompt * dNFS Statistics Summary +Prompt ********************************* + +set numf 9,999,999,999 + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN pnum HEADING "Process|Number" FORMAT 999999 +COLUMN nfs_null HEADING "Null" +COLUMN nfs_getattr HEADING "GetAttr" +COLUMN nfs_setattr HEADING "SetAttr" +COLUMN nfs_lookup HEADING "Lookup" +COLUMN nfs_readlink HEADING "Read|Link" +COLUMN nfs_access HEADING "Access" +COLUMN nfs_read HEADING "Read" +COLUMN nfs_write HEADING "Write" +COLUMN nfs_create HEADING "Create" +COLUMN nfs_mkdir HEADING "MkDir" +COLUMN nfs_symlink HEADING "SymLink" +COLUMN nfs_mknod HEADING "MKNOD" +COLUMN nfs_remove HEADING "Remove" +COLUMN nfs_rmdir HEADING "RMDIR" +COLUMN nfs_link HEADING "Link" +COLUMN nfs_readdir HEADING "Read|Dir" +COLUMN nfs_readdirplus HEADING "Read|Dir|Plus" +COLUMN nfs_fsstat HEADING "FSStat" +COLUMN nfs_fsinfo HEADING "FSInfo" +COLUMN nfs_pathconf HEADING "Pathconf" +COLUMN nfs_commit HEADING "Commit" +COLUMN nfs_mount HEADING "Mount" + +BREAK ON inst_id SKIP 1 +COMPUTE SUM LABEL "Total" OF nfs_null ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_getattr ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_setattr ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_lookup ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_access ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_read ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_write ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_create ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_write ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_commit ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_fsstat ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_fsinfo ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_symlink ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_mknod ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_remove ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_rename ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_readlink ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_mkdir ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_rmdir ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_link ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_readdir ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_readdirplus ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_pathconf ON inst_id +COMPUTE SUM LABEL "Total" OF nfs_mount ON inst_id + +SELECT st.inst_id + , SUM(st.nfs_null) nfs_null + , SUM(st.nfs_getattr) nfs_getattr + , SUM(st.nfs_setattr) nfs_setattr + , SUM(st.nfs_lookup) nfs_lookup + , SUM(st.nfs_access) nfs_access + , SUM(st.nfs_read) nfs_read + , SUM(st.nfs_write) nfs_write + , SUM(st.nfs_create) nfs_create + , SUM(st.nfs_commit) nfs_commit + , SUM(st.nfs_fsstat) nfs_fsstat + , SUM(st.nfs_fsinfo) nfs_fsinfo + --, SUM(st.nfs_symlink) nfs_symlink + --, SUM(st.nfs_mknod) nfs_mknod + --, SUM(st.nfs_remove) nfs_remove + --, SUM(st.nfs_rename) nfs_rename + --, SUM(st.nfs_readlink) nfs_readlink + --, SUM(st.nfs_mkdir) nfs_mkdir + --, SUM(st.nfs_rmdir) nfs_rmdir + --, SUM(st.nfs_link) nfs_link + --, SUM(st.nfs_readdir) nfs_readdir + --, SUM(st.nfs_readdirplus) nfs_readdirplus + --, SUM(st.nfs_pathconf) nfs_pathconf + --, SUM(st.nfs_mount) nfs_mount +FROM gv$dnfs_stats st + --JOIN gv$dnfs_channels c ON st.inst_id = c.inst_id AND st.pnum = c.pnum +GROUP BY st.inst_id +ORDER BY st.inst_id +; + +@@footer diff --git a/vg/dump_block.sql b/vg/dump_block.sql new file mode 100644 index 0000000..ea59c06 --- /dev/null +++ b/vg/dump_block.sql @@ -0,0 +1,2 @@ +@find_trace +alter system dump datafile &fileno block &blockno; diff --git a/vg/duplicate_Failure_ManaualRecovery.txt b/vg/duplicate_Failure_ManaualRecovery.txt new file mode 100644 index 0000000..2136e6d --- /dev/null +++ b/vg/duplicate_Failure_ManaualRecovery.txt @@ -0,0 +1,119 @@ + +/*************************************************************** +If recovery failed due to datafile addition in new location. +***************************************************************/ + +-- Offline the datafile +alter database datafile 724 offline; + +-- Create the datafile as new +alter database create datafile 724 as new; + +-- Online the datafile +alter database datafile 724 online; + +-- catalog archive logs +RMAN> +catalog start with '+RECO_DM02/stby02_pr01pimi/archivelog/2013_07_19/'; +catalog start with '+RECO_DM02/stby02_pr01pimi/archivelog/2013_07_20/'; + +-- Recover database +alter database recover automatic database until change 345174612767 using backup controlfile; + +-- Backup controlfile to trace +alter database backup controlfile to trace +as '/export/ora_stage/betarefresh/2013/jul20/bt01pimi_controlfile_to_trace.txt' +REUSE RESETLOGS +; + +-- Startup databse in NOMOUNT mode +alter system set db_name = 'BT01PIMI' scope=spfile; +shutdown immediate +startup nomount + +-- Recreate the controlfile +CREATE CONTROLFILE REUSE SET DATABASE "BT01PIMI" RESETLOGS FORCE LOGGING ARCHIVELOG + MAXLOGFILES 384 + MAXLOGMEMBERS 3 + MAXDATAFILES 4096 + MAXINSTANCES 64 + MAXLOGHISTORY 68736 +LOGFILE + GROUP 1 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512, + GROUP 2 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512, + GROUP 3 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512, + GROUP 4 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512, + GROUP 5 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512, + GROUP 6 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 +DATAFILE + '+RECO_DM02/bt01pimi/datafile/system.7783.818791731', + '+RECO_DM02/bt01pimi/datafile/sysaux.8564.818783743', + '+RECO_DM02/bt01pimi/datafile/undotbs1.7857.818791399', +... +... +... + '+RECO_DM02/bt01pimi/datafile/pm_data.9384.818775403' +CHARACTER SET AL32UTF8 +; + + +---------------------------------------------------------- +-- Set Database Guard and/or Supplemental Logging +---------------------------------------------------------- +ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; +alter database force logging; + +---------------------------------------------------------- +-- Create log files for threads other than thread one. +---------------------------------------------------------- +ALTER DATABASE ADD LOGFILE THREAD 2 + GROUP 7 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 8 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 9 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 10 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 11 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 12 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE +; + +ALTER DATABASE ADD LOGFILE THREAD 3 + GROUP 13 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 14 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 15 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 16 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 17 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 18 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE +; + +ALTER DATABASE ADD LOGFILE THREAD 4 + GROUP 19 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 20 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 21 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 22 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 23 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE, + GROUP 24 ( '+RECO_DM02') SIZE 6G BLOCKSIZE 512 REUSE +; + +---------------------------------------------------------- +-- Database can now be opened zeroing the online logs. +---------------------------------------------------------- +ALTER DATABASE OPEN RESETLOGS; + +alter system enable restricted session; + + +---------------------------------------------------------- +-- Add tempfiles to temporary tablespaces +---------------------------------------------------------- +sqlplus / as sysdba < 'online' + OR fanStatus <> 'normal' + OR powerStatus <> 'normal' + OR temperatureStatus <> 'normal' + OR locatorLEDStatus <> 'off' + OR TO_NUMBER(temperatureReading) > 29 + ) +ORDER BY cellname +; + + +PROMPT +PROMPT **************************************************** +PROMPT * E X A D A T A P H Y S I C A L D I S K S +PROMPT **************************************************** + +COLUMN cellname HEADING "CellName" FORMAT a10 +COLUMN diskType HEADING "Disk|Type" FORMAT a10 +COLUMN name HEADING "PhyDisk|Name" FORMAT a10 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN physicalSize HEADING "Size|(GB)" FORMAT 999,999 +COLUMN errMediaCount HEADING "Media|Error|Count" FORMAT 9999999 +COLUMN errOtherCount HEADING "Other|Error|Count" FORMAT 9999999 +COLUMN foreignState HEADING "Foreign|State" FORMAT a5 +COLUMN physicalFirmware HEADING "Firm|Ware" FORMAT a6 +COLUMN physicalInsertTime HEADING "InsertTime" FORMAT a10 TRUNC +COLUMN physicalInterface HEADING "Interface" FORMAT a10 +COLUMN predfailStatus HEADING "Pred|Fail|Status" FORMAT a5 +COLUMN poorPerfStatus HEADING "Poor|Perf|Status" FORMAT a5 +COLUMN wtCachingStatus HEADING "Write|Through|Caching|Status" FORMAT a5 +COLUMN peerFailStatus HEADING "Peer|Fail|Status" FORMAT a5 +COLUMN criticalStatus HEADING "Critical|Status" FORMAT a5 +COLUMN physicalDatedSerial HEADING "Physical|Dated|Serial" FORMAT a12 + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF physicalSize FORMAT 99,999,999,999 ON REPORT + +SELECT clioutput.cellname + , pd.diskType + , pd.name + , pd.status + , pd.errMediaCount + , pd.errOtherCount + , pd.foreignState + , pd.predfailStatus + , pd.poorPerfStatus + , pd.wtCachingStatus + , pd.peerFailStatus + , pd.criticalStatus + , pd.physicalDatedSerial + FROM v$cell_config cc + , XMLTable('/cli-output' PASSING XMLTYPE(confval) + COLUMNS + cellname VARCHAR2(100) PATH 'context/@cell' + , physicaldisk XMLTYPE PATH 'physicaldisk' + ) clioutput + , XMLTable('/physicaldisk' PASSING clioutput.physicaldisk + COLUMNS + NAME VARCHAR2(100) PATH 'name' + , deviceId VARCHAR2(100) PATH 'deviceId' + , diskType VARCHAR2(100) PATH 'diskType' + , devicePartition VARCHAR2(100) PATH 'devicePartition' + , enclosureDeviceId VARCHAR2(100) PATH 'enclosureDeviceId' + , errMediaCount INTEGER PATH 'errMediaCount' + , errOtherCount INTEGER PATH 'errOtherCount' + , foreignState VARCHAR2(100) PATH 'foreignState' + , luns VARCHAR2(100) PATH 'luns' + , makeModel VARCHAR2(100) PATH 'makeModel' + , physicalFirmware VARCHAR2(100) PATH 'physicalFirmware' + , physicalInsertTime VARCHAR2(100) PATH 'physicalInsertTime' + , physicalInterface VARCHAR2(100) PATH 'physicalInterface' + , physicalSerial VARCHAR2(100) PATH 'physicalSerial' + , physicalSize INTEGER PATH 'physicalSize' + , slotNumber VARCHAR2(100) PATH 'slotNumber' + , status VARCHAR2(100) PATH 'status' + , id VARCHAR2(100) PATH 'id' + , key_500 VARCHAR2(100) PATH 'key_500' + , predfailStatus VARCHAR2(100) PATH 'predfailStatus' + , poorPerfStatus VARCHAR2(100) PATH 'poorPerfStatus' + , wtCachingStatus VARCHAR2(100) PATH 'wtCachingStatus' + , peerFailStatus VARCHAR2(100) PATH 'peerFailStatus' + , criticalStatus VARCHAR2(100) PATH 'criticalStatus' + , physicalDatedSerial VARCHAR2(100) PATH 'physicalDatedSerial' + ) pd +WHERE cc.conftype = 'PHYSICALDISKS' + AND ( pd.status <> 'normal' + OR pd.errMediaCount > 0 + OR pd.errOtherCount > 0 + OR pd.foreignState <> 'false' + OR pd.predfailStatus <> 'FALSE' + OR pd.poorPerfStatus <> 'FALSE' + OR pd.wtCachingStatus <> 'FALSE' + OR pd.peerFailStatus <> 'FALSE' + OR pd.criticalStatus <> 'FALSE' + ) +ORDER BY clioutput.cellname + , pd.diskType + , pd.name +; + + +PROMPT +PROMPT ************************************************** +PROMPT * E X A D A T A L U N S +PROMPT ************************************************** + + +COLUMN cellname HEADING "CellName" FORMAT a10 +COLUMN diskType HEADING "Disk|Type" FORMAT a10 +COLUMN name HEADING "LUN|Name" FORMAT a5 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN lunSize HEADING "Size|(GB)" FORMAT 999,999 +COLUMN cellDisk HEADING "CellDisk|Name" FORMAT a15 +COLUMN deviceName HEADING "deviceName" FORMAT a10 +COLUMN id HEADING "id" FORMAT a10 +COLUMN isSystemLun HEADING "isSystemLun" FORMAT a5 +COLUMN lunAutoCreate HEADING "lunAutoCreate" FORMAT a6 +COLUMN lunUID HEADING "lunUID" FORMAT a6 +COLUMN physicalDrives HEADING "physicalDrives" FORMAT a10 +COLUMN raidLevel HEADING "Raid|Level" FORMAT a6 +COLUMN lunWriteCacheMode HEADING "lunWriteCacheMode" FORMAT a61 + + +SELECT clioutput.cellname + , lun.diskType + , lun.name + , lun.status + , ROUND(lun.lunSize/power(1000,3)) lunSize + , lun.cellDisk + , lun.deviceName + , lun.id + , lun.isSystemLun + , lun.lunAutoCreate + , lun.lunUID + , lun.physicalDrives + , lun.raidLevel + , lun.lunWriteCacheMode + FROM v$cell_config cc + , XMLTable('/cli-output' PASSING XMLTYPE(confval) + COLUMNS + cellname VARCHAR2(100) PATH 'context/@cell' + , lun XMLTYPE PATH 'lun' + ) clioutput + , XMLTable('/lun' PASSING clioutput.lun + COLUMNS + name VARCHAR2(100) PATH 'name' + , cellDisk VARCHAR2(100) PATH 'cellDisk' + , deviceName VARCHAR2(100) PATH 'deviceName' + , diskType VARCHAR2(100) PATH 'diskType' + , id VARCHAR2(100) PATH 'id' + , isSystemLun VARCHAR2(100) PATH 'isSystemLun' + , lunAutoCreate VARCHAR2(100) PATH 'lunAutoCreate' + , lunSize NUMBER PATH 'lunSize' + , lunUID VARCHAR2(100) PATH 'lunUID' + , physicalDrives VARCHAR2(100) PATH 'physicalDrives' + , raidLevel VARCHAR2(100) PATH 'raidLevel' + , lunWriteCacheMode VARCHAR2(100) PATH 'lunWriteCacheMode' + , status VARCHAR2(100) PATH 'status' + ) lun +WHERE cc.conftype = 'LUNS' + AND ( lun.status <> 'normal' + OR (lun.diskType = 'HardDisk' AND lun.lunWriteCacheMode NOT LIKE '%WriteBack%') + ) +ORDER BY clioutput.cellname + , lun.diskType + , lun.name +; + +PROMPT +PROMPT ******************************************** +PROMPT * E X A D A T A C E L L D I S K S +PROMPT ******************************************** + +COLUMN cellname HEADING "CellName" FORMAT a10 +COLUMN cellDiskName HEADING "CellDiskName" FORMAT a16 +COLUMN status HEADING "Status" FORMAT a11 +COLUMN creationTime HEADING "CreationTime" FORMAT a25 +COLUMN deviceName HEADING "Device|Name" FORMAT a10 +COLUMN devicePartition HEADING "Device|Partition" FORMAT a10 +COLUMN diskType HEADING "DiskType" FORMAT a10 +COLUMN celdisksize HEADING "Size|(GB)" FORMAT 999,999 +COLUMN freeSpace HEADING "Free|Space|(MB)" FORMAT 9,999,999 +COLUMN id HEADING "id" FORMAT a40 +COLUMN errorCount HEADING "Error|(#)" FORMAT 99999 +COLUMN interleaving HEADING "Inter|Leaving" FORMAT a8 +COLUMN lun HEADING "Lun" FORMAT a5 +COLUMN physicalDisk HEADING "Physical|Disk" FORMAT a15 +COLUMN raidLevel HEADING "Raid|Level" FORMAT a5 + + +SELECT clioutput.cellname + , celldisk.diskType + , celldisk.name cellDiskName + , celldisk.status + , celldisk.creationTime + , celldisk.celdisksize/power(1024,3) celdisksize + , celldisk.freeSpace/power(1024,2) freeSpace + , celldisk.deviceName + , celldisk.devicePartition + , celldisk.errorCount errorCount + , celldisk.interleaving + , celldisk.lun + , celldisk.physicalDisk + , celldisk.raidLevel + FROM v$cell_config cc + , XMLTable('/cli-output' PASSING XMLTYPE(confval) + COLUMNS + cellname VARCHAR2(100) PATH 'context/@cell' + , celldisk XMLTYPE PATH 'celldisk' + ) clioutput + , XMLTable('/celldisk' PASSING clioutput.celldisk + COLUMNS + NAME VARCHAR2(100) PATH 'name' + , creationTime VARCHAR2(100) PATH 'creationTime' + , deviceName VARCHAR2(100) PATH 'deviceName' + , devicePartition VARCHAR2(100) PATH 'devicePartition' + , diskType VARCHAR2(100) PATH 'diskType' + , errorCount NUMBER PATH 'errorCount' + , freeSpace NUMBER PATH 'freeSpace' + , interleaving VARCHAR2(100) PATH 'interleaving' + , lun VARCHAR2(100) PATH 'lun' + , physicalDisk VARCHAR2(100) PATH 'physicalDisk' + , celdisksize NUMBER PATH 'size' + , raidLevel VARCHAR2(100) PATH 'raidLevel' + , status VARCHAR2(100) PATH 'status' + ) celldisk +WHERE cc.conftype = 'CELLDISKS' + AND ( status <> 'normal' + OR errorCount > 0 + OR freeSpace > 0 + ) +ORDER BY cellname + , DiskType + , cellDiskName +; + + + +PROMPT +PROMPT ************************************************** +PROMPT * E X A D A T A G R I D D I S K S +PROMPT ************************************************** + + +COLUMN cellname HEADING "CellName" FORMAT a10 +COLUMN name HEADING "GridDiskName" FORMAT a25 +COLUMN status HEADING "Status" FORMAT a11 +COLUMN creationTime HEADING "Creation|Time" FORMAT a10 TRUNC +COLUMN diskType HEADING "DiskType" FORMAT a10 +COLUMN asmDiskgroupName HEADING "ASM|Diskgroup|Name" FORMAT a10 +COLUMN asmDiskName HEADING "asmDiskName" FORMAT a25 +COLUMN asmDiskgroupName HEADING "asmDiskgroupName" FORMAT a10 +COLUMN asmFailGroupName HEADING "asmFailGroupName" FORMAT a10 +COLUMN availableTo HEADING "Available|To" FORMAT a10 +COLUMN cachingPolicy HEADING "Caching|Policy" FORMAT a10 +COLUMN offset HEADING "offset|(GB)" FORMAT 999,999 +COLUMN griddisksize HEADING "Size|(GB)" FORMAT 999,999 +COLUMN errorCount HEADING "Error|(#)" FORMAT 99999 + + +SELECT clioutput.cellname + , griddisk.diskType + , griddisk.name + , griddisk.status + , griddisk.asmDiskgroupName + , griddisk.asmDiskName + , griddisk.asmFailGroupName + , griddisk.availableTo + , griddisk.cachingPolicy + , griddisk.creationTime + , griddisk.errorCount + , griddisk.offset/power(1024,3) offset + , griddisk.griddisksize/power(1024,3) griddisksize + FROM v$cell_config cc + , XMLTable('/cli-output' PASSING XMLTYPE(confval) + COLUMNS + cellname VARCHAR2(100) PATH 'context/@cell' + , griddisk XMLTYPE PATH 'griddisk' + ) clioutput + , XMLTable('/griddisk' PASSING clioutput.griddisk + COLUMNS + name VARCHAR2(100) PATH 'name' + , asmDiskgroupName VARCHAR2(100) PATH 'asmDiskgroupName' + , asmDiskName VARCHAR2(100) PATH 'asmDiskName' + , asmFailGroupName VARCHAR2(100) PATH 'asmFailGroupName' + , availableTo VARCHAR2(100) PATH 'availableTo' + , cachingPolicy VARCHAR2(100) PATH 'cachingPolicy' + , creationTime VARCHAR2(100) PATH 'creationTime' + , diskType VARCHAR2(100) PATH 'diskType' + , errorCount NUMBER PATH 'errorCount' + , offset NUMBER PATH 'offset' + , griddisksize NUMBER PATH 'size' + , status VARCHAR2(100) PATH 'status' + ) griddisk +WHERE cc.conftype = 'GRIDDISKS' + AND ( griddisk.status <> 'active' + ) +ORDER BY clioutput.cellname + , griddisk.diskType + , offset + , griddisk.name +; + + +@@footer \ No newline at end of file diff --git a/vg/exa_griddisks.sql b/vg/exa_griddisks.sql new file mode 100644 index 0000000..34c4859 --- /dev/null +++ b/vg/exa_griddisks.sql @@ -0,0 +1,122 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Exadata GridDisks +* Parameters : 1 - Cell Name (Use % for wildcard) +* 2 - DiskType (FlashDisk or HardDisk, Use % for wildcard) +* 3 - DiskName (Use % for wildcard) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Feb-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE cell_name +UNDEFINE diskType +UNDEFINE name + +DEFINE cell_name="&&1" +DEFINE diskType="&&2" +DEFINE name="&&3" + +set term off +COLUMN _cell_name NEW_VALUE cell_name NOPRINT +COLUMN _diskType NEW_VALUE diskType NOPRINT +COLUMN _name NEW_VALUE name NOPRINT + +SELECT DECODE('&&cell_name','','%','&&cell_name') "_cell_name" + , DECODE('&&diskType','','%','&&diskType') "_diskType" + , DECODE('&&name','','%','&&name') "_name" +FROM DUAL; +set term on + +PROMPT +PROMPT ************************************************** +PROMPT * E X A D A T A G R I D D I S K S +PROMPT * +PROMPT * Input Parameter +PROMPT * - Cell Name = "&&cell_name" +PROMPT * - Disk Type = "&&diskType" +PROMPT * - Disk Name = "&&name" +PROMPT ************************************************** + + +COLUMN cellname HEADING "CellName" FORMAT a18 +COLUMN name HEADING "GridDiskName" FORMAT a30 +COLUMN status HEADING "Status" FORMAT a10 +COLUMN creationTime HEADING "Creation|Time" FORMAT a10 TRUNC +COLUMN diskType HEADING "DiskType" FORMAT a10 +COLUMN asmDiskgroupName HEADING "ASM|Diskgroup|Name" FORMAT a10 +COLUMN asmDiskName HEADING "ASM DiskName" FORMAT a30 +COLUMN asmDiskgroupName HEADING "ASM|Diskgroup|Name" FORMAT a15 +COLUMN asmFailGroupName HEADING "ASM|FailGroup|Name" FORMAT a16 +COLUMN availableTo HEADING "Avail|able|To" FORMAT a10 +COLUMN cachingPolicy HEADING "Caching|Policy" FORMAT a10 +COLUMN offset HEADING "Offset|(GB)" FORMAT 999,999 +COLUMN griddisksize HEADING "Size|(GB)" FORMAT 999,999 +COLUMN virtualSize HEADING "Virtual|Size|(GB)" FORMAT 999,999 +COLUMN errorCount HEADING "Error|(#)" FORMAT 99999 +COLUMN sparse HEADING "Sparse" FORMAT a10 + + +SELECT clioutput.cellname + , griddisk.diskType + , griddisk.name + , griddisk.status + , griddisk.asmDiskgroupName + , griddisk.asmDiskName + , griddisk.asmFailGroupName + , griddisk.availableTo + , griddisk.cachingPolicy + , griddisk.creationTime + , griddisk.errorCount + , griddisk.offset/power(1024,3) offset + , griddisk.griddisksize/power(1024,3) griddisksize + , griddisk.virtualSize/power(1024,3) virtualSize + , griddisk.sparse + FROM v$cell_config cc + , XMLTable('/cli-output' PASSING XMLTYPE(confval) + COLUMNS + cellname VARCHAR2(100) PATH 'context/@cell' + , griddisk XMLTYPE PATH 'griddisk' + ) clioutput + , XMLTable('/griddisk' PASSING clioutput.griddisk + COLUMNS + name VARCHAR2(100) PATH 'name' + , asmDiskgroupName VARCHAR2(100) PATH 'asmDiskgroupName' + , asmDiskName VARCHAR2(100) PATH 'asmDiskName' + , asmFailGroupName VARCHAR2(100) PATH 'asmFailGroupName' + , availableTo VARCHAR2(100) PATH 'availableTo' + , cachingPolicy VARCHAR2(100) PATH 'cachingPolicy' + , creationTime VARCHAR2(100) PATH 'creationTime' + , diskType VARCHAR2(100) PATH 'diskType' + , errorCount NUMBER PATH 'errorCount' + , offset NUMBER PATH 'offset' + , griddisksize NUMBER PATH 'size' + , virtualSize NUMBER PATH 'virtualSize' + , status VARCHAR2(100) PATH 'status' + , sparse VARCHAR2(100) PATH 'sparse' + ) griddisk +WHERE cc.conftype = 'GRIDDISKS' + AND UPPER(clioutput.cellname) LIKE UPPER('&&cell_name') + AND UPPER(griddisk.diskType) LIKE UPPER('&&diskType') + AND UPPER(griddisk.name) LIKE UPPER('&&name') +ORDER BY clioutput.cellname + , griddisk.diskType + , offset + , griddisk.name +; + + + +@@footer \ No newline at end of file diff --git a/vg/exa_iorm.sql b/vg/exa_iorm.sql new file mode 100644 index 0000000..97c7673 --- /dev/null +++ b/vg/exa_iorm.sql @@ -0,0 +1,76 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Exadata IORM +* Parameters : 1 - Cell Name (Use % for wildcard) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Feb-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE cell_name + +DEFINE cell_name="&&1" + +set term off +COLUMN _cell_name NEW_VALUE cell_name NOPRINT + +SELECT DECODE('&&cell_name','','%','&&cell_name') "_cell_name" +FROM DUAL; +set term on + +PROMPT +PROMPT **************************************************** +PROMPT * E X A D A T A I O R M +PROMPT * +PROMPT * Input Parameters +PROMPT * CellName = '&&cell_name' +PROMPT **************************************************** + +COLUMN cellname HEADING "CellName" FORMAT a18 +COLUMN iorm_name HEADING "InterDB PlanName" FORMAT a20 +COLUMN status HEADING "Status" FORMAT a15 +COLUMN objective HEADING "Objective" FORMAT a15 +COLUMN catPlan HEADING "Category Plan" FORMAT a25 +COLUMN dbPlan HEADING "DB Plan" FORMAT a25 + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF physicalSize FORMAT 99,999,999,999 ON REPORT + +SELECT clioutput.cellname + , iorm.iorm_name + , iorm.status + , iorm.objective + , iorm.catPlan + , iorm.dbPlan + FROM v$cell_config cc + , XMLTable('/cli-output' PASSING XMLTYPE(confval) + COLUMNS + cellname VARCHAR2(100) PATH 'context/@cell' + , interdatabaseplan XMLTYPE PATH 'interdatabaseplan' + ) clioutput + , XMLTable('/interdatabaseplan' PASSING clioutput.interdatabaseplan + COLUMNS + iorm_name VARCHAR2(100) PATH 'name' + , catPlan VARCHAR2(100) PATH 'catPlan' + , dbPlan VARCHAR2(100) PATH 'dbPlan' + , objective VARCHAR2(100) PATH 'objective' + , status VARCHAR2(100) PATH 'status' + ) iorm +WHERE cc.conftype = 'IORM' + AND UPPER(clioutput.cellname) LIKE UPPER('&&cell_name') +ORDER BY clioutput.cellname +; + + +@@footer \ No newline at end of file diff --git a/vg/exa_luns.sql b/vg/exa_luns.sql new file mode 100644 index 0000000..9710d27 --- /dev/null +++ b/vg/exa_luns.sql @@ -0,0 +1,113 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Exadata LUNs +* Parameters : 1 - Cell Name (Use % for wildcard) +* 2 - DiskType (FlashDisk or HardDisk,Use % for wildcard ) +* 3 - LUN Name (Use % for wildcard) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Feb-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE cell_name +UNDEFINE diskType +UNDEFINE name + +DEFINE cell_name="&&1" +DEFINE diskType="&&2" +DEFINE name="&&3" + +set term off +COLUMN _cell_name NEW_VALUE cell_name NOPRINT +COLUMN _diskType NEW_VALUE diskType NOPRINT +COLUMN _name NEW_VALUE name NOPRINT + +SELECT DECODE('&&cell_name','','%','&&cell_name') "_cell_name" + , DECODE('&&diskType','','%','&&diskType') "_diskType" + , DECODE('&&name','','%','&&name') "_name" +FROM DUAL; +set term on + +PROMPT +PROMPT ************************************************** +PROMPT * E X A D A T A L U N S +PROMPT ************************************************** + + +COLUMN cellname HEADING "CellName" FORMAT a18 +COLUMN diskType HEADING "Disk|Type" FORMAT a10 +COLUMN name HEADING "LUN|Name" FORMAT a5 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN lunSize HEADING "Size|(GB)" FORMAT 999,999 +COLUMN cellDisk HEADING "CellDisk|Name" FORMAT a22 +COLUMN deviceName HEADING "deviceName" FORMAT a12 +COLUMN id HEADING "id" FORMAT a10 +COLUMN isSystemLun HEADING "isSystemLun" FORMAT a5 +COLUMN lunAutoCreate HEADING "lunAutoCreate" FORMAT a6 +COLUMN lunUID HEADING "lunUID" FORMAT a6 +COLUMN physicalDrives HEADING "physicalDrives" FORMAT a10 +COLUMN raidLevel HEADING "Raid|Level" FORMAT a6 +COLUMN lunWriteCacheMode HEADING "lunWriteCacheMode" FORMAT a61 + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF lunSize FORMAT 99,999,999,999 ON REPORT + +SELECT clioutput.cellname + , lun.diskType + , lun.name + , lun.status + , ROUND(lun.lunSize/power(1000,3)) lunSize + , lun.cellDisk + , lun.deviceName + , lun.id + , lun.isSystemLun + , lun.lunAutoCreate + , lun.lunUID + , lun.physicalDrives + , lun.raidLevel + , lun.lunWriteCacheMode + FROM v$cell_config cc + , XMLTable('/cli-output' PASSING XMLTYPE(confval) + COLUMNS + cellname VARCHAR2(100) PATH 'context/@cell' + , lun XMLTYPE PATH 'lun' + ) clioutput + , XMLTable('/lun' PASSING clioutput.lun + COLUMNS + name VARCHAR2(100) PATH 'name' + , cellDisk VARCHAR2(100) PATH 'cellDisk' + , deviceName VARCHAR2(100) PATH 'deviceName' + , diskType VARCHAR2(100) PATH 'diskType' + , id VARCHAR2(100) PATH 'id' + , isSystemLun VARCHAR2(100) PATH 'isSystemLun' + , lunAutoCreate VARCHAR2(100) PATH 'lunAutoCreate' + , lunSize NUMBER PATH 'lunSize' + , lunUID VARCHAR2(100) PATH 'lunUID' + , physicalDrives VARCHAR2(100) PATH 'physicalDrives' + , raidLevel VARCHAR2(100) PATH 'raidLevel' + , lunWriteCacheMode VARCHAR2(100) PATH 'lunWriteCacheMode' + , status VARCHAR2(100) PATH 'status' + ) lun +WHERE cc.conftype = 'LUNS' + AND UPPER(clioutput.cellname) LIKE UPPER('&&cell_name') + AND UPPER(lun.diskType) LIKE UPPER('&&diskType') + AND UPPER(lun.name) LIKE UPPER('&&name') +ORDER BY clioutput.cellname + , lun.diskType + , lun.deviceName +; + + + +@@footer \ No newline at end of file diff --git a/vg/exa_physicaldisks.sql b/vg/exa_physicaldisks.sql new file mode 100644 index 0000000..cd5f6b6 --- /dev/null +++ b/vg/exa_physicaldisks.sql @@ -0,0 +1,159 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Exadata PhysicalDisks +* Parameters : 1 - Cell Name (Use % for wildcard) +* 2 - DiskType (FlashDisk or HardDisk,Use % for wildcard ) +* 3 - PhysicalDisk Name (Use % for wildcard) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Feb-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE cell_name +UNDEFINE diskType +UNDEFINE name + +DEFINE cell_name="&&1" +DEFINE diskType="&&2" +DEFINE name="&&3" + +set term off +COLUMN _cell_name NEW_VALUE cell_name NOPRINT +COLUMN _diskType NEW_VALUE diskType NOPRINT +COLUMN _name NEW_VALUE name NOPRINT + +SELECT DECODE('&&cell_name','','%','&&cell_name') "_cell_name" + , DECODE('&&diskType','','%','&&diskType') "_diskType" + , DECODE('&&name','','%','&&name') "_name" +FROM DUAL; +set term on + +PROMPT +PROMPT **************************************************** +PROMPT * E X A D A T A P H Y S I C A L D I S K S +PROMPT * +PROMPT * Input Parameters +PROMPT * CellName = '&&cell_name' +PROMPT * DiskType = '&&diskType' +PROMPT * PhyDiskName = '&&name' +PROMPT **************************************************** + +COLUMN cellname HEADING "CellName" FORMAT a18 +COLUMN diskType HEADING "Disk|Type" FORMAT a10 +COLUMN name HEADING "PhyDisk|Name" FORMAT a10 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN physicalSize HEADING "Size|(GB)" FORMAT 999,999 +COLUMN foreignState HEADING "Foreign|State" FORMAT a7 +COLUMN physicalFirmware HEADING "Firm|Ware" FORMAT a8 +COLUMN physicalInsertTime HEADING "InsertTime" FORMAT a19 TRUNC +COLUMN physicalInterface HEADING "Inter|face" FORMAT a5 +COLUMN physicalSerial HEADING "Serial No" FORMAT a18 +COLUMN slotNumber HEADING "slotNumber" FORMAT a10 +COLUMN id HEADING "id" FORMAT a10 +COLUMN key_500 HEADING "key_500" FORMAT a10 +COLUMN predfailStatus HEADING "Pred|Fail|Status" FORMAT a6 +COLUMN poorPerfStatus HEADING "Poor|Perf|Status" FORMAT a6 +COLUMN wtCachingStatus HEADING "Write|Through|Caching|Status" FORMAT a7 +COLUMN peerFailStatus HEADING "Peer|Fail|Status" FORMAT a6 +COLUMN criticalStatus HEADING "Critical|Status" FORMAT a6 +COLUMN physicalDatedSerial HEADING "Physical|Dated|Serial" FORMAT a12 +COLUMN errMediaCount HEADING "Media|Error|Count" FORMAT 9999999 +COLUMN errorCount HEADING "|Error|Count" FORMAT 9999999 +COLUMN errHardReadCount HEADING "HardRead|Error|Count" FORMAT 9999999 +COLUMN errHardWriteCount HEADING "HardWrite|Error|Count" FORMAT 9999999 +COLUMN errorCount HEADING "Error|Count" FORMAT 9999999 +COLUMN errOtherCount HEADING "Other|Error|Count" FORMAT 9999999 + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF physicalSize FORMAT 99,999,999,999 ON REPORT + +SELECT clioutput.cellname + , pd.diskType + , pd.name + , pd.status + , ROUND(pd.physicalSize/power(1000,3)) physicalSize + --, pd.deviceId + --, pd.devicePartition + --, pd.enclosureDeviceId + , pd.foreignState + --, pd.luns + --, pd.makeModel + , pd.physicalFirmware + , pd.physicalInsertTime + , pd.physicalInterface + , pd.physicalSerial + --, pd.slotNumber + --, pd.id + --, pd.key_500 + , pd.predfailStatus + , pd.poorPerfStatus + , pd.wtCachingStatus + , pd.peerFailStatus + , pd.criticalStatus + , pd.physicalDatedSerial + , pd.errCmdTimeoutCount + , pd.errMediaCount + , pd.errHardReadCount + , pd.errHardWriteCount + , pd.errorCount + , pd.errOtherCount + FROM v$cell_config cc + , XMLTable('/cli-output' PASSING XMLTYPE(confval) + COLUMNS + cellname VARCHAR2(100) PATH 'context/@cell' + , physicaldisk XMLTYPE PATH 'physicaldisk' + ) clioutput + , XMLTable('/physicaldisk' PASSING clioutput.physicaldisk + COLUMNS + NAME VARCHAR2(100) PATH 'name' + , deviceId VARCHAR2(100) PATH 'deviceId' + , diskType VARCHAR2(100) PATH 'diskType' + , devicePartition VARCHAR2(100) PATH 'devicePartition' + , enclosureDeviceId VARCHAR2(100) PATH 'enclosureDeviceId' + , errCmdTimeoutCount INTEGER PATH 'errCmdTimeoutCount' + , errHardReadCount INTEGER PATH 'errHardReadCount' + , errHardWriteCount INTEGER PATH 'errHardWriteCount' + , errMediaCount INTEGER PATH 'errMediaCount' + , errorCount INTEGER PATH 'errorCount' + , errOtherCount INTEGER PATH 'errOtherCount' + , foreignState VARCHAR2(100) PATH 'foreignState' + , luns VARCHAR2(100) PATH 'luns' + , makeModel VARCHAR2(100) PATH 'makeModel' + , physicalFirmware VARCHAR2(100) PATH 'physicalFirmware' + , physicalInsertTime VARCHAR2(100) PATH 'physicalInsertTime' + , physicalInterface VARCHAR2(100) PATH 'physicalInterface' + , physicalSerial VARCHAR2(100) PATH 'physicalSerial' + , physicalSize INTEGER PATH 'physicalSize' + , slotNumber VARCHAR2(100) PATH 'slotNumber' + , status VARCHAR2(100) PATH 'status' + , id VARCHAR2(100) PATH 'id' + , key_500 VARCHAR2(100) PATH 'key_500' + , predfailStatus VARCHAR2(100) PATH 'predfailStatus' + , poorPerfStatus VARCHAR2(100) PATH 'poorPerfStatus' + , wtCachingStatus VARCHAR2(100) PATH 'wtCachingStatus' + , peerFailStatus VARCHAR2(100) PATH 'peerFailStatus' + , criticalStatus VARCHAR2(100) PATH 'criticalStatus' + , physicalDatedSerial VARCHAR2(100) PATH 'physicalDatedSerial' + ) pd +WHERE cc.conftype = 'PHYSICALDISKS' + AND UPPER(clioutput.cellname) LIKE UPPER('&&cell_name') + AND UPPER(pd.diskType) LIKE UPPER('&&diskType') + AND UPPER(pd.name) LIKE UPPER('&&name') +ORDER BY clioutput.cellname + , pd.diskType + , pd.slotNumber +; + + +@@footer \ No newline at end of file diff --git a/vg/explain_result.sql b/vg/explain_result.sql new file mode 100644 index 0000000..5c44a14 --- /dev/null +++ b/vg/explain_result.sql @@ -0,0 +1,170 @@ +accept STATEMENT_ID prompt "Enter Statement Id set for explain plan :" + +SELECT LEVEL, + operation + || DECODE (options, NULL, '', ' ' || options) + || DECODE (ID, + 0, DECODE (optimizer, + NULL, '', + ' Optimizer Mode=' || optimizer + ) + ), + DECODE (object_name, + NULL, ' ', + object_owner || '.' || object_name + ), + DECODE (cardinality, + NULL, ' ', + DECODE (SIGN (cardinality - 1000), + -1, cardinality || ' ', + DECODE (SIGN (cardinality - 1000000), + -1, TRUNC (cardinality / 1000) || ' K', + DECODE (SIGN (cardinality - 1000000000), + -1, TRUNC (cardinality / 1000000) + || ' M', + TRUNC (cardinality / 1000000000) + || ' G' + ) + ) + ) + ) numrows, + DECODE (BYTES, + NULL, ' ', + DECODE (SIGN (BYTES - 1024), + -1, BYTES || ' ', + DECODE (SIGN (BYTES - 1048576), + -1, TRUNC (BYTES / 1024) || ' K', + DECODE (SIGN (BYTES - 1073741824), + -1, TRUNC (BYTES / 1048576) || ' M', + TRUNC (BYTES / 1073741824) || 'G' + ) + ) + ) + ) BYTES, + DECODE (COST, + NULL, ' ', + DECODE (SIGN (COST - 10000000), + -1, COST || ' ', + DECODE (SIGN (COST - 1000000000), + -1, TRUNC (COST / 1000000) || ' M', + TRUNC (COST / 1000000000) || ' G' + ) + ) + ) COST, + DECODE (object_node, NULL, ' ', object_node) tq, + LPAD + ( DECODE + (other_tag, + NULL, ' ', + DECODE + (other_tag, + 'PARALLEL_TO_SERIAL', ' P->S', + DECODE + (other_tag, + 'PARALLEL_TO_PARALLEL', ' P->P', + DECODE + (other_tag, + 'PARALLEL_COMBINED_WITH_PARENT', ' PCWP', + DECODE + (other_tag, + 'PARALLEL_FROM_SERIAL', ' S->P', + DECODE (other_tag, + 'PARALLEL_COMBINED_WITH_CHILD', +' PCWC', + DECODE (other_tag, + NULL, ' ', + other_tag + ) + ) + ) + ) + ) + ) + ) + || ' ', + 6, + ' ' + ), + RPAD + ( ' ' + || DECODE (distribution, + NULL, ' ', + DECODE (distribution, + 'PARTITION (ROWID)', 'PART (RID)', + DECODE (distribution, + 'PARTITION (KEY)', 'PART (KEY)', + DECODE (distribution, + 'ROUND-ROBIN', 'RND-ROBIN', + DECODE (distribution, + 'BROADCAST', +'BROADCAST', + distribution + ) + ) + ) + ) + ), + 12, + ' ' + ) + || DECODE + (partition_start, + 'ROW LOCATION', 'ROWID', + DECODE + (partition_start, + 'KEY', 'KEY', + DECODE + (partition_start, + 'KEY(INLIST)', 'KEY(I)', + DECODE (SUBSTR (partition_start, 1, 6), + 'NUMBER', SUBSTR + (SUBSTR (partition_start, 8, 10), + 1, + LENGTH + (SUBSTR (partition_start, + 8, + 10 + ) + ) + - 1 + ), + DECODE (partition_start, + NULL, ' ', + partition_start + ) + ) + ) + ) + ) pstart, + DECODE + (partition_stop, + 'ROW LOCATION', 'ROW L', + DECODE + (partition_stop, + 'KEY', 'KEY', + DECODE (partition_stop, + 'KEY(INLIST)', 'KEY(I)', + DECODE (SUBSTR (partition_stop, 1, 6), + 'NUMBER', SUBSTR + (SUBSTR (partition_stop, 8, 10), + 1, + LENGTH + (SUBSTR (partition_stop, + 8, + 10 + ) + ) + - 1 + ), + DECODE (partition_stop, + NULL, ' ', + partition_stop + ) + ) + ) + ) + ) pstop + FROM plan_table +START WITH ID = 0 AND STATEMENT_ID = &STATEMENT_ID +CONNECT BY PRIOR ID = parent_id AND STATEMENT_ID = &STATEMENT_ID + ORDER BY ID, POSITIONs \ No newline at end of file diff --git a/vg/find_trace.sql b/vg/find_trace.sql new file mode 100644 index 0000000..7c8b488 --- /dev/null +++ b/vg/find_trace.sql @@ -0,0 +1,13 @@ +set lines 200 +col tracefile_name format a200 +SELECT rtrim(k.value,'/')||'/'||d.instance_name||'_ora_'||p.spid +||DECODE(p.value,'','','_'||p.value)||'.trc' tracefile_name +FROM v$parameter k, v$parameter p, v$instance d, + sys.v_$session s, sys.v_$process p, + (SELECT sid FROM v$mystat WHERE rownum=1) m +WHERE p.name = 'tracefile_identifier' + AND k.name = 'user_dump_dest' + AND s.paddr = p.addr + AND s.sid = m.sid +/ + diff --git a/vg/fix_control.sql b/vg/fix_control.sql new file mode 100644 index 0000000..a5d7662 --- /dev/null +++ b/vg/fix_control.sql @@ -0,0 +1,65 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display bug fixes +* Versions : 11.1 and above +* Parameters : 1 - search string ( +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-JUL-14 Vishal Gupta Added bugno to the search criteria +* 01-MAY-14 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE searchstring +DEFINE searchstring="&&1" + +COLUMN _searchstring NEW_VALUE searchstring NOPRINT + +set term off +SELECT DECODE('&&searchstring','','%',UPPER('&&searchstring')) "_searchstring" +FROM DUAL; +set term on + + +PROMPT ***************************************************************** +PROMPT * Bug Fixes +PROMPT * +PROMPT * Input Parameters +PROMPT * - Search String = '&&searchstring' +PROMPT ***************************************************************** + +COLUMN bugno HEADING "BUG" FORMAT 999999999 +COLUMN value HEADING "Value" FORMAT 9999 +COLUMN is_default HEADING "Default" FORMAT 99999 +COLUMN optimizer_feature_enable HEADING "Optimizer|Feature|Enable" FORMAT a9 +COLUMN event HEADING "Event" FORMAT 9999999 +COLUMN sql_feature HEADING "SQL Feature" FORMAT a35 +COLUMN description HEADING "Description" FORMAT a90 + + +SELECT s.bugno + , s.value + , s.is_default + , s.optimizer_feature_enable + , s.event + , s.sql_feature + , s.description + FROM v$system_fix_control s + WHERE UPPER(s.bugno) LIKE '&&searchstring' + OR UPPER(s.optimizer_feature_enable) LIKE '&&searchstring' + OR UPPER(s.sql_feature) LIKE '&&searchstring' + OR UPPER(s.description) LIKE '&&searchstring' +; + +UNDEFINE searchstring + +@@footer diff --git a/vg/flush_force_matching_signature.sql b/vg/flush_force_matching_signature.sql new file mode 100644 index 0000000..00f0c11 --- /dev/null +++ b/vg/flush_force_matching_signature.sql @@ -0,0 +1,25 @@ +DEFINE force_matching_signature="&&1" + +DECLARE + name varchar2(50); + version varchar2(3); +BEGIN + select regexp_replace(version,'\..*') into version from v$instance; + + if version = '10' then + execute immediate + q'[alter session set events '5614566 trace name context forever']'; -- bug fix for 10.2.0.4 backport + end if; + + for i in ( select address||','||hash_value name + from v$sqlarea + where force_matching_signature = &&force_matching_signature + ) + LOOP + sys.dbms_shared_pool.purge(i.name,'C',1); + END LOOP; +END; +/ + + +UNDEFINE sql_id diff --git a/vg/flush_sql.sql b/vg/flush_sql.sql new file mode 100644 index 0000000..b3341ae --- /dev/null +++ b/vg/flush_sql.sql @@ -0,0 +1,24 @@ +DEFINE sql_id="&&1" + +DECLARE + name varchar2(50); + version varchar2(3); +BEGIN + select regexp_replace(version,'\..*') into version from v$instance; + + if version = '10' then + execute immediate + q'[alter session set events '5614566 trace name context forever']'; -- bug fix for 10.2.0.4 backport + end if; + + select address||','||hash_value into name + from v$sqlarea + where sql_id like '&sql_id'; + + sys.dbms_shared_pool.purge(name,'C',1); + +END; +/ + + +UNDEFINE sql_id \ No newline at end of file diff --git a/vg/footer.sql b/vg/footer.sql new file mode 100644 index 0000000..0d27ce2 --- /dev/null +++ b/vg/footer.sql @@ -0,0 +1,52 @@ + +/* +* +* Author : Vishal Gupta +* Purpose : This script is called at end of every other script +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta Created +* +*/ + + +-- VG_SPOOLFILE is being set in the login.sql +-- spool again to flush the buffer contents to file +--spool &&VG_SPOOLFILE append + +CLEAR COLUMNS +CLEAR BREAKS +CLEAR COMPUTES + +set trimspool on +set feed on +set arraysize 5000 +set lines 80 +set pages 80 +set verify on +set sqlblankline on +set serveroutput on +set tab off +set term on +--start backupenv + +DEFINE 1="" +DEFINE 2="" +DEFINE 3="" +DEFINE 4="" +DEFINE 5="" +DEFINE 6="" +DEFINE 7="" +DEFINE 8="" +DEFINE 9="" +DEFINE 10="" + +-- VG_SPOOLFILE is being set in the login.sql +-- spool again to flush the buffer contents to file +-- spool &&VG_SPOOLFILE append + +--set echo on +PROMPT \ No newline at end of file diff --git a/vg/freespace.sql b/vg/freespace.sql new file mode 100644 index 0000000..f5a6b34 --- /dev/null +++ b/vg/freespace.sql @@ -0,0 +1,8 @@ +SELECT tablespace_name, sum ( blocks ) as free_blk , + trunc ( sum ( bytes ) / (1024*1024) ) as free_m , + max ( bytes ) / (1024) as big_chunk_k, + count (*) as num_chunks +FROM dba_free_space +GROUP BY tablespace_name +/ + diff --git a/vg/full_jvminst_902.sql b/vg/full_jvminst_902.sql new file mode 100644 index 0000000..0d6ca3a --- /dev/null +++ b/vg/full_jvminst_902.sql @@ -0,0 +1,28 @@ +-- Start of File full_jvminst.sql +spool full_jvminst.log; +set echo on +connect / as sysdba +startup mount +alter system set "_system_trig_enabled" = false scope=memory; +alter database open; +show parameters _system +select obj#, name from obj$ +where type#=28 or type#=29 or type#=30 or namespace=32; +@?/javavm/install/initjvm.sql +select count(*), object_type from all_objects +where object_type like '%JAVA%' group by object_type; +@?/xdk/admin/initxml.sql +select count(*), object_type from all_objects +where object_type like '%JAVA%' group by object_type; +@?/xdk/admin/xmlja.sql +select count(*), object_type from all_objects +where object_type like '%JAVA%' group by object_type; +@?/rdbms/admin/catjava.sql +select count(*), object_type from all_objects +where object_type like '%JAVA%' group by object_type; +shutdown immediate +set echo off +spool off +exit +-- End of File full_jvminst.sql + diff --git a/vg/full_rmjvm_902.sql b/vg/full_rmjvm_902.sql new file mode 100644 index 0000000..a4b9cac --- /dev/null +++ b/vg/full_rmjvm_902.sql @@ -0,0 +1,29 @@ +-- Start of File full_rmjvm.sql +spool full_rmjvm.log +set echo on +connect / as sysdba +startup mount +alter system set "_system_trig_enabled" = false scope=memory; +alter system enable restricted session; +alter database open; +show parameters _system +@?/rdbms/admin/rmaqjms.sql +@?/rdbms/admin/rmcdc.sql +@?/xdk/admin/rmxml.sql +@?/javavm/install/rmjvm.sql +truncate table java$jvm$status; +select * from obj$ where obj#=0 and type#=0; +delete from obj$ where obj#=0 and type#=0; +commit; +select owner, count(*) from all_objects +where object_type like '%JAVA%' group by owner; +select obj#, name from obj$ +where type#=28 or type#=29 or type#=30 or namespace=32; +select o1.name from obj$ o1,obj$ o2 +where o1.type#=5 and o1.owner#=1 and o1.name=o2.name and o2.type#=29; +shutdown immediate +set echo off +spool off +exit +-- End of File full_rmjvm.sql + diff --git a/vg/gen_rollback_script.sql b/vg/gen_rollback_script.sql new file mode 100644 index 0000000..09dcfd2 --- /dev/null +++ b/vg/gen_rollback_script.sql @@ -0,0 +1,10 @@ +Set heading off +Set linesize 1000 + +spool createroll.sql + +select 'Create rollback segment '|| segment_name ||' '||'storage (initial '|| INITIAL_EXTENT || +' NEXT '||NEXT_EXTENT ||' ' || 'MINEXTENTS'||' '|| MIN_EXTENTS ||')'|| 'TABLESPACE '|| TABLESPACE_NAME ||';' +FROM DBA_ROLLBACK_SEGS WHERE TABLESPACE_NAME <>'SYSTEM'; + +spool off; diff --git a/vg/genuserdef.sql b/vg/genuserdef.sql new file mode 100644 index 0000000..51fcaae --- /dev/null +++ b/vg/genuserdef.sql @@ -0,0 +1,550 @@ +SET ECHO off +REM NAME: GENUSERDEF.SQL +REM USAGE:"@path/genuserdef" +REM ------------------------------------------------------------------------ +REM REQUIREMENTS: +REM I have set the UTL_FILE_DIR ini the init.ora file to /tmp (on UNIX that is) +REM This is done because all UNIX systems have this directory present and it +REM is writable by all. +REM IF you are going to run this on any other platform, set it to you own +REM favourite directory and make sure that the init.ora files reflect it and +REM that your instance is restarted with this parameter, else you will receive +REM error messages from this script. +REM +REM WARNING -- WARNING -- WARNING -- WARNING +REM This script will currently only work on 8i versions, i.e. 8.1.x or higher +REM ------------------------------------------------------------------------ +REM AUTHOR: +REM Svein Erik Brostigen, Oracle Support Services - Orlando, Fl USA +REM Copyright 2000, Oracle Corporation +REM ------------------------------------------------------------------------ +REM PURPOSE: +REM Script to create a sql-script that will recreate the schema objects for all +REM users except SYS and SYSTEM in the database. +REM +REM I decided to write this script because we often have customers that have +REM no way of recreating their database objects or even know if anyone +REM have a script that will recreate the objects. +REM +REM +REM These first version does not include partitions or some of the more esoteric +REM features of 8i. I hope to include these in later versions. +REM +REM Any errors that you may find in this script, please mail me any relevant +REM information such as: init.ora file, alert log, your environment, complete +REM error message and any trace files. +REM E-mail to : ebrostig@us.oracle.com +REM +REM History: +REM 0.1 - 09/27/99 ebrostig.us +REM Initial version +REM +REM 0.2 - 10/09/99 ebrostig.us +REM Added clusters, views, triggers +REM +REM 0.3 - 10/20/99 ebrostig.us +REM Added sequnces +REM +REM 0.4 - 11/25/99 ebrostig.us +REM Added creation of users +REM ------------------------------------------------------------------------ +REM DISCLAIMER: +REM This script is provided for educational purposes only. It is NOT +REM supported by Oracle World Wide Technical Support. +REM The script has been tested and appears to work as intended. +REM You should always run new scripts on a test instance initially. +REM ------------------------------------------------------------------------ +REM Main text of script follows: + + +declare + first number; + chunk_size number :=254; + chunk_size_returned number; + cur_pos number:=0; + data_chunk varchar2(254); + stmt varchar2(1024); + dir varchar2(1024) := '/tmp'; + file_name varchar2(1024) := 'create-schema.sql'; + + -- Information on all users + v_username sys.all_users.username%TYPE; + + -- Information on user accounts from dba_users + v_user_username sys.dba_users.username%TYPE; + v_user_password sys.dba_users.password%TYPE; + v_user_default_tablespace sys.dba_users.default_tablespace%TYPE; + v_user_temporary_tablespace sys.dba_users.temporary_tablespace%TYPE; + v_user_profile sys.dba_users.profile%TYPE; + + -- Information on all sequences + v_seq_sequence_name sys.all_sequences.sequence_name%TYPE; + v_seq_min_value sys.all_sequences.min_value%TYPE; + v_seq_max_value sys.all_sequences.max_value%TYPE; + v_seq_increment_by sys.all_sequences.increment_by%TYPE; + v_seq_cycle_flag sys.all_sequences.cycle_flag%TYPE; + v_seq_order_flag sys.all_sequences.order_flag%TYPE; + v_seq_cache_size sys.all_sequences.cache_size%TYPE; + v_seq_last_number sys.all_sequences.last_number%TYPE; + + -- Information on all clusters + v_clus_cluster_name sys.all_clusters.cluster_name%TYPE; + v_clus_ts sys.all_clusters.tablespace_name%TYPE; + v_clus_pct_free sys.all_clusters.pct_free%TYPE; + v_clus_pct_used sys.all_clusters.pct_used%TYPE; + v_clus_key_size sys.all_clusters.key_size%TYPE; + v_clus_ini_trans sys.all_clusters.ini_trans%TYPE; + v_clus_max_trans sys.all_clusters.max_trans%TYPE; + v_clus_initial_extent sys.all_clusters.initial_extent%TYPE; + v_clus_next_extent sys.all_clusters.next_extent%TYPE; + v_clus_min_extents sys.all_clusters.min_extents%TYPE; + v_clus_max_extents sys.all_clusters.max_extents%TYPE; + v_clus_pct_increase sys.all_clusters.pct_increase%TYPE; + v_clus_freelists sys.all_clusters.freelists%TYPE; + v_clus_freelist_groups sys.all_clusters.freelist_groups%TYPE; + v_clus_cluster_type sys.all_clusters.cluster_type%TYPE; + v_clus_function sys.all_clusters.function%TYPE; + v_clus_hashkeys sys.all_clusters.hashkeys%TYPE; + v_clus_degree sys.all_clusters.degree%TYPE; + v_clus_cache sys.all_clusters.cache%TYPE; + v_clus_single_table sys.all_clusters.single_table%TYPE; + + -- Information on all cluster hash expressions + v_clh_hash_expression sys.all_cluster_hash_expressions.hash_expression%TYPE; + + + -- Information on all tables + v_owner sys.all_tables.owner%TYPE; + v_table_name sys.all_tables.table_name%TYPE; + v_tablespace_name sys.all_tables.tablespace_name%TYPE; + v_initial_extent sys.all_tables.initial_extent%TYPE; + v_next_extent sys.all_tables.next_extent%TYPE; + v_pct_increase sys.all_tables.pct_increase%TYPE; + v_cluster_name sys.all_tables.cluster_name%TYPE; + v_degree sys.all_tables.degree%TYPE; + v_min_extents sys.all_tables.min_extents%TYPE; + v_max_extents sys.all_tables.max_extents%TYPE; + v_freelists sys.all_tables.freelists%TYPE; + v_freelist_groups sys.all_tables.freelist_groups%TYPE; + v_ini_trans sys.all_tables.ini_trans%TYPE; + v_max_trans sys.all_tables.max_trans%TYPE; + + + -- Information on columns + v_column_name sys.all_tab_columns.column_name%TYPE; + v_data_type sys.all_tab_columns.data_type%TYPE; + v_data_length sys.all_tab_columns.data_length%TYPE; + v_nullable sys.all_tab_columns.nullable%TYPE; + v_data_precision sys.all_tab_columns.data_precision%TYPE; + + -- Information triggers + v_trigger_name sys.all_triggers.trigger_name%TYPE; + v_trigger_type sys.all_triggers.trigger_type%TYPE; + v_triggering_event sys.all_triggers.triggering_event%TYPE; + v_table_owner sys.all_triggers.table_owner%TYPE; + v_trigtab_name sys.all_triggers.table_name%TYPE; + v_when_clause sys.all_triggers.when_clause%TYPE; + v_status sys.all_triggers.status%TYPE; + v_description sys.all_triggers.description%TYPE; + v_trigger_body sys.all_triggers.trigger_body%TYPE; + + -- Information on constraints + v_constraint_name sys.all_constraints.constraint_name%TYPE; + v_constraint_type sys.all_constraints.constraint_type%TYPE; + v_cons_status sys.all_constraints.status%TYPE; + + -- Information on constraint columns + v_cons_column sys.all_cons_columns.column_name%TYPE; + + -- Information on views + v_view_name sys.all_views.view_name%TYPE; + v_text sys.all_views.text%TYPE; + + + + + outfile utl_file.file_type; + + cursor c_dba_users is + select username, password, default_tablespace, temporary_tablespace, profile from sys.dba_users where username=v_username; + + cursor c_user is + select username from all_users where username != 'SYS' and username != 'SYSTEM'; + + cursor c_sequence is + select sequence_name, min_value, max_value, increment_by, cycle_flag, order_flag, cache_size, last_number + from sys.all_sequences where sequence_owner=v_username; + + cursor c_cluster is + select cluster_name, tablespace_name, pct_free, pct_used, key_size, ini_trans, max_trans, initial_extent, + next_extent, min_extents, max_extents, pct_increase, freelists, freelist_groups, cluster_type, function, + hashkeys, degree, cache, single_table from sys.all_clusters where owner=v_username; + + cursor c_tables is + select owner, table_name, tablespace_name, initial_extent, next_extent, pct_increase, degree from sys.all_tables + where owner=v_username; + + cursor c_columns is + select column_name, data_type, data_length, nullable, data_precision from sys.all_tab_columns where table_name=v_table_name and owner = v_owner; + + cursor c_triggers is + select trigger_name, trigger_type, triggering_event, table_owner, table_name, when_clause, status, + description, trigger_body from all_triggers where table_name=v_table_name and owner = v_owner; + + cursor c_constraints is + select constraint_name, constraint_type, status from sys.all_constraints where table_name = v_table_name and owner + = v_owner; + + cursor c_cons_columns is + select column_name from sys.all_cons_columns where constraint_name = v_constraint_name and owner = + v_owner order by position; + + cursor c_views is + select view_name, text from sys.all_views where owner = v_owner order by view_name; + + + PROCEDURE dump_body(trigger_name IN VARCHAR2, stmt IN varchar2) + IS + data_chunk VARCHAR2(254); -- these can go higher + chunk_size NUMBER:=254; -- up to 32k + chunk_size_returned NUMBER; + mycursor INTEGER; + cur_pos NUMBER:=0; + rows NUMBER; + dummy NUMBER; + status VARCHAR2(50); + tmpfile utl_file.file_type; + BEGIN + + tmpfile := utl_file.fopen(dir, file_name, 'a', 32767); + mycursor:=dbms_sql.open_cursor; + dbms_sql.parse(mycursor, stmt, dbms_sql.v7); + dbms_sql.bind_variable(mycursor, ':trigger_name', trigger_name); + + dbms_sql.define_column_long(mycursor,1); + dummy:=dbms_sql.execute(mycursor); + rows:=dbms_sql.fetch_rows(mycursor); + loop + -- fetch 'chunks' of the long until we have got the lot + dbms_sql.column_value_long(mycursor, + 1, + chunk_size, + cur_pos, + data_chunk, + chunk_size_returned); + utl_file.put(tmpfile, data_chunk); -- use PUT to preserve data + cur_pos:=cur_pos + chunk_size; + exit when chunk_size_returned = 0; + end loop; + dbms_sql.close_cursor(mycursor); + utl_file.fflush(tmpfile); + utl_file.fclose(tmpfile); + EXCEPTION + when utl_file.invalid_path then + raise_application_error(-20100, 'Invalid path in dump_body'); + when utl_file.invalid_mode then + raise_application_error(-20101, 'Invalid mode in dump_body'); + when utl_file.invalid_operation then + raise_application_error(-20102, 'Invalid operation in dump_body'); + when utl_file.invalid_filehandle then + raise_application_error(-20103, 'Invalid filehandle in dump_body'); + when utl_file.write_error then + raise_application_error(-20104, 'Write error in dump_body'); + when utl_file.read_error then + raise_application_error(-20105, 'Read error in dump_body'); + when utl_file.internal_error then + raise_application_error(-20106, 'Internal error in dump_body'); + WHEN OTHERS THEN + raise_application_error(-20107, 'Other Error in dump_body'); + END dump_body; + + +-- Begin the main loop... +begin + outfile := utl_file.fopen(dir, file_name, 'w'); + utl_file.putf(outfile, '-- Create schema objects script\n--\n-- Version 0.4 11/25/1999\n-- Copyright (c) 1999 Oracle Corp., USA\n-- Written by: ebrostig@us.oracle.com\n\n'); + utl_file.putf(outfile, 'Created on %s\n', sysdate); + utl_file.putf(outfile, '\n-- Create all the non system users first...\n'); + open c_user; + loop + fetch c_user into v_username; + exit when c_user%NOTFOUND; + + open c_dba_users; + loop + fetch c_dba_users into v_user_username, v_user_password, v_user_default_tablespace, v_user_temporary_tablespace, v_user_profile; + exit when c_dba_users%NOTFOUND; + + utl_file.putf(outfile, 'CREATE USER %s IDENTIFIED BY VALUES ''%s'' ',v_user_username, v_user_password); + utl_file.putf(outfile, 'DEFAULT TABLESPACE %s TEMPORARY TABLESPACE %s ', v_user_default_tablespace, v_user_temporary_tablespace); + utl_file.putf(outfile, 'PROFILE %s;\n', v_user_profile); + end loop; + close c_dba_users; + end loop; + close c_user; + utl_file.putf(outfile, '\n-- Finished creating all non-system users...\n'); + + open c_user; + loop + fetch c_user into v_username; + exit when c_user%NOTFOUND; + + -- Lets create the sequences, drop them first and creat them afterwards. + -- ?? Should last_number be set as a min_value when the sequences is recreated? Option? + + open c_sequence; + loop + fetch c_sequence into v_seq_sequence_name, v_seq_min_value, v_seq_max_value, v_seq_increment_by, + v_seq_cycle_flag, v_seq_order_flag, v_seq_cache_size, v_seq_last_number; + exit when c_sequence%NOTFOUND; + + utl_file.putf(outfile, '\n-- Drop sequence first...\n'); + utl_file.putf(outfile, 'DROP SEQUENCE %s.%s;\n', v_username, v_seq_sequence_name); + utl_file.putf(outfile, '\n-- Create statement for sequence %s.%s\n\n', v_username, + v_seq_sequence_name); + utl_file.putf(outfile, 'CREATE SEQUENCE %s.%s\n', v_username, v_seq_sequence_name); + utl_file.putf(outfile, 'INCREMENT BY %s\n', v_seq_increment_by); + utl_file.putf(outfile, 'MINVALUE %s\n', v_seq_min_value); + utl_file.putf(outfile, 'MAXVALUE %s\n', v_seq_max_value); + if v_seq_cycle_flag = 'Y' then + utl_file.putf(outfile, 'CYCLE\n'); + else + utl_file.putf(outfile, 'NOCYCLE\n'); + end if; + if v_seq_order_flag = 'Y' then + utl_file.putf(outfile, 'ORDER\n'); + else + utl_file.putf(outfile, 'NOORDER\n'); + end if; + if v_seq_cache_size = 0 then + utl_file.putf(outfile, 'NOCACHE;\n'); + else + utl_file.putf(outfile, 'CACHE %s;\n', v_seq_cache_size); + end if; + end loop; + close c_sequence; + + -- Drop and recreate the clusters. Needs to be done before any tables are created. + + open c_cluster; + loop + fetch c_cluster into v_clus_cluster_name, v_clus_ts, v_clus_pct_free, v_clus_pct_used, + v_clus_key_size, v_clus_ini_trans, v_clus_max_trans, v_clus_initial_extent, v_clus_next_extent, + v_clus_min_extents, v_clus_max_extents, v_clus_pct_increase, v_clus_freelists, + v_clus_freelist_groups, v_clus_cluster_type, v_clus_function, v_clus_hashkeys, v_clus_degree, + v_clus_cache, v_clus_single_table; + exit when c_cluster%NOTFOUND; + utl_file.putf(outfile, '\n-- Drop cluster cascade first...\n'); + utl_file.putf(outfile, 'DROP CLUSTER %s.%s CASCADE CONSTRAINTS;\n', v_owner, v_clus_cluster_name); + utl_file.putf(outfile, '\n-- Create statement for cluster %s.%s\n\n', v_owner, v_clus_cluster_name); + utl_file.putf(outfile, 'CREATE CLUSTER %s.%s (', v_owner, v_clus_cluster_name); + open c_columns; + first := 1; + loop + fetch c_columns into v_column_name, v_data_type, v_data_length, v_nullable, v_data_precision; + exit when c_columns%NOTFOUND; + if first = 1 then + if v_data_type = 'CHAR' or v_data_type = 'VARCHAR2' or v_data_type = 'NCHAR' or v_data_type = 'NVARCHAR2' or v_data_type = 'RAW' or v_data_type = 'UROWID' then + utl_file.putf(outfile, '\n%s %s(%s)', v_column_name, v_data_type,v_data_length); + elsif v_data_type = 'NUMBER' then + if v_data_precision != '' then + utl_file.putf(outfile, '\n%s %s(%s,%s)', v_column_name, v_data_type,v_data_length,v_data_precision); + else + utl_file.putf(outfile, '\n%s %s(%s)', v_column_name, v_data_type,v_data_length); + end if; + + else + utl_file.putf(outfile, '\n%s %s', v_column_name, v_data_type); + end if; + first := 0; + else + if v_data_type = 'CHAR' or v_data_type = 'VARCHAR2' or v_data_type = 'NCHAR' or v_data_type = 'NVARCHAR2' or v_data_type = 'RAW' or v_data_type = 'UROWID' then + utl_file.putf(outfile, ',\n%s %s(%s)', v_column_name, v_data_type,v_data_length); + elsif v_data_type = 'NUMBER' then + if v_data_precision != '' then + utl_file.putf(outfile, ',\n%s %s(%s,%s)', v_column_name, v_data_type,v_data_length,v_data_precision); + else + utl_file.putf(outfile, ',\n%s %s(%s)', v_column_name, v_data_type,v_data_length); + end if; + else + utl_file.putf(outfile, ',\n%s %s', v_column_name, v_data_type); + end if; + end if; + if v_nullable = 'N' then + utl_file.putf(outfile, ' NOT NULL'); + end if; + end loop; + close c_columns; + utl_file.putf(outfile, ')\n'); + if v_clus_key_size > 0 then + utl_file.putf(outfile, 'SIZE %s ', v_clus_key_size); + end if; + if v_clus_hashkeys > 0 and v_clus_single_table = 'Y' then + utl_file.putf(outfile, 'SINGLE TABLE HASHKEYS %s ', v_clus_hashkeys); + elsif v_clus_hashkeys > 0 and v_clus_single_table = 'N' then + utl_file.putf(outfile, 'HASHKEYS %s ', v_clus_hashkeys); + if v_clus_function != 'NULL' then + utl_file.putf(outfile, 'HASH IS %s\n', v_clus_function); + end if; + end if; + utl_file.putf(outfile, 'STORAGE (INITIAL %s ', v_clus_initial_extent); + utl_file.putf(outfile, ' NEXT %s PCT_INCREASE %s', v_clus_next_extent,v_clus_pct_increase); + utl_file.put(outfile, ') TABLESPACE '); + utl_file.put(outfile, v_clus_ts); + if LTRIM(RTRIM(v_clus_degree)) != '1' and LTRIM(RTRIM(v_clus_degree)) != 'DEFAULT' then + utl_file.putf(outfile, ' PARALLEL %s', LTRIM(RTRIM(v_clus_degree))); + end if; + end loop; + close c_cluster; + + + open c_tables; + loop + fetch c_tables into v_owner, v_table_name, v_tablespace_name, v_initial_extent, + v_next_extent,v_pct_increase, v_degree; + + exit when c_tables%NOTFOUND; + utl_file.putf(outfile, '\n-- Drop table cascade first...\n'); + utl_file.putf(outfile, 'DROP TABLE %s.%s CASCADE CONSTRAINTS;\n', v_owner, v_table_name); + utl_file.putf(outfile,'\n-- Create statement for table %s.%s\n\n', v_owner, v_table_name); + utl_file.put(outfile, 'CREATE TABLE '); + utl_file.put(outfile, v_owner); + utl_file.put(outfile, '.'); + utl_file.put(outfile, v_table_name); + utl_file.put(outfile, ' ( '); + open c_columns; + first := 1; + loop + fetch c_columns into v_column_name, v_data_type, v_data_length, v_nullable, v_data_precision; + exit when c_columns%NOTFOUND; + if first = 1 then + if v_data_type = 'CHAR' or v_data_type = 'VARCHAR2' or v_data_type = 'NCHAR' or v_data_type = 'NVARCHAR2' or v_data_type = 'RAW' or v_data_type = 'UROWID' then + utl_file.putf(outfile, '\n%s %s(%s)', v_column_name, v_data_type,v_data_length); + elsif v_data_type = 'NUMBER' then + if v_data_precision != '' then + utl_file.putf(outfile, '\n%s %s(%s,%s)', v_column_name, v_data_type,v_data_length,v_data_precision); + else + utl_file.putf(outfile, '\n%s %s(%s)', v_column_name, v_data_type,v_data_length); + end if; + + else + utl_file.putf(outfile, '\n%s %s', v_column_name, v_data_type); + end if; + first := 0; + else + if v_data_type = 'CHAR' or v_data_type = 'VARCHAR2' or v_data_type = 'NCHAR' or v_data_type = 'NVARCHAR2' or v_data_type = 'RAW' or v_data_type = 'UROWID' then + utl_file.putf(outfile, ',\n%s %s(%s)', v_column_name, v_data_type,v_data_length); + elsif v_data_type = 'NUMBER' then + if v_data_precision != '' then + utl_file.putf(outfile, ',\n%s %s(%s,%s)', v_column_name, v_data_type,v_data_length,v_data_precision); + else + utl_file.putf(outfile, ',\n%s %s(%s)', v_column_name, v_data_type,v_data_length); + end if; + else + utl_file.putf(outfile, ',\n%s %s', v_column_name, v_data_type); + end if; + end if; + if v_nullable = 'N' then + utl_file.putf(outfile, ' NOT NULL'); + end if; + end loop; + close c_columns; + utl_file.putf(outfile, ')\n STORAGE (INITIAL %s ', v_initial_extent); + utl_file.putf(outfile, ' NEXT %s PCT_INCREASE %s', v_next_extent,v_pct_increase); + utl_file.put(outfile, ') TABLESPACE '); + utl_file.put(outfile, v_tablespace_name); + if LTRIM(RTRIM(v_degree)) != '1' and LTRIM(RTRIM(v_degree)) != 'DEFAULT' then + utl_file.putf(outfile, ' PARALLEL %s', LTRIM(RTRIM(v_degree))); + end if; + utl_file.put(outfile, ';'); + utl_file.new_line(outfile); + utl_file.fflush(outfile); + +-- Now create triggers for the table... + utl_file.putf(outfile,'\n-- Creating triggers for table %s.%s\n\n', v_owner, v_table_name); + stmt:='SELECT TRIGGER_BODY FROM SYS.ALL_TRIGGERS WHERE TRIGGER_NAME = :trigger_name'; + open c_triggers; + loop + fetch c_triggers into v_trigger_name, v_trigger_type, v_triggering_event, v_table_owner, + v_trigtab_name, v_when_clause, v_status, v_description, v_trigger_body; + exit when c_triggers%NOTFOUND; + utl_file.putf(outfile,'CREATE OR REPLACE TRIGGER %s.%s %s ', v_table_owner, v_trigger_name, + v_trigger_type); + utl_file.putf(outfile, '%s ON %s.%s\n', v_triggering_event, v_table_owner, v_trigtab_name); + utl_file.putf(outfile, 'WHEN %s\n', v_when_clause); + utl_file.fclose(outfile); + dump_body(v_trigger_name, stmt); + outfile := utl_file.fopen(dir, file_name,'a'); + utl_file.putf(outfile, '\nEND;\n'); + utl_file.fflush(outfile); + end loop; + close c_triggers; + +-- Now create primary keys and indexes... + utl_file.putf(outfile,'\n-- Creating constraints for table %s.%s\n\n', v_owner, v_table_name); + open c_constraints; + loop + fetch c_constraints into v_constraint_name, v_constraint_type, v_cons_status; + exit when c_constraints%NOTFOUND; +-- Primary Key Constraint + if v_constraint_type = 'P' then + utl_file.putf(outfile, 'ALTER TABLE %s ADD PRIMARY KEY (', v_table_name); + first := 1; + open c_cons_columns; + loop + fetch c_cons_columns into v_cons_column; + exit when c_cons_columns%NOTFOUND; + if first = 1 then + utl_file.putf(outfile, '%s', v_cons_column); + first := 0; + else + utl_file.putf(outfile, ',%s', v_cons_column); + end if; + end loop; + close c_cons_columns; + utl_file.putf(outfile, ') %s;\n\n', v_cons_status); + elsif v_constraint_type = 'U' then -- Unique Key Constraint + utl_file.putf(outfile, 'ALTER TABLE %s ADD CONSTRAINT %s\nUNIQUE (', v_table_name, v_constraint_name); + first := 1; + open c_cons_columns; + loop + fetch c_cons_columns into v_cons_column; + exit when c_cons_columns%NOTFOUND; + if first = 1 then + utl_file.putf(outfile, '%s', v_cons_column); + first := 0; + else + utl_file.putf(outfile, ',%s', v_cons_column); + end if; + end loop; + close c_cons_columns; + utl_file.putf(outfile, ');\n\n'); + end if; + + end loop; + close c_constraints; + end loop; + close c_tables; + +-- Create views + utl_file.putf(outfile,'\n-- Creating views for user %s\n\n', v_owner); + stmt := 'SELECT TEXT FROM SYS.ALL_VIEWS WHERE VIEW_NAME =:trigger_name'; + open c_views; + loop + fetch c_views into v_view_name, v_text; + exit when c_views%NOTFOUND; + utl_file.putf(outfile, 'CREATE OR REPLACE VIEW %s\nAS ', v_view_name); + utl_file.fflush(outfile); + utl_file.fclose(outfile); + dump_body(v_view_name, stmt); + outfile := utl_file.fopen(dir, file_name,'a'); + utl_file.putf(outfile, ';\n\n'); + end loop; + close c_views; + + end loop; + utl_file.fclose(outfile); + +end; + +/ diff --git a/vg/header.sql b/vg/header.sql new file mode 100644 index 0000000..e505005 --- /dev/null +++ b/vg/header.sql @@ -0,0 +1,95 @@ +set echo off +set term off + +/* +* +* Author : Vishal Gupta +* Purpose : This script is called at start of every other script +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 10-Feb-16 Vishal Gupta Added _IF_ORA_10gR1_OR_LOWER variable +* 04-Aug-15 Vishal Gupta Added _IF_ORA_12cR1_OR_HIGHER variable +* 21-Jul-15 Vishal Gupta Added _IF_ORA_11204_OR_HIGHER variable +* 11-Dec-14 Vishal Gupta Defined _IF_ORA_xxx_OR_LOWER variables +* 05-Aug-04 Vishal Gupta Created +* +*/ + + +set term off +set trimspool on +set tab off +set feed off +set arraysize 5000 +set lines 250 +set pages 5000 +set verify off +set sqlblankline on + +set serveroutput on + + +-- Set the terminal output off. Otherwise it puts the blank lines on console for +-- query executed with noprint option below to version variable + + +define _IF_ORA_8i_OR_HIGHER="--" +define _IF_ORA_9iR2_OR_HIGHER="--" +define _IF_ORA_10gR1_OR_HIGHER="--" +define _IF_ORA_10gR2_OR_HIGHER="--" +define _IF_ORA_11gR1_OR_HIGHER="--" +define _IF_ORA_11107_OR_HIGHER="--" +define _IF_ORA_11gR2_OR_HIGHER="--" +define _IF_ORA_11202_OR_HIGHER="--" +define _IF_ORA_11204_OR_HIGHER="--" +define _IF_ORA_12cR1_OR_HIGHER="--" + +define _IF_ORA_9iR2_OR_LOWER="--" +define _IF_ORA_10gR1_OR_LOWER="--" +define _IF_ORA_10gR2_OR_LOWER="--" +define _IF_ORA_11gR2_OR_LOWER="--" + +col oraverion_8i_or_higher new_value _IF_ORA_8i_OR_HIGHER noprint +col oraverion_9iR2_or_higher new_value _IF_ORA_9iR2_OR_HIGHER noprint +col oraverion_10gR1_or_higher new_value _IF_ORA_10gR1_OR_HIGHER noprint +col oraverion_10gR2_or_higher new_value _IF_ORA_10gR2_OR_HIGHER noprint +col oraverion_11gR1_or_higher new_value _IF_ORA_11gR1_OR_HIGHER noprint +col oraverion_11107_or_higher new_value _IF_ORA_11107_OR_HIGHER noprint +col oraverion_11gR2_or_higher new_value _IF_ORA_11gR2_OR_HIGHER noprint +col oraverion_11202_or_higher new_value _IF_ORA_11202_OR_HIGHER noprint +col oraverion_11204_or_higher new_value _IF_ORA_11204_OR_HIGHER noprint +col oraverion_12cR1_or_higher new_value _IF_ORA_12cR1_OR_HIGHER noprint + +col oraverion_9iR2_or_lower new_value _IF_ORA_9iR2_OR_LOWER noprint +col oraverion_10gR1_or_lower new_value _IF_ORA_10gR1_OR_LOWER noprint +col oraverion_10gR2_or_lower new_value _IF_ORA_10gR2_OR_LOWER noprint +col oraverion_11gR2_or_lower new_value _IF_ORA_11gR2_OR_LOWER noprint + + +SELECT CASE WHEN &&_O_RELEASE >= 0801000000 THEN '' ELSE '--' END oraverion_8i_or_higher + , CASE WHEN &&_O_RELEASE >= 0902000000 THEN '' ELSE '--' END oraverion_9iR2_or_higher + , CASE WHEN &&_O_RELEASE >= 1001000000 THEN '' ELSE '--' END oraverion_10gR1_or_higher + , CASE WHEN &&_O_RELEASE >= 1002000000 THEN '' ELSE '--' END oraverion_10gR2_or_higher + , CASE WHEN &&_O_RELEASE >= 1101000000 THEN '' ELSE '--' END oraverion_11gR1_or_higher + , CASE WHEN &&_O_RELEASE >= 1101000700 THEN '' ELSE '--' END oraverion_11107_or_higher + , CASE WHEN &&_O_RELEASE >= 1102000000 THEN '' ELSE '--' END oraverion_11gR2_or_higher + , CASE WHEN &&_O_RELEASE >= 1102000200 THEN '' ELSE '--' END oraverion_11202_or_higher + , CASE WHEN &&_O_RELEASE >= 1102000400 THEN '' ELSE '--' END oraverion_11204_or_higher + , CASE WHEN &&_O_RELEASE < 1001000000 THEN '' ELSE '--' END oraverion_9iR2_or_lower + , CASE WHEN &&_O_RELEASE < 1002000000 THEN '' ELSE '--' END oraverion_10gR1_or_lower + , CASE WHEN &&_O_RELEASE < 1101000000 THEN '' ELSE '--' END oraverion_10gR2_or_lower + , CASE WHEN &&_O_RELEASE < 1201000000 THEN '' ELSE '--' END oraverion_11gR2_or_lower + , CASE WHEN &&_O_RELEASE >= 1201000000 THEN '' ELSE '--' END oraverion_12cR1_or_higher + FROM dual + ; + +set term on + +--WHENEVER SQLERROR EXIT SQL.SQLCODE + +-- VG_SPOOLFILE is being set in the login.sql +-- spool again to flush the buffer contents to file +-- spool &&VG_SPOOLFILE append diff --git a/vg/hidden_parameter.sql b/vg/hidden_parameter.sql new file mode 100644 index 0000000..7fa92fb --- /dev/null +++ b/vg/hidden_parameter.sql @@ -0,0 +1,77 @@ +set echo off +set term off +store set backupenv replace +set term on + + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display all hidden parameters +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-06 Vishal Gupta First Draft +* +* +*/ +set term on + + +set lines 200 +set pages 50 + +DEFINE param_name = &1 + +COLUMN name HEADING "Name" FORMAT a32 ON +COLUMN value HEADING "Value" FORMAT a20 ON +COLUMN type HEADING "Type" FORMAT a8 ON +COLUMN description HEADING "Desc" FORMAT a55 ON + +SELECT /* + x.inst_id Instance_id + , x.indx + 1 num + , + */ + x.ksppinm NAME + , DECODE(x.ksppity + , 1, 'Boolean' + , 2, 'String' + , 3, 'Integer' + , 4, 'Parameter File' + , 5, 'Reserved' + , 6, 'Big Int' + , x.ksppity + ) TYPE + , y.ksppstvl VALUE + , y.ksppstdf isdefault + , DECODE ( BITAND ( x.ksppiflg / 256, 1 ) + , 1, 'TRUE' + , 'FALSE' + ) isses_modifiable + , DECODE ( BITAND ( x.ksppiflg / 65536, 3 ) + , 1, 'IMMEDIATE' + , 2, 'DEFERRED' + , 3, 'IMMEDIATE' + , 'FALSE' + ) issys_modifiable + , DECODE ( BITAND ( y.ksppstvf, 7 ) + , 1, 'MODIFIED' + , 4, 'SYSTEM_MOD' + , 'FALSE' + ) ismodified + , DECODE ( BITAND ( y.ksppstvf, 2 ) + , 2, 'TRUE' + , 'FALSE' + ) isadjusted + , x.ksppdesc description + FROM sys.x$ksppi x + , sys.x$ksppcv y + WHERE ( x.indx = y.indx ) + AND lower(TRANSLATE ( x.ksppinm, '_', '#')) LIKE lower('%&¶m_name%') +ORDER BY upper(NAME) +/ + diff --git a/vg/hotbackup.sql b/vg/hotbackup.sql new file mode 100644 index 0000000..d1580f1 Binary files /dev/null and b/vg/hotbackup.sql differ diff --git a/vg/html.sql b/vg/html.sql new file mode 100644 index 0000000..a05e871 --- /dev/null +++ b/vg/html.sql @@ -0,0 +1,78 @@ + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display results in HTML +* Parameters : +* +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* +* +*/ + +PROMPT +PROMPT Running - @&&1 "&&2" "&&3" "&&4" "&&5" "&&6" "&&7" "&&8" "&&9" "&&10" +PROMPT + +DEFINE command="&&1" +DEFINE arg1="&&2" +DEFINE arg2="&&3" +DEFINE arg3="&&4" +DEFINE arg4="&&5" +DEFINE arg5="&&6" +DEFINE arg6="&&7" +DEFINE arg7="&&8" +DEFINE arg8="&&9" +DEFINE arg9="&&10" + +UNDEFINE 1 +UNDEFINE 2 +UNDEFINE 3 +UNDEFINE 4 +UNDEFINE 5 +UNDEFINE 6 +UNDEFINE 7 +UNDEFINE 8 +UNDEFINE 9 +UNDEFINE 10 + +set MARKUP HTML ON PREFORMAT OFF spool on ENTMAP ON - +HEAD "HTML Output - + - +" - +BODY "TEXT='#000000' " - +TABLE " BORDER='2' RULES='all' " +spool sqlplus_html_report.html +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" "&&arg9" + +spool off +set MARKUP HTML OFF + +set term on + +PROMPT +PROMPT HTML output created in sqlplus_html_report.html file. +PROMPT Opening the file in your default internet browser (IE, Chrome, Firefox etc) ... +PROMPT + +host sqlplus_html_report.html +--host rm sqlplus_html_report.htm + diff --git a/vg/html2.sql b/vg/html2.sql new file mode 100644 index 0000000..db22ce6 --- /dev/null +++ b/vg/html2.sql @@ -0,0 +1,77 @@ + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display results in HTML +* Parameters : +* +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Mar-12 Vishal Gupta Intial version +* +* +*/ +set term on + +PROMPT +PROMPT Running - @&&1 "&&2" "&&3" "&&4" "&&5" "&&6" "&&7" "&&8" "&&9" "&&10" +PROMPT + + +DEFINE command="&&1" +DEFINE arg1="&&2" +DEFINE arg2="&&3" +DEFINE arg3="&&4" +DEFINE arg4="&&5" +DEFINE arg5="&&6" +DEFINE arg6="&&7" +DEFINE arg7="&&8" +DEFINE arg8="&&9" +DEFINE arg9="&&10" + +UNDEFINE 1 +UNDEFINE 2 +UNDEFINE 3 +UNDEFINE 4 +UNDEFINE 5 +UNDEFINE 6 +UNDEFINE 7 +UNDEFINE 8 +UNDEFINE 9 +UNDEFINE 10 + +set MARKUP HTML ON PREFORMAT OFF spool on ENTMAP ON - +HEAD "HTML Output - + - +" - +BODY "TEXT='#000000' " - +TABLE " BORDER='2' RULES='all' " +spool sqlplus_html_report.html +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" "&&arg9" +spool off +set MARKUP HTML OFF + +PROMPT +PROMPT HTML output created in sqlplus_html_report.html file. +PROMPT Opening the file in your default internet browser (IE, Chrome, Firefox etc) ... +PROMPT + +host sqlplus_html_report.html +--host rm sqlplus_html_report.htm + diff --git a/vg/html3.sql b/vg/html3.sql new file mode 100644 index 0000000..3ab63c9 --- /dev/null +++ b/vg/html3.sql @@ -0,0 +1,76 @@ + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display results in HTML +* Parameters : +* +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Jun-15 Vishal Gupta Change paragraphs font to Courier New +* 08-Mar-12 Vishal Gupta Intial version +* +* +*/ +set term on + + + +PROMPT +PROMPT Running - @&&1 "&&2" "&&3" "&&4" "&&5" "&&6" "&&7" "&&8" "&&9" "&&10" +PROMPT + + +DEFINE command="&&1" +DEFINE arg1="&&2" +DEFINE arg2="&&3" +DEFINE arg3="&&4" +DEFINE arg4="&&5" +DEFINE arg5="&&6" +DEFINE arg6="&&7" +DEFINE arg7="&&8" +DEFINE arg8="&&9" +DEFINE arg9="&&10" + +UNDEFINE 1 +UNDEFINE 2 +UNDEFINE 3 +UNDEFINE 4 +UNDEFINE 5 +UNDEFINE 6 +UNDEFINE 7 +UNDEFINE 8 +UNDEFINE 9 +UNDEFINE 10 + +set MARKUP HTML ON PREFORMAT OFF spool on ENTMAP ON HEAD "HTML Output - +" - +BODY "TEXT='#000000'" - +TABLE " BORDER='2' RULES='all' " +spool sqlplus_html_report.html +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" "&&arg9" +spool off +set MARKUP HTML OFF + +PROMPT +PROMPT HTML output created in sqlplus_html_report.html file. +PROMPT Opening the file in your default internet browser (IE, Chrome, Firefox etc) ... +PROMPT + +host sqlplus_html_report.html +--host rm sqlplus_html_report.htm + diff --git a/vg/html_search_code.htm b/vg/html_search_code.htm new file mode 100644 index 0000000..6526a51 --- /dev/null +++ b/vg/html_search_code.htm @@ -0,0 +1,75 @@ + + + + + + + +
    +
    +
    + + + + \ No newline at end of file diff --git a/vg/index_similar.sql b/vg/index_similar.sql new file mode 100644 index 0000000..dc10c25 --- /dev/null +++ b/vg/index_similar.sql @@ -0,0 +1,152 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Display Similar Tables indexes +* Parameters : 1 - Owner (Use % as wild card, \ as ESCAPE) +* 2 - TableName (Use % as wild card, \ as ESCAPE) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 25-Sep-12 Vishal Gupta Created +* +*/ + +/* + +PROMPT ************************* +PROMPT Similar Indexes +PROMPT ************************* + +column column_name format a30 +break on TABLE_OWNER on TABLE_NAME skip 1 +BREAK ON INDEX_NAME + +select TABLE_OWNER, TABLE_NAME, INDEX_NAME, COLUMN_NAME, COLUMN_POSITION +FROM ALL_IND_COLUMNS +WHERE (TABLE_OWNER, TABLE_NAME, INDEX_NAME ) IN +(SELECT TABLE_OWNER + , TABLE_NAME + , INDEX_NAME +FROM ALL_IND_COLUMNS ind +WHERE COLUMN_POSITION = 1 +AND TABLE_OWNER NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP','XDB','WMSYS','SYSMAN') +AND (TABLE_OWNER, TABLE_NAME, COLUMN_NAME) IN (SELECT TABLE_OWNER, TABLE_NAME, COLUMN_NAME + FROM (SELECT TABLE_OWNER , TABLE_NAME, COLUMN_NAME, + COUNT (*) TCOUNT + FROM ALL_IND_COLUMNS + WHERE COLUMN_POSITION = 1 + AND TABLE_OWNER NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP','XDB','WMSYS','SYSMAN') + GROUP BY TABLE_OWNER, TABLE_NAME, COLUMN_NAME + HAVING COUNT (*) > 1 + ) + ) +) +ORDER BY 1,2,3,5 +/ + +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE owner="&&1" +DEFINE table_name="&&2" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + + +set term off +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END) "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" +FROM DUAL; +set term on + + +PROMPT ************************* +PROMPT Similar Indexes +PROMPT ************************* + +COLUMN owner HEADING "Index Owner" FORMAT a20 +COLUMN table_name HEADING "Table Name" FORMAT a40 +COLUMN index_owner HEADING "Index Owner" FORMAT a20 +COLUMN index_name HEADING "Index Name" FORMAT a40 +COLUMN index_type HEADING "Index Type" FORMAT a10 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN visibility HEADING "Visible" FORMAT a10 +COLUMN uniqueness HEADING "Uniqueness" FORMAT a15 +COLUMN Columns HEADING "Index columns" FORMAT a90 + +BREAK ON TABLE_NAME + +WITH Indexes as +( +SELECT /*+ */ + i.table_owner || '.' || i.table_name table_name + , i.owner || '.' || i.index_name index_name + , i.uniqueness + , i.index_type + --, i.status + --, i.visibility + , SUBSTR(SYS_CONNECT_BY_PATH ( ic.column_name || DECODE(ic.descend,'ASC','',' (desc) ') , ' , ' ),4) Columns +FROM dba_indexes i + , dba_ind_columns ic + , dba_ind_expressions ie +WHERE i.owner = ic.index_owner + AND i.index_name = ic.index_name + AND i.table_owner = ic.table_owner + AND i.table_name = ic.table_name + AND ic.index_owner = ie.index_owner (+) + AND ic.index_name = ie.index_name (+) + AND ic.table_owner = ie.table_owner (+) + AND ic.table_name = ie.table_name (+) + AND ic.column_position = ie.column_position (+) + AND i.table_owner LIKE upper('&&owner') ESCAPE '\' + AND i.table_name LIKE upper('&&table_name') ESCAPE '\' + AND CONNECT_BY_ISLEAF = 1 + AND LEVEL = ic.column_position +CONNECT BY ic.table_owner = PRIOR ic.table_owner + AND ic.table_name = PRIOR ic.table_name + AND ic.index_owner = PRIOR ic.index_owner + AND ic.index_name = PRIOR ic.index_name + AND ic.column_position - 1 = PRIOR ic.column_position +START WITH ic.table_owner LIKE upper('&&owner') ESCAPE '\' + AND ic.table_name LIKE upper('&&table_name') ESCAPE '\' +) +, indexes_similar as +( +SELECT a.* + FROM indexes a +WHERE EXISTS (SELECT 1 from indexes b + WHERE b.table_name = a.table_name + AND b.columns LIKE a.columns || '%' + AND LENGTH(b.columns) > LENGTH(a.columns) + ) +) +SELECT i.* + FROM indexes i + , indexes_similar s +WHERE i.table_name = s.table_name + AND i.columns like s.columns || '%' +ORDER BY i.table_name + , i.index_name + , i.uniqueness + +; + +UNDEFINE owner +UNDEFINE table_name + + +@@footer diff --git a/vg/index_unusable.sql b/vg/index_unusable.sql new file mode 100644 index 0000000..23d6c40 --- /dev/null +++ b/vg/index_unusable.sql @@ -0,0 +1,119 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display unusable indexes +* Parameters : 1. Owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2. Table Owner (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------ +* 27-Jul-15 Vishal Gupta Added owner and table_name as input parameters +* 12-Mar-12 Vishal Gupta Intial version +* +* +*/ +set term on + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE subobject_name +UNDEFINE object_type +UNDEFINE object_status +UNDEFINE WHERECLAUSE + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE WHERECLAUSE="&&3" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&table_name'),'','%','&&table_name') "_table_name" + , DECODE(UPPER('&&subobject_name'),'','%','&&subobject_name') "_subobject_name" + , DECODE(UPPER('&&object_type'),'','%','&&object_type') "_object_type" +FROM DUAL +; + + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" +FROM DUAL +; + + +set term on + + +PROMPT ***************************************************************** +PROMPT * Unusable Indexes +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Where Clause = '&&WHERECLAUSE' +PROMPT ***************************************************************** + +COLUMN table_owner HEADING "Table Owner" FORMAT a20 +COLUMN table_name HEADING "Table Name" FORMAT a45 +COLUMN index_owner HEADING "Index Owner" FORMAT a20 +COLUMN index_name HEADING "Index Name" FORMAT a45 +COLUMN partition_name HEADING "Partition Name" FORMAT a25 +COLUMN subpartition_name HEADING "SubPartition Name" FORMAT a25 +COLUMN tablespace_name HEADING "Tablespace Name" FORMAT a20 +COLUMN status HEADING "Status" FORMAT a10 +COLUMN uniqueness HEADING "Uniqness" FORMAT a10 +COLUMN rebuild_sql HEADING "Rebuild SQL Statement" FORMAT a200 + + +SELECT i.table_owner || '.' || i.table_name table_name + , i.owner || '.' || i.index_name index_name + , ip.partition_name + , isp.subpartition_name + , NVL(NVL(isp.tablespace_name,ip.tablespace_name),i.tablespace_name) tablespace_name + , NVL(NVL(isp.status,ip.status),i.status) status + , i.uniqueness +FROM dba_indexes i + LEFT OUTER JOIN dba_ind_partitions ip ON i.owner = ip.index_owner AND i.index_name = ip.index_name + LEFT OUTER JOIN dba_ind_subpartitions isp ON ip.index_owner = isp.index_owner AND ip.index_name = isp.index_name AND ip.partition_name = isp.partition_name +WHERE NVL(NVL(isp.status,ip.status),i.status) NOT IN ('VALID','N/A','USABLE') + AND i.owner LIKE '&&owner' + AND i.table_name LIKE '&&table_name' +ORDER BY 1,2,3,4,5,6 +; + +SELECT 'ALTER INDEX "' || i.owner || '"."' || i.index_name || '" REBUILD' + || NVL2(isp.subpartition_name,' SUBPARTITION ' || isp.subpartition_name, NVL2(ip.partition_name,' PARTITION "' || ip.partition_name || '"' , ' ')) + || ' PARALLEL 4; ' + || NVL2(isp.subpartition_name,' ' ,NVL2( ip.partition_name, ' ', chr(10) || 'ALTER INDEX "' || i.owner || '"."' || i.index_name || DECODE(i.degree,1,'" NOPARALLEL;','" PARALLEL ' || i.degree || ';') ) ) + rebuild_sql +FROM dba_indexes i + LEFT OUTER JOIN dba_ind_partitions ip ON i.owner = ip.index_owner AND i.index_name = ip.index_name + LEFT OUTER JOIN dba_ind_subpartitions isp ON ip.index_owner = isp.index_owner AND ip.index_name = isp.index_name AND ip.partition_name = isp.partition_name +WHERE NVL(NVL(isp.status,ip.status),i.status) NOT IN ('VALID','N/A','USABLE') + AND i.owner LIKE '&&owner' + AND i.table_name LIKE '&&table_name' +ORDER BY 1 +; + +@@footer diff --git a/vg/index_usage_monitoring.sql b/vg/index_usage_monitoring.sql new file mode 100644 index 0000000..29dfb9c --- /dev/null +++ b/vg/index_usage_monitoring.sql @@ -0,0 +1,44 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display index usage monitoring +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Mar-12 Vishal Gupta Intial version +* +* +*/ +set term on + +COLUMN table_owner HEADING "Table Owner" FORMAT a20 +COLUMN table_name HEADING "Table Name" FORMAT a20 +COLUMN index_name HEADING "Index Name" FORMAT a20 +COLUMN Monitoring HEADING "Monitoring" FORMAT a10 +COLUMN Used HEADING "Used" FORMAT a4 + + +select t.name TABLE_NAME + , io.name INDEX_NAME + , decode(bitand(i.flags, 65536), 0, 'NO', 'YES') MONITORING + , decode(bitand(ou.flags, 1), 0, 'NO', 'YES') USED + , ou.start_monitoring + , ou.end_monitoring +from sys.obj$ io + , sys.obj$ t + , sys.ind$ i + , sys.object_usage ou +where i.obj# = ou.obj# + and io.obj# = ou.obj# + and t.obj# = i.bo# +; + + +@@footer diff --git a/vg/internal_schemas.sql b/vg/internal_schemas.sql new file mode 100644 index 0000000..b49980c --- /dev/null +++ b/vg/internal_schemas.sql @@ -0,0 +1,43 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Oracle Internal Schemas +* Versions : 9.2 or higher +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 10-Mar-13 Vishal Gupta Created +* +*/ + + + + SELECT DISTINCT name + FROM + (SELECT u.name + FROM registry$ r + , user$ u + WHERE r.status IN (1,3,5) + AND r.namespace = 'SERVER' + AND r.schema# =u.user# +&&_IF_ORA_10gR2_OR_HIGHER UNION +&&_IF_ORA_10gR2_OR_HIGHER SELECT u.name -- get additional component schemas +&&_IF_ORA_10gR2_OR_HIGHER FROM registry$ r +&&_IF_ORA_10gR2_OR_HIGHER , registry$schemas s +&&_IF_ORA_10gR2_OR_HIGHER , user$ u +&&_IF_ORA_10gR2_OR_HIGHER WHERE r.status IN (1,3,5) +&&_IF_ORA_10gR2_OR_HIGHER AND r.namespace = 'SERVER' +&&_IF_ORA_10gR2_OR_HIGHER AND r.cid =s.cid +&&_IF_ORA_10gR2_OR_HIGHER AND s.schema# =u.user# + ) + ORDER BY name + ; + + +@@footer \ No newline at end of file diff --git a/vg/invalid_objects.sql b/vg/invalid_objects.sql new file mode 100644 index 0000000..bb4b5e5 --- /dev/null +++ b/vg/invalid_objects.sql @@ -0,0 +1,38 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Search for INVALID objects +* Parameters : 1 - Object name owner.objectname format. (% - wildcard, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +*/ + +DEFINE object_name="&&1" + +COLUMN owner FORMAT a20 +COLUMN object_name FORMAT a30 +COLUMN object_type FORMAT a20 +COLUMN status FORMAT a10 +COLUMN last_ddl_time HEADING "Last DDL Time" FORMAT a20 +COLUMN created HEADING "Create Time" FORMAT a20 + +SELECT do.owner + , do.object_name + , do.object_type + , do.status + , to_char(do.last_ddl_time,'DD-MON-YY hh24:MI:SS') last_ddl_time + , to_char(do.created,'DD-MON-YY hh24:MI:SS') created +FROM dba_objects do +WHERE do.status = 'INVALID' +AND do.owner || '.' || do.object_name LIKE UPPER('&object_name') ESCAPE '\' +ORDER BY do.owner + , do.object_name; + + +@@footer diff --git a/vg/ixcols.sql b/vg/ixcols.sql new file mode 100644 index 0000000..412814c Binary files /dev/null and b/vg/ixcols.sql differ diff --git a/vg/jobs.sql b/vg/jobs.sql new file mode 100644 index 0000000..c65d3c4 --- /dev/null +++ b/vg/jobs.sql @@ -0,0 +1,47 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DBMS Jobs +* Compatibility : +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 03-Sep-12 Vishal Gupta Created +* +*/ + + +PROMPT ************************************************** +PROMPT * DBMS Jobs +PROMPT ************************************************** + +COLUMN job HEADING "Job" FORMAT 9999 +COLUMN broken HEADING "Broken" FORMAT a1 +COLUMN instance HEADING "I#" FORMAT 999 +COLUMN priv_user HEADING "PrivUser" FORMAT a18 +COLUMN last_date HEADING "LastRunTime" FORMAT a18 +COLUMN this_date HEADING "CurrentRunTime" FORMAT a18 +COLUMN next_date HEADING "NextRunTime" FORMAT a18 +COLUMN interval HEADING "Interval" FORMAT a40 +COLUMN failures HEADING "Failures" FORMAT 99999 +COLUMN what HEADING "What" FORMAT a80 + +SELECT j.job + , j.broken + , j.instance + , j.priv_user + , TO_CHAR(j.last_date,'DD-MON-YY HH24:MI:SS') last_date + , TO_CHAR(j.this_date,'DD-MON-YY HH24:MI:SS') this_date + , TO_CHAR(j.next_date ,'DD-MON-YY HH24:MI:SS') next_date + , j.interval + , j.failures + , j.what + FROM dba_jobs j +; + +@@footer diff --git a/vg/kill_dbsnmp.sql b/vg/kill_dbsnmp.sql new file mode 100644 index 0000000..82f3a21 --- /dev/null +++ b/vg/kill_dbsnmp.sql @@ -0,0 +1,22 @@ +set serveroutput on +DECLARE +sqlstatement VARCHAR2(200); +BEGIN + FOR i in (select * from gv$session s + where s.program like 'emagent@%' + and s.status = 'ACTIVE' and s.last_call_et > 300) + LOOP + BEGIN + sqlstatement := 'alter system kill session ''' || i.sid || ',' || i.serial# || ',@' || i.inst_id || ''' immediate'; + dbms_output.put_line(sqlstatement); + execute immediate sqlstatement; + EXCEPTION + WHEN OTHERS THEN + NULL; + DBMS_OUTPUT.PUT_LINE(sqlerrm); + END; + END LOOP; +END; +/ + + diff --git a/vg/kill_session.sql b/vg/kill_session.sql new file mode 100644 index 0000000..17529e9 --- /dev/null +++ b/vg/kill_session.sql @@ -0,0 +1,69 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Details +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - Instance Number +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +* 27-Mar-12 Vishal Gupta Included the session wait history +* 11-May-12 Vishal Gupta Change output layout. Instead of SELECT output +* now it display dbms_output lines. +* +*/ + +VARIABLE SID number ; +VARIABLE INST_ID number ; + +BEGIN + :SID := &&1; + :INST_ID := NVL(&&2,1); + IF :INST_ID = '' OR :INST_ID IS NULL THEN + :INST_ID := 1; + END IF; +END; +/ + + +Prompt +Prompt ####### Kill/Disconnect Command #################### + +COLUMN command HEADING "Disconnect Command" FORMAT a60 +COLUMN command2 HEADING "Kill Command" FORMAT a60 + +BEGIN + FOR i IN (select 'alter system disconnect session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command + , 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command2 + from gv$session s + , gv$process p + where s.inst_id = p.inst_id (+) + AND s.PADDR = p.ADDR (+) + AND s.sid = :SID + AND s.inst_id = :INST_ID) + LOOP + DBMS_OUTPUT.PUT_LINE( i.command || chr(10) + || i.command2 ); + DBMS_OUTPUT.PUT_LINE( ' ' ); + DBMS_OUTPUT.PUT_LINE( 'Killing session ...' ); + execute immediate REPLACE(i.command2,';',''); + DBMS_OUTPUT.PUT_LINE( 'Session killed.' ); + END LOOP; +END; +/ + +BEGIN + :SID := NULL; + :INST_ID := NULL; +END; +/ + +UNDEFINE TOP_EVENT_COUNT + +@@footer diff --git a/vg/kill_session_generate.sql b/vg/kill_session_generate.sql new file mode 100644 index 0000000..319dcec --- /dev/null +++ b/vg/kill_session_generate.sql @@ -0,0 +1,94 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Generate kill session list +* Parameters : 1 - Where clause to filter the data. +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 26-Jul-12 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE WHERE_CLAUSE="&1" + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +-- To hide sql, set show_sql="--" +--DEFINE SHOW_SQL="--" +DEFINE SHOW_SQL="" +DEFINE SHOW_BACKGROUND="" + + +PROMPT ************************************************************** +PROMPT * D A T A B A S E S E S S I O N S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************** + +COLUMN Kill_command HEADING "KillCommand" FORMAT a22 +COLUMN sid HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN state HEADING "State" FORMAT a12 TRUNCATED +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED +COLUMN process HEADING "Process" FORMAT a11 +COLUMN program HEADING "Program" FORMAT a18 TRUNCATED +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +--COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999 +COLUMN last_call_et HEADING "LastCall" FORMAT a12 +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +SELECT '@kill_session ' || s.sid || ' ' || s.inst_id Kill_command + , s.sid + , s.inst_id + , p.spid + , s.status + --, s.state + --, s.last_call_et + , LPAD(FLOOR(last_call_et / 3600) || 'h ' + || LPAD(FLOOR(MOD(last_call_et , 3600 ) / 60),2) || 'm ' + || LPAD(MOD(last_call_et, 60 ) ,2) || 's' + , 12) last_call_et + , to_char(s.logon_time,'DD-MON-YY HH24:MI:SS') logon_time + , s.username + , s.osuser + , s.machine + , s.process + , s.program + , s.sql_id + , s.sql_child_number + FROM gv$session s + , gv$session_wait w + , gv$process p + WHERE s.sid = w.sid (+) + AND s.inst_id = w.inst_id (+) + AND s.inst_id = p.inst_id + AND s.paddr = p.addr +&&SHOW_BACKGROUND AND s.type <> 'BACKGROUND' + &&WHERE_CLAUSE +ORDER BY s.logon_time desc +; + +UNDEFINE INST_ID +UNDEFINE WHERE_CLAUSE + + +@@footer diff --git a/vg/kill_sniped.sql b/vg/kill_sniped.sql new file mode 100644 index 0000000..ccfa9b3 --- /dev/null +++ b/vg/kill_sniped.sql @@ -0,0 +1,20 @@ +set serveroutput on +DECLARE +sqlstatement VARCHAR2(200); +BEGIN + FOR i in (select * from gv$session s where s.type <> 'BACKGROUND' and s.status = 'SNIPED') + LOOP + BEGIN + sqlstatement := 'alter system kill session ''' || i.sid || ',' || i.serial# || ',@' || i.inst_id || ''' immediate'; + dbms_output.put_line(sqlstatement); + execute immediate sqlstatement; + EXCEPTION + WHEN OTHERS THEN + NULL; + DBMS_OUTPUT.PUT_LINE(sqlerrm); + END; + END LOOP; +END; +/ + + diff --git a/vg/latchname.sql b/vg/latchname.sql new file mode 100644 index 0000000..eef3c08 --- /dev/null +++ b/vg/latchname.sql @@ -0,0 +1,40 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display the Latch names +* Version : +* Parameters : 1 - Latch Name (Use % as wildcard and \ as escape character) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-OCT-12 Vishal Gupta Created +* +*/ + +UNDEFINE latch_name + + +DEFINE latch_name="&&1" + +Prompt +Prompt *************************************************************************************************** +Prompt * ALL Latch Names like '&&latch_name' +Prompt *************************************************************************************************** + +COLUMN name HEADING "Latch Name" FORMAT a60 + +SELECT l.latch# + , l.name + FROM v$latchname l + WHERE UPPER(l.name) like UPPER('&&latch_name') ESCAPE '\' + OR TO_CHAR(l.latch#) LIKE UPPER('&&latch_name') ESCAPE '\' + ORDER BY UPPER(l.name) +; + + +@@footer diff --git a/vg/latchprof.sql b/vg/latchprof.sql new file mode 100644 index 0000000..12d112f --- /dev/null +++ b/vg/latchprof.sql @@ -0,0 +1,122 @@ +-------------------------------------------------------------------------------- +-- +-- File name: latchprof.sql ( Latch Holder Profiler ) +-- Purpose: Perform high-frequency sampling on V$LATCHHOLDER +-- and present a profile of latches held by sessions +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @latchprof <#samples> +-- @latchprof name 350 % 100000 - monitor all latches SID 350 is holding +-- @latchprof sid,name % library 1000000 - monitor which SIDs hold latches with "library" in their name +-- @latchprof sid,name,laddr % 40D993A0 100000 - monitor which SIDs hold child latch with address 0x40D993A0 +-- Other: +-- The sampling relies on NESTED LOOP join method and having +-- V$LATCHHOLDER as the inner (probed) table. Note that on 9i +-- you may need to run this script as SYS as it looks like otherwise +-- the global USE_NL hint is not propagated down to X$ base tables +-- +-- The join in exec plan step 8 MUST be a NESTED LOOPS join, this is how +-- the high speed sampling of changing dataset from V$LATCHHOLDER +-- is done, otherwise you will not see correct results. +-- +-- ----------------------------------------------------------------------------------------------- +-- | Id | Operation | Name | E-Rows | OMem | 1Mem | Used-Mem | +-- ----------------------------------------------------------------------------------------------- +-- | 1 | MERGE JOIN CARTESIAN | | 1 | | | | +-- | 2 | MERGE JOIN CARTESIAN | | 1 | | | | +-- |* 3 | FIXED TABLE FULL | X$KSUTM | 1 | | | | +-- | 4 | BUFFER SORT | | 1 | 9216 | 9216 | 8192 (0)| +-- | 5 | VIEW | | 1 | | | | +-- | 6 | SORT ORDER BY | | 1 | 2048 | 2048 | 2048 (0)| +-- | 7 | SORT GROUP BY | | 1 | 9216 | 9216 | 8192 (0)| +-- | 8 | NESTED LOOPS | | 1 | | | | +-- | 9 | VIEW | | 1 | | | | +-- | 10 | CONNECT BY WITHOUT FILTERING| | | | | | +-- | 11 | FAST DUAL | | 1 | | | | +-- |* 12 | FIXED TABLE FULL | X$KSUPRLAT | 1 | | | | +-- | 13 | BUFFER SORT | | 1 | 9216 | 9216 | 8192 (0)| +-- |* 14 | FIXED TABLE FULL | X$KSUTM | 1 | | | | +-- ----------------------------------------------------------------------------------------------- +-- +-- If you want to drill down to latch child level, include "laddr" in first parameter +-- to latchprof +-- +-- Then you can use la.sql (V$LATCH_PARENT/V$LATCH_CHILDREN) to +-- map the latch address back to latch child# if needed +-- +-------------------------------------------------------------------------------- + +-- what includes what columns to display & aggregate and also options like latch name filtering +DEF _lhp_what="&&1" +DEF _lhp_sid="&2" +DEF _lhp_name="&3" +DEF _lhp_samples="&4" + +COL name FOR A35 TRUNCATE +COL latchprof_total_ms HEAD "Held ms" FOR 999999.999 +COL latchprof_pct_total_samples head "Held %" format 999.99 +COL latchprof_avg_ms HEAD "Avg hold ms" FOR 999.999 +COL dist_samples HEAD Gets +COL total_samples HEAD Held + +BREAK ON lhp_name SKIP 1 + +DEF _IF_ORA_10_OR_HIGHER="--" + +PROMPT +PROMPT -- LatchProf 2.00 by Tanel Poder ( http://www.tanelpoder.com ) + +COL latchprof_oraversion NOPRINT NEW_VALUE _IF_ORA_10_OR_HIGHER + +SET TERMOUT OFF +SELECT DECODE(SUBSTR(BANNER, INSTR(BANNER, 'Release ')+8,1), 1, '', '--') latchprof_oraversion +FROM v$version WHERE ROWNUM=1; +SET TERMOUT ON + +WITH + t1 AS (SELECT hsecs FROM v$timer), + samples AS ( + SELECT /*+ ORDERED USE_NL(l) USE_NL(s) USE_NL(l.gv$latchholder.x$ksuprlat) NO_TRANSFORM_DISTINCT_AGG */ + &_lhp_what + &_IF_ORA_10_OR_HIGHER , COUNT(DISTINCT gets) dist_samples + , COUNT(*) total_samples + , COUNT(*) / &_lhp_samples total_samples_pct + FROM + (SELECT /*+ NO_MERGE */ 1 FROM DUAL CONNECT BY LEVEL <= &_lhp_samples) s, + v$latchholder l, + (SELECT + sid indx + , sql_hash_value sqlhash + , sql_address sqladdr + &_IF_ORA_10_OR_HIGHER , sql_child_number sqlchild + &_IF_ORA_10_OR_HIGHER , sql_id sqlid + FROM v$session) s + WHERE + l.sid LIKE '&_lhp_sid' + AND (LOWER(l.name) LIKE LOWER('%&_lhp_name%') OR LOWER(RAWTOHEX(l.laddr)) LIKE LOWER('%&_lhp_name%')) + AND l.sid = s.indx + GROUP BY + &_lhp_what + ORDER BY + total_samples DESC + ), + t2 AS (SELECT hsecs FROM v$timer) +SELECT /*+ ORDERED */ + &_lhp_what + , s.total_samples + &_IF_ORA_10_OR_HIGHER , s.dist_samples + -- , s.total_samples_pct + , s.total_samples / &_lhp_samples * 100 latchprof_pct_total_samples + , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &_lhp_samples latchprof_total_ms + -- s.dist_events, + &_IF_ORA_10_OR_HIGHER , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / dist_samples / &_lhp_samples latchprof_avg_ms + FROM + t1, + samples s, + t2 + -- WHERE ROWNUM <= 30 +/ + +COL name CLEAR diff --git a/vg/latchprofx.sql b/vg/latchprofx.sql new file mode 100644 index 0000000..b628b0a --- /dev/null +++ b/vg/latchprofx.sql @@ -0,0 +1,169 @@ +-------------------------------------------------------------------------------- +-- +-- File name: latchprofx.sql ( Latch Holder Profiler eXtended ) +-- Purpose: Perform high-frequency sampling on V$LATCHHOLDER +-- and present a profile of latches held by sessions +-- including extended statistics about in which kernel +-- function the latch held was taken +-- +-- Author: Tanel Poder +-- Copyright: (c) http://www.tanelpoder.com +-- +-- Usage: @latchprofx <#samples> +-- @latchprofx name 350 % 100000 - monitor all latches SID 350 is holding +-- @latchprofx sid,name % library 1000000 - monitor which SIDs hold latches with "library" in their name +-- @latchprofx sid,name,laddr % 40D993A0 100000 - monitor which SIDs hold child latch with address 0x40D993A0 +-- @latchprofx sid,name,func % % 100000 +-- - monitor all sessions and latches and show +-- - latch get Where info (locations in kernel code +-- - where the latch get was done) +-- +-- @latchprofx sid,name,hmode,func 89 "cache buffers chains" 100000 +-- - monitor functions that took latch for SID 89 only +-- - and report only "cache buffers chains" latch holders +-- - also report hold mode HMODE (shared or exclusive) +-- +-- @latchprofx sid,name,hmode,func,object % 40D993A0 100000 +-- - monitor for what object's access the child latch at +-- - particular address was taken. for cache buffers chains +-- - latch the object means data block address (DBA) +-- - of the block accessed in buffer cache. +-- - you can translate the 6-byte DBA to rfile#/block# +-- - using dbms_utility or dba.sql script from TPT scripts +-- +-- Other: +-- This script is based on X$ tables instead of V$ tables +-- as some info required is not externalized to V$. +-- So you need to run this script either as SYS or +-- need to have relevant X$ proxy views created +-- +-- The sampling relies on NESTED LOOP join method and having +-- X$KSUPRLAT as the inner (probed) table. +-- +-- If sampling always reports a single latch event even though +-- many different events (or parameter values) are expected then +-- the execution plan used is not right. +-- +-- The join in exec plan step 9 MUST be a NESTED LOOPS join, this is how +-- the high speed sampling is done. +-- +-- ----------------------------------------------------------------------------------------------------- +-- | Id | Operation | Name | E-Rows | OMem | 1Mem | Used-Mem | +-- ----------------------------------------------------------------------------------------------------- +-- | 1 | MERGE JOIN CARTESIAN | | 1 | | | | +-- | 2 | MERGE JOIN CARTESIAN | | 1 | | | | +-- |* 3 | FIXED TABLE FULL | X$KSUTM | 1 | | | | +-- | 4 | BUFFER SORT | | 1 | 9216 | 9216 | 8192 (0)| +-- | 5 | VIEW | | 1 | | | | +-- | 6 | SORT ORDER BY | | 1 | 2048 | 2048 | 2048 (0)| +-- | 7 | HASH GROUP BY | | 1 | | | | +-- | 8 | NESTED LOOPS OUTER | | 1 | | | | +-- | 9 | NESTED LOOPS | | 1 | | | | +-- | 10 | VIEW | | 1 | | | | +-- | 11 | CONNECT BY WITHOUT FILTERING| | | | | | +-- | 12 | FAST DUAL | | 1 | | | | +-- |* 13 | FIXED TABLE FULL | X$KSUPRLAT | 1 | | | | +-- |* 14 | FIXED TABLE FIXED INDEX | X$KSLLW (ind:2) | 1 | | | | +-- | 15 | BUFFER SORT | | 1 | 9216 | 9216 | 8192 (0)| +-- |* 16 | FIXED TABLE FULL | X$KSUTM | 1 | | | | +-- ----------------------------------------------------------------------------------------------------- +-- +-- If you want to drill down to latch child level, include "name" in first parameter to latchprof +-- +-- Then you can use la.sql (V$LATCH_PARENT/V$LATCH_CHILDREN) to +-- map the latch address back to latch child# +-- +-------------------------------------------------------------------------------- + +-- what includes what columns to display & aggregate and also options like latch name filtering +DEF _lhp_what="&&1" +DEF _lhp_sid="&2" +DEF _lhp_name="&3" +DEF _lhp_samples="&4" + +COL name FOR A35 TRUNCATE +COL latchprof_total_ms HEAD "Held ms" FOR 999999.999 +COL latchprof_pct_total_samples head "Held %" format 999.99 +COL latchprof_avg_ms HEAD "Avg hold ms" FOR 999999.999 +COL dist_samples HEAD Gets +COL total_samples HEAD Held +COL ksllwnam FOR A40 TRUNCATE +COL ksllwlbl FOR A20 TRUNCATE +COL objtype FOR A20 TRUNCATE +COL object FOR A17 WRAP JUST RIGHT +COL hmode FOR A12 TRUNCATE +COL what FOR A17 WRAP +COL func FOR A40 TRUNCATE + +BREAK ON lhp_name SKIP 1 + +DEF _IF_ORA_10_OR_HIGHER="--" + +PROMPT +PROMPT -- LatchProfX 2.00 by Tanel Poder ( http://www.tanelpoder.com ) + +COL latchprof_oraversion PRINT NEW_VALUE _IF_ORA_10_OR_HIGHER + +SET TERMOUT OFF +SELECT DECODE(SUBSTR(BANNER, INSTR(BANNER, 'Release ')+8,1), 1, '', '--') latchprof_oraversion +FROM v$version WHERE ROWNUM=1; +SET TERMOUT ON + +WITH + t1 AS (SELECT hsecs FROM v$timer), + samples AS ( + SELECT /*+ ORDERED USE_NL(l.x$ksuprlat) USE_NL(s.x$ksuse) NO_TRANSFORM_DISTINCT_AGG */ + &_lhp_what + &_IF_ORA_10_OR_HIGHER , COUNT(DISTINCT gets) dist_samples + , COUNT(*) total_samples + , COUNT(*) / &_lhp_samples total_samples_pct + FROM + (SELECT /*+ NO_MERGE */ 1 FROM DUAL CONNECT BY LEVEL <= &_lhp_samples) s, + (SELECT ksuprpid PID, ksuprsid SID, ksuprlnm NAME, ksuprlat LADDR, ksulawhr, + TO_CHAR(ksulawhy,'XXXXXXXXXXXXXXXX') object + &_IF_ORA_10_OR_HIGHER , ksulagts GETS, lower(ksuprlmd) HMODE + FROM x$ksuprlat) l, + (SELECT + indx + , ksusesqh sqlhash + , ksusesql sqladdr + &_IF_ORA_10_OR_HIGHER , ksusesph planhash + &_IF_ORA_10_OR_HIGHER , ksusesch sqlchild + &_IF_ORA_10_OR_HIGHER , ksusesqi sqlid + FROM x$ksuse) s, + (SELECT indx, + ksllwnam func, ksllwnam, + ksllwlbl objtype, ksllwlbl + FROM x$ksllw) w + WHERE + l.sid LIKE '&_lhp_sid' + AND l.ksulawhr = w.indx (+) + AND l.sid = s.indx + AND (LOWER(l.name) LIKE LOWER('%&_lhp_name%') OR LOWER(RAWTOHEX(l.laddr)) LIKE LOWER('%&_lhp_name%')) + GROUP BY + &_lhp_what + ORDER BY + total_samples DESC + ), + t2 AS (SELECT hsecs FROM v$timer) +SELECT /*+ ORDERED */ + &_lhp_what + , s.total_samples + &_IF_ORA_10_OR_HIGHER , s.dist_samples +-- , s.total_samples_pct + , s.total_samples / &_lhp_samples * 100 latchprof_pct_total_samples + , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / &_lhp_samples latchprof_total_ms +-- , s.dist_events + &_IF_ORA_10_OR_HIGHER , (t2.hsecs - t1.hsecs) * 10 * s.total_samples / dist_samples / &_lhp_samples latchprof_avg_ms + FROM + t1, + samples s, + t2 + WHERE ROWNUM <= 20 +/ + +COL name CLEAR +COL hmode CLEAR +COL what CLEAR +COL func CLEAR +COL objtype CLEAR diff --git a/vg/library_cache_lock.sql b/vg/library_cache_lock.sql new file mode 100644 index 0000000..1f11c9d --- /dev/null +++ b/vg/library_cache_lock.sql @@ -0,0 +1,28 @@ +@@header + +/* + Library Cache Pin/Lock Pile Up hangs the application +*/ + +SELECT s.inst_id + , s.SID + , kglpnmod "Mode" + , kglpnreq "Req" + , SPID "OS Process" + , s.program +FROM gv$session_wait w + , sys.x$kglpn p + , gv$session s + , gv$process o +WHERE p.kglpnuse = s.saddr +and p.inst_id = s.inst_id +AND p.kglpnhdl = w.p1raw +AND w.event LIKE '%library cache lock%' +and w.sid = s.sid +and w.inst_id = s.inst_id +and s.inst_id = o.inst_id +AND s.paddr=o.addr +; + + +@@footer \ No newline at end of file diff --git a/vg/listener_log_analyze.sql b/vg/listener_log_analyze.sql new file mode 100644 index 0000000..66079f8 --- /dev/null +++ b/vg/listener_log_analyze.sql @@ -0,0 +1,95 @@ +CREATE OR REPLACE FUNCTION parse_listener_log_line +( p_in VARCHAR2 + , p_param IN VARCHAR2 +) +RETURN VARCHAR2 + AS + l_begin NUMBER(3); + l_end NUMBER(3); + l_val VARCHAR2(2000); +BEGIN + IF p_param NOT IN('SID' + , 'SERVICE_NAME' + , 'PROGRAM' + , 'SERVICE' + , 'HOST' + , 'USER' + , 'PROTOCOL' + , 'TYPE' + , 'METHOD' + , 'RETRIES' + , 'DELAY' + , 'PORT' + , 'COMMAND' + ) THEN + raise_application_error(-20001, 'Invalid Parameter Value ' || p_param); + END IF; + l_begin := instr(UPPER(p_in), '(' || p_param || '='); + l_begin := instr(UPPER(p_in), '=', l_begin); + l_end := instr(UPPER(p_in), ')', l_begin); + l_val := SUBSTR(p_in, l_begin + 1, l_end -l_begin -1); + RETURN l_val; +END; +/ + + +CREATE directory listener_logs_dir AS +'O:\1521_logs'; + + +CREATE TABLE listener_log +( + log_date DATE + , connect_string VARCHAR2(300) + , protocol_info VARCHAR2(300) + , ACTION VARCHAR2(15) + , service_name VARCHAR2(15) + , return_code NUMBER(10) +) +organization EXTERNAL( + type oracle_loader + DEFAULT directory listener_logs_dir + access parameters + ( + records delimited BY newline + nobadfile + nologfile + nodiscardfile + fields terminated BY "*" lrtrim + missing field VALUES ARE NULL + ( + log_date CHAR(30) date_format DATE mask "DD-MON-YYYY HH24:MI:SS" + , connect_string + , protocol_info + , ACTION + , service_name + , return_code + ) + ) + location('amss231011_listener_toberemoved.log') +) +reject limit unlimited +/ + + + + +select a.LOG_DATE + , a.service_name + , DECODE(parse_listener_log_line(a.connect_string, 'HOST') + , '__jdbc__' , parse_listener_log_line(a.protocol_info,'HOST') + , parse_listener_log_line(a.connect_string, 'HOST') + ) HOST + , DECODE(parse_listener_log_line(a.connect_string, 'HOST') + , '__jdbc__' , 'jdbc' + , parse_listener_log_line(a.connect_string, 'PROGRAM') + ) PROGRAM + , parse_listener_log_line(a.connect_string, 'USER') "USER" + , return_code +from listener_log a +where log_date is not null +and return_code = 0 +and connect_string not like 'service%' +; + + diff --git a/vg/lock_type.sql b/vg/lock_type.sql new file mode 100644 index 0000000..75a56c5 --- /dev/null +++ b/vg/lock_type.sql @@ -0,0 +1,33 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Displays lock types +* Parameters : 1 - Lock Type or Description (Use % as wildcard) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +* +*/ + + +COLUMN type FORMAT a4 +COLUMN name FORMAT a32 +COLUMN ID1_tag FORMAT a25 +COLUMN ID2_tag FORMAT a25 +COLUMN is_user FORMAT a7 +COLUMN description FORMAT a70 + +SELECT * + FROM v$lock_type l + WHERE (LOWER(l.type) like LOWER('&&1') + OR LOWER(l.description) like LOWER('&&1') + ) +ORDER BY l.name +; + +@@footer diff --git a/vg/locked_objects.sql b/vg/locked_objects.sql new file mode 100644 index 0000000..93d823e --- /dev/null +++ b/vg/locked_objects.sql @@ -0,0 +1,126 @@ +@@header + +/* +* Author : Vishal Gupta +* Purpose : Displays currently locked objects in database +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - Object Type (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 29-Jan-16 Vishal Gupta Switched from gv$locked_objects to gv$lock, as +* earlier view was giving information about locks on +* temporary tables (with preserve on commit rows setting). +* - Also added machine and process in the output +* 06-Sep-12 Vishal Gupta Added where clause to add more filtering +* 09-Aug-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE object_type +UNDEFINE WHERE_CLAUSE + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE object_type="&&3" +DEFINE WHERE_CLAUSE="&&4" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&object_name'),'','%','&&object_name') "_object_name" + , DECODE(UPPER('&&object_type'),'','%','&&object_type') "_object_type" +FROM DUAL; + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" +FROM DUAL; +set term on + + + +PROMPT ************************************************************** +PROMPT * L O C K E D O B J E C T S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - Object Type = '&&object_type' +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************** + +COLUMN object_name HEADING "ObjectName" FORMAT a40 +COLUMN object_type HEADING "ObjectType" FORMAT a10 TRUNCATED +COLUMN locked_mode HEADING "LockedMode" FORMAT a10 +COLUMN sid HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN state HEADING "State" FORMAT a12 TRUNCATED +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED +COLUMN process HEADING "Process" FORMAT a11 +COLUMN program HEADING "Program" FORMAT a18 TRUNCATED +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT a12 +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +SELECT o.owner || '.' || o.object_name object_name + , o.object_type + , DECODE(l.lmode, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(l.lmode)) locked_mode + , s.sid sid + , s.inst_id + , s.status + , s.username + , s.machine + , s.osuser + , s.program + , s.process + , s.event + FROM gv$lock l + JOIN dba_objects o ON o.object_id = l.id1 + JOIN gv$session s ON s.inst_id = l.inst_id AND s.sid = l.sid +WHERE o.owner like '&&owner' ESCAPE '\' + AND o.object_name like '&&object_name' ESCAPE '\' + AND o.object_type like '&&object_type' ESCAPE '\' + &&WHERE_CLAUSE +ORDER BY object_name +; + + +UNDEFINE owner +UNDEFINE object_name +UNDEFINE object_type +UNDEFINE WHERE_CLAUSE + +@@footer \ No newline at end of file diff --git a/vg/locks.sql b/vg/locks.sql new file mode 100644 index 0000000..8de02cb --- /dev/null +++ b/vg/locks.sql @@ -0,0 +1,88 @@ +@@header + +/* + +Author : Vishal Gupta +Purpose : Displays currently locked objects in database + +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +* 25-Sep-09 Vishal Gupta Modified to use v$lock as DBA_LOCK might not +* exist in some databases if rdbms/admin/dbablock.sql +* has not been run. +*/ + +COLUMN Blocking HEADING "Bl'ing" FORMAT a6 +COLUMN Blocked HEADING "Bl'ed" FORMAT a6 +COLUMN Since FORMAT a18 +COLUMN inst_id HEADING 'I#' FORMAT 99 +rem COLUMN sid FORMAT 9999 +COLUMN username FORMAT a15 +COLUMN osuser FORMAT a11 TRUNC +COLUMN machine FORMAT a15 +COLUMN lock_type FORMAT a22 TRUNC +COLUMN mode_held FORMAT a13 +COLUMN mode_requested FORMAT a13 +COLUMN mode_requested FORMAT a13 +COLUMN owner FORMAT a15 +COLUMN object_type FORMAT a10 +COLUMN object_name FORMAT a25 + + +SELECT /*+ RULE */ + DECODE(lk.block,1,'Y',0,' ', lk.block) Blocking + , DECODE(s.lockwait,NULL,' ','Y') Blocked +-- , DECODE(block, +-- 0, 'Not Blocking', /* Not blocking any other processes */ +-- 1, 'Blocking', /* This lock blocks other processes */ +-- 2, 'Global', /* This lock is global, so we can't tell */ +-- TO_CHAR(block)) blocking_others + , TO_CHAR(sysdate - (lk.ctime/24/60/60),'DD-MON-YY hh24:MI:SS') Since + , lk.inst_id + , lk.sid + , s.status + , s.username + , s.osuser + , NVL(t.name, lk.type) lock_type + , DECODE(lk.lmode, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(lmode)) mode_held + , DECODE(request, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(request)) mode_requested + , NVL(ob.object_type,' ') object_type + , NVL(ob.owner,' ') owner + , NVL(ob.object_name,' ') object_name + FROM gv$lock lk + , dba_objects ob + , gv$session s + , v$lock_type t + WHERE lk.inst_id = s.inst_id + AND lk.sid = s.sid + AND lk.id1 = ob.object_id (+) + AND lk.type = t.type (+) + AND lk.type NOT IN + ( + 'MR' -- Media Recovery + , 'AE' -- Edition Lock + ) +-- AND (lk.block = 1 OR s.lockwait IS NOT NULL ) +ORDER BY lk.block desc, s.lockwait desc , s.sid, ob.object_name +/ + +@@footer \ No newline at end of file diff --git a/vg/locks_blocking.sql b/vg/locks_blocking.sql new file mode 100644 index 0000000..5120b76 --- /dev/null +++ b/vg/locks_blocking.sql @@ -0,0 +1,100 @@ +@@header + +/* + +Author : Vishal Gupta +Purpose : Displays blocking locks in database + +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------- +* 19-Oct-12 Vishal Gupta Added ClientProcess in output and changed column sizing +* 18-Apr-12 Vishal Gupta Replace with gv$session with materialize hinted +* sub-query factoring (CTE - common table extression) +* 27-Feb-12 Vishal Gupta Created +* +*/ + +PROMPT +PROMPT ********************************* +PROMPT * B L O C K I N G L O C K S +PROMPT ********************************* +PROMPT + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SID FORMAT a30 +COLUMN username HEADING "UserName" FORMAT a20 TRUNC +COLUMN lock_type HEADING "Lock|type" FORMAT a4 TRUNC +COLUMN lock_Name HEADING "Lock Name" FORMAT a22 TRUNC +COLUMN lmode HEADING "Lock|Held" FORMAT a10 +COLUMN request HEADING "Lock|Request" FORMAT a10 +COLUMN osuser HEADING "OSUser" FORMAT a20 TRUNC +COLUMN machine HEADING "Client|Machine" FORMAT a20 TRUNC +COLUMN process HEADING "Client|Process" FORMAT a10 +COLUMN program HEADING "Program" FORMAT a30 TRUNC +COLUMN event HEADING "Event" FORMAT a30 TRUNC + + + +-- +-- Need to use Subquery for gv$session, otherwise session is disconnected with +-- ORA-07445 [qksopCheckPropOpt] when joining dynamic performance views in heirarichal query. +-- +WITH sess as + ( select /*+ RULE NO_MERGE */ s1.* from gv$session s1 + ) +, locks as + (select /*+ RULE NO_MERGE */ * + from gv$lock where lmode = 0 + --AND ( lmode = 0 OR (lmode > 0 AND block > 0)) + ) +SELECT /*+ RULE */ + s.inst_id + , DECODE(level + ,1 , s.sid || ' (Blocker)' + , ' ' || LPAD('-',(level-1)*4,'|---') || '> ' || s.sid + ) + sid + , s.status + , NVL2(lt.type,lt.type || ': ' , NULL)|| lt.name lock_name + , DECODE(l.lmode + ,0,'None' + ,1,'Null' + ,2,'Row-S (SS)' + ,3,'Row-X (SX)' + ,4,'Share (S)' + ,5,'S/Row-X (SSX)' + ,6,'Excl (X)' + , l.lmode + ) lmode + , DECODE(l.request + ,0,'None' + ,1,'Null' + ,2,'Row-S (SS)' + ,3,'Row-X (SX)' + ,4,'Share (S)' + ,5,'S/Row-X (SSX)' + ,6,'Excl (X)' + , l.request + ) request + , s.username + , s.sql_id + , s.machine + , s.osuser + , s.process + , s.program + , s.event +FROM sess s + LEFT OUTER JOIN locks l ON l.inst_id = s.inst_id AND l.sid = s.sid + LEFT OUTER JOIN v$lock_type lt ON l.type = lt.type +WHERE ( s.blocking_session IS NOT NULL + OR exists (select 1 from sess s2 where s2.blocking_instance = s.inst_id and s2.blocking_session = s.sid) + ) +CONNECT BY PRIOR s.inst_id = s.blocking_instance + AND PRIOR s.sid = s.blocking_session +START WITH s.blocking_session IS NULL +; + + +@@footer diff --git a/vg/locks_blocking_new.sql b/vg/locks_blocking_new.sql new file mode 100644 index 0000000..a2111d6 --- /dev/null +++ b/vg/locks_blocking_new.sql @@ -0,0 +1,118 @@ +@@header + +/* + +Author : Vishal Gupta +Purpose : Displays blocking locks in database + +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------- +* 19-Oct-12 Vishal Gupta Added ClientProcess in output and changed column sizing +* 18-Apr-12 Vishal Gupta Replace with gv$session with materialize hinted +* sub-query factoring (CTE - common table extression) +* 27-Feb-12 Vishal Gupta Created +* +*/ + +PROMPT +PROMPT ********************************* +PROMPT * B L O C K I N G L O C K S +PROMPT ********************************* +PROMPT + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SID FORMAT a40 +COLUMN username HEADING "UserName" FORMAT a20 TRUNC +COLUMN lock_type HEADING "Lock|type" FORMAT a4 TRUNC +COLUMN lock_Name HEADING "Lock Name" FORMAT a22 TRUNC +COLUMN osuser HEADING "OSUser" FORMAT a20 TRUNC +COLUMN machine HEADING "Client|Machine" FORMAT a20 TRUNC +COLUMN process HEADING "Client|Process" FORMAT a10 +COLUMN program HEADING "Program" FORMAT a30 TRUNC +COLUMN event HEADING "Event" FORMAT a30 TRUNC + + +-- +---- +---- Need to use Subquery for gv$session, otherwise session is disconnected with +---- ORA-07445 [qksopCheckPropOpt] when joining dynamic performance views in heirarichal query. +---- +--WITH sess as +-- ( select /*+ RULE NO_MERGE */ s1.* from gv$session s1 +-- ) +--, locks as +-- (select /*+ RULE NO_MERGE */ * +-- from gv$lock where lmode = 0 +-- --AND ( lmode = 0 OR (lmode > 0 AND block > 0)) +-- ) +--SELECT /*+ RULE */ +-- s.inst_id +-- , DECODE(level +-- ,1 , s.sid || ' (Blocker)' +-- , ' ' || LPAD('-',(level-1)*4,'|---') || '> ' || s.sid +-- ) +-- sid +-- , s.status +-- , lt.name lock_name +-- , s.username +-- , s.osuser +-- , s.sql_id +-- , s.process +-- , s.program +-- , s.event +--FROM sess s +-- LEFT OUTER JOIN locks l ON l.inst_id = s.inst_id AND l.sid = s.sid +-- LEFT OUTER JOIN v$lock_type lt ON l.type = lt.type +--WHERE ( s.blocking_session IS NOT NULL +-- OR exists (select 1 from sess s2 where s2.blocking_instance = s.inst_id and s2.blocking_session = s.sid) +-- ) +--CONNECT BY PRIOR s.inst_id = s.blocking_instance +-- AND PRIOR s.sid = s.blocking_session +--START WITH s.blocking_session IS NULL +--; + +SELECT l.inst_id, DECODE(l.request,0,'Holder ','---> Waiter ')|| l.sid sid,l.id1, l.id2, l.lmode, l.request, lt.name, l.CTIME, l.BLOCK + , s.username +FROM gV$LOCK l + , gv$session s + , gv$lock_type lt +WHERE l.inst_id = s.inst_id + AND l.sid = s.sid + AND l.addr = s. + AND l.type = lt.type + AND (l.id1, l.id2, l.type) IN (SELECT l2.id1, l2.id2, l2.type FROM gV$LOCK l2 WHERE l2.request>0) +ORDER BY l.id1, l.request; + + +SELECT s.inst_id + , DECODE(level + ,1 , s.sid || ' (Blocker)' + , ' ' || LPAD('-',(level-1)*4,'|---') || '> ' || s.sid + ) + , s.blocking_session + , s.blocking_instance + , s.final_blocking_session + , s.final_blocking_instance + , s.status +-- , lt.name lock_name + , s.username + , s.osuser + , s.sql_id + , s.process + , s.program + , s.event + FROM gv$session s + , gv$lock l + , gv$lock_type lt +WHERE s.inst_id = l.inst_id + AND s.sid = l.sid + AND l.type = lt.type +START WITH s.blocking_session is null +CONNECT BY NOCYCLE + PRIOR s.inst_id = s.blocking_instance + AND s.sid = s.blocking_session +; + +@@footer diff --git a/vg/locks_blocking_old.sql b/vg/locks_blocking_old.sql new file mode 100644 index 0000000..9cadc07 --- /dev/null +++ b/vg/locks_blocking_old.sql @@ -0,0 +1,85 @@ +@@header + +/* + +Author : Vishal Gupta +Purpose : Displays blocking locks in database + +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Feb-12 Vishal Gupta Intial version +* 18-Apr-12 Vishal Gupta Replace with gv$session with materialize hinted +* sub-query factoring (CTE - common table extression) +* +*/ + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SID FORMAT a20 +COLUMN username HEADING "UserName" FORMAT a20 TRUNC +COLUMN lock_type HEADING "Lock|type" FORMAT a4 TRUNC +COLUMN lock_Name HEADING "Lock Name" FORMAT a22 TRUNC +COLUMN osuser HEADING "OSUser" FORMAT a20 TRUNC +COLUMN machine HEADING "Client|Machine" FORMAT a20 TRUNC +COLUMN blocking_instance HEADING "Bl'ing|Inst" +COLUMN blocking_session HEADING "Bl'ing|SID" +COLUMN blocking_session_status HEADING "Bl'ing|Session|Status" +COLUMN final_blocking_instance HEADING "Final|Bl'ing|Inst" +COLUMN final_blocking_session HEADING "Final|Bl'ing|SID" +COLUMN final_blocking_session_status HEADING "Final|Bl'ing|Session|Status" +COLUMN program HEADING "Program" FORMAT a30 TRUNC +COLUMN event HEADING "Event" FORMAT a30 TRUNC + + +-- Materialize hint is needed to speed up the joins +-- between dynamic performance view gv$session + +-- Need to use Subquery for gv$session, otherwise session is disconnect with ORA-07445 [qksopCheckPropOpt] +WITH sess as + ( select /*+ materialize */ s1.* from gv$session s1 + ) +, locks as +(select /*+ materialize */ * from gv$lock where lmode = 0 + -- AND ( l.lmode = 0 OR (l.lmode > 0 AND l.block > 0)) +) +SELECT s.inst_id + , DECODE(level + ,1 , s.sid || ' (Blocker)' + , ' ' || LPAD('-',(level-1)*4,'|---') || '> ' || s.sid + ) + -- || NVL2(s2.blocking_session, ' (Blocker)', ' ') + sid + , s.status +-- , l.lmode +-- , l.request +-- , l.block +-- , s.lock_type + , lt.name lock_name + , s.username + , s.osuser + , s.sql_id + , s.program + , s.event +-- , s.blocking_instance +-- , s.blocking_session +-- , s.blocking_session_status +-- , s.final_blocking_instance +-- , s.final_blocking_session +-- , s.final_blocking_session_status +FROM sess s + LEFT OUTER JOIN sess s2 ON s2.blocking_instance = s.inst_id AND s2.blocking_session = s.sid + LEFT OUTER JOIN locks l ON l.inst_id = s.inst_id + AND l.sid = s.sid + LEFT OUTER JOIN v$lock_type lt ON l.type = lt.type +WHERE +( +s.blocking_session IS NOT NULL +OR s2.sid IS NOT NULL +) +CONNECT BY PRIOR s.inst_id = s.blocking_instance + AND PRIOR s.sid = s.blocking_session +START WITH s.blocking_session IS NULL +; + +@@footer diff --git a/vg/log_miner.sql b/vg/log_miner.sql new file mode 100644 index 0000000..07733f2 --- /dev/null +++ b/vg/log_miner.sql @@ -0,0 +1,128 @@ + + +-- Build dictionary in flat file +BEGIN +sys.DBMS_LOGMNR_D.BUILD ( dictionary_filename => 'dictionary.ora' + , dictionary_location => '/appl/oracle/admin/CALYPSOP/udump' + , options => sys.DBMS_LOGMNR_D.STORE_IN_FLAT_FILE); +END; +/ + + + +-- Change Tablespace for Logminer tables +exec sys.DBMS_LOGMNR_D.SET_TABLESPACE('USERS'); + + +-- Add archive redo log files +begin +for i in 42634 .. 42714 +loop + execute immediate 'begin sys.DBMS_LOGMNR.ADD_LOGFILE(''/orabackups/restore/CALYPSOP_log_' || i || '_1_546690336.arc''); end;'; +end loop; +end; +/ + +select 'exec sys.DBMS_LOGMNR.ADD_LOGFILE(''' || name || ''');' from v$archived_log +where first_time between TO_TIMESTAMP( '10-JUL-2014 20:00:00' ,'DD-MON-YYYY HH24:MI:SS') and TO_TIMESTAMP( '11-JUL-2014 07:00:00' ,'DD-MON-YYYY HH24:MI:SS') +and dest_id = 1 +--and thread +order by first_time; + + +-- Start Log mining session +BEGIN +sys.DBMS_LOGMNR.START_LOGMNR( + OPTIONS => sys.DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + sys.DBMS_LOGMNR.COMMITTED_DATA_ONLY + sys.DBMS_LOGMNR.PRINT_PRETTY_SQL + , startTime => to_date('30-NOV-07 12:00:00','DD-MON-YY HH24:MI:SS') + , endTime => to_date('30-NOV-07 23:59:59','DD-MON-YY HH24:MI:SS') +-- , startSCN => 1232 +-- , endSCN => 1234 +-- , DictFileName => '', +); +END; +/ + +/* +OPTIONS above can be + +sys.DBMS_LOGMNR.COMMITTED_DATA_ONLY +sys.DBMS_LOGMNR.SKIP_CORRUPTION +sys.DBMS_LOGMNR.DDL_DICT_TRACKING +sys.DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG +sys.DBMS_LOGMNR.DICT_FROM_REDO_LOGS +sys.DBMS_LOGMNR.NO_SQL_DELIMITER +sys.DBMS_LOGMNR.NO_ROWID_IN_STMT +sys.DBMS_LOGMNR.PRINT_PRETTY_SQL +sys.DBMS_LOGMNR.CONTINUOUS_MINE +sys.DBMS_LOGMNR.STRING_LITERALS_IN_STMT + +*/ + +ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'; +select * from V$LOGMNR_CONTENTS +WHERE 1=1 +--and TABLE_NAME like ='%' +; + + + +exec sys.DBMS_LOGMNR.END_LOGMNR; + + + + + + + + +DECLARE + LOGSEQ_LOW NUMBER := 143025; + LOGSEQ_HIGH NUMBER := 144765; + LOGS_BATCH_SIZE NUMBER := 10; +BEGIN + + + execute immediate 'truncate table logminer.MINED_LOGMNR_CONTENTS'; + + +-- Change Tablespace for Logminer tables +-- sys.DBMS_LOGMNR_D.SET_TABLESPACE('LOGMINER'); + + +FOR j in 0 .. CEIL((LOGSEQ_HIGH - LOGSEQ_LOW)/LOGS_BATCH_SIZE) +Loop + + -- Add archive redo log files + For I In (Logseq_low + (J*Logs_batch_size) ) .. (Logseq_low + (J*Logs_batch_size) + Logs_batch_size - 1 ) + --for i in LOGSEQ_LOW .. LOGSEQ_HIGH + loop + Exit When I >= Logseq_high; + execute immediate 'begin sys.DBMS_LOGMNR.ADD_LOGFILE(''/OraData2/I981172/627394646_1_' || i || '.arc''); end;'; + end loop; + + + -- Start Log mining session + Sys.Dbms_logmnr.Start_logmnr( + OPTIONS => sys.DBMS_LOGMNR.PRINT_PRETTY_SQL + --, startTime => to_date('30-OCT-09 00:00:00','DD-MON-YY HH24:MI:SS') + -- , endTime => to_date('30-OCT-09 00:01:00','DD-MON-YY HH24:MI:SS') + -- , startSCN => 1232 + -- , endSCN => 1234 + , DictFileName => '/OraData2/I981172/dictionary.ora' + ); + + + + + insert /*+ APPEND */into logminer.MINED_LOGMNR_CONTENTS + select * from V$LOGMNR_CONTENTS where SEG_OWNER = 'RABO' AND TABLE_NAME IN ('PREFERENCES','USERPREFSLR'); + commit; + + sys.DBMS_LOGMNR.END_LOGMNR; + +End Loop; + +End; +/ + diff --git a/vg/login.sql b/vg/login.sql new file mode 100644 index 0000000..ed4f5ca --- /dev/null +++ b/vg/login.sql @@ -0,0 +1,82 @@ + +/* +* +* Author : Vishal Gupta +* Purpose : Script is run once at connection creation time +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ --------------------------------------------------- +* 05-Aug-04 Vishal Gupta Created +* 12-Jul-12 Vishal Gupta Enable auto-logging by spooling output to a file +* +* +*/ + + +set term off + +COLUMN user NEW_VALUE vg_USER noprint +COLUMN instance_name NEW_VALUE vg_instance_name noprint +COLUMN timestamp NEW_VALUE vg_timestamp noprint + +set feed off +set head off +select lower(user) "user" + , to_char(sysdate,'YYYYMMDD_HH24MISS') timestamp + from dual; +select upper(instance_name) instance_name from v$instance; +set feed on +set head on +set serveroutput on +set lines 200 +--SET SQLPROMPT "&&vg_USER@&&vg_instance_name:SQL> " + +COLUMN user CLEAR +COLUMN instance_name CLEAR +COLUMN timestamp CLEAR + + +SET SQLPROMPT "&_CONNECT_IDENTIFIER:SQL> " + + +-- +-- Set following positional parameters, so that input values in all script +-- can be defaulted to some value without getting prompted to enter the value +-- when specific positional input is not passed to script. +-- +DEFINE 1="" +DEFINE 2="" +DEFINE 3="" +DEFINE 4="" +DEFINE 5="" +DEFINE 6="" +DEFINE 7="" +DEFINE 8="" +DEFINE 9="" +DEFINE 10="" +DEFINE 11="" +DEFINE 12="" + + +-- Set spool file to log all the action and output in the session. +-- Create separate spool file for each session. +-- Use instance name and timestamp to create unique and identifiable logfiles. + +-- Windows +DEFINE VG_SPOOLDIR="C:\temp\sqlscripts_logs" +DEFINE VG_SPOOLFILE="&&VG_SPOOLDIR\&&vg_instance_name._&&vg_timestamp..log" + +-- Unix +--DEFINE VG_SPOOLDIR="$TMP" +--DEFINE VG_SPOOLFILE="&&VG_SPOOLDIR/&&vg_instance_name._&&vg_timestamp..log" + + +set term on + +--spool &&VG_SPOOLFILE append + +-- Display current session's information. +@whoami + diff --git a/vg/logswitchfreq.sql b/vg/logswitchfreq.sql new file mode 100644 index 0000000..c288203 --- /dev/null +++ b/vg/logswitchfreq.sql @@ -0,0 +1,128 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display houly and daily redolog switches by frequency +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Dec-14 Vishal Gupta Added number of days as input parameter +* 18-Mar-14 Vishal Gupta Added separator columns for daily total +* 27-Feb-12 Vishal Gupta Formated the output +* 05-Aug-04 Vishal Gupta First Draft +* +*/ +set term on + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE days +DEFINE days="&&1" + +set term off +COLUMN _days NEW_VALUE days NOPRINT + +SELECT UPPER(DECODE('&&days','','90','&&days')) "_days" +FROM DUAL; +set term on + + + +PROMPT +PROMPT ******************************************************************************************************************************************* +PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Frequency) +PROMPT * (Hourly and Daily figures in number of archivelogs) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Days = '&&days' +PROMPT ******************************************************************************************************************************************* +PROMPT + +PROMPT - <-------------------------------------------------------- Hourly Total -----------------------------------------------> +/* + Total h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 + Date Day (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) (#) + --------- --- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +*/ + + +SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000 + +COLUMN separator HEADING "!|!|!" FORMAT A1 + + +COLUMN "Date" HEADING "Date" FORMAT A9 +COLUMN "Total" HEADING "Total|(#)" FORMAT 9999 +COLUMN "Day" HEADING "Day" FORMAT A3 +COLUMN h0 HEADING "h0|(#)" FORMAT 999 +COLUMN h1 HEADING "h1|(#)" FORMAT 999 +COLUMN h2 HEADING "h2|(#)" FORMAT 999 +COLUMN h3 HEADING "h3|(#)" FORMAT 999 +COLUMN h4 HEADING "h4|(#)" FORMAT 999 +COLUMN h5 HEADING "h5|(#)" FORMAT 999 +COLUMN h6 HEADING "h6|(#)" FORMAT 999 +COLUMN h7 HEADING "h7|(#)" FORMAT 999 +COLUMN h8 HEADING "h8|(#)" FORMAT 999 +COLUMN h9 HEADING "h9|(#)" FORMAT 999 +COLUMN h10 HEADING "h10|(#)" FORMAT 999 +COLUMN h11 HEADING "h11|(#)" FORMAT 999 +COLUMN h12 HEADING "h12|(#)" FORMAT 999 +COLUMN h13 HEADING "h13|(#)" FORMAT 999 +COLUMN h14 HEADING "h14|(#)" FORMAT 999 +COLUMN h15 HEADING "h15|(#)" FORMAT 999 +COLUMN h16 HEADING "h16|(#)" FORMAT 999 +COLUMN h17 HEADING "h17|(#)" FORMAT 999 +COLUMN h18 HEADING "h18|(#)" FORMAT 999 +COLUMN h19 HEADING "h19|(#)" FORMAT 999 +COLUMN h20 HEADING "h20|(#)" FORMAT 999 +COLUMN h21 HEADING "h21|(#)" FORMAT 999 +COLUMN h22 HEADING "h22|(#)" FORMAT 999 +COLUMN h23 HEADING "h23|(#)" FORMAT 999 + + +SELECT to_char(trunc(first_time),'DD-Mon-YY') "Date", + to_char(first_time, 'Dy') "Day", + '|' separator, + count(1) Total, + '|' separator, + SUM(decode(to_char(first_time, 'hh24'),'00',1,0)) "h0", + SUM(decode(to_char(first_time, 'hh24'),'01',1,0)) "h1", + SUM(decode(to_char(first_time, 'hh24'),'02',1,0)) "h2", + SUM(decode(to_char(first_time, 'hh24'),'03',1,0)) "h3", + SUM(decode(to_char(first_time, 'hh24'),'04',1,0)) "h4", + SUM(decode(to_char(first_time, 'hh24'),'05',1,0)) "h5", + SUM(decode(to_char(first_time, 'hh24'),'06',1,0)) "h6", + SUM(decode(to_char(first_time, 'hh24'),'07',1,0)) "h7", + SUM(decode(to_char(first_time, 'hh24'),'08',1,0)) "h8", + SUM(decode(to_char(first_time, 'hh24'),'09',1,0)) "h9", + SUM(decode(to_char(first_time, 'hh24'),'10',1,0)) "h10", + SUM(decode(to_char(first_time, 'hh24'),'11',1,0)) "h11", + SUM(decode(to_char(first_time, 'hh24'),'12',1,0)) "h12", + SUM(decode(to_char(first_time, 'hh24'),'13',1,0)) "h13", + SUM(decode(to_char(first_time, 'hh24'),'14',1,0)) "h14", + SUM(decode(to_char(first_time, 'hh24'),'15',1,0)) "h15", + SUM(decode(to_char(first_time, 'hh24'),'16',1,0)) "h16", + SUM(decode(to_char(first_time, 'hh24'),'17',1,0)) "h17", + SUM(decode(to_char(first_time, 'hh24'),'18',1,0)) "h18", + SUM(decode(to_char(first_time, 'hh24'),'19',1,0)) "h19", + SUM(decode(to_char(first_time, 'hh24'),'20',1,0)) "h20", + SUM(decode(to_char(first_time, 'hh24'),'21',1,0)) "h21", + SUM(decode(to_char(first_time, 'hh24'),'22',1,0)) "h22", + SUM(decode(to_char(first_time, 'hh24'),'23',1,0)) "h23" + from v$log_history + where 1=1 +-- and standby_dest = 'NO' +-- and CREATOR IN ('ARCH' , 'FGRD') + and first_time > sysdate - &&days +group by trunc(first_time), to_char(first_time, 'Dy') +order by trunc(first_time) +/ + +@@footer diff --git a/vg/logswitchsize.sql b/vg/logswitchsize.sql new file mode 100644 index 0000000..935d14d --- /dev/null +++ b/vg/logswitchsize.sql @@ -0,0 +1,134 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display houly and daily redolog switches by size +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Dec-14 Vishal Gupta Added number of days as input parameter +* 18-Mar-14 Vishal Gupta Added separator columns for daily total +* 27-Feb-12 Vishal Gupta Formated the output and parameterized size granuality +* 05-Aug-04 Vishal Gupta First Draft +* +*/ +set term on + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE days +DEFINE days="&&1" + +set term off +COLUMN _DAYS NEW_VALUE DAYS NOPRINT + +SELECT UPPER(DECODE('&&days','','90','&&days')) "_DAYS" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE size_label=GB +DEFINE size_divider="1024/1024/1024" +DEFINE round_precision=2 + + +PROMPT +PROMPT ************************************************************************ +PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Size) +PROMPT * (Hourly and Daily figures in &&size_label) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Days = '&&days' +PROMPT ************************************************************************ +PROMPT +PROMPT - <-------------------------------------------------------- hourly total -----------------------------------------------> +/* + Total h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 + Date Day (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) + --------- --- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +*/ + +SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000 + +COLUMN separator HEADING "!|!|!" FORMAT A1 + +COLUMN "Date" HEADING "Date" FORMAT A9 +COLUMN "Total" HEADING "Day|Total|(&size_label)" FORMAT 9999 +COLUMN "Day" HEADING "Day" FORMAT A3 +COLUMN h0 HEADING "h0|(&size_label)" FORMAT 999 +COLUMN h1 HEADING "h1|(&size_label)" FORMAT 999 +COLUMN h2 HEADING "h2|(&size_label)" FORMAT 999 +COLUMN h3 HEADING "h3|(&size_label)" FORMAT 999 +COLUMN h4 HEADING "h4|(&size_label)" FORMAT 999 +COLUMN h5 HEADING "h5|(&size_label)" FORMAT 999 +COLUMN h6 HEADING "h6|(&size_label)" FORMAT 999 +COLUMN h7 HEADING "h7|(&size_label)" FORMAT 999 +COLUMN h8 HEADING "h8|(&size_label)" FORMAT 999 +COLUMN h9 HEADING "h9|(&size_label)" FORMAT 999 +COLUMN h10 HEADING "h10|(&size_label)" FORMAT 999 +COLUMN h11 HEADING "h11|(&size_label)" FORMAT 999 +COLUMN h12 HEADING "h12|(&size_label)" FORMAT 999 +COLUMN h13 HEADING "h13|(&size_label)" FORMAT 999 +COLUMN h14 HEADING "h14|(&size_label)" FORMAT 999 +COLUMN h15 HEADING "h15|(&size_label)" FORMAT 999 +COLUMN h16 HEADING "h16|(&size_label)" FORMAT 999 +COLUMN h17 HEADING "h17|(&size_label)" FORMAT 999 +COLUMN h18 HEADING "h18|(&size_label)" FORMAT 999 +COLUMN h19 HEADING "h19|(&size_label)" FORMAT 999 +COLUMN h20 HEADING "h20|(&size_label)" FORMAT 999 +COLUMN h21 HEADING "h21|(&size_label)" FORMAT 999 +COLUMN h22 HEADING "h22|(&size_label)" FORMAT 999 +COLUMN h23 HEADING "h23|(&size_label)" FORMAT 999 + + + + +SELECT to_char(trunc(COMPLETION_TIME),'DD-Mon-YY') "Date", + to_char(COMPLETION_TIME, 'Dy') "Day", + '|' separator, + ROUND(SUM(((BLOCKS * BLOCK_SIZE)/&size_divider))) "Total", + '|' separator, + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'00',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h0", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'01',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h1", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'02',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h2", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'03',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h3", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'04',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h4", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'05',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h5", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'06',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h6", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'07',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h7", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'08',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h8", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'09',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h9", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'10',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h10", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'11',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h11", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'12',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h12", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'13',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h13", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'14',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h14", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'15',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h15", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'16',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h16", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'17',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h17", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'18',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h18", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'19',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h19", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'20',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h20", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'21',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h21", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'22',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h22", + ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'23',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h23" + from v$archived_log + where standby_dest = 'NO' + AND CREATOR IN ('ARCH' , 'FGRD','LGWR','RFS') + AND completion_time > sysdate - &days + group by trunc(COMPLETION_TIME), to_char(COMPLETION_TIME, 'Dy') + order by trunc(COMPLETION_TIME) +/ + +@@footer diff --git a/vg/long_sessions.sql b/vg/long_sessions.sql new file mode 100644 index 0000000..c2616a5 --- /dev/null +++ b/vg/long_sessions.sql @@ -0,0 +1,72 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display long running sessions +* Compatibility : 10.1 and above +* Parameters : 1 - Number of minutes +* 2 - Number of rows to display +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +* 27-Mar-12 Vishal Gupta Included the session wait history +* +*/ + +define minutes=&="&&1" +define no_of_rows=&&2 + + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SID FORMAT 9999 +COLUMN last_call_et HEADING "Last|Call|(minutes)" FORMAT 999,999 +COLUMN event HEADING "EventName" FORMAT a33 +COLUMN username FORMAT a20 +COLUMN logon_time FORMAT a15 +COLUMN service_name FORMAT a21 +COLUMN process FORMAT a15 +COLUMN osuser FORMAT a20 TRUNCATE +COLUMN machine FORMAT a30 TRUNCATE +COLUMN program FORMAT a50 TRUNCATE + + + +Prompt ###################################################### +Prompt L O N G R U N N I N G S E S S I O N S +Prompt +Prompt - Running Longer than &minutes minutes. +Prompt - displaying top &no_of_rows rows. +Prompt ###################################################### + + +select * From +( +select s.inst_id + , s.sid + , s.status + , ROUND(s.last_call_et,2) last_call_et + , s.event + , s.sql_id + , s.username + , s.osuser + , s.program + , s.machine +from gv$session s +where last_call_et > (60 * &minutes) + and s.type <> 'BACKGROUND' + AND s.status = 'ACTIVE' +order by s.last_call_et desc +) +where rownum <= &no_of_rows +/ + + +UNDEFINE minutes +UNDEFINE no_of_rows + + +@@footer diff --git a/vg/longops.sql b/vg/longops.sql new file mode 100644 index 0000000..8405dce --- /dev/null +++ b/vg/longops.sql @@ -0,0 +1,50 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display Long running operations +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +*/ +set term on + + +COLUMN pct_done HEADING "%Done" FORMAT 999 ON +COLUMN time_remaining HEADING "Remain|(sec)" FORMAT 999,999 ON +COLUMN elapsed_seconds HEADING "Elapsed|(sec)" FORMAT 999,999 ON +COLUMN inst_id HEADING "I#" FORMAT 99 ON +COLUMN sid HEADING "SID" FORMAT 9999 ON +COLUMN username HEADING "USER" FORMAT a15 ON TRUNCATE +COLUMN OSUSER HEADING "OSUSER" FORMAT a20 ON TRUNCATE +COLUMN program HEADING "Program" FORMAT a20 ON TRUNCATE +COLUMN start_time HEADING "Start Time" FORMAT a18 ON +COLUMN last_update_time HEADING "Last Update" FORMAT a18 ON +COLUMN opname HEADING "Operation" FORMAT a20 ON TRUNCATE +COLUMN target_desc HEADING "Target|Desc" FORMAT a20 ON TRUNCATE + +SELECT ROUND(l.sofar / l.totalwork *100, 2) pct_done + , l.time_remaining + , l.elapsed_seconds + , s.sid + , s.inst_id + , s.username + , s.osuser + , s.program + , TO_CHAR(l.start_time,'DD-MON-YY hh24:mi:ss') start_time + , TO_CHAR(l.last_update_time,'DD-MON-YY hh24:mi:ss') last_update_Time + , l.opname + , l.target_desc +FROM gv$session_longops l, gv$session s +WHERE time_remaining > 0 +and s.sid = l.sid +AND s.inst_id = l.inst_id +ORDER BY l.elapsed_seconds DESC +; + +@@footer diff --git a/vg/metricname.sql b/vg/metricname.sql new file mode 100644 index 0000000..9c14095 --- /dev/null +++ b/vg/metricname.sql @@ -0,0 +1,51 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display the metric names +* Version : +* Parameters : 1 - Metric Name (Use % as wildcard and \ as escape character) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Oct-12 Vishal Gupta Created +* +*/ + +UNDEFINE metric_name +UNDEFINE metric_group + + +DEFINE metric_name="&&1" +DEFINE metric_group="&&2" + +Prompt +Prompt *************************************************************************************************** +Prompt * ALL Metric Names like '&&metric_name' +Prompt *************************************************************************************************** + +COLUMN group_name HEADING "Metric Group" FORMAT a32 +COLUMN metric_name HEADING "Metric Name" FORMAT a45 +COLUMN metric_unit HEADING "Metric Unit" FORMAT a30 +COLUMN interval_size HEADING "Interval|Size|(sec)" FORMAT 999999 +COLUMN max_interval HEADING "Max|Interval" FORMAT 999999 + +SELECT m.group_name + , m.metric_name + , m.metric_unit + , mg.interval_size/100 interval_size + , mg.max_interval + FROM v$metricname m + JOIN v$metricgroup mg ON mg.group_id = m.group_id +WHERE ( UPPER(m.metric_name) like UPPER('&&metric_name') ESCAPE '\' + OR UPPER(m.group_name) like UPPER('&&metric_name') ESCAPE '\' ) +ORDER BY m.group_name + , UPPER(m.metric_name) +; + + +@@footer diff --git a/vg/mrp.sql b/vg/mrp.sql new file mode 100644 index 0000000..88fe418 --- /dev/null +++ b/vg/mrp.sql @@ -0,0 +1,60 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display MRP (Managed Recovery Process) Status +* Version : +* Parameters : +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Feb-13 Vishal Gupta Created +* +*/ + +Prompt +Prompt ******************* +Prompt * MRP Status +Prompt ******************* + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN process HEADING "Process" FORMAT a10 +COLUMN pid HEADING "PID" FORMAT 999999 +COLUMN status HEADING "Status" FORMAT a15 +COLUMN client_process HEADING "Client|Process" FORMAT a10 +COLUMN client_pid HEADING "Client|PID" FORMAT a10 +COLUMN thread# HEADING "Th#" FORMAT 999 +COLUMN sequence# HEADING "Seq#" FORMAT 99999999 +COLUMN block# HEADING "Block#" FORMAT 9999999999 +COLUMN blocks HEADING "Blocks" FORMAT 9999999999 +COLUMN delay_mins HEADING "Delay|Mins" FORMAT 999999 +COLUMN known_agents HEADING "Known|Agents" FORMAT 999999 +COLUMN active_agents HEADING "Active|Agents" FORMAT 999999 + +SELECT inst_id + , process + , pid + , status + , client_process + , client_pid + , thread# + , sequence# + , block# + , blocks + , delay_mins + , known_agents + , active_agents + FROM gv$managed_standby + WHERE process in ('MRP0','RFS') +-- AND status NOT IN ('IDLE') + AND thread# <> 0 + ORDER BY process + --, inst_id + , thread# + , sequence# +; + +@@footer diff --git a/vg/mview_details.sql b/vg/mview_details.sql new file mode 100644 index 0000000..45b3fbb --- /dev/null +++ b/vg/mview_details.sql @@ -0,0 +1,90 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display materialized view's details +* Parameters : 1 - OWNER +* 2 - VIEW_NAME +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 21-May-14 Vishal Gupta Created +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE OWNER +UNDEFINE VIEW_NAME + +DEFINE OWNER="&&1" +DEFINE VIEW_NAME="&&2" + + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _view_name NEW_VALUE view_name NOPRINT + +set term off +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END ) "_owner" + , DECODE(UPPER('&&view_name'),'',SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1),UPPER('&&view_name')) "_view_name" +FROM DUAL; +set term on + + +Prompt +Prompt ************************************************************ +Prompt ** Materialized View Details +Prompt ************************************************************ + + +set pagesize 0 + +SELECT 'MView Name : ' || m.owner || '.' || m.mview_name +|| chr(10) || 'Comments : ' || c.comments +|| chr(10) || 'Compile State : ' || m.compile_state +|| chr(10) || 'Query Length : ' || m.query_len +|| chr(10) || 'Created : ' || TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') +|| chr(10) || 'Last Refresh Type : ' || m.last_refresh_type +|| chr(10) || 'Last Refresh Date : ' || TO_CHAR(m.last_refresh_date,'DD-MON-YY HH24:MI:SS') +|| chr(10) || 'Staleness : ' || m.staleness +|| chr(10) || 'Stale Since : ' || TO_CHAR(m.stale_since,'DD-MON-YY HH24:MI:SS') +|| chr(10) || 'Refresh Mode : ' || m.refresh_mode +|| chr(10) || 'Refresh Method : ' || m.refresh_method +|| chr(10) || 'Build Mode : ' || m.build_mode +|| chr(10) || 'Rewrite Enabled : ' || m.rewrite_enabled +|| chr(10) || 'Rewrite Capability : ' || m.rewrite_capability +|| chr(10) || 'Updatable : ' || m.updatable +|| chr(10) || 'Update Log : ' || m.update_log +|| chr(10) || 'Master Rollback Segment : ' || m.master_rollback_seg +|| chr(10) || 'Master Link : ' || m.master_link +|| chr(10) || 'Fast Refreshable : ' || m.fast_refreshable +|| chr(10) || 'After Fast Refresh : ' || m.after_fast_refresh +|| chr(10) || 'Use NO Index : ' || m.use_no_index +|| chr(10) || 'Unknown Prebuilt : ' || m.unknown_prebuilt +|| chr(10) || 'Unknown PL/SQL Function : ' || m.unknown_plsql_func +|| chr(10) || 'Unknown External Table : ' || m.unknown_external_table +|| chr(10) || 'Unknown Consider Fresh : ' || m.unknown_consider_fresh +|| chr(10) || 'Unknown Imported : ' || m.unknown_import +|| chr(10) || 'Unknown Trused Cons'' : ' || m.unknown_trusted_fd +--|| chr(10) || 'Number of PCT Tables : ' || m.num_pct_tables +--|| chr(10) || 'Updatables : ' || m.num_fresh_pct_regions +--|| chr(10) || 'Updatables : ' || m.num_stale_pct_regions + FROM dba_mviews m + JOIN dba_mview_comments c ON c.owner = m.owner AND c.mview_name = m.mview_name + JOIN dba_objects o ON m.owner = o.owner AND m.mview_name = o.object_name AND o.object_type in ('MATERIALIZED VIEW','SNAPSHOT') + WHERE m.owner = upper('&&OWNER') + AND m.mview_name = upper('&&VIEW_NAME') +; + + +set pagesize 200 + +@@footer diff --git a/vg/mviewtext.sql b/vg/mviewtext.sql new file mode 100644 index 0000000..0913f43 --- /dev/null +++ b/vg/mviewtext.sql @@ -0,0 +1,60 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display view's query +* Parameters : 1 - OWNER +* 2 - VIEW_NAME +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE OWNER="&&1" +DEFINE VIEW_NAME="&&2" + + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _view_name NEW_VALUE view_name NOPRINT + +set term off +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END ) "_owner" + , DECODE(UPPER('&&view_name'),'',SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1),UPPER('&&view_name')) "_view_name" +FROM DUAL; +set term on + + +Prompt +Prompt ************************************************************ +Prompt ** VIEW &OWNER..&VIEW_NAME's Query +Prompt ************************************************************ + +COLUMN query HEADING "Query" FORMAT a150 + +set long 400000 +set pages 1000 + + +SELECT m.query + FROM dba_mviews m + WHERE m.owner = upper('&&OWNER') + AND m.mview_name = upper('&&VIEW_NAME') +; + +UNDEFINE OWNER +UNDEFINE VIEW_NAME + + +@@footer diff --git a/vg/nc_worklist_progress.sql b/vg/nc_worklist_progress.sql new file mode 100644 index 0000000..c1dbcf4 --- /dev/null +++ b/vg/nc_worklist_progress.sql @@ -0,0 +1,50 @@ +@@header + +/* +Job State +Not Started(0) +Running (1) +Finished(2) +*/ + +COLUMN job_state FORMAT a15 +COLUMN "Count" FORMAT 99999 +COLUMN max_start_date FORMAT a18 + +SELECT * FROM +( +select * from +( +select wl.program_name + , count(1) "Count" + , DECODE(wl.job_state + ,'-1','Error(-1)' + ,'0','Not Started(0)' + ,'1','Running (1)' + ,'2','Finished(2)' + ,wl.job_state + ) job_state + , TO_CHAR(max(wl.start_date),'DD-MON-YY HH24:MI:SS') max_start_date + , TO_CHAR(max(wl.end_date),'DD-MON-YY HH24:MI:SS') max_end_date + , TO_CHAR(min(wl.start_date),'DD-MON-YY HH24:MI:SS') min_start_date + , TO_CHAR(min(wl.end_date),'DD-MON-YY HH24:MI:SS') min_end_date +from pm_own.pm_work_list wl +where 1=1 +--and program_name ='ctrf' +and wl.program_name in ( select distinct program_name from pm_own.pm_work_list where job_state = 1) +and wl.start_date > sysdate - 1 +group by wl.program_name, DECODE(wl.job_state + ,'-1','Error(-1)' + ,'0','Not Started(0)' + ,'1','Running (1)' + ,'2','Finished(2)' + ,wl.job_state + ) +order by max(wl.start_date) desc +) +where rownum <= 20 +) +ORDER BY program_name, job_state +; + +@@footer diff --git a/vg/netspeed.sh b/vg/netspeed.sh new file mode 100644 index 0000000..5c289c1 --- /dev/null +++ b/vg/netspeed.sh @@ -0,0 +1,20 @@ +#!/bin/bash +IF=$1 +if [ -z "$IF" ]; then + IF=`ls -1 /sys/class/net/ | head -1` +fi +RXPREV=-1 +TXPREV=-1 +echo "Listening $IF..." +while [ 1 == 1 ] ; do + RX=`cat /sys/class/net/${IF}/statistics/rx_bytes` + TX=`cat /sys/class/net/${IF}/statistics/tx_bytes` + if [ $RXPREV -ne -1 ] ; then + let BWRX=$RX-$RXPREV + let BWTX=$TX-$TXPREV + echo "`date` Received: $BWRX B/s Sent: $BWTX B/s" + fi + RXPREV=$RX + TXPREV=$TX + sleep 2 +done diff --git a/vg/network-traffic.sh b/vg/network-traffic.sh new file mode 100644 index 0000000..4c792f5 --- /dev/null +++ b/vg/network-traffic.sh @@ -0,0 +1,127 @@ +#!/bin/sh + +usage(){ +echo "Usage: $0 [-i INTERFACE] [-s INTERVAL] [-c COUNT]" +echo +echo "-i INTERFACE" +echo " The interface to monitor, default is eth0." +echo "-s INTERVAL" +echo " The time to wait in seconds between measurements, default is 3 seconds." +echo "-c COUNT" +echo " The number of times to measure, default is 10 times." +exit 3 +} + +readargs(){ +while [ "$#" -gt 0 ] ; do + case "$1" in + -i) + if [ "$2" ] ; then + interface="$2" + shift ; shift + else + echo "Missing a value for $1." + echo + shift + usage + fi + ;; + -s) + if [ "$2" ] ; then + sleep="$2" + shift ; shift + else + echo "Missing a value for $1." + echo + shift + usage + fi + ;; + -c) + if [ "$2" ] ; then + counter="$2" + shift ; shift + else + echo "Missing a value for $1." + echo + shift + usage + fi + ;; + *) + echo "Unknown option $1." + echo + shift + usage + ;; + esac +done +} + +checkargs(){ +if [ ! "$interface" ] ; then + interface="eth0" +fi +if [ ! "$sleep" ] ; then + sleep="3" +fi +if [ ! "$counter" ] ; then + counter="10" +fi +} + +printrxbytes(){ +/sbin/ifconfig "$interface" | grep "RX bytes" | cut -d: -f2 | awk '{ print $1 }' +} + +printtxbytes(){ +/sbin/ifconfig "$interface" | grep "TX bytes" | cut -d: -f3 | awk '{ print $1 }' +} + +bytestohumanreadable(){ +multiplier="0" +number="$1" +while [ "$number" -ge 1024 ] ; do + multiplier=$(($multiplier+1)) + number=$(($number/1024)) +done +case "$multiplier" in + 1) + echo "$number Kb" + ;; + 2) + echo "$number Mb" + ;; + 3) + echo "$number Gb" + ;; + 4) + echo "$number Tb" + ;; + *) + echo "$1 b" + ;; +esac +} + +printresults(){ +while [ "$counter" -ge 0 ] ; do + counter=$(($counter - 1)) + if [ "$rxbytes" ] ; then + oldrxbytes="$rxbytes" + oldtxbytes="$txbytes" + fi + rxbytes=$(printrxbytes) + txbytes=$(printtxbytes) + if [ "$oldrxbytes" -a "$rxbytes" -a "$oldtxbytes" -a "$txbytes" ] ; then + echo "RXbytes = $(bytestohumanreadable $(($rxbytes - $oldrxbytes))) TXbytes = $(bytestohumanreadable $(($txbytes - $oldtxbytes)))" + else + echo "Monitoring $interface every $sleep seconds. (RXbyte total = $(bytestohumanreadable $rxbytes) TXbytes total = $(bytestohumanreadable $txbytes))" + fi + sleep "$sleep" +done +} + +readargs "$@" +checkargs +printresults \ No newline at end of file diff --git a/vg/nls_parameters.sql b/vg/nls_parameters.sql new file mode 100644 index 0000000..6e4f587 --- /dev/null +++ b/vg/nls_parameters.sql @@ -0,0 +1,33 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +*/ +set term on + +COLUMN parameter HEADING "Parameter" FORMAT a25 ON +COLUMN Database HEADING "Database" FORMAT a30 ON +COLUMN Instance HEADING "Instance" FORMAT a30 ON +COLUMN Sesssion HEADING "Sesssion" FORMAT a30 ON + +SELECT ndp.parameter + , max(ndp.value) Database + , max(nip.value) Instance + , max(nsp.value) Sesssion +FROM nls_session_parameters nsp +FULL OUTER JOIN nls_instance_parameters nip ON nip.parameter = nsp.parameter +FULL OUTER JOIN nls_database_parameters ndp ON ndp.parameter = nsp.parameter +group by ndp.parameter +ORDER BY parameter +; + +@@footer diff --git a/vg/objects.sql b/vg/objects.sql new file mode 100644 index 0000000..1d252ec --- /dev/null +++ b/vg/objects.sql @@ -0,0 +1,138 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Search for objects +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - SubObject name (% - wildchar, \ - escape char) +* 4 - Object Type (% - wildchar, \ - escape char) +* 5 - Object Status (% - wildchar, \ - escape char) +* 6 - Where Clause +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 26-JUN-13 Vishal Gupta Added object status as input parameter +* 20-Feb-13 Vishal Gupta Added SubObject name as input parameter +* 02-Jul-12 Vishal Gupta Modified to allow pass OWNER, OBJECT_NAME either as separate input +* or as single input joined as owner.object_name +* 05-Aug-04 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE subobject_name +UNDEFINE object_type +UNDEFINE object_status +UNDEFINE WHERECLAUSE + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE subobject_name="&&3" +DEFINE object_type="&&4" +DEFINE object_status="&&5" +DEFINE WHERECLAUSE="&&6" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT +COLUMN _object_status NEW_VALUE object_status NOPRINT + +set term off + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&object_name'),'','%','&&object_name') "_object_name" + , DECODE(UPPER('&&subobject_name'),'','%','&&subobject_name') "_subobject_name" + , DECODE(UPPER('&&object_type'),'','%','&&object_type') "_object_type" + , DECODE(UPPER('&&object_status'),'','%','&&object_status') "_object_status" +FROM DUAL; + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" + /*, CASE + WHEN INSTR('&&owner','.') != 0 THEN DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + ELSE DECODE(UPPER('&&object_type'),'','%',UPPER('&&object_type')) + END "_object_type" + */ +FROM DUAL; +set term on + + +PROMPT ***************************************************************** +PROMPT * O B J E C T S L I S T +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - SubObject Name = '&&subobject_name' +PROMPT * - Object Type = '&&object_type' +PROMPT * - Object Status = '&&object_status' +PROMPT * - Where Clause = '&&WHERECLAUSE' +PROMPT ***************************************************************** + + + +COLUMN owner FORMAT a20 +COLUMN object_name FORMAT a30 +COLUMN subobject_name FORMAT a30 +COLUMN object_type FORMAT a20 +COLUMN owner_object_name FORMAT a50 +COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18 +COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18 +COLUMN created HEADING "Created" FORMAT a18 + + +SELECT * + FROM +( SELECT o.owner + , o.object_name + , o.subobject_name + , o.object_type + , o.status + , TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time + , TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change + , TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created + FROM dba_objects o + WHERE o.owner like '&&owner' ESCAPE '\' + AND o.object_name like '&&object_name' ESCAPE '\' + AND NVL(o.subobject_name,'%') like '&&subobject_name' ESCAPE '\' + AND o.object_type like '&&object_type' ESCAPE '\' + AND o.status like '&&object_status' ESCAPE '\' + UNION ALL + SELECT 'SYS' + , f.name + , ' ' + , f.type + , ' ' + , ' ' + , ' ' + , ' ' + FROM v$fixed_table f + WHERE 'SYS' like UPPER('&&owner') ESCAPE '\' + AND f.name like UPPER('&&object_name') ESCAPE '\' + AND f.type like UPPER('&&object_type') ESCAPE '\' + AND 'VALID' like '&&object_status' ESCAPE '\' +) +WHERE 1=1 + &&WHERECLAUSE +ORDER BY owner, object_name ; + + +@@footer + diff --git a/vg/oem_blackout_history.sql b/vg/oem_blackout_history.sql new file mode 100644 index 0000000..d49e499 --- /dev/null +++ b/vg/oem_blackout_history.sql @@ -0,0 +1,23 @@ +@@header + +COLUMN blackout_name HEADING "BlackoutName" FORMAT a35 +COLUMN status HEADING "Status" FORMAT a10 +COLUMN start_time HEADING "StartTime" FORMAT a18 +COLUMN end_time HEADING "EndTime" FORMAT a18 +COLUMN created_by HEADING "CreatedBy" FORMAT a15 +COLUMN target_type HEADING "TargetType" FORMAT a15 +COLUMN target_name HEADING "TargetName" FORMAT a45 TRUNCATE + +BREAK ON blackout_name ON status ON created_by + +SELECT bh.blackout_name + , bh.status + , bh.created_by + , TO_CHAR(bh.start_time,'DD-MON-YY HH24:MI:SS') start_time + , bh.end_time + , bh.target_type + , bh.target_name + FROM mgmt$blackout_history bh +ORDER BY bh.start_time asc; + +@@footer diff --git a/vg/oem_blackouts.sql b/vg/oem_blackouts.sql new file mode 100644 index 0000000..865406a --- /dev/null +++ b/vg/oem_blackouts.sql @@ -0,0 +1,30 @@ +@@header + +COLUMN blackout_name HEADING "BlackoutName" FORMAT a35 +COLUMN status HEADING "Status" FORMAT a10 +COLUMN last_start_time HEADING "LastStartTime" FORMAT a15 +COLUMN last_end_time HEADING "LastEndTime" FORMAT a15 +COLUMN schedule_type HEADING "Schedule|Type" FORMAT a10 +COLUMN scheduled_time HEADING "ScheduledTime" FORMAT a15 +COLUMN schedule_start_time HEADING "ScheduleStartTime" FORMAT a15 +COLUMN schedule_end_time HEADING "ScheduleEndTime" FORMAT a15 +COLUMN Duration HEADING "Dur|(min)" FORMAT 9999 +COLUMN created_by HEADING "CreatedBy" FORMAT a15 +COLUMN reason HEADING "Reason" FORMAT a20 +COLUMN description HEADING "Description" FORMAT a30 + +SELECT b.blackout_name + , b.status + , TO_CHAR(b.last_start_time,'DD-MON-YY HH24:MI') last_start_time + , TO_CHAR(b.last_end_time,'DD-MON-YY HH24:MI') last_end_time + , b.schedule_type + , TO_CHAR(b.scheduled_time,'DD-MON-YY HH24:MI') scheduled_time + , TO_CHAR(b.schedule_start_time,'DD-MON-YY HH24:MI') schedule_start_time + , TO_CHAR(b.schedule_end_time,'DD-MON-YY HH24:MI') schedule_end_time + , b.duration + , b.created_by + , b.reason + , b.description + FROM mgmt$blackouts b; + +@@footer diff --git a/vg/oem_event_occurance.sql b/vg/oem_event_occurance.sql new file mode 100644 index 0000000..99d082d --- /dev/null +++ b/vg/oem_event_occurance.sql @@ -0,0 +1,50 @@ +/* +List of Event Occurred +*/ +SELECT e.ID + , ec.EVENT_OCCURRENCE_ID + , e.NAME + , el.TIMESTAMP + , DECODE(el.SEVERITY + , 25, 'Crit' + , 20 ,'Warn' + , 18 ,'Error' + , 15 ,'Clear' + , 303 ,'NodeDown' + , el.SEVERITY) Status + , el.ENTRY +FROM SMP_VDE_EVENT_OCCUR_DETAILS ecd + , SMP_VDE_EVENT_OCCURRENCE ec + , SMP_VDE_EVENT_LOG el + , SMP_VDE_EVENT e +WHERE e.ID = ec.EVENT_ID + AND ec.EVENT_OCCURRENCE_ID = ecd.EVENT_OCCURRENCE_ID + AND el.EVENT_OCCURRENCE_ID = ec.EVENT_OCCURRENCE_ID + AND el.TIMESTAMP > SYSDATE - 60 + AND e.NAME NOT IN ( 'WHISTLER - OpenCursors#','SA017605 - SAVANT') + AND LOWER(e.NAME) NOT LIKE ( '%weblogic%') + AND LOWER(e.NAME) NOT LIKE '%alert log%' + AND e.NAME = 'SA017603 - RUNQUEUE' +-- AND n.ADMINISTRATOR_NAME LIKE '%%' + AND ec.TARGET_NAME NOT IN ( 'tigris.eiffel.servista.com') +ORDER BY el.TIMESTAMP DESC + +/* +Maximum and minimum time of Events on a day +*/ +SELECT e.NAME + , TRUNC(el.TIMESTAMP) + , MAX((el.TIMESTAMP)) + , MIN((el.TIMESTAMP)) +FROM SMP_VDE_EVENT_OCCUR_DETAILS ecd + , SMP_VDE_EVENT_OCCURRENCE ec + , SMP_VDE_EVENT_LOG el + , SMP_VDE_EVENT e +WHERE e.ID = ec.EVENT_ID + AND ec.EVENT_OCCURRENCE_ID = ecd.EVENT_OCCURRENCE_ID + AND el.EVENT_OCCURRENCE_ID = ec.EVENT_OCCURRENCE_ID + AND el.TIMESTAMP > SYSDATE - 60 + AND e.NAME = 'SA017603 - RUNQUEUE' +GROUP BY e.NAME,TRUNC(el.TIMESTAMP) +ORDER BY TRUNC(el.TIMESTAMP) DESC + diff --git a/vg/oem_historical_tablename.sql b/vg/oem_historical_tablename.sql new file mode 100644 index 0000000..be3cd4d --- /dev/null +++ b/vg/oem_historical_tablename.sql @@ -0,0 +1,42 @@ +/* +* +* +* This query gives the start name of following type of tables in OEM +* historical information. +* +* _BASE +* _HOUR +* _DAY +* _WEEK +* _MONTH +* _YEAR +* +* +*/ + +SELECT s.HOST + , S.NAME + , M.MODULE_LABEL + , c.CLASS_LABEL + , c.CONTAINER_CLASS_LABEL + , r.RES_LABEL + , 'VP_' || c.IS_UDS || '_' || S.SVC_ID || '_' || M.MOD_ID || '_' || C.CLS_ID "Tables" +FROM VP_SERVICE_REF s + , VP_MODULE_REF M + , VP_CLASS_REF C + , VP_RESOURCE_REF R +WHERE S.SVC_ID = M.SVC_ID + AND C.SVC_ID = S.SVC_ID + AND C.MOD_ID = M.MOD_ID + AND R.CLS_ID = C.CLS_ID + AND R.MOD_ID = M.MOD_ID + AND R.SVC_ID = S.SVC_ID + AND s.HOST = 'DB01.WHISTLER.SERVISTA.COM' + AND s.NAME = 'DB01.WHISTLER.SERVISTA.COM' +-- AND C.CONTAINER_CLASS_LABEL = 'Storage' +-- AND C.CLASS_LABEL = 'Tablespace' +-- AND R.RES_COL = 'Used Blocks' +/ + + + diff --git a/vg/oem_notification.sql b/vg/oem_notification.sql new file mode 100644 index 0000000..909284f --- /dev/null +++ b/vg/oem_notification.sql @@ -0,0 +1,114 @@ + +/* +## Insert Notification +*/ + +INSERT INTO SMP_VDI_AOBJECT_NOTIFICATION +SELECT 'HBILAR',IOT.OBJECT_ID, 1 + FROM SMP_VDI_OBJECT_TABLE iot, SMP_VDE_EVENT e + WHERE iot.TYPE = 'EVENT' + AND iot.object_name = e.ID +-- AND e.is_library = 'Y' +--AND e.NAME LIKE 'DB01%Node%' +AND E.TARGET_TYPE = 'oracle_sysman_node' +AND NOT EXISTS (SELECT 1 FROM SMP_VDI_AOBJECT_NOTIFICATION iao + WHERE iao.OBJECT_ID = iot.OBJECT_ID + AND iao.USERNAME = 'HBILAR') +/ + +INSERT INTO SMP_VDU_PRIVILEGE_TABLE +SELECT P.PRINCIPAL_ID, 'VIEW', O.OBJECT_ID +FROM SMP_VDU_OBJECTS_TABLE O, SMP_VDU_PRINCIPALS_TABLE P, SMP_VDE_EVENT E +WHERE NOT EXISTS (SELECT 1 FROM SMP_VDU_PRIVILEGE_TABLE PRIV + WHERE PRIV.OBJECT_OID = O.OBJECT_ID + AND PRIV.PRINCIPAL_OID = P.PRINCIPAL_ID) +AND O.OBJECT_NAME = E.ID +AND O.TYPE = 'EVENT' +AND P.PRINCIPAL_NAME = 'VGUPTA' +/ + + + +/* +--- Delete Notification +*/ + +DELETE FROM SMP_VDI_AOBJECT_NOTIFICATION C WHERE (C.USERNAME, C.OBJECT_ID) IN +( +SELECT A.USERNAME, B.OBJECT_ID +--SELECT DISTINCT A.USERNAME + FROM SMP_VDI_AOBJECT_NOTIFICATION a, SMP_VDI_OBJECT_TABLE b , SMP_VDE_EVENT e +WHERE e.ID = b.OBJECT_NAME +AND b.OBJECT_ID = a.OBJECT_ID +AND b.TYPE = 'EVENT' +--AND E.TARGET_TYPE = 'oracle_sysman_database' +AND UPPER(e.NAME) LIKE 'APP-LNX-01 - HELDESK TOOL' +AND A.USERNAME LIKE ('%MOBILE%') +) + +/* +List of Notifications Sent +*/ + +SELECT e.ID + , e.NAME + , n.TARGET_NAME + , n.TIMESTAMP + , n.ADMINISTRATOR_NAME + , n.METHOD + , DECODE(n.OBJECT_STATUS + , 25, 'Crit' + , 20 ,'Warn' + , 18 ,'Error' + , 15 ,'Clear' + , 303 ,'NodeDown' + , n.OBJECT_STATUS) Status +FROM SMP_VIEW_NOTIFICATION_HISTORY n + ,SMP_VDE_EVENT e +WHERE n.OBJECT_TYPE = 'EVENT' + AND e.ID = n.OBJECT_ID + AND n.TIMESTAMP > SYSDATE - 30 +-- AND e.NAME = 'TIGRIS - CPU' +-- AND n.ADMINISTRATOR_NAME LIKE '%%' +-- AND n.TARGET_NAME = 'tigris.eiffel.servista.com' +ORDER BY n.TIMESTAMP DESC + + +/* +Event Log +*/ + +SELECT e.ID + , el.EVENT_OCCURRENCE_ID + , e.NAME + , ec.TARGET_NAME + , el.TIMESTAMP + , DECODE(el.SEVERITY + , 25, 'Crit' + , 20 ,'Warn' + , 18 ,'Error' + , 15 ,'Clear' + , 303 ,'NodeDown' + , el.SEVERITY) Status + , el.ENTRY +FROM SMP_VDE_EVENT e + ,SMP_VDE_EVENT_OCCURRENCE ec + ,SMP_VDE_EVENT_LOG el +WHERE ec.EVENT_ID = e.ID + AND el.EVENT_OCCURRENCE_ID = ec.EVENT_OCCURRENCE_ID + AND el.TIMESTAMP > SYSDATE - 30 +-- AND e.NAME = 'TIGRIS - CPU' +-- AND n.ADMINISTRATOR_NAME LIKE '%%' +-- AND n.TARGET_NAME = 'tigris.eiffel.servista.com' +AND NAME LIKE '%DatabaseLimit%' +ORDER BY el.TIMESTAMP DESC + + +SELECT * FROM SMP_VDE_EVENT_LOG a +ORDER BY a.TIMESTAMP DESC + + + +SELECT * FROM SMP_VDE_EVENT_OCCUR_DETAILS a +WHERE a.OCCUR_DATE IS NOT NULL +ORDER BY a.OCCUR_DATE DESC diff --git a/vg/oem_preferred_credentials.sql b/vg/oem_preferred_credentials.sql new file mode 100644 index 0000000..9498563 --- /dev/null +++ b/vg/oem_preferred_credentials.sql @@ -0,0 +1,32 @@ +DECLARE + lv_user_id NUMBER; + lv_service_type SMP_VDV_PREFERRED_CREDENTIALS.SERVICE_TYPE%TYPE; + lv_service_name SMP_VDV_PREFERRED_CREDENTIALS.SERVICE_NAME%TYPE; + lv_credentials SMP_VDV_PREFERRED_CREDENTIALS.CREDENTIALS%TYPE; +BEGIN + + SELECT u.USER_ID, SERVICE_TYPE, SERVICE_NAME, CREDENTIALS + INTO lv_user_id, lv_service_type, lv_service_name, lv_credentials + FROM SMP_VDV_PREFERRED_CREDENTIALS a, SMP_VDV_USER u + WHERE a.USER_ID = u.USER_ID + AND u.USER_NAME = 'VGUPTA' + AND service_name = 'amazon.eiffel.servista.com'; + +FOR I IN ( +SELECT u.USER_ID, tt.NAME SERVICE_type, t.NAME +FROM SMP_VDV_USER u, SMP_VDN_TARGET_LIST t, SMP_VDN_TARGET_TYPE_DEFN tt, SMP_VDN_GROUP_LIST g, SMP_VDN_GROUP_TARGET gt +WHERE u.USER_NAME = 'VGUPTA' +AND g.ID = gt.GROUPID +AND gt.TARGETID = t.ID +AND t.TYPEID = tt.ID +AND tt.NAME = 'oracle_sysman_node' +AND g.NAME = 'Eiffel' +AND NOT EXISTS (SELECT 1 FROM SMP_VDV_PREFERRED_CREDENTIALS b + WHERE b.USER_ID = u.USER_ID + AND b.SERVICE_NAME = t.NAME) + ) +LOOP + INSERT INTO SMP_VDV_PREFERRED_CREDENTIALS VALUES (i.user_id, i.SERVICE_type, i.NAME, lv_CREDENTIALS); +END LOOP; +END; +/ diff --git a/vg/oem_user_defined_metrics.sql b/vg/oem_user_defined_metrics.sql new file mode 100644 index 0000000..d74d1bb --- /dev/null +++ b/vg/oem_user_defined_metrics.sql @@ -0,0 +1,12 @@ +SELECT key_value udm_name + , target_name + , target_type + , collection_timestamp + , value +FROM sysman.mgmt$metric_current +WHERE metric_label = 'User Defined Metrics' + AND UPPER(target_name) LIKE UPPEr('%%') + AND UPPER(key_value) like UPPER('%%') --udm_name +ORDER BY udm_name, target_type, target_name, collection_timestamp DESC +/ + diff --git a/vg/open_cursors_count.sql b/vg/open_cursors_count.sql new file mode 100644 index 0000000..4ffaae5 --- /dev/null +++ b/vg/open_cursors_count.sql @@ -0,0 +1,56 @@ +--@open_cursors_count +-- Sid wise open cursors count. +SET echo off +SET lines 200 +SET PAGES 50 + + +COLUMN SID FORMAT 999 +COLUMN SPID FORMAT 99999 +COLUMN "max#" FORMAT a5 +COLUMN username FORMAT a15 +COLUMN osuser FORMAT a10 +COLUMN machine FORMAT a20 +COLUMN program FORMAT a30 + + +select 'open_cursors' + , to_number(b.value) "max#" + , lpad(used, 5) "cur#" + , to_char(100 * used / value, '990') || '%' "Used%" + , s.SID + , p.SPID + , s.SERIAL# + , s.username + , s.osuser + , to_char(s.LOGON_TIME,'DD-MM-YY HH24:MI') Logon_time + , s.MACHINE + , s.PROGRAM + from + ( select + s.sid + , sum(s.value) used + from + v$statname n, + v$sesstat s + where + n.name in ('opened cursors current', 'session cursor cache count') and + s.statistic# = n.statistic# + group by + s.sid + ) a , + ( select + sum(value) value + from + v$parameter + where + name in ( 'open_cursors', 'session_cached_cursors') + ) b , + v$session s + , v$process p +where s.sid = a.sid +and s.paddr = p.addr +order by 4 asc +/ + + diff --git a/vg/open_cursors_max_usage.sql b/vg/open_cursors_max_usage.sql new file mode 100644 index 0000000..b2e6afc --- /dev/null +++ b/vg/open_cursors_max_usage.sql @@ -0,0 +1,47 @@ +select + 'session_cached_cursors' parameter, + lpad(value, 5) value, + decode(value, 0, ' n/a', to_char(100 * used / value, '990') || '%') usage +from + ( select + max(s.value) used + from + v$statname n, + v$sesstat s + where + n.name = 'session cursor cache count' and + s.statistic# = n.statistic# + ), + ( select + value + from + v$parameter + where + name = 'session_cached_cursors' + ) +union all +select + 'open_cursors', + lpad(value, 5), + to_char(100 * used / value, '990') || '%' +from + ( select + max(sum(s.value)) used + from + v$statname n, + v$sesstat s + where + n.name in ('opened cursors current', 'session cursor cache count') and + s.statistic# = n.statistic# + group by + s.sid + ), + ( select + value + from + v$parameter + where + name = 'open_cursors' + ) +/ + diff --git a/vg/oradebug_commands.sql b/vg/oradebug_commands.sql new file mode 100644 index 0000000..ffdf364 --- /dev/null +++ b/vg/oradebug_commands.sql @@ -0,0 +1,51 @@ + +CONN sys/password AS SYSDBA; -- User must have SYSDBA. + +oradebug SETORAPNAME PR00 -- Debug process by name. +ORADEBUG SETMYPID; -- Debug current session. +ORADEBUG SETOSPID 1234; -- Debug session with the specified OS process. +ORADEBUG SETORAPID 123456; -- Debug session with the specified Oracle process ID. + +ORADEBUG TRACEFILE_NAME; -- Display the current trace file. +oradebug UNLIMIT -- Set trace to unlimited size. + +-- Start SQL Trace +ORADEBUG EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12; +-- Stop SQL Trace +ORADEBUG EVENT 10046 TRACE NAME CONTEXT OFF; + +-- Start Optimizer Trace +ORADEBUG EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12; + +exec dbms_monitor.session_trace_enable (session_id=>123,serial_num=>123, waits=> TRUE, binds=> true ); +exec dbms_monitor.session_trace_disable (session_id=>123,serial_num=>123); + +-- Trace user's own session +exec dbms_monitor.session_trace_enable (NULL,NULL,TRUE,TRUE) ; +exec dbms_monitor.session_trace_disable ; + +-- List Online patches +ORADEBUG patch list + + +--************************************* +-- Dump HangAnalyze on all RAC nodes. +--************************************* + +sqlplus "/as sysdba" +oradebug setmypid +oradebug unlimit +oradebug -g all dump hanganalyze 3 +oradebug -g all dump systemstate 258 + +<> + +oradebug -g all dump hanganalyze 3 +oradebug -g all dump systemstate 258 +oradebug tracefile_name + +<> + +oradebug -g all dump hanganalyze 3 +oradebug -g all dump systemstate 258 +oradebug tracefile_name diff --git a/vg/osconfig.sql b/vg/osconfig.sql new file mode 100644 index 0000000..45d0f90 --- /dev/null +++ b/vg/osconfig.sql @@ -0,0 +1,175 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display OS configuration +* Parameter : None +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-JUN-14 Vishal Gupta Created +* +*/ + + + + +define _IF_INST1_EXISTS="--" +define _IF_INST2_EXISTS="--" +define _IF_INST3_EXISTS="--" +define _IF_INST4_EXISTS="--" +define _IF_INST5_EXISTS="--" +define _IF_INST6_EXISTS="--" +define _IF_INST7_EXISTS="--" +define _IF_INST8_EXISTS="--" +define _IF_INST9_EXISTS="--" +define _IF_INST10_EXISTS="--" +define _IF_INST11_EXISTS="--" +define _IF_INST12_EXISTS="--" +define _IF_INST13_EXISTS="--" +define _IF_INST14_EXISTS="--" +define _IF_INST15_EXISTS="--" +define _IF_INST16_EXISTS="--" + +col INST1_EXISTS new_value _IF_INST1_EXISTS noprint +col INST2_EXISTS new_value _IF_INST2_EXISTS noprint +col INST3_EXISTS new_value _IF_INST3_EXISTS noprint +col INST4_EXISTS new_value _IF_INST4_EXISTS noprint +col INST5_EXISTS new_value _IF_INST5_EXISTS noprint +col INST6_EXISTS new_value _IF_INST6_EXISTS noprint +col INST7_EXISTS new_value _IF_INST7_EXISTS noprint +col INST8_EXISTS new_value _IF_INST8_EXISTS noprint +col INST9_EXISTS new_value _IF_INST9_EXISTS noprint +col INST10_EXISTS new_value _IF_INST10_EXISTS noprint +col INST11_EXISTS new_value _IF_INST11_EXISTS noprint +col INST12_EXISTS new_value _IF_INST12_EXISTS noprint +col INST13_EXISTS new_value _IF_INST13_EXISTS noprint +col INST14_EXISTS new_value _IF_INST14_EXISTS noprint +col INST15_EXISTS new_value _IF_INST15_EXISTS noprint +col INST16_EXISTS new_value _IF_INST16_EXISTS noprint + +set term off +SELECT MIN(DECODE(inst_id,1,' ', '--')) INST1_EXISTS + , MIN(DECODE(inst_id,2,' ', '--')) INST2_EXISTS + , MIN(DECODE(inst_id,3,' ', '--')) INST3_EXISTS + , MIN(DECODE(inst_id,4,' ', '--')) INST4_EXISTS + , MIN(DECODE(inst_id,5,' ', '--')) INST5_EXISTS + , MIN(DECODE(inst_id,6,' ', '--')) INST6_EXISTS + , MIN(DECODE(inst_id,7,' ', '--')) INST7_EXISTS + , MIN(DECODE(inst_id,8,' ', '--')) INST8_EXISTS + , MIN(DECODE(inst_id,9,' ', '--')) INST9_EXISTS + , MIN(DECODE(inst_id,10,' ', '--')) INST10_EXISTS + , MIN(DECODE(inst_id,11,' ', '--')) INST11_EXISTS + , MIN(DECODE(inst_id,12,' ', '--')) INST12_EXISTS + , MIN(DECODE(inst_id,13,' ', '--')) INST13_EXISTS + , MIN(DECODE(inst_id,14,' ', '--')) INST14_EXISTS + , MIN(DECODE(inst_id,15,' ', '--')) INST15_EXISTS + , MIN(DECODE(inst_id,16,' ', '--')) INST16_EXISTS + FROM gv$instance + GROUP BY version +; +set term on + +PROMPT +PROMPT ############################################################################# +PROMPT # Operation System Configuratoin +PROMPT ############################################################################# + +COLUMN stat_name HEADING "Name" FORMAT A25 +COLUMN comments HEADING "Description" FORMAT A55 +COLUMN value1 HEADING "Inst1" FORMAT A10 +COLUMN value2 HEADING "Inst2" FORMAT A10 +COLUMN value3 HEADING "Inst3" FORMAT A10 +COLUMN value4 HEADING "Inst4" FORMAT A10 +COLUMN value5 HEADING "Inst5" FORMAT A10 +COLUMN value6 HEADING "Inst6" FORMAT A10 +COLUMN value7 HEADING "Inst7" FORMAT A10 +COLUMN value8 HEADING "Inst8" FORMAT A10 + +SELECT s.stat_name + , s.comments + , MAX(DECODE(s.inst_id + , 1, DECODE(s.stat_name + ,'PHYSICAL_MEMORY_BYTES',TO_CHAR(ROUND(s.value/power(1024,3))) || ' GB' + ,TO_CHAR(ROUND(s.value,2))) + , ' ') + ) value1 +&&_IF_INST2_EXISTS , MAX(DECODE(s.inst_id +&&_IF_INST2_EXISTS , 2, DECODE(s.stat_name +&&_IF_INST2_EXISTS ,'PHYSICAL_MEMORY_BYTES',TO_CHAR(ROUND(s.value/power(1024,3))) || ' GB' +&&_IF_INST2_EXISTS ,TO_CHAR(ROUND(s.value,2))) +&&_IF_INST2_EXISTS , ' ') +&&_IF_INST2_EXISTS ) value2 +&&_IF_INST3_EXISTS , MAX(DECODE(s.inst_id +&&_IF_INST3_EXISTS , 3, DECODE(s.stat_name +&&_IF_INST3_EXISTS ,'PHYSICAL_MEMORY_BYTES',TO_CHAR(ROUND(s.value/power(1024,3))) || ' GB' +&&_IF_INST3_EXISTS ,TO_CHAR(ROUND(s.value,2))) +&&_IF_INST3_EXISTS , ' ') +&&_IF_INST3_EXISTS ) value3 +&&_IF_INST4_EXISTS , MAX(DECODE(s.inst_id +&&_IF_INST4_EXISTS , 4, DECODE(s.stat_name +&&_IF_INST4_EXISTS ,'PHYSICAL_MEMORY_BYTES',TO_CHAR(ROUND(s.value/power(1024,3))) || ' GB' +&&_IF_INST4_EXISTS ,TO_CHAR(ROUND(s.value,2))) +&&_IF_INST4_EXISTS , ' ') +&&_IF_INST4_EXISTS ) value4 +&&_IF_INST5_EXISTS , MAX(DECODE(s.inst_id +&&_IF_INST5_EXISTS , 5, DECODE(s.stat_name +&&_IF_INST5_EXISTS ,'PHYSICAL_MEMORY_BYTES',TO_CHAR(ROUND(s.value/power(1024,3))) || ' GB' +&&_IF_INST5_EXISTS ,TO_CHAR(ROUND(s.value,2))) +&&_IF_INST5_EXISTS , ' ') +&&_IF_INST5_EXISTS ) value5 +&&_IF_INST6_EXISTS , MAX(DECODE(s.inst_id +&&_IF_INST6_EXISTS , 6, DECODE(s.stat_name +&&_IF_INST6_EXISTS ,'PHYSICAL_MEMORY_BYTES',TO_CHAR(ROUND(s.value/power(1024,3))) || ' GB' +&&_IF_INST6_EXISTS ,TO_CHAR(ROUND(s.value,2))) +&&_IF_INST6_EXISTS , ' ') +&&_IF_INST6_EXISTS ) value6 +&&_IF_INST7_EXISTS , MAX(DECODE(s.inst_id +&&_IF_INST7_EXISTS , 7, DECODE(s.stat_name +&&_IF_INST7_EXISTS ,'PHYSICAL_MEMORY_BYTES',TO_CHAR(ROUND(s.value/power(1024,3))) || ' GB' +&&_IF_INST7_EXISTS ,TO_CHAR(ROUND(s.value,2))) +&&_IF_INST7_EXISTS , ' ') +&&_IF_INST7_EXISTS ) value7 +&&_IF_INST8_EXISTS , MAX(DECODE(s.inst_id +&&_IF_INST8_EXISTS , 8, DECODE(s.stat_name +&&_IF_INST8_EXISTS ,'PHYSICAL_MEMORY_BYTES',TO_CHAR(ROUND(s.value/power(1024,3))) || ' GB' +&&_IF_INST8_EXISTS ,TO_CHAR(ROUND(s.value,2))) +&&_IF_INST8_EXISTS , ' ') +&&_IF_INST8_EXISTS ) value8 + FROM gv$osstat s + WHERE s.cumulative = 'NO' +GROUP BY s.stat_name, s.comments + ORDER BY DECODE(s.stat_name + ,'NUM_CPU_SOCKETS' , 1 + ,'NUM_CPU_CORES' , 2 + ,'NUM_CPUS' , 3 + ,'PHYSICAL_MEMORY_BYTES' , 4 + ,'LOAD' , 5 + ,'GLOBAL_RECEIVE_SIZE_MAX' , 6 + ,'GLOBAL_SEND_SIZE_MAX' , 7 + ,99 + ) + , s.stat_name +; + +/* +GLOBAL_RECEIVE_SIZE_MAX +GLOBAL_SEND_SIZE_MAX +LOAD +NUM_CPUS +NUM_CPU_CORES +NUM_CPU_SOCKETS +PHYSICAL_MEMORY_BYTES +TCP_RECEIVE_SIZE_DEFAULT +TCP_RECEIVE_SIZE_MAX +TCP_RECEIVE_SIZE_MIN +TCP_SEND_SIZE_DEFAULT +TCP_SEND_SIZE_MAX +TCP_SEND_SIZE_MIN + +*/ +@@footer diff --git a/vg/osstatname.sql b/vg/osstatname.sql new file mode 100644 index 0000000..c4088fc --- /dev/null +++ b/vg/osstatname.sql @@ -0,0 +1,57 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display the OS statistic name +* Version : 10.1 and above +* Parameters : 1 - OS Statistic Name (Use % as wildcard and \ as escape character) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE statname +DEFINE statname="&&1" + + + +COLUMN _statname NEW_VALUE statname NOPRINT + +set term off +SELECT DECODE('&&statname','','%','&&statname') "_statname" +FROM DUAL; +set term on + + +Prompt +Prompt *************************************************************************************************** +Prompt * ALL Statistics Names like '&&statname' +Prompt *************************************************************************************************** + +COLUMN statistic# HEADING "Stat#" FORMAT 9999 +COLUMN stat_name HEADING "Statistics Name" FORMAT a30 +COLUMN cumulative HEADING "Cumulative" FORMAT a10 +COLUMN comments HEADING "Comments" FORMAT a80 + +SELECT s.stat_name + , s.cumulative + , s.comments + FROM v$osstat s + WHERE ( UPPER(stat_name) like UPPER('&&statname') ESCAPE '\' + OR UPPER(comments) like UPPER('&&statname') ESCAPE '\') +ORDER BY UPPER(stat_name) +; + +UNDEFINE statname + +@@footer diff --git a/vg/parallel_query_downgrade.sql b/vg/parallel_query_downgrade.sql new file mode 100644 index 0000000..8af0f16 --- /dev/null +++ b/vg/parallel_query_downgrade.sql @@ -0,0 +1,57 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Parallel Query downgrades +* Version : +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-Aug-14 Vishal Gupta Created +* +*/ + + +COLUMN px_maxdop HEADING "Max|DOP" FORMAT 99999 +COLUMN px_servers_requested HEADING "Req|PX|Servers" FORMAT 9999999 +COLUMN px_servers_allocated HEADING "Alloc|PX|Servers" FORMAT 9999999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN SID HEADING "SID" FORMAT 999999 +COLUMN serial# HEADING "Serial#" FORMAT 999999 +COLUMN status HEADING "Status" +COLUMN logon_time HEADING "Logon Time" +COLUMN username HEADING "DB UserName" +COLUMN service_name HEADING "Service Name" +COLUMN machine HEADING "Client Machine" +COLUMN osuser HEADING "OS User" +COLUMN program HEADING "Program" +COLUMN sql_exec_start_time HEADING "SQL StartTime" + + +SELECT m.px_maxdop + , m.px_servers_requested + , m.px_servers_allocated + , m.username + , m.sid + , m.inst_id + , m.session_serial# serial# + , m.service_name + , TO_CHAR(m.sql_exec_start,'DD-MON-YY HH24:MI:SS') sql_exec_start + , m.sql_id + , m.SQL_PLAN_HASH_VALUE PHV + , m.program + , m.ELAPSED_TIME + , m.queuing_time + FROM gv$sql_monitor m + WHERE 1=1 + AND m.status = 'EXECUTING' + AND m.px_servers_requested is not null + AND NVL(m.px_servers_allocated,0) < m.px_servers_requested +; + +@@footer diff --git a/vg/parallel_server_summary.sql b/vg/parallel_server_summary.sql new file mode 100644 index 0000000..a9b0953 --- /dev/null +++ b/vg/parallel_server_summary.sql @@ -0,0 +1,177 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Parallel Servers Statisitcs Summary +* Version : ??? +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 06-Sep-12 Vishal Gupta Created +* +*/ + + +define _IF_INST1_EXISTS="--" +define _IF_INST2_EXISTS="--" +define _IF_INST3_EXISTS="--" +define _IF_INST4_EXISTS="--" +define _IF_INST5_EXISTS="--" +define _IF_INST6_EXISTS="--" +define _IF_INST7_EXISTS="--" +define _IF_INST8_EXISTS="--" +define _IF_INST9_EXISTS="--" +define _IF_INST10_EXISTS="--" +define _IF_INST11_EXISTS="--" +define _IF_INST12_EXISTS="--" +define _IF_INST13_EXISTS="--" +define _IF_INST14_EXISTS="--" +define _IF_INST15_EXISTS="--" +define _IF_INST16_EXISTS="--" + +col INST1_EXISTS new_value _IF_INST1_EXISTS noprint +col INST2_EXISTS new_value _IF_INST2_EXISTS noprint +col INST3_EXISTS new_value _IF_INST3_EXISTS noprint +col INST4_EXISTS new_value _IF_INST4_EXISTS noprint +col INST5_EXISTS new_value _IF_INST5_EXISTS noprint +col INST6_EXISTS new_value _IF_INST6_EXISTS noprint +col INST7_EXISTS new_value _IF_INST7_EXISTS noprint +col INST8_EXISTS new_value _IF_INST8_EXISTS noprint +col INST9_EXISTS new_value _IF_INST9_EXISTS noprint +col INST10_EXISTS new_value _IF_INST10_EXISTS noprint +col INST11_EXISTS new_value _IF_INST11_EXISTS noprint +col INST12_EXISTS new_value _IF_INST12_EXISTS noprint +col INST13_EXISTS new_value _IF_INST13_EXISTS noprint +col INST14_EXISTS new_value _IF_INST14_EXISTS noprint +col INST15_EXISTS new_value _IF_INST15_EXISTS noprint +col INST16_EXISTS new_value _IF_INST16_EXISTS noprint + +set term off +SELECT MIN(DECODE(inst_id,1,' ', '--')) INST1_EXISTS + , MIN(DECODE(inst_id,2,' ', '--')) INST2_EXISTS + , MIN(DECODE(inst_id,3,' ', '--')) INST3_EXISTS + , MIN(DECODE(inst_id,4,' ', '--')) INST4_EXISTS + , MIN(DECODE(inst_id,5,' ', '--')) INST5_EXISTS + , MIN(DECODE(inst_id,6,' ', '--')) INST6_EXISTS + , MIN(DECODE(inst_id,7,' ', '--')) INST7_EXISTS + , MIN(DECODE(inst_id,8,' ', '--')) INST8_EXISTS + , MIN(DECODE(inst_id,9,' ', '--')) INST9_EXISTS + , MIN(DECODE(inst_id,10,' ', '--')) INST10_EXISTS + , MIN(DECODE(inst_id,11,' ', '--')) INST11_EXISTS + , MIN(DECODE(inst_id,12,' ', '--')) INST12_EXISTS + , MIN(DECODE(inst_id,13,' ', '--')) INST13_EXISTS + , MIN(DECODE(inst_id,14,' ', '--')) INST14_EXISTS + , MIN(DECODE(inst_id,15,' ', '--')) INST15_EXISTS + , MIN(DECODE(inst_id,16,' ', '--')) INST16_EXISTS + FROM gv$instance + GROUP BY version +; +set term on + + +PROMPT +PROMPT ****************************** +PROMPT * PARALLEL SERVERS SUMMARY +PROMPT ****************************** + + +COLUMN statistic HEADING "Statistic" FORMAT a25 +COLUMN all_inst HEADING "All Instance" FORMAT 99,999,999,999 +COLUMN inst1_value HEADING "Instance1" FORMAT 999,999,999 +COLUMN inst2_value HEADING "Instance2" FORMAT 999,999,999 +COLUMN inst3_value HEADING "Instance3" FORMAT 999,999,999 +COLUMN inst4_value HEADING "Instance4" FORMAT 999,999,999 +COLUMN inst5_value HEADING "Instance5" FORMAT 999,999,999 +COLUMN inst6_value HEADING "Instance6" FORMAT 999,999,999 +COLUMN inst7_value HEADING "Instance7" FORMAT 999,999,999 +COLUMN inst8_value HEADING "Instance8" FORMAT 999,999,999 +COLUMN inst9_value HEADING "Instance9" FORMAT 999,999,999 +COLUMN inst10_value HEADING "Instance10" FORMAT 999,999,999 +COLUMN inst11_value HEADING "Instance11" FORMAT 999,999,999 +COLUMN inst12_value HEADING "Instance12" FORMAT 999,999,999 +COLUMN inst13_value HEADING "Instance13" FORMAT 999,999,999 +COLUMN inst14_value HEADING "Instance14" FORMAT 999,999,999 +COLUMN inst15_value HEADING "Instance15" FORMAT 999,999,999 +COLUMN inst16_value HEADING "Instance16" FORMAT 999,999,999 + +SELECT TRIM(p.statistic) statistic + , SUM(p.value) all_inst + , MAX(DECODE(p.inst_id, 1, p.value,NULL)) inst1_value + , MAX(DECODE(p.inst_id, 2, p.value,NULL)) inst2_value + , MAX(DECODE(p.inst_id, 3, p.value,NULL)) inst3_value + , MAX(DECODE(p.inst_id, 4, p.value,NULL)) inst4_value + , MAX(DECODE(p.inst_id, 5, p.value,NULL)) inst5_value + , MAX(DECODE(p.inst_id, 6, p.value,NULL)) inst6_value + , MAX(DECODE(p.inst_id, 7, p.value,NULL)) inst7_value + , MAX(DECODE(p.inst_id, 8, p.value,NULL)) inst8_value + FROM gv$pq_sysstat p +GROUP BY p.statistic +ORDER BY DECODE(TRIM(p.statistic) + ,'Queries Queued' ,01 + ,'Sessions Active' ,02 + ,'Servers Busy' ,03 + ,'Servers Idle' ,04 + ,'Servers Highwater' ,05 + ,'Servers Started' ,06 + ,'Servers Shutdown' ,07 + ,'Servers Cleaned Up' ,08 + ,'Server Sessions' ,09 + ,'Queries Initiated' ,10 + ,'Queries Initiated (IPQ)',11 + ,'DML Initiated' ,12 + ,'DML Initiated (IPQ)' ,13 + ,'DDL Initiated' ,14 + ,'DDL Initiated (IPQ)' ,15 + ,'DFO Trees' ,16 + ,'Local Msgs Sent' ,17 + ,'Local Msgs Recv''d' ,18 + ,'Distr Msgs Sent' ,19 + ,'Distr Msgs Recv''d' ,20 + ,99 + ) +/ + + +SELECT TRIM(p.statistic) statistic +&&_IF_INST9_EXISTS , MAX(DECODE(p.inst_id, 9, p.value,NULL)) inst9_value +&&_IF_INST10_EXISTS , MAX(DECODE(p.inst_id,10, p.value,NULL)) inst10_value +&&_IF_INST11_EXISTS , MAX(DECODE(p.inst_id,11, p.value,NULL)) inst11_value +&&_IF_INST12_EXISTS , MAX(DECODE(p.inst_id,12, p.value,NULL)) inst12_value +&&_IF_INST13_EXISTS , MAX(DECODE(p.inst_id,13, p.value,NULL)) inst13_value +&&_IF_INST14_EXISTS , MAX(DECODE(p.inst_id,14, p.value,NULL)) inst14_value +&&_IF_INST15_EXISTS , MAX(DECODE(p.inst_id,15, p.value,NULL)) inst15_value +&&_IF_INST16_EXISTS , MAX(DECODE(p.inst_id,16, p.value,NULL)) inst16_value + FROM gv$pq_sysstat p + WHERE p.inst_id > 8 +GROUP BY p.statistic + ORDER BY DECODE(TRIM(p.statistic) + ,'Queries Queued' ,01 + ,'Sessions Active' ,02 + ,'Servers Busy' ,03 + ,'Servers Idle' ,04 + ,'Servers Highwater' ,05 + ,'Servers Started' ,06 + ,'Servers Shutdown' ,07 + ,'Servers Cleaned Up' ,08 + ,'Server Sessions' ,09 + ,'Queries Initiated' ,10 + ,'Queries Initiated (IPQ)',11 + ,'DML Initiated' ,12 + ,'DML Initiated (IPQ)' ,13 + ,'DDL Initiated' ,14 + ,'DDL Initiated (IPQ)' ,15 + ,'DFO Trees' ,16 + ,'Local Msgs Sent' ,17 + ,'Local Msgs Recv''d' ,18 + ,'Distr Msgs Sent' ,19 + ,'Distr Msgs Recv''d' ,20 + ,99 + ) +/ + +@@footer diff --git a/vg/parallel_session.sql b/vg/parallel_session.sql new file mode 100644 index 0000000..300dc04 --- /dev/null +++ b/vg/parallel_session.sql @@ -0,0 +1,167 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Hierarchy +* Parameters : 1 - SID (Use % as wildcard) +* : 2 - INST_ID (Use % as wildcard) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Apr-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE SID +UNDEFINE INST_ID +UNDEFINE WHERE_CLAUSE + +DEFINE SID="&&1" +DEFINE INST_ID="&&2" +DEFINE WHERE_CLAUSE="&3" + + +COLUMN _SID NEW_VALUE SID NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +set term off +SELECT DECODE('&&SID','','%','&&SID') "_SID" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +FROM DUAL; +set term on + +PROMPT ************************************************************** +PROMPT * P A R A L L E L S E S S I O N S H I E R A R C H Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - SID = "&&SID" +PROMPT * - Instance# = "&&INST_ID" +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************** + +set pages 50000 + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SID HEADING "SID|(Hierarchy)" FORMAT a15 +COLUMN serial# HEADING "Serial#" FORMAT 99999 +COLUMN SPID FORMAT a6 +COLUMN QCINST_ID HEADING "Parent|I#" FORMAT 99 +COLUMN QCSID HEADING "Parent|SID" FORMAT 9999 +COLUMN qcserial# HEADING "Parent|Serial#" FORMAT 99999 +COLUMN server_hierarchy HEADING "Parallel|ServerSet|Hierarchy" FORMAT a10 +COLUMN server_group HEADING "Server|Group" FORMAT 99 +COLUMN server_set HEADING "Server|Set" FORMAT 99 +COLUMN server# HEADING "Server#" FORMAT 99 +COLUMN degree HEADING "Deg" FORMAT 999 +COLUMN req_degree HEADING "Req|Deg" FORMAT 999 +COLUMN slave_status HEADING "Slave|Status" FORMAT a10 +COLUMN status HEADING "Session|Status" FORMAT a8 +COLUMN service_name FORMAT a22 +COLUMN username FORMAT a20 +COLUMN last_call_et HEADING "LastCall" FORMAT a12 JUSTIFY RIGHT +COLUMN logon_time FORMAT a15 +COLUMN process FORMAT a15 +COLUMN osuser FORMAT a10 TRUNCATE +COLUMN machine FORMAT a30 +COLUMN program FORMAT a15 TRUNCATE +COLUMN server_name FORMAT a15 TRUNCATE +COLUMN sql_text FORMAT a150 +COLUMN sql_child_number HEADING "SQL|C#" FORMAT 99 +COLUMN event FORMAT a30 TRUNCATE + +BREAK ON server_group ON server_set ON server# + +WITH parallel_sessions AS +( + SELECT pxs.inst_id + , pxs.sid + , pxs.serial# + , pxs.qcinst_id + , pxs.qcsid + , pxs.qcserial# + , pxs.degree + , pxs.req_degree + , pxp.server_name + , pxs.server_group + , pxs.server_set + , pxs.server# + , pxp.status + FROM gv$px_session pxs + , gv$px_process pxp + WHERE pxs.inst_id = pxp.inst_id (+) + AND pxs.sid = pxp.sid (+) + AND pxs.serial# = pxp.serial# (+) +ORDER BY pxs.qcinst_id NULLS FIRST + , pxs.qcsid + , pxs.qcserial# + , pxs.inst_id + , pxs.sid + , pxs.serial# + , pxs.server_group + , pxs.server_set + , pxs.server# +) +SELECT DECODE(level,1, '' , ' ') + || LPAD('> ',(level-1)*5,'|--') + || pxs.sid sid + , pxs.inst_id + , p.spid + --, NVL(pxs.qcinst_id,pxs.inst_id) qcinst_id + --, pxs.qcsid + --, pxs.qcserial# + , pxs.req_degree + , pxs.degree + , LPAD(DECODE(pxs.server#, 1, TO_CHAR(pxs.server_group), ' '),2) + || ' ' + || LPAD(DECODE(pxs.server#, 1, TO_CHAR(pxs.server_set), ' '),2) + || ' ' + || LPAD(pxs.server#,2) server_hierarchy + --, pxs.server_group + --, pxs.server_set + --, pxs.server# + , pxs.status slave_status + , s.status + , LPAD(DECODE(FLOOR(s.last_call_et / 3600),0, '', FLOOR(s.last_call_et / 3600) || 'h ' ) + || LPAD(FLOOR(MOD(s.last_call_et , 3600 ) / 60),2) || 'm ' + || LPAD(MOD(s.last_call_et, 60 ) ,2) || 's' + , 12 + ) last_call_et + , TO_CHAR(s.LOGON_TIME,'DD-MON-YY HH24:MI') logon_time + , s.service_name + , s.username + , s.osuser + , DECODE(level,1, '' ,LPAD('> ',((level-1)*3)+2,'|--') ) + || NVL2(pxs.qcinst_id,pxs.server_name || ' I#' || pxs.inst_id , s.program) + program + , s.sql_id + , s.sql_child_number + , s.event + FROM parallel_sessions pxs + LEFT OUTER JOIN gv$session s ON s.inst_id = pxs.inst_id + AND s.sid = pxs.sid + AND s.serial# = pxs.serial# + LEFT OUTER JOIN gv$process p ON p.inst_id = s.inst_id + AND p.addr = s.paddr +WHERE NVL(pxs.qcinst_id,pxs.inst_id) LIKE '&&INST_ID' + AND pxs.qcsid LIKE '&&SID' + &&WHERE_CLAUSE +CONNECT BY NOCYCLE PRIOR pxs.inst_id = NVL(pxs.qcinst_id,pxs.inst_id) + AND PRIOR pxs.sid = pxs.qcsid + AND PRIOR pxs.serial# = pxs.qcserial# +START WITH pxs.qcinst_id IS NULL +ORDER BY NVL(pxs.qcinst_id,pxs.inst_id) + , pxs.qcsid NULLS FIRST + , pxs.qcserial# NULLS FIRST + , pxs.server_group NULLS FIRST + , pxs.server_set NULLS FIRST + , pxs.server# NULLS FIRST +; + +@@footer diff --git a/vg/parallel_session_summary.sql b/vg/parallel_session_summary.sql new file mode 100644 index 0000000..2d829ba --- /dev/null +++ b/vg/parallel_session_summary.sql @@ -0,0 +1,81 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Parallel Session Statisitcs Summary +* Version : ??? +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 06-Sep-12 Vishal Gupta Created +* +*/ + + +PROMPT +PROMPT **************************************** +PROMPT * PARALLEL SESSIONS STATISTIC SUMMARY +PROMPT **************************************** +REM PROMPT - <------------------------ Last Query -------------------------------> <------------------------------------- Total --------------------------------> +REM Statistic Instance1 Instance2 Instance3 Instance4 Instance5 Instance6 Instance7 Instance8 Instance1 Instance2 Instance3 Instance4 Instance5 Instance6 Instance7 Instance8 + +COLUMN statistic HEADING "Statistic" FORMAT a25 +COLUMN inst1_last_query HEADING "Last|Query|Instance1" FORMAT 999,999 +COLUMN inst2_last_query HEADING "Last|Query|Instance2" FORMAT 999,999 +COLUMN inst3_last_query HEADING "Last|Query|Instance3" FORMAT 999,999 +COLUMN inst4_last_query HEADING "Last|Query|Instance4" FORMAT 999,999 +COLUMN inst5_last_query HEADING "Last|Query|Instance5" FORMAT 999,999 +COLUMN inst6_last_query HEADING "Last|Query|Instance6" FORMAT 999,999 +COLUMN inst7_last_query HEADING "Last|Query|Instance7" FORMAT 999,999 +COLUMN inst8_last_query HEADING "Last|Query|Instance8" FORMAT 999,999 +COLUMN inst1_session_total HEADING "Total|Instance1" FORMAT 999,999 +COLUMN inst2_session_total HEADING "Total|Instance2" FORMAT 999,999 +COLUMN inst3_session_total HEADING "Total|Instance3" FORMAT 999,999 +COLUMN inst4_session_total HEADING "Total|Instance4" FORMAT 999,999 +COLUMN inst5_session_total HEADING "Total|Instance5" FORMAT 999,999 +COLUMN inst6_session_total HEADING "Total|Instance6" FORMAT 999,999 +COLUMN inst7_session_total HEADING "Total|Instance7" FORMAT 999,999 +COLUMN inst8_session_total HEADING "Total|Instance8" FORMAT 999,999 + + +SELECT TRIM(p.statistic) statistic + , MAX(DECODE(p.inst_id, 1, p.last_query,NULL)) inst1_last_query + , MAX(DECODE(p.inst_id, 2, p.last_query,NULL)) inst2_last_query + , MAX(DECODE(p.inst_id, 3, p.last_query,NULL)) inst3_last_query + , MAX(DECODE(p.inst_id, 4, p.last_query,NULL)) inst4_last_query + , MAX(DECODE(p.inst_id, 5, p.last_query,NULL)) inst5_last_query + , MAX(DECODE(p.inst_id, 6, p.last_query,NULL)) inst6_last_query + , MAX(DECODE(p.inst_id, 7, p.last_query,NULL)) inst7_last_query + , MAX(DECODE(p.inst_id, 8, p.last_query,NULL)) inst8_last_query + , MAX(DECODE(p.inst_id, 1, p.session_total,NULL)) inst1_session_total + , MAX(DECODE(p.inst_id, 2, p.session_total,NULL)) inst2_session_total + , MAX(DECODE(p.inst_id, 3, p.session_total,NULL)) inst3_session_total + , MAX(DECODE(p.inst_id, 4, p.session_total,NULL)) inst4_session_total + , MAX(DECODE(p.inst_id, 5, p.session_total,NULL)) inst5_session_total + , MAX(DECODE(p.inst_id, 6, p.session_total,NULL)) inst6_session_total + , MAX(DECODE(p.inst_id, 7, p.session_total,NULL)) inst7_session_total + , MAX(DECODE(p.inst_id, 8, p.session_total,NULL)) inst8_session_total + FROM gv$pq_sesstat p +GROUP BY p.statistic +ORDER BY DECODE(TRIM(p.statistic) + ,'Queries Parallelized' ,01 + ,'DML Parallelized' ,02 + ,'DDL Parallelized' ,03 + ,'DFO Trees' ,04 + ,'Server Threads' ,05 + ,'Allocation Height' ,06 + ,'Allocation Width' ,07 + ,'Local Msgs Sent' ,08 + ,'Local Msgs Recv''d' ,09 + ,'Distr Msgs Sent' ,10 + ,'Distr Msgs Recv''d' ,11 + ,99 + ) +/ + +@@footer diff --git a/vg/parameter.sql b/vg/parameter.sql new file mode 100644 index 0000000..53d96af --- /dev/null +++ b/vg/parameter.sql @@ -0,0 +1,108 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all parameters +* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character) +* 2 - Instance Number ( Use % to query for all instances) +* 3 - Where Clause ( Default NULL) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------------ +* 26-Jan-15 Vishal Gupta Added where clause input parameter +* 11-Dec-14 Vishal Gupta Added conditional column display based on DB version +* 05-Aug-06 Vishal Gupta First Draft +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE PARAM_NAME +UNDEFINE INST_ID +UNDEFINE WHERE_CLAUSE + +DEFINE PARAM_NAME="&&1" +DEFINE INST_ID="&2" +DEFINE WHERE_CLAUSE="&3" + + + +COLUMN _PARAM_NAME NEW_VALUE PARAM_NAME NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +set term off +SELECT DECODE('&&PARAM_NAME','','%','&&PARAM_NAME') "_PARAM_NAME" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +FROM DUAL; +set term on + + +PROMPT ************************************************************** +PROMPT * D A T A B A S E P A R A M E T E R S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Parameter Name = "&&PARAM_NAME" +PROMPT * - Instance# = "&&INST_ID" +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************** + + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN name HEADING "Name" FORMAT a36 +COLUMN value HEADING "Value" FORMAT a25 +COLUMN Display_value HEADING "Value" FORMAT a25 +COLUMN type HEADING "Type" FORMAT a10 +COLUMN ordinal HEADING "Ord" FORMAT 99 +COLUMN isdefault HEADING "Def|ault?" FORMAT a5 +COLUMN ismodified HEADING "Modi|fied?" FORMAT a8 +COLUMN isadjusted HEADING "Adjus|ted?" FORMAT a5 +COLUMN isses_modifiable HEADING "Sess|Modif|iable?" FORMAT a9 +COLUMN issys_modifiable HEADING "Sys|Modif|iable?" FORMAT a9 +COLUMN isinstance_modifiable HEADING "Inst|Modif|iable?" FORMAT a9 +COLUMN isinstance_modifiable HEADING "Inst|Modif|iable?" FORMAT a9 +COLUMN isbasic HEADING "Basic" FORMAT a5 +COLUMN isdeprecated HEADING "Depre|cated?" FORMAT a5 +COLUMN description HEADING "Desc" FORMAT a70 +COLUMN update_comment HEADING "Comment" FORMAT a20 + +SELECT p.inst_id + , p.name +&&_IF_ORA_10gR1_OR_HIGHER , p.isdeprecated + , DECODE(p.type + , 1, 'Boolean' + , 2, 'String' + , 3, 'Integer' + , 4, 'Parameter File' + , 5, 'Reserved' + , 6, 'Big Int' + , p.type + ) TYPE + , p.ordinal +&&_IF_ORA_9iR2_OR_LOWER , p.value +&&_IF_ORA_10gR1_OR_HIGHER , p.display_value + , p.isdefault + , p.ismodified + , p.isadjusted + , p.isses_modifiable + , p.issys_modifiable +&&_IF_ORA_10gR1_OR_HIGHER , p.isinstance_modifiable +&&_IF_ORA_11gR1_OR_HIGHER , p.isbasic + , p.description + --, p.update_comment + FROM gv$system_parameter2 p + WHERE ( LOWER(p.name) LIKE LOWER('&&PARAM_NAME') ESCAPE '\' + OR LOWER(p.description) LIKE LOWER('&&PARAM_NAME') ESCAPE '\' + ) + AND p.inst_id like DECODE('&&INST_ID',NULL,'%','','%','&&INST_ID') + &&WHERE_CLAUSE +ORDER BY LOWER(REPLACE ( p.name, '_', '')) asc, p.inst_id, p.ordinal +/ + +@@footer diff --git a/vg/parameter_hidden.sql b/vg/parameter_hidden.sql new file mode 100644 index 0000000..ff2574e --- /dev/null +++ b/vg/parameter_hidden.sql @@ -0,0 +1,70 @@ +@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all hidden parameters +* Parameters : 1 - Parameter name (Use % as wild card and \ as escape character +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-06 Vishal Gupta First Draft +* +* +*/ + + +DEFINE param_name="&&1" + +COLUMN inst_id HEADING "I#" FORMAT 99 ON +COLUMN name HEADING "Name" FORMAT a36 ON +COLUMN value HEADING "Value" FORMAT a20 ON +COLUMN type HEADING "Type" FORMAT a8 ON +COLUMN description HEADING "Desc" FORMAT a80 ON + +SELECT + -- x.inst_id Inst_id, + x.ksppinm NAME + , DECODE(x.ksppity + , 1, 'Boolean' + , 2, 'String' + , 3, 'Integer' + , 4, 'Parameter File' + , 5, 'Reserved' + , 6, 'Big Int' + , x.ksppity + ) TYPE + , y.ksppstvl VALUE + , y.ksppstdf isdefault + , DECODE ( BITAND ( x.ksppiflg / 256, 1 ) + , 1, 'TRUE' + , 'FALSE' + ) isses_modifiable + , DECODE ( BITAND ( x.ksppiflg / 65536, 3 ) + , 1, 'IMMEDIATE' + , 2, 'DEFERRED' + , 3, 'IMMEDIATE' + , 'FALSE' + ) issys_modifiable + , DECODE ( BITAND ( y.ksppstvf, 7 ) + , 1, 'MODIFIED' + , 4, 'SYSTEM_MOD' + , 'FALSE' + ) ismodified + , DECODE ( BITAND ( y.ksppstvf, 2 ) + , 2, 'TRUE' + , 'FALSE' + ) isadjusted + , x.ksppdesc description + FROM sys.x$ksppi x + , sys.x$ksppcv y + WHERE ( x.indx = y.indx ) + AND x.inst_id = y.inst_id + AND ( LOWER(x.ksppinm) LIKE LOWER('&¶m_name') ESCAPE '\' + OR LOWER(x.ksppdesc) LIKE LOWER('&¶m_name') ESCAPE '\' ) +ORDER BY LOWER(REPLACE ( x.ksppinm, '_', '')) asc +/ + +@footer diff --git a/vg/parameter_runtime.sql b/vg/parameter_runtime.sql new file mode 100644 index 0000000..d0c4445 --- /dev/null +++ b/vg/parameter_runtime.sql @@ -0,0 +1,139 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all parameters modified at runtime but not specified in spfile +* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character) +* 2 - Instance Number ( Use % to query for all instances) +* 3 - Where Clause ( Default NULL) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 31-MAR-14 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE PARAM_NAME +UNDEFINE INST_ID +UNDEFINE WHERE_CLAUSE + +DEFINE PARAM_NAME="&&1" +DEFINE INST_ID="&2" +DEFINE WHERE_CLAUSE="&3" + + +COLUMN _PARAM_NAME NEW_VALUE PARAM_NAME NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +set term off +SELECT DECODE('&&PARAM_NAME','','%','&&PARAM_NAME') "_PARAM_NAME" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +FROM DUAL; +set term on + + +PROMPT ************************************************************** +PROMPT * D A T A B A S E P A R A M E T E R S +PROMPT * (Modified at runtime, but not specified in spfile) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Parameter Name = "&&PARAM_NAME" +PROMPT * - Instance# = "&&INST_ID" +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************** + + + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN name HEADING "Name" FORMAT a36 +COLUMN value HEADING "Value" FORMAT a25 +COLUMN type HEADING "Type" FORMAT a10 +COLUMN ordinal HEADING "Ordinal" FORMAT 99 +COLUMN isdefault HEADING "Def|ault?" FORMAT a5 +COLUMN ismodified HEADING "Modi|fied?" FORMAT a8 +COLUMN isadjusted HEADING "Adjus|ted?" FORMAT a5 +COLUMN isses_modifiable HEADING "Sess|Modif|iable?" FORMAT a9 +COLUMN issys_modifiable HEADING "Sys|Modif|iable?" FORMAT a9 +COLUMN isinstance_modifiable HEADING "Inst|Modif|iable?" FORMAT a9 +COLUMN isinstance_modifiable HEADING "Inst|Modif|iable?" FORMAT a9 +COLUMN isbasic HEADING "Basic" FORMAT a5 +COLUMN description HEADING "Desc" FORMAT a70 +COLUMN update_comment HEADING "Comment" FORMAT a20 + +COLUMN display_value HEADING "RunTime Value" FORMAT a25 +COLUMN spfile_display_value HEADING "SP Value" FORMAT a25 + +/* +SELECT p.SID + , p.name NAME + , p.type + , p.ordinal + , p.display_value value + --, p.isspecified + , p.update_comment + FROM gv$system_parameter2 p + , gv$instance i + , v$spparameter sp + WHERE p.inst_id = i.inst_id + AND p.isdefault <> 'TRUE' + AND LOWER(p.name) = LOWER(sp.name (+)) + AND CASE WHEN sp.sid = '*' THEN TRUE + ELSE LOWER(sp.sid) = LOWER(p.instance_name || p.instance_number (+) ) + END + AND sp.isspecified (+) = 'TRUE' +ORDER BY LOWER(REPLACE ( p.name, '_', '')) asc + , p.SID + , p.ordinal +/ +*/ + +SELECT p.inst_id + , p.name NAME + , DECODE(p.type + , 1, 'Boolean' + , 2, 'String' + , 3, 'Integer' + , 4, 'Parameter File' + , 5, 'Reserved' + , 6, 'Big Int' + , p.type + ) TYPE + , p.ordinal + , p.isdefault + , p.ismodified + , p.isadjusted + , p.display_value + , sp.display_value spfile_display_value + --, p.isses_modifiable + --, p.issys_modifiable + --, p.isinstance_modifiable + --, p.isbasic + --, p.description + FROM gv$system_parameter2 p + JOIN gv$instance i ON p.inst_id = i.inst_id + LEFT OUTER JOIN v$spparameter sp ON sp.isspecified = 'TRUE' + AND LOWER(p.name) = LOWER(sp.name) + AND p.ordinal = sp.ordinal + AND CASE WHEN sp.sid = '*' THEN LOWER(i.instance_name ) ELSE LOWER(sp.sid) END = LOWER(i.instance_name) + WHERE 1=1 + AND ( LOWER(p.name) LIKE LOWER('&&PARAM_NAME') ESCAPE '\' + OR LOWER(p.description) LIKE LOWER('&&PARAM_NAME') ESCAPE '\' + ) + AND p.inst_id like DECODE('&&INST_ID',NULL,'%','','%','&&INST_ID') + AND ( ( p.ismodified = 'MODIFIED' AND NVL(p.display_value,'x') <> NVL(sp.display_value,'x')) + OR ( p.ismodified = 'FALSE' AND p.isdefault = 'FALSE' AND NVL(p.display_value,'x') <> NVL(sp.display_value,'x') ) + ) +ORDER BY LOWER(REPLACE ( p.name, '_', '')) asc, p.inst_id, p.ordinal +/ + + +@@footer diff --git a/vg/parameter_spfile.sql b/vg/parameter_spfile.sql new file mode 100644 index 0000000..648d71f --- /dev/null +++ b/vg/parameter_spfile.sql @@ -0,0 +1,87 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all parameters from spfile +* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character) +* 2 - Instance Number ( Use % to query for all instances) +* 3 - Where Clause ( Default NULL) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Oct-15 Vishal Gupta Increased Value column width +* 05-Aug-06 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE PARAM_NAME +UNDEFINE INST_ID +UNDEFINE WHERE_CLAUSE + +DEFINE PARAM_NAME="&&1" +DEFINE INST_ID="&2" +DEFINE WHERE_CLAUSE="&3" + + +COLUMN _PARAM_NAME NEW_VALUE PARAM_NAME NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +set term off +SELECT DECODE('&&PARAM_NAME','','%','&&PARAM_NAME') "_PARAM_NAME" + , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +FROM DUAL; +set term on + + +PROMPT ************************************************************** +PROMPT * D A T A B A S E P A R A M E T E R S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Parameter Name = "&&PARAM_NAME" +PROMPT * - Instance# = "&&INST_ID" +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************** + + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN sid HEADING "SID" FORMAT a10 +COLUMN name HEADING "Name" FORMAT a36 +COLUMN type HEADING "Type" FORMAT a11 +COLUMN ordinal HEADING "Ordinal" FORMAT 99 +COLUMN value HEADING "Value" FORMAT a80 +COLUMN isspecified HEADING "Specified?" FORMAT a10 +COLUMN update_comment HEADING "Comment" FORMAT a40 + +SELECT /* + x.inst_id Instance_id + , x.indx + 1 num + , + */ + p.SID + , p.name NAME + , p.type + , p.ordinal + , p.display_value value + --, p.isspecified + , p.update_comment + FROM v$spparameter p + WHERE ( LOWER(p.name) LIKE LOWER('&&PARAM_NAME') ESCAPE '\' + ) + --AND p.inst_id like DECODE('&&INST_ID',NULL,'%','','%','&&INST_ID') + AND p.isspecified = 'TRUE' +ORDER BY LOWER(REPLACE ( p.name, '_', '')) asc + , p.SID + , p.ordinal +/ + + +@@footer diff --git a/vg/parameter_valid_values.sql b/vg/parameter_valid_values.sql new file mode 100644 index 0000000..123a79a --- /dev/null +++ b/vg/parameter_valid_values.sql @@ -0,0 +1,72 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display valid values for init.ora parameters +* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character) +* 2 - Where Clause ( Default NULL) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------------ +* 22-Jan-14 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE PARAM_NAME +UNDEFINE WHERE_CLAUSE + +DEFINE PARAM_NAME="&&1" +DEFINE WHERE_CLAUSE="&2" + + + +COLUMN _PARAM_NAME NEW_VALUE PARAM_NAME NOPRINT +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +set term off +SELECT DECODE('&&PARAM_NAME','','%','&&PARAM_NAME') "_PARAM_NAME" +FROM DUAL; +set term on + + +PROMPT ************************************************************** +PROMPT * Valid values for init.ora parameters +PROMPT * +PROMPT * Input Parameters +PROMPT * - Parameter Name = "&&PARAM_NAME" +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************** + + +COLUMN parno_kspvld_values HEADING "Parameter|Number" FORMAT 9999999 +COLUMN name_kspvld_values HEADING "Parameter|Name" FORMAT a30 +COLUMN ordinal_kspvld_values HEADING "Ordinal|Name" FORMAT 999999 +COLUMN value_kspvld_values HEADING "Valid Values" FORMAT a20 +COLUMN isdefault_kspvld_values HEADING "ISDEFAULT" FORMAT a5 + +BREAK ON parno_kspvld_values ON name_kspvld_values SKIP 1 + +SELECT parno_kspvld_values + , name_kspvld_values + , ordinal_kspvld_values + , value_kspvld_values + , isdefault_kspvld_values + FROM sys.x$kspvld_values p + JOIN v$instance i ON i.instance_number = p.inst_id + WHERE 1=1 + -- AND TRANSLATE(name_kspvld_values,'_','#') NOT LIKE '#%' /* Exclude hidden parameters */ + AND UPPER(name_kspvld_values) LIKE UPPER('&&PARAM_NAME') +ORDER BY name_kspvld_values + , ordinal_kspvld_values +; + +@@footer diff --git a/vg/parameters_comparison.htm b/vg/parameters_comparison.htm new file mode 100644 index 0000000..f0eb05a --- /dev/null +++ b/vg/parameters_comparison.htm @@ -0,0 +1,135516 @@ + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + Show/Hide Versions : + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    + + + +
    + +
    + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NAMEDESCRIPTION9204920692079208101031010410105102011020210203102041020511106111071120111202112031120412101VALUE_9204VALUE_9206VALUE_9207VALUE_9208VALUE_10103VALUE_10104VALUE_10105VALUE_10201VALUE_10202VALUE_10203VALUE_10204VALUE_10205VALUE_11106VALUE_11107VALUE_11201VALUE_11202VALUE_11203VALUE_11204VALUE_12101
    _4030_dump_bitvecbitvec to specify dumps prior to 4030 errorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              40954095409540954095
    _4030_dump_bitvecbitvec to specify dumps prior to 4030 errorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           4095       
    _4031_dump_bitvecbitvec to specify dumps prior to 4031 errorN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden 663961566396156639615204792047920479671948796719487967194879671948796719487967194879671948796719487967194879671948796719487967194879
    _4031_dump_intervalDump 4031 error once for each n-second intervalN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    300300300300300300300300300300300300300300300
    _4031_max_dumpsMaximum number of 4031 dumps for this processN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100100100100100100100100100100100100100100100
    _4031_sga_dump_intervalDump 4031 SGA heapdump error once for each n-second intervalN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    360036003600360036003600360036003600360036003600360036003600
    _4031_sga_max_dumpsMaximum number of SGA heapdumpsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    101010101010101010101010101010
    _NUMA_instance_mappingSet of nodes that this instance should run onHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specified
    _NUMA_pool_sizeaggregate size in bytes of NUMA poolHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specifiedNot specified
    O7_DICTIONARY_ACCESSIBILITYVersion 7 Dictionary Accessibility SupportRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _PX_use_large_poolUse Large Pool as source of PX buffersHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _UTL_FILE_FOLLOW_SYMLINKSUTL_FILE backout event which allows UTL_FILE to open symlinksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            FALSEFALSE     
    _abort_on_mrp_crashabort database instance when MRP crashesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _abort_recovery_on_joinif TRUE, abort recovery on join reconfigurationsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _accept_versionsList of parameters for rolling operationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    active_instance_countnumber of active instances in the cluster databaseRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _active_session_idle_limitactive session idle limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _active_session_idle_limitactive session idle limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00555
    _active_session_legacy_behavioractive session legacy behaviorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _active_session_legacy_behavioractive session legacy behaviorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _active_standby_fast_reconfigurationif TRUE optimize dlm reconfiguration for active/standby OPSHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _adaptive_direct_readAdaptive Direct ReadHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _adaptive_direct_writeAdaptive Direct WriteN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _adaptive_fetch_enabledenable/disable adaptive fetch in parallel group byHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _adaptive_log_file_sync_high_switch_freq_thresholdThreshold for frequent log file sync mode switches (per minute)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               3333
    _adaptive_log_file_sync_poll_aggressivenessPolling interval selection bias (conservative=0, aggressive=100)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _adaptive_log_file_sync_sched_delay_windowWindow (in seconds) for measuring average scheduling delayN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               60606060
    _adaptive_log_file_sync_use_polling_thresholdRatio of redo synch time to expected poll time as a percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               110200200110
    _adaptive_log_file_sync_use_postwait_thresholdPercentage of foreground load from when post/wait was last usedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               50505050
    _add_col_optim_enabledAllows new add column optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _add_stale_mv_to_dependency_listadd stale mv to dependency listN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _add_trim_for_nlssortadd trimming for fixed char semanticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _add_trim_for_nlssortadd trimming for fixed char semanticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _addm_auto_enablegoverns whether ADDM gets run automatically after every AWR snapshotN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _addm_skiprulescomma-separated list of ADDM nodes to skipN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _addm_version_checkgoverns whether ADDM checks the input AWR snapshot versionN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _adg_instance_recoveryenable ADG instance recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSETRUE
    _adg_parselock_timeouttimeout for parselock get on ADG in centisecondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 0 
    _adg_parselock_timeout_sleepsleep duration after a parselock timeout on ADG in millisecondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 100 
    _adjust_literal_replacementIf TRUE, we will adjust the SQL/PLUS outputN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden     FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _adjust_literal_replacementIf TRUE, we will adjust the SQL/PLUS outputN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A FALSEFALSEFALSE               
    _adr_migrate_runonceEnable/disable ADR Migrate Runonce actionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _affinity_onenable/disable affinity at run timeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _aged_out_cursor_cache_timenumber of seconds an aged out session cached cursor stay in cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               300300300300
    _aggregation_optimization_settingssettings for aggregation optimizationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _aiowait_timeoutsNumber of aiowait timeouts before error is reportedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    _alert_expirationseconds before an alert message is moved to exception queueN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    604800604800604800604800604800604800604800604800604800604800604800604800604800604800604800
    _alert_message_cleanupEnable Alert Message CleanupN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       111111111111
    _alert_message_purgeEnable Alert Message PurgeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       111111111111
    _alert_post_backgroundEnable Background Alert PostingN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       111111111111
    _all_shared_dblinkstreat all dblinks as sharedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _allocate_creation_ordershould files be examined in creation order during allocationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _allocation_update_intervalinterval at which successful search in L1 should be updatedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3333333333333333333
    _allow_cell_smart_scan_attrAllow checking smart_scan_capable AttrN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _allow_commutativityallow for commutativity of +, * when comparing expressionsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _allow_compatibility_adv_w_grpallow advancing DB compatibility with guaranteed restore pointsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _allow_drop_snapshot_standby_grspAllow dropping snapshot standby guaranteed restore pointN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _allow_drop_ts_with_grpAllow drop Tablespace with guaranteed restore pointsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _allow_error_simulationAllow error simulation for testingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _allow_level_without_connect_byallow level without connect byN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _allow_read_only_corruptionallow read-only open even if database is corruptHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _allow_resetlogs_corruptionallow resetlogs even if it will cause corruptionHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _allow_sage_attrAllow checking Disk Group SAGE AttrN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            TRUE      
    _allow_terminal_recovery_corruptionFinish terminal recovery even if it may cause corruptionHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _alternate_iot_leaf_block_split_pointsenable alternate index-organized table leaf-block split-pointsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _always_anti_joinalways use this method for anti-join when possibleHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenCHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSE
    _always_semi_joinalways use this method for semi-join when possibleHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenCHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSE
    _always_star_transformationalways favor use of star transformationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _and_pruning_enabledallow partition pruning based on multiple mechanismsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _app_ctx_versenable app ctx versioningHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/ATRUETRUETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE 
    _appqos_qtSystem Queue time retrieval intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101010
    _aq_max_scan_delayMaximum allowable scan delay for AQ indexes and IOTsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1500150015001500
    _aq_tm_deqcountintervaldequeue count interval for Time Managers to cleanup DEQ IOT BLOCKSN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    aq_tm_processesnumber of AQ Time Managers to startRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000111
    _aq_tm_scanlimitscan limit for Time Managers to clean up IOTHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _aq_tm_statistics_durationstatistics collection window durationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _arch_comp_dbg_scanarchive compression scan debugN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _arch_comp_dec_block_check_dumpdecompress archive compression blocks for checking and dumpingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              11111
    _arch_compress_checksumsenable/disable row checksums for archive compressed blocksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _arch_compressionarchive compression enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _arch_corrupted_redo_logVariable to simulate corruption errors during archivalsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A          0000     
    _arch_io_slavesARCH I/O slavesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _arch_sim_modeChange behavior of local archivingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    archive_lag_targetMaximum number of seconds of redos the standby could loseRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _array_update_vector_read_enabledEnable array update vector readN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ash_compression_enableTo enable or disable string compression in ASHN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _ash_disk_filter_ratioRatio of the number of in-memory samples to the number of samples actually written to diskN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    101010101010101010101010101010
    _ash_disk_write_enableTo enable or disable Active Session History flushingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _ash_dummy_test_paramOracle internal dummy ASH parameter used ONLY for testing!N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _ash_eflush_triggerThe percentage above which if the in-memory ASH is full the emergency flusher will be triggeredN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    666666666666666666666666666666
    _ash_enableTo enable or disable Active Session sampling and flushingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _ash_min_mmnl_dumpMinimum Time interval passed to consider MMNL DumpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            90909090909090
    _ash_sample_allTo enable or disable sampling every connected session including ones waiting for idle waitsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ash_sampling_intervalTime interval between two successive Active Session samples in millisecsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100010001000100010001000100010001000100010001000100010001000
    _ash_sizeTo set the size of the in-memory Active Session History buffersN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    104861810486181048618104861810486181048618104861810486181048618104861810486181048618104861810486181048618
    _asm_acd_chunksinitial ACD chunks createdN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    111111111111111
    _asm_admin_with_sysdbaDoes the sysdba role have administrative privileges on ASM?N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUEFALSEFALSEFALSEFALSEFALSE
    _asm_allow_appliance_dropdisk_noforceAllow DROP DISK/FAILUREGROUP NOFORCE on ASM AppliancesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _asm_allow_lvm_resilveringEnable disk resilvering for external redundancyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSETRUETRUETRUETRUE
    _asm_allow_only_raw_disksDiscovery only raw devicesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _asm_allow_resilver_corruptionEnable disk resilvering for external redundancyN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A       FALSEFALSEFALSEFALSEFALSEFALSEFALSE     
    _asm_allow_system_alias_renameif system alias renaming is allowedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _asm_appliance_config_fileAppliance configuration file nameN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _asm_ausizeallocation unit sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576
    _asm_automatic_rezoneautomatically rebalance free space across zonesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _asm_avoid_pst_scansAvoid PST ScansN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _asm_blksizemetadata block sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    409640964096409640964096409640964096409640964096409640964096
    _asm_check_for_misbehaving_cf_clientscheck for misbehaving CF-holding clientsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _asm_compatibilitydefault ASM compatibility levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10.110.110.110.110.110.110.1
    _asm_dba_batchASM Disk Based Allocation Max Batch SizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                500000500000500000
    _asm_dba_spcchk_thldASM Disk Based Allocation Space Check ThresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 2000020000
    _asm_dba_thresholdASM Disk Based Allocation ThresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _asm_dbmsdg_nohdrchkdbms_diskgroup.checkfile does not check block headersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _asm_diag_dead_clientsdiagnostics for dead clientsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _asm_direct_con_expire_timeExpire time for idle direct connection to ASM instanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              120120120120120
    _asm_direct_con_expire_timeExpire time for idle direct connection to ASM instanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           120       
    _asm_disable_amdu_dumpDisable AMDU dumpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_disable_async_msgsdisable async intra-instance messagingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _asm_disable_multiple_instance_checkDisable checking for multiple ASM instances on a given nodeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_disable_profilediscoverydisable profile query for discoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_disable_smr_creationDo Not create smrN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_disable_ufg_dumpdisable terminated umbilicus diagnosticN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _asm_disk_repair_timeseconds to wait before dropping a failing diskN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    144001440014400144001440014400144001440014400144001440014400144001440014400
    asm_diskgroupsdisk groups to mount automaticallyN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    asm_diskstringdisk set locations for discoveryN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _asm_droptimeouttimeout before offlined disks get dropped (in 3s ticks)N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A       6060606060       
    _asm_emulate_nfs_diskEmulate NFS disk test eventN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_emulmaxmax number of concurrent disks to emulate I /O errorsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       100001000010000100001000010000100001000010000100001000010000
    _asm_emultimeouttimeout before emulation begins (in 3s ticks)N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _asm_evenreadASM Even Read levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0022
    _asm_evenread_alphaASM Even Read AlphaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _asm_evenread_alpha2ASM Even Read Second AlphaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _asm_evenread_faststartASM Even Read Fast Start ThresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _asm_fail_random_rxRandomly fail some RX enqueue getsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _asm_fd_cln_idle_sess_twaitIdle session time wait to run ASM FD cleanupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 10000000 
    _asm_fd_cln_on_fgASM stale FD cleanup on foregroundsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 TRUE 
    _asm_fob_tac_frequencyTimeout frequency for FOB cleanupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           3       
    _asm_fob_tac_frequencyTimeout frequency for FOB cleanupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             399999
    _asm_force_quiesceForce diskgroup quiescingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_global_dump_levelSystem state dump level for ASM assertsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 267267
    _asm_hbeatiowaitnumber of secs to wait for PST Async Hbeat IO returnN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                151515
    _asm_hbeatwaitquantumquantum used to compute time-to-wait for a PST Hbeat checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              22222
    _asm_imbalance_tolerancehundredths of a percentage of inter-disk imbalance to tolerateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             133333
    _asm_instlock_quotaASM Instance Lock QuotaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _asm_instlock_quotaASM Instance Lock QuotaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _asm_iostat_latch_countASM I/O statistics latch countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               31313131
    _asm_kfdpeventKFDP eventN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _asm_kfioeventKFIO eventN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenN/A            000000 
    _asm_kill_unresponsive_clientskill unresponsive ASM clientsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _asm_librarieslibrary search order for discoveryN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    ufsufsufsufsufsufsufsufsufsufsufsufsufsufsufs
    _asm_log_scale_rebalanceRebalance power uses logarithmic scaleN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _asm_lsod_bucket_sizeASM lsod bucket sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1313136767
    _asm_max_cod_stridesmaximum number of COD stridesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              55555
    _asm_max_redo_buffer_sizeasm maximum redo buffer sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               2097152209715220971522097152
    _asm_maxioMaximum size of individual I/O requestN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576
    _asm_partner_target_disk_parttarget maximum number of disk partners for repartneringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             888888
    _asm_partner_target_fg_reltarget maximum number of failure group relationships for repartneringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             444444
    asm_power_limitnumber of parallel relocations for disk rebalancingN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    111111111111111
    asm_preferred_read_failure_groupspreferred read failure groupsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular                   
    _asm_primary_loadNumber of cycles/extents to load for non-mirrored filesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              11111
    _asm_primary_load_cyclesTrue if primary load is in cycles, false if extent countsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _asm_random_zoneRandom zones for new filesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_rebalance_plan_sizemaximum rebalance work unitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               120120120120
    _asm_rebalance_space_errorsnumber of out of space errors allowed before aborting rebalanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               4444
    _asm_repairquantumquantum (in 3s) used to compute elapsed time for disk dropN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            60606060606060
    _asm_reserve_slavesreserve ASM slaves for CF txnsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _asm_root_directoryASM default root directoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              ASMASMASMASMASM
    _asm_runtime_capability_volume_supportruntime capability for volume support returns supportedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _asm_secondary_loadNumber of cycles/extents to load for mirrored filesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1000010000100001000010000
    _asm_secondary_load_cyclesTrue if secondary load is in cycles, false if extent countsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_serialize_volume_rebalanceSerialize volume rebalanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_shadow_cycleInverse shadow cycle requirementN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             333333
    _asm_skip_rename_checkskip the checking of the clients for s/w compatibility for renameN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _asm_skip_resize_checkskip the checking of the clients for s/w compatibility for resizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _asm_storagemaysplitPST Split PossibleN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _asm_stripesizeASM file stripe sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    131072131072131072131072131072131072131072131072131072131072131072131072131072131072131072
    _asm_stripewidthASM file stripe widthN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    888888888888888
    _asm_sync_rebalanceRebalance uses sync I/ON/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _asm_usd_batchASM USD Update Max Batch SizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               64646464
    _asm_wait_timeMax/imum time to wait before asmb exitsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    181818181818181818181818181818
    _asmlib_testOsmlib test eventN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/A    00000000000000 
    _asmsidASM instance idN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    asmasmasmasmasmasmasmasmasmasmasmasmasmasmasm
    _assm_defaultASSM defaultN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _assm_force_fetchmetaenable metadata block fetching in ASSM segment scanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _assm_high_gsp_thresholdNumber of blocks rejected before growing segmentN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               11024110241102411024
    _assm_low_gsp_thresholdNumber of blocks rejected before collecting statsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               10000100001000010000
    _async_object_flushif FALSE, disable asychronous object flushN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A         TRUETRUETRUE       
    _async_recovery_claimsif TRUE, issue recovery claims asynchronouslyHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _async_recovery_readsif TRUE, issue recovery reads asynchronouslyHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _async_rta_broadcastasynchronously broadcast RTA boundaryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _async_ts_thresholdcheck tablespace thresholds asynchronouslyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden           11111111
    _attach_count_slackunauth user processes slackHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A10101010               
    audit_sys_operationsenable sys auditingRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    audit_syslog_levelSyslog facility and levelN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    audit_trailenable system auditingRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularNONENONENONENONENONENONENONENONENONENONENONENONENONENONENONENONENONENONENONE
    _auto_assign_cg_for_sessionsauto assign CGs for sessionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _auto_bmrenable/disable Auto BMRN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              enabledenabledenabledenabledenabled
    _auto_bmr_bg_timeAuto BMR Process Run TimeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              36003600360036003600
    _auto_bmr_fc_timeAuto BMR Flood Control TimeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              6060606060
    _auto_bmr_max_rownox$krbabrstat Max number of rowsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 1024 
    _auto_bmr_pub_timeoutAuto BMR Publish TimeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101010
    _auto_bmr_req_timeoutAuto BMR Requester TimeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              6060606060
    _auto_bmr_sess_thresholdAuto BMR Request Session ThresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              3030303030
    _auto_bmr_sys_thresholdAuto BMR Request System ThresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              100100100100100
    _auto_manage_enable_offline_checkperodically check for OFFLINE disks and attempt to ONLINEN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSETRUETRUETRUETRUE
    _auto_manage_exadata_disksAutomate Exadata disk managementN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _auto_manage_infreq_toutTEST: Set infrequent timeout action to run at this interval, unit is secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _auto_manage_ioctl_bufszoss_ioctl buffer size, to read and respond to cell notificationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              20488192819281928192
    _auto_manage_max_online_triesMax. attempts to auto ONLINE an ASM diskN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               3333
    _auto_manage_num_pipe_msgsMax. number of out-standing msgs in the KXDAM pipeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1000100010001000
    _auto_manage_num_triesNum. tries before giving up on a automation operationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              32222
    _auto_manage_online_tries_expire_timeAllow Max. attempts to auto ONLINE an ASM disk after lapsing this time (unit in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               86400864008640086400
    _automatic_maintenance_testEnable AUTOTASK Test ModeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _automemory_broker_intervalmemory broker statistics gathering interval for auto memoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            3333333
    _autotask_max_windowMaximum Logical Maintenance Window Length in minutesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            480480480480480480480
    _autotask_min_windowMinimum Maintenance Window Length in minutesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            15151515151515
    _autotune_gtx_idle_timeidle time to trigger auto-shutdown a gtx background processN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            600600600600600600600
    _autotune_gtx_intervalinterval to autotune global transaction background processesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    _autotune_gtx_thresholdauto-tune threshold for degree of global transaction concurrencyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            60606060606060
    _available_core_countnumber of cores for this instanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _avoid_prepareif TRUE, do not prepare a buffer when the master is localHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _aw_row_source_enabledEnables AW Row Source instead of collection iteratorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            TRUETRUE     
    _awr_corrupt_modeAWR Corrupt ModeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _awr_disabled_flush_tablesDisable flushing of specified AWR tablesN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _awr_flush_threshold_metricsEnable/Disable Flushing AWR Threshold MetricsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUE
    _awr_flush_workload_metricsEnable/Disable Flushing AWR Workload MetricsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _awr_mmon_cpuusageEnable/disable AWR MMON CPU Usage TrackingN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _awr_mmon_deep_purge_all_expiredAllows deep purge to purge AWR data for all expired snapshotsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _awr_mmon_deep_purge_enabledEnable/disable AWR deep purgeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _awr_mmon_deep_purge_extentSet extent of rows to check each deep purge runN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           7       
    _awr_mmon_deep_purge_extentSet extent of rows to check each deep purge runN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              77777
    _awr_mmon_deep_purge_intervalSet interval for deep purge of AWR contentsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              77777
    _awr_mmon_deep_purge_intervalSet interval for deep purge of AWR contentsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           7       
    _awr_mmon_deep_purge_numrowsSet max number of rows per table to delete each deep purge runN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           5000       
    _awr_mmon_deep_purge_numrowsSet max number of rows per table to delete each deep purge runN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              50005000500050005000
    _awr_restrict_modeAWR Restrict ModeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    awr_snapshot_time_offsetSetting for AWR Snapshot Time OffsetN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegular                000
    _awr_sql_child_limitSetting for AWR SQL Child LimitN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden     200200200200200200200200200200200200200200
    _b_tree_bitmap_plansenable the use of bitmap plans for tables w. only B-tree indexesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    background_core_dumpCore Size for Background ProcessesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartial
    _backup_align_write_ioalign backup write I/OsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _backup_automatic_retryautomatic retry on backup write errorsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                101010
    _backup_bool_spare1backup bool spare1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _backup_bool_spare2backup bool spare2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _backup_bool_spare3backup bool spare3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _backup_bool_spare4backup bool spare4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _backup_compress_opt_modespecifies compression optimization modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/A             4294967294     
    _backup_disk_bufcntnumber of buffers used for DISK channelsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _backup_disk_bufszsize of buffers used for DISK channelsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _backup_disk_io_slavesBACKUP Disk I/O slavesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _backup_dynamic_buffersdynamically compute backup/restore buffer sizesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _backup_encrypt_opt_modespecifies encryption block optimization modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            4294967294429496729442949672944294967294429496729442949672944294967294
    _backup_file_bufcntnumber of buffers used for file accessN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _backup_file_bufszsize of buffers used for file accessN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _backup_int_spare1backup int spare1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 4294967294 
    _backup_int_spare2backup int spare2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 4294967294 
    _backup_int_spare3backup int spare3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 4294967294 
    _backup_int_spare4backup int spare4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 4294967294 
    _backup_io_pool_sizememory to reserve from the large poolHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576
    _backup_kgc_blksizspecifies buffer size to be used by HIGH compressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              99999
    _backup_kgc_bufszspecifies buffer size to be used by BASIC compressionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _backup_kgc_memlevelspecifies memory level for MEDIUM compressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            8888888
    _backup_kgc_nitersspecifies number of iterations done by BASIC compressionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _backup_kgc_perflevelspecifies compression (performance) level for MEDIUM compressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _backup_kgc_schemespecifies compression schemeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            ZLIBZLIBZLIBZLIBZLIBZLIBZLIB
    _backup_kgc_typespecifies compression type used by kgc BASIC compressionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _backup_kgc_windowbitsspecifies window size for MEDIUM compressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            15151515151515
    _backup_ksfq_bufcntnumber of buffers used for backup/restoreN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _backup_ksfq_bufcnt_maxmaximum number of buffers used for backup/restoreN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenN/A            0064646464 
    _backup_ksfq_bufszsize of buffers used for backup/restoreN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _backup_lzo_sizespecifies buffer size for LOW compressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              262144262144262144262144262144
    _backup_max_gap_sizelargest gap in an incremental/optimized backup buffer, in bytesN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       429496729442949672944294967294429496729442949672944294967294429496729442949672944294967294429496729442949672944294967294
    _backup_seq_bufcntnumber of buffers used for non-DISK channelsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _backup_seq_bufszsize of buffers used for non-DISK channelsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    backup_tape_io_slavesBACKUP Tape I/O slavesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _backup_text_spare1backup text spare1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _backup_text_spare2backup text spare2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _backup_text_spare3backup text spare3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _backup_text_spare4backup text spare4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _bct_bitmaps_per_filenumber of bitmaps to store for each datafileN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    888888888888888
    _bct_buffer_allocation_maxmaximum size of all change tracking buffer allocations, in bytesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    104857600104857600104857600104857600104857600104857600104857600104857600104857600104857600104857600104857600104857600104857600104857600
    _bct_buffer_allocation_min_extentsmininum number of extents to allocate per buffer allocationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    111111111111111
    _bct_buffer_allocation_sizesize of one change tracking buffer allocation, in bytesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    209715220971522097152209715220971522097152209715220971522097152209715220971522097152209715220971522097152
    _bct_chunk_sizechange tracking datafile chunk size, in bytesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _bct_crash_reserve_sizechange tracking reserved crash recovery SGA space, in bytesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    262144262144262144262144262144262144262144262144262144262144262144262144262144262144262144
    _bct_file_block_sizeblock size of change tracking file, in bytesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _bct_file_extent_sizeextent size of change tracking file, in bytesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _bct_fixtab_filechange tracking file for fixed tablesN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _bct_health_check_intervalCTWR health check interval (seconds), zero to disableN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               60606060
    _bct_initial_private_dba_buffer_sizeinitial number of entries in the private change tracking dba buffersN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _bct_mrp_timeoutCTWR MRP wait timeout (seconds), zero to wait foreverN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 600600
    _bct_public_dba_buffer_sizetotal size of all public change tracking dba buffers, in bytesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    bitmap_merge_area_sizemaximum memory allow for BITMAP MERGERegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular1048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576
    _bitmap_or_improvement_enabledcontrols extensions to partition pruning for general predicatesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    blank_trimmingblank trimming semantics parameterRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _block_change_trackingchange tracking possibleN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE     
    _block_sample_readahead_prob_thresholdcontrols readahead value during block samplingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           10       
    _block_sample_readahead_prob_thresholdcontrols readahead value during block samplingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             101010101010
    _blocking_sess_graph_cache_sizeblocking session graph cache size in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _blocks_per_cache_servernumber of consecutive blocks per global cache serverN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    1281281281281281281281286423232323216
    _bloom_filter_debugdebug level for bloom filteringN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _bloom_filter_enabledenables or disables bloom filterN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _bloom_folding_densitybloom filter folding density lower boundN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             161616161616
    _bloom_folding_enabledEnable folding of bloom filterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _bloom_folding_minbloom filter folding size lower bound (in KB)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             131072131072131072131072131072128
    _bloom_max_sizemaximum bloom filter size (in KB)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              268435456268435456268435456268435456262144
    _bloom_minmax_enabledenable or disable bloom min max filteringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _bloom_predicate_enabledenables or disables bloom filter predicate pushdownN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSETRUETRUETRUETRUETRUETRUE
    _bloom_predicate_pushdown_to_storageenables or disables bloom filter predicate pushdown to storageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/A             TRUETRUETRUETRUETRUE 
    _bloom_pruning_enabledEnable partition pruning using bloom filteringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _bloom_pushing_maxbloom filter pushing size upper bound (in KB)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             524288524288512512512512
    _bloom_pushing_total_maxbloom filter combined pushing size upper bound (in KB)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               262144262144262144262144
    _bloom_serial_filterenable serial bloom filter on exadataN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 on 
    _bloom_sm_enabledenable bloom filter optimization using slave mappingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _bloom_vector_elementsnumber of elements in a bloom filter vectorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenN/A            000000 
    _bmr_prefered_standbystandby db_unique_name prefered for standby BMRN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenN/A                   
    _branch_taggingenable branch tagging for distributed transactionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _broadcast_scn_wait_timeoutbroadcast-on-commit scn wait timeout in centisecondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101010
    _broadcast_scn_wait_timeoutbroadcast-on-commit scn wait timeout in centisecondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           10       
    _bsln_adaptive_thresholds_enabledAdaptive Thresholds EnabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _bt_mmv_query_rewrite_enabledallow rewrites with multiple MVs and base tablesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _buffer_busy_wait_timeoutbuffer busy wait time in centisecondsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    buffer_pool_keepNumber of database blocks/latches in keep buffer poolRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    buffer_pool_recycleNumber of database blocks/latches in recycle buffer poolRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _buffered_message_spill_ageBuffered message spill ageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           300       
    _buffered_message_spill_ageBuffered message spill ageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              300300300300300
    _bufq_max_msg_szmaximum size of the message allowed in memoryN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A       00000       
    _build_deferred_mv_skipping_mvlog_updateDEFERRED MV creation skipping MV log setup updateN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUETRUETRUETRUE
    _bump_highwater_mark_counthow many blocks should we allocate per free list on advancing HWMHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _bwr_for_flushed_piif TRUE, generate a BWR for a flushed PIHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _bypass_srl_for_so_eorbypass SRL for S/O EOR logsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _bypass_xplatform_errorbypass datafile header cross-platform-compliance errorsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _bypass_xplatform_errorbypass datafile header cross-platform-compliance errorsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _cache_stats_monitorif TRUE, enable cache stats monitoringN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _capture_buffer_sizeTo set the size of the PGA I/O recording buffersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          655366553665536655366553665536655366553665536
    _case_sensitive_logoncase sensitive logon enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _causal_standby_wait_timeoutCausal standby wait timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              2020202020
    _cdc_subscription_ownerChange Data Capture subscription_ownerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _cdmp_diagnostic_levelcdmp directory diagnostic levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             222222
    _cell_fast_file_createAllow optimized file creation path for CellsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _cell_fast_file_restoreAllow optimized rman restore for CellsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _cell_file_format_chunk_sizeCell file format chunk size in MBN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _cell_index_scan_enabledenable CELL processing of index FFSN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _cell_object_expiration_hoursflashcache object expiration timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 2424
    _cell_offload_capabilities_enabledspecifies capability table to loadN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              01111
    cell_offload_compactionCell packet compaction strategyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegular             ADAPTIVEADAPTIVEADAPTIVEADAPTIVEADAPTIVEADAPTIVE
    cell_offload_decryptionenable SQL processing offload of encrypted data to cellsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              TRUETRUETRUETRUETRUE
    _cell_offload_hybridcolumnarQuery offloading of hybrid columnar compressed tables to exadataN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    cell_offload_parametersAdditional cell offload parametersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegular                   
    cell_offload_plan_displayCell offload explain plan displayN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegular             AUTOAUTOAUTOAUTOAUTOAUTO
    _cell_offload_predicate_reordering_enabledenable out-of-order SQL processing offload to cellsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    cell_offload_processingenable SQL processing offload to cellsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegular             TRUETRUETRUETRUETRUETRUE
    _cell_offload_timezoneenable timezone related SQL processing offload to cellsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _cell_offload_virtual_columnsenable offload of predicates on virtual columns to cellsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    cell_offloadgroup_nameSet the offload group nameN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegular                   
    cell_partition_large_extentsEnables large extent allocation for partitioned tablesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularN/AN/AN/AN/A             DEFAULTDEFAULT    
    _cell_range_scan_enabledenable CELL processing of index range scansN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _cell_storidx_modeCell Storage Index modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               EVAEVAEVAEVA
    _cgs_allgroup_poll_timeCGS DBALL group polling interval in milli-secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                200002000020000
    _cgs_dball_group_registrationCGS DBALL group registration typeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                locallocallocal
    _cgs_dbgroup_poll_timeCGS DB group polling interval in milli-secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                600600600
    _cgs_health_check_in_reconfigCGS health check during reconfigurationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _cgs_node_kill_escalationCGS node kill escalation to CSSN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _cgs_node_kill_escalation_waitCGS wait time to escalate node kill to CSS in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _cgs_reconfig_extra_waitCGS reconfiguration extra wait time for CSS in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              33333
    _cgs_reconfig_timeoutCGS reconfiguration timeout intervalN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       1201201201201201000100000000
    _cgs_send_timeoutCGS send timeout valueHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden300300300300300300300300300300300300300300300300300300300
    _cgs_ticketsCGS messaging ticketsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1000100010001000100010001000
    _cgs_zombie_member_kill_waitCGS zombie member kill wait time in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             202020202020
    _change_vector_buffersNumber of change vector buffers for media recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                111
    _check_block_after_checksumperform block check after checksum if both are turned onHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _check_block_new_invariant_for_flashbackcheck block new invariant for flashbackN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _check_column_lengthcheck column lengthN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _check_ts_thresholdcheck tablespace thresholdsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    circuitsmax number of circuitsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000               
    _cleanup_rollback_entriesno. of undo entries to apply per transaction cleanupHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    _cleanup_timeouttimeout value for PMON cleanupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             300150150150150150
    _cleanup_timeout_flagsflags for PMON cleanup timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              22220
    _clear_buffer_before_reuseAlways zero-out buffer before reuse for securityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _clear_buffer_before_reuseAlways zero-out buffer before reuse for securityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _client_enable_auto_unregisterenable automatic unregister after a send fails with timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _client_ntfn_cleanup_intervalinterval after which dead client registration cleanup task repeatsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              24002400240024002400
    _client_ntfn_pingintervaltime between pings to unreachable notification clientsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              7575757575
    _client_ntfn_pingretriesnumber of times to ping unreachable notification clientsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              66666
    _client_ntfn_pingtimeouttimeout to connect to unreachable notification clientsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              3000030000300003000030000
    _client_result_cache_bypassbypass the client result cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    client_result_cache_lagclient result cache maximum lag in millisecondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            3000300030003000300030003000
    client_result_cache_sizeclient result cache max size in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            0000000
    _client_tstz_error_checkShould Client give error for suspect Timestamp with Timezone operationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    clonedbclone databaseN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegular                FALSEFALSEFALSE
    _close_cached_open_cursorsclose cursors cached by PL/SQL at each commitHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _close_deq_by_cond_cursClose Dequeue By Condition CursorsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _close_deq_by_cond_cursClose Dequeue By Condition CursorsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    cluster_databaseif TRUE startup in cluster database modeRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    cluster_database_instancesnumber of instances to use for sizing cluster db SGA structuresRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular1111111111111111111
    cluster_interconnectsinterconnects for RAC useRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _cluster_librarycluster library selectionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    clssclssclssclssclssclssclssclssclssclssclssclssclssclssclss
    _clusterwide_global_transactionsenable/disable clusterwide global transactionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _collapse_wait_historycollapse wait historyN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _collect_undo_statsCollect Statistics v$undostatHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _column_compression_factorColumn compression ratioN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _column_elimination_offturn off predicate-only column eliminationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _column_tracking_levelcolumn usage trackingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    commit_loggingtransaction commit log write behaviourN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular                   
    commit_point_strengthBias this node has toward not preparing in a two-phase commitRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular1111111111111111111
    commit_waittransaction commit log wait behaviourN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular                   
    commit_writetransaction commit log write behaviourN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    compatibleDatabase will be completely compatible with this software versionRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular9.2.0.0.09.2.0.0.09.2.0.0.09.2.0.0.010.0.010.0.010.0.010.2.010.2.010.2.010.2.010.2.011.0.011.0.011.2.011.2.011.2.011.2.012.0.0
    _compatible_no_recoveryDatabase will be compatible unless crash or media recovery is neHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A0.0.00.0.00.0.00.0.0               
    _compilation_call_heap_extent_sizeSize of the compilation call heaps extentsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       163841638416384163841638416384163841638416384163841638416384
    _complex_view_mergingenable complex view mergingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _compression_above_cachenumber of recompression above cache for sanity checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _compression_advisorCompression advisorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _compression_chainpercentage of chained rows allowed for CompressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            50509090909090
    _compression_compatibilityCompression compatabilityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              11.2.011.2.011.2.011.2.012.0.0
    _connect_by_use_union_alluse union all for connect byN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _connection_broker_hostconnection broker host for listen addressN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                  localhost
    _convert_set_to_joinenables conversion of set operator to joinN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _coord_message_bufferparallel recovery coordinator side extra message buffer sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _corrupted_rollback_segmentscorrupted undo segment listHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _cost_equality_semi_joinenables costing of equality semi-joinHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _cp_num_hash_latchesconnection pool number of hash latchesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    cpu_countnumber of CPUs for this instanceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular2222222222222222222
    _cpu_eff_thread_multiplierCPU effective thread multiplierN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _cpu_to_iodivisor for converting CPU cost to I/O costHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _cr_grant_global_roleif TRUE, grant lock for CR requests when block is in global roleHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _cr_grant_local_roleturn 3-way CR grants off, make it automatic, or turn it onHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO
    _cr_grant_onlyif TRUE, grant locks when possible and do not send the blockN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _cr_server_log_flushif TRUE, flush redo log before serving a CR bufferHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _cr_trc_buf_sizesize of cr trace bufferN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               8192819281928192
    create_bitmap_area_sizesize of create bitmap buffer for bitmap indexRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular8388608838860883886088388608838860883886088388608838860883886088388608838860883886088388608838860883886088388608838860883886088388608
    create_stored_outlinescreate stored outlines for DML statementsN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _create_table_in_any_clusterallow creation of table in a cluster not owned by the userN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _create_table_in_any_clusterallow creation of table in a cluster not owned by the userN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _ctas_hwm_brokered_loadsEnable HWM brokered CTASN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A       TRUETRUETRUETRUETRUE       
    _cursor_bind_capture_area_sizemaximum size of the cursor bind capture areaN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    400400400400400400400400400400400400400400400
    cursor_bind_capture_destinationAllowed destination for captured bind variablesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegular               memory+diskmemory+diskmemory+diskmemory+disk
    _cursor_bind_capture_intervalinterval (in seconds) between two bind capture for a cursorN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    900900900900900900900900900900900900900900900
    _cursor_cache_frame_bind_memoryframe & bind buffer cachingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _cursor_cache_timenumber of seconds a session cached cursor stay in cache.N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1800900900900900
    _cursor_db_buffers_pinnedadditional number of buffers a cursor can pin at onceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden72672672672619619619614614614614614657575656272727
    _cursor_diagnostic_node_agedout_countNumber of cursor-sharing diagnostic nodes to retain before reuseN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 100 
    _cursor_features_enabledShared cursor features enabled bits.N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        22222222222
    _cursor_obsolete_thresholdNumber of cursors per parent before obsoletion.N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                10010241024
    _cursor_plan_enabledenable collection and display of cursor plansHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _cursor_plan_hash_versionversion of cursor plan hash valueN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    111111111111111
    _cursor_plan_unparse_enabledenables/disables using unparse to build projection/predicatesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _cursor_runtimeheap_memlimitShared cursor runtime heap memory limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               5242880524288052428805242880
    cursor_sharingcursor sharing modeRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACTEXACT
    cursor_space_for_timeuse more memory in order to get faster executionRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _cursor_stats_bucketHash table buckets for cursor stats (2^).N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/A       1515151515151515    
    _cursor_stats_enabledEnable cursor statsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _cursor_stats_heapHeaps/latches for cursor stats.N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/A       44444444    
    _cvw_enable_weak_checkingenable weak view checkingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          TRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _datafile_cowUse copy on write snapshot for the renamed fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _datafile_write_errors_crash_instancedatafile write errors crash instanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSETRUETRUETRUETRUE
    db_16k_cache_sizeSize of cache for 16K buffersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _db_16k_flash_cache_fileflash cache file for 16k block sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _db_16k_flash_cache_sizeflash cache size for _db_16k_flash_cache_fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    db_2k_cache_sizeSize of cache for 2K buffersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _db_2k_flash_cache_fileflash cache file for 2k block sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _db_2k_flash_cache_sizeflash cache size for _db_2k_flash_cache_fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    db_32k_cache_sizeSize of cache for 32K buffersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _db_32k_flash_cache_fileflash cache file for 32k block sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _db_32k_flash_cache_sizeflash cache size for _db_32k_flash_cache_fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    db_4k_cache_sizeSize of cache for 4K buffersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _db_4k_flash_cache_fileflash cache file for 4k block sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _db_4k_flash_cache_sizeflash cache size for _db_4k_flash_cache_fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    db_8k_cache_sizeSize of cache for 8K buffersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _db_8k_flash_cache_fileflash cache file for 8k block sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _db_8k_flash_cache_sizeflash cache size for _db_8k_flash_cache_fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _db_aging_cool_countTouch count set when buffer cooledHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    _db_aging_freeze_crMake CR buffers always be too cold to keep in cacheHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_aging_hot_criteriaTouch count which sends a buffer to head of replacement listHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2222222222222222222
    _db_aging_stay_countTouch count set when buffer moved to head of replacement listHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _db_aging_touch_timeTouch count which sends a buffer to head of replacement listHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3333333333333333333
    _db_always_check_system_tsAlways perform block check and checksum for System tablespaceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_block_adjcheckadjacent cache buffer checks - low blkchk overwrite parameterN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_block_adjchk_leveladjacent cache buffer check levelN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       105914880106528256107687936000000000
    _db_block_align_direct_readAlign Direct ReadsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_block_bad_write_checkenable bad write checksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    db_block_buffersNumber of database blocks cached in memoryRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _db_block_cache_cloneAlways clone data blocks on get (for debugging)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_block_cache_historybuffer header tracing (non-zero only when debugging)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _db_block_cache_history_levelbuffer header tracing levelN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       222222222222
    _db_block_cache_history_lrubuffer header tracing for lru operationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _db_block_cache_num_umapnumber of unmapped buffers (for tracking swap calls on blocks)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _db_block_cache_protectprotect database blocks (true only when debugging)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_block_cache_protect_internalprotect database blocks (for strictly internal use only)N/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden     00000000000000
    _db_block_cache_protect_internalprotect database blocks (for strictly internal use only)N/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A 000               
    _db_block_check_for_debugCheck more and dump block before image for debuggingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_block_check_objtypcheck objd and typ on cache disk readN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    db_block_checkingheader checking and data and index block checkingRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    db_block_checksumstore checksum in db blocks and check during readsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICAL
    _db_block_chunkify_ncmbrchunkify noncontig multi block readsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _db_block_corruption_recovery_thresholdthreshold number of block recovery attemptsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    _db_block_do_full_mbreadsdo full block read even if some blocks are in cacheN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_block_granule_intervalnumber of granules to processHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A10101010101010            
    _db_block_hash_bucketsNumber of database block hash bucketsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden43691436914369143691163841638416384163841638416384163841638416384163841638416384163841638416384
    _db_block_hash_latchesNumber of database block hash latchesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1024102410242048102410241024102410241024102410241024102410241024102410241024
    _db_block_header_guard_levelnumber of extra buffer headers to use as guard pagesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _db_block_hi_priority_batch_sizeFraction of writes for high priority reasonsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _db_block_known_clean_pctInitial Percentage of buffers to maintain known cleanN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    222222222222222
    _db_block_lru_latchesnumber of lru latchesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden888888888888881616161616
    _db_block_max_cr_dbaMaximum Allowed Number of CR buffers per dbaHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden6666666666666666666
    _db_block_max_dirty_targetUpper bound on modified buffers/recovery readsHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A0000               
    _db_block_max_scan_pctPercentage of buffers to inspect when looking for freeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden40404040404040404040404040404040404040
    _db_block_med_priority_batch_sizeFraction of writes for medium priority reasonsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _db_block_numaNumber of NUMA nodesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    _db_block_prefetch_fast_longjumps_enabledBatched IO enable fast longjumpsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _db_block_prefetch_limitPrefetch limit in blocksN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden 000000000000000000
    _db_block_prefetch_overridePrefetch force override in blocksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _db_block_prefetch_private_cache_enabledBatched IO enable private cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _db_block_prefetch_quotaPrefetch quota as a percent of cache sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden10101010101010101010101010101010101010
    _db_block_prefetch_skip_reading_enabledBatched IO enable skip reading buffersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _db_block_prefetch_wasted_threshold_percAllowed wasted percent threshold of prefetched sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 22
    db_block_sizeSize of database block in bytesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular2048204820482048819281928192819281928192819281928192819281928192819281928192
    _db_block_table_scan_buffer_sizeSize of shared table scan read bufferN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       419430441943044194304419430441943044194304419430441943044194304419430441943044194304
    _db_block_temp_redogenerate redo for temp blocksN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_block_trace_protecttrace buffer protect callsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_block_vlm_checkcheck of rvlm mapping leaks (for debugging)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_block_vlm_leak_thresholdThreshold for allowable vlm leaksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          333333334
    _db_blocks_per_hash_latchNumber of blocks per hash latchN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _db_blocks_per_hash_latchNumber of blocks per hash latchN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    db_cache_adviceBuffer cache sizing advisoryRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularONONONONONONONONONONONONONONONONONONON
    _db_cache_advice_batch_sizecache advisory simulation batch sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/A128128128128128128128128128128128        
    _db_cache_advice_batch_sizecache advisory simulation batch sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            128128     
    _db_cache_advice_max_size_factorcache advisory maximum multiple of current size to similateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           2       
    _db_cache_advice_max_size_factorcache advisory maximum multiple of current size to similateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              22222
    _db_cache_advice_sample_factorcache advisory sampling factorHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4444444444444444444
    _db_cache_advice_sanity_checkcache simulation sanity checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _db_cache_block_read_stack_tracedump short call stack for block readsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _db_cache_crx_checkcheck for costly crx examination functionsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_cache_miss_check_lescheck LEs after cache missN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _db_cache_miss_check_lescheck LEs after cache missN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _db_cache_mman_latch_checkcheck for wait latch get under MMAN ops in kcbN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _db_cache_pre_warmBuffer Cache Pre-Warm Enabled : hidden parameterN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_cache_process_cr_pin_maxmaximum number of cr pins a process may haveN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                  2147483647
    db_cache_sizeSize of DEFAULT buffer pool for standard block size buffersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular50331648503316485033164850331648503316485033164850331648503316485033164850331648503316485033164850331648503316485033164850331648503316485033164846137344
    _db_cache_wait_debugtrace new kslwaitsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _db_change_notification_enableenable db change notificationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_check_cell_hints N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    db_create_online_log_dest_1online log/controlfile destination #1RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    db_create_online_log_dest_2online log/controlfile destination #2RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    db_create_online_log_dest_3online log/controlfile destination #3RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    db_create_online_log_dest_4online log/controlfile destination #4RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    db_create_online_log_dest_5online log/controlfile destination #5RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _db_disable_temp_encryptionDisable Temp Encryption for SpillsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    db_domaindirectory part of global database name stored with CREATE DATABASERegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _db_dump_from_disk_and_efcdump contents from disk and efcN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _db_dump_from_disk_noefcdump reading buffer contentsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/A               00  
    _db_fast_obj_checkenable fast object drop sanity checkN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_fast_obj_ckptenable fast object checkpointN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_fast_obj_truncateenable fast object truncateN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_file_direct_io_countSequential I/O buf sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576
    _db_file_exec_read_countmultiblock read count for regular clientsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       12112112012012051513434181818
    _db_file_format_io_buffersBlock formatting I/O buf countN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    444444444444444
    db_file_multiblock_read_countdb block to be read each IORegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular888888812112112012012051513434181818
    db_file_name_convertdatafile name convert patterns and strings for standby/clone dbRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _db_file_noncontig_mblock_read_countnumber of noncontiguous db blocks to be prefetchedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden11111111111111111111111111111111111111
    _db_file_optimizer_read_countmultiblock read count for regular clientsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       888888888888
    db_filesmax allowable # db filesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular200200200200200200200200200200200200200200200200200200200
    db_flash_cache_fileflash cache file for default block sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    _db_flash_cache_force_replenish_limitFlash cache force replenish lower limit in buffersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                888
    _db_flash_cache_keep_limitFlash cache keep buffer upper limit in percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              80801959644968080
    _db_flash_cache_max_latencyFlash cache maximum latency allowed in 10 millisecondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 200400
    _db_flash_cache_max_outstanding_writesFlash cache maximum outstanding writes allowedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 3232
    _db_flash_cache_max_read_retryFlash cache max read retryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 33
    _db_flash_cache_max_slow_ioFlash cache maximum slow io allowedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 33
    db_flash_cache_sizeflash cache size for db_flash_cache_fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              00000
    _db_flash_cache_write_limitFlash cache write buffer upper limit in percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                111
    _db_flashback_iobuf_sizeFlashback IO Buffer SizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1111
    _db_flashback_log_min_sizeMinimum flashback database log size in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0167772161677721616777216
    _db_flashback_log_min_total_spaceMinimum flashback database log total space in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _db_flashback_num_iobufFlashback Number of IO buffersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               16326464
    db_flashback_retention_targetMaximum Flashback Database log retention time in minutes.N/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    144014401440144014401440144014401440144014401440144014401440
    _db_handlesSystem-wide simultaneous buffer operationsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden150150150150150150150200200200200200500500500500160016002000
    _db_handles_cachedBuffer handles cached each processHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden55555555555555558810
    _db_hot_block_trackingtrack hot blocks for hash latch contentionN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_index_block_checkingindex block checking override parameterN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   TRUE               
    _db_index_block_checkingindex block checking override parameterN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_initial_cachesize_create_mbsize of cache created at startupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                256256256
    db_keep_cache_sizeSize of KEEP buffer pool for standard block size buffersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _db_l2_tracingflash cache debug tracingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _db_large_dirty_queueNumber of buffers which force dirty queue to be writtenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden25252525252525252525252525252525252525
    _db_lost_write_checkingEnable scn based lost write detection mechanismN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSE22222
    _db_lost_write_corrupt_blockallow corruption for lost writeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    db_lost_write_protectenable lost write detectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            NONENONENONENONENONENONENONE
    _db_lost_write_tracingEnable _db_lost_write_checking tracingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _db_mttr_adviceMTTR advisoryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenONONONONONONONONONONONONONONONONONONON
    _db_mttr_partitionsnumber of partitions for MTTR advisoryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _db_mttr_sample_factorMTTR simulation sampling factorHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden64646464646464646464646464646464646464
    _db_mttr_sim_targetMTTR simulation targetsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _db_mttr_sim_trace_sizeMTTR simulation trace sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden256256256256256256256256256256256256256256256256256256256
    _db_mttr_trace_to_alertdump trace entries to alert fileHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    db_namedatabase name specified in CREATE DATABASERegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular9204920692079208101031010410105102011020210203102041020511106111071120111202112031120412101
    _db_noarch_disble_optimImage redo logging (NOARCHIVEMODE)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_num_evict_waiteventsnumber of evict wait eventsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            64646464646464
    _db_obj_ckpt_orderedfast object checkpoint ordered by lrbaN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A       FALSEFALSEFALSEFALSEFALSE       
    _db_obj_enable_ksrenable ksr in object checkpoint/reuseN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_percent_hot_defaultPercent of default buffer pool considered hotHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden50505050505050505050505050505050505050
    _db_percent_hot_keepPercent of keep buffer pool considered hotHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _db_percent_hot_recyclePercent of recycle buffer pool considered hotHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _db_percpu_create_cachesizesize of cache created per cpu in deferred cache createN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    222222222222222
    _db_prefetch_histogram_statisticsmaintain prefetch histogram statistics in x$kcbprfhsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    db_recycle_cache_sizeSize of RECYCLE buffer pool for standard block size buffersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _db_required_percent_fairshare_usagepercent of fairshare a processor group should always useN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          101010101010101010
    _db_row_overlap_checkingrow overlap checking override parameter for data/index blocksN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_row_overlap_checkingrow overlap checking override parameter for data/index blocksN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   TRUE               
    db_securefilepermit securefile storage during lob creationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            PERMITTEDPERMITTEDPERMITTEDPERMITTEDPERMITTEDPERMITTEDPREFERRED
    _db_todefer_cache_createbuffer cache deferred createN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    db_ultra_safeSets defaults for other parameters that control protection levelsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            OFFOFFOFFOFFOFFOFFOFF
    db_unique_nameDatabase Unique NameN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    101031010410105102011020210203102041020511106111071120111202112031120412101
    db_unrecoverable_scn_trackingTrack nologging SCN in controlfileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegular               TRUETRUETRUETRUE
    _db_writer_chunk_writesNumber of writes DBWR should wait forHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _db_writer_coalesce_area_sizeSize of memory allocated to dbwriter for coalescing writesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    491520491520491520491520491520491520491520491520491520491520491520491520491520491520491520
    _db_writer_coalesce_write_limitLimit on size of coalesced writeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    131072131072131072131072131072131072131072131072131072131072131072131072131072131072131072
    _db_writer_flush_imuIf FALSE, DBWR will not downgrade IMU txns for AGINGN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _db_writer_histogram_statisticsmaintain dbwr histogram statistics in x$kcbbhsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _db_writer_max_writesMax number of outstanding DB Writer IOsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _db_writer_nomemcopy_coalesceEnable DBWR no-memcopy coalescingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    db_writer_processesnumber of background database writer processes to startRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular1111111111111111111
    _db_writer_scan_depth_pctPercentage of LRU buffers for dbwr to scan when looking for dirtyHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A25252525252525            
    _db_writer_verify_writesEnable lost write detection mechanismN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _dbg_proc_startupdebug process startupHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _dbg_scangeneric scan debugN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    dblink_encrypt_loginenforce password for distributed login always be encryptedRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    _dbms_sql_security_levelSecurity level in DBMS_SQLN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _dbrm_dynamic_thresholdDBRM dynamic threshold settingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              3348989616843752168437523349039616843752
    _dbrm_num_runnable_listResource Manager number of runnable list per NUMA nodeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _dbrm_quantumDBRM quantumN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _dbrm_readylist_chkResource Manager Diagnostic Ready List CheckN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/A              11   
    _dbrm_readylist_chkResource Manager Diagnostic Ready List CheckN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           1       
    _dbrm_runchkResource Manager Diagnostic Running Thread CheckN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _dbrm_runchkResource Manager Diagnostic Running Thread CheckN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _dbrm_short_wait_usResource Manager short wait lengthN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                300300300
    _dbrm_workload_learnResource Manager Scheduling Decision ThresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/A               300   
    _dbwr_async_ioEnable dbwriter asynchronous writesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    dbwr_io_slavesDBWR I/O slavesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _dbwr_scan_intervaldbwriter scan intervalHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden10101010300300300300300300300300300300300300300300300
    _dbwr_tracingEnable dbwriter tracingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _dd_validate_remote_locksGES deadlock detection validate remote locksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    ddl_lock_timeouttimeout to restrict the time that ddls wait for dml lockN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            0000000
    ddl_wait_for_locksDisable NOWAIT DML lock acquisitionsN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/A    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _dead_process_scan_intervalPMON dead process scan interval (in seconds)N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       101010101060606060606060
    _deadlock_diagnostic_levelautomatic deadlock resolution diagnostics levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            2222222
    _deadlock_resolution_incidents_alwayscreate incidents when resolving any deadlock?N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _deadlock_resolution_incidents_enabledcreate incidents during deadlock resolutionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _deadlock_resolution_levelautomatic deadlock resolution levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _deadlock_resolution_min_wait_timeout_secsthe minimum wait timeout required for deadlock resolutionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            60606060606060
    _deadlock_resolution_signal_process_thresh_secsthe amount of time given to process a deadlock resolution signalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            60606060606060
    _dedicated_server_poll_countdedicated server poll countN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       101010101010101010101010
    _dedicated_server_post_waitdedicated server post/waitN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _dedicated_server_post_wait_calldedicated server post/wait callN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _default_encrypt_algdefault encryption algorithmN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _default_non_equality_sel_checksanity check on default selectivity for like/range predicateHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _defer_eor_orl_arch_for_sodefer EOR ORL archival for switchoverN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSETRUE
    _defer_log_boundary_ckptdefer media recovery checkpoint at log boundaryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _defer_log_countNumber of log boundaries media recovery checkpoint lags behindN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            222222100
    _defer_multiple_waitersif TRUE, defer down converts when there were waiters (DFS)HiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ATRUETRUETRUETRUE               
    _defer_rcv_during_sw_to_sbyDefer recovery during switchover to standbyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _deferred_constant_folding_modeDeferred constant folding modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              DEFAULTDEFAULTDEFAULTDEFAULTDEFAULT
    _deferred_log_dest_is_validconsider deferred log dest as valid for log deletion (TRUE/FALSE)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    deferred_segment_creationdefer segment creation to first insertN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              TRUETRUETRUETRUETRUE
    _delay_index_maintaindelays index maintenance until after MV is refreshedN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _delta_push_share_blockersenable delta push if greater than the # of share blockersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _deq_execute_reset_timedeq execute reset timeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              3030303030
    _deq_ht_child_latchesdeq ht child latchesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              88888
    _deq_ht_max_elementsdeq ht max elementsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              100000100000100000100000100000
    _deq_large_txn_sizedeq large txn sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              2500025000250002500025000
    _deq_log_array_sizedeq log array sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1000010000100001000010000
    _deq_max_fetch_countdeq max fetch countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101010
    _deq_maxwait_timeChange wait times between dequeue callsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _deq_maxwait_timeChange wait times between dequeue callsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _desired_readmem_rateThe desired percentage of redo reading from memoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            70909090909090
    dg_broker_startstart Data Guard broker (DMON process)RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _dg_broker_trace_leveldata guard broker trace levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _dg_cf_check_timerData Guard controlfile check timerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               15151515
    _dg_corrupt_redo_logCorrupt redo log validation during archivalsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _diag_adr_auto_purgeEnable/disable ADR MMON Auto PurgingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _diag_adr_enabledParameter to enable/disable Diag ADRN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _diag_adr_test_paramTest parameter for DiagnosabilityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _diag_arb_before_killdump diagnostics before killing unresponsive ARBsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _diag_backward_compatBackward Compatibility for DiagnosabilityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _diag_cc_enabledParameter to enable/disable Diag Call ContextN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _diag_conf_cap_enabledParameter to enable/disable Diag Configuration CaptureN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _diag_crashdump_levelparameter for systemstate dump level, used by DIAG during crashN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               10101010
    _diag_daemonstart DIAG daemonHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _diag_dde_async_age_limitdiag dde async actions: message age limit (in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            300300300300300300300
    _diag_dde_async_cputime_limitdiag dde async actions: action cputime limit (in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            300300300300300300300
    _diag_dde_async_modediag dde async actions: dispatch modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _diag_dde_async_msg_capacitydiag dde async actions: message buffer capacityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1024102410241024102410241024
    _diag_dde_async_msgsdiag dde async actions: number of preallocated message buffersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            50505050505050
    _diag_dde_async_process_ratediag dde async actions: message processing rate - per loopN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    _diag_dde_async_runtime_limitdiag dde async actions: action runtime limit (in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            900900900900900900900
    _diag_dde_async_slavesdiag dde async actions: max number of concurrent slave processesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    _diag_dde_enabledenable DDE handling of critical errorsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _diag_dde_fc_enabledParameter to enable/disable Diag Flood ControlN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _diag_dde_fc_implicit_timeOverride Implicit Error Flood Control time parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _diag_dde_fc_macro_timeOverride Macro Error Flood Control time parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _diag_dde_inc_proc_delayThe minimum delay between two MMON incident sweeps (minutes)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _diag_diagnosticsTurn off diag diagnosticsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _diag_dump_request_debug_levelDIAG dump request debug level (0-2)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1111
    _diag_dump_timeouttimeout parameter for SYNC dumpN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         30303030303030303030
    _diag_enable_startup_eventsenable events in instance startup notifiersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _diag_hm_rc_enabledParameter to enable/disable Diag HM Reactive ChecksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _diag_hm_tc_enabledParameter to enable/disable Diag HM Test(dummy) ChecksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _diag_proc_enabledenable hung process diagnostic APIN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _diag_proc_max_time_mshung process diagnostic API max wait time in millisecondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             300003000030000300003000030000
    _diag_proc_max_time_mshung process diagnostic API max wait time in millisecondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           30000       
    _diag_proc_stack_capture_typehung process diagnostic API stack capture typeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           1       
    _diag_proc_stack_capture_typehung process diagnostic API stack capture typeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             111111
    _diag_verbose_error_on_initAllow verbose error tracing on diag initN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    diagnostic_destdiagnostic base directoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            /opt/oracle/product/rhel4/database/11.2.0.3/opt/oracle/product/rhel4/database/11.2.0.3/opt/oracle/product/rhel4/database/11.2.0.3/opt/oracle/product/rhel4/database/11.2.0.3/opt/oracle/product/rhel4/database/11.2.0.3/opt/oracle/product/rhel4/database/11.2.0.4/opt/oracle/product/rhel6/database/12.1.0.1
    _dimension_skip_nullcontrol dimension skip when null featureN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _direct_io_skip_cur_slot_on_errorSkip current slot on errorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _direct_io_skip_cur_slot_on_errorSkip current slot on errorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _direct_io_slotsnumber of slots for direct path I/ON/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _direct_io_wslotsnumber of write slots for direct path I/ON/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _direct_path_insert_featuresdisable direct path insert featuresN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _direct_read_decision_statistics_drivenenable direct read decision based on optimizer statisticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _disable_12751disable policy timeout error (ORA-12751)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_acid_checkdisable ACID checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/A             FALSE     
    _disable_active_influx_movedisable active influx move during parallel media recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _disable_adaptive_shrunk_aggregationadaptive shrunk aggregationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_appliance_checkDisable appliance-specific codeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _disable_appliance_partneringDisable appliance partnering algorithmsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _disable_autotune_gtxdisable autotune global transaction background processesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_block_checkingdisable block checking at the session levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _disable_cell_optimized_backupsdisable cell optimized backupsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _disable_cpu_checkdisable cpu_count checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _disable_cpu_checkdisable cpu_count checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _disable_cursor_sharingdisable cursor sharingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _disable_datalayer_samplingdisable datalayer samplingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_duplex_linkTurn off connection duplexingN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      TRUEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _disable_fast_aggregationfast aggregationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_fast_validatedisable PL/SQL fast validationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_fastopenDo Not Use FastopenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_fba_qrwdisable flashback archiver query rewriteN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _disable_fba_wprdisable flashback archiver wait for prepared transactionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _disable_file_locksdisable file locks for control, data, redo log filesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_flashback_archiverdisable flashback archiver N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _disable_flashback_wait_callbackDisable flashback wait callbackN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_function_based_indexdisable function-based index matchingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_gvaq_cacheDisable cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _disable_health_checkDisable Health CheckN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_highres_ticksdisable high-res tick counterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_image_checkDisable Oracle executable image checkingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_implicit_row_movementdisable implicit row movementN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _disable_incremental_checkpointsDisable incremental checkpoints for thread recoveryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_incremental_recovery_ckptDisable incremental recovery checkpoint mechanismN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_index_block_prefetchingdisable index block prefetchingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_initial_block_compressiondisable initial block compressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _disable_instance_params_checkdisable instance type check for kspN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_interface_checkingdisable interface checking at startupN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_kcb_flashback_blocknew_optDisable KCB flashback block new optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_kcbhxor_osddisable kcbh(c)xor OSD functionalityHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_kcbl_flashback_blocknew_optDisable KCBL flashback block new optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_kgghshcrc32_osddisable kgghshcrc32chk OSD functionalityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _disable_latch_free_SCN_writes_via_32casdisable latch-free SCN writes using 32-bit compare & swapHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_latch_free_SCN_writes_via_64casdisable latch-free SCN writes using 64-bit compare & swapHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_loggingDisable loggingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_metrics_groupDisable Metrics Group (or all Metrics Groups)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _disable_multiple_block_sizesdisable multiple block size support (for debugging)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_objstat_del_broadcastdisable the object level delete statistics broadcastN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _disable_odmdisable odm featureHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_oradebug_commandsdisable execution of certain categories of oradebug commandsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 none 
    _disable_parallel_conventional_loadDisable parallel conventional loadsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_primary_bitmap_switchdisable primary bitmap switchN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _disable_read_only_open_dict_checkDisable read-only open dictionary checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_rebalance_compactdisable space usage checks for storage reconfigurationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/A             FALSEFALSEFALSEFALSEFALSE 
    _disable_rebalance_space_checkdisable space usage checks for storage reconfigurationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden           FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_recoverable_recoveryDisable the new recoverable recovery mechanismHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE     
    _disable_recovery_read_skipDisable the read optimization during media recoveryN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_sample_io_optimdisable row sampling IO optimizationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_savepoint_resetdisable the fix for bug 1402161HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_sec_ticksdisable low-res (sec) counterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/A            FALSEFALSEFALSE    
    _disable_selftune_checkpointingDisable self-tune checkpointingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_storage_typeDisable storage type checksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUEFALSEFALSE
    _disable_streams_diagnosticsstreams diagnosticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _disable_streams_pool_auto_tuningdisable streams pool auto tuningN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_sun_rsmDisable IPC OSD support for Sun RSMAPIHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _disable_system_statedisable system state dumpHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSE429496729442949672944294967294FALSE42949672944294967294429496729442949672944294967294429496729442949672944294967294429496729442949672944294967294429496729442949672944294967294
    _disable_system_state_wait_samplesDisable system state dump - wait samplesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _disable_system_state_wait_samplesDisable system state dump - wait samplesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _disable_temp_tablespace_alertsdisable tablespace alerts for TEMPORARY tablespacesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _disable_temp_tablespace_alertsdisable tablespace alerts for TEMPORARY tablespacesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _disable_thread_internal_disableDisable thread internal disable featureN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _disable_thread_snapshotThread snapshotN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _disable_txn_alertdisable txn layer alertN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _disable_undo_tablespace_alertsdisable tablespace alerts for UNDO tablespacesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _disable_undo_tablespace_alertsdisable tablespace alerts for UNDO tablespacesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _disable_vktmdisable vktm processN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/A            FALSEFALSEFALSE    
    _disable_wait_stackDisable wait stackN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            FALSE      
    _disable_wait_stateDisable wait stateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden                   
    _discrete_transactions_enabledenable OLTP modeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    disk_asynch_ioUse asynch I/O for random access devicesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _disk_sector_size_overrideif TRUE, OSD sector size could be overriddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _diskmon_pipe_nameDiSKMon skgznp pipe nameN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _dispatcher_rate_scalescale to display rate statistic (100ths of a second)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _dispatcher_rate_ttltime-to-live for rate statistic (100ths of a second)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    dispatchersspecifications of dispatchersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _distinct_view_unnestingenables unnesting of in subquery into distinct viewN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    distributed_lock_timeoutnumber of seconds a distributed transaction waits for a lockRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular60606060606060606060606060606060606060
    _distributed_recovery_connection_hold_timenumber of seconds RECO holds outbound connections openHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden200200200200200200200200200200200200200200200200200200200
    _dlm_send_timeoutDLM send timeout valueHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A300003000030000300003000030000300003000030000300003000030000       
    _dlmtraceTrace string of global enqueue type(s)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _dm_max_shared_pool_pctmax percentage of the shared pool to use for a mining modelN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       111111111111
    _dml_batch_error_limitnumber or error handles allocated for DML in batch modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _dml_batch_error_limitnumber or error handles allocated for DML in batch modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _dml_frequency_trackingControl DML frequency trackingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _dml_frequency_tracking_advanceControl automatic advance and broadcast of DML frequenciesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _dml_frequency_tracking_slot_timeTime length of each slot for DML frequency trackingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               15151515
    _dml_frequency_tracking_slotsNumber of slots to use for DML frequency trackingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               4444
    dml_locksdml locks - one for each table modified in a transactionRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular164164164164164164164212212212212212504504756756141614161416
    _dml_monitoring_enabledenable modification monitoringN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    dnfs_batch_sizeMax number of dNFS asynch I/O requests queued per sessionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegular                 40964096
    _domain_index_batch_sizemaximum number of rows from one call to domain index fetch routineHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2000200020002000200020002000200020002000200020002000200020002000200020002000
    _domain_index_dml_batch_sizemaximum number of rows for one call to domain index dml routinesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden200200200200200200200200200200200200200200200200200200200
    _dra_bmr_number_thresholdMaximum number of BMRs that can be done to a fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1000100010001000100010001000
    _dra_bmr_percent_thresholdMaximum percentage of blocks in a file that can be BMR-edN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _dra_enable_offline_dictionaryEnable the periodic creation of the offline dictionary for DRAN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUEFALSEFALSEFALSEFALSEFALSEFALSE
    _drm_parallel_freezeif TRUE enables parallel drm freezeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _drop_flashback_logical_operations_enqDrop logical operations enqueue immediately during flashback marker generationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _drop_table_granuledrop_table_granuleN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       256256256256256256256256256256256256
    _drop_table_optimization_enabledreduce SGA memory use during drop of a partitioned tableN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    drs_startstart DG Broker monitor (DMON process)RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE     
    _ds_enable_auto_txnDynamic Sampling Service Autonomous Transaction control parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _ds_enable_auto_txnDynamic Sampling Service Autonomous Transaction control parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _ds_iocount_iosizeDynamic Sampling Service defaults: #IOs and IO SizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    655366465536646553664655366465536646553664655366465536646553664655366465536646553664655366465536646553664
    _ds_parse_modelDynamic Sampling Service Parse Model control parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           2       
    _ds_parse_modelDynamic Sampling Service Parse Model control parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              22222
    _dsc_feature_levelcontrols the feature level for deferred segment creationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _dskm_health_check_cntDiSKMon health check counterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                202020
    _dss_cache_flushenable full cache flush for parallel executionHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    dst_upgrade_insert_convEnables/Disables internal conversions during DST upgradeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              TRUETRUETRUETRUETRUE
    _dtree_area_sizesize of Decision Tree Classification work areaN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       131072131072131072131072131072131072131072131072131072131072131072131072
    _dtree_binning_enabledDecision Tree Binning EnabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _dtree_bintest_idDecision Tree Binning Test IDN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _dtree_compressbmp_enabledDecision Tree Using Compressed Bitmaps EnabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _dtree_max_surrogatesmaximum number of surrogatesN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       111111111111
    _dtree_pruning_enabledDecision Tree Pruning EnabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _dummy_instancedummy instance started by RMANN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _dump_10261_levelDump level for event 10261, 1=>minimal dump 2=>top pga dumpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _dump_MTTR_to_traceDump High Availability MTTR infromation to CKPT trace fileHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    _dump_common_subexpressionsdump common subexpressionsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _dump_connect_by_loop_datadump connect by loop error message into trc fileN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _dump_cursor_heap_sizesdump comp/exec heap sizes to tryace fileN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _dump_interval_limittrace dump time interval limit (in seconds)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden120120120120120120120120120120120120120120120120120120120
    _dump_max_limitmax number of dump within dump intervalHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    _dump_qbc_treedump top level query parse tree to traceN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      0000000000000
    _dump_qbc_treedump top level query parse tree to traceN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   0               
    _dump_rcvr_ipcif TRUE enables IPC dump at instance eviction timeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _dump_scn_increment_stackDumps scn increment stack per sessionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _dump_system_state_scopescope of sysstate dump during instance terminationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenlocallocallocallocallocallocallocallocallocallocallocallocallocallocallocallocallocallocallocal
    _dump_trace_scopescope of trace dump during a process crashHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobal
    _dynamic_rls_policiesrls policies are dynamicHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _dynamic_stats_thresholddelay threshold (in seconds) between sending statistics messagesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden30303030303030303030303030303030303030
    _edition_based_redefinitionenable edition based redefinitionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            FALSEFALSE     
    _eighteenth_spare_parametereighteenth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _eighteenth_spare_parametereighteenth spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _eighth_spare_parametereighth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _eighth_spare_parametereighth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _eleventh_spare_parametereleventh spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _eleventh_spare_parametereleventh spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _eliminate_common_subexprenables elimination of common sub-expressionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _emon_max_active_connectionsmaximum open connections to clients per emonN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              256256256256256
    _emon_outbound_connect_timeouttimeout for completing connection set up to clientsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              3000030000300003000030000
    _emon_regular_ntfn_slavesnumber of EMON slaves doing regular database notificationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            4444444
    _emon_send_timeoutsend timeout after which the client is unregisteredN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 1000010000
    _enable_Front_End_View_Optimizationenable front end view optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              11111
    _enable_LGPG_debugEnable LGPG debug modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _enable_NUMA_interleaveEnable NUMA interleave modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _enable_NUMA_optimizationEnable NUMA specific optimizationsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUEFALSETRUETRUEFALSEFALSEFALSEFALSEFALSE
    _enable_NUMA_supportEnable NUMA support and optimizationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _enable_asyncvioenable asynch vectored I/ON/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _enable_automatic_maintenanceif 1, Automated Maintenance Is EnabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _enable_automatic_sqltuneAutomatic SQL Tuning Advisory enabled parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _enable_block_level_transaction_recoveryenable block level recoveryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _enable_check_truncateenable checking of corruption caused by canceled truncateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _enable_check_truncateenable checking of corruption caused by canceled truncateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _enable_cscn_cachingenable commit SCN caching for all transactionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    enable_ddl_loggingenable ddl loggingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _enable_ddl_wait_lockuse this to turn off ddls with wait semanticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _enable_default_affinityenable default implementation of hard affinity osdsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _enable_default_temp_thresholdEnable Default Tablespace Utilization Threshold for UNDO TablespacesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _enable_default_temp_thresholdEnable Default Tablespace Utilization Threshold for UNDO TablespacesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _enable_default_undo_thresholdEnable Default Tablespace Utilization Threshold for TEMPORARY TablespacesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _enable_default_undo_thresholdEnable Default Tablespace Utilization Threshold for TEMPORARY TablespacesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _enable_diag_dump_dirEnables Diag putting dumps in their own dirN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 TRUE 
    _enable_dml_lock_escalationenable dml lock escalation against partitioned tables if TRUEN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _enable_editions_for_usersenable editions for all usersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _enable_exchange_validation_using_checkuse check constraints on the table for validationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _enable_fast_file_zeroenable fast file zero code pathN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 TRUE 
    _enable_fast_ref_after_mv_tbsenable fast refresh after move tablespaceN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _enable_ffwFAL FORWARDINGN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _enable_flash_loggingEnable Exadata Smart Flash LoggingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    enable_goldengate_replicationgoldengate replication enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularN/A                 FALSE 
    _enable_hash_overflowTRUE - enable hash cluster overflow based on SIZEN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _enable_hwm_syncenable HWM synchronizationN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _enable_hwm_syncenable HWM synchronizationN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   FALSE               
    _enable_kgh_policytemporary to disable/enable kgh policyHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE           
    _enable_kqf_purgeEnable KQF fixed runtime table purgeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _enable_list_ioEnable List I/OHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _enable_midtier_affinityenable midtier affinity metrics processingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _enable_minscn_crenable/disable minscn optimization for CRN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _enable_multitable_samplingenable multitable samplingHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    _enable_nativenet_tcpipEnable skgxp driver usage for native netN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _enable_obj_queuesenable object queuesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _enable_online_index_without_s_lockingAllow online index creation algorithm without S DML lockN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _enable_query_rewrite_on_remote_objsmv rewrite on remote table/viewN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _enable_redo_global_postLGWR post globally on writeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _enable_refresh_scheduleenable or disable MV refresh scheduling (revert to 9.2 behavior)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _enable_reliable_latch_waitsEnable reliable latch waitsN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A TRUETRUETRUE               
    _enable_reliable_latch_waitsEnable reliable latch waitsN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden     TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _enable_rename_userenable RENAME-clause using ALTER USER statementN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _enable_rlbenable RLB metrics processingN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _enable_row_shippinguse the row shipping optimization for wide table selectsN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        FALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUE
    _enable_sb_detectionSplit Brain DetectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _enable_schema_synonymsenable DDL operations (e.g. creation) involving schema synonymsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _enable_scn_wait_interfaceuse this to turn off scn wait interface in ktaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _enable_separable_transactionsenable/disable separable transactionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _enable_shared_pool_durationstemporary to disable/enable kgh policyN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _enable_shared_server_vector_ioEnable shared server vector I/ON/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _enable_space_preallocationenable space pre-allocationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            3333333
    _enable_spacebgenable space management background taskN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _enable_tablespace_alertsenable tablespace alertsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _enable_type_dep_selectivityenable type dependent selectivity estimatesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _endprot_chunk_commentchunk comment for selective overrun protectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            chk 10235 dfltchk 10235 dfltchk 10235 dfltchk 10235 dfltchk 10235 dfltchk 10235 dfltchk 10235 dflt
    _endprot_heap_commentheap comment for selective overrun protectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            hp 10235 dflthp 10235 dflthp 10235 dflthp 10235 dflthp 10235 dflthp 10235 dflthp 10235 dflt
    _endprot_subheapsselective overrun protection for subeheapsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _enqueue_2049_debug_levelenqueue timeout ORA-02049 debug diagnostic levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _enqueue_deadlock_scan_secsdeadlock scan intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _enqueue_deadlock_scan_secsdeadlock scan intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _enqueue_deadlock_time_secrequests with timeout <= this will not have deadlock detectionN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         5555555555
    _enqueue_debug_multi_instancedebug enqueue multi instanceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _enqueue_hashenqueue hash table lengthHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden111111111111111111111133133133133133265265379379679679679
    _enqueue_hash_chain_latchesenqueue hash chain latchesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2222222222222222222
    _enqueue_lockslocks for managed enqueuesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden6706706706706906906908308308308308301610161021802180388038803880
    _enqueue_paranoia_mode_enabledenable enqueue layer advanced debugging checksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    enqueue_resourcesresources for enqueuesRegularRegularRegularRegularRegularRegularRegularHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden384384384384384384384432432432432432724724976976163616361636
    eventdebug event control - default null stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _evolve_plan_baseline_report_levelLevel of detail to show in plan verification/evolution reportN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            typicaltypicaltypicaltypicaltypicaltypicaltypical
    _evt_system_event_propagationdisable system event propagationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _expand_aggregatesexpand aggregatesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _explain_rewrite_modeallow additional messages to be generated during explain rewriteHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _extended_pruning_enableddo runtime pruning in iterator if set to TRUEN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _external_scn_logging_threshold_secondsHigh delta SCN threshold in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 8640086400
    _external_scn_rejection_delta_threshold_minutesexternal SCN rejection delta threshold in minutesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _external_scn_rejection_threshold_hoursLag in hours between max allowed SCN and an external SCNN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 2424
    _fair_remote_cvtif TRUE enables fair remote convertN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _fairness_thresholdnumber of times to CR serve before downgrading lockHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4444444444444422222
    fal_clientFAL clientRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    fal_serverFAL server listRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _fast_cursor_reexecuteuse more memory in order to get faster executionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _fast_cursor_reexecuteuse more memory in order to get faster executionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _fast_dual_enabledenable/disable fast dualN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _fast_full_scan_enabledenable/disable index fast full scanHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _fast_start_instance_recovery_targetinstance recovery target time in RAC environmentN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A    00000000       
    fast_start_io_targetUpper bound on recovery readsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    fast_start_mttr_targetMTTR target in secondsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    fast_start_parallel_rollbackmax number of parallel recovery slaves that may be usedRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularLOWLOWLOWLOWLOWLOWLOWLOWLOWLOWLOWLOWLOWLOWLOWLOWLOWLOWLOW
    _fastpin_enableenable reference count based fast pinsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            111192551681196041217202105857931859713
    _fbda_busy_percentageflashback archiver busy percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _fbda_debug_assertflashback archiver debug assert for testingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _fbda_debug_modeflashback archiver debug event for testingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _fbda_global_bscn_lagflashback archiver global barrier scn lagN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _fbda_inline2_percentageflashback archiver full inline percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            0      
    _fbda_inline_percentageflashback archiver inline percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _fbda_rac_inactive_limitflashback archiver rac inactive limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _fg_iorm_slavesForeGround I/O slaves for IORMN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _fg_log_checksumChecksum redo in foreground processN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _fg_sync_sleep_usecsLog file sync via usleepN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _fg_sync_sleep_usecsLog file sync via usleepN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          00       
    _fic_algorithm_setSet Frequent Itemset Counting AlgorithmN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    automaticautomaticautomaticautomaticautomaticautomaticautomaticautomaticautomaticautomaticautomaticautomaticautomaticautomaticautomatic
    _fic_area_sizesize of Frequent Itemset Counting work areaN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    131072131072131072131072131072131072131072131072131072131072131072131072131072131072131072
    _fic_max_lengthFrequent Itemset Counting Maximum Itemset LengthN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    202020202020202020202020202020
    _fic_min_bmsizeFrequent Itemset Counting Minimum BITMAP SizeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       102410241024102410241024102410241024102410241024
    _fic_outofmem_candidatesFrequent Itemset Counting Out Of Memory Candidates GenerationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _fifteenth_spare_parameterfifteenth spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _fifteenth_spare_parameterfifteenth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _fifth_spare_parameterfifth spare parameter - integerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    file_mappingenable file mappingRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _file_size_increase_incrementAmount of file size increase increment, in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              5242880052428800671088646710886467108864
    fileio_network_adaptersNetwork Adapters for File I/ON/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _filemap_dirFILEMAP directoryN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    filesystemio_optionsIO operations on filesystem filesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularnonenonenonenonenonenonenonenonenonenonenonenonenonenonenonenonenonenonenone
    _first_k_rows_dynamic_prorationenable the use of dynamic proration of join cardinalitiesN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _first_spare_parameterfirst spare parameter - integerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    fixed_datefixed SYSDATE valueRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _flashback_11.1_block_new_optuse 11.1 flashback block new optimization schemeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _flashback_allow_noarchivelogAllow enabling flashback on noarchivelog databaseN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _flashback_archiver_partition_sizeflashback archiver table partition sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _flashback_barrier_intervalFlashback barrier interval in secondsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    180018001800180018001800180018001800180018001800180018001800
    _flashback_copy_latchesNumber of flashback copy latchesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    101010101010101010101010101010
    _flashback_database_test_onlyRun Flashback Database in test modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _flashback_delete_chunk_MBAmount of flashback log (in MB) to delete in one attemptN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               128128128128
    _flashback_dynamic_enableenable flashback enable code pathN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _flashback_dynamic_enable_failureSimulate failures during dynamic enableN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _flashback_enable_raFlashback enable read aheadN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _flashback_format_chunk_mbChunk mega-bytes for formatting flashback logs using sync writeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            4444444
    _flashback_format_chunk_mb_dwriteChunk mega-bytes for formatting flashback logs using delayed writeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            16161616161616
    _flashback_fuzzy_barrierUse flashback fuzzy barrierN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _flashback_generation_buffer_sizeflashback generation buffer sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    209715220971522097152838860883886088388608838860883886088388608838860883886088388608838860883886088388608
    _flashback_hint_barrier_percentFlashback hint barrier percentN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    202020202020202020202020202020
    _flashback_log_io_error_behaviorSpecify Flashback log I/O error behaviorN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _flashback_log_min_sizeMinimum flashback log sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100100100100100100100100100100100100100100100
    _flashback_log_rac_balance_factorflashback log rac balance factorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101010
    _flashback_log_sizeFlashback log sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100010001000100010001000100010001000100010001000100010001000
    _flashback_logfile_enqueue_timeoutflashback logfile enqueue timeout for opensN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    600600600600600600600600600600600600600600600
    _flashback_marker_cache_enabledEnable flashback database marker cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          TRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _flashback_marker_cache_sizeSize of flashback database marker cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          328328328328328328328328328
    _flashback_max_log_sizeMaximum flashback log size in bytes (OS limit)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _flashback_max_n_log_per_threadMaximum number of flashback logs per flashback threadN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       204820482048204820482048204820482048204820482048
    _flashback_max_standby_sync_spanMaximum time span between standby recovery sync for flashbackN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            900300300300300300300
    _flashback_n_log_per_threadDesired number of flashback logs per flashback threadN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    128128128128128128128128128128128128128128128
    _flashback_prepare_logPrepare Flashback logs in the backgroundN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _flashback_size_based_on_redoSize new flashback logs based on average redo log sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _flashback_standby_barrier_intervalFlashback standby barrier interval in secondsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    180018001800180018001800180018001800180011111
    _flashback_verbose_infoPrint verbose information about flashback databaseN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _flashback_write_max_loop_limitFlashback writer loop limit before it returnsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _flashback_write_size_qmDesired flashback write size in quarter MBN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A    44444444       
    _flush_plan_in_awr_sqlPlan is being flushed from an AWR flush SQLN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _flush_redo_to_standbyFlush redo to standby test event parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _flush_undo_after_tx_recoveryif TRUE, flush undo buffers after TX recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _force_arch_compressArchive Compress all newly created compressed tablesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _force_datefold_truncforce use of trunc for datefolding rewriteHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _force_hash_join_spillforce hash join to spill to diskN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _force_hsc_compresscompress all newly created tablesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _force_oltp_compressOLTP Compress all newly created compressed tablesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _force_oltp_update_optOLTP Compressed row optimization on updateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _force_rcv_info_pingForce recovery info ping to stdbyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _force_rewrite_enablecontrol new query rewrite featuresN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _force_slave_mapping_intra_part_loadsForce slave mapping for intra partition loadsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _force_temptables_for_gsetsexecutes concatenation of rollups using temp tablesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _force_tmp_segment_loadsForce tmp segment loadsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _fortieth_spare_parameterfortieth spare parameter - booleanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _forwarded_2pc_thresholdauto-tune threshold for two-phase commit rate across RAC instancesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _fourteenth_spare_parameterfourteenth spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _fourteenth_spare_parameterfourteenth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _fourth_spare_parameterfourth spare parameter - integerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _frame_cache_timenumber of seconds a cached frame page stay in cache.N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _full_pwise_join_enabledenable full partition-wise join when TRUEHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _fusion_securityFusion SecurityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSETRUE
    _gby_hash_aggregation_enabledenable group-by and aggregation using hash schemeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gby_onekey_enabledenable use of one comparison of all group by keysHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gc_affinity_limitdynamic affinity limitHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A505050505050505050505050       
    _gc_affinity_lockingif TRUE, enable object affinityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _gc_affinity_locksif TRUE, get affinity locksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _gc_affinity_minimumdynamic affinity minimum activity per minuteN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A    12001200120012001200600060006000       
    _gc_affinity_ratiodynamic object affinity ratioN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            50505050505050
    _gc_affinity_timeif non zero, enable dynamic object affinityHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A00001010101010101010       
    _gc_async_memcpyif TRUE, use async memcpyN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/A        FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE 
    _gc_bypass_readersif TRUE, modifications bypass readersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _gc_check_bscnif TRUE, check for stale blocksN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gc_coalesce_recovery_readsif TRUE, coalesce recovery readsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gc_cpu_timeif TRUE, record the gc cpu timeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _gc_cr_server_read_waitif TRUE, cr server waits for a read to completeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUEFALSETRUETRUETRUE
    _gc_defer_ping_index_onlyif TRUE, restrict deferred ping to index blocks onlyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _gc_defer_timehow long to defer pings for hot buffers in millisecondsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3333333333333333100
    _gc_delta_push_compressionif delta >= K bytes, compress before pushN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              30723072307230723072
    _gc_delta_push_max_levelmax delta level for delta pushN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              100100100100100
    _gc_delta_push_objectsobjects which use delta pushN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _gc_disable_s_lock_brr_ping_checkif TRUE, disable S lock BRR ping check for lost write protectN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _gc_dissolve_undo_affinityif TRUE, dissolve undo affinity after an offlineN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A         FALSEFALSEFALSEFALSEFALSE     
    _gc_down_convert_after_keepif TRUE, down-convert lock after recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _gc_dynamic_affinity_locksif TRUE, get dynamic affinity locksN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A       TRUETRUETRUETRUETRUE       
    _gc_element_percentglobal cache element percentN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    103103103103103103103103110110110110110110110
    _gc_escalate_bidif TRUE, escalates create a bidN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _gc_fg_mergeif TRUE, merge pi buffers in the foregroundN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    gc_files_to_locksmapping between file numbers and global cache locksRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/A                   
    _gc_flush_during_affinityif TRUE, flush during affinityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _gc_fusion_compressioncompress fusion blocks if there is free spaceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              15361024102410241024
    _gc_global_checkpoint_scnif TRUE, enable global checkpoint scnN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _gc_global_cpuglobal cpu checksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _gc_global_lruturn global lru off, make it automatic, or turn it onN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO
    _gc_global_lru_touch_countglobal lru touch countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              55555
    _gc_global_lru_touch_timeglobal lru touch time in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              6060606060
    _gc_initiate_undo_affinityif TRUE, initiate undo affinity after an onlineN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A         TRUETRUETRUETRUETRUE     
    _gc_integrity_checksset the integrity check levelHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUE111111111111
    _gc_keep_recovery_buffersif TRUE, make single instance crash recovery buffers currentN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gc_latchesnumber of latches per LMS processHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4444555888888888888
    _gc_log_flushif TRUE, flush redo log before a current block transferN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _gc_long_query_thresholdthreshold for long running queryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _gc_max_downcvtmaximum downconverts to process at one timeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             99999256256256256256
    _gc_maximum_bidsmaximum number of bids which can be preparedN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _gc_no_fairness_for_clonesif TRUE, no fairness if we serve a cloneN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _gc_object_queue_max_lengthmaximum length for an object queueN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _gc_override_force_crif TRUE, try to override force-cr requestsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _gc_persistent_read_mostlyif TRUE, enable persistent read-mostly lockingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSETRUETRUETRUE
    _gc_policy_minimumdynamic object policy minimum activity per minuteN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1500150015001500150015001500
    _gc_policy_timehow often to make object policy decisions in minutesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _gc_read_mostly_flush_checkif TRUE, optimize flushes for read mostly objectsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _gc_read_mostly_lockingif TRUE, enable read-mostly lockingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _gc_sanity_check_cr_buffersif TRUE, sanity check CR buffersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _gc_serve_high_pi_as_currentif TRUE, use a higher clone scn when serving a piN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/A               FALSETRUETRUE 
    _gc_statisticsif TRUE, kcl statistics are maintainedN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gc_transfer_ratiodynamic object read-mostly transfer ratioN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            2222222
    _gc_tsn_undo_affinityif TRUE, use TSN undo affinityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _gc_tsn_undo_affinityif TRUE, use TSN undo affinityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/A              TRUETRUETRUE  
    _gc_undo_affinityif TRUE, enable undo affinityN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gc_undo_affinity_locksif TRUE, get affinity locks for undoN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A       TRUETRUETRUETRUETRUE       
    _gc_undo_block_disk_readsif TRUE, enable undo block disk readsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _gc_undo_scan_use_tsnif TRUE, enable undo scan tsn optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/A             TRUE     
    _gc_use_crif TRUE, allow CR pins on PI and WRITING buffersN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/A    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE 
    _gc_vector_readif TRUE, vector read current buffersN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gc_voluntary_down_convert_objobject number for voluntary down-convertN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            00     
    _gcr_enable_high_cpu_killif TRUE, GCR may kill foregrounds under high loadN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _gcr_enable_high_cpu_rmif TRUE, GCR may enable a RM plan under high loadN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSETRUE
    _gcr_enable_high_cpu_rtif TRUE, GCR may boost bg priority under high loadN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSETRUE
    _gcr_high_cpu_thresholdminimum amount of CPU process must consume to be kill targetN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               10101010
    _gcr_use_cssif FALSE, GCR wont register with CSS nor use any CSS featureN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _gcs_disable_remote_handlesdisable remote client/shadow handlesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _gcs_disable_skip_close_remasteringif TRUE, disable skip close optimization in remasteringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _gcs_fast_reconfigif TRUE, enable fast reconfiguration for gcs locksHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gcs_latchesnumber of gcs resource hash latches to be allocated per LMS processHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden128128128128000000000000000
    _gcs_pkey_historynumber of pkey remastering historyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           4000       
    _gcs_pkey_historynumber of pkey remastering historyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              40004000400040004000
    _gcs_process_in_recoveryif TRUE, process gcs requests during instance recoveryN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _gcs_res_per_bucketnumber of gcs resource per hash bucketN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1616164444
    _gcs_resourcesnumber of gcs resources to be allocatedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    gcs_server_processesnumber of background gcs server processes to startN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    000000000000000
    _gcs_shadow_locksnumber of pcm shadow locks to be allocatedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _gcs_testingGCS testing parameterN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   0               
    _gcs_testingGCS testing parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         0000000000
    _generalized_pruning_enabledcontrols extensions to partition pruning for general predicatesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _ges_dd_debugif 1 or higher enables GES deadlock detection debug diagnosticsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSETRUE11111111111
    _ges_designated_masterdesignated master for GES and GCS resourcesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSETRUE
    _ges_diagnosticsif TRUE enables GES diagnosticsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _ges_diagnostics_asm_dump_levelsystemstate level on global enqueue diagnostics blocked by ASMN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             111111111111
    _ges_direct_freeif TRUE, free each resource directly to the freelistN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _ges_direct_free_res_typestring of resource types(s) to directly free to the freelistN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 CTCT
    _ges_fgglDLM fg grant lock on/offN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _ges_health_checkif greater than 0 enables GES system health checkN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       111111111000
    _ges_num_blockers_to_killnumber of blockers to be killed for hang resolutionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              11111
    _ges_resource_memory_optenable different level of ges res memory optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 44
    _ges_traceif TRUE enables GES/GCS debug tracesN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A    TRUETRUETRUE            
    global_context_pool_sizeGlobal Application Context Pool Size in BytesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _global_hang_analysis_interval_secsthe interval at which global hang analysis is runN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    global_namesenforce that database links have same name as remote databaseRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    global_txn_processesnumber of background global transaction processes to startN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            1111111
    _globalindex_pnum_filter_enabledenables filter for global index with partition extended syntaxN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _grant_secure_roleDisallow granting of SR to NSRN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _groupby_nopushdown_cut_ratiogroupby nopushdown cut ratioHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3333333333333333333
    _groupby_orderby_combinegroupby/orderby don't combine thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5000500050005000500050005000500050005000500050005000500050005000500050005000
    _gs_anti_semi_join_allowedenable anti/semi join for the GS queryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _hang_analysis_num_call_stackshang analysis num call stacksN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       333333333333
    _hang_base_file_countNumber of trace files for the normal base trace fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 55
    _hang_base_file_space_limitFile space limit for current normal base trace fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 1000000020000000
    _hang_bool_spare1Hang Management 1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _hang_delay_resolution_for_libcacheHang Management delays hang resolution for library cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _hang_detectionHang Management detection intervalN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/A    00000000606030    
    _hang_detection_enabledHang Management detectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _hang_detection_intervalHang Management detection interval in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               32323232
    _hang_hang_analyze_output_hang_chainsif TRUE hang manager outputs hang analysis hang chainsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _hang_hiload_promoted_ignored_hang_countHang Management high load or promoted ignored hang countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               2222
    _hang_hiprior_session_attribute_listHang Management high priority session attribute listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _hang_ignored_hang_countHang Management ignored hang countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1111
    _hang_ignored_hangs_intervalTime in seconds ignored hangs must persist after verificationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              30300300300300
    _hang_int_spare2Hang Management 2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _hang_log_incidentsHang Manager incident loggingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/A              FALSEFALSEFALSE  
    _hang_log_verified_hangs_to_alertHang Management log verified hangs to alert logN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _hang_long_wait_time_thresholdLong session wait time threshold in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _hang_lws_file_countNumber of trace files for long waiting sessionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              55555
    _hang_lws_file_space_limitFile space limit for current long waiting session trace fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 1000000020000000
    _hang_lws_file_time_limitTimespan in seconds for current long waiting session trace fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/A              180036003600  
    _hang_monitor_archiving_related_hang_intervalTime in seconds ignored hangs must persist after verificationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 300300
    _hang_msg_checksum_enabledenable hang graph message checksumN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _hang_output_suspected_hangsHang Management enabled output of suspected hangsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/A              FALSEFALSEFALSE  
    _hang_resolutionHang Management hang resolutionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            FALSEFALSE     
    _hang_resolution_allow_archiving_issue_terminationHang Management hang resolution allow archiving issue terminationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _hang_resolution_confidence_promotionHang Management hang resolution confidence promotionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _hang_resolution_global_hang_confidence_promotionHang Management hang resolution global hang confidence promotionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUEFALSEFALSEFALSE
    _hang_resolution_policyHang Management hang resolution policyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              HIGHHIGHHIGHHIGHHIGH
    _hang_resolution_promote_process_terminationHang Management hang resolution promote process terminationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _hang_resolution_scopeHang Management hang resolution scopeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              OFFPROCESSPROCESSPROCESSPROCESS
    _hang_short_stacks_output_enabledif TRUE hang manager outputs short stacksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 TRUE 
    _hang_signature_list_match_output_frequencyHang Signature List matched output frequencyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               10101010
    _hang_signature_list_output_frequencyHang Signature List output frequencyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/A              25    
    _hang_statistics_collection_intervalHang Management statistics collection interval in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              015151515
    _hang_statistics_collection_ma_alphaHang Management statistics collection moving average alphaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               30303030
    _hang_statistics_collection_react_ma_alphaHang Management statistics collection reactive moving average alphaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/A              30    
    _hang_statistics_collection_react_ma_sum_delta_cntHang Management statistics collection react moving average sum of deltas countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/A              15    
    _hang_statistics_collection_smooth_ma_alphaHang Management statistics collection smoothed moving average alphaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/A              8    
    _hang_statistics_high_io_percentage_thresholdHang Management statistics high IO percentage thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                451515
    _hang_verification_intervalHang Management verification interval in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               46464646
    _hard_protectionif TRUE enable H.A.R.D specific format changesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    hash_area_sizesize of in-memory hash work areaRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular131072131072131072131072131072131072131072131072131072131072131072131072131072131072131072131072131072131072131072
    hash_join_enabledenable/disable hash joinRegularRegularRegularRegularHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _hash_multiblock_io_countnumber of blocks hash join will read/write at onceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _hb_redo_msg_intervalBOC HB redo message interval in msN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               100100100100
    _heur_deadlock_resolution_secsthe heuristic wait time per node for deadlock resolutionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    hi_shared_memory_addressSGA starting address (high order 32-bits on 64-bit platforms)RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _high_priority_process_num_yields_before_sleepthe number of yields performed by high priority processesbefore they sleepN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/A             10001000    
    _high_priority_process_num_yields_before_sleepthe number of yields performed by high priority processesbefore they sleepN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          10001000       
    _high_priority_processesHigh Priority Process Name MaskN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         LMS*LMS*LMS*LMS*|VKTMLMS*|VKTMLMS*|VKTMLMS*|VKTMLMS*|VKTMLMS*|VKTMLMS*|VKTM
    _high_server_thresholdhigh server thresholdsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _highres_drift_allowed_secallowed highres timer drift for VKTMN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1111
    _highthreshold_undoretentionhigh threshold undo_retention in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           4294967294       
    _highthreshold_undoretentionhigh threshold undo_retention in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              42949672944294967294429496729442949672944294967294
    _hj_bit_filter_thresholdhash-join bit filtering threshold (0 always enabled)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    505050505050505050505050505050
    _hm_analysis_oradebug_node_dump_levelthe oradebug node dump level for hang manager hang analysisN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/A            00000  
    _hm_analysis_oradebug_sys_dump_levelthe oradebug system state level for hang manager hang analysisN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _hm_analysis_output_diskif TRUE the hang manager outputs hang analysis results to diskN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/A            FALSEFALSEFALSEFALSEFALSE  
    _hm_enable_user_app_checksHang Management user application checksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/A             FALSE     
    _hm_log_incidentsHang Manager incident loggingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            FALSEFALSE     
    _hm_long_wait_time_thresholdLong session wait time threshold in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/A             0     
    _hm_verification_intervalthe hang manager verification intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/A            606030    
    hs_autoregisterenable automatic server DD updates in HS agent self-registrationRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _hwm_sync_thresholdHWM synchronization threshold in percentageN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   10               
    _hwm_sync_thresholdHWM synchronization threshold in percentageN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      10101010101010101010101010
    _idl_conventional_index_maintenanceenable conventional index maintenance for insert direct loadHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _idle_session_kill_enabledenables or disables resource manager session idle limit checksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _idxrb_rowincrproportionality constant for dop vs. rows in index rebuildN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100000000100000000100000000100000000100000000100000000100000000100000000100000000100000000100000000100000000100000000100000000100000000
    ifileinclude file in init.oraRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _ignore_desc_in_indexignore DESC in indexes, sort those columns ascending anyhowHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ignore_edition_enabled_for_EV_creationignore schema's edition-enabled status during EV creationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _ignore_fg_depsignore fine-grain dependencies during invalidationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _ignored_tbs_listignored tablespace listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _image_redo_gen_delayImage redo generation delay in centi-seconds (direct write mode)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _immediate_commit_propagationif TRUE, propagate commit SCN immediatelyN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _improved_outerjoin_cardimproved outer-join cardinality calculationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _improved_row_length_enabledenable the improvements for computing the average row lengthHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _imr_activeActivate Instance Membership Recovery featureHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _imr_avoid_double_votingAvoid device voting for CSS reconfig during IMRN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _imr_device_typeType of device to be used by IMRN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            controlfilecontrolfilecontrolfilecontrolfilecontrolfilecontrolfilecontrolfile
    _imr_disk_voting_intervalMaximum wait for IMR disk voting (seconds)N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       333333333333
    _imr_diskvote_implementationIMR disk voting implementation methodN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              autoautoautoautoauto
    _imr_evicted_member_killIMR issue evicted member kill after a waitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _imr_evicted_member_kill_waitIMR evicted member kill wait time in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            20202020202020
    _imr_extra_reconfig_waitExtra reconfiguration wait in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               10101010
    _imr_highload_thresholdIMR system highload thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _imr_max_reconfig_delayMaximum Reconfiguration delay (seconds)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3003003003003003003003003003003003003003007575757575
    _imr_splitbrain_res_waitMaximum wait for split-brain resolution (seconds)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden60060060060060060060060060060060060060060000000
    _imr_systemload_checkPerform the system load check during IMRN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _imr_testingIMR internal testing parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _imu_poolsin memory undo poolsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    333333333333333
    _in_memory_tbs_searchFALSE - disable fast path for alter tablespace read onlyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _in_memory_undoMake in memory undo for top level transactionsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _incremental_recovery_ckpt_min_batchminimum number of writes for incremental recovery ckpt every secondN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       303030303003030500500500500500
    _index_join_enabledenable the use of index joinsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _index_partition_large_extentsEnables large extent allocation for partitioned indicesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _index_prefetch_factorindex prefetching factorHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    _index_scan_check_skip_corruptcheck and skip corrupt blocks during index scansN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _index_scan_check_stopkeycheck stopkey during index range scansN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _init_granule_intervalnumber of granules to process for deferred cacheN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       101010101010101010101010
    _init_sql_fileFile containing SQL statements to execute upon database creationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq?/rdbms/admin/sql.bsq
    _init_tempfile_on_openif TRUE re-init tempfile bitmaps on db open whenever possibleN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A    FALSEFALSEFALSE            
    _initial_file_sizeInitial size used for file creation when file size not knownHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A50505050               
    _inject_startup_faultinject fault in the startup codeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _inline_sql_in_plsqlinline SQL in PL/SQLN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _inplace_update_retryinplace update retry for ora1551N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _inquiry_retry_intervalif greater than 0 enables inquiry retry after specified intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          33       
    _inquiry_retry_intervalif greater than 0 enables inquiry retry after specified intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             333333
    _insert_ctas_dependencydetermines if ctas cursors insert a dependency on the base tableN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          FALSEFALSE       
    _insert_enable_hwm_brokeredduring parallel inserts high water marks are brokeredHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _inst_locking_periodperiod an instance can retain a newly acquired level1 bitmapHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    instance_groupslist of instance group namesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    instance_nameinstance name supported by the instanceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular9204920692079208101031010410105102011020210203102041020511106111071120111202112031120412101_RHEL6
    instance_numberinstance numberRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _instance_typetype of instance to be executedHiddenHiddenHiddenHiddenRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMSRDBMS
    instant_restoreinstant repopulation of datafilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularN/A                 FALSE 
    _interconnect_checksumif TRUE, checksum interconnect blocksHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _intrapart_pdml_enabledEnable intra-partition updates/deletesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _intrapart_pdml_randomlocal_enabledEnable intra-partition updates/deletes with random local distHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _io_internal_testI/O internal testing parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _io_osd_paramOSD specific parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 11
    _io_resource_manager_always_onio resource manager always onN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _io_shared_pool_sizeSize of I/O buffer pool from SGAN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       419430441943044194304419430441943044194304419430441943044194304419430441943044194304
    _io_slaves_disabledDo not use I/O slavesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _io_statisticsif TRUE, ksfd I/O statistics are collectedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _iocalibrate_init_iosiocalibrate init I/Os per processN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               2222
    _iocalibrate_max_iosiocalibrate max I/Os per processN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _ioq_fanin_multiplierIOQ miss count before a miss exceptionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            2222222
    _ior_serialize_faultinject fault in the ior serialize codeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _iorm_toutIORM scheduler timeout value in msecN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1000100010001000100010001000
    _ioslave_batch_countPer attempt IOs pickedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    _ioslave_issue_countIOs issued before completion checkHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden500500500500500500500500500500500500500500500500500500500
    _ipc_fail_networkSimulate cluster network failerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _ipc_test_failoverTest transparent cluster network failoverHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _ipc_test_mult_netssimulate multiple cluster networksHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _ipddb_enableEnable IPD/DB data collectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSETRUE
    java_jit_enabledJava VM JIT enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            TRUETRUETRUETRUETRUETRUETRUE
    java_max_sessionspace_sizemax allowed size in bytes of a Java sessionspaceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    java_pool_sizesize in bytes of java poolRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular251658242516582425165824251658242516582425165824251658242516582425165824251658242516582425165824251658242516582425165824251658242516582441943044194304
    java_restrictRestrict Java VM AccessN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularN/A                 none 
    java_soft_sessionspace_limitwarning limit on size in bytes of a Java sessionspaceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _job_queue_intervalWakeup interval in seconds for job queue co-ordinatorHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    job_queue_processesmaximum number of job queue slave processesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular4444000000001000100010001000100010001000
    _k2q_latchesnumber of k2q latchesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kcfis_automem_levelSet auto memory management control for kcfis memory allocationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 11
    _kcfis_block_dump_levelSmart IO block dump levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _kcfis_caching_enabledenable kcfis intra-scan session cachingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _kcfis_cell_passthru_dataonlyAllow dataonly passthru for smart scanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _kcfis_cell_passthru_enabledDo not perform smart IO filtering on the cellN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _kcfis_cell_passthru_fromcpu_enabledEnable automatic passthru mode when cell CPU util is too highN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _kcfis_celloflsrv_passthru_enabledEnable offload server usage for passthru operationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _kcfis_celloflsrv_usage_enabledEnable offload server usage for offload operationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _kcfis_disable_platform_decryptionDon't use platform-specific decryption on the storage cellN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _kcfis_dump_corrupt_blockDump any corrupt blocks found during smart ION/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSETRUETRUETRUE
    _kcfis_fast_response_enabledEnable smart scan optimization for fast response (first rows)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _kcfis_fast_response_initiosizeFast response - The size of the first IO in logical blocksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               2222
    _kcfis_fast_response_iosizemultFast response - (next IO size = current IO size * this parameter)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               4444
    _kcfis_fast_response_thresholdFast response - the number of IOs after which smartIO is usedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1048576104857610485761048576
    _kcfis_fastfileinit_disabledDon't use ffi during file creationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _kcfis_io_prefetch_sizeSmart IO prefetch size for a cellN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               8888
    _kcfis_ioreqs_throttle_enabledEnable Smart IO requests throttlingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _kcfis_kept_in_cellfc_enabledEnable usage of cellsrv flash cache for kept objectsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _kcfis_large_payload_enabledenable large payload to be passed to cellsrvN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _kcfis_max_appliancesMax. appliances in a KCFIS sessionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            40      
    _kcfis_max_cached_sessionsSets the maximum number of kcfis sessions cachedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             101010101010
    _kcfis_max_out_translationsSets the maximum number of outstanding translations in kcfisN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               5000500050005000
    _kcfis_metadata_io_write_enabledenables writes that combine metadata and IO requestsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/A             TRUETRUE    
    _kcfis_nonkept_in_cellfc_enabledEnable use of cellsrv flash cache for non-kept objectsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _kcfis_oss_io_sizeKCFIS OSS I/O sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kcfis_rdbms_blockio_enabledUse block IO instead of smart IO in the smart IO module on RDBMSN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _kcfis_read_buffer_limitKCFIS Read Buffer (per session) memory limit in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kcfis_reuse_any_cached_enabledenable kcfis reuse of a kcfis caching entry with key mismatchN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/A             TRUETRUE    
    _kcfis_spawn_debuggerDecides whether to spawn the debugger at kcfis initializeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _kcfis_stats_levelsets kcfis stats levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _kcfis_storageidx_diag_modeDebug mode for storage index on the cellN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSE0000
    _kcfis_storageidx_disabledDon't use storage index optimization on the storage cellN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _kcfis_trace_bucket_sizeKCFIS tracing bucket size in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               131072131072131072131072
    _kcfis_trace_levelsets kcfis tracing levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenN/A            000000 
    _kcfis_work_set_appliancesWorking Set of appliances in a KCFIS sessionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenN/A            612222 
    _kcl_commitif TRUE, call kjbcommitHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _kcl_conservative_log_flushif TRUE, conservatively log flush before CR servingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kcl_debugif TRUE, record le historyHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _kcl_index_splitif TRUE, reject pings on blocks in middle of a splitHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _kcl_name_table_latchesnumber of name table latches (DFS)HiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A16161616               
    _kcl_recovery_read_batchrecovery read batch size (DFS)HiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A8888               
    _kcl_undo_groupinggrouping for undo block locksHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A323232323232323232323232       
    _kcl_undo_locksnumber of locks per undo segmentHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A128128128128128128128128128128128128       
    _kcl_use_crif TRUE, use Fusion CR buffers (DFS)HiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ATRUETRUETRUETRUE               
    _kd_symtab_chkenable or disable symbol table integrity block checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _kdbl_enable_post_allocationallocate dbas after populating data buffersHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdi_avoid_block_checkingavoid index block checking on sensitive opcodesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdic_segarr_szsize threshold for segmented arrays for seg_info_kdicctxN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _kdis_reject_levelb+tree level to enable rejection limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              2424242424
    _kdis_reject_levelb+tree level to enable rejection limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           24       
    _kdis_reject_limit#block rejections in space reclamation before segment extensionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           5       
    _kdis_reject_limit#block rejections in space reclamation before segment extensionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              55555
    _kdis_reject_opsenable rejection heuristic for branch splitsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _kdis_reject_opsenable rejection heuristic for branch splitsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _kdli_STOP_bszundocumented parameter for internal use onlyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_STOP_dbaundocumented parameter for internal use onlyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_STOP_fszundocumented parameter for internal use onlyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_STOP_nioundocumented parameter for internal use onlyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_STOP_tsnundocumented parameter for internal use onlyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_allow_corruptallow corrupt filesystem_logging data blocks during read/writeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_buffer_injectuse buffer injection for CACHE [NO]LOGGING lobsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _kdli_cache_inodecache inode state across callsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_cache_read_thresholdminimum lob size for cache->nocache read (0 disables heuristic)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_cache_sizemaximum #entries in inode cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            8888888
    _kdli_cache_verifyverify cached inode via deserializationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_cache_write_thresholdminimum lob size for cache->nocache write (0 disables heuristic)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_cacheable_lengthminimum lob length for inode cacheabilityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_checkpoint_flushdo not invalidate cache buffers after writeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_dbcoverride db_block_checking setting for securefilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              nonenonenonenonenone
    _kdli_delay_flushesdelay flushing cache writes to direct-write lobsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _kdli_flush_cache_readsflush cache-reads data blocks after loadN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUEFALSEFALSEFALSE
    _kdli_flush_injectionsflush injected buffers of CACHE NOLOGGING lobs before commitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _kdli_force_crforce CR when reading data blocks of direct-write lobsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_force_cr_metaforce CR when reading metadata blocks of direct-write lobsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_force_storageforce storage settings for all lobsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            nonenonenonenonenonenonenone
    _kdli_full_readahead_thresholdmaximum lob size for full readaheadN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_inject_assertinject asserts into the inodeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_inject_batchbuffer injection batch size [1, KCBNEWMAX]N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _kdli_inject_crashinject crashes into the inodeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_inline_xfmallow inline transformed lobsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_inode_preferenceinline inode evolution preference (data, headless, lhb)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            datadatadatadatadatadatadata
    _kdli_inplace_overwritemaximum inplace overwrite size (> chunksize)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _kdli_itree_entries#entries in lhb/itree blocks (for testing only)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_memory_protecttrace accesses to inode memory outside kdli API functionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_oneblkallocate chunks as single blocksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _kdli_preallocation_modepreallocation mode for lob growthN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               lengthlengthlengthlength
    _kdli_preallocation_pctpercentage preallocation [0 .. inf) for lob growthN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _kdli_rci_lobmap_entries#entries in RCI lobmap before migration to lhbN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            255255255255255255255
    _kdli_readahead_limitshared/cached IO readahead limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_readahead_strategyshared/cached IO readahead strategyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            contigcontigcontigcontigcontigcontigcontig
    _kdli_recent_scnuse recent (not dependent) scns for block format/allocationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_reshapereshape an inode to inline or headless on length truncationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_safe_callbacksinvoke inode read/write callbacks safelyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_sio_asyncasynchronous shared ION/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_sio_backoffuse exponential backoff when attempting SIOP allocationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_sio_bpsmaximum blocks per IO slotN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_sio_dopdegree-of-parallelism in the SIO keep poolN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            2222222
    _kdli_sio_fbwrite_pctpercentage of buffer used for direct writes in flashback-dbN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               35353535
    _kdli_sio_fgioreap asynchronous IO in the foregroundN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_sio_fileopenshared IO fileopen mode: datasync vs nodatasync vs asyncN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            nodsyncnonenonenonenonenonenone
    _kdli_sio_flushenable shared IO pool operationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_sio_freefree IO buffers when not in active useN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_sio_min_readshared IO pool read thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_sio_min_writeshared IO pool write thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_sio_nbufsmaximum #IO buffers to allocate per sessionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            8888888
    _kdli_sio_niodsmaximum #IO descriptors to allocate per sessionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            8888888
    _kdli_sio_onenable shared IO pool operationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_sio_pgause PGA allocations for direct ION/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_sio_pga_topPGA allocations come from toplevel PGA heapN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_sio_strategyshared IO strategy: block vs. extentN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            autoextentextentextentextentextentextent
    _kdli_sio_write_pctpercentage of buffer used for direct writesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               100100100100
    _kdli_small_cache_limitsize limit of small inode cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            32323232323232
    _kdli_sort_dbassort dbas during chunkificationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_space_cache_limitmaximum size of the space cache in #blocksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            2048204820482048204820482048
    _kdli_squeezecompact lobmap extents with contiguous dbasN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdli_timer_dmpdump inode timers on session terminationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_timer_trctrace inode timers to uts/tracefileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdli_traceinode trace levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdli_vll_directuse skip-navigation and direct-positioning in vll-domainN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _kdlu_max_bucket_sizeUTS kdlu bucket sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            4194304419430441943044194304419430441943044194304
    _kdlu_max_bucket_size_mtsUTS kdlu bucket size for mtsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            131072131072131072131072131072131072131072
    _kdlu_trace_layerUTS kdlu per-layer trace levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdlu_trace_sessionUTS session dumpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenN/A            000000 
    _kdlu_trace_systemUTS system dumpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdlw_enable_ksi_lockingenable ksi locking for lobsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdlw_enable_write_gatheringenable lob write gathering for sql txnsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdlwp_flush_thresholdWGC flush threshold in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            4194304419430441943044194304419430441943044194304
    _kdlxp_cmp_subunit_sizesize of compression sub-unit in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            262144262144262144262144262144262144262144
    _kdlxp_dedup_flush_thresholddeduplication flush threshold in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            8388608838860883886088388608838860883886088388608
    _kdlxp_dedup_hash_algosecure hash algorithm for deduplication - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            SHA1SHA1SHA1SHA1SHA1SHA1SHA1
    _kdlxp_dedup_inl_pctfreededuplication pct size increase by which inlining avoidedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             555555
    _kdlxp_dedup_prefix_thresholddeduplication prefix hash threshold in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1048576104857610485761048576104857610485761048576
    _kdlxp_dedup_wapp_lendeduplication length to allow write-appendN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               8388608000
    _kdlxp_lobcmpadpenable adaptive compression - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _kdlxp_lobcmplevelDefault securefile compressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              22222
    _kdlxp_lobcmprciverDefault securefile compression map versionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              11111
    _kdlxp_lobcompressenable lob compression - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdlxp_lobdeduplicateenable lob deduplication - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdlxp_lobdedupvalidateenable deduplicate validate - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdlxp_lobencryptenable lob encryption - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kdlxp_min_xfm_sizeminimum transformation size in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            32768      
    _kdlxp_mincmpminimum comp ratio in pct - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            20202020202020
    _kdlxp_mincmplenminimum loblen to compress - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               200200200200
    _kdlxp_minxfm_sizeminimum transformation size in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             327683276832768327683276832768
    _kdlxp_spare1deduplication spare 1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kdlxp_uncmplob data uncompressed - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _kdlxp_xfmcacheenable xfm cache - only on SecureFilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdt_bufferingcontrol kdt buffering for conventional insertsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kdtgsp_retriesmax number of retries in kdtgsp if space returns same blockN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           5       
    _kdtgsp_retriesmax number of retries in kdtgsp if space returns same blockN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1024102410241024
    _kdu_array_deptharray update retry recursion depth limitsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             161616161616
    _kdz_hcc_flagsMiscellaneous HCC flagsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _kdz_hcc_track_upd_ridsEnable rowid tracking during updatesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUEFALSE
    _kebm_nstrikeskebm # strikes to auto suspend an actionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            3333333
    _kebm_suspension_timekebm auto suspension time in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            82800828008280082800828008280082800
    _keep_19907_during_recoverykeep until scn within recovery target check in recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _keep_recovery_buffersif TRUE, make recovery buffers current (DFS)HiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    _keep_remote_column_sizeremote column size does not get modifiedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kernel_message_network_driverkernel message network driverN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kes_parse_modelSQL Tune/SPA KES Layer Parse Model control parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               2222
    _kffmap_hash_sizesize of kffmap_hash tableN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    102410241024102410241024102410241024102410241024102410241024
    _kffmop_chunksnumber of chunks of kffmop'sN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 4242
    _kffmop_hash_sizesize of kffmop_hash tableN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    204820482048204820482048204820482048204820482048204820482048
    _kfm_disable_set_fencedisable set fence calls and revert to default (process fence)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kghdsidx_countmax kghdsidx countHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    _kgl_bucket_countLibrary cache hash table bucket count (2^_kgl_bucket_count * 256)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden9999999999999999999
    _kgl_cap_hd_alo_stackscapture stacks for library cache handle allocationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _kgl_cluster_lockLibrary cache support for cluster lockN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _kgl_cluster_lock_read_mostlyLibrary cache support for cluster lock read mostly optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _kgl_cluster_pinLibrary cache support for cluster pinsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _kgl_debugLibrary cache debuggingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _kgl_features_enabledLibrary cache features enabled bitsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            22     
    _kgl_fixed_extentsfixed extent size for library cache memory allocationsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _kgl_hash_collisionLibrary cache name hash collision possibleN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kgl_heap_sizeextent size for library cache heap 0N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       102410241024102410241024102440964096409640964096
    _kgl_hot_object_copiesNumber of copies for the hot objectN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _kgl_keep_cache_pctKGL keep cache minimum thresholdN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A    3030303030303030       
    _kgl_keep_cache_retain_pctKGL keep cache retain thresholdN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A    2020202020202020       
    _kgl_kqr_cap_so_stackscapture stacks for library and row cache state objectsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kgl_large_heap_warning_thresholdmaximum heap size before KGL writes warnings to the alert logN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       20971525242880052428800524288005242880052428800524288005242880052428800524288005242880052428800
    _kgl_latch_countnumber of library cache latchesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _kgl_message_locksRAC message lock countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            64646464646464
    _kgl_min_cached_so_countMinimum cached SO count. If > 1 can help find SO corruptionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _kgl_multi_instance_invalidationwhether KGL to support multi-instance invalidationsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/ATRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE    
    _kgl_multi_instance_lockwhether KGL to support multi-instance locksHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/ATRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE    
    _kgl_multi_instance_pinwhether KGL to support multi-instance pinsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/ATRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE    
    _kgl_mutex_wait_timeKGL mutex wait timeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/A             000   
    _kgl_session_cached_objectsmaximum length of the KGL object cache lruN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A    1010101010101010       
    _kgl_so_stack_depthThe depth of the stack capture for SO get or freeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            1616     
    _kgl_time_to_wait_for_lockstime to wait for locks and pins before timing outN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    151515151515151515151515151515
    _kglsim_maxmem_percentmax percentage of shared pool size to be used for KGL adviceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    _kgsb_threshold_sizethreshold size for base allocatorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            16777216167772161677721616777216167772161677721616777216
    _kgx_latches# of mutex latches if CAS is not supported.N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       5125125125125121024102410241024102410241024
    _kgx_spin_countMutex spin countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/A          255255255255255255   
    _kill_diagnostics_timeouttimeout delay in seconds before killing enqueue blockerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          606060606060606060
    _kill_enqueue_blockerif greater than 0 enables killing enqueue blockerN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        11332222222
    _kill_enqueue_blockerif greater than 0 enables killing enqueue blockerN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A      2            
    _kill_java_threads_on_eocKill Java threads and do sessionspace migration at end of callN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kill_session_dumpProcess dump on kill session immediateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _kjltmaxgtrecord latch requests that takes longer than this many usN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 10001000
    _kjltmaxhtrecord latch reqeust that are held longer than this many usN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 10001000
    _kjltontrack DLM latch usage on/offN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _kkdlgon_max_iterkkdlgon maximum number of iterationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A          20000200002000020000     
    _kkfi_tracetrace expression substitutionHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kks_cached_parse_errorsKKS cached parse errorsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/A                00 
    _kks_free_cursor_stat_pctpercentage of cursor stats buckets to scan on each load, in 1/10th of a percentN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         10101010101010101010
    _kks_use_mutex_pinTurning on this will make KKS use mutex for cursor pins.N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A       FALSETRUETRUETRUETRUETRUETRUE     
    _kokli_cache_sizeSize limit of ADT Table Lookup CacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            3232128128128128128
    _kokln_current_readMake all LOB reads for this session 'current' readsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _kolfuseslfallow kolf to use slffopenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _kql_subheap_tracetracing level for library cache subheap level pinsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _kqr_optimistic_readsoptimistic reading of row cache objectsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _ksb_disable_diagpiddisable the call to ksb_diagpidN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/A         FALSEFALSEFALSEFALSE      
    _ksb_disable_diagpiddisable the call to ksb_diagpidN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A      FALSE            
    _ksb_restart_clean_timeprocess uptime for restartsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          300003000030000300003000030000300003000030000
    _ksb_restart_policy_timesprocess restart policy times in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden            0, 60, 120, 2400, 60, 120, 2400, 60, 120, 2400, 60, 120, 2400, 60, 120, 2400, 60, 120, 2400, 60, 120, 240
    _ksd_test_paramKSD test parmeterN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       999999999999999999999999999999999999
    _ksdx_charset_ratioratio between the system and oradebug character setN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _ksdxdocmd_default_timeout_msdefault timeout for internal oradebug commandsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       300003000030000300003000030000300003000030000300003000030000
    _ksdxdocmd_enabledif TRUE ksdxdocmd* invocations are enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _ksdxw_cini_flgksdxw context initialization flagHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _ksdxw_nbufsksdxw number of buffers in buffered modeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1000100010001000100010001000100010001000100010001000100010001000100010001000
    _ksdxw_num_pgwnumber of watchpoints on a per-process basisHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden10101010101010101010101010101010101010
    _ksdxw_num_sgwnumber of watchpoints to be shared by all processesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden10101010101010101010101010101010101010
    _ksdxw_stack_depthnumber of PCs to collect in the stack when watchpoint is hitHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4444444444444444444
    _kse_die_timeoutamount of time a dying process is spared by PMON (in centi-secs)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    600006000060000600006000060000600006000060000600006000060000600006000060000
    _kse_pc_table_sizekse pc table cache sizeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       256256256256256256256256256256256256
    _kse_signature_entriesnumber of entries in the kse stack signature cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kse_signature_limitnumber of stack frames to cache per kse signatureN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            7777777
    _kse_snap_ring_record_stackshould error snap ring entries show a short stack traceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _kse_snap_ring_sizering buffer to debug internal error 17090N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kse_trace_int_msg_clearenables soft assert of KGECLEAERERROR is cleares an interrupt messageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _ksfd_verify_writeverify asynchronous writes issued through ksfdN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ksi_clientlocks_enabledif TRUE, DLM-clients can provide the lock memoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _ksi_traceKSI trace string of lock type(s)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _ksi_trace_bucketmemory tracing: use ksi-private or rdbms-shared bucketN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            PRIVATEPRIVATEPRIVATEPRIVATEPRIVATEPRIVATEPRIVATE
    _ksi_trace_bucket_sizesize of the KSI trace bucketN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            8192819281928192819281928192
    _ksm_post_sga_init_notif_delay_secsseconds to delay instance startup at sga initialization (post)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _ksm_post_sga_init_notif_delay_secsseconds to delay instance startup at sga initialization (post)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _ksm_pre_sga_init_notif_delay_secsseconds to delay instance startup at sga initialization (pre)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _ksm_pre_sga_init_notif_delay_secsseconds to delay instance startup at sga initialization (pre)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _ksmb_debugksmb debug flagsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _ksmd_protect_modeKSMD protect mode for catching stale accessN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            offoffoffoffoffoffoff
    _ksmg_granule_locking_statusgranule locking statusHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    _ksmg_granule_sizegranule size in bytesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4194304419430441943044194304419430441943044194304419430441943044194304419430441943044194304419430441943044194304419430441943044194304
    _ksmg_lock_check_intervaltimeout action interval in minutesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _ksmg_lock_reacquire_countrepeat count for acquisition of locksN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    555555555555555
    _kspol_tac_timeouttimeouts for TAC registerd by kspolN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    _kspptbl_mem_usageamount of memory used for unused session parameter tablesN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A    113112114072115800            
    _ksr_unit_test_processesnumber of ksr unit test processesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _kss_callstack_typestate object callstack trace typeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _kss_quietif TRUE access violations during kss dumps are not recordedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ksu_diag_kill_timenumber of seconds ksuitm waits before killing diagHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    _ksuitm_addon_trccmdcommand to execute when dead processes don't go awayN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _ksuitm_dont_kill_dumperdelay inst. termination to allow processes to dumpN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ksv_dynamic_flags1ksv dynamic flags 1 - override default behaviorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _ksv_max_spawn_fail_limitbg slave spawn failure limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    _ksv_pool_hang_kill_tobg slave pool terminate timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _ksv_pool_wait_timeoutbg slave pool wait limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            600600600600600600600
    _ksv_static_flags1ksv static flags 1 - override default behaviorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _ksvppktmodeksv internal pkt testN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _ksxp_compat_flagsksxp compat flagsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _ksxp_compat_flagsksxp compat flagsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _ksxp_diagmodeset to OFF to disable automatic slowsend diagnosticsN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden     AUTOAUTOOFFOFFOFFOFFOFFOFFOFFOFFOFFOFFOFFOFF
    _ksxp_disable_clssdisable CLSS interconnectsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _ksxp_disable_dynamic_loadingdisable dynamic loadin of lib skgxpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ksxp_disable_ipc_statsdisable ipc statisticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ksxp_disable_rolling_migrationdisable possibility of starting rolling migrationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _ksxp_dump_timeoutset timeout for kjzddmp requestN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              2020202020
    _ksxp_dynamic_skgxp_paramdynamic skgxp parametersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden                   
    _ksxp_dynamic_skgxp_paramdynamic skgxp parametersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _ksxp_exa_ip_configksxp exa ip configN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 0 
    _ksxp_if_configksxp if config flagsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _ksxp_init_stats_bktsinitial number arrays for ipc statisticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _ksxp_lwipc_enabledenable lwipc for KSXPN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSE0
    _ksxp_max_stats_bktsmax. arrays for ipc statisticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _ksxp_ping_enabledisable dynamic loadin of lib skgxpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _ksxp_ping_polling_timemax. arrays for ipc statisticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _ksxp_proto_verksxp proto verN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _ksxp_reapingtune ksxp layer reaping limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden           2020202020202050
    _ksxp_reporting_processreporting process for KSXPN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       LMD0LMD0LMD0LMD0LMD0LMD0LMD0LMD0LMD0LMD0LMD0LMD0
    _ksxp_send_timeoutset timeout for sends queued with the inter-instance IPCN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       300300300300300300300300300300300300
    _ksxp_skgxp_ant_optionsSKGXP ANT optionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _ksxp_skgxp_compat_library_pathover-ride default location of lib skgxp compatN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _ksxp_skgxp_ctx_flags1IPC debug options flags (RAC)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _ksxp_skgxp_ctx_flags1maskIPC debug options flags mask (RAC)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _ksxp_skgxp_dynamic_protocolIPC protocol override (RAC) (0/-1=*,2=UDP,3=RDS,!0x1000=ipc_X)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             409640964096409640964096
    _ksxp_skgxp_inetslimit SKGXP networksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _ksxp_skgxp_library_pathover-ride default location of lib skgxpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _ksxp_skgxp_rgn_portsregion socket limits (0xFFFFNNXX): F=flags, N=min, X=maxN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _ksxp_skgxp_spare_param1ipc ksxp spare parameter 1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _ksxp_skgxp_spare_param2ipc ksxp spare parameter 2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _ksxp_skgxp_spare_param3ipc ksxp spare parameter 3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _ksxp_skgxp_spare_param4ipc ksxp spare parameter 4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _ksxp_skgxp_spare_param5ipc ksxp spare parameter 5N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _ksxp_skgxpg_last_parameterlast defined skgxpg parameter - ksxpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              2626262727
    _ksxp_stats_mem_lmtlimit ipc statistics memory. this parameter is a percentage valueN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _ksxp_testingKSXP test parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          000000000
    _ksxp_unit_test_byte_transformationenable byte transformation unit testN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ksxp_usemduse skgxp md optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           1       
    _ksxp_wait_flagstune ksxpwaitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _ktb_debug_flagsktb-layer debug flagsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _ktc_debugfor ktc debugN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _ktc_debugfor ktc debugN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/A    000000000      
    _ktc_latchesnumber of ktc latchesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _ktslj_segext_max_mbsegment pre-extension max size in MB (0: unlimited)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _ktslj_segext_retrysegment pre-extension retryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              55555
    _ktslj_segext_warningsegment pre-extension warning threshold in percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _ktslj_segext_warning_mbsegment pre-extension warning threshold in MBN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _ktspsrch_maxscmaximum segments supported by space search cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden           32323210241024102410241024
    _ktspsrch_maxskipspace search cache rejection skip upper limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               5555
    _ktspsrch_scchkcleanout check time of space search cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 6060
    _ktspsrch_scexpexpiration time of space search cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 6060
    _ktst_rss_maxmaximum temp extents to be released across instanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 10001000
    _ktst_rss_minminimum temp extents to be released across instanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 100100
    _ktst_rss_retrymaximum retries of sort segment releaseN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 22
    _kttext_warningtablespace pre-extension warning threshold in percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    _ktu_latchesnumber of KTU latchesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _ku_tracedatapump trace parameterN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    nonenonenonenonenonenonenonenonenonenonenonenonenonenonenone
    _large_pool_min_allocminimum allocation size in bytes for the large allocation poolHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3333333160001600016000655366553616000655366553665536655366553665536
    large_pool_sizesize in bytes of large poolRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _last_allocation_periodperiod over which an instance can retain an active level1 bitmapHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    _latch_class_0latch class 0HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _latch_class_1latch class 1HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _latch_class_2latch class 2HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _latch_class_3latch class 3HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _latch_class_4latch class 4HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _latch_class_5latch class 5HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _latch_class_6latch class 6HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _latch_class_7latch class 7HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _latch_classeslatch classes overrideHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _latch_miss_stat_sidSid of process for which to collect latch statsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _latch_recovery_alignmentalign latch recovery structuresHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/A998998998998998998998998998998998998655346553465534655346553465534 
    ldap_directory_accessRDBMS's LDAP access optionN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    NONENONENONENONENONENONENONENONENONENONENONENONENONENONENONE
    ldap_directory_sysauthOID usage parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            nonononononono
    _ldr_io_sizesize of write IOs used during a load operationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden262144262144262144262144262144262144262144262144262144262144262144262144262144262144262144262144262144262144262144
    _ldr_io_size2size of write IOs used during a load operation of EHCC with HWMBN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                104857610485761048576
    _ldr_pga_limpga limit, beyond which new partition loads are delayedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _left_nested_loops_randomenable random distribution method for left of nestedloopsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _lgwr_async_broadcastsLGWR Asynchronous Broadcasts enabling boolean flagN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/A    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE    
    _lgwr_async_ioLGWR Asynchronous IO enabling boolean flagHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/ATRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _lgwr_delay_writeLGWR write delay for debuggingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _lgwr_io_slavesLGWR I/O slavesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _lgwr_max_ns_wtMaximum wait time for lgwr to allow NetServer to progressHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555111111111111111
    _lgwr_ns_nl_maxVariable to simulate network latency or buffer thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1000100010001000100010001000100010001000100010001000100010001000100010001000
    _lgwr_ns_nl_minVariable to simulate network latency or buffer thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden500500500500500500500500500500500500500500500500500500500
    _lgwr_ns_sim_errVariable to simulate errors lgwrnsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _lgwr_posts_for_pending_bcastsLGWR posts commit waiters for pending broadcastsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _lgwr_ta_sim_errVariable to simulate errors lgwr true asyncN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _library_cache_advicewhether KGL advice should be turned onHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    license_max_sessionsmaximum number of non-system user sessions allowedRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    license_max_usersmaximum number of named users that can be created in the databaseRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    license_sessions_warningwarning level for number of non-system user sessionsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _lightweight_hdrsLightweight headers for redoN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _like_with_bind_as_equalitytreat LIKE predicate with bind as an equality predicateHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _limit_itlslimit the number of ITLs in OLTP Compressed TablesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              2020202020
    _linux_prepage_large_pagesprepage large pages during allocation on LinuxN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    listener_networkslistener registration networksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    _lm_activate_lms_thresholdthreshold value to activate an additional lmsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    _lm_asm_enq_hashingif TRUE makes ASM use enqueue master hashing for fusion locksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _lm_batch_compression_thresholdGES threshold to start compression on batch messagesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _lm_better_ddvictimGES better deadlock victimN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          TRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _lm_broadcast_resEnable broadcast of highest held mode of resource.N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               disable_broadcastdisabledisableenable_broadcast
    _lm_broadcast_resnameTrace string of resource type(s)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               ADADADAD
    _lm_cache_allocated_res_ratioratio of cached over allocated resources N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               50505050
    _lm_cache_lvl0_cleanuphow often to cleanup level 0 cache res (in sec)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _lm_cache_res_cleanuppercentage of cached resources should be cleanupHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden25252525252525252525252525252525252525
    _lm_cache_res_cleanup_triesmax number of batches of cached resources to free per cleanupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                101010
    _lm_cache_res_optionsges resource cache optionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _lm_cache_res_skip_cleanupmultiple of iniital res cache below which cleanup is skippedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               20202020
    _lm_cache_res_typecache resource: string of lock types(s)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TMHWTMHWTMHWTMHWDITMHWDITMHWDITMHWDITMHWDITMHWDITMHWDITMHWDITMHWHVDITMHWHVDITMHWHVDITMHWHVDI
    _lm_checksum_batch_msgGES checksum batch messagesN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      FALSEFALSEFALSEFALSEFALSEFALSE0000000
    _lm_checksum_batch_msgGES checksum batch messagesN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A  FALSEFALSE               
    _lm_compression_schemeGES compression schemeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              zlibzlibzlibzlibzlib
    _lm_contiguous_res_countnumber of contiguous blocks that will hash to the same HV bucketN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       128128128128128128128128128128128128
    _lm_dd_ignore_noddif TRUE nodeadlockwait/nodeadlockblock options are ignoredN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _lm_dd_intervaldd time interval in secondsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden60606060606060606060606010101010101010
    _lm_dd_max_search_timemax dd search time per tokenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          180180180180180180180180180
    _lm_dd_maxdumpmax number of locks to be dumped during dd validation N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           50       
    _lm_dd_maxdumpmax number of locks to be dumped during dd validation N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             505050505050
    _lm_dd_scan_intervaldd scan interval in secondsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       555555555555
    _lm_dd_search_cntnumber of dd search per token getN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          333333333
    _lm_deferred_msg_timeoutdeferred message timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              163163163163163
    _lm_direct_sendsProcesses which will do direct sendsHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/Aallallallall               
    _lm_drm_banned_objslist of objects not allowed to do drmN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _lm_drm_batch_timetime in seconds to wait to batch drm requestsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                101010
    _lm_drm_disabledisable drm in different levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_drm_disabledisable drm in different levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _lm_drm_duration_limitset drm object duration limit type (time/size)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _lm_drm_duration_limit_typeset drm object time limitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 2 
    _lm_drm_filter_history_windowdrm filter history windowN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _lm_drm_filter_history_window_typedrm object time limit type (time/size)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 2 
    _lm_drm_filtersenable drm filtersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 0 
    _lm_drm_hiload_percentagedrm high load threshold percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               200200200200
    _lm_drm_lowload_percentagedrm low load threshold percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               200200200200
    _lm_drm_max_banned_objsmaximum number of objects not allowed to do drmN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 0 
    _lm_drm_max_requestsdynamic remastering maximum affinity requests processed togetherN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100100100100100100100100100100100100100100100
    _lm_drm_min_intervalminimum interval in secs between two consecutive drmsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                300300300
    _lm_drm_object_scanenable/disable object scan to force full table scan alwaysN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _lm_drm_object_scanenable/disable object scan to force full table scan alwaysN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _lm_drm_windowdynamic remastering bucket window sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden32323232000000000000000
    _lm_drm_xlatchdynamic remastering forced exclusive latchesN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _lm_drmoptsenable drm scan/latch optimizationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 16 
    _lm_dump_null_lockdump null lock in state dumpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _lm_dynamic_lmsdynamic lms invocationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _lm_dynamic_loaddynamic load adjustmentHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _lm_dynamic_remasteringif TRUE enables dynamic remasteringHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _lm_enable_aff_benefit_statsenables affinity benefit computations if TRUEN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSETRUE
    _lm_enq_lock_freelistNumber of ges enqueue element freelistHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _lm_enq_rcfgif TRUE enables enqueue reconfigurationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _lm_enqeue_freelistNumber of enqueue freelistHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A3333               
    _lm_enqueue_blocker_dump_timeoutenqueue blocker dump timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             120120120120120120
    _lm_enqueue_blocker_kill_timeoutenqueue blocker kill timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden              00000
    _lm_enqueue_freelistNumber of enqueue freelistN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    333333333333333
    _lm_enqueue_timeoutenqueue suggested min timeout in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               360360360360
    _lm_fdrm_statsgather full drm statisticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 0FALSE
    _lm_file_affinitymapping between file id and master instance numberHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _lm_file_read_mostlymapping between read-mostly file id and master instance numberN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _lm_free_queue_thresholdGES free queue thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _lm_freeze_kill_timetimeout for killing unfrozen processes in rcfg/drm freeze stepN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               30303030
    _lm_global_postsif TRUE deliver global posts to remote nodesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _lm_hb_callstack_collect_timehb diagnostic call stack collection time in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                555
    _lm_hb_disable_check_listlist of process names to be disabled in heartbeat checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                nonenonenone
    _lm_high_load_sysload_percentagehigh watermark system load percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               90909090
    _lm_high_load_thresholdhigh load threshold parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               5555
    _lm_idle_connection_checkGES idle connection checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _lm_idle_connection_check_intervalGES idle connection check interval timeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1070140140140140140
    _lm_idle_connection_instance_check_calloutGES idle connection instance check calloutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSETRUE
    _lm_idle_connection_killGES idle connection killN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSETRUETRUETRUETRUETRUETRUE
    _lm_kill_fg_on_timeoutGES kill fg on IPC timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _lm_lhupd_intervalload and health update intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               5555
    _lm_lmd_waittimedefault wait time for lmd in centisecondsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4444888888888888888
    _lm_lmon_nowait_latchif TRUE makes lmon get nowait latches with timeout loopN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _lm_lmsnumber of background gcs server processes to startHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _lm_lms_priority_dynamicenable lms priority modificationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _lm_lms_rt_thresholdmaximum number of real time lms processes on machineN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_lms_spinmake lms not sleepN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _lm_lms_waittimedefault wait time for lms in centisecondsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden8888888888888883333
    _lm_local_hp_enquse static file affinity for HP enqueue mastershipN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _lm_locksnumber of enqueues configured for cluster databaseHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1200012000120001200012000120001200012000120001200012000120001200012000120001200012000120000012000
    _lm_low_load_percentagelow watermark percentage for load thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               75757575
    _lm_master_weightmaster resource weight for this instanceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    _lm_max_lmsmax. number of background global cache server processesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _lm_min_lmsmin. number of background global cache server processesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A000000000000       
    _lm_msg_batch_sizeGES batch message sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2048204820482048000000000000000
    _lm_msg_cache_thresholdsGES message buffer caching thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_msg_cleanup_intervalGES message buffer cleanup interval timeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3000300030003000300030003000300030003000300030003000300030003000300030003000
    _lm_no_lh_checkskip load and health check at decision pointsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _lm_no_syncskip reconfiguration/drm syncr/synca messagingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _lm_node_join_optcluster database node join optimization in reconfigHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _lm_non_fault_tolerantdisable cluster database fault-tolerance modeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _lm_num_pcmhv_latchesnumber of latches covering the PCM HV buckets in cgsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A000000000000       
    _lm_num_pt_bucketsnumber of buckets in the object affinity hash tableN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       409640964096409640968192819281928192819281928192
    _lm_num_pt_latchesnumber of latches in the object affinity hash tableN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       128128128128128128128128128128128128
    _lm_postevent_buffer_sizepostevent buffer sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          256256256256256256256256256
    _lm_preregister_css_restypeenqueue type that requires pre-registration to cssN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           CF       
    _lm_preregister_css_restypeenqueue type that requires pre-registration to cssN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              CFCFCFCFCF
    _lm_proc_freeze_timeoutreconfiguration: process freeze timeoutHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3003003003003003003003003003003003003003007070707070
    _lm_process_batchingGES implicit process batching for IPC messagesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _lm_procsnumber of client processes configured for cluster databaseHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden127127127127127127127320320320320320320320320320320320320
    _lm_psrcfgenable pseudo reconfigurationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSETRUETRUETRUETRUETRUE
    _lm_rac_spare_dp1rac parameter dp1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_dp1rac parameter dp1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_dp10rac parameter dp10N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_dp10rac parameter dp10N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rac_spare_dp2rac parameter dp2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_dp2rac parameter dp2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_dp3rac parameter dp3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_dp3rac parameter dp3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_dp4rac parameter dp4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_dp4rac parameter dp4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_dp5rac parameter dp5N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_dp5rac parameter dp5N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_dp6rac parameter dp6N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rac_spare_dp6rac parameter dp6N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_dp7rac parameter dp7N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_dp7rac parameter dp7N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rac_spare_dp8rac parameter dp8N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rac_spare_dp8rac parameter dp8N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_dp9rac parameter dp9N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_dp9rac parameter dp9N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rac_spare_p1rac parameter p1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_p1rac parameter p1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_p10rac parameter p10N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_p10rac parameter p10N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rac_spare_p2rac parameter p2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_p2rac parameter p2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_p3rac parameter p3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_p3rac parameter p3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_p4rac parameter p4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_p4rac parameter p4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_p5rac parameter p5N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _lm_rac_spare_p5rac parameter p5N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _lm_rac_spare_p6rac parameter p6N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rac_spare_p6rac parameter p6N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_p7rac parameter p7N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_p7rac parameter p7N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rac_spare_p8rac parameter p8N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rac_spare_p8rac parameter p8N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_p9rac parameter p9N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _lm_rac_spare_p9rac parameter p9N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _lm_rcfg_timeoutdlm reconfiguration timeoutHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden18000018000018000018000018000018000018000018000018000018000018000018000012601260489489489489489
    _lm_rcv_buffer_sizethe size of receive bufferHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A327683276832768327683276832768327683276832768327683276832768       
    _lm_rcvinstdesignated instance to do instance recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _lm_rcvr_hang_allow_timereceiver hang allow time in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          200200200707070707070
    _lm_rcvr_hang_cfio_killto kill receiver hang at control file ION/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _lm_rcvr_hang_check_frequencyreceiver hang check frequency in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          606060202020202020
    _lm_rcvr_hang_check_system_loadexamine system load when check receiver healthN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _lm_rcvr_hang_killto kill receiver hangN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          FALSETRUEFALSETRUETRUETRUETRUETRUETRUE
    _lm_rcvr_hang_systemstate_dump_levelsystemstate dump level upon receiver hangN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _lm_res_hash_bucketnumber of resource hash bucketsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _lm_res_partnumber of resource partition configured for gcsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1289128912891289128912891289128128128128128128128128128128128128
    _lm_res_tm_hash_bucketnumber of extra TM resource hash bucketsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _lm_ressnumber of resources configured for cluster databaseHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden600060006000600060006000600060006000600060006000600060006000600060006000006000
    _lm_send_buffersnumber of cluster database send buffersHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A100001000010000100001000010000100001000010000100001000010000       
    _lm_send_modeGES send modeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    autoautoautoautoautoautoautoautoautoautoautoautoautoautoauto
    _lm_send_queue_batchingGES send queue message batchingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _lm_send_queue_lengthGES send queue maximum lengthHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5000500050005000500050005000500050005000500050005000500050005000500050005000
    _lm_sendproxy_reserveGES percentage of send proxy reserve of send ticketsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    252525252525252525252525252525
    _lm_share_lock_optif TRUE enables share lock optimizationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _lm_single_inst_affinity_lockenable single instance affinity lock optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUEFALSEFALSE
    _lm_spare_threadsnumber of spare threads to be created by the GPnP masterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _lm_spare_undonumber of spare undo tablespaces to be created by GPnP masterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _lm_sq_batch_factorGES send queue minimum batching factorHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2222222222222222222
    _lm_sq_batch_typeGES send queue batching mechanismN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    autoautoautoautoautoautoautoautoautoautoautoautoautoautoauto
    _lm_sq_batch_waittickGES send queue batching waittime in tickN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    333333333333333
    _lm_sync_timeoutSynchronization timeout for DLM reconfiguration stepsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden            420420163163163163163
    _lm_ticket_active_sendbackFlow control ticket active sendback thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _lm_ticketsGES messaging ticketsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1000100010001000100010001000100010001000100010001000100010001000100010001000
    _lm_tx_deltaTX lock localization deltaHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden16161616161616161616161616161616161616
    _lm_use_gcruse GCR module if TRUEN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _lm_use_new_defmsgtmo_actionuse new defered msg queue timeout actionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _lm_use_tx_tsnuse undo tsn affinity master as TX enqueue masterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _lm_validate_pbatchGES process batch validationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _lm_validate_resource_typeif TRUE enables resource name validationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE 
    _lm_watchpoint_maximumGES number of watchpointsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               3333
    _lm_watchpoint_timeoutGES maximum time in seconds to keep watchpointN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               3600360036003600
    _lm_xidsnumber of transaction IDs configured for cluster databaseHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden139139139139139139139352352352352352352352352352352352352
    _lmn_compressionsuppl logging for compression enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSETRUETRUETRUETRUETRUETRUE
    _load_without_compileLoad PL/SQL or Database objects without compilationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenNONENONENONENONENONENONENONENONENONENONENONENONENONENONENONENONENONENONENONE
    _local_arc_assert_on_waitAssert whenever local ORL arch waits for spaceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _local_communication_costing_enabledenable local communication costing when TRUEHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _local_communication_ratioset the ratio between global and local communication (0..100)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden50505050505050505050505050505050505050
    _local_hang_analysis_interval_secsthe interval at which local hang analysis is runN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            3333333
    local_listenerlocal listenerRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular(ADDRESS = (PROTOCOL=TCP)(HOST=9204.vishalgupta.com)(PORT=1521))(ADDRESS = (PROTOCOL=TCP)(HOST=9206.vishalgupta.com)(PORT=1521))(ADDRESS = (PROTOCOL=TCP)(HOST=9207.vishalgupta.com)(PORT=1521))(ADDRESS = (PROTOCOL=TCP)(HOST=9208.vishalgupta.com)(PORT=1521))(ADDRESS = (PROTOCOL=TCP)(HOST=10103.vishalgupta.com)(PORT=1521))(ADDRESS = (PROTOCOL=TCP)(HOST=10104.vishalgupta.com)(PORT=1521))(ADDRESS = (PROTOCOL=TCP)(HOST=10105.vishalgupta.com)(PORT=1521))(ADDRESS = (PROTOCOL=TCP)(HOST=10201.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10202.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10203.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10204.vishalgupta.com)(PORT=1521))(ADDRESS = (PROTOCOL=TCP)(HOST=10205.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=11106.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=11107.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=11201.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=11202.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=11203.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=11204.vishalgupta.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=12101_RHEL6.vishalgupta.com)(PORT=1521))
    lock_name_spacelock name space used for generating lock names for standby/clone databaseRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _lock_ref_constraint_countnumber of nowait attempts to lock referential constraintN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 5050
    lock_sgaLock entire SGA in physical memoryRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _lock_sga_areasLock specified areas of the SGA in physical memoryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _log_archive_avoid_memcpylog archive avoid memcpyN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _log_archive_buffer_sizeSize of each archival buffer in log file blocksHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A204820482048204820482048204820482048204820482048       
    _log_archive_buffersNumber of buffers to allocate for archivingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4444101010101010101010101010101010
    _log_archive_calloutarchival calloutHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _log_archive_compress_enableBypass database rules for enabling archivelog compressionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE     
    log_archive_configlog archive config parameterN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _log_archive_delta_sync_waititerative sleep time in centiseconds seconds when SYNC=PARALLELHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A000000000000       
    log_archive_destarchival destination text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_1archival destination #1 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularLOCATION=/opt/oracle/product/rhel4/database/9.2.0.4/archiveLOCATION=/opt/oracle/product/rhel4/database/9.2.0.6/archiveLOCATION=/opt/oracle/product/rhel4/database/9.2.0.7/archiveLOCATION=/opt/oracle/product/rhel4/database/9.2.0.8/archiveLOCATION=/opt/oracle/product/rhel4/database/10.1.0.3/archiveLOCATION=/opt/oracle/product/rhel4/database/10.1.0.4/archiveLOCATION=/opt/oracle/product/rhel4/database/10.1.0.5/archiveLOCATION=/opt/oracle/product/rhel4/database/10.2.0.1/archiveLOCATION=/opt/oracle/product/rhel4/database/10.2.0.2/archiveLOCATION=/opt/oracle/product/rhel4/database/10.2.0.3/archiveLOCATION=/opt/oracle/product/rhel4/database/10.2.0.4/archiveLOCATION=/opt/oracle/product/rhel4/database/10.2.0.5/archiveLOCATION=/opt/oracle/product/rhel4/database/11.1.0.6/archiveLOCATION=/opt/oracle/product/rhel4/database/11.1.0.7/archiveLOCATION=/opt/oracle/product/rhel4/database/11.2.0.1/archiveLOCATION=/opt/oracle/product/rhel4/database/11.2.0.2/archiveLOCATION=/opt/oracle/product/rhel4/database/11.2.0.3/archiveLOCATION=/opt/oracle/product/rhel4/database/11.2.0.4/archiveLOCATION=/opt/oracle/product/rhel6/database/12.1.0.1/oradata/12101_RHEL6/archive
    log_archive_dest_10archival destination #10 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_11archival destination #11 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_12archival destination #12 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_13archival destination #13 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_14archival destination #14 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_15archival destination #15 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_16archival destination #16 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_17archival destination #17 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_18archival destination #18 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_19archival destination #19 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_2archival destination #2 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_20archival destination #20 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_21archival destination #21 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_22archival destination #22 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_23archival destination #23 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_24archival destination #24 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_25archival destination #25 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_26archival destination #26 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_27archival destination #27 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_28archival destination #28 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_29archival destination #29 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_3archival destination #3 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_30archival destination #30 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_31archival destination #31 text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular                   
    log_archive_dest_4archival destination #4 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_5archival destination #5 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_6archival destination #6 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_7archival destination #7 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_8archival destination #8 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_9archival destination #9 text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_dest_state_1archival destination #1 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_dest_state_10archival destination #10 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_dest_state_11archival destination #11 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_12archival destination #12 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_13archival destination #13 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_14archival destination #14 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_15archival destination #15 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_16archival destination #16 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_17archival destination #17 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_18archival destination #18 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_19archival destination #19 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_2archival destination #2 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_dest_state_20archival destination #20 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_21archival destination #21 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_22archival destination #22 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_23archival destination #23 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_24archival destination #24 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_25archival destination #25 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_26archival destination #26 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_27archival destination #27 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_28archival destination #28 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_29archival destination #29 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_3archival destination #3 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_dest_state_30archival destination #30 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_31archival destination #31 state text stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              enableenableenableenableenable
    log_archive_dest_state_4archival destination #4 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_dest_state_5archival destination #5 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_dest_state_6archival destination #6 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_dest_state_7archival destination #7 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_dest_state_8archival destination #8 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_dest_state_9archival destination #9 state text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenableenable
    log_archive_duplex_destduplex archival destination text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    log_archive_formatarchival destination formatRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular%t_%s.dbf%t_%s.dbf%t_%s.dbf%t_%s.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf%t_%s_%r.dbf
    log_archive_local_firstEstablish EXPEDITE attribute default valueN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    log_archive_max_processesmaximum number of active ARCH processesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular2222222222224444444
    log_archive_min_succeed_destminimum number of archive destinations that must succeedRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular1111111111111111111
    _log_archive_net_timeoutmaximum network wait time in seconds when SYNC=PARALLELHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A000000000000       
    _log_archive_network_redo_sizeLog archive network redo buffer size used by ARCHN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       101010101010101010101010
    _log_archive_prot_auto_demotelog archive protection auto demotionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _log_archive_security_enabledlog archive security enabledN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/A    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE 
    log_archive_startstart archival process on SGA initializationRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _log_archive_strong_authlog archive security strong authN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    log_archive_traceEstablish archivelog operation tracing levelRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _log_archive_trace_pidslog archive trace pids parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _log_blocks_during_backuplog block images when changed during backupHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    log_bufferredo circular buffer sizeRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular524288524288524288524288524288524288524288617574461245446124544611225660999685036032502374449643524956160480870448742404841472
    _log_buffer_coalesceCoalescing log buffers for log writesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _log_buffers_corruptcorrupt redo buffers before writeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _log_buffers_debugdebug redo buffers (slows things down)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    log_checkpoint_interval# redo blocks checkpoint thresholdRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _log_checkpoint_recovery_check# redo blocks to verify after checkpointHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    log_checkpoint_timeoutMaximum time interval between checkpoints in secondsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular1800180018001800180018001800180018001800180018001800180018001800180018001800
    log_checkpoints_to_alertlog checkpoint begin/end to alert fileRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _log_committime_block_cleanoutLog commit-time block cleanoutHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _log_debug_multi_instancedebug redo multi instance codeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _log_deletion_policyarchivelog deletion policy for mandatory/all destinationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    mandatorymandatorymandatorymandatorymandatorymandatorymandatorymandatorymandatorymandatorymandatorymandatorymandatorymandatorymandatory
    _log_event_queuesnumber of the log writer event queuesN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        00000000000
    log_file_name_convertlogfile name convert patterns and strings for standby/clone dbRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _log_file_sync_timeoutLog file sync timeout (centiseconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           10       
    _log_file_sync_timeoutLog file sync timeout (centiseconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101010
    _log_io_sizeautomatically initiate log write if this many redo blocks in bufferHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/A000000000000000000 
    _log_max_optimize_threadsmaximum number of threads to which log scan optimization is appliedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             128128128128128128
    _log_max_optimize_threadsmaximum number of threads to which log scan optimization is appliedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           128       
    log_parallelismNumber of log buffer strandsRegularRegularRegularRegularHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A111111111111       
    _log_parallelism_dynamicEnable dynamic strandsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _log_parallelism_maxMaximum number of log buffer strandsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    222222222222222
    _log_private_mulPrivate strand multiplier for log space preallocationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    555555555555555
    _log_private_parallelismNumber of private log buffer strands for zero-copy redoN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE     
    _log_private_parallelism_mulActive sessions multiplier to deduce number of private strandsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    101010101010101010101010101010
    _log_read_buffer_sizebuffer size for reading log filesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              88888
    _log_read_buffersNumber of log read buffers for media recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            4888888
    _log_simultaneous_copiesnumber of simultaneous copies into redo buffer(# of copy latches)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4444444444444444444
    _log_space_errorsshould we report space errors to alert logHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _log_switch_timeoutMaximum number of seconds redos in the current log could spanHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _log_write_info_sizeSize of log write info arrayN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 40964096
    logmnr_max_persistent_sessionsmaximum number of threads to mineRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/A111111111111       
    _logout_storm_ratenumber of processes that can logout in a secondN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   0               
    _logout_storm_ratenumber of processes that can logout in a secondN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         0000000000
    _logout_storm_retrycntmaximum retry count for logoutsN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         600600600600600600600600600600
    _logout_storm_retrycntmaximum retry count for logoutsN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   600               
    _logout_storm_timeouttimeout in centi-seconds for time to wait between retriesN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   5               
    _logout_storm_timeouttimeout in centi-seconds for time to wait between retriesN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         5555555555
    _long_bcast_ack_warning_thresholdthreshold for long bcast ack warning messages in msN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               500500500500
    _long_log_write_warning_thresholdthreshold for long log write warning messages in msN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               500500500500
    _longops_enabledlongops stats enabledN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _low_server_thresholdlow server thresholdsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _lowres_drift_allowed_secallowed lowres timer drift for VKTMN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               5555
    _ltc_tracetracing level for load table conventionalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _main_dead_process_scan_intervalPMON main dead process scan interval (in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _master_direct_sendsdirect sends for messages from master (DFS)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden31313131313131313131313131313131313131
    _mav_refresh_consistent_readrefresh materialized views using consistent read snapshotHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _mav_refresh_double_count_preventedmaterialized view MAV refreshes avoid double countingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _mav_refresh_optoptimizations during refresh of materialized viewsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _mav_refresh_unionall_tables# tables for union all expansion during materialized view refreshHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3333333333333333333
    _max_aq_persistent_queue_memorymax aq persistent queue memoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101010
    _max_arch_lns_waitMaximum wait by ARCH to allow NetServer to complete archivalN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A       120120120120120120120     
    _max_async_wait_for_catch_upSwitchover wait time for async LNS to catch up in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               20202020
    max_commit_propagation_delayMax age of new snapshot in .01 secondsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/A7007007007007007007000000000     
    _max_cr_rollbacksMaximum number of CR rollbacks per block (LMS)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _max_cr_rollbacksMaximum number of CR rollbacks per block (LMS)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00010001000
    max_dispatchersmax number of dispatchersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular5555               
    max_dump_file_sizeMaximum size (in bytes) of dump fileRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularUNLIMITEDUNLIMITEDUNLIMITEDUNLIMITEDUNLIMITEDUNLIMITEDUNLIMITEDUNLIMITEDUNLIMITEDUNLIMITEDUNLIMITEDUNLIMITEDunlimitedunlimitedunlimitedunlimitedunlimitedunlimitedunlimited
    max_enabled_rolesmax number of roles a user can have enabledRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular30303030150150150150150150150150150150150150150150150
    _max_exponential_sleepmax sleep during exponential backoffHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _max_filestat_triesmaximum number of file stat triesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               10101010
    _max_fsu_segmentsMaximum segments to track for fast space usageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               4096409640964096
    _max_fsu_stale_timeAllowed space usage staleness in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               600600600600
    _max_io_sizeMaximum I/O size in bytes for sequential file accessesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1048576104857610485761048576104857610485761048576
    _max_large_ioIORM:max number of large I/O's to issueN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _max_largepage_alloc_time_secsMaximum number of seconds to spend on largepage allocationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                101010
    _max_lns_shutdown_archival_timeMaximum time spent by LNS to archive last log during shutdownN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       303030303030303030303030
    _max_pending_scn_bcastsmaximum number of pending SCN broadcastsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               8888
    _max_protocol_supportMax occurrence protocols supported in a processN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100001000010000100001000010000100001000010000100001000010000100001000010000
    _max_reasonable_scn_rateMax reasonable SCN rateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               32768327683276832768
    _max_rfs_connectionsmaximum number of connections used for remote archivalN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A       00000       
    max_rollback_segmentsmax. number of rollback segments in SGA cacheRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A30303030               
    _max_rwgs_groupingsmaximum no of groupings on materialized viewsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                819281928192
    _max_servicesmaximum number of database servicesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1181501501024
    max_shared_serversmax number of shared serversRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular20202020               
    _max_shrink_obj_statsnumber of segments for which shrink stats will be maintainedN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _max_sleep_holding_latchmax time to sleep while holding a latchHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4444444444444444444
    _max_small_ioIORM:max number of small I/O's to issueN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _max_spacebg_msgs_percentagemaximum space management interrupt message throttlingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                505050
    _max_spacebg_slavesmaximum space management background slavesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _max_spacebg_tasksmaximum space management background tasksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1000100010001000100010001000
    _max_sql_stmt_lengthMaximum allowed sql statement lengthN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 0 
    _max_sys_next_extentDictionary managed SYSTEM tablespace maximum next extent size in MB (allowed range [16-4095], 0 if unlimited)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _max_temp_overheadmax tempspc overheadN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/A            000    
    _maxrpop_files_instMaxmimum files rpop works on per instanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 8 
    _maxrpop_instancesMaxmimum rpop file instances N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 8 
    _media_recovery_read_batchmedia recovery block read batchN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    1281281281281281281281281281283232323232
    _media_recovery_reap_timemedia recovery reap timeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A       33333       
    _mem_annotation_pr_levprivate memory annotation collection levelN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _mem_annotation_scalememory annotation pre-allocation scalingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    111111111111111
    _mem_annotation_sh_levshared memory annotation collection levelN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _mem_annotation_storememory annotation in-memory storeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _mem_std_extent_sizestandard extent size for fixed-size-extent heapsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       409640964096409640964096409640964096409640964096
    _memory_broker_log_stat_entriesmemory broker num stat entriesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    999555555555555
    _memory_broker_marginal_utility_bcMarginal Utility threshold pct for bcN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        1010101012121212121212
    _memory_broker_marginal_utility_spMarginal Utility threshold pct for spN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        44447777777
    _memory_broker_shrink_heapsmemory broker allow policy to shrink shared poolN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    0001500000000000
    _memory_broker_shrink_java_heapsmemory broker allow policy to shrink java poolN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    900900900900900900900900900900900900900900900
    _memory_broker_shrink_streams_poolmemory broker allow policy to shrink streams poolN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       900900900900900900900900900900900900
    _memory_broker_shrink_timeoutmemory broker policy to timeout shrink shared/java poolN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000
    _memory_broker_stat_intervalmemory broker statistics gathering interval for auto sgaN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    300300300303030303030303030303030
    _memory_checkinuse_timeintvcheck inuse time intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             303030303030
    _memory_imm_mode_without_autosgaAllow immediate mode without sga/memory targetN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _memory_initial_sga_split_percInitial default sga target percentage with memory targetN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             606060606060
    _memory_management_tracingtrace memory management activityN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    memory_max_targetMax size for Memory TargetN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            0000000
    _memory_max_tgt_inc_cntcounts the times checker increments memory targetN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _memory_mgmt_fail_immreqalways fail immediate mode requestN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _memory_mgmt_immreq_timeouttime in seconds to time out immediate mode requestN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             150150150150150150
    _memory_mgmt_immreq_timeouttime in seconds to time out immediate mode requestN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           150       
    _memory_nocancel_defsgareqdo not cancel deferred sga reqs with auto-memoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _memory_sanity_checkpartial granule sanity checkN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    memory_targetTarget size of Oracle SGA and PGA memoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            0000000
    _messagesmessage queue resources - dependent on # processes & # buffersHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden606060606060608080808080200200200200400400400
    _mgd_rcv_handle_orphan_datafilesManaged recovery handle orphan datafile situationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _midtier_affinity_clusterwait_thresholdcluster wait threshold to enter affinityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenN/A            100100100100100100 
    _midtier_affinity_goodness_thresholdgoodness gradient threshold to dissolve affinityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            2000200020002000200020002000
    _midtier_affinity_timeoutdefault timeout for midtier affinity processingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            30000      
    _minfree_plusmax percentage of block space + minfree before we mark block fullN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         0000000000
    _minimal_stats_aggregationprohibit stats aggregation at compile/partition maintenance timeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _minimum_blocks_to_shrinkminimum number freeable blocks for shrink to be presentN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _minimum_db_flashback_retentionMinimum flashback retentionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden           6060606060606060
    _minimum_extents_to_shrinkminimum number freeable extents for shrink to be presentN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    111111111111111
    _minimum_giga_scnMinimum SCN to start with in 2^30 unitsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/A00000000000000000  
    _mirror_redo_buffersSave buffers for debugging redo corruptionsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _mmv_query_rewrite_enabledallow rewrites with multiple MVs and/or base tablesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _module_action_old_lengthUse module and action old length parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _monitor_sql_stmt_lengthMonitor sql statement lengthN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _more_rowcache_latchesmore latches per parent rowcacheN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A   TRUE               
    _mpmt_enabledMPMT mode enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    mts_circuitsmax number of circuitsRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A0000               
    mts_dispatchersspecifications of dispatchersRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    mts_listener_addressaddress(es) of network listenerRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    mts_max_dispatchersmax number of dispatchersRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A5555               
    mts_max_serversmax number of shared serversRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A20202020               
    mts_multiple_listenersAre multiple listeners enabled?RegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    mts_serversnumber of shared servers to start upRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A0000               
    mts_serviceservice supported by dispatchersRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A9204920692079208               
    mts_sessionsmax number of shared server sessionsRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A0000               
    _multi_instance_pmrforce multi instance parallel recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUEFALSE
    _multi_join_key_table_lookupTRUE iff multi-join-key table lookup prefetch is enabledHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _multiple_instance_recoveryuse multiple instances for media recoveryN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _mutex_spin_countMutex spin countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                255255255
    _mutex_wait_schemeMutex wait schemeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                222
    _mutex_wait_timeMutex wait timeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                111
    _mv_add_log_placeholderadd log placeholderN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _mv_cleanup_orphaned_metadatacleanup orphaned materialized view metadataN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _mv_complete_refresh_conventionaluse conventional INSERTs for MV complete refreshN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _mv_deferred_no_log_age_valavoid build deferred MV log age validateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _mv_expression_extend_sizeMV expression extend sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 40964096
    _mv_generalized_oj_refresh_optenable/disable new algorithm for MJV with generalized outer joinsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _mv_generalized_oj_refresh_optenable/disable new algorithm for MJV with generalized outer joinsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _mv_refresh_anawhat percent to analyze after complete/PCT refreshN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _mv_refresh_costingrefresh decision based on cost or on rulesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    rulerulerulerulerulerulerulerulerulerulerulerulerulerulerule
    _mv_refresh_delta_fractiondelta mv as fractional percentage of size of mvHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden10101010101010101010101010101010101010
    _mv_refresh_enhanced_dml_detectionenable enhanced detection of DML types from MV logN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              ON_RCON_RCON_RCON_RCON_RC
    _mv_refresh_eutrefresh materialized views using EUT(partition)-based algorithmHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _mv_refresh_force_parallel_queryforce materialized view refreshes to use parallel queryN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _mv_refresh_insert_no_appendmaterialized view refresh using insert no appendN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _mv_refresh_new_setup_disabledmaterialized view MV refresh new setup disablingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _mv_refresh_no_idx_rebuildavoid index rebuild as part of the MV refreshN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _mv_refresh_pkfk_data_units_optcontrol MV refresh based on the assumption of PK-FK data unitsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              autoautoautoautoauto
    _mv_refresh_pkfk_relationship_optcontrol MV refresh based on the use of PK-FK relationshipsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _mv_refresh_rebuild_percentageminimum percentage change required in MV to force an indexrebuildN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    101010101010101010101010101010
    _mv_refresh_selectionscreate materialized views with selections and fast refreshHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _mv_refresh_update_analysismaterialized view refresh using update analysisN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _mv_refresh_use_hash_sjuse hash_sj hint in queriesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _mv_refresh_use_no_mergeuse no_merge hint in queriesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _mv_refresh_use_no_mergeuse no_merge hint in queriesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _mv_refresh_use_statspass cardinality hints to refresh queriesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _mv_refsched_timeincrproportionality constant for dop vs. time in MV refreshN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    300000300000300000300000300000300000300000300000300000300000300000300000300000300000300000
    _mv_rolling_invcreate/alter mv uses rolling cursor invalidation instead of immediate N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _mwin_scheduleEnable/disable Maintenance Window SchedulesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _nchar_imp_cnvNLS allow Implicit Conversion between CHAR and NCHARHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _nchar_imp_convshould implicit conversion bewteen clob and nclob be allowedN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _ncmb_readahead_enabledenable multi-block readahead for an index scanHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _ncmb_readahead_tracingturn on multi-block readahead tracingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _ncomp_shared_objects_dirnative compilation shared objects dirN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden                   
    _nested_loop_fudgenested loop fudgeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    _nested_mav_fast_oncommit_enablednested MAV refresh fast on commit allowedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE    
    _nested_mv_fast_oncommit_enablednested MV refresh fast on commit allowedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _net_timeout_latencyNET_TIMEOUT latencyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _new_initial_join_ordersenable initial join orders based on new ordering heuristicsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _new_sort_cost_estimateenables the use of new cost estimate for sortHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _newsort_enabledcontrols whether new sorts can be used as system sortN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _newsort_ordered_pctcontrols when new sort avoids sorting ordered inputN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       636363636363636363636363
    _newsort_typespecifies options for the new sort algorithmN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _nineteenth_spare_parameternineteenth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _nineteenth_spare_parameternineteenth spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _ninth_spare_parameterninth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _ninth_spare_parameterninth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _nlj_batching_ae_flagFAE flag type set after restoring to IO batching bufferN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               2222
    _nlj_batching_enabledenable batching of the RHS IO in NLJN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _nlj_batching_misses_enabledenable exceptions for buffer cache missesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    nls_calendarNLS calendar system nameRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               GREGORIANGREGORIAN GREGORIAN
    nls_compNLS comparisonRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular            BINARYBINARYBINARYBINARYBINARYBINARYBINARY
    nls_currencyNLS local currency symbolRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               Â£Â£ Â£
    nls_date_formatNLS Oracle date formatRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               DD-MON-RR HH24:MI:SSDD-MON-RR HH24:MI:SSDD-MON-RR HH24:MI:SSDD-MON-RR HH24:MI:SS
    nls_date_languageNLS date language nameRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               ENGLISHENGLISHENGLISHENGLISH
    nls_dual_currencyDual currency symbolRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               Â¿Â¿ Â¿
    nls_iso_currencyNLS ISO currency territory nameRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               UNITED KINGDOMUNITED KINGDOM UNITED KINGDOM
    nls_languageNLS language nameRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANAMERICANENGLISHENGLISHENGLISHENGLISH
    nls_length_semanticscreate columns using byte or char semantics by defaultRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTEBYTE
    nls_nchar_conv_excpNLS raise an exception instead of allowing implicit conversionRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    nls_numeric_charactersNLS numeric charactersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               .,., .,
    _nls_parameter_sync_enabledenables or disables updates to v$parameter whenever an alter session statement modifies various nls parametersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    nls_sortNLS linguistic definition nameRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               BINARYBINARY BINARY
    nls_territoryNLS territory nameRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAAMERICAUNITED KINGDOMUNITED KINGDOMUNITED KINGDOMUNITED KINGDOM
    nls_time_formattime formatRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               HH24.MI.SSXFFHH24.MI.SSXFF HH24.MI.SSXFF
    nls_time_tz_formattime with timezone formatRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               HH24.MI.SSXFF TZRHH24.MI.SSXFF TZR HH24.MI.SSXFF TZR
    nls_timestamp_formattime stamp formatRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               DD-MON-RR HH24.MI.SSXFFDD-MON-RR HH24.MI.SSXFF DD-MON-RR HH24.MI.SSXFF
    nls_timestamp_tz_formattimestamp with timezone formatRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular               DD-MON-RR HH24.MI.SSXFF TZRDD-MON-RR HH24.MI.SSXFF TZR DD-MON-RR HH24.MI.SSXFF TZR
    _no_objectsno object features are usedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _no_or_expansionOR expansion during optimization disabledHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _no_recovery_through_resetlogsno recovery through this resetlogs operationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _no_stale_joinback_rewriteNo joinbacks if mv is staleN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _noseg_for_unusable_index_enabledno segments for unusable indexes if set to TRUEN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _notify_crsnotify cluster ready services of startup and shutdownN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ns_max_flush_wtFlush wait time for NetServer to flush oustanding writesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden30111111111111111111
    _ns_max_send_delayData Loss Time Bound for NetServerN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       151515151515151515151515
    _num_longop_child_latchesnumber of child latches for long op arrayHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2222222222222222222
    _numa_buffer_cache_statsConfigure NUMA buffer cache statsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _numa_shift_enabledEnable NUMA shiftN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _numa_shift_valueuser defined value for numa nodes shiftN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _numa_trace_levelnuma trace eventN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _numa_trace_levelnuma trace eventN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _number_cached_attributesmaximum number of cached attributes per instanceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden10101010101010101010101010101010101010
    _number_cached_group_membershipsmaximum number of cached group membershipsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               32323232
    _obj_ckpt_tracingEnable object checkpoint tracingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    object_cache_max_size_percentpercentage of maximum size over optimal of the user session's object cacheRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular10101010101010101010101010101010101010
    object_cache_optimal_sizeoptimal size of the user session's object cache in bytesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular102400102400102400102400102400102400102400102400102400102400102400102400102400102400102400102400102400102400102400
    _object_number_cache_sizeObject number cache sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              55555
    _object_reuse_bastif 1 or higher, handle object reuseN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          222222222
    _object_statisticsenable the object level statistics collectionHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _object_stats_max_entriesMaximum number of entries to be tracked per statN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            3072307230723072307230723072
    _offline_rollback_segmentsoffline undo segment listHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _ogms_homeGMS home directoryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _olap_adv_comp_stats_cc_precompdo additional predicate stats analysis for AW rowsourceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              2020202020
    _olap_adv_comp_stats_max_rowsdo additional predicate stats analysis for AW rowsourceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              100000100000100000100000100000
    _olap_aggregate_buffer_sizeOLAP Aggregate max buffer sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576
    _olap_aggregate_child_fragment_sizeOLAP Aggregate child fragment sizeHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A32323232               
    _olap_aggregate_child_max_sizeOLAP Aggregate child list max sizeHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A32768327683276832768               
    _olap_aggregate_flagsOLAP Aggregate debug flagsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _olap_aggregate_function_cache_enabledOLAP Aggregate function cache enablerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _olap_aggregate_function_merge_thresholdOLAP Aggregate function merge thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/A32768327683276832768327683276832768529529529529529529529529    
    _olap_aggregate_max_thread_tuplesOLAP Aggregate max thread tuples creationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5000500050005000500050005000500050005000500050005000500050005000500050005000
    _olap_aggregate_min_buffer_sizeOLAP Aggregate min buffer sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1024102410241024102410241024102410241024102410241024102410241024102410241024
    _olap_aggregate_min_thread_statusOLAP Aggregate minimum cardinality of dimensions for threadHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden64646464646464646464646464646464646464
    _olap_aggregate_multipath_hierOLAP Aggregate Multi-path Hierarhies enabledHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _olap_aggregate_statlen_threshOLAP Aggregate status array usage thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1024102410241024102410241024102410241024102410241024102410241024102410241024
    _olap_aggregate_store_probabilityOLAP Aggregate function storeback probabilityHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/A100100100100100100100100100100100100100100100    
    _olap_aggregate_work_per_threadOLAP Aggregate max work parentsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1024102410241024102410241024102410241024102410241024102410241024102410241024
    _olap_aggregate_worklist_maxOLAP Aggregate max worklists generated at onceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5000500050005000500050005000500050005000500050005000500050005000500050005000
    _olap_analyze_maxOLAP DML ANALYZE command max cells to analyzeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10000100001000010000100001000010000
    _olap_continuous_trace_fileOLAP logging definitionHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEfalsefalsefalsefalsefalse
    _olap_dbgoutfile_echo_to_eventlogOLAP DbgOutfile copy output to event log (tracefile)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _olap_dimension_corehash_classOLAP Dimension In-Core Hash Table ClassN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A    1111111111     
    _olap_dimension_corehash_forceOLAP Dimension In-Core Hash Table ForceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _olap_dimension_corehash_largeOLAP Dimension In-Core Hash Table Large ThresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            50000500005000050000500005000050000
    _olap_dimension_corehash_maxOLAP Dimension In-Core Hash Table Maximum SizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A    1000010000100001000010000100001000010000       
    _olap_dimension_corehash_pressureOLAP Dimension In-Core Hash Table Pressure ThresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            90909090909090
    _olap_dimension_corehash_sizeOLAP Dimension In-Core Hash Table Maximum Memory UseN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            30303030303030
    _olap_dimension_corehash_smallOLAP Dimension In-Core Hash Table Small ThresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/A            100010001000    
    _olap_dimsave_restore_cache_valuesOLAP Dimsave restores cached dimension valuesHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ATRUETRUETRUETRUETRUETRUETRUE            
    _olap_eif_export_lob_sizeOLAP EIF Export BLOB sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2147483647214748364721474836472147483647214748364721474836472147483647214748364721474836472147483647214748364721474836472147483647214748364721474836472147483647214748364721474836472147483647
    _olap_lmgen_dim_sizeLimitmap generator dimension column sizeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       100100100100100100100100100100100100
    _olap_lmgen_meas_sizeLimitmap generator measure column sizeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       100010001000100010001000100010001000100010001000
    _olap_object_hash_classOLAP Object Hash Table ClassHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2222222222222233333
    _olap_page_pool_expand_rateOLAP Page Pool Expand RateN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    202020202020202020202020202020
    _olap_page_pool_hiOLAP Page Pool High WatermarkN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    505050505050505050505050505050
    _olap_page_pool_hit_targetOLAP Page Pool Hit TargetN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100100100100100100100100100100100100100100100
    _olap_page_pool_lowOLAP Page Pool Low WatermarkN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    262144262144262144262144262144262144262144262144262144262144262144262144262144262144262144
    _olap_page_pool_pressureOLAP Page Pool Pressure ThresholdN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    909090909090909090909090909090
    _olap_page_pool_shrink_rateOLAP Page Pool Shrink RateN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    505050505050505050505050505050
    olap_page_pool_sizesize of the olap page pool in bytesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular33554432335544323355443233554432000000000000000
    _olap_parallel_update_server_numOLAP parallel update server countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _olap_parallel_update_small_groupOLAP parallel update pagespace by groupN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/A       400400400400400400400400    
    _olap_parallel_update_small_thresholdOLAP parallel update threshold for number of small pagespacesN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       100010001000100010001000100010001000100010001000
    _olap_parallel_update_thresholdOLAP parallel update threshold in pagesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1000100010001000100010001000100010001000100010001000100010001000100010001000
    _olap_poutlog_echo_to_eventlogOLAP POutLog copy output to event log (tracefile)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE     
    _olap_sesscache_enabledOLAP Session Cache knobN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _olap_sort_buffer_pctOLAP Sort Buffer Size PercentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             101010101010
    _olap_sort_buffer_sizeOLAP Sort Buffer SizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden65536655366553665536262144262144262144262144262144262144262144262144262144262144262144262144262144262144262144
    _olap_statbool_corebitsOLAP Status Boolean max incore bitsN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden 200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000200000002000000020000000
    _olap_statbool_thresholdOLAP Status Boolean CBM thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden8100810081008100810081008100810081008100810081008100810081008100810081008100
    _olap_table_function_statisticsSpecify TRUE to output OLAP table function timed statistics traceN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _olap_wrap_errorsWrap error messages to OLAP outfileN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _olapi_history_retentionenable olapi history retentionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _olapi_iface_object_historyenable olapi interface object history collectionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100010001000100010001000100010001000100010001000100010001000
    _olapi_iface_object_history_retentionenable olapi interface object history retentionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _olapi_iface_operation_history_retentionenable olapi interface operation history retentionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _olapi_interface_operation_historyenable olapi interface operation history collectionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100010001000100010001000100010001000100010001000100010001000
    _olapi_memory_operation_historyenable olapi memory alloc/free history collectionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100010001000100010001000100010001000100010001000100010001000
    _olapi_memory_operation_history_pause_at_seqnoenable olapi memory alloc/free history collection pausingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _olapi_memory_operation_history_retentionenable olapi memory operation history retentionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _olapi_session_historyenable olapi session history collectionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    300300300300300300300300300300300300300300300
    _olapi_session_history_retentionenable olapi session history retentionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _old_connect_by_enabledenable/disable old connect byHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ols_cleanup_taskClean up unnecessary entries in OLS sessinfo tableN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _oltp_compressionoltp compression enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _oltp_compression_gainoltp compression gainN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _omfenable/disable OMFHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenenabledenabledenabledenabledenabledenabledenabledenabledenabledenabledenabledenabledenabledenabledenabledenabledenabledenabledenabled
    _oneside_colstat_for_equijoinssanity check on default selectivity for like/range predicateHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _online_patch_disable_stack_checkdisable check for function on stack for online patchesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    open_cursorsmax # cursors per sessionRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular50505050505050505050505050505050505050
    _open_files_limitLimit on number of files opened by I/O subsystemHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A4294967294429496729442949672944294967294               
    open_linksmax # open links per sessionRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular44444444444444425252525
    open_links_per_instancemax # open links per instanceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular4444444444444444444
    _ops_per_semopthe exact number of operations per semop system callN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _optim_adjust_for_part_skewsadjust stats for skews across partitionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optim_dict_stats_at_db_cr_upgenable/disable dictionary stats gathering at db create/upgradeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optim_enhance_nnull_detectionTRUE to enable index [fast] full scan more oftenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optim_new_default_join_selimproves the way default equijoin selectivity are computedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optim_peek_user_bindsenable peeking of user bindsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_adaptive_cursor_sharingoptimizer adaptive cursor sharingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_adjust_for_nullsadjust selectivity for null valuesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_ads_max_table_countmaximum number of tables in a join under ADSN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _optimizer_ads_time_limitmaximum time limit (seconds) under ADSN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 00
    _optimizer_ads_use_result_cacheuse result cache for ADS queriesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _optimizer_autostats_jobenable/disable auto stats collection jobN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_aw_join_push_enabledEnables AW Join Push optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_aw_stats_enabledEnables statistcs on AW olap_table table functionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_better_inlist_costingenable improved costing of index access using in-list(s)N/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      NLONLYALLALLALLALLALLALLALLALLALLALLALLALL
    _optimizer_block_sizestandard block size used by optimizerN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    819281928192819281928192819281928192819281928192819281928192
    _optimizer_cache_statscost with cache statisticsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    optimizer_capture_sql_plan_baselinesautomatic capture of SQL plan baselines for repeatable statementsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _optimizer_cartesian_enabledoptimizer cartesian join enabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_cbqt_factorcost factor for cost-based query transformationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    505050505050505050505050505050
    _optimizer_cbqt_no_size_restrictiondisable cost based transformation query size restrictionN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden     TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_ceil_costCEIL cost in CBON/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_choose_permutationforce the optimizer to use the specified permutationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/A00000000000        
    _optimizer_choose_permutationforce the optimizer to use the specified permutationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            00     
    _optimizer_cluster_by_rowidenable/disable the cluster by rowid featureN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSETRUE
    _optimizer_coalesce_subqueriesconsider coalescing of subqueries optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_complex_pred_selectivityenable selectivity estimation for builtin functionsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_compute_index_statsforce index stats collection on index creation/rebuildN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_connect_by_cb_whr_onlyuse cost-based transformation for whr clause in connect byN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _optimizer_connect_by_cb_whr_onlyuse cost-based transformation for whr clause in connect byN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _optimizer_connect_by_combine_swcombine no filtering connect by and start withN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          TRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_connect_by_cost_baseduse cost-based transformation for connect byN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_connect_by_elim_dupsallow connect by to eliminate duplicates from inputN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_correct_sq_selectivityforce correct computation of subquery selectivityN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_cost_based_transformationenables cost-based query transformationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    LINEARLINEARLINEARLINEARLINEARLINEARLINEARLINEARLINEARLINEARLINEARLINEARLINEARLINEARLINEAR
    _optimizer_cost_filter_predenables costing of filter predicates in IO cost modelN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _optimizer_cost_hjsmj_multimatchadd cost of generating result set when #rows per key > 1N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_cost_modeloptimizer cost modelHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenCHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSE
    _optimizer_degreeforce the optimizer to use the same degree of parallelismHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _optimizer_dim_subq_join_seluse join selectivity in choosing star transformation dimensionsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_disable_strans_sanity_checksdisable star transformation sanity checksN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _optimizer_distinct_agg_transformTransforms Distinct Aggregates to non-distinct aggregatesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_distinct_eliminationEliminates redundant SELECT DISTNCT'sN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_distinct_placementconsider distinct placement optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_dyn_smp_blksnumber of blocks for optimizer dynamic samplingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden32323232323232323232323232323232323232
    optimizer_dynamic_samplingoptimizer dynamic samplingRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular1111222222222222222
    _optimizer_eliminate_filtering_joinoptimizer filtering join elimination enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_enable_density_improvementsuse improved density computation for selectivity estimationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          FALSEFALSETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_enable_extended_statsuse extended statistics for selectivity estimationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_enable_table_lookup_by_nlconsider table lookup by nl transformationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _optimizer_enhanced_filter_pushpush filters before trying cost-based query transformationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_extend_jppd_view_typesjoin pred pushdown on group-by, distinct, semi-/anti-joined viewN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_extended_cursor_sharingoptimizer extended cursor sharingN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       UDOUDOUDOUDOUDOUDOUDOUDOUDOUDOUDOUDO
    _optimizer_extended_cursor_sharing_reloptimizer extended cursor sharing for relational operatorsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            SIMPLESIMPLESIMPLESIMPLESIMPLESIMPLESIMPLE
    _optimizer_false_filter_pred_pullupoptimizer false predicate pull up transformationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _optimizer_fast_access_pred_analysisuse fast algorithm to traverse predicates for physical optimizerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_fast_pred_transitivityuse fast algorithm to generate transitive predicatesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    optimizer_features_enableoptimizer plan compatibility parameterRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular9.2.09.2.09.2.09.2.010.1.0.310.1.0.410.1.0.510.2.0.110.2.0.210.2.0.310.2.0.410.2.0.511.1.0.611.1.0.711.2.0.111.2.0.211.2.0.311.2.0.412.1.0.1
    _optimizer_filter_pred_pullupuse cost-based flter predicate pull up transformationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_filter_pushdownenable/disable filter predicate pushdownN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _optimizer_fkr_index_cost_biasOptimizer index bias over FTS/IFFS under first K rows modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          101010101010101010
    _optimizer_force_CBQTforce CBQT transformation regardless of costN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _optimizer_free_transformation_heapfree transformation subheap after each transformationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_full_outer_join_to_outerenable/disable full outer to left outer join conversionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _optimizer_group_by_placementconsider group-by placement optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_ignore_hintsenables the embedded hints to be ignoredN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _optimizer_improve_selectivityimprove table and partial overlap join selectivity computationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    optimizer_index_cachingoptimizer percent index cachingRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    optimizer_index_cost_adjoptimizer index cost adjustmentRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular100100100100100100100100100100100100100100100100100100100
    _optimizer_instance_countforce the optimizer to use the specified number of instancesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _optimizer_interleave_jppdinterleave join predicate pushdown during CBQTN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _optimizer_invalidation_periodtime window for invalidation of cursors of analyzed objectsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    180001800018000180001800018000180001800018000180001800018000180001800018000
    _optimizer_join_elimination_enabledoptimizer join elimination enabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_join_factorizationuse join factorization transformationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_join_sel_sanity_checkenable/disable sanity check for multi-column join selectivityHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    optimizer_max_permutationsoptimizer maximum join permutations per query blockRegularRegularRegularRegularHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2000200020002000200020002000200020002000200020002000200020002000200020002000
    _optimizer_min_cache_blocksset minimum cached blocksN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       101010101010101010101010
    _optimizer_mjc_enabledenable merge join cartesianN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    optimizer_modeoptimizer modeRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularCHOOSECHOOSECHOOSECHOOSEALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWSALL_ROWS
    _optimizer_mode_forceforce setting of optimizer mode for user recursive SQL alsoHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_multi_level_push_predconsider join-predicate pushdown that requires multi-level pushdown to base tableN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_multiple_cenvgenerate and run plans using several compilation environmentsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _optimizer_multiple_cenv_reportcontrol what to report in trace file when run in multi-plan modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             resultresultresultresultresultresult
    _optimizer_multiple_cenv_stmtcontrol the types of statements that are run in multi-plan modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              queryqueryqueryqueryquery
    _optimizer_native_full_outer_joinexecute full outer join using native implementaionN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         offoffoffFORCEFORCEFORCEFORCEFORCEFORCEFORCE
    _optimizer_nested_rollup_for_gsetnumber of groups above which we use nested rollup exec for gsetN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            100100100100100100100
    _optimizer_new_join_card_computationcompute join cardinality using non-rounded input valuesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_null_aware_antijoinnull-aware antijoin parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_or_expansioncontrol or expansion approach usedN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A  breadthbreadth               
    _optimizer_or_expansioncontrol or expansion approach usedN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      breadthDEPTHDEPTHDEPTHDEPTHDEPTHDEPTHDEPTHDEPTHDEPTHDEPTHDEPTHDEPTH
    _optimizer_or_expansion_subheapUse subheap for optimizer or-expansionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          TRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_order_by_elimination_enabledEliminates order bys from views before query transformationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_outer_join_to_innerenable/disable outer to inner join conversionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _optimizer_outer_to_anti_enabledEnable transformation of outer-join to anti-join if possibleN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      FALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_percent_paralleloptimizer percent parallelHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden101101101101101101101101101101101101101101101101101101101
    _optimizer_purge_stats_iteration_row_countnumber of rows to be deleted at each iteration of the stats purging processN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               10000100001000010000
    _optimizer_push_down_distinctpush down distinct from query block to tableN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _optimizer_push_pred_cost_baseduse cost-based query transformation for push pred optimizationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_random_planoptimizer seed value for random plansN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _optimizer_reuse_cost_annotationsreuse cost annotations during cost-based query transformationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_rownum_bind_defaultDefault value to use for rownum bindN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         10101010101010101010
    _optimizer_rownum_pred_based_fkrenable the use of first K rows due to rownum predicateN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_save_statsenable/disable saving old versions of optimizer statsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_search_limitoptimizer search limitHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    optimizer_secure_view_mergingoptimizer secure view merging and predicate pushdown/movearoundN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_self_induced_cache_costaccount for self-induced cachingN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _optimizer_skip_scan_enabledenable/disable index skip scanHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_skip_scan_guessconsider index skip scan for predicates with guessed selectivityN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _optimizer_sortmerge_join_enabledenable/disable sort-merge join methodHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_sortmerge_join_inequalityenable/disable sort-merge join using inequality predicatesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          TRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_squ_bottomupenables unnesting of subquery in a bottom-up mannerN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_star_tran_in_with_clauseenable/disable star transformation in with clause queriesN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_star_trans_min_costoptimizer star transformation minimum costN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          000000000
    _optimizer_star_trans_min_ratiooptimizer star transformation minimum ratioN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          000000000
    _optimizer_starplan_enabledoptimizer star plan enabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_system_stats_usagesystem statistics usageHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_table_expansionconsider table expansion transformationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_traceoptimizer trace parameterN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       nonenonenonenonenonenonenonenonenonenonenonenone
    _optimizer_transitivity_retainretain equi-join pred upon transitive equality pred generationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _optimizer_try_st_before_jppdtry Star Transformation before Join Predicate Push DownN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_undo_changesundo changes to query optimizerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _optimizer_undo_cost_changeoptimizer undo cost changeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden9.2.09.2.09.2.09.2.010.1.0.310.1.0.410.1.0.510.2.0.110.2.0.210.2.0.310.2.0.410.2.0.511.1.0.611.1.0.711.2.0.111.2.0.211.2.0.311.2.0.412.1.0.1
    _optimizer_unnest_all_subqueriesenables unnesting of every type of subqueryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_unnest_corr_set_subqUnnesting of correlated set subqueries (TRUE/FALSE)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_unnest_disjunctive_subqUnnesting of disjunctive subqueries (TRUE/FALSE)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_use_cbqt_star_transformationuse rewritten star transformation using cbqt frameworkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_use_feedbackoptimizer use feedbackN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _optimizer_use_histogramsControls whether to use histogramsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          TRUETRUE       
    optimizer_use_invisible_indexesUsage of invisible indexes (TRUE/FALSE)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    optimizer_use_pending_statisticsControl whether to use optimizer pending statisticsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    optimizer_use_sql_plan_baselinesuse of SQL plan baselines for captured sql statementsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            TRUETRUETRUETRUETRUETRUETRUE
    _optimizer_use_subheapEnables physical optimizer subheapN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          TRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _or_expand_nvl_predicateenable OR expanded plan for NVL/DECODE predicateHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    oracle_trace_collection_nameOracle TRACE default collection nameRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    oracle_trace_collection_pathOracle TRACE collection pathRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A?/otrace/admin/cdf?/otrace/admin/cdf?/otrace/admin/cdf?/otrace/admin/cdf               
    oracle_trace_collection_sizeOracle TRACE collection file max. sizeRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A5242880524288052428805242880               
    oracle_trace_enableOracle Trace enabled/disabledRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    _oracle_trace_eventsOracle TRACE event flagsHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    oracle_trace_facility_nameOracle TRACE default facility nameRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/Aoracledoracledoracledoracled               
    oracle_trace_facility_pathOracle TRACE facility pathRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A?/otrace/admin/fdf?/otrace/admin/fdf?/otrace/admin/fdf?/otrace/admin/fdf               
    _oracle_trace_facility_versionOracle TRACE facility versionHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    _oradbg_pathnamepath of oradbg scriptN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _oradebug_cmds_at_startuporadebug commands to execute at instance startupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _oradebug_forceforce target processes to execute oradebug commands?N/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A  FALSEFALSE               
    _oradebug_forceforce target processes to execute oradebug commands?N/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden     FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ordered_nested_loopenable ordered nested loop costingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _ordered_semijoinenable ordered semi-join subqueryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _orph_cln_intervalqmon periodic interval for removed subscriber messages cleanupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1200120012001200120012001200
    os_authent_prefixprefix for auto-logon accountsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularops$ops$ops$ops$ops$ops$ops$ops$ops$ops$ops$ops$ops$ops$ops$ops$ops$ops$ops$
    os_rolesretrieve roles from the operating systemRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _os_sched_high_priorityOS high priority levelN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       111111111111
    _oss_skgxp_udp_dynamic_credit_mgmtOSSLIB enable[!0]/disable[0] dynamic credit mgmt for SKGXP-UDPN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             111111
    _other_wait_event_exclusionexclude event names from _other_wait_threshold calculationsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _other_wait_thresholdthreshold wait percentage for event wait class OtherN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _outline_bitmap_treeBITMAP_TREE hint enabled in outlineN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _outstanding_broadcast_scn_waitsmaximum number of outstanding broadcast SCN waitsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/A              8    
    _parallel_adaptive_max_usersmaximum number of users running with default DOPHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    parallel_adaptive_multi_userenable adaptive setting of degree for multiple user streamsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    parallel_automatic_tuningenable intelligent defaults for parallel execution parametersRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _parallel_blackbox_enabledparallel execution blackbox enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _parallel_blackbox_sizeparallel execution blackbox bucket sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               16384163841638416384
    _parallel_broadcast_enabledenable broadcasting of small inputs to hash and sort merge joinsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _parallel_cluster_cache_pctmax percentage of the global buffer cache to use for affinityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              8080808080
    _parallel_cluster_cache_policypolicy used for parallel execution on cluster(ADAPTIVE/CACHED)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              ADAPTIVEADAPTIVEADAPTIVEADAPTIVEADAPTIVE
    _parallel_conservative_queuingconservative parallel statement queuingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _parallel_default_max_instancesdefault maximum number of instances for parallel queryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    _parallel_degree_leveladjust the computed degree in percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 100100
    parallel_degree_limitlimit placed on degree of parallelismN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              CPUCPUCPUCPUCPU
    parallel_degree_policypolicy used to compute the degree of parallelism (MANUAL/LIMITED/AUTO/ADAPTIVE)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              MANUALMANUALMANUALMANUALMANUAL
    _parallel_execution_message_alignAlignment of PX buffers to OS page boundaryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    parallel_execution_message_sizemessage buffer size for parallel executionRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular215221522152215221522152215221522152215221522152215221521638416384163841638416384
    _parallel_fake_class_pctfake db-scheduler percent used for testingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _parallel_fixwrite_bucketNumber of buckets for each round of fix writeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100010001000100010001000100010001000100010001000100010001000
    parallel_force_localforce single instance executionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              FALSEFALSEFALSEFALSEFALSE
    _parallel_heartbeat_snapshot_intervalinterval of snapshot to track px msging between instancesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               2222
    _parallel_heartbeat_snapshot_maxmaximum number of historical snapshots archivedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               128128128128
    parallel_instance_groupinstance group to use for all parallel operationsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    parallel_io_cap_enabledenable capping DOP by IO bandwidthN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _parallel_load_bal_unitnumber of threads to allocate per instanceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _parallel_load_balancingparallel execution load balanced slave allocationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _parallel_load_publish_thresholddiffrence in percentage controlling px load propagation N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               10101010
    parallel_max_serversmaximum parallel query servers per instanceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular5555151515202020202020202020202020
    _parallel_min_message_poolminimum size of shared pool memory to reserve for pq serversHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden6456064560645606456064560645606456064560645606456064560645606456064560491520491520491520491520491520
    parallel_min_percentminimum percent of threads required for parallel queryRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    parallel_min_serversminimum parallel query servers per instanceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000008
    parallel_min_time_thresholdthreshold above which a plan is a candidate for parallelization (in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              AUTOAUTOAUTOAUTOAUTO
    _parallel_optimization_phase_for_localparallel optimization phase when all slaves are localN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _parallel_policypolicy used to compute the degree of parallelism (MANUAL/LIMITED/AUTO)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            MANUALMANUAL     
    _parallel_queuing_max_waitingtimeparallel statement queuing: max waiting time in queueN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _parallel_recovery_stopatstop at -position- to step through SMONHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767
    _parallel_replay_bucketNumber of buckets for each round of parallel replayN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A    100010001000            
    _parallel_replay_msg_limitNumber of messages for each round of parallel replayN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       400040004000400040004000400040004000400040004000
    _parallel_scalabilityParallel scalability criterion for parallel executionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              5050505050
    parallel_serverif TRUE startup in parallel server modeRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _parallel_server_idle_timeidle time before parallel query server dies (in 1/100 sec)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555300003000030000300003000030000300003000030000300003000030000300003000030000
    parallel_server_instancesnumber of instances to use for sizing OPS SGA structuresRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular1111111111111111111
    _parallel_server_sleep_timesleep time between dequeue timeouts (in 1/100ths)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden10101010101010101010101010101010101010
    parallel_servers_targetinstance target in terms of number of parallel serversN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              88888
    _parallel_slave_acquisition_waittime(in seconds) to wait before retrying slave acquisitionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    111111111111111
    _parallel_statement_queuingparallel statement queuing enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _parallel_stmt_critical_cgsparallel stmt critical cgsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _parallel_syspls_obey_forceTRUE to obey force parallel query/dml/ddl under System PL/SQLN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    parallel_threads_per_cpunumber of parallel execution threads per CPURegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular2222222222222222222
    _parallel_time_thresholdthreshold above which a plan is a candidate for parallelization (in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            1010     
    _parallel_time_unitunit of work used to derive the degree of parallelism (in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _parallel_txn_globalenable parallel_txn hint with updates and deletesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _parallelism_cost_fudge_factorset the parallelism cost fudge factorHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden350350350350350350350350350350350350350350350350350350350
    _parameter_table_block_sizeparameter table block sizeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       204820482048204820482048204820482048204820482048
    _part_access_version_by_numberuse version numbers to access versioned objects for partitioningN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _partial_pwise_join_enabledenable partial partition-wise join when TRUEHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _partition_large_extentsEnables large extent allocation for partitioned tablesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    partition_view_enabledenable/disable partitioned viewsRegularRegularRegularRegularHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _passwordfile_enqueue_timeoutpassword file enqueue timeout in secondsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden900900900900900900900900900900900900900900900900900900900
    _pct_refresh_double_count_preventedmaterialized view PCT refreshes avoid double countingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _pdml_gim_samplingcontrol separation of global index maintenance for PDMLHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5000500050005000500050005000500050005000500050005000500050005000500050005000
    _pdml_gim_staggeredslaves start on different index when doing index maintHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _pdml_slaves_diff_partslaves start on different partition when doing index maintHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _percent_flashback_buf_partial_fullPercent of flashback buffer filled to be considered partial fullN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    505050505050505050505050505050
    permit_92_wrapallow old-style wrap-files in PL/SQLN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularN/AN/AN/AN/AN/AN/AN/A           TRUE       
    permit_92_wrap_formatallow 9.2 or older wrap format in PL/SQLN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegular              TRUETRUETRUETRUETRUE
    pga_aggregate_targetTarget size for the aggregate PGA memory consumed by the instanceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000328204283282042832820428335544323355443233554432335544323355443242781900427819004278190042781900494927871048576010485760
    _pga_auto_snapshot_percentagepercent growth of PGA memory for additional snapshotsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 20 
    _pga_auto_snapshot_thresholdbytes of PGA memory in one process to trigger detail snapshotN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 524288000 
    _pga_detail_combine_autocombine auto and manual PGA memory detail snapshotsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _pga_large_extent_sizePGA large extent sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    104857610485761048576104857610485761048576104857610485761048576104857610485761048576104857610485761048576
    _pga_max_sizeMaximum size of the PGA memory for one processHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200209715200
    _pgactx_cap_stackscapture stacks for setting pgactxN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _ping_levelfusion ping levelHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A44443333333333     
    _pivot_implementation_methodpivot implementation methodN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            CHOOSECHOOSECHOOSECHOOSECHOOSECHOOSECHOOSE
    _pkt_enableenable progressive kill testN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _pkt_pmon_intervalPMON process clean-up interval (cs)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    505050505050505050505050505050
    _pkt_startstart progressive kill test instrumentionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _plan_outline_dataexplain plan outline data enabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _plan_verify_improvement_marginPerformance improvement criterion for evolving plan baselinesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            150150150150150150150
    _plan_verify_local_time_limitLocal time limit to use for an individual plan verificationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    plscope_settingsplscope_settings controls the compile time collection, cross reference, and storage of PL/SQL source code identifier dataN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            IDENTIFIERS:NONEIDENTIFIERS:NONEIDENTIFIERS:NONEIDENTIFIERS:NONEIDENTIFIERS:NONEidentifiers:allIDENTIFIERS:NONE
    _plsql_anon_block_code_typePL/SQL anonymous block code-typeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    INTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETED
    _plsql_cache_enablePL/SQL Function Cache EnabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    plsql_ccflagsPL/SQL ccflagsN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    plsql_code_typePL/SQL code-typeN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    INTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETED
    plsql_compiler_flagsPL/SQL compiler flagsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETEDINTERPRETED, NON_DEBUGINTERPRETED, NON_DEBUGINTERPRETED, NON_DEBUGINTERPRETED, NON_DEBUGINTERPRETED, NON_DEBUGINTERPRETED, NON_DEBUGINTERPRETED, NON_DEBUGINTERPRETED, NON_DEBUG       
    _plsql_conditional_compilationPL/SQL conditional compilationN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A FALSEFALSEFALSE               
    _plsql_conditional_compilationPL/SQL conditional compilationN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A     TRUETRUE            
    plsql_debugPL/SQL debugN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _plsql_dump_buffer_eventsconditions upon which the PL/SQL circular buffer is dumpedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _plsql_max_stack_sizePL/SQL maximum stack sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _plsql_max_stack_sizePL/SQL maximum stack sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _plsql_minimum_cache_hit_percentplsql minimum cache hit percentage required to keep caching activeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       202020202020202020202020
    plsql_native_c_compilerplsql native C compilerRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    _plsql_native_frame_thresholdAllocate PL/SQL native frames on the heap if size exceeds this valueN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           4294967294       
    _plsql_native_frame_thresholdAllocate PL/SQL native frames on the heap if size exceeds this valueN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              42949672944294967294429496729442949672944294967294
    plsql_native_library_dirplsql native library dirRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/A                   
    plsql_native_library_subdir_countplsql native library number of subdirectoriesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/A00000000000000     
    plsql_native_linkerplsql native linkerRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    plsql_native_make_file_nameplsql native compilation make fileRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    plsql_native_make_utilityplsql native compilation make utilityRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    _plsql_nvl_optimizePL/SQL NVL optimizeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    plsql_optimize_levelPL/SQL optimize levelN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    222222222222222
    plsql_v2_compatibilityPL/SQL version 2.x compatibility flagRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    plsql_warningsPL/SQL compiler warnings settingsN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    DISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALLDISABLE:ALL
    _pmon_dead_blkrs_alive_chk_rate_secsrate to check blockers are alive during cleanup (in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              103333
    _pmon_dead_blkrs_max_blkrsmax blockers to check during cleanupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               200200200200
    _pmon_dead_blkrs_max_cleanup_attemptsmax attempts per blocker while checking dead blockersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              55555
    _pmon_dead_blkrs_scan_rate_secsrate to scan for dead blockers during cleanup (in seconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              33333
    _pmon_enable_dead_blkrslook for dead blockers during PMON cleanupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSETRUETRUETRUETRUE
    _pmon_load_constantsserver load balancing constants (S,P,D,I,L,C,M)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden300,192,64,3,10,10,0300,192,64,3,10,10,0300,192,64,3,10,10,0300,192,64,3,10,10,0300,192,64,3,10,10,0300,192,64,3,10,10,0300,192,64,3,10,10,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0300,192,64,3,10,10,0,0
    _pmon_max_consec_postsPMON max consecutive posts in main loopN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               5555
    _posix_spawn_enabledposix_spawn enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _post_wait_queues_dynamic_queuesPost Wait Queues - Num Dynamic QueuesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               40404040
    _post_wait_queues_num_per_classPost Wait Queues - Num Per ClassN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _pqq_debug_txn_actpq queuing transaction activeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _pqq_enabledEnable Resource Manager based Parallel Statement QueuingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    pre_11g_enable_captureTo enable capture of DB ReplayN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularN/AN/AN/AN/AN/AN/AN/A          FALSEFALSE       
    pre_page_sgapre-page sga for processRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUE
    _pre_rewrite_push_predpush predicates into views before rewriteHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _precompute_gid_valuesprecompute gid values and copy them before returning a rowHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _pred_move_aroundenables predicate move-aroundHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _predicate_elimination_enabledallow predicate elimination if set to TRUEHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _prescommpresume commit of IMU transactionsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _print_refresh_scheduleenable dbms_output of materialized view refresh scheduleN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
    _private_memory_addressStart address of large extent memory segmentN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    processesuser processesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular303030303030304040404040100100100100200200200
    processor_group_nameName of the processor group that this instance should run in.N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegular                   
    _project_view_columnsenable projecting out unreferenced columns of a viewHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _projection_pushdownprojection pushdownN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _projection_pushdown_debuglevel for projection pushdown debuggingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _prop_old_enabledShift to pre 11g propagation behaviourN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _protect_frame_heapsProtect cursor frame heapsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _ptn_cache_thresholdflags and threshold to control partition metadata cachingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0001
    _push_join_predicateenable pushing join predicate inside a viewHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _push_join_union_viewenable pushing join predicate inside a union all viewHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _push_join_union_view2enable pushing join predicate inside a union viewN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _px_adaptive_offload_pecentagepercentage for PQ adaptive offloading of granulesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/A                00 
    _px_adaptive_offload_thresholdthreshold (GB/s) for PQ adaptive offloading of granulesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                101010
    _px_async_getgranuleasynchronous get granule in the slaveHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _px_bind_peek_sharingenables sharing of px cursors that were built using bind peekingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          TRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _px_broadcast_fudge_factorset the tq broadcasting fudge factor percentageHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    _px_buffer_ttlttl for px mesg buffers in secondsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    303030303030303030303030303030
    _px_chunklist_count_ratioratio of the number of chunk lists to the default DOP per instanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               16888
    _px_compilation_debugdebug level for parallel compilationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _px_compilation_tracetracing level for parallel compilationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _px_dump_12805_sourceenables or disables tracing of 12805 signal sourceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _px_dynamic_optturn off/on restartable qerpx dynamic optimizationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _px_dynamic_sample_sizenum of samples for restartable qerpx dynamic optimizationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden50505050505050505050505050505050505050
    _px_execution_services_enabledenable service-based constraint of px slave allocationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _px_freelist_latch_divisorDivide the computed number of freelists by this power of 2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             222222
    _px_gim_factorweighted autodop global index maintenance factorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              100100100100100
    _px_granule_batch_sizemaximum size of a batch of granulesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101026
    _px_granule_randomizeenables or disables randomization of parallel scans rowid granulesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _px_granule_sizedefault size of a rowid range granule (in KB)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden10000010000010000010000010000010000010000010000010000010000010000010000010000010000010000001000000100000010000001000000
    _px_hold_timehold px at execution time (unit: second)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                000
    _px_index_samplingparallel query sampling for index create (100000 = 100%)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/A200200200200200200200200200200200200200200200200200200 
    _px_index_sampling_objsizeparallel query sampling for index create based on object sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _px_io_process_bandwidthIO process bandwidth in MB/sec for computing DOPN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            200200200200200200200
    _px_io_system_bandwidthtotal IO system bandwidth in MB/sec for computing DOPN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _px_kxib_tracingturn on kxib tracingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _px_load_factorweighted autodop load factorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              300300300300300
    _px_load_publish_intervalinterval at which LMON will check whether to publish PX loadHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden200200200200200200200200200200200200200200200200200200200
    _px_loc_msg_costCPU cost to send a PX message via shared memoryN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100010001000100010001000100010001000100010001000100010001000
    _px_max_granules_per_slavemaximum number of rowid range granules to generate per slaveHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    _px_max_map_valMaximum value of rehash mapping for PXN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              3232323232
    _px_max_message_pool_pctpercentage of shared pool for px msg buffers range [5,90]N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               40404040
    _px_min_granules_per_slaveminimum number of rowid range granules to generate per slaveHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden13131313131313131313131313131313131313
    _px_minus_intersectenables pq for minus/interect operatorsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _px_net_msg_costCPU cost to send a PX message over the internconnectN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100001000010000100001000010000100001000010000100001000010000100001000010000
    _px_no_granule_sortprevent parallel partition granules to be sorted on sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _px_no_stealingprevent parallel granule stealing in shared nothing environmentHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _px_nss_planbenables or disables NSS Plan B reparse with outlineN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _px_numa_stealing_enabledenable/disable PQ granule stealing across NUMA nodesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUETRUE
    _px_numa_support_enabledenable/disable PQ NUMA supportN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                TRUETRUEFALSE
    _px_partition_scan_enabledenables or disables parallel partition-based scan N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _px_partition_scan_thresholdleast number of partitions per slave to start partition-based scan N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               64646464
    _px_proc_constrainreduce parallel_max_servers if greater than (processes - fudge)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _px_pwg_enabledparallel partition wise group by enabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _px_round_robin_rowcntround robin row count to enq to next slaveN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                100010001000
    _px_rownum_pdturn off/on parallel rownum pushdown optimizationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _px_send_timeoutIPC message send timeout value in secondsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    300300300300300300300300300300300300300300300
    _px_slaves_share_cursorsslaves share cursors with QCN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _px_tracepx trace parameterHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddennonenonenonenonenonenonenonenonenonenonenonenonenonenonenonenonenonenonenone
    _px_ual_serial_inputenables new pq for UNION operatorsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          TRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _px_xtgranule_sizedefault size of a external table granule (in KB)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100001000010000100001000010000100001000010000100001000010000100001000010000
    _qa_lrg_typeOracle internal parameter to specify QA lrg typeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _quantum_donation_limitnumber of quantum donations allowed per quantumN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/A             0     
    _query_cost_rewriteperform the cost based rewrite with materialized viewsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _query_execution_cache_max_sizemax size of query execution cacheN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    6553665536655366553665536655366553665536655366553665536131072131072131072131072
    _query_mmvrewrite_maxcmapsquery mmv rewrite maximum number of cmaps per dmap in query disjunctN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            20202020202020
    _query_mmvrewrite_maxdmapsquery mmv rewrite maximum number of dmaps per query disjunctN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _query_mmvrewrite_maxinlistsquery mmv rewrite maximum number of in-lists per disjunctN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    _query_mmvrewrite_maxintervalsquery mmv rewrite maximum number of intervals per disjunctN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    _query_mmvrewrite_maxmergedcmapsquery mmv rewrite maximum number of merged cmapsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/A            505050    
    _query_mmvrewrite_maxpredsquery mmv rewrite maximum number of predicates per disjunctN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _query_mmvrewrite_maxqryinlistvalsquery mmv rewrite maximum number of query in-list valuesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            500500500500500500500
    _query_mmvrewrite_maxregpermquery mmv rewrite maximum number of region permutationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            512512512512512512512
    _query_on_physicalquery on physicalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _query_rewrite_1perform query rewrite before&after or only before view mergingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _query_rewrite_2perform query rewrite before&after or only after view mergingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _query_rewrite_drjmv rewrite and drop redundant joinsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUEFALSE
    query_rewrite_enabledallow rewrite of queries using materialized views if enabledRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularfalsefalsefalsefalseTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _query_rewrite_expressionrewrite with cannonical form for expressionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _query_rewrite_fpcmv rewrite fresh partition containmentHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _query_rewrite_fudgecost based query rewrite with MVs fudge factorHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden90909090909090909090909090909090909090
    query_rewrite_integrityperform rewrite using materialized views with desired integrityRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforcedenforced
    _query_rewrite_jgmigratemv rewrite with jg migrationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _query_rewrite_maxdisjunctquery rewrite max disjunctsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden257257257257257257257257257257257257257257257257257257257
    _query_rewrite_or_errorallow query rewrite, if referenced tables are not datalessHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _query_rewrite_setopgrw_enableperform general rewrite using set operator summariesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _query_rewrite_vop_cleanupprune frocol chain before rewrite after view-mergingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _queue_buffer_max_dump_lenmax number of bytes to dump to trace file for queue buffer dumpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              6553665536655366553665536
    _radm_enabledData RedactionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    _rbr_ckpt_tracingEnable reuse block range checkpoint tracingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _rcfg_disable_verifyif TRUE disables verify at reconfigurationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSETRUETRUETRUETRUETRUE
    _rcfg_disable_verifyif TRUE disables verify at reconfigurationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          FALSEFALSE       
    _rcfg_parallel_cleanupif TRUE enables parallel cleanup at reconfigurationN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A    TRUETRUETRUE            
    _rcfg_parallel_fixwriteif TRUE enables parallel fixwrite at reconfigurationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _rcfg_parallel_replayif TRUE enables parallel replay and cleanup at reconfigurationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _rcfg_parallel_verifyif TRUE enables parallel verify at reconfigurationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _rcv_scn_message_threshold_percentPercentage of buffer cache above which media rcv sends SCN messageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/A             20     
    _rdbms_compatibilitydefault RDBMS compatibility levelN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10.110.110.110.110.110.110.1
    _rdbms_internal_fplib_enabledenable CELL FPLIB filtering within rdbmsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _rdbms_internal_fplib_raise_errorsenable reraising of any exceptions in CELL FPLIBN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    rdbms_server_dnRDBMS's Distinguished NameRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    read_only_open_delayedif TRUE delay opening of read only files until first accessRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _read_only_violation_dump_to_traceread-only violation dump to trace filesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _read_only_violation_max_countread-only violation array max countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               500500500500
    _read_only_violation_max_count_per_moduleread-only violation array per module max countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               100100100100
    _readable_standby_modereadable standby modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            SLFLUSHSLFLUSH     
    _readable_standby_sync_timeoutreadable standby query scn sync timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10101010101010
    _real_time_apply_arch_delayArchival delay with real time applyN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A    00000000       
    _real_time_apply_simSimulation value with real time applyN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _realfree_heap_free_thresholdthreshold for performing real-free, in KbytesHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A4194303419430341943034194303               
    _realfree_heap_max_sizeminimum max total heap size, in KbytesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden32768327683276832768327683276832768327683276832768327683276832768327683276832768327683276832768
    _realfree_heap_modemode flags for real-free heapHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _realfree_heap_pagesize_hinthint for real-free page size in bytesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/A    6553665536655366553665536655366553665536655366553665536655366553665536 
    _reasonable_scn_offset_secondsReasonable SCN offset secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/A               00  
    _recoverable_recovery_batch_percentRecoverable recovery batch size (percentage of buffer cache)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden15505050505050505050505050505050505050
    _recovery_assertsif TRUE, enable expensive integrity checksHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _recovery_claim_batch_sizenumber of messages to batch in a recovery claim message (DFS)HiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A10101010               
    recovery_parallelismnumber of server processes to use for parallel recoveryRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _recovery_percentagerecovery buffer cache percentageHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden50505050505050505050505050505050505050
    _recovery_read_limitnumber of recovery reads which can be outstandingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                102410241024
    _recovery_skip_cfseq_checkallow media recovery even if controlfile seq check failsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          FALSEFALSE       
    _recovery_skip_cfseq_checkallow media recovery even if controlfile seq check failsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _recovery_verify_writesenable thread recovery write verifyN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _recursive_imu_transactionsrecursive transactions may be IMUN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _recursive_with_max_recursion_levelcheck for maximum level of recursion instead of checking for cyclesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _recyclebinrecyclebin processingN/AN/AN/AN/AHiddenHiddenHiddenRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    TRUETRUETRUEonononononononononononon
    _redo_compatibility_checkgeneral and redo/undo compatibility sanity checkN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _redo_read_from_memoryEnable reading redo from in-memory log bufferN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _redo_transport_compress_allIs ASYNC LNS compression allowed?N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSETRUETRUETRUETRUETRUE
    _redo_transport_max_stall_timeMaximum stall time before redo tranport process is terminatedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/A              240    
    _redo_transport_sanity_checkredo transport sanity check bit maskN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _redo_transport_stall_timeI/O stall time before terminating redo transport processN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               240360360360
    _redo_transport_stall_time_longlong I/O stall time before terminating redo transport processN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               3600360036003600
    _redo_transport_stream_testtest stream connection?N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    _redo_transport_stream_writesStream network writes?N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    redo_transport_userData Guard transport user when using password fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular                   
    _redo_transport_vio_size_reqVIO size requirementN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              42949672944294967294429496729442949672941048576
    _reduce_sby_log_scanenable standby log scan optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUETRUETRUETRUE
    _reduce_sby_log_scanenable stabdby log scan optimizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           TRUE       
    _release_insert_thresholdmaximum number of unusable blocks to unlink from freelistHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    _reliable_block_sendsif TRUE, no side channel on reliable interconnectHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUETRUETRUETRUE
    _relocation_commit_batch_sizeASM relocation commit batch sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               8888
    remote_archive_enableremote archival enable settingRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/Atruetruetruetruetruetruetruetruetruetruetruetrue       
    remote_dependencies_moderemote-procedure-call dependencies mode parameterRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMPTIMESTAMP
    remote_listenerremote listenerRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    remote_login_passwordfilepassword file usage parameterRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVENONENONENONEEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVEEXCLUSIVE
    remote_os_authentallow non-secure remote clients to use auto-logon accountsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    remote_os_rolesallow non-secure remote clients to use os rolesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _remove_aggr_subqueryenables removal of subsumed aggregated subqueryN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _rep_base_pathbase path for EM reports in databaseN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _replace_virtual_columnsreplace expressions with virtual columnsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    replication_dependency_trackingtracking dependency for Replication parallel propagationRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _reset_maxcap_historyreset maxcap history timeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               10101010
    resource_limitmaster switch for resource limitRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _resource_manager_always_offdisable the resource manager alwaysN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _resource_manager_always_onenable the resource manager alwaysN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/A       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE 
    resource_manager_cpu_allocationResource Manager CPU allocationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            2222222
    resource_manager_planresource mgr top planRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular            SCHEDULER[0x2BFD]:DEFAULT_MAINTENANCE_PLANSCHEDULER[0x2C47]:DEFAULT_MAINTENANCE_PLANSCHEDULER[0x2FF7]:DEFAULT_MAINTENANCE_PLANSCHEDULER[0x30FB]:DEFAULT_MAINTENANCE_PLANSCHEDULER[0x3183]:DEFAULT_MAINTENANCE_PLANSCHEDULER[0x32CD]:DEFAULT_MAINTENANCE_PLAN 
    _restore_maxopenfilesrestore assumption for maxopenfilesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              88888
    _restore_spfilerestore spfile to this locationN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _result_cache_auto_dml_monitoring_durationresult cache auto dml monitoring durationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               15151515
    _result_cache_auto_dml_monitoring_slotsresult cache auto dml monitoring slotN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               4444
    _result_cache_auto_dml_thresholdresult cache auto dml thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               16161616
    _result_cache_auto_dml_trend_thresholdresult cache auto dml trend thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               20202020
    _result_cache_auto_execution_thresholdresult cache auto execution thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _result_cache_auto_size_thresholdresult cache auto max size allowedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            100100100100100100100
    _result_cache_auto_time_distanceresult cache auto time distanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            300300300300300300300
    _result_cache_auto_time_thresholdresult cache auto time threshold N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1000100010001000100010001000
    _result_cache_block_sizeresult cache block sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1024102410241024102410241024
    _result_cache_copy_block_countblocks to copy instead of pinning the resultN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1111
    _result_cache_deterministic_plsqlresult cache deterministic PLSQL functionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _result_cache_globalAre results available globally across RAC?N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              TRUETRUETRUETRUETRUE
    result_cache_max_resultmaximum result size as percent of cache sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            5555555
    result_cache_max_sizemaximum amount of memory to be used by the cacheN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            14584381441458700288327683276832768327681473249280
    result_cache_moderesult cache operator usage modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            MANUALMANUALMANUALMANUALMANUALMANUALMANUAL
    result_cache_remote_expirationmaximum life time (min) for any result using a remote objectN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            0000000
    _result_cache_timeoutmaximum time (sec) a session waits for a resultN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            60101010101010
    resumable_timeoutset resumable_timeoutN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    000000000000000
    _reuse_index_loopnumber of blocks being examine for index block reuseHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    _right_outer_hash_enableRight Outer/Semi/Anti Hash EnabledN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _rm_cluster_interconnectsinterconnects for RAC use (RM)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _rm_numa_sched_enableIs Resource Manager (RM) related NUMA scheduled policy enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             TRUETRUETRUEFALSEFALSEFALSE
    _rm_numa_sched_enableIs Resource Manager (RM) related NUMA scheduled policy enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          FALSETRUE       
    _rm_numa_simulation_cpusnumber of cpus for numa simulation in resource managerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          00       
    _rm_numa_simulation_cpusnumber of cpus for each pg for numa simulation in resource managerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _rm_numa_simulation_pgsnumber of PGs for numa simulation in resource managerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _rm_numa_simulation_pgsnumber of PGs for numa simulation in resource managerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/A          00       
    _rman_io_prioritypriority at which rman backup i/o's are doneN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       333333333333
    _rman_restore_through_linkRMAN restore through linkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenN/A            FALSEFALSEFALSEFALSEFALSEFALSE 
    _rman_roundrobin_placementNuma round robin placement for RMAN procsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _rollback_segment_countnumber of undo segmentsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _rollback_segment_initialstarting undo segment numberHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1111111111111111111
    rollback_segmentsundo segment listRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _rollback_stopatstop at -position to step rollbackN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _row_cache_cursorsnumber of cached cursors for row cache managementHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden10101010101010202020202020202020202020
    _row_crenable row cr for all sqlHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    row_lockingrow-lockingRegularRegularRegularRegularHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalwaysalways
    _row_shipping_explainenable row shipping explain plan supportN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _row_shipping_thresholdrow shipping column selection thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         80808080808080808080
    _rowlen_for_chaining_thresholdmaximum rowlen above which rows may be chained across blocksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 10001000
    _rowsource_execution_statisticsif TRUE, Oracle will collect rowsource statisticsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _rowsource_profiling_statisticsif TRUE, Oracle will capture active row sources in v$active_session_historyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _rowsource_statistics_sampfreqfrequency of rowsource statistic sampling (must be a power of 2)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    128128128128128128128128128128128128128128128
    _rowsrc_trace_levelRow source tree tracing levelN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _rta_sync_wait_timeoutRTA sync wait timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101010
    _rtc_infeasible_thresholdRedo Transport Compression infeasible thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            10102525252525
    _sage_enabledenable real SAGE functionalityN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            1      
    _sage_fcreAllow optimized file creation path for SAGEN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            TRUE      
    _sample_rows_per_blocknumber of rows per block used for sampling IO optimizationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    444444444444444
    _scatter_gcs_resourcesif TRUE, gcs resources are scattered uniformly across sub poolsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _scatter_gcs_shadowsif TRUE, gcs shadows are scattered uniformly across sub poolsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _sched_delay_max_samplesscheduling delay maximum number of samplesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               4444
    _sched_delay_measurement_sleep_usscheduling delay mesurement sleep usN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1000100010001000
    _sched_delay_os_tick_granularity_usos tick granularity used by scheduling delay calculationsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               16000160001600016000
    _sched_delay_sample_collection_thresh_msscheduling delay sample collection duration threshold msN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               200200200200
    _sched_delay_sample_interval_msscheduling delay sampling interval in msN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1000100010001000
    _scn_schemeSCN schemeHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    _scn_wait_interface_max_backoff_time_secsmax exponential backoff time for scn wait interface in ktaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            600600600600600600600
    _scn_wait_interface_max_timeout_secsmax timeout for scn wait interface in ktaN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            2147483647214748364721474836472147483647214748364721474836472147483647
    _sdiag_crashsql diag crashN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            NONENONENONENONENONENONENONE
    sec_case_sensitive_logoncase sensitive password enabled for logonN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            TRUETRUETRUETRUETRUETRUETRUE
    _sec_enable_test_rpcsWhether to enable the test RPCsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    sec_max_failed_login_attemptsmaximum number of failed login attempts on a connectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            10101010101010
    sec_protocol_error_further_actionTTC protocol error continue actionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            CONTINUECONTINUECONTINUECONTINUECONTINUECONTINUECONTINUE
    sec_protocol_error_trace_actionTTC protocol error actionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            TRACETRACETRACETRACETRACETRACETRACE
    sec_return_server_release_bannerwhether the server retruns the complete version informationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _second_spare_parametersecond spare parameter - integerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _securefile_timerscollect kdlu timers and accumulate per layersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _securefiles_bulkinsertsecurefiles segment insert only optizationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _securefiles_concurrency_estimatesecurefiles concurrency estimateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             61212121212
    _securefiles_fg_retrysegment retry before foreground waitsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                100100100
    _securefiles_forceflushsecurefiles force flush before allocationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                FALSEFALSEFALSE
    _securefiles_memory_percentofSGAsecurefiles memory as percent of SGAN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                2088
    _select_any_dictionary_security_enabledExclude USER$, XS$VERIFIERS, ENC$ and DEFAULT_PWD$ from SELECT ANY DICTIONARY system privilegeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSETRUE
    _selectivity_for_srf_enabledenable/disable selectivity for storage reduction factorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _selfjoin_mv_duplicatescontrol rewrite self-join algorithmN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _selftune_checkpoint_write_pctPercentage of total physical i/os for self-tune ckptN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    333333333333333
    _selftune_checkpointing_lagSelf-tune checkpointing lag the tail of the redo logN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    300300300300300300300300300300300300300300300
    _sem_per_semidthe exact number of semaphores per semaphore set to allocateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHidden                   
    _send_ast_to_foregroundif TRUE, send ast message to foregroundHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUEAUTOAUTOAUTOAUTO
    _send_close_with_blockif TRUE, send close with block even with direct sendsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _send_requests_to_PIif TRUE, try to send CR requests to PI buffersHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _serial_direct_readenable direct read in serialHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEautoautoautoauto
    _serial_recoveryforce serial recovery or parallel recoveryN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    serial_reusereuse the frame segmentsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularDISABLEDISABLEDISABLEDISABLEdisabledisabledisabledisabledisabledisabledisabledisabledisabledisabledisabledisabledisabledisabledisable
    serializableserializableRegularRegularRegularRegularHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _serialize_lgwr_sync_ioSerialize LGWR SYNC local and remote ioN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _service_cleanup_timeouttimeout to peform service cleanupN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               30303030
    service_namesservice names supported by the instanceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular9204920692079208101031010410105102011020210203102041020511106111071120111202112031120412101
    _session_allocation_latchesone latch per group of sessionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              22222
    session_cached_cursorsNumber of cursors to cache in a session.RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000202020202050505050505050
    _session_cached_instantiationsNumber of pl/sql instantiations to cache in a session.N/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden     6060606060606060606060606060
    _session_context_sizesession app context sizeN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       100001000010000100001000010000100001000010000100001000010000
    _session_idle_bit_latchesone latch per session or a latch per group of sessionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _session_idle_check_intervalResource Manager session idle limit check interval in secondsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A    60606060606060606060     
    _session_kept_cursor_pinsNumber of cursors pins to keep in a sessionN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A       0000000     
    session_max_open_filesmaximum number of open files allowed per sessionRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular10101010101010101010101010101010101010
    _session_page_extentSession Page Extent SizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               2048204820482048
    _session_wait_historyenable session wait history collectionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    101010101010101010101010101010
    sessionsuser and system sessionsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular383838383838384949494949115115172172322322322
    _set_mgd_recovery_stateset mgd recovery state to new valueN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _seventeenth_spare_parameterseventeenth spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _seventeenth_spare_parameterseventeenth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _seventh_spare_parameterseventh spare parameter - integerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _sga_clear_dumpAllow dumping encrypted blocks in clear for debuggingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _sga_early_tracesga early trace eventN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _sga_lockingsga granule locking stateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            nonenonenonenonenonenonenone
    sga_max_sizemax total SGA sizeRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular160925648165120192165119368165117848167772160167772160167772160171966464171966464171966464171966464171966464218103808218103808218103808218103808251658240230686720230686720
    sga_targetTarget size of SGAN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    000000000000000
    shadow_core_dumpCore Size for Shadow ProcessesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialpartialPARTIALpartialpartialpartialpartialpartial
    _shared_io_pool_buf_sizeShared IO pool buffer sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1048576104857610485761048576104857610485761048576
    _shared_io_pool_debug_trctrace kcbi debug info to tracefileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _shared_io_pool_sizeSize of shared IO poolN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000004194304
    _shared_io_set_valueshared io pool size set internal value - overwrite zero user sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _shared_iop_max_sizemaximum shared io pool sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            536870912536870912536870912536870912536870912536870912536870912
    shared_memory_addressSGA starting address (low order 32-bits on 64-bit platforms)RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _shared_pool_max_sizeshared pool maximum size when auto SGA enabledN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _shared_pool_minsize_onshared pool minimum size when auto SGA enabledN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _shared_pool_reserved_min_allocminimum allocation size in bytes for reserved area of shared poolHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden4400440044004400440044004400440044004400440044004400440044004400440044004400
    _shared_pool_reserved_pctpercentage memory of the shared pool allocated for the reserved areaHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    shared_pool_reserved_sizesize in bytes of reserved area of shared poolRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular3355443335544333554433355443440401944040194404019440401944040194404019440401944040196710886671088667108866710886838860883886088388608
    shared_pool_sizesize in bytes of shared poolRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular671088646710886467108864671088648808038488080384880803848808038488080384880803848808038488080384134217728134217728134217728134217728167772160167772160167772160
    _shared_server_load_balanceshared server load balanceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _shared_server_num_queuesnumber of shared server common queuesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            2222222
    shared_server_sessionsmax number of shared server sessionsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000               
    _shared_server_spare_param1_shared_server_spare_param1N/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _shared_server_spare_param2_shared_server_spare_param2N/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _shared_server_spare_param3_shared_server_spare_param3N/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A                   
    shared_serversnumber of shared servers to start upRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _shmprotectallow mprotect use for shared memoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _short_stack_timeout_msshort stack timeout in msN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       300003000030000300003000030000300003000030000300003000030000
    _show_mgd_recovery_stateShow internal managed recovery stateN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _shrunk_aggs_disable_thresholdpercentage of exceptions at which to switch to full length aggsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden60606060606060606060606060606060606060
    _shrunk_aggs_enabledenable use of variable sized buffers for non-distinct aggregatesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _shutdown_completion_timeout_minsminutes for shutdown operation to wait for sessions to completeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               60606060
    _side_channel_batch_sizenumber of messages to batch in a side channel message (DFS)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100200200200200200200200200200200200200200200200
    _side_channel_batch_timeouttimeout before shipping out the batched side channelmessages in secondsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5556556666666666666
    _side_channel_batch_timeout_mstimeout before shipping out the batched side channelmessages in millisecondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          500500500500500500500500500
    _simple_view_mergingcontrol simple view merging performed by the optimizerN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _simulate_disk_sectorsizeEnables skgfr to report simulated disk sector sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _simulate_io_waitSimulate I/O wait to test segment advisorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               0000
    _simulate_mem_transfersimulate auto memory sga/pga transfersN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _simulator_bucket_mindeltaLRU bucket minimum deltaN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    819281928192819281928192819281928192819281928192819281928192
    _simulator_internal_boundsimulator internal bound percentN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    101010101010101010101010101010
    _simulator_lru_rebalance_sizthrLRU list rebalance threshold (size)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    222222225555555
    _simulator_lru_rebalance_threshLRU list rebalance threshold (count)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    102401024010240102401024010240102401024010240102401024010240102401024010240
    _simulator_lru_scan_countLRU scan countN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    888888888888888
    _simulator_pin_inval_maxcntmaximum count of invalid chunks on pin listN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    161616161616161616161616161616
    _simulator_reserved_heap_countsimulator reserved heap countN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    409640964096409640964096409640964096409640964096409640964096
    _simulator_reserved_obj_countsimulator reserved object countN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    102410241024102410241024102410241024102410241024102410241024
    _simulator_sampling_factorsampling factor for the simulatorN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    222222222222222
    _simulator_upper_bound_multipleupper bound multiple of pool sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    222222222222222
    _single_processrun without detached processesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _siop_flashback_scandepthShared IO pool flashback io completion scan depthN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            20202020202020
    _siop_perc_of_bc_x100percentange * 100 of cache to transfer to shared io poolN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               250025002500625
    _sixteenth_spare_parametersixteenth spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _sixteenth_spare_parametersixteenth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _sixth_spare_parametersixth spare parameter - string listHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    _sixth_spare_parametersixth spare parameter - integerN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _skgxp_ant_optionsSKGXP ANT options (oss)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _skgxp_ctx_flags1IPC debug options flags (RAC)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _skgxp_ctx_flags1IPC debug options flags (oss)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _skgxp_ctx_flags1maskIPC debug options flags mask (oss)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _skgxp_dynamic_protocolIPC protocol override (!0/-1=*,2=UDP,3=RDS,0x1000=ipc_X)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _skgxp_dynamic_protocolIPC protocol override (RAC) (0/-1=*,2=UDP,3=RDS,!0x1000=ipc_X)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           4096       
    _skgxp_gen_ant_off_rpc_timeout_in_secVRPC request timeout when ANT disabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             303030303030
    _skgxp_gen_ant_ping_misscountANT protocol ping miss countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             333333
    _skgxp_gen_rpc_no_path_check_in_secANT ping protocol miss countN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             555555
    _skgxp_gen_rpc_timeout_in_secVRPC request timeout when ANT enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             300300300300300300
    _skgxp_impl_verskgxp impl verN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _skgxp_inetslimit SKGXP networks (oss)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden                   
    _skgxp_min_rpc_rcv_zcpy_lenIPC threshold for rpc rcv zcpy operation (default = 0 - disabled)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _skgxp_min_zcpy_lenIPC threshold for zcpy operation (default = 0 - disabled)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _skgxp_reapingtune skgxp OSD reaping limitN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      1000100010001000100010001000100010001000100010001000
    _skgxp_rel_verskgxp rel verN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _skgxp_rgn_portsregion socket limits (0xFFFFNNXX): F=flags, N=min, X=maxN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _skgxp_shared_portlimit sockets opened by SGA regions (default: 0 = no limit)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           0       
    _skgxp_spare_param1ipc ksxp spare parameter 1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _skgxp_spare_param1ipc oss spare parameter 1N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _skgxp_spare_param2ipc oss spare parameter 2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _skgxp_spare_param2ipc ksxp spare parameter 2N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _skgxp_spare_param3ipc ksxp spare parameter 3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _skgxp_spare_param3ipc oss spare parameter 3N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _skgxp_spare_param4ipc ksxp spare parameter 4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _skgxp_spare_param4ipc oss spare parameter 4N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _skgxp_spare_param5ipc ksxp spare parameter 5N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _skgxp_spare_param5ipc oss spare parameter 5N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden                   
    _skgxp_udp_ach_reaping_timetime in minutes before idle ach's are reapedN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      01200000120120120120120120120
    _skgxp_udp_ack_delayEnables delayed acksN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _skgxp_udp_adjust_iovadjust IOV for UDP long message protectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _skgxp_udp_enable_dynamic_credit_mgmtEnables dynamic credit managementN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _skgxp_udp_hiwat_warnach hiwat mark warning intervalN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       100010001000100010001000100010001000100010001000
    _skgxp_udp_hiwat_warnach hiwat mark warning intervalN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A                   
    _skgxp_udp_interface_detection_time_secstime in seconds between interface detection checksN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      0606060606060606060606060
    _skgxp_udp_keep_alive_ping_timer_secsconnection idle time in seconds before keep alive is initiated. min: 30 sec max: 1800 sec default: 300 secN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      0300300300300300300300300300300300300
    _skgxp_udp_lmp_mtusizeMTU size for UDP LMP testingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          000000000
    _skgxp_udp_lmp_onenable UDP long message protectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _skgxp_udp_timed_wait_bufferingdiagnostic log buffering space (in bytes) for timed wait (0 meanN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A  10241024               
    _skgxp_udp_timed_wait_bufferingdiagnostic log buffering space (in bytes) for timed wait (0 means unbufferdN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      1024102410241024102410241024102410241024102410241024
    _skgxp_udp_timed_wait_secondstime in seconds before timed wait is invokedN/AN/AHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A  55               
    _skgxp_udp_timed_wait_secondstime in seconds before timed wait is invokedN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden      5555555555555
    _skgxp_udp_use_tcbdisable use of high speek timerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _skgxp_zcpy_flagsIPC zcpy options flagsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _skgxpg_last_parameterlast defined skgxpg parameter - ossN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              2626262727
    _skgxpg_last_parameterlast defined skgxpg parameter - ksxpN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           12       
    _skip_assume_msgif TRUE, skip assume message for consigns at the masterHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _skip_trstamp_checkSkip terminal recovery stamp checkN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    skip_unusable_indexesskip unusable indexes if set to TRUEN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _slave_mapping_enabledenable slave mapping when TRUEHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _slave_mapping_group_sizeforce the number of slave group in a slave mapperHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _slave_mapping_skew_ratiomaximum skew before slave mapping is disabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              22222
    _small_table_thresholdlower threshold level of table size for direct readsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden436436436436119119119118118118118118118118117117117117117
    _smm_advice_enabledif TRUE, enable v$pga_adviceHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _smm_advice_log_sizeoverwrites default size of the PGA advice workarea history logHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _smm_auto_cost_enabledif TRUE, use the AUTO size policy cost functionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _smm_auto_max_io_sizeMaximum IO size (in KB) used by sort/hash-join in auto modeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden254254254254248248248248248248248248248248248248248248248
    _smm_auto_min_io_sizeMinimum IO size (in KB) used by sort/hash-join in auto modeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden62626262565656565656565656565656565656
    _smm_boundoverwrites memory manager automatically computed boundHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _smm_freeable_retainvalue in KB of the instance freeable PGA memory to retainN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    512051205120512051205120512051205120512051205120512051205120
    _smm_isort_capmaximum work area for insertion sort(v1)N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       102400102400102400102400102400102400102400102400102400102400102400102400
    _smm_max_sizemaximum work area size in auto mode (serial)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000160216021602655365536553655365538355835583558355966620482048
    _smm_max_size_staticstatic maximum work area size in auto mode (serial)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 20482048
    _smm_min_sizeminimum work area size in auto modeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden128128128128128128128128128128128128128128128128128128128
    _smm_px_max_sizemaximum work area size in auto mode (global)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden00009615961596151638416384163841638416384208892088920889208892416651205120
    _smm_px_max_size_staticstatic maximum work area size in auto mode (global)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 51205120
    _smm_retain_sizework area retain size in SGA for shared server sessions (0 for AUTO)N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _smm_traceTurn on/off tracing for SQL memory managerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _smon_consume_postconsume any extra posts after completion of transaction recoveryHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    _smon_internal_errlimitlimit of SMON internal errorsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    _smon_undo_seg_rescan_limitlimit of SMON continous undo segments re-scanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden          101010101010101010
    smtp_out_serverutl_smtp server and port configuration parameterN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _smu_debug_mode<debug-flag> - set debug event for testing SMU operationsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _smu_error_simulation_sitesite ID of error simulation in KTU codeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _smu_error_simulation_typeerror type for error simulation in KTU codeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _smu_timeoutscomma-separated *AND double-quoted* list of AUM timeouts: mql, tur, sess_exprn, qry_exprn, slot_intvlN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    sort_area_retained_sizesize of in-memory sort work area retained between fetch callsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    sort_area_sizesize of in-memory sort work areaRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular65536655366553665536655366553665536655366553665536655366553665536655366553665536655366553665536
    _sort_elimination_cost_ratiocost ratio for sort eimination under first_rows modeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _sort_multiblock_read_countmulti-block read count for sortHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2222222222222222222
    _sort_space_for_write_bufferstenths of sort_area_size devoted to direct write buffersHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A1111111            
    _sort_spill_thresholdforce sort to spill to disk each time this many rows are receivedN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _sortmerge_inequality_join_offturns off sort-merge join on inequalityHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    sp_nameService Provider NameN/AN/AN/AN/ARegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A    101031010410105            
    _space_align_sizespace align sizeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1048576104857610485761048576104857610485761048576
    _spare_test_parameterSpare test parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _sparse_backing_filespecifies sparse backing fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 AVM 
    _spawn_diag_optsthread spawn diagnostic optionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _spawn_diag_thresh_secsthread spawn diagnostic minimal threshold in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              3030303030
    spfileserver parameter fileRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular/opt/oracle/pfile/spfile9204.ora/opt/oracle/pfile/spfile9206.ora/opt/oracle/pfile/spfile9207.ora/opt/oracle/pfile/spfile9208.ora/opt/oracle/pfile/spfile10103.ora/opt/oracle/pfile/spfile10104.ora/opt/oracle/pfile/spfile10105.ora/opt/oracle/pfile/spfile10201.ora/opt/oracle/pfile/spfile10202.ora/opt/oracle/pfile/spfile10203.ora/opt/oracle/pfile/spfile10204.ora/opt/oracle/pfile/spfile10205.ora/opt/oracle/pfile/spfile11106.ora/opt/oracle/pfile/spfile11107.ora/opt/oracle/pfile/spfile11201.ora/opt/oracle/pfile/spfile11202.ora/opt/oracle/pfile/spfile11203.ora/opt/oracle/pfile/spfile11204.ora 
    _spin_countAmount to spin waiting for a latchHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2000200020002000200020002000200020002000200020002000200020002000200020002000
    _spr_max_rulesmaximum number of rules in sql spreadsheetN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    100001000010000100001000010000100001000010000100001000010000100001000010000
    _spr_push_pred_refsprpush predicates through reference spreadsheetN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _spr_use_AW_ASenable AW for hash table in spreadsheetN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _spr_use_hash_tableuse hash table for spreadsheetN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    sql92_securityrequire select privilege for searched update/deleteRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _sql_analyze_enable_auto_txnSQL Analyze Autonomous Transaction control parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _sql_analyze_enable_auto_txnSQL Analyze Autonomous Transaction control parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           FALSE       
    _sql_analyze_parse_modelSQL Analyze Parse Model control parameterN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden           22222222
    _sql_compatibilitysql compatability bit vectorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              00000
    _sql_connect_capability_overrideSQL Connect Capability Table OverrideHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _sql_connect_capability_tableSQL Connect Capability Table (testing only)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _sql_hash_debugHash value of the SQL statement to debugN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _sql_model_unfold_forloopsspecifies compile-time unfolding of sql model forloopsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       RUN_TIMERUN_TIMERUN_TIMERUN_TIMERUN_TIMERUN_TIMERUN_TIMERUN_TIMERUN_TIMERUN_TIMERUN_TIMERUN_TIME
    _sql_ncg_modeOptimization mode for SQL NCGN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              OFFOFFOFFOFFOFF
    _sql_plan_baseline_capture_on_1_execWith auto-capture on, create new SQL plan baseline on first execN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            FALSE      
    sql_traceenable SQL traceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    sql_versionsql language version parameter for compatibility issuesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularN/AN/AN/AN/AN/ANATIVENATIVENATIVENATIVENATIVENATIVENATIVENATIVENATIVENATIVENATIVENATIVENATIVENATIVE     
    _sqlexec_progression_costsql execution progression monitoring cost thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden1000100010001000100010001000100010001000100010001000100010001000100010001000
    _sqlmon_binds_xml_formatformat of column binds_xml in [G]V$SQL_MONITORN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              defaultdefaultdefaultdefaultdefault
    _sqlmon_max_planMaximum number of plans entry that can be monitored. Defaults to 20 per CPUN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            40404040404040
    _sqlmon_max_planlinesNumber of plan lines beyond which a plan cannot be monitoredN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            300300300300300300300
    _sqlmon_recycle_timeMinimum time (in s) to wait before a plan entry can be recycledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              606060605
    _sqlmon_thresholdCPU/IO time threshold before a statement is monitored. 0 is disabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            5555555
    sqltune_categoryCategory qualifier for applying hintsetsN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    DEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULT
    _sqltune_category_parsedParsed category qualifier for applying hintsetsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    DEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULT
    _srvntfn_job_deq_timeoutsrvntfn job deq timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            60606060606060
    _srvntfn_jobsubmit_intervalsrvntfn job submit intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            3333333
    _srvntfn_max_concurrent_jobssrvntfn max concurrent jobsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            20202020202020
    _srvntfn_q_msgcountsrvntfn q msg count for job exitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            50505050505050
    _srvntfn_q_msgcount_incsrvntfn q msg count increase for job submitN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            100100100100100100100
    _sscr_dirSession State Capture and Restore DIRectory objectN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _sscr_osdirSession State Capture and Restore OS DIRectoryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _stack_guard_levelstack guard levelN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    standby_archive_deststandby database archivelog destination text stringRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch?/dbs/arch
    _standby_causal_heartbeat_timeoutreadable standby causal heartbeat timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              22222
    standby_file_managementif auto then files are created/dropped automatically on standbyRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUALMANUAL
    _standby_flush_modestandby flush modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              SLFLUSHSLFLUSHSLFLUSHSLFLUSHSLFLUSH
    _standby_implicit_rcv_timeoutminutes to wait for redo during standby implicit recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1111
    _standby_switchover_timeoutNumber of secords for standby switchover enqueue timeoutN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             120120120120120120
    star_transformation_enabledenable the use of star transformationRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _static_backgroundsstatic backgroundsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _statistics_based_srf_enabledenable/disable the use of statistics for storage reduction factorN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    statistics_levelstatistics levelRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICALTYPICAL
    _step_down_limit_in_pctstep down limit in percentageN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            1111111
    _stn_traceSQL tracing parameterN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A    0000000000     
    _storage_predicate_access_predicateput storage predicate into access predicate in explain planN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/A            0      
    _streams_pool_max_sizestreams pool maximum size when auto SGA enabledN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    streams_pool_sizesize in bytes of the streams poolN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular    000000000000000
    _subquery_pruning_cost_factorsubquery pruning cost factorHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden20202020202020202020202020202020202020
    _subquery_pruning_enabledenable the use of subquery predicates to perform pruningHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _subquery_pruning_mv_enabledenable the use of subquery predicates with MVs to perform pruningHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _subquery_pruning_reductionsubquery pruning reduction factorHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden50505050505050505050505050505050505050
    _switchover_to_standby_optionoption for graceful switchover to standbyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               OPEN_ONEOPEN_ONEOPEN_ALL_IGNORE_SESSIONSOPEN_ALL_IGNORE_SESSIONS
    _switchover_to_standby_switch_logSwitchover to standby switches log for open redo threadsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUEFALSETRUE
    _swrf_metric_frequent_modeEnable/disable SWRF Metric Frequent Mode CollectionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _swrf_mmon_dbfusEnable/disable SWRF MMON DB Feature UsageN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _swrf_mmon_flushEnable/disable SWRF MMON FLushingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _swrf_mmon_metricsEnable/disable SWRF MMON Metrics CollectionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _swrf_on_disk_enabledParameter to enable/disable SWRFN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _swrf_test_actiontest action parameter for SWRFN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _swrf_test_dbfusEnable/disable DB Feature Usage TestingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _sync_primary_wait_timewait time for alter session sync with primaryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               5555
    _synonym_repoint_tracingwhether to trace metadata comparisons for synonym repointingN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _sys_logon_delayfailed logon delay for sysN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 11
    _sysaux_test_paramtest parameter for SYSAUXN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    111111111111111
    _system_api_interception_debugenable debug tracing for system api interceptionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _system_index_cachingoptimizer percent system index cachingHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _system_trig_enabledare system triggers enabledHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _ta_lns_wait_for_arch_logLNS Wait time for arhcived version of online logN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       202020202020202020202020
    _table_lookup_prefetch_sizetable lookup prefetch vector sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden40404040404040404040404040404040404040
    _table_lookup_prefetch_threshtable lookup prefetch thresholdHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden2222222222222222222
    _table_scan_cost_plus_onebump estimated full table scan and index ffs cost by oneHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _tablespaces_per_transactionestimated number of tablespaces manipulated by each transactionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             101010101010
    tape_asynch_ioUse asynch I/O requests for tape devicesRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _target_rba_max_lag_percentagetarget rba max log lag percentageN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       909090909090908181818181
    _tdb_debug_modeset debug mode for testing transportable databaseN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       161616161616161616161616
    _temp_tran_block_thresholdnumber of blocks for a dimension before we temp transformHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden100100100100100100100100100100100100100100100100100100100
    _temp_tran_cachedetermines if temp table is created with cache optionHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _tenth_spare_parametertenth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _tenth_spare_parametertenth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _test_ksusigskiptest the function ksusigskipHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden5555555555555555555
    _test_param_1test parmeter 1 - integerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden25252525252525252525252525252525252525
    _test_param_2test parameter 2 - stringHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _test_param_3test parameter 3 - stringHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _test_param_4test parameter 4 - string listHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _test_param_5test parmeter 5 - deprecated integerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden25252525252525252525252525252525252525
    _test_param_6test parmeter 6 - size (ub8)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _test_param_7test parameter 7 - big integer listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 0 
    _test_spacebgtest space management background taskN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenN/AN/AN/AN/AN/A            00     
    _third_spare_parameterthird spare parameter - integerHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _thirteenth_spare_parameterthirteenth spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _thirteenth_spare_parameterthirteenth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _thirtieth_spare_parameterthirtieth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _thirty-eighth_spare_parameterthirty-eighth spare parameter - booleanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _thirty-fifth_spare_parameterthirty-fifth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _thirty-first_spare_parameterthirty-first spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _thirty-fourth_spare_parameterthirty-fourth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _thirty-nineth_spare_parameterthirty-nineth spare parameter - booleanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _thirty-second_spare_parameterthirty-second spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _thirty-seventh_spare_parameterthirty-seventh spare parameter - booleanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _thirty-sixth_spare_parameterthirty-sixth spare parameter - booleanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                 FALSE 
    _thirty-third_spare_parameterthirty-third spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    threadRedo thread to mountRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    _threshold_alerts_enableif 1, issue threshold-based alertsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    111111111111111
    timed_os_statisticsinternal os statistic gathering interval in secondsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular0000000000000000000
    timed_statisticsmaintain internal timing statisticsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _timemodel_collectionenable timemodel collectionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _timeout_actions_enabledenables or disables KSU timeout actionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _timer_precisionVKTM timer precision in milli-secN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            20201010101010
    _total_large_extent_memoryTotal memory for allocating large extentsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _tq_dump_periodtime period for duping of TQ statistics (s)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _trace_archivestart DIAG processHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _trace_buffer_flushestrace buffer flushes if otrace cacheIO event is setHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _trace_buffer_getstrace kcb buffer gets if otrace cacheIO event is setHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _trace_buffer_wait_timeoutstrace buffer busy wait timeoutsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _trace_buffer_wrap_timestampenable KST timestamp on trace buffer wrapN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A       TRUETRUETRUETRUETRUE       
    _trace_bufferstrace buffer sizes per processHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256ALL:256
    _trace_cr_buffer_createstrace cr buffer creates if otrace cacheIO event is setHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _trace_dump_all_procsif TRUE on error buckets of all processes will be dumped to the current trace fileN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _trace_dump_client_bucketsif TRUE dump client (ie. non-kst) bucketsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _trace_dump_cur_proc_onlyif TRUE on error just dump our process bucketN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _trace_dump_static_onlyif TRUE filter trace dumps to always loaded dllsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    trace_enabledenable in memory tracingRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _trace_eventstrace events enabled at startupHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _trace_file_sizemaximum size of trace file (in bytes)HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/A655366553665536655366553665536655366553665536655366553665536       
    _trace_files_publicCreate publicly accessible trace filesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _trace_flush_processestrace data archived by DIAG for these processesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AALLALLALLALLALLALLALLALLALLALLALLALL       
    _trace_instance_terminationtrace instance termination actionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSE            
    _trace_kqlidptrace kqlidp0 operationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _trace_multi_block_readstrace multi_block reads if otrace cacheIO event is setHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE       
    _trace_navigation_scopeenabling trace navigation linkingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    globalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobalglobal
    _trace_optionstrace data flush optionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/Atext,multipletext,multipletext,multipletext,multipletext,multipletext,multipletext,multipletext,multipletext,multipletext,multipletext,multipletext,multiple       
    _trace_pin_timetrace how long a current pin is heldHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden000000000000000000FALSE
    _trace_pool_sizetrace pool size in bytesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _trace_processesenable KST tracing in processHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenALLALLALLALLALLALLALLALLALLALLALLALLALLALLALLALLALLALLALL
    _trace_virtual_columnstrace virtual columns exprsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    tracefile_identifiertrace file custom identifierRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _track_metrics_memoryEnable/disable Metrics Memory TrackingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 TRUETRUE
    transaction_auditingtransaction auditing records generated in the redo logRegularRegularRegularRegularHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _transaction_recovery_serversmax number of parallel recovery slaves that may be usedHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    transactionsmax. number of concurrent active transactionsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular414141414141415353535353126126189189354354354
    transactions_per_rollback_segmentnumber of active transactions per rollback segmentRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular5555555555555555555
    _transient_logical_clear_hold_mrp_bitclear KCCDI2HMRP flag during standby recoveryN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             FALSEFALSEFALSEFALSEFALSEFALSE
    _truncate_optimization_enableddo truncate optimization if set to TRUEN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _tsenc_tracingEnable TS encryption tracingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            0000000
    _tsm_connect_stringTSM test connect stringN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _tsm_disable_auto_cleanupDisable TSM auto cleanup actionsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       111111111111
    _tstz_localtime_bypassShould TTC not convert to LocalTime to preserve Timestamp with Timezone valuesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSEFALSE
    _tts_allow_charset_mismatchallow plugging in a tablespace with an incompatible character setN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _tts_allow_nchar_mismatchallow plugging in a tablespace with a different national charactHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    _twelfth_spare_parametertwelfth spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _twelfth_spare_parametertwelfth spare parameter - integerN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _twentieth_spare_parametertwentieth spare parameter - stringN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden                   
    _twentieth_spare_parametertwentieth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A                   
    _twenty-eighth_spare_parametertwenty-eighth spare parameter - booleanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                  FALSE
    _twenty-fifth_spare_parametertwenty-fifth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _twenty-first_spare_parametertwenty-first spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _twenty-fourth_spare_parametertwenty-fourth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _twenty-nineth_spare_parametertwenty-nineth spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/A                   
    _twenty-second_spare_parametertwenty-second spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _twenty-seventh_spare_parametertwenty-seventh spare parameter - booleanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                  FALSE
    _twenty-sixth_spare_parametertwenty-sixth spare parameter - booleanN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                  FALSE
    _twenty-third_spare_parametertwenty-third spare parameter - string listN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                   
    _two_passenable two-pass thread recoveryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _two_pass_reverse_polish_enableduses two-pass reverse polish alg. to generate canonical formsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _uga_cga_large_extent_sizeUGA/CGA large extent sizeN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    262144262144262144262144262144262144262144262144262144262144262144262144262144262144262144
    _ultrafast_latch_statisticsmaintain fast-path statistics for ultrafast latchesN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _undo_autotuneenable auto tuning of undo_retentionN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _undo_block_compressionenable undo block compressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _undo_debug_modedebug flag for undo related operationsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _undo_debug_usageinvoke undo usage functions for testingN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    undo_managementinstance runs in SMU mode if TRUE, else in RBU modeRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO
    undo_retentionundo retention in secondsRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular900900900900900900900900900900900900900900900900900900900
    undo_suppress_errorsSuppress RBU errors in SMU modeRegularRegularRegularRegularN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSE               
    undo_tablespaceuse/switch undo tablespaceRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBSUNDOTBS
    _union_rewrite_for_gsexpand queries with GSets into UNIONs for rewriteHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenCHOOSECHOOSECHOOSECHOOSEYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVSYES_GSET_MVS
    _unnest_notexists_squnnest NOT EXISTS subquery with one or more tables if possibleHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ASINGLESINGLESINGLESINGLE               
    _unnest_subqueryenables unnesting of complex subqueriesHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _unused_block_compressionenable unused block compressionN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _update_datafile_headers_with_space_informationuser requested update of datafile headers of locally managed datafiles with space informationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _use_adaptive_log_file_syncAdaptively switch between post/wait and pollingN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSETRUETRUETRUE
    _use_best_fituse best fit to allocate spaceN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _use_column_stats_for_functionenable the use of column statistics for DDP functionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _use_hybrid_encryption_modeEnable platform optimized encryption in hybrid modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUEFALSEFALSEFALSE
    use_indirect_data_buffersEnable indirect data buffers (very large SGA on 32-bit platforms)RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _use_ismEnable Shared Page Tables - ISMHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _use_ism_for_pgaUse ISM for allocating large extentsN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    use_large_pagesUse large pages if available (TRUE/FALSE/ONLY)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegular               TRUETRUETRUETRUE
    _use_new_explain_planif TRUE, use the AUTO size policy cost functionsHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AFALSEFALSEFALSEFALSEFALSEFALSEFALSE            
    _use_nosegment_indexesuse nosegment indexes in explain planHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _use_platform_compression_libEnable platform optimized compression implementationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              FALSEFALSEFALSEFALSETRUE
    _use_platform_encryption_libEnable platform optimized encryption implementationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    _use_realfree_heapuse real-free based allocator for PGA memoryHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _use_seq_process_cachewhether to use process local seq cacheHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _use_vector_postuse vector postHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _use_zero_copy_ioShould network vector IO interface be used for data transferN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    utl_file_dirutl_file accessible directories listRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegular                   
    _validate_flashback_databaseScan database to validate result of flashback databaseN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _validate_metric_groupsEnable/disable SGA Metric Structure validationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 FALSEFALSE
    _validate_readmem_redovalidate redo blocks read from in-memory log bufferN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             OFFOFFOFFOFFHEADER_ONLYHEADER_ONLY
    _vendor_lib_locVendor library search root directoryN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _verify_fg_log_checksumLGWR verifies redo checksums generated by foreground processesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               FALSEFALSEFALSEFALSE
    _verify_flashback_redoVerify that the redo logs needed for flashback are availableN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _verify_undo_quotaTRUE - verify consistency of undo quota statisticsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _very_large_object_thresholdupper threshold level of object size for direct readsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              500500500500500
    _very_large_partitioned_tablevery_large_partitioned_tableN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       102410241024102410241024102410241024102410241024
    _virtual_column_overload_allowedoverload virtual columns expressionN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _vkrm_schedule_intervalVKRM scheduling intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHidden              1010101010
    _vktm_assert_threshsoft assert threshold VKTM timer driftN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               30303030
    _wait_breakup_threshold_csecsWait breakup threshold (in centiseconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            600600600600600600600
    _wait_breakup_time_csecsWait breakup time (in centiseconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            300300300300300300300
    _wait_for_syncwait for sync on commit MUST BE ALWAYS TRUEHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _wait_samples_max_sectionsWait Samples maximum sectionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             404040404040
    _wait_samples_max_sectionsWait Samples maximum sectionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           40       
    _wait_samples_max_time_secsWait Samples maximum time in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenN/AN/AN/AN/AN/AN/AN/A           120       
    _wait_samples_max_time_secsWait Samples maximum time in secondsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             120120120120120120
    _wait_tracker_interval_secsWait Tracker number of seconds per intervalN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             101010101010
    _wait_tracker_num_intervalsWait Tracker number of intervalsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHidden             000000
    _wait_yield_hp_modeWait Yield - High Priority ModeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               yieldyieldyieldyield
    _wait_yield_modeWait Yield - ModeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               yieldyieldyieldyield
    _wait_yield_sleep_freqWait Yield - Sleep FrequencyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               100100100100
    _wait_yield_sleep_time_msecsWait Yield - Sleep Time (in milliseconds)N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               1111
    _wait_yield_yield_freqWait Yield - Yield FrequencyN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               20202020
    _walk_insert_thresholdmaximum number of unusable blocks to walk across freelistHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden0000000000000000000
    _watchpoint_onis the watchpointing feature turned on?HiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _wcr_grv_cache_sizeOracle internal: Set the replay cache size for WRR$_REPLAY_DATA.N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 6553565535
    _wcr_seq_cache_sizeOracle internal: Set the replay cache size for WRR$_REPLAY_SEQ_DATA.N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 6553565535
    _windowfunc_optimization_settingssettings for window function optimizationsN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _with_subqueryWITH subquery transformationN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden           OPTIMIZEROPTIMIZEROPTIMIZEROPTIMIZEROPTIMIZEROPTIMIZEROPTIMIZEROPTIMIZER
    workarea_size_policypolicy used to size SQL working areas (MANUAL/AUTO)RegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularRegularMANUALMANUALMANUALMANUALAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO
    _write_cloneswrite clones flagHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden3333333333333333333
    _xa_internal_retriesnumber of internal retries for xa transactionsN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHidden                 600600
    _xengem_devnameoverride default VM GEM device name used by skgvmN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               DEFAULTDEFAULTDEFAULTDEFAULT
    _xengem_diagmodeset to OFF to disable VM GEM support and functionalitiesN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               OFFOFFOFFOFF
    _xengem_enabledEnable OVM GEM supportN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHidden               TRUETRUETRUETRUE
    xml_db_eventsare XML DB events enabledN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ARegularRegularRegularRegularRegularRegularRegular            enableenableenableenableenableenableenable
    _xpl_peeked_binds_log_sizemaximum bytes for logging peeked bind values for V$SQL_PLAN (0 = OFF)N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       819281928192819281928192819281928192819281928192
    _xpl_traceExplain Plan tracing parameterN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       000000000000
    _xsolapi_auto_materialization_boundOLAP API lower bound for auto materialization.N/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    202020202020202020202020202020
    _xsolapi_auto_materialization_typeOLAP API behavior for auto materializationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    PRED_ONLYPRED_ONLYPRED_ONLYPRED_AND_RCPRED_AND_RCPRED_AND_RCPRED_AND_RCPRED_AND_RCPRED_AND_RCPRED_AND_RCPRED_AND_RCPRED_AND_RCPRED_AND_RCPRED_AND_RCPRED_AND_RC
    _xsolapi_build_traceOLAP API output build info to trace file N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _xsolapi_cursor_max_rows_to_cache_per_reqOLAP API max rows to cache per requestHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A15000150001500015000150001500015000            
    _xsolapi_cursor_max_time_for_partial_cacheOLAP API cursor max execute time for partial cacheHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A5000500050005000500050005000            
    _xsolapi_cursor_use_row_cacheOLAP API enable cursor cachingHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ATRUETRUETRUETRUETRUETRUETRUE            
    _xsolapi_debug_outputOLAP API debug output dispositionHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden            SUPPRESSSUPPRESSSUPPRESSSUPPRESSSUPPRESSSUPPRESSSUPPRESS
    _xsolapi_densify_cubesOLAP API cube densificationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TABULARTABULARTABULARTABULARTABULARTABULARTABULARTABULARTABULARTABULARTABULARTABULARTABULARTABULARTABULAR
    _xsolapi_dimension_group_creationOLAP API symmetric overfetchHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCHOVERFETCH
    _xsolapi_dml_traceOLAP API output dml commands and expressions to trace file N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSE     
    _xsolapi_fetch_typeOLAP API fetch typeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIALPARTIAL
    _xsolapi_fix_vptrsOLAP API Enable vptr fixing logic in shared server modeN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSETRUETRUETRUETRUETRUETRUE
    _xsolapi_generate_with_clauseOLAP API generates WITH clause?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _xsolapi_hierarchy_value_typeOLAP API hierarchy value typeN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        uniqueuniqueuniqueuniqueuniqueuniqueuniqueuniqueuniqueuniqueunique
    _xsolapi_load_at_process_startWhen to load OLAP API library at server process startN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    NEVERNEVERNEVERNEVERNEVERNEVERNEVERNEVERNEVERNEVERNEVERNEVERNEVERNEVERNEVER
    _xsolapi_materialization_rowcache_min_rows_for_useOLAP API min number of rows required to use rowcache in query materializationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    111111111111111
    _xsolapi_materialize_sourcesOLAP API Enable source materializationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_metadata_reader_modeOLAP API metadata reader modeN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        ALLALLALLALL11_ONLYDEFAULTDEFAULTDEFAULTDEFAULTDEFAULTDEFAULT
    _xsolapi_odbo_modeOLAP API uses ODBO mode?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _xsolapi_opt_aw_positionOLAP API enables AW position and count optimization?N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            TRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_optimize_suppressionOLAP API optimizes suppressions?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_precompute_subqueryOLAP API precomputes subqueries?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_remove_columns_for_materializationOLAP API removes columns for materialization?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_set_nlsOLAP API sets NLS?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_share_executorsOLAP API share executors?N/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_source_traceOLAP API output Source definitions to trace file N/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden       FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _xsolapi_source_traceOLAP API output Source definitions to trace file N/AHiddenHiddenHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/A FALSEFALSEFALSE               
    _xsolapi_sql_all_multi_join_non_base_hintsOLAP API multi-join non-base hintsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _xsolapi_sql_all_non_base_hintsOLAP API non-base hintsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _xsolapi_sql_auto_dimension_hintsOLAP API enable automatic dimension hintsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _xsolapi_sql_auto_measure_hintsOLAP API enable automatic measure hintsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_sql_dimension_hintsOLAP API dimension hintsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _xsolapi_sql_enable_aw_joinOLAP API enables AW join?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_sql_enable_aw_qdr_mergeOLAP API enables AW QDR merge?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_sql_hintsOLAP API generic hintsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _xsolapi_sql_measure_hintsOLAP API measure hintsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _xsolapi_sql_minus_thresholdOLAP API SQL MINUS thresholdN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden         1000100010001000100010001000100010001000
    _xsolapi_sql_optimizeOLAP API enable optimizationHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_sql_prepare_stmt_cache_sizeOLAP API prepare statement cache sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden16161616161616161616161616161616161616
    _xsolapi_sql_remove_columnsOLAP API enable remove unused columns optimizationsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_sql_result_set_cache_sizeOLAP API result set cache sizeHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden32323232323232323232323232323232323232
    _xsolapi_sql_symmetric_predicateOLAP API enable symmetric predicate for dimension groupsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenTRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_sql_top_dimension_hintsOLAP API top dimension hintsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _xsolapi_sql_top_measure_hintsOLAP API top measure hintsHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden                   
    _xsolapi_sql_use_bind_variablesOLAP API enable bind variables optimizationN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_sql_use_bind_variables.OLAP API enable bind variables optimizationHiddenN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/ATRUE                  
    _xsolapi_stringify_order_levelsOLAP API stringifies order levels?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _xsolapi_support_mtmOLAP API MTM mapping classes supported?N/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHidden            FALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _xsolapi_suppression_aw_mask_thresholdOLAP API suppression AW mask thresholdN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        10001000100010001000100010001000100010001000
    _xsolapi_suppression_chunk_sizeOLAP API suppression chunk sizeN/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        40004000400040004000400040004000400040004000
    _xsolapi_use_modelsOLAP API uses models?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_use_olap_dmlOLAP API uses OLAP DML?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        TRUETRUETRUETRUETRUETRUETRUETRUETRUETRUETRUE
    _xsolapi_use_olap_dml_for_rankOLAP API uses OLAP DML for rank?N/AN/AN/AN/AN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden        FALSEFALSEFALSEFALSETRUETRUETRUETRUETRUETRUETRUE
    _xt_coverageexternal tables code coverage parameterN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    nonenonenonenonenonenonenonenonenonenonenonenonenonenonenone
    _xt_traceexternal tables trace parameterN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    nonenonenonenonenonenonenonenonenonenonenonenonenonenonenone
    _xtbuffer_sizebuffer size in KB needed for populate/query operationN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    000000000000000
    _xtts_allow_pre10allow cross platform for pre10 compatible tablespaceN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _xtts_set_platform_infoset cross platform info during file header readN/AN/AN/AN/AHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHidden    FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
    _yield_check_intervalinterval to check whether actses should yieldHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenHiddenN/AN/AN/AN/AN/A100000100000100000100000100000100000100000100000100000100000100000100000100000100000     
    + +
    + + + + \ No newline at end of file diff --git a/vg/partitioned_table_examples.sql b/vg/partitioned_table_examples.sql new file mode 100644 index 0000000..58c9704 --- /dev/null +++ b/vg/partitioned_table_examples.sql @@ -0,0 +1,42 @@ +/* Daily INTERVAL Partition Example */ + +create table tab_range_interval_partioned +( + col1 DATE NOT NULL + , col2 VARCHAR2(20) +) +partition by RANGE (col1) INTERVAL ( NUMTODSINTERVAL(1,'DAY') ) +( + PARTITION part_01 values LESS THAN ( TO_DATE('01-SEP-2014','DD-MON-YYYY') ) +); + + +alter table tab_range_interval_partioned +add constraint tab1_PK +primary key (col1) using index LOCAL +PCTFREE 0 TABLESPACE USERS ENABLE +; + +create unique index tab1_PK on tab_range_interval_partioned(col1) LOCAL ; + +alter table tab_range_interval_partioned +add constraint tab1_PK +primary key (col1) using index tab1_PK +ENABLE +; + + + +create table tab_range_interval_partioned +( + col1 NUMBER NOT NULL + , col2 VARCHAR2(20) +) +partition by RANGE (col1 ) INTERVAL ( 1000 ) +( + PARTITION part_01 values LESS THAN ( 1000 ) +); + + + + diff --git a/vg/pdbs.sql b/vg/pdbs.sql new file mode 100644 index 0000000..0007041 --- /dev/null +++ b/vg/pdbs.sql @@ -0,0 +1,49 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Pluggable databases +* Versions : 12.1 and above +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Aug-15 Vishal Gupta Created +*/ + + +PROMPT +PROMPT ********************************************* +PROMPT * Pluggable Databases +PROMPT ********************************************* + + +COLUMN con_id HEADING "Con|ID" FORMAT 999 +COLUMN dbid HEADING "DBID" FORMAT 9999999999999 +COLUMN name HEADING "PluggableDBName" FORMAT a20 +COLUMN open_mode HEADING "OpenMode" FORMAT a10 +COLUMN restricted HEADING "Restricted" FORMAT a10 +COLUMN open_time HEADING "OpenTime" FORMAT a35 +COLUMN total_size HEADING "Total|Size|(MB)" FORMAT 999,999,999 +COLUMN block_size HEADING "Block|Size" FORMAT 99,999 +COLUMN recovery_status HEADING "Recovery|Status" FORMAT a10 +COLUMN snapshot_parent_con_id HEADING "Snapshot|Parent|Con ID" FORMAT 999 + +SELECT p.con_id + , p.dbid + , p.name + , p.open_mode + , p.restricted + , p.open_time + , ROUND(p.total_size/power(1024,2)) total_size + , p.block_size + , p.recovery_status + , p.snapshot_parent_con_id + FROM gv$pdbs p +; + + +@@footer \ No newline at end of file diff --git a/vg/pga_details.sql b/vg/pga_details.sql new file mode 100644 index 0000000..186f232 --- /dev/null +++ b/vg/pga_details.sql @@ -0,0 +1,96 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display pga details of various sessions +* Compability: +* Parameters : 1 - INST_ID - Default Value - %, (Use % as wildcard) +* 2 - SID - Default Value - %, (Use % as wildcard) +* 3 - Where clause to filter the data. +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Nov-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE SID +UNDEFINE WHERE_CLAUSE + +DEFINE INST_ID="&&1" +DEFINE SID="&&2" +DEFINE WHERE_CLAUSE="&&3" + + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _TOP_ROWCOUNT NEW_VALUE TOP_ROWCOUNT NOPRINT +COLUMN _WHERE_CLAUSE NEW_VALUE WHERE_CLAUSE NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , TRIM(DECODE('&&SID','','%','&&SID')) "_SID" + -- , DECODE('&&WHERE_CLAUSE','','','&&WHERE_CLAUSE') "_WHERE_CLAUSE" +FROM DUAL; +set term on + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +PROMPT *************************************************************** +PROMPT * Process PGA Details +PROMPT * +PROMPT * Input Parameters +PROMPT * - INST_ID = '&&INST_ID' +PROMPT * - SID = '&&SID' +PROMPT * - WHERE_CLAUSE = "&&WHERE_CLAUSE" +PROMPT *************************************************************** + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN sid FORMAT 9999 +COLUMN separator HEADING "!|!|!|!" FORMAT a1 + +SELECT c.sid + , c.serial# + , s.type "SessionType" + , s.username + , MAX(DECODE(c.name,'session pga memory',c.value)) current_pga + , MAX(DECODE(m.NAME,'session pga memory max',c.VALUE)) max_pga + , '|' separator + , MAX(DECODE(c.NAME,'session uga memory',c.VALUE)) current_uga + , MAX(DECODE(m.NAME,'session uga memory max',c.VALUE)) max_uga + , '|' separator + , MAX(DECODE(e.NAME,'workarea_size_policy',e.VALUE)) param_workarea_size_policy + , MAX(DECODE(e.name,'hash_area_size',e.value)) param_hash_area_size + , MAX(DECODE(e.NAME,'sort_area_size',e.VALUE)) param_sort_area_size + , MAX(DECODE(e.NAME,'sort_area_retained_size',e.VALUE)) param_sort_area_retained_size + , MAX(DECODE(e.NAME,'bitmap_merge_area_size',e.VALUE)) param_bitmap_merge_area_size + , '|' separator + FROM sys.curpgauga c + , sys.maxpgauga m + , gv$ses_optimizer_env e + , gv$session s + WHERE c.sid = m.sid + AND c.serial# = m.serial# + AND e.inst_id = USERENV('Instance') + AND e.SID = c.SID + AND s.inst_id = e.inst_id + AND s.SID = e.SID + &&WHERE_CLAUSE +GROUP BY c.sid + , c.serial# + , s.type + , s.username +; + + +@@footer diff --git a/vg/pga_memory_details.sql b/vg/pga_memory_details.sql new file mode 100644 index 0000000..773f3ae --- /dev/null +++ b/vg/pga_memory_details.sql @@ -0,0 +1,67 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display PGA Memory Details +* Parameter : 1 - PID (From gv$process.pid ) +* 2 - Instance Number (Defaults to 1) +* +* Reference : Note 822527.1 - How To Find Where The Memory Is Growing For A Process +* Note 199746.1 - How to Resolve ORA-4030 Errors on UNIX +* +* +* Notes : To populate v$pga_memory_detail view, execute either of following command +* using pid=1 enables/disables this event for all processes. +* +* - alter session set events 'immediate trace name PGA_DETAIL_GET ' ; +* or +* - ORADEBUG setorapid +* ORADEBUG DUMP PGA_DETAIL_GET +* +* To dump pga memory details to trace file, execute either of the following command +* - alter session set events 'immediate trace name PGA_DETAIL_DUMP ' ; +* or +* - ORADEBUG setorapid +* ORADEBUG DUMP PGA_DETAIL_DUMP +* +* To Cancel or turn off the event +* - alter session set events 'immediate trace name PGA_DETAIL_CANCEL ' ; +* or +* - ORADEBUG setorapid +* ORADEBUG DUMP PGA_DETAIL_CANCEL +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Jun-12 Vishal Gupta Created +* +*/ + + +/* +select * from v$process; +select * from v$process_group; +select * from v$process_memory where pid = 2; +select * from v$process_memory_detail where pid = 23 ; +select * from v$process_memory_detail_prog; +select * from dba_hist_process_mem_summary; +*/ + +select p.pid + , p.name + , LPAD ('>',(level -1 ) * 4,'|---' ) || p.heap_name +-- , p.heap_descriptor +-- , p.parent_heap_descriptor + , p.bytes + , p.category + , p.allocation_count +from gv$process_memory_detail p +where p.pid like &&PID + AND p.inst_id LIKE &&INST_ID +connect by PRIOR heap_descriptor = parent_heap_descriptor +start with parent_heap_descriptor = '00' +--ORDER BY level,p.parent_heap_descriptor || '.' || p.heap_descriptor +; + diff --git a/vg/pga_stats.sql b/vg/pga_stats.sql new file mode 100644 index 0000000..708357f --- /dev/null +++ b/vg/pga_stats.sql @@ -0,0 +1,110 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display PGA statistics +* Parameter : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------------------------------ +* 06-Jun-13 Vishal Gupta Modified AllInst calculations, ordered the statistics in logical order +* 27-Jun-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_FORMAT=999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + + + + + +PROMPT +PROMPT ************************* +PROMPT * PGA Statistics +PROMPT ************************* + + + +COLUMN name HEADING "Name" FORMAT a40 +COLUMN unit HEADING "Unit" FORMAT a10 +COLUMN all_inst_value HEADING "AllInst" FORMAT &&COUNT_FORMAT +COLUMN inst1_value HEADING "Inst1" FORMAT &&COUNT_FORMAT +COLUMN inst2_value HEADING "Inst2" FORMAT &&COUNT_FORMAT +COLUMN inst3_value HEADING "Inst3" FORMAT &&COUNT_FORMAT +COLUMN inst4_value HEADING "Inst4" FORMAT &&COUNT_FORMAT +COLUMN inst5_value HEADING "Inst5" FORMAT &&COUNT_FORMAT +COLUMN inst6_value HEADING "Inst6" FORMAT &&COUNT_FORMAT +COLUMN inst7_value HEADING "Inst7" FORMAT &&COUNT_FORMAT +COLUMN inst8_value HEADING "Inst8" FORMAT &&COUNT_FORMAT + +SELECT p.name + , DECODE(p.unit, 'bytes','&&BYTES_HEADING', p.unit) unit + , DECODE(p.unit + ,'bytes', SUM(p.value)/&&BYTES_DIVIDER + ,'percent', AVG(p.value) + ,SUM(p.value) + ) all_inst_value + , SUM(DECODE(p.inst_id, 1, DECODE(p.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst1_value + , SUM(DECODE(p.inst_id, 2, DECODE(p.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst2_value + , SUM(DECODE(p.inst_id, 3, DECODE(p.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst3_value + , SUM(DECODE(p.inst_id, 4, DECODE(p.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst4_value + , SUM(DECODE(p.inst_id, 5, DECODE(p.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst5_value + , SUM(DECODE(p.inst_id, 6, DECODE(p.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst6_value + , SUM(DECODE(p.inst_id, 7, DECODE(p.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst7_value + , SUM(DECODE(p.inst_id, 8, DECODE(p.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst8_value + FROM gv$pgastat p +GROUP BY p.name + , p.unit +ORDER BY DECODE(p.name + ,'aggregate PGA target parameter',1 + ,'aggregate PGA auto target',2 + ,'cache hit percentage',3 + ,'',4 + ,'total PGA allocated',5 + ,'total PGA inuse',6 + ,'total freeable PGA memory',7 + ,'total PGA used for auto workareas',8 + ,'total PGA used for manual workareas',9 + ,'',10 + ,'max processes count',11 + ,'process count',12 + ,'maximum PGA allocated',13 + ,'maximum PGA used for auto workareas',14 + ,'maximum PGA used for manual workareas',15 + ,'over allocation count',16 + ,'bytes processed',17 + ,'extra bytes read/written',18 + ,'PGA memory freed back to OS',19 + ,99) +; + + +@@footer diff --git a/vg/pgausage.sql b/vg/pgausage.sql new file mode 100644 index 0000000..ab00180 --- /dev/null +++ b/vg/pgausage.sql @@ -0,0 +1,280 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display pga usage +* Compability: 10.x, 11.x +* Parameters : 1 - INST_ID - Default Value - %, (Use % as wildcard) +* 2 - TOP_ROWCOUNT - Default Value - 30 +* 3 - WHERE CLAUSE - Default Value - '' +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 25-Feb-13 Vishal Gupta Added instance level summary +* 16-Oct-12 Vishal Gupta Re-ordered output columns +* 10-Jul-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE TOP_ROWCOUNT +UNDEFINE WHERE_CLAUSE + +DEFINE INST_ID="&&1" +DEFINE TOP_ROWCOUNT="&&2" +DEFINE WHERE_CLAUSE="&&3" + + +set term off +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _TOP_ROWCOUNT NEW_VALUE TOP_ROWCOUNT NOPRINT +COLUMN _WHERE_CLAUSE NEW_VALUE WHERE_CLAUSE NOPRINT +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , TRIM(DECODE('&&TOP_ROWCOUNT','',30,'&&TOP_ROWCOUNT')) "_TOP_ROWCOUNT" + -- , DECODE('&&WHERE_CLAUSE','','','&&WHERE_CLAUSE') "_WHERE_CLAUSE" +FROM DUAL; +set term on + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE BYTES_LARGE_FORMAT="9,999,999" +DEFINE BYTES_FORMAT="99,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + + + +PROMPT *---------------------------------------------------* +PROMPT * Input Parameters +PROMPT * - INST_ID = '&&INST_ID' +PROMPT * - TOP_ROWCOUNT = '&&TOP_ROWCOUNT' +PROMPT * - WHERE_CLAUSE = '&&WHERE_CLAUSE' +PROMPT *- -------------------------------------------------* + + +COLUMN seperator HEADING "!|!|!" FORMAT a1 +COLUMN seperator1 HEADING "!|!|!|!" FORMAT a1 +COLUMN seperator2 HEADING "!|!|!|!" FORMAT a1 +COLUMN seperator3 HEADING "!|!|!|!" FORMAT a1 +COLUMN seperator4 HEADING "!|!|!|!" FORMAT a1 + +COLUMN sid FORMAT 9999 +COLUMN serial# FORMAT 99999 +COLUMN logon_time FORMAT a15 +COLUMN status FORMAT a10 +COLUMN spid FORMAT a6 +COLUMN username FORMAT a20 +COLUMN machine FORMAT a20 TRUNCATE +COLUMN program FORMAT a10 TRUNCATE +COLUMN osuser FORMAT a20 TRUNCATE +COLUMN total_allocated HEADING "Total|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT +COLUMN unfreeable HEADING "UnFree|able|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN freeable HEADING "Free|able|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN sql_allocated HEADING "SQL|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN plsql_allocated HEADING "PL/SQL|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN olap_allocated HEADING "OLAP|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN java_allocated HEADING "Java|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN other_allocated HEADING "Other|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT + +COLUMN total_used HEADING "Total|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT +COLUMN sql_used HEADING "SQL|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN plsql_used HEADING "PL/SQL|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN olap_used HEADING "OLAP|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN java_used HEADING "Java|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN other_used HEADING "Other|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT + +COLUMN total_max_allocated HEADING "Total|Max|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT +COLUMN sql_max_allocated HEADING "SQL|Max|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN plsql_max_allocated HEADING "PL/SQL|Max|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN olap_max_allocated HEADING "OLAP|Max|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN java_max_allocated HEADING "Java|Max|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN other_max_allocated HEADING "Other|Max|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF total_allocated FORMAT &&BYTES_LARGE_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF unfreeable FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF freeable FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF sql_allocated FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF plsql_allocated FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF olap_allocated FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF java_allocated FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF other_allocated FORMAT &&BYTES_FORMAT ON REPORT + +COMPUTE SUM LABEL 'Total' OF total_used FORMAT &&BYTES_LARGE_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF sql_used FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF plsql_used FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF olap_used FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF java_used FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF other_used FORMAT &&BYTES_FORMAT ON REPORT + +COMPUTE SUM LABEL 'Total' OF total_max_allocated FORMAT &&BYTES_LARGE_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF sql_max_allocated FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF plsql_max_allocated FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF olap_max_allocated FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF java_max_allocated FORMAT &&BYTES_FORMAT ON REPORT +COMPUTE SUM LABEL 'Total' OF other_max_allocated FORMAT &&BYTES_FORMAT ON REPORT + + +PROMPT +PROMPT *-------------------------------------------------------------------* +PROMPT * I N S T A N C E L E V E L P G A U S A G E S U M M A R Y * +PROMPT *-------------------------------------------------------------------* + + + + +COLUMN inst_id HEADING "Instance" FORMAT 9999999 + + SELECT inst_id + , ROUND(SUM(allocated)/ &&BYTES_DIVIDER) total_allocated + , ROUND(SUM(DECODE(category,'Freeable',allocated,0))/ &&BYTES_DIVIDER) freeable + , ROUND((SUM(allocated) - SUM(DECODE(category,'Freeable',allocated,0)))/ &&BYTES_DIVIDER) unfreeable + , '|' seperator + , ROUND(SUM(DECODE(category,'SQL',allocated,0))/ &&BYTES_DIVIDER) sql_allocated + , ROUND(SUM(DECODE(category,'PL/SQL',allocated,0))/ &&BYTES_DIVIDER) plsql_allocated + , ROUND(SUM(DECODE(category,'OLAP',allocated,0))/ &&BYTES_DIVIDER) olap_allocated + , ROUND(SUM(DECODE(category,'JAVA',allocated,0))/ &&BYTES_DIVIDER) java_allocated + , ROUND(SUM(DECODE(category,'Other',allocated,0))/ &&BYTES_DIVIDER) other_allocated + , '|' seperator + , ROUND(SUM(used)/ &&BYTES_DIVIDER) total_used + , ROUND(SUM(DECODE(category,'SQL',used,0))/ &&BYTES_DIVIDER) sql_used + , ROUND(SUM(DECODE(category,'PL/SQL',used,0))/ &&BYTES_DIVIDER) plsql_used + , ROUND(SUM(DECODE(category,'OLAP',used,0))/ &&BYTES_DIVIDER) olap_used + , ROUND(SUM(DECODE(category,'JAVA',used,0))/ &&BYTES_DIVIDER) java_used + , ROUND(SUM(DECODE(category,'Other',used,0)) / &&BYTES_DIVIDER) other_used + , '|' seperator + FROM gv$process_memory m + WHERE m.inst_id LIKE '&&INST_ID' + GROUP BY inst_id + ORDER BY inst_id +; + +PROMPT +PROMPT *-----------------------------------------------------------* +PROMPT * U S E R L E V E L P G A U S A G E S U M M A R Y * +PROMPT *-----------------------------------------------------------* + +SELECT * FROM ( + SELECT s.username + , ROUND(SUM(allocated)/ &&BYTES_DIVIDER) total_allocated + , ROUND(SUM(DECODE(category,'Freeable',allocated,0))/ &&BYTES_DIVIDER) freeable + , ROUND((SUM(allocated) - SUM(DECODE(category,'Freeable',allocated,0)))/ &&BYTES_DIVIDER) unfreeable + , '|' seperator + , ROUND(SUM(DECODE(category,'SQL',allocated,0))/ &&BYTES_DIVIDER) sql_allocated + , ROUND(SUM(DECODE(category,'PL/SQL',allocated,0))/ &&BYTES_DIVIDER) plsql_allocated + , ROUND(SUM(DECODE(category,'OLAP',allocated,0))/ &&BYTES_DIVIDER) olap_allocated + , ROUND(SUM(DECODE(category,'JAVA',allocated,0))/ &&BYTES_DIVIDER) java_allocated + , ROUND(SUM(DECODE(category,'Other',allocated,0))/ &&BYTES_DIVIDER) other_allocated + FROM gv$process_memory m + , gv$process p + , gv$session s + WHERE m.inst_id = p.inst_id + AND m.pid = p.pid + AND p.inst_id = s.inst_id + AND p.addr = s.paddr + AND m.inst_id LIKE '&&INST_ID' + &&WHERE_CLAUSE + GROUP BY s.username + ORDER BY SUM(allocated) desc nulls last +) +WHERE rownum <= LEAST (&&top_rowcount,10) +; + + +PROMPT +PROMPT +PROMPT *---------------------------------------* +PROMPT * TOP &&TOP_ROWCOUNT PGA Using Process +PROMPT *---------------------------------------* + +COLUMN inst_id HEADING "I#" FORMAT 99 + +WITH process_memory AS +( + SELECT inst_id + , pid + , SUM(allocated) total_allocated + , SUM(DECODE(category,'Freeable',allocated,0)) freeable + , SUM(allocated) - SUM(DECODE(category,'Freeable',allocated,0)) unfreeable + , SUM(DECODE(category,'SQL',allocated,0)) sql_allocated + , SUM(DECODE(category,'PL/SQL',allocated,0)) plsql_allocated + , SUM(DECODE(category,'OLAP',allocated,0)) olap_allocated + , SUM(DECODE(category,'JAVA',allocated,0)) java_allocated + , SUM(DECODE(category,'Other',allocated,0)) other_allocated + , SUM(NVL(used,0)) total_used + , SUM(DECODE(category,'SQL',used,0)) sql_used + , SUM(DECODE(category,'PL/SQL',used,0)) plsql_used + , SUM(DECODE(category,'OLAP',used,0)) olap_used + , SUM(DECODE(category,'JAVA',used,0)) java_used + , SUM(DECODE(category,'Other',used,0)) other_used + , SUM(NVL(max_allocated,0)) total_max_allocated + , SUM(DECODE(category,'SQL',max_allocated,0)) sql_max_allocated + , SUM(DECODE(category,'PL/SQL',max_allocated,0)) plsql_max_allocated + , SUM(DECODE(category,'OLAP',max_allocated,0)) olap_max_allocated + , SUM(DECODE(category,'JAVA',max_allocated,0)) java_max_allocated + , SUM(DECODE(category,'Other',max_allocated,0)) other_max_allocated + FROM gv$process_memory + GROUP BY inst_id + , pid +) +SELECT * FROM +( +SELECT p.spid + , s.sid + , m.inst_id + , s.username + , DECODE(s.type , 'BACKGROUND',REPLACE(SUBSTR(s.program,INSTR(s.program,'(')+1),')',''),s.program) program + , '|' seperator1 + , ROUND(m.total_allocated/ &&BYTES_DIVIDER) total_allocated + , ROUND(m.freeable/ &&BYTES_DIVIDER) freeable + , ROUND(m.unfreeable/ &&BYTES_DIVIDER) unfreeable + , ROUND(m.sql_allocated/ &&BYTES_DIVIDER) sql_allocated + , ROUND(m.plsql_allocated/ &&BYTES_DIVIDER) plsql_allocated + , ROUND(m.other_allocated/ &&BYTES_DIVIDER) other_allocated + , ROUND(m.olap_allocated/ &&BYTES_DIVIDER) olap_allocated + , ROUND(m.java_allocated/ &&BYTES_DIVIDER) java_allocated +-- , '|' seperator2 +-- , ROUND(m.total_used/ &&BYTES_DIVIDER) total_used +-- , ROUND(m.sql_used/ &&BYTES_DIVIDER) sql_used +-- , ROUND(m.plsql_used/ &&BYTES_DIVIDER) plsql_used +-- , ROUND(m.other_used/ &&BYTES_DIVIDER) other_used +-- , ROUND(m.olap_used/ &&BYTES_DIVIDER) olap_used +-- , ROUND(m.java_used/ &&BYTES_DIVIDER) java_used + , '|' seperator3 + , ROUND(m.total_max_allocated/ &&BYTES_DIVIDER) total_max_allocated + , ROUND(m.sql_max_allocated/ &&BYTES_DIVIDER) sql_max_allocated + , ROUND(m.plsql_max_allocated/ &&BYTES_DIVIDER) plsql_max_allocated + , ROUND(m.other_max_allocated/ &&BYTES_DIVIDER) other_max_allocated + , ROUND(m.olap_max_allocated/ &&BYTES_DIVIDER) olap_max_allocated + , ROUND(m.java_max_allocated/ &&BYTES_DIVIDER) java_max_allocated + , '|' seperator4 + FROM process_memory m + , gv$process p + , gv$session s + WHERE m.inst_id = p.inst_id + AND m.pid = p.pid + AND p.inst_id = s.inst_id + AND p.addr = s.paddr + AND m.inst_id LIKE '&&INST_ID' + &&WHERE_CLAUSE +ORDER BY m.total_allocated desc +) +WHERE rownum <= &&top_rowcount + ; + + +@@footer diff --git a/vg/pid_details.sql b/vg/pid_details.sql new file mode 100644 index 0000000..db6ba32 --- /dev/null +++ b/vg/pid_details.sql @@ -0,0 +1,51 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Details +* Parameters : 1 - SPID (OS Process ID) +* 2 - INST_ID (optional, default to 1) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +*/ + + +VARIABLE SID NUMBER; +VARIABLE SPID NUMBER; +VARIABLE INST_ID NUMBER; + +BEGIN + :SPID := '&&1'; + :INST_ID := NVL('&&2',1); + IF :INST_ID = '' OR :INST_ID IS NULL THEN + :INST_ID := 1; + END IF; +EXCEPTION + WHEN NO_DATA_FOUND THEN + NULL; +END; +/ + + +UNDEFINE SID +UNDEFINE INST_ID + +COLUMN col1 new_value SID NOPRINT +column col2 new_value INST_ID NOPRINT + + SELECT S.SID COL1 + , S.INST_ID COL2 + FROM GV$SESSION S, GV$PROCESS P + WHERE S.INST_ID = P.INST_ID + AND S.PADDR = P.ADDR + AND P.SPID = :SPID + AND P.INST_ID = :INST_ID + ; + +@@sid_details &&SID &&INST_ID + diff --git a/vg/pid_opencursors_sqltext.sql b/vg/pid_opencursors_sqltext.sql new file mode 100644 index 0000000..f3e4d4e --- /dev/null +++ b/vg/pid_opencursors_sqltext.sql @@ -0,0 +1,50 @@ +-- @pid_opencursors_sqltext.sql +SET echo off +SET lines 200 +SET PAGES 50 + +COLUMN SPID FORMAT a6 +COLUMN SID FORMAT 999 +COLUMN SERIAL# FORMAT 99999 +COLUMN username FORMAT a10 +COLUMN osuser FORMAT a10 +COLUMN machine FORMAT a20 +COLUMN program FORMAT a20 +COLUMN sql_text FORMAT a30 + + +select LPAD(p.sPID,5,' ') SPID + , s.SID + , s.SERIAL# + , s.username + , s.osuser + , TO_CHAR(s.LOGON_TIME,'DD-MM-YY HH24:MI') logon_time + , s.MACHINE + , s.PROGRAM + , sql.piece + , sql.sql_text +from v$session s, v$process p, v$open_cursor c, v$sqltext sql +where s.PADDR = p.ADDR +AND p.spid = '&PID' +and s.sid = c.sid +and c.address = sql.address +and c.hash_value = sql.hash_value +order by spid, c.address, c.hash_value, piece +; + + +Prompt "####### Current SQL being executed ######################" + +SELECT sql.piece, sql.sql_text +FROM v$sqltext_with_newlines sql, v$session s, v$process p +where s.PADDR = p.ADDR +AND s.SQL_ADDRESS = sql.address +AND s.SQL_HASH_VALUE = sql.hash_value +AND p.spid = '&&PID' +order by sql.piece +/ + + +SET echo on + + diff --git a/vg/piddetails.sql b/vg/piddetails.sql new file mode 100644 index 0000000..27b7472 --- /dev/null +++ b/vg/piddetails.sql @@ -0,0 +1,198 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Details +* Parameters : 1 - SPID (OS Process ID) +* 2 - INST_ID (optional, default to 1) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +*/ + + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SPID FORMAT 99999 +COLUMN SID FORMAT 9999 +COLUMN serial# HEADING "Serial#" FORMAT 99999 +COLUMN username FORMAT a20 +COLUMN osuser FORMAT a10 +COLUMN machine FORMAT a20 +COLUMN logon_time FORMAT a15 +COLUMN service_name FORMAT a21 +COLUMN program FORMAT a20 +COLUMN process FORMAT a10 +COLUMN last_call_et HEADING "Last|Call|(s)" FORMAT 99,999 + + +VARIABLE PID NUMBER +VARIABLE INST_ID NUMBER + +BEGIN + :PID := &&1; + :INST_ID := NVL(&2,1); + IF :INST_ID = '' OR :INST_ID IS NULL THEN + :INST_ID := 1; + END IF; +END; +/ + +Prompt +Prompt ################ Process Details ###################### +Prompt + +select LPAD(p.sPID,5,' ') SPID + , s.SID + , s.SERIAL# + , s.process + , s.username + , s.osuser + , s.status + , CASE + WHEN s.status = 'ACTIVE' THEN s.last_call_et + ELSE NULL + END last_call_et + , TO_CHAR(s.LOGON_TIME,'DD-MM-YY HH24:MI') logon_time + , s.MACHINE + , s.PROGRAM +from gv$session s, gv$process p +where s.inst_id = p.inst_id +AND s.PADDR = p.ADDR +AND p.spid = :PID +AND p.inst_id = :INST_ID +order by 1; + +Prompt +Prompt ###### Session Lock Information ############ +Prompt + +select s.blocking_instance + , s.blocking_session + , s.blocking_session_status + , s.final_blocking_instance + , s.final_blocking_session + , s.final_blocking_session_status +FROM gv$session s, gv$process p +where s.inst_id = p.inst_id +AND s.PADDR = p.ADDR +AND p.spid = :PID +AND p.inst_id = :INST_ID +order by 1; + + + +Prompt +Prompt ####### Current SQL being executed ######### +Prompt + +SELECT sql.sql_text +FROM gv$sqltext_with_newlines sql, gv$session s, gv$process p +WHERE s.inst_id = sql.inst_id +AND s.SQL_ADDRESS = sql.address +AND s.SQL_HASH_VALUE = sql.hash_value +AND s.inst_id = p.inst_id +AND s.PADDR = p.ADDR +AND p.spid = :PID +AND p.inst_id = :INST_ID +order by piece +/ + + +Prompt +Prompt ################ Session Wait ###################### +Prompt + +COLUMN state FORMAT a10 +COLUMN event HEAD "EventName" FORMAT a35 +COLUMN seconds_in_wait HEADING "Wait(s)" FORMAT 99,999 +COLUMN p1 FORMAT 9999999999 +COLUMN p2 FORMAT 9999999999 +COLUMN p3 FORMAT 9999999999 +COLUMN p1text FORMAT a20 +COLUMN p2text FORMAT a20 +COLUMN p3text FORMAT a20 + + +SELECT w.inst_id + , w.sid + , w.seq# + , w.state + , w.event + , w.seconds_in_wait + , w.p1 + , w.p1text + , w.p2 + , w.p2text + , w.p3 + , w.p3text +FROM gv$session_wait w, gv$session s, gv$process p +WHERE s.inst_id = p.inst_id + AND s.PADDR = p.ADDR + AND w.inst_id = s.inst_id + AND w.sid = s.sid + AND p.spid = :PID + AND p.inst_id = :INST_ID +/ + + +Prompt +Prompt ####### Session Events #################### +Prompt + +COLUMN event HEAD "EventName" FORMAT a35 +COLUMN total_waits HEAD "TotalWaits" +COLUMN total_timeouts HEAD "TotalTimeOuts" +COLUMN time_waited HEAD "TimeWaited (s)" +COLUMN average_wait HEAD "AvgWait (s)" +COLUMN max_wait HEAD "MaxWait (s)" + +SELECT e.inst_id + , e.sid + , e.event + , e.total_waits + , e.total_timeouts + , e.time_waited / 100 time_waited + , e.average_wait / 100 average_wait + , e.max_wait / 100 max_wait +FROM gv$session_event e, gv$session s, gv$process p +WHERE s.inst_id = p.inst_id + AND s.PADDR = p.ADDR + AND e.inst_id = s.inst_id + AND e.sid = s.sid + AND p.spid = :PID + AND p.inst_id = :INST_ID +order by e.time_waited desc +/ + + +Prompt +Prompt ####### Kill/Disconnect Command #################### + +COLUMN command HEADING "Disconnect Command" FORMAT a60 +COLUMN command2 HEADING "Kill Command" FORMAT a60 + + +select 'alter system disconnect session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command + , 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command2 +from gv$session s + , gv$process p +where s.inst_id = p.inst_id +AND s.PADDR = p.ADDR +AND p.spid = :PID +AND p.inst_id = :INST_ID +; + + +BEGIN + :PID := NULL; + :INST_ID := NULL; +END; +/ + +@@footer + + diff --git a/vg/plan_table.sql b/vg/plan_table.sql new file mode 100644 index 0000000..ef84dd8 --- /dev/null +++ b/vg/plan_table.sql @@ -0,0 +1,71 @@ +DROP TABLE PLAN_TABLE +/ + +-- +-- PLAN_TABLE (Table) +-- +CREATE TABLE PLAN_TABLE +( + STATEMENT_ID VARCHAR2(30), + TIMESTAMP DATE, + REMARKS VARCHAR2(80), + OPERATION VARCHAR2(30), + OPTIONS VARCHAR2(30), + OBJECT_NODE VARCHAR2(128), + OBJECT_OWNER VARCHAR2(30), + OBJECT_NAME VARCHAR2(30), + OBJECT_INSTANCE INTEGER, + OBJECT_TYPE VARCHAR2(30), + OPTIMIZER VARCHAR2(255), + SEARCH_COLUMNS NUMBER, + ID INTEGER, + PARENT_ID INTEGER, + POSITION INTEGER, + COST INTEGER, + CARDINALITY INTEGER, + BYTES INTEGER, + OTHER_TAG VARCHAR2(255), + PARTITION_START VARCHAR2(255), + PARTITION_STOP VARCHAR2(255), + PARTITION_ID INTEGER, + OTHER LONG, + DISTRIBUTION VARCHAR2(30) +) +TABLESPACE SYSTEM +PCTUSED 40 +PCTFREE 10 +INITRANS 1 +MAXTRANS 255 +STORAGE ( + INITIAL 16K + NEXT 144K + MINEXTENTS 1 + MAXEXTENTS 505 + PCTINCREASE 50 + FREELISTS 1 + FREELIST GROUPS 1 + BUFFER_POOL DEFAULT + ) +LOGGING +NOCACHE +NOPARALLEL +/ + +DROP PUBLIC SYNONYM PLAN_TABLE +/ + +CREATE PUBLIC SYNONYM PLAN_TABLE FOR PLAN_TABLE +/ + +DROP PUBLIC SYNONYM TOAD_PLAN_TABLE +/ + + +CREATE PUBLIC SYNONYM TOAD_PLAN_TABLE FOR PLAN_TABLE +/ + + +GRANT DELETE, INSERT, SELECT, UPDATE ON PLAN_TABLE TO PUBLIC +/ + + diff --git a/vg/privs.sql b/vg/privs.sql new file mode 100644 index 0000000..2bac8df --- /dev/null +++ b/vg/privs.sql @@ -0,0 +1,149 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display priviledges +* Compability: +* Parameters : 1 - Grantee - Default Value - %, (Use % as wildcard) +* 2 - Owner - Default Value - %, (Use % as wildcard) +* 3 - Granted +* 4 - Privilege +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------------- +* 04-Feb-15 Vishal Gupta Added privilege as input parameter and fixed some bugs +* 26-Feb-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE grantee +UNDEFINE owner +UNDEFINE objectname +UNDEFINE privilege + +DEFINE grantee="&&1" +DEFINE owner="&&2" +DEFINE objectname="&&3" +DEFINE privilege="&&4" + + +COLUMN _grantee NEW_VALUE grantee NOPRINT +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _objectname NEW_VALUE objectname NOPRINT +COLUMN _privilege NEW_VALUE privilege NOPRINT + +set term off +SELECT DECODE('&&grantee','','%',UPPER('&&grantee')) "_grantee" + , DECODE('&&owner','','%',UPPER('&&owner')) "_owner" + , DECODE('&&objectname','','%',UPPER('&&objectname')) "_objectname" + , DECODE('&&privilege','','%',UPPER('&&privilege')) "_privilege" +FROM DUAL; +set term on + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +PROMPT *************************************************************** +PROMPT * P R I V I L E G E S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Grantee = '&&grantee' +PROMPT * - Owner = '&&owner' +PROMPT * - ObjectName = "&&objectname" +PROMPT * - Privilege = "&&privilege" +PROMPT *************************************************************** + +COLUMN grantee HEADING "Grantee" FORMAT a30 +COLUMN grantor HEADING "Grantor" FORMAT a20 +COLUMN granted_role HEADING "Granted Role" FORMAT a30 +COLUMN admin_option HEADING "Admin|Option" FORMAT a6 +COLUMN default_role HEADING "Default|Role" FORMAT a7 +COLUMN privilege HEADING "Privilege" FORMAT a40 +COLUMN object_name HEADING "Object Name" FORMAT a40 +COLUMN grantable HEADING "Grantable" FORMAT a10 +COLUMN hierarchy HEADING "Hierarchy" FORMAT a10 + +PROMPT ********************************** +PROMPT * R O L E P R I V I L E G E S +PROMPT ********************************** +SELECT p.grantee + , p.granted_role + , p.admin_option + , p.default_role + FROM dba_role_privs p + WHERE p.grantee like '&&grantee' ESCAPE '\' + AND 'SYS' like '&&owner' ESCAPE '\' + AND p.granted_role like '&&objectname' ESCAPE '\' + AND '&&privilege' = '%' +ORDER BY p.grantee + , p.granted_role +; + +PROMPT +PROMPT ************************************** +PROMPT * S Y S T E M P R I V I L E G E S +PROMPT ************************************** + +SELECT p.grantee + , p.privilege + , p.admin_option + FROM dba_sys_privs p + WHERE p.grantee LIKE '&&grantee' ESCAPE '\' + AND 'SYS' LIKE '&&owner' ESCAPE '\' + AND '&&objectname' = '%' + AND p.privilege LIKE '&&privilege' ESCAPE '\' +ORDER BY p.grantee + , p.privilege +; + +PROMPT +PROMPT ************************************** +PROMPT * O B J E C T P R I V I L E G E S +PROMPT ************************************** +SELECT p.grantee + , p.owner || '.' || p.table_name object_name + , p.grantor + , p.privilege + , p.grantable + , p.hierarchy + FROM dba_tab_privs p + WHERE p.grantee LIKE '&&grantee' ESCAPE '\' + AND p.owner LIKE '&&owner' ESCAPE '\' + AND p.table_name LIKE '&&objectname' ESCAPE '\' + AND p.privilege LIKE '&&privilege' ESCAPE '\' +ORDER BY p.grantee + , object_name + , p.privilege +; + + +PROMPT +PROMPT ************************************** +PROMPT * C O L U M N P R I V I L E G E S +PROMPT ************************************** +SELECT p.grantee + , p.owner || '.' || p.table_name object_name + , p.column_name + , p.grantor + , p.privilege + , p.grantable + FROM dba_col_privs p + WHERE p.grantee LIKE '&&grantee' ESCAPE '\' + AND p.owner LIKE '&&owner' ESCAPE '\' + AND p.table_name LIKE '&&objectname' ESCAPE '\' + AND p.privilege LIKE '&&privilege' ESCAPE '\' +ORDER BY p.grantee + , object_name + , p.privilege +; + +@@footer diff --git a/vg/process_details.sql b/vg/process_details.sql new file mode 100644 index 0000000..20351b0 --- /dev/null +++ b/vg/process_details.sql @@ -0,0 +1,48 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Client Process Details +* Parameters : 1 - Client Process Number +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 14-May-13 Vishal Gupta Created +*/ + + +VARIABLE INST_ID NUMBER; +VARIABLE SID NUMBER; +VARIABLE PROCESS VARCHAR2(20); + +BEGIN + :INST_ID := 0; + :SID := 0; + :PROCESS := ''; + -- Ignore JDBC Thin Client process number + IF '&&1' <> '1234' THEN + :PROCESS := '&&1'; + END IF; +END; +/ + + +UNDEFINE SID +UNDEFIN INST_ID + +COLUMN col1 new_value SID NOPRINT +column col2 new_value INST_ID NOPRINT + +set term off +SELECT S.SID COL1 + , S.INST_ID COL2 + FROM GV$SESSION S + WHERE s.process = :PROCESS +; +set term on + +@@sid_details &&SID &&INST_ID + diff --git a/vg/procs.sql b/vg/procs.sql new file mode 100644 index 0000000..2c55f36 --- /dev/null +++ b/vg/procs.sql @@ -0,0 +1,110 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Search for stored procedures/packages/functions/types etc. +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - SubObject name (% - wildchar, \ - escape char) +* 4 - Object Type (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ---------------------------------------------- +* 13-JUN-14 Vishal Gupta Increased AUTHID column width +* 22-JAN-14 Vishal Gupta Updated column headings and rearranged columns +* 02-JUL-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE subobject_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE subobject_name="&&3" +DEFINE object_type="&&4" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT +COLUMN _object_status NEW_VALUE object_status NOPRINT + +set term off + +SELECT UPPER(DECODE('&&owner','','%','&&owner')) "_owner" + , UPPER(DECODE('&&object_name','','%','&&object_name')) "_object_name" + , UPPER(DECODE('&&subobject_name','','%','&&subobject_name')) "_subobject_name" + , UPPER(DECODE('&&object_type','','%','&&object_type') ) "_object_type" + , UPPER(DECODE('&&object_status','','%','&&object_status')) "_object_status" +FROM DUAL +; + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" +FROM DUAL +; + +set term on + + +PROMPT ***************************************************************** +PROMPT * P R O C E D U R E L I S T +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - SubObject Name = '&&subobject_name' +PROMPT * - Object Type = '&&object_type' +PROMPT ***************************************************************** + + +COLUMN object_name HEADING "ObjectName" FORMAT a40 +COLUMN subobject_name HEADING "SubObjectName" FORMAT a30 +COLUMN object_type HEADING "ObjectType" FORMAT a15 +COLUMN authid HEADING "Auth ID" FORMAT a12 +COLUMN overload HEADING "Over|load" FORMAT a4 +COLUMN pipelined HEADING "Pipe|lined" FORMAT a5 +COLUMN aggregate HEADING "Aggr" FORMAT a4 +COLUMN parallel HEADING "Par'l" FORMAT a5 +COLUMN interface HEADING "Inter|face" FORMAT a5 +COLUMN deterministic HEADING "Deter|minis|tic" FORMAT a6 + + +SELECT p.owner || '.' || p.object_name object_name + , p.procedure_name subobject_name + , p.object_type + , p.authid + , p.overload + , p.pipelined + , p.aggregate + , p.parallel + , p.interface + , p.deterministic + FROM dba_procedures p + WHERE p.owner like UPPER('&&owner') ESCAPE '\' + AND p.object_name like UPPER('&&object_name') ESCAPE '\' + AND p.procedure_name like UPPER('&&subobject_name') ESCAPE '\' + AND p.object_type like UPPER('&&object_type') ESCAPE '\' +ORDER BY object_name + , p.procedure_name +; + + +@@footer diff --git a/vg/procs_args.sql b/vg/procs_args.sql new file mode 100644 index 0000000..9c10f3b --- /dev/null +++ b/vg/procs_args.sql @@ -0,0 +1,125 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display stored procedure arguments +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - SubObject name (% - wildchar, \ - escape char) +* 4 - Object Type (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ------------------------------------------------------------------- +* 12-Nov-15 Vishal Gupta Fixed issue where non-packaged proc/func arguments were not display +* because procedure_name is NULL in such cases +* 02-Jul-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE subobject_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE subobject_name="&&3" +DEFINE object_type="&&4" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off + +SELECT UPPER(DECODE('&&owner','','%','&&owner')) "_owner" + , UPPER(DECODE('&&object_name','','%','&&object_name')) "_object_name" + , UPPER(DECODE('&&subobject_name','','%','&&subobject_name')) "_subobject_name" + , UPPER(DECODE('&&object_type','','%','&&object_type')) "_object_type" +FROM DUAL; + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" + /*, CASE + WHEN INSTR('&&owner','.') != 0 THEN DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + ELSE DECODE(UPPER('&&object_type'),'','%',UPPER('&&object_type')) + END "_object_type" + */ +FROM DUAL; + +set term on + + +PROMPT ***************************************************************** +PROMPT * P R O C E D U R E A R G U M E N T S L I S T +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - SubObject Name = '&&subobject_name' +PROMPT * - Object Type = '&&object_type' +PROMPT ***************************************************************** + + +COLUMN subprogram_id noprint +COLUMN subobject_name FORMAT a56 +COLUMN position FORMAT 999 +COLUMN argument_name FORMAT a30 +COLUMN sequence HEADING "Seq" FORMAT 99 +COLUMN data_level HEADING "Lvl" FORMAT 99 +COLUMN position HEADING "Pos" FORMAT 99 +COLUMN defaulted HEADING "Default|ed" FORMAT a7 +COLUMN data_type FORMAT a40 + +BREAK ON subprogram_id SKIP 1 + +SELECT p.owner || '.' || p.object_name || '.' || p.procedure_name subobject_name + , a.subprogram_id + , a.sequence + , a.data_level + , a.position + , a.in_out + , LPAD(' ',a.data_level * 2) || a.argument_name argument_name + , a.defaulted + , CASE + WHEN a.data_type = 'NUMBER' + THEN a.data_type || NVL2(a.data_precision,'(' || a.data_precision || ',' || a.data_scale || ')','') + WHEN a.data_type = 'FLOAT' + THEN a.data_type || NVL2(a.data_precision,'(' || a.data_precision || ')','') + WHEN a.data_type = 'VARCHAR2' OR a.data_type = 'CHAR' OR a.data_type = 'NVARCHAR2' OR a.data_type = 'NCHAR' + THEN a.data_type || NVL2(a.char_length,'(' || a.char_length || ' ' || DECODE(a.char_used,'B','BYTE','CHAR') || ')','') + WHEN a.data_type = 'RAW' OR a.data_type = 'UROWID' + THEN a.data_type || NVL2(a.data_length,'(' || a.data_length || ')' ,'') + WHEN a.type_OWNER IS NOT NULL + THEN a.data_type || ' (' || a.type_owner || '.' || a.type_name || NVL2(a.type_subname, '.' || a.type_subname, '') || ')' + ELSE a.data_type + END data_type + --, a.default_value + FROM dba_procedures p + LEFT OUTER JOIN dba_arguments a ON a.owner = p.owner AND a.object_id = p.object_id AND a.subprogram_id = p.subprogram_id + WHERE p.owner like UPPER('&&owner') ESCAPE '\' + AND p.object_name like UPPER('&&object_name') ESCAPE '\' + AND NVL(p.procedure_name,'x') like UPPER('&&subobject_name') ESCAPE '\' + AND p.object_type like UPPER('&&object_type') ESCAPE '\' +ORDER BY subobject_name + , a.subprogram_id + , a.sequence +; + + +@@footer diff --git a/vg/profiles.sql b/vg/profiles.sql new file mode 100644 index 0000000..e592fda --- /dev/null +++ b/vg/profiles.sql @@ -0,0 +1,60 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Displays database profile information +* Parameters : 1 - profile (Default value '%', Use % as wildcard, escape with '\' ) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 29-Oct-13 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE profile +UNDEFINE resource_name + +DEFINE profile="&&1" +DEFINE resource_name="&&2" + +set term off +COLUMN _profile NEW_VALUE profile NOPRINT +COLUMN _resource_name NEW_VALUE resource_name NOPRINT + +SELECT UPPER(DECODE('&&profile','','%','&&profile')) "_profile" + , UPPER(DECODE('&&resource_name','','%','&&resource_name')) "_resource_name" +FROM DUAL +; + +set term on + + +PROMPT ****************************************************************** +PROMPT * PROFILES +PROMPT * +PROMPT * Input Parameters +PROMPT * - Profile Name = '&&profile' +PROMPT * - Resource Name = '&&resource_name' +PROMPT ****************************************************************** + + +SELECT p.profile + , p.resource_type + , p.resource_name + , p.limit + FROM dba_profiles p + WHERE p.profile LIKE '&&profile' ESCAPE '\' + AND p.resource_name LIKE '&&resource_name' ESCAPE '\' +ORDER BY p.profile + , p.resource_type +; + + +@@footer \ No newline at end of file diff --git a/vg/queue_sizes.sql b/vg/queue_sizes.sql new file mode 100644 index 0000000..4422045 --- /dev/null +++ b/vg/queue_sizes.sql @@ -0,0 +1,24 @@ +set lines 10000 +set pages 10000 +set feedback off +set echo off +set term off +spool vg.sql +select 'select * from ( ' from dual +union all +SELECT 'SELECT ''' || owner || '.' || name || ''' as queue ' + || chr(13)|| ', ''' || q.queue_table || ''' as "QueueTable"' + || chr(13)|| ', ' || '(select ROUND(sum(bytes)/power(1024,2)) from dba_segments s where s.owner = ''' || owner || ''' and s.segment_name = ''' || q.queue_table || ''') as "Size(MB)"' + || chr(13)|| ', ' || '(select count(1) from ' || owner || '.' || queue_table || ') as row_count' + || chr(13)|| ', ' || retention || ' retention from dual union all' +FROM dba_queues q where q.owner like 'TRAF%' and q.queue_type ='NORMAL_QUEUE' +union all +select ' select ''abc'' queue, '''' queuetable ,0 "Size(MB)" , 1 rowcount,1 retention from dual' from dual +union all +select ') order by "Size(MB)" desc ; ' from dual +; + +spool off +@html @./vg.sql + + diff --git a/vg/queues.sql b/vg/queues.sql new file mode 100644 index 0000000..38a8165 --- /dev/null +++ b/vg/queues.sql @@ -0,0 +1,98 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Search for Queues +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.queue_name +* 2 - Queue name (% - wildchar, \ - escape char) +* 3 - Where Clause +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 10-Aug-16 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE queue_name +UNDEFINE WHERECLAUSE + +DEFINE owner="&&1" +DEFINE queue_name="&&2" +DEFINE WHERECLAUSE="&&3" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _queue_name NEW_VALUE queue_name NOPRINT +COLUMN _subqueue_name NEW_VALUE subqueue_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT +COLUMN _object_status NEW_VALUE object_status NOPRINT + +set term off + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&queue_name'),'','%','&&queue_name') "_queue_name" +FROM DUAL; + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&queue_name'),'','%',UPPER('&&queue_name')) + END "_queue_name" +FROM DUAL; +set term on + + +PROMPT ***************************************************************** +PROMPT * O B J E C T S L I S T +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Queue Name = '&&queue_name' +PROMPT * - Where Clause = '&&WHERECLAUSE' +PROMPT ***************************************************************** + + + +COLUMN queue HEADING "Queue" FORMAT a50 +COLUMN queue_type HEADING "QueueType" FORMAT a15 +COLUMN retention HEADING "Retention|(sec)" FORMAT a10 +COLUMN enqueue_enabled HEADING "Enqueue|Enabled" FORMAT a7 +COLUMN dequeue_enabled HEADING "Dequeue|Enabled" FORMAT a7 +COLUMN retry_delay HEADING "Retry|Delay" FORMAT 999999 +COLUMN max_retries HEADING "Max|Retries" FORMAT 999999 +COLUMN queue_table HEADING "Queue Table" FORMAT a25 +COLUMN user_comment HEADING "User Comment" FORMAT a25 + + +SELECT q.owner || '.' || q.name queue + , q.queue_type + , q.enqueue_enabled + , q.dequeue_enabled + , q.retention + , q.retry_delay + , q.max_retries + , q.queue_table + , q.user_comment + FROM dba_queues q +WHERE 1=1 + AND q.owner LIKE '&&owner' + AND q.name LIKE '&&queue_name' + &&WHERECLAUSE +ORDER BY q.owner + , q.name +; + + +@@footer + diff --git a/vg/recovery_area_usage.sql b/vg/recovery_area_usage.sql new file mode 100644 index 0000000..c97412f --- /dev/null +++ b/vg/recovery_area_usage.sql @@ -0,0 +1,69 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Recovery Area Usage +* Compatibility : 11.2 and above +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Jan-16 Vishal Gupta Added total computation +* 02-May-13 Vishal Gupta Updated to display space used in GB +* 30-Jul-12 Vishal Gupta Created +* +*/ + +PROMPT ***************************************************************** +PROMPT * R E C O V E R Y A R E A U S A G E +PROMPT ***************************************************************** + + + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN name HEADING "Name" FORMAT a28 +COLUMN value HEADING "Value" FORMAT a15 +COLUMN type HEADING "Type" FORMAT a10 +COLUMN ordinal HEADING "Ordinal" FORMAT 99 +COLUMN isdefault HEADING "Def|ault?" FORMAT a5 +COLUMN ismodified HEADING "Modi|fied?" FORMAT a8 +COLUMN isadjusted HEADING "Adjus|ted?" FORMAT a5 + +SELECT p.inst_id + , p.name + , TRIM(TO_CHAR(ROUND(p.value / 1024 / 1024 / 1024),'999,999') || ' GB') value + FROM gv$system_parameter p + WHERE p.name = 'db_recovery_file_dest_size' +ORDER BY p.inst_id +; + +COLUMN file_type HEADING "File Type" FORMAT a25 +COLUMN number_of_files HEADING "Files (#)" FORMAT 999,999,999 +COLUMN space_used HEADING "Space|Used|(MB)" FORMAT 999,999,999 +COLUMN space_reclaimable HEADING "Space|Reclaimable|(MB)" FORMAT 999,999,999 +COLUMN percent_space_used HEADING "Space|Used|(%)" FORMAT 999.99 +COLUMN percent_space_reclaimable HEADING "Space|Reclaimable|(%)" FORMAT 999.99 + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF number_of_files FORMAT 999,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF space_used FORMAT 999,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF space_reclaimable FORMAT 999,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF percent_space_used FORMAT 999.99 ON REPORT +COMPUTE SUM LABEL 'Total' OF percent_space_reclaimable FORMAT 999.99 ON REPORT + +SELECT r.file_type + , r.number_of_files + , ROUND(r.percent_space_used * p.value / 100 / 1024 / 1024) space_used + , ROUND(r.percent_space_reclaimable * p.value / 100 / 1024 / 1024) space_reclaimable + , r.percent_space_used + , r.percent_space_reclaimable + FROM v$recovery_area_usage r + , v$system_parameter p + WHERE p.name = 'db_recovery_file_dest_size' +; + +@@footer diff --git a/vg/recovery_progress.sql b/vg/recovery_progress.sql new file mode 100644 index 0000000..50ef67f --- /dev/null +++ b/vg/recovery_progress.sql @@ -0,0 +1,64 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DataGuard Lag +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Jul-12 Vishal Gupta Created +* +*/ + +PROMPT ********************************************* +PROMPT * R E C O V E R Y P R O G R E S S * +PROMPT ********************************************* + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN start_time HEADING "Start Time" FORMAT a18 +COLUMN type HEADING "Type" FORMAT a20 +COLUMN item HEADING "Item" FORMAT a25 +COLUMN units HEADING "Units" FORMAT a10 +COLUMN sofar HEADING "SoFar" FORMAT a45 +COLUMN total HEADING "Total" FORMAT 999,999,999,999 +COLUMN timestamp HEADING "Start Time" FORMAT a18 +COLUMN comments HEADING "Comments" FORMAT a18 + +SELECT r.inst_id + --, TO_CHAR(r.start_time,'DD-MON-YY HH24:MI:SS') start_time + --, r.type + , r.item + , CASE r.item + WHEN 'Last Applied Redo' THEN TO_CHAR(r.timestamp,'DD-MON-YY HH24:MI:SS') || ' , ' || r.comments + || chr(10) || 'ApplyLag ' || REPLACE(REPLACE(TO_CHAR( CAST(sysdate as TIMESTAMP) - CAST( r.timestamp as TIMESTAMP)) + ,'+0000000','+') + ,'.000000','') + WHEN 'Active Time' THEN FLOOR(r.sofar/3600) || 'h ' || FLOOR(MOD(r.sofar,3600)/60) || 'm ' || MOD(r.sofar,60) || 's' + WHEN 'Elapsed Time' THEN FLOOR(r.sofar/3600) || 'h ' || FLOOR(MOD(r.sofar,3600)/60) || 'm ' || MOD(r.sofar,60) || 's' + || chr(10) || 'StartTime: ' || TO_CHAR(r.start_time,'DD-MON-YY HH24:MI:SS') + ELSE TRIM(TO_CHAR(r.sofar,'999,999,999,999')) || ' ' || r.units + END SoFar + --, r.total + FROM gv$recovery_progress r + WHERE r.start_time = (SELECT MAX(start_time) from gv$recovery_progress) + ORDER BY DECODE(r.item + ,'Last Applied Redo',1 + ,'Standby Apply Lag',2 + ,'Active Apply Rate',3 + ,'Average Apply Rate',4 + ,'Maximum Apply Rate',5 + ,'Redo Applied',6 + ,'Log Files',7 + ,'Apply Time per Log',8 + ,'Checkpoint Time per Log',9 + ,'Active Time',21 + ,'Elapsed Time',22 + ,999 + ) +; + +@@footer diff --git a/vg/recovery_progress2.sql b/vg/recovery_progress2.sql new file mode 100644 index 0000000..d7f31c4 --- /dev/null +++ b/vg/recovery_progress2.sql @@ -0,0 +1,77 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DataGuard Lag +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Jul-12 Vishal Gupta Created +* +*/ + +PROMPT ********************************************* +PROMPT * R E C O V E R Y P R O G R E S S * +PROMPT ********************************************* + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN start_time HEADING "Start Time" FORMAT a18 +COLUMN type HEADING "Type" FORMAT a20 +COLUMN item HEADING "Item" FORMAT a25 +COLUMN units HEADING "Units" FORMAT a10 +COLUMN sofar HEADING "SoFar" FORMAT a45 +COLUMN total HEADING "Total" FORMAT 999,999,999,999 +COLUMN timestamp HEADING "Start Time" FORMAT a18 +COLUMN comments HEADING "Comments" FORMAT a18 + +SELECT inst_id + --, TO_CHAR(r.start_time,'DD-MON-YY HH24:MI:SS') start_time + --, r.type + , item + , CASE item + WHEN 'Last Applied Redo' THEN TO_CHAR(timestamp,'DD-MON-YY HH24:MI:SS') || ' , ' || comments + || chr(10) || 'ApplyLag - ' || REPLACE(REPLACE(TO_CHAR( CAST(sysdate as TIMESTAMP) - timestamp) + ,'+0000000','+') + ,'.000000','') + WHEN 'Active Time' THEN FLOOR(sofar/3600) || 'h ' || FLOOR(MOD(sofar,3600)/60) || 'm ' || MOD(sofar,60) || 's' + WHEN 'Elapsed Time' THEN FLOOR(sofar/3600) || 'h ' || FLOOR(MOD(sofar,3600)/60) || 'm ' || MOD(sofar,60) || 's' + || chr(10) || 'StartTime: ' || TO_CHAR(start_time,'DD-MON-YY HH24:MI:SS') + ELSE TRIM(TO_CHAR(sofar,'999,999,999,999')) || ' ' || units + END SoFar + --, r.total + FROM ( SELECT r.inst_id + --, NVL(r.item,d.item) item + , r.item + , NVL(r.timestamp,d.timestamp) timestamp + --, r.timestamp timestamp + , r.start_time + , r.comments + , r.sofar + , r.units + FROM (SELECT 'Last Applied Redo' item + , controlfile_time timestamp + FROM v$database ) d + LEFT OUTER JOIN gv$recovery_progress r ON 1=1 + LEFT OUTER JOIN (SELECT MAX(start_time) start_time from gv$recovery_progress) r2 ON r.start_time = r2.start_time + ) + ORDER BY DECODE(item + ,'Last Applied Redo',1 + ,'Standby Apply Lag',2 + ,'Active Apply Rate',3 + ,'Average Apply Rate',4 + ,'Maximum Apply Rate',5 + ,'Redo Applied',6 + ,'Log Files',7 + ,'Apply Time per Log',8 + ,'Checkpoint Time per Log',9 + ,'Active Time',21 + ,'Elapsed Time',22 + ,999 + ) +; + +@@footer diff --git a/vg/redolog.sql b/vg/redolog.sql new file mode 100644 index 0000000..fefbbf1 --- /dev/null +++ b/vg/redolog.sql @@ -0,0 +1,87 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Online/Standby Redo log information +* Version : +* Parameters : None +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 17-AUG-15 Vishal Gupta Added group_size and total computation +* 14-JUL-14 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +Prompt +Prompt ************************ +Prompt * Redologs Information +Prompt ************************ + +COLUMN type HEADING "Redo|Log|Type" FORMAT a7 +COLUMN group# HEADING "Gr#" FORMAT 9999 +COLUMN thread# HEADING "Th#" FORMAT 99 +COLUMN status HEADING "Status" FORMAT a10 +COLUMN archived HEADING "Archived" FORMAT a9 +COLUMN members HEADING "Members" FORMAT 99999 +COLUMN sequence# HEADING "Seq#" FORMAT 9999999 +COLUMN Size_MB HEADING "RedoLog|Size|(MB)" FORMAT 99,999 +COLUMN used_MB HEADING "Used|(MB)" FORMAT 99,999 +COLUMN Group_Size_MB HEADING "Group|Size|(MB)" FORMAT 99,999,999 +COLUMN first_time HEADING "FirstTime" FORMAT a20 +COLUMN next_time HEADING "NextTime" FORMAT a20 +COLUMN last_time HEADING "LastTime" FORMAT a20 + +BREAK ON type SKIP 1 ON thread# +COMPUTE SUM LABEL 'Total' OF Group_Size_MB FORMAT 999,999,999 ON type +COMPUTE SUM LABEL 'Total' OF Group_Size_MB ON REPORT + +SELECT 'Online' type + , thread# + , group# + , status + , archived + , members + , sequence# + , (bytes/power(1024,2)) Size_MB + , NULL used_MB + , members * (bytes/power(1024,2)) Group_Size_MB + , TO_CHAR(first_time,'DD-MON-YY HH24:MI:SS') first_time + , TO_CHAR(next_time,'DD-MON-YY HH24:MI:SS') next_time + , NULL last_time + FROM v$log +UNION ALL +SELECT 'Standby' type + , thread# + , group# + , status + , archived + , (select count(1) from v$logfile f where f.group# = l.group#) members + , sequence# + , (bytes/power(1024,2)) Size_MB + , (used/power(1024,2)) used_MB + , (select count(1) from v$logfile f where f.group# = l.group#) * (bytes/power(1024,2)) Group_Size_MB + , TO_CHAR(first_time,'DD-MON-YY HH24:MI:SS') first_time + , TO_CHAR(next_time,'DD-MON-YY HH24:MI:SS') next_time + , TO_CHAR(last_time,'DD-MON-YY HH24:MI:SS') last_time + FROM v$standby_log l +ORDER BY type, thread# , group# +; + +@@footer diff --git a/vg/redolog_commands.txt b/vg/redolog_commands.txt new file mode 100644 index 0000000..1eae145 --- /dev/null +++ b/vg/redolog_commands.txt @@ -0,0 +1,89 @@ + + +---------------------------------------- +-- Add logfile members +---------------------------------------- +set serveroutput on size unlimited +BEGIN + FOR i in ( + SELECT 'alter database add logfile member ''+DATA_DM02_EXT'' TO GROUP ' || l.group# sqltext + , l.status + FROM v$log l + JOIN v$logfile lf ON lf.group# = l.group# + WHERE l.members = 1 + group by l.group#, l.status + ORDER BY l.group# + ) + LOOP + dbms_output.put_line(i.sqltext || ';'); + -- execute immediate i.sqltext; + END LOOP; +END; +/ + + + +-------------------------------------------------- +-- Switch logfiles for newly added log members +-------------------------------------------------- +set serveroutput on size unlimited +BEGIN + FOR i in ( + SELECT 'alter system archive log instance ''' || i.instance_name || ''' current' sqltext + , lf.status + FROM v$log l + JOIN v$logfile lf ON lf.group# = l.group# + JOIN gv$instance i ON i.inst_id = l.thread# + WHERE lf.status = 'INVALID' + ORDER BY l.group#, i.instance_name + ) + LOOP + dbms_output.put_line(i.sqltext || ';'); + -- execute immediate i.sqltext; + END LOOP; +END; +/ + + + +-------------------------------------------------- +-- Drop logfiles +-------------------------------------------------- +set serveroutput on size unlimited +BEGIN + FOR i in ( + SELECT 'alter database drop logfile member ''' || lf.member || '''' sqltext + , l.status + FROM v$log l + JOIN v$logfile lf ON lf.group# = l.group# + WHERE l.members = 2 + and l.status NOT IN ('CURRENT') + and lf.member like '+RECO_DM02_EXT%' + ORDER BY l.group# + ) + LOOP + dbms_output.put_line(i.sqltext || ';'); + -- execute immediate i.sqltext; + END LOOP; + + FOR i in ( + SELECT 'alter database drop logfile member ''' || lf.member || '''' sqltext + , 'alter system archive log instance ''' || i.instance_name || ''' current' sqltext2 + , l.status + FROM v$log l + JOIN v$logfile lf ON lf.group# = l.group# + JOIN gv$instance i ON i.inst_id = l.thread# + WHERE l.members = 2 + and lf.member like '+RECO_DM02_EXT%' + and l.status = 'CURRENT' + ORDER BY l.group#, i.instance_name + ) + LOOP + dbms_output.put_line(i.sqltext2 || ';'); + -- execute immediate i.sqltext2; + dbms_output.put_line(i.sqltext || ';'); + -- execute immediate i.sqltext; + END LOOP; +END; +/ + diff --git a/vg/redolog_member.sql b/vg/redolog_member.sql new file mode 100644 index 0000000..6d01dc8 --- /dev/null +++ b/vg/redolog_member.sql @@ -0,0 +1,63 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Online/Standby Redo log members +* Version : +* Parameters : None +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 17-AUG-15 Vishal Gupta Skip 1 line on redolog type +* 14-JUL-14 Vishal Gupta Created +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +Prompt +Prompt ************************ +Prompt * Redologs Information +Prompt ************************ + +COLUMN type HEADING "Redo|Log|Type" FORMAT a7 +COLUMN group# HEADING "Group#" FORMAT 9999 +COLUMN thread# HEADING "Thread#" FORMAT 9999 +COLUMN status HEADING "Status" FORMAT a10 +COLUMN member HEADING "Member" FORMAT a100 + +BREAK ON type SKIP 1 ON thread# ON group# + +SELECT 'Online' type + , l.thread# + , l.group# + , l.status + , f.member + FROM v$log l + JOIN v$logfile f ON f.group# = l.group# +UNION ALL +SELECT 'Standby' type + , l.thread# + , l.group# + , l.status + , f.member + FROM v$standby_log l + JOIN v$logfile f ON f.group# = l.group# +ORDER BY type, thread# , group# +; + +@@footer diff --git a/vg/redolog_remove_extra_member.sql b/vg/redolog_remove_extra_member.sql new file mode 100644 index 0000000..0ceebfe --- /dev/null +++ b/vg/redolog_remove_extra_member.sql @@ -0,0 +1,62 @@ + +/* +* +* Author : Vishal Gupta +* Purpose : Remove extra online redolog members. +* Version : +* Parameters : None +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 17-DEC-15 Vishal Gupta Created +* +* +*/ + +set serveroutput on +BEGIN + -- Remove extra redo log member from non-current online redologs + FOR i in + (SELECT 'alter database drop logfile member ''' + || max(lf.member) + || '''' sqltext + , l.status + FROM v$log l + JOIN v$logfile lf ON lf.group# = l.group# + WHERE l.members = 2 + and l.status NOT IN ('CURRENT') + group by l.group#, l.status + ORDER BY l.group# + ) + LOOP + dbms_output.put_line(i.sqltext || ';'); + execute immediate i.sqltext; + END LOOP; + + -- Switch current online redo and remove extra member + FOR i in + (SELECT 'alter database drop logfile member ''' + || max(lf.member) + || '''' sqltext + , 'alter system archive log instance ''' || i.instance_name || ''' current' sqltext2 + , l.status + FROM v$log l + JOIN v$logfile lf ON lf.group# = l.group# + JOIN gv$instance i ON i.inst_id = l.thread# + WHERE l.members = 2 + and l.status = 'CURRENT' + group by l.group#, i.instance_name, l.status + ORDER BY l.group#, i.instance_name + ) + LOOP + dbms_output.put_line(i.sqltext2 || ';'); + execute immediate i.sqltext2; + dbms_output.put_line(i.sqltext || ';'); + execute immediate i.sqltext; + END LOOP; +END; +/ + diff --git a/vg/restore_points.sql b/vg/restore_points.sql new file mode 100644 index 0000000..1c8d713 --- /dev/null +++ b/vg/restore_points.sql @@ -0,0 +1,59 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display restore points +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 25-Apr-16 Vishal Gupta Created +*/ + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +DEFINE BYTES_FORMAT="9,999,999" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024" +DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="GB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" + + +PROMPT ***************************************************************** +PROMPT * Restore Points +PROMPT ***************************************************************** + + +COLUMN time HEADING "Time" FORMAT a18 +COLUMN name HEADING "Name" FORMAT a40 +COLUMN guarantee_flashback_database HEADING "Guar|ant'd" FORMAT a5 +COLUMN preserved HEADING "Pre|ser|ved" FORMAT a3 +COLUMN restore_point_time HEADING "Restore|Point|Time" FORMAT a18 +COLUMN scn HEADING "SCN" FORMAT 999999999999999 +COLUMN database_incarnation# HEADING "DB|Inc#" FORMAT 9999 +COLUMN storage_size HEADING "Size(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT + + + + +SELECT TO_CHAR(r.time,'DD-MON-YY HH24:MI:SS') time + , r.name + , r.guarantee_flashback_database + , r.preserved + , r.database_incarnation# + , r.scn + , (r.storage_size)/&&BYTES_DIVIDER storage_size + , TO_CHAR(r.restore_point_time,'DD-MON-YY HH24:MI:SS') restore_point_time + FROM v$restore_point r +ORDER BY r.time +; + + +@@footer diff --git a/vg/result_cache_stats.sql b/vg/result_cache_stats.sql new file mode 100644 index 0000000..16d7d52 --- /dev/null +++ b/vg/result_cache_stats.sql @@ -0,0 +1,186 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display Results Cache Statistics +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-JUL-14 Vishal Gupta Created +* +*/ + +set term on + +undefine _IF_INST1_EXISTS +undefine _IF_INST2_EXISTS +undefine _IF_INST3_EXISTS +undefine _IF_INST4_EXISTS +undefine _IF_INST5_EXISTS +undefine _IF_INST6_EXISTS +undefine _IF_INST7_EXISTS +undefine _IF_INST8_EXISTS +undefine _IF_INST9_EXISTS +undefine _IF_INST10_EXISTS +undefine _IF_INST11_EXISTS +undefine _IF_INST12_EXISTS +undefine _IF_INST13_EXISTS +undefine _IF_INST14_EXISTS +undefine _IF_INST15_EXISTS +undefine _IF_INST16_EXISTS + +define _IF_INST1_EXISTS="--" +define _IF_INST2_EXISTS="--" +define _IF_INST3_EXISTS="--" +define _IF_INST4_EXISTS="--" +define _IF_INST5_EXISTS="--" +define _IF_INST6_EXISTS="--" +define _IF_INST7_EXISTS="--" +define _IF_INST8_EXISTS="--" +define _IF_INST9_EXISTS="--" +define _IF_INST10_EXISTS="--" +define _IF_INST11_EXISTS="--" +define _IF_INST12_EXISTS="--" +define _IF_INST13_EXISTS="--" +define _IF_INST14_EXISTS="--" +define _IF_INST15_EXISTS="--" +define _IF_INST16_EXISTS="--" + +col INST1_EXISTS new_value _IF_INST1_EXISTS noprint +col INST2_EXISTS new_value _IF_INST2_EXISTS noprint +col INST3_EXISTS new_value _IF_INST3_EXISTS noprint +col INST4_EXISTS new_value _IF_INST4_EXISTS noprint +col INST5_EXISTS new_value _IF_INST5_EXISTS noprint +col INST6_EXISTS new_value _IF_INST6_EXISTS noprint +col INST7_EXISTS new_value _IF_INST7_EXISTS noprint +col INST8_EXISTS new_value _IF_INST8_EXISTS noprint +col INST9_EXISTS new_value _IF_INST9_EXISTS noprint +col INST10_EXISTS new_value _IF_INST10_EXISTS noprint +col INST11_EXISTS new_value _IF_INST11_EXISTS noprint +col INST12_EXISTS new_value _IF_INST12_EXISTS noprint +col INST13_EXISTS new_value _IF_INST13_EXISTS noprint +col INST14_EXISTS new_value _IF_INST14_EXISTS noprint +col INST15_EXISTS new_value _IF_INST15_EXISTS noprint +col INST16_EXISTS new_value _IF_INST16_EXISTS noprint + +set term off +SELECT MIN(DECODE(inst_id,1,' ', '--')) INST1_EXISTS + , MIN(DECODE(inst_id,2,' ', '--')) INST2_EXISTS + , MIN(DECODE(inst_id,3,' ', '--')) INST3_EXISTS + , MIN(DECODE(inst_id,4,' ', '--')) INST4_EXISTS + , MIN(DECODE(inst_id,5,' ', '--')) INST5_EXISTS + , MIN(DECODE(inst_id,6,' ', '--')) INST6_EXISTS + , MIN(DECODE(inst_id,7,' ', '--')) INST7_EXISTS + , MIN(DECODE(inst_id,8,' ', '--')) INST8_EXISTS + , MIN(DECODE(inst_id,9,' ', '--')) INST9_EXISTS + , MIN(DECODE(inst_id,10,' ', '--')) INST10_EXISTS + , MIN(DECODE(inst_id,11,' ', '--')) INST11_EXISTS + , MIN(DECODE(inst_id,12,' ', '--')) INST12_EXISTS + , MIN(DECODE(inst_id,13,' ', '--')) INST13_EXISTS + , MIN(DECODE(inst_id,14,' ', '--')) INST14_EXISTS + , MIN(DECODE(inst_id,15,' ', '--')) INST15_EXISTS + , MIN(DECODE(inst_id,16,' ', '--')) INST16_EXISTS + FROM gv$instance + GROUP BY version +; +set term on + +PROMPT +PROMPT #################################### +PROMPT # RESULTS CACHE STATISTICS # +PROMPT #################################### +PROMPT + +COLUMN end_column HEADING " " FORMAT a1 +COLUMN name HEADING "StatName" FORMAT a28 +COLUMN value_inst1 HEADING "Inst1" FORMAT a10 +COLUMN value_inst2 HEADING "Inst2" FORMAT a10 +COLUMN value_inst3 HEADING "Inst3" FORMAT a10 +COLUMN value_inst4 HEADING "Inst4" FORMAT a10 +COLUMN value_inst5 HEADING "Inst5" FORMAT a10 +COLUMN value_inst6 HEADING "Inst6" FORMAT a10 +COLUMN value_inst7 HEADING "Inst7" FORMAT a10 +COLUMN value_inst8 HEADING "Inst8" FORMAT a10 +COLUMN value_inst9 HEADING "Inst9" FORMAT a10 +COLUMN value_inst10 HEADING "Inst10" FORMAT a10 +COLUMN value_inst11 HEADING "Inst11" FORMAT a10 +COLUMN value_inst12 HEADING "Inst12" FORMAT a10 +COLUMN value_inst13 HEADING "Inst13" FORMAT a10 +COLUMN value_inst14 HEADING "Inst14" FORMAT a10 +COLUMN value_inst15 HEADING "Inst15" FORMAT a10 +COLUMN value_inst16 HEADING "Inst16" FORMAT a10 + + + +SELECT r.sid + , r.inst_id + FROM gv$session_client_result_cache r + JOIN gv$session s ON s.inst_id = r.inst_id AND s.sid = r.sid AND s.serial# = r.serial# +WHERE 1=1 +-- AND s.sid is null +; + +/* +SELECT rcs.name +&&_IF_INST1_EXISTS , MAX(DECODE(rcs.inst_id,1,rcs.value,NULL)) value_inst1 +&&_IF_INST2_EXISTS , MAX(DECODE(rcs.inst_id,2,rcs.value,NULL)) value_inst2 +&&_IF_INST3_EXISTS , MAX(DECODE(rcs.inst_id,3,rcs.value,NULL)) value_inst3 +&&_IF_INST4_EXISTS , MAX(DECODE(rcs.inst_id,4,rcs.value,NULL)) value_inst4 +&&_IF_INST5_EXISTS , MAX(DECODE(rcs.inst_id,5,rcs.value,NULL)) value_inst5 +&&_IF_INST6_EXISTS , MAX(DECODE(rcs.inst_id,6,rcs.value,NULL)) value_inst6 +&&_IF_INST7_EXISTS , MAX(DECODE(rcs.inst_id,7,rcs.value,NULL)) value_inst7 +&&_IF_INST8_EXISTS , MAX(DECODE(rcs.inst_id,8,rcs.value,NULL)) value_inst8 +&&_IF_INST9_EXISTS , MAX(DECODE(rcs.inst_id,8,rcs.value,NULL)) value_inst9 +&&_IF_INST10_EXISTS , MAX(DECODE(rcs.inst_id,10,rcs.value,NULL)) value_inst10 +&&_IF_INST11_EXISTS , MAX(DECODE(rcs.inst_id,11,rcs.value,NULL)) value_inst11 +&&_IF_INST12_EXISTS , MAX(DECODE(rcs.inst_id,12,rcs.value,NULL)) value_inst12 +&&_IF_INST13_EXISTS , MAX(DECODE(rcs.inst_id,13,rcs.value,NULL)) value_inst13 +&&_IF_INST14_EXISTS , MAX(DECODE(rcs.inst_id,14,rcs.value,NULL)) value_inst14 +&&_IF_INST15_EXISTS , MAX(DECODE(rcs.inst_id,15,rcs.value,NULL)) value_inst15 +&&_IF_INST16_EXISTS , MAX(DECODE(rcs.inst_id,16,rcs.value,NULL)) value_inst16 + FROM gv$result_cache_statistics rcs +GROUP BY rcs.name +ORDER BY DECODE(rcs.name + ,'Block Size (Bytes)' ,1 + ,'Block Count Current' ,2 + ,'Block Count Maximum' ,3 + ,'Result Size Maximum (Blocks)' ,4 + ,'Find Count' ,5 + ,'Find Copy Count' ,6 + ,'Global Hit Count' ,7 + ,'Global Miss Count' ,8 + ,'Create Count Failure' ,9 + ,'Invalidation Count' ,10 + ,'Delete Count Valid' ,11 + ,'Delete Count Invalid' ,12 + ,'Hash Chain Length' ,13 + ,'Latch (Share)' ,14 + ,'Create Count Success' ,15 + ,99) +; +*/ + + +undefine _IF_INST1_EXISTS +undefine _IF_INST2_EXISTS +undefine _IF_INST3_EXISTS +undefine _IF_INST4_EXISTS +undefine _IF_INST5_EXISTS +undefine _IF_INST6_EXISTS +undefine _IF_INST7_EXISTS +undefine _IF_INST8_EXISTS +undefine _IF_INST9_EXISTS +undefine _IF_INST10_EXISTS +undefine _IF_INST11_EXISTS +undefine _IF_INST12_EXISTS +undefine _IF_INST13_EXISTS +undefine _IF_INST14_EXISTS +undefine _IF_INST15_EXISTS +undefine _IF_INST16_EXISTS + + +@@footer diff --git a/vg/resumable.sql b/vg/resumable.sql new file mode 100644 index 0000000..26f6669 --- /dev/null +++ b/vg/resumable.sql @@ -0,0 +1,59 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display resumable sessions +* Version : 10.1 and above +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-Oct-12 Vishal Gupta Created +* +* +*/ + + + +PROMPT +PROMPT **************************************** +PROMPT * R E S U M A B L E S E S S I O N S +PROMPT **************************************** +PROMPT + +COLUMN SID HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN status HEADING "Resumable|Status" FORMAT a10 +COLUMN timeout HEADING "Timeout|(sec)" FORMAT 999999 +COLUMN username HEADING "DB|UserName" FORMAT a15 +COLUMN osuser HEADING "OS|UserName" FORMAT a15 TRUNCATE +COLUMN name HEADING "Name" FORMAT a25 +COLUMN error_msg HEADING "Error|Message" FORMAT a40 WRAP +COLUMN sql_text HEADING "SQLText" FORMAT a30 TRUNCATE + +SELECT s.sid + , s.inst_id + , r.status + , r.timeout + , r.start_time + , r.suspend_time + , r.resume_time + , s.username + , s.osuser + --, r.name + , s.sql_id + , r.error_msg + --, r.sql_text + FROM dba_resumable r + , dba_users u + , gv$session s + WHERE r.user_id = u.user_id + AND r.instance_id = s.inst_id + AND r.session_id = s.sid +; + +@@footer diff --git a/vg/rman_backup_job_details.sql b/vg/rman_backup_job_details.sql new file mode 100644 index 0000000..a053531 --- /dev/null +++ b/vg/rman_backup_job_details.sql @@ -0,0 +1,100 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display RMAN Backup job Details +* Parameters : 1 - Input Type (e.g DB FULL, ARCHIVELOG, DB INCR etc. Use % as wildcard character) +* 2 - Status (e.g COMPLETED, RUNNING, FAILED. Use % as wildcard character) +* 3 - Device Type (e.g DISK , SBT_TAPE . Use % as wildcard character) +* 4 - StartTime (In YYYY-MM-DD HH24:MI:SS format. Use % as wildcard character) +* 5 - EndTime (In YYYY-MM-DD HH24:MI:SS format. Use % as wildcard character) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-OCT-14 Vishal Gupta Added input parmaeters to allow output filtering +* 17-Oct-13 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INPUT_TYPE +UNDEFINE STATUS +UNDEFINE OUTPUT_DEVICE_TYPE +UNDEFINE START_TIME +UNDEFINE END_TIME + +DEFINE INPUT_TYPE="&&1" +DEFINE STATUS="&&2" +DEFINE OUTPUT_DEVICE_TYPE="&&3" +DEFINE START_TIME="&&4" +DEFINE END_TIME="&&5" + +set term off +COLUMN _INPUT_TYPE NEW_VALUE INPUT_TYPE NOPRINT +COLUMN _STATUS NEW_VALUE STATUS NOPRINT +COLUMN _OUTPUT_DEVICE_TYPE NEW_VALUE OUTPUT_DEVICE_TYPE NOPRINT +COLUMN _START_TIME NEW_VALUE START_TIME NOPRINT +COLUMN _END_TIME NEW_VALUE END_TIME NOPRINT + +SELECT UPPER(DECODE('&&INPUT_TYPE' ,'','%','&&INPUT_TYPE')) "_INPUT_TYPE" + , UPPER(DECODE('&&STATUS' ,'','%','&&STATUS')) "_STATUS" + , UPPER(DECODE('&&OUTPUT_DEVICE_TYPE','','%','&&OUTPUT_DEVICE_TYPE')) "_OUTPUT_DEVICE_TYPE" + , UPPER(DECODE('&&START_TIME','',TO_CHAR(sysdate - 30, 'YYYY-MM-DD HH24:MI:SS'),'&&START_TIME')) "_START_TIME" + , UPPER(DECODE('&&END_TIME','',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS'),'&&END_TIME')) "_END_TIME" +FROM DUAL; +set term on + + +PROMPT *********************************************************************** +PROMPT * RMAN Backup Job Details +PROMPT * +PROMPT * Input Parmaeters +PROMPT * Input Type = '&&INPUT_TYPE' +PROMPT * Status = '&&STATUS' +PROMPT * DeviceType = '&&OUTPUT_DEVICE_TYPE' +PROMPT * StartTime = '&&START_TIME' (YYYY-MM-DD HH24:MI:SS format) +PROMPT * EndTime = '&&END_TIME' (YYYY-MM-DD HH24:MI:SS format) +PROMPT *********************************************************************** + +COLUMN input_type HEADING "Input|Type" FORMAT a18 +COLUMN status HEADING "Status" FORMAT a23 +COLUMN output_device_type HEADING "Output|Device|Type" FORMAT a10 +COLUMN start_time HEADING "StartTime" FORMAT a20 +COLUMN end_time HEADING "EndTime" FORMAT a20 +COLUMN time_taken_display HEADING "Duration" FORMAT a10 +COLUMN input_bytes_display HEADING "Input|Bytes" FORMAT a10 +COLUMN output_bytes_display HEADING "Output|Bytes" FORMAT a10 +COLUMN compression_ratio HEADING "Compression|Ratio" FORMAT 999.99 +COLUMN input_bytes_per_sec_display HEADING "InputRate|PerSec" FORMAT a10 JUSTIFY RIGHT +COLUMN output_bytes_per_sec_display HEADING "OutputRate|PerSec" FORMAT a10 JUSTIFY RIGHT + + +SELECT r.input_type + , r.status + , r.output_device_type + , TO_CHAR(r.start_time,'DD-MON-YY HH24:MI:SS') start_time + , DECODE(r.status,'RUNNING','',TO_CHAR(r.end_time,'DD-MON-YY HH24:MI:SS')) end_time + , r.time_taken_display + , r.input_bytes_display + , r.output_bytes_display + , r.compression_ratio + , r.input_bytes_per_sec_display + , r.output_bytes_per_sec_display +FROM v$rman_backup_job_details r +WHERE 1=1 + AND NVL(r.input_type,'x') LIKE '&&INPUT_TYPE' + AND NVL(r.status,'x') LIKE '&&STATUS' + AND NVL(r.output_device_type,'x') LIKE '&&OUTPUT_DEVICE_TYPE' + AND (r.start_time is NULL OR r.start_time >= TO_DATE('&&START_TIME','YYYY-MM-DD HH24:MI:SS') ) + AND (r.end_time is NULL OR r.end_time <= TO_DATE('&&END_TIME' ,'YYYY-MM-DD HH24:MI:SS') ) +ORDER BY r.start_time +; + + + +@@footer \ No newline at end of file diff --git a/vg/rman_backup_output.sql b/vg/rman_backup_output.sql new file mode 100644 index 0000000..60d0994 --- /dev/null +++ b/vg/rman_backup_output.sql @@ -0,0 +1,19 @@ +SELECT s.START_TIME + ,s.status + ,s.row_type + ,s.operation + ,s.object_type + ,s.output_device_Type + ,o.output + FROM v$rman_status s + , v$rman_output o + WHERE o.db_key = s.db_key + AND o.rsr_key = s.RSR_KEY + AND o.session_key = s.SESSION_KEY + AND s.start_time > sysdate - 1 + AND s.status NOT IN ( 'COMPLETED' ) + ORDER by s.START_TIME + , o.stamp + , o.recid + ; + diff --git a/vg/rman_check_backups.bash b/vg/rman_check_backups.bash new file mode 100644 index 0000000..b6263be --- /dev/null +++ b/vg/rman_check_backups.bash @@ -0,0 +1,118 @@ +#!/bin/bash +###################################################################### +# Author : Vishal Gupta +# Date Created : 23-Jun-2008 +# Purpose : Check RMAN backup status +# +# Modification History +# Date Ver Author Remarks +# -------- --- -------------- --------------------------------------- +# 23/06/08 0.1 Vishal Gupta First Draft +# +# +###################################################################### + +################################################################################ +# RMAN Repository database variables +################################################################################ +RMANCAT_USER=rmanrep +RMANCAT_PASSWORD_ENCRYPTED=HP0aEW +RMANCAT_SERVICE=RMAN01P +EMAIL_ADDRESSES="fm.eu.DBAAlerts@rabobank.com" +UNENCRY=/appl/oracle/admin/scripts/unencry +LOGDIR=/appl/oracle/admin/logs +LOGFILE=${LOGDIR}/`basename $0`_`date '+%Y%m%d_%H%M%S'`.log +LOG_KEEPDAY=14 + +export ORACLE_HOME=/appl/oracle/product/10.2.0 +export PATH=$ORACLE_HOME/bin:$PATH +export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH + +###################################### +# M A I N E X E C U T I O N +###################################### + +find ${LOGDIR} -name `basename $0`*log -mtime +${LOG_KEEPDAY} -exec rm {} \; + +sqlplus -s /nolog >>${LOGFILE} < sysdate - 1 + (1/24) + -- exclude manual list command errors and overall session status. + -- individual backup/restore/delete step errors will still be reported + AND s.operation NOT IN ('RMAN' + ,'LIST' + ,'REPORT' + ,'DUPLICATE DB' -- used to clone db on non-prod + ,'RESTORE' + ,'RESTORING AND APPLYING LOGS' + ,'RECOVER AND APPLYING LOGS' + ) + AND s.status NOT IN ('COMPLETED' + ,'RUNNING' + ,'RUNNING WITH WARNINGS' + ,'COMPLETED WITH WARNINGS' + ) +ORDER BY start_time asc; + +PROMPT +PROMPT +PROMPT Last successful backup +PROMPT ####################### +COLUMN max_end_time FORMAT a30 HEADING "Last Successfull DB Backup" +COLUMN backedup_yesterday FORMAT a30 HEADING "Backed up in last 24hrs ?" +SELECT d.name + , to_char(max(s.end_time),'dd-MON-YY hh24:mi:SS') max_end_time + , CASE WHEN max(s.end_time) > trunc(sysdate -1) + THEN 'Yes' + ELSE 'No' + END backedup_yesterday + FROM rc_database d + , rc_rman_status s + WHERE d.DB_KEY = s.db_key + AND d.DBINC_KEY = s.DBINC_KEY + AND d.NAME = s.db_name + AND s.row_type = 'COMMAND' + AND s.operation = 'BACKUP' + AND s.object_type in ( 'DB FULL','DB INCR') + AND s.status = 'COMPLETED' + GROUP BY d.name + ORDER by d.name + ; + +EOF + +cat $LOGFILE |mailx -s "Oracle RMAN Backup status ** MORNING CHECK **" "${EMAIL_ADDRESSES}" + + diff --git a/vg/rman_clone_database.rman b/vg/rman_clone_database.rman new file mode 100644 index 0000000..be70623 --- /dev/null +++ b/vg/rman_clone_database.rman @@ -0,0 +1,36 @@ + +rman target / < sysdate - &&days + AND s.operation LIKE '&&operation' + AND s.object_type LIKE '&&object_type' + &&whereclause +ORDER BY s.start_time +; + + +@@footer \ No newline at end of file diff --git a/vg/rman_sessions.sql b/vg/rman_sessions.sql new file mode 100644 index 0000000..d973c1a --- /dev/null +++ b/vg/rman_sessions.sql @@ -0,0 +1,84 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display RMAN sessions +* Parameters : +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 07-Feb-14 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE days +UNDEFINE operation +UNDEFINE object_type +UNDEFINE whereclause + +DEFINE days="&&1" +DEFINE operation="&&2" +DEFINE object_type="&&3" +DEFINE whereclause="&&4" + +set term off +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _operation NEW_VALUE operation NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +SELECT UPPER(DECODE('&&days','','1','&&days')) "_days" + , UPPER(DECODE('&&operation','','%','&&operation')) "_operation" + , UPPER(DECODE('&&object_type','','%','&&object_type')) "_object_type" +FROM DUAL +; +set term on + + +PROMPT ************************************************************************* +PROMPT * RMAN Sessions +PROMPT * +PROMPT * Input Parameter +PROMPT * - Days = '&&days' +PROMPT * - Operation = '&&operation' +PROMPT * - Object Type = '&&object_type' +PROMPT * - Whereclause = '&&whereclause' +PROMPT ************************************************************************* + +COLUMN session_recid HEADING "SESSION|RECID" FORMAT 9999999 +COLUMN session_stamp HEADING "SESSION|STAMP" FORMAT 9999999999 +COLUMN start_time HEADING "Start Time" FORMAT a20 +COLUMN end_time HEADING "End Time" FORMAT a20 +COLUMN output_device_type HEADING "Output|Device|Type" FORMAT a10 +COLUMN operation HEADING "Operation" FORMAT a30 +COLUMN object_type HEADING "Object Type" FORMAT a15 +COLUMN input_gb HEADING "Input|(GB)" FORMAT 999,999 +COLUMN output_gb HEADING "Output|(GB)" FORMAT 999,999 +COLUMN optimized HEADING "Optimized" FORMAT a10 + +SELECT /*+ RULE */ + s.session_recid + , s.session_stamp + , TO_CHAR(s.start_time,'DD-MON-YY HH24:MI:SS') start_time + , TO_CHAR(s.end_time,'DD-MON-YY HH24:MI:SS') end_time + , s.output_device_type + , s.operation + , s.object_type + , ROUND(s.input_bytes/power(1024,3)) input_gb + , ROUND(s.output_bytes/power(1024,3)) output_gb + , s.optimized + FROM v$rman_status s + WHERE s.start_time > sysdate - &&days + AND s.operation LIKE '&&operation' + AND s.object_type LIKE '&&object_type' + &&whereclause +ORDER BY s.start_time +; + + +@@footer \ No newline at end of file diff --git a/vg/rmancat_backup_job_details.sql b/vg/rmancat_backup_job_details.sql new file mode 100644 index 0000000..d033c8c --- /dev/null +++ b/vg/rmancat_backup_job_details.sql @@ -0,0 +1,111 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display RMAN Backup job Details +* Parameters : 1 - DB_NAME (Use % as wildcard character) +* 2 - Input Type (e.g DB FULL, ARCHIVELOG, DB INCR etc. Use % as wildcard character) +* 3 - Status (e.g COMPLETED, RUNNING, FAILED. Use % as wildcard character) +* 4 - Device Type (e.g DISK , SBT_TAPE . Use % as wildcard character) +* 5 - StartTime (In YYYY-MM-DD HH24:MI:SS format. Use % as wildcard character) +* 6 - EndTime (In YYYY-MM-DD HH24:MI:SS format. Use % as wildcard character) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-OCT-14 Vishal Gupta Added input parmaeters to allow output filtering +* 17-Oct-13 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INPUT_TYPE +UNDEFINE STATUS +UNDEFINE OUTPUT_DEVICE_TYPE +UNDEFINE START_TIME +UNDEFINE END_TIME + +DEFINE DB_NAME="&&1" +DEFINE INPUT_TYPE="&&2" +DEFINE STATUS="&&3" +DEFINE OUTPUT_DEVICE_TYPE="&&4" +DEFINE START_TIME="&&5" +DEFINE END_TIME="&&6" + +set term off +COLUMN _DB_NAME NEW_VALUE DB_NAME NOPRINT +COLUMN _INPUT_TYPE NEW_VALUE INPUT_TYPE NOPRINT +COLUMN _STATUS NEW_VALUE STATUS NOPRINT +COLUMN _OUTPUT_DEVICE_TYPE NEW_VALUE OUTPUT_DEVICE_TYPE NOPRINT +COLUMN _START_TIME NEW_VALUE START_TIME NOPRINT +COLUMN _END_TIME NEW_VALUE END_TIME NOPRINT + +SELECT UPPER(DECODE('&&DB_NAME' ,'','%','&&DB_NAME')) "_DB_NAME" + , UPPER(DECODE('&&INPUT_TYPE' ,'','DB%','&&INPUT_TYPE')) "_INPUT_TYPE" + , UPPER(DECODE('&&STATUS' ,'','%','&&STATUS')) "_STATUS" + , UPPER(DECODE('&&OUTPUT_DEVICE_TYPE','','DISK','&&OUTPUT_DEVICE_TYPE')) "_OUTPUT_DEVICE_TYPE" + , UPPER(DECODE('&&START_TIME','',TO_CHAR(sysdate - 7, 'YYYY-MM-DD HH24:MI:SS'),'&&START_TIME')) "_START_TIME" + , UPPER(DECODE('&&END_TIME','',TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS'),'&&END_TIME')) "_END_TIME" +FROM DUAL; +set term on + + +PROMPT *********************************************************************** +PROMPT * RMAN Backup Job Details +PROMPT * +PROMPT * Input Parmaeters +PROMPT * DB Name = '&&DB_NAME' +PROMPT * Input Type = '&&INPUT_TYPE' +PROMPT * Status = '&&STATUS' +PROMPT * DeviceType = '&&OUTPUT_DEVICE_TYPE' +PROMPT * StartTime = '&&START_TIME' (YYYY-MM-DD HH24:MI:SS format) +PROMPT * EndTime = '&&END_TIME' (YYYY-MM-DD HH24:MI:SS format) +PROMPT *********************************************************************** + +COLUMN db_name HEADING "DB Name" FORMAT a10 +COLUMN input_type HEADING "Input|Type" FORMAT a12 +COLUMN status HEADING "Status" FORMAT a18 TRUNC +COLUMN output_device_type HEADING "Output|Device|Type" FORMAT a10 +COLUMN start_time HEADING "StartTime" FORMAT a20 +COLUMN end_time HEADING "EndTime" FORMAT a20 +COLUMN time_taken_display HEADING "Duration" FORMAT a10 +COLUMN input_bytes_display HEADING "Input|Bytes" FORMAT a10 +COLUMN output_bytes_display HEADING "Output|Bytes" FORMAT a10 +COLUMN compression_ratio HEADING "Compression|Ratio" FORMAT 999.99 +COLUMN optimized HEADING "Opt" FORMAT a3 +COLUMN input_bytes_per_sec_display HEADING "InputRate|PerSec" FORMAT a10 JUSTIFY RIGHT +COLUMN output_bytes_per_sec_display HEADING "OutputRate|PerSec" FORMAT a10 JUSTIFY RIGHT + + +SELECT r.db_name + , r.input_type + , r.status + , r.output_device_type + , TO_CHAR(r.start_time,'DD-MON-YY HH24:MI:SS') start_time + , DECODE(r.status,'RUNNING','',TO_CHAR(r.end_time,'DD-MON-YY HH24:MI:SS')) end_time + , r.time_taken_display + , r.input_bytes_display + , r.output_bytes_display + , r.compression_ratio + , r.optimized + , r.input_bytes_per_sec_display + , r.output_bytes_per_sec_display +FROM rc_rman_backup_job_details r +WHERE 1=1 + AND NVL(r.db_name,'x') LIKE '&&DB_NAME' + AND NVL(r.input_type,'x') LIKE '&&INPUT_TYPE' + AND NVL(r.status,'x') LIKE '&&STATUS' + AND NVL(r.output_device_type,'x') LIKE '&&OUTPUT_DEVICE_TYPE' + AND (r.start_time is NULL OR r.start_time >= TO_DATE('&&START_TIME','YYYY-MM-DD HH24:MI:SS') ) + AND (r.end_time is NULL OR r.end_time <= TO_DATE('&&END_TIME' ,'YYYY-MM-DD HH24:MI:SS') ) +ORDER BY r.db_name + , r.start_time +; + + + +@@footer \ No newline at end of file diff --git a/vg/rmancat_backup_output.sql b/vg/rmancat_backup_output.sql new file mode 100644 index 0000000..8f2021c --- /dev/null +++ b/vg/rmancat_backup_output.sql @@ -0,0 +1,23 @@ +SELECT s.session_key + ,s.START_TIME + ,s.DB_NAME + ,s.status + ,s.row_type + ,s.operation + ,s.object_type + ,s.output_device_Type + ,o.output + FROM rc_rman_status s + , rc_rman_output o + WHERE o.db_key = s.db_key + AND o.rsr_key = s.RSR_KEY + AND o.session_key = s.SESSION_KEY +-- AND o.session_key = 123456 +-- AND s.db_name like '%BOB%' +-- AND s.start_time > sysdate - 1 +-- AND s.status NOT IN ( 'COMPLETED' ) + ORDER by s.START_TIME + , o.stamp + , o.recid + ; + diff --git a/vg/rmancat_backup_size_daily_breakdown.sql b/vg/rmancat_backup_size_daily_breakdown.sql new file mode 100644 index 0000000..1d140ec --- /dev/null +++ b/vg/rmancat_backup_size_daily_breakdown.sql @@ -0,0 +1,118 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display RMAN Backup size for a database +* Arguments : 1 - Database name +* 2 - no of days +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-Aug-08 Vishal Gupta First Draft +*/ +set term on + +DEFINE database="%&&1%" +DEFINE days="&&2" + +COLUMN start_time HEADING "StartTime" FORMAT a9 + +COLUMN sum_mb_of_disk_control_file HEADING "Disk|Control|(MB)" FORMAT 9,999 +COLUMN sum_mb_of_disk_arch HEADING "Disk|Arch|(MB)" FORMAT 999,999 +COLUMN sum_mb_of_disk_full HEADING "Disk|Full|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_disk_IncLevel1 HEADING "Disk|Inc 1|(MB)" FORMAT 999,999 +COLUMN sum_mb_of_disk_IncLevel2 HEADING "Disk|Inc 2|(MB)" FORMAT 999,999 +COLUMN sum_mb_of_disk_others HEADING "Disk|Others|(MB)" FORMAT 99,999 +COLUMN sum_mb_of_disk_daytotal HEADING "Disk|DayTotal|(MB)" FORMAT 99,999,999 + +COLUMN sum_mb_of_tape_control_file HEADING "Tape|Control|(MB)" FORMAT 99,999 +COLUMN sum_mb_of_tape_arch HEADING "Tape|Arch|(MB)" FORMAT 999,999 +COLUMN sum_mb_of_tape_full HEADING "Tape|Full|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_tape_IncLevel1 HEADING "Tape|Inc 1|(MB)" FORMAT 999,999 +COLUMN sum_mb_of_tape_IncLevel2 HEADING "Tape|Inc 2|(MB)" FORMAT 999,999 +COLUMN sum_mb_of_tape_others HEADING "Tape|Others|(MB)" FORMAT 99,999 +COLUMN sum_mb_of_tape_daytotal HEADING "Tape|DayTotal|(MB)" FORMAT 99,999,999 + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_control_file FORMAT 9,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_arch FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_full FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_IncLevel1 FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_IncLevel2 FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_others FORMAT 99,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_daytotal FORMAT 99,999,999 ON REPORT + + +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_control_file FORMAT 99,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_arch FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_full FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_IncLevel1 FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_IncLevel2 FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_others FORMAT 99,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_daytotal FORMAT 99,999,999 ON REPORT + + +SELECT a.db_name + , TO_CHAR(TRUNC(a.START_TIME),'DD-MON-YY') Start_time + , to_char(TRUNC(a.START_TIME),'Dy') Day + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'ControlFile' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_control_file + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'Arch' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_arch + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'Full' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_full + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'IncLevel1' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_IncLevel1 + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'IncLevel2' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_IncLevel2 + , ROUND(SUM(CASE WHEN (device_type = 'DISK' AND backup_type IN ('ControlFile','Arch','Full','IncLevel1','IncLevel2') ) THEN 0 + WHEN device_type = 'SBT_TAPE' THEN 0 + ELSE a.bytes + END)/1024/1024) sum_mb_of_disk_others + , ROUND(SUM(CASE WHEN (device_type = 'DISK') THEN a.bytes + ELSE 0 + END)/1024/1024) sum_mb_of_disk_daytotal + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'ControlFile' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_control_file + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'Arch' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_arch + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'Full' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_full + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'IncLevel1' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_IncLevel1 + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'IncLevel2' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_IncLevel2 + , ROUND(SUM(CASE WHEN (device_type = 'SBT_TAPE' AND backup_type IN ('ControlFile','Arch','Full','IncLevel1','IncLevel2') ) THEN 0 + WHEN device_type = 'DISK' THEN 0 + ELSE a.bytes + END)/1024/1024) sum_mb_of_tape_others + , ROUND(SUM(CASE WHEN (device_type = 'SBT_TAPE') THEN a.bytes + ELSE 0 + END)/1024/1024) sum_mb_of_tape_daytotal +FROM (SELECT d.NAME db_name + , bp.START_TIME + , bp.device_type + , DECODE(bp.backup_type + ,'L','Arch' + ,'D', DECODE(NVL(bp.incremental_level,-1) + ,0,'Full' + ,-1,'ControlFile' + ,bp.incremental_level + ) + ,'I', DECODE(bp.incremental_level + ,0,'Full' + ,'IncLevel' ||bp.incremental_level + ) + ,bp.backup_type + ) backup_type + , bp.bytes + , bp.incremental_level + FROM rc_backup_piece bp + , rc_database d + WHERE d.db_key = bp.db_key + AND d.name like '&database' + AND TRUNC(bp.START_TIME) > TRUNC(sysdate - &days) + ) a +group by a.DB_NAME + , TRUNC(a.START_TIME) +ORDER BY a.DB_NAME + , TRUNC(a.START_TIME); + + +@@footer + diff --git a/vg/rmancat_backup_size_history.sql b/vg/rmancat_backup_size_history.sql new file mode 100644 index 0000000..9d9409d --- /dev/null +++ b/vg/rmancat_backup_size_history.sql @@ -0,0 +1,90 @@ +@@header +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display RMAN backup size from catalog +* Parameters : 1 - Database Name +* 2 - Device type (Disk, tape) +* 3 - No of days of history. +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-Jun-08 Vishal Gupta First Draft +*/ +set term on + +TTITLE LEFT "R M A N B A C K U P S I Z E S" +PROMPT + +DEFINE database_name=%="&&1"% +DEFINE output_device_type=%&2% +DEFINE days="&&3" + + +DEFINE star=4 +COLUMN UsageGraphWidth NOPRINT old_value UGWidth +SET FEED OFF +SELECT (100/&star+2) UsageGraphWidth +FROM DUAL; +SET FEED ON + + + + +COLUMN start_Time FORMAT a9 +COLUMN output_device_Type FORMAT a8 HEADING "Media" +COLUMN input_mb_sum FORMAT 9,999,999.99 HEADING "Input|(MB)" +COLUMN output_mb_sum FORMAT 9,999,999.99 HEADING "Output|(MB)" +COLUMN percent_compress FORMAT 990.99 HEADING "Compression (%)" +COLUMN input_graph FORMAT a27 HEADING "Input Graph" +COLUMN output_graph FORMAT a27 HEADING "Output Graph" + + + +SELECT a.db_name + , a.start_time + , a.output_device_type + , a.input_mb_sum + , a.output_mb_sum + , '|' || RPAD(LPAD(' ',CEIL( (a.input_mb_sum *100 / a.input_output_mb_sum_max ) /&star) ,'*'),100/&star) || '|' input_graph + , '|' || RPAD(LPAD(' ',CEIL( (a.output_mb_sum *100 / a.input_output_mb_sum_max ) /&star) ,'*'),100/&star) || '|' output_graph +FROM +( +SELECT s.db_name + , To_char(TRUNC(s.start_time),'DD-MON-YY') start_time + , s.output_device_type + , ROUND(sum(s.input_bytes)/1024/1024,2) input_mb_sum + , ROUND(sum(s.output_bytes)/1024/1024,2) output_mb_sum + , ROUND( (sum(s.input_bytes) - sum(s.output_bytes)) * 100 / sum(s.input_bytes),2) percent_compress + , max(input_output_mb_sum_max) input_output_mb_sum_max + FROM rc_rman_status s + , (SELECT GREATEST(MAX(ROUND(sum(input_bytes)/1024/1024,2)) + , MAX(ROUND(sum(output_bytes)/1024/1024,2)) + ) input_output_mb_sum_max + FROM rc_rman_status + WHERE output_device_type IS NOT NULL -- ignore connection entries + AND db_name like UPPER('&&database_name') + AND output_device_type like UPPER('&&output_device_type') + AND start_time > sysdate - &days + GROUP by db_name + , TRUNC(start_time) + , output_device_type + ) m + WHERE s.output_device_type IS NOT NULL -- ignore connection entries + AND s.db_name like UPPER('&&database_name') + AND s.output_device_type like UPPER('&&output_device_type') + AND s.start_time > sysdate - &days + GROUP by s.db_name + , TRUNC(s.start_time) + , s.output_device_type +ORDER BY db_name + , TRUNC(s.start_time) + , s.output_device_type +) a +ORDER BY A.START_TIME +; + +@@footer diff --git a/vg/rmancat_backup_size_overall_breakdown.sql b/vg/rmancat_backup_size_overall_breakdown.sql new file mode 100644 index 0000000..a3b6ba9 --- /dev/null +++ b/vg/rmancat_backup_size_overall_breakdown.sql @@ -0,0 +1,118 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display RMAN Backup size for a database +* Arguments : 1 - Database name +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-Aug-08 Vishal Gupta First Draft +*/ +set term on + +DEFINE database="%&&1%" + + +COLUMN dbid HEADING "DB Id" FORMAT 9999999999 +COLUMN resetlogs_time HEADING "ResetLogs Time" FORMAT a18 +COLUMN sum_mb_of_disk_control_file HEADING "Disk|Control|(MB)" FORMAT 99,999 +COLUMN sum_mb_of_disk_arch HEADING "Disk|Arch|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_disk_full HEADING "Disk|Full|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_disk_IncLevel1 HEADING "Disk|Inc 1|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_disk_IncLevel2 HEADING "Disk|Inc 2|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_disk_others HEADING "Disk|Others|(MB)" FORMAT 999,999 JUSTIFY RIGHT +COLUMN sum_mb_of_disk_total HEADING "Disk|Total|(MB)" FORMAT 99,999,999 + +COLUMN sum_mb_of_tape_control_file HEADING "Tape|Control|(MB)" FORMAT 999,999 +COLUMN sum_mb_of_tape_arch HEADING "Tape|Arch|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_tape_full HEADING "Tape|Full|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_tape_IncLevel1 HEADING "Tape|Inc 1|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_tape_IncLevel2 HEADING "Tape|Inc 2|(MB)" FORMAT 99,999,999 +COLUMN sum_mb_of_tape_others HEADING "Tape|Others|(MB)" FORMAT 999,999 +COLUMN sum_mb_of_tape_total HEADING "Tape|Total|(MB)" FORMAT 99,999,999 + + + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_control_file FORMAT 9,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_arch FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_full FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_IncLevel1 FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_IncLevel2 FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_others FORMAT 999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_disk_total FORMAT 9,999,999,999 ON REPORT + + +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_control_file FORMAT 99,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_arch FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_full FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_IncLevel1 FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_IncLevel2 FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_others FORMAT 999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF sum_mb_of_tape_total FORMAT 9,999,999,999 ON REPORT + + +SELECT a.name + , a.dbid +-- , a.resetlogs_time + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'ControlFile' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_control_file + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'Arch' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_arch + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'Full' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_full + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'IncLevel1' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_IncLevel1 + , ROUND(SUM(DECODE(a.device_type, 'DISK', DECODE(a.backup_type,'IncLevel2' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_disk_IncLevel2 + , ROUND(SUM(CASE WHEN (device_type = 'DISK' AND backup_type IN ('ControlFile','Arch','Full','IncLevel1','IncLevel2') ) THEN 0 + WHEN device_type = 'SBT_TAPE' THEN 0 + ELSE a.bytes + END)/1024/1024) sum_mb_of_disk_others + , ROUND(SUM(CASE WHEN (device_type = 'DISK') THEN a.bytes + ELSE 0 + END)/1024/1024) sum_mb_of_disk_total + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'ControlFile' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_control_file + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'Arch' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_arch + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'Full' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_full + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'IncLevel1' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_IncLevel1 + , ROUND(SUM(DECODE(a.device_type, 'SBT_TAPE', DECODE(a.backup_type,'IncLevel2' ,a.bytes,0) ,0) )/1024/1024) sum_mb_of_tape_IncLevel2 + , ROUND(SUM(CASE WHEN (device_type = 'SBT_TAPE' AND backup_type IN ('ControlFile','Arch','Full','IncLevel1','IncLevel2') ) THEN 0 + WHEN device_type = 'DISK' THEN 0 + ELSE a.bytes + END)/1024/1024) sum_mb_of_tape_others + , ROUND(SUM(CASE WHEN (device_type = 'SBT_TAPE') THEN a.bytes + ELSE 0 + END)/1024/1024) sum_mb_of_tape_total +FROM (SELECT d.NAME + , d.dbid + , d.resetlogs_time + , bp.START_TIME + , bp.device_type + , DECODE(bp.backup_type + ,'L','Arch' + ,'D', DECODE(NVL(bp.incremental_level,-1) + ,0,'Full' + ,-1,'ControlFile' + ,bp.incremental_level + ) + ,'I', DECODE(bp.incremental_level + ,0,'Full' + ,'IncLevel' ||bp.incremental_level + ) + ,bp.backup_type + ) backup_type + , bp.bytes + , bp.incremental_level + FROM rc_backup_piece bp + , rc_database d + WHERE d.db_key = bp.db_key + AND d.name like '&database' +) a +group by a.NAME, a.dbid, a.resetlogs_time +ORDER BY a.NAME, a.resetlogs_time; + + +@@footer + diff --git a/vg/rmancat_backup_sizes.sql b/vg/rmancat_backup_sizes.sql new file mode 100644 index 0000000..59df57c --- /dev/null +++ b/vg/rmancat_backup_sizes.sql @@ -0,0 +1,35 @@ +@@header +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display RMAN backup size from catalog +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-Jun-08 Vishal Gupta First Draft +*/ +set term on + +TTITLE LEFT "R M A N B A C K U P S I Z E S" +PROMPT +COLUMN input_mb_sum FORMAT 9,999,999.99 HEADING "Input|(MB)" +COLUMN output_mb_sum FORMAT 9,999,999.99 HEADING "Output|(MB)" +COLUMN percent_compress FORMAT 990.99 HEADING "Compression (%)" +SELECT s.db_name + , s.output_device_type + , ROUND(sum(s.input_bytes)/1024/1024,2) input_mb_sum + , ROUND(sum(s.output_bytes)/1024/1024,2) output_mb_sum + , ROUND( (sum(s.input_bytes) - sum(s.output_bytes)) * 100 / sum(s.input_bytes),2) percent_compress + FROM rc_rman_status s + WHERE s.END_TIME > sysdate - 1 + AND s.output_device_type IS NOT NULL -- ignore connection entries + GROUP by db_name + , s.output_device_type +ORDER BY db_name + , s.output_device_type +; + +@@footer diff --git a/vg/rmancat_backups_witherrors.sql b/vg/rmancat_backups_witherrors.sql new file mode 100644 index 0000000..e047570 --- /dev/null +++ b/vg/rmancat_backups_witherrors.sql @@ -0,0 +1,42 @@ +@@header +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display RMAN backup with errors +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-Jun-08 Vishal Gupta First Draft +*/ +set term on + +COLUMN start_Time FORMAT a18 +COLUMN status FORMAT a25 +COLUMN object_type FORMAT a15 +COLUMN row_type FORMAT a20 +COLUMN output_device_Type FORMAT a8 HEADING "Media" +COLUMN input_mb HEADING "Input|(MB)" FORMAT 999,990.99 +COLUMN output_mb HEADING "Output|(MB)" FORMAT 999,990.99 +COLUMN duration HEADING "Dur|(Min)" FORMAT 990.99 +SELECT to_char(s.end_Time,'dd-MON-YY hh24:mi:SS') start_time + ,s.db_name + ,s.status + -- ,s.row_type + ,s.operation + ,s.object_type + ,s.output_device_Type + ,ROUND(s.input_bytes/1024/1024,2) input_mb + ,ROUND(s.output_bytes/1024/1024,2) output_mb + ,ROUND( (s.end_time - s.start_time) * 24 * 60,2) duration +FROM rc_rman_status s +WHERE s.end_time > sysdate - 1 + (1/24) + AND s.status NOT IN ('COMPLETED' + ,'RUNNING' + ,'COMPLETED WITH WARNINGS' + ) +ORDER BY start_time asc; + +@@footer diff --git a/vg/rmancat_last_backupdate.sql b/vg/rmancat_last_backupdate.sql new file mode 100644 index 0000000..85b7c6e --- /dev/null +++ b/vg/rmancat_last_backupdate.sql @@ -0,0 +1,36 @@ +@@header +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display last date of RMAN backup +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-Jun-08 Vishal Gupta First Draft +*/ +set term on + +COLUMN max_end_time FORMAT a30 HEADING "Last Successfull DB Backup" +COLUMN backedup_yesterday FORMAT a30 HEADING "Backed up in last 24hrs ?" +SELECT to_char(s.start_Time,'dd-MON-YY hh24:mi:SS') start_time + ,s.db_name + ,s.status + -- ,s.row_type + ,s.operation + ,s.object_type + ,s.output_device_Type + ,ROUND(s.input_bytes/1024/1024,2) input_mb + ,ROUND(s.output_bytes/1024/1024,2) output_mb + ,ROUND( (s.end_time - s.start_time) * 24 * 60,2) duration +FROM rc_rman_status s +WHERE s.end_time > sysdate - 1 + (1/24) + AND s.status NOT IN ('COMPLETED' + ,'RUNNING' + ,'COMPLETED WITH WARNINGS' + ) +ORDER BY start_time asc; + +@@footer diff --git a/vg/rmancat_missing_arch_backups.sql b/vg/rmancat_missing_arch_backups.sql new file mode 100644 index 0000000..d6eb431 --- /dev/null +++ b/vg/rmancat_missing_arch_backups.sql @@ -0,0 +1,54 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display missing archivelog backups for a database. +* Arguments : 1 - Database name +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-Aug-08 Vishal Gupta First Draft +*/ +set term on + +DEFINE database="&&1" + + +WITH max_min_arch as +( SELECT db_name + , thread# + , MAX(sequence#) max_sequence# + , MIN(sequence#) min_sequence# + FROM RC_BACKUP_ARCHIVELOG_DETAILS + WHERE db_name = '&database' +GROUP BY db_name + , thread# +) +, archivelogs as + (SELECT db_name + ,thread# + ,min_sequence# + ROWNUM - 1 sequence# + FROM dual + , max_min_arch + CONNECT BY LEVEL <= max_sequence# - min_sequence# + 1 + ) +select db_name + ,thread# + ,sequence# +from archivelogs a +WHERE NOT EXISTS ( SELECT 1 + FROM RC_BACKUP_ARCHIVELOG_DETAILS r + WHERE r.db_name = a.db_name + AND r.thread# = a.thread# + AND r.sequence# = a.sequence# + ) +ORDER BY db_name + ,thread# + ,sequence# +; + +@@footer diff --git a/vg/rollback_monitor.sql b/vg/rollback_monitor.sql new file mode 100644 index 0000000..396574f --- /dev/null +++ b/vg/rollback_monitor.sql @@ -0,0 +1,75 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Monitoring rollback currently occurring in database. +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Feb-15 Vishal Gupta Reordered column, reformatted output layout +* 08-Apr-09 Vishal Gupta Created +*/ +set term on + +COLUMN spid HEADING "SPID" FORMAT 999999 +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN sid HEADING "SID" FORMAT 99999 +COLUMN PID HEADING "PID" FORMAT 999999 +COLUMN state HEADING "State" FORMAT a12 +COLUMN done HEADING "Undo|Recovery|SoFar|(MB)" FORMAT 9,999,999 +COLUMN total HEADING "Total|Recovery|Needed|(MB)" FORMAT 9,999,999 +COLUMN percent_done HEADING "%Done" FORMAT 999.99 +COLUMN cputime HEADING "CPU Time" FORMAT a13 JUSTIFY RIGHT +COLUMN rcvservers HEADING "Server|In Last|Recovery" FORMAT 9999999 JUSTIFY RIGHT +COLUMN eta HEADING "ETA" FORMAT a18 + +PROMPT +PROMPT ************************************** +PROMPT * Recovery By SMON +PROMPT ************************************** + +SELECT r.state + , decode(cputime,0,'unknown' + ,TO_CHAR(sysdate+(((undoblockstotal-undoblocksdone) / (undoblocksdone / cputime)) / 86400),'DD-MON-YY HH24:MI:SS') + ) eta + , r.INST_ID + , ROUND((r.undoblocksdone * b.value)/power(1024,2)) done + , ROUND((r.undoblockstotal * b.value)/power(1024,2)) total + , ROUND((r.undoblocksdone/r.undoblockstotal)*100,2) percent_done + , LPAD(FLOOR(r.cputime/ 3600) || 'h ' + || LPAD(FLOOR(MOD(r.cputime, 3600 ) / 60),2) || 'm ' + || LPAD(MOD(r.cputime, 60 ) ,2) || 's' ,13) cputime + , r.rcvservers + , r.xid + , r.pxid +FROM gv$fast_start_transactions r + JOIN v$parameter b ON b.name = 'db_block_size' + --LEFT OUTER JOIN gv$transaction t ON t.inst_id = r.inst_id AND r.usn = xidusn AND r.slt = t.xidslot AND r.seq = t.xidsqn +where 1=1 +AND r.state <> 'RECOVERED' +; + + +PROMPT +PROMPT ************************************** +PROMPT * Recovery By Shadow process +PROMPT ************************************** + +select s.inst_id + , s.sid + , s.status + , s.username + , s.osuser + , ROUND((t.used_ublk * p.value) / power(1024,2)) "Undo (MB)" +FROM gv$transaction t + , gv$session s + , (select value from v$parameter where name = 'db_block_size') p +WHERE s.status = 'KILLED' +AND t.inst_id = s.inst_id AND t.ses_addr = s.saddr +; + +@@footer diff --git a/vg/rollback_monitor_SMON.sql b/vg/rollback_monitor_SMON.sql new file mode 100644 index 0000000..d1dfa95 --- /dev/null +++ b/vg/rollback_monitor_SMON.sql @@ -0,0 +1,69 @@ +spool SMON_RollBack_Progress.lst +Prompt +Prompt Script will run for 10 minutes and checks rollback status from x$ktuxe every 2 mins +Prompt ----------------------------------------------------------------------------------- +Prompt +set lines 120 +col useg format a30 +alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss'; + +select sysdate,b.name useg, b.inst# instid, b.status$ status, a.ktuxeusn +xid_usn, a.ktuxeslt xid_slot, a.ktuxesqn xid_seq, a.ktuxesiz undoblocks +from x$ktuxe a, undo$ b +where a.ktuxesta = 'ACTIVE' and a.ktuxecfl like '%DEAD%' +and a.ktuxeusn = b.us#; + +Prompt +Prompt ------------------------------------------------------------------------------------ + +Prompt sleeping for 2 mins .... +exec dbms_lock.sleep(120); + +select sysdate,b.name useg, b.inst# instid, b.status$ status, a.ktuxeusn +xid_usn, a.ktuxeslt xid_slot, a.ktuxesqn xid_seq, a.ktuxesiz undoblocks +from x$ktuxe a, undo$ b +where a.ktuxesta = 'ACTIVE' and a.ktuxecfl like '%DEAD%' +and a.ktuxeusn = b.us#; + +Prompt +Prompt ------------------------------------------------------------------------------------ + +Prompt sleeping for 2 mins .... +exec dbms_lock.sleep(120); + +select sysdate,b.name useg, b.inst# instid, b.status$ status, a.ktuxeusn +xid_usn, a.ktuxeslt xid_slot, a.ktuxesqn xid_seq, a.ktuxesiz undoblocks +from x$ktuxe a, undo$ b +where a.ktuxesta = 'ACTIVE' and a.ktuxecfl like '%DEAD%' +and a.ktuxeusn = b.us#; + +Prompt +Prompt ------------------------------------------------------------------------------------ + +Prompt sleeping for 2 mins .... +exec dbms_lock.sleep(120); + +select sysdate,b.name useg, b.inst# instid, b.status$ status, a.ktuxeusn +xid_usn, a.ktuxeslt xid_slot, a.ktuxesqn xid_seq, a.ktuxesiz undoblocks +from x$ktuxe a, undo$ b +where a.ktuxesta = 'ACTIVE' and a.ktuxecfl like '%DEAD%' +and a.ktuxeusn = b.us#; + +Prompt +Prompt ------------------------------------------------------------------------------------ + + +Prompt sleeping for 2 mins .... +exec dbms_lock.sleep(120); + +select sysdate,b.name useg, b.inst# instid, b.status$ status, a.ktuxeusn +xid_usn, a.ktuxeslt xid_slot, a.ktuxesqn xid_seq, a.ktuxesiz undoblocks +from x$ktuxe a, undo$ b +where a.ktuxesta = 'ACTIVE' and a.ktuxecfl like '%DEAD%' +and a.ktuxeusn = b.us#; + +Prompt ** END OF SCRIPT ** +spool off + + + diff --git a/vg/rowcount.sql b/vg/rowcount.sql new file mode 100644 index 0000000..fc04317 --- /dev/null +++ b/vg/rowcount.sql @@ -0,0 +1,60 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display row count in table or partition +* Parameters : 1 - OWNER (% - wildchar, \ - escape char) +* 2 - Table Name (% - wildchar, \ - escape char) +* 3 - Parition Name (% - wildchar, \ - escape char) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-Oct-13 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE partition_name="&&3" +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _partition_name NEW_VALUE partition_name NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&partition_name','','',' partition (&&partition_name )') "_partition_name" +FROM DUAL; +set term on + +PROMPT ************************************************************** +PROMPT Object Name - &&owner..&&table_name &&partition_name +PROMPT ************************************************************** + +COLUMN rowcount HEADING "Row Count" FORMAT 999,999,999,999,999 + +SELECT /*+ full(a) parallel(a,16) */ + count(1) rowcount + FROM &&owner..&&table_name &&partition_name a +; + + +@@footer diff --git a/vg/rsrc_plan.sql b/vg/rsrc_plan.sql new file mode 100644 index 0000000..ae294f9 --- /dev/null +++ b/vg/rsrc_plan.sql @@ -0,0 +1,69 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display resource plan details +* Parameters : 1 - Resource Plan Name (Use % as wildcard escape with '\', Default value '%') +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Jul-12 Vishal Gupta Created +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE PLAN_NAME +DEFINE PLAN_NAME="&&1" + +set term off +COLUMN _PLAN_NAME NEW_VALUE PLAN_NAME NOPRINT +SELECT DECODE('&&PLAN_NAME','','%','&&PLAN_NAME') "_PLAN_NAME" +FROM DUAL; +set term on + + +COLUMN plan HEADING "PlanName" FORMAT a30 +COLUMN sub_plan HEADING "Sub|Plan" FORMAT a4 +COLUMN ctime HEADING "Created" FORMAT a15 +COLUMN mtime HEADING "Modified" FORMAT a15 +COLUMN status HEADING "Status" FORMAT a5 +COLUMN mandatory HEADING "Mandatory" FORMAT a5 +COLUMN num_plan_directives HEADING "Plan|Direct|ives|(#)" FORMAT 99 +COLUMN cpu_method HEADING "CPU|Method" FORMAT a10 +COLUMN mgmt_method HEADING "MGMT|Method" FORMAT a10 +COLUMN active_sess_pool_mth HEADING "Active|Session|Pool|Method" FORMAT a25 +COLUMN parallel_degree_limit_mth HEADING "Parallel|Degree|Limit|Method" FORMAT a30 +COLUMN queueing_mth HEADING "Queueing|Method" FORMAT a12 +COLUMN comments HEADING "Comments" FORMAT a40 +COLUMN Details HEADING "Details" FORMAT a120 + +SELECT p.plan + , p.sub_plan + , to_char(o.ctime,'DD-MON-YY HH24:MI') ctime + , to_char(o.mtime,'DD-MON-YY HH24:MI') mtime + , p.status + , p.mandatory + , p.num_plan_directives + , p.cpu_method + , p.mgmt_method + , p.active_sess_pool_mth + , p.parallel_degree_limit_mth + , p.queueing_mth + --, p.comments + FROM dba_rsrc_plans p + , sys.obj$ o + WHERE o.obj# = p.plan_id + AND upper(p.plan) like upper('&&PLAN_NAME') ESCAPE '\' +ORDER BY p.plan +; + + +@@footer diff --git a/vg/rsrc_plan_detail.sql b/vg/rsrc_plan_detail.sql new file mode 100644 index 0000000..5eeb3d7 --- /dev/null +++ b/vg/rsrc_plan_detail.sql @@ -0,0 +1,65 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display resource plan details +* Parameters : 1 - Resource Plan Name (Use % as wildcard escape with '\', Default value '%') +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Jul-12 Vishal Gupta Created +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE PLAN_NAME +DEFINE PLAN_NAME="&&1" + +set term off +COLUMN _PLAN_NAME NEW_VALUE PLAN_NAME NOPRINT +SELECT DECODE('&&PLAN_NAME','','%','&&PLAN_NAME') "_PLAN_NAME" +FROM DUAL; +set term on + + +COLUMN plan HEADING "PlanName" FORMAT a30 +COLUMN sub_plan HEADING "Sub|Plan" FORMAT a4 +COLUMN status HEADING "Status" FORMAT a5 +COLUMN created HEADING "Created" FORMAT a18 +COLUMN num_plan_directives HEADING "Plan|Direct|ives|(#)" FORMAT 99 +COLUMN cpu_method HEADING "CPU|Method" FORMAT a10 +COLUMN mgmt_method HEADING "MGMT|Method" FORMAT a10 +COLUMN queueing_mth HEADING "Queueing|Method" FORMAT a12 +COLUMN comments HEADING "Comments" FORMAT a40 +COLUMN Details HEADING "Details" FORMAT a120 + +SELECT p.plan + , 'SubPlan? - ' || p.sub_plan || chr(10) || + 'Created - ' || to_char(o.ctime,'DD-MON-YY HH24:MI:SS') || chr(10) || + 'Modified - ' || to_char(o.mtime,'DD-MON-YY HH24:MI:SS') || chr(10) || + 'Status - ' || p.status || chr(10) || + 'Mandatory - ' || p.mandatory || chr(10) || + 'Number of Plan Directives - ' || p.num_plan_directives || chr(10) || + 'CPU Method - ' || p.cpu_method || chr(10) || + 'MGMT Method - ' || p.mgmt_method || chr(10) || + 'Active Session Pool Method - ' || p.active_sess_pool_mth || chr(10) || + 'Parallel Degree Limit Method - ' || p.parallel_degree_limit_mth || chr(10) || + 'Queueing Method - ' || p.queueing_mth || chr(10) || + 'Comments - ' || p.comments Details + FROM dba_rsrc_plans p + , sys.obj$ o + WHERE o.obj# = p.plan_id + AND upper(p.plan) like upper('&&PLAN_NAME') ESCAPE '\' +ORDER BY p.plan +; + + +@@footer diff --git a/vg/scheduler_jobs.sql b/vg/scheduler_jobs.sql new file mode 100644 index 0000000..aa2978d --- /dev/null +++ b/vg/scheduler_jobs.sql @@ -0,0 +1,46 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DBMS Scheduler Jobs +* Compatibility : +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-May-13 Vishal Gupta Created +* +*/ + + +PROMPT ************************************************** +PROMPT * DBMS Scheduler Jobs +PROMPT ************************************************** + +COLUMN job HEADING "Job" FORMAT 9999 +COLUMN broken HEADING "Broken" FORMAT a1 +COLUMN instance HEADING "I#" FORMAT 999 +COLUMN last_date HEADING "LastRunTime" FORMAT a18 +COLUMN this_date HEADING "CurrentRunTime" FORMAT a18 +COLUMN next_date HEADING "NextRunTime" FORMAT a18 +COLUMN interval HEADING "Interval" FORMAT a10 +COLUMN failures HEADING "Failures" FORMAT 99999 +COLUMN what HEADING "What" FORMAT a40 + +SELECT j.job + , j.broken + , j.instance + , j.priv_user + , TO_CHAR(j.last_date,'DD-MON-YY HH24:MI:SS') last_date + , TO_CHAR(j.this_date,'DD-MON-YY HH24:MI:SS') this_date + , TO_CHAR(j.next_date ,'DD-MON-YY HH24:MI:SS') next_date + , j.interval + , j.failures + , j.what + FROM dba_jobs j +; + +@@footer diff --git a/vg/scheduler_window_groups.sql b/vg/scheduler_window_groups.sql new file mode 100644 index 0000000..bfea2bf --- /dev/null +++ b/vg/scheduler_window_groups.sql @@ -0,0 +1,39 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DBMS Scheduler Window Groups +* Compatibility : +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 29-Jun-16 Vishal Gupta Created +* +*/ + + +PROMPT ************************************************** +PROMPT * DBMS Scheduler Window Groups +PROMPT ************************************************** + +COLUMN window_group_name HEADING "Window|Group" FORMAT a25 +COLUMN enabled HEADING "Enabled" FORMAT a7 +COLUMN number_of_windows HEADING "No|of|Win" FORMAT 999 +COLUMN next_start_date HEADING "NextStartDate" FORMAT a18 TRUNC +COLUMN comments HEADING "Comments" FORMAT a60 TRUNC + + +SELECT wg.window_group_name + , wg.enabled + , wg.number_of_windows + , wg.next_start_date + , wg.comments + FROM dba_scheduler_window_groups wg +ORDER BY wg.next_start_date +; + +@@footer diff --git a/vg/scheduler_windows.sql b/vg/scheduler_windows.sql new file mode 100644 index 0000000..568574f --- /dev/null +++ b/vg/scheduler_windows.sql @@ -0,0 +1,84 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DBMS Scheduler Windows +* Compatibility : +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 29-Jun-16 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE window_group +UNDEFINE window_name +UNDEFINE whereclause + +DEFINE window_group="&&1" +DEFINE window_name="&&2" +DEFINE whereclause="&&3" + +COLUMN _window_group NEW_VALUE window_group NOPRINT +COLUMN _window_name NEW_VALUE window_name NOPRINT + +set term off +SELECT DECODE('&&window_group','','%','&&window_group') "_window_group" + , DECODE('&&window_name','','%','&&window_name') "_window_name" +FROM DUAL +/ + +set term on + + +PROMPT ************************************************** +PROMPT * DBMS Scheduler Windows +PROMPT * +PROMPT * Input Parameter: +PROMPT * Window Group = "&&window_group" +PROMPT * Window Name = "&&window_name" +PROMPT ************************************************** + +COLUMN window_group_name HEADING "Window Group" FORMAT a20 +COLUMN window_name HEADING "Window" FORMAT a20 +COLUMN enabled HEADING "Enabled" FORMAT a7 +COLUMN active HEADING "Active" FORMAT a7 +COLUMN window_priority HEADING "Window|Priority" FORMAT a7 +COLUMN duration HEADING "Duration" FORMAT a11 TRUNC +COLUMN repeat_interval HEADING "Repeat Interval" FORMAT a50 +COLUMN number_of_windows HEADING "No|of|Win" FORMAT 999 +COLUMN next_start_date HEADING "NextStartDate" FORMAT a15 +COLUMN Last_start_date HEADING "LastStartDate" FORMAT a15 +COLUMN comments HEADING "Comments" FORMAT a60 TRUNC + + +SELECT wg.window_group_name + , w.window_name + , w.enabled + , w.active + , w.window_priority + , w.duration + , w.repeat_interval + --, w.manual_open_time + , TO_CHAR(w.next_start_date,'DD-MON-YY HH24:MI') next_start_date + , TO_CHAR(w.last_start_date,'DD-MON-YY HH24:MI') last_start_date + , w.comments + FROM dba_scheduler_windows w + JOIN dba_scheduler_wingroup_members wg ON wg.window_name = w.window_name + WHERE 1=1 + AND wg.window_group_name LIKE '&&window_group' + AND w.window_name LIKE '&&window_name' +ORDER BY wg.window_group_name + , w.next_start_date +; + +@@footer diff --git a/vg/schema_size.sql b/vg/schema_size.sql new file mode 100644 index 0000000..ca25474 --- /dev/null +++ b/vg/schema_size.sql @@ -0,0 +1,67 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display schema sizes +* Compatibility : +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - Object Type (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------------------- +* 24-Jul-15 Vishal Gupta Split original schema_size.sql +* into schema_size.sql and schema_size_details.sql +* 23-May-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE WHERECLAUSE + +DEFINE owner="&&1" +DEFINE WHERECLAUSE="&&2" + + +COLUMN _owner NEW_VALUE owner NOPRINT + +set term off + +SELECT UPPER(DECODE('&&owner','','%','&&owner')) "_owner" +FROM DUAL; + +set term on + + +PROMPT ************************************************** +PROMPT * Schema Sizes +PROMPT * +PROMPT * Input Parameter +PROMPT * - Owner = '&&owner' +PROMPT * - Where Clause = '&&WHERECLAUSE' +PROMPT ************************************************** +PROMPT + +COLUMN owner HEADING "SchemaOwner" FORMAT a20 +COLUMN total_size HEADING "Size (MB)" FORMAT 999,999,999 JUSTIFY RIGHT + +select owner + ,ROUND(SUM(bytes)/power(1024,2)) total_size +from dba_segments s +where s.owner LIKE '&&OWNER' + &&WHERECLAUSE +GROUP BY owner +order by total_size desc +; + + + +@@footer diff --git a/vg/schema_size_breakdown.sql b/vg/schema_size_breakdown.sql new file mode 100644 index 0000000..8e2acf6 --- /dev/null +++ b/vg/schema_size_breakdown.sql @@ -0,0 +1,72 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display schema sizes breakdown +* Compatibility : +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - Object Type (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------------------- +* 24-Jul-15 Vishal Gupta Split original schema_size.sql +* into schema_size.sql and schema_size_details.sql +* 23-May-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE WHERECLAUSE + +DEFINE owner="&&1" +DEFINE WHERECLAUSE="&&2" + + +COLUMN _owner NEW_VALUE owner NOPRINT + +set term off + +SELECT UPPER(DECODE('&&owner','','%','&&owner')) "_owner" +FROM DUAL; + +set term on + + +PROMPT ************************************************** +PROMPT * Schema Sizes Breakdown +PROMPT * +PROMPT * Input Parameter +PROMPT * - Owner = '&&owner' +PROMPT * - Where Clause = '&&WHERECLAUSE' +PROMPT ************************************************** +PROMPT + +COLUMN owner HEADING "Schema Owner" FORMAT a30 +COLUMN segment_type HEADING "Schema Type" FORMAT a20 +COLUMN "Size(GB)" HEADING "Size (GB)" FORMAT 999,999,999.99 JUSTIFY RIGHT + +BREAK ON OWNER SKIP 1 + +select owner + , segment_type + , ROUND(SUM(bytes)/1024/1024/1024,2) "Size(GB)" +from dba_segments s +where s.owner LIKE '&&OWNER' + &&WHERECLAUSE +GROUP BY owner + , segment_type +order by s.owner, ROUND(SUM(bytes)/1024/1024/1024,2) desc +; + + + +@@footer diff --git a/vg/schema_size_details.sql b/vg/schema_size_details.sql new file mode 100644 index 0000000..28b5eae --- /dev/null +++ b/vg/schema_size_details.sql @@ -0,0 +1,166 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display schema Object sizes +* Compatibility : +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - Object Type (% - wildchar, \ - escape char) +* 4 - Minimum SizeMB (Default 0 MB) +* 5 - Tablespace ((% - wildchar, default value = %) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------------------- +* 25-Jul-16 Vishal Gupta Added tablespace as the input parameter +* 02-SEP-14 Vishal Gupta Added object_name and object_type as input parameters +* 23-May-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE object_type +UNDEFINE min_size_mb +UNDEFINE tbs + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE object_type="&&3" +DEFINE min_size_mb="&&4" +DEFINE tbs="&&5" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT +COLUMN _min_size_mb NEW_VALUE min_size_mb NOPRINT +COLUMN _tbs NEW_VALUE tbs NOPRINT + + +set term off + +SELECT UPPER(DECODE('&&owner','','%','&&owner')) "_owner" + , UPPER(DECODE('&&object_name','','%','&&object_name')) "_object_name" + , UPPER(DECODE('&&object_type','','%','&&object_type')) "_object_type" + , DECODE('&&min_size_mb','','100','&&min_size_mb') "_min_size_mb" + , DECODE('&&tbs','','%','&&tbs') "_tbs" +FROM DUAL; + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" + /*, CASE + WHEN INSTR('&&owner','.') != 0 THEN DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + ELSE DECODE(UPPER('&&object_type'),'','%',UPPER('&&object_type')) + END "_object_type" + */ +FROM DUAL; +set term on + + +PROMPT ************************************************** +PROMPT * Input Parameter +PROMPT * - Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - Object Type = '&&object_type' +PROMPT * - Minimum SizeMB = '&&min_size_mb' +PROMPT * - Tablesapce = '&&tbs' +PROMPT ************************************************** +PROMPT +PROMPT + +PROMPT ************************************************** +PROMPT * Schema Sizes +PROMPT ************************************************** + +COLUMN owner HEADING "SchemaOwner" FORMAT a20 +COLUMN "Size(GB)" HEADING "Size(GB)" FORMAT 999,999 JUSTIFY RIGHT + +select owner + , TO_CHAR(ROUND(SUM(bytes)/1024/1024/1024,2),'999,999,999.99') "Size(GB)" +from dba_segments s +where s.owner LIKE '&&OWNER' + AND s.segment_name LIKE '&&OBJECT_NAME' + AND s.segment_type LIKE '&&OBJECT_TYPE' + AND s.tablespace_name LIKE '&&tbs' +GROUP BY owner +order by ROUND(SUM(bytes)/1024/1024/1024,2) desc +; + + +PROMPT +PROMPT +PROMPT ************************************************** +PROMPT * Schema Objects +PROMPT ************************************************** + +COLUMN owner HEADING "SchemaOwner" FORMAT a20 +COLUMN segment_name HEADING "SegmentName" FORMAT a30 +COLUMN segment_type HEADING "SegmentType" FORMAT a15 +COLUMN segment_size HEADING "Total Size (MB)" FORMAT 999,999,999,999 JUSTIFY RIGHT +COLUMN lob_size HEADING "Lob Size (MB)" FORMAT 999,999,999,999 JUSTIFY RIGHT +COLUMN tablespace_name HEADING "TablespaceName" FORMAT a30 + + +SELECT ROUND(SUM(s.bytes)/power(1024,2)) segment_size + , s.owner + , DECODE(s.segment_type + , 'LOBSEGMENT',l.table_name + , 'LOBINDEX' ,l.index_name + , s.segment_name + ) segment_name + , DECODE( SUBSTR(s.segment_type,1,DECODE(INSTR(s.segment_type,' '),0,LENGTH(s.segment_type),INSTR(s.segment_type,' ')-1)) + , 'LOBSEGMENT','TABLE' + , 'LOBINDEX' ,'INDEX' + , SUBSTR(s.segment_type,1,DECODE(INSTR(s.segment_type,' '),0,LENGTH(s.segment_type),INSTR(s.segment_type,' ')-1)) + ) segment_type + , s.tablespace_name + , ROUND(SUM(DECODE(s.segment_type + , 'LOBSEGMENT',s.bytes + , 'LOBINDEX' ,s.bytes + , 0 ))/power(1024,2)) lob_size +FROM dba_segments s + LEFT OUTER JOIN dba_lobs l ON l.owner = s.owner AND l.segment_name = s.segment_name AND (s.segment_type = 'LOBSEGMENT' or s.segment_type = 'LOBINDEX') +WHERE s.owner LIKE '&&OWNER' + AND DECODE(s.segment_type + , 'LOBSEGMENT',l.table_name + , 'LOBINDEX' ,l.index_name + , s.segment_name + ) LIKE '&&OBJECT_NAME' + AND DECODE( SUBSTR(s.segment_type,1,DECODE(INSTR(s.segment_type,' '),0,LENGTH(s.segment_type),INSTR(s.segment_type,' ')-1)) + , 'LOBSEGMENT','TABLE' + , 'LOBINDEX' ,'INDEX' + , SUBSTR(s.segment_type,1,DECODE(INSTR(s.segment_type,' '),0,LENGTH(s.segment_type),INSTR(s.segment_type,' ')-1)) + ) LIKE '&&OBJECT_TYPE' + AND s.tablespace_name LIKE '&&tbs' +GROUP BY s.owner + , DECODE(s.segment_type + , 'LOBSEGMENT',l.table_name + , 'LOBINDEX' ,l.index_name + , s.segment_name + ) + , DECODE( SUBSTR(s.segment_type,1,DECODE(INSTR(s.segment_type,' '),0,LENGTH(s.segment_type),INSTR(s.segment_type,' ')-1)) + , 'LOBSEGMENT','TABLE' + , 'LOBINDEX' ,'INDEX' + , SUBSTR(s.segment_type,1,DECODE(INSTR(s.segment_type,' '),0,LENGTH(s.segment_type),INSTR(s.segment_type,' ')-1)) + ) + , s.tablespace_name +HAVING ROUND(SUM(s.bytes)/power(1024,2)) > &&min_size_mb +ORDER BY segment_size desc +; + +@@footer diff --git a/vg/scratchpad.sql b/vg/scratchpad.sql new file mode 100644 index 0000000..f46007f --- /dev/null +++ b/vg/scratchpad.sql @@ -0,0 +1,2991 @@ +# print leading zero in 2 digit numbers in bash +for i in $(seq -f "%02g" 1 15) +do + echo $i +done + +for (( i=1; i<=17 ; i++ )); +do + printf '%02d\n' $i; +done + + +---------------------------------------- +-- Switch to Pluggable Database (PDB) +---------------------------------------- +SQL> ALTER SESSION SET container = pdb1; +SQL> ALTER SESSION SET container = cdb$root; + + + + +SELECT t.name + , min(m.begin_time) begin_time + , max(m.end_time) end_time + , SUM(m.physical_reads) physical_reads + , ROUND(SUM(m.physical_block_reads * d.BLOCK_SIZE)/power(1024,2)) physical_reads_mb + , SUM(m.physical_writes) physical_writes + , ROUND(SUM(m.physical_block_writes * d.BLOCK_SIZE)/power(1024,2)) physical_writes_mb + , MAX(m.average_read_time)/10 average_read_time_ms + , MAX(m.average_write_time)/10 average_write_time_ms +FROM v$filemetric m +JOIN v$datafile d ON d.file# = m.file_id +JOIN v$tablespace t ON d.TS# = t.ts# +GROUP BY t.name +ORDER BY physical_reads_mb + physical_writes_mb desc +--ORDER BY physical_writes_mb desc +--ORDER BY physical_writes desc +--ORDER BY physical_reads_mb desc +--ORDER BY physical_reads desc +; + + + +@session_active % 30 "" + + +@sortusage +@sortsegment +@top_session_by_cpu % 30 + +@awr_report_rac +@awr_report_rac "2015-09-23 00:00:00" "2015-03-01 00:02:00" html +@top_session_by_all % 20 "redo size" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' " + +---------------------------------------- +-- DBA Registry +---------------------------------------- +set lines 100 +column comp_id format a20 +column comp_name format a50 +column status format a20 +select comp_id, comp_name, status from dba_registry order by 1; + + + + +# print leading zero in 2 digit numbers in bash +for i in $(seq -f "%02g" 1 15) +do + echo $i +done + +for (( i=1; i<=17 ; i++ )); +do + printf '%02d\n' $i; +done + + +---------------------------------------- +-- Switch to Pluggable Database (PDB) +---------------------------------------- +SQL> ALTER SESSION SET container = pdb1; +SQL> ALTER SESSION SET container = cdb$root; + + + +SELECT t.name + , min(m.begin_time) begin_time + , max(m.end_time) end_time + , SUM(m.physical_reads) physical_reads + , ROUND(SUM(m.physical_block_reads * d.BLOCK_SIZE)/power(1024,2)) physical_reads_mb + , SUM(m.physical_writes) physical_writes + , ROUND(SUM(m.physical_block_writes * d.BLOCK_SIZE)/power(1024,2)) physical_writes_mb + , MAX(m.average_read_time)/10 average_read_time_ms + , MAX(m.average_write_time)/10 average_write_time_ms +FROM v$filemetric m +JOIN v$datafile d ON d.file# = m.file_id +JOIN v$tablespace t ON d.TS# = t.ts# +GROUP BY t.name +ORDER BY physical_reads_mb + physical_writes_mb desc +--ORDER BY physical_writes_mb desc +--ORDER BY physical_writes desc +--ORDER BY physical_reads_mb desc +--ORDER BY physical_reads desc +; + + +-- ASH Queries +--Long running queries from ASH +@ash_sid_sqlids % % % 5 % "and (ash.sample_time - ash.sql_exec_start) > '+0 00:01:00' and ash.user_id = (select user_id from dba_users where username = upper('kelting')) " +@ash_sid_sqlids % % % 5 % "and (ash.sample_time - ash.sql_exec_start) > '+0 00:05:00' and ash.service_hash = (select name_hash from dba_services where name = 'trafvaluationsse30')" +@ash_sid_sqlids % % % 5 % "and (ash.sample_time - ash.sql_exec_start) > '+0 00:20:00' " +@ash_sid_sqlids % % % 24 % "and (ash.sample_time - ash.sql_exec_start) > '+0 00:00:15' and ash.user_id = 143 " +@ash_sid_sqlids % % % 24 % "and trunc(ash.px_flags / 2097152) > 10" + +@ash_sid_sqlids % % % 1 % " and (ash.sample_time - ash.sql_exec_start) > '+0 00:00:20' and ash.force_matching_signtaure = '8251690068665765049' " + +-- ASH Queries (AWR) +--Long running queries from ASH (AWR) +select name_hash from dba_services where name = 'pr01pimi_sp_con'; -- 2950871375 +select name_hash from dba_services where name = 'pr01pimi_job_con'; -- 815460948 +select name_hash from dba_services where name = 'pr01pimi_ace_con'; -- 3379930795 +select name_hash from dba_services where name = 'pr01pimi_sofia_con'; -- 3657673531 +select user_id, username from dba_users where username like upper('%username%'); +@awr_sid_sqlids % % % 24 % "and (ash.sample_time - ash.sql_exec_start) > '+0 00:10:00' and ash.user_id = 6089 " +@awr_sid_sqlids % % % 5 % "and (ash.sample_time - ash.sql_exec_start) > '+0 00:01:00' and ash.service_hash = 2950871375 " "and ash.sample_time between to_timestamp('31-MAY-16 19:00:00','DD-MON-YY HH24:MI:SS') and to_timestamp('31-MAY-16 20:00:00','DD-MON-YY HH24:MI:SS')" + +@awr_sid_sqlids % % % 24*2 % "and (ash.sample_time - ash.sql_exec_start) > '+0 00:01:00' and ash.user_id = 3461" "and ash.sample_time between to_timestamp('13-SEP-15 03:13:00','DD-MON-YY HH24:MI:SS') and to_timestamp('12-SEP-15 09:12:00','DD-MON-YY HH24:MI:SS')" + + + +-- ASH Temp Usage +@ash_sid_sqlids % % % 24 % "" "" " having MAX(NVL(ash.temp_space_allocated,0))/power(1024,3) > 1 " -- Temp usage > 1GB +@ash_sid_details % % % 24 "and ash.temp_space_allocated/power(1024,3) > 1 " -- Temp usage > 1GB +@ash_sid_sqlids % % % 24 % "and ash.user_id IN (select user_id from dba_users where temporary_tablespace ='TRAF_TITAN_TEMP')" "" " having SUM(ash.temp_space_allocated)/power(1024,3) > 1 " -- Temp usage > 1GB +@ash_sid_details % % % 1 " and ash.temp_space_allocated/power(1024,3) > 1 " -- Temp usage > 1GB + + +@awr_sid_sqlids % % % 24*1 % "" "" " having MAX(NVL(ash.temp_space_allocated,0))/power(1024,3) > 10 " -- Temp usage > 1GB +@awr_sid_details % % % 1 " and ash.temp_space_allocated/power(1024,3) > 1 " -- Temp usage > 1GB +@ash_sid_details % % % 24 "and ash.user_id IN (select user_id from dba_users where temporary_tablespace ='TRAF_TITAN_TEMP')" "and ash.temp_space_allocated/power(1024,1) > 1 " -- Temp usage > 1GB + +@awr_sid_sqlids % % % 7*24 % "and ash.sample_time between to_timestamp('10-JUN-16 06:00:00','DD-MON-YY HH24:MI:SS') and to_timestamp('10-JUN-16 07:00:00','DD-MON-YY HH24:MI:SS')" "" " having SUM(ash.temp_space_allocated)/power(1024,3) > 1 " -- Temp usage > 1GB + + +-- ASH PGA USage +@ash_sid_sqlids % % % 1 % "" "" " having SUM(ash.pga_allocated)/power(1024,3) > 2 " -- PGA usage > 2GB + + +-- ASH Physical IO +@ash_sid_sqlids % % % 1 % "" "" " having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_write_io_bytes) ) / power(1024,3) > 20" -- Physical Read/Write > 20GB +@ash_sid_sqlids % % % 1 % "" "" " having SUM(ash.delta_read_io_bytes) / power(1024,3) > 20" -- Physical Read > 20GB +@ash_sid_sqlids % % % 1 % "" "" " having SUM(ash.delta_write_io_bytes) / power(1024,3) > 20" -- Physical Write > 20GB +@ash_sid_sqlids % % % 1 % "" "" " having SUM(ash.delta_interconnect_io_bytes) / power(1024,3) > 20" -- Interconnect IO > 20GB +@ash_sid_details % % % 5 "and (ash.delta_read_io_bytes+ash.delta_write_io_bytes)/ power(1024,3) > 1 " + +-- Physical Read > 20GB +@ash_sid_sqlids % % % 1 % "and ash.user_id = (select user_id from dba_users where username = upper('username')) " "" " having SUM(ash.delta_read_io_bytes) / power(1024,3) > 20 " + + +@ash_sid_sqlids % % % 1 % "" "" " having (SUM(ash.delta_read_io_requests)+SUM(ash.delta_write_io_requests) ) > 1000000" -- Physical Read/Write IOPS +@ash_sid_sqlids % % % 1 % "" "" " having SUM(ash.delta_read_io_requests) > 1000000" -- Physical Read IOPS +@ash_sid_sqlids % % % 1 % "" "" " having SUM(ash.delta_write_io_requests) > 1000000" -- Physical Write IOPS + + +-- Details of session with long running queries from ASH +@ash_sid_details % % % 5 "and (ash.sample_time - ash.sql_exec_start) > '+0 00:05:00' and ash.service_hash = (select name_hash from dba_services where name = 'pr01pimi_sp_con') " + + + +@top_session_by_all % 20 "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "redo size" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "CPU used by this session" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "consistent gets" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "physical reads" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "physical read total bytes" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "physical read total bytes optimized" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "cell physical IO interconnect bytes" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "cell physical IO bytes saved by storage index" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' " +@top_session_by_statname % 20 "physical writes" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "physical write total bytes" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "physical write total bytes optimized" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' AND s.status = 'ACTIVE'" +@top_session_by_statname % 20 "session pga memory" "" +@top_session_by_statname % 20 "session pga memory max" "" +@top_session_by_statname % 20 "bytes sent via SQL*Net to client" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' " +@top_session_by_statname % 20 "bytes received via SQL*Net from client" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' " +@top_session_by_statname % 20 "execute count" "AND s.type <> 'BACKGROUND' AND s.username <> 'USERNAME' " + + + +redo size +CPU used by this session +consistent gets +cell physical IO bytes saved by storage index +cell physical IO interconnect bytes +cell physical IO interconnect bytes returned by smart scan +physical read total bytes +physical read total bytes optimized +physical write total bytes +physical write total bytes optimized +bytes received via SQL*Net from client +bytes received via SQL*Net from dblink +bytes sent via SQL*Net to client +bytes sent via SQL*Net to dblink + + +@session_breakdown + + + +@logswitchsize +@awr_loadprofile_physicalreads % 30 +@awr_loadprofile_by_statname_delta % "2015-09-23 00:00:00" "2015-03-01 00:02:00" "CPU used by this session" +@awr_loadprofile_by_statname_delta % "2015-09-23 00:00:00" "2015-03-01 00:02:00" "physical read total bytes" +@awr_loadprofile_by_statname_delta % "2015-09-23 00:00:00" "2015-03-01 00:02:00" "physical write total bytes" +@awr_loadprofile_by_statname_delta % "2015-09-23 00:00:00" "2015-03-01 00:02:00" "session pga memory" +@awr_loadprofile_by_statname_delta % "2015-09-23 00:00:00" "2015-03-01 00:02:00" "redo size" +@awr_loadprofile_by_statname_delta % "2015-09-23 00:00:00" "2015-03-01 00:02:00" "sorts (disk)" +@awr_loadprofile_by_statname_delta % "2015-09-23 00:00:00" "2015-03-01 00:02:00" "sorts (memory)" +@awr_loadprofile_by_statname_delta % "2015-09-23 00:00:00" "2015-03-01 00:02:00" "sorts (rows)" +@awr_loadprofile_logicalreads % 7 +@awr_loadprofile_physicalreads % 7 +@awr_loadprofile_physicalwrites % 7 + + +@awr_loadprofile_by_statname_hourlybreakdown_delta % "2015-09-23 00:00:00" "2015-03-21 01:05:00" "CPU used by this session" +@awr_loadprofile_by_statname_hourlybreakdown_delta % "2015-09-23 00:00:00" "2015-03-21 01:05:00" "physical read total bytes" +@awr_loadprofile_by_statname_hourlybreakdown_delta % "2015-09-23 00:00:00" "2015-03-21 01:05:00" "physical write total bytes" +@awr_loadprofile_by_statname_hourlybreakdown_delta % "2015-09-23 00:00:00" "2015-03-21 01:05:00" "session pga memory" +@awr_loadprofile_by_statname_hourlybreakdown_delta % "2015-09-23 00:00:00" "2015-03-21 01:05:00" "redo size" +@awr_loadprofile_by_statname_hourlybreakdown_delta % "2015-09-23 00:00:00" "2015-03-21 01:05:00" "sorts (disk)" +@awr_loadprofile_by_statname_hourlybreakdown_delta % "2015-09-23 00:00:00" "2015-03-21 01:05:00" "sorts (memory)" +@awr_loadprofile_by_statname_hourlybreakdown_delta % "2015-09-23 00:00:00" "2015-03-21 01:05:00" "sorts (rows)" + + +-- Last 2 hours +@awr_top_sql_by_all 2 % "" "" 10 +-- Last 10 hours +@awr_top_sql_by_all 10 % "" "" 10 +-- Between a specific timeframe +@awr_top_sql_by_all % % "2015-09-28 00:00:00" "2015-10-05 00:05:00" 10 + +@awr_top_sql_by_all % % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 +@awr_top_sql_by_weight % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 +@awr_top_sql_by_weight2 % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 +@awr_top_sql_by_weight2 % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 "and ss.sql_id not in ('d7y4tdacc7f3j','5ysyjtdsjwsr2','7akf6xvjp5a6d','3s2u15uzjum48','5ysyjtdsjwsr2','4sp1tg6fv1a9p','bcv9qynmu1nv9','cm5vu20fhtnq1','7wv97t3szuvtd','ar9nmtmd28460','4m7m0t6fjcs5x,'2skwhauh2cwky','12kw3xcxv1qpg','9tgj4g8y4rwy8')" +@awr_top_sql_weekly_client +@awr_top_sql_weekly_client % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 +@awr_top_sql_weekly_client % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 "and ss.parsing_schema_name like 'username'" +@awr_top_sql_weekly_client % % "2015-01-27 14:00:00" "2015-01-27 19:02:00" 10 "and ss.parsing_schema_name like 'username'" + +@awr_sqlstats_weekly 1xnhn6v30q1t0 + + + +@awr_top_sql_by_weight2 % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 "and ss.sql_id in ('47604xybfj03j')" +@awr_top_sql_by_weight2 % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 "and ss.parsing_schema_name = 'username'" + + +@awr_top_sql_by_all % % "2015-06-01 00:00:00" "2015-06-04 00:02:00" 10 "and ss.parsing_schema_name like 'username'" +@awr_top_sql_by_weight % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 "and ss.parsing_schema_name like 'username'" +@awr_top_sql_by_weight2 % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 "and ss.parsing_schema_name like 'FES%'" +@awr_top_sql_by_weight2 % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 30 "and ss.parsing_schema_name like 'AE%'" +@awr_top_sql_by_all % % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 "and ss.parsing_schema_name like 'AE_%'" + +@awr_top_sql_by_cpu % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 +@awr_top_sql_by_exec % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 +@awr_top_sql_by_elapsed_time % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 +@awr_top_sql_by_physicalread % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 +@awr_top_sql_by_physicalwrite % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 +@awr_top_sql_by_buffer_gets % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 + +@awr_top_sql % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 "redo size" "&&WHERECLAUSE" +@awr_top_sql % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 "elapsed_time_total" "&&WHERECLAUSE" +@awr_top_sql % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 "executions_total" "&&WHERECLAUSE" +@awr_top_sql % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 "physical_change_bytes_total" "&&WHERECLAUSE" +@awr_top_sql % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 "physical_write_bytes_total" "&&WHERECLAUSE" +@awr_top_sql % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 "physical_read_bytes_total" "&&WHERECLAUSE" +@awr_top_sql % "2015-09-23 00:00:00" "2015-03-01 00:02:00" 10 "buffer_gets_total" "&&WHERECLAUSE" + +@awr_top_segment % "2014-01-14 01:00:00" "2014-01-14 06:35:00" 10 "db_block_changes" "&&WHERECLAUSE" +@awr_top_segment % "2014-01-14 01:00:00" "2014-01-14 06:35:00" 10 "physical_reads" "&&WHERECLAUSE" +@awr_top_segment % "2014-01-14 01:00:00" "2014-01-14 06:35:00" 10 "physical_writes" "&&WHERECLAUSE" +@awr_top_segment % "2014-01-14 01:00:00" "2014-01-14 06:35:00" 10 "physical_reads_direct" "&&WHERECLAUSE" +@awr_top_segment % "2014-01-14 01:00:00" "2014-01-14 06:35:00" 10 "physical_writes_direct" "&&WHERECLAUSE" +@awr_top_segment % "2014-01-14 01:00:00" "2014-01-14 06:35:00" 10 "logical_reads" "&&WHERECLAUSE" +@awr_top_segment % "2014-01-14 01:00:00" "2014-01-14 06:35:00" 10 "space_used" "&&WHERECLAUSE" +@awr_top_segment % "2014-01-14 01:00:00" "2014-01-14 06:35:00" 10 "space_allocated" "&&WHERECLAUSE" + +AWR Top Segment Statistics +################################## +db_block_changes +physical_reads +physical_writes +physical_reads_direct +physical_writes_direct +logical_reads +space_used +space_allocated +table_scans +itl_waits +row_locks_waits +chain_row_excess +buffer_busy_waits +gc_buffer_busy +gc_cr_blocks_served +gc_cu_blocks_served +gc_cr_blocks_received +gc_cu_blocks_received + +PGA Usage Vs Temp Usage Statistics +##################################### +'workarea memory allocated' - the total amount of PGA memory dedicated to workareas allocated in Kb. +'workarea executions - optimal' - the cumulative count of work areas which had an optimal size. For example optimal size is defined if the sort does not need to spill to the disk +'workarea executions - onepass' - the cumulative count of work areas using the one pass size. One pass is generally used for big work areas where spilling to disk cannot be avoided. +'workarea executions - multipass' - the cumulative count of work areas running in more than one pass. This should be avoided and is the symptom of poorly tuned system. + + +@statname "%physical%" +@awr_statistics_delta % "2015-09-23 00:00:00" "2015-09-29 00:00:00" "workarea memory allocated" +@awr_statistics_delta % "2015-09-23 00:00:00" "2015-09-29 00:00:00" "workarea executions - optimal" -- In-memory (PGA) execution +@awr_statistics_delta % "2015-09-23 00:00:00" "2015-09-29 00:00:00" "workarea executions - onepass" -- Execution spilling to tempspace +@awr_statistics_delta % "2015-09-23 00:00:00" "2015-09-29 00:00:00" "workarea executions - multipass" + +#Row Chaining +@awr_statistics_delta % "2015-09-28 00:00:00" "2015-09-29 00:00:00" "table fetch continued row" +@awr_statistics_delta % "2015-09-28 00:00:00" "2015-09-29 00:00:00" "table fetch by rowid" + + +@awr_pga_stats_delta_by_statname % "2015-09-23 00:00:00" "2015-09-23 00:00:00" "total PGA allocated" + +@pga_stats -- This will give you the PGA stat name +##################################################### +aggregate PGA target parameter +aggregate PGA auto target +cache hit percentage +total PGA allocated +total PGA inuse +total freeable PGA memory +total PGA used for auto workareas +total PGA used for manual workareas +max processes count +process count +maximum PGA allocated +maximum PGA used for auto workareas +maximum PGA used for manual workareas +over allocation count +bytes processed +extra bytes read/written +PGA memory freed back to OS +recompute count (total) +global memory bound + + + +@awr_service_stats %grid% "logons cumulative" "2013-04-04 12:00:00" "2015-03-21 01:05:00" + + +System Events +###################### +@eventname "%log%switch%" +@awr_system_event_time "log file switch (archiving needed)" 3 +@awr_system_event_time "log file switch (archiving needed)" 3 +@awr_system_event_time "log file switch (checkpoint incomplete)" 3 +@awr_system_event_time "log file switch completion" 3 +@awr_system_event_time "user I/O wait time" 3 + + + + +set tab off +set lines 190 pages 0 arraysize 63 +select * from table(dbatavaria.jss.gtop(50)); + +######################## +# RAC Commands +###################### +# Check CRS Stack internal resources status. +dcli -l oracle -g ~/dbs_group 'crsctl stat res -t -init -w "((NAME != ora.drivers.acfs) AND (NAME != ora.diskmon))"' |grep -v 'ONLINE ONLINE' |egrep -B1 'INTERMEDIATE|OFFLINE' |egrep -v '^--' + +for host in `olsnodes` +do + echo "###### $host #######" + ssh $host 'crsctl stat res -t -init -w "((NAME != ora.drivers.acfs) AND (NAME != ora.diskmon))" |grep -v "ONLINE ONLINE" |egrep -B1 "INTERMEDIATE|OFFLINE" ' \ + 2>/dev/null |egrep -v '^--' +done + +# Check CRS Resource dependency +crsctl status res -p -init |egrep '^NAME=|DEPENDE' | grep -B1 ora.gpnpd + +crsctl status res -p |egrep '^NAME=|^STOP_DEPENDENCIES' | grep -B1 ora.oc4j +crsctl status res -p |egrep '^NAME=|^START_DEPENDENCIES' | grep -B1 ora.oc4j + + +crsctl status res -p -init |egrep '^NAME=|DEPENDENCIES' | while read line +do +done + + + +######################## +# Search Alert on Exadata +###################### +less $ORACLE_BASE/diag/rdbms/`echo $ORACLE_SID|cut -b 1-8`/$ORACLE_SID/trace/alert_$ORACLE_SID.log +dcli -l oracle -g /opt/oracle.SupportTools/onecommand/dbs_group 'egrep -A10 "Aug 01.*2012" $ORACLE_BASE/diag/rdbms/`echo $ORACLE_SID|cut -b 1-8`/$ORACLE_SID/trace/alert_$ORACLE_SID.log |egrep "2012|ORA-00600|trc" | grep -B1 ORA- |egrep -v "^--" ' +dcli -l oracle -g ~/dbs_group_pr01pimi 'egrep -A10 "Mar 31.*2014" $ORACLE_BASE/diag/rdbms/`echo $ORACLE_SID|cut -b 1-8`/$ORACLE_SID/trace/alert_$ORACLE_SID.log |egrep -v "opiodr|ORA-3136" | egrep "2014|ORA-|trc" | egrep -B1 "ORA-|trc" |egrep -v "^--" ' +dcli -l oracle -g ~/dbs_group_bt01pimi 'egrep -A10 "Mar 31.*2014" $ORACLE_BASE/diag/rdbms/`echo $ORACLE_SID|cut -b 1-8`/$ORACLE_SID/trace/alert_$ORACLE_SID.log |egrep -v "opiodr|ORA-3136" | egrep "2014|ORA-|trc" | egrep -B1 "ORA-|trc" |egrep -v "^--" ' +dcli -l oracle -c dm02db04,dm02db05,dm02db06 'egrep -A10 "Oct 16.*2013" $ORACLE_BASE/diag/rdbms/`echo $ORACLE_SID|cut -b 1-8`/$ORACLE_SID/trace/alert_$ORACLE_SID.log |egrep -v opiodr | egrep "2013|ORA-|trc" | egrep -B1 "ORA-|trc" |egrep -v "^--" ' +dcli -l oracle -g /opt/oracle.SupportTools/onecommand/dbs_group 'find /u01/app/oracle/diag/rdbms/pr01pimi/ -name '*trc' -exec grep -l deadlock {} \; ' + +############################## +# Search deadlock on Exadata +############################### +dcli -l oracle -g ~/dbs_group "find /u01/app/oracle/diag/rdbms/pr01pimi -name '*trc' -mtime -1 -exec grep -l deadlock {} \; " +dcli -l oracle -g ~/dbs_group "find /u01/app/oracle/diag/rdbms/pr01pimi -name '*trc' -mtime -1 -exec grep -l deadlock {} \; " + + + +##################################### +# Search Listener Log on Exadata +##################################### +-- Verify SCAN listener start times +dcli -l oracle -g ~/dbs_group 'ps -ef|grep tns|grep SCAN|grep -v grep ' + +cat ~/dbs_group_pr01pimi +cat ~/dbs_group_bt01pimi + +--Scan Listeners +less $ORACLE_BASE/diag/tnslsnr/\`hostname -s\`/listener_scan*/trace/listener_scan*.log +dcli -l oracle -g /opt/oracle.SupportTools/onecommand/dbs_group "grep 07-AUG-2012 $ORACLE_BASE/diag/tnslsnr/\`hostname -s\`/listener_scan*/trace/listener_scan*.log |egrep 'vamiot' " + +DMZ - /u01/oracle/11.2.0.3/grid/log + +for HOST in `olsnodes` +do + ssh $HOST "egrep 'MAY-2013' /u01/app/oracle/diag/tnslsnr/${HOST}/listener/trace/listener.log \ + | egrep -v 'service_update' \ + 2> /dev/null + " 2> /dev/null +done | sort -k1,2 | awk '{print $1 " " $2 " " $4 " " $10 " " $11 " " $12}' + +for HOST in `cat ~/dbs_group_bt01pimi` +do + ssh $HOST "egrep 'JUL-2014' /u01/app/oracle/diag/tnslsnr/${HOST}/listener/trace/listener.log \ + | egrep 'Optimizer' |egrep mpilyavs \ + 2> /dev/null + " 2> /dev/null +done | sort -k1,2 | awk '{print $1 " " $2 " " $4 " " $10 " " $11 " " $12}' + + +srvctl status scan_listener |grep running|awk '{print $3 "," $8}' |while read line +do + HOST=`echo $line|cut -d, -f2` + LISTENER=`echo $line|cut -d, -f1 | tr [:upper:] [:lower:]` + ssh $HOST "grep '01-OCT-2013' /u01/app/11.2.0.2/grid/log/diag/tnslsnr/${HOST}/${LISTENER}/trace/${LISTENER}.log \ + |egrep -v 'service_update' |grep sas + " +done | sort -k1,2 | awk '{print $1 " " $2 " " $4 " " $10 " " $11 " " $12}' + + +srvctl status scan_listener |grep running|awk '{print $3 "," $8}'|while read line +do + HOST=`echo $line|cut -d, -f2` + LISTENER=`echo $line|cut -d, -f1 | tr [:upper:] [:lower:]` + ssh $HOST "egrep '09-MAY-2013' /u01/app/11.2.0.2/grid/log/diag/tnslsnr/${HOST}/${LISTENER}/trace/${LISTENER}.log \ + |egrep -v 'service_update' |grep dabhi + " +done | sort -k1,2 | awk '{print $1 " " $2 " " $4 " " $10 " " $11 " " $12}' | awk -F"USER=" '{print $2}' |awk -F")" '{print $1}' |sort |uniq -c | sort -k1nr + + +#### Symphony Grid Connections +srvctl status scan_listener |grep running|awk '{print $3 "," $8}'|while read line +do + HOST=`echo $line|cut -d, -f2` + LISTENER=`echo $line|cut -d, -f1 | tr [:upper:] [:lower:]` + ssh $HOST "egrep \"`date --date=yesterday +%d-%b-%Y|tr [:lower:] [:upper:]`|`date +%d-%b-%Y|tr [:lower:] [:upper:]`\" /u01/app/11.2.0.2/grid/log/diag/tnslsnr/${HOST}/${LISTENER}/trace/${LISTENER}.log \ + |grep sas + " +done | sort -k1,2 | awk '{print $1 " " $2 " " $4 " " $10 " " $11 " " $12}' | cut -d: -f1-3 |uniq -c + +srvctl status scan_listener |grep running|awk '{print $3 "," $8}'|while read line +do + HOST=`echo $line|cut -d, -f2` + LISTENER=`echo $line|cut -d, -f1 | tr [:upper:] [:lower:]` + ssh $HOST "egrep -h '31-JUL-2013' /u01/app/11.2.0.2/grid/log/diag/tnslsnr/${HOST}/listener_scan*/trace/listener_scan*.log \ + |grep sas | grep devmtg| grep python + " +done | sort -k1,2 | awk '{print $1 " " $2 " " $4 " " $10 " " $11 " " $12}' | cut -d: -f1-2 |uniq -c + + +for HOST in `olsnodes` +do + ssh $HOST "egrep -h '31-JUL-2013' /u01/app/11.2.0.2/grid/log/diag/tnslsnr/${HOST}/listener_scan*/trace/listener_scan*.log \ + | egrep -v 'service_update' |egrep -i 'sas' \ + 2> /dev/null + " 2> /dev/null +done | sort -k1,2 | awk '{print $1 " " $2 " " $4 " " $10 " " $11 " " $12}' | cut -d: -f1-3 |uniq -c + + +24-OCT-2013 01:39:15 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servername)(CID=(PROGRAM=sqlplus)(HOST=hostname)(USERUSER=username))) * (ADDRESS=(PROTOCOL=tcp)(HOST=144.77.86.141)(PORT=60263)) * establish * servicename * 0 + +# Filter for String +| awk -F"USER=" '{print $2}' |awk -F")" '{print $1}' |sort |uniq -c |sort -k1nr +| awk -F"SERVICE_NAME=" '{print $2}' |awk -F")" '{print $1}' |sort |uniq -c |sort -k1nr +| awk -F"PROGRAM=" '{print $2}' |awk -F")" '{print $1}' |sort |uniq -c |sort -k1nr +| awk -F"HOST=" '{print $2}' |awk -F")" '{print $1}' |sort |uniq -c |sort -k1nr + + +| awk ' +{ + date=$1; + time=$2; + program=""; + service_name=""; + user=""; + host=""; + n=split($0 , array1, "(" ); + for (i=1; i<=n; i++) { + split(array1[i] ,array2 , ")" ) + split(array2[1] ,array3 , "=") + field=array3[1] + value=array3[2] + if (field == "PROGRAM") { program=value} + if (field == "SERVICE_NAME") { service_name=value} + if (field == "USER") { user=value} + if (field == "HOST") { if (host=="" || host=="__jdbc__") { host=value} } + } + print date " " time " * " service_name " * " host " * " user " * " program " * " ; +} +' + + +# Add following for logins/day +|awk '{print $1}' |uniq -c + +# Add following for logins/hour +|cut -d: -f1 |uniq -c + +# Add following for logins/10min +|cut -c1-16 |uniq -c + +# Add following for logins/min +|cut -d: -f1-2 |uniq -c + +# Add following for logins/sec +|cut -d" " -f1-2 |uniq -c + +# Add following for logins/service_name +| awk -F"SERVICE_NAME=" '{print $2}' |awk -F")" '{print $1}' |sort |uniq -c | sort -k1nr + +# Add following for logins/program +| awk -F"PROGRAM=" '{print $2}' |awk -F")" '{print $1}' |sort |uniq -c | sort -k1nr + +# Add following for logins/clienthost +| awk -F"HOST=" '{print $2}' |awk -F")" '{print $1}' |sort |uniq -c | sort -k1nr + +# Add following for logins/user +| awk -F"USER=" '{print $2}' |awk -F")" '{print $1}' |sort |uniq -c | sort -k1nr + + + +-- Host Listeners +less $ORACLE_BASE/diag/tnslsnr/`hostname -s`/listener/trace/listener.log +dcli -l oracle -g /opt/oracle.SupportTools/onecommand/dbs_group "grep 1*-AUG-2012 $ORACLE_BASE/diag/tnslsnr/\`hostname -s\`/listener/trace/listener.log |egrep 'trs20'" + +##################################### +# Exadata verify tnsnames.ora +##################################### +firstnode=`head -1 dbs_group` +dcli -l oracle -g dbs_group "scp $ORACLE_HOME/network/admin/tnsnames.ora $firstnode:/tmp/tnsnames.ora_\`hostname -s\`" +cat dbs_group |grep -v $firstnode |while read i +do + echo "######## diff /tmp/tnsnames.ora_$firstnode /tmp/tnsnames.ora_$i #############" + diff /tmp/tnsnames.ora_$firstnode /tmp/tnsnames.ora_$i +done + + +##### Sync the tnsnames.ora +firstnode=`head -1 dbs_group` +cp -p /tmp/tnsnames.ora_$firstnode $ORACLE_HOME/network/admin/tnsnames.ora +dcli -l oracle -g dbs_group -d $ORACLE_HOME/network/admin/ -f $ORACLE_HOME/network/admin/tnsnames.ora + + + +##################################### +# Kill Sessions +##################################### +BEGIN +FOR i in ( select 'alter system kill session ''' || sid || ',' || serial# || ',@' || inst_id || ''' immediate' sqltext + from gv$session s + where 1=1 + AND s.status <> 'KILLED' + AND s.program like '%%' +-- AND s.username like '%%' + AND s.osuser like '@%' +-- AND s.sql_id = '0ggabydqkkgrf' +-- AND s.service_name = '%%' +ORDER BY s.logon_time desc + ) +LOOP + begin + execute immediate i.sqltext; + exception + WHEN OTHERS THEN + null; + END; +END LOOP; +END; +/ + + +select 'alter system kill session ''' || sid || ',' || serial# || ',@' || inst_id || ''';' , s.program from gv$session s where s.program like '%proteusNightCycle%'; + + +############################# +GoldenGate (Run in BASH shell) +############################# + +help stats extract +help stats replicat + +# Tables ordered by operations +#echo 'STATS PPRD041 , HOURLY , REPORTRATE SEC' |./ggsci |egrep 'Replicating|Extracting|Total operations/second' | while read line ; +#echo 'STATS PPRD041 , HOURLY , REPORTRATE MIN' |./ggsci |egrep 'Replicating|Extracting|Total operations/minute' | while read line ; +#echo 'STATS PPRD041 , HOURLY , REPORTRATE HR' |./ggsci |egrep 'Replicating|Extracting|Total operations/hour' | while read line ; +#echo 'STATS PPRD041 , DAILY , REPORTRATE SEC' |./ggsci |egrep 'Replicating|Extracting|Total operations/second' | while read line ; +#echo 'STATS PPRD041 , DAILY , REPORTRATE MIN' |./ggsci |egrep 'Replicating|Extracting|Total operations/minute' | while read line ; +#echo 'STATS PPRD041 , DAILY , REPORTRATE HR' |./ggsci |egrep 'Replicating|Extracting|Total operations/hour' | while read line ; +# +echo 'STATS PPRD041 , DAILY ' |./ggsci |egrep 'Replicating|Extracting|Total operations' | while read line ; +#echo 'STATS PPRD041 , LATEST ' |./ggsci |egrep 'Replicating|Extracting|Total operations' | while read line ; +#echo 'STATS PPRD041 , HOURLY ' |./ggsci |egrep 'Replicating|Extracting|Total operations' | while read line ; +do + if [[ "$line" == *Extracting* ]] || [[ "$line" == *Replicating* ]] + then + printf "\n`echo $line|awk '{print $5}'`" ; + elif [[ "$line" == *since* ]] + then + printf " $line" ; + else [[ "$line" == *operations* ]] + printf "\t\t `echo $line|awk '{print $3}'`" ; + fi +done |sort -k2nr 2>/dev/null |grep -v '^$' |head -20 ; echo ""; + + + +INFO PPRD041 detail +INFO PPRD041 SHOWCH +send PPRD041, showtrans count 5 TABULAR + +STATS PPRD041 , LATEST REPORTRATE SEC +STATS PPRD041 , LATEST REPORTRATE MIN +STATS PPRD041 , LATEST REPORTRATE HR +STATS PPRD041 , LATEST +STATS PPRD041 , TOTAL , DAILY, HOURLY, LATEST, REPORTRATE HR +STATS PPRD041 , TOTAL , DAILY, HOURLY, LATEST, TABLE table +STATS PPRD041 , TOTAL , DAILY, HOURLY, LATEST, TABLE dbo.trade_block , REPORTRATE HR +STATS PPRD041 , TOTALSONLY * +STATS PPRD041 , LATEST * + + +STATS PPRD041 , TOTALSONLY dbo.pos_pr_daily_temp +STATS PPRD041 , TOTAL , DAILY, HOURLY, LATEST, TABLE dbdbo.swap_trade +STATS PPRD041 , TABLE dbo.swap_trade, TOTALSONLY * +STATS PPRD041 , TOTAL , TABLE dbo.pos_pr_daily_temp +STATS PPRD041 , TOTAL , DAILY, HOURLY, LATEST , TABLE dbo.pos_pr_daily_temp REPORTRATE HR +STATS PPRD041 , TOTAL , DAILY, HOURLY, LATEST , TABLE dbo.pos_pr_daily_temp REPORTRATE MIN +STATS PPRD041 , TOTAL , DAILY, HOURLY, LATEST , TABLE dbo.pos_pr_daily_temp REPORTRATE SEC +STATS PPRD041 , TOTAL , DAILY, HOURLY, LATEST, TOTALSONLY FUNDSTATION_OWN.* , NOREPORTDETAIL , REPORTRATE HR +STATS PPRD041 , TOTAL , DAILY, HOURLY, LATEST , TABLE FUNDSTATION_OWN.RATE , REPORTRATE HR + +STATS PPRD041 table dbo.af_detail_trans +STATS PPRD041 table dbo.af_detail_trans_split + + +STATS PPRD041 , TOTALSONLY * + +dbo.acct_position +dbo.acct_position_by_sector + + + +View Trail file contents +################################ + +#Count the records every n minutes interval. + + +logdump < detail +EOF + + + +logdump < +position 22974377 +position forward +next + +or +position reverse +next + +#### Go reverse from an RBA to end of transaction and then forward +position 8355707 +detail off +position reverse +SCANFORENDTRANS +position forward +next + + + +info REP_AM05 +stop REP_AM05 +info REP_AM05 +alter REP_AM05 extseqno 359786 extrba 0 +start REP_AM05 +info REP_AM05 + + + + + + +connect target sys/*****@TNS +connect AUXILIARY / + +run +{ + CONFIGURE DEVICE TYPE DISK PARALLELISM 24; + SET NEWNAME FOR DATABASE to '+RECO_DM02_EXT'; + DUPLICATE TARGET DATABASE TO BT01PIMI + until SCN 503299730741 + OPEN RESTRICTED + ; +} + + + +connect target sys/*****@TNS +connect AUXILIARY / +run +{ +SET NEWNAME FOR DATABASE TO '+DATA_DM51'; +DUPLICATE TARGET DATABASE + FOR STANDBY + FROM ACTIVE DATABASE + DORECOVER + SPFILE + SET "db_unique_name"="db_unique_name" + SET FAL_SERVER="akslfks" + SET LOG_ARCHIVE_DEST_2="SERVICE=pr01hsti ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) compression=enable" + SET DB_FILE_NAME_CONVERT=("+DATA/","+RECO_DM51/","+RECO/","+RECO_DM51/") + SET LOG_FILE_NAME_CONVERT=("+DATA/","+RECO_DM51/","+RECO/","+RECO_DM51/") + set standby_file_management='AUTO' + ; +} + + +create spfile='+DATA_DM51/dbname/spfiledbname.ora' from pfile='/u01/app/oracle/product/11.2.0.2/dbhome_1/dbs/initdbname.ora'; + + +allocate channel for maintenance device type disk; +delete noprompt archivelog all completed before 'sysdate - 1' ; + + + + + + +--************************************************** +-- Auditing Queries +--************************************************** +SELECT * FROM gv$system_parameter where name like '%audit%' order by name, inst_id; +SELECT * FROM DBA_STMT_AUDIT_OPTS; +SELECT * FROM DBA_PRIV_AUDIT_OPTS; +SELECT * FROM DBA_OBJ_AUDIT_OPTS; +SELECT * FROM STMT_AUDIT_OPTION_MAP; +SELECT * FROM ALL_DEF_AUDIT_OPTS; + +SELECT * FROM DBA_AUDIT_EXISTS; +SELECT * FROM DBA_FGA_AUDIT_TRAIL; +SELECT * FROM DBA_COMMON_AUDIT_TRAIL; +SELECT * FROM DBA_AUDIT_STATEMENT; +SELECT * FROM DBA_AUDIT_SESSION; +SELECT * FROM DBA_AUDIT_OBJECT; +SELECT * FROM DBA_AUDIT_POLICIES; +SELECT * FROM DBA_AUDIT_POLICY_COLUMNS; + + + +AUDIT SESSION WHENEVER NOT SUCCESSFUL; +AUDIT SESSION BY ; +NOAUDIT SESSION; +NOAUDIT SESSION BY ; +AUDIT DELETE ON BY SESSION WHENEVER SUCCESSFUL ; +AUDIT DELETE ON BY ACCESS WHENEVER SUCCESSFUL ; +AUDIT DELETE ON BY SESSION WHENEVER NOT SUCCESSFUL ; +AUDIT DELETE ON BY ACCESS WHENEVER NOT SUCCESSFUL ; +AUDIT DELETE ON BY SESSION ; -- regardless of success or failure +AUDIT DELETE ON BY ACCESS ; -- regardless of success or failure + + + + + +####################################### +##### Dropping temp segments +####################################### +SQL> select ts#, name from sys.ts$ where name like 'TEMP%'; + +alter session set events 'immediate trace name drop_segments level '; + +alter session set events 'immediate trace name drop_segments level 5'; +alter session set events 'immediate trace name drop_segments level 101'; +alter session set events 'immediate trace name drop_segments level 115'; +alter session set events 'immediate trace name drop_segments level 99'; +alter session set events 'immediate trace name drop_segments level 118'; +alter session set events 'immediate trace name drop_segments level 100'; + + +####################################### +##### OLAP Cubes +####################################### + +##### Workaround to fix the OLAP repoistory issue with a particular CUBE +##### (with suitable replacement of my_aw). + +begin +dbms_aw.execute(q'! +aw attach my_aw RW +_repos clear +update +commit +aw detach my_aw +aw attach my_aw RW +allcompile +update +commit +aw detach my_aw +!'); +end; +/ + +-- Clear and re-calculate the Cube Aggregations +BEGIN + DBMS_CUBE.BUILD(q'! + CRM_DW_DMZ_OWN.TRANSACTION_CUBE USING + ( + FOR CRM_DW_DMZ_OWN.ALLOCATION_DATE_DIM + WHERE CRM_DW_DMZ_OWN.ALLOCATION_DATE_DIM.DIM_KEY IS DESCENDANT OR SELF OF 'CM Apr 2013' + WITHIN CRM_DW_DMZ_OWN.ALLOCATION_DATE_DIM.CALENDAR_HIERARCHY + BUILD(CLEAR AGGREGATES, SOLVE) + ) + !' + , add_dimensions=>false + ); +END; +/ + + +##### Cube build Logging. +##### + +-- Create Logging Tables +BEGIN + SYS.DBMS_CUBE_LOG.TABLE_CREATE(log_type => sys.dbms_cube_log.type_build , tblname => dbms_cube_log.default_name(dbms_cube_log.type_build) ); + SYS.DBMS_CUBE_LOG.TABLE_CREATE(log_type => sys.dbms_cube_log.type_dimension_compile, tblname => dbms_cube_log.default_name(dbms_cube_log.type_operations) ); + SYS.DBMS_CUBE_LOG.TABLE_CREATE(log_type => sys.dbms_cube_log.type_operations , tblname => dbms_cube_log.default_name(dbms_cube_log.type_dimension_compile) ); + SYS.DBMS_CUBE_LOG.TABLE_CREATE(log_type => sys.dbms_cube_log.type_rejected_records , tblname => dbms_cube_log.default_name(dbms_cube_log.type_rejected_records) ); +END; +/ + +-- Query Default logging table names +SELECT dbms_cube_log.default_name(dbms_cube_log.type_build) "Build" + , dbms_cube_log.default_name(dbms_cube_log.type_operations) "Operations" + , dbms_cube_log.default_name(dbms_cube_log.type_dimension_compile) "DimensionCompile" + , dbms_cube_log.default_name(dbms_cube_log.type_rejected_records) "RejectedRecords" +FROM dual; + +-- Enable CUBE Build Logging (*** in current session ***) +/* When you pass first parameter (log_type) as NULL it set for dimension_compile, rejected_records,operations log_types. */ +/* So if you passed log_type = NULL and log_location = CUBE_BUILD_LOG, it will try to log non-build records mentioned above + as to this table. +*/ +BEGIN + dbms_cube_log.enable(DBMS_CUBE_LOG.TYPE_OPERATIONS ,DBMS_CUBE_LOG.TARGET_TABLE,DBMS_CUBE_LOG.LEVEL_MEDIUM); + dbms_cube_log.enable(DBMS_CUBE_LOG.TYPE_REJECTED_RECORDS ,DBMS_CUBE_LOG.TARGET_TABLE,DBMS_CUBE_LOG.LEVEL_MEDIUM); + dbms_cube_log.enable(DBMS_CUBE_LOG.TYPE_DIMENSION_COMPILE ,DBMS_CUBE_LOG.TARGET_TABLE,DBMS_CUBE_LOG.LEVEL_MEDIUM); + dbms_cube_log.set_parameter(DBMS_CUBE_LOG.TYPE_REJECTED_RECORDS ,1,100); -- Set Max Errors to log + dbms_cube_log.set_parameter(DBMS_CUBE_LOG.TYPE_DIMENSION_COMPILE ,1,100); -- Set Max Errors to log +END ; +/ + + +-- Cube build +BEGIN + DBMS_CUBE.BUILD( + method => 'CCCCCCCCCCCC' + , refresh_after_errors => false + , parallelism => 8 + , atomic_refresh => false + , automatic_order => false + , add_dimensions => false + , scheduler_job => 'OLAP$_' || CRM_DW_DMZ_OWN.CUBE_BUILD_ID.nextval + , master_build_id => CRM_DW_DMZ_OWN.CUBE_BUILD_ID.nextval + , nested => false + , script => ' + CRM_DW_DMZ_OWN.CONTACT_PARTNERSHIPS_DIM USING + ( + LOAD NO SYNCH, + COMPILE SORT + ), + CRM_DW_DMZ_OWN.TRANSACTION_CUBE' +); +END; +/ + +-- Check Progress +ALTER SESSION SET CURRENT_SCHEMA = CRM_DW_DMZ_OWN; + +SELECT * FROM dba_sequences WHERE sequence_owner = SYS_CONTEXT('USERENV','CURRENT_SCHEMA'); +SELECT * FROM dba_scheduler_running_jobs; + +SELECT * FROM CRM_DW_DMZ_OWN.cube_build_log; +SELECT * FROM CRM_DW_DMZ_OWN.cube_dimension_compile ; +SELECT * FROM CRM_DW_DMZ_OWN.cube_operations_log; +SELECT * FROM CRM_DW_DMZ_OWN.cube_rejected_records; + + + +SELECT TIME, build_id, slave_number, command, status, build_object, build_object_Type ,partition, output +FROM cube_build_log +where build_id = 46 +order by time desc; + + +SELECT build_id + , slave_number + , build_object + , build_object_type + , partition + , command + , NVL(MAX(DECODE(status , 'COMPLETED',NVL(TIME,SYSDATE), NULL)),systimestamp) - MIN(DECODE(status , 'STARTED',TIME, NULL)) duration + , MIN(DECODE(status , 'STARTED',TIME, NULL)) started + , MAX(DECODE(status , 'COMPLETED',TIME, NULL)) completed +FROM cube_build_log +WHERE build_id = 46 +GROUP BY build_id , slave_number , build_object , build_object_type , partition , command +ORDer by started desc +; + +SELECT build_id + , slave_number + , build_object + , build_object_type + , partition + , command + , NVL(MAX(DECODE(status , 'COMPLETED',NVL(TIME,SYSDATE), NULL)),systimestamp) - MIN(DECODE(status , 'STARTED',TIME, NULL)) duration + , MIN(DECODE(status , 'STARTED',TIME, NULL)) started + , MAX(DECODE(status , 'COMPLETED',TIME, NULL)) completed +FROM cube_build_log +WHERE build_id = 46 +AND command = 'BUILD' +GROUP BY build_id , slave_number , build_object , build_object_type , PARTITION , command +HAVING MAX(DECODE(status , 'COMPLETED',TIME, NULL)) IS NOT NULL + AND partition IS NOT NULL +ORDer by started desc +; + + +SELECT a.build_id, a.slave_number, s.status, a.command,a.time, a.partition, a.build_object, a.build_object_type , s.event, s.status +FROM cube_build_log a + JOIN DBA_SCHEDULER_RUNNING_JOBS j ON j.owner = a.owner AND a.scheduler_job = j.job_name + JOIN gv$session s ON s.inst_id = j.running_instance AND j.session_id = s.SID +WHERE 1=1 +AND A.TIME = (SELECT MAX(TIME) FROM cube_build_log c WHERE C.build_id = A.build_id AND A.PARTITION = c.PARTITION GROUP BY c.build_id, c.PARTITION) +AND NOT EXISTS (SELECT 1 FROM cube_build_log b WHERE b.build_id = A.build_id AND A.PARTITION = b.PARTITION AND A.command = b.command + AND b.status = 'COMPLETED') +AND A.build_id = 46 +ORDER BY a.TIME DESC +; + + + +####################################### +##### Analytic Workspace (AW , AWS) +####################################### + + +select * from dba_aws where owner = 'CRM_DW_OWN'; +select * from dba_aw_obj where owner = 'CRM_DW_OWN' and aw_name = 'MSCRM_DMART'; +select * from dba_aw_prop where owner = 'CRM_DW_OWN'; +select * from v$aw_session_info; +select * from v$aw_olap; +select * from v$aw_longops; +select * from v$aw_aggregate_op; +select * from v$aw_allocate_op; + +oradebug setmypid +oradebug tracefile_name +oradebug close_trace +oradebug ulimit + +MOS Note ID [742375.1] - How to Recreate an AW Through Export and Import Commands + +dbms_aw.execute +Syntax + EXPORT export_item TO EIF FILE file-name [LIST] [NOPROP] - + [NOREWRITE|REWRITE] [FILESIZE n [K, M, or G]] - + [NOTEMPDATA] [NLS_CHARSET charset-exp] [AGGREGATE | NOAGGR] - + [API | NOAPI] + where + AGGREGATE - Export aggregated data. (Default behavior.) + NOAGGR - Do not export aggregated data. + + + +-- Exporting AW Metadata and Data to an EIF file + -- The keyword 'API' makes sure that all metadata is exported with the EIF. + -- Such an EIF file can be imported again with the same option. + -- The keyword 'NOAPI' prevents the export of the metadata and also the creation of such metadata during import. + -- NOAPI also the default setting, so make sure you make the right choice during the export. Also note that there is no way + -- to re-create the metadata for an EIF file exported with the 'NOAPI' setting. + exec dbms_aw.execute('export all to eif file ''DIRECTORY_OBJECT/export.eif'' api'); + +-- Importing AW Metadata and Data to an EIF file + exec dbms_aw.execute('aw create AWNAME'); + exec dbms_aw.execute('aw attach AWNAME rw'); + exec dbms_aw.execute('import all from eif file ''my_dir/export_file_name.eif'' '); + exec dbms_aw.execute('update'); + commit; + exec dbms_aw.execute('aw detach AWNAME'); + + + +-- Exporting AW Metadata to an XML file + exec dbms_aw.execute('aw attach . rw'); + exec dbms_cube.export_xml_to_file( object_ids => '..AW', output_dirname => 'DATA_DUMP_DIR2', output_filename => 'AW_Metadata.xml'); + exec dbms_aw.execute('aw detach mscrm_dmart'); + +-- Exporting AW Metadata to an XML file (Advanced) + set serveroutput on + DECLARE + optionsClob CLOB; + fh utl_file.file_type; + buffer VARCHAR2(4000); + amount INTEGER := 4000; + BEGIN + dbms_lob.createtemporary(optionsClob, false, dbms_lob.call); + dbms_cube.create_export_options(out_options_xml => optionsClob + , target_version => '11.2.0.2' -- Default NULL + , suppress_owner => TRUE -- Default FALSE + , suppress_namespace => TRUE -- Default FALSE + , preserve_table_owners => TRUE -- Default FALSE + , metadata_changes => NULL -- Default NULL + ); + fh := utl_file.fopen( location => 'DATA_DUMP_DIR2' + , filename => 'AW_export_options.xml' + , open_mode => 'w' + , max_linesize => '32767' + ); + dbms_lob.read(optionsClob, amount, 1,buffer); + utl_file.put_line ( fh, buffer ); + utl_file.fclose ( fh); + dbms_output.put_line(optionsClob); + END; + / + + exec dbms_aw.execute('aw attach . ro'); + exec dbms_cube.export_xml_to_file( object_ids => '..AW' + , options_dirname => 'DATA_DUMP_DIR2' + , options_filename => 'AW_export_options.xml' + , output_dirname => 'DATA_DUMP_DIR2' + , output_filename => 'AW_Metadata.xml' + ); + exec dbms_aw.execute('aw detach mscrm_dmart'); + +-- Importing AW Metadata from an XML file + exec dbms_aw.execute('aw delete .'); + exec dbms_aw.execute('aw create .'); + exec dbms_aw.execute('aw attach . rw'); + exec dbms_cube.import_xml( dirname=>'DATA_DUMP_DIR2', filename =>'AW_Metadata.xml'); + exec dbms_aw.execute('aw detach mscrm_dmart'); + + + + +####################################### +##### Proxy Connect Syntax +####################################### +alter user pm_own grant connect through vgupta; +connect vgupta[PROXYUSER]/password@SID + + + + + + +########################## +DiskGroup-TableSpace Size +########################## +select tablespace_name + , SUBSTR(file_name,1, INSTR(file_name,'/') - 1) DiskGroup + , count(1) File_count + , ROUND(sum(bytes)/1024/1024/1024) size_GB +from dba_data_files +where tablespace_name = 'PM_DATA_BIG' +group by tablespace_name + , SUBSTR(file_name,1, INSTR(file_name,'/') - 1) +ORDER BY 1,2 +; + +select t.name + , SUBSTR(f.name,1, INSTR(f.name,'/') - 1) DiskGroup + , count(1) File_count + , ROUND(sum(f.bytes)/1024/1024/1024) size_GB +from v$datafile f, v$tablespace t +where f.ts# = t.ts# +and t.name = 'PM_DATA_BIG' +group by t.name + , SUBSTR(f.name,1, INSTR(f.name,'/') - 1) +ORDER BY 1,2 +; + + + + + + +--************************************* +-- DBMS Scheduler Job Queries +--************************************* + +exec dbms_scheduler.stop_job(job_name => 'ADV_OWN.ADV_DEAL_COLLAT_INTEX_VW_JOB' ,force => TRUE); +exec dbms_scheduler.run_job (job_name => 'ADV_OWN.ADV_DEAL_COLLAT_INTEX_VW_JOB' ,use_current_session => FALSE); + +-- Scheduler Jobs +SELECT * FROM dba_scheduler_jobs +WHERE 1=1 +AND owner LIKE '%%' +AND JOB_NAME LIKE '%%' +; +-- Scheduler Jobs Run Details +SELECT * FROM dba_scheduler_job_run_details +WHERE 1=1 +AND owner LIKE '%%' +AND JOB_NAME like '%%' +ORDER BY log_date DESC +; + +-- +SELECT * FROM DBA_SCHEDULER_RUNNING_JOBS ; +SELECT * FROM DBA_SCHEDULER_JOBS ; +SELECT * FROM DBA_SCHEDULER_JOB_RUN_DETAILS ; +SELECT * FROM DBA_SCHEDULER_JOB_LOG ; +-- +SELECT * FROM DBA_SCHEDULER_GLOBAL_ATTRIBUTE ; +-- +SELECT * FROM DBA_SCHEDULER_GROUPS ; +SELECT * FROM DBA_SCHEDULER_GROUP_MEMBERS ; +SELECT * FROM DBA_SCHEDULER_JOB_CLASSES ; +-- +SELECT * FROM DBA_SCHEDULER_SCHEDULES ; +SELECT * FROM DBA_SCHEDULER_WINDOW_GROUPS ; +SELECT * FROM DBA_SCHEDULER_WINGROUP_MEMBERS ; +SELECT * FROM DBA_SCHEDULER_WINDOWS ; +SELECT * FROM DBA_SCHEDULER_WINDOW_DETAILS ; +SELECT * FROM DBA_SCHEDULER_WINDOW_LOG ; +-- +SELECT * FROM DBA_SCHEDULER_PROGRAMS ; +SELECT * FROM DBA_SCHEDULER_PROGRAM_ARGS ; +-- +SELECT * FROM DBA_SCHEDULER_JOB_ROLES ; +SELECT * FROM DBA_SCHEDULER_JOB_ARGS ; +SELECT * FROM DBA_SCHEDULER_JOB_DESTS ; +SELECT * FROM DBA_SCHEDULER_NOTIFICATIONS ; +SELECT * FROM DBA_SCHEDULER_REMOTE_DATABASES ; +SELECT * FROM DBA_SCHEDULER_REMOTE_JOBSTATE ; +SELECT * FROM DBA_SCHEDULER_RUNNING_CHAINS ; +-- +SELECT * FROM DBA_SCHEDULER_CHAINS ; +SELECT * FROM DBA_SCHEDULER_CHAIN_RULES ; +SELECT * FROM DBA_SCHEDULER_CHAIN_STEPS ; +SELECT * FROM DBA_SCHEDULER_CREDENTIALS ; +SELECT * FROM DBA_SCHEDULER_DB_DESTS ; +SELECT * FROM DBA_SCHEDULER_DESTS ; +SELECT * FROM DBA_SCHEDULER_EXTERNAL_DESTS ; +SELECT * FROM DBA_SCHEDULER_FILE_WATCHERS ; + + +--****************************************************************************** +-- DataGuard Rollforward using Incremental Backups +-- http://docs.oracle.com/cd/E11882_01/server.112/e41134/rman.htm#SBYDB00759 +--****************************************************************************** + +-------------------------------- +-- Datafile Queries +-------------------------------- +SQL> +SELECT TO_CHAR(TRUNC(CHECKPOINT_TIME,'HH24'),'DD-MON-YYYY HH24') "CHECKPOINT_TIME (Hour)", count(1) from v$datafile_header group by TRUNC(CHECKPOINT_TIME,'HH24') order by 1 asc; + + +-- On Standby database +SQL> +ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; +set numf 99999999999999999 +SELECT CURRENT_SCN FROM V$DATABASE; +-- On a standby that has widespread nologging changes, query the V$DATAFILE view to record the lowest FIRST_NONLOGGED_SCN +SELECT MIN(FIRST_NONLOGGED_SCN) FROM V$DATAFILE WHERE FIRST_NONLOGGED_SCN>0 ; +-- On a standby that has nologging changes on a subset of datafiles, query the V$DATAFILE view, as follows: +SELECT FILE#, FIRST_NONLOGGED_SCN FROM V$DATAFILE WHERE FIRST_NONLOGGED_SCN > 0; + +-- On Primary database +RMAN> +CONFIGURE DEVICE TYPE DISK PARALLELISM 16; +BACKUP INCREMENTAL FROM SCN 685401030526 DATABASE FORMAT '/export/ora_stage/vishal/incremental_backup/ForStandby_%U' tag 'FORSTANDBY2' FILESPERSET 10 MAXSETSIZE 32G; +-- or If the standby has nologging changes on a subset of datafiles, +-- then create an incremental backup for each datafile listed in the FIRST_NONLOGGED_SCN column (recorded in step 2), as follows: +RMAN> +BACKUP INCREMENTAL FROM SCN 682842365996 DATAFILE 4 FORMAT '/tmp/ForStandby_%U' TAG 'FORSTANDBY2'; +BACKUP INCREMENTAL FROM SCN 682842365996 DATAFILE 5 FORMAT '/tmp/ForStandby_%U' TAG 'FORSTANDBY2'; + + +-- On Standby database +-- Transfer backups if not available via NFS mount point +RMAN> +CATALOG START WITH '/export/ora_stage/vishal/incremental_backup/ForStandby' NOPROMPT; +STARTUP NOMOUNT; +-- Controlfile restore is only needed if there is archivelog gap. +-- RMAN> RESTORE STANDBY CONTROLFILE FROM TAG 'FORSTANDBY'; -- +-- catalog all datafile +-- Switch datafiles +RMAN> +ALTER DATABASE MOUNT; +RECOVER DATABASE NOREDO; + +-- Check nologging operations +SELECT MIN(FIRST_NONLOGGED_SCN) FROM V$DATAFILE WHERE FIRST_NONLOGGED_SCN>0 ; +ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; + +-- On Standby database +RMAN> +crosscheck backupset TAG 'FORSTANDBY2'; +delete backupset TAG 'FORSTANDBY2'; + + +--*************************************************** + + + +--************************************* +-- DataGuard Corruption Recovery +-- Resolving ORA-752 or ORA-600 [3020] During Standby Recovery (Doc ID 1265884.1) +--************************************* +/* +Errors in file /u01/app/oracle/diag/rdbms/pr01zfs/pr01zfs1/trace/pr01zfs1_mrp0_105546.trc (incident=416587): +ORA-00600: internal error code, arguments: [3020], [2238], [98776], [805405144], [], [], [], [], [], [], [], [] +ORA-10567: Redo is inconsistent with data block (file# 2238, block# 98776, file offset is 809172992 bytes) +ORA-10564: tablespace PM_IDX +ORA-01110: data file 2238: '/zfssa/stby/backup2/pr01pimi/datafile/PR01ZFS/datafile/o1_mf_pm_idx__ec3466ce_.dbf' +ORA-10561: block type 'TRANSACTION MANAGED INDEX BLOCK', data object# 5030566 +Incident details in: /u01/app/oracle/diag/rdbms/pr01zfs/pr01zfs1/incident/incdir_416587/pr01zfs1_mrp0_105546_i416587.trc +*/ + +/* If below command take too long to cancel MRP, then kill PR00 parallel slave recovery process using alter system command at database level. Avoid kill -9 */ +alter database recover managed standby database cancel immediate; +-- By default following will start serial recovery +alter database recover automatic standby database TEST allow 99 corruption; +-- alter database recover automatic standby database until cancel allow 10 corruption ; +-->> Wait until you see one of the follwoing message in alert log +-->> CORRUPTING BLOCK 1134925 OF FILE 48 AND CONTINUING RECOVERY +-->> ORA-01578: ORACLE data block corrupted (file # 48, block # 1134925) +-->> Now CTRL-C to cancel recovery +-- alter database recover managed standby database disconnect ; +alter database recover cancel; +-- Rest problematic datafiles +alter database recover managed standby database using current logfile disconnect ; +alter database recover managed standby database cancel immediate; +alter database open read only; + + +-->> Copy the corrupted datafile from primary or another standby. +RMAN> +run +{ + allocate channel c1 device type disk; + allocate channel c2 device type disk; + allocate channel c3 device type disk; + allocate channel c4 device type disk; + allocate channel c5 device type disk; + sql 'alter database recover managed standby database cancel'; + catalog start with '/export/ora_stage/rman_backup/data_D-PR01PIMI_I-2013469077_TS-PM_DATA_BIG_FNO-1514_g2nui9rc.dbf' noprompt; + catalog start with '/export/ora_stage/rman_backup/data_D-PR01PIMI_I-2013469077_TS-PM_DATA_BIG_FNO-1666_g3nuib6g.dbf' noprompt; + restore datafile 1514,1666 ; + change datafilecopy '/export/ora_stage/rman_backup/data_D-PR01PIMI_I-2013469077_TS-PM_DATA_BIG_FNO-1514_g2nui9rc.dbf' uncatalog; + change datafilecopy '/export/ora_stage/rman_backup/data_D-PR01PIMI_I-2013469077_TS-PM_DATA_BIG_FNO-1666_g3nuib6g.dbf' uncatalog; + sql 'alter database recover managed standby database using current logfile disconnect '; +} + +run{ +switch datafile 2201 to datafilecopy '/zfssa/stby/backup2/pr01pimi/datafile/PR01ZFS/datafile/o1_mf_pm_idx__f92b4506_2.dbf'; +} + +--************************************* +-- DataGuard Corruption File recovery +--************************************* +RMAN> +restore file 1234; +sql 'alter databaser recover managed standby database using current logfile disconnect'; + + + +--**************************************** +-- Transient Type queries +--**************************************** + +select TO_CHAR(CTIME,'YYYY-MM-DD HH24') ctime + , count(1) +from sys.obj$ o, sys.type$ t, dba_users u +where o.oid$ = t.tvoid and +u.user_id = o.owner# and +bitand(t.properties,8388608) = 8388608 +and (sysdate-o.ctime) > 0.0007 +GROUP BY TO_CHAR(CTIME,'YYYY-MM-DD HH24') +ORDER BY 1 +; + +select count(1) + , TO_CHAR(min(CTIME),'DD-MON-YY HH24:MI:SS') min_ctime + , TO_CHAR(max(ctime),'DD-MON-YY HH24:MI:SS') max_ctime +from sys.obj$ o, sys.type$ t, dba_users u +where o.oid$ = t.tvoid and +u.user_id = o.owner# and +bitand(t.properties,8388608) = 8388608 +and (sysdate-o.ctime) > 0.0007 +; + + + + +--**************************************** +-- How to diagnose following wait events +--**************************************** + +--**************************************** +-- 'cursor: pin S wait on X' +-- Doc ID 1298015.1 - WAITEVENT: "cursor: pin S wait on X" Reference Note +-- Doc ID 1349387.1 - Troubleshooting 'cursor: pin S wait on X' waits. +--**************************************** + +-- SQL causing the issue (P1) +SELECT sql_id, sql_text, version_count + FROM GV$SQLAREA + WHERE HASH_VALUE in (select p1 from gv$session where event = 'cursor: pin S wait on X'); + +-- SID Holding Mutex (P2) +SELECT inst_id + , sid + , decode(trunc(P2/4294967296), + 0,trunc(P2/65536), + trunc(P2/4294967296)) SID_HOLDING_MUTEX + , status + , username , osuser , machine , program + , module, action + , event + FROM gv$session +WHERE event = 'cursor: pin S wait on X' ; + + + +-- Oracle Code Location (P3) +SELECT s.sid + , m.inst_id + , m.MUTEX_TYPE + , m.LOCATION + , m.wait_time + , m.sleeps + FROM sys.x$mutex_sleep m + , gv$session s + WHERE s.event = 'cursor: pin S wait on X' + AND m.inst_id = s.inst_id + AND m.mutex_type like 'Cursor Pin%' + and m.location_id= decode(trunc(s.P3/4294967296), + 0,trunc(s.P3/65536), + trunc(s.P3/4294967296) + ) +; + + + +--**************************************** +-- 'library cache lock' +-- MOS Note Id 122793.1 - How to Find which Session is Holding a Particular Library Cache Lock +-- Troubleshooting Library Cache: Lock, Pin and Load Lock (Doc ID 444560.1) +--**************************************** +select inst_id,sid,saddr, status, username, osuser,machine , program +-- , BLOCKING_INSTANCE, BLOCKING_SESSION, BLOCKING_SESSION_STATUS + , FINAL_BLOCKING_INSTANCE , FINAL_BLOCKING_SESSION, FINAL_BLOCKING_SESSION_STATUS + , event from gv$session where event= 'library cache lock'; + + +select kgllkhdl Handle,kgllkreq Request, kglnaobj Object +from sys.x$kgllk where kgllkses in (select saddr from gv$session where event= 'library cache lock') +and kgllkreq > 0; + + +--**************************************** +-- 'library cache pin' +-- MOS Note Id 780514.1 - How to Find the Blocker of the 'library cache pin' in a RAC environment? +-- WAITEVENT: "library cache pin" Reference Note [ID 34579.1] +-- Troubleshooting Library Cache: Lock, Pin and Load Lock (Doc ID 444560.1) +--**************************************** + + + +--**************************************** +-- Shrink Datafiles +--**************************************** + +select 'alter index ' || owner || '.' || segment_name || ' rebuild ' || nvl2(partition_name,' partition ' || partition_name ,' ') || ' online parallel 10;' , block_id, blocks +from +(select owner, segment_name, partition_name, max(block_id) block_id, max(blocks) blocks from dba_extents where file_id = 1909 group by owner, segment_name, partition_name +) +order by block_id desc +; + + +set lines 200 +set pages 400 + +UNDEFINE tablespace_name +DEFINE tablespace_name + +select /*+ CHOOSE */ 'alter database datafile ''' || file_name || ''' resize ' || TO_CHAR(CEIL(HWM)+50) || 'M; ---- Freeable ' || freeable || 'MB' +from +( +Select /*+ CHOOSE */ t.tablespace_name + , d.status "Status" + , GREATEST(d.maxbytes,d.bytes)/1024/1024 maxsize + , d.bytes/1024/1024 alloc + , NVL((hwm.bytes)/1024/1024,0) HWM + , ROUND((d.bytes - NVL(f.bytes,0))/1024/1024,2) used + , ROUND(decode(f.bytes, NULL,0, f.bytes)/1024/1024,2) free + , ROUND( (d.bytes - GREATEST( NVL(hwm.bytes,0), (d.bytes - NVL(f.bytes,0)) ) ) /1024/1024,2) freeable + , d.INCREMENT_BY/1024/1024 Increment_by + , t.pct_increase pct_increase + , d.file_id + , SUBSTR(d.file_name,1,80) file_name +FROM DBA_DATA_FILES d , DBA_TABLESPACES t + , (SELECT /*+ CHOOSE */ tablespace_name + , file_id + , sum(bytes) bytes + FROM DBA_FREE_SPACE f + WHERE tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name, file_id) f + , (Select /*+ CHOOSE */ file_id, + NVL( max((block_id + blocks - 1 ) * p.value),0) bytes + from dba_extents + , v$system_parameter p + WHERE tablespace_name LIKE '&&tablespace_name' + AND p.name = 'db_block_size' + GROUP BY file_id + ) hwm +WHERE t.tablespace_name = d.tablespace_name + AND f.tablespace_name(+) = d.tablespace_name + AND f.file_id(+) = d.file_id + AND hwm.file_id(+) = d.file_id + AND d.tablespace_name LIKE '&&tablespace_name' +UNION ALL +SELECT /*+ CHOOSE */ tf.tablespace_name + , tf.status + , GREATEST(tf.maxbytes,tf.bytes)/1024/1024 maxsize + , (tf.bytes/1024/1024) alloc + , (tf.bytes/1024/1024) HWM + , ROUND(ts.bytes_used/1024/1024) used + , ROUND(ts.bytes_free/1024/1024) free + , ROUND((tf.bytes - tf.bytes)/1024/1024,2) freeable + , tf.INCREMENT_BY/1024/1024 Increment_by + , 0 pct_increase + , tf.file_id + , SUBSTR(tf.file_name,1,80) file_name + FROM dba_temp_files tf, V$TEMP_SPACE_HEADER ts + WHERE ts.file_id = tf.file_id + and ts.tablespace_name LIKE '&&tablespace_name' +) c +WHERE freeable > 100 +AND file_name LIKE '+%' +ORDER BY freeable desc, tablespace_name,c.file_id asc; + + + + + + + + + +--**************************************** +-- SCAN listener +--*************************************** +for i in 1 2 3 ; +do + server=`crsctl stat res ora.LISTENER_SCAN$i.lsnr |grep STATE|awk '{print $NF}'`; + ssh $server "grep '06-MAR-2013 07' /u01/app/11.2.0.2/grid/log/diag/tnslsnr/$server/listener_scan$i/trace/listener_scan$i.log | grep 'pr01pimi_adv_grid_con' " +done + + To Trace SRVCTL issues. Set the debug flag on. + export SRVM_TRACE=TRUE + + + + +--**************************************** +-- SMON and CJQ Memory Leak, increase Linux level process memory +--*************************************** +vm.max_map_count = 200000 # (Default is 65536) +cat /proc/sys/vm/max_map_count +echo 200000 > /proc/sys/vm/max_map_count + +Process level max PGA memory +******************************* += _realfree_heap_pagesize_hint * vm.max_map_count += 64k (default value) * 64k (default value) += 4GB + +Increase either + +Bug 11852492 : ORA-4030 OCCURS WHEN PGA EXCEEDS 4GB. + +############################################################### +# As per Automatic Memory Management (AMM) on 11g [ID 443746.1] +# To fix ORA-4030 out of process memory errors in SMON process, +# which were resulting in database instance crash +# +vm.max_map_count = 200000 + +--**************************************** + + +--**************************************** +--**** CJQ Workaround +--**************************************** + +select * From dba_scheduler_running_jobs; + +--ORA-01405: Fetched Column Value Is Null For An Advanced Queue [ID 1162862.1] +select owner, name, queue_type, enqueue_enabled, dequeue_enabled from dba_queues +where owner='SYS' and queue_table='SYS$SERVICE_METRICS_TAB' and queue_type='NORMAL_QUEUE'; + + --Note1: Replace '.' appropriately with your affected queue table: + exec dbms_aqadm.stop_queue(queue_name => 'SYS.SYS$SERVICE_METRICS'); + + delete from sys.aq$_SYS$SERVICE_METRICS_TAB_L where msgid ='00000000000000000000000000000000'; + commit; + +DECLARE + rer po dbms_aqadm.aq$_purge_options_t; +BEGIN + po.block := TRUE; + DBMS_AQADM.PURGE_QUEUE_TABLE( + queue_table => 'SYS.SYS$SERVICE_METRICS_TAB', + purge_condition => 'qtview.queue = ''SYS.AQ$SYS$SERVICE_METRICS_TAB'' + and qtview.msg_state = ''PROCESSED''', + purge_options => po); + commit; +END; +/ + +select count(*) from SYS.aq$_SYS$SERVICE_METRICS_TAB_L where msgid ='00000000000000000000000000000000'; + +exec dbms_aqadm.start_queue(queue_name => 'SYS.SYS$SERVICE_METRICS') + +select owner, name, queue_type, enqueue_enabled, dequeue_enabled from dba_queues +where owner='SYS' and queue_table='SYS$SERVICE_METRICS_TAB' and queue_type='NORMAL_QUEUE'; + +select * From dba_scheduler_running_jobs; + + + +########################### +# Database Events +########################### + +-------------------------------------- +--dNFS (Direct NFS) releated events +-------------------------------------- + event "19392 trace name context forever, level 8" # kgnfs (dNFs) + event "19394 trace name context forever, level 8" # skgnfs (Normal NFS) + event "19396 trace name context forever, level 2" # kgodm (ODM Related) + event "19398 trace name context forever, level 128" #mount errors + +alter system set +event = '19392 trace name context forever, level 8','19394 trace name context forever, level 8','19396 trace name context forever, level 2','19398 trace name context forever, level 128' +sid='*' scope=spfile ; + +Network NSLOOKUP +################## + +#Reverse Lookup +############## +for i in {1..254}; +do + for j in {1..254}; + do + host="144.77.$i.$j" + echo $host - ` nslookup $host |grep name |cut -d= -f2 ` - $(if [ `ping -c1 -i1 -w1 $host >/dev/null 2>&1 ; echo $?` ] -eq 0 ]; then echo Pingable ; fi;) + done +done + +for i in {1..254}; +do + for j in {1..254}; + do + host="192.168.$i.$j" + echo $host - ` nslookup $host |grep name |cut -d= -f2 ` + done +done + + +for j in {1..254} +do + host="10.201.119.$j" + echo $host - ` nslookup $host |grep name |cut -d= -f2 ` - $(if [ "`ping -c1 -w1 $host >/dev/null 2>&1 ; echo $?`" -eq 0 ] ; then echo Pingable ; fi;) +done + +% + +# Filter for specific named hosts +for j in {1..254}; +do + for i in 120 129 + do + host="192.168.$i.$j"; + if [[ "`nslookup $host |grep name |cut -d= -f2`" == *dm01* ]]; + then + echo $host - ` nslookup $host |grep name |cut -d= -f2 ` - $(if [ "`ping -c1 -w1 $host >/dev/null 2>&1 ; echo $?`" -eq 0 ] ; then echo Pingable ; fi;) + fi + done +done + + + + +HangAnalyze +################# +Oracle Performance Diagnostic Guide (OPDG) (Doc ID 390374.1) +How to Collect Diagnostics for Database Hanging Issues (Doc ID 452358.1) + +sqlplus -prelim '/ as sysdba' +oradebug setorapname diag +oradebug unlimit +oradebug -g all hanganalyze 3 +oradebug -g all dump systemstate 258 +-- <> +oradebug -g all hanganalyze 3 +oradebug -g all dump systemstate 258 +-- Upload the *diag* process traces from all the instances + +######################################## +Generate Service creation commands +######################################## + +######################################## +# 11g +######################################## + +database=ts01mtgz +#tmpfile=/export/ora_stage/vishal/${database}_services.txt +tmpfile=/tmp/${database}_services.txt + +srvctl config service -d $database > $tmpfile + +for i in `cat $tmpfile|grep 'Service name'|cut -d: -f2`; +do + servicename="`grep -A18 "Service name: $i" $tmpfile|grep 'Service name'|cut -d: -f2`"; + preferred_instances="`grep -A18 "Service name: $i" $tmpfile|grep 'Preferred instances'|cut -d: -f2`"; + available_instances="`grep -A18 "Service name: $i" $tmpfile|grep 'Available instances'|cut -d: -f2`"; + service_role="`grep -A18 "Service name: $i" $tmpfile|grep 'Service role'|cut -d: -f2`"; + aq_notification="`grep -A18 "Service name: $i" $tmpfile|grep 'AQ HA notifications'|cut -d: -f2`"; + failover_type="`grep -A18 "Service name: $i" $tmpfile|grep 'Failover type'|cut -d: -f2`"; + failover_method="`grep -A18 "Service name: $i" $tmpfile|grep 'Failover method'|cut -d: -f2`"; + failover_delay="`grep -A18 "Service name: $i" $tmpfile|grep 'TAF failover delay'|cut -d: -f2`"; + failover_retries="`grep -A18 "Service name: $i" $tmpfile|grep 'TAF failover retries'|cut -d: -f2`"; + taf_policy="`grep -A18 "Service name: $i" $tmpfile|grep 'TAF policy specification'|cut -d: -f2`"; + clb_goal="`grep -A18 "Service name: $i" $tmpfile|grep 'Connection Load Balancing Goal'|cut -d: -f2`"; + rlb_goal="`grep -A18 "Service name: $i" $tmpfile|grep 'Runtime Load Balancing Goal'|cut -d: -f2`"; + dtp_transaction="`grep -A18 "Service name: $i" $tmpfile|grep 'DTP transaction'|cut -d: -f2`"; + ### Display commands for adding services + echo "srvctl add service -d $database -s $servicename -r $preferred_instances -a $available_instances -P $taf_policy -l $service_role -e $failover_type -m $failover_method -w $failover_delay -z $failover_retries -j $clb_goal -B $rlb_goal -x $dtp_transaction -q $aq_notification" + ### Display commands for relocating services + #echo "srvctl modify service -d $database -s $servicename -n -i $preferred_instances -a $available_instances " +done + +### Display commands for removing services +for i in `cat $tmpfile|grep 'Service name'|cut -d: -f2`; +do + echo srvctl remove service -d $database -s $i +done + +Usage: srvctl add service -d -s {-r "" [-a ""] [-P {BASIC | NONE | PRECONNECT}] | -g [-c {UNIFORM | SINGLETON}] } [-k ] [-l [PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]] [-y {AUTOMATIC | MANUAL}] [-q {TRUE|FALSE}] [-x {TRUE|FALSE}] [-j {SHORT|LONG}] [-B {NONE|SERVICE_TIME|THROUGHPUT}] [-e {NONE|SESSION|SELECT}] [-m {NONE|BASIC}] [-z ] [-w ] [-t ] [-f] + -d Unique name for the database + -s Service name + -r "" Comma separated list of preferred instances + -a "" Comma separated list of available instances + -g Server pool name + -c {UNIFORM | SINGLETON} Service runs on every active server in the server pool hosting this service (UNIFORM) or just one server (SINGLETON) + -k network number (default number is 1) + -P {NONE | BASIC | PRECONNECT} TAF policy specification + -l Role of the service (primary, physical_standby, logical_standby, snapshot_standby) + -y Management policy for the service (AUTOMATIC or MANUAL) + -e Failover type (NONE, SESSION, or SELECT) + -m Failover method (NONE or BASIC) + -w Failover delay + -z Failover retries + -t Edition (or "" for empty edition value) + -j Connection Load Balancing Goal (SHORT or LONG). Default is LONG. + -B Runtime Load Balancing Goal (SERVICE_TIME, THROUGHPUT, or NONE) + -x Distributed Transaction Processing (TRUE or FALSE) + -q AQ HA notifications (TRUE or FALSE) +Usage: srvctl add service -d -s -u {-r "" | -a ""} [-f] + -d Unique name for the database + -s Service name + -u Add a new instance to service configuration + -r Name of new preferred instance + -a Name of new available instance + -f Force the add operation even though a listener is not configured for a network + -h Print usage + + +Service name: bt01pimi_tools_con +Service is enabled +Server pool: bt01pimi_bt01pimi_tools_con +Cardinality: 3 +Disconnect: false +Service role: PRIMARY +Management policy: AUTOMATIC +DTP transaction: false +AQ HA notifications: false +Failover type: SESSION +Failover method: BASIC +TAF failover retries: 0 +TAF failover delay: 0 +Connection Load Balancing Goal: LONG +Runtime Load Balancing Goal: NONE +TAF policy specification: BASIC +Edition: +Preferred instances: bt01pimi1,bt01pimi2,bt01pimi3 +Available instances: + + + +############################################# +# Generate script from 11g output for 12c +############################################# + +database=al01pimn +#tmpfile=/export/ora_stage/vishal/${database}_services.txt +tmpfile=/tmp/${database}_services.txt + +srvctl config service -d $database > $tmpfile + +for i in `cat $tmpfile|grep 'Service name'|cut -d: -f2`; +do + servicename="`grep -A18 "Service name: $i" $tmpfile|grep 'Service name'|cut -d: -f2`"; + preferred_instances="`grep -A18 "Service name: $i" $tmpfile|grep 'Preferred instances'|cut -d: -f2`"; + available_instances="`grep -A18 "Service name: $i" $tmpfile|grep 'Available instances'|cut -d: -f2`"; + service_role="`grep -A18 "Service name: $i" $tmpfile|grep 'Service role'|cut -d: -f2`"; + aq_notification="`grep -A18 "Service name: $i" $tmpfile|grep 'AQ HA notifications'|cut -d: -f2`"; + failover_type="`grep -A18 "Service name: $i" $tmpfile|grep 'Failover type'|cut -d: -f2`"; + failover_method="`grep -A18 "Service name: $i" $tmpfile|grep 'Failover method'|cut -d: -f2`"; + failover_delay="`grep -A18 "Service name: $i" $tmpfile|grep 'TAF failover delay'|cut -d: -f2`"; + failover_retries="`grep -A18 "Service name: $i" $tmpfile|grep 'TAF failover retries'|cut -d: -f2`"; + taf_policy="`grep -A18 "Service name: $i" $tmpfile|grep 'TAF policy specification'|cut -d: -f2`"; + clb_goal="`grep -A18 "Service name: $i" $tmpfile|grep 'Connection Load Balancing Goal'|cut -d: -f2`"; + rlb_goal="`grep -A18 "Service name: $i" $tmpfile|grep 'Runtime Load Balancing Goal'|cut -d: -f2`"; + dtp_transaction="`grep -A18 "Service name: $i" $tmpfile|grep 'DTP transaction'|cut -d: -f2`"; + ### Display commands for adding services + echo "srvctl add service -d $database -s $servicename -r $preferred_instances -a $available_instances -P $taf_policy -l $service_role -e $failover_type -m $failover_method -w $failover_delay -z $failover_retries -j $clb_goal -B $rlb_goal -x $dtp_transaction -q $aq_notification" + ### Display commands for relocating services + #echo "srvctl modify service -d $database -s $servicename -n -i $preferred_instances -a $available_instances " +done + +### Display commands for removing services +for i in `cat $tmpfile|grep 'Service name'|cut -d: -f2`; +do + echo srvctl remove service -d $database -s $i +done + + + +Usage: srvctl add service -db -service {-preferred "" [-available ""] [-tafpolicy {BASIC | NONE | PRECONNECT}] | -serverpool [-cardinality {UNIFORM | SINGLETON}] } [-netnum ] [-role "[PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]"] [-policy {AUTOMATIC | MANUAL}] [-notification {TRUE|FALSE}] [-dtp {TRUE|FALSE}] [-clbgoal {SHORT|LONG}] [-rlbgoal {NONE|SERVICE_TIME|THROUGHPUT}] [-failovertype {NONE|SESSION|SELECT|TRANSACTION}] [-failovermethod {NONE|BASIC}] [-failoverretry ] [-failoverdelay ] [-edition ] [-pdb ] [-global {TRUE|FALSE}] [-maxlag ] [-sql_translation_profile ] [-commit_outcome {TRUE|FALSE}] [-retention ] [-replay_init_time ] [-session_state {STATIC|DYNAMIC}] [-pqservice ] [-pqpool ] [-gsmflags ] [-force] [-eval] [-verbose] + -db Unique name for the database + -service Service name + -preferred "" Comma separated list of preferred instances + -available "" Comma separated list of available instances + -serverpool Server pool name + -cardinality (UNIFORM | SINGLETON) Service runs on every active server in the server pool hosting this service (UNIFORM) or just one server (SINGLETON) + -netnum Network number (default number is 1) + -tafpolicy (NONE | BASIC | PRECONNECT) TAF policy specification + -role Role of the service (primary, physical_standby, logical_standby, snapshot_standby) + -policy Management policy for the service (AUTOMATIC or MANUAL) + -failovertype (NONE | SESSION | SELECT | TRANSACTION) Failover type + -failovermethod (NONE | BASIC) Failover method + -failoverdelay Failover delay (in seconds) + -failoverretry Number of attempts to retry connection + -edition Edition (or "" for empty edition value) + -pdb Pluggable database name + -maxlag Maximum replication lag time in seconds (Non-negative integer, default value is 'ANY') + -clbgoal (SHORT | LONG) Connection Load Balancing Goal. Default is LONG. + -rlbgoal (SERVICE_TIME | THROUGHPUT | NONE) Runtime Load Balancing Goal + -dtp (TRUE | FALSE) Distributed Transaction Processing + -notification (TRUE | FALSE) Enable Fast Application Notification (FAN) for OCI connections + -global Global attribute (TRUE or FALSE) + -preferred Name of new preferred instance + -available Name of new available instance + -sql_translation_profile Specify a database object for SQL translation profile + -commit_outcome (TRUE | FALSE) Commit outcome + -retention Specifies the number of seconds the commit outcome is retained + -replay_init_time Seconds after which replay will not be initiated + -session_state Session state consistency (STATIC or DYNAMIC) + -pqservice Parallel query service name + -pqpool Parallel query server pool name + -gsmflags Set locality and region failover values + -eval Evaluates the effects of event without making any changes to the system + +Usage: srvctl add service -db -service -update {-preferred "" | -available ""} [-force] [-verbose] + -db Unique name for the database + -service Service name + -update Add a new instance to service configuration + -preferred Name of new preferred instance + -available Name of new available instance + -force Force the add operation even though a listener is not configured for a network + -verbose Verbose output + -help Print usage + + + + +Service name: bt01pimi_tools_con +Service is enabled +Server pool: bt01pimi_bt01pimi_tools_con +Cardinality: 3 +Disconnect: false +Service role: PRIMARY +Management policy: AUTOMATIC +DTP transaction: false +AQ HA notifications: false +Failover type: SESSION +Failover method: BASIC +TAF failover retries: 0 +TAF failover delay: 0 +Connection Load Balancing Goal: LONG +Runtime Load Balancing Goal: NONE +TAF policy specification: BASIC +Edition: +Preferred instances: bt01pimi1,bt01pimi2,bt01pimi3 +Available instances: + + + +################################################################################# +# Oracle Binary Options & Direct FNS (dNFS) setting +# MOS Note ID: 948061.1 - How to Check and Enable/Disable Oracle Binary Options +################################################################################# + +#--- List the object files for different options +#-- Object files for turning Options ON and OFF +grep _ON $ORACLE_HOME/rdbms/lib/env_rdbms.mk |grep OBJ_EXT +grep _OFF $ORACLE_HOME/rdbms/lib/env_rdbms.mk |grep OBJ_EXT + + +FORMAT="%35s \t %3s \n" +for i in `strings $ORACLE_HOME/lib/libodm??.so | grep odm_init | awk '{print $NF}' | cut -d" " -f1` `ar -t $ORACLE_HOME/rdbms/lib/libknlopt.a |awk '{print $NF}' ` +do + case $i in + kfon.o) printf "$FORMAT" "Oracle ASM" "ON";; + kfoff.o) printf "$FORMAT" "Oracle ASM" "OFF";; + kciwcx.o) printf "$FORMAT" "Oracle Context" "ON";; + kcincx.o) printf "$FORMAT" "Oracle Context" "OFF";; + dmwdm.o) printf "$FORMAT" "Oracle Data Mining" "ON";; + dmndm.o) printf "$FORMAT" "Oracle Data Mining" "OFF";; + ktd.o) printf "$FORMAT" "Oracle DDB" "ON";; + ksnktd.o) printf "$FORMAT" "Oracle DDB" "OFF";; + kzvidv.o) printf "$FORMAT" "Oracle Database Vault" "ON";; + kzvndv.o) printf "$FORMAT" "Oracle Database Vault" "OFF";; + kgodm_init) printf "$FORMAT" "Oracle Direct NFS" "ON";; + odm_init) printf "$FORMAT" "Oracle Direct NFS" "OFF";; + jox.o) printf "$FORMAT" "Oracle JOX" "ON";; + joxoff.o) printf "$FORMAT" "Oracle JOX" "OFF";; + kprwts.o) printf "$FORMAT" "Oracle KPT" "ON";; + kprnts.o) printf "$FORMAT" "Oracle KPT" "OFF";; + kzlilbac.o) printf "$FORMAT" "Oracle Label Security" "ON";; + kzlnlbac.o) printf "$FORMAT" "Oracle Label Security" "OFF";; + xsyeolap.o) printf "$FORMAT" "Oracle OLAP" "ON";; + xsnoolap.o) printf "$FORMAT" "Oracle OLAP" "OFF";; + kkpoban.o) printf "$FORMAT" "Oracle Partitioning" "ON";; + ksnkkpo.o) printf "$FORMAT" "Oracle Partitioning" "OFF";; + kkxwtp.o) printf "$FORMAT" "Oracle PL/SQL" "ON";; + kkxntp.o) printf "$FORMAT" "Oracle PL/SQL" "OFF";; + kcsm.o) printf "$FORMAT" "Oracle Real Application Cluster" "ON";; + ksnkcs.o) printf "$FORMAT" "Oracle Real Application Cluster" "OFF";; + kecwr.o) printf "$FORMAT" "Oracle Real Application Testing" "ON";; + kecnr.o) printf "$FORMAT" "Oracle Real Application Testing" "OFF";; + kxmwsd.o) printf "$FORMAT" "Oracle SDO" "ON";; + kxmnsd.o) printf "$FORMAT" "Oracle SDO" "OFF";; + kdzof.o) printf "$FORMAT" "Oracle ZDK" "OFF";; + sllfls.o) printf "$FORMAT" "Oracle LIL" "OFF";; + xaonsl.o) printf "$FORMAT" "Oracle XAS" "OFF";; + xaondy.o) printf "$FORMAT" "Oracle XAD" "OFF";; + *) printf "$FORMAT" "$i" "" ;; + esac +done |sort + + + + +/*------------------------------------------------------------------------------------ +Convert Physical standby to Snapshost standby +Ref - http://docs.oracle.com/cd/B28359_01/server.111/b28294/manage_ps.htm#BACIEJJI +------------------------------------------------------------------------------------*/ +sqlplus / as sysdba < 'Idle' +and s.program like '%(PR%' +order by s.program +; + +----------------------------- +-- Parallel Recovery process +----------------------------- +SELECT p.inst_id + , p.pname + , DECODE(sw.p1text, 'log#',(select thread# from v$archived_log l2 + where l2.first_time = (select max(first_Time) from v$archived_log l where l.sequence# = sw.p1 ) + and l2.sequence# = sw.p1) + ,'') thread# + , DECODE(sw.p1text, 'log#',sw.p1 ,'') sequence# + , DECODE(sw.p1text, 'log#',(select max(first_Time) from v$archived_log l where l.sequence# = sw.p1 ),'') archlog_first_Time + , DECODE(sw.p1text, 'log#',sw.p2 ,'') block# + , DECODE(sw.p1text, 'log#',sw.p3 ,'') blocks + , sw.event + , sw.p1text + , sw.p1 + FROM gv$session_wait sw + JOIN gv$session s ON s.inst_id = sw.inst_id and sw.sid = s.sid and s.program like '%' + JOIN gv$process p ON s.inst_id = p.inst_id and s.paddr = p.addr +where sw.wait_class <> 'Idle' +and s.program like '%(PR%' +order by s.program +; +----------------------------- +-- Recovery Sesssion Events +----------------------------- +select s.program, se.* +From gv$session_event se + JOIN gv$session s ON s.inst_id = se.inst_id and se.sid = s.sid + JOIN gv$process p ON p.inst_id = p.inst_id and s.paddr = p.addr +where s.program like '%(PR%' +and se.wait_class not in ('Idle') +order by se.time_waited desc + ; + +SELECT * FROM gv$managed_standby; +SELECT * FROM gv$recovery_progress; +select * From v$recovery_status; +select * From V$RECOVERY_FILE_STATUS; +select * From V$instance_recovery; +select * From V$instance_recovery; + +SELECT thread#, sequence#, status, applied,archived, deleted, first_Time, next_time FROM v$archived_log where sequence# = 156987 order by first_time desc; + + +----------------------------- +-- Get Latch details +-- +-- Ref +-- http://www.pythian.com/blog/tuning-latch-contention-cache-buffers-chain-latches/ +-- http://blog.tanelpoder.com/2010/02/15/new-versions-of-latchprof-and-latchprofx-for-latch-contention-troubleshooting-and-tuning/ +----------------------------- + +-- Get latch Summary +set lines 1000 +set verify off +@latchprof name % % 1000 +@latchprof name,sid % % 1000 +@latchprof name,sid % "cache buffers chains" 1000 + +@latchname 186 +@latchname "%cache%" + + +-- Get latch details +select /*+ leading(s) USE_NL(s l) */ + l.* + , s.sid + , s.inst_id + , s.userame + , s.osuser + , s.program +From gv$session s + JOIN gV$LATCH_CHILDREN l ON l.inst_id = s.inst_id and l.addr = RAWTOHEX(s.P1RAW) +WHERE s.event like '%latch%' +; + +--------------------------------------- +-- Dynamic Object Block Remastering +--------------------------------------- +SELECT o.owner + , o.object_name + , o.subobject_name + , o.object_type + , f.tablespace_name + , g.file_id + , g.gc_mastering_policy + , g.current_master + , g.previous_master + , g.remaster_cnt + FROM v$gcspfmaster_info g + INNER JOIN dba_objects o on o.data_object_id = g.data_object_id + LEFT OUTER JOIN dba_data_files f ON f.file_id = g.file_id + WHERE 1=1 + AND o.owner LIKE '%' + AND o.object_name LIKE '%' +; + + +------------------------------------------ +-- Convert comma separated list to rows +------------------------------------------- +SELECT regexp_substr(:csv_list, '[^,]+', 1, LEVEL) token +FROM dual +CONNECT BY instr(:csv_list, ',', 1, LEVEL - 1) > 0 +; + +------------------------------------------ +-- Convert rows to comma separated list +------------------------------------------- +select + listagg(name, ',') + within group (order by id) as list +from student; + +select RTRIM(XMLAGG(XMLELEMENT(E,TABLE_NAME,',').EXTRACT('//text()') ORDER BY TABLE_NAME).GETCLOBVAL(),',') AS TABLE_LIST +from dba_tables; + + + +-------------------------------------------------------------- +-- Delete Cluster Health Service , Berkley database file +-- ora.crf resource can be stopped without impacting anything +-------------------------------------------------------------- +cd /u01/app/11.2.0.4/grid/crf/db/`hostname -s`/ +crsctl stop res ora.crf –init +sudo –u root rm crfclust.bdb +crsctl start res ora.crf –init +crsctl status res ora.crf –init + + +-------------------------------------------------------------- +-- Get Partition name based on high_value +-- Convert LONG to VARCHAR2 +-------------------------------------------------------------- +select * +from + xmltable( '/ROWSET/ROW' + passing dbms_xmlgen.getXMLType(' + select table_owner + , table_name + , partition_name + , subpartition_count + , high_value /* <---- Long Column type*/ + from dba_tab_partitions + WHERE table_owner = ''LEVERAGE_OWN'' + AND table_name = ''TEMPLATE_RESULT_DETAILS_CLOSE'' + ' + ) + columns + table_owner varchar2(30) + , table_name varchar2(30) + , partition_name varchar2(30) + , subpartition_count NUMBER + , high_value varchar2(4000) + ) +WHERE 1=1 +and high_value like '%' || TO_CHAR(trunc(sysdate+1),'YYYY-MM-DD HH24:MI:SS') || '%' +; + +-------------------------------------------------------------- +-- Automatic Diagnostic Repository (ADR) +-------------------------------------------------------------- +$ORACLE_HOME/bin/adrci < move LOB ( .XMLDATA ) STORE AS ( TABLESPACE ); + +------------------------------------------------------------------- +--- Move LOB +------------------------------------------------------------------- +alter table move LOB ( .XMLDATA ) STORE AS ( TABLESPACE ); + +------------------------------------------------------------------- +--- Move XMLType +------------------------------------------------------------------- +alter table move LOB ( ) STORE AS ( TABLESPACE ); + + + +------------------------------------------------------------------- +--- SQL Binds +------------------------------------------------------------------- +SELECT s.inst_id + , s.sql_id + , b.child_number + , b.child_address + , b.name bind_name + , B.DATATYPE_STRING bind_datatype + , b.value_string bind_value + , B.VALUE_ANYDATA + , B.WAS_CAPTURED + , b.last_captured +FROM gv$sql s + JOIN gv$sql_bind_capture b ON b.inst_id = s.inst_id and b.sql_id = s.sql_id +WHERE s.sql_id='c7y4045sx7ax6' +; + + +------------------------------------------------------------------- +--- To speedup queries against DBA_FREE_SPACE view. +------------------------------------------------------------------- +@stats SYS X$KTFBUE +@stats SYS RECYCLEBIN$ +exec dbms_stats.gather_table_stats('SYS','X$KTFBUE',degree=>16) +exec dbms_stats.gather_table_stats('SYS','RECYCLEBIN$',degree=>16) +SELECT NVL(SUM(BYTES),0)/(1024*1024) FREE_BYTES FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME = 'SYSAUX'; + +------------------------------------------------------------------- +--- Relocate SCAN listener in OEM from one agent to another +------------------------------------------------------------------- + +# +# On OEM application server , where weblogic runs. +# Example location of emcli +# $OMS_HOME/oms/bin/emcli +# /u01/oracle/app/product/Middleware/oms12c/oms/bin/emcli +# + +emcli help relocate_targets + +emcli login  -username= -password= + +emcli relocate_targets \ +-src_agent=source.hostname.com:1830 \ +-dest_agent=target.hostname.com:1830 \ +-target_name=LISTENER_SCAN1_dmz \ +-target_type=oracle_listener \ +-copy_from_src \ +-force=yes + +------------------------------------------------------------------- +--- APR cache debugging +------------------------------------------------------------------- + +# Check that MAC address of SCAN VIP on client machines matches the MAC address on DB server of underlying bond interface for a SCAN VIP address. + +# Display current arp cache on a host +/sbin/arp -h +/sbin/arp -v |sort -k1 # Display dns names of hosts +/sbin/arp -vn |sort -k1 # Display numeric IPs + +arping + +$ /sbin/arp -h +Usage: + arp [-vn] [] [-i ] [-a] [] <-Display ARP cache + arp [-v] [-i ] -d [pub][nopub] <-Delete ARP entry + arp [-vnD] [] [-i ] -f [] <-Add entry from file + arp [-v] [] [-i ] -s [temp][nopub] <-Add entry + arp [-v] [] [-i ] -s [netmask ] pub <-''- + arp [-v] [] [-i ] -Ds [netmask ] pub <-''- + + -a display (all) hosts in alternative (BSD) style + -e display (all) hosts in default (Linux) style + -s, --set set a new ARP entry + -d, --delete delete a specified entry + -v, --verbose be verbose + -n, --numeric don't resolve names + -i, --device specify network interface (e.g. eth0) + -D, --use-device read from given device + -A, -p, --protocol specify protocol family + -f, --file read new entries from file or from /etc/ethers + + =Use '-H ' to specify hardware address type. Default: ether + List of possible hardware types (which support ARP): + strip (Metricom Starmode IP) ash (Ash) ether (Ethernet) + tr (16/4 Mbps Token Ring) tr (16/4 Mbps Token Ring (New)) ax25 (AMPR AX.25) + netrom (AMPR NET/ROM) rose (AMPR ROSE) arcnet (ARCnet) + dlci (Frame Relay DLCI) fddi (Fiber Distributed Data Interface) hippi (HIPPI) + irda (IrLAP) x25 (generic X.25) infiniband (InfiniBand) + + +$ /sbin/arping -h +Usage: arping [-fqbDUAV] [-c count] [-w timeout] [-I device] [-s source] destination + -f : quit on first reply + -q : be quiet + -b : keep broadcasting, don't go unicast + -D : duplicate address detection mode + -U : Unsolicited ARP mode, update your neighbours + -A : ARP answer mode, update your neighbours + -V : print version and exit + -c count : how many packets to send + -w timeout : how long to wait for a reply + -I device : which ethernet device to use (eth0) + -s source : source ip address + destination : ask for what ip address + + + + + + +------------------------------------------------------------------- +--- Excel Size Analysis +------------------------------------------------------------------- + +Press Alt-F11 and copy the sub below into any VB module. +Position the cursor anywhere in the Sub and press F5. +The results appear in the Immediate Window, which is usually to be found at the bottom of the VBA window. +Type Control-G if it’s not visible. + +Sub ScanSheets() + 'report sheet used range size, number of Query Tables on it and number of pivot tables + Dim ws As Worksheet + Debug.Print Left("Name" & String$(20, " "), 20) & Left("Rows" & String$(8, " "), 8) & Left("Cols" & String$(6, " "), 6) & "QueryTables" & vbTab & "PivotTables" + Debug.Print String$(60, "-") + For Each ws In Worksheets + Debug.Print Left(ws.Name & String$(20, " "), 20) & _ + Left(CStr(ws.UsedRange.Rows.Count) & String$(8, " "), 8) & _ + Left(CStr(ws.UsedRange.Columns.Count) & String$(6, " "), 6) & _ + ws.QueryTables.Count & vbTab & vbTab & vbTab & vbTab & ws.PivotTables.Count + Next 'ws +End Sub + +Here’s the results for one of the sheets Paolo sent: + +Name Rows Cols QueryTables PivotTables +------------------------------------------------------------ +2012red 246 53 0 0 +bill2012 164 21 0 0 +2012 217 49 0 0 +CAL act 513 21 0 0 +Cal exp. 481 21 0 0 +cheat 51 27 0 0 +database 147 142 0 0 +BM bonds 242 18 0 0 +eccomm 230 93 0 0 +this week 109 42 0 0 +create table 4886 16384 0 0 +history2 771 23 0 0 +history1 64521 87 0 0 +overview 579 61 0 4 +ovhist 106 18 0 0 +disc 740 37 0 0 +Italy 322 28 0 0 +Italy 2 214 148 0 0 +EFSF 163 16314 0 0 +GreecePSI 1048048 44 0 0 +auction 282 42 0 0 +Port 145 17 0 0 +study 56 31 0 0 +last week 95 15 0 0 +spain2 39 13 0 0 +Spain 120 15 0 0 + + +I first looked at the 4 Pivot Tables on sheet ‘overview’. I saw that all these were taking 65k rows from sheet ‘history1’ and expect that this is the problem the user was having. + +I then went in and deleted extra rows and columns from ‘create table’, ‘history1’, ‘EFSF’ and ‘GreecePSI’ + +This reduced the file footprint from 33MB to 3MB but also had the effect of cutting down the range used by the 4 Pivot Tables on sheet ‘overview.’ + +I would expect the reduced sheet (attached) to run without problem. + +There are no MS Queries or other code to populate ‘history1’ so one thing to do is find out how it is being populated and provide a macro that automatically resizes the range of the PivotTables when the user changes ‘history1’ + +Tell me if this is too much information ? + + + +------------------------------------------------------------- +-- Hourly DB Statistics (Derived from ASH) +------------------------------------------------------------- +select TO_CHAR(TRUNC(ash.sample_time,'MI'),'YYYY-MM-DD HH24:MI') sample_time + , SUM(ash.DELTA_READ_IO_REQUESTS) read_io_requests + , sum(ash.delta_write_io_requests) "Phy" + , ROUND(sum(ash.delta_read_io_bytes)/power(1024,2)) "PhyRead (MB)" + , ROUND(sum(ash.delta_write_io_bytes)/power(1024,2)) "PhyWrite (MB)" + , ROUND(sum(ash.delta_interconnect_io_bytes)/power(1024,2)) "Interconnect (MB)" + , sum(ash.tm_delta_time) tm_time + , sum(ash.tm_delta_cpu_time) tm_cpu_time + , sum(ash.tm_delta_db_time) tm_db_time + from gv$active_session_history ash +where ash.sample_time > systimestamp - 1/24 +GROUP BY TRUNC(ash.sample_time,'MI') +ORDER BY TRUNC(ash.sample_time,'MI') +; + +------------------------------------------------------------- +-- DB Statistics by User (Derived from SQL Statistics) +------------------------------------------------------------- +SELECT ss.parsing_schema_name + , TO_CHAR(MIN(s.end_interval_time),'DD-MON-YYYY HH24:MI') min_snapshot_time + , TO_CHAR(MAX(s.end_interval_time),'DD-MON-YYYY HH24:MI') max_snapshot_time + , sum(ss.executions_delta) executions + , sum(ss.parse_calls_delta) parse_calls + , sum(ss.disk_reads_delta) disk_reads + , sum(ss.buffer_gets_delta) buffer_gets + , sum(ss.rows_processed_delta) rows_processed + , sum(ss.cpu_time_delta) cpu_time + , sum(ss.elapsed_time_delta) elapsed_time + , sum(ss.iowait_delta) iowait_time + , sum(ss.clwait_delta) cluster_wait_time + , sum(ss.ccwait_delta) concurrency_wait_time + , sum(SS.apwait_delta) app_wait_time + , sum(ss.plsexec_time_delta) pls_exec_time + , sum(ss.javexec_time_delta) java_exec_time + , sum(ss.direct_writes_delta) direct_writes + , sum(ss.io_interconnect_bytes_delta) io_interconnect_bytes + , sum(ss.io_offload_elig_bytes_delta) io_offload_elig_bytes + , sum(ss.io_offload_return_bytes_delta) io_offload_return_bytes + , sum(ss.physical_write_bytes_delta) physical_write_bytes + , sum(ss.physical_read_bytes_delta) physical_read_bytes + , sum(ss.optimized_physical_reads_delta) optimized_physical_reads + , sum(ss.cell_uncompressed_bytes_delta) cell_uncompressed_bytes + FROM v$database d + JOIN dba_hist_snapshot s ON s.dbid = d.dbid + JOIN dba_hist_sqlstat ss ON ss.dbid = s.dbid AND ss.instance_number = s.instance_number AND ss.snap_id = s.snap_id +WHERE 1=1 + AND s.end_interval_time > systimestamp - 1 +GROUP BY ss.parsing_schema_name +-- , TRUNC(s.end_interval_time,'HH24') +ORDER BY +-- physical_read_bytes desc nulls last +-- physical_write_bytes desc nulls last +-- direct_writes desc nulls last +-- disk_reads desc nulls last +-- buffer_gets desc nulls last +-- optimized_physical_reads desc nulls last +-- cell_uncompressed_bytes desc nulls last +-- io_interconnect_bytes desc nulls last + executions desc nulls last +-- parse_calls desc nulls last +-- elapsed_time desc nulls last +-- TRUNC(s.end_interval_time,'HH24') +; + + +####################################### +# LDAP/DNS commands +######################################## + +# List LDAP Servers +host -t SRV _ldap._tcp + +ldapsearch -x -h ldapserver -s sub -b "DC=example,DC=com" cn='*namesearch_with_wildcard*' cn + + +-x - simple authentication +-h - ldaphost +-b - searchbase +-s - search subtree + + +####################################### +# Find missing entry in known_hosts +######################################## +for i in $(seq -f "%03g" 236 500) +do + ssh-keyscan server$i +done \ +| sort -u - ~/.ssh/known_hosts | diff ~/.ssh/known_hosts - + + + +################################# +# Add ssh keys between nodes +################################# + +expect -c ' +spawn dcli -l root -g all_group -k +while {1} { + expect "(yes/no)?" { send "yes\n"} + expect "password:" { send "welcome1\n"} +} +' + +# print leading zero in 2 digit numbers in bash +for i in $(seq -f "%03g" 236 400) +do + ssh-keyscan dtraflocorh$i +done + + +for i in $(seq -f "%03g" 236 400) +do + scp -pr .ssh dtraflocorh$i: +done + + + +for i in $(seq -f "%03g" 236 400) +do +expect -c ' +spawn scp -pr .ssh dtraflocorh${i}: +while {1} { + expect "(yes/no)?" { send "yes\n"} + expect "password:" { send "welcome1\n"} +} +' +done + + + +#!/usr/bin/expect + +set $argv[0] [lindex $argv 0] +set timeout 3 + +expect -c ' +spawn scp -pr .ssh dtraflocorh${i}: +while {1} { + expect "(yes/no)?" { send "yes\n"} + expect "password:" { send "welcome1\n"} +} +' + +for i in $(seq -f "%03g" 236 400) +do +expect -f /tmp/a.ex +done + + +for i in $(seq -f "%03g" 236 400) +do +expect -c ' +set HOST [lindex $argv 0] +spawn echo $HOST: +while {1} { + expect "(yes/no)?" { send "yes\n"} + expect "password:" { send "Bootit1234\n"} +} +' +done + + + +for i in $(seq -f "%03g" 236 400) +do +/tmp/a.ex dtraflocorh${i} +done + +################################# +# Switch all logfile in RAC +################################# + +alter system switch all logfile ; + +################################# +# Tnsnames.ora file read +################################# + + +egrep -i '^[A-Z]|HOST|service' titan_se.tns |while read line +do + if [ `echo $line |egrep -i '^[A-Z]' |wc -l` -gt 0 ]; then TNSALIAS=$(echo $line|cut -d= -f1); fi; + if [ `echo $line |egrep -i 'HOST' |wc -l` -gt 0 ]; then HOST=$(echo $line|tr -d ' '| awk -F"HOST=" '{print $2 }'|cut -d')' -f1); fi; + if [ `echo $line |egrep -i 'SERVICE' |wc -l` -gt 0 ]; + then + SERVICE=$(echo $line|tr -d ' '| awk -F"SERVICE_NAME=" '{print $2 }'|cut -d')' -f1); + echo $TNSALIAS : $HOST : $SERVICE + fi; +done + + +------------------------------- +-- Top SQL by CPU +------------------------------- +select --TRUNC(s.END_INTERVAL_TIME), + ss.dbid, ss.sql_id, SUM(ss.executions_delta) "Execs", ROUND((SUM(ss.cpu_time_delta)/1000000 )/60) "CPU Time (minutes)" + , (select sql_text from dba_hist_sqltext sql where sql.dbid = ss.dbid and sql.sql_id = ss.sql_id) sql_text +from dba_hist_sqlstat ss + JOIN dba_hist_snapshot s on ss.dbid = s.dbid AND ss.INSTANCE_NUMBER = s.INSTANCE_NUMBER AND ss.SNAP_ID = s.snap_id +where 1=1 +--and ss.sql_id = '8xcfc1knuja0s' +group by --TRUNC(s.END_INTERVAL_TIME), +ss.dbid, ss.sql_id +order by ROUND((SUM(ss.cpu_time_delta)/1000000 )/60) desc +; + + + +################################# +# Extract data in csv format +################################# +set pagesize 0 +set feedback off +set colsep "," +set trimout on +set trimspool on +set linesize 32767 +set echo off +spool outputfile.csv +<<<<<>>>>> +set term on +set feedback on +set colsep " " +set pagesize 100 +set echo on + + + +################################# +# Java Sleep in milliseconds +################################# +CREATE OR REPLACE PROCEDURE sleep(x_millis IN NUMBER) AS LANGUAGE JAVA +NAME 'java.lang.Thread.sleep(int)'; +/ + + + +########################### +# queue row count +########################### +set lines 10000 +set pages 10000 +set feedback off +spool vg.sql +select 'select * from ( ' from dual +union all +SELECT 'SELECT ''' || owner || '.' || name || ''' as queue ' + || chr(13)|| ', ' || '(select ROUND(sum(bytes)/power(1024,2)) from dba_segments s where s.owner = ''' || owner || ''' and s.segment_name = ''' || q.queue_table || ''') as "Size(MB)"' + || chr(13)|| ', ' || '(select count(1) from ' || owner || '.' || queue_table || ') as row_count' + || chr(13)|| ', ' || retention || ' retention from dual union all' +FROM dba_queues q where q.owner like 'TRAF_%' and q.queue_type ='NORMAL_QUEUE' +union all +select ' select ''abc'' queue,0 "Size(MB)" , 1 rowcount,1 retention from dual' from dual +union all +select ') order by "Size(MB)" desc ; ' from dual +; +spool off +@html @./vg.sql + + +################################# +# DST Timezone +################################# + +set lines 100 +select version from v$timezone_file; +column property_name format a30 +column value format a30 +select property_name, substr(property_value, 1, 30) value from database_properties where property_name like 'DST_%' order by property_name; +select * from dba_tstz_tables where upgrade_in_progress = 'YES'; + + +################################# +# IO Top (iotop) +################################# +watch -n 2 'grep read_bytes /proc/*/io 2>/dev/null |sort -k2nr |head -15 ; echo ""; grep write_bytes /proc/*/io 2>/dev/null |sort -k2nr |head -15 ;' + +watch -n 2 'grep read_bytes /proc/*/io 2>/dev/null |sort -k2nr |head -20' +watch -n 2 'grep write_bytes /proc/*/io 2>/dev/null |sort -k2nr |head -20' + +watch -n 2 'for stat in read_bytes write_bytes +do + for i in `egrep ^$stat /proc/*/io 2>/dev/null |sort -k2nr |head -10 |cut -d/ -f3`; + do + echo PID: $i - $stat: `egrep ^$stat /proc/$i/io` , cmd - `cat /proc/$i/cmdline`; + done + echo "" +done +' + + +---------------------------------------- +-- DBA Registry +---------------------------------------- +set lines 100 +column comp_id format a20 +column comp_name format a50 +column status format a20 +select comp_id, comp_name, status from dba_registry order by 1; + +---------------------------------------- +-- Database Options +---------------------------------------- +set lines 100 +column PARAMETER format a50 +column value format a20 +select PARAMETER, value from v$option order by 1; + + +################################# +# SNMP Query +################################# +snmpwalk -Os -c "public" -v 2c + +snmpdelta -Cs -CT -c "public" -v 2c orabackprd01 ipInReceives.0 + + +############################### +# RAC Service role check +############################### +export ORACLE_SID=12102 +export ORAENV_ASK=NO +. /usr/local/bin/oraenv +for db in `srvctl config database` +do + export ORACLE_SID=$db + . /usr/local/bin/oraenv 2>/dev/null 1>&2 + echo "######################### $db #####################" + for service in `srvctl config service -d $db|grep 'Service name' |cut -d: -f2|awk '{print $1}' |sort` + do + echo $service - `srvctl config service -d $db -s $service |grep 'Service role' |cut -d: -f2|awk '{print $1}'` + done +done diff --git a/vg/services.sql b/vg/services.sql new file mode 100644 index 0000000..74f039d --- /dev/null +++ b/vg/services.sql @@ -0,0 +1,162 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Service configuration in the database +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Jun-12 Vishal Gupta Created +* +*/ + + +set term on + + +define _IF_INST1_EXISTS="--" +define _IF_INST2_EXISTS="--" +define _IF_INST3_EXISTS="--" +define _IF_INST4_EXISTS="--" +define _IF_INST5_EXISTS="--" +define _IF_INST6_EXISTS="--" +define _IF_INST7_EXISTS="--" +define _IF_INST8_EXISTS="--" +define _IF_INST9_EXISTS="--" +define _IF_INST10_EXISTS="--" +define _IF_INST11_EXISTS="--" +define _IF_INST12_EXISTS="--" +define _IF_INST13_EXISTS="--" +define _IF_INST14_EXISTS="--" +define _IF_INST15_EXISTS="--" +define _IF_INST16_EXISTS="--" + +col INST1_EXISTS new_value _IF_INST1_EXISTS noprint +col INST2_EXISTS new_value _IF_INST2_EXISTS noprint +col INST3_EXISTS new_value _IF_INST3_EXISTS noprint +col INST4_EXISTS new_value _IF_INST4_EXISTS noprint +col INST5_EXISTS new_value _IF_INST5_EXISTS noprint +col INST6_EXISTS new_value _IF_INST6_EXISTS noprint +col INST7_EXISTS new_value _IF_INST7_EXISTS noprint +col INST8_EXISTS new_value _IF_INST8_EXISTS noprint +col INST9_EXISTS new_value _IF_INST9_EXISTS noprint +col INST10_EXISTS new_value _IF_INST10_EXISTS noprint +col INST11_EXISTS new_value _IF_INST11_EXISTS noprint +col INST12_EXISTS new_value _IF_INST12_EXISTS noprint +col INST13_EXISTS new_value _IF_INST13_EXISTS noprint +col INST14_EXISTS new_value _IF_INST14_EXISTS noprint +col INST15_EXISTS new_value _IF_INST15_EXISTS noprint +col INST16_EXISTS new_value _IF_INST16_EXISTS noprint + +set term off +SELECT MIN(DECODE(inst_id,1,' ', '--')) INST1_EXISTS + , MIN(DECODE(inst_id,2,' ', '--')) INST2_EXISTS + , MIN(DECODE(inst_id,3,' ', '--')) INST3_EXISTS + , MIN(DECODE(inst_id,4,' ', '--')) INST4_EXISTS + , MIN(DECODE(inst_id,5,' ', '--')) INST5_EXISTS + , MIN(DECODE(inst_id,6,' ', '--')) INST6_EXISTS + , MIN(DECODE(inst_id,7,' ', '--')) INST7_EXISTS + , MIN(DECODE(inst_id,8,' ', '--')) INST8_EXISTS + , MIN(DECODE(inst_id,9,' ', '--')) INST9_EXISTS + , MIN(DECODE(inst_id,10,' ', '--')) INST10_EXISTS + , MIN(DECODE(inst_id,11,' ', '--')) INST11_EXISTS + , MIN(DECODE(inst_id,12,' ', '--')) INST12_EXISTS + , MIN(DECODE(inst_id,13,' ', '--')) INST13_EXISTS + , MIN(DECODE(inst_id,14,' ', '--')) INST14_EXISTS + , MIN(DECODE(inst_id,15,' ', '--')) INST15_EXISTS + , MIN(DECODE(inst_id,16,' ', '--')) INST16_EXISTS + FROM gv$instance + GROUP BY version +; +set term on + +PROMPT ********************** +PROMPT * S E R V I C E S * +PROMPT ********************** + + +COLUMN name HEADING "ServiceName" FORMAT a30 +COLUMN network_name HEADING "NetworkName" FORMAT a30 +COLUMN enabled HEADING "Enabled" FORMAT a7 +COLUMN failover_method HEADING "Failover|Method" FORMAT a10 +COLUMN failover_type HEADING "Failover|Type" FORMAT a10 +COLUMN failover_retries HEADING "Failover|Retries" FORMAT 999 +COLUMN failover_delay HEADING "Failover|Delay" FORMAT 999 +COLUMN min_cardinality HEADING "Min|Card" FORMAT 999 +COLUMN max_cardinality HEADING "Max|Card" FORMAT 999 +COLUMN goal HEADING "Goal" FORMAT a15 +COLUMN clb_goal HEADING "CLB|Goal" FORMAT a5 +COLUMN creation_date HEADING "Creation|Date" FORMAT a18 + +COLUMN Inst_1 HEADING "1" FORMAT a2 +COLUMN Inst_2 HEADING "2" FORMAT a2 +COLUMN Inst_3 HEADING "3" FORMAT a2 +COLUMN Inst_4 HEADING "4" FORMAT a2 +COLUMN Inst_5 HEADING "5" FORMAT a2 +COLUMN Inst_6 HEADING "6" FORMAT a2 +COLUMN Inst_7 HEADING "7" FORMAT a2 +COLUMN Inst_8 HEADING "8" FORMAT a2 +COLUMN Inst_9 HEADING "9" FORMAT a2 +COLUMN Inst_10 HEADING "10" FORMAT a2 +COLUMN Inst_11 HEADING "11" FORMAT a2 +COLUMN Inst_12 HEADING "12" FORMAT a2 +COLUMN Inst_13 HEADING "13" FORMAT a2 +COLUMN Inst_14 HEADING "14" FORMAT a2 +COLUMN Inst_15 HEADING "15" FORMAT a2 +COLUMN Inst_16 HEADING "16" FORMAT a2 + +SELECT s.name + --, s.network_name +&&_IF_INST1_EXISTS , MAX(DECODE(a.inst_id, 1, 'X')) Inst_1 +&&_IF_INST2_EXISTS , MAX(DECODE(a.inst_id, 2, 'X')) Inst_2 +&&_IF_INST3_EXISTS , MAX(DECODE(a.inst_id, 3, 'X')) Inst_3 +&&_IF_INST4_EXISTS , MAX(DECODE(a.inst_id, 4, 'X')) Inst_4 +&&_IF_INST5_EXISTS , MAX(DECODE(a.inst_id, 5, 'X')) Inst_5 +&&_IF_INST6_EXISTS , MAX(DECODE(a.inst_id, 6, 'X')) Inst_6 +&&_IF_INST7_EXISTS , MAX(DECODE(a.inst_id, 7, 'X')) Inst_7 +&&_IF_INST8_EXISTS , MAX(DECODE(a.inst_id, 8, 'X')) Inst_8 +&&_IF_INST9_EXISTS , MAX(DECODE(a.inst_id, 9, 'X')) Inst_9 +&&_IF_INST10_EXISTS , MAX(DECODE(a.inst_id, 10, 'X')) Inst_10 +&&_IF_INST11_EXISTS , MAX(DECODE(a.inst_id, 11, 'X')) Inst_11 +&&_IF_INST12_EXISTS , MAX(DECODE(a.inst_id, 12, 'X')) Inst_12 +&&_IF_INST13_EXISTS , MAX(DECODE(a.inst_id, 13, 'X')) Inst_13 +&&_IF_INST14_EXISTS , MAX(DECODE(a.inst_id, 14, 'X')) Inst_14 +&&_IF_INST15_EXISTS , MAX(DECODE(a.inst_id, 15, 'X')) Inst_15 +&&_IF_INST16_EXISTS , MAX(DECODE(a.inst_id, 16, 'X')) Inst_16 + , s.enabled --(This column is reserved by Oracle for internal use, checked in 11.2.0.2) + , s.failover_method + , s.failover_type + , s.failover_retries + , s.failover_delay + , s.min_cardinality + , s.max_cardinality + , s.goal + , s.clb_goal + , s.aq_ha_notifications + --, s.edition + , TO_CHAR(s.creation_date,'DD-MON-YY HH24:MI:SS') creation_date + FROM dba_services s + LEFT OUTER JOIN gv$active_services a ON a.name = s.name +GROUP BY s.name + , s.network_name + , s.enabled + , s.failover_method + , s.failover_type + , s.failover_retries + , s.failover_delay + , s.min_cardinality + , s.max_cardinality + , s.goal + , s.clb_goal + , s.aq_ha_notifications + --, s.edition + , TO_CHAR(s.creation_date,'DD-MON-YY HH24:MI:SS') +ORDER BY s.name +/ + + +@@footer diff --git a/vg/services_active.sql b/vg/services_active.sql new file mode 100644 index 0000000..cb683e8 --- /dev/null +++ b/vg/services_active.sql @@ -0,0 +1,142 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Active Service configuration +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Jun-12 Vishal Gupta Created +* +*/ + + + + +set term on + + +define _IF_INST1_EXISTS="--" +define _IF_INST2_EXISTS="--" +define _IF_INST3_EXISTS="--" +define _IF_INST4_EXISTS="--" +define _IF_INST5_EXISTS="--" +define _IF_INST6_EXISTS="--" +define _IF_INST7_EXISTS="--" +define _IF_INST8_EXISTS="--" +define _IF_INST9_EXISTS="--" +define _IF_INST10_EXISTS="--" +define _IF_INST11_EXISTS="--" +define _IF_INST12_EXISTS="--" +define _IF_INST13_EXISTS="--" +define _IF_INST14_EXISTS="--" +define _IF_INST15_EXISTS="--" +define _IF_INST16_EXISTS="--" + +col INST1_EXISTS new_value _IF_INST1_EXISTS noprint +col INST2_EXISTS new_value _IF_INST2_EXISTS noprint +col INST3_EXISTS new_value _IF_INST3_EXISTS noprint +col INST4_EXISTS new_value _IF_INST4_EXISTS noprint +col INST5_EXISTS new_value _IF_INST5_EXISTS noprint +col INST6_EXISTS new_value _IF_INST6_EXISTS noprint +col INST7_EXISTS new_value _IF_INST7_EXISTS noprint +col INST8_EXISTS new_value _IF_INST8_EXISTS noprint +col INST9_EXISTS new_value _IF_INST9_EXISTS noprint +col INST10_EXISTS new_value _IF_INST10_EXISTS noprint +col INST11_EXISTS new_value _IF_INST11_EXISTS noprint +col INST12_EXISTS new_value _IF_INST12_EXISTS noprint +col INST13_EXISTS new_value _IF_INST13_EXISTS noprint +col INST14_EXISTS new_value _IF_INST14_EXISTS noprint +col INST15_EXISTS new_value _IF_INST15_EXISTS noprint +col INST16_EXISTS new_value _IF_INST16_EXISTS noprint + +set term off +SELECT MIN(DECODE(inst_id,1,' ', '--')) INST1_EXISTS + , MIN(DECODE(inst_id,2,' ', '--')) INST2_EXISTS + , MIN(DECODE(inst_id,3,' ', '--')) INST3_EXISTS + , MIN(DECODE(inst_id,4,' ', '--')) INST4_EXISTS + , MIN(DECODE(inst_id,5,' ', '--')) INST5_EXISTS + , MIN(DECODE(inst_id,6,' ', '--')) INST6_EXISTS + , MIN(DECODE(inst_id,7,' ', '--')) INST7_EXISTS + , MIN(DECODE(inst_id,8,' ', '--')) INST8_EXISTS + , MIN(DECODE(inst_id,9,' ', '--')) INST9_EXISTS + , MIN(DECODE(inst_id,10,' ', '--')) INST10_EXISTS + , MIN(DECODE(inst_id,11,' ', '--')) INST11_EXISTS + , MIN(DECODE(inst_id,12,' ', '--')) INST12_EXISTS + , MIN(DECODE(inst_id,13,' ', '--')) INST13_EXISTS + , MIN(DECODE(inst_id,14,' ', '--')) INST14_EXISTS + , MIN(DECODE(inst_id,15,' ', '--')) INST15_EXISTS + , MIN(DECODE(inst_id,16,' ', '--')) INST16_EXISTS + FROM gv$instance + GROUP BY version +; +set term on + +PROMPT +PROMPT ************************************* +PROMPT * A C T I V E S E R V I C E S * +PROMPT ************************************* + + +COLUMN name HEADING "ServiceName" FORMAT a30 +COLUMN network_name HEADING "NetworkName" FORMAT a30 +COLUMN goal HEADING "Goal" FORMAT a12 +COLUMN clb_goal HEADING "Connection|Load|Balancing|Goal" FORMAT a10 +COLUMN dtp HEADING "DTP" FORMAT a3 +COLUMN blocked HEADING "Blocked" FORMAT a7 +COLUMN aq_ha_notification HEADING "AQ|HA|Notif" FORMAT a5 +COLUMN creation_date HEADING "Creation|Date" FORMAT a18 + +COLUMN Inst_1 HEADING "1" FORMAT a2 +COLUMN Inst_2 HEADING "2" FORMAT a2 +COLUMN Inst_3 HEADING "3" FORMAT a2 +COLUMN Inst_4 HEADING "4" FORMAT a2 +COLUMN Inst_5 HEADING "5" FORMAT a2 +COLUMN Inst_6 HEADING "6" FORMAT a2 +COLUMN Inst_7 HEADING "7" FORMAT a2 +COLUMN Inst_8 HEADING "8" FORMAT a2 +COLUMN Inst_9 HEADING "9" FORMAT a2 +COLUMN Inst_10 HEADING "10" FORMAT a2 +COLUMN Inst_11 HEADING "11" FORMAT a2 +COLUMN Inst_12 HEADING "12" FORMAT a2 +COLUMN Inst_13 HEADING "13" FORMAT a2 +COLUMN Inst_14 HEADING "14" FORMAT a2 +COLUMN Inst_15 HEADING "15" FORMAT a2 +COLUMN Inst_16 HEADING "16" FORMAT a2 + + + +SELECT s.name +&&_IF_INST1_EXISTS , MAX(DECODE(s.inst_id, 1, 'X')) Inst_1 +&&_IF_INST2_EXISTS , MAX(DECODE(s.inst_id, 2, 'X')) Inst_2 +&&_IF_INST3_EXISTS , MAX(DECODE(s.inst_id, 3, 'X')) Inst_3 +&&_IF_INST4_EXISTS , MAX(DECODE(s.inst_id, 4, 'X')) Inst_4 +&&_IF_INST5_EXISTS , MAX(DECODE(s.inst_id, 5, 'X')) Inst_5 +&&_IF_INST6_EXISTS , MAX(DECODE(s.inst_id, 6, 'X')) Inst_6 +&&_IF_INST7_EXISTS , MAX(DECODE(s.inst_id, 7, 'X')) Inst_7 +&&_IF_INST8_EXISTS , MAX(DECODE(s.inst_id, 8, 'X')) Inst_8 +&&_IF_INST9_EXISTS , MAX(DECODE(s.inst_id, 9, 'X')) Inst_9 +&&_IF_INST10_EXISTS , MAX(DECODE(s.inst_id, 10, 'X')) Inst_10 +&&_IF_INST11_EXISTS , MAX(DECODE(s.inst_id, 11, 'X')) Inst_11 +&&_IF_INST12_EXISTS , MAX(DECODE(s.inst_id, 12, 'X')) Inst_12 +&&_IF_INST13_EXISTS , MAX(DECODE(s.inst_id, 13, 'X')) Inst_13 +&&_IF_INST14_EXISTS , MAX(DECODE(s.inst_id, 14, 'X')) Inst_14 +&&_IF_INST15_EXISTS , MAX(DECODE(s.inst_id, 15, 'X')) Inst_15 +&&_IF_INST16_EXISTS , MAX(DECODE(s.inst_id, 16, 'X')) Inst_16 + , MAX(s.clb_goal) clb_goal + , MAX(s.goal) goal + , MAX(s.dtp) dtp + , MAX(s.blocked) blocked + , MAX(s.aq_ha_notification) aq_ha_notification + , TO_CHAR(MAX(s.creation_date),'DD-MON-YY HH24:MI:SS') creation_date + FROM gv$active_services s +GROUP BY s.name +ORDER BY s.name +; + + +@@footer diff --git a/vg/services_distribution.sql b/vg/services_distribution.sql new file mode 100644 index 0000000..5ead093 --- /dev/null +++ b/vg/services_distribution.sql @@ -0,0 +1,132 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Service Distribution among RAC instance +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Oct-12 Vishal Gupta Removed gv$services from query, as its not needed +* 20-Jun-12 Vishal Gupta Created +* +*/ + + +set term on + + +define _IF_INST1_EXISTS="--" +define _IF_INST2_EXISTS="--" +define _IF_INST3_EXISTS="--" +define _IF_INST4_EXISTS="--" +define _IF_INST5_EXISTS="--" +define _IF_INST6_EXISTS="--" +define _IF_INST7_EXISTS="--" +define _IF_INST8_EXISTS="--" +define _IF_INST9_EXISTS="--" +define _IF_INST10_EXISTS="--" +define _IF_INST11_EXISTS="--" +define _IF_INST12_EXISTS="--" +define _IF_INST13_EXISTS="--" +define _IF_INST14_EXISTS="--" +define _IF_INST15_EXISTS="--" +define _IF_INST16_EXISTS="--" + +col INST1_EXISTS new_value _IF_INST1_EXISTS noprint +col INST2_EXISTS new_value _IF_INST2_EXISTS noprint +col INST3_EXISTS new_value _IF_INST3_EXISTS noprint +col INST4_EXISTS new_value _IF_INST4_EXISTS noprint +col INST5_EXISTS new_value _IF_INST5_EXISTS noprint +col INST6_EXISTS new_value _IF_INST6_EXISTS noprint +col INST7_EXISTS new_value _IF_INST7_EXISTS noprint +col INST8_EXISTS new_value _IF_INST8_EXISTS noprint +col INST9_EXISTS new_value _IF_INST9_EXISTS noprint +col INST10_EXISTS new_value _IF_INST10_EXISTS noprint +col INST11_EXISTS new_value _IF_INST11_EXISTS noprint +col INST12_EXISTS new_value _IF_INST12_EXISTS noprint +col INST13_EXISTS new_value _IF_INST13_EXISTS noprint +col INST14_EXISTS new_value _IF_INST14_EXISTS noprint +col INST15_EXISTS new_value _IF_INST15_EXISTS noprint +col INST16_EXISTS new_value _IF_INST16_EXISTS noprint + +set term off +SELECT MIN(DECODE(inst_id,1,' ', '--')) INST1_EXISTS + , MIN(DECODE(inst_id,2,' ', '--')) INST2_EXISTS + , MIN(DECODE(inst_id,3,' ', '--')) INST3_EXISTS + , MIN(DECODE(inst_id,4,' ', '--')) INST4_EXISTS + , MIN(DECODE(inst_id,5,' ', '--')) INST5_EXISTS + , MIN(DECODE(inst_id,6,' ', '--')) INST6_EXISTS + , MIN(DECODE(inst_id,7,' ', '--')) INST7_EXISTS + , MIN(DECODE(inst_id,8,' ', '--')) INST8_EXISTS + , MIN(DECODE(inst_id,9,' ', '--')) INST9_EXISTS + , MIN(DECODE(inst_id,10,' ', '--')) INST10_EXISTS + , MIN(DECODE(inst_id,11,' ', '--')) INST11_EXISTS + , MIN(DECODE(inst_id,12,' ', '--')) INST12_EXISTS + , MIN(DECODE(inst_id,13,' ', '--')) INST13_EXISTS + , MIN(DECODE(inst_id,14,' ', '--')) INST14_EXISTS + , MIN(DECODE(inst_id,15,' ', '--')) INST15_EXISTS + , MIN(DECODE(inst_id,16,' ', '--')) INST16_EXISTS + FROM gv$instance + GROUP BY version +; +set term on + + +PROMPT +PROMPT ************************************************* +PROMPT * S E R V I C E S D I S T R I B U T I O N * +PROMPT ************************************************* + +COLUMN name HEADING "Service Name" FORMAT a30 +COLUMN Inst_1 HEADING " Inst1 " FORMAT a7 +COLUMN Inst_2 HEADING " Inst2 " FORMAT a7 +COLUMN Inst_3 HEADING " Inst3 " FORMAT a7 +COLUMN Inst_4 HEADING " Inst4 " FORMAT a7 +COLUMN Inst_5 HEADING " Inst5 " FORMAT a7 +COLUMN Inst_6 HEADING " Inst6 " FORMAT a7 +COLUMN Inst_7 HEADING " Inst7 " FORMAT a7 +COLUMN Inst_8 HEADING " Inst8 " FORMAT a7 +COLUMN Inst_9 HEADING " Inst9 " FORMAT a7 +COLUMN Inst_10 HEADING " Inst10 " FORMAT a7 +COLUMN Inst_11 HEADING " Inst11 " FORMAT a7 +COLUMN Inst_12 HEADING " Inst12 " FORMAT a7 +COLUMN Inst_13 HEADING " Inst13 " FORMAT a7 +COLUMN Inst_14 HEADING " Inst14 " FORMAT a7 +COLUMN Inst_15 HEADING " Inst15 " FORMAT a7 +COLUMN Inst_16 HEADING " Inst16 " FORMAT a7 +COLUMN end_column HEADING "" FORMAT a1 + +set colsep "|" +set recsepchar "|" + +SELECT a.name +&&_IF_INST1_EXISTS , MAX(DECODE(a.inst_id, 1, ' X ')) Inst_1 +&&_IF_INST2_EXISTS , MAX(DECODE(a.inst_id, 2, ' X ')) Inst_2 +&&_IF_INST3_EXISTS , MAX(DECODE(a.inst_id, 3, ' X ')) Inst_3 +&&_IF_INST4_EXISTS , MAX(DECODE(a.inst_id, 4, ' X ')) Inst_4 +&&_IF_INST5_EXISTS , MAX(DECODE(a.inst_id, 5, ' X ')) Inst_5 +&&_IF_INST6_EXISTS , MAX(DECODE(a.inst_id, 6, ' X ')) Inst_6 +&&_IF_INST7_EXISTS , MAX(DECODE(a.inst_id, 7, ' X ')) Inst_7 +&&_IF_INST8_EXISTS , MAX(DECODE(a.inst_id, 8, ' X ')) Inst_8 +&&_IF_INST9_EXISTS , MAX(DECODE(a.inst_id, 9, ' X ')) Inst_9 +&&_IF_INST10_EXISTS , MAX(DECODE(a.inst_id, 10, ' X ')) Inst_10 +&&_IF_INST11_EXISTS , MAX(DECODE(a.inst_id, 11, ' X ')) Inst_11 +&&_IF_INST12_EXISTS , MAX(DECODE(a.inst_id, 11, ' X ')) Inst_12 +&&_IF_INST13_EXISTS , MAX(DECODE(a.inst_id, 11, ' X ')) Inst_13 +&&_IF_INST14_EXISTS , MAX(DECODE(a.inst_id, 11, ' X ')) Inst_14 +&&_IF_INST15_EXISTS , MAX(DECODE(a.inst_id, 11, ' X ')) Inst_15 +&&_IF_INST16_EXISTS , MAX(DECODE(a.inst_id, 11, ' X ')) Inst_16 + , '' end_column + FROM gv$active_services a +GROUP BY a.name +ORDER BY a.name +/ + +set colsep " " +set recsepchar " " + +@@footer diff --git a/vg/sess_mon.sql b/vg/sess_mon.sql new file mode 100644 index 0000000..73e2c39 --- /dev/null +++ b/vg/sess_mon.sql @@ -0,0 +1,11 @@ +SET LINE 300 +SET FEEDBACK OFF +SET VERIFY OFF +COL username FOR a13 +COL osuser FOR a10 +COL script FOR a20 +COL sql_text FOR a80 +COL sql_id FOR a13 +SELECT s.username, SUBSTR(s.osuser,1,10) "OSUSER", s.sql_id "SQL_ID", SUBSTR(t.sql_text,1,80) "SQL_TEXT", '@sid_details '||s.sid||' '||s.inst_id "SCRIPT" FROM gv$session s, (SELECT DISTINCT(sql_id), sql_text FROM gv$sqlarea) t WHERE UPPER(s.username) IN (SELECT UPPER(login_id) FROM tlc_bi_own.ldap_users WHERE UPPER(title) LIKE UPPER('%&&1%')) AND 1=1 AND s.sql_id=t.sql_id (+) ORDER BY s.username; + + diff --git a/vg/session.sql b/vg/session.sql new file mode 100644 index 0000000..27220b0 --- /dev/null +++ b/vg/session.sql @@ -0,0 +1,115 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display database sessions +* Parameters : 1 - Instance number (Use % for all instances) +* 2 - Where clause to filter the data. +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +* 21-May-12 Vishal Gupta Formatted out and added input aparameter. +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE WHERE_CLAUSE + + +DEFINE INST_ID="&&1" +DEFINE WHERE_CLAUSE="&2" + + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +FROM DUAL +; +set term on + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +-- To hide sql, set show_sql="--" +--DEFINE SHOW_SQL="--" +DEFINE SHOW_SQL="" +DEFINE SHOW_BACKGROUND="--" + + +PROMPT ************************************************************** +PROMPT * D A T A B A S E S E S S I O N S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Instance# = "&&INST_ID" +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************** + +COLUMN sid HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN state HEADING "State" FORMAT a12 TRUNCATED +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN service_name HEADING "ServiceName" FORMAT a20 TRUNCATED +COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED +COLUMN process HEADING "Process" FORMAT a11 +COLUMN program HEADING "Program" FORMAT a18 TRUNCATED +COLUMN sql_exec_duration HEADING "SQL|Exec|Duration" FORMAT a11 +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +COLUMN last_call_et HEADING "LastCall" FORMAT a12 JUSTIFY RIGHT +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +SELECT s.sid + , s.inst_id + , p.spid + , s.status + --, s.state + --, s.last_call_et + , LPAD(DECODE(FLOOR(last_call_et / 3600),0, '', FLOOR(last_call_et / 3600) || 'h ' ) + || LPAD(FLOOR(MOD(last_call_et , 3600 ) / 60),2) || 'm ' + || LPAD(MOD(last_call_et, 60 ) ,2) || 's' + , 12) last_call_et + , to_char(s.logon_time,'DD-MON-YY HH24:MI:SS') logon_time + , s.username + , s.osuser + , s.service_name + , s.machine + , s.process + , s.program + , LPAD(REPLACE(REPLACE(LPAD(FLOOR((sysdate-sql_exec_start)*24),2) || 'h ' + || LPAD(FLOOR(MOD((sysdate-sql_exec_start)*24,1)*60),2) || 'm ' + || LPAD(FLOOR(MOD((sysdate-sql_exec_start)*24*60,1)*60),2) || 's' + ,' 0h 0m ',''),' 0h ',''),11) + sql_exec_duration + , s.sql_id + , s.sql_child_number + , w.event + FROM gv$session s + , gv$session_wait w + , gv$process p + WHERE s.sid = w.sid (+) + AND s.inst_id = w.inst_id (+) + AND s.inst_id = p.inst_id (+) + AND s.paddr = p.addr (+) +&&SHOW_BACKGROUND AND s.type <> 'BACKGROUND' + AND s.inst_id like '&&INST_ID' + &&WHERE_CLAUSE +ORDER BY s.last_call_et desc +; + + + +@@footer diff --git a/vg/session_active.sql b/vg/session_active.sql new file mode 100644 index 0000000..8eb396d --- /dev/null +++ b/vg/session_active.sql @@ -0,0 +1,169 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display database sessions in ACTIVE status. +* Parameters : 1 - INST_ID (Use % as wildcard) +* 2 - TOP_ROWCOUNT (Default is 30) +* 3 - WHERE CLAUSE (Default is '') +* 3 - Output Level (Default is 'NORMAL') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-AUG-14 Vishal Gupta Added column to display number of parallel slaves +* 18-Dec-12 Vishal Gupta Added output level as input +* 12-Jun-12 Vishal Gupta Removed state column from output +* 05-Aug-04 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE INST_ID +UNDEFINE TOP_ROWCOUNT +UNDEFINE WHERECLAUSE +UNDEFINE OUTPUT_LEVEL + +DEFINE INST_ID="&&1" +DEFINE TOP_ROWCOUNT="&&2" +DEFINE WHERECLAUSE="&3" +DEFINE OUTPUT_LEVEL="&4" + + +set term off +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _TOP_ROWCOUNT NEW_VALUE TOP_ROWCOUNT NOPRINT +COLUMN _OUTPUT_LEVEL NEW_VALUE OUTPUT_LEVEL NOPRINT +COLUMN _WHERECLAUSE NEW_VALUE WHERECLAUSE NOPRINT + +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&TOP_ROWCOUNT','','30','&&TOP_ROWCOUNT') "_TOP_ROWCOUNT" + , DECODE(q'[&&WHERECLAUSE]','',q'[and s.program not like '%(P%' --exclude parallel slaves]',q'[&&WHERECLAUSE]') "_WHERECLAUSE" + , DECODE('&&OUTPUT_LEVEL','','NORMAL','&&OUTPUT_LEVEL') "_OUTPUT_LEVEL" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +set term off +COLUMN _OUTPUT_BREIF NEW_VALUE OUTPUT_BREIF NOPRINT +COLUMN _OUTPUT_NORMAL NEW_VALUE OUTPUT_NORMAL NOPRINT +COLUMN _OUTPUT_ALL NEW_VALUE OUTPUT_ALL NOPRINT +SELECT DECODE('&&OUTPUT_LEVEL','','ALL','&&OUTPUT_LEVEL') "_OUTPUT_BREIF" + , DECODE('&&OUTPUT_LEVEL','','ALL','&&OUTPUT_LEVEL') "_OUTPUT_NORMAL" + , DECODE('&&OUTPUT_LEVEL','','ALL','&&OUTPUT_LEVEL') "_OUTPUT_ALL" +FROM DUAL; +set term on + +-- To hide sql, set show_sql="--" +DEFINE SHOW_SQL="--" +--DEFINE SHOW_SQL="" + + + +PROMPT ************************************************************************************* +PROMPT * D A T A B A S E S E S S I O N S ( Top &TOP_ROWCOUNT Longest Active Sessions ) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Instance# = "&&INST_ID" +PROMPT * - Top Row Count = "&&TOP_ROWCOUNT" +PROMPT * - Where Clause = "&&WHERECLAUSE" +PROMPT * - Output Level = "&&OUTPUT_LEVEL" +PROMPT ************************************************************************************* + +COLUMN sid HEADING "SID" FORMAT 9999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN state HEADING "State" FORMAT a12 TRUNCATED +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN MACHINE HEADING "Machine" FORMAT a16 TRUNCATED +COLUMN process HEADING "Process" FORMAT a7 TRUNCATED +COLUMN program HEADING "Program" FORMAT a18 TRUNCATED +COLUMN sql_exec_duration HEADING "SQL|Exec|Duration" FORMAT a11 JUSTIFY RIGHT +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +COLUMN force_matching_signature HEADING "Force|Matching|Signature" FORMAT 99999999999999999999 +COLUMN last_call_et HEADING "LastCall" FORMAT a12 JUSTIFY RIGHT +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 +COLUMN px_slaves HEADING "PX|Slaves" FORMAT 99999 + + +--BREAK ON REPORT +--COMPUTE COUNT LABEL 'Count' OF status ON REPORT + +SELECT a.sid + , a.inst_id + , a.spid + , a.status + , a.logon_time + , a.last_call_et + , a.username + , a.osuser + , a.machine + , a.process + , a.program +&&_IF_ORA_11gR1_OR_HIGHER , a.sql_exec_duration + , (select count(1) from gv$px_session px where px.qcsid = a.sid and px.qcinst_id = a.inst_id and px.qcserial# = a.serial#) px_slaves +&&_IF_ORA_10gR1_OR_HIGHER , a.sql_id +&&_IF_ORA_10gR1_OR_HIGHER , a.sql_child_number +&&SHOW_SQL , a.sql_text + , a.event +FROM +( + SELECT s.sid + , s.inst_id + , s.serial# + , p.spid + , s.status + --, s.state + , to_char(s.logon_time,'DD-MON-YY HH24:MI:SS') logon_time + , LPAD(DECODE(FLOOR(last_call_et / 3600),0, '', FLOOR(last_call_et / 3600) || 'h ' ) + || LPAD(FLOOR(MOD(last_call_et , 3600 ) / 60),2) || 'm ' + || LPAD(MOD(last_call_et, 60 ) ,2) || 's' + , 12) last_call_et + , s.username + , s.osuser + , s.machine + , s.process + , s.program + &&_IF_ORA_11gR1_OR_HIGHER , LPAD(REPLACE(REPLACE(LPAD(FLOOR((sysdate-sql_exec_start)*24),2) || 'h ' + &&_IF_ORA_11gR1_OR_HIGHER || LPAD(FLOOR(MOD((sysdate-sql_exec_start)*24,1)*60),2) || 'm ' + &&_IF_ORA_11gR1_OR_HIGHER || LPAD(FLOOR(MOD((sysdate-sql_exec_start)*24*60,1)*60),2) || 's' + &&_IF_ORA_11gR1_OR_HIGHER ,' 0h 0m ',''),' 0h ',''),11) + &&_IF_ORA_11gR1_OR_HIGHER sql_exec_duration + --&&_IF_ORA_10gR1_OR_HIGHER , sql.force_matching_signature + &&_IF_ORA_10gR1_OR_HIGHER , s.sql_id + &&_IF_ORA_10gR1_OR_HIGHER , s.sql_child_number + &&SHOW_SQL , sql.sql_text + , w.event + FROM gv$session s + , gv$session_wait w + , gv$process p + , gv$sqlarea sql + WHERE s.type <> 'BACKGROUND' + AND s.inst_id = p.inst_id + AND s.paddr = p.addr + AND s.inst_id = w.inst_id (+) + AND s.sid = w.sid (+) + AND s.inst_id = sql.inst_id (+) + AND s.sql_id = sql.sql_id (+) + AND s.status <> 'INACTIVE' + AND s.inst_id LIKE '&INST_ID' + &&WHERECLAUSE + ORDER BY GREATEST(s.last_call_et , NVL(sysdate-sql_exec_start,0) * 24 * 60 * 60 ) DESC NULLS LAST +) a +WHERE rownum < &&TOP_ROWCOUNT +; + +@@footer diff --git a/vg/session_active_tree.sql b/vg/session_active_tree.sql new file mode 100644 index 0000000..ffbe027 --- /dev/null +++ b/vg/session_active_tree.sql @@ -0,0 +1,149 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Hierarchy +* Parameters : 1 - INST_ID (Use % as wildcard) +* 2 - WHERE CLAUSE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Apr-12 Vishal Gupta First Draft +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE INST_ID="&&1" +DEFINE WHERE_CLAUSE="&2" + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _TOP_ROWCOUNT NEW_VALUE TOP_ROWCOUNT NOPRINT +COLUMN _WHERE_CLAUSE NEW_VALUE WHERE_CLAUSE NOPRINT + +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +-- , DECODE('&&WHERE_CLAUSE','','','&&WHERE_CLAUSE') "_WHERE_CLAUSE" +FROM DUAL +; + + + +PROMPT ************************************************************************************* +PROMPT * D A T A B A S E S E S S I O N S ( A C T I V E ) T R E E +PROMPT * +PROMPT * Input Parameters +PROMPT * - Instance# = "&&INST_ID" +PROMPT * - Where Clause = "&&WHERE_CLAUSE" +PROMPT ************************************************************************************* + + +set pages 50 + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SID HEADING "SID(Hierarchy)" FORMAT a11 +COLUMN serial# HEADING "Serial#" FORMAT 99999 +COLUMN QCINST_ID HEADING "Parent|I#" FORMAT 99 +COLUMN QCSID HEADING "Parent|SID" FORMAT 9999 +COLUMN qcserial# HEADING "Parent|Serial#" FORMAT 99999 +COLUMN degree HEADING "Deg" FORMAT 99 +COLUMN req_degree HEADING "Req|Deg" FORMAT 99 +COLUMN state HEADING "State" FORMAT a12 TRUNCATED +COLUMN SPID FORMAT a6 +COLUMN username FORMAT a20 +COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 99,999 +COLUMN logon_time FORMAT a15 +COLUMN service_name FORMAT a21 +COLUMN process FORMAT a15 +COLUMN osuser FORMAT a10 TRUNCATE +COLUMN machine FORMAT a30 +COLUMN program FORMAT a15 TRUNCATE +COLUMN sql_text FORMAT a60 TRUNCATE +COLUMN event FORMAT a30 TRUNCATE + +--BREAK ON QCSID ON QCSID SKIP 1 +/* +WITH parallel_sessions AS +( + SELECT pxs.inst_id + , pxs.sid + , pxs.serial# + , pxs.qcinst_id + , pxs.qcsid + , pxs.qcserial# + , degree + , req_degree + FROM gv$px_session pxs +ORDER BY pxs.qcinst_id NULLS FIRST + , pxs.qcsid + , pxs.qcserial# + , pxs.inst_id + , pxs.sid + , pxs.serial# +) +*/ +SELECT /*+ RULE */ + --, level + DECODE(level,1, '' , ' ') + || LPAD('> ',(level-1)*5,'|--') + || s.sid sid + , s.inst_id +-- , pxs.serial# +-- , pxs.qcinst_id +-- , pxs.qcsid +-- , pxs.qcserial# + , p.spid +-- , pxs.req_degree + , pxs.degree +-- , s.status + , s.state + , s.last_call_et + , TO_CHAR(s.LOGON_TIME,'DD-MON-YY HH24:MI') logon_time + , s.sql_id + , s.username + , s.service_name + , s.osuser + , s.program + , sql.sql_text + FROM gv$session s +-- , parallel_sessions pxs + , gv$px_session pxs + , gv$process p + , gv$sqltext sql + , gv$session s2 +WHERE p.inst_id = s.inst_id + AND p.addr = s.paddr + AND s.inst_id = pxs.inst_id (+) + AND s.sid = pxs.sid (+) + AND s.serial# = pxs.serial# (+) + AND s.inst_id = sql.inst_id (+) + AND s.sql_id = sql.sql_id (+) + AND pxs.qcinst_id = s2.inst_id (+) + AND pxs.qcsid = s2.sid (+) + AND sql.PIECE (+) = 0 + AND s.status <> 'INACTIVE' + AND s.type <> 'BACKGROUND' + AND s.inst_id LIKE '&&INST_ID' + &&WHERE_CLAUSE +CONNECT BY PRIOR pxs.inst_id = NVL(pxs.qcinst_id,pxs.inst_id) + AND PRIOR pxs.sid = pxs.qcsid + AND PRIOR pxs.serial# = pxs.qcserial# +START WITH pxs.qcinst_id IS NULL +/* +ORDER BY NVL(s2.last_call_et,s.last_call_et) DESC + -- , NVL(pxs.qcinst_id,pxs.inst_id) + -- , pxs.qcsid + , s.inst_id + , s.sid +*/ +; + +UNDEFINE INST_ID +UNDEFINE WHERE_CLAUSE + +@@footer diff --git a/vg/session_breakdown.sql b/vg/session_breakdown.sql new file mode 100644 index 0000000..70cfbce --- /dev/null +++ b/vg/session_breakdown.sql @@ -0,0 +1,183 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display session breakdown by inst_id, username, osuser, program, machine +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Dec-15 Vishal Gupta Add session count by Active Program +* 04-Apr-12 Vishal Gupta Bug fixes +*/ + +set pages 20000 + +COLUMN separator HEADING "!|!|!" FORMAT a1 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN status_count HEADING "Count By|Status" FORMAT 999,999 +COLUMN inst_id HEADING "Inst#" FORMAT 999 +COLUMN inst_id_count HEADING "Count By|Instance" FORMAT 999,999 +COLUMN status_instance HEADING "Status Inst#" FORMAT a20 +COLUMN status_instance_count HEADING "Count By|Status Instance" FORMAT 999,999 +COLUMN service_name HEADING "ServiceName" FORMAT a25 +COLUMN service_name_count HEADING "Count By|Service|Name" FORMAT 999,999 +COLUMN event HEADING "Event" FORMAT a30 TRUNCATE +COLUMN event_count HEADING "Count By|Event" FORMAT 999,999 + +COLUMN active_service_count HEADING "Count By|Active|Service" FORMAT 999,999 +COLUMN active_user_count HEADING "Count By|Active|DBUser" FORMAT 999,999 +COLUMN active_program_count HEADING "Count By|Active|Program" FORMAT 999,999 +COLUMN active_service_user_count HEADING "Count By|Active|Service|DBUser" FORMAT 999,999 +COLUMN ServiceUser HEADING "ServiceUser" FORMAT a45 + + +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN username_count HEADING "Count By|DBUser|Name" FORMAT 999,999 +COLUMN status_username HEADING "StatusUserName" FORMAT a30 +COLUMN status_username_count HEADING "Count By|Status|DBUser|Name" FORMAT 999,999 +COLUMN osuser HEADING "OSUser" FORMAT a20 TRUNCATE +COLUMN osuser_count HEADING "Count By|OSUser" FORMAT 999,999 +COLUMN program HEADING "Program" FORMAT a40 TRUNCATE +COLUMN program_count HEADING "Count By|Program" FORMAT 999,999 +COLUMN machine HEADING "Client|Machine" FORMAT a40 TRUNCATE +COLUMN machine_count HEADING "Count By|Machine" FORMAT 999,999 + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF inst_id_count FORMAT 99,999,999 ON REPORT +--COMPUTE SUM LABEL 'Total' OF service_name_count FORMAT 99,999,999 ON REPORT +--COMPUTE SUM LABEL 'Total' OF username_count FORMAT 99,999,999 ON REPORT +--COMPUTE SUM LABEL 'Total' OF osuser_count FORMAT 99,999,999 ON REPORT +--COMPUTE SUM LABEL 'Total' OF program_count FORMAT 99,999,999 ON REPORT +--COMPUTE SUM LABEL 'Total' OF machine_count FORMAT 99,999,999 ON REPORT + +PROMPT ############################################################## +PROMPT # S E S S I O N S C O U N T B R E A K D O W N +PROMPT # +PROMPT # - By Instance +PROMPT # - By ServiceName +PROMPT # - By DatabaseUsername +PROMPT # - By OSUsername +PROMPT # - By Program +PROMPT # - By Client machine name +PROMPT # - By Event +PROMPT # +PROMPT # ( Excluding parallel slaves) +PROMPT # +PROMPT ############################################################## + + +WITH sess AS + ( SELECT * FROM gv$session s + WHERE NOT EXISTS (SELECT 1 + FROM gv$px_session px + where px.inst_id = s.inst_id and px.sid = s.sid + /*Take only parallel co-ordinators, parallel slaves have qcinst_id=NULL*/ + AND px.qcinst_id IS NOT NULL + ) + AND TYPE <> 'BACKGROUND' + ) +, byinstance AS ( SELECT rownum r , a.* FROM (select inst_id , count(1) total_count from sess group by inst_id order by inst_id asc ) a ) +, bystatus AS ( SELECT rownum r , a.* FROM (select status , count(1) total_count from sess group by status order by status ) a ) +, bystatusInstance AS ( SELECT rownum r , a.* FROM (select RPAD(status,8) || ' Inst# '|| inst_id status_instance , count(1) total_count from sess group by status, inst_id order by 1,2 desc ) a ) +, byServiceName AS ( SELECT rownum r , a.* FROM (select service_name, count(1) total_count from sess group by service_name order by count(1) desc ) a ) +, byEvent AS ( SELECT rownum r , a.* FROM (select event, count(1) total_count from sess group by event order by count(1) desc ) a ) +SELECT i.total_count inst_id_count , i.inst_id + , '|' separator + , sr.total_count service_name_count , sr.service_name + , '|' separator + , s.total_count status_count , s.status + , '|' separator + , si.total_count status_instance_count , si.status_instance + , '|' separator + , e.total_count event_count , e.event + , '|' separator + FROM byservicename sr + LEFT OUTER JOIN bystatus s on s.r = sr.r + LEFT OUTER JOIN byinstance i on i.r = sr.r + LEFT OUTER JOIN bystatusInstance si on si.r = sr.r + LEFT OUTER JOIN byEvent e ON e.r = sr.r +ORDER BY sr.r +; + +PROMPT +PROMPT ############################################################## +PROMPT # A C T I V E S E S S I O N S B R E A K D O W N +PROMPT # ( Excluding parallel slaves) +PROMPT ############################################################## + +WITH sess AS + ( SELECT * FROM gv$session s + WHERE NOT EXISTS (SELECT 1 + FROM gv$px_session px + where px.inst_id = s.inst_id and px.sid = s.sid + /*Take only parallel co-ordinators, parallel slaves have qcinst_id=NULL*/ + AND px.qcinst_id IS NOT NULL + ) + AND TYPE <> 'BACKGROUND' + ) +, byActiveService AS ( SELECT rownum r , a.* FROM (select service_name , count(1) total_count from sess where status = 'ACTIVE' group by service_name order by count(1) desc ) a ) +, byActiveUser AS ( SELECT rownum r , a.* FROM (select UserName , count(1) total_count from sess where status = 'ACTIVE' group by UserName order by count(1) desc ) a ) +, byActiveProgram AS ( SELECT rownum r , a.* FROM (select Program , count(1) total_count from sess where status = 'ACTIVE' group by Program order by count(1) desc ) a ) +, byActiveServiceUser AS ( SELECT rownum r , a.* FROM (select service_name,UserName , count(1) total_count from sess where status = 'ACTIVE' group by service_name,UserName order by count(1) desc ) a ) +SELECT asv.total_count active_service_count , asv.service_name + , '|' separator + , au.total_count active_user_count , au.username + , '|' separator + , ap.total_count active_program_count , ap.program + , '|' separator + , asu.total_count active_service_user_count , asu.service_name || ' - ' || asu.username ServiceUser + , '|' separator + FROM byActiveServiceUser asu + LEFT OUTER JOIN byActiveUser au on au.r = asu.r + LEFT OUTER JOIN byActiveProgram ap on ap.r = asu.r + LEFT OUTER JOIN byActiveService asv on asv.r = asu.r +ORDER BY asu.r +; + +PROMPT +PROMPT ############################################################## +PROMPT # A L L S E S S I O N S B R E A K D O W N +PROMPT # ( Excluding parallel slaves) +PROMPT ############################################################## + +WITH + sess AS ( SELECT * FROM gv$session s WHERE NOT EXISTS (SELECT 1 FROM gv$px_session px where px.inst_id = s.inst_id and px.sid = s.sid + /*Take only parallel co-ordinators, parallel slaves have qcinst_id=NULL*/ + AND px.qcinst_id IS NOT NULL ) + AND TYPE <> 'BACKGROUND' + ) +, byusername AS ( SELECT rownum r , a.* FROM (select username , count(1) total_count from sess group by username order by 2 desc,1) a ) +, byosuser AS ( SELECT rownum r , a.* FROM (select osuser , count(1) total_count from sess group by osuser order by 2 desc,1) a ) +, byprogram AS ( SELECT rownum r , a.* FROM (select SUBSTR(program,1,60) program , count(1) total_count from sess group by SUBSTR(program,1,60) order by 2 desc,1) a ) +, bymachine AS ( SELECT rownum r , a.* FROM (select machine , count(1) total_count from sess group by machine order by 2 desc,1) a ) +, bystatus_username AS ( SELECT rownum r , a.* FROM (select RPAD(status,8) || ' ' || username status_username, count(1) total_count from sess group by status, username order by 2 desc,1) a ) +SELECT u.total_count username_count , u.username + , '|' separator + , su.total_count status_username_count , su.status_username + , '|' separator + , o.total_count osuser_count , o.osuser + , '|' separator + , p.total_count program_count , p.program + , '|' separator + , p.total_count machine_count , m.machine + , '|' separator + FROM bymachine m + LEFT OUTER JOIN byusername u on u.r = m.r + LEFT OUTER JOIN byprogram p on p.r = m.r + LEFT OUTER JOIN byosuser o on o.r = m.r + LEFT OUTER JOIN bystatus_username su on su.r = m.r +WHERE m.r <= 30 +ORDER BY m.r +; + + + + + + +@@footer diff --git a/vg/sga_status.sql b/vg/sga_status.sql new file mode 100644 index 0000000..dc22b18 --- /dev/null +++ b/vg/sga_status.sql @@ -0,0 +1,21 @@ +SELECT DECODE (state + , 0, 'free' + , 1, 'exclusive' + , 2, 'shared current' + , 3, 'consistent read' + , 4, 'being read from disk' + , 5, 'in media recovery mode' + , 6, 'in instance recovery mode' + ,state) "Block Status" + , Count(1) "Count" +FROM x$bh +GROUP BY DECODE (state + , 0, 'free' + , 1, 'exclusive' + , 2, 'shared current' + , 3, 'consistent read' + , 4, 'being read from disk' + , 5, 'in media recovery mode' + , 6, 'in instance recovery mode' + ,state) +/ diff --git a/vg/sga_summary.sql b/vg/sga_summary.sql new file mode 100644 index 0000000..812b825 --- /dev/null +++ b/vg/sga_summary.sql @@ -0,0 +1,34 @@ +SET ECHO off +REM ------------------------------------------------------------------------ +REM REQUIREMENTS: +REM Needs to be run as SYS +REM ------------------------------------------------------------------------ +REM AUTHOR: +REM Virag Saksena, Oracle Corporation +REM (c)1996 Oracle Corporation +REM ------------------------------------------------------------------------ +REM PURPOSE: +REM Reports statistics about the buffers in the SGA. It will print +REM the information about the types of buffers in the SGA, how many of +REM them are on the dirty queue and how many are not. +REM ------------------------------------------------------------------------ +REM DISCLAIMER: +REM This script is provided for educational purposes only. It is NOT +REM supported by Oracle World Wide Technical Support. +REM The script has been tested and appears to work as intended. +REM You should always run new scripts on a test instance initially. +REM ------------------------------------------------------------------------ +REM Main text of script follows: + +set numf 9,999,999,999 +set lines 100 +col class form A10 +select decode(greatest(class,10),10,decode(class,1,'Data',2 + ,'Sort',4,'Header',to_char(class)),'Rollback') "Class", + sum(decode(bitand(flag,1),1,0,1)) "Not Dirty", + sum(decode(bitand(flag,1),1,1,0)) "Dirty", + sum(dirty_queue) "On Dirty",count(*) "Total" +from x$bh +group by decode(greatest(class,10),10,decode(class,1,'Data',2 + ,'Sort',4,'Header',to_char(class)),'Rollback') +/ \ No newline at end of file diff --git a/vg/sga_top_objects.sql b/vg/sga_top_objects.sql new file mode 100644 index 0000000..e26a155 --- /dev/null +++ b/vg/sga_top_objects.sql @@ -0,0 +1,78 @@ +@@header + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE subobject_name + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE subobject_name="&&3" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT + +set term off + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&object_name'),'','%','&&object_name') "_object_name" + , DECODE(UPPER('&&subobject_name'),'','%','&&subobject_name') "_subobject_name" +FROM DUAL; + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" +FROM DUAL; +set term on + + +PROMPT ***************************************************************** +PROMPT * S G A O B J E C T S L I S T +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - SubObject Name = '&&subobject_name' +PROMPT ***************************************************************** + +set lines 1000 +set numf 999,999,999,999 +set pages 80 + + +COLUMN owner FORMAT a20 +COLUMN object_name FORMAT a70 +COLUMN subobject_name FORMAT a30 + +BREAK ON REPORT +COMPUTE SUM LABEL 'Total' OF "Total (Bytes)" FORMAT 99,999,999,999 ON REPORT + + +SELECT /*+ choose */ o.OWNER || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name,'') object_name + , SUM(DECODE(bitand(flag,1),1,0,a.blksize)) "Not Dirty (Bytes)" + , SUM(DECODE(bitand(flag,1),1,a.blksize,0)) "Dirty (Bytes)" + , SUM(dirty_queue* a.blksize) "On Dirty (Bytes)" + , SUM(a.blksize) "Total (Bytes)" +FROM x$bh x + , DBA_OBJECTS o + , (SELECT VALUE blksize FROM v$system_parameter WHERE NAME = 'db_block_size') a +WHERE x.obj = o.OBJECT_ID + AND o.owner like '&&owner' ESCAPE '\' + AND o.object_name like '&&object_name' ESCAPE '\' + AND NVL(o.subobject_name,'%') like '&&subobject_name' ESCAPE '\' +GROUP BY o.OWNER, o.object_name, o.subobject_name +ORDER BY SUM(a.blksize) asc +/ + +@@footer \ No newline at end of file diff --git a/vg/shared_pool_mem_usage.sql b/vg/shared_pool_mem_usage.sql new file mode 100644 index 0000000..d05bd00 --- /dev/null +++ b/vg/shared_pool_mem_usage.sql @@ -0,0 +1,15 @@ +@@header + +select s.inst_id + , s.force_matching_signature + , ROUND(SUM(s.sharable_mem)/1024/1024) sharable_mem + , ROUND(SUM(s.persistent_mem)/1024/1024) persistent_mem + , ROUND(SUM(s.runtime_mem)/1024/1024) runtime_mem +From gv$sqlarea s +where s.inst_id like '%' +group by s.inst_id + , s.force_matching_signature +order by sum(s.sharable_mem) desc; + +@@footer + diff --git a/vg/sid_details.sql b/vg/sid_details.sql new file mode 100644 index 0000000..6c2456b --- /dev/null +++ b/vg/sid_details.sql @@ -0,0 +1,679 @@ +@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Details +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------- +* 25-JUN-15 Vishal Gupta Changed exadata specific statistics section +* 03-JUN-15 Vishal Gupta Changed event history's average waits from sec to msec. +* 12-MAR-15 Vishal Gupta Added follwoing columns to the output +* command name, +* 05-SEP-14 Vishal Gupta In last 10 SQL statement, removed filter for SQL_EXEC_START IS NOT NULL +* 03-JUL-14 Vishal Gupta Change Top Session Events column formatting + Added PGA and Temp usage in Last 10 SQL statements section +* 20-MAY-14 Vishal Gupta Updated last 10 sql statements query +* 12-Feb-14 Vishal Gupta Changed session tranactions output layout to transpose +* columns to rows. +* 04-Oct-13 Vishal Gupta Added SQL's SQLProfile and sql_plan_baseline +* information to output +* 17-May-13 Vishal Gupta Added last 10 SQL statements from ASH +* 08-Jan-13 Vishal Gupta Added time since last wait in wait-history section +* 05-Sep-12 Vishal Gupta Changed output field layout again. +* 09-Aug-12 Vishal Gupta Changed output field layout +* 11-May-12 Vishal Gupta Change output layout. Instead of SELECT output +* now it display dbms_output lines. +* 27-Mar-12 Vishal Gupta Included the session wait history +* 05-Aug-04 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ + + +VARIABLE SID number ; +VARIABLE INST_ID number ; + + BEGIN + :SID := '&&1'; + :INST_ID := NVL('&&2',1); + IF :INST_ID = '' OR :INST_ID IS NULL THEN + :INST_ID := 1; + END IF; +END; +/ + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +UNDEFINE TOP_EVENT_COUNT +UNDEFINE BYTES_FORMAT +UNDEFINE BYTES_HEADING +UNDEFINE BYTES_DIVIDER + +DEFINE TOP_EVENT_COUNT=10 + +DEFINE COUNT_SMALL_FORMAT=9,999 +--DEFINE COUNT_SMALL_DIVIDER="1" +--DEFINE COUNT_SMALL_HEADING="#" +DEFINE COUNT_SMALL_DIVIDER="1000" +DEFINE COUNT_SMALL_HEADING="#1000" + +DEFINE COUNT_FORMAT=999,999,999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=999,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" + + +COLUMN session_details1 HEADING "Session Details" FORMAT a41 +COLUMN session_details2 HEADING "Session Details" FORMAT a70 +COLUMN sql_details HEADING "Session Details" FORMAT a151 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN SID HEADING "SID" FORMAT 99999 + +PROMPT +PROMPT ################# Session Details ########################## + +set heading off + select /*+ORDERED */ + /* First Column */ + TRIM(SUBSTR('Instance : ' || s.inst_id ,1,70)) || chr(10) + || TRIM(SUBSTR('SID : ' || s.sid ,1,70)) || chr(10) + || TRIM(SUBSTR('Session Serial# : ' || s.serial# ,1,70)) || chr(10) + || TRIM(SUBSTR('Status : ' || s.status ,1,70)) || chr(10) + || TRIM(SUBSTR('State : ' || s.state ,1,70)) || chr(10) + || TRIM(SUBSTR('Logon Time : ' || TO_CHAR(s.logon_time,'DD-MON-YY HH24:MI:SS') ,1,70)) || chr(10) + || TRIM(SUBSTR('Session Duration : ' || FLOOR(sysdate-s.logon_time) || 'd ' + || FLOOR(MOD((sysdate-s.logon_time) ,1 ) * 24) || 'h ' + || FLOOR(MOD((sysdate-s.logon_time)*24 ,1 ) * 60) || 'm ' + || FLOOR(MOD((sysdate-s.logon_time)*24*60,1 ) * 60) || 's' + ,1,70)) || chr(10) + || TRIM(SUBSTR('LastCall(sec) : ' || FLOOR(s.last_call_et/ 3600) || 'h ' + || LPAD(FLOOR(MOD(s.last_call_et , 3600 ) / 60),2) || 'm ' + || LPAD(MOD(s.last_call_et, 60 ) ,2) || 's' + ,1,70)) || chr(10) + || TRIM('Failed Over : ' || s.failed_over ) || chr(10) + || TRIM('Failover Type : ' || s.failover_type ) || chr(10) + || TRIM('Failover Method : ' || s.failover_method ) || chr(10) + || TRIM('Parallel Query : ' || s.pq_status ) || chr(10) + || TRIM('PDML Enabled : ' || s.pdml_enabled ) || chr(10) + || TRIM('PDML Status : ' || s.pdml_status ) || chr(10) + || TRIM('PDDL Status : ' || s.pddl_status ) || chr(10) +&&_IF_ORA_10gR2_OR_HIGHER || TRIM('SQL Trace : ' || s.sql_trace ) || chr(10) +&&_IF_ORA_10gR2_OR_HIGHER || TRIM('SQL Trace Waits : ' || s.sql_trace_waits ) || chr(10) +&&_IF_ORA_10gR2_OR_HIGHER || TRIM('SQL Trace Binds : ' || s.sql_trace_binds ) || chr(10) +&&_IF_ORA_11gR1_OR_HIGHER || TRIM('SQL Trace PlanStats: ' || s.sql_trace_plan_stats ) || chr(10) + as session_details1 + /* Second Column */ + , TRIM(SUBSTR('OS Username : ' || s.osuser ,1,70)) || chr(10) + || TRIM(SUBSTR('Client Machine : ' || s.machine ,1,70)) || chr(10) + || TRIM(SUBSTR('Client Process : ' || s.process ,1,70)) || chr(10) + || TRIM(SUBSTR('Program : ' || s.program ,1,70)) || chr(10) + || TRIM(SUBSTR('Module : ' || s.module ,1,70)) || chr(10) + || TRIM(SUBSTR('Action : ' || s.action ,1,70)) || chr(10) + || TRIM(SUBSTR('Client Info : ' || s.client_info ,1,70)) || chr(10) + || TRIM(SUBSTR('Client Identifier : ' || s.client_identifier ,1,70)) || chr(10) + || TRIM(SUBSTR('DB UserName : ' || s.username ,1,70)) || chr(10) + || TRIM(SUBSTR('Schema Name : ' || s.schemaname ,1,70)) || chr(10) +&&_IF_ORA_10gR1_OR_HIGHER || TRIM(SUBSTR('ServiceName : ' || s.service_name ,1,70)) || chr(10) + || TRIM(SUBSTR('DB HostName : ' || i.host_name ,1,70)) || chr(10) + || TRIM(SUBSTR('Oracle SPID : ' || p.spid ,1,70)) || chr(10) + || TRIM(SUBSTR('Oracle PID : ' || p.pid ,1,70)) || chr(10) + || TRIM(SUBSTR('Oracle Process Name: ' || p.pname ,1,70)) || chr(10) + || TRIM(SUBSTR('Session Type : ' || s.type ,1,70)) || chr(10) + || TRIM(SUBSTR('Command Name : ' || c.command_name ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait Event : ' || w.event ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait(sec) : ' || w.seconds_in_wait ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait Parameter 1 : ' || w.p1text || ' ' || w.p1 ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait Parameter 2 : ' || w.p2text || ' ' || w.p2 ,1,70)) || chr(10) + || TRIM(SUBSTR('Wait Parameter 3 : ' || w.p3text || ' ' || w.p3 ,1,70)) || chr(10) + as session_details2 + from gv$instance i + JOIN gv$session s ON i.inst_id = s.inst_id + LEFT OUTER JOIN gv$process p ON p.inst_id = s.inst_id AND p.ADDR = s.PADDR + LEFT OUTER JOIN gv$session_wait w ON w.inst_id = s.inst_id AND w.sid = s.sid + LEFT OUTER JOIN v$sqlcommand c ON c.command_type = s.command + where 1=1 + AND s.sid = :SID + AND s.inst_id = :INST_ID +; + +PROMPT +PROMPT ################# Currrent SQL Statement #################### + +-- Get the SQL Statement being executed + select --+ +&&_IF_ORA_11gR1_OR_HIGHER TRIM(SUBSTR('Current SQL Exec Start : ' || TO_CHAR(s.sql_exec_start,'DD-MON-YY HH24:MI:SS') ,1,150)) || chr(10) || + TRIM(SUBSTR('Current SQL Exec Duration: ' || NVL2(s.sql_exec_start,FLOOR(sysdate - s.sql_exec_start) || 'd ' + || LPAD(FLOOR(MOD((sysdate - s.sql_exec_start) , 1) * 24 ) ,2) || 'h ' + || LPAD(FLOOR(MOD((sysdate - s.sql_exec_start) * 24 , 1) * 60 ) ,2) || 'm ' + || LPAD(FLOOR(MOD((sysdate - s.sql_exec_start) * 24 * 60 , 1) * 60 ) ,2),'') + ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL ID : ' || s.sql_id ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL Child Number : ' || s.sql_child_number ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL Plan : ' || sql.plan_hash_value ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL Profile : ' || sql.sql_profile ,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQL Plan Baseline: ' || sql.sql_plan_baseline,1,150)) || chr(10) + || TRIM(SUBSTR('Current SQLText : ' || sql.sql_text ,1,150)) || chr(10) + || chr(10) +&&_IF_ORA_11gR1_OR_HIGHER || TRIM(SUBSTR('Previous SQL Exec Start : ' || TO_CHAR(s.prev_exec_start,'DD-MON-YY HH24:MI:SS') ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL ID : ' || s.prev_sql_id ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL Child Number : ' || s.prev_child_number ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL Plan : ' || prev_sql.plan_hash_value ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL Profile : ' || prev_sql.sql_profile ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQL Plan Baseline: ' || prev_sql.sql_plan_baseline ,1,150)) || chr(10) + || TRIM(SUBSTR('Previous SQLText : ' || prev_sql.sql_text ,1,150)) + as sql_details + from gv$session s + , gv$sqlarea sql + , gv$sqlarea prev_sql + where s.inst_id = sql.inst_id (+) + AND s.sql_id = sql.sql_id (+) + AND s.inst_id = prev_sql.inst_id (+) + AND s.prev_sql_id = prev_sql.sql_id (+) + AND s.sid = :SID + AND s.inst_id = :INST_ID +; + + +PROMPT +PROMPT ############### Session Statistics ####################### + +COLUMN stat HEADING "Statisic" FORMAT a60 + +WITH stat1 AS +( + SELECT DECODE(sn.name + ,'physical read total bytes' ,1 + ,'physical reads' ,2 + ,'physical reads direct' ,3 + ,'physical reads direct temporary tablespace' ,4 + ,'physical reads direct (lob)' ,5 + ,'redo size' ,6 + ,'redo size for direct writes' ,7 + ,'CPU used by this session' ,8 + ,'CPU used when call started' ,9 + ,'session logical reads' ,10 + ,'user calls' ,11 + ,'table fetch by rowid' ,12 + ,'table fetch continued row' ,13 + , 99 + ) sr_no + , DECODE(sn.name + ,'physical reads' ,RPAD('Physical Read Requests' ,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ,'redo size' ,RPAD('Redo Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' + ,'redo size for direct writes' ,RPAD('Redo Size (For Direct Reads)' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' + ,'physical read total bytes' ,RPAD('Physical Read Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' + ,'CPU used when call started' ,RPAD('CPU used when call started',35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/100/&&TIME_DIVIDER),'&&TIME_FORMAT')) || ' &&TIME_HEADING' + ,'CPU used by this session' ,RPAD('CPU used by this session' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/100/&&TIME_DIVIDER),'&&TIME_FORMAT')) || ' &&TIME_HEADING' + ,'session logical reads' ,RPAD('Logical Reads' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND((ss.value*p.value)/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' + , RPAD(sn.name,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ) stat + FROM gv$sesstat ss + , v$statname sn + , v$system_parameter p + WHERE ss.statistic# = sn.statistic# + AND sn.name IN + ( + 'physical reads' + ,'redo size' + ,'redo size for direct writes' + ,'physical read total bytes' + ,'physical reads direct' + ,'physical reads direct temporary tablespace' + ,'physical reads direct (lob)' + ,'user calls' + ,'CPU used by this session' + ,'CPU used when call started' + ,'session logical reads' + ,'table fetch by rowid' + ,'table fetch continued row' + ) + AND p.name = 'db_block_size' + AND ss.inst_id = :INST_ID + AND ss.sid = :SID + ORDER BY sr_no +) +, stat2 as +( + SELECT DECODE(sn.name + ,'physical write total bytes' ,1 + ,'physical writes' ,2 + ,'physical writes direct' ,3 + ,'physical writes direct temporary tablespace',4 + ,'physical writes direct (lob)' ,5 + ,'temp space allocated (bytes)' ,6 + ,'session pga memory' ,7 + ,'session pga memory max' ,8 + ,'OS User time used' ,9 + ,'OS System time used' ,10 + ,'bytes sent via SQL*Net to client' ,11 + ,'bytes received via SQL*Net from client' ,12 + , 99 + ) sr_no + , DECODE(sn.name + ,'physical reads' ,RPAD('Physical Read Requests' ,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ,'physical writes' ,RPAD('Physical Write Requests' ,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ,'physical read total bytes' ,RPAD('Physical Read Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'physical write total bytes' ,RPAD('Physical Write Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'temp space allocated (bytes)' ,RPAD('Temp Space Allocated' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'session pga memory' ,RPAD('PGA Memory Used (HostRAM)' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'session pga memory max' ,RPAD('PGA Memory Max (HostRAM)' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'bytes sent via SQL*Net to client' ,RPAD('Data Sent to Client' ,35)|| ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'bytes received via SQL*Net from client' ,RPAD('Data received from Client' ,35)|| ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + , RPAD(sn.name,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ) stat + FROM gv$sesstat ss + , v$statname sn + WHERE ss.statistic# = sn.statistic# + AND sn.name IN + ( + 'physical writes' + ,'physical write total bytes' + ,'physical writes direct' + ,'physical writes direct temporary tablespace' + ,'physical writes direct (lob)' + ,'session pga memory' + ,'session pga memory max' + ,'bytes sent via SQL*Net to client' + ,'bytes received via SQL*Net from client' + ,'OS User time used' + ,'OS System time used' + ,'temp space allocated (bytes)' + ) + AND ss.inst_id = :INST_ID + AND ss.sid = :SID + ORDER BY sr_no +) +SELECT stat1.stat, stat2.stat + FROM stat1 + FULL OUTER JOIN stat2 ON stat1.sr_no = stat2.sr_no +ORDER BY stat1.sr_no +; + + +PROMPT +PROMPT ######### Session Statistics (Exadata specific) ########### + +COLUMN stat HEADING "Statistic" FORMAT a150 + +WITH stat1 AS +( + SELECT DECODE(sn.name + ,'cell physical IO interconnect bytes' ,1 + ,'cell physical IO interconnect bytes returned by smart scan' ,2 + ,'physical read total bytes optimized' ,3 + ,'cell physical IO bytes eligible for predicate offload' ,4 + ,'cell physical IO bytes saved by storage index' ,5 + ,'cell physical IO bytes eligible for predicate offload' ,6 + ,'cell IO uncompressed bytes' ,7 + ,'cell overwrites in flash cache' ,8 + ,'cell partial writes in flash cache' ,9 + ,'cell writes to flash cache' ,10 + ,'cell num bytes in passthru during predicate offload' ,11 + , 99 + ) sr_no + , DECODE(sn.name + ,'cell physical IO interconnect bytes' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell physical IO interconnect bytes returned by smart scan' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'physical read total bytes optimized' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell physical IO bytes eligible for predicate offload' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell physical IO bytes saved by storage index' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell physical IO bytes eligible for predicate offload' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + ,'cell IO uncompressed bytes' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB' + , RPAD(sn.name,60) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT')) + ) stat + FROM gv$sesstat ss + , v$statname sn + WHERE ss.statistic# = sn.statistic# + AND sn.name IN + ( + 'cell physical IO interconnect bytes' + ,'cell physical IO interconnect bytes returned by smart scan' + ,'physical read total bytes optimized' + ,'cell physical IO bytes eligible for predicate offload' + ,'cell physical IO bytes saved by storage index' + ,'cell physical IO bytes eligible for predicate offload' + ,'cell IO uncompressed bytes' + ,'cell overwrites in flash cache' + ,'cell partial writes in flash cache' + ,'cell writes to flash cache' + ,'cell num bytes in passthru during predicate offload' + ) + AND ss.inst_id = :INST_ID + AND ss.sid = :SID + ORDER BY sr_no +) +SELECT stat1.stat + FROM stat1 +ORDER BY stat1.sr_no +; + +set heading on + + +PROMPT +PROMPT ################# Session Transactions #################### + + +COLUMN xid HEADING "XID" FORMAT a16 +COLUMN transaction_status HEADING "Tran|Status" FORMAT a8 +COLUMN transaction_start_date HEADING "Tran|StartDate" FORMAT a18 +COLUMN tran_duration HEADING "Tran|Duration" FORMAT a15 +COLUMN space HEADING "Space|Tran" FORMAT a5 +COLUMN recursive HEADING "Recu|rsive|Tran" FORMAT a5 +COLUMN noundo HEADING "No|Undo|Tran" FORMAT a4 +COLUMN ptx HEADING "Par'l|Tran" FORMAT a5 +COLUMN used_undo HEADING "Undo|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN log_io HEADING "Logical|IO" FORMAT 999,999,999 +COLUMN phy_io HEADING "Physical|IO" FORMAT 999,999,999 +COLUMN cr_get HEADING "Consistent|Gets" FORMAT 999,999,999 +COLUMN name HEADING "Tran Name" FORMAT a15 WRAP + + +set heading off + +SELECT 'Transaction Name : ' || TRIM(t.name) || chr(10) + || 'XID : ' || TRIM(t.xid) || chr(10) + || 'Parent XID : ' || TRIM(t.ptx_xid) || chr(10) + || 'Tran Status : ' || TRIM(t.status) || chr(10) + || 'Tran Start Time : ' || TO_CHAR(t.start_date,'DD-MON-YY HH24:MI:SS') || chr(10) + || 'Tran Duration : ' || FLOOR(sysdate - t.start_date) || 'd ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) , 1) * 24 ) ,2) || 'h ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 , 1) * 60 ) ,2) || 'm ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 * 60 , 1) * 60 ) ,2) || 's ' || chr(10) + || 'Parallel Tran : ' || TRIM(t.ptx) || chr(10) + || 'Space Tran : ' || TRIM(t.space) || chr(10) + || 'Recursive Tran : ' || TRIM(t.recursive) || chr(10) + || 'No UNDO Tran : ' || TRIM(t.noundo) || chr(10) + || 'Undo : ' || TRIM(TO_CHAR(ROUND((t.used_ublk * p.value)/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' || chr(10) + || 'Logical IO : ' || TRIM(TO_CHAR(t.log_io,'999,999,999')) || chr(10) + || 'Physical IO : ' || TRIM(TO_CHAR(t.phy_io,'999,999,999')) || chr(10) + || 'Consistent Gets : ' || TRIM(TO_CHAR(t.cr_get,'999,999,999')) || chr(10) +FROM gv$transaction t + INNER JOIN gv$session s ON t.inst_id = s.inst_id AND t.ses_addr = s.saddr + INNER JOIN v$parameter p ON p.name = 'db_block_size' +WHERE s.inst_id = :INST_ID + AND s.sid = :SID +ORDER BY t.start_date +; + +set heading on + +PROMPT +PROMPT ######### Locked Objects ########################## + +COLUMN object_name HEADING "ObjectName" FORMAT a40 +COLUMN object_type HEADING "ObjectType" FORMAT a10 TRUNCATED +COLUMN locked_mode HEADING "LockedMode" FORMAT a10 + +SELECT o.owner || '.' || o.object_name object_name + , o.object_type + , DECODE(l.locked_mode, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(l.locked_mode)) locked_mode + FROM gv$locked_object l + JOIN dba_objects o ON o.object_id = l.object_id + JOIN gv$session s ON s.inst_id = l.inst_id AND s.sid = l.session_id +WHERE s.sid = :SID + AND s.inst_id = :INST_ID +ORDER BY object_name +; + + + + +PROMPT +PROMPT ######### Session Lock Information ################# + +COLUMN Block HEADING "Block" FORMAT a10 +COLUMN blocking_instance HEADING "Blocking|I#" FORMAT 999999999 +COLUMN blocking_instance HEADING "Blocking|I#" FORMAT 999999999 +COLUMN blocking_session_status HEADING "Blocking|SID Status" FORMAT a10 +COLUMN final_blocking_instance HEADING "Final|Blocking|I#" FORMAT 999999999 +COLUMN final_blocking_session HEADING "Final|Blocking|SID" FORMAT 999999999 +COLUMN final_blocking_session_status HEADING "Final|Blocking|SID Status" FORMAT a10 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN username HEADING "DBUser" FORMAT a15 +COLUMN osuser HEADING "OSUser" FORMAT a15 +COLUMN status HEADING "Status" FORMAT a10 +COLUMN state HEADING "State" FORMAT a10 +COLUMN logon_time HEADING "LogonTime" FORMAT a18 +COLUMN service_name HEADING "ServiceName" FORMAT a20 + + + select 'Blocked By' Block +&&_IF_ORA_10gR2_OR_HIGHER , s.blocking_instance + , s.blocking_session + , s.blocking_session_status +&&_IF_ORA_11gR2_OR_HIGHER , s.final_blocking_instance +&&_IF_ORA_11gR2_OR_HIGHER , s.final_blocking_session +&&_IF_ORA_11gR2_OR_HIGHER , s.final_blocking_session_status + FROM gv$session s + where s.sid = :SID + AND s.inst_id = :INST_ID + and s.blocking_session is NOT NULL + order by 1; + + +select 'Blocking' Block + , s.inst_id + , s.SID + --, s.SERIAL# + , s.username + , s.osuser + , s.status + , s.state + , CASE + WHEN s.status = 'ACTIVE' THEN s.last_call_et + ELSE NULL + END last_call_et + , TO_CHAR(s.LOGON_TIME,'DD-Mon-YY HH24:MI:SS') logon_time + , s.service_name + , s.sql_id +FROM gv$session s +where (s.blocking_session = :SID + AND s.blocking_instance = :INST_ID) + OR (s.final_blocking_session = :SID + AND s.final_blocking_instance = :INST_ID) +; + + +PROMPT +PROMPT ######### Session Events (Top &&TOP_EVENT_COUNT) ### + +COLUMN wait_class HEAD "WaitClass" FORMAT a20 TRUNCATE +COLUMN event HEAD "EventName" FORMAT a40 +COLUMN total_waits HEAD "TotalWaits" FORMAT 9,999,999 +COLUMN total_timeouts HEAD "TotalTimeOuts" FORMAT 9,999,999 +COLUMN time_waited HEAD "TimeWaited (s)" FORMAT 9,999,999 +COLUMN average_wait HEAD "AvgWait (ms)" FORMAT 9,999,999 +COLUMN max_wait HEAD "MaxWait (s)" FORMAT 9,999,999 + +select * from +( +SELECT e.sid + , e.inst_id + , e.wait_class + , e.event + , e.total_waits + , e.total_timeouts + , e.time_waited / 100 time_waited + , e.average_wait * 10 average_wait + , e.max_wait / 100 max_wait +FROM gv$session_event e +WHERE e.sid = :SID +AND e.inst_id = :INST_ID +order by e.time_waited desc, e.total_waits desc +) +where rownum <= &&TOP_EVENT_COUNT +/ + + +PROMPT +PROMPT ######### Session Wait History ##################### + +COLUMN seq# FORMAT 999 +COLUMN state FORMAT a10 +COLUMN event HEADING "EventName" FORMAT a40 +COLUMN wait_time HEADING "Wait(ms)" FORMAT 99,999 +COLUMN TIME_SINCE_LAST_WAIT HEADING "TimeSince|LastWait|(ms)" FORMAT 999,999 +COLUMN p1 FORMAT 9999999999 +COLUMN p2 FORMAT 9999999999 +COLUMN p3 FORMAT 9999999999 +COLUMN p1text FORMAT a20 +COLUMN p2text FORMAT a20 +COLUMN p3text FORMAT a20 + +SELECT w.sid + , w.inst_id + , w.seq# + , w.event + , w.wait_time * 10 wait_time + , w.TIME_SINCE_LAST_WAIT_MICRO/1000 TIME_SINCE_LAST_WAIT + , w.p1 + , w.p1text + , w.p2 + , w.p2text + , w.p3 + , w.p3text +FROM gv$session_wait_history w +WHERE w.sid = :SID +AND w.inst_id = :INST_ID +ORDER BY seq# +/ + + +PROMPT +PROMPT ######### Last 10 SQL Statements ################## + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a19 +COLUMN sql_exec_end HEADING "MaxSampleTime" FORMAT a19 +COLUMN duration FORMAT a15 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a15 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999 +COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999 +COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999 +COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 99.00 +COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 999.00 + +-- Get the SQL Statements from ASH +SELECT * FROM +( +SELECT --ash.sql_exec_id, + --TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end + , REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'+00000000','+') duration +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value +&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop + , ash.force_matching_signature + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/power(1024,3)) phyread +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/power(1024,3)) phywrite +&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/power(1024,3)) interconnect_io + , ROUND(MAX(ash.pga_allocated)/power(1024,3),2) pga_allocated + , ROUND(MAX(ash.temp_space_allocated)/power(1024,3),2) temp_space_allocated + FROM gv$session s + JOIN gv$active_session_history ash + ON s.inst_id = NVL(ash.qc_instance_id,ash.inst_id) + AND s.sid = NVL(ash.qc_session_id,ash.session_id) + AND s.serial# = NVL(ash.qc_session_serial#,ash.session_serial#) + LEFT OUTER JOIN gv$active_session_history ash_parent + ON ash_parent.inst_id = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + WHERE s.inst_id = :INST_ID + AND s.sid = :SID + --AND ash.sql_exec_id IS NOT NULL +GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.FORCE_MATCHING_SIGNATURE +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) +ORDER BY + -- max(ash.sample_time) asc + --, + NVL(ash.sql_exec_start,MIN(ash.sample_time)) DESC + , max(ash.sample_time) DESC +) +WHERE ROWNUM <= 10 +ORDER BY sql_exec_end +; + +PROMPT +PROMPT ######### Kill/Disconnect Command ################## + +COLUMN command HEADING "Disconnect Command" FORMAT a60 +COLUMN command2 HEADING "Kill Command" FORMAT a60 + +BEGIN + FOR i IN (select 'alter system disconnect session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command + , 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command2 + from gv$session s + , gv$process p + where s.inst_id = p.inst_id (+) + AND s.PADDR = p.ADDR (+) + AND s.sid = :SID + AND s.inst_id = :INST_ID) + LOOP + DBMS_OUTPUT.PUT_LINE( i.command || chr(10) + || i.command2 ); + END LOOP; +END; +/ + + +@@footer diff --git a/vg/sid_events.sql b/vg/sid_events.sql new file mode 100644 index 0000000..6b0c920 --- /dev/null +++ b/vg/sid_events.sql @@ -0,0 +1,74 @@ +@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Details +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------- +* 03-JUN-15 Vishal Gupta Changed average waits from sec to msec. +* 27-Aug-04 Vishal Gupta Created +* +*/ + +UNDEFINE TOP_EVENT_COUNT +DEFINE TOP_EVENT_COUNT=10 + + +/************************************ +* INPUT PARAMETERS +************************************/ + +VARIABLE SID number ; +VARIABLE INST_ID number ; + + BEGIN + :SID := '&&1'; + :INST_ID := NVL('&&2',1); + IF :INST_ID = '' OR :INST_ID IS NULL THEN + :INST_ID := 1; + END IF; +END; +/ + +PROMPT +PROMPT ######### Session Events (Top &&TOP_EVENT_COUNT) ### + +COLUMN inst_id HEAD "I#" FORMAT 99 +COLUMN SID HEAD "SID" FORMAT 99999 +COLUMN wait_class HEAD "WaitClass" FORMAT a20 TRUNCATE +COLUMN event HEAD "EventName" FORMAT a40 +COLUMN total_waits HEAD "TotalWaits" FORMAT 999,999,999 +COLUMN total_timeouts HEAD "TotalTimeOuts" FORMAT 9,999,999 +COLUMN time_waited HEAD "TimeWaited (s)" FORMAT 9,999,999 +COLUMN average_wait HEAD "AvgWait (ms)" FORMAT 9,999,999 +COLUMN max_wait HEAD "MaxWait (s)" FORMAT 9,999,999 + +select * from +( +SELECT e.sid + , e.inst_id + , e.wait_class + , e.event + , e.total_waits + , e.total_timeouts + , e.time_waited / 100 time_waited + , e.average_wait * 10 average_wait + , e.max_wait / 100 max_wait +FROM gv$session_event e +WHERE e.sid = :SID +AND e.inst_id = :INST_ID +order by e.time_waited desc, e.total_waits desc +) +where rownum <= &&TOP_EVENT_COUNT +/ + + + +@@footer diff --git a/vg/sid_opencursors_sqltext.sql b/vg/sid_opencursors_sqltext.sql new file mode 100644 index 0000000..1df6e4b --- /dev/null +++ b/vg/sid_opencursors_sqltext.sql @@ -0,0 +1,57 @@ +@@header + +DEFINE SID="&1" +DEFINE INST_ID="&2" + +COLUMN spid FORMAT a6 +COLUMN SID FORMAT 99999 +COLUMN SERIAL# FORMAT 99999 +COLUMN username FORMAT a12 +COLUMN osuser FORMAT a12 TRUNCATE +COLUMN machine FORMAT a20 TRUNCATE +COLUMN program FORMAT a20 TRUNCATE +COLUMN sql_text FORMAT a80 TRUNCATE + + +Prompt +Prompt ####### SQLs Executed ###################### +Prompt + +select s.SID + , s.inst_id + , sql.sql_id + , sql.sql_text +from gv$session s, gv$process p, gv$open_cursor c, gv$sqltext sql +where s.PADDR = p.ADDR +AND s.inst_id = p.inst_id +and s.sid = c.sid +AND s.inst_id = c.inst_id +AND c.inst_id = sql.inst_id +and c.address = sql.address +and c.hash_value = sql.hash_value +AND s.sid = '&SID' +AND s.inst_id = '&INST_ID' +AND sql.piece = 0 +; + +Prompt +Prompt ####### SQLs Executed (From ASH)###################### +Prompt + +select s.SID + , s.inst_id + , sql.sql_id + , sql.sql_text +from gv$session s, gv$active_session_history ash, gv$sqltext sql +where ash.inst_id = s.inst_id +and ash.session_id = s.sid +and ash.session_serial# = s.serial# +AND sql.inst_id = ash.inst_id +AND sql.sql_id = ash.sql_id +AND s.sid = '&SID' +AND s.inst_id = '&INST_ID' +AND sql.piece = 0 +; + + +@@footer diff --git a/vg/sid_optimizer_trace.sql b/vg/sid_optimizer_trace.sql new file mode 100644 index 0000000..2d60344 --- /dev/null +++ b/vg/sid_optimizer_trace.sql @@ -0,0 +1,40 @@ +/* + This script will set the SQL Trace on in passed SID. +*/ + +-- alter session set events '10053 trace name context forever, level 12'; +-- alter session set events '10053 trace name context off'; + +BEGIN + FOR i IN ( SELECT SID, serial# + FROM v$session + WHERE SID = &&1 ) + LOOP + /* Set session DUMP file size */ + SYS.dbms_system.set_int_param_in_session ( i.SID + , i.serial# + , 'MAX_DUMP_FILE_SIZE' + , 2097152 -- operating system blocks + ); + /* Set session TIMED_STATISTICS to TRUE */ + SYS.dbms_system.set_bool_param_in_session ( i.SID + , i.serial# + , 'TIMED_STATISTICS' + , TRUE + ); + /* Set session trace level to 12 */ + dbms_system.set_ev ( i.SID + , i.serial# + , 10053 + , 12 + , '' + ); + + /* Set session SQL trace to TRUE */ + dbms_system.set_sql_trace_in_session ( i.SID + , i.serial# + , TRUE + ); + END LOOP; +END; +/ diff --git a/vg/sid_sqlids.sql b/vg/sid_sqlids.sql new file mode 100644 index 0000000..d5badf9 --- /dev/null +++ b/vg/sid_sqlids.sql @@ -0,0 +1,115 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session's SQL IDs +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-SEP-14 Vishal Gupta Removed filter for SQL_EXEC_START IS NOT NULL +* 28-Jun-12 Vishal Gupta Created +* +*/ + +VARIABLE SID number ; +VARIABLE INST_ID number ; + +BEGIN + :SID := &&1; + :INST_ID := NVL(&&2,1); + IF :INST_ID = '' OR :INST_ID IS NULL THEN + :INST_ID := 1; + END IF; +END; +/ + +PROMPT +PROMPT ######### ASH SQL Ids ########################## + +COLUMN session_id HEADING "SID" FORMAT 99999 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999 +COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999 +COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999 +COLUMN sql_exec_start FORMAT a18 +COLUMN sql_exec_end HEADING "MaxSampleTime" FORMAT a18 +COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12 +COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999 +COLUMN current_dop HEADING "DOP" FORMAT 999 +COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999 +COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999 +COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999 +COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 99.00 +COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 999.00 + +-- Get the SQL Statements from ASH +SELECT --ash.sql_exec_id, + --TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + NVL(ash.qc_session_id,ash.session_id) session_id + , NVL(ash.qc_instance_id,ash.inst_id) inst_id + , NVL(ash.qc_session_serial#,ash.session_serial#) session_serial# + , TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start + , TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end + , SUBSTR(REPLACE(max(ash.sample_time) - NVL(CAST(ash.sql_exec_start as TIMESTAMP(3)),MIN(ash.sample_time)),'+00000000','+') + ,1,INSTR(REPLACE(max(ash.sample_time) - NVL(CAST(ash.sql_exec_start as TIMESTAMP(3)),MIN(ash.sample_time)),'+00000000','+'),'.')-1 + ) duration +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value +&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop + , ash.force_matching_signature force_matching_signature +&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id + , ROUND(SUM(ash.delta_read_io_bytes)/power(1024,3)) phyread + , ROUND(SUM(ash.delta_write_io_bytes)/power(1024,3)) phywrite + , ROUND(SUM(ash.delta_interconnect_io_bytes)/power(1024,3)) interconnect_io + , ROUND(MAX(ash.pga_allocated)/power(1024,3),2) pga_allocated + , ROUND(MAX(ash.temp_space_allocated)/power(1024,3),2) temp_space_allocated + FROM gv$session s + JOIN gv$active_session_history ash + ON s.inst_id = NVL(ash.qc_instance_id,ash.inst_id) + AND s.sid = NVL(ash.qc_session_id,ash.session_id) + AND s.serial# = NVL(ash.qc_session_serial#,ash.session_serial#) + LEFT OUTER JOIN gv$active_session_history ash_parent + ON ash_parent.inst_id = ash.qc_instance_id + AND ash_parent.session_id = ash.qc_session_id + AND ash_parent.session_serial# = ash.qc_session_serial# + AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start + WHERE s.inst_id = :INST_ID + AND s.sid = :SID + --AND ash.sql_exec_id IS NOT NULL +GROUP BY NVL(ash.qc_session_id,ash.session_id) + , NVL(ash.qc_instance_id,ash.inst_id) + , NVL(ash.qc_session_serial#,ash.session_serial#) + , ash.sql_exec_id + , ash.sql_exec_start + , ash.sql_id + , ash.sql_child_number + , ash.sql_plan_hash_value + , ash.FORCE_MATCHING_SIGNATURE +&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname +&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) +ORDER BY + -- max(ash.sample_time) asc + --, + max(ash.sample_time) asc +&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC +; + + +BEGIN + :SID := NULL; + :INST_ID := NULL; +END; +/ + + +@@footer diff --git a/vg/sid_sqltrace.sql b/vg/sid_sqltrace.sql new file mode 100644 index 0000000..ac362bf --- /dev/null +++ b/vg/sid_sqltrace.sql @@ -0,0 +1,69 @@ +/* + This script will set the SQL Trace on in passed SID. + + + CONN sys/password AS SYSDBA; -- User must have SYSDBA. + + oradebug SETORAPNAME PR00 -- Debug process by name. + ORADEBUG SETMYPID; -- Debug current session. + ORADEBUG SETOSPID 1234; -- Debug session with the specified OS process. + ORADEBUG SETORAPID 123456; -- Debug session with the specified Oracle process ID. + + ORADEBUG TRACEFILE_NAME; -- Display the current trace file. + oradebug UNLIMIT -- Set trace to unlimited size. + + ORADEBUG EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12; -- Start SQL Trace + ORADEBUG EVENT 10046 TRACE NAME CONTEXT OFF; -- Stop SQL Trace + + ORADEBUG EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12; -- Start Optimizer Trace + + exec dbms_monitor.session_trace_enable (session_id=>123,serial_num=>123, waits=> TRUE, binds=> true ); + exec dbms_monitor.session_trace_disable (session_id=>123,serial_num=>123); + + -- Trace user's own session + exec dbms_monitor.session_trace_enable (NULL,NULL,TRUE,TRUE) ; + exec dbms_monitor.session_trace_disable ; + + alter system set events '1031 trace name errorstack level 3'; + +*/ + +BEGIN + FOR i IN ( SELECT SID, serial# + FROM v$session + WHERE SID = &&1 ) + LOOP + /* Set session DUMP file size */ + SYS.dbms_system.set_int_param_in_session ( i.SID + , i.serial# + , 'MAX_DUMP_FILE_SIZE' + , 2097152 -- operating system blocks + ); + /* Set session TIMED_STATISTICS to TRUE */ + SYS.dbms_system.set_bool_param_in_session ( i.SID + , i.serial# + , 'TIMED_STATISTICS' + , TRUE + ); + + -- alter session set events '10046 trace name context forever, level 12'; + /* Set session trace level to 12 */ + dbms_system.set_ev ( i.SID + , i.serial# + , 10046 + , 12 + , '' + ); + + /* Set session SQL trace to TRUE */ + dbms_system.set_sql_trace_in_session ( i.SID + , i.serial# + , TRUE + ); + + /* To disable trace*/ + -- dbms_system.SET_BOOL_PARAM_IN_SESSION(i.SID,i.serial#,'SQL_TRACE',FALSE); + + END LOOP; +END; +/ diff --git a/vg/sid_stats.sql b/vg/sid_stats.sql new file mode 100644 index 0000000..7234d1c --- /dev/null +++ b/vg/sid_stats.sql @@ -0,0 +1,98 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Statistics +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* 3 - Where Clause +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Mar-12 Vishal Gupta First Draft +*/ + +VARIABLE SID VARCHAR2(10) ; +VARIABLE INST_ID VARCHAR2(10) ; + +UNDEFINE TOP_ROWCOUNT +UNDEFINE WHERECLAUSE + +DEFINE TOP_ROWCOUNT=30 +DEFINE WHERECLAUSE="&&3" + +BEGIN + :SID := NULL; + :INST_ID := NULL; + :SID := '&&1'; + :INST_ID := NVL('&&2',1); + IF :INST_ID = '' OR :INST_ID IS NULL THEN + :INST_ID := 1; + END IF; +END; +/ + + +Prompt +Prompt *********************************************** +Prompt ******** Session Statistics ( Top &TOP_ROWCOUNT rows) +Prompt *********************************************** +Prompt + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SPID FORMAT a6 +COLUMN SID FORMAT 9999 +COLUMN serial# HEADING "Serial#" FORMAT 99999 +COLUMN username FORMAT a20 TRUNCATE +COLUMN osuser FORMAT a10 TRUNCATE +COLUMN machine FORMAT a20 +COLUMN logon_time FORMAT a15 +COLUMN service_name FORMAT a21 TRUNCATE +COLUMN program FORMAT a20 TRUNCATE +COLUMN process FORMAT a10 +COLUMN last_call_et HEADING "Last|Call|(s)" FORMAT 99,999 + +COLUMN name HEADING "Statistic Name" FORMAT a40 +COLUMN value HEADING "Value" FORMAT 999,999,999,999,999 +COLUMN class HEADING "Class" FORMAT a10 + +SELECT * +FROM +( + SELECT ss.inst_id + , ss.sid + , s.username + , s.osuser + , s.program + , DECODE(sn.class + , 1, 'User' + , 2, 'Redo' + , 4, 'Enqueue' + , 8, 'Cache' + , 16, 'OS' + , 32, 'RAC' + , 64, 'SQL' + , 128, 'Debug' + , sn.class + ) class + , sn.name + , ss.value + FROM gv$sesstat ss + , v$statname sn + , gv$session s + WHERE s.inst_id = ss.inst_id + AND s.sid = ss.sid + AND ss.statistic# = sn.statistic# + AND s.sid LIKE :SID + AND s.inst_id LIKE :INST_ID + &&WHERECLAUSE + ORDER BY value desc +) +WHERE ROWNUM <= &TOP_ROWCOUNT +; + + +@@footer diff --git a/vg/sid_waits.sql b/vg/sid_waits.sql new file mode 100644 index 0000000..71ccb47 --- /dev/null +++ b/vg/sid_waits.sql @@ -0,0 +1,73 @@ +@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Session Details +* Compatibility : 10.1 and above +* Parameters : 1 - SID +* 2 - INST_ID (optional, default to 1) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------- +* 27-Aug-04 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +VARIABLE SID number ; +VARIABLE INST_ID number ; + + BEGIN + :SID := '&&1'; + :INST_ID := NVL('&&2',1); + IF :INST_ID = '' OR :INST_ID IS NULL THEN + :INST_ID := 1; + END IF; +END; +/ + + +PROMPT +PROMPT ######### Session Wait History ##################### + +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN SID HEADING "SID" FORMAT 99999 +COLUMN seq# FORMAT 999 +COLUMN state FORMAT a10 +COLUMN event HEADING "EventName" FORMAT a40 +COLUMN wait_time HEADING "Wait|(ms)" FORMAT 99,999 +COLUMN TIME_SINCE_LAST_WAIT HEADING "TimeSince|LastWait|(ms)" FORMAT 999,999 +COLUMN p1 FORMAT 9999999999 +COLUMN p2 FORMAT 9999999999 +COLUMN p3 FORMAT 9999999999 +COLUMN p1text FORMAT a20 +COLUMN p2text FORMAT a20 +COLUMN p3text FORMAT a20 + +SELECT w.sid + , w.inst_id + , w.seq# + , w.event + , w.wait_time * 10 wait_time + , w.TIME_SINCE_LAST_WAIT_MICRO/1000 TIME_SINCE_LAST_WAIT + , w.p1 + , w.p1text + , w.p2 + , w.p2text + , w.p3 + , w.p3text +FROM gv$session_wait_history w +WHERE w.sid = :SID +AND w.inst_id = :INST_ID +ORDER BY seq# +/ + + +@@footer diff --git a/vg/signature_sqltext.sql b/vg/signature_sqltext.sql new file mode 100644 index 0000000..3fab399 --- /dev/null +++ b/vg/signature_sqltext.sql @@ -0,0 +1,56 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Text from SQLArea for a FORCE_MATCHING_SIGNATURE +* Parameters : 1 - FORCE_MATCHING_SIGNATURE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Oct-15 Vishal Gupta Initial version +* +* +*/ + +UNDEFINE sqlid +UNDEFINE force_matching_signature + +DEFINE sqlid="" +DEFINE force_matching_signature="&&1" + +SET long 4000000 +SET longchunksize 400000 +SET pages 0 +set lines 300 + + + + +COLUMN _sqlid NEW_VALUE sqlid NOPRINT + +select s.sql_id "_sqlid" + from gv$sqlarea s +WHERE s.force_matching_signature = &&force_matching_signature +and rownum = 1 +; + + +Prompt ******************************************************** +Prompt * SQL Text for SQLID = &&sqlid +Prompt * Force Matching Signature = &&force_matching_signature +Prompt ******************************************************** + +COLUMN sql_text HEADING "SQLText" FORMAT a200 WRAP + +SELECT s.sql_fulltext sql_text +FROM gv$sqlarea s +WHERE s.force_matching_signature = &&force_matching_signature +and rownum = 1 +; + + +@@footer diff --git a/vg/sleep.sql b/vg/sleep.sql new file mode 100644 index 0000000..7422401 --- /dev/null +++ b/vg/sleep.sql @@ -0,0 +1,23 @@ + +/* +* +* Author : Vishal Gupta +* Purpose : Execute password input in a loop. +* Parameter : 1 - Interval (in seconds) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 24-May-12 Vishal Gupta Created +* +*/ + +set feed off +set verify off + +DEFINE INTERVAL="&&1" + +exec dbms_lock.sleep(&&INTERVAL) +set feed on diff --git a/vg/snapper.sql b/vg/snapper.sql new file mode 100644 index 0000000..5379945 --- /dev/null +++ b/vg/snapper.sql @@ -0,0 +1,2309 @@ +---------------------------------------------------------------------------- +-- +-- File name: snapper.sql (Oracle Session Snapper v4) +-- Purpose: An easy to use Oracle session-level performance measurement tool +-- which does NOT require any database changes nor creation of any +-- database objects! +-- +-- This is very useful for ad-hoc performance diagnosis in environments +-- with restrictive change management processes, where creating +-- even temporary tables and PL/SQL packages is not allowed or would +-- take too much time to get approved. +-- +-- All processing is done by a few sqlplus commands and an anonymous +-- PL/SQL block, all that's needed is SQLPLUS access (and if you want +-- to output data to server-side tracefile then execute rights on +-- DBMS_SYSTEM). Snapper only queries some V$ views (and in advanced +-- mode some X$ fixed tables, but it does not enable any traces nor +-- use oradebug. +-- +-- The output is formatted the way it could be easily post-processed +-- by either Unix string manipulation tools or loaded to spreadsheet. +-- +-- Snapper v4.20 Oracle 12c CDB and PDB grouping +-- Snapper v4 supports RAC and requires Oracle 10.1 or a newer DB version. +-- Snapper v3.5 works on Oracle versions starting from Oracle 9.2 (no RAC support) +-- +-- Note1: The "ASH" functionality in Snapper just samples GV$SESSION view, +-- so you do NOT need Diagnostics Pack licenses to use Snapper's +-- "ASH" output +-- +-- Note2: Snapper just reports you performance metric deltas in a snapsphot +-- and does not attempt to solve any performance problems for you. +-- You still need to interpret and understand these standard Oracle +-- metrics yourself +-- +-- Author: Tanel Poder (tanel@tanelpoder.com) +-- Copyright: (c) Tanel Poder - http://blog.tanelpoder.com - All rights reserved. +-- +-- Disclaimer: This script is provided "as is", so no warranties or guarantees are +-- made about its correctness, reliability and safety. Use it at your +-- own risk! +-- +-- License: 1) You may use this script for your (or your businesses) purposes for free +-- 2) You may modify this script as you like for your own (or your businesses) purpose, +-- but you must always leave this script header (the entire comment section), including the +-- author, copyright and license sections as the first thing in the beginning of this file +-- 3) You may NOT publish or distribute this script or any variation of it PUBLICLY +-- (including, but not limited to uploading it to your public website or ftp server), +-- instead just link to its location in blog.tanelpoder.com +-- 4) You may distribute this script INTERNALLY in your company, for internal use only, +-- for example when building a standard DBA toolset to be deployed to all +-- servers or DBA workstations +-- +-- +-- Thanks to: Adrian Billington, Jamey Johnston, Marcus Mönnig, Hans-Peter Sloot, +-- Ronald Rood and Peter Bach for bugfixes, additions and improvements +-- +-------------------------------------------------------------------------------- +-- +-- The Session Snapper v4.24 ( USE AT YOUR OWN RISK !!! ) +-- (c) Tanel Poder ( http://blog.tanelpoder.com ) +-- +-- +-- +-----=====O=== Welcome to The Session Snapper! (Yes, you are looking at a cheap ASCII +-- / imitation of a fish and a fishing rod. +-- | Nevertheless the PL/SQL code below the +-- | fish itself should be helpful for quick +-- | catching of relevant Oracle performance +-- | information. +-- | So I wish you happy... um... snapping? +-- | ) +-- | ...... +-- | iittii,,.... +-- ¿ iiffffjjjjtttt,, +-- ..;;ttffLLLLffLLLLLLffjjtt;;.. +-- ..ttLLGGGGGGLLffLLLLLLLLLLLLLLffjjii,, ..ii,, +-- ffGGffLLLLLLjjttjjjjjjjjffLLLLLLLLLLjjii.. ..iijj;;.... +-- ffGGLLiittjjttttttiittttttttttffLLLLLLGGffii.. ;;LLLLii;;;;.. +-- ffEEGGffiittiittttttttttiiiiiiiittjjjjffLLGGLLii.. iiLLLLLLttiiii,, +-- ;;ffDDLLiiiitt,,ttttttttttttiiiiiiiijjjjjjffLLLLffttiiiiffLLGGLLjjtttt;;.. +-- ..ttttjjiitt,,iiiiiittttttttjjjjttttttttjjjjttttjjttttjjjjffLLDDGGLLttii.. +-- iittiitttt, ;;iittttttttjjjjjjjjjjttjjjjjjffffffjjjjjjjjjjLLDDGGLLtt;;.. +-- jjjjttttii:. ..iiiiffLLGGLLLLLLLLffffffLLLLLLLLLLLLLLLLffffffLLLLLLfftt,, +-- iittttii,,;;,,ttiiiiLLLLffffffjjffffLLLLLLLLffLLffjjttttttttttjjjjffjjii.. +-- ,,iiiiiiiiiittttttiiiiiiiiiijjffffLLLLLLLLffLLffttttttii;;;;iiiitttttttt;;.. +-- ..iittttttffffttttiiiiiiiiiittttffjjjjffffffffttiittii:: ....,,;;iittii;; +-- ..;;iittttttttttttttttiiiiiittttttttttjjjjjjtttttt;; ..;;ii;;.. +-- ..;;;;iittttttjjttiittttttttttttttjjttttttttii.. .... +-- ....;;;;ttjjttttiiiiii;;;;;;iittttiiii.. +-- ..;;ttttii;;.... ..;;;;.... +-- ..iiii;;.. +-- ..;;,, +-- .... +-- +-- +-- Usage: +-- +-- snapper.sql [,out][,trace][,pagesize=X][,gather=[s][t][w][l][e][b][a]]> +-- +-- ash - sample session activity ASH style, waits and SQL_IDs from gv$session and +-- print a TOP SQL/wait report from these samples (this is the default from +-- Snapper 3.0). The columns chosen for TOP calculation are defined in CONFIG +-- section below. +-- +-- ash=sql_id+event+wait_class +-- - the above example illustrates that you can also specify the gv$session +-- columns for TOP report yourself. The above example will show a TOP +-- activity report grouped by SQL_ID + EVENT + WAIT_CLASS +-- Note that the columns are separated by a "+" sign (as comma is a snapper +-- parameter separator, not ASH column separator) +-- +-- ash1 +-- ash2 +-- ash3 - in addition to "ash" report you can have 3 more reported during the same +-- snapper sampling snapshot. Just include ash1=col1+col2,ash2=col3+col4,... +-- parameters if you want multiple TOP reports per Snapper snapshot +-- +-- stats - sample gv$sesstat,gv$sess_time_model,gv$session_event performance counters +-- and report how much these stats increased (deltas) during Snapper run +-- all - report both ASH and stats sections +-- +-- out - use dbms_output.put_line() for output. output will be seen only when +-- Snapper run completes due to dbms_output limitations. This is the default. +-- trace - write output to server process tracefile +-- (you must have execute permission on sys.dbms_system.ksdwrt() for that, +-- you can use both out and trace parameters together if you like ) +-- +-- pagesize - display header lines after X snapshots. if pagesize=0 don't display +-- any headers. pagesize=-1 will display a terse header only once +-- +-- gather - if omitted, gathers s,t,w statistics (see below) +-- - if specified, then gather following: +-- +-- Session-level stats: +-- s - Session Statistics from gv$sesstat +-- t - Session Time model info from gv$sess_time_model +-- w - Session Wait statistics from gv$session_event and gv$session_wait +-- +-- Instance-level stats: +-- l - instance Latch get statistics ( gets + immediate_gets ) +-- e - instance Enqueue lock get statistics +-- b - buffer get Where statistics -- useful in versions up to 10.2.x +-- a - All above +-- +-- sinclude - if specified, then show only GV$SESSTAT stats which match the +-- LIKE pattern of sinclude (REGEXP_LIKE in 10g+) +-- linclude - if specified, then show only GV$LATCH latch stats which match the +-- LIKE pattern of linclude (REGEXP_LIKE in 10g+) +-- tinclude - if specified, then show only GV$SESS_TIME_MODEL stats which match the +-- LIKE pattern of tinclude (REGEXP_LIKE in 10g+) +-- winclude - if specified, then show only GV$SESSION_EVENT wait stats which match the +-- LIKE pattern of winclude (REGEXP_LIKE in 10g+) +-- +-- you can combine above parameters in any order, separate them by commas +-- !!!don't use spaces as otherwise they are treated as next parameters by sqlplus !!! +-- !!!if you want to use spaces, enclose the whole sqlplus parameter in doublequotes !!! +-- +-- - the number of seconds between taking snapshots +-- - the number of snapshots to take ( maximum value is power(2,31)-1 ) +-- +-- can be either one sessionid, multiple sessionids separated by +-- commas or a SQL statement which returns a list of SIDs (if you need spaces +-- in that parameter text, enclose it in double quotes). +-- +-- if you want to snap ALL sids, use "all" as value for +-- parameter +-- +-- alternatively you can use "select sid from gv$session" as value for +-- parameter to capture all SIDs. you can write any query (with multiple and/or) +-- conditions to specify complex rules for capturing only the SIDs you want +-- +-- starting from version 3.0 there are further session_id selection options available in +-- instead of sid you can write such expressions for snapper's parameter: +-- +-- sid=123 -- take sid 123 only (the same as just writing 123) +-- user=tanel -- take all sessions where username is 'tanel' (case insensitive) +-- -- this is the same as writing following subquery for the +-- -- parameter: +-- select sid from gv$session where lower(username) like lower('tanel') +-- +-- user=tanel% -- take all sessions where username begins with 'tanel%' (case insensitive) +-- -- the = means actually LIKE in SQL terms in this script +-- +-- spid=1234 -- all these 3 parameters do the same thing: +-- ospid=1234 -- they look up the sessions(s) where the processes OS PID=1234 +-- pid=1234 -- this is useful for quickly looking up what some OS process is doing +-- -- if it consumes too much of some resource +-- qc=123 +-- qcsid=123 -- show query coordinator and all PX slave sessions +-- +-- program=sqlplus% -- the following examples filter by corresponding gv$session coulmns +-- machine=linux01 -- machine +-- osuser=oracle -- os username +-- module=HR -- module +-- "action=Find Order" -- note the quotes because there is a space inside the parameter +-- -- value +-- client_id=tanelpoder -- show only sessions where client_identifier is set to tanelpoder +-- -- this is very useful in cases with (properly instrumented) +-- -- connection pools +-- +-- +-- Note that if you want to change some "advanced" snapper configuration parameters +-- or default values then search for CONFIG in this file to see configurable +-- variable section +-- +-- +-- Examples: +-- NB! Read the online examples, these are more detailed and list script output too! +-- +-- http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper +-- +-- @snapper ash,stats 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- Wait, gv$sesstat and gv$sess_time_model statistics are reported by default +-- Starting from V3 the ASH style session activity report is shown as well) +-- +-- @snapper stats,gather=w 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only Wait event statistics are reported, no ASH) +-- +-- @snapper ash,gather=st 1 1 515 +-- (Output one 1-second snapshot of session 515 using dbms_output and exit +-- only gv$sesstat and gv$sess_Time_model statistics are gathered + ASH) +-- +-- @snapper trace,ash,gather=stw,pagesize=0 10 90 117,210,313 +-- (Write 90 10-second snapshots into tracefile for session IDs 117,210,313 +-- all statistics are reported, do not print any headers) +-- +-- @snapper trace,ash 900 999999999 "select sid from v$session" +-- (Take a snapshot of ALL sessions every 15 minutes and write the output to trace, +-- loop (almost) forever ) +-- +-- @snapper out,trace 300 12 "select sid from v$session where username='APPS'" +-- (Take 12 5-minute snapshots of all sessions belonging to APPS user, write +-- output to both dbms_output and tracefile) +-- +-- Notes: +-- +-- Snapper does not currently detect if a session with given SID has +-- ended and been recreated between snapshots, thus it may report bogus +-- statistics for such sessions. The check and warning for that will be +-- implemented in a future version. +-- +-------------------------------------------------------------------------------- + +set termout off tab off verify off linesize 999 trimspool on trimout on null "" + +--debug: +-- set termout on serveroutput on + +-- Get parameters (future snapper v4.x extended syntax: @snapper <"begin"|"end"|sleep#> <"snap_name"|snap_count> ) +define snapper_options="&1" +define snapper_sleep="&2" +define snapper_count="&3" +define snapper_sid="&4" + + +-- The following code is required for making this script "dynamic" as due to +-- different Oracle versions, script parameters or granted privileges some +-- statements might not compile if not adjusted properly. + +define _IF_ORA12_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA12="--" +define _IF_ORA11_OR_HIGHER="--" +define _IF_LOWER_THAN_ORA11="--" +define _IF_DBMS_SYSTEM_ACCESSIBLE="/* dbms_system is not accessible" +-- /*dummy*/ -- this "dummy" is here just for avoiding VIM syntax highlighter going crazy due to previous line +define _IF_X_ACCESSIBLE="--" + +-- plsql_object_id columns available in v$session (from 10.2.0.3) +define _YES_PLSQL_OBJ_ID="--" +define _NO_PLSQL_OBJ_ID="" +-- blocking_instance available in v$session (from 10.2) +define _YES_BLK_INST="--" +define _NO_BLK_INST="" + +-- snapper v4 manual before/after snapshotting +define _MANUAL_SNAPSHOT="--" +define _USE_DBMS_LOCK="" + +-- set the noprint's value to "noprint" if you don't want these temporary variables to show up in a sqlplus spool file +-- however, setting noprint="noprint" can cause errors in Oracle SQL Developer v4.0.x for some reason (OK in v4.1) +DEF noprint="" +col snapper_ora12higher &noprint new_value _IF_ORA12_OR_HIGHER +col snapper_ora12lower &noprint new_value _IF_LOWER_THAN_ORA12 +col snapper_ora12 &noprint new_value _IF_ORA12_OR_HIGHER +col snapper_ora11higher &noprint new_value _IF_ORA11_OR_HIGHER +col snapper_ora11lower &noprint new_value _IF_LOWER_THAN_ORA11 +col dbms_system_accessible &noprint new_value _IF_DBMS_SYSTEM_ACCESSIBLE +col x_accessible &noprint new_value _IF_X_ACCESSIBLE +col no_plsql_obj_id &noprint new_value _NO_PLSQL_OBJ_ID +col yes_plsql_obj_id &noprint new_value _YES_PLSQL_OBJ_ID +col no_blk_inst &noprint new_value _NO_BLK_INST +col yes_blk_inst &noprint new_value _YES_BLK_INST +col manual_snapshot &noprint new_value _MANUAL_SNAPSHOT +col use_dbms_lock &noprint new_value _USE_DBMS_LOCK + +col snapper_sid &noprint new_value snapper_sid + +-- sid_filter and inst_filter are the new RAC gv$ friendly way to filter sessions in Snapper v4 +def sid_filter="/**/" +def inst_filter="/**/" +col sid_filter &noprint new_value sid_filter +col inst_filter &noprint new_value inst_filter + + +-- initialize, precompute and determine stuff +var v varchar2(100) +var x varchar2(10) +var sid_filter varchar2(4000) +var inst_filter varchar2(4000) + +-- this is here for a reason +-- im extracting the first word of the snapper_sid (if its a complex expression, not just a single SID) +-- by relying on how DEF and & assignment treat spaces in strings +def ssid_begin=&snapper_sid + +declare + + o sys.dbms_describe.number_table; + p sys.dbms_describe.number_table; + l sys.dbms_describe.number_table; + a sys.dbms_describe.varchar2_table; + dty sys.dbms_describe.number_table; + def sys.dbms_describe.number_table; + inout sys.dbms_describe.number_table; + len sys.dbms_describe.number_table; + prec sys.dbms_describe.number_table; + scal sys.dbms_describe.number_table; + rad sys.dbms_describe.number_table; + spa sys.dbms_describe.number_table; + + tmp number; + lv_sid_filter varchar2(4000); + lv_inst_filter varchar2(4000); + + function get_filter(str in varchar2) return varchar2 + is + ret varchar2(1000); + begin + if str like '%@%' then + --dbms_output.put_line('get_filter:1 str= '||str); + ret := lower(trim(regexp_replace(substr(str,instr(str,'=')+1), '^(.+)@([[:digit:]\*]+)(.*)', '\1'))); + else + --dbms_output.put_line('get_filter:2 str= '||str); + ret := lower(trim(substr(str,instr(str,'=')+1))); + end if; + --dbms_output.put_line('get_filter = ' || ret); + return ret; + end get_filter; + +begin + -- compute inst_filter + case + when regexp_instr('&ssid_begin','@') = 0 then + lv_inst_filter := '/* inst_filter */ s.inst_id=USERENV(''Instance'')'; + when regexp_instr('&ssid_begin','@\*') > 0 or '&ssid_begin' like '(%' then + lv_inst_filter := '/* inst_filter */ 1=1'; + when regexp_instr('&ssid_begin','@\d+') > 0 then + lv_inst_filter := 's.inst_id = ' || regexp_replace('&ssid_begin', '^(.+)@(\d+)(.*)', '\2'); + else + lv_inst_filter := 's.inst_id=USERENV(''Instance'')'; + --when regexp_instr('&ssid_begin','@\d+') > 0 then regexp_replace(snapper_sid, '^(.+)@\d+', '\1') || ' AND inst_id = ' || regexp_replace(snapper_sid, '^(.+)@(\d+)(.*)', '\2') + end case; + + -- compute sid_filter + case + when trim(lower('&ssid_begin')) like 'con_id=%' then lv_sid_filter := 's.con_id in ('||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'sid=%' then lv_sid_filter := 's.sid in (' ||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'audsid=%' then lv_sid_filter := 's.audsid in ('||get_filter('&ssid_begin')||')'; + when trim(lower('&ssid_begin')) like 'user=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'username=%' then lv_sid_filter := 'lower(username) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'machine=%' then lv_sid_filter := 'lower(machine) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'program=%' then lv_sid_filter := 'lower(program) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'service=%' then lv_sid_filter := 'lower(service_name) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'module=%' then lv_sid_filter := 'lower(module) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'action=%' then lv_sid_filter := 'lower(action) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'osuser=%' then lv_sid_filter := 'lower(osuser) like ''' ||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'client_id=%' then lv_sid_filter := 'lower(client_identifier) like '''||get_filter('&ssid_begin')||''''; + when trim(lower('&ssid_begin')) like 'spid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'ospid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'pid=%' then lv_sid_filter := '(s.inst_id,s.paddr) in (select /*+ UNNEST */ inst_id,addr from gv$process where spid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qcsid=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'qc=%' then lv_sid_filter := '(s.inst_id,s.sid) in (select /*+ NO_UNNEST */ inst_id,sid from gv$px_session where qcsid in ('||get_filter('&ssid_begin')||'))'; + when trim(lower('&ssid_begin')) like 'all%' then lv_sid_filter := '1=1'; + when trim(lower('&ssid_begin')) like 'bg%' then lv_sid_filter := 'type=''BACKGROUND'''; + when trim(lower('&ssid_begin')) like 'fg%' then lv_sid_filter := 'type=''USER'''; + when trim(lower('&ssid_begin')) like 'smon%' then lv_sid_filter := 'program like ''%(SMON)%'''; + when trim(lower('&ssid_begin')) like 'pmon%' then lv_sid_filter := 'program like ''%(PMON)%'''; + when trim(lower('&ssid_begin')) like 'ckpt%' then lv_sid_filter := 'program like ''%(CKPT)%'''; + when trim(lower('&ssid_begin')) like 'lgwr%' then lv_sid_filter := 'program like ''%(LG__)%'''; -- 12c multiple adaptive LGWR workers + when trim(lower('&ssid_begin')) like 'dbwr%' then lv_sid_filter := 'regexp_like(program, ''.*\((DBW.|BW..)\).*'', ''i'')'; + when trim(lower('&ssid_begin')) like 'select%' then lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; + when trim(lower('&ssid_begin')) like '(%' then lv_inst_filter := '/* inst_filter2 */ 1=1'; lv_sid_filter := q'{(s.inst_id,s.sid) in (&snapper_sid)}'; + else lv_sid_filter := '/* sid_filter_else_cond */ s.sid in ('||get_filter('&ssid_begin')||')'; + end case; + + :inst_filter := lv_inst_filter; + :sid_filter := lv_inst_filter||' and '||lv_sid_filter; + + -- this block determines whether dbms_system.ksdwrt is accessible to us + -- dbms_describe is required as all_procedures/all_objects may show this object + -- even if its not executable by us (thanks to o7_dictionary_accessibility=false) + begin + execute immediate 'select count(*) from x$kcbwh where rownum = 1' into tmp; + :x:= ' '; -- x$ tables are accessible, so dont comment any lines out + exception + when others then null; + end; + + sys.dbms_describe.describe_procedure( + 'DBMS_SYSTEM.KSDWRT', null, null, + o, p, l, a, dty, def, inout, len, prec, scal, rad, spa + ); + + -- we never get to following statement if dbms_system is not accessible + -- as sys.dbms_describe will raise an exception + :v:= '-- dbms_system is accessible'; + +exception + when others then null; +end; +/ + +-- this query populates some sqlplus variables required for dynamic compilation used below +with mod_banner as ( + select + replace(banner,'9.','09.') banner + from + v$version + where rownum = 1 +) +select + case when substr(banner, instr(banner, 'Release ')+8,2) >= '12' then '' else '--' end snapper_ora12higher, + case when substr(banner, instr(banner, 'Release ')+8,2) < '12' then '' else '--' end snapper_ora12lower, + case when substr(banner, instr(banner, 'Release ')+8,2) = '11' then '' else '--' end snapper_ora11higher, + case when substr(banner, instr(banner, 'Release ')+8,2) < '11' then '' else '--' end snapper_ora11lower, + nvl(:v, '/* dbms_system is not accessible') dbms_system_accessible, + nvl(:x, '--') x_accessible, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '' else '--' end yes_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2' then '--' else '' end no_blk_inst, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '' else '--' end yes_plsql_obj_id, + case when substr( banner, instr(banner, 'Release ')+8, instr(substr(banner,instr(banner,'Release ')+8),' ') ) >= '10.2.0.3' then '--' else '' end no_plsql_obj_id, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '' else '--' end manual_snapshot, + case when lower('&snapper_options') like '%,begin%' or lower('&snapper_options') like 'begin%' or lower('&snapper_options') like '%,end%' or lower('&snapper_options') like 'end%' then '--' else '' end use_dbms_lock, + :sid_filter sid_filter, + :inst_filter inst_filter +from + mod_banner +/ + +-- current workaround: 1st serveroutput command below is for sql developer compatibility +-- 2nd is for sqlplus, so that newlines and leading spaces get properly printed +set termout off +set serveroutput on size 1000000 +set serveroutput on size 1000000 format wrapped +set termout on + +prompt Sampling SID &4 with interval &snapper_sleep seconds, taking &snapper_count snapshots... + +-- let the Snapping start!!! +-- main() +declare + -- Snapper start + -- forward declarations + procedure output(p_txt in varchar2); + procedure fout; + + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, + p_grouplen in number default 3 + ) + return varchar2; + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) + return varchar2; + + + -- type, constant, variable declarations + + -- trick for holding 32bit UNSIGNED event and stat_ids in 32bit SIGNED PLS_INTEGER + pls_adjust constant number(10,0) := power(2,31) - 1; + + type srec is record (ts timestamp, stype varchar2(4), inst_id number, sid number, statistic# number, value number, event_count number ); + type stab is table of srec index by pls_integer; + type ltab is table of srec index by varchar2(100); -- lookup tab for various average calculation + s1 stab; + s2 stab; + l1 ltab; + l2 ltab; + + type snrec is record (stype varchar2(4), statistic# number, name varchar2(100)); + type sntab is table of snrec index by pls_integer; + sn_tmp sntab; + sn sntab; + + type sntab_reverse is table of snrec index by varchar2(100); -- used for looking up stat id from stat name + sn_reverse sntab_reverse; + + tmp_varchar2 varchar2(1000); -- misc + + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2; + + type tmp_sestab is table of gv$session%rowtype index by pls_integer; + type sestab is table of gv$session%rowtype index by varchar2(20); + + g_sessions sestab; + g_empty_sessions sestab; + + type hc_tab is table of number index by pls_integer; -- index is sql hash value + type ses_hash_tab is table of hc_tab index by pls_integer; -- index is SID + + g_ses_hash_tab ses_hash_tab; + g_empty_ses_hash_tab ses_hash_tab; + + -- dbms_debug_vc2coll is a built-in collection present in every oracle db + g_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_empty_ash sys.dbms_debug_vc2coll := new sys.dbms_debug_vc2coll(); + g_snap1 sys.dbms_debug_vc2coll; + g_snap2 sys.dbms_debug_vc2coll; + + g_ash_samples_taken number := 0; + + g_count_statname number; + g_count_eventname number; + + g_mysid number; + + i number; + a number; + b number; + + c number; + delta number; + evcnt number; + changed_values number; + pagesize number:=99999999999999; + missing_values_s1 number := 0; + missing_values_s2 number := 0; + disappeared_sid number := 0; + lv_curr_sid number := 0; -- used for determining whether to print an empty line between session stats + d1 timestamp(6); + d2 timestamp(6); + ash_date1 date; + ash_date2 date; + lv_gather varchar2(1000); + gv_header_string varchar2(1000); + lv_data_string varchar2(1000); + + lv_ash varchar2(1000); + lv_stats varchar2(1000); + + gather_stats number := 0; + gather_ash number := 0; + + g_snap_begin varchar2(1000); + g_snap_end varchar2(1000); + + -- CONFIGURABLE STUFF -- + + -- this sets what are the default ash sample TOP reporting group by columns + g_ash_columns varchar2(1000) := 'inst_id + sql_id + sql_child_number + event + wait_class'; + g_ash_columns1 varchar2(1000) := 'inst_id + event + p1 + wait_class'; + g_ash_columns2 varchar2(1000) := 'inst_id + sid + user + machine + program'; + g_ash_columns3 varchar2(1000) := 'inst_id + plsql_object_id + plsql_subprogram_id + sql_id'; + g_ash_columns4 varchar2(1000) := 'con_id + inst_id + sql_id + sql_child_number + event + wait_class'; + g_ash_columns5 varchar2(1000) := 'con_id + inst_id + event + p1 + wait_class'; + g_ash_columns6 varchar2(1000) := 'con_id + inst_id + sid + user + machine + program'; + + -- output column configuration + output_header number := 0; -- 1=true 0=false + output_username number := 1; -- v$session.username + output_inst number := 0; -- inst + output_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 0 ELSE 1 END; -- just sid + output_inst_sid number := CASE WHEN dbms_utility.is_cluster_database = TRUE THEN 1 ELSE 0 END; -- inst_id and sid together + output_time number := 0; -- time of snapshot start + output_seconds number := 0; -- seconds in snapshot (shown in footer of each snapshot too) + output_stype number := 1; -- statistic type (WAIT,STAT,TIME,ENQG,LATG,...) + output_sname number := 1; -- statistic name + output_delta number := 1; -- raw delta + output_delta_s number := 0; -- raw delta normalized to per second + output_hdelta number := 0; -- human readable delta + output_hdelta_s number := 1; -- human readable delta normalized to per second + output_percent number := 1; -- percent of total time/samples + output_eventcnt number := 1; -- wait event count + output_eventcnt_s number := 1; -- wait event count + output_eventavg number := 1; -- average wait duration + output_pcthist number := 1; -- percent of total visual bar (histogram) -- Histograms seem to work for me on 9.2.0.7 + - JBJ2) + + output_actses number := 1; -- show Average Active Sessions (AAS) in "ASH" activity section + output_actses_pct number := 1; -- show AAS as a percentage of a single thread time + + -- column widths in ASH report output + w_inst_id number := 4; + w_sid number := 6; + w_username number := 20; + w_machine number := 20; + w_terminal number := 20; + w_program number := 25; + w_event number := 35; + w_wait_class number := 15; + w_state number := 8; + w_p1 number := 20; + w_p2 number := 20; + w_p3 number := 20; + w_row_wait_obj# number := 10; + w_row_wait_file# number := 6; + w_row_wait_block# number := 10; + w_row_wait_row# number := 6; + w_blocking_session_status number := 15; + w_blocking_instance number := 12; + w_blocking_session number := 12; + w_sql_hash_value number := 12; + w_sql_id number := 15; + w_sql_child_number number := 9; + w_plsql_entry_object_id number := 10; + w_plsql_entry_subprogram_id number := 10; + w_plsql_object_id number := 10; + w_plsql_subprogram_id number := 10; + w_module number := 25; + w_action number := 25; + w_client_identifier number := 25; + w_service_name number := 25; + w_con_id number := 6; + + w_actses number := 8; + w_actses_pct number := 10; + + -- END CONFIGURABLE STUFF -- + + -- constants for ash collection extraction from the vc2 collection + s_inst_id constant number := 1 ; + s_sid constant number := 2 ; + s_username constant number := 3 ; + s_machine constant number := 4 ; + s_terminal constant number := 5 ; + s_program constant number := 6 ; + s_event constant number := 7 ; + s_wait_class constant number := 8 ; + s_state constant number := 9 ; + s_p1 constant number := 10 ; + s_p2 constant number := 11 ; + s_p3 constant number := 12 ; + s_row_wait_obj# constant number := 13 ; + s_row_wait_file# constant number := 14 ; + s_row_wait_block# constant number := 15 ; + s_row_wait_row# constant number := 16 ; + s_blocking_session_status constant number := 17 ; + s_blocking_instance constant number := 18 ; + s_blocking_session constant number := 19 ; + s_sql_hash_value constant number := 20 ; + s_sql_id constant number := 21 ; + s_sql_child_number constant number := 22 ; + s_plsql_entry_object_id constant number := 23 ; + s_plsql_entry_subprogram_id constant number := 24 ; + s_plsql_object_id constant number := 25 ; + s_plsql_subprogram_id constant number := 26 ; + s_module constant number := 27 ; + s_action constant number := 28 ; + s_client_identifier constant number := 29 ; + s_service_name constant number := 30 ; + s_con_id constant number := 31 ; + + -- constants for ash collection reporting, which columns to show in report + c_inst_id constant number := power(2, s_inst_id ); + c_sid constant number := power(2, s_sid ); + c_username constant number := power(2, s_username ); + c_machine constant number := power(2, s_machine ); + c_terminal constant number := power(2, s_terminal ); + c_program constant number := power(2, s_program ); + c_event constant number := power(2, s_event ); + c_wait_class constant number := power(2, s_wait_class ); + c_state constant number := power(2, s_state ); + c_p1 constant number := power(2, s_p1 ); + c_p2 constant number := power(2, s_p2 ); + c_p3 constant number := power(2, s_p3 ); + c_row_wait_obj# constant number := power(2, s_row_wait_obj# ); + c_row_wait_file# constant number := power(2, s_row_wait_file# ); + c_row_wait_block# constant number := power(2, s_row_wait_block# ); + c_row_wait_row# constant number := power(2, s_row_wait_row# ); + c_blocking_session_status constant number := power(2, s_blocking_session_status ); + c_blocking_instance constant number := power(2, s_blocking_instance ); + c_blocking_session constant number := power(2, s_blocking_session ); + c_sql_hash_value constant number := power(2, s_sql_hash_value ); + c_sql_id constant number := power(2, s_sql_id ); + c_sql_child_number constant number := power(2, s_sql_child_number ); + c_plsql_entry_object_id constant number := power(2, s_plsql_entry_object_id ); + c_plsql_entry_subprogram_id constant number := power(2, s_plsql_entry_subprogram_id); + c_plsql_object_id constant number := power(2, s_plsql_object_id ); + c_plsql_subprogram_id constant number := power(2, s_plsql_subprogram_id ); + c_module constant number := power(2, s_module ); + c_action constant number := power(2, s_action ); + c_client_identifier constant number := power(2, s_client_identifier ); + c_service_name constant number := power(2, s_service_name ); + c_con_id constant number := power(2, s_con_id ); + + + /*--------------------------------------------------- + -- proc for outputting data to trace or dbms_output + ---------------------------------------------------*/ + procedure output(p_txt in varchar2) is + begin + + if (getopt('&snapper_options', 'out') is not null) + or + (getopt('&snapper_options', 'out') is null and getopt('&snapper_options', 'trace') is null) + then + dbms_output.put_line(p_txt); + end if; + + -- The block below is a sqlplus trick for conditionally commenting out PL/SQL code + &_IF_DBMS_SYSTEM_ACCESSIBLE + if getopt('&snapper_options', 'trace') is not null then + sys.dbms_system.ksdwrt(1, p_txt); + sys.dbms_system.ksdfls; + end if; + -- */ + end; -- output + + /*--------------------------------------------------- + -- function for converting interval datatype to microseconds + ---------------------------------------------------*/ + function get_seconds(i interval day to second) return number + as + s NUMBER; + begin + s := to_number(extract(second from i)) + + to_number(extract(minute from i)) * 60 + + to_number(extract(hour from i)) * 60 * 60 + + to_number(extract(day from i)) * 60 * 60 * 24; + --output('get_seconds '||to_char(i)||' = '||to_char(s)); + return s; + end get_seconds; + + /*--------------------------------------------------- + -- proc for outputting data, utilizing global vars + ---------------------------------------------------*/ + procedure fout is + l_output_username VARCHAR2(100); + gsid varchar2(20); + begin + --if s2(b).stype='WAIT' then output( 'DEBUG WAIT ' || sn(s2(b).statistic#).name || ' ' || delta ); end if; + --output( 'DEBUG, Entering fout(), b='||to_char(b)||' sn(s2(b).statistic#='||s2(b).statistic# ); + --output( 'DEBUG, In fout(), a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + gsid := trim(to_char(s2(b).inst_id))||','||trim(to_char(s2(b).sid)); + + if output_username = 1 then + begin + l_output_username := nvl( g_sessions(gsid).username, substr(g_sessions(gsid).program, instr(g_sessions(gsid).program,'(')) ); + exception + when no_data_found then l_output_username := 'error'; + when others then raise; + end; + end if; + + -- DEBUG + --output('before'); + --output (CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END); + --output('after'); + + output( CASE WHEN output_header = 1 THEN 'SID= ' END + || CASE WHEN output_inst = 1 THEN to_char(s2(b).inst_id, '9999')||', ' END + || CASE WHEN output_sid = 1 THEN to_char(s2(b).sid,'999999')||', ' END + || CASE WHEN output_inst_sid = 1 THEN to_char(s2(b).sid,'99999')||' '||lpad('@'||trim(to_char(s2(b).inst_id, '99')),3)||', ' END + || CASE WHEN output_username = 1 THEN rpad(CASE s2(b).sid WHEN -1 THEN ' ' ELSE NVL(l_output_username, ' ') END, 10)||', ' END + || CASE WHEN output_time = 1 THEN to_char(d1, 'YYYYMMDD HH24:MI:SS')||', ' END + || CASE WHEN output_seconds = 1 THEN to_char(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end, '9999999')||', ' END + || CASE WHEN output_stype = 1 THEN s2(b).stype||', ' END + || CASE WHEN output_sname = 1 THEN rpad(sn(s2(b).statistic#).name, 58, ' ')||', ' END + || CASE WHEN output_delta = 1 THEN to_char(delta, '999999999999')||', ' END + || CASE WHEN output_delta_s = 1 THEN to_char(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end),'999999999')||', ' END + || CASE WHEN output_hdelta = 1 THEN lpad(tptformat(delta, s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_hdelta_s = 1 THEN lpad(tptformat(delta/(case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), s2(b).stype), 10, ' ')||', ' END + || CASE WHEN output_percent = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN to_char(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 10000, '9999.9')||'%' ELSE ' ' END END||', ' + || CASE WHEN output_pcthist = 1 THEN CASE WHEN s2(b).stype IN ('TIME','WAIT') THEN rpad(rpad('[', ceil(round(delta/CASE get_seconds(d2-d1) WHEN 0 THEN &snapper_sleep ELSE get_seconds(d2-d1) END / 100000,1))+1, CASE WHEN s2(b).stype IN ('WAIT') THEN 'W' WHEN sn(s2(b).statistic#).name = 'DB CPU' THEN '@' ELSE '#' END),11,' ')||']' ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN to_char(evcnt, '99999999') ELSE ' ' END END||', ' + || CASE WHEN output_eventcnt_s = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat((evcnt / case get_seconds(d2-d1) when 0 then &snapper_sleep else get_seconds(d2-d1) end ), 'STAT' ), 10, ' ') ELSE ' ' END END||', ' + || CASE WHEN output_eventavg = 1 THEN CASE WHEN s2(b).stype IN ('WAIT') THEN lpad(tptformat(delta / CASE WHEN evcnt = 0 THEN 1 ELSE evcnt END, s2(b).stype), 10, ' ')||' average wait' ELSE get_useful_average(s2(b), s1(a)) END END + ); + + end; + + + /*--------------------------------------------------- + -- lookup stat delta helper calculator (l2.value - l1.value) + ---------------------------------------------------*/ + function get_delta(metric_id in varchar2) return number + is + rec1 srec; + rec2 srec; + + val1 number; + val2 number; + + d number; + begin + begin + val1 := l1(metric_id).value; + exception + when no_data_found then val1 := 0; + end; + + begin + val2 := l2(metric_id).value; + exception + when no_data_found then val2 := 0; + end; + + d := val2 - NVL(val1, 0); + return d; + end get_delta; + + /*--------------------------------------------------- + -- delta helper function for convenience - it allows to specify any metric delta, if not specified then get current one + ---------------------------------------------------*/ + function gd(c in srec, metric_type in varchar2 DEFAULT NULL, metric_name in varchar2 DEFAULT NULL) return number + is + str varchar2(1000); + tmp_delta number; + begin + if metric_type || metric_name is null then + str := c.stype||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(c.statistic#,'999999999999999999999999')); + else + begin + str := trim(metric_type)||','||trim(to_char(c.inst_id))||','||trim(to_char(c.sid))||','||trim(to_char(sn_reverse(metric_type||','||metric_name).statistic#)); + exception + when no_data_found then return 0; + end; + end if; + tmp_delta := get_delta(str); + --output('tmp_delta '||c.stype||' '||tmp_delta); + return tmp_delta; + -- return get_delta(str); + end; + + /*--------------------------------------------------- + -- function for calculating useful averages and ratios between metrics + -- it is totally OK to show ratios together with raw values they have been derived from + ---------------------------------------------------*/ + function get_useful_average(c in srec /* curr_metric */, p in srec /* all_prev_metrics */) return varchar2 + is + ret varchar2(1000); + mt varchar2(100) := c.stype; -- metric_type + mn varchar2(100) := sn(c.statistic#).name; -- metric_name + begin + case + when mt = 'STAT' then + case + when mn LIKE 'session _ga memory%' then ret := lpad( tptformat(gd(c), 'STAT'), 10) || ' actual value in end of snapshot'; + when mn LIKE '%ed%cursors current' then ret := lpad( tptformat(gd(c), 'STAT'), 10) || ' actual value in end of snapshot'; + when mn = 'file io service time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'physical read total IO requests')+gd(c, 'STAT', 'physical write total IO requests'),0), 'TIME'), 10) || ' bad guess of IO service time per IO request'; + when mn = 'file io wait time' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'physical read total IO requests')+gd(c, 'STAT', 'physical write total IO requests'),0), 'TIME'), 10) || ' bad guess of IO wait time per IO request'; + when mn = 'redo synch time overhead (usec)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'redo synch writes' ),0), 'TIME'), 10) || ' FG wakeup overhead per log file sync'; + when mn = 'redo write time' then ret := lpad( tptformat(gd(c) * 10000 / nullif(gd(c, 'STAT', 'redo writes' ),0), 'TIME'), 10) || ' per redo write'; + when mn = 'recursive calls' then ret := lpad( tptformat(gd(c, 'STAT', 'recursive cpu usage') * 10000 / nullif(gd(c), 0), 'TIME'), 10) || ' recursive CPU per recursive call'; + when mn = 'recursive cpu usage' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total recursive CPU usage'; + when mn = 'parse time cpu' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total parse time CPU'; + when mn = 'parse time elapsed' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total parse time elapsed'; + when mn = 'CPU used when call started' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total CPU used when call started'; + when mn = 'CPU used by this session' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total CPU used by this session'; + when mn = 'DB Time' then ret := lpad( tptformat(gd(c) * 10000, 'TIME'), 10) || ' total DB Time'; + when mn = 'physical write IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical write bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical write total IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical write total bytes') / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical write total multi block requests' then ret:= lpad( tptformat(gd(c, 'STAT', 'physical write total IO requests') - gd(c), mt), 10) || ' total single block write requests' ; + when mn = 'physical read total multi block requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total IO requests') - gd(c), mt), 10) || ' total single block read requests' ; + when mn = 'physical read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read bytes' ) / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'physical read read IO requests' then ret := lpad( tptformat(gd(c, 'STAT', 'physical read total bytes' ) / nullif(gd(c),0), mt), 10) || ' bytes per request' ; + when mn = 'bytes sent via SQL*Net to client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes received via SQL*Net from client' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from client'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes sent via SQL*Net to dblink' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from dblink'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'bytes received via SQL*Net from dblink' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'SQL*Net roundtrips to/from dblink'),0), mt), 10) || ' bytes per roundtrip' ; + when mn = 'redo size' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'user commits' ),0), mt), 10) || ' bytes per user commit'; + when mn = 'execute count' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (total)' ),0), mt), 10) || ' executions per parse'; + when mn = 'parse count (total)' then ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'parse count (hard)' ),0), mt), 10) || ' softparses per hardparse'; + when mn = 'session cursor cache hits' then ret := lpad( tptformat(gd(c) - (gd(c, 'STAT', 'parse count (total)' ) ), mt), 10) || ' softparses avoided thanks to cursor cache'; + when mn = 'session logical reads' then ret := lpad( tptformat(gd(c) + (gd(c, 'STAT', 'buffer is pinned count' ) ), mt), 10) || ' total buffer visits'; + when mn = 'buffer is pinned count' then ret := lpad( tptformat(gd(c) / nullif(gd(c) + gd(c, 'STAT', 'session logical reads'),0) * 100, mt), 10) || ' % buffer gets avoided thanks to buffer pin caching'; + else ret := lpad( tptformat(gd(c) / nullif(gd(c, 'STAT', 'execute count'),0), mt), 10) || ' per execution' ; + end case; -- mt=stat, mn + when mt = 'TIME' then + -- this is ugly and wrong at the moment - will refactor some day + case + when mn = 'DB time' or mn= 'background elapsed time' then ret := lpad(tptformat((get_seconds(d2 - d1)*1000000 - ( + gd(c) + /*+ gd(c, 'DB CPU', 'TIME') */ + + gd(c, 'WAIT', 'pmon timer') + + gd(c, 'WAIT', 'VKTM Logical Idle Wait') + + gd(c, 'WAIT', 'VKTM Init Wait for GSGA') + + gd(c, 'WAIT', 'IORM Scheduler Slave Idle Wait') + + gd(c, 'WAIT', 'rdbms ipc message') + + gd(c, 'WAIT', 'OFS idle') + + gd(c, 'WAIT', 'i/o slave wait') + + gd(c, 'WAIT', 'VKRM Idle') + + gd(c, 'WAIT', 'wait for unread message on broadcast channel') + + gd(c, 'WAIT', 'wait for unread message on multiple broadcast channels') + + gd(c, 'WAIT', 'class slave wait') + + gd(c, 'WAIT', 'PING') + + gd(c, 'WAIT', 'watchdog main loop') + + gd(c, 'WAIT', 'process in prespawned state') + + gd(c, 'WAIT', 'DIAG idle wait') + + gd(c, 'WAIT', 'ges remote message') + + gd(c, 'WAIT', 'gcs remote message') + + gd(c, 'WAIT', 'heartbeat monitor sleep') + + gd(c, 'WAIT', 'GCR sleep') + + gd(c, 'WAIT', 'SGA: MMAN sleep for component shrink') + + gd(c, 'WAIT', 'MRP redo arrival') + + gd(c, 'WAIT', 'LNS ASYNC archive log') + + gd(c, 'WAIT', 'LNS ASYNC dest activation') + + gd(c, 'WAIT', 'LNS ASYNC end of log') + + gd(c, 'WAIT', 'simulated log write delay') + + gd(c, 'WAIT', 'heartbeat redo informer') + + gd(c, 'WAIT', 'LGWR real time apply sync') + + gd(c, 'WAIT', 'LGWR worker group idle') + + gd(c, 'WAIT', 'parallel recovery slave idle wait') + + gd(c, 'WAIT', 'Backup Appliance waiting for work') + + gd(c, 'WAIT', 'Backup Appliance waiting restore start') + + gd(c, 'WAIT', 'Backup Appliance Surrogate wait') + + gd(c, 'WAIT', 'Backup Appliance Servlet wait') + + gd(c, 'WAIT', 'Backup Appliance Comm SGA setup wait') + + gd(c, 'WAIT', 'LogMiner builder: idle') + + gd(c, 'WAIT', 'LogMiner builder: branch') + + gd(c, 'WAIT', 'LogMiner preparer: idle') + + gd(c, 'WAIT', 'LogMiner reader: log (idle)') + + gd(c, 'WAIT', 'LogMiner reader: redo (idle)') + + gd(c, 'WAIT', 'LogMiner client: transaction') + + gd(c, 'WAIT', 'LogMiner: other') + + gd(c, 'WAIT', 'LogMiner: activate') + + gd(c, 'WAIT', 'LogMiner: reset') + + gd(c, 'WAIT', 'LogMiner: find session') + + gd(c, 'WAIT', 'LogMiner: internal') + + gd(c, 'WAIT', 'Logical Standby Apply Delay') + + gd(c, 'WAIT', 'parallel recovery coordinator waits for slave cleanup') + + gd(c, 'WAIT', 'parallel recovery coordinator idle wait') + + gd(c, 'WAIT', 'parallel recovery control message reply') + + gd(c, 'WAIT', 'parallel recovery slave next change') + + gd(c, 'WAIT', 'recovery sender idle wait') + + gd(c, 'WAIT', 'recovery receiver idle wait') + + gd(c, 'WAIT', 'recovery merger idle wait ') + + gd(c, 'WAIT', 'PX Deq: Txn Recovery Start') + + gd(c, 'WAIT', 'PX Deq: Txn Recovery Reply') + + gd(c, 'WAIT', 'fbar timer') + + gd(c, 'WAIT', 'smon timer') + + gd(c, 'WAIT', 'PX Deq: Metadata Update') + + gd(c, 'WAIT', 'Space Manager: slave idle wait') + + gd(c, 'WAIT', 'PX Deq: Index Merge Reply') + + gd(c, 'WAIT', 'PX Deq: Index Merge Execute') + + gd(c, 'WAIT', 'PX Deq: Index Merge Close') + + gd(c, 'WAIT', 'PX Deq: kdcph_mai') + + gd(c, 'WAIT', 'PX Deq: kdcphc_ack') + + gd(c, 'WAIT', 'imco timer') + + gd(c, 'WAIT', 'virtual circuit next request') + + gd(c, 'WAIT', 'shared server idle wait') + + gd(c, 'WAIT', 'dispatcher timer') + + gd(c, 'WAIT', 'cmon timer') + + gd(c, 'WAIT', 'pool server timer') + + gd(c, 'WAIT', 'lreg timer') + + gd(c, 'WAIT', 'JOX Jit Process Sleep') + + gd(c, 'WAIT', 'jobq slave wait') + + gd(c, 'WAIT', 'pipe get') + + gd(c, 'WAIT', 'PX Deque wait') + + gd(c, 'WAIT', 'PX Idle Wait') + + gd(c, 'WAIT', 'PX Deq: Join ACK') + + gd(c, 'WAIT', 'PX Deq Credit: need buffer') + + gd(c, 'WAIT', 'PX Deq Credit: send blkd') + + gd(c, 'WAIT', 'PX Deq: Msg Fragment') + + gd(c, 'WAIT', 'PX Deq: Parse Reply') + + gd(c, 'WAIT', 'PX Deq: Execute Reply') + + gd(c, 'WAIT', 'PX Deq: Execution Msg') + + gd(c, 'WAIT', 'PX Deq: Table Q Normal') + + gd(c, 'WAIT', 'PX Deq: Table Q Sample') + + gd(c, 'WAIT', 'REPL Apply: txns') + + gd(c, 'WAIT', 'REPL Capture/Apply: messages') + + gd(c, 'WAIT', 'REPL Capture: archive log') + + gd(c, 'WAIT', 'single-task message') + + gd(c, 'WAIT', 'SQL*Net message from client') + + gd(c, 'WAIT', 'SQL*Net vector message from client') + + gd(c, 'WAIT', 'SQL*Net vector message from dblink') + + gd(c, 'WAIT', 'PL/SQL lock timer') + + gd(c, 'WAIT', 'Streams AQ: emn coordinator idle wait') + + gd(c, 'WAIT', 'EMON slave idle wait') + + gd(c, 'WAIT', 'Emon coordinator main loop') + + gd(c, 'WAIT', 'Emon slave main loop') + + gd(c, 'WAIT', 'Streams AQ: waiting for messages in the queue') + + gd(c, 'WAIT', 'Streams AQ: waiting for time management or cleanup tasks') + + gd(c, 'WAIT', 'Streams AQ: delete acknowledged messages') + + gd(c, 'WAIT', 'Streams AQ: deallocate messages from Streams Pool') + + gd(c, 'WAIT', 'Streams AQ: qmn coordinator idle wait') + + gd(c, 'WAIT', 'Streams AQ: qmn slave idle wait') + + gd(c, 'WAIT', 'AQ: 12c message cache init wait') + + gd(c, 'WAIT', 'AQ Cross Master idle') + + gd(c, 'WAIT', 'AQPC idle') + + gd(c, 'WAIT', 'Streams AQ: load balancer idle') + + gd(c, 'WAIT', 'Sharded Queues : Part Maintenance idle') + + gd(c, 'WAIT', 'REPL Capture/Apply: RAC AQ qmn coordinator') + + gd(c, 'WAIT', 'HS message to agent') + + gd(c, 'WAIT', 'ASM background timer') + + gd(c, 'WAIT', 'iowp msg') + + gd(c, 'WAIT', 'iowp file id') + + gd(c, 'WAIT', 'netp network') + + gd(c, 'WAIT', 'gopp msg') + + gd(c, 'WAIT', 'auto-sqltune: wait graph update') + + gd(c, 'WAIT', 'WCR: replay client notify') + + gd(c, 'WAIT', 'WCR: replay clock') + + gd(c, 'WAIT', 'WCR: replay paused') + + gd(c, 'WAIT', 'JS external job') + + gd(c, 'WAIT', 'cell worker idle') + )) / (get_seconds(d2 - d1)*1000000) * 100 + , 'STAT'), 10) || ' % unaccounted time' ; + else null; + end case; -- mt=time, mn + else null; + end case; -- mt + return ret; + end get_useful_average; + + /*--------------------------------------------------- + -- function for converting large numbers to human-readable format + ---------------------------------------------------*/ + function tptformat( p_num in number, + p_stype in varchar2 default 'STAT', + p_precision in number default 2, + p_base in number default 10, -- for KiB/MiB formatting use + p_grouplen in number default 3 -- p_base=2 and p_grouplen=10 + ) + return varchar2 + is + begin + if p_num = 0 then return '0'; end if; + if p_num IS NULL then return '~'; end if; + + if p_stype in ('WAIT','TIME') then + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then 'us' + when 1 then 'us' + when p_grouplen*1 then 'ms' + when p_grouplen*2 then 's' + when p_grouplen*3 then 'ks' + when p_grouplen*4 then 'Ms' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) )||' us' + end; + + else + + return + round( + p_num / power( p_base , trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ), p_precision + ) + || case trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) + when 0 then '' + when 1 then '' + when p_grouplen*1 then 'k' + when p_grouplen*2 then 'M' + when p_grouplen*3 then 'G' + when p_grouplen*4 then 'T' + when p_grouplen*5 then 'P' + when p_grouplen*6 then 'E' + else '*'||p_base||'^'||to_char( trunc(log(p_base,abs(p_num)))-trunc(mod(log(p_base,abs(p_num)),p_grouplen)) ) + end; + + end if; + + end; -- tptformat + + /*--------------------------------------------------- + -- simple function for parsing arguments from parameter string + ---------------------------------------------------*/ + function getopt( p_parvalues in varchar2, + p_extract in varchar2, + p_delim in varchar2 default ',' + ) return varchar2 + is + ret varchar(1000) := NULL; + begin + + -- dbms_output.put('p_parvalues = ['||p_parvalues||'] ' ); + -- dbms_output.put('p_extract = ['||p_extract||'] ' ); + + if lower(p_parvalues) like lower(p_extract)||'%' + or lower(p_parvalues) like '%'||p_delim||lower(p_extract)||'%' then + + ret := + nvl ( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract), + case + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) + when 0 then length(p_parvalues) + else + instr( + substr(p_parvalues, + instr(p_parvalues, p_extract)+length(p_extract) + ) + , p_delim + ) - 1 + end + ) + , chr(0) -- in case parameter was specified but with no value + ); + + else + ret := null; -- no parameter found + end if; + + -- dbms_output.put_line('ret = ['||replace(ret,chr(0),'\0')||']'); + + return ret; + + end; -- getopt + + /*--------------------------------------------------- + -- proc for getting session list with username, osuser, machine etc + ---------------------------------------------------*/ + procedure get_sessions is + tmp_sessions tmp_sestab; + begin + + select /*+ unnest */ /* get_session_list:1 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and ( + &sid_filter + ) ; + + g_sessions := g_empty_sessions; + + for i in 1..tmp_sessions.count loop + g_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + end; -- get_sessions + + /*--------------------------------------------------- + -- function for getting session list with username, osuser, machine etc + -- this func does not update the g_sessions global array but returns session info as return value + ---------------------------------------------------*/ + function get_sessions return sestab is + tmp_sessions tmp_sestab; + l_return_sessions sestab; + begin + + select /*+ unnest */ /* get_session_list:2 */ + * + bulk collect into + tmp_sessions + from + gv$session s + where + 1=1 + and (&sid_filter) ; + + for i in 1..tmp_sessions.count loop + --output('get_sessions i='||i||' sid='||tmp_sessions(i).sid); + l_return_sessions(tmp_sessions(i).inst_id||','||tmp_sessions(i).sid) := tmp_sessions(i); + end loop; + + return l_return_sessions; + + end; -- get_sessions + + + /*--------------------------------------------------- + -- functions for extracting and converting gv$session + -- records to varchar2 + ---------------------------------------------------*/ + function sitem(p in varchar2) return varchar2 as + begin + return '<'||translate(p, '<>', '__')||'>'; + end; -- sitem varchar2 + + function sitem(p in number) return varchar2 as + begin + return '<'||to_char(p)||'>'; + end; -- sitem number + + function sitem(p in date) return varchar2 as + begin + return '<'||to_char(p, 'YYYY-MM-DD HH24:MI:SS')||'>'; + end; -- sitem date + + function sitem_raw(p in raw) return varchar2 as + begin + return '<'||upper(rawtohex(p))||'>'; + end; -- sitem_raw + + + /*--------------------------------------------------- + -- proc for resetting the snapper ash array + ---------------------------------------------------*/ + procedure reset_ash is + begin + g_ash_samples_taken := 0; + -- clear g_ash + g_ash := new sys.dbms_debug_vc2coll(); + end; -- reset_ash + + + /*--------------------------------------------------- + -- proc for getting ash style samples from gv$session + ---------------------------------------------------*/ + procedure extract_ash is + ash_i varchar2(30); + s gv$session%rowtype; + + begin + -- keep track how many times we sampled gv$session so we could calculate averages later on + g_ash_samples_taken := g_ash_samples_taken + 1; + --output('g_sessions.count='||g_sessions.count); + ash_i := g_sessions.first; + + while ash_i is not null loop + + s := g_sessions(ash_i); + if -- active, on cpu + (s.status = 'ACTIVE' and s.state != 'WAITING' and s.sid != g_mysid) + or -- active, waiting for non-idle wait + (s.status = 'ACTIVE' and s.state = 'WAITING' and s.wait_class != 'Idle' and s.sid != g_mysid) + then + --output('extract_ash: i='||i||' sid='||s.sid||' hv='||s.sql_hash_value||' sqlid='||s.sql_id); + -- if not actually waiting for anything, clear the past wait event details + if s.state != 'WAITING' then + s.state:='ON CPU'; + s.event:='ON CPU'; + s.wait_class:='ON CPU'; --TODO: What do we need to do for 9i here? + s.p1:=NULL; + s.p2:=NULL; + s.p3:=NULL; + end if; + + g_ash.extend; + + -- max length 1000 bytes (due to dbms_debug_vc2coll) + g_ash(g_ash.count) := substr( + sitem(s.inst_id) -- 1 + ||sitem(s.sid) -- 2 + ||sitem(s.username) -- 3 -- 30 bytes + ||sitem(s.machine) -- 4 -- 64 bytes + ||sitem(s.terminal) -- 5 -- 30 bytes + ||sitem(s.program) -- 6 -- 48 bytes + ||sitem(s.event) -- 7 -- 64 bytes + ||sitem(s.wait_class) -- 8 -- 64 bytes, 10g+ + ||sitem(s.state) -- 9 + ||sitem(s.p1) -- 10 + ||sitem(s.p2) -- 11 + ||sitem(s.p3) -- 12 + ||sitem(s.row_wait_obj#) -- 13 + ||sitem(s.row_wait_file#) -- 14 + ||sitem(s.row_wait_block#) -- 15 + ||sitem(s.row_wait_row#) -- 16 + ||sitem(s.blocking_session_status) -- 17 -- 10g+ + &_NO_BLK_INST ||sitem('N/A') -- 17 -- 10gR2+ + &_YES_BLK_INST ||sitem(s.blocking_instance) -- 18 -- 10gR2+ + ||sitem(s.blocking_session) -- 19 -- 10g+ + ||sitem(s.sql_hash_value) -- 20 + ||sitem(s.sql_id) -- 21 -- 10g+ + ||sitem(s.sql_child_number) -- 22 -- 10g+ + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 23 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 24 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 25 + &_NO_PLSQL_OBJ_ID ||sitem('N/A') -- 26 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_object_id) -- 23 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_entry_subprogram_id) -- 24 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_object_id) -- 25 + &_YES_PLSQL_OBJ_ID ||sitem(s.plsql_subprogram_id) -- 26 + ||sitem(s.module) -- 27 -- 48 bytes + ||sitem(s.action) -- 28 -- 32 bytes + ||sitem(s.client_identifier) -- 29 -- 64 bytes + ||sitem(s.service_name) -- 30 -- 64 bytes, 10g+ + &_IF_ORA12_OR_HIGHER ||sitem(s.con_id) -- 31 -- 12c+ + &_IF_LOWER_THAN_ORA12 ||sitem('N/A') -- 31 + , 1, 1000); + + end if; -- sample is of an active session + + ash_i := g_sessions.next(ash_i); + + end loop; + + exception + when no_data_found then output('error in extract_ash(): no_data_found for item '||i); + end; -- extract_ash + + + /*--------------------------------------------------- + -- proc for querying performance data into collections + ---------------------------------------------------*/ + procedure snap( p_snapdate out timestamp, p_stats out stab, l_stats out ltab, p_stats_string out sys.dbms_debug_vc2coll) is + + lv_include_stat varchar2(1000) := nvl( lower(getopt('&snapper_options', 'sinclude=' )), '%'); + lv_include_latch varchar2(1000) := nvl( lower(getopt('&snapper_options', 'linclude=' )), '%'); + lv_include_time varchar2(1000) := nvl( lower(getopt('&snapper_options', 'tinclude=' )), '%'); + lv_include_wait varchar2(1000) := nvl( lower(getopt('&snapper_options', 'winclude=' )), '%'); + + lstr varchar2(1000); + + begin + + p_snapdate := systimestamp; + + select /* get_session_stats */ p_snapdate ts, snapper_stats.* + bulk collect into p_stats + from ( + select 'STAT' stype, s.inst_id, s.sid, ss.statistic# - pls_adjust statistic#, ss.value, null event_count + from gv$session s, gv$sesstat ss + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = ss.inst_id + and s.sid = ss.sid + and (lv_gather like '%s%' or lv_gather like '%a%') + and ss.statistic# in (select /*+ no_unnest */ statistic# from v$statname + where lower(name) like '%'||lv_include_stat||'%' + or regexp_like (name, lv_include_stat, 'i') + ) + -- + union all + select + 'WAIT', s.inst_id, s.sid, + en.event# + (select count(*) from v$statname) + 1 - pls_adjust, + nvl(se.time_waited_micro,0) + ( decode(se.event||s.state, s.event||'WAITING', + CASE WHEN s.seconds_in_wait > 1300000000 THEN 0 ELSE s.seconds_in_wait END -- bug in v$session + , 0) * 1000000 ) value, total_waits event_count + from gv$session s, gv$session_event se, v$event_name en + where &sid_filter + and s.sid = se.sid + and s.inst_id = se.inst_id + and se.event = en.name + --and (se.inst_id, se.sid) in (&snapper_sid) + and (lv_gather like '%w%' or lv_gather like '%a%') + and en.event# in (select event# from v$event_name + where lower(name) like '%'||lv_include_wait||'%' + or regexp_like (name, lv_include_wait, 'i') + ) + -- + union all + select 'TIME' stype, s.inst_id, s.sid, st.stat_id - pls_adjust statistic#, st.value, null event_count + from gv$session s, gv$sess_time_model st + where &sid_filter --(inst_id,sid) in (&snapper_sid) + and s.inst_id = st.inst_id + and s.sid = st.sid + and (lv_gather like '%t%' or lv_gather like '%a%') + and st.stat_id in (select stat_id from gv$sys_time_model + where lower(stat_name) like '%'||lv_include_time||'%' + or regexp_like (stat_name, lv_include_time, 'i') + ) + -- + union all + select 'LATG', s.inst_id, -1 sid, + s.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + s.gets + s.immediate_gets value, null event_count + from gv$latch s + where &inst_filter + and (lv_gather like '%l%' or lv_gather like '%a%') + and latch# in (select latch# from v$latchname + where lower(name) like '%'||lv_include_latch||'%' + or regexp_like (name, lv_include_latch, 'i') + ) + -- + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 union all + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.why0+s.why1+s.why2 value, null event_count + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 from x$kcbsw s, x$kcbwh w + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 where + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 s.indx = w.indx + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and s.why0+s.why1+s.why2 > 0 + &_IF_X_ACCESSIBLE &_IF_LOWER_THAN_ORA11 and (lv_gather like '%b%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER union all + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER select 'BUFG', to_number(sys_context('userenv', 'instance')), -1 sid, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER sw.indx + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.why0+why.why1+why.why2+sw.other_wait value, null event_count + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER from + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbuwhy why, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbwh dsc, + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER x$kcbsw sw + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER where + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER why.indx = dsc.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = dsc.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.inst_id = sw.inst_id + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.why0 + why.why1 + why.why2 + sw.other_wait > 0 + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and dsc.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and why.indx = sw.indx + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER -- deliberate cartesian join + &_IF_X_ACCESSIBLE &_IF_ORA11_OR_HIGHER and (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', s.inst_id, -1 sid, + ascii(substr(s.eq_type,1,1))*256 + ascii(substr(s.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + s.total_req# value, null event_count + from gv$enqueue_stat s + where &inst_filter + and (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_stats + order by inst_id, sid, stype, statistic#; + + if p_stats.COUNT > 0 then + -- l_stats is an associative array for stats lookup, used for the useful averages calculation + -- p_stats_string is a dbms_debug_vc2coll collection datatype for "persisting" stats values across snapper DB calls (for "before" and "after" snaps) + p_stats_string := sys.dbms_debug_vc2coll(); + for s in p_stats.first..p_stats.last loop + -- type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + + if g_snap_begin is not null then + p_stats_string.extend(); + p_stats_string(s) := TO_CHAR(p_stats(s).ts, 'YYYY-MM-DD HH24:MI:SS.FF') ||','|| + p_stats(s).stype ||','|| + TO_CHAR(p_stats(s).inst_id) ||','|| + TO_CHAR(p_stats(s).sid) ||','|| + TRIM(TO_CHAR(p_stats(s).statistic#, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).value, '999999999999999999999999'))||','|| + TRIM(TO_CHAR(p_stats(s).event_count,'999999999999999999999999')); + --output('p_stats.p_stats_string='||p_stats_string(s)); + end if; + end loop; -- s in (p_stats) + end if; -- p.stats.COUNT > 0 + end snap; + + + /*--------------------------------------------------- + -- proc for reversing the string-normalized + -- stats array into lookup tables/collections + ---------------------------------------------------*/ + procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out timestamp, p_stats out stab, l_stats out ltab) + is + lstr varchar2(1000); + lv_rec srec; + begin + p_snapdate := NULL; + --type srec is record (stype varchar2(4), sid number, statistic# number, value number, event_count number ); + for s in p_string_stats.first .. p_string_stats.last loop + lv_rec.ts := TO_TIMESTAMP(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 1),',',''), 'YYYY-MM-DD HH24:MI:SS.FF'); + lv_rec.stype := replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 2),',',''); + lv_rec.inst_id := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 3),',','')); + lv_rec.sid := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 4),',','')); + lv_rec.statistic# := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 5),',','')); + lv_rec.value := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 6),',','')); + lv_rec.event_count := TO_NUMBER(replace(regexp_substr(p_string_stats(s)||',', '(.*?),', 1, 7),',','')); + --output('snap_from_stats_string.event_count = '||to_char(lv_rec.event_count)); + + p_stats(s) := lv_rec; + lstr := p_stats(s).stype||','||trim(to_char(p_stats(s).inst_id))||','||trim(to_char(p_stats(s).sid))||','||trim(to_char(p_stats(s).statistic#,'999999999999999999999999')); + l_stats(lstr) := p_stats(s); + end loop; + + p_snapdate := lv_rec.ts; + end snap_from_stats_string; + + /*--------------------------------------------------- + -- proc for dumping ASH data out in grouped + -- and ordered fashion + ---------------------------------------------------*/ + procedure out_ash( p_ash_columns in varchar2, p_topn in number := 10 ) as + + -- whether to print given column or not + p_inst_id number := 0; + p_sid number := 0; + p_username number := 0; + p_machine number := 0; + p_terminal number := 0; + p_program number := 0; + p_event number := 0; + p_wait_class number := 0; + p_state number := 0; + p_p1 number := 0; + p_p2 number := 0; + p_p3 number := 0; + p_row_wait_obj# number := 0; + p_row_wait_file# number := 0; + p_row_wait_block# number := 0; + p_row_wait_row# number := 0; + p_blocking_session_status number := 0; + p_blocking_instance number := 0; + p_blocking_session number := 0; + p_sql_hash_value number := 0; + p_sql_id number := 0; + p_sql_child_number number := 0; + p_plsql_entry_object_id number := 0; + p_plsql_entry_subprogram_id number := 0; + p_plsql_object_id number := 0; + p_plsql_subprogram_id number := 0; + p_module number := 0; + p_action number := 0; + p_client_identifier number := 0; + p_service_name number := 0; + p_con_id number := 0; + + -- temporary variables for holding session details (for later formatting) + o_inst_id varchar2(100); + o_sid varchar2(100); + o_username varchar2(100); + o_machine varchar2(100); + o_terminal varchar2(100); + o_program varchar2(100); + o_event varchar2(100); + o_wait_class varchar2(100); + o_state varchar2(100); + o_p1 varchar2(100); + o_p2 varchar2(100); + o_p3 varchar2(100); + o_row_wait_obj# varchar2(100); + o_row_wait_file# varchar2(100); + o_row_wait_block# varchar2(100); + o_row_wait_row# varchar2(100); + o_blocking_session_status varchar2(100); + o_blocking_instance varchar2(100); + o_blocking_session varchar2(100); + o_sql_hash_value varchar2(100); + o_sql_id varchar2(100); + o_sql_child_number varchar2(100); + o_plsql_entry_object_id varchar2(100); + o_plsql_entry_subprogram_id varchar2(100); + o_plsql_object_id varchar2(100); + o_plsql_subprogram_id varchar2(100); + o_module varchar2(100); + o_action varchar2(100); + o_client_identifier varchar2(100); + o_service_name varchar2(100); + o_con_id varchar2(100); + + -- helper local vars + l_ash_grouping number := 0; + l_output_line varchar2(4000); + l_ash_header_line varchar2(4000); + + begin + + -- bail out if no ASH samples recorded + if g_ash.count = 0 then + output(' '); + return; + end if; + + + l_ash_header_line := ''; + if output_actses = 1 then l_ash_header_line := l_ash_header_line || ' ActSes'; end if; + if output_actses_pct = 1 then l_ash_header_line := l_ash_header_line || ' %Thread'; end if; + + -- ash,ash1,ash2,ash3,ash4,ash5,ash6 parameter column group tokenizer + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + -- supported ASH column names + case s.token + -- actual column names in gv$session + when 'inst_id' then l_ash_grouping := l_ash_grouping + c_inst_id ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('INST_ID' , w_inst_id , ' '); + when 'con_id' then l_ash_grouping := l_ash_grouping + c_con_id ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('CON_ID' , w_con_id , ' '); + when 'sid' then l_ash_grouping := l_ash_grouping + c_sid ; l_ash_header_line := l_ash_header_line || ' | ' || lpad('SID' , w_sid , ' '); + when 'username' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'machine' then l_ash_grouping := l_ash_grouping + c_machine ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MACHINE' , w_machine , ' '); + when 'terminal' then l_ash_grouping := l_ash_grouping + c_terminal ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('TERMINAL' , w_terminal , ' '); + when 'program' then l_ash_grouping := l_ash_grouping + c_program ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PROGRAM' , w_program , ' '); + when 'event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_class' then l_ash_grouping := l_ash_grouping + c_wait_class ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('WAIT_CLASS' , w_wait_class , ' '); + when 'state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + when 'p1' then l_ash_grouping := l_ash_grouping + c_p1 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P1' , w_p1 , ' '); + when 'p2' then l_ash_grouping := l_ash_grouping + c_p2 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P2' , w_p2 , ' '); + when 'p3' then l_ash_grouping := l_ash_grouping + c_p3 ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('P3' , w_p3 , ' '); + when 'row_wait_obj#' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'row_wait_file#' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'row_wait_block#' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row_wait_row#' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'blocking_session_status' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'blocking_instance' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'blocking_session' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql_hash_value' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sql_id' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'sql_child_number' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_entry_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_entry_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_object_id' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subprogram_id' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'module' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'action' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'client_identifier' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service_name' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then l_ash_grouping := l_ash_grouping + c_username ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('USERNAME' , w_username , ' '); + when 'obj' then l_ash_grouping := l_ash_grouping + c_row_wait_obj# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_OBJ#' , w_row_wait_obj# , ' '); + when 'file' then l_ash_grouping := l_ash_grouping + c_row_wait_file# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_FILE#' , w_row_wait_file# , ' '); + when 'block' then l_ash_grouping := l_ash_grouping + c_row_wait_block# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_BLOCK#' , w_row_wait_block# , ' '); + when 'row' then l_ash_grouping := l_ash_grouping + c_row_wait_row# ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ROW_WAIT_ROW#' , w_row_wait_row# , ' '); + when 'bss' then l_ash_grouping := l_ash_grouping + c_blocking_session_status ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION_STATUS' , w_blocking_session_status , ' '); + when 'bsi' then l_ash_grouping := l_ash_grouping + c_blocking_instance ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_INSTANCE' , w_blocking_instance , ' '); + when 'bs' then l_ash_grouping := l_ash_grouping + c_blocking_session ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('BLOCKING_SESSION' , w_blocking_session , ' '); + when 'sql' then l_ash_grouping := l_ash_grouping + c_sql_hash_value ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_HASH_VALUE' , w_sql_hash_value , ' '); + when 'sqlid' then l_ash_grouping := l_ash_grouping + c_sql_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_ID' , w_sql_id , ' '); + when 'child' then l_ash_grouping := l_ash_grouping + c_sql_child_number ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SQL_CHILD_NUMBER' , w_sql_child_number , ' '); + when 'plsql_eoid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_OBJECT_ID' , w_plsql_entry_object_id , ' '); + when 'plsql_esubpid' then l_ash_grouping := l_ash_grouping + c_plsql_entry_subprogram_id; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_ENTRY_SUBPROGRAM_ID' , w_plsql_entry_subprogram_id, ' '); + when 'plsql_oid' then l_ash_grouping := l_ash_grouping + c_plsql_object_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_OBJECT_ID' , w_plsql_object_id , ' '); + when 'plsql_subpid' then l_ash_grouping := l_ash_grouping + c_plsql_subprogram_id ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('PLSQL_SUBPROGRAM_ID' , w_plsql_subprogram_id , ' '); + when 'mod' then l_ash_grouping := l_ash_grouping + c_module ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('MODULE' , w_module , ' '); + when 'act' then l_ash_grouping := l_ash_grouping + c_action ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('ACTION' , w_action , ' '); + when 'cid' then l_ash_grouping := l_ash_grouping + c_client_identifier ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('CLIENT_IDENTIFIER' , w_client_identifier , ' '); + when 'service' then l_ash_grouping := l_ash_grouping + c_service_name ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('SERVICE_NAME' , w_service_name , ' '); + when 'wait_event' then l_ash_grouping := l_ash_grouping + c_event ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('EVENT' , w_event , ' '); + when 'wait_state' then l_ash_grouping := l_ash_grouping + c_state ; l_ash_header_line := l_ash_header_line || ' | ' || rpad('STATE' , w_state , ' '); + else + null; + raise_application_error(-20001, 'Snapper: Invalid ASH column name, search for "ASH column name"'||chr(10)||'in snapper.sql script to see supported column names.'||chr(10)||sqlerrm); + end case; -- case s.token + + end loop; -- tokenizer + + output(' '); + output(lpad('-',length(l_ash_header_line),'-')); + output(l_ash_header_line); + output(lpad('-',length(l_ash_header_line),'-')); + + -- this is needed for "easy" sorting and group by ops (without any custom stored object types!) + for i in ( + with /* get_aggregates_from_ash */ raw_records as ( + select column_value rec from table(cast(g_ash as sys.dbms_debug_vc2coll)) + ), + ash_records as ( + select + substr(r.rec, instr(r.rec, '<', 1, 1)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 1)+1), '>')-1) inst_id + , substr(r.rec, instr(r.rec, '<', 1, 2)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 2)+1), '>')-1) sid + , substr(r.rec, instr(r.rec, '<', 1, 3)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 3)+1), '>')-1) username + , substr(r.rec, instr(r.rec, '<', 1, 4)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 4)+1), '>')-1) machine + , substr(r.rec, instr(r.rec, '<', 1, 5)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 5)+1), '>')-1) terminal + , substr(r.rec, instr(r.rec, '<', 1, 6)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 6)+1), '>')-1) program + , substr(r.rec, instr(r.rec, '<', 1, 7)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 7)+1), '>')-1) event + , substr(r.rec, instr(r.rec, '<', 1, 8)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 8)+1), '>')-1) wait_class + , substr(r.rec, instr(r.rec, '<', 1, 9)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 9)+1), '>')-1) state + , substr(r.rec, instr(r.rec, '<', 1, 10)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 10)+1), '>')-1) p1 + , substr(r.rec, instr(r.rec, '<', 1, 11)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 11)+1), '>')-1) p2 + , substr(r.rec, instr(r.rec, '<', 1, 12)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 12)+1), '>')-1) p3 + , substr(r.rec, instr(r.rec, '<', 1, 13)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 13)+1), '>')-1) row_wait_obj# + , substr(r.rec, instr(r.rec, '<', 1, 14)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 14)+1), '>')-1) row_wait_file# + , substr(r.rec, instr(r.rec, '<', 1, 15)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 15)+1), '>')-1) row_wait_block# + , substr(r.rec, instr(r.rec, '<', 1, 16)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 16)+1), '>')-1) row_wait_row# + , substr(r.rec, instr(r.rec, '<', 1, 17)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 17)+1), '>')-1) blocking_session_status + , substr(r.rec, instr(r.rec, '<', 1, 18)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 18)+1), '>')-1) blocking_instance + , substr(r.rec, instr(r.rec, '<', 1, 19)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 19)+1), '>')-1) blocking_session + , substr(r.rec, instr(r.rec, '<', 1, 20)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 20)+1), '>')-1) sql_hash_value + , substr(r.rec, instr(r.rec, '<', 1, 21)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 21)+1), '>')-1) sql_id + , substr(r.rec, instr(r.rec, '<', 1, 22)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 22)+1), '>')-1) sql_child_number + , substr(r.rec, instr(r.rec, '<', 1, 23)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 23)+1), '>')-1) plsql_entry_object_id + , substr(r.rec, instr(r.rec, '<', 1, 24)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 24)+1), '>')-1) plsql_entry_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 25)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 25)+1), '>')-1) plsql_object_id + , substr(r.rec, instr(r.rec, '<', 1, 26)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 26)+1), '>')-1) plsql_subprogram_id + , substr(r.rec, instr(r.rec, '<', 1, 27)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 27)+1), '>')-1) module + , substr(r.rec, instr(r.rec, '<', 1, 28)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 28)+1), '>')-1) action + , substr(r.rec, instr(r.rec, '<', 1, 29)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 29)+1), '>')-1) client_identifier + , substr(r.rec, instr(r.rec, '<', 1, 30)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 30)+1), '>')-1) service_name + , substr(r.rec, instr(r.rec, '<', 1, 31)+1, instr (substr(r.rec, instr(r.rec, '<', 1, 31)+1), '>')-1) con_id + from + raw_records r + ) + select * from ( + select + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) as inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) as sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) as username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) as machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) as terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) as program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) as event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) as wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) as state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) as p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) as p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) as p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) as row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) as row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) as row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) as row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) as blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) as blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) as blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) as sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) as sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) as sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) as plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) as plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) as plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) as plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) as module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) as action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) as client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) as service_name + , decode(bitand(l_ash_grouping, power(2, s_con_id )), 0, chr(0), con_id ) as con_id + , count(*)/g_ash_samples_taken average_active_samples + from + ash_records a + group by + decode(bitand(l_ash_grouping, power(2, s_inst_id )), 0, chr(0), inst_id ) -- inst_id + , decode(bitand(l_ash_grouping, power(2, s_sid )), 0, chr(0), sid ) -- sid + , decode(bitand(l_ash_grouping, power(2, s_username )), 0, chr(0), username ) -- username + , decode(bitand(l_ash_grouping, power(2, s_machine )), 0, chr(0), machine ) -- machine + , decode(bitand(l_ash_grouping, power(2, s_terminal )), 0, chr(0), terminal ) -- terminal + , decode(bitand(l_ash_grouping, power(2, s_program )), 0, chr(0), program ) -- program + , decode(bitand(l_ash_grouping, power(2, s_event )), 0, chr(0), event ) -- event + , decode(bitand(l_ash_grouping, power(2, s_wait_class )), 0, chr(0), wait_class ) -- wait_class + , decode(bitand(l_ash_grouping, power(2, s_state )), 0, chr(0), state ) -- state + , decode(bitand(l_ash_grouping, power(2, s_p1 )), 0, chr(0), p1 ) -- p1 + , decode(bitand(l_ash_grouping, power(2, s_p2 )), 0, chr(0), p2 ) -- p2 + , decode(bitand(l_ash_grouping, power(2, s_p3 )), 0, chr(0), p3 ) -- p3 + , decode(bitand(l_ash_grouping, power(2, s_row_wait_obj# )), 0, chr(0), row_wait_obj# ) -- row_wait_obj# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_file# )), 0, chr(0), row_wait_file# ) -- row_wait_file# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_block# )), 0, chr(0), row_wait_block# ) -- row_wait_block# + , decode(bitand(l_ash_grouping, power(2, s_row_wait_row# )), 0, chr(0), row_wait_row# ) -- row_wait_row# + , decode(bitand(l_ash_grouping, power(2, s_blocking_session_status )), 0, chr(0), blocking_session_status ) -- blocking_session_status + , decode(bitand(l_ash_grouping, power(2, s_blocking_instance )), 0, chr(0), blocking_instance ) -- blocking_instance + , decode(bitand(l_ash_grouping, power(2, s_blocking_session )), 0, chr(0), blocking_session ) -- blocking_session + , decode(bitand(l_ash_grouping, power(2, s_sql_hash_value )), 0, chr(0), sql_hash_value ) -- sql_hash_value + , decode(bitand(l_ash_grouping, power(2, s_sql_id )), 0, chr(0), sql_id ) -- sql_id + , decode(bitand(l_ash_grouping, power(2, s_sql_child_number )), 0, chr(0), sql_child_number ) -- sql_child_number + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_object_id )), 0, chr(0), plsql_entry_object_id ) -- plsql_entry_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_entry_subprogram_id )), 0, chr(0), plsql_entry_subprogram_id ) -- plsql_entry_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_object_id )), 0, chr(0), plsql_object_id ) -- plsql_object_id + , decode(bitand(l_ash_grouping, power(2, s_plsql_subprogram_id )), 0, chr(0), plsql_subprogram_id ) -- plsql_subprogram_id + , decode(bitand(l_ash_grouping, power(2, s_module )), 0, chr(0), module ) -- module + , decode(bitand(l_ash_grouping, power(2, s_action )), 0, chr(0), action ) -- action + , decode(bitand(l_ash_grouping, power(2, s_client_identifier )), 0, chr(0), client_identifier ) -- client_identifier + , decode(bitand(l_ash_grouping, power(2, s_service_name )), 0, chr(0), service_name ) -- service_name + , decode(bitand(l_ash_grouping, power(2, s_con_id )), 0, chr(0), con_id ) -- con_id + order by + count(*)/g_ash_samples_taken desc + ) + where rownum <= p_topn + ) loop + + l_output_line := ''; + + o_inst_id := CASE WHEN i.inst_id = chr(0) THEN null ELSE nvl(i.inst_id , ' ') END; + o_sid := CASE WHEN i.sid = chr(0) THEN null ELSE nvl(i.sid , ' ') END; + o_username := CASE WHEN i.username = chr(0) THEN null ELSE nvl(i.username , ' ') END; + o_machine := CASE WHEN i.machine = chr(0) THEN null ELSE nvl(i.machine , ' ') END; + o_terminal := CASE WHEN i.terminal = chr(0) THEN null ELSE nvl(i.terminal , ' ') END; + o_program := CASE WHEN i.program = chr(0) THEN null ELSE nvl(i.program , ' ') END; + o_event := CASE WHEN i.event = chr(0) THEN null ELSE nvl(i.event , ' ') END; + o_wait_class := CASE WHEN i.wait_class = chr(0) THEN null ELSE nvl(i.wait_class , ' ') END; + o_state := CASE WHEN i.state = chr(0) THEN null ELSE nvl(i.state , ' ') END; + o_p1 := CASE WHEN i.p1 = chr(0) THEN null ELSE nvl(i.p1 , ' ') END; + o_p2 := CASE WHEN i.p2 = chr(0) THEN null ELSE nvl(i.p2 , ' ') END; + o_p3 := CASE WHEN i.p3 = chr(0) THEN null ELSE nvl(i.p3 , ' ') END; + o_row_wait_obj# := CASE WHEN i.row_wait_obj# = chr(0) THEN null ELSE nvl(i.row_wait_obj# , ' ') END; + o_row_wait_file# := CASE WHEN i.row_wait_file# = chr(0) THEN null ELSE nvl(i.row_wait_file# , ' ') END; + o_row_wait_block# := CASE WHEN i.row_wait_block# = chr(0) THEN null ELSE nvl(i.row_wait_block# , ' ') END; + o_row_wait_row# := CASE WHEN i.row_wait_row# = chr(0) THEN null ELSE nvl(i.row_wait_row# , ' ') END; + o_blocking_session_status := CASE WHEN i.blocking_session_status = chr(0) THEN null ELSE nvl(i.blocking_session_status , ' ') END; + o_blocking_instance := CASE WHEN i.blocking_instance = chr(0) THEN null ELSE nvl(i.blocking_instance , ' ') END; + o_blocking_session := CASE WHEN i.blocking_session = chr(0) THEN null ELSE nvl(i.blocking_session , ' ') END; + o_sql_hash_value := CASE WHEN i.sql_hash_value = chr(0) THEN null ELSE nvl(i.sql_hash_value , ' ') END; + o_sql_id := CASE WHEN i.sql_id = chr(0) THEN null ELSE nvl(i.sql_id , ' ') END; + o_sql_child_number := CASE WHEN i.sql_child_number = chr(0) THEN null ELSE nvl(i.sql_child_number , ' ') END; + o_plsql_entry_object_id := CASE WHEN i.plsql_entry_object_id = chr(0) THEN null ELSE nvl(i.plsql_entry_object_id , ' ') END; + o_plsql_entry_subprogram_id := CASE WHEN i.plsql_entry_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_entry_subprogram_id , ' ') END; + o_plsql_object_id := CASE WHEN i.plsql_object_id = chr(0) THEN null ELSE nvl(i.plsql_object_id , ' ') END; + o_plsql_subprogram_id := CASE WHEN i.plsql_subprogram_id = chr(0) THEN null ELSE nvl(i.plsql_subprogram_id , ' ') END; + o_module := CASE WHEN i.module = chr(0) THEN null ELSE nvl(i.module , ' ') END; + o_action := CASE WHEN i.action = chr(0) THEN null ELSE nvl(i.action , ' ') END; + o_client_identifier := CASE WHEN i.client_identifier = chr(0) THEN null ELSE nvl(i.client_identifier , ' ') END; + o_service_name := CASE WHEN i.service_name = chr(0) THEN null ELSE nvl(i.service_name , ' ') END; + o_con_id := CASE WHEN i.con_id = chr(0) THEN null ELSE nvl(i.con_id , ' ') END; + + -- print the AAS and activity % as the first columns + l_output_line := ''; + if output_actses = 1 then l_output_line := l_output_line || lpad(to_char(round(i.average_active_samples,2),'9999.99'), w_actses, ' '); end if; + if output_actses_pct = 1 then l_output_line := l_output_line || lpad('('||to_char(round(i.average_active_samples*100))||'%)', w_actses_pct, ' '); end if; + + -- loop through ash columns to find what to print and in which order + for s in ( + SELECT LEVEL + , SUBSTR + ( TOKEN + , DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + , INSTR(TOKEN, DELIMITER, 1, LEVEL) - + DECODE(LEVEL, 1, 1, INSTR(TOKEN, DELIMITER, 1, LEVEL-1)+1) + ) TOKEN + FROM ( SELECT REPLACE( LOWER(p_ash_columns) ,' ','')||'+' AS TOKEN + , '+' AS DELIMITER + FROM DUAL + ) + CONNECT BY + INSTR(TOKEN, DELIMITER, 1, LEVEL)>0 + ORDER BY + LEVEL ASC + ) loop + l_output_line := l_output_line || ' | ' || + case s.token + -- actual column names in gv$session + when 'inst_id' then lpad(o_inst_id , w_inst_id , ' ') + when 'con_id' then lpad(o_con_id , w_con_id , ' ') + when 'sid' then lpad(o_sid , w_sid , ' ') + when 'username' then rpad(o_username , w_username , ' ') + when 'machine' then rpad(o_machine , w_machine , ' ') + when 'terminal' then rpad(o_terminal , w_terminal , ' ') + when 'program' then rpad(o_program , w_program , ' ') + when 'event' then rpad(o_event , w_event , ' ') + when 'wait_class' then rpad(o_wait_class , w_wait_class , ' ') + when 'state' then rpad(o_state , w_state , ' ') + when 'p1' then rpad(o_p1 , w_p1 , ' ') + when 'p2' then rpad(o_p2 , w_p2 , ' ') + when 'p3' then rpad(o_p3 , w_p3 , ' ') + when 'row_wait_obj#' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'row_wait_file#' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'row_wait_block#' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row_wait_row#' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'blocking_session_status' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'blocking_instance' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'blocking_session' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql_hash_value' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sql_id' then rpad(o_sql_id , w_sql_id , ' ') + when 'sql_child_number' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_entry_object_id' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_entry_subprogram_id' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_object_id' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subprogram_id' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'module' then rpad(o_module , w_module , ' ') + when 'action' then rpad(o_action , w_action , ' ') + when 'client_identifier' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service_name' then rpad(o_service_name , w_service_name , ' ') + -- aliases for convenience (only either real name or alias should be used together at the same time) + when 'user' then rpad(o_username , w_username , ' ') + when 'obj' then rpad(o_row_wait_obj# , w_row_wait_obj# , ' ') + when 'file' then rpad(o_row_wait_file# , w_row_wait_file# , ' ') + when 'block' then rpad(o_row_wait_block# , w_row_wait_block# , ' ') + when 'row' then rpad(o_row_wait_row# , w_row_wait_row# , ' ') + when 'bss' then rpad(o_blocking_session_status , w_blocking_session_status , ' ') + when 'bsi' then rpad(o_blocking_instance , w_blocking_instance , ' ') + when 'bs' then rpad(o_blocking_session , w_blocking_session , ' ') + when 'sql' then rpad(o_sql_hash_value , w_sql_hash_value , ' ') + when 'sqlid' then rpad(o_sql_id , w_sql_id , ' ') + when 'child' then rpad(o_sql_child_number , w_sql_child_number , ' ') + when 'plsql_eoid' then rpad(o_plsql_entry_object_id , w_plsql_entry_object_id , ' ') + when 'plsql_esubpid' then rpad(o_plsql_entry_subprogram_id , w_plsql_entry_subprogram_id, ' ') + when 'plsql_oid' then rpad(o_plsql_object_id , w_plsql_object_id , ' ') + when 'plsql_subpid' then rpad(o_plsql_subprogram_id , w_plsql_subprogram_id , ' ') + when 'mod' then rpad(o_module , w_module , ' ') + when 'act' then rpad(o_action , w_action , ' ') + when 'cid' then rpad(o_client_identifier , w_client_identifier , ' ') + when 'service' then rpad(o_service_name , w_service_name , ' ') + when 'wait_event' then rpad(o_event , w_event , ' ') + when 'wait_state' then rpad(o_state , w_state , ' ') + else + '' + end; -- case s.token + + end loop; -- ash parameter tokenizer + + output(l_output_line); + + end loop; -- grouped ash samples + + end out_ash; + + +-- and it begins!!! +begin + + -- get snappers own sid into g_mysid + select sid into g_mysid from v$mystat where rownum = 1; + + pagesize := nvl( getopt('&snapper_options', 'pagesize=' ), pagesize); + --output ( 'Pagesize='||pagesize ); + + lv_ash := getopt('&snapper_options', 'ash'); + lv_stats := getopt('&snapper_options', 'stat'); + + if lv_ash is not null then gather_ash := 1; end if; + if lv_stats is not null then gather_stats := 1; end if; + + --output('all='||case when getopt('&snapper_options', 'all') = chr(0) then 'chr(0)' when getopt('&snapper_options', 'all') is null then 'null' else (getopt('&snapper_options','all')) end); + -- some additional default value logic + if getopt('&snapper_options', 'all') is not null then + --output('setting stats to all due to option = all'); + gather_stats := 1; + gather_ash := 1; + else + if (lv_ash is null and lv_stats is null) then + gather_stats := 0; + gather_ash := 1; + end if; + end if; + + -- determine which performance counters and stats to collect + lv_gather := case nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + when 'all' then 'stw' + else nvl( lower(getopt ('&snapper_options', 'gather=')), 'stw') + end; + + --lv_gather:=getopt ('&snapper_options', 'gather='); + --output('lv_gather='||lv_gather); + + g_snap_begin := lower(getopt('&snapper_options', 'begin' )); + g_snap_end := lower(getopt('&snapper_options', 'end' )); + --output('g_snap_begin = '||g_snap_begin); + --output('g_snap_end = '||g_snap_end); + + if pagesize > 0 then + output(' '); + output('-- Session Snapper v4.24 - by Tanel Poder ( http://blog.tanelpoder.com/snapper ) - Enjoy the Most Advanced Oracle Troubleshooting Script on the Planet! :)'); + output(' '); + end if; + + -- initialize statistic and event name array + -- fetch statistic names with their adjusted IDs + select /* get_stat_names */ * + bulk collect into sn_tmp + from ( + select 'STAT' stype, statistic# - pls_adjust statistic#, name + from v$statname + where (lv_gather like '%s%' or lv_gather like '%a%') + -- + union all + select 'WAIT', + event# + (select count(*) from v$statname) + 1 - pls_adjust, name + from v$event_name + where (lv_gather like '%w%' or lv_gather like '%a%') + -- + union all + select 'TIME' stype, stat_id - pls_adjust statistic#, stat_name name + from gv$sys_time_model + where (lv_gather like '%t%' or lv_gather like '%a%') + -- + union all + select 'LATG', + l.latch# + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + 1 - pls_adjust statistic#, + name + from gv$latch l + where (lv_gather like '%l%' or lv_gather like '%a%') + -- + &_IF_X_ACCESSIBLE union all + &_IF_X_ACCESSIBLE select 'BUFG', + &_IF_X_ACCESSIBLE indx + + &_IF_X_ACCESSIBLE (select count(*) from v$statname) + + &_IF_X_ACCESSIBLE (select count(*) from v$event_name) + + &_IF_X_ACCESSIBLE (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE 1 - pls_adjust statistic#, + &_IF_X_ACCESSIBLE kcbwhdes name + &_IF_X_ACCESSIBLE from x$kcbwh + &_IF_X_ACCESSIBLE where (lv_gather like '%b%' or lv_gather like '%a%') + -- + union all + select 'ENQG', + ascii(substr(e.eq_type,1,1))*256 + ascii(substr(e.eq_type,2,1)) + + (select count(*) from v$statname) + + (select count(*) from v$event_name) + + (select count(*) from gv$latch) + + &_IF_X_ACCESSIBLE (select count(*) from x$kcbwh) + + 1 - pls_adjust statistic#, + eq_type + from ( + select es.eq_type + ||' - '||lt.name + eq_type, + total_req# + from + gv$enqueue_stat es + , gv$lock_type lt + where es.eq_type = lt.type + ) e + where (lv_gather like '%e%' or lv_gather like '%a%') + ) snapper_statnames + order by stype, statistic#; + + -- store these into an index_by array organized by statistic# for fast lookup + for i in 1..sn_tmp.count loop + sn(sn_tmp(i).statistic#) := sn_tmp(i); + sn_reverse(sn_tmp(i).stype||','||sn_tmp(i).name) := sn_tmp(i); + end loop; + + + -- main sampling loop + for c in 1..&snapper_count loop + + -- sesstat and other performance counter sampling + if gather_stats = 1 then + + -- print header if required + gv_header_string := + CASE WHEN output_header = 1 THEN 'HEAD,' END + || CASE WHEN output_inst = 1 THEN ' INST,' END + || CASE WHEN output_sid = 1 THEN ' SID,' END + || CASE WHEN output_inst_sid = 1 THEN ' SID @INST,' END + || CASE WHEN output_username = 1 THEN ' USERNAME ,' END + || CASE WHEN output_time = 1 THEN ' SNAPSHOT START ,' END + || CASE WHEN output_seconds = 1 THEN ' SECONDS,' END + || CASE WHEN output_stype = 1 THEN ' TYPE,' END + || CASE WHEN output_sname = 1 THEN rpad(' STATISTIC',59,' ')||',' END + || CASE WHEN output_delta = 1 THEN ' DELTA,' END + || CASE WHEN output_delta_s = 1 THEN ' DELTA/SEC,' END + || CASE WHEN output_hdelta = 1 THEN ' HDELTA,' END + || CASE WHEN output_hdelta_s = 1 THEN ' HDELTA/SEC,' END + || CASE WHEN output_percent = 1 THEN ' %TIME,' END + || CASE WHEN output_pcthist = 1 THEN ' GRAPH ,' END + || CASE WHEN output_eventcnt = 1 THEN ' NUM_WAITS,' END + || CASE WHEN output_eventcnt_s = 1 THEN ' WAITS/SEC,' END + || CASE WHEN output_eventavg = 1 THEN ' AVERAGES ' END + ; + + + if g_snap_begin is null then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + output(rpad('-',length(gv_header_string),'-')); + output(gv_header_string); + output(rpad('-',length(gv_header_string),'-')); + else + if pagesize = -1 and c = 1 then + output(gv_header_string); + end if; + end if; + else + output('Taking BEGIN sample ...'); + end if; + + -- TODO raise an error if both begin and end are used together + -- TODO conditionally comment out the refcursor use unless begin and end is used + + -- manual before/after snapshots (snapper v4) + if g_snap_begin is not null or g_snap_end is not null then + if g_snap_begin is not null then + get_sessions; + snap(d1,s1,l1,g_snap1); +&_MANUAL_SNAPSHOT open :snapper for select column_value rec from table(g_snap1); -- if you see this error then run: "VAR SNAPPER REFCURSOR" first! + exit; + end if; + + if g_snap_end is not null then +&_MANUAL_SNAPSHOT fetch :snapper bulk collect into g_snap1; -- You should run snapper with BEGIN option first! + -- procedure snap_from_stats_string (p_string_stats in sys.dbms_debug_vc2coll, p_snapdate out date, p_stats out stab, l_stats out ltab) + snap_from_stats_string(g_snap1, d1, s1, l1); + end if; + else -- normal interval sampling + if c = 1 then + get_sessions; + snap(d1,s1,l1,g_snap1); + else + get_sessions; + d1 := d2; + s1 := s2; + g_snap1 := g_snap2; + end if; -- c = 1 + end if; + + end if; -- gather_stats = 1 + + + + -- ASH style sampling +&_USE_DBMS_LOCK ash_date1 := sysdate; +&_USE_DBMS_LOCK if gather_ash = 1 then +&_USE_DBMS_LOCK while sysdate < (ash_date1 + (&snapper_sleep/86400)) loop +&_USE_DBMS_LOCK -- get active session records from g_sessions +&_USE_DBMS_LOCK get_sessions; +&_USE_DBMS_LOCK extract_ash(); +&_USE_DBMS_LOCK -- sleep timeout backoff depending on the duration sampled (for up to 10 seconds total sampling time will get max 100 Hz sampling) +&_USE_DBMS_LOCK -- for longer duration sampling the algorithm will back off and for long durations (over 100 sec) the sampling rate will stabilize +&_USE_DBMS_LOCK -- at 1Hz +&_USE_DBMS_LOCK dbms_lock.sleep( greatest(0.1,(least(1,&snapper_sleep*&snapper_count/100))) ); +&_USE_DBMS_LOCK end loop; +&_USE_DBMS_LOCK else +&_USE_DBMS_LOCK dbms_lock.sleep( ((ash_date1+(&snapper_sleep/86400)) - sysdate)*86400 ); +&_USE_DBMS_LOCK null; +&_USE_DBMS_LOCK end if; +&_USE_DBMS_LOCK ash_date2 := sysdate; + + -- sesstat new sample and delta calculation + if gather_stats = 1 then + + get_sessions; + snap(d2,s2,l2,g_snap2); + + -- manually coded nested loop outer join for calculating deltas: + -- why not use a SQL join? this would require creation of PL/SQL + -- collection object types, but Snapper does not require any changes + -- to the database, so any custom object types are out! + changed_values := 0; + missing_values_s1 := 0; + missing_values_s2 := 0; + + -- remember last disappeared SID so we wouldn't need to output a warning + -- message for each statistic row of that disappeared sid + disappeared_sid := 0; + + i :=1; -- iteration counter (for debugging) + a :=1; -- s1 array index + b :=1; -- s2 array index + + if s2.count > 0 then lv_curr_sid := s2(b).sid; end if; + + while ( a <= s1.count and b <= s2.count ) loop + + if lv_curr_sid != 0 and lv_curr_sid != s2(b).sid then + if pagesize > 0 and mod(c-1, pagesize) = 0 then + -- if filtering specific stats, assuming that it's better to not leave spaces between every session data + + if getopt('&snapper_options', 'sinclude=')||getopt('&snapper_options', 'tinclude=' )||getopt('&snapper_options', 'winclude=' ) is null then + output(' '); + -- output(rpad('-',length(gv_header_string),'-')); + -- output(gv_header_string); + -- output(rpad('-',length(gv_header_string),'-')); + end if; + end if; + lv_curr_sid := s2(b).sid; + end if; + + delta := 0; -- don't print + + case + when s1(a).sid = s2(b).sid then + + case + when s1(a).statistic# = s2(b).statistic# then + + delta := s2(b).value - s1(a).value; + evcnt := s2(b).event_count - s1(a).event_count; + --output('DEBUG, s1(a).statistic# s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + if delta != 0 then fout(); end if; + + a := a + 1; + b := b + 1; + + when s1(a).statistic# > s2(b).statistic# then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).statistic# < s2(b).statistic# then + + output('ERROR, s1(a).statistic# < s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + else + output('ERROR, s1(a).statistic# ? s2(b).statistic#, a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + a := a + 1; + b := b + 1; + + end case; -- s1(a).statistic# ... s2(b).statistic# + + when s1(a).sid > s2(b).sid then + + delta := s2(b).value; + evcnt := s2(b).event_count; + if delta != 0 then fout(); end if; + + b := b + 1; + + when s1(a).sid < s2(b).sid then + + if disappeared_sid != s1(a).sid then + output('WARN, Session has disappeared since previous snapshot, ignoring SID='||to_char(s1(a).sid)||' debug(a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count||')'); + end if; + disappeared_sid := s1(a).sid; + a := a + 1; + + else + output('ERROR, Should not be here, SID='||to_char(s2(b).sid)||' a='||to_char(a)||' b='||to_char(b)||' s1.count='||s1.count||' s2.count='||s2.count||' s2.count='||s2.count); + + end case; -- s1(a).sid ... s2(b).sid + + i:=i+1; + + if delta != 0 then + + changed_values := changed_values + 1; + + end if; -- delta != 0 + + end loop; -- while ( a <= s1.count and b <= s2.count ) + + if pagesize > 0 and changed_values > 0 then + output(' '); + output('-- End of Stats snap '||to_char(c)||', end='||to_char(d2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||round(get_seconds(d2-d1), 1)); + end if; + + output(' '); + + end if; -- gather_stats = 1 + + if gather_ash = 1 then + + -- get ASH sample grouping details + g_ash_columns := nvl( getopt('&snapper_options', 'ash=' ), g_ash_columns ); + + -- optional additional ASH groupings + g_ash_columns1 := case when getopt('&snapper_options', 'ash1' ) is null then null when getopt('&snapper_options', 'ash1' ) = chr(0) then g_ash_columns1 else getopt('&snapper_options', 'ash1=' ) end; + g_ash_columns2 := case when getopt('&snapper_options', 'ash2' ) is null then null when getopt('&snapper_options', 'ash2' ) = chr(0) then g_ash_columns2 else getopt('&snapper_options', 'ash2=' ) end; + g_ash_columns3 := case when getopt('&snapper_options', 'ash3' ) is null then null when getopt('&snapper_options', 'ash3' ) = chr(0) then g_ash_columns3 else getopt('&snapper_options', 'ash3=' ) end; + g_ash_columns4 := case when getopt('&snapper_options', 'ash4' ) is null then null when getopt('&snapper_options', 'ash4' ) = chr(0) then g_ash_columns4 else getopt('&snapper_options', 'ash4=' ) end; + g_ash_columns5 := case when getopt('&snapper_options', 'ash5' ) is null then null when getopt('&snapper_options', 'ash5' ) = chr(0) then g_ash_columns5 else getopt('&snapper_options', 'ash5=' ) end; + g_ash_columns6 := case when getopt('&snapper_options', 'ash6' ) is null then null when getopt('&snapper_options', 'ash6' ) = chr(0) then g_ash_columns6 else getopt('&snapper_options', 'ash6=' ) end; + + -- group ASH records and print report + out_ash( g_ash_columns, 10 ); + -- group and print optional ASH reports + if g_ash_columns1 is not null then out_ash( g_ash_columns1, 10 ); end if; + if g_ash_columns2 is not null then out_ash( g_ash_columns2, 10 ); end if; + if g_ash_columns3 is not null then out_ash( g_ash_columns3, 10 ); end if; + if g_ash_columns4 is not null then out_ash( g_ash_columns4, 10 ); end if; + if g_ash_columns5 is not null then out_ash( g_ash_columns5, 10 ); end if; + if g_ash_columns6 is not null then out_ash( g_ash_columns6, 10 ); end if; + + + if pagesize > 0 then + output(' '); + output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken||', AAS='||CASE WHEN g_ash_samples_taken = 0 THEN '(No ASH sampling in begin/end snapshot mode)' ELSE TO_CHAR(ROUND(g_ash.COUNT/NULLIF(g_ash_samples_taken,0),1)) END ); + --output('-- End of ASH snap '||to_char(c)||', end='||to_char(ash_date2, 'YYYY-MM-DD HH24:MI:SS')||', seconds='||to_char(round((ash_date2-ash_date1) * 86400, 1))||', samples_taken='||g_ash_samples_taken||', AAS='||TO_CHAR(ROUND(g_ash.COUNT/g_ash_samples_taken,1))||', Active%='||TO_CHAR(ROUND(g_ash.COUNT/g_ash_samples_taken*100,1))||'%' ); + + output(' '); + end if; + + reset_ash(); + + end if; -- gather_ash = 1 + + end loop; -- for c in 1..snapper_count + + exception when others then + raise_application_error(-20000, 'Snapper: Probably bad syntax or no execute rights on SYS.DBMS_LOCK'||chr(10)||'Check http://blog.tanelpoder.com/snapper for instructions'||chr(10)||sqlerrm); + +end; +/ + +undefine snapper_sleep +undefine snapper_count +undefine snapper_sid +undefine ssid_begin +undefine _IF_ORA12_OR_HIGHER +undefine _IF_ORA11_OR_HIGHER +undefine _IF_LOWER_THAN_ORA11 +undefine _IF_LOWER_THAN_ORA12 +undefine _NO_BLK_INST +undefine _YES_BLK_INST +undefine _NO_PLSQL_OBJ_ID +undefine _YES_PLSQL_OBJ_ID +undefine _IF_DBMS_SYSTEM_ACCESSIBLE +undefine _IF_X_ACCESSIBLE +undefine _MANUAL_SNAPSHOT +undefine _USE_DBMS_LOCK +col snapper_ora12higher clear +col snapper_ora12lower clear +col snapper_ora11higher clear +col snapper_ora11lower clear +col dbms_system_accessible clear +col x_accessible clear +col no_plsql_obj_id clear +col yes_plsql_obj_id clear +col no_blk_inst clear +col yes_blk_inst clear +col manual_snapshot clear +col use_dbms_lock clear +col snapper_sid clear +col sid_filter clear +col inst_filter clear + +set serveroutput off + diff --git a/vg/snapper_wrapper.sql b/vg/snapper_wrapper.sql new file mode 100644 index 0000000..071f456 --- /dev/null +++ b/vg/snapper_wrapper.sql @@ -0,0 +1,3 @@ +@snapper "&&1" "&2" "&3" "&4" +@snapper "&&1" "&2" "&3" "&4" +@snapper "&&1" "&2" "&3" "&4" diff --git a/vg/sortsegment.sql b/vg/sortsegment.sql new file mode 100644 index 0000000..a1d024e --- /dev/null +++ b/vg/sortsegment.sql @@ -0,0 +1,183 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Sort Segment usage +* Parameters : 1 - tablespace_name (Default Value - %, Use % as wildcard) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 03-Jul-12 Vishal Gupta Added Max columns in the output +* 02-Jul-12 Vishal Gupta Added tablespace name as input parameter +* 05-Aug-04 Vishal Gupta First Draft +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE tablespace_name="&&1" + +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT + +set term off +SELECT UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME" +FROM DUAL; +set term on + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +DEFINE BYTES_LARGE_FORMAT="99,999,999" +DEFINE BYTES_FORMAT="99,999,999" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024" +DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="GB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" + +DEFINE ROUND_PRECISION=0 +DEFINE STAR=4 --Defines how much %usage is represented by one star on Graph + + + +PROMPT ****************************************************************************** +PROMPT * S O R T S E G M E N T +PROMPT * +PROMPT * Input Parameters +PROMPT * - Tablespace Name = '&&TABLESPACE_NAME' +PROMPT ****************************************************************************** + +COLUMN seperator HEADING "!|!|!|!" FORMAT a1 +COLUMN tablespace_name HEADING "TablespaceName" FORMAT a20 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN current_users HEADING "Current|Users|(#)" FORMAT 9999 +COLUMN total_size HEADING "Total|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN used_size HEADING "Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN free_size HEADING "Free|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN percent_free HEADING "%Free" FORMAT 999.00 +COLUMN percent_used HEADING "%Used" FORMAT 999.00 +COLUMN max_total_size HEADING "Max|Total|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN max_used_size HEADING "Max|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN max_sort_used_size HEADING "Max|Used|(BySort)|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN largest_sort_size HEADING "Largest|Sort|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN max_percent_used HEADING "Max||%Used" FORMAT 999.00 +COLUMN max_percent_free HEADING "Max||%Free" FORMAT 999.00 +COLUMN free_requests HEADING "Free|Requests|(#)" FORMAT 999,999 +COLUMN added HEADING "Space|Added|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT +COLUMN freed HEADING "Space|Freed|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT + +COLUMN UsageGraphWidth NOPRINT old_value UGWidth +COLUMN alloc HEADING "Alloc|(&&BYTES_HEADING)" FORMAT 9,999,999 +COLUMN used HEADING "Used&&BYTES_HEADING)" FORMAT 999,999 +COLUMN free HEADING "Free|(&&BYTES_HEADING)" FORMAT 999,999 +COLUMN pct_Used HEADING "%Used" FORMAT 999 +COLUMN pct_Free HEADING "%Free" FORMAT 999 +COLUMN MAXSIZE HEADING "MaxSize|(&&BYTES_HEADING)" FORMAT 9,999,999 +COLUMN Maxfree HEADING "MaxFree|(&&BYTES_HEADING)" FORMAT 9,999,999 +COLUMN Max_pct_Used HEADING "MAX|%Used" FORMAT 999 +COLUMN Max_pct_Free HEADING "MAX|%Free" FORMAT 999 +COLUMN "Usage Graph" FORMAT a27 +COLUMN "MaxUsage Graph" FORMAT a27 + + +BREAK ON TABLESPACE_NAME SKIP 2 ON ALLOC ON FREE ON MAXFREE +COMPUTE SUM LABEL 'Total' OF total_size used_size free_size FORMAT &&BYTES_FORMAT ON TABLESPACE_NAME + +WITH tbs AS +( +SELECT c.tablespace_name + , c.alloc + , c.used + , c.free + , c.pct_used + , c.pct_free + , c.MAXSIZE + , c.maxfree + , c.max_pct_used + , c.max_pct_free +FROM +( SELECT /*+ CHOOSE */ + ts.tablespace_name + --, ROUND((ts.bytes_used + ts.bytes_free) / &&BYTES_DIVIDER , &&ROUND_PRECISION) alloc + , ROUND( tf.bytes / &&BYTES_DIVIDER , &&ROUND_PRECISION) alloc + , ROUND(ts.bytes_used / &&BYTES_DIVIDER , &&ROUND_PRECISION) used + , ROUND(ts.bytes_free / &&BYTES_DIVIDER , &&ROUND_PRECISION) free + , ROUND(( ts.bytes_used / (ts.bytes_used + ts.bytes_free)) + * 100, &&ROUND_PRECISION) pct_Used + , 100 - ROUND(( ts.bytes_used / (ts.bytes_used + ts.bytes_free)) * 100, &&ROUND_PRECISION) pct_Free + , ROUND( tf.max_bytes / &&BYTES_DIVIDER , &&ROUND_PRECISION) MaxSize + , ROUND( ( ts.bytes_free + (tf.max_bytes - (ts.bytes_used + ts.bytes_free) ) + ) / &&BYTES_DIVIDER , &&ROUND_PRECISION) Maxfree + , ROUND( ( ts.bytes_used /tf.max_bytes) * 100, &&ROUND_PRECISION) Max_pct_Used + , 100 - ROUND( ( ts.bytes_used /tf.max_bytes )* 100, &&ROUND_PRECISION ) Max_pct_Free + FROM (SELECT tablespace_name + , sum(bytes_used) bytes_used + , sum(bytes_free) bytes_free + FROM v$temp_space_header + WHERE tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + ) ts + , (SELECT tablespace_name + , SUM(bytes) bytes + , SUM(DECODE(autoextensible, 'YES',GREATEST(maxbytes,bytes),'NO', bytes)) max_bytes + FROM dba_temp_files + WHERE tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + )tf + , (SELECT ss.tablespace_name + , sum(ss.free_blocks * t.block_size) free_bytes + FROM gv$sort_segment ss + , dba_tablespaces t + WHERE ss.tablespace_name = t.tablespace_name + AND ss.tablespace_name LIKE '&&tablespace_name' + GROUP BY ss.tablespace_name + ) ss + , dba_tablespaces t + WHERE t.tablespace_name = ts.tablespace_name + AND t.tablespace_name = tf.tablespace_name + AND t.tablespace_name = ss.tablespace_name (+) + AND t.tablespace_name LIKE '&&tablespace_name' + ) c +) +SELECT s.tablespace_name + , t.alloc + --, t.used + , t.free + --, t.MAXSIZE + , t.maxfree + , '|' seperator + , s.inst_id + , s.current_users current_users + , '|' seperator + , (s.total_blocks * p.value)/&&BYTES_DIVIDER total_size + , (s.free_blocks * p.value)/&&BYTES_DIVIDER free_size + , (s.used_blocks * p.value)/&&BYTES_DIVIDER used_size + , ROUND( (s.used_blocks/s.total_blocks) * 100 , 2) percent_used + --, ROUND( (s.free_blocks/s.total_blocks) * 100 , 2) percent_free + , '|' seperator + , (s.max_blocks * p.value)/&&BYTES_DIVIDER max_used_size + , (s.max_used_blocks * p.value)/&&BYTES_DIVIDER max_sort_used_size + , (s.max_sort_blocks * p.value)/&&BYTES_DIVIDER largest_sort_size + , '|' seperator + , s.free_requests + , (s.freed_extents * extent_size * p.value)/&&BYTES_DIVIDER freed + , (s.added_extents * extent_size * p.value)/&&BYTES_DIVIDER added + , '|' seperator + FROM gv$sort_segment s + , v$parameter p + , tbs t + WHERE p.name = 'db_block_size' + AND s.tablespace_name = t.tablespace_name + AND s.total_blocks <> 0 + AND s.tablespace_name like '&&tablespace_name' +ORDER BY s.tablespace_name + , s.inst_id +/ + +UNDEFINE tablespace_name + +@@footer \ No newline at end of file diff --git a/vg/sortsegment2.sql b/vg/sortsegment2.sql new file mode 100644 index 0000000..5a96e05 --- /dev/null +++ b/vg/sortsegment2.sql @@ -0,0 +1,34 @@ +@@header + +COLUMN tablespace_name FORMAT a20 +COLUMN total_blocks format 999,999,999 +COLUMN used_blocks format 999,999,999 +COLUMN free_blocks format 999,999,999 +COLUMN total_size HEADING "Total|(MB)" format 9,999,999 +COLUMN used_size HEADING "Used|(MB)" format 9,999,999 +COLUMN free_size HEADING "Free|(MB)" format 9,999,999 +COLUMN percent_free HEADING "%Free" format 999.00 + +BREAK ON TABLESPACE_NAME +--COMPUTE SUM LABEL 'Total' OF total_size FORMAT 99,999,999 ON TABLESPACE_NAME + +SELECT s.tablespace_name + , s.inst_id + --, s.extent_size + --, s.total_blocks + --, s.used_blocks + --, s.free_blocks + , (s.total_blocks * p.value)/1024/1024 total_size + , (s.used_blocks * p.value)/1024/1024 used_size + , (s.free_blocks * p.value)/1024/1024 free_size + , ROUND( (s.free_blocks/s.total_blocks) * 100 , 2) percent_free + FROM gv$sort_segment s + , v$parameter p + WHERE p.name = 'db_block_size' + AND s.total_blocks <> 0 +ORDER BY s.tablespace_name + , s.inst_id +/ + + +@@footer \ No newline at end of file diff --git a/vg/sortusage.sql b/vg/sortusage.sql new file mode 100644 index 0000000..447b129 --- /dev/null +++ b/vg/sortusage.sql @@ -0,0 +1,142 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display temporary space usage +* Compability: 9.x, 10.x, 11.x +* Parameters : 1 - INST_ID - Default Value - %, (Use % as wildcard) +* 2 - TablespaceName - Default Value - %, (Use % as wildcard) +* 3 - TOP_ROWCOUNT - Default Value - 30 +* 4 - WHERE CLAUSE - Default Value - '' +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-Mar-13 Vishal Gupta Added schema level summary in output +* 02-Jul-12 Vishal Gupta Added tablespace name as input +* 15-Jun-12 Vishal Gupta FORMATted output +* 26-May-04 Vishal Gupta Created +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE TABLESPACE_NAME +UNDEFINE TOP_ROWCOUNT +UNDEFINE WHERE_CLAUSE + +DEFINE INST_ID="&&1" +DEFINE TABLESPACE_NAME="&&2" +DEFINE TOP_ROWCOUNT="&&3" +DEFINE WHERE_CLAUSE="&&4" + + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT +COLUMN _TOP_ROWCOUNT NEW_VALUE TOP_ROWCOUNT NOPRINT +COLUMN _TOP_ROWCOUNT_SCHEMA NEW_VALUE TOP_ROWCOUNT_SCHEMA NOPRINT +COLUMN _WHERE_CLAUSE NEW_VALUE WHERE_CLAUSE NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME') "_TABLESPACE_NAME" + , TRIM(DECODE('&&TOP_ROWCOUNT','',30,'&&TOP_ROWCOUNT')) "_TOP_ROWCOUNT" + , TRIM(ROUND(TRIM(DECODE('&&TOP_ROWCOUNT','',30,'&&TOP_ROWCOUNT'))/2)) "_TOP_ROWCOUNT_SCHEMA" + , DECODE('&&WHERE_CLAUSE','','','&&WHERE_CLAUSE') "_WHERE_CLAUSE" +FROM DUAL; +set term on + + +PROMPT *************************************************************** +PROMPT * Input Parameters +PROMPT * - INST_ID = '&&INST_ID' +PROMPT * - TABLESPACE_NAME = '&&TABLESPACE_NAME' +PROMPT * - TOP_ROWCOUNT = '&&TOP_ROWCOUNT' +PROMPT * - WHERE_CLAUSE = '&&WHERE_CLAUSE' +PROMPT *************************************************************** + + +PROMPT +PROMPT *************************************************************** +PROMPT * TOP &&TOP_ROWCOUNT_SCHEMA Schemas using tempspace +PROMPT *************************************************************** + +COLUMN used HEADING "Size|(MB)" FORMAT 99,999,999 +COLUMN username FORMAT a20 +COLUMN tablespace HEADING "TablespaceName" FORMAT a20 + +SELECT * +FROM +( + SELECT /*+ ORDERED */ + su.tablespace + , s.username + , SUM((su.BLOCKS * par.value ))/1024/1024 used + FROM gv$sort_usage su + JOIN gv$session s ON s.inst_id = su.inst_id AND su.session_addr = s.saddr AND su.session_num = s.serial# + JOIN gv$system_parameter par ON su.inst_id = par.inst_id AND par.NAME = 'db_block_size' + WHERE su.inst_id like DECODE('&&INST_ID','','%','&&INST_ID') + AND su.tablespace LIKE DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME') + &&WHERE_CLAUSE +GROUP BY s.username , su.tablespace + order by used desc +) +WHERE ROWNUM <= &&TOP_ROWCOUNT_SCHEMA +/ + +PROMPT +PROMPT +PROMPT *************************************************************** +PROMPT * TOP &&TOP_ROWCOUNT Sort Segment Usage (Ordered by Size) +PROMPT *************************************************************** + + +COLUMN used HEADING "Size|(MB)" FORMAT 9,999,999 +COLUMN segtype HEADING "Segment|Type" FORMAT a9 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN sid FORMAT 9999 +COLUMN serial# FORMAT 99999 +COLUMN logon_time HEADING "LogonTime" FORMAT a15 +COLUMN status FORMAT a10 +COLUMN spid FORMAT a6 +COLUMN machine FORMAT a20 TRUNCATE +COLUMN program FORMAT a20 TRUNCATE +COLUMN osuser FORMAT a20 TRUNCATE +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +SELECT * +FROM +( + SELECT /*+ ORDERED */ + (su.BLOCKS * par.value )/1024/1024 used +-- , su.EXTENTS + , su.segtype + , su.tablespace + , s.sid + , s.inst_id + , to_char(s.logon_time,'DD-MON-YY HH24:MI') logon_time + , s.status + , p.spid + , s.username + , s.machine + , s.program + , s.osuser + , s.sql_id + , s.sql_child_number + FROM gv$sort_usage su + JOIN gv$session s ON s.inst_id = su.inst_id AND su.session_addr = s.saddr AND su.session_num = s.serial# + JOIN gv$process p ON p.inst_id = s.inst_id AND p.addr = s.paddr + JOIN gv$system_parameter par ON su.inst_id = par.inst_id AND par.NAME = 'db_block_size' + WHERE su.inst_id like DECODE('&&INST_ID','','%','&&INST_ID') + AND su.tablespace LIKE DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME') + &&WHERE_CLAUSE + order by 1 desc +) +WHERE ROWNUM <= DECODE('&&TOP_ROWCOUNT','',30,'&&TOP_ROWCOUNT') +/ + + +@@footer diff --git a/vg/sortusage2.sql b/vg/sortusage2.sql new file mode 100644 index 0000000..2e92ec4 --- /dev/null +++ b/vg/sortusage2.sql @@ -0,0 +1,81 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display temporary space usage +* Compability: 9.x, 10.x, 11.x +* Parameters : 1 - INST_ID (Use % as wildcard) +* 2 - TOP_ROWCOUNT +* 3 - WHERE CLAUSE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 26-May-04 Vishal Gupta Initial Version +* 15-Jun-12 Vishal Gupta formatted output +*/ + + +DEFINE INST_ID=&1 +DEFINE TOP_ROWCOUNT=&2 +DEFINE WHERE_CLAUSE="&3" + + + + +COLUMN used HEADING "Size|(MB)" FORMAT 9,999,999 +COLUMN extents FORMAT 999,999 +COLUMN segtype FORMAT a9 +COLUMN tablespace FORMAT a20 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN sid FORMAT 9999 +COLUMN serial# FORMAT 99999 +COLUMN logon_time FORMAT a15 +COLUMN status FORMAT a10 +COLUMN spid FORMAT a5 +COLUMN username FORMAT a20 +COLUMN machine FORMAT a20 TRUNCATE +COLUMN program FORMAT a20 TRUNCATE +COLUMN osuser FORMAT a20 TRUNCATE + +PROMPT *********************************************************** +PROMPT ******* TOP &TOP_ROWCOUNT SORT Segments (Ordered by Size) +PROMPT *********************************************************** + +SELECT * +FROM +( + SELECT /*+ ORDERED */ + (su.BLOCKS * par.value )/1024/1024 used +-- , su.EXTENTS + , su.segtype + , su.tablespace + , s.sid + , s.inst_id + , to_char(s.logon_time,'DD-MON-YY HH24:MI') logon_time + , s.status + , p.spid + , s.username + , s.machine + , s.program + , s.osuser + , s.sql_id + FROM gv$sort_usage su + JOIN gv$session s ON s.inst_id = su.inst_id AND su.session_addr = s.saddr AND su.session_num = s.serial# + JOIN gv$process p ON p.inst_id = s.inst_id AND p.addr = s.paddr + JOIN gv$system_parameter par ON su.inst_id = par.inst_id AND par.NAME = 'db_block_size' + WHERE su.inst_id like '&&INST_ID' + &&WHERE_CLAUSE + order by 1 desc +) +WHERE ROWNUM <= &TOP_ROWCOUNT +/ + + +UNDEFINE INST_ID +UNDEFINE TOP_ROWCOUNT +UNDEFINE WHERE_CLAUSE + +@@footer diff --git a/vg/sourcecode.sql b/vg/sourcecode.sql new file mode 100644 index 0000000..29822c1 --- /dev/null +++ b/vg/sourcecode.sql @@ -0,0 +1,63 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display view's query +* Parameters : 1 - OWNER, this could also be passed as OWNER.object_name +* 2 - OBJECT_NAME +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 25-Feb-13 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE OWNER +UNDEFINE OBJECT_NAME + +DEFINE OWNER="&&1" +DEFINE OBJECT_NAME="&&2" + + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT + +set term off +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END ) "_owner" + , DECODE(UPPER('&&object_name'),'',SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1),UPPER('&&object_name')) "_object_name" +FROM DUAL; +set term on + + +Prompt +Prompt ************************************************************ +Prompt ** Object &&OWNER..&&OBJECT_NAME's Source Code +Prompt ************************************************************ + + +COLUMN text HEADING "S O U R C E C O D E" FORMAT a150 + +set long 400000 +set pages 50000 + +SELECT s.TEXT + FROM dba_source s +WHERE s.owner = '&&OWNER' + AND s.name = '&&OBJECT_NAME' + ORDER BY s.owner + , s.name + , s.type + , s.line +; + + +@@footer diff --git a/vg/sourcecode_search.sql b/vg/sourcecode_search.sql new file mode 100644 index 0000000..8cc2f9f --- /dev/null +++ b/vg/sourcecode_search.sql @@ -0,0 +1,48 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Search source code +* Parameters : 1 - Search Text (% - wildchar, \ - escape char) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* +* +*/ + + +UNDEFINE searchtext +UNDEFINE owner + +DEFINE searchtext="&&1" +DEFINE owner="&&2" + +COLUMN object_name HEADING "Object Name" FORMAT a40 +COLUMN text HEADING "Query" FORMAT a150 + +set long 400000 +set pages 1000 + +Prompt +Prompt ************************************************************ +Prompt ** Listing SourceCode with '&&searchtext' +Prompt ************************************************************ + +SELECT s.owner || '.' || s.name object_name + , s.type + , s.line + , s.text + FROM dba_source s + WHERE UPPER(s.text) like upper('&&searchtext') ESCAPE '\' + AND s.owner like upper('&&owner') +ORDER BY object_name + , s.line +; + +@@footer diff --git a/vg/sp_bhr.sql b/vg/sp_bhr.sql new file mode 100644 index 0000000..b369760 --- /dev/null +++ b/vg/sp_bhr.sql @@ -0,0 +1,101 @@ +set echo on +/* +* +* Author : Vishal Gupta +* Purpose : Display load profile from STATSPACK +* All figures are per second +* +* Syntax : @file_name +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Jun-07 Vishal Gupta First Draft +* +*/ +set echo off +set verify off +set pages 10000 +set lines 150 +TTITLE CENTER "L O A D P R O F I L E T R E N D" - +SKIP 1 CENTER "###################################" - +SKIP 1 CENTER "( All figures per second from STATSPACK)" - +SKIP 1 CENTER "" +COLUMN snap_id HEADING "Snap#" FORMAT 999,999 +COLUMN snap_time HEADING "Snap Time" FORMAT a17 +COLUMN elapsed_sec HEADING "Elap|(Sec)" FORMAT 999,999,999 +COLUMN redo_size_per_sec HEADING "Redo|Size|(KB)" FORMAT 999,999 +COLUMN logical_reads_per_sec HEADING "Logical|Reads|(Blocks)" FORMAT 999,999 +COLUMN block_changes_per_sec HEADING "Block|Changes" FORMAT 99,999,999 +COLUMN phy_reads_per_sec HEADING "Phy|Reads|(Blocks)" FORMAT 9,999,999 +COLUMN phy_writes_per_sec HEADING "Phy|Writes|(Blocks)" FORMAT 9,999,999 +COLUMN user_calls_per_sec HEADING "User|Calls" FORMAT 9,999 +COLUMN parses_per_sec HEADING "Parses" FORMAT 99,999 +COLUMN hard_parses_reads_per_sec HEADING "Hard|Parses" FORMAT 99,999 +COLUMN sorts_mem_per_sec HEADING "Sorts#|(Mem)" FORMAT 99,999 +COLUMN sorts_disk_per_sec HEADING "Sorts#|(Disk)" FORMAT 99,999 +COLUMN logons_per_sec HEADING "Logons" FORMAT 9,999 +COLUMN commit_per_sec HEADING "Commits" FORMAT 99,999 +COLUMN rollback_per_sec HEADING "Roll|backs" FORMAT 99,999 + +WITH snap +AS + (SELECT dbid + , instance_number + , snap_id + , LAG (snap_id) OVER (PARTITION BY dbid, instance_number ORDER BY dbid, instance_number, snap_id) prev_snap_id + , snap_time + , (snap_time - LAG (snap_time) OVER (PARTITION BY dbid, instance_number ORDER BY dbid, instance_number, snap_id) ) *1440 * 60 elapsed_sec + FROM stats$snapshot) +SELECT /*+ USE_NL(s1,s2,ss1,ss2) */ + s1.snap_id + , TO_CHAR(s1.snap_time,'dd-mm-yy hh24:mi:ss') snap_time +-- , s1.elapsed_sec + , MAX(DECODE(ss2.name, 'redo size', ROUND ((ss2.value - ss1.value)/ elapsed_sec ) ) ) / 1024 redo_size_per_sec + , MAX(DECODE(ss2.name, 'session logical reads', ROUND ((ss2.value - ss1.value)/ elapsed_sec ))) logical_reads_per_sec + , MAX(DECODE(ss2.name, 'db block changes', ROUND ((ss2.value - ss1.value)/ elapsed_sec ))) block_changes_per_sec + , MAX(DECODE(ss2.name, 'physical reads', ROUND ((ss2.value - ss1.value)/ elapsed_sec )))/1024 phy_reads_per_sec + , MAX(DECODE(ss2.name, 'physical writes', ROUND ((ss2.value - ss1.value)/elapsed_sec)))/1024 phy_writes_per_sec + , MAX(DECODE(ss2.name, 'user calls', ROUND ((ss2.value - ss1.value)/elapsed_sec))) user_calls_per_sec + , MAX(DECODE(ss2.name, 'parse count (total)', ROUND ((ss2.value - ss1.value)/elapsed_sec))) parses_per_sec + , MAX(DECODE(ss2.name, 'parse count (hard)', ROUND ((ss2.value - ss1.value)/elapsed_sec))) hard_parses_reads_per_sec + , MAX(DECODE(ss2.name, 'sorts (memory)', ROUND ((ss2.value - ss1.value)/elapsed_sec))) sorts_mem_per_sec + , MAX(DECODE(ss2.name, 'sorts (disk)', ROUND ((ss2.value - ss1.value)/elapsed_sec))) sorts_disk_per_sec + , MAX(DECODE(ss2.name, 'logons cumulative', ROUND ((ss2.value - ss1.value)/elapsed_sec))) logons_per_sec + , MAX(DECODE(ss2.name, 'user commits', ROUND ((ss2.value - ss1.value)/elapsed_sec))) commit_per_sec + , MAX(DECODE(ss2.name, 'user rollbacks', ROUND ((ss2.value - ss1.value)/elapsed_sec))) rollback_per_sec +FROM snap s1 + , stats$sysstat ss1 + , stats$sysstat ss2 +where s1.dbid = ss1.dbid +and s1.instance_number = ss1.instance_number +and s1.prev_snap_id = ss1.snap_id +and s1.dbid = ss2.dbid +and s1.instance_number = ss2.instance_number +and s1.snap_id = ss2.snap_id +and ss1.name = ss2.name +and ss2.name in ('redo size' + ,'session logical reads' + ,'db block changes' + ,'physical reads' + ,'physical writes' + ,'user calls' + ,'parse count (total)' + ,'parse count (hard)' + ,'sorts (memory)' + ,'sorts (disk)' + ,'logons cumulative' + ,'execute count' + ,'user commits' + ,'user rollbacks' + ) +and elapsed_sec > 0 +and s1.snap_id > 2880 +and s1.snap_time > sysdate - &days +GROUP BY s1.snap_id + , s1.snap_time + , elapsed_sec +order by s1.snap_time asc +/ + diff --git a/vg/sp_buffer_hit_ratio.sql b/vg/sp_buffer_hit_ratio.sql new file mode 100644 index 0000000..c4e86aa --- /dev/null +++ b/vg/sp_buffer_hit_ratio.sql @@ -0,0 +1,20 @@ +set echo off +set verify off +column bhr format 999 +column mydate heading 'YYYY-MM-DD HH24' +set pages 10000 + +select + to_char(snap_time,'yyyy-mm-dd HH24') mydate, + new.name buffer_pool_name, + (((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))-(new.physical_reads-old.physical_reads)) + /((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))*100 bhr +from perfstat.stats$buffer_pool_statistics old, + perfstat.stats$buffer_pool_statistics new, + perfstat.stats$snapshot sn +where snap_time > sysdate - &&1 + and new.name=old.name + and new.snap_id=sn.snap_id + and old.snap_id=sn.snap_id-1 +order by 1 asc +/ diff --git a/vg/sp_buffer_hit_ratio_trend.sql b/vg/sp_buffer_hit_ratio_trend.sql new file mode 100644 index 0000000..1cd20b7 --- /dev/null +++ b/vg/sp_buffer_hit_ratio_trend.sql @@ -0,0 +1,29 @@ +set echo off +set term off +store set backupenv replace +set term on + +set verify off +column bhr format 999.99 +column mydate heading 'YYYY-MM-DD HH:MI' +set pages 10000 + +select + to_char(snap_time,'yyyy-mm-dd HH24:MI') mydate, + new.name buffer_pool_name, +(((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))-(new.physical_reads-old.physical_reads)) / +((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))*100 bhr +from perfstat.stats$buffer_pool_statistics old, + perfstat.stats$buffer_pool_statistics new, + perfstat.stats$snapshot sn +where snap_time > sysdate - &&1 + and new.name=old.name + and new.snap_id=sn.snap_id + and old.snap_id=sn.snap_id-1 +order by 1 asc +/ + +set echo off +set term off +start backupenv +set term on diff --git a/vg/sp_event_histogram.sql b/vg/sp_event_histogram.sql new file mode 100644 index 0000000..3b19d63 --- /dev/null +++ b/vg/sp_event_histogram.sql @@ -0,0 +1,83 @@ +with event_histogram as ( + select /*+ inline ordered index(h) index(se) */ + + h.snap_id + , h.dbid + , h.instance_number + , se.event + , sum(h.wait_count) total_waits + , sum(case when (h.wait_time_milli = 1) + then (nvl(h.wait_count,0)) else 0 end) to1 + , sum(case when (h.wait_time_milli = 2) + then (nvl(h.wait_count,0)) else 0 end) to2 + , sum(case when (h.wait_time_milli = 4) + then (nvl(h.wait_count,0)) else 0 end) to4 + , sum(case when (h.wait_time_milli = 8) + then (nvl(h.wait_count,0)) else 0 end) to8 + , sum(case when (h.wait_time_milli = 16) + then (nvl(h.wait_count,0)) else 0 end) to16 + , sum(case when (h.wait_time_milli = 32) + then (nvl(h.wait_count,0)) else 0 end) to32 + , sum(case when (h.wait_time_milli between 64 and 1024) + then (nvl(h.wait_count,0)) else 0 end) to1024 + , sum(case when (1024 < h.wait_time_milli) + then (nvl(h.wait_count,0)) else 0 end) over + , decode(i.event, null, 0, 99) idle + from stats$event_histogram h + , stats$system_event se + , stats$idle_event i + where se.event_id = h.event_id + and se.snap_id = h.snap_id + and i.event(+) = se.event + and se.instance_number = 1 + and se.dbid = 3601879126 + and se.snap_id > 54931 + and h.instance_number = 1 + and h.dbid = 3601879126 + and h.snap_id > 54931 + and se.event = 'db file sequential read' + group by h.snap_id + , h.dbid + , h.instance_number + , se.event + , decode(i.event, null, 0, 99) + ) +select s.snap_time + , e.event + , lpad(case + when e.total_waits - nvl(b.total_waits,0) <= 9999 + then to_char(e.total_waits - nvl(b.total_waits,0))||' ' + when trunc((e.total_waits - nvl(b.total_waits,0))/1000) <= 9999 + then to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000))||'K' + when trunc((e.total_waits - nvl(b.total_waits,0))/1000000) <= 9999 + then to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000000))||'M' + when trunc((e.total_waits - nvl(b.total_waits,0))/1000000000) <= 9999 + then to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000000000))||'G' + when trunc((e.total_waits - nvl(b.total_waits,0))/1000000000000) <= 9999 + then to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000000000000))||'T' + else substr(to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000000000000000))||'P', 1, 5) end + , 5, ' ') total_waits + , substr(to_char(decode(e.to1-nvl(b.to1,0),0,to_number(NULL),(e.to1-nvl(b.to1,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to1 + , substr(to_char(decode(e.to2-nvl(b.to2,0),0,to_number(NULL),(e.to2-nvl(b.to2,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to2 + , substr(to_char(decode(e.to4-nvl(b.to4,0),0,to_number(NULL),(e.to4-nvl(b.to4,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to4 + , substr(to_char(decode(e.to8-nvl(b.to8,0),0,to_number(NULL),(e.to8-nvl(b.to8,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to8 + , substr(to_char(decode(e.to16-nvl(b.to16,0),0,to_number(NULL),(e.to16-nvl(b.to16,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to16 + , substr(to_char(decode(e.to32-nvl(b.to32,0),0,to_number(NULL),(e.to32-nvl(b.to32,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to32 + , substr(to_char(decode(e.to1024-nvl(b.to1024,0),0,to_number(NULL),(e.to1024-nvl(b.to1024,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to1024 + , substr(to_char(decode(e.over-nvl(b.over,0),0,to_number(NULL),(e.over-nvl(b.over,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) over + from ( select * + from event_histogram) b + , ( select c.*, lag (snap_id) OVER ( ORDER BY snap_id asc) prev_snap_id + from event_histogram c) e + , stats$snapshot s + where b.event(+) = e.event + and b.snap_id = e.prev_snap_id + and b.snap_id = s.snap_id + and b.dbid = s.dbid + and b.instance_number = s.instance_number + and e.snap_id = s.snap_id + and e.dbid = s.dbid + and e.instance_number = s.instance_number + and (e.total_waits - nvl(b.total_waits,0)) > 0 + order by e.idle, e.event; + diff --git a/vg/sp_event_trend.sql b/vg/sp_event_trend.sql new file mode 100644 index 0000000..744d07a --- /dev/null +++ b/vg/sp_event_trend.sql @@ -0,0 +1,135 @@ +/********************************************************************** + * File: sp_evtrends.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 15-Jul-2003 + * + * Description: + * Query to display "trends" for specific statistics captured by + * the STATSPACK package, and display summarized totals daily and + * hourly as a ratio using the RATIO_FOR_REPORT analytic function. + * + * The intent is to find the readings with the greatest deviation + * from the average value, as these are likely to be "periods of + * interest" for further, more detailed research... + * + * This version of the script is intended for Oracle9i, which + * records TIME_WAITED_MICRO in micro-seconds (1/100,000ths of + * a second). + * + * Modifications: + * TGorman 02may04 corrected bug in LAG() OVER () clauses + * TGorman 10aug04 changed "deviation" column from some kind of + * weird "deviation from average" calculation to + * a more straight-forward percentage ratio + * TGorman 25aug04 use "ratio_to_report()" function instead + *********************************************************************/ +set echo off feedback off timing off pagesize 200 linesize 130 +set trimout on trimspool on verify off recsep off +col sort0 noprint +col day format a6 heading "Day" +col hr format a6 heading "Hour" +col time_waited format 999,999,999,990.00 heading "Secs Waited" + +accept V_INSTANCE prompt "Please enter the ORACLE_SID value: " +accept V_NBR_DAYS prompt "How many days of data to examine? " +prompt +prompt +prompt Some useful database statistics to search upon: +col name format a60 heading "Name" +select chr(9)||name name +from v$event_name +order by 1; +accept V_STATNAME prompt "What statistic do you want to analyze? " + +col spoolname new_value V_SPOOLNAME noprint +select replace(replace(replace(lower('&&V_STATNAME'),' ','_'),'(',''),')','') spoolname +from dual; + +spool sp_evtrends_&&V_SPOOLNAME +clear breaks computes +break on day skip 1 on report +col ratio format a60 heading "Percentage of total over all days" +col name format a30 heading "Statistic Name" +prompt +prompt Daily trends for "&&V_STATNAME"... +select sort0, + day, + name, + time_waited, + rpad('*', round((ratio_to_report(time_waited) over (partition by name))*60, 0), '*') ratio +from (select sort0, + day, + name, + sum(time_waited)/100000 time_waited + from (select to_char(ss.snap_time, 'YYYYMMDD') sort0, + to_char(ss.snap_time, 'DD-MON') day, + s.snap_id, + s.event name, + nvl(decode(greatest(s.time_waited_micro, nvl(lag(s.time_waited_micro) over (partition by s.dbid, s.instance_number, s.event order by s.snap_id),0)), + s.time_waited_micro, s.time_waited_micro - lag(s.time_waited_micro) over (partition by s.dbid, s.instance_number, s.event order by s.snap_id), + s.time_waited_micro), 0) time_waited + from stats$system_event s, + stats$snapshot ss, + (select distinct + dbid, + instance_number + from stats$database_instance + where instance_name = '&&V_INSTANCE') i + where ss.dbid = i.dbid + and ss.instance_number = i.instance_number + and ss.snap_time between (sysdate - &&V_NBR_DAYS) and sysdate + and s.snap_id = ss.snap_id + and s.dbid = ss.dbid + and s.instance_number = ss.instance_number + and s.event like '%'||'&&V_STATNAME'||'%') + group by sort0, + day, + name) +order by sort0, name; + +clear breaks computes +break on day skip 1 on hr on report +col ratio format a60 heading "Percentage of total over all hours for each day" +prompt +prompt Daily/hourly trends for "&&V_STATNAME"... +select sort0, + day, + hr, + name, + time_waited, + rpad('*', round((ratio_to_report(time_waited) over (partition by day, name))*60, 0), '*') ratio +from (select sort0, + day, + hr, + name, + sum(time_waited)/100000 time_waited + from (select to_char(ss.snap_time, 'YYYYMMDDHH24') sort0, + to_char(ss.snap_time, 'DD-MON') day, + to_char(ss.snap_time, 'HH24')||':00' hr, + s.snap_id, + s.event name, + nvl(decode(greatest(s.time_waited_micro, nvl(lag(s.time_waited_micro) over (partition by s.dbid, s.instance_number, s.event order by s.snap_id),0)), + s.time_waited_micro, s.time_waited_micro - lag(s.time_waited_micro) over (partition by s.dbid, s.instance_number, s.event order by s.snap_id), + s.time_waited_micro), 0) time_waited + from stats$system_event s, + stats$snapshot ss, + (select distinct + dbid, + instance_number + from stats$database_instance + where instance_name = '&&V_INSTANCE') i + where ss.dbid = i.dbid + and ss.instance_number = i.instance_number + and ss.snap_time between (sysdate - &&V_NBR_DAYS) and sysdate + and s.snap_id = ss.snap_id + and s.dbid = ss.dbid + and s.instance_number = ss.instance_number + and s.event like '%'||'&&V_STATNAME'||'%') + group by sort0, + day, + hr, + name) +order by sort0, name; +spool off +set verify on recsep each diff --git a/vg/sp_evtrends.sql b/vg/sp_evtrends.sql new file mode 100644 index 0000000..17a4aa0 --- /dev/null +++ b/vg/sp_evtrends.sql @@ -0,0 +1,135 @@ +/********************************************************************** + * File: sp_evtrends.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 15-Jul-2003 + * + * Description: + * Query to display "trends" for specific statistics captured by + * the STATSPACK package, and display summarized totals daily and + * hourly as a ratio using the RATIO_FOR_REPORT analytic function. + * + * The intent is to find the readings with the greatest deviation + * from the average value, as these are likely to be "periods of + * interest" for further, more detailed research... + * + * This version of the script is intended for Oracle9i, which + * records TIME_WAITED_MICRO in micro-seconds (1/100,000ths of + * a second). + * + * Modifications: + * TGorman 02may04 corrected bug in LAG() OVER () clauses + * TGorman 10aug04 changed "deviation" column from some kind of + * weird "deviation from average" calculation to + * a more straight-forward percentage ratio + * TGorman 25aug04 use "ratio_to_report()" function instead + *********************************************************************/ +set echo off feedback off timing off pagesize 200 linesize 130 +set trimout on trimspool on verify off recsep off +col sort0 noprint +col day format a6 heading "Day" +col hr format a6 heading "Hour" +col time_waited format 999,999,999,990.00 heading "Secs Waited" + +accept V_INSTANCE prompt "Please enter the ORACLE_SID value: " +accept V_NBR_DAYS prompt "How many days of data to examine? " +prompt +prompt +prompt Some useful database statistics to search upon: +col name format a60 heading "Name" +select chr(9)||name name +from v$event_name +order by 1; +accept V_STATNAME prompt "What statistic do you want to analyze? " + +col spoolname new_value V_SPOOLNAME noprint +select replace(replace(replace(lower('&&V_STATNAME'),' ','_'),'(',''),')','') spoolname +from dual; + +spool sp_evtrends_&&V_SPOOLNAME +clear breaks computes +break on day skip 1 on report +col ratio format a60 heading "Percentage of total over all days" +col name format a30 heading "Statistic Name" +prompt +prompt Daily trends for "&&V_STATNAME"... +select sort0, + day, + name, + time_waited, + rpad('*', round((ratio_to_report(time_waited) over (partition by name))*60, 0), '*') ratio +from (select sort0, + day, + name, + sum(time_waited)/100000 time_waited + from (select to_char(ss.snap_time, 'YYYYMMDD') sort0, + to_char(ss.snap_time, 'DD-MON') day, + s.snap_id, + s.event name, + nvl(decode(greatest(s.time_waited_micro, nvl(lag(s.time_waited_micro) over (partition by s.dbid, s.instance_number, s.event order by s.snap_id),0)), + s.time_waited_micro, s.time_waited_micro - lag(s.time_waited_micro) over (partition by s.dbid, s.instance_number, s.event order by s.snap_id), + s.time_waited_micro), 0) time_waited + from stats$system_event s, + stats$snapshot ss, + (select distinct + dbid, + instance_number + from stats$database_instance + where instance_name = '&&V_INSTANCE') i + where ss.dbid = i.dbid + and ss.instance_number = i.instance_number + and ss.snap_time between (sysdate - &&V_NBR_DAYS) and sysdate + and s.snap_id = ss.snap_id + and s.dbid = ss.dbid + and s.instance_number = ss.instance_number + and s.event like '%'||'&&V_STATNAME'||'%') + group by sort0, + day, + name) +order by sort0, name; + +clear breaks computes +break on day skip 1 on hr on report +col ratio format a60 heading "Percentage of total over all hours for each day" +prompt +prompt Daily/hourly trends for "&&V_STATNAME"... +select sort0, + day, + hr, + name, + time_waited, + rpad('*', round((ratio_to_report(time_waited) over (partition by day, name))*60, 0), '*') ratio +from (select sort0, + day, + hr, + name, + sum(time_waited)/100000 time_waited + from (select to_char(ss.snap_time, 'YYYYMMDDHH24') sort0, + to_char(ss.snap_time, 'DD-MON') day, + to_char(ss.snap_time, 'HH24')||':00' hr, + s.snap_id, + s.event name, + nvl(decode(greatest(s.time_waited_micro, nvl(lag(s.time_waited_micro) over (partition by s.dbid, s.instance_number, s.event order by s.snap_id),0)), + s.time_waited_micro, s.time_waited_micro - lag(s.time_waited_micro) over (partition by s.dbid, s.instance_number, s.event order by s.snap_id), + s.time_waited_micro), 0) time_waited + from stats$system_event s, + stats$snapshot ss, + (select distinct + dbid, + instance_number + from stats$database_instance + where instance_name = '&&V_INSTANCE') i + where ss.dbid = i.dbid + and ss.instance_number = i.instance_number + and ss.snap_time between (sysdate - &&V_NBR_DAYS) and sysdate + and s.snap_id = ss.snap_id + and s.dbid = ss.dbid + and s.instance_number = ss.instance_number + and s.event like '%'||'&&V_STATNAME'||'%') + group by sort0, + day, + hr, + name) +order by sort0, name; +spool off +set verify on recsep each diff --git a/vg/sp_explain_plan.sql b/vg/sp_explain_plan.sql new file mode 100644 index 0000000..444d35f --- /dev/null +++ b/vg/sp_explain_plan.sql @@ -0,0 +1,41 @@ +SELECT /*+ opt_param('parallel_execution_enabled', 'false') */ + /* EXEC_FROM_DBMS_XPLAN */ id + , POSITION + , LEVEL -1 depth + , operation + , options + , object_name + , cardinality + , bytes + , temp_space + , cost + , io_ cost + , cpu_cost + , NULL + , partition_start + , partition_stop + , object_node + , other_tag + , distribution + , NULL + , access_predicates + , filter_predicates + , other + , remarks +FROM plan_table START WITH id = 0 AND TIMESTAMP >= + (SELECT MAX(TIMESTAMP) + FROM stats$sql_plan + WHERE id = 0 + AND hash_plan_value = &hash_plan_value + AND nvl(statement_id, ' ') NOT LIKE 'SYS_LE%' + ) +AND nvl(statement_id, ' ') NOT LIKE 'SYS_LE%' +AND hash_plan_value = &hash_plan_value +CONNECT BY (PRIOR id = parent_id + AND PRIOR nvl(statement_id, ' ') = nvl(statement_id, ' ') + AND PRIOR TIMESTAMP <= TIMESTAMP) OR(PRIOR nvl(object_name, ' ') LIKE 'SYS_LE%' AND PRIOR nvl(object_name, ' ') = nvl(statement_id, ' ') AND id = 0 AND PRIOR TIMESTAMP <= TIMESTAMP) +ORDER siblings BY id + + + +438344612 \ No newline at end of file diff --git a/vg/sp_loadprofile.sql b/vg/sp_loadprofile.sql new file mode 100644 index 0000000..be61997 --- /dev/null +++ b/vg/sp_loadprofile.sql @@ -0,0 +1,120 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display load profile from STATSPACK +* All figures delta between two consecutive snapshots +* +* Syntax : @file_name [dbid] [instancenumber] +* +* dbid and instancenumber are optional. +* If not passes then it takes current instance's dbid and instancenumber +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Jun-07 Vishal Gupta First Draft +* +*/ +set term on + + +DEFINE days="&&1" +DEFINE DBID="&&2" +DEFINE INSTANCE_NUMBER="&&3" + +set echo off +set verify off +set pages 10000 +set lines 150 +TTITLE CENTER "L O A D P R O F I L E T R E N D" - +SKIP 1 CENTER "###################################" - +SKIP 3 CENTER "" +COLUMN snap_id HEADING "Snap#" FORMAT 999999 +COLUMN snap_time HEADING "Snap Time" FORMAT a17 +COLUMN elapsed_sec HEADING "Elap|(Sec)" FORMAT 999,999 +COLUMN redo_size HEADING "Redo|Size|(KB)" FORMAT 9,999,999 +COLUMN logical_reads HEADING "Logical|Reads|(K Blocks)" FORMAT 9,999,999,999 +COLUMN block_changes HEADING "Block|Changes|(K)" FORMAT 9,999,999 +COLUMN phy_reads HEADING "Phy|Reads|(K Blocks)" FORMAT 9,999,999 +COLUMN phy_writes HEADING "Phy|Writes|(K Blocks)" FORMAT 9,999,999 +COLUMN user_calls HEADING "User|Calls|('000s)" FORMAT 9,999 +COLUMN parses HEADING "Parses|('000s)" FORMAT 9,999 +COLUMN hard_parses_reads HEADING "Hard|Parses|('000s)" FORMAT 99,999 +COLUMN sorts_mem HEADING "Sorts#|(Mem)|('000s)" FORMAT 99,999 +COLUMN sorts_disk HEADING "Sorts#|(Disk)|('000s)" FORMAT 99,999 +COLUMN logons HEADING "Logons" FORMAT 9,999 +COLUMN commit HEADING "Commits" FORMAT 99,999 +COLUMN rollback HEADING "Rollbacks" FORMAT 99,999 + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.snap_time + , (s.snap_time - LAG (s.snap_time) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) ) *1440 * 60 elapsed_sec + FROM stats$snapshot s + , v$database d + , v$instance i + WHERE s.dbid = NVL(&&DBID,d.dbid) + AND s.instance_number = NVL(&&INSTANCE_NUMBER, i.instance_number) + AND s.snap_time > sysdate - &&days + and s.snap_id > 40000 +-- and to_char(s1.snap_time,'HH24') = '08' + ) +SELECT /*+ USE_NL(s1,s2,ss1,ss2) */ + s1.snap_id + , TO_CHAR(s1.snap_time,'dd-mm-yy hh24:mi:ss') snap_time +-- , s1.elapsed_sec + , ROUND(MAX(DECODE(ss2.name, 'redo size', ROUND ((ss2.value - ss1.value)) ) ) / 1024) redo_size + , ROUND(MAX(DECODE(ss2.name, 'session logical reads', ROUND ((ss2.value - ss1.value)/1024)))) logical_reads + , ROUND(MAX(DECODE(ss2.name, 'db block changes', ROUND ((ss2.value - ss1.value)/1024)))) block_changes + , ROUND(MAX(DECODE(ss2.name, 'physical reads', ROUND ((ss2.value - ss1.value)/1024)))) phy_reads + , ROUND(MAX(DECODE(ss2.name, 'physical writes', ROUND ((ss2.value - ss1.value)/1024)))) phy_writes + , ROUND(MAX(DECODE(ss2.name, 'user calls', ROUND ((ss2.value - ss1.value)/1000)))) user_calls + , ROUND(MAX(DECODE(ss2.name, 'parse count (total)', ROUND ((ss2.value - ss1.value)/1000)))) parses + , ROUND(MAX(DECODE(ss2.name, 'parse count (hard)', ROUND ((ss2.value - ss1.value)/1000)))) hard_parses_reads + , ROUND(MAX(DECODE(ss2.name, 'sorts (memory)', ROUND ((ss2.value - ss1.value)/1000)))) sorts_mem + , ROUND(MAX(DECODE(ss2.name, 'sorts (disk)', ROUND ((ss2.value - ss1.value)/1000)))) sorts_disk + , ROUND(MAX(DECODE(ss2.name, 'logons cumulative', ROUND ((ss2.value - ss1.value))))) logons + , ROUND(MAX(DECODE(ss2.name, 'user commits', ROUND ((ss2.value - ss1.value))))) commit + , ROUND(MAX(DECODE(ss2.name, 'user rollbacks', ROUND ((ss2.value - ss1.value))))) rollback +FROM snap s1 + , stats$sysstat ss1 + , stats$sysstat ss2 +where s1.dbid = ss1.dbid +and s1.instance_number = ss1.instance_number +and s1.prev_snap_id = ss1.snap_id +and s1.dbid = ss2.dbid +and s1.instance_number = ss2.instance_number +and s1.snap_id = ss2.snap_id +and ss1.name = ss2.name +and ss2.name in ('redo size' + ,'session logical reads' + ,'db block changes' + ,'physical reads' + ,'physical writes' + ,'user calls' + ,'parse count (total)' + ,'parse count (hard)' + ,'sorts (memory)' + ,'sorts (disk)' + ,'logons cumulative' + ,'execute count' + ,'user commits' + ,'user rollbacks' + ) +and elapsed_sec > 0 +GROUP BY s1.snap_id + , s1.snap_time + , elapsed_sec +order by s1.snap_time asc +/ + + +@@footer \ No newline at end of file diff --git a/vg/sp_loadprofile_persec.sql b/vg/sp_loadprofile_persec.sql new file mode 100644 index 0000000..10af95c --- /dev/null +++ b/vg/sp_loadprofile_persec.sql @@ -0,0 +1,121 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display load profile from STATSPACK +* All figures are per second +* +* Syntax : @file_name [dbid] [instancenumber] +* +* dbid and instancenumber are optional. +* If not passes then it takes current instance's dbid and instancenumber +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 02-Jun-07 Vishal Gupta First Draft +* +*/ +set term on + + +DEFINE days="&&1" +DEFINE DBID="&2" +DEFINE INSTANCE_NUMBER="&3" + +set echo off +set verify off +set pages 10000 +set lines 150 +TTITLE CENTER "L O A D P R O F I L E T R E N D" - +SKIP 1 CENTER "###################################" - +SKIP 2 CENTER "( All figures per second from STATSPACK)" - +SKIP 3 CENTER "" +COLUMN snap_id HEADING "Snap#" FORMAT 999999 +COLUMN snap_time HEADING "Snap Time" FORMAT a17 +COLUMN elapsed_sec HEADING "Elap|(Sec)" FORMAT 999,999,999 +COLUMN redo_size_per_sec HEADING "Redo|Size|(KB)" FORMAT 999,999 +COLUMN logical_reads_per_sec HEADING "Logical|Reads|(Blocks)" FORMAT 999,999 +COLUMN block_changes_per_sec HEADING "Block|Changes" FORMAT 99,999,999 +COLUMN phy_reads_per_sec HEADING "Phy|Reads|(Blocks)" FORMAT 9,999,999 +COLUMN phy_writes_per_sec HEADING "Phy|Writes|(Blocks)" FORMAT 9,999,999 +COLUMN user_calls_per_sec HEADING "User|Calls" FORMAT 9,999 +COLUMN parses_per_sec HEADING "Parses" FORMAT 99,999 +COLUMN hard_parses_reads_per_sec HEADING "Hard|Parses" FORMAT 99,999 +COLUMN sorts_mem_per_sec HEADING "Sorts#|(Mem)" FORMAT 99,999 +COLUMN sorts_disk_per_sec HEADING "Sorts#|(Disk)" FORMAT 99,999 +COLUMN logons_per_sec HEADING "Logons" FORMAT 9,999 +COLUMN commit_per_sec HEADING "Commits" FORMAT 99,999 +COLUMN rollback_per_sec HEADING "Rollbacks" FORMAT 99,999 + +WITH snap +AS + (SELECT s.dbid + , s.instance_number + , s.snap_id + , LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id + , s.snap_time + , (s.snap_time - LAG (s.snap_time) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) ) *1440 * 60 elapsed_sec + FROM stats$snapshot s + , v$database d + , v$instance i + WHERE s.dbid = NVL('&&DBID',d.dbid) + AND s.instance_number = NVL('&&INSTANCE_NUMBER', i.instance_number) + AND s.snap_time > sysdate - &&days +-- and s.snap_id > 40000 +-- and to_char(s1.snap_time,'HH24') = '08' + ) +SELECT /*+ USE_NL(s1,s2,ss1,ss2) */ + s1.snap_id + , TO_CHAR(s1.snap_time,'dd-mm-yy hh24:mi:ss') snap_time +-- , s1.elapsed_sec + , ROUND(MAX(DECODE(ss2.name, 'redo size', ROUND ((ss2.value - ss1.value)/ elapsed_sec ) ) ) / 1024) redo_size_per_sec + , ROUND(MAX(DECODE(ss2.name, 'session logical reads', ROUND ((ss2.value - ss1.value)/ elapsed_sec )))) logical_reads_per_sec + , ROUND(MAX(DECODE(ss2.name, 'db block changes', ROUND ((ss2.value - ss1.value)/ elapsed_sec )))) block_changes_per_sec + , ROUND(MAX(DECODE(ss2.name, 'physical reads', ROUND ((ss2.value - ss1.value)/ elapsed_sec )))/1024) phy_reads_per_sec + , ROUND(MAX(DECODE(ss2.name, 'physical writes', ROUND ((ss2.value - ss1.value)/elapsed_sec)))/1024) phy_writes_per_sec + , ROUND(MAX(DECODE(ss2.name, 'user calls', ROUND ((ss2.value - ss1.value)/elapsed_sec)))) user_calls_per_sec + , ROUND(MAX(DECODE(ss2.name, 'parse count (total)', ROUND ((ss2.value - ss1.value)/elapsed_sec)))) parses_per_sec + , ROUND(MAX(DECODE(ss2.name, 'parse count (hard)', ROUND ((ss2.value - ss1.value)/elapsed_sec)))) hard_parses_reads_per_sec + , ROUND(MAX(DECODE(ss2.name, 'sorts (memory)', ROUND ((ss2.value - ss1.value)/elapsed_sec)))) sorts_mem_per_sec + , ROUND(MAX(DECODE(ss2.name, 'sorts (disk)', ROUND ((ss2.value - ss1.value)/elapsed_sec)))) sorts_disk_per_sec + , ROUND(MAX(DECODE(ss2.name, 'logons cumulative', ROUND ((ss2.value - ss1.value)/elapsed_sec)))) logons_per_sec + , ROUND(MAX(DECODE(ss2.name, 'user commits', ROUND ((ss2.value - ss1.value)/elapsed_sec)))) commit_per_sec + , ROUND(MAX(DECODE(ss2.name, 'user rollbacks', ROUND ((ss2.value - ss1.value)/elapsed_sec)))) rollback_per_sec +FROM snap s1 + , stats$sysstat ss1 + , stats$sysstat ss2 +where s1.dbid = ss1.dbid +and s1.instance_number = ss1.instance_number +and s1.prev_snap_id = ss1.snap_id +and s1.dbid = ss2.dbid +and s1.instance_number = ss2.instance_number +and s1.snap_id = ss2.snap_id +and ss1.name = ss2.name +and ss2.name in ('redo size' + ,'session logical reads' + ,'db block changes' + ,'physical reads' + ,'physical writes' + ,'user calls' + ,'parse count (total)' + ,'parse count (hard)' + ,'sorts (memory)' + ,'sorts (disk)' + ,'logons cumulative' + ,'execute count' + ,'user commits' + ,'user rollbacks' + ) +and elapsed_sec > 0 +GROUP BY s1.snap_id + , s1.snap_time + , elapsed_sec +order by s1.snap_time asc +/ + + +@@footer \ No newline at end of file diff --git a/vg/sp_merge.sql b/vg/sp_merge.sql new file mode 100644 index 0000000..f5c68b4 --- /dev/null +++ b/vg/sp_merge.sql @@ -0,0 +1,273 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Merge statspack from multiple sources into single database +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-07 Vishal Gupta First Draft +*/ + +set serveroutput on size 1000000 +set verify off + +DECLARE + sql_text VARCHAR2(32767); + v_env_type VARCHAR2(30) := '&&1'; + v_db_version VARCHAR2(30) := '&2'; + v_db_link VARCHAR2(4000) ; + v_perfstat_schema_owner VARCHAR2(30) ; + v_update_cols_count NUMBER; + v_scn NUMBER; + v_snap_id_exists VARCHAR2(1); + v_days NUMBER := 3; + + + CURSOR cur_constraint_cols(p_owner DBA_TAB_COLUMNS.OWNER%TYPE + , p_table_name DBA_TAB_COLUMNS.TABLE_NAME%TYPE) + is + SELECT cc.COLUMN_NAME, tc.NULLABLE + FROM DBA_CONSTRAINTS C, DBA_CONS_COLUMNS CC , DBA_TAB_COLUMNS tc + WHERE C.TABLE_NAME = p_table_name + AND C.CONSTRAINT_TYPE in ( 'P' ,'U') + AND C.OWNER = p_owner + AND C.OWNER = CC.OWNER + AND C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME + AND C.TABLE_NAME = CC.TABLE_NAME + AND cc.OWNER = tc.OWNER + AND cc.TABLE_NAME = tc.TABLE_NAME + AND cc.COLUMN_NAME = tc.COLUMN_NAME + order by POSITION; + rec_constraint_cols cur_constraint_cols%ROWTYPE; + + CURSOR cur_tab_cols(p_owner DBA_TAB_COLUMNS.OWNER%TYPE + , p_table_name DBA_TAB_COLUMNS.TABLE_NAME%TYPE) + is + SELECT column_name + FROM DBA_TAB_COLUMNS + WHERE TABLE_NAME = p_table_name + AND OWNER = p_owner + order by COLUMN_ID; + rec_tab_cols cur_tab_cols%ROWTYPE; + + CURSOR cur_update_cols(p_owner DBA_TAB_COLUMNS.OWNER%TYPE + , p_table_name DBA_TAB_COLUMNS.TABLE_NAME%TYPE) + is + SELECT column_name + FROM DBA_TAB_COLUMNS t + WHERE TABLE_NAME = p_table_name + AND OWNER = p_owner + AND t.column_name NOT IN ( SELECT COLUMN_NAME FROM DBA_CONSTRAINTS C, DBA_CONS_COLUMNS CC + WHERE C.TABLE_NAME = t.table_name + AND C.CONSTRAINT_TYPE in ( 'P' ,'U') + AND C.OWNER = t.OWNER + AND C.OWNER = CC.OWNER + AND C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME + AND C.TABLE_NAME = CC.TABLE_NAME) + order by COLUMN_ID; + rec_update_cols cur_update_cols%ROWTYPE; + + CURSOR cur_check_snapid_exists(p_owner DBA_TAB_COLUMNS.OWNER%TYPE, p_table_name DBA_TAB_COLUMNS.TABLE_NAME%TYPE) + is + SELECT 'Y' + FROM DBA_CONSTRAINTS a + WHERE OWNER = p_owner + AND TABLE_NAME = p_table_name + AND CONSTRAINT_TYPE = 'R' + AND R_CONSTRAINT_NAME = 'STATS$SNAPSHOT_PK'; + +BEGIN + + DBMS_OUTPUT.PUT_LINE('###########################################'); + DBMS_OUTPUT.PUT_LINE('Job Started at ' || to_char(sysdate,'DD-MON-YYYY hh24:MI:SS') ); + + FOR i in (SELECT database + , active + , version + , environment + , schema_name + from perfstat_control.STATSPACK_MERGE_CONTROL + where active = 'Y' + AND version = v_db_version + AND environment = v_env_type + ORDER BY database) + LOOP + v_db_link := i.database; + v_perfstat_schema_owner := i.schema_name; + + DBMS_OUTPUT.PUT_LINE('------------------------------------------------'); + DBMS_OUTPUT.PUT_LINE(v_db_link); + DBMS_OUTPUT.PUT_LINE(v_perfstat_schema_owner); + + -- New data might get inserted while we are merging all the tables of statspack + -- corresponding snap_id would not exists for data inserted after merge of stats$snapshot + -- So, we need to use flashback query "as os SCN 1234". + v_scn := 0; + + BEGIN + + EXECUTE IMMEDIATE 'SELECT sys.dbms_flashback.get_system_change_number() FROM dual@' || v_db_link INTO v_scn; + + FOR tbl in ( + select 'STATS$DATABASE_INSTANCE' table_name from dual + UNION ALL + select 'STATS$LEVEL_DESCRIPTION' from dual + UNION ALL + select 'STATS$STATSPACK_PARAMETER' from dual + UNION ALL + select 'STATS$SNAPSHOT' from dual + UNION ALL + select * + from (SELECT table_name + FROM DBA_TABLES + WHERE OWNER = v_perfstat_schema_owner + and table_name not in ('STATS$DATABASE_INSTANCE' + ,'STATS$LEVEL_DESCRIPTION' + ,'STATS$STATSPACK_PARAMETER' + ,'STATS$SNAPSHOT' + ,'STATS$IDLE_EVENT') + order by 1 + ) + ) + loop + + /* Sample Merge statement + -- + -- Limit the historical data to be sampled from source database to x days old. + -- Old data in central repository is not deleted. + -- + -- MERGE + -- INTO table_l l + -- USING (select a.* from stats$sql_summary@FIRE02PD a as of SCN 1234, stats$snapshot@FIRE02PD b as of SCN 1234 + -- where a.dbid = b.dbid and a.instance_number = b.instance_number and a.snap_id = b.snap_id + -- and and b.snap_time > sysdate - 3 ) r + -- ON( l.primary_key_col1 = r.primary_key_col1 + -- AND l.primary_key_col2 = r.primary_key_col2 -- For nullable columns use NVL + -- ) + -- WHEN matched THEN + -- UPDATE + -- SET l.col1 = r.col2, + -- l.col2 = r.col2 + -- WHERE l.col1 != r.col1 + -- OR l.col2 != r.col2 + -- OR l.col3 != r.col3 + -- WHEN NOT matched THEN + -- INSERT(col1, col2) + -- VALUES(r.col1, r.col2) + -- ; + + + */ + + v_snap_id_exists := 'N'; + OPEN cur_check_snapid_exists(v_perfstat_schema_owner, tbl.table_name); + FETCH cur_check_snapid_exists INTO v_snap_id_exists; + CLOSE cur_check_snapid_exists; + + sql_text := 'merge into ' ; + sql_text := sql_text || v_perfstat_schema_owner || '.' || tbl.table_name + || ' l using ( SELECT a.* from ' || tbl.table_name || '@' || v_db_link || ' as of SCN ' || v_scn || ' a '; + + IF v_snap_id_exists = 'Y' THEN + sql_text := sql_text || ' , stats$snapshot@' || v_db_link || ' as of SCN ' || v_scn || ' b '; + sql_text := sql_text || ' where a.dbid = b.dbid '; + sql_text := sql_text || ' and a.instance_number = b.instance_number '; + sql_text := sql_text || ' and a.snap_id = b.snap_id '; + sql_text := sql_text || ' and b.snap_time > sysdate - ' || v_days ; + END IF; + + sql_text := sql_text || ' ) r ON ( '; + + OPEN cur_constraint_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_constraint_cols INTO rec_constraint_cols; + EXIT WHEN cur_constraint_cols%NOTFOUND; + IF rec_constraint_cols.nullable = 'Y' THEN + sql_text := sql_text || 'nvl(l.' || rec_constraint_cols.COLUMN_NAME || ',''0'') = nvl(r.' || rec_constraint_cols.column_name||',''0'') AND '; + ELSE + sql_text := sql_text || 'l.' || rec_constraint_cols.COLUMN_NAME || ' = r.' || rec_constraint_cols.column_name||' AND '; + END IF; + END LOOP; + CLOSE cur_constraint_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -4); + sql_text := sql_text || ' ) '; + + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + END LOOP; + v_update_cols_count := cur_update_cols%ROWCOUNT; + CLOSE cur_update_cols; + + IF v_update_cols_count > 0 THEN + sql_text := sql_text || ' WHEN MATCHED THEN UPDATE SET '; + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + sql_text := sql_text || 'l.' || rec_update_cols.COLUMN_NAME || ' = r.' || rec_update_cols.column_name||','; + END LOOP; + CLOSE cur_update_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) - 1); + + sql_text := sql_text || ' WHERE ' ; + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + sql_text := sql_text || 'l.' || rec_update_cols.COLUMN_NAME || ' != r.' || rec_update_cols.column_name||' OR '; + END LOOP; + CLOSE cur_update_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -3); + + END IF; + + sql_text := sql_text || ' WHEN NOT MATCHED THEN INSERT (' ; + + OPEN cur_tab_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_tab_cols INTO rec_tab_cols; + EXIT WHEN cur_tab_cols%NOTFOUND; + sql_text := sql_text || rec_tab_cols.COLUMN_NAME || ','; + END LOOP; + CLOSE cur_tab_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -1); + + sql_text := sql_text || ' ) VALUES ('; + + OPEN cur_tab_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_tab_cols INTO rec_tab_cols; + EXIT WHEN cur_tab_cols%NOTFOUND; + sql_text := sql_text || 'r.' || rec_tab_cols.COLUMN_NAME || ','; + END LOOP; + CLOSE cur_tab_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -1); + sql_text := sql_text || ' ) ' ; + DBMS_OUTPUT.PUT_LINE (tbl.table_name); + IF tbl.table_name = 'STATS$SGASTAT' THEN + null; + --DBMS_OUTPUT.PUT_LINE (SQL_TEXT); + END IF; + --EXIT; + execute immediate sql_text ; + commit; + end loop; + + EXECUTE immediate 'alter session close database link ' || v_db_link ; + + EXCEPTION + WHEN others THEN + DBMS_OUTPUT.PUT_LINE(sqlerrm); + END; + + END LOOP; + DBMS_OUTPUT.PUT_LINE('###########################################'); + DBMS_OUTPUT.PUT_LINE('Job Finished at ' || to_char(sysdate,'DD-MON-YYYY hh24:MI:SS') ); + +END; +/ + diff --git a/vg/sp_merge_control.sql b/vg/sp_merge_control.sql new file mode 100644 index 0000000..a51247e --- /dev/null +++ b/vg/sp_merge_control.sql @@ -0,0 +1,50 @@ + + CREATE TABLE "PERFSTAT_CONTROL"."STATSPACK_MERGE_CONTROL" + ( "DATABASE" VARCHAR2(30 BYTE) NOT NULL ENABLE, + "ACTIVE" VARCHAR2(1 BYTE) NOT NULL ENABLE, + "VERSION" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "ENVIRONMENT" VARCHAR2(10 BYTE) NOT NULL ENABLE, + "SCHEMA_NAME" VARCHAR2(30 BYTE), + CONSTRAINT "STATSPACK_MERGE_CONTROL_PK" PRIMARY KEY ("DATABASE") + USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS + STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 + PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) + TABLESPACE "USERS" ENABLE, + CONSTRAINT "SMC_ACTIVE_CHECK" CHECK (ACTIVE IN ('Y','N')) ENABLE, + CONSTRAINT "SMC_VERSION_CHECK" CHECK (version IN ('9.2','10.2')) ENABLE, + CONSTRAINT "SMC_ENVIRONMENT_CHECK" CHECK (ENVIRONMENT IN ('DEV','TEST','PROD')) ENABLE + ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING + STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 + PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) + TABLESPACE "USERS" ; + + COMMENT ON COLUMN "PERFSTAT_CONTROL"."STATSPACK_MERGE_CONTROL"."SCHEMA_NAME" IS 'Auto poplated through a trigger.'; + + CREATE OR REPLACE TRIGGER "PERFSTAT_CONTROL"."STATSPACK_MERGE_CONTROL_IU_TRG" + BEFORE INSERT OR UPDATE ON STATSPACK_MERGE_CONTROL +FOR EACH ROW +BEGIN + :NEW.DATABASE := UPPER(:new.DATABASE); + :NEW.ENVIRONMENT := UPPER(:new.ENVIRONMENT); + :NEW.ACTIVE := UPPER(:new.ACTIVE); + :NEW.schema_name := UPPER(:new.schema_name); + + IF :NEW.version = '10.2' and :NEW.environment = 'PROD' THEN + :new.schema_name := 'PERFSTAT_PROD_10G'; + ELSIF :NEW.version = '9.2' and :NEW.environment = 'PROD' THEN + :new.schema_name := 'PERFSTAT_PROD_9I'; + ELSIF :NEW.version = '10.2' and :NEW.environment = 'TEST' THEN + :new.schema_name := 'PERFSTAT_TEST_10G'; + ELSIF :NEW.version = '9.2' and :NEW.environment = 'TEST' THEN + :new.schema_name := 'PERFSTAT_TEST_9I'; + ELSIF :NEW.version = '10.2' and :NEW.environment = 'DEV' THEN + :new.schema_name := 'PERFSTAT_DEV_10G'; + ELSIF :NEW.version = '9.2' and :NEW.environment = 'DEV' THEN + :new.schema_name := 'PERFSTAT_DEV_9I'; + END IF; +END; + + +/ +ALTER TRIGGER "PERFSTAT_CONTROL"."STATSPACK_MERGE_CONTROL_IU_TRG" ENABLE; + diff --git a/vg/sp_merge_convert_to_partitions.sql b/vg/sp_merge_convert_to_partitions.sql new file mode 100644 index 0000000..7bac81a --- /dev/null +++ b/vg/sp_merge_convert_to_partitions.sql @@ -0,0 +1,185 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : To convert statspack tables into partitioned tables (based on DBID). +* to hold consolidated data from multiple databases. +* Version : 9.2.x, 10.2.x, 11.1.x, 11.2.x +* Usage : Login as DBA and pass schema name holding the consolidated statspack repository +* as argument +* Syntax : scriptname.sql +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-Oct-09 Vishal Gupta First Draft +*/ +set term on + +set verify off +set serveroutput on size 1000000 +DECLARE + lv_sql VARCHAR2(4000) := null; + lv_schema_owner VARCHAR2(30) := '&&1'; + lv_temporary_table_name VARCHAR2(30) := 'STATS$_TEMP'; + lv_num_errors PLS_INTEGER; +BEGIN + + BEGIN + execute immediate 'drop table ' || lv_schema_owner || '.' || lv_temporary_table_name; + EXCEPTION + WHEN others THEN + null; + END; + + + + DBMS_OUTPUT.put_LINE('Converting non partition tables to partitioned table ...' ); + -- Identify tables LIST paritioned on DBID + FOR i in (SELECT t.owner, t.table_name , t.tablespace_name + FROM dba_tables t + WHERE t.owner = lv_schema_owner + AND t.table_name like 'STATS$%' + AND t.table_name <> lv_temporary_table_name + AND t.PARTITIONED = 'NO' + AND EXISTS (SELECT 1 + FROM dba_tab_columns c + WHERE c.owner = t.owner + AND c.table_name = t.table_name + AND c.column_name = 'DBID') +-- AND t.table_name = 'STATS$SNAPSHOT' + ORDER BY t.table_name + ) + LOOP + DBMS_OUTPUT.put_LINE(' ...... ' || i.owner || '.' || i.table_name ); + + + BEGIN + +-- -- Cleanup the redefinition (if left over from previous failed runs) +-- sys.DBMS_REDEFINITION.ABORT_REDEF_TABLE(uname => i.owner +-- , orig_table => i.table_name +-- , int_table => lv_temporary_table_name +-- ); + + -- Verify that the table is a candidate for online redefinition. + sys.dbms_redefinition.can_redef_table(uname => i.owner + , tname => i.table_name + , options_flag => sys.dbms_redefinition.cons_use_rowid + ); + + + -- Create interim partitioned table with same structure as non-partitioned table. + lv_sql := 'create table ' || i.owner || '.' || lv_temporary_table_name + || ' partition by list (DBID) ' + || ' ( PARTITION others VALUES (DEFAULT) ) ' + || ' tablespace ' || i.tablespace_name + || ' pctfree 5 pctused 95 ' + || ' as select * from ' || i.owner || '.' || i.table_name || ' where 1=2'; + execute immediate lv_sql; + +-- exit; + + -- Start the redefinition process + sys.DBMS_REDEFINITION.START_REDEF_TABLE(uname => i.owner + , orig_table => i.table_name + , int_table => lv_temporary_table_name + , options_flag => sys.dbms_redefinition.cons_use_rowid + ); + + -- Copy dependent objects. (Automatically create any triggers, indexes, materialized view logs, + -- grants, and constraints + sys.DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(uname => i.owner + , orig_table => i.table_name + , int_table => lv_temporary_table_name + , copy_indexes => sys.DBMS_REDEFINITION.CONS_ORIG_PARAMS + -- , copy_triggers => TRUE -- Default value + -- , copy_constraints => TRUE -- Default value + -- , copy_privileges => TRUE -- Default value + , ignore_errors => TRUE + , num_errors => lv_num_errors + -- , copy_statistics => FALSE -- Default value + -- , copy_mvlog => FALSE -- Default value + ); + + -- synchronize the interim table + sys.DBMS_REDEFINITION.SYNC_INTERIM_TABLE(uname => i.owner + , orig_table => i.table_name + , int_table => lv_temporary_table_name + ); + + -- Complete the redefinition + sys.DBMS_REDEFINITION.FINISH_REDEF_TABLE(uname => i.owner + , orig_table => i.table_name + , int_table => lv_temporary_table_name + ); + + EXCEPTION + WHEN others THEN + -- Abort the redefinition + sys.DBMS_REDEFINITION.ABORT_REDEF_TABLE(uname => i.owner + , orig_table => i.table_name + , int_table => lv_temporary_table_name + ); + + -- Disable temporary Foreign keys created by re-definition process + FOR cons in (SELECT * + FROM dba_constraints + WHERE constraint_type = 'R' + AND constraint_name like 'TMP$$_%') + LOOP + lv_sql := 'alter table ' || cons.owner || '.' || cons.table_name || ' drop constraint ' || cons.constraint_name ; + execute immediate lv_sql; + END LOOP; + + -- Drop the interim table + execute immediate 'drop table ' || lv_schema_owner || '.' || lv_temporary_table_name; + + -- Raise Exception + RAISE; + END; + + -- Disable temporary Foreign keys created by re-definition process + FOR cons in (SELECT * + FROM dba_constraints + WHERE constraint_type = 'R' + AND constraint_name like 'TMP$$_%') + LOOP + lv_sql := 'alter table ' || cons.owner || '.' || cons.table_name || ' drop constraint ' || cons.constraint_name ; + execute immediate lv_sql; + END LOOP; + + -- Drop the interim table + execute immediate 'drop table ' || lv_schema_owner || '.' || lv_temporary_table_name; + +-- -- For each DBID value, create partition. +-- FOR dbid in (SELECT DISTINCT dbid +-- FROM stats$database_instance d +-- WHERE NOT exists (SELECT 1 +-- FROM user_tab_partitions p +-- WHERE p.table_name = i.table_name +-- AND p.partition_name = 'P'||d.dbid +-- ) +-- ) +-- LOOP +-- lv_sql := 'alter table ' || i.table_name || ' split partition others values (' || dbid.dbid || ') ' +-- || ' into (partition p'|| dbid.dbid || ' , partition others )'; +-- -- DBMS_OUTPUT.put_LINE(lv_sql); +-- -- add partitions +-- DBMS_OUTPUT.put_LINE('Adding parition P' || dbid.dbid || ' FOR ' || i.table_name ); +-- execute immediate lv_sql; +-- END LOOP; + END LOOP; + +-- FOR i in ( SELECT 'alter index ' || index_name || ' rebuild partition ' || PARTITION_NAME lv_sql +-- FROM user_ind_partitions +-- WHERE status = 'UNUSABLE') +-- LOOP +-- execute immediate i.lv_sql; +-- END LOOP; + +END; +/ diff --git a/vg/sp_merge_create_partition_tables_10g.sql b/vg/sp_merge_create_partition_tables_10g.sql new file mode 100644 index 0000000..ede221e --- /dev/null +++ b/vg/sp_merge_create_partition_tables_10g.sql @@ -0,0 +1,2237 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Create STATSPACK repository with partition table to +* hold consolidated data from multiple databases. +* Version : 10.2.x +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-07 Vishal Gupta First Draft +*/ +set term on + +define tablespace_name=&&tablespace_name +prompt Using &&tablespace_name tablespace to store Statspack objects +prompt + +SET VERIFY OFF + +/* ------------------------------------------------------------------------- */ +create table STATS$DATABASE_INSTANCE +(dbid number not null +,instance_number number not null +,startup_time date not null +,snap_id number not null +,parallel varchar2(3) not null +,version varchar2(17) not null +,db_name varchar2(9) not null +,instance_name varchar2(16) not null +,host_name varchar2(64) +,constraint STATS$DATABASE_INSTANCE_PK primary key + (dbid, instance_number, startup_time) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$LEVEL_DESCRIPTION +(snap_level number not null +,description varchar2(300) +,constraint STATS$LEVEL_DESCRIPTION_PK primary key (snap_level) + using index tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) +) tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) +; + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (0, 'This level captures general statistics, including rollback segment, row cache, SGA, system events, background events, session events, system s +tatistics, wait statistics, lock statistics, and Latch information'); + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (5, 'This level includes capturing high resource usage SQL Statements, along with all data captured by lower levels'); + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (6, 'This level includes capturing SQL plan and SQL plan usage information for high resource usage SQL Statements, along with all data captured by +lower levels'); + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (7, 'This level captures segment level statistics, including logical and physical reads, row lock, itl and buffer busy waits, along with all data c +aptured by lower levels'); + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (10, 'This level includes capturing Child Latch statistics, along with all data captured by lower levels'); + +commit; + +/* ------------------------------------------------------------------------- */ + +create table STATS$SNAPSHOT +(snap_id number not null +,dbid number not null +,instance_number number not null +,snap_time date not null +,startup_time date not null +,session_id number not null +,serial# number +,snap_level number +,ucomment varchar2(160) +,executions_th number +,parse_calls_th number +,disk_reads_th number +,buffer_gets_th number +,sharable_mem_th number +,version_count_th number +,seg_phy_reads_th number not null +,seg_log_reads_th number not null +,seg_buff_busy_th number not null +,seg_rowlock_w_th number not null +,seg_itl_waits_th number not null +,seg_cr_bks_rc_th number +,seg_cu_bks_rc_th number +,seg_cr_bks_sd_th number -- left for prior +,seg_cu_bks_sd_th number -- releases +,snapshot_exec_time_s number +,all_init varchar2(5) +,baseline varchar2(1) +,constraint STATS$SNAPSHOT_PK primary key (snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SNAPSHOT_LVL_FK + foreign key (snap_level) references STATS$LEVEL_DESCRIPTION +,constraint STATS$SNAPSHOT_BASE_CK + check (baseline in ('Y')) +,constraint STATS$SNAPSHOT_FK foreign key (dbid, instance_number, startup_time) + references STATS$DATABASE_INSTANCE on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40 +; + +/* ------------------------------------------------------------------------- */ + +create table STATS$DB_CACHE_ADVICE +(snap_id number not null +,dbid number not null +,instance_number number not null +,id number not null +,name varchar2(20) not null +,block_size number not null +,buffers_for_estimate number not null +,advice_status varchar2(3) +,size_for_estimate number +,size_factor number +,estd_physical_read_factor number +,estd_physical_reads number +,estd_physical_read_time number +,estd_pct_of_db_time_for_reads number +,estd_cluster_reads number +,estd_cluster_read_time number +,constraint STATS$DB_CACHE_ADVICE_PK primary key + (snap_id, dbid, instance_number, id, buffers_for_estimate) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$DB_CACHE_ADVICE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + + +create table STATS$FILESTATXS +(snap_id number not null +,dbid number not null +,instance_number number not null +,tsname varchar2 (30) not null +,filename varchar2 (513) not null +,phyrds number +,phywrts number +,singleblkrds number +,readtim number +,writetim number +,singleblkrdtim number +,phyblkrd number +,phyblkwrt number +,wait_count number +,time number +,file# number +,constraint STATS$FILESTATXS_PK primary key + (snap_id, dbid, instance_number, tsname, filename) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$FILESTATXS_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + +create table STATS$TEMPSTATXS +(snap_id number not null +,dbid number not null +,instance_number number not null +,tsname varchar2(30) not null +,filename varchar2(513) not null +,phyrds number +,phywrts number +,singleblkrds number +,readtim number +,writetim number +,singleblkrdtim number +,phyblkrd number +,phyblkwrt number +,wait_count number +,time number +,file# number +,constraint STATS$TEMPSTATXS_PK primary key + (snap_id, dbid, instance_number, tsname, filename) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$TEMPSTATXS_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + +create table STATS$LATCH +(snap_id number not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,latch# number not null +,level# number +,gets number +,misses number +,sleeps number +,immediate_gets number +,immediate_misses number +,spin_gets number +,sleep1 number +,sleep2 number +,sleep3 number +,sleep4 number +,wait_time number +,constraint STATS$LATCH_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LATCH_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + +create table STATS$LATCH_CHILDREN +(snap_id number not null +,dbid number not null +,instance_number number not null +,latch# number not null +,child# number not null +,gets number +,misses number +,sleeps number +,immediate_gets number +,immediate_misses number +,spin_gets number +,sleep1 number +,sleep2 number +,sleep3 number +,sleep4 number +,wait_time number +,constraint STATS$LATCH_CHILDREN_PK primary key + (snap_id, dbid, instance_number, latch#, child#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LATCH_CHILDREN_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + +create table STATS$LATCH_PARENT +(snap_id number not null +,dbid number not null +,instance_number number not null +,latch# number not null +,level# number not null +,gets number +,misses number +,sleeps number +,immediate_gets number +,immediate_misses number +,spin_gets number +,sleep1 number +,sleep2 number +,sleep3 number +,sleep4 number +,wait_time number +,constraint STATS$LATCH_PARENT_PK primary key + (snap_id, dbid, instance_number, latch#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LATCH_PARENT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + +create table STATS$LATCH_MISSES_SUMMARY +(snap_id number not null +,dbid number not null +,instance_number number not null +,parent_name varchar2(50) +,where_in_code varchar2(64) +,nwfail_count number +,sleep_count number +,wtr_slp_count number +,constraint STATS$LATCH_MISSES_SUMMARY_PK primary key + (snap_id, dbid, instance_number, parent_name, where_in_code) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LATCH_MISSES_SUMMARY_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$LIBRARYCACHE +(snap_id number not null +,dbid number not null +,instance_number number not null +,namespace varchar2(15) not null +,gets number +,gethits number +,pins number +,pinhits number +,reloads number +,invalidations number +,dlm_lock_requests number +,dlm_pin_requests number +,dlm_pin_releases number +,dlm_invalidation_requests number +,dlm_invalidations number +,constraint STATS$LIBRARYCACHE_PK primary key + (snap_id, dbid, instance_number, namespace) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LIBRARYCACHE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + +create table STATS$BUFFER_POOL_STATISTICS +(snap_id number not null +,dbid number not null +,instance_number number not null +,id number not null +,name varchar2(20) +,block_size number +,set_msize number +,cnum_repl number +,cnum_write number +,cnum_set number +,buf_got number +,sum_write number +,sum_scan number +,free_buffer_wait number +,write_complete_wait number +,buffer_busy_wait number +,free_buffer_inspected number +,dirty_buffers_inspected number +,db_block_change number +,db_block_gets number +,consistent_gets number +,physical_reads number +,physical_writes number +,constraint STATS$BUFFER_POOL_STATS_PK primary key + (snap_id, dbid, instance_number, id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$BUFFER_POOL_STATS_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + +create table STATS$ROLLSTAT +(snap_id number not null +,dbid number not null +,instance_number number not null +,usn number not null +,extents number +,rssize number +,writes number +,xacts number +,gets number +,waits number +,optsize number +,hwmsize number +,shrinks number +,wraps number +,extends number +,aveshrink number +,aveactive number +,constraint STATS$ROLLSTAT_PK primary key + (snap_id, dbid, instance_number, usn) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$ROLLSTAT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + +create table STATS$ROWCACHE_SUMMARY +(snap_id number not null +,dbid number not null +,instance_number number not null +,parameter varchar2 (32) +,total_usage number +,usage number +,gets number +,getmisses number +,scans number +,scanmisses number +,scancompletes number +,modifications number +,flushes number +,dlm_requests number +,dlm_conflicts number +,dlm_releases number +,constraint STATS$ROWCACHE_SUMMARY_PK primary key + (snap_id, dbid, instance_number, parameter) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$ROWCACHE_SUMMARY_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + +/* ------------------------------------------------------------------------- */ + +create table STATS$SGA +(snap_id number not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,value number not null +,startup_time date +,parallel varchar2(3) +,version varchar2(17) +,constraint STATS$SGA_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SGA_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SGASTAT +(snap_id number not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,pool varchar2(12) +,bytes number +,constraint STATS$SGASTAT_U unique + (snap_id, dbid, instance_number, name, pool) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SGASTAT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SYSSTAT +(snap_id number not null +,dbid number not null +,instance_number number not null +,statistic# number not null +,name varchar2 (64) not null +,value number +,constraint STATS$SYSSTAT_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SYSSTAT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SESSTAT +(snap_id number not null +,dbid number not null +,instance_number number not null +,statistic# number not null +,value number +,constraint STATS$SESSTAT_PK primary key + (snap_id, dbid, instance_number, statistic#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SESSTAT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SYSTEM_EVENT +(snap_id number not null +,dbid number not null +,instance_number number not null +,event varchar2(64) not null +,total_waits number +,total_timeouts number +,time_waited_micro number +,event_id number +,constraint STATS$SYSTEM_EVENT_PK primary key + (snap_id, dbid, instance_number, event) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SYSTEM_EVENT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SESSION_EVENT +(snap_id number not null +,dbid number not null +,instance_number number not null +,event varchar2(64) not null +,total_waits number +,total_timeouts number +,time_waited_micro number +,max_wait number +,constraint STATS$SESSION_EVENT_PK primary key + (snap_id, dbid, instance_number, event) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SESSION_EVENT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$BG_EVENT_SUMMARY +(snap_id number not null +,dbid number not null +,instance_number number not null +,event varchar2(64) not null +,total_waits number +,total_timeouts number +,time_waited_micro number +,constraint STATS$BG_EVENT_SUMMARY_PK primary key + (snap_id, dbid, instance_number, event) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$BG_EVENT_SUMMARY_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$WAITSTAT +(snap_id number not null +,dbid number not null +,instance_number number not null +,class varchar2(22) +,wait_count number +,time number +,constraint STATS$WAITSTAT_PK primary key + (snap_id, dbid, instance_number, class) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$WAITSTAT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$ENQUEUE_STATISTICS +(snap_id number not null +,dbid number not null +,instance_number number not null +,eq_type varchar2(2) not null +,req_reason varchar2(64) not null +,total_req# number +,total_wait# number +,succ_req# number +,failed_req# number +,cum_wait_time number +,event# number +,constraint STATS$ENQUEUE_STATISTICS_PK primary key + (snap_id, dbid, instance_number, eq_type, req_reason) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$ENQUEUE_STATISTICS_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_SUMMARY +(snap_id number not null +,dbid number not null +,instance_number number not null +,text_subset varchar2(31) not null +,sql_text varchar2(1000) +,sql_id varchar2(13) +,sharable_mem number +,sorts number +,module varchar2(64) +,loaded_versions number +,fetches number +,executions number +,px_servers_executions number +,end_of_fetch_count number +,loads number +,invalidations number +,parse_calls number +,disk_reads number +,direct_writes number +,buffer_gets number +,application_wait_time number +,concurrency_wait_time number +,cluster_wait_time number +,user_io_wait_time number +,plsql_exec_time number +,java_exec_time number +,rows_processed number +,command_type number +,address raw(8) +,hash_value number +,old_hash_value number not null +,version_count number +,cpu_time number +,elapsed_time number +,outline_sid number +,outline_category varchar2(64) +,child_latch number +,sql_profile varchar2(64) +,program_id number +,program_line# number +,exact_matching_signature number +,force_matching_signature number +,last_active_time date +,constraint STATS$SQL_SUMMARY_PK primary key + (snap_id, dbid, instance_number, old_hash_value, text_subset) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_SUMMARY_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name +storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQLTEXT +(old_hash_value number not null +,text_subset varchar2(31) not null +,piece number not null +,sql_id varchar2(13) +,sql_text varchar2(64) +,address raw(8) +,command_type number +,last_snap_id number +,constraint STATS$SQLTEXT_PK primary key (old_hash_value, text_subset, piece) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) +) +tablespace &&tablespace_name + storage (initial 5m next 5m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_STATISTICS +(snap_id number not null +,dbid number not null +,instance_number number not null +,total_sql number not null +,total_sql_mem number not null +,single_use_sql number not null +,single_use_sql_mem number not null +,total_cursors number +,constraint STATS$SQL_STATISTICS_PK primary key + (snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_STATISTICS_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name +storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$RESOURCE_LIMIT +(snap_id number not null +,dbid number not null +,instance_number number not null +,resource_name varchar2(30) not null +,current_utilization number +,max_utilization number +,initial_allocation varchar2(10) +,limit_value varchar2(10) +,constraint STATS$RESOURCE_LIMIT_PK primary key + (snap_id, dbid, instance_number, resource_name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$RESOURCE_LIMIT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name +storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$DLM_MISC +(snap_id number not null +,dbid number not null +,instance_number number not null +,statistic# number not null +,name varchar2(38) +,value number +,constraint STATS$DLM_MISC_PK primary key + (snap_id, dbid, instance_number, statistic#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$DLM_MISC_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$CR_BLOCK_SERVER +(snap_id number not null +,dbid number not null +,instance_number number not null +,cr_requests number +,current_requests number +,data_requests number +,undo_requests number +,tx_requests number +,current_results number +,private_results number +,zero_results number +,disk_read_results number +,fail_results number +,fairness_down_converts number +,fairness_clears number +,free_gc_elements number +,flushes number +,flushes_queued number +,flush_queue_full number +,flush_max_time number +,light_works number +,errors number +,constraint STATS$CR_BLOCK_SERVER_PK primary key + (snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$CR_BLOCK_SERVER_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$CURRENT_BLOCK_SERVER +(snap_id number not null +,dbid number not null +,instance_number number not null +,pin1 number +,pin10 number +,pin100 number +,pin1000 number +,pin10000 number +,flush1 number +,flush10 number +,flush100 number +,flush1000 number +,flush10000 number +,write1 number +,write10 number +,write100 number +,write1000 number +,write10000 number +,constraint STATS$CURRENT_BLOCK_SERVER_PK primary key + (snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$CURRENT_BLOCK_SERVER_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ +create table STATS$INSTANCE_CACHE_TRANSFER +(snap_id number not null +,dbid number not null +,instance_number number not null +,instance number not null +,class varchar2(18) not null +,cr_block number +,cr_busy number +,cr_congested number +,current_block number +,current_busy number +,current_congested number +,constraint STATS$INST_CACHE_TRANSFER_PK primary key + (snap_id, dbid, instance_number, instance, class) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$INST_CACHE_TRANSFER_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$UNDOSTAT +(begin_time date not null +,end_time date not null +,snap_id number not null +,dbid number not null +,instance_number number not null +,undotsn number not null +,undoblks number +,txncount number +,maxquerylen number +,maxqueryid varchar2(13) +,maxconcurrency number +,unxpstealcnt number +,unxpblkrelcnt number +,unxpblkreucnt number +,expstealcnt number +,expblkrelcnt number +,expblkreucnt number +,ssolderrcnt number +,nospaceerrcnt number +,activeblks number +,unexpiredblks number +,expiredblks number +,tuned_undoretention number +,constraint STATS$UNDOSTAT_PK primary key + (begin_time, end_time, snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$UNDOSTAT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_PLAN_USAGE +(snap_id number not null +,dbid number not null +,instance_number number not null +,old_hash_value number not null +,text_subset varchar2(31) not null +,plan_hash_value number not null +,hash_value number +,sql_id varchar2(13) +,cost number +,address raw(8) +,optimizer varchar2(20) +,last_active_time date +,constraint STATS$SQL_PLAN_USAGE_PK primary key + (snap_id, dbid, instance_number + ,old_hash_value, text_subset, plan_hash_value, cost) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_PLAN_USAGE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 5m next 5m pctincrease 0) pctfree 5 pctused 40; + +create index STATS$SQL_PLAN_USAGE_HV ON STATS$SQL_PLAN_USAGE (old_hash_value) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0); + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_PLAN +(plan_hash_value number not null +,id number not null +,operation varchar2(30) +,options varchar2(30) +,object_node varchar2(40) +,object# number +,object_owner varchar2(31) +,object_name varchar2(31) +,object_alias varchar2(65) +,object_type varchar2(20) +,optimizer varchar2(20) +,parent_id number +,depth number +,position number +,search_columns number +,cost number +,cardinality number +,bytes number +,other_tag varchar2(35) +,partition_start varchar2(5) +,partition_stop varchar2(5) +,partition_id number +,other varchar2(4000) +,distribution varchar2(20) +,cpu_cost number +,io_cost number +,temp_space number +,access_predicates varchar2(4000) +,filter_predicates varchar2(4000) +,projection varchar2(4000) +,time number +,qblock_name varchar2(31) +,remarks varchar2(4000) +,snap_id number +,constraint STATS$SQL_PLAN_PK primary key + (plan_hash_value, id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) +) +tablespace &&tablespace_name + storage (initial 5m next 5m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SEG_STAT +(snap_id number not null +,dbid number not null +,instance_number number not null +,dataobj# number not null +,obj# number not null +,ts# number not null +,logical_reads number +,buffer_busy_waits number +,db_block_changes number +,physical_reads number +,physical_writes number +,direct_physical_reads number +,direct_physical_writes number +,gc_cr_blocks_received number +,gc_current_blocks_received number +,gc_buffer_busy number +,itl_waits number +,row_lock_waits number +,global_cache_cr_blocks_served number -- Starting with 10g these cols +,global_cache_cu_blocks_served number -- are no longer used +, constraint STATS$SEG_STAT_PK primary key + (snap_id, dbid, instance_number, dataobj#, obj#, ts#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SEG_STAT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 3m next 3m pctincrease 0); + + +-- Segment names having statistics + +create table STATS$SEG_STAT_OBJ +(dataobj# number not null +,obj# number not null +,ts# number not null +,dbid number not null +,owner varchar(30) not null +,object_name varchar(30) not null +,subobject_name varchar(30) +,object_type varchar2(18) +,tablespace_name varchar(30) not null +,constraint STATS$SEG_STAT_OBJ_PK primary key + (dataobj#, obj#, ts#, dbid) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0); + + +/* ------------------------------------------------------------------------- */ + +create table STATS$PGASTAT +(snap_id number not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,value number +,constraint STATS$SQL_PGASTAT_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_PGASTAT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$PARAMETER +(snap_id number not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,value varchar2(512) +,isdefault varchar2(9) +,ismodified varchar2(10) +,constraint STATS$PARAMETER_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$PARAMETER_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$INSTANCE_RECOVERY +(snap_id number not null +,dbid number not null +,instance_number number not null +,recovery_estimated_ios number +,actual_redo_blks number +,target_redo_blks number +,log_file_size_redo_blks number +,log_chkpt_timeout_redo_blks number +,log_chkpt_interval_redo_blks number +,fast_start_io_target_redo_blks number +,target_mttr number +,estimated_mttr number +,ckpt_block_writes number +,constraint STATS$INSTANCE_RECOVERY_PK primary key + (snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$INSTANCE_RECOVERY_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ +create table STATS$STATSPACK_PARAMETER +(dbid number not null +,instance_number number not null +,session_id number not null +,snap_level number not null +,num_sql number not null +,executions_th number not null +,parse_calls_th number not null +,disk_reads_th number not null +,buffer_gets_th number not null +,sharable_mem_th number not null +,version_count_th number not null +,pin_statspack varchar2(10) not null +,all_init varchar2(5) not null +,last_modified date +,ucomment varchar2(160) +,job number +,seg_phy_reads_th number not null +,seg_log_reads_th number not null +,seg_buff_busy_th number not null +,seg_rowlock_w_th number not null +,seg_itl_waits_th number not null +,seg_cr_bks_rc_th number not null +,seg_cu_bks_rc_th number not null +,old_sql_capture_mth varchar2(10) not null +,constraint STATS$STATSPACK_PARAMETER_PK primary key + (dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) + LOCAL +,constraint STATS$STATSPACK_LVL_FK + foreign key (snap_level) references STATS$LEVEL_DESCRIPTION +,constraint STATS$STATSPACK_P_PIN_CK + check (pin_statspack in ('TRUE', 'FALSE')) +,constraint STATS$STATSPACK_ALL_INIT_CK + check (all_init in ('TRUE', 'FALSE')) +,constraint STATS$STATSPACK_SQL_MTH_CK + check (old_sql_capture_mth in ('TRUE','FALSE')) +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0); + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SHARED_POOL_ADVICE +(snap_id number not null +,dbid number not null +,instance_number number not null +,shared_pool_size_for_estimate number not null +,shared_pool_size_factor number +,estd_lc_size number +,estd_lc_memory_objects number +,estd_lc_time_saved number +,estd_lc_time_saved_factor number +,estd_lc_load_time number +,estd_lc_load_time_factor number +,estd_lc_memory_object_hits number +,constraint STATS$SHARED_POOL_ADVICE_PK primary key + (snap_id, dbid, instance_number, shared_pool_size_for_estimate) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SHARED_POOL_ADVICE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_WORKAREA_HISTOGRAM +(snap_id number not null +,dbid number not null +,instance_number number not null +,low_optimal_size number not null +,high_optimal_size number not null +,optimal_executions number +,onepass_executions number +,multipasses_executions number +,total_executions number +,constraint STATS$SQL_WORKAREA_HIST_PK primary key + (snap_id, dbid, instance_number, low_optimal_size, high_optimal_size) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_WORKAREA_HIST_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$PGA_TARGET_ADVICE +(snap_id number not null +,dbid number not null +,instance_number number not null +,pga_target_for_estimate number not null +,pga_target_factor number +,advice_status varchar2(3) +,bytes_processed number +,estd_extra_bytes_rw number +,estd_pga_cache_hit_percentage number +,estd_overalloc_count number +,constraint STATS$PGA_TARGET_ADVICE_PK primary key + (snap_id, dbid, instance_number, pga_target_for_estimate) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$PGA_TARGET_ADVICE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$JAVA_POOL_ADVICE +(snap_id number not null +,dbid number not null +,instance_number number not null +,java_pool_size_for_estimate number not null +,java_pool_size_factor number +,estd_lc_size number +,estd_lc_memory_objects number +,estd_lc_time_saved number +,estd_lc_time_saved_factor number +,estd_lc_load_time number +,estd_lc_load_time_factor number +,estd_lc_memory_object_hits number +,constraint STATS$JAVA_POOL_ADVICE_PK primary key + (snap_id, dbid, instance_number, java_pool_size_for_estimate) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$JAVA_POOL_ADVICE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$THREAD +(snap_id number not null +,dbid number not null +,instance_number number not null +,thread# number not null +,thread_instance_number number +,status varchar2(6) +,open_time date +,current_group# number +,sequence# number +,constraint STATS$THREAD_PK primary key + (snap_id, dbid, instance_number, thread#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$THREAD_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$FILE_HISTOGRAM +(snap_id number not null +,dbid number not null +,instance_number number not null +,file# number not null +,singleblkrdtim_milli number not null +,singleblkrds number +,constraint STATS$FILE_HISTOGRAM_PK primary key + (snap_id, dbid, instance_number, file#, singleblkrdtim_milli) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$FILE_HISTOGRAM_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$TEMP_HISTOGRAM +(snap_id number not null +,dbid number not null +,instance_number number not null +,file# number not null +,singleblkrdtim_milli number not null +,singleblkrds number +,constraint STATS$TEMP_HISTOGRAM_PK primary key + (snap_id, dbid, instance_number, file#, singleblkrdtim_milli) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$TEMP_HISTOGRAM_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$EVENT_HISTOGRAM +(snap_id number not null +,dbid number not null +,instance_number number not null +,event_id number not null +,wait_time_milli number not null +,wait_count number +,constraint STATS$EVENT_HISTOGRAM_PK primary key + (snap_id, dbid, instance_number, event_id, wait_time_milli) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$EVENT_HISTOGRAM_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$TIME_MODEL_STATNAME +(stat_id number not null +,stat_name varchar2(64) not null +,constraint STATS$TIME_MODEL_STATNAME_PK primary key + (stat_id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) +) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SYS_TIME_MODEL +(snap_id number not null +,dbid number not null +,instance_number number not null +,stat_id number not null +,value number not null +,constraint STATS$SYS_TIME_MODEL_PK primary key + (snap_id, dbid, instance_number, stat_id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SYS_TIME_MODEL_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SESS_TIME_MODEL +(snap_id number not null +,dbid number not null +,instance_number number not null +,stat_id number not null +,value number not null +,constraint STATS$SESS_TIME_MODEL_PK primary key + (snap_id, dbid, instance_number, stat_id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SESS_TIME_MODEL_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +-- +-- Streams support + +-- +-- Streams Capture + +create table STATS$STREAMS_CAPTURE +(snap_id number not null +,dbid number not null +,instance_number number not null +,capture_name varchar2(30) not null +,startup_time date not null +,total_messages_captured number +,total_messages_enqueued number +,elapsed_capture_time number +,elapsed_rule_time number +,elapsed_enqueue_time number +,elapsed_lcr_time number +,elapsed_redo_wait_time number +,elapsed_pause_time number +,constraint STATS$STREAMS_CAPTURE_PK primary key + (snap_id, dbid, instance_number, capture_name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$STREAMS_CAPTURE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +-- +-- Streams Apply +-- Summary of data from v$apply_coordinator, v$apply_reader and v$apply_server + +create table STATS$STREAMS_APPLY_SUM +(snap_id number not null +,dbid number not null +,instance_number number not null +,apply_name varchar2(30) not null +,startup_time date not null +,reader_total_messages_dequeued number +,reader_elapsed_dequeue_time number +,reader_elapsed_schedule_time number +,coord_total_received number +,coord_total_applied number +,coord_total_wait_deps number +,coord_total_wait_commits number +,coord_elapsed_schedule_time number +,server_total_messages_applied number +,server_elapsed_dequeue_time number +,server_elapsed_apply_time number +,constraint STATS$STREAMS_APPLY_SUM_PK primary key + (snap_id, dbid, instance_number, apply_name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$STREAMS_APPLY_SUM_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +-- +-- Propagation Sender + +create table STATS$PROPAGATION_SENDER +(snap_id number not null +,dbid number not null +,instance_number number not null +,queue_schema varchar2(30) not null +,queue_name varchar2(30) not null +,dblink varchar2(128) not null +,dst_queue_schema varchar2(30) not null +,dst_queue_name varchar2(30) not null +,startup_time date +,total_msgs number +,total_bytes number +,elapsed_dequeue_time number +,elapsed_pickle_time number +,elapsed_propagation_time number +,constraint STATS$PROPAGATION_SENDER_PK primary key + (snap_id, dbid, instance_number + ,queue_schema, queue_name, dblink, dst_queue_schema, dst_queue_name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$PROPAGATION_SENDER_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +-- +-- Propagation Receiver + +create table STATS$PROPAGATION_RECEIVER +(snap_id number not null +,dbid number not null +,instance_number number not null +,src_queue_schema varchar2(30) not null +,src_queue_name varchar2(30) not null +,src_dbname varchar2(128) not null +,dst_queue_schema varchar2(30) not null +,dst_queue_name varchar2(30) not null +,startup_time date not null +,elapsed_unpickle_time number +,elapsed_rule_time number +,elapsed_enqueue_time number +,constraint STATS$PROPAGATION_RECEIVER_PK primary key + (snap_id, dbid, instance_number + ,src_queue_schema, src_queue_name, src_dbname + ,dst_queue_schema, dst_queue_name ) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$PROPAGATION_RECEIVER_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + + +/* ------------------------------------------------------------------------- */ + +-- +-- Buffered Queues + +create table STATS$BUFFERED_QUEUES +(snap_id number not null +,dbid number not null +,instance_number number not null +,queue_schema varchar2(30) not null +,queue_name varchar2(30) not null +,startup_time date not null +,num_msgs number +,cnum_msgs number +,cspill_msgs number +,constraint STATS$BUFFERED_QUEUES_PK primary key + (snap_id, dbid, instance_number, queue_schema, queue_name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$BUFFERED_QUEUES_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +-- +-- Buffered Subscribers +-- Joins to v$instance, dba_queues + +create table STATS$BUFFERED_SUBSCRIBERS +(snap_id number not null +,dbid number not null +,instance_number number not null +,queue_schema varchar2(30) not null +,queue_name varchar2(30) not null +,subscriber_id number not null +,subscriber_name varchar2(30) +,subscriber_address varchar2(1024) +,subscriber_type varchar2(30) +,startup_time date not null +,num_msgs number +,cnum_msgs number +,total_spilled_msg number +,constraint STATS$BUFFERED_SUBSCRIBERS_PK primary key + (snap_id, dbid, instance_number, queue_schema, queue_name, subscriber_id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$BUFFERED_SUBSCRIBERS_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +-- +-- Rule Set + +create table STATS$RULE_SET +(snap_id number not null +,dbid number not null +,instance_number number not null +,owner varchar2(30) not null +,name varchar2(30) not null +,startup_time date not null +,cpu_time number +,elapsed_time number +,evaluations number +,sql_free_evaluations number +,sql_executions number +,reloads number +,constraint STATS$RULE_SET_PK primary key + (snap_id, dbid, instance_number, owner, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$RULE_SET_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$OSSTATNAME +(osstat_id number not null +,stat_name varchar2(64) not null +,constraint STATS$OSSSTATNAME_PK primary key + (osstat_id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) +) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +-- +-- OS Stat + +create table STATS$OSSTAT +(snap_id number not null +,dbid number not null +,instance_number number not null +,osstat_id number not null +,value number +,constraint STATS$OSSTAT_PK primary key + (snap_id, dbid, instance_number, osstat_id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$OSSTAT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +-- +-- Process - Rollup + +create table STATS$PROCESS_ROLLUP +(snap_id number not null +,dbid number not null +,instance_number number not null +,pid number not null +,serial# number not null +,spid varchar2(12) +,program varchar2(48) +,background varchar2(1) +,pga_used_mem number +,pga_alloc_mem number +,pga_freeable_mem number +,max_pga_alloc_mem number +,max_pga_max_mem number +,avg_pga_alloc_mem number +,stddev_pga_alloc_mem number +,num_processes number +,constraint STATS$$PROCESS_ROLLUP_PK primary key + (snap_id, dbid, instance_number, pid, serial#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$$PROCESS_ROLLUP_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +-- +-- Process Memory + +create table STATS$PROCESS_MEMORY_ROLLUP +(snap_id number not null +,dbid number not null +,instance_number number not null +,pid number not null +,serial# number not null +,category varchar2(15) not null +,allocated number +,used number +,max_allocated number +,max_max_allocated number +,avg_allocated number +,stddev_allocated number +,non_zero_allocations number +,constraint STATS$PROCESS_MEMORY_ROLLUP_PK primary key + (snap_id, dbid, instance_number, pid, serial#, category) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$PROCESS_MEMORY_ROLLUP_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SGA_TARGET_ADVICE +(snap_id number not null +,dbid number not null +,instance_number number not null +,sga_size number not null +,sga_size_factor number +,estd_db_time number +,estd_db_time_factor number +,estd_physical_reads number +,constraint STATS$SGA_TARGET_ADVICE_PK primary key + (snap_id, dbid, instance_number, sga_size) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SGA_TARGET_ADVICE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$STREAMS_POOL_ADVICE +(snap_id number not null +,dbid number not null +,instance_number number not null +,streams_pool_size_for_estimate number not null +,streams_pool_size_factor number +,estd_spill_count number +,estd_spill_time number +,estd_unspill_count number +,estd_unspill_time number +,constraint STATS$STREAMS_POOL_ADVICE_PK primary key + (snap_id, dbid, instance_number, streams_pool_size_for_estimate) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$STREAMS_POOL_ADVICE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$MUTEX_SLEEP +(snap_id number not null +,dbid number not null +,instance_number number not null +,mutex_type varchar2(32) not null +,location varchar2(40) not null +,sleeps number +,wait_time number +,constraint STATS$MUTEX_SLEEP_PK primary key + (snap_id, dbid, instance_number, mutex_type, location) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$MUTEX_SLEEP_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$DYNAMIC_REMASTER_STATS +(snap_id number not null +,dbid number not null +,instance_number number not null +,remaster_ops number +,remaster_time number +,remastered_objects number +,quiesce_time number +,freeze_time number +,cleanup_time number +,replay_time number +,fixwrite_time number +,sync_time number +,resources_cleaned number +,replayed_locks_sent number +,replayed_locks_received number +,current_objects number +,constraint STATS$DYNAMIC_REM_STATS_PK primary key + (snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$DYNAMIC_REM_STATS_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$IDLE_EVENT +(event varchar2(64) not null +,constraint STATS$IDLE_EVENT_PK primary key (event) + using index tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) +) +tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) pctfree 5 pctused 40; + +insert into STATS$IDLE_EVENT (event) values ('smon timer'); +insert into STATS$IDLE_EVENT (event) values ('pmon timer'); +insert into STATS$IDLE_EVENT (event) values ('rdbms ipc message'); +insert into STATS$IDLE_EVENT (event) values ('Null event'); +insert into STATS$IDLE_EVENT (event) values ('parallel query dequeue'); +insert into STATS$IDLE_EVENT (event) values ('pipe get'); +insert into STATS$IDLE_EVENT (event) values ('client message'); +insert into STATS$IDLE_EVENT (event) values ('SQL*Net message to client'); +insert into STATS$IDLE_EVENT (event) values ('SQL*Net message from client'); +insert into STATS$IDLE_EVENT (event) values ('SQL*Net more data from client'); +insert into STATS$IDLE_EVENT (event) values ('dispatcher timer'); +insert into STATS$IDLE_EVENT (event) values ('virtual circuit status'); +insert into STATS$IDLE_EVENT (event) values ('lock manager wait for remote message'); +insert into STATS$IDLE_EVENT (event) values ('PX Idle Wait'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq: Execution Msg'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq: Table Q Normal'); +insert into STATS$IDLE_EVENT (event) values ('wakeup time manager'); +insert into STATS$IDLE_EVENT (event) values ('slave wait'); +insert into STATS$IDLE_EVENT (event) values ('i/o slave wait'); +insert into STATS$IDLE_EVENT (event) values ('jobq slave wait'); +insert into STATS$IDLE_EVENT (event) values ('null event'); +insert into STATS$IDLE_EVENT (event) values ('gcs remote message'); +insert into STATS$IDLE_EVENT (event) values ('gcs for action'); +insert into STATS$IDLE_EVENT (event) values ('ges remote message'); +insert into STATS$IDLE_EVENT (event) values ('queue messages'); +insert into STATS$IDLE_EVENT (event) values ('wait for unread message on broadcast channel'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq Credit: send blkd'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq: Execute Reply'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq: Signal ACK'); +insert into STATS$IDLE_EVENT (event) values ('PX Deque wait'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq Credit: need buffer'); +insert into STATS$IDLE_EVENT (event) values ('STREAMS apply coord waiting for slave message'); +insert into STATS$IDLE_EVENT (event) values ('STREAMS apply slave waiting for coord message'); +insert into STATS$IDLE_EVENT (event) values ('Queue Monitor Wait'); +insert into STATS$IDLE_EVENT (event) values ('Queue Monitor Slave Wait'); +insert into STATS$IDLE_EVENT (event) values ('wakeup event for builder'); +insert into STATS$IDLE_EVENT (event) values ('wakeup event for preparer'); +insert into STATS$IDLE_EVENT (event) values ('wakeup event for reader'); +insert into STATS$IDLE_EVENT (event) values ('wait for activate message'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq: Par Recov Execute'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq: Table Q Sample'); +insert into STATS$IDLE_EVENT (event) values ('STREAMS apply slave idle wait'); +insert into STATS$IDLE_EVENT (event) values ('STREAMS capture process filter callback wait for ruleset'); +insert into STATS$IDLE_EVENT (event) values ('STREAMS fetch slave waiting for txns'); +insert into STATS$IDLE_EVENT (event) values ('STREAMS waiting for subscribers to catch up'); +insert into STATS$IDLE_EVENT (event) values ('Queue Monitor Shutdown Wait'); +insert into STATS$IDLE_EVENT (event) values ('AQ Proxy Cleanup Wait'); +insert into STATS$IDLE_EVENT (event) values ('knlqdeq'); +insert into STATS$IDLE_EVENT (event) values ('class slave wait'); +insert into STATS$IDLE_EVENT (event) values ('master wait'); +insert into STATS$IDLE_EVENT (event) values ('DIAG idle wait'); +insert into STATS$IDLE_EVENT (event) values ('ASM background timer'); +insert into STATS$IDLE_EVENT (event) values ('KSV master wait'); +insert into STATS$IDLE_EVENT (event) values ('EMON idle wait'); +insert into STATS$IDLE_EVENT (event) values ('Streams AQ: RAC qmn coordinator idle wait'); +insert into STATS$IDLE_EVENT (event) values ('Streams AQ: qmn coordinator idle wait'); +insert into STATS$IDLE_EVENT (event) values ('Streams AQ: qmn slave idle wait'); +insert into STATS$IDLE_EVENT (event) values ('Streams AQ: waiting for time management or cleanup tasks'); +insert into STATS$IDLE_EVENT (event) values ('Streams AQ: waiting for messages in the queue'); +insert into STATS$IDLE_EVENT (event) values ('Streams fetch slave: waiting for txns'); +insert into STATS$IDLE_EVENT (event) values ('Streams AQ: deallocate messages from Streams Pool'); +insert into STATS$IDLE_EVENT (event) values ('Streams AQ: delete acknowledged messages'); +insert into STATS$IDLE_EVENT (event) values ('LNS ASYNC archive log'); +insert into STATS$IDLE_EVENT (event) values ('LNS ASYNC dest activation'); +insert into STATS$IDLE_EVENT (event) values ('LNS ASYNC end of log'); +insert into STATS$IDLE_EVENT (event) values ('LogMiner: client waiting for transaction'); +insert into STATS$IDLE_EVENT (event) values ('LogMiner: slave waiting for activate message'); +insert into STATS$IDLE_EVENT (event) values ('LogMiner: wakeup event for builder'); +insert into STATS$IDLE_EVENT (event) values ('LogMiner: wakeup event for preparer'); +insert into STATS$IDLE_EVENT (event) values ('LogMiner: wakeup event for reader'); + +commit; + +/* ------------------------------------------------------------------------- */ + + +@@footer \ No newline at end of file diff --git a/vg/sp_merge_create_partition_tables_9i.sql b/vg/sp_merge_create_partition_tables_9i.sql new file mode 100644 index 0000000..205180a --- /dev/null +++ b/vg/sp_merge_create_partition_tables_9i.sql @@ -0,0 +1,1332 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Create STATSPACK repository with partition table to +* hold consolidated data from multiple databases. +* Version : 9.2.x +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-07 Vishal Gupta First Draft +*/ +set term on + + +DEFINE tablespace_name=&&tablespace_name +prompt Using &&tablespace_name tablespace to store Statspack objects +prompt + +SET VERIFY OFF + + + +/* ------------------------------------------------------------------------- */ + +Prompt ... Creating STATS$... tables + +create table STATS$DATABASE_INSTANCE +(dbid number not null +,instance_number number not null +,startup_time date not null +,snap_id number (6) not null +,parallel varchar2(3) not null +,version varchar2(17) not null +,db_name varchar2(9) not null +,instance_name varchar2(16) not null +,host_name varchar2(64) +,constraint STATS$DATABASE_INSTANCE_PK primary key + (dbid, instance_number, startup_time) + using index tablespace &&tablespace_name + LOCAL + storage (initial 1m next 1m pctincrease 0) +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$LEVEL_DESCRIPTION +(snap_level number not null +,description varchar2(300) +,constraint STATS$LEVEL_DESCRIPTION_PK primary key (snap_level) + using index tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) +) tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) +; + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (0, 'This level captures general statistics, including rollback segment, row cache, SGA, system events, background events, session events, system statistics, wait statistics, lock statistics, and Latch information'); + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (5, 'This level includes capturing high resource usage SQL Statements, along with all data captured by lower levels'); + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (6, 'This level includes capturing SQL plan and SQL plan usage information for high resource usage SQL Statements, along with all data captured by lower levels'); + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (7, 'This level captures segment level statistics, including logical and physical reads, row lock, itl and buffer busy waits, along with all data captured by lower levels'); + +insert into STATS$LEVEL_DESCRIPTION (snap_level, description) + values (10, 'This level includes capturing Child Latch statistics, along with all data captured by lower levels'); + +commit; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SNAPSHOT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,snap_time date not null +,startup_time date not null +,session_id number not null +,serial# number +,snap_level number +,ucomment varchar2(160) +,executions_th number +,parse_calls_th number +,disk_reads_th number +,buffer_gets_th number +,sharable_mem_th number +,version_count_th number +,seg_phy_reads_th number not null +,seg_log_reads_th number not null +,seg_buff_busy_th number not null +,seg_rowlock_w_th number not null +,seg_itl_waits_th number not null +,seg_cr_bks_sd_th number not null +,seg_cu_bks_sd_th number not null +,all_init varchar2(5) +,constraint STATS$SNAPSHOT_PK primary key (snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SNAPSHOT_LVL_FK + foreign key (snap_level) references STATS$LEVEL_DESCRIPTION +,constraint STATS$SNAPSHOT_FK foreign key (dbid, instance_number, startup_time) + references STATS$DATABASE_INSTANCE on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$DB_CACHE_ADVICE +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,id number not null +,name varchar2(20) not null +,block_size number not null +,buffers_for_estimate number not null +,advice_status varchar2(3) +,size_for_estimate number +,size_factor number +,estd_physical_read_factor number +,estd_physical_reads number +,constraint STATS$DB_CACHE_ADVICE_PK primary key + (snap_id, dbid, instance_number, id, buffers_for_estimate) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$DB_CACHE_ADVICE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$FILESTATXS +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,tsname varchar2 (30) not null +,filename varchar2 (513) not null +,phyrds number +,phywrts number +,singleblkrds number +,readtim number +,writetim number +,singleblkrdtim number +,phyblkrd number +,phyblkwrt number +,wait_count number +,time number +,constraint STATS$FILESTATXS_PK primary key + (snap_id, dbid, instance_number, tsname, filename) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$FILESTATXS_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$TEMPSTATXS +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,tsname varchar2(30) not null +,filename varchar2(513) not null +,phyrds number +,phywrts number +,singleblkrds number +,readtim number +,writetim number +,singleblkrdtim number +,phyblkrd number +,phyblkwrt number +,wait_count number +,time number +,constraint STATS$TEMPSTATXS_PK primary key + (snap_id, dbid, instance_number, tsname, filename) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$TEMPSTATXS_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$LATCH +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,latch# number not null +,level# number +,gets number +,misses number +,sleeps number +,immediate_gets number +,immediate_misses number +,spin_gets number +,sleep1 number +,sleep2 number +,sleep3 number +,sleep4 number +,wait_time number +,constraint STATS$LATCH_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LATCH_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$LATCH_CHILDREN +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,latch# number not null +,child# number not null +,gets number +,misses number +,sleeps number +,immediate_gets number +,immediate_misses number +,spin_gets number +,sleep1 number +,sleep2 number +,sleep3 number +,sleep4 number +,wait_time number +,constraint STATS$LATCH_CHILDREN_PK primary key + (snap_id, dbid, instance_number, latch#, child#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LATCH_CHILDREN_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$LATCH_PARENT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,latch# number not null +,level# number not null +,gets number +,misses number +,sleeps number +,immediate_gets number +,immediate_misses number +,spin_gets number +,sleep1 number +,sleep2 number +,sleep3 number +,sleep4 number +,wait_time number +,constraint STATS$LATCH_PARENT_PK primary key + (snap_id, dbid, instance_number, latch#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LATCH_PARENT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$LATCH_MISSES_SUMMARY +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,parent_name varchar2(50) +,where_in_code varchar2(64) +,nwfail_count number +,sleep_count number +,wtr_slp_count number +,constraint STATS$LATCH_MISSES_SUMMARY_PK primary key + (snap_id, dbid, instance_number, parent_name, where_in_code) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LATCH_MISSES_SUMMARY_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$LIBRARYCACHE +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,namespace varchar2(15) not null +,gets number +,gethits number +,pins number +,pinhits number +,reloads number +,invalidations number +,dlm_lock_requests number +,dlm_pin_requests number +,dlm_pin_releases number +,dlm_invalidation_requests number +,dlm_invalidations number +,constraint STATS$LIBRARYCACHE_PK primary key + (snap_id, dbid, instance_number, namespace) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$LIBRARYCACHE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$BUFFER_POOL_STATISTICS +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,id number not null +,name varchar2(20) +,block_size number +,set_msize number +,cnum_repl number +,cnum_write number +,cnum_set number +,buf_got number +,sum_write number +,sum_scan number +,free_buffer_wait number +,write_complete_wait number +,buffer_busy_wait number +,free_buffer_inspected number +,dirty_buffers_inspected number +,db_block_change number +,db_block_gets number +,consistent_gets number +,physical_reads number +,physical_writes number +,constraint STATS$BUFFER_POOL_STATS_PK primary key + (snap_id, dbid, instance_number, id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$BUFFER_POOL_STATS_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$ROLLSTAT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,usn number not null +,extents number +,rssize number +,writes number +,xacts number +,gets number +,waits number +,optsize number +,hwmsize number +,shrinks number +,wraps number +,extends number +,aveshrink number +,aveactive number +,constraint STATS$ROLLSTAT_PK primary key + (snap_id, dbid, instance_number, usn) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$ROLLSTAT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$ROWCACHE_SUMMARY +(snap_id number (6) not null +,dbid number not null +,instance_number number not null +,parameter varchar2 (32) +,total_usage number +,usage number +,gets number +,getmisses number +,scans number +,scanmisses number +,scancompletes number +,modifications number +,flushes number +,dlm_requests number +,dlm_conflicts number +,dlm_releases number +,constraint STATS$ROWCACHE_SUMMARY_PK primary key + (snap_id, dbid, instance_number, parameter) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$ROWCACHE_SUMMARY_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SGA +(snap_id number (6) not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,value number not null +,startup_time date +,parallel varchar2(3) +,version varchar2(17) +,constraint STATS$SGA_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SGA_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SGASTAT +(snap_id number not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,pool varchar2(11) +,bytes number +,constraint STATS$SGASTAT_U unique + (snap_id, dbid, instance_number, name, pool) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SGASTAT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SYSSTAT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,statistic# number not null +,name varchar2 (64) not null +,value number +,constraint STATS$SYSSTAT_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SYSSTAT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SESSTAT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,statistic# number not null +,value number +,constraint STATS$SESSTAT_PK primary key + (snap_id, dbid, instance_number, statistic#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SESSTAT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SYSTEM_EVENT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,event varchar2(64) not null +,total_waits number +,total_timeouts number +,time_waited_micro number +,constraint STATS$SYSTEM_EVENT_PK primary key + (snap_id, dbid, instance_number, event) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SYSTEM_EVENT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SESSION_EVENT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,event varchar2(64) not null +,total_waits number +,total_timeouts number +,time_waited_micro number +,max_wait number +,constraint STATS$SESSION_EVENT_PK primary key + (snap_id, dbid, instance_number, event) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SESSION_EVENT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$BG_EVENT_SUMMARY +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,event varchar2(64) not null +,total_waits number +,total_timeouts number +,time_waited_micro number +,constraint STATS$BG_EVENT_SUMMARY_PK primary key + (snap_id, dbid, instance_number, event) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$BG_EVENT_SUMMARY_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$WAITSTAT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,class varchar2(18) +,wait_count number +,time number +,constraint STATS$WAITSTAT_PK primary key + (snap_id, dbid, instance_number, class) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$WAITSTAT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$ENQUEUE_STAT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,eq_type varchar2(2) not null +,total_req# number +,total_wait# number +,succ_req# number +,failed_req# number +,cum_wait_time number +,constraint STATS$ENQUEUE_STAT_PK primary key + (snap_id, dbid, instance_number, eq_type) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$ENQUEUE_STAT_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_SUMMARY +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,text_subset varchar2(31) not null +,sql_text varchar2(1000) +,sharable_mem number +,sorts number +,module varchar2(64) +,loaded_versions number +,fetches number +,executions number +,loads number +,invalidations number +,parse_calls number +,disk_reads number +,buffer_gets number +,rows_processed number +,command_type number +,address raw(8) +,hash_value number +,version_count number +,cpu_time number +,elapsed_time number +,outline_sid number +,outline_category varchar2(64) +,child_latch number +,constraint STATS$SQL_SUMMARY_PK primary key + (snap_id, dbid, instance_number, hash_value, text_subset) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_SUMMARY_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name +storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQLTEXT +(hash_value number not null +,text_subset varchar2(31) not null +,piece number not null +,sql_text varchar2(64) +,address raw(8) +,command_type number +,last_snap_id number +,constraint STATS$SQLTEXT_PK primary key (hash_value, text_subset, piece) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) +) +tablespace &&tablespace_name + storage (initial 5m next 5m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_STATISTICS +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,total_sql number not null +,total_sql_mem number not null +,single_use_sql number not null +,single_use_sql_mem number not null +,constraint STATS$SQL_STATISTICS_PK primary key + (snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_STATISTICS_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name +storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$RESOURCE_LIMIT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,resource_name varchar2(30) not null +,current_utilization number +,max_utilization number +,initial_allocation varchar2(10) +,limit_value varchar2(10) +,constraint STATS$RESOURCE_LIMIT_PK primary key + (snap_id, dbid, instance_number, resource_name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$RESOURCE_LIMIT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name +storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$DLM_MISC +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,statistic# number not null +,name varchar2(38) +,value number +,constraint STATS$DLM_MISC_PK primary key + (snap_id, dbid, instance_number, statistic#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$DLM_MISC_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$UNDOSTAT +(begin_time date not null +,end_time date not null +,dbid number not null +,instance_number number not null +,snap_id number(6) not null +,undotsn number not null +,undoblks number +,txncount number +,maxquerylen number +,maxconcurrency number +,unxpstealcnt number +,unxpblkrelcnt number +,unxpblkreucnt number +,expstealcnt number +,expblkrelcnt number +,expblkreucnt number +,ssolderrcnt number +,nospaceerrcnt number +,constraint STATS$UNDOSTAT_PK primary key + (begin_time, end_time, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_PLAN_USAGE +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,hash_value number not null +,text_subset varchar2(31) not null +,plan_hash_value number not null +,cost number +,address raw(8) +,optimizer varchar2(20) +,constraint STATS$SQL_PLAN_USAGE_PK primary key + (snap_id, dbid, instance_number + ,hash_value, text_subset, plan_hash_value, cost) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_PLAN_USAGE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 5m next 5m pctincrease 0) pctfree 5 pctused 40; + +create index STATS$SQL_PLAN_USAGE_HV ON STATS$SQL_PLAN_USAGE (hash_value) + tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0); + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_PLAN +(plan_hash_value number not null +,id number not null +,operation varchar2(30) +,options varchar2(30) +,object_node varchar2(10) +,object# number +,object_owner varchar2(30) +,object_name varchar2(30) +,optimizer varchar2(20) +,parent_id number +,depth number +,position number +,search_columns number +,cost number +,cardinality number +,bytes number +,other_tag varchar2(35) +,partition_start varchar2(5) +,partition_stop varchar2(5) +,partition_id number +,other varchar2(4000) +,distribution varchar2(20) +,cpu_cost number +,io_cost number +,temp_space number +,access_predicates varchar2(4000) +,filter_predicates varchar2(4000) +,snap_id number +,constraint STATS$SQL_PLAN_PK primary key + (plan_hash_value, id) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) +) +tablespace &&tablespace_name + storage (initial 5m next 5m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SEG_STAT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,dataobj# number not null +,obj# number not null +,ts# number not null +,logical_reads number +,buffer_busy_waits number +,db_block_changes number +,physical_reads number +,physical_writes number +,direct_physical_reads number +,direct_physical_writes number +,global_cache_cr_blocks_served number +,global_cache_cu_blocks_served number +,itl_waits number +,row_lock_waits number +, constraint STATS$SEG_STAT_PK primary key + (snap_id, dbid, instance_number, dataobj#, obj#) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SEG_STAT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 3m next 3m pctincrease 0); + + +-- Segment names having statistics + +create table STATS$SEG_STAT_OBJ +(dataobj# number not null +,obj# number not null +,ts# number not null +,dbid number not null +,owner varchar(30) not null +,object_name varchar(30) not null +,subobject_name varchar(30) +,object_type varchar2(18) +,tablespace_name varchar(30) not null +,constraint STATS$SEG_STAT_OBJ_PK primary key + (dataobj#, obj#, dbid) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0); + + +/* ------------------------------------------------------------------------- */ + +create table STATS$PGASTAT +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,value number +,constraint STATS$SQL_PGASTAT_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_PGASTAT_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$IDLE_EVENT +(event varchar2(64) not null +,constraint STATS$IDLE_EVENT_PK primary key (event) + using index tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) +) tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) pctfree 5 pctused 40; + +insert into STATS$IDLE_EVENT (event) values ('smon timer'); +insert into STATS$IDLE_EVENT (event) values ('pmon timer'); +insert into STATS$IDLE_EVENT (event) values ('rdbms ipc message'); +insert into STATS$IDLE_EVENT (event) values ('Null event'); +insert into STATS$IDLE_EVENT (event) values ('parallel query dequeue'); +insert into STATS$IDLE_EVENT (event) values ('pipe get'); +insert into STATS$IDLE_EVENT (event) values ('client message'); +insert into STATS$IDLE_EVENT (event) values ('SQL*Net message to client'); +insert into STATS$IDLE_EVENT (event) values ('SQL*Net message from client'); +insert into STATS$IDLE_EVENT (event) values ('SQL*Net more data from client'); +insert into STATS$IDLE_EVENT (event) values ('dispatcher timer'); +insert into STATS$IDLE_EVENT (event) values ('virtual circuit status'); +insert into STATS$IDLE_EVENT (event) values ('lock manager wait for remote message'); +insert into STATS$IDLE_EVENT (event) values ('PX Idle Wait'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq: Execution Msg'); +insert into STATS$IDLE_EVENT (event) values ('PX Deq: Table Q Normal'); +insert into STATS$IDLE_EVENT (event) values ('wakeup time manager'); +insert into STATS$IDLE_EVENT (event) values ('slave wait'); +insert into STATS$IDLE_EVENT (event) values ('i/o slave wait'); +insert into STATS$IDLE_EVENT (event) values ('jobq slave wait'); +insert into STATS$IDLE_EVENT (event) values ('null event'); +insert into STATS$IDLE_EVENT (event) values ('gcs remote message'); +insert into STATS$IDLE_EVENT (event) values ('gcs for action'); +insert into STATS$IDLE_EVENT (event) values ('ges remote message'); +insert into STATS$IDLE_EVENT (event) values ('queue messages'); +commit; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$PARAMETER +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,name varchar2(64) not null +,value varchar2(512) +,isdefault varchar2(9) +,ismodified varchar2(10) +,constraint STATS$PARAMETER_PK primary key + (snap_id, dbid, instance_number, name) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$PARAMETER_FK foreign key (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$INSTANCE_RECOVERY +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,recovery_estimated_ios number +,actual_redo_blks number +,target_redo_blks number +,log_file_size_redo_blks number +,log_chkpt_timeout_redo_blks number +,log_chkpt_interval_redo_blks number +,fast_start_io_target_redo_blks number +,target_mttr number +,estimated_mttr number +,ckpt_block_writes number +,constraint STATS$INSTANCE_RECOVERY_PK primary key + (snap_id, dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$INSTANCE_RECOVERY_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$STATSPACK_PARAMETER +(dbid number not null +,instance_number number not null +,session_id number not null +,snap_level number not null +,num_sql number not null +,executions_th number not null +,parse_calls_th number not null +,disk_reads_th number not null +,buffer_gets_th number not null +,sharable_mem_th number not null +,version_count_th number not null +,pin_statspack varchar2(10) not null +,all_init varchar2(5) not null +,last_modified date +,ucomment varchar2(160) +,job number +,seg_phy_reads_th number not null +,seg_log_reads_th number not null +,seg_buff_busy_th number not null +,seg_rowlock_w_th number not null +,seg_itl_waits_th number not null +,seg_cr_bks_sd_th number not null +,seg_cu_bks_sd_th number not null +,constraint STATS$STATSPACK_PARAMETER_PK primary key + (dbid, instance_number) + using index tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0) + LOCAL +,constraint STATS$STATSPACK_LVL_FK + foreign key (snap_level) references STATS$LEVEL_DESCRIPTION +,constraint STATS$STATSPACK_P_PIN_CK + check (pin_statspack in ('TRUE', 'FALSE')) +,constraint STATS$STATSPACK_ALL_INIT_CK + check (all_init in ('TRUE', 'FALSE')) +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 100k next 100k pctincrease 0); + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SHARED_POOL_ADVICE +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,shared_pool_size_for_estimate number not null +,shared_pool_size_factor number +,estd_lc_size number +,estd_lc_memory_objects number +,estd_lc_time_saved number +,estd_lc_time_saved_factor number +,estd_lc_memory_object_hits number +,constraint STATS$SHARED_POOL_ADVICE_PK primary key + (snap_id, dbid, instance_number, shared_pool_size_for_estimate) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SHARED_POOL_ADVICE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + +create table STATS$SQL_WORKAREA_HISTOGRAM +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,low_optimal_size number not null +,high_optimal_size number not null +,optimal_executions number +,onepass_executions number +,multipasses_executions number +,total_executions number +,constraint STATS$SQL_WORKAREA_HIST_PK primary key + (snap_id, dbid, instance_number, low_optimal_size, high_optimal_size) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$SQL_WORKAREA_HIST_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + + +/* ------------------------------------------------------------------------- */ + +create table STATS$PGA_TARGET_ADVICE +(snap_id number(6) not null +,dbid number not null +,instance_number number not null +,pga_target_for_estimate number not null +,pga_target_factor number +,advice_status varchar2(3) +,bytes_processed number +,estd_extra_bytes_rw number +,estd_pga_cache_hit_percentage number +,estd_overalloc_count number +,constraint STATS$PGA_TARGET_ADVICE_PK primary key + (snap_id, dbid, instance_number, pga_target_for_estimate) + using index tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) + LOCAL +,constraint STATS$PGA_TARGET_ADVICE_FK foreign key + (snap_id, dbid, instance_number) + references STATS$SNAPSHOT on delete cascade +) +PARTITION BY LIST (DBID) + ( + PARTITION others VALUES (DEFAULT) + ) +tablespace &&tablespace_name + storage (initial 1m next 1m pctincrease 0) pctfree 5 pctused 40; + + +/* ------------------------------------------------------------------------- */ + + +undefine tablespace_name default_tablespace temporary_tablespace + +@@footer \ No newline at end of file diff --git a/vg/sp_merge_create_user_10g.sql b/vg/sp_merge_create_user_10g.sql new file mode 100644 index 0000000..2d4d367 --- /dev/null +++ b/vg/sp_merge_create_user_10g.sql @@ -0,0 +1,104 @@ +set verify off + +/* Create user */ +create user &&perfstat_user + identified by &&perfstat_password + default tablespace &&default_tablespace + temporary tablespace &&temporary_tablespace; + +alter user &&perfstat_user quota unlimited on &&default_tablespace; + +/* System privileges */ +grant create session to &&perfstat_user; +grant alter session to &&perfstat_user; +grant create table to &&perfstat_user; +grant create procedure to &&perfstat_user; +grant create sequence to &&perfstat_user; +grant create public synonym to &&perfstat_user; +grant drop public synonym to &&perfstat_user; + + +/* Select privileges on STATSPACK created views */ +grant select on STATS$X_$KCBFWAIT to &&perfstat_user; +grant select on STATS$X_$KSPPSV to &&perfstat_user; +grant select on STATS$X_$KSPPI to &&perfstat_user; +grant select on STATS$V_$FILESTATXS to &&perfstat_user; +grant select on STATS$V_$TEMPSTATXS to &&perfstat_user; +grant select on STATS$V_$SQLXS to &&perfstat_user; +grant select on STATS$V_$SQLSTATS_SUMMARY to &&perfstat_user; + +/* Roles */ +grant SELECT_CATALOG_ROLE to &&perfstat_user; + +/* Select privs for catalog objects - ROLES disabled in PL/SQL packages */ +grant select on V_$PARAMETER to &&perfstat_user; +grant select on V_$SYSTEM_PARAMETER to &&perfstat_user; +grant select on V_$DATABASE to &&perfstat_user; +grant select on V_$INSTANCE to &&perfstat_user; +grant select on GV_$INSTANCE to &&perfstat_user; +grant select on V_$LIBRARYCACHE to &&perfstat_user; +grant select on V_$LATCH to &&perfstat_user; +grant select on V_$LATCH_MISSES to &&perfstat_user; +grant select on V_$LATCH_CHILDREN to &&perfstat_user; +grant select on V_$LATCH_PARENT to &&perfstat_user; +grant select on V_$ROLLSTAT to &&perfstat_user; +grant select on V_$ROWCACHE to &&perfstat_user; +grant select on V_$SGA to &&perfstat_user; +grant select on V_$BUFFER_POOL to &&perfstat_user; +grant select on V_$SGASTAT to &&perfstat_user; +grant select on V_$SYSTEM_EVENT to &&perfstat_user; +grant select on V_$SESSION to &&perfstat_user; +grant select on V_$SESSION_EVENT to &&perfstat_user; +grant select on V_$SYSSTAT to &&perfstat_user; +grant select on V_$WAITSTAT to &&perfstat_user; +grant select on V_$ENQUEUE_STATISTICS to &&perfstat_user; +grant select on V_$SQLAREA to &&perfstat_user; +grant select on V_$SQL to &&perfstat_user; +grant select on V_$SQLTEXT to &&perfstat_user; +grant select on V_$SESSTAT to &&perfstat_user; +grant select on V_$BUFFER_POOL_STATISTICS to &&perfstat_user; +grant select on V_$RESOURCE_LIMIT to &&perfstat_user; +grant select on V_$DLM_MISC to &&perfstat_user; +grant select on V_$UNDOSTAT to &&perfstat_user; +grant select on V_$SQL_PLAN to &&perfstat_user; +grant select on V_$DB_CACHE_ADVICE to &&perfstat_user; +grant select on V_$PGASTAT to &&perfstat_user; +grant select on V_$INSTANCE_RECOVERY to &&perfstat_user; +grant select on V_$SHARED_POOL_ADVICE to &&perfstat_user; +grant select on V_$SQL_WORKAREA_HISTOGRAM to &&perfstat_user; +grant select on V_$PGA_TARGET_ADVICE to &&perfstat_user; +grant select on V_$SEGSTAT to &&perfstat_user; +grant select on V_$SEGMENT_STATISTICS to &&perfstat_user; +grant select on V_$SEGSTAT_NAME to &&perfstat_user; +grant select on V_$JAVA_POOL_ADVICE to &&perfstat_user; +grant select on V_$THREAD to &&perfstat_user; +grant select on V_$CR_BLOCK_SERVER to &&perfstat_user; +grant select on V_$CURRENT_BLOCK_SERVER to &&perfstat_user; +grant select on V_$INSTANCE_CACHE_TRANSFER to &&perfstat_user; +grant select on V_$FILE_HISTOGRAM to &&perfstat_user; +grant select on V_$TEMP_HISTOGRAM to &&perfstat_user; +grant select on V_$EVENT_HISTOGRAM to &&perfstat_user; +grant select on V_$EVENT_NAME to &&perfstat_user; +grant select on V_$SYS_TIME_MODEL to &&perfstat_user; +grant select on V_$SESS_TIME_MODEL to &&perfstat_user; +grant select on V_$STREAMS_CAPTURE to &&perfstat_user; +grant select on V_$STREAMS_APPLY_COORDINATOR to &&perfstat_user; +grant select on V_$STREAMS_APPLY_READER to &&perfstat_user; +grant select on V_$STREAMS_APPLY_SERVER to &&perfstat_user; +grant select on V_$PROPAGATION_SENDER to &&perfstat_user; +grant select on V_$PROPAGATION_RECEIVER to &&perfstat_user; +grant select on V_$BUFFERED_QUEUES to &&perfstat_user; +grant select on V_$BUFFERED_SUBSCRIBERS to &&perfstat_user; +grant select on V_$RULE_SET to &&perfstat_user; +grant select on V_$OSSTAT to &&perfstat_user; +grant select on V_$PROCESS to &&perfstat_user; +grant select on V_$PROCESS_MEMORY to &&perfstat_user; +grant select on V_$STREAMS_POOL_ADVICE to &&perfstat_user; +grant select on V_$SGA_TARGET_ADVICE to &&perfstat_user; +grant select on V_$SQLSTATS to &&perfstat_user; +grant select on V_$MUTEX_SLEEP to &&perfstat_user; + +/* Packages */ +grant execute on DBMS_SHARED_POOL to &&perfstat_user; +grant execute on DBMS_JOB to &&perfstat_user; + diff --git a/vg/sp_merge_purge.sql b/vg/sp_merge_purge.sql new file mode 100644 index 0000000..84fd440 --- /dev/null +++ b/vg/sp_merge_purge.sql @@ -0,0 +1,47 @@ +set serveroutput on +WHENEVER SQLERROR EXIT SQL.SQLCODE + +-- For each dbid and instance_number combination +-- Set first snapshot for the day as baseline +DECLARE + l_sql_stmt VARCHAR2(4000); +BEGIN + FOR i IN (SELECT dbid, instance_number, trunc(snap_time), min(snap_id) as snap_id + FROM stats$snapshot a + GROUP BY dbid, instance_number, trunc(snap_time) + ) + LOOP + l_sql_stmt := 'update stats$snapshot s + set s.baseline = ''Y'' + where s.dbid = :1 + and s.instance_number = :2 + and s.snap_id = :3 + AND nvl(s.baseline,''x'') != ''Y'' + '; + EXECUTE IMMEDIATE l_sql_stmt USING i.dbid, i.instance_number, i.snap_id; + END LOOP; + COMMIT; +END; +/ + + + +-- PURGE the data +DECLARE + l_sql_stmt VARCHAR2(4000); +BEGIN + FOR i in (select DISTINCT dbid, instance_number + FROM stats$database_instance) + LOOP + l_sql_stmt := 'BEGIN statspack.purge(i_dbid => :1 ' + || ' , i_instance_number => :2 ' + || ' , i_num_days => :3 ' +-- || ' , i_extended_purge => :4 ' + || ' ); + END; '; + DBMS_OUTPUT.PUT_LINE (l_sql_stmt); + EXECUTE IMMEDIATE l_sql_stmt USING i.dbid, i.instance_number, 120; + END LOOP; +END; +/ + diff --git a/vg/sp_merge_single.sql b/vg/sp_merge_single.sql new file mode 100644 index 0000000..878a080 --- /dev/null +++ b/vg/sp_merge_single.sql @@ -0,0 +1,294 @@ +/* +* +* Author : Vishal Gupta +* Purpose : Merge statspack from multiple sources into single database +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-07 Vishal Gupta First Draft +*/ + +set serveroutput on size 1000000 +set verify off + +DECLARE + sql_text VARCHAR2(32767); + v_env_type VARCHAR2(30) := '&&1'; + v_db_version VARCHAR2(30) := '&2'; + v_instance VARCHAR2(30 := '&3'; + v_db_link VARCHAR2(4000) ; + v_perfstat_schema_owner VARCHAR2(30) ; + v_update_cols_count NUMBER; + v_scn NUMBER; + v_snap_id_exists VARCHAR2(1); + v_days NUMBER := 14; + + + CURSOR cur_constraint_cols(p_owner DBA_TAB_COLUMNS.OWNER%TYPE + , p_table_name DBA_TAB_COLUMNS.TABLE_NAME%TYPE) + is + SELECT cc.COLUMN_NAME, tc.NULLABLE + FROM DBA_CONSTRAINTS C, DBA_CONS_COLUMNS CC , DBA_TAB_COLUMNS tc + WHERE C.TABLE_NAME = p_table_name + AND C.CONSTRAINT_TYPE in ( 'P' ,'U') + AND C.OWNER = p_owner + AND C.OWNER = CC.OWNER + AND C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME + AND C.TABLE_NAME = CC.TABLE_NAME + AND cc.OWNER = tc.OWNER + AND cc.TABLE_NAME = tc.TABLE_NAME + AND cc.COLUMN_NAME = tc.COLUMN_NAME + order by POSITION; + rec_constraint_cols cur_constraint_cols%ROWTYPE; + + CURSOR cur_tab_cols(p_owner DBA_TAB_COLUMNS.OWNER%TYPE + , p_table_name DBA_TAB_COLUMNS.TABLE_NAME%TYPE) + is + SELECT column_name + FROM DBA_TAB_COLUMNS + WHERE TABLE_NAME = p_table_name + AND OWNER = p_owner + order by COLUMN_ID; + rec_tab_cols cur_tab_cols%ROWTYPE; + + CURSOR cur_update_cols(p_owner DBA_TAB_COLUMNS.OWNER%TYPE + , p_table_name DBA_TAB_COLUMNS.TABLE_NAME%TYPE) + is + SELECT column_name + FROM DBA_TAB_COLUMNS t + WHERE TABLE_NAME = p_table_name + AND OWNER = p_owner + AND t.column_name NOT IN ( SELECT COLUMN_NAME FROM DBA_CONSTRAINTS C, DBA_CONS_COLUMNS CC + WHERE C.TABLE_NAME = t.table_name + AND C.CONSTRAINT_TYPE in ( 'P' ,'U') + AND C.OWNER = t.OWNER + AND C.OWNER = CC.OWNER + AND C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME + AND C.TABLE_NAME = CC.TABLE_NAME) + order by COLUMN_ID; + rec_update_cols cur_update_cols%ROWTYPE; + + CURSOR cur_check_snapid_exists(p_owner DBA_TAB_COLUMNS.OWNER%TYPE, p_table_name DBA_TAB_COLUMNS.TABLE_NAME%TYPE) + is + SELECT 'Y' + FROM DBA_CONSTRAINTS a + WHERE OWNER = p_owner + AND TABLE_NAME = p_table_name + AND CONSTRAINT_TYPE = 'R' + AND R_CONSTRAINT_NAME = 'STATS$SNAPSHOT_PK'; + +BEGIN + + DBMS_OUTPUT.PUT_LINE('###########################################'); + DBMS_OUTPUT.PUT_LINE('Job Started at ' || to_char(sysdate,'DD-MON-YYYY hh24:MI:SS') ); + + FOR i in (SELECT database + , active + , version + , environment + , schema_name + from perfstat_control.STATSPACK_MERGE_CONTROL + where active = 'Y' + AND version = v_db_version + AND environment = v_env_type + AND database = v_instance + ORDER BY database) + LOOP + v_db_link := i.database; + v_perfstat_schema_owner := i.schema_name; + + DBMS_OUTPUT.PUT_LINE('------------------------------------------------'); + DBMS_OUTPUT.PUT_LINE(v_db_link); + DBMS_OUTPUT.PUT_LINE(v_perfstat_schema_owner); + + -- New data might get inserted while we are merging all the tables of statspack + -- corresponding snap_id would not exists for data inserted after merge of stats$snapshot + -- So, we need to use flashback query "as os SCN 1234". + v_scn := 0; + + BEGIN + + EXECUTE IMMEDIATE 'SELECT sys.dbms_flashback.get_system_change_number() FROM dual@' || v_db_link INTO v_scn; + + FOR tbl in ( + select 'STATS$DATABASE_INSTANCE' table_name from dual + UNION ALL + select 'STATS$LEVEL_DESCRIPTION' from dual + UNION ALL + select 'STATS$STATSPACK_PARAMETER' from dual + UNION ALL + select 'STATS$SNAPSHOT' from dual + UNION ALL + select * + from (SELECT table_name + FROM DBA_TABLES + WHERE OWNER = v_perfstat_schema_owner + and table_name not in ('STATS$DATABASE_INSTANCE' + ,'STATS$LEVEL_DESCRIPTION' + ,'STATS$STATSPACK_PARAMETER' + ,'STATS$SNAPSHOT' + ,'STATS$IDLE_EVENT') + order by 1 + ) + ) + loop + + /* Sample Merge statement + -- + -- MERGE + -- INTO table_l l + -- USING (select * from stats$database_instance@FIRE02PD as of SCN 1234 ) r + -- ON( l.primary_key_col1 = r.primary_key_col1 + -- AND l.primary_key_col2 = r.primary_key_col2 -- For nullable columns use NVL + -- ) + -- WHEN matched THEN + -- UPDATE + -- SET l.col1 = r.col2, + -- l.col2 = r.col2 + -- WHERE l.col1 != r.col1 + -- OR l.col2 != r.col2 + -- OR l.col3 != r.col3 + -- WHEN NOT matched THEN + -- INSERT(col1, col2) + -- VALUES(r.col1, r.col2) + -- ; + -- + -- + -- If Snap_id exisits in table, then limit the historical data to be merge to x days old. + -- + -- MERGE + -- INTO table_l l + -- USING (select a.* from stats$sql_summary@FIRE02PD a as of SCN 1234, stats$snapshot@FIRE02PD b as of SCN 1234 + -- where a.dbid = b.dbid and a.instance_number = b.instance_number and a.snap_id = b.snap_id + -- and and b.snap_time > sysdate - 3 ) r + -- ON( l.primary_key_col1 = r.primary_key_col1 + -- AND l.primary_key_col2 = r.primary_key_col2 -- For nullable columns use NVL + -- ) + -- WHEN matched THEN + -- UPDATE + -- SET l.col1 = r.col2, + -- l.col2 = r.col2 + -- WHERE l.col1 != r.col1 + -- OR l.col2 != r.col2 + -- OR l.col3 != r.col3 + -- WHEN NOT matched THEN + -- INSERT(col1, col2) + -- VALUES(r.col1, r.col2) + -- ; + + + */ + + v_snap_id_exists := 'N'; + OPEN cur_check_snapid_exists(v_perfstat_schema_owner, tbl.table_name); + FETCH cur_check_snapid_exists INTO v_snap_id_exists; + CLOSE cur_check_snapid_exists; + + sql_text := 'merge into ' ; + sql_text := sql_text || v_perfstat_schema_owner || '.' || tbl.table_name + || ' l using ( SELECT a.* from ' || tbl.table_name || '@' || v_db_link || ' as of SCN ' || v_scn || ' a '; + + IF v_snap_id_exists = 'Y' THEN + sql_text := sql_text || ' , stats$snapshot@' || v_db_link || ' as of SCN ' || v_scn || ' b '; + sql_text := sql_text || ' where a.dbid = b.dbid '; + sql_text := sql_text || ' and a.instance_number = b.instance_number '; + sql_text := sql_text || ' and a.snap_id = b.snap_id '; + sql_text := sql_text || ' and b.snap_time > sysdate - ' || v_days ; + END IF; + + sql_text := sql_text || ' ) r ON ( '; + + OPEN cur_constraint_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_constraint_cols INTO rec_constraint_cols; + EXIT WHEN cur_constraint_cols%NOTFOUND; + IF rec_constraint_cols.nullable = 'Y' THEN + sql_text := sql_text || 'nvl(l.' || rec_constraint_cols.COLUMN_NAME || ',''0'') = nvl(r.' || rec_constraint_cols.column_name||',''0'') AND '; + ELSE + sql_text := sql_text || 'l.' || rec_constraint_cols.COLUMN_NAME || ' = r.' || rec_constraint_cols.column_name||' AND '; + END IF; + END LOOP; + CLOSE cur_constraint_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -4); + sql_text := sql_text || ' ) '; + + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + END LOOP; + v_update_cols_count := cur_update_cols%ROWCOUNT; + CLOSE cur_update_cols; + + IF v_update_cols_count > 0 THEN + sql_text := sql_text || ' WHEN MATCHED THEN UPDATE SET '; + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + sql_text := sql_text || 'l.' || rec_update_cols.COLUMN_NAME || ' = r.' || rec_update_cols.column_name||','; + END LOOP; + CLOSE cur_update_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) - 1); + + sql_text := sql_text || ' WHERE ' ; + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + sql_text := sql_text || 'l.' || rec_update_cols.COLUMN_NAME || ' != r.' || rec_update_cols.column_name||' OR '; + END LOOP; + CLOSE cur_update_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -3); + + END IF; + + sql_text := sql_text || ' WHEN NOT MATCHED THEN INSERT (' ; + + OPEN cur_tab_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_tab_cols INTO rec_tab_cols; + EXIT WHEN cur_tab_cols%NOTFOUND; + sql_text := sql_text || rec_tab_cols.COLUMN_NAME || ','; + END LOOP; + CLOSE cur_tab_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -1); + + sql_text := sql_text || ' ) VALUES ('; + + OPEN cur_tab_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_tab_cols INTO rec_tab_cols; + EXIT WHEN cur_tab_cols%NOTFOUND; + sql_text := sql_text || 'r.' || rec_tab_cols.COLUMN_NAME || ','; + END LOOP; + CLOSE cur_tab_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -1); + sql_text := sql_text || ' ) ' ; + DBMS_OUTPUT.PUT_LINE (tbl.table_name); + IF tbl.table_name = 'STATS$SGASTAT' THEN + null; + --DBMS_OUTPUT.PUT_LINE (SQL_TEXT); + END IF; + --EXIT; + execute immediate sql_text ; + commit; + end loop; + + EXECUTE immediate 'alter session close database link ' || v_db_link ; + + EXCEPTION + WHEN others THEN + DBMS_OUTPUT.PUT_LINE(sqlerrm); + END; + + END LOOP; + + DBMS_OUTPUT.PUT_LINE('###########################################'); + DBMS_OUTPUT.PUT_LINE('Job Finished at ' || to_char(sysdate,'DD-MON-YYYY hh24:MI:SS') ); + +END; +/ + diff --git a/vg/sp_merge_split_partitions.sql b/vg/sp_merge_split_partitions.sql new file mode 100644 index 0000000..593206a --- /dev/null +++ b/vg/sp_merge_split_partitions.sql @@ -0,0 +1,62 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : To split default parition of statspack tables based on DBID +* hold consolidated data from multiple databases. +* Version : 9.2.x, 10.2.x +* Usage : Login as schema holding the consolidated statspack repository +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-07 Vishal Gupta First Draft +*/ +set term on + +set verify off +set serveroutput on +DECLARE + lv_sql VARCHAR2(4000) := null; +BEGIN + -- Identify tables LIST paritioned on DBID + FOR t in (SELECT pt.table_name + FROM user_part_key_columns pc, user_part_tables pt + WHERE object_type = 'TABLE' + AND column_name = 'DBID' + AND pt.table_name = pc.name + AND pt.PARTITIONING_TYPE = 'LIST') + LOOP + -- For each DBID value, create partition. + FOR dbid in (SELECT DISTINCT dbid + FROM stats$database_instance d + WHERE NOT exists (SELECT 1 + FROM user_tab_partitions p + WHERE p.table_name = t.table_name + AND p.partition_name = 'P'||d.dbid + ) + ) + LOOP + lv_sql := 'alter table ' || t.table_name || ' split partition others values (' || dbid.dbid || ') ' + || ' into (partition p'|| dbid.dbid || ' , partition others )'; + -- DBMS_OUTPUT.put_LINE(lv_sql); + -- add partitions + DBMS_OUTPUT.put_LINE('Adding parition P' || dbid.dbid || ' FOR ' || t.table_name ); + execute immediate lv_sql; + null; + END LOOP; + END LOOP; + + FOR i in ( SELECT 'alter index ' || index_name || ' rebuild partition ' || PARTITION_NAME lv_sql + FROM user_ind_partitions + WHERE status = 'UNUSABLE') + LOOP + execute immediate i.lv_sql; + END LOOP; + +END; +/ diff --git a/vg/sp_merge_sql_manual_cleanup_10g.sql b/vg/sp_merge_sql_manual_cleanup_10g.sql new file mode 100644 index 0000000..3b0cb40 --- /dev/null +++ b/vg/sp_merge_sql_manual_cleanup_10g.sql @@ -0,0 +1,70 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +*/ +set term on + +DEFINE dbid="&&1" +DEFINE instance_number="&&2" + + +DELETE FROM stats$sql_summary +WHERE(snap_id, dbid, instance_number, old_hash_value, text_subset) IN + (SELECT ss.snap_id, + ss.dbid, + ss.instance_number, + ss.old_hash_value, + ss.text_subset + FROM stats$sql_summary ss, + stats$statspack_parameter sp + WHERE ss.dbid = sp.dbid + AND ss.instance_number = sp.instance_number + AND ss.dbid = &dbid + AND ss.instance_number = &instance_number + AND ss.executions < sp.executions_th *1 + AND ss.parse_calls < sp.parse_calls_th *1 + AND ss.disk_reads < sp.disk_reads_th *1 + AND ss.buffer_gets < sp.buffer_gets_th *1 + AND ss.sharable_mem < sp.sharable_mem_th *1 + AND ss.version_count < sp.version_count_th *1) +; + +commit; + +DELETE /*+ index(spu )*/ +FROM stats$sql_plan_usage spu +WHERE NOT EXISTS + (SELECT 1 + FROM stats$sql_summary ss + WHERE ss.dbid = spu.dbid + AND ss.instance_number = spu.instance_number + AND ss.dbid = &dbid + AND ss.instance_number = &instance_number + AND ss.snap_id = spu.snap_id + AND ss.old_hash_value = spu.old_hash_value + AND ss.text_subset = spu.text_subset) +; + +commit; + + +DELETE FROM stats$sql_plan sp +WHERE NOT EXISTS + (SELECT 1 + FROM stats$sql_plan_usage spu + WHERE spu.plan_hash_value = sp.plan_hash_value) +; + +COMMIT; + +@@footer diff --git a/vg/sp_merge_sql_manual_cleanup_9i.sql b/vg/sp_merge_sql_manual_cleanup_9i.sql new file mode 100644 index 0000000..8135f7e --- /dev/null +++ b/vg/sp_merge_sql_manual_cleanup_9i.sql @@ -0,0 +1,70 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-04 Vishal Gupta First Draft +*/ +set term on + +DEFINE dbid="&&1" +DEFINE instance_number="&&2" + + +DELETE FROM stats$sql_summary +WHERE(snap_id, dbid, instance_number, hash_value, text_subset) IN + (SELECT ss.snap_id, + ss.dbid, + ss.instance_number, + ss.hash_value, + ss.text_subset + FROM stats$sql_summary ss, + stats$statspack_parameter sp + WHERE ss.dbid = sp.dbid + AND ss.instance_number = sp.instance_number + AND ss.dbid = &dbid + AND ss.instance_number = &instance_number + AND ss.executions < sp.executions_th *1 + AND ss.parse_calls < sp.parse_calls_th *1 + AND ss.disk_reads < sp.disk_reads_th *1 + AND ss.buffer_gets < sp.buffer_gets_th *1 + AND ss.sharable_mem < sp.sharable_mem_th *1 + AND ss.version_count < sp.version_count_th *1) +; + +commit; + +DELETE /*+ index(spu )*/ +FROM stats$sql_plan_usage spu +WHERE NOT EXISTS + (SELECT 1 + FROM stats$sql_summary ss + WHERE ss.dbid = spu.dbid + AND ss.instance_number = spu.instance_number + AND ss.dbid = &dbid + AND ss.instance_number = &instance_number + AND ss.snap_id = spu.snap_id + AND ss.hash_value = spu.hash_value + AND ss.text_subset = spu.text_subset) +; + +commit; + + +DELETE FROM stats$sql_plan sp +WHERE NOT EXISTS + (SELECT 1 + FROM stats$sql_plan_usage spu + WHERE spu.plan_hash_value = sp.plan_hash_value) +; + +COMMIT; + +@@footer diff --git a/vg/sp_parameter.sql b/vg/sp_parameter.sql new file mode 100644 index 0000000..d4b018c --- /dev/null +++ b/vg/sp_parameter.sql @@ -0,0 +1,32 @@ +@@header + +set lines 155 + +COLUMN snap_time FORMAT a18 +COLUMN name FORMAT a30 +COLUMN value FORMAT a30 +COLUMN prev_value FORMAT a30 + + +select snap_time + , snap_id + , name + , value + , prev_value +from + (select to_char(s.snap_time,'DD-MON-YY HH24:MI:SS') snap_time + , s.snap_id + , p.name + , p.value + , lag(p.value) over (partition by p.dbid, p.instance_number, p.name + order by p.dbid, p.instance_number, p.name, p.snap_id) prev_value + from stats$parameter p, stats$snapshot s + where s.dbid = p.dbid + and s.instance_number = p.instance_number + and s.snap_id = p.snap_id + ) +where value <> prev_value +and replace(name,'_','!') not like '!!%' +order by snap_time asc; + +@@footer \ No newline at end of file diff --git a/vg/sp_repository_objectsize.sql b/vg/sp_repository_objectsize.sql new file mode 100644 index 0000000..ffa2382 --- /dev/null +++ b/vg/sp_repository_objectsize.sql @@ -0,0 +1,21 @@ +@@header +set lines 200 +set pages 50 +set trimspool on +COLUMN "%age" FORMAT 999 +COLUMN tablespace_name FORMAT A20 +COLUMN owner FORMAT A20 +COLUMN segment_name FORMAT A30 +COLUMN segment_type FORMAT A20 +COLUMN bytes FORMAT 999,999,999,999 + +select * from +(select ROUND((BYTES/ sum.total_bytes*100),2) "%age", tablespace_name, OWNER, segment_NAME, segment_TYPE, bytes +from dba_segments s, + (select sum(bytes) total_bytes from dba_segments where owner = sys_context('USERENV','CURRENT_SCHEMA')) sum +where s.owner = sys_context('USERENV','CURRENT_SCHEMA') +ORDER BY 1 desc +) +where rownum < 21; + +@@footer \ No newline at end of file diff --git a/vg/sp_sb_sga_sizedetails.sql b/vg/sp_sb_sga_sizedetails.sql new file mode 100644 index 0000000..a2a3103 --- /dev/null +++ b/vg/sp_sb_sga_sizedetails.sql @@ -0,0 +1,56 @@ +@@header +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display SGA breakdown history from statspack data +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-07 Vishal Gupta First Draft +*/ +set term on + + + +COLUMN snap_time HEADING "Snap Time" FORMAT a18 +COLUMN total HEADING "TotalSGA||(MB)" FORMAT 9,999,999 +COLUMN buffercache HEADING "BufferCache||(MB)" FORMAT 9,999,999 +COLUMN sharedpooltotal HEADING "SharedPool|Allocated|(MB)" FORMAT 9,999 +COLUMN sharedpoolfree HEADING "SharedPool|Free|(MB)" FORMAT 9,999 +COLUMN javapooltotal HEADING "JavaPool|Allocated|(MB)" FORMAT 9,999 +COLUMN javapoolfree HEADING "JavaPool|Free|(MB)" FORMAT 9,999 +COLUMN largepooltotal HEADING "LargePool|Allocated|(MB)" FORMAT 9,999 +COLUMN largepoolfree HEADING "LargedPool|Free|(MB)" FORMAT 9,999 +COLUMN streamspooltotal HEADING "StreamsPool|Allocated|(MB)" FORMAT 9,999 +COLUMN streamspoolfree HEADING "StreamsPool|Free|(MB)" FORMAT 9,999 +COLUMN fixedsga HEADING "FixedSGA||(MB)" FORMAT 9,999 +COLUMN logbuffer HEADING "LogBuffer||(MB)" FORMAT 9,999 + +SELECT TO_CHAR(A.snap_time,'DD-MON-YY HH24:MI:SS') snap_time + , ROUND(sum(bytes)/1024/1024) total + , ROUND(sum(DECODE(pool,null, DECODE(name,'buffer_cache',bytes,0),0))/1024/1024) buffercache + , ROUND(sum(DECODE(pool,'shared pool', bytes,0))/1024/1024) sharedpooltotal + , ROUND(sum(DECODE(pool,'shared pool', DECODE(name,'free memory',bytes,0),0))/1024/1024) sharedpoolfree + , ROUND(sum(DECODE(pool,'java pool', bytes,0))/1024/1024) javapooltotal + , ROUND(sum(DECODE(pool,'java pool', DECODE(name,'free memory',bytes,0),0))/1024/1024) javapoolfree + , ROUND(sum(DECODE(pool,'large pool', bytes,0))/1024/1024) largepooltotal + , ROUND(sum(DECODE(pool,'large pool', DECODE(name,'free memory',bytes,0),0))/1024/1024) largepoolfree + , ROUND(sum(DECODE(pool,'streams pool', bytes,0))/1024/1024) streamspooltotal + , ROUND(sum(DECODE(pool,'streams pool', DECODE(name,'free memory',bytes,0),0))/1024/1024) streamspoolfree + , ROUND(sum(DECODE(pool,null, DECODE(name,'fixed_sga',bytes,0),0))/1024/1024) fixedsga + , ROUND(sum(DECODE(pool,null, DECODE(name,'log_buffer',bytes,0),0))/1024/1024) logbuffer +FROM stats$SGAstat B, stats$SNAPSHOT A +WHERE A.db_unique_name = B.db_unique_name +AND A.instance_name = B.instance_name +AND A.SNAP_ID = B.SNAP_ID +and A.snap_time > sysdate - &&1 +group by A.db_unique_name + , A.instance_name + , A.snap_time +ORDER BY SNAP_TIME asc; + +set echo off +@@footer diff --git a/vg/sp_sga_sizedetails.sql b/vg/sp_sga_sizedetails.sql new file mode 100644 index 0000000..05d8b56 --- /dev/null +++ b/vg/sp_sga_sizedetails.sql @@ -0,0 +1,54 @@ +@@header +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display SGA breakdown history from statspack data +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-07 Vishal Gupta First Draft +*/ +set term on + + + +COLUMN snap_time HEADING "Snap Time" FORMAT a18 +COLUMN total HEADING "TotalSGA||(MB)" FORMAT 9,999,999 +COLUMN buffercache HEADING "BufferCache||(MB)" FORMAT 9,999,999 +COLUMN sharedpooltotal HEADING "SharedPool|Allocated|(MB)" FORMAT 9,999 +COLUMN sharedpoolfree HEADING "SharedPool|Free|(MB)" FORMAT 9,999 +COLUMN javapooltotal HEADING "JavaPool|Allocated|(MB)" FORMAT 9,999 +COLUMN javapoolfree HEADING "JavaPool|Free|(MB)" FORMAT 9,999 +COLUMN largepooltotal HEADING "LargePool|Allocated|(MB)" FORMAT 9,999 +COLUMN largepoolfree HEADING "LargedPool|Free|(MB)" FORMAT 9,999 +COLUMN streamspooltotal HEADING "StreamsPool|Allocated|(MB)" FORMAT 9,999 +COLUMN streamspoolfree HEADING "StreamsPool|Free|(MB)" FORMAT 9,999 +COLUMN fixedsga HEADING "FixedSGA||(MB)" FORMAT 9,999 +COLUMN logbuffer HEADING "LogBuffer||(MB)" FORMAT 9,999 + +SELECT TO_CHAR(A.snap_time,'DD-MON-YY HH24:MI:SS') snap_time + , ROUND(sum(bytes)/1024/1024) total + , ROUND(sum(DECODE(pool,null, DECODE(name,'buffer_cache',bytes,0),0))/1024/1024) buffercache + , ROUND(sum(DECODE(pool,'shared pool', bytes,0))/1024/1024) sharedpooltotal + , ROUND(sum(DECODE(pool,'shared pool', DECODE(name,'free memory',bytes,0),0))/1024/1024) sharedpoolfree + , ROUND(sum(DECODE(pool,'java pool', bytes,0))/1024/1024) javapooltotal + , ROUND(sum(DECODE(pool,'java pool', DECODE(name,'free memory',bytes,0),0))/1024/1024) javapoolfree + , ROUND(sum(DECODE(pool,'large pool', bytes,0))/1024/1024) largepooltotal + , ROUND(sum(DECODE(pool,'large pool', DECODE(name,'free memory',bytes,0),0))/1024/1024) largepoolfree + , ROUND(sum(DECODE(pool,'streams pool', bytes,0))/1024/1024) streamspooltotal + , ROUND(sum(DECODE(pool,'streams pool', DECODE(name,'free memory',bytes,0),0))/1024/1024) streamspoolfree + , ROUND(sum(DECODE(pool,null, DECODE(name,'fixed_sga',bytes,0),0))/1024/1024) fixedsga + , ROUND(sum(DECODE(pool,null, DECODE(name,'log_buffer',bytes,0),0))/1024/1024) logbuffer +FROM stats$SGAstat B, stats$SNAPSHOT A +WHERE A.DBID = B.DBID +AND A.INSTANCE_NUMBER = B.INSTANCE_NUMBER +AND A.SNAP_ID = B.SNAP_ID +and A.snap_time > sysdate - &&1 +group by A.snap_time +ORDER BY SNAP_TIME asc; + +set echo off +@@footer diff --git a/vg/sp_shrink.sql b/vg/sp_shrink.sql new file mode 100644 index 0000000..f12de49 --- /dev/null +++ b/vg/sp_shrink.sql @@ -0,0 +1,87 @@ +WHENEVER SQLERROR EXIT SQL.SQLCODE + +-- Disable statspack job. +BEGIN + FOR i in (select job from user_jobs where lower(what) like '%snap%' ) + LOOP + sys.dbms_job.broken(i.job,TRUE); + END LOOP; + COMMIT; +END; +/ + +-- Export Statspack schema +host expdp directory=export_dump schemas=PERFSTAT dumpfile=PERFSTAT.dmp logfile=PERFSTAT.log + +-- Disable all constraints +BEGIN + FOR i in (select 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME + || ' MODIFY CONSTRAINT ' || CONSTRAINT_NAME + || ' DISABLE' sqltext + from dba_constraints + where owner = 'PERFSTAT' + and status <> 'DISABLED' + and constraint_type = 'R') + LOOP + execute immediate i.sqltext; + END LOOP; + FOR i in (select 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME + || ' MODIFY CONSTRAINT ' || CONSTRAINT_NAME + || ' DISABLE' sqltext + from dba_constraints + where owner = 'PERFSTAT' + and status <> 'DISABLED') + LOOP + execute immediate i.sqltext; + END LOOP; +END; +/ + +-- Truncate All tables +BEGIN + FOR i in (select 'TRUNCATE TABLE ' || OWNER || '.' || TABLE_NAME sqltext + from dba_tables where owner = 'PERFSTAT') + LOOP + execute immediate i.sqltext; + END LOOP; +END; +/ + +-- Import Statspack schema +host impdp directory=export_dump schemas=PERFSTAT content=data_only dumpfile=PERFSTAT.dmp logfile=PERFSTAT.log + + +-- Enable all constraints +BEGIN + FOR i in (select 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME + || ' MODIFY CONSTRAINT ' || CONSTRAINT_NAME + || ' ENABLE' sqltext + from dba_constraints + where owner = 'PERFSTAT' + AND constraint_type IN ('P','U') + and status = 'DISABLED' + ) + LOOP + execute immediate i.sqltext; + END LOOP; + FOR i in (select 'ALTER TABLE ' || OWNER || '.' || TABLE_NAME + || ' MODIFY CONSTRAINT ' || CONSTRAINT_NAME + || ' ENABLE' sqltext + from dba_constraints where owner = 'PERFSTAT' + and status = 'DISABLED') + LOOP + execute immediate i.sqltext; + END LOOP; +END; +/ + + +-- Enable statspack job. +BEGIN + FOR i in (select job from user_jobs where lower(what) like '%snap%' ) + LOOP + sys.dbms_job.broken(i.job,FALSE); + END LOOP; + COMMIT; +END; +/ diff --git a/vg/sp_sql_capture_histograms.sql b/vg/sp_sql_capture_histograms.sql new file mode 100644 index 0000000..668adfb --- /dev/null +++ b/vg/sp_sql_capture_histograms.sql @@ -0,0 +1,141 @@ +@@header +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display sql capture histograms (equi-width buckets) from statspack repository +* Paraemter: 1 - bucket number (default value 20) +* 2 - threshold multiplier (default value 10) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Aug-07 Vishal Gupta First Draft +* +* +*/ +set term on + +set lines 200 +set pages 50 + +define bucket_numbers="&&1" +define threshold_multiplier="&&2" + +COLUMN executions_bucket_ceil HEADING "Executions|Bucket Ceil" FORMAT 999,999 ON +COLUMN parse_calls_bucket_ceil HEADING "ParseCalls|Bucket Ceil" FORMAT 999,999 ON +COLUMN disk_reads_bucket_ceil HEADING "DiskReads|Bucket Ceil" FORMAT 999,999,999 ON +COLUMN buffer_gets_bucket_ceil HEADING "BufferGets|Bucket Ceil" FORMAT 999,999,999 ON +COLUMN sharable_mem_bucket_ceil HEADING "SharableMem|Bucket Ceil" FORMAT 999,999,999 ON +COLUMN version_count_bucket_ceil HEADING "Version|Bucket Ceil" FORMAT 999,999 ON + +COLUMN executions_Count HEADING "Executions|Count" FORMAT 999,999 ON +COLUMN parse_calls_Count HEADING "ParseCalls|Count" FORMAT 999,999 ON +COLUMN disk_reads_Count HEADING "DiskReads|Count" FORMAT 999,999 ON +COLUMN buffer_gets_Count HEADING "BufferGets|Count" FORMAT 999,999 ON +COLUMN sharable_mem_Count HEADING "SharableMem|Count" FORMAT 999,999 ON +COLUMN version_count_Count HEADING "Version|Count" FORMAT 999,999 ON + +COLUMN executions_percent HEADING "Executions|% Records" FORMAT 999.99 ON +COLUMN parse_calls_percent HEADING "ParseCalls|% Records" FORMAT 999.99 ON +COLUMN disk_reads_percent HEADING "DiskReads|% Records" FORMAT 999.99 ON +COLUMN buffer_gets_percent HEADING "BufferGets|% Records" FORMAT 999.99 ON +COLUMN sharable_mem_percent HEADING "SharableMem|% Records" FORMAT 999.99 ON +COLUMN version_count_percent HEADING "Version|% Records" FORMAT 999.99 ON + + + +with +/* Define the constants for this script */ +constants as +(select NVL(&bucket_numbers,20) bucket_numbers -- number of width balanced histograms + , NVL(&threshold_multiplier,10) threshold_multiplier -- statspack parameter threshold multipler + from dual), +/* Define the constants for this script */ +buckets as +(SELECT ss.SNAP_ID + , WIDTH_BUCKET(ss.executions , 0, sp.EXECUTIONS_TH * c.threshold_multiplier, c.bucket_numbers ) executions_BUCKET_num + , WIDTH_BUCKET(ss.parse_calls , 0, sp.PARSE_CALLS_TH * c.threshold_multiplier, c.bucket_numbers ) parse_calls_BUCKET_num + , WIDTH_BUCKET(ss.disk_reads , 0, sp.DISK_READS_TH * c.threshold_multiplier, c.bucket_numbers ) disk_reads_BUCKET_num + , WIDTH_BUCKET(ss.buffer_gets , 0, sp.BUFFER_GETS_TH * c.threshold_multiplier, c.bucket_numbers ) buffer_gets_BUCKET_num + , WIDTH_BUCKET(ss.sharable_mem , 0, sp.SHARABLE_MEM_TH * c.threshold_multiplier, c.bucket_numbers ) sharable_mem_BUCKET_num + , WIDTH_BUCKET(ss.version_count, 0, sp.VERSION_COUNT_TH * c.threshold_multiplier, c.bucket_numbers ) version_count_BUCKET_num + , WIDTH_BUCKET(ss.executions , 0, sp.EXECUTIONS_TH * c.threshold_multiplier, c.bucket_numbers ) + * ( (sp.EXECUTIONS_TH * c.threshold_multiplier)/c.bucket_numbers) executions_BUCKET_ceil + , WIDTH_BUCKET(ss.parse_calls , 0, sp.PARSE_CALLS_TH * c.threshold_multiplier, c.bucket_numbers ) + * ( (sp.PARSE_CALLS_TH * c.threshold_multiplier)/c.bucket_numbers) parse_calls_BUCKET_ceil + , WIDTH_BUCKET(ss.disk_reads , 0, sp.DISK_READS_TH * c.threshold_multiplier, c.bucket_numbers ) + * ( (sp.DISK_READS_TH * c.threshold_multiplier)/c.bucket_numbers) disk_reads_BUCKET_ceil + , WIDTH_BUCKET(ss.buffer_gets , 0, sp.BUFFER_GETS_TH * c.threshold_multiplier, c.bucket_numbers ) + * ( (sp.BUFFER_GETS_TH * c.threshold_multiplier)/c.bucket_numbers) buffer_gets_BUCKET_ceil + , WIDTH_BUCKET(ss.sharable_mem , 0, sp.SHARABLE_MEM_TH * c.threshold_multiplier, c.bucket_numbers ) + * ( (sp.SHARABLE_MEM_TH * c.threshold_multiplier)/c.bucket_numbers) sharable_mem_BUCKET_ceil + , WIDTH_BUCKET(ss.version_count, 0, sp.VERSION_COUNT_TH * c.threshold_multiplier, c.bucket_numbers ) + * ( (sp.VERSION_COUNT_TH * c.threshold_multiplier)/c.bucket_numbers) version_count_BUCKET_ceil + FROM stats$sql_summary ss + , stats$statspack_parameter sp + , v$database d + , v$instance i + , constants c + WHERE ss.dbid = d.dbid + AND ss.instance_number = i.instance_number + AND sp.dbid = d.dbid + AND sp.instance_number = i.instance_number + ), +executions_buckets as + ( select rownum lv_rownum, a1.* from (select executions_BUCKET_num, executions_BUCKET_ceil, count(1) count + from buckets group by executions_BUCKET_num, executions_BUCKET_ceil order by 1) a1 ) , +parse_calls_buckets as + ( select rownum lv_rownum, a2.* from (select parse_calls_BUCKET_num, parse_calls_BUCKET_ceil, count(1) count + from buckets group by parse_calls_BUCKET_num, parse_calls_BUCKET_ceil order by 1) a2 ) , +disk_reads_buckets as + ( select rownum lv_rownum, a3.* from (select disk_reads_BUCKET_num, disk_reads_BUCKET_ceil, count(1) count + from buckets group by disk_reads_BUCKET_num, disk_reads_BUCKET_ceil order by 1) a3 ) , +buffer_gets_buckets as + ( select rownum lv_rownum, a4.* from (select buffer_gets_BUCKET_num, buffer_gets_BUCKET_ceil, count(1) count + from buckets group by buffer_gets_BUCKET_num,buffer_gets_BUCKET_ceil order by 1) a4 ) , +sharable_mem_buckets as + ( select rownum lv_rownum, a5.* from (select sharable_mem_BUCKET_num, sharable_mem_BUCKET_ceil, count(1) count + from buckets group by sharable_mem_BUCKET_num, sharable_mem_BUCKET_ceil order by 1) a5 ) , +version_count_buckets as + ( select rownum lv_rownum, a6.* from (select version_count_BUCKET_num, version_count_BUCKET_ceil, count(1) count + from buckets group by version_count_BUCKET_num, version_count_BUCKET_ceil order by 1) a6 ) +select e.executions_bucket_ceil + , p.parse_calls_BUCKET_ceil + , d.disk_reads_BUCKET_ceil + , b.buffer_gets_BUCKET_ceil + , s.sharable_mem_BUCKET_ceil + , v.version_count_BUCKET_ceil +-- , e.count executions_count +-- , p.count parse_calls_count +-- , d.count disk_reads_count +-- , b.count buffer_gets_count +-- , s.count sharable_mem_count +-- , v.count version_count_count + , ROUND((e.count / total_count)*100,2) executions_percent + , ROUND((p.count / total_count)*100,2) parse_calls_percent + , ROUND((d.count / total_count)*100,2) disk_reads_percent + , ROUND((b.count / total_count)*100,2) buffer_gets_percent + , ROUND((s.count / total_count)*100,2) sharable_mem_percent + , ROUND((v.count / total_count)*100,2) version_count_percent + from executions_buckets e + , parse_calls_buckets p + , disk_reads_buckets d + , buffer_gets_buckets b + , sharable_mem_buckets s + , version_count_buckets v + , (select count(1) total_count + from stats$sql_summary ss , v$instance i , v$database d + WHERE ss.dbid = d.dbid + AND ss.instance_number = i.instance_number + ) +where e.lv_rownum = p.lv_rownum (+) + and e.lv_rownum = d.lv_rownum (+) + and e.lv_rownum = b.lv_rownum (+) + and e.lv_rownum = s.lv_rownum (+) + and e.lv_rownum = v.lv_rownum (+) +order by 1 +/ + +@@footer diff --git a/vg/sp_sql_capture_tune.sql b/vg/sp_sql_capture_tune.sql new file mode 100644 index 0000000..4107d96 --- /dev/null +++ b/vg/sp_sql_capture_tune.sql @@ -0,0 +1,13 @@ +SELECT ROUND(AVG(count(1))) "Avg Record (#)/ Snap" + FROM stats$sql_summary ss, + stats$statspack_parameter sp + WHERE ss.dbid = sp.dbid + AND ss.instance_number = sp.instance_number + AND (ss.EXECUTIONS > sp.EXECUTIONS_TH * 1 + OR ss.parse_calls > sp.PARSE_CALLS_TH * 1 + OR ss.disk_reads > sp.DISK_READS_TH * 1 + OR ss.buffer_gets > sp.BUFFER_GETS_TH * 1 + OR ss.sharable_mem > sp.SHARABLE_MEM_TH * 1 + OR ss.version_count > sp.VERSION_COUNT_TH * 1 + ) +group by ss.dbid, ss.instance_number, snap_id; diff --git a/vg/sp_sql_manual_cleanup_10g.sql b/vg/sp_sql_manual_cleanup_10g.sql new file mode 100644 index 0000000..06a6681 --- /dev/null +++ b/vg/sp_sql_manual_cleanup_10g.sql @@ -0,0 +1,20 @@ +delete from stats$sql_summary +where (SNAP_ID, DBID, INSTANCE_NUMBER, OLD_HASH_VALUE, TEXT_SUBSET) +in ( SELECT ss.SNAP_ID, ss.DBID, ss.INSTANCE_NUMBER, ss.OLD_HASH_VALUE, ss.TEXT_SUBSET + FROM stats$sql_summary ss, + stats$statspack_parameter sp + WHERE ss.dbid = sp.dbid + AND ss.instance_number = sp.instance_number + AND ss.EXECUTIONS < sp.EXECUTIONS_TH * 1 + AND ss.parse_calls < sp.PARSE_CALLS_TH * 1 + AND ss.disk_reads < sp.DISK_READS_TH * 1 + AND ss.buffer_gets < sp.BUFFER_GETS_TH * 1 + AND ss.sharable_mem < sp.SHARABLE_MEM_TH * 1 + AND ss.version_count < sp.VERSION_COUNT_TH * 1 + ) +; + +commit; + + + diff --git a/vg/sp_sql_manual_cleanup_9i.sql b/vg/sp_sql_manual_cleanup_9i.sql new file mode 100644 index 0000000..3081d8b --- /dev/null +++ b/vg/sp_sql_manual_cleanup_9i.sql @@ -0,0 +1,45 @@ +DELETE FROM stats$sql_summary +WHERE(snap_id, dbid, instance_number, hash_value, text_subset) IN + (SELECT ss.snap_id, + ss.dbid, + ss.instance_number, + ss.hash_value, + ss.text_subset + FROM stats$sql_summary ss, + stats$statspack_parameter sp + WHERE ss.dbid = sp.dbid + AND ss.instance_number = sp.instance_number + AND ss.executions < sp.executions_th *1 + AND ss.parse_calls < sp.parse_calls_th *1 + AND ss.disk_reads < sp.disk_reads_th *1 + AND ss.buffer_gets < sp.buffer_gets_th *1 + AND ss.sharable_mem < sp.sharable_mem_th *1 + AND ss.version_count < sp.version_count_th *1) +; + +commit; + +DELETE /*+ index(spu )*/ +FROM stats$sql_plan_usage spu +WHERE NOT EXISTS + (SELECT 1 + FROM stats$sql_summary ss + WHERE ss.dbid = spu.dbid + AND ss.instance_number = spu.instance_number + AND ss.snap_id = spu.snap_id + AND ss.hash_value = spu.hash_value + AND ss.text_subset = spu.text_subset) +; + +commit; + + +DELETE FROM stats$sql_plan sp +WHERE NOT EXISTS + (SELECT 1 + FROM stats$sql_plan_usage spu + WHERE spu.plan_hash_value = sp.plan_hash_value) +; + +COMMIT; + diff --git a/vg/sp_top_events.sql b/vg/sp_top_events.sql new file mode 100644 index 0000000..71ef383 --- /dev/null +++ b/vg/sp_top_events.sql @@ -0,0 +1,82 @@ +set echo on +/* +* +* Author : Vishal Gupta +* Purpose : Display top wait events from STATSPACK +* +* Syntax : @file_name +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-07 Vishal Gupta First Draft +* +*/ +set echo off +set verify off +set pages 10000 +set lines 250 +TTITLE CENTER "T O P E V E N T S T R E N D" - +SKIP 1 CENTER "################################" - +SKIP 1 CENTER "" + +COLUMN snap_time HEADING "Snap Time" FORMAT a17 +COLUMN E1 HEADING "1st|Event" FORMAT a30 +COLUMN E2 HEADING "2nd|Event" FORMAT a30 +COLUMN E3 HEADING "3rd|Event" FORMAT a30 +COLUMN E4 HEADING "4th|Event" FORMAT a30 +COLUMN E5 HEADING "5th|Event" FORMAT a30 +COLUMN T1 HEADING "1st|Time" FORMAT 9999 noprint +COLUMN T2 HEADING "2nd|Time" FORMAT 9999 noprint +COLUMN T3 HEADING "3rd|Time" FORMAT 9999 noprint +COLUMN T4 HEADING "4th|Time" FORMAT 9999 noprint +COLUMN T5 HEADING "5th|Time" FORMAT 9999 noprint +COLUMN P1 HEADING "1st|%age" FORMAT a3 +COLUMN P2 HEADING "2nd|%age" FORMAT a3 +COLUMN P3 HEADING "3rd|%age" FORMAT a3 +COLUMN P4 HEADING "4th|%age" FORMAT a3 +COLUMN P5 HEADING "5th|%age" FORMAT a3 + + +WITH topevents AS + (SELECT /*+ first_rows */ + s.snap_time, + se.event, + ROUND((se.time_waited_micro -se2.time_waited_micro) / 1000000) AS + time_waited_delta, + dense_rank() over(PARTITION BY s.snap_time + ORDER BY se.time_waited_micro -se2.time_waited_micro DESC) rank + FROM stats$system_event se2, + stats$system_event se, + stats$snapshot s + WHERE s.snap_id = se.snap_id + AND s.dbid = se.dbid + AND s.instance_number = se.instance_number +-- AND to_char(s.snap_time, 'hh24MI') BETWEEN 0800 AND 0900 + AND se2.snap_id = s.snap_id -1 + AND s.dbid = se2.dbid + AND s.instance_number = se2.instance_number + AND se.event = se2.event + AND se.event NOT IN (select name from v$event_name where wait_class = 'Idle') +) +SELECT TO_CHAR(snap_time,'dd-mm-yy hh24:mi:ss') snap_time, + MAX(decode(rank, 1, event)) E1, + SUM(decode(rank, 1, time_waited_delta, 0)) T1, + ROUND(SUM(decode(rank, 1, time_waited_delta, 0)) /sum(time_waited_delta) *100 ,2)||'%' P1, + MAX(decode(rank, 2, event)) E2, + SUM(decode(rank, 2, time_waited_delta, 0)) T2, + ROUND(SUM(decode(rank, 2, time_waited_delta, 0)) /sum(time_waited_delta) *100 ,2)||'%' P2, + MAX(decode(rank, 3, event)) E3, + SUM(decode(rank, 3, time_waited_delta, 0)) T3, + ROUND(SUM(decode(rank, 3, time_waited_delta, 0)) /sum(time_waited_delta) *100 ,2)||'%' P3, + MAX(decode(rank, 4, event)) E4, + SUM(decode(rank, 4, time_waited_delta, 0)) T4, + ROUND(SUM(decode(rank, 4, time_waited_delta, 0)) /sum(time_waited_delta) *100 ,2)||'%' P4, + MAX(decode(rank, 5, event)) E5, + SUM(decode(rank, 5, time_waited_delta, 0)) T5, + ROUND(SUM(decode(rank, 5, time_waited_delta, 0)) /sum(time_waited_delta) *100 ,2)||'%' P5 +FROM topevents t1 +GROUP BY snap_time +ORDER BY snap_time DESC; + diff --git a/vg/sp_ts_stats_10g.sql b/vg/sp_ts_stats_10g.sql new file mode 100644 index 0000000..a914ca2 --- /dev/null +++ b/vg/sp_ts_stats_10g.sql @@ -0,0 +1,87 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace IO statistics from statspack data +* To Do : 1 - Ajust script for +* Arguments: 1 - Tablespace Name, you can password wild characters like % +* 2 - Number of days of data to consider +* 3 - DBID +* 4 - instance_number +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Jan-09 Vishal Gupta First Draft +*/ +set term on + + +define tablespace_name="&&1" +define days="&&2" +define dbid="&&3" +define instance_number="&&4" + + +WITH filestatxs +as +(select f.dbid, f.instance_number, f.snap_id, s.snap_time + , f.tsname, f.file#, f.filename + , DECODE( f.singleblkrds - LAG (f.singleblkrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) + , 0, 0 + , ( ( f.singleblkrdtim - LAG (f.singleblkrdtim) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) ) + / ( f.singleblkrds - LAG (f.singleblkrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) ) + ) * 10 + ) singleblkreadtime + , DECODE( f.phyrds - LAG (f.phyrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) + , 0, 0 + , ( ( f.readtim - LAG (f.readtim) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) ) + / ( f.phyrds - LAG (f.phyrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) ) + ) * 10 + ) readtime + , DECODE( f.phywrts - LAG (f.phywrts ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) + , 0, 0 + , ( ( f.writetim - LAG (f.writetim) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) ) + / ( f.phywrts - LAG (f.phywrts ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) ) + ) * 10 + ) writetime + , f.singleblkrds - LAG (f.singleblkrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) singleblkreads + , f.phyrds - LAG (f.phyrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) reads + , f.phywrts - LAG (f.phywrts ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.file#) writes +from stats$database_instance i + , stats$snapshot s + , stats$filestatxs f +where (i.dbid, i.instance_number,i.startup_time) in (select max(dbid), instance_number, max(startup_time) + from stats$database_instance i2 + where i2.dbid = &dbid + and i2.instance_number = &instance_number + group by instance_name, instance_number + ) +and s.dbid = i.dbid +and s.instance_number = i.instance_number +and f.dbid = s.dbid +and f.instance_number = s.instance_number +and f.snap_id = s.snap_id +and s.dbid = &dbid +and s.instance_number = &instance_number +and s.snap_time > sysdate - &days +and f.tsname like '&tablespace_name' ) +select f2.snap_time + , f2.tsname + , ROUND(avg(singleblkreadtime),2) "AvgSingleBlockRead(ms)" + , ROUND(avg(readtime),2) "AvgRead(ms)" + , ROUND(avg(writetime),2) "AvgWrite(ms)" + , SUM(singleblkreads) tot_singleblkreads + , SUM(reads) - SUM(singleblkreads) tot_multiblkreads + , SUM(reads) tot_reads + , SUM(writes) tot_writes +from filestatxs f2 +group by f2.snap_time, f2.tsname +order by f2.snap_time desc +; + + +@@footer diff --git a/vg/sp_ts_stats_9i.sql b/vg/sp_ts_stats_9i.sql new file mode 100644 index 0000000..5d77ac7 --- /dev/null +++ b/vg/sp_ts_stats_9i.sql @@ -0,0 +1,87 @@ +@@header + +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace IO statistics from statspack data +* To Do : 1 - Ajust script for +* Arguments: 1 - Tablespace Name, you can password wild characters like % +* 2 - Number of days of data to consider +* 3 - DBID +* 4 - instance_number +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 05-Jan-09 Vishal Gupta First Draft +*/ +set term on + + +define tablespace_name="&&1" +define days="&&2" +define dbid="&&3" +define instance_number="&&4" + + +WITH filestatxs +as +(select f.dbid, f.instance_number, f.snap_id, s.snap_time + , f.tsname, f.filename, f.filename + , DECODE( f.singleblkrds - LAG (f.singleblkrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) + , 0, 0 + , ( ( f.singleblkrdtim - LAG (f.singleblkrdtim) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) ) + / ( f.singleblkrds - LAG (f.singleblkrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) ) + ) * 10 + ) singleblkreadtime + , DECODE( f.phyrds - LAG (f.phyrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) + , 0, 0 + , ( ( f.readtim - LAG (f.readtim) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) ) + / ( f.phyrds - LAG (f.phyrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) ) + ) * 10 + ) readtime + , DECODE( f.phywrts - LAG (f.phywrts ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) + , 0, 0 + , ( ( f.writetim - LAG (f.writetim) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) ) + / ( f.phywrts - LAG (f.phywrts ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) ) + ) * 10 + ) writetime + , f.singleblkrds - LAG (f.singleblkrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) singleblkreads + , f.phyrds - LAG (f.phyrds ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) reads + , f.phywrts - LAG (f.phywrts ) OVER (ORDER BY f.dbid, f.instance_number, f.snap_id, f.tsname, f.filename) writes +from stats$database_instance i + , stats$snapshot s + , stats$filestatxs f +where (i.dbid, i.instance_number,i.startup_time) in (select max(dbid), instance_number, max(startup_time) + from stats$database_instance i2 + where i2.dbid = &dbid + and i2.instance_number = &instance_number + group by instance_name, instance_number + ) +and s.dbid = i.dbid +and s.instance_number = i.instance_number +and f.dbid = s.dbid +and f.instance_number = s.instance_number +and f.snap_id = s.snap_id +and s.dbid = &dbid +and s.instance_number = &instance_number +and s.snap_time > sysdate - &days +and f.tsname like '&tablespace_name' ) +select f2.snap_time + , f2.tsname + , ROUND(avg(singleblkreadtime),2) "AvgSingleBlockRead(ms)" + , ROUND(avg(readtime),2) "AvgRead(ms)" + , ROUND(avg(writetime),2) "AvgWrite(ms)" + , SUM(singleblkreads) tot_singleblkreads + , SUM(reads) - SUM(singleblkreads) tot_multiblkreads + , SUM(reads) tot_reads + , SUM(writes) tot_writes +from filestatxs f2 +group by f2.snap_time, f2.tsname +order by f2.snap_time desc +; + + +@@footer diff --git a/vg/sp_tune_sql_capture.sql b/vg/sp_tune_sql_capture.sql new file mode 100644 index 0000000..aa7a274 --- /dev/null +++ b/vg/sp_tune_sql_capture.sql @@ -0,0 +1,11 @@ +SELECT ROUND(AVG(count(1))) "Avg Record (#)/ Snap" + FROM stats$sql_summary ss, + stats$statspack_parameter sp +WHERE (ss.EXECUTIONS > sp.EXECUTIONS_TH * 1 + OR ss.parse_calls > sp.PARSE_CALLS_TH * 1 + OR ss.disk_reads > sp.DISK_READS_TH * 1 + OR ss.buffer_gets > sp.BUFFER_GETS_TH * 1 + OR ss.sharable_mem > sp.SHARABLE_MEM_TH * 1 + OR ss.version_count > sp.VERSION_COUNT_TH * 1 + ) +group by snap_id; diff --git a/vg/spacebound.sql b/vg/spacebound.sql new file mode 100644 index 0000000..112c0d9 --- /dev/null +++ b/vg/spacebound.sql @@ -0,0 +1,16 @@ +-- To identify space-bound objects. If all is well, no rows are returned. +-- If any space-bound objects are found, look at value of NEXT extent +-- size to figure out what happened. +-- Then use coalesce (alter tablespace coalesce;). +-- Lastly, add another datafile to the tablespace if needed. +-- +-- 11/30/98 + +SELECT a.table_name, a.next_extent, a.tablespace_name +FROM all_tables a, + ( SELECT tablespace_name, max(bytes) as big_chunk + FROM dba_free_space + GROUP BY tablespace_name ) f +WHERE f.tablespace_name = a.tablespace_name + AND a.next_extent > f.big_chunk +/ diff --git a/vg/spacedeficit.sql b/vg/spacedeficit.sql new file mode 100644 index 0000000..f81afbd --- /dev/null +++ b/vg/spacedeficit.sql @@ -0,0 +1,60 @@ +set echo off +TTITLE "Space Deficit Report" +COLUMN owner FORMAT a10 HEADING Owner ON +COLUMN segment_name FORMAT a15 HEADING "Segment Name" ON +COLUMN segment_type FORMAT a10 HEADING "Segment Type" ON +COLUMN tablespace_name FORMAT a10 HEADING "Tablespace" ON +COLUMN initial_extent HEADING "Initial|Extent(Mb)" JUSTIFY left ON FORMAT 999,999 +COLUMN alloc HEADING "Alloc|(Mb)" JUSTIFY left ON FORMAT 999,999 +COLUMN next_extent HEADING "Next|Extent(Mb)" JUSTIFY left ON FORMAT 999,999 +COLUMN free_extent HEADING "Free|Extent(Mb)" JUSTIFY left ON FORMAT 999,999 +COLUMN total_free HEADING "Total|Free(Mb)" JUSTIFY left ON FORMAT 999,999 +COLUMN pct_increase HEADING "%Inc" FORMAT 999 +set pages 32676 lines 200 + + + +select a.owner + , decode(partition_name, null, segment_name, segment_name || ':' || partition_name) segment_name + , a.SEGMENT_TYPE + , a.tablespace_name + , a.bytes/1024/1024 alloc + , a.initial_extent/1024/1024 initial_extent + , a.next_extent/1024/1024 next_extent + , a.PCT_INCREASE + , a.extents + , a.max_extents + , b.free_extent/1024/1024 free_extent + , b.total_free/1024/1024 total_free + , decode(c.autoextensible, 0, 'NO', 'YES') autoextensible + , decode(c.autoextensible, 0, 0, c.morebytes) max_can_grow_by + , decode(c.autoextensible, 0, 0, c.totalmorebytes) sum_can_grow_by +from dba_segments a, + (select df.tablespace_name + , nvl(max(fs.bytes), 0) free_extent + , nvl(sum(fs.bytes), 0) total_free + from dba_data_files df, + dba_free_space fs + where df.file_id = fs.file_id (+) + group by df.tablespace_name) b + ,(select tablespace_name, max(maxbytes - bytes) morebytes, + sum(decode(AUTOEXTENSIBLE, 'YES', maxbytes - bytes, 0)) totalmorebytes, + sum(decode(AUTOEXTENSIBLE, 'YES', 1, 0)) autoextensible + from dba_data_files + group by tablespace_name) c +where a.tablespace_name = b.tablespace_name +and a.tablespace_name = c.tablespace_name +and ((c.autoextensible = 0) or ((c.autoextensible > 0) +and (a.next_extent > c.morebytes))) +and (a.next_extent > b.free_extent OR a.extents >= a.max_extents) +order by 5 desc, 3; + + +TTITLE OFF +COLUMN owner OFF +COLUMN segment_name OFF +COLUMN segment_type OFF +COLUMN tablespace_name OFF +COLUMN next_extent OFF +COLUMN free_extent OFF +set pages 14 lines 80 numf "" diff --git a/vg/sprepins_vg.sql b/vg/sprepins_vg.sql new file mode 100644 index 0000000..b9482b7 --- /dev/null +++ b/vg/sprepins_vg.sql @@ -0,0 +1,6085 @@ +Rem +Rem $Header: sprepins.sql 31-may-2005.16:31:36 cdgreen Exp $ +Rem +Rem sprepins.sql +Rem +Rem Copyright (c) 2001, 2005, Oracle. All rights reserved. +Rem +Rem NAME +Rem sprepins.sql - StatsPack Report Instance +Rem +Rem DESCRIPTION +Rem SQL*Plus command file to report on differences between +Rem values recorded in two snapshots. +Rem +Rem This script requests the user for the dbid and instance number +Rem of the instance to report on, before producing the standard +Rem Statspack report. +Rem +Rem NOTES +Rem Usually run as the STATSPACK owner, PERFSTAT +Rem +Rem MODIFIED (MM/DD/YY) +Rem cdgreen 05/23/05 - 4246955 +Rem cdgreen 02/28/05 - 10gR2 misc +Rem vbarrier 02/18/05 - 4081984/4071648 +Rem cdgreen 10/29/04 - 10gR2_sqlstats +Rem cdgreen 10/25/04 - 3970898 +Rem vbarrier 09/03/04 - Wait Event Histogram +Rem cdgreen 07/15/04 - sp_10_r2 +Rem cdialeri 03/30/04 - 3356242 +Rem vbarrier 03/18/04 - 3517841 +Rem vbarrier 02/12/04 - 3412853/3378066 +Rem vbarrier 01/30/04 - 3411063/3411129 +Rem cdialeri 12/03/03 - 3290482 +Rem cdialeri 10/14/03 - 10g - streams - rvenkate +Rem cdialeri 08/06/03 - 10g F3 +Rem vbarrier 02/25/03 - 10g RAC +Rem cdialeri 11/15/02 - 10g R1 +Rem cdialeri 10/29/02 - 2648471 +Rem cdialeri 09/26/02 - 10.0 +Rem vbarrier 07/14/02 - Segment Statistics: outerjoin + order by +Rem vbarrier 07/10/02 - Input checking + capt/tot SQL + snapdays +Rem vbarrier 03/20/02 - Module in SQL reporting + 2188360 +Rem vbarrier 03/05/02 - Segment Statistics +Rem spommere 02/14/02 - cleanup RAC stats that are no longer needed +Rem spommere 02/08/02 - 2212357 +Rem cdialeri 02/07/02 - 2218573 +Rem cdialeri 01/30/02 - 2184717 +Rem cdialeri 01/09/02 - 9.2 - features 2 +Rem ykunitom 12/21/01 - 1396578: fixed '% Non-Parse CPU' +Rem cdialeri 12/19/01 - 9.2 - features 1 +Rem cdialeri 09/20/01 - 1767338,1910458,1774694 +Rem cdialeri 04/26/01 - Renamed from spreport.sql +Rem cdialeri 03/02/01 - 9.0 +Rem cdialeri 09/12/00 - sp_1404195 +Rem cdialeri 07/10/00 - 1349995 +Rem cdialeri 06/21/00 - 1336259 +Rem cdialeri 04/06/00 - 1261813 +Rem cdialeri 03/28/00 - sp_purge +Rem cdialeri 02/16/00 - 1191805 +Rem cdialeri 11/01/99 - Enhance, 1059172 +Rem cgervasi 06/16/98 - Remove references to wrqs +Rem cmlim 07/30/97 - Modified system events +Rem gwood.uk 02/30/94 - Modified +Rem densor.uk 03/31/93 - Modified +Rem cellis.uk 11/15/89 - Created +Rem + + +-- +-- Get the report settings +@@sprepcon.sql + +-- +-- + +clear break compute; +repfooter off; +ttitle off; +btitle off; +set timing off veri off space 1 flush on pause off termout on numwidth 10; +set echo off feedback off pagesize 60 newpage 1 recsep off; +set trimspool on trimout on define "&" concat "." serveroutput on; +set linesize &&linesize_fmt; +-- +-- Must not be modified +-- Bytes to megabytes +define btomb = 1048576; +-- Bytes to kilobytes +define btokb = 1024; +-- Centiseconds to seconds +define cstos = 100; +-- Microseconds to milli-seconds +define ustoms = 1000; +-- Microseconds to seconds +define ustos = 1000000; +define top_n_events = 5; +define total_event_time_s_th = .001; +define pct_cpu_diff_th = 5; + +-- +-- Request the DB Id and Instance Number, if they are not specified + +column instt_num heading "Inst Num" format 99999; +column instt_name heading "Instance" format a12; +column dbb_name heading "DB Name" format a12; +column dbbid heading "DB Id" format 9999999999 just c; +column host heading "Host" format a12; + +prompt +prompt +prompt Instances in this Statspack schema +prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +select distinct + dbid dbbid + , instance_number instt_num + , db_name dbb_name + , instance_name instt_name + , host_name host + from stats$database_instance; + +prompt +prompt Using &&dbid for database Id +prompt Using &&inst_num for instance number + + +-- +-- Set up the binds for dbid and instance_number + +variable dbid number; +variable inst_num number; +begin + :dbid := &dbid; + :inst_num := &inst_num; +end; +/ + + +-- +-- Error reporting + +whenever sqlerror exit; +variable max_snap_time char(10); +declare + + cursor cidnum is + select 'X' + from stats$database_instance + where instance_number = :inst_num + and dbid = :dbid; + + cursor csnapid is + select to_char(max(snap_time),'dd/mm/yyyy') + from stats$snapshot + where instance_number = :inst_num + and dbid = :dbid; + + vx char(1); + +begin + + -- Check Database Id/Instance Number is a valid pair + open cidnum; + fetch cidnum into vx; + if cidnum%notfound then + raise_application_error(-20200, + 'Database/Instance '||:dbid||'/'||:inst_num||' does not exist in STATS$DATABASE_INSTANCE'); + end if; + close cidnum; + + -- Check Snapshots exist for Database Id/Instance Number + open csnapid; + fetch csnapid into :max_snap_time; + if csnapid%notfound then + raise_application_error(-20200, + 'No snapshots exist for Database/Instance '||:dbid||'/'||:inst_num); + end if; + close csnapid; + +end; +/ +whenever sqlerror continue; + + +-- +-- Ask how many days of snapshots to display + +set termout on; +column instart_fmt noprint; +column inst_name format a12 heading 'Instance'; +column db_name format a12 heading 'DB Name'; +column snap_id format 99999990 heading 'Snap Id'; +column snapdat format a17 heading 'Snap Started' just c; +column lvl format 99 heading 'Snap|Level'; +column commnt format a20 heading 'Comment'; + +prompt +prompt +prompt Specify the number of days of snapshots to choose from +prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +prompt Entering the number of days (n) will result in the most recent +prompt (n) days of snapshots being listed. Pressing without +prompt specifying a number lists all completed snapshots. +prompt +prompt + +set heading off; +column num_days new_value num_days noprint; +select 'Listing ' + || decode( nvl('&&num_days', to_number('3.14','9D99','nls_numeric_characters=''.,''')) + , to_number('3.14','9D99','nls_numeric_characters=''.,'''), 'all Completed Snapshots' + , 0 , 'no snapshots' + , 1 , 'the last day''s Completed Snapshots' + , 'the last &num_days days of Completed Snapshots') + , nvl('&&num_days', to_number('3.14','9D99','nls_numeric_characters=''.,''')) num_days + from sys.dual; +set heading on; + + +-- +-- List available snapshots + +break on inst_name on db_name on host on instart_fmt skip 1; + +ttitle off; + +select to_char(s.startup_time,' dd Mon "at" HH24:mi:ss') instart_fmt + , di.instance_name inst_name + , di.db_name db_name + , s.snap_id snap_id + , to_char(s.snap_time,'dd Mon YYYY HH24:mi') snapdat + , s.snap_level lvl + , substr(s.ucomment, 1,60) commnt + from stats$snapshot s + , stats$database_instance di + where s.dbid = :dbid + and di.dbid = :dbid + and s.instance_number = :inst_num + and di.instance_number = :inst_num + and di.dbid = s.dbid + and di.instance_number = s.instance_number + and di.startup_time = s.startup_time + and s.snap_time >= decode( to_number('&num_days') + , to_number('3.14','9D99','nls_numeric_characters=''.,'''), s.snap_time + , 0 , to_date('31-JAN-9999','DD-MON-YYYY') + , to_date(:max_snap_time,'dd/mm/yyyy') - (to_number('&num_days') - 1)) + order by db_name, instance_name, snap_id; + +clear break; +ttitle off; + + +-- +-- Ask for the snapshots Id's which are to be compared + +prompt +prompt +prompt Specify the Begin and End Snapshot Ids +prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +prompt Begin Snapshot Id specified: &&begin_snap +prompt +prompt End Snapshot Id specified: &&end_snap +prompt + + +-- +-- Set up the snapshot-related binds + +variable bid number; +variable eid number; +begin + :bid := &begin_snap; + :eid := &end_snap; +end; +/ + +prompt + + +-- +-- Error reporting + +whenever sqlerror exit; +declare + + cursor cspid(vspid stats$snapshot.snap_id%type) is + select snap_time + , startup_time + , session_id + , serial# + from stats$snapshot + where snap_id = vspid + and instance_number = :inst_num + and dbid = :dbid; + + bsnapt stats$snapshot.startup_time%type; + bstart stats$snapshot.startup_time%type; + bsesid stats$snapshot.session_id%type; + bseria stats$snapshot.serial#%type; + esnapt stats$snapshot.startup_time%type; + estart stats$snapshot.startup_time%type; + esesid stats$snapshot.session_id%type; + eseria stats$snapshot.serial#%type; + +begin + + -- Check Begin Snapshot id is valid, get corresponding instance startup time + open cspid(:bid); + fetch cspid into bsnapt, bstart, bsesid, bseria; + if cspid%notfound then + raise_application_error(-20200, + 'Begin Snapshot Id '||:bid||' does not exist for this database/instance'); + end if; + close cspid; + + -- Check End Snapshot id is valid and get corresponding instance startup time + open cspid(:eid); + fetch cspid into esnapt, estart, esesid, eseria; + if cspid%notfound then + raise_application_error(-20200, + 'End Snapshot Id '||:eid||' does not exist for this database/instance'); + end if; + if esnapt <= bsnapt then + raise_application_error(-20200, + 'End Snapshot Id '||:eid||' must be greater than Begin Snapshot Id '||:bid); + end if; + close cspid; + + -- Check startup time is same for begin and end snapshot ids + if ( bstart != estart) then + raise_application_error(-20200, + 'The instance was shutdown between snapshots '||:bid||' and '||:eid); + end if; + + -- Check sessions are same for begin and end snapshot ids + if (bsesid != esesid or bseria != eseria) then + dbms_output.put_line('WARNING: SESSION STATISTICS WILL NOT BE PRINTED, as session statistics'); + dbms_output.put_line('captured in begin and end snapshots are for different sessions'); + dbms_output.put_line('(Begin Snap sid,serial#: '||bsesid||','||bseria||', End Snap sid,serial#: '||esesid||','||eseria||').'); + dbms_output.put_line(''); + end if; + +end; +/ +whenever sqlerror continue; + + +-- +-- Get the database info to display in the report + +set termout off; +column para new_value para; +column versn new_value versn; +column host_name new_value host_name; +column db_name new_value db_name; +column inst_name new_value inst_name; +column btime new_value btime; +column etime new_value etime; +column sutime new_value sutime; + +select parallel para + , version versn + , host_name host_name + , db_name db_name + , instance_name inst_name + , to_char(snap_time, 'YYYYMMDD HH24:MI:SS') btime + , to_char(s.startup_time, 'DD-Mon-YY HH24:MI') sutime + from stats$database_instance di + , stats$snapshot s + where s.snap_id = :bid + and s.dbid = :dbid + and s.instance_number = :inst_num + and di.dbid = s.dbid + and di.instance_number = s.instance_number + and di.startup_time = s.startup_time; + +select to_char(snap_time, 'YYYYMMDD HH24:MI:SS') etime + from stats$snapshot s + where s.snap_id = :eid + and s.dbid = :dbid + and s.instance_number = :inst_num; + +variable para varchar2(9); +variable versn varchar2(10); +variable host_name varchar2(64); +variable db_name varchar2(20); +variable inst_name varchar2(20); +variable btime varchar2(25); +variable etime varchar2(25); +variable sutime varchar2(19); +begin + :para := '¶'; + :versn := '&versn'; + :host_name := '&host_name'; + :db_name := '&db_name'; + :inst_name := '&inst_name'; + :btime := '&btime'; + :etime := '&etime'; + :sutime := '&sutime'; +end; +/ + +define DBtime=1 +define DBtimes=1 +column DBtime new_value DBtime noprint +column DBtimes new_value DBtimes noprint +select (e.value - b.value) DBtime + , round((e.value - b.value)/1000000,1) DBtimes + from stats$sys_time_model e + , stats$sys_time_model b + , stats$time_model_statname sn + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and sn.stat_name = 'DB time' + and b.stat_id = e.stat_id + and e.stat_id = sn.stat_id; +set termout on; + + +-- +-- Use report name if specified, otherwise prompt user for output file +-- name (specify default), then begin spooling + +set termout off; +column dflt_name new_value dflt_name noprint; +select 'sp_'||:bid||'_'||:eid dflt_name from dual; +set termout on; + +prompt +prompt Specify the Report Name +prompt ~~~~~~~~~~~~~~~~~~~~~~~ +prompt The default report file name is &dflt_name.. To use this name, +prompt press to continue, otherwise enter an alternative. +prompt + +set heading off; +column report_name new_value report_name noprint; +select 'Using the report name ' || nvl('&&report_name','&dflt_name') + , decode( instr(nvl('&&report_name','&dflt_name'),'.'), 0, nvl('&&report_name','&dflt_name')||'.lst' + , nvl('&&report_name','&dflt_name')) report_name + from sys.dual; +prompt + +spool &report_name; +set heading on; + + + +-- +-- + +set newpage 1 heading on; + + +-- +-- Call statspack to calculate certain statistics +-- + +set termout off heading off verify off; +variable lhtr number; +variable bfwt number; +variable tran number; +variable chng number; +variable ucal number; +variable urol number; +variable ucom number; +variable rsiz number; +variable phyr number; +variable phyrd number; +variable phyrdl number; +variable phyrc number; +variable phyw number; +variable prse number; +variable hprs number; +variable recr number; +variable gets number; +variable slr number; +variable rlsr number; +variable rent number; +variable srtm number; +variable srtd number; +variable srtr number; +variable strn number; +variable call number; +variable lhr number; +variable bsp varchar2(512); +variable esp varchar2(512); +variable bbc varchar2(512); +variable ebc varchar2(512); +variable blb varchar2(512); +variable elb varchar2(512); +variable bs varchar2(512); +variable twt number; +variable logc number; +variable prscpu number; +variable prsela number; +variable tcpu number; +variable exe number; +variable bspm number; +variable espm number; +variable bfrm number; +variable efrm number; +variable blog number; +variable elog number; +variable bocur number; +variable eocur number; +variable bpgaalloc number; +variable epgaalloc number; +variable bsgaalloc number; +variable esgaalloc number; +variable bnprocs number; +variable enprocs number; +variable timstat varchar2(20); +variable statlvl varchar2(40); +-- OS Stat +variable bncpu number; +variable encpu number; +variable bpmem number; +variable epmem number; +variable blod number; +variable elod number; +variable itic number; +variable btic number; +variable iotic number; +variable rwtic number; +variable utic number; +variable stic number; +variable vmib number; +variable vmob number; +variable oscpuw number; +-- OS Stat derived +variable ttic number; +variable ttics number; +variable cpubrat number; +variable cpuirat number; +-- Time Model +variable dbtim number; +variable dbcpu number; +variable bgela number; +variable bgcpu number; +variable prstela number; +variable sqleela number; +variable conmela number; +variable bncpu number; +-- RAC variables +variable dmsd number; +variable dmfc number; +variable dmsi number; +variable pmrv number; +variable pmpt number; +variable npmrv number; +variable npmpt number; +variable dbfr number; +variable dpms number; +variable dnpms number; +variable glsg number; +variable glag number; +variable glgt number; +variable gccrrv number; +variable gccrrt number; +variable gccrfl number; +variable gccurv number; +variable gccurt number; +variable gccufl number; +variable gccrsv number; +variable gccrbt number; +variable gccrft number; +variable gccrst number; +variable gccusv number; +variable gccupt number; +variable gccuft number; +variable gccust number; +variable msgsq number; +variable msgsqt number; +variable msgsqk number; +variable msgsqtk number; +variable msgrq number; +variable msgrqt number; + +begin + STATSPACK.STAT_CHANGES + ( :bid, :eid + , :dbid, :inst_num + , :para -- End of IN arguments + , :lhtr, :bfwt + , :tran, :chng + , :ucal, :urol + , :rsiz + , :phyr, :phyrd + , :phyrdl, :phyrc + , :phyw, :ucom + , :prse, :hprs + , :recr, :gets + , :slr + , :rlsr, :rent + , :srtm, :srtd + , :srtr, :strn + , :lhr + , :bbc, :ebc + , :bsp, :esp + , :blb + , :bs, :twt + , :logc, :prscpu + , :tcpu, :exe + , :prsela + , :bspm, :espm + , :bfrm, :efrm + , :blog, :elog + , :bocur, :eocur + , :bpgaalloc, :epgaalloc + , :bsgaalloc, :esgaalloc + , :bnprocs, :enprocs + , :timstat, :statlvl + , :bncpu, :encpu -- OS Stat + , :bpmem, :epmem + , :blod, :elod + , :itic, :btic + , :iotic, :rwtic + , :utic, :stic + , :vmib, :vmob + , :oscpuw + , :dbtim, :dbcpu -- Time Model + , :bgela, :bgcpu + , :prstela,:sqleela + , :conmela + , :dmsd, :dmfc -- begin RAC + , :dmsi + , :pmrv, :pmpt + , :npmrv, :npmpt + , :dbfr + , :dpms, :dnpms + , :glsg, :glag + , :glgt + , :gccrrv, :gccrrt, :gccrfl + , :gccurv, :gccurt, :gccufl + , :gccrsv + , :gccrbt, :gccrft + , :gccrst, :gccusv + , :gccupt, :gccuft + , :gccust + , :msgsq, :msgsqt + , :msgsqk, :msgsqtk + , :msgrq, :msgrqt -- end RAC + ); + :call := :ucal + :recr; + -- total ticks (cs) + :ttic := :btic + :itic; + -- total ticks (s) + :ttics := :ttic/100; + -- Busy to total CPU ratio + :cpubrat := :btic / :ttic; + :cpuirat := :itic / :ttic; +end; +/ + +-- +-- Print stat consistency warnings + +set termout on; +set heading off; + +select 'WARNING: statistics_level setting changed between begin/end snaps: Time Model' + , ' data is INVALID' + from dual + where :statlvl = 'INCONSISTENT_BASIC'; + +select 'WARNING: timed_statistics setting changed between begin/end snaps: TIMINGS' + , ' ARE INVALID' + from dual + where :timstat = 'INCONSISTENT'; + +set heading on; + + +-- +-- Standard formatting + +column chr4n format a4 newline +column ch5 format a5 +column ch5 format a5 +column ch6 format a6 +column ch6n format a6 newline +column ch7 format a7 +column ch7n format a7 newline +column ch9 format a9 +column ch14n format a14 newline +column ch16t format a16 trunc +column ch17 format a17 +column ch17n format a17 newline +column ch18n format a18 newline +column ch19 format a19 +column ch19n format a19 newline +column ch21 format a21 +column ch21n format a21 newline +column ch22 format a22 +column ch22n format a22 newline +column ch23 format a23 +column ch23n format a23 newline +column ch24 format a24 +column ch24n format a24 newline +column ch25 format a25 +column ch25n format a25 newline +column ch20 format a20 +column ch20n format a20 newline +column ch32n format a32 newline +column ch40n format a40 newline +column ch42n format a42 newline +column ch43n format a43 newline +column ch52n format a52 newline just r +column ch53n format a53 newline +column ch59n format a59 newline just r +column ch78n format a78 newline +column ch80n format a80 newline + +column num3 format 999 just left +column num3_2 format 999.99 +column num3_2n format 999.99 newline +column num4c format 9,999 +column num4c_2 format 9,999.99 +column num4c_2n format 9,999.99 newline +column num5c format 99,999 +column num6c format 999,999 +column num6c_2 format 999,999.99 +column num6c_2n format 999,999.99 newline +column num6cn format 999,999 newline +column num7c format 9,999,999 +column num7c_2 format 9,999,999.99 +column num8c format 99,999,999 +column num8cn format 99,999,999 newline +column num8c_2 format 99,999,999.99 +column num8cn format 99,999,999 newline +column num9c format 999,999,999 +column num9cn format 999,999,999 newline +column num10c format 9,999,999,999 + + + + +-- +-- Summary Statistics +-- + +-- +-- Print database, instance, parallel, release, host and snapshot +-- information + + + +prompt STATSPACK report for + +set heading on; + +column inst_num heading "Inst Num" new_value inst_num format 99999; +column inst_name heading "Instance" new_value inst_name format a12; +column db_name heading "DB Name" new_value db_name format a12; +column dbid heading "DB Id" new_value dbid format 9999999999 just center; +column host_name heading "Host" format a16 print; +column para heading "RAC" format a3 print; +column versn heading "Release" format a11 print; +column sutime heading "Started" format a15 print; +column a newline; + +set heading off +select 'Database', ' DB Id ', 'Instance ', 'Inst Num', 'Startup Time ', 'Release ', 'RAC' + , '~~~~~~~~' a, '-----------', '------------', '--------', '---------------', '-----------', '---' + , ' ' a + , :dbid dbid + , :inst_name inst_name + , :inst_num inst_num + , :sutime sutime + , :versn versn + , :para para + from sys.dual; + + +set heading off +select 'Host' ch5 + , 'Name:' ch7, :host_name ch16t + , 'Num CPUs:' ch9, :bncpu num3 + , ' ' + , 'Phys Memory (MB):' ch17, :bpmem/1024/1024 num6c + , '~~~~' chr4n + from sys.dual; +set heading on; + +-- +-- Print snapshot information + +column inst_num noprint +column instart_fmt new_value INSTART_FMT noprint; +column instart new_value instart noprint; +column session_id new_value SESSION noprint; +column ela new_value ELA noprint; +column btim new_value btim heading 'Start Time' format a19 just c; +column etim new_value etim heading 'End Time' format a19 just c; +column xbid format 999999990; +column xeid format 999999990; +column dur heading 'Duration(mins)' format 999,990.00 just r; +column sess_id new_value sess_id noprint; +column serial new_value serial noprint; +column bbgt new_value bbgt noprint; +column ebgt new_value ebgt noprint; +column bdrt new_value bdrt noprint; +column edrt new_value edrt noprint; +column bet new_value bet noprint; +column eet new_value eet noprint; +column bsmt new_value bsmt noprint; +column esmt new_value esmt noprint; +column bvc new_value bvc noprint; +column evc new_value evc noprint; +column bpc new_value bpc noprint; +column epc new_value epc noprint; +column bspr new_value bspr noprint; +column espr new_value espr noprint; +column bslr new_value bslr noprint; +column eslr new_value eslr noprint; +column bsbb new_value bsbb noprint; +column esbb new_value esbb noprint; +column bsrl new_value bsrl noprint; +column esrl new_value esrl noprint; +column bsiw new_value bsiw noprint; +column esiw new_value esiw noprint; +column bcrb new_value bcrb noprint; +column ecrb new_value ecrb noprint; +column bcub new_value bcub noprint; +column ecub new_value ecub noprint; +column blog format 99,999; +column elog format 99,999; +column ocs format 99,999.0; +column comm format a19 trunc; +column nl newline; +column nl11 format a11 newline; +column nl16 format a16 newline; + +set heading off; +select 'Snapshot Snap Id Snap Time Sessions Curs/Sess Comment' nl + , '~~~~~~~~ ---------- ------------------ -------- --------- -------------------' nl + , 'Begin Snap:' nl11 + , b.snap_id xbid + , to_char(b.snap_time, 'dd-Mon-yy hh24:mi:ss') btim + , :blog blog + , :bocur/:blog ocs + , b.ucomment comm + , ' End Snap:' nl11 + , e.snap_id xeid + , to_char(e.snap_time, 'dd-Mon-yy hh24:mi:ss') etim + , :elog elog + , :eocur/:elog ocs + , e.ucomment comm + , ' Elapsed: ' nl16 + , round(((e.snap_time - b.snap_time) * 1440 * 60), 0)/60 dur -- mins + , '(mins)' + , b.instance_number inst_num + , to_char(b.startup_time, 'dd-Mon-yy hh24:mi:ss') instart_fmt + , b.session_id + , round(((e.snap_time - b.snap_time) * 1440 * 60), 0) ela -- secs + , to_char(b.startup_time,'YYYYMMDD HH24:MI:SS') instart + , e.session_id sess_id + , e.serial# serial + , b.buffer_gets_th bbgt + , e.buffer_gets_th ebgt + , b.disk_reads_th bdrt + , e.disk_reads_th edrt + , b.executions_th bet + , e.executions_th eet + , b.sharable_mem_th bsmt + , e.sharable_mem_th esmt + , b.version_count_th bvc + , e.version_count_th evc + , b.parse_calls_th bpc + , e.parse_calls_th epc + , b.seg_phy_reads_th bspr + , e.seg_phy_reads_th espr + , b.seg_log_reads_th bslr + , e.seg_log_reads_th eslr + , b.seg_buff_busy_th bsbb + , e.seg_buff_busy_th esbb + , b.seg_rowlock_w_th bsrl + , e.seg_rowlock_w_th esrl + , b.seg_itl_waits_th bsiw + , e.seg_itl_waits_th esiw + , b.seg_cr_bks_rc_th bcrb + , e.seg_cr_bks_rc_th ecrb + , b.seg_cu_bks_rc_th bcub + , e.seg_cu_bks_rc_th ecub + from stats$snapshot b + , stats$snapshot e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.startup_time = e.startup_time + and b.snap_time < e.snap_time; +set heading on; + +variable btim varchar2 (20); +variable etim varchar2 (20); +variable ela number; +variable instart varchar2 (18); +variable bbgt number; +variable ebgt number; +variable bdrt number; +variable edrt number; +variable bet number; +variable eet number; +variable bsmt number; +variable esmt number; +variable bvc number; +variable evc number; +variable bpc number; +variable epc number; +variable spctim number; +variable pct_sp_oss_cpu_diff number; +begin + :btim := '&btim'; + :etim := '&etim'; + :ela := &ela; + :instart := '&instart'; + :bbgt := &bbgt; + :ebgt := &ebgt; + :bdrt := &bdrt; + :edrt := &edrt; + :bet := &bet; + :eet := &eet; + :bsmt := &bsmt; + :esmt := &esmt; + :bvc := &bvc; + :evc := &evc; + :bpc := &bpc; + :epc := &epc; + -- Statspack total CPU time (secs) - assumes Begin CPU count and End + -- CPU count are identical + :spctim := :ela * :encpu; + -- Statspack to OS Stat CPU percentage + select decode(:ttics, null, 0, 0, 0 + ,100*(abs(:spctim-round(:ttics))/:spctim)) + into :pct_sp_oss_cpu_diff + from sys.dual; +end; +/ + +-- +-- + +set heading off; + +-- +-- Cache Sizes + +column chr50 format a50 newline; +column chr28 format a28 newline; +column val format a10 just r; +column chr16 format a16; + +select 'Cache Sizes Begin End' chr50 + , '~~~~~~~~~~~ ---------- ----------' chr50 + , ' Buffer Cache:' chr28 + , lpad(to_char(round(:bbc/1024/1024),'999,999') || 'M', 10) val + , lpad(decode( :ebc, :bbc, null + , to_char(round(:ebc/&&btomb), '999,999') || 'M'), 10) val + , ' Std Block Size:' chr16 + , lpad(to_char((:bs/1024) ,'999') || 'K',10) val + , ' Shared Pool Size:' chr28 + , lpad(to_char(round(:bsp/1024/1024),'999,999') || 'M',10) val + , lpad(decode( :esp, :bsp, null + , to_char(round(:esp/&&btomb), '999,999') || 'M'), 10) val + , ' Log Buffer:' chr18 + , lpad(to_char(round(:blb/1024) ,'999,999') || 'K', 10) val + from sys.dual; + + +-- +-- Load Profile + +column dscr format a28 newline; +column val format 9,999,999,999,990.99; +column sval format 99,990.99; +column svaln format 99,990.99 newline; +column totcalls new_value totcalls noprint +column pctval format 990.99; +column bpctval format 9990.99; + +select 'Load Profile Per Second Per Transaction' + ,'~~~~~~~~~~~~ --------------- ---------------' + ,' Redo size:' dscr, round(:rsiz/:ela,2) val + , round(:rsiz/:tran,2) val + ,' Logical reads:' dscr, round(:slr/:ela,2) val + , round(:slr/:tran,2) val + ,' Block changes:' dscr, round(:chng/:ela,2) val + , round(:chng/:tran,2) val + ,' Physical reads:' dscr, round(:phyr/:ela,2) val + , round(:phyr/:tran,2) val + ,' Physical writes:' dscr, round(:phyw/:ela,2) val + , round(:phyw/:tran,2) val + ,' User calls:' dscr, round(:ucal/:ela,2) val + , round(:ucal/:tran,2) val + ,' Parses:' dscr, round(:prse/:ela,2) val + , round(:prse/:tran,2) val + ,' Hard parses:' dscr, round(:hprs/:ela,2) val + , round(:hprs/:tran,2) val + ,' Sorts:' dscr, round((:srtm+:srtd)/:ela,2) val + , round((:srtm+:srtd)/:tran,2) val + ,' Logons:' dscr, round(:logc/:ela,2) val + , round(:logc/:tran,2) val + ,' Executes:' dscr, round(:exe/:ela,2) val + , round(:exe/:tran,2) val + ,' Transactions:' dscr, round(:tran/:ela,2) val + , ' ' dscr + ,' % Blocks changed per Read:' dscr, round(100*:chng/:slr,2) pctval + ,' Recursive Call %:' chr20, round(100*:recr/:call,2) bpctval + ,' Rollback per transaction %:' dscr, round(100*:urol/:tran,2) pctval + ,' Rows per Sort:' chr20, decode((:srtm+:srtd) + ,0,to_number(null) + ,round(:srtr/(:srtm+:srtd),2)) bpctval + from sys.dual; + + +-- +-- Instance Efficiency Percentages + +column ldscr format a50 +column chr20 format a20 +column nl format a60 newline + +select 'Instance Efficiency Percentages' ldscr + ,'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' ldscr + ,' Buffer Nowait %:' dscr + , round(100*(1-:bfwt/:gets),2) pctval + ,' Redo NoWait %:' chr20 + , decode(:rent,0,to_number(null), round(100*(1-:rlsr/:rent),2)) pctval + ,' Buffer Hit %:' dscr + , round(100*(1 - :phyrc/:gets),2) pctval + ,' In-memory Sort %:' chr20 + , decode((:srtm+:srtd),0,to_number(null), + round(100*:srtm/(:srtd+:srtm),2)) pctval + ,' Library Hit %:' dscr + , round(100*:lhtr,2) pctval + ,' Soft Parse %:' chr20 + , round(100*(1-:hprs/:prse),2) pctval + ,' Execute to Parse %:' dscr + , round(100*(1-:prse/:exe),2) pctval + ,' Latch Hit %:' chr20 + , round(100*(1-:lhr),2) pctval + ,'Parse CPU to Parse Elapsd %:' dscr + , decode(:prsela, 0, to_number(null) + , round(100*:prscpu/:prsela,2)) pctval + ,' % Non-Parse CPU:' chr20 + , decode(:tcpu, 0, to_number(null) + , round(100*(1-(:prscpu/:tcpu)),2)) pctval + from sys.dual; + +-- Setup vars in case snap < 5 taken +define b_total_cursors = 0 +define e_total_cursors = 0 +define b_total_sql = 0 +define e_total_sql = 0 +define b_total_sql_mem = 0 +define e_total_sql_mem = 0 + +column b_total_cursors new_value b_total_cursors noprint +column e_total_cursors new_value e_total_cursors noprint +column b_total_sql new_value b_total_sql noprint +column e_total_sql new_value e_total_sql noprint +column b_total_sql_mem new_value b_total_sql_mem noprint +column e_total_sql_mem new_value e_total_sql_mem noprint + +select ' Shared Pool Statistics Begin End' nl + , ' ------ ------' + , ' Memory Usage %:' dscr + , 100*(1-:bfrm/:bspm) pctval + , 100*(1-:efrm/:espm) pctval + , ' % SQL with executions>1:' dscr + , 100*(1-b.single_use_sql/b.total_sql) pctval + , 100*(1-e.single_use_sql/e.total_sql) pctval + , ' % Memory for SQL w/exec>1:' dscr + , 100*(1-b.single_use_sql_mem/b.total_sql_mem) pctval + , 100*(1-e.single_use_sql_mem/e.total_sql_mem) pctval + , nvl(b.total_cursors, 0) b_total_cursors + , nvl(e.total_cursors, 0) e_total_cursors + , nvl(b.total_sql, 0) b_total_sql + , nvl(e.total_sql, 0) e_total_sql + , nvl(b.total_sql_mem, 0) b_total_sql_mem + , nvl(e.total_sql_mem, 0) e_total_sql_mem + from stats$sql_statistics b + , stats$sql_statistics e + where b.snap_id = :bid + and e.snap_id = :eid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.dbid = :dbid + and e.dbid = :dbid; + +variable b_total_cursors number; +variable e_total_cursors number; +variable b_total_sql number; +variable e_total_sql number; +variable b_total_sql_mem number; +variable e_total_sql_mem number; +begin + :b_total_cursors := &&b_total_cursors; + :e_total_cursors := &&e_total_cursors; + :b_total_sql := &&b_total_sql; + :e_total_sql := &&e_total_sql; + :b_total_sql_mem := &&b_total_sql_mem; + :e_total_sql_mem := &&e_total_sql_mem; +end; +/ + + +-- +-- + +set heading on; +repfooter center - + '-------------------------------------------------------------'; + +-- +-- Top N Wait Events + +col idle noprint; +col event format a41 heading 'Top &&top_n_events Timed Events|~~~~~~~~~~~~~~~~~~|Event' trunc; +col waits format 999,999,990 heading 'Waits'; +col time format 99,999,990 heading 'Time (s)'; +col pctwtt format 999.9 heading '%Total|Call|Time'; +col avwait format 99990 heading 'Avg|wait|(ms)'; + +select event + , waits + , time + , avwait + , pctwtt + from (select event, waits, time, pctwtt, avwait + from (select e.event event + , e.total_waits - nvl(b.total_waits,0) waits + , (e.time_waited_micro - nvl(b.time_waited_micro,0))/1000000 time + , decode ( (e.total_waits - nvl(b.total_waits, 0)), 0, to_number(NULL) + , ( (e.time_waited_micro - nvl(b.time_waited_micro,0)) / &&ustoms ) + / (e.total_waits - nvl(b.total_waits,0)) + ) avwait + , decode(:twt + :tcpu*10000, 0, 0, + 100 + * (e.time_waited_micro - nvl(b.time_waited_micro,0)) + / (:twt + :tcpu*10000) + ) pctwtt + from stats$system_event b + , stats$system_event e + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.event(+) = e.event + and e.total_waits > nvl(b.total_waits,0) + and e.event not in (select event from stats$idle_event) + union all + select 'CPU time' event + , to_number(null) waits + , :tcpu/100 time + , to_number(null) avwait + , decode(:twt + :tcpu*10000, 0, 0, + 100 + * :tcpu*10000 + / (:twt + :tcpu*10000) + ) pctwait + from dual + where :tcpu > 0 + ) + order by time desc, waits desc + ) + where rownum <= &&top_n_events; + + + +-- +-- + +set space 1 termout on newpage 1; +whenever sqlerror exit; + +set heading off; +repfooter off; + + +-- +-- Performance Summary continued + +set newpage 0; + +ttitle off; + +select 'Host CPU ' || decode(:bncpu, :encpu, '(CPUs: '|| :bncpu || ')', '(Begin CPUs: '|| :bncpu || ' End CPUs: '|| :encpu || ')') ch78n + , '~~~~~~~~ Load Average' ch78n + , ' Begin End User System Idle WIO WCPU' ch78n + , ' ------- ------- ------- ------- ------- ------- --------' ch78n + , ' ' + , round(:blod,2) pctval + , round(:elod,2) pctval + , ' ' + , 100*(:utic / :ttic) pctval + , 100*(:stic / :ttic) pctval + , 100*(:itic / :ttic) pctval + , 100*(:iotic / :ttic) pctval + , 100*(:oscpuw / :ttic) pctval + from sys.dual + where :ttic > 0; + +set newpage 1; + +select 'Note: There is a ' || round(:pct_sp_oss_cpu_diff) || '% discrepancy between the OS Stat total CPU time and' + , ' the total CPU time estimated by Statspack' + , ' OS Stat CPU time: ' || round(:ttics) || '(s) (BUSY_TIME + IDLE_TIME)' + , ' Statspack CPU time: ' || :spctim || '(s) (Elapsed time * num CPUs in end snap)' + from sys.dual + where &pct_cpu_diff_th < :pct_sp_oss_cpu_diff + and :ttics > 0; + +select 'Instance CPU' ch40n + , '~~~~~~~~~~~~' ch40n + , ' % of total CPU for Instance:' ch45n, 100* ((:dbcpu+:bgcpu)/1000000) + / (:ttics) pctval + , ' % of busy CPU for Instance:' ch45n, 100* ((:dbcpu+:bgcpu)/1000000) + / ((:btic)/100) pctval + , ' %DB time waiting for CPU - Resource Mgr:' ch45n, decode(:rwtic, 0, to_number(null), + 100*(round(:rwtic/:dbtim)) ) pctval + from sys.dual + where :dbtim > 0 + and :btic/100 > 0; + +column kpersec format 999,999,999.9 +select 'Virtual Memory Paging' ch78n + , '~~~~~~~~~~~~~~~~~~~~~' ch78n + , ' KB paged out per sec: ' ch43n, (:vmob/1024)/:ela kpersec + , ' KB paged in per sec: ' ch43n, (:vmib/1024)/:ela kpersec + from sys.dual + where :vmob + :vmib > 0; + +col bpctval format 999999999.9 +repfooter center - + '-------------------------------------------------------------'; +col memsz format 9,999,999.9 +select 'Memory Statistics Begin End' ch79n + , '~~~~~~~~~~~~~~~~~ ------------ ------------' ch79n + , ' Host Mem (MB):' ch32n, :bpmem/&&btomb memsz, :epmem/&&btomb memsz + , ' SGA use (MB):' ch32n, :bsgaalloc/&&btomb memsz, :esgaalloc/&&btomb memsz + , ' PGA use (MB):' ch32n, :bpgaalloc/&&btomb memsz, :epgaalloc/&&btomb memsz + , ' % Host Mem used for SGA+PGA:' ch32n, 100*(:bpgaalloc + :bsgaalloc)/:bpmem bpctval + , 100*(:epgaalloc + :esgaalloc)/:epmem bpctval + from sys.dual; + +repfooter off + +-- +-- + +set space 1 termout on newpage 0; +whenever sqlerror exit; +repfooter center - + '-------------------------------------------------------------'; + +-- +-- Time Model Statistics + +set newpage 1; +set heading on; + +ttitle lef 'Time Model System Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Ordered by % of DB time desc, Statistic name' - + skip 2; + +column statnam format a35 trunc heading 'Statistic' +column tdifs format 9,999,999,999,990.9 heading 'Time (s)' +column pctdb format 99999.9 heading '% of DB time' +column order_col noprint + +select statnam + , tdif/&ustos tdifs + , decode(order_col, 0, 100*tdif/&DBtime + , to_number(null) + ) pctdb + , order_col + from (select sn.stat_name statnam + , (e.value - b.value) tdif + , decode( sn.stat_name + , 'DB time', 1 + , 'background cpu time', 2 + , 'background elapsed time', 2 + , 0 + ) order_col + from stats$sys_time_model e + , stats$sys_time_model b + , stats$time_model_statname sn + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.stat_id = e.stat_id + and sn.stat_id = e.stat_id + and e.value - b.value > 0 + ) + order by order_col, decode(pctdb, null, tdifs, pctdb) desc; + + + +set heading off; +set newpage 0; + +-- +-- Beginning of RAC specific Ratios + + +column hd1 format a54 newline; +column hd2 format a31 newline; +column avg format 9990.0; +column nl format a68 newline; +column val format 9,999,999,999,990.99; +column vali format 9990; + +ttitle lef 'RAC Statistics '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 2; + +select ' ' hd2 + , 'Begin' + , ' End' + , ' ' hd2 + , '-----' + , '-----' + , ' Number of Instances:' hd2 + , ( select count(b.thread#) + from stats$thread b + where b.snap_id = :bid + and b.dbid = :dbid + and b.instance_number = :inst_num + and b.status = 'OPEN' ) vali + , ( select count(e.thread#) + from stats$thread e + where e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.status = 'OPEN' ) vali + , ' ' nl + , ' ' nl + , 'Global Cache Load Profile' nl + , '~~~~~~~~~~~~~~~~~~~~~~~~~ Per Second Per Transaction' + , ' --------------- ---------------' + , ' Global Cache blocks received:' hd2, round((:gccurv+:gccrrv)/:ela,2) val + , round((:gccurv+:gccrrv)/:tran,2) val + , ' Global Cache blocks served:' hd2, round((:gccusv+:gccrsv)/:ela,2) val + , round((:gccusv+:gccrsv)/:tran,2) val + , ' GCS/GES messages received:' hd2, round((:pmrv+:npmrv)/:ela,2) val + , round((:pmrv+:npmrv)/:tran,2) val + , ' GCS/GES messages sent:' hd2, round((:dpms+:dnpms)/:ela,2) val + , round((:dpms+:dnpms)/:tran,2) val + , ' DBWR Fusion writes:' hd2, round(:dbfr/:ela,2) val + , round(:dbfr/:tran,2) val + , 'Estd Interconnect traffic (KB):' hd2, round( ( ((:gccrrv+:gccurv +:gccrsv+:gccusv) * :bs) + + ((:dpms+:dnpms+:pmrv+:npmrv) * 200) + )/&&btokb/:ela,2 + ) val + , ' ' nl + , ' ' nl + , 'Global Cache Efficiency Percentages (Target local+remote 100%)' nl + , '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' nl + , 'Buffer access - local cache %:' hd2 + , round(100*(1- (:phyrc +:gccrrv+:gccurv)/:gets), 2) pctval + , 'Buffer access - remote cache %:' hd2 + , round(100* (:gccurv+:gccrrv)/:gets, 2) pctval + , 'Buffer access - disk %:' hd2 + , round(100 * :phyrc/:gets, 2) pctval + , ' ' nl + , ' ' nl + , 'Global Cache and Enqueue Services - Workload Characteristics' nl + , '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' nl + , ' Avg global enqueue get time (ms):' hd1 + , decode(:glag+:glsg, 0, to_number(NULL) + , (:glgt / (:glag+:glsg)) * 10) avg + , ' ' nl + , ' Avg global cache cr block receive time (ms):' hd1 + , decode(:gccrrv, 0, to_number(NULL) + , 10 * :gccrrt / :gccrrv) avg + , ' Avg global cache current block receive time (ms):' hd1 + , decode(:gccurv, 0, to_number(NULL) + , 10 * :gccurt / :gccurv) avg + , ' ' nl + , ' Avg global cache cr block build time (ms):' hd1 + , decode(:gccrsv, 0, to_number(NULL) + , 10 * :gccrbt / :gccrsv) avg + , ' Avg global cache cr block send time (ms):' hd1 + , decode(:gccrsv, 0, to_number(NULL) + , 10 * :gccrst / :gccrsv) avg + , ' Avg global cache cr block flush time (ms):' hd1 + , decode(:gccrfl, 0, to_number(NULL) + , 10 * :gccrft / :gccrfl) avg + , ' Global cache log flushes for cr blocks served %:' hd1 + , 100*(decode(:gccrsv, 0, to_number(NULL), :gccrfl/:gccrsv)) avg + , ' ' nl + , ' Avg global cache current block pin time (ms):' hd1 + , decode(:gccusv, 0, to_number(NULL) + , 10 * :gccupt / :gccusv) avg + , ' Avg global cache current block send time (ms):' hd1 + , decode(:gccusv, 0, to_number(NULL) + , 10 * :gccust / :gccusv) avg + , ' Avg global cache current block flush time (ms):' hd1 + , decode(:gccufl, 0, to_number(NULL) + , 10 * :gccuft / :gccufl) avg + , ' Global cache log flushes for current blocks served %:' hd1 + , 100*(decode(:gccusv, 0, to_number(NULL), :gccufl/:gccusv)) avg + , ' ' nl + , ' ' nl + , 'Global Cache and Enqueue Services - Messaging Statistics' nl + , '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' nl + , ' Avg message sent queue time (ms):' hd1 + , decode(:msgsq, 0, to_number(NULL), :msgsqt / :msgsq) avg + , ' Avg message sent queue time on ksxp (ms):' hd1 + , decode(:msgsqk, 0, to_number(NULL), :msgsqtk / :msgsqk) avg + , ' Avg message received queue time (ms):' hd1 + , decode(:msgrq, 0, to_number(NULL), :msgrqt / :msgrq) avg + , ' Avg GCS message process time (ms):' hd1 + , decode(:pmrv, 0, to_number(NULL), :pmpt / :pmrv) avg + , ' Avg GES message process time (ms):' hd1 + , decode(:npmrv, 0, to_number(NULL), :npmpt / :npmrv) avg + , ' ' nl + , ' % of direct sent messages:' hd1 + , decode((:dmsd + :dmsi + :dmfc), 0 , to_number(NULL) + , (100 * :dmsd) / (:dmsd + :dmsi + :dmfc)) pctval + , ' % of indirect sent messages:' hd1 + , decode((:dmsd + :dmsi + :dmfc), 0, to_number(NULL) + , (100 * :dmsi) / (:dmsd + :dmsi + :dmfc)) pctval + , ' % of flow controlled messages:' hd1 + , decode((:dmsd+:dmsi+:dmfc), 0, to_number(NULL) + , 100 * :dmfc / (:dmsd+:dmsi+:dmfc)) pctval + from sys.dual + where :para = 'YES'; + +-- +-- End of RAC specific Ratios + +set heading on newpage 0; + + +-- +-- System Events + +ttitle lef 'Wait Events '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> s - second, cs - centisecond, ms - millisecond, us - microsecond' - + skip 1 - + '-> %Timeouts: value of 0 indicates value was < .5%. Value of null is truly 0' - + skip 1 - + '-> Only events with Total Wait Time (s) >= &&total_event_time_s_th are shown' - + skip 1 - + lef '-> ordered by Total Wait Time desc, Waits desc (idle events last)' - + skip 2; + +col idle noprint; +col event format a33 heading 'Event' trunc; +col waits format 999,999,990 heading 'Waits'; +col timeouts format 9,999,990 heading 'Timeouts'; +col pctto format 9999 heading '%Time| -outs'; +col time format 9,999,990 heading 'Total Wait|Time (s)'; +col avwt_fmt format &&avwt_fmt heading 'Avg|wait|(ms)'; +col txwaits format 9,990.0 heading 'Waits|/txn'; + +select e.event + , e.total_waits - nvl(b.total_waits,0) waits + , decode( (e.total_waits - nvl(b.total_waits,0)), 0, to_number(null) + , 100*(e.total_timeouts - nvl(b.total_timeouts,0)) + /(e.total_waits - nvl(b.total_waits,0))) pctto + , (e.time_waited_micro - nvl(b.time_waited_micro,0))/1000000 time + , decode ((e.total_waits - nvl(b.total_waits, 0)), + 0, to_number(NULL), + ((e.time_waited_micro - nvl(b.time_waited_micro,0))/1000) + / (e.total_waits - nvl(b.total_waits,0)) ) avwt_fmt + , (e.total_waits - nvl(b.total_waits,0))/:tran txwaits + , decode(i.event, null, 0, 99) idle + from stats$system_event b + , stats$system_event e + , stats$idle_event i + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.event(+) = e.event + and e.total_waits > nvl(b.total_waits,0) + and ( :timstat in ('FALSE', 'INCONSISTENT') -- No valid timings - use # waits to filter + or ( :timstat = 'TRUE' -- Valid timings - only show if time > threshold ms + and ((e.time_waited_micro - nvl(b.time_waited_micro,0))/&&ustos) >= &&total_event_time_s_th + ) + ) + and e.event not in ('smon timer','pmon timer','dispatcher timer','dispatcher listen timer','rdbms ipc message') + and i.event(+) = e.event + order by idle, time desc, waits desc; + + + +-- +-- Background process wait events + +ttitle lef 'Background Wait Events '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> %Timeouts: value of 0 indicates value was < .5%. Value of null is truly 0' - + skip 1 - + '-> Only events with Total Wait Time (s) >= &&total_event_time_s_th are shown' - + skip 1 - + lef '-> ordered by Total Wait Time desc, Waits desc (idle events last)' - + skip 2; + +break on idle; +select e.event + , e.total_waits - nvl(b.total_waits,0) waits + , decode( (e.total_waits - nvl(b.total_waits,0)), 0, to_number(null) + , 100*(e.total_timeouts - nvl(b.total_timeouts,0)) + /(e.total_waits - nvl(b.total_waits,0))) pctto + , (e.time_waited_micro - nvl(b.time_waited_micro,0))/1000000 time + , decode ((e.total_waits - nvl(b.total_waits, 0)), + 0, to_number(NULL), + ((e.time_waited_micro - nvl(b.time_waited_micro,0))/1000) + / (e.total_waits - nvl(b.total_waits,0)) ) avwt_fmt + , (e.total_waits - nvl(b.total_waits,0))/:tran txwaits + , decode(i.event, null, 0, 99) idle + from stats$bg_event_summary b + , stats$bg_event_summary e + , stats$idle_event i + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.event(+) = e.event + and e.total_waits > nvl(b.total_waits,0) + and ( :timstat in ('FALSE', 'INCONSISTENT') -- No valid timings - use # waits to filter + or ( :timstat = 'TRUE' -- Valid timings - only show if time > 1ms + and ((e.time_waited_micro - nvl(b.time_waited_micro,0))/&&ustos) >= &&total_event_time_s_th + ) + ) + and i.event(+) = e.event + order by idle, time desc, waits desc; +clear break; + + + +-- +-- Event Histogram + +ttitle lef 'Wait Event Histogram '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Total Waits - units: K is 1000, M is 1000000, G is 1000000000' - + skip 1 - + lef '-> % of Waits - column heading: <=1s is truly <1024ms, >1s is truly >=1024ms' - + skip 1 - + lef '-> % of Waits - value: .0 indicates value was <.05%, null is truly 0' - + skip 1 - + lef '-> Ordered by Event (idle events last)' - + skip 2 - + ' Total ----------------- % of Waits ------------------'; + +col idle noprint; +col event format a26 heading 'Event' +col total_waits format a5 heading 'Waits' +col to1 format a5 heading ' <1ms' +col to2 format a5 heading ' <2ms' +col to4 format a5 heading ' <4ms' +col to8 format a5 heading ' <8ms' +col to16 format a5 heading '<16ms' +col to32 format a5 heading '<32ms' +col to1024 format a5 heading ' <=1s' +col over format a5 heading ' >1s' + +with event_histogram as ( + select /*+ inline ordered index(h) index(se) */ + h.snap_id + , se.event + , sum(h.wait_count) total_waits + , sum(case when (h.wait_time_milli = 1) + then (nvl(h.wait_count,0)) else 0 end) to1 + , sum(case when (h.wait_time_milli = 2) + then (nvl(h.wait_count,0)) else 0 end) to2 + , sum(case when (h.wait_time_milli = 4) + then (nvl(h.wait_count,0)) else 0 end) to4 + , sum(case when (h.wait_time_milli = 8) + then (nvl(h.wait_count,0)) else 0 end) to8 + , sum(case when (h.wait_time_milli = 16) + then (nvl(h.wait_count,0)) else 0 end) to16 + , sum(case when (h.wait_time_milli = 32) + then (nvl(h.wait_count,0)) else 0 end) to32 + , sum(case when (h.wait_time_milli between 64 and 1024) + then (nvl(h.wait_count,0)) else 0 end) to1024 + , sum(case when (1024 < h.wait_time_milli) + then (nvl(h.wait_count,0)) else 0 end) over + , decode(i.event, null, 0, 99) idle + from stats$event_histogram h + , stats$system_event se + , stats$idle_event i + where se.event_id = h.event_id + and se.snap_id = h.snap_id + and i.event(+) = se.event + and se.instance_number = :inst_num + and se.dbid = :dbid + and h.instance_number = :inst_num + and h.dbid = :dbid + and '&event_histogram' = 'Y' + group by h.snap_id + , se.event + , decode(i.event, null, 0, 99) + ) +select e.event + , lpad(case + when e.total_waits - nvl(b.total_waits,0) <= 9999 + then to_char(e.total_waits - nvl(b.total_waits,0))||' ' + when trunc((e.total_waits - nvl(b.total_waits,0))/1000) <= 9999 + then to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000))||'K' + when trunc((e.total_waits - nvl(b.total_waits,0))/1000000) <= 9999 + then to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000000))||'M' + when trunc((e.total_waits - nvl(b.total_waits,0))/1000000000) <= 9999 + then to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000000000))||'G' + when trunc((e.total_waits - nvl(b.total_waits,0))/1000000000000) <= 9999 + then to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000000000000))||'T' + else substr(to_char(trunc((e.total_waits - nvl(b.total_waits,0))/1000000000000000))||'P', 1, 5) end + , 5, ' ') total_waits + , substr(to_char(decode(e.to1-nvl(b.to1,0),0,to_number(NULL),(e.to1-nvl(b.to1,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to1 + , substr(to_char(decode(e.to2-nvl(b.to2,0),0,to_number(NULL),(e.to2-nvl(b.to2,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to2 + , substr(to_char(decode(e.to4-nvl(b.to4,0),0,to_number(NULL),(e.to4-nvl(b.to4,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to4 + , substr(to_char(decode(e.to8-nvl(b.to8,0),0,to_number(NULL),(e.to8-nvl(b.to8,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to8 + , substr(to_char(decode(e.to16-nvl(b.to16,0),0,to_number(NULL),(e.to16-nvl(b.to16,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to16 + , substr(to_char(decode(e.to32-nvl(b.to32,0),0,to_number(NULL),(e.to32-nvl(b.to32,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to32 + , substr(to_char(decode(e.to1024-nvl(b.to1024,0),0,to_number(NULL),(e.to1024-nvl(b.to1024,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) to1024 + , substr(to_char(decode(e.over-nvl(b.over,0),0,to_number(NULL),(e.over-nvl(b.over,0))*100/(e.total_waits-nvl(b.total_waits,0))),'999.9MI'),1,5) over + from ( select * + from event_histogram + where snap_id = :bid) b + , ( select * + from event_histogram + where snap_id = :eid) e + where b.event(+) = e.event + and (e.total_waits - nvl(b.total_waits,0)) > 0 + order by e.idle, e.event; + + +-- +-- SQL Reporting + + +-- Get the captured vs total workloads ratios + +set newpage none; +set heading off; +set termout off; +ttitle off; +repfooter off; + +col bufcappct new_value bufcappct noprint +col getsa new_value getsa noprint +col phycappct new_value phycappct noprint +col phyra new_value phyra noprint +col execappct new_value execappct noprint +col exea new_value exea noprint +col prscappct new_value prscappct noprint +col prsea new_value prsea noprint +col cpucappct new_value cpucappct noprint +col elacappct new_value elacappct noprint +col dbcpua new_value dbcpua noprint +col dbcpu_s new_value dbcpu_s noprint +col dbtima new_value dbtima noprint +col dbtim_s new_value dbtim_s noprint + +select decode( :slr, 0, to_number(null) + , 100*sum( + case e.command_type + when 47 then 0 + else e.buffer_gets - nvl(b.buffer_gets,0) + end)/:slr + ) bufcappct + , :slr getsa + , decode( :phyr, 0, to_number(null) + , 100*sum( + case e.command_type + when 47 then 0 + else e.disk_reads - nvl(b.disk_reads,0) + end)/:phyr + ) phycappct + , :phyr phyra + , decode( :exe, 0, to_number(null) + , 100*sum(e.executions - nvl(b.executions,0))/:exe + ) execappct + , :exe exea + , decode( :prse, 0, to_number(null) + , 100*sum(e.parse_calls - nvl(b.parse_calls,0))/:prse + ) prscappct + , :prse prsea + , decode( :dbcpu, 0, to_number(null) + , 100*sum(e.cpu_time - nvl(b.cpu_time,0))/:dbcpu + ) cpucappct + , decode(:dbcpu, 0, to_number(null), :dbcpu) dbcpua + , decode(:dbcpu, 0, to_number(null), :dbcpu/1000000) dbcpu_s + , decode( :dbtim, 0, to_number(null) + , 100*sum(e.elapsed_time - nvl(b.elapsed_time,0))/:dbtim + ) elacappct + , decode(:dbtim, 0, to_number(null), :dbtim) dbtima + , decode(:dbtim, 0, to_number(null), :dbtim/1000000) dbtim_s + from stats$sql_summary e + , stats$sql_summary b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and e.executions > nvl(b.executions,0) + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset; + + +set newpage 0; +set termout on; +set heading on; +repfooter center - + '-------------------------------------------------------------'; + +col Execs format 999,999,990 heading 'Executes'; +col GPX format 999,999,990.0 heading 'Gets|per Exec' just c; +col RPX format 999,999,990.0 heading 'Reads|per Exec' just c; +col RWPX format 9,999,990.0 heading 'Rows|per Exec' just c; +col Gets format 9,999,999,990 heading 'Buffer Gets'; +col Reads format 9,999,999,990 heading 'Physical|Reads'; +col Rw format 9,999,999,990 heading 'Rows | Processed'; +col hashval format 99999999999 heading 'Hash Value'; +col sql_text format a500 heading 'SQL statement' wrap; +col rel_pct format 999.9 heading '% of|Total'; +col shm format 999,999,999 heading 'Sharable |Memory (bytes)'; +col vcount format 9,999 heading 'Version|Count'; + + +-- +-- SQL statements ordered by CPU + +ttitle lef 'SQL ordered by CPU '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> Resources reported for PL/SQL code includes the ' - + 'resources used by all SQL' - + skip 1 - + ' statements called by the code.' - + skip 1 - + '-> Total DB CPU (s): ' format 99,999,999,999 dbcpu_s - + skip 1 - + '-> Captured SQL accounts for ' format 990.9 cpucappct '% of Total DB CPU' - + skip 1 - + '-> SQL reported below exceeded &top_pct_sql.% of Total DB CPU' - + skip 2; + +-- Bug 1313544 requires this rather bizarre SQL statement + +set underline off; +col aa format a80 heading - +' CPU CPU per Elapsd Old| Time (s) Executions Exec (s) %Total Time (s) Buffer Gets Hash Value |---------- ------------ ---------- ------ ---------- --------------- ----------' + +column hv noprint; +break on hv skip 1; + +select aa, hv + from ( select /*+ ordered use_nl (b st) */ + decode( st.piece + , 0 + , lpad( nvl(to_char( (e.cpu_time - nvl(b.cpu_time,0))/1000000 + , '999990.00') + , ' '),10) || ' ' || + lpad(to_char((e.executions - nvl(b.executions,0)) + ,'999,999,999') + ,12)||' '|| + lpad((to_char(decode(e.executions - nvl(b.executions,0) + ,0, to_number(null) + , ( (e.cpu_time - nvl(b.cpu_time,0)) + /(e.executions - nvl(b.executions,0)) + ) / 1000000 + ) + , '999990.00')) + , 10) || ' ' || + lpad( decode( :dbcpu, 0 , ' ' + , null, ' ' + , to_char((100*(e.cpu_time - nvl(b.cpu_time,0))/:dbcpu), '990.0') + ) + , 6) ||' '|| + lpad( nvl(to_char( (e.elapsed_time - nvl(b.elapsed_time,0))/1000000 + , '999990.00') + , ' '),10) || ' ' || + lpad(to_char((e.buffer_gets - nvl(b.buffer_gets,0)) + ,'99,999,999,999') + ,15)||' '|| + lpad(e.old_hash_value,10)||' '|| + decode(e.module,null,st.sql_text + ,rpad('Module: '||e.module,80)||st.sql_text) + , st.sql_text) aa + , e.old_hash_value hv + from stats$sql_summary e + , stats$sql_summary b + , stats$sqltext st + where b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset + and e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.old_hash_value = st.old_hash_value + and e.text_subset = st.text_subset + and st.piece <= &&num_rows_per_hash + and e.executions > nvl(b.executions,0) + and decode(:dbcpu, 0, 2, null, 2, 100*(e.cpu_time - nvl(b.cpu_time,0))/:dbcpu) + > decode(:dbcpu, 0, 1, null, 2, &&top_pct_sql) + order by (e.cpu_time - nvl(b.cpu_time,0)) desc, e.old_hash_value, st.piece + ) +where rownum < &&top_n_sql; + + + +-- SQL statements ordered by Elapsed + +ttitle lef 'SQL ordered by Elapsed '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> Resources reported for PL/SQL code includes the ' - + 'resources used by all SQL' - + skip 1 - + ' statements called by the code.' - + skip 1 - + '-> Total DB Time (s): ' format 99,999,999,999 dbtim_s - + skip 1 - + '-> Captured SQL accounts for ' format 990.9 elacappct '% of Total DB Time' - + skip 1 - + '-> SQL reported below exceeded &top_pct_sql.% of Total DB Time' - + skip 2; + +-- Bug 1313544 requires this rather bizarre SQL statement + +set underline off; +col aa format a80 heading - +' Elapsed Elap per CPU Old| Time (s) Executions Exec (s) %Total Time (s) Physical Reads Hash Value |---------- ------------ ---------- ------ ---------- --------------- ----------' + +column hv noprint; +break on hv skip 1; + +select aa, hv + from ( select /*+ ordered use_nl (b st) */ + decode( st.piece + , 0 + , lpad( nvl(to_char( (e.elapsed_time - nvl(b.elapsed_time,0))/1000000 + , '999990.00') + , ' '),10) || ' ' || + lpad(to_char((e.executions - nvl(b.executions,0)) + ,'999,999,999') + ,12)||' '|| + lpad((to_char(decode(e.executions - nvl(b.executions,0) + ,0, to_number(null) + , ( (e.elapsed_time - nvl(b.elapsed_time,0)) + /(e.executions - nvl(b.executions,0)) + ) / 1000000 + ) + , '999990.00')) + , 10) || ' ' || + lpad( decode( :dbtim, 0, ' ' + , to_char((100*(e.elapsed_time - nvl(b.elapsed_time,0))/:dbtim), '990.0') + ) + , 6) ||' '|| + lpad( nvl(to_char( (e.cpu_time - nvl(b.cpu_time,0))/1000000 + , '999990.00') + , ' '),10) || ' ' || + lpad(to_char((e.disk_reads - nvl(b.disk_reads,0)) + ,'99,999,999,999') + ,15)||' '|| + lpad(e.old_hash_value,10)||' '|| + decode(e.module,null,st.sql_text + ,rpad('Module: '||e.module,80)||st.sql_text) + , st.sql_text) aa + , e.old_hash_value hv + from stats$sql_summary e + , stats$sql_summary b + , stats$sqltext st + where b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset + and e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.old_hash_value = st.old_hash_value + and e.text_subset = st.text_subset + and st.piece <= &&num_rows_per_hash + and e.executions > nvl(b.executions,0) + and decode(:dbtim, 0, 2, 100*(e.elapsed_time - nvl(b.elapsed_time,0))/:dbtim) + > decode(:dbtim, 0, 1, &&top_pct_sql) + order by (e.elapsed_time - nvl(b.elapsed_time,0)) desc, e.old_hash_value, st.piece + ) +where rownum < &&top_n_sql; + + +-- +-- SQL statements ordered by Gets + +ttitle lef 'SQL ordered by Gets '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> Resources reported for PL/SQL code includes the ' - + 'resources used by all SQL' - + skip 1 - + ' statements called by the code.' - + skip 1 - + '-> End Buffer Gets Threshold: ' ebgt ' Total Buffer Gets: ' format 99,999,999,999 getsa - + skip 1 - + '-> Captured SQL accounts for ' format 990.9 bufcappct '% of Total Buffer Gets' - + skip 1 - + '-> SQL reported below exceeded &top_pct_sql.% of Total Buffer Gets' - + skip 2; + +-- Bug 1313544 requires this rather bizarre SQL statement + +set underline off; +col aa format a80 heading - +' CPU Elapsd Old| Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value |--------------- ------------ -------------- ------ -------- --------- ----------' + +column hv noprint; +break on hv skip 1; + +select aa, hv + from ( select /*+ ordered use_nl (b st) */ + decode( st.piece + , 0 + , lpad(to_char((e.buffer_gets - nvl(b.buffer_gets,0)) + ,'99,999,999,999') + ,15)||' '|| + lpad(to_char((e.executions - nvl(b.executions,0)) + ,'999,999,999') + ,12)||' '|| + lpad((to_char(decode(e.executions - nvl(b.executions,0) + ,0, to_number(null) + ,(e.buffer_gets - nvl(b.buffer_gets,0)) / + (e.executions - nvl(b.executions,0))) + ,'999,999,990.0')) + ,14) ||' '|| + lpad((to_char(100*(e.buffer_gets - nvl(b.buffer_gets,0))/:slr + ,'990.0')) + , 6) ||' '|| + lpad( nvl(to_char( (e.cpu_time - nvl(b.cpu_time,0))/1000000 + , '9990.00') + , ' '),8) || ' ' || + lpad( nvl(to_char( (e.elapsed_time - nvl(b.elapsed_time,0))/1000000 + , '99990.00') + , ' '),9) || ' ' || + lpad(e.old_hash_value,10)||''|| + decode(e.module,null,st.sql_text + ,rpad('Module: '||e.module,80)||st.sql_text) + , st.sql_text) aa + , e.old_hash_value hv + from stats$sql_summary e + , stats$sql_summary b + , stats$sqltext st + where b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset + and e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.old_hash_value = st.old_hash_value + and e.text_subset = st.text_subset + and st.piece <= &&num_rows_per_hash + and e.executions > nvl(b.executions,0) + and 100*(e.buffer_gets - nvl(b.buffer_gets,0))/:slr > &&top_pct_sql + order by (e.buffer_gets - nvl(b.buffer_gets,0)) desc, e.old_hash_value, st.piece + ) +where rownum < &&top_n_sql; + + +-- +-- SQL statements ordered by physical reads + +ttitle lef 'SQL ordered by Reads '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Disk Reads Threshold: ' edrt ' Total Disk Reads: ' format 99,999,999,999 phyra - + skip 1 - + '-> Captured SQL accounts for ' format 990.9 phycappct '% of Total Disk Reads' - + skip 1 - + '-> SQL reported below exceeded &top_pct_sql.% of Total Disk Reads' - + skip 2; + +col aa format a80 heading - +' CPU Elapsd Old| Physical Reads Executions Reads per Exec %Total Time (s) Time (s) Hash Value |--------------- ------------ -------------- ------ -------- --------- ----------' + +select aa, hv + from ( select /*+ ordered use_nl (b st) */ + decode( st.piece + , 0 + , lpad(to_char((e.disk_reads - nvl(b.disk_reads,0)) + ,'99,999,999,999') + ,15)||' '|| + lpad(to_char((e.executions - nvl(b.executions,0)) + ,'999,999,999') + ,12)||' '|| + lpad((to_char(decode(e.executions - nvl(b.executions,0) + ,0, to_number(null) + ,(e.disk_reads - nvl(b.disk_reads,0)) / + (e.executions - nvl(b.executions,0))) + ,'999,999,990.0')) + ,14) ||' '|| + lpad((to_char(100*(e.disk_reads - nvl(b.disk_reads,0))/:phyr + ,'990.0')) + , 6) ||' '|| + lpad( nvl(to_char( (e.cpu_time - nvl(b.cpu_time,0))/1000000 + , '9990.00') + , ' '),8) || ' ' || + lpad( nvl(to_char( (e.elapsed_time - nvl(b.elapsed_time,0))/1000000 + , '99990.00') + , ' '),9) || ' ' || + lpad(e.old_hash_value,10)||''|| + decode(e.module,null,st.sql_text + ,rpad('Module: '||e.module,80)||st.sql_text) + , st.sql_text) aa + , e.old_hash_value hv + from stats$sql_summary e + , stats$sql_summary b + , stats$sqltext st + where b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset + and e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.old_hash_value = st.old_hash_value + and e.text_subset = st.text_subset + and st.piece <= &&num_rows_per_hash + and e.executions > nvl(b.executions,0) + and :phyr > 0 + and 100*(e.disk_reads - nvl(b.disk_reads,0))/:phyr > &&top_pct_sql + order by (e.disk_reads - nvl(b.disk_reads,0)) desc, e.old_hash_value, st.piece + ) +where rownum < &&top_n_sql; + + + +-- +-- SQL statements ordered by executions + +ttitle lef 'SQL ordered by Executions '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Executions Threshold: ' eet ' Total Executions: ' format 99,999,999,999 exea- + skip 1 - + '-> Captured SQL accounts for ' format 990.9 execappct '% of Total Executions' - + skip 1 - + '-> SQL reported below exceeded &top_pct_sql.% of Total Executions' - + skip 2; + +col aa format a80 heading - +' CPU per Elap per Old| Executions Rows Processed Rows per Exec Exec (s) Exec (s) Hash Value |------------ --------------- ---------------- ----------- ---------- ----------' + +select aa, hv + from ( select /*+ ordered use_nl (b st) */ + decode( st.piece + , 0 + , lpad(to_char((e.executions - nvl(b.executions,0)) + ,'999,999,999') + ,12)||' '|| + lpad(to_char((nvl(e.rows_processed,0) - nvl(b.rows_processed,0)) + ,'99,999,999,999') + ,15)||' '|| + lpad((to_char(decode(nvl(e.rows_processed,0) - nvl(b.rows_processed,0) + ,0, 0 + ,(e.rows_processed - nvl(b.rows_processed,0)) / + (e.executions - nvl(b.executions,0))) + ,'9,999,999,990.0')) + ,16) ||' '|| + lpad(nvl(to_char( (e.cpu_time - nvl(b.cpu_time,0)) + /(e.executions - nvl(b.executions,0)) + /1000000 + , '999990.00'),' '),10) || ' ' || + lpad(nvl(to_char( (e.elapsed_time - nvl(b.elapsed_time,0)) + /(e.executions - nvl(b.executions,0)) + /1000000 + , '9999990.00'),' '),11) || ' ' || + lpad(e.old_hash_value,10)||' '|| + decode(e.module,null,st.sql_text + ,rpad('Module: '||e.module,80)||st.sql_text) + , st.sql_text) aa + , e.old_hash_value hv + from stats$sql_summary e + , stats$sql_summary b + , stats$sqltext st + where b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset + and e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.old_hash_value = st.old_hash_value + and e.text_subset = st.text_subset + and st.piece <= &&num_rows_per_hash + and e.executions > nvl(b.executions,0) + and 100*(e.executions - nvl(b.executions,0))/:exe > &&top_pct_sql + order by (e.executions - nvl(b.executions,0)) desc, e.old_hash_value, st.piece + ) +where rownum < &&top_n_sql; + + + +-- +-- SQL statements ordered by Parse Calls + +ttitle lef 'SQL ordered by Parse Calls '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Parse Calls Threshold: ' epc ' Total Parse Calls: ' format 99,999,999,999 prsea - + skip 1 - + '-> Captured SQL accounts for ' format 990.9 prscappct '% of Total Parse Calls' - + skip 1 - + '-> SQL reported below exceeded &top_pct_sql.% of Total Parse Calls' - + skip 2; + + +col aa format a80 heading - +' % Total Old| Parse Calls Executions Parses Hash Value |------------ ------------ -------- ----------' +column hv noprint; +break on hv skip 1; + +select aa, hv + from ( select /*+ ordered use_nl (b st) */ + decode( st.piece + , 0 + , lpad(to_char((e.parse_calls - nvl(b.parse_calls,0)) + ,'999,999,999') + ,12)||' '|| + lpad(to_char((e.executions - nvl(b.executions,0)) + ,'999,999,999') + ,12)||' '|| + lpad(to_char(100*(e.parse_calls - nvl(b.parse_calls,0))/:prse + ,'990.09') + ,8)||' '|| + lpad(e.old_hash_value,10)||' '|| + rpad(' ',34)|| + decode(e.module,null,st.sql_text + ,rpad('Module: '||e.module,80)||st.sql_text) + , st.sql_text) aa + , e.old_hash_value hv + from stats$sql_summary e + , stats$sql_summary b + , stats$sqltext st + where b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset + and e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.old_hash_value = st.old_hash_value + and e.text_subset = st.text_subset + and st.piece <= &&num_rows_per_hash + and 100*(e.parse_calls - nvl(b.parse_calls,0))/:prse > &&top_pct_sql + order by (e.parse_calls - nvl(b.parse_calls,0)) desc, e.old_hash_value, st.piece + ) +where rownum < &&top_n_sql; + + + +-- +-- SQL statements ordered by Sharable Memory + +ttitle lef 'SQL ordered by Sharable Memory '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Sharable Memory Threshold: ' format 99999999 esmt - + skip 2; + +col aa format a80 heading - +'Sharable Mem (b) Executions % Total Old Hash Value |---------------- ------------ ------- --------------' + +select aa, hv + from ( select /*+ ordered use_nl (b st) */ + decode( st.piece + , 0 + , lpad(to_char( e.sharable_mem + ,'999,999,999,999') + ,16)||' '|| + lpad(to_char((e.executions - nvl(b.executions,0)) + ,'999,999,999') + ,12)||' '|| + lpad((to_char(100*e.sharable_mem/:espm + ,'990.0')) + , 7) ||' '|| + lpad(e.old_hash_value,12)||' '|| + rpad(' ',29)|| + decode(e.module,null,st.sql_text + ,rpad('Module: '||e.module,80)||st.sql_text) + , st.sql_text) aa + , e.old_hash_value hv + from stats$sql_summary e + , stats$sql_summary b + , stats$sqltext st + where b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset + and e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.old_hash_value = st.old_hash_value + and e.text_subset = st.text_subset + and st.piece <= &&num_rows_per_hash + and e.executions > nvl(b.executions,0) + and e.sharable_mem > :esmt + order by e.sharable_mem desc, e.old_hash_value, st.piece + ) +where rownum < &&top_n_sql; + + + +-- +-- SQL statements ordered by Version Count + +ttitle lef 'SQL ordered by Version Count '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Version Count Threshold: ' format 99999999 evc - + skip 2; + +col aa format a80 heading - +' Version| Count Executions Old Hash Value |-------- ------------ ---------------' + +select aa, hv + from ( select /*+ ordered use_nl (b st) */ + decode( st.piece + , 0 + , lpad(to_char( e.version_count + ,'999,999') + ,8)||' '|| + lpad(to_char((e.executions - nvl(b.executions,0)) + ,'999,999,999') + ,12)||' '|| + lpad(e.old_hash_value,12)||' '|| + rpad(' ',45)|| + decode(e.module,null,st.sql_text + ,rpad('Module: '||e.module,80)||st.sql_text) + , st.sql_text) aa + , e.old_hash_value hv + from stats$sql_summary e + , stats$sql_summary b + , stats$sqltext st + where b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset + and e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.old_hash_value = st.old_hash_value + and e.text_subset = st.text_subset + and st.piece <= &&num_rows_per_hash + and e.executions > nvl(b.executions,0) + and e.version_count > :evc + order by e.version_count desc, e.old_hash_value, st.piece + ) +where rownum < &&top_n_sql; + + +-- +-- SQL statements ordered by Cluster Wait Time +-- + +ttitle lef 'SQL ordered by Cluster Wait Time '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 2; + +col aa format a80 heading - +' Cluster CWT % of Elapsd CPU Old|Wait Time (s) Elapsd Time Time (s) Time (s) Executions Hash Value |------------- ----------- ----------- ----------- -------------- ----------' + +select aa, hv + from ( select /*+ ordered use_nl (b st) */ + decode( st.piece + , 0 + , lpad( nvl(to_char((e.cluster_wait_time - nvl(b.cluster_wait_time,0))/1000000 + ,'9,999,999.00') + , ' '),13) || ' ' || + lpad( nvl(to_char(100*(e.cluster_wait_time - nvl(b.cluster_wait_time,0)) + /(e.elapsed_time - nvl(b.elapsed_time,0)) + ,'990.0') + , ' '),11) || ' ' || + lpad( nvl(to_char((e.elapsed_time - nvl(b.elapsed_time,0))/1000000 + ,'999,990.00') + , ' '),11) || ' ' || + lpad( nvl(to_char((e.cpu_time - nvl(b.cpu_time,0))/1000000 + ,'999,990.00') + , ' '),11) || ' ' || + lpad( to_char((e.executions - nvl(b.executions,0)) + ,'9,999,999,999') + ,14) || ' ' || + lpad(e.old_hash_value,10)||''|| + rpad (' ',5)|| + decode(e.module,null,st.sql_text + ,rpad('Module: '||e.module,80)||st.sql_text) + , st.sql_text) aa + , e.old_hash_value hv + from stats$sql_summary e + , stats$sql_summary b + , stats$sqltext st + where b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.old_hash_value(+) = e.old_hash_value + and b.address(+) = e.address + and b.text_subset(+) = e.text_subset + and e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.old_hash_value = st.old_hash_value + and e.text_subset = st.text_subset + and st.piece <= &&num_rows_per_hash + and e.cluster_wait_time > nvl(b.cluster_wait_time,0) + order by (e.cluster_wait_time - nvl(b.cluster_wait_time,0)) desc, e.old_hash_value, st.piece + ) +where rownum < &&top_n_sql + and :para = 'YES'; + +set underline '-'; + + + +-- +-- Instance Activity Statistics + +ttitle lef 'Instance Activity Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 2; + +column st format a33 heading 'Statistic' trunc; +column dif format 9,999,999,999,990 heading 'Total'; +column ps format 999,999,990.9 heading 'per Second'; +column pt format 9,999,990.9 heading 'per Trans'; + +select b.name st + , e.value - b.value dif + , round((e.value - b.value)/:ela,2) ps + , round((e.value - b.value)/:tran,2) pt + from stats$sysstat b + , stats$sysstat e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.name = e.name + and e.name not in ( 'logons current' + , 'opened cursors current' + , 'workarea memory allocated' + , 'session cursor cache count' + ) + and e.value >= b.value + and e.value > 0 + order by st; + + + +-- +-- Instance Activity Statistics - absolute values + +set newpage 1; + +ttitle lef 'Instance Activity Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Statistics with absolute values (should not be diffed)' - + skip 2; + +column begin_value format 99,999,999,999 heading 'Begin Value' +column end_value format 99,999,999,999 heading 'End Value' + +select b.name st + , b.value begin_value + , e.value end_value + from stats$sysstat b + , stats$sysstat e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.name = e.name + and e.name in ( 'logons current' + , 'opened cursors current' + , 'workarea memory allocated' + , 'session cursor cache count' + ) + and ( b.value > 0 + or e.value > 0 + ); + +set newpage 0; + + +-- +-- Non-sysstat Instance Activity Statistics + +set newpage 1; + +ttitle lef 'Instance Activity Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Statistics identified by ''(derived)'' come from sources other than SYSSTAT' - + skip 2; + +column ph format 9,999.99 heading 'per Hour'; +select 'log switches (derived)' st + , e.sequence# - b.sequence# dif + , (e.sequence# - b.sequence#)/(:ela/3600) ph + from stats$thread e + , stats$thread b + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.thread# = e.thread# + and b.thread_instance_number = e.thread_instance_number + and e.thread_instance_number = :inst_num; + +set newpage 0; + + +-- +-- OS Stat + +set newpage 1; + +ttitle lef 'OS Statistics '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> ordered by statistic type (CPU use, Virtual Memory, Hardware Config), Name' - + skip 2; + +column osn format a25 heading 'Statistic' trunc; +column dif format 9,999,999,999,999,990 heading 'Total'; +column ps format 9,999,999,999,990 heading 'per Second'; +column styp noprint + +select osn.stat_name osn + , decode( osn.osstat_id + , 0, e.value -- NUM_CPUS + , 15, e.value -- LOAD + , 16, e.value -- NUM_CPU_CORES + , 17, e.value -- NUM_CPU_SOCKETS + , 1008, e.value -- PHYSICAL_MEMORY_BYTES + , e.value - b.value) dif + , ( to_number(decode(sign(instrb(osn.stat_name, 'TIME')), 1, 1, 0)) + + to_number(decode(sign(instrb(osn.stat_name, 'LOAD')), 1, 2, 0)) + + to_number(decode(sign(instrb(osn.stat_name, 'CPU_WAIT')), 1, 3, 0)) + + to_number(decode(sign(instrb(osn.stat_name, 'VM_')), 1, 4, 0)) + + to_number(decode(sign(instrb(osn.stat_name, 'PHYSICAL_MEMORY')), 1, 5, 0)) + + to_number(decode(sign(instrb(osn.stat_name, 'NUM_CPU')), 1, 6, 0)) + ) styp + from stats$osstat b + , stats$osstat e + , stats$osstatname osn + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.osstat_id = e.osstat_id + and osn.osstat_id = e.osstat_id + and osn.stat_name not like 'AVG_%' + and e.value >= b.value + and e.value > 0 + order by styp, osn; + +set newpage 0; + + +-- +-- Session Wait Events + +ttitle lef 'Session Wait Events '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef 'Session Id: ' sess_id ' Serial#: ' serial - + skip 1 - + lef '-> ordered by wait time desc, waits desc (idle events last)' - + skip 2; + +col event format a28 heading 'Event' trunc; + +select e.event + , e.total_waits - nvl(b.total_waits,0) waits + , e.total_timeouts - nvl(b.total_timeouts,0) timeouts + , (e.time_waited_micro - nvl(b.time_waited_micro,0))/1000000 time + , decode ((e.total_waits - nvl(b.total_waits, 0)), + 0, to_number(NULL), + ((e.time_waited_micro - nvl(b.time_waited_micro,0))/1000) + / (e.total_waits - nvl(b.total_waits,0)) ) wt + , (e.total_waits - nvl(b.total_waits,0))/:tran txwaits + , decode(i.event, null, 0, 99) idle + from stats$session_event b + , stats$session_event e + , stats$idle_event i + , stats$snapshot bs + , stats$snapshot es + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.event = e.event + and e.total_waits > nvl(b.total_waits,0) + and i.event(+) = e.event + and bs.snap_id = b.snap_id + and es.snap_id = e.snap_id + and bs.dbid = b.dbid + and es.dbid = b.dbid + and bs.dbid = e.dbid + and es.dbid = e.dbid + and bs.instance_number = b.instance_number + and es.instance_number = b.instance_number + and bs.instance_number = e.instance_number + and es.instance_number = e.instance_number + and bs.session_id = es.session_id + and bs.serial# = es.serial# + order by idle, time desc, waits desc; + + + +-- +-- Session Time Model Statistics + +ttitle lef 'Session Time Model Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef 'Session Id: ' sess_id ' Serial#: ' serial - + skip 1 - + lef '-> Total Time in Database calls &DBtimes.s (or &DBtime.us)' - + skip 1 - + lef '-> Ordered by % of DB time desc, Statistic name' - + skip 2; + +column statnam format a35 trunc heading 'Statistic' +column tdifs format 9,999,999,999,990.9 heading 'Time (s)' +column pctdb format 99999.9 heading '% of DB time' +column order_col noprint + +select statnam + , tdif/&ustos tdifs + , decode(order_col, 0, 100*tdif/&DBtime + , to_number(null) + ) pctdb + , order_col + from (select sn.stat_name statnam + , (e.value - b.value) tdif + , decode( sn.stat_name + , 'DB time', 1 + , 'background cpu time', 2 + , 'background elapsed time', 2 + , 0 + ) order_col + from stats$sess_time_model e + , stats$sess_time_model b + , stats$time_model_statname sn + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.stat_id = e.stat_id + and sn.stat_id = e.stat_id + and e.value - b.value > 0 + ) + order by order_col, decode(pctdb, null, tdifs, pctdb) desc; + + +-- +-- Session Statistics + +ttitle lef 'Session Statistics '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef 'Session Id: ' sess_id ' Serial#: ' serial - + skip 2; + +column dif format 9,999,999,999,990 heading 'Total'; + +select lower(substr(ss.name,1,38)) st + , to_number(decode(instr(ss.name,'current') + ,0,e.value - b.value,null)) dif + , to_number(decode(instr(ss.name,'current') + ,0,round((e.value - b.value) + /:ela,2),null)) ps + , to_number(decode(instr(ss.name,'current') + ,0,decode(:strn, + 0, round(e.value - b.value), + round((e.value - b.value) + /:strn,2),null))) pt + from stats$sesstat b + , stats$sesstat e + , stats$sysstat ss + , stats$snapshot bs + , stats$snapshot es + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and ss.snap_id = :eid + and ss.dbid = :dbid + and ss.instance_number = :inst_num + and b.statistic# = e.statistic# + and ss.statistic# = e.statistic# + and e.value > b.value + and bs.snap_id = b.snap_id + and es.snap_id = e.snap_id + and bs.dbid = b.dbid + and es.dbid = b.dbid + and bs.dbid = e.dbid + and es.dbid = e.dbid + and bs.dbid = ss.dbid + and es.dbid = ss.dbid + and bs.instance_number = b.instance_number + and es.instance_number = b.instance_number + and bs.instance_number = ss.instance_number + and es.instance_number = ss.instance_number + and bs.instance_number = e.instance_number + and es.instance_number = e.instance_number + and bs.session_id = es.session_id + and bs.serial# = es.serial# + order by st; + + + +-- +-- Tablespace IO summary statistics + +ttitle lef 'Tablespace IO Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '->ordered by IOs (Reads + Writes) desc' - + skip 2; + +col tsname format a30 heading 'Tablespace'; +col reads format 9,999,999,990 heading 'Reads' newline; +col atpr format 990.0 heading 'Av|Rd(ms)' just c; +col writes format 999,999,990 heading 'Writes'; +col waits format 9,999,990 heading 'Buffer|Waits' +col atpwt format 990.0 heading 'Av Buf|Wt(ms)' just c; +col rps format 99,999 heading 'Av|Reads/s' just c; +col wps format 99,999 heading 'Av|Writes/s' just c; +col bpr format 999.0 heading 'Av|Blks/Rd' just c; +col ios noprint + +select e.tsname + , sum (e.phyrds - nvl(b.phyrds,0)) reads + , sum (e.phyrds - nvl(b.phyrds,0))/:ela rps + , decode( sum(e.phyrds - nvl(b.phyrds,0)) + , 0, 0 + , (sum(e.readtim - nvl(b.readtim,0)) / + sum(e.phyrds - nvl(b.phyrds,0)))*10) atpr + , decode( sum(e.phyrds - nvl(b.phyrds,0)) + , 0, to_number(NULL) + , sum(e.phyblkrd - nvl(b.phyblkrd,0)) / + sum(e.phyrds - nvl(b.phyrds,0)) ) bpr + , sum (e.phywrts - nvl(b.phywrts,0)) writes + , sum (e.phywrts - nvl(b.phywrts,0))/:ela wps + , sum (e.wait_count - nvl(b.wait_count,0)) waits + , decode (sum(e.wait_count - nvl(b.wait_count, 0)) + , 0, 0 + , (sum(e.time - nvl(b.time,0)) / + sum(e.wait_count - nvl(b.wait_count,0)))*10) atpwt + , sum (e.phyrds - nvl(b.phyrds,0)) + + sum (e.phywrts - nvl(b.phywrts,0)) ios + from stats$filestatxs e + , stats$filestatxs b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.tsname(+) = e.tsname + and b.filename(+) = e.filename + and ( (e.phyrds - nvl(b.phyrds,0) ) + + (e.phywrts - nvl(b.phywrts,0) ) ) > 0 + group by e.tsname +union all +select e.tsname tbsp + , sum (e.phyrds - nvl(b.phyrds,0)) reads + , sum (e.phyrds - nvl(b.phyrds,0))/:ela rps + , decode( sum(e.phyrds - nvl(b.phyrds,0)) + , 0, 0 + , (sum(e.readtim - nvl(b.readtim,0)) / + sum(e.phyrds - nvl(b.phyrds,0)))*10) atpr + , decode( sum(e.phyrds - nvl(b.phyrds,0)) + , 0, to_number(NULL) + , sum(e.phyblkrd - nvl(b.phyblkrd,0)) / + sum(e.phyrds - nvl(b.phyrds,0)) ) bpr + , sum (e.phywrts - nvl(b.phywrts,0)) writes + , sum (e.phywrts - nvl(b.phywrts,0))/:ela wps + , sum (e.wait_count - nvl(b.wait_count,0)) waits + , decode (sum(e.wait_count - nvl(b.wait_count, 0)) + , 0, 0 + , (sum(e.time - nvl(b.time,0)) / + sum(e.wait_count - nvl(b.wait_count,0)))*10) atpwt + , sum (e.phyrds - nvl(b.phyrds,0)) + + sum (e.phywrts - nvl(b.phywrts,0)) ios + from stats$tempstatxs e + , stats$tempstatxs b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.tsname(+) = e.tsname + and b.filename(+) = e.filename + and ( (e.phyrds - nvl(b.phyrds,0) ) + + (e.phywrts - nvl(b.phywrts,0) ) ) > 0 + group by e.tsname + order by ios desc; + + + +-- +-- File IO statistics + +ttitle lef 'File IO Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '->Mx Rd Bkt: Max bucket time for single block read' - + skip 1 - + lef '->ordered by Tablespace, File' - + skip 2; + +col tsname format a24 heading 'Tablespace' trunc; +col filename format a52 heading 'Filename' trunc; +col reads format 9,999,999,990 heading 'Reads' +col atpwt format 990.0 heading 'Av|BufWt|(ms)' just c; +col atpr format 90.0 heading 'Av|Rd|(ms)' just c; +col mrt format 99 heading 'Mx|Rd|Bkt' just c; +break on tsname skip 1; + +select e.tsname + , e.filename + , e.phyrds- nvl(b.phyrds,0) reads + , (e.phyrds- nvl(b.phyrds,0))/:ela rps + , decode ((e.phyrds - nvl(b.phyrds, 0)), 0, to_number(NULL), + ((e.readtim - nvl(b.readtim,0)) / + (e.phyrds - nvl(b.phyrds,0)))*10) atpr + , max_read.mrt + , decode ((e.phyrds - nvl(b.phyrds, 0)), 0, to_number(NULL), + (e.phyblkrd - nvl(b.phyblkrd,0)) / + (e.phyrds - nvl(b.phyrds,0)) ) bpr + , e.phywrts - nvl(b.phywrts,0) writes + , (e.phywrts - nvl(b.phywrts,0))/:ela wps + , e.wait_count - nvl(b.wait_count,0) waits + , decode ((e.wait_count - nvl(b.wait_count, 0)), 0, to_number(NULL), + ((e.time - nvl(b.time,0)) / + (e.wait_count - nvl(b.wait_count,0)))*10) atpwt + from stats$filestatxs e + , stats$filestatxs b + , (select max(e.singleblkrdtim_milli) mrt + , e.file# fn + from stats$file_histogram b + , stats$file_histogram e + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.file#(+) = e.file# + and b.singleblkrdtim_milli(+) = e.singleblkrdtim_milli + and (e.singleblkrds - nvl(b.singleblkrds,0)) > 0 + and upper('&&display_file_io') = 'Y' + group by e.file# + ) max_read + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.tsname(+) = e.tsname + and b.filename(+) = e.filename + and max_read.fn(+) = e.file# + and ( (e.phyrds - nvl(b.phyrds,0) ) + + (e.phywrts - nvl(b.phywrts,0) ) ) > 0 +union all +select e.tsname + , e.filename + , e.phyrds- nvl(b.phyrds,0) reads + , (e.phyrds- nvl(b.phyrds,0))/:ela rps + , decode ((e.phyrds - nvl(b.phyrds, 0)), 0, to_number(NULL), + ((e.readtim - nvl(b.readtim,0)) / + (e.phyrds - nvl(b.phyrds,0)))*10) atpr + , max_read.mrt + , decode ((e.phyrds - nvl(b.phyrds, 0)), 0, to_number(NULL), + (e.phyblkrd - nvl(b.phyblkrd,0)) / + (e.phyrds - nvl(b.phyrds,0)) ) bpr + , e.phywrts - nvl(b.phywrts,0) writes + , (e.phywrts - nvl(b.phywrts,0))/:ela wps + , e.wait_count - nvl(b.wait_count,0) waits + , decode ((e.wait_count - nvl(b.wait_count, 0)), 0, to_number(NULL), + ((e.time - nvl(b.time,0)) / + (e.wait_count - nvl(b.wait_count,0)))*10) atpwt + from stats$tempstatxs e + , stats$tempstatxs b + , (select max(e.singleblkrdtim_milli) mrt + , e.file# fn + from stats$temp_histogram b + , stats$temp_histogram e + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.file#(+) = e.file# + and b.singleblkrdtim_milli(+) = e.singleblkrdtim_milli + and (e.singleblkrds - nvl(b.singleblkrds,0)) > 0 + and upper('&&display_file_io') = 'Y' + group by e.file# + ) max_read + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.tsname(+) = e.tsname + and b.filename(+) = e.filename + and max_read.fn(+) = e.file# + and ( (e.phyrds - nvl(b.phyrds,0) ) + + (e.phywrts - nvl(b.phywrts,0) ) ) > 0 + order by tsname, filename; + + + +-- +-- File IO Histogram statistics + +ttitle lef 'File Read Histogram Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '->Number of single block reads in each time range' - + skip 1 - + lef '->ordered by Tablespace, File' - + skip 2; + +col tsname format a24 heading 'Tablespace' trunc; +col filename format a52 heading 'Filename' trunc; +col reads format 9,999,999,990 heading 'Reads' +col to2 format 999,999,999 heading '0 - 2 ms' +col to4 format 999,999,999 heading '2 - 4 ms' +col to8 format 999,999,999 heading '4 - 8 ms ' +col to16 format 999,999,999 heading '8 - 16 ms' +col to32 format 999,999,999 heading '16 - 32 ms' +col over32 format 999,999,999 heading '32+ ms' + +break on tsname skip 1; + +select fse.tsname + , fse.filename + , sum(case when (0 <= e.singleblkrdtim_milli) + and (e.singleblkrdtim_milli <= 2) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to2 + , sum(case when ( e.singleblkrdtim_milli = 4) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to4 + , sum(case when ( e.singleblkrdtim_milli = 8) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to8 + , sum(case when ( e.singleblkrdtim_milli = 16) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to16 + , sum(case when ( e.singleblkrdtim_milli = 32) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to32 + , sum(case when 32 < e.singleblkrdtim_milli + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) over32 + from stats$file_histogram e + , stats$file_histogram b + , stats$filestatxs fse + where b.snap_id(+) = :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.file#(+) = e.file# + and b.singleblkrdtim_milli(+) = e.singleblkrdtim_milli + and fse.snap_id = e.snap_id + and fse.dbid = e.dbid + and fse.instance_number = e.instance_number + and fse.file# = e.file# + and (e.singleblkrds - nvl(b.singleblkrds,0)) > 0 + and '&&file_histogram' = 'Y' + group by fse.tsname + , fse.filename +union all +select tse.tsname + , tse.filename + , sum(case when (0 <= e.singleblkrdtim_milli) + and (e.singleblkrdtim_milli <= 2) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to2 + , sum(case when ( e.singleblkrdtim_milli = 4) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to4 + , sum(case when ( e.singleblkrdtim_milli = 8) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to8 + , sum(case when ( e.singleblkrdtim_milli = 16) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to16 + , sum(case when ( e.singleblkrdtim_milli = 32) + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) to32 + , sum(case when 32 < e.singleblkrdtim_milli + then (e.singleblkrds - nvl(b.singleblkrds,0)) else 0 end) over32 + from stats$temp_histogram e + , stats$temp_histogram b + , stats$tempstatxs tse + where b.snap_id(+) = :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.file#(+) = e.file# + and b.singleblkrdtim_milli(+) = e.singleblkrdtim_milli + and tse.snap_id = e.snap_id + and tse.dbid = e.dbid + and tse.instance_number = e.instance_number + and tse.file# = e.file# + and (e.singleblkrds - nvl(b.singleblkrds,0)) > 0 + and '&&file_histogram' = 'Y' + group by tse.tsname + , tse.filename; + + + +-- +-- Buffer pools + +ttitle lef 'Buffer Pool Statistics '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Standard block size Pools D: default, K: keep, R: recycle' - + skip 1 - + lef '-> Default Pools for other block sizes: 2k, 4k, 8k, 16k, 32k' - + skip 1 - + lef '-> Buffers: the number of buffers. Units of K, M, G are divided by 1000' - + skip 2; + +col id format 99 heading 'Set|Id'; +col name format a3 heading 'P' trunc; +col buffs format 9,999,999,999 heading 'Buffer|Gets'; +col conget format 9,999,999,999 heading 'Consistent|Gets'; +col phread format 999,999,999 heading 'Physical|Reads'; +col phwrite format 99,999,999 heading 'Physical|Writes'; +col fbwait format 99,999 heading 'Free|Buffer|Waits'; +col wcwait format 999 heading 'Writ|Comp|Wait'; +col bbwait format 9,999,999 heading 'Buffer|Busy|Waits' +col poolhr format 999 heading 'Pool|Hit%' +col numbufs format a7 heading 'Buffers' +-- col numbufs format 9,999,999 heading 'Number of|Buffers' + +select replace(e.block_size/1024||'k', :bs/1024||'k', substr(e.name,1,1)) name + , lpad(case + when e.set_msize <= 9999 + then to_char(e.set_msize)||' ' + when trunc((e.set_msize)/1000) <= 9999 + then to_char(trunc((e.set_msize)/1000))||'K' + when trunc((e.set_msize)/1000000) <= 9999 + then to_char(trunc((e.set_msize)/1000000))||'M' + when trunc((e.set_msize)/1000000000) <= 9999 + then to_char(trunc((e.set_msize)/1000000000))||'G' + when trunc((e.set_msize)/1000000000000) <= 9999 + then to_char(trunc((e.set_msize)/1000000000000))||'T' + else substr(to_char(trunc((e.set_msize)/1000000000000000))||'P', 1, 5) end + , 7, ' ') numbufs + , decode( e.db_block_gets - nvl(b.db_block_gets,0) + + e.consistent_gets - nvl(b.consistent_gets,0) + , 0, to_number(null) + , (100* (1 - ( (e.physical_reads - nvl(b.physical_reads,0)) + / ( e.db_block_gets - nvl(b.db_block_gets,0) + + e.consistent_gets - nvl(b.consistent_gets,0)) + ) + ) + ) + ) poolhr + , e.db_block_gets - nvl(b.db_block_gets,0) + + e.consistent_gets - nvl(b.consistent_gets,0) buffs + , e.physical_reads - nvl(b.physical_reads,0) phread + , e.physical_writes - nvl(b.physical_writes,0) phwrite + , e.free_buffer_wait - nvl(b.free_buffer_wait,0) fbwait + , e.write_complete_wait - nvl(b.write_complete_wait,0) wcwait + , e.buffer_busy_wait - nvl(b.buffer_busy_wait,0) bbwait + from stats$buffer_pool_statistics b + , stats$buffer_pool_statistics e + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.id(+) = e.id + order by e.name; + + +set newpage 1; +set heading off; +ttitle off; + +select 'The following buffer pool no longer exists in the end snapshot: ' + || replace(b.block_size/1024||'k', :bs/1024||'k', substr(b.name,1,1)) + from stats$buffer_pool_statistics b + where b.snap_id = :bid + and b.dbid = :dbid + and b.instance_number = :inst_num +minus +select 'The following buffer pool no longer exists in the end snapshot: ' + || replace(e.block_size/1024||'k', :bs/1024||'k', substr(e.name,1,1)) + from stats$buffer_pool_statistics e + where e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num; + +set colsep ' '; +set underline on; +set heading on; + + + +-- +-- Instance Recovery Stats + +ttitle lef 'Instance Recovery Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> B: Begin snapshot, E: End snapshot' - + skip 2; + +column tm format 9999 heading 'Targt|MTTR|(s)' just c; +column em format 9999 heading 'Estd|MTTR|(s)' just c; +column beg format a1 heading ''; +column rei format 999999999 heading 'Recovery|Estd IOs' just c; +column arb format 99999999 heading 'Actual|Redo Blks' just c; +column trb format 99999999 heading 'Target|Redo Blks' just c; +column lfrb format 999999999 heading 'Log File|Size|Redo Blks' just c; +column lctrb format 99999999 heading 'Log Ckpt|Timeout|Redo Blks' just c; +column lcirb format 99999999999 heading 'Log Ckpt|Interval|Redo Blks' just c; +column fsirb format 999999999 heading 'Fast|Start IO|Redo Blks'; +column cbr format 9999999 heading 'Ckpt|Block|Writes'; +column snid noprint; + +select 'B' beg + , target_mttr tm + , estimated_mttr em + , recovery_estimated_ios rei + , actual_redo_blks arb + , target_redo_blks trb + , log_file_size_redo_blks lfrb + , log_chkpt_timeout_redo_blks lctrb + , log_chkpt_interval_redo_blks lcirb + , snap_id snid + from stats$instance_recovery b + where b.snap_id = :bid + and b.dbid = :dbid + and b.instance_number = :inst_num +union all +select 'E' beg + , target_mttr tm + , estimated_mttr em + , recovery_estimated_ios rei + , actual_redo_blks arb + , target_redo_blks trb + , log_file_size_redo_blks lfrb + , log_chkpt_timeout_redo_blks lctrb + , log_chkpt_interval_redo_blks lcirb + , snap_id snid + from stats$instance_recovery e + where e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num +order by snid; + + + +-- +-- Buffer Pool Advisory + +set newpage none; +set heading off; +set termout off; +ttitle off; +repfooter off; + +column k2_cache new_value k2_cache noprint; +column k4_cache new_value k4_cache noprint; +column k8_cache new_value k8_cache noprint; +column k16_cache new_value k16_cache noprint; +column k32_cache new_value k32_cache noprint; +column def_cache new_value def_cache noprint; +column rec_cache new_value rec_cache noprint; +column kee_cache new_value kee_cache noprint; + +select nvl(sum (case when name = 'db_2k_cache_size' + then value else '0' end),'0') k2_cache + , nvl(sum (case when name = 'db_4k_cache_size' + then value else '0' end),'0') k4_cache + , nvl(sum (case when name = 'db_8k_cache_size' + then value else '0' end),'0') k8_cache + , nvl(sum (case when name = 'db_16k_cache_size' + then value else '0' end),'0') k16_cache + , nvl(sum (case when name = 'db_32k_cache_size' + then value else '0' end),'0') k32_cache + , decode(nvl(sum (case when name = 'db_keep_cache_size' + then value else '0' end),'0') + , '0' + , nvl(sum (case when name = 'buffer_pool_keep' + then to_char(decode( 0 + , instrb(value, 'buffers') + , value + , decode(1, instrb(value, 'lru_latches') + , substr(value, instrb(value,',')+10, 9999) + , decode(0,instrb(value, ', lru') + , substrb(value,9,99999) + , substrb(substrb(value,1,instrb(value,', lru_latches:')-1),9,99999) ))) * :bs) else '0' end),'0') + , sum (case when name = 'db_keep_cache_size' + then value else '0' end)) kee_cache + , decode(nvl(sum (case when name = 'db_recycle_cache_size' + then value else '0' end),'0') + , '0' + , nvl(sum (case when name = 'buffer_pool_recycle' + then to_char(decode( 0 + , instrb(value, 'buffers') + , value + , decode(1, instrb(value, 'lru_latches') + , substr(value, instrb(value,',')+10, 9999) + , decode(0,instrb(value, ', lru') + , substrb(value,9,99999) + , substrb(substrb(value,1,instrb(value,', lru_latches:')-1),9,99999) ))) * :bs) else '0' end),'0') + , sum (case when name = 'db_recycle_cache_size' + then value else '0' end) ) rec_cache + , decode(nvl(sum (case when name = '__db_cache_size' + then value else '0' end) , '0') + , '0' + , nvl(sum (case when name = 'db_block_buffers' + then to_char(value * :bs) else '0' end),'0') + , sum (case when name = '__db_cache_size' + then value else '0' end) ) def_cache + from stats$parameter +where name in ( 'db_2k_cache_size' ,'db_4k_cache_size' + ,'db_8k_cache_size' ,'db_16k_cache_size' + ,'db_32k_cache_size' + ,'__db_cache_size' ,'db_block_buffers' + ,'db_keep_cache_size' ,'buffer_pool_keep' + ,'db_recycle_cache_size','buffer_pool_recycle') + and snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num; + +variable k2_cache number; +variable k4_cache number +variable k8_cache number; +variable k16_cache number; +variable k32_cache number; +variable def_cache number; +variable rec_cache number; +variable kee_cache number; +begin + :k2_cache := &k2_cache/1024; + :k4_cache := &k4_cache/1024; + :k8_cache := &k8_cache/1024; + :k16_cache := &k16_cache/1024; + :k32_cache := &k32_cache/1024; + :def_cache := &def_cache/1024; + :rec_cache := &rec_cache/1024; + :kee_cache := &kee_cache/1024; +end; +/ + + +set termout on; +set heading on; +repfooter center - + '-------------------------------------------------------------'; + +ttitle lef 'Buffer Pool Advisory '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'End Snap: ' format 99999999 end_snap - + skip 1 - + lef '-> Only rows with estimated physical reads >0 are displayed' - + skip 1 - + lef '-> ordered by Pool, Block Size, Buffers For Estimate' - + skip 2; + +column id format 999; +column bpool format a3 heading 'P' trunc; +column order_def_bs noprint +column advice_status format a2 trunc heading 'ON'; +column block_size format 99999 heading 'Block|Size'; +column sfe format 999,999 heading 'Size for|Est (M)'; +column bfe format 999,999,999 heading 'Buffers|(thousands)'; +column eprf format 990.9 heading 'Est|Phys|Read|Factr'; +column epr format 9,999,999,999 heading 'Estimated|Phys Reads|(thousands)'; +column bcsf format 99.9 heading 'Size|Factr' +column eprt format 999,999,999 heading 'Est Phys|Read Time' +column epdbt format 999.9 heading 'Est|% dbtime|for Rds' + +select replace( block_size/1024||'k', :bs/1024||'k' + , substr(name,1,1)) bpool + , decode(block_size, :bs, 1, 2) order_def_bs + , size_for_estimate sfe + , nvl( size_factor + , decode( replace(block_size/1024||'k', :bs/1024||'k' + , substr(name,1,1)) + , '2k' , size_for_estimate*1024/:k2_cache + , '4k' , size_for_estimate*1024/:k4_cache + , '8k' , size_for_estimate*1024/:k8_cache + , '16k', size_for_estimate*1024/:k16_cache + , '32k', size_for_estimate*1024/:k32_cache + , 'D' , size_for_estimate*1024/:def_cache + , 'K' , size_for_estimate*1024/:kee_cache + , 'R' , size_for_estimate*1024/:rec_cache + ) + ) bcsf + , buffers_for_estimate/1000 bfe + , estd_physical_read_factor eprf + , estd_physical_reads/1000 epr + , estd_physical_read_time eprt + , estd_pct_of_db_time_for_reads epdbt + from stats$db_cache_advice + where snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num + and estd_physical_reads > 0 + order by order_def_bs, block_size, name, buffers_for_estimate; + +set newpage 1; + + +-- +-- Buffer waits + +ttitle lef 'Buffer wait Statistics '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> ordered by wait time desc, waits desc' - + skip 2; + +column class heading 'Class'; +column icnt format 99,999,990 heading 'Waits'; +column itim format 9,999,990 heading 'Total Wait Time (s)'; +column iavg format 999,990 heading 'Avg Time (ms)' just c; + +select e.class + , e.wait_count - nvl(b.wait_count,0) icnt + , (e.time - nvl(b.time,0))/100 itim + ,10* (e.time - nvl(b.time,0)) + / (e.wait_count - nvl(b.wait_count,0)) iavg + from stats$waitstat b + , stats$waitstat e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.dbid = e.dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and b.class = e.class + and b.wait_count < e.wait_count + order by itim desc, icnt desc; + +set newpage 0; + + + +-- +-- PGA Memory Statistics + +ttitle lef 'PGA Aggr Target Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> B: Begin snap E: End snap (rows identified with B or E contain data' - + skip 1 - + lef ' which is absolute i.e. not diffed over the interval)' - + skip 1 - + lef '-> PGA cache hit % - percentage of W/A (WorkArea) data processed only in-memory' - + skip 1 - + lef '-> Auto PGA Target - actual workarea memory target'- + skip 1 - + lef '-> W/A PGA Used - amount of memory used for all Workareas (manual + auto)'- + skip 1 - + lef '-> %PGA W/A Mem - percentage of PGA memory allocated to workareas'- + skip 1 - + lef '-> %Auto W/A Mem - percentage of workarea memory controlled by Auto Mem Mgmt'- + skip 1 - + lef '-> %Man W/A Mem - percentage of workarea memory under manual control'- + skip 2; + +repfooter off; + +-- Show the PGA cache hit percentage for this interval + +col tbp format 9,999,999,999 heading 'W/A MB Processed' +col tbrw format 9,999,999,999 heading 'Extra W/A MB Read/Written' +col calc_cache_pct format 990.0 heading 'PGA Cache Hit %' + +select 100 + * (e.bytes - nvl(b.bytes,0)) + / (e.bytes - nvl(b.bytes,0) + e.bytesrw - nvl(b.bytesrw,0)) calc_cache_pct + , (e.bytes - nvl(b.bytes,0)) /1024/1024 tbp + , (e.bytesrw - nvl(b.bytesrw,0))/1024/1024 tbrw + from (select sum(case when name = 'bytes processed' + then value else 0 end) bytes + , sum(case when name = 'extra bytes read/written' + then value else 0 end) bytesrw + from stats$pgastat e1 + where e1.snap_id = :eid + and e1.dbid = :dbid + and e1.instance_number = :inst_num + and e1.name in ('bytes processed','extra bytes read/written') + ) e + , (select sum(case when name = 'bytes processed' + then value else 0 end) bytes + , sum(case when name = 'extra bytes read/written' + then value else 0 end) bytesrw + from stats$pgastat b1 + where b1.snap_id = :bid + and b1.dbid = :dbid + and b1.instance_number = :inst_num + and b1.name in ('bytes processed','extra bytes read/written') + ) b + where e.bytes - nvl(b.bytes,0) > 0; + +set newpage 1; + + +-- Display overflow warning, if needed + +ttitle off; +set heading off; +col nl format a78 newline + +select 'Warning: pga_aggregate_target was set too low for current workload, as this' nl + , ' value was exceeded during this interval. Use the PGA Advisory view' nl + , ' to help identify a different value for pga_aggregate_target.' nl + from stats$pgastat e + , stats$pgastat b + , stats$parameter p + where e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and e.name = 'over allocation count' + and b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.name(+) = e.name + and e.value > nvl(b.value,0) + and p.snap_id = :eid + and p.dbid = :dbid + and p.instance_number = :inst_num + and p.name = 'workarea_size_policy' + and p.value = 'AUTO'; + + +set heading on; +repfooter center - + '-------------------------------------------------------------'; + +-- Display Begin and End statistics for this interval + +column snap format a1 heading ''; +column pgaat format 999,999 heading 'PGA Aggr|Target(M)' just c; +column pat format 999,999 heading 'Auto PGA|Target(M)' just c; +column tot_pga_allo format 999,990.9 heading 'PGA Mem|Alloc(M)' just c; +column tot_tun_used format 999,990.9 heading 'W/A PGA|Used(M)' just c; +column pct_tun format 999.9 heading '%PGA|W/A|Mem' just c; +column pct_auto_tun format 999.9 heading '%Auto|W/A|Mem' just c; +column pct_man_tun format 999.9 heading '%Man|W/A|Mem' just c; +column glo_mem_bnd format 9,999,999 heading 'Global Mem|Bound(K)' just c; + +select 'B' snap + , to_number(p.value)/1024/1024 pgaat + , mu.pat/1024/1024 pat + , mu.PGA_alloc/1024/1024 tot_pga_allo + , (mu.PGA_used_auto + mu.PGA_used_man)/1024/1024 tot_tun_used + , 100*(mu.PGA_used_auto + mu.PGA_used_man) / PGA_alloc pct_tun + , decode(mu.PGA_used_auto + mu.PGA_used_man, 0, 0 + , 100* mu.PGA_used_auto/(mu.PGA_used_auto + mu.PGA_used_man) + ) pct_auto_tun + , decode(mu.PGA_used_auto + mu.PGA_used_man, 0, 0 + , 100* mu.PGA_used_man / (mu.PGA_used_auto + mu.PGA_used_man) + ) pct_man_tun + , mu.glob_mem_bnd/1024 glo_mem_bnd + from (select sum(case when name = 'total PGA allocated' + then value else 0 end) PGA_alloc + , sum(case when name = 'total PGA used for auto workareas' + then value else 0 end) PGA_used_auto + , sum(case when name = 'total PGA used for manual workareas' + then value else 0 end) PGA_used_man + , sum(case when name = 'global memory bound' + then value else 0 end) glob_mem_bnd + , sum(case when name = 'aggregate PGA auto target' + then value else 0 end) pat + from stats$pgastat pga + where pga.snap_id = :bid + and pga.dbid = :dbid + and pga.instance_number = :inst_num + ) mu + , stats$parameter p +where p.snap_id = :bid + and p.dbid = :dbid + and p.instance_number = :inst_num + and p.name = 'pga_aggregate_target' + and p.value != '0' +union all +select 'E' snap + , to_number(p.value)/1024/1024 pgaat + , mu.pat/1024/1024 pat + , mu.PGA_alloc/1024/1024 tot_pga_allo + , (mu.PGA_used_auto + mu.PGA_used_man)/1024/1024 tot_tun_used + , 100*(mu.PGA_used_auto + mu.PGA_used_man) / PGA_alloc pct_tun + , decode(mu.PGA_used_auto + mu.PGA_used_man, 0, 0 + , 100* mu.PGA_used_auto/(mu.PGA_used_auto + mu.PGA_used_man) + ) pct_auto_tun + , decode(mu.PGA_used_auto + mu.PGA_used_man, 0, 0 + , 100* mu.PGA_used_man / (mu.PGA_used_auto + mu.PGA_used_man) + ) pct_man_tun + , mu.glob_mem_bnd/1024 glo_mem_bnd + from (select sum(case when name = 'total PGA allocated' + then value else 0 end) PGA_alloc + , sum(case when name = 'total PGA used for auto workareas' + then value else 0 end) PGA_used_auto + , sum(case when name = 'total PGA used for manual workareas' + then value else 0 end) PGA_used_man + , sum(case when name = 'global memory bound' + then value else 0 end) glob_mem_bnd + , sum(case when name = 'aggregate PGA auto target' + then value else 0 end) pat + from stats$pgastat pga + where pga.snap_id = :eid + and pga.dbid = :dbid + and pga.instance_number = :inst_num + ) mu + , stats$parameter p + where p.snap_id = :eid + and p.dbid = :dbid + and p.instance_number = :inst_num + and p.name = 'pga_aggregate_target' + and p.value != '0' + order by snap; + +set heading on; +set newpage 1; + + + +-- PGA usage Histogram + +ttitle lef 'PGA Aggr Target Histogram '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Optimal Executions are purely in-memory operations' - + skip 2; + +col low_o format a7 heading 'Low|Optimal' just r +col high_o format a7 heading 'High|Optimal' just r +col tot_e format 9,999,999,999 heading 'Total Execs' +col opt_e format 999,999,999 heading 'Optimal Execs' +col one_e format 999,999,999 heading '1-Pass Execs' +col mul_e format 999,999,999 heading 'M-Pass Execs' + +select case when e.low_optimal_size >= 1024*1024*1024*1024 + then lpad(round(e.low_optimal_size/1024/1024/1024/1024) || 'T',7) + when e.low_optimal_size >= 1024*1024*1024 + then lpad(round(e.low_optimal_size/1024/1024/1024) || 'G' ,7) + when e.low_optimal_size >= 1024*1024 + then lpad(round(e.low_optimal_size/1024/1024) || 'M',7) + when e.low_optimal_size >= 1024 + then lpad(round(e.low_optimal_size/1024) || 'K',7) + else lpad(e.low_optimal_size || 'B',7) + end low_o + , case when e.high_optimal_size >= 1024*1024*1024*1024 + then lpad(round(e.high_optimal_size/1024/1024/1024/1024) || 'T',7) + when e.high_optimal_size >= 1024*1024*1024 + then lpad(round(e.high_optimal_size/1024/1024/1024) || 'G',7) + when e.high_optimal_size >= 1024*1024 + then lpad(round(e.high_optimal_size/1024/1024) || 'M',7) + when e.high_optimal_size >= 1024 + then lpad(round(e.high_optimal_size/1024) || 'K',7) + else e.high_optimal_size || 'B' + end high_o + , e.total_executions - nvl(b.total_executions,0) tot_e + , e.optimal_executions - nvl(b.optimal_executions,0) opt_e + , e.onepass_executions - nvl(b.onepass_executions,0) one_e + , e.multipasses_executions - nvl(b.multipasses_executions,0) mul_e + from stats$sql_workarea_histogram e + , stats$sql_workarea_histogram b + where e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and b.snap_id(+) = :bid + and b.dbid(+) = e.dbid + and b.instance_number(+) = e.instance_number + and b.low_optimal_size(+) = e.low_optimal_size + and b.high_optimal_size(+) = e.high_optimal_size + and e.total_executions - nvl(b.total_executions,0) > 0 + order by e.low_optimal_size; + + +-- PGA Advisory + +ttitle lef 'PGA Memory Advisory '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'End Snap: ' format 99999999 end_snap - + skip 1 - + lef '-> When using Auto Memory Mgmt, minimally choose a pga_aggregate_target value'- + skip 1 - + lef ' where Estd PGA Overalloc Count is 0' - + skip 2; + +col pga_t format 9,999,999 heading 'PGA Target|Est (MB)' +col pga_tf format 9990.0 heading 'Size|Factr' +col byt_p format 9,999,999,990.0 heading 'W/A MB|Processed' +col byt_rw format 9,999,999,990.0 heading 'Estd Extra|W/A MB Read/|Written to Disk' just c +col epchp format 990.0 heading 'Estd PGA|Cache|Hit %' +col eoc format 9,999,999 heading 'Estd PGA|Overalloc|Count' + +select pga_target_for_estimate/1024/1024 pga_t + , pga_target_factor pga_tf + , bytes_processed/1024/1024 byt_p + , estd_extra_bytes_rw/1024/1024 byt_rw + , estd_pga_cache_hit_percentage epchp + , estd_overalloc_count eoc + from stats$pga_target_advice e + where snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num + order by pga_target_for_estimate; + + +-- +-- PGA Memory Stats + +set newpage 0; + +ttitle lef 'Process Memory Summary Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> B: Begin snap E: End snap' - + skip 1 - + lef '-> All rows below contain absolute values (i.e. not diffed over the interval)' - + skip 1 - + lef '-> Max Alloc is Maximum PGA Allocation size at snapshot time' - + skip 1 - + lef ' Hist Max Alloc is the Historical Max Allocation for still-connected processes' - + skip 1 - + lef '-> Num Procs or Allocs: For Begin/End snapshot lines, it is the number of' - + skip 1 - + lef ' processes. For Category lines, it is the number of allocations' - + skip 1 - + lef '-> ordered by Begin/End snapshot, Alloc (MB) desc' - + skip 2; + +col b_or_e heading '' +col ord_col noprint +col snid noprint +col cat format a8 heading 'Category' trunc +col tot_alloc_mb format 99,999.9 heading 'Alloc|(MB)' just c +col tot_used_mb format 99,999.9 heading 'Used|(MB)' just c +col tot_free_pga_mb format 9,999.9 heading 'Freeabl|(MB)' just c +col avg_alloc_mb format 9,999.9 heading 'Avg|Alloc|(MB)' just c +col cov_alloc_mb format 999.9 heading 'Coeff of|Variance' just c +col stddev_alloc_mb format 999.9 heading 'Std Dev|Alloc|(MB)' just c +col max_alloc_mb format 99,999 heading 'Max|Alloc|(MB)' just c +col max_max_alloc_mb format 9,999 heading 'Hist|Max|Alloc|(MB)' just c +col nza format 9,999 heading 'Num|Procs|or|Allocs' just c +break on b_or_e + +select * + from (select decode(snap_id, :bid, 'B', :eid, 'E') b_or_e + , 1 ord_col + , snap_id snid + , '---------' cat + , pga_alloc_mem/&&btomb tot_alloc_mb + , pga_used_mem/&&btomb tot_used_mb + , pga_freeable_mem/&&btomb tot_free_pga_mb + , avg_pga_alloc_mem/&&btomb avg_alloc_mb + , stddev_pga_alloc_mem/&&btomb stddev_alloc_mb + , max_pga_alloc_mem/&&btomb max_alloc_mb + , max_pga_max_mem/&&btomb max_max_alloc_mb + , num_processes nza + from stats$process_rollup + where snap_id in (:bid, :eid) + and dbid = :dbid + and instance_number = :inst_num + and pid = -9 + union all + select decode(snap_id, :bid, 'B', :eid, 'E') b_or_e + , 2 ord_col + , snap_id snid + , category cat + , allocated/&&btomb tot_alloc_mb + , used/&&btomb tot_used_mb + , to_number(null) tot_free_pga_mb + , avg_allocated /&&btomb avg_alloc_mb + , stddev_allocated/&&btomb stddev_alloc_mb + , max_allocated/&&btomb max_alloc_mb + , max_max_allocated/&&btomb max_max_alloc_mb + , non_zero_allocations nza + from stats$process_memory_rollup + where snap_id in (:bid, :eid) + and dbid = :dbid + and instance_number = :inst_num + and pid = -9 + ) + order by snid, ord_col, tot_alloc_mb desc; + + +-- +-- PGA Allocation by Component summary + +clear breaks +set newpage 1; + +ttitle lef 'Top Process Memory (by component) '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> ordered by Begin/End snapshot, Alloc (MB) desc' - + skip 2; + +col b_or_e heading '' +col snid noprint +col ord_col noprint +col pid format 99999 heading 'PId' +col cat format a13 heading 'Category' trunc +col tot_alloc_mb format 9999.9 heading 'Alloc|(MB)' just c +col tot_used_mb format 9999.9 heading 'Used|(MB)' just c +col max_alloc_mb format 9999.9 heading 'Max|Alloc (MB)' just c +col max_max_alloc_mb format 9999.9 heading 'Hist Max|Alloc (MB)' just c +col tot_alloc_mb2 noprint + +clear breaks + +break on b_or_e on pid + +select * + from (select decode(snap_id, :bid, 'B', :eid, 'E') b_or_e + , snap_id snid + , 1 ord_col + , pid pid + , rpad(substr( program, instrb(program,'(') +1 + , instrb(program, ')')-1-instrb(program,'(')) || ' ' + , 13, '-') cat + , pga_alloc_mem/&&btomb tot_alloc_mb + , pga_used_mem/&&btomb tot_used_mb + , pga_freeable_mem/&&btomb tot_free_pga_mb + , max_pga_alloc_mem/&&btomb max_alloc_mb + , max_pga_max_mem/&&btomb max_max_alloc_mb + , pga_alloc_mem/&&btomb tot_alloc_mb2 + from stats$process_rollup + where snap_id in (:bid, :eid) + and dbid = :dbid + and instance_number = :inst_num + and pid != -9 + union all + select decode(pmr.snap_id, :bid, 'B', :eid, 'E') b_or_e + , pmr.snap_id snid + , 2 ord_col + , pmr.pid pid + , pmr.category cat + , pmr.allocated/&&btomb tot_alloc_mb + , pmr.used/&&btomb tot_used_mb + , to_number(null) pga_free_mb + , pmr.max_allocated/&&btomb max_alloc_mb + , pmr.max_max_allocated/&&btomb max_max_alloc_mb + , pr.pga_alloc_mem/&&btomb tot_alloc_mb2 + from stats$process_memory_rollup pmr + , stats$process_rollup pr + where pmr.snap_id in (:bid, :eid) + and pmr.dbid = :dbid + and pmr.instance_number = :inst_num + and pmr.pid != -9 + and pr.snap_id = pmr.snap_id + and pr.dbid = pmr.dbid + and pr.instance_number = pmr.instance_number + and pr.pid = pmr.pid + and pmr.serial# = pmr.serial# + ) + order by snid, tot_alloc_mb2 desc, pid, ord_col,tot_alloc_mb desc; + +set newpage 0 + + +-- +-- Enqueue activity + +ttitle lef 'Enqueue activity '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> only enqueues with waits are shown' - + skip 1 - + lef '-> Enqueue stats gathered prior to 10g should not be compared with 10g data' - + skip 1 - + lef '-> ordered by Wait Time desc, Waits desc' - + skip 2; + +col ety format a78 heading 'Enqueue Type (Request Reason)' trunc; +col reqs format 999,999,990 heading 'Requests' newline; +col sreq format 999,999,990 heading 'Succ Gets'; +col freq format 99,999,990 heading 'Failed Gets'; +col waits format 99,999,990 heading 'Waits'; +col wttm format 999,999,999 heading 'Wt Time (s)' just c; +col awttm format 9,999,999.99 heading 'Av Wt Time(ms)' just c; + +select /*+ ordered */ + e.eq_type || '-' || to_char(nvl(l.name,' ')) + || decode( upper(e.req_reason) + , 'CONTENTION', null + , '-', null + , ' ('||e.req_reason||')') ety + , e.total_req# - nvl(b.total_req#,0) reqs + , e.succ_req# - nvl(b.succ_req#,0) sreq + , e.failed_req# - nvl(b.failed_req#,0) freq + , e.total_wait# - nvl(b.total_wait#,0) waits + , (e.cum_wait_time - nvl(b.cum_wait_time,0))/1000 wttm + , decode( (e.total_wait# - nvl(b.total_wait#,0)) + , 0, to_number(NULL) + , ( (e.cum_wait_time - nvl(b.cum_wait_time,0)) + / (e.total_wait# - nvl(b.total_wait#,0)) + ) + ) awttm + from stats$enqueue_statistics e + , stats$enqueue_statistics b + , v$lock_type l + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.eq_type(+) = e.eq_type + and b.req_reason(+) = e.req_reason + and e.total_wait# - nvl(b.total_wait#,0) > 0 + and l.type(+) = e.eq_type + order by wttm desc, waits desc; + + + +-- +-- Rollback segment + +ttitle off; +repfooter off; +set newpage none; +set heading off; +set termout off; +column auto_undo new_value auto_undo noprint +select value auto_undo + from stats$parameter + where snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num + and name = 'undo_management'; + +repfooter center - + '-------------------------------------------------------------'; +set newpage 0; +set heading on; +set termout on; + +ttitle lef 'Rollback Segment Stats '- + 'DB/Inst: ' db_name '/' inst_name ' ' - + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '->A high value for "Pct Waits" suggests more rollback segments may be required' - + skip 1 - + lef '->RBS stats may not be accurate between begin and end snaps when using Auto Undo,' - + skip 1 - + lef ' managment, as RBS may be dynamically created and dropped as needed' - + skip 2; + +column usn format 99990 heading 'RBS No' Just Cen; +column gets format 999,999,990.9 heading 'Trans Table|Gets' Just Cen; +column waits format 990.99 heading 'Pct|Waits'; +column writes format 99,999,999,990 heading 'Undo Bytes|Written' Just Cen; +column wraps format 999,990 heading 'Wraps'; +column shrinks format 999,990 heading 'Shrinks'; +column extends format 999,990 heading 'Extends'; +column rssize format 99,999,999,990 heading 'Segment Size'; +column active format 99,999,999,990 heading 'Avg Active'; +column optsize format 99,999,999,990 heading 'Optimal Size'; +column hwmsize format 99,999,999,990 heading 'Maximum Size'; + +select b.usn + , e.gets - b.gets gets + , to_number(decode(e.gets ,b.gets, null, + (e.waits - b.waits) * 100/(e.gets - b.gets))) waits + , e.writes - b.writes writes + , e.wraps - b.wraps wraps + , e.shrinks - b.shrinks shrinks + , e.extends - b.extends extends + from stats$rollstat b + , stats$rollstat e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.dbid = e.dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and e.usn = b.usn + and ( '&&auto_undo' = 'MANUAL' + or upper('&&display_rollstat') = 'Y' + ) + order by e.usn; + + +ttitle lef 'Rollback Segment Storage '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '->Optimal Size should be larger than Avg Active'- + skip 2; + +select b.usn + , e.rssize + , e.aveactive active + , to_number(decode(e.optsize, -4096, null,e.optsize)) optsize + , e.hwmsize + from stats$rollstat b + , stats$rollstat e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.dbid = e.dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and e.usn = b.usn + and ( '&&auto_undo' = 'MANUAL' + or upper('&&display_rollstat') = 'Y' + ) + order by e.usn; + + +-- +-- Undo Segment + +ttitle lef 'Undo Segment Summary '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Min/Max TR (mins) - Min and Max Tuned Retention (minutes)' - + skip 1 - + lef '-> STO - Snapshot Too Old count, OOS - Out Of Space count' - + skip 1 - + lef '-> Undo segment block stats:' - + skip 1 - + lef ' uS - unexpired Stolen, uR - unexpired Released, uU - unexpired reUsed' - + skip 1 - + lef ' eS - expired Stolen, eR - expired Released, eU - expired reUsed' - + skip 2; + +column undotsn format 999 heading 'Undo|TS#'; +column undob format 99,999.0 heading 'Num Undo|Blocks (K)'; +column txcnt format 99,999,999,999 heading 'Number of|Transactions'; +column maxq format 999,999 heading 'Max Qry|Len (s)'; +column maxc format 9,999,999 heading 'Max Tx|Concy'; +column mintun format a9 heading 'Min/Max|TR (mins)' wrap; +column snolno format a5 heading 'STO/|OOS' wrap; +column blkst format a11 heading 'uS/uR/uU/|eS/eR/eU' wrap; +column unst format 9,999 heading 'Unexp|Stolen' newline; +column unrl format 9,999 heading 'Unexp|Relesd'; +column unru format 9,999 heading 'Unexp|Reused'; +column exst format 9,999 heading 'Exp|Stolen'; +column exrl format 9,999 heading 'Exp|Releas'; +column exru format 9,999 heading 'Exp|Reused'; + +select undotsn + , sum(undoblks)/1000 undob + , sum(txncount) txcnt + , max(maxquerylen) maxq + , max(maxconcurrency) maxc + , round(min(tuned_undoretention)/60,1) + ||'/'|| round(max(tuned_undoretention)/60,1) mintun + , sum(ssolderrcnt) + ||'/'|| sum(nospaceerrcnt) snolno + , sum(unxpstealcnt) + ||'/'|| sum(unxpblkrelcnt) + ||'/'|| sum(unxpblkreucnt) + ||'/'|| sum(expstealcnt) + ||'/'|| sum(expblkrelcnt) + ||'/'|| sum(expblkreucnt) blkst + from stats$undostat + where dbid = :dbid + and instance_number = :inst_num + and end_time > to_date(:btime, 'YYYYMMDD HH24:MI:SS') + and begin_time < to_date(:etime, 'YYYYMMDD HH24:MI:SS') + and upper('&&display_undostat') = 'Y' + group by undotsn; + +set newpage 2; + +ttitle lef 'Undo Segment Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Most recent ' &&top_n_undostat ' Undostat rows, ordered by End Time desc' - + skip 2; + +column undotsn format 999 heading 'Undo|TS#' noprint; +column endt format a12 heading 'End Time'; +column undob format 99,999,999 heading 'Num Undo|Blocks'; +column txcnt format 999,999,999 heading 'Number of|Transactions'; +column maxq format 99,999 heading 'Max Qry|Len (s)'; +column maxc format 99,999 heading 'Max Tx|Concy'; +column mintun format 99,999 heading 'Tun Ret|(mins)'; +column snolno format a5 heading 'STO/|OOS' wrap; +column blkst format a11 heading 'uS/uR/uU/|eS/eR/eU' wrap; + +select undotsn + , endt + , undob + , txcnt + , maxq + , maxc + , mintun + , snolno + , blkst + from (select undotsn + , to_char(end_time, 'DD-Mon HH24:MI') endt + , undoblks undob + , txncount txcnt + , maxquerylen maxq + , maxconcurrency maxc + , tuned_undoretention/60 mintun + , ssolderrcnt || '/' || nospaceerrcnt snolno + , unxpstealcnt + ||'/'|| unxpblkrelcnt + ||'/'|| unxpblkreucnt + ||'/'|| expstealcnt + ||'/'|| expblkrelcnt + ||'/'|| expblkreucnt blkst + from stats$undostat + where dbid = :dbid + and instance_number = :inst_num + and end_time > to_date(:btime, 'YYYYMMDD HH24:MI:SS') + and begin_time < to_date(:etime, 'YYYYMMDD HH24:MI:SS') + and upper('&&display_undostat') = 'Y' + order by begin_time desc + ) + where rownum < &&top_n_undostat; + +set newpage 0; + + + +-- +-- Latch Activity + +ttitle lef 'Latch Activity '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '->"Get Requests", "Pct Get Miss" and "Avg Slps/Miss" are ' - + 'statistics for ' skip 1 - + ' willing-to-wait latch get requests' - + skip 1 - + lef '->"NoWait Requests", "Pct NoWait Miss" are for ' - + 'no-wait latch get requests' - + skip 1 - + lef '->"Pct Misses" for both should be very close to 0.0' - + skip 2; + +column name format a24 heading 'Latch' trunc; +column gets format 9,999,999,990 heading 'Get|Requests'; +column missed format 990.9 heading 'Pct|Get|Miss'; +column sleeps format 990.9 heading 'Avg|Slps|/Miss'; +column nowai format 999,999,990 heading 'NoWait|Requests'; +column imiss format 990.9 heading 'Pct|NoWait|Miss'; +column wt format 99990 heading 'Wait|Time|(s)'; + +select b.name name + , e.gets - b.gets gets + , to_number(decode(e.gets, b.gets, null, + (e.misses - b.misses) * 100/(e.gets - b.gets))) missed + , to_number(decode(e.misses, b.misses, null, + (e.sleeps - b.sleeps)/(e.misses - b.misses))) sleeps + , (e.wait_time - b.wait_time)/1000000 wt + , e.immediate_gets - b.immediate_gets nowai + , to_number(decode(e.immediate_gets, + b.immediate_gets, null, + (e.immediate_misses - b.immediate_misses) * 100 / + (e.immediate_gets - b.immediate_gets))) imiss + from stats$latch b + , stats$latch e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.dbid = e.dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and b.name = e.name + and ( e.gets - b.gets + + e.immediate_gets - b.immediate_gets + ) > 0 + order by b.name; + + + +-- +-- Latch Sleep breakdown + +ttitle lef 'Latch Sleep breakdown '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> ordered by misses desc' - + skip 2; + +column gets clear; +column name format a26 heading 'Latch Name' trunc; +column gets format 99,999,999,990 heading 'Get|Requests'; +column sleeps format 99,999,990 heading 'Sleeps'; +column spin_gets format 99,999,990 heading 'Spin|Gets'; +column misses format 999,999,990 heading 'Misses'; + +select b.name name + , e.gets - b.gets gets + , e.misses - b.misses misses + , e.sleeps - b.sleeps sleeps + , e.spin_gets - b.spin_gets spin_gets + from stats$latch b + , stats$latch e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.dbid = e.dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and b.name = e.name + and e.sleeps - b.sleeps > 0 + order by misses desc; + + + +-- +-- Latch Miss sources + +ttitle lef 'Latch Miss Sources '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> only latches with sleeps are shown' - + skip 1 - + lef '-> ordered by name, sleeps desc' - + skip 2; + +column parent format a24 heading 'Latch Name' trunc; +column where_from format a26 heading 'Where' trunc; +column nwmisses format 99,990 heading 'NoWait|Misses'; +column sleeps format 9,999,990 heading ' Sleeps'; +column waiter_sleeps format 999,999 heading 'Waiter|Sleeps'; + +select e.parent_name parent + , e.where_in_code where_from + , e.nwfail_count - nvl(b.nwfail_count,0) nwmisses + , e.sleep_count - nvl(b.sleep_count,0) sleeps + , e.wtr_slp_count - nvl(b.wtr_slp_count,0) waiter_sleeps + from stats$latch_misses_summary b + , stats$latch_misses_summary e + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.parent_name(+) = e.parent_name + and b.where_in_code(+) = e.where_in_code + and e.sleep_count > nvl(b.sleep_count,0) + order by e.parent_name, sleeps desc; + + + +-- +-- Parent Latch + +ttitle lef 'Parent Latch Statistics ' - + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> only latches with sleeps are shown' - + skip 1 - + lef '-> ordered by name' - + skip 2; + +column name format a29 heading 'Latch Name' trunc; + +select l.name parent + , lp.gets + , lp.misses + , lp.sleeps + , lp.spin_gets + from (select e.instance_number, e.dbid, e.snap_id, e.latch# + , e.gets - b.gets gets + , e.misses - b.misses misses + , e.sleeps - b.sleeps sleeps + , e.spin_gets - b.spin_gets spin_gets + from stats$latch_parent b + , stats$latch_parent e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.dbid = e.dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and b.latch# = e.latch# + and e.sleeps - b.sleeps > 0 + ) lp + , stats$latch l + where l.snap_id = lp.snap_id + and l.dbid = lp.dbid + and l.instance_number = lp.instance_number + and l.latch# = lp.latch# + order by name; + + + +-- +-- Latch Children + +ttitle lef 'Child Latch Statistics ' - + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> only latches with sleeps/gets > 1/100000 are shown' - + skip 1 - + lef '-> ordered by name, gets desc' - + skip 2; + +column name format a22 heading 'Latch Name' trunc; +column child format 999999 heading 'Child|Num'; +column gets format 999,999,990 heading 'Get|Requests'; +column spin_gets format 99,999,990 heading 'Spin|Gets'; + +select l.name + , lc.child + , lc.gets + , lc.misses + , lc.sleeps + , lc.spin_gets + from (select /*+ ordered use_hash(b) */ + e.instance_number, e.dbid, e.snap_id, e.latch# + , e.child# child + , e.gets - b.gets gets + , e.misses - b.misses misses + , e.sleeps - b.sleeps sleeps + , e.spin_gets - b.spin_gets spin_gets + from stats$latch_children e + , stats$latch_children b + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.dbid = e.dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and b.latch# = e.latch# + and b.child# = e.child# + and e.sleeps - b.sleeps > 0 + and (e.sleeps - b.sleeps) + / (e.gets - b.gets) > .00001 + ) lc + , stats$latch l + where l.snap_id = lc.snap_id + and l.dbid = lc.dbid + and l.instance_number = lc.instance_number + and l.latch# = lc.latch# + order by name, gets desc; + + +-- +-- Mutex Statistics + +ttitle lef 'Mutex Sleep '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> ordered by Wait Time desc' - + skip 2; + +column mux format a18 heading 'Mutex Type' trunc; +column loc format a32 heading 'Location' trunc; +column sleeps format 9,999,999,990 heading 'Sleeps'; +column wt format 9,999,990.9 heading 'Wait |Time (s)'; + +select e.mutex_type mux + , e.location loc + , e.sleeps - nvl(b.sleeps, 0) sleeps + , (e.wait_time - nvl(b.wait_time, 0))/&ustos wt + from stats$mutex_sleep b + , stats$mutex_sleep e + where b.snap_id(+) = :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and b.mutex_type(+) = e.mutex_type + and b.location(+) = e.location + and e.sleeps - nvl(b.sleeps, 0) > 0 + order by e.wait_time - nvl(b.wait_time, 0) desc; + + + +-- +-- Segment Statistics + +-- Logical Reads +ttitle lef 'Segments by Logical Reads ' - + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Segment Logical Reads Threshold: ' format 99999999 eslr - + skip 1 - + '-> Pct Total shows % of logical reads for each top segment compared with total' - + skip 1 - + ' logical reads for all segments captured by the Snapshot' - + skip 2; + +column owner heading "Owner" format a10 trunc +column tablespace_name heading "Tablespace" format a10 trunc +column object_name heading "Object Name" format a20 trunc +column subobject_name heading "Subobject|Name" format a12 trunc +column object_type heading "Obj.|Type" format a5 trunc +col ratio heading " Pct|Total" format a5 + +column logical_reads heading "Logical|Reads" format 999,999,999 + +select n.owner + , n.tablespace_name + , n.object_name + , case when length(n.subobject_name) < 11 then + n.subobject_name + else + substr(n.subobject_name,length(n.subobject_name)-9) + end subobject_name + , n.object_type + , r.logical_reads + , substr(to_char(r.ratio * 100,'999.9MI'), 1, 5) ratio + from stats$seg_stat_obj n + , (select * + from (select e.dataobj# + , e.obj# + , e.ts# + , e.dbid + , e.logical_reads - nvl(b.logical_reads, 0) logical_reads + , ratio_to_report(e.logical_reads - nvl(b.logical_reads, 0)) over () ratio + from stats$seg_stat e + , stats$seg_stat b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.ts#(+) = e.ts# + and b.obj#(+) = e.obj# + and b.dataobj#(+) = e.dataobj# + and e.logical_reads - nvl(b.logical_reads, 0) > 0 + order by logical_reads desc) d + where rownum <= &&top_n_segstat) r + where n.dataobj# = r.dataobj# + and n.obj# = r.obj# + and n.ts# = r.ts# + and n.dbid = r.dbid + and 7 <= (select snap_level from stats$snapshot where snap_id = :bid and dbid = :dbid and instance_number = :inst_num ) + order by logical_reads desc; + + +-- Physical Reads +set newpage 2 +ttitle lef 'Segments by Physical Reads '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Segment Physical Reads Threshold: ' espr - + skip 2 + +column physical_reads heading "Physical|Reads" format 999,999,999 + +select n.owner + , n.tablespace_name + , n.object_name + , case when length(n.subobject_name) < 11 then + n.subobject_name + else + substr(n.subobject_name,length(n.subobject_name)-9) + end subobject_name + , n.object_type + , r.physical_reads + , substr(to_char(r.ratio * 100,'999.9MI'), 1, 5) ratio + from stats$seg_stat_obj n + , (select * + from (select e.dataobj# + , e.obj# + , e.ts# + , e.dbid + , e.physical_reads - nvl(b.physical_reads, 0) physical_reads + , ratio_to_report(e.physical_reads - nvl(b.physical_reads, 0)) over () ratio + from stats$seg_stat e + , stats$seg_stat b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.ts#(+) = e.ts# + and b.obj#(+) = e.obj# + and b.dataobj#(+) = e.dataobj# + and e.physical_reads - nvl(b.physical_reads, 0) > 0 + order by physical_reads desc) d + where rownum <= &&top_n_segstat) r + where n.dataobj# = r.dataobj# + and n.obj# = r.obj# + and n.ts# = r.ts# + and n.dbid = r.dbid + and 7 <= (select snap_level from stats$snapshot where snap_id = :bid and dbid = :dbid and instance_number = :inst_num ) + order by physical_reads desc; + + +-- Row Lock Waits +set newpage 0 +ttitle lef 'Segments by Row Lock Waits '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Segment Row Lock Waits Threshold: ' esrl - + skip 2 + +column row_lock_waits heading "Row|Lock|Waits" format 999,999,999 + +select n.owner + , n.tablespace_name + , n.object_name + , case when length(n.subobject_name) < 11 then + n.subobject_name + else + substr(n.subobject_name,length(n.subobject_name)-9) + end subobject_name + , n.object_type + , r.row_lock_waits + , substr(to_char(r.ratio * 100,'999.9MI'), 1, 5) ratio + from stats$seg_stat_obj n + , (select * + from (select e.dataobj# + , e.obj# + , e.ts# + , e.dbid + , e.row_lock_waits - nvl(b.row_lock_waits, 0) row_lock_waits + , ratio_to_report(e.row_lock_waits - nvl(b.row_lock_waits, 0)) over () ratio + from stats$seg_stat e + , stats$seg_stat b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.ts#(+) = e.ts# + and b.obj#(+) = e.obj# + and b.dataobj#(+) = e.dataobj# + and e.row_lock_waits - nvl(b.row_lock_waits, 0) > 0 + order by row_lock_waits desc) d + where rownum <= &&top_n_segstat) r + where n.dataobj# = r.dataobj# + and n.obj# = r.obj# + and n.ts# = r.ts# + and n.dbid = r.dbid + and 7 <= (select snap_level from stats$snapshot where snap_id = :bid and dbid = :dbid and instance_number = :inst_num ) + order by row_lock_waits desc; + + +-- ITL Waits +set newpage 2 +ttitle lef 'Segments by ITL Waits ' - + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Segment ITL Waits Threshold: ' esiw - + skip 2 + +column itl_waits heading "ITL|Waits" format 999,999,999 + +select n.owner + , n.tablespace_name + , n.object_name + , n.subobject_name + , n.object_type + , r.itl_waits + , substr(to_char(r.ratio * 100,'999.9MI'), 1, 5) ratio + from stats$seg_stat_obj n + , (select * + from (select e.dataobj# + , e.obj# + , e.ts# + , e.dbid + , e.itl_waits - nvl(b.itl_waits, 0) itl_waits + , ratio_to_report(e.itl_waits - nvl(b.itl_waits, 0)) over () ratio + from stats$seg_stat e + , stats$seg_stat b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.ts#(+) = e.ts# + and b.obj#(+) = e.obj# + and b.dataobj#(+) = e.dataobj# + and e.itl_waits - nvl(b.itl_waits, 0) > 0 + order by itl_waits desc) d + where rownum <= &&top_n_segstat) r + where n.dataobj# = r.dataobj# + and n.obj# = r.obj# + and n.ts# = r.ts# + and n.dbid = r.dbid + and 7 <= (select snap_level from stats$snapshot where snap_id = :bid and dbid = :dbid and instance_number = :inst_num ) + order by itl_waits desc; + + +-- Buffer Busy Waits +set newpage 2 +ttitle lef 'Segments by Buffer Busy Waits '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Segment Buffer Busy Waits Threshold: ' esbb - + skip 2 + +column buffer_busy_waits heading "Buffer|Busy|Waits" format 999,999,999 + +select n.owner + , n.tablespace_name + , n.object_name + , case when length(n.subobject_name) < 11 then + n.subobject_name + else + substr(n.subobject_name,length(n.subobject_name)-9) + end subobject_name + , n.object_type + , r.buffer_busy_waits + , substr(to_char(r.ratio * 100,'999.9MI'), 1, 5) ratio + from stats$seg_stat_obj n + , (select * + from (select e.dataobj# + , e.obj# + , e.ts# + , e.dbid + , e.buffer_busy_waits - nvl(b.buffer_busy_waits, 0) buffer_busy_waits + , ratio_to_report(e.buffer_busy_waits - nvl(b.buffer_busy_waits, 0)) over () ratio + from stats$seg_stat e + , stats$seg_stat b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.ts#(+) = e.ts# + and b.obj#(+) = e.obj# + and b.dataobj#(+) = e.dataobj# + and e.buffer_busy_waits - nvl(b.buffer_busy_waits, 0) > 0 + order by buffer_busy_waits desc) d + where rownum <= &&top_n_segstat) r + where n.dataobj# = r.dataobj# + and n.obj# = r.obj# + and n.ts# = r.ts# + and n.dbid = r.dbid + and 7 <= (select snap_level from stats$snapshot where snap_id = :bid and dbid = :dbid and instance_number = :inst_num ) + order by buffer_busy_waits desc; + + +-- GC Buffer Busy Waits +set newpage 0 +ttitle lef 'Segments by Global Cache Buffer Busy Waits '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> There is no specific Threshold for Segment GC Buffer Busy Waits'- + skip 2 + +column gc_buffer_busy heading "GC Buffer|Busy|Waits" format 999,999,999 + +select n.owner + , n.tablespace_name + , n.object_name + , case when length(n.subobject_name) < 11 then + n.subobject_name + else + substr(n.subobject_name,length(n.subobject_name)-9) + end subobject_name + , n.object_type + , r.gc_buffer_busy + , substr(to_char(r.ratio * 100,'999.9MI'), 1, 5) ratio + from stats$seg_stat_obj n + , (select * + from (select e.dataobj# + , e.obj# + , e.ts# + , e.dbid + , e.gc_buffer_busy - nvl(b.gc_buffer_busy, 0) gc_buffer_busy + , ratio_to_report(e.gc_buffer_busy - nvl(b.gc_buffer_busy, 0)) over () ratio + from stats$seg_stat e + , stats$seg_stat b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.ts#(+) = e.ts# + and b.obj#(+) = e.obj# + and b.dataobj#(+) = e.dataobj# + and e.gc_buffer_busy - nvl(b.gc_buffer_busy, 0) > 0 + order by gc_buffer_busy desc) d + where rownum <= &&top_n_segstat) r + where n.dataobj# = r.dataobj# + and n.obj# = r.obj# + and n.ts# = r.ts# + and n.dbid = r.dbid + and 7 <= (select snap_level from stats$snapshot where snap_id = :bid and dbid = :dbid and instance_number = :inst_num ) + order by gc_buffer_busy desc; + + +-- CR Blocks Received (was Served in versions prior to 10g) +set newpage 2 +ttitle lef 'Segments by CR Blocks Received ' - + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Global Cache CR Blocks Received Threshold: ' ecrb - + skip 2 + +column cr_blocks_received heading "CR|Blocks|Recevd" format 999,999,999 + +select n.owner + , n.tablespace_name + , n.object_name + , case when length(n.subobject_name) < 11 then + n.subobject_name + else + substr(n.subobject_name,length(n.subobject_name)-9) + end subobject_name + , n.object_type + , r.cr_blocks_received + , substr(to_char(r.ratio * 100,'999.9MI'), 1, 5) ratio + from stats$seg_stat_obj n + , (select * + from (select e.dataobj# + , e.obj# + , e.ts# + , e.dbid + , e.gc_cr_blocks_received-nvl(b.gc_cr_blocks_received, 0) cr_blocks_received + , ratio_to_report(e.gc_cr_blocks_received - nvl(b.gc_cr_blocks_received, 0)) over () ratio + from stats$seg_stat e + , stats$seg_stat b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.ts#(+) = e.ts# + and b.obj#(+) = e.obj# + and b.dataobj#(+) = e.dataobj# + and e.gc_cr_blocks_received-nvl(b.gc_cr_blocks_received,0)>0 + order by cr_blocks_received desc) d + where rownum <= &&top_n_segstat) r + where n.dataobj# = r.dataobj# + and n.obj# = r.obj# + and n.ts# = r.ts# + and n.dbid = r.dbid + and 7 <= (select snap_level from stats$snapshot where snap_id = :bid and dbid = :dbid and instance_number = :inst_num ) + and :para ='YES' + order by cr_blocks_received desc; + + +-- Current Blocks Received (was Served in versions prior to 10g) +set newpage 2 +ttitle lef 'Segments By Current Blocks Received ' - + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> End Global Cache CU Blocks Received Threshold: ' ecub - + skip 2 + +column cu_blocks_received heading "CU|Blocks|Recevd" format 999,999,999 + +select n.owner + , n.tablespace_name + , n.object_name + , case when length(n.subobject_name) < 11 then + n.subobject_name + else + substr(n.subobject_name,length(n.subobject_name)-9) + end subobject_name + , n.object_type + , r.cu_blocks_received + , substr(to_char(r.ratio * 100,'999.9MI'), 1, 5) ratio + from stats$seg_stat_obj n + , (select * + from (select e.dataobj# + , e.obj# + , e.ts# + , e.dbid + , e.gc_current_blocks_received-nvl(b.gc_current_blocks_received, 0) cu_blocks_received + , ratio_to_report(e.gc_current_blocks_received - nvl(b.gc_current_blocks_received, 0)) over () ratio + from stats$seg_stat e + , stats$seg_stat b + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.ts#(+) = e.ts# + and b.obj#(+) = e.obj# + and b.dataobj#(+) = e.dataobj# + and e.gc_current_blocks_received-nvl(b.gc_current_blocks_received,0)>0 + order by cu_blocks_received desc) d + where rownum <= &&top_n_segstat) r + where n.dataobj# = r.dataobj# + and n.obj# = r.obj# + and n.ts# = r.ts# + and n.dbid = r.dbid + and 7 <= (select snap_level from stats$snapshot where snap_id = :bid and dbid = :dbid and instance_number = :inst_num ) + and :para ='YES' + order by cu_blocks_received desc; + + +set newpage 0 +-- +-- Dictionary Cache + +ttitle lef 'Dictionary Cache Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '->"Pct Misses" should be very low (< 2% in most cases)'- + skip 1 - + lef '->"Final Usage" is the number of cache entries being used in End Snapshot'- + skip 2; + +column param format a25 heading 'Cache' trunc; +column gets format 999,999,990 heading 'Get|Requests'; +column getm format 990.9 heading 'Pct|Miss'; +column scans format 99,990 heading 'Scan|Reqs'; +column scanm format 90.9 heading 'Pct|Miss'; +column mods format 999,990 heading 'Mod|Reqs'; +column usage format 9,999,990 heading 'Final|Usage'; + +select lower(b.parameter) param + , e.gets - b.gets gets + , to_number(decode(e.gets,b.gets,null, + (e.getmisses - b.getmisses) * 100/(e.gets - b.gets))) getm + , e.scans - b.scans scans + , to_number(decode(e.scans,b.scans,null, + (e.scanmisses - b.scanmisses) * 100/(e.scans - b.scans))) scanm + , e.modifications - b.modifications mods + , e.usage usage + from stats$rowcache_summary b + , stats$rowcache_summary e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.dbid = e.dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and b.parameter = e.parameter + and e.gets - b.gets > 0 + order by param; + + +ttitle off; +set newpage 2; + +column dreq format 999,999,999 heading 'GES|Requests' +column dcon format 999,999,999 heading 'GES|Conflicts' +column drel format 999,999,999 heading 'GES|Releases' + +select lower(b.parameter) param + , e.dlm_requests - b.dlm_requests dreq + , e.dlm_conflicts - b.dlm_conflicts dcon + , e.dlm_releases - b.dlm_releases drel + from stats$rowcache_summary b + , stats$rowcache_summary e + where b.snap_id = :bid + and e.snap_id = :eid + and b.dbid = :dbid + and e.dbid = :dbid + and b.dbid = e.dbid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and b.parameter = e.parameter + and e.dlm_requests - b.dlm_requests > 0 + and :para = 'YES' + order by param; + + + +-- +-- Library Cache + +set newpage 2; +ttitle lef 'Library Cache Activity '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '->"Pct Misses" should be very low ' skip 2; + +column namespace heading 'Namespace'; +column gets format 999,999,990 heading 'Get|Requests'; +column pins format 9,999,999,990 heading 'Pin|Requests' just c; +column getm format 990.9 heading 'Pct|Miss' just c; +column pinm format 990.9 heading 'Pct|Miss' just c; +column reloads format 9,999,990 heading 'Reloads'; +column inv format 999,990 heading 'Invali-|dations'; + +select e.namespace + , e.gets - b.gets gets + , to_number(decode(e.gets,b.gets,null, + 100 - (e.gethits - b.gethits) * 100/(e.gets - b.gets))) getm + , e.pins - b.pins pins + , to_number(decode(e.pins,b.pins,null, + 100 - (e.pinhits - b.pinhits) * 100/(e.pins - b.pins))) pinm + , e.reloads - b.reloads reloads + , e.invalidations - b.invalidations inv + from stats$librarycache b + , stats$librarycache e + where b.snap_id = :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid = e.dbid + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and b.namespace = e.namespace + and e.gets - b.gets > 0; + + + +ttitle off; +set newpage 2; + +column dlreq format 999,999,999 heading 'GES Lock|Requests'; +column dpreq format 999,999,999 heading 'GES Pin|Requests'; +column dprel format 999,999,999 heading 'GES Pin|Releases'; +column direq format 99,999,999 heading 'GES Inval|Requests' +column dinv format 99,999,999 heading 'GES Invali-|dations'; + +select e.namespace + , e.dlm_lock_requests - b.dlm_lock_requests dlreq + , e.dlm_pin_requests - b.dlm_pin_requests dpreq + , e.dlm_pin_releases - b.dlm_pin_releases dprel + , e.dlm_invalidation_requests - b.dlm_invalidation_requests direq + , e.dlm_invalidations - b.dlm_invalidations dinv + from stats$librarycache b + , stats$librarycache e + where b.snap_id = :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid = e.dbid + and e.instance_number = :inst_num + and b.instance_number = e.instance_number + and b.namespace = e.namespace + and e.gets - b.gets > 0 + and :para = 'YES'; + +set newpage 0; + + + + +-- +-- Miscellaneous GES RAC Statistics + +ttitle lef 'Global Enqueue Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 2; + +column st format a33 heading 'Statistic' trunc; +column dif format 999,999,999,990 heading 'Total'; +column ps format 9,999,990.9 heading 'per Second'; +column pt format 9,999,990.9 heading 'per Trans'; + +select b.name st + , e.value - b.value dif + , round(e.value - b.value)/:ela ps + , round(e.value - b.value)/:tran pt + from stats$dlm_misc b + , stats$dlm_misc e + where b.snap_id = :bid + and e.snap_id = :eid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.dbid = :dbid + and e.dbid = :dbid + and e.statistic# = b.statistic# + and :para = 'YES' + order by b.name; + + +-- +-- CR Blocks Served Statistics (RAC) + +ttitle lef 'Global CR Served Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 2; + +set heading off; + +column nl format a30 newline +column val format 9,999,999,999,990 + +select 'Statistic Total' + , '------------------------------' nl + , '------------------' + , 'CR Block Requests ' nl + , e.cr_requests - b.cr_requests val + , 'CURRENT Block Requests ' nl + , e.current_requests - b.current_requests val + , 'Data Block Requests ' nl + , e.data_requests - b.data_requests val + , 'Undo Block Requests ' nl + , e.undo_requests - b.undo_requests val + , 'TX Block Requests ' nl + , e.tx_requests - b.tx_requests val + , 'Current Results ' nl + , e.current_results - b.current_results val + , 'Private results ' nl + , e.private_results - b.private_results val + , 'Zero Results ' nl + , e.zero_results - b.zero_results val + , 'Disk Read Results ' nl + , e.disk_read_results -b.disk_read_results val + , 'Fail Results ' nl + , e.fail_results - b.fail_results val + , 'Fairness Down Converts ' nl + , e.fairness_down_converts - b.fairness_down_converts val + , 'Fairness Clears ' nl + , e.fairness_clears - b.fairness_clears val + , 'Free GC Elements ' nl + , e.free_gc_elements - b.free_gc_elements val + , 'Flushes ' nl + , e.flushes - b.flushes val + , 'Flushes Queued ' nl + , e.flushes_queued - b.flushes_queued val + , 'Flush Queue Full ' nl + , e.flush_queue_full - b.flush_queue_full val + , 'Flush Max Time (us) ' nl + , e.flush_max_time - b.flush_max_time val + , 'Light Works ' nl + , e.light_works - b.light_works val + , 'Errors ' nl + , e.errors - b.errors val + from stats$cr_block_server b + , stats$cr_block_server e + where b.snap_id = :bid + and e.snap_id = :eid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.dbid = :dbid + and e.dbid = :dbid + and :para = 'YES'; + +set newpage 2; + +-- +-- CURRENT Blocks Served Statistics (RAC) + +ttitle lef 'Global CURRENT Served Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + '-> Pins = CURRENT Block Pin Operations' - + skip 1 - + '-> Flushes = Redo Flush before CURRENT Block Served Operations' - + skip 1 - + '-> Writes = CURRENT Block Fusion Write Operations' - + skip 2; + +column tot format 999,999,990 +column stat newline + +select 'Statistic ' + , ' Total' + , ' % <1ms' + , ' % <10ms' + , '% <100ms' + , ' % <1s' + , ' % <10s' + , '----------- ----------- -------- -------- -------- -------- --------' + , 'Pins ' stat + , pins tot + , lpad(to_char(decode(pins,0,0,100*pin1/pins),'990.99'),8,' ') + , lpad(to_char(decode(pins,0,0,100*pin10/pins),'990.99'),8,' ') + , lpad(to_char(decode(pins,0,0,100*pin100/pins),'990.99'),8,' ') + , lpad(to_char(decode(pins,0,0,100*pin1000/pins),'990.99'),8,' ') + , lpad(to_char(decode(pins,0,0,100*pin10000/pins),'990.99'),8,' ') + , 'Flushes ' stat + , flushes tot + , lpad(to_char(decode(flushes,0,0,100*flush1/flushes),'990.99'),8,' ') + , lpad(to_char(decode(flushes,0,0,100*flush10/flushes),'990.99'),8,' ') + , lpad(to_char(decode(flushes,0,0,100*flush100/flushes),'990.99'),8,' ') + , lpad(to_char(decode(flushes,0,0,100*flush1000/flushes),'990.99'),8,' ') + , lpad(to_char(decode(flushes,0,0,100*flush10000/flushes),'990.99'),8,' ') + , 'Writes ' stat + , writes tot + , lpad(to_char(decode(writes,0,0,100*write1/writes),'990.99'),8,' ') + , lpad(to_char(decode(writes,0,0,100*write10/writes),'990.99'),8,' ') + , lpad(to_char(decode(writes,0,0,100*write100/writes),'990.99'),8,' ') + , lpad(to_char(decode(writes,0,0,100*write1000/writes),'990.99'),8,' ') + , lpad(to_char(decode(writes,0,0,100*write10000/writes),'990.99'),8,' ') + from (select (e.pin1+e.pin10+e.pin100+e.pin1000+e.pin10000 - + (b.pin1+b.pin10+b.pin100+b.pin1000+b.pin10000) + ) pins + , e.pin1 - b.pin1 pin1 + , e.pin10 - b.pin10 pin10 + , e.pin100 - b.pin100 pin100 + , e.pin1000 - b.pin1000 pin1000 + , e.pin10000 - b.pin10000 pin10000 + , (e.flush1+e.flush10+e.flush100+e.flush1000+e.flush10000 - + (b.flush1+b.flush10+b.flush100+b.flush1000+b.flush10000) + ) flushes + , e.flush1 - b.flush1 flush1 + , e.flush10 - b.flush10 flush10 + , e.flush100 - b.flush100 flush100 + , e.flush1000 - b.flush1000 flush1000 + , e.flush10000 - b.flush10000 flush10000 + , (e.write1+e.write10+e.write100+e.write1000+e.write10000 - + (b.write1+b.write10+b.write100+b.write1000+b.write10000) + ) writes + , e.write1 - b.write1 write1 + , e.write10 - b.write10 write10 + , e.write100 - b.write100 write100 + , e.write1000 - b.write1000 write1000 + , e.write10000 - b.write10000 write10000 + from stats$current_block_server b + , stats$current_block_server e + where b.snap_id = :bid + and e.snap_id = :eid + and b.instance_number = :inst_num + and e.instance_number = :inst_num + and b.dbid = :dbid + and e.dbid = :dbid + and :para = 'YES'); + +-- +-- Cache Transfer Statistics (RAC) + +ttitle lef 'Global Cache Transfer Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Immediate (Immed) - Block Transfer NOT impacted by Remote Processing Delays' - + skip 1 - + lef ' Busy (Busy) - Block Transfer impacted by Remote Contention' - + skip 1 - + lef ' Congested (Congst) - Block Transfer impacted by Remote System Load' - + skip 1 - + '-> ordered by CR + Current Blocks Received desc' - + skip 2 - + ' -------------- CR ------------- ----------- Current -----------'; + +set heading on; + +column inst format 990 heading 'Inst|No' +column class format a8 heading 'Block|Class' trunc +column totcr format 99,999,990 heading 'Blocks|Received' +column totcu format 99,999,990 heading 'Blocks|Received' +column blkimm format 999.9 heading '%|Immed' +column blkbus format 999.9 heading '%|Busy' +column blkcgt format 999.9 heading '%|Congst' + +-- +-- Transfer Cache Statistics detailed per instance +-- Report only if define variable cache_xfer_per_instance = 'Y' + +with instance_cache_transfer as ( + select snap_id + , instance + , case when class in ('data block', 'undo header', 'undo block') + then class + else 'others' end as class + , sum(cr_block) cr_block + , sum(cr_busy) cr_busy + , sum(cr_congested) cr_congested + , sum(current_block) current_block + , sum(current_busy) current_busy + , sum(current_congested) current_congested + , sum(cr_block) + sum(cr_busy) + sum(cr_congested) totcr + , sum(current_block) + sum(current_busy) + sum(current_congested) totcu + from stats$instance_cache_transfer + where instance_number = :inst_num + and dbid = :dbid + and '&&cache_xfer_per_instance' = 'Y' + and :para = 'YES' + group by snap_id + , instance + , case when class in ('data block', 'undo header', 'undo block') + then class + else 'others' end) +select e.instance inst + , e.class class + , e.totcr - nvl(b.totcr , 0) totcr + , decode(e.totcr-nvl(b.totcr, 0), 0, to_number(NULL), (e.cr_block-nvl(b.cr_block, 0))*100/(e.totcr-nvl(b.totcr, 0))) blkimm + , decode(e.totcr-nvl(b.totcr, 0), 0, to_number(NULL), (e.cr_busy -nvl(b.cr_busy, 0))*100/(e.totcr-nvl(b.totcr, 0))) blkbus + , decode(e.totcr-nvl(b.totcr,0),0,to_number(NULL),(e.cr_congested-nvl(b.cr_congested, 0))*100/(e.totcr-nvl(b.totcr,0))) blkcgt + , e.totcu - nvl(b.totcu , 0) totcu + , decode(e.totcu-nvl(b.totcu, 0), 0, to_number(NULL), (e.current_block-nvl(b.current_block, 0))*100/(e.totcu-nvl(b.totcu, 0))) blkimm + , decode(e.totcu-nvl(b.totcu, 0), 0, to_number(NULL), (e.current_busy -nvl(b.current_busy, 0))*100/(e.totcu-nvl(b.totcu, 0))) blkbus + , decode(e.totcu-nvl(b.totcu,0),0,to_number(NULL),(e.current_congested-nvl(b.current_congested, 0))*100/(e.totcu-nvl(b.totcu,0))) blkcgt + from (select * from instance_cache_transfer + where snap_id = :bid) b + , (select * from instance_cache_transfer + where snap_id = :eid) e + where b.class(+) = e.class + and b.instance(+) = e.instance + and e.totcr + e.totcu - nvl(b.totcr, 0) - nvl(b.totcu, 0) > 0 + order by totcr + totcu desc; + + +-- +-- Transfer Cache Statistics aggregated per class +-- Report only if define variable cache_xfer_per_instance = 'N' + +column class format a12 + +with class_cache_transfer as ( + select snap_id + , case when class in ('data block', 'undo header', 'undo block') + then class + else 'others' end as class + , sum(cr_block) cr_block + , sum(cr_busy) cr_busy + , sum(cr_congested) cr_congested + , sum(current_block) current_block + , sum(current_busy) current_busy + , sum(current_congested) current_congested + , sum(cr_block) + sum(cr_busy) + sum(cr_congested) totcr + , sum(current_block) + sum(current_busy) + sum(current_congested) totcu + from stats$instance_cache_transfer + where instance_number = :inst_num + and dbid = :dbid + and '&&cache_xfer_per_instance' = 'N' + and :para = 'YES' + group by snap_id + , case when class in ('data block', 'undo header', 'undo block') + then class + else 'others' end) +select e.class + , e.totcr - nvl(b.totcr , 0) totcr + , decode(e.totcr-nvl(b.totcr, 0), 0, to_number(NULL), (e.cr_block-nvl(b.cr_block, 0))*100/(e.totcr-nvl(b.totcr, 0))) blkimm + , decode(e.totcr-nvl(b.totcr, 0), 0, to_number(NULL), (e.cr_busy-nvl(b.cr_busy, 0))*100/(e.totcr-nvl(b.totcr, 0))) blkbus + , decode(e.totcr-nvl(b.totcr,0),0,to_number(NULL),(e.cr_congested-nvl(b.cr_congested, 0))*100/(e.totcr-nvl(b.totcr,0))) blkcgt + , e.totcu - nvl(b.totcu , 0) totcu + , decode(e.totcu-nvl(b.totcu, 0), 0, to_number(NULL), (e.current_block-nvl(b.current_block, 0))*100/(e.totcu-nvl(b.totcu, 0))) blkimm + , decode(e.totcu-nvl(b.totcu, 0), 0, to_number(NULL), (e.current_busy-nvl(b.current_busy, 0))*100/(e.totcu-nvl(b.totcu, 0))) blkbus + , decode(e.totcu-nvl(b.totcu,0),0,to_number(NULL),(e.current_congested-nvl(b.current_congested, 0))*100/(e.totcu-nvl(b.totcu,0))) blkcgt + from (select * from class_cache_transfer + where snap_id = :bid) b + , (select * from class_cache_transfer + where snap_id = :eid) e + where b.class(+) = e.class + and (e.totcr + e.totcu - nvl(b.totcr, 0) - nvl(b.totcu, 0)) > 0 + order by totcr + totcu desc; + +set newpage 0; + + +-- +-- Remastering Stats + +set heading off; + +ttitle lef 'Dynamic Remastering Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 2; + +column numX format 9,999,999,990 +column numXX format 99,999,990.9 + +select ' Remaster Operations:' ch25n + , e.remaster_ops - nvl(b.remaster_ops, 0) numX + , ' Remaster Time(s):' ch20 + , (e.remaster_time - nvl(b.remaster_time, 0))/&cstos numXX + , ' Remastered Objects:' ch25n + , e.remastered_objects - nvl(b.remastered_objects, 0) numX + , ' Quiesce Time(s):' ch20 + , (e.quiesce_time - nvl(b.quiesce_time, 0))/&cstos numXX + , ' Affinity Objects (Beg):' ch25n + , b.current_objects numX + , ' Freeze Time(s):' ch20 + , (e.freeze_time - nvl(b.freeze_time, 0))/&cstos numXX + , ' Affinity Objects (End):' ch25n + , e.current_objects numX + , ' Cleanup Time(s):' ch20 + , (e.cleanup_time - nvl(b.cleanup_time, 0))/&cstos numXX + , ' Replayed Locks Sent:' ch25n + , e.replayed_locks_sent - nvl(b.replayed_locks_sent, 0) numX + , ' Replay Time(s):' ch20 + , (e.replay_time - nvl(b.replay_time, 0))/&cstos numXX + , ' Replayed Locks Recvd:' ch25n + , e.replayed_locks_received - nvl(b.replayed_locks_received, 0) numX + , ' Fixwrite Time(s):' ch20 + , (e.fixwrite_time - nvl(b.fixwrite_time, 0))/&cstos numXX + , ' Resources Cleaned:' ch25n + , e.resources_cleaned - nvl(b.resources_cleaned, 0) numX + , ' Sync Time(s):' ch20 + , (e.sync_time - nvl(b.sync_time, 0))/&cstos numXX + from stats$dynamic_remaster_stats b + , stats$dynamic_remaster_stats e + where b.snap_id(+) = :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid(+) = e.dbid + and e.instance_number = :inst_num + and b.instance_number(+) = e.instance_number + and e.remaster_ops - nvl(b.remaster_ops, 0) > 0; + +set heading on; + + + +-- +-- Streams + +ttitle lef 'Streams Capture '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> * indicates Capture process (re)started between Begin/End snaps' - + skip 1 - + lef '-> Top &&streams_top_n ordered by Messages Queued desc' - + skip 2; + +col capture_name format a20 trunc heading 'Capture Name' +col a heading '*' +col capture_rate format 9,999 heading 'Captured|Msg/s' just c +col enqueue_rate format 9,999 heading 'Enq|Msg/s' just c +col pct_capture format 999 heading 'Capt|Time %' just c +col pct_lcr format 999 heading 'Msg|Creatn|Time %' just c +col pct_rule format 999 heading 'Rule|Time %' just c +col pct_enqueue format 999 heading 'Enq|Time %' just c +col pct_redo_wait format 999 heading 'Redo|Wait|Time %' just c +col pct_pause format 999 heading 'Pause|Time %' just c + +select capture_name + , a + , total_messages_captured/:ela capture_rate + , total_messages_enqueued/:ela enqueue_rate + , elapsed_capture_time + / ( elapsed_capture_time + elapsed_lcr_time + elapsed_rule_time + + elapsed_enqueue_time + elapsed_redo_wait_time + elapsed_pause_time + + .0000001 + ) + * 100 pct_capture + , elapsed_lcr_time + / (elapsed_capture_time + elapsed_lcr_time + elapsed_rule_time + + elapsed_enqueue_time + elapsed_redo_wait_time + elapsed_pause_time + + .0000001 + ) + * 100 pct_lcr + , elapsed_rule_time + / (elapsed_capture_time + elapsed_lcr_time + elapsed_rule_time + + elapsed_enqueue_time + elapsed_redo_wait_time + elapsed_pause_time + + .0000001) + * 100 pct_rule + , elapsed_enqueue_time + / (elapsed_capture_time + elapsed_lcr_time + elapsed_rule_time + + elapsed_enqueue_time + elapsed_redo_wait_time + elapsed_pause_time + + .0000001) + * 100 pct_enqueue + , elapsed_redo_wait_time + / (elapsed_capture_time + elapsed_lcr_time + elapsed_rule_time + + elapsed_enqueue_time + elapsed_redo_wait_time + elapsed_pause_time + + .0000001) + * 100 pct_redo_wait + , elapsed_pause_time + / (elapsed_capture_time + elapsed_lcr_time + elapsed_rule_time + + elapsed_enqueue_time + elapsed_redo_wait_time + elapsed_pause_time + + .0000001) + * 100 pct_pause + from (select e.capture_name + , decode( e.startup_time, b.startup_time, null, '*') a + , e.total_messages_captured - nvl(b.total_messages_captured, 0) total_messages_captured + , e.total_messages_enqueued - nvl(b.total_messages_enqueued, 0) total_messages_enqueued + , e.elapsed_capture_time - nvl(b.elapsed_capture_time ,0) elapsed_capture_time + , e.elapsed_lcr_time - nvl(b.elapsed_lcr_time,0) elapsed_lcr_time + , e.elapsed_rule_time - nvl(b.elapsed_rule_time, 0) elapsed_rule_time + , e.elapsed_enqueue_time - nvl(b.elapsed_enqueue_time,0) elapsed_enqueue_time + , e.elapsed_redo_wait_time - nvl(b.elapsed_redo_wait_time,0) elapsed_redo_wait_time + , e.elapsed_pause_time - nvl(b.elapsed_pause_time,0) elapsed_pause_time + from stats$streams_capture b + , stats$streams_capture e + where b.snap_id (+)= :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid (+)= e.dbid + and e.instance_number = :inst_num + and b.instance_number (+)= e.instance_number + and b.capture_name (+)= e.capture_name + and b.startup_time (+)= e.startup_time + order by e.total_messages_enqueued desc + ) + where rownum <= &&streams_top_n; + + +set newpage 2; + +ttitle lef 'Propagation Sender '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> * indicates Sender process (re)started between Begin/End snaps' - + skip 1 - + lef '-> Top &&streams_top_n ordered by Messages desc' - + skip 2; + +col qname format a22 trunc heading 'Queue' +col a heading '*' +col destination format a22 trunc heading 'Destination' +col msgs_per_sec format 99,999 heading 'Msg/s' just c +col kbyte_per_sec format 99,999 heading 'KB/s' just c +col pct_dequeue format 999 heading 'Deq|Time|%' just c +col pct_pickle format 999 heading 'Pickle|Time|%' just c +col pct_propagation format 999 heading 'Prop|Time|%' just c + +select qname + , dblink destination + , a + , total_msgs/:ela msgs_per_sec + , total_bytes/1024/:ela kbyte_per_sec + , elapsed_dequeue_time + / (elapsed_dequeue_time + elapsed_pickle_time + + elapsed_propagation_time + .0000001 + ) + * 100 pct_dequeue + , elapsed_pickle_time + / (elapsed_dequeue_time + elapsed_pickle_time + + elapsed_propagation_time + .0000001 + ) + * 100 pct_pickle + , elapsed_propagation_time + / (elapsed_dequeue_time + elapsed_pickle_time + + elapsed_propagation_time + .0000001 + ) + * 100 pct_propagation + from (select e.queue_schema||'.'||e.queue_name qname + , e.dblink dblink + , decode(e.startup_time, b.startup_time, null, '*') a + , e.total_msgs - nvl(b.total_msgs, 0) total_msgs + , e.total_bytes - nvl(b.total_bytes, 0) total_bytes + , e.elapsed_dequeue_time - nvl(b.elapsed_dequeue_time ,0) elapsed_dequeue_time + , e.elapsed_pickle_time - nvl(b.elapsed_pickle_time,0) elapsed_pickle_time + , e.elapsed_propagation_time - nvl(b.elapsed_propagation_time, 0) elapsed_propagation_time + from stats$propagation_sender b + , stats$propagation_sender e + where b.snap_id (+) = :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid (+) = e.dbid + and e.instance_number = :inst_num + and b.instance_number (+) = e.instance_number + and b.queue_schema (+) = e.queue_schema + and b.queue_name (+) = e.queue_name + and b.dblink (+) = e.dblink + and b.dst_queue_schema(+) = e.dst_queue_schema + and b.dst_queue_name (+) = e.dst_queue_name + and b.startup_time (+) = e.startup_time + order by e.total_msgs desc + ) + where rownum <= &&streams_top_n; + +set newpage 0; + + + +ttitle lef 'Propagation Receiver '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> * indicates Receiver process (re)started between Begin/End snaps' - + skip 1 - + lef '-> Top &&streams_top_n ordered by Source Queue Name, Source DB' - + skip 2; + +col src_queue_name format a25 heading 'Source|Queue' +col src_dbname format a35 heading 'Source|DB Name' +col a heading '*' +col pct_unpickle format 99 heading 'Un-|pickle|Time %' just c +col pct_rule format 99 heading 'Rule|Time|%' just c +col pct_enqueue format 99 heading 'Enq|Time|%' just c + +select src_queue_name + , src_dbname + , a + , elapsed_unpickle_time + / (elapsed_unpickle_time + elapsed_rule_time + elapsed_enqueue_time + + + .0000001 + ) + * 100 pct_unpickle + , elapsed_rule_time + / (elapsed_unpickle_time + elapsed_rule_time + elapsed_enqueue_time + + + .0000001 + ) + * 100 pct_rule + , elapsed_enqueue_time + / (elapsed_unpickle_time + elapsed_rule_time + elapsed_enqueue_time + + + .0000001 + ) + * 100 pct_enqueue + from (select e.src_queue_schema || '.'|| e.src_queue_name src_queue_name + , decode(e.src_dbname, '-', null, e.src_dbname) src_dbname + , decode(e.startup_time, b.startup_time, null, '*') a + , e.elapsed_unpickle_time - nvl(b.elapsed_unpickle_time,0) elapsed_unpickle_time + , e.elapsed_rule_time - nvl(b.elapsed_rule_time, 0) elapsed_rule_time + , e.elapsed_enqueue_time - nvl(b.elapsed_enqueue_time, 0) elapsed_enqueue_time + from stats$propagation_receiver b + , stats$propagation_receiver e + where b.snap_id (+) = :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid (+) = e.dbid + and e.instance_number = :inst_num + and b.instance_number (+) = e.instance_number + and b.src_queue_schema(+) = e.src_queue_schema + and b.src_queue_name (+) = e.src_queue_name + and b.src_dbname (+) = e.src_dbname + and b.dst_queue_schema(+) = e.dst_queue_schema + and b.dst_queue_name (+) = e.dst_queue_name + and b.startup_time (+) = e.startup_time + order by e.src_queue_name, e.src_dbname + ) + where rownum <= &&streams_top_n; + + + +set newpage 2; + +ttitle lef 'Streams Apply '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> * indicates Apply process (re)started between Begin/End snaps' - + skip 1 - + lef '-> Top &&streams_top_n ordered by Apply Transactions desc' - + skip 2; + +col apply_name format a19 trunc heading 'Apply Name' +col a heading '*' +col rate_received_txn format 9999 heading 'Rcv|Tx/s' just c +col rate_applied_txn format 9999 heading 'Apply|Tx/s' just c +col pct_wait_deps format 999 heading 'Wait|Deps|%' just c +col pct_wait_commits format 999 heading 'Wait|Comit|%' just c +col schedule_rate format 9999 heading 'Sched|Tx/s' just c +col reader_rate_deq format 9999 heading 'Read|Deq|Msg/s' just c +col reader_rate_sched format 99999 heading 'Read|Sched|Msg/s' just c +col server_apply_rate format 9999 heading 'Apply|Rate|Msg/s' just c +col server_pct_apply format 999 heading 'Apply|Time|%' just c +col server_pct_dequeue format 999 heading 'Deq|Time|%' just c + +select apply_name + , a + , coord_total_received/:ela rate_received_txn + , coord_total_applied/:ela rate_applied_txn + , decode( coord_total_applied, 0, 0 + , coord_total_wait_deps/coord_total_applied) pct_wait_deps + , decode( coord_total_applied, 0, 0 + , coord_total_wait_commits/coord_total_applied) pct_wait_commits + , decode( coord_elapsed_schedule_time, 0, 0 + , coord_total_applied/coord_elapsed_schedule_time) * 100 + schedule_rate + , reader_total_messages_dequeued/:ela reader_rate_deq + , decode( reader_elapsed_schedule_time, 0, 0 + , reader_total_messages_dequeued/reader_elapsed_schedule_time) + reader_rate_sched + , server_total_messages_applied/:ela server_apply_rate + , server_elapsed_apply_time + / (server_elapsed_dequeue_time+server_elapsed_apply_time+1) * 100 + server_pct_apply + , server_elapsed_dequeue_time + / (server_elapsed_dequeue_time+server_elapsed_apply_time+1) * 100 + server_pct_dequeue + from (select e.apply_name + , decode( e.startup_time, b.startup_time, null, '*') a + , e.reader_total_messages_dequeued - nvl(b.reader_total_messages_dequeued, 0) reader_total_messages_dequeued + , e.reader_elapsed_dequeue_time - nvl(b.reader_elapsed_dequeue_time, 0) reader_elapsed_dequeue_time + , e.reader_elapsed_schedule_time - nvl(b.reader_elapsed_schedule_time, 0) reader_elapsed_schedule_time + , e.coord_total_received - nvl(b.coord_total_received, 0) coord_total_received + , e.coord_total_applied - nvl(b.coord_total_applied, 0) coord_total_applied + , e.coord_total_wait_deps - nvl(b.coord_total_wait_deps, 0) coord_total_wait_deps + , e.coord_total_wait_commits - nvl(b.coord_total_wait_commits, 0) coord_total_wait_commits + , e.coord_elapsed_schedule_time - nvl(b.coord_elapsed_schedule_time, 0) coord_elapsed_schedule_time + , e.server_total_messages_applied - nvl(b.server_total_messages_applied, 0) server_total_messages_applied + , e.server_elapsed_dequeue_time - nvl(b.server_elapsed_dequeue_time, 0) server_elapsed_dequeue_time + , e.server_elapsed_apply_time - nvl(b.server_elapsed_apply_time, 0) server_elapsed_apply_time + from stats$streams_apply_sum b + , stats$streams_apply_sum e + where b.snap_id (+)= :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid (+)= e.dbid + and e.instance_number = :inst_num + and b.instance_number (+)= e.instance_number + and b.apply_name (+)= e.apply_name + and b.startup_time (+)= e.startup_time + order by e.coord_total_applied desc + ) + where rownum <= &&streams_top_n; + +set newpage 0; + + +ttitle lef 'Buffered Queues '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> * indicates Buffered Queue activity (re)started between Begin/End snaps' - + skip 1 - + lef '-> Top &&streams_top_n ordered by Queued Messages desc' - + skip 2; + +col qname format a54 trunc heading 'Queue' +col a heading '*' +col enq_rate format 99,999 heading 'Enq|Msg/s' just c +col deq_rate format 99,999 heading 'Deq|Msg/s' just c +col spill_rate format 99,999 heading 'Spill|Msg/s' just c + +select queue_schema||'.'||queue_name qname + , a + , cnum_msgs/:ela enq_rate + , (cnum_msgs-num_msgs)/:ela deq_rate + , cspill_msgs/:ela spill_rate + from (select e.queue_schema + , e.queue_name + , decode( e.startup_time, b.startup_time, null, '*') a + , e.num_msgs - nvl(b.num_msgs,0) num_msgs + , e.cnum_msgs - nvl(b.cnum_msgs,0) cnum_msgs + , e.cspill_msgs - nvl(b.cspill_msgs,0) cspill_msgs + from stats$buffered_queues b + , stats$buffered_queues e + where b.snap_id (+)= :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid (+)= e.dbid + and e.instance_number = :inst_num + and b.instance_number (+)= e.instance_number + and b.queue_schema (+)= e.queue_schema + and b.queue_name (+)= e.queue_name + and b.startup_time (+)= e.startup_time + order by e.cnum_msgs desc + ) + where rownum <= &&streams_top_n; + + + +ttitle lef 'Buffered Queue Subscribers '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> * indicates Buffered Subscriber activity (re)started between Begin/End snaps' - + skip 1 - + lef '-> Top &&streams_top_n ordered by Queued Messages desc' - + skip 2; + +col subscriber format a34 trunc heading 'Subscriber' +col qname format a25 trunc heading 'Queue' +col a heading '*' +col enq_rate format 99 heading 'Enq|Msg/s' just c +col deq_rate format 99 heading 'Deq|Msg/s' just c +col spill_rate format 99 heading 'Spill|Msg/s' just c + +select decode( subscriber_type, 'PROXY', 'PROXY: '||subscriber_address + , subscriber_name) subscriber + , queue_schema||'.'||queue_name qname + , a + , cnum_msgs/:ela enq_rate + , (cnum_msgs - num_msgs)/:ela deq_rate + , total_spilled_msg/:ela spill_rate + from (select e.subscriber_name + , e.queue_schema + , e.queue_name + , decode( e.startup_time, b.startup_time, null, '*') a + , e.subscriber_type + , e.subscriber_address + , e.num_msgs - nvl(b.num_msgs,0) num_msgs + , e.cnum_msgs - nvl(b.cnum_msgs,0) cnum_msgs + , e.total_spilled_msg - nvl(b.total_spilled_msg,0) total_spilled_msg + from stats$buffered_subscribers b + , stats$buffered_subscribers e + where b.snap_id (+)= :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid (+)= e.dbid + and e.instance_number = :inst_num + and b.instance_number (+)= e.instance_number + and b.queue_schema (+)= e.queue_schema + and b.queue_name (+)= e.queue_name + and b.subscriber_id (+)= e.subscriber_id + and b.startup_time (+)= e.startup_time + order by e.cnum_msgs desc + ) + where rownum <= &&streams_top_n; + + + +ttitle lef 'Rule Sets '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> * indicates Rule Set activity (re)started between Begin/End snaps' - + skip 1 - + lef '-> Top &&streams_top_n ordered by Evaluations desc ' - + skip 2; + +col rule_name format a35 trunc heading 'Rule' +col restart heading '*' +col eval_rate format 999,999,999 heading 'Eval/sec' +col reload_rate format 9,999 heading 'Reloads/sec' +col pct_sql_free format 999 heading 'No-SQL|Eval %' just c +col pct_sql format 999 heading 'SQL|Eval %' just c + +select owner||'.'||name rule_name + , restart + , decode( elapsed_time, 0, 0 + , evaluations/elapsed_time * 100) eval_rate + , reloads/:ela reload_rate + , sql_free_evaluations + / (sql_free_evaluations + sql_executions + .0000001) + * 100 pct_sql_free + , sql_executions + / (sql_free_evaluations + sql_executions + .0000001 ) + * 100 pct_sql + from (select e.owner + , e.name + , decode( e.startup_time, b.startup_time, null, '*') restart + , e.cpu_time - nvl(b.cpu_time,0) cpu_time + , e.elapsed_time - nvl(b.elapsed_time,0) elapsed_time + , e.evaluations - nvl(b.evaluations,0) evaluations + , e.sql_free_evaluations - nvl(b.sql_free_evaluations,0) + sql_free_evaluations + , e.sql_executions - nvl(b.sql_executions,0) sql_executions + , e.reloads - nvl(b.reloads,0) reloads + from stats$rule_set b + , stats$rule_set e + where b.snap_id (+)= :bid + and e.snap_id = :eid + and e.dbid = :dbid + and b.dbid (+)= e.dbid + and e.instance_number = :inst_num + and b.instance_number (+)= e.instance_number + and b.owner (+)= e.owner + and b.name (+)= e.name + and b.startup_time (+)= e.startup_time + order by e.evaluations desc + ) + where rownum <= &&streams_top_n; + + + +-- +-- Streams Pool Advisory + +ttitle lef 'Streams Pool Advisory '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'End Snap: ' format 99999999 end_snap - + skip 2; + +column spsfe format 9,999,999.9 heading 'Streams Pool|Size (M)'; +column spsf format 99.0 heading 'Streams Pool|Size Factor'; +column esc format 999,990 heading 'Est Spill|Count'; +column est format 999,990 heading 'Est Spill|Time (s)'; +column eusc format 999,990 heading 'Est Unspill|Count'; +column eust format 999,990 heading 'Est Unspill|Time (s)'; + +select streams_pool_size_for_estimate/&&btomb spsfe + , streams_pool_size_factor spsf + , estd_spill_count esc + , estd_spill_time est + , estd_unspill_count eusc + , estd_unspill_time eust + from stats$streams_pool_advice + where snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num + order by streams_pool_size_for_estimate; + + + +-- Shared Pool Advisory + +ttitle lef 'Shared Pool Advisory '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'End Snap: ' format 99999999 end_snap - + skip 1 - + lef '-> SP: Shared Pool Est LC: Estimated Library Cache Factr: Factor' - + skip 1 - + lef '-> Note there is often a 1:Many correlation between a single logical object' - + skip 1 - + lef ' in the Library Cache, and the physical number of memory objects associated' - + skip 1 - + lef ' with it. Therefore comparing the number of Lib Cache objects (e.g. in ' - + skip 1 - + lef ' v$librarycache), with the number of Lib Cache Memory Objects is invalid' - + skip 2; + +column spsfe format 9,999,999 heading 'Shared|Pool|Size (M)'; +column spsf format 99.0 heading 'SP|Size|Factr'; +column elcs format 999,990 heading 'Est LC|Size|(M)'; +column elcmo format 999,999,999 heading 'Est LC|Mem Obj'; +column elcts format 99,999 heading 'Est LC|Time|Saved|(s)'; +column elctsf format 99.0 heading 'Est LC|Time|Saved|Factr'; +column elclt format 99,999 heading 'Est LC|Load|Time|(s)'; +column elcltf format 99.0 heading 'Est LC|Load|Time|Factr'; +column elcmoh format 99,999,999 heading 'Est LC|Mem|Obj Hits'; + +select shared_pool_size_for_estimate spsfe + , shared_pool_size_factor spsf + , estd_lc_size elcs + , estd_lc_memory_objects elcmo + , estd_lc_time_saved elcts + , estd_lc_time_saved_factor elctsf + , estd_lc_load_time elclt + , estd_lc_load_time_factor elcltf + , estd_lc_memory_object_hits elcmoh + from stats$shared_pool_advice + where snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num + order by shared_pool_size_for_estimate; + + + +-- +-- Java Pool Advisory + +set newpage 2; + +ttitle lef 'Java Pool Advisory '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'End Snap: ' format 99999999 end_snap - + skip 2; + +column jpsfe format 9,999,999 heading 'Java|Pool|Size(M)'; +column jpsf format 99.0 heading 'JP|Size|Factr'; +column elcs format 999,990 heading 'Est LC|Size|(M)'; +column elcmo format 999,999,999 heading 'Est LC|Mem Obj'; +column elcts format 99,999 heading 'Est LC|Time|Saved|(s)'; +column elctsf format 99.0 heading 'Est LC|Time|Saved|Factr'; +column elclt format 99,999 heading 'Est LC|Load|Time|(s)'; +column elcltf format 99.0 heading 'Est LC|Load|Time|Factr'; +column elcmoh format 99,999,999 heading 'Est LC|Mem|Obj Hits'; + +select java_pool_size_for_estimate jpsfe + , java_pool_size_factor jpsf + , estd_lc_size elcs + , estd_lc_memory_objects elcmo + , estd_lc_time_saved elcts + , estd_lc_time_saved_factor elctsf + , estd_lc_load_time elclt + , estd_lc_load_time_factor elcltf + , estd_lc_memory_object_hits elcmoh + from stats$java_pool_advice + where snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num + and estd_lc_memory_objects > 0 + order by java_pool_size_for_estimate; + + +-- +-- SGA cache size changes + +ttitle lef 'Cache Size Changes '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Not all cache size changes may be captured. Only cache changes which are' - + skip 1 - + lef ' evident at snapshot time are shown' - + skip 2; + +column cache format a12 heading 'Cache' +column prev_value format 999,999 heading 'Prior|Size (MB)' just c +column value format 999,999 heading 'New|Size (MB)' just c +colum diff format 999,999 heading 'Difference|(MB)' just c + +break on snap_id +select snap_id + , decode(name, '__db_cache_size', 'Buffer Cache' + , '__shared_pool_size', 'Shared Pool' + , '__large_pool_size', 'Large Pool' + , '__java_pool_size', 'Java Pool' + , '__streams_pool_size', 'Streams Pool') cache + , prev_value + , value + , (value - prev_value) diff + from (select snap_id, name + , to_number(value)/&btomb value + , to_number((lag(value, 1, null) over (order by name, snap_id)))/&btomb prev_value + , (lag(name, 1, null) over (order by name, snap_id)) prev_name + from stats$parameter + where snap_id between :bid and :eid + and dbid = :dbid + and instance_number = :inst_num + and name in ('__shared_pool_size', '__db_cache_size' + ,'__large_pool_size' , '__java_pool_size' + ,'__streams_pool_size') + ) + where value != prev_value + and name = prev_name + order by snap_id, diff; +clear breaks + + + +set newpage 0; + +ttitle lef 'SGA Target Advisory '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'End Snap: ' format 99999999 end_snap - + skip 2; + +column sgatsfe format 9,999,999 heading 'SGA Target|Size (M)'; +column sgasf format 99.0 heading 'SGA Size|Factor'; +column edbts format 999,990 heading 'Est DB|Time (s)'; +column edbtf format 99.0 heading 'Est DB|Time Factor'; +column epr format 9,999,999,999 heading 'Est Physical|Reads'; + +select sga_size sgatsfe + , sga_size_factor sgasf + , estd_db_time edbts + , estd_db_time_factor edbtf + , estd_physical_reads epr + from stats$sga_target_advice + where snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num + order by sga_size; + + +-- +-- SGA + +column name format a30 heading 'SGA regions'; +column bval format 999,999,999,999,990 heading 'Begin Size (Bytes)'; +column eval format 999,999,999,999,990 heading 'End Size (Bytes)|(if different)'; + +break on report; +compute sum of bval on report; +compute sum of eval on report; +ttitle lef 'SGA Memory Summary '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 2; + +select e.name + , b.value bval + , decode(b.value, e.value, to_number(null), e.value) eval + from stats$sga b + , stats$sga e + where e.snap_id = :eid + and e.dbid = :dbid + and e.instance_number = :inst_num + and b.snap_id = :bid + and b.dbid = :dbid + and b.instance_number = :inst_num + and b.name = e.name + order by name; +clear break compute; + + +set newpage 2; + +ttitle lef 'SGA breakdown difference '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 1 - + lef '-> Top &sgastat_top_n rows by size, ordered by Pool, Name (note rows with null values for' - + skip 1 - + lef ' Pool column, or Names showing free memory are always shown)' - + skip 1 - + lef '-> Null value for Begin MB or End MB indicates the size of that Pool/Name was' - + skip 1 - + lef ' insignificant, or zero in that snapshot' - + skip 2; + +column pool format a6 heading 'Pool' trunc ; +column name format a30 heading 'Name'; +column snap1 format 999,999,999.9 heading 'Begin MB'; +column snap2 format 999,999,999.9 heading 'End MB'; +column diff format 9990.90 heading '% Diff'; + +-- inline views in from clause required to prevent full outer join +-- from applying where clause after outer join. ANSI SQL standard +-- described in (bug 3805503) + +select * + from (select nvl(e.pool, b.pool) pool + , nvl(e.name, b.name) name + , b.bytes/1024/1024 snap1 + , e.bytes/1024/1024 snap2 + , 100*(nvl(e.bytes,0) - nvl(b.bytes,0))/nvl(b.bytes,1) diff + from (select * + from stats$sgastat + where snap_id = :bid + and dbid = :dbid + and instance_number = :inst_num + ) b + full outer join + (select * + from stats$sgastat + where snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num + ) e + on b.name = e.name + and nvl(b.pool, 'a') = nvl(e.pool, 'a') + order by nvl(e.bytes, b.bytes) + ) + where pool is null + or name = 'free memory' + or rownum <= &&sgastat_top_n +order by pool, name; + +set newpage 0; + + + +-- +-- SQL Memory stats + +set heading off; + +ttitle lef 'SQL Memory Statistics '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 2; + +select ' Begin End % Diff' ch78n + , ' -------------- -------------- --------------' ch78n + , ' Avg Cursor Size (KB): ' ch25n, :b_total_sql_mem/&&btokb/:b_total_cursors num8c_2 + , :e_total_sql_mem/&&btokb/:e_total_cursors num8c_2 + , 100*( (:e_total_sql_mem/&&btokb/:e_total_cursors) + - (:b_total_sql_mem/&&btokb/:b_total_cursors) + ) + /(:e_total_sql_mem/&&btokb/:e_total_cursors) num8c_2 + , ' Cursor to Parent ratio: ' ch25n, :b_total_cursors/:b_total_sql num8c_2 + , :e_total_cursors/:e_total_sql num8c_2 + , 100*( (:e_total_cursors/:e_total_sql) + -(:b_total_cursors/:b_total_sql) + ) + /(:e_total_cursors/:e_total_sql) num8c_2 + , ' Total Cursors: ' ch25n, :b_total_cursors num10c + , :e_total_cursors num10c + , 100*( (:e_total_cursors) + -(:b_total_cursors) + ) + /(:e_total_cursors) num8c_2 + , ' Total Parents: ' ch25n, :b_total_sql num10c + , :e_total_sql num10c + , 100*( (:e_total_sql) + -(:b_total_sql) + ) + /(:e_total_sql) num8c_2 + from sys.dual + where :b_total_cursors > 0 + and :e_total_cursors > 0; + +set heading on; + + +-- +-- Resource Limit + +set newpage 2; + +ttitle lef 'Resource Limit Stats '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'End Snap: ' format 99999999 end_snap - + skip 1 - + lef '-> only rows with Current or Maximum Utilization > 80% of Limit are shown' - + skip 1 - + lef '-> ordered by resource name' - + skip 2; + +column rname format a30 heading 'Resource Name'; +column curu format 999,999,990 heading 'Current|Utilization' just c; +column maxu format 999,999,990 heading 'Maximum|Utilization' just c; +column inita format a10 heading 'Initial|Allocation' just c; +column lim format a10 heading 'Limit' just r; + +select resource_name rname + , current_utilization curu + , max_utilization maxu + , initial_allocation inita + , limit_value lim + from stats$resource_limit + where snap_id = :eid + and dbid = :dbid + and instance_number = :inst_num + and ( nvl(current_utilization,0)/limit_value > .8 + or nvl(max_utilization,0)/limit_value > .8 + ) + order by rname; + +set newpage 0; + + +-- +-- Initialization Parameters + +column name format a29 heading 'Parameter Name' trunc; +column bval format a33 heading 'Begin value' trunc; +column eval format a14 heading 'End value|(if different)' trunc just c; + +ttitle lef 'init.ora Parameters '- + 'DB/Inst: ' db_name '/' inst_name ' '- + 'Snaps: ' format 99999999 begin_snap '-' format 99999999 end_snap - + skip 2; + +select e.name + , b.value bval + , decode(b.value, e.value, ' ', e.value) eval + from stats$parameter b + , stats$parameter e + where b.snap_id(+) = :bid + and e.snap_id = :eid + and b.dbid(+) = :dbid + and e.dbid = :dbid + and b.instance_number(+) = :inst_num + and e.instance_number = :inst_num + and b.name(+) = e.name + and translate(e.name, '_', '#') not like '##%' + and ( nvl(b.isdefault, 'X') = 'FALSE' + or nvl(b.ismodified,'X') != 'FALSE' + or e.ismodified != 'FALSE' + or nvl(e.value,0) != nvl(b.value,0) + ) + order by e.name; + +prompt +prompt End of Report ( &report_name ) +prompt +spool off; +set termout off; +clear columns sql; +ttitle off; +btitle off; +repfooter off; +set linesize 78 termout on feedback 6; +undefine begin_snap +undefine end_snap +undefine dbid +undefine inst_num +undefine num_days +undefine report_name +undefine top_n_sql +undefine top_pct_sql +undefine top_n_events +undefine top_n_segstat +undefine btime +undefine etime +undefine num_rows_per_hash +whenever sqlerror continue; + +-- +-- End of script file; diff --git a/vg/sptrends.sql b/vg/sptrends.sql new file mode 100644 index 0000000..adec7d7 --- /dev/null +++ b/vg/sptrends.sql @@ -0,0 +1,106 @@ +/********************************************************************** + * File: sptrends.sql + * Type: SQL*Plus script + * Author: Tim Gorman (Evergreen Database Technologies, Inc.) + * Date: 15-Jul-2003 + * + * Description: + * Query to display "trends" for specific statistics captured by + * the STATSPACK package, and display summarized totals daily and + * hourly as a deviation from average. The intent is to find the + * readings with the greatest positive deviation from the average + * value, as these are likely to be "periods of interest" for + * further research... + * + * Modifications: + * TGorman 02may04 corrected bug in LAG() OVER () clauses + * TGorman 10aug04 changed "deviation" column from some kind of + * weird "deviation from average" calculation to + * a more straight-forward percentage ratio + *********************************************************************/ +set echo off feedback off timing off pagesize 200 linesize 130 trimout on trimspool on verify off recsep off +col sort0 noprint +col day heading "Day" +col hr heading "Hour" +col value format 999,999,999,990 heading "Value" + +accept V_NBR_DAYS prompt "How many days of data to examine? " +prompt +prompt +prompt Some useful database statistics to search upon: +select chr(9)||name name +from v$statname +order by 1; +accept V_STATNAME prompt "What statistic do you want to analyze? " + +col spoolname new_value V_SPOOLNAME noprint +select replace(replace(replace(lower('&&V_STATNAME'),' ','_'),'(',''),')','') spoolname +from dual; + +spool sptrends_&&V_SPOOLNAME +clear breaks computes +col deviation format a100 heading "Percentage of total over all days" +prompt +prompt Daily trends for "&&V_STATNAME"... +select sort0, + day, + value, + rpad('*', round((value/sum(value) over ())*100, 0), '*') deviation +from (select sort0, + day, + sum(value) value + from (select to_char(ss.snap_time, 'YYYYMMDD') sort0, + to_char(ss.snap_time, 'DD-MON') day, + s.snap_id, + s.name, + nvl(decode(greatest(s.value, nvl(lag(s.value) over (partition by s.dbid, s.instance_number order by s.snap_id),0)), + s.value, s.value - lag(s.value) over (partition by s.dbid, s.instance_number order by s.snap_id), + s.value), 0) value + from stats$sysstat s, + stats$snapshot ss + where ss.snap_id = s.snap_id + and ss.dbid = s.dbid + and ss.instance_number = s.instance_number + and ss.snap_time between (sysdate - &&V_NBR_DAYS) and sysdate + and s.name = '&&V_STATNAME') + group by sort0, + day) +order by sort0; + +clear breaks computes +break on day skip 1 on report +col deviation format a100 heading "Percentage of total over all hours for each day" +prompt +prompt Daily/hourly trends for "&&V_STATNAME"... +select sort0, + day, + hr, + value, + rpad('*', round((value/sum(value) over (partition by day))*100,0), '*') deviation +from (select sort0, + day, + hr, + name, + sum(value) value + from (select to_char(ss.snap_time, 'YYYYMMDDHH24') sort0, + to_char(ss.snap_time, 'DD-MON') day, + to_char(ss.snap_time, 'HH24')||':00' hr, + s.snap_id, + s.name, + nvl(decode(greatest(s.value, nvl(lag(s.value) over (partition by s.dbid, s.instance_number order by s.snap_id),0)), + s.value, s.value - lag(s.value) over (partition by s.dbid, s.instance_number order by s.snap_id), + s.value), 0) value + from stats$sysstat s, + stats$snapshot ss + where ss.snap_id = s.snap_id + and ss.dbid = s.dbid + and ss.instance_number = s.instance_number + and ss.snap_time between (sysdate - &&V_NBR_DAYS) and sysdate + and s.name = '&&V_STATNAME') + group by sort0, + day, + hr, + name) +order by sort0; +spool off +set verify on recsep each diff --git a/vg/sql_binds.sql b/vg/sql_binds.sql new file mode 100644 index 0000000..4c4db8b --- /dev/null +++ b/vg/sql_binds.sql @@ -0,0 +1,122 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Binds from SQLArea +* Version : 10.2 and above +* Parameters : 1 - SQL_ID +* 2 - Hours (Default 72 hours) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Aug-15 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE hours + +DEFINE sql_id="&&1" +DEFINE hours="&&3" + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +COLUMN _hours NEW_VALUE HOURS NOPRINT + +set term off +SELECT DECODE('&&sql_id','%','%','') "_force_matching_signature" + , DECODE('&&hours','','72','&&hours') "_hours" +FROM DUAL; +set term on + + +/************************************ +* MAIN Section +************************************/ + +DEFINE force_matching_signature="" +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +set numf 99999999999999999999999 +select to_char(sql.force_matching_signature) "_force_matching_signature" + from gv$sqlstats sql + where sql.sql_id = '&&sql_id' + and rownum <= 1; +set term on + +PROMPT ************************************************************** +PROMPT * SQL Bind Values from SQL Area +PROMPT * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Hours = '&&hours' +PROMPT ************************************************************** + +COLUMN first_load_time HEADING "First Load Time" FORMAT a20 +COLUMN last_active_time HEADING "Last Active Time" FORMAT a20 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN bind_values HEADING "Bind Values" FORMAT a100 +COLUMN bind_datatype HEADING "Bind DataType" FORMAT a80 + + +SELECT TO_CHAR(TO_DATE(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'),'DD-MON-YYYY HH24:MI:SS') first_load_time + , TO_CHAR(ss.last_active_time,'DD-MON-YYYY HH24:MI:SS') last_active_time + , ss.inst_id instance_number + , ss.sql_id + , ss.plan_hash_value + , (select listagg(NVL(name,':B' || position) + ||'[' + || datatype_string || NVL2(scale + ,'(' || scale || NVL2(precision + ,','|| precision + , '' + ) || ')' + ,'' + ) + || ']' + ||'=' + || CASE + WHEN datatype_string <> 'TIMESTAMP' THEN NVL(value_string,'NULL') + ELSE TO_CHAR(ANYDATA.ACCESStimestamp(VALUE_ANYDATA)) + END + ,',' + ) WITHIN GROUP (order by position) + from table(dbms_sqltune.extract_binds(sql.BIND_DATA)) + ) bind_values +/* + , (select listagg(NVL(name,':B' || position) || '=' + || datatype_string || NVL2(scale,'(' || scale || NVL2(precision,','|| precision, '') || ')' ,'' ) + ,',' + ) WITHIN GROUP (order by position) + from table(dbms_sqltune.extract_binds(sql.BIND_DATA)) + ) bind_datatype +*/ + from gv$sqlstats ss + , gv$sqlarea sql +where ss.inst_id = sql.inst_id (+) + AND ss.sql_id = sql.sql_id (+) + AND ss.plan_hash_value = sql.plan_hash_value (+) + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature = '&&force_matching_signature' + AND ss.last_active_time > sysdate - (&&hours/24) +order by ss.last_active_time + , ss.inst_id +; + + + +@@footer diff --git a/vg/sql_hints.sql b/vg/sql_hints.sql new file mode 100644 index 0000000..83efaed --- /dev/null +++ b/vg/sql_hints.sql @@ -0,0 +1,39 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Hints in a SQL Statement +* Parameters : 1 - SQLID +* 2 - Child Number +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-May-12 Vishal Gupta First Draft +* +*/ + + +set pages 50 + +DEFINE sql_id="&&1" +DEFINE child_no="&&2" + + +SELECT extractvalue(value(d), '/hint') AS outline_hints + FROM xmltable('/*/outline_data/hint' + passing ( SELECT xmltype(other_xml) AS xmlval + FROM gv$sql_plan + WHERE sql_id LIKE NVL('&sql_id',sql_id) + AND child_number = &child_no + AND other_xml IS NOT NULL + AND rownum = 1 + ) + ) d +; + +UNDEFINE sql_id +UNDEFINE child_no + +@@footer \ No newline at end of file diff --git a/vg/sql_monitor.sql b/vg/sql_monitor.sql new file mode 100644 index 0000000..bdcabf9 --- /dev/null +++ b/vg/sql_monitor.sql @@ -0,0 +1,39 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Monitor Report +* Parameters : 1 - SQL_ID +* 2 - type (text, html, active, xml) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Mar-12 Vishal Gupta Intial version +* 09-Oct-12 Vishal Gupta Set the default value of type='text' +* +* +*/ + + +DEFINE sqlid="&&1" +DEFINE type="&&2" + + +set pages 0 +set linesize 1000 +set long 1000000 +set longchunksize 1000000 + +select dbms_sqltune.report_sql_monitor( + sql_id=>'&sqlid' + ,inst_id=> null + ,report_level=> 'ALL +PLAN_HISTOGRAM' + ,type=>CASE WHEN '&&type' = '' OR '&&type' IS NULL THEN 'text' ELSE '&&type' END) +from dual; + + +@@footer diff --git a/vg/sql_monitor_active.sql b/vg/sql_monitor_active.sql new file mode 100644 index 0000000..6320147 --- /dev/null +++ b/vg/sql_monitor_active.sql @@ -0,0 +1,38 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Monitor Report +* Parameters : 1 - SQL_ID +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Mar-12 Vishal Gupta Intial version +* +* +*/ + + +DEFINE sqlid="&&1" + + +set pages 0 +set linesize 1000 +set long 1000000 +set longchunksize 1000000 + +set term off +spool C:\temp\sql_monitor_&sqlid..htm +select dbms_sqltune.report_sql_monitor(sql_id=>'&sqlid',inst_id=> null,report_level=> 'ALL +PLAN_HISTOGRAM', type=>'active') from dual; +spool off +set term on + +PROMPT Report available at C:\temp\sql_monitor_&sqlid..htm + +host C:\temp\sql_monitor_&sqlid..htm + +@@footer diff --git a/vg/sql_plan_baselines.sql b/vg/sql_plan_baselines.sql new file mode 100644 index 0000000..07f8af4 --- /dev/null +++ b/vg/sql_plan_baselines.sql @@ -0,0 +1,55 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all SQL PLAN Baselines +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Jun-12 Vishal Gupta First created +* +*/ + +COLUMN sql_handle HEADING "SQL Handle" FORMAT a20 +COLUMN enabled HEADING "Ena|bled" FORMAT a4 +COLUMN accepted HEADING "Accep|ted" FORMAT a5 +COLUMN fixed HEADING "Fixed" FORMAT a5 +COLUMN reproduced HEADING "Repro|duced" FORMAT a5 +COLUMN autopurge HEADING "Auto|Purge" FORMAT a5 +COLUMN optimizer_cost HEADING "Optimizer|Cost" FORMAT 99999999 +COLUMN creator HEADING "Creator" FORMAT a12 +COLUMN created HEADING "Created" FORMAT a15 +COLUMN last_modified HEADING "LastModified" FORMAT a15 +COLUMN last_executed HEADING "LastExecuted" FORMAT a15 +COLUMN last_verified HEADING "LastVerified" FORMAT a15 +COLUMN force_matching HEADING "Force|Match" FORMAT a5 +COLUMN signature HEADING "Signature" FORMAT 999999999999999999999 +COLUMN description HEADING "Description" FORMAT a50 + +BREAK ON name ON CATEGORY ON created ON last_modified ON type ON status ON force_matching ON signature ON description + +SELECT spb.sql_handle + , spb.plan_name + , spb.origin + , spb.enabled + , spb.accepted + , spb.fixed + , spb.reproduced + , spb.autopurge + , spb.optimizer_cost + , spb.creator + , to_char(spb.created,'DD-MON-YY HH24:MI') created + , to_char(spb.last_modified,'DD-MON-YY HH24:MI') last_modified + , to_char(spb.last_executed,'DD-MON-YY HH24:MI') last_executed + , to_char(spb.last_verified,'DD-MON-YY HH24:MI') last_verified + , spb.description + FROM dba_sql_plan_baselines spb +ORDER BY spb.last_modified DESC +; + +@@footer diff --git a/vg/sql_plan_baselines_queries.sql b/vg/sql_plan_baselines_queries.sql new file mode 100644 index 0000000..249e638 --- /dev/null +++ b/vg/sql_plan_baselines_queries.sql @@ -0,0 +1,55 @@ + + +--**************************************************** +-- Migrate SQL Baselines +--**************************************************** + + +drop table VG_SPM_STGTAB_BASELINE; +exec DBMS_SPM.CREATE_STGTAB_BASELINE ('VG_SPM_STGTAB_BASELINE' ); + + +set serveroutput on +DECLARE + number_of_sqlplans NUMBER; +BEGIN + number_of_sqlplans := DBMS_SPM.PACK_STGTAB_BASELINE ( table_name => 'VG_SPM_STGTAB_BASELINE' + , table_owner => NULL -- Default NULL means current schema + , sql_handle => NULL -- Default NULL, case sensitive + , plan_name => '%' -- Default NULL, case sensitive, % wildcards accepted + , sql_text => NULL -- Default NULL, case sensitive, % wildcards accepted + , creator => NULL -- Default NULL, case insensitive unless double quoted + , origin => NULL -- Default NULL, case insensitive unless double quoted, + -- 'MANUAL-LOAD', 'AUTO-CAPTURE', 'MANUAL_SQLTUNE' or 'AUTO-SQLTUNE' + , enabled => NULL -- Default NULL, case insensitive, Must be 'YES' or 'NO' + , accepted => NULL -- Default NULL, case insensitive, Must be 'YES' or 'NO' + , fixed => NULL -- Default NULL, case insensitive, Must be 'YES' or 'NO' + , module => NULL -- Default NULL, case sensitive' + , action => NULL -- Default NULL, case sensitive' + ); + DBMS_OUTPUT.PUT_LINE('Number of Plans packed - ' || number_of_sqlplans ); +END; +/ + +set serveroutput on +DECLARE + number_of_sqlplans NUMBER; +BEGIN + + number_of_sqlplans := DBMS_SPM.UNPACK_STGTAB_BASELINE ( table_name => 'VG_SPM_STGTAB_BASELINE' + , table_owner => NULL -- Default NULL means current schema + , sql_handle => NULL -- Default NULL, case sensitive + , plan_name => '%' -- Default NULL, case sensitive, % wildcards accepted + , sql_text => NULL -- Default NULL, case sensitive, % wildcards accepted + , creator => NULL -- Default NULL, case insensitive unless double quoted + , origin => NULL -- Default NULL, case insensitive unless double quoted, + -- 'MANUAL-LOAD', 'AUTO-CAPTURE', 'MANUAL_SQLTUNE' or 'AUTO-SQLTUNE' + , enabled => NULL -- Default NULL, case insensitive, Must be 'YES' or 'NO' + , accepted => NULL -- Default NULL, case insensitive, Must be 'YES' or 'NO' + , fixed => NULL -- Default NULL, case insensitive, Must be 'YES' or 'NO' + , module => NULL -- Default NULL, case sensitive' + , action => NULL -- Default NULL, case sensitive' + ); + DBMS_OUTPUT.PUT_LINE('Number of Plans unpacked - ' || number_of_sqlplans ); +END; +/ diff --git a/vg/sql_plan_hints.sql b/vg/sql_plan_hints.sql new file mode 100644 index 0000000..02008aa --- /dev/null +++ b/vg/sql_plan_hints.sql @@ -0,0 +1,38 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Hints in a SQL Statement +* Parameters : 1 - SQLID +* 2 - Child Number +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-May-12 Vishal Gupta First Draft +* +*/ + + +set pages 50 + +DEFINE sql_id="&&1" +DEFINE child_no="&&2" + + +SELECT extractvalue(value(d), '/hint') AS outline_hints + FROM xmltable('/*/outline_data/hint' + passing ( SELECT xmltype(other_xml) AS xmlval + FROM v$sql_plan + WHERE sql_id LIKE NVL('&sql_id',sql_id) + AND child_number = &child_no + AND other_xml IS NOT NULL + ) + ) d +; + +UNDEFINE sql_id +UNDEFINE child_no + +@@footer \ No newline at end of file diff --git a/vg/sql_profile.sql b/vg/sql_profile.sql new file mode 100644 index 0000000..d78391e --- /dev/null +++ b/vg/sql_profile.sql @@ -0,0 +1,50 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all SQL Profiles +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 13-Jan-14 Vishal Gupta Add additional columns +* 16-May-12 Vishal Gupta Created +*/ + +COLUMN name HEADING "Name" FORMAT a30 +COLUMN category HEADING "Category" FORMAT a15 +COLUMN creator HEADING "Creator" FORMAT a15 +COLUMN created HEADING "Created" FORMAT a18 +COLUMN last_modified HEADING "LastModified" FORMAT a18 +COLUMN last_executed HEADING "LastExecuted" FORMAT a18 +COLUMN force_matching HEADING "Force|Match" FORMAT a5 +COLUMN signature HEADING "Signature" FORMAT 999999999999999999999 +COLUMN description HEADING "Description" FORMAT a50 + +BREAK ON name ON CATEGORY ON created ON last_modified ON type ON status ON force_matching ON signature ON description + +SELECT /*+ ORDERED */ + sp.name + , sp.category + , ad.creator + , to_char(sp.created,'DD-MON-YY HH24:MI:SS') created + , to_char(sp.last_modified,'DD-MON-YY HH24:MI:SS') last_modified + -- Last executed is display NULL for all the rows + -- , to_char(so.last_executed,'DD-MON-YY HH24:MI:SS') last_executed + , sp.type + , sp.status + , sp.force_matching + , sp.signature + , sp.description + FROM dba_sql_profiles sp + JOIN sys.sqlobj$ so ON so.signature = sp.signature AND so.category = sp.category AND so.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sqlobj$auxdata ad ON so.signature = ad.signature AND so.category = ad.category AND ad.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + WHERE 1=1 +ORDER BY sp.last_modified DESC +; + +@@footer diff --git a/vg/sql_profile_add_hint.sql b/vg/sql_profile_add_hint.sql new file mode 100644 index 0000000..afde95d --- /dev/null +++ b/vg/sql_profile_add_hint.sql @@ -0,0 +1,95 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Add hints to an existing SQL Profile +* Parameters : 1 - SQL Profile Name +* 2 - Hint to be added to SQL Profile +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Mar-15 Vishal Gupta Created +* +*/ + +UNDEFINE SQLPROFILENAME +UNDEFINE OUTLINE_HINT + +DEFINE SQLPROFILENAME='&&1' +-- Use single quotes to initialize this variable, as OUTLINE HINTs themselves have double quotes. +DEFINE OUTLINE_HINT='&&2' + +set serveroutput on +declare + ar_profile_hints sys.sqlprof_attr; + cl_profile_hints clob; + cl_profile_hints2 clob; + cl_sql_text clob; + buffer VARCHAR2(4000); + l_profile_name VARCHAR2(30) := '&&SQLPROFILENAME' ; + l_category dba_sql_profiles.category%TYPE; + l_description dba_sql_profiles.description%TYPE; +begin + + + cl_profile_hints := '' ; + + SELECT XMLQuery( '/outline_data/hint' passing xmltype(sd.comp_data) RETURNING CONTENT ).getClobVal() xmlval + , sp.sql_text + , sp.category + , sp.description + INTO cl_profile_hints2 + , cl_sql_text + , l_category + , l_description + FROM dba_sql_profiles sp + JOIN sys.sqlobj$ so ON so.signature = sp.signature AND so.category = sp.category AND so.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sqlobj$auxdata ad ON ad.signature = so.signature AND ad.category = so.category AND ad.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sqlobj$data sd ON sd.signature = so.signature AND sd.category = so.category AND sd.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + WHERE sp.name = l_profile_name + ; + + dbms_lob.append( cl_profile_hints,cl_profile_hints2); + + dbms_lob.append( cl_profile_hints,'' ); + dbms_lob.append( cl_profile_hints,''); + + --dbms_output.put_line(cl_profile_hints); + + BEGIN + DBMS_SQLTUNE.ALTER_SQL_PROFILE (name=> l_profile_name , attribute_name =>'CATEGORY', value =>'DONOTUSE'); + EXCEPTION + WHEN others THEN + null; + END; + + DBMS_SQLTUNE.DROP_SQL_PROFILE (name=> 'TEMP_SQL_PROFILE' , ignore => TRUE); + DBMS_SQLTUNE.ALTER_SQL_PROFILE (name=> l_profile_name , attribute_name =>'NAME', value => 'TEMP_SQL_PROFILE'); + + dbms_sqltune.import_sql_profile( sql_text => cl_sql_text + , profile_xml => cl_profile_hints + , category => l_category + , name => l_profile_name + , description => l_description + , force_match => TRUE + , validate => TRUE + , replace => FALSE + ); + + + DBMS_SQLTUNE.DROP_SQL_PROFILE (name=> 'TEMP_SQL_PROFILE' , ignore => TRUE); + + dbms_output.put_line('.'); + dbms_output.put_line('Hint added to SQL Profile ' ||l_profile_name ); + dbms_output.put_line('. '); + dbms_output.put_line('Use following to view hints in this SQL profile : '); + dbms_output.put_line('. @sql_profile_hints ' ||l_profile_name ); + +end; +/ + +@@footer diff --git a/vg/sql_profile_commands.sql b/vg/sql_profile_commands.sql new file mode 100644 index 0000000..dae9a74 --- /dev/null +++ b/vg/sql_profile_commands.sql @@ -0,0 +1,102 @@ + +/* +* +* Author : Vishal Gupta +* Purpose : SQL Profile Commands +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-May-12 Vishal Gupta First cut +*/ + +-- Requires the ALTER ANY SQL PROFILE privilege. + +-- Create a SQL Profile (Use following scripts) +@sql_profile_create.sql +@sql_profile_create_fromcursor.sql + +-- DROP a SQL Profile +exec DBMS_SQLTUNE.DROP_SQL_PROFILE (name => 'PROF_6r0u9km82f9gt_3364382418', ignore => FALSE) + +-- Enable/Disable SQL Profile. +exec DBMS_SQLTUNE.ALTER_SQL_PROFILE (name=> 'PROF_8zp316hbs0c45_3180070961', attribute_name => 'STATUS', value => 'DISABLED') +exec DBMS_SQLTUNE.ALTER_SQL_PROFILE (name=> 'PROF_8zp316hbs0c45_3180070961', attribute_name => 'STATUS', value =>'ENABLED') + +-- Rename a SQL Profile +exec DBMS_SQLTUNE.ALTER_SQL_PROFILE (name=> 'PROF_8zp316hbs0c45_3180070961', attribute_name =>'NAME', value =>'PROF_ak6yf7a3h5h9n_3180070961') + +-- Modify Description +exec DBMS_SQLTUNE.ALTER_SQL_PROFILE (name=> '', attribute_name =>'DESCRIPTION', value =>'') + +-- Force matching of SQL statements even if literal values are used. +-- Its similar to using cursor_sharing=force +exec DBMS_SQLTUNE.ALTER_SQL_PROFILE (name=> '',attribute_name =>'FORCE_MATCHING', value =>'TRUE') + +-- Change CATEGORY +exec DBMS_SQLTUNE.ALTER_SQL_PROFILE (name=> '', attribute_name =>'CATEGORY', value =>'') + + +-- On Source Side +-- Pack, transfer and UnPack the SQL Profile from one database to another. +drop table TRAF_DBA_OWNER.VG_SQLPROF_STG; +exec DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF ( table_name => 'VG_SQLPROF_STG' , schema_name => 'TRAF_DBA_OWNER' , tablespace_name => NULL); +exec DBMS_SQLTUNE.PACK_STGTAB_SQLPROF ( profile_name => 'PROF_f5mx26ua5khzy_8022806', profile_category => 'DEFAULT', staging_table_name => 'VG_SQLPROF_STG' , staging_schema_owner => 'TRAF_DBA_OWNER'); +exec DBMS_SQLTUNE.PACK_STGTAB_SQLPROF ( profile_name => '%', profile_category => '%', staging_table_name => 'VG_SQLPROF_STG' , staging_schema_owner => 'TRAF_DBA_OWNER'); +expdp "'/ as sysdba'" tables=TRAF_DBA_OWNER.VG_SQLPROF_STG directory=DIR_DUMP dumpfile=TRAF_DBA_OWNER.VG_SQLPROF_STG.dmp logfile=TRAF_DBA_OWNER.VG_SQLPROF_STG.exp.log + +-- On Target Side +impdp "'/ as sysdba'" TABLE_EXISTS_ACTION=replace tables=TRAF_DBA_OWNER.VG_SQLPROF_STG dumpfile=TRAF_DBA_OWNER.VG_SQLPROF_STG.dmp logfile=TRAF_DBA_OWNER.VG_SQLPROF_STG.imp.log +exec DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF ( profile_name => '%', profile_category => 'DEFAULT', staging_table_name => 'VG_SQLPROF_STG' , staging_schema_owner => 'TRAF_DBA_OWNER' , replace => false); +exec DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF ( profile_name => 'PROF_f5mx26ua5khzy_8022806', profile_category => '%', staging_table_name => 'VG_SQLPROF_STG' , staging_schema_owner => 'TRAF_DBA_OWNER' , replace => false); + + +------------------------------- +-- SQL Tuning Advisor +------------------------------- +DECLARE +my_task_name VARCHAR2(30); +my_sqltext CLOB; +BEGIN +my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK( + sql_id => 'f5mx26ua5khzy', + plan_hash_value => null, + scope => 'COMPREHENSIVE', + time_limit => 300, + task_name => 'TUNINGTASK_f5mx26ua5khzy', + description => 'TUNINGTASK_f5mx26ua5khzy' + ); +END; +/ + +--After you have created a tuning task, you need to execute the task and start the tuning process. For example: +BEGIN + DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => 'TUNINGTASK_f5mx26ua5khzy' ); +END; +/ + + +SET LONG 80000 +SET LONGCHUNKSIZE 40000 +set pages 10000 +set lines 500 +SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'TUNINGTASK_f5mx26ua5khzy') +FROM DUAL; + + +Recommendation (estimated benefit: 91.32%) + ------------------------------------------ + - Consider accepting the recommended SQL profile to use parallel execution for this statement. + +BEGIN + dbms_sqltune.accept_sql_profile(task_name =>'TUNINGTASK_f5mx26ua5khzy' + , task_owner => 'SYS' + , replace =>TRUE + , profile_type => DBMS_SQLTUNE.PX_PROFILE); +END; +/ + + diff --git a/vg/sql_profile_create.sql b/vg/sql_profile_create.sql new file mode 100644 index 0000000..cb7162e --- /dev/null +++ b/vg/sql_profile_create.sql @@ -0,0 +1,116 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Create SQL Profile +* Parameters : 1 - SQL ID +* 2 - PLAN_HASH_VALUE +* 3 - SQL Profile Category, usually "DEFAULT" +* 4 - FORCE_MATCH, possibile values - TRUE or FALSE +* 5 - SQL Profile Description +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 24-NOV-14 Vishal Gupta Modified to use CLOB for optimizer hints instead of array of VARCHAR2(500) +* Sometimes hint are larger than 500 character and it keeps failing, so we need to use CLOB. +* 16-May-12 Vishal Gupta Created +* +*/ + +UNDEFINE SQLID +UNDEFINE PLAN_HASH_VALUE +UNDEFINE CATEGORY +UNDEFINE FORCE_MATCH +UNDEFINE DESCRIPTION + +DEFINE SQLID="&&1" +DEFINE PLAN_HASH_VALUE="&&2" +DEFINE CATEGORY="&&3" +DEFINE FORCE_MATCH="&&4" +DEFINE DESCRIPTION="&&5" + +set serveroutput on +declare + ar_profile_hints sys.sqlprof_attr; + cl_profile_hints clob; + cl_sql_text clob; + buffer VARCHAR2(4000); + l_profile_name VARCHAR2(30) := 'PROF_' || '&&SQLID' || '_' || '&&PLAN_HASH_VALUE'; +begin + + SELECT sql.sql_text + INTO cl_sql_text + FROM dba_hist_sqltext sql + , v$database d + WHERE d.dbid = sql.dbid + AND sql.sql_id = '&&SQLID'; + + SELECT XMLQuery( '/*/outline_data' passing xmltype(other_xml) RETURNING CONTENT ).getClobVal() xmlval + INTO cl_profile_hints + FROM dba_hist_sql_plan s + , v$database d + WHERE d.dbid = s.dbid + AND sql_id = '&&SQLID' + AND plan_hash_value = &&PLAN_HASH_VALUE + AND other_xml IS NOT NULL + ; + + dbms_sqltune.import_sql_profile( sql_text => cl_sql_text + , profile_xml => cl_profile_hints + , category => '&&CATEGORY' + , name => l_profile_name + , description => '&&DESCRIPTION' + , force_match => &&FORCE_MATCH + , validate => TRUE + , replace => FALSE + ); + + +/* +Sometimes hint are larger than 500 character and it was failing with following error. +So modified this script to use CLOB instead of array of VARCHAR2(500) from sys.sqlprof_attr type. + +ORA-06502: PL/SQL: numeric or value error: Bulk Bind: Truncated Bind + +*/ + +-- SELECT extractvalue(value(a), '/hint') AS outline_hints +-- bulk collect +-- INTO ar_profile_hints +-- FROM xmltable('/*/outline_data/hint' passing (SELECT xmltype(other_xml) AS xmlval +-- FROM dba_hist_sql_plan s +-- , v$database d +-- WHERE d.dbid = s.dbid +-- AND sql_id = '&&SQLID' +-- AND plan_hash_value = &&PLAN_HASH_VALUE +-- AND other_xml IS NOT NULL +-- ) +-- ) a; + +/* + dbms_sqltune.import_sql_profile( sql_text => cl_sql_text + , profile => ar_profile_hints + , category => '&&CATEGORY' + , name => l_profile_name + , description => '&&DESCRIPTION' + -- use force_match => true, to use CURSOR_SHARING=SIMILAR + -- behaviour, i.e. match even with differing literals + , force_match => &&FORCE_MATCH + -- , replace => true + ); +*/ + + + + dbms_output.put_line(' '); + dbms_output.put_line('SQL Profile '||l_profile_name||' created.'); + dbms_output.put_line(' '); + +end; +/ + +@@footer diff --git a/vg/sql_profile_create_fromawr.sql b/vg/sql_profile_create_fromawr.sql new file mode 100644 index 0000000..9e6c24a --- /dev/null +++ b/vg/sql_profile_create_fromawr.sql @@ -0,0 +1,81 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Create SQL Profile from AWR Repository +* Parameters : 1 - SQL ID +* 2 - PLAN_HASH_VALUE +* 3 - SQL Profile Categor, usually "DEFAULT" +* 4 - FORCE_MATCH, possibile values - TRUE or FALSE +* 5 - SQL Profile Description +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-May-12 Vishal Gupta Created +* +*/ + + +DEFINE SQLID="&&1" +DEFINE PLAN_HASH_VALUE="&&2" +DEFINE CATEGORY="&&3" +DEFINE FORCE_MATCH="&&4" +DEFINE DESCRIPTION="&&5" + +set serveroutput on +declare + ar_profile_hints sys.sqlprof_attr; + cl_sql_text clob; + l_profile_name VARCHAR2(30) := 'PROF_' || '&&SQLID' || '_' || '&&PLAN_HASH_VALUE'; +begin + SELECT extractvalue(value(d), '/hint') AS outline_hints + bulk collect + INTO ar_profile_hints + FROM xmltable('/*/outline_data/hint' passing + (SELECT xmltype(other_xml) AS xmlval + FROM dba_hist_sql_plan s + , v$database d + WHERE d.dbid = s.dbid + AND sql_id = '&&SQLID' + AND plan_hash_value = &&PLAN_HASH_VALUE + AND other_xml IS NOT NULL + ) ) d; + + SELECT sql.sql_text + INTO cl_sql_text + FROM dba_hist_sqltext sql + , v$database d + WHERE d.dbid = sql.dbid + AND sql.sql_id = '&&SQLID'; + + dbms_sqltune.import_sql_profile( sql_text => cl_sql_text + , profile => ar_profile_hints + , category => '&&CATEGORY' + , name => l_profile_name + , description => '&&DESCRIPTION' + -- use force_match => true + -- to use CURSOR_SHARING=SIMILAR + -- behaviour, i.e. match even with + -- differing literals + , force_match => &&FORCE_MATCH + -- , replace => true + ); + + dbms_output.put_line(' '); + dbms_output.put_line('SQL Profile '||l_profile_name||' created.'); + dbms_output.put_line(' '); + +end; +/ + +UNDEFINE SQLID +UNDEFINE PLAN_HASH_VALUE +UNDEFINE CATEGORY +UNDEFINE FORCE_MATCH +UNDEFINE DESCRIPTION + +@@footer diff --git a/vg/sql_profile_create_fromcursor.sql b/vg/sql_profile_create_fromcursor.sql new file mode 100644 index 0000000..48a9f73 --- /dev/null +++ b/vg/sql_profile_create_fromcursor.sql @@ -0,0 +1,77 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Create SQL Profile +* Parameters : 1 - SQL ID +* 2 - SQL Child Number +* 3 - SQL Profile Categor, usually "DEFAULT" +* 4 - FORCE_MATCH, possibile values - TRUE or FALSE +* 5 - SQL Profile Description +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-May-12 Vishal Gupta First cut +* +*/ + + +DEFINE SQLID="&&1" +DEFINE CHILD_NO="&&2" +DEFINE CATEGORY="&&3" +DEFINE FORCE_MATCH="&&4" +DEFINE DESCRIPTION="&&5" + +set serveroutput on +declare + ar_profile_hints sys.sqlprof_attr; + cl_sql_text clob; + l_profile_name VARCHAR2(30) := 'PROF_' || '&&SQLID' || '_' || '&&PLAN_HASH_VALUE'; +begin + SELECT extractvalue(value(d), '/hint') AS outline_hints + bulk collect + INTO ar_profile_hints + FROM xmltable('/*/outline_data/hint' passing + (SELECT xmltype(other_xml) AS xmlval + FROM v$sql_plan + WHERE sql_id = '&&SQLID' + AND child_number = &&CHILD_NO + AND other_xml IS NOT NULL + ) ) d; + + SELECT sql.sql_fulltext + INTO cl_sql_text + FROM v$sqlarea sql + WHERE sql.sql_id = '&&SQLID'; + + dbms_sqltune.import_sql_profile( sql_text => cl_sql_text + , profile => ar_profile_hints + , category => '&&CATEGORY' + , name => l_profile_name + , description => '&&DESCRIPTION' + -- use force_match => true + -- to use CURSOR_SHARING=SIMILAR + -- behaviour, i.e. match even with + -- differing literals + , force_match => &&FORCE_MATCH + -- , replace => true + ); + + dbms_output.put_line(' '); + dbms_output.put_line('SQL Profile '||l_profile_name||' created.'); + dbms_output.put_line(' '); + +end; +/ + +UNDEFINE SQLID +UNDEFINE CHILD_NO +UNDEFINE CATEGORY +UNDEFINE FORCE_MATCH + + +@@footer diff --git a/vg/sql_profile_detail.sql b/vg/sql_profile_detail.sql new file mode 100644 index 0000000..a3327d4 --- /dev/null +++ b/vg/sql_profile_detail.sql @@ -0,0 +1,59 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all SQL Profiles +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-May-12 Vishal Gupta Created +*/ + +COLUMN column1 FORMAT a120 + +UNDEFINE sql_profile_name +DEFINE sql_profile_name="&&1" + + +DEFINE rpad_length=15 + +PROMPT ***************************************************************** +PROMPT * Profile Details +PROMPT ***************************************************************** + +set heading off +SELECT /*+ ORDERED */ + RPAD('Name',&&rpad_length) || ' : ' || so.name || chr(10) || + RPAD('Description',&&rpad_length) || ' : ' || sp.description || chr(10) || + RPAD('Version',&&rpad_length) || ' : ' || ad.version || chr(10) || + RPAD('Category',&&rpad_length) || ' : ' || sp.category || chr(10) || + RPAD('Force Matching',&&rpad_length)|| ' : ' || sp.force_matching || chr(10) || + RPAD('Type',&&rpad_length) || ' : ' || sp.type || chr(10) || + RPAD('Status',&&rpad_length) || ' : ' || sp.status || chr(10) || + RPAD('Signature',&&rpad_length) || ' : ' || so.signature || chr(10) || + RPAD('Creator',&&rpad_length) || ' : ' || ad.creator || chr(10) || + RPAD('Creation Time',&&rpad_length) || ' : ' || to_char(sp.created,'DD-MON-YY HH24:MI:SS') || chr(10) || + RPAD('Last Modified',&&rpad_length) || ' : ' || to_char(sp.last_modified,'DD-MON-YY HH24:MI:SS') || chr(10) || + RPAD('Last Executed',&&rpad_length) || ' : ' || to_char(so.last_executed,'DD-MON-YY HH24:MI:SS') || chr(10) || + RPAD('Last Verified',&&rpad_length) || ' : ' || to_char(ad.last_verified,'DD-MON-YY HH24:MI:SS') || chr(10) || + RPAD('SQL Text',&&rpad_length) || ' : ' || chr(10) || + sp.sql_text || chr(10) || + ' ' column1 + FROM dba_sql_profiles sp + JOIN sys.sqlobj$ so ON so.signature = sp.signature AND so.category = sp.category AND so.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sqlobj$auxdata ad ON so.signature = ad.signature AND so.category = ad.category AND ad.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sql$text st ON so.signature = st.signature + JOIN sys.sql$ sq ON so.signature = sq.signature +WHERE 1=1 + AND upper(sp.name) = upper('&&sql_profile_name') +ORDER BY sp.last_modified DESC +; + +set heading on + +@@footer diff --git a/vg/sql_profile_hints.sql b/vg/sql_profile_hints.sql new file mode 100644 index 0000000..ed03cd0 --- /dev/null +++ b/vg/sql_profile_hints.sql @@ -0,0 +1,39 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Profile hints +* Parameters : 1 - SQL Profile Name +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-Mar-15 Vishal Gupta Created +* +*/ + + +UNDEFINE SQLPROFILENAME +DEFINE SQLPROFILENAME="&&1" + +COLUMN outline_hints HEADING "SQL Profile Hints" FORMAT a150 + + +SELECT extractvalue(value(d), '/hint') AS outline_hints +FROM xmltable('/outline_data/hint' passing + (SELECT xmltype(sd.comp_data) as xmlval + FROM dba_sql_profiles sp + JOIN sys.sqlobj$ so ON so.signature = sp.signature AND so.category = sp.category AND so.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + JOIN sys.sqlobj$data sd ON sd.signature = so.signature AND sd.category = so.category AND sd.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + --JOIN sys.sqlobj$auxdata ad ON ad.signature = so.signature AND ad.category = so.category AND ad.obj_type = 1 /* 1 = SQLProfile, 2=SQL Plan */ + WHERE 1=1 + AND sp.name = '&&SQLPROFILENAME' + ) + ) d +; + + +@@footer diff --git a/vg/sql_profile_withsqlid.sql b/vg/sql_profile_withsqlid.sql new file mode 100644 index 0000000..848261e --- /dev/null +++ b/vg/sql_profile_withsqlid.sql @@ -0,0 +1,43 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all SQL Profiles +* Parameters : +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-May-12 Vishal Gupta First cut +*/ + +COLUMN name HEADING "Name" FORMAT a30 +COLUMN category HEADING "Category" FORMAT a15 +COLUMN created HEADING "Created" FORMAT a15 +COLUMN last_modified HEADING "LastModified" FORMAT a15 +COLUMN force_matching HEADING "Force|Match" FORMAT a5 +COLUMN sql_id HEADING "SQL_id" FORMAT a13 +COLUMN signature HEADING "Signature" FORMAT 999999999999999999999 +COLUMN description HEADING "Description" FORMAT a50 + +--BREAK ON name ON CATEGORY ON created ON last_modified ON type ON status ON force_matching ON signature ON description + +SELECT /*+ ORDERED */ + sp.name + , sp.category + , to_char(sp.created,'DD-MON-YY HH24:MI') created + , to_char(sp.last_modified,'DD-MON-YY HH24:MI') last_modified + , sp.type + , sp.status + , sp.force_matching + , sys.DBMS_SQLTUNE_UTIL0.SQLTEXT_TO_SQLID(sp.sql_text) sql_id + , sp.signature + , sp.description + FROM dba_sql_profiles sp +ORDER BY sp.last_modified DESC +; + +@@footer diff --git a/vg/sql_shared_cursor_reason.sql b/vg/sql_shared_cursor_reason.sql new file mode 100644 index 0000000..32cf74e --- /dev/null +++ b/vg/sql_shared_cursor_reason.sql @@ -0,0 +1,98 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQL statements creating child cursors +* Parameters : 1 - SQL_ID +* 2 - INST_ID (Default %) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 13-Jul-12 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE SQL_ID="&&1" +DEFINE INST_ID="&&2" + + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" +FROM DUAL; +set term on + +PROMPT *************************************************************** +PROMPT * Reason for SQL Child Cursor Creation +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL_ID = '&&SQL_ID' +PROMPT * - INST_ID = '&&INST_ID' (Default '%') +PROMPT *************************************************************** + + +set serveroutput on + + +DECLARE + v_count number; + v_sql varchar2(500); + v_inst_id varchar2(2) := '&&INST_ID'; + v_sql_id varchar2(30) := '&&SQL_ID'; +BEGIN + v_sql_id := lower(v_sql_id); + dbms_output.put_line(chr(13)||chr(10)); + dbms_output.put_line('Instance ID : '||v_inst_id); + dbms_output.put_line('SQL ID : '||v_sql_id); + dbms_output.put_line('Reason : '); + dbms_output.put_line('------------------------'); + FOR c1 in + (select column_name + from dba_tab_columns + where table_name ='GV_$SQL_SHARED_CURSOR' + and column_name not in ('INST_ID','SQL_ID', 'ADDRESS', 'CHILD_ADDRESS', 'CHILD_NUMBER', 'REASON') + order by column_id) + LOOP + v_sql := 'select count(*) from GV$SQL_SHARED_CURSOR ' + || ' where sql_id='||''''||v_sql_id||''' '; + IF v_inst_id <> '%' THEN + v_sql := v_sql || 'and inst_id = '||v_inst_id||' ' ; + END IF; + v_sql := v_sql || ' and '||c1.column_name||'='||''''||'Y'||''' '; + + execute immediate v_sql into v_count; + IF v_count > 0 + THEN + dbms_output.put_line(' - '||rpad(c1.column_name,30)||' count: '||v_count); + END IF; + END LOOP; +END; +/ + + +/* +COLUMN reason HEADING 'Mismatch Reason' FORMAT a50 + +SELECT c.sql_id + , count(1) "Count" + , extractvalue(XMLType(c.reason),'/ChildNode/reason') reason +FROM GV$SQL_SHARED_CURSOR c +where c.sql_id = '&&SQL_ID' +and c.inst_id like '&&INST_ID' +and c.reason is not null +and dbms_lob.substr(c.reason,1) <> ' ' +GROUP BY sql_id, extractvalue(XMLType(c.reason),'/ChildNode/reason') +; +*/ + +UNDEFINE INST_ID +UNDEFINE SQL_ID + +@@footer \ No newline at end of file diff --git a/vg/sql_shared_cursor_top.sql b/vg/sql_shared_cursor_top.sql new file mode 100644 index 0000000..2d6fccf --- /dev/null +++ b/vg/sql_shared_cursor_top.sql @@ -0,0 +1,66 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top SQL statements creating child cursors +* Parameters : 1 - INST_ID +* 2 - TopRecordCount +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 13-Jul-12 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE INST_ID +UNDEFINE TOP_ROWCOUNT +DEFINE INST_ID="&&1" +DEFINE TOP_ROWCOUNT="&&2" + +COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT +COLUMN _TOP_ROWCOUNT NEW_VALUE TOP_ROWCOUNT NOPRINT + +set term off +SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" + , DECODE('&&TOP_ROWCOUNT','','30','&&TOP_ROWCOUNT') "_TOP_ROWCOUNT" +FROM DUAL; +set term on + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +PROMPT *************************************************************** +PROMPT * TOP &&TOP_ROWCOUNT SQL Ids with large number of child cursors +PROMPT * +PROMPT * Input Parameters +PROMPT * - Instance Number = '&&INST_ID' (Default %) +PROMPT * - Top Rows Count = '&&TOP_ROWCOUNT' (Default 30) +PROMPT *************************************************************** + +COLUMN inst_id HEADING "Instance Number " FORMAT 99 +COLUMN sql_id HEADING "SQLId" FORMAT a13 +COLUMN sql_child_number HEADING "SQL|Child Cursor|Count" FORMAT 99999 + + +SELECT * FROM +( + SELECT c.inst_id + , c.sql_id + , count(c.child_number) child_count + FROM gv$sql_shared_cursor c + WHERE c.inst_id LIKE '&&INST_ID' + GROUP BY c.inst_id + , c.sql_id + ORDER BY count(c.child_number) DESC +) +WHERE rownum <= &&TOP_ROWCOUNT +; + +@@footer \ No newline at end of file diff --git a/vg/sql_similar.sql b/vg/sql_similar.sql new file mode 100644 index 0000000..6d7c123 --- /dev/null +++ b/vg/sql_similar.sql @@ -0,0 +1,93 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display similar SQLs not using bind varaibles +* Parameters : 1 - Top Number of Rows (Default is 30) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------------- +* 06-Jul-15 Vishal Gupta Added force_matching_signature as the input parameter +* 08-SEP-14 Vishal Gupta Added memory in the output +* 25-Oct-12 Vishal Gupta Excluded PL/SQL statements (force_matching_signature=0) +* 11-Oct-12 Vishal Gupta Created +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE TOP_ROWCOUNT +UNDEFINE FORCE_MATCHING_SIGNATURE +UNDEFINE WHERECLAUSE + +DEFINE TOP_ROWCOUNT="&&1" +DEFINE FORCE_MATCHING_SIGNATURE="&&2" +DEFINE WHERECLAUSE="&&3" + +COLUMN _TOP_ROWCOUNT NEW_VALUE TOP_ROWCOUNT NOPRINT +COLUMN _FORCE_MATCHING_SIGNATURE NEW_VALUE FORCE_MATCHING_SIGNATURE NOPRINT + +set term off +SELECT DECODE('&&TOP_ROWCOUNT','','30','&&TOP_ROWCOUNT') "_TOP_ROWCOUNT" + , DECODE('&&FORCE_MATCHING_SIGNATURE','','%','&&FORCE_MATCHING_SIGNATURE') "_FORCE_MATCHING_SIGNATURE" +FROM DUAL +; +set term on + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +PROMPT ************************************************************************************* +PROMPT * S I M I L A R S Q L S T A T E M E N T S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Top Row Count = "&&TOP_ROWCOUNT" (Default Value 30) +PROMPT * - Force Matching Signature = "&&FORCE_MATCHING_SIGNATURE" (Default Value %) +PROMPT * - WhereClause = "&&WHERECLAUSE" +PROMPT ************************************************************************************* + +COLUMN force_matching_signature HEADING "Force|Matching|Signature" FORMAT 999999999999999999999 +COLUMN mem HEADING "Memory|(MB)" FORMAT 999,999 +COLUMN sql_count HEADING "Distinct|SQL|Count" FORMAT 9,999,999 +COLUMN executions HEADING "Execs" FORMAT 9,999,999 +COLUMN loaded_versions HEADING "Loaded|Vers" FORMAT 9,999,999 +COLUMN min_last_active_time HEADING "Min|Last|ActiveTime" FORMAT a16 +COLUMN max_last_active_time HEADING "Max|Last|ActiveTime" FORMAT a16 +COLUMN parsing_schema_name HEADING "SchemaName" FORMAT a16 +COLUMN module HEADING "Module" FORMAT a20 TRUNCATE +COLUMN sql_text HEADING "SQL Text" FORMAT a70 TRUNCATE + +SELECT a.* +FROM +( SELECT sql.force_matching_signature + , max(sql_id) sql_id + , sum(sql.sharable_mem + sql.persistent_mem + sql.runtime_mem)/power(1024,2) mem + , count( DISTINCT sql.sql_id) sql_count + , SUM(sql.executions) executions + , sum(sql.loaded_versions) loaded_versions + , TO_CHAR(min(sql.last_active_time),'DD-MON-YY HH24:MI') min_last_active_time + , TO_CHAR(max(sql.last_active_time),'DD-MON-YY HH24:MI') max_last_active_time + , sql.parsing_schema_name + , max(sql.module) module + , max(sql.sql_text) sql_text + FROM GV$SQLAREA sql + WHERE force_matching_signature <> 0 --Exclude PL/SQL statements + AND force_matching_signature like '&&FORCE_MATCHING_SIGNATURE' + &&WHERECLAUSE + GROUP BY force_matching_signature + , parsing_schema_name + ORDER BY sql_count DESC +) a +WHERE rownum <= &&TOP_ROWCOUNT +; + + +@@footer diff --git a/vg/sqlid_object_stats.sql b/vg/sqlid_object_stats.sql new file mode 100644 index 0000000..1bf443e --- /dev/null +++ b/vg/sqlid_object_stats.sql @@ -0,0 +1,162 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - SQLId +* 2 - SQL Child Number +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------------------- +* 14-Jul-15 Vishal Gupta Added last_ddl_time, last_spec_change and created columns to output +* 01-Oct-12 Vishal Gupta Created +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE child_number + +DEFINE sql_id="&&1" +DEFINE child_number="&&2" + + +COLUMN _child_number NEW_VALUE child_number NOPRINT + +set term off +SELECT DECODE('&&child_number','','0','&&child_number') "_child_number" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * O B J E C T S T A T I S T I C S ( For a SQLId) +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Child Number = '&&child_number' +PROMPT *********************************************************************** + +COLUMN object_name HEADING "TableName" FORMAT a50 +COLUMN Object_type HEADING "Object|Type" FORMAT a6 +COLUMN stale_stats HEADING "Stale|Stats" FORMAT a5 +COLUMN stattype_locked HEADING "Locked|Stats" FORMAT a5 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN user_stats HEADING "U|s|e|r" FORMAT a1 TRUNCATE +COLUMN sample_size HEADING "SampleSize" FORMAT 9,999,999,999 +COLUMN num_rows HEADING "RowCount" FORMAT 9,999,999,999 +COLUMN blocks HEADING "Blocks" FORMAT 9,999,999,999 +COLUMN Size_MB HEADING "Size(MB)" FORMAT 9,999,999,999 +COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18 +COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18 +COLUMN created HEADING "Created" FORMAT a18 + +WITH objects AS +( + SELECT /*+ ALL_ROWS NO_MERGE LEADING (sp) MATERIALIZE */ + DISTINCT + o.owner + , o.object_name + , o.subobject_name + , REPLACE(o.object_type,'MATERIALIZED','MAT') object_type + , sp.partition_id + , TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time + , TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change + , TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created + FROM gv$sql_plan sp + JOIN dba_objects o ON sp.object# = o.object_id + WHERE sp.object_type IS NOT NULL + AND sp.sql_id = '&&sql_id' + AND sp.child_number = '&&child_number' +) +,stats AS +( + SELECT /*+ ALL_ROWS NO_MERGE LEADING(o) MATERIALIZE */ + s.owner + || '.' || s.table_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + object_name + , o.object_type + , s.stale_stats + , s.stattype_locked + , s.last_analyzed + , s.sample_size + , s.num_rows + , s.blocks + , (seg.bytes)/1024/1024 Size_MB + , o.last_ddl_time + , o.last_specification_change + , o.created + FROM objects o + JOIN dba_tab_statistics s ON o.owner = s.owner + AND o.object_name = s.table_name + AND NVL(s.partition_name,'%') LIKE NVL(o.subobject_name,'%') + AND NVL(s.partition_position,0) LIKE NVL(o.partition_id,0) + JOIN dba_segments seg ON seg.owner = o.owner + AND seg.segment_name = o.object_name + --AND seg.segment_type = o.object_type + AND NVL(o.subobject_name,'%') LIKE NVL(seg.partition_name,'%') + AND NVL(s.partition_position,0) = NVL(o.partition_id,0) + WHERE s.table_name NOT LIKE 'BIN$%' + AND s.table_name NOT LIKE '%==%' + UNION ALL + SELECT /*+ ALL_ROWS NO_MERGE LEADING(o) MATERIALIZE */ + s.owner + || '.' || s.index_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + object_name + , o.object_type + , s.stale_stats + , s.stattype_locked + , s.last_analyzed + , s.sample_size + , s.num_rows + , s.leaf_blocks blocks + , (seg.bytes)/1024/1024 Size_MB + , o.last_ddl_time + , o.last_specification_change + , o.created + FROM objects o + JOIN dba_ind_statistics s ON o.owner = s.owner + AND o.object_name = s.index_name + AND NVL(o.subobject_name,'%') = NVL(s.partition_name,'%') + JOIN dba_segments seg ON seg.owner = o.owner + AND seg.segment_name = o.object_name + -- AND seg.segment_type = o.object_type + AND NVL(seg.partition_name,'%') = NVL(o.subobject_name,'%') + WHERE s.table_name NOT LIKE 'BIN$%' + AND s.index_name NOT LIKE 'BIN$%' + AND s.table_name NOT LIKE '%==%' + AND s.index_name NOT LIKE '%==%' +) +SELECT /*+ ALL_ROWS */ + object_name + , object_type + , stale_stats + , stattype_locked + , to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , sample_size + , num_rows + , blocks + , Size_MB + , last_ddl_time + , last_specification_change + , created + FROM stats s +--ORDER BY s.last_analyzed ASC +ORDER BY object_name +; + + + +@@footer diff --git a/vg/sqlid_objects.sql b/vg/sqlid_objects.sql new file mode 100644 index 0000000..de6ecdc --- /dev/null +++ b/vg/sqlid_objects.sql @@ -0,0 +1,81 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display objects used in a SQL Id +* Parameters : 1 - SQLId +* 2 - SQL Child Number +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ -------------------------------------------------------------------- +* 22-Jul-15 Vishal Gupta Created +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE child_number + +DEFINE sql_id="&&1" +DEFINE child_number="&&2" + + +COLUMN _child_number NEW_VALUE child_number NOPRINT + +set term off +SELECT DECODE('&&child_number','','0','&&child_number') "_child_number" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * Objects Used in a SQL Statement +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Child Number = '&&child_number' +PROMPT *********************************************************************** + +COLUMN object_name HEADING "TableName" FORMAT a50 +COLUMN Object_type HEADING "Object|Type" FORMAT a6 +COLUMN stale_stats HEADING "Stale|Stats" FORMAT a5 +COLUMN stattype_locked HEADING "Locked|Stats" FORMAT a5 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN user_stats HEADING "U|s|e|r" FORMAT a1 TRUNCATE +COLUMN sample_size HEADING "SampleSize" FORMAT 9,999,999,999 +COLUMN num_rows HEADING "RowCount" FORMAT 9,999,999,999 +COLUMN blocks HEADING "Blocks" FORMAT 9,999,999,999 +COLUMN Size_MB HEADING "Size(MB)" FORMAT 9,999,999,999 +COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18 +COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18 +COLUMN created HEADING "Created" FORMAT a18 + +SELECT DISTINCT + o.owner + , o.object_name + , o.subobject_name + , REPLACE(o.object_type,'MATERIALIZED','MAT') object_type + , TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time + , TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change + , TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created + FROM gv$sql_plan sp + JOIN dba_objects o ON sp.object# = o.object_id +WHERE sp.object_type IS NOT NULL + AND sp.sql_id = '&&sql_id' + AND sp.child_number = '&&child_number' +ORDER BY o.owner + , o.object_name + , o.subobject_name +; + + + +@@footer diff --git a/vg/sqlid_to_hashvalue.sql b/vg/sqlid_to_hashvalue.sql new file mode 100644 index 0000000..15d7844 --- /dev/null +++ b/vg/sqlid_to_hashvalue.sql @@ -0,0 +1,33 @@ +/* + +Description - Converts SQLID into HASH_VALUE +Input Parameter - SQL_ID +Source - http://blog.tanelpoder.com/2009/02/22/sql_id-is-just-a-fancy-representation-of-hash-value/ + +Basically all it does is takes the SQL ID, interpret it as a 13 character base-32 encoded number and then take only the lowest 4 bytes worth of information (4 bytes in base-256) out of that number and that’s the hash value. + +Actually, since 10g the full story goes like this: + +1) Oracle hashes the library cache object name with MD5, producing a 128 bit hash value +2) Oracle takes last 64 bits of the MD5 hash and this will be the SQL_ID (but it’s shown in base-32 for brevity rather than in hex or as a regular number) +3) Oracle takes last 32 bits of the MD5 hash and this will be the hash value (as seen in v$sql.hash_value). + +In 10gR1+, you can do this: +SQL> select dbms_utility.SQLID_TO_SQLHASH(‘btxdhy7gkbwjk’) hash_value FROM DUAL; +HASH_VALUE +———- +3743806002 + +*/ + +select + lower(trim('&&1')) sql_id + , trunc(mod(sum((instr('0123456789abcdfghjkmnpqrstuvwxyz',substr(lower(trim('&&1')),level,1))-1) + *power(32,length(trim('&&1'))-level)),power(2,32))) hash_value +from + dual +connect by + level <= length(trim('&&1')) +/ + + diff --git a/vg/sqlid_waitevents.sql b/vg/sqlid_waitevents.sql new file mode 100644 index 0000000..09fe48d --- /dev/null +++ b/vg/sqlid_waitevents.sql @@ -0,0 +1,70 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display all wait events for a SQL_ID from all sessions +* Parameters : 1 - SQL_ID +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 14-May-12 Vishal Gupta Intial version +* +*/ + + +DEFINE sqlid="&&1" + +COLUMN INST_ID HEADING "I#" FORMAT 99 +COLUMN SPID FORMAT a6 +COLUMN SID FORMAT 9999 +COLUMN serial# HEADING "Serial#" FORMAT 99999 +COLUMN username FORMAT a20 +COLUMN last_call_et HEADING "Last Call (s)" FORMAT 99,999 +COLUMN logon_time FORMAT a15 +COLUMN service_name FORMAT a21 +COLUMN process FORMAT a15 +COLUMN osuser FORMAT a10 TRUNCATE +COLUMN wait_class HEAD "WaitClass" FORMAT a20 TRUNCATE +COLUMN event HEAD "EventName" FORMAT a40 +COLUMN total_waits HEAD "TotalWaits" +COLUMN total_timeouts HEAD "TotalTimeOuts" +COLUMN time_waited HEAD "TimeWaited (s)" +COLUMN average_wait HEAD "AvgWait (s)" +COLUMN max_wait HEAD "MaxWait (s)" + +SELECT * FROM +( +SELECT e.sid + , e.inst_id + , s.username + , s.osuser + , e.wait_class + , e.event + , e.total_waits + , e.total_timeouts + , e.time_waited / 100 time_waited + , e.average_wait / 100 average_wait + , e.max_wait / 100 max_wait + , s.program + FROM gv$session s + , gv$session_event e + , gv$sqlarea sql + WHERE s.inst_id = sql.inst_id + AND s.sql_id = sql.sql_id + AND s.inst_id = e.inst_id + AND s.sid = e.sid + AND e.wait_class <> 'Idle' + AND s.sql_id = '&&sqlid' +ORDER BY e.time_waited_micro desc +) +where rownum <= 45 +; + +UNDEFINE sqlid + + +@@footer diff --git a/vg/sqlset_load_plan_fromawr.sql b/vg/sqlset_load_plan_fromawr.sql new file mode 100644 index 0000000..d0f525d --- /dev/null +++ b/vg/sqlset_load_plan_fromawr.sql @@ -0,0 +1,65 @@ +-- 1. Load AWR into SQL Tuning Set(STS) +-- Drop SQL Tuning Set (STS) +BEGIN + DBMS_SQLTUNE.DROP_SQLSET( SQLSET_NAME => 'VG_STS01' ); +END; +/ + +-- Create SQL Tuning Set (STS) +BEGIN + DBMS_SQLTUNE.CREATE_SQLSET( SQLSET_NAME => 'VG_STS01', DESCRIPTION => 'SQL Tuning Set for loading plan from AWR into SQL Plan Baseline'); +END; +/ + +-- Load AWR plan into STS +DECLARE + REF_CUR DBMS_SQLTUNE.SQLSET_CURSOR; +BEGIN + OPEN REF_CUR FOR + SELECT VALUE(P) + FROM TABLE( DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY ( BEGIN_SNAP => 16184 + , END_SNAP => 16186 + , BASIC_FILTER => ' SQL_ID = ''6h6cvx26whvny'' AND PLAN_HASH_VALUE = 2212718001 ' + , ATTRIBUTE_LIST => 'ALL' + ) + ) p ; + BEGIN + DBMS_SQLTUNE.LOAD_SQLSET( SQLSET_NAME => 'VG_STS01' + , POPULATE_CURSOR => REF_CUR + ) ; + EXCEPTION + WHEN OTHERS THEN + NULL; + END; + DBMS_SQLTUNE.LOAD_SQLSET( SQLSET_NAME => 'VG_STS01' + , POPULATE_CURSOR => REF_CUR + ) ; + commit; +END; +/ + +/* + +-- Load AWR plan into STS +BEGIN + OPEN :REF_CUR FOR + SELECT VALUE(P) + FROM TABLE( DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY ( BEGIN_SNAP => 16184 + , END_SNAP => 16186 + , BASIC_FILTER => ' SQL_ID = ''6h6cvx26whvny'' AND PLAN_HASH_VALUE = 2212718001 ' + , ATTRIBUTE_LIST => 'ALL' + ) + ) p ; +END; +/ + +print :ref_cur; + +BEGIN +DBMS_SQLTUNE.LOAD_SQLSET( SQLSET_NAME => 'VG_STS01' + , POPULATE_CURSOR => :REF_CUR + ) ; +END; +/ + +*/ \ No newline at end of file diff --git a/vg/sqlstats.sql b/vg/sqlstats.sql new file mode 100644 index 0000000..cbe27d5 --- /dev/null +++ b/vg/sqlstats.sql @@ -0,0 +1,181 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats from SQLArea +* Version : 10.1.0.4 and above +* Parameters : 1 - SQL_ID +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Hours (Default 72 hours) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 10-Feb-14 Vishal Gupta Changed default hours from 24 to 72 hours on a request from friend + Now force_matching_signature is taken from gv$sqlstats instead of gv$sqlarea. +* 04-Oct-13 Vishal Gupta Added hour as input, last_active_time in output + Sorted output by last_active_time +* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable +* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output +* 08-Mar-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE hours + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" +DEFINE hours="&&3" + +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +COLUMN _hours NEW_VALUE HOURS NOPRINT + +set term off +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" + , DECODE('&&hours','','72','&&hours') "_hours" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=9,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE COUNT_FORMAT=999,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024/1024" +--DEFINE BYTES_HEADING="MB" +DEFINE BYTES_DIVIDER="1024/1024/1024" +DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + +/************************************ +* MAIN Section +************************************/ + +DEFINE force_matching_signature="" +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +set numf 99999999999999999999999 +select to_char(sql.force_matching_signature) "_force_matching_signature" + from gv$sqlstats sql + where sql.sql_id = '&&sql_id' + and rownum <= 1; +set term on + +PROMPT ************************************************************** +PROMPT * SQL Executions Statistics +PROMPT * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT * - Hours = '&&hours' +PROMPT ************************************************************** + +COLUMN first_load_time HEADING "First Load Time" FORMAT a20 +COLUMN last_active_time HEADING "Last Active Time" FORMAT a20 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations HEADING "Invalid|Total|(&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait HEADING "IO|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN apwait HEADING "Appl|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN ccwait HEADING "Conc|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN clwait HEADING "Cluster|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN plsexec_time HEADING "PLsexec|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN cpu_time HEADING "CPU|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN elapsed_time HEADING "Elapsed|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN executions HEADING "Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN px_servers_executions HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN end_of_fetch_count HEADING "End Of|Fetch|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed HEADING "Rows|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN sorts HEADING "Sorts|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN buffer_gets HEADING "Buffer|Gets|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN direct_writes HEADING "Direct|Write|Total|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_interconnect_bytes HEADING "IO|Inter|Connect|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_read_bytes HEADING "Phy|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_write_bytes HEADING "Phy|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN optimized_physical_reads HEADING "Optimized|Phy|ReadReq|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_offload_elig_bytes HEADING "IO|Offload|Elig|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_offload_return_bytes HEADING "IO|Offload|Return|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a29 +COLUMN sql_plan_baseline HEADING "sql_plan_baseline" FORMAT a30 + +set lines 300 + + SELECT TO_CHAR(TO_DATE(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'),'DD-MON-YYYY HH24:MI:SS') first_load_time + , TO_CHAR(ss.last_active_time,'DD-MON-YYYY HH24:MI:SS') last_active_time + , ss.inst_id instance_number + , ss.sql_id + , ss.plan_hash_value + , ROUND(ss.user_io_wait_time/1000000/&TIME_DIVIDER) iowait + , ROUND(ss.application_wait_time/1000000/&TIME_DIVIDER) apwait + , ROUND(ss.concurrency_wait_time/1000000/&TIME_DIVIDER) ccwait + , ROUND(ss.cluster_wait_time/1000000/&TIME_DIVIDER) clwait + , ROUND(ss.plsql_exec_time/1000000/&TIME_DIVIDER) plsexec_time + , ROUND(ss.cpu_time/1000000/&TIME_DIVIDER) cpu_time + , ROUND(ss.elapsed_time/1000000/&TIME_DIVIDER) elapsed_time + , ss.executions/&COUNT_SMALL_DIVIDER executions + , ss.px_servers_executions/&COUNT_SMALL_DIVIDER px_servers_executions + , ss.end_of_fetch_count/&COUNT_SMALL_DIVIDER end_of_fetch_count + -- , ss.invalidations/&COUNT_DIVIDER invalidations +&&_IF_ORA_10gR2_OR_HIGHER , ss.rows_processed/&COUNT_DIVIDER rows_processed +&&_IF_ORA_10gR2_OR_HIGHER , ss.sorts/&COUNT_SMALL_DIVIDER sorts +&&_IF_ORA_10gR2_OR_HIGHER , ss.buffer_gets/&COUNT_DIVIDER buffer_gets +&&_IF_ORA_10gR2_OR_HIGHER , ROUND(ss.direct_writes/&COUNT_DIVIDER) direct_writes +&&_IF_ORA_11107_OR_HIGHER , ss.io_interconnect_bytes/&BYTES_DIVIDER io_interconnect_bytes +&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_read_bytes/&BYTES_DIVIDER physical_read_bytes +&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_write_bytes/&BYTES_DIVIDER physical_write_bytes +--&&_IF_ORA_11gR2_OR_HIGHER , ss.optimized_physical_reads/&COUNT_DIVIDER optimized_physical_reads +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_cell_offload_eligible_bytes/&BYTES_DIVIDER io_offload_elig_bytes +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_cell_offload_returned_bytes/&BYTES_DIVIDER io_offload_return_bytes +&&_IF_ORA_10gR2_OR_HIGHER , sql.sql_profile +&&_IF_ORA_11gR1_OR_HIGHER , sql.sql_plan_baseline + from gv$sqlstats ss + , gv$sqlarea sql + where ss.inst_id = sql.inst_id (+) + AND ss.sql_id = sql.sql_id (+) + AND ss.plan_hash_value = sql.plan_hash_value (+) + AND ss.plan_hash_value LIKE '&&plan_hash_value' + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature = '&&force_matching_signature' + AND ss.last_active_time > sysdate - (&&hours/24) + order by ss.last_active_time + , ss.inst_id +; + + + +@@footer diff --git a/vg/sqlstats_per_exec.sql b/vg/sqlstats_per_exec.sql new file mode 100644 index 0000000..dd1cd69 --- /dev/null +++ b/vg/sqlstats_per_exec.sql @@ -0,0 +1,175 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQLStats from SQL Area (per Execution) +* Version : 10.1.0.4 and above +* Parameters : 1 - SQL_ID +* 2 - PLAN_HASH_VALUE (Use % as wildcard) +* 3 - Hours (Default 72 hours) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-Feb-14 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE sql_id +UNDEFINE plan_hash_value +UNDEFINE hours + +DEFINE sql_id="&&1" +DEFINE plan_hash_value="&&2" +DEFINE hours="&&3" + +COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT +COLUMN _hours NEW_VALUE HOURS NOPRINT + +set term off +SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value" + , DECODE('&&sql_id','%','%','') "_force_matching_signature" + , DECODE('&&hours','','72','&&hours') "_hours" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE COUNT_SMALL_FORMAT=9,999 +DEFINE COUNT_SMALL_DIVIDER="1" +DEFINE COUNT_SMALL_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE COUNT_FORMAT=999,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" +--DEFINE TIME_DIVIDER="60" +--DEFINE TIME_HEADING="min" + +/************************************ +* MAIN Section +************************************/ + +DEFINE force_matching_signature="" +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +set term off +set numf 99999999999999999999999 +select to_char(sql.force_matching_signature) "_force_matching_signature" + from gv$sqlstats sql + where sql.sql_id = '&&sql_id' + and rownum <= 1; +set term on + +PROMPT ************************************************************** +PROMPT * SQL Executions Statistics (All Figures are per execution) +PROMPT * (Force Matching Signature = '&&force_matching_signature') +PROMPT * +PROMPT * Input Parameters +PROMPT * - SQL Id = '&&sql_id' +PROMPT * - Plan Hash Value = '&&plan_hash_value' +PROMPT * - Hours = '&&hours' +PROMPT ************************************************************** + +COLUMN first_load_time HEADING "First Load Time" FORMAT a20 +COLUMN last_active_time HEADING "Last Active Time" FORMAT a20 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN SQL_ID HEADING "SQLId" FORMAT a13 +COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999 +COLUMN invalidations HEADING "Invalid|Per|Exec|(&COUNT_HEADING)" FORMAT 9,999 +COLUMN iowait HEADING "IO|Wait|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN apwait HEADING "Appl|Wait|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN ccwait HEADING "Conc|Wait|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN clwait HEADING "Cluster|Wait|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN plsexec_time HEADING "PLsexec|Time|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN cpu_time HEADING "CPU|Time|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN elapsed_time HEADING "Elapsed|Time|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT +COLUMN executions HEADING "Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN px_servers_executions HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN rows_processed HEADING "Rows|Per|Exec|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN sorts HEADING "Sorts|Per|Exec|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT +COLUMN buffer_gets HEADING "Buffer|Gets|Per|Exec|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN direct_writes HEADING "Direct|Write|Per|Exec|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_interconnect_bytes HEADING "IO|Inter|Connect|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_read_bytes HEADING "Phy|Read|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN physical_write_bytes HEADING "Phy|Write|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN optimized_physical_reads HEADING "Optimized|Phy|ReadReq|(&COUNT_HEADING)" FORMAT &TIME_FORMAT +COLUMN io_offload_elig_bytes HEADING "IO|Offload|Elig|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN io_offload_return_bytes HEADING "IO|Offload|Return|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN sql_profile HEADING "sql_profile" FORMAT a29 +COLUMN sql_plan_baseline HEADING "sql_plan_baseline" FORMAT a30 + +set lines 300 + + SELECT TO_CHAR(TO_DATE(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'),'DD-MON-YYYY HH24:MI:SS') first_load_time + , TO_CHAR(ss.last_active_time,'DD-MON-YYYY HH24:MI:SS') last_active_time + , ss.inst_id instance_number + , ss.sql_id + , ss.plan_hash_value + , ROUND(ss.user_io_wait_time/1000000/ss.executions/&TIME_DIVIDER) iowait + , ROUND(ss.application_wait_time/1000000/ss.executions/&TIME_DIVIDER) apwait + , ROUND(ss.concurrency_wait_time/1000000/ss.executions/&TIME_DIVIDER) ccwait + , ROUND(ss.cluster_wait_time/1000000/ss.executions/&TIME_DIVIDER) clwait + , ROUND(ss.plsql_exec_time/1000000/ss.executions/&TIME_DIVIDER) plsexec_time + , ROUND(ss.cpu_time/1000000/ss.executions/&TIME_DIVIDER) cpu_time + , ROUND(ss.elapsed_time/1000000/ss.executions/&TIME_DIVIDER) elapsed_time + , ss.executions/&COUNT_SMALL_DIVIDER executions + , ROUND(ss.px_servers_executions/ss.executions/&COUNT_SMALL_DIVIDER) px_servers_executions + -- , ss.invalidations/&COUNT_DIVIDER invalidations +&&_IF_ORA_10gR2_OR_HIGHER , ss.rows_processed/ss.executions/&COUNT_DIVIDER rows_processed +&&_IF_ORA_10gR2_OR_HIGHER , ss.sorts/ss.executions/&COUNT_SMALL_DIVIDER sorts +&&_IF_ORA_10gR2_OR_HIGHER , ss.buffer_gets/ss.executions/&COUNT_DIVIDER buffer_gets +&&_IF_ORA_10gR2_OR_HIGHER , ROUND(ss.direct_writes/ss.executions/&COUNT_DIVIDER) direct_writes +&&_IF_ORA_11107_OR_HIGHER , ss.io_interconnect_bytes/ss.executions/&BYTES_DIVIDER io_interconnect_bytes +&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_read_bytes/ss.executions/&BYTES_DIVIDER physical_read_bytes +&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_write_bytes/ss.executions/&BYTES_DIVIDER physical_write_bytes +--&&_IF_ORA_11gR2_OR_HIGHER , ss.optimized_physical_reads/ss.executions/&COUNT_DIVIDER optimized_physical_reads +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_cell_offload_eligible_bytes/ss.executions/&BYTES_DIVIDER io_offload_elig_bytes +&&_IF_ORA_11gR2_OR_HIGHER , ss.io_cell_offload_returned_bytes/ss.executions/&BYTES_DIVIDER io_offload_return_bytes +&&_IF_ORA_10gR2_OR_HIGHER , sql.sql_profile +&&_IF_ORA_11gR1_OR_HIGHER , sql.sql_plan_baseline + from gv$sqlstats ss + , gv$sqlarea sql + where ss.inst_id = sql.inst_id (+) + AND ss.sql_id = sql.sql_id (+) + AND ss.plan_hash_value = sql.plan_hash_value (+) + AND ss.plan_hash_value LIKE '&&plan_hash_value' + AND ss.sql_id LIKE CASE ss.force_matching_signature + WHEN 0 THEN '&&sql_id' + ELSE '%' + END + AND ss.force_matching_signature = '&&force_matching_signature' + AND ss.last_active_time > sysdate - (&&hours/24) + order by ss.last_active_time + , ss.inst_id +; + + + +@@footer diff --git a/vg/sqltext.sql b/vg/sqltext.sql new file mode 100644 index 0000000..264494a --- /dev/null +++ b/vg/sqltext.sql @@ -0,0 +1,57 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SQL Text from SQLArea +* Parameters : 1 - SQL_ID +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Oct-15 Vishal Gupta Added FORCE_MATCHING_SIGNATURE in the output heading +* 08-Mar-12 Vishal Gupta Initial version +* +* +*/ + +UNDEFINE sqlid +UNDEFINE force_matching_signature + +DEFINE sqlid="&&1" +DEFINE force_matching_signature="" + +SET long 4000000 +SET longchunksize 400000 +SET pages 0 +set lines 300 + + + + +COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT + +select to_char(s.force_matching_signature) "_force_matching_signature" + from gv$sqlarea s +WHERE s.sql_id = '&&sqlid' +and rownum = 1 +; + + +Prompt ******************************************************** +Prompt * SQL Text for SQLID = &&sqlid +Prompt * Force Matching Signature = &&force_matching_signature +Prompt ******************************************************** + +COLUMN sql_text HEADING "SQLText" FORMAT a200 WRAP + +SELECT s.sql_fulltext sql_text +FROM gv$sqlarea s +WHERE s.sql_id = '&&sqlid' +and rownum = 1 +; + + +@@footer diff --git a/vg/sqltext_search.sql b/vg/sqltext_search.sql new file mode 100644 index 0000000..3119525 --- /dev/null +++ b/vg/sqltext_search.sql @@ -0,0 +1,40 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Search SQL Text from SQLArea to find SQLId +* Parameters : 1 - SQLText to search (Use % as wild card) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 12-Jun-13 Vishal Gupta Added force_matching_signature to output +* 08-Mar-12 Vishal Gupta Created +* +* +*/ + +DEFINE sqltext="&&1" + +SET long 100 +SET longchunksize 100 +SET pages 0 + +COLUMN sql_fulltext HEADING "SQLText" FORMAT a200 WRAP +COLUMN force_matching_signature HEADING "FORCE_MATCHING_SIGNATURE" FORMAT 999999999999999999999 + +-- Using a DISTINCT gives following error +-- ORA-00932: inconsistent datatypes: expected - got CLOB +SELECT inst_id, s.sql_id, force_matching_signature, s.sql_fulltext +FROM gv$sqlarea s +WHERE upper(s.sql_text) like upper(q'[&&sqltext]') +AND s.sql_text NOT LIKE '%gv$sql%' +AND s.sql_text NOT LIKE '%dba_hist_sql%' +; + +UNDEFINE sqltext + +@@footer diff --git a/vg/sqltext_to_sqlid.sql b/vg/sqltext_to_sqlid.sql new file mode 100644 index 0000000..6946046 --- /dev/null +++ b/vg/sqltext_to_sqlid.sql @@ -0,0 +1,43 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Convert SQLText to SQLID +* Parameters : 1 - SQLText +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 11-Mar-15 Vishal Gupta Created +* +* +*/ + +COLUMN FORCE_MATCHING_SIGNATURE FORMAT 9999999999999999999999999 +COLUMN SQL_ID FORMAT a20 + +------------------------------------------------- +-- Convert SQLText to FORCE_MATCHING_SIGNATURE +------------------------------------------------- +SELECT sys.DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(q'[ +SELECT * FROM DUAL +]' +,force_match => 1) FORCE_MATCHING_SIGNATURE +FROM DUAL +; + +/* +------------------------------------------------- +-- Convert SQLText to SQL_ID +------------------------------------------------- +SELECT sys.DBMS_SQLTUNE_UTIL0.SQLTEXT_TO_SQLID(q'[ +SELECT * FROM DUAL +]') SQL_ID +FROM DUAL +; +*/ + +@@footer diff --git a/vg/statname.sql b/vg/statname.sql new file mode 100644 index 0000000..76dd1e6 --- /dev/null +++ b/vg/statname.sql @@ -0,0 +1,58 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display the statistic names +* Version : +* Parameters : 1 - Metric Name (Use % as wildcard and \ as escape character) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Oct-12 Vishal Gupta Created +* +*/ + + +DEFINE statname="&&1" + +Prompt +Prompt *************************************************************************************************** +Prompt * ALL Statistics Names like '&&statname' +Prompt *************************************************************************************************** + +COLUMN statistic# HEADING "Stat#" FORMAT 9999 +COLUMN class_name HEADING "Class" FORMAT a10 +COLUMN name HEADING "Statistics Name" FORMAT a80 + +SELECT * FROM +( +SELECT s.statistic# + , DECODE(s.class + , 1 , 'User' + , 2 , 'Redo' + , 4 , 'Enqueue' + , 8 , 'Cache' + , 16 , 'OS' + , 32 , 'RAC' + , 33 , 'RAC,User' + , 40 , 'RAC,Cache' + , 64 , 'SQL' + , 72 , 'SQL,Cache' + , 128 , 'Debug' + , 192 , 'SQL,Debug' + , class) class_name + , name + FROM v$statname s +) +WHERE ( UPPER(name) like UPPER('&&statname') ESCAPE '\' + OR UPPER(class_name) like UPPER('&&statname') ESCAPE '\') +ORDER BY UPPER(name) +; + +UNDEFINE statname + +@@footer diff --git a/vg/stats.sql b/vg/stats.sql new file mode 100644 index 0000000..494d66c --- /dev/null +++ b/vg/stats.sql @@ -0,0 +1,209 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - OWNER (% - wildchar, \ - escape char) +* 2 - Table Name (% - wildchar, \ - escape char) +* 3 - Parition Name (% - wildchar, \ - escape char) +* 4 - Sub-Parition Name (% - wildchar, \ - escape char) +* 5 - Object Type (% - wildchar, \ - escape char) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Jul-15 Vishal Gupta Increased sizes of LeafBlocks and SampleSize columns +* 27-Jun-12 Vishal Gupta Added parition, sub-parition and objecttype as input +* 31-May-12 Vishal Gupta Changed output formatting +* 16-Mar-12 Vishal Gupta Intial version +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE partition_name="&&3" +DEFINE subpartition_name="&&4" +DEFINE object_type="&&5" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _partition_name NEW_VALUE partition_name NOPRINT +COLUMN _subpartition_name NEW_VALUE subpartition_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&partition_name','','%','&&partition_name') "_partition_name" + , DECODE('&&subpartition_name','','%','&&subpartition_name') "_subpartition_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" +FROM DUAL; +set term on + + + +PROMPT +PROMPT *********************************************************************** +PROMPT * T A B L E S T A T I S T I C S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Partition Name = '&&partition_name' +PROMPT * - SubPartition Name = '&&subpartition_name' +PROMPT * - Object Type = '&&object_type' +PROMPT *********************************************************************** + +COLUMN owner HEADING "Owner" FORMAT a20 +COLUMN table_name HEADING "TableName" FORMAT a60 +COLUMN object_type HEADING "Object|Type" FORMAT a12 +COLUMN object_type_sort_order NOPRINT +COLUMN partition_name HEADING "Partition" FORMAT a25 +COLUMN partition_position HEADING "Part|Pos" FORMAT 999 +COLUMN subpartition_name HEADING "Sub-Partition" FORMAT a25 +COLUMN subpartition_position HEADING "Sub|Part|Pos" FORMAT 999 +--COLUMN stattype_locked HEADING "Lock|Stat" FORMAT a4 +--COLUMN global_stats HEADING "Global|Stat" FORMAT a5 +--COLUMN user_stats HEADING "User|Stat" FORMAT a4 +--COLUMN stale_stats HEADING "Stale|Stat" FORMAT a5 +--COLUMN stattype_locked HEADING "Lock|Stat" FORMAT a4 +COLUMN global_stats HEADING "G|l|o|b|a|l" FORMAT a1 TRUNCATE +COLUMN user_stats HEADING "U|s|e|r" FORMAT a1 TRUNCATE +COLUMN stale_stats HEADING "S|t|a|l|e" FORMAT a1 TRUNCATE +COLUMN stattype_locked HEADING "L|o|c|k" FORMAT a1 TRUNCATE +COLUMN last_analyzed HEADING "Last|Analyzed" FORMAT a18 +COLUMN SizeMB HEADING "Size (MB)" FORMAT 99,999,999 +COLUMN sample_size HEADING "Sample|Size" FORMAT 99,999,999,999 +COLUMN num_rows HEADING "Row|Count" FORMAT 99,999,999,999 +COLUMN blocks HEADING "Blocks" FORMAT 999,999,999 +COLUMN empty_blocks HEADING "Empty|Blocks" FORMAT 99,999,999 +COLUMN avg_space HEADING "Avg|Space" FORMAT 999,999 +COLUMN chain_cnt HEADING "Chain|Count" FORMAT 999,999 +COLUMN avg_row_len HEADING "Avg|Row|Length" FORMAT 9999 + + +select /*+ RULE */ + s.owner || '.' || s.table_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + table_name + , s.object_type + , DECODE (s.object_type + , 'TABLE' ,1 + , 'PARTITION' ,2 + , 'SUBPARTITION' ,3 + ,9 + ) object_type_sort_order + , stattype_locked + , global_stats + , user_stats + , stale_stats + , to_char(last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , (s.blocks * p.value) /1024/1024 SizeMB + , num_rows + , s.blocks + , empty_blocks + , avg_space + , chain_cnt + , avg_row_len + , sample_size + FROM dba_tab_statistics s + , v$system_parameter p +WHERE p.name = 'db_block_size' + AND s.table_name NOT LIKE 'BIN$%' + AND s.owner LIKE upper('&&owner') ESCAPE '\' + AND s.table_name LIKE upper('&&table_name') ESCAPE '\' + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +ORDER BY owner + , s.table_name + , s.object_type DESC + , s.partition_position + , s.subpartition_position +/ + +PROMPT +PROMPT *********************************** +PROMPT * Index Statistics +PROMPT *********************************** + +COLUMN table_name HEADING "TableName" FORMAT a30 +COLUMN index_name HEADING "IndexName" FORMAT a65 +COLUMN distinct_keys HEADING "Distinct|Keys" FORMAT 99,999,999,999 +COLUMN blevel HEADING "BLevel" FORMAT 99999 +COLUMN clustering_factor HEADING "Clustering|Factor" FORMAT 99,999,999,999 +COLUMN leaf_blocks HEADING "Leaf|Blocks" FORMAT 999,999,999 +COLUMN avg_leaf_blocks_per_key HEADING "Avg|Leaf|Blocks|PerKey" FORMAT 999,999 +COLUMN avg_data_blocks_per_key HEADING "Avg|Data|Blocks|PerKey" FORMAT 999,999 + +select /*+ RULE */ + s.owner || '.' || s.index_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + index_name + , s.object_type + , DECODE (s.object_type + , 'TABLE' ,1 + , 'PARTITION' ,2 + , 'SUBPARTITION' ,3 + ,9 + ) object_type_sort_order + , s.stattype_locked + , s.global_stats + , s.user_stats + , s.stale_stats + , to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , ROUND((s.leaf_blocks * p.value) /1024/1024 ) SizeMB + , s.num_rows + , s.distinct_keys + , s.blevel + , s.clustering_factor + , s.sample_size + , s.leaf_blocks + , s.avg_leaf_blocks_per_key + , s.avg_data_blocks_per_key + FROM dba_ind_statistics s + , v$system_parameter p +WHERE p.name = 'db_block_size' + AND s.table_name NOT LIKE 'BIN$%' + AND s.owner LIKE upper('&&owner') ESCAPE '\' + AND s.table_name LIKE upper('&&table_name') ESCAPE '\' + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','INDEX PARTITION' + ,'SUBPARTITION','INDEX SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +ORDER BY s.owner + , s.table_name + , s.index_name + , object_type_sort_order + , s.partition_position + , s.subpartition_position +/ + +@@footer diff --git a/vg/stats_aux.sql b/vg/stats_aux.sql new file mode 100644 index 0000000..0b90b08 --- /dev/null +++ b/vg/stats_aux.sql @@ -0,0 +1,29 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Display system statistics information +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 29-Dec-14 Vishal Gupta Created +* +*/ + + +COLUMN sname HEADING "Stat Type" FORMAT a15 +COLUMN pname HEADING "Stat Name" FORMAT a15 +COLUMN value HEADING "Value" FORMAT a30 + +SELECT sname + , pname + , TRIM(NVL(TO_CHAR(pval1,'999,999,999'),pval2)) value +FROM sys.aux_stats$ +; + + +@@footer \ No newline at end of file diff --git a/vg/stats_aux_history.sql b/vg/stats_aux_history.sql new file mode 100644 index 0000000..9492d26 --- /dev/null +++ b/vg/stats_aux_history.sql @@ -0,0 +1,43 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Display system statistics history +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 29-Dec-14 Vishal Gupta Created +* +*/ + + +COLUMN savtime HEADING "SaveTime" FORMAT a25 +COLUMN sname HEADING "Stat Type" FORMAT a15 +COLUMN pname HEADING "Stat Name" FORMAT a15 +COLUMN value HEADING "Value" FORMAT a30 + +SELECT NVL(TO_CHAR(savtime,'DD-MON-YYYY HH24:MI:SS'),'Current') savtime + , pname + , value +FROM +( +SELECT savtime + , pname + , TRIM(NVL(TO_CHAR(pval1,'999,999,999'),pval2)) value + FROM sys.wri$_optstat_aux_history +UNION ALL +SELECT NULL + , pname + , TRIM(NVL(TO_CHAR(pval1,'999,999,999'),pval2)) value +FROM sys.aux_stats$ +WHERE sname = 'SYSSTATS_MAIN' +) a +ORDER BY a.savtime NULLS LAST, pname +; + + +@@footer \ No newline at end of file diff --git a/vg/stats_change.sql b/vg/stats_change.sql new file mode 100644 index 0000000..9e88927 --- /dev/null +++ b/vg/stats_change.sql @@ -0,0 +1,189 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display table/index where rowcount has changed by more then specified threshold +* Parameters : 1 - OWNER (% - wildchar, \ - escape char) +* 2 - Object Name (% - wildchar, \ - escape char) +* 3 - Partition Name (% - wildchar, \ - escape char) +* 4 - Object Type (% - wildchar, \ - escape char) +* 5 - Row Count Percent Threshold (Default Value 10) +* 6 - Where Clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 03-Jul-15 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE subobject_name +UNDEFINE object_type +UNDEFINE diff_rowcnt_percent +UNDEFINE WHERECLAUSE + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE subobject_name="&&3" +DEFINE object_type="&&4" +DEFINE diff_rowcnt_percent="&&5" +DEFINE WHERECLAUSE="&&6" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT +COLUMN _diff_rowcnt_percent NEW_VALUE diff_rowcnt_percent NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" + , DECODE('&&subobject_name','','%','&&subobject_name') "_subobject_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" + , DECODE('&&diff_rowcnt_percent','','10','&&diff_rowcnt_percent') "_diff_rowcnt_percent" +FROM DUAL +; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * S T A T I S T I C S C H A N G E +PROMPT * +PROMPT * Input Parameters +PROMPT * - Object Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - SubObject Name = '&&subobject_name' +PROMPT * - Object Type = '&&object_type' +PROMPT * - Diff Row % = '&&diff_rowcnt_percent' +PROMPT * - Where Clause = '&&WHERECLAUSE' +PROMPT *********************************************************************** + +COLUMN object_name HEADING "ObjectName" FORMAT a60 +COLUMN subobject_name HEADING "SubObjectName" FORMAT a30 +COLUMN object_type HEADING "Object|Type" FORMAT a18 +COLUMN ANALYZETIME HEADING "AnalyzeTime" FORMAT a18 +COLUMN prev_ANALYZETIME HEADING "Prev|AnalyzeTime" FORMAT a18 +COLUMN rowcnt HEADING "RowCount" FORMAT 999,999,999,999 +COLUMN prev_rowcnt HEADING "Prev|RowCount" FORMAT 999,999,999,999 +COLUMN diff_rowcnt HEADING "Diff|RowCount" FORMAT 999,999,999,999 +COLUMN diff_rowcnt_percent HEADING "Diff|Row|(%)" FORMAT 990.99 +COLUMN SizeMB HEADING "Size|(MB)" FORMAT 9,999,999 +COLUMN prev_SizeMB HEADING "Prev|Size|(MB)" FORMAT 9,999,999 +COLUMN diff_SizeMB HEADING "Diff|Size|(MB)" FORMAT 9,999,999 + + + +WITH last_stat as +( select /*+ NO_MERGE MATERIALIZE */ + obj# + , max(analyzetime) analyzetime + from sys.wri$_optstat_tab_history + GROUP BY obj# +) +, stats as +( SELECT /*+ NO_MERGE MATERIALIZE */ + obj# + , analyzetime prev_analyzetime + , rowcnt prev_rowcnt + , blkcnt prev_blkcnt + FROM sys.wri$_optstat_tab_history h +) +select o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name, '') object_name + , o.object_type object_type + , ROUND((NVL(tsp.num_rows,NVL(tp.num_rows,t.num_rows)) - s.prev_rowcnt)/s.prev_rowcnt * 100, 2) diff_rowcnt_percent + , NVL(tsp.num_rows,NVL(tp.num_rows,t.num_rows)) - s.prev_rowcnt diff_rowcnt + , ((NVL(tsp.blocks,NVL(tp.blocks,t.blocks)) - s.prev_blkcnt) * tbs.block_size) /1024/1024 diff_SizeMB + , TO_CHAR(NVL(tsp.last_analyzed,NVL(tp.last_analyzed,t.last_analyzed)),'DD-MON-YY HH24:MI:SS') analyzetime + , NVL(tsp.num_rows,NVL(tp.num_rows,t.num_rows)) rowcnt + , (NVL(tsp.blocks,NVL(tp.blocks,t.blocks)) * tbs.block_size) /1024/1024 SizeMB + , TO_CHAR(s.prev_analyzetime,'DD-MON-YY HH24:MI:SS') prev_analyzetime + , s.prev_rowcnt prev_rowcnt + , (s.prev_blkcnt * tbs.block_size) /1024/1024 prev_SizeMB + FROM last_stat ls + JOIN stats s ON ls.obj# = s.obj# AND s.prev_analyzetime = ls.analyzetime + JOIN dba_objects o ON ls.obj# = o.object_id + JOIN dba_tables t ON t.owner = o.owner AND t.table_name = o.object_name AND o.object_type = 'TABLE' + LEFT OUTER JOIN dba_tab_partitions tp ON tp.table_owner = o.owner AND tp.table_name = o.object_name + AND tp.partition_name = o.subobject_name AND o.object_type = 'TABLE PARTITION' + LEFT OUTER JOIN dba_tab_subpartitions tsp ON tsp.table_owner = o.owner AND tsp.table_name = o.object_name + AND tsp.subpartition_name = o.subobject_name AND o.object_type = 'TABLE SUBPARTITION' + JOIN dba_tablespaces tbs ON tbs.tablespace_name = NVL(tsp.tablespace_name,NVL(tp.tablespace_name,t.tablespace_name)) +WHERE 1=1 + AND o.owner LIKE upper('&&owner') ESCAPE '\' + AND o.object_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(o.subobject_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(o.object_type,'%') LIKE upper('&&object_type') ESCAPE '\' + AND ABS(ROUND((NVL(tsp.num_rows,NVL(tp.num_rows,t.num_rows)) - s.prev_rowcnt)/s.prev_rowcnt * 100, 2)) >= &&diff_rowcnt_percent + AND NVL(tsp.num_rows,NVL(tp.num_rows,t.num_rows)) < s.prev_rowcnt + &&WHERECLAUSE +UNION ALL +SELECT * FROM +( +WITH last_stat as +( select /*+ NO_MERGE MATERIALIZE */ + obj# + , max(analyzetime) analyzetime + from sys.wri$_optstat_ind_history + GROUP BY obj# +) +, stats as +( SELECT /*+ NO_MERGE MATERIALIZE */ + obj# + , analyzetime prev_analyzetime + , rowcnt prev_rowcnt + , leafcnt prev_leafcnt + FROM sys.wri$_optstat_ind_history h +) +select o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name, '') object_name + , o.object_type object_type + , ROUND((NVL(isp.num_rows,NVL(ip.num_rows,i.num_rows)) - s.prev_rowcnt)/s.prev_rowcnt * 100, 2) diff_rowcnt_percent + , NVL(isp.num_rows,NVL(ip.num_rows,i.num_rows)) - s.prev_rowcnt diff_rowcnt + , ((NVL(isp.leaf_blocks,NVL(ip.leaf_blocks,i.leaf_blocks)) - s.prev_leafcnt) * tbs.block_size) /1024/1024 diff_SizeMB + , TO_CHAR(NVL(isp.last_analyzed,NVL(ip.last_analyzed,i.last_analyzed)),'DD-MON-YY HH24:MI:SS') analyzetime + , NVL(isp.num_rows,NVL(ip.num_rows,i.num_rows)) rowcnt + , (NVL(isp.leaf_blocks,NVL(ip.leaf_blocks,i.leaf_blocks)) * tbs.block_size) /1024/1024 SizeMB + , TO_CHAR(s.prev_analyzetime,'DD-MON-YY HH24:MI:SS') prev_analyzetime + , s.prev_rowcnt prev_rowcnt + , (s.prev_leafcnt * tbs.block_size) /1024/1024 prev_SizeMB + FROM last_stat ls + JOIN stats s ON ls.obj# = s.obj# AND s.prev_analyzetime = ls.analyzetime + JOIN dba_objects o ON ls.obj# = o.object_id + JOIN dba_indexes i ON i.owner = o.owner AND i.index_name = o.object_name AND o.object_type = 'INDEX' + LEFT OUTER JOIN dba_ind_partitions ip ON ip.index_owner = o.owner AND ip.index_name = o.object_name + AND ip.partition_name = o.subobject_name AND o.object_type = 'INDEX PARTITION' + LEFT OUTER JOIN dba_ind_subpartitions isp ON isp.index_owner = o.owner AND isp.index_name = o.object_name + AND isp.subpartition_name = o.subobject_name AND o.object_type = 'INDEX SUBPARTITION' + JOIN dba_tablespaces tbs ON tbs.tablespace_name = NVL(isp.tablespace_name,NVL(ip.tablespace_name,i.tablespace_name)) +WHERE 1=1 + AND o.owner LIKE upper('&&owner') ESCAPE '\' + AND o.object_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(o.subobject_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(o.object_type,'%') LIKE upper('&&object_type') ESCAPE '\' + AND ABS(ROUND((NVL(isp.num_rows,NVL(ip.num_rows,i.num_rows)) - s.prev_rowcnt)/s.prev_rowcnt * 100, 2)) >= &&diff_rowcnt_percent + AND NVL(isp.num_rows,NVL(ip.num_rows,i.num_rows)) < s.prev_rowcnt + &&WHERECLAUSE +) +ORDER BY diff_rowcnt_percent asc + , diff_rowcnt asc +; + + + + +@@footer diff --git a/vg/stats_check_incremental.sql b/vg/stats_check_incremental.sql new file mode 100644 index 0000000..72d2aaa --- /dev/null +++ b/vg/stats_check_incremental.sql @@ -0,0 +1,67 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Check if incremental stats have been used +* Parameters : 1 - owner (% - wildchar, \ - escape char) +* 2 - Object name (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Jun-12 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name + +DEFINE owner="&&1" +DEFINE table_name="&&2" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" +FROM DUAL; +set term on + + +COLUMN owner HEADING "Owner" FORMAT a20 +COLUMN table_name HEADING "TableName" FORMAT a30 +COLUMN column_name HEADING "ColumnName" FORMAT a30 +COLUMN column_name HEADING "ColumnName" FORMAT a30 +COLUMN INCREMENTAL HEADING "Incremental|Stats" FORMAT a20 + +SELECT u.name owner + , o.name table_name + , c.name column_name + , decode(bitand(h.spare2,8),8,'YES','NO') INCREMENTAL + FROM sys.hist_head$ h + , sys.obj$ o + , sys.col$ c + , sys.user$ u +WHERE h.obj# = o.obj# + AND o.subname is null + AND h.obj# = c.obj# + AND h.intcol# = c.intcol# + AND o.owner# = u.user# + AND u.name LIKE '&&owner' ESCAPE '\' + AND o.name LIKE '&&table_name' ESCAPE '\' +; + +@@footer \ No newline at end of file diff --git a/vg/stats_col.sql b/vg/stats_col.sql new file mode 100644 index 0000000..935ca33 --- /dev/null +++ b/vg/stats_col.sql @@ -0,0 +1,176 @@ + +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - OWNER (% - wildchar, \ - escape char, default is '%') +* 2 - Table Name (% - wildchar, \ - escape char, default is '%') +* 3 - Column Name (% - wildchar, \ - escape char, default is '%') +* 4 - Partition Name (% - wildchar, \ - escape char, default is '%') +* 5 - Sub-Partition Name (% - wildchar, \ - escape char, default is '%') +* 6 - object_type (% - wildchar, \ - escape char, default is 'TABLE') +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 30-Jul-15 Vishal Gupta Increased size of SampleSize column +* 01-Oct-12 Vishal Gupta Created +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE column_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE column_name="&&3" +DEFINE partition_name="&&4" +DEFINE subpartition_name="&&5" +DEFINE object_type="&&6" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _column_name NEW_VALUE column_name NOPRINT +COLUMN _partition_name NEW_VALUE partition_name NOPRINT +COLUMN _subpartition_name NEW_VALUE subpartition_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&column_name','','%',UPPER('&&column_name')) "_column_name" + , DECODE('&&partition_name','','%',UPPER('&&partition_name')) "_partition_name" + , DECODE('&&subpartition_name','','%',UPPER('&&subpartition_name')) "_subpartition_name" + , DECODE('&&object_type','','TABLE',UPPER('&&object_type')) "_object_type" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * C O L U M N S T A T I S T I C S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Column Name = '&&column_name' +PROMPT * - Partition Name = '&&partition_name' +PROMPT * - SubPartition Name = '&&subpartition_name' +PROMPT * - Object Type = '&&object_type' +PROMPT *********************************************************************** + +COLUMN object_name HEADING "TableName" FORMAT a45 +COLUMN Object_type HEADING "Object|Type" FORMAT a8 +COLUMN column_name HEADING "ColumnName" FORMAT a25 +COLUMN global_stats HEADING "G|l|o|b|a|l" FORMAT a1 TRUNCATE +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN user_stats HEADING "U|s|e|r" FORMAT a1 TRUNCATE +COLUMN Col_Size_MB HEADING "Size (MB)" FORMAT 999,999 +COLUMN sample_size HEADING "SampleSize" FORMAT 999,999,999,999 +COLUMN avg_col_len HEADING "Avg|Col|Len" FORMAT 999 +COLUMN num_distinct HEADING "NumDistinct" FORMAT 99,999,999,999 +COLUMN num_nulls HEADING "NumNulls" FORMAT 9,999,999,999 +COLUMN density HEADING "Density" FORMAT 9.999999999999999 +COLUMN histogram HEADING "Histogram" FORMAT a15 +COLUMN num_buckets HEADING "Num|Buc|ket" FORMAT 999 + +SELECT 'TABLE' object_type + , s.owner || '.' || s.table_name object_name + , s.column_name + , TO_CHAR(s.last_analyzed,'DD-MON-YY HH24:Mi:SS') last_analyzed + , s.global_stats + , s.user_stats + , ROUND(( (t.num_rows - s.num_nulls) * (s.avg_col_len)) / power(1024,2)) Col_Size_MB + , s.sample_size + , s.avg_col_len + , s.num_distinct + , s.num_nulls + --, s.low_value + --, s.high_value + , s.density + , s.histogram + , s.num_buckets + FROM dba_tab_statistics t + JOIN dba_tab_col_statistics s ON s.owner = t.owner AND s.table_name = t.table_name AND t.partition_name IS NULL + WHERE t.owner LIKE '&&owner' ESCAPE '\' + AND t.table_name LIKE '&&table_name' ESCAPE '\' + AND s.column_name LIKE '&&column_name' ESCAPE '\' + AND 'TABLE' LIKE '&&object_type' ESCAPE '\' +/* +UNION ALL +SELECT 'PART' object_type + , s.owner || '.' || s.table_name + || NVL2(s.partition_name,':'||s.partition_name,'') object_name + , s.column_name + , TO_CHAR(s.last_analyzed,'DD-MON-YY HH24:Mi:SS') last_analyzed + , s.global_stats + , s.user_stats + , ROUND(( (t.num_rows - s.num_nulls) * (s.avg_col_len)) / power(1024,2)) Col_Size_MB + , s.sample_size + , s.avg_col_len + , s.num_distinct + , s.num_nulls + --, s.low_value + --, s.high_value + , ROUND(s.density,-9) density + , s.histogram + , s.num_buckets + FROM dba_part_col_statistics s + WHERE s.owner LIKE '&&owner' ESCAPE '\' + AND s.table_name LIKE '&&table_name' ESCAPE '\' + AND s.column_name LIKE '&&column_name' ESCAPE '\' + AND NVL(s.partition_name,'%') LIKE '&&partition_name' ESCAPE '\' + AND 'PARTITION' LIKE '&&object_type' ESCAPE '\' +UNION ALL +SELECT 'SUBPART' object_type + , s.owner || '.' || s.table_name + || NVL2(s.subpartition_name,':'||s.subpartition_name,'') + object_name + , s.column_name + , TO_CHAR(s.last_analyzed,'DD-MON-YY HH24:Mi:SS') last_analyzed + , s.global_stats + , s.user_stats + , s.sample_size + , s.avg_col_len + , s.num_distinct + , s.num_nulls + --, s.low_value + --, s.high_value + , ROUND(s.density,-9) density + , s.histogram + , s.num_buckets + FROM dba_subpart_col_statistics s + WHERE s.owner LIKE '&&owner' ESCAPE '\' + AND s.table_name LIKE '&&table_name' ESCAPE '\' + AND s.column_name LIKE '&&column_name' ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE '&&subpartition_name' ESCAPE '\' + AND 'SUBPARTITION' LIKE '&&object_type' ESCAPE '\' +*/ +ORDER BY object_name + , column_name +/ + + + + +@@footer diff --git a/vg/stats_col_history.sql b/vg/stats_col_history.sql new file mode 100644 index 0000000..fa6d025 --- /dev/null +++ b/vg/stats_col_history.sql @@ -0,0 +1,106 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - OWNER (% - wildcard, \ - escape char, default is '%') +* 2 - Table Name (% - wildcard, \ - escape char, default is '%') +* 3 - Column Name (% - wildcard, \ - escape char, default is '%') +* 4 - days (% - wildcard, \ - escape char, default is '7') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 29-Dec-16 Vishal Gupta Change order by clause +* 13-Feb-14 Vishal Gupta Created +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE column_name +UNDEFINE days + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE column_name="&&3" +DEFINE days="&&4" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _column_name NEW_VALUE column_name NOPRINT +COLUMN _days NEW_VALUE days NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&column_name','','%',UPPER('&&column_name')) "_column_name" + , DECODE('&&days','','7',UPPER('&&days')) "_days" +FROM DUAL; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * C O L U M N S T A T I S T I C S H I S T O R Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Column Name = '&&column_name' +PROMPT * - Days Ago = '&&days' +PROMPT *********************************************************************** + +COLUMN object_name HEADING "TableName" FORMAT a45 +COLUMN Object_type HEADING "Object|Type" FORMAT a8 +COLUMN column_name HEADING "ColumnName" FORMAT a25 +COLUMN global_stats HEADING "G|l|o|b|a|l" FORMAT a1 TRUNCATE +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN avgcln HEADING "Avg|Col|Len" FORMAT 99999 +COLUMN distcnt HEADING "NumDistinct" FORMAT 9,999,999,999 +COLUMN null_cnt HEADING "NumNulls" FORMAT 9,999,999,999 +COLUMN density HEADING "Density" FORMAT 9.999999999999999 +COLUMN lowval HEADING "Low Value" FORMAT a16 +COLUMN hival HEADING "High Value" FORMAT a16 + +SELECT c.owner || '.' || c.table_name|| NVL2(o.subobject_name,':' ||o.subobject_name,'') object_name + , c.column_name + , TO_CHAR(s.savtime,'DD-MON-YY HH24:Mi:SS') last_analyzed + , s.avgcln + , s.null_cnt + , s.distcnt + , s.density + --, s.lowval + --, s.hival + --, s.minimum + --, s.maximum + FROM dba_tab_columns c + JOIN dba_objects o ON c.owner = o.owner AND c.table_name = o.object_name + JOIN sys.wri$_optstat_histhead_history s ON s.obj# = o.object_id AND s.intcol# = c.column_id + WHERE c.owner LIKE '&&owner' ESCAPE '\' + AND c.table_name LIKE '&&table_name' ESCAPE '\' + AND c.column_name LIKE '&&column_name' ESCAPE '\' + AND s.savtime > sysdate - &&days +ORDER BY object_name + , c.column_name + , s.savtime desc nulls last +/ + + + + +@@footer diff --git a/vg/stats_commands.sql b/vg/stats_commands.sql new file mode 100644 index 0000000..6690227 --- /dev/null +++ b/vg/stats_commands.sql @@ -0,0 +1,240 @@ + + +-- AWR Table partitions with STALE/MISSING stats +select STALE_STATS, last_analyzed, +'exec dbms_stats.gather_table_stats(''' || owner || ''',''' || table_name || ''',partname=>''' || partition_name|| ''',GRANULARITY=>''PARTITION'',DEGREE=>16,CASCADE =>TRUE);' +from DBA_TAB_STATISTICS +where owner = 'SYS' +and table_name like 'WRH$%' +and (STALE_STATS = 'YES' OR last_analyzed is null) +and partition_name is not null +ORDER BY owner, table_name, partition_name +; + +-- AWR Table with STALE/MISSING stats +select STALE_STATS, last_analyzed, +'exec dbms_stats.gather_table_stats(''' || owner || ''',''' || table_name || ''',DEGREE=>16,CASCADE =>TRUE);' +from DBA_TAB_STATISTICS +where owner = 'SYS' +and table_name like 'WRH$%' +and (STALE_STATS = 'YES' OR last_analyzed is null) +and partition_name is null +order by num_rows asc +; + + + + +-- Gather Fixed Object Stats ( Dynamic performance tables, eg. X$ table which are referenced in GV$ views) +BEGIN +dbms_stats.gather_fixed_objects_stats( no_invalidate => dbms_stats.auto_invalidate); +END; +/ + +-- Gather dictionary stats +BEGIN +dbms_stats.gather_dictionary_stats(estimate_percent => dbms_stats.auto_sample_size + , block_sample => false + , method_opt => 'FOR ALL COLUMNS SIZE AUTO' + , degree => dbms_stats.auto_degree + , granularity => 'AUTO' + , cascade => dbms_stats.auto_cascade + , options => 'GATHER EMPTY' + , no_invalidate => dbms_stats.auto_invalidate + ); +END; +/ + + +BEGIN +dbms_stats.gather_dictionary_stats(comp_id => -- select comp_id from dba_registry order by comp_id; + , estimate_percent => dbms_stats.auto_sample_size + , block_sample => false + , method_opt => 'FOR ALL COLUMNS SIZE AUTO' + , degree => dbms_stats.auto_degree + , granularity => 'AUTO' + , cascade => dbms_stats.auto_cascade + , options => 'GATHER EMPTY' + , no_invalidate => dbms_stats.auto_invalidate + ); +END; +/ + + +BEGIN +dbms_stats.gather_database_stats(estimate_percent => dbms_stats.auto_sample_size + , block_sample => false + , method_opt => 'FOR ALL COLUMNS SIZE 1' + , degree => dbms_stats.auto_degree + , granularity => 'AUTO' + , cascade => dbms_stats.auto_cascade + , options => 'GATHER EMPTY' + , gather_sys => TRUE + , no_invalidate => dbms_stats.auto_invalidate + ); +dbms_stats.gather_database_stats(estimate_percent => dbms_stats.auto_sample_size + , block_sample => false + , method_opt => 'FOR ALL COLUMNS SIZE 1' + , degree => dbms_stats.auto_degree + , granularity => 'AUTO' + , cascade => dbms_stats.auto_cascade + , options => 'GATHER STALE' + , gather_sys => TRUE + , no_invalidate => dbms_stats.auto_invalidate + ); +END; +/ + + +BEGIN +dbms_stats.gather_schema_stats(ownname => 'MUREX_MX_OWNER' + , block_sample => false + , estimate_percent => dbms_stats.auto_sample_size + , method_opt => 'FOR ALL COLUMNS SIZE 1' + , degree => dbms_stats.auto_degree + , granularity => 'AUTO' + , cascade => dbms_stats.auto_cascade + , options => 'GATHER EMPTY' + , no_invalidate => dbms_stats.auto_invalidate + , force => false + ); +dbms_stats.gather_schema_stats(ownname => 'MUREX_MX_OWNER' + , block_sample => false + , estimate_percent => dbms_stats.auto_sample_size + , method_opt => 'FOR ALL COLUMNS SIZE 1' + , degree => dbms_stats.auto_degree + , granularity => 'AUTO' + , cascade => dbms_stats.auto_cascade + , options => 'GATHER STALE' + , no_invalidate => dbms_stats.auto_invalidate + , force => false + ); +END; +/ + + +--**************************** +-- Gather Stale Table stats +--**************************** +set serveroutput on size unlimited +BEGIN +FOR i in ( +select owner, table_name + , 'BEGIN dbms_stats.gather_table_stats(force=>false' + || ',ownname=>''' || owner || '''' + || ',tabname=>''' || table_name || '''' + || NVL2(partition_name,',partname=>''' || partition_name || '''' ,'') + || ',degree=>8' + || ',granularity =>''PARTITION''' + || ',no_invalidate => dbms_stats.auto_invalidate' + || '); END;' sqltext +from dba_tab_statistics s +where 1=1 +and owner LIKE 'TRAF_%' +and STALE_STATS = 'YES' +and STATTYPE_LOCKED IS NULL +) +LOOP + dbms_output.put_line(i.sqltext); + execute immediate i.sqltext; +END LOOP; +END; +/ + +--**************************** +-- Gather Stale Index stats +--**************************** +set serveroutput on size unlimited +BEGIN +FOR i in ( +select owner, index_name, table_owner, table_name, partition_name + , 'BEGIN dbms_stats.gather_index_stats(force=>false' + || ',ownname=>''' || owner || '''' + || ',indname=>''' || index_name || '''' + || NVL2(partition_name,',partname=>''' || partition_name || '''' ,'') + || ',degree=>8' + || ',granularity =>''PARTITION''' + || ',no_invalidate => dbms_stats.auto_invalidate' + || '); END;' sqltext +from dba_ind_statistics i +where 1=1 +and owner LIKE 'TRAF_%' +and STALE_STATS = 'YES' +and STATTYPE_LOCKED IS NULL +) +LOOP + dbms_output.put_line(i.sqltext); + execute immediate i.sqltext; +END LOOP; +END; +/ + + +exec DBMS_STATS.GATHER_DATABASE_STATS( METHOD_OPT => 'FOR ALL COLUMNS SIZE 1' , ESTIMATE_PERCENT => 5, DEGREE => 16, OPTIONS => 'GATHER EMPTY' , CASCADE => TRUE ); +exec DBMS_STATS.GATHER_SCHEMA_STATS( ownname => 'schemaname', METHOD_OPT => 'FOR ALL COLUMNS SIZE 1' , ESTIMATE_PERCENT => 5, DEGREE => 16 , OPTIONS => 'GATHER EMPTY' , CASCADE => TRUE ); +exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'HISTORY_OWN', tabname => 'PROVIDER_PRICE' , partname => 'PROVIDER_PRICE_2012_01', METHOD_OPT => 'FOR ALL COLUMNS SIZE 1' , ESTIMATE_PERCENT => 5 , DEGREE => 8 , CASCADE => TRUE ); +exec DBMS_STATS.GATHER_INDEX_STATS(ownname => 'PM_OWN', indname => 'PMA_A_IDX1' , partname => 'PMA_A_0117_2013', ESTIMATE_PERCENT => 5 , DEGREE => 8 ); + + + +--**************************** +-- List objects without stats +--**************************** +set serveroutput on +DECLARE +objlist DBMS_STATS.OBJECTTAB ; +BEGIN +DBMS_STATS.GATHER_DATABASE_STATS( METHOD_OPT => 'FOR ALL COLUMNS SIZE 1' , ESTIMATE_PERCENT => 5, DEGREE => 16, OPTIONS => 'LIST EMPTY' , objlist => objlist, CASCADE => TRUE ); + for i in 1 .. objlist.COUNT + LOOP + dbms_output.put_line (objlist(i).objname); + END LOOP; +END; +/ + + +--**************************** +-- Incremental Stats +--**************************** +-- Enable +exec dbms_stats.set_database_prefs( pname => 'INCREMENTAL' , pvalue = 'TRUE', add_sys => 'TRUE'); +exec dbms_stats.set_schema_prefs( ownname => 'schemaname', pname => 'INCREMENTAL' , pvalue => 'TRUE'); +exec dbms_stats.set_table_prefs( ownname => 'schemaname', tabname => 'tablename', pname => 'INCREMENTAL' , pvalue => 'TRUE'); + +-- Disable +exec dbms_stats.set_database_prefs( pname => 'INCREMENTAL' , pvalue = 'FALSE', add_sys => 'TRUE'); +exec dbms_stats.set_schema_prefs( ownname => 'schemaname', pname => 'INCREMENTAL' , pvalue => 'FALSE'); +exec dbms_stats.set_table_prefs( ownname => 'schemaname', tabname => 'tablename', pname => 'INCREMENTAL' , pvalue => 'FALSE'); + +-- Disable Table Level +BEGIN + FOR i in (select * from dba_tab_stat_prefs where preference_name = 'INCREMENTAL' and preference_value = 'TRUE') + LOOP + dbms_stats.set_table_prefs( ownname => i.owner, tabname => i.table_name, pname => 'INCREMENTAL' , pvalue => 'FALSE'); + END LOOP; +END; +/ + + +--**************************** +-- Lock Stats +--**************************** + +-- Lock table stats to skip daily gather stats +BEGIN +dbms_stats.lock_table_stats('PM_OWN', 'SEC_RISK_MEASURES_HIST'); +END ; +/ + +-- Unlock table stats to include daily gather stats +BEGIN +dbms_stats.unlock_table_stats('PM_OWN', 'SEC_RISK_MEASURES_HIST'); +END ; +/ + +-- How to find out tables with locked stats +SELECT DISTINCT OWNER, TABLE_NAME, STATTYPE_LOCKED --, S.LAST_ANALYZED +FROM DBA_TAB_STATISTICS S +WHERE STATTYPE_LOCKED IS NOT NULL + AND OWNER NOT IN ('SYS','SYSTEM','SYSMAN','WMSYS','SQLTXPLAIN') +ORDER BY OWNER, TABLE_NAME ; diff --git a/vg/stats_gather_history.sql b/vg/stats_gather_history.sql new file mode 100644 index 0000000..14ea6e0 --- /dev/null +++ b/vg/stats_gather_history.sql @@ -0,0 +1,92 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Display Statistics gathering operations history +* Parameters : 1 - Number of Days (Default 7) +* 2 - Operations (e.g gather_database_stats, gather_table_stats) (Use % as wild card, \ as escape) +* 3 - Target (Use % as wild card, \ as escape) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Jun-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE days +UNDEFINE operation +UNDEFINE target +UNDEFINE where_clause + + +DEFINE days="&&1" +DEFINE operation="&&2" +DEFINE target="&&3" +DEFINE where_clause="&&4" + + +COLUMN _days NEW_VALUE days NOPRINT +COLUMN _operation NEW_VALUE operation NOPRINT +COLUMN _target NEW_VALUE target NOPRINT + +set term off +SELECT DECODE('&&days','','7','&&days') "_days" + , DECODE('&&operation','','gather_database_stats%','&&operation') "_operation" + , DECODE('&&target','','%',UPPER('&&target')) "_target" +FROM DUAL +; + +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * S T A T I S T I C S G A T H E R H I S T O R Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - Number of Days = '&&days' +PROMPT * - Gather Operation = '&&operation' +PROMPT * Possible Values - alter_stats_history_retention +PROMPT * gather_database_stats(auto) +PROMPT * [gather|delete|import|export|restore]_database_stats +PROMPT * [gather|delete|import|export|restore|lock|unlock]_schema_stats +PROMPT * [gather|delete|import|export|restore|lock|unlock|copy|set]_table_stats +PROMPT * [gather|delete|import|export|restore]_dictionary_stats +PROMPT * [gather|delete|import|export|restore]_fixed_objects_stats +PROMPT * [gather|delete|import|export|purge|get|set]_system_stats +PROMPT * - Target = '&&target' +PROMPT * - Where Clause = "&&where_clause" +PROMPT *********************************************************************** + + +COLUMN operation HEADING "Operation" FORMAT a29 +COLUMN duration HEADING "Duration" FORMAT a28 +COLUMN start_time HEADING "StartTime" FORMAT a22 +COLUMN end_time HEADING "EndTime" FORMAT a22 +COLUMN target HEADING "Target" FORMAT a60 + +SELECT o.operation + , TO_CHAR(o.start_time,'Dy DD-MON-YY HH24:MI:SS') start_time + , TO_CHAR(o.end_time,'Dy DD-MON-YY HH24:MI:SS') end_time + , REPLACE(o.end_time - o.start_time,'+0000000','+') duration + , o.target + FROM sys.wri$_optstat_opr o +--WHERE o.start_time > CAST( systimestamp - &&days as TIMESTAMP) +WHERE o.start_time > cast(current_timestamp - &&days as timestamp WITH TIME ZONE ) + AND o.operation LIKE '&&operation' ESCAPE '\' + AND UPPER(NVL(o.target,'x')) LIKE '&&target' ESCAPE '\' + AND UPPER(NVL(o.target,'x')) NOT LIKE 'SYS.UTL_RECOMP%' + &&where_clause +ORDER BY o.start_time asc +; + +@@footer \ No newline at end of file diff --git a/vg/stats_history.sql b/vg/stats_history.sql new file mode 100644 index 0000000..198edbd --- /dev/null +++ b/vg/stats_history.sql @@ -0,0 +1,277 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display table statistics history +* Parameters : 1 - OWNER (% - wildchar, \ - escape char) +* 2 - Object Name (% - wildchar, \ - escape char) +* 3 - Partition Name (% - wildchar, \ - escape char) +* 5 - Object Type (% - wildchar, \ - escape char) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 08-Jul-15 Vishal Gupta Removed savetime column from output +* 19-JUN-14 Vishal Gupta Updated AvgRowLength heading +* 28-FEB-14 Vishal Gupta Changed the ordering +* 02-Jul-12 Vishal Gupta Added partition, sub-partition and objecttype as input +* 30-Apr-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE object_name +UNDEFINE subobject_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE object_name="&&2" +DEFINE subobject_name="&&3" +DEFINE object_type="&&4" + + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&object_name'),'','%',UPPER('&&object_name')) + END "_object_name" + , DECODE('&&subobject_name','','%','&&subobject_name') "_subobject_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" +FROM DUAL +; +set term on + + +PROMPT +PROMPT *********************************************************************** +PROMPT * S T A T I S T I C S H I S T O R Y +PROMPT * +PROMPT * Input Parameters +PROMPT * - Object Owner = '&&owner' +PROMPT * - Object Name = '&&object_name' +PROMPT * - SubObject Name = '&&subobject_name' +PROMPT * - Object Type = '&&object_type' +PROMPT *********************************************************************** + +COLUMN object_name HEADING "ObjectName" FORMAT a60 +COLUMN subobject_name HEADING "SubObjectName" FORMAT a30 +COLUMN object_type HEADING "Object|Type" FORMAT a18 +COLUMN object_type_sort_order NOPRINT +COLUMN savtime HEADING "SaveTime" FORMAT a18 +COLUMN ANALYZETIME HEADING "AnalyzeTime" FORMAT a18 +COLUMN samplesize HEADING "SampleSize" FORMAT 999,999,999,999 +COLUMN rowcnt HEADING "RowCount" FORMAT 999,999,999,999 +COLUMN blkcnt HEADING "BlockCount" FORMAT 999,999,999 +COLUMN avgrln HEADING "Avg|Row|Length" FORMAT 999,999 +COLUMN SizeMB HEADING "Size (MB)" FORMAT 9,999,999 + +select object_name + , object_type + , object_type_sort_order + --, to_char(savtime,'DD-MON-YY HH24:MI:SS') savtime + , to_char(ANALYZETIME,'DD-MON-YY HH24:MI:SS') ANALYZETIME + , SizeMB + , rowcnt + , avgrln + --, blkcnt + , samplesize +FROM +( +select o.owner || '.' || o.object_name + || NVL2(o.subobject_name,':' || o.subobject_name, '') + object_name + , o.object_type + , DECODE (o.object_type + , 'TABLE' ,1 + , 'TABLE PARTITION' ,2 + , 'TABLE SUBPARTITION' ,3 + , 'INDEX' ,4 + , 'INDEX PARTITION' ,5 + , 'INDEX SUBPARTITION' ,6 + ,9 + ) object_type_sort_order + , h.savtime + , h.ANALYZETIME + , h.samplesize + , h.rowcnt + , h.avgrln + , (h.blkcnt * p.value) /1024/1024 SizeMB + , h.blkcnt + FROM sys.wri$_optstat_tab_history h + , dba_objects o + , v$system_parameter p +WHERE h.obj# = o.object_id + AND p.name = 'db_block_size' + AND o.owner LIKE upper('&&owner') ESCAPE '\' + AND o.object_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(o.subobject_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(DECODE(o.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,o.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +UNION +select s.owner || '.' || s.table_name + || NVL2(s.partition_name,':' || s.partition_name, '') + object_name + , DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type) object_type + , DECODE (s.object_type + , 'TABLE' ,1 + , 'TABLE PARTITION' ,2 + , 'TABLE SUBPARTITION' ,3 + , 'INDEX' ,4 + , 'INDEX PARTITION' ,5 + , 'INDEX SUBPARTITION' ,6 + ,9 + ) object_type_sort_order + , NULL savtime + , last_analyzed ANALYZETIME + , sample_size + , num_rows + , avg_row_len + , (s.blocks * p.value) /1024/1024 SizeMB + , s.blocks + FROM dba_tab_statistics s + , v$system_parameter p +WHERE p.name = 'db_block_size' + AND s.owner LIKE upper('&&owner') ESCAPE '\' + AND s.table_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(s.partition_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +) a +ORDER BY a.object_name + , a.object_type_sort_order + , a.savtime NULLS LAST + --, a.ANALYZETIME +/ + + + +COLUMN table_name HEADING "IndexName" FORMAT a40 +COLUMN object_name HEADING "IndexName" FORMAT a50 +COLUMN distinct_keys HEADING "DistinctKeys" FORMAT 99,999,999,999 +COLUMN blevel HEADING "BLevel" FORMAT 99999 +COLUMN leaf_blocks HEADING "Leaf|Blocks" FORMAT 99,999,999 +COLUMN clustering_factor HEADING "Clustering|Factor" FORMAT 99,999,999,999 +COLUMN avg_leaf_blocks_per_key HEADING "Avg|LeafBlocks|PerKey" FORMAT 999,999,999 +COLUMN avg_data_blocks_per_key HEADING "Avg|DataBlocks|PerKey" FORMAT 999,999,999 + +select object_name + , object_type + , object_type_sort_order + --, to_char(savtime,'DD-MON-YY HH24:MI:SS') savtime + , to_char(ANALYZETIME,'DD-MON-YY HH24:MI:SS') ANALYZETIME + , SizeMB + , rowcnt + , samplesize + , distinct_keys + , blevel + , clustering_factor + , leaf_blocks + , avg_leaf_blocks_per_key + , avg_data_blocks_per_key +FROM +( +select o.owner || '.' || o.object_name + || NVL2(o.subobject_name,':' || o.subobject_name, '') + object_name + , o.object_type + , DECODE (o.object_type + , 'TABLE' ,1 + , 'TABLE PARTITION' ,2 + , 'TABLE SUBPARTITION' ,3 + , 'INDEX' ,4 + , 'INDEX PARTITION' ,5 + , 'INDEX SUBPARTITION' ,6 + ,9 + ) object_type_sort_order + , h.savtime + , h.ANALYZETIME + , (h.leafcnt * p.value) /1024/1024 SizeMB + , h.rowcnt + , h.samplesize + , h.distkey distinct_keys + , h.blevel + , h.clufac clustering_factor + , h.leafcnt leaf_blocks + , h.lblkkey avg_leaf_blocks_per_key + , h.dblkkey avg_data_blocks_per_key + --, h.avgrln + FROM sys.wri$_optstat_ind_history h + , dba_objects o + , v$system_parameter p +WHERE h.obj# = o.object_id + AND p.name = 'db_block_size' + AND o.owner LIKE upper('&&owner') ESCAPE '\' + AND o.object_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(o.subobject_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(o.object_type,'%') LIKE upper('&&object_type') ESCAPE '\' +UNION ALL +select s.owner || '.' || s.index_name + || NVL2(s.partition_name,':' || s.partition_name, '') + object_name + , DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type) object_type + , DECODE (s.object_type + , 'TABLE' ,1 + , 'TABLE PARTITION' ,2 + , 'TABLE SUBPARTITION' ,3 + , 'INDEX' ,4 + , 'INDEX PARTITION' ,5 + , 'INDEX SUBPARTITION' ,6 + ,9 + ) object_type_sort_order + , null savtime + , s.last_analyzed ANALYZETIME + , ROUND((s.leaf_blocks * p.value) /1024/1024 ) SizeMB + , s.num_rows + , s.sample_size + , s.distinct_keys + , s.blevel + , s.clustering_factor + , s.leaf_blocks + , s.avg_leaf_blocks_per_key + , s.avg_data_blocks_per_key + FROM dba_ind_statistics s + , v$system_parameter p +WHERE p.name = 'db_block_size' + AND s.owner LIKE upper('&&owner') ESCAPE '\' + AND s.index_name LIKE upper('&&object_name') ESCAPE '\' + AND NVL(s.partition_name,'%') LIKE upper('&&subobject_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','INDEX PARTITION' + ,'SUBPARTITION','INDEX SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +) a +ORDER BY a.object_name + , a.object_type_sort_order + , a.savtime NULLS LAST + --, a.ANALYZETIME +/ + + +@@footer diff --git a/vg/stats_locked.sql b/vg/stats_locked.sql new file mode 100644 index 0000000..6263697 --- /dev/null +++ b/vg/stats_locked.sql @@ -0,0 +1,180 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display LOCKED Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - OWNER +* 2 - Table Name +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Mar-12 Vishal Gupta Intial version +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE partition_name="&&3" +DEFINE subpartition_name="&&4" +DEFINE object_type="&&5" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _partition_name NEW_VALUE partition_name NOPRINT +COLUMN _subpartition_name NEW_VALUE subpartition_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&partition_name','','%','&&partition_name') "_partition_name" + , DECODE('&&subpartition_name','','%','&&subpartition_name') "_subpartition_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" +FROM DUAL; +set term on + +PROMPT *********************************************************************** +PROMPT * S T A L E S T A T I S T I C S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Partition Name = '&&partition_name' +PROMPT * - SubPartition Name = '&&subpartition_name' +PROMPT * - Object Type = '&&object_type' +PROMPT *********************************************************************** + + +PROMPT +PROMPT *********************************** +PROMPT * Locked Table Statistics +PROMPT *********************************** +PROMPT + +COLUMN owner HEADING "Owner" FORMAT a20 +COLUMN table_name HEADING "TableName" FORMAT a60 +COLUMN index_name HEADING "IndexName" FORMAT a60 +COLUMN partition_name HEADING "Partition" FORMAT a25 +COLUMN partition_position HEADING "Part|Pos" FORMAT 999 +COLUMN subpartition_name HEADING "Sub-Parition" FORMAT a25 +COLUMN subpartition_position HEADING "Sub|Part|Pos" FORMAT 999 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN stattype_locked HEADING "Lock" FORMAT a5 +COLUMN global_stats HEADING "Global|Stat" FORMAT a5 +COLUMN user_stats HEADING "User|Stat" FORMAT a4 +COLUMN stale_stats HEADING "Stale|Stat" FORMAT a5 +COLUMN sample_size HEADING "SampleSize" FORMAT 999,999,999 +COLUMN num_rows HEADING "RowCount" FORMAT 99,999,999,999 +COLUMN blocks HEADING "Blocks" FORMAT 999,999,999 +COLUMN empty_blocks HEADING "EmptyBlocks" FORMAT 99,999,999 +COLUMN avg_space HEADING "AvgSpace" FORMAT 99,999,999 +COLUMN chain_cnt HEADING "ChainCount" FORMAT 99,999,999 +COLUMN avg_row_len HEADING "AvgRowLength" FORMAT 9999 + + +select /*+ RULE */ + s.owner || '.' || s.table_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + table_name + , stattype_locked + , global_stats + , user_stats + , stale_stats + , to_char(last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , sample_size + , num_rows + , blocks + , empty_blocks + , avg_space + , chain_cnt + , avg_row_len + FROM dba_tab_statistics s +WHERE s.stattype_locked IS NOT NULL + AND s.owner NOT IN ('SYS','XDB') + AND s.table_name NOT LIKE 'BIN$%' + AND s.owner LIKE upper('&&owner') + AND s.table_name LIKE upper('&&table_name') + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +ORDER BY s.owner + , s.table_name +-- , s.partition_position +-- , s.subpartition_position +/ + + +PROMPT +PROMPT *********************************** +PROMPT * Locked Index Statistics +PROMPT *********************************** + +select /*+ RULE */ + s.owner || '.' || s.index_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + index_name + , stattype_locked + , global_stats + , user_stats + , stale_stats + , to_char(last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , sample_size + , blevel + , num_rows + , leaf_blocks + , clustering_factor + FROM dba_ind_statistics s +WHERE s.stattype_locked IS NOT NULL + AND s.owner NOT IN ('SYS','XDB') + AND s.table_name NOT LIKE 'BIN$%' + AND s.owner LIKE upper('&&owner') + AND s.table_name LIKE upper('&&table_name') + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','INDEX PARTITION' + ,'SUBPARTITION','INDEX SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +ORDER BY owner + , table_name + , index_name +-- , partition_position +-- , subpartition_position +/ + + +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + + +@@footer diff --git a/vg/stats_missing.sql b/vg/stats_missing.sql new file mode 100644 index 0000000..6d3d924 --- /dev/null +++ b/vg/stats_missing.sql @@ -0,0 +1,205 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - OWNER +* 2 - Table Name +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Mar-12 Vishal Gupta Intial version +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE partition_name="&&3" +DEFINE subpartition_name="&&4" +DEFINE object_type="&&5" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _partition_name NEW_VALUE partition_name NOPRINT +COLUMN _subpartition_name NEW_VALUE subpartition_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&partition_name','','%','&&partition_name') "_partition_name" + , DECODE('&&subpartition_name','','%','&&subpartition_name') "_subpartition_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" +FROM DUAL; +set term on + + + + +PROMPT +PROMPT *********************************************************************** +PROMPT * M I S S I N G O B J E C T S T A T I S T I C S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Partition Name = '&&partition_name' +PROMPT * - SubPartition Name = '&&subpartition_name' +PROMPT * - Object Type = '&&object_type' +PROMPT *********************************************************************** + + +PROMPT +PROMPT *********************************** +PROMPT * Missing Table Statistics +PROMPT *********************************** +PROMPT + +COLUMN owner HEADING "Owner" FORMAT a20 +COLUMN table_name HEADING "TableName" FORMAT a30 +COLUMN index_name HEADING "IndexName" FORMAT a30 +COLUMN partition_name HEADING "Partition" FORMAT a25 +COLUMN partition_position HEADING "Part|Pos" FORMAT 999 +COLUMN subpartition_name HEADING "Sub-Parition" FORMAT a25 +COLUMN subpartition_position HEADING "Sub|Part|Pos" FORMAT 999 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN stattype_locked HEADING "Lock" FORMAT a5 +COLUMN global_stats HEADING "Global|Stat" FORMAT a5 +COLUMN user_stats HEADING "User|Stat" FORMAT a4 +COLUMN stale_stats HEADING "Stale|Stat" FORMAT a5 + + +select /*+ RULE */ + s.owner + , s.table_name + -- , s.object_type + , s.partition_name + -- , s.partition_position + , s.subpartition_name + -- , s.subpartition_position + , s.stattype_locked + , s.global_stats + , s.user_stats + , s.stale_stats + , to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , s.sample_size + , s.num_rows + , s.blocks + , s.empty_blocks + , s.avg_space + , s.chain_cnt + , s.avg_row_len + FROM dba_tab_statistics s + JOIN dba_tables t ON t.owner = s.owner + AND t.table_name = s.table_name + AND t.temporary = 'N' +WHERE s.owner LIKE upper('&&owner') + AND s.table_name LIKE upper('&&table_name') + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' + AND s.table_name not like 'BIN$%' + AND (s.last_analyzed IS NULL + OR s.num_rows = 0 + ) + AND s.owner NOT IN ('SYS','XDB') +ORDER BY s.owner + , s.table_name + , s.partition_position + , s.subpartition_position +/ + + +PROMPT +PROMPT *********************************** +PROMPT * Missing Index Statistics +PROMPT *********************************** + + +COLUMN table_name HEADING "TableName" FORMAT a30 +COLUMN index_name HEADING "IndexName" FORMAT a65 +COLUMN distinct_keys HEADING "DistinctKeys" FORMAT 99,999,999,999 +COLUMN blevel HEADING "BLevel" FORMAT 99999 +COLUMN leaf_blocks HEADING "Leaf|Blocks" FORMAT 99,999,999 +COLUMN clustering_factor HEADING "Clustering|Factor" FORMAT 99,999,999,999 +COLUMN avg_leaf_blocks_per_key HEADING "Avg|LeafBlocks|PerKey" FORMAT 999,999,999 +COLUMN avg_data_blocks_per_key HEADING "Avg|DataBlocks|PerKey" FORMAT 999,999,999 + + +select /*+ RULE */ + s.owner + , s.table_name +-- , s.object_type + , s.index_name + , s.partition_name +-- , s.partition_position + , s.subpartition_name +-- , s.subpartition_position + , s.stattype_locked + , s.global_stats + , s.user_stats + , s.stale_stats + , to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , s.sample_size + , s.blevel + , s.num_rows + , s.leaf_blocks + , s.clustering_factor + FROM dba_ind_statistics s + JOIN dba_indexes i ON i.owner = s.owner + AND i.index_name = s.index_name + AND i.temporary = 'N' +WHERE s.owner LIKE upper('&&owner') ESCAPE '\' + AND s.table_name LIKE upper('&&table_name') ESCAPE '\' + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','INDEX PARTITION' + ,'SUBPARTITION','INDEX SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' + AND s.table_name not like 'BIN$%' + AND (s.last_analyzed IS NULL + --OR s.num_rows = 0 + ) + AND s.owner NOT IN ('SYS','XDB') +ORDER BY s.owner + , s.table_name + , s.index_name + , s.partition_position + , s.subpartition_position +/ + + +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + +@@footer diff --git a/vg/stats_pref.sql b/vg/stats_pref.sql new file mode 100644 index 0000000..69ea9d3 --- /dev/null +++ b/vg/stats_pref.sql @@ -0,0 +1,67 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Display statistics gathering preferences +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 11-May-12 Vishal Gupta First Draft +* +*/ + + +COLUMN sname HEADING "Preference Name" FORMAT a30 +COLUMN value HEADING "Value" FORMAT a30 +COLUMN modified HEADING "Modified" FORMAT a8 +COLUMN timestamp HEADING "TimeStamp" FORMAT a36 +COLUMN sval1 HEADING "sval1" +COLUMN spare2 HEADING "spare2" FORMAT a20 +COLUMN spare3 HEADING "spare3" FORMAT a20 +COLUMN spare5 HEADING "spare5" FORMAT a10 +COLUMN spare6 HEADING "spare6" FORMAT a10 + +SELECT sname + , spare4 value + , DECODE(spare1,1,'NO','YES') modified + , sval2 timestamp + , sval1 + , spare2 + , spare3 + , spare5 + , spare6 +FROM sys.OPTSTAT_HIST_CONTROL$ +ORDER BY sname +; + +/* +SELECT 'AUTOSTATS_TARGET : ' || dbms_stats.get_prefs('AUTOSTATS_TARGET') || chr(10) + || 'CASCADE : ' || dbms_stats.get_prefs('CASCADE') || chr(10) + || 'DEGREE : ' || dbms_stats.get_prefs('DEGREE') || chr(10) + || 'ESTIMATE_PERCENT : ' || dbms_stats.get_prefs('ESTIMATE_PERCENT') || chr(10) + || 'METHOD_OPT : ' || dbms_stats.get_prefs('METHOD_OPT') || chr(10) + || 'NO_INVALIDATE : ' || dbms_stats.get_prefs('NO_INVALIDATE') || chr(10) + || 'GRANULARITY : ' || dbms_stats.get_prefs('GRANULARITY') || chr(10) + || 'PUBLISH : ' || dbms_stats.get_prefs('PUBLISH') || chr(10) + || 'INCREMENTAL : ' || dbms_stats.get_prefs('INCREMENTAL') || chr(10) + || 'INCREMENTAL_INTERNAL_CONTROL : ' || dbms_stats.get_prefs('INCREMENTAL_INTERNAL_CONTROL') || chr(10) + || 'STALE_PERCENT : ' || dbms_stats.get_prefs('STALE_PERCENT') || chr(10) + || 'APPROXIMATE_NDV : ' || dbms_stats.get_prefs('APPROXIMATE_NDV') || chr(10) + || 'APPROXIMATE_NDV : ' || dbms_stats.get_prefs('APPROXIMATE_NDV') || chr(10) + || 'APPROXIMATE_NDV : ' || dbms_stats.get_prefs('APPROXIMATE_NDV') || chr(10) + || 'APPROXIMATE_NDV : ' || dbms_stats.get_prefs('APPROXIMATE_NDV') || chr(10) + || 'APPROXIMATE_NDV : ' || dbms_stats.get_prefs('APPROXIMATE_NDV') || chr(10) +-- || 'AUTO_CASCADE : ' || dbms_stats.auto_cascade || chr(10) +-- || 'AUTO_DEGREE : ' || dbms_stats.auto_degree || chr(10) +-- || 'AUTO_INVALIDATE : ' || dbms_stats.auto_invalidate || chr(10) +-- || 'AUTO_SAMPLE_SIZE : ' || dbms_stats.auto_sample_size || chr(10) + preferences + FROM dual +; +*/ + +@@footer \ No newline at end of file diff --git a/vg/stats_stale.sql b/vg/stats_stale.sql new file mode 100644 index 0000000..2ee372d --- /dev/null +++ b/vg/stats_stale.sql @@ -0,0 +1,195 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display STALE Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - OWNER +* 2 - Table Name +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Mar-12 Vishal Gupta Intial version +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE partition_name="&&3" +DEFINE subpartition_name="&&4" +DEFINE object_type="&&5" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _partition_name NEW_VALUE partition_name NOPRINT +COLUMN _subpartition_name NEW_VALUE subpartition_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&partition_name','','%','&&partition_name') "_partition_name" + , DECODE('&&subpartition_name','','%','&&subpartition_name') "_subpartition_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" +FROM DUAL; +set term on + +PROMPT *********************************************************************** +PROMPT * S T A L E S T A T I S T I C S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Partition Name = '&&partition_name' +PROMPT * - SubPartition Name = '&&subpartition_name' +PROMPT * - Object Type = '&&object_type' +PROMPT *********************************************************************** + + +PROMPT +PROMPT *********************************** +PROMPT * Stale Table Statistics +PROMPT *********************************** +PROMPT + +COLUMN owner HEADING "Owner" FORMAT a20 +COLUMN table_name HEADING "TableName" FORMAT a60 +COLUMN index_name HEADING "IndexName" FORMAT a60 +COLUMN partition_name HEADING "Partition" FORMAT a25 +COLUMN partition_position HEADING "Part|Pos" FORMAT 999 +COLUMN subpartition_name HEADING "Sub-Parition" FORMAT a25 +COLUMN subpartition_position HEADING "Sub|Part|Pos" FORMAT 999 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN stattype_locked HEADING "Lock" FORMAT a5 +COLUMN global_stats HEADING "Global|Stat" FORMAT a5 +COLUMN user_stats HEADING "User|Stat" FORMAT a4 +COLUMN stale_stats HEADING "Stale|Stat" FORMAT a5 +COLUMN sample_size HEADING "Sample|Size" FORMAT 999,999,999 +COLUMN num_rows HEADING "RowCount" FORMAT 99,999,999,999 +COLUMN blocks HEADING "Blocks" FORMAT 999,999,999 +COLUMN empty_blocks HEADING "Empty|Blocks" FORMAT 99,999,999 +COLUMN avg_space HEADING "Avg|Space" FORMAT 99,999,999 +COLUMN chain_cnt HEADING "Chain|Count" FORMAT 99,999,999 +COLUMN avg_row_len HEADING "Avg|Row|Length" FORMAT 9999 + + +select /*+ RULE */ + s.owner || '.' || s.table_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + table_name + , s.stattype_locked + , s.global_stats + , s.user_stats + , s.stale_stats + , to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , s.sample_size + , s.num_rows + , s.blocks + , s.empty_blocks + , s.avg_space + , s.chain_cnt + , s.avg_row_len + FROM dba_tab_statistics s + JOIN dba_tables t ON t.owner = s.owner + AND t.table_name = s.table_name + AND t.temporary = 'N' +WHERE s.stale_stats = 'YES' + AND s.owner NOT IN ('SYS','XDB') + AND s.table_name NOT LIKE 'BIN$%' + AND s.owner LIKE upper('&&owner') + AND s.table_name LIKE upper('&&table_name') + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +ORDER BY s.owner + , s.table_name +-- , s.partition_position +-- , s.subpartition_position +/ + + +PROMPT +PROMPT *********************************** +PROMPT * Stale Index Statistics +PROMPT *********************************** + + +COLUMN table_name HEADING "TableName" FORMAT a30 +COLUMN index_name HEADING "IndexName" FORMAT a65 +COLUMN distinct_keys HEADING "DistinctKeys" FORMAT 99,999,999,999 +COLUMN blevel HEADING "BLevel" FORMAT 99999 +COLUMN leaf_blocks HEADING "Leaf|Blocks" FORMAT 99,999,999 +COLUMN clustering_factor HEADING "Clustering|Factor" FORMAT 99,999,999,999 +COLUMN avg_leaf_blocks_per_key HEADING "Avg|LeafBlocks|PerKey" FORMAT 999,999,999 +COLUMN avg_data_blocks_per_key HEADING "Avg|DataBlocks|PerKey" FORMAT 999,999,999 + +select /*+ RULE */ + s.owner || '.' || s.index_name + || NVL2(s.partition_name,':' || s.partition_name, '') + || NVL2(s.subpartition_name,':' || s.subpartition_name, '') + index_name + , s.stattype_locked + , s.global_stats + , s.user_stats + , s.stale_stats + , to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , s.sample_size + , s.blevel + , s.num_rows + , s.leaf_blocks + , s.clustering_factor + FROM dba_ind_statistics s + JOIN dba_indexes i ON i.owner = s.owner + AND i.index_name = s.index_name + AND i.temporary = 'N' +WHERE s.stale_stats = 'YES' + AND s.owner NOT IN ('SYS','XDB') + AND s.table_name NOT LIKE 'BIN$%' + AND s.owner LIKE upper('&&owner') + AND s.table_name LIKE upper('&&table_name') + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','INDEX PARTITION' + ,'SUBPARTITION','INDEX SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' +ORDER BY s.owner + , s.table_name + , s.index_name +-- , partition_position +-- , subpartition_position +/ + + +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + + +@@footer diff --git a/vg/stats_tab_pref.sql b/vg/stats_tab_pref.sql new file mode 100644 index 0000000..9658030 --- /dev/null +++ b/vg/stats_tab_pref.sql @@ -0,0 +1,103 @@ +@@header + + +/* +* +* Author : Vishal Gupta +* Purpose : Display statistics gathering preferences +* Parameters : 1 - owner (% - wildchar, \ - escape char) +* 2 - Object name (% - wildchar, \ - escape char) +* 3 - Preference name (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ---------------------------------------------------- +* 22-May-13 Vishal Gupta Added input parameters and defaulting them to '%' +* 11-May-12 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE preference_name + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE preference_name="&&3" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _preference_name NEW_VALUE preference_name NOPRINT + +set term off + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _object_name NEW_VALUE object_name NOPRINT +COLUMN _preference_name NEW_VALUE preference_name NOPRINT + + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&table_name'),'','%','&&table_name') "_table_name" + , DECODE(UPPER('&&preference_name'),'','%','&&preference_name') "_preference_name" +FROM DUAL; + +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" +FROM DUAL; +set term on + + + +PROMPT +PROMPT *********************************************************************** +PROMPT * S T A T I S T I C S G A T H E R I N G P R E F E R E N C E S +PROMPT * (Table Level) +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Pref Name = '&&preference_name' +PROMPT *********************************************************************** + +COLUMN owner HEADING "Owner" FORMAT a20 +COLUMN table_name HEADING "TableName" FORMAT a30 +COLUMN preference_name HEADING "Preference|Name" FORMAT a20 +COLUMN preference_value HEADING "Preference|Value" FORMAT a15 +COLUMN ChangeTime HEADING "ChangeTime" FORMAT a36 + + +-- This query has been taken from DBA_TAB_STAT_PREFS sys view. +-- chgtime column is not exposed in the view, so quering from underlying +-- objects directly +SELECT u.name owner + , o.name table_name + , p.pname preference_name + , p.valchar preference_value + , p.chgtime ChangeTime +FROM sys.optstat_user_prefs$ p + , sys.obj$ o + , sys.user$ u +WHERE p.obj#=o.obj# + AND u.user#=o.owner# + AND o.type#=2 + AND u.name like UPPER('&&owner') ESCAPE '\' + AND o.name like UPPER('&&table_name') ESCAPE '\' + AND UPPER(p.pname) like UPPER('&&preference_name') ESCAPE '\' +ORDER BY u.name + , o.name + , p.pname +; + +@@footer \ No newline at end of file diff --git a/vg/stats_zero.sql b/vg/stats_zero.sql new file mode 100644 index 0000000..f08d0c3 --- /dev/null +++ b/vg/stats_zero.sql @@ -0,0 +1,203 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - OWNER +* 2 - Table Name +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Mar-12 Vishal Gupta Intial version +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE partition_name="&&3" +DEFINE subpartition_name="&&4" +DEFINE object_type="&&5" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _partition_name NEW_VALUE partition_name NOPRINT +COLUMN _subpartition_name NEW_VALUE subpartition_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&partition_name','','%','&&partition_name') "_partition_name" + , DECODE('&&subpartition_name','','%','&&subpartition_name') "_subpartition_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" +FROM DUAL; +set term on + + + + +PROMPT +PROMPT *********************************************************************** +PROMPT * Z E R O S T A L E O B J E C T S T A T I S T I C S +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Partition Name = '&&partition_name' +PROMPT * - SubPartition Name = '&&subpartition_name' +PROMPT * - Object Type = '&&object_type' +PROMPT *********************************************************************** + + +PROMPT +PROMPT *********************************** +PROMPT * Zero and Stale Table Statistics +PROMPT *********************************** +PROMPT + +COLUMN owner HEADING "Owner" FORMAT a20 +COLUMN table_name HEADING "TableName" FORMAT a30 +COLUMN index_name HEADING "IndexName" FORMAT a30 +COLUMN partition_name HEADING "Partition" FORMAT a25 +COLUMN partition_position HEADING "Part|Pos" FORMAT 999 +COLUMN subpartition_name HEADING "Sub-Parition" FORMAT a25 +COLUMN subpartition_position HEADING "Sub|Part|Pos" FORMAT 999 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN stattype_locked HEADING "Lock" FORMAT a5 +COLUMN global_stats HEADING "Global|Stat" FORMAT a5 +COLUMN user_stats HEADING "User|Stat" FORMAT a4 +COLUMN stale_stats HEADING "Stale|Stat" FORMAT a5 + + +select /*+ RULE */ + s.owner + , s.table_name +-- , s.object_type + , s.partition_name +-- , s.partition_position + , s.subpartition_name +-- , s.subpartition_position + , s.stattype_locked + , s.global_stats + , s.user_stats + , s.stale_stats + , to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , s.sample_size + , s.num_rows + , s.blocks + , s.empty_blocks + , s.avg_space + , s.chain_cnt + , s.avg_row_len + FROM dba_tab_statistics s + JOIN dba_tables t ON t.owner = s.owner + AND t.table_name = s.table_name + AND t.temporary = 'N' +WHERE s.owner LIKE upper('&&owner') + AND s.table_name LIKE upper('&&table_name') + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','TABLE PARTITION' + ,'SUBPARTITION','TABLE SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' + AND s.table_name not like 'BIN$%' + AND s.num_rows = 0 + AND s.stale_stats = 'YES' + AND s.owner NOT IN ('SYS','XDB') +ORDER BY s.owner + , s.table_name + , s.partition_position + , s.subpartition_position +/ + + +PROMPT +PROMPT *********************************** +PROMPT * Zero and Stale Index Statistics +PROMPT *********************************** + + +COLUMN table_name HEADING "TableName" FORMAT a30 +COLUMN index_name HEADING "IndexName" FORMAT a65 +COLUMN distinct_keys HEADING "DistinctKeys" FORMAT 99,999,999,999 +COLUMN blevel HEADING "BLevel" FORMAT 99999 +COLUMN leaf_blocks HEADING "Leaf|Blocks" FORMAT 99,999,999 +COLUMN clustering_factor HEADING "Clustering|Factor" FORMAT 99,999,999,999 +COLUMN avg_leaf_blocks_per_key HEADING "Avg|LeafBlocks|PerKey" FORMAT 999,999,999 +COLUMN avg_data_blocks_per_key HEADING "Avg|DataBlocks|PerKey" FORMAT 999,999,999 + + +select /*+ RULE */ + s.owner + , s.table_name +-- , s.object_type + , s.index_name + , s.partition_name +-- , s.partition_position + , s.subpartition_name +-- , s.subpartition_position + , s.stattype_locked + , s.global_stats + , s.user_stats + , s.stale_stats + , to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed + , s.sample_size + , s.blevel + , s.num_rows + , s.leaf_blocks + , s.clustering_factor + FROM dba_ind_statistics s + JOIN dba_indexes i ON i.owner = s.owner + AND i.index_name = s.index_name + AND i.temporary = 'N' +WHERE s.owner LIKE upper('&&owner') ESCAPE '\' + AND s.table_name LIKE upper('&&table_name') ESCAPE '\' + AND NVL(s.partition_name,'%') LIKE upper('&&partition_name') ESCAPE '\' + AND NVL(s.subpartition_name,'%') LIKE upper('&&subpartition_name') ESCAPE '\' + AND NVL(DECODE(s.object_type + ,'PARTITION','INDEX PARTITION' + ,'SUBPARTITION','INDEX SUBPARTITION' + ,s.object_type),'%') LIKE upper('&&object_type') ESCAPE '\' + AND s.table_name not like 'BIN$%' + AND s.num_rows = 0 + and s.stale_stats = 'YES' + AND s.owner NOT IN ('SYS','XDB') +ORDER BY s.owner + , s.table_name + , s.index_name + , s.partition_position + , s.subpartition_position +/ + + +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + +@@footer diff --git a/vg/statspack_consolidation.bash b/vg/statspack_consolidation.bash new file mode 100644 index 0000000..206c74e --- /dev/null +++ b/vg/statspack_consolidation.bash @@ -0,0 +1,84 @@ +#!/bin/bash +###################################################################### +# Author : Vishal Gupta +# Date Created : 05-aug-2007 +# Purpose : Merge statspack from multiple sources into single database +# +# Modification History +# Date Ver Author Remarks +# -------- --- -------------- --------------------------------------- +# 05/08/07 0.1 Vishal Gupta First Draft +###################################################################### + +ORACLE_ENV_TYPE=$1 +PERFSTAT_VERSION=$2 +INSTANCE_NAME="$3" +ORACLE_SID=STATSREP +#EMAILS="vishal.gupta@rabobank.com" +EMAILS="fm.eu.DBAAlerts@rabobank.com" +TIMESTAMP=`date +%Y%m%d_%H%M%S` +LOGFILE=/appl/oracle/admin/logs/statspack_consolidation_${ORACLE_ENV_TYPE}_${PERFSTAT_VERSION}_$TIMESTAMP.log + +export ORACLE_HOME=/appl/oracle/product/10.2.0 +export LD_LIBRARY_PATH=$ORACLE_HOME/lib +export NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1" +export PATH=$ORACLE_HOME/bin:$PATH + +function Usage() +{ + echo "`basename $0` []" + echo "" + echo " where = PROD|TEST|DEV " + echo " = 10.2 | 9.2" + echo " [] = optionally instance for single instance consolidation" + exit 1; +} + +if [ $# -lt 2 ] +then + Usage; +fi + + +case "$ORACLE_ENV_TYPE" in + PROD|TEST|DEV) ;; + *) Usage;; +esac + +case "$PERFSTAT_VERSION" in + 10.2|9.2) ;; + *) Usage;; +esac + + + + +sqlplus /nolog > $LOGFILE < sysdate - 3 ) r + -- ON( l.primary_key_col1 = r.primary_key_col1 + -- AND l.primary_key_col2 = r.primary_key_col2 -- For nullable columns use NVL + -- ) + -- WHEN matched THEN + -- UPDATE + -- SET l.col1 = r.col2, + -- l.col2 = r.col2 + -- WHERE l.col1 != r.col1 + -- OR l.col2 != r.col2 + -- OR l.col3 != r.col3 + -- WHEN NOT matched THEN + -- INSERT(col1, col2) + -- VALUES(r.col1, r.col2) + -- ; + + + */ + + v_snap_id_exists := 'N'; + OPEN cur_check_snapid_exists(v_perfstat_schema_owner, tbl.table_name); + FETCH cur_check_snapid_exists INTO v_snap_id_exists; + CLOSE cur_check_snapid_exists; + + -- OPEN cur_is_table_partitioned(v_perfstat_schema_owner, tbl.table_name); + -- FETCH cur_is_table_partitioned INTO rec_is_table_partitioned; + -- CLOSE cur_is_table_partitioned; + + -- Following error is raised on hash join between partitioned and non-partitioned table. + -- ORA-14091: table must be partitioned + -- So added USE_NL hint + + sql_text := 'merge /*+ use_nl(l) use_nl(r) index(L) index(R) */ into ' ; + sql_text := sql_text || v_perfstat_schema_owner || '.' || tbl.table_name ; + + -- IF v_snap_id_exists = 'Y' AND rec_is_table_partitioned.partitioned = 'YES' THEN + -- sql_text := sql_text || ' PARTITION (P' || v_dbid || ') '; + -- END IF; + + sql_text := sql_text || ' l using ( SELECT a.* from ' || tbl.table_name || '@' || v_db_link || ' as of SCN ' || v_scn || ' a '; + + IF v_snap_id_exists = 'Y' THEN + sql_text := sql_text || ' , stats$snapshot@' || v_db_link || ' as of SCN ' || v_scn || ' b '; + sql_text := sql_text || ' where a.dbid = b.dbid '; + sql_text := sql_text || ' and a.instance_number = b.instance_number '; + sql_text := sql_text || ' and a.snap_id = b.snap_id '; + sql_text := sql_text || ' and b.snap_time > sysdate - ' || v_days ; + END IF; + + sql_text := sql_text || ' ) r ON ( '; + + OPEN cur_constraint_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_constraint_cols INTO rec_constraint_cols; + EXIT WHEN cur_constraint_cols%NOTFOUND; + IF rec_constraint_cols.nullable = 'Y' THEN + sql_text := sql_text || 'nvl(l.' || rec_constraint_cols.COLUMN_NAME || ',''0'') = nvl(r.' || rec_constraint_cols.column_name||',''0'') AND '; + ELSE + sql_text := sql_text || 'l.' || rec_constraint_cols.COLUMN_NAME || ' = r.' || rec_constraint_cols.column_name||' AND '; + END IF; + END LOOP; + CLOSE cur_constraint_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -4); + sql_text := sql_text || ' ) '; + + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + END LOOP; + v_update_cols_count := cur_update_cols%ROWCOUNT; + CLOSE cur_update_cols; + + IF v_update_cols_count > 0 THEN + sql_text := sql_text || ' WHEN MATCHED THEN UPDATE SET '; + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + sql_text := sql_text || 'l.' || rec_update_cols.COLUMN_NAME || ' = r.' || rec_update_cols.column_name||','; + END LOOP; + CLOSE cur_update_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) - 1); + + sql_text := sql_text || ' WHERE ' ; + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + sql_text := sql_text || 'l.' || rec_update_cols.COLUMN_NAME || ' != r.' || rec_update_cols.column_name||' OR '; + END LOOP; + CLOSE cur_update_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -3); + + END IF; + + sql_text := sql_text || ' WHEN NOT MATCHED THEN INSERT (' ; + + OPEN cur_tab_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_tab_cols INTO rec_tab_cols; + EXIT WHEN cur_tab_cols%NOTFOUND; + sql_text := sql_text || rec_tab_cols.COLUMN_NAME || ','; + END LOOP; + CLOSE cur_tab_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -1); + + sql_text := sql_text || ' ) VALUES ('; + + OPEN cur_tab_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_tab_cols INTO rec_tab_cols; + EXIT WHEN cur_tab_cols%NOTFOUND; + sql_text := sql_text || 'r.' || rec_tab_cols.COLUMN_NAME || ','; + END LOOP; + CLOSE cur_tab_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -1); + sql_text := sql_text || ' ) ' ; + DBMS_OUTPUT.PUT_LINE (tbl.table_name); + -- IF tbl.table_name = 'STATS$SGASTAT' THEN + -- null; + -- DBMS_OUTPUT.PUT_LINE (SQL_TEXT); + -- END IF; + -- DBMS_OUTPUT.PUT_LINE (SQL_TEXT); + --EXIT; + execute immediate sql_text ; + end loop; + + commit; + EXECUTE immediate 'alter session close database link ' || v_db_link ; + + EXCEPTION + WHEN others THEN + DBMS_OUTPUT.PUT_LINE(sqlerrm); + IF v_sqlcode = 0 THEN + v_sqlcode := SQLCODE; + END IF; + + rollback; + FOR i in (select db_link from v$dblink) + LOOP + EXECUTE immediate 'alter session close database link ' || i.db_link ; + END LOOP; + END; + + END LOOP; + DBMS_OUTPUT.PUT_LINE('###########################################'); + DBMS_OUTPUT.PUT_LINE('Job Finished at ' || to_char(sysdate,'DD-MON-YYYY hh24:MI:SS') ); + + IF v_sqlcode <> 0 THEN + raise_application_error(-20001,'There were some errors in statspack consolidation'); + END IF; +END; +/ + diff --git a/vg/statspack_consolidation_purge.bash b/vg/statspack_consolidation_purge.bash new file mode 100644 index 0000000..e70587e --- /dev/null +++ b/vg/statspack_consolidation_purge.bash @@ -0,0 +1,93 @@ +#!/bin/bash +###################################################################### +# Author : Vishal Gupta +# Date Created : 13-Jul-2008 +# Purpose : To purge statspack data from consolidated statspack +# repository +# +# Modification History +# Date Ver Author Remarks +# -------- --- -------------- --------------------------------------- +# 13/07/08 0.1 Vishal Gupta First Draft +###################################################################### + +ORACLE_ENV_TYPE=$1 +PERFSTAT_VERSION=$2 +INSTANCE_NAME="$3" +ORACLE_SID=STATSREP +EMAILS="fm.eu.DBAAlerts@rabobank.com" +#EMAILS="vishal.gupta@rabobank.com" +TIMESTAMP=`date +%Y%m%d_%H%M%S` +LOGFILE=/appl/oracle/admin/logs/statspack_consolidation_purge_${ORACLE_ENV_TYPE}_${PERFSTAT_VERSION}_$TIMESTAMP.log + +export ORACLE_HOME=/appl/oracle/product/10.2.0 +export LD_LIBRARY_PATH=$ORACLE_HOME/lib +export NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1" +export PATH=$ORACLE_HOME/bin:$PATH + +function Usage() +{ + echo "`basename $0` [] " + echo "" + echo " where = PROD|TEST|DEV " + echo " = 10.2 | 9.2" + echo " [] = optionally instance for single instance purging" + exit 1; +} + +if [ $# -lt 2 ] +then + Usage; +fi + + +case "$ORACLE_ENV_TYPE" in + PROD|TEST|DEV) ;; + *) Usage;; +esac + +case "$PERFSTAT_VERSION" in + 10.2|9.2) ;; + *) Usage;; +esac + + +sqlplus /nolog > $LOGFILE < sysdate - 3 ) r + -- ON( l.primary_key_col1 = r.primary_key_col1 + -- AND l.primary_key_col2 = r.primary_key_col2 -- For nullable columns use NVL + -- ) + -- WHEN matched THEN + -- UPDATE + -- SET l.col1 = r.col2, + -- l.col2 = r.col2 + -- WHERE l.col1 != r.col1 + -- OR l.col2 != r.col2 + -- OR l.col3 != r.col3 + -- WHEN NOT matched THEN + -- INSERT(col1, col2) + -- VALUES(r.col1, r.col2) + -- ; + + + */ + + v_snap_id_exists := 'N'; + OPEN cur_check_snapid_exists(v_perfstat_schema_owner, tbl.table_name); + FETCH cur_check_snapid_exists INTO v_snap_id_exists; + CLOSE cur_check_snapid_exists; + + OPEN cur_is_table_partitioned(v_perfstat_schema_owner, tbl.table_name); + FETCH cur_is_table_partitioned INTO rec_is_table_partitioned; + CLOSE cur_is_table_partitioned; + + sql_text := 'merge /*+ index(L) index(R) */ into ' ; + sql_text := sql_text || v_perfstat_schema_owner || '.' || tbl.table_name ; + + IF v_snap_id_exists = 'Y' AND rec_is_table_partitioned.partitioned = 'YES' THEN + sql_text := sql_text || ' PARTITION (P' || v_dbid || ') '; + END IF; + + sql_text := sql_text || ' l using ( SELECT a.* from ' || tbl.table_name || '@' || v_db_link || ' as of SCN ' || v_scn || ' a '; + + IF v_snap_id_exists = 'Y' THEN + sql_text := sql_text || ' , stats$snapshot@' || v_db_link || ' as of SCN ' || v_scn || ' b '; + sql_text := sql_text || ' where a.dbid = b.dbid '; + sql_text := sql_text || ' and a.instance_number = b.instance_number '; + sql_text := sql_text || ' and a.snap_id = b.snap_id '; + sql_text := sql_text || ' and b.snap_time > sysdate - ' || v_days ; + END IF; + + sql_text := sql_text || ' ) r ON ( '; + + OPEN cur_constraint_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_constraint_cols INTO rec_constraint_cols; + EXIT WHEN cur_constraint_cols%NOTFOUND; + IF rec_constraint_cols.nullable = 'Y' THEN + sql_text := sql_text || 'nvl(l.' || rec_constraint_cols.COLUMN_NAME || ',''0'') = nvl(r.' || rec_constraint_cols.column_name||',''0'') AND '; + ELSE + sql_text := sql_text || 'l.' || rec_constraint_cols.COLUMN_NAME || ' = r.' || rec_constraint_cols.column_name||' AND '; + END IF; + END LOOP; + CLOSE cur_constraint_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -4); + sql_text := sql_text || ' ) '; + + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + END LOOP; + v_update_cols_count := cur_update_cols%ROWCOUNT; + CLOSE cur_update_cols; + + IF v_update_cols_count > 0 THEN + sql_text := sql_text || ' WHEN MATCHED THEN UPDATE SET '; + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + sql_text := sql_text || 'l.' || rec_update_cols.COLUMN_NAME || ' = r.' || rec_update_cols.column_name||','; + END LOOP; + CLOSE cur_update_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) - 1); + + sql_text := sql_text || ' WHERE ' ; + OPEN cur_update_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_update_cols INTO rec_update_cols; + EXIT WHEN cur_update_cols%NOTFOUND; + sql_text := sql_text || 'l.' || rec_update_cols.COLUMN_NAME || ' != r.' || rec_update_cols.column_name||' OR '; + END LOOP; + CLOSE cur_update_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -3); + + END IF; + + sql_text := sql_text || ' WHEN NOT MATCHED THEN INSERT (' ; + + OPEN cur_tab_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_tab_cols INTO rec_tab_cols; + EXIT WHEN cur_tab_cols%NOTFOUND; + sql_text := sql_text || rec_tab_cols.COLUMN_NAME || ','; + END LOOP; + CLOSE cur_tab_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -1); + + sql_text := sql_text || ' ) VALUES ('; + + OPEN cur_tab_cols(v_perfstat_schema_owner, tbl.table_name); + LOOP + FETCH cur_tab_cols INTO rec_tab_cols; + EXIT WHEN cur_tab_cols%NOTFOUND; + sql_text := sql_text || 'r.' || rec_tab_cols.COLUMN_NAME || ','; + END LOOP; + CLOSE cur_tab_cols; + sql_text := SUBSTR(sql_text,1, LENGTH(sql_text) -1); + sql_text := sql_text || ' ) ' ; + DBMS_OUTPUT.PUT_LINE (tbl.table_name); + IF tbl.table_name = 'STATS$SGASTAT' THEN + null; + DBMS_OUTPUT.PUT_LINE (SQL_TEXT); + EXIT; + END IF; + --DBMS_OUTPUT.PUT_LINE (SQL_TEXT); + --execute immediate sql_text ; + --commit; + end loop; + + --EXECUTE immediate 'alter session close database link ' || v_db_link ; + + EXCEPTION + WHEN others THEN + DBMS_OUTPUT.PUT_LINE(sqlerrm); + IF v_sqlcode = 0 THEN + v_sqlcode := SQLCODE; + END IF; + FOR i in (select db_link from v$dblink) + LOOP + commit; + EXECUTE immediate 'alter session close database link ' || i.db_link ; + END LOOP; + END; + + END LOOP; + DBMS_OUTPUT.PUT_LINE('###########################################'); + DBMS_OUTPUT.PUT_LINE('Job Finished at ' || to_char(sysdate,'DD-MON-YYYY hh24:MI:SS') ); + + IF v_sqlcode <> 0 THEN + raise_application_error(-20001,'There were some errors in statspack consolidation'); + END IF; +END; +/ + diff --git a/vg/stdby_sp_purge.txt b/vg/stdby_sp_purge.txt new file mode 100644 index 0000000..6a46cf8 --- /dev/null +++ b/vg/stdby_sp_purge.txt @@ -0,0 +1,73 @@ +create or replace PROCEDURE STDBYPERF.PURGE_ALL_INSTANCES(i_num_days IN NUMBER) +AS +BEGIN + FOR i IN (SELECT * FROM STATS$STANDBY_CONFIG) + LOOP + FOR J IN (SELECT * + FROM (SELECT i_num_days + level days + FROM dual + CONNECT BY LEVEL <= ( SELECT (TRUNC(sysdate) - TRUNC(MIN(s.SNAP_TIME)) ) - i_num_days + FROM STATS$SNAPSHOT s + WHERE s.db_unique_name = i.db_unique_name + AND s.instance_name = i.inst_name + group by s.db_unique_name , s.instance_name + ) + ORDER BY level desc + ) + ) + LOOP + dbms_output.put_line('BEGIN ' || i.db_unique_name || '_' || i.inst_name || '.purge(' || j.days || ',FALSE,''' ||i.db_unique_name || ''',''' || i.inst_name || '''); END;' ); + execute immediate 'BEGIN ' || i.db_unique_name || '_' || i.inst_name || '.purge(:num_days ,FALSE, :db_unique_name , :instance_name ); END;' using j.days , i.db_unique_name , i.inst_name; + END LOOP; + END LOOP; +END; +/ + +create or replace PROCEDURE STDBYPERF.PURGE_ALL_INSTANCES(i_num_days IN NUMBER) +AS + l_snap_id NUMBER; +BEGIN + execute immediate 'alter session enable parallel DML'; + execute immediate 'alter session enable parallel DDL'; + FOR i IN (SELECT db_unique_name + , inst_name instance_name + FROM STATS$STANDBY_CONFIG + ORDER BY db_unique_name + , inst_name + ) + LOOP + SELECT max(s.snap_id) + INTO l_snap_id + FROM STATS$SNAPSHOT s + where 1=1 + and s.db_unique_name = i.db_unique_name + and s.instance_name = i.instance_name + and trunc(s.snap_time) < trunc(sysdate - i_num_days) + ; + + FOR j in (SELECT owner, table_name + FROM user_constraints + where owner = 'STDBYPERF' + and constraint_type = 'R' + and delete_rule = 'CASCADE' + and r_constraint_name = 'STATS$SNAPSHOT_PK' + and r_owner = 'STDBYPERF' + order by owner, table_name + ) + LOOP + execute immediate 'delete /*+ parallel(a 16) */ from ' || j.owner || '.' || j.table_name || ' a ' + || ' WHERE a.db_unique_name = :db_unique_name ' + || ' AND a.instance_name = :instance_name ' + || ' AND a.snap_id < :snap_id ' USING i.db_unique_name , i.instance_name , l_snap_id ; + END LOOP; + execute immediate 'delete /*+ parallel(a 16) */ from STDBYPERF.STATS$SNAPSHOT a ' + || ' WHERE a.db_unique_name = :db_unique_name ' + || ' AND a.instance_name = :instance_name ' + || ' AND a.snap_id < :snap_id ' USING i.db_unique_name , i.instance_name , l_snap_id ; + COMMIT; + END LOOP; +END; +/ + + + diff --git a/vg/stdby_sp_queries.sql b/vg/stdby_sp_queries.sql new file mode 100644 index 0000000..fd78acb --- /dev/null +++ b/vg/stdby_sp_queries.sql @@ -0,0 +1,176 @@ + +/**************************** + Standby Statspack +****************************/ + +-- Set Schema name +alter session set current_schema = STDBYPERF; + +-- Instance config +SELECT * FROM STATS$STANDBY_CONFIG; + +-- Instance specific Packages +SELECT * FROM dba_objects where owner = SYS_CONTEXT('USERENV','CURRENT_SCHEMA') and object_Type = 'PACKAGE'; + +-- Instance specific DB Links +SELECT * FROM dba_db_links where owner = SYS_CONTEXT('USERENV','CURRENT_SCHEMA') ; + +-- Tables +SELECT * FROM dba_objects where owner = SYS_CONTEXT('USERENV','CURRENT_SCHEMA') and object_Type = 'TABLE'; + +-- Statspack parameters +SELECT * FROM STATS$STATSPACK_PARAMETER; + +-- Snapshot Levels +SELECT * FROM STATS$LEVEL_DESCRIPTION; + +SELECT * FROM STATS$DATABASE_INSTANCE ORDER BY db_unique_name, instance_name ; + +-- Snapshots +SELECT * FROM STATS$SNAPSHOT where db_unique_name like '%' and instance_name like '%' order by snap_id desc; + +-- Instance init.ora parameters +SELECT * FROM STATS$PARAMETER; + + +SELECT * FROM STATS$BG_EVENT_SUMMARY; +SELECT * FROM STATS$WAITSTAT; +SELECT * FROM STATS$TIME_MODEL_STATNAME; + +SELECT * FROM STATS$SYSTEM_EVENT; +SELECT * FROM STATS$SYSSTAT; +SELECT * FROM STATS$SYS_TIME_MODEL; + +SELECT * FROM STATS$SESSION_EVENT; +SELECT * FROM STATS$SESSTAT; +SELECT * FROM STATS$SESS_TIME_MODEL; + +SELECT * FROM STATS$EVENT_HISTOGRAM; +SELECT * FROM STATS$IDLE_EVENT; + +SELECT * FROM STATS$FILESTATXS; +SELECT * FROM STATS$FILE_HISTOGRAM; + +SELECT * FROM STATS$INSTANCE_CACHE_TRANSFER; +SELECT * FROM STATS$INSTANCE_RECOVERY; + +SELECT * FROM STATS$JAVA_POOL_ADVICE; + +SELECT * FROM STATS$LATCH; +SELECT * FROM STATS$LATCH_CHILDREN; +SELECT * FROM STATS$LATCH_MISSES_SUMMARY; +SELECT * FROM STATS$LATCH_PARENT; + +SELECT * FROM STATS$LIBRARYCACHE; +SELECT * FROM STATS$LOCK_TYPE; +SELECT * FROM STATS$MANAGED_STANDBY; +SELECT * FROM STATS$MUTEX_SLEEP; +SELECT * FROM STATS$OSSTAT; +SELECT * FROM STATS$OSSTATNAME; + +SELECT * FROM STATS$PGASTAT; +SELECT * FROM STATS$PGA_TARGET_ADVICE; +SELECT * FROM STATS$SGA; +SELECT * FROM STATS$SGASTAT; +SELECT * FROM STATS$SGA_TARGET_ADVICE; +SELECT * FROM STATS$SHARED_POOL_ADVICE; + +SELECT * FROM STATS$PROCESS_MEMORY_ROLLUP; +SELECT * FROM STATS$PROCESS_ROLLUP; + +SELECT * FROM STATS$SQLTEXT; +SELECT * FROM STATS$SQL_PLAN; +SELECT * FROM STATS$SQL_PLAN_USAGE; +SELECT * FROM STATS$SQL_STATISTICS; +SELECT * FROM STATS$SQL_SUMMARY; +SELECT * FROM STATS$SQL_WORKAREA_HISTOGRAM; + +SELECT * FROM STATS$SEG_STAT; +SELECT * FROM STATS$SEG_STAT_OBJ; + +SELECT * FROM STATS$TEMPSTATXS; +SELECT * FROM STATS$TEMP_SQLSTATS; +SELECT * FROM STATS$UNDOSTAT; + + + +SELECT * FROM STATS$PROPAGATION_RECEIVER; +SELECT * FROM STATS$PROPAGATION_SENDER; +SELECT * FROM STATS$RECOVERY_PROGRESS; +SELECT * FROM STATS$RESOURCE_LIMIT; +SELECT * FROM STATS$ROLLSTAT; +SELECT * FROM STATS$ROWCACHE_SUMMARY; +SELECT * FROM STATS$RULE_SET; + +SELECT * FROM STATS$THREAD; +SELECT * FROM STATS$BUFFERED_QUEUES; +SELECT * FROM STATS$BUFFERED_SUBSCRIBERS; +SELECT * FROM STATS$BUFFER_POOL_STATISTICS; +SELECT * FROM STATS$CR_BLOCK_SERVER; +SELECT * FROM STATS$CURRENT_BLOCK_SERVER; +SELECT * FROM STATS$DB_CACHE_ADVICE; +SELECT * FROM STATS$DLM_MISC; +SELECT * FROM STATS$DYNAMIC_REMASTER_STATS; +SELECT * FROM STATS$ENQUEUE_STATISTICS; + +SELECT * FROM STATS$STREAMS_APPLY_SUM; +SELECT * FROM STATS$STREAMS_CAPTURE; +SELECT * FROM STATS$STREAMS_POOL_ADVICE; + + +--------------------------------------------------------- +-- System Statistics +--------------------------------------------------------- +--SELECT * FROM ( +SELECT /*+ FULL(s) FULL(ss) */ + s.snap_time + , s.db_unique_name + , s.instance_name + , ss.statistic# + , ss.name + , ss.value - LAG(ss.value) OVER (PARTITION BY ss.db_unique_name, ss.instance_name, ss.name ORDER BY ss.snap_id ASC) value_diff +FROM STATS$SNAPSHOT s + JOIN STATS$SYSSTAT ss ON s.db_unique_name = ss.db_unique_name and ss.instance_name = s.instance_name and ss.snap_id = s.snap_id +where 1=1 +and s.db_unique_name = 'stby02_pr01pimi' +and s.instance_name = 'pr01pimi1' +and ss.name like '%%' +and s.snap_time between TO_DATE('20-OCT-15 02:00:00') and TO_DATE('20-OCT-15 09:00:00') +order by s.snap_time + , s.db_unique_name + , s.instance_name + , ss.name +--) WHERE waits is not null +; + + +--------------------------------------------------------- +-- System Events +--------------------------------------------------------- + +--SELECT * FROM ( +SELECT /*+ FULL(s) FULL(e) */ + s.snap_time + , s.db_unique_name + , s.instance_name + , e.event + , e.total_waits - LAG(e.total_waits) OVER (PARTITION BY e.db_unique_name, e.instance_name, e.event ORDER BY e.snap_id ASC) waits + , ROUND((e.total_timeouts - LAG(e.total_timeouts) OVER (PARTITION BY e.db_unique_name, e.instance_name, e.event ORDER BY e.snap_id ASC))/100000) timeouts + , ROUND((e.time_waited_micro - LAG(e.time_waited_micro) OVER (PARTITION BY e.db_unique_name, e.instance_name, e.event ORDER BY e.snap_id ASC))/100000) time_waited_sec + , e.total_waits_fg - LAG(e.total_waits_fg) OVER (PARTITION BY e.db_unique_name, e.instance_name, e.event ORDER BY e.snap_id ASC) waits_fg + , ROUND((e.total_timeouts_fg - LAG(e.total_timeouts_fg) OVER (PARTITION BY e.db_unique_name, e.instance_name, e.event ORDER BY e.snap_id ASC))/100000) timeouts_fg + , ROUND((e.time_waited_micro_fg - LAG(e.time_waited_micro_fg) OVER (PARTITION BY e.db_unique_name, e.instance_name, e.event ORDER BY e.snap_id ASC))/100000) time_waited_fg_sec +FROM STDBYPERF.STATS$SNAPSHOT s + JOIN STDBYPERF.STATS$SYSTEM_EVENT e ON s.db_unique_name = e.db_unique_name and e.instance_name = s.instance_name and e.snap_id = s.snap_id +where 1=1 +and s.db_unique_name = 'stby02_pr01pimi' +and s.instance_name = 'pr01pimi1' +and e.event like 'library cache lock' +and s.snap_time between TO_DATE('20-OCT-15 02:00:00') and TO_DATE('20-OCT-15 09:00:00') +order by s.snap_time + , s.db_unique_name + , s.instance_name + , e.event +--) WHERE waits is not null +; + diff --git a/vg/synonym.sql b/vg/synonym.sql new file mode 100644 index 0000000..bfab940 --- /dev/null +++ b/vg/synonym.sql @@ -0,0 +1,78 @@ +@@header +/* +* +* Author : Vishal Gupta +* Purpose : Display Synonyms +* Parameters : 1 - owner (% - wildchar, \ - escape char) , this could also be passed as OWNER.OBJECT_NAME +* 2 - Synonymn name (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 18-SEP-14 Vishal Gupta Appended db_link to table_name and remove separate output column for DB_LINK +* 11-Dec-04 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE synonym_name + +DEFINE owner="&&1" +DEFINE synonym_name="&&2" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _synonym_name NEW_VALUE synonym_name NOPRINT + +set term off + +SELECT DECODE(UPPER('&&owner'),'','%','&&owner') "_owner" + , DECODE(UPPER('&&synonym_name'),'','%','&&synonym_name') "_synonym_name" +FROM DUAL; + +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END) "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&synonym_name'),'','%',UPPER('&&synonym_name')) + END "_synonym_name" +FROM DUAL; +set term on + + +PROMPT ***************************************************************** +PROMPT * S Y N O N Y M N L I S T +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Synonym Name = '&&synonym_name' +PROMPT ***************************************************************** + +COLUMN synonym_name FORMAT a50 +COLUMN table_name FORMAT a50 +COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18 +COLUMN created HEADING "Created" FORMAT a18 + + +SELECT s.owner || '.' || s.synonym_name synonym_name + , s.table_owner || '.' || s.table_name || NVL2(s.db_link,'@'||s.db_link,'') table_name + , TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time + , TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created + --, s.db_link + FROM dba_synonyms s + , dba_objects o + WHERE s.owner = o.owner + AND s.synonym_name = o.object_name + AND o.object_type = 'SYNONYM' + AND o.owner like '&&owner' ESCAPE '\' + AND s.synonym_name like '&&synonym_name' ESCAPE '\' +ORDER BY s.synonym_name + , s.owner +; + + +@@footer diff --git a/vg/sysaux_space_usage.sql b/vg/sysaux_space_usage.sql new file mode 100644 index 0000000..11d0a27 --- /dev/null +++ b/vg/sysaux_space_usage.sql @@ -0,0 +1,43 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display SYSAUX occupant's tablespace space usage. +* Parameter : None +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 20-May-15 Vishal Gupta Created +* +*/ + +PROMPT +PROMPT ###################### +PROMPT SYSAUX Space Usage +PROMPT ###################### + +COLUMN occupant_name HEADING "Occupant Name" FORMAT a24 +COLUMN schema_name HEADING "Schema Name" FORMAT a20 +COLUMN space_usage HEADING "Space|Usage|(MB)" FORMAT 99,999,999 +COLUMN move_procedure HEADING "Move Procedure" FORMAT a35 +COLUMN move_procedure_desc HEADING "Move Procedure Desc" FORMAT a40 +COLUMN occupant_desc HEADING "Occupant Desc " FORMAT a60 + +BREAK ON REPORT +COMPUTE SUM LABEL "Total" OF space_usage ON REPORT FORMAT 99,999,999 + +SELECT occupant_name + , round( space_usage_kbytes/1024) space_usage + , schema_name + , move_procedure + --, move_procedure_desc + , occupant_desc +FROM v$sysaux_occupants +ORDER BY space_usage desc +; + +@@footer diff --git a/vg/tab_details.sql b/vg/tab_details.sql new file mode 100644 index 0000000..8296ceb --- /dev/null +++ b/vg/tab_details.sql @@ -0,0 +1,362 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Tables details +* Parameters : 1 - Owner (Use % as wild card, \ as ESCAPE) +* 2 - TableName (Use % as wild card, \ as ESCAPE) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 22-Aug-16 Vishal Gupta Added child foreign key constrainst list +* 30-Apr-15 Vishal Gupta Added join to dba_objects to get creation date +* 13-Mar-15 Vishal Gupta Added table's indexes in output +* 24-Apr-13 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name + +DEFINE owner="&&1" +DEFINE table_name="&&2" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT + + +set term off +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END) "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE UPPER('&&table_name') + END "_table_name" +FROM DUAL; +set term on + + +PROMPT ************************************ +PROMPT * T A B L E D E T A I L S +PROMPT ************************************ + +COLUMN col1 FORMAT a60 +COLUMN col2 FORMAT a60 + +set head off +SELECT 'Owner : ' || t.owner + || chr(10) || 'Table Name : ' || t.table_name + || chr(10) || 'Table Comments : ' || c.comments + || chr(10) || 'Tablespace Name : ' || t.tablespace_name +&&_IF_ORA_10gR2_OR_HIGHER || chr(10) || 'Status : ' || t.status + || chr(10) || 'Temporary : ' || t.temporary + || chr(10) || 'Partitioned : ' || t.partitioned + || chr(10) || 'Compression : ' || t.compression +&&_IF_ORA_11gR1_OR_HIGHER || chr(10) || 'Compress For : ' || t.compress_for +&&_IF_ORA_11gR2_OR_HIGHER || chr(10) || 'Segment Created : ' || t.segment_created + || chr(10) || 'Degree : ' || TRIM(t.degree) + || chr(10) || 'IOT Type : ' || t.iot_type + || chr(10) || 'IOT Name : ' || t.iot_name + || chr(10) || 'Logging : ' || t.logging + || chr(10) || 'Backed Up : ' || t.backed_up + || chr(10) || 'Instances : ' || TRIM(t.instances) + || chr(10) || 'Table Lock : ' || t.table_lock + || chr(10) || 'Secondary : ' || t.secondary + || chr(10) || 'Nested : ' || t.nested + || chr(10) || 'Row Movement : ' || t.row_movement + || chr(10) || 'Duration : ' || t.duration + || chr(10) || 'Skip Corrupt : ' || t.skip_corrupt + || chr(10) || 'Monitoring : ' || t.monitoring + || chr(10) || 'Cluster Owner : ' || t.cluster_owner + || chr(10) || 'Cluster Name : ' || t.cluster_name + || chr(10) || 'Dependencies : ' || t.dependencies +&&_IF_ORA_10gR1_OR_HIGHER || chr(10) || 'Dropped : ' || t.dropped +&&_IF_ORA_11gR1_OR_HIGHER || chr(10) || 'Read Only : ' || t.read_only + || chr(10) || ' ' + || chr(10) || '[ Cache ] ' + || chr(10) || 'Cache : ' || TRIM(t.cache) + || chr(10) || 'Buffer Pool : ' || t.buffer_pool +&&_IF_ORA_11gR2_OR_HIGHER || chr(10) || 'Flash Cache : ' || t.flash_cache +&&_IF_ORA_11gR2_OR_HIGHER || chr(10) || 'Cell Flash Cache : ' || t.cell_flash_cache +&&_IF_ORA_11gR2_OR_HIGHER || chr(10) || 'Result Cache : ' || t.result_cache + col1 + , + '[ Dates ] ' + || chr(10) || 'Created : ' || TO_CHAR(o.created,'DD-MON-YYYY HH24:MI:SS') + || chr(10) || 'Last DDL : ' || TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') + || chr(10) || 'Last Spec Change : ' || TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') + || chr(10) || ' ' + || chr(10) || '[ Storage ] ' + || chr(10) || 'PCT Free : ' || t.pct_free + || chr(10) || 'PCT Used : ' || t.pct_used + || chr(10) || 'PCT Increase : ' || t.pct_increase + || chr(10) || 'INI Trans : ' || t.ini_trans + || chr(10) || 'Max Trans : ' || t.max_trans + || chr(10) || 'Initial Extent Size : ' || t.initial_extent + || chr(10) || 'Next Extent Size : ' || t.next_extent + || chr(10) || 'Mininum Extents : ' || t.min_extents + || chr(10) || 'Max Extents : ' || t.max_extents + || chr(10) || 'Freelists : ' || t.freelists + || chr(10) || 'Freelists Group : ' || t.freelist_groups + || chr(10) || ' ' + || chr(10) || '[ Statistics ] ' + || chr(10) || 'Last Analyzed : ' || to_char(t.last_analyzed,'DD-MON-YY HH24:MI:SS') + || chr(10) || 'Global Stats : ' || t.global_stats + || chr(10) || 'User Stats : ' || t.user_stats + || chr(10) || 'Sample Size : ' || TRIM(TO_CHAR(t.sample_size,'999,999,999,999,999')) + || chr(10) || 'Num Rows : ' || TRIM(TO_CHAR(t.num_rows,'999,999,999,999,999')) + || chr(10) || 'Table Size : ' || TRIM(TO_CHAR((t.blocks * (select BLOCK_SIZE from dba_tablespaces tbs where tbs.tablespace_name = t.tablespace_name) )/power(1024,2),'999,999,999,999,999' )) || ' MB' + || chr(10) || 'Blocks : ' || t.blocks + || chr(10) || 'Empty Blocks : ' || t.empty_blocks + || chr(10) || 'Average Row Length : ' || t.avg_row_len + || chr(10) || 'Average Space : ' || t.avg_space + || chr(10) || 'Chain Count : ' || t.chain_cnt + || chr(10) || 'Freelist Blocks : ' || t.num_freelist_blocks + || chr(10) || 'Avg Space Freelists Blocks: ' || t.avg_space_freelist_blocks + col2 +FROM dba_tables t + JOIN dba_objects o ON o.owner = t.owner AND o.object_name = t.table_name AND o.object_type = 'TABLE' + LEFT OUTER JOIN dba_tab_comments c ON c.owner = t.owner AND c.table_name = t.table_name +WHERE t.owner = '&&owner' + AND t.table_name = '&&table_name' +; +set head on + + +/* Taken from tab_parts_summary.sql */ + +PROMPT ******************************* +PROMPT * Table's Partitions Details +PROMPT ******************************* + + +COLUMN table_name HEADING "Table Name" FORMAT a40 +COLUMN partitioning_type HEADING "Part|Type" FORMAT a7 +COLUMN partitioning_key_count HEADING "Part|Key|Count" FORMAT 99999 +COLUMN interval HEADING "Interval" FORMAT a30 +COLUMN subpartitioning_type HEADING "SubPart|Type" FORMAT a10 +COLUMN subpartitioning_key_count HEADING "SubPart|Key|Count" FORMAT 99999 +COLUMN def_subpartition_count HEADING "Default|Subpart|Count|PerPart" FORMAT 999 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN partition_count HEADING "Part|Count" FORMAT 999,999 +COLUMN subpartition_count HEADING "SubPart|Count" FORMAT 999,999 +COLUMN total_count HEADING "Total|Count" FORMAT 999,999 + + + +SELECT pt.owner || '.' || pt.table_name table_name + , pt.status + , pt.partitioning_type + , pt.partitioning_key_count + -- for interval RANGE partition, dba_part_tables.partition_count is always 1048575 + -- , so we need to take actual partition count from dba_tab_partitions + , count(distinct p.partition_name) partition_count + , pt.interval + , pt.subpartitioning_type + , pt.subpartitioning_key_count + , pt.def_subpartition_count + , count(s.subpartition_name) subpartition_count + , GREATEST(count(distinct p.partition_name) , count(s.subpartition_name)) total_count + FROM dba_part_tables pt + JOIN dba_tab_partitions p ON p.table_owner = pt.owner AND p.table_name = pt.table_name + LEFT OUTER JOIN dba_tab_subpartitions s ON s.table_owner = pt.owner AND s.table_name = pt.table_name AND p.partition_name = s.partition_name +WHERE 1=1 + AND pt.owner LIKE '&&owner' ESCAPE '\' + AND pt.table_name LIKE '&&table_name' ESCAPE '\' +GROUP BY + pt.owner + , pt.table_name + , pt.partitioning_type + , pt.interval + , pt.subpartitioning_type + , pt.def_subpartition_count + , pt.partitioning_key_count + , pt.subpartitioning_key_count + , pt.status +--ORDER BY total_count desc +ORDER BY pt.owner + , pt.table_name +; + + + + +/* Taken from tab_indexes.sql */ +PROMPT +PROMPT ******************** +PROMPT * Table's Indices +PROMPT ******************** + +COLUMN owner HEADING "Index Owner" FORMAT a20 +COLUMN table_name HEADING "Table Name" FORMAT a40 +COLUMN index_owner HEADING "Index Owner" FORMAT a20 +COLUMN index_name HEADING "Index Name" FORMAT a40 +COLUMN index_type HEADING "Index Type" FORMAT a10 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN visibility HEADING "Visible" FORMAT a10 +COLUMN uniqueness HEADING "Uniqueness" FORMAT a15 +COLUMN Columns HEADING "Index columns" FORMAT a90 + +BREAK ON TABLE_NAME + +SELECT /*+ */ + -- i.table_owner || '.' || i.table_name table_name + --, + i.owner || '.' || i.index_name index_name + , i.uniqueness + , i.index_type + , i.status + , i.visibility +-- , column_name +-- , column_position +-- , CONNECT_BY_ISLEAF +-- , LEVEL + --, SUBSTR(SYS_CONNECT_BY_PATH ( NVL(to_char(ie.column_expression),ic.column_name) || DECODE(ic.descend,'ASC','',' (desc) ') , ' , ' ),4) Columns + , SUBSTR(SYS_CONNECT_BY_PATH ( ic.column_name || DECODE(ic.descend,'ASC','',' (desc) ') , ' , ' ),4) Columns +FROM dba_indexes i + , dba_ind_columns ic + , dba_ind_expressions ie +WHERE i.owner = ic.index_owner + AND i.index_name = ic.index_name + AND i.table_owner = ic.table_owner + AND i.table_name = ic.table_name + AND ic.index_owner = ie.index_owner (+) + AND ic.index_name = ie.index_name (+) + AND ic.table_owner = ie.table_owner (+) + AND ic.table_name = ie.table_name (+) + AND ic.column_position = ie.column_position (+) + AND i.table_owner LIKE upper('&&owner') ESCAPE '\' + AND i.table_name LIKE upper('&&table_name') ESCAPE '\' + AND CONNECT_BY_ISLEAF = 1 + AND LEVEL = ic.column_position +CONNECT BY ic.table_owner = PRIOR ic.table_owner + AND ic.table_name = PRIOR ic.table_name + AND ic.index_owner = PRIOR ic.index_owner + AND ic.index_name = PRIOR ic.index_name + AND ic.column_position - 1 = PRIOR ic.column_position +START WITH ic.table_owner LIKE upper('&&owner') ESCAPE '\' + AND ic.table_name LIKE upper('&&table_name') ESCAPE '\' +ORDER BY ic.table_owner + , ic.table_name + , ic.index_owner + , ic.index_name +; + + +-- Taken from columns.sql +/* +PROMPT +PROMPT ******************** +PROMPT * Table's Columns +PROMPT ******************** + +COLUMN object_name HEADING "ObjectName" FORMAT a45 +COLUMN object_type HEADING "ObjectType" FORMAT a17 +COLUMN column_id HEADING "ColumnId" FORMAT 9999 +COLUMN column_name HEADING "ColumnName" FORMAT a30 +COLUMN nullable HEADING "Null?" FORMAT a8 +COLUMN Type HEADING "ColumnType" FORMAT a20 +COLUMN data_default HEADING "Default|Value" FORMAT a40 +COLUMN comments HEADING "Comments" FORMAT a60 + + +SELECT + --c.owner || '.' || c.table_name object_name, + c.column_id + , c.column_name + , DECODE(c.nullable,'N','NOT NULL','') nullable + , CASE + WHEN c.data_type = 'NUMBER' + THEN c.data_type || NVL2(c.data_precision||c.data_scale, '(' || NVL(c.data_precision,'38') || ',' || NVL(c.data_scale,'127') || ')','') + WHEN c.data_type = 'FLOAT' + THEN c.data_type || NVL2(c.data_precision,'(' || c.data_precision || ')','') + WHEN c.data_type = 'VARCHAR2' OR c.data_type = 'CHAR' + THEN c.data_type || '(' || c.char_length || ' ' || DECODE(c.char_used,'B','BYTE','CHAR') || ')' + WHEN c.data_type = 'NVARCHAR2' OR c.data_type = 'NCHAR' + THEN c.data_type || '(' || c.char_length || ')' + WHEN c.data_type = 'RAW' OR c.data_type = 'UROWID' + THEN c.data_type || '(' || c.data_length || ')' + ELSE c.data_type + END Type + , c.data_default + , cc.comments +FROM dba_tab_columns c + LEFT OUTER JOIN dba_col_comments cc ON cc.owner = c.owner AND cc.table_name = c.table_name AND cc.column_name = c.column_name +WHERE UPPER(c.owner) like UPPER('&&owner') ESCAPE '\' + AND UPPER(c.table_name) like UPPER('&&table_name') ESCAPE '\' + AND c.table_name NOT LIKE 'BIN$%' +ORDER BY c.column_id ; +*/ + + +PROMPT +PROMPT **************************** +PROMPT * Table's Constraints +PROMPT **************************** + +COLUMN constraint_name HEADING "ConstraintName" FORMAT a30 +COLUMN constraint_type HEADING "Type" FORMAT a4 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN delete_rule HEADING "Delete|Rule" FORMAT a9 +COLUMN validated HEADING "Validated" +COLUMN generated HEADING "Generated" +COLUMN last_change HEADING "LastChange" FORMAT a18 +COLUMN search_condition HEADING "SearchCondition" FORMAT a50 + +select * +from + xmltable( '/ROWSET/ROW' + passing dbms_xmlgen.getXMLType(' + SELECT c.constraint_name + , c.constraint_type + , c.status + , c.delete_rule + , c.validated + , c.generated + , TO_CHAR(last_change,''DD-MON-YY HH24:MI:SS'') last_change + , c.search_condition /* <---- Long Column type*/ + FROM dba_constraints c + WHERE UPPER(c.owner) like UPPER(''' || '&&owner' || ''') ESCAPE ''\'' + AND UPPER(c.table_name) like UPPER(''' || '&&table_name' || ''') ESCAPE ''\'' + ') + columns + constraint_name varchar2(30) + , constraint_type varchar2(30) + , status varchar2(30) + , delete_rule varchar2(9) + , validated varchar2(30) + , generated varchar2(30) + , last_change varchar2(30) + , search_condition varchar2(2000) + ) +WHERE 1=1 + AND NOT (constraint_type = 'C' AND search_condition LIKE '%NOT NULL%' ) +; + +PROMPT +PROMPT ******************************************** +PROMPT * Child Foreign Key Constraints +PROMPT ******************************************** + + +SELECT c.owner + , c.constraint_name + , c.table_name + , c.r_constraint_name + , c.delete_rule + FROM dba_constraints c + WHERE (c.r_owner, c.r_constraint_name) IN (SELECT c2.owner, c2.constraint_name + FROM dba_constraints c2 + WHERE UPPER(c2.owner) like UPPER('&&owner') ESCAPE '\' + AND UPPER(c2.table_name) like UPPER('&&table_name') ESCAPE '\' + AND c2.constraint_type in ('P','U') + ) +; + +@@footer diff --git a/vg/tab_indexes.sql b/vg/tab_indexes.sql new file mode 100644 index 0000000..8c6aca6 --- /dev/null +++ b/vg/tab_indexes.sql @@ -0,0 +1,161 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Tables indexes +* Parameters : 1 - Owner (Use % as wild card, \ as ESCAPE) +* 2 - TableName (Use % as wild card, \ as ESCAPE) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-Mar-12 Vishal Gupta First Draft +* 12-Jun-12 Vishal Gupta Added indexes status to output +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +DEFINE owner="&&1" +DEFINE table_name="&&2" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + + +set term off +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END) "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" +FROM DUAL; +set term on + +Prompt +Prompt *********************************************** +Prompt * Table Indexes +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +Prompt *********************************************** + + +COLUMN table_name HEADING "Table Name" FORMAT a45 +COLUMN index_name HEADING "Index Name" FORMAT a45 +COLUMN index_type HEADING "Index Type" FORMAT a10 TRUNC +COLUMN status HEADING "Status" FORMAT a8 +COLUMN visibility HEADING "Visible" FORMAT a10 +COLUMN uniqueness HEADING "Uniqueness" FORMAT a15 +COLUMN Columns HEADING "Index columns" FORMAT a90 + +BREAK ON TABLE_NAME + +select /*+ */ + i.table_owner || '.' || i.table_name table_name + , i.index_owner || '.' || i.index_name index_name + , i.uniqueness + , i.index_type + , i.status + , i.visibility + , SUBSTR(SYS_CONNECT_BY_PATH ( NVL(i.column_expression,i.column_name) || DECODE(i.descend,'ASC','',' DESC') , ', ' ),3) Columns +from + xmltable( '/ROWSET/ROW' + passing dbms_xmlgen.getXMLType(' + select i.table_owner + , i.table_name + , i.owner index_owner + , i.index_name + , i.status + , i.uniqueness + , i.index_type + , i.visibility + , ic.column_name + , ic.descend + , ic.column_position column_position + , ie.column_expression /* <---- Long Column type */ + , ie.column_position column_position_exp + FROM dba_indexes i + JOIN dba_ind_columns ic + ON i.owner = ic.index_owner + AND i.index_name = ic.index_name + AND i.table_owner = ic.table_owner + AND i.table_name = ic.table_name + LEFT OUTER JOIN dba_ind_expressions ie + ON ic.index_owner = ie.index_owner + AND ic.index_name = ie.index_name + AND ic.table_owner = ie.table_owner + AND ic.table_name = ie.table_name + AND ic.column_position = ie.column_position + WHERE 1=1 + AND i.table_owner LIKE upper(''&&owner'') ESCAPE ''\'' + AND i.table_name LIKE upper(''&&table_name'') ESCAPE ''\'' + ') + columns + table_owner varchar2(30) + , table_name varchar2(30) + , index_owner varchar2(30) + , index_name varchar2(30) + , status varchar2(30) + , uniqueness VARCHAR2(9) + , index_type VARCHAR2(27) + , visibility VARCHAR2(9) + , column_name varchar2(30) + , descend varchar2(30) + , column_position number + , column_expression varchar2(4000) + , column_position_exp number + ) i +WHERE 1=1 + AND CONNECT_BY_ISLEAF = 1 + AND LEVEL = NVL(i.column_position_exp,i.column_position) +CONNECT BY i.table_owner = PRIOR i.table_owner + AND i.table_name = PRIOR i.table_name + AND i.index_owner = PRIOR i.index_owner + AND i.index_name = PRIOR i.index_name + AND NVL(i.column_position_exp,i.column_position) - 1 = PRIOR NVL(i.column_position_exp,i.column_position) +ORDER BY i.table_owner + , i.table_name + , i.index_owner + , i.index_name +; + +/* +SELECT + 'SYS' || '.' || ic.table_name table_name + , 'SYS' || '.' || ic.index_name index_name + , i.uniqueness + , i.index_type + , i.status + , i.visibility +-- , column_name +-- , column_position +-- , CONNECT_BY_ISLEAF +-- , LEVEL + , SUBSTR(SYS_CONNECT_BY_PATH ( ic.column_name || DECODE(ic.descend,'ASC','',' (desc) ') , ' , ' ),4) Columns +FROM v$indexed_fixed_column ic +WHERE 'SYS' LIKE upper('&&owner') ESCAPE '\' + AND ic.table_name LIKE upper('&&table_name') ESCAPE '\' + AND CONNECT_BY_ISLEAF = 1 + AND LEVEL = ic.column_position +CONNECT BY ic.table_name = PRIOR ic.table_name + AND ic.index_number = PRIOR ic.index_number + AND ic.column_position - 1 = PRIOR ic.column_position +START WITH ic.table_name LIKE upper('&&table_name') ESCAPE '\' +ORDER BY ic.table_owner + , ic.table_name + , ic.index_owner + , i.uniqueness + , ic.index_name +; +*/ + + +@@footer diff --git a/vg/tab_modifications.sql b/vg/tab_modifications.sql new file mode 100644 index 0000000..0a17c7c --- /dev/null +++ b/vg/tab_modifications.sql @@ -0,0 +1,130 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display STALE Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart) +* Parameters : 1 - OWNER +* 2 - Table Name +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Mar-12 Vishal Gupta Intial version +* +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE partition_name="&&3" +DEFINE subpartition_name="&&4" +DEFINE object_type="&&5" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _partition_name NEW_VALUE partition_name NOPRINT +COLUMN _subpartition_name NEW_VALUE subpartition_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&partition_name','','%','&&partition_name') "_partition_name" + , DECODE('&&subpartition_name','','%','&&subpartition_name') "_subpartition_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" +FROM DUAL; +set term on + +PROMPT +PROMPT *************************************************** +PROMPT * Table Modifications +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Partition Name = '&&partition_name' +PROMPT * - SubPartition Name = '&&subpartition_name' +PROMPT * - Object Type = '&&object_type' +PROMPT *************************************************** +PROMPT + +COLUMN table_owner HEADING "Owner" FORMAT a20 +COLUMN table_name HEADING "TableName" FORMAT a60 +COLUMN partition_name HEADING "Partition" FORMAT a25 +COLUMN subpartition_name HEADING "Sub-Parition" FORMAT a25 +COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18 +COLUMN last_modification HEADING "LastModification" FORMAT a18 +COLUMN num_rows HEADING "NumberOfRows" FORMAT 999,999,999,999 +COLUMN percent_modification HEADING "Modification|(%)" FORMAT 999,999,999.99 +COLUMN modifications_total HEADING "Modification|Total|(#)" FORMAT 999,999,999,999 +COLUMN inserts HEADING "Inserts|(#)" FORMAT 99,999,999 +COLUMN updates HEADING "Updates|(#)" FORMAT 99,999,999 +COLUMN deletes HEADING "Deletes|(#)" FORMAT 999,999,999,999 +COLUMN truncated HEADING "Truncated" FORMAT a5 +COLUMN drop_segments HEADING "Drop|Segments|(#)" FORMAT 999 + + + +SELECT + m.table_owner || '.' || m.table_name + || NVL2(m.partition_name,':' || m.partition_name, '') + || NVL2(m.subpartition_name,':' || m.subpartition_name, '') + table_name + --m.table_owner + --, m.table_name + --, m.partition_name + --, m.subpartition_name + , TO_CHAR(NVL(s.last_analyzed,NVL(p.last_analyzed,t.last_analyzed)),'DD-MON-YY HH24:MI:SS') last_analyzed + , TO_CHAR(m.timestamp,'DD-MON-YY HH24:MI:SS') last_modification + , NVL(s.num_rows,NVL(p.num_rows,t.num_rows)) num_rows + , ROUND((m.inserts + m.updates + m.deletes) + / DECODE(NVL(s.num_rows,NVL(p.num_rows,NVL(t.num_rows,0))) + , 0 ,m.inserts + m.updates + m.deletes + , DECODE(NVL(s.num_rows,NVL(p.num_rows,NVL(t.num_rows,1))) + , 0 , 1 + , NVL(s.num_rows,NVL(p.num_rows,NVL(t.num_rows,1))) + ) + ) + * 100 + , 2) percent_modification + , m.inserts + m.updates + m.deletes modifications_total + , m.inserts + , m.updates + , m.deletes + , m.truncated + , m.drop_segments + FROM dba_tab_modifications m + LEFT OUTER JOIN dba_tables t ON t.owner = m.table_owner AND t.table_name = m.table_name + LEFT OUTER JOIN dba_tab_partitions p ON p.table_owner = m.table_owner AND p.table_name = m.table_name AND p.partition_name = m.partition_name + LEFT OUTER JOIN dba_tab_subpartitions s ON s.table_owner = m.table_owner AND s.table_name = m.table_name + AND s.partition_name = m.partition_name AND s.subpartition_name = m.subpartition_name +WHERE m.inserts + m.updates + m.deletes > 0 + AND m.table_owner LIKE '&&owner' + AND m.table_name LIKE '&&table_name' + AND NVL(m.partition_name,'%') LIKE '&&partition_name' --ESCAPE '\' + AND NVL(m.subpartition_name,'%') LIKE '&&subpartition_name' --ESCAPE '\' +ORDER BY percent_modification desc nulls last +; + + + +@@footer diff --git a/vg/tab_parts.sql b/vg/tab_parts.sql new file mode 100644 index 0000000..ef37dc5 --- /dev/null +++ b/vg/tab_parts.sql @@ -0,0 +1,205 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display table partitions and subpartitions +* Parameters : 1 - OWNER (% - wildchar, \ - escape char) +* 2 - Table Name (% - wildchar, \ - escape char) +* 3 - Partition Name (% - wildchar, \ - escape char) +* 4 - Sub-Partition Name (% - wildchar, \ - escape char) +* 5 - Object Type (% - wildchar, \ - escape char) +* 6 - Partition HighValue (% - wildchar, \ - escape char) +* 7 - Sub-Partition HighValue (% - wildchar, \ - escape char) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-Dec-16 Vishal Gupta Increased column size of partition_type +* 04-Jun-13 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_name +UNDEFINE subpartition_name +UNDEFINE object_type +UNDEFINE part_high_value +UNDEFINE subpart_high_value + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE partition_name="&&3" +DEFINE subpartition_name="&&4" +DEFINE object_type="&&5" +DEFINE part_high_value="&&6" +DEFINE subpart_high_value="&&7" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _partition_name NEW_VALUE partition_name NOPRINT +COLUMN _subpartition_name NEW_VALUE subpartition_name NOPRINT +COLUMN _object_type NEW_VALUE object_type NOPRINT +COLUMN _part_high_value NEW_VALUE part_high_value NOPRINT +COLUMN _subpart_high_value NEW_VALUE subpart_high_value NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE('&&partition_name','','%','&&partition_name') "_partition_name" + , DECODE('&&subpartition_name','','%','&&subpartition_name') "_subpartition_name" + , DECODE('&&object_type','','%','&&object_type') "_object_type" + , DECODE('&&part_high_value','','%','&&part_high_value') "_part_high_value" + , DECODE('&&subpart_high_value','','%','&&subpart_high_value') "_subpart_high_value" +FROM DUAL +; + +set term on + + +/***********************************/ + +PROMPT ***************************************************** +PROMPT * Table Partitions/Sub-Partitions +PROMPT * +PROMPT * Input Parameters +PROMPT * - Table Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Partition Name = '&&partition_name' +PROMPT * - SubPartition Name = '&&subpartition_name' +PROMPT * - Object Type = '&&object_type' +PROMPT * - Part HighValue = '&&part_high_value' +PROMPT * - SubPart HighValue = '&&subpart_high_value' +PROMPT ***************************************************** + +COLUMN table_name HEADING "Table Name" FORMAT a40 +COLUMN partitioning_type HEADING "Part|Type" FORMAT a9 +COLUMN partitioning_key_count HEADING "Part|Key|Count" FORMAT 99999 +COLUMN interval HEADING "Interval" FORMAT a30 +COLUMN subpartitioning_type HEADING "SubPart|Type" FORMAT a10 +COLUMN subpartitioning_key_count HEADING "SubPart|Key|Count" FORMAT 99999 +COLUMN def_subpartition_count HEADING "Default|Subpart|Count|PerPart" FORMAT 999 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN partition_count HEADING "Part|Count" FORMAT 999,999 +COLUMN subpartition_count HEADING "SubPart|Count" FORMAT 999,999 +COLUMN total_count HEADING "Total|Count" FORMAT 999,999 + + + +SELECT pt.owner || '.' || pt.table_name table_name + , pt.status + , pt.partitioning_type + , pt.partitioning_key_count + -- for interval RANGE partition, dba_part_tables.partition_count is always 1048575 + -- , so we need to take actual partition count from dba_tab_partitions + , count(distinct p.partition_name) partition_count + , pt.interval + , pt.subpartitioning_type + , pt.subpartitioning_key_count + , pt.def_subpartition_count + , count(s.subpartition_name) subpartition_count + , GREATEST(count(distinct p.partition_name) , count(s.subpartition_name)) total_count + FROM dba_part_tables pt + JOIN dba_tab_partitions p ON p.table_owner = pt.owner AND p.table_name = pt.table_name + LEFT OUTER JOIN dba_tab_subpartitions s ON s.table_owner = pt.owner AND s.table_name = pt.table_name AND p.partition_name = s.partition_name +WHERE 1=1 + AND pt.owner LIKE '&&owner' ESCAPE '\' + AND pt.table_name LIKE '&&table_name' ESCAPE '\' +GROUP BY + pt.owner + , pt.table_name + , pt.partitioning_type + , pt.interval + , pt.subpartitioning_type + , pt.def_subpartition_count + , pt.partitioning_key_count + , pt.subpartitioning_key_count + , pt.status +--ORDER BY total_count desc +ORDER BY pt.owner + , pt.table_name +; + +COLUMN partition_name HEADING "Table Name" FORMAT a40 +COLUMN partition_name HEADING "Partition Name" FORMAT a20 +COLUMN part_high_value HEADING "Partition HighValue" FORMAT a85 +COLUMN subpartition_name HEADING "SubPartition Name" FORMAT a30 +COLUMN subpart_high_value HEADING "SubPartition HighValue" FORMAT a40 +COLUMN partition_position NOPRINT +COLUMN subpartition_position NOPRINT + +select DISTINCT + table_owner + || '.' || table_name table_name + , partition_name + , partition_position + , part_high_value + , subpartition_count + , CASE '&&object_type' + WHEN '%' THEN subpartition_name + WHEN 'TABLE SUBPARTITION' THEN subpartition_name + ELSE ' ' + END subpartition_name + , subpartition_position + , CASE '&&object_type' + WHEN '%' THEN subpart_high_value + WHEN 'TABLE SUBPARTITION' THEN subpart_high_value + ELSE ' ' + END subpart_high_value +from + xmltable( '/ROWSET/ROW' + passing dbms_xmlgen.getXMLType(' + select p.table_owner + , p.table_name + , p.partition_name + , p.partition_position + , p.high_value part_high_value /* <---- Long Column type*/ + , p.subpartition_count + , s.subpartition_name + , s.subpartition_position + , s.high_value subpart_high_value /* <---- Long Column type*/ + from dba_tab_partitions p + LEFT OUTER JOIN dba_tab_subpartitions s + ON s.table_owner = p.table_owner + AND s.table_name = p.table_name + AND s.partition_name = p.partition_name + WHERE p.table_owner LIKE ''' || '&&owner' || ''' ESCAPE ''\'' + AND p.table_name LIKE ''' || '&&table_name' || ''' ESCAPE ''\'' + AND p.partition_name LIKE ''' || '&&partition_name' || ''' ESCAPE ''\'' + AND NVL(s.subpartition_name,''x'') LIKE ''' || '&&subpartition_name' || ''' ESCAPE ''\'' + ' + ) + columns + table_owner VARCHAR2(30) + , table_name VARCHAR2(30) + , partition_name VARCHAR2(30) + , partition_position NUMBER + , part_high_value VARCHAR2(4000) + , subpartition_count NUMBER + , subpartition_name VARCHAR2(30) + , subpartition_position NUMBER + , subpart_high_value VARCHAR2(4000) + ) +WHERE 1=1 + AND part_high_value LIKE '&&part_high_value' ESCAPE '\' + --AND NVL(subpart_high_value,'x') LIKE '&&subpart_high_value' ESCAPE '\' +ORDER BY table_name + , partition_position + , subpartition_position +; + + +@@footer diff --git a/vg/tab_parts_summary.sql b/vg/tab_parts_summary.sql new file mode 100644 index 0000000..19bcfe4 --- /dev/null +++ b/vg/tab_parts_summary.sql @@ -0,0 +1,124 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display table partitions summary +* Parameters : 1 - OWNER (% - wildchar, \ - escape char) +* 2 - Table Name (% - wildchar, \ - escape char) +* 3 - Partition Type (% - wildchar, \ - escape char) +* 4 - Sub-Partition Type (% - wildchar, \ - escape char) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 23-Dec-16 Vishal Gupta Increased column size of partition_type +* 04-Jun-13 Vishal Gupta Created +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE owner +UNDEFINE table_name +UNDEFINE partition_type +UNDEFINE subpartition_type + +DEFINE owner="&&1" +DEFINE table_name="&&2" +DEFINE partition_type="&&3" +DEFINE subpartition_type="&&4" + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _table_name NEW_VALUE table_name NOPRINT +COLUMN _partition_type NEW_VALUE partition_type NOPRINT +COLUMN _subpartition_type NEW_VALUE subpartition_type NOPRINT + +set term off +SELECT CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),1,INSTR('&&owner','.')-1) + ELSE DECODE(UPPER('&&owner'),'','%',UPPER('&&owner')) + END "_owner" + , CASE + WHEN INSTR('&&owner','.') != 0 THEN SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1) + ELSE DECODE(UPPER('&&table_name'),'','%',UPPER('&&table_name')) + END "_table_name" + , DECODE(UPPER('&&partition_type'),'','%',UPPER('&&partition_type')) "_partition_type" + , DECODE(UPPER('&&subpartition_type'),'','%',UPPER('&&subpartition_type')) "_subpartition_type" +FROM DUAL; +set term on +/***********************************/ + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +/***********************************/ + +PROMPT ***************************************************** +PROMPT * Table Partitions/Sub-Partitions +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - Table Name = '&&table_name' +PROMPT * - Partition Type = '&&partition_type' +PROMPT * - SubPartition Type = '&&subpartition_type' +PROMPT ***************************************************** + +COLUMN table_name HEADING "Table Name" FORMAT a40 +COLUMN partitioning_type HEADING "Part|Type" FORMAT a9 +COLUMN partitioning_key_count HEADING "Part|Key|Count" FORMAT 99999 +COLUMN interval HEADING "Interval" FORMAT a30 +COLUMN subpartitioning_type HEADING "SubPart|Type" FORMAT a10 +COLUMN subpartitioning_key_count HEADING "SubPart|Key|Count" FORMAT 99999 +COLUMN def_subpartition_count HEADING "Default|Subpart|Count|PerPart" FORMAT 999 +COLUMN status HEADING "Status" FORMAT a8 +COLUMN partition_count HEADING "Part|Count" FORMAT 999,999 +COLUMN subpartition_count HEADING "SubPart|Count" FORMAT 999,999 +COLUMN total_count HEADING "Total|Count" FORMAT 999,999 + + + +SELECT pt.owner || '.' || pt.table_name table_name + , pt.status + , NVL2(pt.interval,'INTERVAL',pt.partitioning_type) partitioning_type + , pt.partitioning_key_count + -- for interval RANGE partition, dba_part_tables.partition_count is always 1048575 + -- , so we need to take actual partition count from dba_tab_partitions + , count(distinct p.partition_name) partition_count + , pt.interval + , pt.subpartitioning_type + , pt.subpartitioning_key_count + , pt.def_subpartition_count + , count(s.subpartition_name) subpartition_count + , count(distinct p.partition_name) + count(s.subpartition_name) total_count + FROM dba_part_tables pt + JOIN dba_tab_partitions p ON p.table_owner = pt.owner AND p.table_name = pt.table_name + LEFT OUTER JOIN dba_tab_subpartitions s ON s.table_owner = pt.owner AND s.table_name = pt.table_name AND p.partition_name = s.partition_name +WHERE 1=1 + AND pt.owner LIKE '&&owner' ESCAPE '\' + AND pt.table_name LIKE '&&table_name' ESCAPE '\' + AND pt.partitioning_type LIKE '&&partition_type' ESCAPE '\' + AND pt.subpartitioning_type LIKE '&&subpartition_type' ESCAPE '\' +GROUP BY + pt.owner + , pt.table_name + , pt.partitioning_type + , pt.interval + , pt.subpartitioning_type + , pt.def_subpartition_count + , pt.partitioning_key_count + , pt.subpartitioning_key_count + , pt.status +--ORDER BY total_count desc +ORDER BY pt.owner + , pt.table_name +; + + +@@footer diff --git a/vg/table_no_index.sql b/vg/table_no_index.sql new file mode 100644 index 0000000..9c61f50 --- /dev/null +++ b/vg/table_no_index.sql @@ -0,0 +1,20 @@ + +set echo off +set feedback off +set linesize 512 + +prompt +prompt Tables with No Indexes +prompt + +break on OWNER skip 1 + +SELECT OWNER, TABLE_NAME + FROM ALL_TABLES + WHERE OWNER NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP') +MINUS +SELECT OWNER, TABLE_NAME + FROM ALL_INDEXES + WHERE OWNER NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP'); + + \ No newline at end of file diff --git a/vg/tbs.sql b/vg/tbs.sql new file mode 100644 index 0000000..e42f82c --- /dev/null +++ b/vg/tbs.sql @@ -0,0 +1,185 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage +* Parameters : 1 - tablespace_name (Use % as wildcard, Default value '%') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 14-Jul-15 Vishal Gupta Added tablespace creation_time (Approximated from earliest datafile time) +* 11-Mar-13 Vishal Gupta Fixed temp space calculations +* 02-Apr-12 Vishal Gupta Bug fixes +* 05-Aug-04 Vishal Gupta First Draft +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE tablespace_name +DEFINE tablespace_name="&&1" + +set term off +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT + +SELECT UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME" +FROM DUAL; +set term on + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_HEADING="KB" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="GB" +DEFINE BYTES_DIVIDER="1024/1024/1024" + +DEFINE ROUND_PRECISION=2 +DEFINE STAR=4 --Defines how much %usage is represented by one star on Graph + +set term off +SET FEED OFF +SELECT (100/&&STAR+2) UsageGraphWidth +FROM DUAL; +SET FEED ON +set term on + + +PROMPT ***************************************************************** +PROMPT * T A B L E S P A C E U S A G E R E P O R T +PROMPT * +PROMPT * Input Parameters +PROMPT * - Tablespace Name = '&&TABLESPACE_NAME' +PROMPT ***************************************************************** + + +COLUMN UsageGraphWidth NOPRINT old_value UGWidth +COLUMN tablespace_name FORMAT a23 +COLUMN creation_time HEADING "Creation Time" FORMAT a15 +COLUMN alloc HEADING "Alloc(&&BYTES_HEADING)" FORMAT 9,999,999 ON +COLUMN used HEADING "Used&&BYTES_HEADING)" FORMAT 9,999,999 ON +COLUMN free HEADING "Free|(&&BYTES_HEADING)" FORMAT 999,999 ON +COLUMN pct_Used HEADING "%Used" FORMAT 999 ON +COLUMN pct_Free HEADING "%Free" FORMAT 999 ON +COLUMN MAXSIZE HEADING "MaxSize|(&&BYTES_HEADING)" FORMAT 9,999,999 ON +COLUMN Maxfree HEADING "MaxFree|(&&BYTES_HEADING)" FORMAT 9,999,999 ON +COLUMN Max_pct_Used HEADING "MAX|%Used" FORMAT 999 ON +COLUMN Max_pct_Free HEADING "MAX|%Free" FORMAT 999 ON +COLUMN "Usage Graph" FORMAT a27 +COLUMN "MaxUsage Graph" FORMAT a27 + +BREAK ON REPORT + +COMPUTE SUM LABEL 'Total' OF alloc FORMAT 99,999,999 ON REPORT +COMPUTE SUM LABEL 'Total' OF used FORMAT 99,999,999.9 ON REPORT +COMPUTE SUM LABEL 'Total' OF free FORMAT 99,999,999.9 ON REPORT +COMPUTE SUM LABEL 'Total' OF maxsize FORMAT 9,999,999.9 ON REPORT +COMPUTE SUM LABEL 'Total' OF maxfree FORMAT 9,999,999.9 ON REPORT + +SELECT /*+ CHOOSE */ c.tablespace_name + , c.alloc + , c.used + , c.free + , c.pct_used + , c.pct_free + , '|' || RPAD(NVL(LPAD(' ',CEIL(NVL(c.pct_used,0)/&&STAR),'*'),' '),CEIL(100/&&STAR)) || '|' "Usage Graph" + , c.MAXSIZE + , c.maxfree + , c.max_pct_used + , c.max_pct_free + , '|' || RPAD(NVL(LPAD(' ',CEIL(NVL(c.max_pct_used,0)/&&STAR),'*'),' '),CEIL(100/&&STAR)) || '|' "MaxUsage Graph" + , TO_CHAR(c.creation_time,'DD-MON-YY HH24:MI') creation_time +FROM ( + SELECT /*+ CHOOSE */ a.tablespace_name + , c.creation_time + , ROUND(a.bytes_alloc / &&BYTES_DIVIDER, &&ROUND_PRECISION) alloc + , ROUND((a.bytes_alloc - NVL(b.bytes_free, 0)) / &&BYTES_DIVIDER, &&ROUND_PRECISION ) used + , ROUND(NVL(b.bytes_free, 0) / &&BYTES_DIVIDER, &&ROUND_PRECISION) free + , 100 - ROUND((NVL(b.bytes_free, 0) / a.bytes_alloc) * 100, &&ROUND_PRECISION) pct_Used + , ROUND((NVL(b.bytes_free, 0) / a.bytes_alloc) * 100, &&ROUND_PRECISION) pct_Free + , ROUND(a.maxbytes/ &&BYTES_DIVIDER, &&ROUND_PRECISION) MAXSIZE + , ROUND( (maxbytes - a.bytes_alloc + NVL(b.bytes_free, 0) ) / &&BYTES_DIVIDER , &&ROUND_PRECISION) Maxfree + , ROUND(((a.bytes_alloc - NVL(b.bytes_free, 0)) / a.maxbytes) * 100, &&ROUND_PRECISION) Max_pct_Used + , ROUND( ((a.maxbytes - a.bytes_alloc + NVL(b.bytes_free, 0) ) / a.maxbytes) * 100, &&ROUND_PRECISION) Max_pct_Free + FROM ( SELECT /*+ CHOOSE */ + f.tablespace_name + , SUM(f.bytes) bytes_alloc + , SUM(DECODE(f.autoextensible, 'YES',GREATEST(f.maxbytes,f.bytes),'NO', f.bytes)) maxbytes + FROM DBA_DATA_FILES f + WHERE f.tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + ) a + , ( SELECT /*+ CHOOSE */ + f.tablespace_name + , SUM(f.bytes) bytes_free + FROM DBA_FREE_SPACE f + WHERE f.tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + ) b + , (SELECT t.name tablespace_name, min(creation_time) creation_time + FROM v$tablespace t , v$datafile f + WHERE t.ts# = f.ts# + GROUP BY t.name) c + WHERE a.tablespace_name = b.tablespace_name (+) + AND a.tablespace_name = c.tablespace_name (+) + UNION ALL + SELECT /*+ CHOOSE */ + ts.tablespace_name + , c.creation_time + --, ROUND((ts.bytes_used + ts.bytes_free) / &&BYTES_DIVIDER , &&ROUND_PRECISION) alloc + , ROUND( tf.bytes / &&BYTES_DIVIDER , &&ROUND_PRECISION) alloc + , ROUND((ts.bytes_used - ss.free_bytes) / &&BYTES_DIVIDER , &&ROUND_PRECISION) used + , ROUND(((ts.bytes_free) + ss.free_bytes ) / &&BYTES_DIVIDER , &&ROUND_PRECISION) free + , ROUND(((ts.bytes_used - ss.free_bytes ) / (ts.bytes_used + ts.bytes_free)) + * 100, &&ROUND_PRECISION) pct_Used + , 100 - ROUND(((ts.bytes_used - ss.free_bytes) / (ts.bytes_used + ts.bytes_free)) * 100, &&ROUND_PRECISION) pct_Free + , ROUND( tf.max_bytes / &&BYTES_DIVIDER , &&ROUND_PRECISION) MaxSize + , ROUND( ((ts.bytes_free) + ss.free_bytes + (tf.max_bytes - (ts.bytes_used + ts.bytes_free) ) + ) / &&BYTES_DIVIDER , &&ROUND_PRECISION) Maxfree + , ROUND( ( (ts.bytes_used - ss.free_bytes )/tf.max_bytes) * 100, &&ROUND_PRECISION) Max_pct_Used + , 100 - ROUND( ((ts.bytes_used - ss.free_bytes ) /tf.max_bytes )* 100, &&ROUND_PRECISION ) Max_pct_Free + FROM (SELECT tablespace_name + , sum(bytes_used) bytes_used + , sum(bytes_free) bytes_free + FROM v$temp_space_header + WHERE tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + ) ts + , (SELECT tablespace_name + , SUM(bytes) bytes + , SUM(DECODE(autoextensible, 'YES',GREATEST(maxbytes,bytes),'NO', bytes)) max_bytes + FROM dba_temp_files + WHERE tablespace_name LIKE '&&tablespace_name' + GROUP BY tablespace_name + ) tf + , (SELECT ss.tablespace_name + , sum(ss.free_blocks * t.block_size) free_bytes + FROM gv$sort_segment ss + , dba_tablespaces t + WHERE ss.tablespace_name = t.tablespace_name + AND ss.tablespace_name LIKE '&&tablespace_name' + GROUP BY ss.tablespace_name + ) ss + , dba_tablespaces t + , (SELECT t.name tablespace_name, min(creation_time) creation_time + FROM v$tablespace t , v$tempfile f + WHERE t.ts# = f.ts# + GROUP BY t.name) c + WHERE t.tablespace_name = ts.tablespace_name + AND t.tablespace_name = tf.tablespace_name + AND t.tablespace_name = ss.tablespace_name (+) + AND t.tablespace_name = c.tablespace_name (+) + AND t.tablespace_name LIKE '&&tablespace_name' +) c +ORDER BY 1 asc; + +UNDEFINE tablespace_name + +@@footer diff --git a/vg/tbs_file.sql b/vg/tbs_file.sql new file mode 100644 index 0000000..97ceded --- /dev/null +++ b/vg/tbs_file.sql @@ -0,0 +1,141 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display datafile usage information +* Parameters : 1 - Tablespace Name (Use '%' as wildcard, Default is %) +* 2 - File ID (Use '%' as wildcard, Default is %) +* 3 - File Name (Use '%' as wildcard, Default is %) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 06-Jan-16 Vishal Gupta Increase file_name column width +* 06-Jul-15 Vishal Gupta Upper case input tablespace_name parameter value +* 08-Apr-13 Vishal Gupta Fixed increment_by column calculation to multiply +* number of blocks by tablespace blocks size. +* 05-Aug-04 Vishal Gupta Added file_id as input parameter +* 05-Aug-04 Vishal Gupta Created +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE tablespace_name +UNDEFINE file_id + +DEFINE tablespace_name="&&1" +DEFINE file_id="&&2" +DEFINE file_name="&&3" + +set term off +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT +COLUMN _file_id NEW_VALUE file_id NOPRINT +COLUMN _file_name NEW_VALUE file_name NOPRINT +SELECT UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME" + , DECODE('&&file_id','','%','&&file_id') "_file_id" + , DECODE('&&file_name','','%','&&file_name') "_file_name" +FROM DUAL +; + +set term on + +PROMPT ******************************************* +PROMPT F I L E S U S A G E R E P O R T +PROMPT +PROMPT Input Parameters +PROMPT Tablespace Name = '&&tablespace_name' +PROMPT File Id = '&&file_id' +PROMPT File Name = '&&file_name' +PROMPT ******************************************* + +COLUMN tablespace FORMAT a22 +COLUMN alloc HEADING "Alloc|MB" FORMAT 9,999,999 +COLUMN maxsize HEADING "MaxSize|MB" FORMAT 999,999 +COLUMN hwm HEADING "HWM|MB" FORMAT 999,999 +COLUMN used HEADING "Used|MB" FORMAT 999,999 +COLUMN free HEADING "Free|MB" FORMAT 999,999 +COLUMN freeable HEADING "FreeAble|MB" FORMAT 999,999 +COLUMN initial_extent HEADING "InitExt|MB" FORMAT 9,999 +COLUMN increment_by HEADING "IncBy|MB" FORMAT 9,999 +COLUMN min_extents HEADING "MinExts" FORMAT 999 +COLUMN max_extents HEADING "MaxExts" FORMAT 99,999 +COLUMN pct_increase HEADING "%Inc" FORMAT 999 +COLUMN file_id HEADING "F#" FORMAT 9999 +COLUMN file_name HEADING "Datafile name" FORMAT a95 + +BREAK ON report +COMPUTE SUM LABEL 'Total' OF alloc FORMAT 99,999 ON report +COMPUTE SUM LABEL 'Total' OF used FORMAT 99,999 ON report +COMPUTE SUM LABEL 'Total' OF hwm FORMAT 99,999 ON report +COMPUTE SUM LABEL 'Total' OF free FORMAT 99,999 ON report +COMPUTE SUM LABEL 'Total' OF freeable FORMAT 99,999 ON report + + +select /*+ CHOOSE */ * from +( +Select /*+ CHOOSE */ t.tablespace_name + , d.status "Status" + , GREATEST(d.maxbytes,d.bytes)/1024/1024 maxsize + , d.bytes/1024/1024 alloc + , NVL((hwm.bytes)/1024/1024,0) HWM + , ROUND((d.bytes - NVL(f.bytes,0))/1024/1024,2) used + , ROUND(decode(f.bytes, NULL,0, f.bytes)/1024/1024,2) free + , ROUND( (d.bytes - GREATEST( NVL(hwm.bytes,0), (d.bytes - NVL(f.bytes,0)) ) ) /1024/1024,2) freeable + , d.INCREMENT_BY * t.block_size/1024/1024 Increment_by + , t.pct_increase pct_increase + , d.file_id + , SUBSTR(d.file_name,1,80) file_name +FROM DBA_DATA_FILES d , DBA_TABLESPACES t + , (SELECT /*+ CHOOSE */ tablespace_name + , file_id + , sum(bytes) bytes + FROM DBA_FREE_SPACE f + WHERE tablespace_name LIKE '&&tablespace_name' + AND file_id LIKE '&&file_id' + GROUP BY tablespace_name, file_id) f + , (Select /*+ CHOOSE */ file_id, + NVL( max((block_id + blocks - 1 ) * p.value),0) bytes + from dba_extents + , v$system_parameter p + WHERE tablespace_name LIKE '&&tablespace_name' + AND p.name = 'db_block_size' + AND file_id LIKE '&&file_id' + GROUP BY file_id + ) hwm +WHERE t.tablespace_name = d.tablespace_name + AND f.tablespace_name(+) = d.tablespace_name + AND f.file_id(+) = d.file_id + AND hwm.file_id(+) = d.file_id + AND d.tablespace_name LIKE '&&tablespace_name' + AND d.file_id LIKE '&&file_id' + AND d.file_name LIKE '&&file_name' +UNION ALL +SELECT /*+ CHOOSE */ tf.tablespace_name + , tf.status + , GREATEST(tf.maxbytes,tf.bytes)/1024/1024 maxsize + , (tf.bytes/1024/1024) alloc + , (tf.bytes/1024/1024) HWM + , ROUND(ts.bytes_used/1024/1024) used + , ROUND(ts.bytes_free/1024/1024) free + , ROUND((tf.bytes - tf.bytes)/1024/1024,2) freeable + , tf.INCREMENT_BY * t.block_size/1024/1024 Increment_by + , 0 pct_increase + , tf.file_id + , SUBSTR(tf.file_name,1,80) file_name + FROM dba_temp_files tf, V$TEMP_SPACE_HEADER ts, dba_tablespaces t + WHERE ts.tablespace_name = t.tablespace_name + AND ts.file_id = tf.file_id + and ts.tablespace_name LIKE '&&tablespace_name' + AND tf.file_id LIKE '&&file_id' + AND tf.file_name LIKE '&&file_name' +) c +ORDER BY c.tablespace_name,c.file_id asc; + + + +@@footer + diff --git a/vg/tbs_file_withouthwm.sql b/vg/tbs_file_withouthwm.sql new file mode 100644 index 0000000..003d230 --- /dev/null +++ b/vg/tbs_file_withouthwm.sql @@ -0,0 +1,103 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display datafile usage information (without high water mark) +* Currently as of upto 10.2.0.3 there is bug (5029334) which slows down queries +* on dba_extents view for locally managed tablespaces. +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 06-Jul-15 Vishal Gupta Upper case input tablespace_name parameter value +* 05-Aug-04 Vishal Gupta First Draft +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE tablespace_name="&&1" + +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT + +set term off +SELECT UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME" +FROM DUAL; +set term on + + + + +PROMPT ******************************************* +PROMPT F I L E S U S A G E R E P O R T +PROMPT ******************************************* + +COLUMN tablespace FORMAT a22 +COLUMN alloc HEADING "Alloc|MB" FORMAT 999,999 +COLUMN maxsize HEADING "MaxSize|MB" FORMAT 999,999 +COLUMN hwm HEADING "HWM|MB" FORMAT 999,999 +COLUMN used HEADING "Used|MB" FORMAT 999,999 +COLUMN free HEADING "Free|MB" FORMAT 99,999 +COLUMN freeable HEADING "FreeAble|MB" FORMAT 99,999 +COLUMN initial_extent HEADING "InitExt|MB" FORMAT 9,999 +COLUMN increment_by HEADING "IncBy|MB" FORMAT 9,999 +COLUMN min_extents HEADING "MinExts" FORMAT 999 +COLUMN max_extents HEADING "MaxExts" FORMAT 99,999 +COLUMN pct_increase HEADING "%Inc" FORMAT 999 +COLUMN file_id HEADING "F#" FORMAT 999 +COLUMN file_name HEADING "Datafile name" FORMAT a60 + +BREAK ON report +COMPUTE SUM LABEL 'Total' OF alloc FORMAT 99,999 ON report +COMPUTE SUM LABEL 'Total' OF used FORMAT 99,999 ON report +COMPUTE SUM LABEL 'Total' OF hwm FORMAT 99,999 ON report +COMPUTE SUM LABEL 'Total' OF free FORMAT 99,999 ON report + + +select * from +( +Select /*+ RULE*/ t.tablespace_name + , d.status "Status" + , GREATEST(d.maxbytes,d.bytes)/1024/1024 maxsize + , d.bytes/1024/1024 alloc + , ROUND((d.bytes)/1024/1024 - (decode(f.bytes, NULL,0, f.bytes)/1024/1024),2) used + , ROUND(decode(f.bytes, NULL,0, f.bytes)/1024/1024,2) free + , d.INCREMENT_BY/1024/1024 Increment_by + , t.pct_increase pct_increase + , d.file_id + , SUBSTR(d.file_name,1,80) file_name +FROM DBA_DATA_FILES d , DBA_TABLESPACES t + , (SELECT tablespace_name + , file_id + , sum(bytes) bytes + FROM DBA_FREE_SPACE f + WHERE tablespace_name LIKE '%&&tablespace_name%' + GROUP BY tablespace_name, file_id) f +WHERE t.tablespace_name = d.tablespace_name + AND f.tablespace_name(+) = d.tablespace_name + AND f.file_id(+) = d.file_id + AND d.tablespace_name LIKE '%&&tablespace_name%' +UNION ALL +SELECT tf.tablespace_name + , tf.status + , GREATEST(tf.maxbytes,tf.bytes)/1024/1024 maxsize + , (tf.bytes/1024/1024) alloc + , ROUND(ts.bytes_used/1024/1024) used + , ROUND(ts.bytes_free/1024/1024) free + , tf.INCREMENT_BY/1024/1024 Increment_by + , 0 pct_increase + , tf.file_id + , SUBSTR(tf.file_name,1,80) file_name + FROM dba_temp_files tf, sys.V_$TEMP_SPACE_HEADER ts + WHERE ts.file_id = tf.file_id + and ts.tablespace_name LIKE '%&&tablespace_name%' +) c +ORDER BY c.tablespace_name,c.file_id asc; + +undefine tablespace_name + +@@footer + diff --git a/vg/tbs_groups.sql b/vg/tbs_groups.sql new file mode 100644 index 0000000..eea53b5 --- /dev/null +++ b/vg/tbs_groups.sql @@ -0,0 +1,58 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Tablespace usage +* Parameters : 1 - group_name (Use % as wildcard, Default value '%') +* 2 - tablespace_name (Use % as wildcard, Default value '%') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 24-Jun-16 Vishal Gupta Created +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE group_name +UNDEFINE tablespace_name +DEFINE group_name="&&1" +DEFINE tablespace_name="&&2" + +set term off +COLUMN _group_name NEW_VALUE group_name NOPRINT +COLUMN _TABLESPACE_NAME NEW_VALUE TABLESPACE_NAME NOPRINT + +SELECT UPPER(DECODE('&&group_name' ,'','%','&&group_name')) "_group_name" + , UPPER(DECODE('&&TABLESPACE_NAME','','%','&&TABLESPACE_NAME')) "_TABLESPACE_NAME" +FROM DUAL; +set term on + + + +PROMPT ***************************************************************** +PROMPT * Tablespace Groups +PROMPT * +PROMPT * Input Parameters +PROMPT * - Group Name = '&&group_name' +PROMPT * - Tablespace Name = '&&TABLESPACE_NAME' +PROMPT ***************************************************************** + +COLUMN group_name HEADING "GroupName" FORMAT a30 +COLUMN tablespace_name HEADING "TablespaceName" FORMAT a30 + +BREAK ON REPORT ON group_name + +SELECT group_name + , tablespace_name + FROM dba_tablespace_groups + WHERE group_name like '&&group_name' + AND tablespace_name like '&&tablespace_name' +ORDER BY group_name + , tablespace_name +; + +@@footer diff --git a/vg/tbs_space_usage.sql b/vg/tbs_space_usage.sql new file mode 100644 index 0000000..3c856aa --- /dev/null +++ b/vg/tbs_space_usage.sql @@ -0,0 +1,76 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display tablespace usage by schema +* Compatibility : +* Parameters : 1 - tablespace_name (% - wildchar, \ - escape char) +* 2 - owner (% - wildchar, \ - escape char) +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------------------- +* 24-Jul-15 Vishal Gupta Split original schema_size.sql +* into schema_size.sql and schema_size_details.sql +* 23-May-13 Vishal Gupta Created +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE tablespace_name +UNDEFINE owner +UNDEFINE WHERECLAUSE + +DEFINE tablespace_name="&&1" +DEFINE owner="&&2" +DEFINE WHERECLAUSE="&&3" + + +COLUMN _tablespace_name NEW_VALUE tablespace_name NOPRINT +COLUMN _owner NEW_VALUE owner NOPRINT + +set term off + +SELECT UPPER(DECODE('&&tablespace_name','','%','&&tablespace_name')) "_tablespace_name" + , UPPER(DECODE('&&owner','','%','&&owner')) "_owner" +FROM DUAL; + +set term on + + +PROMPT ************************************************** +PROMPT * Schema Sizes +PROMPT * +PROMPT * Input Parameter +PROMPT * - Tablespace = '&&tablespace_name' +PROMPT * - Owner = '&&owner' +PROMPT * - Where Clause = '&&WHERECLAUSE' +PROMPT ************************************************** +PROMPT + +COLUMN tablespace_name HEADING "Tablespace" FORMAT a30 +COLUMN owner HEADING "SchemaOwner" FORMAT a30 +COLUMN total_size HEADING "Size (MB)" FORMAT 999,999,999 JUSTIFY RIGHT + +select tablespace_name + , owner + , ROUND(SUM(bytes)/power(1024,2)) total_size +from dba_segments s +where 1=1 + AND s.tablespace_name LIKE '&&tablespace_name' + AND s.owner LIKE '&&OWNER' + &&WHERECLAUSE +GROUP BY tablespace_name + , owner +order by total_size desc +; + + + +@@footer diff --git a/vg/tempusage.sql b/vg/tempusage.sql new file mode 100644 index 0000000..7b6a62d --- /dev/null +++ b/vg/tempusage.sql @@ -0,0 +1,79 @@ +@@header +SET echo off +set term off +/* +* +* Author : Vishal Gupta +* Purpose : Display temporary space usage +* Compability : 10.x, 11.x +* Parameters : None +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 26-May-11 Vishal Gupta Initial Version +*/ +set term on +SET lines 10000 + +DEFINE topsessioncount=30 + +COLUMN MB FORMAT 99,999 +COLUMN "SID,SER#,@INST" FORMAT a15 + +COLUMN extents FORMAT 9999 ON +COLUMN segtype FORMAT a9 ON +COLUMN tablespace FORMAT a20 ON +COLUMN inst_id HEADING "Inst" FORMAT 99 ON +COLUMN sid FORMAT 9999 ON +COLUMN serial# FORMAT 99999 ON +COLUMN logon_time FORMAT a15 ON +COLUMN status FORMAT a10 ON +COLUMN spid FORMAT a5 ON +COLUMN username FORMAT a20 ON +COLUMN machine FORMAT a20 ON +COLUMN program FORMAT a20 ON TRUNCATE +COLUMN osuser FORMAT a20 ON TRUNCATE + + +PROMPT +PROMPT ###### TOP &topsessioncount Temporary Segments (Ordered by Size) ########## + +SELECT * +FROM +( + SELECT SUM(t.blocks * p.value)/1024/1024 MB + , t.tablespace + , t.segtype + , s.inst_id + , s.sid + , s.serial# +-- , s.sid || ',' || s.serial# || ',@' || s.inst_id As "SID,SER#,@INST" + , s.username + , s.osuser + , s.program + , s.sql_id + FROM gv$tempseg_usage t + , gv$session s + , v$system_parameter p + WHERE t.inst_id = s.inst_id + AND t.session_addr = s.saddr + AND t.session_num = s.serial# + AND p.name = 'db_block_size' + GROUP BY t.tablespace + , t.segtype + , s.inst_id + , s.sid + , s.serial# +-- , s.sid || ',' || s.serial# || ',@' || s.inst_id + , s.username + , s.osuser + , s.program + , s.sql_id + ORDER BY 1 +) +WHERE ROWNUM <= &topsessioncount +; + +@@footer diff --git a/vg/test_case_data_types.txt b/vg/test_case_data_types.txt new file mode 100644 index 0000000..a0b892c --- /dev/null +++ b/vg/test_case_data_types.txt @@ -0,0 +1,197 @@ + +/* +* +* Author : Vishal Gupta +* Purpose : Oracle Data Type test case +* Descrption : Test case to test the size of various data types. +* Parameters : None +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 01-Sep-15 Vishal Gupta Created +* +* +*/ + + +------------------------------------------------------------------------------------------------------------ +-- Number data types +-- NUMBER [ (p [, s]) ] - Number having precision p and scale s. +-- The precision p can range from 1 to 38. The scale s can range from -84 to 127. +-- Both precision and scale are in decimal digits. A NUMBER value requires from 1 to 22 bytes. +------------------------------------------------------------------------------------------------------------ + +drop table vg_number_types purge; + +---------------------------------------------- +-- Create table +---------------------------------------------- +DECLARE + lv_sqltext VARCHAR2(32565); +BEGIN + lv_sqltext := 'create table vg_number_types (col_number number'; + for p in 1 .. 38 + LOOP + FOR s in 0 .. LEAST(p,25) + LOOP + lv_sqltext := lv_sqltext || ',col_number_' || p || '_' || s || ' number(' || p || ',' || s || ')'; + END LOOP; + END LOOP; + lv_sqltext := lv_sqltext || ')'; + execute immediate lv_sqltext; +END; +/ + +desc vg_number_types; + +---------------------------------------------- +-- Populate table +---------------------------------------------- +set serveroutput on +DECLARE + lv_sqltext VARCHAR2(32565); +BEGIN + execute immediate 'truncate table vg_number_types'; + insert into vg_number_types (col_number ) values(1/3); + commit; + for p in 1 .. 38 + LOOP + FOR s in 0 .. LEAST(p,25) + LOOP + lv_sqltext := 'update vg_number_types set col_number_' || p || '_' || s || ' = power(10,' || TO_CHAR((p-s)-1) || ') + TRUNC(1/3,' || LEAST(s,p) || ') '; + dbms_output.put_line(lv_sqltext); + execute immediate lv_sqltext; + commit; + END LOOP; + END LOOP; +END; +/ + + +---------------------------------------------- +-- Fetch Column Length +---------------------------------------------- +set serveroutput on +DECLARE + lv_column_name VARCHAR2(30); + lv_column_length VARCHAR2(30); + lv_sqltext VARCHAR2(32565); +BEGIN + for p in 1 .. 38 + LOOP + FOR s in 0 .. LEAST(p,25) + LOOP + lv_column_name := 'col_number_' || p || '_' || s ; + lv_sqltext := 'SELECT VSIZE(' || lv_column_name || ') FROM vg_number_types ' ; + execute immediate lv_sqltext INTO lv_column_length ; + dbms_output.put_line('NUMBER(' || p || ',' || s || ')' || ' : Length = ' || lv_column_length || ' bytes'); + END LOOP; + END LOOP; +END; +/ + + +---------------------------------------------- +-- Date and Timestamp data types +---------------------------------------------- +drop table vg_date_timestamp_types purge; + +create table vg_date_timestamp_types +( + col_date date + ,col_timestamp_0 timestamp(0) + ,col_timestamp_1 timestamp(1) + ,col_timestamp_2 timestamp(2) + ,col_timestamp_3 timestamp(3) + ,col_timestamp_4 timestamp(4) + ,col_timestamp_5 timestamp(5) + ,col_timestamp_6 timestamp(6) -- default for timestamp + ,col_timestamp_7 timestamp(7) + ,col_timestamp_8 timestamp(8) + ,col_timestamp_9 timestamp(9) + ,col_timestamp_0_with_tz timestamp(0) WITH TIME ZONE + ,col_timestamp_1_with_tz timestamp(1) WITH TIME ZONE + ,col_timestamp_2_with_tz timestamp(2) WITH TIME ZONE + ,col_timestamp_3_with_tz timestamp(3) WITH TIME ZONE + ,col_timestamp_4_with_tz timestamp(4) WITH TIME ZONE + ,col_timestamp_5_with_tz timestamp(5) WITH TIME ZONE + ,col_timestamp_6_with_tz timestamp(6) WITH TIME ZONE -- default for timestamp + ,col_timestamp_7_with_tz timestamp(7) WITH TIME ZONE + ,col_timestamp_8_with_tz timestamp(8) WITH TIME ZONE + ,col_timestamp_9_with_tz timestamp(9) WITH TIME ZONE + ,col_timestamp_0_with_ltz timestamp(0) WITH LOCAL TIME ZONE + ,col_timestamp_1_with_ltz timestamp(1) WITH LOCAL TIME ZONE + ,col_timestamp_2_with_ltz timestamp(2) WITH LOCAL TIME ZONE + ,col_timestamp_3_with_ltz timestamp(3) WITH LOCAL TIME ZONE + ,col_timestamp_4_with_ltz timestamp(4) WITH LOCAL TIME ZONE + ,col_timestamp_5_with_ltz timestamp(5) WITH LOCAL TIME ZONE + ,col_timestamp_6_with_ltz timestamp(6) WITH LOCAL TIME ZONE -- default for timestamp + ,col_timestamp_7_with_ltz timestamp(7) WITH LOCAL TIME ZONE + ,col_timestamp_8_with_ltz timestamp(8) WITH LOCAL TIME ZONE + ,col_timestamp_9_with_ltz timestamp(9) WITH LOCAL TIME ZONE +) +; + + +insert into vg_date_timestamp_types +( + col_date + , col_timestamp_0 ,col_timestamp_1 ,col_timestamp_2 ,col_timestamp_3 ,col_timestamp_4 ,col_timestamp_5 ,col_timestamp_6 ,col_timestamp_7 ,col_timestamp_8 ,col_timestamp_9 + , col_timestamp_0_with_tz ,col_timestamp_1_with_tz ,col_timestamp_2_with_tz ,col_timestamp_3_with_tz + , col_timestamp_4_with_tz ,col_timestamp_5_with_tz ,col_timestamp_6_with_tz + , col_timestamp_7_with_tz ,col_timestamp_8_with_tz ,col_timestamp_9_with_tz + , col_timestamp_0_with_ltz ,col_timestamp_1_with_ltz ,col_timestamp_2_with_ltz ,col_timestamp_3_with_ltz + , col_timestamp_4_with_ltz ,col_timestamp_5_with_ltz ,col_timestamp_6_with_ltz ,col_timestamp_7_with_ltz + , col_timestamp_8_with_ltz ,col_timestamp_9_with_ltz +) +values +(sysdate +,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp +,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp +,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp,systimestamp +); + +commit; + +SELECT VSIZE(col_date) + , VSIZE(col_timestamp_0) + , VSIZE(col_timestamp_1) + , VSIZE(col_timestamp_2) + , VSIZE(col_timestamp_3) + , VSIZE(col_timestamp_4) + , VSIZE(col_timestamp_5) + , VSIZE(col_timestamp_6) + , VSIZE(col_timestamp_7) + , VSIZE(col_timestamp_8) + , VSIZE(col_timestamp_9) +from vg_date_timestamp_types +; + +SELECT VSIZE(col_timestamp_0_with_tz) + , VSIZE(col_timestamp_1_with_tz) + , VSIZE(col_timestamp_2_with_tz) + , VSIZE(col_timestamp_3_with_tz) + , VSIZE(col_timestamp_4_with_tz) + , VSIZE(col_timestamp_5_with_tz) + , VSIZE(col_timestamp_6_with_tz) + , VSIZE(col_timestamp_7_with_tz) + , VSIZE(col_timestamp_8_with_tz) + , VSIZE(col_timestamp_9_with_tz) +from vg_date_timestamp_types +; + +SELECT VSIZE(col_timestamp_0_with_ltz) + , VSIZE(col_timestamp_1_with_ltz) + , VSIZE(col_timestamp_2_with_ltz) + , VSIZE(col_timestamp_3_with_ltz) + , VSIZE(col_timestamp_4_with_ltz) + , VSIZE(col_timestamp_5_with_ltz) + , VSIZE(col_timestamp_6_with_ltz) + , VSIZE(col_timestamp_7_with_ltz) + , VSIZE(col_timestamp_8_with_ltz) + , VSIZE(col_timestamp_9_with_ltz) +from vg_date_timestamp_types +; diff --git a/vg/top_service_by_statname.sql b/vg/top_service_by_statname.sql new file mode 100644 index 0000000..eccc831 --- /dev/null +++ b/vg/top_service_by_statname.sql @@ -0,0 +1,140 @@ +@@header + +PROMPT +PROMPT ********************************************************************************** +PROMPT * INCOMPLETE +PROMPT ********************************************************************************** + +/* +* +* Author : Vishal Gupta +* Purpose : Display top session by statname +* Usage : @ [] +* Parameters : 1 - Instance Number (Use % as wildcard) +* 2 - Number of top record counts +* 3 - Statname (Use % as wildcard, double quotes for spaces. +* 4 - Where clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 11-Sep-07 Vishal Gupta First cut +* 27-Mar-12 Vishal Gupta Modified to take instance_id as input parameter to +* give ability to give topsession at instance level. +* 15-Jun-12 Vishal Gupta Added last_call_et to output +* 22-Jun-12 Vishal Gupta Change parameter order to be in line with other scripts. +* +*/ + +set lines 3000 + +/************************************ +* INPUT PARAMETERS +************************************/ + +DEFINE inst_id="&&1" +DEFINE toprecordcount="&&2" +DEFINE statname="&&3" +DEFINE whereclause="&&4" + + + +COLUMN _inst_id NEW_VALUE inst_id NOPRINT +COLUMN _toprecordcount NEW_VALUE toprecordcount NOPRINT +COLUMN _statname NEW_VALUE statname NOPRINT +COLUMN _whereclause NEW_VALUE whereclause NOPRINT + +set term off +SELECT DECODE('&&inst_id','','%','&&inst_id') "_inst_id" + , DECODE('&&toprecordcount','','10','&&toprecordcount') "_toprecordcount" +-- , DECODE('&&whereclause','','AND s.type <> ''BACKGROUND'' ','&&whereclause') "_whereclause" +FROM DUAL; +set term on + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +--DEFINE SHOW_BACKGROUND_PROCESSES='Y' +DEFINE SHOW_BACKGROUND_PROCESSES='N' + +DEFINE COUNT_FORMAT=999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + + +PROMPT +PROMPT ********************************************************************************** +PROMPT * Top &toprecordcount Services by Statistic - "&&statname" +PROMPT * +PROMPT * Input Parameters +PROMPT * - Instance Number = '&&INST_ID' +PROMPT * - Top row count = '&&toprecordcount' +PROMPT * - Statistic Name = '&&statname' +PROMPT * - Where Clause = "&&whereclause" +PROMPT ********************************************************************************** + +COLUMN name HEADING "Statistic Name" FORMAT a30 TRUNCATE +COLUMN value HEADING "Value" FORMAT 99,999,999,999,999 +COLUMN "%age" HEADING "%age" FORMAT 999.00 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN sid HEADING "SID" FORMAT 9999 +COLUMN sess HEADING "Session" FORMAT a15 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN last_call_et HEADING "LastCall" FORMAT a12 JUSTIFY RIGHT +COLUMN logon_time HEADING "Logon Time" FORMAT a20 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN service_name HEADING "ServiceName" FORMAT a25 +COLUMN osuser HEADING "OS User" FORMAT a20 TRUNCATE +COLUMN program HEADING "Program" FORMAT a20 TRUNCATE +COLUMN machine HEADING "Machine" FORMAT a20 TRUNCATE + +SELECT * +FROM + (SELECT a.service_name + , a.VALUE + , ROUND((a.VALUE / b.total_value) *100, 2) "%age" + FROM (SELECT ss.service_name + , SUM(ss.VALUE) value + FROM gv$service_stats ss + WHERE ss.inst_id LIKE '&&inst_id' + AND LOWER(ss.stat_name) LIKE LOWER('&&statname') + &&whereclause + GROUP BY ss.service_name + ) a + , (SELECT SUM(ss.VALUE) total_value + FROM gv$service_stats ss + WHERE ss.inst_id LIKE '&&inst_id' + AND LOWER(ss.stat_name) LIKE LOWER( '&&statname' ) + &&whereclause + ) b + --WHERE a.service_name = b.service_name + ORDER BY a.VALUE DESC +) +WHERE rownum <= &&toprecordcount +; + +UNDEFINE inst_id +UNDEFINE toprecordcount +UNDEFINE statname +UNDEFINE whereclause + +@@footer diff --git a/vg/top_session_by_all.sql b/vg/top_session_by_all.sql new file mode 100644 index 0000000..d845d8f --- /dev/null +++ b/vg/top_session_by_all.sql @@ -0,0 +1,64 @@ +set echo off +set feed off +set verify off +-- No header and footer needed, as its just a wrapper script giving call to other scripts +-- @@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top session by various statistics +* Version : 10.1 and above +* Parameters : 1 - Instance Number (Use % as wildcard) +* 2 - Number of top record counts (Default 20) +* 3 - Statname (Use % as wildcard, double quotes for spaces. +* 4 - Where clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 03-Aug-12 Vishal Gupta Created +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE inst_id2 +UNDEFINE toprecordcount2 +UNDEFINE statname2 +UNDEFINE whereclause2 + +DEFINE inst_id2="&&1" +DEFINE toprecordcount2="&&2" +DEFINE statname2="&&3" +DEFINE whereclause2="&&4" + + +COLUMN _inst_id NEW_VALUE inst_id2 NOPRINT +COLUMN _toprecordcount NEW_VALUE toprecordcount2 NOPRINT +COLUMN _statname NEW_VALUE statname2 NOPRINT +COLUMN _whereclause NEW_VALUE whereclause2 NOPRINT + +set term off +SELECT DECODE('&&inst_id2','','%','&&inst_id2') "_inst_id" + , DECODE('&&toprecordcount2','','20','&&toprecordcount2') "_toprecordcount" +FROM DUAL; +set term on + + +@top_session_by_statname "&&inst_id2" "&&toprecordcount2" "redo size" "&&whereclause2" +@top_session_by_statname "&&inst_id2" "&&toprecordcount2" "CPU used by this session" "&&whereclause2" +@top_session_by_statname "&&inst_id2" "&&toprecordcount2" "physical read total bytes" "&&whereclause2" +@top_session_by_statname "&&inst_id2" "&&toprecordcount2" "%physical%writes" "&&whereclause2" +@top_session_by_statname "&&inst_id2" "&&toprecordcount2" "session pga memory" "&&whereclause2" +@top_session_by_statname "&&inst_id2" "&&toprecordcount2" "session pga memory max" "&&whereclause2" +@top_session_by_statname "&&inst_id2" "&&toprecordcount2" "bytes sent via SQL*Net to client" "&&whereclause2" + + + + +-- @@footer \ No newline at end of file diff --git a/vg/top_session_by_cpu.sql b/vg/top_session_by_cpu.sql new file mode 100644 index 0000000..ef05e94 --- /dev/null +++ b/vg/top_session_by_cpu.sql @@ -0,0 +1,129 @@ + +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top session by statname +* Usage : @ [] +* Parameters : 1 - Instance Number (Use % as wildcard) +* 2 - Number of top record counts +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 11-Apr-12 Vishal Gupta First cut +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +DEFINE inst_id="&&1" +DEFINE toprecordcount="&&2" + +COLUMN _inst_id NEW_VALUE inst_id NOPRINT +COLUMN _toprecordcount NEW_VALUE toprecordcount NOPRINT + +set term off +SELECT DECODE('&&inst_id','','%','&&inst_id') "_inst_id" + , DECODE('&&toprecordcount','','20','&&toprecordcount') "_toprecordcount" +FROM DUAL; +set term on + + +PROMPT +PROMPT ********************************************************************************** +PROMPT * Top &toprecordcount Session by CPU Usage in current call +PROMPT * +PROMPT * Input Parameters +PROMPT * - Instance Number = '&&INST_ID' +PROMPT * - Top row count = '&&toprecordcount' +PROMPT ********************************************************************************** + + +COLUMN name HEADING "Stat Name" FORMAT a40 +COLUMN cpu_time HEADING "CPU Time" FORMAT a12 JUSTIFY RIGHT +COLUMN "%age" HEADING "%age" FORMAT 999.00 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN sid HEADING "SID" FORMAT 9999 +COLUMN sess HEADING "Session" FORMAT a15 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN logon_time HEADING "Logon Time" FORMAT a20 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN last_call_et HEADING "Last|Call|(sec)" FORMAT 999,999 +COLUMN service_name HEADING "ServiceName" FORMAT a25 +COLUMN osuser HEADING "OS User" FORMAT a20 TRUNCATE +COLUMN program HEADING "Program" FORMAT a50 TRUNCATE +COLUMN machine HEADING "Machine" FORMAT a20 TRUNCATE + +WITH sess AS +( + SELECT /*+ materialize */ sn.name + , ROUND((ss.VALUE - ss2.VALUE)/ 100 ) value + , p.spid + , s.* + FROM gv$session s + , gv$sesstat ss + , gv$sesstat ss2 + , v$statname sn + , v$statname sn2 + , gv$process p + WHERE s.sid = ss.sid + AND s.inst_id = ss.inst_id + AND ss.statistic# = sn.statistic# + AND s.paddr = p.addr (+) + AND s.inst_id = p.inst_id (+) + AND s.sid = ss2.sid + AND s.inst_id = ss2.inst_id + AND ss2.statistic# = sn2.statistic# + AND s.inst_id LIKE '&&INST_ID' + AND sn.name = 'CPU used by this session' + AND sn2.name = 'CPU used when call started' + AND s.type <> 'BACKGROUND' + AND s.status = 'ACTIVE' +-- AND DECODE(s.status ,'INACTIVE',s.last_call_et,0) < 60 -- exclude all session inactive for more than 60 sec. +) +SELECT c.cpu_time + , c.sid + , c.inst_id +-- , c.sid || ',' || c.serial# || ',@' || c.inst_id sess + , c.spid + , c.status + , to_char(c.logon_time, 'dd-MON-yyyy hh24:mi:ss') logon_time + , c.username + , c.last_call_et + , c.service_name + , c.osuser + , c.sql_id + , c.prev_sql_id + , c.PROGRAM + --, c.machine +FROM + (SELECT LPAD(FLOOR(a.value / 3600) || 'h ' + || LPAD(FLOOR(MOD(a.value , 3600 ) / 60),2) || 'm ' + || LPAD(MOD(a.value , 60 ) ,2) || 's' + , 12) cpu_time + , ROUND((a.VALUE / b.total_value) *100, 2) "%age" + , a.* + FROM sess a +, (SELECT DECODE('&&INST_ID', '%' ,'%', inst_id) inst_id + , SUM(value) total_value + FROM sess + GROUP BY DECODE('&&INST_ID', '%' ,'%', inst_id) + ) b +WHERE a.value > 0 +ORDER BY a.VALUE DESC +) c +WHERE rownum <= &&TOPRECORDCOUNT; + + +UNDEFINE INST_ID +UNDEFINE TOPRECORDCOUNT +UNDEFINE statname + +@@footer diff --git a/vg/top_session_by_statname.sql b/vg/top_session_by_statname.sql new file mode 100644 index 0000000..07ad6b0 --- /dev/null +++ b/vg/top_session_by_statname.sql @@ -0,0 +1,183 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display top session by statname +* Usage : @ [] +* Parameters : 1 - Instance Number (Use % as wildcard) +* 2 - Number of top record counts +* 3 - Statname (Use % as wildcard, double quotes for spaces. +* 4 - Where clause +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 11-Sep-07 Vishal Gupta First cut +* 27-Mar-12 Vishal Gupta Modified to take instance_id as input parameter to +* give ability to give topsession at instance level. +* 15-Jun-12 Vishal Gupta Added last_call_et to output +* 22-Jun-12 Vishal Gupta Change parameter order to be in line with other scripts. +* +*/ + +set lines 3000 + +/************************************ +* INPUT PARAMETERS +************************************/ + +DEFINE inst_id="&&1" +DEFINE toprecordcount="&&2" +DEFINE statname="&&3" +DEFINE whereclause="&&4" + + + +COLUMN _inst_id NEW_VALUE inst_id NOPRINT +COLUMN _toprecordcount NEW_VALUE toprecordcount NOPRINT +COLUMN _statname NEW_VALUE statname NOPRINT +COLUMN _whereclause NEW_VALUE whereclause NOPRINT + +set term off +SELECT DECODE('&&inst_id','','%','&&inst_id') "_inst_id" + , DECODE('&&toprecordcount','','50','&&toprecordcount') "_toprecordcount" + , DECODE('&&whereclause','','AND s.type <> ''BACKGROUND'' ','&&whereclause') "_whereclause" +FROM DUAL; +set term on + + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +--DEFINE SHOW_BACKGROUND_PROCESSES='Y' +DEFINE SHOW_BACKGROUND_PROCESSES='N' + +DEFINE COUNT_FORMAT=999,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="60" +DEFINE TIME_HEADING="min" + + +PROMPT +PROMPT ********************************************************************************** +PROMPT * Top &toprecordcount Session by Statistic - "&&statname" +PROMPT * +PROMPT * Input Parameters +PROMPT * - Instance Number = '&&INST_ID' +PROMPT * - Top row count = '&&toprecordcount' +PROMPT * - Statistic Name = '&&statname' +PROMPT * - Where Clause = "&&whereclause" +PROMPT ********************************************************************************** + +COLUMN name HEADING "Statistic Name" FORMAT a30 TRUNCATE +COLUMN value HEADING "Value" FORMAT 99,999,999,999,999 +COLUMN "%age" HEADING "%age" FORMAT 999.00 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN sid HEADING "SID" FORMAT 9999 +COLUMN sess HEADING "Session" FORMAT a15 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN last_call_et HEADING "LastCall" FORMAT a12 JUSTIFY RIGHT +COLUMN logon_time HEADING "Logon Time" FORMAT a20 +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN service_name HEADING "ServiceName" FORMAT a25 +COLUMN osuser HEADING "OS User" FORMAT a20 TRUNCATE +COLUMN process HEADING "Client|Process" FORMAT a15 +COLUMN program HEADING "Program" FORMAT a20 TRUNCATE +COLUMN machine HEADING "Machine" FORMAT a20 TRUNCATE + +SELECT * +FROM + (SELECT a.name + , a.VALUE + , ROUND((a.VALUE / b.total_value) *100, 2) "%age" + , a.sid + , a.inst_id + --, a.sid || ',' || a.serial# || ',@' || a.inst_id sess + , a.spid + , a.status + , a.last_call_et + , a.logon_time + , a.username + , a.service_name + , a.osuser + , a.process + , a.PROGRAM + --, a.machine + FROM (SELECT sn.name + , ss.VALUE + , s.inst_id + , s.sid + , s.serial# + , p.spid + , s.status + , s.osuser + , s.username + , s.service_name + , LPAD(DECODE(FLOOR(s.last_call_et / 3600),0, '', FLOOR(s.last_call_et / 3600) || 'h ' ) + || LPAD(FLOOR(MOD(s.last_call_et , 3600 ) / 60),2) || 'm ' + || LPAD(MOD(s.last_call_et, 60 ) ,2) || 's' + , 12) last_call_et + , to_char(s.logon_time, 'dd-MON-yyyy hh24:mi:ss') logon_time + , s.process + , s.PROGRAM + , s.machine + FROM gv$session s + , gv$sesstat ss + , v$statname sn + , gv$process p + WHERE s.sid = ss.sid + AND s.inst_id = ss.inst_id + AND s.paddr = p.addr (+) + AND s.inst_id = p.inst_id (+) + AND ss.statistic# = sn.statistic# + AND s.inst_id LIKE '&&inst_id' + AND LOWER(sn.name) LIKE LOWER('&&statname') + &&whereclause + ) a + , (SELECT DECODE('&&inst_id', '%' ,'%', s.inst_id) inst_id + , sn.name + , SUM(VALUE) total_value + FROM gv$session s + , gv$sesstat ss + , v$statname sn + WHERE s.sid = ss.sid + AND s.inst_id = ss.inst_id + AND ss.statistic# = sn.statistic# + AND s.inst_id LIKE '&&inst_id' + AND LOWER(sn.name) LIKE LOWER( '&&statname' ) + &&whereclause + GROUP BY DECODE('&&inst_id', '%' ,'%', s.inst_id) + , sn.name + having sum(value) > 0 + ) b + WHERE a.name = b.name + AND a.inst_id LIKE '&&inst_id' + ORDER BY a.VALUE DESC +) +WHERE rownum <= &&toprecordcount +; + +UNDEFINE inst_id +UNDEFINE toprecordcount +UNDEFINE statname +UNDEFINE whereclause + +@@footer diff --git a/vg/trace_logontrigger.sql b/vg/trace_logontrigger.sql new file mode 100644 index 0000000..a080e07 --- /dev/null +++ b/vg/trace_logontrigger.sql @@ -0,0 +1,33 @@ +create or replace +trigger vg_trace_trigger +after logon on database +DECLARE + lv_osuser v$session.osuser%TYPE; + lv_username v$session.username%TYPE; + lv_module v$session.module%TYPE; + lv_program v$session.program%TYPE; + lv_machine v$session.machine%TYPE; +begin + select osuser + , username + , module + , program + , machine + INTO lv_osuser + , lv_username + , lv_module + , lv_program + , lv_machine + FROM v$session + WHERE audsid = userenv('SESSIONID'); + + + IF UPPER(lv_program) like 'FIX%UPLOAD%' + OR lv_username in ('RABO_REPORTS') + OR UPPER(lv_program) like 'VOL%ANALY%' + THEN + execute immediate 'alter session set events ''10046 trace name context forever, level 12'''; + END IF; +end; +/ + diff --git a/vg/transaction_long_running.sql b/vg/transaction_long_running.sql new file mode 100644 index 0000000..645bdd6 --- /dev/null +++ b/vg/transaction_long_running.sql @@ -0,0 +1,139 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Displays long running transactions +* Parameter: 1 - Where Clause +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 04-May-15 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE WHERE_CLAUSE +DEFINE WHERE_CLAUSE="&&1" + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + + +DEFINE COUNT_FORMAT=999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + + +PROMPT +PROMPT ********************************************* +PROMPT * D A T A B A S E T R A N S A C T I O N S +PROMPT ********************************************* + +COLUMN xid HEADING "XID" FORMAT a16 +COLUMN sid HEADING "SID" FORMAT 99999 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN transaction_start_date HEADING "Transaction|StartTime" FORMAT a18 +COLUMN tran_duration HEADING "Transaction|Duration" FORMAT a15 +COLUMN transaction_status HEADING "Tran|Status" FORMAT a8 +COLUMN space HEADING "Space|Tran" FORMAT a5 +COLUMN recursive HEADING "Recu|rsive|Tran" FORMAT a5 +COLUMN noundo HEADING "No|Undo|Tran" FORMAT a4 +COLUMN ptx HEADING "Par'l|Tran" FORMAT a5 +COLUMN used_undo HEADING "Undo|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN status HEADING "Session|Status" FORMAT a8 +COLUMN state HEADING "Session|State" FORMAT a12 TRUNCATED +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED +COLUMN process HEADING "Process" FORMAT a11 +COLUMN program HEADING "Program" FORMAT a20 TRUNCATED +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +--COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999 +COLUMN last_call_et HEADING "LastCall" FORMAT a12 +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +COLUMN log_io HEADING "Logical|IO|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN phy_io HEADING "Physical|IO|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT +COLUMN cr_get HEADING "Consistent|Gets|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT + +COLUMN locked_mode HEADING "Lock Mode" FORMAT a10 +COLUMN object_name HEADING "ObjectName" FORMAT a35 + + +SELECT + -- t.xid xid + --, t.ptx_xid + s.sid sid + , t.inst_id + , p.spid + , s.status + , TO_CHAR(t.start_date,'DD-MON-YY HH24:MI:SS') transaction_start_date + , FLOOR(sysdate - t.start_date) || 'd ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) , 1) * 24 ) ,2) || 'h ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 , 1) * 60 ) ,2) || 'm ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 * 60 , 1) * 60 ) ,2) || 's ' tran_duration + , t.status transaction_status + , t.space + , t.recursive + , t.noundo + , t.ptx + , DECODE(lo.locked_mode, + 0, 'None', /* Mon Lock equivalent */ + 1, 'Null', /* N */ + 2, 'Row-S (SS)', /* L */ + 3, 'Row-X (SX)', /* R */ + 4, 'Share', /* S */ + 5, 'S/Row-X (SSX)', /* C */ + 6, 'Exclusive', /* X */ + TO_CHAR(lo.locked_mode) + ) locked_mode + , NVL2(o.owner,o.owner|| '.' || o.object_name || NVL2(o.subobject_name,'(' || o.subobject_name || ')','') , '' ) object_name + , ROUND((t.used_ublk * p.value)/&&BYTES_DIVIDER) used_undo + , t.log_io/&&COUNT_DIVIDER log_io + , t.phy_io/&&COUNT_DIVIDER phy_io + , t.cr_get/&&COUNT_DIVIDER cr_get + , s.username + , s.osuser +-- , s.sql_id +-- , s.sql_child_number + , s.program +FROM gv$transaction t + INNER JOIN gv$session s ON t.inst_id = s.inst_id AND t.ses_addr = s.saddr + INNER JOIN gv$process p ON p.inst_id = s.inst_id AND p.addr = s.paddr + INNER JOIN v$parameter p ON p.name = 'db_block_size' + LEFT OUTER JOIN gv$locked_object lo ON t.inst_id = lo.inst_id + AND s.sid = lo.session_id + AND t.xidusn = lo.xidusn + AND t.xidslot = lo.xidslot + AND t.xidsqn = lo.xidsqn + LEFT OUTER JOIN dba_objects o ON lo.object_id = o.object_id +WHERE 1=1 and 2=2 +-- had to put AND clause other when no where clause is passed it was giving following error +-- SP2-0341: line overflow during variable substitution (>3000 characters at line 53) + &&WHERE_CLAUSE +ORDER BY transaction_start_date asc +; + + +@@footer diff --git a/vg/transactions.sql b/vg/transactions.sql new file mode 100644 index 0000000..9f4672f --- /dev/null +++ b/vg/transactions.sql @@ -0,0 +1,143 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Displays current transactions sizes +* Parameter: 1 - Where Clause +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Jul-12 Vishal Gupta Added the WHERE clause +* 16-Jul-12 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE WHERE_CLAUSE +DEFINE WHERE_CLAUSE="&&1" + + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + +DEFINE BYTES_FORMAT="999,999" +--DEFINE BYTES_DIVIDER="1024" +--DEFINE BYTES_HEADING="KB" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" + + +DEFINE COUNT_FORMAT=9,999,999 +--DEFINE COUNT_DIVIDER="1" +--DEFINE COUNT_HEADING="#" +DEFINE COUNT_DIVIDER="1000" +DEFINE COUNT_HEADING="#1000" + + +PROMPT +PROMPT ********************************************* +PROMPT * D A T A B A S E T R A N S A C T I O N S +PROMPT ********************************************* + +COLUMN xid HEADING "XID|Heirarchy" FORMAT a16 +COLUMN sid HEADING "SID|Heirarchy" FORMAT a10 +COLUMN inst_id HEADING "I#" FORMAT 99 +COLUMN spid HEADING "SPID" FORMAT a6 +COLUMN transaction_start_date HEADING "Tran StartDate" FORMAT a18 +COLUMN tran_duration HEADING "Tran |Duration" FORMAT a15 +COLUMN transaction_status HEADING "Tran|Status" FORMAT a8 +COLUMN space HEADING "Space|Tran" FORMAT a5 +COLUMN recursive HEADING "Recu|rsive|Tran" FORMAT a5 +COLUMN noundo HEADING "No|Undo|Tran" FORMAT a4 +COLUMN ptx HEADING "Par'l|Tran" FORMAT a5 +COLUMN used_undo HEADING "Undo|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT +COLUMN username HEADING "UserName" FORMAT a20 +COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED +COLUMN status HEADING "Status" FORMAT a8 +COLUMN state HEADING "Session|State" FORMAT a12 TRUNCATED +COLUMN logon_time HEADING "Logon Time" FORMAT a18 +COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED +COLUMN process HEADING "Process" FORMAT a11 +COLUMN program HEADING "Program" FORMAT a20 TRUNCATED +COLUMN event HEADING "Event" FORMAT a30 TRUNCATED +--COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999 +COLUMN last_call_et HEADING "LastCall" FORMAT a12 +COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99 + +COLUMN log_io HEADING "Logical|IO|(&&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN phy_io HEADING "Physical|IO|(&&COUNT_HEADING)" FORMAT &COUNT_FORMAT +COLUMN cr_get HEADING "Consistent|Gets|(&&COUNT_HEADING)" FORMAT &COUNT_FORMAT + + + +SELECT + DECODE(level,1, '' , ' ') + || LPAD('> ',(level-1)*5,'|--') + || t.xid xid + --, t.ptx_xid + , DECODE(level,1, '' , ' ') + || LPAD('> ',(level-1)*5,'|--') + || s.sid sid + , t.inst_id + , p.spid + , s.status + , TO_CHAR(t.start_date,'DD-MON-YY HH24:MI:SS') transaction_start_date + , FLOOR(sysdate - t.start_date) || 'd ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) , 1) * 24 ) ,2) || 'h ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 , 1) * 60 ) ,2) || 'm ' + || LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 * 60 , 1) * 60 ) ,2) || 's ' tran_duration + , t.status transaction_status + , t.space + , t.recursive + , t.noundo + , t.ptx + , ROUND((t.used_ublk * p.value)/&&BYTES_DIVIDER) used_undo + , t.log_io/&COUNT_DIVIDER + , t.phy_io/&COUNT_DIVIDER + , t.cr_get/&COUNT_DIVIDER + , s.username + , s.osuser + , s.sql_id + , s.sql_child_number + , s.program +-- , o.object_name +-- , DECODE(lo.locked_mode, +-- 0, 'None', /* Mon Lock equivalent */ +-- 1, 'Null', /* N */ +-- 2, 'Row-S (SS)', /* L */ +-- 3, 'Row-X (SX)', /* R */ +-- 4, 'Share', /* S */ +-- 5, 'S/Row-X (SSX)', /* C */ +-- 6, 'Exclusive', /* X */ +-- TO_CHAR(lo.locked_mode) +-- ) locked_mode +FROM gv$transaction t + INNER JOIN gv$session s ON t.inst_id = s.inst_id AND t.ses_addr = s.saddr + INNER JOIN gv$process p ON p.inst_id = s.inst_id AND p.addr = s.paddr + INNER JOIN v$parameter p ON p.name = 'db_block_size' +-- LEFT OUTER JOIN gv$locked_object lo ON t.inst_id = lo.inst_id +-- AND s.sid = lo.session_id +-- AND t.xidusn = lo.xidusn +-- AND t.xidslot = lo.xidslot +-- AND t.xidsqn = lo.xidsqn +-- LEFT OUTER JOIN dba_objects o ON lo.object_id = o.object_id +WHERE 1=1 and 2=2 +-- had to put AND cluase other when no where clause is passed it was giving following error +-- SP2-0341: line overflow during variable substitution (>3000 characters at line 53) + &&WHERE_CLAUSE +CONNECT BY NOCYCLE PRIOR t.xid = t.ptx_xid +--ORDER BY transaction_start_date +; + + +@@footer \ No newline at end of file diff --git a/vg/tunning_stat.sql b/vg/tunning_stat.sql new file mode 100644 index 0000000..7508c94 --- /dev/null +++ b/vg/tunning_stat.sql @@ -0,0 +1,688 @@ +set echo off +set head off +set verify off +spool tuning_stats.txt + +ttitle 'SYSTEM STATISTICS' + +prompt 'LIBRARY CACHE STATISTICS:' + +ttitle off + +select 'PINS - # of times an item in the library cache was executed - '|| + sum(pins), + 'RELOADS - # of library cache misses on execution steps - '|| + sum (reloads), + 'RELOADS / PINS * 100 = '||round((sum(reloads) / sum(pins) * +100),2)||'%' +from v$librarycache +/ + +prompt Increase memory until RELOADS is near 0 but watch out for +prompt Paging/swapping +prompt To increase library cache, increase SHARED_POOL_SIZE +prompt +prompt ** NOTE: Increasing SHARED_POOL_SIZE will increase the SGA size. +prompt +prompt Library Cache Misses indicate that the Shared Pool is not big +prompt enough to hold the shared SQL area for all concurrently open cursors. +prompt If you have no Library Cache misses (PINS = 0), you may get a small +prompt increase in performance by setting CURSOR_SPACE_FOR_TIME = TRUE which +prompt prevents ORACLE from deallocating a shared SQL area while an +prompt application +prompt cursor associated with it is open. +prompt +prompt For Multi-threaded server, add 1K to SHARED_POOL_SIZE per user. +prompt +prompt------------------------------------------------------------------------ + +column xn1 format a50 +column xn2 format a50 +column xn3 format a50 +column xv1 new_value xxv1 noprint +column xv2 new_value xxv2 noprint +column xv3 new_value xxv3 noprint +column d1 format a50 +column d2 format a50 + +prompt HIT RATIO: +prompt +prompt Values Hit Ratio is calculated against: +prompt + +select lpad(name,20,' ')||' = '||value xn1, value xv1 +from v$sysstat +where name = 'db block gets' +/ + +select lpad(name,20,' ')||' = '||value xn2, value xv2 +from v$sysstat +where name = 'consistent gets' +/ + +select lpad(name,20,' ')||' = '||value xn3, value xv3 +from v$sysstat b +where name = 'physical reads' +/ + +set pages 60 + +select 'Logical reads = db block gets + consistent gets ', + lpad ('Logical Reads = ',24,' ')||to_char(&xxv1+&xxv2) d1 +from dual +/ + +select 'Hit Ratio = (logical reads - physical reads) / logical reads', + lpad('Hit Ratio = ',24,' ')|| + round( (((&xxv2+&xxv1) - &xxv3) / (&xxv2+&xxv1))*100,2 )||'%' d2 +from dual +/ + +prompt If the hit ratio is less than 60%-70%, increase the initialization +prompt parameter DB_BLOCK_BUFFERS. ** NOTE: Increasing this parameter will +prompt increase the SGA size. +prompt +prompt------------------------------------------------------------------------ + +col name format a30 +col gets format 9,999,999 +col waits format 9,999,999 + +prompt ROLLBACK CONTENTION STATISTICS: +prompt + +prompt GETS - # of gets on the rollback segment header +prompt WAITS - # of waits for the rollback segment header + +set head on; + +select name, waits, gets +from v$rollstat, v$rollname +where v$rollstat.usn = v$rollname.usn +/ + +set head off + +select 'The average of waits/gets is '|| + round((sum(waits) / sum(gets)) * 100,2)||'%' +From v$rollstat +/ + +prompt +prompt If the ratio of waits to gets is more than 1% or 2%, consider +prompt creating more rollback segments +prompt +prompt Another way to gauge rollback contention is: +prompt + +column xn1 format 9999999 +column xv1 new_value xxv1 noprint + +set head on + +select class, count +from v$waitstat +where class in ('system undo header', 'system undo block', + 'undo header', 'undo block' ) +/ + +set head off + +select 'Total requests = '||sum(count) xn1, sum(count) xv1 +from v$waitstat +/ + +select 'Contention for system undo header = '|| + (round(count/(&xxv1+0.00000000001),4)) * 100||'%' +from v$waitstat +where class = 'system undo header' +/ + +select 'Contention for system undo block = '|| + (round(count/(&xxv1+0.00000000001),4)) * 100||'%' +from v$waitstat +where class = 'system undo block' +/ + +select 'Contention for undo header = '|| + (round(count/(&xxv1+0.00000000001),4)) * 100||'%' +from v$waitstat +where class = 'undo header' +/ + +select 'Contention for undo block = '|| + (round(count/(&xxv1+0.00000000001),4)) * 100||'%' +from v$waitstat +where class = 'undo block' +/ + +prompt +prompt If the percentage for an area is more than 1% or 2%, consider +prompt creating more rollback segments. Note: This value is usually very +prompt small +prompt and has been rounded to 4 places. +prompt +prompt------------------------------------------------------------------------ + +prompt REDO CONTENTION STATISTICS: +prompt +prompt The following shows how often user processes had to wait for space in +prompt the redo log buffer: + +select name||' = '||value +from v$sysstat +where name = 'redo log space requests' +/ + +prompt +prompt This value should be near 0. If this value increments consistently, +prompt processes have had to wait for space in the redo buffer. If this +prompt condition exists over time, increase the size of LOG_BUFFER in the +prompt init.ora file in increments of 5% until the value nears 0. +prompt ** NOTE: increasing the LOG_BUFFER value will increase total SGA size. +prompt +prompt ----------------------------------------------------------------------- + + +col name format a15 +col gets format 9999999 +col misses format 9999999 +col immediate_gets heading 'IMMED GETS' format 9999999 +col immediate_misses heading 'IMMED MISS' format 9999999 +col sleeps format 999999 + +prompt LATCH CONTENTION: +prompt +prompt GETS - # of successful willing-to-wait requests for a latch +prompt MISSES - # of times an initial willing-to-wait request was unsuccessful +prompt IMMEDIATE_GETS - # of successful immediate requests for each latch +prompt IMMEDIATE_MISSES = # of unsuccessful immediate requests for each latch +prompt SLEEPS - # of times a process waited and requests a latch after an +prompt initial willing-to-wait request +prompt +prompt If the latch requested with a willing-to-wait request is not +prompt available, the requesting process waits a short time and requests +prompt again. +prompt If the latch requested with an immediate request is not available, +prompt the requesting process does not wait, but continues processing +prompt + +set head on + +select name, gets, misses, + immediate_gets, immediate_misses, sleeps +from v$latch +where name in ('redo allocation', 'redo copy') +/ + +set head off + +select 'Ratio of MISSES to GETS: '|| + round((sum(misses)/(sum(gets)+0.00000000001) * 100),2)||'%' +from v$latch +where name in ('redo allocation', 'redo copy') +/ + +select 'Ratio of IMMEDIATE_MISSES to IMMEDIATE_GETS: '|| + round((sum(immediate_misses)/ + (sum(immediate_misses+immediate_gets)+0.00000000001) * 100),2)||'%' +from v$latch +where name in ('redo allocation', 'redo copy') +/ + +prompt +prompt If either ratio exceeds 1%, performance will be affected. +prompt +prompt Decreasing the size of LOG_SMALL_ENTRY_MAX_SIZE reduces the number of +prompt processes copying information on the redo allocation latch. +prompt +prompt Increasing the size of LOG_SIMULTANEOUS_COPIES will reduce contention +prompt for redo copy latches. + +rem +rem This shows the library cache reloads +rem + +set head on + +prompt +prompt------------------------------------------------------------------------ + +prompt +prompt Look at gethitratio and pinhit ratio +prompt +prompt GETHITRATIO is number of GETHTS/GETS +prompt PINHIT RATIO is number of PINHITS/PINS - number close to 1 indicates +prompt that most objects requested for pinning have been cached. Pay close +prompt attention to PINHIT RATIO. +prompt + +column namespace format a20 heading 'NAME' +column gets format 99999999 heading 'GETS' +column gethits format 99999999 heading 'GETHITS' +column gethitratio format 999.99 heading 'GET HIT|RATIO' +column pins format 9999999 heading 'PINHITS' +column pinhitratio format 999.99 heading 'PIN HIT|RATIO' + +select namespace, gets, gethits, + gethitratio, pins, pinhitratio +from v$librarycache +/ + +rem +rem +rem This looks at the dictionary cache miss rate +rem + +prompt +prompt------------------------------------------------------------------------ + +prompt THE DATA DICTIONARY CACHE: +prompt +prompt +prompt Consider keeping this below 5% to keep the data dictionary cache in +prompt the SGA. Up the SHARED_POOL_SIZE to improve this statistic. **NOTE: +prompt increasing the SHARED_POOL_SIZE will increase the SGA. +prompt + +column dictcache format 999.99 heading 'Dictionary Cache | Ratio %' + +select sum(getmisses) / (sum(gets)+0.00000000001) * 100 dictcache +from v$rowcache +/ + +prompt +prompt------------------------------------------------------------------------ + +prompt +prompt SYSTEM EVENTS: +prompt +prompt Not sure of the value of this section yet but it looks interesting. +prompt + +col event format a37 heading 'Event' +col total_waits format 99999999 heading 'Total|Waits' +col time_waited format 9999999999 heading 'Time Wait|In Hndrds' +col total_timeouts format 999999 heading 'Timeout' +col average_wait heading 'Average|Time' format 999999.999 + +set pages 999 + +select * +from v$system_event +/ + +prompt +prompt------------------------------------------------------------------------ + +rem +rem +rem This looks at the sga area breakdown +rem + +prompt THE SGA AREA ALLOCATION: +prompt +prompt +prompt This shows the allocation of SGA storage. Examine this before and +prompt after making changes in the INIT.ORA file which will impact the SGA. +prompt + +col name format a40 + +select name, bytes +from v$sgastat +/ + +set head off + +select 'total of SGA '||sum(bytes) +from v$sgastat +/ + +prompt +prompt------------------------------------------------------------------------ + +rem +rem Displays all the base session statistics +rem + +set head on +set pagesize 110 + +column name format a55 heading 'Statistic Name' +column value format 9,999,999,999 heading 'Result' +column statistic# format 9999 heading 'Stat#' + +ttitle center 'Instance Statistics' skip 2 + +prompt +prompt Below is a dump of the core Instance Statistics that are greater than0. +prompt Although there are a great many statistics listed, the ones of greatest +prompt value are displayed in other formats throughout this report. Of +prompt interest here are the values for: +prompt +prompt cumulative logons +prompt(# of actual connections to the DB since last startup - good +prompt volume-of-use statistic) +prompt +prompt #93 table fetch continued row +prompt (# of chained rows - will be higher if there are a lot of long fields +prompt if the value goes up over time, it is a good signaller of general +prompt database fragmentation) +prompt + +select statistic#, name, value +from v$sysstat +where value > 0 +/ + +prompt +prompt ----------------------------------------------------------------------- + +set pages 66; +set space 3; +set heading on; + +prompt +prompt Parse Ratio usually falls between 1.15 and 1.45. If it is higher, then +prompt it is usually a sign of poorly written Pro* programs or unoptimized +prompt SQL*Forms applications. +prompt +prompt Recursive Call Ratio will usually be between +prompt +prompt 7.0 - 10.0 for tuned production systems +prompt 10.0 - 14.5 for tuned development systems +prompt +prompt Buffer Hit Ratio is dependent upon RDBMS size, SGA size and +prompt the types of applications being processed. This shows the %-age +prompt of logical reads from the SGA as opposed to total reads - the +prompt figure should be as high as possible. The hit ratio can be raised +prompt by increasing DB_BUFFERS, which increases SGA size. By turning on +prompt the "Virtual Buffer Manager" (db_block_lru_statistics = TRUE and +prompt db_block_lru_extended_statistics = TRUE in the init.ora parameters), +prompt you can determine how many extra hits you would get from memory as +prompt opposed to physical I/O from disk. **NOTE: Turning these on will +prompt impact performance. One shift of statistics gathering should be enough +prompt to get the required information. +prompt + +ttitle left 'Ratios for this Instance' skip 2 + +column pcc heading 'Parse|Ratio' format 99.99 +column rcc heading 'Recsv|Cursr' format 99.99 +column hr heading 'Buffer|Ratio' format 999,999,999.999 +column rwr heading 'Rd/Wr|Ratio' format 999,999.9 +column bpfts heading 'Blks per|Full TS' format 999,999 + +REM Modified for O7.1 to reverse 'cumulative opened cursors' to +REM 'opened cursors cumulative' +REM was:sum(decode(a.name,'cumulative opened cursors',value, .00000000001)) +REM pcc, +REM and:sum(decode(a.name,'cumulative opened cursors',value,.00000000001)) +REM rcc, + +select sum(decode(a.name,'parse count',value,0)) / + sum(decode(a.name,'opened cursors cumulative',value,.00000000001)) pcc, + sum(decode(a.name,'recursive calls',value,0)) / + sum(decode(a.name,'opened cursors cumulative',value,.00000000001)) rcc, + (1-(sum(decode(a.name,'physical reads',value,0)) / + sum(decode(a.name,'db block gets',value,.00000000001)) + + sum(decode(a.name,'consistent gets',value,0))) * (-1)) hr, + sum(decode(a.name,'physical reads',value,0)) / + sum(decode(a.name,'physical writes',value,.00000000001)) rwr, + (sum(decode(a.name,'table scan blocks gotten',value,0)) - + sum(decode(a.name,'table scans (short tables)',value,0)) * 4) / + sum(decode(a.name,'table scans (long tables)',value,.00000000001)) +bpfts +from v$sysstat a +/ + +prompt +prompt ----------------------------------------------------------------- +prompt This looks at overall i/o activity against individual +prompt files within a tablespace +prompt +prompt Look for a mismatch across disk drives in terms of I/O +prompt +prompt Also, examine the Blocks per Read Ratio for heavily accessed +prompt TSs - if this value is significantly above 1 then you may have +prompt full tablescans occurring (with multi-block I/O) +prompt +prompt If activity on the files is unbalanced, move files around to balance +prompt the load. Should see an approximately even set of numbers across files +prompt + +set pagesize 100; +set space 1 + +column pbr format 99999999 heading 'Physical|Blk Read' +column pbw format 999999 heading 'Physical|Blks Wrtn' +column pyr format 999999 heading 'Physical|Reads' +column readtim format 99999999 heading 'Read|Time' +column name format a40 heading 'DataFile Name' +column writetim format 99999999 heading 'Write|Time' + +ttitle center 'Tablespace Report' skip 2 + +compute sum of f.phyblkrd, f.phyblkwrt on report + +select fs.name name, f.phyblkrd pbr, f.phyblkwrt pbw, + f.readtim, f.writetim +from v$filestat f, v$datafile fs +where f.file# = fs.file# +order by fs.name +/ + +prompt +prompt ----------------------------------------------------------------- + +prompt GENERATING WAIT STATISTICS: +prompt +prompt This will show wait stats for certain kernel instances. This +prompt may show the need for additional rbs, wait lists, db_buffers +prompt + ttitle center 'Wait Statistics for the Instance' skip 2 + +column class heading 'Class Type' +column count heading 'Times Waited' format 99,999,999 +column time heading 'Total Times' format 99,999,999 + +select class, count, time +from v$waitstat +where count > 0 +order by class +/ + +prompt +prompt Look at the wait statistics generated above (if any). They will +prompt tell you where there is contention in the system. There will +prompt usually be some contention in any system - but if the ratio of +prompt waits for a particular operation starts to rise, you may need to +prompt add additional resource, such as more database buffers, log buffers, +prompt or rollback segments +prompt +prompt ----------------------------------------------------------------- + +prompt ROLLBACK STATISTICS: +prompt + +ttitle off; + +set linesize 80 + +column extents format 999 heading 'Extents' +column rssize format 999,999,999 heading 'Size in|Bytes' +column optsize format 999,999,999 heading 'Optimal|Size' +column hwmsize format 99,999,999 heading 'High Water|Mark' +column shrinks format 9,999 heading 'Num of|Shrinks' +column wraps format 9,999 heading 'Num of|Wraps' +column extends format 999,999 heading 'Num of|Extends' +column aveactive format 999,999,999 heading 'Average size|Active Extents' +column rownum noprint + +select rssize, optsize, hwmsize, + shrinks, wraps, extends, aveactive +from v$rollstat +order by rownum +/ + +prompt +prompt ----------------------------------------------------------------- + +set linesize 80 + +break on report + +compute sum of gets waits writes on report + +ttitle center 'Rollback Statistics' skip 2 + +select rownum, extents, rssize, + xacts, gets, waits, writes +from v$rollstat +order by rownum +/ + +ttitle off + +set heading off + +prompt +prompt ----------------------------------------------------------------- + +prompt +prompt SORT AREA SIZE VALUES: +prompt +prompt To make best use of sort memory, the initial extent of your Users +prompt sort-work Tablespace should be sufficient to hold at least one sort +prompt run from memory to reduce dynamic space allocation. If you are getting +prompt a high ratio of disk sorts as opposed to memory sorts, setting +prompt sort_area_retained_size = 0 in init.ora will force the sort area to be +prompt released immediately after a sort finishes. +prompt + +column value format 999,999,999 + +select 'INIT.ORA sort_area_size: '||value +from v$parameter +where name like 'sort_area_size' +/ + +select a.name, value +from v$statname a, v$sysstat +where a.statistic# = v$sysstat.statistic# +and a.name in ('sorts (disk)', 'sorts (memory)', 'sorts (rows)') +/ + +prompt +prompt ----------------------------------------------------------------- + +set heading on +set space 2 + +prompt +prompt This looks at Tablespace Sizing - Total bytes and free bytes +prompt + +ttitle center 'Tablespace Sizing Information' Skip 2 + +column tablespace_name format a30 heading 'TS Name' +column sbytes format 9,999,999,999 heading 'Total Bytes' +column fbytes format 9,999,999,999 heading 'Free Bytes' +column kount format 999 heading 'Ext' + +compute sum of fbytes on tablespace_name +compute sum of sbytes on tablespace_name +compute sum of sbytes on report +compute sum of fbytes on report + +break on report + +select a.tablespace_name, a.bytes sbytes, + sum(b.bytes) fbytes, count(*) kount +from dba_data_files a, dba_free_space b +where a.file_id = b.file_id +group by a.tablespace_name, a.bytes +order by a.tablespace_name +/ + +set linesize 80 + +prompt +prompt A large number of Free Chunks indicates that the tablespace may need +prompt to be defragmented and compressed. +prompt +prompt ----------------------------------------------------------------- + +set heading off + +ttitle off + +column value format 99,999,999,999 + +select 'Total Physical Reads', value +from v$sysstat +where statistic# = 39 +/ + +prompt +prompt If you can significantly reduce physical reads by adding incremental +prompt data buffers...do it. To determine whether adding data buffers will +prompt help, set db_block_lru_statistics = TRUE and +prompt db_block_lru_extended_statistics = TRUE in the init.ora parameters. +prompt You can determine how many extra hits you would get from memory as +prompt opposed to physical I/O from disk. **NOTE: Turning these on will +prompt impact performance. One shift of statistics gathering should be enough +prompt to get the required information. +prompt + +set heading on + +clear computes + +ttitle off + +prompt +prompt ----------------------------------------------------------------- +prompt CHECKING FOR FRAGMENTED DATABASE OBJECTS: +prompt +prompt Fragmentation report - If number of extents is approaching Maxextents, +prompt it is time to defragment the table. +prompt + +column owner noprint new_value owner_var +column segment_name format a30 heading 'Object Name' +column segment_type format a9 heading 'Table/Indx' +column sum(bytes) format 999,999,999 heading 'Bytes Used' +column count(*) format 999 heading 'No.' + +break on owner skip page 2 + +ttitle center 'Table Fragmentation Report' skip 2 - + left 'creator: ' owner_var skip 2 + +select a.owner, segment_name, segment_type, + sum(bytes), max_extents, count(*) +from dba_extents a, dba_tables b +where segment_name = b.table_name +having count(*) > 3 +group by a.owner, segment_name, segment_type, max_extents +order by a.owner, segment_name, segment_type, max_extents +/ + +ttitle center 'Index Fragmentation Report' skip 2 - + left 'creator: ' owner_var skip 2 + +select a.owner, segment_name, segment_type, + sum(bytes), max_extents, count(*) +from dba_extents a, dba_indexes b +where segment_name = index_name +having count(*) > 3 +group by a.owner, segment_name, segment_type, max_extents +order by a.owner, segment_name, segment_type, max_extents +/ + +prompt +prompt ----------------------------------------------------------------- + +spool off diff --git a/vg/undostat.sql b/vg/undostat.sql new file mode 100644 index 0000000..7bff43e --- /dev/null +++ b/vg/undostat.sql @@ -0,0 +1,126 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Undo statistics +* Parameters : 1 - Number of hours (Optional) +* 2 - Instance Number (Optional) +* 3 - Whereclause +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 16-Dec-15 Vishal Gupta Add where clause as input +* 17-Oct-13 Vishal Gupta Fixed decode statement in errors columns +* and added SQL Id in the output +* 14-Mar-12 Vishal Gupta Parameterized heading and dividers +* 15-May-07 Vishal Gupta Formatted the output +* 05-Aug-06 Vishal Gupta First Draft +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ + +UNDEFINE NoOfHours +UNDEFINE inst_id +UNDEFINE WHERECLAUSE + +DEFINE NoOfHours="&&1" +DEFINE inst_id="&2" +DEFINE WHERECLAUSE="&3" + +COLUMN _NoOfHours NEW_VALUE NoOfHours NOPRINT +COLUMN _inst_id NEW_VALUE inst_id NOPRINT + +set term off +SELECT DECODE('&&NoOfHours','','10','&&NoOfHours') "_NoOfHours" + , DECODE('&&inst_id','','%','&&inst_id') "_inst_id" +FROM DUAL +; + +set term on + +/************************************ +* CONFIGURATION PARAMETERS +************************************/ + + +DEFINE COUNT_FORMAT=999,999,999 +DEFINE COUNT_DIVIDER="1" +DEFINE COUNT_HEADING="#" +--DEFINE COUNT_DIVIDER="1000" +--DEFINE COUNT_HEADING="#1000" +DEFINE BYTES_FORMAT="999,999" +DEFINE BYTES_DIVIDER="1024/1024" +DEFINE BYTES_HEADING="MB" +--DEFINE BYTES_DIVIDER="1024/1024/1024" +--DEFINE BYTES_HEADING="GB" +DEFINE TIME_FORMAT=9,999 +DEFINE TIME_DIVIDER="1" +DEFINE TIME_HEADING="sec" + + +PROMPT +Prompt ************************************************************** +Prompt * Undo Statistics +PROMPT * +PROMPT * Input Parameters +PROMPT * - Number of Hours = '&&NoOfHours' +PROMPT * - Instance Number = '&&inst_id' +PROMPT * - WHERE Clause = '&&WHERECLAUSE' +PROMPT ************************************************************** +PROMPT + + +COLUMN inst_id HEADING I# FORMAT 99 +COLUMN Hour HEADING "Hour|(YYYYMMDD-HH24)" FORMAT a15 +COLUMN tablespace_name HEADING "TableSpace" FORMAT a15 +COLUMN "ActiveSize" HEADING "Active|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN UndoSize HEADING "Undo|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN ExpiredSize HEADING "Expired|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN UnExpiredSize HEADING "UnExpired|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN ExpiredRelSize HEADING "Expired|Rel|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT +COLUMN MAXCONCURRENCY HEADING "Max |Concurrent|txn|(#)" FORMAT &COUNT_FORMAT +COLUMN TXNCOUNT HEADING "Total|txn|(#)" FORMAT &COUNT_FORMAT +COLUMN MAXQUERYLEN HEADING "Max Query|Length|(sec)" FORMAT &BYTES_FORMAT +COLUMN MAXQUERYID HEADING "Max SQL Id" FORMAT a13 +COLUMN tuned_undoretention HEADING "Tuned|Undo" FORMAT 9999999 +COLUMN NOSPACEERRCNT HEADING "nospace|errors|(#)" FORMAT a10 +COLUMN SSOLDERRCNT HEADING "ORA-01555|errors|(#)" FORMAT a10 + +--BREAK ON "Hour" + +select to_char(a.BEGIN_TIME, 'YYYYMMDD-HH24') "Hour" + , a.INST_ID + , t.tablespace_name +&&_IF_ORA_10gR1_OR_HIGHER , ROUND(SUM(A.ACTIVEBLKS * t.block_size ) / &BYTES_DIVIDER ) "ActiveSize" + , ROUND(SUM(A.UNDOBLKS * t.block_size ) / &BYTES_DIVIDER ) "UndoSize" +&&_IF_ORA_10gR1_OR_HIGHER , ROUND(SUM(A.EXPIREDBLKS * t.block_size ) / &BYTES_DIVIDER ) "EXPIREDSize" + , ROUND(SUM(A.EXPBLKRELCNT * t.block_size ) / &BYTES_DIVIDER ) "EXPIREDRelSize" +&&_IF_ORA_10gR1_OR_HIGHER , ROUND(SUM(A.UNEXPIREDBLKS * t.block_size ) / &BYTES_DIVIDER ) "UNEXPIREDSize" + , max(MAXCONCURRENCY) MAXCONCURRENCY + , sum(TXNCOUNT) TXNCOUNT + , max(a.MAXQUERYLEN) MAXQUERYLEN +&&_IF_ORA_10gR1_OR_HIGHER , max(a.MAXQUERYID) MAXQUERYID +&&_IF_ORA_10gR1_OR_HIGHER , max(a.tuned_undoretention) tuned_undoretention + , DECODE(sum(NOSPACEERRCNT),0,'',sum(NOSPACEERRCNT)) NOSPACEERRCNT + , DECODE(sum(SSOLDERRCNT),0,'',sum(SSOLDERRCNT)) SSOLDERRCNT +from gv$undostat a + LEFT OUTER JOIN v$tablespace t2 ON a.undotsn = t2.ts# + LEFT OUTER JOIN dba_tablespaces t ON t2.name = t.tablespace_name +where a.inst_Id LIKE DECODE('&&inst_id',NULL,'%','','%','&&inst_id') + AND a.begin_time > (sysdate - (&NoOfHours)/24 ) + &&WHERECLAUSE +group by to_char(a.BEGIN_TIME, 'YYYYMMDD-HH24') + , a.INST_ID + , a.undotsn + , t.tablespace_name +order by 1,2 +/ + +@@footer diff --git a/vg/unused_space.sql b/vg/unused_space.sql new file mode 100644 index 0000000..1641b24 --- /dev/null +++ b/vg/unused_space.sql @@ -0,0 +1,64 @@ +@@header +/* +* +* Author : Vishal Gupta +* Purpose : Display Unused space in a segment +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 27-Nov-07 Vishal Gupta First Draft +*/ + +set serveroutput on +set numf 999,999,999,999 +set verify off + +define SEGMENT_OWNER="&&1" +define SEGMENT_NAME="&&2" +define SEGMENT_TYPE="&&3" +--define PARTITION_NAME="&&4" + +DECLARE +l_total_blocks NUMBER; +l_total_bytes NUMBER; +l_unused_blocks NUMBER; +l_unused_bytes NUMBER; +l_last_used_extent_file_id NUMBER; +l_last_used_extent_block_id NUMBER; +l_last_used_block NUMBER; +BEGIN +DBMS_SPACE.UNUSED_SPACE ( +'&&SEGMENT_OWNER' +,'&&SEGMENT_NAME' +,'&&SEGMENT_TYPE' +,l_total_blocks +,l_total_bytes +,l_unused_blocks +,l_unused_bytes +,l_last_used_extent_file_id +,l_last_used_extent_block_id +,l_last_used_block +,'&&PARTITION_NAME' +); +DBMS_OUTPUT.PUT_line(' ' ); +DBMS_OUTPUT.PUT_line(' ' ); +DBMS_OUTPUT.PUT_line('Segment Owner : ' || '&&SEGMENT_OWNER' ); +DBMS_OUTPUT.PUT_line('Segment Name : ' || '&&SEGMENT_NAME' ); +DBMS_OUTPUT.PUT_line('Segment Type : ' || '&&SEGMENT_TYPE' ); +DBMS_OUTPUT.PUT_line('Total Blocks : ' || TO_CHAR(l_total_blocks,'999,999,999,999,999') ); +DBMS_OUTPUT.PUT_line('Total Bytes : ' || TO_CHAR(l_total_bytes,'999,999,999,999,999')); +DBMS_OUTPUT.PUT_line('Total unused blocks : ' || TO_CHAR(l_unused_blocks,'999,999,999,999,999')); +DBMS_OUTPUT.PUT_line('Total unused bytes : ' || TO_CHAR(l_unused_bytes,'999,999,999,999,999')); +DBMS_OUTPUT.PUT_line('Last used extent file id : ' || TO_CHAR(l_last_used_extent_file_id,'999,999,999,999,999')); +DBMS_OUTPUT.PUT_line('Last used extend Block id : ' || TO_CHAR(l_last_used_extent_block_id,'999,999,999,999,999')); +DBMS_OUTPUT.PUT_line('Last used extend Block : ' || TO_CHAR(l_last_used_block,'999,999,999,999,999')); +END; +/ + +undefine SEGMENT_OWNER +undefine SEGMENT_NAME +undefine SEGMENT_TYPE + +@@footer \ No newline at end of file diff --git a/vg/uptime.sql b/vg/uptime.sql new file mode 100644 index 0000000..fca5040 --- /dev/null +++ b/vg/uptime.sql @@ -0,0 +1,42 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display startup time for all instances +* Parameters : NONE +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 11-May-12 Vishal Gupta Intial version +* +*/ + +PROMPT *********************************************************************** +PROMPT * I N S T A N C E U P T I M E +PROMPT *********************************************************************** + +COLUMN Inst_id HEADING "I#" FORMAT 99 +COLUMN instance_name HEADING "Instance|Name" FORMAT a10 +COLUMN status HEADING "Instance|Status" FORMAT a10 +COLUMN host_name HEADING "Hostname" FORMAT a15 TRUNCATE +COLUMN startup_time HEADING "StartupTime" FORMAT a18 +COLUMN uptime1 HEADING "Uptime|(Days)" FORMAT 9999 JUSTIFY RIGHT +COLUMN uptime2 HEADING "Uptime" FORMAT a18 JUSTIFY RIGHT + +select inst_id + , instance_name + , SUBSTR(host_name,1,DECODE(instr(host_name,'.'),0,LENGTH(host_name),instr(host_name,'.')-1)) host_name + , to_char(startup_time,'DD-MON-YY HH24:MI:SS') startup_time + --, ROUND(sysdate - startup_time, 2) uptime1 + , LPAD(FLOOR(sysdate - startup_time) || 'd ' + || LPAD(FLOOR(MOD((sysdate - startup_time) , 1) * 24 ) ,2) || 'h ' + || LPAD(FLOOR(MOD((sysdate - startup_time) * 24 , 1) * 60 ) ,2) || 'm ' + || LPAD(FLOOR(MOD((sysdate - startup_time) * 24 * 60 , 1) * 60 ) ,2) || 's' + , 18) uptime2 +from gv$instance order by 1; + +@@footer diff --git a/vg/user_info.sql b/vg/user_info.sql new file mode 100644 index 0000000..d00050c --- /dev/null +++ b/vg/user_info.sql @@ -0,0 +1,85 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display DB User Information +* Parameters : 1 - DBUserName (Use % as wildcard, Default value '%') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 24-May-16 Vishal Gupta Added version specific output logic +* 05-Apr-13 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE USERNAME +DEFINE USERNAME="&&1" + +set term off +COLUMN _USERNAME NEW_VALUE USERNAME NOPRINT +SELECT DECODE('&&USERNAME','','%','&&USERNAME') "_USERNAME" +FROM DUAL; +set term on + + +PROMPT ***************************************************************** +PROMPT * D A T A B A S E U S E R I N F O R M A T I O N +PROMPT * +PROMPT * Input Parameters +PROMPT * - User Name = '&&USERNAME' +PROMPT ***************************************************************** +PROMPT +PROMPT + +set pages 0 +SELECT /* First Column */ + TRIM(SUBSTR('User Id : ' || u.user_id ,1,70)) || chr(10) + || TRIM(SUBSTR('DB UserName : ' || u.username ,1,70)) || chr(10) + || TRIM(SUBSTR('External Name : ' || u.external_name ,1,70)) || chr(10) + || TRIM(SUBSTR('Created : ' || TO_CHAR(u.created,'DD-MON-YYYY HH24:MI:SS') ,1,70)) || chr(10) + || TRIM(SUBSTR('Account Status : ' || u.account_status ,1,70)) || chr(10) + || TRIM(SUBSTR('Lock Date : ' || TO_CHAR(u.lock_date,'DD-MON-YYYY HH24:MI:SS') ,1,70)) || chr(10) + || TRIM(SUBSTR('Password Expiry Date : ' || TO_CHAR(u.expiry_date,'DD-MON-YYYY HH24:MI:SS') ,1,70)) || chr(10) + || TRIM(SUBSTR('Default Tablespace : ' || u.default_tablespace ,1,70)) || chr(10) + || TRIM(SUBSTR('Temporary Tablespace : ' || u.temporary_tablespace ,1,70)) || chr(10) + || TRIM(SUBSTR('Profile : ' || u.profile ,1,70)) || chr(10) +&&_IF_ORA_11gR1_OR_HIGHER || TRIM(SUBSTR('Password Versions : ' || u.password_versions ,1,70)) || chr(10) + || TRIM(SUBSTR('Resource Consumer Group : ' || u.initial_rsrc_consumer_group ,1,70)) || chr(10) +&&_IF_ORA_11gR2_OR_HIGHER || TRIM(SUBSTR('Authentication Type : ' || u.authentication_type ,1,70)) || chr(10) +&&_IF_ORA_11gR1_OR_HIGHER || TRIM(SUBSTR('Editions Enabled : ' || u.editions_enabled ,1,70)) || chr(10) + column1 + FROM dba_users u +WHERE UPPER(u.username) = UPPER('&&USERNAME') +; +set pages 150 + +PROMPT ********************** +PROMPT * TABLESPACE QUOTAS +PROMPT ********************** + + +COLUMN username HEADING "UserName" FORMAT a25 +COLUMN tablespace_name HEADING "TablespaceName" FORMAT a30 +COLUMN bytes HEADING "Used(MB)" FORMAT 999,999,999 +COLUMN max_bytes HEADING "MaxQuota(MB)" FORMAT a15 +COLUMN dropped HEADING "Dropped" FORMAT a7 + +SELECT q.username + , q.tablespace_name + , ROUND((q.bytes)/power(1024,2)) bytes + , DECODE(q.max_bytes,'-1','Unlimited',TO_CHAR(ROUND(q.max_bytes/power(1024,2)),'999,999,999')) max_bytes + , q.dropped + FROM dba_ts_quotas q + , dba_users u + WHERE u.username = q.username + AND UPPER(u.username) = UPPER('&&USERNAME') +; + +@@footer \ No newline at end of file diff --git a/vg/user_password_history.sql b/vg/user_password_history.sql new file mode 100644 index 0000000..3246414 --- /dev/null +++ b/vg/user_password_history.sql @@ -0,0 +1,51 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display User Password history +* Parameters : 1 - DBUserName (Use % as wildcard, Default value '%') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 26-May-16 Vishal Gupta Created +* +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE USERNAME +DEFINE USERNAME="&&1" + +set term off +COLUMN _USERNAME NEW_VALUE USERNAME NOPRINT +SELECT DECODE('&&USERNAME','','%','&&USERNAME') "_USERNAME" +FROM DUAL; +set term on + + +PROMPT ************************************************ +PROMPT * User Password History +PROMPT * +PROMPT * Input Parameters +PROMPT * - User Name = '&&USERNAME' +PROMPT ************************************************ +PROMPT +PROMPT + +SELECT u.username + , h.password + , h.password_date + FROM dba_users u + JOIN sys.user_history$ h ON h.user# = u.user_id +WHERE UPPER(u.username) = UPPER('&&USERNAME') +ORDER BY u.username + , h.password_date +; + + +@@footer \ No newline at end of file diff --git a/vg/user_proxy.sql b/vg/user_proxy.sql new file mode 100644 index 0000000..8d678ec --- /dev/null +++ b/vg/user_proxy.sql @@ -0,0 +1,74 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display list of proxy users +* Parameters : 1 - Username (Use % as wildcard, Default value '%') +* 2 - Proxy (Use % as wildcard, Default value '%') +* 3 - Flags +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 19-Sep-16 Vishal Gupta Created +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE USERNAME +UNDEFINE PROXY +UNDEFINE FLAGS + + +DEFINE USERNAME="&&1" +DEFINE PROXY="&&2" +DEFINE FLAGS="&&3" + + +set term off +COLUMN _USERNAME NEW_VALUE USERNAME NOPRINT +COLUMN _PROXY NEW_VALUE PROXY NOPRINT +COLUMN _FLAGS NEW_VALUE FLAGS NOPRINT + +SELECT DECODE('&&USERNAME','','%',UPPER('&&USERNAME')) "_USERNAME" + , DECODE('&&PROXY','','%',UPPER('&&PROXY')) "_PROXY" + , DECODE('&&FLAGS','','%',UPPER('&&FLAGS')) "_FLAGS" +FROM DUAL; +set term on + + +PROMPT ***************************************************************** +PROMPT * D A T A B A S E U S E R S +PROMPT * +PROMPT * Input Parameters +PROMPT * - User Name = '&&USERNAME' +PROMPT * - Proxy = '&&PROXY' +PROMPT * - Flags = '&&FLAGS' +PROMPT ***************************************************************** +PROMPT +PROMPT + +COLUMN client HEADING "UserName" FORMAT a30 +COLUMN proxy HEADING "Proxy" FORMAT a30 +COLUMN flags HEADING "Flags" FORMAT a60 + + +SELECT u.client + , u.proxy + , u.authentication + , u.flags + FROM proxy_users u +WHERE 1=1 + AND UPPER(u.proxy) LIKE UPPER('&&PROXY') + AND UPPER(u.client) LIKE UPPER('&&USERNAME') + AND UPPER(u.flags) LIKE UPPER('&&FLAGS') +ORDER BY u.client + , u.proxy +; + + +@@footer \ No newline at end of file diff --git a/vg/user_trace_files.sql b/vg/user_trace_files.sql new file mode 100644 index 0000000..a70aea6 --- /dev/null +++ b/vg/user_trace_files.sql @@ -0,0 +1,32 @@ +/* + This script is to list the trace file name for every process. It takes the SPID and displays the complete trace file name, if one would exists. +*/ + +SET echo OFF lines 150 +COLUMN username FORMAT a10 +COLUMN trace_file FORMAT a70 + +SELECT s.username + , s.sid + , s.serial# + , p.spid + , udump.VALUE + || DECODE ( SIGN ( INSTR ( udump.VALUE, '\' ) - 0 ) + -- If `\` exists in path then use '\' as directory separator + ,1, '\' + , '/' + ) + || LOWER ( db.VALUE ) + || '_ora_' + || TO_CHAR ( p.spid, 'fm00000' ) + || '.trc' "TRACE_FILE" + FROM v$process p + , v$session s + , v$parameter udump + , v$parameter db + WHERE p.addr = s.paddr + AND udump.NAME = 'user_dump_dest' + AND db.NAME = 'db_name' + AND s.username IS NOT NULL; + +SET echo ON diff --git a/vg/userhitratio.sql b/vg/userhitratio.sql new file mode 100644 index 0000000..7c8a80f --- /dev/null +++ b/vg/userhitratio.sql @@ -0,0 +1,31 @@ +SET lines 1000 +SET pagesize 32767 +TTITLE "###### Hit Ratio for Each User ###### " + +COLUMN sid FORMAT 9999 +COLUMN username FORMAT a10 +COLUMN osuser FORMAT a10 +COLUMN logon_time FORMAT a14 +COLUMN sql_text FORMAT a50 +COLUMN "%Hit" FORMAT 999.99 + +select s.sid + , s.username + , s.osuser + , to_char(s.logon_time,'DD-MM-YY HH24:MI') logon_time + , round(100* (1 - (io.physical_reads/ (io.block_gets + io.consistent_gets))),2) "%Hit" + , io.physical_reads + , st.sql_text +from v$session s, v$sess_io io, v$sqltext_with_newlines st +where s.sql_address = st.address +and s.sql_hash_value = st.hash_value +and s.sid = io.sid +and io.block_gets + io.consistent_gets > 0 +and s.username is not null +order by 5 desc +/ + +SET lines 80 +SET pagesize 80 +TTITLE OFF + diff --git a/vg/users.sql b/vg/users.sql new file mode 100644 index 0000000..2b50f04 --- /dev/null +++ b/vg/users.sql @@ -0,0 +1,70 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display list of users +* Parameters : 1 - DBUserName (Use % as wildcard, Default value '%') +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 19-May-16 Vishal Gupta Created +*/ + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE USERNAME +DEFINE USERNAME="&&1" + +set term off +COLUMN _USERNAME NEW_VALUE USERNAME NOPRINT +SELECT DECODE('&&USERNAME','','%','&&USERNAME') "_USERNAME" +FROM DUAL; +set term on + + +PROMPT ***************************************************************** +PROMPT * D A T A B A S E U S E R S +PROMPT * +PROMPT * Input Parameters +PROMPT * - User Name = '&&USERNAME' +PROMPT ***************************************************************** +PROMPT +PROMPT + +COLUMN user_id HEADING "Id" FORMAT 99999999 +COLUMN username HEADING "UserName" FORMAT a25 +COLUMN external_name HEADING "Ext Name" FORMAT a15 +COLUMN created HEADING "Created" FORMAT a15 +COLUMN account_status HEADING "Status" FORMAT a20 TRUNC +COLUMN lock_date HEADING "LockDate" FORMAT a15 +COLUMN expiry_date HEADING "ExpiryDate" FORMAT a15 +COLUMN profile HEADING "Profile" FORMAT a15 TRUNC +COLUMN default_tablespace HEADING "Def TBS" FORMAT a25 TRUNC +COLUMN temporary_tablespace HEADING "Temp TBS" FORMAT a25 TRUNC +COLUMN initial_rsrc_consumer_group HEADING "Resource|Group" FORMAT a25 TRUNC + + + +SELECT u.user_id + , u.username + , u.external_name + , TO_CHAR(u.created,'DD-MON-YY HH24:MI') created + , u.account_status + , TO_CHAR(u.lock_date,'DD-MON-YY HH24:MI') lock_date + , TO_CHAR(u.expiry_date,'DD-MON-YY HH24:MI') expiry_date + , u.profile + , u.default_tablespace + , u.temporary_tablespace + , u.initial_rsrc_consumer_group + FROM dba_users u +WHERE UPPER(u.username) LIKE UPPER('&&USERNAME') +ORDER BY u.username +; + + +@@footer \ No newline at end of file diff --git a/vg/utl_smtp.sql b/vg/utl_smtp.sql new file mode 100644 index 0000000..34b184e --- /dev/null +++ b/vg/utl_smtp.sql @@ -0,0 +1,28 @@ +DECLARE + c Utl_Smtp.connection; + + PROCEDURE send_header(NAME IN VARCHAR2, HEADER IN VARCHAR2) AS + BEGIN + Utl_Smtp.write_data(c, NAME || ': ' || HEADER || Utl_Tcp.CRLF); + END; + +BEGIN + c := Utl_Smtp.open_connection('192.168.1.10'); + Utl_Smtp.helo(c, 'vishalgupta.co.uk'); + Utl_Smtp.mail(c, 'vishal@vishalgupta.co.uk'); + Utl_Smtp.rcpt(c, 'vishal@vishalgupta.co.uk'); + Utl_Smtp.open_data(c); + send_header('From', '"Sender" '); + send_header('To', '"Recipient" '); + send_header('Subject', 'Hello'); + Utl_Smtp.write_data(c, Utl_Tcp.CRLF || 'Hello, world!'); + Utl_Smtp.close_data(c); + Utl_Smtp.quit(c); +EXCEPTION + WHEN Utl_Smtp.transient_error OR Utl_Smtp.permanent_error THEN + Utl_Smtp.quit(c); + RAISE_APPLICATION_ERROR(-20000, + 'Failed to send mail due to the following error: ' || SQLERRM); +END; +/ + diff --git a/vg/viewtext.sql b/vg/viewtext.sql new file mode 100644 index 0000000..dd997d3 --- /dev/null +++ b/vg/viewtext.sql @@ -0,0 +1,68 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display view's query +* Parameters : 1 - OWNER, this could also be passed as OWNER.view_name +* 2 - VIEW_NAME +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Intial version +* 02-Jul-12 Vishal Gupta Modified to allow pass OWNER, VIEW_NAME either as separate input +* or as single input joined as owner.view_name +* +* +*/ + +/************************************ +* INPUT PARAMETERS +************************************/ +DEFINE OWNER="&&1" +DEFINE VIEW_NAME="&&2" + + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _view_name NEW_VALUE view_name NOPRINT + +set term off +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END ) "_owner" + , DECODE(UPPER('&&view_name'),'',SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1),UPPER('&&view_name')) "_view_name" +FROM DUAL; +set term on + + +Prompt +Prompt ************************************************************ +Prompt ** View &OWNER..&VIEW_NAME's Query Text +Prompt ************************************************************ + + +COLUMN text HEADING "Query" FORMAT a150 + +set long 400000 +set pages 1000 + +SELECT TEXT + FROM dba_views v +WHERE v.owner = '&&owner' + AND v.view_name = '&&view_name' +; + +SELECT view_definition text + FROM v$fixed_view_definition v +WHERE 'SYS' = '&&owner' + AND v.view_name = '&&view_name' + +; + +UNDEFINE OWNER +UNDEFINE VIEW_NAME + + +@@footer diff --git a/vg/viewtext_search.sql b/vg/viewtext_search.sql new file mode 100644 index 0000000..a98a0a5 --- /dev/null +++ b/vg/viewtext_search.sql @@ -0,0 +1,103 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display view's query +* Parameters : 1 - Search Text (% - wildchar, \ - escape char) +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 15-May-12 Vishal Gupta Initial version +* +* +*/ + + + +/************************************ +* INPUT PARAMETERS +************************************/ +UNDEFINE OWNER +UNDEFINE view_name +UNDEFINE searchtext + +DEFINE OWNER="&&1" +DEFINE view_name="&&2" +DEFINE searchtext="&&3" + + +COLUMN _owner NEW_VALUE owner NOPRINT +COLUMN _view_name NEW_VALUE view_name NOPRINT +COLUMN _searchtext NEW_VALUE searchtext NOPRINT + +set term off +SELECT SUBSTR(UPPER('&&owner'), 1 , CASE INSTR('&&owner','.') WHEN 0 THEN LENGTH ('&&owner') ELSE INSTR('&&owner','.') - 1 END ) "_owner" + , DECODE(UPPER('&&view_name'),'',SUBSTR(UPPER('&&owner'),INSTR('&&owner','.')+1),UPPER('&&view_name')) "_view_name" + , UPPER('&&searchtext') "_searchtext" + +FROM DUAL +; + +set term on + + +PROMPT ***************************************************** +PROMPT * View Definition Search Results +PROMPT * +PROMPT * Input Parameters +PROMPT * - Owner = '&&owner' +PROMPT * - View Name = '&&view_name' +PROMPT * - Search Criteria = '&&searchtext' +PROMPT ***************************************************** + + + +COLUMN text HEADING "Query" FORMAT a150 + +set long 400000 +set pages 1000 + +-------------------------------------------------------------------- +-- Had to use XML as pattern matching does not work on LONG datatype +-- Also there is no direct function convert LONG to VARCHAR2 +-------------------------------------------------------------------- +select * +from + xmltable( '/ROWSET/ROW' + passing dbms_xmlgen.getXMLType(q'[SELECT v.owner + , v.view_name + , v.text + FROM dba_views v + WHERE v.owner like '&&owner' + AND v.view_name like '&&view_name' + ]' + ) + columns + owner varchar2(30) + , view_name varchar2(30) + , text varchar2(4000) + ) v2 +WHERE 1=1 + AND v2.owner like '&&owner' ESCAPE '\' + AND v2.view_name like '&&view_name' ESCAPE '\' + AND UPPER(v2.TEXT) like upper('&&searchtext') ESCAPE '\' +; + + + +SELECT 'SYS' owner + , v.view_name + , v.view_definition text + FROM v$fixed_view_definition v + WHERE 1=1 + AND 'SYS' like '&&owner' ESCAPE '\' + AND v.view_name like '&&view_name' ESCAPE '\' + AND UPPER(v.view_definition) like upper('&&searchtext') ESCAPE '\' +; + + +@@footer diff --git a/vg/watch.sql b/vg/watch.sql new file mode 100644 index 0000000..fede653 --- /dev/null +++ b/vg/watch.sql @@ -0,0 +1,2903 @@ + +/* +* +* Author : Vishal Gupta +* Purpose : Execute passed input in a loop. +* Parameter : 1 - Interval (in seconds) +* 2 - Name of the command to run +* 3 - Command and its arguments +* 4 - Command and its arguments +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 24-May-12 Vishal Gupta First Draft +* +*/ + +set feed off +set verify off + +UNDEFINE INTERVAL +UNDEFINE command +UNDEFINE arg1 +UNDEFINE arg2 +UNDEFINE arg3 +UNDEFINE arg4 +UNDEFINE arg5 +UNDEFINE arg6 +UNDEFINE arg7 +UNDEFINE arg8 + +DEFINE INTERVAL="&&1" +DEFINE command="&&2" +DEFINE arg1="&&3" +DEFINE arg2="&&4" +DEFINE arg3="&&5" +DEFINE arg4="&&6" +DEFINE arg5="&&7" +DEFINE arg6="&&8" +DEFINE arg7="&&9" +DEFINE arg8="&&10" + +UNDEFINE 1 +UNDEFINE 2 +UNDEFINE 3 +UNDEFINE 4 +UNDEFINE 5 +UNDEFINE 6 +UNDEFINE 7 +UNDEFINE 8 +UNDEFINE 9 +UNDEFINE 10 + + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +exec dbms_lock.sleep(&&INTERVAL) + +set feed on + + diff --git a/vg/watch2.sql b/vg/watch2.sql new file mode 100644 index 0000000..4d68eea --- /dev/null +++ b/vg/watch2.sql @@ -0,0 +1,2904 @@ + +/* +* +* Author : Vishal Gupta +* Purpose : Execute passed input in a loop. +* Parameter : 1 - Interval (in seconds) +* 2 - Name of the command to run +* 3 - Command and its arguments +* 4 - Command and its arguments +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 24-May-12 Vishal Gupta First Draft +* +*/ + +set feed off +set verify off + + +UNDEFINE INTERVAL +UNDEFINE command +UNDEFINE arg1 +UNDEFINE arg2 +UNDEFINE arg3 +UNDEFINE arg4 +UNDEFINE arg5 +UNDEFINE arg6 +UNDEFINE arg7 +UNDEFINE arg8 + +DEFINE INTERVAL="&&1" +DEFINE command="&&2" +DEFINE arg1="&&3" +DEFINE arg2="&&4" +DEFINE arg3="&&5" +DEFINE arg4="&&6" +DEFINE arg5="&&7" +DEFINE arg6="&&8" +DEFINE arg7="&&9" +DEFINE arg8="&&10" + +UNDEFINE 1 +UNDEFINE 2 +UNDEFINE 3 +UNDEFINE 4 +UNDEFINE 5 +UNDEFINE 6 +UNDEFINE 7 +UNDEFINE 8 +UNDEFINE 9 +UNDEFINE 10 + + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +@@watch_header.sql +@&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" "&&arg8" +host sleep &&INTERVAL + +set feed on + + diff --git a/vg/watch_header.sql b/vg/watch_header.sql new file mode 100644 index 0000000..e90daac --- /dev/null +++ b/vg/watch_header.sql @@ -0,0 +1,13 @@ +COLUMN _timestamp new_value timestamp NOPRINT + +set term off +SELECT systimestamp "_timestamp" + FROM DUAL; +set term on + +PROMPT ********************************************************************************************* +PROMPT * Date - &×tamp +PROMPT * Running - @&&command "&&arg1" "&&arg2" "&&arg3" "&&arg4" "&&arg5" "&&arg6" "&&arg7" +PROMPT ********************************************************************************************* + + diff --git a/vg/who_dblink.sql b/vg/who_dblink.sql new file mode 100644 index 0000000..35e2e29 --- /dev/null +++ b/vg/who_dblink.sql @@ -0,0 +1,30 @@ +-- who is querying via dblink? +-- Courtesy of Tom Kyte, via Mark Bobak +-- this script can be used at both ends of the database link +-- to match up which session on the remote database started +-- the local transaction +-- the GTXID will match for those sessions +-- just run the script on both databases + +Select /*+ ORDERED */ +substr(s.ksusemnm,1,10)||'-'|| substr(s.ksusepid,1,10) "ORIGIN", +substr(g.K2GTITID_ORA,1,35) "GTXID", +substr(s.indx,1,4)||'.'|| substr(s.ksuseser,1,5) "LSESSION" , +s2.username, +substr( + decode(bitand(ksuseidl,11), + 1,'ACTIVE', + 0, decode( bitand(ksuseflg,4096) , 0,'INACTIVE','CACHED'), + 2,'SNIPED', + 3,'SNIPED', + 'KILLED' + ),1,1 +) "S", +substr(w.event,1,10) "WAITING" +from x$k2gte g, x$ktcxb t, x$ksuse s, v$session_wait w, v$session s2 +where g.K2GTDXCB =t.ktcxbxba +and g.K2GTDSES=t.ktcxbses +and s.addr=g.K2GTDSES +and w.sid=s.indx +and s2.sid = w.sid +/ diff --git a/vg/whoami.sql b/vg/whoami.sql new file mode 100644 index 0000000..ef8e87c --- /dev/null +++ b/vg/whoami.sql @@ -0,0 +1,52 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display current session's details +* Parameters : NONE +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 11-Feb-15 Vishal Gupta Shortened columns output width +* 20-Apr-12 Vishal Gupta Created +* +*/ + +COLUMN SID FORMAT 99999 +COLUMN PID FORMAT 999999 +COLUMN SPID FORMAT a6 +COLUMN Process FORMAT a11 +COLUMN instance_number HEADING "I#" FORMAT 99 +COLUMN serial# HEADING "Serial#" FORMAT 99999 +COLUMN database_role HEADING "Database|Role" FORMAT a9 +COLUMN db_unique_name HEADING "DB Unique|Name" FORMAT a20 +COLUMN instance_name HEADING "Instance|Name" FORMAT a10 +COLUMN host_name HEADING "DB HostName" FORMAT a15 TRUNCATE +COLUMN machine HEADING "Client|Machine" FORMAT a20 TRUNCATE +COLUMN program HEADING "Client|Program" FORMAT a15 TRUNCATE +COLUMN process HEADING "Client|Process" FORMAT a15 + +SELECT s.sid + , i.instance_number + , s.serial# + , p.pid + , p.spid + , d.database_role + , d.db_unique_name + , i.instance_name + , i.host_name + , s.machine + , s.program + , s.process +FROM v$instance i + JOIN v$database d ON 1=1 + JOIN (select sid from v$mystat where rownum = 1) m ON 1=1 + JOIN v$session s ON s.sid = m.sid + JOIN v$process p ON p.addr = s.paddr +WHERE 1=1 +; + +@@footer diff --git a/vg/xplan.sql b/vg/xplan.sql new file mode 100644 index 0000000..9c274c6 --- /dev/null +++ b/vg/xplan.sql @@ -0,0 +1,52 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Execution plan from cursor cache +* Parameters : 1 - SQL_ID +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 18-Mar-12 Vishal Gupta Intial version +* +* +*/ + + + +DEFINE sql_id="&&1" +DEFINE child_number="&&2" + + + +COLUMN _sql_id NEW_VALUE sql_id NOPRINT +COLUMN _child_number NEW_VALUE child_number NOPRINT + +SELECT DECODE('&&sql_id','','%','&&sql_id') "_sql_id" + , DECODE('&&child_number','','NULL','&&child_number') "_child_number" +FROM DUAL +; + + + +SET long 4000 +SET longchunksize 4000 +SET pagesize 0 + +SELECT * +FROM table(DBMS_XPLAN.display_cursor( sql_id => '&&sql_id' + , cursor_child_no => &&child_number + , format => 'ADVANCED ALLSTATS LAST' + ) + ) +; + +UNDEFINE sql_id +UNDEFINE child_number + + +@@footer diff --git a/vg/xplan2.sql b/vg/xplan2.sql new file mode 100644 index 0000000..f1209ba --- /dev/null +++ b/vg/xplan2.sql @@ -0,0 +1,44 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Execution plan from cursor cache +* Parameters : 1 - SQL_ID +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 18-Mar-12 Vishal Gupta Intial version +* +* +*/ + +SET verify OFF + +VARIABLE sql_id VARCHAR2(13) +VARIABLE child_number NUMBER + +BEGIN + :sql_id := '&&1'; + :child_number := NULL; +END; +/ + + +SET long 4000 +SET longchunksize 4000 + + +SELECT * +FROM table(DBMS_XPLAN.display_cursor( sql_id => :sql_id + , cursor_child_no => :child_number + , format => 'ADVANCED' + ) + ) +; + + +@@footer diff --git a/vg/xplan_bysqltext.sql b/vg/xplan_bysqltext.sql new file mode 100644 index 0000000..310f14e --- /dev/null +++ b/vg/xplan_bysqltext.sql @@ -0,0 +1,50 @@ +@@header + +/* +* +* Author : Vishal Gupta +* Purpose : Display Execution plan from cursor cache +* Parameters : 1 - SQL_ID +* +* +* Revision History: +* =================== +* Date Author Description +* --------- ------------ ----------------------------------------- +* 18-Mar-12 Vishal Gupta Intial version +* +* +*/ + +SET verify OFF + +VARIABLE sql_id VARCHAR2(13) +VARIABLE child_number NUMBER + +BEGIN + :sql_id := '&&1'; + :child_number := NULL; +END; +/ + + +SET long 4000 +SET longchunksize 4000 + + +EXPLAIN PLAN set statement_id = 'VISHAL_EXPLAIN_PLAN' +FOR +SELECT NVL(SUM(BYTES),0)/(1024*1024) FREE_BYTES FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME = 'SYSAUX' +; + + + +SELECT * +FROM table(DBMS_XPLAN.display( statement_id => 'VISHAL_EXPLAIN_PLAN' + , format => 'ADVANCED' + ) + ) +; + + +@@footer diff --git a/vg/zfssa_monitoring_objects_creation.sql b/vg/zfssa_monitoring_objects_creation.sql new file mode 100644 index 0000000..50953cb --- /dev/null +++ b/vg/zfssa_monitoring_objects_creation.sql @@ -0,0 +1,348 @@ +/* + Following objects need to be created to capture ZFSSA monitoring data +*/ + + + +/* +To capture ZFS pool space usage +*/ +create table zfs_pool_space +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , pool_name VARCHAR2(20) NOT NULL + , used NUMBER NOT NULL + , avail NUMBER NOT NULL + , compression NUMBER + , dedup NUMBER +) +partition by RANGE (capture_time) INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) +( + PARTITION part_01 values LESS THAN (TO_DATE('01-APR-2015','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_pool_space + add constraint zfs_pool_space_pk + primary key (capture_time, zfssa_nodename, pool_name) + using index LOCAL + PCTFREE 0 +; + +/* +To capture ZFS project space usage +*/ +create table zfs_project_space +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , pool_name VARCHAR2(20) NOT NULL + , project_name VARCHAR2(30) NOT NULL + , space_total NUMBER NOT NULL + , space_data NUMBER NOT NULL + , space_available NUMBER NOT NULL + , space_snapshots NUMBER NOT NULL + , space_unused_res NUMBER NOT NULL + , space_unused_res_shares NUMBER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(7,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('06-APR-2015','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_project_space + add constraint zfs_project_space_pk + primary key (capture_time, zfssa_nodename, pool_name, project_name) + using index LOCAL + PCTFREE 0 +; + +/* +To capture ZFS snapshot space usage +*/ +create table zfs_snapshot_space +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , pool_name VARCHAR2(20) NOT NULL + , project_name VARCHAR2(30) NOT NULL + , snapshot_name VARCHAR2(60) NOT NULL + , unique_space NUMBER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(7,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('06-APR-2015','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_snapshot_space + add constraint zfs_snapshot_space_pk + primary key (capture_time, zfssa_nodename, pool_name, project_name,snapshot_name) + using index LOCAL + PCTFREE 0 +; + + + +/* +To capture ZFS share space usage +*/ +create table zfs_share_space +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , pool_name VARCHAR2(20) NOT NULL + , project_name VARCHAR2(30) NOT NULL + , share_name VARCHAR2(30) NOT NULL + , space_total NUMBER NOT NULL + , space_data NUMBER NOT NULL + , space_available NUMBER NOT NULL + , space_snapshots NUMBER NOT NULL + , space_unused_res NUMBER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(7,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('06-APR-2015','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_share_space + add constraint zfs_share_space_pk + primary key (capture_time, zfssa_nodename, pool_name, project_name, share_name) + using index LOCAL + PCTFREE 0 +; + + +/* +To capture following dataset + Statistics = ip.bytes[hostname] + Description = Network: IP bytes per second broken down by hostname +*/ +create table zfs_ipbytes_by_host +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , hostname VARCHAR2(60) NOT NULL + , bytes_per_sec INTEGER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(1,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('01-SEP-2014','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_ipbytes_by_host + add constraint zfs_ipbytes_by_host_pk + primary key (capture_time, zfssa_nodename, hostname) + using index LOCAL + PCTFREE 0 +; + +/* +To capture following dataset + Statistics = nfs3.bytes[project] + Description = Protocol: NFSv3 bytes per second broken down by project +*/ +create table zfs_nfsv3_bytes_by_project +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , project VARCHAR2(60) NOT NULL + , bytes_per_sec INTEGER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(1,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('01-SEP-2014','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_nfsv3_bytes_by_project + add constraint zfs_nfsv3_bytes_by_project_pk + primary key (capture_time, zfssa_nodename, project) + using index LOCAL + PCTFREE 0 +; + + +/* +To capture following dataset + Statistics = nfs3.ops[project] + Description = Network: IP bytes per second broken down by hostname +*/ +create table zfs_nfsv3_ops_by_project +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , project VARCHAR2(60) NOT NULL + , ops_per_sec INTEGER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(1,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('01-SEP-2014','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_nfsv3_ops_by_project + add constraint zfs_nfsv3_ops_by_project_pk + primary key (capture_time, zfssa_nodename, project) + using index LOCAL + PCTFREE 0 +; + + + +/* +To capture following dataset + Statistics = nfs3.ops[share] + Description = Network: IP bytes per second broken down by hostname +*/ +create table zfs_nfsv3_ops_by_share +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , sharename VARCHAR2(60) NOT NULL + , ops_per_sec INTEGER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(1,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('01-SEP-2014','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_nfsv3_ops_by_share + add constraint zfs_nfsv3_ops_by_share_pk + primary key (capture_time, zfssa_nodename, sharename) + using index LOCAL + PCTFREE 0 +; + + +/* +To capture following dataset + Statistics = cpu.utilization + Description = CPU: percent utilization +*/ +create table zfs_cpu_utilization +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , util_percent INTEGER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(1,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('01-SEP-2014','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_cpu_utilization + add constraint zfs_cpu_utilization_pk + primary key (capture_time, zfssa_nodename ) + using index LOCAL + PCTFREE 0 +; + + + +/* +To capture following dataset + Statistics = + Description = +*/ + +create table zfs_nfsv3_operations +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , operations_persec INTEGER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(1,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('01-SEP-2014','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_nfsv3_operations + add constraint zfs_nfsv3_operations_pk + primary key (capture_time, zfssa_nodename ) + using index LOCAL + PCTFREE 0 +; + + +/* +To capture following dataset + Statistics = ndmp.diskkb + Description = Data Movement: NDMP bytes transferred to/from disk per second +*/ +create table zfs_ndmp_diskio +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , ndmp_diskkb INTEGER NOT NULL +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(1,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('01-SEP-2014','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_ndmp_diskio + add constraint zfs_ndmp_diskio_pk + primary key (capture_time, zfssa_nodename ) + using index LOCAL + PCTFREE 0 +; + + + +/* +To capture following dataset + Statistics = nic.kilobytes[direction] + Description = +*/ +create table zfs_network_stats +( + capture_time date NOT NULL + , zfssa_nodename VARCHAR2(20) NOT NULL + , in_kb INTEGER + , out_kb INTEGER +) +partition by RANGE (capture_time) INTERVAL (NUMTODSINTERVAL(1,'DAY')) +( + PARTITION part_01 values LESS THAN (TO_DATE('01-SEP-2014','DD-MON-YYYY')) +) +PCTFREE 0 +PCTUSED 99 +; + +alter table zfs_network_stats + add constraint zfs_network_stats_pk + primary key (capture_time, zfssa_nodename ) + using index LOCAL + PCTFREE 0 +; diff --git a/vg/zfssa_scripts.txt b/vg/zfssa_scripts.txt new file mode 100644 index 0000000..bc1dac5 --- /dev/null +++ b/vg/zfssa_scripts.txt @@ -0,0 +1,1238 @@ +//############################################################################################################ +//# Reference : +//# ZFSSA Scripting - http://docs.oracle.com/cd/E27998_01/html/E48433/user_interface__cli__scripting.html#scrolltoc +//# ZFSSA Analytics Guide - http://docs.oracle.com/cd/E27998_01/html/E48490/index.html +//# ECMA Script Doc - http://www.ecmascript.org/docs.php +//# ECMA Script Reference - http://qt-project.org/doc/qt-4.8/ecmascript.html +//# ECMA Script Reference - http://qt-project.org/doc/qt-4.8/ecmascript.html +//############################################################################################################# + + +//####################################### +//# ZFS Storage Appliance Scriptlets +//####################################### + + + //this is a single-line comment + /* this is a multiline + comment */ + +//################## +//# Sample Run +//################## +ssh -T ipaddress < inputscript.txt > output.txt + +or +ssh -T ipaddress <=Math.pow(1024,5)) {bytes=(bytes/Math.pow(1024,5)).toFixed(2)+'PB';} + else if (bytes>=Math.pow(1024,4)) {bytes=(bytes/Math.pow(1024,4)).toFixed(2)+'TB';} + else if (bytes>=Math.pow(1024,3)) {bytes=(bytes/Math.pow(1024,3)).toFixed(2)+'GB';} + else if (bytes>=Math.pow(1024,2)) {bytes=(bytes/Math.pow(1024,2)).toFixed(2)+'MB';} + else if (bytes>=Math.pow(1024,1)) {bytes=(bytes/Math.pow(1024,1)).toFixed(2)+'KB';} + else if (bytes>1) {bytes=bytes+' bytes';} + else if (bytes==1) {bytes=bytes+' byte';} + else {bytes='0 byte';} + return bytes; + } + + function SuffixToMultiplier(suffix) + { + switch (suffix) + { + case('K'): return Math.pow(1024,1); break; + case('M'): return Math.pow(1024,2); break; + case('G'): return Math.pow(1024,3); break; + case('T'): return Math.pow(1024,4); break; + case('P'): return Math.pow(1024,5); break; + default: return 1; break; + } + } + + function lpad(str, len, pad) { + if (typeof(len) == "undefined") { var len = 0; } + if (typeof(pad) == "undefined") { var pad = ' '; } + if (len + 1 >= str.length) { + str = Array(len + 1 - str.length).join(pad) + str; + } + return str; + } + function rpad(str, len, pad) { + if (typeof(len) == "undefined") { var len = 0; } + if (typeof(pad) == "undefined") { var pad = ' '; } + if (len + 1 >= str.length) { + str = str + Array(len + 1 - str.length).join(pad); + } + return str; + } + + function pad(str, len, pad, dir) { + if (typeof(len) == "undefined") { var len = 0; } + if (typeof(pad) == "undefined") { var pad = ' '; } + if (typeof(dir) == "undefined") { var dir = STR_PAD_RIGHT; } + if (len + 1 >= str.length) { + switch (dir){ + case STR_PAD_LEFT: str = Array(len + 1 - str.length).join(pad) + str; break; + case STR_PAD_BOTH: + var right = Math.ceil((padlen = len - str.length) / 2); + var left = padlen - right; + str = Array(left+1).join(pad) + str + Array(right+1).join(pad); + break; + default: str = str + Array(len + 1 - str.length).join(pad); + break; + + } // switch + } + return str; + } + +. + + + + +//####################################### +//# Dashboard View +//####################################### +cd / +status dashboard + +//####################################### +//# Show Status +//####################################### +cd / +status storage show +status memory show +status hardware show +status alerts show +status services show + +//####################################### +//# Show Resilver progress +//####################################### +cd / +configuration storage get scrub + + +//####################################### +//# Show Configuration +//####################################### +cd / +configuration version show +configuration storage show +configuration cluster show +configuration cluster resources show +script + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3] + run('configuration net datalinks'); + datalinks = list(); + var FORMAT='%-10s %-8s %-15s %-20s %-20s %-20s %-5s %-6s %-9s %-5s %-5s %-5s %-5s %-5s %-8s \n'; + printf(FORMAT,'ZFSSANode','Datalink','Class','Label','MAC','Links','MTU','policy','Mode','Timer','Key','Speed','Duplex','pkey','linkmode'); + printf(FORMAT,'=========','========','=====','=====','===','=====','===','======','====','=====','===','=====','======','====','========')'; + for (i = 0; i < datalinks.length; i++) + { + run('select ' + datalinks[i]); + var class = run('get class').split(/=/)[1].split(/\n/)[0].substr(1) ; + var label = run('get label').split(/=/)[1].split(/\n/)[0].substr(1) ; + var mac = run('get mac').split(/=/)[1].split(/\n/)[0].substr(1) ; + var links = run('get links').split(/=/)[1].split(/\n/)[0].substr(1) ; + var mtu = run('get mtu').split(/=/)[1].split(/\n/)[0].substr(1) ; + var policy = ''; + var mode = ''; + var timer = ''; + var key = ''; + var speed = ''; + var duplex = ''; + var pkey = ''; + var linkmode = ''; + if class = 'aggregation' + { + policy = run('get policy').split(/=/)[1].split(/\n/)[0].substr(1); + mode = run('get mode').split(/=/)[1].split(/\n/)[0].substr(1) ; + timer = run('get timer').split(/=/)[1].split(/\n/)[0].substr(1); + key = run('get key').split(/=/)[1].split(/\n/)[0].substr(1); + } + if class = 'device' + { + speed = run('get speed').split(/=/)[1].split(/\n/)[0].substr(1) ; + duplex = run('get duplex').split(/=/)[1].split(/\n/)[0].substr(1) ; + } + if class = 'partition' + { + pkey = run('get pkey').split(/=/)[1].split(/\n/)[0].substr(1) ; + linkmode = run('get linkmode').split(/=/)[1].split(/\n/)[0].substr(1) ; + } + printf(FORMAT, ZFSSA_NODENAME, datalinks[i], class, label, mac, links,mtu,policy,mode,timer,key,speed,duplex,pkey,linkmode); + run('cd ..'); + } +. +configuration net datalinks show +configuration net devices show +configuration net interfaces show +configuration net routing show + + +//####################################### +//# Show Configuration +//####################################### +cd / +configuration version show +configuration storage show +configuration cluster show +configuration cluster resources show + +script + var timestampformat='%Y-%m-%d %H:%M:%S (%Z)'; + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3] + run('configuration net datalinks'); + datalinks = list(); + var FORMAT='%-10s %-8s %-15s %-20s %-20s %-20s %-5s %-6s %-9s %-5s %-5s %-5s %-5s %-5s %-8s \n'; + printf(FORMAT,'ZFSSANode','Datalink','Class','Label','MAC','Links','MTU','policy','Mode','Timer','Key','Speed','Duplex','pkey','linkmode'); + printf(FORMAT,'=========','========','=====','=====','===','=====','===','======','====','=====','===','=====','======','====','========'); + for (i = 0; i < datalinks.length; i++) + { + run('select ' + datalinks[i]); + class = get('class'); + label = get('label'); + mac = get('mac'); + links = get('links'); + mtu = ''; + policy = ''; + mode = ''; + timer = ''; + pkey = ''; + speed = ''; + duplex = ''; + pkey = ''; + linkmode = ''; + if ( class == 'aggregation' ) + { + mtu = get('mtu'); + policy = get('policy') ; + mode = get('mode') ; + timer = get('timer') ; + key = get('key') ; + } + if ( class == 'device' ) + { + mtu = get('mtu'); + speed = get('speed') ; + duplex = get('duplex') ; + } + if ( class == 'partition' ) + { + pkey = get('pkey') ; + linkmode = get('linkmode') ; + } + printf(FORMAT + , ZFSSA_NODENAME + , datalinks[i] + , class + , label + , mac + , links + , mtu + , policy + , mode + , timer + , key + , speed + , duplex + , pkey + , linkmode + ); + run('cd ..'); + } +. + +configuration net datalinks show +configuration net devices show +configuration net interfaces show +configuration net routing show + + +//####################################### +//# Show Alerts +//####################################### +script + var timestampformat='%Y-%m-%d %H:%M:%S (%Z)'; + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3] + run('maintenance logs select alert'); + alerts = list(); + var FORMAT='%-10s %-12s %-26s %-100s\n'; + printf(FORMAT,'ZFSSA Node','Type' ,'Time' , 'Description'); + printf(FORMAT,'==========','===========' ,'=========================' ,'====================='); + for (i = 0; i < alerts.length; i++) + { + run('select ' + alerts[i]); + var type = get('type'); + var timestamp = get('timestamp').toLocaleFormat(timestampformat).toUpperCase(); + var description = get('description'); + var type_searchstring = '.*' + /* var timestamp_searchstring = '2014-6-1[1,2]' */ + var timestamp_searchstring = '.*' + var description_searchstring = '.*'; + if ( description.search( description_searchstring ) > -1 + && timestamp.search(timestamp_searchstring) > -1 + && type.search( type_searchstring ) > -1 + ) + { + printf(FORMAT + , ZFSSA_NODENAME + , type + , timestamp + , description + ); + } + run('cd ..'); + } +. + + + +//####################################### +//# Show NDMP Backups +//####################################### +script + var timestampformat='%Y-%m-%d %H:%M:%S (%Z)'; + print('############################################################' ); + print('NDMP Backups [' + new Date() + ']\n') + print('############################################################' ); + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3] + run('maintenance logs select alert'); + alerts = list(); + var FORMAT='%-10s %-20s %-15s %-25s %-25s %-20s\n'; + printf(FORMAT,'ZFSSA Node', 'Project' ,'Share' ,'StartTime' ,'EndTime' , 'DMA' ); + printf(FORMAT,'==========', '================' ,'===============' ,'========================' ,'=========================','====================' ); + var project=''; + var share=''; + var DMA=''; + var starttime=''; + var endtime=''; + for (i = 0; i < alerts.length; i++) + { + run('select ' + alerts[i]); + var msg=get('description'); + if ( msg.search(/An NDMP backup.*started/) > -1 ) + { + project = msg.split(/'/)[3]; + share = msg.split(/'/)[1]; + DMA = msg.split(/'/)[5]; + starttime = get('timestamp').toLocaleFormat(timestampformat).toUpperCase(); + endtime='' + } + if ( msg.search(/An NDMP backup has finished/) > -1 ) + { + var msg_search_string = "share '" + share + "' in project '" + project + "'" + if (msg.search(msg_search_string) > -1 ) + { + endtime = get('timestamp').toLocaleFormat(timestampformat).toUpperCase(); + } + printf(FORMAT, ZFSSA_NODENAME, project, share, starttime, endtime, DMA); + } + run('cd ..'); + } +. + + + +//####################################### +//# Show Audit Log +//####################################### +script + var timestampformat='%Y-%m-%d %H:%M:%S (%Z)'; + run('cd /'); + run('maintenance logs select audit'); + alerts = list(); + var FORMAT='%-28s %-15s %-15s %-30s %-20s \n'; + printf(FORMAT,'Time' ,'User' ,'Address' , 'Summary' , 'Annotation'); + printf(FORMAT,'========================' ,'================' ,'================', '======================','================'); + for (i = 0; i < alerts.length; i++) + { + run('select ' + alerts[i]); + printf(FORMAT + , get(' timestamp').toLocaleFormat(timestampformat).toUpperCase() + , get('user') + , get('address') + , get('summary') + , get('annotation') + ); + run('cd ..'); + } +. + + +//####################################### +//# Storage Space Usage +//####################################### +script + function BytesToString(bytes) + { + if (bytes>=Math.pow(1024,5)) {bytes=(bytes/Math.pow(1024,5)).toFixed(2)+'PB';} + else if (bytes>=Math.pow(1024,4)) {bytes=(bytes/Math.pow(1024,4)).toFixed(2)+'TB';} + else if (bytes>=Math.pow(1024,3)) {bytes=(bytes/Math.pow(1024,3)).toFixed(2)+'GB';} + else if (bytes>=Math.pow(1024,2)) {bytes=(bytes/Math.pow(1024,2)).toFixed(2)+'MB';} + else if (bytes>=Math.pow(1024,1)) {bytes=(bytes/Math.pow(1024,1)).toFixed(2)+'KB';} + else if (bytes>1) {bytes=bytes+' bytes';} + else if (bytes==1) {bytes=bytes+' byte';} + else {bytes='0 byte';} + return bytes; + } + print('' ); + print('#############################' ); + print('# ZFS Appliance Space Usage #' ); + print('#############################' ); + print('' ); + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3]; + run('status'); + run('storage'); + pools = list(); + for (i = 0; i < pools.length; i++) + { + run('select ' + pools[i]); + FORMAT1 = '%-15s: %10s\n'; + printf(FORMAT1,'ZFSSA NodeName',ZFSSA_NODENAME) ; + printf(FORMAT1,'Pool',pools[i]) ; + printf(FORMAT1,'State',get('state')) ; + printf(FORMAT1,'Total',BytesToString(get('used') + get('avail'))) ; + printf(FORMAT1,'Used',BytesToString(get('used'))) ; + printf(FORMAT1,'Avail',BytesToString(get('avail'))) ; + printf(FORMAT1,'Used%',(get('used')* 100 / (get('used') + get('avail')) ).toFixed(2) + '%') ; + printf(FORMAT1,'Avail%',(get('avail')* 100 / (get('used') + get('avail')) ).toFixed(2) + '%') ; + printf(FORMAT1,'Compression',get('compression') + 'x') ; + printf(FORMAT1,'Dedup',get('dedup') + 'x') ; + print('' ); + run('cd ..'); + } +. + + + + + +//####################################### +//# List Projects +//####################################### +script + function BytesToString(bytes) + { + if (bytes>=Math.pow(1024,5)) {bytes=(bytes/Math.pow(1024,5)).toFixed(2)+'PB';} + else if (bytes>=Math.pow(1024,4)) {bytes=(bytes/Math.pow(1024,4)).toFixed(2)+'TB';} + else if (bytes>=Math.pow(1024,3)) {bytes=(bytes/Math.pow(1024,3)).toFixed(2)+'GB';} + else if (bytes>=Math.pow(1024,2)) {bytes=(bytes/Math.pow(1024,2)).toFixed(2)+'MB';} + else if (bytes>=Math.pow(1024,1)) {bytes=(bytes/Math.pow(1024,1)).toFixed(2)+'KB';} + else if (bytes>1) {bytes=bytes+'B';} + else if (bytes==1) {bytes=bytes+'B';} + else {bytes='0';} + return bytes; + } + function lpad(str, len, pad) { + if (typeof(len) == "undefined") { var len = 0; } + if (typeof(pad) == "undefined") { var pad = ' '; } + if (len + 1 >= str.length) { + str = Array(len + 1 - str.length).join(pad) + str; + } + return str; + } + function rpad(str, len, pad) { + if (typeof(len) == "undefined") { var len = 0; } + if (typeof(pad) == "undefined") { var pad = ' '; } + if (len + 1 >= str.length) { + str = str + Array(len + 1 - str.length).join(pad); + } + return str; + } + var timestampformat='%Y-%m-%d %H:%M:%S (%Z)'; + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3]; + run('cd /'); + run('shares'); + projects = list(); + print('##################################' ); + print('PROJECTS ' ); + print('##################################' ); + print('' ); + var FORMAT='%-10s %-30s %-5s %-6s %-5s %-5s %-5s %-10s %-8s %-8s %-8s %-6s %-5s %-6s %-19s\n'; + printf(FORMAT,'' ,'' ,'' ,'Record' ,'' ,'Comp' ,'' , '' ,'' ,'' ,'' ,'' ,'' , '' ,'Creation' ); + printf(FORMAT,'ZFSSA Node','PROJECT' ,'ATIME','Size' ,'Comp' ,'Ratio' ,'Cache', 'LOGBIAS' ,'TOTAL' ,'DATA' ,'SNAP' ,'Shares','Snaps', 'Copies' ,'YYYY-MM-DD HH:MI:SS' ); + printf(FORMAT,'==========','=============' ,'=====','======' ,'====' ,'=====' ,'=====', '==========' ,'========' ,'========' ,'========' ,'======','=====', '======' ,'====================='); + for (i = 0; i < projects.length; i++) + { + run('select ' + projects[i]); + run('snapshots'); + snapshots = list(); + var noof_snapshots = 0; + noof_snapshots = snapshots.length; + run('cd ..'); + shares = list(); + var noof_shares = 0; + noof_shares = shares.length; + printf(FORMAT + , ZFSSA_NODENAME + , projects[i] + , get('atime') + , get('recordsize') + , get('compression') + , get('compressratio') + , get('secondarycache') + , get('logbias') + , lpad(BytesToString(get('space_total')),8) + , lpad(BytesToString(get('space_data')),8) + , lpad(BytesToString(get('space_snapshots')),8) + , noof_shares + , noof_snapshots + , get('copies') + , get('creation').toLocaleFormat(timestampformat).toUpperCase() + ); + run('cd ..'); + } +. + + +//####################################### +//# Projects Cleanup +//####################################### + +script + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3]; + run('cd /'); + run('shares'); + projects = list(); + print('##################################' ); + print('PROJECTS ' ); + print('##################################' ); + print('' ); + var FORMAT='%-10s %-30s %-7s %-7s %-7s %-6s %-5s %-6s %-20s %-30s\n'; + printf(FORMAT,'ZFSSA Node','PROJECT' ,'TOTAL' ,'DATA' ,'SNAP' ,'Shares','Snaps', 'Copies' ,'Creation' , 'Command' ); + printf(FORMAT,'==========','=============' ,'=====' ,'====' ,'====' ,'======','=====', '======' ,'========' , '======='); + for (i = 0; i < projects.length; i++) + { + if ( projects[i].search('CLONE_') > -1 ) + { + run('select ' + projects[i]); + run('snapshots'); + snapshots = list(); + var noof_snapshots = 0; + if ( snapshots.length > 0 ) { + noof_snapshots = snapshots.length; + } + run('cd ..'); + shares = list(); + var noof_shares = 0; + if ( shares.length > 0 ) { + noof_shares = shares.length; + } + creation=run('get creation').split(/=/)[1].split(/\n/)[0].substr(1); + creation=creation.split(/\s+/)[2] + '-' + creation.split(/\s+/)[1] + '-' + creation.split(/\s+/)[3] + ' ' + creation.split(/\s+/)[4] + ' ' + creation.split(/\s+/)[5]; + printf(FORMAT + , ZFSSA_NODENAME + , projects[i] + , run('get space_total').split(/\s+/)[3] + , run('get space_data').split(/\s+/)[3] + , run('get space_snapshots').split(/\s+/)[3] + , noof_shares + , noof_snapshots + , run('get copies').split(/\s+/)[3] + , creation + , 'confirm shares destroy ' + projects[i] + ); + run('cd ..'); + } + } +. + + + + + + +//####################################### +//# List Automatic Snapshot Schedules +//####################################### +script + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3]; + run('shares'); + var pool = run('get pool').split(/\s+/)[3]; + projects = list(); + print ('################################'); + print ('# Automatic Snapshot Schedules #'); + print ('################################'); + print('' ); + var FORMAT='%-10s %-10s %-30s %-30s %-9s %-9s %-5s %-5s\n'; + printf(FORMAT, 'ZFSSA Node' , 'POOL' , 'PROJECT' , 'AutoSchedule' , 'FREQUENCY', 'DAY' , 'HH:MM' ,'KEEP'); + printf(FORMAT, '==========' , '=======', '==============', '===============', '=========', '=========', '=====' ,'===='); + for (i = 0; i < projects.length; i++) + { + run('select ' + projects[i]); + run('snapshots automatic'); + autoschedule = list(); + if (autoschedule.length > 0 ) + { + for (j = 0; j < autoschedule.length; j++) + { + run('select ' + autoschedule[j]); + printf(FORMAT + , ZFSSA_NODENAME + , pool + , projects[i] + , autoschedule[j] + , run('get frequency').split(/\s+/)[3] + , run('get day').split(/\s+/)[3] + , run('get hour').split(/\s+/)[3] + ':' + run('get minute').split(/\s+/)[3] + , run('get keep').split(/\s+/)[3] + ); + run('cd ..'); + } + } + run('cd ..'); + run('cd ..'); + run('cd ..'); + } +. + + +//####################################### +//# List Snapshot Info (Project Level) +//####################################### +script + print ('#################################'); + print ('# Snapshot Info (Project Level) #'); + print ('#################################'); + print('' ); + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3]; + run('shares'); + projects = list(); + var FORMAT='%-10s %-10s %-30s %-30s %-6s %-6s %-12s %-19s\n'; + printf(FORMAT, 'ZFSSA Node' , 'POOL' , 'PROJECT' , 'SNAPSHOT' , 'ISAUTO', 'Clones', 'UniqueSpace', 'Creation'); + printf(FORMAT, '==========' , '=======', '==============', '===============', '======', '======', '===========', '====================='); + for (i = 0; i < projects.length; i++) + { + run('select ' + projects[i]); + run('snapshots'); + snapshots = list(); + if (snapshots.length > 0 ) + { + for (j = 0; j < snapshots.length; j++) + { + run('select ' + snapshots[j]); + creation=run('get creation').split(/=/)[1].split(/\n/)[0].substr(1); + creation=creation.split(/\s+/)[2] + '-' + creation.split(/\s+/)[1] + '-' + creation.split(/\s+/)[3] + ' ' + creation.split(/\s+/)[4] + ' ' + creation.split(/\s+/)[5]; + printf(FORMAT + , ZFSSA_NODENAME + , run('get pool').split(/\s+/)[3] + , projects[i] + , snapshots[j] + , run('get isauto').split(/\s+/)[3] + , run('get numclones').split(/\s+/)[3] + , run('get space_unique').split(/\s+/)[3] + , creation + ); + run('cd ..'); + } + } + run('cd ..'); + run('cd ..'); + } +. + + + +//####################################### +//# Project Snapshot Cleanup +//####################################### +script + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3]; + run('shares'); + projects = list(); + print ('############################'); + print ('# Project Snapshot Cleanup #'); + print ('############################'); + print('' ); + var FORMAT='%-10s %-10s %-30s %-60s\n'; + printf(FORMAT, 'ZFSSA Node' , 'POOL' , 'Creation' ,'Command'); + printf(FORMAT, '==========' , '=======', '==================' ,'========================================'); + for (i = 0; i < projects.length; i++) + { + run('select ' + projects[i]); + run('snapshots'); + snapshots = list(); + if (snapshots.length > 0 ) + { + for (j = 0; j < snapshots.length; j++) + { + //if ( ) + if ( snapshots[j].search('SNAP_') > -1 || snapshots[j].search('AL06') > -1 ) + { + run('select ' + snapshots[j]); + creation=run('get creation').split(/=/)[1].split(/\n/)[0].substr(1); + creation=creation.split(/\s+/)[2] + '-' + creation.split(/\s+/)[1] + '-' + creation.split(/\s+/)[3] + ' ' + creation.split(/\s+/)[4] + ' ' + creation.split(/\s+/)[5]; + printf(FORMAT + , ZFSSA_NODENAME + , run('get pool').split(/\s+/)[3] + , creation + , 'confirm shares select ' + projects[i] + ' snapshots destroy ' + snapshots[j] + ); + run('cd ..'); + } + } + } + run('cd ..'); + run('cd ..'); + } +. + + +//####################################### +//# Shares Info +//####################################### +script + print('##################################' ); + print('Shares Info ' ); + print('##################################' ); + print('' ); + run('cd /'); + run('shares'); + projects = list(); + var FORMAT='%-40s %-30s %-5s %-5s %-9s %-10s %-7s %-7s %-7s %-5s %-7s %-19s\n'; + printf(FORMAT ,'SHARE' , 'MOUNTPOINT', 'ATIME', 'Comp', 'CompRatio', 'LOGBIAS', 'TOTAL', 'DATA', 'SNAP', 'Snaps', 'COPIES', 'Creation'); + printf(FORMAT, '============', '==========', '=====', '====', '=========', '=======', '=====', '====', '====', '=====', '======', '========================='); + for (i = 0; i < projects.length; i++) + { + run('select ' + projects[i]); + shares = list(); + if ( shares.length > 0 ) + { + for (j = 0; j < shares.length; j++) + { + run('select ' + shares[j]); + run('snapshots'); + snapshots = list(); + var noof_snapshots = 0; + if ( snapshots.length > 0 ) { + noof_snapshots = snapshots.length; + } + run('cd ..'); + creation=run('get creation').split(/=/)[1].split(/\n/)[0].substr(1); + creation=creation.split(/\s+/)[3] + '-' + creation.split(/\s+/)[2] + '-' + creation.split(/\s+/)[4] + ' ' + creation.split(/\s+/)[5] ; + printf(FORMAT + , projects[i] + '/' + shares[j] + , run('get mountpoint').split(/\s+/)[3] + , run('get atime').split(/\s+/)[3] + , run('get compression').split(/\s+/)[3] + , run('get compressratio').split(/\s+/)[3] + , run('get logbias').split(/\s+/)[3] + , run('get space_total').split(/\s+/)[3] + , run('get space_data').split(/\s+/)[3] + , run('get space_snapshots').split(/\s+/)[3] + , noof_snapshots + , run('get copies').split(/\s+/)[3] + , creation + ); + run('cd ..'); + } + } + run('cd ..'); + } +. + + +//####################################### +//# List Snapshot Info (Share Level) +//####################################### +script + print ('#################################'); + print ('# Snapshot Info (Share Level) #'); + print ('#################################'); + print('' ); + run('cd /'); + run('shares'); + projects = list(); + var FORMAT='%-10s %-30s %-15s %-7s %-25s %-6s %-6s %-6s %-19s\n'; + printf(FORMAT, '' , '' , '' , 'Snap' , '' , '' , '' , 'Unique' , '' ); + printf(FORMAT, 'POOL' , 'PROJECT' , 'SHARE' , 'Level' , 'SNAPSHOT' , 'ISAUTO', 'Clones' , 'Space' , 'Creation'); + printf(FORMAT, '=======', '==============', '==============', '=====' , '===============', '======', '======' , '======' , '====================='); + for (i = 0; i < projects.length; i++) + { + run('select ' + projects[i]); + shares = list(); + if (shares.length > 0 ) + { + for (j = 0; j < shares.length; j++) + { + run('select ' + shares[j]); + run('snapshots'); + snapshots = list(); + if (snapshots.length > 0 ) + { + for (k = 0; k < snapshots.length; k++) + { + var snaplevel = ''; + run('select ' + snapshots[k]); + run('cd ..'); + run('cd ..'); + run('cd ..'); + run('snapshots'); + try { + run('select ' + snapshots[k] ); + run('cd ..'); + snaplevel = 'Project'; + } catch (err) { + snaplevel = 'Share'; + } + run('cd ..'); + run('select ' + shares[j]); + run('snapshots'); + run('select ' + snapshots[k]); + creation=run('get creation').split(/=/)[1].split(/\n/)[0].substr(1); + creation=creation.split(/\s+/)[3] + '-' + creation.split(/\s+/)[2] + '-' + creation.split(/\s+/)[4] + ' ' + creation.split(/\s+/)[5] ; + if ( snaplevel != 'Project' ) { + printf(FORMAT + , run('get pool').split(/\s+/)[3] + , projects[i] + , shares[j] + , snaplevel + , snapshots[k] + , run('get isauto').split(/\s+/)[3] + , run('get numclones').split(/\s+/)[3] + , run('get space_unique').split(/\s+/)[3] + , creation + ); + } + run('cd ..'); + } + } + run('cd ..'); + run('cd ..'); + } + } + run('cd ..'); + } +. + + + + +//####################################### +//# List Analytic Worksheets +//####################################### +script + print ('#########################'); + print ('# Analytic Worksheets #'); + print ('#########################'); + print('' ); + var WORKSHEET_FORMAT='%-10s %-35s %-7s %-20s %-20s %-20s\n'; + printf(WORKSHEET_FORMAT, 'ZFSSA Node' , 'Worksheet Name' ,'Seconds','Owner','Modified','Created'); + printf(WORKSHEET_FORMAT, '==========' , '==============' ,'=======','=====','========','======='); + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3]; + run('analytics worksheets'); + worksheets = list(); + for (i = 0; i < worksheets.length; i++) + { + run('select ' + worksheets[i]); + name = run('get name').split(/=/)[1].split(/\n/)[0].substr(1); + owner = run('get owner').split(/=/)[1].split(/\n/)[0].substr(1); + ctime = run('get ctime').split(/=/)[1].split(/\n/)[0].substr(1); + mtime = run('get mtime').split(/=/)[1].split(/\n/)[0].substr(1); + printf(WORKSHEET_FORMAT + , ZFSSA_NODENAME + , name + , ' ' + , owner + , mtime + , ctime + ); + datasets = list(); + var DATASET_FORMAT='%-15s %-30s %-20s\n'; + for (j = 0; j < datasets.length; j++) + { + run('select ' + datasets[j]); + printf(DATASET_FORMAT + , ' ' + , run('get name').split(/=/)[1].split(/\n/)[0].substr(1) + , run('get seconds').split(/=/)[1].split(/\n/)[0].substr(1) + ); + run('done'); + } + print(''); + run('done'); + } +. + + + +//####################################### +//# List Analytic Datasets +//####################################### +script + print ('#########################'); + print ('# Analytic Datasets #'); + print ('#########################'); + print('' ); + run('cd /'); + var ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3]; + run('analytics settings'); + print('Settings:' ); + print(run('get retain_second_data')); + print(run('get retain_minute_data')); + print(run('get retain_hour_data')); + print('' ); + var FORMAT='%-10s %-11s %-10s %-10s %-6s %-6s %-10s %-40s %-40s \n'; + printf(FORMAT, 'ZFSSA Node' , 'Dataset ID' ,'Grouping','State' ,'InCore' ,'OnDisk','Activity' ,'Dataset Name' ,'Description'); + printf(FORMAT, '==========' , '==========' ,'========','========','======','======','==========','=======================','============================='); + run('cd /'); + run('analytics datasets'); + datasets = list(); + for (i = 0; i < datasets.length; i++) + { + run('select ' + datasets[i]); + var state; + if ( run('get suspended').split(/\s+/)[3] == 'true') { state = 'Suspended';} + else { state = 'Active';} + //if ( state = 'Active' ) + //{ + printf(FORMAT + , ZFSSA_NODENAME + , datasets[i] + , run('get grouping').split(/\s+/)[3] + , state + , run('get incore').split(/\s+/)[3] + , run('get size').split(/\s+/)[3] + , run('get activity').split(/\s+/)[3] + , run('get name').split(/\s+/)[3] + , run('get explanation').split(/=/)[1].split(/\n/)[0].substr(1) + ); + //} + run('cd ..'); + } +. + + +//####################################### +//# Display ZFS Statistics +//####################################### + +script + print ('#########################'); + print ('# Analytic Datasets #'); + print ('#########################'); + print('' ); + var dataset_name = 'ip.bytes[hostname]'; + var seconds_to_read = 10; + var datetime; + var ZFSSA_NODENAME; + var value; + var breakdown; + run('cd /'); + ZFSSA_NODENAME = run('configuration version get nodename').split(/\s+/)[3].toLowerCase(); + run('cd /'); + run('analytics datasets'); + datasets = list(); + for (f = 0; f < datasets.length; f++) + { + run('select ' + datasets[f]); + name = run('get name').split(/\s+/)[3]; + //print (name); + if ( name == dataset_name ) + { + // Get last N seconds data including breakdown and iterate through line + line = run('read ' + seconds_to_read).split(/\n/); + for (i = 0; i -1 ) + { + creation = dateToString(get('creation')); + if ( creation < threshold_date ) + { + printf(FORMAT + , ZFSSA_NODENAME + , run('get pool').split(/\s+/)[3] + , get('creation') + , 'confirm shares destroy ' + projects[i] + ); + } + } + run('snapshots'); + snapshots = list(); + if (snapshots.length > 0 ) + { + for (j = 0; j < snapshots.length; j++) + { + if ( snapshots[j].search(SNAPNAME_PREFIX1) > -1 || snapshots[j].search(SNAPNAME_PREFIX2) > -1 ) + { + run('select ' + snapshots[j] ); + creation = dateToString(get('creation')); + if ( creation < threshold_date ) + { + printf(FORMAT + , ZFSSA_NODENAME + , run('get pool').split(/\s+/)[3] + , get('creation') + , 'confirm shares select ' + projects[i] + ' snapshots destroy ' + snapshots[j] + ); + } + run('cd ..'); + } + } + } + } +. + + + + + +//######################################################## +//# Scratchpad +//######################################################## +script +print(get('creation').getUTCDate().toString() ); +print(get('creation').toDateString() ); +. + + +script +creation = get('creation').getUTCFullYear().valueOf(); +if ( get('creation').getUTCMonth().toString().length == 1 ) +{ creation = creation + '0' + get('creation').getUTCMonth(); } +else { creation = creation + get('creation').getUTCMonth(); } + +if ( get('creation').getUTCDate().toString().length == 1 ) +{ creation = creation + '0' + get('creation').getUTCDate(); } +else { creation = creation + get('creation').getUTCDate(); } + +if ( creation > '20140910') +{ print(creation + ' date is older');} +else +{ print(creation +' date is new');} +. + + +script +var mydate= new Date(); +var mydate2= new Date(); +print(mydate.toString()); +print(mydate2.toString()); +mydate2 = mydate2.toString() - 10; +print(mydate2.toString()); +. + + + +script + function SuffixToMultiplier(suffix) + { + switch (suffix) + { + case('K'): return Math.pow(1024,1); break; + case('M'): return Math.pow(1024,2); break; + case('G'): return Math.pow(1024,3); break; + case('T'): return Math.pow(1024,4); break; + case('P'): return Math.pow(1024,5); break; + default: return 1; break; + } + } + + function StringtoBytes(value) + { + if ( value.charAt(value.length-1). ) + { + return value.substr(0,value.length - 1) * SuffixToMultiplier(value.charAt(value.length-1)); + } + } + +. + + +script + function BytesToString(bytes) + { + if (bytes>=Math.pow(1024,5)) {bytes=(bytes/Math.pow(1024,5)).toFixed(2)+' PB';} + else if (bytes>=Math.pow(1024,4)) {bytes=(bytes/Math.pow(1024,4)).toFixed(2)+' TB';} + else if (bytes>=Math.pow(1024,3)) {bytes=(bytes/Math.pow(1024,3)).toFixed(2)+' GB';} + else if (bytes>=Math.pow(1024,2)) {bytes=(bytes/Math.pow(1024,2)).toFixed(2)+' MB';} + else if (bytes>=Math.pow(1024,1)) {bytes=(bytes/Math.pow(1024,1)).toFixed(2)+' KB';} + else if (bytes>1) {bytes=bytes+' bytes';} + else if (bytes==1) {bytes=bytes+' byte';} + else {bytes='0 byte';} + return bytes; + } + print (BytesToString(102345000000000667)); + print (BytesToString(10125)); +. + + +